@cleocode/cleo 2026.4.9 → 2026.4.11

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 (693) hide show
  1. package/dist/cli/commander-shim.d.ts +112 -0
  2. package/dist/cli/commander-shim.d.ts.map +1 -0
  3. package/dist/cli/commander-shim.js +233 -0
  4. package/dist/cli/commander-shim.js.map +1 -0
  5. package/dist/cli/commands/add.d.ts +12 -0
  6. package/dist/cli/commands/add.d.ts.map +1 -0
  7. package/dist/cli/commands/add.js +98 -0
  8. package/dist/cli/commands/add.js.map +1 -0
  9. package/dist/cli/commands/admin.d.ts +12 -0
  10. package/dist/cli/commands/admin.d.ts.map +1 -0
  11. package/dist/cli/commands/admin.js +59 -0
  12. package/dist/cli/commands/admin.js.map +1 -0
  13. package/dist/cli/commands/adr.d.ts +27 -0
  14. package/dist/cli/commands/adr.d.ts.map +1 -0
  15. package/dist/cli/commands/adr.js +79 -0
  16. package/dist/cli/commands/adr.js.map +1 -0
  17. package/dist/cli/commands/agent-profile-status.d.ts +98 -0
  18. package/dist/cli/commands/agent-profile-status.d.ts.map +1 -0
  19. package/dist/cli/commands/agent-profile-status.js +71 -0
  20. package/dist/cli/commands/agent-profile-status.js.map +1 -0
  21. package/dist/cli/commands/agent.d.ts +38 -0
  22. package/dist/cli/commands/agent.d.ts.map +1 -0
  23. package/dist/cli/commands/agent.js +1125 -0
  24. package/dist/cli/commands/agent.js.map +1 -0
  25. package/dist/cli/commands/agents.d.ts +17 -0
  26. package/dist/cli/commands/agents.d.ts.map +1 -0
  27. package/dist/cli/commands/agents.js +20 -0
  28. package/dist/cli/commands/agents.js.map +1 -0
  29. package/dist/cli/commands/analyze.d.ts +12 -0
  30. package/dist/cli/commands/analyze.d.ts.map +1 -0
  31. package/dist/cli/commands/analyze.js +20 -0
  32. package/dist/cli/commands/analyze.js.map +1 -0
  33. package/dist/cli/commands/archive-stats.d.ts +18 -0
  34. package/dist/cli/commands/archive-stats.d.ts.map +1 -0
  35. package/dist/cli/commands/archive-stats.js +49 -0
  36. package/dist/cli/commands/archive-stats.js.map +1 -0
  37. package/dist/cli/commands/archive.d.ts +12 -0
  38. package/dist/cli/commands/archive.d.ts.map +1 -0
  39. package/dist/cli/commands/archive.js +32 -0
  40. package/dist/cli/commands/archive.js.map +1 -0
  41. package/dist/cli/commands/backfill.d.ts +38 -0
  42. package/dist/cli/commands/backfill.d.ts.map +1 -0
  43. package/dist/cli/commands/backfill.js +147 -0
  44. package/dist/cli/commands/backfill.js.map +1 -0
  45. package/dist/cli/commands/backup.d.ts +8 -0
  46. package/dist/cli/commands/backup.d.ts.map +1 -0
  47. package/dist/cli/commands/backup.js +35 -0
  48. package/dist/cli/commands/backup.js.map +1 -0
  49. package/dist/cli/commands/blockers.d.ts +7 -0
  50. package/dist/cli/commands/blockers.d.ts.map +1 -0
  51. package/dist/cli/commands/blockers.js +16 -0
  52. package/dist/cli/commands/blockers.js.map +1 -0
  53. package/dist/cli/commands/brain.d.ts +29 -0
  54. package/dist/cli/commands/brain.d.ts.map +1 -0
  55. package/dist/cli/commands/brain.js +107 -0
  56. package/dist/cli/commands/brain.js.map +1 -0
  57. package/dist/cli/commands/briefing.d.ts +22 -0
  58. package/dist/cli/commands/briefing.d.ts.map +1 -0
  59. package/dist/cli/commands/briefing.js +45 -0
  60. package/dist/cli/commands/briefing.js.map +1 -0
  61. package/dist/cli/commands/bug.d.ts +12 -0
  62. package/dist/cli/commands/bug.d.ts.map +1 -0
  63. package/dist/cli/commands/bug.js +81 -0
  64. package/dist/cli/commands/bug.js.map +1 -0
  65. package/dist/cli/commands/cant.d.ts +32 -0
  66. package/dist/cli/commands/cant.d.ts.map +1 -0
  67. package/dist/cli/commands/cant.js +281 -0
  68. package/dist/cli/commands/cant.js.map +1 -0
  69. package/dist/cli/commands/check.d.ts +22 -0
  70. package/dist/cli/commands/check.d.ts.map +1 -0
  71. package/dist/cli/commands/check.js +164 -0
  72. package/dist/cli/commands/check.js.map +1 -0
  73. package/dist/cli/commands/checkpoint.d.ts +15 -0
  74. package/dist/cli/commands/checkpoint.d.ts.map +1 -0
  75. package/dist/cli/commands/checkpoint.js +91 -0
  76. package/dist/cli/commands/checkpoint.js.map +1 -0
  77. package/dist/cli/commands/code.d.ts +11 -0
  78. package/dist/cli/commands/code.d.ts.map +1 -0
  79. package/dist/cli/commands/code.js +114 -0
  80. package/dist/cli/commands/code.js.map +1 -0
  81. package/dist/cli/commands/commands.d.ts +13 -0
  82. package/dist/cli/commands/commands.d.ts.map +1 -0
  83. package/dist/cli/commands/commands.js +29 -0
  84. package/dist/cli/commands/commands.js.map +1 -0
  85. package/dist/cli/commands/complete.d.ts +12 -0
  86. package/dist/cli/commands/complete.d.ts.map +1 -0
  87. package/dist/cli/commands/complete.js +43 -0
  88. package/dist/cli/commands/complete.js.map +1 -0
  89. package/dist/cli/commands/compliance.d.ts +8 -0
  90. package/dist/cli/commands/compliance.d.ts.map +1 -0
  91. package/dist/cli/commands/compliance.js +85 -0
  92. package/dist/cli/commands/compliance.js.map +1 -0
  93. package/dist/cli/commands/config.d.ts +10 -0
  94. package/dist/cli/commands/config.d.ts.map +1 -0
  95. package/dist/cli/commands/config.js +69 -0
  96. package/dist/cli/commands/config.js.map +1 -0
  97. package/dist/cli/commands/consensus.d.ts +13 -0
  98. package/dist/cli/commands/consensus.d.ts.map +1 -0
  99. package/dist/cli/commands/consensus.js +45 -0
  100. package/dist/cli/commands/consensus.js.map +1 -0
  101. package/dist/cli/commands/context.d.ts +8 -0
  102. package/dist/cli/commands/context.d.ts.map +1 -0
  103. package/dist/cli/commands/context.js +40 -0
  104. package/dist/cli/commands/context.js.map +1 -0
  105. package/dist/cli/commands/contribution.d.ts +13 -0
  106. package/dist/cli/commands/contribution.d.ts.map +1 -0
  107. package/dist/cli/commands/contribution.js +41 -0
  108. package/dist/cli/commands/contribution.js.map +1 -0
  109. package/dist/cli/commands/current.d.ts +13 -0
  110. package/dist/cli/commands/current.d.ts.map +1 -0
  111. package/dist/cli/commands/current.js +20 -0
  112. package/dist/cli/commands/current.js.map +1 -0
  113. package/dist/cli/commands/dash.d.ts +12 -0
  114. package/dist/cli/commands/dash.d.ts.map +1 -0
  115. package/dist/cli/commands/dash.js +24 -0
  116. package/dist/cli/commands/dash.js.map +1 -0
  117. package/dist/cli/commands/decomposition.d.ts +13 -0
  118. package/dist/cli/commands/decomposition.d.ts.map +1 -0
  119. package/dist/cli/commands/decomposition.js +45 -0
  120. package/dist/cli/commands/decomposition.js.map +1 -0
  121. package/dist/cli/commands/delete.d.ts +12 -0
  122. package/dist/cli/commands/delete.d.ts.map +1 -0
  123. package/dist/cli/commands/delete.js +37 -0
  124. package/dist/cli/commands/delete.js.map +1 -0
  125. package/dist/cli/commands/deps.d.ts +24 -0
  126. package/dist/cli/commands/deps.d.ts.map +1 -0
  127. package/dist/cli/commands/deps.js +98 -0
  128. package/dist/cli/commands/deps.js.map +1 -0
  129. package/dist/cli/commands/detect-drift.d.ts +15 -0
  130. package/dist/cli/commands/detect-drift.d.ts.map +1 -0
  131. package/dist/cli/commands/detect-drift.js +424 -0
  132. package/dist/cli/commands/detect-drift.js.map +1 -0
  133. package/dist/cli/commands/detect.d.ts +10 -0
  134. package/dist/cli/commands/detect.d.ts.map +1 -0
  135. package/dist/cli/commands/detect.js +24 -0
  136. package/dist/cli/commands/detect.js.map +1 -0
  137. package/dist/cli/commands/docs.d.ts +13 -0
  138. package/dist/cli/commands/docs.d.ts.map +1 -0
  139. package/dist/cli/commands/docs.js +169 -0
  140. package/dist/cli/commands/docs.js.map +1 -0
  141. package/dist/cli/commands/doctor.d.ts +15 -0
  142. package/dist/cli/commands/doctor.d.ts.map +1 -0
  143. package/dist/cli/commands/doctor.js +133 -0
  144. package/dist/cli/commands/doctor.js.map +1 -0
  145. package/dist/cli/commands/dynamic.d.ts +24 -0
  146. package/dist/cli/commands/dynamic.d.ts.map +1 -0
  147. package/dist/cli/commands/dynamic.js +27 -0
  148. package/dist/cli/commands/dynamic.js.map +1 -0
  149. package/dist/cli/commands/env.d.ts +12 -0
  150. package/dist/cli/commands/env.d.ts.map +1 -0
  151. package/dist/cli/commands/env.js +44 -0
  152. package/dist/cli/commands/env.js.map +1 -0
  153. package/dist/cli/commands/exists.d.ts +22 -0
  154. package/dist/cli/commands/exists.d.ts.map +1 -0
  155. package/dist/cli/commands/exists.js +51 -0
  156. package/dist/cli/commands/exists.js.map +1 -0
  157. package/dist/cli/commands/export-tasks.d.ts +10 -0
  158. package/dist/cli/commands/export-tasks.d.ts.map +1 -0
  159. package/dist/cli/commands/export-tasks.js +47 -0
  160. package/dist/cli/commands/export-tasks.js.map +1 -0
  161. package/dist/cli/commands/export.d.ts +9 -0
  162. package/dist/cli/commands/export.d.ts.map +1 -0
  163. package/dist/cli/commands/export.js +46 -0
  164. package/dist/cli/commands/export.js.map +1 -0
  165. package/dist/cli/commands/find.d.ts +14 -0
  166. package/dist/cli/commands/find.d.ts.map +1 -0
  167. package/dist/cli/commands/find.js +70 -0
  168. package/dist/cli/commands/find.js.map +1 -0
  169. package/dist/cli/commands/generate-changelog.d.ts +14 -0
  170. package/dist/cli/commands/generate-changelog.d.ts.map +1 -0
  171. package/dist/cli/commands/generate-changelog.js +252 -0
  172. package/dist/cli/commands/generate-changelog.js.map +1 -0
  173. package/dist/cli/commands/grade.d.ts +13 -0
  174. package/dist/cli/commands/grade.d.ts.map +1 -0
  175. package/dist/cli/commands/grade.js +26 -0
  176. package/dist/cli/commands/grade.js.map +1 -0
  177. package/dist/cli/commands/history.d.ts +9 -0
  178. package/dist/cli/commands/history.d.ts.map +1 -0
  179. package/dist/cli/commands/history.js +30 -0
  180. package/dist/cli/commands/history.js.map +1 -0
  181. package/dist/cli/commands/implementation.d.ts +13 -0
  182. package/dist/cli/commands/implementation.d.ts.map +1 -0
  183. package/dist/cli/commands/implementation.js +41 -0
  184. package/dist/cli/commands/implementation.js.map +1 -0
  185. package/dist/cli/commands/import-tasks.d.ts +10 -0
  186. package/dist/cli/commands/import-tasks.d.ts.map +1 -0
  187. package/dist/cli/commands/import-tasks.js +38 -0
  188. package/dist/cli/commands/import-tasks.js.map +1 -0
  189. package/dist/cli/commands/import.d.ts +9 -0
  190. package/dist/cli/commands/import.d.ts.map +1 -0
  191. package/dist/cli/commands/import.js +28 -0
  192. package/dist/cli/commands/import.js.map +1 -0
  193. package/dist/cli/commands/init.d.ts +34 -0
  194. package/dist/cli/commands/init.d.ts.map +1 -0
  195. package/dist/cli/commands/init.js +96 -0
  196. package/dist/cli/commands/init.js.map +1 -0
  197. package/dist/cli/commands/inject.d.ts +8 -0
  198. package/dist/cli/commands/inject.d.ts.map +1 -0
  199. package/dist/cli/commands/inject.js +28 -0
  200. package/dist/cli/commands/inject.js.map +1 -0
  201. package/dist/cli/commands/issue.d.ts +17 -0
  202. package/dist/cli/commands/issue.d.ts.map +1 -0
  203. package/dist/cli/commands/issue.js +107 -0
  204. package/dist/cli/commands/issue.js.map +1 -0
  205. package/dist/cli/commands/labels.d.ts +13 -0
  206. package/dist/cli/commands/labels.d.ts.map +1 -0
  207. package/dist/cli/commands/labels.js +44 -0
  208. package/dist/cli/commands/labels.js.map +1 -0
  209. package/dist/cli/commands/lifecycle.d.ts +8 -0
  210. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  211. package/dist/cli/commands/lifecycle.js +84 -0
  212. package/dist/cli/commands/lifecycle.js.map +1 -0
  213. package/dist/cli/commands/list.d.ts +14 -0
  214. package/dist/cli/commands/list.d.ts.map +1 -0
  215. package/dist/cli/commands/list.js +71 -0
  216. package/dist/cli/commands/list.js.map +1 -0
  217. package/dist/cli/commands/log.d.ts +12 -0
  218. package/dist/cli/commands/log.d.ts.map +1 -0
  219. package/dist/cli/commands/log.js +30 -0
  220. package/dist/cli/commands/log.js.map +1 -0
  221. package/dist/cli/commands/map.d.ts +10 -0
  222. package/dist/cli/commands/map.d.ts.map +1 -0
  223. package/dist/cli/commands/map.js +23 -0
  224. package/dist/cli/commands/map.js.map +1 -0
  225. package/dist/cli/commands/memory-brain.d.ts +14 -0
  226. package/dist/cli/commands/memory-brain.d.ts.map +1 -0
  227. package/dist/cli/commands/memory-brain.js +157 -0
  228. package/dist/cli/commands/memory-brain.js.map +1 -0
  229. package/dist/cli/commands/migrate-claude-mem.d.ts +18 -0
  230. package/dist/cli/commands/migrate-claude-mem.d.ts.map +1 -0
  231. package/dist/cli/commands/migrate-claude-mem.js +60 -0
  232. package/dist/cli/commands/migrate-claude-mem.js.map +1 -0
  233. package/dist/cli/commands/next.d.ts +9 -0
  234. package/dist/cli/commands/next.d.ts.map +1 -0
  235. package/dist/cli/commands/next.js +20 -0
  236. package/dist/cli/commands/next.js.map +1 -0
  237. package/dist/cli/commands/nexus.d.ts +16 -0
  238. package/dist/cli/commands/nexus.d.ts.map +1 -0
  239. package/dist/cli/commands/nexus.js +155 -0
  240. package/dist/cli/commands/nexus.js.map +1 -0
  241. package/dist/cli/commands/observe.d.ts +9 -0
  242. package/dist/cli/commands/observe.d.ts.map +1 -0
  243. package/dist/cli/commands/observe.js +39 -0
  244. package/dist/cli/commands/observe.js.map +1 -0
  245. package/dist/cli/commands/ops.d.ts +10 -0
  246. package/dist/cli/commands/ops.d.ts.map +1 -0
  247. package/dist/cli/commands/ops.js +19 -0
  248. package/dist/cli/commands/ops.js.map +1 -0
  249. package/dist/cli/commands/orchestrate.d.ts +8 -0
  250. package/dist/cli/commands/orchestrate.d.ts.map +1 -0
  251. package/dist/cli/commands/orchestrate.js +58 -0
  252. package/dist/cli/commands/orchestrate.js.map +1 -0
  253. package/dist/cli/commands/otel.d.ts +12 -0
  254. package/dist/cli/commands/otel.d.ts.map +1 -0
  255. package/dist/cli/commands/otel.js +128 -0
  256. package/dist/cli/commands/otel.js.map +1 -0
  257. package/dist/cli/commands/phase.d.ts +12 -0
  258. package/dist/cli/commands/phase.d.ts.map +1 -0
  259. package/dist/cli/commands/phase.js +91 -0
  260. package/dist/cli/commands/phase.js.map +1 -0
  261. package/dist/cli/commands/phases.d.ts +12 -0
  262. package/dist/cli/commands/phases.d.ts.map +1 -0
  263. package/dist/cli/commands/phases.js +37 -0
  264. package/dist/cli/commands/phases.js.map +1 -0
  265. package/dist/cli/commands/plan.d.ts +8 -0
  266. package/dist/cli/commands/plan.d.ts.map +1 -0
  267. package/dist/cli/commands/plan.js +15 -0
  268. package/dist/cli/commands/plan.js.map +1 -0
  269. package/dist/cli/commands/promote.d.ts +7 -0
  270. package/dist/cli/commands/promote.d.ts.map +1 -0
  271. package/dist/cli/commands/promote.js +15 -0
  272. package/dist/cli/commands/promote.js.map +1 -0
  273. package/dist/cli/commands/reason.d.ts +35 -0
  274. package/dist/cli/commands/reason.d.ts.map +1 -0
  275. package/dist/cli/commands/reason.js +104 -0
  276. package/dist/cli/commands/reason.js.map +1 -0
  277. package/dist/cli/commands/refresh-memory.d.ts +9 -0
  278. package/dist/cli/commands/refresh-memory.d.ts.map +1 -0
  279. package/dist/cli/commands/refresh-memory.js +24 -0
  280. package/dist/cli/commands/refresh-memory.js.map +1 -0
  281. package/dist/cli/commands/relates.d.ts +12 -0
  282. package/dist/cli/commands/relates.d.ts.map +1 -0
  283. package/dist/cli/commands/relates.js +53 -0
  284. package/dist/cli/commands/relates.js.map +1 -0
  285. package/dist/cli/commands/release.d.ts +8 -0
  286. package/dist/cli/commands/release.d.ts.map +1 -0
  287. package/dist/cli/commands/release.js +72 -0
  288. package/dist/cli/commands/release.js.map +1 -0
  289. package/dist/cli/commands/remote.d.ts +12 -0
  290. package/dist/cli/commands/remote.d.ts.map +1 -0
  291. package/dist/cli/commands/remote.js +207 -0
  292. package/dist/cli/commands/remote.js.map +1 -0
  293. package/dist/cli/commands/reorder.d.ts +7 -0
  294. package/dist/cli/commands/reorder.d.ts.map +1 -0
  295. package/dist/cli/commands/reorder.js +20 -0
  296. package/dist/cli/commands/reorder.js.map +1 -0
  297. package/dist/cli/commands/reparent.d.ts +10 -0
  298. package/dist/cli/commands/reparent.d.ts.map +1 -0
  299. package/dist/cli/commands/reparent.js +19 -0
  300. package/dist/cli/commands/reparent.js.map +1 -0
  301. package/dist/cli/commands/research.d.ts +8 -0
  302. package/dist/cli/commands/research.d.ts.map +1 -0
  303. package/dist/cli/commands/research.js +129 -0
  304. package/dist/cli/commands/research.js.map +1 -0
  305. package/dist/cli/commands/restore.d.ts +11 -0
  306. package/dist/cli/commands/restore.d.ts.map +1 -0
  307. package/dist/cli/commands/restore.js +224 -0
  308. package/dist/cli/commands/restore.js.map +1 -0
  309. package/dist/cli/commands/roadmap.d.ts +8 -0
  310. package/dist/cli/commands/roadmap.d.ts.map +1 -0
  311. package/dist/cli/commands/roadmap.js +21 -0
  312. package/dist/cli/commands/roadmap.js.map +1 -0
  313. package/dist/cli/commands/safestop.d.ts +14 -0
  314. package/dist/cli/commands/safestop.d.ts.map +1 -0
  315. package/dist/cli/commands/safestop.js +32 -0
  316. package/dist/cli/commands/safestop.js.map +1 -0
  317. package/dist/cli/commands/self-update.d.ts +15 -0
  318. package/dist/cli/commands/self-update.d.ts.map +1 -0
  319. package/dist/cli/commands/self-update.js +329 -0
  320. package/dist/cli/commands/self-update.js.map +1 -0
  321. package/dist/cli/commands/sequence.d.ts +8 -0
  322. package/dist/cli/commands/sequence.d.ts.map +1 -0
  323. package/dist/cli/commands/sequence.js +30 -0
  324. package/dist/cli/commands/sequence.js.map +1 -0
  325. package/dist/cli/commands/session.d.ts +12 -0
  326. package/dist/cli/commands/session.d.ts.map +1 -0
  327. package/dist/cli/commands/session.js +175 -0
  328. package/dist/cli/commands/session.js.map +1 -0
  329. package/dist/cli/commands/show.d.ts +13 -0
  330. package/dist/cli/commands/show.d.ts.map +1 -0
  331. package/dist/cli/commands/show.js +20 -0
  332. package/dist/cli/commands/show.js.map +1 -0
  333. package/dist/cli/commands/skills.d.ts +13 -0
  334. package/dist/cli/commands/skills.d.ts.map +1 -0
  335. package/dist/cli/commands/skills.js +131 -0
  336. package/dist/cli/commands/skills.js.map +1 -0
  337. package/dist/cli/commands/snapshot.d.ts +9 -0
  338. package/dist/cli/commands/snapshot.d.ts.map +1 -0
  339. package/dist/cli/commands/snapshot.js +50 -0
  340. package/dist/cli/commands/snapshot.js.map +1 -0
  341. package/dist/cli/commands/specification.d.ts +13 -0
  342. package/dist/cli/commands/specification.d.ts.map +1 -0
  343. package/dist/cli/commands/specification.js +45 -0
  344. package/dist/cli/commands/specification.js.map +1 -0
  345. package/dist/cli/commands/start.d.ts +13 -0
  346. package/dist/cli/commands/start.d.ts.map +1 -0
  347. package/dist/cli/commands/start.js +20 -0
  348. package/dist/cli/commands/start.js.map +1 -0
  349. package/dist/cli/commands/stats.d.ts +12 -0
  350. package/dist/cli/commands/stats.d.ts.map +1 -0
  351. package/dist/cli/commands/stats.js +35 -0
  352. package/dist/cli/commands/stats.js.map +1 -0
  353. package/dist/cli/commands/sticky.d.ts +16 -0
  354. package/dist/cli/commands/sticky.d.ts.map +1 -0
  355. package/dist/cli/commands/sticky.js +211 -0
  356. package/dist/cli/commands/sticky.js.map +1 -0
  357. package/dist/cli/commands/stop.d.ts +13 -0
  358. package/dist/cli/commands/stop.d.ts.map +1 -0
  359. package/dist/cli/commands/stop.js +20 -0
  360. package/dist/cli/commands/stop.js.map +1 -0
  361. package/dist/cli/commands/testing.d.ts +13 -0
  362. package/dist/cli/commands/testing.d.ts.map +1 -0
  363. package/dist/cli/commands/testing.js +64 -0
  364. package/dist/cli/commands/testing.js.map +1 -0
  365. package/dist/cli/commands/token.d.ts +10 -0
  366. package/dist/cli/commands/token.d.ts.map +1 -0
  367. package/dist/cli/commands/token.js +135 -0
  368. package/dist/cli/commands/token.js.map +1 -0
  369. package/dist/cli/commands/update.d.ts +12 -0
  370. package/dist/cli/commands/update.d.ts.map +1 -0
  371. package/dist/cli/commands/update.js +83 -0
  372. package/dist/cli/commands/update.js.map +1 -0
  373. package/dist/cli/commands/upgrade.d.ts +18 -0
  374. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  375. package/dist/cli/commands/upgrade.js +103 -0
  376. package/dist/cli/commands/upgrade.js.map +1 -0
  377. package/dist/cli/commands/validate.d.ts +12 -0
  378. package/dist/cli/commands/validate.d.ts.map +1 -0
  379. package/dist/cli/commands/validate.js +23 -0
  380. package/dist/cli/commands/validate.js.map +1 -0
  381. package/dist/cli/commands/verify.d.ts +8 -0
  382. package/dist/cli/commands/verify.d.ts.map +1 -0
  383. package/dist/cli/commands/verify.js +28 -0
  384. package/dist/cli/commands/verify.js.map +1 -0
  385. package/dist/cli/commands/web.d.ts +13 -0
  386. package/dist/cli/commands/web.d.ts.map +1 -0
  387. package/dist/cli/commands/web.js +277 -0
  388. package/dist/cli/commands/web.js.map +1 -0
  389. package/dist/cli/field-context.d.ts +32 -0
  390. package/dist/cli/field-context.d.ts.map +1 -0
  391. package/dist/cli/field-context.js +47 -0
  392. package/dist/cli/field-context.js.map +1 -0
  393. package/dist/cli/format-context.d.ts +32 -0
  394. package/dist/cli/format-context.d.ts.map +1 -0
  395. package/dist/cli/format-context.js +50 -0
  396. package/dist/cli/format-context.js.map +1 -0
  397. package/dist/cli/index.d.ts +9 -0
  398. package/dist/cli/index.d.ts.map +1 -0
  399. package/dist/cli/index.js +3931 -3401
  400. package/dist/cli/index.js.map +4 -4
  401. package/dist/cli/logger-bootstrap.d.ts +6 -0
  402. package/dist/cli/logger-bootstrap.d.ts.map +1 -0
  403. package/dist/cli/logger-bootstrap.js +10 -0
  404. package/dist/cli/logger-bootstrap.js.map +1 -0
  405. package/dist/cli/middleware/output-format.d.ts +30 -0
  406. package/dist/cli/middleware/output-format.d.ts.map +1 -0
  407. package/dist/cli/middleware/output-format.js +35 -0
  408. package/dist/cli/middleware/output-format.js.map +1 -0
  409. package/dist/cli/progress.d.ts +84 -0
  410. package/dist/cli/progress.d.ts.map +1 -0
  411. package/dist/cli/progress.js +169 -0
  412. package/dist/cli/progress.js.map +1 -0
  413. package/dist/cli/renderers/colors.d.ts +32 -0
  414. package/dist/cli/renderers/colors.d.ts.map +1 -0
  415. package/dist/cli/renderers/colors.js +141 -0
  416. package/dist/cli/renderers/colors.js.map +1 -0
  417. package/dist/cli/renderers/error.d.ts +13 -0
  418. package/dist/cli/renderers/error.d.ts.map +1 -0
  419. package/dist/cli/renderers/error.js +42 -0
  420. package/dist/cli/renderers/error.js.map +1 -0
  421. package/dist/cli/renderers/index.d.ts +59 -0
  422. package/dist/cli/renderers/index.d.ts.map +1 -0
  423. package/dist/cli/renderers/index.js +208 -0
  424. package/dist/cli/renderers/index.js.map +1 -0
  425. package/dist/cli/renderers/lafs-validator.d.ts +97 -0
  426. package/dist/cli/renderers/lafs-validator.d.ts.map +1 -0
  427. package/dist/cli/renderers/lafs-validator.js +229 -0
  428. package/dist/cli/renderers/lafs-validator.js.map +1 -0
  429. package/dist/cli/renderers/normalizer.d.ts +21 -0
  430. package/dist/cli/renderers/normalizer.d.ts.map +1 -0
  431. package/dist/cli/renderers/normalizer.js +106 -0
  432. package/dist/cli/renderers/normalizer.js.map +1 -0
  433. package/dist/cli/renderers/system.d.ts +25 -0
  434. package/dist/cli/renderers/system.d.ts.map +1 -0
  435. package/dist/cli/renderers/system.js +416 -0
  436. package/dist/cli/renderers/system.js.map +1 -0
  437. package/dist/cli/renderers/tasks.d.ts +28 -0
  438. package/dist/cli/renderers/tasks.d.ts.map +1 -0
  439. package/dist/cli/renderers/tasks.js +306 -0
  440. package/dist/cli/renderers/tasks.js.map +1 -0
  441. package/dist/dispatch/adapters/cli.d.ts +67 -0
  442. package/dist/dispatch/adapters/cli.d.ts.map +1 -0
  443. package/dist/dispatch/adapters/cli.js +262 -0
  444. package/dist/dispatch/adapters/cli.js.map +1 -0
  445. package/dist/dispatch/context/session-context.d.ts +54 -0
  446. package/dist/dispatch/context/session-context.d.ts.map +1 -0
  447. package/dist/dispatch/context/session-context.js +61 -0
  448. package/dist/dispatch/context/session-context.js.map +1 -0
  449. package/dist/dispatch/dispatcher.d.ts +23 -0
  450. package/dist/dispatch/dispatcher.d.ts.map +1 -0
  451. package/dist/dispatch/dispatcher.js +84 -0
  452. package/dist/dispatch/dispatcher.js.map +1 -0
  453. package/dist/dispatch/domains/_base.d.ts +59 -0
  454. package/dist/dispatch/domains/_base.d.ts.map +1 -0
  455. package/dist/dispatch/domains/_base.js +77 -0
  456. package/dist/dispatch/domains/_base.js.map +1 -0
  457. package/dist/dispatch/domains/_meta.d.ts +23 -0
  458. package/dist/dispatch/domains/_meta.d.ts.map +1 -0
  459. package/dist/dispatch/domains/_meta.js +25 -0
  460. package/dist/dispatch/domains/_meta.js.map +1 -0
  461. package/dist/dispatch/domains/_routing.d.ts +8 -0
  462. package/dist/dispatch/domains/_routing.d.ts.map +1 -0
  463. package/dist/dispatch/domains/_routing.js +20 -0
  464. package/dist/dispatch/domains/_routing.js.map +1 -0
  465. package/dist/dispatch/domains/admin.d.ts +25 -0
  466. package/dist/dispatch/domains/admin.d.ts.map +1 -0
  467. package/dist/dispatch/domains/admin.js +719 -0
  468. package/dist/dispatch/domains/admin.js.map +1 -0
  469. package/dist/dispatch/domains/check.d.ts +22 -0
  470. package/dist/dispatch/domains/check.d.ts.map +1 -0
  471. package/dist/dispatch/domains/check.js +360 -0
  472. package/dist/dispatch/domains/check.js.map +1 -0
  473. package/dist/dispatch/domains/conduit.d.ts +38 -0
  474. package/dist/dispatch/domains/conduit.d.ts.map +1 -0
  475. package/dist/dispatch/domains/conduit.js +247 -0
  476. package/dist/dispatch/domains/conduit.js.map +1 -0
  477. package/dist/dispatch/domains/index.d.ts +27 -0
  478. package/dist/dispatch/domains/index.d.ts.map +1 -0
  479. package/dist/dispatch/domains/index.js +40 -0
  480. package/dist/dispatch/domains/index.js.map +1 -0
  481. package/dist/dispatch/domains/memory.d.ts +22 -0
  482. package/dist/dispatch/domains/memory.d.ts.map +1 -0
  483. package/dist/dispatch/domains/memory.js +303 -0
  484. package/dist/dispatch/domains/memory.js.map +1 -0
  485. package/dist/dispatch/domains/nexus.d.ts +22 -0
  486. package/dist/dispatch/domains/nexus.d.ts.map +1 -0
  487. package/dist/dispatch/domains/nexus.js +286 -0
  488. package/dist/dispatch/domains/nexus.js.map +1 -0
  489. package/dist/dispatch/domains/orchestrate.d.ts +19 -0
  490. package/dist/dispatch/domains/orchestrate.d.ts.map +1 -0
  491. package/dist/dispatch/domains/orchestrate.js +259 -0
  492. package/dist/dispatch/domains/orchestrate.js.map +1 -0
  493. package/dist/dispatch/domains/pipeline.d.ts +35 -0
  494. package/dist/dispatch/domains/pipeline.d.ts.map +1 -0
  495. package/dist/dispatch/domains/pipeline.js +593 -0
  496. package/dist/dispatch/domains/pipeline.js.map +1 -0
  497. package/dist/dispatch/domains/session.d.ts +22 -0
  498. package/dist/dispatch/domains/session.d.ts.map +1 -0
  499. package/dist/dispatch/domains/session.js +257 -0
  500. package/dist/dispatch/domains/session.js.map +1 -0
  501. package/dist/dispatch/domains/sticky.d.ts +20 -0
  502. package/dist/dispatch/domains/sticky.d.ts.map +1 -0
  503. package/dist/dispatch/domains/sticky.js +164 -0
  504. package/dist/dispatch/domains/sticky.js.map +1 -0
  505. package/dist/dispatch/domains/tasks.d.ts +25 -0
  506. package/dist/dispatch/domains/tasks.d.ts.map +1 -0
  507. package/dist/dispatch/domains/tasks.js +361 -0
  508. package/dist/dispatch/domains/tasks.js.map +1 -0
  509. package/dist/dispatch/domains/tools.d.ts +37 -0
  510. package/dist/dispatch/domains/tools.d.ts.map +1 -0
  511. package/dist/dispatch/domains/tools.js +481 -0
  512. package/dist/dispatch/domains/tools.js.map +1 -0
  513. package/dist/dispatch/engines/_error.d.ts +85 -0
  514. package/dist/dispatch/engines/_error.d.ts.map +1 -0
  515. package/dist/dispatch/engines/_error.js +244 -0
  516. package/dist/dispatch/engines/_error.js.map +1 -0
  517. package/dist/dispatch/engines/code-engine.d.ts +18 -0
  518. package/dist/dispatch/engines/code-engine.d.ts.map +1 -0
  519. package/dist/dispatch/engines/code-engine.js +71 -0
  520. package/dist/dispatch/engines/code-engine.js.map +1 -0
  521. package/dist/dispatch/engines/codebase-map-engine.d.ts +31 -0
  522. package/dist/dispatch/engines/codebase-map-engine.d.ts.map +1 -0
  523. package/dist/dispatch/engines/codebase-map-engine.js +43 -0
  524. package/dist/dispatch/engines/codebase-map-engine.js.map +1 -0
  525. package/dist/dispatch/engines/config-engine.d.ts +32 -0
  526. package/dist/dispatch/engines/config-engine.d.ts.map +1 -0
  527. package/dist/dispatch/engines/config-engine.js +70 -0
  528. package/dist/dispatch/engines/config-engine.js.map +1 -0
  529. package/dist/dispatch/engines/hooks-engine.d.ts +96 -0
  530. package/dist/dispatch/engines/hooks-engine.d.ts.map +1 -0
  531. package/dist/dispatch/engines/hooks-engine.js +144 -0
  532. package/dist/dispatch/engines/hooks-engine.js.map +1 -0
  533. package/dist/dispatch/engines/init-engine.d.ts +56 -0
  534. package/dist/dispatch/engines/init-engine.d.ts.map +1 -0
  535. package/dist/dispatch/engines/init-engine.js +78 -0
  536. package/dist/dispatch/engines/init-engine.js.map +1 -0
  537. package/dist/dispatch/engines/lifecycle-engine.d.ts +66 -0
  538. package/dist/dispatch/engines/lifecycle-engine.d.ts.map +1 -0
  539. package/dist/dispatch/engines/lifecycle-engine.js +224 -0
  540. package/dist/dispatch/engines/lifecycle-engine.js.map +1 -0
  541. package/dist/dispatch/engines/memory-engine.d.ts +10 -0
  542. package/dist/dispatch/engines/memory-engine.d.ts.map +1 -0
  543. package/dist/dispatch/engines/memory-engine.js +10 -0
  544. package/dist/dispatch/engines/memory-engine.js.map +1 -0
  545. package/dist/dispatch/engines/nexus-engine.d.ts +167 -0
  546. package/dist/dispatch/engines/nexus-engine.d.ts.map +1 -0
  547. package/dist/dispatch/engines/nexus-engine.js +356 -0
  548. package/dist/dispatch/engines/nexus-engine.js.map +1 -0
  549. package/dist/dispatch/engines/orchestrate-engine.d.ts +133 -0
  550. package/dist/dispatch/engines/orchestrate-engine.d.ts.map +1 -0
  551. package/dist/dispatch/engines/orchestrate-engine.js +769 -0
  552. package/dist/dispatch/engines/orchestrate-engine.js.map +1 -0
  553. package/dist/dispatch/engines/pipeline-engine.d.ts +51 -0
  554. package/dist/dispatch/engines/pipeline-engine.d.ts.map +1 -0
  555. package/dist/dispatch/engines/pipeline-engine.js +191 -0
  556. package/dist/dispatch/engines/pipeline-engine.js.map +1 -0
  557. package/dist/dispatch/engines/release-engine.d.ts +94 -0
  558. package/dist/dispatch/engines/release-engine.d.ts.map +1 -0
  559. package/dist/dispatch/engines/release-engine.js +763 -0
  560. package/dist/dispatch/engines/release-engine.js.map +1 -0
  561. package/dist/dispatch/engines/session-engine.d.ts +383 -0
  562. package/dist/dispatch/engines/session-engine.d.ts.map +1 -0
  563. package/dist/dispatch/engines/session-engine.js +960 -0
  564. package/dist/dispatch/engines/session-engine.js.map +1 -0
  565. package/dist/dispatch/engines/sticky-engine.d.ts +100 -0
  566. package/dist/dispatch/engines/sticky-engine.d.ts.map +1 -0
  567. package/dist/dispatch/engines/sticky-engine.js +181 -0
  568. package/dist/dispatch/engines/sticky-engine.js.map +1 -0
  569. package/dist/dispatch/engines/system-engine.d.ts +539 -0
  570. package/dist/dispatch/engines/system-engine.d.ts.map +1 -0
  571. package/dist/dispatch/engines/system-engine.js +1266 -0
  572. package/dist/dispatch/engines/system-engine.js.map +1 -0
  573. package/dist/dispatch/engines/task-engine.d.ts +1055 -0
  574. package/dist/dispatch/engines/task-engine.d.ts.map +1 -0
  575. package/dist/dispatch/engines/task-engine.js +1387 -0
  576. package/dist/dispatch/engines/task-engine.js.map +1 -0
  577. package/dist/dispatch/engines/template-parser.d.ts +85 -0
  578. package/dist/dispatch/engines/template-parser.d.ts.map +1 -0
  579. package/dist/dispatch/engines/template-parser.js +108 -0
  580. package/dist/dispatch/engines/template-parser.js.map +1 -0
  581. package/dist/dispatch/engines/tools-engine.d.ts +270 -0
  582. package/dist/dispatch/engines/tools-engine.d.ts.map +1 -0
  583. package/dist/dispatch/engines/tools-engine.js +636 -0
  584. package/dist/dispatch/engines/tools-engine.js.map +1 -0
  585. package/dist/dispatch/engines/validate-engine.d.ts +218 -0
  586. package/dist/dispatch/engines/validate-engine.d.ts.map +1 -0
  587. package/dist/dispatch/engines/validate-engine.js +737 -0
  588. package/dist/dispatch/engines/validate-engine.js.map +1 -0
  589. package/dist/dispatch/index.d.ts +20 -0
  590. package/dist/dispatch/index.d.ts.map +1 -0
  591. package/dist/dispatch/index.js +19 -0
  592. package/dist/dispatch/index.js.map +1 -0
  593. package/dist/dispatch/lib/background-jobs.d.ts +86 -0
  594. package/dist/dispatch/lib/background-jobs.d.ts.map +1 -0
  595. package/dist/dispatch/lib/background-jobs.js +183 -0
  596. package/dist/dispatch/lib/background-jobs.js.map +1 -0
  597. package/dist/dispatch/lib/budget.d.ts +35 -0
  598. package/dist/dispatch/lib/budget.d.ts.map +1 -0
  599. package/dist/dispatch/lib/budget.js +102 -0
  600. package/dist/dispatch/lib/budget.js.map +1 -0
  601. package/dist/dispatch/lib/capability-matrix.d.ts +11 -0
  602. package/dist/dispatch/lib/capability-matrix.d.ts.map +1 -0
  603. package/dist/dispatch/lib/capability-matrix.js +10 -0
  604. package/dist/dispatch/lib/capability-matrix.js.map +1 -0
  605. package/dist/dispatch/lib/config-loader.d.ts +42 -0
  606. package/dist/dispatch/lib/config-loader.d.ts.map +1 -0
  607. package/dist/dispatch/lib/config-loader.js +217 -0
  608. package/dist/dispatch/lib/config-loader.js.map +1 -0
  609. package/dist/dispatch/lib/config.d.ts +11 -0
  610. package/dist/dispatch/lib/config.d.ts.map +1 -0
  611. package/dist/dispatch/lib/config.js +10 -0
  612. package/dist/dispatch/lib/config.js.map +1 -0
  613. package/dist/dispatch/lib/defaults.d.ts +117 -0
  614. package/dist/dispatch/lib/defaults.d.ts.map +1 -0
  615. package/dist/dispatch/lib/defaults.js +58 -0
  616. package/dist/dispatch/lib/defaults.js.map +1 -0
  617. package/dist/dispatch/lib/engine.d.ts +26 -0
  618. package/dist/dispatch/lib/engine.d.ts.map +1 -0
  619. package/dist/dispatch/lib/engine.js +46 -0
  620. package/dist/dispatch/lib/engine.js.map +1 -0
  621. package/dist/dispatch/lib/gateway-meta.d.ts +37 -0
  622. package/dist/dispatch/lib/gateway-meta.d.ts.map +1 -0
  623. package/dist/dispatch/lib/gateway-meta.js +50 -0
  624. package/dist/dispatch/lib/gateway-meta.js.map +1 -0
  625. package/dist/dispatch/lib/job-manager-accessor.d.ts +9 -0
  626. package/dist/dispatch/lib/job-manager-accessor.d.ts.map +1 -0
  627. package/dist/dispatch/lib/job-manager-accessor.js +13 -0
  628. package/dist/dispatch/lib/job-manager-accessor.js.map +1 -0
  629. package/dist/dispatch/lib/meta.d.ts +26 -0
  630. package/dist/dispatch/lib/meta.d.ts.map +1 -0
  631. package/dist/dispatch/lib/meta.js +37 -0
  632. package/dist/dispatch/lib/meta.js.map +1 -0
  633. package/dist/dispatch/lib/param-utils.d.ts +11 -0
  634. package/dist/dispatch/lib/param-utils.d.ts.map +1 -0
  635. package/dist/dispatch/lib/param-utils.js +10 -0
  636. package/dist/dispatch/lib/param-utils.js.map +1 -0
  637. package/dist/dispatch/lib/projections.d.ts +56 -0
  638. package/dist/dispatch/lib/projections.d.ts.map +1 -0
  639. package/dist/dispatch/lib/projections.js +65 -0
  640. package/dist/dispatch/lib/projections.js.map +1 -0
  641. package/dist/dispatch/lib/schema-utils.d.ts +39 -0
  642. package/dist/dispatch/lib/schema-utils.d.ts.map +1 -0
  643. package/dist/dispatch/lib/schema-utils.js +88 -0
  644. package/dist/dispatch/lib/schema-utils.js.map +1 -0
  645. package/dist/dispatch/lib/security.d.ts +11 -0
  646. package/dist/dispatch/lib/security.d.ts.map +1 -0
  647. package/dist/dispatch/lib/security.js +10 -0
  648. package/dist/dispatch/lib/security.js.map +1 -0
  649. package/dist/dispatch/middleware/audit.d.ts +23 -0
  650. package/dist/dispatch/middleware/audit.d.ts.map +1 -0
  651. package/dist/dispatch/middleware/audit.js +169 -0
  652. package/dist/dispatch/middleware/audit.js.map +1 -0
  653. package/dist/dispatch/middleware/field-filter.d.ts +24 -0
  654. package/dist/dispatch/middleware/field-filter.d.ts.map +1 -0
  655. package/dist/dispatch/middleware/field-filter.js +65 -0
  656. package/dist/dispatch/middleware/field-filter.js.map +1 -0
  657. package/dist/dispatch/middleware/pipeline.d.ts +33 -0
  658. package/dist/dispatch/middleware/pipeline.d.ts.map +1 -0
  659. package/dist/dispatch/middleware/pipeline.js +60 -0
  660. package/dist/dispatch/middleware/pipeline.js.map +1 -0
  661. package/dist/dispatch/middleware/projection.d.ts +35 -0
  662. package/dist/dispatch/middleware/projection.d.ts.map +1 -0
  663. package/dist/dispatch/middleware/projection.js +146 -0
  664. package/dist/dispatch/middleware/projection.js.map +1 -0
  665. package/dist/dispatch/middleware/protocol-enforcement.d.ts +27 -0
  666. package/dist/dispatch/middleware/protocol-enforcement.d.ts.map +1 -0
  667. package/dist/dispatch/middleware/protocol-enforcement.js +45 -0
  668. package/dist/dispatch/middleware/protocol-enforcement.js.map +1 -0
  669. package/dist/dispatch/middleware/rate-limiter.d.ts +72 -0
  670. package/dist/dispatch/middleware/rate-limiter.d.ts.map +1 -0
  671. package/dist/dispatch/middleware/rate-limiter.js +127 -0
  672. package/dist/dispatch/middleware/rate-limiter.js.map +1 -0
  673. package/dist/dispatch/middleware/sanitizer.d.ts +24 -0
  674. package/dist/dispatch/middleware/sanitizer.d.ts.map +1 -0
  675. package/dist/dispatch/middleware/sanitizer.js +56 -0
  676. package/dist/dispatch/middleware/sanitizer.js.map +1 -0
  677. package/dist/dispatch/middleware/session-resolver.d.ts +26 -0
  678. package/dist/dispatch/middleware/session-resolver.d.ts.map +1 -0
  679. package/dist/dispatch/middleware/session-resolver.js +65 -0
  680. package/dist/dispatch/middleware/session-resolver.js.map +1 -0
  681. package/dist/dispatch/middleware/verification-gates.d.ts +22 -0
  682. package/dist/dispatch/middleware/verification-gates.d.ts.map +1 -0
  683. package/dist/dispatch/middleware/verification-gates.js +59 -0
  684. package/dist/dispatch/middleware/verification-gates.js.map +1 -0
  685. package/dist/dispatch/registry.d.ts +91 -0
  686. package/dist/dispatch/registry.d.ts.map +1 -0
  687. package/dist/dispatch/registry.js +3133 -0
  688. package/dist/dispatch/registry.js.map +1 -0
  689. package/dist/dispatch/types.d.ts +202 -0
  690. package/dist/dispatch/types.d.ts.map +1 -0
  691. package/dist/dispatch/types.js +26 -0
  692. package/dist/dispatch/types.js.map +1 -0
  693. package/package.json +7 -7
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Central output dispatch for V2 CLI commands.
3
+ *
4
+ * Provides cliOutput() which replaces `console.log(formatSuccess(data))`.
5
+ * Checks the resolved format (JSON/human/quiet) and dispatches to either
6
+ * the LAFS JSON envelope (formatSuccess) or a human-readable renderer.
7
+ *
8
+ * Commands call:
9
+ * cliOutput(data, { command: 'show', message, operation, page })
10
+ *
11
+ * @task T4665
12
+ * @task T4666
13
+ * @task T4813
14
+ * @epic T4663
15
+ */
16
+ import { type FormatOptions } from '@cleocode/core';
17
+ export interface CliOutputOptions {
18
+ /** Command name (used to pick the correct human renderer). */
19
+ command: string;
20
+ /** Optional success message for JSON envelope. */
21
+ message?: string;
22
+ /** Operation name for LAFS _meta. */
23
+ operation?: string;
24
+ /** Pagination for LAFS envelope. */
25
+ page?: FormatOptions['page'];
26
+ /** Extra LAFS extensions. */
27
+ extensions?: Record<string, unknown>;
28
+ }
29
+ /**
30
+ * Output data to stdout in the resolved format (JSON or human-readable).
31
+ *
32
+ * Replaces `console.log(formatSuccess(data))` in all V2 commands.
33
+ * When format is 'human', normalizes the data shape then dispatches to
34
+ * the appropriate renderer.
35
+ * When format is 'json', delegates to existing formatSuccess().
36
+ *
37
+ * @task T4665
38
+ * @task T4666
39
+ * @task T4813
40
+ */
41
+ export declare function cliOutput(data: unknown, opts: CliOutputOptions): void;
42
+ /**
43
+ * Error details for structured error output.
44
+ */
45
+ export interface CliErrorDetails {
46
+ name?: string;
47
+ details?: unknown;
48
+ fix?: unknown;
49
+ }
50
+ /**
51
+ * Output an error in the resolved format.
52
+ * For JSON: delegates to formatError (already handled in command catch blocks).
53
+ * For human: prints a plain error message to stderr.
54
+ *
55
+ * @task T4666
56
+ * @task T4813
57
+ */
58
+ export declare function cliError(message: string, code?: number | string, _details?: CliErrorDetails): void;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/renderers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,gBAAgB,CAAC;AA+EnE,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA2HrE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,CAAC,EAAE,eAAe,GACzB,IAAI,CAeN"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Central output dispatch for V2 CLI commands.
3
+ *
4
+ * Provides cliOutput() which replaces `console.log(formatSuccess(data))`.
5
+ * Checks the resolved format (JSON/human/quiet) and dispatches to either
6
+ * the LAFS JSON envelope (formatSuccess) or a human-readable renderer.
7
+ *
8
+ * Commands call:
9
+ * cliOutput(data, { command: 'show', message, operation, page })
10
+ *
11
+ * @task T4665
12
+ * @task T4666
13
+ * @task T4813
14
+ * @epic T4663
15
+ */
16
+ import { formatSuccess } from '@cleocode/core';
17
+ import { applyFieldFilter, extractFieldFromResult } from '@cleocode/lafs';
18
+ import { getFieldContext } from '../field-context.js';
19
+ import { getFormatContext } from '../format-context.js';
20
+ import { emitLafsViolation, LafsViolationError, validateLafsShape } from './lafs-validator.js';
21
+ import { normalizeForHuman } from './normalizer.js';
22
+ // System renderers
23
+ import { renderBlockers, renderCurrent, renderDoctor, renderGeneric, renderNext, renderPlan, renderSession, renderStart, renderStats, renderStop, renderTree, renderVersion, } from './system.js';
24
+ // Task renderers
25
+ import { renderAdd, renderArchive, renderComplete, renderDelete, renderFind, renderList, renderRestore, renderShow, renderUpdate, } from './tasks.js';
26
+ const renderers = {
27
+ // Task CRUD
28
+ show: renderShow,
29
+ list: renderList,
30
+ ls: renderList,
31
+ find: renderFind,
32
+ search: renderFind,
33
+ add: renderAdd,
34
+ update: renderUpdate,
35
+ complete: renderComplete,
36
+ done: renderComplete,
37
+ delete: renderDelete,
38
+ rm: renderDelete,
39
+ archive: renderArchive,
40
+ restore: renderRestore,
41
+ // Task work
42
+ start: renderStart,
43
+ stop: renderStop,
44
+ current: renderCurrent,
45
+ // System
46
+ doctor: renderDoctor,
47
+ stats: renderStats,
48
+ next: renderNext,
49
+ plan: renderPlan,
50
+ blockers: renderBlockers,
51
+ tree: renderTree,
52
+ depends: renderTree,
53
+ deps: renderTree,
54
+ session: renderSession,
55
+ version: renderVersion,
56
+ };
57
+ // ---------------------------------------------------------------------------
58
+ // Main output function
59
+ // ---------------------------------------------------------------------------
60
+ /**
61
+ * Output data to stdout in the resolved format (JSON or human-readable).
62
+ *
63
+ * Replaces `console.log(formatSuccess(data))` in all V2 commands.
64
+ * When format is 'human', normalizes the data shape then dispatches to
65
+ * the appropriate renderer.
66
+ * When format is 'json', delegates to existing formatSuccess().
67
+ *
68
+ * @task T4665
69
+ * @task T4666
70
+ * @task T4813
71
+ */
72
+ export function cliOutput(data, opts) {
73
+ const ctx = getFormatContext();
74
+ const fieldCtx = getFieldContext();
75
+ if (ctx.format === 'human') {
76
+ let dataToRender = data;
77
+ // §5.4.1 filter-then-render: apply --field extraction BEFORE human rendering
78
+ let fieldExtracted = false;
79
+ if (fieldCtx.field) {
80
+ const extracted = extractFieldFromResult(data, fieldCtx.field);
81
+ if (extracted === undefined) {
82
+ cliError(`Field "${fieldCtx.field}" not found`, 4, { name: 'E_NOT_FOUND' });
83
+ process.exit(4);
84
+ }
85
+ // If extracted is a primitive, render directly
86
+ if (typeof extracted !== 'object' || extracted === null) {
87
+ console.log(String(extracted));
88
+ return;
89
+ }
90
+ // If extracted is an array, wrap it for renderGeneric
91
+ if (Array.isArray(extracted)) {
92
+ dataToRender = { [fieldCtx.field]: extracted };
93
+ }
94
+ else {
95
+ dataToRender = extracted;
96
+ }
97
+ fieldExtracted = true;
98
+ }
99
+ const normalized = normalizeForHuman(opts.command, dataToRender);
100
+ // After field extraction, use renderGeneric — command-specific renderers
101
+ // expect the full data structure, not a filtered subset (§5.4.1)
102
+ const renderer = fieldExtracted ? renderGeneric : (renderers[opts.command] ?? renderGeneric);
103
+ const text = renderer(normalized, ctx.quiet);
104
+ if (text) {
105
+ console.log(text);
106
+ }
107
+ return;
108
+ }
109
+ // --field: single-field plain text extraction (scripting / agent use).
110
+ // Centralised here so ALL commands (dispatchFromCli and dispatchRaw) honour the flag.
111
+ if (fieldCtx.field) {
112
+ const value = extractFieldFromResult(data, fieldCtx.field);
113
+ if (value === undefined) {
114
+ cliError(`Field "${fieldCtx.field}" not found`, 4, { name: 'E_NOT_FOUND' });
115
+ process.exit(4);
116
+ }
117
+ const out = value !== null && typeof value === 'object' ? JSON.stringify(value) : String(value);
118
+ process.stdout.write(out + '\n');
119
+ return;
120
+ }
121
+ // JSON format (default): apply --fields filter, then emit LAFS envelope.
122
+ // Centralised here so ALL commands honour the flag without per-command wiring.
123
+ // applyFieldFilter can throw on unusual mixed-type arrays (e.g. changes: ['status']).
124
+ // In that case we fall back to unfiltered output rather than crashing.
125
+ let filteredData = data;
126
+ if (fieldCtx.fields?.length && data !== undefined && data !== null) {
127
+ try {
128
+ const stub = {
129
+ $schema: 'https://lafs.dev/schemas/v1/envelope.schema.json',
130
+ _meta: {
131
+ specVersion: '',
132
+ schemaVersion: '',
133
+ timestamp: '',
134
+ operation: '',
135
+ requestId: '',
136
+ transport: 'cli',
137
+ strict: false,
138
+ mvi: 'standard',
139
+ contextVersion: 0,
140
+ },
141
+ success: true,
142
+ result: data,
143
+ };
144
+ const filtered = applyFieldFilter(stub, fieldCtx.fields);
145
+ filteredData = filtered.result;
146
+ }
147
+ catch {
148
+ // applyFieldFilter limitation: mixed-type arrays (strings inside arrays) are not
149
+ // supported. Fall through to emit the full unfiltered result.
150
+ }
151
+ }
152
+ // Per LAFS §9.1 (v1.5.0 clarification): _meta MUST always be present.
153
+ // --mvi minimal governs result contents only; mvi level is reflected in _meta.mvi.
154
+ const formatOpts = {};
155
+ if (opts.operation)
156
+ formatOpts.operation = opts.operation;
157
+ if (opts.page)
158
+ formatOpts.page = opts.page;
159
+ if (opts.extensions)
160
+ formatOpts.extensions = opts.extensions;
161
+ if (fieldCtx.mvi)
162
+ formatOpts.mvi = fieldCtx.mvi;
163
+ // Phase 6 — LAFS envelope validation middleware.
164
+ // Every CLI output flows through `formatSuccess()` → string. We parse the
165
+ // string, assert the shape invariants, and only emit if validation passes.
166
+ // A shape violation is a CLEO developer bug, so we:
167
+ // 1. Emit a valid LAFS error envelope to stderr describing the violation
168
+ // 2. Set process.exitCode to ExitCode.LAFS_VIOLATION (104)
169
+ // 3. Still emit the (invalid) original to stdout so operators can inspect
170
+ // This is a safety net — it never SILENTLY swallows output.
171
+ const envelopeString = formatSuccess(filteredData, opts.message, Object.keys(formatOpts).length > 0 ? formatOpts : opts.operation);
172
+ if (process.env['CLEO_LAFS_VALIDATE'] !== 'off') {
173
+ try {
174
+ const report = validateLafsShape(envelopeString);
175
+ if (report.reasons.length > 0) {
176
+ emitLafsViolation(new LafsViolationError(`cliOutput: envelope failed LAFS shape validation`, report));
177
+ }
178
+ }
179
+ catch (err) {
180
+ if (err instanceof LafsViolationError) {
181
+ emitLafsViolation(err);
182
+ }
183
+ // Non-validator errors — re-raise so tests can see them
184
+ }
185
+ }
186
+ console.log(envelopeString);
187
+ }
188
+ /**
189
+ * Output an error in the resolved format.
190
+ * For JSON: delegates to formatError (already handled in command catch blocks).
191
+ * For human: prints a plain error message to stderr.
192
+ *
193
+ * @task T4666
194
+ * @task T4813
195
+ */
196
+ export function cliError(message, code, _details) {
197
+ const ctx = getFormatContext();
198
+ if (ctx.format === 'human') {
199
+ console.error(`Error: ${message}${code ? ` (${code})` : ''}`);
200
+ return;
201
+ }
202
+ // JSON envelope always goes to stdout for consistent machine-readable output
203
+ console.log(JSON.stringify({
204
+ success: false,
205
+ error: { code: code ?? 1, message },
206
+ }));
207
+ }
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/renderers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * LAFS envelope validator middleware (Phase 6).
3
+ *
4
+ * Every CLI envelope emitted by `cliOutput()` flows through this module
5
+ * before hitting stdout. The middleware delegates to the canonical LAFS
6
+ * validators where they exist and adds a thin shape check for the agent-
7
+ * optimized **minimal envelope** format that the canonical schema does
8
+ * not cover.
9
+ *
10
+ * **SSoT alignment** (post-review):
11
+ * - Full envelopes (`{$schema, _meta, success, result}`) are validated
12
+ * by `validateEnvelope()` from `@cleocode/lafs`, which uses the
13
+ * `lafs-napi` Rust binding (with AJV fallback) and the canonical
14
+ * schema at `packages/lafs/schemas/v1/envelope.schema.json`.
15
+ * - Minimal envelopes (`{ok, r, _m}`) are agent-optimized and not part
16
+ * of the public LAFS schema. We validate their shape locally with
17
+ * the lightweight invariant check below.
18
+ *
19
+ * Validation invariants enforced HERE (minimal envelopes only):
20
+ * - Envelope MUST be a JSON object (parseable from a string)
21
+ * - Envelope MUST have exactly one of {`ok`, `success`}
22
+ * - The success indicator MUST be a boolean
23
+ * - On success, `r` / `result` MUST exist (may be null)
24
+ * - On failure, `error` MUST exist with at least `code` and `message`
25
+ * - `_m` / `_meta` MUST be present in some form
26
+ *
27
+ * When a violation is detected, the validator:
28
+ * 1. Wraps the malformed output in a valid error envelope
29
+ * 2. Sets the process exit code to `ExitCode.LAFS_VIOLATION` (104)
30
+ * 3. Emits the wrapped envelope to stderr for diagnostic tooling
31
+ *
32
+ * @task Phase 6 — LAFS formalization + schema consolidation
33
+ * @see packages/lafs/src/validateEnvelope.ts — canonical full-envelope validator
34
+ * @see packages/lafs/schemas/v1/envelope.schema.json — canonical full-envelope schema
35
+ * @see crates/lafs-core — Rust embed of the canonical schema
36
+ */
37
+ import { ExitCode } from '@cleocode/contracts';
38
+ /**
39
+ * The minimum shape invariants for a LAFS envelope, compatible with both
40
+ * minimal (`{ok, r, _m}`) and full (`{success, result, _meta}`) formats.
41
+ */
42
+ export interface LafsShapeViolation {
43
+ /** True iff the input is a well-formed JSON object. */
44
+ isObject: boolean;
45
+ /** True iff the envelope has exactly one success-indicator field. */
46
+ hasSuccessField: boolean;
47
+ /** True iff the success-indicator is a boolean. */
48
+ successIsBoolean: boolean;
49
+ /** True iff a metadata field (`_m` or `_meta`) is present. */
50
+ hasMeta: boolean;
51
+ /** True iff the result/error invariants hold for the indicated success value. */
52
+ resultOrErrorValid: boolean;
53
+ /** Human-readable reasons the envelope failed validation (empty = valid). */
54
+ reasons: string[];
55
+ }
56
+ /**
57
+ * Validate a LAFS envelope shape and report violations.
58
+ *
59
+ * Full envelopes are delegated to `@cleocode/lafs.validateEnvelope()` (which
60
+ * uses the canonical schema via lafs-napi/AJV). Minimal envelopes are
61
+ * checked against the lightweight invariants in this module.
62
+ *
63
+ * @param envelope - The candidate envelope (serialized string or object)
64
+ * @returns A `LafsShapeViolation` report. `.reasons.length === 0` when valid.
65
+ */
66
+ export declare function validateLafsShape(envelope: unknown): LafsShapeViolation;
67
+ /**
68
+ * Assert that a LAFS envelope conforms to the shape contract, throwing
69
+ * an error with a LAFS-shaped diagnostic if it does not.
70
+ *
71
+ * Used by the renderer middleware to fail LOUDLY when CLEO itself emits
72
+ * a malformed envelope — this is a developer bug, not an operator issue.
73
+ *
74
+ * @param envelope - The candidate envelope
75
+ * @throws `LafsViolationError` if the envelope fails any shape invariant
76
+ */
77
+ export declare function assertLafsShape(envelope: unknown): void;
78
+ /**
79
+ * Error thrown by `assertLafsShape` when an envelope fails validation.
80
+ *
81
+ * Carries the full `LafsShapeViolation` report so diagnostic tooling can
82
+ * report which specific invariants were violated.
83
+ */
84
+ export declare class LafsViolationError extends Error {
85
+ readonly code = ExitCode.LAFS_VIOLATION;
86
+ readonly report: LafsShapeViolation;
87
+ constructor(message: string, report: LafsShapeViolation);
88
+ }
89
+ /**
90
+ * Emit a LAFS-shaped error envelope describing a validation failure and
91
+ * set `process.exitCode` to `ExitCode.LAFS_VIOLATION`.
92
+ *
93
+ * Called by the renderer middleware as a recovery path when a previously-
94
+ * emitted envelope turns out to be malformed.
95
+ */
96
+ export declare function emitLafsViolation(err: LafsViolationError): void;
97
+ //# sourceMappingURL=lafs-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lafs-validator.d.ts","sourceRoot":"","sources":["../../../src/cli/renderers/lafs-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,eAAe,EAAE,OAAO,CAAC;IACzB,mDAAmD;IACnD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,6EAA6E;IAC7E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,kBAAkB,CAwHvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAQvD;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB;CAKxD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAmB/D"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * LAFS envelope validator middleware (Phase 6).
3
+ *
4
+ * Every CLI envelope emitted by `cliOutput()` flows through this module
5
+ * before hitting stdout. The middleware delegates to the canonical LAFS
6
+ * validators where they exist and adds a thin shape check for the agent-
7
+ * optimized **minimal envelope** format that the canonical schema does
8
+ * not cover.
9
+ *
10
+ * **SSoT alignment** (post-review):
11
+ * - Full envelopes (`{$schema, _meta, success, result}`) are validated
12
+ * by `validateEnvelope()` from `@cleocode/lafs`, which uses the
13
+ * `lafs-napi` Rust binding (with AJV fallback) and the canonical
14
+ * schema at `packages/lafs/schemas/v1/envelope.schema.json`.
15
+ * - Minimal envelopes (`{ok, r, _m}`) are agent-optimized and not part
16
+ * of the public LAFS schema. We validate their shape locally with
17
+ * the lightweight invariant check below.
18
+ *
19
+ * Validation invariants enforced HERE (minimal envelopes only):
20
+ * - Envelope MUST be a JSON object (parseable from a string)
21
+ * - Envelope MUST have exactly one of {`ok`, `success`}
22
+ * - The success indicator MUST be a boolean
23
+ * - On success, `r` / `result` MUST exist (may be null)
24
+ * - On failure, `error` MUST exist with at least `code` and `message`
25
+ * - `_m` / `_meta` MUST be present in some form
26
+ *
27
+ * When a violation is detected, the validator:
28
+ * 1. Wraps the malformed output in a valid error envelope
29
+ * 2. Sets the process exit code to `ExitCode.LAFS_VIOLATION` (104)
30
+ * 3. Emits the wrapped envelope to stderr for diagnostic tooling
31
+ *
32
+ * @task Phase 6 — LAFS formalization + schema consolidation
33
+ * @see packages/lafs/src/validateEnvelope.ts — canonical full-envelope validator
34
+ * @see packages/lafs/schemas/v1/envelope.schema.json — canonical full-envelope schema
35
+ * @see crates/lafs-core — Rust embed of the canonical schema
36
+ */
37
+ import { ExitCode } from '@cleocode/contracts';
38
+ const ENVELOPE_OK_KEY_MINIMAL = 'ok';
39
+ const ENVELOPE_OK_KEY_FULL = 'success';
40
+ const ENVELOPE_RESULT_KEY_MINIMAL = 'r';
41
+ const ENVELOPE_RESULT_KEY_FULL = 'result';
42
+ const ENVELOPE_META_KEYS = ['_m', '_meta'];
43
+ /**
44
+ * Detect whether a parsed envelope is a "full" or "minimal" LAFS shape.
45
+ *
46
+ * Full shape uses {`success`, `result`, `_meta`}; minimal shape uses
47
+ * {`ok`, `r`, `_m`}. Returns 'unknown' when neither indicator is present.
48
+ */
49
+ function detectEnvelopeFlavor(obj) {
50
+ if ('success' in obj || '_meta' in obj || '$schema' in obj)
51
+ return 'full';
52
+ if ('ok' in obj || '_m' in obj)
53
+ return 'minimal';
54
+ return 'unknown';
55
+ }
56
+ /**
57
+ * Validate a LAFS envelope shape and report violations.
58
+ *
59
+ * Full envelopes are delegated to `@cleocode/lafs.validateEnvelope()` (which
60
+ * uses the canonical schema via lafs-napi/AJV). Minimal envelopes are
61
+ * checked against the lightweight invariants in this module.
62
+ *
63
+ * @param envelope - The candidate envelope (serialized string or object)
64
+ * @returns A `LafsShapeViolation` report. `.reasons.length === 0` when valid.
65
+ */
66
+ export function validateLafsShape(envelope) {
67
+ const report = {
68
+ isObject: false,
69
+ hasSuccessField: false,
70
+ successIsBoolean: false,
71
+ hasMeta: false,
72
+ resultOrErrorValid: false,
73
+ reasons: [],
74
+ };
75
+ // Allow callers to pass either a serialized envelope or a parsed one
76
+ let parsed = envelope;
77
+ if (typeof envelope === 'string') {
78
+ try {
79
+ parsed = JSON.parse(envelope);
80
+ }
81
+ catch {
82
+ report.reasons.push('Envelope is not valid JSON');
83
+ return report;
84
+ }
85
+ }
86
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
87
+ report.reasons.push('Envelope is not a JSON object');
88
+ return report;
89
+ }
90
+ report.isObject = true;
91
+ const obj = parsed;
92
+ // SSoT delegation: full envelopes go through @cleocode/lafs.validateEnvelope
93
+ // which validates against the canonical packages/lafs/schemas/v1/envelope.schema.json
94
+ // (via the lafs-napi Rust binding when available, AJV fallback otherwise).
95
+ // We only inspect minimal envelopes locally because they're an internal
96
+ // agent-optimized format that the canonical schema does not cover.
97
+ const flavor = detectEnvelopeFlavor(obj);
98
+ if (flavor === 'full') {
99
+ try {
100
+ // Lazy require to avoid pulling lafs into the cli bundle's hot path.
101
+ // The package exports validateEnvelope() at the package root.
102
+ // biome-ignore lint/suspicious/noExplicitAny: dynamic import shape
103
+ const lafs = require('@cleocode/lafs');
104
+ const result = lafs.validateEnvelope(obj);
105
+ report.hasSuccessField = true;
106
+ report.successIsBoolean = true;
107
+ report.hasMeta = true;
108
+ report.resultOrErrorValid = result.valid;
109
+ if (!result.valid) {
110
+ for (const err of result.errors) {
111
+ report.reasons.push(`canonical validator: ${err}`);
112
+ }
113
+ }
114
+ return report;
115
+ }
116
+ catch (loadErr) {
117
+ // Fall through to the local minimal-shape check if @cleocode/lafs
118
+ // can't be loaded for any reason — better than failing closed.
119
+ report.reasons.push(`Could not load canonical LAFS validator (${loadErr instanceof Error ? loadErr.message : String(loadErr)}); falling back to local shape check`);
120
+ // continue to the minimal-shape path below
121
+ }
122
+ }
123
+ // Success-indicator field presence
124
+ const hasMinimal = ENVELOPE_OK_KEY_MINIMAL in obj;
125
+ const hasFull = ENVELOPE_OK_KEY_FULL in obj;
126
+ if (!hasMinimal && !hasFull) {
127
+ report.reasons.push(`Envelope missing success indicator — expected one of: ${ENVELOPE_OK_KEY_MINIMAL}, ${ENVELOPE_OK_KEY_FULL}`);
128
+ return report;
129
+ }
130
+ report.hasSuccessField = true;
131
+ const successValue = hasMinimal ? obj[ENVELOPE_OK_KEY_MINIMAL] : obj[ENVELOPE_OK_KEY_FULL];
132
+ if (typeof successValue !== 'boolean') {
133
+ report.reasons.push(`Envelope success field must be boolean, got ${typeof successValue}`);
134
+ return report;
135
+ }
136
+ report.successIsBoolean = true;
137
+ // Metadata presence
138
+ report.hasMeta = ENVELOPE_META_KEYS.some((key) => key in obj);
139
+ if (!report.hasMeta) {
140
+ report.reasons.push(`Envelope missing metadata — expected one of: ${ENVELOPE_META_KEYS.join(', ')}`);
141
+ }
142
+ // Success / error invariants
143
+ if (successValue === true) {
144
+ const hasResult = ENVELOPE_RESULT_KEY_MINIMAL in obj || ENVELOPE_RESULT_KEY_FULL in obj;
145
+ if (!hasResult) {
146
+ report.reasons.push(`Successful envelope missing result field (${ENVELOPE_RESULT_KEY_MINIMAL} | ${ENVELOPE_RESULT_KEY_FULL})`);
147
+ }
148
+ else {
149
+ report.resultOrErrorValid = true;
150
+ }
151
+ }
152
+ else {
153
+ const errorField = obj['error'];
154
+ if (typeof errorField !== 'object' || errorField === null) {
155
+ report.reasons.push('Failed envelope missing error object');
156
+ }
157
+ else {
158
+ const err = errorField;
159
+ const hasCode = 'code' in err;
160
+ const hasMessage = 'message' in err && typeof err['message'] === 'string';
161
+ if (!hasCode || !hasMessage) {
162
+ report.reasons.push('Failed envelope error object must contain code and message (string)');
163
+ }
164
+ else {
165
+ report.resultOrErrorValid = true;
166
+ }
167
+ }
168
+ }
169
+ return report;
170
+ }
171
+ /**
172
+ * Assert that a LAFS envelope conforms to the shape contract, throwing
173
+ * an error with a LAFS-shaped diagnostic if it does not.
174
+ *
175
+ * Used by the renderer middleware to fail LOUDLY when CLEO itself emits
176
+ * a malformed envelope — this is a developer bug, not an operator issue.
177
+ *
178
+ * @param envelope - The candidate envelope
179
+ * @throws `LafsViolationError` if the envelope fails any shape invariant
180
+ */
181
+ export function assertLafsShape(envelope) {
182
+ const report = validateLafsShape(envelope);
183
+ if (report.reasons.length > 0) {
184
+ throw new LafsViolationError(`LAFS envelope shape violation: ${report.reasons.join('; ')}`, report);
185
+ }
186
+ }
187
+ /**
188
+ * Error thrown by `assertLafsShape` when an envelope fails validation.
189
+ *
190
+ * Carries the full `LafsShapeViolation` report so diagnostic tooling can
191
+ * report which specific invariants were violated.
192
+ */
193
+ export class LafsViolationError extends Error {
194
+ code = ExitCode.LAFS_VIOLATION;
195
+ report;
196
+ constructor(message, report) {
197
+ super(message);
198
+ this.name = 'LafsViolationError';
199
+ this.report = report;
200
+ }
201
+ }
202
+ /**
203
+ * Emit a LAFS-shaped error envelope describing a validation failure and
204
+ * set `process.exitCode` to `ExitCode.LAFS_VIOLATION`.
205
+ *
206
+ * Called by the renderer middleware as a recovery path when a previously-
207
+ * emitted envelope turns out to be malformed.
208
+ */
209
+ export function emitLafsViolation(err) {
210
+ const envelope = {
211
+ ok: false,
212
+ error: {
213
+ code: 'E_LAFS_VIOLATION',
214
+ message: err.message,
215
+ category: 'internal',
216
+ details: {
217
+ exitCode: ExitCode.LAFS_VIOLATION,
218
+ report: err.report,
219
+ },
220
+ },
221
+ _m: {
222
+ op: 'cli.lafs-validator',
223
+ rid: 'lafs-validator-emit',
224
+ },
225
+ };
226
+ process.stderr.write(`${JSON.stringify(envelope)}\n`);
227
+ process.exitCode = ExitCode.LAFS_VIOLATION;
228
+ }
229
+ //# sourceMappingURL=lafs-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lafs-validator.js","sourceRoot":"","sources":["../../../src/cli/renderers/lafs-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * CLI Rendering Normalizer — safety net for human-readable output.
3
+ *
4
+ * Ensures data passed to human renderers has the expected shape,
5
+ * regardless of whether the engine layer has been fully fixed.
6
+ * Only called for human format — JSON output is untouched.
7
+ *
8
+ * Detection is idempotent: if data already has the expected key,
9
+ * it passes through unchanged.
10
+ *
11
+ * @task T4813
12
+ */
13
+ /**
14
+ * Normalize data shape for human renderers.
15
+ *
16
+ * Each command expects data with specific named keys (e.g., `data.task`
17
+ * for 'show', `data.tasks` for 'list'). This function detects and
18
+ * corrects flat/array data from the engine layer.
19
+ */
20
+ export declare function normalizeForHuman(command: string, data: Record<string, unknown>): Record<string, unknown>;
21
+ //# sourceMappingURL=normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../../src/cli/renderers/normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiCzB"}