dsh-messager
DeepSeek Harness 通知插件,支持在会话交互、任务完成或出错时,通过系统通知、浏览器通知及飞书、企业微信、Discord、钉钉、Telegram 进行推送提醒。
AI 分析
核心用途是实现异步任务的实时通知。适合运行长时间任务、需要离开屏幕并希望在任务结束或出错时通过即时通讯软件接收提醒的用户。
安裝
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ly6170/dsh-messager說明文件
閱讀完整 README ↗配置
配置优先级:schema 默认值 → base(该插件行的 config:)→ 用户层(Web 设置页)。
host 端把 Loader config 注册为 settings 命名空间 messager 的 base 层,因此:
- base 的写法按使用方式不同:dev 调试写在
cordis.yml(patch 覆盖层)里该行的config:;正式安装写在 profile 的cordis.patch.yml里按id: messager覆盖该行,或直接改 bundle 包内的cordis.patch.yml; - 用户层三处入口,同源不冲突、任一处变更均实时生效(host 端
watch重建通道; client 端经settings/document-updated失效重拉):- 设置页分区:设置 →「通知&信使」分区(完整字段表单,所有环境可用);
- 设置文档:直接编辑
$DSH_HOME/settings.yaml的messager:段(完整字段, 含 dedup 节流等表单未展示的项); - RPC:settings.describe / settings.mutate(host 侧可用;Web 端白名单不影响本插件 的分区,因为分区走插件自己的配置路由)。
配置读写链路:设置分区 →
GET/POST /dsh-messager/config(webServer 路由,同源校验) → host 端settings服务(describe 脱敏视图 / mutate 逐字段 ops)→ settings.yaml。 写后settings/document-updated事件(DSH 内置转发)驱动前端刷新。🌐 国际化:分区菜单与表单文案随 DSH 设置的语言切换(中文 / English), 字典注册在
ctx.locale(zh/en 键集一致,缺失键 fail loud 显示键名)。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
triggers.interaction | boolean | true | 需要交互时通知(审批/提问/计划待审) |
triggers.completed | boolean | true | 任务完成时通知 |
triggers.error | boolean | true | 任务出错时通知 |
system.enabled | boolean | true | 系统通知通道 |
system.icon | string | - | 图标绝对路径(node-notifier 需要文件路径,且该文件必须存在) |
system.verbosity | minimal|normal|detailed | normal | 系统通知内容繁复度 |
browser.enabled | boolean | true | 浏览器通知通道 |
browser.icon | string | - | 图标 URL 或 data URL |
browser.onlyWhenHidden | boolean | true | 仅页面隐藏/未聚焦时弹(看着界面不打扰) |
browser.verbosity | minimal|normal|detailed | normal | 浏览器通知内容繁复度 |
feishu.enabled | boolean | false | 飞书机器人(webhook)通道 |
feishu.webhookUrl | string | - | 自定义机器人 webhook 地址 |
feishu.secret | string(secret) | - | 签名密钥(机器人「安全设置-签名校验」) |
feishu.timeoutMs | number | 5000 | 单次请求超时 |
feishu.verbosity | minimal|normal|detailed | normal | 卡片内容繁复度 |
wecom.enabled | boolean | false | 企业微信群机器人(webhook)通道 |
wecom.webhookUrl | string | - | 群机器人 webhook 地址(含 ?key=) |
wecom.secret | string(secret) | - | 加签密钥(「安全设置-加签」,HMAC-SHA256,无需 URL 编码) |
wecom.timeoutMs | number | 5000 | 单次请求超时 |
wecom.verbosity | minimal|normal|detailed | normal | 消息内容繁复度 |
discord.enabled | boolean | false | Discord 通道(webhook) |
discord.webhookUrl | string | - | Discord webhook 地址(.../api/webhooks//) |
discord.timeoutMs | number | 5000 | 单次请求超时 |
discord.verbosity | minimal|normal|detailed | normal | embed 内容繁复度 |
dingtalk.enabled | boolean | false | 钉钉自定义机器人(webhook)通道 |
dingtalk.webhookUrl | string | - | 自定义机器人 webhook 地址(含 ?access_token=) |
dingtalk.secret | string(secret) | - | 加签密钥(「安全设置-加签」,HMAC-SHA256 + URL 编码) |
dingtalk.timeoutMs | number | 5000 | 单次请求超时 |
dingtalk.verbosity | minimal|normal|detailed | normal | 卡片内容繁复度 |
telegram.enabled | boolean | false | Telegram 通道(Bot API) |
telegram.botToken | string(secret) | - | Bot Token(@BotFather 获取) |
telegram.chatId | string | - | 接收 chat_id(数字 ID 或 @频道用户名) |
telegram.timeoutMs | number | 5000 | 单次请求超时 |
telegram.verbosity | minimal|normal|detailed | normal | 消息内容繁复度 |
dedup.interactionCooldownMs | number | 10000 | 同会话同触发冷却(也用于跨标签去重窗口) |
dedup.completedDebounceMs | number | 1000 | 完成通知防抖(等待 turn/end 原因、合并边界) |
dedup.perChannelPerMinute | number | 20 | 每通道每分钟上限(防第三方限流/刷屏) |
message.titlePrefix | string | - | 标题前缀,如 [DSH] |
message.includeSessionTitle | boolean | true | 正文附带会话标题 |
message.guiUrl | string | http://127.0.0.1:3080 | 通知「打开」链接/按钮目标 |
内容繁复度:minimal 只有标题;normal 增加会话标题/工具名/结束原因/错误摘要;
detailed 再增加 turn/step、审批原因与 GUI 链接。