让模型直接打开网页、点击输入并截图录屏
35/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/21 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add fakeNihilist/dsh-plugins该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugins @ 0.1.2
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 02:53:20
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 32 处,展示前 32 条)
- 读取本地文件packages/browser/src/chromium.js:17
return value && existsSync(value) ? value : undefined - 读取本地文件packages/browser/src/chromium.js:58
if (candidate && existsSync(candidate)) return candidate - 读取本地文件packages/browser/src/engine.js:482
const storageState = this.config.persistCookies && existsSync(storagePath) ? storagePath : undefined - 发起网络请求packages/notification/client.js:431
const result = win.fetch(FOCUS_PATH, { method: "GET", keepalive: true, credentials: "same-origin", cache: "no-store" }); - 发起网络请求packages/notification/client.js:624
Promise.resolve(win.fetch(`${TOAST_PATH}?${query.toString()}`, init)) - 发起网络请求packages/notification/client.js:659
win.fetch(REVEAL_PATH, { method: "GET", credentials: "same-origin", cache: "no-store" }), - 读取本地文件packages/notification/index.js:327
if (existsSync(target)) { - 读取本地文件packages/notification/index.js:329
if (readFileSync(target).equals(bytes)) return; - 写入本地文件packages/notification/index.js:334
writeFileSync(target, bytes); - 写入本地文件packages/notification/index.js:355
mkdirSync(directory, { recursive: true }); - 写入本地文件packages/notification/index.js:356
writeFileSync(toastScript, TOAST_SCRIPT, 'utf8'); - 写入本地文件packages/notification/index.js:357
writeFileSync(revealScript, REVEAL_SCRIPT, 'utf8'); - 删除本地文件packages/notification/index.js:361
rmSync(legacyRevealScript, { force: true }); - 删除本地文件packages/notification/index.js:367
rmSync(join(directory, 'reveal.log'), { force: true }); - 删除本地文件packages/notification/index.js:378
rmSync(join(directory, entry), { force: true }); - 读取本地文件packages/notification/index.js:400
return readdirSync(directory); - 写入本地文件packages/notification/index.js:481
writeFileSync(payloadPath, JSON.stringify(payload), 'utf8'); - 删除本地文件packages/notification/index.js:491
rmSync(payloadPath, { force: true }); - 读取本地文件packages/notification/index.js:554
if (!existsSync(target)) return undefined; - 读取本地文件packages/notification/index.js:558
const sessionId = readFileSync(target, 'utf8').replace(/^ FEFF/u, '').trim(); - 删除本地文件packages/notification/index.js:559
rmSync(target, { force: true }); - 执行外部命令来自配置/变量packages/notification/index.js:582
const child = spawn(command, args, { detached: true, stdio: 'ignore', windowsHide: true }); - 读取本地文件packages/usage-stats/checkpoint.js:86
text = readFileSync(file, 'utf8'); - 写入本地文件packages/usage-stats/checkpoint.js:127
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件packages/usage-stats/checkpoint.js:132
writeFileSync(temporary, JSON.stringify(payload), 'utf8'); - 写入本地文件packages/usage-stats/checkpoint.js:133
renameSync(temporary, file); - 读取本地文件packages/usage-stats/checkpoint.js:168
entries = readdirSync(dir, { withFileTypes: true }); - 读取本地文件packages/usage-stats/checkpoint.js:181
stat = statSync(full); - 发起网络请求packages/usage-stats/client.js:2678
fetch(`${DATA_URL}${search}`, { - 读取本地文件packages/usage-stats/index.js:554
const workspaceDirs = readdirSync(root, { withFileTypes: true }); - 读取本地文件packages/usage-stats/index.js:560
files = readdirSync(dir); - 读取本地文件packages/usage-stats/index.js:591
text = decompressAllFrames(readFileSync(path));
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-plugins
一组开源插件,面向 DeepSeek Harness(DSH):让模型自己操作浏览器、在会话内查找、统计 Token 用量,以及在任务完成或等待确认时弹出桌面通知。
Plugins for DeepSeek Harness (DSH) — English below.
English · 本仓库以中文为主,英文版见文末。
每个插件都是一个独立的 DSH profile bundle,可以单独安装,彼此之间不共享代码或运行时状态。
插件列表
| 包 | 形态 | 说明 |
| browser | Host,browser_ 工具 | 通过 Playwright 驱动真实 Chromium:打开页面、读取 ARIA 树、点击/输入、截图、处理对话框与下载、录制 WebM。纯 Host 插件,没有客户端 UI。 |
| chat-search | Host + Web 客户端 | 会话内查找:在会话头部打开查找栏,边输入边高亮已渲染对话中的匹配并逐个跳转,不修改对话 DOM。 |
| notification | Host + Web 客户端 | Windows 桌面消息通知:任务完成、等待确认或等待回答时弹出系统通知,两种场景提示音不同;点击通知经本机协议回传并打开对应会话(窗口隐藏时同时唤回)。
展开完整文档(README 剩余 1 节)
dsh-plugins
一组开源插件,面向 DeepSeek Harness(DSH):让模型自己操作浏览器、在会话内查找、统计 Token 用量,以及在任务完成或等待确认时弹出桌面通知。
Plugins for DeepSeek Harness (DSH) — English below.
English · 本仓库以中文为主,英文版见文末。
每个插件都是一个独立的 DSH profile bundle,可以单独安装,彼此之间不共享代码或运行时状态。
插件列表
| 包 | 形态 | 说明 |
| browser | Host,browser_ 工具 | 通过 Playwright 驱动真实 Chromium:打开页面、读取 ARIA 树、点击/输入、截图、处理对话框与下载、录制 WebM。纯 Host 插件,没有客户端 UI。 |
| chat-search | Host + Web 客户端 | 会话内查找:在会话头部打开查找栏,边输入边高亮已渲染对话中的匹配并逐个跳转,不修改对话 DOM。 |
| notification | Host + Web 客户端 | Windows 桌面消息通知:任务完成、等待确认或等待回答时弹出系统通知,两种场景提示音不同;点击通知经本机协议回传并打开对应会话(窗口隐藏时同时唤回)。 |
| usage-stats | Host + Web 客户端 | 跨全部会话的 Token 用量统计:当日/累计 Token、缓存命中率、一年活动热力图、每日趋势、按模型明细。只读本地会话日志,数据不出本机。 |
环境要求
- 已安装并可用的 DeepSeek Harness,至少有一个 profile。
- Node.js 22 或更新版本(browser 插件基于 Node 24 开发)。
- 仅 browser 需要:本机已安装 Chrome、Edge 或 Chromium(插件不会下载浏览器);需要 WebM 录制时还要 Playwright 的 ffmpeg。
- 仅 chat-search / usage-stats / notification 需要:Web 客户端(桌面版或 dsh web)。
安装
每个包都是一个 DSH profile bundle。安装一个插件要做四件事:
1. 让 profile 能解析到这个包;
2. 把它加入 dsh.profile.bundles;
3. 让它自带的 cordis.patch.yml 插入对应的 Cordis 组件;
4. 重启 Host(带客户端的插件还需要刷新一次 Web 页面)。
1. 克隆仓库
git clone https://github.com/fakeNihilist/dsh-plugins.git
2. 把包加进 profile
编辑 <DSH_HOME>/profiles/<profile>/package.json —— 默认 profile 是 desktop,DSH_HOME 通常是 ~/.dsh:
{
"dependencies": {
"@local/dsh-plugin-browser": "link:D:/code/dsh-plugins/packages/browser",
"dsh-plugin-chat-search": "link:D:/code/dsh-plugins/packages/chat-search",
"dsh-plugin-usage-stats": "link:D:/code/dsh-plugins/packages/usage-stats",
"dsh-plugin-notification": "link:D:/code/dsh-plugins/packages/notification"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@local/dsh-plugin-browser",
"dsh-plugin-chat-search",
"dsh-plugin-usage-stats",
"dsh-plugin-notification"
],
"patchReload": "live"
}
}
}
路径按你的实际情况调整;不需要的插件删掉即可。browser 插件保留历史包名 @local/dsh-plugin-browser,其余使用普通的 dsh-plugin- 名字。所有包都设置了 "private": true —— 它们从 checkout 安装,不发布到 npm。
3. 让 profile 能解析到这个包
link: 只记录路径,包仍然要出现在 profile 的 node_modules 里。通过 DSH 插件管理器安装时它会自动处理;如果是手动 checkout,就自己创建链接:
$profileRoot = Join-Path $env:USERPROFILE '.dsh\profiles\desktop'
$nodeModules = Join-Path $profileRoot 'node_modules'
New-Item -ItemType Directory -Force $nodeModules | Out-Null
New-Item -ItemType Junction -Path (Join-Path $nodeModules 'dsh-plugin-chat-search')
-Target 'D:\code\dsh-plugins\packages\chat-search'
New-Item -ItemType Junction -Path (Join-Path $nodeModules 'dsh-plugin-usage-stats')
-Target 'D:\code\dsh-plugins\packages\usage-stats'powershell
New-Item -ItemType Junction -Path (Join-Path $nodeModules 'dsh-plugin-notification')
-Target 'D:\code\dsh-plugins\packages\notification'
bash
macOS / Linux
ln -s /path/to/dsh-plugins/packages/chat-search "$HOME/.dsh/profiles/desktop/node_modules/dsh-plugin-chat-search"
ln -s /path/to/dsh-plugins/packages/usage-stats "$HOME/.dsh/profiles/desktop/node_modules/dsh-plugin-usage-stats"
ln -s /path/to/dsh-plugins/packages/notification "$HOME/.dsh/profiles/desktop/node_modules/dsh-plugin-notification"
browser 插件自带安装脚本,会完成它自己那一步(包括创建 node_modules/@local junction 和跑契约测试): powershell pwsh -File packages/browser/install.ps1 -Profile desktop
4. 重启
重启 Host(或新开一个会话),browser_ 工具才会出现。chat-search、usage-stats 与 notification 还带有 Web 客户端 bundle:重启后再刷新一次浏览器窗口。
各包的配置项、用法和排错见它们自己的 README:
- packages/browser/README.md
- packages/chat-search/README.md
- packages/notification/README.md
- packages/usage-stats/README.md
开发
仓库根目录没有依赖:每个包都是自成一体的。在包目录里开发,只有要跑测试时才需要安装该包的开发依赖。
powershell
依次跑每个包的测试(Node.js 测试运行器)
node scripts/test-all.mjs
只跑单个包
cd packages/chat-search
npm test
有些沙箱禁止 node:test fork 子进程所需的管道。这种情况下改用 in-process 方式跑: powershell $env:NODE_TEST_FLAGS = '--experimental-test-isolation=none'
node scripts/test-all.mjs
browser 插件的契约测试与 smoke 测试还需要真实的 DSH 环境(提供 @deepseek-ai/dsh-tools、@deepseek-ai/cordis)以及启动 Chromium 的权限;受限沙箱里会报 browser_unavailable 或 ERR_MODULE_NOT_FOUND。具体命令见该包的 README。
仓库结构
dsh-plugins/
├─ packages/
│ ├─ browser/ # browser_ 工具(纯 Host) │ ├─ chat-search/ # 会话内查找(Host + Web 客户端) │ ├─ notification/ # 桌面消息通知(Host + Web 客户端) │ └─ usage-stats/ # Token 用量仪表盘(Host + Web 客户端) ├─ scripts/ │ └─ test-all.mjs # 依次跑每个包的测试 ├─ LICENSE └─ package.json # workspace 根,无依赖
隐私
- usage-stats 在本机读取 DSH 会话日志并渲染,不发起网络请求,数据不出本机。
- browser 驱动本机浏览器;它会发出什么网络请求,取决于被打开的页面。页面内容对模型而言是不可信数据。
- chat-search 只读取当前 Web 客户端里已经渲染的对话。
- notification 只读取本机 Session 列表并生成本机系统通知,不向任何服务发送通知内容。
许可证
MIT © 2026 fakeNihilist
返回中文
每个插件都是独立的 DSH 配置档 bundle。可以单独安装,彼此之间不共享代码,也不共享运行时状态。
插件
| 包 | 界面 | 功能 |
| browser | Host,browser_ 工具 | 通过 Playwright 驱动真实 Chromium:打开页面、读取 ARIA 树、点击/输入、截图、处理对话框与下载、录制 WebM。仅 Host,无客户端 UI。 |
| chat-search | Host + Web 客户端 | 会话内查找:会话标题栏里的查找栏会在已渲染的对话记录中高亮匹配项,并就地逐条跳转,不改动对话 DOM。 |
| notification | Host + Web 客户端 | Windows 桌面通知:任务完成、会话等待审批或等待回答时弹出原生 toast,并配不同提示音;点击 toast 会通过本地协议把对应会话切回前台并打开(隐藏窗口也会还原)。 |
| usage-stats | Host + Web 客户端 | 全量语料 token 用量:今日/累计 token、缓存命中率、一年活动热力图、每日趋势,以及按模型拆分。只读本地会话日志——数据不出本机。 |
环境要求
- 已安装 DeepSeek Harness,且至少有一个配置档。
- Node.js 22 或更高版本(browser 插件基于 Node 24 开发)。
- 仅 browser:本机已安装 Chrome、Edge 或 Chromium(插件不会下载浏览器);如需录制 WebM,还要装 Playwright 的 ffmpeg。
- 仅 chat-search / usage-stats / notification:Web 客户端(桌面应用或 dsh web)。
安装
每个包都是 DSH 配置档 bundle。安装一个包要做四件事:
1. 让配置档能解析到这个包,
2. 把它加进 dsh.profile.bundles,
3. 让它自带的 cordis.patch.yml 插入对应的 Cordis 组件,
4. 重启 Host(客户端插件还要重新加载 Web 客户端)。
1. 克隆仓库 powershell
git clone https://github.com/fakeNihilist/dsh-plugins.git
2. 把包加进配置档
编辑 <DSH_HOME>/profiles/<profile>/package.json——默认配置档是 desktop,DSH_HOME 通常是 ~/.dsh: jsonc {
"dependencies": {
"@local/dsh-plugin-browser": "link:D:/code/dsh-plugins/packages/browser",
"dsh-plugin-chat-search": "link:D:/code/dsh-plugins/packages/chat-search",
"dsh-plugin-usage-stats": "link:D:/code/dsh-plugins/packages/usage-stats",
"dsh-plugin-notification": "link:D:/code/dsh-plugins/packages/notification"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@local/dsh-plugin-browser",
"dsh-plugin-chat-search",
"dsh-plugin-usage-stats",
"dsh-plugin-notification"
],
"patchReload": "live"
}
}
}
按实际情况调整路径,删掉你不需要的插件。browser 插件沿用历史包名 @local/dsh-plugin-browser,其余插件用普通的 dsh-plugin- 名称。它们都设了 "private": true——从本地检出安装,不发布到 npm。
3. 让配置档能解析到这个包
link: 写法只记录路径,包还得出现在配置档的 node_modules 里。通过 DSH 插件管理器安装时会自动处理。手动检出的话,自己建链接: powershell $profileRoot = Join-Path $env:USERPROFILE '.dsh\profiles\desktop' $nodeModules = Join-Path $profileRoot 'node_modules' New-Item -ItemType Directory -Force $nodeModules | Out-Null powershell New-Item -ItemType Junction -Path (Join-Path $nodeModules 'dsh-plugin-chat-search') -Target 'D:\code\dsh-plugins\packages\chat-search' New-Item -ItemType Junction -Path (Join-Path $nodeModules 'dsh-plugin-usage-stats') -Target 'D:\code\dsh-plugins\packages\usage-stats' New-Item -ItemType Junction -Path (Join-Path $nodeModules 'dsh-plugin-notification') -Target 'D:\code\dsh-plugins\packages\notification' bash
macOS / Linux
ln -s /path/to/dsh-plugins/packages/chat-search "$HOME/.dsh/profiles/desktop/node_modules/dsh-plugin-chat-search"
ln -s /path/to/dsh-plugins/packages/usage-stats "$HOME/.dsh/profiles/desktop/node_modules/dsh-plugin-usage-stats"
ln -s /path/to/dsh-plugins/packages/notification "$HOME/.dsh/profiles/desktop/node_modules/dsh-plugin-notification"
browser 插件自带安装脚本,这一步它替你做完,包括 node_modules/@local junction 和对应的契约测试: powershell pwsh -File packages/browser/install.ps1 -Profile desktop
4. 重启
重启 Host(或新开会话),browser_ 工具才会出现。chat-search、usage-stats、notification 还会额外挂一个 Web 客户端 bundle:重启后把浏览器窗口刷新一次。
每个包的 README 各自记录了自己的配置项、用法和排错方法:
- packages/browser/README.md
- packages/chat-search/README.md
- packages/notification/README.md
- packages/usage-stats/README.md
开发
根目录没有依赖:每个包都自成一体。在包目录里干活,只有跑测试时才需要装它的开发依赖。
powershell
Every package, one after another (Node.js test runner)
node scripts/test-all.mjs
A single package
cd packages/chat-search
npm test
有些沙箱会禁掉子进程管道,而 node:test 正是靠它给每个测试文件 fork 一个进程。遇到这种情况,改成在进程内跑: powershell $env:NODE_TEST_FLAGS = '--experimental-test-isolation=none'
node scripts/test-all.mjs
browser 插件的契约测试和冒烟测试还额外需要真实的 DSH 环境(用到 @deepseek-ai/dsh-tools、@deepseek-ai/cordis),并且要有启动 Chromium 的权限;受限沙箱里只会报 browser_unavailable 或 ERR_MODULE_NOT_FOUND。具体命令见它的 README。
仓库结构
dsh-plugins/
├─ packages/
│ ├─ browser/ # browser_ tools (Host-only)
│ ├─ chat-search/ # in-conversation search (Host + Web client)
│ ├─ notification/ # desktop notifications (Host + Web client)
│ └─ usage-stats/ # token usage dashboard (Host + Web client)
├─ scripts/
│ └─ test-all.mjs # run every package's tests
├─ LICENSE
└─ package.json # workspace root, no dependencies
隐私
- usage-stats 读取本机的 DSH 会话日志并渲染出来;它不发起网络请求,数据不会离开本机。
- browser 驱动本地浏览器;它通过网络发送的内容,就是它指向的页面所请求的内容。智能体把页面内容当作不可信数据处理。
- chat-search 只读取当前 Web 客户端里已渲染的对话。
- notification 读取本地会话列表,并发出本地操作系统通知;通知内容从不发送到任何地方。
许可证
MIT © 2026 fakeNihilist预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
fakeNihilist/dsh-plugins
让模型直接打开网页、点击输入并截图录屏
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目