dsh-mnemos-continuity 1.6.0 → 1.7.0

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.
package/INSTALL.md CHANGED
@@ -1,4 +1,4 @@
1
- # 安装与配置 Mnemos
1
+ # 安装与配置 Mnemos(v1.7.0)
2
2
 
3
3
  > 这份文件只写**你要做的事**:装、配、验证、排错、数据放哪。
4
4
  > 它是什么、值不值得用 → `docs/简介`;有什么机制 → `docs/architecture-机制清单`;为什么这样设计 → `docs/设计者视角`。
@@ -379,12 +379,18 @@ learnerAgentPreset: standard
379
379
  # —— 存储 ——
380
380
  dataFile: "" # 记忆文件路径;留空 = 自动解析(见第 11 节)
381
381
  constitutionFile: "" # 宪法路径;默认与 dataFile 同目录
382
- autobiographyBudget: 2000 # 自传体注入的字符预算
382
+ autobiographyBudget: 2000 # 自传体注入字符预算;当前实测注入 12 条 / 约 1167 字
383
383
  # —— 心跳与归档 ——
384
384
  heartbeatIntervalMs: 1800000 # 心跳周期(毫秒),默认 30 分钟;0 = 禁用
385
385
  heartbeatEnabled: true # 心跳初值;false = 持久关闭
386
+ curationEnabled: true # 自动身份/经验整理;false = 关闭
387
+ identityCandidateTrigger: 5 # 身份候选达到多少条触发整理
388
+ identityFallbackDays: 30 # 候选不足 5 条时的 30 天兜底
389
+ experienceIntervalDays: 7 # 经验整理周期(天);不按条数触发
386
390
  archiveMinAgeMs: 86400000 # 归档时间阈值(默认 24 小时)
387
391
  archiveMaxShort: 50 # 短时记忆数量阈值
392
+ # 联想激活(实验性;当前代码读取 fansearchEnabled,但尚未正式写入 Config schema)
393
+ # fansearchEnabled: true # 工具执行后附注候选 id + 摘要片段;默认关
388
394
  # —— 空闲学习(默认关) ——
389
395
  learnerEnabled: false # ★ 默认关;开它必须同时配 provider + model
390
396
  learnerIntervalMs: 3600000 # 间隔(毫秒);0 = 关掉
@@ -442,7 +448,7 @@ learnerAgentPreset: standard
442
448
  | 装了但行为像旧版 | 还是缓存:完全退出再启动,别用"重新加载窗口" |
443
449
  | 出现"宪法 · 未初始化"警告 | 三种原因:① 第 5 节没做;② `constitutionFile` 指错路径;③ **第 5 节做了但没再完全重启一次**(宪法只在启动时装载) |
444
450
  | 记忆"空了" | 看日志里的 `dataFile=` —— 大概率是路径指到别处,数据本身没丢 |
445
- | 检索明显不准 | 召回是**关键词 + 标签**匹配(不是语义检索):换关键词试,并检查标签是否覆盖关键类别 |
451
+ | 检索明显不准 | 任务召回是**关键词 + 标签**匹配(不是语义检索):换关键词试,并检查标签是否覆盖关键类别;联想候选是实验性搭车线索,可能无关 |
446
452
  | 技能一直不变好 | `reviewProvider` / `reviewModel` 不可用 → 评审静默失败(技能不会变差,但也不会变好)。v1.6 起**没有"冻结"这回事**了,别去 `skill-review-state.json` 里找 |
447
453
  | 子代理说"文件不存在"但明明有 | `glob` 用**绝对 Windows 路径**会静默返回 `No files found`。改用 `pwsh Get-ChildItem -File -Filter *.js` 或相对工作区根的路径。**静默假阴性比报错更危险** |
448
454
  | 任务的临时结果在收尾时没了 | 那是设计:临时的默认丢弃,要留请显式标记。交付物别同时标成临时 |
package/README.en.md CHANGED
@@ -1,4 +1,6 @@
1
- # Mnemos
1
+ # Mnemos (v1.7.0)
2
+
3
+ > **v1.7 changes:** recall now has three modes — fixed self-narrative injection, task activation (`recall`/`open`), and experimental associative hints. The task graph is a foundational mechanism (address space, working memory, dossier/trace entry, event/decision anchor), not just a delegation tool. Constitution v3 adds the cognitive-body statement; red lines are unchanged.
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
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Mnemos
1
+ # Mnemos(v1.7.0)
2
2
 
3
3
  [English](README.en.md) | 中文
4
4
 
@@ -49,17 +49,18 @@
49
49
  - **成果不散**:几路的结果归到同一份任务记录上,事后按编号能一次取全;
50
50
  - **没做完的不会被当成做完**:哪一路没交回结论,会如实标出来;忘了收尾的任务也不会一直挂着。
51
51
 
52
- ### ③ 任务图:跨会话也知道"做到哪、依据什么"
52
+ ### ③ 任务图:底层机制,不只是协作工具
53
53
 
54
- 任务图不是多 agent 专用,也不只是待办清单;它是任务的**档案/寻址空间**。
54
+ 任务图不是多 agent 专用,也不只是待办清单;它是**任务寻址空间 + 部分工作记忆 + 档案/追查入口 + 事件/决策来源锚点**。
55
55
 
56
56
  **它不是把原文存进去,而是存"地址"**:记忆 id、依赖 id、结论 id、前序图 id;正文留在原记忆,删了被引用的记忆,图里那条也随之消失。
57
57
 
58
- - **什么时候开**:会跨会话、会被折叠后接着做、或会产出多条以后要找的记忆时;单步小事直接写记忆,别开;
59
- - **记什么**:已完成里程碑(done)、依赖(uses)、前序图(links)、重要结论的 id(`conclusion` 标签);**不复制正文**;
60
- - **不记什么**:未完成步骤仍用宿主 todo;图和任务清单不要互为镜像;
61
- - **跨会话**:开新图,用 `links` 链接旧图并写清"为什么接上它",不改旧图;
62
- - **好处**:换会话/换模型后,能说清"哪块做完了、用了什么、结论在哪";收尾时汇成一条任务结果,连同会话存档保留。
58
+ - **任务寻址**:`taskId` / `graphId`;开图、填回执、收尾、里程碑、依赖;
59
+ - **工作记忆**:自己的事(goal/done/uses/links)和协作的事(assignments/handoff/未完成分工);未完成步骤仍用宿主 todo;
60
+ - **档案/追查**:摘要命中后按 `graphId` open 图,核对 `uses/links/origin`;图是追查入口,摘要不是完整证据;
61
+ - **来源锚点**:事件、决策、curation 条目带 `origin` / `graphId`;
62
+ - **归档闸门**:open task 下的短时记录不被自动归档;close 只写收尾 event、成员转 cold,不合并成员;
63
+ - **单写者**:只有创建图的会话能 update/close;跨会话用 `links` 接前序图,不改旧图。
63
64
 
64
65
  ### ④ 外面来的东西留下出处,而不是被当真
65
66
 
@@ -107,21 +108,21 @@
107
108
  ## 代价与边界(用前必读)
108
109
 
109
110
  - 记忆是**本地明文文件**:自己备份;不要往里粘密码/密钥。要备份哪几个文件、怎么卸载/回滚 → INSTALL 第 3 / 11 节;
110
- - **每轮会固定注入一点东西**:纪律提示约 3.5k 字符 + 自传体摘要(默认上限 2000 字符)—— 这部分算在你的输入里。
111
+ - **每轮会固定注入一点东西**:纪律提示约 3797 字符 + 自传体摘要(当前 4 身份 + 3 决策 + 5 经验,约 1167 字)—— 这部分算在你的输入里。
111
112
  自传体的预算可调;**纪律那段没有开关**(诚实说:它和你在 profile 里的自定义提示会叠加,目前没有冲突检测);
112
113
  - 后台维护默认开(约 30 分钟一轮),其中两项**会调用 AI** → 有成本,且会把技能正文、相关记忆、你的原始反馈
113
114
  发给你配置的那个评审模型服务商;**可以整体关掉,也可以只关评审**(见 INSTALL)。**具体金额没有测量过**(已知缺口);
114
115
  **想稳妥起步:装完第一件事就把它关掉**(`heartbeatEnabled: false`,见 INSTALL 第 10 节),只留记忆,
115
116
  确认有用了再开回来。**关掉后哪些还能用、哪些会失效,INSTALL 开头有一张对照表**;
116
117
  - **空闲学习默认关**;开启后每轮都会调用一次模型(用你单独给它配的路由,**需要外部 API key**)→ 有成本;
117
- - 检索是**关键词 + 标签**匹配,不是语义检索:**写了但召不回是可能的**;
118
+ - **任务召回是关键词 + 标签**匹配,不是语义检索:**写了但召不回是可能的**;v1.7 另有实验性的联想候选(工具后附注,可能无关,不保证命中);
118
119
  - **技能的三种来源**:失败→修好(要反例+正例)、记忆里反复出现的问题(≥3 个跨会话事件)、外部技能改写(自己搜到或你给的)。**外部来源默认只进 `skill-proposals/`,保留要你确认**;想让它自动落盘得显式开 `externalSkillWriteBack`;
119
120
  - **折叠快照只做 7 天短期兜底**:记忆只存事实卡(不存 4K 原文),提醒直接带 top3 负面结论/工具失败;**不保证模型会 open**,提醒是唯一保证通道;
120
121
  - **会话存档默认不进检索**:它是给人回看的快照(可能很大),错召回一次就会吃掉大量上下文;
121
122
  要看时用 `mnemos_open` 打开存档 id,或显式传 `includeArchives:true`;
122
123
  - 一部分可靠性**靠纪律而不是机制**:结论有没有写进记忆、要不要召回到位 —— 所以偶尔自己提醒一句"这个记一下"更稳;
123
- - **尚未测量**:召回质量、规模延迟、单位成本、学习闭环的长期效果、多机共用、经验可迁移性;
124
- **也没有记录"测过哪些 DSH 版本"**(依赖宿主内部行为的部分,宿主升级后可能先坏)—— 这是已知缺口。
124
+ - **尚未测量**:任务召回质量、联想候选质量、规模延迟、单位成本、学习闭环的长期效果、多机共用、经验可迁移性;
125
+ 当前已实测 DSH **0.2.1-rc.5**;0.2.2-alpha.2 的插件 API 迁移项尚未适配(session projection / Timer / tools.resolve / agent.model)—— 升级前需单独核对。
125
126
 
126
127
  ## 风险与责任
127
128
 
@@ -204,7 +205,7 @@ dsh plugin --profile web add dsh-mnemos-continuity
204
205
  | 确认这是哪一版 | 发行目录根部的 `VERSION.md` |
205
206
 
206
207
  > `docs/*.docx` 由打包步骤从同名 `.md` 生成;发行包里开 docx,源码仓库里读 `.md`。
207
- > 分不清哪份是当前版时:**源码仓库看 `对外文档-v1.5/` 下的 `.md`;发行目录看根部 `VERSION.md` 里写的版本号与文件清单。**
208
+ > 分不清哪份是当前版时:**源码仓库看 `对外文档-v1.7/` 下的 `.md`;发行目录看根部 `VERSION.md` 里写的版本号与文件清单。**
208
209
 
209
210
  ## License
210
211
 
package/VERSION.md CHANGED
@@ -1,82 +1,41 @@
1
- # 版本标识 · Mnemos v1.6.0
2
-
3
- | 项 | 值 |
4
- |---|---|
5
- | **版本** | **v1.6.0**(`package.json` 的 `version`)—— 见下方「版本流水」 |
6
- | 本目录 | **当前发行副本**(可发布内容;解压后即成为 `<你的路径>\mnemos\`) |
7
- | 打包日期 | 2026-10-21(**代码/文档已就位;npm 与 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
- | 对应压缩包 | 本版**尚未重打**;同级 `mnemos.rar` 仍是旧包。发布前重打并更新摘要 |
11
- | 同版本存档 | 发布后再补 `mnemos-历史版本\v1.6.0\` |
12
-
13
-
14
- ## 版本流水
15
-
16
- | 版本 | 内容 | 性质 |
17
- |---|---|---|
18
- | **v1.6.0**(本版) | **认知架构收口(未发布)**:① 任务图升级为「任务档案/寻址空间」(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 / 四份对外文档 |
19
- | **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 |
20
- | 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) |
21
- | 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 / 测试断言 |
22
- | 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 / 简介 / 新增模块文档 |
23
- | 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 |
24
- | v1.5.5 | **修掉一处长期浪费**:技能评审的 `no-change` 判定不记"这批证据已判过"的水位 —— 同一批反馈(同一段对话被反复切片成不同信号序号)在 24 小时里被重评 30+ 轮,判词几乎逐字相同(连模型自己都在判词里建议"同输入别再转")。现在给每批评审证据记**批次指纹**(按反馈**文本内容**去重排序 + revision),同指纹判过 no-change 即跳过,心跳回执里新增 `cached` 计数让"省了几次"可见。另:**会话存档型巨物不再抢召回前排**(归档产物按 `archiveOf`/体积识别,关键词分打 1/4 + 同等条件下让位;降权不是过滤,只有它匹配时仍召得回)—— 历史 7 条同款一并生效。测试 1221 → **1231** | ✅ 代码:`skill-review.js`;文档:机制清单(含「分层与归档」补一句召回降权) |
25
- | 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 / 简介 |
26
- | v1.5.3 | **机制更新:默认只用一个模型**。隔离验证与空闲学习都改成**走宿主的派活通道**(`subagents.startActivation`,宿主代建子会话)—— 实测自建 agent 走 DeepSeek 自家路由必 `TRANSPORT`,而宿主代建在同一路由上能跑,于是两者**默认都跟随主会话模型**(开箱可用,不再要求配第三方 api-key)。想换模型:`validateProvider`/`validateModel`、`learnerProvider`/`learnerModel` 各自指定(留空 = 跟随主会话)。空闲学习也因此变成"每踢一轮一个新子会话",不再需要 5 轮/350KB 的重建(旧路径保留为回退)。测试 1213 → **1219** | ✅ 代码有变动:`index.js` / `learner-loop.js`;文档:INSTALL |
27
- | 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` |
28
- | v1.5.1 | **修复 + 新增**:① 修掉 learner 的根因缺陷 —— 宿主重启后旧会话走 `resume` 恢复,而宿主的 `agentPresets.select()` 只允许在会话第一轮之前调用,恢复出来的会话**挂不上 preset**,工具集退化(够用的读/查/联网工具都没挂上,只剩最基本的几个)(没有 read/glob/grep、没有联网),表现像"网络异常"。现在:**不活着就直接换新一代会话**、新 id 直接 `create`(保证能选 preset),回执里写 `reason=restarted`;② README 新增「**风险与责任**」一节(四类能力 + 责任划分 + 反对滥用)。测试 1196 → **1205** | ✅ 代码有变动:`learner-loop.js`;文档:README / INSTALL |
29
- | 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** 个 |
30
- | v1.4.1 | **修复**:空闲学习的专用会话在 GUI 里打不开 —— 原实现只做 "get → create"、刻意不 resume,重启后那个会话不是"活着的 agent"。改为 **get → resume → create** 三级兜底;同时给会话传工作目录、新增 `learner.log` 诊断。测试 **996 → 1000** | ✅ 代码有变动 |
31
- | v1.4.0 | **机制更新**:新增**空闲学习** —— 到点把一脚送进一个专用会话,由它自己决定学什么,也可以什么都不学;心跳只负责"何时踢"。新增 `learner*` 配置组。测试 972 → 996 | ✅ 代码有变动:新增 `learner-loop.js` |
32
- | v1.3.0 | **机制更新**:心跳新增 `docs_study`(文档学习提醒,纯本地、不联网)。**该机制已在 v1.5.0 移除**。测试 945 → 972 | ✅ 代码有变动(后被移除) |
33
- | v1.2.0 | **仅文档更新**:文档按职责重写 —— 只留一个 README(介绍)+ `INSTALL.md`(装与配);两份文档改名;删除全部旧版迁移内容 | ⚠️ 代码未变 |
34
- | v1.1.0 | 仅文档更新:新增《设计者视角》("为什么"的唯一源头),介绍文档按它重写 | 代码未变 |
35
- | v1.0.0 | 首个正式发行版(相对 v0 的修复:数据不丢、结论不丢、故障不静默、技能生成可控闭环) | 机制版本,已冻结存档 |
36
- | v0(事后编号) | 未定版 | 存档 |
37
-
38
- > **版本号判据**:看**发行物内容**,不看工作区 —— 改机制 / 行为 / 契约才升;只改描述通常不升;
39
- > 但发行物**构成**变了(新增 / 改名 / 删除文档)也要递进。
40
-
41
- ## 怎么确认这是我说的那一版
42
-
43
- 1. `package.json` 的 `version` 应为 **1.6.0**;
44
- 2. 本目录下跑 `npm test`(等价 `node test/store.test.js`)应为 **1330 通过 / 0 失败**;
45
- 3. 启动日志(`<profile>\mnemos\mnemos.log`)的「解析依据」第一段应是 **`profileContext=<该 profile 目录>`** ——
46
- 若第一依据还是 `DSH_PROFILE_DIR`/`cwd`,说明跑的是 v1.5.8 之前的代码;
47
- 4. 文档件数分两种形态:
48
- - **npm 包 / `repo-stage/docs`:5 件**(4 套 docx + 1 份纯 md `模块与功能实现.md`,**不带 PDF**);
49
- - **发行 rar / `Selfdata/docs`:9 件**(4 套 docx + 4 份 pdf + 1 份纯 md)。
50
- 四套是:`简介-introduction`(是什么 · 该不该用)、`架构总览`(部件与数据流)、
51
- `architecture-机制清单`(每个机制保证什么、边界在哪)、`设计者视角`(为什么这样设计,v1.6 按设计目标重写)。
52
-
53
- ## 发行方目录里各份 mnemos 是什么关系(避免拿错)
54
-
55
- | 位置 | 是什么 | 该不该拿来装 |
56
- |---|---|---|
57
- | 本目录(`mnemos\`) | **当前发行副本**(v1.6.0,代码与文档已就位;**尚未发布**) | ✅ 要装就用这个目录;npm/rar 等发布后再分发 |
58
- | `mnemos.rar`(同级) | 本目录的压缩包(旧版) | ⚠️ **本版尚未重打**;发布前重打并更新摘要 |
59
- | `mnemos-历史版本\` | 已定版的压缩包存档(含 v1.5.10 及更早) | ⚠️ 只在回退 / 对比时用;v1.6.0 发布后补存档 |
60
- | `mnemos.backup-before-sync\` | 最近一次同步**之前**的快照(回滚点) | ❌ 不是发行物 |
61
- | 备份区(`发行备份\`) | 历次同步的时点快照 + 验收日志 + `源文件-*`(可复现源) | ❌ 不是发行物 |
62
-
63
- > 一句话:**装用 `mnemos\`;存档看 `mnemos-历史版本\`;回滚点看备份区。**
64
-
65
- ## 文档的引用方向(读的顺序)
66
-
67
- ```
68
- docs/设计者视角 为什么这样设计(唯一源头)
69
- docs/模块与功能实现.md 每个模块有哪些功能、怎么实现(附录=宪法原文+系统提示原文;纯 md)
70
- ↓ 被引用
71
- docs/简介-introduction 是什么 · 能做什么 · 代价 · 该不该用
72
- ↓
73
- README.md(门面) 四件最不像别人的事 + 代价 + 文档地图
74
- ↓
75
- docs/架构总览 由哪些部件组成、一轮怎么跑通
76
- ↓
77
- INSTALL.md 怎么装、怎么配、数据在哪、怎么备份
78
- ↓
79
- docs/architecture-机制清单 每个机制保证什么、边界在哪
80
- ```
81
-
82
- **只允许下层引用上层,上层不复述下层。**
1
+ # 版本标识 · Mnemos v1.7.0
2
+
3
+ | 项 | 值 |
4
+ |---|---|
5
+ | **版本** | **v1.7.0**(`package.json` 的 `version`) |
6
+ | 日期 | 2026-10-31 |
7
+ | 本目录 | 当前发行副本;npm / GitHub tag 均为 v1.7.0 |
8
+ | 规模 | `src` **28 个模块**;工具 **20** 个;心跳维护 **9** 项;测试 **1419 / 0** |
9
+ | 提示词 | 25 条 / 7 节 / **3797 字符** |
10
+ | 固定注入 | **12 条 / 约 1167 字**(4 身份 / 3 决策 / 5 经验) |
11
+ | 宪法 | **v3(认知体)**,1166 字符;红线 1–4 与 5.x 未动 |
12
+ | 当前 DSH | 0.2.1-rc.5 已实测;0.2.2-alpha.2 的插件 API 迁移项未适配 |
13
+
14
+ ## 本版关键变化
15
+
16
+ 1. **召回三层**:固定注入(自传体)+ 任务激活(主动 recall/open)+ 联想激活(实验性,工具后附注候选)。
17
+ 2. **任务图定位上升**:底层机制——任务寻址、部分工作记忆、档案/追查入口、事件/决策来源锚点、归档闸门。
18
+ 3. **档案修复**:`archiveSession` 每 scope 单份、cold、archivedIn;不再递归收编 archive;`isArchiveLike` 增加 `[uuid vN]` / `[任务 ...]` 前缀判据。
19
+ 4. **双语**:内容 tag 同一字符串内中英共存;summary 关键词可附英文 `中文(english)`,不整句翻译。
20
+ 5. **身份/经验 curation**:identity 4 条、experience 22→5;自动触发按身份候选/经验每周;revision 历史保留。
21
+ 6. **learner / heartbeat 单飞**:定时器与手动入口不再并发;经验/心跳失败有冷却。
22
+ 7. **宪法 v3**:新增认知体声明;换模型/工具/权限不换身份;权限差异是身体配置,不是身份差异。
23
+
24
+ ## 文档
25
+
26
+ - `docs/00-架构总览.md` / `.docx`
27
+ - `docs/01-简介.md` / `.docx`
28
+ - `docs/02-architecture-机制清单.md` / `.docx`
29
+ - `docs/03-设计者视角.md` / `.docx`
30
+ - `docs/04-模块与功能实现.md`(纯 Markdown,附录含宪法 v3 原文与系统提示原文)
31
+ - `README.md` / `INSTALL.md`
32
+
33
+ > 文档源目录:`对外文档-v1.7/`;事实表:`对外文档-v1.7/00-事实表-v1.7.0.md`。
34
+
35
+ ## 怎么确认
36
+
37
+ 1. `package.json` 的 `version` 应为 **1.7.0**;
38
+ 2. `node test/store.test.js` 应为 **1419 通过 / 0 失败**;
39
+ 3. 维护列表应为 **9 项**(含 `curation_due`);
40
+ 4. 启动日志的 `dataFile` / `constitutionFile` 指向当前 profile;
41
+ 5. 宪法 `version=3`,`mnemos_constitution` 应返回 v3 认知体声明。
@@ -0,0 +1,238 @@
1
+ # Mnemos · 架构总览(v1.7.0)
2
+
3
+ > 这份文档只回答三件事:**它由哪些部件组成、任务怎么跑通、三种召回模式怎么分工。**
4
+ > 每个机制的"保证什么 / 边界在哪"见《机制清单》;为什么这么设计见《设计者视角》;怎么装怎么配见 `INSTALL.md`。
5
+ >
6
+ > 版本事实以 [00-事实表-v1.7.0.md](./00-事实表-v1.7.0.md) 为准;本文不重复所有数字。
7
+
8
+ ---
9
+
10
+ ## 一、五个部件,加把它们接起来的插件
11
+
12
+ ```
13
+ ┌─────────────────────────────────────────────────────────────┐
14
+ │ 宿主(DeepSeek Harness) │
15
+ │ 会话 · 上下文折叠 · 子代理 spawn · 工具注册 │
16
+ └───────────────┬─────────────────────────────────────────────┘
17
+ │ 插件(接线层)把下面五样接到宿主上
18
+ ┌───────────────▼─────────────────────────────────────────────┐
19
+ │ 宪法(只读,v3) 系统提示(纪律) 工具(20 个) │
20
+ │ 我是谁 / 红线 何时做、做什么 能做什么 │
21
+ │ ↓ 每轮注入 ↓ 每轮注入 ↓ 模型按需调用 │
22
+ │ 记忆(文件) 技能(目录) │
23
+ │ 结论 / 来由 / 自传体 可复用的做法 │
24
+ │ 任务图(一条记忆 + task 投影) │
25
+ └─────────────────────────────────────────────────────────────┘
26
+ ```
27
+
28
+ | 部件 | 是什么 | 怎么进到模型眼前 | 一句话职责 |
29
+ |---|---|---|---|
30
+ | **宪法** | 一份只读文件,当前 **v3(认知体)** | **每轮**注入提示最前(最高优先级) | 它是谁、红线在哪 |
31
+ | **系统提示** | 一段固定的纪律文本(25 条 / 7 节) | **每轮**注入 | 什么时候该做什么 |
32
+ | **工具** | **20 个**可调用接口 | 由插件注册给宿主 | 它能做什么、不能做什么 |
33
+ | **记忆** | 本地 JSON 文件 | 按需检索(两段式:先摘要后详情) | 结论与来由放哪 |
34
+ | **技能** | 一个目录 | 目录清单注入 + 按需加载全文 | 可复用的做法放哪 |
35
+ | **任务图** | 一条记忆记录 + `task` 投影 | 由工具打开/更新/关闭;按 graphId 追查 | 任务寻址、工作记忆、档案、来源锚点 |
36
+ | **插件** | **接线层**,不算第六个部件 | —— | 把上面几样接到宿主上:写入安全、注入、心跳、闸门 |
37
+
38
+ > 关键区分:宪法、系统提示是"每轮都在场"的;记忆、技能、任务图是"按需取用/寻址"的。前者的体积必须受控,后者可以很多。
39
+
40
+ ## 二、身份每轮怎么回到它眼前(自传体注入)
41
+
42
+ "换掉模型,它还是同一个它"不靠模型自己记住,而是**每次请求都把"我是谁"重新放到它眼前**。
43
+
44
+ ```
45
+ 永久层里的自传体(identity / decision / experience / event / other)
46
+ │
47
+ │ 每次组装提示时重新计算(系统提示变量,不是写死文本)
48
+ ▼
49
+ 【自传体 · 自我历史(紧凑版,按需召回详情)】
50
+ [身份] ……
51
+ [决策] ……
52
+ [经验] ……
53
+ │
54
+ └─ 装不下的会明说:另有 N 条未进本段,需要时用召回取
55
+ ```
56
+
57
+ 当前固定注入:
58
+
59
+ ```text
60
+ identity core(全部) + 最近 3 条 decision + 最多 5 条 experience
61
+ = 12 条 / 约 1167 字(4 身份 / 3 决策 / 5 经验)
62
+ ```
63
+
64
+ | 要点 | 具体做法 |
65
+ |---|---|
66
+ | **存在哪** | 自传体落在**永久层**:不衰减、不归档,后台维护任务清不走 |
67
+ | **怎么进去** | 作为**系统提示变量**注入,每次组装提示时**重新计算** |
68
+ | **注入什么** | 身份 core + 最近 3 决策 + 最多 5 经验;不是"全部自传体" |
69
+ | **详情在哪** | 注入的是摘要;完整记录用 `mnemos_recall` + `mnemos_open` 取 |
70
+ | **边界** | 固定注入有预算;装不下的会明说"另有 N 条未进本段" |
71
+
72
+ > 一句话:**身份不是"被模型记住的",是"每一轮被重新放到它眼前的"。**
73
+
74
+ ## 三、三种召回模式(v1.7 的核心变化)
75
+
76
+ 召回不再只有"关键词 + 标签"一条路,而是三层:
77
+
78
+ ```
79
+ ① 固定注入(自传体)
80
+ 每轮自动在场:身份、最近判断、关键经验
81
+
82
+ ② 任务激活(模型主动召回)
83
+ mnemos_recall / mnemos_open
84
+ 模型在工作里觉得缺背景时主动查
85
+
86
+ ③ 联想激活(机械匹配候选,实验性)
87
+ 工具执行后附注候选 id + 摘要片段
88
+ 不新增 user message、不自动 open、不保证相关
89
+ ```
90
+
91
+ ### ① 固定注入
92
+
93
+ - 由插件在每轮组装系统提示时完成;
94
+ - 只负责"我是谁、最近判断、关键经验";
95
+ - 当前 12 条 / 1167 字;
96
+ - 不是任务状态库,不是会话记录仓库。
97
+
98
+ ### ② 任务激活
99
+
100
+ ```
101
+ 模型觉得缺背景
102
+ → mnemos_recall(关键词/标签/类目/taskId)
103
+ → 返回摘要 + id
104
+ → 需要细节时 mnemos_open(id) 取全文
105
+ ```
106
+
107
+ 这是主通道。可靠性取决于模型是否意识到"该查";这也是系统提示反复强调"开始任务前先 recall"的原因。
108
+
109
+ ### ③ 联想激活
110
+
111
+ ```
112
+ 工具执行成功
113
+ → 插件用本轮可见文本做机械匹配
114
+ → 候选 top 3 追加到 tool result 附注
115
+ → 只给 id + 摘要片段,让模型自己决定要不要 open
116
+ ```
117
+
118
+ 当前定位:
119
+
120
+ - **实验性/早期质量**;
121
+ - 候选可能相关,也可能无关;
122
+ - 不是第二套召回承诺,不保证命中率;
123
+ - 不自动把全文塞进上下文;
124
+ - 桌面 profile 开启,web 未开;配置项尚未正式写入 Config schema。
125
+
126
+ > 文档必须诚实:联想激活是"搭车提供线索",不是"已经验证的提升"。
127
+
128
+ ## 四、任务图:底层机制,不是协作小节
129
+
130
+ 任务图是**设计上最简单、功能上最广**的底层机制:
131
+
132
+ ```text
133
+ 一条记忆记录 + task 投影
134
+ tags: task-graph / open|closed / task:<taskId>
135
+ ```
136
+
137
+ 它同时承担五件事:
138
+
139
+ | 功能 | 具体表现 |
140
+ |---|---|
141
+ | **任务寻址空间** | `taskId` / `graphId`;`mnemos_task_open/update/close/done/cite` |
142
+ | **部分工作记忆** | 自己的事:goal / done / uses / links;协作:assignments / handoff / 未完成分工 |
143
+ | **档案与追查入口** | 摘要命中后按 `graphId` 打开图,核对 `uses / links / origin` |
144
+ | **事件/决策来源锚点** | 自传体 `origin={kind:'task',taskId,graphId}`;task-result 带 graphId;close event 带 graphId |
145
+ | **归档闸门** | open task 下的短时记录不被自动归档;收尾后才放行 |
146
+
147
+ 关键边界:
148
+
149
+ - 任务图不是待办清单,不是工作流引擎,不复制正文;
150
+ - 未完成步骤用宿主 todo,图里不记待办;
151
+ - 单写者:只有创建图的会话能 update/close;
152
+ - close 只写/补收尾 event,成员转 cold,**不合并成员**;
153
+ - 跨会话续接开新图并用 `links` 链接旧图,不改旧图。
154
+
155
+ > 一句话:**任务图是任务寻址空间 + 部分工作记忆 + 档案/追查入口 + 事件/决策来源锚点。**
156
+
157
+ ## 五、五条主要路径
158
+
159
+ ### ① 写一条记忆
160
+
161
+ ```
162
+ 模型判断"值得留" → remember → 插件补齐 sessionId / 层级 / 来源
163
+ → 写前重读磁盘 + 合并 + 加锁 → 落盘 → 回执(可能带"冲突旧记忆"提示)
164
+ ```
165
+
166
+ 写入是**显式动作**;写之前要先看磁盘上现在是什么。内容 tag 可双语同串(如 `learner 学习`);summary 用中文一句话,关键词处可附英文对照(如 `任务图(task graph)`),不整句翻译。
167
+
168
+ ### ② 取一条记忆
169
+
170
+ ```
171
+ 模型觉得缺背景 → recall(关键词/标签/类目/taskId) → 排序
172
+ → 返回摘要 + id → 需要细节时 open(id) → 取全文
173
+ ```
174
+
175
+ 两段式:先用便宜的方式判断"哪些相关",再为真正需要的那几条付全文成本。
176
+ 记忆文件按 **profile** 定位,与"你在哪个目录开会话"无关。
177
+
178
+ ### ③ 上下文折叠时
179
+
180
+ ```
181
+ 宿主按位置折叠最旧一段 → 插件收到折叠事件
182
+ → 从被遮蔽区域抽三类硬事实(工具失败 / 用户原话 / 负面结论)
183
+ → 有硬事实才存一条事实卡(不存 4K 原文,7 天后自动清理)
184
+ → 往会话里注入提醒:最多 3 条负面结论 / 3 条工具失败 + 记忆 id
185
+ ```
186
+
187
+ 折叠是宿主的决定,插件拦不住,只能抢救;注入只带指针、不搬正文。
188
+
189
+ ### ④ 技能自己变好
190
+
191
+ ```
192
+ 一段"失败过又成功"的工作流结束 → 计数触发(零成本,不调模型)
193
+ → 提议新技能:反例必须能机械追溯到真实失败 + 正例
194
+ → 独立验证者(看不到修改理由)→ 回归门 → 写回(旧版留档)
195
+ → 或者:拒绝 / 什么都不改(这也是有效结论)
196
+ ```
197
+
198
+ 验证与生成分开;改的是已经被用过的东西,所以默认留档。
199
+
200
+ ### ⑤ 多 agent 协作
201
+
202
+ ```
203
+ 主模型 open 任务图(一条记忆)→ 派活,只给图的 id
204
+ → 子代理干活,把结论写成短时记忆(带 task:/assign: 标签)并回报 handoff id
205
+ → 主模型把回执填回图(唯一写者)→ close:写收尾 event,成员转 cold
206
+ → 没回执的分工如实标未完成;超期未收尾的图由后台强制归档
207
+ ```
208
+
209
+ 协作状态在记忆层,不在 prompt 里;未收尾前这批记录不许被归档。
210
+
211
+ ## 六、一轮正常任务的生命周期
212
+
213
+ ```
214
+ 开始:固定注入已就位;模型按需 recall 相关记忆
215
+ ↓
216
+ 干活:调用工具;外部信息先隔离验证;大块输出先卸载再摘要
217
+ ↓
218
+ 结束:写结论;任务图 close;本会话短时记忆归档
219
+ ↓
220
+ 以后:下一个会话用 recall / graphId 找回结论、来由与是否被推翻
221
+ ```
222
+
223
+ ## 七、部件之间的"不能做什么"
224
+
225
+ | 谁 | 不能做什么 |
226
+ |---|---|
227
+ | 模型 | 不能改宪法;不能把外部信息直接当事实;不能绕过工具直接写记忆文件 |
228
+ | 技能 | 不能改宪法;不能在没有独立验证的情况下改自己 |
229
+ | 记忆 | 不会自动改代码、改配置;除有界回收外不会自动删除自己(只降权,不删) |
230
+ | 插件 | 不碰用户数据文件以外的东西;删除只走显式工具或有界回收(隔离验证记录) |
231
+ | 宿主 | 折叠是它的权力——插件只能抢救,不能阻止 |
232
+
233
+ ## 八、这张地图**不**包含什么
234
+
235
+ - 不列每个机制的保证与边界 →《机制清单》;
236
+ - 不解释为什么这样设计、被否掉的替代方案 →《设计者视角》;
237
+ - 不写代码结构与数据结构 →《模块与功能实现》;
238
+ - 不写安装与配置 → `INSTALL.md`。