dsh-notify
任务监控通知插件,多种触发经 webhook、agent、MCP 与语音推送 适合需在任务结束或待确认时收到提醒的用户;需配置推送通道与触发条件
同名包的其他仓库
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ikashana/dsh-notify说明文档
阅读完整 README ↗Configuration table (defaults = code DEFAULTS; Config validated with schemastery; all keys optional)
| Key | Default | Meaning |
|---|---|---|
turnEnd.reasons | [completed, error, blocked, max-tokens] | trigger whitelist; explicit [] disables this trigger |
turnEnd.cooldownMs | 10000 | quiet window after turn end (ms); a new turn inside it cancels |
turnEnd.includeText | false | body preview switch (recent assistant text) |
turnEnd.textMaxChars | 500 | body truncation length |
confirmation.approval | true | approval/asked notification switch |
confirmation.askUserQuestion | 'auto' | 'auto'/'on'/'off': auto = only with a web layer |
confirmation.timeoutMs | 600000 | escalation threshold, 0 disables |
confirmation.notifyDecided | false | send “confirmed” after resolution signals |
confirmation.includeQuestion | true | include the question summary (no option details) |
confirmation.questionMaxChars | 120 | question summary truncation |
rootOnly | true | notify root sessions only (origin/delegationDepth check) |
http.timeoutMs | 10000 | HTTP request timeout |
http.retries | 2 | per-channel retry count |
http.retryBaseMs | 500 | exponential backoff base (500, 1000, 2000…) |
http.channels | [] | HTTP channel list, see below |
a2a.timeoutMs / a2a.retries / a2a.retryBaseMs | same as http | A2A global defaults |
a2a.channels | [] | A2A channel list: { id, agentUrl, template?, fallback? } |
mcp.timeoutMs / mcp.retries / mcp.retryBaseMs | same as http | MCP global defaults |
mcp.channels | [] | MCP channel list: { id, url, tool, arguments?, headers?, fallback? } |
tools.notify.enabled | false | notify tool switch (model-initiated notifications) |
sapi.enabled | false | voice switch (Windows only) |
sapi.template | '任务通知:{{title}},状态:{{reason}}。' | speech template |
sapi.voice | 'auto' | 'auto' = auto zh-CN; or a voice-name match (e.g. 'Huihui') |
sapi.queue | 'merge' | at most 1 Speak at a time: merge keeps latest / drop discards |
escalation.sapi | true | escalation includes voice (requires sapi.enabled) |
escalation.channelIds | [] | high-priority channel ids for escalation (any channel type) |
queue.concurrency | 2 | send concurrency cap |
queue.flushTimeoutMs | 2000 | dispose flush wait cap |
Each http.channels entry: { id, url, method='POST', headers={}, body, timeoutMs, retries, retryBaseMs, fallback: [backup channel ids] }. Object/array body values are JSON-serialized automatically. fallback on a2a.channels/mcp.channels shares the same failover chain and can reference any configured channel id.