@cleocode/core 2026.3.59 → 2026.3.60

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 (818) 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-registry.js +288 -0
  40. package/dist/agents/agent-registry.js.map +1 -0
  41. package/dist/agents/agent-schema.js +85 -0
  42. package/dist/agents/agent-schema.js.map +1 -0
  43. package/dist/agents/capacity.js +116 -0
  44. package/dist/agents/capacity.js.map +1 -0
  45. package/dist/agents/execution-learning.js +474 -0
  46. package/dist/agents/execution-learning.js.map +1 -0
  47. package/dist/agents/health-monitor.js +217 -0
  48. package/dist/agents/health-monitor.js.map +1 -0
  49. package/dist/agents/index.js +29 -0
  50. package/dist/agents/index.js.map +1 -0
  51. package/dist/agents/registry.js +314 -0
  52. package/dist/agents/registry.js.map +1 -0
  53. package/dist/agents/retry.js +229 -0
  54. package/dist/agents/retry.js.map +1 -0
  55. package/dist/audit-prune.js +94 -0
  56. package/dist/audit-prune.js.map +1 -0
  57. package/dist/audit.js +68 -0
  58. package/dist/audit.js.map +1 -0
  59. package/dist/backfill/index.js +229 -0
  60. package/dist/backfill/index.js.map +1 -0
  61. package/dist/bootstrap.d.ts +2 -1
  62. package/dist/bootstrap.d.ts.map +1 -1
  63. package/dist/bootstrap.js +367 -0
  64. package/dist/bootstrap.js.map +1 -0
  65. package/dist/caamp/adapter.js +434 -0
  66. package/dist/caamp/adapter.js.map +1 -0
  67. package/dist/caamp/capability-check.js +38 -0
  68. package/dist/caamp/capability-check.js.map +1 -0
  69. package/dist/caamp/index.js +23 -0
  70. package/dist/caamp/index.js.map +1 -0
  71. package/dist/caamp-init.js +16 -0
  72. package/dist/caamp-init.js.map +1 -0
  73. package/dist/cleo.d.ts +40 -0
  74. package/dist/cleo.d.ts.map +1 -1
  75. package/dist/cleo.js +267 -0
  76. package/dist/cleo.js.map +1 -0
  77. package/dist/codebase-map/analyzers/architecture.js +130 -0
  78. package/dist/codebase-map/analyzers/architecture.js.map +1 -0
  79. package/dist/codebase-map/analyzers/concerns.js +122 -0
  80. package/dist/codebase-map/analyzers/concerns.js.map +1 -0
  81. package/dist/codebase-map/analyzers/conventions.js +149 -0
  82. package/dist/codebase-map/analyzers/conventions.js.map +1 -0
  83. package/dist/codebase-map/analyzers/integrations.js +108 -0
  84. package/dist/codebase-map/analyzers/integrations.js.map +1 -0
  85. package/dist/codebase-map/analyzers/stack.js +117 -0
  86. package/dist/codebase-map/analyzers/stack.js.map +1 -0
  87. package/dist/codebase-map/analyzers/structure.js +137 -0
  88. package/dist/codebase-map/analyzers/structure.js.map +1 -0
  89. package/dist/codebase-map/analyzers/testing.js +118 -0
  90. package/dist/codebase-map/analyzers/testing.js.map +1 -0
  91. package/dist/codebase-map/index.js +57 -0
  92. package/dist/codebase-map/index.js.map +1 -0
  93. package/dist/codebase-map/store.js +122 -0
  94. package/dist/codebase-map/store.js.map +1 -0
  95. package/dist/codebase-map/summary.js +152 -0
  96. package/dist/codebase-map/summary.js.map +1 -0
  97. package/dist/compliance/index.js +288 -0
  98. package/dist/compliance/index.js.map +1 -0
  99. package/dist/compliance/protocol-enforcement.js +332 -0
  100. package/dist/compliance/protocol-enforcement.js.map +1 -0
  101. package/dist/compliance/protocol-rules.js +786 -0
  102. package/dist/compliance/protocol-rules.js.map +1 -0
  103. package/dist/compliance/protocol-types.js +80 -0
  104. package/dist/compliance/protocol-types.js.map +1 -0
  105. package/dist/compliance/store.js +53 -0
  106. package/dist/compliance/store.js.map +1 -0
  107. package/dist/config/build-config.js +29 -0
  108. package/dist/config/build-config.js.map +1 -0
  109. package/dist/config.js +370 -0
  110. package/dist/config.js.map +1 -0
  111. package/dist/constants.js +18 -0
  112. package/dist/constants.js.map +1 -0
  113. package/dist/context/index.js +137 -0
  114. package/dist/context/index.js.map +1 -0
  115. package/dist/engine-result.js +12 -0
  116. package/dist/engine-result.js.map +1 -0
  117. package/dist/error-catalog.js +404 -0
  118. package/dist/error-catalog.js.map +1 -0
  119. package/dist/error-registry.js +393 -0
  120. package/dist/error-registry.js.map +1 -0
  121. package/dist/errors.js +167 -0
  122. package/dist/errors.js.map +1 -0
  123. package/dist/hooks/handlers/error-hooks.js +43 -0
  124. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  125. package/dist/hooks/handlers/file-hooks.js +80 -0
  126. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  127. package/dist/hooks/handlers/index.js +19 -0
  128. package/dist/hooks/handlers/index.js.map +1 -0
  129. package/dist/hooks/handlers/mcp-hooks.js +80 -0
  130. package/dist/hooks/handlers/mcp-hooks.js.map +1 -0
  131. package/dist/hooks/handlers/session-hooks.js +73 -0
  132. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  133. package/dist/hooks/handlers/task-hooks.js +63 -0
  134. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  135. package/dist/hooks/index.js +13 -0
  136. package/dist/hooks/index.js.map +1 -0
  137. package/dist/hooks/payload-schemas.js +163 -0
  138. package/dist/hooks/payload-schemas.js.map +1 -0
  139. package/dist/hooks/provider-hooks.js +34 -0
  140. package/dist/hooks/provider-hooks.js.map +1 -0
  141. package/dist/hooks/registry.js +176 -0
  142. package/dist/hooks/registry.js.map +1 -0
  143. package/dist/hooks/types.js +62 -0
  144. package/dist/hooks/types.js.map +1 -0
  145. package/dist/hooks.js +136 -0
  146. package/dist/hooks.js.map +1 -0
  147. package/dist/index.js +156 -30
  148. package/dist/index.js.map +3 -3
  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.js +497 -0
  156. package/dist/intelligence/adaptive-validation.js.map +1 -0
  157. package/dist/intelligence/impact.js +675 -0
  158. package/dist/intelligence/impact.js.map +1 -0
  159. package/dist/intelligence/index.js +22 -0
  160. package/dist/intelligence/index.js.map +1 -0
  161. package/dist/intelligence/patterns.js +492 -0
  162. package/dist/intelligence/patterns.js.map +1 -0
  163. package/dist/intelligence/prediction.js +499 -0
  164. package/dist/intelligence/prediction.js.map +1 -0
  165. package/dist/intelligence/types.js +13 -0
  166. package/dist/intelligence/types.js.map +1 -0
  167. package/dist/internal.js +267 -0
  168. package/dist/internal.js.map +1 -0
  169. package/dist/issue/create.js +121 -0
  170. package/dist/issue/create.js.map +1 -0
  171. package/dist/issue/diagnostics.js +59 -0
  172. package/dist/issue/diagnostics.js.map +1 -0
  173. package/dist/issue/index.js +10 -0
  174. package/dist/issue/index.js.map +1 -0
  175. package/dist/issue/template-parser.js +267 -0
  176. package/dist/issue/template-parser.js.map +1 -0
  177. package/dist/json-schema-validator.js +76 -0
  178. package/dist/json-schema-validator.js.map +1 -0
  179. package/dist/lib/index.js +10 -0
  180. package/dist/lib/index.js.map +1 -0
  181. package/dist/lib/retry.js +152 -0
  182. package/dist/lib/retry.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 +288 -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.d.ts.map +1 -1
  404. package/dist/scaffold.js +1178 -0
  405. package/dist/scaffold.js.map +1 -0
  406. package/dist/schema-management.js +295 -0
  407. package/dist/schema-management.js.map +1 -0
  408. package/dist/security/index.js +9 -0
  409. package/dist/security/index.js.map +1 -0
  410. package/dist/security/input-sanitization.js +321 -0
  411. package/dist/security/input-sanitization.js.map +1 -0
  412. package/dist/sequence/index.js +295 -0
  413. package/dist/sequence/index.js.map +1 -0
  414. package/dist/sessions/assumptions.js +54 -0
  415. package/dist/sessions/assumptions.js.map +1 -0
  416. package/dist/sessions/briefing.js +377 -0
  417. package/dist/sessions/briefing.js.map +1 -0
  418. package/dist/sessions/context-alert.js +222 -0
  419. package/dist/sessions/context-alert.js.map +1 -0
  420. package/dist/sessions/context-inject.js +61 -0
  421. package/dist/sessions/context-inject.js.map +1 -0
  422. package/dist/sessions/context-monitor.js +98 -0
  423. package/dist/sessions/context-monitor.js.map +1 -0
  424. package/dist/sessions/decisions.js +65 -0
  425. package/dist/sessions/decisions.js.map +1 -0
  426. package/dist/sessions/find.js +63 -0
  427. package/dist/sessions/find.js.map +1 -0
  428. package/dist/sessions/handoff.js +328 -0
  429. package/dist/sessions/handoff.js.map +1 -0
  430. package/dist/sessions/hitl-warnings.js +254 -0
  431. package/dist/sessions/hitl-warnings.js.map +1 -0
  432. package/dist/sessions/index.js +318 -0
  433. package/dist/sessions/index.js.map +1 -0
  434. package/dist/sessions/session-archive.js +40 -0
  435. package/dist/sessions/session-archive.js.map +1 -0
  436. package/dist/sessions/session-cleanup.js +59 -0
  437. package/dist/sessions/session-cleanup.js.map +1 -0
  438. package/dist/sessions/session-drift.js +134 -0
  439. package/dist/sessions/session-drift.js.map +1 -0
  440. package/dist/sessions/session-enforcement.js +144 -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.js +341 -0
  533. package/dist/stats/index.js.map +1 -0
  534. package/dist/stats/workflow-telemetry.js +400 -0
  535. package/dist/stats/workflow-telemetry.js.map +1 -0
  536. package/dist/sticky/archive.js +47 -0
  537. package/dist/sticky/archive.js.map +1 -0
  538. package/dist/sticky/convert.js +235 -0
  539. package/dist/sticky/convert.js.map +1 -0
  540. package/dist/sticky/create.js +48 -0
  541. package/dist/sticky/create.js.map +1 -0
  542. package/dist/sticky/id.js +35 -0
  543. package/dist/sticky/id.js.map +1 -0
  544. package/dist/sticky/index.js +16 -0
  545. package/dist/sticky/index.js.map +1 -0
  546. package/dist/sticky/list.js +44 -0
  547. package/dist/sticky/list.js.map +1 -0
  548. package/dist/sticky/purge.js +45 -0
  549. package/dist/sticky/purge.js.map +1 -0
  550. package/dist/sticky/show.js +42 -0
  551. package/dist/sticky/show.js.map +1 -0
  552. package/dist/sticky/types.js +10 -0
  553. package/dist/sticky/types.js.map +1 -0
  554. package/dist/store/atomic.js +167 -0
  555. package/dist/store/atomic.js.map +1 -0
  556. package/dist/store/backup.js +94 -0
  557. package/dist/store/backup.js.map +1 -0
  558. package/dist/store/brain-accessor.js +397 -0
  559. package/dist/store/brain-accessor.js.map +1 -0
  560. package/dist/store/brain-schema.js +215 -0
  561. package/dist/store/brain-schema.js.map +1 -0
  562. package/dist/store/brain-sqlite.js +271 -0
  563. package/dist/store/brain-sqlite.js.map +1 -0
  564. package/dist/store/cache.js +168 -0
  565. package/dist/store/cache.js.map +1 -0
  566. package/dist/store/chain-schema.js +51 -0
  567. package/dist/store/chain-schema.js.map +1 -0
  568. package/dist/store/converters.js +122 -0
  569. package/dist/store/converters.js.map +1 -0
  570. package/dist/store/cross-db-cleanup.js +169 -0
  571. package/dist/store/cross-db-cleanup.js.map +1 -0
  572. package/dist/store/data-accessor.js +26 -0
  573. package/dist/store/data-accessor.js.map +1 -0
  574. package/dist/store/data-safety-central.js +269 -0
  575. package/dist/store/data-safety-central.js.map +1 -0
  576. package/dist/store/data-safety.js +274 -0
  577. package/dist/store/data-safety.js.map +1 -0
  578. package/dist/store/db-helpers.js +223 -0
  579. package/dist/store/db-helpers.js.map +1 -0
  580. package/dist/store/export.js +155 -0
  581. package/dist/store/export.js.map +1 -0
  582. package/dist/store/file-utils.js +270 -0
  583. package/dist/store/file-utils.js.map +1 -0
  584. package/dist/store/git-checkpoint.js +365 -0
  585. package/dist/store/git-checkpoint.js.map +1 -0
  586. package/dist/store/import-logging.js +139 -0
  587. package/dist/store/import-logging.js.map +1 -0
  588. package/dist/store/import-remap.js +145 -0
  589. package/dist/store/import-remap.js.map +1 -0
  590. package/dist/store/import-sort.js +121 -0
  591. package/dist/store/import-sort.js.map +1 -0
  592. package/dist/store/index.js +28 -0
  593. package/dist/store/index.js.map +1 -0
  594. package/dist/store/json.js +208 -0
  595. package/dist/store/json.js.map +1 -0
  596. package/dist/store/lifecycle-store.js +249 -0
  597. package/dist/store/lifecycle-store.js.map +1 -0
  598. package/dist/store/lock.js +70 -0
  599. package/dist/store/lock.js.map +1 -0
  600. package/dist/store/migration-sqlite.js +676 -0
  601. package/dist/store/migration-sqlite.js.map +1 -0
  602. package/dist/store/nexus-schema.js +62 -0
  603. package/dist/store/nexus-schema.js.map +1 -0
  604. package/dist/store/nexus-sqlite.js +217 -0
  605. package/dist/store/nexus-sqlite.js.map +1 -0
  606. package/dist/store/nexus-validation-schemas.js +40 -0
  607. package/dist/store/nexus-validation-schemas.js.map +1 -0
  608. package/dist/store/parsers.js +37 -0
  609. package/dist/store/parsers.js.map +1 -0
  610. package/dist/store/project-detect.js +457 -0
  611. package/dist/store/project-detect.js.map +1 -0
  612. package/dist/store/provider.js +101 -0
  613. package/dist/store/provider.js.map +1 -0
  614. package/dist/store/safety-data-accessor.js +243 -0
  615. package/dist/store/safety-data-accessor.js.map +1 -0
  616. package/dist/store/schema.js +7 -0
  617. package/dist/store/schema.js.map +1 -0
  618. package/dist/store/session-store.js +219 -0
  619. package/dist/store/session-store.js.map +1 -0
  620. package/dist/store/sqlite-backup.js +105 -0
  621. package/dist/store/sqlite-backup.js.map +1 -0
  622. package/dist/store/sqlite-data-accessor.js +734 -0
  623. package/dist/store/sqlite-data-accessor.js.map +1 -0
  624. package/dist/store/sqlite.js +500 -0
  625. package/dist/store/sqlite.js.map +1 -0
  626. package/dist/store/status-registry.js +8 -0
  627. package/dist/store/status-registry.js.map +1 -0
  628. package/dist/store/task-store.js +348 -0
  629. package/dist/store/task-store.js.map +1 -0
  630. package/dist/store/tasks-schema.js +604 -0
  631. package/dist/store/tasks-schema.js.map +1 -0
  632. package/dist/store/typed-query.js +15 -0
  633. package/dist/store/typed-query.js.map +1 -0
  634. package/dist/store/validation-schemas.js +278 -0
  635. package/dist/store/validation-schemas.js.map +1 -0
  636. package/dist/system/archive-analytics.js +277 -0
  637. package/dist/system/archive-analytics.js.map +1 -0
  638. package/dist/system/archive-stats.js +64 -0
  639. package/dist/system/archive-stats.js.map +1 -0
  640. package/dist/system/audit.js +145 -0
  641. package/dist/system/audit.js.map +1 -0
  642. package/dist/system/backup.js +99 -0
  643. package/dist/system/backup.js.map +1 -0
  644. package/dist/system/cleanup.js +134 -0
  645. package/dist/system/cleanup.js.map +1 -0
  646. package/dist/system/health.js +1054 -0
  647. package/dist/system/health.js.map +1 -0
  648. package/dist/system/index.js +18 -0
  649. package/dist/system/index.js.map +1 -0
  650. package/dist/system/inject-generate.js +122 -0
  651. package/dist/system/inject-generate.js.map +1 -0
  652. package/dist/system/labels.js +38 -0
  653. package/dist/system/labels.js.map +1 -0
  654. package/dist/system/metrics.js +61 -0
  655. package/dist/system/metrics.js.map +1 -0
  656. package/dist/system/migrate.js +43 -0
  657. package/dist/system/migrate.js.map +1 -0
  658. package/dist/system/platform-paths.js +80 -0
  659. package/dist/system/platform-paths.js.map +1 -0
  660. package/dist/system/runtime.js +161 -0
  661. package/dist/system/runtime.js.map +1 -0
  662. package/dist/system/safestop.js +99 -0
  663. package/dist/system/safestop.js.map +1 -0
  664. package/dist/system/storage-preflight.js +123 -0
  665. package/dist/system/storage-preflight.js.map +1 -0
  666. package/dist/task-work/index.js +155 -0
  667. package/dist/task-work/index.js.map +1 -0
  668. package/dist/tasks/add.js +594 -0
  669. package/dist/tasks/add.js.map +1 -0
  670. package/dist/tasks/analyze.js +85 -0
  671. package/dist/tasks/analyze.js.map +1 -0
  672. package/dist/tasks/archive.js +90 -0
  673. package/dist/tasks/archive.js.map +1 -0
  674. package/dist/tasks/atomicity.js +83 -0
  675. package/dist/tasks/atomicity.js.map +1 -0
  676. package/dist/tasks/cancel-ops.js +83 -0
  677. package/dist/tasks/cancel-ops.js.map +1 -0
  678. package/dist/tasks/complete.js +235 -0
  679. package/dist/tasks/complete.js.map +1 -0
  680. package/dist/tasks/crossref-extract.js +73 -0
  681. package/dist/tasks/crossref-extract.js.map +1 -0
  682. package/dist/tasks/delete-preview.js +192 -0
  683. package/dist/tasks/delete-preview.js.map +1 -0
  684. package/dist/tasks/delete.js +120 -0
  685. package/dist/tasks/delete.js.map +1 -0
  686. package/dist/tasks/deletion-strategy.js +200 -0
  687. package/dist/tasks/deletion-strategy.js.map +1 -0
  688. package/dist/tasks/dependency-check.js +278 -0
  689. package/dist/tasks/dependency-check.js.map +1 -0
  690. package/dist/tasks/deps-ready.js +32 -0
  691. package/dist/tasks/deps-ready.js.map +1 -0
  692. package/dist/tasks/enforcement.js +89 -0
  693. package/dist/tasks/enforcement.js.map +1 -0
  694. package/dist/tasks/epic-enforcement.js +294 -0
  695. package/dist/tasks/epic-enforcement.js.map +1 -0
  696. package/dist/tasks/find.js +148 -0
  697. package/dist/tasks/find.js.map +1 -0
  698. package/dist/tasks/graph-cache.js +127 -0
  699. package/dist/tasks/graph-cache.js.map +1 -0
  700. package/dist/tasks/graph-ops.js +171 -0
  701. package/dist/tasks/graph-ops.js.map +1 -0
  702. package/dist/tasks/graph-rag.js +328 -0
  703. package/dist/tasks/graph-rag.js.map +1 -0
  704. package/dist/tasks/hierarchy-policy.js +149 -0
  705. package/dist/tasks/hierarchy-policy.js.map +1 -0
  706. package/dist/tasks/hierarchy.js +185 -0
  707. package/dist/tasks/hierarchy.js.map +1 -0
  708. package/dist/tasks/id-generator.js +65 -0
  709. package/dist/tasks/id-generator.js.map +1 -0
  710. package/dist/tasks/index.js +14 -0
  711. package/dist/tasks/index.js.map +1 -0
  712. package/dist/tasks/labels.js +52 -0
  713. package/dist/tasks/labels.js.map +1 -0
  714. package/dist/tasks/list.js +68 -0
  715. package/dist/tasks/list.js.map +1 -0
  716. package/dist/tasks/phase-tracking.js +133 -0
  717. package/dist/tasks/phase-tracking.js.map +1 -0
  718. package/dist/tasks/pipeline-stage.js +248 -0
  719. package/dist/tasks/pipeline-stage.js.map +1 -0
  720. package/dist/tasks/plan.js +268 -0
  721. package/dist/tasks/plan.js.map +1 -0
  722. package/dist/tasks/relates.js +89 -0
  723. package/dist/tasks/relates.js.map +1 -0
  724. package/dist/tasks/reparent.d.ts +38 -0
  725. package/dist/tasks/reparent.d.ts.map +1 -0
  726. package/dist/tasks/show.js +78 -0
  727. package/dist/tasks/show.js.map +1 -0
  728. package/dist/tasks/size-weighting.js +86 -0
  729. package/dist/tasks/size-weighting.js.map +1 -0
  730. package/dist/tasks/staleness.js +86 -0
  731. package/dist/tasks/staleness.js.map +1 -0
  732. package/dist/tasks/task-ops.js +1340 -0
  733. package/dist/tasks/task-ops.js.map +1 -0
  734. package/dist/tasks/update.js +271 -0
  735. package/dist/tasks/update.js.map +1 -0
  736. package/dist/templates/index.js +10 -0
  737. package/dist/templates/index.js.map +1 -0
  738. package/dist/templates/parser.js +254 -0
  739. package/dist/templates/parser.js.map +1 -0
  740. package/dist/ui/aliases.js +153 -0
  741. package/dist/ui/aliases.js.map +1 -0
  742. package/dist/ui/changelog.js +184 -0
  743. package/dist/ui/changelog.js.map +1 -0
  744. package/dist/ui/command-registry.js +168 -0
  745. package/dist/ui/command-registry.js.map +1 -0
  746. package/dist/ui/flags.js +94 -0
  747. package/dist/ui/flags.js.map +1 -0
  748. package/dist/ui/index.js +24 -0
  749. package/dist/ui/index.js.map +1 -0
  750. package/dist/ui/injection-legacy.d.ts +26 -0
  751. package/dist/ui/injection-legacy.d.ts.map +1 -0
  752. package/dist/ui/injection-legacy.js +42 -0
  753. package/dist/ui/injection-legacy.js.map +1 -0
  754. package/dist/upgrade.js +901 -0
  755. package/dist/upgrade.js.map +1 -0
  756. package/dist/validation/chain-validation.js +146 -0
  757. package/dist/validation/chain-validation.js.map +1 -0
  758. package/dist/validation/compliance.js +155 -0
  759. package/dist/validation/compliance.js.map +1 -0
  760. package/dist/validation/docs-sync.js +212 -0
  761. package/dist/validation/docs-sync.js.map +1 -0
  762. package/dist/validation/doctor/checks.js +1069 -0
  763. package/dist/validation/doctor/checks.js.map +1 -0
  764. package/dist/validation/doctor/index.js +9 -0
  765. package/dist/validation/doctor/index.js.map +1 -0
  766. package/dist/validation/doctor/project-cache.js +160 -0
  767. package/dist/validation/doctor/project-cache.js.map +1 -0
  768. package/dist/validation/doctor/utils.js +155 -0
  769. package/dist/validation/doctor/utils.js.map +1 -0
  770. package/dist/validation/engine.js +902 -0
  771. package/dist/validation/engine.js.map +1 -0
  772. package/dist/validation/gap-check.js +175 -0
  773. package/dist/validation/gap-check.js.map +1 -0
  774. package/dist/validation/index.js +40 -0
  775. package/dist/validation/index.js.map +1 -0
  776. package/dist/validation/manifest.js +237 -0
  777. package/dist/validation/manifest.js.map +1 -0
  778. package/dist/validation/operation-gate-validators.js +724 -0
  779. package/dist/validation/operation-gate-validators.js.map +1 -0
  780. package/dist/validation/operation-verification-gates.js +532 -0
  781. package/dist/validation/operation-verification-gates.js.map +1 -0
  782. package/dist/validation/param-utils.js +139 -0
  783. package/dist/validation/param-utils.js.map +1 -0
  784. package/dist/validation/protocol-common.js +300 -0
  785. package/dist/validation/protocol-common.js.map +1 -0
  786. package/dist/validation/protocols/consensus.js +71 -0
  787. package/dist/validation/protocols/consensus.js.map +1 -0
  788. package/dist/validation/protocols/contribution.js +59 -0
  789. package/dist/validation/protocols/contribution.js.map +1 -0
  790. package/dist/validation/protocols/decomposition.js +59 -0
  791. package/dist/validation/protocols/decomposition.js.map +1 -0
  792. package/dist/validation/protocols/implementation.js +59 -0
  793. package/dist/validation/protocols/implementation.js.map +1 -0
  794. package/dist/validation/protocols/release-protocol.js +60 -0
  795. package/dist/validation/protocols/release-protocol.js.map +1 -0
  796. package/dist/validation/protocols/research.js +77 -0
  797. package/dist/validation/protocols/research.js.map +1 -0
  798. package/dist/validation/protocols/specification.js +84 -0
  799. package/dist/validation/protocols/specification.js.map +1 -0
  800. package/dist/validation/protocols/testing-protocol.js +70 -0
  801. package/dist/validation/protocols/testing-protocol.js.map +1 -0
  802. package/dist/validation/protocols/validation-protocol.js +70 -0
  803. package/dist/validation/protocols/validation-protocol.js.map +1 -0
  804. package/dist/validation/schema-integrity.js +170 -0
  805. package/dist/validation/schema-integrity.js.map +1 -0
  806. package/dist/validation/schema-validator.js +176 -0
  807. package/dist/validation/schema-validator.js.map +1 -0
  808. package/dist/validation/validate-ops.js +937 -0
  809. package/dist/validation/validate-ops.js.map +1 -0
  810. package/dist/validation/validation-rules.js +226 -0
  811. package/dist/validation/validation-rules.js.map +1 -0
  812. package/dist/validation/verification.js +321 -0
  813. package/dist/validation/verification.js.map +1 -0
  814. package/package.json +5 -5
  815. package/src/agents/__tests__/agent-registry.test.ts +1 -1
  816. package/src/bootstrap.ts +171 -30
  817. package/src/cleo.ts +103 -2
  818. package/src/scaffold.ts +24 -2
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Hook Registry System - Phase 2C of T5237
3
+ *
4
+ * Central registry for managing hook handlers with priority-based execution,
5
+ * async dispatch, and best-effort error handling. Integrates with CAAMP 1.6.0
6
+ * event definitions while providing CLEO's execution engine.
7
+ *
8
+ * @module @cleocode/cleo/hooks/registry
9
+ */
10
+ import { getLogger } from '../logger.js';
11
+ /**
12
+ * Default configuration for the hook system.
13
+ * All events are enabled by default.
14
+ */
15
+ const DEFAULT_HOOK_CONFIG = {
16
+ enabled: true,
17
+ events: {
18
+ onSessionStart: true,
19
+ onSessionEnd: true,
20
+ onToolStart: true,
21
+ onToolComplete: true,
22
+ onFileChange: true,
23
+ onError: true,
24
+ onPromptSubmit: true,
25
+ onResponseComplete: true,
26
+ onWorkAvailable: true,
27
+ onAgentSpawn: true,
28
+ onAgentComplete: true,
29
+ onCascadeStart: true,
30
+ onPatrol: true,
31
+ },
32
+ };
33
+ /**
34
+ * Central registry for hook handlers.
35
+ *
36
+ * Manages registration, priority-based ordering, and async dispatch
37
+ * of hook handlers. Provides best-effort execution where errors in
38
+ * one handler do not block others.
39
+ */
40
+ export class HookRegistry {
41
+ handlers = new Map();
42
+ config = DEFAULT_HOOK_CONFIG;
43
+ /**
44
+ * Register a hook handler for a specific event.
45
+ *
46
+ * Handlers are sorted by priority (highest first) and executed
47
+ * in parallel when the event is dispatched.
48
+ *
49
+ * @param registration - The hook registration containing event, handler, priority, and ID
50
+ * @returns A function to unregister the handler
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const unregister = hooks.register({
55
+ * id: 'my-handler',
56
+ * event: 'onSessionStart',
57
+ * handler: async (root, payload) => { console.log('Session started'); },
58
+ * priority: 100
59
+ * });
60
+ *
61
+ * // Later: unregister()
62
+ * ```
63
+ */
64
+ register(registration) {
65
+ const list = this.handlers.get(registration.event) || [];
66
+ list.push(registration);
67
+ // Sort by priority (highest first)
68
+ list.sort((a, b) => b.priority - a.priority);
69
+ this.handlers.set(registration.event, list);
70
+ // Return unregister function
71
+ return () => {
72
+ const handlers = this.handlers.get(registration.event);
73
+ if (handlers) {
74
+ const idx = handlers.findIndex((h) => h.id === registration.id);
75
+ if (idx !== -1)
76
+ handlers.splice(idx, 1);
77
+ }
78
+ };
79
+ }
80
+ /**
81
+ * Dispatch an event to all registered handlers.
82
+ *
83
+ * Executes handlers in parallel using Promise.allSettled for best-effort
84
+ * execution. Errors in individual handlers are logged but do not block
85
+ * other handlers or propagate to the caller.
86
+ *
87
+ * @param event - The CAAMP hook event to dispatch
88
+ * @param projectRoot - The project root directory path
89
+ * @param payload - The event payload (typed by event)
90
+ * @returns Promise that resolves when all handlers have completed
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * await hooks.dispatch('onSessionStart', '/project', {
95
+ * timestamp: new Date().toISOString(),
96
+ * sessionId: 'sess-123',
97
+ * name: 'My Session',
98
+ * scope: 'feature'
99
+ * });
100
+ * ```
101
+ */
102
+ async dispatch(event, projectRoot, payload) {
103
+ // Check if hooks enabled globally
104
+ if (!this.config.enabled)
105
+ return;
106
+ // Check if this event enabled
107
+ if (!this.config.events[event])
108
+ return;
109
+ const handlers = this.handlers.get(event);
110
+ if (!handlers || handlers.length === 0)
111
+ return;
112
+ // Execute all handlers in parallel (best-effort)
113
+ await Promise.allSettled(handlers.map(async (reg) => {
114
+ try {
115
+ await reg.handler(projectRoot, payload);
116
+ }
117
+ catch (error) {
118
+ // Hooks are best-effort - log but don't throw
119
+ getLogger('hooks').warn({ err: error, hookId: reg.id, event }, 'Hook handler failed');
120
+ }
121
+ }));
122
+ }
123
+ /**
124
+ * Check if a specific event is currently enabled.
125
+ *
126
+ * Both the global enabled flag and the per-event flag must be true.
127
+ *
128
+ * @param event - The CAAMP hook event to check
129
+ * @returns True if the event is enabled
130
+ */
131
+ isEnabled(event) {
132
+ return this.config.enabled && this.config.events[event];
133
+ }
134
+ /**
135
+ * Update the hook system configuration.
136
+ *
137
+ * Merges the provided config with the existing config.
138
+ *
139
+ * @param config - Partial configuration to apply
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * hooks.setConfig({ enabled: false }); // Disable all hooks
144
+ * hooks.setConfig({ events: { onError: false } }); // Disable specific event
145
+ * ```
146
+ */
147
+ setConfig(config) {
148
+ this.config = { ...this.config, ...config };
149
+ }
150
+ /**
151
+ * Get the current hook configuration.
152
+ *
153
+ * @returns A copy of the current configuration
154
+ */
155
+ getConfig() {
156
+ return { ...this.config };
157
+ }
158
+ /**
159
+ * List all registered handlers for a specific event.
160
+ *
161
+ * Returns handlers in priority order (highest first).
162
+ *
163
+ * @param event - The CAAMP hook event
164
+ * @returns Array of hook registrations
165
+ */
166
+ listHandlers(event) {
167
+ return [...(this.handlers.get(event) || [])];
168
+ }
169
+ }
170
+ /**
171
+ * Singleton instance of the HookRegistry.
172
+ *
173
+ * Use this instance for all hook operations throughout the application.
174
+ */
175
+ export const hooks = new HookRegistry();
176
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Universal Hooks Core Types - Phase 2B of T5237
3
+ *
4
+ * This module defines the core type system for CLEO's Universal Hooks
5
+ * integration with CAAMP 1.6.0. CLEO builds the hook registry and
6
+ * execution system while CAAMP provides the event definitions.
7
+ *
8
+ * @module @cleocode/cleo/hooks/types
9
+ */
10
+ // Re-export CAAMP provider query functions for hook capability discovery
11
+ export { getCommonHookEvents, getProvidersByHookEvent } from '@cleocode/caamp';
12
+ /**
13
+ * CLEO-local coordination events used by the autonomous runtime.
14
+ *
15
+ * These are internal lifecycle signals for worker orchestration and are not
16
+ * surfaced through CAAMP's provider capability registry.
17
+ */
18
+ export const INTERNAL_HOOK_EVENTS = [
19
+ 'onWorkAvailable',
20
+ 'onAgentSpawn',
21
+ 'onAgentComplete',
22
+ 'onCascadeStart',
23
+ 'onPatrol',
24
+ ];
25
+ const INTERNAL_HOOK_EVENT_SET = new Set(INTERNAL_HOOK_EVENTS);
26
+ /**
27
+ * Type guard for CAAMP/provider-discoverable hook events.
28
+ */
29
+ export function isProviderHookEvent(event) {
30
+ return !INTERNAL_HOOK_EVENT_SET.has(event);
31
+ }
32
+ /**
33
+ * Type guard for CLEO-local coordination hook events.
34
+ */
35
+ export function isInternalHookEvent(event) {
36
+ return INTERNAL_HOOK_EVENT_SET.has(event);
37
+ }
38
+ /**
39
+ * Mapping from CLEO internal lifecycle events to CAAMP hook events
40
+ * This is where CLEO connects its lifecycle to CAAMP's event definitions
41
+ */
42
+ export const CLEO_TO_CAAMP_HOOK_MAP = {
43
+ 'session.start': 'onSessionStart',
44
+ 'session.end': 'onSessionEnd',
45
+ 'task.start': 'onToolStart',
46
+ 'task.complete': 'onToolComplete',
47
+ 'file.change': 'onFileChange',
48
+ 'system.error': 'onError',
49
+ 'prompt.submit': 'onPromptSubmit',
50
+ 'response.complete': 'onResponseComplete',
51
+ };
52
+ /**
53
+ * Internal CLEO lifecycle events that drive autonomous coordination.
54
+ */
55
+ export const CLEO_INTERNAL_HOOK_MAP = {
56
+ 'agent.work.available': 'onWorkAvailable',
57
+ 'agent.spawn': 'onAgentSpawn',
58
+ 'agent.complete': 'onAgentComplete',
59
+ 'cascade.start': 'onCascadeStart',
60
+ 'watcher.patrol': 'onPatrol',
61
+ };
62
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,yEAAyE;AACzE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAO/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iBAAiB;IACjB,cAAc;IACd,iBAAiB;IACjB,gBAAgB;IAChB,UAAU;CACF,CAAC;AAYX,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,OAAO,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAwSD;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE,gBAAgB;IACjC,aAAa,EAAE,cAAc;IAC7B,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,gBAAgB;IACjC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,gBAAgB;IACjC,mBAAmB,EAAE,oBAAoB;CACjC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,sBAAsB,EAAE,iBAAiB;IACzC,aAAa,EAAE,cAAc;IAC7B,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,UAAU;CACpB,CAAC"}
package/dist/hooks.js ADDED
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Git hook management utilities.
3
+ *
4
+ * Extracted from init.ts to enable shared use across init, upgrade, and
5
+ * doctor/health-check workflows.
6
+ *
7
+ * Handles installation, update, and verification of managed git hooks
8
+ * from the package's templates/git-hooks/ directory.
9
+ */
10
+ import { existsSync } from 'node:fs';
11
+ import { chmod, copyFile, mkdir, readFile } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ import { getPackageRoot } from './scaffold.js';
14
+ // ── Constants ────────────────────────────────────────────────────────
15
+ /** Git hooks managed by CLEO. */
16
+ export const MANAGED_HOOKS = ['commit-msg', 'pre-commit', 'pre-push'];
17
+ // ── ensureGitHooks ───────────────────────────────────────────────────
18
+ /**
19
+ * Install or update managed git hooks from templates/git-hooks/ into .git/hooks/.
20
+ *
21
+ * Handles:
22
+ * - No .git directory (skips gracefully)
23
+ * - No source templates directory (skips gracefully)
24
+ * - Hooks already installed (skips unless force)
25
+ * - Sets executable permissions on installed hooks
26
+ */
27
+ export async function ensureGitHooks(projectRoot, opts) {
28
+ const gitDir = join(projectRoot, '.git');
29
+ const gitHooksDir = join(gitDir, 'hooks');
30
+ if (!existsSync(gitDir)) {
31
+ return {
32
+ action: 'skipped',
33
+ path: gitHooksDir,
34
+ details: 'No .git/ directory found, skipping git hook installation',
35
+ };
36
+ }
37
+ const packageRoot = getPackageRoot();
38
+ const sourceDir = join(packageRoot, 'templates', 'git-hooks');
39
+ if (!existsSync(sourceDir)) {
40
+ return {
41
+ action: 'skipped',
42
+ path: sourceDir,
43
+ details: 'templates/git-hooks/ not found in package root, skipping git hook installation',
44
+ };
45
+ }
46
+ await mkdir(gitHooksDir, { recursive: true });
47
+ const force = opts?.force ?? false;
48
+ let installedCount = 0;
49
+ const errors = [];
50
+ for (const hook of MANAGED_HOOKS) {
51
+ const sourcePath = join(sourceDir, hook);
52
+ const destPath = join(gitHooksDir, hook);
53
+ if (!existsSync(sourcePath)) {
54
+ continue;
55
+ }
56
+ if (existsSync(destPath) && !force) {
57
+ continue;
58
+ }
59
+ try {
60
+ await copyFile(sourcePath, destPath);
61
+ await chmod(destPath, 0o755);
62
+ installedCount++;
63
+ }
64
+ catch (err) {
65
+ errors.push(`Failed to install git hook ${hook}: ${err instanceof Error ? err.message : String(err)}`);
66
+ }
67
+ }
68
+ if (errors.length > 0) {
69
+ return {
70
+ action: 'repaired',
71
+ path: gitHooksDir,
72
+ details: `Installed ${installedCount} hook(s) with ${errors.length} error(s): ${errors.join('; ')}`,
73
+ };
74
+ }
75
+ if (installedCount === 0) {
76
+ return {
77
+ action: 'skipped',
78
+ path: gitHooksDir,
79
+ details: 'All managed hooks already installed',
80
+ };
81
+ }
82
+ return {
83
+ action: 'created',
84
+ path: gitHooksDir,
85
+ details: `Installed ${installedCount} git hooks`,
86
+ };
87
+ }
88
+ // ── checkGitHooks ────────────────────────────────────────────────────
89
+ /**
90
+ * Verify managed hooks are installed and current.
91
+ *
92
+ * Compares installed hooks in .git/hooks/ against source templates in the
93
+ * package's templates/git-hooks/ directory. Returns per-hook status including
94
+ * whether the hook is installed and whether its content matches the source.
95
+ */
96
+ export async function checkGitHooks(projectRoot) {
97
+ const gitHooksDir = join(projectRoot, '.git', 'hooks');
98
+ const packageRoot = getPackageRoot();
99
+ const sourceDir = join(packageRoot, 'templates', 'git-hooks');
100
+ const results = [];
101
+ for (const hook of MANAGED_HOOKS) {
102
+ const sourcePath = join(sourceDir, hook);
103
+ const installedPath = join(gitHooksDir, hook);
104
+ const result = {
105
+ hook,
106
+ installed: false,
107
+ current: false,
108
+ sourcePath,
109
+ installedPath,
110
+ };
111
+ if (!existsSync(sourcePath)) {
112
+ // No source template — nothing to compare against
113
+ results.push(result);
114
+ continue;
115
+ }
116
+ if (!existsSync(installedPath)) {
117
+ results.push(result);
118
+ continue;
119
+ }
120
+ result.installed = true;
121
+ try {
122
+ const [sourceContent, installedContent] = await Promise.all([
123
+ readFile(sourcePath, 'utf-8'),
124
+ readFile(installedPath, 'utf-8'),
125
+ ]);
126
+ result.current = sourceContent === installedContent;
127
+ }
128
+ catch {
129
+ // If we can't read either file, mark as not current
130
+ result.current = false;
131
+ }
132
+ results.push(result);
133
+ }
134
+ return results;
135
+ }
136
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -19102,6 +19102,7 @@ import { execFile as execFile3 } from "node:child_process";
19102
19102
  import { randomUUID } from "node:crypto";
19103
19103
  import { existsSync as existsSync33, constants as fsConstants3, readFileSync as readFileSync22, statSync as statSync8 } from "node:fs";
19104
19104
  import { access as access3, mkdir as mkdir5, readFile as readFile6, rm as rm2, writeFile as writeFile5 } from "node:fs/promises";
19105
+ import { homedir as getHomedir } from "node:os";
19105
19106
  import { dirname as dirname8, join as join37, resolve as resolve5 } from "node:path";
19106
19107
  import { fileURLToPath as fileURLToPath4 } from "node:url";
19107
19108
  import { promisify as promisify3 } from "node:util";
@@ -19913,12 +19914,30 @@ function checkGlobalTemplates() {
19913
19914
  fix: "cleo init (or restart MCP server)"
19914
19915
  };
19915
19916
  }
19917
+ const xdgContent = readFileSync22(injectionPath, "utf-8");
19918
+ const xdgVersion = xdgContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
19919
+ const home = getHomedir();
19920
+ const legacyPath = join37(home, ".cleo", "templates", "CLEO-INJECTION.md");
19921
+ if (existsSync33(legacyPath)) {
19922
+ const legacyContent = readFileSync22(legacyPath, "utf-8");
19923
+ const legacyVersion = legacyContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
19924
+ if (legacyVersion && xdgVersion && legacyVersion !== xdgVersion) {
19925
+ return {
19926
+ id: "global_templates",
19927
+ category: "global",
19928
+ status: "warning",
19929
+ message: `Legacy template version (${legacyVersion}) out of sync with XDG (${xdgVersion})`,
19930
+ details: { path: injectionPath, exists: true, xdgVersion, legacyVersion, legacyPath },
19931
+ fix: "npm install -g @cleocode/cleo (reinstall syncs both paths)"
19932
+ };
19933
+ }
19934
+ }
19916
19935
  return {
19917
19936
  id: "global_templates",
19918
19937
  category: "global",
19919
19938
  status: "passed",
19920
- message: "Global injection template present",
19921
- details: { path: injectionPath, exists: true },
19939
+ message: `Global injection template present (v${xdgVersion ?? "unknown"})`,
19940
+ details: { path: injectionPath, exists: true, version: xdgVersion },
19922
19941
  fix: null
19923
19942
  };
19924
19943
  }
@@ -64457,46 +64476,68 @@ async function bootstrapGlobalCleo(options) {
64457
64476
  await installSkillsGlobally(ctx);
64458
64477
  await installAgentDefinitionGlobally(ctx);
64459
64478
  await installProviderAdapters(ctx, options?.packageRoot);
64479
+ await verifyBootstrapHealth(ctx);
64460
64480
  return ctx;
64461
64481
  }
64482
+ async function writeTemplateTo(content, destPath, isDryRun) {
64483
+ if (isDryRun) return false;
64484
+ const { dirname: dirname20 } = await import("node:path");
64485
+ await mkdir17(dirname20(destPath), { recursive: true });
64486
+ await writeFile12(destPath, content);
64487
+ return true;
64488
+ }
64462
64489
  async function ensureGlobalTemplatesBootstrap(ctx, packageRootOverride) {
64463
64490
  const globalTemplatesDir = getCleoTemplatesDir();
64464
64491
  if (!ctx.isDryRun) {
64465
64492
  await mkdir17(globalTemplatesDir, { recursive: true });
64466
64493
  }
64494
+ let templateContent = null;
64467
64495
  try {
64468
64496
  const pkgRoot = packageRootOverride ?? getPackageRoot();
64469
64497
  const templatePath = join104(pkgRoot, "templates", "CLEO-INJECTION.md");
64470
64498
  if (existsSync103(templatePath)) {
64471
- const content = readFileSync77(templatePath, "utf-8");
64472
- const destPath = join104(globalTemplatesDir, "CLEO-INJECTION.md");
64473
- if (!ctx.isDryRun) {
64474
- await writeFile12(destPath, content);
64475
- }
64476
- ctx.created.push(
64477
- `~/.cleo/templates/CLEO-INJECTION.md (${ctx.isDryRun ? "would refresh" : "refreshed"})`
64478
- );
64479
- } else {
64480
- try {
64481
- const { getInjectionTemplateContent: getInjectionTemplateContent2 } = await Promise.resolve().then(() => (init_injection(), injection_exports));
64482
- const content = getInjectionTemplateContent2();
64483
- if (content) {
64484
- const destPath = join104(globalTemplatesDir, "CLEO-INJECTION.md");
64485
- if (!ctx.isDryRun) {
64486
- await writeFile12(destPath, content);
64487
- }
64488
- ctx.created.push(
64489
- `~/.cleo/templates/CLEO-INJECTION.md (${ctx.isDryRun ? "would refresh" : "refreshed"} from embedded)`
64490
- );
64491
- }
64492
- } catch {
64493
- ctx.warnings.push("Could not refresh CLEO-INJECTION.md template");
64494
- }
64499
+ templateContent = readFileSync77(templatePath, "utf-8");
64495
64500
  }
64496
64501
  } catch {
64502
+ }
64503
+ if (!templateContent) {
64504
+ try {
64505
+ const { getInjectionTemplateContent: getInjectionTemplateContent2 } = await Promise.resolve().then(() => (init_injection(), injection_exports));
64506
+ templateContent = getInjectionTemplateContent2() ?? null;
64507
+ } catch {
64508
+ ctx.warnings.push("Could not refresh CLEO-INJECTION.md template");
64509
+ return;
64510
+ }
64511
+ }
64512
+ if (!templateContent) {
64497
64513
  ctx.warnings.push("Could not refresh CLEO-INJECTION.md template");
64514
+ return;
64515
+ }
64516
+ const xdgDest = join104(globalTemplatesDir, "CLEO-INJECTION.md");
64517
+ const xdgWritten = await writeTemplateTo(templateContent, xdgDest, ctx.isDryRun);
64518
+ ctx.created.push(
64519
+ `${getCleoTemplatesTildePath()}/CLEO-INJECTION.md (${xdgWritten ? "refreshed" : "would refresh"})`
64520
+ );
64521
+ const home = homedir6();
64522
+ const legacyTemplatesDir = join104(home, ".cleo", "templates");
64523
+ if (legacyTemplatesDir !== globalTemplatesDir && existsSync103(join104(home, ".cleo"))) {
64524
+ const legacyDest = join104(legacyTemplatesDir, "CLEO-INJECTION.md");
64525
+ const legacyWritten = await writeTemplateTo(templateContent, legacyDest, ctx.isDryRun);
64526
+ if (legacyWritten) {
64527
+ ctx.created.push("~/.cleo/templates/CLEO-INJECTION.md (legacy sync)");
64528
+ }
64498
64529
  }
64499
64530
  }
64531
+ function sanitizeCaampFile(content) {
64532
+ let cleaned = content.replace(/(<!-- CAAMP:END -->)\s*(<!-- CAAMP:END -->)/g, "$1");
64533
+ cleaned = cleaned.replace(
64534
+ /<!-- CAAMP:END -->\s*[A-Z][A-Za-z-]*\.md\s*(?:<!-- CAAMP:END -->)?/g,
64535
+ "<!-- CAAMP:END -->"
64536
+ );
64537
+ cleaned = cleaned.replace(/^[A-Z][A-Za-z-]*\.md\s*$/gm, "");
64538
+ cleaned = cleaned.replace(/\n{3,}/g, "\n\n");
64539
+ return cleaned.trim() + "\n";
64540
+ }
64500
64541
  async function injectAgentsHub(ctx) {
64501
64542
  const globalAgentsDir = getAgentsHome();
64502
64543
  const globalAgentsMd = join104(globalAgentsDir, "AGENTS.md");
@@ -64510,13 +64551,23 @@ async function injectAgentsHub(ctx) {
64510
64551
  /\n?<!-- CLEO:START[^>]*-->[\s\S]*?<!-- CLEO:END -->\n?/g,
64511
64552
  ""
64512
64553
  );
64513
- if (stripped !== content) {
64514
- await writeFile12(globalAgentsMd, stripped, "utf8");
64554
+ const sanitized = sanitizeCaampFile(stripped);
64555
+ if (sanitized !== content) {
64556
+ await writeFile12(globalAgentsMd, sanitized, "utf8");
64557
+ ctx.created.push("~/.agents/AGENTS.md (sanitized CAAMP corruption)");
64515
64558
  }
64516
64559
  }
64517
64560
  const templateRef = `@${getCleoTemplatesTildePath()}/CLEO-INJECTION.md`;
64518
64561
  const action = await inject2(globalAgentsMd, templateRef);
64519
64562
  ctx.created.push(`~/.agents/AGENTS.md (${action})`);
64563
+ const postContent = await readFile19(globalAgentsMd, "utf8");
64564
+ const caampBlocks = postContent.match(/<!-- CAAMP:START -->/g);
64565
+ const caampEnds = postContent.match(/<!-- CAAMP:END -->/g);
64566
+ if (caampBlocks && caampEnds && caampBlocks.length !== caampEnds.length) {
64567
+ ctx.warnings.push(
64568
+ `~/.agents/AGENTS.md has mismatched CAAMP markers (${caampBlocks.length} START vs ${caampEnds.length} END)`
64569
+ );
64570
+ }
64520
64571
  } else {
64521
64572
  ctx.created.push("~/.agents/AGENTS.md (would create/update CAAMP block)");
64522
64573
  }
@@ -64650,6 +64701,45 @@ async function installProviderAdapters(ctx, packageRootOverride) {
64650
64701
  );
64651
64702
  }
64652
64703
  }
64704
+ async function verifyBootstrapHealth(ctx) {
64705
+ if (ctx.isDryRun) return;
64706
+ try {
64707
+ const xdgTemplatePath = join104(getCleoTemplatesDir(), "CLEO-INJECTION.md");
64708
+ const agentsMd = join104(getAgentsHome(), "AGENTS.md");
64709
+ if (!existsSync103(xdgTemplatePath)) {
64710
+ ctx.warnings.push("Health: XDG template missing after bootstrap");
64711
+ return;
64712
+ }
64713
+ const xdgContent = await readFile19(xdgTemplatePath, "utf8");
64714
+ const xdgVersion = xdgContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
64715
+ const home = homedir6();
64716
+ const legacyTemplatePath = join104(home, ".cleo", "templates", "CLEO-INJECTION.md");
64717
+ if (existsSync103(legacyTemplatePath)) {
64718
+ const legacyContent = await readFile19(legacyTemplatePath, "utf8");
64719
+ const legacyVersion = legacyContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
64720
+ if (legacyVersion !== xdgVersion) {
64721
+ ctx.warnings.push(
64722
+ `Health: Legacy template version (${legacyVersion}) != XDG version (${xdgVersion})`
64723
+ );
64724
+ }
64725
+ }
64726
+ if (existsSync103(agentsMd)) {
64727
+ const agentsContent = await readFile19(agentsMd, "utf8");
64728
+ const expectedRef = `@${getCleoTemplatesTildePath()}/CLEO-INJECTION.md`;
64729
+ if (!agentsContent.includes(expectedRef)) {
64730
+ ctx.warnings.push(`Health: ~/.agents/AGENTS.md does not reference ${expectedRef}`);
64731
+ }
64732
+ const outsideCaamp = agentsContent.replace(
64733
+ /<!-- CAAMP:START -->[\s\S]*?<!-- CAAMP:END -->/g,
64734
+ ""
64735
+ );
64736
+ if (/[A-Z][A-Za-z-]*\.md/.test(outsideCaamp)) {
64737
+ ctx.warnings.push("Health: ~/.agents/AGENTS.md has orphaned content outside CAAMP blocks");
64738
+ }
64739
+ }
64740
+ } catch {
64741
+ }
64742
+ }
64653
64743
 
64654
64744
  // packages/core/src/cleo.ts
64655
64745
  import path from "node:path";
@@ -64724,7 +64814,10 @@ var Cleo = class _Cleo {
64724
64814
  ),
64725
64815
  complete: (p) => completeTask({ taskId: p.taskId, notes: p.notes }, root, store),
64726
64816
  delete: (p) => deleteTask({ taskId: p.taskId, force: p.force }, root, store),
64727
- archive: (p) => archiveTasks({ before: p?.before, taskIds: p?.taskIds, dryRun: p?.dryRun }, root, store)
64817
+ archive: (p) => archiveTasks({ before: p?.before, taskIds: p?.taskIds, dryRun: p?.dryRun }, root, store),
64818
+ start: (taskId) => startTask(taskId, root, store),
64819
+ stop: () => stopTask(root, store),
64820
+ current: () => currentTask(root, store)
64728
64821
  };
64729
64822
  }
64730
64823
  // === Sessions ===
@@ -64732,7 +64825,11 @@ var Cleo = class _Cleo {
64732
64825
  const root = this.projectRoot;
64733
64826
  const store = this._store ?? void 0;
64734
64827
  return {
64735
- start: (p) => startSession({ name: p.name, scope: p.scope, agent: p.agent }, root, store),
64828
+ start: (p) => startSession(
64829
+ { name: p.name, scope: p.scope, agent: p.agent, startTask: p.startTask },
64830
+ root,
64831
+ store
64832
+ ),
64736
64833
  end: (p) => endSession({ note: p?.note }, root, store),
64737
64834
  status: () => sessionStatus(root, store),
64738
64835
  resume: (id) => resumeSession(id, root, store),
@@ -64870,6 +64967,35 @@ var Cleo = class _Cleo {
64870
64967
  sharingStatus: () => getSharingStatus()
64871
64968
  };
64872
64969
  }
64970
+ // === Agents ===
64971
+ get agents() {
64972
+ const root = this.projectRoot;
64973
+ return {
64974
+ register: (opts) => registerAgent(opts, root),
64975
+ deregister: (agentId) => deregisterAgent(agentId, root),
64976
+ health: (agentId) => checkAgentHealth2(agentId, void 0, root),
64977
+ detectCrashed: (thresholdMs) => detectCrashedAgents(thresholdMs, root),
64978
+ recordHeartbeat: (agentId) => heartbeat(agentId, root),
64979
+ capacity: (agentId) => getAgentCapacity(agentId, root),
64980
+ isOverloaded: (threshold) => isOverloaded(threshold, root),
64981
+ list: (p) => listAgentInstances(
64982
+ {
64983
+ status: p?.status,
64984
+ agentType: p?.agentType
64985
+ },
64986
+ root
64987
+ )
64988
+ };
64989
+ }
64990
+ // === Intelligence ===
64991
+ get intelligence() {
64992
+ const root = this.projectRoot;
64993
+ const store = this._store ?? void 0;
64994
+ return {
64995
+ predictImpact: (change) => predictImpact(change, root, store ?? void 0),
64996
+ blastRadius: (taskId) => calculateBlastRadius(taskId, store ?? void 0, root)
64997
+ };
64998
+ }
64873
64999
  // === Sync (Task Reconciliation) ===
64874
65000
  get sync() {
64875
65001
  const root = this.projectRoot;