@zooique/memora 2.0.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/CHANGELOG.md +1028 -0
  2. package/README.en.md +305 -272
  3. package/README.md +303 -260
  4. package/config.example.json +43 -0
  5. package/dist/agent/agent.d.ts +376 -408
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +1166 -926
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/assembler.d.ts +105 -43
  10. package/dist/agent/assembler.d.ts.map +1 -1
  11. package/dist/agent/assembler.js +543 -75
  12. package/dist/agent/assembler.js.map +1 -1
  13. package/dist/agent/budget.d.ts +131 -0
  14. package/dist/agent/budget.d.ts.map +1 -0
  15. package/dist/agent/budget.js +128 -0
  16. package/dist/agent/budget.js.map +1 -0
  17. package/dist/agent/builtinToolHandlers.d.ts +225 -38
  18. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  19. package/dist/agent/builtinToolHandlers.js +748 -132
  20. package/dist/agent/builtinToolHandlers.js.map +1 -1
  21. package/dist/agent/builtinTools.d.ts +198 -7
  22. package/dist/agent/builtinTools.d.ts.map +1 -1
  23. package/dist/agent/builtinTools.js +646 -14
  24. package/dist/agent/builtinTools.js.map +1 -1
  25. package/dist/agent/compaction.d.ts +93 -0
  26. package/dist/agent/compaction.d.ts.map +1 -0
  27. package/dist/agent/compaction.js +192 -0
  28. package/dist/agent/compaction.js.map +1 -0
  29. package/dist/agent/constants.d.ts +137 -20
  30. package/dist/agent/constants.d.ts.map +1 -1
  31. package/dist/agent/constants.js +152 -20
  32. package/dist/agent/constants.js.map +1 -1
  33. package/dist/agent/contextManager.d.ts +119 -77
  34. package/dist/agent/contextManager.d.ts.map +1 -1
  35. package/dist/agent/contextManager.js +192 -135
  36. package/dist/agent/contextManager.js.map +1 -1
  37. package/dist/agent/contextPreparer.d.ts +78 -0
  38. package/dist/agent/contextPreparer.d.ts.map +1 -0
  39. package/dist/agent/contextPreparer.js +128 -0
  40. package/dist/agent/contextPreparer.js.map +1 -0
  41. package/dist/agent/duplicateInterceptor.d.ts +67 -0
  42. package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
  43. package/dist/agent/duplicateInterceptor.js +82 -0
  44. package/dist/agent/duplicateInterceptor.js.map +1 -0
  45. package/dist/agent/guardRail.d.ts +166 -0
  46. package/dist/agent/guardRail.d.ts.map +1 -0
  47. package/dist/agent/guardRail.js +333 -0
  48. package/dist/agent/guardRail.js.map +1 -0
  49. package/dist/agent/loop.d.ts +716 -295
  50. package/dist/agent/loop.d.ts.map +1 -1
  51. package/dist/agent/loop.js +2178 -664
  52. package/dist/agent/loop.js.map +1 -1
  53. package/dist/agent/managers/archiveCoordinator.d.ts +14 -171
  54. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  55. package/dist/agent/managers/archiveCoordinator.js +19 -287
  56. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  57. package/dist/agent/managers/chatLockManager.d.ts +20 -88
  58. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  59. package/dist/agent/managers/chatLockManager.js +31 -103
  60. package/dist/agent/managers/chatLockManager.js.map +1 -1
  61. package/dist/agent/managers/dedupManager.d.ts +31 -115
  62. package/dist/agent/managers/dedupManager.d.ts.map +1 -1
  63. package/dist/agent/managers/dedupManager.js +48 -136
  64. package/dist/agent/managers/dedupManager.js.map +1 -1
  65. package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
  66. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
  67. package/dist/agent/managers/goalConsistencyChecker.js +178 -0
  68. package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
  69. package/dist/agent/managers/llmCaller.d.ts +124 -0
  70. package/dist/agent/managers/llmCaller.d.ts.map +1 -0
  71. package/dist/agent/managers/llmCaller.js +417 -0
  72. package/dist/agent/managers/llmCaller.js.map +1 -0
  73. package/dist/agent/managers/llmJudgeHelper.d.ts +8 -25
  74. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -1
  75. package/dist/agent/managers/llmJudgeHelper.js +7 -24
  76. package/dist/agent/managers/llmJudgeHelper.js.map +1 -1
  77. package/dist/agent/managers/loopMetrics.d.ts +58 -0
  78. package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
  79. package/dist/agent/managers/loopMetrics.js +68 -0
  80. package/dist/agent/managers/loopMetrics.js.map +1 -0
  81. package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
  82. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  83. package/dist/agent/managers/memoryAdvisor.js +85 -207
  84. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  85. package/dist/agent/managers/memoryGovernance.d.ts +10 -42
  86. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -1
  87. package/dist/agent/managers/memoryGovernance.js +19 -36
  88. package/dist/agent/managers/memoryGovernance.js.map +1 -1
  89. package/dist/agent/managers/memoryInspector.d.ts +59 -268
  90. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  91. package/dist/agent/managers/memoryInspector.js +91 -442
  92. package/dist/agent/managers/memoryInspector.js.map +1 -1
  93. package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
  94. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
  95. package/dist/agent/managers/roundSummaryGenerator.js +201 -0
  96. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
  97. package/dist/agent/managers/sessionArchiver.d.ts +19 -68
  98. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  99. package/dist/agent/managers/sessionArchiver.js +76 -147
  100. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  101. package/dist/agent/managers/sessionManager.d.ts +286 -57
  102. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  103. package/dist/agent/managers/sessionManager.js +846 -85
  104. package/dist/agent/managers/sessionManager.js.map +1 -1
  105. package/dist/agent/managers/sessionNamer.d.ts +35 -0
  106. package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
  107. package/dist/agent/managers/sessionNamer.js +104 -0
  108. package/dist/agent/managers/sessionNamer.js.map +1 -0
  109. package/dist/agent/managers/streamAccumulator.d.ts +8 -33
  110. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -1
  111. package/dist/agent/managers/streamAccumulator.js +4 -29
  112. package/dist/agent/managers/streamAccumulator.js.map +1 -1
  113. package/dist/agent/managers/textPolishManager.d.ts +8 -44
  114. package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
  115. package/dist/agent/managers/textPolishManager.js +9 -41
  116. package/dist/agent/managers/textPolishManager.js.map +1 -1
  117. package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
  118. package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
  119. package/dist/agent/managers/toolCallHelpers.js +161 -0
  120. package/dist/agent/managers/toolCallHelpers.js.map +1 -0
  121. package/dist/agent/managers/workProjection.d.ts +55 -100
  122. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  123. package/dist/agent/managers/workProjection.js +164 -268
  124. package/dist/agent/managers/workProjection.js.map +1 -1
  125. package/dist/agent/messageHistory.d.ts +134 -84
  126. package/dist/agent/messageHistory.d.ts.map +1 -1
  127. package/dist/agent/messageHistory.js +419 -133
  128. package/dist/agent/messageHistory.js.map +1 -1
  129. package/dist/agent/needsPlanning.d.ts +28 -0
  130. package/dist/agent/needsPlanning.d.ts.map +1 -0
  131. package/dist/agent/needsPlanning.js +68 -0
  132. package/dist/agent/needsPlanning.js.map +1 -0
  133. package/dist/agent/seed/index.d.ts +11 -0
  134. package/dist/agent/seed/index.d.ts.map +1 -0
  135. package/dist/agent/seed/index.js +10 -0
  136. package/dist/agent/seed/index.js.map +1 -0
  137. package/dist/agent/seed/orchestrator.d.ts +83 -0
  138. package/dist/agent/seed/orchestrator.d.ts.map +1 -0
  139. package/dist/agent/seed/orchestrator.js +260 -0
  140. package/dist/agent/seed/orchestrator.js.map +1 -0
  141. package/dist/agent/seed/prepare.d.ts +49 -0
  142. package/dist/agent/seed/prepare.d.ts.map +1 -0
  143. package/dist/agent/seed/prepare.js +107 -0
  144. package/dist/agent/seed/prepare.js.map +1 -0
  145. package/dist/agent/seed/types.d.ts +115 -0
  146. package/dist/agent/seed/types.d.ts.map +1 -0
  147. package/dist/agent/seed/types.js +15 -0
  148. package/dist/agent/seed/types.js.map +1 -0
  149. package/dist/agent/sessionStateMachine.d.ts +78 -0
  150. package/dist/agent/sessionStateMachine.d.ts.map +1 -0
  151. package/dist/agent/sessionStateMachine.js +182 -0
  152. package/dist/agent/sessionStateMachine.js.map +1 -0
  153. package/dist/agent/taskTableRenderer.d.ts +51 -0
  154. package/dist/agent/taskTableRenderer.d.ts.map +1 -0
  155. package/dist/agent/taskTableRenderer.js +115 -0
  156. package/dist/agent/taskTableRenderer.js.map +1 -0
  157. package/dist/agent/toolExecutor.d.ts +236 -10
  158. package/dist/agent/toolExecutor.d.ts.map +1 -1
  159. package/dist/agent/toolExecutor.js +932 -21
  160. package/dist/agent/toolExecutor.js.map +1 -1
  161. package/dist/agent/toolLedger.d.ts +120 -0
  162. package/dist/agent/toolLedger.d.ts.map +1 -0
  163. package/dist/agent/toolLedger.js +149 -0
  164. package/dist/agent/toolLedger.js.map +1 -0
  165. package/dist/agent/toolResultCache.d.ts +134 -0
  166. package/dist/agent/toolResultCache.d.ts.map +1 -0
  167. package/dist/agent/toolResultCache.js +243 -0
  168. package/dist/agent/toolResultCache.js.map +1 -0
  169. package/dist/agent/toolResultOffload.d.ts +59 -0
  170. package/dist/agent/toolResultOffload.d.ts.map +1 -0
  171. package/dist/agent/toolResultOffload.js +70 -0
  172. package/dist/agent/toolResultOffload.js.map +1 -0
  173. package/dist/agent/toolRunner.d.ts +59 -0
  174. package/dist/agent/toolRunner.d.ts.map +1 -0
  175. package/dist/agent/toolRunner.js +147 -0
  176. package/dist/agent/toolRunner.js.map +1 -0
  177. package/dist/agent/tracer.d.ts +99 -107
  178. package/dist/agent/tracer.d.ts.map +1 -1
  179. package/dist/agent/tracer.js +24 -69
  180. package/dist/agent/tracer.js.map +1 -1
  181. package/dist/agent/types.d.ts +510 -169
  182. package/dist/agent/types.d.ts.map +1 -1
  183. package/dist/agent/types.js +2 -51
  184. package/dist/agent/types.js.map +1 -1
  185. package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
  186. package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
  187. package/dist/code-exec/codeExecutionProvider.js +57 -0
  188. package/dist/code-exec/codeExecutionProvider.js.map +1 -0
  189. package/dist/code-exec/types.d.ts +37 -0
  190. package/dist/code-exec/types.d.ts.map +1 -0
  191. package/dist/code-exec/types.js +12 -0
  192. package/dist/code-exec/types.js.map +1 -0
  193. package/dist/config/expandEnvVars.d.ts +22 -0
  194. package/dist/config/expandEnvVars.d.ts.map +1 -0
  195. package/dist/config/expandEnvVars.js +38 -0
  196. package/dist/config/expandEnvVars.js.map +1 -0
  197. package/dist/config/loader.d.ts +27 -98
  198. package/dist/config/loader.d.ts.map +1 -1
  199. package/dist/config/loader.js +110 -223
  200. package/dist/config/loader.js.map +1 -1
  201. package/dist/index.d.ts +67 -77
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +90 -69
  204. package/dist/index.js.map +1 -1
  205. package/dist/llm/abortSignal.d.ts +2 -3
  206. package/dist/llm/abortSignal.d.ts.map +1 -1
  207. package/dist/llm/abortSignal.js +2 -3
  208. package/dist/llm/abortSignal.js.map +1 -1
  209. package/dist/llm/factory.d.ts +22 -32
  210. package/dist/llm/factory.d.ts.map +1 -1
  211. package/dist/llm/factory.js +29 -46
  212. package/dist/llm/factory.js.map +1 -1
  213. package/dist/llm/openaiCompatible.d.ts +25 -40
  214. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  215. package/dist/llm/openaiCompatible.js +179 -120
  216. package/dist/llm/openaiCompatible.js.map +1 -1
  217. package/dist/llm/provider.d.ts +29 -42
  218. package/dist/llm/provider.d.ts.map +1 -1
  219. package/dist/llm/provider.js +11 -10
  220. package/dist/llm/provider.js.map +1 -1
  221. package/dist/llm/types.d.ts +54 -11
  222. package/dist/llm/types.d.ts.map +1 -1
  223. package/dist/llm/types.js +0 -5
  224. package/dist/llm/types.js.map +1 -1
  225. package/dist/logging/logger.d.ts +8 -31
  226. package/dist/logging/logger.d.ts.map +1 -1
  227. package/dist/logging/logger.js +28 -215
  228. package/dist/logging/logger.js.map +1 -1
  229. package/dist/logging/loggerInterface.d.ts +9 -8
  230. package/dist/logging/loggerInterface.d.ts.map +1 -1
  231. package/dist/memory/gcService.d.ts +164 -0
  232. package/dist/memory/gcService.d.ts.map +1 -0
  233. package/dist/memory/gcService.js +215 -0
  234. package/dist/memory/gcService.js.map +1 -0
  235. package/dist/memory/governance.d.ts +11 -44
  236. package/dist/memory/governance.d.ts.map +1 -1
  237. package/dist/memory/governance.js +11 -64
  238. package/dist/memory/governance.js.map +1 -1
  239. package/dist/memory/inMemoryRoundStore.d.ts +124 -0
  240. package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
  241. package/dist/memory/inMemoryRoundStore.js +216 -0
  242. package/dist/memory/inMemoryRoundStore.js.map +1 -0
  243. package/dist/memory/inMemorySessionStore.d.ts +92 -0
  244. package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
  245. package/dist/memory/inMemorySessionStore.js +219 -0
  246. package/dist/memory/inMemorySessionStore.js.map +1 -0
  247. package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
  248. package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
  249. package/dist/memory/inMemorySessionViewLoader.js +183 -0
  250. package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
  251. package/dist/memory/inMemoryStorage.d.ts +25 -175
  252. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  253. package/dist/memory/inMemoryStorage.js +32 -221
  254. package/dist/memory/inMemoryStorage.js.map +1 -1
  255. package/dist/memory/keywordsTouch.d.ts +20 -0
  256. package/dist/memory/keywordsTouch.d.ts.map +1 -0
  257. package/dist/memory/keywordsTouch.js +25 -0
  258. package/dist/memory/keywordsTouch.js.map +1 -0
  259. package/dist/memory/lockManager.d.ts +2 -2
  260. package/dist/memory/lockManager.d.ts.map +1 -1
  261. package/dist/memory/lockManager.js +6 -8
  262. package/dist/memory/lockManager.js.map +1 -1
  263. package/dist/memory/projectManager.d.ts +30 -129
  264. package/dist/memory/projectManager.d.ts.map +1 -1
  265. package/dist/memory/projectManager.js +39 -189
  266. package/dist/memory/projectManager.js.map +1 -1
  267. package/dist/memory/projectRegistry.d.ts +14 -62
  268. package/dist/memory/projectRegistry.d.ts.map +1 -1
  269. package/dist/memory/projectRegistry.js +27 -111
  270. package/dist/memory/projectRegistry.js.map +1 -1
  271. package/dist/memory/roundStore.d.ts +629 -0
  272. package/dist/memory/roundStore.d.ts.map +1 -0
  273. package/dist/memory/roundStore.js +116 -0
  274. package/dist/memory/roundStore.js.map +1 -0
  275. package/dist/memory/sessionStore.d.ts +70 -61
  276. package/dist/memory/sessionStore.d.ts.map +1 -1
  277. package/dist/memory/sessionStore.js +23 -1
  278. package/dist/memory/sessionStore.js.map +1 -1
  279. package/dist/memory/sessionViewLoader.d.ts +141 -0
  280. package/dist/memory/sessionViewLoader.d.ts.map +1 -0
  281. package/dist/memory/sessionViewLoader.js +65 -0
  282. package/dist/memory/sessionViewLoader.js.map +1 -0
  283. package/dist/memory/sourceValidation.d.ts +10 -12
  284. package/dist/memory/sourceValidation.d.ts.map +1 -1
  285. package/dist/memory/sourceValidation.js +16 -32
  286. package/dist/memory/sourceValidation.js.map +1 -1
  287. package/dist/memory/storageInterface.d.ts +44 -150
  288. package/dist/memory/storageInterface.d.ts.map +1 -1
  289. package/dist/memory/types.d.ts +65 -164
  290. package/dist/memory/types.d.ts.map +1 -1
  291. package/dist/memory/types.js +81 -83
  292. package/dist/memory/types.js.map +1 -1
  293. package/dist/project-search/projectSearchProvider.d.ts +29 -0
  294. package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
  295. package/dist/project-search/projectSearchProvider.js +57 -0
  296. package/dist/project-search/projectSearchProvider.js.map +1 -0
  297. package/dist/project-search/terms.d.ts +14 -0
  298. package/dist/project-search/terms.d.ts.map +1 -0
  299. package/dist/project-search/terms.js +68 -0
  300. package/dist/project-search/terms.js.map +1 -0
  301. package/dist/project-search/types.d.ts +139 -0
  302. package/dist/project-search/types.d.ts.map +1 -0
  303. package/dist/project-search/types.js +8 -0
  304. package/dist/project-search/types.js.map +1 -0
  305. package/dist/role-pack/capabilityMap.d.ts +28 -0
  306. package/dist/role-pack/capabilityMap.d.ts.map +1 -0
  307. package/dist/role-pack/capabilityMap.js +56 -0
  308. package/dist/role-pack/capabilityMap.js.map +1 -0
  309. package/dist/role-pack/constants.d.ts +21 -0
  310. package/dist/role-pack/constants.d.ts.map +1 -0
  311. package/dist/role-pack/constants.js +21 -0
  312. package/dist/role-pack/constants.js.map +1 -0
  313. package/dist/role-pack/rolePackManager.d.ts +269 -0
  314. package/dist/role-pack/rolePackManager.d.ts.map +1 -0
  315. package/dist/role-pack/rolePackManager.js +1082 -0
  316. package/dist/role-pack/rolePackManager.js.map +1 -0
  317. package/dist/role-pack/strategyKeys.d.ts +100 -0
  318. package/dist/role-pack/strategyKeys.d.ts.map +1 -0
  319. package/dist/role-pack/strategyKeys.js +184 -0
  320. package/dist/role-pack/strategyKeys.js.map +1 -0
  321. package/dist/role-pack/strategyResolver.d.ts +109 -0
  322. package/dist/role-pack/strategyResolver.d.ts.map +1 -0
  323. package/dist/role-pack/strategyResolver.js +304 -0
  324. package/dist/role-pack/strategyResolver.js.map +1 -0
  325. package/dist/role-pack/types.d.ts +237 -0
  326. package/dist/role-pack/types.d.ts.map +1 -0
  327. package/dist/role-pack/types.js +8 -0
  328. package/dist/role-pack/types.js.map +1 -0
  329. package/dist/role-pack/validator.d.ts +38 -0
  330. package/dist/role-pack/validator.d.ts.map +1 -0
  331. package/dist/role-pack/validator.js +436 -0
  332. package/dist/role-pack/validator.js.map +1 -0
  333. package/dist/security/pathGuard.d.ts +69 -72
  334. package/dist/security/pathGuard.d.ts.map +1 -1
  335. package/dist/security/pathGuard.js +151 -131
  336. package/dist/security/pathGuard.js.map +1 -1
  337. package/dist/skill/skillLayer3.d.ts +91 -0
  338. package/dist/skill/skillLayer3.d.ts.map +1 -0
  339. package/dist/skill/skillLayer3.js +104 -0
  340. package/dist/skill/skillLayer3.js.map +1 -0
  341. package/dist/skill/skillManager.d.ts +136 -19
  342. package/dist/skill/skillManager.d.ts.map +1 -1
  343. package/dist/skill/skillManager.js +312 -61
  344. package/dist/skill/skillManager.js.map +1 -1
  345. package/dist/skill/skillScriptRunner.d.ts +97 -0
  346. package/dist/skill/skillScriptRunner.d.ts.map +1 -0
  347. package/dist/skill/skillScriptRunner.js +271 -0
  348. package/dist/skill/skillScriptRunner.js.map +1 -0
  349. package/dist/skill/types.d.ts +73 -16
  350. package/dist/skill/types.d.ts.map +1 -1
  351. package/dist/skill/types.js +5 -1
  352. package/dist/skill/types.js.map +1 -1
  353. package/dist/utils/array.d.ts +5 -6
  354. package/dist/utils/array.d.ts.map +1 -1
  355. package/dist/utils/array.js +6 -6
  356. package/dist/utils/array.js.map +1 -1
  357. package/dist/utils/atomicWrite.d.ts +8 -0
  358. package/dist/utils/atomicWrite.d.ts.map +1 -0
  359. package/dist/utils/atomicWrite.js +31 -0
  360. package/dist/utils/atomicWrite.js.map +1 -0
  361. package/dist/utils/backgroundTask.d.ts +38 -0
  362. package/dist/utils/backgroundTask.d.ts.map +1 -0
  363. package/dist/utils/backgroundTask.js +117 -0
  364. package/dist/utils/backgroundTask.js.map +1 -0
  365. package/dist/utils/configResourceManager.d.ts +40 -72
  366. package/dist/utils/configResourceManager.d.ts.map +1 -1
  367. package/dist/utils/configResourceManager.js +78 -76
  368. package/dist/utils/configResourceManager.js.map +1 -1
  369. package/dist/utils/errors.d.ts +44 -69
  370. package/dist/utils/errors.d.ts.map +1 -1
  371. package/dist/utils/errors.js +54 -71
  372. package/dist/utils/errors.js.map +1 -1
  373. package/dist/utils/eventEmitter.d.ts +104 -103
  374. package/dist/utils/eventEmitter.d.ts.map +1 -1
  375. package/dist/utils/eventEmitter.js +37 -45
  376. package/dist/utils/eventEmitter.js.map +1 -1
  377. package/dist/utils/fileSafe.d.ts +20 -0
  378. package/dist/utils/fileSafe.d.ts.map +1 -0
  379. package/dist/utils/fileSafe.js +56 -0
  380. package/dist/utils/fileSafe.js.map +1 -0
  381. package/dist/utils/frontmatter.d.ts +2 -3
  382. package/dist/utils/frontmatter.d.ts.map +1 -1
  383. package/dist/utils/frontmatter.js +2 -3
  384. package/dist/utils/frontmatter.js.map +1 -1
  385. package/dist/utils/hash.d.ts +12 -0
  386. package/dist/utils/hash.d.ts.map +1 -0
  387. package/dist/utils/hash.js +27 -0
  388. package/dist/utils/hash.js.map +1 -0
  389. package/dist/utils/http.d.ts +17 -0
  390. package/dist/utils/http.d.ts.map +1 -0
  391. package/dist/utils/http.js +29 -0
  392. package/dist/utils/http.js.map +1 -0
  393. package/dist/utils/json.d.ts +1 -1
  394. package/dist/utils/json.js +1 -1
  395. package/dist/utils/math.d.ts +25 -3
  396. package/dist/utils/math.d.ts.map +1 -1
  397. package/dist/utils/math.js +32 -16
  398. package/dist/utils/math.js.map +1 -1
  399. package/dist/utils/objects.d.ts +2 -3
  400. package/dist/utils/objects.d.ts.map +1 -1
  401. package/dist/utils/objects.js +2 -3
  402. package/dist/utils/objects.js.map +1 -1
  403. package/dist/utils/recallDefaults.d.ts +16 -0
  404. package/dist/utils/recallDefaults.d.ts.map +1 -0
  405. package/dist/utils/recallDefaults.js +16 -0
  406. package/dist/utils/recallDefaults.js.map +1 -0
  407. package/dist/utils/safeTimer.d.ts +8 -36
  408. package/dist/utils/safeTimer.d.ts.map +1 -1
  409. package/dist/utils/safeTimer.js +9 -37
  410. package/dist/utils/safeTimer.js.map +1 -1
  411. package/dist/utils/scanner.d.ts +97 -17
  412. package/dist/utils/scanner.d.ts.map +1 -1
  413. package/dist/utils/scanner.js +269 -47
  414. package/dist/utils/scanner.js.map +1 -1
  415. package/dist/utils/segmenter.d.ts +20 -19
  416. package/dist/utils/segmenter.d.ts.map +1 -1
  417. package/dist/utils/segmenter.js +230 -97
  418. package/dist/utils/segmenter.js.map +1 -1
  419. package/dist/utils/strings.d.ts +15 -32
  420. package/dist/utils/strings.d.ts.map +1 -1
  421. package/dist/utils/strings.js +25 -44
  422. package/dist/utils/strings.js.map +1 -1
  423. package/dist/utils/time.d.ts +37 -0
  424. package/dist/utils/time.d.ts.map +1 -1
  425. package/dist/utils/time.js +56 -0
  426. package/dist/utils/time.js.map +1 -1
  427. package/dist/utils/toError.d.ts +13 -1
  428. package/dist/utils/toError.d.ts.map +1 -1
  429. package/dist/utils/toError.js +18 -1
  430. package/dist/utils/toError.js.map +1 -1
  431. package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
  432. package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
  433. package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
  434. package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
  435. package/dist/web-fetch/types.d.ts +30 -0
  436. package/dist/web-fetch/types.d.ts.map +1 -0
  437. package/dist/web-fetch/types.js +7 -0
  438. package/dist/web-fetch/types.js.map +1 -0
  439. package/dist/web-fetch/webFetchProvider.d.ts +10 -0
  440. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
  441. package/dist/web-fetch/webFetchProvider.js +28 -0
  442. package/dist/web-fetch/webFetchProvider.js.map +1 -0
  443. package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
  444. package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
  445. package/dist/web-search/fetchWebSearchProvider.js +199 -0
  446. package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
  447. package/dist/web-search/types.d.ts +46 -0
  448. package/dist/web-search/types.d.ts.map +1 -0
  449. package/dist/web-search/types.js +2 -0
  450. package/dist/{persona → web-search}/types.js.map +1 -1
  451. package/dist/web-search/webSearchProvider.d.ts +10 -0
  452. package/dist/web-search/webSearchProvider.d.ts.map +1 -0
  453. package/dist/web-search/webSearchProvider.js +30 -0
  454. package/dist/web-search/webSearchProvider.js.map +1 -0
  455. package/docs/architecture/role-pack-authoring-guide.md +243 -0
  456. package/docs/architecture/role-pack-spec.md +767 -0
  457. package/docs/memora-api-reference.md +416 -476
  458. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +841 -806
  459. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
  460. package/package.json +105 -100
  461. package/role-packs/README.md +41 -0
  462. package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
  463. package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
  464. package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
  465. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
  466. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
  467. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
  468. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
  469. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
  470. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
  471. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
  472. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
  473. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
  474. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
  475. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
  476. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
  477. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
  478. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
  479. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
  480. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
  481. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
  482. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
  483. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
  484. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
  485. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +441 -0
  486. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
  487. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
  488. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
  489. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
  490. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
  491. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
  492. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -0
  493. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +48 -0
  494. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/persona.md +73 -0
  495. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +19 -0
  496. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/api-doc-writer.md +40 -0
  497. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/doc-planner.md +42 -0
  498. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/nutrient-search.md +28 -0
  499. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/seed-finder.md +28 -0
  500. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/ssot-audit.md +34 -0
  501. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/style-guide.md +40 -0
  502. package/dist/agent/guardrail.d.ts +0 -49
  503. package/dist/agent/guardrail.d.ts.map +0 -1
  504. package/dist/agent/guardrail.js +0 -59
  505. package/dist/agent/guardrail.js.map +0 -1
  506. package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
  507. package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
  508. package/dist/agent/managers/autoConfigRefiner.js +0 -146
  509. package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
  510. package/dist/agent/managers/configManager.d.ts +0 -209
  511. package/dist/agent/managers/configManager.d.ts.map +0 -1
  512. package/dist/agent/managers/configManager.js +0 -331
  513. package/dist/agent/managers/configManager.js.map +0 -1
  514. package/dist/agent/managers/insightExtractor.d.ts +0 -139
  515. package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
  516. package/dist/agent/managers/insightExtractor.js +0 -401
  517. package/dist/agent/managers/insightExtractor.js.map +0 -1
  518. package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -239
  519. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
  520. package/dist/agent/managers/memoryDecayScheduler.js +0 -413
  521. package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
  522. package/dist/agent/managers/relationBuilder.d.ts +0 -131
  523. package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
  524. package/dist/agent/managers/relationBuilder.js +0 -192
  525. package/dist/agent/managers/relationBuilder.js.map +0 -1
  526. package/dist/agent/personaMatcher.d.ts +0 -29
  527. package/dist/agent/personaMatcher.d.ts.map +0 -1
  528. package/dist/agent/personaMatcher.js +0 -60
  529. package/dist/agent/personaMatcher.js.map +0 -1
  530. package/dist/agent/userFactExtractor.d.ts +0 -25
  531. package/dist/agent/userFactExtractor.d.ts.map +0 -1
  532. package/dist/agent/userFactExtractor.js +0 -88
  533. package/dist/agent/userFactExtractor.js.map +0 -1
  534. package/dist/eval/evalRunner.d.ts +0 -94
  535. package/dist/eval/evalRunner.d.ts.map +0 -1
  536. package/dist/eval/evalRunner.js +0 -141
  537. package/dist/eval/evalRunner.js.map +0 -1
  538. package/dist/eval/evalTypes.d.ts +0 -148
  539. package/dist/eval/evalTypes.d.ts.map +0 -1
  540. package/dist/eval/evalTypes.js +0 -118
  541. package/dist/eval/evalTypes.js.map +0 -1
  542. package/dist/eval/scenarios.d.ts +0 -33
  543. package/dist/eval/scenarios.d.ts.map +0 -1
  544. package/dist/eval/scenarios.js +0 -109
  545. package/dist/eval/scenarios.js.map +0 -1
  546. package/dist/llm/embedding.d.ts +0 -79
  547. package/dist/llm/embedding.d.ts.map +0 -1
  548. package/dist/llm/embedding.js +0 -184
  549. package/dist/llm/embedding.js.map +0 -1
  550. package/dist/memory/hybridMerge.d.ts +0 -50
  551. package/dist/memory/hybridMerge.d.ts.map +0 -1
  552. package/dist/memory/hybridMerge.js +0 -51
  553. package/dist/memory/hybridMerge.js.map +0 -1
  554. package/dist/memory/inMemoryRelationStore.d.ts +0 -58
  555. package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
  556. package/dist/memory/inMemoryRelationStore.js +0 -80
  557. package/dist/memory/inMemoryRelationStore.js.map +0 -1
  558. package/dist/memory/loader.d.ts +0 -51
  559. package/dist/memory/loader.d.ts.map +0 -1
  560. package/dist/memory/loader.js +0 -100
  561. package/dist/memory/loader.js.map +0 -1
  562. package/dist/memory/recall.d.ts +0 -82
  563. package/dist/memory/recall.d.ts.map +0 -1
  564. package/dist/memory/recall.js +0 -157
  565. package/dist/memory/recall.js.map +0 -1
  566. package/dist/memory/relationStore.d.ts +0 -95
  567. package/dist/memory/relationStore.d.ts.map +0 -1
  568. package/dist/memory/relationStore.js +0 -2
  569. package/dist/memory/relationStore.js.map +0 -1
  570. package/dist/memory/store.d.ts +0 -71
  571. package/dist/memory/store.d.ts.map +0 -1
  572. package/dist/memory/store.js +0 -199
  573. package/dist/memory/store.js.map +0 -1
  574. package/dist/memory/userProfile.d.ts +0 -180
  575. package/dist/memory/userProfile.d.ts.map +0 -1
  576. package/dist/memory/userProfile.js +0 -381
  577. package/dist/memory/userProfile.js.map +0 -1
  578. package/dist/memory/vectorStore.d.ts +0 -179
  579. package/dist/memory/vectorStore.d.ts.map +0 -1
  580. package/dist/memory/vectorStore.js +0 -284
  581. package/dist/memory/vectorStore.js.map +0 -1
  582. package/dist/persona/personaManager.d.ts +0 -109
  583. package/dist/persona/personaManager.d.ts.map +0 -1
  584. package/dist/persona/personaManager.js +0 -315
  585. package/dist/persona/personaManager.js.map +0 -1
  586. package/dist/persona/types.d.ts +0 -32
  587. package/dist/persona/types.d.ts.map +0 -1
  588. package/dist/persona/types.js +0 -5
@@ -1,192 +0,0 @@
1
- import { RELATION_WEIGHTS } from '../../memory/types.js';
2
- import { escapeLikeSnippet } from '../../memory/sourceValidation.js';
3
- import { logger } from '../../logging/logger.js';
4
- import { nowIso } from '../../utils/time.js';
5
- import { truncate } from '../../utils/strings.js';
6
- // ─── 常量 ────────────────────────────────────────────────
7
- /** 关系判断:召回候选记忆数量上限(top-5) */
8
- const RELATION_CANDIDATE_LIMIT = 5;
9
- /** 关系判断:候选记忆 content 注入 prompt 的截断上限(字符) */
10
- const RELATION_CANDIDATE_CONTENT_LIMIT = 100;
11
- // ─── 类 ──────────────────────────────────────────────────
12
- /**
13
- * 关系构建器
14
- *
15
- * 封装 ADR-014 记忆关系构建的全部逻辑,从 InsightExtractor 拆分。
16
- * relationStore 未注入时所有方法静默降级(返回空/no-op)。
17
- */
18
- export class RelationBuilder {
19
- index;
20
- relationStore;
21
- /** 冲突检测回调(由 Agent 通过 bindOnConflict 注入,检测到 contradicts 时触发) */
22
- onConflict = null;
23
- /**
24
- * @param index 记忆存储(用于候选召回的关键词搜索)
25
- * @param relationStore 记忆关系存储(可选,未注入时所有方法静默降级)
26
- */
27
- constructor(index, relationStore = null) {
28
- this.index = index;
29
- this.relationStore = relationStore;
30
- }
31
- /** 关系构建是否启用(relationStore 已注入时为 true) */
32
- get enabled() {
33
- return this.relationStore !== null;
34
- }
35
- /**
36
- * 绑定冲突检测回调
37
- *
38
- * 由 Agent.init() 在创建 InsightExtractor 后调用(与 bindGetRecentHistory 同模式),
39
- * 解决 Agent 实例晚于 InsightExtractor 创建的时序循环依赖。
40
- * buildRelations 检测到 contradicts 关系时调用此回调,Agent 在回调中 emit('conflictDetected')。
41
- *
42
- * @param fn 冲突检测回调(传入 null 可解除绑定)
43
- */
44
- bindOnConflict(fn) {
45
- this.onConflict = fn;
46
- }
47
- // ─── 候选召回 + Prompt 构建 ───────────────────────────
48
- /**
49
- * 召回关系判断候选记忆(top-5)
50
- *
51
- * 用用户输入关键词搜索已有记忆,作为 LLM 关系判断的参考。
52
- * 用户输入与提取出的 insight 通常相关,候选记忆也相关。
53
- * relationStore 未注入时返回空数组(降级)。
54
- *
55
- * @param userInput 用户输入(用于关键词搜索)
56
- * @returns 候选记忆列表(id + content 截断)
57
- */
58
- recallRelationCandidates(userInput) {
59
- if (!this.relationStore)
60
- return [];
61
- const snippet = escapeLikeSnippet(userInput);
62
- return this.index.search(snippet, RELATION_CANDIDATE_LIMIT);
63
- }
64
- /**
65
- * 构建候选记忆列表的 prompt 片段
66
- *
67
- * 格式:
68
- * 已有记忆(供关系判断参考):
69
- * [1] id: xxx, content: xxx
70
- * [2] id: xxx, content: xxx
71
- *
72
- * @param candidates 候选记忆列表
73
- * @returns prompt 片段(空候选时返回空字符串)
74
- */
75
- buildCandidatesPrompt(candidates) {
76
- if (candidates.length === 0)
77
- return '';
78
- const lines = candidates.map((m, i) => {
79
- const safeContent = m.content.length > RELATION_CANDIDATE_CONTENT_LIMIT
80
- ? truncate(m.content, RELATION_CANDIDATE_CONTENT_LIMIT)
81
- : m.content;
82
- return `[${i + 1}] id: ${m.id}, content: ${safeContent}`;
83
- });
84
- return '\n\n已有记忆(供关系判断参考):\n' + lines.join('\n');
85
- }
86
- /**
87
- * 构建关系判断的 prompt 指令片段
88
- *
89
- * 包含 relations 字段格式说明 + 关系类型说明 + 注意事项。
90
- * relationStore 未注入时返回空字符串(降级,不影响 insight 提取主流程)。
91
- *
92
- * @returns prompt 指令片段(relationStore 未注入时为空字符串)
93
- */
94
- buildRelationsPrompt() {
95
- if (!this.relationStore)
96
- return '';
97
- return `\n\n如果提取了 insight,还需判断它与已有记忆的关系,输出 relations 字段:
98
- relations: [{"targetId": "已有记忆ID", "type": "contradicts|supports|follows|refines|caused|related"}]
99
-
100
- 关系类型说明:
101
- - contradicts:矛盾(新信息与已有记忆冲突)
102
- - supports:支持(新信息佐证已有记忆)
103
- - follows:时间先后(新信息在已有记忆之后发生)
104
- - refines:细化/演化(新信息细化已有记忆)
105
- - caused:因果(新信息由已有记忆导致)
106
- - related:泛相关(有关但非上述类型)
107
-
108
- 注意:
109
- - targetId 必须是上方"已有记忆"列表中的 ID
110
- - 无关系时输出空数组 []
111
- - 不增加额外 LLM 调用,在本次提取中一并完成`;
112
- }
113
- // ─── 关系写入 + 冲突检测 ─────────────────────────────
114
- /**
115
- * 构建关系(写入 IMemoryRelationStore)
116
- *
117
- * 解析 LLM 输出的 relations 字段,验证 targetId 在候选列表中,写入关系存储。
118
- * 降级策略:relationStore 未注入/relations 为空/targetId 无效 → 跳过,不阻塞主流程。
119
- *
120
- * 检测到 contradicts 关系时,通过 onConflict 回调通知 Agent,
121
- * Agent emit('conflictDetected') 触发宿主消费链路(ProactiveBanner 通知用户)。
122
- *
123
- * @param insightId 新写入的 insight ID
124
- * @param insightContent 新写入的 insight 内容(用于冲突通知 UI 展示)
125
- * @param relations LLM 输出的关系列表
126
- * @param candidates 候选记忆列表(用于验证 targetId + 查找 targetContent)
127
- */
128
- buildRelations(insightId, insightContent, relations, candidates) {
129
- if (!this.relationStore || relations.length === 0)
130
- return;
131
- const candidateIds = new Set(candidates.map((m) => m.id));
132
- const candidateMap = new Map(candidates.map((m) => [m.id, m]));
133
- const now = nowIso();
134
- let built = 0;
135
- for (const rel of relations) {
136
- // 运行时类型校验(不可信的 LLM 输出)
137
- if (typeof rel.targetId !== 'string' || typeof rel.type !== 'string')
138
- continue;
139
- // targetId 必须在候选列表中(LLM 可能输出不存在的 ID)
140
- if (!candidateIds.has(rel.targetId))
141
- continue;
142
- this.relationStore.addRelation({
143
- sourceId: insightId,
144
- targetId: rel.targetId,
145
- type: rel.type,
146
- weight: this.weightByType(rel.type),
147
- createdAt: now,
148
- });
149
- built++;
150
- // contradicts 关系写入时,通过 onConflict 回调通知宿主
151
- if (rel.type === 'contradicts' && this.onConflict) {
152
- const targetMemory = candidateMap.get(rel.targetId);
153
- if (targetMemory) {
154
- this.onConflict({
155
- newMemoryId: insightId,
156
- newInsight: insightContent,
157
- targetId: rel.targetId,
158
- targetContent: targetMemory.content,
159
- });
160
- }
161
- }
162
- }
163
- if (built > 0) {
164
- logger.info({ insightId, built }, 'RelationBuilder: 关系构建完成');
165
- }
166
- }
167
- // ─── 私有:工具方法 ───────────────────────────────────
168
- /**
169
- * 根据关系类型推断 weight(ADR-014 §4)
170
- *
171
- * LLM 只输出 type,weight 由代码层推断:
172
- * - contradicts → 1.0(确定关系,矛盾是强关系)
173
- * - supports/follows/refines/caused → 0.7(强相关)
174
- * - related → 0.3(弱相关)
175
- * - 未知类型 → 0.5(未判断兜底)
176
- *
177
- * 设计理由:降低 LLM 认知负担,离散值比连续浮点稳定
178
- */
179
- weightByType(type) {
180
- switch (type) {
181
- case 'contradicts': return RELATION_WEIGHTS.CERTAIN;
182
- case 'supports':
183
- case 'follows':
184
- case 'refines':
185
- case 'caused':
186
- return RELATION_WEIGHTS.STRONG;
187
- case 'related': return RELATION_WEIGHTS.WEAK;
188
- default: return RELATION_WEIGHTS.UNDEFINED;
189
- }
190
- }
191
- }
192
- //# sourceMappingURL=relationBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relationBuilder.js","sourceRoot":"","sources":["../../../src/agent/managers/relationBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * 角色语义匹配器 — LLM 辅助角色匹配(agent 层纯函数模块)
3
- *
4
- * 从 PersonaManager.matchByLlm 迁移至此,遵循 backend_layers_rules §分层职责:
5
- * persona/ 不直接调 LLM,agent/ 可通过 provider 接口调 LLM。
6
- *
7
- * 与 userFactExtractor.ts 同级,为 agent/ 根级纯函数模块(非有状态 Manager)。
8
- */
9
- import type { LlmProvider } from '../llm/provider.js';
10
- import type { Persona } from '../persona/types.js';
11
- /**
12
- * LLM 辅助语义角色匹配
13
- *
14
- * 当关键词匹配低置信度或无命中时,由 agent 层调用此函数进行语义级匹配。
15
- *
16
- * 降级策略:
17
- * - LLM 调用失败/超时 → 返回 null(由调用方降级处理)
18
- * - LLM 返回无效角色名 → 返回 null(防止幻觉)
19
- * - LLM 返回 "none" → 返回 null(明确无匹配)
20
- * - 候选列表为空(排除当前角色后) → 返回 null
21
- *
22
- * @param provider 后台 LLM Provider
23
- * @param personaList 完整角色列表(函数内部排除当前激活角色)
24
- * @param activePersonaName 当前激活角色名(排除自身,避免无意义切换)
25
- * @param userInput 用户输入文本
26
- * @returns 匹配的角色名,无匹配/失败返回 null
27
- */
28
- export declare function matchPersonaByLlm(provider: LlmProvider, personaList: Persona[], activePersonaName: string | undefined, userInput: string): Promise<string | null>;
29
- //# sourceMappingURL=personaMatcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"personaMatcher.d.ts","sourceRoot":"","sources":["../../src/agent/personaMatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,OAAO,EAAE,EACtB,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2CxB"}
@@ -1,60 +0,0 @@
1
- import { logger } from '../logging/logger.js';
2
- /** LLM 辅助匹配的 maxTokens 上限(角色名很短,无需长响应) */
3
- const LLM_MATCH_MAX_TOKENS = 50;
4
- /**
5
- * LLM 辅助语义角色匹配
6
- *
7
- * 当关键词匹配低置信度或无命中时,由 agent 层调用此函数进行语义级匹配。
8
- *
9
- * 降级策略:
10
- * - LLM 调用失败/超时 → 返回 null(由调用方降级处理)
11
- * - LLM 返回无效角色名 → 返回 null(防止幻觉)
12
- * - LLM 返回 "none" → 返回 null(明确无匹配)
13
- * - 候选列表为空(排除当前角色后) → 返回 null
14
- *
15
- * @param provider 后台 LLM Provider
16
- * @param personaList 完整角色列表(函数内部排除当前激活角色)
17
- * @param activePersonaName 当前激活角色名(排除自身,避免无意义切换)
18
- * @param userInput 用户输入文本
19
- * @returns 匹配的角色名,无匹配/失败返回 null
20
- */
21
- export async function matchPersonaByLlm(provider, personaList, activePersonaName, userInput) {
22
- // 排除当前激活角色(避免无意义切换)
23
- const candidates = personaList.filter((p) => p.name !== activePersonaName);
24
- if (candidates.length === 0)
25
- return null;
26
- // 构造角色列表描述(name + description/content 前缀 + keywords)
27
- const personaListText = candidates
28
- .map((p) => {
29
- const desc = p.description ?? p.content.substring(0, 50).trim();
30
- return `- ${p.name}:${desc}(关键词:${p.keywords.join(', ')})`;
31
- })
32
- .join('\n');
33
- try {
34
- const stream = provider.chat([
35
- {
36
- role: 'system',
37
- content: '你是角色匹配助手。根据用户输入,从以下角色中选择最匹配的一个。\n\n' +
38
- `角色列表:\n${personaListText}\n\n` +
39
- '规则:\n1. 只返回角色名,不解释\n2. 无匹配返回 "none"',
40
- },
41
- { role: 'user', content: userInput },
42
- ], { maxTokens: LLM_MATCH_MAX_TOKENS, temperature: 0 });
43
- let result = '';
44
- for await (const chunk of stream) {
45
- if (chunk.content)
46
- result += chunk.content;
47
- }
48
- const trimmed = result.trim();
49
- if (!trimmed || trimmed === 'none')
50
- return null;
51
- // 验证返回的角色名在候选列表中(防止 LLM 幻觉)
52
- const matched = candidates.find((p) => p.name === trimmed);
53
- return matched ? matched.name : null;
54
- }
55
- catch (err) {
56
- logger.warn({ err }, 'LLM 辅助角色匹配失败,降级为关键词匹配');
57
- return null;
58
- }
59
- }
60
- //# sourceMappingURL=personaMatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"personaMatcher.js","sourceRoot":"","sources":["../../src/agent/personaMatcher.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,0CAA0C;AAC1C,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAqB,EACrB,WAAsB,EACtB,iBAAqC,EACrC,SAAiB;IAEjB,oBAAoB;IACpB,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAC3E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,qDAAqD;IACrD,MAAM,eAAe,GAAG,UAAU;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7D,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAC1B;YACE;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EACL,qCAAqC;oBACrC,UAAU,eAAe,MAAM;oBAC/B,qCAAqC;aACxC;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;SACrC,EACD,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,EAAE,CACpD,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAEhD,4BAA4B;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,25 +0,0 @@
1
- /**
2
- * 用户事实提取器 — 从对话输入中提取结构化用户画像
3
- *
4
- * 职责:
5
- * - 正则 + 关键词规则提取用户身份、偏好、专长等事实
6
- * - 输出结构化 ExtractedFact,供 UserProfile 归档
7
- *
8
- * 设计原则:
9
- * - 语义解析属于 agent/ 层,memory/ 只做存储
10
- * - 兼顾阶段一低成本需求(正则规则),后续可升级为 LLM 提取
11
- */
12
- import type { ExtractedFact } from '../memory/userProfile.js';
13
- export type { ExtractedFact } from '../memory/userProfile.js';
14
- /**
15
- * 从用户输入中提取事实
16
- *
17
- * 使用正则 + 关键词规则,兼顾阶段一的低成本需求。
18
- * 高置信度规则(≥0.9)→ 直接归档
19
- * 中置信度(0.7-0.8)→ 标记待确认
20
- *
21
- * @param input 用户原始输入
22
- * @param turnIndex 当前轮次标识
23
- */
24
- export declare function extractUserFacts(input: string, turnIndex: string): ExtractedFact[];
25
- //# sourceMappingURL=userFactExtractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userFactExtractor.d.ts","sourceRoot":"","sources":["../../src/agent/userFactExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAuFlF"}
@@ -1,88 +0,0 @@
1
- /**
2
- * 从用户输入中提取事实
3
- *
4
- * 使用正则 + 关键词规则,兼顾阶段一的低成本需求。
5
- * 高置信度规则(≥0.9)→ 直接归档
6
- * 中置信度(0.7-0.8)→ 标记待确认
7
- *
8
- * @param input 用户原始输入
9
- * @param turnIndex 当前轮次标识
10
- */
11
- export function extractUserFacts(input, turnIndex) {
12
- const facts = [];
13
- // ── 高置信度:身份声明 ──
14
- // "我叫张三" "我是张三" "我的名字是张三"
15
- // 排除问句关键词(谁/哪/什/吗),防止 "我是谁" "我是哪个" 误匹配
16
- const identityMatch = input.match(/我(?:叫|是|的名字是)\s*([^\s,。,\.!!??\n谁哪什吗]{1,15})/);
17
- if (identityMatch) {
18
- facts.push({
19
- category: 'identity',
20
- // 显式 fieldName,冲突检测基于 category + fieldName
21
- fieldName: '姓名',
22
- value: `姓名: ${identityMatch[1]}`,
23
- sourceTurn: turnIndex,
24
- confidence: 0.95,
25
- });
26
- }
27
- // "我住在北京" "我家在上海"
28
- const locationMatch = input.match(/(?:我住在?|我家在)\s*([^\s,。,\.!!??\n]{1,15})/);
29
- if (locationMatch) {
30
- facts.push({
31
- category: 'identity',
32
- fieldName: '住址',
33
- value: `住址: ${locationMatch[1]}`,
34
- sourceTurn: turnIndex,
35
- confidence: 0.9,
36
- });
37
- }
38
- // "我(是|当|做).*?(的)" —— 职业声明
39
- const jobMatch = input.match(/我(?:是|当|做)(?:一[个名位])?\s*([^\s,。,\.!!??\n谁哪什吗]{1,10})(?:的)?/);
40
- if (jobMatch && !identityMatch) {
41
- // 避免与 identityMatch 重复
42
- facts.push({
43
- category: 'identity',
44
- fieldName: '职业',
45
- value: `职业: ${jobMatch[1]}`,
46
- sourceTurn: turnIndex,
47
- confidence: 0.85,
48
- });
49
- }
50
- // ── 高置信度:偏好声明 ──
51
- // "我喜欢TS" "我更喜欢Python" "我习惯用VS Code"
52
- const prefMatch = input.match(/(?:我(?:很|非常|最|更)?(?:喜欢|爱|习惯|偏好)(?:用|写|做|的))\s*([^\s,。,\.!!??\n]{1,20})/);
53
- if (prefMatch) {
54
- facts.push({
55
- category: 'preference',
56
- fieldName: '偏好',
57
- value: `偏好: ${prefMatch[1]}`,
58
- sourceTurn: turnIndex,
59
- confidence: 0.85,
60
- });
61
- }
62
- // ── 中置信度:工具/环境声明 ──
63
- // "我用VS Code" "我的环境是Windows"
64
- const toolMatch = input.match(/我(?:用|使用|的环境是)\s*([^\s,。,\.!!??\n]{1,20})/);
65
- if (toolMatch && !prefMatch) {
66
- facts.push({
67
- category: 'preference',
68
- fieldName: '工具',
69
- value: `工具: ${toolMatch[1]}`,
70
- sourceTurn: turnIndex,
71
- confidence: 0.8,
72
- });
73
- }
74
- // ── 较低置信度:专长声明 ──
75
- // "我熟悉React" "我擅长后端"
76
- const expertiseMatch = input.match(/我(?:熟悉|擅长|精通|会)\s*([^\s,。,\.!!??\n]{1,20})/);
77
- if (expertiseMatch) {
78
- facts.push({
79
- category: 'expertise',
80
- fieldName: '专长',
81
- value: `专长: ${expertiseMatch[1]}`,
82
- sourceTurn: turnIndex,
83
- confidence: 0.75,
84
- });
85
- }
86
- return facts;
87
- }
88
- //# sourceMappingURL=userFactExtractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userFactExtractor.js","sourceRoot":"","sources":["../../src/agent/userFactExtractor.ts"],"names":[],"mappings":"AAeA;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IAC/D,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,kBAAkB;IAClB,0BAA0B;IAC1B,uCAAuC;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAChF,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,UAAU;YACpB,2CAA2C;YAC3C,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE;YAChC,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7E,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE;YAChC,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAC1B,4DAA4D,CAC7D,CAAC;IACF,IAAI,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,uBAAuB;QACvB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC3B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,qCAAqC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,wEAAwE,CACzE,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE;YAC5B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,6BAA6B;IAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3E,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE;YAC5B,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,qBAAqB;IACrB,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACjF,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE;YACjC,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,94 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,141 +0,0 @@
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