在受控侧栏里读页面、填表单并截图,点击需显式授权
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Pazburg/dsh-agent-browser该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · vision
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
- 写入本地文件index.js:46
mkdirSync(dir, { recursive: true }) - 读取本地文件index.js:54
const raw = JSON.parse(readFileSync(ALLOWLIST_FILE, 'utf8')) - 写入本地文件index.js:66
writeFileSync(ALLOWLIST_FILE, JSON.stringify({ patterns }, null, 2), 'utf8') - 写入本地文件index.js:490
writeFileSync(file, Buffer.from(base64, 'base64')) - 发起网络请求selftest.mjs:112
fetch(base + path, { - 发起网络请求selftest.mjs:118
const claim = await (await fetch(base + '/claim', { method: 'POST' })).json() - 发起网络请求selftest.mjs:121
assert.equal((await fetch(base + '/claim', { method: 'POST' })).status, 409, '重复认领必须 409') - 读取本地文件selftest.mjs:241
assert.ok(existsSync(shot.path), '截图文件应落盘') - 读取本地文件selftest.mjs:242
const bytes = readFileSync(shot.path) - 发起网络请求selftest.mjs:278
const allowedNoToken = await fetch(base + '/allowed?url=https%3A%2F%2Fapp.trusted.example%2F') - 发起网络请求selftest.mjs:306
const freeClaim = await (await fetch(freeBase + '/claim', { method: 'POST' })).json() - 发起网络请求selftest.mjs:309
fetch(freeBase + path, { - 删除本地文件递归selftest.mjs:347
try { rmSync(process.env.DSH_HOME, { recursive: true, force: true }) } catch { }
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
给 DSH(DeepSeek Harness)桌面应用做的受控浏览器面板:智能体可读取、填写、截图,动作只有显式点击,不处理凭据。
README
由 DeepSeek 最新模型翻译生成dsh-agent-browser(中文说明)
给 DSH(DeepSeek Harness)桌面端 的内置「AI 浏览器」插件:让 AI 能在一个受控的侧栏浏览器里读页面、填输入框、截图,并只在显式要求时点击控件(单选/复选/按钮/链接)。它不碰你日常用的 Edge/Chrome,不按回车,也不调用 form.submit()。
状态:实验性。开发与验证基于 DSH 桌面端 0.2.1-rc.2(Electron 44 / Node 24,Windows)。插件依赖 DSH 内部 API,DSH 升级后可能需要适配,请固定你验证过的 DSH 版本。
它能做什么 / 不能做什么
能做:
- 在 DSH 右侧栏的「AI 浏览器」标签里打开 http/https 页面(真正的 Electron <webview>,走 DSH 主进程的租约通道);
- browser_read 读取页面 URL、标题、可见文本、可编辑元素、表单分组(单选/复选/文本控件)、按钮、链接,同源 iframe 也能读;
- browser_fill 往 input / textarea / select / contenteditable / CodeMirror / Monaco / Ace 里填内容;
展开完整文档(README 剩余 1 节)
dsh-agent-browser(中文说明)
给 DSH(DeepSeek Harness)桌面端 的内置「AI 浏览器」插件:让 AI 能在一个受控的侧栏浏览器里读页面、填输入框、截图,并只在显式要求时点击控件(单选/复选/按钮/链接)。它不碰你日常用的 Edge/Chrome,不按回车,也不调用 form.submit()。
状态:实验性。开发与验证基于 DSH 桌面端 0.2.1-rc.2(Electron 44 / Node 24,Windows)。插件依赖 DSH 内部 API,DSH 升级后可能需要适配,请固定你验证过的 DSH 版本。
它能做什么 / 不能做什么
能做:
- 在 DSH 右侧栏的「AI 浏览器」标签里打开 http/https 页面(真正的 Electron <webview>,走 DSH 主进程的租约通道);
- browser_read 读取页面 URL、标题、可见文本、可编辑元素、表单分组(单选/复选/文本控件)、按钮、链接,同源 iframe 也能读;
- browser_fill 往 input / textarea / select / contenteditable / CodeMirror / Monaco / Ace 里填内容;
- 显式点击:browser_fill({ click: true, ... }) 才会真实点击单选、复选、按钮、链接(含提交按钮);
- browser_screenshot 截图成 PNG(需要 DSH 窗口与「AI 浏览器」标签可见);
- browser_panel 查看面板连接状态;browser_allowlist 在确认模式下管理白名单。
不能做(设计如此):
- 不按回车、不调用 form.submit() / requestSubmit()、不在未传 click:true 时点击任何控件;
- 永远不填、不读取 password / file 字段的明文(读取只回传 valueLength;表单文本控件另带 redacted: true);
- 不接触外部浏览器进程或其配置;
- 跨域 iframe 读不到、填不进。
架构
┌─ DSH 窗口 ───────────────────────────────────────────────────────┐ │ │ 右侧栏 │ │ 正常 DSH 对话区 │ ┌──────────────────────┐ │ │ │ │ ← ↻ [网址....] ↵ │ │ │ │ │ 标题 · host/path ● │ │ │ │ │ ┌──────────────────┐ │ │ │ │ │ │ webview │ │ │ │ │ │ └──────────────────┘ │ │ │ │ │ ▸ 受信白名单 │ │ │ │ └──────────────────────┘ │ └──────────────────────────────────────────────────────────────────┘ ▲ │ │ 工具调用(open/read/fill/screenshot) │ 每 500ms 轮询指令 │ ▼ Host 插件(dsh-desktop-host 子进程) ←── HTTP 路由 /dsh-agent-browser/*
DSH 的架构把两半分开:Host 半边(index.js)运行在 dsh-desktop-host 子进程里,碰不到页面,只能注册工具、排队指令、存白名单;Client 半边(client.js)运行在 DSH 渲染进程,持有真正的 <webview> 并执行指令。两边通过带令牌的 HTTP 指令队列 + 500ms 轮询通信。协议细节见 docs/ARCHITECTURE.md。
环境要求
- DSH 桌面端 0.2.x(验证版本 0.2.1-rc.2)。普通浏览器里打开 DSH 页面拿不到 dshDesktop.browser,无法创建受控 webview。
- Windows 可使用仓库自带的 install.cmd / install.ps1;手动安装也可用于 DSH 支持的其他平台。
- 开发/自测需要 Node.js 20+(CI 跑 22/24);插件自身零运行时依赖。
安装
一键安装(Windows):
1. 完全退出 DSH(托盘图标 → 退出;只点窗口 × 可能只是最小化到托盘);
2. 双击仓库根目录的 install.cmd;
3. 重新打开 DSH,在右侧栏打开「AI 浏览器」标签(或直接让 AI 用一次浏览器,它会自己开标签)。
安装脚本会:把运行文件复制到 %USERPROFILE%\.dsh\profiles\desktop\node_modules\@local\dsh-agent-browser\;把已有插件目录备份到 …\profiles\desktop\agent-browser-backups\install-<时间戳>\; 保留已有的 cordis.patch.yml 配置;把 @local/dsh-agent-browser 登记进 …\profiles\desktop\package.json 的 dsh.profile.bundles;失败时回滚 profile 清单。
手动安装:
1. 退出 DSH;
2. 把 index.js、client.js、package.json、cordis.patch.yml(可选 README.md、CHANGELOG.md)复制到 %USERPROFILE%\.dsh\profiles\desktop\node_modules\@local\dsh-agent-browser\;
3. 在 %USERPROFILE%\.dsh\profiles\desktop\package.json 的 dsh.profile.bundles 数组里加一行 "@local/dsh-agent-browser";
4. 重启 DSH。
卸载: 完全退出 DSH 后运行 uninstall.cmd(移除登记并删除插件目录);或只从 dsh.profile.bundles 里删掉这一行再重启,即可停用。
首次使用
1. 重启 DSH → 右侧栏出现「AI 浏览器」标签(侧栏的 + 里也能选到);
2. 在面板地址栏里自己输入网址并打开(你自己开页面不需要白名单);
3. 需要登录的站点,你自己在面板里登录一次。注意:DSH 给内部浏览器的分区是内存态,关掉 DSH 登录态就会丢失(这是 DSH 的行为);插件只会记住「最近访问/上次页面」的网址,不会保留 cookie;
4. 之后就可以让 AI 干活,例如「读一下当前页面」「把这段代码填进第 0 个输入框」。
配置
配置文件是已安装插件里的 cordis.patch.yml(改完重启 DSH)。若完全省略 openPolicy,代码会回落到 confirm(安全默认)。
- insert:
- id: dsh-agent-browser
name: '@local/dsh-agent-browser'
config:
confirm(默认,推荐):白名单外的网址先由用户在面板里点「允许」 free:任意 http/https 直接打开(白名单与确认 UI 关闭,慎用) openPolicy: confirm
可选:门户点击桥生效的宿主后缀(含子域)。
用于「window.open('') 打开空窗口再写入表单」的内网/门户站点:
插件会在当前页生成一个可见的「继续打开」按钮,而不是自动提交。
portalBridgeHosts:
- example.com
可选:预置白名单(仅 confirm 模式生效)。
allowlist:
- example.com
- https://intranet.example.com/app
可选:截图输出目录。
shotDir: C:\Users\you\Pictures\dsh-shots
运行时数据保存在 $DSH_HOME/agent-browser/(一般是 ~/.dsh/agent-browser/):allowlist.json(面板里维护的白名单)与 shots/(默认截图目录)。
白名单规则:
- 域名规则:example.com —— 命中它自己和所有子域(app.example.com……);
- 网址前缀规则:https://app.example.com/path —— 只命中这个前缀下的页面;
- 域名规则不允许后缀伪装(notexample.com 不会命中 example.com);网址前缀规则限定同源(https://example.com 不会命中 https://example.com.evil.com 或其它端口)。无效规则会被拒绝。
工具一览
| 工具 | 作用 | 主要参数 |
| browser_panel | 查看面板是否连接、当前页面、白名单、待执行指令数;浏览器操作前先调它 | — |
| browser_open | 在面板里打开 http/https 网址;confirm 模式下白名单外需用户允许 | url |
| browser_read | 读当前页:URL、标题、可见文本(截断)、可编辑元素、forms(单选/复选分组)、buttons、links;同源 iframe 带 framePath;password/file 只回传长度 | — |
| browser_fill | 填值;显式 click:true 时点击控件。默认只填、不回车、不点击、不提交 | text、click、selector、index、framePath、replace |
| browser_screenshot | 截图成 PNG 并返回路径(需要 DSH 窗口和「AI 浏览器」标签可见) | — |
| browser_allowlist | confirm 模式下 list/add/remove 白名单;free 模式下只读状态 | action、pattern |
browser_fill 说明
- 填值:browser_fill({ selector: '#code', text: '...' }) 或 browser_fill({ index: 3, text: '...' });
- 点击:browser_fill({ selector: '#submitBtn', click: true });单选可传 text:'B' 校验选项值;复选不传 text 时点击切换一次,传字符串 'true'/'false' 指定目标状态;
- index 是 browser_read 返回的全局扁平序号(跨同源 iframe 一致);framePath 用于把 selector 限定到某个 iframe,或对 index 做一致性校验;
- replace 只对 input/textarea 生效;contenteditable 与 CodeMirror/Monaco/Ace 会忽略它;
- 会被拒绝:password/file 字段、disabled/已脱离 DOM 的控件、不唯一的 selector、没传 click:true 的点击;
- 点击是合成事件(isTrusted=false):要求真实用户激活的站点可能不生效,这是 webview 的安全边界。
面板功能
按普通浏览器的习惯做了这些:
| 功能 | 说明 |
| 页面缩放 25%–300% | 标题行 − 100% +;Ctrl + / Ctrl - / Ctrl 0;Ctrl + 滚轮;比例会记住 |
| 前进 / 后退 | 工具栏 ← →;Alt + ←/→ |
| 刷新 / 停止 | 加载中变 ✕(点击停止);Ctrl+R / F5 |
| 页面内查找 | Ctrl+F 或 🔍;回车下一个、Shift+回车 上一个、Esc 关闭 |
| 弹窗 / 新窗口 | 页面里的 target=_blank / window.open:free 模式在当前标签直接打开;confirm 模式走打开策略 |
| 门户点击桥 | 在 portalBridgeHosts 配置的站点上,把「空窗口 + 写表单 + POST」改成可见的「继续打开」按钮,点击后由浏览器原生提交 |
| 同源 iframe | browser_read / browser_fill 可进入同源 iframe(framePath),内嵌编辑器/表单可读可填 |
| 最近访问 / 上次页面 | 最多 12 条,存 localStorage;重启 DSH 后打开面板回到上次页面(登录态仍会丢) |
| 快捷键 | 焦点在网页里也生效(捕获阶段按键桥) |
安全边界(简版)
| 措施 | 说明 |
| 固定指令集 | 只有 open / read / fill / screenshot / status;没有独立点击/提交工具 |
| 点击显式化 | 只有 click:true 才会真实点击;不传则拒绝;disabled 控件报错 |
| 账密不外泄 | password/file 不填;读取只回传 valueLength(表单控件另带 redacted),不回传明文 |
| 打开确认 | 默认 confirm;白名单外网址先由用户点「允许」 |
| 令牌制 | 面板启动时认领随机令牌,缺失/错误令牌返回 403;路由走 DSH webServer 的 Host/Origin 校验。令牌防误连/跨源投递,不防「已能访问 DSH 本机回环服务的恶意本地进程」(claim/reclaim 先到先得),请把本机账户视为可信 |
| 浏览器受限 | webview 由 DSH 主进程按浏览器租约创建;DSH(验证版本 0.2.1-rc.2)应用 nodeIntegration:false、contextIsolation:true、sandbox:true(这些 webPreferences 由 DSH 设置,不是本仓库设置) |
| 不碰外部浏览器 | 只操作 DSH 内部 guest,不接触 Edge/Chrome 及其配置 |
提示注入仍然可能发生:网页是不可信输入,恶意页面可能诱导 Agent 去点击/导航。请在不可信页面使用 confirm 模式,并在 Agent 操作时留意面板。完整威胁模型与漏洞上报方式见 SECURITY.md。
已知限制
1. 必须是 DSH 桌面窗口:普通浏览器里没有 dshDesktop.browser,无法创建受控 webview;
2. 重启 DSH 后登录态丢失:内部浏览器用内存分区,网址记得、cookie/登录不记得,需要重新登录;
3. 截图需要窗口可见:窗口最小化/被遮挡或标签不在前台时失败(会重试一次并给中文提示);
4. 只支持同源 iframe:跨域 iframe 读不到、填不进;
5. 合成点击可能被检查 isTrusted/真实用户激活的站点忽略;
6. DSH 宿主层限制:下载被禁、摄像头/定位/通知/麦克风被拒、alert/confirm/prompt 被取消、HTTP Basic 认证打不开、拖拽导航被禁、打包版无开发者工具;
7. 提交后果是真实的:显式点击提交按钮/链接可能触发原生提交或跳转,请自行核对页面结果;
8. 去重内存态:回执重试的点击去重只在当前控制器会话内有效,刷新页面或重启 DSH 不保留。
开发与自测
npm install # 测试依赖:@mixmark-io/domino(仅 guest DOM 级测试需要)
npm test # 三套自测:Host / Client / Guest DOM
单独运行:
- node selftest.mjs —— Host 半边(真实 HTTP 路由、令牌、free/confirm 策略、工具、参数校验、截图 PNG、/allowed);
- node client-selftest.mjs —— Client 半边(控制器 + 假 DOM/桥/fetch:侧栏注册、确认门禁、令牌 409 自愈、弹窗接管、去重、iframe 脚本、缩放/查找/前进后退);
- node guest-dom-selftest.mjs —— 在 DOM 里真正执行 READ_SRC / fillSrc;缺 domino 时 SKIP。
CI 在 Node 22/24(Windows)上跑全部自测。贡献流程见 CONTRIBUTING.md。
目录结构
dsh-agent-browser/
├── index.js # Host:工具、HTTP 路由、指令队列、白名单 ├── client.js # Client:侧栏标签、webview、指令执行 ├── cordis.patch.yml # DSH bundle patch + 配置 ├── package.json # DSH 插件清单(exports / dsh.client / dsh.bundle) ├── selftest.mjs # Host 自测 ├── client-selftest.mjs # Client 自测 ├── guest-dom-selftest.mjs # 注入脚本的 DOM 级自测 ├── install.ps1 / install.cmd ├── uninstall.ps1 / uninstall.cmd ├── .github/workflows/ci.yml # CI(Node 22/24,Windows) ├── docs/ # 架构、审计摘要、发布清单 ├── CHANGELOG.md ├── SECURITY.md └── CONTRIBUTING.md
版本与审计
1.1.1 是首个公开版本,包含内部审计(针对 1.1.0)后的修复:密码侧信道、门户自动提交、强置 checked、confirm 绕过、回执重试重复点击、iframe 作用域与测试诚实性问题。详见 CHANGELOG.md 与 docs/AUDIT-SUMMARY.md。
许可证与免责声明
MIT。
本项目与 DeepSeek、DSH 项目及任何被操作网站均无关联。浏览器自动化可能触犯第三方网站的服务条款,请只在你有权操作的站点/账号上使用。软件按「现状」提供,不附带任何担保。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Pazburg/dsh-agent-browser
在受控侧栏里读页面、填表单并截图,点击需显式授权
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,364已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,709已汉化DSH
71.8
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,319已汉化DSH
71.5
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,533已汉化DSH
71.1
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 93,105已汉化DSH
71.1
这是你的仓库?认领条目