前言¶
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 / 幻方無官方從屬關係。