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
package/src/factory.ts CHANGED
@@ -14,18 +14,22 @@
14
14
  * const memory = factory.createMemorySystem('./.memory');
15
15
  * await memory.init();
16
16
  *
17
- * const pipeline = factory.createLearningPipeline(memory, {
18
- * minTrajectories: 5,
19
- * });
17
+ * const pipeline = factory.createLearningPipeline(memory);
18
+ * await pipeline.init();
20
19
  * ```
21
20
  */
22
21
 
23
- import type { Task, Trajectory, Step, Outcome, LearningConfig } from './types/index.js';
22
+ import type { Task, Trajectory, Step, Outcome } from './types/index.js';
24
23
  import { createTask, createTrajectory, createStep, successOutcome, failureOutcome } from './types/index.js';
25
24
  import type { MemorySystem } from './memory/system.js';
26
25
  import { createMemorySystem } from './memory/system.js';
27
- import type { ProcessResult, BatchResult } from './learning/pipeline.js';
28
- import { createLearningPipeline } from './learning/pipeline.js';
26
+ import { createSqlitePersistence } from './persistence/index.js';
27
+ import type {
28
+ ImmediateResult,
29
+ UnifiedBatchResult,
30
+ UnifiedPipelineConfig,
31
+ } from './learning/unified-pipeline.js';
32
+ import { createUnifiedPipeline } from './learning/unified-pipeline.js';
29
33
 
30
34
  /**
31
35
  * Parameters for creating a Task
@@ -71,10 +75,10 @@ export interface OutcomeParams {
71
75
  }
72
76
 
73
77
  /**
74
- * Learning pipeline configuration
78
+ * Learning pipeline configuration (subset exposed to external consumers)
75
79
  */
76
80
  export interface LearningPipelineConfig {
77
- creditStrategy?: 'simple' | 'contribution';
81
+ creditStrategy?: 'simple' | 'llm' | 'counterfactual';
78
82
  minTrajectories?: number;
79
83
  deduplicationThreshold?: number;
80
84
  minSuccessRate?: number;
@@ -84,11 +88,10 @@ export interface LearningPipelineConfig {
84
88
  * Interface for the LearningPipeline that external consumers need
85
89
  */
86
90
  export interface ILearningPipeline {
87
- processTrajectory(trajectory: Trajectory): Promise<ProcessResult>;
88
- shouldRunBatch(): boolean;
89
- runBatchLearning(): Promise<BatchResult>;
91
+ init(): Promise<void>;
92
+ processTrajectory(trajectory: Trajectory): Promise<ImmediateResult>;
93
+ runBatch(): Promise<UnifiedBatchResult>;
90
94
  getAccumulatedCount(): number;
91
- clearAccumulated(): void;
92
95
  }
93
96
 
94
97
  /**
@@ -159,16 +162,29 @@ export interface CognitiveCoreFactory {
159
162
  */
160
163
  class CognitiveCoreFactoryImpl implements CognitiveCoreFactory {
161
164
  createMemorySystem(storagePath: string): IMemorySystem {
162
- return createMemorySystem(storagePath) as IMemorySystem;
165
+ const persistence = createSqlitePersistence({ baseDir: storagePath });
166
+ return createMemorySystem(persistence, storagePath) as IMemorySystem;
163
167
  }
164
168
 
165
169
  createLearningPipeline(
166
170
  memory: IMemorySystem,
167
171
  config?: LearningPipelineConfig
168
172
  ): ILearningPipeline {
169
- return createLearningPipeline(
173
+ const pipelineConfig: Partial<UnifiedPipelineConfig> = config ? {
174
+ batch: {
175
+ learning: {
176
+ creditStrategy: config.creditStrategy,
177
+ minTrajectories: config.minTrajectories,
178
+ deduplicationThreshold: config.deduplicationThreshold,
179
+ minSuccessRate: config.minSuccessRate,
180
+ },
181
+ energy: {},
182
+ },
183
+ } : {};
184
+
185
+ return createUnifiedPipeline(
170
186
  memory as MemorySystem,
171
- config as Partial<LearningConfig>
187
+ pipelineConfig,
172
188
  ) as ILearningPipeline;
173
189
  }
174
190
 
@@ -212,6 +228,7 @@ class CognitiveCoreFactoryImpl implements CognitiveCoreFactory {
212
228
  * minTrajectories: 10,
213
229
  * deduplicationThreshold: 0.85,
214
230
  * });
231
+ * await pipeline.init();
215
232
  *
216
233
  * // Create and process trajectory
217
234
  * const task = factory.createTask({
@@ -254,7 +271,7 @@ export const cognitiveCoreFactory = createCognitiveCoreFactory();
254
271
  */
255
272
  export {
256
273
  createMemorySystem,
257
- createLearningPipeline,
274
+ createUnifiedPipeline as createLearningPipeline,
258
275
  createTask,
259
276
  createTrajectory,
260
277
  createStep,
package/src/index.ts CHANGED
@@ -62,6 +62,29 @@ export {
62
62
  createTeamExperienceMemory,
63
63
  type TeamExperience,
64
64
  type TeamAnalysisResult,
65
+ // Reflexion episodes
66
+ ReflexionMemory,
67
+ createReflexionMemory,
68
+ // Coherence checking
69
+ CoherenceChecker,
70
+ createCoherenceChecker,
71
+ type CoherenceResult,
72
+ type CoherenceCheckerConfig,
73
+ // Reasoning bank (clustered experience retrieval)
74
+ ReasoningBank,
75
+ createReasoningBank,
76
+ type ExperienceCluster,
77
+ type ClusterStats,
78
+ type ReasoningBankConfig,
79
+ // Causal edge store
80
+ CausalStore,
81
+ createCausalStore,
82
+ type CausalEdge,
83
+ // Temporal compression
84
+ TemporalCompressor,
85
+ createTemporalCompressor,
86
+ type TemporalCompressorConfig,
87
+ type CompressionResult,
65
88
  // Knowledge bank (semantic memory)
66
89
  KnowledgeBank,
67
90
  KnowledgeGraphManager,
@@ -80,12 +103,8 @@ export {
80
103
 
81
104
  // Learning engine
82
105
  export {
83
- LearningPipeline,
84
- createLearningPipeline,
85
106
  TrajectoryAnalyzer,
86
107
  createAnalyzer,
87
- type ProcessResult,
88
- type BatchResult,
89
108
  type AnalysisResult,
90
109
  // Playbook-based learning
91
110
  PlaybookExtractor,
@@ -123,17 +142,70 @@ export {
123
142
  InMemoryTrajectorySource,
124
143
  FileTrajectorySource,
125
144
  PipelineTrajectorySource,
126
- EntireTrajectorySource,
127
- type EntireSynthesisOptions,
145
+ SessionTrajectorySource,
146
+ type SessionSynthesisOptions,
128
147
  DataclawTrajectorySource,
129
148
  type DataclawSourceOptions,
149
+ // Instant (hot-path) learning
150
+ InstantLoop,
151
+ createInstantLoop,
152
+ type InstantLoopResult,
153
+ type InstantLoopConfig,
154
+ // Reflexion generation
155
+ ReflexionGenerator,
156
+ createReflexionGenerator,
157
+ type ReflexionGeneratorConfig,
158
+ // Effectiveness tracking
159
+ LearningEffectivenessTracker,
160
+ createEffectivenessTracker,
161
+ type TaskAnnotation,
162
+ type EffectivenessMetrics,
163
+ type PlaybookEffectivenessEntry,
164
+ // Unified learning pipeline (three-speed: immediate + batch + maintenance)
165
+ UnifiedLearningPipeline,
166
+ createUnifiedPipeline,
167
+ type UnifiedPipelineConfig,
168
+ type UnifiedPipelineFeatures,
169
+ type ImmediateResult,
170
+ type UnifiedBatchResult,
171
+ type UnifiedPipelineStats,
172
+ // Energy evaluator
173
+ EnergyEvaluator,
174
+ createEnergyEvaluator,
175
+ type EnergyEvaluatorConfig,
176
+ type EnergyEvaluation,
177
+ type EnergySignal,
178
+ type EscalationReason,
179
+ type LaneTransition,
180
+ // Maintenance scheduler
181
+ MaintenanceScheduler,
182
+ createMaintenanceScheduler,
183
+ type MaintenanceSchedulerConfig,
184
+ type MaintenanceMode,
185
+ type MaintenanceCycleResult,
186
+ type MaintenanceTask,
187
+ type MaintenanceTaskResult,
188
+ // Healing orchestrator
189
+ HealingOrchestrator,
190
+ createHealingOrchestrator,
191
+ PlaybookDriftDetector,
192
+ MemoryBloatDetector,
193
+ MetricDriftDetector,
194
+ type HealingCycleResult,
195
+ type HealthContext,
196
+ type AnomalyDetector,
197
+ type RepairStrategy,
198
+ type Anomaly,
199
+ type RepairResult,
130
200
  } from './learning/index.js';
131
201
 
132
- // Session bank (Entire CLI integration)
202
+ // Session bank (SessionLog checkpoint reader, with Entire CLI fallback)
133
203
  export {
134
204
  SessionBank,
135
- EntireGitReader,
136
- EntireTranscriptParser,
205
+ CheckpointGitReader,
206
+ CheckpointParser,
207
+ detectFormat,
208
+ type CheckpointFormat,
137
209
  type SessionRecord,
138
210
  type SessionMetadata,
139
211
  type TranscriptMessage,
@@ -159,6 +231,13 @@ export {
159
231
  createSolver,
160
232
  type RoutingDecision,
161
233
  type SolverResult,
234
+ // MoE-inspired routing gate
235
+ MoEGate,
236
+ createMoEGate,
237
+ extractTaskFeatures,
238
+ MOE_FEATURE_SIZE,
239
+ MOE_STRATEGIES,
240
+ type MoEGateState,
162
241
  // Refinement
163
242
  SolutionEvaluator,
164
243
  createSolutionEvaluator,
@@ -211,6 +290,9 @@ export {
211
290
  JsonStore,
212
291
  saveJson,
213
292
  loadJson,
293
+ // Domain-partitioned storage
294
+ PartitionedStore,
295
+ type PartitionedStoreOptions,
214
296
  } from './utils/index.js';
215
297
 
216
298
  // Embeddings - Vector search and similarity
@@ -230,6 +312,8 @@ export {
230
312
  SqliteVectorStore,
231
313
  createVectorStore,
232
314
  type VectorSearchResult,
315
+ // Inverted index (candidate narrowing)
316
+ InvertedIndex,
233
317
  // Embedding manager
234
318
  EmbeddingManager,
235
319
  createEmbeddingManager,
@@ -353,6 +437,22 @@ export {
353
437
  AgenticTaskOutputError,
354
438
  } from './workspace/index.js';
355
439
 
440
+ // Persistence - Unified SQLite database for system-internal state
441
+ export {
442
+ SqlitePersistence,
443
+ createSqlitePersistence,
444
+ type SqlitePersistenceConfig,
445
+ type ExperienceRow,
446
+ type PlaybookRow,
447
+ type ReflexionRow,
448
+ type CausalEdgeRow,
449
+ type MetaObservationRow,
450
+ type MetaStrategyRow,
451
+ JsonToSqliteMigrator,
452
+ runMigration,
453
+ type MigrationResult,
454
+ } from './persistence/index.js';
455
+
356
456
  // Factory - Unified interface for external integration (e.g., skill-tree)
357
457
  export {
358
458
  createCognitiveCoreFactory,
@@ -1,4 +1,6 @@
1
1
  import type { Trajectory, CreditStrategy } from '../types/index.js';
2
+ import { classifyError } from '../utils/error-classifier.js';
3
+ import { detectRepeatedActions } from '../utils/trajectory-helpers.js';
2
4
 
3
5
  /**
4
6
  * Analysis result from trajectory examination
@@ -189,48 +191,30 @@ export class TrajectoryAnalyzer {
189
191
  const patterns: ErrorPattern[] = [];
190
192
 
191
193
  if (!trajectory.outcome.success && trajectory.outcome.errorInfo) {
192
- // Extract error type from error info
193
- const errorInfo = trajectory.outcome.errorInfo;
194
-
195
- // Common error patterns
196
- const errorTypes: Array<[RegExp, string, string]> = [
197
- [/timeout/i, 'timeout', 'Operation timed out'],
198
- [/not found/i, 'not_found', 'Resource not found'],
199
- [/permission denied/i, 'permission', 'Permission denied'],
200
- [/syntax error/i, 'syntax', 'Syntax error in code'],
201
- [/type error/i, 'type', 'Type mismatch error'],
202
- [/assertion|assert/i, 'assertion', 'Assertion failed'],
203
- [/exception|error/i, 'general', 'General error'],
204
- ];
205
-
206
- for (const [pattern, type, desc] of errorTypes) {
207
- if (pattern.test(errorInfo)) {
208
- patterns.push({
209
- type,
210
- signature: errorInfo.slice(0, 100),
211
- description: desc,
212
- });
213
- break;
214
- }
194
+ const classification = classifyError(trajectory.outcome.errorInfo);
195
+ if (classification) {
196
+ patterns.push({
197
+ type: classification.type,
198
+ signature: trajectory.outcome.errorInfo.slice(0, 100),
199
+ description: classification.description,
200
+ });
215
201
  }
216
202
  }
217
203
 
218
204
  // Check for repeated failed actions
219
- const actionCounts = new Map<string, number>();
220
- for (const step of trajectory.steps) {
221
- const count = (actionCounts.get(step.action) ?? 0) + 1;
222
- actionCounts.set(step.action, count);
223
- }
205
+ const repeated = detectRepeatedActions(
206
+ trajectory.steps,
207
+ this.config.actionRepetitionThreshold,
208
+ (a) => a, // Use raw action strings for analyzer (preserves full action for signature)
209
+ );
224
210
 
225
- for (const [action, count] of actionCounts) {
226
- if (count >= this.config.actionRepetitionThreshold) {
227
- patterns.push({
228
- type: 'repetition',
229
- signature: action,
230
- description: `Action repeated ${count} times`,
231
- suggestedFix: 'Try a different approach',
232
- });
233
- }
211
+ for (const { action, count } of repeated) {
212
+ patterns.push({
213
+ type: 'repetition',
214
+ signature: action,
215
+ description: `Action repeated ${count} times`,
216
+ suggestedFix: 'Try a different approach',
217
+ });
234
218
  }
235
219
 
236
220
  return patterns;
@@ -0,0 +1,282 @@
1
+ /**
2
+ * EnergyEvaluator — Ruvector-inspired energy-threshold batch trigger.
3
+ *
4
+ * Instead of a simple count threshold, the evaluator measures "incoherence
5
+ * energy" from trajectory signals. A trajectory that introduces contradictions,
6
+ * encounters a novel domain with no playbooks, or triggers a high error rate
7
+ * can escalate to batch processing even before the count threshold is met.
8
+ *
9
+ * Inspired by ruvector's Compute Ladder (prime-radiant/execution/ladder.rs)
10
+ * which uses energy-driven escalation with named transition reasons.
11
+ */
12
+
13
+ import type { Trajectory } from '../types/index.js';
14
+ import type { InstantLoopResult } from './instant-loop.js';
15
+
16
+ /**
17
+ * Reasons why a batch was triggered — named transitions for audit.
18
+ */
19
+ export type EscalationReason =
20
+ | 'count_threshold'
21
+ | 'contradiction_detected'
22
+ | 'novel_domain'
23
+ | 'high_error_rate'
24
+ | 'pattern_shift'
25
+ | 'manual_override';
26
+
27
+ /**
28
+ * Signals extracted from a trajectory that contribute to energy.
29
+ */
30
+ export interface EnergySignal {
31
+ /** Whether a coherence contradiction was detected during instant loop */
32
+ contradictionDetected: boolean;
33
+ /** Whether this trajectory's domain has no existing playbooks */
34
+ novelDomain: boolean;
35
+ /** Error rate in the recent window exceeds threshold */
36
+ highErrorRate: boolean;
37
+ /** Significant shift in patterns (e.g., new tool usage, domain change) */
38
+ patternShift: boolean;
39
+ }
40
+
41
+ /**
42
+ * Result of an energy evaluation.
43
+ */
44
+ export interface EnergyEvaluation {
45
+ /** Computed energy score (0.0 = calm, 1.0 = high incoherence) */
46
+ energy: number;
47
+ /** Whether the energy exceeds the batch trigger threshold */
48
+ shouldTriggerBatch: boolean;
49
+ /** Named reason(s) for the trigger decision */
50
+ reasons: EscalationReason[];
51
+ }
52
+
53
+ /**
54
+ * Lane transition record for audit purposes.
55
+ */
56
+ export interface LaneTransition {
57
+ timestamp: Date;
58
+ fromPhase: 'immediate' | 'batch' | 'maintenance';
59
+ toPhase: 'immediate' | 'batch' | 'maintenance';
60
+ reasons: EscalationReason[];
61
+ energy: number;
62
+ trajectoryId: string;
63
+ }
64
+
65
+ /**
66
+ * Configuration for the EnergyEvaluator.
67
+ */
68
+ export interface EnergyEvaluatorConfig {
69
+ /** Trajectories needed before count-based batch trigger (default: 10) */
70
+ countThreshold: number;
71
+ /** Trigger batch when a contradiction is detected (default: true) */
72
+ triggerOnContradiction: boolean;
73
+ /** Trigger batch when a novel domain is encountered (default: true) */
74
+ triggerOnNovelDomain: boolean;
75
+ /** Error rate threshold for triggering batch (default: 0.6) */
76
+ errorRateThreshold: number;
77
+ /** Minimum time between batches in ms — debounce (default: 30000) */
78
+ minIntervalMs: number;
79
+ /** Number of recent trajectories to consider for error rate (default: 5) */
80
+ recentWindowSize: number;
81
+ /** Energy threshold for triggering batch (0.0–1.0, default: 0.7) */
82
+ energyThreshold: number;
83
+ /** Energy contribution weights */
84
+ weights: {
85
+ contradiction: number; // default: 0.4
86
+ novelDomain: number; // default: 0.3
87
+ highErrorRate: number; // default: 0.2
88
+ patternShift: number; // default: 0.1
89
+ };
90
+ }
91
+
92
+ const DEFAULT_CONFIG: EnergyEvaluatorConfig = {
93
+ countThreshold: 10,
94
+ triggerOnContradiction: true,
95
+ triggerOnNovelDomain: true,
96
+ errorRateThreshold: 0.6,
97
+ minIntervalMs: 30_000,
98
+ recentWindowSize: 5,
99
+ energyThreshold: 0.7,
100
+ weights: {
101
+ contradiction: 0.4,
102
+ novelDomain: 0.3,
103
+ highErrorRate: 0.2,
104
+ patternShift: 0.1,
105
+ },
106
+ };
107
+
108
+ /**
109
+ * EnergyEvaluator — determines when batch processing should be triggered
110
+ * based on measured incoherence energy from trajectory signals.
111
+ */
112
+ export class EnergyEvaluator {
113
+ private config: EnergyEvaluatorConfig;
114
+ private pendingCount = 0;
115
+ private lastBatchTime = 0;
116
+ private recentOutcomes: boolean[] = [];
117
+ private knownDomains = new Set<string>();
118
+ private transitionLog: LaneTransition[] = [];
119
+
120
+ constructor(config?: Partial<EnergyEvaluatorConfig>) {
121
+ this.config = {
122
+ ...DEFAULT_CONFIG,
123
+ ...config,
124
+ weights: { ...DEFAULT_CONFIG.weights, ...config?.weights },
125
+ };
126
+ }
127
+
128
+ /**
129
+ * Record a trajectory and evaluate whether batch should be triggered.
130
+ */
131
+ evaluate(
132
+ trajectory: Trajectory,
133
+ _instantResult: InstantLoopResult,
134
+ signals?: Partial<EnergySignal>,
135
+ ): EnergyEvaluation {
136
+ this.pendingCount++;
137
+
138
+ // Track recent outcomes for error rate
139
+ this.recentOutcomes.push(trajectory.outcome.success);
140
+ if (this.recentOutcomes.length > this.config.recentWindowSize) {
141
+ this.recentOutcomes.shift();
142
+ }
143
+
144
+ // Build the energy signal
145
+ const domain = trajectory.task.domain ?? 'general';
146
+ const isNovelDomain = !this.knownDomains.has(domain);
147
+ this.knownDomains.add(domain);
148
+
149
+ const errorRate = this.recentOutcomes.length > 0
150
+ ? this.recentOutcomes.filter(s => !s).length / this.recentOutcomes.length
151
+ : 0;
152
+
153
+ const signal: EnergySignal = {
154
+ contradictionDetected: signals?.contradictionDetected ?? false,
155
+ novelDomain: isNovelDomain && (signals?.novelDomain ?? true),
156
+ highErrorRate: errorRate >= this.config.errorRateThreshold,
157
+ patternShift: signals?.patternShift ?? false,
158
+ };
159
+
160
+ // Compute energy
161
+ const energy = this.computeEnergy(signal);
162
+
163
+ // Determine reasons
164
+ const reasons: EscalationReason[] = [];
165
+
166
+ if (this.pendingCount >= this.config.countThreshold) {
167
+ reasons.push('count_threshold');
168
+ }
169
+ if (signal.contradictionDetected && this.config.triggerOnContradiction) {
170
+ reasons.push('contradiction_detected');
171
+ }
172
+ if (signal.novelDomain && this.config.triggerOnNovelDomain) {
173
+ reasons.push('novel_domain');
174
+ }
175
+ if (signal.highErrorRate) {
176
+ reasons.push('high_error_rate');
177
+ }
178
+ if (signal.patternShift) {
179
+ reasons.push('pattern_shift');
180
+ }
181
+
182
+ // Check debounce
183
+ const now = Date.now();
184
+ const withinDebounce = (now - this.lastBatchTime) < this.config.minIntervalMs;
185
+
186
+ // Trigger if count threshold reached OR energy exceeds threshold
187
+ const shouldTrigger = !withinDebounce && (
188
+ this.pendingCount >= this.config.countThreshold ||
189
+ energy >= this.config.energyThreshold
190
+ );
191
+
192
+ if (shouldTrigger && reasons.length > 0) {
193
+ this.transitionLog.push({
194
+ timestamp: new Date(),
195
+ fromPhase: 'immediate',
196
+ toPhase: 'batch',
197
+ reasons,
198
+ energy,
199
+ trajectoryId: trajectory.id,
200
+ });
201
+ }
202
+
203
+ return {
204
+ energy,
205
+ shouldTriggerBatch: shouldTrigger,
206
+ reasons: shouldTrigger ? reasons : [],
207
+ };
208
+ }
209
+
210
+ /**
211
+ * Compute energy from signal using weighted sum.
212
+ */
213
+ private computeEnergy(signal: EnergySignal): number {
214
+ const w = this.config.weights;
215
+ let energy = 0;
216
+
217
+ if (signal.contradictionDetected) energy += w.contradiction;
218
+ if (signal.novelDomain) energy += w.novelDomain;
219
+ if (signal.highErrorRate) energy += w.highErrorRate;
220
+ if (signal.patternShift) energy += w.patternShift;
221
+
222
+ return Math.min(1.0, energy);
223
+ }
224
+
225
+ /**
226
+ * Reset after a batch run completes.
227
+ */
228
+ resetAfterBatch(): void {
229
+ this.pendingCount = 0;
230
+ this.lastBatchTime = Date.now();
231
+ }
232
+
233
+ /**
234
+ * Force-trigger evaluation (for manual override).
235
+ */
236
+ forceEvaluate(): EnergyEvaluation {
237
+ return {
238
+ energy: 1.0,
239
+ shouldTriggerBatch: true,
240
+ reasons: ['manual_override'],
241
+ };
242
+ }
243
+
244
+ /**
245
+ * Seed known domains (e.g., from existing playbooks on init).
246
+ */
247
+ seedKnownDomains(domains: string[]): void {
248
+ for (const d of domains) {
249
+ this.knownDomains.add(d);
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Get the current pending count.
255
+ */
256
+ getPendingCount(): number {
257
+ return this.pendingCount;
258
+ }
259
+
260
+ /**
261
+ * Get the transition log for audit/debugging.
262
+ */
263
+ getTransitionLog(): readonly LaneTransition[] {
264
+ return this.transitionLog;
265
+ }
266
+
267
+ /**
268
+ * Get current configuration.
269
+ */
270
+ getConfig(): Readonly<EnergyEvaluatorConfig> {
271
+ return this.config;
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Create an EnergyEvaluator.
277
+ */
278
+ export function createEnergyEvaluator(
279
+ config?: Partial<EnergyEvaluatorConfig>,
280
+ ): EnergyEvaluator {
281
+ return new EnergyEvaluator(config);
282
+ }