Bundle
dsh-tui-webhook
IM bot notifications for dsh-TUI: push long-turn completion and approval requests to a 飞书/钉钉/企业微信/generic webhook, configured in /settings (webhook namespace), status via /webhook.
- Source
- FUSU123fusu
- License
- MIT
- Updated
- Updated 7 days ago
Readme
# dsh-tui-webhook
> 适用于 [dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI)([dshtui.com](https://dshtui.com))的社区插件。
把 dsh-TUI 的关键事件推送到 IM 机器人(飞书 / 钉钉 / 企业微信 / 任意通用 webhook):长轮次完成、审批请求——人离开电脑也能收到提醒。
[English](#english) below.
## 用法
```
/webhook " 查看配置状态(平台、URL 掩码、开关)
/webhook test " 发送一条测试消息,回报 HTTP 状态
```
配置在 `/settings` →「Webhook 通知」,保存后立即生效,无需重启。
| 设置 | 说明 | 默认 |
| --- | --- | --- |
| `platform` | `feishu` / `dingtalk` / `wecom` / `generic` | `feishu` |
| `url` | 机器人 webhook 地址 | 空 |
| `secret` | 加签密钥(仅飞书/钉钉 HMAC-SHA256;企业微信、generic 忽略) | 空 |
| `minTurnSeconds` | 轮次完成通知的最短时长(秒),0 = 每轮都推 | `30` |
| `notifyTurnEnd` | 轮次完成时推送(`✅ 任务完成 · 用时 … · 第 N 轮`) | 开 |
| `notifyApproval` | 工具审批请求时推送(`⚠️ 需要审批 · <工具/原因>`) | 开 |
只统计顶层会话的轮次(子 agent 不重复推送);`approval/asked` 的摘要取 `toolName` 与 `reason`,尽力而为、绝不因异常负载报错。
## 创建机器人
- 飞书:群设置 → 群机器人 → 自定义机器人,复制 webhook;开启「签名校验」则把密钥填入 `secret`。[官方文档](https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot)
- 钉钉:群设置 → 机器人 → 自定义,复制 webhook;安全设置选「加签」则把密钥填入 `secret`。[官方文档](https://open.dingtalk.com/document/orgapp/custom-robot-access)
- 企业微信:群设置 → 群机器人 → 添加,复制 webhook 即可(不支持加签)。[官方文档](https://developer.work.weixin.qq.com/document/path/91770)
- generic:任意接收 `POST {"text":"..."}` 的 HTTP 端点。
## 隐私
URL 与加签密钥保存在本机 dsh settings 文档中(`webhook` 命名空间),不上传任何第三方;`/webhook` 状态只显示 URL 前 30 个字符。
## 安装
暂未发布到 npm,从源码打包安装:
```bash
git clone https://github.com/FUSU123fusu/dsh-tui-webhook.git
cd dsh-tui-webhook
npm pack
dsh plugin --profile <你的profile> add file:dsh-tui-webhook-0.1.0.tgz
```
## 开发
```
node --test " 单元测试(载荷构造、两种加签算法、时长格式化、防刷屏门槛、清单校验)
```
---
## English
Pushes dsh-TUI events to IM bot webhooks (Feishu / DingTalk / WeCom / generic): long-turn completion and approval requests, so you know while away from the computer.
- `/webhook` shows the status (platform, masked URL, toggles); `/webhook test` sends a test message and reports the HTTP status.
- Configure under `/settings` → "Webhook 通知"; changes apply live, no restart.
- Payloads: Feishu `{"msg_type":"text",…}` (optional timestamp+sign: base64 HMAC-SHA256 of the empty message keyed with `${ts}\n${secret}`), DingTalk `{"msgtype":"text",…}` (sign rides the URL), WeCom `{"msgtype":"text",…}`, generic `{"text":"…"}`.
- Only top-level sessions are tracked; turn-end pushes are gated by `minTurnSeconds` (default 30s, 0 = every turn).
- Privacy: the URL and secret live in the local dsh settings document; status output masks the URL to its first 30 chars.
MIT
Install
dsh plugin --profile web add github:FUSU123fusu/dsh-tui-webhook#a934b3148584afcb8592ef38b81f413472ec7909
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-tui-webhook from the hub