@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
package/README.en.md CHANGED
@@ -1,272 +1,305 @@
1
- # Memora
2
-
3
- > Universal Agent Memory Kernel — Local-first, Private, Domain-agnostic. Everything is Memory.
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-90%25-brightgreen)](https://vitest.dev)
9
- [![Tests](https://img.shields.io/badge/tests-1715%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
- **中文** → [README.md](./README.md)
14
-
15
- ---
16
-
17
- ## What is this?
18
-
19
- Memora is an **Agent memory infrastructure** — it gives your AI Agent persistent, cross-session long-term memory.
20
-
21
- It solves one core problem: **LLMs are stateless, but user tasks are continuous.**
22
-
23
- Memora builds continuous evolution on top of stateless inference: memory persistence, intelligent recall, natural decay, semantic deduplication, conflict detection — a complete memory lifecycle, all running locally. Your data never leaves your machine.
24
-
25
- ## Design Philosophy
26
-
27
- > **Everything is Memory.**
28
- >
29
- > Persona is "I remember who I am." Rules are "I remember how to behave." Skills are "I remember how to do certain things." Conversation history is "I remember what we talked about."
30
-
31
- Memora is a **brain kernel that cannot run standalone** — it has interfaces but no "form." A CLI, WebUI, desktop sprite, or novel generator can be its "host." The host gives it a body (UI), blood vessels (Provider), and neural circuits (event loops).
32
-
33
- ## Core Capabilities
34
-
35
- | Capability | Description |
36
- |-----------|-------------|
37
- | **Long-term Memory** | Cross-session, cross-topic memory persistence with intelligent recall |
38
- | **Dual-channel Recall** | Semantic vector search + keyword search, hybridMerge fusion ranking |
39
- | **Memory Governance L1-L4** | L1 semantic dedup → L2 timeliness eval → L3 conflict detection → L4 scheduled decay |
40
- | **Relation Graph** | contradicts / supports / follows / refines / caused — five relation types |
41
- | **Agent-Persona Separation** | Agent is a pure memory engine; persona is a personality vessel. Switch personas without losing memories |
42
- | **Unified Memory Model** | Everything is a "Memory" primitive, distinguished by open-string `source` — no closed enums |
43
- | **Domain-agnostic** | Same architecture, different memory configs → different domains |
44
- | **Zero-dependency Kernel** | No third-party runtime dependencies; persistence injected by host via interfaces |
45
- | **Content Guardrails** | Regex rules + block/warn actions, bidirectional input/output checking |
46
- | **Observability** | ITracer interface + structured spans, plug into any APM |
47
-
48
- ## Quick Start
49
-
50
- ### Install
51
-
52
- ```bash
53
- npm install @zooique/memora
54
- ```
55
-
56
- ### Create an Agent
57
-
58
- ```typescript
59
- import { Agent, createLlmProvider } from '@zooique/memora';
60
-
61
- // Host responsibility: create an LLM Provider
62
- // Works with any OpenAI Chat Completions-compatible service
63
- const provider = createLlmProvider({
64
- provider: 'openaiCompatible',
65
- apiKey: process.env.LLM_API_KEY!,
66
- baseUrl: 'https://api.deepseek.com/v1',
67
- model: 'deepseek-chat',
68
- });
69
-
70
- // Create Agent
71
- const agent = new Agent({
72
- projectPath: '/path/to/project',
73
- provider,
74
- configDir: '/path/to/agent-config', // personas / rules / skills
75
- dataDir: '.memora', // memory data directory
76
- });
77
-
78
- await agent.init();
79
- ```
80
-
81
- ### Chat (Streaming)
82
-
83
- ```typescript
84
- for await (const chunk of agent.chat('Hi, remember that I love TypeScript')) {
85
- if (chunk.type === 'text') {
86
- process.stdout.write(chunk.content);
87
- }
88
- }
89
-
90
- // Next session — the agent automatically recalls "loves TypeScript"
91
- const reply = await agent.chatSync('What language do I like?');
92
- // → Answers based on recalled memory
93
- ```
94
-
95
- ### Memory Management
96
-
97
- ```typescript
98
- // Search memories (hybrid: semantic + keyword)
99
- const hits = await agent.memory.searchHybrid('TypeScript preference', { limit: 5 });
100
-
101
- // Governance: semantic deduplication
102
- const report = await agent.deduplicateMemories();
103
- console.log(`Deduplicated ${report.deduplicatedCount} memories`);
104
-
105
- // Governance: timeliness evaluation
106
- const timeliness = await agent.evaluateTimeliness();
107
-
108
- // Governance: conflict detection
109
- const conflicts = await agent.detectConflicts();
110
-
111
- // Manual decay trigger
112
- await agent.runMemoryDecayOnce();
113
- ```
114
-
115
- ### Cleanup
116
-
117
- ```typescript
118
- await agent.close();
119
- ```
120
-
121
- ## Architecture
122
-
123
- ```
124
- ┌────────────────────────────────────────────────────────────┐
125
- │ Host Application (CLI / Desktop Sprite / WebUI / Game) │
126
- │ ┌─────────────────┐ ┌──────────────────┐ │
127
- │ │ LLM Provider │◄───│ API Key / baseUrl │ ← Host job │
128
- │ └────────┬────────┘ └──────────────────┘ │
129
- │ │ inject │
130
- │ ▼ │
131
- │ ┌──────────────────────────────────────────┐ │
132
- │ │ Memora Kernel (Agent) │ │
133
- │ │ - chat(input) → streaming response │ │
134
- │ │ - Dual-channel recall (semantic+keyword)│ │
135
- │ │ - Governance L1-L4 (dedup/age/conflict) │ │
136
- │ │ - Persona matching / Skill matching │ │
137
- │ │ - Tool registration / execution │ │
138
- │ │ - Session archive / Insight extraction │ │
139
- │ └──────────────────────────────────────────┘ │
140
- └────────────────────────────────────────────────────────────┘
141
- ```
142
-
143
- ### Six Injectable Interfaces
144
-
145
- The kernel interacts with the outside world through interfaces. Hosts inject implementations as needed:
146
-
147
- | Interface | Responsibility | Built-in Implementation |
148
- |-----------|---------------|------------------------|
149
- | `IMemoryStorage` | Memory CRUD + search + decay | `InMemoryStorage` |
150
- | `IVectorStore` | Semantic vector index | `JsonVectorStore` |
151
- | `IMemoryRelationStore` | Memory relation graph | `InMemoryRelationStore` |
152
- | `ISessionStore` | Session history persistence | None (host implements) |
153
- | `ILogger` | Logging output | console fallback |
154
- | `ITracer` | Observability spans | `NOOP_TRACER` |
155
-
156
- ## Project Structure
157
-
158
- ```
159
- src/
160
- ├── index.ts # Library exports (pure types + interfaces, no CLI)
161
- ├── agent/ # Agent facade + AgentLoop execution engine
162
- │ ├── agent.ts # Facade class (single entry point for hosts)
163
- │ ├── loop.ts # Core loop (reason → tool call → reflection retry)
164
- │ ├── assembler.ts # Component assembler (pure factory, stateless)
165
- │ ├── toolExecutor.ts # Tool registration & execution
166
- │ ├── contextManager.ts # Context window management (truncation + summary)
167
- │ ├── guardrail.ts # Content guardrails (regex + block/warn)
168
- │ └── managers/ # 15 specialized Managers
169
- │ ├── archiveCoordinator.ts # Archive coordination
170
- │ ├── memoryInspector.ts # Memory read/write (CRUD + search + stats)
171
- │ ├── memoryGovernance.ts # Governance unified facade (L1-L4)
172
- │ ├── dedupManager.ts # L1 semantic deduplication
173
- │ ├── memoryDecayScheduler.ts # L4 scheduled decay + L2 timeliness
174
- │ ├── memoryAdvisor.ts # L3 conflict detection + health diagnosis
175
- │ ├── insightExtractor.ts # Conversation insight extraction
176
- │ ├── relationBuilder.ts # Memory relation building (ADR-014)
177
- │ ├── sessionManager.ts # Session management (fork/switch)
178
- │ ├── sessionArchiver.ts # Session content archiving
179
- │ ├── configManager.ts # Config management (hot-reload rules/skills)
180
- │ ├── autoConfigRefiner.ts # Self-evolving config suggestions
181
- │ ├── workProjection.ts # Work projection management
182
- │ ├── textPolishManager.ts # Text polishing
183
- │ └── chatLockManager.ts # Chat concurrency lock
184
- ├── memory/ # Memory engine
185
- │ ├── types.ts # Memory primitive (8 fields) + relation types
186
- │ ├── storageInterface.ts # IMemoryStorage interface (16 methods)
187
- │ ├── recall.ts # Dual-channel recall (semantic + keyword)
188
- │ ├── hybridMerge.ts # Fusion ranking algorithm
189
- │ ├── vectorStore.ts # IVectorStore + JsonVectorStore
190
- │ ├── relationStore.ts # IMemoryRelationStore interface
191
- │ ├── governance.ts # Governance shared constants (decay/boost/ceiling)
192
- │ ├── userProfile.ts # User profile management
193
- │ └── projectManager.ts # Multi-project registry + lock management
194
- ├── llm/ # LLM adapter layer
195
- │ ├── provider.ts # LlmProvider abstract class
196
- │ ├── openaiCompatible.ts # OpenAI-compatible protocol implementation
197
- │ ├── embedding.ts # EmbeddingProvider (/embeddings endpoint)
198
- │ └── factory.ts # createLlmProvider factory
199
- ├── persona/ # Persona management (pure files + in-memory cache)
200
- ├── skill/ # Skill management (keyword matching + per-turn injection)
201
- ├── security/ # Security (two-level permissions + path whitelist + audit)
202
- ├── config/ # Config loading (JSON + env variable interpolation)
203
- ├── logging/ # Logging (ILogger interface + lazy initialization)
204
- ├── eval/ # Eval framework (EvalScenario + EvalRunner, for CI)
205
- └── utils/ # Utilities (event emitter / segmenter / errors / timers)
206
- ```
207
-
208
- ## Tech Stack
209
-
210
- | Category | Choice | Rationale |
211
- |----------|--------|-----------|
212
- | Runtime | Node.js ≥ 22 LTS + TypeScript 5 strict + ESM | ADR-001 |
213
- | Data Layer | IMemoryStorage interface (host injects persistence) | ADR-002 |
214
- | LLM Protocol | OpenAI Chat Completions compatible (streaming SSE + Tool Calling) | ADR-003 |
215
- | Memory Model | Open-string source primitive ("Everything is Memory" v2) | ADR-004 |
216
- | Vector Search | IVectorStore interface + built-in JsonVectorStore (pure JS cosine similarity) | ADR-002 |
217
- | Relation Graph | IMemoryRelationStore sidecar model (non-invasive to Memory primitive) | ADR-014 |
218
- | Form Factor | Pure logic library (zero native deps, CLI/UI provided by host) | ADR-002 |
219
- | Security | Two-level permissions + path whitelist + audit log | ADR-006 |
220
- | Testing | Vitest + MSW Mock LLM + InMemoryStorage | ADR-007 |
221
-
222
- ## Engineering Quality
223
-
224
- | Metric | Value |
225
- |--------|-------|
226
- | Source | 82 files / 17,459 lines |
227
- | Tests | 75 files / 23,042 lines (test code > production code) |
228
- | Tests Passing | 1,715+ |
229
- | Statement Coverage | 89.3% |
230
- | Branch Coverage | 81.7% |
231
- | Function Coverage | 91.7% |
232
- | Runtime Dependencies | **0** |
233
- | Architecture Decision Records | 25 ADRs |
234
-
235
- ## Development
236
-
237
- ```bash
238
- npm test # Run tests
239
- npm run test:cov # Run tests + coverage
240
- npm run typecheck # TypeScript type checking
241
- npm run lint # ESLint
242
- npm run build # Compile to dist/
243
- ```
244
-
245
- ## Documentation
246
-
247
- - [Integration Guide](docs/memora-接入指南.md) — Complete host developer onboarding manual (Chinese)
248
- - [API Reference](docs/memora-api-reference.md) — Public API quick reference (Chinese)
249
- - [Config Example](config.example.json) — LLM / Embedding / Security config template
250
-
251
- ## Host Project
252
-
253
- [memora-sprite](hosts/memora-sprite/) — An Electron-based desktop sprite host (v1.5.0), demonstrating a complete Memora integration: SQLite persistence, vector indexing, system tray, global shortcuts, and memory graph visualization.
254
-
255
- ## Why Memora?
256
-
257
- | | Memora | Cloud memory services | Framework memory modules |
258
- |---|---|---|---|
259
- | Data privacy | ✅ 100% local | ❌ Cloud-dependent | ⚠️ Varies |
260
- | Runtime deps | ✅ Zero | N/A (SaaS) | ❌ Heavy |
261
- | Memory lifecycle | ✅ Full (dedup/decay/conflict) | ⚠️ Partial | ❌ CRUD only |
262
- | Domain-agnostic | ✅ Open-string source | ⚠️ Opinionated | ⚠️ Framework-locked |
263
- | Embeddable | ✅ Any Node.js host | ❌ API calls only | ⚠️ Framework-bound |
264
- | Relation graph | ✅ Built-in sidecar | ❌ Rare | ❌ Rare |
265
-
266
- ## Contributing
267
-
268
- This project follows the "Big Tree Model" engineering philosophy. Architecture Decision Records (ADRs) are in `.trae/decisions/`.
269
-
270
- ## License
271
-
272
- [MIT](LICENSE)
1
+ # Memora
2
+
3
+ > **Agent Memory Kernel with Governance** — Local-first, Private, Zero-dep. Not a framework, a kernel.
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
+ **中文** → [README.md](./README.md)
14
+
15
+ ---
16
+
17
+ ## What problem are you facing?
18
+
19
+ - **LLM forgets everything between sessions** — Your users remember what they said, your agent doesn't
20
+ - **Existing memory solutions are either too heavy (framework-bound) or too shallow (CRUD only)** — No dedup, conflict detection, or write-time supersede
21
+ - **Memory and persona are tangled** — Switch personas and lose your history
22
+ - **You don't want to send data to the cloud** — Need a local, private memory layer with zero external dependencies
23
+
24
+ ## How Memora solves this
25
+
26
+ Memora is an **Agent memory kernel** — framework-agnostic, cloud-independent, focused on one thing: **giving your agent cross-session, cross-topic long-term memory that stays clean.**
27
+
28
+ "Clean" means: semantic deduplication, conflict detection, write-time supersede, and last-used refresh (accessedAt, used for ordering) — no importance weighting, and not just stuffing history into the context window.
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', // memory data directory (required)
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
+ // Chat — memories persist automatically
46
+ for await (const chunk of agent.chat('I love TypeScript')) {
47
+ process.stdout.write(chunk.content);
48
+ }
49
+
50
+ // Next session — the LLM can call search_memories to retrieve this memory
51
+ const reply = await agent.chatSync('What language do I like?');
52
+
53
+ // Memory governance — dedup / conflict detection / source health
54
+ await agent.governance.deduplicate();
55
+ await agent.governance.detectConflicts();
56
+ const health = agent.governance.sourceHealth();
57
+
58
+ await agent.close();
59
+ ```
60
+
61
+ > **Boundary**: Memora is a **non-standalone pure logic kernel** — persistence, sandbox, observability, CLI/UI are all injected by the host. The kernel guarantees **interface contracts + unit-tested logic correctness**; agent-level behavior evaluation is the host's responsibility.
62
+
63
+ ---
64
+
65
+ ## Why Memora?
66
+
67
+ | | Memora | Vector memory libs (agent-memory, MemStack) | Framework-builtin memory (Mastra, LangGraph) |
68
+ |---|---|---|---|
69
+ | **Memory governance** | ✅ Dedup+conflict+write-time supersede | ⚠️ Decay only or none | ⚠️ Partial |
70
+ | **Framework lock-in** | ✅ Zero — pure kernel | ✅ Standalone | ❌ Tied to framework |
71
+ | **Data privacy** | ✅ 100% local | ✅ Local | ⚠️ Partially cloud |
72
+ | **Runtime deps** | ✅ Zero (node:* only) | ❌ SQLite / better-sqlite3 | ❌ Heavy |
73
+ | **Persona/memory separation** | ✅ Role-pack boundary discipline | ❌ No persona concept | ⚠️ Simple prompt |
74
+ | **Embeddable** | ✅ Any Node.js host | ✅ Standalone lib | ❌ Framework-internal |
75
+
76
+ **One-line positioning**: If you want a **framework-agnostic, governance-capable, zero-dependency** memory layer, Memora is currently the only option on npm.
77
+
78
+ ---
79
+
80
+ ## Design Philosophy
81
+
82
+ > **Memory-as-Summary.**
83
+ >
84
+ > Conversation is the raw material: after each turn, an asynchronous round-summary is generated as the sole memory unit; the original conversation records are stored separately and traceable via source links. Persona, rules, and skills live in the role-pack, not the memory store.
85
+
86
+ Memora is a **brain kernel that cannot run standalone** — it has interfaces but no "form." A CLI, WebUI, desktop sprite, or novel generator can be its "host." The host gives it a body (UI), blood vessels (Provider), and neural circuits (event loops).
87
+
88
+ > **Version positioning (v3.0.0)**: **Node.js-only · Zero third-party runtime deps Agent kernel**. v3.0.0 is the first stable baseline after architecture convergence.
89
+
90
+ ---
91
+
92
+ ## Core Capabilities
93
+
94
+ | Capability | Description |
95
+ |-----------|-------------|
96
+ | **Long-term Memory** | Cross-session, cross-topic memory persistence with tool-based recall (`search_memories`; no automatic injection) |
97
+ | **Memory Search Tool** | Keyword-only retrieval (`search_memories`), refreshes `accessedAt` on hit (semantic vector channel removed via B0, 2026-09-18) |
98
+ | **Memory Governance** | Write-time supersede + last-used refresh (`accessedAt` used for ordering; no importance weighting) + semantic dedup + conflict detection via `agent.governance` facade (dedup / conflict judged by LLM) |
99
+ | **Agent-Persona Separation** | Agent is a pure memory engine; persona is a personality vessel. Switch personas without losing memories |
100
+ | **Unified Memory Model** | Everything is a "Memory" primitive, distinguished by open-string `source` — no closed enums |
101
+ | **Domain-agnostic** | Same architecture, different memory configs → different domains |
102
+ | **Zero third-party runtime deps** | Depends on Node built-ins (`node:*`); persistence injected by host via interfaces |
103
+ | **Observability** | ITracer interface + structured spans, plug into any APM |
104
+ | **External tools** | Conditionally exposed `web_search` / `web_fetch` / `run_code` — enabled only when host injects the corresponding provider |
105
+
106
+ ## Quick Start
107
+
108
+ ### Install
109
+
110
+ ```bash
111
+ npm install @zooique/memora
112
+ ```
113
+
114
+ ### Create an Agent
115
+
116
+ ```typescript
117
+ import { Agent, createProviderFromConfig } from '@zooique/memora';
118
+
119
+ // Host responsibility: create an LLM Provider
120
+ // Works with any OpenAI Chat Completions-compatible service
121
+ // createProviderFromConfig is the canonical entry (baseUrl+model+apiKey → validated creation; provider
122
+ // selection is the host's responsibility). createLlmProvider(loadConfig()) is only a config-file convenience
123
+ // (active selection resolved inside the kernel) when you delegate the whole Config to it.
124
+ const provider = createProviderFromConfig('primary', {
125
+ provider: 'openaiCompatible',
126
+ apiKey: process.env.LLM_API_KEY!,
127
+ baseUrl: 'https://api.xiaomimimo.com/v1',
128
+ model: 'deepseek-chat',
129
+ });
130
+
131
+ // Create Agent
132
+ const agent = new Agent({
133
+ projectPath: '/path/to/project',
134
+ provider,
135
+ configDir: '/path/to/agent-config', // role-packs / skills
136
+ dataDir: '/path/to/project/.memora-data', // memory data directory (required; prefer absolute)
137
+ });
138
+
139
+ await agent.init();
140
+ ```
141
+
142
+ ### Chat (Streaming)
143
+
144
+ ```typescript
145
+ for await (const chunk of agent.chat('Hi, remember that I love TypeScript')) {
146
+ if (chunk.type === 'text') {
147
+ process.stdout.write(chunk.content);
148
+ }
149
+ }
150
+
151
+ // Next session — the LLM can call search_memories to retrieve "loves TypeScript"
152
+ const reply = await agent.chatSync('What language do I like?');
153
+ // → Answers based on the memories the LLM retrieved
154
+ ```
155
+
156
+ ### Memory Management
157
+
158
+ ```typescript
159
+ // Search memories (keyword-only; semantic vector channel removed via B0, 2026-09-18), limit is a number
160
+ const hits = await agent.memory.searchByKeyword('TypeScript preference', 5);
161
+
162
+ // Governance (exposed via agent.governance facade, LLM-judged)
163
+ const report = await agent.governance.deduplicate();
164
+ console.log(`Deduplicated ${report.deduplicatedCount} memories`);
165
+
166
+ const conflicts = await agent.governance.detectConflicts();
167
+
168
+ // Source health diagnosis (pure computation, no LLM): per-source count / days since last access (score retired → factual observation only)
169
+ const health = agent.governance.sourceHealth();
170
+ console.log(health?.sources);
171
+ ```
172
+
173
+ ### Cleanup
174
+
175
+ ```typescript
176
+ await agent.close();
177
+ ```
178
+
179
+ ## Architecture
180
+
181
+ ```
182
+ ┌────────────────────────────────────────────────────────────┐
183
+ │ Host Application (CLI / Desktop Sprite / WebUI / Game) │
184
+ │ ┌─────────────────┐ ┌──────────────────┐ │
185
+ │ │ LLM Provider │◄───│ API Key / baseUrl │ ← Host job │
186
+ │ └────────┬────────┘ └──────────────────┘ │
187
+ │ │ inject │
188
+ │ ▼ │
189
+ │ ┌──────────────────────────────────────────┐ │
190
+ │ │ Memora Kernel (Agent) │ │
191
+ │ │ - chat(input) → streaming response │ │
192
+ │ │ - Keyword-only search (semantic vector channel removed via B0)│ │
193
+ │ │ - Memory governance (dedup/conflict/supersede) │ │
194
+ │ │ - Role pack matching / Skill matching │ │
195
+ │ │ - Tool registration / execution │ │
196
+ │ │ - Session archive / round persistence │ │
197
+ │ └──────────────────────────────────────────┘ │
198
+ └────────────────────────────────────────────────────────────┘
199
+ ```
200
+
201
+ ### Five Injectable Interfaces
202
+
203
+ The kernel interacts with the outside world through interfaces. Hosts inject implementations as needed:
204
+
205
+ | Interface | Responsibility | Built-in Implementation |
206
+ |-----------|---------------|------------------------|
207
+ | `IMemoryStorage` | Memory CRUD + search + query by source | `InMemoryStorage` |
208
+ | `ISessionStore` | Session history persistence | None (host implements) |
209
+ | `ILogger` | Logging output | console fallback |
210
+ | `ITracer` | Observability spans | `NOOP_TRACER` |
211
+
212
+ ## Project Structure
213
+
214
+ ```
215
+ src/
216
+ ├── index.ts # Library exports (types + interfaces + functions + classes, no CLI)
217
+ ├── agent/ # Agent facade + AgentLoop + seed/ (single-turn execution loop)
218
+ │ ├── agent.ts # Facade class (single entry point for hosts)
219
+ │ ├── loop.ts # Core loop (reason → tool call → reflection retry)
220
+ │ ├── assembler.ts # Component assembler (pure factory)
221
+ │ ├── contextManager.ts / contextPreparer.ts / toolExecutor.ts / toolRunner.ts ···
222
+ │ ├── seed/ # Minimal execution loop (prepare → act/difficulty → reflect, incl. external task outer loop)
223
+ │ └── managers/ # 16 specialized Managers/service classes (memoryInspector / memoryGovernance / roundSummaryGenerator / sessionManager / sessionArchiver / archiveCoordinator / workProjection / textPolishManager / chatLockManager, etc.)
224
+ ├── memory/ # Memory engine (IMemoryStorage + InMemoryStorage + keyword recall / fusion ranking / governance constants)
225
+ ├── role-pack/ # Role packs (manifest parsing + validator + strategyResolver + capability mapping)
226
+ ├── skill/ # Skill management (global pool + role-pack binding, progressive disclosure + skillScriptRunner)
227
+ ├── llm/ # LLM adapter layer (provider + openaiCompatible + factory)
228
+ ├── security/ # Security (path guard / write confirmation)
229
+ ├── config/ # Config loading
230
+ ├── code-exec/ # Generic code execution abstraction (conditionally exposed)
231
+ ├── web-search/ # Web search abstraction (conditionally exposed)
232
+ ├── web-fetch/ # Web fetch abstraction (conditionally exposed)
233
+ ├── logging/ # Logging (ILogger interface + console fallback)
234
+ └── utils/ # Utilities (scanner / segmenter / event system / atomic write)
235
+ ```
236
+
237
+ ## Tech Stack
238
+
239
+ | Category | Choice | Rationale |
240
+ |----------|--------|-----------|
241
+ | Runtime | Node.js ≥ 22 LTS + TypeScript 5 strict + ESM | ADR-001 |
242
+ | Data Layer | IMemoryStorage interface (host injects persistence) | ADR-002 |
243
+ | LLM Protocol | OpenAI Chat Completions compatible (streaming SSE + Tool Calling) | ADR-003 |
244
+ | Memory Model | Memory-as-summary: round-summary single track, traceable to source; source open-string primitive | ADR-004 · memory-as-summary.md |
245
+ | Conflict Resolution | Memory conflicts resolved via supersededBy boolean flag | ADR-021 |
246
+ | Form Factor | Pure logic library (zero native deps, CLI/UI provided by host) | ADR-002 |
247
+ | Security | Two-level permissions + path whitelist + audit log | ADR-006 |
248
+ | Testing | Vitest + MSW Mock LLM + InMemoryStorage | ADR-007 |
249
+
250
+ ## Engineering Quality
251
+
252
+ | Metric | Value |
253
+ |--------|-------|
254
+ | Source | 117 production files (src/, zero third-party runtime deps) |
255
+ | Tests | Dual vitest suites (kernel + host), run by the root vitest config (100+ files) |
256
+ | Tests Passing | 2700+ passed / 1 skipped |
257
+ | Statement Coverage | 90.65% |
258
+ | Branch Coverage | 84.83% |
259
+ | Function Coverage | 92.41% |
260
+ | Line Coverage | 91.79% |
261
+ | Runtime Dependencies | **0** |
262
+ | Architecture Decision Records | 26 ADRs |
263
+
264
+ ## Development
265
+
266
+ ```bash
267
+ npm test # Run tests
268
+ npm run test:cov # Run tests + coverage
269
+ npm run typecheck # TypeScript type checking
270
+ npm run lint # ESLint
271
+ npm run build # Compile to dist/
272
+ ```
273
+
274
+ ## Documentation
275
+
276
+ - [Integration Guide](docs/memora-接入指南.md) — Complete host developer onboarding manual (Chinese)
277
+ - [API Reference](docs/memora-api-reference.md) — Public API quick reference (Chinese)
278
+ - [Config Example](config.example.json) — LLM / Security config template
279
+
280
+ ## Host Project
281
+
282
+ [memora-vscode](https://github.com/zooique/memora/tree/main/hosts/memora-vscode) — The VS Code extension host (primary host), demonstrating a complete Memora integration: JSON file persistence (`.memora/memories.json`), keyword-only search, role pack management, and memory views.
283
+
284
+ ## Why Memora?
285
+
286
+ | | Memora | Cloud memory services | Framework memory modules |
287
+ |---|---|---|---|
288
+ | Data privacy | ✅ 100% local | ❌ Cloud-dependent | ⚠️ Varies |
289
+ | Runtime deps | ✅ Zero | N/A (SaaS) | ❌ Heavy |
290
+ | Memory lifecycle | ✅ Full (dedup/conflict/supersede) | ⚠️ Partial | ❌ CRUD only |
291
+ | Domain-agnostic | ✅ Open-string source | ⚠️ Opinionated | ⚠️ Framework-locked |
292
+ | Embeddable | ✅ Any Node.js host | ❌ API calls only | ⚠️ Framework-bound |
293
+ | Relation graph | ✅ Built-in sidecar | ❌ Rare | ❌ Rare |
294
+
295
+ ## Feedback
296
+
297
+ Found a bug or have a suggestion? Please open an issue at [GitHub Issues](https://github.com/zooique/memora/issues) (primary repository); Gitee Issues (https://gitee.com/zooique/memora/issues) is a synced mirror for users in mainland China, checked less frequently.
298
+
299
+ ## Contributing
300
+
301
+ This project follows the "Big Tree Model" engineering philosophy. Architecture Decision Records (ADRs) are in the repository [.trae/decisions/](https://github.com/zooique/memora/tree/main/.trae/decisions).
302
+
303
+ ## License
304
+
305
+ [MIT](LICENSE)