前言¶
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 为准。