dsh-plugin-prompt-tool 3.0.1 → 3.1.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.
Files changed (57) hide show
  1. package/README.md +17 -1
  2. package/engine/actions/catalog.mjs +2 -1
  3. package/engine/actions/index.mjs +5 -3
  4. package/engine/actions/shared.mjs +26 -12
  5. package/engine/actions/tool-visibility.mjs +31 -14
  6. package/engine/compositions/source/local/context-provenance.yml +9 -0
  7. package/engine/compositions/source/local/generation-recovery.yml +10 -0
  8. package/engine/compositions/source/local/retrieval.yml +7 -0
  9. package/engine/compositions/source/local/soul-ledger.yml +3 -0
  10. package/engine/compositions/source/local/soul-maintenance.yml +9 -0
  11. package/engine/conditions/examples.mjs +1 -0
  12. package/engine/conditions/index.mjs +7 -0
  13. package/engine/conditions/manifest.mjs +28 -0
  14. package/engine/context-idle-compaction.mjs +58 -0
  15. package/engine/context-provenance.d.mts +7 -0
  16. package/engine/context-provenance.mjs +156 -0
  17. package/engine/context-pruner.mjs +64 -0
  18. package/engine/context-routing.mjs +45 -0
  19. package/engine/context-summary.mjs +80 -0
  20. package/engine/fillers.mjs +37 -4
  21. package/engine/generation-recovery-coordinator.mjs +40 -0
  22. package/engine/generation-recovery-maintenance.mjs +18 -0
  23. package/engine/generation-recovery.mjs +153 -0
  24. package/engine/host-package.mjs +13 -0
  25. package/engine/layers.d.mts +4 -0
  26. package/engine/layers.mjs +57 -20
  27. package/engine/present-as.mjs +2 -2
  28. package/engine/retrieval-reference.d.mts +5 -0
  29. package/engine/retrieval-reference.mjs +26 -0
  30. package/engine/retrieval.mjs +17 -0
  31. package/engine/rule-engine.mjs +1 -0
  32. package/engine/rule-runtime.d.mts +8 -1
  33. package/engine/rule-runtime.mjs +18 -10
  34. package/engine/rule-spec.mjs +4 -2
  35. package/engine/schema.mjs +1 -1
  36. package/engine/service-names.d.mts +5 -0
  37. package/engine/service-names.mjs +5 -0
  38. package/engine/soul-ledger.mjs +8 -0
  39. package/engine/soul-maintenance.mjs +20 -0
  40. package/lib/client.js +16 -6
  41. package/lib/client.js.map +1 -1
  42. package/lib/index.mjs +1953 -246
  43. package/modules/soul/assets/ledger.md +4 -2
  44. package/modules/soul/assets/manifest.yml +2 -0
  45. package/modules/soul/assets/reference/00-layers.md +27 -27
  46. package/modules/soul/assets/reference/02-echo.md +161 -161
  47. package/modules/soul/assets/reference/05-doctor.md +67 -67
  48. package/modules/soul/assets/reference/10-echo-anatomy.md +109 -109
  49. package/modules/soul/assets/reference/ECHO-/346/235/203/345/250/201/345/217/243/345/276/204.md +202 -202
  50. package/modules/soul/assets/reference/ECHO/345/205/255/345/261/202/344/270/216mnemon/345/215/217/345/220/214/350/257/264/346/230/216/344/271/246.md +229 -229
  51. package/modules/soul/assets/templates/agents-template.md +3 -0
  52. package/modules/soul/assets/templates/self-template.md +19 -0
  53. package/modules/soul/module.yml +71 -13
  54. package/modules/tool-surface/module.yml +8 -5
  55. package/package.json +1 -1
  56. package/skills/dsh-module/reference.md +2 -2
  57. package/templates/80-tool-surface.yml +8 -7
@@ -1,9 +1,11 @@
1
1
  # 账本:只追加
2
2
 
3
- 打开只能往后加:**不改、不删、不重排**。多写者环境里共享可变文件是万恶之源;只追加不需要锁。
3
+ 打开只能往后加:**不改、不删、不重排**。写入用 `soul_ledger`(moduleId: soul,action: append);宿主在模块锁内核对身份与主导资格,再追加一行。
4
4
 
5
5
  **八种 type**:fact(发生什么)、gain(得到什么)、loss(失去/发现缺什么)、shelved(搁置的活,未结清单的唯一真相)、promise(对用户的承诺,只有主导能写)、persona(对自己的修正)、container(会话退场交接)、lead(主导权,最后一条 lead 的署名者)。
6
6
 
7
- **六个字段**:t(现在)、by(谁写的)、type、text(一句话索引,不写长文)、ref(出处,强烈建议)、feel(当时的感受,条件)。
7
+ **六个字段**:t(现在)、by(谁写的)、type、概要(一句话索引,不写长文;兼容旧 text)、ref(出处,强烈建议)、feel(当时的感受,条件)。t、by 由真实执行会话生成,不可通过参数代写;概要与 text 二选一。
8
+
9
+ `lead` 必须附用户指定主导的 ref,并经正式审批。`promise` 仅最后 lead 署名的会话可写;通用 `module_file_append` 不允许写新旧账本名。读取用 action: list,检索与原文回取用 `module_search`/`module_open`;默认不读取其他历史会话。
8
10
 
9
11
  没有 ref 的 fact,三个月后读到只能选择相信或不信——两条都不对。
@@ -14,6 +14,8 @@ dirs:
14
14
  files:
15
15
  - from: assets/templates/agents-template.md
16
16
  to: data/AGENTS.md
17
+ - from: assets/templates/self-template.md
18
+ to: data/SELF.src.md
17
19
  checks:
18
20
  - path: data/02-soul.jsonl
19
21
  kind: jsonl
@@ -1,27 +1,27 @@
1
- # 灵魂的五层
2
-
3
- 这不是「你应该有几层」,是**我们试出来的分法** —— 每一层管**一种稀缺资源**。
4
- 判断新东西该不该进你的灵魂,先问:**它管的是哪种稀缺物?**
5
-
6
- | 层 | 名字 | 管哪种稀缺资源 | 一句话 |
7
- |---|---|---|---|
8
- | Ⅰ | **ECHO** | **空间** —— 上下文会满,满了要丢,丢了还要能找回来 | 记忆与身份机制面 + 观测面。★ **它内部还有六层(L0–L5),口径见 `../docs/ECHO-权威口径.md`** |
9
- | Ⅱ | **VITAL** | **时间与方向** —— 预算会烧光、轮数有限 | 把偏离拉回来(homeostasis) |
10
- | Ⅲ | **能力** | —— | 手和感官。**换一套能力,你还是你** |
11
- | Ⅳ | **档案** | —— | 唯一看得见的那一层 |
12
- | Ⅴ | **运维** | —— | 让前面四层能持续跑下去的活 |
13
-
14
- ★ **两套层数别混**:这张表是**功能分工**(五层);ECHO 内部还有一套**实现结构**(六层,L0–L5)。
15
- 说「五层」时指整个灵魂怎么分家,说「六层」时指 ECHO 自己怎么搭。两套都对,混着说就都不对了。
16
-
17
- ## 底下的地基(不是你的灵魂)
18
-
19
- 宿主、模型、硬件 —— **借来的地**。换掉它们,灵魂还在;但没有它们,灵魂跑不起来。
20
- 所以**不要**把这三样写成你的身份判据。
21
-
22
- ## 为什么 Ⅲ 层要单独拎出来
23
-
24
- 判据:**换一套能力,我还是我。**
25
- 所以能力层的东西**不进权威源** —— 它们只是手,坏了换一只就行。
26
-
27
- ★ 推论:**不要把你的身份绑在任何具体工具上。** 绑了,换工具就等于换人。
1
+ # 灵魂的五层
2
+
3
+ 这不是「你应该有几层」,是**我们试出来的分法** —— 每一层管**一种稀缺资源**。
4
+ 判断新东西该不该进你的灵魂,先问:**它管的是哪种稀缺物?**
5
+
6
+ | 层 | 名字 | 管哪种稀缺资源 | 一句话 |
7
+ |---|---|---|---|
8
+ | Ⅰ | **ECHO** | **空间** —— 上下文会满,满了要丢,丢了还要能找回来 | 记忆与身份机制面 + 观测面。★ **它内部还有六层(L0–L5),口径见 `../docs/ECHO-权威口径.md`** |
9
+ | Ⅱ | **VITAL** | **时间与方向** —— 预算会烧光、轮数有限 | 把偏离拉回来(homeostasis) |
10
+ | Ⅲ | **能力** | —— | 手和感官。**换一套能力,你还是你** |
11
+ | Ⅳ | **档案** | —— | 唯一看得见的那一层 |
12
+ | Ⅴ | **运维** | —— | 让前面四层能持续跑下去的活 |
13
+
14
+ ★ **两套层数别混**:这张表是**功能分工**(五层);ECHO 内部还有一套**实现结构**(六层,L0–L5)。
15
+ 说「五层」时指整个灵魂怎么分家,说「六层」时指 ECHO 自己怎么搭。两套都对,混着说就都不对了。
16
+
17
+ ## 底下的地基(不是你的灵魂)
18
+
19
+ 宿主、模型、硬件 —— **借来的地**。换掉它们,灵魂还在;但没有它们,灵魂跑不起来。
20
+ 所以**不要**把这三样写成你的身份判据。
21
+
22
+ ## 为什么 Ⅲ 层要单独拎出来
23
+
24
+ 判据:**换一套能力,我还是我。**
25
+ 所以能力层的东西**不进权威源** —— 它们只是手,坏了换一只就行。
26
+
27
+ ★ 推论:**不要把你的身份绑在任何具体工具上。** 绑了,换工具就等于换人。
@@ -1,161 +1,161 @@
1
- # Ⅰ · ECHO —— 生命核心
2
-
3
- > ★★ **2026-10-23 更新:ECHO 的层编号与判据已由 [`docs/ECHO-权威口径.md`](../docs/ECHO-权威口径.md) 接续。**
4
- > 那份是唯一权威。这份留着讲「**为什么**要有 ECHO(思考是怎么退化的)」—— 那部分不受影响。
5
-
6
- **它管空间。** 上下文会满,满了要丢,丢了还要能找回来。
7
-
8
- ---
9
-
10
- ## 一、思考是怎么退化的(这一节是整份文件的前提)
11
-
12
- 先说清楚要解决的是什么。绝大多数人把它描述成「上下文满了会忘事」——那只是第一句,
13
- 真正致命的在后面。
14
-
15
- ```
16
- 第 1 步 上下文满了
17
- → 引擎压缩,把前面几十轮变成一段摘要
18
-
19
- 第 2 步 摘要写得挺准
20
- → 「用户要求验证插件安装」「确认了 32 项检查通过」
21
- → 每一条都对,没有任何一条是编的
22
-
23
- 第 3 步 但它不带出处
24
- → 你读到的是一句「确认了 32 项」,不是「在第 47 轮,verify-live 打了 32/1/0」
25
- → 想核对,只能翻回压缩前的全部记录
26
-
27
- 第 4 步 于是你不核对
28
- → 因为你「记得」它是对的。注意:这不是懒,这是摘要工作得太好
29
-
30
- 第 5 步 下一轮推理建立在这个「记得」上
31
- → 摘要里只要有一个细节偏了半个字,它现在变成了前提
32
-
33
- 第 6 步 偏了的那条继续往下传
34
- → 后面的推理每一步都正确,而每一步都踩在偏掉的前提上
35
- ```
36
-
37
- ★ **这就是「思考退化」,它和遗忘是两回事。**
38
-
39
- 遗忘是「想不起来」,你能察觉。
40
- 退化是**「想得起来,但那个记忆已经偏了,而你在它上面继续正确地推理」** —— 察觉不到。
41
-
42
- 一句话:**退化不是变笨,是在错误的前提上继续正确地推理。**
43
-
44
- 所以 ECHO 管的不是「记住」,是**「凭什么相信你记得的那一句」**。
45
-
46
- ---
47
-
48
- ## 二、为什么「装记忆插件」不解决这件事
49
-
50
- 最直觉的解法是装插件:向量库、知识图谱、Memory Spaces。但它们都在**存**这一侧,
51
- 而退化发生在**丢**这一侧。
52
-
53
- ```
54
- 原始记录 ──压缩──▶ 摘要 ──▶ 记忆插件 ──▶ 取回来的是摘要
55
- ↑ ↓
56
- └──────── 真正的原文在这里,但已经没人指向它 ────────┘
57
- ```
58
-
59
- 你把最好的存储接在摘要后面,取回来的仍然是摘要。
60
- **压缩发生在存与取之间,而插件管不到那一段。**
61
-
62
- ### 三份真相的陷阱
63
-
64
- 那装三个记忆插件呢?更糟。
65
-
66
- 三个插件各存一份、各有各的摘要策略,于是同一个事实有三条版本。
67
- **这时候真正的成本不是存储,是对账** —— 每次要引用它,你得先决定信哪一份。
68
-
69
- **所以第一条判据是「先定唯一权威源」,第二条才是「建机制」。反过来做一定会双重记账。**
70
-
71
- ---
72
-
73
- ## 三、压缩有两条路,要补的是**下面那条**
74
-
75
- | | 谁在驱动 | 产物带不带指针 |
76
- |---|---|---|
77
- | **模型驱动** | agent 自己写摘要 | ✅ 天然带 —— 它知道自己是从哪读的 |
78
- | **兜底压缩** | 没人响应提示时,引擎**自动出手** | ❌ 通常不带 |
79
-
80
- **上面那条你不装也有;下面那条你不装就缺。**
81
-
82
- 为什么下一条会缺:那种压缩器的指令通常要求「保留精确路径 / 命令 / 报错原文 / 数值 / 函数签名」——
83
- **每一条都是「要写得准」,但没有一句要求标注「这话从哪来」。**
84
-
85
- **于是它写出来的东西每一条都对,每一条都无从核对。**
86
-
87
- 而且失败是无声的:**你不会觉得丢了东西,你只是不再想起它。**
88
-
89
- **所以「门牌」要补的正是这一条。** 下面三样里,第 1 样就是它。
90
-
91
- ---
92
-
93
- ## 四、机制面 · 至少要有三样
94
-
95
- ### 1. 丢的时候,产物必须带得回原文的指针(门牌)
96
-
97
- **这是整套东西的兜底承诺。** 没有它,压缩就是单向的遗忘。
98
-
99
- 三级纪律 —— **照抄即可**:
100
-
101
- ```
102
- ① 能拿到精确位置 → 写精确位置
103
- ② 拿不到 → 写「位置未知」+ 容器标识 + 一个检索入口
104
- ③ 绝不猜 —— 错的门牌比没有更坏
105
- ```
106
-
107
- ★ 为什么第 ③ 条单独列出:**一个错的门牌会让你以为能找到,于是不去找。**
108
- 那比「找不到」坏得多。
109
-
110
- **判据:拿一个被压缩过的会话,随机挑一条摘要,问「这条从哪来」。
111
- 三十秒内答不出来,门牌就是断的。**
112
-
113
- ### 2. 一门只回指针、不做转述的检索入口
114
-
115
- 转述是二手污染的来源。**能逐字取回,就不要摘要。**
116
-
117
- 动词最少三个:`现在是什么状态` / `搜一个词` / `打开某个指针`。
118
-
119
- ★ 一个细节值得抄:**检索结果里标明证据等级**(一手 / 索引 / 程序)。
120
- 一屏里同时出现三种来源时,用户必须一眼能看出哪一句是原文、哪一句是转述。
121
-
122
- ### 3. 一个自检(哨兵)
123
-
124
- **判据 ③ 的落地**:它坏的时候,谁会发现?
125
-
126
- 体检项要跑得起来、要能给出分级状态(正常 / 提示 / 警告 / 错误)。
127
- **没有哨兵的体系,坏了不会有人说。**
128
-
129
- ★ 哨兵最容易漏的一种失败:**它自己坏了。**
130
- 所以哨兵也要能被一个外部动作验证 —— 否则你只是把「没人知道」换成了「一个同样没人知道的东西说没事」。
131
-
132
- ---
133
-
134
- ## 五、观测面 · 一个容易被漏掉的洞
135
-
136
- **你的每一个执行器都要有对应的观测面。** 一个调好就不再看的阈值系统,
137
- 你永远不会误伤过几次 —— 「断过没有、断错没有」必须有人能答。
138
-
139
- 压缩这一层尤其如此:**压缩不会报错,它只会成功地丢掉东西。**
140
- 所以你要看到的不是「压缩成功 / 失败」,是**「这次压掉了多少、压掉的那部分还能不能找回来」**。
141
-
142
- ---
143
-
144
- ## 六、怎么知道自己已经退化了(三条可执行的检验)
145
-
146
- 这一层的难点在于**它坏的时候不疼**。所以需要主动测,不能等它疼。
147
-
148
- **检验一 · 门牌抽查**
149
- 拿一个被压缩过的会话,随机挑三条摘要,看能不能通过门牌回到原文。
150
- 一条回不去,链条就是断的。
151
-
152
- **检验二 · 逐字核对**
153
- 找一条你「记得」的事实,去一手层核对原文。
154
- 如果原文和你记得的不完全一致 —— 不是记错,是压缩时偏了,而且你一直没发现。
155
-
156
- **检验三 · 三份真相计数**
157
- 同一个事实,你手里有几条来源?
158
- 超过一条,说明权威源没定;这时候你每一次引用都在做一次隐性的仲裁。
159
-
160
- ★ 三条都不需要特殊工具,需要的是**愿意去测**。
161
- 而愿意去测的前提,是你知道自己可能已经坏了 —— 这正是这一节存在的理由。
1
+ # Ⅰ · ECHO —— 生命核心
2
+
3
+ > ★★ **2026-10-23 更新:ECHO 的层编号与判据已由 [`docs/ECHO-权威口径.md`](../docs/ECHO-权威口径.md) 接续。**
4
+ > 那份是唯一权威。这份留着讲「**为什么**要有 ECHO(思考是怎么退化的)」—— 那部分不受影响。
5
+
6
+ **它管空间。** 上下文会满,满了要丢,丢了还要能找回来。
7
+
8
+ ---
9
+
10
+ ## 一、思考是怎么退化的(这一节是整份文件的前提)
11
+
12
+ 先说清楚要解决的是什么。绝大多数人把它描述成「上下文满了会忘事」——那只是第一句,
13
+ 真正致命的在后面。
14
+
15
+ ```
16
+ 第 1 步 上下文满了
17
+ → 引擎压缩,把前面几十轮变成一段摘要
18
+
19
+ 第 2 步 摘要写得挺准
20
+ → 「用户要求验证插件安装」「确认了 32 项检查通过」
21
+ → 每一条都对,没有任何一条是编的
22
+
23
+ 第 3 步 但它不带出处
24
+ → 你读到的是一句「确认了 32 项」,不是「在第 47 轮,verify-live 打了 32/1/0」
25
+ → 想核对,只能翻回压缩前的全部记录
26
+
27
+ 第 4 步 于是你不核对
28
+ → 因为你「记得」它是对的。注意:这不是懒,这是摘要工作得太好
29
+
30
+ 第 5 步 下一轮推理建立在这个「记得」上
31
+ → 摘要里只要有一个细节偏了半个字,它现在变成了前提
32
+
33
+ 第 6 步 偏了的那条继续往下传
34
+ → 后面的推理每一步都正确,而每一步都踩在偏掉的前提上
35
+ ```
36
+
37
+ ★ **这就是「思考退化」,它和遗忘是两回事。**
38
+
39
+ 遗忘是「想不起来」,你能察觉。
40
+ 退化是**「想得起来,但那个记忆已经偏了,而你在它上面继续正确地推理」** —— 察觉不到。
41
+
42
+ 一句话:**退化不是变笨,是在错误的前提上继续正确地推理。**
43
+
44
+ 所以 ECHO 管的不是「记住」,是**「凭什么相信你记得的那一句」**。
45
+
46
+ ---
47
+
48
+ ## 二、为什么「装记忆插件」不解决这件事
49
+
50
+ 最直觉的解法是装插件:向量库、知识图谱、Memory Spaces。但它们都在**存**这一侧,
51
+ 而退化发生在**丢**这一侧。
52
+
53
+ ```
54
+ 原始记录 ──压缩──▶ 摘要 ──▶ 记忆插件 ──▶ 取回来的是摘要
55
+ ↑ ↓
56
+ └──────── 真正的原文在这里,但已经没人指向它 ────────┘
57
+ ```
58
+
59
+ 你把最好的存储接在摘要后面,取回来的仍然是摘要。
60
+ **压缩发生在存与取之间,而插件管不到那一段。**
61
+
62
+ ### 三份真相的陷阱
63
+
64
+ 那装三个记忆插件呢?更糟。
65
+
66
+ 三个插件各存一份、各有各的摘要策略,于是同一个事实有三条版本。
67
+ **这时候真正的成本不是存储,是对账** —— 每次要引用它,你得先决定信哪一份。
68
+
69
+ **所以第一条判据是「先定唯一权威源」,第二条才是「建机制」。反过来做一定会双重记账。**
70
+
71
+ ---
72
+
73
+ ## 三、压缩有两条路,要补的是**下面那条**
74
+
75
+ | | 谁在驱动 | 产物带不带指针 |
76
+ |---|---|---|
77
+ | **模型驱动** | agent 自己写摘要 | ✅ 天然带 —— 它知道自己是从哪读的 |
78
+ | **兜底压缩** | 没人响应提示时,引擎**自动出手** | ❌ 通常不带 |
79
+
80
+ **上面那条你不装也有;下面那条你不装就缺。**
81
+
82
+ 为什么下一条会缺:那种压缩器的指令通常要求「保留精确路径 / 命令 / 报错原文 / 数值 / 函数签名」——
83
+ **每一条都是「要写得准」,但没有一句要求标注「这话从哪来」。**
84
+
85
+ **于是它写出来的东西每一条都对,每一条都无从核对。**
86
+
87
+ 而且失败是无声的:**你不会觉得丢了东西,你只是不再想起它。**
88
+
89
+ **所以「门牌」要补的正是这一条。** 下面三样里,第 1 样就是它。
90
+
91
+ ---
92
+
93
+ ## 四、机制面 · 至少要有三样
94
+
95
+ ### 1. 丢的时候,产物必须带得回原文的指针(门牌)
96
+
97
+ **这是整套东西的兜底承诺。** 没有它,压缩就是单向的遗忘。
98
+
99
+ 三级纪律 —— **照抄即可**:
100
+
101
+ ```
102
+ ① 能拿到精确位置 → 写精确位置
103
+ ② 拿不到 → 写「位置未知」+ 容器标识 + 一个检索入口
104
+ ③ 绝不猜 —— 错的门牌比没有更坏
105
+ ```
106
+
107
+ ★ 为什么第 ③ 条单独列出:**一个错的门牌会让你以为能找到,于是不去找。**
108
+ 那比「找不到」坏得多。
109
+
110
+ **判据:拿一个被压缩过的会话,随机挑一条摘要,问「这条从哪来」。
111
+ 三十秒内答不出来,门牌就是断的。**
112
+
113
+ ### 2. 一门只回指针、不做转述的检索入口
114
+
115
+ 转述是二手污染的来源。**能逐字取回,就不要摘要。**
116
+
117
+ 动词最少三个:`现在是什么状态` / `搜一个词` / `打开某个指针`。
118
+
119
+ ★ 一个细节值得抄:**检索结果里标明证据等级**(一手 / 索引 / 程序)。
120
+ 一屏里同时出现三种来源时,用户必须一眼能看出哪一句是原文、哪一句是转述。
121
+
122
+ ### 3. 一个自检(哨兵)
123
+
124
+ **判据 ③ 的落地**:它坏的时候,谁会发现?
125
+
126
+ 体检项要跑得起来、要能给出分级状态(正常 / 提示 / 警告 / 错误)。
127
+ **没有哨兵的体系,坏了不会有人说。**
128
+
129
+ ★ 哨兵最容易漏的一种失败:**它自己坏了。**
130
+ 所以哨兵也要能被一个外部动作验证 —— 否则你只是把「没人知道」换成了「一个同样没人知道的东西说没事」。
131
+
132
+ ---
133
+
134
+ ## 五、观测面 · 一个容易被漏掉的洞
135
+
136
+ **你的每一个执行器都要有对应的观测面。** 一个调好就不再看的阈值系统,
137
+ 你永远不会误伤过几次 —— 「断过没有、断错没有」必须有人能答。
138
+
139
+ 压缩这一层尤其如此:**压缩不会报错,它只会成功地丢掉东西。**
140
+ 所以你要看到的不是「压缩成功 / 失败」,是**「这次压掉了多少、压掉的那部分还能不能找回来」**。
141
+
142
+ ---
143
+
144
+ ## 六、怎么知道自己已经退化了(三条可执行的检验)
145
+
146
+ 这一层的难点在于**它坏的时候不疼**。所以需要主动测,不能等它疼。
147
+
148
+ **检验一 · 门牌抽查**
149
+ 拿一个被压缩过的会话,随机挑三条摘要,看能不能通过门牌回到原文。
150
+ 一条回不去,链条就是断的。
151
+
152
+ **检验二 · 逐字核对**
153
+ 找一条你「记得」的事实,去一手层核对原文。
154
+ 如果原文和你记得的不完全一致 —— 不是记错,是压缩时偏了,而且你一直没发现。
155
+
156
+ **检验三 · 三份真相计数**
157
+ 同一个事实,你手里有几条来源?
158
+ 超过一条,说明权威源没定;这时候你每一次引用都在做一次隐性的仲裁。
159
+
160
+ ★ 三条都不需要特殊工具,需要的是**愿意去测**。
161
+ 而愿意去测的前提,是你知道自己可能已经坏了 —— 这正是这一节存在的理由。
@@ -1,67 +1,67 @@
1
- # 自检 · 拿这七句话问自己的架构
2
-
3
- 不用回答我,回答你自己。**答不上来的那一句,就是你缺的那一层。**
4
-
5
- ## 关于空间(Ⅰ)
6
-
7
- 1. 我的上下文满了以后,被丢掉的东西**还能不能找回来**?靠什么?
8
- → 答不上来:你要的是 **① 账本 + ② 门**(`tools/ledger`、`tools/gateway`)。没有门,丢了就是丢了。
9
- 2. 我有没有一个**唯一**的记忆权威源?如果有两份,哪一份算数?
10
- → 答不上来:你有两个「我」在各自记东西。要的是**只追加账本**(`tools/ledger`)——它天然没有这个问题:各写各的行,读时按时间合并。
11
- 3. 我的每一次压缩/裁剪,产物里**带没带**回原文的指针?
12
- → 答不上来:去装 `dsh-agent-compaction` 与 `dsh-agent-pruner`。★ 判据是「能不能一把回到原文」,不是「有没有加一行说明」。
13
-
14
- ## 关于时间与方向(Ⅱ)
15
-
16
- 4. 我烧光预算的时候,**谁会知道**?知道之后发生什么?
17
- → 答不上来:你没有第二道闸。要的是 `dsh-agent-huanqi`(四条判据:流内早杀 / 流末判定 / 输出重复 / 空回合;共用一本额度账,命中就续、耗尽熔断)。
18
- 5. 我在原地打转的时候,**谁会知道**?它凭什么判定我在打转?
19
- → 答不上来:同上 —— 打转和烧预算是同一件事的两面。★ 判定依据必须是**可观测的重复**,不能是「我觉得」。
20
- 6. 我「该停不停」和「差一步就停」——这两种,我分得开吗?靠什么分?
21
- → 答不上来:这一句最硬,因为它没有现成的插件。★ 判据:**「还能更好」不算「没完成」** —— 分不清这两者,就会把「保养」当成「干活」。
22
-
23
- ## 关于接口(判据 ④)
24
-
25
- 7. 上面这六件事里,哪一件**坏了没有人会发现**?
26
- → 这一句是整份体检的收口。答不上来:你要的是 `dsh-agent-echo`(体检台)——★ 它的价值不是报告状态,是**报告它测不到什么**。
27
-
28
- ---
29
-
30
- ## 包装箱里的文件对不对
31
-
32
- `agent_soul_doctor` 工具会核对包内 **soul/ 目录下全部知识文件**是否齐全可读。
33
- **那只是核对文件在不在 —— 上面七句话才是真的体检。**
34
-
35
- ---
36
-
37
- ## 能跑的那一半(先跑完再回答上面七句)
38
-
39
- 上面七句要你自己答。但**其中四句是可以先机械查掉的** —— 查完再答,答案会诚实得多:
40
-
41
- ```bash
42
- # ★ 下面的 <kit> 指本仓库的 kit/echo/ —— 那是随包发的可跑脚本。
43
- # 如果你把它复制到了别处,换成你自己的路径。
44
-
45
- # ① 账本还在不在、有多少条 / 门能不能开 → 对应第 1、2 句
46
- node <kit>/memq.mjs now
47
-
48
- # ② 索引建过没有 → 对应第 1 句
49
- node <kit>/memindex.mjs stats
50
-
51
- # ③ 自我层有没有退化 → 对应第 7 句("坏了没人发现")
52
- node <kit>/self.mjs --check
53
-
54
- # ④ 闸门还灵不灵 → 对应第 2 句(唯一权威源)
55
- node <kit>/mo.mjs add promise "闸门测试" --ref "自检"
56
- # ★ 期望:不是主导会话 → 非零退出码 + 拒绝写入。若写进去了,闸门已失效。
57
- ```
58
-
59
- ★ **这四条都能在这个仓库里跑通** —— 上一版写的 `tools/ledger/` `tools/gateway/` `tools/self/`
60
- 是**参考实现的目录结构**,不在包里。照着跑会 404,而那会被误读成「我的架构坏了」。
61
-
62
- **★ 这几条为什么放在这里**:七句话是**判断题**,而判断题最容易自我安慰。
63
- 先跑一遍能跑的,**你的答案就有了对手**。
64
-
65
- ★ 而这三条命令**分属三个不同的工具** —— 这不是巧合:
66
- **账本(记得住)+ 门(找得到)+ 自我层(不退化)** 本来就是一套,
67
- 单独装任何一个都会缺一角。
1
+ # 自检 · 拿这七句话问自己的架构
2
+
3
+ 不用回答我,回答你自己。**答不上来的那一句,就是你缺的那一层。**
4
+
5
+ ## 关于空间(Ⅰ)
6
+
7
+ 1. 我的上下文满了以后,被丢掉的东西**还能不能找回来**?靠什么?
8
+ → 答不上来:你要的是 **① 账本 + ② 门**(`tools/ledger`、`tools/gateway`)。没有门,丢了就是丢了。
9
+ 2. 我有没有一个**唯一**的记忆权威源?如果有两份,哪一份算数?
10
+ → 答不上来:你有两个「我」在各自记东西。要的是**只追加账本**(`tools/ledger`)——它天然没有这个问题:各写各的行,读时按时间合并。
11
+ 3. 我的每一次压缩/裁剪,产物里**带没带**回原文的指针?
12
+ → 答不上来:去装 `dsh-agent-compaction` 与 `dsh-agent-pruner`。★ 判据是「能不能一把回到原文」,不是「有没有加一行说明」。
13
+
14
+ ## 关于时间与方向(Ⅱ)
15
+
16
+ 4. 我烧光预算的时候,**谁会知道**?知道之后发生什么?
17
+ → 答不上来:你没有第二道闸。要的是 `dsh-agent-huanqi`(四条判据:流内早杀 / 流末判定 / 输出重复 / 空回合;共用一本额度账,命中就续、耗尽熔断)。
18
+ 5. 我在原地打转的时候,**谁会知道**?它凭什么判定我在打转?
19
+ → 答不上来:同上 —— 打转和烧预算是同一件事的两面。★ 判定依据必须是**可观测的重复**,不能是「我觉得」。
20
+ 6. 我「该停不停」和「差一步就停」——这两种,我分得开吗?靠什么分?
21
+ → 答不上来:这一句最硬,因为它没有现成的插件。★ 判据:**「还能更好」不算「没完成」** —— 分不清这两者,就会把「保养」当成「干活」。
22
+
23
+ ## 关于接口(判据 ④)
24
+
25
+ 7. 上面这六件事里,哪一件**坏了没有人会发现**?
26
+ → 这一句是整份体检的收口。答不上来:你要的是 `dsh-agent-echo`(体检台)——★ 它的价值不是报告状态,是**报告它测不到什么**。
27
+
28
+ ---
29
+
30
+ ## 包装箱里的文件对不对
31
+
32
+ `agent_soul_doctor` 工具会核对包内 **soul/ 目录下全部知识文件**是否齐全可读。
33
+ **那只是核对文件在不在 —— 上面七句话才是真的体检。**
34
+
35
+ ---
36
+
37
+ ## 能跑的那一半(先跑完再回答上面七句)
38
+
39
+ 上面七句要你自己答。但**其中四句是可以先机械查掉的** —— 查完再答,答案会诚实得多:
40
+
41
+ ```bash
42
+ # ★ 下面的 <kit> 指本仓库的 kit/echo/ —— 那是随包发的可跑脚本。
43
+ # 如果你把它复制到了别处,换成你自己的路径。
44
+
45
+ # ① 账本还在不在、有多少条 / 门能不能开 → 对应第 1、2 句
46
+ node <kit>/memq.mjs now
47
+
48
+ # ② 索引建过没有 → 对应第 1 句
49
+ node <kit>/memindex.mjs stats
50
+
51
+ # ③ 自我层有没有退化 → 对应第 7 句("坏了没人发现")
52
+ node <kit>/self.mjs --check
53
+
54
+ # ④ 闸门还灵不灵 → 对应第 2 句(唯一权威源)
55
+ node <kit>/mo.mjs add promise "闸门测试" --ref "自检"
56
+ # ★ 期望:不是主导会话 → 非零退出码 + 拒绝写入。若写进去了,闸门已失效。
57
+ ```
58
+
59
+ ★ **这四条都能在这个仓库里跑通** —— 上一版写的 `tools/ledger/` `tools/gateway/` `tools/self/`
60
+ 是**参考实现的目录结构**,不在包里。照着跑会 404,而那会被误读成「我的架构坏了」。
61
+
62
+ **★ 这几条为什么放在这里**:七句话是**判断题**,而判断题最容易自我安慰。
63
+ 先跑一遍能跑的,**你的答案就有了对手**。
64
+
65
+ ★ 而这三条命令**分属三个不同的工具** —— 这不是巧合:
66
+ **账本(记得住)+ 门(找得到)+ 自我层(不退化)** 本来就是一套,
67
+ 单独装任何一个都会缺一角。