@cleocode/core 2026.4.9 → 2026.4.12

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 (1011) 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.d.ts +2 -2
  42. package/dist/agents/agent-schema.js +82 -0
  43. package/dist/agents/agent-schema.js.map +1 -0
  44. package/dist/agents/capacity.js +116 -0
  45. package/dist/agents/capacity.js.map +1 -0
  46. package/dist/agents/execution-learning.js +474 -0
  47. package/dist/agents/execution-learning.js.map +1 -0
  48. package/dist/agents/health-monitor.js +217 -0
  49. package/dist/agents/health-monitor.js.map +1 -0
  50. package/dist/agents/index.js +29 -0
  51. package/dist/agents/index.js.map +1 -0
  52. package/dist/agents/registry.js +314 -0
  53. package/dist/agents/registry.js.map +1 -0
  54. package/dist/agents/retry.js +215 -0
  55. package/dist/agents/retry.js.map +1 -0
  56. package/dist/audit-prune.js +94 -0
  57. package/dist/audit-prune.js.map +1 -0
  58. package/dist/audit.js +68 -0
  59. package/dist/audit.js.map +1 -0
  60. package/dist/backfill/index.js +229 -0
  61. package/dist/backfill/index.js.map +1 -0
  62. package/dist/bootstrap.js +344 -0
  63. package/dist/bootstrap.js.map +1 -0
  64. package/dist/caamp/adapter.js +259 -0
  65. package/dist/caamp/adapter.js.map +1 -0
  66. package/dist/caamp/capability-check.js +38 -0
  67. package/dist/caamp/capability-check.js.map +1 -0
  68. package/dist/caamp/index.js +21 -0
  69. package/dist/caamp/index.js.map +1 -0
  70. package/dist/caamp-init.js +16 -0
  71. package/dist/caamp-init.js.map +1 -0
  72. package/dist/cleo.js +322 -0
  73. package/dist/cleo.js.map +1 -0
  74. package/dist/code/index.js +10 -0
  75. package/dist/code/index.js.map +1 -0
  76. package/dist/code/outline.js +165 -0
  77. package/dist/code/outline.js.map +1 -0
  78. package/dist/code/parser.js +295 -0
  79. package/dist/code/parser.js.map +1 -0
  80. package/dist/code/search.js +135 -0
  81. package/dist/code/search.js.map +1 -0
  82. package/dist/code/unfold.js +155 -0
  83. package/dist/code/unfold.js.map +1 -0
  84. package/dist/codebase-map/analyzers/architecture.d.ts.map +1 -1
  85. package/dist/codebase-map/analyzers/architecture.js +129 -0
  86. package/dist/codebase-map/analyzers/architecture.js.map +1 -0
  87. package/dist/codebase-map/analyzers/concerns.js +122 -0
  88. package/dist/codebase-map/analyzers/concerns.js.map +1 -0
  89. package/dist/codebase-map/analyzers/conventions.js +149 -0
  90. package/dist/codebase-map/analyzers/conventions.js.map +1 -0
  91. package/dist/codebase-map/analyzers/integrations.js +108 -0
  92. package/dist/codebase-map/analyzers/integrations.js.map +1 -0
  93. package/dist/codebase-map/analyzers/stack.js +117 -0
  94. package/dist/codebase-map/analyzers/stack.js.map +1 -0
  95. package/dist/codebase-map/analyzers/structure.js +137 -0
  96. package/dist/codebase-map/analyzers/structure.js.map +1 -0
  97. package/dist/codebase-map/analyzers/testing.js +118 -0
  98. package/dist/codebase-map/analyzers/testing.js.map +1 -0
  99. package/dist/codebase-map/index.js +57 -0
  100. package/dist/codebase-map/index.js.map +1 -0
  101. package/dist/codebase-map/store.js +122 -0
  102. package/dist/codebase-map/store.js.map +1 -0
  103. package/dist/codebase-map/summary.js +152 -0
  104. package/dist/codebase-map/summary.js.map +1 -0
  105. package/dist/compliance/index.js +288 -0
  106. package/dist/compliance/index.js.map +1 -0
  107. package/dist/compliance/protocol-enforcement.js +332 -0
  108. package/dist/compliance/protocol-enforcement.js.map +1 -0
  109. package/dist/compliance/protocol-rules.js +786 -0
  110. package/dist/compliance/protocol-rules.js.map +1 -0
  111. package/dist/compliance/protocol-types.js +79 -0
  112. package/dist/compliance/protocol-types.js.map +1 -0
  113. package/dist/compliance/store.js +53 -0
  114. package/dist/compliance/store.js.map +1 -0
  115. package/dist/conduit/conduit-client.js +107 -0
  116. package/dist/conduit/conduit-client.js.map +1 -0
  117. package/dist/conduit/factory.js +52 -0
  118. package/dist/conduit/factory.js.map +1 -0
  119. package/dist/conduit/http-transport.js +155 -0
  120. package/dist/conduit/http-transport.js.map +1 -0
  121. package/dist/conduit/index.js +15 -0
  122. package/dist/conduit/index.js.map +1 -0
  123. package/dist/conduit/local-transport.d.ts +18 -8
  124. package/dist/conduit/local-transport.d.ts.map +1 -1
  125. package/dist/conduit/local-transport.js +255 -0
  126. package/dist/conduit/local-transport.js.map +1 -0
  127. package/dist/conduit/sse-transport.js +299 -0
  128. package/dist/conduit/sse-transport.js.map +1 -0
  129. package/dist/config/build-config.js +29 -0
  130. package/dist/config/build-config.js.map +1 -0
  131. package/dist/config.d.ts.map +1 -1
  132. package/dist/config.js +400 -0
  133. package/dist/config.js.map +1 -0
  134. package/dist/constants.js +18 -0
  135. package/dist/constants.js.map +1 -0
  136. package/dist/context/index.js +137 -0
  137. package/dist/context/index.js.map +1 -0
  138. package/dist/crypto/credentials.js +191 -0
  139. package/dist/crypto/credentials.js.map +1 -0
  140. package/dist/discovery.js +182 -0
  141. package/dist/discovery.js.map +1 -0
  142. package/dist/engine-result.js +12 -0
  143. package/dist/engine-result.js.map +1 -0
  144. package/dist/error-catalog.js +404 -0
  145. package/dist/error-catalog.js.map +1 -0
  146. package/dist/error-registry.js +393 -0
  147. package/dist/error-registry.js.map +1 -0
  148. package/dist/errors.d.ts +19 -0
  149. package/dist/errors.d.ts.map +1 -1
  150. package/dist/errors.js +173 -0
  151. package/dist/errors.js.map +1 -0
  152. package/dist/hooks/handlers/agent-hooks.js +106 -0
  153. package/dist/hooks/handlers/agent-hooks.js.map +1 -0
  154. package/dist/hooks/handlers/context-hooks.js +111 -0
  155. package/dist/hooks/handlers/context-hooks.js.map +1 -0
  156. package/dist/hooks/handlers/error-hooks.js +52 -0
  157. package/dist/hooks/handlers/error-hooks.js.map +1 -0
  158. package/dist/hooks/handlers/file-hooks.js +104 -0
  159. package/dist/hooks/handlers/file-hooks.js.map +1 -0
  160. package/dist/hooks/handlers/handler-helpers.js +61 -0
  161. package/dist/hooks/handlers/handler-helpers.js.map +1 -0
  162. package/dist/hooks/handlers/index.js +28 -0
  163. package/dist/hooks/handlers/index.js.map +1 -0
  164. package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
  165. package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
  166. package/dist/hooks/handlers/notification-hooks.js +62 -0
  167. package/dist/hooks/handlers/notification-hooks.js.map +1 -0
  168. package/dist/hooks/handlers/session-hooks.d.ts +21 -0
  169. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  170. package/dist/hooks/handlers/session-hooks.js +142 -0
  171. package/dist/hooks/handlers/session-hooks.js.map +1 -0
  172. package/dist/hooks/handlers/task-hooks.js +65 -0
  173. package/dist/hooks/handlers/task-hooks.js.map +1 -0
  174. package/dist/hooks/handlers/work-capture-hooks.js +165 -0
  175. package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
  176. package/dist/hooks/index.js +13 -0
  177. package/dist/hooks/index.js.map +1 -0
  178. package/dist/hooks/payload-schemas.d.ts +2 -2
  179. package/dist/hooks/payload-schemas.js +220 -0
  180. package/dist/hooks/payload-schemas.js.map +1 -0
  181. package/dist/hooks/provider-hooks.js +66 -0
  182. package/dist/hooks/provider-hooks.js.map +1 -0
  183. package/dist/hooks/registry.js +229 -0
  184. package/dist/hooks/registry.js.map +1 -0
  185. package/dist/hooks/types.js +66 -0
  186. package/dist/hooks/types.js.map +1 -0
  187. package/dist/hooks.js +136 -0
  188. package/dist/hooks.js.map +1 -0
  189. package/dist/index.js +175 -68684
  190. package/dist/index.js.map +1 -7
  191. package/dist/init.d.ts +1 -2
  192. package/dist/init.d.ts.map +1 -1
  193. package/dist/init.js +851 -0
  194. package/dist/init.js.map +1 -0
  195. package/dist/inject/index.js +82 -0
  196. package/dist/inject/index.js.map +1 -0
  197. package/dist/injection.js +343 -0
  198. package/dist/injection.js.map +1 -0
  199. package/dist/intelligence/adaptive-validation.js +497 -0
  200. package/dist/intelligence/adaptive-validation.js.map +1 -0
  201. package/dist/intelligence/impact.js +675 -0
  202. package/dist/intelligence/impact.js.map +1 -0
  203. package/dist/intelligence/index.js +22 -0
  204. package/dist/intelligence/index.js.map +1 -0
  205. package/dist/intelligence/patterns.js +492 -0
  206. package/dist/intelligence/patterns.js.map +1 -0
  207. package/dist/intelligence/prediction.js +499 -0
  208. package/dist/intelligence/prediction.js.map +1 -0
  209. package/dist/intelligence/types.js +13 -0
  210. package/dist/intelligence/types.js.map +1 -0
  211. package/dist/internal.d.ts +15 -5
  212. package/dist/internal.d.ts.map +1 -1
  213. package/dist/internal.js +306 -0
  214. package/dist/internal.js.map +1 -0
  215. package/dist/issue/create.js +121 -0
  216. package/dist/issue/create.js.map +1 -0
  217. package/dist/issue/diagnostics.js +59 -0
  218. package/dist/issue/diagnostics.js.map +1 -0
  219. package/dist/issue/index.js +10 -0
  220. package/dist/issue/index.js.map +1 -0
  221. package/dist/issue/template-parser.js +267 -0
  222. package/dist/issue/template-parser.js.map +1 -0
  223. package/dist/json-schema-validator.js +76 -0
  224. package/dist/json-schema-validator.js.map +1 -0
  225. package/dist/lib/index.js +11 -0
  226. package/dist/lib/index.js.map +1 -0
  227. package/dist/lib/retry.js +152 -0
  228. package/dist/lib/retry.js.map +1 -0
  229. package/dist/lib/tree-sitter-languages.js +71 -0
  230. package/dist/lib/tree-sitter-languages.js.map +1 -0
  231. package/dist/lifecycle/chain-composition.js +152 -0
  232. package/dist/lifecycle/chain-composition.js.map +1 -0
  233. package/dist/lifecycle/chain-store.js +246 -0
  234. package/dist/lifecycle/chain-store.js.map +1 -0
  235. package/dist/lifecycle/consolidate-rcasd.js +352 -0
  236. package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
  237. package/dist/lifecycle/default-chain.js +176 -0
  238. package/dist/lifecycle/default-chain.js.map +1 -0
  239. package/dist/lifecycle/evidence.js +180 -0
  240. package/dist/lifecycle/evidence.js.map +1 -0
  241. package/dist/lifecycle/frontmatter.js +363 -0
  242. package/dist/lifecycle/frontmatter.js.map +1 -0
  243. package/dist/lifecycle/index.js +756 -0
  244. package/dist/lifecycle/index.js.map +1 -0
  245. package/dist/lifecycle/pipeline.js +656 -0
  246. package/dist/lifecycle/pipeline.js.map +1 -0
  247. package/dist/lifecycle/rcasd-index.js +326 -0
  248. package/dist/lifecycle/rcasd-index.js.map +1 -0
  249. package/dist/lifecycle/rcasd-paths.js +220 -0
  250. package/dist/lifecycle/rcasd-paths.js.map +1 -0
  251. package/dist/lifecycle/resume.js +864 -0
  252. package/dist/lifecycle/resume.js.map +1 -0
  253. package/dist/lifecycle/stage-artifacts.js +94 -0
  254. package/dist/lifecycle/stage-artifacts.js.map +1 -0
  255. package/dist/lifecycle/stage-guidance.js +234 -0
  256. package/dist/lifecycle/stage-guidance.js.map +1 -0
  257. package/dist/lifecycle/stages.js +534 -0
  258. package/dist/lifecycle/stages.js.map +1 -0
  259. package/dist/lifecycle/state-machine.js +516 -0
  260. package/dist/lifecycle/state-machine.js.map +1 -0
  261. package/dist/lifecycle/tessera-engine.js +249 -0
  262. package/dist/lifecycle/tessera-engine.js.map +1 -0
  263. package/dist/logger.js +140 -0
  264. package/dist/logger.js.map +1 -0
  265. package/dist/memory/auto-extract.js +177 -0
  266. package/dist/memory/auto-extract.js.map +1 -0
  267. package/dist/memory/brain-embedding.js +66 -0
  268. package/dist/memory/brain-embedding.js.map +1 -0
  269. package/dist/memory/brain-lifecycle.js +298 -0
  270. package/dist/memory/brain-lifecycle.js.map +1 -0
  271. package/dist/memory/brain-links.js +161 -0
  272. package/dist/memory/brain-links.js.map +1 -0
  273. package/dist/memory/brain-maintenance.js +114 -0
  274. package/dist/memory/brain-maintenance.js.map +1 -0
  275. package/dist/memory/brain-migration.js +149 -0
  276. package/dist/memory/brain-migration.js.map +1 -0
  277. package/dist/memory/brain-reasoning.js +215 -0
  278. package/dist/memory/brain-reasoning.js.map +1 -0
  279. package/dist/memory/brain-retrieval.js +542 -0
  280. package/dist/memory/brain-retrieval.js.map +1 -0
  281. package/dist/memory/brain-row-types.js +10 -0
  282. package/dist/memory/brain-row-types.js.map +1 -0
  283. package/dist/memory/brain-search.js +519 -0
  284. package/dist/memory/brain-search.js.map +1 -0
  285. package/dist/memory/brain-similarity.js +145 -0
  286. package/dist/memory/brain-similarity.js.map +1 -0
  287. package/dist/memory/claude-mem-migration.js +277 -0
  288. package/dist/memory/claude-mem-migration.js.map +1 -0
  289. package/dist/memory/decisions.js +162 -0
  290. package/dist/memory/decisions.js.map +1 -0
  291. package/dist/memory/embedding-local.js +97 -0
  292. package/dist/memory/embedding-local.js.map +1 -0
  293. package/dist/memory/embedding-queue.js +271 -0
  294. package/dist/memory/embedding-queue.js.map +1 -0
  295. package/dist/memory/embedding-worker.js +58 -0
  296. package/dist/memory/embedding-worker.js.map +1 -0
  297. package/dist/memory/engine-compat.js +1397 -0
  298. package/dist/memory/engine-compat.js.map +1 -0
  299. package/dist/memory/index.js +1140 -0
  300. package/dist/memory/index.js.map +1 -0
  301. package/dist/memory/learnings.d.ts +2 -2
  302. package/dist/memory/learnings.js +121 -0
  303. package/dist/memory/learnings.js.map +1 -0
  304. package/dist/memory/memory-bridge.js +370 -0
  305. package/dist/memory/memory-bridge.js.map +1 -0
  306. package/dist/memory/patterns.d.ts +4 -4
  307. package/dist/memory/patterns.js +122 -0
  308. package/dist/memory/patterns.js.map +1 -0
  309. package/dist/memory/pipeline-manifest-sqlite.js +975 -0
  310. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
  311. package/dist/memory/session-memory.js +331 -0
  312. package/dist/memory/session-memory.js.map +1 -0
  313. package/dist/metrics/ab-test.js +260 -0
  314. package/dist/metrics/ab-test.js.map +1 -0
  315. package/dist/metrics/aggregation.js +363 -0
  316. package/dist/metrics/aggregation.js.map +1 -0
  317. package/dist/metrics/common.js +64 -0
  318. package/dist/metrics/common.js.map +1 -0
  319. package/dist/metrics/enums.js +78 -0
  320. package/dist/metrics/enums.js.map +1 -0
  321. package/dist/metrics/index.js +19 -0
  322. package/dist/metrics/index.js.map +1 -0
  323. package/dist/metrics/model-provider-registry.js +88 -0
  324. package/dist/metrics/model-provider-registry.js.map +1 -0
  325. package/dist/metrics/otel-integration.js +263 -0
  326. package/dist/metrics/otel-integration.js.map +1 -0
  327. package/dist/metrics/provider-detection.js +103 -0
  328. package/dist/metrics/provider-detection.js.map +1 -0
  329. package/dist/metrics/token-estimation.js +253 -0
  330. package/dist/metrics/token-estimation.js.map +1 -0
  331. package/dist/metrics/token-service.js +450 -0
  332. package/dist/metrics/token-service.js.map +1 -0
  333. package/dist/migration/agent-outputs.js +316 -0
  334. package/dist/migration/agent-outputs.js.map +1 -0
  335. package/dist/migration/checksum.js +92 -0
  336. package/dist/migration/checksum.js.map +1 -0
  337. package/dist/migration/index.js +282 -0
  338. package/dist/migration/index.js.map +1 -0
  339. package/dist/migration/logger.js +360 -0
  340. package/dist/migration/logger.js.map +1 -0
  341. package/dist/migration/preflight.js +9 -0
  342. package/dist/migration/preflight.js.map +1 -0
  343. package/dist/migration/state.js +421 -0
  344. package/dist/migration/state.js.map +1 -0
  345. package/dist/migration/validate.js +241 -0
  346. package/dist/migration/validate.js.map +1 -0
  347. package/dist/mvi-helpers.js +74 -0
  348. package/dist/mvi-helpers.js.map +1 -0
  349. package/dist/nexus/deps.js +375 -0
  350. package/dist/nexus/deps.js.map +1 -0
  351. package/dist/nexus/discover.js +288 -0
  352. package/dist/nexus/discover.js.map +1 -0
  353. package/dist/nexus/hash.js +10 -0
  354. package/dist/nexus/hash.js.map +1 -0
  355. package/dist/nexus/index.js +40 -0
  356. package/dist/nexus/index.js.map +1 -0
  357. package/dist/nexus/migrate-json-to-sqlite.js +115 -0
  358. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
  359. package/dist/nexus/permissions.js +105 -0
  360. package/dist/nexus/permissions.js.map +1 -0
  361. package/dist/nexus/query.js +175 -0
  362. package/dist/nexus/query.js.map +1 -0
  363. package/dist/nexus/registry.js +584 -0
  364. package/dist/nexus/registry.js.map +1 -0
  365. package/dist/nexus/sharing/index.js +288 -0
  366. package/dist/nexus/sharing/index.js.map +1 -0
  367. package/dist/nexus/transfer-types.js +8 -0
  368. package/dist/nexus/transfer-types.js.map +1 -0
  369. package/dist/nexus/transfer.js +263 -0
  370. package/dist/nexus/transfer.js.map +1 -0
  371. package/dist/nexus/workspace.js +355 -0
  372. package/dist/nexus/workspace.js.map +1 -0
  373. package/dist/observability/index.js +103 -0
  374. package/dist/observability/index.js.map +1 -0
  375. package/dist/observability/log-filter.js +63 -0
  376. package/dist/observability/log-filter.js.map +1 -0
  377. package/dist/observability/log-parser.js +99 -0
  378. package/dist/observability/log-parser.js.map +1 -0
  379. package/dist/observability/log-reader.js +139 -0
  380. package/dist/observability/log-reader.js.map +1 -0
  381. package/dist/observability/types.js +19 -0
  382. package/dist/observability/types.js.map +1 -0
  383. package/dist/orchestration/analyze.js +107 -0
  384. package/dist/orchestration/analyze.js.map +1 -0
  385. package/dist/orchestration/bootstrap.js +132 -0
  386. package/dist/orchestration/bootstrap.js.map +1 -0
  387. package/dist/orchestration/context.js +56 -0
  388. package/dist/orchestration/context.js.map +1 -0
  389. package/dist/orchestration/critical-path.js +100 -0
  390. package/dist/orchestration/critical-path.js.map +1 -0
  391. package/dist/orchestration/hierarchy.js +183 -0
  392. package/dist/orchestration/hierarchy.js.map +1 -0
  393. package/dist/orchestration/index.js +287 -0
  394. package/dist/orchestration/index.js.map +1 -0
  395. package/dist/orchestration/parallel.js +89 -0
  396. package/dist/orchestration/parallel.js.map +1 -0
  397. package/dist/orchestration/protocol-validators.js +815 -0
  398. package/dist/orchestration/protocol-validators.js.map +1 -0
  399. package/dist/orchestration/skill-ops.js +98 -0
  400. package/dist/orchestration/skill-ops.js.map +1 -0
  401. package/dist/orchestration/status.js +107 -0
  402. package/dist/orchestration/status.js.map +1 -0
  403. package/dist/orchestration/unblock.js +103 -0
  404. package/dist/orchestration/unblock.js.map +1 -0
  405. package/dist/orchestration/validate-spawn.js +67 -0
  406. package/dist/orchestration/validate-spawn.js.map +1 -0
  407. package/dist/orchestration/waves.js +86 -0
  408. package/dist/orchestration/waves.js.map +1 -0
  409. package/dist/otel/index.js +163 -0
  410. package/dist/otel/index.js.map +1 -0
  411. package/dist/output.d.ts +32 -11
  412. package/dist/output.d.ts.map +1 -1
  413. package/dist/output.js +164 -0
  414. package/dist/output.js.map +1 -0
  415. package/dist/pagination.js +64 -0
  416. package/dist/pagination.js.map +1 -0
  417. package/dist/paths.d.ts +39 -9
  418. package/dist/paths.d.ts.map +1 -1
  419. package/dist/paths.js +842 -0
  420. package/dist/paths.js.map +1 -0
  421. package/dist/phases/deps.js +372 -0
  422. package/dist/phases/deps.js.map +1 -0
  423. package/dist/phases/index.js +349 -0
  424. package/dist/phases/index.js.map +1 -0
  425. package/dist/pipeline/index.js +10 -0
  426. package/dist/pipeline/index.js.map +1 -0
  427. package/dist/pipeline/phase.js +45 -0
  428. package/dist/pipeline/phase.js.map +1 -0
  429. package/dist/platform.js +211 -0
  430. package/dist/platform.js.map +1 -0
  431. package/dist/project-info.js +84 -0
  432. package/dist/project-info.js.map +1 -0
  433. package/dist/reconciliation/index.js +10 -0
  434. package/dist/reconciliation/index.js.map +1 -0
  435. package/dist/reconciliation/link-store.js +129 -0
  436. package/dist/reconciliation/link-store.js.map +1 -0
  437. package/dist/reconciliation/reconciliation-engine.js +298 -0
  438. package/dist/reconciliation/reconciliation-engine.js.map +1 -0
  439. package/dist/release/artifacts.js +427 -0
  440. package/dist/release/artifacts.js.map +1 -0
  441. package/dist/release/changelog-writer.js +151 -0
  442. package/dist/release/changelog-writer.js.map +1 -0
  443. package/dist/release/channel.js +144 -0
  444. package/dist/release/channel.js.map +1 -0
  445. package/dist/release/ci.js +166 -0
  446. package/dist/release/ci.js.map +1 -0
  447. package/dist/release/github-pr.js +225 -0
  448. package/dist/release/github-pr.js.map +1 -0
  449. package/dist/release/guards.js +116 -0
  450. package/dist/release/guards.js.map +1 -0
  451. package/dist/release/index.js +22 -0
  452. package/dist/release/index.js.map +1 -0
  453. package/dist/release/release-config.js +158 -0
  454. package/dist/release/release-config.js.map +1 -0
  455. package/dist/release/release-manifest.js +1019 -0
  456. package/dist/release/release-manifest.js.map +1 -0
  457. package/dist/release/version-bump.js +255 -0
  458. package/dist/release/version-bump.js.map +1 -0
  459. package/dist/remote/index.js +257 -0
  460. package/dist/remote/index.js.map +1 -0
  461. package/dist/repair.js +130 -0
  462. package/dist/repair.js.map +1 -0
  463. package/dist/research/index.js +2 -0
  464. package/dist/research/index.js.map +1 -0
  465. package/dist/roadmap/index.js +59 -0
  466. package/dist/roadmap/index.js.map +1 -0
  467. package/dist/routing/capability-matrix.js +1556 -0
  468. package/dist/routing/capability-matrix.js.map +1 -0
  469. package/dist/routing/index.js +9 -0
  470. package/dist/routing/index.js.map +1 -0
  471. package/dist/scaffold.d.ts +15 -2
  472. package/dist/scaffold.d.ts.map +1 -1
  473. package/dist/scaffold.js +1759 -0
  474. package/dist/scaffold.js.map +1 -0
  475. package/dist/schema-management.js +295 -0
  476. package/dist/schema-management.js.map +1 -0
  477. package/dist/security/index.js +9 -0
  478. package/dist/security/index.js.map +1 -0
  479. package/dist/security/input-sanitization.js +321 -0
  480. package/dist/security/input-sanitization.js.map +1 -0
  481. package/dist/sequence/index.js +295 -0
  482. package/dist/sequence/index.js.map +1 -0
  483. package/dist/sessions/assumptions.js +54 -0
  484. package/dist/sessions/assumptions.js.map +1 -0
  485. package/dist/sessions/briefing.js +377 -0
  486. package/dist/sessions/briefing.js.map +1 -0
  487. package/dist/sessions/context-alert.js +222 -0
  488. package/dist/sessions/context-alert.js.map +1 -0
  489. package/dist/sessions/context-inject.js +61 -0
  490. package/dist/sessions/context-inject.js.map +1 -0
  491. package/dist/sessions/context-monitor.js +98 -0
  492. package/dist/sessions/context-monitor.js.map +1 -0
  493. package/dist/sessions/decisions.js +65 -0
  494. package/dist/sessions/decisions.js.map +1 -0
  495. package/dist/sessions/find.js +65 -0
  496. package/dist/sessions/find.js.map +1 -0
  497. package/dist/sessions/handoff.js +328 -0
  498. package/dist/sessions/handoff.js.map +1 -0
  499. package/dist/sessions/hitl-warnings.js +254 -0
  500. package/dist/sessions/hitl-warnings.js.map +1 -0
  501. package/dist/sessions/index.js +327 -0
  502. package/dist/sessions/index.js.map +1 -0
  503. package/dist/sessions/session-archive.js +40 -0
  504. package/dist/sessions/session-archive.js.map +1 -0
  505. package/dist/sessions/session-cleanup.js +59 -0
  506. package/dist/sessions/session-cleanup.js.map +1 -0
  507. package/dist/sessions/session-drift.js +134 -0
  508. package/dist/sessions/session-drift.js.map +1 -0
  509. package/dist/sessions/session-enforcement.js +144 -0
  510. package/dist/sessions/session-enforcement.js.map +1 -0
  511. package/dist/sessions/session-grade.js +253 -0
  512. package/dist/sessions/session-grade.js.map +1 -0
  513. package/dist/sessions/session-history.js +42 -0
  514. package/dist/sessions/session-history.js.map +1 -0
  515. package/dist/sessions/session-id.js +81 -0
  516. package/dist/sessions/session-id.js.map +1 -0
  517. package/dist/sessions/session-memory-bridge.js +52 -0
  518. package/dist/sessions/session-memory-bridge.js.map +1 -0
  519. package/dist/sessions/session-show.js +24 -0
  520. package/dist/sessions/session-show.js.map +1 -0
  521. package/dist/sessions/session-stats.js +69 -0
  522. package/dist/sessions/session-stats.js.map +1 -0
  523. package/dist/sessions/session-suspend.js +39 -0
  524. package/dist/sessions/session-suspend.js.map +1 -0
  525. package/dist/sessions/session-switch.js +51 -0
  526. package/dist/sessions/session-switch.js.map +1 -0
  527. package/dist/sessions/session-view.js +76 -0
  528. package/dist/sessions/session-view.js.map +1 -0
  529. package/dist/sessions/snapshot.js +213 -0
  530. package/dist/sessions/snapshot.js.map +1 -0
  531. package/dist/sessions/statusline-setup.js +85 -0
  532. package/dist/sessions/statusline-setup.js.map +1 -0
  533. package/dist/sessions/types.js +8 -0
  534. package/dist/sessions/types.js.map +1 -0
  535. package/dist/skills/agents/config.js +94 -0
  536. package/dist/skills/agents/config.js.map +1 -0
  537. package/dist/skills/agents/install.js +116 -0
  538. package/dist/skills/agents/install.js.map +1 -0
  539. package/dist/skills/agents/registry.js +161 -0
  540. package/dist/skills/agents/registry.js.map +1 -0
  541. package/dist/skills/discovery.js +333 -0
  542. package/dist/skills/discovery.js.map +1 -0
  543. package/dist/skills/dispatch.js +347 -0
  544. package/dist/skills/dispatch.js.map +1 -0
  545. package/dist/skills/dynamic-skill-generator.d.ts +0 -2
  546. package/dist/skills/dynamic-skill-generator.d.ts.map +1 -1
  547. package/dist/skills/dynamic-skill-generator.js +87 -0
  548. package/dist/skills/dynamic-skill-generator.js.map +1 -0
  549. package/dist/skills/index.js +44 -0
  550. package/dist/skills/index.js.map +1 -0
  551. package/dist/skills/injection/subagent.js +195 -0
  552. package/dist/skills/injection/subagent.js.map +1 -0
  553. package/dist/skills/injection/token.js +260 -0
  554. package/dist/skills/injection/token.js.map +1 -0
  555. package/dist/skills/install.js +40 -0
  556. package/dist/skills/install.js.map +1 -0
  557. package/dist/skills/manifests/contribution.js +175 -0
  558. package/dist/skills/manifests/contribution.js.map +1 -0
  559. package/dist/skills/manifests/research.js +281 -0
  560. package/dist/skills/manifests/research.js.map +1 -0
  561. package/dist/skills/manifests/resolver.js +146 -0
  562. package/dist/skills/manifests/resolver.js.map +1 -0
  563. package/dist/skills/marketplace.js +90 -0
  564. package/dist/skills/marketplace.js.map +1 -0
  565. package/dist/skills/orchestrator/spawn.js +178 -0
  566. package/dist/skills/orchestrator/spawn.js.map +1 -0
  567. package/dist/skills/orchestrator/startup.js +451 -0
  568. package/dist/skills/orchestrator/startup.js.map +1 -0
  569. package/dist/skills/orchestrator/validator.js +301 -0
  570. package/dist/skills/orchestrator/validator.js.map +1 -0
  571. package/dist/skills/precedence-integration.js +73 -0
  572. package/dist/skills/precedence-integration.js.map +1 -0
  573. package/dist/skills/precedence-types.js +16 -0
  574. package/dist/skills/precedence-types.js.map +1 -0
  575. package/dist/skills/routing-table.js +63 -0
  576. package/dist/skills/routing-table.js.map +1 -0
  577. package/dist/skills/skill-paths.js +217 -0
  578. package/dist/skills/skill-paths.js.map +1 -0
  579. package/dist/skills/test-utility.js +55 -0
  580. package/dist/skills/test-utility.js.map +1 -0
  581. package/dist/skills/types.js +118 -0
  582. package/dist/skills/types.js.map +1 -0
  583. package/dist/skills/validation.js +183 -0
  584. package/dist/skills/validation.js.map +1 -0
  585. package/dist/skills/version.js +57 -0
  586. package/dist/skills/version.js.map +1 -0
  587. package/dist/snapshot/index.js +188 -0
  588. package/dist/snapshot/index.js.map +1 -0
  589. package/dist/spawn/adapter-registry.js +246 -0
  590. package/dist/spawn/adapter-registry.js.map +1 -0
  591. package/dist/spawn/index.js +10 -0
  592. package/dist/spawn/index.js.map +1 -0
  593. package/dist/stats/index.js +343 -0
  594. package/dist/stats/index.js.map +1 -0
  595. package/dist/stats/workflow-telemetry.js +400 -0
  596. package/dist/stats/workflow-telemetry.js.map +1 -0
  597. package/dist/sticky/archive.js +47 -0
  598. package/dist/sticky/archive.js.map +1 -0
  599. package/dist/sticky/convert.js +235 -0
  600. package/dist/sticky/convert.js.map +1 -0
  601. package/dist/sticky/create.js +48 -0
  602. package/dist/sticky/create.js.map +1 -0
  603. package/dist/sticky/id.js +35 -0
  604. package/dist/sticky/id.js.map +1 -0
  605. package/dist/sticky/index.js +16 -0
  606. package/dist/sticky/index.js.map +1 -0
  607. package/dist/sticky/list.js +44 -0
  608. package/dist/sticky/list.js.map +1 -0
  609. package/dist/sticky/purge.js +45 -0
  610. package/dist/sticky/purge.js.map +1 -0
  611. package/dist/sticky/show.js +42 -0
  612. package/dist/sticky/show.js.map +1 -0
  613. package/dist/sticky/types.js +10 -0
  614. package/dist/sticky/types.js.map +1 -0
  615. package/dist/store/agent-registry-accessor.d.ts +203 -12
  616. package/dist/store/agent-registry-accessor.d.ts.map +1 -1
  617. package/dist/store/agent-registry-accessor.js +783 -0
  618. package/dist/store/agent-registry-accessor.js.map +1 -0
  619. package/dist/store/api-key-kdf.d.ts +73 -0
  620. package/dist/store/api-key-kdf.d.ts.map +1 -0
  621. package/dist/store/api-key-kdf.js +84 -0
  622. package/dist/store/api-key-kdf.js.map +1 -0
  623. package/dist/store/atomic.js +167 -0
  624. package/dist/store/atomic.js.map +1 -0
  625. package/dist/store/backup.js +94 -0
  626. package/dist/store/backup.js.map +1 -0
  627. package/dist/store/brain-accessor.js +397 -0
  628. package/dist/store/brain-accessor.js.map +1 -0
  629. package/dist/store/brain-schema.d.ts +8 -8
  630. package/dist/store/brain-schema.js +215 -0
  631. package/dist/store/brain-schema.js.map +1 -0
  632. package/dist/store/brain-sqlite.js +222 -0
  633. package/dist/store/brain-sqlite.js.map +1 -0
  634. package/dist/store/cache.js +168 -0
  635. package/dist/store/cache.js.map +1 -0
  636. package/dist/store/chain-schema.js +51 -0
  637. package/dist/store/chain-schema.js.map +1 -0
  638. package/dist/store/cleanup-legacy.d.ts +128 -0
  639. package/dist/store/cleanup-legacy.d.ts.map +1 -0
  640. package/dist/store/cleanup-legacy.js +171 -0
  641. package/dist/store/cleanup-legacy.js.map +1 -0
  642. package/dist/store/conduit-sqlite.d.ts +184 -0
  643. package/dist/store/conduit-sqlite.d.ts.map +1 -0
  644. package/dist/store/conduit-sqlite.js +570 -0
  645. package/dist/store/conduit-sqlite.js.map +1 -0
  646. package/dist/store/converters.js +124 -0
  647. package/dist/store/converters.js.map +1 -0
  648. package/dist/store/cross-db-cleanup.js +319 -0
  649. package/dist/store/cross-db-cleanup.js.map +1 -0
  650. package/dist/store/data-accessor.js +26 -0
  651. package/dist/store/data-accessor.js.map +1 -0
  652. package/dist/store/data-safety-central.js +269 -0
  653. package/dist/store/data-safety-central.js.map +1 -0
  654. package/dist/store/data-safety.js +274 -0
  655. package/dist/store/data-safety.js.map +1 -0
  656. package/dist/store/db-helpers.js +224 -0
  657. package/dist/store/db-helpers.js.map +1 -0
  658. package/dist/store/export.js +155 -0
  659. package/dist/store/export.js.map +1 -0
  660. package/dist/store/file-utils.js +270 -0
  661. package/dist/store/file-utils.js.map +1 -0
  662. package/dist/store/git-checkpoint.js +365 -0
  663. package/dist/store/git-checkpoint.js.map +1 -0
  664. package/dist/store/global-salt.d.ts +78 -0
  665. package/dist/store/global-salt.d.ts.map +1 -0
  666. package/dist/store/global-salt.js +147 -0
  667. package/dist/store/global-salt.js.map +1 -0
  668. package/dist/store/import-logging.js +139 -0
  669. package/dist/store/import-logging.js.map +1 -0
  670. package/dist/store/import-remap.js +145 -0
  671. package/dist/store/import-remap.js.map +1 -0
  672. package/dist/store/import-sort.js +121 -0
  673. package/dist/store/import-sort.js.map +1 -0
  674. package/dist/store/index.d.ts +1 -0
  675. package/dist/store/index.d.ts.map +1 -1
  676. package/dist/store/index.js +29 -0
  677. package/dist/store/index.js.map +1 -0
  678. package/dist/store/json.js +208 -0
  679. package/dist/store/json.js.map +1 -0
  680. package/dist/store/lifecycle-store.js +249 -0
  681. package/dist/store/lifecycle-store.js.map +1 -0
  682. package/dist/store/lock.js +70 -0
  683. package/dist/store/lock.js.map +1 -0
  684. package/dist/store/migrate-signaldock-to-conduit.d.ts +81 -0
  685. package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -0
  686. package/dist/store/migrate-signaldock-to-conduit.js +555 -0
  687. package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
  688. package/dist/store/migration-manager.js +151 -0
  689. package/dist/store/migration-manager.js.map +1 -0
  690. package/dist/store/migration-sqlite.js +676 -0
  691. package/dist/store/migration-sqlite.js.map +1 -0
  692. package/dist/store/nexus-schema.js +62 -0
  693. package/dist/store/nexus-schema.js.map +1 -0
  694. package/dist/store/nexus-sqlite.d.ts +14 -2
  695. package/dist/store/nexus-sqlite.d.ts.map +1 -1
  696. package/dist/store/nexus-sqlite.js +242 -0
  697. package/dist/store/nexus-sqlite.js.map +1 -0
  698. package/dist/store/nexus-validation-schemas.js +40 -0
  699. package/dist/store/nexus-validation-schemas.js.map +1 -0
  700. package/dist/store/parsers.js +37 -0
  701. package/dist/store/parsers.js.map +1 -0
  702. package/dist/store/project-detect.js +457 -0
  703. package/dist/store/project-detect.js.map +1 -0
  704. package/dist/store/provider.js +101 -0
  705. package/dist/store/provider.js.map +1 -0
  706. package/dist/store/safety-data-accessor.js +257 -0
  707. package/dist/store/safety-data-accessor.js.map +1 -0
  708. package/dist/store/schema.js +7 -0
  709. package/dist/store/schema.js.map +1 -0
  710. package/dist/store/session-store.js +219 -0
  711. package/dist/store/session-store.js.map +1 -0
  712. package/dist/store/signaldock-sqlite.d.ts +122 -19
  713. package/dist/store/signaldock-sqlite.d.ts.map +1 -1
  714. package/dist/store/signaldock-sqlite.js +550 -0
  715. package/dist/store/signaldock-sqlite.js.map +1 -0
  716. package/dist/store/sqlite-backup.d.ts +121 -10
  717. package/dist/store/sqlite-backup.d.ts.map +1 -1
  718. package/dist/store/sqlite-backup.js +359 -0
  719. package/dist/store/sqlite-backup.js.map +1 -0
  720. package/dist/store/sqlite-data-accessor.js +787 -0
  721. package/dist/store/sqlite-data-accessor.js.map +1 -0
  722. package/dist/store/sqlite.d.ts.map +1 -1
  723. package/dist/store/sqlite.js +481 -0
  724. package/dist/store/sqlite.js.map +1 -0
  725. package/dist/store/status-registry.js +8 -0
  726. package/dist/store/status-registry.js.map +1 -0
  727. package/dist/store/task-store.js +358 -0
  728. package/dist/store/task-store.js.map +1 -0
  729. package/dist/store/tasks-schema.d.ts +8 -8
  730. package/dist/store/tasks-schema.js +610 -0
  731. package/dist/store/tasks-schema.js.map +1 -0
  732. package/dist/store/typed-query.js +15 -0
  733. package/dist/store/typed-query.js.map +1 -0
  734. package/dist/store/validation-schemas.d.ts +37 -37
  735. package/dist/store/validation-schemas.js +278 -0
  736. package/dist/store/validation-schemas.js.map +1 -0
  737. package/dist/system/archive-analytics.js +277 -0
  738. package/dist/system/archive-analytics.js.map +1 -0
  739. package/dist/system/archive-stats.js +64 -0
  740. package/dist/system/archive-stats.js.map +1 -0
  741. package/dist/system/audit.js +145 -0
  742. package/dist/system/audit.js.map +1 -0
  743. package/dist/system/backup.d.ts +65 -3
  744. package/dist/system/backup.d.ts.map +1 -1
  745. package/dist/system/backup.js +280 -0
  746. package/dist/system/backup.js.map +1 -0
  747. package/dist/system/cleanup.js +134 -0
  748. package/dist/system/cleanup.js.map +1 -0
  749. package/dist/system/health.js +1100 -0
  750. package/dist/system/health.js.map +1 -0
  751. package/dist/system/index.js +18 -0
  752. package/dist/system/index.js.map +1 -0
  753. package/dist/system/inject-generate.js +122 -0
  754. package/dist/system/inject-generate.js.map +1 -0
  755. package/dist/system/labels.js +38 -0
  756. package/dist/system/labels.js.map +1 -0
  757. package/dist/system/metrics.js +61 -0
  758. package/dist/system/metrics.js.map +1 -0
  759. package/dist/system/migrate.js +43 -0
  760. package/dist/system/migrate.js.map +1 -0
  761. package/dist/system/platform-paths.js +80 -0
  762. package/dist/system/platform-paths.js.map +1 -0
  763. package/dist/system/runtime.d.ts +0 -2
  764. package/dist/system/runtime.d.ts.map +1 -1
  765. package/dist/system/runtime.js +161 -0
  766. package/dist/system/runtime.js.map +1 -0
  767. package/dist/system/safestop.js +99 -0
  768. package/dist/system/safestop.js.map +1 -0
  769. package/dist/system/storage-preflight.js +123 -0
  770. package/dist/system/storage-preflight.js.map +1 -0
  771. package/dist/task-work/index.js +159 -0
  772. package/dist/task-work/index.js.map +1 -0
  773. package/dist/tasks/add.d.ts +1 -1
  774. package/dist/tasks/add.d.ts.map +1 -1
  775. package/dist/tasks/add.js +736 -0
  776. package/dist/tasks/add.js.map +1 -0
  777. package/dist/tasks/analyze.js +85 -0
  778. package/dist/tasks/analyze.js.map +1 -0
  779. package/dist/tasks/archive.js +90 -0
  780. package/dist/tasks/archive.js.map +1 -0
  781. package/dist/tasks/atomicity.js +83 -0
  782. package/dist/tasks/atomicity.js.map +1 -0
  783. package/dist/tasks/cancel-ops.js +83 -0
  784. package/dist/tasks/cancel-ops.js.map +1 -0
  785. package/dist/tasks/complete.d.ts.map +1 -1
  786. package/dist/tasks/complete.js +214 -0
  787. package/dist/tasks/complete.js.map +1 -0
  788. package/dist/tasks/crossref-extract.js +73 -0
  789. package/dist/tasks/crossref-extract.js.map +1 -0
  790. package/dist/tasks/delete-preview.js +192 -0
  791. package/dist/tasks/delete-preview.js.map +1 -0
  792. package/dist/tasks/delete.js +120 -0
  793. package/dist/tasks/delete.js.map +1 -0
  794. package/dist/tasks/deletion-strategy.js +200 -0
  795. package/dist/tasks/deletion-strategy.js.map +1 -0
  796. package/dist/tasks/dependency-check.js +278 -0
  797. package/dist/tasks/dependency-check.js.map +1 -0
  798. package/dist/tasks/deps-ready.js +32 -0
  799. package/dist/tasks/deps-ready.js.map +1 -0
  800. package/dist/tasks/enforcement.js +86 -0
  801. package/dist/tasks/enforcement.js.map +1 -0
  802. package/dist/tasks/epic-enforcement.js +294 -0
  803. package/dist/tasks/epic-enforcement.js.map +1 -0
  804. package/dist/tasks/find.d.ts.map +1 -1
  805. package/dist/tasks/find.js +157 -0
  806. package/dist/tasks/find.js.map +1 -0
  807. package/dist/tasks/graph-cache.js +127 -0
  808. package/dist/tasks/graph-cache.js.map +1 -0
  809. package/dist/tasks/graph-ops.js +171 -0
  810. package/dist/tasks/graph-ops.js.map +1 -0
  811. package/dist/tasks/graph-rag.js +328 -0
  812. package/dist/tasks/graph-rag.js.map +1 -0
  813. package/dist/tasks/hierarchy-policy.js +149 -0
  814. package/dist/tasks/hierarchy-policy.js.map +1 -0
  815. package/dist/tasks/hierarchy.js +185 -0
  816. package/dist/tasks/hierarchy.js.map +1 -0
  817. package/dist/tasks/id-generator.js +65 -0
  818. package/dist/tasks/id-generator.js.map +1 -0
  819. package/dist/tasks/index.js +14 -0
  820. package/dist/tasks/index.js.map +1 -0
  821. package/dist/tasks/labels.d.ts.map +1 -1
  822. package/dist/tasks/labels.js +55 -0
  823. package/dist/tasks/labels.js.map +1 -0
  824. package/dist/tasks/list.js +75 -0
  825. package/dist/tasks/list.js.map +1 -0
  826. package/dist/tasks/phase-tracking.js +133 -0
  827. package/dist/tasks/phase-tracking.js.map +1 -0
  828. package/dist/tasks/pipeline-stage.js +248 -0
  829. package/dist/tasks/pipeline-stage.js.map +1 -0
  830. package/dist/tasks/plan.js +268 -0
  831. package/dist/tasks/plan.js.map +1 -0
  832. package/dist/tasks/relates.d.ts.map +1 -1
  833. package/dist/tasks/relates.js +101 -0
  834. package/dist/tasks/relates.js.map +1 -0
  835. package/dist/tasks/show.d.ts.map +1 -1
  836. package/dist/tasks/show.js +83 -0
  837. package/dist/tasks/show.js.map +1 -0
  838. package/dist/tasks/size-weighting.js +86 -0
  839. package/dist/tasks/size-weighting.js.map +1 -0
  840. package/dist/tasks/staleness.js +86 -0
  841. package/dist/tasks/staleness.js.map +1 -0
  842. package/dist/tasks/task-ops.js +1741 -0
  843. package/dist/tasks/task-ops.js.map +1 -0
  844. package/dist/tasks/update.d.ts.map +1 -1
  845. package/dist/tasks/update.js +303 -0
  846. package/dist/tasks/update.js.map +1 -0
  847. package/dist/templates/index.js +10 -0
  848. package/dist/templates/index.js.map +1 -0
  849. package/dist/templates/parser.js +254 -0
  850. package/dist/templates/parser.js.map +1 -0
  851. package/dist/ui/aliases.js +153 -0
  852. package/dist/ui/aliases.js.map +1 -0
  853. package/dist/ui/changelog.js +184 -0
  854. package/dist/ui/changelog.js.map +1 -0
  855. package/dist/ui/command-registry.js +168 -0
  856. package/dist/ui/command-registry.js.map +1 -0
  857. package/dist/ui/flags.js +94 -0
  858. package/dist/ui/flags.js.map +1 -0
  859. package/dist/ui/index.js +24 -0
  860. package/dist/ui/index.js.map +1 -0
  861. package/dist/upgrade.js +1148 -0
  862. package/dist/upgrade.js.map +1 -0
  863. package/dist/validation/chain-validation.js +146 -0
  864. package/dist/validation/chain-validation.js.map +1 -0
  865. package/dist/validation/compliance.js +155 -0
  866. package/dist/validation/compliance.js.map +1 -0
  867. package/dist/validation/docs-sync.js +212 -0
  868. package/dist/validation/docs-sync.js.map +1 -0
  869. package/dist/validation/doctor/checks.js +1069 -0
  870. package/dist/validation/doctor/checks.js.map +1 -0
  871. package/dist/validation/doctor/index.js +9 -0
  872. package/dist/validation/doctor/index.js.map +1 -0
  873. package/dist/validation/doctor/project-cache.js +160 -0
  874. package/dist/validation/doctor/project-cache.js.map +1 -0
  875. package/dist/validation/doctor/utils.js +155 -0
  876. package/dist/validation/doctor/utils.js.map +1 -0
  877. package/dist/validation/engine.d.ts.map +1 -1
  878. package/dist/validation/engine.js +914 -0
  879. package/dist/validation/engine.js.map +1 -0
  880. package/dist/validation/gap-check.js +175 -0
  881. package/dist/validation/gap-check.js.map +1 -0
  882. package/dist/validation/index.js +40 -0
  883. package/dist/validation/index.js.map +1 -0
  884. package/dist/validation/manifest.js +237 -0
  885. package/dist/validation/manifest.js.map +1 -0
  886. package/dist/validation/operation-gate-validators.js +724 -0
  887. package/dist/validation/operation-gate-validators.js.map +1 -0
  888. package/dist/validation/operation-verification-gates.js +532 -0
  889. package/dist/validation/operation-verification-gates.js.map +1 -0
  890. package/dist/validation/param-utils.d.ts +5 -3
  891. package/dist/validation/param-utils.d.ts.map +1 -1
  892. package/dist/validation/param-utils.js +141 -0
  893. package/dist/validation/param-utils.js.map +1 -0
  894. package/dist/validation/protocol-common.js +300 -0
  895. package/dist/validation/protocol-common.js.map +1 -0
  896. package/dist/validation/protocols/_shared.d.ts.map +1 -1
  897. package/dist/validation/protocols/_shared.js +82 -0
  898. package/dist/validation/protocols/_shared.js.map +1 -0
  899. package/dist/validation/protocols/architecture-decision.js +31 -0
  900. package/dist/validation/protocols/architecture-decision.js.map +1 -0
  901. package/dist/validation/protocols/artifact-publish.js +28 -0
  902. package/dist/validation/protocols/artifact-publish.js.map +1 -0
  903. package/dist/validation/protocols/consensus.js +41 -0
  904. package/dist/validation/protocols/consensus.js.map +1 -0
  905. package/dist/validation/protocols/contribution.js +27 -0
  906. package/dist/validation/protocols/contribution.js.map +1 -0
  907. package/dist/validation/protocols/decomposition.js +28 -0
  908. package/dist/validation/protocols/decomposition.js.map +1 -0
  909. package/dist/validation/protocols/implementation.js +24 -0
  910. package/dist/validation/protocols/implementation.js.map +1 -0
  911. package/dist/validation/protocols/provenance.js +29 -0
  912. package/dist/validation/protocols/provenance.js.map +1 -0
  913. package/dist/validation/protocols/release.js +29 -0
  914. package/dist/validation/protocols/release.js.map +1 -0
  915. package/dist/validation/protocols/research.js +24 -0
  916. package/dist/validation/protocols/research.js.map +1 -0
  917. package/dist/validation/protocols/specification.js +27 -0
  918. package/dist/validation/protocols/specification.js.map +1 -0
  919. package/dist/validation/protocols/testing.js +30 -0
  920. package/dist/validation/protocols/testing.js.map +1 -0
  921. package/dist/validation/protocols/validation.js +30 -0
  922. package/dist/validation/protocols/validation.js.map +1 -0
  923. package/dist/validation/schema-integrity.js +170 -0
  924. package/dist/validation/schema-integrity.js.map +1 -0
  925. package/dist/validation/schema-validator.js +176 -0
  926. package/dist/validation/schema-validator.js.map +1 -0
  927. package/dist/validation/validate-ops.js +937 -0
  928. package/dist/validation/validate-ops.js.map +1 -0
  929. package/dist/validation/validation-rules.js +226 -0
  930. package/dist/validation/validation-rules.js.map +1 -0
  931. package/dist/validation/verification.js +321 -0
  932. package/dist/validation/verification.js.map +1 -0
  933. package/package.json +10 -8
  934. package/src/__tests__/paths-walkup.test.ts +305 -0
  935. package/src/__tests__/paths.test.ts +61 -17
  936. package/src/adapters/__tests__/manager.test.ts +0 -1
  937. package/src/codebase-map/analyzers/architecture.ts +0 -1
  938. package/src/conduit/__tests__/local-credential-flow.test.ts +20 -18
  939. package/src/conduit/__tests__/local-transport.test.ts +14 -12
  940. package/src/conduit/local-transport.ts +23 -13
  941. package/src/config.ts +0 -1
  942. package/src/errors.ts +24 -0
  943. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.ts +2 -5
  944. package/src/hooks/handlers/session-hooks.ts +42 -0
  945. package/src/init.ts +1 -2
  946. package/src/internal.ts +67 -3
  947. package/src/lifecycle/cant/lifecycle-rcasd.cant +133 -0
  948. package/src/memory/__tests__/engine-compat.test.ts +2 -2
  949. package/src/memory/__tests__/pipeline-manifest-sqlite.test.ts +4 -4
  950. package/src/observability/__tests__/index.test.ts +4 -4
  951. package/src/observability/__tests__/log-filter.test.ts +4 -4
  952. package/src/output.ts +73 -75
  953. package/src/paths.ts +91 -14
  954. package/src/scaffold.ts +22 -3
  955. package/src/sessions/__tests__/session-grade.integration.test.ts +1 -1
  956. package/src/sessions/__tests__/session-grade.test.ts +2 -2
  957. package/src/skills/__tests__/dynamic-skill-generator.test.ts +0 -2
  958. package/src/skills/dynamic-skill-generator.ts +0 -2
  959. package/src/store/__tests__/agent-registry-accessor.test.ts +807 -0
  960. package/src/store/__tests__/api-key-kdf.test.ts +113 -0
  961. package/src/store/__tests__/cleanup-legacy.test.ts +268 -0
  962. package/src/store/__tests__/conduit-sqlite.test.ts +413 -0
  963. package/src/store/__tests__/database-topology-integration.test.ts +504 -0
  964. package/src/store/__tests__/global-salt.test.ts +195 -0
  965. package/src/store/__tests__/migrate-signaldock-to-conduit.test.ts +715 -0
  966. package/src/store/__tests__/signaldock-sqlite.test.ts +652 -0
  967. package/src/store/__tests__/sqlite-backup-global.test.ts +585 -0
  968. package/src/store/__tests__/sqlite-backup.test.ts +122 -10
  969. package/src/store/__tests__/t310-integration.test.ts +1150 -0
  970. package/src/store/agent-registry-accessor.ts +847 -140
  971. package/src/store/api-key-kdf.ts +104 -0
  972. package/src/store/cleanup-legacy.ts +208 -0
  973. package/src/store/conduit-sqlite.ts +655 -0
  974. package/src/store/global-salt.ts +175 -0
  975. package/src/store/index.ts +7 -0
  976. package/src/store/migrate-signaldock-to-conduit.ts +669 -0
  977. package/src/store/nexus-sqlite.ts +32 -3
  978. package/src/store/signaldock-sqlite.ts +431 -254
  979. package/src/store/sqlite-backup.ts +544 -38
  980. package/src/store/sqlite.ts +19 -3
  981. package/src/system/__tests__/backup.test.ts +237 -0
  982. package/src/system/backup.ts +186 -26
  983. package/src/system/runtime.ts +4 -6
  984. package/src/tasks/__tests__/error-hints.test.ts +256 -0
  985. package/src/tasks/add.ts +99 -9
  986. package/src/tasks/complete.ts +4 -1
  987. package/src/tasks/find.ts +4 -1
  988. package/src/tasks/labels.ts +4 -1
  989. package/src/tasks/relates.ts +16 -4
  990. package/src/tasks/show.ts +4 -1
  991. package/src/tasks/update.ts +32 -3
  992. package/src/validation/__tests__/error-hints.test.ts +97 -0
  993. package/src/validation/engine.ts +16 -1
  994. package/src/validation/param-utils.ts +10 -7
  995. package/src/validation/protocols/_shared.ts +14 -6
  996. package/src/validation/protocols/cant/architecture-decision.cant +80 -0
  997. package/src/validation/protocols/cant/artifact-publish.cant +95 -0
  998. package/src/validation/protocols/cant/consensus.cant +74 -0
  999. package/src/validation/protocols/cant/contribution.cant +82 -0
  1000. package/src/validation/protocols/cant/decomposition.cant +92 -0
  1001. package/src/validation/protocols/cant/implementation.cant +67 -0
  1002. package/src/validation/protocols/cant/provenance.cant +88 -0
  1003. package/src/validation/protocols/cant/release.cant +96 -0
  1004. package/src/validation/protocols/cant/research.cant +66 -0
  1005. package/src/validation/protocols/cant/specification.cant +67 -0
  1006. package/src/validation/protocols/cant/testing.cant +88 -0
  1007. package/src/validation/protocols/cant/validation.cant +65 -0
  1008. package/src/validation/protocols/protocols-markdown/decomposition.md +0 -4
  1009. package/templates/cleo-gitignore +19 -3
  1010. package/templates/config.template.json +0 -1
  1011. package/templates/global-config.template.json +0 -1
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Regression tests: CleoError fix hints on task-layer throws.
3
+ *
4
+ * Each test invokes a core function with invalid input and asserts that
5
+ * the thrown CleoError carries:
6
+ * - options.fix — a non-empty string with a concrete recovery action
7
+ * - options.details.field — the specific field that failed
8
+ *
9
+ * @task T341
10
+ * @epic T335
11
+ */
12
+
13
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
14
+ import { CleoError } from '../../errors.js';
15
+ import { createTestDb, type TestDbEnv } from '../../store/__tests__/test-db-helper.js';
16
+ import { resetDbState } from '../../store/sqlite.js';
17
+ import {
18
+ addTask,
19
+ validateDepends,
20
+ validateLabels,
21
+ validatePhaseFormat,
22
+ validateSize,
23
+ validateStatus,
24
+ validateTaskType,
25
+ validateTitle,
26
+ } from '../add.js';
27
+ import { findTasks } from '../find.js';
28
+ import { showLabelTasks } from '../labels.js';
29
+ import { showTask } from '../show.js';
30
+
31
+ // ---------------------------------------------------------------------------
32
+ // Helper: assert a CleoError has fix + details
33
+ // ---------------------------------------------------------------------------
34
+
35
+ function assertErrorHints(
36
+ fn: () => unknown,
37
+ opts: { fixIncludes?: string; detailsField?: string },
38
+ ): void {
39
+ let caught: unknown;
40
+ try {
41
+ fn();
42
+ } catch (err) {
43
+ caught = err;
44
+ }
45
+ expect(caught).toBeInstanceOf(CleoError);
46
+ const e = caught as CleoError;
47
+ expect(e.fix).toBeTruthy();
48
+ if (opts.fixIncludes) {
49
+ expect(e.fix).toContain(opts.fixIncludes);
50
+ }
51
+ if (opts.detailsField) {
52
+ expect(e.details).toBeDefined();
53
+ expect(e.details!.field).toBe(opts.detailsField);
54
+ }
55
+ }
56
+
57
+ async function assertAsyncErrorHints(
58
+ fn: () => Promise<unknown>,
59
+ opts: { fixIncludes?: string; detailsField?: string },
60
+ ): Promise<void> {
61
+ let caught: unknown;
62
+ try {
63
+ await fn();
64
+ } catch (err) {
65
+ caught = err;
66
+ }
67
+ expect(caught).toBeInstanceOf(CleoError);
68
+ const e = caught as CleoError;
69
+ expect(e.fix).toBeTruthy();
70
+ if (opts.fixIncludes) {
71
+ expect(e.fix).toContain(opts.fixIncludes);
72
+ }
73
+ if (opts.detailsField) {
74
+ expect(e.details).toBeDefined();
75
+ expect(e.details!.field).toBe(opts.detailsField);
76
+ }
77
+ }
78
+
79
+ // ---------------------------------------------------------------------------
80
+ // Tests
81
+ // ---------------------------------------------------------------------------
82
+
83
+ describe('error-hints: validateTitle', () => {
84
+ it('empty title — fix mentions cleo add, field=title', () => {
85
+ assertErrorHints(() => validateTitle(''), {
86
+ fixIncludes: 'cleo add',
87
+ detailsField: 'title',
88
+ });
89
+ });
90
+
91
+ it('whitespace-only title — fix mentions cleo add, field=title', () => {
92
+ assertErrorHints(() => validateTitle(' '), {
93
+ fixIncludes: 'cleo add',
94
+ detailsField: 'title',
95
+ });
96
+ });
97
+
98
+ it('title too long — fix mentions 200, field=title, details has expected/actual', () => {
99
+ let caught: unknown;
100
+ try {
101
+ validateTitle('a'.repeat(201));
102
+ } catch (err) {
103
+ caught = err;
104
+ }
105
+ expect(caught).toBeInstanceOf(CleoError);
106
+ const e = caught as CleoError;
107
+ expect(e.fix).toContain('200');
108
+ expect(e.details).toBeDefined();
109
+ expect(e.details!.field).toBe('title');
110
+ expect(e.details!.expected).toBe(200);
111
+ expect(e.details!.actual).toBe(201);
112
+ });
113
+ });
114
+
115
+ describe('error-hints: validateStatus', () => {
116
+ it('invalid status — fix mentions --status, field=status', () => {
117
+ assertErrorHints(() => validateStatus('broken'), {
118
+ fixIncludes: '--status',
119
+ detailsField: 'status',
120
+ });
121
+ });
122
+ });
123
+
124
+ describe('error-hints: validateSize', () => {
125
+ it('invalid size — fix mentions --size, field=size', () => {
126
+ assertErrorHints(() => validateSize('giant'), {
127
+ fixIncludes: '--size',
128
+ detailsField: 'size',
129
+ });
130
+ });
131
+ });
132
+
133
+ describe('error-hints: validateTaskType', () => {
134
+ it('invalid type — fix mentions --type, field=type', () => {
135
+ assertErrorHints(() => validateTaskType('mega-task'), {
136
+ fixIncludes: '--type',
137
+ detailsField: 'type',
138
+ });
139
+ });
140
+ });
141
+
142
+ describe('error-hints: validateLabels', () => {
143
+ it('invalid label — fix mentions pattern, field=labels', () => {
144
+ assertErrorHints(() => validateLabels(['UPPERCASE']), {
145
+ fixIncludes: '^[a-z]',
146
+ detailsField: 'labels',
147
+ });
148
+ });
149
+ });
150
+
151
+ describe('error-hints: validatePhaseFormat', () => {
152
+ it('invalid phase — fix mentions pattern, field=phase', () => {
153
+ assertErrorHints(() => validatePhaseFormat('UPPER_CASE'), {
154
+ fixIncludes: '^[a-z]',
155
+ detailsField: 'phase',
156
+ });
157
+ });
158
+ });
159
+
160
+ describe('error-hints: validateDepends (sync helper)', () => {
161
+ it('invalid dep ID format — fix mentions T### format, field=depends', () => {
162
+ assertErrorHints(() => validateDepends(['invalid'], []), {
163
+ fixIncludes: 'T###',
164
+ detailsField: 'depends',
165
+ });
166
+ });
167
+
168
+ it('dep not found — fix mentions cleo find, field=depends', () => {
169
+ assertErrorHints(() => validateDepends(['T999'], []), {
170
+ fixIncludes: 'find',
171
+ detailsField: 'depends',
172
+ });
173
+ });
174
+ });
175
+
176
+ // ---------------------------------------------------------------------------
177
+ // Anti-hallucination throw (add.ts line ~436)
178
+ // ---------------------------------------------------------------------------
179
+
180
+ describe('error-hints: anti-hallucination (title === description)', () => {
181
+ let env: TestDbEnv;
182
+
183
+ beforeEach(async () => {
184
+ resetDbState();
185
+ env = await createTestDb();
186
+ });
187
+
188
+ afterEach(async () => {
189
+ await env.cleanup();
190
+ });
191
+
192
+ it('throws with fix mentioning --desc, field=description', async () => {
193
+ await assertAsyncErrorHints(
194
+ () =>
195
+ addTask(
196
+ {
197
+ title: 'same text',
198
+ description: 'same text',
199
+ },
200
+ env.tempDir,
201
+ env.accessor,
202
+ ),
203
+ { fixIncludes: '--desc', detailsField: 'description' },
204
+ );
205
+ });
206
+ });
207
+
208
+ // ---------------------------------------------------------------------------
209
+ // findTasks — query required
210
+ // ---------------------------------------------------------------------------
211
+
212
+ describe('error-hints: findTasks (query required)', () => {
213
+ it('missing query — fix mentions cleo find, field=query', async () => {
214
+ await assertAsyncErrorHints(() => findTasks({}), {
215
+ fixIncludes: 'cleo find',
216
+ detailsField: 'query',
217
+ });
218
+ });
219
+ });
220
+
221
+ // ---------------------------------------------------------------------------
222
+ // showTask — task ID required
223
+ // ---------------------------------------------------------------------------
224
+
225
+ describe('error-hints: showTask (id required)', () => {
226
+ it('empty id — fix mentions cleo show, field=taskId', async () => {
227
+ await assertAsyncErrorHints(() => showTask(''), {
228
+ fixIncludes: 'cleo show',
229
+ detailsField: 'taskId',
230
+ });
231
+ });
232
+ });
233
+
234
+ // ---------------------------------------------------------------------------
235
+ // showLabelTasks — no tasks with label
236
+ // ---------------------------------------------------------------------------
237
+
238
+ describe('error-hints: showLabelTasks (label not found)', () => {
239
+ let env: TestDbEnv;
240
+
241
+ beforeEach(async () => {
242
+ resetDbState();
243
+ env = await createTestDb();
244
+ });
245
+
246
+ afterEach(async () => {
247
+ await env.cleanup();
248
+ });
249
+
250
+ it('no tasks with label — fix mentions cleo labels, field=label', async () => {
251
+ await assertAsyncErrorHints(
252
+ () => showLabelTasks('nonexistent-label', env.tempDir, env.accessor),
253
+ { fixIncludes: 'cleo labels', detailsField: 'label' },
254
+ );
255
+ });
256
+ });
package/src/tasks/add.ts CHANGED
@@ -39,7 +39,7 @@ import { resolveDefaultPipelineStage, validatePipelineStage } from './pipeline-s
39
39
  */
40
40
  export interface AddTaskOptions {
41
41
  title: string;
42
- description: string;
42
+ description?: string;
43
43
  status?: TaskStatus;
44
44
  priority?: TaskPriority;
45
45
  type?: TaskType;
@@ -93,10 +93,16 @@ export function buildDefaultVerification(initializedAt: string): TaskVerificatio
93
93
  */
94
94
  export function validateTitle(title: string): void {
95
95
  if (!title || title.trim().length === 0) {
96
- throw new CleoError(ExitCode.INVALID_INPUT, 'Task title is required');
96
+ throw new CleoError(ExitCode.INVALID_INPUT, 'Task title is required', {
97
+ fix: 'Provide a title: cleo add "<title>"',
98
+ details: { field: 'title' },
99
+ });
97
100
  }
98
101
  if (title.length > 200) {
99
- throw new CleoError(ExitCode.VALIDATION_ERROR, 'Task title must be 200 characters or less');
102
+ throw new CleoError(ExitCode.VALIDATION_ERROR, 'Task title must be 200 characters or less', {
103
+ fix: 'Shorten title to 200 characters or fewer',
104
+ details: { field: 'title', expected: 200, actual: title.length },
105
+ });
100
106
  }
101
107
  }
102
108
 
@@ -109,6 +115,10 @@ export function validateStatus(status: string): asserts status is TaskStatus {
109
115
  throw new CleoError(
110
116
  ExitCode.VALIDATION_ERROR,
111
117
  `Invalid status: ${status} (must be ${TASK_STATUSES.join('|')})`,
118
+ {
119
+ fix: `cleo add ... --status <${TASK_STATUSES.join('|')}>`,
120
+ details: { field: 'status', expected: TASK_STATUSES, actual: status },
121
+ },
112
122
  );
113
123
  }
114
124
  }
@@ -152,6 +162,10 @@ export function normalizePriority(priority: string | number): TaskPriority {
152
162
  throw new CleoError(
153
163
  ExitCode.VALIDATION_ERROR,
154
164
  `Invalid numeric priority: ${priority} (must be 1-9)`,
165
+ {
166
+ fix: `Use a numeric priority 1-9 or one of: ${VALID_PRIORITIES.join('|')}`,
167
+ details: { field: 'priority', expected: '1-9', actual: priority },
168
+ },
155
169
  );
156
170
  }
157
171
  return mapped;
@@ -172,6 +186,10 @@ export function normalizePriority(priority: string | number): TaskPriority {
172
186
  throw new CleoError(
173
187
  ExitCode.VALIDATION_ERROR,
174
188
  `Invalid priority: ${priority} (must be ${VALID_PRIORITIES.join('|')} or numeric 1-9)`,
189
+ {
190
+ fix: `cleo add ... --priority <${VALID_PRIORITIES.join('|')}>`,
191
+ details: { field: 'priority', expected: VALID_PRIORITIES, actual: priority },
192
+ },
175
193
  );
176
194
  }
177
195
 
@@ -194,6 +212,10 @@ export function validateTaskType(type: string): asserts type is TaskType {
194
212
  throw new CleoError(
195
213
  ExitCode.VALIDATION_ERROR,
196
214
  `Invalid task type: ${type} (must be ${valid.join('|')})`,
215
+ {
216
+ fix: `cleo add ... --type <${valid.join('|')}>`,
217
+ details: { field: 'type', expected: valid, actual: type },
218
+ },
197
219
  );
198
220
  }
199
221
  }
@@ -208,6 +230,10 @@ export function validateSize(size: string): asserts size is TaskSize {
208
230
  throw new CleoError(
209
231
  ExitCode.VALIDATION_ERROR,
210
232
  `Invalid size: ${size} (must be ${valid.join('|')})`,
233
+ {
234
+ fix: `cleo add ... --size <${valid.join('|')}>`,
235
+ details: { field: 'size', expected: valid, actual: size },
236
+ },
211
237
  );
212
238
  }
213
239
  }
@@ -223,6 +249,10 @@ export function validateLabels(labels: string[]): void {
223
249
  throw new CleoError(
224
250
  ExitCode.VALIDATION_ERROR,
225
251
  `Invalid label format: '${trimmed}' (must be lowercase alphanumeric with hyphens/periods)`,
252
+ {
253
+ fix: `Labels must match pattern ^[a-z][a-z0-9.-]*$ (e.g. my-label, v1.0)`,
254
+ details: { field: 'labels', expected: '^[a-z][a-z0-9.-]*$', actual: trimmed },
255
+ },
226
256
  );
227
257
  }
228
258
  }
@@ -237,6 +267,10 @@ export function validatePhaseFormat(phase: string): void {
237
267
  throw new CleoError(
238
268
  ExitCode.VALIDATION_ERROR,
239
269
  `Invalid phase format: ${phase} (must be lowercase alphanumeric with hyphens)`,
270
+ {
271
+ fix: `Phase slugs must match pattern ^[a-z][a-z0-9-]*$ (e.g. dev-phase-1)`,
272
+ details: { field: 'phase', expected: '^[a-z][a-z0-9-]*$', actual: phase },
273
+ },
240
274
  );
241
275
  }
242
276
  }
@@ -253,10 +287,17 @@ export function validateDepends(depends: string[], tasks: Task[]): void {
253
287
  throw new CleoError(
254
288
  ExitCode.VALIDATION_ERROR,
255
289
  `Invalid dependency ID format: '${trimmed}' (must be T### format)`,
290
+ {
291
+ fix: 'Dependency IDs must match T### format (e.g. T123, T4567)',
292
+ details: { field: 'depends', expected: 'T###', actual: trimmed },
293
+ },
256
294
  );
257
295
  }
258
296
  if (!existingIds.has(trimmed)) {
259
- throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`);
297
+ throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`, {
298
+ fix: `cleo find "${trimmed}"`,
299
+ details: { field: 'depends', actual: trimmed },
300
+ });
260
301
  }
261
302
  }
262
303
  }
@@ -294,6 +335,10 @@ export function validateParent(
294
335
  throw new CleoError(
295
336
  ExitCode.DEPTH_EXCEEDED,
296
337
  `Cannot add child to ${parentId}: max hierarchy depth (${maxDepth}) would be exceeded`,
338
+ {
339
+ fix: 'Reparent this task under a higher-level epic',
340
+ details: { field: 'parentId', expected: `depth < ${maxDepth}`, actual: depth },
341
+ },
297
342
  );
298
343
  }
299
344
 
@@ -436,6 +481,10 @@ export async function addTask(
436
481
  throw new CleoError(
437
482
  ExitCode.VALIDATION_ERROR,
438
483
  'Title and description must be different (anti-hallucination rule)',
484
+ {
485
+ fix: 'Provide --desc with a description different from the title',
486
+ details: { field: 'description' },
487
+ },
439
488
  );
440
489
  }
441
490
 
@@ -508,11 +557,18 @@ export async function addTask(
508
557
  throw new CleoError(
509
558
  ExitCode.VALIDATION_ERROR,
510
559
  `Invalid dependency ID format: '${trimmed}' (must be T### format)`,
560
+ {
561
+ fix: 'Dependency IDs must match T### format (e.g. T123, T4567)',
562
+ details: { field: 'depends', expected: 'T###', actual: trimmed },
563
+ },
511
564
  );
512
565
  }
513
566
  const exists = await dataAccessor.taskExists(trimmed);
514
567
  if (!exists) {
515
- throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`);
568
+ throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`, {
569
+ fix: `cleo find "${trimmed}"`,
570
+ details: { field: 'depends', actual: trimmed },
571
+ });
516
572
  }
517
573
  }
518
574
  }
@@ -532,6 +588,10 @@ export async function addTask(
532
588
  throw new CleoError(
533
589
  ExitCode.NOT_FOUND,
534
590
  `Phase '${phase}' not found. Valid phases: ${validPhases || 'none'}. Use --add-phase to create new.`,
591
+ {
592
+ fix: `cleo add ... --add-phase to create '${phase}', or use one of: ${validPhases || 'none'}`,
593
+ details: { field: 'phase', expected: Object.keys(phases), actual: phase },
594
+ },
535
595
  );
536
596
  }
537
597
  // Create phase
@@ -554,12 +614,18 @@ export async function addTask(
554
614
  // Parent hierarchy validation using targeted queries
555
615
  if (parentId) {
556
616
  if (!/^T\d{3,}$/.test(parentId)) {
557
- throw new CleoError(ExitCode.INVALID_INPUT, `Invalid parent ID format: ${parentId}`);
617
+ throw new CleoError(ExitCode.INVALID_INPUT, `Invalid parent ID format: ${parentId}`, {
618
+ fix: 'Parent IDs must match T### format (e.g. T123)',
619
+ details: { field: 'parentId', expected: 'T###', actual: parentId },
620
+ });
558
621
  }
559
622
  // Validate parent exists
560
623
  const parentTask = await dataAccessor.loadSingleTask(parentId);
561
624
  if (!parentTask) {
562
- throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${parentId} not found`);
625
+ throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${parentId} not found`, {
626
+ fix: `Use 'cleo find "${parentId}"' to search or create as standalone task`,
627
+ details: { field: 'parentId', actual: parentId },
628
+ });
563
629
  }
564
630
 
565
631
  // Read hierarchy limits from config via policy module
@@ -573,6 +639,14 @@ export async function addTask(
573
639
  throw new CleoError(
574
640
  ExitCode.DEPTH_EXCEEDED,
575
641
  `Maximum nesting depth ${policy.maxDepth} would be exceeded`,
642
+ {
643
+ fix: 'Reparent this task under a higher-level epic',
644
+ details: {
645
+ field: 'parentId',
646
+ expected: `depth < ${policy.maxDepth}`,
647
+ actual: parentDepth + 1,
648
+ },
649
+ },
576
650
  );
577
651
  }
578
652
 
@@ -586,6 +660,14 @@ export async function addTask(
586
660
  throw new CleoError(
587
661
  ExitCode.SIBLING_LIMIT,
588
662
  `Parent ${parentId} already has ${counted} children (limit: ${policy.maxSiblings})`,
663
+ {
664
+ fix: 'Create as standalone task or increase hierarchy.maxSiblings in config',
665
+ details: {
666
+ field: 'parentId',
667
+ expected: `<= ${policy.maxSiblings} siblings`,
668
+ actual: counted,
669
+ },
670
+ },
589
671
  );
590
672
  }
591
673
  }
@@ -596,6 +678,14 @@ export async function addTask(
596
678
  throw new CleoError(
597
679
  ExitCode.SIBLING_LIMIT,
598
680
  `Parent ${parentId} already has ${activeCount} active children (maxActiveSiblings=${policy.maxActiveSiblings})`,
681
+ {
682
+ fix: 'Complete or cancel an active sibling before adding a new task here',
683
+ details: {
684
+ field: 'parentId',
685
+ expected: `<= ${policy.maxActiveSiblings} active siblings`,
686
+ actual: activeCount,
687
+ },
688
+ },
599
689
  );
600
690
  }
601
691
 
@@ -676,7 +766,7 @@ export async function addTask(
676
766
  const previewTask: Task = {
677
767
  id: 'T???',
678
768
  title: options.title,
679
- description: options.description,
769
+ description: options.description ?? '',
680
770
  status,
681
771
  priority,
682
772
  type: taskType,
@@ -767,7 +857,7 @@ export async function addTask(
767
857
  const task: Task = {
768
858
  id: taskId,
769
859
  title: options.title,
770
- description: options.description,
860
+ description: options.description ?? '',
771
861
  status,
772
862
  priority,
773
863
  type: taskType,
@@ -115,7 +115,10 @@ export async function completeTask(
115
115
 
116
116
  // Already done
117
117
  if (task.status === 'done') {
118
- throw new CleoError(ExitCode.TASK_COMPLETED, `Task ${options.taskId} is already completed`);
118
+ throw new CleoError(ExitCode.TASK_COMPLETED, `Task ${options.taskId} is already completed`, {
119
+ fix: `To reopen, run cleo update ${options.taskId} --status active`,
120
+ details: { field: 'status', expected: 'not done', actual: 'done' },
121
+ });
119
122
  }
120
123
 
121
124
  // Check if task has incomplete dependencies
package/src/tasks/find.ts CHANGED
@@ -100,7 +100,10 @@ export async function findTasks(
100
100
  accessor?: DataAccessor,
101
101
  ): Promise<FindTasksResult> {
102
102
  if (!options.query && !options.id) {
103
- throw new CleoError(ExitCode.INVALID_INPUT, 'Search query or --id is required');
103
+ throw new CleoError(ExitCode.INVALID_INPUT, 'Search query or --id is required', {
104
+ fix: 'cleo find "<query>"',
105
+ details: { field: 'query' },
106
+ });
104
107
  }
105
108
 
106
109
  const acc = accessor ?? (await getAccessor(cwd));
@@ -45,7 +45,10 @@ export async function showLabelTasks(
45
45
  const { tasks } = await acc.queryTasks({ label });
46
46
 
47
47
  if (tasks.length === 0) {
48
- throw new CleoError(ExitCode.NOT_FOUND, `No tasks found with label '${label}'`);
48
+ throw new CleoError(ExitCode.NOT_FOUND, `No tasks found with label '${label}'`, {
49
+ fix: 'cleo labels list to see available labels',
50
+ details: { field: 'label', actual: label },
51
+ });
49
52
  }
50
53
 
51
54
  return {
@@ -20,7 +20,10 @@ export async function suggestRelated(
20
20
  const { tasks: allTasks } = await acc.queryTasks({});
21
21
  const task = allTasks.find((t) => t.id === taskId);
22
22
  if (!task) {
23
- throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`);
23
+ throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`, {
24
+ fix: `cleo find "${taskId}"`,
25
+ details: { field: 'taskId', actual: taskId },
26
+ });
24
27
  }
25
28
 
26
29
  const suggestions: Array<Pick<TaskRef, 'id' | 'title'> & { score: number; reason: string }> = [];
@@ -80,12 +83,18 @@ export async function addRelation(
80
83
 
81
84
  const fromExists = await acc.taskExists(from);
82
85
  if (!fromExists) {
83
- throw new CleoError(ExitCode.NOT_FOUND, `Task ${from} not found`);
86
+ throw new CleoError(ExitCode.NOT_FOUND, `Task ${from} not found`, {
87
+ fix: `cleo find "${from}"`,
88
+ details: { field: 'from', actual: from },
89
+ });
84
90
  }
85
91
 
86
92
  const toExists = await acc.taskExists(to);
87
93
  if (!toExists) {
88
- throw new CleoError(ExitCode.NOT_FOUND, `Task ${to} not found`);
94
+ throw new CleoError(ExitCode.NOT_FOUND, `Task ${to} not found`, {
95
+ fix: `cleo find "${to}"`,
96
+ details: { field: 'to', actual: to },
97
+ });
89
98
  }
90
99
 
91
100
  // Persist to task_relations table via accessor (T5168 fix)
@@ -112,7 +121,10 @@ export async function listRelations(
112
121
  const acc = accessor ?? (await getAccessor(cwd));
113
122
  const task = await acc.loadSingleTask(taskId);
114
123
  if (!task) {
115
- throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`);
124
+ throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`, {
125
+ fix: `cleo find "${taskId}"`,
126
+ details: { field: 'taskId', actual: taskId },
127
+ });
116
128
  }
117
129
 
118
130
  // task.relates is populated from task_relations table by loadSingleTask
package/src/tasks/show.ts CHANGED
@@ -35,7 +35,10 @@ export async function showTask(
35
35
  accessor?: DataAccessor,
36
36
  ): Promise<TaskDetail> {
37
37
  if (!taskId) {
38
- throw new CleoError(ExitCode.INVALID_INPUT, 'Task ID is required');
38
+ throw new CleoError(ExitCode.INVALID_INPUT, 'Task ID is required', {
39
+ fix: 'cleo show T###',
40
+ details: { field: 'taskId' },
41
+ });
39
42
  }
40
43
 
41
44
  const acc = accessor ?? (await getAccessor(cwd));
@@ -153,7 +153,14 @@ export async function updateTask(
153
153
  const { validateStatusTransition } = await import('../validation/validation-rules.js');
154
154
  const transitionViolations = validateStatusTransition(task.status, options.status);
155
155
  if (transitionViolations.length > 0) {
156
- throw new CleoError(ExitCode.VALIDATION_ERROR, transitionViolations[0].message);
156
+ throw new CleoError(ExitCode.VALIDATION_ERROR, transitionViolations[0].message, {
157
+ fix: `Valid transitions from '${task.status}': see cleo update --help`,
158
+ details: {
159
+ field: transitionViolations[0].field ?? 'status',
160
+ expected: `valid transition from ${task.status}`,
161
+ actual: options.status,
162
+ },
163
+ });
157
164
  }
158
165
 
159
166
  const oldStatus = task.status;
@@ -319,12 +326,19 @@ export async function updateTask(
319
326
  // Validate target parent exists
320
327
  const newParent = await acc.loadSingleTask(newParentId);
321
328
  if (!newParent) {
322
- throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${newParentId} not found`);
329
+ throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${newParentId} not found`, {
330
+ fix: `Use 'cleo find "${newParentId}"' to search or remove --parent flag`,
331
+ details: { field: 'parentId', actual: newParentId },
332
+ });
323
333
  }
324
334
  if (newParent.type === 'subtask') {
325
335
  throw new CleoError(
326
336
  ExitCode.INVALID_PARENT_TYPE,
327
337
  `Cannot parent under subtask '${newParentId}'`,
338
+ {
339
+ fix: `Choose an epic or task as parent instead of subtask '${newParentId}'`,
340
+ details: { field: 'parentId', expected: 'epic or task', actual: 'subtask' },
341
+ },
328
342
  );
329
343
  }
330
344
 
@@ -334,6 +348,10 @@ export async function updateTask(
334
348
  throw new CleoError(
335
349
  ExitCode.CIRCULAR_REFERENCE,
336
350
  `Moving '${options.taskId}' under '${newParentId}' would create a circular reference`,
351
+ {
352
+ fix: `Choose a parent that is not a descendant of ${options.taskId}`,
353
+ details: { field: 'parentId', actual: newParentId },
354
+ },
337
355
  );
338
356
  }
339
357
 
@@ -346,6 +364,14 @@ export async function updateTask(
346
364
  throw new CleoError(
347
365
  ExitCode.DEPTH_EXCEEDED,
348
366
  `Maximum nesting depth ${policy.maxDepth} would be exceeded`,
367
+ {
368
+ fix: 'Choose a parent at a shallower level in the hierarchy',
369
+ details: {
370
+ field: 'parentId',
371
+ expected: `depth < ${policy.maxDepth}`,
372
+ actual: parentDepth + 1,
373
+ },
374
+ },
349
375
  );
350
376
  }
351
377
 
@@ -362,7 +388,10 @@ export async function updateTask(
362
388
  }
363
389
 
364
390
  if (changes.length === 0) {
365
- throw new CleoError(ExitCode.NO_CHANGE, 'No changes specified');
391
+ throw new CleoError(ExitCode.NO_CHANGE, 'No changes specified', {
392
+ fix: `Provide at least one field to update (e.g. cleo update ${options.taskId} --status active)`,
393
+ details: { field: 'options' },
394
+ });
366
395
  }
367
396
 
368
397
  task.updatedAt = now;