@cleocode/core 2026.3.56 → 2026.3.58

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 (893) hide show
  1. package/dist/adapters/adapter-registry.js +64 -0
  2. package/dist/adapters/adapter-registry.js.map +1 -0
  3. package/dist/adapters/discovery.js +83 -0
  4. package/dist/adapters/discovery.js.map +1 -0
  5. package/dist/adapters/index.js +9 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/manager.js +260 -0
  8. package/dist/adapters/manager.js.map +1 -0
  9. package/dist/admin/export-tasks.js +171 -0
  10. package/dist/admin/export-tasks.js.map +1 -0
  11. package/dist/admin/export.js +103 -0
  12. package/dist/admin/export.js.map +1 -0
  13. package/dist/admin/help.js +106 -0
  14. package/dist/admin/help.js.map +1 -0
  15. package/dist/admin/import-tasks.js +182 -0
  16. package/dist/admin/import-tasks.js.map +1 -0
  17. package/dist/admin/import.js +129 -0
  18. package/dist/admin/import.js.map +1 -0
  19. package/dist/admin/index.js +13 -0
  20. package/dist/admin/index.js.map +1 -0
  21. package/dist/adrs/find.js +134 -0
  22. package/dist/adrs/find.js.map +1 -0
  23. package/dist/adrs/index.js +15 -0
  24. package/dist/adrs/index.js.map +1 -0
  25. package/dist/adrs/link-pipeline.js +160 -0
  26. package/dist/adrs/link-pipeline.js.map +1 -0
  27. package/dist/adrs/list.js +43 -0
  28. package/dist/adrs/list.js.map +1 -0
  29. package/dist/adrs/parse.js +51 -0
  30. package/dist/adrs/parse.js.map +1 -0
  31. package/dist/adrs/show.js +22 -0
  32. package/dist/adrs/show.js.map +1 -0
  33. package/dist/adrs/sync.js +188 -0
  34. package/dist/adrs/sync.js.map +1 -0
  35. package/dist/adrs/types.js +9 -0
  36. package/dist/adrs/types.js.map +1 -0
  37. package/dist/adrs/validate.js +57 -0
  38. package/dist/adrs/validate.js.map +1 -0
  39. package/dist/agents/agent-schema.d.ts.map +1 -1
  40. package/dist/agents/agent-schema.js +80 -0
  41. package/dist/agents/agent-schema.js.map +1 -0
  42. package/dist/agents/capacity.js +116 -0
  43. package/dist/agents/capacity.js.map +1 -0
  44. package/dist/agents/execution-learning.d.ts +223 -0
  45. package/dist/agents/execution-learning.d.ts.map +1 -0
  46. package/dist/agents/index.d.ts +1 -0
  47. package/dist/agents/index.d.ts.map +1 -1
  48. package/dist/agents/index.js +21 -0
  49. package/dist/agents/index.js.map +1 -0
  50. package/dist/agents/registry.js +314 -0
  51. package/dist/agents/registry.js.map +1 -0
  52. package/dist/agents/retry.js +176 -0
  53. package/dist/agents/retry.js.map +1 -0
  54. package/dist/audit-prune.js +94 -0
  55. package/dist/audit-prune.js.map +1 -0
  56. package/dist/audit.js +68 -0
  57. package/dist/audit.js.map +1 -0
  58. package/dist/backfill/index.d.ts +56 -0
  59. package/dist/backfill/index.d.ts.map +1 -0
  60. package/dist/bootstrap.d.ts +1 -1
  61. package/dist/bootstrap.js +260 -0
  62. package/dist/bootstrap.js.map +1 -0
  63. package/dist/caamp/adapter.js +434 -0
  64. package/dist/caamp/adapter.js.map +1 -0
  65. package/dist/caamp/capability-check.js +38 -0
  66. package/dist/caamp/capability-check.js.map +1 -0
  67. package/dist/caamp/index.js +23 -0
  68. package/dist/caamp/index.js.map +1 -0
  69. package/dist/caamp-init.js +16 -0
  70. package/dist/caamp-init.js.map +1 -0
  71. package/dist/cleo.js +267 -0
  72. package/dist/cleo.js.map +1 -0
  73. package/dist/codebase-map/analyzers/architecture.js +130 -0
  74. package/dist/codebase-map/analyzers/architecture.js.map +1 -0
  75. package/dist/codebase-map/analyzers/concerns.js +122 -0
  76. package/dist/codebase-map/analyzers/concerns.js.map +1 -0
  77. package/dist/codebase-map/analyzers/conventions.js +149 -0
  78. package/dist/codebase-map/analyzers/conventions.js.map +1 -0
  79. package/dist/codebase-map/analyzers/integrations.js +108 -0
  80. package/dist/codebase-map/analyzers/integrations.js.map +1 -0
  81. package/dist/codebase-map/analyzers/stack.js +117 -0
  82. package/dist/codebase-map/analyzers/stack.js.map +1 -0
  83. package/dist/codebase-map/analyzers/structure.js +137 -0
  84. package/dist/codebase-map/analyzers/structure.js.map +1 -0
  85. package/dist/codebase-map/analyzers/testing.js +118 -0
  86. package/dist/codebase-map/analyzers/testing.js.map +1 -0
  87. package/dist/codebase-map/index.js +57 -0
  88. package/dist/codebase-map/index.js.map +1 -0
  89. package/dist/codebase-map/store.js +122 -0
  90. package/dist/codebase-map/store.js.map +1 -0
  91. package/dist/codebase-map/summary.js +152 -0
  92. package/dist/codebase-map/summary.js.map +1 -0
  93. package/dist/compliance/index.js +288 -0
  94. package/dist/compliance/index.js.map +1 -0
  95. package/dist/compliance/protocol-enforcement.js +332 -0
  96. package/dist/compliance/protocol-enforcement.js.map +1 -0
  97. package/dist/compliance/protocol-rules.js +786 -0
  98. package/dist/compliance/protocol-rules.js.map +1 -0
  99. package/dist/compliance/protocol-types.js +80 -0
  100. package/dist/compliance/protocol-types.js.map +1 -0
  101. package/dist/compliance/store.js +53 -0
  102. package/dist/compliance/store.js.map +1 -0
  103. package/dist/config/build-config.js +29 -0
  104. package/dist/config/build-config.js.map +1 -0
  105. package/dist/config.d.ts +47 -0
  106. package/dist/config.d.ts.map +1 -1
  107. package/dist/config.js +287 -0
  108. package/dist/config.js.map +1 -0
  109. package/dist/constants.js +18 -0
  110. package/dist/constants.js.map +1 -0
  111. package/dist/context/index.js +137 -0
  112. package/dist/context/index.js.map +1 -0
  113. package/dist/engine-result.js +12 -0
  114. package/dist/engine-result.js.map +1 -0
  115. package/dist/error-catalog.js +404 -0
  116. package/dist/error-catalog.js.map +1 -0
  117. package/dist/error-registry.js +393 -0
  118. package/dist/error-registry.js.map +1 -0
  119. package/dist/errors.js +167 -0
  120. package/dist/errors.js.map +1 -0
  121. package/dist/hooks/handlers/error-hooks.js +43 -0
  122. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  123. package/dist/hooks/handlers/file-hooks.js +80 -0
  124. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  125. package/dist/hooks/handlers/index.js +19 -0
  126. package/dist/hooks/handlers/index.js.map +1 -0
  127. package/dist/hooks/handlers/mcp-hooks.js +80 -0
  128. package/dist/hooks/handlers/mcp-hooks.js.map +1 -0
  129. package/dist/hooks/handlers/session-hooks.js +73 -0
  130. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  131. package/dist/hooks/handlers/task-hooks.js +63 -0
  132. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  133. package/dist/hooks/index.js +13 -0
  134. package/dist/hooks/index.js.map +1 -0
  135. package/dist/hooks/payload-schemas.js +163 -0
  136. package/dist/hooks/payload-schemas.js.map +1 -0
  137. package/dist/hooks/provider-hooks.js +34 -0
  138. package/dist/hooks/provider-hooks.js.map +1 -0
  139. package/dist/hooks/registry.js +176 -0
  140. package/dist/hooks/registry.js.map +1 -0
  141. package/dist/hooks/types.js +62 -0
  142. package/dist/hooks/types.js.map +1 -0
  143. package/dist/hooks.js +136 -0
  144. package/dist/hooks.js.map +1 -0
  145. package/dist/index.d.ts +1 -1
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +6567 -5024
  148. package/dist/index.js.map +4 -4
  149. package/dist/init.js +711 -0
  150. package/dist/init.js.map +1 -0
  151. package/dist/inject/index.js +82 -0
  152. package/dist/inject/index.js.map +1 -0
  153. package/dist/injection.js +343 -0
  154. package/dist/injection.js.map +1 -0
  155. package/dist/intelligence/adaptive-validation.d.ts +151 -0
  156. package/dist/intelligence/adaptive-validation.d.ts.map +1 -0
  157. package/dist/intelligence/impact.js +499 -0
  158. package/dist/intelligence/impact.js.map +1 -0
  159. package/dist/intelligence/index.d.ts +5 -0
  160. package/dist/intelligence/index.d.ts.map +1 -1
  161. package/dist/intelligence/index.js +17 -0
  162. package/dist/intelligence/index.js.map +1 -0
  163. package/dist/intelligence/patterns.js +492 -0
  164. package/dist/intelligence/patterns.js.map +1 -0
  165. package/dist/intelligence/prediction.js +499 -0
  166. package/dist/intelligence/prediction.js.map +1 -0
  167. package/dist/intelligence/types.js +13 -0
  168. package/dist/intelligence/types.js.map +1 -0
  169. package/dist/internal.d.ts +5 -2
  170. package/dist/internal.d.ts.map +1 -1
  171. package/dist/internal.js +258 -0
  172. package/dist/internal.js.map +1 -0
  173. package/dist/issue/create.js +121 -0
  174. package/dist/issue/create.js.map +1 -0
  175. package/dist/issue/diagnostics.js +59 -0
  176. package/dist/issue/diagnostics.js.map +1 -0
  177. package/dist/issue/index.js +10 -0
  178. package/dist/issue/index.js.map +1 -0
  179. package/dist/issue/template-parser.js +267 -0
  180. package/dist/issue/template-parser.js.map +1 -0
  181. package/dist/json-schema-validator.js +76 -0
  182. package/dist/json-schema-validator.js.map +1 -0
  183. package/dist/lifecycle/chain-composition.js +152 -0
  184. package/dist/lifecycle/chain-composition.js.map +1 -0
  185. package/dist/lifecycle/chain-store.js +246 -0
  186. package/dist/lifecycle/chain-store.js.map +1 -0
  187. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  188. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  189. package/dist/lifecycle/default-chain.js +167 -0
  190. package/dist/lifecycle/default-chain.js.map +1 -0
  191. package/dist/lifecycle/evidence.js +180 -0
  192. package/dist/lifecycle/evidence.js.map +1 -0
  193. package/dist/lifecycle/frontmatter.js +363 -0
  194. package/dist/lifecycle/frontmatter.js.map +1 -0
  195. package/dist/lifecycle/index.js +753 -0
  196. package/dist/lifecycle/index.js.map +1 -0
  197. package/dist/lifecycle/pipeline.js +656 -0
  198. package/dist/lifecycle/pipeline.js.map +1 -0
  199. package/dist/lifecycle/rcasd-index.js +326 -0
  200. package/dist/lifecycle/rcasd-index.js.map +1 -0
  201. package/dist/lifecycle/rcasd-paths.js +220 -0
  202. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  203. package/dist/lifecycle/resume.js +864 -0
  204. package/dist/lifecycle/resume.js.map +1 -0
  205. package/dist/lifecycle/stage-artifacts.js +94 -0
  206. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  207. package/dist/lifecycle/stages.js +534 -0
  208. package/dist/lifecycle/stages.js.map +1 -0
  209. package/dist/lifecycle/state-machine.js +516 -0
  210. package/dist/lifecycle/state-machine.js.map +1 -0
  211. package/dist/lifecycle/tessera-engine.js +249 -0
  212. package/dist/lifecycle/tessera-engine.js.map +1 -0
  213. package/dist/logger.js +140 -0
  214. package/dist/logger.js.map +1 -0
  215. package/dist/mcp/index.js +146 -0
  216. package/dist/mcp/index.js.map +1 -0
  217. package/dist/memory/auto-extract.js +143 -0
  218. package/dist/memory/auto-extract.js.map +1 -0
  219. package/dist/memory/brain-embedding.js +49 -0
  220. package/dist/memory/brain-embedding.js.map +1 -0
  221. package/dist/memory/brain-lifecycle.js +298 -0
  222. package/dist/memory/brain-lifecycle.js.map +1 -0
  223. package/dist/memory/brain-links.js +148 -0
  224. package/dist/memory/brain-links.js.map +1 -0
  225. package/dist/memory/brain-migration.js +149 -0
  226. package/dist/memory/brain-migration.js.map +1 -0
  227. package/dist/memory/brain-reasoning.js +215 -0
  228. package/dist/memory/brain-reasoning.js.map +1 -0
  229. package/dist/memory/brain-retrieval.js +474 -0
  230. package/dist/memory/brain-retrieval.js.map +1 -0
  231. package/dist/memory/brain-row-types.js +10 -0
  232. package/dist/memory/brain-row-types.js.map +1 -0
  233. package/dist/memory/brain-search.js +519 -0
  234. package/dist/memory/brain-search.js.map +1 -0
  235. package/dist/memory/brain-similarity.js +145 -0
  236. package/dist/memory/brain-similarity.js.map +1 -0
  237. package/dist/memory/claude-mem-migration.js +277 -0
  238. package/dist/memory/claude-mem-migration.js.map +1 -0
  239. package/dist/memory/decisions.js +148 -0
  240. package/dist/memory/decisions.js.map +1 -0
  241. package/dist/memory/engine-compat.js +1030 -0
  242. package/dist/memory/engine-compat.js.map +1 -0
  243. package/dist/memory/index.js +773 -0
  244. package/dist/memory/index.js.map +1 -0
  245. package/dist/memory/learnings.js +121 -0
  246. package/dist/memory/learnings.js.map +1 -0
  247. package/dist/memory/memory-bridge.js +289 -0
  248. package/dist/memory/memory-bridge.js.map +1 -0
  249. package/dist/memory/patterns.js +122 -0
  250. package/dist/memory/patterns.js.map +1 -0
  251. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  252. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  253. package/dist/memory/session-memory.js +226 -0
  254. package/dist/memory/session-memory.js.map +1 -0
  255. package/dist/metrics/ab-test.js +260 -0
  256. package/dist/metrics/ab-test.js.map +1 -0
  257. package/dist/metrics/aggregation.js +363 -0
  258. package/dist/metrics/aggregation.js.map +1 -0
  259. package/dist/metrics/common.js +64 -0
  260. package/dist/metrics/common.js.map +1 -0
  261. package/dist/metrics/enums.js +78 -0
  262. package/dist/metrics/enums.js.map +1 -0
  263. package/dist/metrics/index.js +19 -0
  264. package/dist/metrics/index.js.map +1 -0
  265. package/dist/metrics/model-provider-registry.js +88 -0
  266. package/dist/metrics/model-provider-registry.js.map +1 -0
  267. package/dist/metrics/otel-integration.js +263 -0
  268. package/dist/metrics/otel-integration.js.map +1 -0
  269. package/dist/metrics/provider-detection.js +103 -0
  270. package/dist/metrics/provider-detection.js.map +1 -0
  271. package/dist/metrics/token-estimation.js +253 -0
  272. package/dist/metrics/token-estimation.js.map +1 -0
  273. package/dist/metrics/token-service.js +450 -0
  274. package/dist/metrics/token-service.js.map +1 -0
  275. package/dist/migration/agent-outputs.js +316 -0
  276. package/dist/migration/agent-outputs.js.map +1 -0
  277. package/dist/migration/checksum.js +92 -0
  278. package/dist/migration/checksum.js.map +1 -0
  279. package/dist/migration/index.js +282 -0
  280. package/dist/migration/index.js.map +1 -0
  281. package/dist/migration/logger.js +360 -0
  282. package/dist/migration/logger.js.map +1 -0
  283. package/dist/migration/preflight.js +9 -0
  284. package/dist/migration/preflight.js.map +1 -0
  285. package/dist/migration/state.js +421 -0
  286. package/dist/migration/state.js.map +1 -0
  287. package/dist/migration/validate.js +241 -0
  288. package/dist/migration/validate.js.map +1 -0
  289. package/dist/nexus/deps.js +375 -0
  290. package/dist/nexus/deps.js.map +1 -0
  291. package/dist/nexus/discover.js +288 -0
  292. package/dist/nexus/discover.js.map +1 -0
  293. package/dist/nexus/hash.js +10 -0
  294. package/dist/nexus/hash.js.map +1 -0
  295. package/dist/nexus/index.js +38 -0
  296. package/dist/nexus/index.js.map +1 -0
  297. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  298. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  299. package/dist/nexus/permissions.js +105 -0
  300. package/dist/nexus/permissions.js.map +1 -0
  301. package/dist/nexus/query.js +175 -0
  302. package/dist/nexus/query.js.map +1 -0
  303. package/dist/nexus/registry.js +584 -0
  304. package/dist/nexus/registry.js.map +1 -0
  305. package/dist/nexus/sharing/index.js +179 -0
  306. package/dist/nexus/sharing/index.js.map +1 -0
  307. package/dist/nexus/transfer-types.js +8 -0
  308. package/dist/nexus/transfer-types.js.map +1 -0
  309. package/dist/nexus/transfer.js +263 -0
  310. package/dist/nexus/transfer.js.map +1 -0
  311. package/dist/observability/index.js +103 -0
  312. package/dist/observability/index.js.map +1 -0
  313. package/dist/observability/log-filter.js +63 -0
  314. package/dist/observability/log-filter.js.map +1 -0
  315. package/dist/observability/log-parser.js +99 -0
  316. package/dist/observability/log-parser.js.map +1 -0
  317. package/dist/observability/log-reader.js +139 -0
  318. package/dist/observability/log-reader.js.map +1 -0
  319. package/dist/observability/types.js +19 -0
  320. package/dist/observability/types.js.map +1 -0
  321. package/dist/orchestration/analyze.js +107 -0
  322. package/dist/orchestration/analyze.js.map +1 -0
  323. package/dist/orchestration/bootstrap.js +132 -0
  324. package/dist/orchestration/bootstrap.js.map +1 -0
  325. package/dist/orchestration/context.js +56 -0
  326. package/dist/orchestration/context.js.map +1 -0
  327. package/dist/orchestration/critical-path.js +100 -0
  328. package/dist/orchestration/critical-path.js.map +1 -0
  329. package/dist/orchestration/index.js +286 -0
  330. package/dist/orchestration/index.js.map +1 -0
  331. package/dist/orchestration/parallel.js +89 -0
  332. package/dist/orchestration/parallel.js.map +1 -0
  333. package/dist/orchestration/protocol-validators.js +524 -0
  334. package/dist/orchestration/protocol-validators.js.map +1 -0
  335. package/dist/orchestration/skill-ops.js +98 -0
  336. package/dist/orchestration/skill-ops.js.map +1 -0
  337. package/dist/orchestration/status.js +107 -0
  338. package/dist/orchestration/status.js.map +1 -0
  339. package/dist/orchestration/unblock.js +103 -0
  340. package/dist/orchestration/unblock.js.map +1 -0
  341. package/dist/orchestration/validate-spawn.js +67 -0
  342. package/dist/orchestration/validate-spawn.js.map +1 -0
  343. package/dist/orchestration/waves.js +86 -0
  344. package/dist/orchestration/waves.js.map +1 -0
  345. package/dist/otel/index.js +163 -0
  346. package/dist/otel/index.js.map +1 -0
  347. package/dist/output.js +132 -0
  348. package/dist/output.js.map +1 -0
  349. package/dist/pagination.js +61 -0
  350. package/dist/pagination.js.map +1 -0
  351. package/dist/paths.js +337 -0
  352. package/dist/paths.js.map +1 -0
  353. package/dist/phases/deps.js +369 -0
  354. package/dist/phases/deps.js.map +1 -0
  355. package/dist/phases/index.js +349 -0
  356. package/dist/phases/index.js.map +1 -0
  357. package/dist/pipeline/index.js +10 -0
  358. package/dist/pipeline/index.js.map +1 -0
  359. package/dist/pipeline/phase.js +45 -0
  360. package/dist/pipeline/phase.js.map +1 -0
  361. package/dist/platform.js +211 -0
  362. package/dist/platform.js.map +1 -0
  363. package/dist/project-info.js +84 -0
  364. package/dist/project-info.js.map +1 -0
  365. package/dist/reconciliation/index.js +10 -0
  366. package/dist/reconciliation/index.js.map +1 -0
  367. package/dist/reconciliation/link-store.js +129 -0
  368. package/dist/reconciliation/link-store.js.map +1 -0
  369. package/dist/reconciliation/reconciliation-engine.js +298 -0
  370. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  371. package/dist/release/artifacts.js +427 -0
  372. package/dist/release/artifacts.js.map +1 -0
  373. package/dist/release/changelog-writer.js +151 -0
  374. package/dist/release/changelog-writer.js.map +1 -0
  375. package/dist/release/channel.js +144 -0
  376. package/dist/release/channel.js.map +1 -0
  377. package/dist/release/ci.js +166 -0
  378. package/dist/release/ci.js.map +1 -0
  379. package/dist/release/github-pr.js +225 -0
  380. package/dist/release/github-pr.js.map +1 -0
  381. package/dist/release/guards.js +116 -0
  382. package/dist/release/guards.js.map +1 -0
  383. package/dist/release/index.js +22 -0
  384. package/dist/release/index.js.map +1 -0
  385. package/dist/release/release-config.js +158 -0
  386. package/dist/release/release-config.js.map +1 -0
  387. package/dist/release/release-manifest.js +1019 -0
  388. package/dist/release/release-manifest.js.map +1 -0
  389. package/dist/release/version-bump.js +255 -0
  390. package/dist/release/version-bump.js.map +1 -0
  391. package/dist/remote/index.js +257 -0
  392. package/dist/remote/index.js.map +1 -0
  393. package/dist/repair.js +89 -0
  394. package/dist/repair.js.map +1 -0
  395. package/dist/research/index.js +2 -0
  396. package/dist/research/index.js.map +1 -0
  397. package/dist/roadmap/index.js +59 -0
  398. package/dist/roadmap/index.js.map +1 -0
  399. package/dist/routing/capability-matrix.js +1550 -0
  400. package/dist/routing/capability-matrix.js.map +1 -0
  401. package/dist/routing/index.js +9 -0
  402. package/dist/routing/index.js.map +1 -0
  403. package/dist/scaffold.js +1158 -0
  404. package/dist/scaffold.js.map +1 -0
  405. package/dist/schema-management.js +295 -0
  406. package/dist/schema-management.js.map +1 -0
  407. package/dist/security/index.js +9 -0
  408. package/dist/security/index.js.map +1 -0
  409. package/dist/security/input-sanitization.js +321 -0
  410. package/dist/security/input-sanitization.js.map +1 -0
  411. package/dist/sequence/index.js +295 -0
  412. package/dist/sequence/index.js.map +1 -0
  413. package/dist/sessions/assumptions.js +54 -0
  414. package/dist/sessions/assumptions.js.map +1 -0
  415. package/dist/sessions/briefing.js +377 -0
  416. package/dist/sessions/briefing.js.map +1 -0
  417. package/dist/sessions/context-alert.js +222 -0
  418. package/dist/sessions/context-alert.js.map +1 -0
  419. package/dist/sessions/context-inject.js +61 -0
  420. package/dist/sessions/context-inject.js.map +1 -0
  421. package/dist/sessions/context-monitor.js +98 -0
  422. package/dist/sessions/context-monitor.js.map +1 -0
  423. package/dist/sessions/decisions.js +65 -0
  424. package/dist/sessions/decisions.js.map +1 -0
  425. package/dist/sessions/find.js +63 -0
  426. package/dist/sessions/find.js.map +1 -0
  427. package/dist/sessions/handoff.js +328 -0
  428. package/dist/sessions/handoff.js.map +1 -0
  429. package/dist/sessions/hitl-warnings.js +254 -0
  430. package/dist/sessions/hitl-warnings.js.map +1 -0
  431. package/dist/sessions/index.js +318 -0
  432. package/dist/sessions/index.js.map +1 -0
  433. package/dist/sessions/session-archive.js +40 -0
  434. package/dist/sessions/session-archive.js.map +1 -0
  435. package/dist/sessions/session-cleanup.js +59 -0
  436. package/dist/sessions/session-cleanup.js.map +1 -0
  437. package/dist/sessions/session-drift.js +134 -0
  438. package/dist/sessions/session-drift.js.map +1 -0
  439. package/dist/sessions/session-enforcement.d.ts.map +1 -1
  440. package/dist/sessions/session-enforcement.js +140 -0
  441. package/dist/sessions/session-enforcement.js.map +1 -0
  442. package/dist/sessions/session-grade.js +253 -0
  443. package/dist/sessions/session-grade.js.map +1 -0
  444. package/dist/sessions/session-history.js +42 -0
  445. package/dist/sessions/session-history.js.map +1 -0
  446. package/dist/sessions/session-id.js +81 -0
  447. package/dist/sessions/session-id.js.map +1 -0
  448. package/dist/sessions/session-memory-bridge.js +52 -0
  449. package/dist/sessions/session-memory-bridge.js.map +1 -0
  450. package/dist/sessions/session-show.js +24 -0
  451. package/dist/sessions/session-show.js.map +1 -0
  452. package/dist/sessions/session-stats.js +69 -0
  453. package/dist/sessions/session-stats.js.map +1 -0
  454. package/dist/sessions/session-suspend.js +39 -0
  455. package/dist/sessions/session-suspend.js.map +1 -0
  456. package/dist/sessions/session-switch.js +51 -0
  457. package/dist/sessions/session-switch.js.map +1 -0
  458. package/dist/sessions/session-view.js +76 -0
  459. package/dist/sessions/session-view.js.map +1 -0
  460. package/dist/sessions/statusline-setup.js +85 -0
  461. package/dist/sessions/statusline-setup.js.map +1 -0
  462. package/dist/sessions/types.js +8 -0
  463. package/dist/sessions/types.js.map +1 -0
  464. package/dist/signaldock/claude-code-transport.js +107 -0
  465. package/dist/signaldock/claude-code-transport.js.map +1 -0
  466. package/dist/signaldock/factory.js +25 -0
  467. package/dist/signaldock/factory.js.map +1 -0
  468. package/dist/signaldock/index.js +9 -0
  469. package/dist/signaldock/index.js.map +1 -0
  470. package/dist/signaldock/signaldock-transport.js +122 -0
  471. package/dist/signaldock/signaldock-transport.js.map +1 -0
  472. package/dist/signaldock/transport.js +11 -0
  473. package/dist/signaldock/transport.js.map +1 -0
  474. package/dist/signaldock/types.js +11 -0
  475. package/dist/signaldock/types.js.map +1 -0
  476. package/dist/skills/agents/config.js +94 -0
  477. package/dist/skills/agents/config.js.map +1 -0
  478. package/dist/skills/agents/install.js +116 -0
  479. package/dist/skills/agents/install.js.map +1 -0
  480. package/dist/skills/agents/registry.js +161 -0
  481. package/dist/skills/agents/registry.js.map +1 -0
  482. package/dist/skills/discovery.js +333 -0
  483. package/dist/skills/discovery.js.map +1 -0
  484. package/dist/skills/dispatch.js +347 -0
  485. package/dist/skills/dispatch.js.map +1 -0
  486. package/dist/skills/dynamic-skill-generator.js +100 -0
  487. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  488. package/dist/skills/index.js +44 -0
  489. package/dist/skills/index.js.map +1 -0
  490. package/dist/skills/injection/subagent.js +195 -0
  491. package/dist/skills/injection/subagent.js.map +1 -0
  492. package/dist/skills/injection/token.js +260 -0
  493. package/dist/skills/injection/token.js.map +1 -0
  494. package/dist/skills/install.js +40 -0
  495. package/dist/skills/install.js.map +1 -0
  496. package/dist/skills/manifests/contribution.js +175 -0
  497. package/dist/skills/manifests/contribution.js.map +1 -0
  498. package/dist/skills/manifests/research.js +281 -0
  499. package/dist/skills/manifests/research.js.map +1 -0
  500. package/dist/skills/manifests/resolver.js +146 -0
  501. package/dist/skills/manifests/resolver.js.map +1 -0
  502. package/dist/skills/marketplace.js +90 -0
  503. package/dist/skills/marketplace.js.map +1 -0
  504. package/dist/skills/orchestrator/spawn.js +178 -0
  505. package/dist/skills/orchestrator/spawn.js.map +1 -0
  506. package/dist/skills/orchestrator/startup.js +451 -0
  507. package/dist/skills/orchestrator/startup.js.map +1 -0
  508. package/dist/skills/orchestrator/validator.js +301 -0
  509. package/dist/skills/orchestrator/validator.js.map +1 -0
  510. package/dist/skills/precedence-integration.js +73 -0
  511. package/dist/skills/precedence-integration.js.map +1 -0
  512. package/dist/skills/precedence-types.js +16 -0
  513. package/dist/skills/precedence-types.js.map +1 -0
  514. package/dist/skills/routing-table.js +63 -0
  515. package/dist/skills/routing-table.js.map +1 -0
  516. package/dist/skills/skill-paths.js +220 -0
  517. package/dist/skills/skill-paths.js.map +1 -0
  518. package/dist/skills/test-utility.js +55 -0
  519. package/dist/skills/test-utility.js.map +1 -0
  520. package/dist/skills/types.js +118 -0
  521. package/dist/skills/types.js.map +1 -0
  522. package/dist/skills/validation.js +183 -0
  523. package/dist/skills/validation.js.map +1 -0
  524. package/dist/skills/version.js +57 -0
  525. package/dist/skills/version.js.map +1 -0
  526. package/dist/snapshot/index.js +188 -0
  527. package/dist/snapshot/index.js.map +1 -0
  528. package/dist/spawn/adapter-registry.js +246 -0
  529. package/dist/spawn/adapter-registry.js.map +1 -0
  530. package/dist/spawn/index.js +10 -0
  531. package/dist/spawn/index.js.map +1 -0
  532. package/dist/stats/index.d.ts +1 -0
  533. package/dist/stats/index.d.ts.map +1 -1
  534. package/dist/stats/index.js +339 -0
  535. package/dist/stats/index.js.map +1 -0
  536. package/dist/stats/workflow-telemetry.d.ts +74 -0
  537. package/dist/stats/workflow-telemetry.d.ts.map +1 -0
  538. package/dist/sticky/archive.js +47 -0
  539. package/dist/sticky/archive.js.map +1 -0
  540. package/dist/sticky/convert.js +235 -0
  541. package/dist/sticky/convert.js.map +1 -0
  542. package/dist/sticky/create.js +48 -0
  543. package/dist/sticky/create.js.map +1 -0
  544. package/dist/sticky/id.js +35 -0
  545. package/dist/sticky/id.js.map +1 -0
  546. package/dist/sticky/index.js +16 -0
  547. package/dist/sticky/index.js.map +1 -0
  548. package/dist/sticky/list.js +44 -0
  549. package/dist/sticky/list.js.map +1 -0
  550. package/dist/sticky/purge.js +45 -0
  551. package/dist/sticky/purge.js.map +1 -0
  552. package/dist/sticky/show.js +42 -0
  553. package/dist/sticky/show.js.map +1 -0
  554. package/dist/sticky/types.js +10 -0
  555. package/dist/sticky/types.js.map +1 -0
  556. package/dist/store/atomic.js +167 -0
  557. package/dist/store/atomic.js.map +1 -0
  558. package/dist/store/backup.js +94 -0
  559. package/dist/store/backup.js.map +1 -0
  560. package/dist/store/brain-accessor.js +397 -0
  561. package/dist/store/brain-accessor.js.map +1 -0
  562. package/dist/store/brain-schema.d.ts.map +1 -1
  563. package/dist/store/brain-schema.js +212 -0
  564. package/dist/store/brain-schema.js.map +1 -0
  565. package/dist/store/brain-sqlite.js +271 -0
  566. package/dist/store/brain-sqlite.js.map +1 -0
  567. package/dist/store/cache.js +168 -0
  568. package/dist/store/cache.js.map +1 -0
  569. package/dist/store/chain-schema.js +51 -0
  570. package/dist/store/chain-schema.js.map +1 -0
  571. package/dist/store/converters.d.ts.map +1 -1
  572. package/dist/store/converters.js +120 -0
  573. package/dist/store/converters.js.map +1 -0
  574. package/dist/store/cross-db-cleanup.d.ts +58 -0
  575. package/dist/store/cross-db-cleanup.d.ts.map +1 -0
  576. package/dist/store/data-accessor.js +26 -0
  577. package/dist/store/data-accessor.js.map +1 -0
  578. package/dist/store/data-safety-central.js +269 -0
  579. package/dist/store/data-safety-central.js.map +1 -0
  580. package/dist/store/data-safety.js +274 -0
  581. package/dist/store/data-safety.js.map +1 -0
  582. package/dist/store/db-helpers.d.ts.map +1 -1
  583. package/dist/store/db-helpers.js +221 -0
  584. package/dist/store/db-helpers.js.map +1 -0
  585. package/dist/store/export.js +155 -0
  586. package/dist/store/export.js.map +1 -0
  587. package/dist/store/file-utils.js +270 -0
  588. package/dist/store/file-utils.js.map +1 -0
  589. package/dist/store/git-checkpoint.js +365 -0
  590. package/dist/store/git-checkpoint.js.map +1 -0
  591. package/dist/store/import-logging.js +139 -0
  592. package/dist/store/import-logging.js.map +1 -0
  593. package/dist/store/import-remap.js +145 -0
  594. package/dist/store/import-remap.js.map +1 -0
  595. package/dist/store/import-sort.js +121 -0
  596. package/dist/store/import-sort.js.map +1 -0
  597. package/dist/store/index.js +28 -0
  598. package/dist/store/index.js.map +1 -0
  599. package/dist/store/json.js +208 -0
  600. package/dist/store/json.js.map +1 -0
  601. package/dist/store/lifecycle-store.js +249 -0
  602. package/dist/store/lifecycle-store.js.map +1 -0
  603. package/dist/store/lock.js +70 -0
  604. package/dist/store/lock.js.map +1 -0
  605. package/dist/store/migration-sqlite.d.ts.map +1 -1
  606. package/dist/store/migration-sqlite.js +671 -0
  607. package/dist/store/migration-sqlite.js.map +1 -0
  608. package/dist/store/nexus-schema.js +62 -0
  609. package/dist/store/nexus-schema.js.map +1 -0
  610. package/dist/store/nexus-sqlite.js +217 -0
  611. package/dist/store/nexus-sqlite.js.map +1 -0
  612. package/dist/store/nexus-validation-schemas.js +40 -0
  613. package/dist/store/nexus-validation-schemas.js.map +1 -0
  614. package/dist/store/parsers.js +37 -0
  615. package/dist/store/parsers.js.map +1 -0
  616. package/dist/store/project-detect.js +457 -0
  617. package/dist/store/project-detect.js.map +1 -0
  618. package/dist/store/provider.js +101 -0
  619. package/dist/store/provider.js.map +1 -0
  620. package/dist/store/safety-data-accessor.js +243 -0
  621. package/dist/store/safety-data-accessor.js.map +1 -0
  622. package/dist/store/schema.js +7 -0
  623. package/dist/store/schema.js.map +1 -0
  624. package/dist/store/session-store.js +219 -0
  625. package/dist/store/session-store.js.map +1 -0
  626. package/dist/store/sqlite-backup.js +105 -0
  627. package/dist/store/sqlite-backup.js.map +1 -0
  628. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  629. package/dist/store/sqlite-data-accessor.js +742 -0
  630. package/dist/store/sqlite-data-accessor.js.map +1 -0
  631. package/dist/store/sqlite.d.ts.map +1 -1
  632. package/dist/store/sqlite.js +489 -0
  633. package/dist/store/sqlite.js.map +1 -0
  634. package/dist/store/status-registry.js +8 -0
  635. package/dist/store/status-registry.js.map +1 -0
  636. package/dist/store/task-store.d.ts.map +1 -1
  637. package/dist/store/task-store.js +344 -0
  638. package/dist/store/task-store.js.map +1 -0
  639. package/dist/store/tasks-schema.d.ts +18 -3
  640. package/dist/store/tasks-schema.d.ts.map +1 -1
  641. package/dist/store/tasks-schema.js +574 -0
  642. package/dist/store/tasks-schema.js.map +1 -0
  643. package/dist/store/typed-query.js +15 -0
  644. package/dist/store/typed-query.js.map +1 -0
  645. package/dist/store/validation-schemas.d.ts +32 -0
  646. package/dist/store/validation-schemas.d.ts.map +1 -1
  647. package/dist/store/validation-schemas.js +278 -0
  648. package/dist/store/validation-schemas.js.map +1 -0
  649. package/dist/system/archive-analytics.js +277 -0
  650. package/dist/system/archive-analytics.js.map +1 -0
  651. package/dist/system/archive-stats.js +64 -0
  652. package/dist/system/archive-stats.js.map +1 -0
  653. package/dist/system/audit.js +145 -0
  654. package/dist/system/audit.js.map +1 -0
  655. package/dist/system/backup.js +99 -0
  656. package/dist/system/backup.js.map +1 -0
  657. package/dist/system/cleanup.js +134 -0
  658. package/dist/system/cleanup.js.map +1 -0
  659. package/dist/system/health.js +1054 -0
  660. package/dist/system/health.js.map +1 -0
  661. package/dist/system/index.js +18 -0
  662. package/dist/system/index.js.map +1 -0
  663. package/dist/system/inject-generate.js +122 -0
  664. package/dist/system/inject-generate.js.map +1 -0
  665. package/dist/system/labels.js +38 -0
  666. package/dist/system/labels.js.map +1 -0
  667. package/dist/system/metrics.js +61 -0
  668. package/dist/system/metrics.js.map +1 -0
  669. package/dist/system/migrate.js +43 -0
  670. package/dist/system/migrate.js.map +1 -0
  671. package/dist/system/platform-paths.js +80 -0
  672. package/dist/system/platform-paths.js.map +1 -0
  673. package/dist/system/runtime.js +161 -0
  674. package/dist/system/runtime.js.map +1 -0
  675. package/dist/system/safestop.js +99 -0
  676. package/dist/system/safestop.js.map +1 -0
  677. package/dist/system/storage-preflight.js +123 -0
  678. package/dist/system/storage-preflight.js.map +1 -0
  679. package/dist/task-work/index.js +155 -0
  680. package/dist/task-work/index.js.map +1 -0
  681. package/dist/tasks/add.d.ts +10 -1
  682. package/dist/tasks/add.d.ts.map +1 -1
  683. package/dist/tasks/add.js +510 -0
  684. package/dist/tasks/add.js.map +1 -0
  685. package/dist/tasks/analyze.js +85 -0
  686. package/dist/tasks/analyze.js.map +1 -0
  687. package/dist/tasks/archive.js +90 -0
  688. package/dist/tasks/archive.js.map +1 -0
  689. package/dist/tasks/atomicity.js +83 -0
  690. package/dist/tasks/atomicity.js.map +1 -0
  691. package/dist/tasks/cancel-ops.js +83 -0
  692. package/dist/tasks/cancel-ops.js.map +1 -0
  693. package/dist/tasks/complete.d.ts.map +1 -1
  694. package/dist/tasks/complete.js +224 -0
  695. package/dist/tasks/complete.js.map +1 -0
  696. package/dist/tasks/crossref-extract.js +73 -0
  697. package/dist/tasks/crossref-extract.js.map +1 -0
  698. package/dist/tasks/delete-preview.js +192 -0
  699. package/dist/tasks/delete-preview.js.map +1 -0
  700. package/dist/tasks/delete.js +120 -0
  701. package/dist/tasks/delete.js.map +1 -0
  702. package/dist/tasks/deletion-strategy.js +200 -0
  703. package/dist/tasks/deletion-strategy.js.map +1 -0
  704. package/dist/tasks/dependency-check.js +278 -0
  705. package/dist/tasks/dependency-check.js.map +1 -0
  706. package/dist/tasks/deps-ready.js +32 -0
  707. package/dist/tasks/deps-ready.js.map +1 -0
  708. package/dist/tasks/enforcement.d.ts +22 -0
  709. package/dist/tasks/enforcement.d.ts.map +1 -0
  710. package/dist/tasks/enforcement.js +82 -0
  711. package/dist/tasks/enforcement.js.map +1 -0
  712. package/dist/tasks/epic-enforcement.d.ts +138 -0
  713. package/dist/tasks/epic-enforcement.d.ts.map +1 -0
  714. package/dist/tasks/find.js +148 -0
  715. package/dist/tasks/find.js.map +1 -0
  716. package/dist/tasks/graph-cache.js +127 -0
  717. package/dist/tasks/graph-cache.js.map +1 -0
  718. package/dist/tasks/graph-ops.js +171 -0
  719. package/dist/tasks/graph-ops.js.map +1 -0
  720. package/dist/tasks/graph-rag.js +328 -0
  721. package/dist/tasks/graph-rag.js.map +1 -0
  722. package/dist/tasks/hierarchy-policy.js +149 -0
  723. package/dist/tasks/hierarchy-policy.js.map +1 -0
  724. package/dist/tasks/hierarchy.js +185 -0
  725. package/dist/tasks/hierarchy.js.map +1 -0
  726. package/dist/tasks/id-generator.js +65 -0
  727. package/dist/tasks/id-generator.js.map +1 -0
  728. package/dist/tasks/index.d.ts +1 -1
  729. package/dist/tasks/index.d.ts.map +1 -1
  730. package/dist/tasks/index.js +14 -0
  731. package/dist/tasks/index.js.map +1 -0
  732. package/dist/tasks/labels.js +52 -0
  733. package/dist/tasks/labels.js.map +1 -0
  734. package/dist/tasks/list.js +68 -0
  735. package/dist/tasks/list.js.map +1 -0
  736. package/dist/tasks/phase-tracking.js +133 -0
  737. package/dist/tasks/phase-tracking.js.map +1 -0
  738. package/dist/tasks/pipeline-stage.d.ts +112 -0
  739. package/dist/tasks/pipeline-stage.d.ts.map +1 -0
  740. package/dist/tasks/plan.js +268 -0
  741. package/dist/tasks/plan.js.map +1 -0
  742. package/dist/tasks/relates.js +89 -0
  743. package/dist/tasks/relates.js.map +1 -0
  744. package/dist/tasks/reparent.d.ts +38 -0
  745. package/dist/tasks/reparent.d.ts.map +1 -0
  746. package/dist/tasks/show.js +78 -0
  747. package/dist/tasks/show.js.map +1 -0
  748. package/dist/tasks/size-weighting.js +86 -0
  749. package/dist/tasks/size-weighting.js.map +1 -0
  750. package/dist/tasks/staleness.js +86 -0
  751. package/dist/tasks/staleness.js.map +1 -0
  752. package/dist/tasks/task-ops.js +1340 -0
  753. package/dist/tasks/task-ops.js.map +1 -0
  754. package/dist/tasks/update.d.ts +2 -0
  755. package/dist/tasks/update.d.ts.map +1 -1
  756. package/dist/tasks/update.js +243 -0
  757. package/dist/tasks/update.js.map +1 -0
  758. package/dist/templates/index.js +10 -0
  759. package/dist/templates/index.js.map +1 -0
  760. package/dist/templates/parser.js +254 -0
  761. package/dist/templates/parser.js.map +1 -0
  762. package/dist/ui/aliases.js +153 -0
  763. package/dist/ui/aliases.js.map +1 -0
  764. package/dist/ui/changelog.js +184 -0
  765. package/dist/ui/changelog.js.map +1 -0
  766. package/dist/ui/command-registry.js +168 -0
  767. package/dist/ui/command-registry.js.map +1 -0
  768. package/dist/ui/flags.js +94 -0
  769. package/dist/ui/flags.js.map +1 -0
  770. package/dist/ui/index.js +24 -0
  771. package/dist/ui/index.js.map +1 -0
  772. package/dist/ui/injection-legacy.d.ts +26 -0
  773. package/dist/ui/injection-legacy.d.ts.map +1 -0
  774. package/dist/ui/injection-legacy.js +42 -0
  775. package/dist/ui/injection-legacy.js.map +1 -0
  776. package/dist/upgrade.js +901 -0
  777. package/dist/upgrade.js.map +1 -0
  778. package/dist/validation/chain-validation.js +146 -0
  779. package/dist/validation/chain-validation.js.map +1 -0
  780. package/dist/validation/compliance.js +155 -0
  781. package/dist/validation/compliance.js.map +1 -0
  782. package/dist/validation/docs-sync.js +212 -0
  783. package/dist/validation/docs-sync.js.map +1 -0
  784. package/dist/validation/doctor/checks.js +1069 -0
  785. package/dist/validation/doctor/checks.js.map +1 -0
  786. package/dist/validation/doctor/index.js +9 -0
  787. package/dist/validation/doctor/index.js.map +1 -0
  788. package/dist/validation/doctor/project-cache.js +160 -0
  789. package/dist/validation/doctor/project-cache.js.map +1 -0
  790. package/dist/validation/doctor/utils.js +155 -0
  791. package/dist/validation/doctor/utils.js.map +1 -0
  792. package/dist/validation/engine.js +902 -0
  793. package/dist/validation/engine.js.map +1 -0
  794. package/dist/validation/gap-check.js +175 -0
  795. package/dist/validation/gap-check.js.map +1 -0
  796. package/dist/validation/index.js +40 -0
  797. package/dist/validation/index.js.map +1 -0
  798. package/dist/validation/manifest.js +237 -0
  799. package/dist/validation/manifest.js.map +1 -0
  800. package/dist/validation/operation-gate-validators.js +724 -0
  801. package/dist/validation/operation-gate-validators.js.map +1 -0
  802. package/dist/validation/operation-verification-gates.js +532 -0
  803. package/dist/validation/operation-verification-gates.js.map +1 -0
  804. package/dist/validation/param-utils.js +139 -0
  805. package/dist/validation/param-utils.js.map +1 -0
  806. package/dist/validation/protocol-common.js +300 -0
  807. package/dist/validation/protocol-common.js.map +1 -0
  808. package/dist/validation/protocols/consensus.js +71 -0
  809. package/dist/validation/protocols/consensus.js.map +1 -0
  810. package/dist/validation/protocols/contribution.js +59 -0
  811. package/dist/validation/protocols/contribution.js.map +1 -0
  812. package/dist/validation/protocols/decomposition.js +59 -0
  813. package/dist/validation/protocols/decomposition.js.map +1 -0
  814. package/dist/validation/protocols/implementation.js +59 -0
  815. package/dist/validation/protocols/implementation.js.map +1 -0
  816. package/dist/validation/protocols/release-protocol.js +60 -0
  817. package/dist/validation/protocols/release-protocol.js.map +1 -0
  818. package/dist/validation/protocols/research.js +77 -0
  819. package/dist/validation/protocols/research.js.map +1 -0
  820. package/dist/validation/protocols/specification.js +84 -0
  821. package/dist/validation/protocols/specification.js.map +1 -0
  822. package/dist/validation/protocols/testing-protocol.js +70 -0
  823. package/dist/validation/protocols/testing-protocol.js.map +1 -0
  824. package/dist/validation/protocols/validation-protocol.js +70 -0
  825. package/dist/validation/protocols/validation-protocol.js.map +1 -0
  826. package/dist/validation/schema-integrity.js +170 -0
  827. package/dist/validation/schema-integrity.js.map +1 -0
  828. package/dist/validation/schema-validator.js +176 -0
  829. package/dist/validation/schema-validator.js.map +1 -0
  830. package/dist/validation/validate-ops.js +937 -0
  831. package/dist/validation/validate-ops.js.map +1 -0
  832. package/dist/validation/validation-rules.js +226 -0
  833. package/dist/validation/validation-rules.js.map +1 -0
  834. package/dist/validation/verification.js +321 -0
  835. package/dist/validation/verification.js.map +1 -0
  836. package/migrations/drizzle-brain/20260321000001_t033-brain-indexes/migration.sql +12 -0
  837. package/migrations/drizzle-brain/20260321000001_t033-brain-indexes/snapshot.json +1232 -0
  838. package/migrations/drizzle-tasks/20260321000000_t033-connection-health/migration.sql +518 -0
  839. package/migrations/drizzle-tasks/20260321000000_t033-connection-health/snapshot.json +4312 -0
  840. package/migrations/drizzle-tasks/20260321000002_t060-pipeline-stage-binding/migration.sql +82 -0
  841. package/migrations/drizzle-tasks/20260321000002_t060-pipeline-stage-binding/snapshot.json +9 -0
  842. package/package.json +5 -5
  843. package/schemas/config.schema.json +47 -2
  844. package/src/__tests__/injection-mvi-tiers.test.ts +5 -5
  845. package/src/agents/__tests__/execution-learning.test.ts +684 -0
  846. package/src/agents/__tests__/registry.test.ts +30 -2
  847. package/src/agents/agent-schema.ts +5 -0
  848. package/src/agents/execution-learning.ts +675 -0
  849. package/src/agents/index.ts +13 -0
  850. package/src/backfill/index.ts +282 -0
  851. package/src/bootstrap.ts +1 -1
  852. package/src/config.ts +126 -0
  853. package/src/index.ts +7 -1
  854. package/src/intelligence/__tests__/adaptive-validation.test.ts +694 -0
  855. package/src/intelligence/adaptive-validation.ts +764 -0
  856. package/src/intelligence/index.ts +16 -0
  857. package/src/internal.ts +19 -0
  858. package/src/lifecycle/__tests__/chain-store.test.ts +7 -0
  859. package/src/lifecycle/__tests__/tessera-engine.test.ts +52 -0
  860. package/src/sessions/__tests__/session-edge-cases.test.ts +24 -1
  861. package/src/sessions/session-enforcement.ts +13 -2
  862. package/src/stats/index.ts +7 -0
  863. package/src/stats/workflow-telemetry.ts +487 -0
  864. package/src/store/__tests__/migration-safety.test.ts +3 -0
  865. package/src/store/__tests__/session-store.test.ts +96 -1
  866. package/src/store/__tests__/task-store.test.ts +22 -1
  867. package/src/store/__tests__/test-db-helper.ts +25 -2
  868. package/src/store/brain-schema.ts +4 -1
  869. package/src/store/converters.ts +2 -0
  870. package/src/store/cross-db-cleanup.ts +157 -0
  871. package/src/store/db-helpers.ts +2 -0
  872. package/src/store/migration-sqlite.ts +6 -0
  873. package/src/store/sqlite-data-accessor.ts +20 -28
  874. package/src/store/sqlite.ts +14 -2
  875. package/src/store/task-store.ts +6 -0
  876. package/src/store/tasks-schema.ts +59 -20
  877. package/src/tasks/__tests__/add.test.ts +16 -0
  878. package/src/tasks/__tests__/complete-unblocks.test.ts +10 -1
  879. package/src/tasks/__tests__/complete.test.ts +11 -2
  880. package/src/tasks/__tests__/epic-enforcement.test.ts +904 -0
  881. package/src/tasks/__tests__/minimal-test.test.ts +28 -0
  882. package/src/tasks/__tests__/pipeline-stage.test.ts +403 -0
  883. package/src/tasks/__tests__/update.test.ts +40 -6
  884. package/src/tasks/add.ts +128 -2
  885. package/src/tasks/complete.ts +24 -17
  886. package/src/tasks/enforcement.ts +124 -0
  887. package/src/tasks/epic-enforcement.ts +303 -0
  888. package/src/tasks/index.ts +1 -0
  889. package/src/tasks/pipeline-stage.ts +224 -0
  890. package/src/tasks/update.ts +62 -0
  891. package/templates/CLEO-INJECTION.md +1 -1
  892. package/templates/config.template.json +34 -0
  893. package/templates/global-config.template.json +26 -0
@@ -0,0 +1,675 @@
1
+ /**
2
+ * Agent Execution Learning — Agent dimension BRAIN integration.
3
+ *
4
+ * Tracks which agent types succeed or fail on which task types, logs agent
5
+ * decisions to brain_decisions with structured context, provides queries to
6
+ * retrieve agent performance history, and implements basic self-healing by
7
+ * recording failure patterns as brain_observations and surfacing healing
8
+ * suggestions when the same failure pattern recurs.
9
+ *
10
+ * This module bridges the agent registry (tasks.db) with the cognitive
11
+ * memory layer (brain.db) without introducing circular dependencies:
12
+ * - Tasks.db agent tables: agent_instances, agent_error_log (agent-schema.ts)
13
+ * - Brain.db tables: brain_decisions, brain_patterns, brain_observations
14
+ *
15
+ * All brain.db writes are best-effort — failures are silently swallowed so
16
+ * agent lifecycle events never fail due to a brain.db write error.
17
+ *
18
+ * @module agents/execution-learning
19
+ * @task T034
20
+ * @epic T029
21
+ */
22
+
23
+ import { randomBytes } from 'node:crypto';
24
+ import type { BrainDataAccessor } from '../store/brain-accessor.js';
25
+ import { getBrainAccessor } from '../store/brain-accessor.js';
26
+ import type {
27
+ BrainDecisionRow,
28
+ BrainObservationRow,
29
+ BrainPatternRow,
30
+ } from '../store/brain-schema.js';
31
+ import type { AgentType } from './agent-schema.js';
32
+
33
+ // ============================================================================
34
+ // Types
35
+ // ============================================================================
36
+
37
+ /**
38
+ * The outcome of an agent's execution attempt on a task.
39
+ */
40
+ export type AgentExecutionOutcome = 'success' | 'failure' | 'partial';
41
+
42
+ /**
43
+ * Context recorded when an agent completes or fails a task.
44
+ */
45
+ export interface AgentExecutionEvent {
46
+ /** Agent instance ID (agt_...). */
47
+ agentId: string;
48
+ /** Agent type classification. */
49
+ agentType: AgentType;
50
+ /** Task ID that was attempted. */
51
+ taskId: string;
52
+ /** Task type: 'epic' | 'task' | 'subtask'. */
53
+ taskType: string;
54
+ /** Task labels for richer pattern classification. */
55
+ taskLabels?: string[];
56
+ /** Execution outcome. */
57
+ outcome: AgentExecutionOutcome;
58
+ /** Error message if outcome is 'failure'. */
59
+ errorMessage?: string;
60
+ /** Error classification if outcome is 'failure'. */
61
+ errorType?: 'retriable' | 'permanent' | 'unknown';
62
+ /** Session ID the agent was running under. */
63
+ sessionId?: string;
64
+ /** Duration of execution in milliseconds (optional). */
65
+ durationMs?: number;
66
+ }
67
+
68
+ /**
69
+ * Summary of an agent type's execution performance on a task type.
70
+ */
71
+ export interface AgentPerformanceSummary {
72
+ /** Agent type. */
73
+ agentType: AgentType;
74
+ /** Task type this summary is for. */
75
+ taskType: string;
76
+ /** Total execution attempts tracked. */
77
+ totalAttempts: number;
78
+ /** Number of successful attempts. */
79
+ successCount: number;
80
+ /** Number of failed attempts. */
81
+ failureCount: number;
82
+ /** Success rate [0.0 – 1.0]. */
83
+ successRate: number;
84
+ /** Most recent attempt outcome. */
85
+ lastOutcome: AgentExecutionOutcome | null;
86
+ /** Timestamp of the most recent tracked decision. */
87
+ lastSeenAt: string | null;
88
+ }
89
+
90
+ /**
91
+ * A self-healing suggestion derived from failure pattern history.
92
+ */
93
+ export interface HealingSuggestion {
94
+ /** Pattern ID from brain_patterns. */
95
+ patternId: string;
96
+ /** Human-readable description of the failure pattern. */
97
+ failurePattern: string;
98
+ /** Times this pattern has been seen. */
99
+ frequency: number;
100
+ /** Mitigation / suggested next action. */
101
+ suggestion: string;
102
+ /** How confident the system is in this suggestion [0.0 – 1.0]. */
103
+ confidence: number;
104
+ }
105
+
106
+ // ============================================================================
107
+ // ID generation helpers
108
+ // ============================================================================
109
+
110
+ /** Generate a unique brain_decisions ID with `AGT-` prefix. */
111
+ function generateDecisionId(): string {
112
+ return `AGT-${randomBytes(5).toString('hex')}`;
113
+ }
114
+
115
+ /** Generate a unique brain_patterns ID with `P-agt-` prefix. */
116
+ function generatePatternId(): string {
117
+ return `P-agt-${randomBytes(4).toString('hex')}`;
118
+ }
119
+
120
+ /** Generate a unique brain_observations ID with `O-agt-` prefix. */
121
+ function generateObservationId(): string {
122
+ return `O-agt-${randomBytes(4).toString('hex')}`;
123
+ }
124
+
125
+ /** Normalised ISO timestamp in SQLite-friendly format (space separator). */
126
+ function nowSql(): string {
127
+ return new Date().toISOString().replace('T', ' ').slice(0, 19);
128
+ }
129
+
130
+ // ============================================================================
131
+ // Execution event logging
132
+ // ============================================================================
133
+
134
+ /**
135
+ * Record an agent execution event to brain_decisions.
136
+ *
137
+ * Each event becomes a `tactical` decision entry describing which agent type
138
+ * handled which task type and whether it succeeded. This gives the BRAIN
139
+ * system a queryable history of agent-task execution for pattern extraction.
140
+ *
141
+ * The call is best-effort — if brain.db is unavailable the error is swallowed
142
+ * and null is returned so agent lifecycle code is never disrupted.
143
+ *
144
+ * @param event - Execution event to record
145
+ * @param cwd - Working directory (resolves brain.db path)
146
+ * @returns The stored decision row, or null on failure
147
+ */
148
+ export async function recordAgentExecution(
149
+ event: AgentExecutionEvent,
150
+ cwd?: string,
151
+ ): Promise<BrainDecisionRow | null> {
152
+ try {
153
+ const brain = await getBrainAccessor(cwd);
154
+ return await _recordAgentExecutionWithAccessor(event, brain);
155
+ } catch {
156
+ // Best-effort — never propagate brain.db write failures to callers
157
+ return null;
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Internal implementation that accepts a pre-constructed accessor.
163
+ * Separated for testability without touching the real file system.
164
+ *
165
+ * @internal
166
+ */
167
+ export async function _recordAgentExecutionWithAccessor(
168
+ event: AgentExecutionEvent,
169
+ brain: BrainDataAccessor,
170
+ ): Promise<BrainDecisionRow | null> {
171
+ const id = generateDecisionId();
172
+ const outcomeMap: Record<AgentExecutionOutcome, 'success' | 'failure' | 'mixed' | 'pending'> = {
173
+ success: 'success',
174
+ failure: 'failure',
175
+ partial: 'mixed',
176
+ };
177
+
178
+ const decisionText = `Agent type "${event.agentType}" ${event.outcome === 'success' ? 'successfully completed' : `failed (${event.errorType ?? 'unknown'}) on`} task ${event.taskId} (type: ${event.taskType})`;
179
+
180
+ const rationale = [
181
+ `Agent: ${event.agentId}`,
182
+ `Task type: ${event.taskType}`,
183
+ `Outcome: ${event.outcome}`,
184
+ event.taskLabels?.length ? `Labels: ${event.taskLabels.join(', ')}` : null,
185
+ event.errorMessage ? `Error: ${event.errorMessage}` : null,
186
+ event.durationMs != null ? `Duration: ${event.durationMs}ms` : null,
187
+ ]
188
+ .filter(Boolean)
189
+ .join(' | ');
190
+
191
+ const alternativesJson = JSON.stringify({
192
+ agentId: event.agentId,
193
+ agentType: event.agentType,
194
+ taskType: event.taskType,
195
+ taskLabels: event.taskLabels ?? [],
196
+ errorType: event.errorType ?? null,
197
+ durationMs: event.durationMs ?? null,
198
+ sessionId: event.sessionId ?? null,
199
+ });
200
+
201
+ const row = await brain.addDecision({
202
+ id,
203
+ type: 'tactical',
204
+ decision: decisionText,
205
+ rationale,
206
+ confidence:
207
+ event.outcome === 'success' ? 'high' : event.outcome === 'partial' ? 'medium' : 'low',
208
+ outcome: outcomeMap[event.outcome],
209
+ alternativesJson,
210
+ contextTaskId: event.taskId,
211
+ contextEpicId: null,
212
+ contextPhase: null,
213
+ createdAt: nowSql(),
214
+ updatedAt: null,
215
+ });
216
+
217
+ return row;
218
+ }
219
+
220
+ // ============================================================================
221
+ // Performance queries
222
+ // ============================================================================
223
+
224
+ /**
225
+ * Retrieve agent execution performance history from brain_decisions.
226
+ *
227
+ * Queries all `tactical` decisions recorded by `recordAgentExecution` and
228
+ * aggregates them into per-(agentType, taskType) performance summaries.
229
+ *
230
+ * @param filters - Optional filters to narrow results
231
+ * @param cwd - Working directory
232
+ * @returns Array of performance summaries sorted by agentType then taskType
233
+ */
234
+ export async function getAgentPerformanceHistory(
235
+ filters: {
236
+ agentType?: AgentType;
237
+ taskType?: string;
238
+ limit?: number;
239
+ } = {},
240
+ cwd?: string,
241
+ ): Promise<AgentPerformanceSummary[]> {
242
+ try {
243
+ const brain = await getBrainAccessor(cwd);
244
+ return await _getAgentPerformanceHistoryWithAccessor(filters, brain);
245
+ } catch {
246
+ return [];
247
+ }
248
+ }
249
+
250
+ /**
251
+ * Internal implementation with injected accessor for testability.
252
+ *
253
+ * @internal
254
+ */
255
+ export async function _getAgentPerformanceHistoryWithAccessor(
256
+ filters: {
257
+ agentType?: AgentType;
258
+ taskType?: string;
259
+ limit?: number;
260
+ },
261
+ brain: BrainDataAccessor,
262
+ ): Promise<AgentPerformanceSummary[]> {
263
+ const decisions = await brain.findDecisions({
264
+ type: 'tactical',
265
+ limit: filters.limit ?? 500,
266
+ });
267
+
268
+ // Only process rows that were written by recordAgentExecution
269
+ const agentDecisions = decisions.filter((d) => d.id.startsWith('AGT-'));
270
+
271
+ // Aggregate per (agentType, taskType)
272
+ const buckets = new Map<
273
+ string,
274
+ {
275
+ agentType: AgentType;
276
+ taskType: string;
277
+ successes: number;
278
+ failures: number;
279
+ total: number;
280
+ lastOutcome: AgentExecutionOutcome | null;
281
+ lastSeenAt: string | null;
282
+ }
283
+ >();
284
+
285
+ for (const d of agentDecisions) {
286
+ let meta: { agentType?: string; taskType?: string } = {};
287
+ try {
288
+ meta = d.alternativesJson ? (JSON.parse(d.alternativesJson) as typeof meta) : {};
289
+ } catch {
290
+ continue;
291
+ }
292
+
293
+ const agentType = meta.agentType as AgentType | undefined;
294
+ const taskType = meta.taskType as string | undefined;
295
+
296
+ if (!agentType || !taskType) continue;
297
+
298
+ // Apply optional filters
299
+ if (filters.agentType && agentType !== filters.agentType) continue;
300
+ if (filters.taskType && taskType !== filters.taskType) continue;
301
+
302
+ const key = `${agentType}::${taskType}`;
303
+ const existing = buckets.get(key) ?? {
304
+ agentType,
305
+ taskType,
306
+ successes: 0,
307
+ failures: 0,
308
+ total: 0,
309
+ lastOutcome: null,
310
+ lastSeenAt: null,
311
+ };
312
+
313
+ existing.total += 1;
314
+
315
+ const outcome = d.outcome;
316
+ if (outcome === 'success') {
317
+ existing.successes += 1;
318
+ existing.lastOutcome = 'success';
319
+ } else if (outcome === 'failure') {
320
+ existing.failures += 1;
321
+ existing.lastOutcome = 'failure';
322
+ } else if (outcome === 'mixed') {
323
+ existing.lastOutcome = 'partial';
324
+ }
325
+
326
+ // Track most-recent timestamp
327
+ if (!existing.lastSeenAt || (d.createdAt && d.createdAt > existing.lastSeenAt)) {
328
+ existing.lastSeenAt = d.createdAt;
329
+ }
330
+
331
+ buckets.set(key, existing);
332
+ }
333
+
334
+ return Array.from(buckets.values())
335
+ .map((b) => ({
336
+ agentType: b.agentType,
337
+ taskType: b.taskType,
338
+ totalAttempts: b.total,
339
+ successCount: b.successes,
340
+ failureCount: b.failures,
341
+ successRate: b.total > 0 ? Math.round((b.successes / b.total) * 1000) / 1000 : 0,
342
+ lastOutcome: b.lastOutcome,
343
+ lastSeenAt: b.lastSeenAt,
344
+ }))
345
+ .sort((a, b) => a.agentType.localeCompare(b.agentType) || a.taskType.localeCompare(b.taskType));
346
+ }
347
+
348
+ // ============================================================================
349
+ // Failure pattern recording
350
+ // ============================================================================
351
+
352
+ /**
353
+ * Record a task failure pattern to brain_patterns.
354
+ *
355
+ * When a task fails, the (agentType, taskType, errorType) combination is
356
+ * stored as a `failure` pattern in brain.db. On subsequent failures matching
357
+ * the same combination, the frequency counter is incremented and the success
358
+ * rate updated. This data is what powers `getSelfHealingSuggestions`.
359
+ *
360
+ * The call is best-effort and never throws.
361
+ *
362
+ * @param event - A failure execution event (outcome must be 'failure')
363
+ * @param cwd - Working directory
364
+ * @returns The upserted pattern row, or null on error
365
+ */
366
+ export async function recordFailurePattern(
367
+ event: AgentExecutionEvent,
368
+ cwd?: string,
369
+ ): Promise<BrainPatternRow | null> {
370
+ if (event.outcome !== 'failure') return null;
371
+
372
+ try {
373
+ const brain = await getBrainAccessor(cwd);
374
+ return await _recordFailurePatternWithAccessor(event, brain);
375
+ } catch {
376
+ return null;
377
+ }
378
+ }
379
+
380
+ /**
381
+ * Internal implementation with injected accessor.
382
+ *
383
+ * @internal
384
+ */
385
+ export async function _recordFailurePatternWithAccessor(
386
+ event: AgentExecutionEvent,
387
+ brain: BrainDataAccessor,
388
+ ): Promise<BrainPatternRow | null> {
389
+ const errorType = event.errorType ?? 'unknown';
390
+ const patternText = `Agent type "${event.agentType}" fails on task type "${event.taskType}" with ${errorType} error`;
391
+ const contextText = `Failure pattern detected: ${event.agentType} agent encountering ${errorType} errors on ${event.taskType} tasks`;
392
+
393
+ // Look for an existing matching pattern (search by prefix naming convention)
394
+ const existing = await brain.findPatterns({ type: 'failure', limit: 200 });
395
+ const match = existing.find((p) => p.pattern === patternText);
396
+
397
+ if (match) {
398
+ // Update frequency counter and keep success_rate at 0 (all failures)
399
+ const newFrequency = match.frequency + 1;
400
+ const suggestion = buildHealingSuggestion(
401
+ event.agentType,
402
+ event.taskType,
403
+ errorType,
404
+ newFrequency,
405
+ );
406
+
407
+ await brain.updatePattern(match.id, {
408
+ frequency: newFrequency,
409
+ successRate: 0,
410
+ mitigation: suggestion,
411
+ });
412
+
413
+ return {
414
+ ...match,
415
+ frequency: newFrequency,
416
+ successRate: 0,
417
+ mitigation: suggestion,
418
+ };
419
+ }
420
+
421
+ // Create new failure pattern
422
+ const id = generatePatternId();
423
+ const now = nowSql();
424
+ const suggestion = buildHealingSuggestion(event.agentType, event.taskType, errorType, 1);
425
+
426
+ return brain.addPattern({
427
+ id,
428
+ type: 'failure',
429
+ pattern: patternText,
430
+ context: contextText,
431
+ frequency: 1,
432
+ successRate: 0,
433
+ impact: 'medium',
434
+ antiPattern: `${event.agentType} assigned to ${event.taskType} task with ${errorType} error risk`,
435
+ mitigation: suggestion,
436
+ examplesJson: JSON.stringify([event.taskId]),
437
+ extractedAt: now,
438
+ updatedAt: null,
439
+ });
440
+ }
441
+
442
+ // ============================================================================
443
+ // Self-healing: observation storage
444
+ // ============================================================================
445
+
446
+ /**
447
+ * Store a healing strategy observation to brain_observations.
448
+ *
449
+ * When a failure pattern reaches a significant frequency threshold (≥ 3),
450
+ * a `change` observation is recorded to represent the healing action
451
+ * recommended for future recurrences of the same pattern.
452
+ *
453
+ * The call is best-effort and never throws.
454
+ *
455
+ * @param event - The failure event that triggered healing
456
+ * @param strategy - Human-readable healing strategy description
457
+ * @param cwd - Working directory
458
+ * @returns The stored observation row, or null on error
459
+ */
460
+ export async function storeHealingStrategy(
461
+ event: AgentExecutionEvent,
462
+ strategy: string,
463
+ cwd?: string,
464
+ ): Promise<BrainObservationRow | null> {
465
+ if (event.outcome !== 'failure') return null;
466
+
467
+ try {
468
+ const brain = await getBrainAccessor(cwd);
469
+ return await _storeHealingStrategyWithAccessor(event, strategy, brain);
470
+ } catch {
471
+ return null;
472
+ }
473
+ }
474
+
475
+ /**
476
+ * Internal implementation with injected accessor.
477
+ *
478
+ * @internal
479
+ */
480
+ export async function _storeHealingStrategyWithAccessor(
481
+ event: AgentExecutionEvent,
482
+ strategy: string,
483
+ brain: BrainDataAccessor,
484
+ ): Promise<BrainObservationRow | null> {
485
+ const id = generateObservationId();
486
+ const now = nowSql();
487
+
488
+ return brain.addObservation({
489
+ id,
490
+ type: 'change',
491
+ title: `Healing strategy: ${event.agentType} on ${event.taskType}`,
492
+ subtitle: `Error type: ${event.errorType ?? 'unknown'}`,
493
+ narrative: strategy,
494
+ factsJson: JSON.stringify([
495
+ `Agent: ${event.agentType}`,
496
+ `Task type: ${event.taskType}`,
497
+ `Error: ${event.errorMessage ?? 'unspecified'}`,
498
+ `Suggested action: ${strategy}`,
499
+ ]),
500
+ conceptsJson: JSON.stringify([
501
+ 'self-healing',
502
+ 'agent-execution',
503
+ event.agentType,
504
+ event.taskType,
505
+ ]),
506
+ project: null,
507
+ filesReadJson: null,
508
+ filesModifiedJson: null,
509
+ sourceSessionId: event.sessionId ?? null,
510
+ sourceType: 'agent',
511
+ contentHash: null,
512
+ discoveryTokens: null,
513
+ createdAt: now,
514
+ updatedAt: null,
515
+ });
516
+ }
517
+
518
+ // ============================================================================
519
+ // Self-healing: suggestion retrieval
520
+ // ============================================================================
521
+
522
+ /**
523
+ * Get self-healing suggestions for a given agent type and task type.
524
+ *
525
+ * Queries brain_patterns for known failure patterns matching the
526
+ * (agentType, taskType) combination and returns healing suggestions
527
+ * ordered by frequency (most-seen first).
528
+ *
529
+ * Returns an empty array if no failure patterns are found or brain.db
530
+ * is unavailable.
531
+ *
532
+ * @param agentType - The agent type to check
533
+ * @param taskType - The task type to check
534
+ * @param cwd - Working directory
535
+ * @returns Array of healing suggestions, highest frequency first
536
+ */
537
+ export async function getSelfHealingSuggestions(
538
+ agentType: AgentType,
539
+ taskType: string,
540
+ cwd?: string,
541
+ ): Promise<HealingSuggestion[]> {
542
+ try {
543
+ const brain = await getBrainAccessor(cwd);
544
+ return await _getSelfHealingSuggestionsWithAccessor(agentType, taskType, brain);
545
+ } catch {
546
+ return [];
547
+ }
548
+ }
549
+
550
+ /**
551
+ * Internal implementation with injected accessor.
552
+ *
553
+ * @internal
554
+ */
555
+ export async function _getSelfHealingSuggestionsWithAccessor(
556
+ agentType: AgentType,
557
+ taskType: string,
558
+ brain: BrainDataAccessor,
559
+ ): Promise<HealingSuggestion[]> {
560
+ const patterns = await brain.findPatterns({ type: 'failure', limit: 200 });
561
+
562
+ const prefix = `Agent type "${agentType}" fails on task type "${taskType}"`;
563
+ const matches = patterns.filter((p) => p.pattern.startsWith(prefix) && p.mitigation);
564
+
565
+ return matches
566
+ .map((p) => ({
567
+ patternId: p.id,
568
+ failurePattern: p.pattern,
569
+ frequency: p.frequency,
570
+ suggestion: p.mitigation!,
571
+ confidence: Math.min(0.3 + p.frequency * 0.1, 0.9),
572
+ }))
573
+ .sort((a, b) => b.frequency - a.frequency);
574
+ }
575
+
576
+ // ============================================================================
577
+ // Compound: record event + update patterns + suggest healing
578
+ // ============================================================================
579
+
580
+ /**
581
+ * Full agent lifecycle event processor.
582
+ *
583
+ * Convenience function that:
584
+ * 1. Records the execution event to brain_decisions
585
+ * 2. On failure: records/updates the failure pattern in brain_patterns
586
+ * 3. On failure with frequency ≥ 3: stores a healing strategy observation
587
+ *
588
+ * Returns a structured result with the recorded IDs and any healing
589
+ * suggestions that now apply.
590
+ *
591
+ * All operations are best-effort — the call never throws.
592
+ *
593
+ * @param event - The execution event
594
+ * @param cwd - Working directory
595
+ */
596
+ export async function processAgentLifecycleEvent(
597
+ event: AgentExecutionEvent,
598
+ cwd?: string,
599
+ ): Promise<{
600
+ decisionId: string | null;
601
+ patternId: string | null;
602
+ observationId: string | null;
603
+ healingSuggestions: HealingSuggestion[];
604
+ }> {
605
+ const result = {
606
+ decisionId: null as string | null,
607
+ patternId: null as string | null,
608
+ observationId: null as string | null,
609
+ healingSuggestions: [] as HealingSuggestion[],
610
+ };
611
+
612
+ try {
613
+ const brain = await getBrainAccessor(cwd);
614
+
615
+ // 1. Record decision
616
+ const decision = await _recordAgentExecutionWithAccessor(event, brain);
617
+ if (decision) result.decisionId = decision.id;
618
+
619
+ // 2. On failure: record/update failure pattern
620
+ if (event.outcome === 'failure') {
621
+ const pattern = await _recordFailurePatternWithAccessor(event, brain);
622
+ if (pattern) {
623
+ result.patternId = pattern.id;
624
+
625
+ // 3. When pattern is well-established, store a healing strategy observation
626
+ if (pattern.frequency >= 3 && pattern.mitigation) {
627
+ const obs = await _storeHealingStrategyWithAccessor(event, pattern.mitigation, brain);
628
+ if (obs) result.observationId = obs.id;
629
+ }
630
+ }
631
+ }
632
+
633
+ // 4. Retrieve current suggestions (applies to all outcomes — useful for
634
+ // monitoring even successful retries of previously-failing patterns)
635
+ if (event.outcome !== 'success') {
636
+ result.healingSuggestions = await _getSelfHealingSuggestionsWithAccessor(
637
+ event.agentType,
638
+ event.taskType,
639
+ brain,
640
+ );
641
+ }
642
+ } catch {
643
+ // Best-effort — never propagate failures
644
+ }
645
+
646
+ return result;
647
+ }
648
+
649
+ // ============================================================================
650
+ // Internal: healing suggestion builder
651
+ // ============================================================================
652
+
653
+ /**
654
+ * Build a human-readable healing mitigation string for a failure pattern.
655
+ */
656
+ function buildHealingSuggestion(
657
+ agentType: AgentType,
658
+ taskType: string,
659
+ errorType: string,
660
+ frequency: number,
661
+ ): string {
662
+ if (errorType === 'retriable') {
663
+ return `Retry with exponential backoff. Consider switching to a different ${agentType} agent instance if failures exceed threshold (seen ${frequency}x).`;
664
+ }
665
+
666
+ if (errorType === 'permanent') {
667
+ return `Reassign task to a different agent type — ${agentType} has a permanent failure on ${taskType} tasks. Check permissions, inputs, and dependencies (seen ${frequency}x).`;
668
+ }
669
+
670
+ if (frequency >= 5) {
671
+ return `High-frequency unknown failure (${frequency}x): escalate to orchestrator for manual investigation of ${agentType} on ${taskType} tasks.`;
672
+ }
673
+
674
+ return `Unknown failure for ${agentType} on ${taskType} tasks (${frequency}x). Check agent logs, retry with fresh context, or reassign to a different agent type.`;
675
+ }
@@ -34,6 +34,19 @@ export {
34
34
  isOverloaded,
35
35
  updateCapacity,
36
36
  } from './capacity.js';
37
+ // Execution learning, failure pattern tracking, and self-healing
38
+ export {
39
+ type AgentExecutionEvent,
40
+ type AgentExecutionOutcome,
41
+ type AgentPerformanceSummary,
42
+ getAgentPerformanceHistory,
43
+ getSelfHealingSuggestions,
44
+ type HealingSuggestion,
45
+ processAgentLifecycleEvent,
46
+ recordAgentExecution,
47
+ recordFailurePattern,
48
+ storeHealingStrategy,
49
+ } from './execution-learning.js';
37
50
  // Registry (CRUD, heartbeat, health, errors)
38
51
  export {
39
52
  type AgentHealthReport,