@zooique/memora 2.0.0 → 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 (212) hide show
  1. package/README.en.md +272 -0
  2. package/README.md +150 -38
  3. package/dist/agent/agent.d.ts +233 -58
  4. package/dist/agent/agent.d.ts.map +1 -1
  5. package/dist/agent/agent.js +651 -359
  6. package/dist/agent/agent.js.map +1 -1
  7. package/dist/agent/assembler.d.ts +29 -13
  8. package/dist/agent/assembler.d.ts.map +1 -1
  9. package/dist/agent/assembler.js +79 -44
  10. package/dist/agent/assembler.js.map +1 -1
  11. package/dist/agent/builtinToolHandlers.d.ts +26 -1
  12. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  13. package/dist/agent/builtinToolHandlers.js +73 -1
  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 +58 -14
  28. package/dist/agent/loop.d.ts.map +1 -1
  29. package/dist/agent/loop.js +184 -131
  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/configManager.d.ts +87 -3
  39. package/dist/agent/managers/configManager.d.ts.map +1 -1
  40. package/dist/agent/managers/configManager.js +139 -2
  41. package/dist/agent/managers/configManager.js.map +1 -1
  42. package/dist/agent/managers/dedupManager.d.ts +169 -0
  43. package/dist/agent/managers/dedupManager.d.ts.map +1 -0
  44. package/dist/agent/managers/dedupManager.js +336 -0
  45. package/dist/agent/managers/dedupManager.js.map +1 -0
  46. package/dist/agent/managers/insightExtractor.d.ts.map +1 -1
  47. package/dist/agent/managers/insightExtractor.js +11 -11
  48. package/dist/agent/managers/insightExtractor.js.map +1 -1
  49. package/dist/agent/managers/llmJudgeHelper.d.ts +38 -0
  50. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
  51. package/dist/agent/managers/llmJudgeHelper.js +49 -0
  52. package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
  53. package/dist/agent/managers/memoryAdvisor.d.ts +3 -3
  54. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  55. package/dist/agent/managers/memoryAdvisor.js +53 -67
  56. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  57. package/dist/agent/managers/memoryDecayScheduler.d.ts +46 -5
  58. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +1 -1
  59. package/dist/agent/managers/memoryDecayScheduler.js +127 -63
  60. package/dist/agent/managers/memoryDecayScheduler.js.map +1 -1
  61. package/dist/agent/managers/memoryGovernance.d.ts +56 -0
  62. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
  63. package/dist/agent/managers/memoryGovernance.js +63 -0
  64. package/dist/agent/managers/memoryGovernance.js.map +1 -0
  65. package/dist/agent/managers/memoryInspector.d.ts +32 -157
  66. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  67. package/dist/agent/managers/memoryInspector.js +70 -363
  68. package/dist/agent/managers/memoryInspector.js.map +1 -1
  69. package/dist/agent/managers/relationBuilder.js +2 -2
  70. package/dist/agent/managers/relationBuilder.js.map +1 -1
  71. package/dist/agent/managers/sessionArchiver.d.ts +6 -1
  72. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  73. package/dist/agent/managers/sessionArchiver.js +19 -22
  74. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  75. package/dist/agent/managers/streamAccumulator.d.ts +45 -0
  76. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
  77. package/dist/agent/managers/streamAccumulator.js +40 -0
  78. package/dist/agent/managers/streamAccumulator.js.map +1 -0
  79. package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
  80. package/dist/agent/managers/textPolishManager.js +4 -7
  81. package/dist/agent/managers/textPolishManager.js.map +1 -1
  82. package/dist/agent/managers/workProjection.d.ts +16 -1
  83. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  84. package/dist/agent/managers/workProjection.js +48 -24
  85. package/dist/agent/managers/workProjection.js.map +1 -1
  86. package/dist/agent/toolExecutor.d.ts +22 -2
  87. package/dist/agent/toolExecutor.d.ts.map +1 -1
  88. package/dist/agent/toolExecutor.js +28 -3
  89. package/dist/agent/toolExecutor.js.map +1 -1
  90. package/dist/agent/types.d.ts +10 -1
  91. package/dist/agent/types.d.ts.map +1 -1
  92. package/dist/agent/userFactExtractor.d.ts.map +1 -1
  93. package/dist/agent/userFactExtractor.js +7 -0
  94. package/dist/agent/userFactExtractor.js.map +1 -1
  95. package/dist/config/loader.d.ts +124 -236
  96. package/dist/config/loader.d.ts.map +1 -1
  97. package/dist/config/loader.js +273 -117
  98. package/dist/config/loader.js.map +1 -1
  99. package/dist/index.d.ts +7 -2
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +9 -0
  102. package/dist/index.js.map +1 -1
  103. package/dist/llm/embedding.d.ts +13 -1
  104. package/dist/llm/embedding.d.ts.map +1 -1
  105. package/dist/llm/embedding.js.map +1 -1
  106. package/dist/llm/factory.d.ts +19 -5
  107. package/dist/llm/factory.d.ts.map +1 -1
  108. package/dist/llm/factory.js +19 -37
  109. package/dist/llm/factory.js.map +1 -1
  110. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  111. package/dist/llm/openaiCompatible.js +2 -9
  112. package/dist/llm/openaiCompatible.js.map +1 -1
  113. package/dist/logging/logger.d.ts +3 -1
  114. package/dist/logging/logger.d.ts.map +1 -1
  115. package/dist/logging/logger.js +47 -50
  116. package/dist/logging/logger.js.map +1 -1
  117. package/dist/memory/governance.d.ts +50 -0
  118. package/dist/memory/governance.d.ts.map +1 -0
  119. package/dist/memory/governance.js +70 -0
  120. package/dist/memory/governance.js.map +1 -0
  121. package/dist/memory/hybridMerge.d.ts +0 -4
  122. package/dist/memory/hybridMerge.d.ts.map +1 -1
  123. package/dist/memory/hybridMerge.js +19 -4
  124. package/dist/memory/hybridMerge.js.map +1 -1
  125. package/dist/memory/inMemoryRelationStore.d.ts +7 -0
  126. package/dist/memory/inMemoryRelationStore.d.ts.map +1 -1
  127. package/dist/memory/inMemoryRelationStore.js +15 -0
  128. package/dist/memory/inMemoryRelationStore.js.map +1 -1
  129. package/dist/memory/inMemoryStorage.d.ts +36 -1
  130. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  131. package/dist/memory/inMemoryStorage.js +66 -16
  132. package/dist/memory/inMemoryStorage.js.map +1 -1
  133. package/dist/memory/loader.d.ts +2 -0
  134. package/dist/memory/loader.d.ts.map +1 -1
  135. package/dist/memory/loader.js +8 -1
  136. package/dist/memory/loader.js.map +1 -1
  137. package/dist/memory/lockManager.d.ts +7 -2
  138. package/dist/memory/lockManager.d.ts.map +1 -1
  139. package/dist/memory/lockManager.js +31 -5
  140. package/dist/memory/lockManager.js.map +1 -1
  141. package/dist/memory/projectManager.d.ts +2 -1
  142. package/dist/memory/projectManager.d.ts.map +1 -1
  143. package/dist/memory/projectManager.js +21 -3
  144. package/dist/memory/projectManager.js.map +1 -1
  145. package/dist/memory/projectRegistry.d.ts +34 -1
  146. package/dist/memory/projectRegistry.d.ts.map +1 -1
  147. package/dist/memory/projectRegistry.js +99 -22
  148. package/dist/memory/projectRegistry.js.map +1 -1
  149. package/dist/memory/recall.d.ts +16 -0
  150. package/dist/memory/recall.d.ts.map +1 -1
  151. package/dist/memory/recall.js +33 -18
  152. package/dist/memory/recall.js.map +1 -1
  153. package/dist/memory/relationStore.d.ts +20 -3
  154. package/dist/memory/relationStore.d.ts.map +1 -1
  155. package/dist/memory/sourceValidation.d.ts +11 -0
  156. package/dist/memory/sourceValidation.d.ts.map +1 -1
  157. package/dist/memory/sourceValidation.js +24 -2
  158. package/dist/memory/sourceValidation.js.map +1 -1
  159. package/dist/memory/storageInterface.d.ts +26 -1
  160. package/dist/memory/storageInterface.d.ts.map +1 -1
  161. package/dist/memory/store.d.ts +22 -1
  162. package/dist/memory/store.d.ts.map +1 -1
  163. package/dist/memory/store.js +58 -20
  164. package/dist/memory/store.js.map +1 -1
  165. package/dist/memory/types.d.ts +44 -31
  166. package/dist/memory/types.d.ts.map +1 -1
  167. package/dist/memory/types.js +63 -24
  168. package/dist/memory/types.js.map +1 -1
  169. package/dist/memory/userProfile.d.ts +32 -8
  170. package/dist/memory/userProfile.d.ts.map +1 -1
  171. package/dist/memory/userProfile.js +105 -44
  172. package/dist/memory/userProfile.js.map +1 -1
  173. package/dist/memory/vectorStore.d.ts +16 -22
  174. package/dist/memory/vectorStore.d.ts.map +1 -1
  175. package/dist/memory/vectorStore.js +49 -22
  176. package/dist/memory/vectorStore.js.map +1 -1
  177. package/dist/persona/personaManager.d.ts +36 -87
  178. package/dist/persona/personaManager.d.ts.map +1 -1
  179. package/dist/persona/personaManager.js +131 -230
  180. package/dist/persona/personaManager.js.map +1 -1
  181. package/dist/skill/skillManager.d.ts +11 -57
  182. package/dist/skill/skillManager.d.ts.map +1 -1
  183. package/dist/skill/skillManager.js +46 -142
  184. package/dist/skill/skillManager.js.map +1 -1
  185. package/dist/skill/types.d.ts +2 -3
  186. package/dist/skill/types.d.ts.map +1 -1
  187. package/dist/utils/configResourceManager.d.ts +111 -0
  188. package/dist/utils/configResourceManager.d.ts.map +1 -0
  189. package/dist/utils/configResourceManager.js +148 -0
  190. package/dist/utils/configResourceManager.js.map +1 -0
  191. package/dist/utils/errors.d.ts +17 -0
  192. package/dist/utils/errors.d.ts.map +1 -1
  193. package/dist/utils/errors.js +19 -0
  194. package/dist/utils/errors.js.map +1 -1
  195. package/dist/utils/eventEmitter.d.ts +83 -6
  196. package/dist/utils/eventEmitter.d.ts.map +1 -1
  197. package/dist/utils/eventEmitter.js +23 -0
  198. package/dist/utils/eventEmitter.js.map +1 -1
  199. package/dist/utils/frontmatter.d.ts.map +1 -1
  200. package/dist/utils/frontmatter.js +4 -2
  201. package/dist/utils/frontmatter.js.map +1 -1
  202. package/dist/utils/math.d.ts +11 -0
  203. package/dist/utils/math.d.ts.map +1 -1
  204. package/dist/utils/math.js +17 -0
  205. package/dist/utils/math.js.map +1 -1
  206. package/dist/utils/segmenter.d.ts +0 -10
  207. package/dist/utils/segmenter.d.ts.map +1 -1
  208. package/dist/utils/segmenter.js +10 -1
  209. package/dist/utils/segmenter.js.map +1 -1
  210. package/docs/memora-api-reference.md +1235 -0
  211. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +808 -0
  212. package/package.json +39 -22
@@ -2,21 +2,29 @@
2
2
  * 归档协调器(从 agent.ts 拆分)
3
3
  *
4
4
  * 职责:
5
- * 1. 手动归档用户画像事实(archiveProfileFacts)
6
- * 2. 手动归档洞察记忆(archiveInsight)
7
- * 3. 手动归档会话内容(archiveSessionContent)
8
- * 4. 归档完成事件发射(memoryAdded / insightExtracted)
5
+ * 1. 归档用户画像事实(archiveProfileFacts)
6
+ * 2. 归档洞察记忆(archiveInsight)
7
+ * 3. 归档会话内容(archiveSessionContent)
8
+ * 4. 归档完成事件发射(memoryAdded / insightExtracted / archiveFailed)
9
+ * 5. archiveMode 三态控制集中判断(FIX-P1-4)
9
10
  *
10
11
  * 设计理由:
11
12
  * agent.ts 原承担 15+ 职责,归档操作是独立的领域职责,
12
- * 拆分后 Agent 聚焦对话编排,ArchiveCoordinator 聚焦手动归档操作。
13
+ * 拆分后 Agent 聚焦对话编排,ArchiveCoordinator 聚焦归档操作 + 模式判断。
13
14
  *
14
- * 与 setArchiveMode 的关系:
15
- * setArchiveMode / getArchiveMode 保留在 Agent 中(涉及 _chatBusy 和 #config 私有字段)。
16
- * ArchiveCoordinator 只负责归档操作执行,不管理模式状态。
15
+ * FIX-P1-4(2026-07-24):archiveMode 三态控制集中到本类
16
+ * 原实现三态判断散落在 3 处:
17
+ * - Agent.postProcessInner 判断 'manual' 跳过 profile/insight 自动归档
18
+ * - 宿主 sessionHandlers.ts 判断 'full' 触发 content 自动归档
19
+ * - ArchiveCoordinator 名为"协调器"实为"执行器",不感知模式
20
+ * 修复后:
21
+ * - ArchiveCoordinator 构造时注入 getArchiveMode getter
22
+ * - 3 个归档方法新增 autoTriggered 参数区分自动/手动触发
23
+ * - 自动触发时由本类内部按模式判断是否跳过(统一协调点)
24
+ * - setArchiveMode/getArchiveMode 仍保留在 Agent(涉及 _chatBusy 和 #config)
17
25
  *
18
26
  * 自然生长原则:
19
- * - 使用 getter 回调注入依赖(getUserProfile / getInsightExtractor / getSessionArchiver)
27
+ * - 使用 getter 回调注入依赖(getUserProfile / getInsightExtractor / getSessionArchiver / getArchiveMode)
20
28
  * 避免 close 时额外清理,Agent null 化字段后 getter 自然返回 null
21
29
  * - 通过回调发射事件(不继承 TypedEventEmitter)
22
30
  * - 不做 assertInitialized 检查(由 Agent 在调用前保证)
@@ -26,6 +34,7 @@ import type { UserProfile, UserProfileEntry } from '../../memory/userProfile.js'
26
34
  import type { InsightExtractor } from '../../agent/managers/insightExtractor.js';
27
35
  import type { SessionArchiver, SessionArchiveResult } from '../../agent/managers/sessionArchiver.js';
28
36
  import type { AgentEventMap } from '../../utils/eventEmitter.js';
37
+ import type { ArchiveMode } from '../../agent/types.js';
29
38
  /** 事件发射回调类型(Agent 注入 this.emit) */
30
39
  type EmitCallback = <K extends keyof AgentEventMap>(event: K, payload: AgentEventMap[K]) => void;
31
40
  /** ArchiveCoordinator 构造选项 */
@@ -36,9 +45,29 @@ export interface ArchiveCoordinatorOptions {
36
45
  readonly getInsightExtractor: () => InsightExtractor | null;
37
46
  /** 获取 SessionArchiver(可能为 null) */
38
47
  readonly getSessionArchiver: () => SessionArchiver | null;
48
+ /**
49
+ * 获取当前 archiveMode(FIX-P1-4:三态控制集中到本类)
50
+ * Agent 注入 `() => this.#config.archiveMode`,本类据此判断自动触发是否跳过
51
+ */
52
+ readonly getArchiveMode: () => ArchiveMode;
39
53
  /** 事件发射回调(Agent 注入 this.emit) */
40
54
  readonly emit: EmitCallback;
41
55
  }
56
+ /**
57
+ * 归档触发选项(FIX-P1-4)
58
+ *
59
+ * 区分"自动触发"(postProcess / 会话切换等系统调用)与"手动触发"(用户主动点击归档按钮)。
60
+ * 自动触发时由 ArchiveCoordinator 按 archiveMode 判断是否跳过;
61
+ * 手动触发时无条件执行(用户意图优先,不受模式限制)。
62
+ */
63
+ export interface ArchiveTriggerOptions {
64
+ /**
65
+ * 是否为系统自动触发(默认 false,即手动触发)
66
+ * - true:postProcessInner / 会话切换等系统路径调用
67
+ * - false:用户通过 UI 主动触发归档
68
+ */
69
+ autoTriggered?: boolean;
70
+ }
42
71
  /**
43
72
  * 归档协调器
44
73
  *
@@ -47,54 +76,129 @@ export interface ArchiveCoordinatorOptions {
47
76
  * getUserProfile: () => this.#userProfile,
48
77
  * getInsightExtractor: () => this.insightExtractor,
49
78
  * getSessionArchiver: () => this.sessionArchiver,
79
+ * getArchiveMode: () => this.#config.archiveMode,
50
80
  * emit: this.emit.bind(this),
51
81
  * });
82
+ * // 手动触发(用户主动)
52
83
  * await coordinator.archiveProfileFacts(input);
53
- * await coordinator.archiveInsight(input, assistantContent);
54
- * await coordinator.archiveSessionContent(date, session);
84
+ * // 自动触发(postProcess / 会话切换)
85
+ * await coordinator.archiveProfileFacts(input, { autoTriggered: true });
55
86
  */
56
87
  export declare class ArchiveCoordinator {
88
+ /** pending 队列上限——超过则丢弃最旧项,避免 LLM 长时间不可用时无限增长 */
89
+ private static readonly MAX_PENDING;
57
90
  /** 获取 UserProfile 的回调 */
58
91
  private readonly getUserProfile;
59
92
  /** 获取 InsightExtractor 的回调 */
60
93
  private readonly getInsightExtractor;
61
94
  /** 获取 SessionArchiver 的回调 */
62
95
  private readonly getSessionArchiver;
96
+ /** 获取当前 archiveMode 的回调(FIX-P1-4) */
97
+ private readonly getArchiveMode;
63
98
  /** 事件发射回调 */
64
99
  private readonly emit;
100
+ /**
101
+ * 待重试归档队列(MIND2-C3)
102
+ *
103
+ * 归档失败时入队,下次同阶段归档调用时先重试。
104
+ * 仅 profile/insight 阶段入队(content 从 session store 读取,可手动重试)。
105
+ */
106
+ private readonly pendingArchives;
65
107
  constructor(opts: ArchiveCoordinatorOptions);
66
108
  /**
67
- * 手动触发 profile facts 归档(manual 模式下使用)
109
+ * 归档用户画像事实
68
110
  *
69
- * manual 模式下 postProcess 跳过自动归档,用户需通过此 API 主动归档。
70
- * full / insights-only 模式下也可调用(会重复归档,但不推荐)。
111
+ * 模式判断(FIX-P1-4,集中到本类):
112
+ * - 自动触发 + manual 模式 → 跳过(返回空),用户需手动调用
113
+ * - 自动触发 + full/insights-only 模式 → 执行
114
+ * - 手动触发(任何模式) → 执行(用户意图优先)
71
115
  *
72
116
  * @param input 本轮用户输入
117
+ * @param options 触发选项(autoTriggered 默认 false)
73
118
  * @returns 写入/更新的 UserProfileEntry 列表
74
119
  */
75
- archiveProfileFacts(input: string): Promise<UserProfileEntry[]>;
120
+ archiveProfileFacts(input: string, options?: ArchiveTriggerOptions): Promise<UserProfileEntry[]>;
76
121
  /**
77
- * 手动触发 insight 提取(manual 模式下使用)
122
+ * 提取并归档洞察记忆
123
+ *
124
+ * 模式判断(FIX-P1-4,集中到本类):
125
+ * - 自动触发 + manual 模式 → 跳过(返回空),用户需手动调用
126
+ * - 自动触发 + full/insights-only 模式 → 执行
127
+ * - 手动触发(任何模式) → 执行(用户意图优先)
78
128
  *
79
- * manual 模式下 postProcess 跳过自动归档,用户需通过此 API 主动归档。
80
129
  * 内部仍走 classify 判断(避免无价值输入浪费 LLM 调用)。
81
130
  *
82
131
  * @param input 本轮用户输入
83
132
  * @param assistantContent 本轮助手回复内容
133
+ * @param options 触发选项(autoTriggered 默认 false)
84
134
  * @returns 写入/更新的 Memory 列表
85
135
  */
86
- archiveInsight(input: string, assistantContent: string): Promise<Memory[]>;
136
+ archiveInsight(input: string, assistantContent: string, options?: ArchiveTriggerOptions): Promise<Memory[]>;
87
137
  /**
88
- * 手动归档会话内容(content 类记忆)
138
+ * 归档会话内容(content 类记忆)
89
139
  *
90
- * 适用于 `insights-only` / `manual` 模式下用户手动触发会话内容归档。
91
- * `full` 模式下由宿主在会话切换前自动调用,无需用户干预。
140
+ * 模式判断(FIX-P1-4,集中到本类):
141
+ * - 自动触发 + full 模式 → 执行(会话切换前自动归档)
142
+ * - 自动触发 + insights-only/manual 模式 → 跳过,用户需手动调用
143
+ * - 手动触发(任何模式) → 执行(用户意图优先,如"一键归档"按钮)
144
+ *
145
+ * 错误传播契约:
146
+ * - SessionArchiver LLM 异常 / 写入失败向上抛出(不内部吞掉)。
147
+ * - 本方法 catch 异常并发射 archiveFailed({ stage: 'content' }) 事件,
148
+ * 让宿主 UI 可感知会话内容归档失败。
149
+ * - archiveProfileFacts / archiveInsight 同样 catch 并发射 archiveFailed
150
+ * 事件(stage 分别为 'profile' / 'insight'),三阶段统一闭环。
151
+ * - 失败时返回空降级结果,保证调用方(如 SESSION_SWITCH 自动归档)不中断主流程。
92
152
  *
93
153
  * @param date 会话日期 YYYY-MM-DD
94
154
  * @param session 会话标识(不含日期前缀)
155
+ * @param options 触发选项(autoTriggered 默认 false)
95
156
  * @returns 归档结果(memories 可能为空,表示无归档价值或 LLM 失败)
96
157
  */
97
- archiveSessionContent(date: string, session: string): Promise<SessionArchiveResult>;
158
+ archiveSessionContent(date: string, session: string, options?: ArchiveTriggerOptions): Promise<SessionArchiveResult>;
159
+ /**
160
+ * 统一处理归档异常:记录日志 + 发射 archiveFailed 事件
161
+ *
162
+ * 三段归档方法(profile/insight/content)的 catch 模板完全相同,
163
+ * 提取为私有方法消除重复(ADR-017 枝叶层 2 次提取原则,3 次阈值已满足)。
164
+ *
165
+ * @param stage 归档阶段标识(用于日志结构化字段 + archiveFailed 事件 payload)
166
+ * @param err 捕获的异常
167
+ */
168
+ private handleArchiveError;
169
+ /**
170
+ * 将失败的归档输入入队(MIND2-C3)
171
+ *
172
+ * 仅 profile/insight 阶段入队——content 从 session store 读取可手动重试。
173
+ * 队列满时丢弃最旧项(FIFO 淘汰),避免 LLM 长时间不可用时无限增长。
174
+ *
175
+ * @param stage 归档阶段(profile / insight)
176
+ * @param input 本轮用户输入
177
+ * @param assistantContent 助手回复(仅 insight 阶段)
178
+ */
179
+ private enqueuePending;
180
+ /**
181
+ * 重试 pending 队列中指定阶段的所有失败归档(MIND2-C3)
182
+ *
183
+ * 在 archiveProfileFacts / archiveInsight 入口调用,先清空同阶段 pending 项:
184
+ * - 成功 → 从队列移除(补录完成)
185
+ * - 失败 → 保留在队列(等下次再试,不无限重试——每次调用只重试一轮)
186
+ *
187
+ * 重试失败不发射 archiveFailed 事件(避免重复 toast 节流),仅 debug 日志。
188
+ * 重试成功正常发射 memoryAdded / insightExtracted 事件(与首次成功一致)。
189
+ *
190
+ * @param stage 要重试的阶段(profile / insight)
191
+ */
192
+ private retryPendingArchives;
193
+ /**
194
+ * 获取 pending 归档队列长度(MIND2-C3)
195
+ *
196
+ * 供宿主 UI 查询是否有待补归档,展示"N 条待补"提示。
197
+ * Agent 不直接消费此值——通过 IPC 暴露给渲染层。
198
+ *
199
+ * @returns pending 队列中的待重试归档数
200
+ */
201
+ getPendingArchiveCount(): number;
98
202
  }
99
203
  export {};
100
204
  //# sourceMappingURL=archiveCoordinator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"archiveCoordinator.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/archiveCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,mCAAmC;AACnC,KAAK,YAAY,GAAG,CAAC,CAAC,SAAS,MAAM,aAAa,EAChD,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KACtB,IAAI,CAAC;AAEV,8BAA8B;AAC9B,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAClD,oCAAoC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAC5D,mCAAmC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IAC1D,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAkB;IAC7B,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgC;IACpE,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+B;IAClE,aAAa;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;gBAExB,IAAI,EAAE,yBAAyB;IAO3C;;;;;;;;OAQG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAerE;;;;;;;;;OASG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAehF;;;;;;;;;OASG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAY1F"}
1
+ {"version":3,"file":"archiveCoordinator.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/archiveCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEjG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,mCAAmC;AACnC,KAAK,YAAY,GAAG,CAAC,CAAC,SAAS,MAAM,aAAa,EAChD,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KACtB,IAAI,CAAC;AAoBV,8BAA8B;AAC9B,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,QAAQ,CAAC,cAAc,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IAClD,oCAAoC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAC5D,mCAAmC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IAC1D;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,WAAW,CAAC;IAC3C,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBAAkB;IAC7B,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IAEzC,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,8BAA8B;IAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgC;IACpE,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+B;IAClE,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,aAAa;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;gBAE5C,IAAI,EAAE,yBAAyB;IAQ3C;;;;;;;;;;;OAWG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA+B9B;;;;;;;;;;;;;;OAcG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;IA+BpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IA0BhC;;;;;;;;OAQG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;;;;;;;;;OAWG;YACW,oBAAoB;IA8ClC;;;;;;;OAOG;IACH,sBAAsB,IAAI,MAAM;CAGjC"}
@@ -2,26 +2,35 @@
2
2
  * 归档协调器(从 agent.ts 拆分)
3
3
  *
4
4
  * 职责:
5
- * 1. 手动归档用户画像事实(archiveProfileFacts)
6
- * 2. 手动归档洞察记忆(archiveInsight)
7
- * 3. 手动归档会话内容(archiveSessionContent)
8
- * 4. 归档完成事件发射(memoryAdded / insightExtracted)
5
+ * 1. 归档用户画像事实(archiveProfileFacts)
6
+ * 2. 归档洞察记忆(archiveInsight)
7
+ * 3. 归档会话内容(archiveSessionContent)
8
+ * 4. 归档完成事件发射(memoryAdded / insightExtracted / archiveFailed)
9
+ * 5. archiveMode 三态控制集中判断(FIX-P1-4)
9
10
  *
10
11
  * 设计理由:
11
12
  * agent.ts 原承担 15+ 职责,归档操作是独立的领域职责,
12
- * 拆分后 Agent 聚焦对话编排,ArchiveCoordinator 聚焦手动归档操作。
13
+ * 拆分后 Agent 聚焦对话编排,ArchiveCoordinator 聚焦归档操作 + 模式判断。
13
14
  *
14
- * 与 setArchiveMode 的关系:
15
- * setArchiveMode / getArchiveMode 保留在 Agent 中(涉及 _chatBusy 和 #config 私有字段)。
16
- * ArchiveCoordinator 只负责归档操作执行,不管理模式状态。
15
+ * FIX-P1-4(2026-07-24):archiveMode 三态控制集中到本类
16
+ * 原实现三态判断散落在 3 处:
17
+ * - Agent.postProcessInner 判断 'manual' 跳过 profile/insight 自动归档
18
+ * - 宿主 sessionHandlers.ts 判断 'full' 触发 content 自动归档
19
+ * - ArchiveCoordinator 名为"协调器"实为"执行器",不感知模式
20
+ * 修复后:
21
+ * - ArchiveCoordinator 构造时注入 getArchiveMode getter
22
+ * - 3 个归档方法新增 autoTriggered 参数区分自动/手动触发
23
+ * - 自动触发时由本类内部按模式判断是否跳过(统一协调点)
24
+ * - setArchiveMode/getArchiveMode 仍保留在 Agent(涉及 _chatBusy 和 #config)
17
25
  *
18
26
  * 自然生长原则:
19
- * - 使用 getter 回调注入依赖(getUserProfile / getInsightExtractor / getSessionArchiver)
27
+ * - 使用 getter 回调注入依赖(getUserProfile / getInsightExtractor / getSessionArchiver / getArchiveMode)
20
28
  * 避免 close 时额外清理,Agent null 化字段后 getter 自然返回 null
21
29
  * - 通过回调发射事件(不继承 TypedEventEmitter)
22
30
  * - 不做 assertInitialized 检查(由 Agent 在调用前保证)
23
31
  */
24
32
  import { extractUserFacts } from '../../agent/userFactExtractor.js';
33
+ import { logger } from '../../logging/logger.js';
25
34
  /**
26
35
  * 归档协调器
27
36
  *
@@ -30,98 +39,284 @@ import { extractUserFacts } from '../../agent/userFactExtractor.js';
30
39
  * getUserProfile: () => this.#userProfile,
31
40
  * getInsightExtractor: () => this.insightExtractor,
32
41
  * getSessionArchiver: () => this.sessionArchiver,
42
+ * getArchiveMode: () => this.#config.archiveMode,
33
43
  * emit: this.emit.bind(this),
34
44
  * });
45
+ * // 手动触发(用户主动)
35
46
  * await coordinator.archiveProfileFacts(input);
36
- * await coordinator.archiveInsight(input, assistantContent);
37
- * await coordinator.archiveSessionContent(date, session);
47
+ * // 自动触发(postProcess / 会话切换)
48
+ * await coordinator.archiveProfileFacts(input, { autoTriggered: true });
38
49
  */
39
50
  export class ArchiveCoordinator {
51
+ /** pending 队列上限——超过则丢弃最旧项,避免 LLM 长时间不可用时无限增长 */
52
+ static MAX_PENDING = 50;
40
53
  /** 获取 UserProfile 的回调 */
41
54
  getUserProfile;
42
55
  /** 获取 InsightExtractor 的回调 */
43
56
  getInsightExtractor;
44
57
  /** 获取 SessionArchiver 的回调 */
45
58
  getSessionArchiver;
59
+ /** 获取当前 archiveMode 的回调(FIX-P1-4) */
60
+ getArchiveMode;
46
61
  /** 事件发射回调 */
47
62
  emit;
63
+ /**
64
+ * 待重试归档队列(MIND2-C3)
65
+ *
66
+ * 归档失败时入队,下次同阶段归档调用时先重试。
67
+ * 仅 profile/insight 阶段入队(content 从 session store 读取,可手动重试)。
68
+ */
69
+ pendingArchives = [];
48
70
  constructor(opts) {
49
71
  this.getUserProfile = opts.getUserProfile;
50
72
  this.getInsightExtractor = opts.getInsightExtractor;
51
73
  this.getSessionArchiver = opts.getSessionArchiver;
74
+ this.getArchiveMode = opts.getArchiveMode;
52
75
  this.emit = opts.emit;
53
76
  }
54
77
  /**
55
- * 手动触发 profile facts 归档(manual 模式下使用)
78
+ * 归档用户画像事实
56
79
  *
57
- * manual 模式下 postProcess 跳过自动归档,用户需通过此 API 主动归档。
58
- * full / insights-only 模式下也可调用(会重复归档,但不推荐)。
80
+ * 模式判断(FIX-P1-4,集中到本类):
81
+ * - 自动触发 + manual 模式 → 跳过(返回空),用户需手动调用
82
+ * - 自动触发 + full/insights-only 模式 → 执行
83
+ * - 手动触发(任何模式) → 执行(用户意图优先)
59
84
  *
60
85
  * @param input 本轮用户输入
86
+ * @param options 触发选项(autoTriggered 默认 false)
61
87
  * @returns 写入/更新的 UserProfileEntry 列表
62
88
  */
63
- async archiveProfileFacts(input) {
89
+ async archiveProfileFacts(input, options) {
90
+ // FIX-P1-4:自动触发 + manual 模式 → 跳过(原 Agent.postProcessInner 的 skipAutoArchive 逻辑)
91
+ if (options?.autoTriggered && this.getArchiveMode() === 'manual') {
92
+ logger.debug({ mode: 'manual', stage: 'profile' }, 'manual 模式跳过自动 profile 归档');
93
+ return [];
94
+ }
64
95
  const userProfile = this.getUserProfile();
65
96
  if (!userProfile)
66
97
  return [];
67
- const turnIndex = `turn-${Date.now()}`;
68
- const facts = extractUserFacts(input, turnIndex);
69
- const entries = await userProfile.archiveFacts(facts);
70
- // 发射 memoryAdded 事件:与自动归档路径一致,保持宿主 UI 行为统一
71
- for (const entry of entries) {
72
- if (entry.confirmed) {
73
- this.emit('memoryAdded', { id: entry.id, source: 'profile', name: entry.value });
98
+ // MIND2-C3:先重试 pending 队列中同阶段的失败归档(LLM 恢复后自动补录)
99
+ await this.retryPendingArchives('profile');
100
+ try {
101
+ const turnIndex = `turn-${Date.now()}`;
102
+ const facts = extractUserFacts(input, turnIndex);
103
+ const entries = await userProfile.archiveFacts(facts);
104
+ // 发射 memoryAdded 事件:与自动归档路径一致,保持宿主 UI 行为统一
105
+ for (const entry of entries) {
106
+ if (entry.confirmed) {
107
+ this.emit('memoryAdded', { id: entry.id, source: 'profile', name: entry.value });
108
+ }
74
109
  }
110
+ return entries;
111
+ }
112
+ catch (err) {
113
+ this.handleArchiveError('profile', err);
114
+ // MIND2-C3:失败入队,下次同阶段归档时自动重试(不再永久丢失)
115
+ this.enqueuePending('profile', input);
116
+ return [];
75
117
  }
76
- return entries;
77
118
  }
78
119
  /**
79
- * 手动触发 insight 提取(manual 模式下使用)
120
+ * 提取并归档洞察记忆
121
+ *
122
+ * 模式判断(FIX-P1-4,集中到本类):
123
+ * - 自动触发 + manual 模式 → 跳过(返回空),用户需手动调用
124
+ * - 自动触发 + full/insights-only 模式 → 执行
125
+ * - 手动触发(任何模式) → 执行(用户意图优先)
80
126
  *
81
- * manual 模式下 postProcess 跳过自动归档,用户需通过此 API 主动归档。
82
127
  * 内部仍走 classify 判断(避免无价值输入浪费 LLM 调用)。
83
128
  *
84
129
  * @param input 本轮用户输入
85
130
  * @param assistantContent 本轮助手回复内容
131
+ * @param options 触发选项(autoTriggered 默认 false)
86
132
  * @returns 写入/更新的 Memory 列表
87
133
  */
88
- async archiveInsight(input, assistantContent) {
134
+ async archiveInsight(input, assistantContent, options) {
135
+ // FIX-P1-4:自动触发 + manual 模式 → 跳过(原 Agent.postProcessInner 的 skipAutoArchive 逻辑)
136
+ if (options?.autoTriggered && this.getArchiveMode() === 'manual') {
137
+ logger.debug({ mode: 'manual', stage: 'insight' }, 'manual 模式跳过自动 insight 归档');
138
+ return [];
139
+ }
89
140
  const insightExtractor = this.getInsightExtractor();
90
141
  if (!insightExtractor)
91
142
  return [];
92
- // 内部仍走 classify 判断,避免无价值输入浪费 LLM 调用
93
- const shouldExtract = insightExtractor.classify(input);
94
- if (shouldExtract !== 'extract')
143
+ // MIND2-C3:先重试 pending 队列中同阶段的失败归档(LLM 恢复后自动补录)
144
+ await this.retryPendingArchives('insight');
145
+ try {
146
+ // 内部仍走 classify 判断,避免无价值输入浪费 LLM 调用
147
+ const shouldExtract = insightExtractor.classify(input);
148
+ if (shouldExtract !== 'extract')
149
+ return [];
150
+ const memories = await insightExtractor.extract(input, assistantContent);
151
+ // 发射 memoryAdded + insightExtracted 事件:与自动归档路径一致
152
+ for (const memory of memories) {
153
+ this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
154
+ this.emit('insightExtracted', { source: memory.source, insight: memory.content });
155
+ }
156
+ return memories;
157
+ }
158
+ catch (err) {
159
+ this.handleArchiveError('insight', err);
160
+ // MIND2-C3:失败入队(含 assistantContent),下次同阶段归档时自动重试
161
+ this.enqueuePending('insight', input, assistantContent);
95
162
  return [];
96
- const memories = await insightExtractor.extract(input, assistantContent);
97
- // 发射 memoryAdded + insightExtracted 事件:与自动归档路径一致
98
- for (const memory of memories) {
99
- this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
100
- this.emit('insightExtracted', { source: memory.source, insight: memory.content });
101
163
  }
102
- return memories;
103
164
  }
104
165
  /**
105
- * 手动归档会话内容(content 类记忆)
166
+ * 归档会话内容(content 类记忆)
167
+ *
168
+ * 模式判断(FIX-P1-4,集中到本类):
169
+ * - 自动触发 + full 模式 → 执行(会话切换前自动归档)
170
+ * - 自动触发 + insights-only/manual 模式 → 跳过,用户需手动调用
171
+ * - 手动触发(任何模式) → 执行(用户意图优先,如"一键归档"按钮)
106
172
  *
107
- * 适用于 `insights-only` / `manual` 模式下用户手动触发会话内容归档。
108
- * `full` 模式下由宿主在会话切换前自动调用,无需用户干预。
173
+ * 错误传播契约:
174
+ * - SessionArchiver LLM 异常 / 写入失败向上抛出(不内部吞掉)。
175
+ * - 本方法 catch 异常并发射 archiveFailed({ stage: 'content' }) 事件,
176
+ * 让宿主 UI 可感知会话内容归档失败。
177
+ * - archiveProfileFacts / archiveInsight 同样 catch 并发射 archiveFailed
178
+ * 事件(stage 分别为 'profile' / 'insight'),三阶段统一闭环。
179
+ * - 失败时返回空降级结果,保证调用方(如 SESSION_SWITCH 自动归档)不中断主流程。
109
180
  *
110
181
  * @param date 会话日期 YYYY-MM-DD
111
182
  * @param session 会话标识(不含日期前缀)
183
+ * @param options 触发选项(autoTriggered 默认 false)
112
184
  * @returns 归档结果(memories 可能为空,表示无归档价值或 LLM 失败)
113
185
  */
114
- async archiveSessionContent(date, session) {
186
+ async archiveSessionContent(date, session, options) {
187
+ // FIX-P1-4:自动触发 + 非 full 模式 → 跳过(原 sessionHandlers.ts 的外部判断逻辑)
188
+ if (options?.autoTriggered && this.getArchiveMode() !== 'full') {
189
+ logger.debug({ mode: this.getArchiveMode(), stage: 'content' }, '非 full 模式跳过自动 content 归档');
190
+ return { memories: [], sessionLabel: `${date}-${session}`, messageCount: 0 };
191
+ }
115
192
  const sessionArchiver = this.getSessionArchiver();
116
193
  if (!sessionArchiver) {
117
194
  return { memories: [], sessionLabel: `${date}-${session}`, messageCount: 0 };
118
195
  }
119
- const result = await sessionArchiver.archiveSessionContent(date, session);
120
- // 发射 memoryAdded 事件:与 insight 自动归档路径一致,宿主可据此刷新记忆面板
121
- for (const memory of result.memories) {
122
- this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
196
+ try {
197
+ const result = await sessionArchiver.archiveSessionContent(date, session);
198
+ // 发射 memoryAdded 事件:与 insight 自动归档路径一致,宿主可据此刷新记忆面板
199
+ for (const memory of result.memories) {
200
+ this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
201
+ }
202
+ return result;
203
+ }
204
+ catch (err) {
205
+ this.handleArchiveError('content', err);
206
+ return { memories: [], sessionLabel: `${date}-${session}`, messageCount: 0 };
207
+ }
208
+ }
209
+ /**
210
+ * 统一处理归档异常:记录日志 + 发射 archiveFailed 事件
211
+ *
212
+ * 三段归档方法(profile/insight/content)的 catch 模板完全相同,
213
+ * 提取为私有方法消除重复(ADR-017 枝叶层 2 次提取原则,3 次阈值已满足)。
214
+ *
215
+ * @param stage 归档阶段标识(用于日志结构化字段 + archiveFailed 事件 payload)
216
+ * @param err 捕获的异常
217
+ */
218
+ handleArchiveError(stage, err) {
219
+ // 记录根因到日志(UI 通知走 archiveFailed 事件,日志走 logger.error,两者不替代)
220
+ // 首字母大写拼接方法名(profile → Profile)保持日志可读性
221
+ const label = stage.charAt(0).toUpperCase() + stage.slice(1);
222
+ logger.error({ err, stage }, `archive${label} 异常`);
223
+ const message = err instanceof Error ? err.message : String(err);
224
+ this.emit('archiveFailed', { stage, message: message.slice(0, 200) });
225
+ }
226
+ // ─── MIND2-C3:pending 队列管理 ──────────────────────────
227
+ /**
228
+ * 将失败的归档输入入队(MIND2-C3)
229
+ *
230
+ * 仅 profile/insight 阶段入队——content 从 session store 读取可手动重试。
231
+ * 队列满时丢弃最旧项(FIFO 淘汰),避免 LLM 长时间不可用时无限增长。
232
+ *
233
+ * @param stage 归档阶段(profile / insight)
234
+ * @param input 本轮用户输入
235
+ * @param assistantContent 助手回复(仅 insight 阶段)
236
+ */
237
+ enqueuePending(stage, input, assistantContent) {
238
+ if (this.pendingArchives.length >= ArchiveCoordinator.MAX_PENDING) {
239
+ // 队列满,丢弃最旧项(shift 弹出队首)
240
+ const dropped = this.pendingArchives.shift();
241
+ logger.warn({ droppedStage: dropped?.stage, queueSize: this.pendingArchives.length }, 'pending 归档队列已满,丢弃最旧项');
242
+ }
243
+ this.pendingArchives.push({
244
+ stage,
245
+ input,
246
+ assistantContent,
247
+ enqueuedAt: Date.now(),
248
+ });
249
+ logger.info({ stage, queueSize: this.pendingArchives.length }, '归档失败已入 pending 队列,下次同阶段归档时自动重试');
250
+ }
251
+ /**
252
+ * 重试 pending 队列中指定阶段的所有失败归档(MIND2-C3)
253
+ *
254
+ * 在 archiveProfileFacts / archiveInsight 入口调用,先清空同阶段 pending 项:
255
+ * - 成功 → 从队列移除(补录完成)
256
+ * - 失败 → 保留在队列(等下次再试,不无限重试——每次调用只重试一轮)
257
+ *
258
+ * 重试失败不发射 archiveFailed 事件(避免重复 toast 节流),仅 debug 日志。
259
+ * 重试成功正常发射 memoryAdded / insightExtracted 事件(与首次成功一致)。
260
+ *
261
+ * @param stage 要重试的阶段(profile / insight)
262
+ */
263
+ async retryPendingArchives(stage) {
264
+ // 筛选同阶段的 pending 项(保留其他阶段的不动)
265
+ const pending = this.pendingArchives.filter((p) => p.stage === stage);
266
+ if (pending.length === 0)
267
+ return;
268
+ logger.debug({ stage, count: pending.length }, '开始重试 pending 归档');
269
+ for (const item of pending) {
270
+ try {
271
+ if (stage === 'profile') {
272
+ const userProfile = this.getUserProfile();
273
+ if (!userProfile)
274
+ continue; // UserProfile 仍不可用,保留在队列
275
+ const turnIndex = `turn-${item.enqueuedAt}`;
276
+ const facts = extractUserFacts(item.input, turnIndex);
277
+ const entries = await userProfile.archiveFacts(facts);
278
+ for (const entry of entries) {
279
+ if (entry.confirmed) {
280
+ this.emit('memoryAdded', { id: entry.id, source: 'profile', name: entry.value });
281
+ }
282
+ }
283
+ }
284
+ else {
285
+ // stage === 'insight'
286
+ const insightExtractor = this.getInsightExtractor();
287
+ if (!insightExtractor)
288
+ continue;
289
+ const shouldExtract = insightExtractor.classify(item.input);
290
+ if (shouldExtract !== 'extract')
291
+ continue;
292
+ const memories = await insightExtractor.extract(item.input, item.assistantContent ?? '');
293
+ for (const memory of memories) {
294
+ this.emit('memoryAdded', { id: memory.id, source: memory.source, name: memory.name });
295
+ this.emit('insightExtracted', { source: memory.source, insight: memory.content });
296
+ }
297
+ }
298
+ // 重试成功 → 从队列移除
299
+ const idx = this.pendingArchives.indexOf(item);
300
+ if (idx !== -1)
301
+ this.pendingArchives.splice(idx, 1);
302
+ logger.info({ stage }, 'pending 归档重试成功,已从队列移除');
303
+ }
304
+ catch (err) {
305
+ // 重试失败 → 保留在队列,下次再试(仅 debug 日志,不重复发射 archiveFailed)
306
+ logger.debug({ err, stage }, 'pending 归档重试仍失败,保留在队列');
307
+ }
123
308
  }
124
- return result;
309
+ }
310
+ /**
311
+ * 获取 pending 归档队列长度(MIND2-C3)
312
+ *
313
+ * 供宿主 UI 查询是否有待补归档,展示"N 条待补"提示。
314
+ * Agent 不直接消费此值——通过 IPC 暴露给渲染层。
315
+ *
316
+ * @returns pending 队列中的待重试归档数
317
+ */
318
+ getPendingArchiveCount() {
319
+ return this.pendingArchives.length;
125
320
  }
126
321
  }
127
322
  //# sourceMappingURL=archiveCoordinator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"archiveCoordinator.js","sourceRoot":"","sources":["../../../src/agent/managers/archiveCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAqBhE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,kBAAkB;IAC7B,yBAAyB;IACR,cAAc,CAA2B;IAC1D,8BAA8B;IACb,mBAAmB,CAAgC;IACpE,6BAA6B;IACZ,kBAAkB,CAA+B;IAClE,aAAa;IACI,IAAI,CAAe;IAEpC,YAAY,IAA+B;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,mBAAmB,CAAC,KAAa;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtD,2CAA2C;QAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,gBAAwB;QAC1D,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,IAAI,CAAC,gBAAgB;YAAE,OAAO,EAAE,CAAC;QACjC,oCAAoC;QACpC,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,aAAa,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACzE,iDAAiD;QACjD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAY,EAAE,OAAe;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC/E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1E,mDAAmD;QACnD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"archiveCoordinator.js","sourceRoot":"","sources":["../../../src/agent/managers/archiveCoordinator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"autoConfigRefiner.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/autoConfigRefiner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAI1E,2BAA2B;AAC3B,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAiBD,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAJrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,kBAAkB,CAA4B;gBAGnC,kBAAkB,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,EAC3E,OAAO,CAAC,EAAE,wBAAwB;IAKpC,sDAAsD;IACtD,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAIzD;;;;OAIG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CzE,oBAAoB;YACN,cAAc;IAqD5B,4BAA4B;IAC5B,OAAO,CAAC,qBAAqB;CAiD9B"}
1
+ {"version":3,"file":"autoConfigRefiner.d.ts","sourceRoot":"","sources":["../../../src/agent/managers/autoConfigRefiner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAK1E,2BAA2B;AAC3B,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAiBD,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAJrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,kBAAkB,CAA4B;gBAGnC,kBAAkB,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,EAC3E,OAAO,CAAC,EAAE,wBAAwB;IAKpC,sDAAsD;IACtD,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAIzD;;;;OAIG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CzE,oBAAoB;YACN,cAAc;IAgD5B,4BAA4B;IAC5B,OAAO,CAAC,qBAAqB;CAiD9B"}