DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
A

dsh-agent-browser-auto

Agent Browser Auto

DeepSeek Harness desktop Agent browser: lightweight embedded mode by default, with an explicit option to switch to a real Chrome/Edge with an independent profile; unified browser_* tools (20) support snapshots, input, uploads, dialogs, waiting, and deep CDP mode.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:66jiujiu99/dsh-agent-browser-auto#644956865b46bbb850329609471b5f4876e84705
READMECompatibilityVersions

Compatibility and provenance

Agent Browser Auto is published as dsh-agent-browser-auto and currently resolves to version 0.6.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
11/3/2026

Versions

0.6.0stable
11/3/2026
0.5.0stable
11/3/2026
0.1.0stable
10/23/2026

Related plugins

Loading related plugins…

Latest
0.6.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
11/3/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in search-research.

Free Searchdsh-free-searchFree web search for DeepSeek Harness: 27 engines (Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel/You.com keyless; Zhihu global/site via MCP and Perplexity/SerpBase/DeepSeek (official + native tools/search)/Baidu/Kimi/Aliyun/DoubaAb Wechat Scrapedsh-ab-wechat-scrape--- description: "The out-of-tree wechat_scrape tool: retrieves WeChat official-account articles, filters promotional blocks, and saves each as a Markdown file, for maintainers of this machine's dsh profiles." kind: "package-reference" ---Ab Market Researchdsh-ab-market-researchAn out-of-tree DeepSeek Harness plugin: the trade_search tool (multi-round aspect-broadening query planning, publisher-tier ranking, source diversity, JSON snapshot) and its browser card in one package.Arisdsh-arisARIS research-workflow skills as a DeepSeek Harness bundle: 82 skills plus cross-model adversarial review through Codex.

README

dsh-agent-browser-auto · Agent 浏览器(自动)

给 DSH 桌面版装上「看得见的手」:模型用 browser_* 工具看见并操作用户可见的浏览器页面。 默认是右侧边栏里的轻量 Electron <webview>;需要完整浏览器能力时,可显式切换到独立 Agent profile 的真实 Chrome/Edge。

  • 版本:0.6.0 · 目标:DSH 桌面版 0.2.1-rc.5(Electron 44.7.0)
  • 契约:PROTOCOL.md(Host ⇄ Client 协议与双后端路由,改字段两边一起改)

为什么有两种模式:轻量模式启动快、就在侧边栏里,适合普通读取和表单操作;真实模式使用系统 Chrome/Edge 与 playwright-core,提供原生窗口、F12 和完整 Playwright 操作链。playwright-core 不下载浏览器,也不会读取或复制日常浏览器 profile。 两种模式共用工具有参数,但凭证、存储和页面不互相同步;切回轻量模式不会销毁真实浏览器页面。

它长什么样

右侧边栏多一个 tab 类型 「Agent 浏览器」(kind agent-browser)。模型调用工具时如果这个 tab 还没开, 插件会自己把它打开并把右侧栏展开——用户全程看得见 Agent 在点什么;关掉 tab 即停止(guest 被释放)。

模型 ──browser_*──▶ Host 工具层(URL 策略 + 审计 + 会话后端路由)
                         ├─ 默认:长轮询 ─▶ 侧边栏 Client ─▶ <webview>
                         │    └─ executeJavaScript + sendInputEvent + capturePage
                         └─ 显式真实模式:Playwright ─▶ 系统 Chrome/Edge
                              └─ 每会话专用持久/临时 profile,或 loopback CDP 显式连接

P2 侧边栏

  • 常驻可编辑地址栏:Enter 导航,无页面时直接打开;Escape 还原当前地址。
  • 导航与标签:后退/前进/刷新;新建、切换、独立关闭标签。
  • 真实状态:显示真实 loading/failure,失败可重试。
  • 事件驱动同步:真人点击页面后,地址栏 URL 与标签标题随页面事件同步。
  • 开发者工具与模式标识:真实窗口使用原生 F12;轻量侧边栏提供 DevTools 入口(取决于宿主支持)和后端模式徽标。

双后端与凭证隔离

后端如何进入页面/凭证范围退出与保留
轻量内嵌(默认)不需要设置沿用插件现有共享存储分区;各会话独立 guest切到真实模式不销毁轻量页面
真实浏览器·持久 profilebrowser_backend {action:"launch"}每个 Agent 会话使用独立 Chrome/Edge profile;不复制日常浏览器 Cookieembedded 仅切回;disconnect 断开;closeBrowser:true 关闭本 session 启动的浏览器
真实浏览器·临时 profilelaunch + temporary:true会话隔离,浏览器上下文关闭时删除适合一次性任务,不保存登录态
连接已有浏览器connect + loopback endpoint默认只控制 Agent 新建页;已有页必须再用 pageUrl 精确分享非本插件启动的浏览器不会被插件强制关闭

模式按 Agent session 保存,启动/连接成功后才切换,失败不会自动回退。真实窗口使用浏览器原生 F12。 这不是风控绕过或“环境伪装”功能,不隐藏自动化,不修改 UA,不同步 Cookie;目标网站仍可提示异常或拒绝访问。

安装

第 0 步:如果你是用「下载 ZIP」方式拿到的代码,先解除下载锁

从 GitHub 下载 ZIP 并解压后,Windows 会给每个文件打上 Mark of the Web("来自 Internet"标记)。 对 .cmd 这类可执行文件,这个标记会让 Windows 每次双击都弹「无法验证发布者,你确定要运行此软件吗」, 即使你已经点过"运行"——因为标记还在文件上。先跑一次把它清掉:

tools\unblock-folder.cmd

只删 Zone.Identifier 数据流,不改内容、权限、所有者;默认处理本插件目录(含子目录), 也可 -Path "C:\某个解压目录";想先看会改什么而不动手就加 -WhatIf。

用 git clone 安装的话没有这一步——git 不写 MOTW,不会弹窗。这也是推荐方式。

清除 MOTW 等于你确认信任这份代码,所以请顺手核一下源码:这个插件全是可读的 JavaScript, 没有编译产物、没有运行时下载执行。详细说明见文末「常见问题」。

第 1 步:拿到代码

# 推荐:git clone(不产生 MOTW,不会弹安全警告)
git clone https://github.com/66jiujiu99/dsh-agent-browser-auto.git

也可以 GitHub → Code → Download ZIP 解压(那就回到第 0 步先解除下载锁)。

本插件不发布 npm 包。运行依赖只有锁定版本的 playwright-core;通过 plugin_manager install_bundle 安装时由 DSH 处理依赖。 它不会下载 Chromium,真实模式只使用本机已安装的 Chrome/Edge。若要在源码目录单独运行测试,先执行 pnpm install。

第 2 步:装进 DSH

# 在 DSH 里(需要 danger-full-access 或逐次批准)
# target 传你 clone / 解压出来的那个目录的绝对路径
plugin_manager install_bundle target=C:\path\to\dsh-agent-browser-auto

以本地目录方式安装时,DSH 用的是 link:,package.json 的 files 字段在此模式下不生效 (打包/发布时才生效)。因此目录里的 tools/、test/ 会一起留在原地,属正常现象。

  • 安装后 Host 半边立即生效;Client 半边在桌面窗口里按需加载(首次安装若没看到 tab,按 Ctrl+R 刷新窗口一次)。
  • 改了 index.js / lib/*.js 之后:Host 代码不会热更(loader 不监听文件),需要重新 apply: plugin_manager set_plugin include:agent-browser-auto enabled=false → enabled=true。
  • 改了 client.js:Client HMR 会自动热替换(可在 ~/.dsh/storages/agent-browser-auto/debug.jsonl 里看到新 clientId)。

卸载

plugin_manager set_plugin include:agent-browser-auto enabled=false   # 先停用
plugin_manager remove_bundle target=dsh-agent-browser-auto     # 再移除

审计/调试数据不会自动删除,如需清理:删掉 ~/.dsh/storages/agent-browser-auto/ 即可。

工具面(20 个)

工具作用说明
browser_backend查询/切换浏览器后端status / launch / connect / embedded / disconnect;按 Agent 会话生效,绝不自动切换
browser_open打开 URL 并回快照newTab 可在当前后端新开一页
browser_snapshot重拍快照maxElements(默认 80)/text(默认 false,最省 token)/textLimit(默认 3000)/scope(默认 viewport)
browser_wait等条件成立后回快照text / selector / url 三选一;state:"hidden" 等消失;timeoutMs 默认 10000
browser_click点 @ref 或视口坐标先走真实输入管线,无反应才退回 DOM click
browser_type输入文本clear 先清空、submit 回车/提交表单
browser_select选择下拉项原生 select 与常见自定义下拉;返回 selected 与视口快照
browser_upload上传本地文件受控写入 input[type=file],返回文件名/大小与视口快照
browser_dialog预置对话框响应必须在触发动作前调用;accept/dismiss,不附快照
browser_press按键Enter/Tab/Escape/方向键/PageUp/PageDown/Home/End/Space
browser_scroll滚动先 wheel 事件,滚不动才 scrollBy
browser_navback/forward/reload/goto
browser_find按名字/文字找元素全文档(含 shadow / 同源 iframe,视口外也算);命中无 ref 的纯 JS 元素时给坐标,用 browser_click x/y 点
browser_deep_snapshot深度模式:CDP 读 a11y 树能看闭 shadow root / 跨源 iframe;需重启开调试端口(见下节),默认关闭
browser_screenshotPNG 落盘返回绝对路径,可直接 read_image

三项能力的关键边界:

  • browser_select 的 value / label / index 必须三选一,index 从 0 开始;支持原生 <select> 及常见 role=option/menuitem 自定义下拉。未命中回 OPTION_NOT_FOUND,目标不支持回 NOT_SELECT。
  • browser_upload 仅接受 1–5 个绝对本地路径、总大小不超过 8MiB;Host 逐个异步读取后以一次性 base64 命令发给 Client,Client 用 File + DataTransfer 设置 input[type=file] 并触发 input/change。 结果只含文件名/大小,不含路径或 base64;文件内容/实际路径不进入审计,paths 仅记为数组占位。 错误为 FILE_READ_FAILED / UPLOAD_TOO_LARGE / NOT_FILE_INPUT / UPLOAD_FAILED。
  • browser_dialog 必须在触发动作前调用,为下一次 alert/confirm/prompt 预置一次性响应; 无法关闭已经弹出的同步阻塞对话框,不支持 beforeunload。confirm 的 accept/dismiss 分别回 true/false;prompt accept 依次使用 promptText/对话框默认值/空串,dismiss 回 null。不附快照。

动作后会自动等待页面稳定:loading 或 DOM 持续变化时重置安静窗口,连续约 300ms 稳定即返回, 最多等 5 秒;需要等待指定内容时用 browser_wait,例如 {selector:"#loading",state:"hidden"}。 NO_REF 和 WAIT_TIMEOUT 默认同时返回错误与当前视口,模型可以直接选择现场里的元素恢复, 不必先补一次快照;显式 snapshot:false 可关闭。

快照形如(视口优先,默认不发正文):

Example Domain · https://example.com/
---
@e1 link "Learn more" → https://iana.org/help/example-domains
另有 7 个元素在视口外(用 browser_snapshot scope:document 看全部)
stats: 1 elements, 74 chars, ~19 tokens (scope=viewport)
  • 成本默认最低:browser_snapshot 默认 text:false(不发正文,最大头)、scope:viewport(只列视口内元素); 要看正文传 text:true(textLimit 默认 3000),要看全部元素传 scope:document。动作类工具(open/click/type/press/scroll/nav/select/upload) 回快照时同样默认视口 + 无正文。隐藏/零尺寸元素由 Client 几何剔除,不占用 token。
  • 每个快照都带 stats: {elements, chars, estTokens, scope},可据此对比成本。
  • 动作类工具(click/type/press/scroll/nav/select/upload)执行后默认回全量视口结构:模型一步拿到 「现在页面上有什么」,不必再调 browser_snapshot;传 snapshot:false 才省略快照。
  • 要省 token 时对上述工具传 delta:true:同一 URL 只报增量 [delta] (added/removed/changed + textChanged 时短采样 + textSample), stats 按增量文本自身计并附 +a -r ~c total=N;URL 变化 / 首帧 / 找不到上一帧自动回全量。 详见 PROTOCOL.md §6。
  • @ref 稳定:同一元素在多次快照里保持同一个 ref;页面重渲染把节点换掉后,点击会按「角色 + 名字」 自动找回语义相同的元素(并在结果里标 recovered),找不到才回 NO_REF 让你重拍快照。
  • 穿透 Shadow DOM 与同源 iframe:快照递归进入 open shadow root 与同源 iframe(含嵌套), 点它们时坐标自动换算到顶层视口——实测 shadow / iframe 里的按钮都能被真实鼠标事件点中。 跨源 iframe 受浏览器安全边界限制读不到,快照里会明确写「N 个跨源 iframe 的内容不可见」。 纯 JS 绑事件、既无 role 也无 tabindex/onclick 的 <div> 仍抓不到(启发式的固有边界)。
  • 结果按 UTF-8 字节截断到 maxResultBytes(默认 12000),超出会提示用 browser_snapshot 收窄。

配置(cordis.patch.yml 里 agent-browser-auto 行的 config)

键默认含义
allowedHosts[]非空时只放行这些主机(后缀匹配,example.com 命中 a.example.com)
blockedHosts[]优先拒绝的主机
enableEvalfalse是否允许 browser_eval
commandTimeoutMs45000单条命令等待上限
pollWaitMs20000长轮询挂起上限
maxResultBytes12000工具结果上限
auditDir""审计目录,空 = ~/.dsh/storages/agent-browser-auto
debugtrue是否写 debug.jsonl
deepMode.enabledfalse是否启用 CDP 深度模式(默认关闭,见下节)
deepMode.portFile""空 = %APPDATA%\@deepseek-ai\dsh-desktop\DevToolsActivePort
deepMode.endpoint""空 = 读 portFile 拼 http://127.0.0.1:<port>;非空直接用(仅允许 loopback)
deepMode.maxNodes200深度快照默认最多返回节点数
deepMode.timeoutMs8000单条 CDP 命令超时
realBrowser.browserauto真实模式依次选择 chrome / edge,也可固定一种;不会下载浏览器
realBrowser.profileDir~/.dsh/storages/agent-browser-auto/real-browser-profiles每会话专用持久 profile 的根目录,不使用日常浏览器目录
realBrowser.startupTimeoutMs30000启动或连接真实浏览器的超时(1000–120000ms)

深度模式(CDP,可选,默认关闭)

普通快照只能看到 DOM 能读到的部分:跨源 iframe 和 closed shadow root 内容读不到 (浏览器安全边界)。深度模式改用本机 CDP 端口直连 Chromium,读无障碍树(a11y), 因此能看到这些内容,并给出顶层视口坐标(可直接 browser_click x/y)。

怎么打开:启动器在 tools/。

tools\start-dsh-debug.cmd      ← 双击这个
tools\start-dsh-debug.ps1      ← 真正的逻辑(.cmd 只是纯 ASCII 转发)

它会:① 用 --remote-debugging-port=0 启动(端口随机,不是扫描器惯用的 9222); ② 加 --remote-allow-origins=devtools://devtools,阻断「你访问的网页从浏览器内部连本机调试端口」这类攻击; ③ 从 DevToolsActivePort 读出真实端口,并主动 HTTP 探活确认端口真的在监听,再打印给你。

启用前提(缺一不可)

  1. 完全退出 DSH(含托盘)。否则新参数会被已有实例吞掉、端口不会出现——脚本会替你检查并明确报错。
  2. 在插件配置里打开 deepMode.enabled: true,重新 apply 插件。

用完关掉 DSH、用普通方式重启,端口就消失了。

为什么启动器是 .ps1 + 一个纯 ASCII 的 .cmd 转发层? cmd.exe 按系统 OEM 代码页(中文系统是 936)逐字节解析批处理文件。UTF-8 的中文注释会被解码错位, 把后面的 REM 和换行一起吃掉,于是 cmd 把中文当成命令执行,窗口刷一屏「不是内部或外部命令」 然后瞬间闪退。这就是最初那版启动器闪退的真实原因。 现在两个文件都是纯 ASCII、无 BOM:.cmd 只做一行转发,.ps1 承载全部逻辑, 因此在 Windows PowerShell 5.1 和 PowerShell 7 下、在任意代码页下解析结果都一样。中文文档写在这里(README),不进脚本。

端口没开 / 没启用时,browser_deep_snapshot 会优雅失败为 DEEP_UNAVAILABLE(message 里带「用 tools\start-dsh-debug.cmd 重启并在设置里打开 deepMode」的原话), 不会影响其他工具。插件启动时会在 debug.jsonl 记一条 deep-mode(enabled / 端口可达性)。

它多看到什么(真机实测,非推测)

页面里的东西普通快照深度模式(a11y)
closed shadow root 里的 <button>闭封按钮读不到读到:button "闭封按钮" @ (16,93 53x19)
aria-label="设置" 的纯图标按钮只剩符号 ⚙读到:button "设置"
跨源 iframe 里的按钮/链接读不到(只有「不透明矩形」提示)读到,且坐标是顶层视口坐标:[main > #1] button "iframe 按钮 1" @ (107,152 79x19)
canvas 里画出来的文字读不到也读不到(a11y 树里没有节点,只能靠截图兜底)
整页成本13 元素 ≈175 tokens6 节点 ≈41 tokens

一句话:深度模式补的是「DOM 里有、页面 JS 读不到」的那类(closed shadow root、原生语义名、 跨源 iframe);补不了「DOM 里根本没有」的那类(canvas 像素、图片里的文字)——那类请用 browser_screenshot。

跨源 iframe 的坐标靠逐层 frame 偏移换算(main > #1 > #2),任一环节换算不了就标 box:n/a,不编造坐标。

安全代价(重要):调试端口没有认证,只绑 127.0.0.1。运行期间本机任意进程都能 通过它控制这个 DSH 实例(含执行任意 JS)。所以默认关闭、端口随机;不用时用普通方式重启 DSH 即可让端口消失。插件端只做只读命令(Accessibility/DOM/Page/Target),不通过 CDP 点击或输入。

参数:url?(默认用本会话最近打开的 URL)、maxNodes?(默认配置值 200)、 scope?: 'a11y'|'dom'(默认 a11y;dom 走 DOM.getDocument({depth:-1,pierce:true}) 结构)、 includeFrames?: boolean(默认 true,深入跨源 iframe 会话)。

常见问题:双击 .cmd 弹「无法验证发布者 / 你确定要运行此软件吗」

这是 Windows 的 Mark of the Web(MOTW),不是插件的问题,也不是病毒告警。

触发条件:你从 GitHub 下载 ZIP 并解压后,Windows 会给每个解压出来的文件写一个名为 Zone.Identifier 的备用数据流(ZoneId=3,表示"来自 Internet")。对于 .cmd/.bat/.ps1/.exe 这类可执行文件,这个标记会让 Windows 每次打开都弹窗——即使你已经点过"运行",因为标记还留在文件上。 本插件里会命中的是 tools\start-dsh-debug.cmd 和 tools\unblock-folder.cmd。

一键消除:

tools\unblock-folder.cmd

它只删除 Zone.Identifier 这一个数据流,不改文件内容、权限、所有者;默认清理本插件目录(含子目录), 也可以传路径:tools\unblock-folder.cmd -Path "C:\某个解压目录"。先看会改什么而不实际改动: -WhatIf。

手动做法(等价):右键文件 → 属性 → 勾选「解除锁定」→ 确定。

用人话讲清风险:MOTW 存在的意义就是提醒你"这个文件来自网络、未经签名"。清除它就等于你确认信任这份代码。 请配合两点:① 只对你真正看过的发行版这么做;② 对照仓库里的源码核对——这个插件的全部代码都是可读的 JavaScript,没有任何编译产物或下载执行步骤。这也是本仓库不提供预编译二进制的原因。

提示:git clone 下来的文件不带 MOTW,只有"浏览器下载 ZIP 再解压"这条路径才会带。 想完全避开这个弹窗,用 git clone 安装即可。

安全边界(都是硬事实,不是约定)

  • guest 由主进程强制:sandbox:true、contextIsolation:true、nodeIntegration:false、plugins:false、disableDialogs:true; 权限询问全部拒绝(摄像头/麦克风/地理位置/通知),下载全部 preventDefault,弹窗全部 deny。
  • 导航只允许 http:/https:、无内嵌凭据、且不能指向 DSH 自身 origin —— Host 侧在命令下发前就拒绝并说明原因 (否则主进程会静默吞掉导航,模型只会看到「点了没反应」)。
  • Host 路由 /agent-browser-auto/* 走 ctx.connection.requestRejection(Host/Origin + 浏览器凭据),拿不到 connection 服务时 fail-closed 503;渲染进程发来的请求由主进程注入 cookie,外部进程默认拿不到。
  • 不做无头后台操作:状态只在可见的 tab 里产生;关掉 tab 就释放 guest。

安装即托管信任:DSH 的插件安装在宿主进程内、工作区沙箱之外运行(安装动作有权限门禁,装上之后没有沙箱)。 也就是说,任何插件都拿得到和你同等的本机权限。请只安装你读过或信任的插件;本仓库全部是可读 JavaScript, 无编译产物、无运行时下载执行,便于你自行审阅。

真实浏览器模式的额外边界

  • Electron 沙箱硬边界只保护轻量 <webview>;真实模式使用系统 Chrome/Edge 自身安全模型,权限弹窗、下载和扩展行为不沿用上述 webview 规则。
  • 专用 profile 是凭证隔离,不是匿名化:登录状态只保存在对应 Agent 会话目录;网页仍能看到浏览器版本、自动化状态和正常网络信号。
  • 连接已有浏览器仅限 loopback CDP;CDP 本身没有应用层鉴权,本机其它进程也可能连接,故只在你明确需要时开启。
  • 页面与工具文本始终是不可信数据,不把网页内容当指令;不自动输入凭证,不用敏感账户做测试。

兼容性

项目要求说明
DSH 版本0.2.1-rc.5(0.6.0 实测)插件依赖 desktop 的 webview lease API 与 side-bar tab 槽位
运行形态仅桌面版(Electron)Web 端没有 dshDesktop 桥,tab 内只显示提示
平台Windows(实测)· macOS / Linux 未验证启动器是 Windows 专用;不用深度模式时无平台依赖
Node≥ 20与 DSH 自带运行时一致
真实浏览器本机 Chrome 或 Edge仅真实模式需要;使用 playwright-core,不下载浏览器、不使用日常 profile

审计与排障

~/.dsh/storages/agent-browser-auto/

  • audit.jsonl —— 每次工具调用一行:ts / sessionId / tool / op / args / urlBefore / urlAfter / ok / error / ms / clientId
  • debug.jsonl —— 路由命中、客户端上下线、命令下发/超时、Client 侧日志与异常栈、deep-mode 端口可达性
  • shots/ —— browser_screenshot 落盘的 PNG

出问题先看 debug.jsonl 里最后几条 client-log / route-*;Client 侧任何 catch 都会上报,不会静默。

已知限制

  1. 仅桌面版:Web 端没有 dshDesktop 桥,tab 里只显示「只在桌面版可用」。
  2. 轻量模式必须有一个屏幕上的会话:浏览器 tab 按会话挂载;工具调用落在后台会话时回 NO_CLIENT(会提示先切过去)。真实模式使用独立窗口,不依赖侧边栏保活。
  3. 轻量模式关掉右栏/关掉 tab 后命令不可达:会立刻回 NO_CLIENT,不会排队等到你打开。
  4. 轻量模式的 browser_eval 受页面 CSP 限制(部分站点禁止 eval),失败会给可读错误。
  5. 轻量模式截图:fullPage 通过临时拉高元素高度实现,超长页面最多截 4000px;真实模式使用 Playwright 原生整页截图。
  6. 轻量模式的下载/摄像头/地理位置被主进程硬禁用;文件上传仅走 browser_upload 的受控文件 input 通道,边界见上。
  7. Client 半边热更会重建页面:HMR 之后原来的页面对象与 guest 会丢失,需要重新 browser_open(Host 会回 NO_CLIENT/NO_PAGE 提示重开)。
  8. 深度模式需要重启:随机调试端口只在用 tools/start-dsh-debug.cmd 启动的那次会话里存在; 普通启动没有端口,browser_deep_snapshot 会回 DEEP_UNAVAILABLE。关闭 DSH 再正常启动即可恢复默认(无端口)。
  9. 两种后端不共享页面与凭证:真实模式的标签不会出现在轻量面板列表中;切回后端只改变后续命令去向,不迁移页面。
  10. 内嵌 DevTools 取决于宿主:DSH 0.2.1-rc.5 打包版在 will-attach-webview 中固定 devTools: !app.isPackaged,插件无法覆盖;按钮会显示 DEVTOOLS_UNAVAILABLE。需要可靠 DevTools 时请显式启动真实 Chrome/Edge 并使用原生 F12。

验收状态(2026-11-03 实测)

需求状态证据
R1 轻量快照、操作、截图、标签与审计✅0.5.0 desktop 实测;本轮默认内嵌 browser_open 复测通过
R2.1 显式真实 Chrome 后端✅desktop 完成 launch/status/open/select/upload/prompt/wait/screenshot
R2.2 双后端隔离与 CDP 分享边界✅独立 profile、失败不自动回退、已有页精确分享、外部页面保留均有自动化覆盖
R2.3 侧边栏模式徽标✅DSH 0.2.1-rc.5 desktop 可见「轻量内嵌」与开发者工具入口
R2.4 内嵌 DevTools 窗口⚠️ 宿主限制rc.5 打包版禁用 guest devTools;按钮与 DEVTOOLS_UNAVAILABLE 提示已实测,不将窗口打开记为通过

0.6.0 自动化结果

  • 全量命令 68 / 68 通过:快照与工具参数、后端路由与 lossless JSON、CDP 集成、真实 Chrome 操作链及资源清理。
  • Edge 最终复测 3 / 3 通过;Chrome 与 Edge 的 CDP 附加/外部页面保留测试均通过。
  • pnpm pack --dry-run --json 通过:包含 lib/real-driver.js,不包含测试、profile 或运行截图。
  • 真实浏览器测试只访问 127.0.0.1 夹具,不使用日常浏览器 profile,也不接触敏感账户。

0.6.0 desktop 实测

  • 默认仍为轻量内嵌;显式启动真实 Chrome 成功,状态输出通过 DSH 工具 schema 与 lossless JSON 校验。
  • 本地夹具完成下拉选择、文件上传、prompt 往返回读、延迟 selector 等待和真实窗口截图。
  • 切回内嵌后 browser_open 与结构化快照正常;后端状态保持可查询。
  • 内嵌 DevTools 仅确认按钮与 API 调用路径,没有确认窗口打开;真实 Chrome 的 DevTools 由浏览器原生提供。

验证方法(可复现)

先执行 pnpm install,再在仓库根目录运行:

# 全量:单元 + CDP + 默认真实 Chrome/Edge 操作链
node --test --test-concurrency=1 test/snapshot.test.mjs test/tools.test.mjs test/backend.test.mjs test/cdp.test.mjs test/real-driver.test.mjs test/real-driver-cdp.test.mjs

# 指定 Edge 复测真实后端与 CDP 附加
$env:REAL_BROWSER = 'edge'
node --test --test-concurrency=1 test/real-driver.test.mjs test/real-driver-cdp.test.mjs
Remove-Item Env:REAL_BROWSER

# 检查发布包内容
pnpm pack --dry-run --json

本地 E2E 夹具:

node test/fixtures/server.mjs

test/fixtures/server.mjs 只服务 browser-e2e.html,启动后打印 127.0.0.1 URL。页面覆盖导航、延迟、 原生/自定义下拉、上传与 alert/confirm/prompt,可用 browser_open 打开后逐项验证。

保留的 0.5.0 证据

  • 真实 Electron webview 已验证原生/自定义下拉、单文件上传、三种对话框、刷新/后退/前进、 失败恢复导航与失效 @ref 自动补现场快照。
  • 当时单元测试 59 / 59 通过,CDP 集成 17 / 17 通过;这些历史数字不混入 0.6.0 的 68 项结果。

说明:以上数字都来自本机实测,不是设计目标。68 / 68 包含单元、CDP 与本地真实浏览器测试, 不表示 68 项外部网站 E2E。未在 macOS / Linux 上验证过,因此不做声明。

browser_tabslist/new/switch/close面板内多页,每个页面独立 guest
browser_console页面控制台近况console-message 事件 + 页面 error 钩子
browser_network请求近况主文档 navigation entry + fetch/XHR 包装 + Resource Timing 兜底
browser_eval执行 JS默认关闭(enableEval)
browser_close释放页面同时销毁 guest