@zooique/memora 2.0.0 → 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 -0
  3. package/README.md +303 -148
  4. package/config.example.json +43 -0
  5. package/dist/agent/agent.d.ts +438 -295
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +1368 -836
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/assembler.d.ts +117 -39
  10. package/dist/agent/assembler.d.ts.map +1 -1
  11. package/dist/agent/assembler.js +574 -71
  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 +229 -17
  18. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  19. package/dist/agent/builtinToolHandlers.js +758 -70
  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 +139 -18
  30. package/dist/agent/constants.d.ts.map +1 -1
  31. package/dist/agent/constants.js +154 -18
  32. package/dist/agent/constants.js.map +1 -1
  33. package/dist/agent/contextManager.d.ts +126 -76
  34. package/dist/agent/contextManager.d.ts.map +1 -1
  35. package/dist/agent/contextManager.js +197 -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 +718 -253
  50. package/dist/agent/loop.d.ts.map +1 -1
  51. package/dist/agent/loop.js +2215 -648
  52. package/dist/agent/loop.js.map +1 -1
  53. package/dist/agent/managers/archiveCoordinator.d.ts +21 -74
  54. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  55. package/dist/agent/managers/archiveCoordinator.js +32 -105
  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 +85 -0
  62. package/dist/agent/managers/dedupManager.d.ts.map +1 -0
  63. package/dist/agent/managers/dedupManager.js +248 -0
  64. package/dist/agent/managers/dedupManager.js.map +1 -0
  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 +21 -0
  74. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
  75. package/dist/agent/managers/llmJudgeHelper.js +32 -0
  76. package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
  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 +56 -192
  84. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  85. package/dist/agent/managers/memoryGovernance.d.ts +24 -0
  86. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
  87. package/dist/agent/managers/memoryGovernance.js +46 -0
  88. package/dist/agent/managers/memoryGovernance.js.map +1 -0
  89. package/dist/agent/managers/memoryInspector.d.ts +59 -393
  90. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  91. package/dist/agent/managers/memoryInspector.js +92 -736
  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 -63
  98. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  99. package/dist/agent/managers/sessionArchiver.js +83 -157
  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 +20 -0
  110. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
  111. package/dist/agent/managers/streamAccumulator.js +15 -0
  112. package/dist/agent/managers/streamAccumulator.js.map +1 -0
  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 +12 -47
  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 +57 -87
  122. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  123. package/dist/agent/managers/workProjection.js +166 -246
  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 +255 -9
  158. package/dist/agent/toolExecutor.d.ts.map +1 -1
  159. package/dist/agent/toolExecutor.js +956 -20
  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 +512 -162
  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 +59 -242
  198. package/dist/config/loader.d.ts.map +1 -1
  199. package/dist/config/loader.js +237 -194
  200. package/dist/config/loader.js.map +1 -1
  201. package/dist/index.d.ts +69 -74
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +93 -63
  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 +29 -25
  210. package/dist/llm/factory.d.ts.map +1 -1
  211. package/dist/llm/factory.js +34 -69
  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 +181 -129
  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 -29
  226. package/dist/logging/logger.d.ts.map +1 -1
  227. package/dist/logging/logger.js +43 -233
  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 +17 -0
  236. package/dist/memory/governance.d.ts.map +1 -0
  237. package/dist/memory/governance.js +17 -0
  238. package/dist/memory/governance.js.map +1 -0
  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 +26 -141
  252. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  253. package/dist/memory/inMemoryStorage.js +48 -187
  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 +7 -2
  260. package/dist/memory/lockManager.d.ts.map +1 -1
  261. package/dist/memory/lockManager.js +35 -11
  262. package/dist/memory/lockManager.js.map +1 -1
  263. package/dist/memory/projectManager.d.ts +30 -128
  264. package/dist/memory/projectManager.d.ts.map +1 -1
  265. package/dist/memory/projectManager.js +39 -171
  266. package/dist/memory/projectManager.js.map +1 -1
  267. package/dist/memory/projectRegistry.d.ts +22 -37
  268. package/dist/memory/projectRegistry.d.ts.map +1 -1
  269. package/dist/memory/projectRegistry.js +78 -85
  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 +18 -9
  284. package/dist/memory/sourceValidation.d.ts.map +1 -1
  285. package/dist/memory/sourceValidation.js +35 -29
  286. package/dist/memory/sourceValidation.js.map +1 -1
  287. package/dist/memory/storageInterface.d.ts +45 -126
  288. package/dist/memory/storageInterface.d.ts.map +1 -1
  289. package/dist/memory/types.d.ts +82 -168
  290. package/dist/memory/types.d.ts.map +1 -1
  291. package/dist/memory/types.js +116 -79
  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 +127 -56
  342. package/dist/skill/skillManager.d.ts.map +1 -1
  343. package/dist/skill/skillManager.js +318 -163
  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 -17
  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 +79 -0
  366. package/dist/utils/configResourceManager.d.ts.map +1 -0
  367. package/dist/utils/configResourceManager.js +150 -0
  368. package/dist/utils/configResourceManager.js.map +1 -0
  369. package/dist/utils/errors.d.ts +48 -56
  370. package/dist/utils/errors.d.ts.map +1 -1
  371. package/dist/utils/errors.js +60 -58
  372. package/dist/utils/errors.js.map +1 -1
  373. package/dist/utils/eventEmitter.d.ts +141 -63
  374. package/dist/utils/eventEmitter.d.ts.map +1 -1
  375. package/dist/utils/eventEmitter.js +50 -35
  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 +6 -5
  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 +34 -1
  396. package/dist/utils/math.d.ts.map +1 -1
  397. package/dist/utils/math.js +47 -14
  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 -29
  416. package/dist/utils/segmenter.d.ts.map +1 -1
  417. package/dist/utils/segmenter.js +230 -88
  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 +1175 -0
  458. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +843 -0
  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 -83
  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 -47
  503. package/dist/agent/guardrail.d.ts.map +0 -1
  504. package/dist/agent/guardrail.js +0 -51
  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 -150
  509. package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
  510. package/dist/agent/managers/configManager.d.ts +0 -125
  511. package/dist/agent/managers/configManager.d.ts.map +0 -1
  512. package/dist/agent/managers/configManager.js +0 -194
  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 -198
  519. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
  520. package/dist/agent/managers/memoryDecayScheduler.js +0 -349
  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 -81
  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 -67
  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 -54
  551. package/dist/memory/hybridMerge.d.ts.map +0 -1
  552. package/dist/memory/hybridMerge.js +0 -36
  553. package/dist/memory/hybridMerge.js.map +0 -1
  554. package/dist/memory/inMemoryRelationStore.d.ts +0 -51
  555. package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
  556. package/dist/memory/inMemoryRelationStore.js +0 -65
  557. package/dist/memory/inMemoryRelationStore.js.map +0 -1
  558. package/dist/memory/loader.d.ts +0 -49
  559. package/dist/memory/loader.d.ts.map +0 -1
  560. package/dist/memory/loader.js +0 -93
  561. package/dist/memory/loader.js.map +0 -1
  562. package/dist/memory/recall.d.ts +0 -66
  563. package/dist/memory/recall.d.ts.map +0 -1
  564. package/dist/memory/recall.js +0 -142
  565. package/dist/memory/recall.js.map +0 -1
  566. package/dist/memory/relationStore.d.ts +0 -78
  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 -50
  571. package/dist/memory/store.d.ts.map +0 -1
  572. package/dist/memory/store.js +0 -161
  573. package/dist/memory/store.js.map +0 -1
  574. package/dist/memory/userProfile.d.ts +0 -156
  575. package/dist/memory/userProfile.d.ts.map +0 -1
  576. package/dist/memory/userProfile.js +0 -320
  577. package/dist/memory/userProfile.js.map +0 -1
  578. package/dist/memory/vectorStore.d.ts +0 -185
  579. package/dist/memory/vectorStore.d.ts.map +0 -1
  580. package/dist/memory/vectorStore.js +0 -257
  581. package/dist/memory/vectorStore.js.map +0 -1
  582. package/dist/persona/personaManager.d.ts +0 -160
  583. package/dist/persona/personaManager.d.ts.map +0 -1
  584. package/dist/persona/personaManager.js +0 -414
  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
package/README.md CHANGED
@@ -1,148 +1,303 @@
1
- # Memora
2
-
3
- > 通用 Agent 内核 — 本地、私有、领域无关,万物皆记忆
4
-
5
- [![npm](https://img.shields.io/npm/v/@zooique/memora)](https://www.npmjs.com/package/@zooique/memora)
6
- [![Node.js](https://img.shields.io/badge/Node.js-22%20LTS-339933)](https://nodejs.org)
7
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue)](https://www.typescriptlang.org)
8
- [![License](https://img.shields.io/badge/license-MIT-yellow)](LICENSE)
9
-
10
- ## 设计哲学
11
-
12
- > **万物皆是记忆。**
13
- >
14
- > 除了用户当前直接输入的提示词内容,Agent 的一切都是记忆——人格是"我记得我是谁",规则是"我记得该怎么做事",技能是"我记得怎么做某类事",对话历史是"我记得之前聊过什么"。
15
-
16
- Memora 是一个**无法独立运行**的智能大脑内核——它只有接口,没有"形态"。CLI、WebUI、桌面精灵、小说生成器都是它的"宿主",宿主负责给它身体(UI)、血管(Provider)、神经网络(事件回路)。
17
-
18
- ## 核心能力
19
-
20
- - **长期记忆沉淀**——跨会话、跨话题的记忆持久化与智能召回
21
- - **Agent 与角色分离**——Agent 是纯记忆引擎,角色是人格载体。换角色不丢记忆
22
- - **记忆统一模型**——角色、规则、技能、对话历史全部统一为「记忆」,通过 `source` 开放字符串区分
23
- - **领域可插拔**——同一套架构,加载不同记忆配置即可适配不同领域
24
- - **零依赖内核**——核心层仅依赖 `zod`,持久化由宿主通过接口注入
25
-
26
- ## 快速开始
27
-
28
- ### 安装
29
-
30
- ```bash
31
- npm install @zooique/memora
32
- ```
33
-
34
- ### 创建 Agent
35
-
36
- ```typescript
37
- import { Agent, createLlmProvider } from '@zooique/memora';
38
-
39
- // 宿主职责:创建 LLM Provider
40
- const provider = createLlmProvider({
41
- provider: 'openaiCompatible',
42
- apiKey: process.env.LLM_API_KEY!,
43
- baseUrl: 'https://api.deepseek.com/v1',
44
- model: 'deepseek-chat',
45
- });
46
-
47
- // 创建 Agent
48
- const agent = new Agent({
49
- projectPath: '/path/to/project',
50
- provider,
51
- configDir: '/path/to/agent-config', // personas / rules / skills
52
- // dataDir 默认为 '~/.memora',此处显式指定项目级目录
53
- dataDir: '.memora',
54
- });
55
-
56
- await agent.init();
57
- ```
58
-
59
- ### 对话
60
-
61
- ```typescript
62
- // 流式对话
63
- for await (const chunk of agent.chat('你好')) {
64
- if (chunk.type === 'text') {
65
- process.stdout.write(chunk.content);
66
- }
67
- }
68
-
69
- // 同步对话(测试用)
70
- const reply = await agent.chatSync('你好');
71
- ```
72
-
73
- ### 关闭
74
-
75
- ```typescript
76
- await agent.close();
77
- ```
78
-
79
- ## 架构
80
-
81
- ```
82
- ┌────────────────────────────────────────────────────────────┐
83
- │ 宿主程序(CLI / 桌面精灵 / 小说生成器 / WebUI) │
84
- │ ┌─────────────────┐ ┌──────────────────┐ │
85
- │ │ LLM Provider 实例 │◄───│ API Key / baseUrl │ ← 宿主职责 │
86
- │ └────────┬────────┘ └──────────────────┘ │
87
- │ │ 注入 │
88
- │ ▼ │
89
- │ ┌──────────────────────────────────────────┐ │
90
- │ │ Memora 内核(Agent) │ │
91
- │ │ - chat(input) → 流式响应 │ │
92
- │ │ - 记忆搜索 / 归档 / 挂载 │ │
93
- │ │ - 角色匹配 / 技能匹配 │ │
94
- │ │ - 工具注册 / 工具执行 │ │
95
- │ └──────────────────────────────────────────┘ │
96
- └────────────────────────────────────────────────────────────┘
97
- ```
98
-
99
- ## 项目结构
100
-
101
- ```
102
- src/
103
- ├── index.ts # 库导出入口(纯类型 + 接口导出,无 CLI)
104
- ├── agent/ # Agent 门面 + AgentLoop + 工具执行 + managers/(13 个专职 Manager)
105
- ├── memory/ # 记忆引擎(IMemoryStorage + IMemoryRelationStore + 召回 + 向量存储)
106
- ├── persona/ # 角色管理
107
- ├── skill/ # 技能管理
108
- ├── llm/ # LLM 适配层
109
- ├── security/ # 安全策略
110
- ├── config/ # 配置加载
111
- ├── logging/ # 日志(ILogger 接口 + console fallback)
112
- ├── eval/ # 评估框架(EvalScenario + EvalRunner,CI 回归测试用)
113
- └── utils/ # 工具函数(含 eventEmitter.ts 事件系统)
114
- ```
115
-
116
- ## 技术栈
117
-
118
- | 类别 | 选型 | 决策 |
119
- |------|------|------|
120
- | 运行时 | Node.js ≥ 22 LTS + TypeScript 5 strict + ESM | ADR-001 |
121
- | 数据层 | IMemoryStorage 接口(宿主注入持久化实现) | ADR-002 |
122
- | LLM | OpenAI Chat Completions 兼容协议 | ADR-003 |
123
- | 形态 | 纯逻辑库(CLI 由宿主提供) | ADR-002 |
124
- | 安全 | 两级权限 + 路径白名单 | ADR-006 |
125
- | 测试 | Vitest + MSW Mock LLM + InMemoryStorage | ADR-007 |
126
-
127
- ## 开发命令
128
-
129
- ```bash
130
- npm test # 运行测试
131
- npm run test:cov # 运行测试 + 覆盖率
132
- npm run typecheck # TypeScript 类型检查
133
- npm run lint # ESLint 检查
134
- ```
135
-
136
- ## 文档
137
-
138
- 详细接入指南与 API 参考文档随源码提供。本包核心使用方式见上文「快速开始」。
139
-
140
- 技术决策记录(ADR)目前为内部文档,不随 npm 包分发。
141
-
142
- ## 贡献
143
-
144
- 本项目遵循"大树模型"工程哲学。
145
-
146
- ## 许可证
147
-
148
- MIT
1
+ # Memora
2
+
3
+ > **带治理能力的 Agent 记忆内核** — 本地、私有、零依赖。不是框架,是内核。
4
+
5
+ [![npm](https://img.shields.io/npm/v/@zooique/memora)](https://www.npmjs.com/package/@zooique/memora)
6
+ [![Node.js](https://img.shields.io/badge/Node.js-22%20LTS-339933)](https://nodejs.org)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue)](https://www.typescriptlang.org)
8
+ [![Coverage](https://img.shields.io/badge/coverage-covered-brightgreen)](https://vitest.dev)
9
+ [![Tests](https://img.shields.io/badge/tests-2700%2B%20passed-brightgreen)](https://vitest.dev)
10
+ [![Dependencies](https://img.shields.io/badge/runtime%20deps-0-yellowgreen)](package.json)
11
+ [![License](https://img.shields.io/badge/license-MIT-yellow)](LICENSE)
12
+
13
+ **English** → [README.en.md](./README.en.md)
14
+
15
+ ---
16
+
17
+ ## 你遇到了什么问题?
18
+
19
+ - **LLM 每次对话都从零开始** — 用户记得上次聊过什么,Agent 不记得
20
+ - **现有记忆方案要么太重(框架绑定)要么太浅(只有 CRUD)** — 缺少去重、冲突检测、写时取代等治理能力
21
+ - **记忆和角色混在一起** — 换个角色人格,历史记忆也跟着丢了
22
+ - **数据不想上云** — 需要一个本地、私有、不依赖外部服务的记忆层
23
+
24
+ ## Memora 怎么解决
25
+
26
+ Memora 是一个 **Agent 记忆内核**——不绑定任何框架,不依赖任何云服务,专注于一件事:**让 Agent 拥有跨会话、跨话题的长期记忆,并且记忆是干净的。**
27
+
28
+ "干净"意味着:语义去重、冲突检测、写时取代(supersede)、命中即刷新最近使用(`accessedAt`,参与排序)——**不对记忆做重要度加权**,也不是简单地把历史堆进上下文窗口。
29
+
30
+ ```typescript
31
+ import { Agent, createProviderFromConfig } from '@zooique/memora';
32
+
33
+ const agent = new Agent({
34
+ projectPath: '/your/project',
35
+ dataDir: '/your/project/.memora-data', // 记忆数据目录(必填)
36
+ provider: createProviderFromConfig('primary', {
37
+ provider: 'openaiCompatible',
38
+ apiKey: process.env.LLM_API_KEY!,
39
+ baseUrl: 'https://api.openai.com/v1',
40
+ model: 'gpt-4o',
41
+ }),
42
+ });
43
+ await agent.init();
44
+
45
+ // 对话 — 记忆自动沉淀
46
+ for await (const chunk of agent.chat('我喜欢 TypeScript')) {
47
+ process.stdout.write(chunk.content);
48
+ }
49
+
50
+ // 下次对话 — LLM 可自行调用 search_memories 取回这条记忆
51
+ const reply = await agent.chatSync('我喜欢什么语言?');
52
+
53
+ // 记忆治理 — 语义去重 / 冲突检测 / 来源健康诊断
54
+ await agent.governance.deduplicate();
55
+ await agent.governance.detectConflicts();
56
+ const health = agent.governance.sourceHealth();
57
+
58
+ await agent.close();
59
+ ```
60
+
61
+ > **边界声明**:memora 是**不可独立运行的纯逻辑内核**——持久化 / 沙箱 / 可观测 / CLI·UI 均由宿主注入。内核保证**接口契约 + 单测验证的逻辑正确性**,agent 级行为评估由宿主自行承担。
62
+
63
+ > **零依赖如何成立(2026-09-21 审计)**:「零依赖」特指**零第三方运行时依赖**。内核仅使用 Node 内置模块(`node:fs` / `node:path` / `node:crypto` / `node:os` / `node:child_process`),6 类共见于 18 个生产文件,全部必要、无冗余。文件落盘(记忆 / 角色包 / 原子写 / 技能脚本执行)走**接口 + 内存默认实现**(如 `ISessionStore` → `InMemorySessionStore`),持久化 sink 交由宿主注入 `WorkspaceSessionStore` 等实现替换——这既支撑「本地、私有、零依赖」卖点,也遵守「持久化由宿主注入」边界。
64
+
65
+ ---
66
+
67
+ ## 为什么选择 Memora?
68
+
69
+ | | Memora | 向量记忆库 (agent-memory, MemStack) | 框架内置记忆 (Mastra, LangGraph) |
70
+ |---|---|---|---|
71
+ | **记忆治理** | ✅ 去重+冲突+写时取代 | ⚠️ 仅衰减或无治理 | ⚠️ 部分支持 |
72
+ | **框架绑定** | ✅ 零绑定,纯内核 | ✅ 独立 | ❌ 绑定特定框架 |
73
+ | **数据隐私** | ✅ 100% 本地 | ✅ 本地 | ⚠️ 部分云端 |
74
+ | **运行时依赖** | ✅ 零(仅 node:*) | ❌ SQLite / better-sqlite3 | ❌ 重依赖 |
75
+ | **角色/记忆分离** | ✅ 角色包边界纪律 | ❌ 无角色概念 | ⚠️ 简单 prompt |
76
+ | **Embeddable** | ✅ 任何 Node.js 宿主 | ✅ 独立库 | ❌ 框架内使用 |
77
+
78
+ **一句话定位**:如果你想要一个**不绑定框架、有治理能力、零依赖**的 memory + agent 内核,Memora 有清晰的差异化——它不是一个记忆 server / CLI / MCP 工具,而是一个可嵌入宿主、含完整执行闭环(loop / 工具 / 上下文 / 角色包 / 记忆即摘要)的纯逻辑内核。
79
+
80
+ > **生态定位(2026-09-21 实证)**:npm 上 agent 类包已分两轴——**引擎轴**(loop/工具执行:`@ownware/loom`、`@hbbio/nanoagent`、`@imzx/imzx`、`thoth-agent` 等)与**记忆层轴**(`@agentmemory/agentmemory`、`mem0`、`flair`、`honcho`、`engram`、`agentic-memory` 等)。Memora 同时触及两轴,但**具体组合无人占据**:① 引擎轴同等竞品均有运行时依赖或绑定特定 runtime(loom=7 deps、imzx=11 deps、nanoagent 绑定 bun),而 Memora 是**纯 Node 零第三方运行时依赖**;② 记忆层包(engram / agentic-memory 等)只做记忆,**不提供执行内核**;③ 引擎轴包(loom 等)只做**会话内**上下文 / checkpoint,**没有跨会话被治理的长期记忆**(内存治理:去重 / 冲突检测 / supersede 写时取代 / 角色包隔离)。**护城河 = 治理型长期记忆 + 角色包隔离,以纯 Node 零依赖、宿主内嵌形态交付**。引擎轴上有 [loom](https://www.npmjs.com/package/@ownware/loom) 这样的强对手,不应与其在「引擎」轴上对拼;竞争力聚焦在「被治理的记忆 + 角色包」这一 layer。
81
+
82
+ > **可被复用去开发 Agent(是)**:Memora 生来就是**宿主注入型的内核库**——`Agent` 门面 + `loop` 执行闭环 + 工具注入接口(web_search / web_fetch / run_code / search_project)+ `createProviderFromConfig`(可接任意 OpenAI 兼容 LLM),任何 Node.js 宿主都能用它搭出**带记忆和角色的自有 Agent**(聊天框、桌面精灵、文档助理、运算 worker……)。这正是设计意图:它只有接口、没有形态,形态由宿主定义。唯一前提是宿主需提供持久化 / 沙箱 / UI 等外围(内核不内置 sink)。
83
+
84
+ ---
85
+
86
+ ## 设计哲学
87
+
88
+ > **摘要即记忆(memory-as-summary)。**
89
+ >
90
+ > 对话即原料:每轮 turn 结束后异步生成一条轮次摘要(round-summary),它是唯一记忆单元;原始对话记录独立存储,经 `sessionName + roundId` 溯源可回溯。人格 / 规则 / 技能归角色包,不进记忆库(见 memory-role-pack-boundary-rules.md)。
91
+
92
+ Memora 是一个**无法独立运行**的智能大脑内核——它只有接口,没有"形态"。CLI、WebUI、桌面精灵、小说生成器都是它的"宿主",宿主负责给它身体(UI)、血管(Provider)、神经网络(事件回路)。
93
+
94
+ > **版本定位(v3.0.0)**:**Node.js 专属 · 零第三方运行时依赖的 Agent 内核**。3.0.0 是架构收敛后的第一个稳定基线,API 与结构以 3.0.0 为准。
95
+
96
+ ---
97
+
98
+ ## 核心能力
99
+
100
+ | 能力 | 说明 |
101
+ |------|------|
102
+ | **长期记忆沉淀** | 跨会话、跨话题的记忆持久化 + 工具化召回(`search_memories`;**不自动注入**) |
103
+ | **记忆检索工具** | 纯关键词检索(`search_memories`),命中刷新 `accessedAt`(语义向量通道已随 B0 收编,2026-09-18) |
104
+ | **记忆治理** | supersede 写时取代 + 命中刷新(`accessedAt` 参与排序,**不做重要度加权**)+ 语义去重 + 冲突检测,经 `agent.governance` 门面暴露(去重 / 冲突由 LLM 判断) |
105
+ | **Agent 与角色分离** | Agent 是纯记忆引擎,角色是人格载体。换角色不丢记忆 |
106
+ | **统一记忆模型** | 一切统一为「记忆」,通过 `source` 开放字符串区分,无封闭枚举 |
107
+ | **领域可插拔** | 同一套架构,加载不同记忆配置即可适配不同领域 |
108
+ | **零第三方依赖内核** | 依赖 Node.js 内置 `node:*` 模块,持久化由宿主通过接口注入 |
109
+ | **可观测性** | ITracer 接口 + 结构化 span,宿主可接入任意 APM |
110
+ | **外部世界工具** | 条件性暴露 `web_search` / `web_fetch` / `run_code`——宿主注入对应 provider 才启用 |
111
+
112
+ ## 快速开始
113
+
114
+ ### 安装
115
+
116
+ ```bash
117
+ npm install @zooique/memora
118
+ ```
119
+
120
+ ### 创建 Agent
121
+
122
+ ```typescript
123
+ import { Agent, createProviderFromConfig } from '@zooique/memora';
124
+
125
+ // 宿主职责:创建 LLM Provider(兼容所有 OpenAI Chat Completions 协议的服务)
126
+ // createProviderFromConfig 是唯一规范入口(baseUrl+model+apiKey → 校验后创建,provider 选择策略归宿主);
127
+ // createLlmProvider(loadConfig()) 仅当你把整份 Config 托管给内核时用作便利(active 选择在内核侧)。
128
+ const provider = createProviderFromConfig('primary', {
129
+ provider: 'openaiCompatible',
130
+ apiKey: process.env.LLM_API_KEY!,
131
+ baseUrl: 'https://api.xiaomimimo.com/v1',
132
+ model: 'deepseek-chat',
133
+ });
134
+
135
+ // 创建 Agent
136
+ const agent = new Agent({
137
+ projectPath: '/path/to/project',
138
+ provider,
139
+ configDir: '/path/to/agent-config', // role-packs / skills
140
+ dataDir: '/path/to/project/.memora-data', // 记忆数据存储目录(必填,建议绝对路径)
141
+ });
142
+
143
+ await agent.init();
144
+ ```
145
+
146
+ ### 对话(流式)
147
+
148
+ ```typescript
149
+ for await (const chunk of agent.chat('你好,记住我喜欢 TypeScript')) {
150
+ if (chunk.type === 'text') {
151
+ process.stdout.write(chunk.content);
152
+ }
153
+ }
154
+
155
+ // 下一次对话,LLM 可自行调用 search_memories 取回"喜欢 TypeScript"这条记忆
156
+ const reply = await agent.chatSync('我喜欢什么语言?');
157
+ // → LLM 检索后基于召回结果回答
158
+ ```
159
+
160
+ ### 记忆管理
161
+
162
+ ```typescript
163
+ // 搜索记忆(limit 为数字)
164
+ const hits = await agent.memory.searchByKeyword('TypeScript 偏好', 5);
165
+
166
+ // 记忆治理(经 agent.governance 门面委托暴露,LLM 判断)
167
+ const report = await agent.governance.deduplicate();
168
+ console.log(`去重 ${report.deduplicatedCount} 条`);
169
+
170
+ const conflicts = await agent.governance.detectConflicts();
171
+
172
+ // 来源健康诊断(纯计算,不调 LLM):逐 source 统计数量 / 距最近访问天数(score 退役后仅存事实观测)
173
+ const health = agent.governance.sourceHealth();
174
+ console.log(health?.sources);
175
+ ```
176
+
177
+ ### 关闭
178
+
179
+ ```typescript
180
+ await agent.close();
181
+ ```
182
+
183
+ ## 架构
184
+
185
+ ```
186
+ ┌────────────────────────────────────────────────────────────┐
187
+ │ 宿主程序(CLI / 桌面精灵 / 小说生成器 / WebUI) │
188
+ │ ┌─────────────────┐ ┌──────────────────┐ │
189
+ │ │ LLM Provider 实例 │◄───│ API Key / baseUrl │ ← 宿主职责 │
190
+ │ └────────┬────────┘ └──────────────────┘ │
191
+ │ │ 注入 │
192
+ │ ▼ │
193
+ │ ┌──────────────────────────────────────────┐ │
194
+ │ │ Memora 内核(Agent) │ │
195
+ │ │ - chat(input) → 流式响应 │ │
196
+ │ │ - 纯关键词记忆检索(search_memories) │ │
197
+ │ │ - 记忆治理机制(去重/冲突/写时取代) │ │
198
+ │ │ - 角色 / 技能匹配(渐进披露) │ │
199
+ │ │ - 工具注册 / 工具执行 / 反思重试 │ │
200
+ │ │ - 会话归档 / 轮次持久化 │ │
201
+ │ └──────────────────────────────────────────┘ │
202
+ └────────────────────────────────────────────────────────────┘
203
+ ```
204
+
205
+ ### 五大注入接口
206
+
207
+ 内核通过接口与外部世界交互,宿主按需注入:
208
+
209
+ | 接口 | 职责 | 内置实现 | 宿主注意 |
210
+ |------|------|----------|----------|
211
+ | `IMemoryStorage` | 记忆 CRUD + 搜索 + 按 source 查询 | `InMemoryStorage`(**仅内存占位,不持久化**) | 生产须宿主实现持久化(如 SQLite);重启后数据依赖宿主实现 |
212
+ | `ISessionStore` | 会话历史 + 标题元数据持久化 | 无(宿主实现) | **不含检查点持久化**(2026-09-10 减法:跨重启恢复链整体退役)——中止/断电一律把未完成 turn 补全为完整 turn 身份、下次会话按历史加载;运行时暂停是同 turn 内续跑(内存态),无需跨进程载体 |
213
+ | `ILogger` | 日志输出 | console fallback | 无 |
214
+ | `ITracer` | 可观测性 span | `NOOP_TRACER` | 无 |
215
+
216
+ ## 项目结构
217
+
218
+ ```
219
+ src/
220
+ ├── index.ts # 库导出入口(类型 + 接口 + 函数 + 类导出,无 CLI)
221
+ ├── agent/ # Agent 门面 + AgentLoop + seed/(turn)
222
+ │ ├── agent.ts # 门面类(宿主唯一入口)
223
+ │ ├── loop.ts # 核心循环(推理 → 工具调用 → 反思重试)
224
+ │ ├── assembler.ts # 组件组装器(纯工厂)
225
+ │ ├── contextManager.ts / contextPreparer.ts / toolExecutor.ts / toolRunner.ts ···
226
+ │ ├── seed/ # turn(prepare → act/difficulty → reflect,含多 turn 任务编排)
227
+ │ └── managers/ # 16 个专职 Manager/服务类(memoryInspector / memoryGovernance / roundSummaryGenerator / sessionManager / sessionArchiver / archiveCoordinator / workProjection / textPolishManager / chatLockManager 等)
228
+ ├── memory/ # 记忆引擎(IMemoryStorage + InMemoryStorage + 纯关键词召回 / 融合排序 / 治理常量)
229
+ ├── role-pack/ # 角色包(manifest 解析 + validator + strategyResolver + 能力映射)
230
+ ├── skill/ # 技能管理(全局池 + 角色包绑定,渐进披露 + skillScriptRunner)
231
+ ├── llm/ # LLM 适配层(provider + openaiCompatible + factory)
232
+ ├── security/ # 安全策略(路径守卫 / 写入确认)
233
+ ├── config/ # 配置加载
234
+ ├── code-exec/ # 通用代码执行抽象(条件暴露)
235
+ ├── web-search/ # 网络搜索抽象(条件暴露)
236
+ ├── web-fetch/ # 网页抓取抽象(条件暴露)
237
+ ├── logging/ # 日志(ILogger 接口 + console fallback)
238
+ └── utils/ # 工具函数(scanner / segmenter / 事件系统 / 原子写)
239
+ ```
240
+
241
+ ## 技术栈
242
+
243
+ | 类别 | 选型 | 决策依据 |
244
+ |------|------|----------|
245
+ | 运行时 | Node.js ≥ 22 LTS + TypeScript 5 strict + ESM | ADR-001 |
246
+ | 数据层 | IMemoryStorage 接口(宿主注入持久化实现) | ADR-002 |
247
+ | LLM 协议 | OpenAI Chat Completions 兼容(流式 SSE + Tool Calling) | ADR-003 |
248
+ | 记忆模型 | 摘要即记忆(round-summary 单轨,可溯源回原始对话);source 开放字符串基元 | ADR-004 · memory-as-summary.md |
249
+ | 冲突消解 | Memory 冲突改用 supersededBy 布尔标记 | ADR-021 |
250
+ | 形态 | 纯逻辑库(零 native 依赖,CLI/UI 由宿主提供) | ADR-002 |
251
+ | 安全 | 两级权限 + 路径白名单 + 审计日志 | ADR-006 |
252
+ | 测试 | Vitest + MSW Mock LLM + InMemoryStorage | ADR-007 |
253
+
254
+ ## 工程质量
255
+
256
+ | 指标 | 数值 |
257
+ |------|------|
258
+ | 源码 | 117 个生产文件(src/,零第三方运行时依赖) |
259
+ | 测试 | 内核 + 宿主双套 vitest,根配置统一跑(100+ 文件) |
260
+ | 测试通过 | 2700+ 通过 / 1 skip |
261
+ | 语句覆盖 | 90.65% |
262
+ | 分支覆盖 | 84.83% |
263
+ | 函数覆盖 | 92.41% |
264
+ | 行覆盖 | 91.79% |
265
+ | 运行时依赖 | **0** |
266
+ | 架构决策记录 | 26 个 ADR |
267
+
268
+ ## 开发命令
269
+
270
+ ```bash
271
+ npm test # 运行测试
272
+ npm run test:cov # 运行测试 + 覆盖率
273
+ npm run typecheck # TypeScript 类型检查
274
+ npm run lint # ESLint 检查
275
+ npm run build # 编译到 dist/
276
+ ```
277
+
278
+ ## 文档
279
+
280
+ - [接入指南](docs/memora-接入指南.md) — 宿主项目开发者完整接入手册
281
+ - [API 参考](docs/memora-api-reference.md) — 公共 API 速查
282
+ - [角色包开放键指南](docs/role-pack-开放键指南.md) — manifest.json 开放键使用指南(三层消费方 + 速查)
283
+ - [配置示例](config.example.json) — LLM / 安全配置模板
284
+
285
+ ## 示例角色包(随包发布)
286
+
287
+ npm 包内置 `role-packs/` 示例角色库(`共鸣小说家` / `白话方案设计师`),每个包为文件夹形态(`manifest.json` 核心控制 + `persona.md` / `rules.md` / `skills/` 内容层)。复制到 `configDir/role-packs/` 即可装载,未声明角色包时 Agent 仍可正常对话(走默认策略)。开放键使用详见 [角色包开放键指南](docs/role-pack-开放键指南.md);中立规范见仓库内 [role-pack-spec](docs/architecture/role-pack-spec.md)。
288
+
289
+ ## 宿主项目
290
+
291
+ [memora-vscode](https://gitee.com/zooique/memora/tree/main/hosts/memora-vscode) — VS Code 插件宿主(第一宿主),展示 Memora 内核的完整接入方式:JSON 文件持久化(`.memora/memories.json`)、纯关键词召回、角色包管理与记忆视图。
292
+
293
+ ## 反馈
294
+
295
+ 遇到问题或有改进建议?请在 [Gitee Issues](https://gitee.com/zooique/memora/issues)(主仓库)或 [GitHub Issues](https://github.com/zooique/memora/issues)(镜像)提交反馈。
296
+
297
+ ## 贡献
298
+
299
+ 本项目遵循"大树模型"工程哲学。技术决策记录(ADR)位于仓库 [.trae/decisions/](https://gitee.com/zooique/memora/tree/main/.trae/decisions)。
300
+
301
+ ## 许可证
302
+
303
+ [MIT](LICENSE)
@@ -0,0 +1,43 @@
1
+ {
2
+ "llm": {
3
+ "providers": {
4
+ "mimimo": {
5
+ "provider": "mimimo",
6
+ "model": "deepseek-chat",
7
+ "apiKey": "${MEMORA_API_KEY}",
8
+ "baseUrl": "https://api.xiaomimimo.com/v1",
9
+ "temperature": 0.7,
10
+ "contextWindow": 128000,
11
+ "supportsToolCalling": true,
12
+ "supportsStructuredOutput": false
13
+ },
14
+ "openai": {
15
+ "provider": "openai",
16
+ "model": "gpt-4o",
17
+ "apiKey": "${MEMORA_OPENAI_API_KEY}",
18
+ "baseUrl": "https://api.openai.com/v1",
19
+ "temperature": 0.7,
20
+ "contextWindow": 128000,
21
+ "supportsToolCalling": true,
22
+ "supportsStructuredOutput": true
23
+ }
24
+ },
25
+ "active": "mimimo",
26
+ "background": {
27
+ "provider": "doubao",
28
+ "model": "doubao-pro",
29
+ "apiKey": "${MEMORA_BACKGROUND_API_KEY}",
30
+ "baseUrl": "https://ark.cn-beijing.volces.com/api/v3",
31
+ "temperature": 0.5
32
+ }
33
+ },
34
+ "memory": {
35
+ "dataDir": "~/.memora",
36
+ "maxContextTokens": 1000000
37
+ },
38
+ "security": {
39
+ "permission": "owner",
40
+ "confirmWrites": false
41
+ },
42
+ "allowedPaths": []
43
+ }