SingleOne/dsh-notify-center0

dsh-notify-center

Unified native desktop and webhook notifications for DeepSeek Harness.

包名
dsh-notify-center
版本
0.2.1
许可证
MIT
最近更新
2026年8月16日

安装

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

配置

推荐通过 DSH Web UI 的“通知中心”页面配置。也可以在 ~/.dsh/profiles/web/cordis.patch.yml 中为插件行添加 config 作为组合基础值;可视化页面保存的用户层设置会覆盖基础值:

- id: dsh-notify-center
  config:
    locale: zh
    notifySubagents: false

    events:
      completed: true
      error: true
      aborted: false
      blocked: true
      maxTokens: true
      interrupted: true
      approval: true

    local:
      enabled: true
      sound: true

    rules:
      - mode: exclude
        pattern: 测试
        regex: false
        caseSensitive: false
      - mode: include
        pattern: '部署|发布'
        regex: true
        caseSensitive: false

    webhooks:
      feishu:
        url: 'https://open.feishu.cn/open-apis/bot/v2/hook/REPLACE_ME'
        events: [completed, error, approval]
        includeSummary: false
      custom:
        url: 'https://example.com/dsh-hook'
        events: [completed, error]
        includeSummary: true

    delivery:
      timeoutMs: 5000
      retries: 2
      retryBaseMs: 500
      maxBodyChars: 400

Webhook 也可简写为 URL,此时启用所有事件并默认隐藏摘要:

webhooks:
  slack: 'https://hooks.slack.com/services/REPLACE_ME'

旧版 URL 简写在载入配置基础层时会自动归一化为对象形式,后续从设置页修改事件范围不会丢失基础层 URL。

页面保存的用户层位于 $DSH_HOME/dsh-notify-center/settings.json;未设置 DSH_HOME 时使用 ~/.dsh/dsh-notify-center/settings.json。插件使用 revision 防止多个页面互相覆盖,并通过同目录临时文件原子替换。该文件由插件维护,不建议手工编辑。

桌面桥接

桌面 App 启动 DSH 子进程时可注入以下临时环境变量:

  • DSH_NOTIFY_BRIDGE_URL:仅接受 http://127.0.0.1:/...
  • DSH_NOTIFY_BRIDGE_TOKEN:每次 App 启动生成的高强度临时令牌。

插件以 Bearer Token 向桥接发送已经本地化的通知标题、正文和会话定位信息。URL 与令牌不会写入插件日志;任一变量缺失、端点不是回环地址、认证失败或请求超时都会禁用桥接或回退到系统原生通知。Webhook 通知始终由插件直接投递,不经过桌面 App。

用户点击桌面 App 展示的通知后,App 会在 DSH Web 页面派发版本化的 dsh-notify-center:activate-session 事件。插件客户端严格校验 { version: 1, sessionId, turn? },确认目标是已列出或已寻址的会话后,通过 DSH Client Runtime 的 sessions.open() 完成定位。桌面 App 不读取或操作 DSH 会话列表 DOM。

规则语义

  • 任意排除规则命中时不通知。
  • 存在包含规则时,必须至少命中一条才通知。
  • 匹配内容为会话标题、本轮回复摘要、结束原因和工具名称。
  • 正则表达式在插件加载时验证;无效正则会阻止插件带着错误配置启动。

自定义 Webhook

自定义通道接收 JSON:

{
  "text": "【DSH 任务完成】会话标题\n耗时:2 秒\n会话:session-1",
  "kind": "completed",
  "title": "会话标题",
  "sessionId": "session-1",
  "turn": 2,
  "durationMs": 2000,
  "time": "2026-08-16T00:00:00.000Z"
}