dsh-automations:給 DSH 補上事件驅動的自動化

前言

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 給出的幾個例子思路都是「觸發時機 + 動作 + 日誌」,可以直接復現:

  1. startup 觸發配 log 動作,驗證宿主啓動後規則是否命中。
  2. daily 觸發設在 08:30,配 http 動作做探活,驗證時間觸發。
  3. 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 生命週期和事件節點上跑確定性動作的開發者:啓動後拉起服務、消息到達時記錄、工具執行後上報、定時探活或通知。事件可比時間觸發更精準,這類需求用內置定時任務實現往往要插樁或輪詢。

幾點要留意:

  1. shell 動作會以當前用戶權限執行任意命令,規則文件在 $DSH_HOME/storages/dsh-automations/,面板 API 走宿主已鑑權的 /api 通道。能改規則的人本來就能在這臺機器上執行命令,請像對待 ~/.bashrc 一樣對待它。
  2. 插件目前沒有「給 agent 發 prompt」的動作,只做命令、HTTP、日誌這類確定性動作。需要 agent 參與的定時任務,仍用 DSH 自帶的 schedule 工具或面板。
  3. 同一時刻的命令串行執行(隊列上限 200),避免兩條規則同時動同一個文件或端口。
  4. 規則由面板或工具修改,直接手改 rules.json 需要重啓宿主纔會讀到。
  5. 兼容性方面,README 記錄 DSH 0.2.0-rc.2 與 0.2.1-rc.3 實測通過,宿主靠 peerDependencies 做兼容門;Node 需要 >=22。
  6. 安裝前建議檢查源碼與許可證,該插件爲 MIT License。

結尾

dsh-automations 的價值在於把自動化從時間軸擴展到事件軸,並用面板和模型工具提供同一套規則讀寫方式,適合把 DSH 的生命週期節點納入自動化編排的場景。目錄頁和源碼分別在:

  • 目錄頁:https://www.skillhub.cn/plugins/439436269-ctrl/dsh-automations
  • GitHub:https://github.com/439436269-ctrl/dsh-automations

需要說明的是,上述社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜