Multi-channel push for DeepSeek Harness: Server酱, PushPlus, Bark, DingTalk, WeCom, Telegram, Feishu, ntfy, custom webhooks and more, configurable from the settings panel and callable by other plugins via the pushNotifier service.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:534119219/chicheng-push
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
This plugin publishes its README in Chinese only.
dsh 消息推送插件:在 Web 设置界面左侧栏新增 「推送插件」 入口,可配置管理多个推送渠道;同时把推送能力以 pushNotifier 服务(host 侧)和 /push/api/send HTTP 接口暴露给其他插件,例如定时执行插件在任务完成后调用推送。
界面语言:中文 / English UI 均支持(locale 字典随浏览器语言切换)。
截图
| 设置入口 — 设置界面左侧栏的「推送插件」入口 | 渠道列表 — 启用/停用、测试、编辑、删除 | 添加 / 编辑渠道 — 按类型动态表单,必填项标 * |
目录
渠道实现参考 whyour/qinglong 的 notify 目录,默认支持:
| 渠道 | 类型 id | 说明 |
|---|---|---|
| Server酱 | serverChan |
sctapi / sctp 多通道 |
| PushPlus | pushPlus |
支持群组与渠道 |
| Bark | bark |
iOS 推送 |
| 钉钉机器人 | dingtalkBot |
支持加签 |
| 企业微信群机器人 | weWorkBot |
群 Webhook |
| 企业微信应用消息 | weWorkApp |
corpid,corpsecret,touser,agentid |
| Telegram Bot | telegramBot |
支持自建 API 域名 |
| 飞书 / Lark 机器人 | lark |
支持加签 |
| ntfy | ntfy |
支持自建实例与鉴权 |
| iGot | iGot |
聚合推送 |
| PushDeer | pushDeer |
支持自建 |
| Gotify | gotify |
自部署 |
| 自定义 Webhook | webhook |
$title / $content 变量 |
| 邮件(SMTP) | email |
需要环境可动态加载 nodemailer |
结构
chicheng-push/
├── package.json # dsh.bundle / dsh.client 声明
├── cordis.patch.yml # 插入 profile 层
├── lib/
│ ├── index.js # host 半:渠道存储 + 推送实现 + /push/api/* + pushNotifier 服务
│ └── client.js # client 半:设置界面「推送插件」页
├── assets/ # 界面截图
├── docs/ # 补充文档(面板图标补丁等)
├── examples/ # 集成示例(定时任务插件)
├── smoke.mjs # 集成测试
└── README.md
安装
方式 A:npm 发布包(推荐,预构建免 allowBuilds)
插件发布到 npm 后:
dsh plugin --profile web add chicheng-push
npm 安装的预构建产物会跳过 pnpm 的 allowBuilds 构建授权,一条命令装好。
方式 B:本地打包 / 本地路径
在插件目录内打包安装:
cd D:\Harness\chicheng-push
npm pack
dsh plugin --profile web add chicheng-push-0.1.0.tgz
或者直接以本地路径安装:
dsh plugin --profile web add D:\Harness\chicheng-push
确认 profile 清单
无论哪种方式,确认 profile 清单已包含本插件:编辑
C:\Users\TJ\.dsh\profiles\web\package.json,在 dsh.profile.bundles 数组中
加入 "chicheng-push"(dsh plugin add 会同步 dependencies;若未自动加入
bundles,手动补一行):
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-better-sidebar",
"chicheng-gate",
"dshmarket",
"dsh-cron-scheduler",
"chicheng-push"
]
}
}
- 手动重启 dsh web 服务,插件生效。
使用
重启后打开 设置 → 推送插件:
- 添加渠道:选择类型 → 填写字段(必填项标
*)→ 保存;可添加任意多个渠道。 - 测试:对单个渠道发送一条测试消息(真实推送,可验证配置)。
- 启用/停用:停用的渠道不会出现在「发送到全部渠道」中。
- 编辑 / 删除:管理已有渠道。
渠道数据持久化在 $DSH_HOME/push/channels.json(默认 C:\Users\TJ\.dsh\push\channels.json)。
其他插件如何调用
方式一:host 侧 pushNotifier 服务(进程内,推荐)
chicheng-push 在 host 侧注册了名为 pushNotifier 的 cordis 服务。其他 host 插件(如
定时执行插件)在 apply(ctx) 中直接读取即可:
// 定时任务插件 lib/index.js —— 任务执行完成后推送结果
const push = ctx.get("pushNotifier");
if (push) {
const result = await push.send({
title: `任务「${task.name}」执行完成`,
content: `状态:${record.status}(exit ${record.exitCode})\n耗时:${record.durationMs}ms `,
channels: "all", // 省略或 "all" = 全部启用渠道;也可传渠道 id/name 数组
});
console.log(`[cron] 推送结果 ok=${result.ok} sent=${result.sent}/${result.total}`);
}
服务 API:
push.list() // -> channels
push.types() // -> 渠道类型定义(字段 schema)
push.send({ title, content, channels }) // -> { ok, total, sent, results[] }
push.sendText(title, content, channels) // 便捷重载
push.test(id) // 发送测试消息到指定渠道
send 返回 { ok, total, sent, results },results 是每个渠道的
{ id, name, type, ok, message | error }。
方式二:HTTP 接口 /push/api/send(进程外 / 脚本 / agent)
任意位置(同源或受信 host)POST JSON:
curl -X POST http://127.0.0.1:3080/push/api/send \
-H "content-type: application/json" \
-d '{"title":"定时任务完成","content":"exit 0","channels":"all"}'
响应:{ "ok": true, "total": 2, "sent": 2, "results": [...] }
接口列表(全部 POST,fenced:仅同源 / loopback / 受信 host):
| 方法 | 请求体 | 说明 |
|---|---|---|
list |
{} |
渠道列表 |
types |
{} |
渠道类型定义(表单 schema) |
save |
{ channel } |
新增或更新(带 id 为更新) |
remove |
{ id } |
删除 |
toggle |
{ id, enabled } |
启用/停用 |
test |
{ id } |
测试消息 |
send |
{ title, content, channels? } |
发送(channels 省略 = 全部启用) |
在定时执行插件中的集成示例
以 dsh-cron-scheduler 为例:任务 run 落定后通过
pushNotifier 服务推送结果。完整示例与参数说明见
examples/cron-integration.md,核心片段:
// executeRun 的 finalize 之后
const push = ctx.get("pushNotifier");
if (push) {
await push.send({
title: `定时任务「${task.name}」完成`,
content: [
`状态:${record.status}(exit ${record.exitCode ?? "-"})`,
`耗时:${record.durationMs ?? "-"} ms`,
`开始:${record.startedAt}`,
].join("\n"),
}).catch((error) => console.warn("[cron] push failed:", error));
}
设置面板图标补丁(官方 shell)
设置面板左侧栏的「推送插件」图标默认回退为设置齿轮——要让它与主侧栏
「消息平台」的聊天气泡图标一致,需要给官方 shell 的 navIcon() 打一个补丁
(settings.section slot 契约不支持自定义图标)。补丁内容、目标文件、升级后
恢复步骤见 docs/panel-icon-patch.md。
开发说明
- host 半为零第三方运行时依赖(HTTP 渠道使用 Node 内置
fetch);email 渠道仅在配置且 可动态加载nodemailer时使用。 - 修改
lib/index.js后需重启生效;修改lib/client.js后刷新页面即可(bundle 由/plugins/chicheng-push/client.js?rev=<hash>提供)。 - 集成测试:
node smoke.mjs(19 项断言,含真实 HTTP 发送链路)。
安全
- 渠道配置(含 SendKey / Token / 授权码)明文存储在
$DSH_HOME/push/channels.json, 请确保该目录仅当前用户可读写;详见 SECURITY.md。 /push/api/*接口有 fence 保护(仅同源 / loopback / 受信 host)。
License
Links
More in this category
xmanrui/dsh-im★ 1569
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 1443
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 585
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
omdsh-dev/dsh-notification★ 86
Desktop notifications for turn completions, with per-outcome controls and keyword rules.
whyihaveyou/dsh-suite#plugin-notify★ 56
IM webhook and local notifications on turn completion, errors, or approval (Feishu/WeCom/DingTalk/Slack/Discord/custom).
omdsh-dev/dsh-lark★ 55
Lark/Feishu bot channel for DeepSeek Harness: each chat drives its own agent, and tool approvals, model questions, and plan reviews return as cards answered by a button or a reply. Switch workspace and model from the chat (`/cd`, `/model`, `/new`), and run several bots that keep separate sessions and can hand turns to each other in one group.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.