关联主问题:#251
依赖:#260
类型
观察协议 / 剪枝 DOM / 元素引用
背景
当前 DOMSnapshot.captureSnapshot 在复杂页面可超过 1 MB,超过 150 KB 后只返回截断提示,Agent 因而失去页面结构。截图和模型猜测 selector 无法替代稳定的结构化观察。
参考实现
参考 agent-browser 的 native snapshot:
- Accessibility.getFullAXTree 作为主体
- DOM 批量扫描补充 cursor:pointer、onclick、tabindex、contenteditable 等 AX Tree 遗漏节点
- 清理 ignored/generic/冗余结构
- iframe 与 Shadow DOM 纳入同一语义树
- 可操作节点映射到 backendDOMNodeId,并生成 @en
锁定方案
- 默认返回完整的紧凑语义树;interactive_only 为可选模式
- RefMap 绑定 sessionId、tabId、snapshotId、navigationGeneration、frameId、backendDOMNodeId、role/name/nth
- Ref 在 BrowserSession 内单调递增且不复用
- backendDOMNodeId 失效时仅允许同 Tab、同导航代次、同 Frame、语义完全一致且候选唯一的安全重绑定
- 真正隐藏元素不进入快照;可滚动到的 offscreen 元素保留并标记
- 大型树完整保留在宿主,模型通过 scope/cursor 分层读取,禁止整体截断
- 动作后根据结果返回完整树、局部变化树或目标最新状态
- annotated screenshot 使用相同 refs;坐标操作绑定 screenshotId 和视口代次
验收标准
- 百度等大型页面不再返回 DOM too large 空提示
- 快照能稳定暴露输入框、按钮、标题、结果链接和控件状态
- iframe/Shadow DOM 中的 ref 可直接用于动作,不要求模型切 Frame
- 旧 ref 永远不会在新快照中指向另一个元素
- scope/cursor 过期时返回 STALE_SNAPSHOT_CURSOR
- 截图滚动、缩放或布局变化后旧坐标返回 STALE_SCREENSHOT
关联主问题:#251
依赖:#260
类型
观察协议 / 剪枝 DOM / 元素引用
背景
当前 DOMSnapshot.captureSnapshot 在复杂页面可超过 1 MB,超过 150 KB 后只返回截断提示,Agent 因而失去页面结构。截图和模型猜测 selector 无法替代稳定的结构化观察。
参考实现
参考 agent-browser 的 native snapshot:
锁定方案
验收标准