走查 T4 · Web follow 与审批¶
动机:确认 Remote 流(mux + follow)与控制面($events + $events/result)如何结算工具 ask,而不在浏览器侧另存审批状态。
前置¶
pip install -e ".[web]";概念见 章节 09 与 interface-wire §6。
命令¶
python -m unittest tests.test_web_approvals tests.test_web_events tests.test_web_mux -v
cd webui && pnpm test
预期现象¶
- WS
/api/remote.mux上session/follow先 snapshot 再按seq递增推送;客户端去重(见webui/src/wire/follow.ts)。 - 工具 ask 经
$eventswaterfall 到客户端;POST$events/result后工具继续或 denied;Session 落approval/asked+approval/decided。 - fail-closed:非法审批 outcome →
unavailable,不误放行(wire §10)。
机制(缩略)¶
sequenceDiagram
participant Client as webui_or_test_client
participant Mux as web_mux
participant Loop as agent_loop
participant Ev as web_events
Client->>Mux: WS remote.mux open session/follow
Mux->>Client: snapshot and event frames by seq
Loop->>Ev: approval or tool ask projection
Client->>Ev: POST api events/result
Ev->>Loop: resume tool or deny
- follow:
session/follow流(§4.1)。 - control:
session/control宿主级 live control(§4.2)。 - 审批:
tools/pre-executeask → web 桥 →$events/result(§6)。
经过的 mini 模块¶
web/mux.py · web/streams.py · web/events.py · web/approvals.py · interaction/approval.py
日志 / 事件 type 清单¶
Session:approval/asked、approval/decided、tool/call、tool/result(deny 路径)。Remote:$events ready/emit/waterfall/cancel 帧(见 wire §4.3)。
测试¶
tests.test_web_approvals · tests.test_web_events · tests.test_web_mux · webui vitest