Files
agent-workbench/references/operations.md

66 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 运行接入
## 配置与部署
服务由 `python3 -m agent_control.server --config <私有JSON>` 启动。先构建 `assets/dashboard/`,生产静态根默认是其 `dist/`;`web_root` 可指向本轮明确的构建产物。
`scripts/setup.py` 在指定的当前账号家目录内建立私有运行根、配置与随机令牌,支持可选的自有 systemd 用户服务。不使用 sudo,不修改其他服务、网络、认证或防火墙。令牌文件权限600,运行根700,SQLite位于本地盘;不放入NFS、仓库或前端代码。
`examples/control.example.json` 展示配置字段。`bind` 必须明确为内网/回环IPv4,`allowed_hosts` 包含确实使用的域名与端口;`title` 为当前项目名称,`primary_session_id` 指定人类沟通会话。保留来源校验,不关闭TLS或主机身份验证来解决连接问题。
HTTP服务适合受控局域网或受保护隧道。跨不可信网络使用经过授权的TLS反向代理;公开代码仓库不意味着允许公开运行端口。服务使用单一操作员令牌,不是多租户权限系统;`source`标签不能证明人类批准。
## API与状态
读写API使用 `Authorization: Bearer <令牌>`;写操作还需 `X-CSRF-Token: 1`。浏览器令牌只放内存,退出清理。静态资源不包含运行数据。
| 接口 | 用途 |
|---|---|
| `GET /api/state` | 任务、会话连接、事件、指标缓存、默认会话与项目标题 |
| `POST /api/sessions` | 注册真实会话映射;`id/wp/name/role/worktree/thread_id` |
| `POST /api/session-requests` | 保存新会话请求,不声称已经创建 |
| `POST /api/tasks`、`PATCH /api/tasks/<id>` | 任务状态、阶段、ETA范围/依据和待决策 |
| `POST /api/messages` | `session_id/text/source/idempotency_key`,定向消息 |
| `GET /api/messages?session_id=<id>` | 当前会话最近500条消息及投递状态 |
| `POST /api/worker/claim` | 串行领取,返回有限租期及领取身份 |
| `POST /api/worker/start`、`renew` | 记录可能产生副作用的执行开始与续租 |
| `POST /api/worker/submission` | 在发送前登记完整输入哈希,随后持久保存真实排队回执与观察到的turn |
| `POST /api/worker/complete`、`uncertain` | 幂等回执或结果未知;未知停止该会话自动领取 |
| `POST /api/messages/reconcile` | 人工核查后显式重试/失败,须记录依据 |
| `POST /api/mirror` | 绑定thread的可见历史导入、更新、关联原输入/最终回复 |
| `POST /api/events` | 工作包汇报、方案、决策、队列回执等事件 |
任务状态:`queued/running/blocked/waiting/completed/failed/cancelled`。阶段:`planning/implementation/validation/integration/done`。完成任务须为done阶段。ETA包含最小值、最大值和依据;没有可靠估计时为空。
源代码与行为测试维护精确校验规则。接口没有任意命令执行能力,采集不在HTTP请求中同步运行。
`GET /api/messages` 的原输入行包含submission元数据。镜像只有在完整实际输入的服务端哈希、目标thread及已知turn都与登记记录一致时才能关联原消息;旧版本已投递但没有submission的消息须人工核查,不能伪造回执或重发来补登记。活跃领取中的最终回复可返回deferred,镜像不推进该项checkpoint,后续重试关联。正常输入上限32000字符;完整镜像正文及回复上限262144字符,对应请求体上限4MiB,超出明确拒绝而不截断或自动重执行。
## 当前会话与桥接
加载skill时默认绑定当前真实会话;用户明确要求专门入口才另建,并将其设为默认。用宿主受支持工具确认真实ID,建立项目归属与看板映射。不要把内部执行器thread和桌面会话混为一谈。
执行器使用既有模型登录。集群未认证时让本机运行worker和mirror,服务/指标留在集群;模型凭据不离开本机。远程API可用 `control.transport="ssh"`:配置入口账号、独立私钥、`remote_client` 与 `remote_config`。客户端使用严格主机校验,在服务端内存读取服务令牌;不把令牌或模型认证拷进前端。
`desktop_queue`模式向原thread使用官方`codex queue`发送。保存外部回执、输入哈希和观察到的turn,精确匹配完整输入,不把用户正文引用的标记当作回执。队列回执与历史的clientId并无已验证的一对一保证,不能擅自假定相等。独立`exec resume`遇到桌面writer锁时不得抢占;可用性必须按本机版本验收。
镜像通过官方App Server分页历史读取用户、助手可见正文和明确的跨会话汇报;排除推理与工具日志。保留外部thread/turn/item ID、来源和修订;checkpoint绑定服务端点、会话和协议版本,换目标须显式处理旧状态。网页输入与最终回复关联原队列消息,去重且能补回超时后的真实最终结果。
已开始的执行失联后不自动重跑。重启发现inflight或待对账时,先查保存的回执、原会话、现有进程和产物;不能因一个本机进程结束就认为远端操作没发生。确认原操作已完成则收敛回执,只有明确核查和批准后才重试。
对已accepted/unknown的旧投递,不在同一message下更换输入哈希重试。核查并结束旧投递后,确需再次执行时建立带新幂等键的新消息,保留旧记录与人工依据;不要通过清空数据库恢复执行。
Windows下桌面队列命令受系统命令行长度限制;过长消息与上下文明确失败,不截断用户正文后静默提交。可缩小上下文或按用户意图拆成多条消息。
## 指标与扩展
默认配置仅本机只读指标。远程主机必须在本地可信配置中明确列出并加入白名单,使用获准入口与身份。NFS只读挂载统计,不递归扫描工程。调度器wrapper路径由站点配置,wrapper仅接收固定采集参数。
LSF主机/队列RUN计数可能是槽位数,不能等同作业记录数量。Slurm与LSF分别显示节点状态、队列/作业汇总、错误和时间;缺命令、缺配置与无权限不补零。新指标实现受控采集器和解析回归,不能让网页提交shell文本。
## 定期汇报与验收
用户要求定期汇报时,使用宿主正式heartbeat/automation工具,默认每10分钟检查活跃任务并向当前映射会话汇报。记录真实任务ID、目标会话和周期;项目结束后停止该项目的周期汇报。单独的后台Python进程不会自动产生模型汇报,不要误称已设置定时任务。
真实验收分别记录:认证和来源保护、消息隔离/幂等、租期/失联恢复、同一真实会话往返、原会话汇报镜像、五分页及返回刷新、窄屏、真实采集、局域网直连。模拟通过不能替代真实模型/集群测试。原业务项目仍执行其自己的测试和原生工具验收。