🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

浏览器操控 fakeNihilist/dsh-plugins

DeepSeek Harnessv0.1.2
fakeNihilist14 天前有提交已提供中文文档扫描:含敏感能力

让模型直接打开网页、点击输入并截图录屏

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
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 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
预览分享卡片长什么样 ↓fakeNihilist/dsh-plugins
分享 · DeepSeek Harness Hub
fakeNihilist/dsh-plugins

让模型直接打开网页、点击输入并截图录屏

这是你的仓库?认领条目

回到顶部