DSH BrowserScope 测试报告
September 20, 2026 · View on GitHub
English Version | 简体中文
本文记录 DSH BrowserScope 当前 Release Candidate 的测试目的、测试内容、测试过程和测试结果。
候选状态以外部候选身份文件和 tarball 摘要为准。本文描述测试结果,不能单独证明某个版本已经完成 Git Tag、GitHub Release 或 npm 发布。
测试对象
package: dsh-browser-scope
version: 1.0.0-rc5
DSH compatibility targets: 0.1.5-rc.2, 0.1.6-alpha.1, 0.1.6-alpha.2
full browser runtime validation baseline: 0.1.5-rc.2
0.1.6-alpha.2 validation: API audit, strict build, fresh Profile lifecycle
Node.js: 22.x
package manager: pnpm 11.x
所有直接 @deepseek-ai/dsh-* Peer 均声明为 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2。
DSH 0.1.6-alpha.2 适配审计覆盖 BrowserScope 使用的 Agent、Session、Tool、Attachment、Connection、Permission Preset、Client Session、右侧栏和 Slot 接口。Alpha 2 保留 agent/created、agent/disposed、useSession、sidebarRight.openTab/close/active 和 sidebar.right.pane.tab;新增的 Session 多实例引用状态、右侧栏 Tab Inventory 与运行时插件卸载不要求修改 BrowserScope 业务源码。Host Runtime、RPC、工具、事件监听以及 Client Tab/Slot 注册均已通过 Cordis Effect 生命周期管理。
完整 Chromium 与复杂场景结果沿用 DSH 0.1.5-rc.2 的实机验证基线。RC5 另外执行严格 TypeScript、Host/Client 正式构建、npm tarball 字节门禁,以及全新 DSH 0.1.6-alpha.2 Profile 的安装、启动和卸载生命周期验证。本报告不会把 API 审计描述为完整浏览器功能回归。
本报告不自动承诺后续 DSH RC、正式版、其他操作系统或所有第三方浏览器插件兼容。
一、30 个浏览器工具集成
测试目的:确认 30 个 Agent 浏览器工具在真实 Chromium 中可以端到端工作,不是只通过类型检查和单元桩。
测试内容:标签与导航、页面观察、页面交互、文件链路、Console、Network、Debugger、Source Map、性能、环境模拟、Provider、扩展、人工协作和诊断取证。
测试过程:在真实 Chromium 中启动完整集成回归,由消费方依赖图解析 RC.2 npm 包,逐项调用工具并核对返回结果。
测试结果:
| 领域 | 已验证能力 |
|---|---|
| 标签与导航 | 新建、选择、关闭、前进、后退、刷新、导航 |
| 页面观察 | Snapshot、Ref、Query、Attribute、Screenshot |
| 页面交互 | Click、Hover、Type、Key、Scroll、Select、Wait、Dialog |
| 文件链路 | Upload、Download、Artifact 读取与 Session 隔离 |
| Console | 有界消息、错误、重复事件和脱敏 |
| Network | 请求列表、Body、请求/响应拦截、Continue、Abort、Fulfill、Replay、超时放行 |
| Debugger | Attach、断点、暂停、继续、单步、调用栈、Scope、脚本源码 |
| Source Map | 生成位置、原始位置、声明路径、解析路径、Build Identity |
| 性能 | CDP Trace、Playwright Trace、CPU、Coverage、Heap Snapshot、Heap Sampling |
| 环境 | Viewport、设备、Locale、Timezone、网络、CPU、离线、权限 |
| Provider | Managed、Persistent、External CDP、能力协商与断开 |
| 扩展 | Manifest V3、安装状态、启停、应用、真实 Popup |
| 人工协作 | Live View、Takeover、鼠标、键盘、输入法、PasteEvent、控制权归还 |
| 诊断证据 | Recorder、Checkpoint、Compare、Incident、Context/Build/Application Identity |
集成测试最终输出:
toolCount: 30
navigation: pass
panel: pass
splitView: pass
persistentContext: pass
extensions: pass
debugger: pass
diagnose: pass
networkControl: pass
profile: pass
二、九视图 DSH 原生工作台
测试目的:确认 BrowserScope 使用 DSH 官方右侧栏机制提供九个工作台视图,并正确处理关闭、切换和多 Pane 生命周期。
测试内容(RC1 历史基线):Hero 临时 Session 门禁、正式 Session 激活、九个视图切换、标签栏与导航栏持续性、面板内关闭与官方标签关闭同步、Session 切换、多 Pane 去重、旧版退出与释放流程。
测试过程(RC1 历史基线):在真实 DSH Web Client 中人工操作,逐项核对界面状态与输入区状态是否同步。
测试结果(RC1 历史基线):
- Hero 临时 Session 不会提前绑定正式 Agent Scope;
- 正式 Session 可以启用 BrowserScope;
- BrowserScope 使用 DSH 官方右侧栏页面型 Tab;
- 实况、诊断、Console、Network、Debugger、Performance、Provider、Extensions、Emulation 九视图可以切换;
- 标签栏、导航栏和当前页面状态在各视图中持续存在;
- 面板内关闭和 DSH 官方标签关闭都会同步输入区状态;
- Session 切换不会误关其他 Session 保存的 BrowserScope Tab;
- 多 Pane 中已挂载标签从自身 Action 导航,不会在当前活动 Pane 重复创建;
- RC1 旧版 Controller 的退出并保留页面、重新激活、退出并释放资源流程均符合当时预期。
RC2 新锁定界面实机结果
测试环境:隔离 DSH_HOME、隔离端口 31880、DSH 0.1.5-rc.2、当前工作树 BrowserScope,以及同一 Profile 中的真实第三方浏览器插件。
测试过程:用户在真实 DSH Web 中建立两个正式 Session。Session A 选择 BrowserScope,打开九视图菜单并释放本插件资源;Session B 独立选择其他浏览器工具。随后精确重启隔离 DSH Web,再次打开两个原 Session 检查锁定恢复。
测试结果:
- 新正式 Session 初始显示“尚未选择浏览器工具”;
- 选择 BrowserScope 后显示“已锁定”,九视图和已仲裁工具列表可用;
- 释放 BrowserScope 资源后仍保持 BrowserScope 锁定;
- 第二个 Session 可以独立选择其他浏览器工具,且不再提供启用 BrowserScope 的入口;
- 重启 DSH Web 后,两个原 Session 分别恢复为 BrowserScope 锁定和其他浏览器工具锁定;
- 两个持久记录均为 schema v2、
generation=1; - 三张 Session Controller 截图已按新界面重新生成并覆盖正式资源。
三、Session 级 Controller 共存
测试目的:确认 BrowserScope 可以在同一个 Profile 内按 Agent Session 管理浏览器工具面,并与第三方浏览器插件共存而不修改对方进程、配置或页面。
RC1 已执行的切换基线
测试内容:代表性共存测试使用了一款当前较常见、使用率较高的成熟浏览器插件作为压力对照。公开报告不披露对照插件名称、仓库或精确版本。单一对照结果不代表全生态兼容。
测试过程:在同一 Profile 中同时加载 BrowserScope 与对照插件,分别在普通 Session 和 BrowserScope Session 中统计可见工具,检查兄弟 Session 状态,最后按 RC1 旧流程退出 BrowserScope 并复查对照插件恢复情况。
测试结果:
当前 Session 启用 BrowserScope 后:30 个 BrowserScope 工具可见
同名工具:由 BrowserScope 在当前 Agent Scope 遮蔽
对照插件独有浏览器工具:只在当前 Agent Scope 受限
兄弟 Session:不受影响
RC1 旧版 BrowserScope 退出后:对照工具恢复
对照插件进程、配置和页面:不由 BrowserScope 关闭或修改
RC1 Controller 生命周期还验证了原子注册、维护队列、冷恢复、Agent 替换竞态、损坏状态回退、安全退出和 HMR 清理。这些结果证明旧切换实现的历史基线,不等同于 RC2 新锁定状态机已经通过。
RC2 新锁定规则
RC2 工作线已经实现以下契约:
- 新正式 Session 初始为
unselected,选择前浏览器工具不向 Agent 暴露; - 第一次选择 BrowserScope 或其他浏览器工具后,该 Session 永久锁定所选工具;
- 释放 BrowserScope 页面和运行资源不解除锁定,也不恢复第三方工具;
- DSH 重启或 Agent Scope 替换后恢复原选择;
- 持久记录升级为 schema v2;旧 BrowserScope 激活状态继续锁定,旧
other状态迁移为unselected; - 损坏记录保持
unselected;已经持久锁定 BrowserScope 的记录即使恢复失败,也不会降级成可改选状态; - BrowserScope 只修改当前 Agent Scope 的工具可见性,不停止或重配第三方插件。
新的 tests/browser-controller.ts 和 tests/session-controller-integration.mjs 已按上述契约执行通过。
Controller 专项结果:
unselectedToolsHidden: true
browserScopeLocked: true
otherToolsLocked: true
releasePreservedSelection: true
restartPreservedSelection: true
migrationPersistedAsSchemaV2: true
failedSelectionRolledBack: true
failedOtherSelectionRolledBack: true
failedRestorePreservedLock: true
真实 DSH Agent Scope 集成结果:
globalBrowserToolCount: 3
unselectedBrowserToolCount: 0
activeBrowserToolCount: 30
browserScopeSelectionLocked: true
otherBrowserSelectionLocked: true
releasePreservedSelection: true
sameNameShadowed: true
uniqueThirdPartyRestricted: true
browserScopePersistedGeneration: 1
otherBrowserPersistedGeneration: 1
runtimeRemoved: true
四、浏览器状态与 Session 隔离
测试目的:确认共享 Persistent Context 与 Session 隔离同时成立,共享网站状态但不串页面和调试状态。
测试内容:默认 managed-persistent/default 的共享项和隔离项。
测试过程:在多个 DSH Session 之间交叉操作页面、标签、Popup、Debugger、Network 拦截和 Artifact,核对状态边界。
测试结果:
已验证的跨 Session 共享内容:
- Cookie;
- LocalStorage、IndexedDB、Cache Storage;
- HTTP 缓存;
- Service Worker;
- 网站权限;
- 扩展登记与加载状态。
已验证的 Session 隔离内容:
- Page、View、标签与 Popup;
- 活动标签和上下双页焦点;
- Debugger、Network、Ref、Snapshot 和 Screencast;
- Artifact 与人工接管;
- Controller 状态与 generation。
网页 window.open() 会继承正确 Owner。无法确认 Owner 的新页面不会暴露给任意 Session。销毁一个 Session 不会关闭其他 Session 的页面。扩展立即生效触发全局协调重建时,各 Session 的 URL、活动标签和双页布局会按记录恢复。
五、跨上下文与真实浏览器边界
测试目的:防止 Agent 把"相同 URL""相同页面外观"或"同身份测试"误判为完整业务等价证明。
测试内容:主页面与 OOPIF、Target / Frame / Document / Execution Context 生命周期、同文档与跨文档导航、Frame 交换、多种执行世界、Shadow DOM / SVG / Canvas Surface、多 Build 与 Application Identity。
测试过程:在真实 Chromium 中构造跨上下文场景,检查身份传播、失败关闭和源码内容身份。
测试结果:
- 主页面与 OOPIF;
- Target、Frame、Document 和 Execution Context 生命周期;
- 同文档导航与跨文档导航;
- Frame 交换、占位提交与移除;
- 主世界、隔离世界和暂停帧;
- Shadow DOM、SVG 和 Canvas Surface;
- 多 Build 与 Application Identity;
- 不可比 Checkpoint/Compare 的失败关闭;
- Source Map 声明路径、解析路径和源码内容身份。
以上项目全部符合预期。
六、输入、实况与人工接管
测试目的:确认实况画面和人工输入在真实浏览器中可用,且控制权归属清晰。
测试内容:标准实况尺寸、自适应 Viewport、双页画面流、帧预算、输入坐标系一致性、代际变化后的旧输入拒绝、鼠标与键盘输入、中文输入法、剪贴板 PasteEvent 和 Takeover 权限边界。
测试过程:在实况画面中执行人工输入,并在 View、Screencast 和 Viewport 代际变化后重放旧输入。
测试结果:
- 标准
1280×720实况; - 自适应 Viewport 与有限强制重排;
- 浏览器内部上下双页独立画面流;
- 30 FPS 有效帧预算;
- 最高
1920×1200、JPEG 85 的实况参数; - 同坐标系动画换帧下的人工输入;
- View、Screencast 和 Viewport 代际变化后的旧输入拒绝;
- 鼠标按下、移动、释放与滚轮;
- 键盘修饰键、中文输入法与空格输入;
- 系统剪贴板只通过最终 PasteEvent 进入页面,不读取或枚举历史;
- Takeover 期间模型写操作受限,归还后恢复。
七、扩展与浏览器供应
测试目的:确认扩展安装链路的输入校验和运行时边界有效。
测试内容:扩展来源输入、CRX 解析、Manifest 版本、ZIP 结构安全、扩展身份一致性、安装与启停、Popup 页面行为、并发 RPC 互斥。
测试过程:在真实 Chromium 中安装扩展,检查 Popup 是否进入普通标签栏,并验证长 RPC 与 Snapshot 轮询的互斥行为。
测试结果:
- Chrome Web Store URL 或扩展 ID 输入;
- CRX2/CRX3 解析与签名相关身份校验;
- Manifest V3;
- ZIP 路径穿越、重复条目、符号链接、加密、文件数量与大小上限;
- 扩展 ID 与运行时 Origin 一致;
- 安装、启用、禁用、卸载和重启应用;
- 真实
chrome-extension://Popup 页面、实况和输入; - Popup 不进入普通标签栏,不污染 Session 活动网页;
- 扩展长 RPC 与 Snapshot 轮询互斥,避免连接层并发错误。
当前自动 Chromium 安装路径重点验证 Windows x64。网络源不可达时,面板返回可恢复错误,超时不会显示为安装成功。
八、性能、隐私与有界性
测试目的:确认诊断数据有界、输入隐私不落盘、跨 Session 读取失败关闭。
测试内容:Recorder 的 Off、Rolling、Deep、Metadata-only 和 Incident 阶段,保留窗口、淘汰规则、降级行为、输入追踪脱敏、诊断值 JSON 无损和跨 Session Artifact 读取。
测试过程:运行公开测试并执行 30 分钟虚拟时间保留窗口模拟。
测试结果:
- Rolling 保留窗口为 180 秒;
- Incident Freeze 在普通事件淘汰后仍保留;
- 高负载可以降级为 Metadata-only;
- Timeline 和事件数量有界;
- 输入追踪不保留输入明文;
- 诊断值满足无损 JSON;
- 跨 Session Artifact 读取失败关闭。
30 分钟虚拟时间模拟只证明保留与淘汰算法边界,不等同于真实墙钟 30 分钟浏览器稳定性测试。
生产依赖已通过官方 npm Registry 安全审计,当前结果为无已知漏洞。安全数据库结果会随时间变化,发布后仍需持续复核。
九、复杂应用场景试跑
测试目的:在一个接近真实生产故障的任务中检验 BrowserScope 的完整证据采集能力。
测试内容:任务包含连续异步任务、旧结果迟到、页面预览与草稿与导出与刷新之间的身份传播、生产压缩 Bundle 与外部 Source Map、跨站点与 OOPIF、私有判定边界,以及修复前后的浏览器证据采集。
测试过程:由 Agent 使用 BrowserScope 复现故障、采集证据、提交修复补丁,再由外部验收设施执行判定。
测试结果:结果分为四层,必须分层理解。
| 层级 | 结论 | 解释 |
|---|---|---|
| BrowserScope 插件能力 | PASS | 30 工具、真实浏览器、调试、证据采集和资源清理预检通过 |
| Agent 提交的应用补丁 | PARTIAL PASS | 公开测试与构建通过,私有关系矩阵为 4/5,漏掉一个身份变化与低顺序回退组合 |
| 外部正式验收设施 | FAIL | 正式访问前服务端口已经不可连接,且缺少完整进程退出证据 |
| 综合 | QUALIFIED_PARTIAL_PASS | 支撑插件能力结论,但不能宣称应用修复、模型表现和外部设施全部通过 |
本次试跑推动 `browser_diagnose$ 增加通用"身份 \times 顺序 \times \text{Owner}/\text{Context}"完成指导。改进不包含任务专属字段、私有答案或硬编码测试结论。
十、构建与发布确定性
测试目的:确认构建产物不随绝对路径漂移,\text{npm} 包内容与工作树一致。
历史测试内容:在两个不同绝对目录中执行构建并比对字节。\text{npm} 门禁先预览清单,再生成真实临时 \text{gzip} \text{tarball},直接解析 \text{POSIX} \text{tar} 条目逐项核对,最后删除临时 \text{tarball}。
历史测试结果:\text{RC1} 对应四个产物已证明可在不同绝对目录中逐字节一致。\text{CSS} \text{Modules} 使用仓库相对稳定路径参与 \text{Hash},维护者目录、公开副本和 \text{CI} 不会因绝对路径不同而生成不同的 \text{Client} 字节。
当前 \text{RC2} 工作树构建结果:$npm run build` 已通过严格 TypeScript、Host ESM、类型声明和 Client Bundle 构建。当前产物摘要如下;本轮没有重复执行双目录确定性构建。
| 产物 | SHA-256 |
|---|---|
lib/client.js | 25b8950a1e4e2c210fd31df5ee8f32dcb32d1e67501ad3ae44af4f94583923b3 |
lib/client.js.map | 69274b7bf3820d9ed3fcfd4645e7b1c2ee47f3de17f701ea8d43ffdf36034eda |
lib/index.mjs | 3247b9fc53f2b5869aa20d1edb249748b74a1875681c9035cbd9c325fac8ead6 |
lib/index.d.mts | 6884ae01362ca921f53016f2034670da9a36653fbf79333006a5e3414ddf5952 |
npm 发布门禁要求:
npm pack --dry-run --json预览文件清单;- 生成实际临时 gzip tarball;
- 直接解析 POSIX tar 条目;
- 核对固定公开文件白名单;
- 核对包内每个文件非空;
- 核对包内文件与工作树逐字节一致;
- 删除临时 tarball;
- 候选冻结后,同版本只允许复核,不允许重新打包覆盖。
当前 RC2 工作树已实际执行上述 npm 门禁。文档回填前后两次检查均通过:预览 20 个文件、实际 tarball 20 个文件、包内文件全部非空并与工作树逐字节一致;临时 tarball 均由检查器删除。压缩体积属于检查运行结果,不写入包内文档,避免文档自身改变归档字节。
Release Candidate 的项目 .npmrc 默认发布标签固定为 rc。正式发布命令仍必须显式传入 --tag rc,并以 npm dry-run 输出 with tag rc 作为最终判定,避免预发布版本占用 latest。
十一、资源清理
测试目的:确认测试结束后浏览器、端口、External CDP 和运行目录均已释放。
测试内容:端口关闭、External CDP 断开、运行目录移除,以及各类浏览器资源的生命周期收敛。
测试过程:完整 Chromium 集成结束后检查残留进程、端口和目录,并单独验证 External CDP Disconnect 对用户浏览器的影响。
测试结果:
portClosed: true
externalCdpClosed: true
runtimeRemoved: true
另验证:
- External CDP Disconnect 不关闭用户浏览器;
- BrowserContext、CDP Session、Debugger、Fetch、Trace、Recorder 和 Screencast 按生命周期收敛;
- 临时 tarball 和候选解包副本完成清理;
- 根级运行目录不残留;
- 冻结候选与身份文件只读。
十二、尚未证明的内容
当前结论不覆盖:
- 所有 DSH 版本;
- 所有操作系统与 CPU 架构;
- 所有第三方浏览器插件;
- DRM、Native Messaging、Manifest V2;
- CAPTCHA、验证码、Passkey/WebAuthn 或设备确认自动化;
- 所有网站反自动化策略;
- 所有浏览器扩展和 Chrome Web Store 网络环境;
- 被调试应用本身的业务正确性;
- 任意模型在任意任务中的成功率;
- 外部测试服务和部署系统的稳定性;
- 对 DSH 插件全生态的绝对排名。
十三、复现方式
pnpm install --frozen-lockfile --ignore-scripts
pnpm peers check
npm run build
node scripts/check-public-package.mjs
仓库保留历史专项和集成测试文件,默认脚本不聚合启动大型 Chromium。复核特定能力时,维护者应根据变更范围显式运行对应的单个测试文件。需要真实 Chromium 时,还必须显式提供已经验收的浏览器根。测试不得隐式下载,也不得扩大到无关场景。
公开 CI 不隐式下载维护者浏览器,也不运行需要私有测试设施的场景。公开结果只用于复核源码、依赖、构建和实际 npm tarball。复杂应用试跑与真实 Web 人工验收按各自记录独立成立。