Browser Skill 与 Cindy 内置浏览器调用面不一致,导致会话误报浏览器不可用
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## Project state
- Status: 待评估
- Owner: 待认领
- Priority: P1
- Source session: `d6266fc4-cfe8-4f7a-8dad-5f488058f375`
- Next: 确认 Cindy 宿主应统一使用 `cindy_browser`,还是为 bundled Browser Skill 补齐其依赖的执行入口,并覆盖 Codex/Claude 会话注册测试。
## Problem
Cindy 会话中已经暴露了 Browser Skill,但实际执行时,Skill 尝试调用未挂载的 `mcp__node_repl__js`,报错:
```text
tools.mcp__node_repl__js is not a function
```
随后 agent 将其解释为“浏览器控制接口不可用”,并错误地引导用户配置 `MAKER_VSCODE_GUARD_TOKEN`。该 token 只与 Maker OpenVSCode 容器的只读会话采集有关,不是 Cindy 内置浏览器的依赖。
从 Cindy 当前代码看,产品内置浏览器实际通过 `cindy_browser` MCP 提供:
- `apps/desktop/src/main/mcp-integrations/browser.ts` 创建并注入 `BrowserControlRuntime`
- `apps/desktop/src/main/mcp-integrations/mcp-providers.ts` 传入 `browser: getBrowserMcpDeps()`
- `packages/lizi-mcps/src/providers.ts` 注册 provider `name: 'cindy_browser'`
因此现状存在两套不一致的调用面:bundled Browser Skill 依赖 `mcp__node_repl__js`,而 Cindy 宿主提供 `cindy_browser`。在出问题的会话中,agent 没有获得可执行的正确调用面,或没有被路由到该调用面。
当前另一个 Cindy 会话调用 `cindy_browser` 的 `status` 返回:
```json
{
"ready": true,
"backend": "rsb-webview",
"tabCount": 0
}
```
这说明问题发生在会话级工具注册/Skill 路由层,而不是浏览器安装、站点登录或 Maker 链接授权层。
## Reproduction
1. 在 Cindy 新建一个 agent 会话。
2. 请求执行一个需要内置浏览器的任务,例如通过浏览器打开 Maker OpenVSCode 页面并复用登录态。
3. 会话能够看到 Browser Skill,但其依赖的执行入口没有挂载,或 Skill 没有路由到 Cindy 的 `cindy_browser` MCP。
4. agent 调用 `mcp__node_repl__js` 时得到 `is not a function`,随后报告浏览器不可用。
> 该问题可能与 agent provider、会话创建时的工具快照或版本错位有关,需要分别核对 Codex 与 Claude 路径。
## Expected
- 只要 Browser Skill 对会话可见,该会话就必须拥有可执行且与 Skill 契约一致的浏览器调用面。
- Cindy 宿主环境应统一路由到 `cindy_browser`,或为 bundled Browser Skill 提供其声明依赖的执行入口;不能同时暴露互不兼容的 Skill 与工具面。
- 浏览器工具未挂载时,应报告工具注册/宿主能力错误,不得误导用户配置 `_GuardToken` 或重新登录目标网站。
## Actual
- Browser Skill 可见,但执行工具不存在。
- agent 在初始化阶段直接失败,尚未触达 Cindy 浏览器运行时。
- 错误被误判为目标站点授权问题,用户被要求提供无关的 `_GuardToken`。
## Acceptance criteria
- [ ] Cindy 中 Browser Skill 的可见性与实际浏览器执行入口保持原子一致:可见即能调用,不可调用则不暴露 Skill。
- [ ] Cindy-hosted Codex 和 Claude 会话均能稳定发现并调用正确的内置浏览器工具面。
- [ ] 新建、恢复/续聊、工具配置变更后的会话都覆盖浏览器工具注册回归测试。
- [ ] 缺失工具与浏览器运行时启动失败使用不同错误码/文案,能够明确定位到注册层或运行时层。
- [ ] 浏览器工具注册失败时,不再建议用户配置 `MAKER_VSCODE_GUARD_TOKEN`。
- [ ] 增加回归用例,覆盖“Skill 已暴露但底层工具未挂载”和“Cindy 浏览器已 ready 但 agent 选错调用面”两种情况。
## Notes
需要重点检查:
- bundled Browser Skill 与 Cindy `cindy_browser` MCP 的能力声明是否同时注入;
- provider/tool 清单是否在会话创建时冻结,恢复会话后是否沿用了过期快照;
- Codex 与 Claude 的 MCP 构建路径是否存在差异;
- Browser plugin 的项目级开关与 Skill 可见性是否使用了不同 gate。
Contributor guide
Research direction
Start with apps/desktop/src/main/mcp-integrations/browser.ts and mcp-providers.ts, then trace getBrowserMcpDeps into packages/lizi-mcps/src/providers.ts and the cindy_browser registration. Compare tool registration and session restoration for Cindy-hosted Codex and Claude paths. Done means visible Browser Skills have a callable matching tool surface, missing registration is reported distinctly, and the listed new, resumed, and configuration-change regression cases pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, typescript
- Domain
- desktop, devtools, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100