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/createdagent/disposeduseSessionsidebarRight.openTab/close/activesidebar.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、超时放行
DebuggerAttach、断点、暂停、继续、单步、调用栈、Scope、脚本源码
Source Map生成位置、原始位置、声明路径、解析路径、Build Identity
性能CDP Trace、Playwright Trace、CPU、Coverage、Heap Snapshot、Heap Sampling
环境Viewport、设备、Locale、Timezone、网络、CPU、离线、权限
ProviderManaged、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.tstests/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 插件能力PASS30 工具、真实浏览器、调试、证据采集和资源清理预检通过
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.js25b8950a1e4e2c210fd31df5ee8f32dcb32d1e67501ad3ae44af4f94583923b3
lib/client.js.map69274b7bf3820d9ed3fcfd4645e7b1c2ee47f3de17f701ea8d43ffdf36034eda
lib/index.mjs3247b9fc53f2b5869aa20d1edb249748b74a1875681c9035cbd9c325fac8ead6
lib/index.d.mts6884ae01362ca921f53016f2034670da9a36653fbf79333006a5e3414ddf5952

npm 发布门禁要求:

  1. npm pack --dry-run --json 预览文件清单;
  2. 生成实际临时 gzip tarball;
  3. 直接解析 POSIX tar 条目;
  4. 核对固定公开文件白名单;
  5. 核对包内每个文件非空;
  6. 核对包内文件与工作树逐字节一致;
  7. 删除临时 tarball;
  8. 候选冻结后,同版本只允许复核,不允许重新打包覆盖。

当前 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 人工验收按各自记录独立成立。