ztl0001/dsh-notify ↗★ 1

dsh-notify

任务结束时发送Windows系统原生通知 适合在后台运行DSH任务,需要通过系统弹窗和提示音获知任务状态与回复摘要的用户。

包名
dsh-notify
兼容性
待验证
Cordis 依赖范围
^4.0.1
版本
0.1.0
许可证
MIT
最近更新
2026年10月15日

同名包的其他仓库

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ztl0001/dsh-notify

配置项

项默认说明
enabledtrue总开关。关掉后插件照常加载,但一条通知都不发。
notifyOnevery-turnevery-turn:每个回合结束通知一次,但挂了目标的会话只在整个目标结束时通知;attention:只在 agent 停下来等人时通知;never:从不通知。
onlyMainSessionstrue不通知子代理(subagent)会话。
settleDelayMs400agent 进入空闲后再等这么久(毫秒)才发,用来把紧接着继续的几个回合合并成一条。
includeSummarytrue带上会话标题和最后一条回复的摘要。
includeCwdfalse附带工作目录,便于区分同时跑的多个会话。
summaryLimit220正文最大字符数。
soundkindkind:按结果自动选(完成用 Default,出错用 Reminder);silent:静音;也可以填具体的 WinRT 提示音名(Reminder/IM/Mail/SMS/Alarm…)。
appId空可选的 AppUserModelID(例如某个应用快捷方式的 AUMID)。留空时按 DSH_APP_USER_MODEL_ID 环境变量 → Windows PowerShell 的顺序回退。
debugfalse把每一次决策写进宿主日志(收到哪个回合结束、为什么没通知)。排查「该弹没弹」时打开它。

触发点为什么是 turn/end 而不是 idle

第一版把延迟调度放在 agent/status → idle 上,并要求 turn/end 已经先到。这在真实宿主里静默失效了:宿主先报 idle、后提交 turn end,于是 idle 那一刻还没有待发内容,通知永远不会被安排——没有报错,也没有任何东西可看。

现在调度只发生在 turn/end(它才是定义结果的那个事件),idle 只做过滤:

  • turn/end → 记录结果 + 安排延迟通知
  • running → 取消待发通知(新的工作取代了它,任务还在跑就不能报「已完成」)
  • 延迟窗口内又来了 turn/end → 重新计时(把连续回合合并成一条)

这样两个事件的先后顺序不再影响正确性,test/plugin.test.js 里有两条测试专门钉住这件事(含「宿主从不报 idle」的情形)。