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 为准。

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

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

Xiaoye