一个deepseek插件库
32.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sjhmars/dsh-plugins该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugins @ 0.1.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/21 17:43:09
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 75 处,展示前 72 条)
- 读取本地文件plugins/editor-launcher/lib/index.js:331
if (path !== void 0 && path !== "" && existsSync(path)) map.set(currentExe, path); - 执行外部命令来自配置/变量plugins/editor-launcher/lib/index.js:342
const child = spawn(command, [...args], { - 读取本地文件plugins/editor-launcher/lib/index.js:378
if (existsSync(candidate)) { - 读取本地文件plugins/editor-launcher/lib/index.js:381
if (existsSync(exe)) return exe; - 读取本地文件plugins/editor-launcher/lib/index.js:404
if (!existsSync(vswhere)) return void 0; - 读取本地文件plugins/editor-launcher/lib/index.js:414
return path !== "" && existsSync(path) ? path : void 0; - 读取本地文件plugins/editor-launcher/lib/index.js:440
if (existsSync(bundle)) return { - 执行外部命令来自配置/变量plugins/editor-launcher/lib/index.js:578
child = spawn(spawnCommand, spawnArgs, { - 读取本地文件plugins/editor-launcher/src/index.ts:345
if (path !== undefined && path !== '' && existsSync(path)) map.set(currentExe, path) - 执行外部命令来自配置/变量plugins/editor-launcher/src/index.ts:357
const child = spawn(command, [...args], { windowsHide: true, stdio: ['ignore', 'pipe', 'ignore'] }) - 读取本地文件plugins/editor-launcher/src/index.ts:384
if (existsSync(candidate)) { - 读取本地文件plugins/editor-launcher/src/index.ts:391
if (existsSync(exe)) return exe - 读取本地文件plugins/editor-launcher/src/index.ts:423
if (!existsSync(vswhere)) return undefined - 读取本地文件plugins/editor-launcher/src/index.ts:430
return path !== '' && existsSync(path) ? path : undefined - 读取本地文件plugins/editor-launcher/src/index.ts:453
if (existsSync(bundle)) { - 执行外部命令来自配置/变量plugins/editor-launcher/src/index.ts:562
child = spawn(spawnCommand, spawnArgs, { - 写入剪贴板plugins/happy-bridge/lib/client.js:87
await navigator.clipboard.writeText(value); - 写入本地文件plugins/happy-bridge/lib/index.js:499
await mkdir(credentialDir, { recursive: true }); - 写入本地文件plugins/happy-bridge/lib/index.js:509
await writeFile(join(credentialDir, "access.key"), JSON.stringify(body, null, 2), "utf8"); - 写入本地文件plugins/happy-bridge/lib/index.js:522
await mkdir(credentialDir, { recursive: true }); - 写入本地文件plugins/happy-bridge/lib/index.js:535
await mkdir(credentialDir, { recursive: true }); - 读取本地文件plugins/happy-bridge/lib/index.js:589
raw = await readFile(path, "utf8"); - 读取本地文件plugins/happy-bridge/lib/index.js:623
const raw = await readFile(join(credentialDir, "state.json"), "utf8"); - 写入本地文件plugins/happy-bridge/lib/index.js:640
await writeFile(join(credentialDir, "state.json"), JSON.stringify({ - 写入本地文件plugins/happy-bridge/lib/index.js:766
await mkdir(inbox, { recursive: true }); - 读取本地文件plugins/happy-bridge/lib/index.js:767
const taken = new Set(await readdir(inbox)); - 发起网络请求plugins/happy-bridge/lib/index.js:1917
const response = await fetch(`${trimSlash$1(serverUrl)}${path}`, { - 发起网络请求plugins/happy-bridge/lib/index.js:2012
const response = await fetch(uploadUrl, { - 发起网络请求plugins/happy-bridge/lib/index.js:2022
const response = await fetch(uploadUrl, { - 发起网络请求plugins/happy-bridge/lib/index.js:2078
const response = await fetch(downloadUrl, { headers }); - 写入本地文件plugins/happy-bridge/src/credentials.ts:55
await mkdir(credentialDir, { recursive: true }) - 写入本地文件plugins/happy-bridge/src/credentials.ts:68
await writeFile(join(credentialDir, 'access.key'), JSON.stringify(body, null, 2), 'utf8') - 写入本地文件plugins/happy-bridge/src/credentials.ts:79
await mkdir(credentialDir, { recursive: true }) - 写入本地文件plugins/happy-bridge/src/credentials.ts:93
await mkdir(credentialDir, { recursive: true }) - 读取本地文件plugins/happy-bridge/src/credentials.ts:150
raw = await readFile(path, 'utf8') - 读取本地文件plugins/happy-bridge/src/credentials.ts:193
const raw = await readFile(join(credentialDir, 'state.json'), 'utf8') - 写入本地文件plugins/happy-bridge/src/credentials.ts:211
await writeFile(join(credentialDir, 'state.json'), JSON.stringify({ - 发起网络请求plugins/happy-bridge/src/http.ts:25
const response = await fetch(`${trimSlash(serverUrl)}${path}`, { - 发起网络请求plugins/happy-bridge/src/http.ts:158
const response = await fetch(uploadUrl, { - 发起网络请求plugins/happy-bridge/src/http.ts:168
const response = await fetch(uploadUrl, { method: 'PUT', headers, body: new Blob([copyBytes(encrypted)]) }) - 发起网络请求plugins/happy-bridge/src/http.ts:240
const response = await fetch(downloadUrl, { headers }) - 写入本地文件plugins/happy-bridge/src/inbox.ts:72
await mkdir(inbox, { recursive: true }) - 读取本地文件plugins/happy-bridge/src/inbox.ts:73
const taken = new Set(await readdir(inbox)) - 写入本地文件plugins/happy-bridge/src/inbox.ts:78
await writeFile(join(inbox, name), file.bytes) - 发起网络请求plugins/plugin-install/lib/client.js:160
const response = await fetch(url); - 读取本地文件plugins/plugin-install/lib/index.js:76
content = await readFile(filename, "utf8"); - 删除本地文件plugins/plugin-install/lib/index.js:118
if (file.content === void 0) await rm(file.filename, { force: true }); - 读取本地文件plugins/plugin-install/src/add.ts:86
try { content = await readFile(filename, 'utf8') } - 删除本地文件plugins/plugin-install/src/add.ts:123
if (file.content === undefined) await rm(file.filename, { force: true }) - 写入本地文件plugins/segmented-compaction/src/journal.ts:14
await mkdir(directory, { recursive: true, mode: 0o700 }) - 执行外部命令固定命令plugins/task-notify/lib/index.js:29
const child = spawn("osascript", ["-e", source], { stdio: [ - 读取本地文件plugins/task-notify/lib/index.js:86
if (existsSync(path)) return path; - 读取本地文件plugins/task-notify/lib/index.js:116
if (existsSync(path)) return path; - 写入本地文件plugins/task-notify/lib/index.js:140
mkdirSync(dirname(path), { recursive: true }); - 写入本地文件plugins/task-notify/lib/index.js:141
writeFileSync(path, "abort\n", "utf8"); - 删除本地文件plugins/task-notify/lib/index.js:146
unlinkSync(path); - 删除本地文件plugins/task-notify/lib/index.js:149
unlinkSync(`${path}.ready`); - 读取本地文件plugins/task-notify/lib/index.js:154
if (!existsSync(path)) return void 0; - 读取本地文件plugins/task-notify/lib/index.js:156
const text = readFileSync(path, "utf8").replace(/^ FEFF/, "").trim(); - 删除本地文件plugins/task-notify/lib/index.js:157
unlinkSync(path); - 执行外部命令固定命令plugins/task-notify/lib/index.js:331
const child = spawn("powershell.exe", [ - 执行外部命令固定命令plugins/task-notify/src/macos-toast.ts:33
const child = spawn('osascript', ['-e', source], { - 读取本地文件plugins/task-notify/src/toast-channel.ts:25
if (existsSync(path)) return path - 写入本地文件plugins/task-notify/src/toast-channel.ts:55
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件plugins/task-notify/src/toast-channel.ts:56
writeFileSync(path, 'abort\n', 'utf8') - 删除本地文件plugins/task-notify/src/toast-channel.ts:63
try { unlinkSync(path) } catch { } - 删除本地文件plugins/task-notify/src/toast-channel.ts:64
try { unlinkSync(`${path}.ready`) } catch { } - 读取本地文件plugins/task-notify/src/toast-channel.ts:69
if (!existsSync(path)) return undefined - 读取本地文件plugins/task-notify/src/toast-channel.ts:71
const text = readFileSync(path, 'utf8').replace(/^ FEFF/, '').trim() - 删除本地文件plugins/task-notify/src/toast-channel.ts:72
unlinkSync(path) - 执行外部命令固定命令plugins/task-notify/src/toast-channel.ts:231
const child = spawn('powershell.exe', [ - 读取本地文件plugins/task-notify/src/windows-toast.ts:34
if (existsSync(path)) return path
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-plugins
DeepSeek Harness 的插件集合仓库(pnpm workspace)。每个插件都是独立 npm 包,放在 plugins/<name>/,可以单独构建、打包、发布到 npm,再用 dsh plugin 装进 profile。
仓库结构 / Layout
dsh-plugins/
├── package.json # workspace 根(private,聚合脚本) ├── pnpm-workspace.yaml # packages: ['plugins/'] ├── tsconfig.base.json # 共享 TS 配置(paths 指向 harness checkout 的 lib/types) ├── release/ # 六个插件的 npm tarball └── plugins/ └── <name>/ # 一个插件 = 一个 npm 包 ├── package.json # dsh.bundle + dsh.client manifest ├── cordis.patch.yml └── src/ lib/
插件列表 / Plugins
web 和 desktop 是两套互不相通的 profile:网页版用 --profile web,桌面客户端用 --profile desktop。
展开完整文档(README 剩余 1 节)
dsh-plugins DeepSeek Harness 的插件集合仓库(pnpm workspace)。每个插件都是独立 npm 包,放在 plugins/<name>/,可以单独构建、打包、发布到 npm,再用 dsh plugin 装进 profile。 仓库结构 / Layout dsh-plugins/ ├── package.json # workspace 根(private,聚合脚本) ├── pnpm-workspace.yaml # packages: ['plugins/'] ├── tsconfig.base.json # 共享 TS 配置(paths 指向 harness checkout 的 lib/types) ├── release/ # 六个插件的 npm tarball └── plugins/ └── <name>/ # 一个插件 = 一个 npm 包 ├── package.json # dsh.bundle + dsh.client manifest ├── cordis.patch.yml └── src/ lib/ 插件列表 / Plugins web 和 desktop 是两套互不相通的 profile:网页版用 --profile web,桌面客户端用 --profile desktop。装错 profile,另一个客户端就看不见。 | 插件(npm) | 用途 | | @sjhmars/editor-launcher · 源码 | 在 Session 头部加编辑器选择器:列出本机已安装编辑器(含注册表检测,支持非 C 盘安装的 JetBrains / Visual Studio),选中记为默认;点击会话中模型 Read/Edit/Write 或正文提及的文件路径,用所选编辑器打开(Web 端)。 | | @sjhmars/task-notify · 源码 | Agent 任务结束、工具要你批准、或向你提问时弹出桌面通知。Windows 上 Web 和 Desktop 的批准都是右下角卡片(允许一次 / 拒绝 / 关闭后出黄框)。 | | @sjhmars/happy-bridge · 源码 | Remote-control bridge(远程控制桥):电脑照常跑 dsh web/桌面;扫码后用手机 Happy App 遥控同一套会话(发消息、看回复、点批准)。Pair by QR code, then the Happy mobile app remote-controls the same harness sessions. | | @sjhmars/pi-ai-thinking · 源码 | Model configuration helper(模型配置辅助):给设置页创建的自定义 llm-pi-ai 模型自动补思考强度四档(off/low/high/max),不用改源码或手改 profile patch。Automatically adds reasoning-effort presets to custom pi-ai models. | | @sjhmars/plugin-install · 源码 | Plugins 的本包详情页安装 npm bundle 和普通组件;安装后提示重启。 | | @sjhmars/segmented-compaction · 源码与本地开发说明 | 原 basic-compaction 超限后,按完整历史与必要的文本切片滚动压缩;含中英文设置。 | 版本兼容 / Harness Compatibility 插件版本与 harness 版本要配套:大版本适配错位时插件可能无法挂载或行为异常。以各插件 package.json 的 peerDependencies 为准,当前范围: | 插件版本 | harness 要求 | 说明 | | @sjhmars/happy-bridge 0.3.10+ | ≥ 0.2.1-alpha.1 | Loader volatile 配置、configForms、sessionQuery 和 assistant stream API。 | | @sjhmars/pi-ai-thinking 0.1.1+ | ≥ 0.2.1-alpha.1 | 以 Loader entry id 定位官方模型配置,保存到 profile patch。 | | @sjhmars/segmented-compaction 0.1.3+ | ≥ 0.2.1-alpha.1 | 新的配置页、request-only 摘要指令、tool 消息及原压缩事务跟踪。 | | @sjhmars/plugin-install 0.5.0+ | ≥ 0.2.1-alpha.1 | 官方包操作安装 bundle 和普通组件;失败恢复清单与锁文件,安装后重启。 | | @sjhmars/editor-launcher 0.1.6+ | ≥ 0.2.1-alpha.1 | 当前会话作用域、Host home 路径、图标和系统关联应用回退。 | | @sjhmars/task-notify 0.1.3+ | ≥ 0.2.1-alpha.1 | 异步会话历史、提问 waterfall、卸载后取消通知投递。 | 这六个插件的开发依赖通过 link: 指向相邻 deepseek-harness checkout 的公开包。官方仓库先完成构建,然后在此仓库运行 pnpm install --ignore-scripts;pnpm run test:compat 验证 Loader 热更新、拒绝写入、客户端页面、编辑器路径和通知生命周期;pnpm --filter @sjhmars/plugin-install run test 检查安装结果。此表依据本地 Harness 0.2.1-alpha.1,并在独立 DSH_HOME 下验证了六个包的 CLI 安装和 bundle 选择。原生弹窗、具体编辑器启动和独立 Desktop 壳需另行验收。 当前适配使用官方 Cordis 4.0.5-alpha.1 和 Schemastery 3.18.5-alpha.1;各插件的 peer 范围明确包含这两个预发布版本。 规则:装插件前先看 harness 版本(dsh --version 或 git tag),再选插件版本;发布新插件版本时同步更新本表。 安装与更新 / Install and update 这些版本适配 Harness 0.2.1-alpha.1。Web 和 Desktop 分别保存插件;Desktop 还需要确认应用自身的版本。下面的源码命令在 Windows CMD 中执行。 应用内安装 打开侧栏「插件 / Plugins」→「添加插件 / Add plugin」,选择 npm 官方源,输入兼容表中的 包名@版本 后安装。已有插件也可以用相同入口更新,按结果提示重启。Happy 和分段压缩的配置位于各自的插件详情页。 其他五个兼容版本已发布 npm。plugin-install 0.5.0 是待发布的新版本;现在可安装 release 中的本地 tarball,见 本地包与开发联调。 Web:从官方源码仓库安装 plugin-install 0.5.0 发布 npm 后,这条命令可安装六个指定版本;发布前将其包名参数换为 H:\dsh-plugin\release\sjhmars-plugin-install-0.5.0.tgz: cd /d H:\deepseek-harness pnpm dsh plugin --profile web add ^ @sjhmars/editor-launcher@0.1.6 ^ @sjhmars/happy-bridge@0.3.10 ^ @sjhmars/pi-ai-thinking@0.1.1 ^ @sjhmars/plugin-install@0.5.0 ^ @sjhmars/segmented-compaction@0.1.3 ^ @sjhmars/task-notify@0.1.3 ^ --registry=https://registry.npmjs.org plugin-install 是可选插件;官方「添加插件」支持 bundle,本包详情页的安装框也接受普通组件。普通组件首次安装还需配置启用,已有配置在重启后使用新版本。若使用 npm 安装的 Web CLI,把 pnpm dsh 换成 dsh。 已有插件仍使用 add 包名@版本 更新。例如: cd /d H:\deepseek-harness pnpm dsh plugin --profile web add @sjhmars/happy-bridge@0.3.10 --registry=https://registry.npmjs.org CLI 安装或更新后,停止并重新启动 Web 进程,再在插件页核对版本和启用状态。单纯刷新浏览器不能替代进程重启。 Desktop:应用内安装或使用桌面版注册的命令 Desktop 优先使用上面的应用内安装入口。命令行安装需要先启动 Desktop 一次以初始化 profile,再通过应用的「管理 dsh 命令 / Manage dsh Command」注册命令;完全退出 Desktop 后,使用该命令: dsh plugin --profile desktop add @sjhmars/happy-bridge@0.3.10 --registry=https://registry.npmjs.org 源码仓库的 pnpm dsh 和 npm 安装的 dsh 都不能管理 desktop profile。Desktop 注册的命令可以管理已有的桌面 profile,完成后重新打开应用。 Desktop 通常无需安装可选的 plugin-install。如果已使用它,更新前应确认其 profile 配置为 desktop;配置示例见 plugin-install README。 本地包与开发联调 本地构建可以用 release 目录里的 .tgz 替代包名安装,也可以在应用内安装框填写其绝对路径。例如安装尚未发布 npm 的新版安装器: cd /d H:\deepseek-harness pnpm dsh plugin --profile web add H:\dsh-plugin\release\sjhmars-plugin-install-0.5.0.tgz --registry=https://registry.npmjs.org 路径必须指向运行 Harness 的机器;浏览器所在机器的文件不会自动上传。开发时的客户端 overlay 和构建方式见各插件 README。 发现本仓库插件 / Discover 本仓库打了 dsh-plugin、deepseek-harness、plugin 等 GitHub topic,会出现在: - GitHub topic 聚合页:<https://github.com/topics/dsh-plugin> - 社区插件市场:https://github.com/bradeGithub/DSH-Plugins-Marketplace 安装指定兼容版本或本地 tarball,见 安装与更新。 构建 / Build 在仓库根运行一次,构建全部插件: cd /d H:\dsh-plugin pnpm install --ignore-scripts pnpm run build pnpm run typecheck 插件的 @deepseek-ai/ 是 peerDependencies,运行时由 harness 安装树提供;类型解析走 tsconfig.base.json 的 paths(指向本地 harness checkout 的 lib/types)。构建工具由各插件的开发依赖提供,具体步骤见各插件 README。 构建后可把六个插件打包到统一目录,检查包内文件后再发布 .tgz。以下命令在 Windows CMD 中执行: cd /d H:\dsh-plugin pnpm run pack --pack-destination H:\dsh-plugin\release 根目录 dsh-plugins 是 private 工作区;发布时指定单个插件的 tarball。npm 已存在的版本号不能重复发布;每次发布同步更新插件版本和兼容表。plugin-install 0.5.0 已构建打包,等待发布;其他五个插件无需重复发布。以下命令对新版安装器做预检: cd /d H:\dsh-plugin\release npm publish sjhmars-plugin-install-0.5.0.tgz --dry-run --access public --registry=https://registry.npmjs.org 正式发布新版本时,将文件名换为对应的新 tarball,并去掉 --dry-run。如果尚未登录 npm,先运行 npm login --registry=https://registry.npmjs.org。发布预检不上传安装包。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sjhmars/dsh-plugins
一个deepseek插件库
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目