vcorp-chrome 1.8.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -189,7 +189,7 @@ args = ["-y", "vcorp-chrome", "mcp", "--client", "codex"]
189
189
  | `navigate` `tabs` `wait` `scroll` | 导航、标签页、等待、滚动加载 |
190
190
  | `read_text` | 正文提取成 markdown,去掉导航页脚广告和头像图 |
191
191
  | `query` | 按 CSS selector 结构化提取,用于没有可用接口的站点;`contains` 按文本找元素——「页面上有没有这句话」「这个状态字现在是什么」不必再写 eval |
192
- | `upload` | 把本地文件塞进网页的上传框——系统文件对话框是扩展够不着的,这是唯一的路 |
192
+ | `upload` | 把本地文件塞进网页的上传框,首选这条;页面已经弹出了系统文件对话框,用 `desktop` 接手 |
193
193
  | `eval` | 跑一段 JS。在页面自己的世界里求值,所以受**页面** CSP 管,大站会拦 |
194
194
 
195
195
  **批处理**
@@ -210,6 +210,13 @@ args = ["-y", "vcorp-chrome", "mcp", "--client", "codex"]
210
210
  |---|---|
211
211
  | `screenshot` | 只在版式本身就是问题时用。开了高保真模式可以直接截后台标签页,不打断你。默认 60% 缩放的 JPEG(视觉 token 省四分之三),`full:true` 拿 1:1 PNG;`savePath` 落盘不进上下文 |
212
212
 
213
+ **网页以外**
214
+
215
+ | 工具 | 干什么 |
216
+ |---|---|
217
+ | `desktop` | 桌面应用和系统对话框(页面弹出的打开/保存框也算),经 [agent-desktop](https://github.com/vercel-labs/agent-desktop) 读辅助功能树:`list-windows` → `snapshot` → 按完整 ref(`@s…:eN`)操作 → 读效果行。默认后台,不抢鼠标;`headed:true` 才动真实键鼠。浏览器主窗口、密码管理器一律拒绝 |
218
+ | `devices` | 这个会话能驱动的设备:连着的每个 Chrome,和这台电脑的桌面。连着两个 Chrome 时 `tabs {device}` 指定开在哪一个,之后同一个 tabId 自动跟过去 |
219
+
213
220
  这套顺序不用你教给 agent——MCP server 在握手时就把它作为 `instructions` 下发了。
214
221
 
215
222
  ## 每个操作都要交待「到底动没动」
@@ -423,6 +430,18 @@ offscreen 万一建不起来,扩展不能整个哑掉。
423
430
  (`form.submit()`、直接 fetch 下单接口仍然绕得过:eval 本质是把页面的
424
431
  执行权交出去,这道防线是提高门槛,不是保证。)
425
432
 
433
+ 10. **桌面一侧不给扩展开后门**——Chrome 的主窗口在辅助功能树里整个敞开:地址栏、钱包按钮、
434
+ 密码管理,连本扩展侧栏里的「暂停」「断开并忘记这个服务器」都有 ref。桌面能点到它们,
435
+ 上面每一道闸就都白设了。所以 `desktop` 对浏览器只认它弹出的系统文件对话框(按控件的
436
+ 固定自动化 id 认,不认标题),浏览器发出的通知不替你点(任务批准就在那里),付款类按钮拒绝,
437
+ 发送 / 删除不进批处理。用户写的文字一律不会被当成命令行开关(`--opt=值`,自由文本放在 `--` 之后)。
438
+ 规矩在 `extension/desktop-policy.js`,纯函数,`test/desktop-policy.test.js` 逐条守着。
439
+
440
+ 云端任务(maker.vcorp.ai 这类)要用桌面,得你先在侧栏点「启用桌面能力」并运行一次
441
+ `npx vcorp-chrome desktop install`(登记原生消息宿主,只允许本扩展调用)。每个任务要操作的应用
442
+ 逐个点头;终端、注册表、编辑器这类能拿到整台机器的应用云端一律不碰;云端没有截图、剪贴板读取、
443
+ 通知和真实键鼠。宿主那边把参数再审一遍,浏览器主窗口的标题和树不出这台电脑。
444
+
426
445
  还没做完的,如实说:
427
446
 
428
447
  | | 状态 |
@@ -629,3 +629,56 @@ act 步的期望落空按停机处理,和「零效果就停」同一个哲学
629
629
  `toolparamdescription` 与它在快照里的 ref、是否 `toolautosubmit`。填还是 `fill`,提交还是 `click`,
630
630
  效果证据与支付闸门照旧。命令式 API(`document.modelContext.getTools()`)住在页面主世界,
631
631
  隔离世界够不着,等 origin trial 稳定后再议。
632
+
633
+ ## 十二、多设备与桌面(v1.9)
634
+
635
+ ### 设备
636
+
637
+ 一个用户名下有多台**设备**,每台报自己能做什么(`caps`):
638
+
639
+ | kind | id | 来自 | caps |
640
+ |---|---|---|---|
641
+ | `browser` | 本地桥里 `browser-<instanceId>`;云端是服务器配对时给的 deviceId | 扩展 | `browser` |
642
+ | `desktop` | `desktop-<machineId>`,machineId 形如 `m_<16 hex>`,存在 `~/.vcorp-chrome/machine.json` | 本地 MCP 进程,或扩展经原生宿主上报 | `desktop` |
643
+ | `phone` | 预留 | — | — |
644
+
645
+ 桌面设备没有自己的连接,挂在一台浏览器下面(`parent`):云端是「服务器 → 扩展 → 原生宿主」,
646
+ 本地是 MCP 进程直接起 agent-desktop,不经过桥。
647
+
648
+ ### 信封
649
+
650
+ 命令可带 `to: {device, cap}`,回执带 `from: {device, kind}`:
651
+
652
+ - 本地桥:`devices` 由桥自己回答(welcome 里 `devices: true` 表示桥懂这条);带 `to.device` 的命令只发给那个实例,
653
+ 不在线回 `DEVICE_OFFLINE`。老桥不懂 `to`,MCP 侧在发之前就报 `BRIDGE_OLD`,不让它静默发错地方。
654
+ - 云端扩展:`to.device` 不是自己、也不是自己挂着的桌面,回 `DEVICE_NOT_HERE`;`cap:'desktop'` 交给原生宿主。
655
+ - 服务器:`devices` 自己答;`desktop` / `apps` 发给挂着那台桌面的浏览器。同一个任务一旦用过某台浏览器 / 桌面就绑定它,
656
+ 它掉线回 `DEVICE_OFFLINE`,不悄悄换一台。多台可选又没指定回 `AMBIGUOUS_DEVICE`,一台都没有回 `NO_DEVICE`。
657
+ 回执的 `from` 和发去的设备对不上回 `DEVICE_MISMATCH`。结果里带 `device`。
658
+ - 审计每行记 `device`。
659
+
660
+ ### 桌面命令
661
+
662
+ `desktop {cmd, …}` 是 agent-desktop 子命令的白名单,参数在 `extension/desktop-policy.js` 里组装成 argv:
663
+ 值一律写成 `--opt=值`,自由文本(type / set-value / select / clipboard-set / launch 的应用名 / 通知按钮)放在 `--` 之后。
664
+
665
+ 实测(Windows,agent-desktop 1.0.2):
666
+
667
+ - `type @ref --headed` 里的 `--headed` 被当成开关吃掉了——这就是上面那条规矩的由来。
668
+ - `list-windows` 约 1.7 s,一次快照约 1.9 s,`list-apps` 约 0.2 s。
669
+ - Chrome 主窗口整棵树都在 UIA 里,含扩展侧栏的按钮;系统文件对话框的「文件名」框和「打开」按钮有固定 native id(1148 / 1),
670
+ 按它认对话框,不按标题。
671
+
672
+ ref 形如 `@s<快照 id>:eN`,必须给完整的;快照过期回 `STALE_REF`。
673
+
674
+ ### 原生宿主(云端用)
675
+
676
+ - 名字 `ai.vcorp.desktop`,Node 脚本 `native-host/host.js`,`npx vcorp-chrome desktop install` 写启动器和清单到
677
+ `~/.vcorp-chrome/desktop-host/`,Windows 登记在 `HKCU\Software\{Google\Chrome,Microsoft\Edge}\NativeMessagingHosts`,
678
+ `allowed_origins` 只有本扩展(id 由 manifest 的 `key` 算出)。`uninstall` / `status` 对应撤销与自检。
679
+ - 帧:4 字节小端长度 + JSON。回包上限 1 MB,超了回 `TOO_LARGE`,不截断。
680
+ - `hello` → `{device, ready}`;`run {argv}` → agent-desktop 的信封。
681
+ - 宿主不信任扩展:argv 再审一遍(选项白名单、裸词只能是 ref / 数字 / 按键组合、只放行 `cloud` 命令、会话名必须以 `cloud-` 开头),
682
+ `list-windows` 滤掉浏览器主窗口,快照里出现浏览器主窗口也拒绝。
683
+ - 扩展侧:`nativeMessaging` 是可选权限,在侧栏点「启用桌面能力」时申请。每个任务要用的应用逐个批准(`apps`),
684
+ 付款类按钮拒绝,发送 / 删除一类先确认(免确认开着则跳过),`steps` 不开放,每个任务最多 4 次快照。
@@ -1,53 +1,55 @@
1
- # 浏览器操控方案对比矩阵
2
-
3
- 核查日期 2026-09-09。
4
-
5
- 研究员逐格核实,每格落在官方文档 / 官方 README / 官方 issue / 仓库源码上。
6
- README「为什么需要它」和安装引导页附录 B 的对比表是这张矩阵的精简版。改表前先看末尾「必须小心的说法」——竞品在动,这里的每一格都有过期的一天,发现不对请开 issue。
7
-
8
- `✅` 具备且有官方明文 · `⚠️` 部分具备或有前置条件 · `❌` 不具备 · `➖` 结构上不适用 · `?` 官方未说明
9
-
10
- C 维度按「用户要不要额外折腾浏览器」记分:`✅` = 不需要。
11
-
12
- | | **vcorp-chrome** | Claude in Chrome | Codex for Chrome | playwright-mcp | chrome-devtools-mcp | Browser MCP | Browser Use | 通用 computer-use |
13
- |---|---|---|---|---|---|---|---|---|
14
- | **A** 日常 profile 真实登录态 | ✅ 就是当前浏览器 | ✅ 共享你的登录态 | ✅ 装扩展那个 profile | ⚠️ 须走 `--extension` | ⚠️ 须 Chrome144 autoConnect | ✅ 用现有 profile | ⚠️ Harness 接管/库要先退 Chrome | ❌ 容器或云沙盒浏览器 |
15
- | **B** 任意 MCP agent 可接 | ✅ 20+ agent 通用 | ❌ 限 Anthropic 客户端 | ❌ 限 ChatGPT 桌面 App | ✅ 官方列 20+ 客户端 | ✅ 标准 MCP server | ✅ 标准 stdio MCP | ✅ 三个 MCP server | ❌ API 内置工具,非 MCP |
16
- | **C** 免改启动参数/调试端口 | ✅ 只手动装扩展 | ✅ 只装扩展 | ✅ 扩展+桌面 App | ⚠️ 扩展模式免,否则装浏览器 | ❌ 要开远程调试或专用 profile | ✅ 扩展+Node | ❌ 装 Chromium 或开 chrome://inspect | ➖ 不走浏览器 |
17
- | **D** 多会话隔离 | ✅ 按会话分槽+双色告警 | ⚠️ 每会话一标签组 | ? 官方未描述 | ✅ 每客户端一标签组 | ⚠️ 靠实验开关路由 | ❌ 单槽且抢端口 | ⚠️ 本地共用一条道会抢 | ⚠️ 各自容器/mac 声称并行 |
18
- | **E** 跨会话记忆站点经验 | ✅ 出厂+本机 learnings | ❌ 无站点级 | ⚠️ 通用 Memories | ❌ 无 | ❌ 无 | ❌ 无 | ⚠️ domain-skills 默认关 | ⚠️ 仅通用 memory tool |
19
- | **F** 后台标签页不抢焦点 | ✅ 全程后台 | ❌ 可见窗口实时操作 | ✅ 商店文案承诺后台 | ? 官方未表态 | ⚠️ 置顶可选,文档未承诺 | ? 官方未表态 | ⚠️ Harness 明令后台 | ⚠️ mac 后台/Win 抢焦点 |
20
- | **G** 看得见谁在控哪页 | ✅ 标签组+描边+侧栏 | ✅ 彩色标签组 | ? 官方未描述 | ⚠️ 按客户端命名标签组 | ❌ 无标记 | ⚠️ 只见连接状态 | ⚠️ 标题加🐴不分 agent | ⚠️ VNC/实时预览看整桌面 |
21
- | **H** 人工介入交接 | ✅ `ask`+扩展内支付确认 | ✅ 遇登录/验证码暂停 | ⚠️ 敏感动作确认,验证码未明 | ❌ 无交接工具 | ❌ 无交接工具 | ❌ 主张绕过验证码 | ✅ 云端 takeover | ⚠️ Anthropic 只给规范 |
22
- | **I** 读网络层响应 | ✅ `network`+`fetch` | ✅ 可读网络请求 | ⚠️ 需开 full CDP | ✅ 含 headers+body | ✅ 含响应体 | ❌ 只有 console | ⚠️ 只能自走 CDP | ❌ 只有截图坐标 |
23
- | **J** 开源+许可证 | ✅ MIT | ❌ 未开源 | ❌ 扩展未开源 | ✅ Apache-2.0 | ✅ Apache-2.0 | ⚠️ Apache-2.0 但扩展闭源 | ✅ MIT(云端闭源) | ⚠️ demo MIT,模型闭源 |
24
- | **K** 定价 | ✅ 开源免费(成本=自己 agent 的 token) | ❌ 需付费订阅 | ❌ 付费+地区限制 | ✅ 免费 | ✅ 免费 | ✅ 实际免费 | ⚠️ 本地免费,云按量 | ⚠️ 按 token,工具定义约 4500 tok |
25
-
26
- ## 关键来源
27
-
28
- - Claude in Chrome:https://code.claude.com/docs/en/chrome (API key / Bedrock / Vertex / Foundry 一概不行;遇登录页/验证码暂停);https://claude.com/claude-in-chrome (GA,全部付费套餐)
29
- - Codex for Chrome(商店名「ChatGPT」):https://learn.chatgpt.com/docs/chrome-extension ;「Browser isn't available in Codex CLI or the Codex IDE extension」https://learn.chatgpt.com/docs/browser ;CLI 拿不到扩展后端 issue 仍 open https://github.com/openai/codex/issues/26820 ;商店文案「work in the background without ever taking over your active browsing session」
30
- - playwright-mcp:https://github.com/microsoft/playwright-mcp ;扩展模式 https://github.com/microsoft/playwright/tree/main/packages/extension (「Each one gets its own tab group … a tab can belong to a single client at a time」);扩展 v0.4.0 2026-09-02
31
- - chrome-devtools-mcp:autoConnect(Chrome ≥ M144,chrome://inspect/#remote-debugging 逐次授权)https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/advanced-usage.md ;https://developer.chrome.com/docs/devtools/agents/use-cases/auto-connect ;issue #2283 默认 profile autoConnect 失败 closed as not planned
32
- - Browser MCP:https://github.com/BrowserMCP/mcp (pushed_at 2025-04-24,停更约 16 个月;单槽 `killProcessOnPort`;扩展闭源 issue #72;无 network issue #39)
33
- - Browser Use:https://docs.browser-use.com/open-source/customize/browser/real-browser (库要先关 Chrome);Harness https://github.com/browser-use/browser-harness (SKILL.md:「treat local Chrome as one shared browser lane」「Two agents … can race」;`BH_DOMAIN_SKILLS=1` 默认关;🐴 标题标记)
34
- - computer-use:Anthropic `computer_toolset_20260801` https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool (工具定义约 4,500 input tokens);Anthropic 另有独立 browser use tool(含 read_network);OpenAI Operator / ChatGPT agent 已下线 https://help.openai.com/en/articles/11752874-chatgpt-agent ;`computer-use-preview` 2026-07-23 废弃
35
-
36
- ## 最能拉开差距的维度(证据最硬的先)
37
-
38
- 1. **A×B 交集**:既是真实登录态、又对任意 MCP agent 开放——同时满足的只有 vcorp-chrome、Browser MCP(已停更)、playwright-mcp 扩展模式。要写成「和 Playwright 扩展模式二选一」,不是「独一份」。
39
- 2. **E 跨会话站点经验**:竞品里只有 Browser Use Harness 有同构能力且默认关闭、不随包分发。vcorp-chrome 出厂即带 21 站已验证经验(含负面结论、带实测日期)。建议主打。
40
- 3. **H 人工交接**:三个开源 MCP 方案都没有交接工具;vcorp-chrome「支付确认闸在扩展里、agent 够不着」是架构级论证。
41
- 4. **D+G 组合**:会话隔离 + 页内标记 + 截图幕帘(agent 看不见自己的标记)同时具备的只有它。截图幕帘无任何竞品提到。
42
- 5. **F 不建议当主打**:Codex 商店文案和 Browser Use Harness 都有更硬的官方措辞。
43
-
44
- ## 必须小心的说法
45
-
46
- 1. 「Playwright MCP 只能开新的无头浏览器」已经错了:扩展模式连已登录 Chrome,还有按客户端命名着色的标签组隔离。它真实短板:无站点记忆、无人工交接、默认不是扩展模式、首次要人工选标签页。
47
- 2. chrome-devtools-mcp 的 Chrome 136 限制官方已有 `--autoConnect` 绕法(Chrome ≥ M144,chrome://inspect 逐次授权)。README 现有「❌ Chrome 136 起封了默认 profile 的远程调试」只对一半,改成「要在 chrome://inspect 里逐次授权、且只有 Chrome 144+」。
48
- 3. Browser Use Harness 在 E/F/G 上都追上来了,「只有我们有站点记忆/只有我们后台干活」站不住;改成「出厂即带 21 站已验证经验、默认开启」和「三处露出+截图幕帘」。它的短板是 D。
49
- 4. Claude in Chrome 已 GA、全部付费套餐,不再限 Max;「API key / Bedrock 不行」仍准确。
50
- 5. 「Codex for Chrome」不是官方名(商店叫「ChatGPT」);引官方文档「Browser isn't available in Codex CLI」比引 issue 更硬。
51
- 6. computer-use 世代已翻:Operator / ChatGPT agent 下线,`computer-use-preview` 废弃,现行 `computer_toolset_20260801`。说「读不到网络层」要补一句「Anthropic 另有 browser use tool 可以,但浏览器要自己提供、fresh profile 无凭据」。
52
- 7. 「官方未说明」的格子(Codex 的 D/G、Browser MCP 的 F、playwright-mcp 的 F)别写成 ❌。
53
- 8. vcorp-chrome 的 K:README 没写定价,写「开源免费,成本=你自己 agent 的 token」,别和竞品的现金支出并列成一个 ✅。
1
+ # 浏览器操控方案对比矩阵
2
+
3
+ 核查日期 2026-11-01。
4
+
5
+ 研究员逐格核实,每格落在官方文档 / 官方 README / 官方 issue / 仓库源码上。
6
+ README「为什么需要它」和安装引导页附录 B 的对比表是这张矩阵的精简版。改表前先看末尾「必须小心的说法」——竞品在动,这里的每一格都有过期的一天,发现不对请开 issue。
7
+
8
+ `✅` 具备且有官方明文 · `⚠️` 部分具备或有前置条件 · `❌` 不具备 · `➖` 结构上不适用 · `?` 官方未说明
9
+
10
+ C 维度按「用户要不要额外折腾浏览器」记分:`✅` = 不需要。
11
+
12
+ | | **vcorp-chrome** | Claude in Chrome | Codex for Chrome | playwright-mcp | chrome-devtools-mcp | Browser MCP | Browser Use | ego-lite | 通用 computer-use |
13
+ |---|---|---|---|---|---|---|---|---|---|
14
+ | **A** 日常 profile 真实登录态 | ✅ 就是当前浏览器 | ✅ 共享你的登录态 | ✅ 装扩展那个 profile | ⚠️ 须走 `--extension` | ⚠️ 须 Chrome144 autoConnect | ✅ 用现有 profile | ⚠️ Harness 接管/库要先退 Chrome | ⚠️ 须换用其专用浏览器(首次导入 Chrome) | ❌ 容器或云沙盒浏览器 |
15
+ | **B** 任意 MCP agent 可接 | ✅ 20+ agent 通用 | ❌ 限 Anthropic 客户端 | ❌ 限 ChatGPT 桌面 App | ✅ 官方列 20+ 客户端 | ✅ 标准 MCP server | ✅ 标准 stdio MCP | ✅ 三个 MCP server | ⚠️ 走 CLI+Skill(非 MCP,需 shell 跑 JS) | ❌ API 内置工具,非 MCP |
16
+ | **C** 免改启动参数/调试端口 | ✅ 只手动装扩展 | ✅ 只装扩展 | ✅ 扩展+桌面 App | ⚠️ 扩展模式免,否则装浏览器 | ❌ 要开远程调试或专用 profile | ✅ 扩展+Node | ❌ 装 Chromium 或开 chrome://inspect | ❌ 须另装专用浏览器+CLI | ➖ 不走浏览器 |
17
+ | **D** 多会话隔离 | ✅ 按会话分槽+双色告警 | ⚠️ 每会话一标签组 | ? 官方未描述 | ✅ 每客户端一标签组 | ⚠️ 靠实验开关路由 | ❌ 单槽且抢端口 | ⚠️ 本地共用一条道会抢 | ✅ 每任务独立 TaskSpace | ⚠️ 各自容器/mac 声称并行 |
18
+ | **E** 跨会话记忆站点经验 | ✅ 出厂+本机 learnings | ❌ 无站点级 | ⚠️ 通用 Memories | ❌ 无 | ❌ 无 | ❌ 无 | ⚠️ domain-skills 默认关 | ⚠️ README 标 coming soon(源码 3 站) | ⚠️ 仅通用 memory tool |
19
+ | **F** 后台标签页不抢焦点 | ✅ 全程后台 | ❌ 可见窗口实时操作 | ✅ 商店文案承诺后台 | ? 官方未表态 | ⚠️ 置顶可选,文档未承诺 | ? 官方未表态 | ⚠️ Harness 明令后台 | ✅ 后台 TaskSpace 隔离运行 | ⚠️ mac 后台/Win 抢焦点 |
20
+ | **G** 看得见谁在控哪页 | ✅ 标签组+描边+侧栏 | ✅ 彩色标签组 | ? 官方未描述 | ⚠️ 按客户端命名标签组 | ❌ 无标记 | ⚠️ 只见连接状态 | ⚠️ 标题加🐴不分 agent | ✅ 独立 Space 视图+光标动作标签 | ⚠️ VNC/实时预览看整桌面 |
21
+ | **H** 人工介入交接 | ✅ `ask`+扩展内支付确认 | ✅ 遇登录/验证码暂停 | ⚠️ 敏感动作确认,验证码未明 | ❌ 无交接工具 | ❌ 无交接工具 | ❌ 主张绕过验证码 | ✅ 云端 takeover | ✅ `handOff`/`takeOver`+系统权限自动交接 | ⚠️ Anthropic 只给规范 |
22
+ | **I** 读网络层响应 | ✅ `network`+`fetch` | ✅ 可读网络请求 | ⚠️ 需开 full CDP | ✅ 含 headers+body | ✅ 含响应体 | ❌ 只有 console | ⚠️ 只能自走 CDP | ⚠️ 有 `page.fetch`,抓包需自走 `page.cdp` | ❌ 只有截图坐标 |
23
+ | **J** 开源+许可证 | ✅ MIT | ❌ 未开源 | ❌ 扩展未开源 | ✅ Apache-2.0 | ✅ Apache-2.0 | ⚠️ Apache-2.0 但扩展闭源 | ✅ MIT(云端闭源) | ⚠️ SDK/Skill MIT,浏览器本体闭源 | ⚠️ demo MIT,模型闭源 |
24
+ | **K** 定价 | ✅ 开源免费(成本=自己 agent 的 token) | ❌ 需付费订阅 | ❌ 付费+地区限制 | ✅ 免费 | ✅ 免费 | ✅ 实际免费 | ⚠️ 本地免费,云按量 | ✅ 免费(成本=自己 agent 的 token) | ⚠️ 按 token,工具定义约 4500 tok |
25
+
26
+ ## 关键来源
27
+
28
+ - Claude in Chrome:https://code.claude.com/docs/en/chrome (API key / Bedrock / Vertex / Foundry 一概不行;遇登录页/验证码暂停);https://claude.com/claude-in-chrome (GA,全部付费套餐)
29
+ - Codex for Chrome(商店名「ChatGPT」):https://learn.chatgpt.com/docs/chrome-extension ;「Browser isn't available in Codex CLI or the Codex IDE extension」https://learn.chatgpt.com/docs/browser ;CLI 拿不到扩展后端 issue 仍 open https://github.com/openai/codex/issues/26820 ;商店文案「work in the background without ever taking over your active browsing session」
30
+ - playwright-mcp:https://github.com/microsoft/playwright-mcp ;扩展模式 https://github.com/microsoft/playwright/tree/main/packages/extension (「Each one gets its own tab group … a tab can belong to a single client at a time」);扩展 v0.4.0 2026-09-02
31
+ - chrome-devtools-mcp:autoConnect(Chrome ≥ M144,chrome://inspect/#remote-debugging 逐次授权)https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/advanced-usage.md ;https://developer.chrome.com/docs/devtools/agents/use-cases/auto-connect ;issue #2283 默认 profile autoConnect 失败 closed as not planned
32
+ - Browser MCP:https://github.com/BrowserMCP/mcp (pushed_at 2025-04-24,停更约 16 个月;单槽 `killProcessOnPort`;扩展闭源 issue #72;无 network issue #39)
33
+ - Browser Use:https://docs.browser-use.com/open-source/customize/browser/real-browser (库要先关 Chrome);Harness https://github.com/browser-use/browser-harness (SKILL.md:「treat local Chrome as one shared browser lane」「Two agents … can race」;`BH_DOMAIN_SKILLS=1` 默认关;🐴 标题标记)
34
+ - ego-lite:https://github.com/citrolabs/ego-lite (独立闭源 Chromium 发行版+MIT 开源的 `ego-browser` Node SDK/Skill;首次启动可选迁移 Chrome 数据,后续与原 Chrome 独立;非 MCP,通过 `ego-browser nodejs` 执行 `.mjs` 脚本调 `globalThis.ego` 原生绑定;内置 `TaskSpace` 隔离与 `handOff`/`takeOver` 及 `EGO_TASK_SPACE_USER_IN_CONTROL`;README 标「Experience accumulation (coming soon)」,仓库 `skills/ego-browser/learnings` 现有 github/google/x-com 3 站;无高层网络录制缓冲池,有 `page.fetch` 与 `page.cdp`)
35
+ - computer-use:Anthropic `computer_toolset_20260801` https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool (工具定义约 4,500 input tokens);Anthropic 另有独立 browser use tool(含 read_network);OpenAI Operator / ChatGPT agent 已下线 https://help.openai.com/en/articles/11752874-chatgpt-agent ;`computer-use-preview` 2026-07-23 废弃
36
+
37
+ ## 最能拉开差距的维度(证据最硬的先)
38
+
39
+ 1. **A×B×C 交集**:既直接跑在用户现有的日常 Chrome 里(不用换浏览器、不用迁数据)、又对任意 MCP agent 开放——同时满足的只有 vcorp-chrome、Browser MCP(已停更)、playwright-mcp 扩展模式。ego-lite 虽支持多 agent,但要求用户换用其闭源专用浏览器且只走 CLI 脚本而非 MCP。
40
+ 2. **E 跨会话站点经验**:竞品里只有 Browser Use Harness(默认关、不随包分发)和 ego-lite(README 标 coming soon,仓库仅 3 个海外站)有同构设计。vcorp-chrome 出厂即带 28 站已验证经验(含负面结论、带实测日期、支持 `act` 剧本采纳)。建议主打。
41
+ 3. **H 人工交接**:三个开源 MCP 方案都没有交接工具;ego-lite 有 TaskSpace 级 `handOff`/`takeOver` 和系统权限拦截,但无敏感业务操作(提交/删除/付款)的硬拦截;vcorp-chrome「支付确认闸在扩展里、agent 够不着、`act` 遇敏感按钮自动停下」是架构级论证。
42
+ 4. **D+G 组合**:在「不换浏览器」的前提下,会话隔离 + 页内标记 + 截图幕帘(agent 看不见自己的标记)同时具备的只有 vcorp-chrome(ego-lite 靠重造一个专用浏览器用 TaskSpace 实现隔离)。截图幕帘无任何竞品提到。
43
+ 5. **F 不建议当主打**:Codex 商店文案、Browser Use Harness 和 ego-lite 都有明确的后台运行机制与官方措辞。
44
+
45
+ ## 必须小心的说法
46
+
47
+ 1. 「Playwright MCP 只能开新的无头浏览器」已经错了:扩展模式连已登录 Chrome,还有按客户端命名着色的标签组隔离。它真实短板:无站点记忆、无人工交接、默认不是扩展模式、首次要人工选标签页。
48
+ 2. chrome-devtools-mcp 的 Chrome 136 限制官方已有 `--autoConnect` 绕法(Chrome ≥ M144,chrome://inspect 逐次授权)。README 现有「❌ Chrome 136 起封了默认 profile 的远程调试」只对一半,改成「要在 chrome://inspect 里逐次授权、且只有 Chrome 144+」。
49
+ 3. Browser Use Harness 和 ego-lite 在 D/E/F/G/H 上都有追赶,「只有我们有站点记忆/只有我们后台干活/只有我们有人机交接」站不住;要卡住前提:「在**不换掉用户日常 Chrome** 的扩展方案里」或强调「出厂即带 28 站已验证经验、默认开启」、「三处露出+截图幕帘」以及「扩展侧硬件级付款确认闸」。
50
+ 4. 评价 ego-lite 时要准确区分「开源部分」和「闭源部分」:它的 GitHub 仓库(`ego-browser` SDK 与 Skill)是 MIT,但核心卖点所依赖的 `ego lite` 浏览器本体是闭源二进制安装包(仅 macOS/Windows,Linux 未出);且它不是 MCP server,而是让 agent 调 `ego-browser nodejs` 跑 JS 代码(在 Windows PowerShell 下多行/中文引号限制较多,官方 SKILL.md 要求每轮落盘写 `.mjs` 文件再执行)。
51
+ 5. Claude in Chrome 已 GA、全部付费套餐,不再限 Max;「API key / Bedrock 不行」仍准确。
52
+ 6. 「Codex for Chrome」不是官方名(商店叫「ChatGPT」);引官方文档「Browser isn't available in Codex CLI」比引 issue 更硬。
53
+ 7. computer-use 世代已翻:Operator / ChatGPT agent 下线,`computer-use-preview` 废弃,现行 `computer_toolset_20260801`。说「读不到网络层」要补一句「Anthropic 另有 browser use tool 可以,但浏览器要自己提供、fresh profile 无凭据」。
54
+ 8. 「官方未说明」的格子(Codex 的 D/G、Browser MCP 的 F、playwright-mcp 的 F)别写成 ❌。
55
+ 9. vcorp-chrome 的 K:README 没写定价,写「开源免费,成本=你自己 agent 的 token」,别和竞品的现金支出并列成一个 ✅。
@@ -0,0 +1,128 @@
1
+ # 桌面完全模式 · 交接(2026-11-04)
2
+
3
+ 目标分两步:
4
+ 1. **第一阶段(已完成)**:云端任务在用户电脑上拥有和本机 agent(goose 一类)一样的能力,包括命令行、任意文件和全部桌面命令。
5
+ 2. **第二阶段(未开始)**:在不废掉这些能力的前提下,重新设计安全方案。
6
+
7
+ 另有一项**提权操作**(UAC / 管理员程序),尚未实现,见第四节。
8
+
9
+ ---
10
+
11
+ ## 一、当前进度
12
+
13
+ ### 已上线
14
+
15
+ | 部分 | 位置 | 状态 |
16
+ |---|---|---|
17
+ | 扩展 + 原生宿主 2.2.0 | huashu-chrome `2928698`(分支 `my-dev`,**未合进 main**) | 已推送;本机扩展已重载到 2.2.0 |
18
+ | 隐私政策说明 | huashu-chrome `bd165d9`(`my-dev`) | 已推送 |
19
+ | 服务端路由 | opus-video-maker `1609f71`(main) | Coolify 已部署到 maker.vcorp.ai |
20
+ | 沙箱镜像(6 个) | gooseboxd 7.79,由 `1609f71` 构建 | 已推送,各镜像的 default_model 保持不变 |
21
+
22
+ 全链路已经实测通过:maker 任务 → 服务器 → 扩展 → 原生宿主 → `shell` 执行 `Get-WinEvent`,结果正常返回。
23
+
24
+ ### 开关
25
+
26
+ - 打开:`npx vcorp-chrome desktop full on`;关闭:`npx vcorp-chrome desktop full off`;查看:`desktop status`。
27
+ - 开关写在 `~/.vcorp-chrome/desktop-full.json`,原生宿主每条命令都现读一次,服务器、网页和扩展都改不了它。
28
+ - **作者这台电脑(desktop-m_f7feacbc0db40b8f)目前是开着的。**
29
+
30
+ ### 完全模式下云端多出的能力
31
+
32
+ - `shell`:默认用 PowerShell(输出 UTF-8),也可以选 pwsh / cmd / bash / sh。支持 `cwd`、`timeout`(最长 7 分钟,超时连同进程树一起杀掉)、`stdin`、`env`。
33
+ - `file`:stat / list / read / write / mkdir / delete / move / copy,路径不限。read 支持 `offset`/`length` 分段,单次最多 16MB;可以用 base64 读写二进制。
34
+ - `desktop`:agent-desktop 的全部命令,不需要申请应用,不挡浏览器窗口,允许 `--headed`、截图、剪贴板和通知;用 `argv` 可以把任意命令原样传给 agent-desktop。
35
+ - 大回包分页:超过 1MB 的回包先写进 `%TEMP%/vcorp-desktop-pages/`,扩展再用 `op: 'page'` 分段取回。
36
+
37
+ 完全模式关闭时,行为和 2.1.0 完全一样。
38
+
39
+ ### 代码位置
40
+
41
+ - `native-host/full.js`:shell、file 和分页的实现。
42
+ - `native-host/host.js`:新增 `mode` / `shell` / `file` / `page` 四种 op;完全模式下 `run` 只检查 argv 的形状。
43
+ - `extension/cloud.js`:`hostCall` 负责分页拼接;`desktopFull`、`fullCmd`、`hostFull` 是完全模式的入口。
44
+ - `extension/desktop-policy.js`:`checkDesktop` 的 `ctx.full` 为真时跳过所有闸门。
45
+ - `extension/cloud-policy.js`:`CLOUD_CMDS` 加入了 `shell` 和 `file`。
46
+ - `src/cli.js`、`src/lib/paths.js`:开关命令和 `fullMode()`。
47
+ - `test/desktop-full.test.js`:新增测试。全套 174 个测试通过。
48
+ - opus-video-maker:`extlink.js`(`DESKTOP_CMDS` 路由)、`skills/social-publisher/scripts/browser.mjs`(`file.out` 以及桌面截图存盘)、`skills/user-browser/SKILL.md`(完全模式的用法说明)。
49
+
50
+ ### 已知缺口和待办
51
+
52
+ - **`my-dev` 还没合进 `main`**。如果从 main 发布或打包,会丢掉 2.2.0。
53
+ - 侧栏不显示完全模式的状态,也没有一键关闭;目前只能在终端里看和关。
54
+ - 完全模式同时跳过了「发送/删除先确认」和「付款一律拒绝」。这是第一阶段有意的选择,第二阶段应最先恢复。
55
+ - 每条桌面命令前会多一次 `mode` 宿主调用(约一次进程启动的开销)。
56
+ - 仍然有效的限制:每个任务最多 1500 条命令,每分钟 120 条,服务器每条命令最多等 8 分钟。
57
+ - 回滚:gooseboxd 上旧代码在 `~/ovm-images/opus-video-maker.prev-20261104`;扩展回退到 `07f6c47`(2.1.0);或者直接 `desktop full off`。
58
+
59
+ ---
60
+
61
+ ## 二、第二阶段:安全方案(待定,讨论记录)
62
+
63
+ 核心判断:**按 exe 名字开闸管的是入口,真正的风险在动作上**。一旦开放了 shell,应用名单、浏览器窗口闸这类限制就都拦不住什么了,所以新方案不应该回到逐个 exe 批准的老路。
64
+
65
+ 主要威胁:
66
+ 1. **提示注入**:云端 agent 读到的网页、应用内容里藏着指令,变成在用户电脑上执行的命令。
67
+ 2. **服务器或账号被攻破**:所有开了完全模式的电脑一起沦陷。
68
+ 3. **点到扩展自己的控件**:桌面侧能点 Chrome 主窗口里的侧栏「自动确认」、钱包和密码管理,扩展里的闸门就会被绕过。
69
+
70
+ 候选方向:
71
+ - **设备级档位**(只能在本机设置):观察(只读 + 截图)/ 协作(普通应用可写,终端只读,发送/删除要确认,付款拒绝)/ 完全(现状)。
72
+ - **所有档位都保留的底线**:不碰密码管理器;付款按钮必须用户亲手点;完全档以下不碰浏览器主窗口。
73
+ - **动作分级确认**:不可逆或对外的动作(删除、发送、改系统设置、写系统目录)弹通知等用户确认,而不是按应用名拦截。
74
+ - **可见、可停**:侧栏实时显示桌面上正在执行的命令(审计日志已经有了),提供一键暂停;完全模式开着时托盘或侧栏常驻提示。
75
+ - **按任务的范围**:任务开始时声明要用 shell 或文件,用户一次批准,批准只在这个任务内有效。
76
+ - **本地审计**:shell 的命令和输出写进 `~/.vcorp-chrome/audit.jsonl`,出了问题能查。
77
+ - **只读的系统探针 `sys`**(备选):固定、参数有类型的查询(事件日志、崩溃、进程、服务、磁盘、更新),用于观察档下的系统体检,不需要开放 shell。
78
+ - 远期:桌面作为独立设备,用自己的密钥直连 maker(`desktop serve` 常驻进程),不再依赖浏览器中继,同时解决原生消息每次启动一个进程的开销。
79
+
80
+ ---
81
+
82
+ ## 三、为什么操作不了提权程序(UIPI)
83
+
84
+ 现象:用户在 UAC 上点了「是」之后,HWiNFO64 就无法再操作了。
85
+
86
+ 原因不在 agent-desktop,而是 Windows 的**用户界面权限隔离(UIPI)**:
87
+ - 点了 UAC 的程序运行在**高完整性级别**(管理员)。agent-desktop 由 Chrome 经原生宿主启动,和 Chrome 一样是**中完整性级别**。
88
+ - 低级别进程不能控制高级别窗口:SendInput 和 SendMessage 会被系统丢掉,UIA 的 Invoke 和 SetValue 会失败,读取树最多只能读到一部分。
89
+ - 所有不提权运行的自动化工具都受这个限制(AutoHotkey、Power Automate、pywinauto 都一样)。
90
+ - `shell` 也一样跑在普通权限下:读 Security 日志、改服务、写 `C:\Windows` 都做不到。
91
+ - UAC 弹窗本身显示在安全桌面上,任何用户进程都点不到,这是有意的设计,**只能由人来点**。
92
+
93
+ ---
94
+
95
+ ## 四、未来的高权限操作方案
96
+
97
+ ### 方案 1:提权代理(推荐)
98
+
99
+ - 用户以管理员身份登记一次计划任务:用户登录时以「最高权限」启动一个常驻代理(`native-host/elevated.js`)。之后每次启动都不弹 UAC。
100
+ - 代理监听一个命名管道,ACL 只允许当前用户的 SID 连接;可以再加一个启动时生成、写在仅用户可读文件里的令牌。
101
+ - 原生宿主遇到以下情况时把命令转给代理:命令带 `elevated: true`,或者目标窗口属于提权进程(可以检查进程的完整性级别)。
102
+ - 代理以管理员身份运行 agent-desktop 和 shell,回包格式与现在一致。
103
+ - 开关同样只在本机:例如 `desktop full on --elevated` 或单独的 `desktop elevated install|uninstall`(登记或删除计划任务)。
104
+ - 代价:配对服务器上的任务在这台电脑上**等于管理员**。这一档必须和第二阶段的确认、可见、可停机制一起上线,不建议单独开放。
105
+
106
+ 需要改的地方:新增 `native-host/elevated.js`;`src/cli.js` 加计划任务的登记和注销命令;`native-host/host.js` 加转发逻辑;`extension/cloud.js` 和 `desktop-policy.js` 透传 `elevated`;`SKILL.md` 补充用法;补测试(管道 ACL、未登记时的报错、转发路径)。
107
+
108
+ ### 方案 2:uiAccess 签名程序
109
+
110
+ - 给 agent-desktop 的 exe 加 `uiAccess=true` 清单,签名后装到 `Program Files`,就能绕过 UIPI 控制提权窗口(屏幕键盘、讲述人就是这么做的)。
111
+ - 缺点:需要一张本机信任的代码签名证书(自签后导入受信任根也行);每次升级 agent-desktop 都要重新签名;**只解决界面操作,shell 还是普通权限**。
112
+
113
+ ### 方案 3:绕开界面,读数据
114
+
115
+ - 像 HWiNFO 这种只是要读传感器数据的场景,用它的共享内存或 CSV 日志,再用 `shell` / `file` 去读。比读界面快,也更准,而且不需要提权。
116
+
117
+ ### 不建议
118
+
119
+ - 关闭 UAC,或者把 Chrome 整个以管理员身份运行:整台机器的所有程序都会默认拿到管理员权限。
120
+
121
+ ---
122
+
123
+ ## 五、接手时先做的事
124
+
125
+ 1. 确认 `my-dev` 上的 2.2.0 和 `bd165d9` 是否要合进 main 并发布。
126
+ 2. 决定第二阶段的档位设计,优先恢复「付款拒绝」和「发送/删除确认」。
127
+ 3. 侧栏加上完全模式的状态显示和一键关闭。
128
+ 4. 第二阶段落地后,再评估是否做方案 1(提权代理)。