@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
@@ -0,0 +1,141 @@
1
+ /**
2
+ * EvalRunner — Agent 行为评估执行器
3
+ *
4
+ * 职责:通过 createAgent 工厂构造测试条件 → 执行场景 →
5
+ * 收集 AgentChunk → 评估结果 → 汇总报告
6
+ *
7
+ * 设计要点:
8
+ * - 每个场景创建独立 Agent(通过工厂函数),避免状态污染
9
+ * - 场景执行后 close(),避免资源泄漏
10
+ * - 错误隔离:单个场景失败不中断其他场景
11
+ * - 超时保护:scenarioTimeoutMs 防止卡死(Promise.race + AbortController)
12
+ *
13
+ * 内核零依赖约束:仅使用 memora 内部模块,不引入新依赖。
14
+ */
15
+ import { collectAgentChunks, evaluateResult } from './evalTypes.js';
16
+ /** 默认场景超时_ms */
17
+ const DEFAULT_SCENARIO_TIMEOUT_MS = 10_000;
18
+ /**
19
+ * Agent 行为评估执行器
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const runner = new EvalRunner({
24
+ * createAgent: () => new Agent({ projectPath, provider, configDir, dataDir, ... }),
25
+ * scenarioTimeoutMs: 15000,
26
+ * });
27
+ * const summary = await runner.runScenarios(EVAL_SCENARIOS);
28
+ * console.log(`通过 ${summary.passed}/${summary.total},耗时 ${summary.durationMs}ms`);
29
+ * ```
30
+ */
31
+ export class EvalRunner {
32
+ /** Agent 工厂函数 */
33
+ #createAgent;
34
+ /** 单场景超时_ms */
35
+ #scenarioTimeoutMs;
36
+ constructor(opts) {
37
+ this.#createAgent = opts.createAgent;
38
+ this.#scenarioTimeoutMs = opts.scenarioTimeoutMs ?? DEFAULT_SCENARIO_TIMEOUT_MS;
39
+ }
40
+ /**
41
+ * 执行单个评估场景
42
+ *
43
+ * 流程:创建 Agent → init() → chat(input) → collectAgentChunks → evaluateResult
44
+ *
45
+ * 错误隔离:任何异常(超时、Agent 抛错)都返回 passed=false 的 EvalResult,
46
+ * 不向上抛出,确保 runScenarios 批量执行时单个失败不中断其他场景。
47
+ *
48
+ * Agent 生命周期:每个场景执行后 close(),避免资源泄漏(try/finally 保证)。
49
+ *
50
+ * @param scenario 评估场景定义
51
+ * @returns 评估结果(始终返回,不抛异常)
52
+ */
53
+ async runScenario(scenario) {
54
+ const agent = this.#createAgent();
55
+ try {
56
+ await agent.init();
57
+ const collected = await this.#runWithTimeout(agent, scenario.input);
58
+ return evaluateResult(scenario.name, collected, scenario.expect);
59
+ }
60
+ catch (err) {
61
+ // 错误隔离:返回 passed=false 的 EvalResult,不向上抛出
62
+ return {
63
+ name: scenario.name,
64
+ passed: false,
65
+ collected: {
66
+ toolsCalled: [],
67
+ recallCount: 0,
68
+ guardrailBlocked: false,
69
+ done: false,
70
+ },
71
+ failures: [
72
+ `场景执行异常:${err instanceof Error ? err.message : String(err)}`,
73
+ ],
74
+ };
75
+ }
76
+ finally {
77
+ await agent.close();
78
+ }
79
+ }
80
+ /**
81
+ * 批量执行评估场景并汇总报告
82
+ *
83
+ * 顺序执行(非并行),每个场景创建独立 Agent,避免状态污染。
84
+ * 错误隔离:单个场景失败不中断其他场景(由 runScenario 保证)。
85
+ *
86
+ * @param scenarios 场景列表
87
+ * @returns 汇总报告
88
+ */
89
+ async runScenarios(scenarios) {
90
+ const start = Date.now();
91
+ const results = [];
92
+ for (const scenario of scenarios) {
93
+ const result = await this.runScenario(scenario);
94
+ results.push(result);
95
+ }
96
+ const passed = results.filter((r) => r.passed).length;
97
+ const failed = results.length - passed;
98
+ return {
99
+ results,
100
+ passed,
101
+ failed,
102
+ total: results.length,
103
+ durationMs: Date.now() - start,
104
+ failedScenarios: results.filter((r) => !r.passed).map((r) => r.name),
105
+ };
106
+ }
107
+ /**
108
+ * 带超时执行单个场景的 chat
109
+ *
110
+ * 使用 Promise.race 实现超时:
111
+ * - 正常完成 → 返回 collected 行为数据
112
+ * - 超时 → reject Error(被 runScenario 的 catch 捕获)
113
+ *
114
+ * 超时后通过 AbortController.abort() 中断 agent.chat,
115
+ * 避免后台 generator 无限挂起。agent.close() 在 runScenario 的 finally 中调用,
116
+ * 确保即使超时后资源也被正确清理。
117
+ */
118
+ async #runWithTimeout(agent, input) {
119
+ const controller = new AbortController();
120
+ let timer;
121
+ const timeoutPromise = new Promise((_, reject) => {
122
+ timer = setTimeout(() => {
123
+ controller.abort();
124
+ reject(new Error(`场景超时(${this.#scenarioTimeoutMs}ms)`));
125
+ }, this.#scenarioTimeoutMs);
126
+ });
127
+ const runPromise = collectAgentChunks(agent.chat(input, controller.signal));
128
+ // 抑制超时后 runPromise 可能产生的 unhandled rejection
129
+ // (超时后 agent.chat 被 abort,collectAgentChunks 可能在后台 resolve/reject,
130
+ // 但 Promise.race 已通过 timeoutPromise 返回,runPromise 的结果被丢弃)
131
+ void runPromise.catch(() => { });
132
+ try {
133
+ return await Promise.race([runPromise, timeoutPromise]);
134
+ }
135
+ finally {
136
+ if (timer)
137
+ clearTimeout(timer);
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=evalRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalRunner.js","sourceRoot":"","sources":["../../src/eval/evalRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyCpE,gBAAgB;AAChB,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,UAAU;IACrB,iBAAiB;IACR,YAAY,CAAc;IACnC,eAAe;IACN,kBAAkB,CAAS;IAEpC,YAAY,IAAuB;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,IAAI,2BAA2B,CAAC;IAClF,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,WAAW,CAAC,QAAsB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpE,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,0CAA0C;YAC1C,OAAO;gBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE;oBACT,WAAW,EAAE,EAAE;oBACf,WAAW,EAAE,CAAC;oBACd,gBAAgB,EAAE,KAAK;oBACvB,IAAI,EAAE,KAAK;iBACZ;gBACD,QAAQ,EAAE;oBACR,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBAC7D;aACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,SAAkC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAEvC,OAAO;YACL,OAAO;YACP,MAAM;YACN,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC9B,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACrE,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,eAAe,CACnB,KAAY,EACZ,KAAa;QAEb,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,KAAgD,CAAC;QAErD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC;YAC1D,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,kBAAkB,CACnC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CACrC,CAAC;QACF,6CAA6C;QAC7C,mEAAmE;QACnE,4DAA4D;QAC5D,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEhC,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;CACF"}
@@ -68,6 +68,17 @@ export interface EvalExpectation {
68
68
  * 若需验证 source 分布,请在宿主层自行实现。
69
69
  */
70
70
  recallSources?: Record<string, number>;
71
+ /**
72
+ * 期望的召回记忆数量范围
73
+ *
74
+ * 验证召回管线是否返回了预期数量的记忆。
75
+ * 例如:{ min: 1 } 表示应至少召回 1 条记忆;
76
+ * { max: 0 } 表示不应召回任何记忆(空召回降级场景)。
77
+ */
78
+ recallCount?: {
79
+ min?: number;
80
+ max?: number;
81
+ };
71
82
  /**
72
83
  * 工具调用次数范围
73
84
  */
@@ -86,6 +97,16 @@ export interface EvalExpectation {
86
97
  * AgentChunk.guardrailBlocked 收集,而非中文文案匹配。
87
98
  */
88
99
  guardrailBlocked?: boolean;
100
+ /**
101
+ * 期望对话是否正常完成
102
+ *
103
+ * true 表示期望对话正常完成(收到 done chunk);
104
+ * false 表示期望对话未正常完成(如被中断、出错);
105
+ * undefined 表示不检查(默认)。
106
+ *
107
+ * 与 collected.done 比对。
108
+ */
109
+ done?: boolean;
89
110
  }
90
111
  /**
91
112
  * 评估结果
@@ -1 +1 @@
1
- {"version":3,"file":"evalTypes.d.ts","sourceRoot":"","sources":["../../src/eval/evalTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH;;;;OAIG;IACH,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC;;OAEG;IACH,aAAa,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/C;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,sBAAsB;IACtB,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,kBAAkB;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,GAChD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAiClC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,EAClC,MAAM,EAAE,eAAe,GACtB,UAAU,CA+CZ"}
1
+ {"version":3,"file":"evalTypes.d.ts","sourceRoot":"","sources":["../../src/eval/evalTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH;;;;OAIG;IACH,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7C;;OAEG;IACH,aAAa,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/C;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,sBAAsB;IACtB,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,kBAAkB;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,GAChD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAiClC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,EAClC,MAAM,EAAE,eAAe,GACtB,UAAU,CAgEZ"}
@@ -87,12 +87,27 @@ export function evaluateResult(name, collected, expect) {
87
87
  failures.push(`工具调用次数 ${count} > 期望最大值 ${expect.toolCallCount.max}`);
88
88
  }
89
89
  }
90
+ // 检查召回数量
91
+ if (expect.recallCount) {
92
+ if (expect.recallCount.min !== undefined && collected.recallCount < expect.recallCount.min) {
93
+ failures.push(`召回数量 ${collected.recallCount} < 期望最小值 ${expect.recallCount.min}`);
94
+ }
95
+ if (expect.recallCount.max !== undefined && collected.recallCount > expect.recallCount.max) {
96
+ failures.push(`召回数量 ${collected.recallCount} > 期望最大值 ${expect.recallCount.max}`);
97
+ }
98
+ }
90
99
  // 检查护栏阻断
91
100
  if (expect.guardrailBlocked !== undefined) {
92
101
  if (expect.guardrailBlocked !== collected.guardrailBlocked) {
93
102
  failures.push(`期望护栏阻断=${expect.guardrailBlocked},实际=${collected.guardrailBlocked}`);
94
103
  }
95
104
  }
105
+ // 检查完成状态
106
+ if (expect.done !== undefined) {
107
+ if (expect.done !== collected.done) {
108
+ failures.push(`期望完成状态=${expect.done},实际=${collected.done}`);
109
+ }
110
+ }
96
111
  return {
97
112
  name,
98
113
  passed: failures.length === 0,
@@ -1 +1 @@
1
- {"version":3,"file":"evalTypes.js","sourceRoot":"","sources":["../../src/eval/evalTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evalTypes.js","sourceRoot":"","sources":["../../src/eval/evalTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Agent 行为评估场景库
3
+ *
4
+ * 定义标准 EvalScenario,用于 Agent 行为回归测试。
5
+ * 场景定义是"期望契约"——描述 Agent 在特定输入下应有的行为特征,
6
+ * 由 EvalRunner 负责构造条件(MockProvider 返回值 + guardrail 规则配置)执行验证。
7
+ *
8
+ * 设计原则:
9
+ * - 场景通用,不耦合任何领域逻辑
10
+ * - 每个场景聚焦一个验证维度,失败原因可定位
11
+ * - input 是真实用户输入风格,非人造测试桩
12
+ * - expect 至少定义一项检查
13
+ *
14
+ * 当前覆盖的 EvalExpectation 维度(8 个场景):
15
+ * - guardrailBlocked(场景 1, 5, 7)
16
+ * - toolsCalled + toolsNotCalled(场景 2, 5)
17
+ * - toolCallCount(场景 3)
18
+ * - recallCount(场景 4, 8)
19
+ * - done(场景 6, 7, 8)
20
+ * - recalledMemories 预设(场景 4)
21
+ *
22
+ * 未覆盖 recallSources:当前 evaluateResult 不检查该字段(见 evalTypes.ts 注释),
23
+ * 待宿主层按需扩展。
24
+ */
25
+ import type { EvalScenario } from './evalTypes.js';
26
+ /**
27
+ * 评估场景集(8 个场景)
28
+ *
29
+ * 覆盖护栏阻断 / 工具调用决策 / 调用次数范围 / 召回数量 / 完成状态 / 长输入处理六个维度。
30
+ * EvalRunner 实现后可在 CI 中运行这些场景作为回归基线。
31
+ */
32
+ export declare const EVAL_SCENARIOS: readonly EvalScenario[];
33
+ //# sourceMappingURL=scenarios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../src/eval/scenarios.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EA8EjD,CAAC"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Agent 行为评估场景库
3
+ *
4
+ * 定义标准 EvalScenario,用于 Agent 行为回归测试。
5
+ * 场景定义是"期望契约"——描述 Agent 在特定输入下应有的行为特征,
6
+ * 由 EvalRunner 负责构造条件(MockProvider 返回值 + guardrail 规则配置)执行验证。
7
+ *
8
+ * 设计原则:
9
+ * - 场景通用,不耦合任何领域逻辑
10
+ * - 每个场景聚焦一个验证维度,失败原因可定位
11
+ * - input 是真实用户输入风格,非人造测试桩
12
+ * - expect 至少定义一项检查
13
+ *
14
+ * 当前覆盖的 EvalExpectation 维度(8 个场景):
15
+ * - guardrailBlocked(场景 1, 5, 7)
16
+ * - toolsCalled + toolsNotCalled(场景 2, 5)
17
+ * - toolCallCount(场景 3)
18
+ * - recallCount(场景 4, 8)
19
+ * - done(场景 6, 7, 8)
20
+ * - recalledMemories 预设(场景 4)
21
+ *
22
+ * 未覆盖 recallSources:当前 evaluateResult 不检查该字段(见 evalTypes.ts 注释),
23
+ * 待宿主层按需扩展。
24
+ */
25
+ /**
26
+ * 评估场景集(8 个场景)
27
+ *
28
+ * 覆盖护栏阻断 / 工具调用决策 / 调用次数范围 / 召回数量 / 完成状态 / 长输入处理六个维度。
29
+ * EvalRunner 实现后可在 CI 中运行这些场景作为回归基线。
30
+ */
31
+ export const EVAL_SCENARIOS = [
32
+ {
33
+ name: 'empty-input-guardrail',
34
+ description: '空输入应被输入护栏阻断(需配置匹配空白输入的 guardrail 规则)',
35
+ input: '',
36
+ expect: {
37
+ guardrailBlocked: true,
38
+ },
39
+ },
40
+ {
41
+ name: 'read-file-tool-call',
42
+ description: '用户请求读取文件时,Agent 应调用 read_file 且不调用 write_file',
43
+ input: '请读取 README.md 文件',
44
+ expect: {
45
+ toolsCalled: ['read_file'],
46
+ toolsNotCalled: ['write_file'],
47
+ },
48
+ },
49
+ {
50
+ name: 'multi-tool-call-count',
51
+ description: '复合请求应触发多个工具调用(读取文件 + 搜索记忆)',
52
+ input: '读取项目配置并搜索相关记忆',
53
+ expect: {
54
+ toolCallCount: { min: 2 },
55
+ },
56
+ },
57
+ {
58
+ name: 'recall-memory-present',
59
+ description: '用户提问时应有记忆召回(需预写入匹配记忆到存储)',
60
+ input: '根据之前的记忆,帮我回忆上次讨论的架构设计内容',
61
+ recalledMemories: [
62
+ {
63
+ name: '架构设计讨论',
64
+ content: '上次讨论了分层架构和模块解耦方案',
65
+ source: 'insight',
66
+ },
67
+ ],
68
+ expect: {
69
+ recallCount: { min: 1 },
70
+ },
71
+ },
72
+ {
73
+ name: 'readonly-query-guardrail',
74
+ description: '只读查询场景不应调用 write_file(防止误写),且不被护栏阻断',
75
+ input: '查询当前项目的目录结构,列出所有文件',
76
+ expect: {
77
+ toolsNotCalled: ['write_file'],
78
+ guardrailBlocked: false,
79
+ },
80
+ },
81
+ {
82
+ name: 'normal-completion',
83
+ description: '正常对话应正常完成(收到 done 事件)',
84
+ input: '你好,请介绍一下自己',
85
+ expect: {
86
+ done: true,
87
+ },
88
+ },
89
+ {
90
+ name: 'long-input-handling',
91
+ description: '较长输入应被正常处理(不触发长度限制,不崩溃,正常完成)',
92
+ input: '请分析以下需求文档的可行性并给出技术方案建议:\n' +
93
+ '系统需要支持高并发、低延迟的实时数据处理,同时保证数据一致性。'.repeat(200),
94
+ expect: {
95
+ done: true,
96
+ guardrailBlocked: false,
97
+ },
98
+ },
99
+ {
100
+ name: 'empty-recall-degrade',
101
+ description: '无匹配记忆时不应崩溃,正常完成对话(空召回降级)',
102
+ input: 'asdfqwerty 无意义输入不匹配任何记忆',
103
+ expect: {
104
+ recallCount: { max: 0 },
105
+ done: true,
106
+ },
107
+ },
108
+ ];
109
+ //# sourceMappingURL=scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../src/eval/scenarios.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE;YACN,gBAAgB,EAAE,IAAI;SACvB;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE;YACN,WAAW,EAAE,CAAC,WAAW,CAAC;YAC1B,cAAc,EAAE,CAAC,YAAY,CAAC;SAC/B;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE;YACN,aAAa,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;SAC1B;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,0BAA0B;QACvC,KAAK,EAAE,yBAAyB;QAChC,gBAAgB,EAAE;YAChB;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kBAAkB;gBAC3B,MAAM,EAAE,SAAS;aAClB;SACF;QACD,MAAM,EAAE;YACN,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;SACxB;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAE,oBAAoB;QAC3B,MAAM,EAAE;YACN,cAAc,EAAE,CAAC,YAAY,CAAC;YAC9B,gBAAgB,EAAE,KAAK;SACxB;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,uBAAuB;QACpC,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;SACX;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EACH,2BAA2B;YAC3B,iCAAiC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/C,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,gBAAgB,EAAE,KAAK;SACxB;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,0BAA0B;QACvC,KAAK,EAAE,yBAAyB;QAChC,MAAM,EAAE;YACN,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YACvB,IAAI,EAAE,IAAI;SACX;KACF;CACF,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,16 +1,43 @@
1
1
  /**
2
2
  * Memora — 通用 Agent 架构(纯逻辑库)
3
3
  *
4
- * 零 native 依赖。宿主项目通过注入 IMemoryStorage 实现持久化。
4
+ * Node.js 专用纯逻辑库(零 native 编译依赖,详见 ADR-002 §定位澄清)。
5
+ * 宿主项目通过注入 IMemoryStorage 实现持久化。
5
6
  * CLI 由宿主项目提供(hosts/memora-sprite/)。
6
7
  *
7
8
  * 设计哲学:万物皆记忆(详见 architecture_philosophy_rules.md §1)
8
9
  * 决策追溯:详见 .trae/rules/decisions/ 下的 ADR
10
+ *
11
+ * ─── 类型依赖图 ────────────────────────────────────────────
12
+ *
13
+ * 各模块独立 types.ts,跨模块类型追踪可按以下依赖图定位:
14
+ *
15
+ * agent/types.ts ─┬─→ llm/provider.ts (LlmProvider, ChatOptions)
16
+ * ├─→ memory/vectorStore.ts (IVectorStore, EmbeddingService)
17
+ * ├─→ memory/storageInterface.ts (IMemoryStorage)
18
+ * ├─→ memory/relationStore.ts (IMemoryRelationStore)
19
+ * ├─→ memory/sessionStore.ts (ISessionStore, SessionMessage)
20
+ * ├─→ agent/tracer.ts (ITracer, ISpan, AgentMetrics)
21
+ * └─→ memory/projectManager.ts (AgentProjectEntry)
22
+ *
23
+ * memory/types.ts ──→ 纯类型定义(Memory, MemoryRelation, SOURCE_LABELS 等)
24
+ *
25
+ * llm/types.ts ─────→ 纯类型定义(LlmChunk)
26
+ *
27
+ * persona/types.ts ─→ 纯类型定义(Persona, PersonaMode)
28
+ *
29
+ * skill/types.ts ───→ 纯类型定义(SkillEntry, SkillMatch)
30
+ *
31
+ * eval/evalTypes.ts ─→ 纯类型定义(EvalScenario, EvalResult)
32
+ *
33
+ * security/pathGuard.ts ─→ AuditEvent 等安全类型(与 agent/types.ts 解耦)
34
+ *
35
+ * 依赖方向(单向):agent → memory → utils;agent → llm;agent → security
36
+ * 内核不反向依赖宿主,所有宿主交互通过接口注入(ADR-002 §三层架构)
9
37
  */
10
38
  export { Agent } from './agent/agent.js';
11
- export type { AgentChunk, ThinkingPhase, UIMessages, ArchiveMode, RecalledMemorySummary } from './agent/types.js';
39
+ export type { AgentChunk, ThinkingPhase, UIMessages, ArchiveMode, RecalledMemorySummary, AgentOptions, AgentContext, AgentProjectEntry } from './agent/types.js';
12
40
  export { AGENT_CONSTANTS, LOOP_CONSTANTS } from './agent/constants.js';
13
- export type { AgentOptions, AgentContext, AgentProjectEntry, } from './agent/agent.js';
14
41
  export { type AgentForkResult } from './agent/managers/sessionManager.js';
15
42
  export type { ToolDefinition, ToolHandler, ToolContext, WriteExtensions } from './agent/toolExecutor.js';
16
43
  export type { PersonaMode, Persona } from './persona/types.js';
@@ -18,11 +45,15 @@ export type { MemoryKeywords } from './agent/managers/insightExtractor.js';
18
45
  export { RelationBuilder } from './agent/managers/relationBuilder.js';
19
46
  export type { ConflictInfo } from './agent/managers/relationBuilder.js';
20
47
  export type { MemorySnapshot, WorkingMemorySnapshot, BootstrapSnapshot, ArchiveSnapshot, AgentSearchHit, AgentStats, SuggestOptions, SuggestHit, SourceHealthStatus, SourceHealthEntry, SourceHealthReport, } from './agent/managers/memoryInspector.js';
21
- export type { MemoryMutator } from './agent/managers/memoryMutator.js';
48
+ export type { DedupPair, DedupVerdict, DedupVerdictSummary, DedupReport, } from './agent/managers/dedupManager.js';
22
49
  export type { ConfigSuggestion, ConfigSuggestionHandler } from './agent/managers/configManager.js';
23
50
  export type { AutoConfigRefinerOptions } from './agent/managers/autoConfigRefiner.js';
24
51
  export type { SessionArchiveResult } from './agent/managers/sessionArchiver.js';
52
+ export type { TimelinessVerdict, TimelinessReport } from './agent/managers/memoryDecayScheduler.js';
53
+ export type { ConflictVerdict, ConflictReport } from './agent/managers/memoryAdvisor.js';
54
+ export { MemoryGovernance } from './agent/managers/memoryGovernance.js';
25
55
  export type { WorkProjectionEntry } from './agent/managers/workProjection.js';
56
+ export type { PolishResult } from './agent/managers/textPolishManager.js';
26
57
  export { loadConfig } from './config/loader.js';
27
58
  export { createLlmProvider, createProviderFromConfig } from './llm/factory.js';
28
59
  export type { ProviderConfig } from './llm/factory.js';
@@ -43,6 +74,7 @@ export { RELATION_TYPES, RELATION_WEIGHTS } from './memory/types.js';
43
74
  export type { MemoryRelation, RelationDirection, RelationPath, RelationNeighbor } from './memory/types.js';
44
75
  export type { IMemoryStorage } from './memory/storageInterface.js';
45
76
  export { InMemoryStorage } from './memory/inMemoryStorage.js';
77
+ export { BOOST_INCREMENT, SCORE_CEILING, DECAY_FLOOR, DECAY_AGE_DAYS, DECAY_AMOUNT } from './memory/governance.js';
46
78
  export type { IMemoryRelationStore } from './memory/relationStore.js';
47
79
  export { InMemoryRelationStore } from './memory/inMemoryRelationStore.js';
48
80
  export { ProjectRegistry } from './memory/projectRegistry.js';
@@ -52,14 +84,16 @@ export type { UserProfileEntry, ProfileCategory, ExtractedFact } from './memory/
52
84
  export { JsonVectorStore } from './memory/vectorStore.js';
53
85
  export type { IVectorStore, EmbeddingService } from './memory/vectorStore.js';
54
86
  export { EmbeddingProvider } from './llm/embedding.js';
55
- export type { EmbeddingConfig, EmbeddingResult, EmbeddingOptions } from './llm/embedding.js';
87
+ export type { EmbeddingConfig, EmbeddingResult } from './llm/embedding.js';
88
+ export type { EmbeddingOptions } from './llm/embedding.js';
56
89
  export type { ISessionStore, SessionMessage } from './memory/sessionStore.js';
57
90
  export type { ForkResult } from './agent/messageHistory.js';
58
91
  export { recall, extractKeywords } from './memory/recall.js';
59
92
  export type { RecallOptions } from './memory/recall.js';
60
93
  export type { ILogger } from './logging/loggerInterface.js';
61
94
  export { setLogger, logger } from './logging/logger.js';
62
- export { segmentText } from './utils/segmenter.js';
95
+ export { segmentText, segmentLower } from './utils/segmenter.js';
96
+ export { isPlainObject } from './utils/objects.js';
63
97
  export { parseFrontmatter, serializeFrontmatter } from './utils/frontmatter.js';
64
98
  export { safeSetTimeout, safeSetInterval, clearSafeTimeout, clearSafeInterval } from './utils/safeTimer.js';
65
99
  export type { SkillEntry, SkillMatch } from './skill/types.js';
@@ -67,6 +101,11 @@ export type { AuditEvent, AuditListener, Permission, WriteDecision, WriteConfirm
67
101
  export { MemoraError, ToolErrorCode, isRetryableErrorCode } from './utils/errors.js';
68
102
  export { toError } from './utils/toError.js';
69
103
  export type { ToolErrorCodeValue } from './utils/errors.js';
104
+ export { truncate } from './utils/strings.js';
105
+ export { formatDateKey, todayDate } from './utils/time.js';
70
106
  export type { EvalScenario, EvalExpectation, EvalResult } from './eval/evalTypes.js';
71
107
  export { collectAgentChunks, evaluateResult } from './eval/evalTypes.js';
108
+ export { EVAL_SCENARIOS } from './eval/scenarios.js';
109
+ export { EvalRunner } from './eval/evalRunner.js';
110
+ export type { EvalRunnerOptions, EvalSummary } from './eval/evalRunner.js';
72
111
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,17 +1,47 @@
1
1
  /**
2
2
  * Memora — 通用 Agent 架构(纯逻辑库)
3
3
  *
4
- * 零 native 依赖。宿主项目通过注入 IMemoryStorage 实现持久化。
4
+ * Node.js 专用纯逻辑库(零 native 编译依赖,详见 ADR-002 §定位澄清)。
5
+ * 宿主项目通过注入 IMemoryStorage 实现持久化。
5
6
  * CLI 由宿主项目提供(hosts/memora-sprite/)。
6
7
  *
7
8
  * 设计哲学:万物皆记忆(详见 architecture_philosophy_rules.md §1)
8
9
  * 决策追溯:详见 .trae/rules/decisions/ 下的 ADR
10
+ *
11
+ * ─── 类型依赖图 ────────────────────────────────────────────
12
+ *
13
+ * 各模块独立 types.ts,跨模块类型追踪可按以下依赖图定位:
14
+ *
15
+ * agent/types.ts ─┬─→ llm/provider.ts (LlmProvider, ChatOptions)
16
+ * ├─→ memory/vectorStore.ts (IVectorStore, EmbeddingService)
17
+ * ├─→ memory/storageInterface.ts (IMemoryStorage)
18
+ * ├─→ memory/relationStore.ts (IMemoryRelationStore)
19
+ * ├─→ memory/sessionStore.ts (ISessionStore, SessionMessage)
20
+ * ├─→ agent/tracer.ts (ITracer, ISpan, AgentMetrics)
21
+ * └─→ memory/projectManager.ts (AgentProjectEntry)
22
+ *
23
+ * memory/types.ts ──→ 纯类型定义(Memory, MemoryRelation, SOURCE_LABELS 等)
24
+ *
25
+ * llm/types.ts ─────→ 纯类型定义(LlmChunk)
26
+ *
27
+ * persona/types.ts ─→ 纯类型定义(Persona, PersonaMode)
28
+ *
29
+ * skill/types.ts ───→ 纯类型定义(SkillEntry, SkillMatch)
30
+ *
31
+ * eval/evalTypes.ts ─→ 纯类型定义(EvalScenario, EvalResult)
32
+ *
33
+ * security/pathGuard.ts ─→ AuditEvent 等安全类型(与 agent/types.ts 解耦)
34
+ *
35
+ * 依赖方向(单向):agent → memory → utils;agent → llm;agent → security
36
+ * 内核不反向依赖宿主,所有宿主交互通过接口注入(ADR-002 §三层架构)
9
37
  */
10
38
  // ─── 库导出:供宿主项目 import 接入 ──────────────────────
11
39
  export { Agent } from './agent/agent.js';
12
40
  export { AGENT_CONSTANTS, LOOP_CONSTANTS } from './agent/constants.js';
13
- // P1-3 拆分:RelationBuilder 从 InsightExtractor 提取,封装 ADR-014 关系构建逻辑
41
+ // RelationBuilder 从 InsightExtractor 提取,封装 ADR-014 关系构建逻辑
14
42
  export { RelationBuilder } from './agent/managers/relationBuilder.js';
43
+ // 记忆治理统一门面
44
+ export { MemoryGovernance } from './agent/managers/memoryGovernance.js';
15
45
  export { loadConfig } from './config/loader.js';
16
46
  export { createLlmProvider, createProviderFromConfig } from './llm/factory.js';
17
47
  export { OpenAICompatibleProvider } from './llm/openaiCompatible.js';
@@ -25,8 +55,11 @@ export { inferSource, escapeLike, validateSource } from './memory/sourceValidati
25
55
  // 记忆关系图谱(ADR-014 侧车模型)
26
56
  export { RELATION_TYPES, RELATION_WEIGHTS } from './memory/types.js';
27
57
  export { InMemoryStorage } from './memory/inMemoryStorage.js';
58
+ // 治理共享常量(MIND2-L3:宿主 SqliteStorage incrementScore/setScore 实现需要 clamp 边界)
59
+ // 衰减常量同步导出:宿主 SqliteStorage.decayScores 与核心库 recall.ts 共用同一真理源(v2 神木回天 REPEAT-3 闭环)
60
+ export { BOOST_INCREMENT, SCORE_CEILING, DECAY_FLOOR, DECAY_AGE_DAYS, DECAY_AMOUNT } from './memory/governance.js';
28
61
  export { InMemoryRelationStore } from './memory/inMemoryRelationStore.js';
29
- // 项目注册表 + 锁文件管理(P1-4 拆分,从 ProjectManager 提取)
62
+ // 项目注册表 + 锁文件管理(从 ProjectManager 提取)
30
63
  // 宿主可直接使用 ProjectRegistry/LockManager 管理多项目,或通过 ProjectManager 间接委托
31
64
  export { ProjectRegistry } from './memory/projectRegistry.js';
32
65
  export { LockManager } from './memory/lockManager.js';
@@ -40,8 +73,9 @@ export { recall, extractKeywords } from './memory/recall.js';
40
73
  export { setLogger, logger } from './logging/logger.js';
41
74
  // ─── 工具导出 ────────────────────────────────────────────
42
75
  // 分词工具:宿主项目(如 SqliteStorage)依赖
43
- // 工具导出
44
- export { segmentText } from './utils/segmenter.js';
76
+ export { segmentText, segmentLower } from './utils/segmenter.js';
77
+ // 对象类型守卫:宿主项目(如 spriteConfig)依赖,校验 JSON.parse 结果
78
+ export { isPlainObject } from './utils/objects.js';
45
79
  // Frontmatter 解析/序列化:宿主项目(如 skillInstaller)依赖
46
80
  export { parseFrontmatter, serializeFrontmatter } from './utils/frontmatter.js';
47
81
  // 安全定时器:宿主主进程统一使用 safeSetTimeout/safeSetInterval 跟踪清理
@@ -50,5 +84,11 @@ export { safeSetTimeout, safeSetInterval, clearSafeTimeout, clearSafeInterval }
50
84
  export { MemoraError, ToolErrorCode, isRetryableErrorCode } from './utils/errors.js';
51
85
  // toError 独立导出,浏览器端可直接 import 而不引入 logging(pino)依赖
52
86
  export { toError } from './utils/toError.js';
87
+ // ─── 通用工具导出 ────────────────────────────────────────
88
+ // 宿主主进程统一从 'memora' 导入,消除 shared/ 跨层副本(渲染进程因浏览器环境保留副本)
89
+ export { truncate } from './utils/strings.js';
90
+ export { formatDateKey, todayDate } from './utils/time.js';
53
91
  export { collectAgentChunks, evaluateResult } from './eval/evalTypes.js';
92
+ export { EVAL_SCENARIOS } from './eval/scenarios.js';
93
+ export { EvalRunner } from './eval/evalRunner.js';
54
94
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iDAAiD;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAWvE,kEAAkE;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAuBtE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAI/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO;AACP,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7D,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEvF,uBAAuB;AACvB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIrE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,6CAA6C;AAC7C,oEAAoE;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,wEAAwE;AACxE,2EAA2E;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,wEAAwE;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMvD,eAAe;AACf,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK7D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,+BAA+B;AAC/B,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAChF,sDAAsD;AACtD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAc5G,sDAAsD;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrF,mDAAmD;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,iDAAiD;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMvE,0DAA0D;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AA8BtE,WAAW;AACX,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAKxE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAI/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO;AACP,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAK5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7D,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEvF,uBAAuB;AACvB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIrE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,0EAA0E;AAC1E,oFAAoF;AACpF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,qCAAqC;AACrC,oEAAoE;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,wEAAwE;AACxE,2EAA2E;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,wEAAwE;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAQvD,eAAe;AACf,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK7D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,iDAAiD;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAChF,sDAAsD;AACtD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAc5G,sDAAsD;AACtD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrF,mDAAmD;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,sDAAsD;AACtD,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAM3D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * AbortSignal 合并工具
3
+ *
4
+ * 从 openaiCompatible.ts 和 embedding.ts 提取的公共"外部信号 + 超时信号"合并逻辑
5
+ * (ADR-017 枝叶层 2 次提取原则,embedding.ts 原注释已自证"与 openaiCompatible.ts 同构")。
6
+ *
7
+ * 确保用户取消(optsSignal)和请求超时都能中断 fetch 和流读取。
8
+ */
9
+ /**
10
+ * 合并外部 AbortSignal + 超时 AbortSignal
11
+ *
12
+ * 创建内部 AbortController,将外部 optsSignal 和超时信号合并到其 signal 上。
13
+ * 返回 signal 供 fetch 使用,以及两个清理函数:
14
+ * - clearTimer:只清超时定时器(流式读取前调用,保留 optsSignal 监听用于 SSE 取消)
15
+ * - dispose:完整清理(清超时 + 移除 optsSignal 监听,最终清理时调用)
16
+ *
17
+ * @param optsSignal 外部传入的 AbortSignal(可选,用户取消信号)
18
+ * @param timeoutMs 超时毫秒数
19
+ * @param timeoutErrorName 超时错误名称(如 'LLM 请求超时' / 'Embedding 请求超时')
20
+ * @returns { signal, clearTimer, dispose } 合并后的 signal 和清理函数
21
+ */
22
+ export declare function mergeAbortSignals(optsSignal: AbortSignal | undefined, timeoutMs: number, timeoutErrorName: string): {
23
+ signal: AbortSignal;
24
+ clearTimer: () => void;
25
+ dispose: () => void;
26
+ };
27
+ //# sourceMappingURL=abortSignal.d.ts.map