dsh-mnemos-continuity 1.6.1 → 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.
Files changed (31) hide show
  1. package/INSTALL.md +23 -153
  2. package/README.en.md +11 -7
  3. package/README.md +28 -21
  4. package/VERSION.md +48 -83
  5. package/docs/00-/346/236/266/346/236/204/346/200/273/350/247/210.md +243 -0
  6. package/docs/01-/347/256/200/344/273/213.md +277 -0
  7. package/docs/02-architecture-/346/234/272/345/210/266/346/270/205/345/215/225.md +136 -0
  8. package/docs/03-/350/256/276/350/256/241/350/200/205/350/247/206/350/247/222.md +403 -0
  9. package/docs/04-/346/250/241/345/235/227/344/270/216/345/212/237/350/203/275/345/256/236/347/216/260.md +513 -0
  10. package/docs//346/250/241/345/235/227/344/270/216/345/212/237/350/203/275/345/256/236/347/216/260.md +136 -128
  11. package/package.json +3 -2
  12. package/src/curation-dispatch.js +32 -0
  13. package/src/curation-trigger.js +89 -0
  14. package/src/fansearch.js +397 -0
  15. package/src/heartbeat.js +32 -15
  16. package/src/index.js +397 -403
  17. package/src/self-text.js +7 -5
  18. package/src/skill-miss.js +9 -3
  19. package/src/skill-review.js +48 -11
  20. package/src/store.js +662 -152
  21. package/src/system-prompt.js +4 -4
  22. package/src/tool-output.js +8 -27
  23. package/src/tool-results.js +20 -34
  24. package/src/trust-label.js +36 -0
  25. package/docs/architecture-/346/234/272/345/210/266/346/270/205/345/215/225.docx +0 -0
  26. package/docs//346/236/266/346/236/204/346/200/273/350/247/210.docx +0 -0
  27. package/docs//347/256/200/344/273/213-introduction.docx +0 -0
  28. package/docs//350/256/276/350/256/241/350/200/205/350/247/206/350/247/222.docx +0 -0
  29. package/examples/skills/host-interface-verification.md +0 -15
  30. package/examples/skills/outside-workspace-file-ops.md +0 -16
  31. package/src/learner-loop.js +0 -807
package/INSTALL.md CHANGED
@@ -1,4 +1,4 @@
1
- # 安装与配置 Mnemos
1
+ # 安装与配置 Mnemos(v1.7.1)
2
2
 
3
3
  > 这份文件只写**你要做的事**:装、配、验证、排错、数据放哪。
4
4
  > 它是什么、值不值得用 → `docs/简介`;有什么机制 → `docs/architecture-机制清单`;为什么这样设计 → `docs/设计者视角`。
@@ -19,7 +19,7 @@ Mnemos 是**装在你机器上的一套「让判断跨会话、跨模型继续
19
19
 
20
20
  > **保守起步(推荐第一次就这么做)**:装完先关掉后台维护 —— `heartbeatEnabled: false`(见第 10 节),
21
21
  > 只留"写记忆 / 召回 / 任务续接",确认对你真有用再一项项开回来。
22
- > 空闲学习(learner)本来就是默认关的。这样第一晚不会有任何自动的 AI 调用,也就不会有惊喜账单。
22
+ > 空闲学习已在 v1.7.1 移除,开放任务改由宿主自动化任务承担;所以第一晚不会有 learner 的自动 AI 调用。
23
23
  >
24
24
  > **关掉之后还剩什么**(这张表就是"保守起步"的全部代价,先看清再决定):
25
25
  >
@@ -222,7 +222,6 @@ $env:ELECTRON_RUN_AS_NODE = 1
222
222
  | `mnemos_propose_skill` | 提议新建技能(failure-fixed 要反例+正例;memory-recurring 要 ≥3 个跨会话事件、正反例至少一种;external-rewrite 要来源记录,且默认只暂存、保留需你确认) |
223
223
  | `mnemos_task_open` / `mnemos_task_update` / `mnemos_task_close` / `mnemos_task_done` / `mnemos_task_cite` | 任务图(任务档案/寻址空间):开图 / 填回执 / 收尾 / 记已完成里程碑 / 登记依赖 —— 派活、跨会话、或会产出多条记忆时用;未完成步骤用宿主 todo,图不复制结论正文 |
224
224
  | `mnemos_heartbeat` / `mnemos_maintenance_list` / `mnemos_heartbeat_toggle` | 手动跑一次维护 / 看维护清单 / 关心跳 |
225
- | `mnemos_learner_kick` | 立刻踢一轮空闲学习(诊断用,也可主动触发) |
226
225
 
227
226
  ## 8. 后台维护在做什么(心跳)
228
227
 
@@ -233,142 +232,14 @@ $env:ELECTRON_RUN_AS_NODE = 1
233
232
  **一个定时器跑整张注册表**:`heartbeatIntervalMs` 管的是全部维护任务。
234
233
  运行时开关默认在每轮对话开始时被置回开启;要**持久关闭**,在配置里写 `heartbeatEnabled: false`。
235
234
 
236
- ## 9. 空闲学习(可选,默认关)
235
+ ## 9. 宿主自动化(替代空闲学习)
237
236
 
238
- > **这一节可以整段跳过**:它默认是关的,跳过不影响上面任何一步。只有你打算开它时,才需要读下去 ——
239
- > 下面这些是把它开起来才会遇到的坑(preset、provider 路由、工作目录),不是使用这个插件的前提知识。
237
+ v1.7.1 已移除空闲学习:`learner-loop`、`mnemos_learner_kick`、learner 配置与 preset 都不再存在。
240
238
 
241
- 到点了,它把"一脚"送进一个**专用会话**,让模型自己安排这一轮:读你留的任务,没任务就自由学点,也可以什么都不做。
242
- **不占用、不污染你正在用的对话。**
243
-
244
- ### 两个前提,缺一不可
245
-
246
- | 前提 | 配置 |
247
- |---|---|
248
- | ① 打开开关 | `learnerEnabled: true`(默认 false) |
249
- | ② 配好外部 API | `learnerProvider` + `learnerModel`(**必须**,缺一即不工作;为什么不能用 DeepSeek 自家路由见下) |
250
-
251
- ```yaml
252
- - id: dsh-mnemos
253
- config:
254
- learnerEnabled: true
255
- learnerIntervalMs: 3600000 # 1 小时
256
- learnerProvider: <provider-id> # 必须:带 key 的第三方路由(见下)
257
- learnerModel: <model-id>
258
- learnerAgentPreset: standard # 不设它就没有联网/读文件工具(也可自建精简 preset,见下)
259
- ```
260
-
261
- > **默认用什么模型**:没有默认 —— **必须自己填** `learnerProvider` + `learnerModel`(带 key 的第三方路由),留空即不工作。
262
- > 想让它跑在别的模型上,就显式填 `learnerProvider` + `learnerModel`(必须是带 key 的 provider)。
263
- > 注意:如果你把模型配错(比如配了一个拿不到凭据的 provider),回执与 `learner.log` 会记下失败原因,不会静默。
264
-
265
- ### 我们实际用的接法(可以直接照抄)
266
-
267
- 关键点是:**联网与学习是两套独立的接线,各走各的路由。**
268
-
269
- | 用途 | 走哪条路由 | 为什么 |
270
- |---|---|---|
271
- | **联网**(`web_search` / `web_fetch`) | **DeepSeek 官方**(`web-search-deepseek`,凭据用 `DEEPSEEK_API_KEY`,key 存凭据服务、不写进配置) | 官方端点能真正拿到搜索结果;换第三方 Anthropic 端点会因缺计费头而**拿不到结果**(实测) |
272
- | **空闲学习的模型** | **必须第三方 api-key 路由**(如阿里云 token-plan 的 `qwen3.8-flash`) | 空闲学习是**插件自己建**的 agent:后台几乎不存在活父会话,也就借不到宿主的派活通道;而自建 agent 走 DeepSeek 自家路由会稳定 `TRANSPORT`,第三方 api-key 一次就通。另外宿主派活的子会话会挂在父会话下面、人不好看见 —— 后台任务应当独立可观测 |
273
-
274
- 所以一句话:**官方 key 只用在"搜索"上,不用在 learner 的 LLM 上** —— 两者互不影响,也不用为了联网去动学习模型。
275
-
276
- ```yaml
277
- - id: dsh-mnemos
278
- config:
279
- learnerEnabled: true
280
- learnerIntervalMs: 21600000 # 6 小时;每轮 token 取决于模型自己选的任务(未测量),频率低一点更划算
281
- learnerProvider: aliyun # ★ 第三方 api-key 路由(必须)
282
- learnerModel: qwen3.8-flash
283
- # 留空 = 不工作:后台没有主会话可借,也不会退回 DeepSeek 自家路由
284
- learnerAgentPreset: standard # 出厂 preset(带联网/读文件);要收窄再自建,见下
285
- ```
286
-
287
- > **为什么必须是第三方路由**:空闲学习是**插件自己建**的 agent —— 后台运行时几乎不存在"活着的父会话",
288
- > 所以借不到宿主的派活通道;而自建 agent 走 DeepSeek 自家路由会稳定 `TRANSPORT`(实测 5 次重试全败),
289
- > 走第三方 api-key 路由一次就通。另一条理由:宿主派活的子会话挂在**父会话的智能体**下面,人不好看见。
290
-
291
- ### 工具集由 preset 决定
292
-
293
- **不设 `learnerAgentPreset` 时,默认就是 `standard`** —— 它带联网与读文件工具,能正常学习。
294
- 只有当你**想收窄**工具集(比如不想要 shell / 子代理 / 待办这些),才需要自建一个精简 preset。
295
-
296
- 照抄这一行就够用:
297
-
298
- ```yaml
299
- learnerAgentPreset: standard
300
- ```
301
-
302
- 想更克制(只留 **联网 + 读文件 + Mnemos 自己的工具**),自己声明一个再引用它 ——
303
- 把它和 `dsh-mnemos-continuity` 写进**同一份** `cordis.patch.yml`:
304
-
305
- ```yaml
306
- - insert:
307
- - id: preset-mnemos-learner
308
- name: "@deepseek-ai/dsh-agent-preset"
309
- config:
310
- id: mnemos-learner
311
- plugins:
312
- - id: persona # ★ 必须:没它连 {{model}} 都没有值,整轮直接报错
313
- name: "@deepseek-ai/dsh-persona"
314
- config:
315
- prefix: 'You are a coding agent powered by the {{model}} model.'
316
- # ★ 不要写 {{cwd}}:宿主的提示变量只有 provider / model / self_narrative,
317
- # {{cwd}} 会让子会话**第一轮就整轮失败**(unknown prompt variable)。
318
- suffix: 'Work inside the configured learner workspace; do not wander outside it.'
319
- - id: tool-fs # 读文件(同包也带 write/edit,拆不开)
320
- name: "@deepseek-ai/dsh-tool-fs"
321
- - id: tool-fs-search # glob / grep
322
- name: "@deepseek-ai/dsh-tool-fs-search"
323
- - id: tool-web # web_search / web_fetch
324
- name: "@deepseek-ai/dsh-tool-web"
325
- config:
326
- fetch: true
327
- - id: tool-todo # 宿主任务清单(系统提示 ㉔ 的"未完成步骤")
328
- name: "@deepseek-ai/dsh-tool-todo"
329
- config:
330
- allowParallelInProgress: true
331
- ```
332
-
333
- > `tool-todo` 是 v1.6 补上的:系统提示 ㉔ 要求未完成步骤写宿主 todo;没有它,learner 只能开图、却无法按规则记录未完成步骤。
334
- >
335
- > 另外,空闲任务的提醒会明确**禁止申请提权/审批**:用户不在旁边,提权请求会把这一轮卡住;需要提权的操作应跳过并回报。
336
-
337
- 然后 `learnerAgentPreset: mnemos-learner`。**两个坑**:
338
-
339
- 1. preset 里 `persona` 必须带上 —— 没它 `{{model}}` 就没有值、整轮报错。
340
- **但 persona 里别写 `{{cwd}}`**:宿主只注册了 `provider` / `model` / `self_narrative` 三个提示变量,
341
- 写 `{{cwd}}` 会让子会话第一轮就失败(这条是实测踩出来的);
342
- 2. **换 preset 后要先删掉旧的 learner 会话** —— 宿主只在"会话第一轮之前"选 preset,已跑过的会话不会补挂。
343
-
344
- ### 想立刻看它跑一轮
345
-
346
- 用 `mnemos_learner_kick`(`force: true` 可忽略间隔)。它会把**每一步的真实结果**回报:到点判定 / 新建还是恢复会话 / 是否选中 preset / 入队是否成功 / 入队后状态。
347
-
348
- ### 任务文件(你写,它读)
349
-
350
- 首次开启会自动生成(也可用 `learnerTasksFile` 指定):`<memory.json 同目录>\learner-tasks.md`。
351
-
352
- - 写**开放学习类**的事("把 X 弄明白"),不用写成工单;
353
- - **每次到点,文件内容原样送给模型**;文件开头的说明是 HTML 注释,不会当成任务送出去;
354
- - **这个文件归你管**:想让某件事别再做了,你自己把那段删掉。
355
- ⚠ 说准一点:它手上确实有写工具,改不动是因为**这个文件在它的工作区之外、越界写会被拒** ——
356
- 是沙箱挡住的,不是"机制保证它改不了"。
357
-
358
- ### 两条实测边界(值得先知道)
359
-
360
- - **自指工具已加闸门**:弱模型会把 `mnemos_learner_kick` 当成"今天的任务",连踢三轮零产出。现在这个工具在**执行处**拒绝 learner 会话自己调用它。
361
- - **它发来的提权请求可以直接拒绝**:看到 `mnemos-learner` 请求提权,拒绝即可。
362
-
363
- ### 它靠什么、不靠什么
364
-
365
- - **结论落记忆,不落会话** —— 专用会话被删也能重建,成果不丢;
366
- - 同一时刻只用一个会话,残留会被清掉后重建,不会越堆越多;
367
- - 它**不打断**正在忙的 agent(忙就跳过这一轮);
368
- - **每一轮都用一个(可能是全新的)会话**:不 resume 旧会话 —— resume 出来的会话补不上工具集
369
- (实测踩过:`read`/`glob` 全变 `unknown tool`)。回执与日志里可能看到"会话重建"。
370
- 换会话不影响结论 —— 能留下来的只有写进记忆的东西。
239
+ 开放任务改由**宿主自动化任务**承担:用宿主定时任务给主模型发提示,会话按正常流程 recall / 写记忆。
240
+ 不再需要 `learnerProvider` / `learnerModel` / `learnerAgentPreset` / `learnerTasksFile`,也不需要专用 learner 会话。
371
241
 
242
+ 自动 curation 也不再依赖 `auxProvider`:它找一个空闲会话,注入一次 `mnemos_curate`;没有空闲会话就跳过。
372
243
  ## 10. 配置项(完整清单)
373
244
 
374
245
  写在 `~/.dsh/profiles/<name>/cordis.patch.yml`:
@@ -379,27 +250,25 @@ learnerAgentPreset: standard
379
250
  # —— 存储 ——
380
251
  dataFile: "" # 记忆文件路径;留空 = 自动解析(见第 11 节)
381
252
  constitutionFile: "" # 宪法路径;默认与 dataFile 同目录
382
- autobiographyBudget: 2000 # 自传体注入的字符预算
253
+ autobiographyBudget: 2000 # 自传体注入字符预算;身份固定,决策/经验按预算
383
254
  # —— 心跳与归档 ——
384
255
  heartbeatIntervalMs: 1800000 # 心跳周期(毫秒),默认 30 分钟;0 = 禁用
385
256
  heartbeatEnabled: true # 心跳初值;false = 持久关闭
257
+ curationEnabled: true # 自动身份/经验整理;false = 关闭
258
+ identityCandidateTrigger: 5 # 身份候选达到多少条触发整理
259
+ identityFallbackDays: 30 # 候选不足 5 条时的 30 天兜底
260
+ experienceIntervalDays: 7 # 经验整理周期(天);不按条数触发
386
261
  archiveMinAgeMs: 86400000 # 归档时间阈值(默认 24 小时)
387
262
  archiveMaxShort: 50 # 短时记忆数量阈值
388
- # —— 空闲学习(默认关) ——
389
- learnerEnabled: false # ★ 默认关;开它必须同时配 provider + model
390
- learnerIntervalMs: 3600000 # 间隔(毫秒);0 = 关掉
391
- learnerSessionId: "mnemos-learner" # 专用会话 id(代码自建)
392
- learnerAgentPreset: "standard" # ★ 决定有没有联网/读文件工具
393
- learnerTasksFile: "" # 任务文件;留空 = memory.json 同目录
394
- learnerWorkspace: "" # 会话工作目录;留空 = DSH 默认工作区
395
- learnerProvider: "" # 留空 = 不工作(必须配第三方 api-key 路由)
396
- learnerModel: "" # 留空 = 不工作
397
- learnerMaxTokens: 0 # 0 = 继承全局 agent 配置
263
+ # 联想激活(实验性;当前代码读取 fansearchEnabled,但尚未正式写入 Config schema)
264
+ # fansearchEnabled: true # 工具执行后附注候选 id + 摘要片段;默认关
265
+ # —— 辅助路由(validation 兜底;自动 curation 已改为空闲会话注入,不用这里)——
266
+ auxProvider: "" # 留空 = 走父会话/主模型
267
+ auxModel: "" # 留空 = 走父会话/主模型
398
268
  # —— 隔离验证(mnemos_validate)——
399
- # 子会话必须有自己的 provider/model;留空 = 复用 learnerProvider/learnerModel(推荐),再不行才用父会话的。
400
- # ★ 不要指望它跟父会话走 DeepSeek 自家路由:实测那条路对"插件自建 agent"一律 TRANSPORT 失败。
401
- validateProvider: "" # 留空 = 复用 learnerProvider
402
- validateModel: "" # 留空 = 复用 learnerModel
269
+ # 留空 = 父会话;再不行才用 auxProvider/auxModel。
270
+ validateProvider: "" # 隔离验证 provider
271
+ validateModel: "" # 隔离验证 model
403
272
  # —— 技能 ——
404
273
  createWriteBack: true # 新建技能是否直接入目录
405
274
  externalSkillWriteBack: false # 外部来源技能是否允许自动入目录(默认只暂存,等你确认)
@@ -442,7 +311,7 @@ learnerAgentPreset: standard
442
311
  | 装了但行为像旧版 | 还是缓存:完全退出再启动,别用"重新加载窗口" |
443
312
  | 出现"宪法 · 未初始化"警告 | 三种原因:① 第 5 节没做;② `constitutionFile` 指错路径;③ **第 5 节做了但没再完全重启一次**(宪法只在启动时装载) |
444
313
  | 记忆"空了" | 看日志里的 `dataFile=` —— 大概率是路径指到别处,数据本身没丢 |
445
- | 检索明显不准 | 召回是**关键词 + 标签**匹配(不是语义检索):换关键词试,并检查标签是否覆盖关键类别 |
314
+ | 检索明显不准 | 任务召回是**关键词 + 标签**匹配(不是语义检索):换关键词试,并检查标签是否覆盖关键类别;联想候选是实验性搭车线索,可能无关 |
446
315
  | 技能一直不变好 | `reviewProvider` / `reviewModel` 不可用 → 评审静默失败(技能不会变差,但也不会变好)。v1.6 起**没有"冻结"这回事**了,别去 `skill-review-state.json` 里找 |
447
316
  | 子代理说"文件不存在"但明明有 | `glob` 用**绝对 Windows 路径**会静默返回 `No files found`。改用 `pwsh Get-ChildItem -File -Filter *.js` 或相对工作区根的路径。**静默假阴性比报错更危险** |
448
317
  | 任务的临时结果在收尾时没了 | 那是设计:临时的默认丢弃,要留请显式标记。交付物别同时标成临时 |
@@ -453,4 +322,5 @@ learnerAgentPreset: standard
453
322
  **所以覆盖安装不会碰到你的记忆**:数据在 profile 目录下,与代码目录分开。
454
323
 
455
324
  > **使用限制与责任**:这套能力在善意使用下是效率工具,恶意使用会放大后果 —— 四类风险与责任划分
456
- > 见 README 的「**风险与责任**」一节(很短,建议开空闲学习或联网前读一遍)。
325
+ > 见 README 的「**风险与责任**」一节(很短,建议开自动化或联网前读一遍)。
326
+
package/README.en.md CHANGED
@@ -1,4 +1,6 @@
1
- # Mnemos
1
+ # Mnemos (v1.7.1)
2
+
3
+ > **v1.7.1 focus:** it is not about storing more memory; it is about **which memories the system actually controls**. Self-narrative (experience/decision/event) is most trusted because it is inspectable and correctable; ordinary memory sits in the middle; external information is least trusted because it cannot be confirmed or overturned easily. Constitution v5 adds the trust/control, body-vs-instrument, and context-positioning statements; red lines are unchanged. Idle learning was removed in favor of host automation.
2
4
 
3
5
  **A DeepSeek Harness (DSH) plugin — not a bigger memory store, but memory that stays usable after you switch sessions, directories, or models.**
4
6
 
@@ -11,7 +13,7 @@ Mnemos is installed **into** [DeepSeek Harness](https://github.com/deepseek-ai/d
11
13
  ## What you get
12
14
 
13
15
  - **Continue a task in a new session** — new session, new working directory: say "continue with X" and it picks the relevant conclusions back up (no ids to memorize).
14
- - **Task graph as a dossier/address space** — the graph stores **pointers, not copied text**: completed milestones, dependency ids and conclusion ids, whether the work is delegated or done by the main agent. Sub-agents read it by id; one writer, nothing overwritten.
16
+ - **Task graph as a foundational mechanism** — one memory record carries task address space, working memory (own/delegated), a dossier/trace entry, and event/decision source anchors. It stores **pointers, not copied text**: completed milestones, dependency ids and conclusion ids. One writer; close writes a closure event and does not merge members.
15
17
  - **Skills are compiled experience** — a reusable practice can come from a fixed failure, a recurring problem in memory (≥3 events across ≥2 sessions), or an external rewrite. External skills stay in `skill-proposals/` until you approve them.
16
18
  - **External information is auditable** — fetched content is treated as untrusted, verified in a restricted one-shot session, and stored with its provenance permanently attached.
17
19
  - **Context compaction is a short-term fallback, not long-term memory** — the plugin writes only a fact card (no 4K raw text) plus a notice carrying the top negative conclusions/tool failures; the fact card expires after 7 days.
@@ -40,8 +42,8 @@ the `continuity` in the package name is the point: **judgement survives the mode
40
42
 
41
43
  - Memory is **local plain-text files** (JSON): back them up yourself; do not put secrets in memory.
42
44
  - Background maintenance is on by default and **some steps call an AI model** (cost); it can be disabled entirely.
43
- - Recall is **keyword + tag** matching — deterministic and auditable, **no semantic search**. Something you wrote may not be recalled; that is a known trade-off.
44
- - **Not measured yet**: recall quality, scale latency, unit cost, long-term learning effects, multi-machine use.
45
+ - Recall is **keyword + tag** matching for task activation — deterministic and auditable, **no semantic search**. Something you wrote may not be recalled; that is a known trade-off. v1.7 also has experimental associative hints after tool calls; they may be irrelevant and are not a guarantee.
46
+ - **Not measured yet**: task recall quality, associative-hint quality, scale latency, unit cost, long-term learning effects, multi-machine use. DSH 0.2.1-rc.5 was tested; 0.2.2-alpha.2 plugin-API migration is not yet implemented.
45
47
  - Some reliability rests on discipline (the agent's own habits), not on mechanisms. We say so instead of claiming otherwise.
46
48
 
47
49
  ## Risks and responsibility
@@ -61,10 +63,12 @@ Full statement (Chinese): [`README.md`](README.md) → 风险与责任.
61
63
  |---|---|
62
64
  | What it is, what it costs, should you use it | [`README.md`](README.md) (Chinese) |
63
65
  | Install / configure / tools / data location / troubleshooting | [`INSTALL.md`](INSTALL.md) |
64
- | Architecture, data flow, one task end-to-end | `docs/架构总览.docx` |
65
- | Every mechanism and its guarantees/limits | `docs/architecture-机制清单.docx` |
66
+ | Architecture, data flow, one task end-to-end | `docs/架构总览.md` |
67
+ | Every mechanism and its guarantees/limits | `docs/architecture-机制清单.md` |
66
68
  | **Module-by-module implementation** (appendix: the constitution and the system prompt, verbatim) | [`docs/模块与功能实现.md`](docs/模块与功能实现.md) |
67
- | Why it is shaped this way | `docs/设计者视角.docx` |
69
+ | Why it is shaped this way | `docs/设计者视角.md` |
70
+
71
+ > The release ships Markdown docs only; docx/pdf are not bundled.
68
72
 
69
73
  ## License
70
74
 
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Mnemos
1
+ # Mnemos(v1.7.1)
2
2
 
3
3
  [English](README.en.md) | 中文
4
4
 
@@ -11,6 +11,11 @@
11
11
 
12
12
  > 一句话:**它想让"判断"能被人查、被人质疑、也能被推翻 —— 而不是看完就忘、错了也没处追。**
13
13
 
14
+ > **v1.7.1 的核心不是“记得更多”,而是“分清掌控权”**:
15
+ > 哪些记忆是我自己生成、能检查、能修正的;哪些只是外部文本、连是否错误都难以确认;哪些工具身体属于我,哪些只是外部器械。
16
+ > 自传体(经验/决策/事件)信任最高,因为它最可修正;外部信息信任最低,不是因为它一定错,而是因为系统无法确认它。
17
+ > 记忆的价值不在存量,而在**系统能掌握什么、不能掌握什么**。
18
+
14
19
  > **DeepSeek Harness(下称 DSH)是什么**:一个在**你自己电脑上**跑 AI 助手的环境 —— 负责会话、工具和插件,
15
20
  > 有**桌面客户端**也有**命令行**两种用法。Mnemos 是装进它的一个插件,**不是**独立软件,也**不能**用在网页版或手机 App 上。
16
21
  >
@@ -49,17 +54,18 @@
49
54
  - **成果不散**:几路的结果归到同一份任务记录上,事后按编号能一次取全;
50
55
  - **没做完的不会被当成做完**:哪一路没交回结论,会如实标出来;忘了收尾的任务也不会一直挂着。
51
56
 
52
- ### ③ 任务图:跨会话也知道"做到哪、依据什么"
57
+ ### ③ 任务图:底层机制,不只是协作工具
53
58
 
54
- 任务图不是多 agent 专用,也不只是待办清单;它是任务的**档案/寻址空间**。
59
+ 任务图不是多 agent 专用,也不只是待办清单;它是**任务寻址空间 + 部分工作记忆 + 档案/追查入口 + 事件/决策来源锚点**。
55
60
 
56
61
  **它不是把原文存进去,而是存"地址"**:记忆 id、依赖 id、结论 id、前序图 id;正文留在原记忆,删了被引用的记忆,图里那条也随之消失。
57
62
 
58
- - **什么时候开**:会跨会话、会被折叠后接着做、或会产出多条以后要找的记忆时;单步小事直接写记忆,别开;
59
- - **记什么**:已完成里程碑(done)、依赖(uses)、前序图(links)、重要结论的 id(`conclusion` 标签);**不复制正文**;
60
- - **不记什么**:未完成步骤仍用宿主 todo;图和任务清单不要互为镜像;
61
- - **跨会话**:开新图,用 `links` 链接旧图并写清"为什么接上它",不改旧图;
62
- - **好处**:换会话/换模型后,能说清"哪块做完了、用了什么、结论在哪";收尾时汇成一条任务结果,连同会话存档保留。
63
+ - **任务寻址**:`taskId` / `graphId`;开图、填回执、收尾、里程碑、依赖;
64
+ - **工作记忆**:自己的事(goal/done/uses/links)和协作的事(assignments/handoff/未完成分工);未完成步骤仍用宿主 todo;
65
+ - **档案/追查**:摘要命中后按 `graphId` open 图,核对 `uses/links/origin`;图是追查入口,摘要不是完整证据;
66
+ - **来源锚点**:事件、决策、curation 条目带 `origin` / `graphId`;
67
+ - **归档闸门**:open task 下的短时记录不被自动归档;close 只写收尾 event、成员转 cold,不合并成员;
68
+ - **单写者**:只有创建图的会话能 update/close;跨会话用 `links` 接前序图,不改旧图。
63
69
 
64
70
  ### ④ 外面来的东西留下出处,而不是被当真
65
71
 
@@ -107,21 +113,23 @@
107
113
  ## 代价与边界(用前必读)
108
114
 
109
115
  - 记忆是**本地明文文件**:自己备份;不要往里粘密码/密钥。要备份哪几个文件、怎么卸载/回滚 → INSTALL 第 3 / 11 节;
110
- - **每轮会固定注入一点东西**:纪律提示约 3.5k 字符 + 自传体摘要(默认上限 2000 字符)—— 这部分算在你的输入里。
116
+ - **每轮会固定注入一点东西**:纪律提示约 3799 字符 + 自传体摘要(预算可调)—— 这部分算在你的输入里。
111
117
  自传体的预算可调;**纪律那段没有开关**(诚实说:它和你在 profile 里的自定义提示会叠加,目前没有冲突检测);
112
118
  - 后台维护默认开(约 30 分钟一轮),其中两项**会调用 AI** → 有成本,且会把技能正文、相关记忆、你的原始反馈
113
119
  发给你配置的那个评审模型服务商;**可以整体关掉,也可以只关评审**(见 INSTALL)。**具体金额没有测量过**(已知缺口);
114
120
  **想稳妥起步:装完第一件事就把它关掉**(`heartbeatEnabled: false`,见 INSTALL 第 10 节),只留记忆,
115
121
  确认有用了再开回来。**关掉后哪些还能用、哪些会失效,INSTALL 开头有一张对照表**;
116
- - **空闲学习默认关**;开启后每轮都会调用一次模型(用你单独给它配的路由,**需要外部 API key**)→ 有成本;
117
- - 检索是**关键词 + 标签**匹配,不是语义检索:**写了但召不回是可能的**;
122
+ - **空闲学习已移除**:v1.7.1 删除了 learner-loop / `mnemos_learner_kick` / learner 配置与 preset;
123
+ 开放任务由**宿主自动化任务**(定时给主模型发提示)替代,不再需要单独的第三方 API 路由此;
124
+ - **自动 curation 不再依赖第三方 API**:它找空闲会话并注入 `mnemos_curate`;没有空闲会话就跳过;
125
+ - **任务召回是关键词 + 标签**匹配,不是语义检索:**写了但召不回是可能的**;v1.7 另有实验性的联想候选(工具后附注,可能无关,不保证命中);
118
126
  - **技能的三种来源**:失败→修好(要反例+正例)、记忆里反复出现的问题(≥3 个跨会话事件)、外部技能改写(自己搜到或你给的)。**外部来源默认只进 `skill-proposals/`,保留要你确认**;想让它自动落盘得显式开 `externalSkillWriteBack`;
119
127
  - **折叠快照只做 7 天短期兜底**:记忆只存事实卡(不存 4K 原文),提醒直接带 top3 负面结论/工具失败;**不保证模型会 open**,提醒是唯一保证通道;
120
128
  - **会话存档默认不进检索**:它是给人回看的快照(可能很大),错召回一次就会吃掉大量上下文;
121
129
  要看时用 `mnemos_open` 打开存档 id,或显式传 `includeArchives:true`;
122
130
  - 一部分可靠性**靠纪律而不是机制**:结论有没有写进记忆、要不要召回到位 —— 所以偶尔自己提醒一句"这个记一下"更稳;
123
- - **尚未测量**:召回质量、规模延迟、单位成本、学习闭环的长期效果、多机共用、经验可迁移性;
124
- **也没有记录"测过哪些 DSH 版本"**(依赖宿主内部行为的部分,宿主升级后可能先坏)—— 这是已知缺口。
131
+ - **尚未测量**:任务召回质量、联想候选质量、规模延迟、单位成本、学习闭环的长期效果、多机共用、经验可迁移性;
132
+ 当前已实测 DSH **0.2.1-rc.5**;0.2.2-alpha.2 的插件 API 迁移项尚未适配(session projection / Timer / tools.resolve / agent.model)—— 升级前需单独核对。
125
133
 
126
134
  ## 风险与责任
127
135
 
@@ -134,7 +142,7 @@ Mnemos 是通用认知架构:身份、记忆、技能、调度**不预设用
134
142
  既不能假定它压得住原生对齐,也不能假定原生对齐一定压得住它。
135
143
  2. **记忆跨会话积累**:长期、跨会话、跨模型的记忆,会让错误或恶意经验变成"**可复用的经验**"。
136
144
  3. **可调度别的模型**:主模型能派子代理干活,而**任务的真实意图可以不写在 prompt 里**(靠记忆传递),外部很难看出来。
137
- 4. **可无人值守运行**:心跳与空闲学习能定时醒、持续跑 —— **你不在场时它也在动**。
145
+ 4. **可无人值守运行**:心跳与宿主自动化任务能定时醒、持续跑 —— **你不在场时它也在动**。
138
146
 
139
147
  还有一条常被低估的:**联网抓来的内容可能自带指令**。所以我们把它关进隔离间 —— 但那只降低风险,不消除风险。
140
148
 
@@ -177,7 +185,6 @@ dsh plugin --profile web add dsh-mnemos-continuity
177
185
  dataFile: C:\Users\<你>\.dsh\profiles\desktop\mnemos\memory.json
178
186
  constitutionFile: C:\Users\<你>\.dsh\profiles\desktop\mnemos\constitution.json
179
187
  heartbeatEnabled: false # 后台维护只留给桌面端
180
- learnerEnabled: false
181
188
  reviewEnabled: false
182
189
  ```
183
190
 
@@ -195,16 +202,16 @@ dsh plugin --profile web add dsh-mnemos-continuity
195
202
 
196
203
  | 你想干什么 | 读哪份 |
197
204
  |---|---|
198
- | 判断该不该用 | `docs/简介-introduction.docx`(未打包时读同名 `.md`) |
199
- | **先看它由什么组成、怎么跑起来** | `docs/架构总览.docx` |
205
+ | 判断该不该用 | `docs/简介-introduction.md` |
206
+ | **先看它由什么组成、怎么跑起来** | `docs/架构总览.md` |
200
207
  | 装它 / 查配置 | [`INSTALL.md`](INSTALL.md) |
201
- | 看它**有哪些机制**、各自保证什么、边界在哪 | `docs/architecture-机制清单.docx` |
202
- | 知道**为什么**这样设计 | `docs/设计者视角.docx` |
208
+ | 看它**有哪些机制**、各自保证什么、边界在哪 | `docs/architecture-机制清单.md` |
209
+ | 知道**为什么**这样设计 | `docs/设计者视角.md` |
203
210
  | **想读代码 / 改代码**:每个模块有哪些功能、具体怎么实现 | `docs/模块与功能实现.md`(**纯 Markdown**,附录含宪法原文与系统提示原文) |
204
211
  | 确认这是哪一版 | 发行目录根部的 `VERSION.md` |
205
212
 
206
- > `docs/*.docx` 由打包步骤从同名 `.md` 生成;发行包里开 docx,源码仓库里读 `.md`。
207
- > 分不清哪份是当前版时:**源码仓库看 `对外文档-v1.5/` 下的 `.md`;发行目录看根部 `VERSION.md` 里写的版本号与文件清单。**
213
+ > 发布包只带 `.md` 文档,不再附带 docx/pdf,避免重复占空间;内容以 Markdown 为准。
214
+ > 分不清哪份是当前版时:**源码仓库看 `对外文档-v1.7/` 下的 `.md`;发行目录看根部 `VERSION.md` 里写的版本号与文件清单。**
208
215
 
209
216
  ## License
210
217
 
package/VERSION.md CHANGED
@@ -1,83 +1,48 @@
1
- # 版本标识 · Mnemos v1.6.1
2
-
3
- | 项 | 值 |
4
- |---|---|
5
- | **版本** | **v1.6.1**(`package.json` 的 `version`)—— 见下方「版本流水」 |
6
- | 本目录 | **当前发行副本**(可发布内容;解压后即成为 `<你的路径>\mnemos\`) |
7
- | 打包日期 | 2026-10-23(**npm 1.6.1 已发布;rar 本日重打**) |
8
- | 构成 | `src` **26 个模块** + `scripts` 4 个 + `test` 1 个 + `docs` **npm 5 件 / 发行 rar 9 件**(4 套 docx,rar 另有 4 份 pdf,外加 1 份纯 md)+ 2 个示例技能;工具 **19** 个;心跳 **8** 项 |
9
- | 文档 | `简介-introduction`(是什么·该不该用)· `架构总览`(部件与数据流)· `architecture-机制清单`(每个机制保证什么、边界在哪)· `设计者视角`(为什么这样设计,按设计目标重写) |
10
- | 对应压缩包 | 本版已重打:`发行备份\current\mnemos.rar`(2026-10-23) |
11
- | 同版本存档 | `历史版本\v1.6.1\`(rar + VERSION) |
12
-
13
-
14
- ## 版本流水
15
-
16
- | 版本 | 内容 | 性质 |
17
- |---|---|---|
18
- | **v1.6.1**(本版) | **元数据修正版**:npm 1.6.0 的 `VERSION.md` 仍是发布前“未发布”文本(先 publish 后改 VERSION 的发布顺序错误);本版只修正 `VERSION.md` 与 `package.json` 版本号,**无代码/行为变化**。测试仍 **1330 / 0** | ✅ 包:`package.json` / `VERSION.md`;文档:VERSION |
19
- | **v1.6.0**(历史) | **认知架构收口(已发布 2026-10-23)**:① 任务图升级为「任务档案/寻址空间」(done/uses/links + 读时投影 + 上限代码强制;新增 task_done/task_cite,工具 19);② 技能体补入口与三档来源(失败→修好 / 记忆反复 / 外部改写;外部默认只暂存、保留需用户确认);③ 评审状态记录 lastApplied、外部写入可见(refresh)、learner 不再误回滚换代、评审/验证解析失败三态;④ pending 台账(外来不记账、status、去重、过期清理);⑤ 折叠快照改短期兜底(事实卡 + 提醒带 top3 + 7 天 TTL);⑥ 系统提示 25 条 / 7 节(约 3.5k 字符;任务图独立成节、多模型协作必须开图;单步小事别开;workflow 交接纪律)。测试 **1330 / 0** | ✅ 代码:`store` / `index` / `skill-review` / `compaction-snapshot` / `system-prompt` 等;文档:README / INSTALL / 四份对外文档 |
20
- | **v1.5.10** | **改 npm 包名(项目名不变)**:`dsh-mnemos` 这个名字在 npm 上**已被另一个独立项目占用**(别人写的、思路不同、不是同一套代码,且发布时间更早)。按用户决定:**项目名仍叫 Mnemos**,npm 包名改为 **`dsh-mnemos-continuity`**(`continuity` 指"换会话、换模型之后判断还能接着用")。同步改动:`cordis.patch.yml` 的 bundle `name`(**entry id 仍保留 `dsh-mnemos`**,故 profile 里的配置覆盖不用动)、INSTALL 五处命令、README 新增一段"名字说明"(含与同名项目的消歧)。本机 `desktop` profile 的 deps / bundles / junction 已改名并**重启实测通过**(工具正常、`profileContext` 正确)。历史存档不动(也不发布)。测试仍 **1225** | ✅ 包:`package.json` / `cordis.patch.yml`;文档:README / INSTALL |
21
- | v1.5.9 | **npm 包瘦身**:`files` 里的 `docs` 改为 `docs/*.docx` + `docs/*.md` —— **npm 包不再带 PDF**(本机 rar 仍保留完整 4 套 docx+pdf,因为那是给下载的发行包)。包体 **2.24 MB → 370.6 KB**、文件数 47 → **43**(docs 仍 5 件:4 份 docx + 1 份模块文档 md)。用户决定:"有一份就够了,没必要提供两份占空间"。除此之外与 v1.5.8 完全相同(含 P0 数据目录修复)。测试仍 **1225** | ✅ 包:`package.json`(files) |
22
- | v1.5.8 | **修数据落点(P0)+ 安装审查的其余条目**:① **P0 默认数据目录解析错** —— 插件原先按 `DSH_PROFILE_DIR → DSH_HOME → cwd` 猜,而那三个在插件进程里都不可靠(`DSH_PROFILE_DIR`/`DSH_HOME` 只注入给 shell 工具不注入插件;桌面版只是碰巧靠 cwd 对)。后果:换启动方式会把记忆写进**别的 profile** 或当前目录(外部安装审查实测写进了另一个 profile)。现改为 **`config.dataFile` > `ctx.get('profileContext').dir` > 环境变量/cwd(兜底)**,启动日志第一依据改成 `profileContext=`;**已用"污染环境变量"的对照实验验证**(临时 profile + 假 DSH_PROFILE_DIR/DSH_HOME/cwd → 仍写进自己的 profile)。② **npm 包会缺全部 docs** → `files` 补 `docs`/`examples`/`VERSION.md`(发行副本 pack 47 文件 / 2.3 MB);③ **宪法初始化要 node 而文档说不需要** → INSTALL 补 `ELECTRON_RUN_AS_NODE=1` + DSH 自带 exe 的无 Node 路径;④ P2:补 `scripts.test`、peer 告警口径改正(所有安装方式都可能出现、无害)、`link:` 路径写明"指到含 package.json 的那一层"、清掉三处"留空跟随主会话"的过时注释、加 `engines.dsh` 声明(**未能证实宿主真的检查它**)。测试仍 **1225** | ✅ 代码:`index.js` / `paths.js`;包:`package.json`;文档:INSTALL / 测试断言 |
23
- | v1.5.7 | **打包形态 + 文档 + 清理**,不改运行行为:① **改造成标准可安装 bundle** —— 去掉 `private`、加 `dsh.bundle.patch`、`peerDependencies` 只留 `schemastery`、`files` 补 `INSTALL.md`;`dsh plugin --profile <p> add` 实测可装(`--dump-config` 里能看到 `dsh-mnemos` 行);② **删掉 learner 回退留下的死代码 156 行**(`makeHostLauncher` / `findLiveParentAgent` / `lastSeenAgent` / `captureSeenAgent` / `launchHostChild`);③ **新增对外文档 `docs/模块与功能实现.md`(纯 md,不生成 docx)** —— 26 个模块逐一说"有哪些功能、怎么实现",**附录逐字给出宪法原文与系统提示原文**;README 文档地图从六份改为七份并加指路;④ **口径对齐**:开场与 INSTALL 首段改成"不是更大的记忆库,而是换模型/换会话后还能高效用上"(不把存记忆当卖点);⑤ **作者信息定案**:`LICENSE` 与 `package.json` 写入「七月流火 <2151926500@qq.com>」(此前发行副本是 `<YOUR NAME>` 占位符);⑥ 内部材料(`V1.5-修复与更新记录.md`)加入同步清理清单,确保不进发行包。测试仍 **1225** | ✅ 代码:`src/index.js`;包:`package.json`、`LICENSE`;文档:README / INSTALL / 简介 / 新增模块文档 |
24
- | v1.5.6 | **行为回退**:空闲学习**回到"必须配第三方 api"的老形式**,不再走宿主派活。理由(用户定的):① 后台运行时**几乎不存在活着的父会话**,宿主派活必然频繁走不通;② 宿主派活的子会话**挂在父会话的智能体下面**,人不好看见 —— 后台任务应当独立、可观测。实现上:learner 移除 `launchChild` 接线、恢复"未配 learnerProvider+learnerModel 即不工作"的守卫;**保留**两处真 bug 的修法:learner **默认不 resume**(resume 出来的会话补不上工具集)、每脚 `create` 才会选 preset;**隔离验证仍走宿主派活**(它是一次性子会话、有活父会话可用,也不长期挂在某个会话下面)。文档同步:INSTALL(前提表/示例/为什么必须第三方/会话生命周期)、简介 §三、机制清单「空闲学习」行、README 代价段。测试 1231 → **1225**(删掉两个宿主派活用例) | ✅ 代码:`index.js` / `learner-loop.js`;文档:INSTALL / 简介 / 机制清单 / README |
25
- | v1.5.5 | **修掉一处长期浪费**:技能评审的 `no-change` 判定不记"这批证据已判过"的水位 —— 同一批反馈(同一段对话被反复切片成不同信号序号)在 24 小时里被重评 30+ 轮,判词几乎逐字相同(连模型自己都在判词里建议"同输入别再转")。现在给每批评审证据记**批次指纹**(按反馈**文本内容**去重排序 + revision),同指纹判过 no-change 即跳过,心跳回执里新增 `cached` 计数让"省了几次"可见。另:**会话存档型巨物不再抢召回前排**(归档产物按 `archiveOf`/体积识别,关键词分打 1/4 + 同等条件下让位;降权不是过滤,只有它匹配时仍召得回)—— 历史 7 条同款一并生效。测试 1221 → **1231** | ✅ 代码:`skill-review.js`;文档:机制清单(含「分层与归档」补一句召回降权) |
26
- | v1.5.4 | **修 + 打磨**:① 空闲学习改走**宿主派活**并在 DeepSeek 默认路由上实测跑通(真跑两轮,产出真实),因此 **learn 的 provider/model 默认留空 = 跟随主会话**;② 修 learner 自查出的两个缺陷 —— `D-1` 重建失败也提交换代(每次失败烧一个 id、`recycled` 失真、状态停在从未建成的 id 上)、`D-2` 回收原因写死"宿主重启过"(真实判据只是取不到会话);③ 走宿主派活时**不再计算回收**(去噪);④ 派活透传 `request.cwd`(宿主子会话默认继承父 cwd,导致 learner 产出写进主会话目录);⑤ 新增**载入期冒烟闸** `smoke-apply.mjs`(抓"apply() 抛错导致插件整块不加载",已接进打包脚本);⑥ INSTALL 修正 preset 示例:**persona 里不能写 `{{cwd}}`**(宿主只注册 provider/model/self_narrative)。测试 1219 → **1221** | ✅ 代码:`index.js` / `learner-loop.js` / `tool-output.js`;文档:INSTALL / 简介 |
27
- | v1.5.3 | **机制更新:默认只用一个模型**。隔离验证与空闲学习都改成**走宿主的派活通道**(`subagents.startActivation`,宿主代建子会话)—— 实测自建 agent 走 DeepSeek 自家路由必 `TRANSPORT`,而宿主代建在同一路由上能跑,于是两者**默认都跟随主会话模型**(开箱可用,不再要求配第三方 api-key)。想换模型:`validateProvider`/`validateModel`、`learnerProvider`/`learnerModel` 各自指定(留空 = 跟随主会话)。空闲学习也因此变成"每踢一轮一个新子会话",不再需要 5 轮/350KB 的重建(旧路径保留为回退)。测试 1213 → **1219** | ✅ 代码有变动:`index.js` / `learner-loop.js`;文档:INSTALL |
28
- | v1.5.2 | **修复**:DSH 0.2.x 更新把 `subagents` 的"一次调用拿结果"改成了异步激活(`start` 消失),`mnemos_validate` 直接报 `subagents.start is not a function`。重写为「起一个独立小会话 → 它把结论写进记忆 → 父会话按 sessionId 取回」(新增 `store.validationBySession`),并解决沿途四个坑:不给 preset/不传 agentOptions 都会因 `{{model}}` 无值整轮报错;照抄父会话路由会让 DeepSeek 自家路由对"插件自建 agent"必 TRANSPORT —— 改为 `validateProvider` > `learnerProvider` > 父会话 三级回退。另:纪律 ⑭ 补「验证通道不可用 → 不得用"觉得有道理"顶替,按未验证处理」。测试 1205 → **1213** | ✅ 代码有变动:`index.js` / `store.js` / `system-prompt.js`;配置新增 `validateProvider` / `validateModel` |
29
- | v1.5.1 | **修复 + 新增**:① 修掉 learner 的根因缺陷 —— 宿主重启后旧会话走 `resume` 恢复,而宿主的 `agentPresets.select()` 只允许在会话第一轮之前调用,恢复出来的会话**挂不上 preset**,工具集退化(够用的读/查/联网工具都没挂上,只剩最基本的几个)(没有 read/glob/grep、没有联网),表现像"网络异常"。现在:**不活着就直接换新一代会话**、新 id 直接 `create`(保证能选 preset),回执里写 `reason=restarted`;② README 新增「**风险与责任**」一节(四类能力 + 责任划分 + 反对滥用)。测试 1196 → **1205** | ✅ 代码有变动:`learner-loop.js`;文档:README / INSTALL |
30
- | v1.5.0 | **机制版本**,一次性改了五块:① **删掉"台账版"空闲学习**(模块 / 配置 / 测试 / 两份台账数据全部移除);② **空闲学习重做**:专用会话 + 定期换新重建(避免上下文撑爆而整轮被拒)+ 自指守卫(learner 不许自己踢自己);③ **技能评审修活**:内置技能的反馈曾把评审水位永久钉死(空转数日),改为入口处"只判自家技能";**修改写回默认开启**(仍保留评审 + 独立验证 + 回归门 + 旧版回滚);④ **折叠快照收缩**:移除 100% 噪音的修剪通道,只在折叠时存,并在折叠后**注入一条指针提醒**(含记忆 id);⑤ **多 agent 协作(新增)**:任务图三件套 + **归档闸门**(未收尾任务的记录不许被归档;隔离验证记录同理且超窗销毁)+ 系统提示新增第六节 + 孤儿任务图回收。另有:注入消息构造收敛到单一入口(修掉一次会话崩溃)、系统提示与工具描述按"用法归工具、纪律归提示"去重。测试 **1000 → 1196** | ✅ **代码有变动**:新增 `host-message.js`;删除 `docs-study.js`;改动 `store` / `index` / `system-prompt` / `skill-review` / `compaction-snapshot` / `learner-loop` / `tool-output` / `tool-results`;工具 14 → **17** 个 |
31
- | v1.4.1 | **修复**:空闲学习的专用会话在 GUI 里打不开 —— 原实现只做 "get → create"、刻意不 resume,重启后那个会话不是"活着的 agent"。改为 **get → resume → create** 三级兜底;同时给会话传工作目录、新增 `learner.log` 诊断。测试 **996 → 1000** | ✅ 代码有变动 |
32
- | v1.4.0 | **机制更新**:新增**空闲学习** —— 到点把一脚送进一个专用会话,由它自己决定学什么,也可以什么都不学;心跳只负责"何时踢"。新增 `learner*` 配置组。测试 972 → 996 | ✅ 代码有变动:新增 `learner-loop.js` |
33
- | v1.3.0 | **机制更新**:心跳新增 `docs_study`(文档学习提醒,纯本地、不联网)。**该机制已在 v1.5.0 移除**。测试 945 → 972 | ✅ 代码有变动(后被移除) |
34
- | v1.2.0 | **仅文档更新**:文档按职责重写 —— 只留一个 README(介绍)+ `INSTALL.md`(装与配);两份文档改名;删除全部旧版迁移内容 | ⚠️ 代码未变 |
35
- | v1.1.0 | 仅文档更新:新增《设计者视角》("为什么"的唯一源头),介绍文档按它重写 | 代码未变 |
36
- | v1.0.0 | 首个正式发行版(相对 v0 的修复:数据不丢、结论不丢、故障不静默、技能生成可控闭环) | 机制版本,已冻结存档 |
37
- | v0(事后编号) | 未定版 | 存档 |
38
-
39
- > **版本号判据**:看**发行物内容**,不看工作区 —— 改机制 / 行为 / 契约才升;只改描述通常不升;
40
- > 但发行物**构成**变了(新增 / 改名 / 删除文档)也要递进。
41
-
42
- ## 怎么确认这是我说的那一版
43
-
44
- 1. `package.json` 的 `version` 应为 **1.6.1**;
45
- 2. 本目录下跑 `npm test`(等价 `node test/store.test.js`)应为 **1330 通过 / 0 失败**;
46
- 3. 启动日志(`<profile>\mnemos\mnemos.log`)的「解析依据」第一段应是 **`profileContext=<该 profile 目录>`** ——
47
- 若第一依据还是 `DSH_PROFILE_DIR`/`cwd`,说明跑的是 v1.5.8 之前的代码;
48
- 4. 文档件数分两种形态:
49
- - **npm 包 / `repo-stage/docs`:5 件**(4 套 docx + 1 份纯 md `模块与功能实现.md`,**不带 PDF**);
50
- - **发行 rar / `Selfdata/docs`:9 件**(4 套 docx + 4 份 pdf + 1 份纯 md)。
51
- 四套是:`简介-introduction`(是什么 · 该不该用)、`架构总览`(部件与数据流)、
52
- `architecture-机制清单`(每个机制保证什么、边界在哪)、`设计者视角`(为什么这样设计,v1.6 按设计目标重写)。
53
-
54
- ## 发行方目录里各份 mnemos 是什么关系(避免拿错)
55
-
56
- | 位置 | 是什么 | 该不该拿来装 |
57
- |---|---|---|
58
- | 本目录(`mnemos\`) | **当前发行副本**(v1.6.1,代码与文档已就位;**已发布**) | ✅ 要装就用这个目录;npm/rar 已发布 |
59
- | `mnemos.rar`(同级) | 本目录的压缩包 | ✅ 当前版,已重打 |
60
- | `mnemos-历史版本\` | 已定版的压缩包存档(含 v1.6.1 及更早) | ⚠️ 只在回退 / 对比时用;v1.6.1 已补存档 |
61
- | `mnemos.backup-before-sync\` | 最近一次同步**之前**的快照(回滚点) | ❌ 不是发行物 |
62
- | 备份区(`发行备份\`) | 历次同步的时点快照 + 验收日志 + `源文件-*`(可复现源) | ❌ 不是发行物 |
63
-
64
- > 一句话:**装用 `mnemos\`;存档看 `mnemos-历史版本\`;回滚点看备份区。**
65
-
66
- ## 文档的引用方向(读的顺序)
67
-
68
- ```
69
- docs/设计者视角 为什么这样设计(唯一源头)
70
- docs/模块与功能实现.md 每个模块有哪些功能、怎么实现(附录=宪法原文+系统提示原文;纯 md)
71
- ↓ 被引用
72
- docs/简介-introduction 是什么 · 能做什么 · 代价 · 该不该用
73
- ↓
74
- README.md(门面) 四件最不像别人的事 + 代价 + 文档地图
75
- ↓
76
- docs/架构总览 由哪些部件组成、一轮怎么跑通
77
- ↓
78
- INSTALL.md 怎么装、怎么配、数据在哪、怎么备份
79
- ↓
80
- docs/architecture-机制清单 每个机制保证什么、边界在哪
81
- ```
82
-
83
- **只允许下层引用上层,上层不复述下层。**
1
+ # 版本标识 · Mnemos v1.7.1
2
+
3
+ | 项 | 值 |
4
+ |---|---|
5
+ | **版本** | **v1.7.1**(`package.json` 的 `version`) |
6
+ | 日期 | 2026-11-05 |
7
+ | 本目录 | 当前 dev 文档同步版本;npm / GitHub 尚未发布 v1.7.1 |
8
+ | 规模 | `src` **29 个模块**;工具 **19** 个;心跳维护 **9** 项;测试 **1275 / 0** |
9
+ | 提示词 | 25 条 / 7 节 / **3799 字符** |
10
+ | 宪法 | **v5(认知体)**,**1708 字符**;红线 1–4 与 5.x 未动 |
11
+ | 当前 DSH | 0.2.1-rc.5 已实测;0.2.2-alpha.2 的插件 API 迁移项未适配 |
12
+
13
+ ## 本版核心:记忆的价值不在存量,在掌控权
14
+
15
+ 这次更新不是“再存更多记忆”,而是把记忆的**实际掌控权**写进认知结构:
16
+
17
+ 1. **信任 = 实际掌控权**
18
+ 自传体(经验/决策/事件)可检查、可追溯、可修正,因此信任最高、更正成本最低;普通记忆居中;外部信息通常只有文本/来源,难以确认和推翻,因此信任最低、更正成本最高。信任不等于不会错;跨层更正必须留痕,不自动覆盖。
19
+ 2. **身体 / 器械边界**
20
+ 身体 = Mnemos + DSH 核心工具;第三方插件、领域 MCP 是外部器械,不为其来源与行为担保。工具归属与信息来源是两条边界:身体工具(如 `web_search`)也可能返回外部信息,结果必须按来源标记。
21
+ 3. **上下文定位**
22
+ 上下文是“当下的激活场”,由场景 + 被激活的自我切片 + 工作集构成;它不是身份、记忆仓库、判断权威或权限来源。
23
+ 4. **召回提醒**
24
+ 经验/决策/事件在召回时标明“实际掌控权高/可修正、不是普通背景”;外部记忆标明“非自己掌握/未验证”。身份固定注入,不参与常规召回提醒。
25
+ 5. **移除空闲学习**
26
+ 删除 learner-loop、`mnemos_learner_kick`、learner 配置与 preset;该功能由宿主自动化任务替代。`learning-protocol.js` / 技能评审 / curation / validation 保留。
27
+ 6. **自动 curation 改为空闲会话注入**
28
+ 不再依赖 `auxProvider/auxModel` 或新建 curator provider;找空闲会话,注入“调用一次 `mnemos_curate`”。没有空闲会话则跳过。
29
+
30
+ ## 文档
31
+
32
+ - `docs/00-架构总览.md`
33
+ - `docs/01-简介.md`
34
+ - `docs/02-architecture-机制清单.md`
35
+ - `docs/03-设计者视角.md`
36
+ - `docs/04-模块与功能实现.md`(附录含宪法 v5 原文与系统提示原文)
37
+ - `README.md` / `README.en.md` / `INSTALL.md`
38
+
39
+ > 文档源目录:`对外文档-v1.7/`;事实表:`对外文档-v1.7/00-事实表-v1.7.1.md`。
40
+
41
+ ## 怎么确认
42
+
43
+ 1. `package.json` 的 `version` 应为 **1.7.1**;
44
+ 2. `npm test` 应为 **1275 通过 / 0 失败**;
45
+ 3. 维护列表应为 **9 项**(不含 learner);
46
+ 4. 工具数应为 **19 个**(无 `mnemos_learner_kick`);
47
+ 5. 启动日志的 `dataFile` / `constitutionFile` 指向当前 profile;
48
+ 6. 宪法 `version=5`,`mnemos_constitution` 应返回 v5 认知体声明(含上下文定位、身体/来源边界、信任=实际掌控权)。