前言¶
DeepSeek Harness(DSH)裏的智能體通常只在用戶發消息或外部事件觸發時纔會跑一輪。若你希望某個會話在固定時刻、按間隔或隨機節奏「自己醒來」繼續做事,就要在進程裏掛定時邏輯,並把到點的意圖寫進會話——這和在應用裏手寫調度器、再對接 agent 入口是同一類問題。
下面介紹社區插件 mira_active(維護者 Stella-Mira,分類:工作流)。它把「一條配置 = 一個鬧鐘」落到 DSH 插件裏:到點向指定會話注入一條用戶消息,並用 steer(插話) 喚醒當前輪次,而不是排隊等整輪結束。數據與行爲以 GitHub README 與 package.json(當前版本 0.3.0,MIT)爲準。
這是什麼¶
mira_active 是 DSH 的自我激活插件,本質是鬧鐘:定時器到期後,往某個 sessionId 對應的會話裏插話,讓 agent 再跑一輪。
自 0.3.0 起,模型改爲以 alarmId 爲鍵、條目內帶 sessionId;投遞方式從 followup 改爲 steer。插件僅使用 Node 內置模塊(fs / path / crypto),README 說明可通過 link: 裝入 profile 使用,無第三方依賴。
狀態落盤路徑(schemaVersion 2):
$DSH_HOME/mira_config/mira_active/alarms.json
$DSH_HOME 缺省爲 ~/.dsh,例如 ~/.dsh/mira_config/mira_active/alarms.json。
README 強調:狀態文件是內存鏡像,不是開關。運行時以內存爲準;運行中刪改文件會在下次落盤時被寫回或覆蓋。要在運行中清空或停用,應使用工具 mira_active_remove / mira_active_disable;只讀查看用 mira_active_status。手改文件後需重載插件才生效。
投遞語義:爲什麼只用 steer¶
| 會話狀態 | 行爲 |
|---|---|
| 空閒 | 立刻開始一輪 |
| 正在跑 | 把消息插到最近一步(steer) |
插件絕不排隊等下一輪:followup 需等整輪結束才輪到,會把「到點叫醒」變成「這一輪結束後才叫」。因此實現裏只調 agent.steer(),沒有 followup 路徑。
核心功能¶
定時方式(schedule)¶
| type | 字段 | 說明 |
|---|---|---|
once |
at(ISO8601)或 afterMinutes |
一次性;afterMinutes 在保存時折算爲絕對時刻;拒絕過去時刻(要立即響用 mira_active_fire_now)。觸發後 enabled 自動 false,條目保留 |
daily |
times: ["09:00","21:00"] |
每天固定時刻,可多個 |
interval |
intervalMinutes |
每 N 分鐘,基準爲上次觸發時刻 |
random |
perDay 或 range: [min,max] |
按天給期望次數,帶 ±40% 抖動採樣,非均勻鋪開 |
同一會話可有多條鬧鐘;多條同時到期時按 nextAt 升序依次投遞。
提示詞(prompt)¶
mode:"single"+text,或mode:"list"+texts[]+order:"random"|"seq"- 變量:
{{time}}、{{date}}、{{sessionId}}、{{alarmId}}、{{count}}(該條目累計觸發次數,從 1 起) - 未知
{{xxx}}原樣保留
靜默與限流¶
條目級靜默(quiet):可多段、可跨午夜、可按星期(days:[0..6],0=週日)。命中則本次不觸發、不補發,missedCount+1;不推遲到窗口結束後立刻響。
limits(默認值見 README):maxPerDay、minGapMinutes、failBackoffMinutes(默認 10)、maxFailures(默認 5,連續失敗後自動 enabled=false)。
可選擴展字段 workRanges、maxPerRange:正向開工時段與單班次觸發上限;未配置時與任務書 v2 模型行爲一致。
定時器行爲¶
不是固定節拍輪詢,而是睡到最近一條 nextAt(下限 1 秒、上限 60 秒)。醒來後處理到點條目並落盤。五種結果在 mira_active_status.counters 中分開計數(靜默錯過、不在開工時段、撞日上限、撞班次上限、間隔過近、投遞失敗等)。
安裝與啓用¶
社區目錄頁:https://www.skillhub.cn/plugins/Stella-Mira/mira_active(與 DeepSeek / 幻方無官方從屬關係,僅爲 DSH 生態獨立站點)。
源碼與說明:https://github.com/Stella-Mira/mira_active。
已抓取資料中未給出形如 dsh plugin add github:… 的一行安裝命令;README 寫明通過 link: 裝入 profile 即可,插件包內含 cordis.patch.yml(見 package.json 的 dsh.bundle.patch)。安裝前請自行閱讀倉庫源碼與 MIT 許可證,並確認插件以當前 dsh 進程權限運行。
profile 側可通過 cordis patch 配置(節選):
| 鍵 | 默認 | 說明 |
|---|---|---|
enabled |
true |
false 時不註冊工具、不起定時器 |
defaultSchedule |
{ "type": "random", "perDay": 6 } |
mira_active_enable 不帶 schedule 時使用 |
defaultPrompt |
內置一句話 | enable 不帶 prompt 時使用 |
defaultQuiet |
不靜默 | enable 不帶 quiet 時使用 |
defaultLimits |
見 README 表 | enable 不帶 limits 時使用 |
從 0.2.0 升級時,舊 profile 鍵會映射爲新建鬧鐘的默認值並在 mira_active_status 中 warn;狀態文件需用倉庫內遷移腳本(路徑:重構插件/migrate/active.mjs)從舊版 $DSH_HOME/mira_active.json 轉換,詳見 README「遷移」。
典型用法¶
工具須在會話內調用:「當前會話」優先取 exec.agent.session.id,拿不到且未給 sessionId 時返回 config/missing,不會猜測。
-
爲當前會話裝一條默認節奏的鬧鐘(不帶
alarmId時複用該會話的default條目,沒有則新建;默認 schedule 爲random perDay=6,可由defaultSchedule改)
調用工具mira_active_enable,按需傳入schedule、prompt、quiet、limits。 -
同一會話第二條鬧鐘
必須create:true,否則重複enable會不斷堆條目(與舊版冪等 enable 語義不同)。 -
查看與運維
-mira_active_list:條目清單(可按會話過濾)
-mira_active_status:只讀總覽(條目數、定時器、錯誤與計數)
-mira_active_fire_now:立刻觸發一次,不改 schedule;靜默仍生效
-mira_active_disable:給alarmId停一條;不給則停當前會話全部並列出 id
-mira_active_pause/mira_active_remove:臨時停或刪除條目
數據模型示例(結構與字段含義以 README 爲準):
{
"schemaVersion": 2,
"alarms": {
"a-1f2e3d4c5b": {
"id": "a-1f2e3d4c5b",
"sessionId": "會話 id(必填)",
"enabled": true,
"schedule": { "type": "daily", "times": ["09:00", "21:00"] },
"prompt": { "mode": "single", "text": "該起來了" },
"quiet": { "enabled": true, "ranges": [{ "from": "01:00", "to": "07:00" }] },
"delivery": "steer",
"limits": { "maxPerDay": 0, "minGapMinutes": 0, "failBackoffMinutes": 10, "maxFailures": 5 }
}
}
}
適用場景與注意¶
適合:需要把「提醒 / 週期自檢 / 隨機喚醒」綁在具體 DSH 會話上,且希望會話忙碌時仍能插話而不是等 followup 的場景。
配置時注意(README「已知取捨」):
- 隨機 schedule 是「期望次數」,不是每天固定 k 次均勻分佈;硬上限仍靠
maxPerDay。 - 靜默命中後跳到下一個排定時刻,不會補到靜默結束後的最近時刻;排定時刻若落在靜默內會反覆記 miss,需錯開配置。
once拒絕過去時刻;停機期間錯過的會在加載時每條記 1 次 miss,不補發。alarms.json損壞或版本不符時插件拒絕使用並拒絕寫盤,詳情見mira_active_status.fatalError。
結尾¶
mira_active 把 DSH 會話的自我激活收成「可配置的鬧鐘 + steer 插話」,一條配置對應一個 alarmId,支持多種 schedule、條目級靜默與失敗退避。若要覈對字段與遷移步驟,以倉庫 README 爲準。