@zooique/memora 1.0.1 → 2.0.3

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 (274) hide show
  1. package/README.en.md +272 -0
  2. package/README.md +150 -38
  3. package/dist/agent/agent.d.ts +257 -115
  4. package/dist/agent/agent.d.ts.map +1 -1
  5. package/dist/agent/agent.js +747 -400
  6. package/dist/agent/agent.js.map +1 -1
  7. package/dist/agent/assembler.d.ts +32 -16
  8. package/dist/agent/assembler.d.ts.map +1 -1
  9. package/dist/agent/assembler.js +83 -47
  10. package/dist/agent/assembler.js.map +1 -1
  11. package/dist/agent/builtinToolHandlers.d.ts +27 -2
  12. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  13. package/dist/agent/builtinToolHandlers.js +78 -5
  14. package/dist/agent/builtinToolHandlers.js.map +1 -1
  15. package/dist/agent/constants.d.ts +4 -0
  16. package/dist/agent/constants.d.ts.map +1 -1
  17. package/dist/agent/constants.js +4 -0
  18. package/dist/agent/constants.js.map +1 -1
  19. package/dist/agent/contextManager.d.ts +8 -0
  20. package/dist/agent/contextManager.d.ts.map +1 -1
  21. package/dist/agent/contextManager.js +7 -2
  22. package/dist/agent/contextManager.js.map +1 -1
  23. package/dist/agent/guardrail.d.ts +4 -2
  24. package/dist/agent/guardrail.d.ts.map +1 -1
  25. package/dist/agent/guardrail.js +13 -5
  26. package/dist/agent/guardrail.js.map +1 -1
  27. package/dist/agent/loop.d.ts +137 -15
  28. package/dist/agent/loop.d.ts.map +1 -1
  29. package/dist/agent/loop.js +449 -270
  30. package/dist/agent/loop.js.map +1 -1
  31. package/dist/agent/managers/archiveCoordinator.d.ts +126 -22
  32. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  33. package/dist/agent/managers/archiveCoordinator.js +239 -44
  34. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  35. package/dist/agent/managers/autoConfigRefiner.d.ts.map +1 -1
  36. package/dist/agent/managers/autoConfigRefiner.js +4 -8
  37. package/dist/agent/managers/autoConfigRefiner.js.map +1 -1
  38. package/dist/agent/managers/chatLockManager.d.ts +116 -0
  39. package/dist/agent/managers/chatLockManager.d.ts.map +1 -0
  40. package/dist/agent/managers/chatLockManager.js +191 -0
  41. package/dist/agent/managers/chatLockManager.js.map +1 -0
  42. package/dist/agent/managers/configManager.d.ts +87 -3
  43. package/dist/agent/managers/configManager.d.ts.map +1 -1
  44. package/dist/agent/managers/configManager.js +139 -2
  45. package/dist/agent/managers/configManager.js.map +1 -1
  46. package/dist/agent/managers/dedupManager.d.ts +169 -0
  47. package/dist/agent/managers/dedupManager.d.ts.map +1 -0
  48. package/dist/agent/managers/dedupManager.js +336 -0
  49. package/dist/agent/managers/dedupManager.js.map +1 -0
  50. package/dist/agent/managers/insightExtractor.d.ts +31 -3
  51. package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
  52. package/dist/agent/managers/insightExtractor.js +130 -59
  53. package/dist/agent/managers/insightExtractor.js.map +1 -1
  54. package/dist/agent/managers/llmJudgeHelper.d.ts +38 -0
  55. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
  56. package/dist/agent/managers/llmJudgeHelper.js +49 -0
  57. package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
  58. package/dist/agent/managers/memoryAdvisor.d.ts +102 -2
  59. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  60. package/dist/agent/managers/memoryAdvisor.js +254 -10
  61. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  62. package/dist/agent/managers/memoryDecayScheduler.d.ts +127 -1
  63. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
  64. package/dist/agent/managers/memoryDecayScheduler.js +283 -4
  65. package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
  66. package/dist/agent/managers/memoryGovernance.d.ts +56 -0
  67. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
  68. package/dist/agent/managers/memoryGovernance.js +63 -0
  69. package/dist/agent/managers/memoryGovernance.js.map +1 -0
  70. package/dist/agent/managers/memoryInspector.d.ts +113 -30
  71. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  72. package/dist/agent/managers/memoryInspector.js +165 -32
  73. package/dist/agent/managers/memoryInspector.js.map +1 -1
  74. package/dist/agent/managers/relationBuilder.d.ts +4 -4
  75. package/dist/agent/managers/relationBuilder.d.ts.map +1 -1
  76. package/dist/agent/managers/relationBuilder.js +5 -4
  77. package/dist/agent/managers/relationBuilder.js.map +1 -1
  78. package/dist/agent/managers/sessionArchiver.d.ts +12 -1
  79. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  80. package/dist/agent/managers/sessionArchiver.js +87 -30
  81. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  82. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  83. package/dist/agent/managers/sessionManager.js +9 -17
  84. package/dist/agent/managers/sessionManager.js.map +1 -1
  85. package/dist/agent/managers/streamAccumulator.d.ts +45 -0
  86. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
  87. package/dist/agent/managers/streamAccumulator.js +40 -0
  88. package/dist/agent/managers/streamAccumulator.js.map +1 -0
  89. package/dist/agent/managers/textPolishManager.d.ts +62 -0
  90. package/dist/agent/managers/textPolishManager.d.ts.map +1 -0
  91. package/dist/agent/managers/textPolishManager.js +96 -0
  92. package/dist/agent/managers/textPolishManager.js.map +1 -0
  93. package/dist/agent/managers/workProjection.d.ts +16 -1
  94. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  95. package/dist/agent/managers/workProjection.js +48 -24
  96. package/dist/agent/managers/workProjection.js.map +1 -1
  97. package/dist/agent/personaMatcher.d.ts +29 -0
  98. package/dist/agent/personaMatcher.d.ts.map +1 -0
  99. package/dist/agent/personaMatcher.js +60 -0
  100. package/dist/agent/personaMatcher.js.map +1 -0
  101. package/dist/agent/toolExecutor.d.ts +24 -4
  102. package/dist/agent/toolExecutor.d.ts.map +1 -1
  103. package/dist/agent/toolExecutor.js +30 -4
  104. package/dist/agent/toolExecutor.js.map +1 -1
  105. package/dist/agent/tracer.d.ts +31 -0
  106. package/dist/agent/tracer.d.ts.map +1 -1
  107. package/dist/agent/tracer.js +31 -0
  108. package/dist/agent/tracer.js.map +1 -1
  109. package/dist/agent/types.d.ts +133 -0
  110. package/dist/agent/types.d.ts.map +1 -1
  111. package/dist/agent/types.js +38 -0
  112. package/dist/agent/types.js.map +1 -1
  113. package/dist/agent/userFactExtractor.d.ts.map +1 -1
  114. package/dist/agent/userFactExtractor.js +7 -0
  115. package/dist/agent/userFactExtractor.js.map +1 -1
  116. package/dist/config/loader.d.ts +124 -236
  117. package/dist/config/loader.d.ts.map +1 -1
  118. package/dist/config/loader.js +296 -118
  119. package/dist/config/loader.js.map +1 -1
  120. package/dist/eval/evalRunner.d.ts +94 -0
  121. package/dist/eval/evalRunner.d.ts.map +1 -0
  122. package/dist/eval/evalRunner.js +141 -0
  123. package/dist/eval/evalRunner.js.map +1 -0
  124. package/dist/eval/evalTypes.d.ts +21 -0
  125. package/dist/eval/evalTypes.d.ts.map +1 -1
  126. package/dist/eval/evalTypes.js +15 -0
  127. package/dist/eval/evalTypes.js.map +1 -1
  128. package/dist/eval/scenarios.d.ts +33 -0
  129. package/dist/eval/scenarios.d.ts.map +1 -0
  130. package/dist/eval/scenarios.js +109 -0
  131. package/dist/eval/scenarios.js.map +1 -0
  132. package/dist/index.d.ts +45 -6
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +45 -5
  135. package/dist/index.js.map +1 -1
  136. package/dist/llm/abortSignal.d.ts +27 -0
  137. package/dist/llm/abortSignal.d.ts.map +1 -0
  138. package/dist/llm/abortSignal.js +44 -0
  139. package/dist/llm/abortSignal.js.map +1 -0
  140. package/dist/llm/embedding.d.ts +13 -12
  141. package/dist/llm/embedding.d.ts.map +1 -1
  142. package/dist/llm/embedding.js +5 -17
  143. package/dist/llm/embedding.js.map +1 -1
  144. package/dist/llm/factory.d.ts +19 -5
  145. package/dist/llm/factory.d.ts.map +1 -1
  146. package/dist/llm/factory.js +19 -37
  147. package/dist/llm/factory.js.map +1 -1
  148. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  149. package/dist/llm/openaiCompatible.js +17 -34
  150. package/dist/llm/openaiCompatible.js.map +1 -1
  151. package/dist/logging/logger.d.ts +3 -1
  152. package/dist/logging/logger.d.ts.map +1 -1
  153. package/dist/logging/logger.js +47 -50
  154. package/dist/logging/logger.js.map +1 -1
  155. package/dist/memory/governance.d.ts +50 -0
  156. package/dist/memory/governance.d.ts.map +1 -0
  157. package/dist/memory/governance.js +70 -0
  158. package/dist/memory/governance.js.map +1 -0
  159. package/dist/memory/hybridMerge.d.ts +0 -4
  160. package/dist/memory/hybridMerge.d.ts.map +1 -1
  161. package/dist/memory/hybridMerge.js +19 -4
  162. package/dist/memory/hybridMerge.js.map +1 -1
  163. package/dist/memory/inMemoryRelationStore.d.ts +7 -0
  164. package/dist/memory/inMemoryRelationStore.d.ts.map +1 -1
  165. package/dist/memory/inMemoryRelationStore.js +15 -0
  166. package/dist/memory/inMemoryRelationStore.js.map +1 -1
  167. package/dist/memory/inMemoryStorage.d.ts +36 -1
  168. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  169. package/dist/memory/inMemoryStorage.js +70 -19
  170. package/dist/memory/inMemoryStorage.js.map +1 -1
  171. package/dist/memory/loader.d.ts +2 -0
  172. package/dist/memory/loader.d.ts.map +1 -1
  173. package/dist/memory/loader.js +8 -1
  174. package/dist/memory/loader.js.map +1 -1
  175. package/dist/memory/lockManager.d.ts +7 -2
  176. package/dist/memory/lockManager.d.ts.map +1 -1
  177. package/dist/memory/lockManager.js +35 -17
  178. package/dist/memory/lockManager.js.map +1 -1
  179. package/dist/memory/projectManager.d.ts +8 -7
  180. package/dist/memory/projectManager.d.ts.map +1 -1
  181. package/dist/memory/projectManager.js +33 -15
  182. package/dist/memory/projectManager.js.map +1 -1
  183. package/dist/memory/projectRegistry.d.ts +34 -1
  184. package/dist/memory/projectRegistry.d.ts.map +1 -1
  185. package/dist/memory/projectRegistry.js +100 -31
  186. package/dist/memory/projectRegistry.js.map +1 -1
  187. package/dist/memory/recall.d.ts +16 -0
  188. package/dist/memory/recall.d.ts.map +1 -1
  189. package/dist/memory/recall.js +35 -20
  190. package/dist/memory/recall.js.map +1 -1
  191. package/dist/memory/relationStore.d.ts +20 -3
  192. package/dist/memory/relationStore.d.ts.map +1 -1
  193. package/dist/memory/sourceValidation.d.ts +17 -0
  194. package/dist/memory/sourceValidation.d.ts.map +1 -1
  195. package/dist/memory/sourceValidation.js +27 -3
  196. package/dist/memory/sourceValidation.js.map +1 -1
  197. package/dist/memory/storageInterface.d.ts +26 -1
  198. package/dist/memory/storageInterface.d.ts.map +1 -1
  199. package/dist/memory/store.d.ts +22 -1
  200. package/dist/memory/store.d.ts.map +1 -1
  201. package/dist/memory/store.js +58 -20
  202. package/dist/memory/store.js.map +1 -1
  203. package/dist/memory/types.d.ts +44 -31
  204. package/dist/memory/types.d.ts.map +1 -1
  205. package/dist/memory/types.js +63 -24
  206. package/dist/memory/types.js.map +1 -1
  207. package/dist/memory/userProfile.d.ts +32 -8
  208. package/dist/memory/userProfile.d.ts.map +1 -1
  209. package/dist/memory/userProfile.js +105 -44
  210. package/dist/memory/userProfile.js.map +1 -1
  211. package/dist/memory/vectorStore.d.ts +16 -8
  212. package/dist/memory/vectorStore.d.ts.map +1 -1
  213. package/dist/memory/vectorStore.js +49 -22
  214. package/dist/memory/vectorStore.js.map +1 -1
  215. package/dist/persona/personaManager.d.ts +38 -63
  216. package/dist/persona/personaManager.d.ts.map +1 -1
  217. package/dist/persona/personaManager.js +136 -202
  218. package/dist/persona/personaManager.js.map +1 -1
  219. package/dist/skill/skillManager.d.ts +11 -57
  220. package/dist/skill/skillManager.d.ts.map +1 -1
  221. package/dist/skill/skillManager.js +46 -141
  222. package/dist/skill/skillManager.js.map +1 -1
  223. package/dist/skill/types.d.ts +2 -3
  224. package/dist/skill/types.d.ts.map +1 -1
  225. package/dist/utils/array.d.ts +24 -0
  226. package/dist/utils/array.d.ts.map +1 -0
  227. package/dist/utils/array.js +24 -0
  228. package/dist/utils/array.js.map +1 -0
  229. package/dist/utils/configResourceManager.d.ts +111 -0
  230. package/dist/utils/configResourceManager.d.ts.map +1 -0
  231. package/dist/utils/configResourceManager.js +148 -0
  232. package/dist/utils/configResourceManager.js.map +1 -0
  233. package/dist/utils/errors.d.ts +27 -8
  234. package/dist/utils/errors.d.ts.map +1 -1
  235. package/dist/utils/errors.js +31 -9
  236. package/dist/utils/errors.js.map +1 -1
  237. package/dist/utils/eventEmitter.d.ts +88 -4
  238. package/dist/utils/eventEmitter.d.ts.map +1 -1
  239. package/dist/utils/eventEmitter.js +23 -0
  240. package/dist/utils/eventEmitter.js.map +1 -1
  241. package/dist/utils/frontmatter.d.ts.map +1 -1
  242. package/dist/utils/frontmatter.js +4 -2
  243. package/dist/utils/frontmatter.js.map +1 -1
  244. package/dist/utils/math.d.ts +11 -0
  245. package/dist/utils/math.d.ts.map +1 -1
  246. package/dist/utils/math.js +17 -0
  247. package/dist/utils/math.js.map +1 -1
  248. package/dist/utils/objects.d.ts +17 -0
  249. package/dist/utils/objects.d.ts.map +1 -0
  250. package/dist/utils/objects.js +19 -0
  251. package/dist/utils/objects.js.map +1 -0
  252. package/dist/utils/segmenter.d.ts +11 -10
  253. package/dist/utils/segmenter.d.ts.map +1 -1
  254. package/dist/utils/segmenter.js +23 -1
  255. package/dist/utils/segmenter.js.map +1 -1
  256. package/dist/utils/strings.d.ts +22 -1
  257. package/dist/utils/strings.d.ts.map +1 -1
  258. package/dist/utils/strings.js +29 -1
  259. package/dist/utils/strings.js.map +1 -1
  260. package/dist/utils/time.d.ts +18 -3
  261. package/dist/utils/time.d.ts.map +1 -1
  262. package/dist/utils/time.js +24 -8
  263. package/dist/utils/time.js.map +1 -1
  264. package/dist/utils/toError.d.ts +8 -4
  265. package/dist/utils/toError.d.ts.map +1 -1
  266. package/dist/utils/toError.js +25 -5
  267. package/dist/utils/toError.js.map +1 -1
  268. package/docs/memora-api-reference.md +1235 -0
  269. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +808 -0
  270. package/package.json +49 -22
  271. package/dist/agent/managers/memoryMutator.d.ts +0 -92
  272. package/dist/agent/managers/memoryMutator.d.ts.map +0 -1
  273. package/dist/agent/managers/memoryMutator.js +0 -94
  274. package/dist/agent/managers/memoryMutator.js.map +0 -1
@@ -1,6 +1,14 @@
1
1
  import { SOURCE_LABELS } from '../../memory/types.js';
2
2
  import { ONE_DAY_MS } from '../../memory/recall.js';
3
3
  import { nowIso } from '../../utils/time.js';
4
+ import { roundTo } from '../../utils/math.js';
5
+ // LLM judge 三件套高阶函数(流式累积 + parseLlmJson + configError 异常封装)
6
+ import { judgeWithLlm } from '../../agent/managers/llmJudgeHelper.js';
7
+ import { byScoreDesc } from '../../utils/array.js';
8
+ import { truncate } from '../../utils/strings.js';
9
+ import { logger } from '../../logging/logger.js';
10
+ // LLM 治理源列表(v2 REPEAT-1 闭环,消除 5 处独立维护的 [INSIGHT, PROFILE, WORK_PROJECTION] 列表)
11
+ import { GOVERNANCE_SOURCES } from '../../memory/governance.js';
4
12
  // ─── 常量 ────────────────────────────────────────────────
5
13
  /** 关联推荐:每个 source 采样 top-N 条 */
6
14
  const SUGGEST_TOP_PER_SOURCE = 3;
@@ -19,6 +27,16 @@ const SOURCE_HEALTH_THRESHOLDS = {
19
27
  /** 超过此天数未访问 → warning */
20
28
  WARNING_DAYS: 7,
21
29
  };
30
+ // ─── L3 冲突检测常量 ────────────────────────────────────
31
+ // 注:CONFLICT_SOURCES 已统一为 GOVERNANCE_SOURCES(governance.ts),消除 5 处独立维护
32
+ /** 单个 source 内参与配对的记忆条数上限(控制 O(n²) 配对规模) */
33
+ const CONFLICT_CANDIDATES_PER_SOURCE = 10;
34
+ /** 单次 LLM 冲突判断的候选对数上限 */
35
+ const CONFLICT_PAIR_LIMIT = 10;
36
+ /** LLM 冲突判断超时(ms) */
37
+ const CONFLICT_TIMEOUT_MS = 15_000;
38
+ /** 候选记忆内容预览长度(截断后送入 LLM) */
39
+ const CONFLICT_CONTENT_PREVIEW_LEN = 200;
22
40
  // ─── 类 ──────────────────────────────────────────────────
23
41
  /**
24
42
  * 记忆顾问
@@ -26,18 +44,23 @@ const SOURCE_HEALTH_THRESHOLDS = {
26
44
  * 从 MemoryInspector 拆分,负责基于记忆数据的分析计算:
27
45
  * - sourceHealth():记忆源健康诊断(数量、score、新鲜度)
28
46
  * - suggest():关联推荐(基于 score + 时效性 + 多样性)
47
+ * - detectConflicts():语义冲突检测(L3,可选,backgroundProvider 注入后启用)
29
48
  *
30
49
  * 与 MemoryInspector 的分工:
31
50
  * - MemoryInspector:直接数据查询(snapshot/search/stats/relations + 写操作代理)
32
- * - MemoryAdvisor:分析计算(健康诊断 + 推荐排序)
51
+ * - MemoryAdvisor:分析计算(健康诊断 + 推荐排序 + 冲突检测)
33
52
  */
34
53
  export class MemoryAdvisor {
35
54
  index;
55
+ /** 后台 LLM Provider(可选,用于 L3 冲突检测,未注入时跳过) */
56
+ backgroundProvider;
36
57
  /**
37
58
  * @param index - 记忆存储(只读访问,用于健康诊断和推荐计算)
59
+ * @param backgroundProvider - 后台 LLM Provider(可选,用于 L3 冲突检测,未注入时跳过)
38
60
  */
39
- constructor(index) {
61
+ constructor(index, backgroundProvider = null) {
40
62
  this.index = index;
63
+ this.backgroundProvider = backgroundProvider;
41
64
  }
42
65
  // ─── 源健康诊断 ─────────────────────────────────────────
43
66
  /**
@@ -94,8 +117,8 @@ export class MemoryAdvisor {
94
117
  entries.push({
95
118
  source,
96
119
  count,
97
- avgScore: Math.round(avgScore * 1000) / 1000,
98
- daysSinceLastAccess: Math.round(daysSinceLastAccess * 10) / 10,
120
+ avgScore: roundTo(avgScore, 3),
121
+ daysSinceLastAccess: roundTo(daysSinceLastAccess, 1),
99
122
  status,
100
123
  });
101
124
  }
@@ -138,14 +161,13 @@ export class MemoryAdvisor {
138
161
  }
139
162
  }
140
163
  }
141
- // 补充:按 source 分组采样,确保来源多样性
142
- const knownSources = [SOURCE_LABELS.INSIGHT, SOURCE_LABELS.PROFILE, SOURCE_LABELS.WORK_PROJECTION];
143
- for (const source of knownSources) {
164
+ // 补充:按 source 分组采样,确保来源多样性(治理源列表统一来自 governance.ts)
165
+ for (const source of GOVERNANCE_SOURCES) {
144
166
  const count = this.index.countBySource(source);
145
167
  if (count > 0 && !excludeSources.includes(source)) {
146
168
  const memories = this.index.getBySource(source);
147
169
  // 取 score 最高的前 N 条
148
- const top = memories.sort((a, b) => b.score - a.score).slice(0, SUGGEST_TOP_PER_SOURCE);
170
+ const top = memories.sort(byScoreDesc).slice(0, SUGGEST_TOP_PER_SOURCE);
149
171
  for (const m of top) {
150
172
  if (!candidates.has(m.id)) {
151
173
  candidates.set(m.id, { memory: m, searchHit: false });
@@ -191,10 +213,232 @@ export class MemoryAdvisor {
191
213
  id: memory.id,
192
214
  name: memory.name,
193
215
  source: memory.source,
194
- relevance: Math.round(relevance * 100) / 100,
195
- contentPreview: memory.content.length > ADVISOR_PREVIEW_LEN ? memory.content.slice(0, ADVISOR_PREVIEW_LEN) + '...' : memory.content,
216
+ relevance: roundTo(relevance, 2),
217
+ contentPreview: truncate(memory.content, ADVISOR_PREVIEW_LEN),
196
218
  reason,
197
219
  }));
198
220
  }
221
+ // ─── L3 语义冲突检测(可选,backgroundProvider 注入后启用) ───
222
+ /**
223
+ * 语义冲突检测:扫描同 source 的记忆对,调用 LLM 判断是否存在语义冲突
224
+ *
225
+ * 流程:
226
+ * 1. 从 insight/profile/work-projection 加载候选记忆(每个 source 取 top 10 条)
227
+ * 2. 同 source 内两两配对,取前 10 对
228
+ * 3. 对每对调用 LLM 判断是否存在语义冲突
229
+ * 4. 返回冲突报告(仅检测,不修复——冲突需要用户决策)
230
+ *
231
+ * 安全设计:
232
+ * - 仅检测不修复——不自动降级任何记忆,返回冲突详情供用户决策
233
+ * - LLM 失败降级——返回已处理的报告,不阻塞调用方
234
+ * - 单对 LLM 失败不阻塞后续检测
235
+ * - backgroundProvider 未注入时静默跳过(向后兼容)
236
+ *
237
+ * 使用场景:
238
+ * - 宿主定时任务定期检测(如每天一次)
239
+ * - 用户手动触发(记忆管理面板的"检测冲突"按钮)
240
+ * - 健康诊断报告的补充(sourceHealth 显示数量,本方法显示质量冲突)
241
+ *
242
+ * @param signal 可选的 AbortSignal(取消正在进行的 LLM 判断)
243
+ * @returns 冲突检测报告
244
+ */
245
+ async detectConflicts(signal) {
246
+ // backgroundProvider 未注入时静默降级(向后兼容)
247
+ if (!this.backgroundProvider) {
248
+ return {
249
+ scannedCount: 0,
250
+ pairCount: 0,
251
+ conflictCount: 0,
252
+ conflicts: [],
253
+ skippedReason: 'backgroundProvider 未注入',
254
+ };
255
+ }
256
+ // ── 步骤 1:加载候选记忆(每个 source 取 top 10 条,按 score 降序) ──
257
+ const candidates = [];
258
+ for (const source of GOVERNANCE_SOURCES) {
259
+ const memories = this.index.getBySource(source);
260
+ // 按 score 降序取 top N
261
+ const top = memories.sort(byScoreDesc).slice(0, CONFLICT_CANDIDATES_PER_SOURCE);
262
+ candidates.push(...top);
263
+ }
264
+ if (candidates.length < 2) {
265
+ return {
266
+ scannedCount: candidates.length,
267
+ pairCount: 0,
268
+ conflictCount: 0,
269
+ conflicts: [],
270
+ skippedReason: '候选记忆不足(少于 2 条)',
271
+ };
272
+ }
273
+ // ── 步骤 2:同 source 内两两配对,取前 10 对 ──
274
+ const pairs = this.findConflictCandidates(candidates);
275
+ if (pairs.length === 0) {
276
+ return {
277
+ scannedCount: candidates.length,
278
+ pairCount: 0,
279
+ conflictCount: 0,
280
+ conflicts: [],
281
+ skippedReason: '无同 source 候选对',
282
+ };
283
+ }
284
+ // ── 步骤 3:逐对调用 LLM 判断冲突 ──
285
+ const conflicts = [];
286
+ for (const pair of pairs) {
287
+ try {
288
+ const verdict = await this.judgeConflict(pair[0], pair[1], signal);
289
+ if (verdict.hasConflict) {
290
+ conflicts.push(verdict);
291
+ logger.info({ memoryA: verdict.memoryA.id, memoryB: verdict.memoryB.id, reason: verdict.reason }, '冲突检测:发现语义冲突');
292
+ }
293
+ }
294
+ catch (err) {
295
+ // 单对 LLM 判断失败不阻塞后续检测
296
+ logger.warn({ err, pairId: `${pair[0].id}↔${pair[1].id}` }, '冲突检测:LLM 判断失败,跳过此对');
297
+ }
298
+ }
299
+ return {
300
+ scannedCount: candidates.length,
301
+ pairCount: pairs.length,
302
+ conflictCount: conflicts.length,
303
+ conflicts,
304
+ };
305
+ }
306
+ /**
307
+ * 筛选同 source 内的候选冲突对
308
+ *
309
+ * 策略:
310
+ * - 按 source 分组,同 source 内两两配对
311
+ * - 限制每个 source 的配对数,避免 O(n²) 爆炸
312
+ * - 总候选对数上限 10 对
313
+ *
314
+ * @param candidates 候选记忆列表(已按 source 分组混合)
315
+ * @returns 同 source 候选对列表
316
+ */
317
+ findConflictCandidates(candidates) {
318
+ // 按 source 分组
319
+ const bySource = new Map();
320
+ for (const m of candidates) {
321
+ const list = bySource.get(m.source) ?? [];
322
+ list.push(m);
323
+ bySource.set(m.source, list);
324
+ }
325
+ // 同 source 内两两配对,均匀分配配对数
326
+ const pairs = [];
327
+ const sources = [...bySource.keys()];
328
+ // 每个 source 分配的配对数配额(总上限 / source 数,至少 1 对/source)
329
+ const quotaPerSource = Math.max(1, Math.ceil(CONFLICT_PAIR_LIMIT / sources.length));
330
+ for (const source of sources) {
331
+ const list = bySource.get(source);
332
+ if (!list || list.length < 2)
333
+ continue;
334
+ let count = 0;
335
+ for (let i = 0; i < list.length && count < quotaPerSource; i++) {
336
+ for (let j = i + 1; j < list.length && count < quotaPerSource; j++) {
337
+ pairs.push([list[i], list[j]]);
338
+ count++;
339
+ }
340
+ }
341
+ if (pairs.length >= CONFLICT_PAIR_LIMIT)
342
+ break;
343
+ }
344
+ return pairs.slice(0, CONFLICT_PAIR_LIMIT);
345
+ }
346
+ /**
347
+ * 调用 LLM 判断两条记忆是否存在语义冲突
348
+ *
349
+ * 使用结构化 JSON 输出(hasConflict + conflictDescription + recommendation + reason),
350
+ * 流式累积 + parseLlmJson + 异常封装委托给 llmJudgeHelper.judgeWithLlm。
351
+ *
352
+ * LLM 失败时抛出 MemoraError(由 detectConflicts 捕获并降级跳过此对)。
353
+ *
354
+ * @param memoryA 记忆 A
355
+ * @param memoryB 记忆 B
356
+ * @param signal 可选的 AbortSignal
357
+ * @returns LLM 判断结果
358
+ */
359
+ async judgeConflict(memoryA, memoryB, signal) {
360
+ const messages = buildConflictMessages(memoryA, memoryB);
361
+ const parsed = await judgeWithLlm(this.backgroundProvider, messages, { maxTokens: 300, timeoutMs: CONFLICT_TIMEOUT_MS, signal }, 'LLM 冲突判断返回非法 JSON');
362
+ // 校验 recommendation 字段(允许 'a' / 'b' / 'both',其他值忽略)
363
+ const recRaw = parsed.recommendation;
364
+ const recommendation = recRaw === 'a' || recRaw === 'b' || recRaw === 'both' ? recRaw : undefined;
365
+ return {
366
+ memoryA,
367
+ memoryB,
368
+ hasConflict: parsed.hasConflict === true,
369
+ conflictDescription: typeof parsed.conflictDescription === 'string' ? parsed.conflictDescription : undefined,
370
+ recommendation,
371
+ reason: typeof parsed.reason === 'string' ? parsed.reason : '(LLM 未提供理由)',
372
+ };
373
+ }
374
+ }
375
+ // ─── L3 冲突检测 Prompt 模板(模块级函数,与 buildDedupMessages 同模式) ───
376
+ /**
377
+ * 构建冲突判断的 LLM 消息
378
+ *
379
+ * 设计要点:
380
+ * - system 消息定义判断规则(冲突 = 两条记忆表达互相矛盾的信息)
381
+ * - user 消息携带两条记忆的内容预览(截断到 200 字符)
382
+ * - 要求输出结构化 JSON(hasConflict + conflictDescription + recommendation + reason)
383
+ * - few-shot 示例降低 LLM 误判率
384
+ *
385
+ * @param memoryA 记忆 A
386
+ * @param memoryB 记忆 B
387
+ * @returns system + user 消息数组
388
+ */
389
+ function buildConflictMessages(memoryA, memoryB) {
390
+ const contentA = memoryA.content.length > CONFLICT_CONTENT_PREVIEW_LEN
391
+ ? truncate(memoryA.content, CONFLICT_CONTENT_PREVIEW_LEN, '…[截断]')
392
+ : memoryA.content;
393
+ const contentB = memoryB.content.length > CONFLICT_CONTENT_PREVIEW_LEN
394
+ ? truncate(memoryB.content, CONFLICT_CONTENT_PREVIEW_LEN, '…[截断]')
395
+ : memoryB.content;
396
+ return [
397
+ {
398
+ role: 'system',
399
+ content: `你是记忆冲突检测助手。判断给定的两条记忆是否存在语义冲突(表达互相矛盾的信息)。
400
+
401
+ 判断规则:
402
+ - 存在冲突 = 两条记忆表达的信息互相矛盾,不能同时为真(如"喜欢 X" vs "讨厌 X")
403
+ - 无冲突 = 两条记忆信息互补、独立或不相关
404
+ - 不同维度不构成冲突(如"擅长后端" vs "偏好前端"是不同维度,非冲突)
405
+ - 时间演化不构成冲突(如"用 React 16" vs "用 React 18"是版本升级,非冲突)
406
+
407
+ 输出 JSON 格式:
408
+ {
409
+ "hasConflict": true/false,
410
+ "conflictDescription": "冲突点描述(仅 hasConflict=true 时提供)",
411
+ "recommendation": "a/b/both(建议保留哪条:a=保留A,b=保留B,both=都保留需用户裁决)",
412
+ "reason": "判断理由(简短说明)"
413
+ }
414
+
415
+ 示例:
416
+ 输入 A: "用户喜欢使用 JavaScript"
417
+ 输入 B: "用户讨厌 JavaScript"
418
+ 输出: {"hasConflict": true, "conflictDescription": "对 JavaScript 的态度矛盾", "recommendation": "both", "reason": "需用户裁决当前偏好"}
419
+
420
+ 输入 A: "用户擅长后端开发"
421
+ 输入 B: "用户偏好前端开发"
422
+ 输出: {"hasConflict": false, "reason": "擅长领域与偏好领域是不同维度,非冲突"}`,
423
+ },
424
+ {
425
+ role: 'user',
426
+ content: `请判断以下两条记忆是否存在语义冲突:
427
+
428
+ 记忆 A(score: ${memoryA.score}):
429
+ - 名称:${memoryA.name}
430
+ - 来源:${memoryA.source}
431
+ - 创建时间:${memoryA.createdAt}
432
+ - 内容:${contentA}
433
+
434
+ 记忆 B(score: ${memoryB.score}):
435
+ - 名称:${memoryB.name}
436
+ - 来源:${memoryB.source}
437
+ - 创建时间:${memoryB.createdAt}
438
+ - 内容:${contentB}
439
+
440
+ 请输出 JSON 判断结果。`,
441
+ },
442
+ ];
199
443
  }
200
444
  //# sourceMappingURL=memoryAdvisor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoryAdvisor.js","sourceRoot":"","sources":["../../../src/agent/managers/memoryAdvisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memoryAdvisor.js","sourceRoot":"","sources":["../../../src/agent/managers/memoryAdvisor.ts"],"names":[],"mappings":"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"}
@@ -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,12 +18,20 @@
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 事件系统耦合)
23
30
  * - 指标统计内聚(getMetrics 返回快照,Agent.getMetrics 直接合并)
24
31
  */
25
32
  import { type ITracer } from '../../agent/tracer.js';
33
+ import type { LlmProvider } from '../../llm/provider.js';
34
+ import type { IMemoryStorage } from '../../memory/storageInterface.js';
26
35
  /** 衰减完成的回调类型(Agent 注入 emit('decayCompleted', ...)) */
27
36
  export type DecayCompletedCallback = (payload: {
28
37
  decayedCount: number;
@@ -33,6 +42,30 @@ export interface MemoryDecaySchedulerOptions {
33
42
  readonly tracer?: ITracer;
34
43
  /** 衰减完成事件发射回调(Agent 注入 this.emit.bind(this, 'decayCompleted')) */
35
44
  readonly onDecayCompleted: DecayCompletedCallback;
45
+ /** 后台 LLM Provider(可选,用于 L2 时效性评估,未注入时跳过) */
46
+ readonly backgroundProvider?: LlmProvider | null;
47
+ /** 完整记忆存储(可选,用于 L2 读取低分记忆和降级,未注入时跳过) */
48
+ readonly index?: IMemoryStorage | null;
49
+ }
50
+ /** 单条记忆的时效性判断结果 */
51
+ export interface TimelinessVerdict {
52
+ /** 记忆 ID */
53
+ memoryId: string;
54
+ /** 是否已过时(true → 降级到 TIMELINESS_OUTDATED_SCORE) */
55
+ isOutdated: boolean;
56
+ /** LLM 判断理由 */
57
+ reason: string;
58
+ }
59
+ /** 时效性评估报告(evaluateTimeliness 返回值) */
60
+ export interface TimelinessReport {
61
+ /** 扫描的低分记忆总数 */
62
+ scannedCount: number;
63
+ /** LLM 判定为过时并执行降级的记忆数 */
64
+ outdatedCount: number;
65
+ /** 被降级的记忆 ID 列表 */
66
+ demotedIds: string[];
67
+ /** 跳过原因(LLM 不可用 / 无低分记忆 / LLM 失败降级) */
68
+ skippedReason?: string;
36
69
  }
37
70
  /** 衰减指标快照(供 Agent.getMetrics 合并) */
38
71
  export interface DecayMetrics {
@@ -58,10 +91,29 @@ export declare class MemoryDecayScheduler {
58
91
  private readonly tracer;
59
92
  /** 衰减完成事件发射回调 */
60
93
  private readonly onDecayCompleted;
94
+ /** 后台 LLM Provider(可选,用于 L2 时效性评估,未注入时跳过) */
95
+ private readonly backgroundProvider;
96
+ /** 完整记忆存储(可选,用于 L2 读取低分记忆和降级,未注入时跳过) */
97
+ private readonly index;
61
98
  /** 衰减定时器(null 表示未启动) */
62
99
  private decayTimer;
63
100
  /** 衰减目标存储(start 时注入,stop 时释放) */
64
101
  private storage;
102
+ /**
103
+ * L2 时效性评估的 AbortController
104
+ *
105
+ * FIX-P0-1:stop() 时 abort,让正在进行的 evaluateTimeliness 尽快结束,
106
+ * 防止 close 后 LLM 回调 upsert 已关闭的 storage。
107
+ * 每次 evaluateTimeliness 启动时重置为新的 controller。
108
+ */
109
+ private evaluateAbortController;
110
+ /**
111
+ * 当前正在进行的 evaluateTimeliness Promise(null 表示无)
112
+ *
113
+ * FIX-P0-1:close() 通过 awaitInflight() 等待此 Promise 完成,
114
+ * 确保关闭时所有 L2 评估的 upsert 都落在 storage 关闭前。
115
+ */
116
+ private inflightEvaluate;
65
117
  /** 衰减执行次数(每次 runOnce 实际执行 +1) */
66
118
  private metricDecayRunCount;
67
119
  /** 累计衰减记忆数(score 被调低的记忆条数总和) */
@@ -79,9 +131,24 @@ export declare class MemoryDecayScheduler {
79
131
  /**
80
132
  * 停止定期衰减,释放资源
81
133
  *
82
- * 清理定时器和 storage 引用,防止 close 后回调触发。
134
+ * FIX-P0-1:清理定时器 + abort 正在进行的 L2 时效性评估 + 释放 storage 引用,
135
+ * 防止 close 后回调触发 upsert 已关闭的 storage。
136
+ *
137
+ * 注意:stop() 不等待 inflightEvaluate 完成(避免阻塞 close 流程),
138
+ * 调用方如需等待应使用 awaitInflight()。abort 后 LLM 调用会快速失败,
139
+ * evaluateTimeliness 内部的 try/catch 会捕获并降级返回。
83
140
  */
84
141
  stop(): void;
142
+ /**
143
+ * 等待正在进行的 L2 时效性评估完成
144
+ *
145
+ * FIX-P0-1:Agent.close() 在 stop() 后调用此方法,确保所有 inflight 的
146
+ * evaluateTimeliness Promise 完成(要么正常返回,要么因 abort 快速 reject),
147
+ * 防止 close 后 LLM 回调 upsert 已关闭的 storage。
148
+ *
149
+ * @returns 完成 Promise,无 inflight 时立即 resolve
150
+ */
151
+ awaitInflight(): Promise<void>;
85
152
  /**
86
153
  * 执行一次记忆衰减
87
154
  *
@@ -99,6 +166,65 @@ export declare class MemoryDecayScheduler {
99
166
  * 供 Agent.getMetrics() 合并到完整 AgentMetrics 中。
100
167
  */
101
168
  getMetrics(): DecayMetrics;
169
+ /**
170
+ * 时效性评估:扫描低分记忆,调用 LLM 判断是否已过时
171
+ *
172
+ * 流程:
173
+ * 1. 从 insight/profile/work-projection 加载低分记忆(score < 0.3)
174
+ * 2. 对每条低分记忆(上限 20 条),调用 LLM 判断是否"已过时"
175
+ * 3. 过时则进一步降级(score → 0.05,接近物理删除阈值但保留可恢复性)
176
+ * 4. 返回评估报告
177
+ *
178
+ * 使用场景:
179
+ * - 衰减后调用(onDecayCompleted 回调中),对低分记忆做 LLM 二次评估
180
+ * - 宿主定时任务定期调用(如每天一次)
181
+ * - 用户手动触发(记忆管理面板的"清理过时记忆"按钮)
182
+ *
183
+ * 安全设计:
184
+ * - 不物理删除——仅降级 score,保留可恢复性
185
+ * - LLM 失败降级——返回已处理的报告,不阻塞调用方
186
+ * - 单条 LLM 失败不阻塞后续评估
187
+ * - backgroundProvider / index 未注入时静默跳过(向后兼容)
188
+ *
189
+ * FIX-P0-1:每次启动评估创建新的 AbortController,注册到 inflightEvaluate。
190
+ * stop() 时 abort 让 LLM 调用快速失败,awaitInflight() 等待 Promise 完成。
191
+ * 外部 signal 仍可与内部 abort 信号同时使用(任一触发即取消)。
192
+ *
193
+ * @param signal 可选的外部 AbortSignal(与内部 abort 信号叠加,任一触发即取消)
194
+ * @returns 评估报告
195
+ */
196
+ evaluateTimeliness(signal?: AbortSignal): Promise<TimelinessReport>;
197
+ /**
198
+ * 实际执行 L2 时效性评估的核心逻辑
199
+ *
200
+ * 从 evaluateTimeliness 拆出,便于 inflightEvaluate Promise 注册和清理。
201
+ *
202
+ * @param combinedSignal 已叠加内部 + 外部的 AbortSignal
203
+ */
204
+ private doEvaluateTimeliness;
205
+ /**
206
+ * 调用 LLM 判断单条记忆的时效性
207
+ *
208
+ * 使用结构化 JSON 输出(isOutdated + reason),
209
+ * 流式累积 + parseLlmJson + 异常封装委托给 llmJudgeHelper.judgeWithLlm。
210
+ *
211
+ * LLM 失败时抛出 MemoraError(由 evaluateTimeliness 捕获并降级跳过此条)。
212
+ *
213
+ * @param memory 待评估的记忆
214
+ * @param signal 可选的 AbortSignal
215
+ * @returns LLM 判断结果
216
+ */
217
+ private judgeTimeliness;
218
+ /**
219
+ * 降级过时记忆(score → TIMELINESS_OUTDATED_SCORE)
220
+ *
221
+ * 安全设计:
222
+ * - 不物理删除,仅降低 score,保留可恢复性
223
+ * - 更新 accessedAt,标记最近被处理过
224
+ *
225
+ * @param memory 待降级的过时记忆
226
+ */
227
+ private demoteOutdatedMemory;
102
228
  }
103
229
  /**
104
230
  * IMemoryStorage 的衰减子接口(接口隔离原则)
@@ -1 +1 @@
1
- {"version":3,"file":"memoryDecayScheduler.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/memoryDecayScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE3E,sDAAsD;AACtD,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC;AAEjF,gCAAgC;AAChC,MAAM,WAAW,2BAA2B;IAC1C,uCAAuC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;CACnD;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAE1D,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAA+C;IACjE,iCAAiC;IACjC,OAAO,CAAC,OAAO,CAAmC;IAGlD,iCAAiC;IACjC,OAAO,CAAC,mBAAmB,CAAa;IACxC,gCAAgC;IAChC,OAAO,CAAC,uBAAuB,CAAa;IAC5C,oCAAoC;IACpC,OAAO,CAAC,iBAAiB,CAAuB;gBAEpC,IAAI,EAAE,2BAA2B;IAK7C;;;;;OAKG;IACH,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ5D;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAQZ;;;;;;;;;OASG;IACH,OAAO,IAAI,IAAI;IAyBf;;;;OAIG;IACH,UAAU,IAAI,YAAY;CAO3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CAAC;CAC5D"}
1
+ {"version":3,"file":"memoryDecayScheduler.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/memoryDecayScheduler.ts"],"names":[],"mappings":"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"}