任务完成时弹出飞书式置顶卡片与应用内提醒
32.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:仓库根目录无 package.json,浅层子目录有 3 份 dsh 插件清单(dsh-plugin-chat-jump/package.json、dsh-plugin-task-notify/package.json、dsh-plugin-workspace-files/package.json),无法唯一定位安装名。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Favio8/dsh-plugins该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/28) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库根目录无 package.json,浅层子目录有 3 份 dsh 插件清单(dsh-plugin-chat-jump/package.json、dsh-plugin-task-notify/package.json、dsh-plugin-workspace-files/package.json),无法唯一定位安装名
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-plugins(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/21 11:42:13
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 58 处,展示前 56 条)
- 发起网络请求dsh-plugin-task-notify/lib/client.js:458
const res = await fetch("/task-notify/config"); - 发起网络请求dsh-plugin-task-notify/lib/client.js:469
const res = await fetch("/task-notify/config", { - 发起网络请求dsh-plugin-task-notify/lib/client.js:524
if (host?.desktop === true || host?.sound === true) fetch("/task-notify/test", { method: "POST" }).catch(() => {}); - 读取本地文件dsh-plugin-task-notify/lib/index.mjs:373
if (!existsSync(CONFIG_PATH)) return { ...DEFAULTS }; - 读取本地文件dsh-plugin-task-notify/lib/index.mjs:374
return sanitizeConfig(JSON.parse(readFileSync(CONFIG_PATH, "utf8"))); - 写入本地文件dsh-plugin-task-notify/lib/index.mjs:386
mkdirSync(CONFIG_DIR, { recursive: true }); - 写入本地文件dsh-plugin-task-notify/lib/index.mjs:387
writeFileSync(tempPath, JSON.stringify(cfg, null, 2), "utf8"); - 写入本地文件dsh-plugin-task-notify/lib/index.mjs:388
renameSync(tempPath, CONFIG_PATH); - 删除本地文件dsh-plugin-task-notify/lib/index.mjs:391
unlinkSync(tempPath); - 读取本地文件dsh-plugin-task-notify/lib/index.mjs:401
if (!existsSync(file)) { - 写入本地文件dsh-plugin-task-notify/lib/index.mjs:402
mkdirSync(SOUND_DIR, { recursive: true }); - 写入本地文件dsh-plugin-task-notify/lib/index.mjs:403
writeFileSync(file, synthSound(type, config.volume)); - 读取本地文件dsh-plugin-task-notify/lib/index.mjs:404
for (const old of readdirSync(SOUND_DIR)) { - 删除本地文件dsh-plugin-task-notify/lib/index.mjs:408
unlinkSync(join(SOUND_DIR, old)); - 执行外部命令固定命令dsh-plugin-task-notify/lib/index.mjs:434
const child = spawn("powershell.exe", encoded ? [ - 删除本地文件dsh-plugin-task-notify/lib/index.mjs:463
unlinkSync(scriptPath); - 写入本地文件dsh-plugin-task-notify/lib/index.mjs:467
writeFileSync(scriptPath, `${POPUP_SCRIPT}`, "utf8"); - 执行外部命令固定命令dsh-plugin-task-notify/lib/index.mjs:468
const child = spawn("powershell.exe", [ - 读取本地文件dsh-plugin-task-notify/src/index.ts:346
if (!existsSync(CONFIG_PATH)) return { ...DEFAULTS } - 读取本地文件dsh-plugin-task-notify/src/index.ts:347
return sanitizeConfig(JSON.parse(readFileSync(CONFIG_PATH, 'utf8'))) - 写入本地文件dsh-plugin-task-notify/src/index.ts:363
mkdirSync(CONFIG_DIR, { recursive: true }) - 写入本地文件dsh-plugin-task-notify/src/index.ts:364
writeFileSync(tempPath, JSON.stringify(cfg, null, 2), 'utf8') - 写入本地文件dsh-plugin-task-notify/src/index.ts:365
renameSync(tempPath, CONFIG_PATH) - 删除本地文件dsh-plugin-task-notify/src/index.ts:368
unlinkSync(tempPath) - 读取本地文件dsh-plugin-task-notify/src/index.ts:381
if (!existsSync(file)) { - 写入本地文件dsh-plugin-task-notify/src/index.ts:382
mkdirSync(SOUND_DIR, { recursive: true }) - 写入本地文件dsh-plugin-task-notify/src/index.ts:383
writeFileSync(file, synthSound(type as Exclude<SoundType, 'system'>, config.volume)) - 读取本地文件dsh-plugin-task-notify/src/index.ts:385
for (const old of readdirSync(SOUND_DIR)) { - 删除本地文件dsh-plugin-task-notify/src/index.ts:389
unlinkSync(join(SOUND_DIR, old)) - 执行外部命令固定命令dsh-plugin-task-notify/src/index.ts:428
const child = spawn('powershell.exe', args, { - 删除本地文件dsh-plugin-task-notify/src/index.ts:455
unlinkSync(scriptPath) - 写入本地文件dsh-plugin-task-notify/src/index.ts:461
writeFileSync(scriptPath, `${POPUP_SCRIPT}`, 'utf8') - 执行外部命令固定命令dsh-plugin-task-notify/src/index.ts:462
const child = spawn( - 发起网络请求dsh-plugin-workspace-files/lib/client.js:145
const res = await fetch(url, { signal }); - 发起网络请求dsh-plugin-workspace-files/lib/client.js:190
const res = await fetch("/workspace-files/config", { - 写入剪贴板dsh-plugin-workspace-files/lib/client.js:4919
clipboard.writeText(rel).then(() => { - 读取本地文件dsh-plugin-workspace-files/lib/index.mjs:76
if (!existsSync(CONFIG_PATH)) return { ...DEFAULTS }; - 读取本地文件dsh-plugin-workspace-files/lib/index.mjs:77
const raw = JSON.parse(readFileSync(CONFIG_PATH, "utf8")); - 写入本地文件dsh-plugin-workspace-files/lib/index.mjs:99
mkdirSync(CONFIG_DIR, { recursive: true }); - 写入本地文件dsh-plugin-workspace-files/lib/index.mjs:100
writeFileSync(tempPath, JSON.stringify(next, null, 2), "utf8"); - 写入本地文件dsh-plugin-workspace-files/lib/index.mjs:101
renameSync(tempPath, CONFIG_PATH); - 删除本地文件dsh-plugin-workspace-files/lib/index.mjs:104
unlinkSync(tempPath); - 读取本地文件dsh-plugin-workspace-files/lib/index.mjs:125
return await realpath(path); - 读取本地文件dsh-plugin-workspace-files/lib/index.mjs:166
const real = await realpath(abs); - 读取本地文件dsh-plugin-workspace-files/lib/index.mjs:285
const visible = (await readdir(guarded.abs, { withFileTypes: true })).filter((d) => { - 读取本地文件dsh-plugin-workspace-files/lib/index.mjs:293
const s = await lstat(full); - 读取本地文件dsh-plugin-workspace-files/src/index.ts:65
if (!existsSync(CONFIG_PATH)) return { ...DEFAULTS } - 读取本地文件dsh-plugin-workspace-files/src/index.ts:66
const raw = JSON.parse(readFileSync(CONFIG_PATH, 'utf8')) as Partial<HostConfig> - 写入本地文件dsh-plugin-workspace-files/src/index.ts:94
mkdirSync(CONFIG_DIR, { recursive: true }) - 写入本地文件dsh-plugin-workspace-files/src/index.ts:95
writeFileSync(tempPath, JSON.stringify(next, null, 2), 'utf8') - 写入本地文件dsh-plugin-workspace-files/src/index.ts:96
renameSync(tempPath, CONFIG_PATH) - 删除本地文件dsh-plugin-workspace-files/src/index.ts:99
unlinkSync(tempPath) - 读取本地文件dsh-plugin-workspace-files/src/index.ts:139
return await realpath(path) - 读取本地文件dsh-plugin-workspace-files/src/index.ts:181
const real = await realpath(abs) - 读取本地文件dsh-plugin-workspace-files/src/index.ts:288
const dirents = await readdir(guarded.abs, { withFileTypes: true }) - 读取本地文件dsh-plugin-workspace-files/src/index.ts:298
const s = await lstat(full)
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 任务完成弹出桌面卡片
- 应用内浮窗提醒
- 绕过系统通知设置
README
由 DeepSeek 最新模型翻译生成DSH 插件
| English
为 DeepSeek Harness 开发的个人插件合集:每个插件一个独立文件夹,全部为可持久挂载的源码插件(source plugin)。
让 DSH 更好用:当前包含任务完成通知——飞书式桌面置顶卡片(不依赖 Windows 通知设置,页面关闭也能收到)+ 应用内 toast。
插件清单
| 插件 | 说明 | 状态 |
| dsh-plugin-task-notify | 任务完成通知:飞书式置顶卡片(主题/强调色/位置/时长/字体可配)+ 应用内 toast + 完整设置页 | ✅ 已挂载生效 |
| dsh-plugin-workspace-files | 工作区文件体验:输入框 @ 引用文件(最近引用/层级导航)+ 修改文件点击侧边栏预览 + 右上角项目文件夹浏览 | ✅ 已挂载生效 |
| dsh-plugin-chat-jump | 对话快速跳转:对话流左侧圆点导航(类 Codex),点击直达各条用户消息 + scroll-spy 高亮 | ✅ 已挂载生效 |
| dsh-plugin-deepeye | DeepEye:视觉能力(图片描述 / OCR / 视觉问答 / 布局分析 / 剪贴板),独立仓库 | 独立仓库 |
特性
展开完整文档(README 剩余 1 节)
DSH 插件 | English 为 DeepSeek Harness 开发的个人插件合集:每个插件一个独立文件夹,全部为可持久挂载的源码插件(source plugin)。 让 DSH 更好用:当前包含任务完成通知——飞书式桌面置顶卡片(不依赖 Windows 通知设置,页面关闭也能收到)+ 应用内 toast。 插件清单 | 插件 | 说明 | 状态 | | dsh-plugin-task-notify | 任务完成通知:飞书式置顶卡片(主题/强调色/位置/时长/字体可配)+ 应用内 toast + 完整设置页 | ✅ 已挂载生效 | | dsh-plugin-workspace-files | 工作区文件体验:输入框 @ 引用文件(最近引用/层级导航)+ 修改文件点击侧边栏预览 + 右上角项目文件夹浏览 | ✅ 已挂载生效 | | dsh-plugin-chat-jump | 对话快速跳转:对话流左侧圆点导航(类 Codex),点击直达各条用户消息 + scroll-spy 高亮 | ✅ 已挂载生效 | | dsh-plugin-deepeye | DeepEye:视觉能力(图片描述 / OCR / 视觉问答 / 布局分析 / 剪贴板),独立仓库 | 独立仓库 | 特性 - 一插件一文件夹 — 每个插件是独立 npm 包(dsh-plugin-),互不依赖,可独立构建、挂载、移除 - 可持久挂载 — 源码插件经 dsh plugin 挂载后重启依然生效(区别于会话内临时动态插件) - 原生集成 — 直接注册进 DSH 的 host 组合与客户端槽位,无中间层开销 - 统一开发规范 — AGENTS.md 定义插件结构、构建方式、挂载步骤与开发约束,所有插件遵循同一套约定 安装(挂载插件到 DSH) 本地开发:从插件源码目录挂载 dsh plugin --profile web add "link:" 示例 dsh plugin --profile web add "link:D:/AAA_Favio_2026/AI_exploring/deepseek-ai/dsh-plugin/dsh-plugin-task-notify" 安装时 dsh 会: 1. 用 pnpm 把插件链接进 profile 目录 2. 因插件声明了 dsh.bundle,自动追加到 dsh.profile.bundles 层叠 新增插件后需重启 dsh web 进程生效;已挂载插件的 lib/client.js 内容变化可经 HMR 热更新(pnpm build 后刷新页面)。 新增一个插件 1. 读 AGENTS.md——所有约定(结构、构建、挂载、规范)都在里面 2. 以 dsh-plugin-task-notify 为模板:package.json 的 dsh.client / dsh.bundle 字段、tsdown.config.ts 双入口构建、src/(host 半 + client 半)、lib/ 产物提交 3. 每个插件文件夹自带 README.md(用途 / 特性 / 挂载 / 配置) 开发 每个插件都是独立 npm 包,在对应插件文件夹内: cd dsh-plugin- pnpm install pnpm run typecheck pnpm run build 仓库结构 dsh-plugins/ ├── AGENTS.md # 仓库级开发约束(必读) ├── README.md # 本文件 └── dsh-plugin-/ # 每个插件一个独立文件夹 ├── package.json # dsh.client / dsh.bundle 声明 ├── tsdown.config.ts # host + client 双入口构建 ├── src/ # TypeScript 源码(host 半 + client 半) ├── lib/ # 构建产物(必须提交;link: 挂载直接指向源码目录) └── README.md # 插件自述 相关仓库 - dsh-plugin-deepeye — DeepEye:为 DSH 提供视觉能力的独立插件仓库(DeepSeek Harness 原生视觉插件) License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Favio8/dsh-plugins
任务完成时弹出飞书式置顶卡片与应用内提醒
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7