mira_active:爲 DSH 會話加「鬧鐘式」自我激活

前言

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,不會猜測。

  1. 爲當前會話裝一條默認節奏的鬧鐘(不帶 alarmId 時複用該會話的 default 條目,沒有則新建;默認 schedule 爲 random perDay=6,可由 defaultSchedule 改)
    調用工具 mira_active_enable,按需傳入 schedule、prompt、quiet、limits。

  2. 同一會話第二條鬧鐘
    必須 create:true,否則重複 enable 會不斷堆條目(與舊版冪等 enable 語義不同)。

  3. 查看與運維
    - 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 爲準。

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

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

小夜