Skip to content

✨ feat(sidecar,desktop): 添加任务级内置浏览器工具与剪枝快照 - #266

Open
CavinHuang wants to merge 4 commits into
mainfrom
codex/browser-tools-snapshot-260
Open

✨ feat(sidecar,desktop): 添加任务级内置浏览器工具与剪枝快照#266
CavinHuang wants to merge 4 commits into
mainfrom
codex/browser-tools-snapshot-260

Conversation

@CavinHuang

@CavinHuang CavinHuang commented Aug 20, 2026

Copy link
Copy Markdown
Owner

结果

完成任务级内置浏览器控制的首个纵向闭环:模型直接调用 5 个宿主 Browser Tools,不再依赖 Browser Skill 与 Node REPL 编写 BrowserClient 控制代码。

变更

  • 新增 mcp__browser__list_tabsopenswitch_tabsnapshotrun_script
  • 每个任务持有独立 BrowserSession,并锁定自己的 Agent 标签页;只有 switch_tab 会显式切换
  • Desktop 使用 Accessibility.getFullAXTree 生成剪枝语义树,可交互节点获得会话内稳定的 eN 引用
  • 大页面由宿主 cursor 分页
  • run_script 只在锁定标签页的全新 Chromium 隔离世界执行,带大小、超时、序列化和确认边界
  • 普通 Agent 任务不再暴露或要求激活 browser:browser;整条用户请求的内部迭代直接复用内置工具
  • 用户显式引用已有用户标签页时,仍保留旧 Skill 的授权 claim 流程
  • Browser 结果提供稳定页面状态,供 【P0】【Agent Loop】缺少重复动作与停滞熔断,浏览器任务成功后仍继续调用 #254 / PR 🐛 fix(sdk): 阻止工具循环重复执行 #272 判断重复动作时忽略 operation/tab id
  • 子代理暂不获得主任务 Browser Tools,避免并发共享标签页

验证

  • Browser Tool 单元测试:4 pass
  • ContextAssembler:20 pass
  • runtime-core Browser route:1 pass
  • Browser Runtime / snapshot 相关测试通过
  • @lume/sidecar typecheck 通过
  • @lume/desktop typecheck 通过

后续

这是 #260#261 的首个纵向切片,不自动关闭它们。后续 PR 继续补齐 ref 动作工具、actionability 等待、动作后观察和用户接管状态机。

Closes #255
Related: #251 #254 #260 #261 #262 #263 #272

把任务级 BrowserSession、Agent 标签页锁定和 AX Tree 剪枝快照下沉到宿主工具层,模型无需再通过 Node REPL 编写浏览器控制代码。保留现有 BrowserClient DOMSnapshot 路径,便于后续动作工具渐进迁移。

Constraint: 保留旧 BrowserClient DOMSnapshot 兼容路径

Constraint: 子代理不共享主任务的浏览器控制标签页

Tested: 32 个相关单元测试通过

Tested: @lume/sidecar 与 @lume/desktop 类型检查通过
为内置 Browser Tools 增加 run_script。脚本仅能在当前任务锁定的 Agent 标签页中运行,每次创建全新隔离世界,并通过现有浏览器动作确认策略执行。参数、时间和 JSON 结果均设置宿主边界,页面异常以结构化工具错误返回。

Constraint: 脚本不能控制用户标签页或其他任务标签页

Constraint: 任意脚本执行必须经过浏览器动作确认

Constraint: 返回值必须可 JSON 序列化且不超过 200000 字符

Rejected: 复用 Node REPL 注入 BrowserClient | 继续依赖模型拼装控制代码

Tested: 41 个相关单元测试通过

Tested: @lume/desktop 与 @lume/sidecar 类型检查通过
@CavinHuang CavinHuang changed the title ✨ feat(sidecar,desktop): 添加内置浏览器剪枝快照工具 ✨ feat(sidecar,desktop): 添加任务级内置浏览器工具与剪枝快照 Aug 20, 2026
浏览器工具结果包含 operation id 与 tab id 等易变字段,不能直接用于判断页面是否产生新进展。为 open、switch_tab、run_script 和错误结果提供稳定状态,供 Agent Loop 的重复动作熔断使用。

Constraint: 不改变模型可见的浏览器工具结果

Tested: bun test apps/sidecar/src/services/agent-runtime/tools/browser/create-browser-tools.test.ts

Tested: bun run --filter @lume/sidecar typecheck
@CavinHuang

Copy link
Copy Markdown
Owner Author

补充与 #254 / PR #272 的运行时熔断集成:Browser 工具现在通过 _meta.repeatGuard.state\ 提供稳定状态,重复 open 即使产生不同 operation_id/tab_id,也能按 URL、标题和 generation 判断是否没有新进展。

普通 Agent 浏览器任务直接使用 mcp__browser__* 工具,并在整条用户请求的内部迭代间复用,不再暴露或要求激活 browser:browser。用户显式引用已有浏览器页面时仍保留旧 claim 流程。

Constraint: 浏览器附件仍依赖旧 Skill 的用户 Tab 授权流程

Rejected: 仅修改 Skill 文案 | 仍会暴露 Node REPL API 猜测路径

Tested: ContextAssembler 20 tests

Tested: runtime-core Browser route test

Tested: bun run --filter @lume/sidecar typecheck
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

【BUG】【Browser Skill】turn 语义混乱导致重复激活并诱发未公开 API 猜测

2 participants