dsh-plugin-browserskill
Tencent/BrowserSkillBrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edge Agent Window,支持可访问性与 VOM 页面观察、截图、隔离的多会话控制和 Web UI 实时观察浮层。
为 DeepSeek Harness 提供真实浏览器操作能力:网页浏览与信息提取、表单填写、多标签页协作和多步骤任务执行;支持增量 DOM、会话隔离、截图、操作结果检查与证据归档回读。

Native Chromium browser Agent tools for DeepSeek Harness
在 WebVoyager 549 tasks / 13 站点上,按下文完整评分规则复核后取得 88.0%(483/549) 的成功率,平均 16.3 steps、140 s、Agent 标价估算 $0.028 / 任务。归档中的 reference Judge 为 495/549(90.2%);两种口径及逐题结果见评测报告。
浏览器命令失败的处理、点击检查和脚本异常说明见可靠性文档;原文引用的获取方式见证据文档。
给 DeepSeek Harness 装上真实浏览器:让 Agent 能够打开网页、理解页面、填写表单、管理标签页并完成多步骤任务。
我们将 dsh-browser-plugin 作为可独立安装的 DeepSeek Harness(DSH) Web profile 插件。它直接启动本机 Chrome 或 Chromium,通过 Puppeteer、Chrome DevTools Protocol(CDP)和增量 DOM 快照向 Agent 提供 16 个浏览器操作与 1 个归档回读工具。
本仓库包含浏览器插件源码和预构建的 lib/,不包含 DeepSeek Harness 源码,也不要求用户克隆 Harness 仓库。
本版本通过 DSH 的原生扩展点,把浏览器运行时与上下文策略接入 Agent Harness。这里的 Host 是 DSH 的 Agent/Session 运行时;插件仍可独立打包安装,不需要复制或修改 DSH 源码。
| 任务 | 没装插件 | 装上插件 |
|---|---|---|
| 访问动态网站 | 只能依赖搜索或静态抓取 | 启动真实 Chromium 并操作页面 |
| 填写复杂表单 | 无法处理弹窗、下拉框和动态字段 | 通过 DOM 引用定位、输入和点击 |
| 多步资料调研 | 每一步都要人工复制页面内容 | Agent 可在多个标签页之间持续探索 |
| 理解页面变化 | 反复读取整页,浪费上下文 | 优先返回 DOM 差异,必要时建立完整基线 |
| 查看图表和图片 | 只有文本信息 | 截取指定视觉元素并保存为 DSH attachment |
+| / -| 差异,减少重复上下文。[N],可输入元素使用 <N>,视觉元素使用 [view:ID]。defineTool、approval、取消信号和 attachment 服务,不依赖兼容服务器。browser_start 开始并持续使用 browser_*,不会用 web_search 或 web_fetch 替代。browser_recall,不强制逐页登记或补齐字段。stateId 恢复支持的表单、展开状态与滚动位置,并将不完整恢复明确标为 partial。browser_execute_script 支持 JSON-LD、重复列表和有界结果;OOPIF 路由、CDP 录制/回放与统计接口用于可复现的 DOM 诊断。>=22.19pnpm(DSH 的插件安装命令会调用它)node --version
pnpm --version
如果尚未安装 pnpm:
npm install --global pnpm
已验证 DSH 0.2.1-rc.2 桌面宿主,并保留 0.1.2-alpha.2 支持;插件会适配两版的工具结果消息和上下文替换接口。
搜索 dsh-browser-use,确认仓库为 dengpeihua/dsh-browser-use 后安装。仓库附带预构建的 lib/,pnpm 无需在安装时编译本插件或授权其构建脚本。安装仍需联网下载运行依赖。
评测归档 output/ 保留在 Git 仓库中,通过 .gitattributes 排除在源码下载包之外,避免安装插件时下载数 GB 的评测记录;需要完整记录时请浏览 GitHub 或使用 git clone。
若之前停在“正在安装”或出现 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED,取消旧任务并刷新市场后重新安装,确保拉取当前提交。开发者修改源码后应运行 npm run build,将生成的 lib/ 一起提交。
该包目前尚未发布到 npm。取得本仓库源码后,先生成标准 npm tarball,再安装到 DSH 的 web profile:
Set-Location path\to\dsh-browser
npm install
$package = npm pack --silent
npx @deepseek-ai/dsh@0.1.2-alpha.2 plugin --profile web add ".\$package"
npx @deepseek-ai/dsh@0.1.2-alpha.2 --profile web --dump-config
npx @deepseek-ai/dsh@0.1.2-alpha.2 web
--dump-config 中应出现 id: dsh-browser 和 name: dsh-browser-plugin。
npx @deepseek-ai/dsh@0.1.2-alpha.2 plugin --profile web add dsh-browser-plugin
npx @deepseek-ai/dsh@0.1.2-alpha.2 web
首次使用 npx 时可能会下载 npm 发布的 DSH CLI 及其依赖;插件安装会下载本插件及其依赖。两条路径都不会下载 DeepSeek Harness 源码 checkout。
默认配置可以直接使用。在本地打包前,可以修改本仓库的 cordis.patch.yml。安装完成后,把下面的条目合并进 $DSH_HOME/profiles/web/cordis.patch.yml(DSH_HOME 默认是 ~/.dsh)已有的 YAML 列表;不要覆盖文件中的其他 profile 条目。该层会覆盖 bundle 默认值。
DSH 的 profile patch 会替换目标条目的整个 config,因此覆盖时要重述需要保留的字段:
- id: dsh-browser
config:
headless: true
noSandbox: false
approvalMode: mutating
viewportWidth: 1280
viewportHeight: 900
toolTimeoutMs: 120000
maxWaitSeconds: 300
maxContextDeltas: 8
scriptMaxLines: 100
scriptMaxBytes: 8192
修改后重启 DSH,并用 npx @deepseek-ai/dsh@0.1.2-alpha.2 --profile web --dump-config 检查最终配置。
| 需求 | 配置项 | 默认值 | 常用改法 |
|---|---|---|---|
| 后台无界面运行 | headless | false | 改为 true |
| 指定浏览器程序 | chromePath | 自动探测 | 填入 Chrome/Chromium 绝对路径 |
| 调整操作审批 | approvalMode | mutating | off、mutating 或 always |
| 调整浏览器窗口 | viewportWidth / viewportHeight | 1280 / 900 | 改为所需正整数 |
| 限制单次工具时长 | toolTimeoutMs | 120000 | 填写正整数毫秒数 |
| 限制等待时长 | maxWaitSeconds | 300 | 填写正整数秒数 |
| 限制 DOM 增量链长 | maxContextDeltas | 8 | 正整数;达到后生成完整检查点 |
| 限制脚本可见输出 | scriptMaxLines / scriptMaxBytes | 100 / 8192 | 改为所需正整数 |
| 保存完整脚本结果 | outputDir | 系统临时目录 | 填入目标目录绝对路径 |
只有受控容器确有兼容性需要时才应设置 noSandbox: true。
安装后,直接在 DSH 中使用自然语言描述任务:
打开 Hugging Face 热门模型页面,整理排名前三的模型名称、机构、参数规模和下载量,并给出来源页面。
打开联系表单,填写我提供的字段,检查必填项和格式校验,但不要最终提交。
调查一篇论文的官方代码仓库、依赖、最近维护状态和常见复现问题,最后判断复现难度。
涉及登录、购买、发布、删除或最终提交等高风险动作时,应明确限制任务边界并保留 approval。
普通浏览器 Agent 经常在每次操作后把整个页面重新发送给模型。这个插件会保留同一标签页的 DOM 快照链:
首次观察 → mode:full 完整 DOM
少量页面变化 → mode:incremental 新增 +| 与移除 -|
大量变化/检查点 → mode:full 建立新的完整基线
没有变化 → mode:nochange 简短状态提示
处理链路如下:
CDP Snapshot
→ DOM Tree
→ 可见性与可交互性检测
→ 剪枝、内联合并和视觉元素标记
→ 结构化文本渲染
→ 与上一快照计算差异
→ 返回给 Agent
browser_restore_state 优先回到仍有效的浏览器历史条目,失败时访问原 URL,再逐项恢复并验证受支持状态。它使用完整版本号(如 tab0-dom3.2)恢复检查点 URL、原生表单值、勾选/下拉选项、details 展开状态,以及主页面和局部容器的滚动位置。恢复后逐项核对;不完整时返回 partial。密码、文件选择、iframe、任意弹窗与 SPA 内存不在恢复范围内。
| 工具 | 作用 |
|---|---|
browser_start | 启动浏览器并打开 URL |
browser_observe | 不刷新页面,重新观察完整状态;支持 HTML 或 Markdown |
browser_goto | 导航当前标签页 |
browser_refresh | 刷新当前页面 |
browser_restore_state | 按精确 stateId 恢复可支持的页面状态,并报告未恢复项 |
browser_new_tab | 新建标签页 |
browser_switch_tab | 切换活动标签页 |
browser_close_tab | 关闭一个或多个标签页 |
browser_click | 点击 [N] 元素 |
browser_input | 向 <N> 元素输入内容 |
browser_reveal_offscreen | 展示已知的离屏元素 |
browser_scroll_next_screen | 滚动到下一段未探索内容 |
browser_scroll_to_page | 跳到指定页面位置 |
browser_execute_script | 在页面上下文执行 JavaScript |
browser_view_elements | 截取 [view:ID] 视觉元素 |
browser_wait | 可取消地等待指定秒数 |
browser_recall | 按需回读历史事实或已归档的页面观察 |
DSH Agent Session
→ Cordis 加载 dsh-browser-plugin
→ @deepseek-ai/dsh-tools defineTool
→ DSH approval / cancellation / timeout
→ browser operation
→ Session-scoped BrowserManager
→ Puppeteer + Chromium + CDP + DOM Service
→ canonical tool output / DSH attachments / observation metadata
→ agent/pre-step: browser context retention
→ Session surface → next model request
项目结构:
dsh-browser/
├─ src/
│ ├─ index.ts # Cordis 插件入口与生命周期
│ ├─ plugin-tools.ts # 注册 16 个浏览器工具,另有 1 个归档回读工具
│ ├─ tool-schemas.ts # 参数与输出 schema
│ ├─ config.ts # 配置 schema 与校验
│ └─ browser/
│ ├─ manager.ts # 浏览器与标签页生命周期
│ ├─ operations/ # 导航、交互、观察、滚动等操作
│ ├─ cdp/ # CDP 封装
│ └─ dom/ # DOM 构建、渲染、差异与视觉映射
├─ test/ # node:test 测试
├─ scripts/ # 真实浏览器和安装验证脚本
├─ cordis.patch.yml # DSH bundle patch
└─ package.json # npm 与 DSH bundle 清单
src/ 是源码事实来源,lib/ 是 npm run build 生成的发布产物,不要直接编辑 lib/。
上下文策略优先通过 Session.snapshotEvents() 读取当前宿主日志;对依赖锁定的 DSH 0.1.2-alpha.2 使用其 events getter。源码链接安装修改后需重新构建插件并重启 pnpm dsh web,使进程加载新的 lib/。
我们对 17 个工具统一复用 approval、取消和输出限额,并保持以下能力边界:
| 能力 | 使用方式与边界 |
|---|---|
| 显式观察 | browser_observe({format: "html"}) 不导航、不刷新,建立完整 DOM 基线;markdown 使用完整 AX 语义树并保留操作引用。 |
| 结构化数据 | __data、__find、__records 和 __skeleton 帮助读取 JSON-LD、Microdata 和已加载的重复列表;页面数据仍需按任务要求验证。 |
| 跨域 iframe | CDP 请求路由到节点所属子会话,元素引用按 frame 隔离;主页成功不自动证明子框架可操作。 |
| 页面变化提醒 | Host 在 URL 与最近观察不一致时要求重新观察;相同 URL 内的人工修改仍需显式观察。 |
| 离线回归 | `npm run dom:regression -- capture |
dsh-browser-plugin/diagnostics 导出 captureDomTape、replayDomTape、CDPTape 和 CDPStats。这些接口用于 DOM 文本、元素编号和管线性能诊断,不等同于线上任务成功率。
在本仓库根目录打开 PowerShell,要求 Node.js >=22.19 和本机 Chrome/Chromium。脚本直接启动真实 DSH AgentLoop 和浏览器,无需先启动 DSH Web 界面。Agent 自动操作网页,独立的 LLM Judge 请求负责评分。
# 首次使用或依赖变化后安装
npm install
# 首次评测及修改源码后重新构建
npm run build
默认读取现有 DSH 配置(DSH_HOME 默认是 ~/.dsh):从 settings.yaml 获取当前 Agent provider/model/reasoningEffort,通过环境变量或 .credentials.yaml 的凭据引用获取 API Key。MiniMax 默认沿用 DSH 的 Anthropic-compatible 路径;high 按当前 DSH 映射为 thinking.enabled 和 16384-token 思考预算,完整 thinking 块随工具调用历史回放。默认 Agent 和 Judge 共用模型、推理档位及凭据,也可用 EVAL_* 环境变量分别覆盖,密钥不会写入仓库。
# 只检查并列出 549 题,不启动浏览器、不调用模型 API
npm run eval -- --data assets/benchmark/WebVoyager_data.json --dry-run --reasoning-effort high --headed --timeout 600000 --judge reference
# Allrecipes、Apple、Amazon 各一题,显示浏览器窗口方便观察
npm run eval -- --data assets/benchmark/WebVoyager_data.json --out output/evals/pilot-run1 --ids "Allrecipes--0,Apple--0,Amazon--0" --reasoning-effort high --concurrency 3 --headed --timeout 600000 --judge reference
正式评测条件固定为 --headed --timeout 600000 --judge reference:显示浏览器窗口、每题最多运行 600 秒,并加载下文集中列出的完整评分规则。命令显式写出这些参数,便于复核 manifest 和复现实验。--reasoning-effort high 固定 Agent 和默认 Judge 的推理档位,并写入运行指纹。真实评测会消耗 Agent、Judge 的 API 额度;npm run eval:smoke 使用确定性模型替身,不产生正式评测成绩。
未指定 --out 时,评测默认输出到 output/evals/webvoyager;仍可用 --out 指定其他目录。若目录已有评测记录,程序会拒绝直接覆盖;继续旧运行须显式指定 --out 和 --resume,并通过原有的数据、配置与代码一致性检查。
# 全新评测使用独立输出目录
npm run eval -- --data assets/benchmark/WebVoyager_data.json --out output/evals/webvoyager-549-fresh --reasoning-effort high --concurrency 1 --headed --timeout 600000 --judge reference
当前评测归档覆盖 549 题、13 个站点。每题均有最新轨迹、评分及成本记录;定点重测保留全部尝试与修订链。评测并发为 1、每题最多 600 秒、最多 50 轮模型请求。
summary.json 的 reference Judge 为 495/549(90.2%)。按照下文完整评分规则复核最终答案,对 12 项明确缺少关键条件的通过判定作修正后,逐题复核报告为 483/549(88.0%)。复核没有重新调用模型或浏览器;运行结果和修订链保持原样。逐题 JSON 数组、最新尝试 results.ndjson和12 项改判明细可供独立检查。
| 站点 | 复核通过/总数 | 成功率 |
|---|---|---|
| Allrecipes | 42/45 | 93.3% |
| Amazon | 34/39 | 87.2% |
| Apple | 39/42 | 92.9% |
| ArXiv | 38/38 | 100.0% |
| BBC News | 35/41 | 85.4% |
| Booking | 11/12 | 91.7% |
| Cambridge Dictionary | 24/43 | 55.8% |
| Coursera | 37/42 | 88.1% |
| ESPN | 33/36 | 91.7% |
| GitHub | 36/38 | 94.7% |
| 79/91 | 86.8% | |
| Hugging Face | 37/41 | 90.2% |
| Wolfram Alpha | 38/41 | 92.7% |
复核口径平均 16.3 个浏览器步骤、Agent 耗时 140 秒、Agent 成本约 $0.028 / 任务;加上 Judge 约 $0.029 / 任务。成本按配置或历史美元标价估算,只计算每题最新尝试,不是 MiniMax Token Plan 账单。公开归档中 71 个文件的本机用户目录路径及 6 个文件中的 Google Maps API key 已脱敏;本地原始轨迹未改动,处理范围见归档中的 PUBLICATION.md。
You are an evaluator for a web browsing agent benchmark. You will receive:
For each result in results.ndjson, judge whether the agent successfully completed the task.
PASS if:
final_answer contains the specific information requested by the taskFAIL if:
status is "error" or "timeout" AND final_answer is empty or does not answer the taskNOTE: If status is "error" but final_answer still contains a valid answer to the task, judge it as PASS.
Return a JSON array, one object per task:
[
{
"task_id": "Allrecipes--0",
"pass": true,
"reason": "Agent found a vegetarian lasagna recipe with 4.6 stars and 150+ reviews, matching all criteria."
},
{
"task_id": "Allrecipes--1",
"pass": false,
"reason": "Agent returned a lasagna recipe but it does not use zucchini as required."
}
]
Requirements for each entry:
task_id: must match exactlypass: booleanreason: one sentence explaining why pass or fail, referencing the specific task requirementfinal_answer against confirmed_task from WebVoyager_data.json for each matching task_idEvaluate all results now.
以上为完整规则,独立文件见 judge-prompt.md;549 题的逐题判定见 judgments.json。
启动时会用小请求检查模型服务,默认准入超时为 60000 ms,可通过 --preflight-timeout 调整。Agent 运行中的临时限流、服务端错误、超时和传输错误会按有界指数退避自动重试;preflight 和独立 Judge 请求均为单次调用。Judge API、截断或格式异常记录为未评分,不能算作任务 FAIL;可在服务恢复后用 --judge-only 补评。额度耗尽与认证失败不会重试。若出现 quota_exhausted,需先恢复对应模型账户的额度。
halted / 现象 | 含义 | 处理方式 |
|---|---|---|
provider_rate_limit | preflight/Judge 首次遇到 HTTP 429,或 Agent 的有界重试仍未恢复 | 等待限流窗口恢复并使用 --concurrency 1;零题 preflight 失败且配置未变时可 --resume,要重做已有失败题或取得干净成绩则换新目录 |
provider_connection | preflight/Judge 单次调用,或 Agent 重试后仍遇到超时、传输错误、HTTP 5xx | preflight 查控制台和 preflight.ndjson;Agent 查 TASK_ID/result.json、trace.ndjson、host-log.ndjson;Judge 查 results.ndjson 的 judge_result。慢模型可在新输出目录设置 --preflight-timeout 120000 |
quota_exhausted | 账户额度、余额或 Token Plan 用量已耗尽 | 恢复额度后再运行;此类永久错误不会自动重试 |
provider_authentication | API Key 无效、缺失权限或服务返回 HTTP 401/403 | 检查 DSH provider、apiKeyEnv 和 .credentials.yaml 引用,不要把密钥写入仓库 |
provider_preflight_failed | 未归入上述类型的准入错误 | 读取 output/evals/RUN_NAME/preflight.ndjson 中的 error,不要把零题运行当作 benchmark 成绩 |
Allrecipes 返回 People Inc access issue 页面时属于目标网站访问限制,不是模型 provider 故障;降低模型并发或延长 preflight 超时不会绕过该限制。
# 普通中断续跑
npm run eval -- --data assets/benchmark/WebVoyager_data.json --out output/evals/webvoyager --reasoning-effort high --concurrency 1 --headed --timeout 600000 --judge reference --resume
# 完全更换评分规则:先清除旧 Judge 内容,再重新评分全部已保存 Agent 结果;不重跑浏览器
npm run eval:reset-judge -- --out output/evals/webvoyager
npm run eval:reset-judge -- --out output/evals/webvoyager --execute
npm run eval -- --data assets/benchmark/WebVoyager_data.json --out output/evals/webvoyager --reasoning-effort high --judge-only --judge reference
续跑需保持原输出目录、选题、配置及代码指纹完全一致。修改 --concurrency、--preflight-timeout、模型、Judge、评测脚本或构建产物后不能续跑原目录,必须指定新的 --out。已有结果(包括失败和超时)会跳过,不会自动重跑或重新评分;要重新评分时使用 --judge-only 生成单独的 judged-reference.json。发现已有 trace.ndjson 但没有 result.json 的中断题时,评测器会直接拒绝继续,避免静默重试。需要重新执行这些题时,使用新的输出目录。不要删除仍需续跑的记录。
# 只读核对:验证旧任务轨迹并列出精确差集,不加载凭据或启动浏览器
npm run eval:backfill -- --out output/evals/OLD_RUN --data assets/benchmark/WebVoyager_data.json
# 审核清单后执行;旧任务进入保护集合,只有差集可被派发
npm run eval:backfill -- --out output/evals/OLD_RUN --data assets/benchmark/WebVoyager_data.json --execute
补跑器要求已有 manifest 是目标数据集的同内容有序子序列,并逐题验证已有 task.json、session.json、非空 trace.ndjson、result.json 和最终索引。已有任务即使存在于恢复计划中也不会被重新运行或重新评分;新增结果按目标数据集原位置重建 results.ndjson、JSON、Markdown 和 CSV。原 manifest 保存为 manifest-before-backfill.json,扩展后的结果标记 mixed_provenance。
全量命令的结果位于命令指定的 output/evals/RUN_NAME/:
| 文件 | 内容 |
|---|---|
report.md | 总体及分站点成功率、平均步数、耗时、成本估算 |
summary.json | 结构化统计和评分完整性标记 |
manifest.json | 选题、模型、API 协议、推理档位、参数及代码指纹 |
results.ndjson | 逐题执行与评分结果 |
TASK_ID/trace.ndjson | 模型请求、响应和工具执行记录 |
TASK_ID/result.json、TASK_ID/final.png | Agent 原始结果和最终截图(如有) |
completed 只代表 Agent 执行结束,judge_result.pass 才代表 Judge 判定通过。当前只对 MiniMax-M3 提供公开单价估算,GLM 等其他模型会显示 unpriced_calls,total_cost_usd: null 不代表实际费用为 0;估算也不是 Token Plan 实际账单。
output/ 中的旧评测记录可在不再需要回看、续跑或重新评分时删除,不影响新评测。请保留正式代码 scripts/eval/、插件源码 src/、数据集 assets/benchmark/ 及依赖清单。更多参数、评分口径和参考结果差异见评测指南。
npm install
npm test
npm run test:smoke
npm run test:host
npm run verify:package
npm run verify:installed
| 命令 | 验证内容 |
|---|---|
npm test | 构建、包结构、工具注册、错误契约、approval 和配置测试 |
npm run test:smoke | 真实 Chromium:DOM、脚本、截图、附件、清理,以及动态/虚拟列表、操作验证和状态恢复 |
npm run test:host | 真实 Cordis/DSH Agent Loop + Chromium,验证下一轮消息、基线恢复、截图裁剪、回放与会话隔离;模型决策使用确定性适配器 |
npm run verify:package | 确认 npm 包是独立 DSH bundle 且不包含 Harness checkout |
npm run verify:installed | 在临时 npm 消费者项目中安装 tarball 并导入插件 |
test/browser-context.test.mjs 可通过 DSH_TEST_SESSION_MODULE 指定另一宿主 Session 模块的文件 URL,以复用全部上下文测试。检查 DSH 源码版本时,从其仓库根目录执行(假设插件位于相邻的 dsh-browser 目录):
$env:DSH_TEST_SESSION_MODULE = ([uri](Resolve-Path packages/core/session/src/index.ts).Path).AbsoluteUri
node --import tsx/esm --test ../dsh-browser/test/browser-context.test.mjs
Remove-Item Env:DSH_TEST_SESSION_MODULE
贡献流程见 CONTRIBUTING.md,安全边界和漏洞报告方式见 SECURITY.md。我们将动态列表、动作后置条件、检查点恢复、证据记录和 Host 上下文管理视为项目的常规能力,其行为契约分别写在可靠性文档和证据文档中。
感谢 opencode-browser 项目的作者与贡献者,慷慨分享他们的代码与见解。
感谢 dsh-market 项目的作者与贡献者,为 DeepSeek Harness 构建可视化插件市场,让用户能够便捷地发现、浏览和安装社区插件。
本项目使用 MIT License。
Give DeepSeek Harness a real browser so an Agent can open pages, understand interfaces, fill forms, manage tabs, and complete multi-step tasks.
We build dsh-browser-plugin as a standalone DeepSeek Harness (DSH) plugin for the Web profile. It launches a local Chrome or Chromium instance and exposes 16 browser operations plus one archive recall tool through Puppeteer, the Chrome DevTools Protocol (CDP), and incremental DOM snapshots.
The current WebVoyager archive covers 549 tasks across 13 sites. Its saved reference Judge scored 495/549 (90.2%); a review using the full rubric in this README corrected 12 clear missing-requirement passes and scored 483/549 (88.0%). The review averages 16.3 browser steps and 140 seconds per task, with estimated Agent list-price cost of $0.028 per task ($0.029 including Judge). See the per-task results and site breakdown. The public archive redacts local user-directory paths in 71 files and Google Maps API keys in 6 files while leaving the original local trajectories intact.
This repository contains only the browser plugin's own source. It neither contains DeepSeek Harness source nor requires users to clone the Harness repository.
| Task | Without the plugin | With the plugin |
|---|---|---|
| Visit dynamic sites | Limited to search or static fetch | Operate a real Chromium page |
| Fill complex forms | Cannot reliably handle dynamic controls | Locate, fill, and click DOM references |
| Conduct multi-step research | Manually copy content at every step | Continue exploration across tabs |
| Understand page changes | Re-read the full page repeatedly | Prefer DOM diffs and establish a full baseline when needed |
| Inspect charts and images | Text-only information | Capture visual elements as DSH attachments |
+| / -| diffs to reduce repeated context.[N], inputs use <N>, and visual elements use [view:ID].defineTool, approval, cancellation signals, and attachments without a compatibility server.browser_start and stays on browser_* instead of substituting web_search or web_fetch.browser_recall retrieves older pages when needed, without per-page registration or a completion coverage gate.stateId, reporting incomplete restoration as partial.>=22.19pnpm (used by the DSH plugin installation command)node --version
pnpm --version
Install pnpm if it is missing:
npm install --global pnpm
The plugin supports the verified DSH 0.2.1-rc.2 desktop host and 0.1.2-alpha.2. It adapts tool-result messages and context-replacement bounds to each host contract.
The package has not been published to npm yet. Obtain this repository's source, build a standard npm tarball, and add it to the DSH web profile:
Set-Location path\to\dsh-browser
npm install
$package = npm pack --silent
npx @deepseek-ai/dsh@0.1.2-alpha.2 plugin --profile web add ".\$package"
npx @deepseek-ai/dsh@0.1.2-alpha.2 --profile web --dump-config
npx @deepseek-ai/dsh@0.1.2-alpha.2 web
The dumped config sho