@zooique/memora 0.1.0 → 0.2.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 (190) hide show
  1. package/dist/agent/agent.d.ts +155 -23
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +386 -124
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/assembler.d.ts +8 -2
  6. package/dist/agent/assembler.d.ts.map +1 -1
  7. package/dist/agent/assembler.js +17 -6
  8. package/dist/agent/assembler.js.map +1 -1
  9. package/dist/agent/builtinToolHandlers.d.ts +1 -1
  10. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  11. package/dist/agent/builtinToolHandlers.js +5 -3
  12. package/dist/agent/builtinToolHandlers.js.map +1 -1
  13. package/dist/agent/builtinTools.d.ts +1 -1
  14. package/dist/agent/builtinTools.js +2 -2
  15. package/dist/agent/builtinTools.js.map +1 -1
  16. package/dist/agent/constants.d.ts +27 -6
  17. package/dist/agent/constants.d.ts.map +1 -1
  18. package/dist/agent/constants.js +27 -6
  19. package/dist/agent/constants.js.map +1 -1
  20. package/dist/agent/contextManager.d.ts +35 -9
  21. package/dist/agent/contextManager.d.ts.map +1 -1
  22. package/dist/agent/contextManager.js +138 -25
  23. package/dist/agent/contextManager.js.map +1 -1
  24. package/dist/agent/loop.d.ts +41 -11
  25. package/dist/agent/loop.d.ts.map +1 -1
  26. package/dist/agent/loop.js +143 -61
  27. package/dist/agent/loop.js.map +1 -1
  28. package/dist/agent/managers/archiveCoordinator.d.ts +100 -0
  29. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -0
  30. package/dist/agent/managers/archiveCoordinator.js +127 -0
  31. package/dist/agent/managers/archiveCoordinator.js.map +1 -0
  32. package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -1
  33. package/dist/agent/managers/autoConfigRefiner.js +1 -1
  34. package/dist/agent/managers/autoConfigRefiner.js.map +1 -1
  35. package/dist/agent/managers/configManager.d.ts +13 -2
  36. package/dist/agent/managers/configManager.d.ts.map +1 -1
  37. package/dist/agent/managers/configManager.js +13 -5
  38. package/dist/agent/managers/configManager.js.map +1 -1
  39. package/dist/agent/managers/insightExtractor.d.ts +36 -3
  40. package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
  41. package/dist/agent/managers/insightExtractor.js +48 -11
  42. package/dist/agent/managers/insightExtractor.js.map +1 -1
  43. package/dist/agent/managers/memoryAdvisor.d.ts +4 -2
  44. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  45. package/dist/agent/managers/memoryAdvisor.js +6 -4
  46. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  47. package/dist/agent/managers/memoryDecayScheduler.d.ts +113 -0
  48. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -0
  49. package/dist/agent/managers/memoryDecayScheduler.js +134 -0
  50. package/dist/agent/managers/memoryDecayScheduler.js.map +1 -0
  51. package/dist/agent/managers/memoryInspector.d.ts +70 -10
  52. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  53. package/dist/agent/managers/memoryInspector.js +97 -23
  54. package/dist/agent/managers/memoryInspector.js.map +1 -1
  55. package/dist/agent/managers/sessionArchiver.d.ts +77 -0
  56. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -0
  57. package/dist/agent/managers/sessionArchiver.js +175 -0
  58. package/dist/agent/managers/sessionArchiver.js.map +1 -0
  59. package/dist/agent/managers/sessionManager.d.ts +10 -0
  60. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  61. package/dist/agent/managers/sessionManager.js +26 -5
  62. package/dist/agent/managers/sessionManager.js.map +1 -1
  63. package/dist/agent/managers/workProjection.d.ts +1 -1
  64. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  65. package/dist/agent/managers/workProjection.js +13 -10
  66. package/dist/agent/managers/workProjection.js.map +1 -1
  67. package/dist/agent/messageHistory.d.ts +1 -22
  68. package/dist/agent/messageHistory.d.ts.map +1 -1
  69. package/dist/agent/messageHistory.js +3 -19
  70. package/dist/agent/messageHistory.js.map +1 -1
  71. package/dist/agent/toolExecutor.d.ts +5 -18
  72. package/dist/agent/toolExecutor.d.ts.map +1 -1
  73. package/dist/agent/toolExecutor.js +7 -7
  74. package/dist/agent/toolExecutor.js.map +1 -1
  75. package/dist/agent/tracer.d.ts +8 -1
  76. package/dist/agent/tracer.d.ts.map +1 -1
  77. package/dist/agent/tracer.js +8 -1
  78. package/dist/agent/tracer.js.map +1 -1
  79. package/dist/agent/types.d.ts +29 -0
  80. package/dist/agent/types.d.ts.map +1 -1
  81. package/dist/agent/{managers/userFactExtractor.d.ts → userFactExtractor.d.ts} +2 -2
  82. package/dist/agent/userFactExtractor.d.ts.map +1 -0
  83. package/dist/agent/userFactExtractor.js.map +1 -0
  84. package/dist/config/loader.d.ts +4 -4
  85. package/dist/config/loader.d.ts.map +1 -1
  86. package/dist/config/loader.js +11 -2
  87. package/dist/config/loader.js.map +1 -1
  88. package/dist/eval/evalTypes.js +1 -1
  89. package/dist/eval/evalTypes.js.map +1 -1
  90. package/dist/index.d.ts +5 -2
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +2 -1
  93. package/dist/index.js.map +1 -1
  94. package/dist/llm/embedding.d.ts.map +1 -1
  95. package/dist/llm/embedding.js +8 -6
  96. package/dist/llm/embedding.js.map +1 -1
  97. package/dist/llm/factory.d.ts.map +1 -1
  98. package/dist/llm/factory.js +2 -1
  99. package/dist/llm/factory.js.map +1 -1
  100. package/dist/llm/openaiCompatible.d.ts +9 -0
  101. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  102. package/dist/llm/openaiCompatible.js +77 -33
  103. package/dist/llm/openaiCompatible.js.map +1 -1
  104. package/dist/llm/provider.d.ts +17 -3
  105. package/dist/llm/provider.d.ts.map +1 -1
  106. package/dist/llm/provider.js +6 -2
  107. package/dist/llm/provider.js.map +1 -1
  108. package/dist/logging/logger.d.ts.map +1 -1
  109. package/dist/logging/logger.js +25 -9
  110. package/dist/logging/logger.js.map +1 -1
  111. package/dist/memory/hybridMerge.d.ts +54 -0
  112. package/dist/memory/hybridMerge.d.ts.map +1 -0
  113. package/dist/memory/hybridMerge.js +36 -0
  114. package/dist/memory/hybridMerge.js.map +1 -0
  115. package/dist/memory/inMemoryStorage.d.ts +90 -15
  116. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  117. package/dist/memory/inMemoryStorage.js +179 -28
  118. package/dist/memory/inMemoryStorage.js.map +1 -1
  119. package/dist/memory/loader.js +1 -1
  120. package/dist/memory/loader.js.map +1 -1
  121. package/dist/memory/projectManager.d.ts +34 -5
  122. package/dist/memory/projectManager.d.ts.map +1 -1
  123. package/dist/memory/projectManager.js +98 -62
  124. package/dist/memory/projectManager.js.map +1 -1
  125. package/dist/memory/recall.d.ts +7 -18
  126. package/dist/memory/recall.d.ts.map +1 -1
  127. package/dist/memory/recall.js +14 -19
  128. package/dist/memory/recall.js.map +1 -1
  129. package/dist/memory/storageInterface.d.ts +81 -14
  130. package/dist/memory/storageInterface.d.ts.map +1 -1
  131. package/dist/memory/store.js +1 -1
  132. package/dist/memory/store.js.map +1 -1
  133. package/dist/memory/types.d.ts +7 -1
  134. package/dist/memory/types.d.ts.map +1 -1
  135. package/dist/memory/types.js +5 -1
  136. package/dist/memory/types.js.map +1 -1
  137. package/dist/memory/userProfile.d.ts +6 -6
  138. package/dist/memory/userProfile.d.ts.map +1 -1
  139. package/dist/memory/userProfile.js +20 -15
  140. package/dist/memory/userProfile.js.map +1 -1
  141. package/dist/memory/vectorStore.d.ts +35 -0
  142. package/dist/memory/vectorStore.d.ts.map +1 -1
  143. package/dist/memory/vectorStore.js +111 -2
  144. package/dist/memory/vectorStore.js.map +1 -1
  145. package/dist/persona/personaManager.d.ts +17 -4
  146. package/dist/persona/personaManager.d.ts.map +1 -1
  147. package/dist/persona/personaManager.js +44 -12
  148. package/dist/persona/personaManager.js.map +1 -1
  149. package/dist/security/pathGuard.d.ts +29 -7
  150. package/dist/security/pathGuard.d.ts.map +1 -1
  151. package/dist/security/pathGuard.js +148 -81
  152. package/dist/security/pathGuard.js.map +1 -1
  153. package/dist/skill/skillManager.d.ts +15 -0
  154. package/dist/skill/skillManager.d.ts.map +1 -1
  155. package/dist/skill/skillManager.js +25 -3
  156. package/dist/skill/skillManager.js.map +1 -1
  157. package/dist/skill/types.d.ts +7 -1
  158. package/dist/skill/types.d.ts.map +1 -1
  159. package/dist/utils/errors.d.ts +26 -7
  160. package/dist/utils/errors.d.ts.map +1 -1
  161. package/dist/utils/errors.js +10 -18
  162. package/dist/utils/errors.js.map +1 -1
  163. package/dist/utils/eventEmitter.d.ts +9 -2
  164. package/dist/utils/eventEmitter.d.ts.map +1 -1
  165. package/dist/utils/eventEmitter.js +1 -1
  166. package/dist/utils/eventEmitter.js.map +1 -1
  167. package/dist/utils/frontmatter.d.ts +8 -1
  168. package/dist/utils/frontmatter.d.ts.map +1 -1
  169. package/dist/utils/frontmatter.js +14 -3
  170. package/dist/utils/frontmatter.js.map +1 -1
  171. package/dist/utils/path.d.ts +5 -1
  172. package/dist/utils/path.d.ts.map +1 -1
  173. package/dist/utils/path.js +5 -1
  174. package/dist/utils/path.js.map +1 -1
  175. package/dist/utils/safeTimer.d.ts +19 -0
  176. package/dist/utils/safeTimer.d.ts.map +1 -1
  177. package/dist/utils/safeTimer.js +27 -0
  178. package/dist/utils/safeTimer.js.map +1 -1
  179. package/dist/utils/segmenter.d.ts +0 -12
  180. package/dist/utils/segmenter.d.ts.map +1 -1
  181. package/dist/utils/segmenter.js +8 -3
  182. package/dist/utils/segmenter.js.map +1 -1
  183. package/dist/utils/strings.d.ts +1 -1
  184. package/dist/utils/strings.d.ts.map +1 -1
  185. package/dist/utils/strings.js +4 -2
  186. package/dist/utils/strings.js.map +1 -1
  187. package/package.json +1 -1
  188. package/dist/agent/managers/userFactExtractor.d.ts.map +0 -1
  189. package/dist/agent/managers/userFactExtractor.js.map +0 -1
  190. /package/dist/agent/{managers/userFactExtractor.js → userFactExtractor.js} +0 -0
@@ -1,90 +1,230 @@
1
1
  import { validateSource } from '../memory/types.js';
2
2
  import { segmentText } from '../utils/segmenter.js';
3
+ import { configError } from '../utils/errors.js';
3
4
  import { logger } from '../logging/logger.js';
4
5
  import { applyDecayToMemory } from '../memory/recall.js';
6
+ import { nowIso } from '../utils/time.js';
5
7
  /**
6
8
  * 内存存储实现
7
9
  *
8
10
  * 使用 Map 存储记忆,核心操作 O(1)~O(log n)。
9
- * P2-2 优化:维护 source→count 增量缓存,stats()/sourceHealth() 无需全量遍历。
11
+ * 优化:维护 source→count 增量缓存,stats()/sourceHealth() 无需全量遍历。
10
12
  */
11
13
  export class InMemoryStorage {
12
14
  /** 记忆存储(id → Memory) */
13
15
  memories = new Map();
14
- /** P2-2 source→count 增量缓存(upsert/delete 时维护,getAllSources 时直接读取) */
16
+ /** source→count 增量缓存(upsert/delete 时维护,getAllSources 时直接读取) */
15
17
  sourceCountCache = new Map();
16
18
  /**
17
19
  * 插入或更新记忆
18
20
  *
19
21
  * 自动校验 source 字段,对疑似 typo 发出警告日志。
20
- * P2-2 增量维护 sourceCountCache:更新时旧 source 减 1、新 source 加 1。
22
+ * 增量维护 sourceCountCache(仅统计活跃记忆):
23
+ * - 新增活跃记忆:source 计数 +1
24
+ * - 更新同 source 同活跃态:计数不变
25
+ * - 更新换 source:旧 source -1、新 source +1
26
+ * 软删除状态转换维护:
27
+ * - 活跃 → 软删除:source 计数 -1
28
+ * - 软删除 → 活跃:source 计数 +1
29
+ *
30
+ * 软删除校验:
31
+ * 若 existing 已软删除(deletedAt !== undefined)且 newMemory 为活跃态
32
+ * (deletedAt === undefined),抛出错误阻止"通过 upsert 复活软删除记忆"。
33
+ * 调用方必须先显式 restore(id) 恢复记忆后再 upsert。
34
+ * 例外:newMemory 显式带 deletedAt(如测试场景篡改 deletedAt)允许通过,
35
+ * 因为此时调用方明确意图是覆盖软删除状态而非"复活"。
36
+ *
37
+ * 采用 delta 方式:先扣除 existing 的活跃贡献,再加回 newMemory 的活跃贡献。
38
+ * 该方式可统一处理 source 变更 + 软删除状态变更的所有组合,避免分支爆炸。
21
39
  */
22
40
  upsert(memory) {
23
41
  const result = validateSource(memory.source);
24
42
  if (result.severity === 'block') {
25
- throw new Error(`source 校验失败(拒绝写入):${result.warning}`);
43
+ // 裸 throw 改用 configError 工厂(Iter-1:错误处理统一)
44
+ throw configError('source 校验失败,拒绝写入', result.warning, ['请检查 source 字段是否拼写正确', '参考 ADR-004 source 开放字符串规范']);
26
45
  }
27
46
  if (result.severity === 'warn' && result.warning) {
28
47
  logger.warn({ id: memory.id, source: memory.source, warning: result.warning }, 'source 校验警告');
29
48
  }
30
- // P2-2 增量维护 source 缓存:若为更新(id 已存在),先减旧 source 计数
49
+ // 软删除校验:阻止"通过 upsert 静默复活软删除记忆"
31
50
  const existing = this.memories.get(memory.id);
32
- if (existing && existing.source !== memory.source) {
51
+ if (existing && existing.deletedAt !== undefined && memory.deletedAt === undefined) {
52
+ // existing 已软删除,但 newMemory 试图以活跃态覆盖 → 拒绝
53
+ // 调用方应先 restore(id) 再 upsert,或显式在 newMemory 中带 deletedAt
54
+ throw configError('不允许通过 upsert 复活软删除记忆', `id=${memory.id} 已被软删除(deletedAt=${existing.deletedAt})`, [
55
+ '若需恢复:先调用 restore(id),再 upsert',
56
+ '若需覆盖软删除态:在 newMemory 中显式传入 deletedAt 字段',
57
+ '参考软删除机制设计',
58
+ ]);
59
+ }
60
+ // delta 方式维护 sourceCountCache(仅统计活跃记忆)
61
+ // 先扣除 existing 的活跃贡献(若 existing 存在且为活跃态)
62
+ if (existing && existing.deletedAt === undefined) {
33
63
  this.decrementSourceCount(existing.source);
34
64
  }
35
65
  this.memories.set(memory.id, { ...memory });
36
- // P2-2 增量维护 source 缓存:新 source 加 1
37
- this.incrementSourceCount(memory.source);
66
+ // 再加回 newMemory 的活跃贡献(若 newMemory 为活跃态)
67
+ if (memory.deletedAt === undefined) {
68
+ this.incrementSourceCount(memory.source);
69
+ }
38
70
  }
39
71
  /**
40
- * 删除记忆
72
+ * 软删除记忆
73
+ *
74
+ * 写入 deletedAt 时间戳,不物理移除 Map 条目。
75
+ * - 召回/搜索/列表/统计自动过滤已软删除的记忆
76
+ * - 可通过 restore(id) 恢复
77
+ * - 回收站保留期过后由 purgeExpired(before) 物理清理
41
78
  *
42
- * P2-2 增量维护 sourceCountCache:删除时对应 source 减 1
79
+ * 对已软删除的记忆调用为 no-op
80
+ * 增量维护 sourceCountCache:软删除时对应 source 减 1。
43
81
  */
44
82
  delete(id) {
45
83
  const existing = this.memories.get(id);
46
- if (existing) {
84
+ // 不存在或已软删除:no-op
85
+ if (!existing || existing.deletedAt !== undefined)
86
+ return;
87
+ // 写入 deletedAt,标记为软删除
88
+ const softDeleted = { ...existing, deletedAt: nowIso() };
89
+ this.memories.set(id, softDeleted);
90
+ // 活跃 → 软删除:source 计数 -1
91
+ this.decrementSourceCount(existing.source);
92
+ }
93
+ /**
94
+ * 恢复软删除的记忆
95
+ *
96
+ * 清除 deletedAt 字段,使记忆重新出现在召回/搜索/列表中。
97
+ * 对活跃记忆调用为 no-op。
98
+ * 增量维护 sourceCountCache:恢复时对应 source 加 1。
99
+ */
100
+ restore(id) {
101
+ const existing = this.memories.get(id);
102
+ // 不存在或已为活跃态:no-op
103
+ if (!existing || existing.deletedAt === undefined)
104
+ return;
105
+ // 清除 deletedAt,恢复为活跃态
106
+ const restored = { ...existing, deletedAt: undefined };
107
+ this.memories.set(id, restored);
108
+ // 软删除 → 活跃:source 计数 +1
109
+ this.incrementSourceCount(existing.source);
110
+ }
111
+ /**
112
+ * 物理删除记忆
113
+ *
114
+ * 从 Map 中彻底移除,不可恢复。
115
+ * 用于回收站的"彻底删除"操作,或测试环境的强制清理。
116
+ *
117
+ * 注意:若记忆为活跃态(未软删除),purge 也会减 1 计数,
118
+ * 但正常流程应先软删除再 purge,此时计数已在 delete() 中扣除。
119
+ */
120
+ purge(id) {
121
+ const existing = this.memories.get(id);
122
+ if (!existing)
123
+ return;
124
+ // 若为活跃态,扣除计数(软删除态的计数已在 delete() 中扣除)
125
+ if (existing.deletedAt === undefined) {
47
126
  this.decrementSourceCount(existing.source);
48
127
  }
49
128
  this.memories.delete(id);
50
129
  }
51
130
  /**
52
- * 按 ID 获取单条记忆
131
+ * 列出回收站中的软删除记忆
132
+ *
133
+ * 按 deletedAt 降序(最近删除的在前),便于回收站 UI 展示。
134
+ * 返回浅拷贝,避免调用方修改污染存储内部对象。
135
+ *
136
+ * @param limit - 返回数量上限(默认 50)
137
+ * @returns 软删除记忆列表(副本)
138
+ */
139
+ listDeleted(limit = 50) {
140
+ return Array.from(this.memories.values())
141
+ .filter((m) => m.deletedAt !== undefined)
142
+ .sort((a, b) => {
143
+ // deletedAt 非 undefined 已由 filter 保证,降序排列(最近在前)
144
+ return b.deletedAt > a.deletedAt ? 1 : b.deletedAt < a.deletedAt ? -1 : 0;
145
+ })
146
+ .slice(0, limit)
147
+ .map((m) => ({ ...m }));
148
+ }
149
+ /**
150
+ * 按 ID 获取单条软删除记忆
151
+ *
152
+ * 用于 restore/purge 操作前的存在性校验,避免 listDeleted 默认 50 上限
153
+ * 导致回收站超量时操作失效。
154
+ *
155
+ * @param id 记忆唯一标识
156
+ * @returns 软删除记忆(浅拷贝),不存在或未软删除时返回 null
157
+ */
158
+ getDeletedById(id) {
159
+ const mem = this.memories.get(id);
160
+ // 不存在或未软删除(deletedAt 为 undefined)均返回 null
161
+ if (!mem || mem.deletedAt === undefined)
162
+ return null;
163
+ return { ...mem };
164
+ }
165
+ /**
166
+ * 清理过期的软删除记忆
167
+ *
168
+ * 物理删除所有 deletedAt 早于 before 的记忆。
169
+ * 由宿主项目的定时器调用(默认 30 天保留期)。
170
+ *
171
+ * @param before - 时间阈值,deletedAt 早于此值的记忆将被物理删除
172
+ * @returns 被清理的记忆数量
173
+ */
174
+ purgeExpired(before) {
175
+ const beforeIso = before.toISOString();
176
+ let count = 0;
177
+ for (const [id, m] of this.memories) {
178
+ // 仅清理已软删除且早于阈值的记忆
179
+ if (m.deletedAt !== undefined && m.deletedAt < beforeIso) {
180
+ this.memories.delete(id);
181
+ count++;
182
+ }
183
+ }
184
+ return count;
185
+ }
186
+ /**
187
+ * 按 ID 获取单条活跃记忆(已软删除的返回 null)
53
188
  *
54
189
  * 返回浅拷贝,避免调用方修改污染存储内部对象(接口契约:读取隔离)
55
190
  */
56
191
  getById(id) {
57
192
  const m = this.memories.get(id);
58
- return m ? { ...m } : null;
193
+ // 已软删除的记忆返回 null(活跃态过滤)
194
+ if (!m || m.deletedAt !== undefined)
195
+ return null;
196
+ return { ...m };
59
197
  }
60
198
  /**
61
- * 按来源标签获取记忆
199
+ * 按来源标签获取活跃记忆(自动过滤已软删除的)
62
200
  *
63
201
  * 返回浅拷贝数组,避免调用方修改污染存储内部对象。
64
202
  *
65
203
  * @param source - 来源标签(如 'persona'、'rule'、'insight')
66
- * @returns 该来源的所有记忆(副本),按 score 降序排列
204
+ * @returns 该来源的所有活跃记忆(副本),按 score 降序排列
67
205
  */
68
206
  getBySource(source) {
69
207
  return Array.from(this.memories.values())
70
- .filter((m) => m.source === source)
208
+ .filter((m) => m.source === source && m.deletedAt === undefined)
71
209
  .sort((a, b) => b.score - a.score)
72
210
  .map((m) => ({ ...m }));
73
211
  }
74
212
  /**
75
- * 文本搜索(内存版)
213
+ * 文本搜索活跃记忆(自动过滤已软删除的,内存版)
76
214
  *
77
215
  * 使用 segmentText() 规范分词,与 SqliteStorage 行为一致。
78
216
  * 搜索 content 和 name 字段,按 score 降序排列。
79
217
  *
80
218
  * @param query - 搜索查询文本
81
219
  * @param limit - 返回数量上限(默认 10)
82
- * @returns 匹配的记忆列表
220
+ * @returns 匹配的活跃记忆列表
83
221
  */
84
222
  search(query, limit = 10) {
223
+ // 仅搜索活跃记忆(deletedAt === undefined)
224
+ const activeMemories = Array.from(this.memories.values()).filter((m) => m.deletedAt === undefined);
85
225
  // 空查询:按 score 降序返回(浅拷贝,读取隔离)
86
226
  if (!query.trim()) {
87
- return Array.from(this.memories.values())
227
+ return activeMemories
88
228
  .sort((a, b) => b.score - a.score)
89
229
  .slice(0, limit)
90
230
  .map((m) => ({ ...m }));
@@ -93,12 +233,12 @@ export class InMemoryStorage {
93
233
  const tokens = segmentText(query).map((t) => t.toLowerCase());
94
234
  // 若分词后无有效 token,降级为按 score 返回
95
235
  if (tokens.length === 0) {
96
- return Array.from(this.memories.values())
236
+ return activeMemories
97
237
  .sort((a, b) => b.score - a.score)
98
238
  .slice(0, limit)
99
239
  .map((m) => ({ ...m }));
100
240
  }
101
- const results = Array.from(this.memories.values()).filter((m) => {
241
+ const results = activeMemories.filter((m) => {
102
242
  const text = `${m.content} ${m.name}`.toLowerCase();
103
243
  // 任一 token 命中即可
104
244
  return tokens.some((t) => text.includes(t));
@@ -109,29 +249,39 @@ export class InMemoryStorage {
109
249
  return results.slice(0, limit).map((m) => ({ ...m }));
110
250
  }
111
251
  /**
112
- * 统计记忆总数
252
+ * 统计活跃记忆总数(不含已软删除的)
253
+ *
254
+ * 优化:直接累加 sourceCountCache 的所有值,O(sources) 复杂度。
255
+ * 因 sourceCountCache 仅维护活跃记忆计数,求和即为活跃总数。
113
256
  */
114
257
  count() {
115
- return this.memories.size;
258
+ let total = 0;
259
+ for (const c of this.sourceCountCache.values())
260
+ total += c;
261
+ return total;
116
262
  }
117
263
  /**
118
264
  * 按来源标签统计记忆数量
119
265
  *
120
- * P2-2 优化:直接读取 sourceCountCache,O(1) 复杂度(与 getAllSources 一致)
266
+ * 优化:直接读取 sourceCountCache,O(1) 复杂度
267
+ * (getAllSources 为 O(sources),因需拷贝 Map,二者复杂度不同)
121
268
  * 原实现 O(n) 遍历所有记忆,与增量缓存设计不一致
122
269
  */
123
270
  countBySource(source) {
124
271
  return this.sourceCountCache.get(source) ?? 0;
125
272
  }
126
273
  /**
127
- * 衰减指定来源的记忆 score
274
+ * 衰减指定来源的活跃记忆 score(跳过已软删除的)
128
275
  *
129
- * 遍历所有匹配 source 的记忆,按时间衰减。
276
+ * 遍历所有匹配 source 的活跃记忆,按时间衰减。
130
277
  * 生产环境宿主(SqliteStorage)应重写为 SQL UPDATE 批量操作。
131
278
  */
132
279
  decayScores(sources, now) {
133
280
  let count = 0;
134
281
  for (const m of this.memories.values()) {
282
+ // 跳过已软删除的记忆
283
+ if (m.deletedAt !== undefined)
284
+ continue;
135
285
  if (!sources.includes(m.source))
136
286
  continue;
137
287
  if (applyDecayToMemory(m, now)) {
@@ -143,7 +293,8 @@ export class InMemoryStorage {
143
293
  /**
144
294
  * 获取所有 source 标签及其记忆数量
145
295
  *
146
- * P2-2 优化:直接读取增量维护的 sourceCountCache,O(1) 复杂度。
296
+ * 优化:直接读取增量维护的 sourceCountCache
297
+ * 复杂度为 O(sources)(拷贝 Map),相比全量遍历 O(n) 仍有显著优化。
147
298
  */
148
299
  getAllSources() {
149
300
  return new Map(this.sourceCountCache);
@@ -156,7 +307,7 @@ export class InMemoryStorage {
156
307
  this.memories.clear();
157
308
  this.sourceCountCache.clear();
158
309
  }
159
- // ─── P2-2 source 缓存辅助方法 ─────────────────────────────
310
+ // ─── source 缓存辅助方法 ─────────────────────────────
160
311
  /** source 计数 +1 */
161
312
  incrementSourceCount(source) {
162
313
  this.sourceCountCache.set(source, (this.sourceCountCache.get(source) ?? 0) + 1);
@@ -1 +1 @@
1
- {"version":3,"file":"inMemoryStorage.js","sourceRoot":"","sources":["../../src/memory/inMemoryStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inMemoryStorage.js","sourceRoot":"","sources":["../../src/memory/inMemoryStorage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { SOURCE_LABELS } from '../memory/types.js';
2
- import { toError } from '../utils/errors.js';
2
+ import { toError } from '../utils/toError.js';
3
3
  /**
4
4
  * 启动时全量扫描的 source 列表
5
5
  * - insight/profile/work-projection:运行时产生,不由 FileStore 管理
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/memory/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/memory/loader.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface ProjectContext {
20
20
  fileStore: FileStore;
21
21
  /** SQLite 索引(通过 IMemoryStorage 接口访问) */
22
22
  index: IMemoryStorage;
23
- /** 安全守卫(A-004: 可空,由 Agent 层注入工厂函数创建) */
23
+ /** 安全守卫(可空,由 Agent 层注入工厂函数创建) */
24
24
  security: SecurityGuard | null;
25
25
  /** 启动时加载的必召记忆 */
26
26
  bootstrapMemories: Memory[];
@@ -49,7 +49,7 @@ export interface ProjectManagerOptions {
49
49
  /** 注册表目录(可选,默认与 dataDir 相同) */
50
50
  registryDir?: string;
51
51
  /**
52
- * A-004: SecurityGuard 工厂函数(由 Agent 层注入,解除 memory→security 反向依赖)
52
+ * SecurityGuard 工厂函数(由 Agent 层注入,解除 memory→security 反向依赖)
53
53
  *
54
54
  * 在项目切换时调用,传入项目路径、.memora/ 目录、Agent 级配置目录和数据目录,
55
55
  * 返回一个配置好的 SecurityGuard 实例。
@@ -78,7 +78,7 @@ export declare class ProjectManager {
78
78
  private currentLockPath;
79
79
  /** 外部注入的存储实例(可选,不传则内部创建 InMemoryStorage 兜底) */
80
80
  private externalStorage;
81
- /** A-004: SecurityGuard 工厂函数(由 Agent 层注入) */
81
+ /** SecurityGuard 工厂函数(由 Agent 层注入) */
82
82
  private readonly createSecurityGuard?;
83
83
  constructor(options: ProjectManagerOptions);
84
84
  /**
@@ -100,11 +100,39 @@ export declare class ProjectManager {
100
100
  *
101
101
  * memora.db 是 Agent 级共享资源,不随项目切换重建。
102
102
  *
103
+ * 主体编排(关闭旧项目 + 锁 + 错误回滚)+ loadAllResources(两层加载)
104
+ * + buildProjectContext(上下文构建)三个子方法分工。
105
+ *
103
106
  * @param projectPath 项目根目录
104
107
  * @param projectName 项目名称(可选,默认取目录名)
105
108
  * @param configDir Agent 级配置目录(personas/rules/skills/tools)
106
109
  */
107
110
  initProject(projectPath: string, projectName?: string, configDir?: string): Promise<ProjectContext>;
111
+ /**
112
+ * 加载两层记忆资源
113
+ *
114
+ * 职责:确保 Agent 级存储 + 扫描项目级 + 扫描 Agent 级配置,合并加载结果。
115
+ *
116
+ * @param memoraDir 项目 .memora/ 目录
117
+ * @param configDir Agent 级配置目录(可选)
118
+ * @returns index 存储实例 + loadResult 合并加载结果 + projectFileStore 项目级 FileStore
119
+ */
120
+ private loadAllResources;
121
+ /**
122
+ * 构建项目上下文
123
+ *
124
+ * 职责:bootstrap 过滤 + 安全守卫创建 + 项目注册 + 日志 + 返回上下文。
125
+ *
126
+ * @param projectPath 项目根目录
127
+ * @param projectName 项目名称(可选,默认取目录名)
128
+ * @param memoraDir 项目 .memora/ 目录
129
+ * @param index 存储实例
130
+ * @param projectFileStore 项目级 FileStore
131
+ * @param loadResult 加载结果
132
+ * @param configDir Agent 级配置目录(用于安全守卫创建)
133
+ * @returns 完整的项目上下文
134
+ */
135
+ private buildProjectContext;
108
136
  /**
109
137
  * 关闭当前项目
110
138
  * 释放锁文件,但不关闭 Agent 级数据库(memora.db 是共享的)
@@ -152,8 +180,9 @@ export declare class ProjectManager {
152
180
  private safeUnlink;
153
181
  /**
154
182
  * 检查进程是否存活
155
- * Windows: tasklist /FI "PID eq <pid>"
156
- * POSIX: kill(pid, 0)
183
+ *
184
+ * 跨平台统一使用 process.kill(pid, 0) 探测进程存活
185
+ * (Windows 上 process.kill(pid, 0) 同样有效)
157
186
  */
158
187
  private isProcessAlive;
159
188
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"projectManager.d.ts","sourceRoot":"","sources":["../../src/memory/projectManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectManager.d.ts","sourceRoot":"","sources":["../../src/memory/projectManager.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG/D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,wCAAwC;IACxC,KAAK,EAAE,cAAc,CAAC;IACtB,iCAAiC;IACjC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,iBAAiB;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW;IACX,UAAU,EAAE,UAAU,CAAC;CACxB;AAcD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AA0DD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,CACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,KAClB,aAAa,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,cAAc;IACd,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,iCAAiC;IACjC,OAAO,CAAC,UAAU,CAA+B;IACjD,gBAAgB;IAChB,OAAO,CAAC,kBAAkB,CAAuB;IACjD,iBAAiB;IACjB,OAAO,CAAC,eAAe,CAAuB;IAC9C,+CAA+C;IAC/C,OAAO,CAAC,eAAe,CAAwB;IAC/C,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAKlB;gBAEP,OAAO,EAAE,qBAAqB;IAa1C;;;;;;OAMG;YACW,oBAAoB;IAiBlC;;;;;;;;;;;;;;;;;OAiBG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IA0C1B;;;;;;;;OAQG;YACW,gBAAgB;IAmC9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAc/B;;OAEG;IACH,IAAI,IAAI,IAAI,YAAY,EAAE,CAEzB;IAED;;;OAGG;IACH,YAAY,IAAI,YAAY,EAAE;IAI9B;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoBxD;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO5C;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IAED;;;;OAIG;YACW,WAAW;IA4CzB;;OAEG;YACW,WAAW;IAMzB;;OAEG;YACW,UAAU;IAQxB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAYtB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA0BpB;;OAEG;IACH,OAAO,CAAC,aAAa;CAMtB"}