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
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Tests that ruvector-inspired features are individually toggleable
3
+ * via config.features without breaking the system.
4
+ */
5
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
6
+ import { Atlas, createAtlas } from '../src/atlas.js';
7
+ import { createDefaultConfig, type AtlasConfig } from '../src/types/config.js';
8
+ import { InstantLoop } from '../src/learning/instant-loop.js';
9
+ import { MemorySystem } from '../src/memory/system.js';
10
+ import { UnifiedLearningPipeline } from '../src/learning/unified-pipeline.js';
11
+ import {
12
+ createTrajectory,
13
+ type Trajectory,
14
+ } from '../src/types/trajectory.js';
15
+ import { createTask } from '../src/types/task.js';
16
+ import { createStep } from '../src/types/step.js';
17
+ import { successOutcome, failureOutcome } from '../src/types/outcome.js';
18
+ import { mkdtemp, rm } from 'node:fs/promises';
19
+ import { join } from 'node:path';
20
+ import { tmpdir } from 'node:os';
21
+ import { createSqlitePersistence } from '../src/persistence/index.js';
22
+
23
+ function makeTrajectory(overrides?: {
24
+ success?: boolean;
25
+ domain?: string;
26
+ errorInfo?: string;
27
+ }): Trajectory {
28
+ const success = overrides?.success ?? true;
29
+ return createTrajectory({
30
+ task: createTask({
31
+ description: 'Fix the typescript import error',
32
+ domain: overrides?.domain ?? 'typescript',
33
+ }),
34
+ steps: [
35
+ createStep({
36
+ thought: 'Let me check the imports',
37
+ action: 'ReadFile src/index.ts',
38
+ observation: 'File content: import { foo } from "./bar"',
39
+ }),
40
+ ],
41
+ outcome: success
42
+ ? successOutcome('Fixed import path')
43
+ : failureOutcome(overrides?.errorInfo ?? 'Could not resolve import'),
44
+ agentId: 'test-agent',
45
+ });
46
+ }
47
+
48
+ describe('Feature Toggles', () => {
49
+ describe('config defaults', () => {
50
+ it('should default all feature toggles to true', () => {
51
+ const config = createDefaultConfig();
52
+ expect(config.features.instantLoop).toBe(true);
53
+ expect(config.features.reflexion).toBe(true);
54
+ expect(config.features.coherenceChecking).toBe(true);
55
+ expect(config.features.reasoningBank).toBe(true);
56
+ expect(config.features.causalExtraction).toBe(true);
57
+ expect(config.features.temporalCompression).toBe(true);
58
+ });
59
+
60
+ it('should allow disabling individual features', () => {
61
+ const config = createDefaultConfig({
62
+ features: {
63
+ instantLoop: false,
64
+ reflexion: false,
65
+ coherenceChecking: false,
66
+ reasoningBank: false,
67
+ causalExtraction: false,
68
+ temporalCompression: false,
69
+ },
70
+ });
71
+ expect(config.features.instantLoop).toBe(false);
72
+ expect(config.features.reflexion).toBe(false);
73
+ expect(config.features.coherenceChecking).toBe(false);
74
+ expect(config.features.reasoningBank).toBe(false);
75
+ expect(config.features.causalExtraction).toBe(false);
76
+ expect(config.features.temporalCompression).toBe(false);
77
+ });
78
+
79
+ it('should allow partial feature overrides', () => {
80
+ const config = createDefaultConfig({
81
+ features: { instantLoop: false },
82
+ });
83
+ expect(config.features.instantLoop).toBe(false);
84
+ // Others remain true
85
+ expect(config.features.reflexion).toBe(true);
86
+ expect(config.features.causalExtraction).toBe(true);
87
+ });
88
+ });
89
+
90
+ describe('Atlas with features disabled', () => {
91
+ let tempDir: string;
92
+
93
+ beforeEach(async () => {
94
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-feature-toggle-test-'));
95
+ });
96
+
97
+ afterEach(async () => {
98
+ await rm(tempDir, { recursive: true, force: true });
99
+ });
100
+
101
+ it('should expose unified learning pipeline', async () => {
102
+ const atlas = createAtlas({
103
+ storage: { baseDir: tempDir },
104
+ });
105
+ await atlas.init();
106
+
107
+ expect(atlas.getLearning()).toBeDefined();
108
+ expect(atlas.getLearning().getAccumulatedCount()).toBe(0);
109
+ await atlas.close();
110
+ });
111
+
112
+ it('should processTrajectory and return ImmediateResult', async () => {
113
+ const atlas = createAtlas({
114
+ storage: { baseDir: tempDir },
115
+ features: { reflexion: false, causalExtraction: false },
116
+ });
117
+ await atlas.init();
118
+
119
+ const trajectory = makeTrajectory();
120
+ const result = await atlas.processTrajectory(trajectory);
121
+ expect(result.instantLoop).toBeDefined();
122
+ expect(result.instantLoop.experienceId).toBeDefined();
123
+ expect(result.batchTriggered).toBe(false);
124
+
125
+ await atlas.close();
126
+ });
127
+
128
+ it('should work with all features disabled', async () => {
129
+ const atlas = createAtlas({
130
+ storage: { baseDir: tempDir },
131
+ features: {
132
+ instantLoop: false,
133
+ reflexion: false,
134
+ coherenceChecking: false,
135
+ reasoningBank: false,
136
+ causalExtraction: false,
137
+ temporalCompression: false,
138
+ },
139
+ });
140
+ await atlas.init();
141
+
142
+ const trajectory = makeTrajectory();
143
+ const result = await atlas.processTrajectory(trajectory);
144
+ expect(result.instantLoop).toBeDefined();
145
+ expect(result.instantLoop.experienceId).toBeDefined();
146
+
147
+ await atlas.close();
148
+ });
149
+ });
150
+
151
+ describe('InstantLoop toggles', () => {
152
+ let tempDir: string;
153
+ let memory: MemorySystem;
154
+ let persistence: any;
155
+
156
+ beforeEach(async () => {
157
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-il-toggle-test-'));
158
+ persistence = createSqlitePersistence({ baseDir: tempDir });
159
+ await persistence.init();
160
+ memory = new MemorySystem(persistence, tempDir);
161
+ await memory.init();
162
+ });
163
+
164
+ afterEach(async () => {
165
+ await memory.close();
166
+ persistence.close();
167
+ await rm(tempDir, { recursive: true, force: true });
168
+ });
169
+
170
+ it('should skip reflexion when enableReflexion is false', async () => {
171
+ const loop = new InstantLoop(memory, { enableReflexion: false });
172
+ const trajectory = makeTrajectory();
173
+ const result = await loop.process(trajectory);
174
+
175
+ expect(result.reflexionEpisodeId).toBeUndefined();
176
+ expect(result.experienceId).toBeDefined();
177
+ });
178
+
179
+ it('should generate reflexion by default', async () => {
180
+ const loop = new InstantLoop(memory);
181
+ const trajectory = makeTrajectory();
182
+ const result = await loop.process(trajectory);
183
+
184
+ expect(result.reflexionEpisodeId).toBeDefined();
185
+ });
186
+
187
+ it('should skip causal extraction when enableCausalExtraction is false', async () => {
188
+ const loop = new InstantLoop(memory, { enableCausalExtraction: false });
189
+ const trajectory = makeTrajectory();
190
+ const result = await loop.process(trajectory);
191
+
192
+ expect(result.causalEdgesExtracted).toBe(0);
193
+ expect(result.experienceId).toBeDefined();
194
+ });
195
+
196
+ it('should extract causal edges by default', async () => {
197
+ const loop = new InstantLoop(memory);
198
+ const trajectory = makeTrajectory();
199
+ const result = await loop.process(trajectory);
200
+
201
+ expect(result.causalEdgesExtracted).toBeGreaterThan(0);
202
+ });
203
+ });
204
+
205
+ describe('UnifiedLearningPipeline toggles', () => {
206
+ let tempDir: string;
207
+ let memory: MemorySystem;
208
+ let persistence: any;
209
+
210
+ beforeEach(async () => {
211
+ tempDir = await mkdtemp(join(tmpdir(), 'atlas-lp-toggle-test-'));
212
+ persistence = createSqlitePersistence({ baseDir: tempDir });
213
+ await persistence.init();
214
+ memory = new MemorySystem(persistence, tempDir);
215
+ await memory.init();
216
+ });
217
+
218
+ afterEach(async () => {
219
+ await memory.close();
220
+ persistence.close();
221
+ await rm(tempDir, { recursive: true, force: true });
222
+ });
223
+
224
+ it('should skip temporal compression when disabled', async () => {
225
+ const pipeline = new UnifiedLearningPipeline(memory, {
226
+ features: { temporalCompression: false, reasoningBank: true },
227
+ batch: { learning: { minTrajectories: 10 }, energy: { countThreshold: 100 } },
228
+ }, persistence);
229
+ await pipeline.init();
230
+
231
+ // Process enough trajectories, then force batch
232
+ for (let i = 0; i < 10; i++) {
233
+ await pipeline.processTrajectory(makeTrajectory({ domain: 'test' }));
234
+ }
235
+
236
+ const result = await pipeline.runBatch();
237
+ // Compression fields should be zero when disabled
238
+ expect(result.experiencesCompressed.promoted).toBe(0);
239
+ expect(result.experiencesCompressed.demoted).toBe(0);
240
+ expect(result.experiencesCompressed.evicted).toBe(0);
241
+ });
242
+
243
+ it('should skip reasoning bank clustering when disabled', async () => {
244
+ const pipeline = new UnifiedLearningPipeline(memory, {
245
+ features: { temporalCompression: true, reasoningBank: false },
246
+ batch: { learning: { minTrajectories: 10 }, energy: { countThreshold: 100 } },
247
+ }, persistence);
248
+ await pipeline.init();
249
+
250
+ for (let i = 0; i < 10; i++) {
251
+ await pipeline.processTrajectory(makeTrajectory({ domain: 'test' }));
252
+ }
253
+
254
+ // Should not throw even without reasoning bank
255
+ const result = await pipeline.runBatch();
256
+ expect(result.trajectoriesProcessed).toBe(10);
257
+ });
258
+
259
+ it('should work with both disabled', async () => {
260
+ const pipeline = new UnifiedLearningPipeline(memory, {
261
+ features: { temporalCompression: false, reasoningBank: false },
262
+ batch: { learning: { minTrajectories: 10 }, energy: { countThreshold: 100 } },
263
+ }, persistence);
264
+ await pipeline.init();
265
+
266
+ for (let i = 0; i < 10; i++) {
267
+ await pipeline.processTrajectory(makeTrajectory({ domain: 'test' }));
268
+ }
269
+
270
+ const result = await pipeline.runBatch();
271
+ expect(result.trajectoriesProcessed).toBe(10);
272
+ expect(result.experiencesCompressed.evicted).toBe(0);
273
+ });
274
+ });
275
+ });
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Story-based trajectory fixtures for behavioral tests.
3
+ *
4
+ * Each factory produces a realistic trajectory with semantically meaningful
5
+ * steps — the kind of thing an agent actually does when solving a task.
6
+ */
7
+
8
+ import { createTrajectory, type Trajectory } from '../../src/types/trajectory.js';
9
+ import { createTask } from '../../src/types/task.js';
10
+ import { createStep } from '../../src/types/step.js';
11
+ import { successOutcome, failureOutcome } from '../../src/types/outcome.js';
12
+
13
+ /**
14
+ * Successful "fix broken TypeScript import" trajectory.
15
+ * Steps: read file → identify wrong path → edit import → run tsc → pass.
16
+ */
17
+ export function makeTypescriptImportFix(variant: number): Trajectory {
18
+ const files = ['routes.ts', 'utils.ts', 'handler.ts', 'service.ts', 'controller.ts', 'middleware.ts'];
19
+ const file = files[variant % files.length];
20
+ return createTrajectory({
21
+ task: createTask({
22
+ domain: 'typescript',
23
+ description: `Fix broken TypeScript import in src/${file}`,
24
+ }),
25
+ steps: [
26
+ createStep({
27
+ thought: `Check the import statements in ${file}`,
28
+ action: `ReadFile src/${file}`,
29
+ observation: `import { UserService } from "./services/user"\n// TS2307: Cannot find module './services/user'`,
30
+ }),
31
+ createStep({
32
+ thought: 'The import path is missing the .js extension required by ESM',
33
+ action: `EditFile src/${file}`,
34
+ observation: `Updated: import { UserService } from "./services/user.js"`,
35
+ }),
36
+ createStep({
37
+ thought: 'Verify the fix compiles',
38
+ action: 'Bash tsc --noEmit',
39
+ observation: 'Compilation successful. No errors found.',
40
+ }),
41
+ ],
42
+ outcome: successOutcome(`Fixed ESM import extension in src/${file}`),
43
+ agentId: 'test-agent',
44
+ });
45
+ }
46
+
47
+ /**
48
+ * Successful "fix Python type error" trajectory.
49
+ * Steps: read traceback → identify wrong type → edit function → run pytest → pass.
50
+ */
51
+ export function makePythonTypeFix(variant: number): Trajectory {
52
+ const files = ['api.py', 'models.py', 'views.py', 'serializers.py', 'utils.py'];
53
+ const file = files[variant % files.length];
54
+ return createTrajectory({
55
+ task: createTask({
56
+ domain: 'python',
57
+ description: `Fix Python type error in ${file}`,
58
+ }),
59
+ steps: [
60
+ createStep({
61
+ thought: `Read the failing file ${file}`,
62
+ action: `ReadFile ${file}`,
63
+ observation: `def process_items(items: list[str]) -> int:\n return items.count`,
64
+ }),
65
+ createStep({
66
+ thought: 'The function returns the method reference instead of calling it',
67
+ action: `EditFile ${file}`,
68
+ observation: `Updated: return items.count() # was missing parentheses`,
69
+ }),
70
+ createStep({
71
+ thought: 'Run the tests to verify',
72
+ action: 'Bash pytest -x',
73
+ observation: '5 passed in 0.3s',
74
+ }),
75
+ ],
76
+ outcome: successOutcome(`Fixed missing parentheses in ${file}`),
77
+ agentId: 'test-agent',
78
+ });
79
+ }
80
+
81
+ /**
82
+ * Failed "fix authentication bypass" trajectory.
83
+ * Steps: read auth code → attempt fix → tests still fail.
84
+ */
85
+ export function makeFailedAuthFix(errorDetail: string): Trajectory {
86
+ return createTrajectory({
87
+ task: createTask({
88
+ domain: 'security',
89
+ description: 'Fix authentication bypass vulnerability in auth middleware',
90
+ }),
91
+ steps: [
92
+ createStep({
93
+ thought: 'Read the auth middleware to understand the vulnerability',
94
+ action: 'ReadFile src/middleware/auth.ts',
95
+ observation: 'JWT token validation skips expiry check when token has admin role',
96
+ }),
97
+ createStep({
98
+ thought: 'Add expiry validation for all tokens regardless of role',
99
+ action: 'EditFile src/middleware/auth.ts',
100
+ observation: 'Added: if (isTokenExpired(token)) throw new AuthError("expired")',
101
+ }),
102
+ createStep({
103
+ thought: 'Run the security test suite',
104
+ action: 'Bash npm run test:security',
105
+ observation: `FAIL: ${errorDetail}`,
106
+ }),
107
+ ],
108
+ outcome: failureOutcome(errorDetail),
109
+ agentId: 'test-agent',
110
+ });
111
+ }
112
+
113
+ /**
114
+ * Successful Kubernetes deployment — completely different domain.
115
+ */
116
+ export function makeKubernetesDeploy(): Trajectory {
117
+ return createTrajectory({
118
+ task: createTask({
119
+ domain: 'devops',
120
+ description: 'Deploy updated API service to Kubernetes staging cluster',
121
+ }),
122
+ steps: [
123
+ createStep({
124
+ thought: 'Check current deployment status',
125
+ action: 'Bash kubectl get pods -n staging',
126
+ observation: 'api-service-7f8d9c 1/1 Running 0 12h',
127
+ }),
128
+ createStep({
129
+ thought: 'Apply the new deployment manifest',
130
+ action: 'Bash kubectl apply -f k8s/api-service.yaml',
131
+ observation: 'deployment.apps/api-service configured',
132
+ }),
133
+ createStep({
134
+ thought: 'Wait for rollout to complete',
135
+ action: 'Bash kubectl rollout status deployment/api-service -n staging',
136
+ observation: 'deployment "api-service" successfully rolled out',
137
+ }),
138
+ ],
139
+ outcome: successOutcome('Deployed api-service v2.3.1 to staging'),
140
+ agentId: 'test-agent',
141
+ });
142
+ }
143
+
144
+ /**
145
+ * Inefficient trajectory with many repeated read actions.
146
+ * Useful for testing reflexion critique of wasted steps.
147
+ */
148
+ export function makeInefficient(stepCount: number): Trajectory {
149
+ const steps = [];
150
+ for (let i = 0; i < stepCount; i++) {
151
+ steps.push(
152
+ createStep({
153
+ thought: `Check config again (attempt ${i + 1})`,
154
+ action: 'ReadFile src/config.ts',
155
+ observation: 'export const config = { debug: false, port: 3000 }',
156
+ }),
157
+ );
158
+ }
159
+ // Finally do the actual fix
160
+ steps.push(
161
+ createStep({
162
+ thought: 'After re-reading many times, change the debug flag',
163
+ action: 'EditFile src/config.ts',
164
+ observation: 'Updated: debug: true',
165
+ }),
166
+ );
167
+
168
+ return createTrajectory({
169
+ task: createTask({
170
+ domain: 'typescript',
171
+ description: 'Enable debug mode in application config',
172
+ }),
173
+ steps,
174
+ outcome: failureOutcome('Timed out after too many read operations'),
175
+ agentId: 'test-agent',
176
+ });
177
+ }
178
+
179
+ /**
180
+ * Successful trajectory with a specific solution description,
181
+ * useful for verifying causal edge extraction.
182
+ */
183
+ export function makeSuccessfulWithSolution(
184
+ domain: string,
185
+ description: string,
186
+ solution: string,
187
+ ): Trajectory {
188
+ return createTrajectory({
189
+ task: createTask({ domain, description }),
190
+ steps: [
191
+ createStep({
192
+ thought: 'Analyze the problem',
193
+ action: 'ReadFile src/main.ts',
194
+ observation: 'Found the issue',
195
+ }),
196
+ createStep({
197
+ thought: 'Apply the fix',
198
+ action: 'EditFile src/main.ts',
199
+ observation: 'File updated',
200
+ }),
201
+ createStep({
202
+ thought: 'Verify',
203
+ action: 'Bash npm test',
204
+ observation: 'All tests passed',
205
+ }),
206
+ ],
207
+ outcome: successOutcome(solution),
208
+ agentId: 'test-agent',
209
+ });
210
+ }
@@ -24,6 +24,7 @@ import type { Playbook } from '../src/types/index.js';
24
24
  // Memory
25
25
  import { createMemorySystem, type MemorySystem } from '../src/memory/system.js';
26
26
  import { MetaMemory } from '../src/memory/meta.js';
27
+ import { createSqlitePersistence } from '../src/persistence/index.js';
27
28
 
28
29
  // Learning
29
30
  import { MetaLearner, createMetaLearner } from '../src/learning/meta-learner.js';
@@ -209,7 +210,7 @@ describe('Gap 1: LLMPlaybookExtractor deletion', () => {
209
210
  expect('PlaybookExtractor' in learningExports).toBe(true);
210
211
  expect('MetaLearner' in learningExports).toBe(true);
211
212
  expect('PlaybookUsageInference' in learningExports).toBe(true);
212
- expect('LearningPipeline' in learningExports).toBe(true);
213
+ expect('UnifiedLearningPipeline' in learningExports).toBe(true);
213
214
  expect('LearningEffectivenessTracker' in learningExports).toBe(true);
214
215
  });
215
216
  });
@@ -283,15 +284,19 @@ describe('Gap 4: MetaLearner.recordFromReflection', () => {
283
284
  let tempDir: string;
284
285
  let metaMemory: MetaMemory;
285
286
  let metaLearner: MetaLearner;
287
+ let persistence: any;
286
288
 
287
289
  beforeEach(async () => {
288
290
  tempDir = await mkdtemp(join(tmpdir(), 'meta-learner-test-'));
289
- metaMemory = new MetaMemory(tempDir);
291
+ persistence = createSqlitePersistence({ baseDir: tempDir });
292
+ await persistence.init();
293
+ metaMemory = new MetaMemory(persistence);
290
294
  await metaMemory.init();
291
295
  metaLearner = createMetaLearner(metaMemory);
292
296
  });
293
297
 
294
298
  afterEach(async () => {
299
+ persistence.close();
295
300
  await rm(tempDir, { recursive: true, force: true });
296
301
  });
297
302
 
@@ -538,10 +543,13 @@ describe('Gap 5a: SolutionEvaluator.setTaskRunner', () => {
538
543
  let tempDir: string;
539
544
  let memory: MemorySystem;
540
545
  let agentManager: AgentManager;
546
+ let persistence: any;
541
547
 
542
548
  beforeEach(async () => {
543
549
  tempDir = await mkdtemp(join(tmpdir(), 'evaluator-test-'));
544
- memory = createMemorySystem(tempDir);
550
+ persistence = createSqlitePersistence({ baseDir: tempDir });
551
+ await persistence.init();
552
+ memory = createMemorySystem(persistence, tempDir);
545
553
  await memory.init();
546
554
  agentManager = createAgentManager(memory);
547
555
  const mockBackend = createMockBackend({ success: true, result: 'ok', durationMs: 10 });
@@ -550,6 +558,7 @@ describe('Gap 5a: SolutionEvaluator.setTaskRunner', () => {
550
558
 
551
559
  afterEach(async () => {
552
560
  await memory.close();
561
+ persistence.close();
553
562
  await rm(tempDir, { recursive: true, force: true });
554
563
  });
555
564
 
@@ -686,10 +695,13 @@ describe('Gap 5b: RefinementLoop.setTaskRunner', () => {
686
695
  let memory: MemorySystem;
687
696
  let agentManager: AgentManager;
688
697
  let mockBackend: MockBackend;
698
+ let persistence: any;
689
699
 
690
700
  beforeEach(async () => {
691
701
  tempDir = await mkdtemp(join(tmpdir(), 'refine-runner-test-'));
692
- memory = createMemorySystem(tempDir);
702
+ persistence = createSqlitePersistence({ baseDir: tempDir });
703
+ await persistence.init();
704
+ memory = createMemorySystem(persistence, tempDir);
693
705
  await memory.init();
694
706
  agentManager = createAgentManager(memory);
695
707
  mockBackend = createMockBackend({
@@ -702,6 +714,7 @@ describe('Gap 5b: RefinementLoop.setTaskRunner', () => {
702
714
 
703
715
  afterEach(async () => {
704
716
  await memory.close();
717
+ persistence.close();
705
718
  await rm(tempDir, { recursive: true, force: true });
706
719
  });
707
720