@zooique/memora 2.0.3 → 3.0.1

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 +1037 -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,184 +0,0 @@
1
- /**
2
- * Embedding Provider — 调用 OpenAI 兼容的 /embeddings 端点
3
- *
4
- * 语义检索的核心能力:
5
- * - 将文本转为向量(embedding)
6
- * - 支持批量嵌入(减少 API 调用次数)
7
- * - 向量维度由模型决定(如 text-embedding-3-small: 1536 维)
8
- *
9
- * 设计原则:
10
- * - 复用 OpenAI 兼容协议(与 chat 共用 baseUrl/apiKey)
11
- * - 0 新 npm 依赖(纯 fetch 调用)
12
- * - 缓存机制:相同文本不重复调用 API
13
- *
14
- * 详见 ADR-003 · LLM 适配层使用 OpenAI Chat Completions 兼容协议
15
- */
16
- import { logger } from '../logging/logger.js';
17
- import { networkError, configError, llmError, toError } from '../utils/errors.js';
18
- import { mergeAbortSignals } from '../llm/abortSignal.js';
19
- /**
20
- * Embedding Provider
21
- *
22
- * 调用 /embeddings 端点将文本转为向量
23
- * 支持批量嵌入和本地缓存
24
- */
25
- export class EmbeddingProvider {
26
- config;
27
- /** 缓存最大条目数(LRU 上限,防止无界增长导致内存泄漏) */
28
- static CACHE_MAX_SIZE = 1000;
29
- /** 默认请求超时:60 秒(embedding 无流式推理,比 chat 的 120s 更短) */
30
- static DEFAULT_TIMEOUT_MS = 60_000;
31
- /** 本地缓存:text → vector(LRU,Map 迭代顺序 = 最近访问顺序) */
32
- cache = new Map();
33
- constructor(config) {
34
- this.config = config;
35
- }
36
- /**
37
- * LRU 读取:命中时把条目移到末尾,标记为最近访问
38
- * Map 保持插入顺序,末尾即最近访问,首部即最久未访问(淘汰候选)
39
- */
40
- getCached(text) {
41
- const vector = this.cache.get(text);
42
- if (vector === undefined)
43
- return undefined;
44
- // 删除后重新插入,移到末尾
45
- this.cache.delete(text);
46
- this.cache.set(text, vector);
47
- return vector;
48
- }
49
- /**
50
- * LRU 写入:超过容量时淘汰最旧条目(首部)
51
- */
52
- setCache(text, vector) {
53
- if (this.cache.size >= EmbeddingProvider.CACHE_MAX_SIZE) {
54
- const oldest = this.cache.keys().next().value;
55
- if (oldest !== undefined)
56
- this.cache.delete(oldest);
57
- }
58
- this.cache.set(text, vector);
59
- }
60
- /**
61
- * 嵌入单条文本
62
- * @param text 待嵌入的文本
63
- * @param options 调用选项(signal 外部取消 + timeoutMs 超时)
64
- * @returns 向量
65
- */
66
- async embed(text, options) {
67
- // 缓存命中
68
- const cached = this.getCached(text);
69
- if (cached)
70
- return cached;
71
- const results = await this.batchEmbed([text], options);
72
- const first = results[0];
73
- if (!first) {
74
- // 错误处理统一:使用 llmError 工厂
75
- throw llmError('嵌入结果为空', 'batchEmbed 返回空结果', ['请检查 Embedding 模型配置', '确认 API 返回了有效的向量数据']);
76
- }
77
- return first.vector;
78
- }
79
- /**
80
- * 批量嵌入多条文本
81
- * OpenAI 兼容 API 支持一次请求嵌入多条文本,减少 API 调用
82
- * @param texts 待嵌入的文本数组
83
- * @param options 调用选项(signal 外部取消 + timeoutMs 超时)
84
- * @returns 嵌入结果数组(顺序与输入一致)
85
- */
86
- async batchEmbed(texts, options) {
87
- // 过滤已缓存的
88
- const uncached = [];
89
- const uncachedIndices = [];
90
- const results = texts.map((text, i) => {
91
- const cached = this.getCached(text);
92
- if (cached)
93
- return { text, vector: cached };
94
- uncached.push(text);
95
- uncachedIndices.push(i);
96
- return null;
97
- });
98
- // 全部命中缓存
99
- if (uncached.length === 0) {
100
- return results;
101
- }
102
- // 调用 /embeddings API
103
- if (!this.config.apiKey) {
104
- throw configError('Embedding API Key 未配置', 'embedding 需要 LLM API Key', [
105
- '检查 ~/.memora/config.json 的 llm.apiKey 字段',
106
- ]);
107
- }
108
- const url = `${this.config.baseUrl}/embeddings`;
109
- // 合并 AbortSignal:外部取消信号 + 超时信号(mergeAbortSignals 集中维护,ADR-017 枝叶层 2 次提取)
110
- // 确保用户取消和请求超时都能中断 fetch
111
- const timeoutMs = options?.timeoutMs ?? EmbeddingProvider.DEFAULT_TIMEOUT_MS;
112
- const abort = mergeAbortSignals(options?.signal, timeoutMs, 'Embedding 请求超时');
113
- try {
114
- let response;
115
- try {
116
- response = await fetch(url, {
117
- method: 'POST',
118
- headers: {
119
- 'Content-Type': 'application/json',
120
- Authorization: `Bearer ${this.config.apiKey}`,
121
- },
122
- body: JSON.stringify({
123
- model: this.config.model,
124
- input: uncached,
125
- }),
126
- signal: abort.signal,
127
- });
128
- }
129
- catch (err) {
130
- const e = toError(err);
131
- // 区分超时错误和网络错误
132
- if (e.name === 'AbortError' || e.name === 'TimeoutError') {
133
- throw networkError('Embedding 请求超时', `${url} 请求超过 ${timeoutMs / 1000}s 未响应`, ['检查网络连接稳定性', '如频繁超时,考虑调整 timeoutMs', '稍后重试'], e);
134
- }
135
- throw networkError('Embedding 服务连接失败', `无法访问 ${url}:${e.message}`, ['检查网络连接', '确认 baseUrl 配置正确'], e);
136
- }
137
- if (!response.ok) {
138
- const body = await response.text().catch(() => '');
139
- throw networkError('Embedding 请求失败', `HTTP ${response.status}: ${body.slice(0, 200)}`, [
140
- '检查 API Key 是否有效',
141
- '确认 embedding 模型名称正确',
142
- ]);
143
- }
144
- const data = (await response.json());
145
- // 按 index 排序(API 不保证顺序)
146
- const sorted = data.data.sort((a, b) => a.index - b.index);
147
- // 填充结果 + 更新缓存
148
- for (let i = 0; i < uncached.length; i++) {
149
- // 循环条件保证索引有效,null 检查兜底
150
- const text = uncached[i];
151
- if (!text)
152
- continue;
153
- const vector = sorted[i]?.embedding;
154
- if (!vector) {
155
- logger.warn({ text: text.slice(0, 50), index: i }, 'Embedding 缺失,跳过');
156
- continue;
157
- }
158
- this.setCache(text, vector);
159
- // null 检查兜底
160
- const idx = uncachedIndices[i];
161
- if (idx !== undefined)
162
- results[idx] = { text, vector };
163
- }
164
- return results.filter((r) => r !== null);
165
- }
166
- finally {
167
- // 统一清理:覆盖 HTTP 错误、空 body、正常完成所有路径
168
- abort.dispose();
169
- }
170
- }
171
- /**
172
- * 获取缓存大小(调试用)
173
- */
174
- get cacheSize() {
175
- return this.cache.size;
176
- }
177
- /**
178
- * 清空缓存
179
- */
180
- clearCache() {
181
- this.cache.clear();
182
- }
183
- }
184
- //# sourceMappingURL=embedding.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/llm/embedding.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- /**
2
- * 双通道融合排序 — 共享给 recall() 和 searchHybrid()
3
- *
4
- * 设计动机:
5
- * recall.ts 和 memoryInspector.ts 共用"向量通道 + 关键词通道合并排序"逻辑,
6
- * 集中到此模块实现单点维护。常量(RECALL_LIMIT_MULTIPLIER /
7
- * VECTOR_SCORE_WEIGHT / MEMORY_SCORE_WEIGHT)与算法同源,
8
- * agent 直接从本模块导入,不再绕道 recall.ts,遵守"agent 不依赖 memory
9
- * 内部常量"分层原则。
10
- *
11
- * 收益:
12
- * - 算法单点维护(排序权重调整只需改一处)
13
- * - 常量与算法同源,agent 直接从 hybridMerge 导入,不再绕道 recall.ts
14
- *
15
- * 详见 ADR-004 · 记忆统一模型 + architecture_philosophy_rules.md §6 增量召回
16
- */
17
- import type { Memory } from '../memory/types.js';
18
- /** 语义搜索召回倍率(在最终 limit 基础上多召回一些,供后续融合排序) */
19
- export declare const RECALL_LIMIT_MULTIPLIER = 2;
20
- /**
21
- * 双通道合并结果条目
22
- *
23
- * 一条记忆在合并 Map 中的状态:memory + 它在向量通道的相似度分数。
24
- * vectorScore = 0 表示该记忆仅来自关键词通道(未命中向量索引)。
25
- */
26
- export interface HybridMergeEntry {
27
- /** 记忆对象 */
28
- memory: Memory;
29
- /** 向量相似度分数(0~1,仅关键词命中时为 0) */
30
- vectorScore: number;
31
- }
32
- /**
33
- * 双通道融合排序的纯函数
34
- *
35
- * 算法:按 vectorScore * VECTOR_SCORE_WEIGHT + memory.score * MEMORY_SCORE_WEIGHT 降序排列,
36
- * 取前 limit 条。
37
- *
38
- * 输入:已去重的合并 Map 的 values(或任何可迭代的 HybridMergeEntry)
39
- * 输出:排序后的数组(前 limit 条)
40
- *
41
- * 共享消费者:
42
- * - recall.ts recall() — 召回时融合排序(+ boost + 写回存储)
43
- * - memoryInspector.ts searchHybrid() — 搜索时融合排序(→ AgentSearchHit)
44
- *
45
- * @param entries - 双通道合并后的条目(调用方负责去重)
46
- * @param limit - 返回数量上限
47
- * @returns 排序后的 HybridMergeEntry 数组
48
- */
49
- export declare function hybridMerge(entries: Iterable<HybridMergeEntry>, limit: number): HybridMergeEntry[];
50
- //# sourceMappingURL=hybridMerge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hybridMerge.d.ts","sourceRoot":"","sources":["../../src/memory/hybridMerge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAyBzC;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACnC,KAAK,EAAE,MAAM,GACZ,gBAAgB,EAAE,CASpB"}
@@ -1,51 +0,0 @@
1
- // ─── 融合排序常量 ─────────────────────────────────────
2
- /** 语义搜索召回倍率(在最终 limit 基础上多召回一些,供后续融合排序) */
3
- export const RECALL_LIMIT_MULTIPLIER = 2;
4
- /**
5
- * 综合排序时语义相似度权重(模块内部使用,非公共 API)
6
- *
7
- * 设计理由:向量通道权重高于记忆 score 通道(0.6 > 0.4),因为:
8
- * - 语义相似度由嵌入模型实时计算,反映查询与内容的语义相关性
9
- * - 记忆 score 受人工编辑、boost 衰减、初始默认值(0.5)等多因素影响,
10
- * 不确定性更高
11
- * - 但记忆 score 仍占 0.4 权重,用于:
12
- * 1) 抑制向量相似但 score 过低(用户从未认可)的边缘记忆
13
- * 2) 提升 score 高(频繁召回/人工标注重要)的记忆排名
14
- * - 0.6/0.4 而非 0.7/0.3 是为避免向量通道压倒性优势,保留 score 通道的话语权
15
- */
16
- const VECTOR_SCORE_WEIGHT = 0.6;
17
- /**
18
- * 综合排序时记忆 score 权重(模块内部使用,非公共 API)
19
- *
20
- * 与 VECTOR_SCORE_WEIGHT 互补(0.4 = 1 - 0.6),设计理由见 VECTOR_SCORE_WEIGHT 注释
21
- */
22
- const MEMORY_SCORE_WEIGHT = 0.4;
23
- // ─── 融合排序纯函数 ───────────────────────────────────
24
- /**
25
- * 双通道融合排序的纯函数
26
- *
27
- * 算法:按 vectorScore * VECTOR_SCORE_WEIGHT + memory.score * MEMORY_SCORE_WEIGHT 降序排列,
28
- * 取前 limit 条。
29
- *
30
- * 输入:已去重的合并 Map 的 values(或任何可迭代的 HybridMergeEntry)
31
- * 输出:排序后的数组(前 limit 条)
32
- *
33
- * 共享消费者:
34
- * - recall.ts recall() — 召回时融合排序(+ boost + 写回存储)
35
- * - memoryInspector.ts searchHybrid() — 搜索时融合排序(→ AgentSearchHit)
36
- *
37
- * @param entries - 双通道合并后的条目(调用方负责去重)
38
- * @param limit - 返回数量上限
39
- * @returns 排序后的 HybridMergeEntry 数组
40
- */
41
- export function hybridMerge(entries, limit) {
42
- return [...entries]
43
- .sort((a, b) => {
44
- // 综合分数 = 向量相似度 * 0.6 + 记忆 score * 0.4
45
- const scoreA = a.vectorScore * VECTOR_SCORE_WEIGHT + a.memory.score * MEMORY_SCORE_WEIGHT;
46
- const scoreB = b.vectorScore * VECTOR_SCORE_WEIGHT + b.memory.score * MEMORY_SCORE_WEIGHT;
47
- return scoreB - scoreA;
48
- })
49
- .slice(0, limit);
50
- }
51
- //# sourceMappingURL=hybridMerge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hybridMerge.js","sourceRoot":"","sources":["../../src/memory/hybridMerge.ts"],"names":[],"mappings":"AAkBA,mDAAmD;AAEnD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAiBhC,kDAAkD;AAElD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CACzB,OAAmC,EACnC,KAAa;IAEb,OAAO,CAAC,GAAG,OAAO,CAAC;SAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,sCAAsC;QACtC,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,GAAG,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC1F,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,GAAG,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC1F,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC"}
@@ -1,58 +0,0 @@
1
- /**
2
- * InMemoryRelationStore — 内存关系存储测试用实现
3
- *
4
- * 职责:
5
- * - 实现 IMemoryRelationStore 接口,纯内存数组存储
6
- * - 用于单元测试和开发环境验证,不持久化
7
- * - 与 InMemoryStorage 对齐,提供零 IO 的测试基座
8
- *
9
- * 设计原则(ADR-014):
10
- * - 零 native 依赖:纯 JS 数组操作
11
- * - 幂等添加:sourceId+targetId+type 三元组唯一,重复添加更新 weight/createdAt
12
- * - 方向过滤:getRelations 按 direction 参数过滤 sourceId/targetId
13
- *
14
- * 宿主项目应实现 SqliteRelationStore(依赖 better-sqlite3)用于生产环境。
15
- */
16
- import type { MemoryRelation, RelationDirection } from '../memory/types.js';
17
- import type { IMemoryRelationStore } from '../memory/relationStore.js';
18
- export declare class InMemoryRelationStore implements IMemoryRelationStore {
19
- /** 关系列表(内存数组,不持久化) */
20
- private readonly relations;
21
- /**
22
- * 添加关系
23
- *
24
- * 三元组唯一约束:sourceId+targetId+type 已存在时更新 weight/createdAt(幂等)。
25
- */
26
- addRelation(relation: MemoryRelation): void;
27
- /**
28
- * 查询某记忆的关系
29
- *
30
- * direction 控制方向过滤:
31
- * - 'outgoing':sourceId = memoryId
32
- * - 'incoming':targetId = memoryId
33
- * - 'both':合并两个方向并去重(基于对象引用)
34
- */
35
- getRelations(memoryId: string, direction?: RelationDirection): MemoryRelation[];
36
- /**
37
- * 按关系类型查询
38
- */
39
- getRelationsByType(type: string): MemoryRelation[];
40
- /**
41
- * 获取全部关系
42
- */
43
- getAllRelations(): MemoryRelation[];
44
- /**
45
- * 删除指定关系
46
- *
47
- * sourceId+targetId+type 唯一定位,删除单条关系。
48
- */
49
- removeRelation(sourceId: string, targetId: string, type: string): void;
50
- /**
51
- * 删除某记忆的所有关系(不论方向)
52
- *
53
- * 一次性过滤掉 sourceId 或 targetId 等于 memoryId 的所有关系边,
54
- * 防止记忆删除后留下孤儿边。
55
- */
56
- removeRelationsByMemoryId(memoryId: string): number;
57
- }
58
- //# sourceMappingURL=inMemoryRelationStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inMemoryRelationStore.d.ts","sourceRoot":"","sources":["../../src/memory/inMemoryRelationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAe3C;;;;;;;OAOG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,iBAA0B,GAAG,cAAc,EAAE;IAavF;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAIlD;;OAEG;IACH,eAAe,IAAI,cAAc,EAAE;IAInC;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAStE;;;;;OAKG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAWpD"}
@@ -1,80 +0,0 @@
1
- export class InMemoryRelationStore {
2
- /** 关系列表(内存数组,不持久化) */
3
- relations = [];
4
- /**
5
- * 添加关系
6
- *
7
- * 三元组唯一约束:sourceId+targetId+type 已存在时更新 weight/createdAt(幂等)。
8
- */
9
- addRelation(relation) {
10
- const existingIdx = this.relations.findIndex((r) => r.sourceId === relation.sourceId &&
11
- r.targetId === relation.targetId &&
12
- r.type === relation.type);
13
- if (existingIdx >= 0) {
14
- // 幂等更新:保留原位置,覆盖 weight 和 createdAt
15
- this.relations[existingIdx] = { ...relation };
16
- }
17
- else {
18
- this.relations.push({ ...relation });
19
- }
20
- }
21
- /**
22
- * 查询某记忆的关系
23
- *
24
- * direction 控制方向过滤:
25
- * - 'outgoing':sourceId = memoryId
26
- * - 'incoming':targetId = memoryId
27
- * - 'both':合并两个方向并去重(基于对象引用)
28
- */
29
- getRelations(memoryId, direction = 'both') {
30
- if (direction === 'outgoing') {
31
- return this.relations.filter((r) => r.sourceId === memoryId).map((r) => ({ ...r }));
32
- }
33
- if (direction === 'incoming') {
34
- return this.relations.filter((r) => r.targetId === memoryId).map((r) => ({ ...r }));
35
- }
36
- // 'both':合并两个方向(每条关系最多匹配一次,无需去重)
37
- return this.relations
38
- .filter((r) => r.sourceId === memoryId || r.targetId === memoryId)
39
- .map((r) => ({ ...r }));
40
- }
41
- /**
42
- * 按关系类型查询
43
- */
44
- getRelationsByType(type) {
45
- return this.relations.filter((r) => r.type === type).map((r) => ({ ...r }));
46
- }
47
- /**
48
- * 获取全部关系
49
- */
50
- getAllRelations() {
51
- return this.relations.map((r) => ({ ...r }));
52
- }
53
- /**
54
- * 删除指定关系
55
- *
56
- * sourceId+targetId+type 唯一定位,删除单条关系。
57
- */
58
- removeRelation(sourceId, targetId, type) {
59
- const idx = this.relations.findIndex((r) => r.sourceId === sourceId && r.targetId === targetId && r.type === type);
60
- if (idx >= 0) {
61
- this.relations.splice(idx, 1);
62
- }
63
- }
64
- /**
65
- * 删除某记忆的所有关系(不论方向)
66
- *
67
- * 一次性过滤掉 sourceId 或 targetId 等于 memoryId 的所有关系边,
68
- * 防止记忆删除后留下孤儿边。
69
- */
70
- removeRelationsByMemoryId(memoryId) {
71
- const before = this.relations.length;
72
- const remaining = this.relations.filter((r) => r.sourceId !== memoryId && r.targetId !== memoryId);
73
- const removed = before - remaining.length;
74
- // 直接替换数组引用,避免 splice 在循环中性能问题
75
- this.relations.length = 0;
76
- this.relations.push(...remaining);
77
- return removed;
78
- }
79
- }
80
- //# sourceMappingURL=inMemoryRelationStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inMemoryRelationStore.js","sourceRoot":"","sources":["../../src/memory/inMemoryRelationStore.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- /**
2
- * 记忆加载器
3
- *
4
- * 职责:把文件系统的记忆(personas/rules/skills)加载到 SQLite 索引
5
- * 启动时:扫描文件 → 写入索引 → 按 source 召回必召记忆
6
- *
7
- * 这是"万物皆记忆"哲学的代码体现——所有记忆共享同一条加载管线
8
- */
9
- import type { FileStore } from '../memory/store.js';
10
- import type { IMemoryStorage } from '../memory/storageInterface.js';
11
- import { type Memory } from '../memory/types.js';
12
- export interface LoadResult {
13
- /** 实际加载到索引的记忆数量 */
14
- loaded: number;
15
- /** 跳过的记忆(解析失败等) */
16
- skipped: number;
17
- /** 加载失败的详情 */
18
- errors: Array<{
19
- file: string;
20
- error: string;
21
- }>;
22
- /** 本次加载写入索引的记忆 ID(供调用方追踪项目级记忆以支持关闭时撤销) */
23
- loadedIds?: string[];
24
- }
25
- export declare class MemoryLoader {
26
- private readonly fileStore;
27
- private readonly index;
28
- constructor(fileStore: FileStore, index: IMemoryStorage);
29
- /**
30
- * 扫描所有"配置类"记忆文件(persona/rule/skill)
31
- * 写入 SQLite 索引
32
- *
33
- * @returns 加载结果统计
34
- */
35
- loadAllToIndex(): Promise<LoadResult>;
36
- /**
37
- * 启动时的完整引导流程
38
- * 1. 扫描配置文件 → 写入索引
39
- * 2. 从索引按 source 召回必召记忆(rule + skill)
40
- *
41
- * 注:persona 记忆由 PersonaManager 单独处理,
42
- * bootstrap 中自动跳过 persona(避免与 systemPromptPrefix 中的角色 prompt 重复)。
43
- *
44
- * @returns 启动时必召的所有记忆(用于初始化 Agent Loop 的 system prompt)
45
- */
46
- bootstrap(): Promise<{
47
- memories: Memory[];
48
- loadResult: LoadResult;
49
- }>;
50
- }
51
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/memory/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA6B/D,MAAM,WAAW,UAAU;IACzB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,cAAc;IAGxC;;;;;OAKG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IAuC3C;;;;;;;;;OASG;IACG,SAAS,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC;CAW3E"}
@@ -1,100 +0,0 @@
1
- import { SOURCE_LABELS } from '../memory/types.js';
2
- import { toError } from '../utils/toError.js';
3
- /**
4
- * 启动时全量扫描的 source 列表
5
- * - insight/profile/work-projection:运行时产生,不由 FileStore 管理
6
- * - tool:由 registerTool() 注册为 tool_call,不再重复注入 system prompt
7
- * - guardrail:由 AgentLoop 运行时读取,不注入 system prompt
8
- */
9
- const STARTUP_SCAN_SOURCES = [
10
- SOURCE_LABELS.PERSONA,
11
- SOURCE_LABELS.RULE,
12
- SOURCE_LABELS.SKILL,
13
- SOURCE_LABELS.GUARDRAIL,
14
- ];
15
- /**
16
- * 判断内容是否为空壳模板(仅含标题和 blockquote 占位说明)
17
- * 新建项目时的空壳规则模板属于此类
18
- *
19
- * 判断逻辑:过滤掉标题行和空行后,剩余内容全部是 blockquote 行
20
- */
21
- function isPlaceholderContent(memory) {
22
- const trimmed = memory.content.trim();
23
- if (trimmed.length > 200)
24
- return false;
25
- const lines = trimmed.split('\n').filter(l => l.trim() && !l.trim().startsWith('#'));
26
- return lines.length > 0 && lines.every(l => l.trim().startsWith('>'));
27
- }
28
- export class MemoryLoader {
29
- fileStore;
30
- index;
31
- constructor(fileStore, index) {
32
- this.fileStore = fileStore;
33
- this.index = index;
34
- }
35
- /**
36
- * 扫描所有"配置类"记忆文件(persona/rule/skill)
37
- * 写入 SQLite 索引
38
- *
39
- * @returns 加载结果统计
40
- */
41
- async loadAllToIndex() {
42
- const result = { loaded: 0, skipped: 0, errors: [], loadedIds: [] };
43
- for (const source of STARTUP_SCAN_SOURCES) {
44
- const names = await this.fileStore.list(source);
45
- for (const name of names) {
46
- try {
47
- const memory = await this.fileStore.read(source, name);
48
- if (!memory) {
49
- result.skipped++;
50
- continue;
51
- }
52
- // 跳过空壳模板(新建项目时的占位文件,无实质规则内容)
53
- if (isPlaceholderContent(memory)) {
54
- result.skipped++;
55
- continue;
56
- }
57
- // 从磁盘重新加载 = 以文件为权威源恢复记忆。若此前该记忆已被软删除
58
- // (如 closeProject 撤销项目记忆),必须先 restore 再 upsert——
59
- // IMemoryStorage.upsert 明确禁止「以活跃态覆盖软删除态」复活,
60
- // 否则 closeProject 后重新打开同一项目时记忆会因 upsert 抛错被静默跳过而永久丢失。
61
- // restore 对活跃/不存在记忆为 no-op,不影响正常加载路径。
62
- this.index.restore(memory.id);
63
- this.index.upsert(memory);
64
- result.loaded++;
65
- result.loadedIds.push(memory.id);
66
- }
67
- catch (err) {
68
- result.skipped++;
69
- result.errors.push({
70
- file: `${source}/${name}`,
71
- error: toError(err).message,
72
- });
73
- }
74
- }
75
- }
76
- return result;
77
- }
78
- /**
79
- * 启动时的完整引导流程
80
- * 1. 扫描配置文件 → 写入索引
81
- * 2. 从索引按 source 召回必召记忆(rule + skill)
82
- *
83
- * 注:persona 记忆由 PersonaManager 单独处理,
84
- * bootstrap 中自动跳过 persona(避免与 systemPromptPrefix 中的角色 prompt 重复)。
85
- *
86
- * @returns 启动时必召的所有记忆(用于初始化 Agent Loop 的 system prompt)
87
- */
88
- async bootstrap() {
89
- const loadResult = await this.loadAllToIndex();
90
- // 按 source 获取 rule 和 skill 记忆(跳过 persona,由 PersonaManager 单独管理)
91
- const rules = this.index.getBySource(SOURCE_LABELS.RULE);
92
- const skills = this.index.getBySource(SOURCE_LABELS.SKILL);
93
- const memories = [...rules, ...skills];
94
- return {
95
- memories,
96
- loadResult,
97
- };
98
- }
99
- }
100
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/memory/loader.ts"],"names":[],"mappings":"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"}