feat(record): 导出带 settled 页面状态的 Trace v3 bundle - #107
Conversation
There was a problem hiding this comment.
Pull request overview
This PR upgrades the recording pipeline from exporting a single trace.json to exporting a Trace v3 bundle directory (trace/trace.json + trace/states/sN.txt), with the extension producing v3 traces that include settled page observations and the CLI writing them atomically. It also preserves compatibility by falling back to legacy v2 output when talking to older extensions.
Changes:
- Extension: negotiate
trace_version, record v3 traces with settled pre/post-action states, and stabilize navigation/action ordering (redirect coalescing + stop draining). - CLI: export v3 as a bundle directory with locking + staging + rollback; keep v2 fallback as a single JSON output.
- Docs/UI: update SKILL docs and extension i18n/popup guidance to reference the bundle layout.
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| skill/SKILL.md | Updates recording docs to describe v3 bundle output + v2 fallback semantics. |
| crates/bsk-cli/skill/SKILL.md | Mirrors SKILL documentation updates within the CLI crate. |
| packages/i18n/src/locales/zh-CN/extension.json | Updates CN popup copy to reference the ./trace bundle output. |
| packages/i18n/src/locales/en-US/extension.json | Updates EN popup copy to reference the ./trace bundle output. |
| crates/bsk-protocol/src/tools/record.rs | Adjusts on-disk naming/semantics from pages/ to states/ and updates tests. |
| crates/bsk-cli/src/cli/record.rs | Implements bundle export (v3) + atomic directory writing and v2 fallback export behavior. |
| crates/bsk-cli/tests/record_stop_retry.rs | Adds CLI integration test for retryable record stop and bundle export verification. |
| apps/extension/src/tools/record.ts | Adds v3 negotiation, settled observation capture, redirect coalescing, and stop/drain stability logic. |
| apps/extension/src/tools/tests/record-steps.test.ts | Adds comprehensive tests covering ordering, redirects, stop race/drain, v2 fallback, etc. |
| apps/extension/src/lib/trace-reducer-v2.ts | Drops hover in v2 output to avoid breaking legacy v2 readers. |
| apps/extension/src/lib/recording-step-buffer.ts | Enhances step buffering (navigation cause mapping, redirect coalesce signaling, safer indexing). |
| apps/extension/src/lib/record-observation.ts | Improves target matching fallback and redirect landing handling during coalescing. |
| apps/extension/src/lib/record-bridge.ts | Expands step payload schema (geometry, commit, scroll, transition metadata). |
| apps/extension/src/lib/match-target.ts | Adds semantic target matching fallback when geometry is unavailable. |
| apps/extension/src/lib/tests/trace-reducer-v2.test.ts | Updates expectations for hover dropping behavior in v2. |
| apps/extension/src/lib/tests/recording-step-buffer.test.ts | Adds tests for capture fallback retention and redirect coalesce behavior. |
| apps/extension/src/lib/tests/match-target.test.ts | Adds tests for semantic fallback matching behavior. |
| apps/extension/src/entrypoints/popup/App.test.tsx | Updates popup test assertions to expect bundle-based instructions. |
| apps/extension/src/entrypoints/background.ts | Wires the CDP runner into recording listeners. |
| apps/extension/src/content/record-capture.ts | Adds geometry + commit metadata and improves stop flushing/retry behavior for step delivery. |
| apps/extension/src/content/tests/record-capture.test.ts | Adds tests covering stop retry behavior and geometry capture. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
a7c0737 to
3c6a67f
Compare
9bc31ca to
c566132
Compare
c566132 to
183b7ac
Compare
183b7ac to
a73e924
Compare
a73e924 to
b94e8f3
Compare
b94e8f3 to
3e2c1da
Compare
|
兼容问题可能导致已完成的录制结果丢失 |
Summary
把录制结果从单个
trace.json升级为 Trace v3 目录包(trace/trace.json+trace/states/sN.txt)。旧扩展仍可回退为 v2 单文件。base 分支
feat/record-settled-states已经能在页面 settle 后捕获状态。本 PR 补齐交付链路:扩展产出带动作前后状态的 v3 trace,CLI 原子写出目录包。Motivation
给 Agent 回放/理解录制结果时,需要同时拿到:
steps)states)state 正文体积较大,不适合全部塞进一个 JSON。导出过程还要能扛住中途失败,避免留下半包。
Changes
Extension
核心文件:
apps/extension/src/tools/record.ts、lib/recording/recording-runtime.ts、content/record-capture.ts、content/record-step-delivery.ts版本协商
record start读取trace_version3v3 录制语义
state:动作发生前的页面result.state:动作 settle 后的页面bsk observe相同的 VOM 格式max_page_tokens、redact_values从 start 参数传到 observation runtime,控制截断和脱敏按 tab 的 observation runtime
RecordingObservationRuntime,每个 tab 独立维护 session / settle / 初始 capture导航与动作时序
navigate,后续 click 绑到落地页,而不是中间 hopactionQueue串行化「先入 step、再处理 webNavigation」,避免 click 和跳转几乎同时到达时绑错页stop / Finish 稳定性
record-step-delivery支持重试)record stop并发时,共用同一次结束结果(成功或失败都一致回传)chrome://、about:blank等受限页无法注入时,会等 tab ready 并重试RECORD_STARTackv2 路径仍导出
pages[] + steps,且不记录hover。CLI
核心文件:
crates/bsk-cli/src/cli/record.rs、cli/record/export.rs产物布局
--output默认改为目录tracev3 写出:
trace.json只保留 state 索引和 steps;正文落到states/sN.txt接到旧扩展的 v2 trace 时,只写
trace.json,不创建states/导出安全
export.rs:文件锁.bsk-record-export.lock+ staging 目录 + 失败回滚sN.txt,不删用户自有文件session stop并清本地 recording state参数与 stop 重试
--max-page-tokens、--redact-valuestrace_version: 3发起 startrecord stop若为可重试失败,保留 recording session,允许再次 stop 后再写 bundleProtocol / 文档 / i18n
RecordStartParams增加trace_version/max_page_tokens/redact_valuespages/改为states/sN.txtrecord.rs保持 base 的record_v2/record_v3拆分,补齐 v3 round-trip、start options、extension 反序列化测试./trace目录包,并说明 v2 fallbackUser impact
之前:当前目录下一个
trace.json现在(推荐):
字段含义:
steps[].state:动作前的页面观察 idsteps[].result.state:动作 settle 后的页面观察 idstates/sN.txt:对应 settled observation 正文连的是旧扩展时,仍导出 v2 单文件,没有完整
states/。Test plan
apps/extension/src/tools/__tests__/record-steps.test.ts:click/fill 顺序、地址栏/浏览器导航、OAuth coalesce、settle 中 stop、capture 失败重试、慢页面 settle、后续动作打断 settle、Finish 与 CLI stop 竞态、v2 fallback / 非法trace_versioncrates/bsk-cli/tests/record_stop_retry.rs:首次 stop 可重试失败时保留 session;重试成功后写出trace.json+states/s1.txtrecord.rs中 v3 序列化、v2/v3 分类与 schema、start 可选字段Review focus