@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,11 +1,10 @@
1
1
  /**
2
2
  * 配置加载
3
3
  *
4
- * 优先级(高 → 低):
5
- * 1. --config 命令行参数
4
+ * 查找顺序(高 → 低):
5
+ * 1. 显式 configPath(由宿主传入,如用户级配置路径)
6
6
  * 2. 项目级 .memora/config.json
7
- * 3. 用户级 ~/.memora/config.json
8
- * 4. 内置默认值
7
+ * 3. 内置默认值(仅提供机制,不预设厂商/路径策略——ADR-002 + ADR-003)
9
8
  *
10
9
  * API Key 从环境变量读取(不写入配置文件)
11
10
  *
@@ -16,8 +15,9 @@
16
15
  */
17
16
  import { readFile } from 'node:fs/promises';
18
17
  import { resolve } from 'node:path';
19
- import { homedir } from 'node:os';
20
- import { z } from 'zod';
18
+ import { configError } from '../utils/errors.js';
19
+ import { toError } from '../utils/toError.js';
20
+ import { logger } from '../logging/logger.js';
21
21
  /**
22
22
  * 默认上下文 token 数(120K)
23
23
  *
@@ -27,102 +27,250 @@ import { z } from 'zod';
27
27
  * 修改时需同步两处。
28
28
  */
29
29
  const DEFAULT_MAX_CONTEXT_TOKENS = 120_000;
30
- // 单个 Provider 配置 schema(用于 providers 映射表的值)
31
- const ProviderConfigSchema = z.object({
32
- provider: z.string(),
33
- model: z.string(),
34
- baseUrl: z.string().optional(),
35
- apiKey: z.string().optional(),
36
- /** 该 Provider 的 temperature,未配置时回退到全局 llm.temperature */
37
- temperature: z.number().min(0).max(2).optional(),
38
- /** 该 Provider 的上下文窗口大小(token 数),未配置时回退到 memory.maxContextTokens */
39
- contextWindow: z.number().optional(),
40
- });
41
- // 配置 schema(运行时校验)
42
- // provider 允许任意字符串:预设(mock/deepseek/doubao/openai)开箱即用,
43
- // 自定义 provider(如 mimo、自部署模型)只要显式配 baseUrl + model 即可
44
- // 详见 ADR-003
45
- //
46
- // 单一真理源:所有默认值由 .default() 声明,ConfigSchema.parse({}) 即可得到完整默认配置。
47
- // 嵌套对象(llm/memory/security)必须用 .default({}) 声明整体默认值,
48
- // 否则 zod 会在对象缺失时报 "Required" 而非使用内部字段的 default。
49
- const ConfigSchema = z.object({
50
- llm: z
51
- .object({
52
- // 旧格式:单一 provider 扁平字段(向后兼容,providers 未配置时生效)
53
- provider: z.string().default('mock'),
54
- model: z.string().default('deepseek-chat'),
55
- baseUrl: z.string().optional(),
56
- apiKey: z.string().optional(),
57
- temperature: z.number().min(0).max(2).default(0.7),
58
- /**
59
- * 多 Provider 映射表
60
- *
61
- * key 为 Provider 别名(如 "deepseek"、"openai"),value 为 Provider 配置。
62
- * 配置后,旧扁平字段(provider/model/baseUrl/apiKey)被忽略。
63
- * 不配置时回退到旧的单 provider 行为——完全向后兼容。
64
- */
65
- providers: z.record(z.string(), ProviderConfigSchema).optional(),
66
- /**
67
- * 当前激活的 Provider 别名
68
- *
69
- * 必须与 providers 中的某个 key 一致。
70
- * 不配置时默认使用 providers 的第一个 key。
71
- */
72
- active: z.string().optional(),
73
- /**
74
- * 后台通道配置(多 Provider 路由预留)
75
- *
76
- * 不配时所有消费者复用前台(llm)配置——零破坏性,完全向后兼容。
77
- * 配置后,归档/投影/画像等后台操作使用此通道,降低成本。
78
- * 详见接入指南 §九
79
- */
80
- background: z
81
- .object({
82
- provider: z.string(),
83
- model: z.string(),
84
- baseUrl: z.string().optional(),
85
- apiKey: z.string().optional(),
86
- temperature: z.number().min(0).max(2).default(0.5),
87
- })
88
- .optional(),
89
- })
90
- .default({}),
91
- memory: z
92
- .object({
93
- dataDir: z.string().default('~/.memora'),
94
- maxContextTokens: z.number().default(DEFAULT_MAX_CONTEXT_TOKENS),
95
- })
96
- .default({}),
97
- security: z
98
- .object({
99
- permission: z.enum(['owner', 'guest']).default('owner'),
100
- confirmWrites: z.boolean().default(false),
101
- })
102
- .default({}),
103
- // 允许的路径白名单(绝对路径)
104
- allowedPaths: z.array(z.string()).default([]),
105
- // 默认角色名(对应 personas/*.md)
106
- persona: z.string().optional(),
107
- /**
108
- * Embedding 配置(可选,配置后启用向量语义召回)
109
- *
110
- * 复用 OpenAI 兼容协议的 /embeddings 端点。
111
- * 不配置时降级为纯关键词召回(当前行为)。
112
- */
113
- embedding: z
114
- .object({
115
- model: z.string(),
116
- baseUrl: z.string().optional(),
117
- apiKey: z.string().optional(),
118
- })
119
- .optional(),
120
- });
30
+ // 单一真理源:所有默认值由 DEFAULT_CONFIG 声明,parseConfig({}) 即可得到完整默认配置。
31
+ // 嵌套对象(llm/memory/security)必须有完整默认值,
32
+ // 否则会在对象缺失时使用内部字段的默认值。
33
+ const DEFAULT_CONFIG = {
34
+ llm: {
35
+ provider: 'mock',
36
+ // model 留空:factory.ts 会校验并抛出 'LLM model 未配置',由宿主显式填充
37
+ model: '',
38
+ temperature: 0.7,
39
+ },
40
+ memory: {
41
+ // dataDir 留空:由宿主显式注入,内核不硬编码具体目录路径(ADR-002 v0.6)
42
+ dataDir: '',
43
+ maxContextTokens: DEFAULT_MAX_CONTEXT_TOKENS,
44
+ },
45
+ security: {
46
+ permission: 'owner',
47
+ confirmWrites: false,
48
+ },
49
+ allowedPaths: [],
50
+ };
51
+ /**
52
+ * 解析并验证配置
53
+ *
54
+ * 将原始 JSON 解析结果转换为完整的 Config 对象,
55
+ * 验证类型并应用默认值。
56
+ *
57
+ * @param raw 原始 JSON 解析结果(unknown 类型)
58
+ * @returns 完整的 Config 对象
59
+ * @throws 当类型不匹配时抛出错误
60
+ */
61
+ function parseConfig(raw) {
62
+ // 如果 raw 不是对象,使用空对象(MIND-C2:守卫+断言合一为 asRecordIfObject)
63
+ const input = asRecordIfObject(raw);
64
+ // 解析 llm 配置
65
+ const llmInput = asRecordIfObject(input.llm);
66
+ const llm = {
67
+ provider: typeof llmInput.provider === 'string' ? llmInput.provider : DEFAULT_CONFIG.llm.provider,
68
+ model: typeof llmInput.model === 'string' ? llmInput.model : DEFAULT_CONFIG.llm.model,
69
+ // 过滤空字符串:空字符串视为未配置,避免旧格式分支中 resolvedBaseUrl = '' 触发误报
70
+ baseUrl: typeof llmInput.baseUrl === 'string' && llmInput.baseUrl ? llmInput.baseUrl : undefined,
71
+ apiKey: typeof llmInput.apiKey === 'string' && llmInput.apiKey ? llmInput.apiKey : undefined,
72
+ temperature: validateTemperature(llmInput.temperature, DEFAULT_CONFIG.llm.temperature),
73
+ providers: parseProviders(llmInput.providers),
74
+ active: typeof llmInput.active === 'string' ? llmInput.active : undefined,
75
+ background: parseBackground(llmInput.background),
76
+ };
77
+ // 解析 memory 配置
78
+ const memoryInput = asRecordIfObject(input.memory);
79
+ const memory = {
80
+ dataDir: typeof memoryInput.dataDir === 'string' ? memoryInput.dataDir : DEFAULT_CONFIG.memory.dataDir,
81
+ maxContextTokens: (typeof memoryInput.maxContextTokens === 'number' && Number.isFinite(memoryInput.maxContextTokens))
82
+ ? memoryInput.maxContextTokens
83
+ : DEFAULT_CONFIG.memory.maxContextTokens,
84
+ };
85
+ // 解析 security 配置
86
+ const securityInput = asRecordIfObject(input.security);
87
+ const security = {
88
+ permission: validatePermission(securityInput.permission),
89
+ confirmWrites: typeof securityInput.confirmWrites === 'boolean' ? securityInput.confirmWrites : DEFAULT_CONFIG.security.confirmWrites,
90
+ };
91
+ // 解析 allowedPaths
92
+ const allowedPaths = validateAllowedPaths(input.allowedPaths);
93
+ // 解析 persona
94
+ const persona = typeof input.persona === 'string' ? input.persona : undefined;
95
+ // 解析 embedding 配置
96
+ const embedding = parseEmbedding(input.embedding);
97
+ return {
98
+ llm,
99
+ memory,
100
+ security,
101
+ allowedPaths,
102
+ persona,
103
+ embedding,
104
+ };
105
+ }
106
+ /**
107
+ * 类型守卫辅助:非空对象 → Record,否则 → 空对象
108
+ *
109
+ * 收紧 MIND-C2 的 8 处 `as Record<string, unknown>` 隐式断言:
110
+ * 守卫与断言合一,避免守卫变更时编译器不报警的类型安全风险。
111
+ *
112
+ * @param value 待收窄的值
113
+ * @returns 非空对象返回 value as Record;否则返回空对象 {}
114
+ */
115
+ function asRecordIfObject(value) {
116
+ return (value && typeof value === 'object' && !Array.isArray(value))
117
+ ? value
118
+ : {};
119
+ }
120
+ /**
121
+ * 断言值为字符串,否则抛出 configError
122
+ *
123
+ * 消除 loader.ts 中重复的"typeof x !== 'string' → throw"模式(ADR-017 枝叶层 2 次提取原则,6 处重复)。
124
+ *
125
+ * @param value 待校验的值
126
+ * @param field 字段名(用于错误信息,如 "providers.openai.model")
127
+ * @returns 类型收窄后的字符串
128
+ * @throws MemoraError(category: 'config')当值不是字符串时
129
+ */
130
+ function assertString(value, field) {
131
+ if (typeof value !== 'string') {
132
+ throw configError(`配置项 ${field} 必须是字符串`, `当前类型: ${typeof value},当前值: ${JSON.stringify(value)}`, [
133
+ `检查配置文件中 ${field} 字段是否被引号包裹`,
134
+ '参考 README 或 default-config.json 中的字段类型约定',
135
+ ]);
136
+ }
137
+ return value;
138
+ }
139
+ /**
140
+ * 验证 temperature 值
141
+ *
142
+ * @param value 待验证的值
143
+ * @param defaultValue 默认值
144
+ * @returns 有效的 temperature 值
145
+ * @throws MemoraError 当值超出范围时抛出
146
+ */
147
+ function validateTemperature(value, defaultValue) {
148
+ // Number.isFinite 同时排除 NaN/Infinity(对齐 zod z.number() 行为)
149
+ if (typeof value === 'number' && Number.isFinite(value)) {
150
+ if (value < 0 || value > 2) {
151
+ throw configError('temperature 配置项超出范围', `当前值: ${value}(合法范围 0-2)`, ['将 temperature 调整为 0-2 之间的数字']);
152
+ }
153
+ return value;
154
+ }
155
+ return defaultValue;
156
+ }
157
+ /**
158
+ * 验证 permission 值
159
+ *
160
+ * @param value 待验证的值
161
+ * @returns 有效的 permission 值
162
+ * @throws MemoraError 当值无效时抛出
163
+ */
164
+ function validatePermission(value) {
165
+ if (value === undefined || value === null) {
166
+ return DEFAULT_CONFIG.security.permission;
167
+ }
168
+ if (value === 'owner' || value === 'guest') {
169
+ return value;
170
+ }
171
+ throw configError('security.permission 配置项无效', `当前值: ${JSON.stringify(value)}(仅允许 "owner" 或 "guest")`, ['将 security.permission 修改为 "owner" 或 "guest"']);
172
+ }
173
+ /**
174
+ * 验证 allowedPaths 数组
175
+ *
176
+ * @param value 待验证的值
177
+ * @returns 有效的路径数组
178
+ * @throws MemoraError 当数组元素类型不匹配时抛出
179
+ */
180
+ function validateAllowedPaths(value) {
181
+ if (!Array.isArray(value)) {
182
+ return DEFAULT_CONFIG.allowedPaths;
183
+ }
184
+ // 验证每个元素都是字符串(断言失败抛 configError)
185
+ for (let i = 0; i < value.length; i++) {
186
+ assertString(value[i], `allowedPaths[${i}]`);
187
+ }
188
+ return value;
189
+ }
190
+ /**
191
+ * 解析 Provider 配置映射表
192
+ *
193
+ * @param value 待解析的值
194
+ * @returns 有效的 Provider 配置映射表或 undefined
195
+ * @throws MemoraError 当 Provider 配置无效时抛出
196
+ */
197
+ function parseProviders(value) {
198
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
199
+ return undefined;
200
+ }
201
+ const providers = {};
202
+ const entries = Object.entries(value);
203
+ for (const [key, providerValue] of entries) {
204
+ if (!providerValue || typeof providerValue !== 'object' || Array.isArray(providerValue)) {
205
+ throw configError(`配置项 providers.${key} 必须是对象`, `当前类型: ${providerValue === null ? 'null' : Array.isArray(providerValue) ? 'array' : typeof providerValue}`, [`将 providers.${key} 配置为包含 provider/model 等字段的对象`]);
206
+ }
207
+ const p = providerValue;
208
+ // 验证必需字段(断言失败抛 configError,返回值类型收窄为 string)
209
+ const providerName = assertString(p.provider, `providers.${key}.provider`);
210
+ const modelName = assertString(p.model, `providers.${key}.model`);
211
+ providers[key] = {
212
+ provider: providerName,
213
+ model: modelName,
214
+ // 过滤空字符串:与 parseConfig 顶层逻辑保持一致
215
+ baseUrl: typeof p.baseUrl === 'string' && p.baseUrl ? p.baseUrl : undefined,
216
+ apiKey: typeof p.apiKey === 'string' && p.apiKey ? p.apiKey : undefined,
217
+ temperature: p.temperature !== undefined ? validateTemperature(p.temperature, 0) : undefined,
218
+ contextWindow: (typeof p.contextWindow === 'number' && Number.isFinite(p.contextWindow)) ? p.contextWindow : undefined,
219
+ };
220
+ }
221
+ return Object.keys(providers).length > 0 ? providers : undefined;
222
+ }
223
+ /**
224
+ * 解析后台通道配置
225
+ *
226
+ * @param value 待解析的值
227
+ * @returns 有效的后台通道配置或 undefined
228
+ * @throws MemoraError 当配置无效时抛出
229
+ */
230
+ function parseBackground(value) {
231
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
232
+ return undefined;
233
+ }
234
+ const bg = value;
235
+ // 验证必需字段(断言失败抛 configError,返回值类型收窄为 string)
236
+ const bgProvider = assertString(bg.provider, 'background.provider');
237
+ const bgModel = assertString(bg.model, 'background.model');
238
+ return {
239
+ provider: bgProvider,
240
+ model: bgModel,
241
+ baseUrl: typeof bg.baseUrl === 'string' ? bg.baseUrl : undefined,
242
+ apiKey: typeof bg.apiKey === 'string' ? bg.apiKey : undefined,
243
+ temperature: bg.temperature !== undefined ? validateTemperature(bg.temperature, 0.5) : 0.5,
244
+ };
245
+ }
246
+ /**
247
+ * 解析 Embedding 配置
248
+ *
249
+ * @param value 待解析的值
250
+ * @returns 有效的 Embedding 配置或 undefined
251
+ * @throws MemoraError 当配置无效时抛出
252
+ */
253
+ function parseEmbedding(value) {
254
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
255
+ return undefined;
256
+ }
257
+ const emb = value;
258
+ // 验证必需字段(断言失败抛 configError,返回值类型收窄为 string)
259
+ const embModel = assertString(emb.model, 'embedding.model');
260
+ return {
261
+ model: embModel,
262
+ baseUrl: typeof emb.baseUrl === 'string' ? emb.baseUrl : undefined,
263
+ apiKey: typeof emb.apiKey === 'string' ? emb.apiKey : undefined,
264
+ };
265
+ }
121
266
  /**
122
267
  * 加载配置
123
268
  *
124
- * 单一真理源:所有默认值由 ConfigSchema 的 .default() 声明,
125
- * 不再维护独立的 DEFAULT_CONFIG 常量(避免两处真理源打架)。
269
+ * 单一真理源:所有默认值由 DEFAULT_CONFIG 声明,
270
+ * 不再维护独立的 schema(避免两处真理源打架)。
271
+ *
272
+ * 查找顺序:显式 configPath → 项目级 .memora/config.json → 内置默认值。
273
+ * 用户级配置路径由宿主通过 configPath 显式传入。
126
274
  *
127
275
  * @param configPath 显式指定的配置文件路径
128
276
  */
@@ -138,43 +286,56 @@ export async function loadConfig(configPath) {
138
286
  const config = await readJsonFile(projectPath);
139
287
  return expandEnvVars(mergeWithDefaults(config));
140
288
  }
141
- catch {
142
- // 项目级不存在,继续尝试用户级
143
- }
144
- // 3. 用户级
145
- const userPath = resolve(homedir(), '.memora/config.json');
146
- try {
147
- const config = await readJsonFile(userPath);
148
- return expandEnvVars(mergeWithDefaults(config));
149
- }
150
- catch {
151
- // 用户级不存在,使用 schema 默认值(单一真理源)
289
+ catch (err) {
290
+ // 项目级不可用(不存在/损坏/权限),使用内置默认值
291
+ // 排除 ENOENT(正常情况),其他错误应暴露根因供诊断
292
+ if (!isEnoent(err)) {
293
+ logger.warn({ path: projectPath, err: toError(err) }, '项目级配置加载失败,使用默认值');
294
+ }
152
295
  }
153
- // 4. 内置默认:ConfigSchema.parse({}) 让 zod 的 .default() 生效
154
- return expandEnvVars(ConfigSchema.parse({}));
296
+ // 3. 内置默认:parseConfig({}) 让默认值生效
297
+ return expandEnvVars(parseConfig({}));
155
298
  }
156
299
  /**
157
300
  * 读取并解析 JSON 文件
301
+ *
302
+ * 将 JSON.parse 的 SyntaxError 包装为 configError,
303
+ * 防止裸 Error 通过显式 --config 路径传播。
158
304
  */
159
305
  async function readJsonFile(path) {
160
306
  const content = await readFile(path, 'utf-8');
161
- return JSON.parse(content);
307
+ try {
308
+ return JSON.parse(content);
309
+ }
310
+ catch (err) {
311
+ throw configError(`配置文件 JSON 格式错误: ${path}`, toError(err).message, ['检查配置文件语法(逗号、引号配对、尾随逗号)']);
312
+ }
313
+ }
314
+ /**
315
+ * 判断错误是否为 ENOENT(文件不存在)
316
+ */
317
+ function isEnoent(err) {
318
+ return err instanceof Object && 'code' in err && err.code === 'ENOENT';
162
319
  }
163
320
  /**
164
321
  * 合并用户配置与默认值
165
322
  *
166
- * 直接用 ConfigSchema.parse(userConfig),让 zod 的 .default() 填充缺失字段。
323
+ * 直接用 parseConfig(userConfig),让默认值填充缺失字段。
167
324
  * 不再 spread DEFAULT_CONFIG,避免覆盖 schema default。
168
325
  */
169
326
  function mergeWithDefaults(userConfig) {
170
- return ConfigSchema.parse(userConfig);
327
+ return parseConfig(userConfig);
171
328
  }
172
329
  /**
173
330
  * 展开 ${ENV_VAR} 占位符
174
331
  * 配置文件可写 "apiKey": "${MEMORA_LLM_API_KEY}"
175
332
  * 实际读取时展开为环境变量值
176
333
  *
177
- * 同时展开 providers 映射表中每个 Provider 的 apiKey/baseUrl
334
+ * 展开范围覆盖所有可能包含敏感信息的通道:
335
+ * - llm(前台主通道):apiKey / baseUrl
336
+ * - llm.providers(多 Provider 映射表):每个 Provider 的 apiKey / baseUrl
337
+ * - llm.background(后台通道):apiKey / baseUrl
338
+ * - embedding(向量嵌入通道):apiKey / baseUrl
178
339
  */
179
340
  function expandEnvVars(config) {
180
341
  const expand = (val) => {
@@ -183,13 +344,28 @@ function expandEnvVars(config) {
183
344
  return val.replace(/\$\{([A-Z_][A-Z0-9_]*)\}/g, (_, name) => process.env[name] ?? '');
184
345
  };
185
346
  // 展开 providers 映射表中的环境变量
186
- const expandedProviders = config
187
- .llm.providers
347
+ const expandedProviders = config.llm.providers
188
348
  ? Object.fromEntries(Object.entries(config.llm.providers).map(([key, p]) => [
189
349
  key,
190
350
  { ...p, apiKey: expand(p.apiKey), baseUrl: expand(p.baseUrl) },
191
351
  ]))
192
352
  : undefined;
353
+ // 展开 background 后台通道的环境变量(与前台 llm 通道同模式)
354
+ const expandedBackground = config.llm.background
355
+ ? {
356
+ ...config.llm.background,
357
+ apiKey: expand(config.llm.background.apiKey),
358
+ baseUrl: expand(config.llm.background.baseUrl),
359
+ }
360
+ : undefined;
361
+ // 展开 embedding 向量嵌入通道的环境变量
362
+ const expandedEmbedding = config.embedding
363
+ ? {
364
+ ...config.embedding,
365
+ apiKey: expand(config.embedding.apiKey),
366
+ baseUrl: expand(config.embedding.baseUrl),
367
+ }
368
+ : undefined;
193
369
  return {
194
370
  ...config,
195
371
  llm: {
@@ -197,7 +373,9 @@ function expandEnvVars(config) {
197
373
  apiKey: expand(config.llm.apiKey),
198
374
  baseUrl: expand(config.llm.baseUrl),
199
375
  providers: expandedProviders,
376
+ background: expandedBackground,
200
377
  },
378
+ embedding: expandedEmbedding,
201
379
  };
202
380
  }
203
381
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
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 type { Agent } from '../agent/agent.js';
16
+ import type { EvalScenario, EvalResult } from './evalTypes.js';
17
+ /**
18
+ * EvalRunner 构造选项
19
+ */
20
+ export interface EvalRunnerOptions {
21
+ /**
22
+ * Agent 工厂函数(每个场景创建新 Agent)
23
+ *
24
+ * 工厂函数负责配置 MockProvider、guardrail 规则、预写入记忆等测试条件。
25
+ * EvalRunner 负责调用 init() / chat() / close() 管理 Agent 生命周期。
26
+ */
27
+ createAgent: () => Agent;
28
+ /**
29
+ * 单个场景超时_ms(默认 10000)
30
+ *
31
+ * 超时后通过 AbortController 中断 agent.chat,
32
+ * 返回 passed=false 的 EvalResult。
33
+ */
34
+ scenarioTimeoutMs?: number;
35
+ }
36
+ /**
37
+ * 批量执行汇总报告
38
+ */
39
+ export interface EvalSummary {
40
+ /** 每个场景的评估结果(按执行顺序) */
41
+ results: EvalResult[];
42
+ /** 通过场景数 */
43
+ passed: number;
44
+ /** 失败场景数 */
45
+ failed: number;
46
+ /** 场景总数 */
47
+ total: number;
48
+ /** 执行总耗时_ms */
49
+ durationMs: number;
50
+ /** 失败场景名列表 */
51
+ failedScenarios: string[];
52
+ }
53
+ /**
54
+ * Agent 行为评估执行器
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const runner = new EvalRunner({
59
+ * createAgent: () => new Agent({ projectPath, provider, configDir, dataDir, ... }),
60
+ * scenarioTimeoutMs: 15000,
61
+ * });
62
+ * const summary = await runner.runScenarios(EVAL_SCENARIOS);
63
+ * console.log(`通过 ${summary.passed}/${summary.total},耗时 ${summary.durationMs}ms`);
64
+ * ```
65
+ */
66
+ export declare class EvalRunner {
67
+ #private;
68
+ constructor(opts: EvalRunnerOptions);
69
+ /**
70
+ * 执行单个评估场景
71
+ *
72
+ * 流程:创建 Agent → init() → chat(input) → collectAgentChunks → evaluateResult
73
+ *
74
+ * 错误隔离:任何异常(超时、Agent 抛错)都返回 passed=false 的 EvalResult,
75
+ * 不向上抛出,确保 runScenarios 批量执行时单个失败不中断其他场景。
76
+ *
77
+ * Agent 生命周期:每个场景执行后 close(),避免资源泄漏(try/finally 保证)。
78
+ *
79
+ * @param scenario 评估场景定义
80
+ * @returns 评估结果(始终返回,不抛异常)
81
+ */
82
+ runScenario(scenario: EvalScenario): Promise<EvalResult>;
83
+ /**
84
+ * 批量执行评估场景并汇总报告
85
+ *
86
+ * 顺序执行(非并行),每个场景创建独立 Agent,避免状态污染。
87
+ * 错误隔离:单个场景失败不中断其他场景(由 runScenario 保证)。
88
+ *
89
+ * @param scenarios 场景列表
90
+ * @returns 汇总报告
91
+ */
92
+ runScenarios(scenarios: readonly EvalScenario[]): Promise<EvalSummary>;
93
+ }
94
+ //# sourceMappingURL=evalRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalRunner.d.ts","sourceRoot":"","sources":["../../src/eval/evalRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,WAAW,EAAE,MAAM,KAAK,CAAC;IAEzB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAKD;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;;gBAMT,IAAI,EAAE,iBAAiB;IAKnC;;;;;;;;;;;;OAYG;IACG,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IA0B9D;;;;;;;;OAQG;IACG,YAAY,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CA6D7E"}