feat: 浏览器二期后端:远控服务 + ref 快照 + server 代理
- playwright_remote.py(新):MCP 进程内 Unix socket HTTP 服务,
监听 worktree/.browser-remote.sock;GET /state、GET /stream
(SSE 画面流)、POST /input、POST /control(接管/交还)。
线程契约(实测):Playwright 同步调用只能在创建页面的线程,
所以 HTTP 线程只读属性/读最新帧/入队,MCP 主循环用
select 轮询(50ms) draining 输入并 pump screencast 帧
(无 ack 则 CDP 首帧后停流)。
- 画面流走 CDP screencast 帧(学 chrome-devtools-mcp),不用
定时截图;ffmpeg 录像暂不做。
- snapshot_refs/click_ref(学 playwright-mcp 的 ref 机制)+
mouse_move/key_press/type_text;agent 工具在 holder=user 时
直接报错,等用户交还。
- server.py:/tasks/{id}/browser/{state,stream,input,control}
代理到 worktree socket,复用任务鉴权与 worktree 解析;
会话不存在时 503(轮次结束即消失是设计)。
- 播种器:MCP 脚本是系统文件,版本变化时刷新老租户旧脚本
(script_refreshed 打日志),否则远控只对新项目生效;
新增 playwright_remote.py 进播种清单。
- 队列遮蔽修复:cloud/queue.py 会遮蔽 stdlib queue,改用
SimpleQueue(deque+锁),仓库模式与 flat-copy 两路都通。
- 测试:新 20 项(remote 服务、server 代理、ref/输入/
screencast fake),全量 1354 项通过(skipped 4)。
This commit is contained in:
1 parent
7bea8df512
commit
6f39ab3945
9 files changed
+1231
-13
No files matched your search
@@ -34,6 +34,19 @@ screenshot 都针对同一页;要换页再 navigate。
|
||||
`browser_click_at`,点完必须再 snapshot 一次确认变化,再调
|
||||
`browser_live_shot` 刷新画面。
|
||||
|
||||
## 远控接管(第二期)
|
||||
|
||||
用户可以在控制台接管浏览器:接管期间(holder=user)你的
|
||||
所有 browser_* 工具都会直接报错“user holds browser control”,
|
||||
不要重试、不要 close 浏览器,停下来等用户交还;交还后
|
||||
(holder 回到 agent)下一条继续消息会让你续跑,续跑前先
|
||||
snapshot 一次看清用户改动到哪了。
|
||||
|
||||
新工具:`browser_snapshot_refs`(带 ref 的元素清单,点
|
||||
`browser_click_ref` 比 CSS 选择器稳,页面重渲染后先重新
|
||||
snapshot_refs 再点);`browser_mouse_move` / `browser_key_press` /
|
||||
`browser_type_text`(键盘与鼠标,远控输入与 agent 工具同源)。
|
||||
|
||||
## 规则
|
||||
|
||||
1. 先 navigate,再 snapshot 看实际渲染结果;click / fill 后
|
||||
|
||||
Reference in new issue
Block a user