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

KDE 通知推送 Ahrunda/dsh-notify-kde

DeepSeek Harness
Ahrunda3 天前有提交已提供中文文档扫描:含敏感能力

任务完成或需要你操作时,弹桌面通知并推送到手机

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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

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

任务完成或需要你操作时,弹桌面通知并推送到手机

这是你的仓库?认领条目

回到顶部