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 +9 -3
- package/README.en.md +6 -4
- package/README.md +14 -13
- package/VERSION.md +41 -82
- package/docs/00-/346/236/266/346/236/204/346/200/273/350/247/210.md +238 -0
- package/docs/01-/347/256/200/344/273/213.md +296 -0
- package/docs/02-architecture-/346/234/272/345/210/266/346/270/205/345/215/225.md +135 -0
- package/docs/03-/350/256/276/350/256/241/350/200/205/350/247/206/350/247/222.md +385 -0
- 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 +515 -0
- package/docs/architecture-/346/234/272/345/210/266/346/270/205/345/215/225.docx +0 -0
- package/docs//346/236/266/346/236/204/346/200/273/350/247/210.docx +0 -0
- package/docs//346/250/241/345/235/227/344/270/216/345/212/237/350/203/275/345/256/236/347/216/260.md +134 -124
- package/docs//347/256/200/344/273/213-introduction.docx +0 -0
- package/docs//350/256/276/350/256/241/350/200/205/350/247/206/350/247/222.docx +0 -0
- package/package.json +1 -1
- package/src/curation-trigger.js +89 -0
- package/src/fansearch.js +397 -0
- package/src/heartbeat.js +32 -15
- package/src/index.js +408 -25
- package/src/learner-loop.js +80 -6
- package/src/self-text.js +7 -5
- package/src/skill-miss.js +9 -3
- package/src/skill-review.js +48 -11
- package/src/store.js +662 -152
- package/src/system-prompt.js +3 -3
- package/src/tool-output.js +8 -1
- package/src/tool-results.js +20 -0
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
|
|
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
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
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
|
-
- **每轮会固定注入一点东西**:纪律提示约
|
|
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
|
-
|
|
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.
|
|
208
|
+
> 分不清哪份是当前版时:**源码仓库看 `对外文档-v1.7/` 下的 `.md`;发行目录看根部 `VERSION.md` 里写的版本号与文件清单。**
|
|
208
209
|
|
|
209
210
|
## License
|
|
210
211
|
|
package/VERSION.md
CHANGED
|
@@ -1,82 +1,41 @@
|
|
|
1
|
-
# 版本标识 · Mnemos v1.
|
|
2
|
-
|
|
3
|
-
| 项 | 值 |
|
|
4
|
-
|---|---|
|
|
5
|
-
| **版本** | **v1.
|
|
6
|
-
|
|
|
7
|
-
|
|
|
8
|
-
|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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`。
|