cognitive-core 0.1.2 → 0.2.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 (528) hide show
  1. package/.claude/settings.json +111 -2
  2. package/.sessionlog/settings.json +4 -0
  3. package/CLAUDE.md +233 -0
  4. package/README.md +370 -54
  5. package/dist/atlas.d.ts +10 -10
  6. package/dist/atlas.d.ts.map +1 -1
  7. package/dist/atlas.js +79 -48
  8. package/dist/atlas.js.map +1 -1
  9. package/dist/bin/cli-utils.d.ts +37 -0
  10. package/dist/bin/cli-utils.d.ts.map +1 -0
  11. package/dist/bin/cli-utils.js +176 -0
  12. package/dist/bin/cli-utils.js.map +1 -0
  13. package/dist/bin/cognitive-core.d.ts +2 -12
  14. package/dist/bin/cognitive-core.d.ts.map +1 -1
  15. package/dist/bin/cognitive-core.js +76 -351
  16. package/dist/bin/cognitive-core.js.map +1 -1
  17. package/dist/bin/commands/kb.d.ts +6 -0
  18. package/dist/bin/commands/kb.d.ts.map +1 -0
  19. package/dist/bin/commands/kb.js +240 -0
  20. package/dist/bin/commands/kb.js.map +1 -0
  21. package/dist/bin/commands/learn.d.ts +6 -0
  22. package/dist/bin/commands/learn.d.ts.map +1 -0
  23. package/dist/bin/commands/learn.js +91 -0
  24. package/dist/bin/commands/learn.js.map +1 -0
  25. package/dist/bin/commands/legacy.d.ts +12 -0
  26. package/dist/bin/commands/legacy.d.ts.map +1 -0
  27. package/dist/bin/commands/legacy.js +142 -0
  28. package/dist/bin/commands/legacy.js.map +1 -0
  29. package/dist/bin/commands/run.d.ts +3 -0
  30. package/dist/bin/commands/run.d.ts.map +1 -0
  31. package/dist/bin/commands/run.js +99 -0
  32. package/dist/bin/commands/run.js.map +1 -0
  33. package/dist/bin/commands/sessions.d.ts +9 -0
  34. package/dist/bin/commands/sessions.d.ts.map +1 -0
  35. package/dist/bin/commands/sessions.js +183 -0
  36. package/dist/bin/commands/sessions.js.map +1 -0
  37. package/dist/bin/commands/skills.d.ts +6 -0
  38. package/dist/bin/commands/skills.d.ts.map +1 -0
  39. package/dist/bin/commands/skills.js +135 -0
  40. package/dist/bin/commands/skills.js.map +1 -0
  41. package/dist/embeddings/index.d.ts +1 -0
  42. package/dist/embeddings/index.d.ts.map +1 -1
  43. package/dist/embeddings/index.js +2 -0
  44. package/dist/embeddings/index.js.map +1 -1
  45. package/dist/embeddings/inverted-index.d.ts +47 -0
  46. package/dist/embeddings/inverted-index.d.ts.map +1 -0
  47. package/dist/embeddings/inverted-index.js +122 -0
  48. package/dist/embeddings/inverted-index.js.map +1 -0
  49. package/dist/embeddings/manager.d.ts +3 -1
  50. package/dist/embeddings/manager.d.ts.map +1 -1
  51. package/dist/embeddings/manager.js +12 -7
  52. package/dist/embeddings/manager.js.map +1 -1
  53. package/dist/embeddings/vector-store.d.ts +7 -3
  54. package/dist/embeddings/vector-store.d.ts.map +1 -1
  55. package/dist/embeddings/vector-store.js +22 -6
  56. package/dist/embeddings/vector-store.js.map +1 -1
  57. package/dist/factory.d.ts +11 -12
  58. package/dist/factory.d.ts.map +1 -1
  59. package/dist/factory.js +20 -7
  60. package/dist/factory.js.map +1 -1
  61. package/dist/index.d.ts +8 -7
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +42 -6
  64. package/dist/index.js.map +1 -1
  65. package/dist/learning/analyzer.d.ts.map +1 -1
  66. package/dist/learning/analyzer.js +17 -35
  67. package/dist/learning/analyzer.js.map +1 -1
  68. package/dist/learning/energy-evaluator.d.ts +128 -0
  69. package/dist/learning/energy-evaluator.d.ts.map +1 -0
  70. package/dist/learning/energy-evaluator.js +175 -0
  71. package/dist/learning/energy-evaluator.js.map +1 -0
  72. package/dist/learning/healing-orchestrator.d.ts +182 -0
  73. package/dist/learning/healing-orchestrator.d.ts.map +1 -0
  74. package/dist/learning/healing-orchestrator.js +250 -0
  75. package/dist/learning/healing-orchestrator.js.map +1 -0
  76. package/dist/learning/index.d.ts +7 -2
  77. package/dist/learning/index.d.ts.map +1 -1
  78. package/dist/learning/index.js +13 -2
  79. package/dist/learning/index.js.map +1 -1
  80. package/dist/learning/instant-loop.d.ts +87 -0
  81. package/dist/learning/instant-loop.d.ts.map +1 -0
  82. package/dist/learning/instant-loop.js +264 -0
  83. package/dist/learning/instant-loop.js.map +1 -0
  84. package/dist/learning/loop-coordinator.d.ts +61 -0
  85. package/dist/learning/loop-coordinator.d.ts.map +1 -0
  86. package/dist/learning/loop-coordinator.js +96 -0
  87. package/dist/learning/loop-coordinator.js.map +1 -0
  88. package/dist/learning/maintenance-scheduler.d.ts +141 -0
  89. package/dist/learning/maintenance-scheduler.d.ts.map +1 -0
  90. package/dist/learning/maintenance-scheduler.js +186 -0
  91. package/dist/learning/maintenance-scheduler.js.map +1 -0
  92. package/dist/learning/meta-learner.d.ts.map +1 -1
  93. package/dist/learning/meta-learner.js +4 -21
  94. package/dist/learning/meta-learner.js.map +1 -1
  95. package/dist/learning/pipeline.d.ts +31 -4
  96. package/dist/learning/pipeline.d.ts.map +1 -1
  97. package/dist/learning/pipeline.js +64 -12
  98. package/dist/learning/pipeline.js.map +1 -1
  99. package/dist/learning/reflexion-generator.d.ts +64 -0
  100. package/dist/learning/reflexion-generator.d.ts.map +1 -0
  101. package/dist/learning/reflexion-generator.js +194 -0
  102. package/dist/learning/reflexion-generator.js.map +1 -0
  103. package/dist/learning/trajectory-sources/entire.d.ts +8 -5
  104. package/dist/learning/trajectory-sources/entire.d.ts.map +1 -1
  105. package/dist/learning/trajectory-sources/entire.js +13 -6
  106. package/dist/learning/trajectory-sources/entire.js.map +1 -1
  107. package/dist/learning/trajectory-sources/index.d.ts +1 -1
  108. package/dist/learning/trajectory-sources/index.d.ts.map +1 -1
  109. package/dist/learning/trajectory-sources/index.js +1 -1
  110. package/dist/learning/trajectory-sources/index.js.map +1 -1
  111. package/dist/learning/trajectory-sources/pipeline.d.ts +4 -4
  112. package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -1
  113. package/dist/learning/trajectory-sources/pipeline.js +2 -2
  114. package/dist/learning/trajectory-sources/pipeline.js.map +1 -1
  115. package/dist/learning/unified-pipeline.d.ts +311 -0
  116. package/dist/learning/unified-pipeline.d.ts.map +1 -0
  117. package/dist/learning/unified-pipeline.js +844 -0
  118. package/dist/learning/unified-pipeline.js.map +1 -0
  119. package/dist/memory/candidate-retrieval.d.ts +43 -0
  120. package/dist/memory/candidate-retrieval.d.ts.map +1 -0
  121. package/dist/memory/candidate-retrieval.js +43 -0
  122. package/dist/memory/candidate-retrieval.js.map +1 -0
  123. package/dist/memory/causal-store.d.ts +97 -0
  124. package/dist/memory/causal-store.d.ts.map +1 -0
  125. package/dist/memory/causal-store.js +209 -0
  126. package/dist/memory/causal-store.js.map +1 -0
  127. package/dist/memory/coherence.d.ts +71 -0
  128. package/dist/memory/coherence.d.ts.map +1 -0
  129. package/dist/memory/coherence.js +176 -0
  130. package/dist/memory/coherence.js.map +1 -0
  131. package/dist/memory/experience.d.ts +39 -6
  132. package/dist/memory/experience.d.ts.map +1 -1
  133. package/dist/memory/experience.js +193 -49
  134. package/dist/memory/experience.js.map +1 -1
  135. package/dist/memory/index.d.ts +7 -0
  136. package/dist/memory/index.d.ts.map +1 -1
  137. package/dist/memory/index.js +12 -0
  138. package/dist/memory/index.js.map +1 -1
  139. package/dist/memory/knowledge-bank.d.ts +14 -0
  140. package/dist/memory/knowledge-bank.d.ts.map +1 -1
  141. package/dist/memory/knowledge-bank.js +45 -0
  142. package/dist/memory/knowledge-bank.js.map +1 -1
  143. package/dist/memory/meta.d.ts +7 -8
  144. package/dist/memory/meta.d.ts.map +1 -1
  145. package/dist/memory/meta.js +73 -79
  146. package/dist/memory/meta.js.map +1 -1
  147. package/dist/memory/playbook.d.ts +26 -9
  148. package/dist/memory/playbook.d.ts.map +1 -1
  149. package/dist/memory/playbook.js +198 -74
  150. package/dist/memory/playbook.js.map +1 -1
  151. package/dist/memory/reasoning-bank.d.ts +130 -0
  152. package/dist/memory/reasoning-bank.d.ts.map +1 -0
  153. package/dist/memory/reasoning-bank.js +342 -0
  154. package/dist/memory/reasoning-bank.js.map +1 -0
  155. package/dist/memory/reflexion.d.ts +59 -0
  156. package/dist/memory/reflexion.d.ts.map +1 -0
  157. package/dist/memory/reflexion.js +96 -0
  158. package/dist/memory/reflexion.js.map +1 -0
  159. package/dist/memory/system.d.ts +7 -2
  160. package/dist/memory/system.d.ts.map +1 -1
  161. package/dist/memory/system.js +19 -7
  162. package/dist/memory/system.js.map +1 -1
  163. package/dist/memory/temporal-compressor.d.ts +126 -0
  164. package/dist/memory/temporal-compressor.d.ts.map +1 -0
  165. package/dist/memory/temporal-compressor.js +335 -0
  166. package/dist/memory/temporal-compressor.js.map +1 -0
  167. package/dist/persistence/index.d.ts +11 -0
  168. package/dist/persistence/index.d.ts.map +1 -0
  169. package/dist/persistence/index.js +11 -0
  170. package/dist/persistence/index.js.map +1 -0
  171. package/dist/persistence/migrator.d.ts +40 -0
  172. package/dist/persistence/migrator.d.ts.map +1 -0
  173. package/dist/persistence/migrator.js +238 -0
  174. package/dist/persistence/migrator.js.map +1 -0
  175. package/dist/persistence/serializers.d.ts +45 -0
  176. package/dist/persistence/serializers.d.ts.map +1 -0
  177. package/dist/persistence/serializers.js +80 -0
  178. package/dist/persistence/serializers.js.map +1 -0
  179. package/dist/persistence/sqlite-persistence.d.ts +228 -0
  180. package/dist/persistence/sqlite-persistence.d.ts.map +1 -0
  181. package/dist/persistence/sqlite-persistence.js +588 -0
  182. package/dist/persistence/sqlite-persistence.js.map +1 -0
  183. package/dist/runtime/flows/learning.d.ts +10 -12
  184. package/dist/runtime/flows/learning.d.ts.map +1 -1
  185. package/dist/runtime/flows/learning.js +10 -23
  186. package/dist/runtime/flows/learning.js.map +1 -1
  187. package/dist/search/index.d.ts +1 -0
  188. package/dist/search/index.d.ts.map +1 -1
  189. package/dist/search/index.js +2 -0
  190. package/dist/search/index.js.map +1 -1
  191. package/dist/search/moe-gate.d.ts +124 -0
  192. package/dist/search/moe-gate.d.ts.map +1 -0
  193. package/dist/search/moe-gate.js +234 -0
  194. package/dist/search/moe-gate.js.map +1 -0
  195. package/dist/search/router.d.ts +32 -2
  196. package/dist/search/router.d.ts.map +1 -1
  197. package/dist/search/router.js +87 -4
  198. package/dist/search/router.js.map +1 -1
  199. package/dist/session-bank/git-reader.d.ts +9 -4
  200. package/dist/session-bank/git-reader.d.ts.map +1 -1
  201. package/dist/session-bank/git-reader.js +22 -15
  202. package/dist/session-bank/git-reader.js.map +1 -1
  203. package/dist/session-bank/index.d.ts +2 -2
  204. package/dist/session-bank/index.d.ts.map +1 -1
  205. package/dist/session-bank/index.js +2 -2
  206. package/dist/session-bank/index.js.map +1 -1
  207. package/dist/session-bank/parser.d.ts +16 -5
  208. package/dist/session-bank/parser.d.ts.map +1 -1
  209. package/dist/session-bank/parser.js +187 -80
  210. package/dist/session-bank/parser.js.map +1 -1
  211. package/dist/session-bank/session-bank.d.ts +5 -0
  212. package/dist/session-bank/session-bank.d.ts.map +1 -1
  213. package/dist/session-bank/session-bank.js +30 -9
  214. package/dist/session-bank/session-bank.js.map +1 -1
  215. package/dist/session-bank/types.d.ts +4 -1
  216. package/dist/session-bank/types.d.ts.map +1 -1
  217. package/dist/session-bank/types.js +3 -3
  218. package/dist/session-bank/types.js.map +1 -1
  219. package/dist/surfacing/skill-publisher.d.ts.map +1 -1
  220. package/dist/surfacing/skill-publisher.js +15 -43
  221. package/dist/surfacing/skill-publisher.js.map +1 -1
  222. package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -1
  223. package/dist/surfacing/sqlite-storage-adapter.js +13 -21
  224. package/dist/surfacing/sqlite-storage-adapter.js.map +1 -1
  225. package/dist/types/config.d.ts +100 -0
  226. package/dist/types/config.d.ts.map +1 -1
  227. package/dist/types/config.js +27 -0
  228. package/dist/types/config.js.map +1 -1
  229. package/dist/types/index.d.ts +2 -2
  230. package/dist/types/index.d.ts.map +1 -1
  231. package/dist/types/index.js +1 -1
  232. package/dist/types/index.js.map +1 -1
  233. package/dist/types/memory.d.ts +52 -0
  234. package/dist/types/memory.d.ts.map +1 -1
  235. package/dist/types/memory.js +13 -0
  236. package/dist/types/memory.js.map +1 -1
  237. package/dist/types/playbook.d.ts +4 -0
  238. package/dist/types/playbook.d.ts.map +1 -1
  239. package/dist/types/playbook.js.map +1 -1
  240. package/dist/utils/error-classifier.d.ts +30 -0
  241. package/dist/utils/error-classifier.d.ts.map +1 -0
  242. package/dist/utils/error-classifier.js +85 -0
  243. package/dist/utils/error-classifier.js.map +1 -0
  244. package/dist/utils/index.d.ts +3 -0
  245. package/dist/utils/index.d.ts.map +1 -1
  246. package/dist/utils/index.js +3 -0
  247. package/dist/utils/index.js.map +1 -1
  248. package/dist/utils/partitioned-store.d.ts +93 -0
  249. package/dist/utils/partitioned-store.d.ts.map +1 -0
  250. package/dist/utils/partitioned-store.js +251 -0
  251. package/dist/utils/partitioned-store.js.map +1 -0
  252. package/dist/utils/trajectory-helpers.d.ts +39 -0
  253. package/dist/utils/trajectory-helpers.d.ts.map +1 -0
  254. package/dist/utils/trajectory-helpers.js +57 -0
  255. package/dist/utils/trajectory-helpers.js.map +1 -0
  256. package/dist/workspace/efficacy-toolkit.d.ts +164 -0
  257. package/dist/workspace/efficacy-toolkit.d.ts.map +1 -0
  258. package/dist/workspace/efficacy-toolkit.js +281 -0
  259. package/dist/workspace/efficacy-toolkit.js.map +1 -0
  260. package/dist/workspace/index.d.ts +2 -1
  261. package/dist/workspace/index.d.ts.map +1 -1
  262. package/dist/workspace/index.js +3 -1
  263. package/dist/workspace/index.js.map +1 -1
  264. package/dist/workspace/runner.d.ts +3 -4
  265. package/dist/workspace/runner.d.ts.map +1 -1
  266. package/dist/workspace/runner.js.map +1 -1
  267. package/dist/workspace/templates/index.d.ts +3 -0
  268. package/dist/workspace/templates/index.d.ts.map +1 -1
  269. package/dist/workspace/templates/index.js +6 -0
  270. package/dist/workspace/templates/index.js.map +1 -1
  271. package/dist/workspace/templates/playbook-decay-detection.d.ts +46 -0
  272. package/dist/workspace/templates/playbook-decay-detection.d.ts.map +1 -0
  273. package/dist/workspace/templates/playbook-decay-detection.js +197 -0
  274. package/dist/workspace/templates/playbook-decay-detection.js.map +1 -0
  275. package/dist/workspace/templates/playbook-efficacy-audit.d.ts +46 -0
  276. package/dist/workspace/templates/playbook-efficacy-audit.d.ts.map +1 -0
  277. package/dist/workspace/templates/playbook-efficacy-audit.js +160 -0
  278. package/dist/workspace/templates/playbook-efficacy-audit.js.map +1 -0
  279. package/dist/workspace/templates/playbook-lifecycle-review.d.ts +51 -0
  280. package/dist/workspace/templates/playbook-lifecycle-review.d.ts.map +1 -0
  281. package/dist/workspace/templates/playbook-lifecycle-review.js +187 -0
  282. package/dist/workspace/templates/playbook-lifecycle-review.js.map +1 -0
  283. package/dist/workspace/types.d.ts +9 -2
  284. package/dist/workspace/types.d.ts.map +1 -1
  285. package/dist/workspace/types.js.map +1 -1
  286. package/package.json +12 -4
  287. package/references/sessionlog/.husky/pre-commit +1 -0
  288. package/references/sessionlog/.lintstagedrc.json +4 -0
  289. package/references/sessionlog/.prettierignore +4 -0
  290. package/references/sessionlog/.prettierrc.json +11 -0
  291. package/references/sessionlog/LICENSE +21 -0
  292. package/references/sessionlog/README.md +453 -0
  293. package/references/sessionlog/eslint.config.js +58 -0
  294. package/references/sessionlog/package-lock.json +3672 -0
  295. package/references/sessionlog/package.json +65 -0
  296. package/references/sessionlog/src/__tests__/agent-hooks.test.ts +570 -0
  297. package/references/sessionlog/src/__tests__/agent-registry.test.ts +127 -0
  298. package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +225 -0
  299. package/references/sessionlog/src/__tests__/claude-generator.test.ts +46 -0
  300. package/references/sessionlog/src/__tests__/commit-msg.test.ts +86 -0
  301. package/references/sessionlog/src/__tests__/cursor-agent.test.ts +224 -0
  302. package/references/sessionlog/src/__tests__/e2e-live.test.ts +890 -0
  303. package/references/sessionlog/src/__tests__/event-log.test.ts +183 -0
  304. package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +105 -0
  305. package/references/sessionlog/src/__tests__/gemini-agent.test.ts +375 -0
  306. package/references/sessionlog/src/__tests__/git-hooks.test.ts +78 -0
  307. package/references/sessionlog/src/__tests__/hook-managers.test.ts +121 -0
  308. package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +759 -0
  309. package/references/sessionlog/src/__tests__/opencode-agent.test.ts +338 -0
  310. package/references/sessionlog/src/__tests__/redaction.test.ts +136 -0
  311. package/references/sessionlog/src/__tests__/session-repo.test.ts +353 -0
  312. package/references/sessionlog/src/__tests__/session-store.test.ts +166 -0
  313. package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +466 -0
  314. package/references/sessionlog/src/__tests__/skill-live.test.ts +461 -0
  315. package/references/sessionlog/src/__tests__/summarize.test.ts +348 -0
  316. package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +610 -0
  317. package/references/sessionlog/src/__tests__/task-plan-live.test.ts +632 -0
  318. package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +121 -0
  319. package/references/sessionlog/src/__tests__/types.test.ts +166 -0
  320. package/references/sessionlog/src/__tests__/utils.test.ts +333 -0
  321. package/references/sessionlog/src/__tests__/validation.test.ts +103 -0
  322. package/references/sessionlog/src/__tests__/worktree.test.ts +57 -0
  323. package/references/sessionlog/src/agent/agents/claude-code.ts +1089 -0
  324. package/references/sessionlog/src/agent/agents/cursor.ts +361 -0
  325. package/references/sessionlog/src/agent/agents/gemini-cli.ts +632 -0
  326. package/references/sessionlog/src/agent/agents/opencode.ts +540 -0
  327. package/references/sessionlog/src/agent/registry.ts +143 -0
  328. package/references/sessionlog/src/agent/session-types.ts +113 -0
  329. package/references/sessionlog/src/agent/types.ts +220 -0
  330. package/references/sessionlog/src/cli.ts +597 -0
  331. package/references/sessionlog/src/commands/clean.ts +133 -0
  332. package/references/sessionlog/src/commands/disable.ts +84 -0
  333. package/references/sessionlog/src/commands/doctor.ts +145 -0
  334. package/references/sessionlog/src/commands/enable.ts +202 -0
  335. package/references/sessionlog/src/commands/explain.ts +261 -0
  336. package/references/sessionlog/src/commands/reset.ts +105 -0
  337. package/references/sessionlog/src/commands/resume.ts +180 -0
  338. package/references/sessionlog/src/commands/rewind.ts +195 -0
  339. package/references/sessionlog/src/commands/setup-ccweb.ts +275 -0
  340. package/references/sessionlog/src/commands/status.ts +172 -0
  341. package/references/sessionlog/src/config.ts +165 -0
  342. package/references/sessionlog/src/events/event-log.ts +126 -0
  343. package/references/sessionlog/src/git-operations.ts +558 -0
  344. package/references/sessionlog/src/hooks/git-hooks.ts +165 -0
  345. package/references/sessionlog/src/hooks/lifecycle.ts +391 -0
  346. package/references/sessionlog/src/index.ts +650 -0
  347. package/references/sessionlog/src/security/redaction.ts +283 -0
  348. package/references/sessionlog/src/session/state-machine.ts +452 -0
  349. package/references/sessionlog/src/store/checkpoint-store.ts +509 -0
  350. package/references/sessionlog/src/store/native-store.ts +173 -0
  351. package/references/sessionlog/src/store/provider-types.ts +99 -0
  352. package/references/sessionlog/src/store/session-store.ts +266 -0
  353. package/references/sessionlog/src/strategy/attribution.ts +296 -0
  354. package/references/sessionlog/src/strategy/common.ts +207 -0
  355. package/references/sessionlog/src/strategy/content-overlap.ts +228 -0
  356. package/references/sessionlog/src/strategy/manual-commit.ts +988 -0
  357. package/references/sessionlog/src/strategy/types.ts +279 -0
  358. package/references/sessionlog/src/summarize/claude-generator.ts +115 -0
  359. package/references/sessionlog/src/summarize/summarize.ts +432 -0
  360. package/references/sessionlog/src/types.ts +508 -0
  361. package/references/sessionlog/src/utils/chunk-files.ts +49 -0
  362. package/references/sessionlog/src/utils/commit-message.ts +65 -0
  363. package/references/sessionlog/src/utils/detect-agent.ts +36 -0
  364. package/references/sessionlog/src/utils/hook-managers.ts +125 -0
  365. package/references/sessionlog/src/utils/ide-tags.ts +32 -0
  366. package/references/sessionlog/src/utils/paths.ts +79 -0
  367. package/references/sessionlog/src/utils/preview-rewind.ts +80 -0
  368. package/references/sessionlog/src/utils/rewind-conflict.ts +121 -0
  369. package/references/sessionlog/src/utils/shadow-branch.ts +109 -0
  370. package/references/sessionlog/src/utils/string-utils.ts +46 -0
  371. package/references/sessionlog/src/utils/todo-extract.ts +188 -0
  372. package/references/sessionlog/src/utils/trailers.ts +187 -0
  373. package/references/sessionlog/src/utils/transcript-parse.ts +177 -0
  374. package/references/sessionlog/src/utils/transcript-timestamp.ts +59 -0
  375. package/references/sessionlog/src/utils/tree-ops.ts +219 -0
  376. package/references/sessionlog/src/utils/tty.ts +72 -0
  377. package/references/sessionlog/src/utils/validation.ts +65 -0
  378. package/references/sessionlog/src/utils/worktree.ts +58 -0
  379. package/references/sessionlog/src/wire-types.ts +59 -0
  380. package/references/sessionlog/templates/setup-env.sh +153 -0
  381. package/references/sessionlog/tsconfig.json +18 -0
  382. package/references/sessionlog/vitest.config.ts +12 -0
  383. package/references/skill-tree/.sudocode/issues.jsonl +8 -0
  384. package/references/skill-tree/.sudocode/specs.jsonl +2 -0
  385. package/references/skill-tree/CLAUDE.md +56 -80
  386. package/references/skill-tree/README.md +188 -140
  387. package/references/skill-tree/examples/basic-usage.ts +95 -121
  388. package/references/skill-tree/package-lock.json +369 -26
  389. package/references/skill-tree/package.json +1 -1
  390. package/src/atlas.ts +97 -67
  391. package/src/bin/cli-utils.ts +220 -0
  392. package/src/bin/cognitive-core.ts +84 -392
  393. package/src/bin/commands/kb.ts +266 -0
  394. package/src/bin/commands/learn.ts +100 -0
  395. package/src/bin/commands/legacy.ts +182 -0
  396. package/src/bin/commands/run.ts +113 -0
  397. package/src/bin/commands/sessions.ts +221 -0
  398. package/src/bin/commands/skills.ts +146 -0
  399. package/src/embeddings/index.ts +3 -0
  400. package/src/embeddings/inverted-index.ts +134 -0
  401. package/src/embeddings/manager.ts +13 -8
  402. package/src/embeddings/vector-store.ts +21 -9
  403. package/src/factory.ts +33 -16
  404. package/src/index.ts +136 -9
  405. package/src/learning/analyzer.ts +21 -37
  406. package/src/learning/energy-evaluator.ts +282 -0
  407. package/src/learning/healing-orchestrator.ts +383 -0
  408. package/src/learning/index.ts +66 -9
  409. package/src/learning/instant-loop.ts +357 -0
  410. package/src/learning/maintenance-scheduler.ts +271 -0
  411. package/src/learning/meta-learner.ts +5 -23
  412. package/src/learning/reflexion-generator.ts +273 -0
  413. package/src/learning/trajectory-sources/entire.ts +24 -13
  414. package/src/learning/trajectory-sources/index.ts +2 -2
  415. package/src/learning/trajectory-sources/pipeline.ts +5 -5
  416. package/src/learning/unified-pipeline.ts +1191 -0
  417. package/src/memory/candidate-retrieval.ts +72 -0
  418. package/src/memory/causal-store.ts +273 -0
  419. package/src/memory/coherence.ts +252 -0
  420. package/src/memory/experience.ts +217 -50
  421. package/src/memory/index.ts +43 -0
  422. package/src/memory/knowledge-bank.ts +57 -0
  423. package/src/memory/meta.ts +78 -96
  424. package/src/memory/playbook.ts +239 -75
  425. package/src/memory/reasoning-bank.ts +458 -0
  426. package/src/memory/reflexion.ts +122 -0
  427. package/src/memory/system.ts +21 -5
  428. package/src/memory/temporal-compressor.ts +409 -0
  429. package/src/persistence/index.ts +37 -0
  430. package/src/persistence/migrator.ts +298 -0
  431. package/src/persistence/serializers.ts +79 -0
  432. package/src/persistence/sqlite-persistence.ts +925 -0
  433. package/src/runtime/flows/learning.ts +25 -42
  434. package/src/search/index.ts +10 -0
  435. package/src/search/moe-gate.ts +304 -0
  436. package/src/search/router.ts +111 -4
  437. package/src/session-bank/git-reader.ts +29 -19
  438. package/src/session-bank/index.ts +4 -2
  439. package/src/session-bank/parser.ts +280 -98
  440. package/src/session-bank/session-bank.ts +33 -12
  441. package/src/session-bank/types.ts +8 -5
  442. package/src/surfacing/skill-publisher.ts +17 -49
  443. package/src/surfacing/sqlite-storage-adapter.ts +16 -32
  444. package/src/types/config.ts +30 -0
  445. package/src/types/index.ts +3 -0
  446. package/src/types/memory.ts +30 -0
  447. package/src/types/playbook.ts +4 -0
  448. package/src/utils/error-classifier.ts +113 -0
  449. package/src/utils/index.ts +18 -0
  450. package/src/utils/partitioned-store.ts +299 -0
  451. package/src/utils/trajectory-helpers.ts +79 -0
  452. package/src/workspace/efficacy-toolkit.ts +496 -0
  453. package/src/workspace/index.ts +29 -0
  454. package/src/workspace/runner.ts +3 -3
  455. package/src/workspace/templates/index.ts +24 -0
  456. package/src/workspace/templates/playbook-decay-detection.ts +272 -0
  457. package/src/workspace/templates/playbook-efficacy-audit.ts +246 -0
  458. package/src/workspace/templates/playbook-lifecycle-review.ts +274 -0
  459. package/src/workspace/types.ts +10 -2
  460. package/tests/embeddings/inverted-index.test.ts +138 -0
  461. package/tests/feature-toggles.test.ts +275 -0
  462. package/tests/fixtures/behavioral-trajectories.ts +210 -0
  463. package/tests/gap-fixes.test.ts +17 -4
  464. package/tests/integration/cli-e2e.test.ts +621 -0
  465. package/tests/integration/e2e.test.ts +6 -5
  466. package/tests/integration/entire-e2e.test.ts +314 -125
  467. package/tests/integration/persistence-e2e.test.ts +741 -0
  468. package/tests/integration/phase-e2e.test.ts +1143 -0
  469. package/tests/integration/pipeline-data-correctness.test.ts +794 -0
  470. package/tests/integration/session-bank.test.ts +20 -14
  471. package/tests/integration/sessionlog-e2e.test.ts +329 -0
  472. package/tests/integration/unified-pipeline-e2e.test.ts +634 -0
  473. package/tests/learning/analyzer.test.ts +1 -1
  474. package/tests/learning/energy-evaluator.test.ts +180 -0
  475. package/tests/learning/entire-trajectory-source.test.ts +25 -25
  476. package/tests/learning/healing-orchestrator.test.ts +269 -0
  477. package/tests/learning/instant-loop.test.ts +243 -0
  478. package/tests/learning/maintenance-scheduler.test.ts +191 -0
  479. package/tests/learning/meta-learner.test.ts +418 -0
  480. package/tests/learning/pipeline-memory-updates.test.ts +721 -0
  481. package/tests/learning/reflexion-generator.test.ts +411 -0
  482. package/tests/learning/trajectory-sources.test.ts +12 -4
  483. package/tests/learning/unified-pipeline-efficacy.test.ts +232 -0
  484. package/tests/learning/unified-pipeline.test.ts +322 -0
  485. package/tests/mcp/playbook-server.test.ts +6 -1
  486. package/tests/memory/candidate-retrieval.test.ts +167 -0
  487. package/tests/memory/causal-store.test.ts +276 -0
  488. package/tests/memory/coherence.test.ts +232 -0
  489. package/tests/memory/experience.test.ts +8 -3
  490. package/tests/memory/meta.test.ts +399 -0
  491. package/tests/memory/playbook.test.ts +307 -1
  492. package/tests/memory/provenance.test.ts +11 -2
  493. package/tests/memory/reasoning-bank.test.ts +239 -0
  494. package/tests/memory/reflexion.test.ts +166 -0
  495. package/tests/memory/skill-exporter.test.ts +6 -1
  496. package/tests/memory/system.test.ts +6 -1
  497. package/tests/memory/temporal-compressor.test.ts +318 -0
  498. package/tests/persistence/migrator.test.ts +1009 -0
  499. package/tests/persistence/sqlite-persistence.test.ts +635 -0
  500. package/tests/runtime/agent-manager.test.ts +6 -1
  501. package/tests/runtime/delegate.test.ts +6 -1
  502. package/tests/search/evaluator.test.ts +257 -0
  503. package/tests/search/moe-gate.test.ts +250 -0
  504. package/tests/search/refinement-loop.test.ts +11 -2
  505. package/tests/search/router.test.ts +81 -2
  506. package/tests/search/verification-runner.test.ts +357 -0
  507. package/tests/session-bank/fixtures/sessionlog-root-metadata.json +16 -0
  508. package/tests/session-bank/fixtures/sessionlog-session/full.jsonl +6 -0
  509. package/tests/session-bank/fixtures/sessionlog-session/metadata.json +55 -0
  510. package/tests/session-bank/git-reader.test.ts +13 -13
  511. package/tests/session-bank/parser.test.ts +135 -3
  512. package/tests/session-bank/session-bank.test.ts +1 -1
  513. package/tests/surfacing/skill-library.test.ts +6 -1
  514. package/tests/surfacing/skill-publisher.test.ts +24 -58
  515. package/tests/surfacing/sqlite-storage-adapter.test.ts +11 -23
  516. package/tests/utils/error-classifier.test.ts +149 -0
  517. package/tests/utils/partitioned-store.test.ts +230 -0
  518. package/tests/utils/trajectory-helpers.test.ts +163 -0
  519. package/tests/workspace/efficacy-toolkit.test.ts +404 -0
  520. package/tests/workspace/full-flow.test.ts +10 -4
  521. package/tests/workspace/runner.test.ts +10 -4
  522. package/tests/workspace/templates/playbook-efficacy.test.ts +377 -0
  523. package/docs/DESIGN-workspace-migration.md +0 -1079
  524. package/docs/PLAN-agentic-workspace-implementation.md +0 -717
  525. package/docs/PLAN-graph-migration.md +0 -299
  526. package/docs/PLAN-session-bank-implementation.md +0 -474
  527. package/src/learning/pipeline.ts +0 -323
  528. package/tests/learning/pipeline.test.ts +0 -176
@@ -2,6 +2,8 @@
2
2
  * Meta Memory - Learning about learning
3
3
  * Tracks routing decisions, memory effectiveness, and execution patterns
4
4
  * to improve future learning and routing decisions
5
+ *
6
+ * Backed by SqlitePersistence for unified database storage.
5
7
  */
6
8
 
7
9
  import type {
@@ -14,7 +16,8 @@ import type {
14
16
  RoutingDecisionType,
15
17
  } from '../types/index.js';
16
18
  import { createMetaStrategy } from '../types/index.js';
17
- import { JsonStore } from '../utils/storage.js';
19
+ import type { SqlitePersistence, MetaObservationRow, MetaStrategyRow } from '../persistence/index.js';
20
+ import { fromJSON, fromISO } from '../persistence/index.js';
18
21
 
19
22
  /**
20
23
  * Filter options for querying observations
@@ -27,32 +30,51 @@ export interface ObservationFilter {
27
30
  limit?: number;
28
31
  }
29
32
 
33
+ /**
34
+ * Convert a MetaObservationRow to a MetaObservation.
35
+ */
36
+ function rowToObservation(row: MetaObservationRow): MetaObservation {
37
+ return {
38
+ id: row.id,
39
+ trajectoryId: row.trajectory_id,
40
+ routing: fromJSON(row.routing, { decision: 'direct' as RoutingDecisionType, confidence: 0, reasoning: '' }),
41
+ memoryUsage: fromJSON(row.memory_usage, { experiencesRetrieved: 0, playbooksApplied: [], retrievalQuality: 'neutral' as const }),
42
+ execution: fromJSON(row.execution, { decompositionUsed: false, refinementIterations: 0, backtrackingOccurred: false, toolsUsed: [] }),
43
+ outcome: fromJSON(row.outcome, { success: false, quality: 'poor' as const, effortActual: 0, effortEstimate: 0 }),
44
+ lessons: fromJSON(row.lessons, { whatWorked: [], whatFailed: [], suggestions: [] }),
45
+ timestamp: fromISO(row.timestamp) ?? new Date(),
46
+ };
47
+ }
48
+
49
+ /**
50
+ * Convert a MetaStrategyRow to a MetaStrategy.
51
+ */
52
+ function rowToStrategy(row: MetaStrategyRow): MetaStrategy {
53
+ return {
54
+ id: row.id,
55
+ name: row.name,
56
+ condition: fromJSON(row.condition, { taskCharacteristics: [], memoryState: [] }),
57
+ adjustment: fromJSON(row.adjustment, { routingBias: {}, retrievalModification: '', executionHint: '' }),
58
+ applicationCount: row.application_count,
59
+ successRate: row.success_rate,
60
+ createdAt: fromISO(row.created_at) ?? new Date(),
61
+ updatedAt: fromISO(row.updated_at) ?? new Date(),
62
+ };
63
+ }
64
+
30
65
  /**
31
66
  * Meta Memory - Store for meta-learning observations and strategies
32
67
  */
33
68
  export class MetaMemory {
34
- private observations: JsonStore<MetaObservation>;
35
- private strategies: JsonStore<MetaStrategy>;
69
+ private persistence: SqlitePersistence;
36
70
  private initialized = false;
37
71
 
38
- constructor(baseDir: string) {
39
- this.observations = new JsonStore<MetaObservation>(
40
- baseDir,
41
- 'meta-observations',
42
- {
43
- autoSaveInterval: 60000,
44
- pretty: true,
45
- }
46
- );
47
- this.strategies = new JsonStore<MetaStrategy>(baseDir, 'meta-strategies', {
48
- autoSaveInterval: 60000,
49
- pretty: true,
50
- });
72
+ constructor(persistence: SqlitePersistence) {
73
+ this.persistence = persistence;
51
74
  }
52
75
 
53
76
  async init(): Promise<void> {
54
77
  if (this.initialized) return;
55
- await Promise.all([this.observations.init(), this.strategies.init()]);
56
78
  this.initialized = true;
57
79
  }
58
80
 
@@ -63,8 +85,7 @@ export class MetaMemory {
63
85
  */
64
86
  async recordObservation(observation: MetaObservation): Promise<void> {
65
87
  await this.init();
66
- this.observations.set(observation.id, observation);
67
- await this.observations.save(observation.id);
88
+ this.persistence.insertMetaObservation(observation);
68
89
  }
69
90
 
70
91
  /**
@@ -73,7 +94,7 @@ export class MetaMemory {
73
94
  async getObservations(filter?: ObservationFilter): Promise<MetaObservation[]> {
74
95
  await this.init();
75
96
 
76
- let observations = this.observations.values();
97
+ let observations = this.persistence.getAllMetaObservations().map(rowToObservation);
77
98
 
78
99
  if (filter?.routingDecision) {
79
100
  observations = observations.filter(
@@ -98,11 +119,6 @@ export class MetaMemory {
98
119
  );
99
120
  }
100
121
 
101
- // Sort by timestamp descending (most recent first)
102
- observations.sort(
103
- (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()
104
- );
105
-
106
122
  if (filter?.limit) {
107
123
  observations = observations.slice(0, filter.limit);
108
124
  }
@@ -117,8 +133,8 @@ export class MetaMemory {
117
133
  trajectoryId: string
118
134
  ): Promise<MetaObservation | undefined> {
119
135
  await this.init();
120
- return this.observations
121
- .values()
136
+ return this.persistence.getAllMetaObservations()
137
+ .map(rowToObservation)
122
138
  .find((o) => o.trajectoryId === trajectoryId);
123
139
  }
124
140
 
@@ -126,29 +142,23 @@ export class MetaMemory {
126
142
 
127
143
  /**
128
144
  * Analyze routing effectiveness
129
- * Returns: which routing decisions lead to success in which contexts
130
145
  */
131
146
  async analyzeRoutingEffectiveness(): Promise<RoutingAnalysis> {
132
147
  await this.init();
133
148
 
149
+ // Use SQL aggregation for efficiency
150
+ const raw = this.persistence.aggregateRoutingEffectiveness();
151
+
134
152
  const byDecision: Record<string, { total: number; successful: number }> = {
135
153
  adapt: { total: 0, successful: 0 },
136
154
  direct: { total: 0, successful: 0 },
137
155
  explore: { total: 0, successful: 0 },
138
156
  fallback: { total: 0, successful: 0 },
157
+ ...raw,
139
158
  };
140
159
 
141
- for (const observation of this.observations.values()) {
142
- const decision = observation.routing.decision;
143
- byDecision[decision].total++;
144
- if (observation.outcome.success) {
145
- byDecision[decision].successful++;
146
- }
147
- }
148
-
149
160
  const recommendations: string[] = [];
150
161
 
151
- // Generate recommendations based on analysis
152
162
  for (const [decision, stats] of Object.entries(byDecision)) {
153
163
  if (stats.total >= 5) {
154
164
  const successRate = stats.successful / stats.total;
@@ -169,7 +179,6 @@ export class MetaMemory {
169
179
 
170
180
  /**
171
181
  * Analyze memory retrieval quality
172
- * Returns: which retrieval patterns help vs mislead
173
182
  */
174
183
  async analyzeRetrievalQuality(): Promise<RetrievalAnalysis> {
175
184
  await this.init();
@@ -177,9 +186,10 @@ export class MetaMemory {
177
186
  const helpfulPatterns: Map<string, number> = new Map();
178
187
  const misleadingPatterns: Map<string, number> = new Map();
179
188
 
180
- for (const observation of this.observations.values()) {
181
- const quality = observation.memoryUsage.retrievalQuality;
182
- const playbooks = observation.memoryUsage.playbooksApplied;
189
+ for (const row of this.persistence.getAllMetaObservations()) {
190
+ const obs = rowToObservation(row);
191
+ const quality = obs.memoryUsage.retrievalQuality;
192
+ const playbooks = obs.memoryUsage.playbooksApplied;
183
193
 
184
194
  for (const playbookId of playbooks) {
185
195
  if (quality === 'helpful') {
@@ -198,7 +208,6 @@ export class MetaMemory {
198
208
 
199
209
  const recommendations: string[] = [];
200
210
 
201
- // Find consistently misleading playbooks
202
211
  for (const [playbookId, count] of misleadingPatterns) {
203
212
  const helpfulCount = helpfulPatterns.get(playbookId) ?? 0;
204
213
  if (count > helpfulCount && count >= 3) {
@@ -217,13 +226,13 @@ export class MetaMemory {
217
226
 
218
227
  /**
219
228
  * Generate meta-strategies from observations
220
- * Called periodically to distill learning patterns
221
229
  */
222
230
  async generateMetaStrategies(): Promise<MetaStrategy[]> {
223
231
  await this.init();
224
232
 
225
233
  const newStrategies: MetaStrategy[] = [];
226
- const observations = this.observations.values();
234
+ const observations = this.persistence.getAllMetaObservations().map(rowToObservation);
235
+ const existingStrategies = this.persistence.getAllMetaStrategies().map(rowToStrategy);
227
236
 
228
237
  // Pattern 1: Low-confidence routing tends to need exploration
229
238
  const lowConfidenceObs = observations.filter(
@@ -234,9 +243,7 @@ export class MetaMemory {
234
243
  (lowConfidenceObs.length || 1);
235
244
 
236
245
  if (lowConfidenceObs.length >= 5 && lowConfidenceSuccessRate < 0.4) {
237
- const existing = this.strategies
238
- .values()
239
- .find((s) => s.name === 'low-confidence-explore');
246
+ const existing = existingStrategies.find((s) => s.name === 'low-confidence-explore');
240
247
  if (!existing) {
241
248
  newStrategies.push(
242
249
  createMetaStrategy({
@@ -264,9 +271,7 @@ export class MetaMemory {
264
271
  (multiFileObs.length || 1);
265
272
 
266
273
  if (multiFileObs.length >= 5 && multiFileSuccessRate > 0.7) {
267
- const existing = this.strategies
268
- .values()
269
- .find((s) => s.name === 'decomposition-effective');
274
+ const existing = existingStrategies.find((s) => s.name === 'decomposition-effective');
270
275
  if (!existing) {
271
276
  newStrategies.push(
272
277
  createMetaStrategy({
@@ -294,9 +299,7 @@ export class MetaMemory {
294
299
  (refinedObs.length || 1);
295
300
 
296
301
  if (refinedObs.length >= 5 && refinedSuccessRate > 0.6) {
297
- const existing = this.strategies
298
- .values()
299
- .find((s) => s.name === 'refinement-beneficial');
302
+ const existing = existingStrategies.find((s) => s.name === 'refinement-beneficial');
300
303
  if (!existing) {
301
304
  newStrategies.push(
302
305
  createMetaStrategy({
@@ -317,8 +320,7 @@ export class MetaMemory {
317
320
 
318
321
  // Save new strategies
319
322
  for (const strategy of newStrategies) {
320
- this.strategies.set(strategy.id, strategy);
321
- await this.strategies.save(strategy.id);
323
+ this.persistence.insertMetaStrategy(strategy);
322
324
  }
323
325
 
324
326
  return newStrategies;
@@ -334,8 +336,9 @@ export class MetaMemory {
334
336
 
335
337
  const applicable: MetaStrategy[] = [];
336
338
 
337
- for (const strategy of this.strategies.values()) {
338
- // Check if task characteristics match
339
+ for (const row of this.persistence.getAllMetaStrategies()) {
340
+ const strategy = rowToStrategy(row);
341
+
339
342
  const taskMatch =
340
343
  strategy.condition.taskCharacteristics.length === 0 ||
341
344
  strategy.condition.taskCharacteristics.some((tc) =>
@@ -344,7 +347,6 @@ export class MetaMemory {
344
347
  )
345
348
  );
346
349
 
347
- // Check if memory state matches
348
350
  const memoryMatch =
349
351
  strategy.condition.memoryState.length === 0 ||
350
352
  strategy.condition.memoryState.some((ms) =>
@@ -369,17 +371,17 @@ export class MetaMemory {
369
371
  success: boolean
370
372
  ): Promise<void> {
371
373
  await this.init();
372
- const strategy = this.strategies.get(strategyId);
373
- if (!strategy) return;
374
+ const row = this.persistence.getMetaStrategy(strategyId);
375
+ if (!row) return;
374
376
 
377
+ const strategy = rowToStrategy(row);
375
378
  strategy.applicationCount++;
376
379
  const alpha = 0.1;
377
380
  strategy.successRate =
378
381
  strategy.successRate * (1 - alpha) + (success ? 1 : 0) * alpha;
379
382
  strategy.updatedAt = new Date();
380
383
 
381
- this.strategies.set(strategyId, strategy);
382
- await this.strategies.save(strategyId);
384
+ this.persistence.insertMetaStrategy(strategy); // Write-through
383
385
  }
384
386
 
385
387
  // === LIFECYCLE ===
@@ -389,8 +391,7 @@ export class MetaMemory {
389
391
  */
390
392
  async addStrategy(strategy: MetaStrategy): Promise<void> {
391
393
  await this.init();
392
- this.strategies.set(strategy.id, strategy);
393
- await this.strategies.save(strategy.id);
394
+ this.persistence.insertMetaStrategy(strategy);
394
395
  }
395
396
 
396
397
  /**
@@ -398,7 +399,8 @@ export class MetaMemory {
398
399
  */
399
400
  async getStrategy(id: string): Promise<MetaStrategy | undefined> {
400
401
  await this.init();
401
- return this.strategies.get(id);
402
+ const row = this.persistence.getMetaStrategy(id);
403
+ return row ? rowToStrategy(row) : undefined;
402
404
  }
403
405
 
404
406
  /**
@@ -406,7 +408,7 @@ export class MetaMemory {
406
408
  */
407
409
  async getAllStrategies(): Promise<MetaStrategy[]> {
408
410
  await this.init();
409
- return this.strategies.values();
411
+ return this.persistence.getAllMetaStrategies().map(rowToStrategy);
410
412
  }
411
413
 
412
414
  /**
@@ -415,9 +417,9 @@ export class MetaMemory {
415
417
  async getStats(): Promise<MetaStats> {
416
418
  await this.init();
417
419
 
418
- const observations = this.observations.values();
420
+ const observations = this.persistence.getAllMetaObservations().map(rowToObservation);
419
421
  const totalObservations = observations.length;
420
- const totalStrategies = this.strategies.size();
422
+ const totalStrategies = this.persistence.getAllMetaStrategies().length;
421
423
 
422
424
  const observationsByRouting: Record<RoutingDecisionType, number> = {
423
425
  adapt: 0,
@@ -435,19 +437,9 @@ export class MetaMemory {
435
437
  const averageSuccessRate =
436
438
  totalObservations > 0 ? successCount / totalObservations : 0;
437
439
 
438
- // Determine trend from recent observations
439
- const recent = observations
440
- .sort(
441
- (a, b) =>
442
- new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()
443
- )
444
- .slice(0, 10);
445
- const older = observations
446
- .sort(
447
- (a, b) =>
448
- new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()
449
- )
450
- .slice(10, 20);
440
+ // Determine trend from recent observations (already sorted by timestamp DESC from SQL)
441
+ const recent = observations.slice(0, 10);
442
+ const older = observations.slice(10, 20);
451
443
 
452
444
  let recentTrend: 'improving' | 'stable' | 'declining' = 'stable';
453
445
  if (recent.length >= 5 && older.length >= 5) {
@@ -476,31 +468,21 @@ export class MetaMemory {
476
468
  */
477
469
  async pruneOldObservations(maxAge: number = 30 * 24 * 60 * 60 * 1000): Promise<number> {
478
470
  await this.init();
479
-
480
471
  const cutoff = new Date(Date.now() - maxAge);
481
- let pruned = 0;
482
-
483
- for (const observation of this.observations.values()) {
484
- if (new Date(observation.timestamp) < cutoff) {
485
- this.observations.delete(observation.id);
486
- pruned++;
487
- }
488
- }
489
-
490
- return pruned;
472
+ return this.persistence.deleteMetaObservationsBefore(cutoff);
491
473
  }
492
474
 
493
475
  /**
494
- * Close the stores
476
+ * Close the stores (no-op — SqlitePersistence lifecycle is managed externally)
495
477
  */
496
478
  async close(): Promise<void> {
497
- await Promise.all([this.observations.close(), this.strategies.close()]);
479
+ // SqlitePersistence lifecycle is managed by MemorySystem/Atlas
498
480
  }
499
481
  }
500
482
 
501
483
  /**
502
484
  * Create a meta memory store
503
485
  */
504
- export function createMetaMemory(baseDir: string): MetaMemory {
505
- return new MetaMemory(baseDir);
486
+ export function createMetaMemory(persistence: SqlitePersistence): MetaMemory {
487
+ return new MetaMemory(persistence);
506
488
  }