dsh-gotify-notify
DSH会话轮次结束时发送Gotify通知的插件 适合需要在任务完成或异常结束时,通过Gotify接收实时推送通知的用户。
安裝
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:AhYi8/dsh-gotify-notify說明文件
閱讀完整 README ↗配置
打开 设置 → 插件 → 找到 dsh-gotify-notify → 配置(插件管理页的行内配置卡)。
| 字段 | 说明 | 默认 |
|---|---|---|
url | Gotify 服务器地址,必须以 http:// 或 https:// 开头 | https://gotify.21zys.com |
user | Gotify 用户名(用于自动创建/复用名为 DSH 的应用并换取 token);留空则读启动环境变量 GOTIFY_USER | 空 |
passwordEnv | 口令的凭据引用名:口令存在凭据库的哪个名字下(同时是环境变量名) | GOTIFY_PASSWORD |
token | 直接指定应用 token,填了就不再需要账号密码 | 空 |
titleCompleted | 正常结束时的通知标题模板 | DSH 任务完成 |
titleOther | 非正常结束时的标题模板 | DSH 轮次结束({reason}) |
message | 通知正文模板 | 见下 |
priority | 优先级,0–10 的整数 | 5 |
notifyOnErrorOnly | 只在非正常结束时通知 | 关 |
includeSubagents | 连子 Agent 的轮次结束也通知 | 关 |
凭据
口令不写进配置文件。插件管理页里的口令控件走
ctx.remote.credentials.set(ref, value) 把值写进 DSH 的凭据库
($DSH_HOME/.credentials.yaml,与模型 API Key 同一个库),配置文件里只留下
passwordEnv 这个引用名。是否已配置由 describe() 回读判定 —— 值永不回传。
插件求值时按下面的顺序找口令,前一条拿到就用前一条:
- 凭据域按
passwordEnv(默认GOTIFY_PASSWORD)解析 —— 凭据库与启动环境都走这一条; - 凭据域缺席、拒绝解析、或未命中该引用时,直接读启动环境里与
passwordEnv同名的变量。
凭据域是软探测的:profile 没组合凭据服务时插件照常工作,直接从启动环境读, 不会因为缺一个服务就起不来。
默认正文:
会话 {title} 第 {turn} 轮已结束
结果:{reason}
目录:{cwd}
时间:{time}
模板里的换行怎么写? 设置面板是单行输入框,换行请写成两个字符
\n,插件会还原成真正的换行。
{reason} 输出中文标签,{reasonRaw} 输出 DSH 的原始标识:
| 原始标识 | {reason} |
|---|---|
completed | 成功 |
error | 失败 |
aborted | 已中止 |
interrupted | 已中断 |
blocked | 被阻断 |
max-tokens | 超出长度上限 |
forked | 分支继承 |
turn/end 的原因集合在 DSH 里是可扩展的(TurnEndReasonMap 允许后端新增取值),未收录的标识会原样显示,不会编造中文。
{error} 只在 error 结束时才有内容:它取自 DSH 的失败快照 reason.error(@deepseek-ai/dsh-llm 的 LlmFailure,含非空的 message 与 code),优先用 message,消息为空时回落到 code;其余结束原因渲染成空串,所以像 结果:{reason}\n{error} 这样的正文在成功时是干净的,不会残留 {error} 字面量。
配置保存在当前 profile 的 cordis.patch.yml 中,由 DSH 的配置编辑器自动维护;本包的 cordis.patch.yml 不预置 config:,避免出现两份互相覆盖的配置。