@cleocode/core 2026.3.76 → 2026.4.2

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 (473) hide show
  1. package/dist/agents/agent-schema.d.ts.map +1 -1
  2. package/dist/audit.d.ts +1 -1
  3. package/dist/audit.d.ts.map +1 -1
  4. package/dist/bootstrap.d.ts +2 -2
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/caamp/adapter.d.ts +6 -49
  7. package/dist/caamp/adapter.d.ts.map +1 -1
  8. package/dist/caamp/index.d.ts +2 -2
  9. package/dist/caamp/index.d.ts.map +1 -1
  10. package/dist/code/index.d.ts +10 -0
  11. package/dist/code/index.d.ts.map +1 -0
  12. package/dist/code/outline.d.ts +51 -0
  13. package/dist/code/outline.d.ts.map +1 -0
  14. package/dist/code/parser.d.ts +32 -0
  15. package/dist/code/parser.d.ts.map +1 -0
  16. package/dist/code/search.d.ts +42 -0
  17. package/dist/code/search.d.ts.map +1 -0
  18. package/dist/code/unfold.d.ts +44 -0
  19. package/dist/code/unfold.d.ts.map +1 -0
  20. package/dist/compliance/protocol-enforcement.d.ts +1 -1
  21. package/dist/compliance/protocol-rules.d.ts +1 -1
  22. package/dist/compliance/protocol-types.d.ts +2 -3
  23. package/dist/compliance/protocol-types.d.ts.map +1 -1
  24. package/dist/conduit/conduit-client.d.ts +14 -0
  25. package/dist/conduit/conduit-client.d.ts.map +1 -1
  26. package/dist/conduit/factory.d.ts +11 -1
  27. package/dist/conduit/factory.d.ts.map +1 -1
  28. package/dist/conduit/http-transport.d.ts +17 -5
  29. package/dist/conduit/http-transport.d.ts.map +1 -1
  30. package/dist/conduit/index.d.ts +5 -2
  31. package/dist/conduit/index.d.ts.map +1 -1
  32. package/dist/conduit/local-transport.d.ts +91 -0
  33. package/dist/conduit/local-transport.d.ts.map +1 -0
  34. package/dist/conduit/sse-transport.d.ts +68 -0
  35. package/dist/conduit/sse-transport.d.ts.map +1 -0
  36. package/dist/crypto/credentials.d.ts.map +1 -1
  37. package/dist/error-catalog.d.ts +3 -3
  38. package/dist/error-catalog.d.ts.map +1 -1
  39. package/dist/errors.d.ts +1 -1
  40. package/dist/hooks/handlers/index.d.ts +2 -2
  41. package/dist/hooks/handlers/index.d.ts.map +1 -1
  42. package/dist/hooks/handlers/notification-hooks.d.ts +31 -0
  43. package/dist/hooks/handlers/notification-hooks.d.ts.map +1 -0
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +4646 -3476
  47. package/dist/index.js.map +4 -4
  48. package/dist/init.d.ts +6 -6
  49. package/dist/init.d.ts.map +1 -1
  50. package/dist/injection.d.ts.map +1 -1
  51. package/dist/internal.d.ts +7 -5
  52. package/dist/internal.d.ts.map +1 -1
  53. package/dist/lib/index.d.ts +1 -0
  54. package/dist/lib/index.d.ts.map +1 -1
  55. package/dist/lib/tree-sitter-languages.d.ts +29 -0
  56. package/dist/lib/tree-sitter-languages.d.ts.map +1 -0
  57. package/dist/logger.d.ts +3 -3
  58. package/dist/memory/brain-links.d.ts.map +1 -1
  59. package/dist/memory/brain-maintenance.d.ts +13 -0
  60. package/dist/memory/brain-maintenance.d.ts.map +1 -1
  61. package/dist/memory/brain-retrieval.d.ts +1 -1
  62. package/dist/memory/brain-retrieval.d.ts.map +1 -1
  63. package/dist/memory/decisions.d.ts.map +1 -1
  64. package/dist/memory/engine-compat.d.ts +392 -25
  65. package/dist/memory/engine-compat.d.ts.map +1 -1
  66. package/dist/memory/index.d.ts +416 -3
  67. package/dist/memory/index.d.ts.map +1 -1
  68. package/dist/metrics/token-service.d.ts +3 -3
  69. package/dist/metrics/token-service.d.ts.map +1 -1
  70. package/dist/orchestration/hierarchy.d.ts +32 -0
  71. package/dist/orchestration/hierarchy.d.ts.map +1 -0
  72. package/dist/orchestration/index.d.ts +1 -0
  73. package/dist/orchestration/index.d.ts.map +1 -1
  74. package/dist/paths.d.ts +335 -2
  75. package/dist/paths.d.ts.map +1 -1
  76. package/dist/routing/capability-matrix.d.ts +3 -3
  77. package/dist/routing/capability-matrix.d.ts.map +1 -1
  78. package/dist/scaffold.d.ts +422 -11
  79. package/dist/scaffold.d.ts.map +1 -1
  80. package/dist/security/input-sanitization.d.ts +2 -2
  81. package/dist/skills/dynamic-skill-generator.d.ts +3 -2
  82. package/dist/skills/dynamic-skill-generator.d.ts.map +1 -1
  83. package/dist/skills/routing-table.d.ts +4 -4
  84. package/dist/skills/routing-table.d.ts.map +1 -1
  85. package/dist/store/agent-registry-accessor.d.ts +10 -433
  86. package/dist/store/agent-registry-accessor.d.ts.map +1 -1
  87. package/dist/store/cross-db-cleanup.d.ts +34 -0
  88. package/dist/store/cross-db-cleanup.d.ts.map +1 -1
  89. package/dist/store/provider.d.ts +1 -1
  90. package/dist/store/signaldock-sqlite.d.ts.map +1 -1
  91. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  92. package/dist/store/sqlite.d.ts +1 -1
  93. package/dist/store/task-store.d.ts.map +1 -1
  94. package/dist/store/tasks-schema.d.ts +4 -228
  95. package/dist/store/tasks-schema.d.ts.map +1 -1
  96. package/dist/store/validation-schemas.d.ts +4 -5
  97. package/dist/store/validation-schemas.d.ts.map +1 -1
  98. package/dist/system/archive-analytics.d.ts +1 -1
  99. package/dist/system/health.d.ts +2 -2
  100. package/dist/system/health.d.ts.map +1 -1
  101. package/dist/system/runtime.d.ts +2 -1
  102. package/dist/system/runtime.d.ts.map +1 -1
  103. package/dist/tasks/list.d.ts +1 -1
  104. package/dist/tasks/list.d.ts.map +1 -1
  105. package/dist/tasks/task-ops.d.ts +415 -3
  106. package/dist/tasks/task-ops.d.ts.map +1 -1
  107. package/dist/templates/parser.d.ts +1 -1
  108. package/dist/ui/index.d.ts +1 -1
  109. package/dist/upgrade.d.ts +1 -1
  110. package/dist/upgrade.d.ts.map +1 -1
  111. package/dist/validation/operation-gate-validators.d.ts +1 -1
  112. package/dist/validation/operation-verification-gates.d.ts +3 -3
  113. package/dist/validation/param-utils.d.ts +6 -5
  114. package/dist/validation/param-utils.d.ts.map +1 -1
  115. package/dist/validation/validate-ops.d.ts +1 -1
  116. package/dist/validation/validate-ops.d.ts.map +1 -1
  117. package/package.json +19 -7
  118. package/src/__tests__/caamp-skill-install.test.js +0 -15
  119. package/src/__tests__/caamp-skill-install.test.js.map +1 -1
  120. package/src/__tests__/caamp-skill-install.test.ts +0 -16
  121. package/src/__tests__/injection-mvi-tiers.test.js +7 -7
  122. package/src/__tests__/injection-mvi-tiers.test.js.map +1 -1
  123. package/src/__tests__/injection-mvi-tiers.test.ts +55 -103
  124. package/src/agents/agent-schema.ts +2 -5
  125. package/src/audit.ts +2 -2
  126. package/src/bootstrap.ts +5 -39
  127. package/src/caamp/adapter.ts +3 -219
  128. package/src/caamp/index.ts +1 -13
  129. package/src/cant/__tests__/cant-agent-parse.test.d.ts.map +1 -0
  130. package/src/cant/__tests__/cant-agent-parse.test.js +77 -0
  131. package/src/cant/__tests__/cant-agent-parse.test.js.map +1 -0
  132. package/src/code/index.ts +10 -0
  133. package/src/code/outline.ts +214 -0
  134. package/src/code/parser.ts +331 -0
  135. package/src/code/search.ts +173 -0
  136. package/src/code/unfold.ts +204 -0
  137. package/src/codebase-map/analyzers/architecture.ts +2 -2
  138. package/src/compliance/protocol-enforcement.ts +1 -1
  139. package/src/compliance/protocol-rules.ts +1 -1
  140. package/src/compliance/protocol-types.ts +2 -3
  141. package/src/conduit/__tests__/dual-api-e2e.test.d.ts.map +1 -0
  142. package/src/conduit/__tests__/dual-api-e2e.test.js +178 -0
  143. package/src/conduit/__tests__/dual-api-e2e.test.js.map +1 -0
  144. package/src/conduit/__tests__/dual-api-e2e.test.ts +212 -0
  145. package/src/conduit/__tests__/local-credential-flow.test.d.ts.map +1 -0
  146. package/src/conduit/__tests__/local-credential-flow.test.js +185 -0
  147. package/src/conduit/__tests__/local-credential-flow.test.js.map +1 -0
  148. package/src/conduit/__tests__/local-credential-flow.test.ts +230 -0
  149. package/src/conduit/__tests__/local-transport.test.d.ts.map +1 -0
  150. package/src/conduit/__tests__/local-transport.test.js +404 -0
  151. package/src/conduit/__tests__/local-transport.test.js.map +1 -0
  152. package/src/conduit/__tests__/local-transport.test.ts +509 -0
  153. package/src/conduit/__tests__/sse-transport.test.d.ts.map +1 -0
  154. package/src/conduit/__tests__/sse-transport.test.js +291 -0
  155. package/src/conduit/__tests__/sse-transport.test.js.map +1 -0
  156. package/src/conduit/__tests__/sse-transport.test.ts +344 -0
  157. package/src/conduit/conduit-client.ts +14 -0
  158. package/src/conduit/factory.ts +29 -8
  159. package/src/conduit/http-transport.ts +78 -16
  160. package/src/conduit/index.ts +5 -2
  161. package/src/conduit/local-transport.ts +309 -0
  162. package/src/conduit/sse-transport.ts +382 -0
  163. package/src/crypto/credentials.ts +59 -13
  164. package/src/error-catalog.ts +3 -3
  165. package/src/errors.ts +1 -1
  166. package/src/hooks/__tests__/provider-hooks.test.js +4 -4
  167. package/src/hooks/__tests__/provider-hooks.test.js.map +1 -1
  168. package/src/hooks/__tests__/provider-hooks.test.ts +4 -4
  169. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js +2 -2
  170. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js.map +1 -1
  171. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.ts +6 -4
  172. package/src/hooks/handlers/index.ts +2 -6
  173. package/src/hooks/handlers/notification-hooks.ts +65 -0
  174. package/src/index.ts +2 -1
  175. package/src/init.ts +14 -54
  176. package/src/injection.ts +4 -3
  177. package/src/internal.ts +7 -5
  178. package/src/lib/index.ts +8 -0
  179. package/src/lib/tree-sitter-languages.ts +88 -0
  180. package/src/logger.ts +5 -5
  181. package/src/memory/__tests__/brain-links.test.js +13 -0
  182. package/src/memory/__tests__/brain-links.test.js.map +1 -1
  183. package/src/memory/__tests__/brain-links.test.ts +14 -0
  184. package/src/memory/__tests__/brain-retrieval.test.js +9 -0
  185. package/src/memory/__tests__/brain-retrieval.test.js.map +1 -1
  186. package/src/memory/__tests__/brain-retrieval.test.ts +10 -0
  187. package/src/memory/__tests__/session-memory.test.js +16 -0
  188. package/src/memory/__tests__/session-memory.test.js.map +1 -1
  189. package/src/memory/__tests__/session-memory.test.ts +17 -0
  190. package/src/memory/brain-links.ts +17 -0
  191. package/src/memory/brain-maintenance.ts +33 -1
  192. package/src/memory/brain-retrieval.ts +19 -3
  193. package/src/memory/decisions.ts +18 -2
  194. package/src/memory/engine-compat.ts +392 -25
  195. package/src/memory/index.ts +417 -4
  196. package/src/metrics/token-service.ts +4 -4
  197. package/src/migration/index.ts +1 -1
  198. package/src/orchestration/hierarchy.ts +202 -0
  199. package/src/orchestration/index.ts +1 -0
  200. package/src/paths.ts +340 -5
  201. package/src/routing/capability-matrix.ts +49 -49
  202. package/src/scaffold.ts +428 -70
  203. package/src/security/input-sanitization.ts +4 -4
  204. package/src/sessions/__tests__/session-grade.integration.test.js +9 -9
  205. package/src/sessions/__tests__/session-grade.integration.test.ts +9 -9
  206. package/src/sessions/__tests__/session-grade.test.js +10 -10
  207. package/src/sessions/__tests__/session-grade.test.js.map +1 -1
  208. package/src/sessions/__tests__/session-grade.test.ts +10 -10
  209. package/src/sessions/session-grade.ts +4 -4
  210. package/src/skills/__tests__/dynamic-skill-generator.test.js +24 -26
  211. package/src/skills/__tests__/dynamic-skill-generator.test.js.map +1 -1
  212. package/src/skills/__tests__/dynamic-skill-generator.test.ts +24 -26
  213. package/src/skills/__tests__/routing-table.test.js +22 -22
  214. package/src/skills/__tests__/routing-table.test.js.map +1 -1
  215. package/src/skills/__tests__/routing-table.test.ts +23 -23
  216. package/src/skills/dynamic-skill-generator.ts +13 -24
  217. package/src/skills/routing-table.ts +4 -4
  218. package/src/store/__tests__/data-safety-central.test.js +8 -0
  219. package/src/store/__tests__/data-safety-central.test.js.map +1 -1
  220. package/src/store/__tests__/data-safety-central.test.ts +8 -0
  221. package/src/store/__tests__/safety-accessor.test.js +8 -0
  222. package/src/store/__tests__/safety-accessor.test.js.map +1 -1
  223. package/src/store/__tests__/safety-accessor.test.ts +8 -0
  224. package/src/store/agent-registry-accessor.ts +284 -108
  225. package/src/store/cross-db-cleanup.ts +175 -1
  226. package/src/store/provider.ts +2 -2
  227. package/src/store/signaldock-sqlite.ts +262 -60
  228. package/src/store/sqlite-data-accessor.ts +3 -0
  229. package/src/store/sqlite.ts +2 -2
  230. package/src/store/task-store.ts +8 -1
  231. package/src/store/tasks-schema.ts +5 -40
  232. package/src/system/__tests__/health.test.js +2 -2
  233. package/src/system/__tests__/health.test.js.map +1 -1
  234. package/src/system/__tests__/health.test.ts +2 -2
  235. package/src/system/archive-analytics.ts +1 -1
  236. package/src/system/health.ts +43 -19
  237. package/src/system/inject-generate.ts +20 -20
  238. package/src/system/runtime.ts +5 -4
  239. package/src/tasks/atomicity.ts +1 -1
  240. package/src/tasks/list.ts +1 -1
  241. package/src/tasks/task-ops.ts +415 -3
  242. package/src/templates/parser.ts +1 -1
  243. package/src/ui/index.ts +4 -4
  244. package/src/upgrade.ts +3 -14
  245. package/src/validation/operation-gate-validators.ts +1 -1
  246. package/src/validation/operation-verification-gates.ts +3 -3
  247. package/src/validation/param-utils.ts +11 -10
  248. package/src/validation/validate-ops.ts +6 -6
  249. package/templates/CLEO-INJECTION.md +38 -110
  250. package/dist/hooks/handlers/mcp-hooks.d.ts +0 -48
  251. package/dist/hooks/handlers/mcp-hooks.d.ts.map +0 -1
  252. package/dist/mcp/index.d.ts +0 -42
  253. package/dist/mcp/index.d.ts.map +0 -1
  254. package/src/__tests__/audit-prune.test.d.ts +0 -2
  255. package/src/__tests__/caamp-skill-install.test.d.ts +0 -14
  256. package/src/__tests__/cli-mcp-parity.integration.test.d.ts +0 -34
  257. package/src/__tests__/cli-mcp-parity.integration.test.d.ts.map +0 -1
  258. package/src/__tests__/cli-mcp-parity.integration.test.js +0 -898
  259. package/src/__tests__/cli-mcp-parity.integration.test.js.map +0 -1
  260. package/src/__tests__/cli-parity.test.d.ts +0 -9
  261. package/src/__tests__/config.test.d.ts +0 -7
  262. package/src/__tests__/core-parity.test.d.ts +0 -17
  263. package/src/__tests__/error-catalog.test.d.ts +0 -2
  264. package/src/__tests__/golden-parity.test.d.ts +0 -12
  265. package/src/__tests__/hooks.test.d.ts +0 -5
  266. package/src/__tests__/human-output.test.d.ts +0 -12
  267. package/src/__tests__/index-api-compat.test.d.ts +0 -2
  268. package/src/__tests__/init-e2e.test.d.ts +0 -12
  269. package/src/__tests__/injection-chain.test.d.ts +0 -18
  270. package/src/__tests__/injection-mvi-tiers.test.d.ts +0 -14
  271. package/src/__tests__/injection-shared.test.d.ts +0 -10
  272. package/src/__tests__/lafs-conformance.test.d.ts +0 -18
  273. package/src/__tests__/logger.test.d.ts +0 -2
  274. package/src/__tests__/mcp-install-verify.test.d.ts +0 -13
  275. package/src/__tests__/mcp-install-verify.test.d.ts.map +0 -1
  276. package/src/__tests__/mcp-install-verify.test.js +0 -177
  277. package/src/__tests__/mcp-install-verify.test.js.map +0 -1
  278. package/src/__tests__/mcp-install-verify.test.ts +0 -217
  279. package/src/__tests__/paths.test.d.ts +0 -7
  280. package/src/__tests__/project-info.test.d.ts +0 -2
  281. package/src/__tests__/rcsd-pipeline-e2e.test.d.ts +0 -14
  282. package/src/__tests__/remote.test.d.ts +0 -6
  283. package/src/__tests__/scaffold.test.d.ts +0 -6
  284. package/src/__tests__/schema-management.test.d.ts +0 -5
  285. package/src/__tests__/schema.test.d.ts +0 -2
  286. package/src/__tests__/sharing.test.d.ts +0 -6
  287. package/src/__tests__/snapshot.test.d.ts +0 -6
  288. package/src/__tests__/upgrade.test.d.ts +0 -7
  289. package/src/adapters/__tests__/discovery.test.d.ts +0 -6
  290. package/src/adapters/__tests__/manager.test.d.ts +0 -6
  291. package/src/agents/__tests__/agent-registry.test.d.ts +0 -12
  292. package/src/agents/__tests__/capacity.test.d.ts +0 -7
  293. package/src/agents/__tests__/execution-learning.test.d.ts +0 -14
  294. package/src/agents/__tests__/health-monitor.test.d.ts +0 -10
  295. package/src/agents/__tests__/registry.test.d.ts +0 -8
  296. package/src/agents/__tests__/retry.test.d.ts +0 -7
  297. package/src/compliance/__tests__/sync.test.d.ts +0 -5
  298. package/src/hooks/__tests__/provider-hooks.test.d.ts +0 -2
  299. package/src/hooks/__tests__/registry.test.d.ts +0 -2
  300. package/src/hooks/handlers/__tests__/error-hooks.test.d.ts +0 -2
  301. package/src/hooks/handlers/__tests__/file-hooks.test.d.ts +0 -2
  302. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts +0 -13
  303. package/src/hooks/handlers/__tests__/mcp-hooks.test.d.ts +0 -2
  304. package/src/hooks/handlers/__tests__/mcp-hooks.test.d.ts.map +0 -1
  305. package/src/hooks/handlers/__tests__/mcp-hooks.test.js +0 -119
  306. package/src/hooks/handlers/__tests__/mcp-hooks.test.js.map +0 -1
  307. package/src/hooks/handlers/__tests__/mcp-hooks.test.ts +0 -150
  308. package/src/hooks/handlers/__tests__/session-hooks.test.d.ts +0 -2
  309. package/src/hooks/handlers/__tests__/task-hooks.test.d.ts +0 -2
  310. package/src/hooks/handlers/mcp-hooks.ts +0 -162
  311. package/src/intelligence/__tests__/adaptive-validation.test.d.ts +0 -11
  312. package/src/intelligence/__tests__/impact.test.d.ts +0 -16
  313. package/src/intelligence/__tests__/patterns.test.d.ts +0 -8
  314. package/src/intelligence/__tests__/prediction.test.d.ts +0 -8
  315. package/src/lib/__tests__/retry.test.d.ts +0 -7
  316. package/src/lifecycle/__tests__/chain-store.test.d.ts +0 -10
  317. package/src/lifecycle/__tests__/consolidate-rcasd.test.d.ts +0 -7
  318. package/src/lifecycle/__tests__/default-chain.test.d.ts +0 -7
  319. package/src/lifecycle/__tests__/frontmatter.test.d.ts +0 -7
  320. package/src/lifecycle/__tests__/lifecycle.test.d.ts +0 -7
  321. package/src/lifecycle/__tests__/pipeline.integration.test.d.ts +0 -19
  322. package/src/lifecycle/__tests__/rcasd-paths.test.d.ts +0 -7
  323. package/src/lifecycle/__tests__/resume-schema-contract.test.d.ts +0 -16
  324. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.d.ts +0 -7
  325. package/src/lifecycle/__tests__/tessera-engine.test.d.ts +0 -10
  326. package/src/mcp/index.ts +0 -163
  327. package/src/memory/__tests__/auto-extract.test.d.ts +0 -7
  328. package/src/memory/__tests__/brain-automation.test.d.ts +0 -11
  329. package/src/memory/__tests__/brain-embedding.test.d.ts +0 -2
  330. package/src/memory/__tests__/brain-links.test.d.ts +0 -8
  331. package/src/memory/__tests__/brain-migration.test.d.ts +0 -8
  332. package/src/memory/__tests__/brain-retrieval.test.d.ts +0 -10
  333. package/src/memory/__tests__/brain-search.test.d.ts +0 -8
  334. package/src/memory/__tests__/claude-mem-migration.test.d.ts +0 -12
  335. package/src/memory/__tests__/decisions.test.d.ts +0 -8
  336. package/src/memory/__tests__/engine-compat.test.d.ts +0 -12
  337. package/src/memory/__tests__/memory-bridge.test.d.ts +0 -10
  338. package/src/memory/__tests__/pipeline-manifest-sqlite.test.d.ts +0 -13
  339. package/src/memory/__tests__/session-memory.test.d.ts +0 -9
  340. package/src/metrics/__tests__/model-provider-registry.test.d.ts +0 -2
  341. package/src/metrics/__tests__/provider-detection.test.d.ts +0 -2
  342. package/src/migration/__tests__/checksum.test.d.ts +0 -8
  343. package/src/migration/__tests__/logger.test.d.ts +0 -5
  344. package/src/migration/__tests__/migration-failure.integration.test.d.ts +0 -15
  345. package/src/migration/__tests__/migration.test.d.ts +0 -13
  346. package/src/migration/__tests__/state.test.d.ts +0 -8
  347. package/src/migration/__tests__/validate.test.d.ts +0 -8
  348. package/src/nexus/__tests__/deps.test.d.ts +0 -7
  349. package/src/nexus/__tests__/nexus-e2e.test.d.ts +0 -12
  350. package/src/nexus/__tests__/permissions.test.d.ts +0 -7
  351. package/src/nexus/__tests__/query.test.d.ts +0 -7
  352. package/src/nexus/__tests__/reconcile.test.d.ts +0 -7
  353. package/src/nexus/__tests__/registry.test.d.ts +0 -7
  354. package/src/nexus/__tests__/transfer.test.d.ts +0 -8
  355. package/src/observability/__tests__/index.test.d.ts +0 -7
  356. package/src/observability/__tests__/log-filter.test.d.ts +0 -7
  357. package/src/observability/__tests__/log-parser.test.d.ts +0 -7
  358. package/src/observability/__tests__/log-reader.test.d.ts +0 -7
  359. package/src/orchestration/__tests__/autonomous-spec.test.d.ts +0 -9
  360. package/src/orchestration/__tests__/orchestration.test.d.ts +0 -7
  361. package/src/orchestration/__tests__/protocol-validators.test.d.ts +0 -9
  362. package/src/phases/__tests__/deps.test.d.ts +0 -7
  363. package/src/phases/__tests__/phases.test.d.ts +0 -7
  364. package/src/release/__tests__/artifacts.test.d.ts +0 -7
  365. package/src/release/__tests__/cancel-release.test.d.ts +0 -10
  366. package/src/release/__tests__/changelog-writer.test.d.ts +0 -6
  367. package/src/release/__tests__/push-policy.test.d.ts +0 -14
  368. package/src/release/__tests__/release.test.d.ts +0 -11
  369. package/src/sequence/__tests__/allocate.test.d.ts +0 -6
  370. package/src/sessions/__tests__/briefing-blocked.test.d.ts +0 -6
  371. package/src/sessions/__tests__/briefing.test.d.ts +0 -11
  372. package/src/sessions/__tests__/handoff-integration.test.d.ts +0 -8
  373. package/src/sessions/__tests__/handoff.test.d.ts +0 -11
  374. package/src/sessions/__tests__/index.test.d.ts +0 -2
  375. package/src/sessions/__tests__/session-cleanup.test.d.ts +0 -7
  376. package/src/sessions/__tests__/session-edge-cases.test.d.ts +0 -9
  377. package/src/sessions/__tests__/session-find.test.d.ts +0 -9
  378. package/src/sessions/__tests__/session-grade.integration.test.d.ts +0 -11
  379. package/src/sessions/__tests__/session-grade.test.d.ts +0 -6
  380. package/src/sessions/__tests__/session-memory-bridge.test.d.ts +0 -2
  381. package/src/sessions/__tests__/sessions.test.d.ts +0 -7
  382. package/src/skills/__tests__/discovery.test.d.ts +0 -6
  383. package/src/skills/__tests__/dispatch.test.d.ts +0 -6
  384. package/src/skills/__tests__/dynamic-skill-generator.test.d.ts +0 -2
  385. package/src/skills/__tests__/manifests.test.d.ts +0 -6
  386. package/src/skills/__tests__/precedence.test.d.ts +0 -6
  387. package/src/skills/__tests__/routing-table.test.d.ts +0 -2
  388. package/src/skills/__tests__/skill-paths.test.d.ts +0 -7
  389. package/src/skills/__tests__/test-utility.test.d.ts +0 -7
  390. package/src/skills/__tests__/token.test.d.ts +0 -6
  391. package/src/skills/__tests__/validation.test.d.ts +0 -6
  392. package/src/skills/__tests__/version.test.d.ts +0 -5
  393. package/src/skills/injection/__tests__/subagent.test.d.ts +0 -2
  394. package/src/skills/orchestrator/__tests__/spawn-tier.test.d.ts +0 -2
  395. package/src/spawn/__tests__/adapter-registry.test.d.ts +0 -2
  396. package/src/stats/__tests__/stats.test.d.ts +0 -7
  397. package/src/sticky/__tests__/purge.test.d.ts +0 -9
  398. package/src/store/__tests__/atomic.test.d.ts +0 -7
  399. package/src/store/__tests__/backup.test.d.ts +0 -7
  400. package/src/store/__tests__/brain-accessor-pageindex.test.d.ts +0 -12
  401. package/src/store/__tests__/brain-accessor.test.d.ts +0 -10
  402. package/src/store/__tests__/brain-pageindex.test.d.ts +0 -11
  403. package/src/store/__tests__/brain-schema.test.d.ts +0 -11
  404. package/src/store/__tests__/brain-vec.test.d.ts +0 -11
  405. package/src/store/__tests__/collision-detection.test.d.ts +0 -11
  406. package/src/store/__tests__/data-safety-central.test.d.ts +0 -20
  407. package/src/store/__tests__/db-helpers.test.d.ts +0 -7
  408. package/src/store/__tests__/e2e-safety-integration.test.d.ts +0 -13
  409. package/src/store/__tests__/git-checkpoint.test.d.ts +0 -7
  410. package/src/store/__tests__/idempotent-migration.test.d.ts +0 -5
  411. package/src/store/__tests__/import-logging.test.d.ts +0 -7
  412. package/src/store/__tests__/import-sort.test.d.ts +0 -7
  413. package/src/store/__tests__/json.test.d.ts +0 -7
  414. package/src/store/__tests__/lifecycle-schema-parity.test.d.ts +0 -2
  415. package/src/store/__tests__/migration-integration.test.d.ts +0 -15
  416. package/src/store/__tests__/migration-retry.test.d.ts +0 -10
  417. package/src/store/__tests__/migration-safety.test.d.ts +0 -21
  418. package/src/store/__tests__/migration-sqlite.test.d.ts +0 -11
  419. package/src/store/__tests__/performance-safety.test.d.ts +0 -17
  420. package/src/store/__tests__/project-detect.test.d.ts +0 -6
  421. package/src/store/__tests__/project-registry.test.d.ts +0 -7
  422. package/src/store/__tests__/provider.test.d.ts +0 -9
  423. package/src/store/__tests__/relations.test.d.ts +0 -9
  424. package/src/store/__tests__/safety-accessor.test.d.ts +0 -18
  425. package/src/store/__tests__/sequence-validation.test.d.ts +0 -11
  426. package/src/store/__tests__/session-store.test.d.ts +0 -11
  427. package/src/store/__tests__/sqlite-backup.test.d.ts +0 -14
  428. package/src/store/__tests__/sqlite.test.d.ts +0 -11
  429. package/src/store/__tests__/task-store.test.d.ts +0 -11
  430. package/src/store/__tests__/test-db-helper.d.ts +0 -61
  431. package/src/store/__tests__/write-verification.test.d.ts +0 -11
  432. package/src/system/__tests__/cleanup.test.d.ts +0 -2
  433. package/src/system/__tests__/health.test.d.ts +0 -2
  434. package/src/task-work/__tests__/start-deps.test.d.ts +0 -6
  435. package/src/tasks/__tests__/add.test.d.ts +0 -7
  436. package/src/tasks/__tests__/archive.test.d.ts +0 -7
  437. package/src/tasks/__tests__/assignee.test.d.ts +0 -14
  438. package/src/tasks/__tests__/atomicity.test.d.ts +0 -6
  439. package/src/tasks/__tests__/cancel-ops.test.d.ts +0 -7
  440. package/src/tasks/__tests__/complete-unblocks.test.d.ts +0 -6
  441. package/src/tasks/__tests__/complete.test.d.ts +0 -7
  442. package/src/tasks/__tests__/delete.test.d.ts +0 -7
  443. package/src/tasks/__tests__/dependency-check.test.d.ts +0 -7
  444. package/src/tasks/__tests__/deps-ready.test.d.ts +0 -6
  445. package/src/tasks/__tests__/epic-enforcement.test.d.ts +0 -15
  446. package/src/tasks/__tests__/find.test.d.ts +0 -7
  447. package/src/tasks/__tests__/graph-ops.test.d.ts +0 -7
  448. package/src/tasks/__tests__/hierarchy-policy.test.d.ts +0 -6
  449. package/src/tasks/__tests__/hierarchy.test.d.ts +0 -7
  450. package/src/tasks/__tests__/id-generator.test.d.ts +0 -2
  451. package/src/tasks/__tests__/labels.test.d.ts +0 -7
  452. package/src/tasks/__tests__/list.test.d.ts +0 -7
  453. package/src/tasks/__tests__/minimal-test.test.d.ts +0 -2
  454. package/src/tasks/__tests__/phase-tracking.test.d.ts +0 -7
  455. package/src/tasks/__tests__/pipeline-stage.test.d.ts +0 -14
  456. package/src/tasks/__tests__/plan-priority.test.d.ts +0 -10
  457. package/src/tasks/__tests__/priority-normalization.test.d.ts +0 -7
  458. package/src/tasks/__tests__/relates.test.d.ts +0 -9
  459. package/src/tasks/__tests__/show-deps.test.d.ts +0 -6
  460. package/src/tasks/__tests__/show.test.d.ts +0 -7
  461. package/src/tasks/__tests__/staleness.test.d.ts +0 -7
  462. package/src/tasks/__tests__/task-ops-depends.test.d.ts +0 -6
  463. package/src/tasks/__tests__/update.test.d.ts +0 -7
  464. package/src/validation/__tests__/chain-validation.test.d.ts +0 -7
  465. package/src/validation/__tests__/compliance.test.d.ts +0 -7
  466. package/src/validation/__tests__/docs-sync.test.d.ts +0 -7
  467. package/src/validation/__tests__/doctor-gitignore.test.d.ts +0 -7
  468. package/src/validation/__tests__/doctor-injection.test.d.ts +0 -11
  469. package/src/validation/__tests__/doctor.test.d.ts +0 -7
  470. package/src/validation/__tests__/engine.test.d.ts +0 -7
  471. package/src/validation/__tests__/manifest.test.d.ts +0 -7
  472. package/src/validation/__tests__/protocol-common.test.d.ts +0 -7
  473. package/src/validation/__tests__/verification.test.d.ts +0 -7
package/src/scaffold.ts CHANGED
@@ -28,8 +28,11 @@ const execFileAsync = promisify(execFile);
28
28
 
29
29
  /** Result of an ensure* scaffolding operation. */
30
30
  export interface ScaffoldResult {
31
+ /** What action was taken: created, repaired, or skipped. */
31
32
  action: 'created' | 'repaired' | 'skipped';
33
+ /** Filesystem path that was operated on. */
32
34
  path: string;
35
+ /** Human-readable explanation of the result. */
33
36
  details?: string;
34
37
  }
35
38
 
@@ -38,11 +41,17 @@ export type CheckStatus = 'passed' | 'failed' | 'warning' | 'info';
38
41
 
39
42
  /** Result of a check* diagnostic (compatible with doctor/checks.ts CheckResult). */
40
43
  export interface CheckResult {
44
+ /** Unique check identifier (e.g. "cleo_structure", "sqlite_db"). */
41
45
  id: string;
46
+ /** Category grouping (e.g. "scaffold", "global"). */
42
47
  category: string;
48
+ /** Diagnostic outcome: passed, failed, warning, or info. */
43
49
  status: CheckStatus;
50
+ /** Human-readable description of the check result. */
44
51
  message: string;
52
+ /** Structured metadata about the check (paths, sizes, missing items). */
45
53
  details: Record<string, unknown>;
54
+ /** Suggested CLI command to fix the issue, or null if passed. */
46
55
  fix: string | null;
47
56
  }
48
57
 
@@ -104,6 +113,20 @@ backups/
104
113
 
105
114
  /**
106
115
  * Check if a file exists and is readable.
116
+ *
117
+ * @param path - Absolute path to the file to check
118
+ * @returns True if the file exists and is readable, false otherwise
119
+ *
120
+ * @remarks
121
+ * Uses `fs.access` with `R_OK` to verify both existence and read permission.
122
+ * Swallows all errors and returns false on failure.
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * if (await fileExists('/project/.cleo/config.json')) {
127
+ * // safe to read
128
+ * }
129
+ * ```
107
130
  */
108
131
  export async function fileExists(path: string): Promise<boolean> {
109
132
  try {
@@ -115,11 +138,20 @@ export async function fileExists(path: string): Promise<boolean> {
115
138
  }
116
139
 
117
140
  /**
118
- * Strip legacy <!-- CLEO:START -->...<!-- CLEO:END --> blocks from a file.
141
+ * Strip legacy CLEO:START/CLEO:END blocks from a file.
119
142
  * Called before CAAMP injection to prevent competing blocks.
120
143
  *
121
- * Handles both bare markers (<!-- CLEO:START -->) and versioned markers
122
- * (<!-- CLEO:START v0.53.4 -->, <!-- CLEO:START v1.2.3 -->).
144
+ * @param filePath - Absolute path to the file to strip
145
+ *
146
+ * @remarks
147
+ * Handles both bare markers (`<!-- CLEO:START -->`) and versioned markers
148
+ * (`<!-- CLEO:START v0.53.4 -->`). No-op if the file does not exist or
149
+ * contains no CLEO blocks.
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * await stripCLEOBlocks('/project/CLAUDE.md');
154
+ * ```
123
155
  */
124
156
  export async function stripCLEOBlocks(filePath: string): Promise<void> {
125
157
  if (!existsSync(filePath)) return;
@@ -130,6 +162,20 @@ export async function stripCLEOBlocks(filePath: string): Promise<void> {
130
162
 
131
163
  /**
132
164
  * Remove .cleo/ or .cleo entries from the project root .gitignore.
165
+ *
166
+ * @param projectRoot - Absolute path to the project root directory
167
+ * @returns Whether any lines were removed from the .gitignore
168
+ *
169
+ * @remarks
170
+ * Filters out lines matching `/.cleo/`, `.cleo/`, `.cleo`, etc. from the
171
+ * root-level `.gitignore`. Returns `{ removed: false }` if the file does not
172
+ * exist or contains no matching entries.
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const { removed } = await removeCleoFromRootGitignore('/project');
177
+ * if (removed) console.log('.cleo entries cleaned from .gitignore');
178
+ * ```
133
179
  */
134
180
  export async function removeCleoFromRootGitignore(
135
181
  projectRoot: string,
@@ -157,6 +203,18 @@ export { generateProjectHash } from './nexus/hash.js';
157
203
  /**
158
204
  * Resolve the package root directory (where schemas/ and templates/ live).
159
205
  * scaffold.ts lives in packages/core/src/, so 1 level up reaches the package root.
206
+ *
207
+ * @returns Absolute path to the @cleocode/core package root
208
+ *
209
+ * @remarks
210
+ * Uses `import.meta.url` to determine the file location at runtime, which
211
+ * works correctly in both development and installed npm package contexts.
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const root = getPackageRoot();
216
+ * const schemaPath = join(root, 'schemas', 'config.schema.json');
217
+ * ```
160
218
  */
161
219
  export function getPackageRoot(): string {
162
220
  const thisFile = fileURLToPath(import.meta.url);
@@ -166,6 +224,19 @@ export function getPackageRoot(): string {
166
224
  /**
167
225
  * Load the gitignore template from the package's templates/ directory.
168
226
  * Falls back to embedded content if file not found.
227
+ *
228
+ * @returns The .cleo/.gitignore template content string
229
+ *
230
+ * @remarks
231
+ * First attempts to read from the package's `templates/cleo-gitignore` file.
232
+ * Falls back to the embedded `CLEO_GITIGNORE_FALLBACK` constant if the
233
+ * template file is missing or unreadable.
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * const content = getGitignoreContent();
238
+ * await writeFile('.cleo/.gitignore', content);
239
+ * ```
169
240
  */
170
241
  export function getGitignoreContent(): string {
171
242
  try {
@@ -182,6 +253,17 @@ export function getGitignoreContent(): string {
182
253
 
183
254
  /**
184
255
  * Read CLEO version from package.json.
256
+ *
257
+ * @returns Semver version string, or "0.0.0" if unavailable
258
+ *
259
+ * @remarks
260
+ * Reads the `version` field from the @cleocode/core package.json at runtime.
261
+ * Returns "0.0.0" if the file cannot be read or parsed.
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * const version = getCleoVersion(); // "2026.4.0"
266
+ * ```
185
267
  */
186
268
  export function getCleoVersion(): string {
187
269
  try {
@@ -193,9 +275,6 @@ export function getCleoVersion(): string {
193
275
  }
194
276
  }
195
277
 
196
- /**
197
- * Create default config.json content.
198
- */
199
278
  /**
200
279
  * Detect whether projectRoot is the CLEO source repository itself.
201
280
  * Verified by fingerprinting the expected source layout and package identity.
@@ -204,7 +283,7 @@ export function getCleoVersion(): string {
204
283
  function isCleoContributorProject(projectRoot: string): boolean {
205
284
  const exists = (p: string) => existsSync(join(projectRoot, p));
206
285
  // Must have all three canonical source directories
207
- if (!exists('src/mcp') || !exists('src/dispatch') || !exists('src/core')) return false;
286
+ if (!exists('src/dispatch') || !exists('src/core')) return false;
208
287
  // Must have package.json identifying as @cleocode/cleo
209
288
  try {
210
289
  const pkg = JSON.parse(readFileSync(join(projectRoot, 'package.json'), 'utf-8')) as {
@@ -216,6 +295,21 @@ function isCleoContributorProject(projectRoot: string): boolean {
216
295
  }
217
296
  }
218
297
 
298
+ /**
299
+ * Create default config.json content.
300
+ *
301
+ * @returns A plain object with the default CLEO configuration structure
302
+ *
303
+ * @remarks
304
+ * Returns a version-stamped config with defaults for output formatting, backup
305
+ * limits, hierarchy depth, session behavior, and lifecycle mode.
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * const config = createDefaultConfig();
310
+ * await saveJson(configPath, config);
311
+ * ```
312
+ */
219
313
  export function createDefaultConfig(): Record<string, unknown> {
220
314
  return {
221
315
  version: '2.10.0',
@@ -248,6 +342,19 @@ export function createDefaultConfig(): Record<string, unknown> {
248
342
  /**
249
343
  * Create .cleo/ directory and all required subdirectories.
250
344
  * Idempotent: skips directories that already exist.
345
+ *
346
+ * @param projectRoot - Absolute path to the project root directory
347
+ * @returns Scaffold result indicating whether the directory was created or already existed
348
+ *
349
+ * @remarks
350
+ * Refuses to scaffold inside the global CLEO home to prevent pollution.
351
+ * Creates all directories listed in `REQUIRED_CLEO_SUBDIRS`.
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * const result = await ensureCleoStructure('/my/project');
356
+ * console.log(result.action); // "created" or "skipped"
357
+ * ```
251
358
  */
252
359
  export async function ensureCleoStructure(projectRoot: string): Promise<ScaffoldResult> {
253
360
  // Guard: reject global home as project root to prevent project-level
@@ -282,6 +389,19 @@ export async function ensureCleoStructure(projectRoot: string): Promise<Scaffold
282
389
  /**
283
390
  * Create or repair .cleo/.gitignore from template.
284
391
  * Idempotent: skips if file already exists with correct content.
392
+ *
393
+ * @param projectRoot - Absolute path to the project root directory
394
+ * @returns Scaffold result indicating whether the gitignore was created, repaired, or skipped
395
+ *
396
+ * @remarks
397
+ * Compares normalized content (trimmed, LF line endings) against the template.
398
+ * If the file exists but differs, it is overwritten with the canonical template.
399
+ *
400
+ * @example
401
+ * ```typescript
402
+ * const result = await ensureGitignore('/my/project');
403
+ * if (result.action === 'repaired') console.log('Gitignore updated');
404
+ * ```
285
405
  */
286
406
  export async function ensureGitignore(projectRoot: string): Promise<ScaffoldResult> {
287
407
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -305,6 +425,21 @@ export async function ensureGitignore(projectRoot: string): Promise<ScaffoldResu
305
425
  /**
306
426
  * Create default config.json if missing.
307
427
  * Idempotent: skips if file already exists.
428
+ *
429
+ * @param projectRoot - Absolute path to the project root directory
430
+ * @param opts - Optional configuration
431
+ * @param opts.force - When true, overwrite the existing config
432
+ * @returns Scaffold result indicating the action taken
433
+ *
434
+ * @remarks
435
+ * On skip, still checks for and backfills the ADR-029 contributor block
436
+ * if the project is detected as the CLEO source repository.
437
+ *
438
+ * @example
439
+ * ```typescript
440
+ * const result = await ensureConfig('/my/project', { force: true });
441
+ * console.log(result.path);
442
+ * ```
308
443
  */
309
444
  export async function ensureConfig(
310
445
  projectRoot: string,
@@ -353,6 +488,22 @@ export async function ensureConfig(
353
488
  /**
354
489
  * Create or refresh project-info.json.
355
490
  * Idempotent: skips if file already exists (unless force).
491
+ *
492
+ * @param projectRoot - Absolute path to the project root directory
493
+ * @param opts - Optional configuration
494
+ * @param opts.force - When true, regenerate even if the file exists
495
+ * @returns Scaffold result indicating the action taken
496
+ *
497
+ * @remarks
498
+ * Backfills a `projectId` (UUID) on existing files that lack one (T5333).
499
+ * The generated file includes project hash, CLEO version, schema versions,
500
+ * and initial health/feature flags.
501
+ *
502
+ * @example
503
+ * ```typescript
504
+ * const result = await ensureProjectInfo('/my/project');
505
+ * console.log(result.action); // "created", "repaired", or "skipped"
506
+ * ```
356
507
  */
357
508
  export async function ensureProjectInfo(
358
509
  projectRoot: string,
@@ -421,76 +572,48 @@ export async function ensureProjectInfo(
421
572
  }
422
573
 
423
574
  /**
424
- * Ensure .mcp.json contains a cleo-dev server entry pointing to the local build.
425
- * Only runs when isCleoContributorProject() is true (ADR-029).
575
+ * No-op. Kept for API compatibility.
426
576
  *
427
- * Writes the server entry:
428
- * cleo-dev node <projectRoot>/dist/mcp/index.js
577
+ * @param projectRoot - Absolute path to the project root directory
578
+ * @returns Scaffold result with action "skipped"
429
579
  *
430
- * This ensures Claude Code loads the LOCAL dev build MCP server for this project,
431
- * not the published @cleocode/cleo@latest. Idempotent: preserves other entries.
580
+ * @remarks
581
+ * This function was removed in Phase 2 production readiness but the export
582
+ * is preserved to avoid breaking downstream callers.
583
+ *
584
+ * @example
585
+ * ```typescript
586
+ * const result = await ensureContributorMcp('/my/project');
587
+ * // result.action === 'skipped'
588
+ * ```
432
589
  */
433
590
  export async function ensureContributorMcp(projectRoot: string): Promise<ScaffoldResult> {
434
- if (!isCleoContributorProject(projectRoot)) {
435
- return {
436
- action: 'skipped',
437
- path: join(projectRoot, '.mcp.json'),
438
- details: 'Not a contributor project',
439
- };
440
- }
441
-
442
- const mcpJsonPath = join(projectRoot, '.mcp.json');
443
- const mcpEntry = {
444
- command: 'node',
445
- args: ['--disable-warning=ExperimentalWarning', join(projectRoot, 'dist', 'mcp', 'index.js')],
446
- env: {},
447
- };
448
-
449
- let config: Record<string, unknown> = { mcpServers: {} };
450
- if (existsSync(mcpJsonPath)) {
451
- try {
452
- config = JSON.parse(readFileSync(mcpJsonPath, 'utf-8')) as Record<string, unknown>;
453
- } catch {
454
- /* start fresh */
455
- }
456
- }
457
-
458
- const servers = (config['mcpServers'] ?? {}) as Record<string, unknown>;
459
- const existing = servers['cleo-dev'] as Record<string, unknown> | undefined;
460
-
461
- // Skip if already pointing to the same dist path
462
- const existingArgs = existing?.['args'] as string[] | undefined;
463
- const targetArg = join(projectRoot, 'dist', 'mcp', 'index.js');
464
- if (existing && existingArgs?.includes(targetArg)) {
465
- return { action: 'skipped', path: mcpJsonPath, details: 'cleo-dev MCP entry already current' };
466
- }
467
-
468
- servers['cleo-dev'] = mcpEntry;
469
-
470
- // Remove production 'cleo' entry from project-level config — production cleo
471
- // is global-only. Project-level .mcp.json for contributor projects should
472
- // only contain cleo-dev (ADR-016 §2.3, ADR-029).
473
- const removedProduction = 'cleo' in servers;
474
- delete servers['cleo'];
475
-
476
- config['mcpServers'] = servers;
477
- await writeFile(mcpJsonPath, JSON.stringify(config, null, 2));
478
-
479
- const details = [
480
- `cleo-dev → node ${targetArg}`,
481
- ...(removedProduction ? ['removed production cleo entry (global-only per ADR-029)'] : []),
482
- ].join('; ');
483
-
484
591
  return {
485
- action: existing ? 'repaired' : 'created',
486
- path: mcpJsonPath,
487
- details,
592
+ action: 'skipped',
593
+ path: projectRoot,
594
+ details: 'Removed (Phase 2 production readiness)',
488
595
  };
489
596
  }
490
597
 
491
598
  /**
492
599
  * Detect and write project-context.json.
493
600
  * Idempotent: skips if file exists and is less than staleDays old (default: 30).
601
+ *
602
+ * @param projectRoot - Absolute path to the project root directory
603
+ * @param opts - Optional configuration
604
+ * @param opts.force - When true, regenerate even if the file is fresh
605
+ * @param opts.staleDays - Age threshold in days before regeneration (default: 30)
606
+ * @returns Scaffold result indicating the action taken
607
+ *
608
+ * @remarks
609
+ * Runs project type detection (Node, Python, Rust, etc.) and writes the result.
610
+ * Validates against the project-context schema before writing (best-effort).
611
+ *
612
+ * @example
613
+ * ```typescript
614
+ * const result = await ensureProjectContext('/my/project', { staleDays: 7 });
615
+ * if (result.action === 'repaired') console.log('Context refreshed');
616
+ * ```
494
617
  */
495
618
  export async function ensureProjectContext(
496
619
  projectRoot: string,
@@ -560,6 +683,20 @@ export async function ensureProjectContext(
560
683
  /**
561
684
  * Initialize isolated .cleo/.git checkpoint repository.
562
685
  * Idempotent: skips if .cleo/.git already exists.
686
+ *
687
+ * @param projectRoot - Absolute path to the project root directory
688
+ * @returns Scaffold result indicating the action taken
689
+ *
690
+ * @remarks
691
+ * Creates an isolated git repository inside .cleo/ for checkpoint tracking.
692
+ * The repo uses `GIT_DIR` and `GIT_WORK_TREE` environment variables to avoid
693
+ * interfering with the project's own git repository.
694
+ *
695
+ * @example
696
+ * ```typescript
697
+ * const result = await ensureCleoGitRepo('/my/project');
698
+ * console.log(result.action); // "created" or "skipped"
699
+ * ```
563
700
  */
564
701
  export async function ensureCleoGitRepo(projectRoot: string): Promise<ScaffoldResult> {
565
702
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -585,6 +722,19 @@ export async function ensureCleoGitRepo(projectRoot: string): Promise<ScaffoldRe
585
722
  /**
586
723
  * Create SQLite database if missing.
587
724
  * Idempotent: skips if tasks.db already exists.
725
+ *
726
+ * @param projectRoot - Absolute path to the project root directory
727
+ * @returns Scaffold result indicating the action taken
728
+ *
729
+ * @remarks
730
+ * Initializes the tasks.db SQLite database by calling `getDb()` which runs
731
+ * schema migrations. Returns a skipped result with error details if initialization fails.
732
+ *
733
+ * @example
734
+ * ```typescript
735
+ * const result = await ensureSqliteDb('/my/project');
736
+ * if (result.action === 'created') console.log('Database ready');
737
+ * ```
588
738
  */
589
739
  export async function ensureSqliteDb(projectRoot: string): Promise<ScaffoldResult> {
590
740
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -611,6 +761,20 @@ export async function ensureSqliteDb(projectRoot: string): Promise<ScaffoldResul
611
761
 
612
762
  /**
613
763
  * Verify all required .cleo/ subdirectories exist.
764
+ *
765
+ * @param projectRoot - Absolute path to the project root directory
766
+ * @returns Check result with status and list of any missing subdirectories
767
+ *
768
+ * @remarks
769
+ * Read-only diagnostic. Checks for the .cleo/ directory and all entries
770
+ * in `REQUIRED_CLEO_SUBDIRS`. Reports "failed" if .cleo/ is missing,
771
+ * "warning" if subdirectories are missing, "passed" otherwise.
772
+ *
773
+ * @example
774
+ * ```typescript
775
+ * const check = checkCleoStructure('/my/project');
776
+ * if (check.status === 'failed') console.log(check.fix);
777
+ * ```
614
778
  */
615
779
  export function checkCleoStructure(projectRoot: string): CheckResult {
616
780
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -656,6 +820,19 @@ export function checkCleoStructure(projectRoot: string): CheckResult {
656
820
 
657
821
  /**
658
822
  * Verify .cleo/.gitignore exists and matches template.
823
+ *
824
+ * @param projectRoot - Absolute path to the project root directory
825
+ * @returns Check result indicating whether the gitignore matches the template
826
+ *
827
+ * @remarks
828
+ * Read-only diagnostic. Normalizes whitespace before comparison.
829
+ * Reports "warning" if the file is missing or drifted from the template.
830
+ *
831
+ * @example
832
+ * ```typescript
833
+ * const check = checkGitignore('/my/project');
834
+ * if (check.status === 'warning') console.log('Gitignore drifted');
835
+ * ```
659
836
  */
660
837
  export function checkGitignore(projectRoot: string): CheckResult {
661
838
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -691,6 +868,19 @@ export function checkGitignore(projectRoot: string): CheckResult {
691
868
 
692
869
  /**
693
870
  * Verify config.json exists and is valid JSON.
871
+ *
872
+ * @param projectRoot - Absolute path to the project root directory
873
+ * @returns Check result indicating whether config.json is present and valid
874
+ *
875
+ * @remarks
876
+ * Read-only diagnostic. Reports "failed" if the file is missing or contains
877
+ * invalid JSON. Does not validate config schema, only JSON syntax.
878
+ *
879
+ * @example
880
+ * ```typescript
881
+ * const check = checkConfig('/my/project');
882
+ * if (check.status === 'passed') console.log('Config OK');
883
+ * ```
694
884
  */
695
885
  export function checkConfig(projectRoot: string): CheckResult {
696
886
  const configPath = getConfigPath(projectRoot);
@@ -731,6 +921,20 @@ export function checkConfig(projectRoot: string): CheckResult {
731
921
 
732
922
  /**
733
923
  * Verify project-info.json exists with required fields.
924
+ *
925
+ * @param projectRoot - Absolute path to the project root directory
926
+ * @returns Check result indicating whether project-info.json is valid
927
+ *
928
+ * @remarks
929
+ * Read-only diagnostic. Checks for presence and required fields: projectHash,
930
+ * cleoVersion, and lastUpdated. Reports "warning" on missing fields, "failed" on
931
+ * missing file or invalid JSON.
932
+ *
933
+ * @example
934
+ * ```typescript
935
+ * const check = checkProjectInfo('/my/project');
936
+ * if (check.status !== 'passed') console.log(check.fix);
937
+ * ```
734
938
  */
735
939
  export function checkProjectInfo(projectRoot: string): CheckResult {
736
940
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -785,6 +989,21 @@ export function checkProjectInfo(projectRoot: string): CheckResult {
785
989
 
786
990
  /**
787
991
  * Verify project-context.json exists and is not stale (default: 30 days).
992
+ *
993
+ * @param projectRoot - Absolute path to the project root directory
994
+ * @param staleDays - Age threshold in days before reporting as stale (default: 30)
995
+ * @returns Check result with freshness assessment
996
+ *
997
+ * @remarks
998
+ * Read-only diagnostic. Checks for the `detectedAt` timestamp and compares
999
+ * its age against the staleness threshold. Reports "warning" if stale or
1000
+ * missing, "failed" if the file contains invalid JSON.
1001
+ *
1002
+ * @example
1003
+ * ```typescript
1004
+ * const check = checkProjectContext('/my/project', 14);
1005
+ * if (check.status === 'warning') console.log('Context is stale');
1006
+ * ```
788
1007
  */
789
1008
  export function checkProjectContext(projectRoot: string, staleDays: number = 30): CheckResult {
790
1009
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -852,6 +1071,18 @@ export function checkProjectContext(projectRoot: string, staleDays: number = 30)
852
1071
 
853
1072
  /**
854
1073
  * Verify .cleo/.git checkpoint repository exists.
1074
+ *
1075
+ * @param projectRoot - Absolute path to the project root directory
1076
+ * @returns Check result indicating whether the checkpoint repo is present
1077
+ *
1078
+ * @remarks
1079
+ * Read-only diagnostic. Reports "warning" if the .cleo/.git directory is missing.
1080
+ *
1081
+ * @example
1082
+ * ```typescript
1083
+ * const check = checkCleoGitRepo('/my/project');
1084
+ * console.log(check.status); // "passed" or "warning"
1085
+ * ```
855
1086
  */
856
1087
  export function checkCleoGitRepo(projectRoot: string): CheckResult {
857
1088
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -880,6 +1111,19 @@ export function checkCleoGitRepo(projectRoot: string): CheckResult {
880
1111
 
881
1112
  /**
882
1113
  * Verify .cleo/tasks.db exists and is non-empty.
1114
+ *
1115
+ * @param projectRoot - Absolute path to the project root directory
1116
+ * @returns Check result with database existence and size information
1117
+ *
1118
+ * @remarks
1119
+ * Read-only diagnostic. Reports "failed" if the file is missing, "warning" if
1120
+ * the file exists but is 0 bytes, "passed" otherwise.
1121
+ *
1122
+ * @example
1123
+ * ```typescript
1124
+ * const check = checkSqliteDb('/my/project');
1125
+ * if (check.status === 'failed') console.log('No database:', check.fix);
1126
+ * ```
883
1127
  */
884
1128
  export function checkSqliteDb(projectRoot: string): CheckResult {
885
1129
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -921,6 +1165,20 @@ export function checkSqliteDb(projectRoot: string): CheckResult {
921
1165
  /**
922
1166
  * Create brain.db if missing.
923
1167
  * Idempotent: skips if brain.db already exists.
1168
+ *
1169
+ * @param projectRoot - Absolute path to the project root directory
1170
+ * @returns Scaffold result indicating the action taken
1171
+ *
1172
+ * @remarks
1173
+ * Initializes brain.db with Drizzle schema and eagerly creates FTS5 virtual
1174
+ * tables for full-text search (T5698). Also ensures FTS5 tables on pre-existing
1175
+ * databases that may lack them.
1176
+ *
1177
+ * @example
1178
+ * ```typescript
1179
+ * const result = await ensureBrainDb('/my/project');
1180
+ * if (result.action === 'created') console.log('Brain database ready');
1181
+ * ```
924
1182
  */
925
1183
  export async function ensureBrainDb(projectRoot: string): Promise<ScaffoldResult> {
926
1184
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -968,6 +1226,19 @@ export async function ensureBrainDb(projectRoot: string): Promise<ScaffoldResult
968
1226
 
969
1227
  /**
970
1228
  * Verify .cleo/brain.db exists and is non-empty.
1229
+ *
1230
+ * @param projectRoot - Absolute path to the project root directory
1231
+ * @returns Check result with database existence and size information
1232
+ *
1233
+ * @remarks
1234
+ * Read-only diagnostic. Reports "failed" if the file is missing, "warning" if
1235
+ * the file exists but is 0 bytes, "passed" otherwise.
1236
+ *
1237
+ * @example
1238
+ * ```typescript
1239
+ * const check = checkBrainDb('/my/project');
1240
+ * console.log(check.status);
1241
+ * ```
971
1242
  */
972
1243
  export function checkBrainDb(projectRoot: string): CheckResult {
973
1244
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -1008,7 +1279,20 @@ export function checkBrainDb(projectRoot: string): CheckResult {
1008
1279
 
1009
1280
  /**
1010
1281
  * Verify .cleo/memory-bridge.md exists.
1011
- * Warning level if missing (not failure) it is auto-generated.
1282
+ * Warning level if missing (not failure) -- it is auto-generated.
1283
+ *
1284
+ * @param projectRoot - Absolute path to the project root directory
1285
+ * @returns Check result indicating presence of the memory bridge file
1286
+ *
1287
+ * @remarks
1288
+ * Read-only diagnostic. The memory bridge is auto-generated from brain.db
1289
+ * content, so its absence is only a warning (not a failure).
1290
+ *
1291
+ * @example
1292
+ * ```typescript
1293
+ * const check = checkMemoryBridge('/my/project');
1294
+ * if (check.status === 'warning') console.log('Run: cleo refresh-memory');
1295
+ * ```
1012
1296
  */
1013
1297
  export function checkMemoryBridge(projectRoot: string): CheckResult {
1014
1298
  const cleoDir = getCleoDirAbsolute(projectRoot);
@@ -1090,6 +1374,18 @@ export const STALE_GLOBAL_ENTRIES = [
1090
1374
  *
1091
1375
  * This is the SSoT for global home scaffolding, replacing raw mkdirSync
1092
1376
  * calls that were previously scattered across global-bootstrap.ts.
1377
+ *
1378
+ * @returns Scaffold result indicating the action taken
1379
+ *
1380
+ * @remarks
1381
+ * Also creates a global config.json from template if absent. Cleans up
1382
+ * stale entries from both the current and legacy (~/.cleo/) global home paths.
1383
+ *
1384
+ * @example
1385
+ * ```typescript
1386
+ * const result = await ensureGlobalHome();
1387
+ * console.log(result.action); // "created" or "skipped"
1388
+ * ```
1093
1389
  */
1094
1390
  export async function ensureGlobalHome(): Promise<ScaffoldResult> {
1095
1391
  const cleoHome = getCleoHome();
@@ -1155,6 +1451,19 @@ export async function ensureGlobalHome(): Promise<ScaffoldResult> {
1155
1451
  * filesystem write to maintain SSoT for scaffolding.
1156
1452
  *
1157
1453
  * Idempotent: skips if the template already exists with correct content.
1454
+ *
1455
+ * @returns Scaffold result indicating the action taken
1456
+ *
1457
+ * @remarks
1458
+ * Lazy-imports injection.ts to avoid circular dependencies. Compares file
1459
+ * content byte-for-byte; repairs if the installed version differs from the
1460
+ * bundled template.
1461
+ *
1462
+ * @example
1463
+ * ```typescript
1464
+ * const result = await ensureGlobalTemplates();
1465
+ * if (result.action === 'repaired') console.log('Template updated');
1466
+ * ```
1158
1467
  */
1159
1468
  export async function ensureGlobalTemplates(): Promise<ScaffoldResult> {
1160
1469
  // Lazy import to avoid circular dependency (injection imports scaffold)
@@ -1203,9 +1512,22 @@ export async function ensureGlobalTemplates(): Promise<ScaffoldResult> {
1203
1512
  * explicitly from init or upgrade if a copy is needed for a specific workflow.
1204
1513
  *
1205
1514
  * Used by:
1206
- * - MCP startup (via startupHealthCheck in health.ts)
1515
+ * - CLI startup (via startupHealthCheck in health.ts)
1207
1516
  * - init (for first-time global setup)
1208
1517
  * - upgrade (for global repair)
1518
+ *
1519
+ * @returns Combined scaffold results for home and templates
1520
+ *
1521
+ * @remarks
1522
+ * Calls ensureGlobalHome and ensureGlobalTemplates in sequence.
1523
+ * Schemas are NOT copied here -- they are read at runtime from the npm
1524
+ * package path.
1525
+ *
1526
+ * @example
1527
+ * ```typescript
1528
+ * const { home, templates } = await ensureGlobalScaffold();
1529
+ * console.log(home.action, templates.action);
1530
+ * ```
1209
1531
  */
1210
1532
  export async function ensureGlobalScaffold(): Promise<{
1211
1533
  home: ScaffoldResult;
@@ -1222,6 +1544,18 @@ export async function ensureGlobalScaffold(): Promise<{
1222
1544
  /**
1223
1545
  * Check that the global ~/.cleo/ home and its required subdirectories exist.
1224
1546
  * Read-only: no side effects.
1547
+ *
1548
+ * @returns Check result with status and missing subdirectory details
1549
+ *
1550
+ * @remarks
1551
+ * Reports "failed" if the home directory itself is absent, "warning" if
1552
+ * subdirectories are missing, "passed" if all infrastructure is present.
1553
+ *
1554
+ * @example
1555
+ * ```typescript
1556
+ * const check = checkGlobalHome();
1557
+ * if (check.status !== 'passed') console.log(check.fix);
1558
+ * ```
1225
1559
  */
1226
1560
  export function checkGlobalHome(): CheckResult {
1227
1561
  const cleoHome = getCleoHome();
@@ -1233,7 +1567,7 @@ export function checkGlobalHome(): CheckResult {
1233
1567
  status: 'failed',
1234
1568
  message: 'Global ~/.cleo/ directory not found',
1235
1569
  details: { path: cleoHome, exists: false },
1236
- fix: 'cleo init (or restart MCP server)',
1570
+ fix: 'cleo init',
1237
1571
  };
1238
1572
  }
1239
1573
 
@@ -1263,6 +1597,18 @@ export function checkGlobalHome(): CheckResult {
1263
1597
  /**
1264
1598
  * Check that the global injection template is present and current.
1265
1599
  * Read-only: no side effects.
1600
+ *
1601
+ * @returns Check result with template version and sync status
1602
+ *
1603
+ * @remarks
1604
+ * Also checks for version drift between the XDG-compliant path and the
1605
+ * legacy ~/.cleo/templates/ path. Reports "warning" if versions differ.
1606
+ *
1607
+ * @example
1608
+ * ```typescript
1609
+ * const check = checkGlobalTemplates();
1610
+ * console.log(check.details.version);
1611
+ * ```
1266
1612
  */
1267
1613
  export function checkGlobalTemplates(): CheckResult {
1268
1614
  const templatesDir = getCleoTemplatesDir();
@@ -1275,7 +1621,7 @@ export function checkGlobalTemplates(): CheckResult {
1275
1621
  status: 'failed',
1276
1622
  message: 'CLEO-INJECTION.md template not found in global templates',
1277
1623
  details: { path: injectionPath, exists: false },
1278
- fix: 'cleo init (or restart MCP server)',
1624
+ fix: 'cleo init',
1279
1625
  };
1280
1626
  }
1281
1627
 
@@ -1313,6 +1659,18 @@ export function checkGlobalTemplates(): CheckResult {
1313
1659
  /**
1314
1660
  * Check that the project log directory exists.
1315
1661
  * Read-only: no side effects.
1662
+ *
1663
+ * @param projectRoot - Absolute path to the project root directory
1664
+ * @returns Check result indicating whether .cleo/logs/ is present
1665
+ *
1666
+ * @remarks
1667
+ * Reports "warning" if the log directory is absent, "passed" otherwise.
1668
+ *
1669
+ * @example
1670
+ * ```typescript
1671
+ * const check = checkLogDir('/my/project');
1672
+ * console.log(check.status);
1673
+ * ```
1316
1674
  */
1317
1675
  export function checkLogDir(projectRoot: string): CheckResult {
1318
1676
  const logDir = join(getCleoDirAbsolute(projectRoot), 'logs');