# dsh-notify

[English](README.md) | 中文

DSH（DeepSeek Harness）事件通知插件：**任务干完、执行出错、等你审批**时，自动推消息到**钉钉 / 企业微信 / 飞书**的群机器人。

合上笔记本让 DSH 挂着跑任务，人离开电脑也不怕——关键节点都会推到你手机上。

## 支持的事件

| 事件 | 通知内容 | 说明 |
|---|---|---|
| `agent/status`（running → idle） | ✅ 任务完成 | 首次见面就是 idle（如刚启动）不打扰 |
| `agent/error` | ❌ 执行出错（含第几轮第几步、错误摘要） | |
| `approval/request` | ⚠️ 等待审批（哪个工具、什么原因） | 只提醒、**不拦截**审批决策 |

内置防刷屏：同一 agent 同一类事件默认 30 秒内只发一条（`throttleSeconds` 可调）。

## 安装

```sh
dsh plugin --profile web add dsh-notify
```

包内声明了 `dsh.bundle`，**装完自动挂载，无需手动 insert**。然后只需在 `~/.dsh/profiles/web/cordis.patch.yml`（Windows：`C:\Users\<你>\.dsh\...`）按 id 覆盖配置，填入你的 webhook：

```yaml
- id: dsh-notify
  config:
    channels:
      # 三选一或多选，配几个通道就推几个
      - type: wecom
        webhook: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key
      - type: dingtalk
        webhook: https://oapi.dingtalk.com/robot/send?access_token=你的token
        secret: SEC你的加签密钥      # 钉钉机器人开了"加签"才需要
      - type: feishu
        webhook: https://open.feishu.cn/open-apis/bot/v2/hook/你的hook
        secret: 你的签名校验密钥      # 飞书开了"签名校验"才需要
    onIdle: true        # 任务完成通知
    onError: true       # 出错通知
    onApproval: true    # 待审批通知
    throttleSeconds: 30 # 防刷屏间隔
```

## 获取 webhook

- **企业微信**：群聊 → 右上角 → 群机器人 → 添加 → 复制 webhook
- **钉钉**：群设置 → 智能群助手 → 添加机器人 → 自定义（安全设置选"加签"）
- **飞书**：群设置 → 群机器人 → 添加机器人 → 自定义机器人（可开"签名校验"）

## 开发与测试

```sh
npm install
npm test      # vitest，16 个用例
npm run build # tsc → lib/
```

## 注意

- webhook 地址相当于密码，**不要提交进公开仓库**；建议把 `cordis.patch.yml` 留在本机用户层，不要同步到公共 dotfiles。
- 通知发送失败只记日志，绝不影响 agent 主流程。
- 本插件只读事件、发 HTTP POST，不接触你的会话内容正文（仅 agent 标识 / 工具名 / 错误摘要）。

## License

[MIT](LICENSE)
