前言¶
DSH 自带的「自动化任务」按时间触发,也就是每天、每周、cron 或固定间隔。实际使用时,更常见的需求是「因为发生了什么而触发」:宿主启动了、会话开始或空闲了、用户发来一条消息、某个工具执行结束,内置能力覆盖不到这些时机。
dsh-automations 就是用来补这一半的插件。它由 439436269-ctrl 维护,面向 DeepSeek Harness,归类为「工作流」。插件在左侧栏新增「生命周期自动化」(英文界面为「Automations」)入口,打开就是规则管理页:可以建规则、启停、立即运行、查看最近运行输出;同一批规则也能由模型通过工具读写。
下面介绍它的触发时机、动作、面板、模型工具,以及安装和验证方式。
触发时机¶
插件提供九种 trigger,覆盖时间与事件两类:
| 类型 | 什么时候触发 | 参数 |
|---|---|---|
| startup | 宿主进程启动后一次(热重载不会重复) | delayMs |
| session-start | 会话建立 / 恢复 / 清空 / 压缩后 | source:any / startup / resume / clear / compact |
| session-idle | 会话超过 N 秒无新事件 | idleSeconds(≥30) |
| session-end | 会话被释放,或 DSH 退出 | — |
| user-message | 用户发来消息 | mode:any / first-of-session / first-of-day;match 子串过滤 |
| tool-after | 任意工具执行完成 | tool(* 为全部);when:always / success / error |
| daily | 本地时间每天 HH:MM | time、weekdays(1=周一…7=周日,空=每天) |
| interval | 每隔 N 分钟 | minutes(1–1440) |
| manual | 只在面板或工具里点「运行」 | — |
几个实测过的语义细节:一条用户消息会产生多条 user/message 事件(消息本体加上下文),插件按 turn 去重,一条消息只触发一次;daily 错过窗口后会在启动后补跑一次(窗口 4 小时),更早的不再补;interval 的计时从规则首次被看到时开始,持久化在 meta.json,重启后继续;session-end 在 DSH 正常退出时也会触发,此时动作可能来不及写盘,长命令不要挂在这里;startup 的「一次」按进程算,HMR 重载不会重复执行。
动作¶
动作分三种,覆盖本机命令、网络请求和调试记录:
| 类型 | 做什么 | 说明 |
|---|---|---|
| shell | 起一个非交互子进程 | command、cwd、shell(auto / powershell / cmd / bash)、timeoutMs;捕获 stdout+stderr 尾部与退出码,超时杀掉整个进程树 |
| http | 发一个 HTTP 请求 | url、method、headers(JSON 对象字符串)、body、timeoutMs |
| log | 只写一条运行记录 | 无副作用,用来验证时机是否命中 |
注意 shell 动作的 cwd 留空等于 defaultCwd(默认用户主目录)。shell 会拿到一组环境变量,脚本里可以直接引用:
DSH_AUTOMATION_RULE_ID 规则 id
DSH_AUTOMATION_RULE_NAME 规则名
DSH_AUTOMATION_TRIGGER 触发类型
DSH_AUTOMATION_SESSION_ID 触发时的会话(可能为空)
DSH_AUTOMATION_TOOL 触发时的工具名(tool-after)
DSH_AUTOMATION_CONTEXT 一行 JSON(kind/sessionId/tool/source/at)
面板¶
左栏图标进入主区页面,分统计条加「规则 / 运行」两个 tab。规则 tab 用规则卡片管理启停、运行、编辑、删除,空面板时给三个模板:启动写日志、每天 08:30 探活、会话空闲记录。运行 tab 是完整运行历史(时间 / 规则 / 触发类型 / 状态 / 耗时),点一行展开输出,展开头部带触发与退出码。tab 选择记在 localStorage,刷新后停在上次那个 tab。
「新建规则」用同一份 catalog 动态生成表单:选触发时机后只出现相关字段,换动作同理;shell 规则的工作目录会预填默认路径。「试运行」不保存也能执行一次,便于调命令。界面文案跟随 DSH 的语言(中文 / English)。
给模型的工具¶
插件注册了五个工具,模型可以直接读写规则:
| 工具 | 用途 |
|---|---|
| automation_list | 列出规则(含触发/动作摘要、上次状态) |
| automation_save | 新建或按 id 更新规则;triggerType + trigger 字段包,actionType + action 字段包 |
| automation_run | 立即执行并返回输出 / 退出码 |
| automation_remove | 删除规则 |
| automation_runs | 查看最近运行,可只查一条规则 |
系统提示里加了一段短说明,所以用户说「每次 DSH 启动时帮我把 X 起起来」「每天 8:30 提醒我」时,模型会建规则,而不是每次手动执行。
存储与配置¶
规则和调度状态落在本地目录:
$DSH_HOME/storages/dsh-automations/
rules.json 规则(原子写,损坏时另存 .broken-<ts> 并从空开始)
runs.json 最近运行(上限 maxRunHistory)
meta.json 调度记忆:今天哪些 daily 已跑、interval 上次时间、最近用户消息日
stateDir 配置项可以整体改到别处。cordis.patch.yml 里的配置项如下:
- id: dsh-automations
name: dsh-automations
config:
enabled: true
stateDir: "" # 空 = $DSH_HOME/storages/dsh-automations
maxRunHistory: 200
maxOutputChars: 8000
defaultTimeoutMs: 120000
defaultCwd: "" # shell 规则的默认工作目录;空 = 用户主目录
startupDelayMs: 2000
tickSeconds: 15
promptEnabled: true
promptOrder: 62
patch 对 config 是整块替换,想改一个键就把要保留的键一起写上。
安装与启用¶
从 npm 安装,README 给出的是:
# 从 npm 安装(推荐)
node "<dsh>/lib/bin.js" plugin --profile <profile> add dsh-automations
其中 <dsh> 指 @deepseek-ai/dsh 的安装目录(其 lib/bin.js)。装完后把 dsh-automations 加进该 profile package.json 的 dsh.profile.bundles,重启宿主或让插件管理器热加载。开发时可以直接链到源码目录,改完重启宿主即生效:
node "<dsh>/lib/bin.js" plugin --profile <profile> add "link:D:\path\to\dsh-automations"
桌面版由插件页「安装」完成,等价于上面的 pnpm 命令。
典型用法¶
README 给出的几个例子思路都是「触发时机 + 动作 + 日志」,可以直接复现:
- startup 触发配 log 动作,验证宿主启动后规则是否命中。
- daily 触发设在 08:30,配 http 动作做探活,验证时间触发。
- session-idle 触发配 log 动作,记录会话空闲。
调命令时先用面板的「试运行」执行一次、不保存,确认无误后再保存。若想在消息首次到达时启动某个服务,把 user-message 的 mode 设为 first-of-session,动作用 shell,cwd 指向工程目录。
仓库内的自检命令覆盖模型归一化、存储、引擎和触发器接线,共 12 项:
cd dsh-automations
node test/selftest.mjs
真机验证时,用临时 profile 加 --no-open --port 0 起 Web,拿输出的 ?token= 换 cookie 调 /api/dsh-automations/state;再确认侧栏入口、规则编辑器;最后新建一个会话发一条消息,检查 session-start、user-message、tool-after、session-idle 的运行记录。
适用场景与注意¶
适合需要在 DSH 生命周期和事件节点上跑确定性动作的开发者:启动后拉起服务、消息到达时记录、工具执行后上报、定时探活或通知。事件可比时间触发更精准,这类需求用内置定时任务实现往往要插桩或轮询。
几点要留意:
- shell 动作会以当前用户权限执行任意命令,规则文件在
$DSH_HOME/storages/dsh-automations/,面板 API 走宿主已鉴权的/api通道。能改规则的人本来就能在这台机器上执行命令,请像对待~/.bashrc一样对待它。 - 插件目前没有「给 agent 发 prompt」的动作,只做命令、HTTP、日志这类确定性动作。需要 agent 参与的定时任务,仍用 DSH 自带的 schedule 工具或面板。
- 同一时刻的命令串行执行(队列上限 200),避免两条规则同时动同一个文件或端口。
- 规则由面板或工具修改,直接手改 rules.json 需要重启宿主才会读到。
- 兼容性方面,README 记录 DSH
0.2.0-rc.2与0.2.1-rc.3实测通过,宿主靠 peerDependencies 做兼容门;Node 需要>=22。 - 安装前建议检查源码与许可证,该插件为 MIT License。
结尾¶
dsh-automations 的价值在于把自动化从时间轴扩展到事件轴,并用面板和模型工具提供同一套规则读写方式,适合把 DSH 的生命周期节点纳入自动化编排的场景。目录页和源码分别在:
- 目录页:https://www.skillhub.cn/plugins/439436269-ctrl/dsh-automations
- GitHub:https://github.com/439436269-ctrl/dsh-automations
需要说明的是,上述社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。