任务完成或需要你操作时,弹桌面通知并推送到手机
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Ahrunda/dsh-notify-kde该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 19 处,展示前 19 条)
- 发起网络请求lib/client.js:52
global.fetch(CONSUMED + '?sessionId=' + encodeURIComponent(sessionId), { - 发起网络请求lib/client.js:98
global.fetch(PENDING, { cache: 'no-store' }) - 发起网络请求lib/client.js:120
global.fetch(HELLO, { method: 'POST', cache: 'no-store' }).catch(function () {}); - 读取本地文件lib/log.js:34
if (!existsSync(file) || statSync(file).size <= MAX_BYTES) return; - 读取本地文件lib/log.js:34
if (!existsSync(file) || statSync(file).size <= MAX_BYTES) return; - 读取本地文件lib/log.js:35
const size = statSync(file).size; - 写入本地文件lib/log.js:43
writeFileSync(file, newline >= 0 ? text.slice(newline + 1) : text); - 写入本地文件lib/log.js:62
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件lib/log.js:64
appendFileSync(file, `${new Date().toISOString()} ${level} ${message}\n`); - 读取本地文件lib/notifier.js:245
if (!cfg.icon && existsSync(BUNDLED_ICON)) cfg.icon = BUNDLED_ICON; - 读取本地文件lib/config.js:155
if (!existsSync(file)) return { values: {} }; - 读取本地文件lib/config.js:157
const parsed = JSON.parse(readFileSync(file, 'utf8')); - 写入本地文件lib/config.js:188
mkdirSync(dirname(file), { recursive: true }); - 读取本地文件lib/config.js:189
if (existsSync(file)) { - 写入本地文件lib/config.js:191
copyFileSync(file, `${file}.bak`); - 写入本地文件lib/config.js:197
writeFileSync(file, `${JSON.stringify(next, null, 2)}\n`, 'utf8'); - 读取本地文件lib/delivery.js:34
if (!process.env.XDG_RUNTIME_DIR && uid !== undefined && existsSync(`/run/user/${uid}`)) { - 读取本地文件lib/delivery.js:39
if (existsSync(socket)) process.env.DBUS_SESSION_BUS_ADDRESS = `unix:path=${socket}`; - 执行外部命令来自配置/变量lib/delivery.js:54
execFile(
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
给 DeepSeek Harness(DSH)用的 KDE 桌面通知,外加 KDE Connect 手机提醒。
README
由 DeepSeek 最新模型翻译生成dsh-notify-kde
DSH 需要你的时候,弹一条 KDE 桌面通知,同时通过 KDE Connect 把同一条消息推到手机。
这是 pi-notify-kde 的 DSH 移植版:触发时机、文案、节流和手机重试逻辑都沿用原版,只把 pi 的事件换成了 DSH 的会话事件。
什么时候提醒
| 时机 | 默认行为 |
| 一整轮真正跑完(含子代理树全部落定) | 弹「✅ 跑完了 · 4 分 12 秒」+ 最后回复摘要 |
| 出错 / 被阻塞 / 达到 token 上限 | 弹「⚠️ 出错了」或「⏸ 停下来了」,错误不受 30 秒阈值限制 |
| 模型提问(ask_user_question)或方案待确认(exit_plan_mode) | 等 8 秒还没答才提醒,避免你正在打字时被震 |
| 工具调用等你批准 | 立即提醒「⏳ 等你批准 · Bash — 原因」 |
| 你回来打字 | 把当前会话那条桌面通知撤回 |
子代理自己的会话不单独提醒:它的完成由父会话的「树落定」统一播报,避免一个任务响很多次。
桌面通知默认 8 秒后自动消失(notify-send -t),同一会话的新通知会替换旧的(-r)。
手机收到的是 kdeconnect-cli --ping-msg:一条通知 + 震动。
展开完整文档(README 剩余 1 节)
dsh-notify-kde
DSH 需要你的时候,弹一条 KDE 桌面通知,同时通过 KDE Connect 把同一条消息推到手机。
这是 pi-notify-kde 的 DSH 移植版:触发时机、文案、节流和手机重试逻辑都沿用原版,只把 pi 的事件换成了 DSH 的会话事件。
什么时候提醒
| 时机 | 默认行为 |
| 一整轮真正跑完(含子代理树全部落定) | 弹「✅ 跑完了 · 4 分 12 秒」+ 最后回复摘要 |
| 出错 / 被阻塞 / 达到 token 上限 | 弹「⚠️ 出错了」或「⏸ 停下来了」,错误不受 30 秒阈值限制 |
| 模型提问(ask_user_question)或方案待确认(exit_plan_mode) | 等 8 秒还没答才提醒,避免你正在打字时被震 |
| 工具调用等你批准 | 立即提醒「⏳ 等你批准 · Bash — 原因」 |
| 你回来打字 | 把当前会话那条桌面通知撤回 |
子代理自己的会话不单独提醒:它的完成由父会话的「树落定」统一播报,避免一个任务响很多次。
桌面通知默认 8 秒后自动消失(notify-send -t),同一会话的新通知会替换旧的(-r)。
手机收到的是 kdeconnect-cli --ping-msg:一条通知 + 震动。KDE Connect 没有「推送任意通知」的 DBus 接口,ping 就是它的等价物。
依赖
| 依赖 | 用途 |
| Linux + KDE Plasma(有会话 DBus) | 桌面通知 |
| notify-send / gdbus(libnotify) | 弹通知 / 撤回通知 |
| kdeconnect-cli + 手机端 KDE Connect | 推手机;手机需已配对且此刻可达 |
没有 kdeconnect-cli 或手机不可达时,桌面通知照发,正文里会注明「手机未送达」。
安装
从 GitHub(无需 npm 账号)
dsh plugin --profile web add https://github.com/Ahrunda/dsh-notify-kde
桌面端:侧栏 插件 → 安装,输入:
https://github.com/Ahrunda/dsh-notify-kde
安装后重启 DSH,在任意会话里发:
/notify-kde test
桌面应弹出一条 8 秒通知,手机会同时震一下。
从 npm(如果以后发布到 npm)
dsh plugin --profile web add dsh-notify-kde
桌面端在插件页输入包名 dsh-notify-kde。
从本地目录(开发/未发布)
1. 打开 DSH 侧栏 插件 → 安装。
2. 在安装输入框里填本目录的绝对路径(例如 /path/to/DSHPlugin);如果输入框只收文件,就填打包生成的 dsh-notify-kde-0.1.1.tgz。
3. 安装后确认 notify-kde 是启用状态,然后重启 DSH。
4. 发 /notify-kde test 验证。
桌面 profile 由 Electron 应用独占管理,dsh plugin --profile desktop add ... 会被拒绝;本地路径安装要通过插件页完成。
配置
配置分两层,后者覆盖前者:
1. cordis.patch.yml 里这一行的 config(部署默认值);
2. $DSH_HOME/notify-kde.json(用户覆盖;/notify-kde on|off 只写 enabled 这一个键)。
常用键:
{
"enabled": true,
"locale": "zh",
"minDurationMs": 30000,
"uiPromptDelayMs": 8000,
"approvalDelayMs": 0,
"desktopTimeoutMs": 8000,
"kdeconnect": true,
"kdeconnectDevices": [],
"includeSnippet": true,
"snippetChars": 140,
"suppressWhenAborted": true,
"suppressSubagentSessions": true,
"ignoreAgentPresets": []
}
| 键 | 默认 | 说明 |
| minDurationMs | 30000 | 跑完提醒的最短回合时长;0 = 每次完成都提醒 |
| uiPromptDelayMs | 8000 | 提问/方案确认等多久还没答才提醒;0 = 立即 |
| approvalDelayMs | 0 | 审批等多久才提醒 |
| desktopTimeoutMs | 8000 | 桌面通知停留毫秒数;0 = 交给通知服务器决定 |
| urgency | normal | low / normal / critical;critical 不会自动消失 |
| coalesce | true | 同一会话用同一个通知 id 替换旧通知 |
| dismissOnReturn | true | 你发消息时撤回当前会话的通知 |
| includeSnippet | true | 通知正文带最后回复的首行摘要 |
| kdeconnect | true | 是否推手机 |
| kdeconnectDevices | [] | 设备 id 白名单;空 = 所有已配对且可达的设备 |
| kdeconnectRefreshWhenOffline | true | 没设备可达时让 kdeconnectd 重扫并轮询 |
| annotatePhoneFailure | true | 手机没送达时在桌面通知里注明 |
| suppressWhenAborted | true | 你按 Esc 中断的那一轮不提醒 |
| suppressSubagentSessions | true | 子代理会话不单独提醒 |
| ignoreAgentPresets | [] | 完全忽略这些 agent preset 的会话,例如 Aurabot 的 aurabot-private |
/notify-kde 命令:
| 命令 | 作用 |
| /notify-kde 或 /notify-kde status | 当前配置、DBus、上次手机投递结果 |
| /notify-kde test | 立刻发一条桌面 + 手机测试 |
| /notify-kde on / off | 总开关(写 notify-kde.json,先备份 .bak) |
让 Aurabot(QQ 大肥鱼)不提醒
Aurabot 每个 QQ 会话都跑在自己的 agent preset 上,一轮经常超过 30 秒,所以会被当成“跑完了”。
把这些 preset 加进忽略列表:
/notify-kde ignore aurabot-private aurabot-private-long aurabot-social
也可以直接跑一次性脚本(写 ~/.dsh/notify-kde.json,重启 DSH 生效):
node tools/ignore-aurabot.mjs
反过来取消:
/notify-kde unignore aurabot-private
排查
日志在 $DSH_HOME/notify-kde.log,每次投递都有一行 desktop: sent ... 或失败原因。
不经过 DSH 也能单独验证两条链路:
node tools/smoke.mjs --no-phone # 只测桌面
node tools/smoke.mjs --no-desktop # 只测手机
node tools/smoke.mjs # 两条都测
常见问题:
- 桌面没弹:确认 echo $DBUS_SESSION_BUS_ADDRESS 非空;插件会尝试从 /run/user/<uid>/bus 补上。notify-send 缺失时日志会写 notify-send failed。
- 手机没震:先 kdeconnect-cli -a --id-only 看有没有可达设备。小米/HyperOS 等省电策略会在锁屏后杀 KDE Connect,手机根本不在网络上——这只能在手机端加白名单。
- 一直不提醒:短于 30 秒的完成本来就不提醒;把 minDurationMs 设成 0,或看日志里有没有 desktop: sent。
已知限制
- 只支持 Linux/KDE;notify-send 和 kdeconnect-cli 是硬依赖。
- 不能点击通知聚焦到对应会话:Wayland 下可靠地找到并激活正确的窗口超出本插件范围。
- ping 是「通知 + 震动」,不是可交互通知;手机上不能直接批准或回答。
- includeSnippet: true 会把最后回复的首行送到手机锁屏;敏感场景请关掉。
从 pi-notify-kde 的映射
| pi 事件 | DSH 事件 |
| agent_settled | turn/end + 子代理树计数 |
| ui_prompt_start | tool/call 且工具名是 ask_user_question / exit_plan_mode |
| 审批 | approval/asked / approval/decided |
| 用户输入 | user/message(source.kind === 'user') |
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Ahrunda/dsh-notify-kde
任务完成或需要你操作时,弹桌面通知并推送到手机
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,125已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,465已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,457已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,710已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,378已汉化DSH
70.2
这是你的仓库?认领条目