cognitive-core 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/CLAUDE.md +233 -0
  2. package/README.md +370 -54
  3. package/dist/atlas.d.ts +10 -10
  4. package/dist/atlas.d.ts.map +1 -1
  5. package/dist/atlas.js +79 -48
  6. package/dist/atlas.js.map +1 -1
  7. package/dist/bin/cli-utils.d.ts +37 -0
  8. package/dist/bin/cli-utils.d.ts.map +1 -0
  9. package/dist/bin/cli-utils.js +176 -0
  10. package/dist/bin/cli-utils.js.map +1 -0
  11. package/dist/bin/cognitive-core.d.ts +2 -12
  12. package/dist/bin/cognitive-core.d.ts.map +1 -1
  13. package/dist/bin/cognitive-core.js +76 -351
  14. package/dist/bin/cognitive-core.js.map +1 -1
  15. package/dist/bin/commands/kb.d.ts +6 -0
  16. package/dist/bin/commands/kb.d.ts.map +1 -0
  17. package/dist/bin/commands/kb.js +240 -0
  18. package/dist/bin/commands/kb.js.map +1 -0
  19. package/dist/bin/commands/learn.d.ts +6 -0
  20. package/dist/bin/commands/learn.d.ts.map +1 -0
  21. package/dist/bin/commands/learn.js +91 -0
  22. package/dist/bin/commands/learn.js.map +1 -0
  23. package/dist/bin/commands/legacy.d.ts +12 -0
  24. package/dist/bin/commands/legacy.d.ts.map +1 -0
  25. package/dist/bin/commands/legacy.js +142 -0
  26. package/dist/bin/commands/legacy.js.map +1 -0
  27. package/dist/bin/commands/run.d.ts +3 -0
  28. package/dist/bin/commands/run.d.ts.map +1 -0
  29. package/dist/bin/commands/run.js +99 -0
  30. package/dist/bin/commands/run.js.map +1 -0
  31. package/dist/bin/commands/sessions.d.ts +9 -0
  32. package/dist/bin/commands/sessions.d.ts.map +1 -0
  33. package/dist/bin/commands/sessions.js +183 -0
  34. package/dist/bin/commands/sessions.js.map +1 -0
  35. package/dist/bin/commands/skills.d.ts +6 -0
  36. package/dist/bin/commands/skills.d.ts.map +1 -0
  37. package/dist/bin/commands/skills.js +135 -0
  38. package/dist/bin/commands/skills.js.map +1 -0
  39. package/dist/embeddings/index.d.ts +1 -0
  40. package/dist/embeddings/index.d.ts.map +1 -1
  41. package/dist/embeddings/index.js +2 -0
  42. package/dist/embeddings/index.js.map +1 -1
  43. package/dist/embeddings/inverted-index.d.ts +47 -0
  44. package/dist/embeddings/inverted-index.d.ts.map +1 -0
  45. package/dist/embeddings/inverted-index.js +122 -0
  46. package/dist/embeddings/inverted-index.js.map +1 -0
  47. package/dist/embeddings/manager.d.ts +3 -1
  48. package/dist/embeddings/manager.d.ts.map +1 -1
  49. package/dist/embeddings/manager.js +12 -7
  50. package/dist/embeddings/manager.js.map +1 -1
  51. package/dist/embeddings/vector-store.d.ts +7 -3
  52. package/dist/embeddings/vector-store.d.ts.map +1 -1
  53. package/dist/embeddings/vector-store.js +22 -6
  54. package/dist/embeddings/vector-store.js.map +1 -1
  55. package/dist/factory.d.ts +11 -12
  56. package/dist/factory.d.ts.map +1 -1
  57. package/dist/factory.js +20 -7
  58. package/dist/factory.js.map +1 -1
  59. package/dist/index.d.ts +7 -6
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +37 -5
  62. package/dist/index.js.map +1 -1
  63. package/dist/learning/analyzer.d.ts.map +1 -1
  64. package/dist/learning/analyzer.js +17 -35
  65. package/dist/learning/analyzer.js.map +1 -1
  66. package/dist/learning/energy-evaluator.d.ts +128 -0
  67. package/dist/learning/energy-evaluator.d.ts.map +1 -0
  68. package/dist/learning/energy-evaluator.js +175 -0
  69. package/dist/learning/energy-evaluator.js.map +1 -0
  70. package/dist/learning/healing-orchestrator.d.ts +182 -0
  71. package/dist/learning/healing-orchestrator.d.ts.map +1 -0
  72. package/dist/learning/healing-orchestrator.js +250 -0
  73. package/dist/learning/healing-orchestrator.js.map +1 -0
  74. package/dist/learning/index.d.ts +7 -2
  75. package/dist/learning/index.d.ts.map +1 -1
  76. package/dist/learning/index.js +13 -2
  77. package/dist/learning/index.js.map +1 -1
  78. package/dist/learning/instant-loop.d.ts +87 -0
  79. package/dist/learning/instant-loop.d.ts.map +1 -0
  80. package/dist/learning/instant-loop.js +264 -0
  81. package/dist/learning/instant-loop.js.map +1 -0
  82. package/dist/learning/loop-coordinator.d.ts +61 -0
  83. package/dist/learning/loop-coordinator.d.ts.map +1 -0
  84. package/dist/learning/loop-coordinator.js +96 -0
  85. package/dist/learning/loop-coordinator.js.map +1 -0
  86. package/dist/learning/maintenance-scheduler.d.ts +141 -0
  87. package/dist/learning/maintenance-scheduler.d.ts.map +1 -0
  88. package/dist/learning/maintenance-scheduler.js +186 -0
  89. package/dist/learning/maintenance-scheduler.js.map +1 -0
  90. package/dist/learning/meta-learner.d.ts.map +1 -1
  91. package/dist/learning/meta-learner.js +4 -21
  92. package/dist/learning/meta-learner.js.map +1 -1
  93. package/dist/learning/pipeline.d.ts +31 -4
  94. package/dist/learning/pipeline.d.ts.map +1 -1
  95. package/dist/learning/pipeline.js +64 -12
  96. package/dist/learning/pipeline.js.map +1 -1
  97. package/dist/learning/reflexion-generator.d.ts +64 -0
  98. package/dist/learning/reflexion-generator.d.ts.map +1 -0
  99. package/dist/learning/reflexion-generator.js +194 -0
  100. package/dist/learning/reflexion-generator.js.map +1 -0
  101. package/dist/learning/trajectory-sources/entire.d.ts +8 -5
  102. package/dist/learning/trajectory-sources/entire.d.ts.map +1 -1
  103. package/dist/learning/trajectory-sources/entire.js +13 -6
  104. package/dist/learning/trajectory-sources/entire.js.map +1 -1
  105. package/dist/learning/trajectory-sources/index.d.ts +1 -1
  106. package/dist/learning/trajectory-sources/index.d.ts.map +1 -1
  107. package/dist/learning/trajectory-sources/index.js +1 -1
  108. package/dist/learning/trajectory-sources/index.js.map +1 -1
  109. package/dist/learning/trajectory-sources/pipeline.d.ts +4 -4
  110. package/dist/learning/trajectory-sources/pipeline.d.ts.map +1 -1
  111. package/dist/learning/trajectory-sources/pipeline.js +2 -2
  112. package/dist/learning/trajectory-sources/pipeline.js.map +1 -1
  113. package/dist/learning/unified-pipeline.d.ts +281 -0
  114. package/dist/learning/unified-pipeline.d.ts.map +1 -0
  115. package/dist/learning/unified-pipeline.js +637 -0
  116. package/dist/learning/unified-pipeline.js.map +1 -0
  117. package/dist/memory/candidate-retrieval.d.ts +43 -0
  118. package/dist/memory/candidate-retrieval.d.ts.map +1 -0
  119. package/dist/memory/candidate-retrieval.js +41 -0
  120. package/dist/memory/candidate-retrieval.js.map +1 -0
  121. package/dist/memory/causal-store.d.ts +97 -0
  122. package/dist/memory/causal-store.d.ts.map +1 -0
  123. package/dist/memory/causal-store.js +209 -0
  124. package/dist/memory/causal-store.js.map +1 -0
  125. package/dist/memory/coherence.d.ts +71 -0
  126. package/dist/memory/coherence.d.ts.map +1 -0
  127. package/dist/memory/coherence.js +176 -0
  128. package/dist/memory/coherence.js.map +1 -0
  129. package/dist/memory/experience.d.ts +39 -6
  130. package/dist/memory/experience.d.ts.map +1 -1
  131. package/dist/memory/experience.js +193 -49
  132. package/dist/memory/experience.js.map +1 -1
  133. package/dist/memory/index.d.ts +7 -0
  134. package/dist/memory/index.d.ts.map +1 -1
  135. package/dist/memory/index.js +12 -0
  136. package/dist/memory/index.js.map +1 -1
  137. package/dist/memory/knowledge-bank.d.ts +14 -0
  138. package/dist/memory/knowledge-bank.d.ts.map +1 -1
  139. package/dist/memory/knowledge-bank.js +45 -0
  140. package/dist/memory/knowledge-bank.js.map +1 -1
  141. package/dist/memory/meta.d.ts +7 -8
  142. package/dist/memory/meta.d.ts.map +1 -1
  143. package/dist/memory/meta.js +73 -79
  144. package/dist/memory/meta.js.map +1 -1
  145. package/dist/memory/playbook.d.ts +26 -9
  146. package/dist/memory/playbook.d.ts.map +1 -1
  147. package/dist/memory/playbook.js +198 -74
  148. package/dist/memory/playbook.js.map +1 -1
  149. package/dist/memory/reasoning-bank.d.ts +130 -0
  150. package/dist/memory/reasoning-bank.d.ts.map +1 -0
  151. package/dist/memory/reasoning-bank.js +342 -0
  152. package/dist/memory/reasoning-bank.js.map +1 -0
  153. package/dist/memory/reflexion.d.ts +59 -0
  154. package/dist/memory/reflexion.d.ts.map +1 -0
  155. package/dist/memory/reflexion.js +96 -0
  156. package/dist/memory/reflexion.js.map +1 -0
  157. package/dist/memory/system.d.ts +7 -2
  158. package/dist/memory/system.d.ts.map +1 -1
  159. package/dist/memory/system.js +19 -7
  160. package/dist/memory/system.js.map +1 -1
  161. package/dist/memory/temporal-compressor.d.ts +126 -0
  162. package/dist/memory/temporal-compressor.d.ts.map +1 -0
  163. package/dist/memory/temporal-compressor.js +335 -0
  164. package/dist/memory/temporal-compressor.js.map +1 -0
  165. package/dist/persistence/index.d.ts +11 -0
  166. package/dist/persistence/index.d.ts.map +1 -0
  167. package/dist/persistence/index.js +11 -0
  168. package/dist/persistence/index.js.map +1 -0
  169. package/dist/persistence/migrator.d.ts +40 -0
  170. package/dist/persistence/migrator.d.ts.map +1 -0
  171. package/dist/persistence/migrator.js +238 -0
  172. package/dist/persistence/migrator.js.map +1 -0
  173. package/dist/persistence/serializers.d.ts +45 -0
  174. package/dist/persistence/serializers.d.ts.map +1 -0
  175. package/dist/persistence/serializers.js +80 -0
  176. package/dist/persistence/serializers.js.map +1 -0
  177. package/dist/persistence/sqlite-persistence.d.ts +228 -0
  178. package/dist/persistence/sqlite-persistence.d.ts.map +1 -0
  179. package/dist/persistence/sqlite-persistence.js +588 -0
  180. package/dist/persistence/sqlite-persistence.js.map +1 -0
  181. package/dist/runtime/flows/learning.d.ts +10 -12
  182. package/dist/runtime/flows/learning.d.ts.map +1 -1
  183. package/dist/runtime/flows/learning.js +10 -23
  184. package/dist/runtime/flows/learning.js.map +1 -1
  185. package/dist/search/index.d.ts +1 -0
  186. package/dist/search/index.d.ts.map +1 -1
  187. package/dist/search/index.js +2 -0
  188. package/dist/search/index.js.map +1 -1
  189. package/dist/search/moe-gate.d.ts +124 -0
  190. package/dist/search/moe-gate.d.ts.map +1 -0
  191. package/dist/search/moe-gate.js +234 -0
  192. package/dist/search/moe-gate.js.map +1 -0
  193. package/dist/search/router.d.ts +32 -2
  194. package/dist/search/router.d.ts.map +1 -1
  195. package/dist/search/router.js +87 -4
  196. package/dist/search/router.js.map +1 -1
  197. package/dist/session-bank/git-reader.d.ts +9 -4
  198. package/dist/session-bank/git-reader.d.ts.map +1 -1
  199. package/dist/session-bank/git-reader.js +22 -15
  200. package/dist/session-bank/git-reader.js.map +1 -1
  201. package/dist/session-bank/index.d.ts +2 -2
  202. package/dist/session-bank/index.d.ts.map +1 -1
  203. package/dist/session-bank/index.js +2 -2
  204. package/dist/session-bank/index.js.map +1 -1
  205. package/dist/session-bank/parser.d.ts +16 -5
  206. package/dist/session-bank/parser.d.ts.map +1 -1
  207. package/dist/session-bank/parser.js +187 -80
  208. package/dist/session-bank/parser.js.map +1 -1
  209. package/dist/session-bank/session-bank.d.ts +5 -0
  210. package/dist/session-bank/session-bank.d.ts.map +1 -1
  211. package/dist/session-bank/session-bank.js +30 -9
  212. package/dist/session-bank/session-bank.js.map +1 -1
  213. package/dist/session-bank/types.d.ts +4 -1
  214. package/dist/session-bank/types.d.ts.map +1 -1
  215. package/dist/session-bank/types.js +3 -3
  216. package/dist/session-bank/types.js.map +1 -1
  217. package/dist/surfacing/skill-publisher.d.ts.map +1 -1
  218. package/dist/surfacing/skill-publisher.js +15 -43
  219. package/dist/surfacing/skill-publisher.js.map +1 -1
  220. package/dist/surfacing/sqlite-storage-adapter.d.ts.map +1 -1
  221. package/dist/surfacing/sqlite-storage-adapter.js +13 -21
  222. package/dist/surfacing/sqlite-storage-adapter.js.map +1 -1
  223. package/dist/types/config.d.ts +100 -0
  224. package/dist/types/config.d.ts.map +1 -1
  225. package/dist/types/config.js +27 -0
  226. package/dist/types/config.js.map +1 -1
  227. package/dist/types/index.d.ts +2 -2
  228. package/dist/types/index.d.ts.map +1 -1
  229. package/dist/types/index.js +1 -1
  230. package/dist/types/index.js.map +1 -1
  231. package/dist/types/memory.d.ts +52 -0
  232. package/dist/types/memory.d.ts.map +1 -1
  233. package/dist/types/memory.js +13 -0
  234. package/dist/types/memory.js.map +1 -1
  235. package/dist/types/playbook.d.ts +4 -0
  236. package/dist/types/playbook.d.ts.map +1 -1
  237. package/dist/types/playbook.js.map +1 -1
  238. package/dist/utils/error-classifier.d.ts +30 -0
  239. package/dist/utils/error-classifier.d.ts.map +1 -0
  240. package/dist/utils/error-classifier.js +85 -0
  241. package/dist/utils/error-classifier.js.map +1 -0
  242. package/dist/utils/index.d.ts +3 -0
  243. package/dist/utils/index.d.ts.map +1 -1
  244. package/dist/utils/index.js +3 -0
  245. package/dist/utils/index.js.map +1 -1
  246. package/dist/utils/partitioned-store.d.ts +93 -0
  247. package/dist/utils/partitioned-store.d.ts.map +1 -0
  248. package/dist/utils/partitioned-store.js +251 -0
  249. package/dist/utils/partitioned-store.js.map +1 -0
  250. package/dist/utils/trajectory-helpers.d.ts +39 -0
  251. package/dist/utils/trajectory-helpers.d.ts.map +1 -0
  252. package/dist/utils/trajectory-helpers.js +57 -0
  253. package/dist/utils/trajectory-helpers.js.map +1 -0
  254. package/dist/workspace/runner.d.ts +3 -4
  255. package/dist/workspace/runner.d.ts.map +1 -1
  256. package/dist/workspace/runner.js.map +1 -1
  257. package/dist/workspace/types.d.ts +9 -2
  258. package/dist/workspace/types.d.ts.map +1 -1
  259. package/dist/workspace/types.js.map +1 -1
  260. package/package.json +6 -4
  261. package/references/sessionlog/.husky/pre-commit +1 -0
  262. package/references/sessionlog/.lintstagedrc.json +4 -0
  263. package/references/sessionlog/.prettierignore +4 -0
  264. package/references/sessionlog/.prettierrc.json +11 -0
  265. package/references/sessionlog/LICENSE +21 -0
  266. package/references/sessionlog/README.md +453 -0
  267. package/references/sessionlog/eslint.config.js +58 -0
  268. package/references/sessionlog/package-lock.json +3672 -0
  269. package/references/sessionlog/package.json +65 -0
  270. package/references/sessionlog/src/__tests__/agent-hooks.test.ts +570 -0
  271. package/references/sessionlog/src/__tests__/agent-registry.test.ts +127 -0
  272. package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +225 -0
  273. package/references/sessionlog/src/__tests__/claude-generator.test.ts +46 -0
  274. package/references/sessionlog/src/__tests__/commit-msg.test.ts +86 -0
  275. package/references/sessionlog/src/__tests__/cursor-agent.test.ts +224 -0
  276. package/references/sessionlog/src/__tests__/e2e-live.test.ts +890 -0
  277. package/references/sessionlog/src/__tests__/event-log.test.ts +183 -0
  278. package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +105 -0
  279. package/references/sessionlog/src/__tests__/gemini-agent.test.ts +375 -0
  280. package/references/sessionlog/src/__tests__/git-hooks.test.ts +78 -0
  281. package/references/sessionlog/src/__tests__/hook-managers.test.ts +121 -0
  282. package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +759 -0
  283. package/references/sessionlog/src/__tests__/opencode-agent.test.ts +338 -0
  284. package/references/sessionlog/src/__tests__/redaction.test.ts +136 -0
  285. package/references/sessionlog/src/__tests__/session-repo.test.ts +353 -0
  286. package/references/sessionlog/src/__tests__/session-store.test.ts +166 -0
  287. package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +466 -0
  288. package/references/sessionlog/src/__tests__/skill-live.test.ts +461 -0
  289. package/references/sessionlog/src/__tests__/summarize.test.ts +348 -0
  290. package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +610 -0
  291. package/references/sessionlog/src/__tests__/task-plan-live.test.ts +632 -0
  292. package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +121 -0
  293. package/references/sessionlog/src/__tests__/types.test.ts +166 -0
  294. package/references/sessionlog/src/__tests__/utils.test.ts +333 -0
  295. package/references/sessionlog/src/__tests__/validation.test.ts +103 -0
  296. package/references/sessionlog/src/__tests__/worktree.test.ts +57 -0
  297. package/references/sessionlog/src/agent/agents/claude-code.ts +1089 -0
  298. package/references/sessionlog/src/agent/agents/cursor.ts +361 -0
  299. package/references/sessionlog/src/agent/agents/gemini-cli.ts +632 -0
  300. package/references/sessionlog/src/agent/agents/opencode.ts +540 -0
  301. package/references/sessionlog/src/agent/registry.ts +143 -0
  302. package/references/sessionlog/src/agent/session-types.ts +113 -0
  303. package/references/sessionlog/src/agent/types.ts +220 -0
  304. package/references/sessionlog/src/cli.ts +597 -0
  305. package/references/sessionlog/src/commands/clean.ts +133 -0
  306. package/references/sessionlog/src/commands/disable.ts +84 -0
  307. package/references/sessionlog/src/commands/doctor.ts +145 -0
  308. package/references/sessionlog/src/commands/enable.ts +202 -0
  309. package/references/sessionlog/src/commands/explain.ts +261 -0
  310. package/references/sessionlog/src/commands/reset.ts +105 -0
  311. package/references/sessionlog/src/commands/resume.ts +180 -0
  312. package/references/sessionlog/src/commands/rewind.ts +195 -0
  313. package/references/sessionlog/src/commands/setup-ccweb.ts +275 -0
  314. package/references/sessionlog/src/commands/status.ts +172 -0
  315. package/references/sessionlog/src/config.ts +165 -0
  316. package/references/sessionlog/src/events/event-log.ts +126 -0
  317. package/references/sessionlog/src/git-operations.ts +558 -0
  318. package/references/sessionlog/src/hooks/git-hooks.ts +165 -0
  319. package/references/sessionlog/src/hooks/lifecycle.ts +391 -0
  320. package/references/sessionlog/src/index.ts +650 -0
  321. package/references/sessionlog/src/security/redaction.ts +283 -0
  322. package/references/sessionlog/src/session/state-machine.ts +452 -0
  323. package/references/sessionlog/src/store/checkpoint-store.ts +509 -0
  324. package/references/sessionlog/src/store/native-store.ts +173 -0
  325. package/references/sessionlog/src/store/provider-types.ts +99 -0
  326. package/references/sessionlog/src/store/session-store.ts +266 -0
  327. package/references/sessionlog/src/strategy/attribution.ts +296 -0
  328. package/references/sessionlog/src/strategy/common.ts +207 -0
  329. package/references/sessionlog/src/strategy/content-overlap.ts +228 -0
  330. package/references/sessionlog/src/strategy/manual-commit.ts +988 -0
  331. package/references/sessionlog/src/strategy/types.ts +279 -0
  332. package/references/sessionlog/src/summarize/claude-generator.ts +115 -0
  333. package/references/sessionlog/src/summarize/summarize.ts +432 -0
  334. package/references/sessionlog/src/types.ts +508 -0
  335. package/references/sessionlog/src/utils/chunk-files.ts +49 -0
  336. package/references/sessionlog/src/utils/commit-message.ts +65 -0
  337. package/references/sessionlog/src/utils/detect-agent.ts +36 -0
  338. package/references/sessionlog/src/utils/hook-managers.ts +125 -0
  339. package/references/sessionlog/src/utils/ide-tags.ts +32 -0
  340. package/references/sessionlog/src/utils/paths.ts +79 -0
  341. package/references/sessionlog/src/utils/preview-rewind.ts +80 -0
  342. package/references/sessionlog/src/utils/rewind-conflict.ts +121 -0
  343. package/references/sessionlog/src/utils/shadow-branch.ts +109 -0
  344. package/references/sessionlog/src/utils/string-utils.ts +46 -0
  345. package/references/sessionlog/src/utils/todo-extract.ts +188 -0
  346. package/references/sessionlog/src/utils/trailers.ts +187 -0
  347. package/references/sessionlog/src/utils/transcript-parse.ts +177 -0
  348. package/references/sessionlog/src/utils/transcript-timestamp.ts +59 -0
  349. package/references/sessionlog/src/utils/tree-ops.ts +219 -0
  350. package/references/sessionlog/src/utils/tty.ts +72 -0
  351. package/references/sessionlog/src/utils/validation.ts +65 -0
  352. package/references/sessionlog/src/utils/worktree.ts +58 -0
  353. package/references/sessionlog/src/wire-types.ts +59 -0
  354. package/references/sessionlog/templates/setup-env.sh +153 -0
  355. package/references/sessionlog/tsconfig.json +18 -0
  356. package/references/sessionlog/vitest.config.ts +12 -0
  357. package/references/skill-tree/.sudocode/issues.jsonl +8 -0
  358. package/references/skill-tree/.sudocode/specs.jsonl +2 -0
  359. package/references/skill-tree/CLAUDE.md +56 -80
  360. package/references/skill-tree/README.md +188 -140
  361. package/references/skill-tree/examples/basic-usage.ts +95 -121
  362. package/references/skill-tree/package-lock.json +369 -26
  363. package/references/skill-tree/package.json +1 -1
  364. package/src/atlas.ts +97 -67
  365. package/src/bin/cli-utils.ts +220 -0
  366. package/src/bin/cognitive-core.ts +84 -392
  367. package/src/bin/commands/kb.ts +266 -0
  368. package/src/bin/commands/learn.ts +100 -0
  369. package/src/bin/commands/legacy.ts +182 -0
  370. package/src/bin/commands/run.ts +113 -0
  371. package/src/bin/commands/sessions.ts +221 -0
  372. package/src/bin/commands/skills.ts +146 -0
  373. package/src/embeddings/index.ts +3 -0
  374. package/src/embeddings/inverted-index.ts +134 -0
  375. package/src/embeddings/manager.ts +13 -8
  376. package/src/embeddings/vector-store.ts +21 -9
  377. package/src/factory.ts +33 -16
  378. package/src/index.ts +109 -9
  379. package/src/learning/analyzer.ts +21 -37
  380. package/src/learning/energy-evaluator.ts +282 -0
  381. package/src/learning/healing-orchestrator.ts +383 -0
  382. package/src/learning/index.ts +65 -9
  383. package/src/learning/instant-loop.ts +357 -0
  384. package/src/learning/maintenance-scheduler.ts +271 -0
  385. package/src/learning/meta-learner.ts +5 -23
  386. package/src/learning/reflexion-generator.ts +273 -0
  387. package/src/learning/trajectory-sources/entire.ts +24 -13
  388. package/src/learning/trajectory-sources/index.ts +2 -2
  389. package/src/learning/trajectory-sources/pipeline.ts +5 -5
  390. package/src/learning/unified-pipeline.ts +921 -0
  391. package/src/memory/candidate-retrieval.ts +71 -0
  392. package/src/memory/causal-store.ts +273 -0
  393. package/src/memory/coherence.ts +252 -0
  394. package/src/memory/experience.ts +217 -50
  395. package/src/memory/index.ts +43 -0
  396. package/src/memory/knowledge-bank.ts +57 -0
  397. package/src/memory/meta.ts +78 -96
  398. package/src/memory/playbook.ts +239 -75
  399. package/src/memory/reasoning-bank.ts +458 -0
  400. package/src/memory/reflexion.ts +122 -0
  401. package/src/memory/system.ts +21 -5
  402. package/src/memory/temporal-compressor.ts +409 -0
  403. package/src/persistence/index.ts +37 -0
  404. package/src/persistence/migrator.ts +298 -0
  405. package/src/persistence/serializers.ts +79 -0
  406. package/src/persistence/sqlite-persistence.ts +925 -0
  407. package/src/runtime/flows/learning.ts +25 -42
  408. package/src/search/index.ts +10 -0
  409. package/src/search/moe-gate.ts +304 -0
  410. package/src/search/router.ts +111 -4
  411. package/src/session-bank/git-reader.ts +29 -19
  412. package/src/session-bank/index.ts +4 -2
  413. package/src/session-bank/parser.ts +280 -98
  414. package/src/session-bank/session-bank.ts +33 -12
  415. package/src/session-bank/types.ts +8 -5
  416. package/src/surfacing/skill-publisher.ts +17 -49
  417. package/src/surfacing/sqlite-storage-adapter.ts +16 -32
  418. package/src/types/config.ts +30 -0
  419. package/src/types/index.ts +3 -0
  420. package/src/types/memory.ts +30 -0
  421. package/src/types/playbook.ts +4 -0
  422. package/src/utils/error-classifier.ts +113 -0
  423. package/src/utils/index.ts +18 -0
  424. package/src/utils/partitioned-store.ts +299 -0
  425. package/src/utils/trajectory-helpers.ts +79 -0
  426. package/src/workspace/runner.ts +3 -3
  427. package/src/workspace/types.ts +10 -2
  428. package/tests/embeddings/inverted-index.test.ts +138 -0
  429. package/tests/feature-toggles.test.ts +275 -0
  430. package/tests/gap-fixes.test.ts +17 -4
  431. package/tests/integration/cli-e2e.test.ts +621 -0
  432. package/tests/integration/e2e.test.ts +6 -5
  433. package/tests/integration/entire-e2e.test.ts +314 -125
  434. package/tests/integration/persistence-e2e.test.ts +741 -0
  435. package/tests/integration/phase-e2e.test.ts +1143 -0
  436. package/tests/integration/session-bank.test.ts +20 -14
  437. package/tests/integration/sessionlog-e2e.test.ts +329 -0
  438. package/tests/integration/unified-pipeline-e2e.test.ts +634 -0
  439. package/tests/learning/analyzer.test.ts +1 -1
  440. package/tests/learning/energy-evaluator.test.ts +180 -0
  441. package/tests/learning/entire-trajectory-source.test.ts +25 -25
  442. package/tests/learning/healing-orchestrator.test.ts +269 -0
  443. package/tests/learning/instant-loop.test.ts +243 -0
  444. package/tests/learning/maintenance-scheduler.test.ts +191 -0
  445. package/tests/learning/reflexion-generator.test.ts +411 -0
  446. package/tests/learning/trajectory-sources.test.ts +12 -4
  447. package/tests/learning/unified-pipeline.test.ts +322 -0
  448. package/tests/mcp/playbook-server.test.ts +6 -1
  449. package/tests/memory/causal-store.test.ts +276 -0
  450. package/tests/memory/coherence.test.ts +232 -0
  451. package/tests/memory/experience.test.ts +8 -3
  452. package/tests/memory/playbook.test.ts +307 -1
  453. package/tests/memory/provenance.test.ts +11 -2
  454. package/tests/memory/reasoning-bank.test.ts +239 -0
  455. package/tests/memory/reflexion.test.ts +166 -0
  456. package/tests/memory/skill-exporter.test.ts +6 -1
  457. package/tests/memory/system.test.ts +6 -1
  458. package/tests/memory/temporal-compressor.test.ts +318 -0
  459. package/tests/persistence/migrator.test.ts +1009 -0
  460. package/tests/persistence/sqlite-persistence.test.ts +635 -0
  461. package/tests/runtime/agent-manager.test.ts +6 -1
  462. package/tests/runtime/delegate.test.ts +6 -1
  463. package/tests/search/moe-gate.test.ts +250 -0
  464. package/tests/search/refinement-loop.test.ts +11 -2
  465. package/tests/search/router.test.ts +81 -2
  466. package/tests/session-bank/fixtures/sessionlog-root-metadata.json +16 -0
  467. package/tests/session-bank/fixtures/sessionlog-session/full.jsonl +6 -0
  468. package/tests/session-bank/fixtures/sessionlog-session/metadata.json +55 -0
  469. package/tests/session-bank/git-reader.test.ts +13 -13
  470. package/tests/session-bank/parser.test.ts +135 -3
  471. package/tests/session-bank/session-bank.test.ts +1 -1
  472. package/tests/surfacing/skill-library.test.ts +6 -1
  473. package/tests/surfacing/skill-publisher.test.ts +24 -58
  474. package/tests/surfacing/sqlite-storage-adapter.test.ts +11 -23
  475. package/tests/utils/partitioned-store.test.ts +230 -0
  476. package/tests/workspace/full-flow.test.ts +10 -4
  477. package/tests/workspace/runner.test.ts +10 -4
  478. package/docs/DESIGN-workspace-migration.md +0 -1079
  479. package/docs/PLAN-agentic-workspace-implementation.md +0 -717
  480. package/docs/PLAN-graph-migration.md +0 -299
  481. package/docs/PLAN-session-bank-implementation.md +0 -474
  482. package/src/learning/pipeline.ts +0 -323
  483. package/tests/learning/pipeline.test.ts +0 -176
@@ -0,0 +1,409 @@
1
+ /**
2
+ * TemporalCompressor — Adaptive memory compression.
3
+ *
4
+ * Experiences flow through Hot → Warm → Cold → Evicted tiers
5
+ * based on their accessScore (from Phase 0).
6
+ *
7
+ * Compression levels:
8
+ * - Hot: Full fidelity (all data preserved)
9
+ * - Warm: Strip solutionOutput to key steps only
10
+ * - Cold: Replace key steps with single-paragraph summary
11
+ * - Evicted: Remove entirely (after ensuring pattern captured in ReasoningBank)
12
+ *
13
+ * Hysteresis: An experience must stay below a threshold for 2 consecutive
14
+ * compression passes before demotion, preventing oscillation from a
15
+ * single retrieval hit.
16
+ */
17
+
18
+ import type { Experience } from '../types/index.js';
19
+ import type { SqlitePersistence } from '../persistence/index.js';
20
+
21
+ /**
22
+ * Configuration for temporal compression
23
+ */
24
+ export interface TemporalCompressorConfig {
25
+ /** accessScore above this = hot (default: 0.5) */
26
+ hotThreshold: number;
27
+ /** accessScore above this = warm (default: 0.2) */
28
+ warmThreshold: number;
29
+ /** accessScore below this = evict (default: 0.05) */
30
+ evictionThreshold: number;
31
+ /** Prevent oscillation between tiers (default: 0.05) */
32
+ hysteresis: number;
33
+ }
34
+
35
+ /**
36
+ * Result of a compression pass
37
+ */
38
+ export interface CompressionResult {
39
+ /** IDs moved to a hotter tier (rare, via hysteresis) */
40
+ promoted: string[];
41
+ /** IDs moved to a colder tier */
42
+ demoted: string[];
43
+ /** IDs recommended for eviction */
44
+ evicted: string[];
45
+ /** IDs that stayed in the same tier */
46
+ unchanged: string[];
47
+ /** The modified experiences (for batch updating) */
48
+ updates: Map<string, Partial<Experience>>;
49
+ }
50
+
51
+ const DEFAULT_CONFIG: TemporalCompressorConfig = {
52
+ hotThreshold: 0.5,
53
+ warmThreshold: 0.2,
54
+ evictionThreshold: 0.05,
55
+ hysteresis: 0.05,
56
+ };
57
+
58
+ /**
59
+ * TemporalCompressor — evaluates and compresses experiences based on access scores
60
+ */
61
+ export class TemporalCompressor {
62
+ private config: TemporalCompressorConfig;
63
+ private persistence?: SqlitePersistence;
64
+
65
+ /**
66
+ * Track experiences that were below demotion threshold on the previous pass.
67
+ * Hysteresis: only demote after 2 consecutive passes below threshold.
68
+ */
69
+ private pendingDemotion: Set<string> = new Set();
70
+
71
+ constructor(options?: Partial<TemporalCompressorConfig>, persistence?: SqlitePersistence) {
72
+ this.config = { ...DEFAULT_CONFIG, ...options };
73
+ this.persistence = persistence;
74
+
75
+ // Load persisted pending demotions
76
+ if (persistence?.isInitialized) {
77
+ const saved = persistence.getSystemState<string[]>('temporal_compressor');
78
+ if (saved) {
79
+ this.pendingDemotion = new Set(saved);
80
+ }
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Evaluate and compress experiences based on their access scores.
86
+ * Returns a CompressionResult describing all tier changes.
87
+ */
88
+ async compress(experiences: Experience[]): Promise<CompressionResult> {
89
+ const result: CompressionResult = {
90
+ promoted: [],
91
+ demoted: [],
92
+ evicted: [],
93
+ unchanged: [],
94
+ updates: new Map(),
95
+ };
96
+
97
+ const newPendingDemotion = new Set<string>();
98
+
99
+ for (const exp of experiences) {
100
+ const currentTier = exp.tier ?? 'hot';
101
+ const targetTier = this.computeTargetTier(exp.accessScore);
102
+
103
+ if (targetTier === 'evict') {
104
+ // Cold → Evicted
105
+ if (currentTier === 'cold') {
106
+ if (this.pendingDemotion.has(exp.id)) {
107
+ // Second consecutive pass below eviction threshold → evict
108
+ result.evicted.push(exp.id);
109
+ } else {
110
+ // First pass below → mark pending
111
+ newPendingDemotion.add(exp.id);
112
+ result.unchanged.push(exp.id);
113
+ }
114
+ } else {
115
+ // Not yet cold — demote first (can't skip tiers)
116
+ this.handleDemotion(exp, currentTier, result, newPendingDemotion);
117
+ }
118
+ } else if (this.tierOrder(targetTier) < this.tierOrder(currentTier)) {
119
+ // Demotion (hot → warm, warm → cold, hot → cold)
120
+ this.handleDemotion(exp, currentTier, result, newPendingDemotion);
121
+ } else if (this.tierOrder(targetTier) > this.tierOrder(currentTier)) {
122
+ // Promotion (cold → warm, warm → hot) — requires score above threshold + hysteresis
123
+ const effectiveScore = exp.accessScore;
124
+ const promotionThreshold = this.getPromotionThreshold(currentTier);
125
+
126
+ if (effectiveScore >= promotionThreshold) {
127
+ const nextTier = this.nextHotterTier(currentTier);
128
+ if (nextTier) {
129
+ const promoted = this.promoteTier(exp, nextTier);
130
+ result.promoted.push(exp.id);
131
+ result.updates.set(exp.id, promoted);
132
+ } else {
133
+ result.unchanged.push(exp.id);
134
+ }
135
+ } else {
136
+ result.unchanged.push(exp.id);
137
+ }
138
+ } else {
139
+ result.unchanged.push(exp.id);
140
+ }
141
+ }
142
+
143
+ this.pendingDemotion = newPendingDemotion;
144
+
145
+ // Persist pending demotions
146
+ if (this.persistence) {
147
+ this.persistence.setSystemState('temporal_compressor', [...this.pendingDemotion]);
148
+ }
149
+
150
+ return result;
151
+ }
152
+
153
+ /**
154
+ * Load persisted pending demotions. Call after persistence is initialized.
155
+ */
156
+ loadPersistedState(): void {
157
+ if (this.persistence?.isInitialized) {
158
+ const saved = this.persistence.getSystemState<string[]>('temporal_compressor');
159
+ if (saved) {
160
+ this.pendingDemotion = new Set(saved);
161
+ }
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Compress a single experience from hot → warm.
167
+ * Strips solutionOutput to key steps only.
168
+ */
169
+ compressToWarm(experience: Experience): Experience {
170
+ const keySteps = this.extractKeySteps(experience);
171
+ const originalStepCount = this.estimateStepCount(experience);
172
+
173
+ return {
174
+ ...experience,
175
+ tier: 'warm',
176
+ solutionOutput: keySteps.join('\n---\n'),
177
+ compressed: {
178
+ keySteps,
179
+ summary: '',
180
+ originalStepCount,
181
+ },
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Compress a single experience from warm → cold.
187
+ * Replaces key steps with a single-paragraph summary.
188
+ */
189
+ compressToCold(experience: Experience): Experience {
190
+ const summary = this.generateSummary(experience);
191
+
192
+ return {
193
+ ...experience,
194
+ tier: 'cold',
195
+ taskInput: experience.taskInput.slice(0, 200),
196
+ solutionOutput: summary,
197
+ feedback: experience.feedback.slice(0, 100),
198
+ compressed: {
199
+ keySteps: experience.compressed?.keySteps ?? [],
200
+ summary,
201
+ originalStepCount: experience.compressed?.originalStepCount ?? this.estimateStepCount(experience),
202
+ },
203
+ };
204
+ }
205
+
206
+ // === Internal helpers ===
207
+
208
+ /**
209
+ * Determine the target tier for a given access score.
210
+ */
211
+ private computeTargetTier(accessScore: number): 'hot' | 'warm' | 'cold' | 'evict' {
212
+ if (accessScore >= this.config.hotThreshold) return 'hot';
213
+ if (accessScore >= this.config.warmThreshold) return 'warm';
214
+ if (accessScore >= this.config.evictionThreshold) return 'cold';
215
+ return 'evict';
216
+ }
217
+
218
+ /**
219
+ * Numeric ordering for tiers (higher = hotter).
220
+ */
221
+ private tierOrder(tier: 'hot' | 'warm' | 'cold'): number {
222
+ switch (tier) {
223
+ case 'hot': return 2;
224
+ case 'warm': return 1;
225
+ case 'cold': return 0;
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Get the next colder tier.
231
+ */
232
+ private nextColderTier(tier: 'hot' | 'warm' | 'cold'): 'warm' | 'cold' | undefined {
233
+ switch (tier) {
234
+ case 'hot': return 'warm';
235
+ case 'warm': return 'cold';
236
+ case 'cold': return undefined;
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Get the next hotter tier.
242
+ */
243
+ private nextHotterTier(tier: 'hot' | 'warm' | 'cold'): 'hot' | 'warm' | undefined {
244
+ switch (tier) {
245
+ case 'cold': return 'warm';
246
+ case 'warm': return 'hot';
247
+ case 'hot': return undefined;
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Get the threshold needed for promotion from a tier (with hysteresis).
253
+ */
254
+ private getPromotionThreshold(currentTier: 'hot' | 'warm' | 'cold'): number {
255
+ switch (currentTier) {
256
+ case 'cold': return this.config.warmThreshold + this.config.hysteresis;
257
+ case 'warm': return this.config.hotThreshold + this.config.hysteresis;
258
+ case 'hot': return Infinity;
259
+ }
260
+ }
261
+
262
+ /**
263
+ * Handle a demotion with hysteresis.
264
+ * Only demote after 2 consecutive passes below threshold.
265
+ */
266
+ private handleDemotion(
267
+ exp: Experience,
268
+ currentTier: 'hot' | 'warm' | 'cold',
269
+ result: CompressionResult,
270
+ newPendingDemotion: Set<string>
271
+ ): void {
272
+ if (this.pendingDemotion.has(exp.id)) {
273
+ // Second consecutive pass below threshold → demote one step
274
+ const nextTier = this.nextColderTier(currentTier);
275
+ if (nextTier) {
276
+ const compressed = nextTier === 'warm'
277
+ ? this.compressToWarm(exp)
278
+ : this.compressToCold(exp);
279
+
280
+ result.demoted.push(exp.id);
281
+ result.updates.set(exp.id, {
282
+ tier: compressed.tier,
283
+ solutionOutput: compressed.solutionOutput,
284
+ taskInput: compressed.taskInput,
285
+ feedback: compressed.feedback,
286
+ compressed: compressed.compressed,
287
+ });
288
+ } else {
289
+ result.unchanged.push(exp.id);
290
+ }
291
+ } else {
292
+ // First pass below threshold → mark pending
293
+ newPendingDemotion.add(exp.id);
294
+ result.unchanged.push(exp.id);
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Promote an experience to a hotter tier.
300
+ * Note: data can't be un-compressed, but the tier changes.
301
+ */
302
+ private promoteTier(
303
+ _exp: Experience,
304
+ targetTier: 'hot' | 'warm'
305
+ ): Partial<Experience> {
306
+ return { tier: targetTier };
307
+ }
308
+
309
+ /**
310
+ * Extract key steps from a solution output.
311
+ * Looks for tool calls, error messages, and outcome-relevant actions.
312
+ */
313
+ private extractKeySteps(experience: Experience): string[] {
314
+ const output = experience.solutionOutput;
315
+ const keySteps: string[] = [];
316
+
317
+ // If metadata has trajectory steps, extract from there
318
+ const metadata = experience.metadata as Record<string, unknown>;
319
+ const steps = metadata?.steps as Array<{
320
+ thought?: string;
321
+ action?: string;
322
+ observation?: string;
323
+ attributionScore?: number;
324
+ }> | undefined;
325
+
326
+ if (steps && Array.isArray(steps)) {
327
+ for (const step of steps) {
328
+ // Keep steps with high attribution or significant actions
329
+ const isKey =
330
+ (step.attributionScore !== undefined && step.attributionScore > 0.5) ||
331
+ step.action?.match(/^(Read|Write|Edit|Bash|Grep|Glob)\s/i) ||
332
+ step.observation?.match(/error|fail|success|created|updated/i);
333
+
334
+ if (isKey) {
335
+ const parts: string[] = [];
336
+ if (step.action) parts.push(`Action: ${step.action.slice(0, 150)}`);
337
+ if (step.observation) parts.push(`Result: ${step.observation.slice(0, 150)}`);
338
+ keySteps.push(parts.join(' → '));
339
+ }
340
+ }
341
+ }
342
+
343
+ // Fallback: split output into paragraphs and keep first/last + error lines
344
+ if (keySteps.length === 0) {
345
+ const lines = output.split('\n').filter((l) => l.trim());
346
+ if (lines.length <= 5) {
347
+ return lines;
348
+ }
349
+
350
+ // Keep first line (often the approach), error lines, and last line (outcome)
351
+ keySteps.push(lines[0]);
352
+ for (const line of lines) {
353
+ if (line.match(/error|exception|fail|warning/i) && keySteps.length < 8) {
354
+ keySteps.push(line.slice(0, 200));
355
+ }
356
+ }
357
+ keySteps.push(lines[lines.length - 1]);
358
+ }
359
+
360
+ return keySteps.slice(0, 10);
361
+ }
362
+
363
+ /**
364
+ * Estimate the original step count from an experience.
365
+ */
366
+ private estimateStepCount(experience: Experience): number {
367
+ const metadata = experience.metadata as Record<string, unknown>;
368
+ if (typeof metadata?.stepCount === 'number') {
369
+ return metadata.stepCount;
370
+ }
371
+ const steps = metadata?.steps;
372
+ if (Array.isArray(steps)) {
373
+ return steps.length;
374
+ }
375
+ // Fallback: estimate from output length
376
+ return Math.max(1, Math.ceil(experience.solutionOutput.length / 200));
377
+ }
378
+
379
+ /**
380
+ * Generate a one-paragraph summary for cold tier.
381
+ */
382
+ private generateSummary(experience: Experience): string {
383
+ const success = experience.success ? 'Successfully' : 'Failed to';
384
+ const domain = experience.domain;
385
+ const taskSnippet = experience.taskInput.slice(0, 100);
386
+
387
+ // Use key steps if available
388
+ const keySteps = experience.compressed?.keySteps;
389
+ if (keySteps && keySteps.length > 0) {
390
+ const stepsSnippet = keySteps
391
+ .slice(0, 3)
392
+ .map((s) => s.slice(0, 80))
393
+ .join('; ');
394
+ return `[${domain}] ${success} complete task: "${taskSnippet}". Key steps: ${stepsSnippet}. ${experience.feedback.slice(0, 100)}`;
395
+ }
396
+
397
+ return `[${domain}] ${success} complete task: "${taskSnippet}". ${experience.feedback.slice(0, 150)}`;
398
+ }
399
+ }
400
+
401
+ /**
402
+ * Create a TemporalCompressor
403
+ */
404
+ export function createTemporalCompressor(
405
+ options?: Partial<TemporalCompressorConfig>,
406
+ persistence?: SqlitePersistence
407
+ ): TemporalCompressor {
408
+ return new TemporalCompressor(options, persistence);
409
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Persistence module — Unified SQLite database for system-internal state.
3
+ *
4
+ * Agent-accessible data (knowledge notes, published skills) stays as files.
5
+ * This module handles everything else: experiences, playbooks, causal edges,
6
+ * meta state, routing weights, vector embeddings.
7
+ */
8
+
9
+ export {
10
+ SqlitePersistence,
11
+ createSqlitePersistence,
12
+ type SqlitePersistenceConfig,
13
+ type ExperienceRow,
14
+ type PlaybookRow,
15
+ type ReflexionRow,
16
+ type CausalEdgeRow,
17
+ type MetaObservationRow,
18
+ type MetaStrategyRow,
19
+ type SystemStateRow,
20
+ } from './sqlite-persistence.js';
21
+
22
+ export {
23
+ toISO,
24
+ fromISO,
25
+ toJSON,
26
+ fromJSON,
27
+ toInt,
28
+ fromInt,
29
+ embeddingToBlob,
30
+ blobToEmbedding,
31
+ } from './serializers.js';
32
+
33
+ export {
34
+ JsonToSqliteMigrator,
35
+ runMigration,
36
+ type MigrationResult,
37
+ } from './migrator.js';