为每个会话启动独立浏览器并截图回传聊天
29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/machine202502/dsh-browser.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 58 处,展示前 45 条)
- 写入本地文件index.js:36
mkdirSync(LOG_DIR, { recursive: true }); - 写入本地文件index.js:37
appendFileSync(LOG_FILE, `${new Date().toISOString()} ${line}\n`); - 读取本地文件index.js:117
const parsed = JSON.parse(readFileSync(PROXY_STATE, 'utf8')); - 写入本地文件index.js:131
mkdirSync(LOG_DIR, { recursive: true }); - 写入本地文件index.js:132
writeFileSync(PROXY_STATE, JSON.stringify({ hosts: [...proxyHosts], all: proxyAll, server: proxyServer }), 'utf8'); - 读取本地文件index.js:199
for (const name of readdirSync(artifactsRoot)) { - 读取本地文件index.js:201
if (Date.now() - statSync(full).mtimeMs > 24 * 60 * 60 * 1000) { - 删除本地文件递归index.js:202
rmSync(full, { recursive: true, force: true }); - 读取本地文件index.js:212
for (const name of readdirSync(profilesRoot)) { - 读取本地文件index.js:215
const age = Date.now() - statSync(full).mtimeMs; - 删除本地文件递归index.js:216
if (age > 30 * 60 * 1000) rmSync(full, { recursive: true, force: true }); - 删除本地文件递归index.js:237
try { rmSync(entry.manager.downloadDir, { recursive: true, force: true }); } catch { } - 读取本地文件index.js:845
const shot = keepFrame(readFileSync(data.path)); - 读取本地文件install.mjs:40
if (!existsSync(profilesRoot)) fail(`no DSH profiles at ${profilesRoot}; start DSH once first`); - 读取本地文件install.mjs:41
if (!existsSync(join(profileDir, 'package.json'))) { - 读取本地文件install.mjs:42
const available = readdirSync(profilesRoot, { withFileTypes: true }) - 读取本地文件install.mjs:49
const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')); - 写入本地文件install.mjs:65
if (!dryRun) copyFileSync(manifestPath, backup); - 写入本地文件install.mjs:71
writeFileSync(manifestPath, next, 'utf8'); - 执行外部命令固定命令install.mjs:82
const direct = spawnSync('pnpm', ['--version'], { encoding: 'utf8', shell: true }); - 执行外部命令固定命令install.mjs:84
const viaNpx = spawnSync('npx', ['--yes', 'pnpm', '--version'], { encoding: 'utf8', shell: true }); - 执行外部命令来自配置/变量install.mjs:94
const install = spawnSync(runner.command, runner.args, { - 读取本地文件src/browser-manager.js:40
if (!existsSync(root)) continue; - 读取本地文件src/browser-manager.js:41
const revs = readdirSync(root) - 读取本地文件src/browser-manager.js:47
if (existsSync(exe)) return exe; - 写入本地文件src/browser-manager.js:117
mkdirSync(this.profileRoot, { recursive: true }); - 写入本地文件src/browser-manager.js:137
mkdirSync(dir, { recursive: true }); - 发起网络请求src/browser-manager.js:236
const record = this.#net.get(id)?.get(response.request()); - 写入本地文件src/browser-manager.js:374
mkdirSync(dir, { recursive: true }); - 写入本地文件src/browser-manager.js:376
writeFileSync(file, buffer); - 写入本地文件src/browser-manager.js:381
mkdirSync(dir, { recursive: true }); - 写入本地文件src/browser-manager.js:383
writeFileSync(file, buffer); - 读取本地文件src/browser-manager.js:496
for (const file of [a, b]) if (!existsSync(file)) throw new Error(`image not found: ${file}`); - 读取本地文件src/browser-manager.js:497
const left = readFileSync(a).toString('base64'); - 读取本地文件src/browser-manager.js:498
const right = readFileSync(b).toString('base64'); - 发起网络请求src/browser-manager.js:757
const response = await fetch(`http://127.0.0.1:${this.debugPort}/json/version`); - 发起网络请求src/browser-manager.js:772
const response = await fetch(`http://127.0.0.1:${this.debugPort}/json/list`); - 执行外部命令来自配置/变量src/browser-manager.js:1180
const child = spawn( - 删除本地文件src/browser-manager.js:1463
if (Date.now() - statSync(full).mtimeMs > 24 * 60 * 60 * 1000) rmSync(full, { force: true }); - 删除本地文件递归src/browser-manager.js:1531
try { rmSync(this.#profileDir, { recursive: true, force: true }); } catch { } - 读取本地文件src/settings.js:83
return sanitizeSettings(JSON.parse(readFileSync(file, 'utf8'))); - 写入本地文件src/settings.js:91
mkdirSync(root, { recursive: true }); - 写入本地文件src/settings.js:92
writeFileSync(file, JSON.stringify(clean, null, 2), 'utf8'); - 读取本地文件src/settings.js:108
return { file, read, write, merge, exists: () => existsSync(file) }; - 发起网络请求src/watchdog.mjs:32
const request = http.get({ host: '127.0.0.1', port, path, timeout: 2000 }, (response) => {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
为 DeepSeek Harness 的每个会话隔离 Playwright 浏览器:标签页、聊天内截图、按站点代理
README
由 DeepSeek 最新模型翻译生成dsh-browser
DSH 插件:每个会话一个隔离的 Playwright 浏览器——在编辑器停靠栏里显示实时标签页缩略图,侧边栏里有一个 Browser 分区,按站点配置代理,并为智能体提供 DevTools 级别的工具。16 个工具、33 个 browser_run 命令(包括 list/help 和网络预设)、一个设置表单,以及一套回归测试。
为每个 DSH 会话提供隔离的浏览器:真正的 Chromium(Playwright)、停靠栏里的实时缩略图、侧边栏里的 Browser 分区、站点级代理,以及对 DevTools 的完整访问。
安装
一条命令搞定——它会写入来自 GitHub 的依赖,并启动包管理器:
npx --yes github:machine202502/dsh-browser
然后重启 DSH:侧边栏会出现 Browser 分区,停靠栏里会出现浏览器卡片。
展开完整文档(README 剩余 1 节)
dsh-browser
DSH 插件:每个会话一个隔离的 Playwright 浏览器——在编辑器停靠栏里显示实时标签页缩略图,侧边栏里有一个 Browser 分区,按站点配置代理,并为智能体提供 DevTools 级别的工具。16 个工具、33 个 browser_run 命令(包括 list/help 和网络预设)、一个设置表单,以及一套回归测试。
为每个 DSH 会话提供隔离的浏览器:真正的 Chromium(Playwright)、停靠栏里的实时缩略图、侧边栏里的 Browser 分区、站点级代理,以及对 DevTools 的完整访问。
安装
一条命令搞定——它会写入来自 GitHub 的依赖,并启动包管理器:
npx --yes github:machine202502/dsh-browser
然后重启 DSH:侧边栏会出现 Browser 分区,停靠栏里会出现浏览器卡片。
常用选项:
node install.mjs --profile desktop --dry-run # показать, что будет изменено
node install.mjs --home /path/to/.dsh # другой каталог DSH
node install.mjs --uninstall # убрать плагин
Chromium 需要单独安装,playwright-core 不会自动拉取:
npx playwright install chromium
手动安装(如果 pnpm 不可用)——在 ~/.dsh/profiles/desktop/package.json 中:
{
"dependencies": { "dsh-browser": "github:machine202502/dsh-browser" },
"dsh": { "profile": { "bundles": ["…", "dsh-browser"] } }
}
验证:在插件目录中运行 npm test(需要先启动 node tests/qa-page.mjs 页面)。
功能
- 每个智能体有自己的浏览器。 独立进程、独立临时配置档、独立标签页。
子代理拿到自己的浏览器,看不到别人的。
- 上下文。 ctx1、ctx2、……——同一个浏览器内隔离的 Cookie 和 storage,方便在同一个服务器上测试两个客户端。
- 实时画面。 停靠栏里的卡片显示标签页缩略图和虚拟指针;执行操作(open、navigate、click、resize、drag)后,聊天流里会收到一帧画面。
- 侧边栏的 Browser 分区。 按会话分组的已打开浏览器列表:会话名、标签页数量、跳转到会话、关闭单个浏览器。
- 按站点代理。 内置路由代理监听 127.0.0.1:49222:它检查每个连接的主机,只把列表中的站点转发到 Hiddify,其余直连。
Chromium 156 忽略 PAC(无论是 --proxy-pac-url 还是扩展里的 chrome.proxy),所以决策在浏览器之外完成。站点列表和代理地址在重启之间保存在数据目录: %LOCALAPPDATA%\dsh-browser(Windows)、~/.local/share/dsh-browser(Linux)、 ~/Library/Application Support/dsh-browser(macOS)。
- 调试。 网络、控制台、Cookie、storage、IndexedDB、覆盖率、可访问性快照、Lighthouse。
工具
| 工具 | 用途 |
| browser_open | 打开标签页(可以指定 ctx) |
| browser_navigate | 跳转到地址 |
| browser_click | 按 CSS 选择器点击(不会被对话框阻塞) |
| browser_fill | 填写字段 |
| browser_hover / browser_drag | 指针与拖拽(视口内) |
| browser_resize | 视口尺寸 |
| browser_text | 页面文本 |
| browser_tabs | 标签页列表 |
| browser_close | 关闭标签页(最后一个会关掉浏览器) |
| browser_cdp | 直接调用 Chrome DevTools Protocol |
| browser_run | 命令调度器(见下文) |
| browser_proxy_enable / browser_proxy_disable / browser_proxy_status / browser_proxy_list | 代理 |
所有工具都接受 timeout(毫秒)。默认 10–45 秒,视操作而定。
browser_run 命令
browser_run({ command: "list" }) —— 命令目录;{ command: "help", args: { name: "network" } } —— 查看详情。
| 命令 | 作用 |
| console | console. 与页面错误,包括异步错误 |
| network | 请求,含状态码、类型和错误 |
| cookies | get / set / clear |
| storage | localStorage / sessionStorage |
| idb | IndexedDB:数据库、存储、记录 |
| eval | 执行 JS,返回结果 |
| dom | 元素的 html / text / attrs / styles / count |
| snapshot | 无障碍树(角色与名称) |
| keyboard | press、type、down、up |
| dialog | accept / dismiss / 为 prompt 提供文本 |
| emulate | 网络、配色方案、CPU、时区、地理位置 |
| metrics | 页面性能指标 |
| perf | 录制主线程 N 秒:时间花在哪里 |
| slow3g / fast3g / offline / off | 一个词切换网络预设 |
| trace | 录制 Playwright 追踪 |
| coverage | start 与 stop 之间的 JS 覆盖率 |
| downloads | 浏览器下载的文件 |
| lighthouse | 审计:评分、指标、未通过的检查 |
| report | 解析已保存的报告:列表或单条审计 |
| css | 元素命中的规则:选择器、属性、媒体查询、字体 |
| assets | 按类型列出页面资源,download: true 则保存到磁盘 |
| html | 把完整 HTML 文档写入文件 |
| screenshot | 把页面或元素截图写入文件(用 read_image 打开) |
| diff | 两张截图的像素级对比 |
| ws | WebSocket 连接与双向帧 |
| wait | 等待选择器或文本 |
| ctx | 按上下文列出标签页 |
| cdp | 任意协议方法 |
配置
- id: browser
name: 'dsh-browser'
config:
headless: true
bridgePort: 49221
idleTimeoutMs: 900000
viewport: { width: 1280, height: 800 }
proxy:
server: 127.0.0.1:10901
shots:
enabled: true
on: [open, navigate, click, resize, drag]
quality: 55
minIntervalMs: 1500
平台
插件不含平台相关调用:Chromium 按 Playwright 在 Windows、Linux、macOS 上的路径查找(或用 DSH_BROWSER_EXE 指定),进程守护通过 CDP 与浏览器通信,不走 taskkill 或 kill,路径用 node:path 拼接。
Windows %LOCALAPPDATA%\ms-playwright\chromium-/chrome-win64/chrome.exe
Linux ~/.cache/ms-playwright/chromium-/chrome-linux/chrome
macOS ~/Library/Caches/ms-playwright/chromium-/chrome-mac*/Chromium.app/Contents/MacOS/Chromium
架构
- Host(index.js)为每个智能体各持一个管理器,注册工具,并为客户端部分提供 127.0.0.1:49221 桥接。
- 管理器(src/browser-manager.js)通过 launchPersistentContext 在临时配置档中启动 Chromium,浏览器关闭时该配置档会被删除。
- 桥接(src/bridge.js)向客户端提供标签页、帧和代理状态。
- 客户端(client.js)在 Dock 中绘制卡片、在侧边栏绘制分区,并绘制带帧缩略图的工具行视图。
- 代理(src/routing-proxy.js)按桥接中的规则路由连接。
限制
- lighthouse 需要安装对应包;未安装时命令会返回清晰的错误,插件其余部分继续工作。
要求
- Playwright 提供的 Chromium(ms-playwright),路径可通过 DSH_BROWSER_EXE 指定。
- lighthouse 是可选依赖:未安装该包时,lighthouse 命令会返回清晰的错误。
插件其余部分无需它也能工作。
结束进程
浏览器不会比宿主活得更久。除了通过 dispose 正常关闭之外,每个浏览器旁边还会启动一个独立的看门狗(src/watchdog.mjs):一旦 DSH 进程消失,它就通过 Chromium 自己的 DevTools 端点关闭 Chromium。平台无关——用的是 Node 和 CDP,不用 taskkill。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
machine202502/dsh-browser
为每个会话启动独立浏览器并截图回传聊天
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71
这是你的仓库?认领条目