@oyasmi/pipiclaw 0.5.2 → 0.5.4

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 (216) hide show
  1. package/README.md +308 -209
  2. package/dist/agent/channel-runner.d.ts +3 -2
  3. package/dist/agent/channel-runner.js +22 -14
  4. package/dist/{command-extension.d.ts → agent/command-extension.d.ts} +0 -1
  5. package/dist/{command-extension.js → agent/command-extension.js} +1 -2
  6. package/dist/{commands.d.ts → agent/commands.d.ts} +0 -1
  7. package/dist/{commands.js → agent/commands.js} +0 -1
  8. package/dist/agent/index.d.ts +0 -1
  9. package/dist/agent/index.js +0 -1
  10. package/dist/agent/progress-formatter.d.ts +0 -1
  11. package/dist/agent/progress-formatter.js +0 -1
  12. package/dist/{prompt-builder.d.ts → agent/prompt-builder.d.ts} +1 -2
  13. package/dist/{prompt-builder.js → agent/prompt-builder.js} +0 -1
  14. package/dist/agent/run-queue.d.ts +0 -1
  15. package/dist/agent/run-queue.js +0 -1
  16. package/dist/agent/runner-factory.d.ts +0 -1
  17. package/dist/agent/runner-factory.js +0 -1
  18. package/dist/agent/session-events.d.ts +0 -1
  19. package/dist/agent/session-events.js +0 -1
  20. package/dist/agent/session-resource-gate.d.ts +10 -0
  21. package/dist/agent/session-resource-gate.js +44 -0
  22. package/dist/agent/type-guards.d.ts +0 -1
  23. package/dist/agent/type-guards.js +1 -2
  24. package/dist/agent/types.d.ts +1 -2
  25. package/dist/agent/types.js +0 -1
  26. package/dist/{config-loader.d.ts → agent/workspace-resources.d.ts} +3 -10
  27. package/dist/{config-loader.js → agent/workspace-resources.js} +3 -19
  28. package/dist/index.d.ts +9 -9
  29. package/dist/index.js +9 -9
  30. package/dist/log.d.ts +0 -1
  31. package/dist/log.js +0 -1
  32. package/dist/main.d.ts +0 -1
  33. package/dist/main.js +0 -1
  34. package/dist/memory/bootstrap.d.ts +0 -1
  35. package/dist/memory/bootstrap.js +0 -1
  36. package/dist/memory/candidates.d.ts +0 -1
  37. package/dist/memory/candidates.js +0 -1
  38. package/dist/memory/chinese-words.d.ts +0 -1
  39. package/dist/memory/chinese-words.js +64 -1
  40. package/dist/memory/consolidation.d.ts +0 -1
  41. package/dist/memory/consolidation.js +2 -3
  42. package/dist/memory/files.d.ts +0 -1
  43. package/dist/memory/files.js +0 -1
  44. package/dist/memory/lifecycle.d.ts +1 -2
  45. package/dist/memory/lifecycle.js +0 -1
  46. package/dist/memory/recall.d.ts +1 -1
  47. package/dist/memory/recall.js +77 -11
  48. package/dist/memory/session.d.ts +0 -1
  49. package/dist/memory/session.js +2 -3
  50. package/dist/{sidecar-worker.d.ts → memory/sidecar-worker.d.ts} +0 -1
  51. package/dist/{sidecar-worker.js → memory/sidecar-worker.js} +1 -2
  52. package/dist/models/api-keys.d.ts +7 -0
  53. package/dist/models/api-keys.js +16 -0
  54. package/dist/{model-utils.d.ts → models/utils.d.ts} +1 -2
  55. package/dist/{model-utils.js → models/utils.js} +0 -1
  56. package/dist/paths.d.ts +0 -1
  57. package/dist/paths.js +0 -1
  58. package/dist/runtime/bootstrap.d.ts +0 -1
  59. package/dist/runtime/bootstrap.js +2 -3
  60. package/dist/runtime/delivery.d.ts +0 -1
  61. package/dist/runtime/delivery.js +0 -1
  62. package/dist/runtime/dingtalk.d.ts +0 -1
  63. package/dist/runtime/dingtalk.js +1 -2
  64. package/dist/runtime/events.d.ts +0 -1
  65. package/dist/runtime/events.js +0 -1
  66. package/dist/runtime/store.d.ts +0 -1
  67. package/dist/runtime/store.js +0 -1
  68. package/dist/sandbox.d.ts +0 -1
  69. package/dist/sandbox.js +1 -2
  70. package/dist/{context.d.ts → settings.d.ts} +1 -2
  71. package/dist/{context.js → settings.js} +1 -2
  72. package/dist/{llm-json.d.ts → shared/llm-json.d.ts} +0 -1
  73. package/dist/{llm-json.js → shared/llm-json.js} +0 -1
  74. package/dist/shared/markdown-sections.d.ts +0 -1
  75. package/dist/shared/markdown-sections.js +0 -1
  76. package/dist/{shell-escape.d.ts → shared/shell-escape.d.ts} +0 -1
  77. package/dist/{shell-escape.js → shared/shell-escape.js} +0 -1
  78. package/dist/shared/text-utils.d.ts +0 -1
  79. package/dist/shared/text-utils.js +0 -1
  80. package/dist/shared/type-guards.d.ts +0 -1
  81. package/dist/shared/type-guards.js +0 -1
  82. package/dist/shared/types.d.ts +0 -1
  83. package/dist/shared/types.js +0 -1
  84. package/dist/subagents/discovery.d.ts +0 -1
  85. package/dist/subagents/discovery.js +1 -2
  86. package/dist/subagents/tool.d.ts +1 -2
  87. package/dist/subagents/tool.js +1 -2
  88. package/dist/tools/attach.d.ts +0 -1
  89. package/dist/tools/attach.js +0 -1
  90. package/dist/tools/bash.d.ts +0 -1
  91. package/dist/tools/bash.js +0 -1
  92. package/dist/tools/edit.d.ts +0 -1
  93. package/dist/tools/edit.js +1 -2
  94. package/dist/tools/index.d.ts +1 -2
  95. package/dist/tools/index.js +0 -1
  96. package/dist/tools/read.d.ts +0 -1
  97. package/dist/tools/read.js +1 -2
  98. package/dist/tools/truncate.d.ts +0 -1
  99. package/dist/tools/truncate.js +0 -1
  100. package/dist/tools/write-content.d.ts +0 -1
  101. package/dist/tools/write-content.js +1 -2
  102. package/dist/tools/write.d.ts +0 -1
  103. package/dist/tools/write.js +0 -1
  104. package/package.json +9 -3
  105. package/CHANGELOG.md +0 -47
  106. package/dist/agent/channel-runner.d.ts.map +0 -1
  107. package/dist/agent/channel-runner.js.map +0 -1
  108. package/dist/agent/index.d.ts.map +0 -1
  109. package/dist/agent/index.js.map +0 -1
  110. package/dist/agent/progress-formatter.d.ts.map +0 -1
  111. package/dist/agent/progress-formatter.js.map +0 -1
  112. package/dist/agent/run-queue.d.ts.map +0 -1
  113. package/dist/agent/run-queue.js.map +0 -1
  114. package/dist/agent/runner-factory.d.ts.map +0 -1
  115. package/dist/agent/runner-factory.js.map +0 -1
  116. package/dist/agent/session-events.d.ts.map +0 -1
  117. package/dist/agent/session-events.js.map +0 -1
  118. package/dist/agent/type-guards.d.ts.map +0 -1
  119. package/dist/agent/type-guards.js.map +0 -1
  120. package/dist/agent/types.d.ts.map +0 -1
  121. package/dist/agent/types.js.map +0 -1
  122. package/dist/agent.d.ts +0 -3
  123. package/dist/agent.d.ts.map +0 -1
  124. package/dist/agent.js +0 -2
  125. package/dist/agent.js.map +0 -1
  126. package/dist/command-extension.d.ts.map +0 -1
  127. package/dist/command-extension.js.map +0 -1
  128. package/dist/commands.d.ts.map +0 -1
  129. package/dist/commands.js.map +0 -1
  130. package/dist/config-loader.d.ts.map +0 -1
  131. package/dist/config-loader.js.map +0 -1
  132. package/dist/context.d.ts.map +0 -1
  133. package/dist/context.js.map +0 -1
  134. package/dist/index.d.ts.map +0 -1
  135. package/dist/index.js.map +0 -1
  136. package/dist/llm-json.d.ts.map +0 -1
  137. package/dist/llm-json.js.map +0 -1
  138. package/dist/log.d.ts.map +0 -1
  139. package/dist/log.js.map +0 -1
  140. package/dist/main.d.ts.map +0 -1
  141. package/dist/main.js.map +0 -1
  142. package/dist/memory/bootstrap.d.ts.map +0 -1
  143. package/dist/memory/bootstrap.js.map +0 -1
  144. package/dist/memory/candidates.d.ts.map +0 -1
  145. package/dist/memory/candidates.js.map +0 -1
  146. package/dist/memory/chinese-words.d.ts.map +0 -1
  147. package/dist/memory/chinese-words.js.map +0 -1
  148. package/dist/memory/consolidation.d.ts.map +0 -1
  149. package/dist/memory/consolidation.js.map +0 -1
  150. package/dist/memory/files.d.ts.map +0 -1
  151. package/dist/memory/files.js.map +0 -1
  152. package/dist/memory/lifecycle.d.ts.map +0 -1
  153. package/dist/memory/lifecycle.js.map +0 -1
  154. package/dist/memory/recall.d.ts.map +0 -1
  155. package/dist/memory/recall.js.map +0 -1
  156. package/dist/memory/session.d.ts.map +0 -1
  157. package/dist/memory/session.js.map +0 -1
  158. package/dist/model-utils.d.ts.map +0 -1
  159. package/dist/model-utils.js.map +0 -1
  160. package/dist/paths.d.ts.map +0 -1
  161. package/dist/paths.js.map +0 -1
  162. package/dist/prompt-builder.d.ts.map +0 -1
  163. package/dist/prompt-builder.js.map +0 -1
  164. package/dist/runtime/bootstrap.d.ts.map +0 -1
  165. package/dist/runtime/bootstrap.js.map +0 -1
  166. package/dist/runtime/delivery.d.ts.map +0 -1
  167. package/dist/runtime/delivery.js.map +0 -1
  168. package/dist/runtime/dingtalk.d.ts.map +0 -1
  169. package/dist/runtime/dingtalk.js.map +0 -1
  170. package/dist/runtime/events.d.ts.map +0 -1
  171. package/dist/runtime/events.js.map +0 -1
  172. package/dist/runtime/store.d.ts.map +0 -1
  173. package/dist/runtime/store.js.map +0 -1
  174. package/dist/sandbox.d.ts.map +0 -1
  175. package/dist/sandbox.js.map +0 -1
  176. package/dist/shared/markdown-sections.d.ts.map +0 -1
  177. package/dist/shared/markdown-sections.js.map +0 -1
  178. package/dist/shared/text-utils.d.ts.map +0 -1
  179. package/dist/shared/text-utils.js.map +0 -1
  180. package/dist/shared/type-guards.d.ts.map +0 -1
  181. package/dist/shared/type-guards.js.map +0 -1
  182. package/dist/shared/types.d.ts.map +0 -1
  183. package/dist/shared/types.js.map +0 -1
  184. package/dist/shell-escape.d.ts.map +0 -1
  185. package/dist/shell-escape.js.map +0 -1
  186. package/dist/sidecar-worker.d.ts.map +0 -1
  187. package/dist/sidecar-worker.js.map +0 -1
  188. package/dist/subagents/discovery.d.ts.map +0 -1
  189. package/dist/subagents/discovery.js.map +0 -1
  190. package/dist/subagents/tool.d.ts.map +0 -1
  191. package/dist/subagents/tool.js.map +0 -1
  192. package/dist/tools/attach.d.ts.map +0 -1
  193. package/dist/tools/attach.js.map +0 -1
  194. package/dist/tools/bash.d.ts.map +0 -1
  195. package/dist/tools/bash.js.map +0 -1
  196. package/dist/tools/edit.d.ts.map +0 -1
  197. package/dist/tools/edit.js.map +0 -1
  198. package/dist/tools/index.d.ts.map +0 -1
  199. package/dist/tools/index.js.map +0 -1
  200. package/dist/tools/read.d.ts.map +0 -1
  201. package/dist/tools/read.js.map +0 -1
  202. package/dist/tools/truncate.d.ts.map +0 -1
  203. package/dist/tools/truncate.js.map +0 -1
  204. package/dist/tools/write-content.d.ts.map +0 -1
  205. package/dist/tools/write-content.js.map +0 -1
  206. package/dist/tools/write.d.ts.map +0 -1
  207. package/dist/tools/write.js.map +0 -1
  208. package/docs/memory-audit.md +0 -330
  209. package/docs/memory-optimization-round2.md +0 -319
  210. package/docs/specs/001-implement-memory/memory-rfc.md +0 -297
  211. package/docs/specs/002-subagent/pi-subagent-analyse.txt +0 -190
  212. package/docs/specs/002-subagent/pi-subagent-design.txt +0 -266
  213. package/docs/specs/002-subagent/pi-subagent-phase1-plan.txt +0 -529
  214. package/docs/specs/003-improve-memory/design.md +0 -537
  215. package/docs/specs/003-improve-memory/interfaces-and-tests.md +0 -473
  216. package/docs/specs/003-improve-memory/spec.md +0 -357
@@ -1,357 +0,0 @@
1
- # Pipiclaw Context Upgrade Spec
2
-
3
- ## Status
4
-
5
- Draft
6
-
7
- ## Purpose
8
-
9
- This spec defines the next-stage context architecture for `pipiclaw`.
10
-
11
- It extends the existing [memory RFC](/Users/oyasmi/projects/pipiclaw/docs/memory-rfc.md) rather than replacing it wholesale.
12
-
13
- The primary goal is not "more memory files". The goal is to materially improve:
14
-
15
- 1. cross-turn continuity
16
- 2. long-task stability
17
- 3. compaction resilience
18
- 4. sub-agent usefulness
19
- 5. skill usefulness in a long-running DingTalk channel workspace
20
-
21
- The design remains file-based and runtime-local. It does not introduce embeddings, vector search, or a dedicated memory database.
22
-
23
- ## Problems To Solve
24
-
25
- The current model is good enough to persist durable facts, but still leaves several gaps:
26
-
27
- 1. `MEMORY.md` and `HISTORY.md` are available but not proactively surfaced, so the model often fails to use them at the right time.
28
- 2. "current working state" is mixed into durable memory and is therefore either too weak, too stale, or too noisy.
29
- 3. compaction happens with only indirect help from memory consolidation, which is weaker than having an explicit working-state artifact.
30
- 4. sub-agents are context-isolated, but there is no standard way to give them the most relevant channel memory automatically.
31
- 5. skills are loaded, but they do not yet participate in a richer lifecycle where memory and runtime hooks reinforce one another.
32
-
33
- ## Non-Goals
34
-
35
- 1. No vector retrieval, embedding index, semantic database, or memory plugin framework.
36
- 2. No special standalone `memory_search` tool for the model.
37
- 3. No automatic mutation of workspace-level `SOUL.md`, `AGENTS.md`, or workspace `MEMORY.md`.
38
- 4. No proactive scanning of `log.jsonl` or `context.jsonl` as normal memory inputs.
39
- 5. No attempt to clone the full `claude-code` agent OS, swarm runtime, or prompt-cache infrastructure in this phase.
40
-
41
- ## Context Layers
42
-
43
- The upgraded context model has five layers.
44
-
45
- ### 1. Identity Layer
46
-
47
- - `workspace/SOUL.md`
48
- - `workspace/AGENTS.md`
49
-
50
- Semantics:
51
-
52
- - loaded into session context at session start
53
- - human-managed
54
- - authoritative
55
- - not rewritten by runtime maintenance
56
-
57
- ### 2. Shared Durable Memory
58
-
59
- - `workspace/MEMORY.md`
60
-
61
- Semantics:
62
-
63
- - stable shared background
64
- - read on demand
65
- - not auto-rewritten by runtime
66
-
67
- ### 3. Channel Durable Memory
68
-
69
- - `<channel>/MEMORY.md`
70
-
71
- Semantics:
72
-
73
- - durable facts, decisions, preferences, constraints, medium-horizon open loops
74
- - append-first, then cleanup/fold
75
- - channel-scoped
76
- - runtime-managed
77
-
78
- Important change:
79
-
80
- `MEMORY.md` is no longer the primary owner of minute-by-minute "what am I doing right now" state. It may still contain open loops, but detailed active execution state belongs to `SESSION.md`.
81
-
82
- ### 4. Channel Working Memory
83
-
84
- - `<channel>/SESSION.md`
85
-
86
- Semantics:
87
-
88
- - current task state
89
- - active files and commands
90
- - current hypotheses and next steps
91
- - recent important errors and corrections
92
- - channel-scoped handoff artifact across sessions and compactions
93
- - runtime-managed
94
-
95
- This is the major addition in this spec.
96
-
97
- ### 5. Channel History
98
-
99
- - `<channel>/HISTORY.md`
100
-
101
- Semantics:
102
-
103
- - summarized chronological recovery material
104
- - older work periods, decisions, milestones
105
- - runtime-managed
106
- - not intended for normal manual maintenance
107
-
108
- ## Cold Storage
109
-
110
- These files remain cold:
111
-
112
- - `<channel>/log.jsonl`
113
- - `<channel>/context.jsonl`
114
-
115
- They are not part of normal memory recall and are not proactively loaded into prompts.
116
-
117
- ## Core Invariants
118
-
119
- The upgraded design must preserve these invariants:
120
-
121
- 1. File-based operation remains the source of truth.
122
- 2. The model should not need to remember to manually read the right memory file in common cases.
123
- 3. `SESSION.md` is the working-state artifact.
124
- 4. `MEMORY.md` is the durable-facts artifact.
125
- 5. `HISTORY.md` is the chronological-summary artifact.
126
- 6. Workspace memory remains human-managed.
127
- 7. Raw transport/session archives remain cold.
128
- 8. Failure of a background updater must not corrupt persisted memory files.
129
- 9. The system must degrade gracefully when an updater fails.
130
- 10. Memory improvements must help sub-agents and skills, not just the main agent.
131
-
132
- ## File Semantics
133
-
134
- ### `SESSION.md`
135
-
136
- `SESSION.md` is channel-scoped hot memory.
137
-
138
- It should answer:
139
-
140
- 1. What is the user currently trying to achieve?
141
- 2. What is the current state of work?
142
- 3. Which files and commands matter right now?
143
- 4. What constraints and recent failures should not be forgotten?
144
- 5. What are the next likely steps?
145
-
146
- It should not become:
147
-
148
- 1. a raw transcript
149
- 2. a duplicate of all durable facts already in `MEMORY.md`
150
- 3. an infinite worklog
151
-
152
- Read/write rule:
153
-
154
- 1. runtime-managed by default
155
- 2. eligible for automatic targeted recall
156
- 3. not intended for normal manual maintenance by the main agent
157
- 4. may be edited only when an explicit user/admin instruction makes that the task itself
158
-
159
- ### `MEMORY.md`
160
-
161
- `MEMORY.md` remains the durable channel memory, but the threshold for what belongs here gets stricter.
162
-
163
- It should keep:
164
-
165
- 1. stable preferences
166
- 2. durable decisions
167
- 3. medium-horizon constraints
168
- 4. important open loops that must survive beyond the current execution burst
169
-
170
- It should avoid:
171
-
172
- 1. step-by-step active worklog
173
- 2. temporary local debugging observations unless they have lasting value
174
- 3. detailed "current state" that will likely be obsolete after a few turns
175
-
176
- Read/write rule:
177
-
178
- 1. readable on demand
179
- 2. writable by runtime consolidation
180
- 3. still manually writable when necessary
181
- 4. cleanup is allowed to remove transient state that should now live in `SESSION.md`
182
-
183
- ### `HISTORY.md`
184
-
185
- `HISTORY.md` remains the recovery narrative.
186
-
187
- It should keep:
188
-
189
- 1. notable work periods
190
- 2. milestones
191
- 3. decision outcomes
192
- 4. enough chronology for later recovery
193
-
194
- It should avoid:
195
-
196
- 1. dense per-turn detail
197
- 2. raw snippets copied from transcript
198
- 3. facts better represented in `MEMORY.md`
199
-
200
- Read/write rule:
201
-
202
- 1. readable on demand
203
- 2. runtime-managed
204
- 3. not intended for ordinary manual edits
205
-
206
- ## Closed-Loop Lifecycle
207
-
208
- The upgraded model introduces an explicit closed loop:
209
-
210
- 1. active session work happens in warm context
211
- 2. recent work updates `SESSION.md`
212
- 3. stable facts and medium-horizon open loops are promoted into `MEMORY.md`
213
- 4. older narrative is summarized into `HISTORY.md`
214
- 5. future prompts receive targeted recall from `SESSION.md`, `MEMORY.md`, and `HISTORY.md`
215
-
216
- This loop must work even when:
217
-
218
- 1. the session compacts
219
- 2. the user starts a new session in the same channel
220
- 3. the process restarts
221
- 4. the main agent delegates work to a sub-agent
222
-
223
- ## Recall Model
224
-
225
- The system should stop relying purely on "the model may remember to read memory files".
226
-
227
- Instead, each turn may inject a small amount of relevant memory context chosen from:
228
-
229
- 1. `SESSION.md`
230
- 2. channel `MEMORY.md`
231
- 3. workspace `MEMORY.md`
232
- 4. channel `HISTORY.md`
233
-
234
- Selection rules:
235
-
236
- 1. small budget
237
- 2. high precision
238
- 3. recency-aware
239
- 4. section-aware
240
- 5. prefer `SESSION.md` when current work state matters
241
- 6. prefer `MEMORY.md` when durable constraints or preferences matter
242
- 7. prefer `HISTORY.md` when recovery of older narrative matters
243
-
244
- ## SESSION.md Lifecycle Contract
245
-
246
- `SESSION.md` must follow this lifecycle:
247
-
248
- 1. created automatically with the channel memory files
249
- 2. not loaded wholesale into every prompt
250
- 3. eligible for targeted recall injection
251
- 4. updated in the background during normal work
252
- 5. synchronously refreshed before context-reduction boundaries when possible
253
- 6. carried across `/new` session boundaries within the same channel
254
- 7. cleaned and condensed periodically so it remains current
255
- 8. recreated automatically if missing on an old channel directory
256
-
257
- Important semantic rule:
258
-
259
- `/new` starts a new model session, but does not imply "forget current channel work". `SESSION.md` is allowed to survive `/new` if the channel still has active work.
260
-
261
- ## Relationship Between SESSION.md And Existing Memory Files
262
-
263
- The relationship is:
264
-
265
- 1. `SESSION.md` owns high-churn working state
266
- 2. `MEMORY.md` owns durable and semi-durable channel knowledge
267
- 3. `HISTORY.md` owns older narrative recovery
268
-
269
- Promotion rules:
270
-
271
- 1. stable facts discovered in `SESSION.md` may be promoted into `MEMORY.md`
272
- 2. resolved work periods may be summarized into `HISTORY.md`
273
- 3. stale transient content should be removed from `SESSION.md`
274
- 4. cleanup may also remove overly transient content that had historically accumulated in `MEMORY.md`
275
-
276
- This lets the system gradually migrate away from using channel `MEMORY.md` as the sole carrier of both durable and active state.
277
-
278
- ## Source Of Truth Precedence
279
-
280
- When the same topic appears in multiple files, runtime and prompts should treat them in this precedence order:
281
-
282
- 1. `SESSION.md` for current active work state
283
- 2. `MEMORY.md` for durable constraints and decisions
284
- 3. `HISTORY.md` for older chronology
285
-
286
- Practical implication:
287
-
288
- 1. a stale `MEMORY.md` note must not override a fresher `SESSION.md` current-state section
289
- 2. a stale `HISTORY.md` block must not override a fresher durable decision in `MEMORY.md`
290
-
291
- ## Compaction Contract
292
-
293
- Compaction should become `SESSION.md`-aware.
294
-
295
- The preferred order is:
296
-
297
- 1. refresh `SESSION.md`
298
- 2. run inline durable consolidation into `MEMORY.md` and `HISTORY.md`
299
- 3. compact using the latest `SESSION.md` as part of the retained context strategy
300
-
301
- Graceful degradation rules:
302
-
303
- 1. if `SESSION.md` refresh fails, use the last persisted `SESSION.md`
304
- 2. if durable consolidation fails, compaction may still proceed if `SESSION.md` is available
305
- 3. failures must be logged and retried in background maintenance
306
-
307
- This keeps compaction safe without turning memory maintenance into a hard availability dependency.
308
-
309
- ## Migration Contract
310
-
311
- Existing channel directories already containing only `MEMORY.md` and `HISTORY.md` must migrate safely.
312
-
313
- Migration rules:
314
-
315
- 1. missing `SESSION.md` is treated as normal and repaired by ensure-file bootstrap
316
- 2. existing `MEMORY.md` and `HISTORY.md` content remains authoritative
317
- 3. no one-time destructive rewrite of historical `MEMORY.md` content is required
318
- 4. transient content historically living in `MEMORY.md` is cleaned gradually by normal maintenance
319
-
320
- This keeps rollout incremental and low-risk for live DingTalk channels.
321
-
322
- ## Sub-Agent Contract
323
-
324
- Sub-agents remain isolated by default, but the runtime gains a standard way to provide them with the right memory context.
325
-
326
- Two modes should exist:
327
-
328
- 1. isolated
329
- - current behavior
330
- - only runtime basics plus the explicitly provided task
331
- 2. contextual
332
- - runtime prepends relevant memory and working-state context automatically
333
-
334
- The contextual mode should pull from the same recall pipeline as the main agent, but with stricter budgets.
335
-
336
- ## Skill Contract
337
-
338
- Skills should become lightweight participants in the upgraded context system.
339
-
340
- Expected improvements:
341
-
342
- 1. richer frontmatter describing when a skill should be used
343
- 2. optional scoped hooks for session lifecycle events
344
- 3. optional declaration of memory relevance or path relevance
345
-
346
- The skill system is still intentionally lighter than the `claude-code` version. The goal is stronger reuse and better context shaping, not a full plugin platform.
347
-
348
- ## Rollout Principle
349
-
350
- This spec is designed for staged implementation:
351
-
352
- 1. first improve recall
353
- 2. then add `SESSION.md`
354
- 3. then bridge compaction
355
- 4. then upgrade sub-agent and skill integration
356
-
357
- At each stage, existing `MEMORY.md` and `HISTORY.md` behavior must continue to work.