From f4a7fa863e48bbec050fcc3c1fcd5ffd13b09c45 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 30 Sep 2026 18:05:12 +0800 Subject: [PATCH] docs(agent): AG-4 runbook and changelog (spawn dedupe, subagent language, session stats) Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 6 ++++++ docs/runbook/agent.md | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98243e5c..5bac7a95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ ## [Unreleased] +### 变更(AG-4 智能体与浏览器零碎问题) +- 子会话系统提示与父会话一样要求思考、步骤说明和汇报都用中文(目标、工具结果是英文也一样)。 +- `agent.spawn` 同目标去重:同一父会话里同一目标的子会话还在运行或 10 分钟内已完成时不再新建,返回已有子会话与结果摘要(`reused: true`)。 +- 浏览器会话保活:桌面连接、人工接管、智能体会话正在用的会话每 2 分钟做一次只读调用(`BROWSER_KEEPALIVE_MS`,0 = 关闭),不再被 camofox 空闲 5 分钟回收;用完照常回收,保活时标签页已被回收按 BR-3 自愈重连。 +- 会话页:概况条上方恒定一行会话统计(工具调用、MCP、已用 token、距上限剩余、费用);本轮进行中显示「思考中 · 已调用 N 次工具」,结束后并入进度行;汇报兜底不再列「换掉的标识」,原始汇报只在技术信息「原文」里。 + ## [0.3.2] - 2026-09-30 ### 新增(BR-4 浏览器 UA 与指纹统一) diff --git a/docs/runbook/agent.md b/docs/runbook/agent.md index 9f894caa..e6f9509d 100644 --- a/docs/runbook/agent.md +++ b/docs/runbook/agent.md @@ -77,6 +77,8 @@ AG-3 补的只读摘要(类别 read,scope `read`,都在后台调查 / 巡检白 **预算提醒**:工具调用只剩 ≤2 次,或 token / 费用 / 时长用到 85% 时,运行时在工具结果末尾追加「【预算提醒】…停止探查,下一条回复直接用中文写小结」,系统提示要求模型见到后直接收尾。 **等待期间的用量**:会话挂起(审批 / 选方案 / 等子会话)时没有 `run_completed`,drive 退出前把运行时累计用量按字段取较大值写回 `agent_run.usage`,会话页和列表在等待期间照样显示已用 token / 费用。 + 会话页(AG-4):概况条上方恒定一行会话统计「工具调用 N 次 · token 45.2K · 剩 154.8K(77%) · 费用 $0.03」(有 MCP 工具调用时加「MCP N 次」,没设 token 上限不写剩余;运行中随事件流更新);运行中本轮末尾一行「思考中 / 调用工具中 / 回答中 · 已调用 N 次工具、M 次 MCP」,本轮结束后次数并入进度行「调用 N 次工具」。内置智能体目前只调用本工具的能力,MCP 计数只对外部 MCP 工具(`mcp__…` / `域__动作` 形式的工具名)生效。汇报兜底(FIX-7)换掉的 ID / 能力名 / 原因码不再在正文下列映射表,原始汇报只放在结果行「技术信息」的「原文」里。 + 模型汇报在会话页按 Markdown 安全子集渲染(标题、列表、表格、引用、代码、粗体 / 斜体 / 链接;原文 HTML 按文字显示,链接只放行 http(s) 与站内路径),流式输出中仍按原文显示。 worker 崩溃后,新 worker 在引擎租约到期后(约 30s)接手,`drive` 步骤会从头重跑。已经完成的工具调用不会重放。副作用调用的结果模型会看到"结果未知",模型需要重新核对;同参数再调用一次,会直接拿到账本里的结果。 @@ -258,6 +260,8 @@ OpenRouter 换到的是永久 key,不刷新。 - 开关:`pi.subagents.enabled`(设置页「允许子代理」,旧字段 `subagentsEnabled` 同步),关闭时模型拿不到 `agent.spawn`,服务端也拒绝派生。 - 用法:会话调用 `agent.spawn {goal, capabilityAllowlist?, budget?, mode?, upstreamId?, await?}` 派生子会话(独立 agent_run、同一 runAgent 任务、独立会话文件),再用 `agent.await` 取各子会话的状态与汇报摘要(已脱敏)。 - 权限:子会话能力白名单必须是父会话的子集,只读(内部 plan_only)的会话只能派生只读子会话,父会话要求先看方案时子会话同样等方案选定,子会话继承父会话发起人,授权校验再按全部祖先会话的白名单与类别取交集。 +- 同目标去重(AG-4):同一父会话里目标归一化后相同(NFKC、忽略大小写、空白与标点)的子会话还在排队 / 运行,或 10 分钟内成功完成 / 已在等下载入库时,`agent.spawn` 不新建,返回已有子会话:输出 `reused: true`、`message`「已有同目标子会话…」、`result` 带它当前的结果摘要(还在跑时 `pending: true`)。失败、取消、超预算的子会话不复用(可换预算重派)。同一父会话的派生判定进程内串行,同一批并行的两次同目标调用也只建一个。会话树与结果行的「派出 N 个子会话」不变;进度行不把去重调用算成派出。恢复重放按幂等键命中原子会话,不走去重。 +- 子会话语言(AG-4):子会话 / 视觉子流程的系统提示有「汇报对象」一节——汇报交给父会话汇总(可带对象 ID),思考、步骤说明和汇报一律用中文,即使目标、工具结果或网页是英文;父会话的派生约束也要求子目标用中文写。回归测试 `packages/agent/test/system-prompt.test.ts`。子会话汇报回到用户面前有两条路:父会话的最终汇报(按 FIX-7 展示层兜底,子会话 ID 换成子会话目标名)和打开子会话页(同一展示组件,同样兜底);`agent.spawn` / `agent.await` 的步骤行不显示汇报原文。 - 限制:同一父会话下同时运行的子会话不超过 `maxConcurrent`(多出的排队等名额,不占 worker 也不调用模型),派生层数不超过 `maxDepth`,一个会话最多派生 10 个子会话。 - 预算:子会话预算从父会话剩余预算划拨(缺省剩余的一半,请求超过剩余直接拒绝),子会话超预算只结束它自己;父会话的工具调用 / token / 费用预算把子孙会话的实际用量算在内。 - 取消:中止父会话会递归取消全部未结束的子孙会话(排队中的也一样)。