@zooique/memora 0.3.0 → 2.0.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 (188) hide show
  1. package/README.md +8 -8
  2. package/dist/agent/agent.d.ts +69 -92
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +267 -197
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/assembler.d.ts +3 -0
  7. package/dist/agent/assembler.d.ts.map +1 -1
  8. package/dist/agent/assembler.js +14 -4
  9. package/dist/agent/assembler.js.map +1 -1
  10. package/dist/agent/builtinToolHandlers.d.ts +1 -1
  11. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  12. package/dist/agent/builtinToolHandlers.js +5 -4
  13. package/dist/agent/builtinToolHandlers.js.map +1 -1
  14. package/dist/agent/guardrail.d.ts +47 -0
  15. package/dist/agent/guardrail.d.ts.map +1 -0
  16. package/dist/agent/guardrail.js +51 -0
  17. package/dist/agent/guardrail.js.map +1 -0
  18. package/dist/agent/loop.d.ts +79 -18
  19. package/dist/agent/loop.d.ts.map +1 -1
  20. package/dist/agent/loop.js +317 -231
  21. package/dist/agent/loop.js.map +1 -1
  22. package/dist/agent/managers/chatLockManager.d.ts +116 -0
  23. package/dist/agent/managers/chatLockManager.d.ts.map +1 -0
  24. package/dist/agent/managers/chatLockManager.js +191 -0
  25. package/dist/agent/managers/chatLockManager.js.map +1 -0
  26. package/dist/agent/managers/insightExtractor.d.ts +34 -69
  27. package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
  28. package/dist/agent/managers/insightExtractor.js +133 -189
  29. package/dist/agent/managers/insightExtractor.js.map +1 -1
  30. package/dist/agent/managers/memoryAdvisor.d.ts +102 -2
  31. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  32. package/dist/agent/managers/memoryAdvisor.js +262 -4
  33. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  34. package/dist/agent/managers/memoryDecayScheduler.d.ts +85 -0
  35. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
  36. package/dist/agent/managers/memoryDecayScheduler.js +215 -0
  37. package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
  38. package/dist/agent/managers/memoryInspector.d.ts +230 -64
  39. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  40. package/dist/agent/managers/memoryInspector.js +439 -81
  41. package/dist/agent/managers/memoryInspector.js.map +1 -1
  42. package/dist/agent/managers/relationBuilder.d.ts +131 -0
  43. package/dist/agent/managers/relationBuilder.d.ts.map +1 -0
  44. package/dist/agent/managers/relationBuilder.js +192 -0
  45. package/dist/agent/managers/relationBuilder.js.map +1 -0
  46. package/dist/agent/managers/sessionArchiver.d.ts +6 -0
  47. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  48. package/dist/agent/managers/sessionArchiver.js +68 -8
  49. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  50. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  51. package/dist/agent/managers/sessionManager.js +9 -17
  52. package/dist/agent/managers/sessionManager.js.map +1 -1
  53. package/dist/agent/managers/textPolishManager.d.ts +62 -0
  54. package/dist/agent/managers/textPolishManager.d.ts.map +1 -0
  55. package/dist/agent/managers/textPolishManager.js +99 -0
  56. package/dist/agent/managers/textPolishManager.js.map +1 -0
  57. package/dist/agent/personaMatcher.d.ts +29 -0
  58. package/dist/agent/personaMatcher.d.ts.map +1 -0
  59. package/dist/agent/personaMatcher.js +60 -0
  60. package/dist/agent/personaMatcher.js.map +1 -0
  61. package/dist/agent/toolExecutor.d.ts +2 -2
  62. package/dist/agent/toolExecutor.d.ts.map +1 -1
  63. package/dist/agent/toolExecutor.js +2 -1
  64. package/dist/agent/toolExecutor.js.map +1 -1
  65. package/dist/agent/tracer.d.ts +31 -0
  66. package/dist/agent/tracer.d.ts.map +1 -1
  67. package/dist/agent/tracer.js +31 -0
  68. package/dist/agent/tracer.js.map +1 -1
  69. package/dist/agent/types.d.ts +132 -0
  70. package/dist/agent/types.d.ts.map +1 -1
  71. package/dist/agent/types.js +38 -0
  72. package/dist/agent/types.js.map +1 -1
  73. package/dist/config/loader.d.ts +52 -40
  74. package/dist/config/loader.d.ts.map +1 -1
  75. package/dist/config/loader.js +52 -32
  76. package/dist/config/loader.js.map +1 -1
  77. package/dist/eval/evalRunner.d.ts +94 -0
  78. package/dist/eval/evalRunner.d.ts.map +1 -0
  79. package/dist/eval/evalRunner.js +141 -0
  80. package/dist/eval/evalRunner.js.map +1 -0
  81. package/dist/eval/evalTypes.d.ts +33 -3
  82. package/dist/eval/evalTypes.d.ts.map +1 -1
  83. package/dist/eval/evalTypes.js +18 -2
  84. package/dist/eval/evalTypes.js.map +1 -1
  85. package/dist/eval/scenarios.d.ts +33 -0
  86. package/dist/eval/scenarios.d.ts.map +1 -0
  87. package/dist/eval/scenarios.js +109 -0
  88. package/dist/eval/scenarios.js.map +1 -0
  89. package/dist/index.d.ts +51 -9
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +46 -6
  92. package/dist/index.js.map +1 -1
  93. package/dist/llm/abortSignal.d.ts +27 -0
  94. package/dist/llm/abortSignal.d.ts.map +1 -0
  95. package/dist/llm/abortSignal.js +44 -0
  96. package/dist/llm/abortSignal.js.map +1 -0
  97. package/dist/llm/embedding.d.ts +7 -2
  98. package/dist/llm/embedding.d.ts.map +1 -1
  99. package/dist/llm/embedding.js +66 -46
  100. package/dist/llm/embedding.js.map +1 -1
  101. package/dist/llm/factory.js +1 -1
  102. package/dist/llm/factory.js.map +1 -1
  103. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  104. package/dist/llm/openaiCompatible.js +26 -27
  105. package/dist/llm/openaiCompatible.js.map +1 -1
  106. package/dist/llm/provider.d.ts +0 -14
  107. package/dist/llm/provider.d.ts.map +1 -1
  108. package/dist/llm/provider.js.map +1 -1
  109. package/dist/logging/logger.d.ts +1 -0
  110. package/dist/logging/logger.d.ts.map +1 -1
  111. package/dist/logging/logger.js +43 -37
  112. package/dist/logging/logger.js.map +1 -1
  113. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  114. package/dist/memory/inMemoryStorage.js +8 -7
  115. package/dist/memory/inMemoryStorage.js.map +1 -1
  116. package/dist/memory/lockManager.d.ts +48 -0
  117. package/dist/memory/lockManager.d.ts.map +1 -0
  118. package/dist/memory/lockManager.js +159 -0
  119. package/dist/memory/lockManager.js.map +1 -0
  120. package/dist/memory/projectManager.d.ts +23 -53
  121. package/dist/memory/projectManager.d.ts.map +1 -1
  122. package/dist/memory/projectManager.js +46 -227
  123. package/dist/memory/projectManager.js.map +1 -1
  124. package/dist/memory/projectRegistry.d.ts +62 -0
  125. package/dist/memory/projectRegistry.d.ts.map +1 -0
  126. package/dist/memory/projectRegistry.js +158 -0
  127. package/dist/memory/projectRegistry.js.map +1 -0
  128. package/dist/memory/recall.d.ts +3 -3
  129. package/dist/memory/recall.d.ts.map +1 -1
  130. package/dist/memory/recall.js +3 -3
  131. package/dist/memory/recall.js.map +1 -1
  132. package/dist/memory/sourceValidation.d.ts +49 -0
  133. package/dist/memory/sourceValidation.d.ts.map +1 -0
  134. package/dist/memory/sourceValidation.js +141 -0
  135. package/dist/memory/sourceValidation.js.map +1 -0
  136. package/dist/memory/store.d.ts.map +1 -1
  137. package/dist/memory/store.js +2 -1
  138. package/dist/memory/store.js.map +1 -1
  139. package/dist/memory/types.d.ts +0 -47
  140. package/dist/memory/types.d.ts.map +1 -1
  141. package/dist/memory/types.js +0 -138
  142. package/dist/memory/types.js.map +1 -1
  143. package/dist/memory/vectorStore.d.ts +82 -7
  144. package/dist/memory/vectorStore.d.ts.map +1 -1
  145. package/dist/memory/vectorStore.js +12 -8
  146. package/dist/memory/vectorStore.js.map +1 -1
  147. package/dist/persona/personaManager.d.ts +30 -4
  148. package/dist/persona/personaManager.d.ts.map +1 -1
  149. package/dist/persona/personaManager.js +47 -14
  150. package/dist/persona/personaManager.js.map +1 -1
  151. package/dist/security/pathGuard.d.ts.map +1 -1
  152. package/dist/security/pathGuard.js +3 -1
  153. package/dist/security/pathGuard.js.map +1 -1
  154. package/dist/skill/skillManager.d.ts.map +1 -1
  155. package/dist/skill/skillManager.js +2 -1
  156. package/dist/skill/skillManager.js.map +1 -1
  157. package/dist/utils/array.d.ts +24 -0
  158. package/dist/utils/array.d.ts.map +1 -0
  159. package/dist/utils/array.js +24 -0
  160. package/dist/utils/array.js.map +1 -0
  161. package/dist/utils/errors.d.ts +10 -8
  162. package/dist/utils/errors.d.ts.map +1 -1
  163. package/dist/utils/errors.js +12 -9
  164. package/dist/utils/errors.js.map +1 -1
  165. package/dist/utils/eventEmitter.d.ts +7 -0
  166. package/dist/utils/eventEmitter.d.ts.map +1 -1
  167. package/dist/utils/eventEmitter.js.map +1 -1
  168. package/dist/utils/objects.d.ts +17 -0
  169. package/dist/utils/objects.d.ts.map +1 -0
  170. package/dist/utils/objects.js +19 -0
  171. package/dist/utils/objects.js.map +1 -0
  172. package/dist/utils/segmenter.d.ts +17 -0
  173. package/dist/utils/segmenter.d.ts.map +1 -1
  174. package/dist/utils/segmenter.js +26 -0
  175. package/dist/utils/segmenter.js.map +1 -1
  176. package/dist/utils/strings.d.ts +22 -1
  177. package/dist/utils/strings.d.ts.map +1 -1
  178. package/dist/utils/strings.js +29 -1
  179. package/dist/utils/strings.js.map +1 -1
  180. package/dist/utils/time.d.ts +18 -3
  181. package/dist/utils/time.d.ts.map +1 -1
  182. package/dist/utils/time.js +24 -8
  183. package/dist/utils/time.js.map +1 -1
  184. package/dist/utils/toError.d.ts +8 -4
  185. package/dist/utils/toError.d.ts.map +1 -1
  186. package/dist/utils/toError.js +25 -5
  187. package/dist/utils/toError.js.map +1 -1
  188. package/package.json +11 -1
@@ -6,6 +6,7 @@
6
6
  * 2. 衰减指标统计(执行次数 / 累计衰减记忆数 / 上次衰减时间)
7
7
  * 3. 衰减可观测性(Tracer Span 埋点)
8
8
  * 4. 衰减完成事件发射(decayCompleted)
9
+ * 5. L2 时效性评估(可选,backgroundProvider + index 注入后启用)
9
10
  *
10
11
  * 设计理由:
11
12
  * agent.ts 原承担 15+ 职责,记忆衰减是独立的生命周期职责,
@@ -17,6 +18,12 @@
17
18
  * - work-projection(作品投影)
18
19
  * 不衰减 persona/rule/skill(配置型记忆不应衰减)
19
20
  *
21
+ * L2 时效性评估(可选增强):
22
+ * - 衰减后扫描低分记忆(score < TIMELINESS_LOW_SCORE_THRESHOLD)
23
+ * - 调用 LLM 判断是否"已过时"(如过时的技术栈、已变更的偏好)
24
+ * - 过时则进一步降级(score → TIMELINESS_OUTDATED_SCORE)
25
+ * - backgroundProvider / index 未注入时静默跳过(向后兼容)
26
+ *
20
27
  * 自然生长原则:
21
28
  * - 不持有 storage 引用(start 时注入,stop 时释放)
22
29
  * - 通过回调发射事件(不继承 TypedEventEmitter,避免与 Agent 事件系统耦合)
@@ -28,6 +35,22 @@ import { toError } from '../../utils/errors.js';
28
35
  import { nowIso } from '../../utils/time.js';
29
36
  import { SOURCE_LABELS } from '../../memory/types.js';
30
37
  import { NOOP_TRACER, TRACE_SPANS } from '../../agent/tracer.js';
38
+ // parseLlmJson 用于解析 LLM 时效性判断结果(与 SessionArchiver 同模式)
39
+ import { parseLlmJson } from '../../utils/json.js';
40
+ import { truncate } from '../../utils/strings.js';
41
+ // ─── L2 时效性评估常量 ────────────────────────────────────
42
+ /** 参与时效性评估的 source 标签(与衰减范围一致) */
43
+ const TIMELINESS_SOURCES = [SOURCE_LABELS.INSIGHT, SOURCE_LABELS.PROFILE, SOURCE_LABELS.WORK_PROJECTION];
44
+ /** 低分记忆阈值(score 低于此值的记忆进入 LLM 时效性评估) */
45
+ const TIMELINESS_LOW_SCORE_THRESHOLD = 0.3;
46
+ /** 单次时效性评估的记忆条数上限(控制 LLM 调用量) */
47
+ const TIMELINESS_EVALUATE_LIMIT = 20;
48
+ /** LLM 时效性判断超时(ms) */
49
+ const TIMELINESS_TIMEOUT_MS = 15_000;
50
+ /** 被判定为过时的记忆降级到此 score(接近物理删除阈值,但保留可恢复性) */
51
+ const TIMELINESS_OUTDATED_SCORE = 0.05;
52
+ /** 候选记忆内容预览长度(截断后送入 LLM) */
53
+ const TIMELINESS_CONTENT_PREVIEW_LEN = 200;
31
54
  /**
32
55
  * 记忆衰减调度器
33
56
  *
@@ -43,6 +66,10 @@ export class MemoryDecayScheduler {
43
66
  tracer;
44
67
  /** 衰减完成事件发射回调 */
45
68
  onDecayCompleted;
69
+ /** 后台 LLM Provider(可选,用于 L2 时效性评估,未注入时跳过) */
70
+ backgroundProvider;
71
+ /** 完整记忆存储(可选,用于 L2 读取低分记忆和降级,未注入时跳过) */
72
+ index;
46
73
  /** 衰减定时器(null 表示未启动) */
47
74
  decayTimer = null;
48
75
  /** 衰减目标存储(start 时注入,stop 时释放) */
@@ -57,6 +84,9 @@ export class MemoryDecayScheduler {
57
84
  constructor(opts) {
58
85
  this.tracer = opts.tracer ?? NOOP_TRACER;
59
86
  this.onDecayCompleted = opts.onDecayCompleted;
87
+ // L2 可选依赖:未注入时 evaluateTimeliness 静默跳过
88
+ this.backgroundProvider = opts.backgroundProvider ?? null;
89
+ this.index = opts.index ?? null;
60
90
  }
61
91
  /**
62
92
  * 启动定期衰减
@@ -130,5 +160,190 @@ export class MemoryDecayScheduler {
130
160
  lastRunAt: this.metricLastDecayAt,
131
161
  };
132
162
  }
163
+ // ─── L2 时效性评估(可选,backgroundProvider + index 注入后启用) ───
164
+ /**
165
+ * 时效性评估:扫描低分记忆,调用 LLM 判断是否已过时
166
+ *
167
+ * 流程:
168
+ * 1. 从 insight/profile/work-projection 加载低分记忆(score < 0.3)
169
+ * 2. 对每条低分记忆(上限 20 条),调用 LLM 判断是否"已过时"
170
+ * 3. 过时则进一步降级(score → 0.05,接近物理删除阈值但保留可恢复性)
171
+ * 4. 返回评估报告
172
+ *
173
+ * 使用场景:
174
+ * - 衰减后调用(onDecayCompleted 回调中),对低分记忆做 LLM 二次评估
175
+ * - 宿主定时任务定期调用(如每天一次)
176
+ * - 用户手动触发(记忆管理面板的"清理过时记忆"按钮)
177
+ *
178
+ * 安全设计:
179
+ * - 不物理删除——仅降级 score,保留可恢复性
180
+ * - LLM 失败降级——返回已处理的报告,不阻塞调用方
181
+ * - 单条 LLM 失败不阻塞后续评估
182
+ * - backgroundProvider / index 未注入时静默跳过(向后兼容)
183
+ *
184
+ * @param signal 可选的 AbortSignal(取消正在进行的 LLM 评估)
185
+ * @returns 评估报告
186
+ */
187
+ async evaluateTimeliness(signal) {
188
+ // 可选依赖未注入时静默降级(向后兼容)
189
+ if (!this.backgroundProvider || !this.index) {
190
+ return {
191
+ scannedCount: 0,
192
+ outdatedCount: 0,
193
+ demotedIds: [],
194
+ skippedReason: 'backgroundProvider 或 index 未注入',
195
+ };
196
+ }
197
+ // ── 步骤 1:加载低分记忆 ──
198
+ const lowScoreMemories = [];
199
+ for (const source of TIMELINESS_SOURCES) {
200
+ const memories = this.index.getBySource(source);
201
+ // 筛选低分记忆(score 低于阈值)
202
+ lowScoreMemories.push(...memories.filter((m) => m.score < TIMELINESS_LOW_SCORE_THRESHOLD));
203
+ }
204
+ if (lowScoreMemories.length === 0) {
205
+ return {
206
+ scannedCount: 0,
207
+ outdatedCount: 0,
208
+ demotedIds: [],
209
+ skippedReason: '无低分记忆需评估',
210
+ };
211
+ }
212
+ // 按 score 升序排列(最低分优先评估),取前 20 条
213
+ lowScoreMemories.sort((a, b) => a.score - b.score);
214
+ const limited = lowScoreMemories.slice(0, TIMELINESS_EVALUATE_LIMIT);
215
+ // ── 步骤 2:逐条调用 LLM 判断时效性 ──
216
+ const demotedIds = [];
217
+ let outdatedCount = 0;
218
+ for (const memory of limited) {
219
+ try {
220
+ const verdict = await this.judgeTimeliness(memory, signal);
221
+ if (verdict.isOutdated) {
222
+ this.demoteOutdatedMemory(memory);
223
+ demotedIds.push(memory.id);
224
+ outdatedCount++;
225
+ logger.info({ memoryId: memory.id, reason: verdict.reason }, '时效性评估:降级过时记忆');
226
+ }
227
+ }
228
+ catch (err) {
229
+ // 单条 LLM 判断失败不阻塞后续评估
230
+ logger.warn({ err, memoryId: memory.id }, '时效性评估:LLM 判断失败,跳过此条');
231
+ }
232
+ }
233
+ return {
234
+ scannedCount: limited.length,
235
+ outdatedCount,
236
+ demotedIds,
237
+ };
238
+ }
239
+ /**
240
+ * 调用 LLM 判断单条记忆的时效性
241
+ *
242
+ * 使用结构化 JSON 输出(isOutdated + reason),
243
+ * 参照 SessionArchiver.generateSummary 的 parseLlmJson 模式。
244
+ *
245
+ * LLM 失败时抛出异常(由 evaluateTimeliness 捕获并降级跳过此条)。
246
+ *
247
+ * @param memory 待评估的记忆
248
+ * @param signal 可选的 AbortSignal
249
+ * @returns LLM 判断结果
250
+ */
251
+ async judgeTimeliness(memory, signal) {
252
+ const messages = buildTimelinessMessages(memory);
253
+ let llmResponse = '';
254
+ // 流式累积模式(与 TextPolishManager / SessionArchiver 一致)
255
+ for await (const chunk of this.backgroundProvider.chat(messages, {
256
+ maxTokens: 200,
257
+ temperature: 0,
258
+ timeoutMs: TIMELINESS_TIMEOUT_MS,
259
+ signal,
260
+ })) {
261
+ if (chunk.content)
262
+ llmResponse += chunk.content;
263
+ }
264
+ // 解析 LLM 响应(JSON 格式)
265
+ const parsed = parseLlmJson(llmResponse.trim());
266
+ if (!parsed) {
267
+ throw new Error('LLM 时效性判断返回非法 JSON');
268
+ }
269
+ return {
270
+ memoryId: memory.id,
271
+ isOutdated: parsed.isOutdated === true,
272
+ reason: typeof parsed.reason === 'string' ? parsed.reason : '(LLM 未提供理由)',
273
+ };
274
+ }
275
+ /**
276
+ * 降级过时记忆(score → TIMELINESS_OUTDATED_SCORE)
277
+ *
278
+ * 安全设计:
279
+ * - 不物理删除,仅降低 score,保留可恢复性
280
+ * - 通过 upsert 覆盖原记忆(保持 id/source/name/createdAt 不变)
281
+ * - 更新 accessedAt,标记最近被处理过
282
+ *
283
+ * @param memory 待降级的过时记忆
284
+ */
285
+ demoteOutdatedMemory(memory) {
286
+ const demoted = {
287
+ ...memory,
288
+ score: TIMELINESS_OUTDATED_SCORE,
289
+ accessedAt: nowIso(),
290
+ };
291
+ this.index.upsert(demoted);
292
+ }
293
+ }
294
+ // ─── L2 时效性评估 Prompt 模板(模块级函数,与 buildDedupMessages 同模式) ───
295
+ /**
296
+ * 构建时效性判断的 LLM 消息
297
+ *
298
+ * 设计要点:
299
+ * - system 消息定义判断规则(过时 = 信息已失效/不再适用)
300
+ * - user 消息携带记忆内容和元数据(source/score/createdAt)
301
+ * - 要求输出结构化 JSON(isOutdated + reason)
302
+ * - few-shot 示例降低 LLM 误判率
303
+ *
304
+ * @param memory 待评估的记忆
305
+ * @returns system + user 消息数组
306
+ */
307
+ function buildTimelinessMessages(memory) {
308
+ const content = memory.content.length > TIMELINESS_CONTENT_PREVIEW_LEN
309
+ ? truncate(memory.content, TIMELINESS_CONTENT_PREVIEW_LEN, '…[截断]')
310
+ : memory.content;
311
+ return [
312
+ {
313
+ role: 'system',
314
+ content: `你是记忆时效性评估助手。判断给定的记忆是否已过时(信息已失效或不再适用)。
315
+
316
+ 判断规则:
317
+ - 已过时 = 信息明确失效(如旧版本号、已废弃的 API、已变更的偏好)
318
+ - 未过时 = 信息仍然有效(如通用编程原则、长期偏好、历史事件记录)
319
+ - 不确定时倾向"未过时"(避免误删有效记忆)
320
+
321
+ 输出 JSON 格式:
322
+ {
323
+ "isOutdated": true/false,
324
+ "reason": "判断理由(简短说明)"
325
+ }
326
+
327
+ 示例:
328
+ 输入: "用户使用 React 16 进行开发"(createdAt: 2020-01-01)
329
+ 输出: {"isOutdated": true, "reason": "React 16 已是旧版本,当前普遍使用 React 18+"}
330
+
331
+ 输入: "用户偏好函数式编程风格"
332
+ 输出: {"isOutdated": false, "reason": "编程风格偏好通常是长期的"}`,
333
+ },
334
+ {
335
+ role: 'user',
336
+ content: `请判断以下记忆是否已过时:
337
+
338
+ 记忆详情:
339
+ - 名称:${memory.name}
340
+ - 来源:${memory.source}
341
+ - 当前 score:${memory.score}(低分,可能因长期未访问而衰减)
342
+ - 创建时间:${memory.createdAt}
343
+ - 内容:${content}
344
+
345
+ 请输出 JSON 判断结果。`,
346
+ },
347
+ ];
133
348
  }
134
349
  //# sourceMappingURL=memoryDecayScheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoryDecayScheduler.js","sourceRoot":"","sources":["../../../src/agent/managers/memoryDecayScheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memoryDecayScheduler.js","sourceRoot":"","sources":["../../../src/agent/managers/memoryDecayScheduler.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,35 @@
1
1
  /**
2
- * 记忆查看器 — 统一查看记忆快照 + 搜索 + 统计
2
+ * 记忆管理器 — 统一的记忆读写入口
3
3
  *
4
- * 从 Agent 拆分出来,负责只读记忆查询操作。
4
+ * 从 Agent 拆分出来,负责记忆的查询 + 写入操作。
5
+ * 写方法以 writeXxx 前缀命名,与读方法明确区分。
5
6
  *
6
7
  * 设计原则:
7
- * - 纯只读——不动任何组件状态
8
- * - 同步返回——避免数据不一致(不调 LLM、不调 SQLite 写入)
8
+ * - 读写统一入口——writeXxx 前缀区分写操作,降低认知负荷
9
+ * - 同步返回——避免数据不一致(不调 LLM、不调 SQLite 异步写入)
9
10
  * - 轻量——每层只返回前 N 条 + 总数
11
+ * - 静默降级——relationStore 未注入时关系方法静默 no-op(ADR-014 降级优先)
12
+ *
13
+ * 方法清单:
14
+ * - 只读查询:snapshot / search / searchHybrid / stats /
15
+ * getRelations / getAllRelations / getRelationPath / getRelationNeighbors /
16
+ * getById / getBySource / list / listDeleted / getDeletedById /
17
+ * sourceHealth / suggest
18
+ * - 写操作(writeXxx 前缀):
19
+ * writeUpsert / writeDelete / writeRestore / writePurge / writePurgeExpired /
20
+ * writeAddRelation / writeRemoveRelation
21
+ * - LLM 记忆治理(异步,backgroundProvider 未注入时静默降级):
22
+ * deduplicateMemories(语义去重)
10
23
  */
11
24
  import type { Memory } from '../../memory/types.js';
12
25
  import type { IMemoryStorage } from '../../memory/storageInterface.js';
13
26
  import type { IMemoryRelationStore } from '../../memory/relationStore.js';
14
27
  import type { MemoryRelation, RelationDirection, RelationPath, RelationNeighbor } from '../../memory/types.js';
15
- import type { VectorStore } from '../../memory/vectorStore.js';
28
+ import type { IVectorStore } from '../../memory/vectorStore.js';
16
29
  import type { MessageHistory } from '../../agent/messageHistory.js';
17
30
  import type { AgentLoop } from '../../agent/loop.js';
18
- import type { MemoryAdvisor, SourceHealthReport, SuggestOptions, SuggestHit } from '../../agent/managers/memoryAdvisor.js';
31
+ import type { MemoryAdvisor, SourceHealthReport, SuggestOptions, SuggestHit, ConflictReport } from '../../agent/managers/memoryAdvisor.js';
32
+ import type { LlmProvider } from '../../llm/provider.js';
19
33
  export type { SourceHealthStatus, SourceHealthEntry, SourceHealthReport, SuggestOptions, SuggestHit, } from '../../agent/managers/memoryAdvisor.js';
20
34
  /** 记忆快照 */
21
35
  export interface MemorySnapshot {
@@ -91,61 +105,82 @@ export interface AgentStats {
91
105
  /** 关系边总数(ADR-014,relationStore 未注入时为 0) */
92
106
  relationCount: number;
93
107
  }
108
+ /** 名称高度相似的候选记忆对(待 LLM 判断语义等价性) */
109
+ export interface DedupPair {
110
+ /** 记忆 A(score 较高,作为保留候选) */
111
+ a: Memory;
112
+ /** 记忆 B(score 较低,作为降级候选) */
113
+ b: Memory;
114
+ /** 名称归一化相似度(0-1,越小越相似) */
115
+ nameSimilarity: number;
116
+ }
117
+ /** LLM 对单对记忆的语义等价判断结果 */
118
+ export interface DedupVerdict {
119
+ /** 是否语义等价(true → 降级低分记忆) */
120
+ isDuplicate: boolean;
121
+ /** 合并后的内容(isDuplicate=true 时提供,保留更完整的信息) */
122
+ mergedContent?: string;
123
+ /** LLM 判断理由(便于审计和调试) */
124
+ reason: string;
125
+ }
126
+ /** 降级记忆的审计详情(DedupReport.verdicts 元素,供 UI 展示"为什么降级") */
127
+ export interface DedupVerdictSummary {
128
+ /** 被降级的记忆 ID(与 demotedIds 元素一一对应) */
129
+ demotedId: string;
130
+ /** LLM 判断理由(便于用户审计降级是否合理) */
131
+ reason: string;
132
+ /** 合并后的完整内容(便于用户验证合并质量;未提供 mergedContent 时省略,渲染器负责截断展示) */
133
+ mergedContent?: string;
134
+ }
135
+ /** 语义去重报告(deduplicateMemories 返回值) */
136
+ export interface DedupReport {
137
+ /** 扫描的候选记忆总数 */
138
+ scannedCount: number;
139
+ /** 发现的名称相似对数 */
140
+ pairCount: number;
141
+ /** LLM 判定为语义等价并执行降级的对数 */
142
+ deduplicatedCount: number;
143
+ /** 被降级的记忆 ID 列表(score 降至 DEDUP_LOW_SCORE,未物理删除) */
144
+ demotedIds: string[];
145
+ /** 降级审计详情(与 demotedIds 一一对应,供 UI 展示 reason + mergedContentPreview) */
146
+ verdicts?: DedupVerdictSummary[];
147
+ /** 跳过原因(LLM 不可用 / 无候选对 / LLM 失败降级) */
148
+ skippedReason?: string;
149
+ }
94
150
  export declare class MemoryInspector {
95
151
  private readonly index;
96
152
  private readonly loop;
97
153
  private readonly history;
98
154
  /** 向量存储(可选,提供时 searchHybrid 启用语义搜索) */
99
155
  private vectorStore;
100
- /** 关系存储(可选,ADR-014 侧车,未注入时跳过关系查询) */
156
+ /** 关系存储(可选,ADR-014 侧车,未注入时关系方法静默降级) */
101
157
  private readonly relationStore;
102
158
  /** 记忆顾问(sourceHealth + suggest 委托) */
103
159
  private readonly advisor;
160
+ /** 后台 LLM Provider(可选,用于语义去重等异步治理任务,未注入时降级跳过) */
161
+ private readonly backgroundProvider;
104
162
  /**
105
- * @param index - 记忆存储(用于搜索 + 统计)
163
+ * @param index - 记忆存储(用于读写操作)
106
164
  * @param loop - AgentLoop(用于获取工作记忆)
107
165
  * @param history - MessageHistory(用于获取当前会话信息)
108
166
  * @param advisor - 记忆顾问(组合根一致性,由 assembler.ts 显式注入,必填)
109
- * @param relationStore - 关系存储侧车(可选,ADR-014,未注入时关系相关方法降级返回空)
167
+ * @param relationStore - 关系存储侧车(可选,ADR-014,未注入时关系方法降级返回空/no-op)
168
+ * @param backgroundProvider - 后台 LLM Provider(可选,用于语义去重,未注入时降级跳过)
110
169
  */
111
- constructor(index: IMemoryStorage, loop: AgentLoop, history: MessageHistory, advisor: MemoryAdvisor, relationStore?: IMemoryRelationStore | null);
170
+ constructor(index: IMemoryStorage, loop: AgentLoop, history: MessageHistory, advisor: MemoryAdvisor, relationStore?: IMemoryRelationStore | null, backgroundProvider?: LlmProvider | null);
112
171
  /**
113
172
  * 注入向量存储(由 Agent 在初始化后调用,解决构造时序)
114
173
  */
115
- setVectorStore(vs: VectorStore | null): void;
116
- /**
117
- * 插入或更新记忆
118
- *
119
- * @param memory 完整记忆对象
120
- */
121
- upsert(memory: Memory): void;
122
- /**
123
- * 删除记忆(软删除,写入 deletedAt)
124
- *
125
- * @param id 记忆唯一标识(${source}:${name} 格式)
126
- */
127
- delete(id: string): void;
174
+ setVectorStore(vs: IVectorStore | null): void;
128
175
  /**
129
- * 恢复软删除的记忆(清除 deletedAt)
130
- *
131
- * @param id 记忆唯一标识
132
- */
133
- restore(id: string): void;
134
- /**
135
- * 物理删除记忆(不可恢复,用于回收站彻底删除)
136
- *
137
- * @param id 记忆唯一标识
138
- */
139
- purge(id: string): void;
140
- /**
141
- * 列出回收站中的软删除记忆
176
+ * 列出回收站中的软删除记忆(只读查询)
142
177
  *
143
178
  * @param limit 返回数量上限(默认 50)
144
179
  * @returns 软删除记忆列表(按 deletedAt 降序)
145
180
  */
146
181
  listDeleted(limit?: number): Memory[];
147
182
  /**
148
- * 按 ID 获取单条软删除记忆
183
+ * 按 ID 获取单条软删除记忆(只读查询)
149
184
  *
150
185
  * 用于 restore/purge 操作前的存在性校验,避免 listDeleted 默认 50 上限
151
186
  * 导致回收站超量时操作失效。
@@ -154,13 +189,6 @@ export declare class MemoryInspector {
154
189
  * @returns 软删除记忆,不存在或未软删除时返回 null
155
190
  */
156
191
  getDeletedById(id: string): Memory | null;
157
- /**
158
- * 清理过期的软删除记忆
159
- *
160
- * @param before 时间阈值,deletedAt 早于此值的记忆将被物理删除
161
- * @returns 被清理的记忆数量
162
- */
163
- purgeExpired(before: Date): number;
164
192
  /**
165
193
  * 按 ID 获取单条活跃记忆(已软删除的返回 null)
166
194
  *
@@ -243,26 +271,6 @@ export declare class MemoryInspector {
243
271
  * @returns 全部关系边数组
244
272
  */
245
273
  getAllRelations(): MemoryRelation[];
246
- /**
247
- * 添加记忆关系(透传 relationStore)
248
- *
249
- * 用于宿主 UI 手动创建关系(关系图右键菜单 → 连线 → 创建关系)。
250
- * relationStore 未注入时静默降级(不阻塞)。
251
- *
252
- * @param relation 关系边数据
253
- */
254
- addRelation(relation: MemoryRelation): void;
255
- /**
256
- * 删除记忆关系(透传 relationStore)
257
- *
258
- * 用于宿主 UI 手动删除关系(关系图右键菜单 → 编辑关系 → 删除)。
259
- * relationStore 未注入时静默降级(不阻塞)。
260
- *
261
- * @param sourceId 关系起点
262
- * @param targetId 关系终点
263
- * @param type 关系类型
264
- */
265
- removeRelation(sourceId: string, targetId: string, type: string): void;
266
274
  /**
267
275
  * 记忆关系路径追溯(ADR-014 扩展,Phase 5.1)
268
276
  *
@@ -317,5 +325,163 @@ export declare class MemoryInspector {
317
325
  * @param options - 推荐选项
318
326
  */
319
327
  suggest(query?: string, options?: SuggestOptions): SuggestHit[];
328
+ /**
329
+ * L3 冲突检测(委托给 MemoryAdvisor.detectConflicts)
330
+ *
331
+ * 同 source 内配对,调用 LLM 判断语义冲突,仅检测不修复(需用户决策)。
332
+ * backgroundProvider 未注入时由 advisor 内部静默跳过(返回 skippedReason 报告)。
333
+ *
334
+ * 委托方法存在理由:agent.ts 仅持有 memoryInspector 引用,不直接持有 memoryAdvisor,
335
+ * 通过此转发保持"inspector 是读写 + 治理统一入口"语义。
336
+ *
337
+ * @param signal 可选的 AbortSignal
338
+ * @returns 冲突报告(扫描数 / 冲突数 / 冲突详情列表 / 跳过原因)
339
+ */
340
+ detectConflicts(signal?: AbortSignal): Promise<ConflictReport>;
341
+ /**
342
+ * 插入或更新记忆
343
+ *
344
+ * @param memory 完整记忆对象
345
+ */
346
+ writeUpsert(memory: Memory): void;
347
+ /**
348
+ * 提升记忆的 score(L2 采纳反哺内核)
349
+ *
350
+ * 用户在补全模块采纳某条候选后,通过 IPC 调用此方法反哺到内核 Memory.score。
351
+ * 与 recall.ts 的 boostScore 路径语义一致("越常用越重要"),但触发源不同:
352
+ * - recall.ts boostScore:召回时触发(被动)
353
+ * - writeBoost:用户主动采纳时触发(主动)
354
+ *
355
+ * 设计原则:
356
+ * - 复用现有 upsert 路径,不新增存储层接口
357
+ * - score 上限 1.0(与 recall.ts SCORE_CEILING 一致)
358
+ * - 同步更新 accessedAt,避免被衰减机制误降级
359
+ * - 记忆不存在时静默返回 false(补全候选可能来自对话历史,无对应记忆)
360
+ *
361
+ * @param id 记忆唯一标识(${source}:${name} 格式)
362
+ * @param increment score 提升量(默认 0.05,与 recall.ts BOOST_INCREMENT 一致)
363
+ * @returns 是否成功提升(记忆不存在时返回 false)
364
+ */
365
+ writeBoost(id: string, increment?: number): boolean;
366
+ /**
367
+ * 软删除记忆(写入 deletedAt)
368
+ *
369
+ * @param id 记忆唯一标识(${source}:${name} 格式)
370
+ */
371
+ writeDelete(id: string): void;
372
+ /**
373
+ * 恢复软删除的记忆(清除 deletedAt)
374
+ *
375
+ * @param id 记忆唯一标识
376
+ */
377
+ writeRestore(id: string): void;
378
+ /**
379
+ * 物理删除记忆(不可恢复,用于回收站彻底删除)
380
+ *
381
+ * @param id 记忆唯一标识
382
+ */
383
+ writePurge(id: string): void;
384
+ /**
385
+ * 清理过期的软删除记忆
386
+ *
387
+ * 物理删除所有 deletedAt 早于 before 的记忆。
388
+ * 由宿主项目的定时器调用(默认 30 天保留期)。
389
+ *
390
+ * @param before 时间阈值,deletedAt 早于此值的记忆将被物理删除
391
+ * @returns 被清理的记忆数量
392
+ */
393
+ writePurgeExpired(before: Date): number;
394
+ /**
395
+ * 添加记忆关系(透传 relationStore)
396
+ *
397
+ * 用于宿主 UI 手动创建关系(关系图右键菜单 → 连线 → 创建关系)。
398
+ * relationStore 未注入时静默降级(不阻塞)。
399
+ *
400
+ * @param relation 关系边数据
401
+ */
402
+ writeAddRelation(relation: MemoryRelation): void;
403
+ /**
404
+ * 删除记忆关系(透传 relationStore)
405
+ *
406
+ * 用于宿主 UI 手动删除关系(关系图右键菜单 → 编辑关系 → 删除)。
407
+ * relationStore 未注入时静默降级(不阻塞)。
408
+ *
409
+ * @param sourceId 关系起点
410
+ * @param targetId 关系终点
411
+ * @param type 关系类型
412
+ */
413
+ writeRemoveRelation(sourceId: string, targetId: string, type: string): void;
414
+ /**
415
+ * 语义去重:扫描名称高度相似的记忆对,调用 LLM 判断语义等价性
416
+ *
417
+ * 流程:
418
+ * 1. 从 insight/profile/work-projection 加载候选记忆(上限 50 条)
419
+ * 2. 按名称归一化 Levenshtein 距离筛选相似对(上限 10 对)
420
+ * 3. 对每对调用 LLM 判断语义等价性(结构化 JSON 输出)
421
+ * 4. 等价则降级低分记忆(score → 0.1,不物理删除,保留可恢复性)
422
+ * 5. 返回去重报告
423
+ *
424
+ * 安全设计:
425
+ * - 不物理删除——仅降级 score,用户可通过宿主 UI 手动恢复
426
+ * - LLM 失败降级——返回已处理的报告,不阻塞调用方
427
+ * - 异步执行——不阻塞主对话热路径(由宿主定时任务或用户手动触发)
428
+ * - backgroundProvider 未注入时静默跳过(返回 skippedReason)
429
+ *
430
+ * @param signal 可选的 AbortSignal(取消正在进行的 LLM 判断)
431
+ * @returns 去重报告
432
+ */
433
+ deduplicateMemories(signal?: AbortSignal): Promise<DedupReport>;
434
+ /**
435
+ * 筛选名称高度相似的候选记忆对
436
+ *
437
+ * 判定规则(满足任一即视为名称相似):
438
+ * 1. 归一化 Levenshtein 距离 ≤ 0.3(如 "用户偏好" vs "用户偏爱")
439
+ * 2. 一个名称包含另一个(如 "用户偏好" vs "用户偏好设置")
440
+ *
441
+ * 去重设计:
442
+ * - 已配对的记忆不再参与后续配对(避免 A-B-C 三元组产生 A-B + A-C + B-C 三对)
443
+ * - 候选对按相似度升序排列(越相似越优先),取前 10 对
444
+ *
445
+ * @param candidates 候选记忆列表(已按 score 降序)
446
+ * @returns 名称相似的记忆对列表(a.score ≥ b.score)
447
+ */
448
+ private findNameOverlapPairs;
449
+ /**
450
+ * 计算两个名称的归一化相似度(0-1,越小越相似)
451
+ *
452
+ * 综合两种规则取较小值:
453
+ * 1. 归一化 Levenshtein 距离 = distance / max(len_a, len_b)
454
+ * 2. 包含关系:若一个名称包含另一个,相似度 = 0(完全相似)
455
+ *
456
+ * @param nameA 名称 A
457
+ * @param nameB 名称 B
458
+ * @returns 相似度(0=完全相似,1=完全不同)
459
+ */
460
+ private static computeNameSimilarity;
461
+ /**
462
+ * 调用 LLM 判断单对记忆的语义等价性
463
+ *
464
+ * 使用结构化 JSON 输出(isDuplicate + mergedContent + reason),
465
+ * 参照 SessionArchiver.generateSummary 的 parseLlmJson 模式。
466
+ *
467
+ * LLM 失败时抛出异常(由 deduplicateMemories 捕获并降级跳过此对)。
468
+ *
469
+ * @param pair 候选记忆对
470
+ * @param signal 可选的 AbortSignal
471
+ * @returns LLM 判断结果
472
+ */
473
+ private judgeDuplicate;
474
+ /**
475
+ * 降级重复记忆(score → DEDUP_LOW_SCORE,可选合并内容)
476
+ *
477
+ * 安全设计:
478
+ * - 不物理删除,仅降低 score,保留可恢复性
479
+ * - 若提供 mergedContent,更新保留记忆(a)的 content 为合并后内容
480
+ * - 通过 upsert 覆盖原记忆(保持 id/source/name/createdAt 不变)
481
+ *
482
+ * @param memory 待降级的记忆(低分方)
483
+ * @param mergedContent 可选的合并后内容(更新到保留方,由调用方负责)
484
+ */
485
+ private demoteMemory;
320
486
  }
321
487
  //# sourceMappingURL=memoryInspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoryInspector.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/memoryInspector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memoryInspector.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/memoryInspector.ts"],"names":[],"mappings":"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"}