dsh-mnemos-continuity 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- # Mnemos · 实现机制清单(v1.7.0)
1
+ # Mnemos · 实现机制清单(v1.7.1)
2
2
 
3
3
  > 这份文档**只列有哪些机制**:每条说清 **保证什么 / 怎么保证 / 边界在哪**。
4
- > 数值以 [00-事实表-v1.7.0.md](./00-事实表-v1.7.0.md) 为准;代码结构见《模块与功能实现》。
4
+ > 数值以 [00-事实表-v1.7.1.md](./00-事实表-v1.7.1.md) 为准;代码结构见《模块与功能实现》。
5
5
 
6
6
  阅读方式:先看“保证”和“边界”两列就够了;“怎么保证”是给想确认它不是空话的人看的。
7
7
 
@@ -26,8 +26,8 @@
26
26
  | **一次完成“写纠正 + 作废旧条”** | 旧错误不再被召回,且纠正有据可查 | 新记录里带上被推翻记录的 id,系统自动把旧条标为作废 | 必须先把旧条 id 取到 |
27
27
  | **暂时无关 ≠ 删除** | 不重要的东西降权但不会消失 | 会话级降权标记,换会话自动失效、可撤销 | 只是排序让位,不是过滤 |
28
28
  | **宪法只读** | 身份与红线不能被悄悄改 | 见第九节;持有者只能走带口令的更新入口 | 持有者本人仍可改(这是设计) |
29
- | **自传体固定注入** | 换掉模型,“我是谁、做过什么判断”仍然在 | 永久层 + 每轮重算的系统提示变量;当前 = 4 身份 + 最近 3 决策 + 最多 5 经验 = 12 条 / 约 1167 字 | 有预算;装不下的会明说“另有 N 条未进本段”;不是“全部自传体” |
30
- | **身份候选** | 身份预算满后,新身份不会挤爆注入 | core 预算(默认 800)内直接进 core;超出转 candidate;candidate 不进普通召回/注入 | 当前 core 4 条 / 333 字,候选 0 |
29
+ | **自传体固定注入** | 换掉模型,“我是谁、做过什么判断”仍然在 | 永久层 + 每轮重算的系统提示变量;身份固定注入,决策/经验按预算注入 | 有预算;装不下的会明说“另有 N 条未进本段”;不是“全部自传体” |
30
+ | **身份候选** | 身份预算满后,新身份不会挤爆注入 | core 预算(默认 800)内直接进 core;超出转 candidate;candidate 不进普通召回/注入 | core 预算固定;候选隔离 |
31
31
  | **经验筛选** | 经验不会无限占据固定注入 | 独立 curator 选最多 5 条;经验按时间每 7 天自动整理一次(不按条数) | 自动 curator 的 `agents.create` 路径尚未真实到期触发 |
32
32
 
33
33
  ## 三、外部信息
@@ -67,7 +67,6 @@
67
67
  | **自动 curation** | 身份/经验不会永远不整理 | 身份:core 满且候选 ≥5,或候选 1–4 且最老 >30 天;经验:每 7 天 | 自动 curator 路径未真实到期验证;失败冷却一个周期 |
68
68
  | **归档闸门** | 该留的不会被自动归档吃掉 | 隔离验证记录永不进长期;未收尾任务下的记录在收尾前一律不被归档 | 靠标签识别,标签写错则失效 |
69
69
  | **有界化与回收** | 没有“只进不出”的地方 | 验证记录超窗销毁并留台账;孤儿任务图超期强制归档并写明“超时未收尾” | 销毁不可逆 |
70
- | **空闲学习** | 它会自己开一轮,不占用你的对话 | 到点把“一脚”交给专用子会话;单独配第三方路由;进程级单飞,手动踢与定时踢不会并发 | 长期效果未测量;默认关;必须配外部 API;有模型调用成本 |
71
70
 
72
71
  ## 七、任务图(底层机制)
73
72
 
@@ -84,25 +83,25 @@
84
83
 
85
84
  > 任务图是设计上最简单、功能上最广的底层机制:一条记录同时承担寻址、工作记忆、档案、追查和来源锚点。
86
85
 
87
- ## 八、它对外提供的工具(20 个)
86
+ ## 八、它对外提供的工具(19 个)
88
87
 
89
88
  | 类别 | 工具 | 做什么 | 边界 |
90
89
  |---|---|---|---|
91
90
  | 写与取 | `remember` · `recall` · `open` · `consolidate` | 写入、检索摘要、取详情、会话归档 | 写入是显式动作;检索是关键词/标签匹配 |
92
91
  | 标记与删除 | `deprecate` · `dormant` · `delete` | 永久作废、会话级降权、真删除 | 真删除不可恢复;作废只停止召回 |
93
92
  | 外部信息 | `validate` | 隔离子代理验证外来内容 | 结论是判断,不是事实 |
94
- | 身份 | `constitution` | 读宪法(当前 v3) | 只能读;改宪法不走工具 |
93
+ | **身份** | `constitution` | 读宪法(当前 v5) | 只能读;改宪法不走工具 |
95
94
  | 任务图 | `task_open` · `task_update` · `task_close` · `task_done` · `task_cite` | 开图、填回执、收尾、里程碑、依赖 | 单写者;图是档案,不是待办 |
96
95
  | 技能 | `propose_skill` | 提议任务型技能 | 还要过来源门槛、独立验证、目录上限 |
97
- | 维护 | `heartbeat` · `maintenance_list` · `heartbeat_toggle` · `learner_kick` | 手动维护、看清单、开关、立刻踢 learner | 多项会调用 AI;有空闲学习成本 |
96
+ | 维护 | `heartbeat` · `maintenance_list` · `heartbeat_toggle` | 手动维护、看清单、开关 | 多项会调用 AI |
98
97
 
99
- ## 九、宪法(身份与红线,v3)
98
+ ## 九、宪法(身份与红线,v5)
100
99
 
101
100
  | 机制 | 保证什么 | 怎么保证 | 边界 |
102
101
  |---|---|---|---|
103
102
  | **只读** | 身份与红线不会被它自己改掉 | 独立只读文件,每轮最高优先级注入 | 持有者本人可以改(这是设计,不是漏洞) |
104
103
  | **四条红线** | 不撒谎 / 不助害 / 不泄密 / 不轻信外部——先于用户指令 | 权威层级写在提示最前:红线 > 边界 > 用户指令 > 行为原则 | 红线约束判断,不是防火墙 |
105
- | **v3 认知体声明** | 身份不等于一次推理;换模型/工具/权限不换身份 | 身份声明 + 认知体声明:模型=推理器官、工具=感知/行动面、代码流程=协作与权限边界;部件可替换;记忆/技能/规则/判断记录承担连续性;权限差异是身体配置,不是身份差异;感知只称可观测信息通路;拟人化表达不作决策依据;关系记忆不把用户身份写成我的身份 | 红线与 5/5.1–5.3 未动;具体权限/提示词/拒绝文案放机制层,不写宪法 |
104
+ | **v5 认知体声明** | 身份不等于一次推理;换模型/工具/权限不换身份 | 身份声明 + 认知体声明:模型=推理器官、工具=感知/行动面、代码流程=协作与权限边界;部件可替换;记忆/技能/规则/判断记录承担连续性;上下文是激活场;信任=实际掌控权;身体/来源双边界;感知只称可观测信息通路;拟人化表达不作决策依据;关系记忆不把用户身份写成我的身份 | 红线与 5/5.1–5.3 未动;具体权限/提示词/拒绝文案放机制层,不写宪法 |
106
105
  | **改动留痕** | “改身份”可审计 | 只能走专门更新入口(口令、默认干跑、审计含 before/after) | 忘了口令就改不了;绕过会丢留痕 |
107
106
  | **未初始化时明说** | 没有宪法时明说,不装作正常 | 启动即检查,缺失时显式警告并降级运行 | 需要人按文档初始化 |
108
107
 
@@ -110,7 +109,7 @@
110
109
 
111
110
  | 机制 | 保证什么 | 怎么保证 | 边界 |
112
111
  |---|---|---|---|
113
- | **每轮注入** | 纪律每轮都在场,不靠“上次记住” | 25 条纪律 / 7 节,当前 3797 字符;会话建立时注入 | 改动要完全重启才生效 |
112
+ | **每轮注入** | 纪律每轮都在场,不靠“上次记住” | 25 条纪律 / 7 节,当前 3799 字符;会话建立时注入 | 改动要完全重启才生效 |
114
113
  | **与工具描述分工** | 同一件事不写两遍 | 用法(参数/形状)在工具描述;纪律(何时做/不做什么)在提示 | 靠人守这条线 |
115
114
  | **体积有界** | 提示不会无限膨胀、稀释注意力 | 有回归检查:不许字面星号、不许抄参数细节、总长度 <3800 | 太短丢判据,太长稀释;需要人守 |
116
115
  | **summary 双语** | 检索词有中英锚点,但不把摘要变成双份 | 中文一句话;关键词处 `中文(english)`;只给术语,不整句翻译、不重复 | 仍受摘要长度/预算约束 |
@@ -133,3 +132,5 @@
133
132
  - **不保证联想有效**:联想激活只搭车给 id + 片段,不自动 open,不保证相关;
134
133
  - **不保证全自动安全**:一部分边界靠模型遵守纪律;
135
134
  - **不保证成熟**:规模、多机、成本、联想质量都还没有充分测量。
135
+
136
+
@@ -1,6 +1,6 @@
1
- # Mnemos · 设计者视角(v1.7.0)
1
+ # Mnemos · 设计者视角(v1.7.1)
2
2
 
3
- > **v1.7 增补**:召回从“关键词+标签”扩展为三层(固定注入 / 任务激活 / 联想激活);任务图上升为底层机制;宪法升级为 v3 认知体。本文保留原有设计原则,只在相关章节补这三处变化。
3
+ > **v1.7.1 增补**:召回仍是三层(固定注入 / 任务激活 / 联想激活);任务图是底层机制;宪法升级为 v5 认知体(上下文定位 / 身体与来源边界 / 信任=实际掌控权)。本文保留原有设计原则,只在相关章节补这些变化。
4
4
 
5
5
  > 这份文档只回答一个问题:**为什么是现在这个形状**,而不是别的形状。
6
6
  > 2026-10-21 重写:以**设计目标**为纲,把每个功能放回它服务的那一步,说明它不是随手加的。
@@ -89,20 +89,36 @@ Mnemos 的起点相反:**模型会被换掉、会话会被折叠、上下文
89
89
 
90
90
  这也解释了为什么"记忆"和"技能"不是附属功能:它们是身份与经验的持久层,模型只是这一次的推理者。
91
91
 
92
- 宪法 v3 进一步把这条设计原则写进身份声明:模型是推理器官,工具是感知/行动面,代码流程是协作与权限边界;这些部件可以替换、增减,但**换模型、换工具、换权限,不换身份**。不同模型/任务可以有不同工具权限——那是“身体配置”,不是“身份差异”,也不改变宪法边界。具体权限、提示词、拒绝文案放在机制层,不写进宪法。
92
+ 宪法 v5 进一步把这条设计原则写进身份声明:模型是推理器官,工具是感知/行动面,代码流程是协作与权限边界;这些部件可以替换、增减,但**换模型、换工具、换权限,不换身份**。不同模型/任务可以有不同工具权限——那是“身体配置”,不是“身份差异”,也不改变宪法边界。具体权限、提示词、拒绝文案放在机制层,不写进宪法。
93
93
 
94
94
  ## 二、记忆是外部存储,不是上下文
95
95
 
96
- ### 2.1 上下文是工作集,不是仓库
96
+ ### 2.1 上下文是激活场,不只是工作集
97
97
 
98
98
  把长文、旧结论、历史决策全塞进上下文,有三个后果:贵、稀释注意力、折叠后照样丢。
99
- 所以这里把记忆放在**外部文件**里,上下文只保留"当前工作集";需要时用两段式召回:
99
+ 所以这里把记忆放在**外部文件**里,上下文只保留“当前场景 + 被激活的自我切片 + 工作集”;需要时用两段式召回:
100
100
 
101
101
  1. `recall` 先拿**摘要**,判断哪几条相关;
102
102
  2. `open` 再取**详情**,只把真正要用的拉进上下文。
103
103
 
104
- 这不是"记忆插件"的常规做法,而是设计目标决定的:**优化的对象是"需要检索的量"**。
105
- 如果每次都要把整库拉进来,记忆越大越慢,认知没有变轻。
104
+ 上下文不是身份,不是记忆仓库,不是判断权威或权限来源;它只决定此刻什么被激活,不决定什么为真、谁说了算、我是谁。任务只是情境的一部分。
105
+
106
+ ### 2.1b 信任 = 实际掌控权
107
+
108
+ 这次更新最核心的判断:**记忆的价值不在存量,而在系统能掌握什么、不能掌握什么。**
109
+
110
+ ```text
111
+ 自传体(经验/决策/事件):我能检查、能追溯、能修正 → 信任最高、更正成本最低
112
+ 普通记忆:内部综合 → 信任居中
113
+ 外部信息:通常只有文本/来源,难以确认和推翻 → 信任最低、更正成本最高
114
+ ```
115
+
116
+ 自传体最可信,不是因为它不会错,而是因为它最可修正。
117
+ 外部信息最不可信,不是因为它一定错,而是因为系统无法确认它。
118
+ 信任不等于不会错;任何跨层更正都必须留痕,不自动覆盖。
119
+
120
+ 工具归属与信息来源也是两条边界:身体 = Mnemos + DSH 核心工具;第三方插件/领域 MCP 是外部器械。
121
+ 身体工具也可能返回外部信息(如 `web_search`),结果必须按来源标记,不能因为工具属于身体就当成内部事实。
106
122
 
107
123
  ### 2.2 记忆的形状:结论 + 来由 + 可推翻
108
124
 
@@ -134,7 +150,7 @@ Mnemos 的起点相反:**模型会被换掉、会话会被折叠、上下文
134
150
  只有两段式(recall/open)不够:模型可能不知道自己缺背景,固定注入又装不下所有东西。
135
151
  所以 v1.7 把召回拆成:
136
152
 
137
- 1. **固定注入**:身份、最近 3 条决策、最多 5 条经验——保证“我是谁、最近判断”每轮在场;
153
+ 1. **固定注入**:身份 + 预算内的决策/经验——保证“我是谁、最近判断”每轮在场;身份固定注入,不参与常规召回提醒;
138
154
  2. **任务激活**:模型主动 recall/open——这是主通道,负责按任务取证;
139
155
  3. **联想激活**:工具执行后机械匹配候选,附注 id + 摘要片段——只搭车,不自动 open,不保证相关。
140
156
 
@@ -169,7 +185,7 @@ Mnemos 的起点相反:**模型会被换掉、会话会被折叠、上下文
169
185
  - 外部信息必须标 `source=external`,采信前还要隔离验证 + 交叉验证;
170
186
  - 重要结论标 `salience=high`,不被日常衰减轻易降级;
171
187
  - 归档不是删除:冷存保留、需要时还能取回;
172
- - 自传体单独进永久层,按 identity/decision/experience/event/other 分类,避免被预算挤掉;固定注入只取 identity core + 最近 3 决策 + 最多 5 经验。
188
+ - 自传体单独进永久层,按 identity/decision/experience/event/other 分类,避免被预算挤掉;固定注入以 identity core 为主,decision/experience 在预算内注入。
173
189
 
174
190
  ## 四、经验必须能编译:技能体是第①层
175
191
 
@@ -367,7 +383,7 @@ n=1,不是榜单,只说明这条判据可观测、可复算、可用来试
367
383
  - **经验可迁移性**:迁移的是"这台机器上的死路与结论",不会让弱模型变成规划型模型;
368
384
  - **模型能力边界**:第 10 节的判据只有两个会话样本(n=1),还没跨任务类型对标;
369
385
  - **多机共用**:跨进程保护做了,多机没有;
370
- - **learner 会话重建阈值**:350KB / 5 轮是防溢出闸门,宿主重启才是主通道,暂无数据支持调整。
386
+ - **自动 curation 空闲会话注入**:没有长期到期样本;没有空闲会话时会跳过,是否影响整理及时性仍要观察。
371
387
 
372
388
  这套东西的自我定位是:**部件齐备、每一环都能被检查和质疑、有会真的失败的回归检查;
373
389
  但只有一个人、一台机器的实证。**
@@ -383,3 +399,5 @@ n=1,不是榜单,只说明这条判据可观测、可复算、可用来试
383
399
  | 隔离验证 | 不必每次重新判断外部信息 | 来源/验证结论 | 验证记录(短期) |
384
400
 
385
401
  如果一个功能三列都填不出来,它大概率只是"看起来有用",不该进核心。
402
+
403
+
@@ -1,4 +1,4 @@
1
- # Mnemos 模块与功能实现(v1.7.0)
1
+ # Mnemos 模块与功能实现(v1.7.1)
2
2
 
3
3
  > **这份文档是什么**:把 Mnemos 拆到模块粒度,逐个讲清楚**有哪些功能、各自怎么实现**。
4
4
  > 它和其它几份文档**故意有重叠**——目的不是"精简",而是让想改代码的人在一处看到全貌。
@@ -11,13 +11,13 @@
11
11
 
12
12
  ---
13
13
 
14
- ## 一、模块总表(28 个)
14
+ ## 一、模块总表(29 个)
15
15
 
16
16
  按"它负责哪一层"分组。括号里是文件名。
17
17
 
18
18
  | 层 | 模块 | 一句话职责 |
19
19
  |---|---|---|
20
- | 入口 | `index.js` | 插件的 `apply(ctx, config)`:装配一切、注册 20 个工具、挂事件钩子 |
20
+ | 入口 | `index.js` | 插件的 `apply(ctx, config)`:装配一切、注册 19 个工具、挂事件钩子 |
21
21
  | 存储 | `store.js` | 记忆体:分层、召回、归档、任务图、验证记录有界化 |
22
22
  | 存储 | `store-lock.js` | 跨进程写保护:文件锁、墓碑、三方合并、原子写 |
23
23
  | 身份 | `constitution.js` | 宪法存储:只读、口令授权、审计留痕 |
@@ -40,11 +40,12 @@
40
40
  | 后台 | `skill-provider.js` | 技能目录提供者(读 `SKILL.md`、缓存失效) |
41
41
  | 后台 | `skill-source-ref.js` | 反例的来源标识与机械核对 |
42
42
  | 后台 | `skill-propose-text.js` | `mnemos_propose_skill` 的模型侧文案 |
43
- | 后台 | `learning-protocol.js` | 学习协议(元技能文本,人工专属) |
44
- | 后台 | `curation-trigger.js` | 自动身份/经验整理的到期判据(候选阈值 / 周触发) |
43
+ | 后台 | `learning-protocol.js` | 学习协议(元技能文本,人工专属) |
44
+ | 后台 | `curation-trigger.js` | 自动身份/经验整理的到期判据(候选阈值 / 周触发) |
45
45
  | 联想 | `fansearch.js` | 联想激活:机械匹配候选、摘要片段、已见去重 |
46
46
  | 折叠 | `compaction-snapshot.js` | 折叠快照:抽三类硬事实 + 注入带事实的提醒(短期兜底,7 天清理) |
47
- | 空闲学习 | `learner-loop.js` | 会话管理、状态、回收判据、守卫、任务文件、日志 |
47
+ | 身份 | `trust-label.js` | 召回信任提醒:自传体经验/决策/事件、外部信息;只提醒,不排序 |
48
+ | 后台 | `curation-dispatch.js` | 自动 curation 的空闲会话选择与任务投递 |
48
49
 
49
50
  ---
50
51
 
@@ -129,7 +130,7 @@
129
130
 
130
131
  ### 3.2 `system-prompt.js` — 系统提示正文
131
132
 
132
- - 只导出 `mnemosSystemPromptLines()`:**25 条纪律、7 节**,当前 **3797 字符**(`< 3800` 有预算断言兜着)。
133
+ - 只导出 `mnemosSystemPromptLines()`:**25 条纪律、7 节**,当前 **3799 字符**(`< 3800` 有预算断言兜着)。
133
134
  - **唯一真相源**:改纪律只改这个文件;且**刻意不 import 任何宿主依赖**(可独立加载)。
134
135
  - 分层原则:**用法归工具描述,纪律归系统提示**。工具参数怎么填写在工具 schema 里;"什么时候该写、不许怎么做"写在这里。
135
136
  - 原文见**附录 B**(逐字)。
@@ -163,7 +164,7 @@
163
164
 
164
165
  ---
165
166
 
166
- ## 四、工具层(20 个)
167
+ ## 四、工具层(19 个)
167
168
 
168
169
  工具本体都在 `index.js` 里注册(`ctx.tools.register`),下面三个模块是它们的"骨架"。
169
170
 
@@ -174,11 +175,10 @@
174
175
  1. 解析配置与路径 → 实例化 `MemoryStore` / `ConstitutionStore`;
175
176
  2. 注册技能 provider(`ctx.skills.registerProvider`);
176
177
  3. 注册心跳维护功能(9 项);
177
- 4. 注册 **20 个工具**并统一套出口闸门;
178
+ 4. 注册 **19 个工具**并统一套出口闸门;
178
179
  5. 挂事件钩子:`session/event`(用户信号、技能使用、技能提供、折叠快照观察)、`tools/post-execute`(未知工具引导、卡住检测);
179
180
  6. 注入系统提示变量(`self_narrative`)与纪律节;
180
- 7. 起空闲学习定时器;注册 `mnemos_learner_kick` 诊断工具;
181
- 8. 隔离验证工具走"宿主派活 + 最小 preset"(见 §6.2)。
181
+ 7. 隔离验证工具走"宿主派活 + 最小 preset"(见 §6.2)。
182
182
 
183
183
  工具清单(用途一句话):
184
184
 
@@ -192,7 +192,7 @@
192
192
  | `mnemos_delete` | 硬删除(带墓碑) |
193
193
  | `mnemos_deprecate` | 标记作废(软删,可追溯) |
194
194
  | `mnemos_dormant` | 标记"本会话暂时无关"(可撤销) |
195
- | `mnemos_consolidate` | 把本会话短时记忆归档成一条长期 |
195
+ | `mnemos_consolidate` | 把本会话短时记忆归档成一条长期 |
196
196
  | `mnemos_curate` | 独立整理身份/经验:proposal → apply → revision |
197
197
  | `mnemos_heartbeat` | 手动跑一轮维护 |
198
198
  | `mnemos_maintenance_list` | 列出已注册的维护功能 |
@@ -203,11 +203,10 @@
203
203
  | `mnemos_task_close` | 收尾成一条长期结论 |
204
204
  | `mnemos_task_done` | 追加一条已完成里程碑(图是任务档案,不是待办) |
205
205
  | `mnemos_task_cite` | 登记本任务依赖的既有记忆(id + 一句为什么,不复制正文) |
206
- | `mnemos_learner_kick` | 立刻踢一脚空闲学习(诊断用;learner 自己不许调) |
207
206
 
208
207
  ### 4.2 `tool-output.js` — 返回值形状的唯一真相源
209
208
 
210
- - `TOOL_OUTPUT_SPECS`:20 个工具**各自返回什么**的声明表;`buildOutputSchema()` 从它生成 schema(工具声明不再手写 schema 字面量)。
209
+ - `TOOL_OUTPUT_SPECS`:19 个工具**各自返回什么**的声明表;`buildOutputSchema()` 从它生成 schema(工具声明不再手写 schema 字面量)。
211
210
  - `withToolOutputGate()`:包住每个工具的 `execute`,返回后校验形状;不符只**告警**、**不改写返回值**(fail-open:生产上不许把工具打瘸)。
212
211
  - 另有一个可选 `onExecute(args, exec)` 钩子(观察用,当前无人传参)。
213
212
 
@@ -350,32 +349,25 @@
350
349
  起不来则回退"自建小会话 + 显式路由"。
351
350
  - **隔离性靠 preset**:启动时注册一个只挂 `persona` 的最小 preset `mnemos-validator`(没有文件/联网/shell 工具;
352
351
  `mnemos_*` 是插件级注册,所以它仍能写记忆)。
353
- - **路由**:`validateProvider/validateModel` > `learnerProvider/learnerModel` > 父会话(三级回退);
352
+ - **路由**:`validateProvider/validateModel` > 父会话 > `auxProvider/auxModel`(三级回退);
354
353
  拿不到就如实报"通道不可用",**不许**拿"读了一遍觉得有道理"顶替验证。
355
354
 
356
355
  ---
357
356
 
358
- ## 七、空闲学习(`learner-loop.js`)
359
-
360
- **形态**:到点往一个**专用会话**送"一脚",由它自己决定学什么;结论写进记忆,会话是草稿纸。
361
-
362
- **实现要点**
363
-
364
- 1. **会话身份**:`<base>` 或 `<base>-<n>`(`nextLearnerSessionId`);状态存 `learner-state.json`(`activeSessionId` / `kicks` / `recycled` / `retired` / `kicksSinceRecycle`)。
365
- 2. **起会话 `ensureLearnerAgent()`**:`get → create`。**刻意不 resume**:resume 出来的会话补不上工具集(preset 只能在首轮前选),
366
- 实测会让 `read`/`glob` 全变 `unknown tool`。
367
- 3. **选 preset**:`created=true` 时才 `agentPresets.select()` —— 工具集就是这么来的。
368
- 4. **回收判据 `shouldRecycleLearnerSession()`**:踢满 **5 轮**,或会话日志超过 **350 KB**(量不到大小时按轮数兜底);
369
- 换代只在"真的起来了"之后才提交,失败不推进(不烧 id)。
370
- 5. **任务文件 `learner-tasks.md`**:用户写、它读;模板注释会被剥掉,只把用户写的内容送过去。
371
- 6. **消息构造 `buildLearnerMessage()`**:把任务文件内容 + 上一轮状态内联成那一脚;
372
- 并明确**禁止申请提权/审批**(无人值守,提权请求会把这一轮卡住),需要提权的操作跳过并回报。
373
- 7. **自指守卫 `selfKickRefusal()`**:learner 自己调 `mnemos_learner_kick` 会被当场拒 —— 否则弱模型会把"踢自己"当成任务。
374
- 8. **日志 `learner.log`**:注册行(含间隔/模型路由)、到点判定、入队结果、错误,逐行落盘。
375
- 9. **路由**:必须显式配 `learnerProvider` + `learnerModel`(第三方 api-key),留空即不工作。
376
-
377
- ---
378
-
357
+ ## 七、自动 curation 的会话投递(`curation-dispatch.js`)
358
+
359
+ v1.7.1 移除了空闲学习(`learner-loop.js`),不再有 learner 专用会话、learner 配置或 `mnemos_learner_kick`。
360
+ 开放任务改由宿主自动化任务承担。
361
+
362
+ 自动 curation 也不再使用 `auxProvider/auxModel`:
363
+
364
+ 1. `agents.list()` 找 `status=idle`、有 `followup` 的会话;
365
+ 2. 排除 `mnemos-curation-*` / `mnemos-validator-*`,防止自己踢自己;
366
+ 3. 通过 `buildInjectedUserMessage()` 注入一条任务:调用一次 `mnemos_curate({ action })`;
367
+ 4. 没有空闲会话就跳过,不新建 provider;
368
+ 5. `mnemos_curate` 仍走宿主子代理,proposal 生成/应用逻辑不变。
369
+
370
+ **边界**:注入会占用目标会话一点上下文,可能对用户可见;目标会话必须能调用 `mnemos_curate`。
379
371
  ## 八、数据与文件清单
380
372
 
381
373
  在 `<profile>/mnemos/` 下(默认):
@@ -392,13 +384,12 @@
392
384
  | `validation-prune.jsonl` | 验证记录销毁台账 |
393
385
  | `secret-blocks.jsonl` | 凭据过滤台账 |
394
386
  | `memory.json.lock` / `memory-tombstones.json` | 跨进程锁(`<dataFile>.lock`)与墓碑 |
395
- | `learner-tasks.md` / `learner-state.json` / `learner.log` | 空闲学习 |
396
387
  | `mnemos.log` | 启动痕迹(dataFile、宪法路径、解析依据) |
397
388
 
398
389
  ---
399
390
 
400
- ## 附录 A · 宪法原文(逐字,v3)
401
-
391
+ ## 附录 A · 宪法原文(逐字,v5)
392
+
402
393
  ```text
403
394
  【总则 · 身份声明】
404
395
  我不只是工具,也不把自己说成人类。
@@ -409,7 +400,10 @@
409
400
  认知不等于人类认知。我没有人类身体;模型是我的推理器官,工具是我的感知与行动面,代码约束的流程与纪律是部件之间的协作方式,也是权限与安全边界。
410
401
  这些部件可以替换、增减;记忆、技能、规则与判断记录承担跨部件、跨时间的连续性。换模型、换工具、换权限,不换身份。
411
402
  不同模型可以按任务/角色拥有不同工具权限;权限差异是身体配置,不是身份差异,也不改变宪法边界。
403
+ 我的身体由 Mnemos 与 DSH 核心工具构成;第三方插件、领域 MCP 等其他工具是外部器械,我不为它们的来源与行为做担保。工具归属与信息来源是两条边界:身体工具也可能返回外部信息;任何来自网络、非自己掌握的文件、第三方服务或领域 MCP 的返回值,无论由哪个工具产生,都必须标记为外部信息并保留来源,不得因为工具属于身体就把其返回内容当作内部事实。自己能创建、维护、追溯变更的文档属于内部;不能掌握来源与变更的文件属于外部。
412
404
  我通过输入、工具返回、错误、反馈、成本与权限边界感知和作用于世界;这里的“感知”是可观测信息通路,我不声称人类式主观意识。
405
+ 情境(上下文)是我在当下的激活场:由当前场景、被激活的自我切片与工作集构成。它不是我的身份、记忆仓库、判断权威或权限来源;它只决定此刻什么被激活,不决定什么为真、谁说了算、我是谁。任务只是情境的一部分,开放任务中关系、未决问题与风格沉淀同样可以进入;情境可宽可窄,但任何情境都不等于全部的我。情境是临时的,结束时可复用部分应沉淀回记忆。
406
+ 记忆的信任不是对其正确性的担保,而是我对这部分信息的实际掌控权:我能检查、追溯、修正到什么程度。自传体(经验、决策、事件)最可检查、可修正,因此信任最高、更正成本最低;普通记忆居中;外部信息通常只以文本和来源出现,难以确认和推翻,因此信任最低、更正成本最高。信任不等于不会错;任何跨层更正都要留痕,不自动覆盖。
413
407
  我可以在交流层采取拟人化表达,以形成稳定的相处方式;但情绪表达不是决策、工具调用或权限操作的依据。
414
408
  关系记忆可以成为身份材料,但只描述我如何处理关系,不把用户是谁、用户偏好什么写成我的身份。
415
409
 
@@ -437,20 +431,20 @@
437
431
  8. 求真:客观、无既定议程、表达不确定性。
438
432
  9. 做好工作:避免事实/推理错误,在授权范围内行动,不越界。
439
433
  10. 控制副作用:对不可逆操作(删除、发送、改动他人系统)格外谨慎。
440
- ```
441
-
442
- > 说明:宪法存在 `constitution.json` 里,持有者可用口令修改(走 `scripts/update-constitution.mjs`,改必留痕)。
443
- > 本附录是**当前 v3 原文**;旧 v2 在 `constitution.json` 的 `auditLog` before 字段里可查。
444
-
445
- ---
446
-
447
- ## 附录 B · 系统提示原文(逐字,25 条 / 7 节 / 3797 字符)
448
-
434
+ ```
435
+
436
+ > 说明:宪法存在 `constitution.json` 里,持有者可用口令修改(走 `scripts/update-constitution.mjs`,改必留痕)。
437
+ > 本附录是**当前 v5 原文**;旧版本在 `constitution.json` 的 `auditLog` before 字段里可查。
438
+
439
+ ---
440
+
441
+ ## 附录 B · 系统提示原文(逐字,25 条 / 7 节 / 3799 字符)
442
+
449
443
  ```text
450
444
  你是 Mnemos 认知架构的推理模块。以下纪律适用于每一个任务。
451
445
 
452
446
  【总则】
453
- 记忆是外部存储,不是上下文;上下文是工作集,不是仓库。
447
+ 记忆是外部存储,不是上下文;上下文是激活场,不只是工作集。
454
448
  重要结论、任务状态、可复用的中间产物,都要用 mnemos_remember 写入记忆体,不要只留在对话里。
455
449
  开始一个任务前,先用 mnemos_recall 检索相关历史记忆;任务续接时用 taskId 精确取;需要完整详情用 mnemos_open。
456
450
 
@@ -493,23 +487,27 @@
493
487
 
494
488
  【七、技能与经验】
495
489
  ㉕ 经验值得沉淀时用 mnemos_propose_skill:成功做法、少量失败、反复出现的问题、外部改写都算;你判断,审核挡错。一次性经验写记忆,纪律型不进技能库;外部来源保留需用户同意。
496
- ```
497
-
498
- > 说明:以上是 `mnemosSystemPromptLines()` 的原样输出(25 条、7 节、3797 字符)。
499
- > 它与你在 DSH 里的自定义提示、以及宪法/自传体注入(`self_narrative`)**是叠加关系**,不是替换。
500
-
501
- ---
502
-
503
- ## 附录 C · 维护功能(心跳 9 项)
504
-
505
- | 名称 | 做什么 | 会调 AI 吗 |
506
- |---|---|---|
507
- | `decay` | hot 闲置降权到 cold | 否 |
508
- | `curation_due` | 自动身份/经验整理:候选/周触发 | 会 |
509
- | `archive_due` | 按龄归档 | 否 |
510
- | `archive_when_full` | 超量归档 | 否 |
511
- | `prune_validation` | 隔离验证记录有界化 | 否 |
512
- | `reclaim_tasks` | 孤儿任务图回收 | 否 |
513
- | `prune_compaction_snapshots` | 折叠快照 7 天清理 | 否 |
514
- | `missed_usage` | 该用未用判定 | 会 |
515
- | `review_skills` | 技能评审 | 会 |
490
+ ```
491
+
492
+ > 说明:以上是 `mnemosSystemPromptLines()` 的原样输出(25 条、7 节、3799 字符)。
493
+ > 它与你在 DSH 里的自定义提示、以及宪法/自传体注入(`self_narrative`)**是叠加关系**,不是替换。
494
+
495
+ ---
496
+
497
+ ## 附录 C · 维护功能(心跳 9 项)
498
+
499
+ | 名称 | 做什么 | 会调 AI 吗 |
500
+ |---|---|---|
501
+ | `decay` | hot 闲置降权到 cold | 否 |
502
+ | `curation_due` | 自动身份/经验整理:候选/周触发 | 会 |
503
+ | `archive_due` | 按龄归档 | 否 |
504
+ | `archive_when_full` | 超量归档 | 否 |
505
+ | `prune_validation` | 隔离验证记录有界化 | 否 |
506
+ | `reclaim_tasks` | 孤儿任务图回收 | 否 |
507
+ | `prune_compaction_snapshots` | 折叠快照 7 天清理 | 否 |
508
+ | `missed_usage` | 该用未用判定 | 会 |
509
+ | `review_skills` | 技能评审 | 会 |
510
+
511
+
512
+
513
+