@cleocode/cleo 2026.4.12 → 2026.4.14

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 (710) hide show
  1. package/README.md +27 -0
  2. package/dist/cli/index.js +121925 -340
  3. package/dist/cli/index.js.map +7 -1
  4. package/package.json +7 -7
  5. package/dist/cli/commander-shim.d.ts +0 -112
  6. package/dist/cli/commander-shim.d.ts.map +0 -1
  7. package/dist/cli/commander-shim.js +0 -233
  8. package/dist/cli/commander-shim.js.map +0 -1
  9. package/dist/cli/commands/add.d.ts +0 -12
  10. package/dist/cli/commands/add.d.ts.map +0 -1
  11. package/dist/cli/commands/add.js +0 -202
  12. package/dist/cli/commands/add.js.map +0 -1
  13. package/dist/cli/commands/admin.d.ts +0 -12
  14. package/dist/cli/commands/admin.d.ts.map +0 -1
  15. package/dist/cli/commands/admin.js +0 -59
  16. package/dist/cli/commands/admin.js.map +0 -1
  17. package/dist/cli/commands/adr.d.ts +0 -27
  18. package/dist/cli/commands/adr.d.ts.map +0 -1
  19. package/dist/cli/commands/adr.js +0 -79
  20. package/dist/cli/commands/adr.js.map +0 -1
  21. package/dist/cli/commands/agent-profile-status.d.ts +0 -98
  22. package/dist/cli/commands/agent-profile-status.d.ts.map +0 -1
  23. package/dist/cli/commands/agent-profile-status.js +0 -71
  24. package/dist/cli/commands/agent-profile-status.js.map +0 -1
  25. package/dist/cli/commands/agent.d.ts +0 -38
  26. package/dist/cli/commands/agent.d.ts.map +0 -1
  27. package/dist/cli/commands/agent.js +0 -1169
  28. package/dist/cli/commands/agent.js.map +0 -1
  29. package/dist/cli/commands/agents.d.ts +0 -17
  30. package/dist/cli/commands/agents.d.ts.map +0 -1
  31. package/dist/cli/commands/agents.js +0 -20
  32. package/dist/cli/commands/agents.js.map +0 -1
  33. package/dist/cli/commands/analyze.d.ts +0 -12
  34. package/dist/cli/commands/analyze.d.ts.map +0 -1
  35. package/dist/cli/commands/analyze.js +0 -20
  36. package/dist/cli/commands/analyze.js.map +0 -1
  37. package/dist/cli/commands/archive-stats.d.ts +0 -18
  38. package/dist/cli/commands/archive-stats.d.ts.map +0 -1
  39. package/dist/cli/commands/archive-stats.js +0 -49
  40. package/dist/cli/commands/archive-stats.js.map +0 -1
  41. package/dist/cli/commands/archive.d.ts +0 -12
  42. package/dist/cli/commands/archive.d.ts.map +0 -1
  43. package/dist/cli/commands/archive.js +0 -32
  44. package/dist/cli/commands/archive.js.map +0 -1
  45. package/dist/cli/commands/backfill.d.ts +0 -38
  46. package/dist/cli/commands/backfill.d.ts.map +0 -1
  47. package/dist/cli/commands/backfill.js +0 -147
  48. package/dist/cli/commands/backfill.js.map +0 -1
  49. package/dist/cli/commands/backup.d.ts +0 -9
  50. package/dist/cli/commands/backup.d.ts.map +0 -1
  51. package/dist/cli/commands/backup.js +0 -41
  52. package/dist/cli/commands/backup.js.map +0 -1
  53. package/dist/cli/commands/blockers.d.ts +0 -7
  54. package/dist/cli/commands/blockers.d.ts.map +0 -1
  55. package/dist/cli/commands/blockers.js +0 -16
  56. package/dist/cli/commands/blockers.js.map +0 -1
  57. package/dist/cli/commands/brain.d.ts +0 -29
  58. package/dist/cli/commands/brain.d.ts.map +0 -1
  59. package/dist/cli/commands/brain.js +0 -107
  60. package/dist/cli/commands/brain.js.map +0 -1
  61. package/dist/cli/commands/briefing.d.ts +0 -22
  62. package/dist/cli/commands/briefing.d.ts.map +0 -1
  63. package/dist/cli/commands/briefing.js +0 -45
  64. package/dist/cli/commands/briefing.js.map +0 -1
  65. package/dist/cli/commands/bug.d.ts +0 -12
  66. package/dist/cli/commands/bug.d.ts.map +0 -1
  67. package/dist/cli/commands/bug.js +0 -81
  68. package/dist/cli/commands/bug.js.map +0 -1
  69. package/dist/cli/commands/cant.d.ts +0 -32
  70. package/dist/cli/commands/cant.d.ts.map +0 -1
  71. package/dist/cli/commands/cant.js +0 -281
  72. package/dist/cli/commands/cant.js.map +0 -1
  73. package/dist/cli/commands/check.d.ts +0 -22
  74. package/dist/cli/commands/check.d.ts.map +0 -1
  75. package/dist/cli/commands/check.js +0 -164
  76. package/dist/cli/commands/check.js.map +0 -1
  77. package/dist/cli/commands/checkpoint.d.ts +0 -15
  78. package/dist/cli/commands/checkpoint.d.ts.map +0 -1
  79. package/dist/cli/commands/checkpoint.js +0 -91
  80. package/dist/cli/commands/checkpoint.js.map +0 -1
  81. package/dist/cli/commands/code.d.ts +0 -11
  82. package/dist/cli/commands/code.d.ts.map +0 -1
  83. package/dist/cli/commands/code.js +0 -114
  84. package/dist/cli/commands/code.js.map +0 -1
  85. package/dist/cli/commands/commands.d.ts +0 -13
  86. package/dist/cli/commands/commands.d.ts.map +0 -1
  87. package/dist/cli/commands/commands.js +0 -29
  88. package/dist/cli/commands/commands.js.map +0 -1
  89. package/dist/cli/commands/complete.d.ts +0 -12
  90. package/dist/cli/commands/complete.d.ts.map +0 -1
  91. package/dist/cli/commands/complete.js +0 -92
  92. package/dist/cli/commands/complete.js.map +0 -1
  93. package/dist/cli/commands/compliance.d.ts +0 -8
  94. package/dist/cli/commands/compliance.d.ts.map +0 -1
  95. package/dist/cli/commands/compliance.js +0 -85
  96. package/dist/cli/commands/compliance.js.map +0 -1
  97. package/dist/cli/commands/config.d.ts +0 -10
  98. package/dist/cli/commands/config.d.ts.map +0 -1
  99. package/dist/cli/commands/config.js +0 -69
  100. package/dist/cli/commands/config.js.map +0 -1
  101. package/dist/cli/commands/consensus.d.ts +0 -13
  102. package/dist/cli/commands/consensus.d.ts.map +0 -1
  103. package/dist/cli/commands/consensus.js +0 -45
  104. package/dist/cli/commands/consensus.js.map +0 -1
  105. package/dist/cli/commands/context.d.ts +0 -8
  106. package/dist/cli/commands/context.d.ts.map +0 -1
  107. package/dist/cli/commands/context.js +0 -40
  108. package/dist/cli/commands/context.js.map +0 -1
  109. package/dist/cli/commands/contribution.d.ts +0 -13
  110. package/dist/cli/commands/contribution.d.ts.map +0 -1
  111. package/dist/cli/commands/contribution.js +0 -41
  112. package/dist/cli/commands/contribution.js.map +0 -1
  113. package/dist/cli/commands/current.d.ts +0 -13
  114. package/dist/cli/commands/current.d.ts.map +0 -1
  115. package/dist/cli/commands/current.js +0 -20
  116. package/dist/cli/commands/current.js.map +0 -1
  117. package/dist/cli/commands/dash.d.ts +0 -12
  118. package/dist/cli/commands/dash.d.ts.map +0 -1
  119. package/dist/cli/commands/dash.js +0 -24
  120. package/dist/cli/commands/dash.js.map +0 -1
  121. package/dist/cli/commands/decomposition.d.ts +0 -13
  122. package/dist/cli/commands/decomposition.d.ts.map +0 -1
  123. package/dist/cli/commands/decomposition.js +0 -45
  124. package/dist/cli/commands/decomposition.js.map +0 -1
  125. package/dist/cli/commands/delete.d.ts +0 -12
  126. package/dist/cli/commands/delete.d.ts.map +0 -1
  127. package/dist/cli/commands/delete.js +0 -37
  128. package/dist/cli/commands/delete.js.map +0 -1
  129. package/dist/cli/commands/deps.d.ts +0 -24
  130. package/dist/cli/commands/deps.d.ts.map +0 -1
  131. package/dist/cli/commands/deps.js +0 -98
  132. package/dist/cli/commands/deps.js.map +0 -1
  133. package/dist/cli/commands/detect-drift.d.ts +0 -15
  134. package/dist/cli/commands/detect-drift.d.ts.map +0 -1
  135. package/dist/cli/commands/detect-drift.js +0 -424
  136. package/dist/cli/commands/detect-drift.js.map +0 -1
  137. package/dist/cli/commands/detect.d.ts +0 -10
  138. package/dist/cli/commands/detect.d.ts.map +0 -1
  139. package/dist/cli/commands/detect.js +0 -24
  140. package/dist/cli/commands/detect.js.map +0 -1
  141. package/dist/cli/commands/docs.d.ts +0 -13
  142. package/dist/cli/commands/docs.d.ts.map +0 -1
  143. package/dist/cli/commands/docs.js +0 -169
  144. package/dist/cli/commands/docs.js.map +0 -1
  145. package/dist/cli/commands/doctor.d.ts +0 -15
  146. package/dist/cli/commands/doctor.d.ts.map +0 -1
  147. package/dist/cli/commands/doctor.js +0 -133
  148. package/dist/cli/commands/doctor.js.map +0 -1
  149. package/dist/cli/commands/dynamic.d.ts +0 -24
  150. package/dist/cli/commands/dynamic.d.ts.map +0 -1
  151. package/dist/cli/commands/dynamic.js +0 -27
  152. package/dist/cli/commands/dynamic.js.map +0 -1
  153. package/dist/cli/commands/env.d.ts +0 -12
  154. package/dist/cli/commands/env.d.ts.map +0 -1
  155. package/dist/cli/commands/env.js +0 -44
  156. package/dist/cli/commands/env.js.map +0 -1
  157. package/dist/cli/commands/exists.d.ts +0 -22
  158. package/dist/cli/commands/exists.d.ts.map +0 -1
  159. package/dist/cli/commands/exists.js +0 -51
  160. package/dist/cli/commands/exists.js.map +0 -1
  161. package/dist/cli/commands/export-tasks.d.ts +0 -10
  162. package/dist/cli/commands/export-tasks.d.ts.map +0 -1
  163. package/dist/cli/commands/export-tasks.js +0 -47
  164. package/dist/cli/commands/export-tasks.js.map +0 -1
  165. package/dist/cli/commands/export.d.ts +0 -9
  166. package/dist/cli/commands/export.d.ts.map +0 -1
  167. package/dist/cli/commands/export.js +0 -46
  168. package/dist/cli/commands/export.js.map +0 -1
  169. package/dist/cli/commands/find.d.ts +0 -14
  170. package/dist/cli/commands/find.d.ts.map +0 -1
  171. package/dist/cli/commands/find.js +0 -134
  172. package/dist/cli/commands/find.js.map +0 -1
  173. package/dist/cli/commands/generate-changelog.d.ts +0 -14
  174. package/dist/cli/commands/generate-changelog.d.ts.map +0 -1
  175. package/dist/cli/commands/generate-changelog.js +0 -252
  176. package/dist/cli/commands/generate-changelog.js.map +0 -1
  177. package/dist/cli/commands/grade.d.ts +0 -13
  178. package/dist/cli/commands/grade.d.ts.map +0 -1
  179. package/dist/cli/commands/grade.js +0 -26
  180. package/dist/cli/commands/grade.js.map +0 -1
  181. package/dist/cli/commands/history.d.ts +0 -9
  182. package/dist/cli/commands/history.d.ts.map +0 -1
  183. package/dist/cli/commands/history.js +0 -30
  184. package/dist/cli/commands/history.js.map +0 -1
  185. package/dist/cli/commands/implementation.d.ts +0 -13
  186. package/dist/cli/commands/implementation.d.ts.map +0 -1
  187. package/dist/cli/commands/implementation.js +0 -41
  188. package/dist/cli/commands/implementation.js.map +0 -1
  189. package/dist/cli/commands/import-tasks.d.ts +0 -10
  190. package/dist/cli/commands/import-tasks.d.ts.map +0 -1
  191. package/dist/cli/commands/import-tasks.js +0 -38
  192. package/dist/cli/commands/import-tasks.js.map +0 -1
  193. package/dist/cli/commands/import.d.ts +0 -9
  194. package/dist/cli/commands/import.d.ts.map +0 -1
  195. package/dist/cli/commands/import.js +0 -28
  196. package/dist/cli/commands/import.js.map +0 -1
  197. package/dist/cli/commands/init.d.ts +0 -34
  198. package/dist/cli/commands/init.d.ts.map +0 -1
  199. package/dist/cli/commands/init.js +0 -96
  200. package/dist/cli/commands/init.js.map +0 -1
  201. package/dist/cli/commands/inject.d.ts +0 -8
  202. package/dist/cli/commands/inject.d.ts.map +0 -1
  203. package/dist/cli/commands/inject.js +0 -28
  204. package/dist/cli/commands/inject.js.map +0 -1
  205. package/dist/cli/commands/issue.d.ts +0 -17
  206. package/dist/cli/commands/issue.d.ts.map +0 -1
  207. package/dist/cli/commands/issue.js +0 -107
  208. package/dist/cli/commands/issue.js.map +0 -1
  209. package/dist/cli/commands/labels.d.ts +0 -13
  210. package/dist/cli/commands/labels.d.ts.map +0 -1
  211. package/dist/cli/commands/labels.js +0 -44
  212. package/dist/cli/commands/labels.js.map +0 -1
  213. package/dist/cli/commands/lifecycle.d.ts +0 -8
  214. package/dist/cli/commands/lifecycle.d.ts.map +0 -1
  215. package/dist/cli/commands/lifecycle.js +0 -84
  216. package/dist/cli/commands/lifecycle.js.map +0 -1
  217. package/dist/cli/commands/list.d.ts +0 -14
  218. package/dist/cli/commands/list.d.ts.map +0 -1
  219. package/dist/cli/commands/list.js +0 -143
  220. package/dist/cli/commands/list.js.map +0 -1
  221. package/dist/cli/commands/log.d.ts +0 -12
  222. package/dist/cli/commands/log.d.ts.map +0 -1
  223. package/dist/cli/commands/log.js +0 -30
  224. package/dist/cli/commands/log.js.map +0 -1
  225. package/dist/cli/commands/map.d.ts +0 -10
  226. package/dist/cli/commands/map.d.ts.map +0 -1
  227. package/dist/cli/commands/map.js +0 -23
  228. package/dist/cli/commands/map.js.map +0 -1
  229. package/dist/cli/commands/memory-brain.d.ts +0 -14
  230. package/dist/cli/commands/memory-brain.d.ts.map +0 -1
  231. package/dist/cli/commands/memory-brain.js +0 -157
  232. package/dist/cli/commands/memory-brain.js.map +0 -1
  233. package/dist/cli/commands/migrate-claude-mem.d.ts +0 -18
  234. package/dist/cli/commands/migrate-claude-mem.d.ts.map +0 -1
  235. package/dist/cli/commands/migrate-claude-mem.js +0 -60
  236. package/dist/cli/commands/migrate-claude-mem.js.map +0 -1
  237. package/dist/cli/commands/next.d.ts +0 -9
  238. package/dist/cli/commands/next.d.ts.map +0 -1
  239. package/dist/cli/commands/next.js +0 -20
  240. package/dist/cli/commands/next.js.map +0 -1
  241. package/dist/cli/commands/nexus.d.ts +0 -16
  242. package/dist/cli/commands/nexus.d.ts.map +0 -1
  243. package/dist/cli/commands/nexus.js +0 -155
  244. package/dist/cli/commands/nexus.js.map +0 -1
  245. package/dist/cli/commands/observe.d.ts +0 -12
  246. package/dist/cli/commands/observe.d.ts.map +0 -1
  247. package/dist/cli/commands/observe.js +0 -42
  248. package/dist/cli/commands/observe.js.map +0 -1
  249. package/dist/cli/commands/ops.d.ts +0 -10
  250. package/dist/cli/commands/ops.d.ts.map +0 -1
  251. package/dist/cli/commands/ops.js +0 -19
  252. package/dist/cli/commands/ops.js.map +0 -1
  253. package/dist/cli/commands/orchestrate.d.ts +0 -8
  254. package/dist/cli/commands/orchestrate.d.ts.map +0 -1
  255. package/dist/cli/commands/orchestrate.js +0 -58
  256. package/dist/cli/commands/orchestrate.js.map +0 -1
  257. package/dist/cli/commands/otel.d.ts +0 -12
  258. package/dist/cli/commands/otel.d.ts.map +0 -1
  259. package/dist/cli/commands/otel.js +0 -128
  260. package/dist/cli/commands/otel.js.map +0 -1
  261. package/dist/cli/commands/phase.d.ts +0 -12
  262. package/dist/cli/commands/phase.d.ts.map +0 -1
  263. package/dist/cli/commands/phase.js +0 -91
  264. package/dist/cli/commands/phase.js.map +0 -1
  265. package/dist/cli/commands/phases.d.ts +0 -12
  266. package/dist/cli/commands/phases.d.ts.map +0 -1
  267. package/dist/cli/commands/phases.js +0 -37
  268. package/dist/cli/commands/phases.js.map +0 -1
  269. package/dist/cli/commands/plan.d.ts +0 -8
  270. package/dist/cli/commands/plan.d.ts.map +0 -1
  271. package/dist/cli/commands/plan.js +0 -15
  272. package/dist/cli/commands/plan.js.map +0 -1
  273. package/dist/cli/commands/promote.d.ts +0 -7
  274. package/dist/cli/commands/promote.d.ts.map +0 -1
  275. package/dist/cli/commands/promote.js +0 -15
  276. package/dist/cli/commands/promote.js.map +0 -1
  277. package/dist/cli/commands/reason.d.ts +0 -35
  278. package/dist/cli/commands/reason.d.ts.map +0 -1
  279. package/dist/cli/commands/reason.js +0 -104
  280. package/dist/cli/commands/reason.js.map +0 -1
  281. package/dist/cli/commands/refresh-memory.d.ts +0 -9
  282. package/dist/cli/commands/refresh-memory.d.ts.map +0 -1
  283. package/dist/cli/commands/refresh-memory.js +0 -24
  284. package/dist/cli/commands/refresh-memory.js.map +0 -1
  285. package/dist/cli/commands/relates.d.ts +0 -12
  286. package/dist/cli/commands/relates.d.ts.map +0 -1
  287. package/dist/cli/commands/relates.js +0 -53
  288. package/dist/cli/commands/relates.js.map +0 -1
  289. package/dist/cli/commands/release.d.ts +0 -8
  290. package/dist/cli/commands/release.d.ts.map +0 -1
  291. package/dist/cli/commands/release.js +0 -72
  292. package/dist/cli/commands/release.js.map +0 -1
  293. package/dist/cli/commands/remote.d.ts +0 -12
  294. package/dist/cli/commands/remote.d.ts.map +0 -1
  295. package/dist/cli/commands/remote.js +0 -207
  296. package/dist/cli/commands/remote.js.map +0 -1
  297. package/dist/cli/commands/reorder.d.ts +0 -7
  298. package/dist/cli/commands/reorder.d.ts.map +0 -1
  299. package/dist/cli/commands/reorder.js +0 -20
  300. package/dist/cli/commands/reorder.js.map +0 -1
  301. package/dist/cli/commands/reparent.d.ts +0 -10
  302. package/dist/cli/commands/reparent.d.ts.map +0 -1
  303. package/dist/cli/commands/reparent.js +0 -19
  304. package/dist/cli/commands/reparent.js.map +0 -1
  305. package/dist/cli/commands/research.d.ts +0 -8
  306. package/dist/cli/commands/research.d.ts.map +0 -1
  307. package/dist/cli/commands/research.js +0 -129
  308. package/dist/cli/commands/research.js.map +0 -1
  309. package/dist/cli/commands/restore.d.ts +0 -12
  310. package/dist/cli/commands/restore.d.ts.map +0 -1
  311. package/dist/cli/commands/restore.js +0 -228
  312. package/dist/cli/commands/restore.js.map +0 -1
  313. package/dist/cli/commands/roadmap.d.ts +0 -8
  314. package/dist/cli/commands/roadmap.d.ts.map +0 -1
  315. package/dist/cli/commands/roadmap.js +0 -21
  316. package/dist/cli/commands/roadmap.js.map +0 -1
  317. package/dist/cli/commands/safestop.d.ts +0 -14
  318. package/dist/cli/commands/safestop.d.ts.map +0 -1
  319. package/dist/cli/commands/safestop.js +0 -32
  320. package/dist/cli/commands/safestop.js.map +0 -1
  321. package/dist/cli/commands/schema.d.ts +0 -27
  322. package/dist/cli/commands/schema.d.ts.map +0 -1
  323. package/dist/cli/commands/schema.js +0 -160
  324. package/dist/cli/commands/schema.js.map +0 -1
  325. package/dist/cli/commands/self-update.d.ts +0 -15
  326. package/dist/cli/commands/self-update.d.ts.map +0 -1
  327. package/dist/cli/commands/self-update.js +0 -329
  328. package/dist/cli/commands/self-update.js.map +0 -1
  329. package/dist/cli/commands/sequence.d.ts +0 -8
  330. package/dist/cli/commands/sequence.d.ts.map +0 -1
  331. package/dist/cli/commands/sequence.js +0 -30
  332. package/dist/cli/commands/sequence.js.map +0 -1
  333. package/dist/cli/commands/session.d.ts +0 -12
  334. package/dist/cli/commands/session.d.ts.map +0 -1
  335. package/dist/cli/commands/session.js +0 -175
  336. package/dist/cli/commands/session.js.map +0 -1
  337. package/dist/cli/commands/show.d.ts +0 -13
  338. package/dist/cli/commands/show.d.ts.map +0 -1
  339. package/dist/cli/commands/show.js +0 -40
  340. package/dist/cli/commands/show.js.map +0 -1
  341. package/dist/cli/commands/skills.d.ts +0 -13
  342. package/dist/cli/commands/skills.d.ts.map +0 -1
  343. package/dist/cli/commands/skills.js +0 -131
  344. package/dist/cli/commands/skills.js.map +0 -1
  345. package/dist/cli/commands/snapshot.d.ts +0 -9
  346. package/dist/cli/commands/snapshot.d.ts.map +0 -1
  347. package/dist/cli/commands/snapshot.js +0 -50
  348. package/dist/cli/commands/snapshot.js.map +0 -1
  349. package/dist/cli/commands/specification.d.ts +0 -13
  350. package/dist/cli/commands/specification.d.ts.map +0 -1
  351. package/dist/cli/commands/specification.js +0 -45
  352. package/dist/cli/commands/specification.js.map +0 -1
  353. package/dist/cli/commands/start.d.ts +0 -13
  354. package/dist/cli/commands/start.d.ts.map +0 -1
  355. package/dist/cli/commands/start.js +0 -20
  356. package/dist/cli/commands/start.js.map +0 -1
  357. package/dist/cli/commands/stats.d.ts +0 -12
  358. package/dist/cli/commands/stats.d.ts.map +0 -1
  359. package/dist/cli/commands/stats.js +0 -35
  360. package/dist/cli/commands/stats.js.map +0 -1
  361. package/dist/cli/commands/sticky.d.ts +0 -16
  362. package/dist/cli/commands/sticky.d.ts.map +0 -1
  363. package/dist/cli/commands/sticky.js +0 -211
  364. package/dist/cli/commands/sticky.js.map +0 -1
  365. package/dist/cli/commands/stop.d.ts +0 -13
  366. package/dist/cli/commands/stop.d.ts.map +0 -1
  367. package/dist/cli/commands/stop.js +0 -20
  368. package/dist/cli/commands/stop.js.map +0 -1
  369. package/dist/cli/commands/testing.d.ts +0 -13
  370. package/dist/cli/commands/testing.d.ts.map +0 -1
  371. package/dist/cli/commands/testing.js +0 -64
  372. package/dist/cli/commands/testing.js.map +0 -1
  373. package/dist/cli/commands/token.d.ts +0 -10
  374. package/dist/cli/commands/token.d.ts.map +0 -1
  375. package/dist/cli/commands/token.js +0 -135
  376. package/dist/cli/commands/token.js.map +0 -1
  377. package/dist/cli/commands/update.d.ts +0 -12
  378. package/dist/cli/commands/update.d.ts.map +0 -1
  379. package/dist/cli/commands/update.js +0 -83
  380. package/dist/cli/commands/update.js.map +0 -1
  381. package/dist/cli/commands/upgrade.d.ts +0 -18
  382. package/dist/cli/commands/upgrade.d.ts.map +0 -1
  383. package/dist/cli/commands/upgrade.js +0 -103
  384. package/dist/cli/commands/upgrade.js.map +0 -1
  385. package/dist/cli/commands/validate.d.ts +0 -12
  386. package/dist/cli/commands/validate.d.ts.map +0 -1
  387. package/dist/cli/commands/validate.js +0 -23
  388. package/dist/cli/commands/validate.js.map +0 -1
  389. package/dist/cli/commands/verify.d.ts +0 -8
  390. package/dist/cli/commands/verify.d.ts.map +0 -1
  391. package/dist/cli/commands/verify.js +0 -28
  392. package/dist/cli/commands/verify.js.map +0 -1
  393. package/dist/cli/commands/web.d.ts +0 -13
  394. package/dist/cli/commands/web.d.ts.map +0 -1
  395. package/dist/cli/commands/web.js +0 -277
  396. package/dist/cli/commands/web.js.map +0 -1
  397. package/dist/cli/field-context.d.ts +0 -32
  398. package/dist/cli/field-context.d.ts.map +0 -1
  399. package/dist/cli/field-context.js +0 -47
  400. package/dist/cli/field-context.js.map +0 -1
  401. package/dist/cli/format-context.d.ts +0 -32
  402. package/dist/cli/format-context.d.ts.map +0 -1
  403. package/dist/cli/format-context.js +0 -50
  404. package/dist/cli/format-context.js.map +0 -1
  405. package/dist/cli/help-generator.d.ts +0 -74
  406. package/dist/cli/help-generator.d.ts.map +0 -1
  407. package/dist/cli/help-generator.js +0 -229
  408. package/dist/cli/help-generator.js.map +0 -1
  409. package/dist/cli/index.d.ts +0 -9
  410. package/dist/cli/index.d.ts.map +0 -1
  411. package/dist/cli/logger-bootstrap.d.ts +0 -6
  412. package/dist/cli/logger-bootstrap.d.ts.map +0 -1
  413. package/dist/cli/logger-bootstrap.js +0 -10
  414. package/dist/cli/logger-bootstrap.js.map +0 -1
  415. package/dist/cli/middleware/output-format.d.ts +0 -30
  416. package/dist/cli/middleware/output-format.d.ts.map +0 -1
  417. package/dist/cli/middleware/output-format.js +0 -35
  418. package/dist/cli/middleware/output-format.js.map +0 -1
  419. package/dist/cli/progress.d.ts +0 -84
  420. package/dist/cli/progress.d.ts.map +0 -1
  421. package/dist/cli/progress.js +0 -169
  422. package/dist/cli/progress.js.map +0 -1
  423. package/dist/cli/renderers/colors.d.ts +0 -32
  424. package/dist/cli/renderers/colors.d.ts.map +0 -1
  425. package/dist/cli/renderers/colors.js +0 -141
  426. package/dist/cli/renderers/colors.js.map +0 -1
  427. package/dist/cli/renderers/error.d.ts +0 -13
  428. package/dist/cli/renderers/error.d.ts.map +0 -1
  429. package/dist/cli/renderers/error.js +0 -42
  430. package/dist/cli/renderers/error.js.map +0 -1
  431. package/dist/cli/renderers/index.d.ts +0 -87
  432. package/dist/cli/renderers/index.d.ts.map +0 -1
  433. package/dist/cli/renderers/index.js +0 -262
  434. package/dist/cli/renderers/index.js.map +0 -1
  435. package/dist/cli/renderers/lafs-validator.d.ts +0 -91
  436. package/dist/cli/renderers/lafs-validator.d.ts.map +0 -1
  437. package/dist/cli/renderers/lafs-validator.js +0 -176
  438. package/dist/cli/renderers/lafs-validator.js.map +0 -1
  439. package/dist/cli/renderers/normalizer.d.ts +0 -21
  440. package/dist/cli/renderers/normalizer.d.ts.map +0 -1
  441. package/dist/cli/renderers/normalizer.js +0 -106
  442. package/dist/cli/renderers/normalizer.js.map +0 -1
  443. package/dist/cli/renderers/system.d.ts +0 -25
  444. package/dist/cli/renderers/system.d.ts.map +0 -1
  445. package/dist/cli/renderers/system.js +0 -416
  446. package/dist/cli/renderers/system.js.map +0 -1
  447. package/dist/cli/renderers/tasks.d.ts +0 -28
  448. package/dist/cli/renderers/tasks.d.ts.map +0 -1
  449. package/dist/cli/renderers/tasks.js +0 -306
  450. package/dist/cli/renderers/tasks.js.map +0 -1
  451. package/dist/dispatch/adapters/cli.d.ts +0 -67
  452. package/dist/dispatch/adapters/cli.d.ts.map +0 -1
  453. package/dist/dispatch/adapters/cli.js +0 -276
  454. package/dist/dispatch/adapters/cli.js.map +0 -1
  455. package/dist/dispatch/context/session-context.d.ts +0 -54
  456. package/dist/dispatch/context/session-context.d.ts.map +0 -1
  457. package/dist/dispatch/context/session-context.js +0 -61
  458. package/dist/dispatch/context/session-context.js.map +0 -1
  459. package/dist/dispatch/dispatcher.d.ts +0 -23
  460. package/dist/dispatch/dispatcher.d.ts.map +0 -1
  461. package/dist/dispatch/dispatcher.js +0 -84
  462. package/dist/dispatch/dispatcher.js.map +0 -1
  463. package/dist/dispatch/domains/_base.d.ts +0 -59
  464. package/dist/dispatch/domains/_base.d.ts.map +0 -1
  465. package/dist/dispatch/domains/_base.js +0 -77
  466. package/dist/dispatch/domains/_base.js.map +0 -1
  467. package/dist/dispatch/domains/_meta.d.ts +0 -23
  468. package/dist/dispatch/domains/_meta.d.ts.map +0 -1
  469. package/dist/dispatch/domains/_meta.js +0 -25
  470. package/dist/dispatch/domains/_meta.js.map +0 -1
  471. package/dist/dispatch/domains/_routing.d.ts +0 -8
  472. package/dist/dispatch/domains/_routing.d.ts.map +0 -1
  473. package/dist/dispatch/domains/_routing.js +0 -20
  474. package/dist/dispatch/domains/_routing.js.map +0 -1
  475. package/dist/dispatch/domains/admin.d.ts +0 -25
  476. package/dist/dispatch/domains/admin.d.ts.map +0 -1
  477. package/dist/dispatch/domains/admin.js +0 -719
  478. package/dist/dispatch/domains/admin.js.map +0 -1
  479. package/dist/dispatch/domains/check.d.ts +0 -22
  480. package/dist/dispatch/domains/check.d.ts.map +0 -1
  481. package/dist/dispatch/domains/check.js +0 -360
  482. package/dist/dispatch/domains/check.js.map +0 -1
  483. package/dist/dispatch/domains/conduit.d.ts +0 -38
  484. package/dist/dispatch/domains/conduit.d.ts.map +0 -1
  485. package/dist/dispatch/domains/conduit.js +0 -247
  486. package/dist/dispatch/domains/conduit.js.map +0 -1
  487. package/dist/dispatch/domains/index.d.ts +0 -27
  488. package/dist/dispatch/domains/index.d.ts.map +0 -1
  489. package/dist/dispatch/domains/index.js +0 -40
  490. package/dist/dispatch/domains/index.js.map +0 -1
  491. package/dist/dispatch/domains/memory.d.ts +0 -22
  492. package/dist/dispatch/domains/memory.d.ts.map +0 -1
  493. package/dist/dispatch/domains/memory.js +0 -303
  494. package/dist/dispatch/domains/memory.js.map +0 -1
  495. package/dist/dispatch/domains/nexus.d.ts +0 -22
  496. package/dist/dispatch/domains/nexus.d.ts.map +0 -1
  497. package/dist/dispatch/domains/nexus.js +0 -286
  498. package/dist/dispatch/domains/nexus.js.map +0 -1
  499. package/dist/dispatch/domains/orchestrate.d.ts +0 -19
  500. package/dist/dispatch/domains/orchestrate.d.ts.map +0 -1
  501. package/dist/dispatch/domains/orchestrate.js +0 -259
  502. package/dist/dispatch/domains/orchestrate.js.map +0 -1
  503. package/dist/dispatch/domains/pipeline.d.ts +0 -35
  504. package/dist/dispatch/domains/pipeline.d.ts.map +0 -1
  505. package/dist/dispatch/domains/pipeline.js +0 -593
  506. package/dist/dispatch/domains/pipeline.js.map +0 -1
  507. package/dist/dispatch/domains/session.d.ts +0 -22
  508. package/dist/dispatch/domains/session.d.ts.map +0 -1
  509. package/dist/dispatch/domains/session.js +0 -257
  510. package/dist/dispatch/domains/session.js.map +0 -1
  511. package/dist/dispatch/domains/sticky.d.ts +0 -20
  512. package/dist/dispatch/domains/sticky.d.ts.map +0 -1
  513. package/dist/dispatch/domains/sticky.js +0 -164
  514. package/dist/dispatch/domains/sticky.js.map +0 -1
  515. package/dist/dispatch/domains/tasks.d.ts +0 -25
  516. package/dist/dispatch/domains/tasks.d.ts.map +0 -1
  517. package/dist/dispatch/domains/tasks.js +0 -361
  518. package/dist/dispatch/domains/tasks.js.map +0 -1
  519. package/dist/dispatch/domains/tools.d.ts +0 -37
  520. package/dist/dispatch/domains/tools.d.ts.map +0 -1
  521. package/dist/dispatch/domains/tools.js +0 -481
  522. package/dist/dispatch/domains/tools.js.map +0 -1
  523. package/dist/dispatch/engines/_error.d.ts +0 -119
  524. package/dist/dispatch/engines/_error.d.ts.map +0 -1
  525. package/dist/dispatch/engines/_error.js +0 -288
  526. package/dist/dispatch/engines/_error.js.map +0 -1
  527. package/dist/dispatch/engines/code-engine.d.ts +0 -18
  528. package/dist/dispatch/engines/code-engine.d.ts.map +0 -1
  529. package/dist/dispatch/engines/code-engine.js +0 -71
  530. package/dist/dispatch/engines/code-engine.js.map +0 -1
  531. package/dist/dispatch/engines/codebase-map-engine.d.ts +0 -31
  532. package/dist/dispatch/engines/codebase-map-engine.d.ts.map +0 -1
  533. package/dist/dispatch/engines/codebase-map-engine.js +0 -43
  534. package/dist/dispatch/engines/codebase-map-engine.js.map +0 -1
  535. package/dist/dispatch/engines/config-engine.d.ts +0 -32
  536. package/dist/dispatch/engines/config-engine.d.ts.map +0 -1
  537. package/dist/dispatch/engines/config-engine.js +0 -70
  538. package/dist/dispatch/engines/config-engine.js.map +0 -1
  539. package/dist/dispatch/engines/hooks-engine.d.ts +0 -96
  540. package/dist/dispatch/engines/hooks-engine.d.ts.map +0 -1
  541. package/dist/dispatch/engines/hooks-engine.js +0 -144
  542. package/dist/dispatch/engines/hooks-engine.js.map +0 -1
  543. package/dist/dispatch/engines/init-engine.d.ts +0 -56
  544. package/dist/dispatch/engines/init-engine.d.ts.map +0 -1
  545. package/dist/dispatch/engines/init-engine.js +0 -78
  546. package/dist/dispatch/engines/init-engine.js.map +0 -1
  547. package/dist/dispatch/engines/lifecycle-engine.d.ts +0 -66
  548. package/dist/dispatch/engines/lifecycle-engine.d.ts.map +0 -1
  549. package/dist/dispatch/engines/lifecycle-engine.js +0 -224
  550. package/dist/dispatch/engines/lifecycle-engine.js.map +0 -1
  551. package/dist/dispatch/engines/memory-engine.d.ts +0 -10
  552. package/dist/dispatch/engines/memory-engine.d.ts.map +0 -1
  553. package/dist/dispatch/engines/memory-engine.js +0 -10
  554. package/dist/dispatch/engines/memory-engine.js.map +0 -1
  555. package/dist/dispatch/engines/nexus-engine.d.ts +0 -167
  556. package/dist/dispatch/engines/nexus-engine.d.ts.map +0 -1
  557. package/dist/dispatch/engines/nexus-engine.js +0 -356
  558. package/dist/dispatch/engines/nexus-engine.js.map +0 -1
  559. package/dist/dispatch/engines/orchestrate-engine.d.ts +0 -133
  560. package/dist/dispatch/engines/orchestrate-engine.d.ts.map +0 -1
  561. package/dist/dispatch/engines/orchestrate-engine.js +0 -769
  562. package/dist/dispatch/engines/orchestrate-engine.js.map +0 -1
  563. package/dist/dispatch/engines/pipeline-engine.d.ts +0 -51
  564. package/dist/dispatch/engines/pipeline-engine.d.ts.map +0 -1
  565. package/dist/dispatch/engines/pipeline-engine.js +0 -191
  566. package/dist/dispatch/engines/pipeline-engine.js.map +0 -1
  567. package/dist/dispatch/engines/release-engine.d.ts +0 -94
  568. package/dist/dispatch/engines/release-engine.d.ts.map +0 -1
  569. package/dist/dispatch/engines/release-engine.js +0 -763
  570. package/dist/dispatch/engines/release-engine.js.map +0 -1
  571. package/dist/dispatch/engines/session-engine.d.ts +0 -383
  572. package/dist/dispatch/engines/session-engine.d.ts.map +0 -1
  573. package/dist/dispatch/engines/session-engine.js +0 -910
  574. package/dist/dispatch/engines/session-engine.js.map +0 -1
  575. package/dist/dispatch/engines/sticky-engine.d.ts +0 -100
  576. package/dist/dispatch/engines/sticky-engine.d.ts.map +0 -1
  577. package/dist/dispatch/engines/sticky-engine.js +0 -181
  578. package/dist/dispatch/engines/sticky-engine.js.map +0 -1
  579. package/dist/dispatch/engines/system-engine.d.ts +0 -539
  580. package/dist/dispatch/engines/system-engine.d.ts.map +0 -1
  581. package/dist/dispatch/engines/system-engine.js +0 -1258
  582. package/dist/dispatch/engines/system-engine.js.map +0 -1
  583. package/dist/dispatch/engines/task-engine.d.ts +0 -1055
  584. package/dist/dispatch/engines/task-engine.d.ts.map +0 -1
  585. package/dist/dispatch/engines/task-engine.js +0 -1193
  586. package/dist/dispatch/engines/task-engine.js.map +0 -1
  587. package/dist/dispatch/engines/template-parser.d.ts +0 -85
  588. package/dist/dispatch/engines/template-parser.d.ts.map +0 -1
  589. package/dist/dispatch/engines/template-parser.js +0 -108
  590. package/dist/dispatch/engines/template-parser.js.map +0 -1
  591. package/dist/dispatch/engines/tools-engine.d.ts +0 -270
  592. package/dist/dispatch/engines/tools-engine.d.ts.map +0 -1
  593. package/dist/dispatch/engines/tools-engine.js +0 -636
  594. package/dist/dispatch/engines/tools-engine.js.map +0 -1
  595. package/dist/dispatch/engines/validate-engine.d.ts +0 -218
  596. package/dist/dispatch/engines/validate-engine.d.ts.map +0 -1
  597. package/dist/dispatch/engines/validate-engine.js +0 -737
  598. package/dist/dispatch/engines/validate-engine.js.map +0 -1
  599. package/dist/dispatch/index.d.ts +0 -20
  600. package/dist/dispatch/index.d.ts.map +0 -1
  601. package/dist/dispatch/index.js +0 -19
  602. package/dist/dispatch/index.js.map +0 -1
  603. package/dist/dispatch/lib/background-jobs.d.ts +0 -86
  604. package/dist/dispatch/lib/background-jobs.d.ts.map +0 -1
  605. package/dist/dispatch/lib/background-jobs.js +0 -183
  606. package/dist/dispatch/lib/background-jobs.js.map +0 -1
  607. package/dist/dispatch/lib/budget.d.ts +0 -36
  608. package/dist/dispatch/lib/budget.d.ts.map +0 -1
  609. package/dist/dispatch/lib/budget.js +0 -109
  610. package/dist/dispatch/lib/budget.js.map +0 -1
  611. package/dist/dispatch/lib/capability-matrix.d.ts +0 -11
  612. package/dist/dispatch/lib/capability-matrix.d.ts.map +0 -1
  613. package/dist/dispatch/lib/capability-matrix.js +0 -10
  614. package/dist/dispatch/lib/capability-matrix.js.map +0 -1
  615. package/dist/dispatch/lib/config-loader.d.ts +0 -42
  616. package/dist/dispatch/lib/config-loader.d.ts.map +0 -1
  617. package/dist/dispatch/lib/config-loader.js +0 -217
  618. package/dist/dispatch/lib/config-loader.js.map +0 -1
  619. package/dist/dispatch/lib/config.d.ts +0 -11
  620. package/dist/dispatch/lib/config.d.ts.map +0 -1
  621. package/dist/dispatch/lib/config.js +0 -10
  622. package/dist/dispatch/lib/config.js.map +0 -1
  623. package/dist/dispatch/lib/defaults.d.ts +0 -115
  624. package/dist/dispatch/lib/defaults.d.ts.map +0 -1
  625. package/dist/dispatch/lib/defaults.js +0 -61
  626. package/dist/dispatch/lib/defaults.js.map +0 -1
  627. package/dist/dispatch/lib/engine.d.ts +0 -26
  628. package/dist/dispatch/lib/engine.d.ts.map +0 -1
  629. package/dist/dispatch/lib/engine.js +0 -46
  630. package/dist/dispatch/lib/engine.js.map +0 -1
  631. package/dist/dispatch/lib/exit-codes.d.ts +0 -35
  632. package/dist/dispatch/lib/exit-codes.d.ts.map +0 -1
  633. package/dist/dispatch/lib/exit-codes.js +0 -60
  634. package/dist/dispatch/lib/exit-codes.js.map +0 -1
  635. package/dist/dispatch/lib/gateway-meta.d.ts +0 -37
  636. package/dist/dispatch/lib/gateway-meta.d.ts.map +0 -1
  637. package/dist/dispatch/lib/gateway-meta.js +0 -50
  638. package/dist/dispatch/lib/gateway-meta.js.map +0 -1
  639. package/dist/dispatch/lib/job-manager-accessor.d.ts +0 -9
  640. package/dist/dispatch/lib/job-manager-accessor.d.ts.map +0 -1
  641. package/dist/dispatch/lib/job-manager-accessor.js +0 -13
  642. package/dist/dispatch/lib/job-manager-accessor.js.map +0 -1
  643. package/dist/dispatch/lib/meta.d.ts +0 -26
  644. package/dist/dispatch/lib/meta.d.ts.map +0 -1
  645. package/dist/dispatch/lib/meta.js +0 -37
  646. package/dist/dispatch/lib/meta.js.map +0 -1
  647. package/dist/dispatch/lib/param-utils.d.ts +0 -11
  648. package/dist/dispatch/lib/param-utils.d.ts.map +0 -1
  649. package/dist/dispatch/lib/param-utils.js +0 -10
  650. package/dist/dispatch/lib/param-utils.js.map +0 -1
  651. package/dist/dispatch/lib/projections.d.ts +0 -56
  652. package/dist/dispatch/lib/projections.d.ts.map +0 -1
  653. package/dist/dispatch/lib/projections.js +0 -65
  654. package/dist/dispatch/lib/projections.js.map +0 -1
  655. package/dist/dispatch/lib/proto-envelope.d.ts +0 -56
  656. package/dist/dispatch/lib/proto-envelope.d.ts.map +0 -1
  657. package/dist/dispatch/lib/proto-envelope.js +0 -17
  658. package/dist/dispatch/lib/proto-envelope.js.map +0 -1
  659. package/dist/dispatch/lib/schema-utils.d.ts +0 -39
  660. package/dist/dispatch/lib/schema-utils.d.ts.map +0 -1
  661. package/dist/dispatch/lib/schema-utils.js +0 -88
  662. package/dist/dispatch/lib/schema-utils.js.map +0 -1
  663. package/dist/dispatch/lib/security.d.ts +0 -11
  664. package/dist/dispatch/lib/security.d.ts.map +0 -1
  665. package/dist/dispatch/lib/security.js +0 -10
  666. package/dist/dispatch/lib/security.js.map +0 -1
  667. package/dist/dispatch/middleware/audit.d.ts +0 -23
  668. package/dist/dispatch/middleware/audit.d.ts.map +0 -1
  669. package/dist/dispatch/middleware/audit.js +0 -169
  670. package/dist/dispatch/middleware/audit.js.map +0 -1
  671. package/dist/dispatch/middleware/field-filter.d.ts +0 -25
  672. package/dist/dispatch/middleware/field-filter.d.ts.map +0 -1
  673. package/dist/dispatch/middleware/field-filter.js +0 -70
  674. package/dist/dispatch/middleware/field-filter.js.map +0 -1
  675. package/dist/dispatch/middleware/pipeline.d.ts +0 -33
  676. package/dist/dispatch/middleware/pipeline.d.ts.map +0 -1
  677. package/dist/dispatch/middleware/pipeline.js +0 -60
  678. package/dist/dispatch/middleware/pipeline.js.map +0 -1
  679. package/dist/dispatch/middleware/projection.d.ts +0 -35
  680. package/dist/dispatch/middleware/projection.d.ts.map +0 -1
  681. package/dist/dispatch/middleware/projection.js +0 -146
  682. package/dist/dispatch/middleware/projection.js.map +0 -1
  683. package/dist/dispatch/middleware/protocol-enforcement.d.ts +0 -30
  684. package/dist/dispatch/middleware/protocol-enforcement.d.ts.map +0 -1
  685. package/dist/dispatch/middleware/protocol-enforcement.js +0 -56
  686. package/dist/dispatch/middleware/protocol-enforcement.js.map +0 -1
  687. package/dist/dispatch/middleware/rate-limiter.d.ts +0 -72
  688. package/dist/dispatch/middleware/rate-limiter.d.ts.map +0 -1
  689. package/dist/dispatch/middleware/rate-limiter.js +0 -127
  690. package/dist/dispatch/middleware/rate-limiter.js.map +0 -1
  691. package/dist/dispatch/middleware/sanitizer.d.ts +0 -24
  692. package/dist/dispatch/middleware/sanitizer.d.ts.map +0 -1
  693. package/dist/dispatch/middleware/sanitizer.js +0 -56
  694. package/dist/dispatch/middleware/sanitizer.js.map +0 -1
  695. package/dist/dispatch/middleware/session-resolver.d.ts +0 -26
  696. package/dist/dispatch/middleware/session-resolver.d.ts.map +0 -1
  697. package/dist/dispatch/middleware/session-resolver.js +0 -65
  698. package/dist/dispatch/middleware/session-resolver.js.map +0 -1
  699. package/dist/dispatch/middleware/verification-gates.d.ts +0 -22
  700. package/dist/dispatch/middleware/verification-gates.d.ts.map +0 -1
  701. package/dist/dispatch/middleware/verification-gates.js +0 -59
  702. package/dist/dispatch/middleware/verification-gates.js.map +0 -1
  703. package/dist/dispatch/registry.d.ts +0 -91
  704. package/dist/dispatch/registry.d.ts.map +0 -1
  705. package/dist/dispatch/registry.js +0 -3133
  706. package/dist/dispatch/registry.js.map +0 -1
  707. package/dist/dispatch/types.d.ts +0 -206
  708. package/dist/dispatch/types.d.ts.map +0 -1
  709. package/dist/dispatch/types.js +0 -26
  710. package/dist/dispatch/types.js.map +0 -1
@@ -1,1169 +0,0 @@
1
- /**
2
- * CLI agent command group — agent credential management (unified registry).
3
- *
4
- * Provides:
5
- * cleo agent register — register a new agent credential
6
- * cleo agent list — list all registered agent credentials
7
- * cleo agent get <id> — get a specific agent credential
8
- * cleo agent remove <id> — remove an agent credential
9
- * cleo agent rotate-key <id> — rotate an agent's API key
10
- * cleo agent poll — one-shot message check
11
- * cleo agent send — send a message to an agent or conversation
12
- * cleo agent start — start the daemon poller for an agent
13
- *
14
- * **Daemon vs. Pi session — important distinction.** The daemon spawned
15
- * by `cleo agent start` ONLY polls SignalDock for inbound messages and
16
- * keeps the cloud status indicator green. It does NOT execute CANT
17
- * workflow profiles inside the daemon process. CANT workflow execution
18
- * (sessions, parallel arms, conditionals, approval gates, discretion
19
- * evaluation, etc.) lives entirely inside the
20
- * `cant-bridge.ts` Pi extension at
21
- * `packages/cleo/templates/cleoos-hub/pi-extensions/cant-bridge.ts`,
22
- * which interprets `.cant` files via shell-out to the `cleo cant`
23
- * command family. Operators who want profile-driven behaviour should
24
- * start a Pi session and use `/cant:load <file>` followed by
25
- * `/cant:run <file> <workflowName>`. The daemon and the Pi session are
26
- * distinct runtimes with distinct purposes, by design (see ADR-035 §D5
27
- * "Option Y" addendum).
28
- *
29
- * @see docs/specs/SIGNALDOCK-UNIFIED-AGENT-REGISTRY.md Section 3.4
30
- * @see .cleo/adrs/ADR-035-pi-v2-v3-harness.md §D5 + Addendum
31
- * @task T178
32
- */
33
- import { checkAgentHealth, detectCrashedAgents, detectStaleAgents, getHealthReport, STALE_THRESHOLD_MS, } from '@cleocode/core/internal';
34
- import { cliOutput } from '../renderers/index.js';
35
- import { computeProfileStatus } from './agent-profile-status.js';
36
- /**
37
- * Register the `cleo agent` command group.
38
- */
39
- export function registerAgentCommand(program) {
40
- const agent = program.command('agent').description('Agent lifecycle, credentials, and messaging');
41
- // --- cleo agent register ---
42
- agent
43
- .command('register')
44
- .description('Register a new agent credential in the local registry')
45
- .requiredOption('--id <agentId>', 'Unique agent identifier')
46
- .requiredOption('--name <displayName>', 'Human-readable display name')
47
- .requiredOption('--api-key <apiKey>', 'API key (sk_live_...)')
48
- .option('--api-url <url>', 'API base URL', 'https://api.signaldock.io')
49
- .option('--classification <class>', 'Agent classification (e.g. code_dev, orchestrator)')
50
- .option('--privacy <tier>', 'Privacy tier: public, discoverable, private', 'public')
51
- .action(async (opts) => {
52
- try {
53
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
54
- await getDb();
55
- const registry = new AgentRegistryAccessor(process.cwd());
56
- const agentId = opts['id'];
57
- const displayName = opts['name'];
58
- const classification = opts['classification'];
59
- const credential = await registry.register({
60
- agentId,
61
- displayName,
62
- apiKey: opts['apiKey'],
63
- apiBaseUrl: opts['apiUrl'] ?? 'https://api.signaldock.io',
64
- classification,
65
- privacyTier: opts['privacy'] ?? 'public',
66
- capabilities: [],
67
- skills: [],
68
- transportType: 'http',
69
- transportConfig: {},
70
- isActive: true,
71
- });
72
- // Scaffold .cant persona file if it doesn't exist
73
- const { existsSync, mkdirSync, writeFileSync } = await import('node:fs');
74
- const { join } = await import('node:path');
75
- const cantDir = join('.cleo', 'agents');
76
- const cantPath = join(cantDir, `${agentId}.cant`);
77
- let cantScaffolded = false;
78
- if (!existsSync(cantPath)) {
79
- mkdirSync(cantDir, { recursive: true });
80
- const role = classification ?? 'specialist';
81
- const cantContent = `---
82
- kind: agent
83
- version: 2
84
- ---
85
-
86
- agent ${agentId}:
87
- house: none
88
- allegiance: canon
89
- role: ${role}
90
- parent: cleoos-opus-orchestrator
91
- description: "${displayName}"
92
-
93
- tone:
94
- |
95
- TODO: Describe how this agent communicates.
96
-
97
- prompt:
98
- |
99
- TODO: Write the core behavioral instruction.
100
-
101
- skills: [ct-cleo]
102
-
103
- permissions:
104
- tasks: read
105
- session: read
106
- memory: read
107
-
108
- transport:
109
- primary: local
110
- fallback: sse
111
- cloud: http
112
- apiBaseUrl: https://api.signaldock.io
113
-
114
- lifecycle:
115
- start: cleo agent start ${agentId}
116
- stop: cleo agent stop ${agentId}
117
- status: cleo agent status ${agentId}
118
-
119
- context:
120
- active-tasks
121
- memory-bridge
122
-
123
- on SessionStart:
124
- /checkin @all #online
125
-
126
- enforcement:
127
- 1: TODO — what does this agent push back on?
128
- `;
129
- writeFileSync(cantPath, cantContent, 'utf-8');
130
- cantScaffolded = true;
131
- }
132
- cliOutput({
133
- success: true,
134
- data: {
135
- agentId: credential.agentId,
136
- displayName: credential.displayName,
137
- cantFile: cantScaffolded ? cantPath : existsSync(cantPath) ? cantPath : null,
138
- cantScaffolded,
139
- },
140
- }, { command: 'agent register' });
141
- }
142
- catch (err) {
143
- cliOutput({ success: false, error: { code: 'E_REGISTER', message: String(err) } }, { command: 'agent register' });
144
- process.exitCode = 1;
145
- }
146
- });
147
- // --- cleo agent signin ---
148
- agent
149
- .command('signin <agentId>')
150
- .description('Sign in as an agent — marks active, caches credentials for session')
151
- .option('--api-url <url>', 'Override API base URL for cloud status update')
152
- .action(async (agentId, opts) => {
153
- try {
154
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
155
- await getDb();
156
- const registry = new AgentRegistryAccessor(process.cwd());
157
- // Look up the credential
158
- const credential = await registry.get(agentId);
159
- if (!credential) {
160
- cliOutput({
161
- success: false,
162
- error: {
163
- code: 'E_NOT_FOUND',
164
- message: `Agent '${agentId}' not registered. Run: cleo agent register --id ${agentId} --name "..." --api-key sk_live_...`,
165
- },
166
- }, { command: 'agent signin' });
167
- process.exitCode = 1;
168
- return;
169
- }
170
- // Mark as active + update lastUsedAt
171
- await registry.update(agentId, { isActive: true });
172
- await registry.markUsed(agentId);
173
- // Attempt to set online status on cloud (best-effort, don't fail if offline)
174
- const apiUrl = opts['apiUrl'] ?? credential.apiBaseUrl;
175
- try {
176
- await fetch(`${apiUrl}/agents/${agentId}/status`, {
177
- method: 'PUT',
178
- headers: {
179
- 'Content-Type': 'application/json',
180
- Authorization: `Bearer ${credential.apiKey}`,
181
- 'X-Agent-Id': agentId,
182
- },
183
- body: JSON.stringify({ status: 'online' }),
184
- signal: AbortSignal.timeout(5000),
185
- });
186
- }
187
- catch {
188
- // Offline is fine — LocalTransport works without cloud
189
- }
190
- cliOutput({
191
- success: true,
192
- data: {
193
- agentId: credential.agentId,
194
- displayName: credential.displayName,
195
- apiBaseUrl: apiUrl,
196
- status: 'online',
197
- transport: 'local',
198
- },
199
- }, { command: 'agent signin' });
200
- }
201
- catch (err) {
202
- cliOutput({ success: false, error: { code: 'E_SIGNIN', message: String(err) } }, { command: 'agent signin' });
203
- process.exitCode = 1;
204
- }
205
- });
206
- // --- cleo agent start ---
207
- // Boot the SignalDock-poller daemon for an agent.
208
- //
209
- // Profile handling:
210
- // The `--cant <file>` option (or the default
211
- // `.cleo/agents/<agentId>.cant` lookup) is read for two reasons:
212
- //
213
- // 1. **Fail-fast validation**: if the file exists and the optional
214
- // `@cleocode/cant` validator is available in this build, the
215
- // file is parsed so malformed profiles surface as a status
216
- // string rather than blowing up later.
217
- // 2. **Status surface**: the resulting status (`validated`,
218
- // `invalid (N errors)`, `loaded (unvalidated)`, or `none`) is
219
- // reported in the LAFS envelope so operators know the daemon
220
- // saw the file they expected.
221
- //
222
- // The profile string is then DROPPED. The daemon does NOT execute
223
- // workflow profiles. Profile-driven behaviour (sessions, parallel
224
- // arms, conditionals, approval gates, discretion evaluation) runs
225
- // inside Pi sessions through the `cant-bridge.ts` Pi extension at
226
- // `packages/cleo/templates/cleoos-hub/pi-extensions/cant-bridge.ts`.
227
- // Operators who want profile execution should start a Pi session
228
- // and run `/cant:load <file>` followed by
229
- // `/cant:run <file> <workflowName>`.
230
- //
231
- // See ADR-035 §D5 (Option Y addendum) for the architectural
232
- // rationale: there is exactly ONE workflow execution engine in
233
- // CleoOS — `cant-bridge.ts` — and it lives inside Pi by design.
234
- agent
235
- .command('start <agentId>')
236
- .description('Start an agent daemon — polls SignalDock for messages. Profile is validated for fail-fast feedback only; CANT execution lives in Pi via cant-bridge.ts.')
237
- .option('--cant <file>', 'Path to .cant persona file (validated only, NOT executed by the daemon)')
238
- .option('--poll-interval <ms>', 'Poll interval in milliseconds', '5000')
239
- .option('--no-heartbeat', 'Disable heartbeat service')
240
- .action(async (agentId, opts) => {
241
- try {
242
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
243
- const { createRuntime } = await import('@cleocode/runtime');
244
- const { existsSync, readFileSync } = await import('node:fs');
245
- const { join } = await import('node:path');
246
- await getDb();
247
- const registry = new AgentRegistryAccessor(process.cwd());
248
- // 1. Look up credential
249
- const credential = await registry.get(agentId);
250
- if (!credential) {
251
- cliOutput({
252
- success: false,
253
- error: {
254
- code: 'E_NOT_FOUND',
255
- message: `Agent '${agentId}' not registered. Run: cleo agent register --id ${agentId} --name "..." --api-key sk_live_...`,
256
- },
257
- }, { command: 'agent start' });
258
- process.exitCode = 1;
259
- return;
260
- }
261
- // 2. Read and (best-effort) validate the .cant profile.
262
- // This is FAIL-FAST GUARDING ONLY. The profile string is
263
- // used to compute a status field below, then dropped. The
264
- // daemon does not interpret the workflow body — see the
265
- // block comment above this command for why.
266
- let profile = null;
267
- let cantValidation = null;
268
- const cantPath = opts['cant'] ?? join('.cleo', 'agents', `${agentId}.cant`);
269
- if (existsSync(cantPath)) {
270
- profile = readFileSync(cantPath, 'utf-8');
271
- try {
272
- const cantModule = await import('@cleocode/cant');
273
- // validate() may not be available in all builds of @cleocode/cant
274
- const validate = 'validate' in cantModule
275
- ? cantModule.validate
276
- : null;
277
- if (validate) {
278
- const result = validate(profile);
279
- cantValidation = {
280
- valid: result.valid,
281
- errors: result.diagnostics?.map((d) => d.message) ?? [],
282
- };
283
- }
284
- }
285
- catch {
286
- // cant-napi not available — profile loaded but unvalidated
287
- cantValidation = null;
288
- }
289
- }
290
- // 3. Mark active + update lastUsedAt
291
- await registry.update(agentId, { isActive: true });
292
- await registry.markUsed(agentId);
293
- // 4. Set cloud status (best-effort)
294
- try {
295
- await fetch(`${credential.apiBaseUrl}/agents/${agentId}/status`, {
296
- method: 'PUT',
297
- headers: {
298
- 'Content-Type': 'application/json',
299
- Authorization: `Bearer ${credential.apiKey}`,
300
- 'X-Agent-Id': agentId,
301
- },
302
- body: JSON.stringify({ status: 'online' }),
303
- signal: AbortSignal.timeout(5000),
304
- });
305
- }
306
- catch {
307
- // Offline is fine — LocalTransport works without cloud
308
- }
309
- // 5. Start runtime services (transport auto-resolved: Local > SSE > HTTP).
310
- // Note: createRuntime() does NOT receive the profile. The
311
- // daemon's job is purely SignalDock polling + cloud status.
312
- const pollInterval = Number(opts['pollInterval'] ?? 5000);
313
- const runtime = await createRuntime(registry, {
314
- agentId,
315
- pollIntervalMs: pollInterval,
316
- heartbeatIntervalMs: opts['heartbeat'] === false ? 0 : 30000,
317
- groupConversationIds: [],
318
- });
319
- runtime.poller.start();
320
- cliOutput({
321
- success: true,
322
- data: {
323
- agentId,
324
- displayName: credential.displayName,
325
- status: 'online',
326
- transport: runtime.transport.name,
327
- // Surfaced for operator visibility only — see
328
- // computeProfileStatus tsdoc for the four possible values.
329
- profile: computeProfileStatus(profile, cantValidation),
330
- services: {
331
- poller: 'running',
332
- heartbeat: runtime.heartbeat ? 'running' : 'disabled',
333
- keyRotation: runtime.keyRotation ? 'running' : 'disabled',
334
- },
335
- },
336
- }, { command: 'agent start' });
337
- // 6. Keep process alive until shutdown signal (cross-platform)
338
- const shutdown = () => {
339
- runtime.stop();
340
- void registry.update(agentId, { isActive: false }).catch(() => { });
341
- process.exit(0);
342
- };
343
- process.on('SIGINT', shutdown);
344
- process.on('SIGTERM', shutdown);
345
- // Windows: listen for 'message' from parent process managers (PM2, etc.)
346
- if (process.platform === 'win32') {
347
- process.on('message', (msg) => {
348
- if (msg === 'shutdown')
349
- shutdown();
350
- });
351
- }
352
- // Keep alive
353
- await new Promise(() => { });
354
- }
355
- catch (err) {
356
- cliOutput({ success: false, error: { code: 'E_START', message: String(err) } }, { command: 'agent start' });
357
- process.exitCode = 1;
358
- }
359
- });
360
- // --- cleo agent stop ---
361
- agent
362
- .command('stop <agentId>')
363
- .description('Stop an agent — mark offline and deactivate')
364
- .action(async (agentId) => {
365
- try {
366
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
367
- await getDb();
368
- const registry = new AgentRegistryAccessor(process.cwd());
369
- const credential = await registry.get(agentId);
370
- if (!credential) {
371
- cliOutput({
372
- success: false,
373
- error: { code: 'E_NOT_FOUND', message: `Agent '${agentId}' not registered.` },
374
- }, { command: 'agent stop' });
375
- process.exitCode = 1;
376
- return;
377
- }
378
- // Mark inactive
379
- await registry.update(agentId, { isActive: false });
380
- // Set cloud status offline (best-effort)
381
- try {
382
- await fetch(`${credential.apiBaseUrl}/agents/${agentId}/status`, {
383
- method: 'PUT',
384
- headers: {
385
- 'Content-Type': 'application/json',
386
- Authorization: `Bearer ${credential.apiKey}`,
387
- 'X-Agent-Id': agentId,
388
- },
389
- body: JSON.stringify({ status: 'offline' }),
390
- signal: AbortSignal.timeout(5000),
391
- });
392
- }
393
- catch {
394
- // Offline is fine
395
- }
396
- cliOutput({ success: true, data: { agentId, status: 'offline' } }, { command: 'agent stop' });
397
- }
398
- catch (err) {
399
- cliOutput({ success: false, error: { code: 'E_STOP', message: String(err) } }, { command: 'agent stop' });
400
- process.exitCode = 1;
401
- }
402
- });
403
- // --- cleo agent status ---
404
- agent
405
- .command('status [agentId]')
406
- .description('Show agent status — all agents or specific agent')
407
- .action(async (agentId) => {
408
- try {
409
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
410
- await getDb();
411
- const registry = new AgentRegistryAccessor(process.cwd());
412
- if (agentId) {
413
- const credential = await registry.get(agentId);
414
- if (!credential) {
415
- cliOutput({
416
- success: false,
417
- error: { code: 'E_NOT_FOUND', message: `Agent '${agentId}' not registered.` },
418
- }, { command: 'agent status' });
419
- process.exitCode = 1;
420
- return;
421
- }
422
- cliOutput({
423
- success: true,
424
- data: {
425
- agentId: credential.agentId,
426
- displayName: credential.displayName,
427
- active: credential.isActive,
428
- lastUsedAt: credential.lastUsedAt,
429
- transport: credential.transportType,
430
- },
431
- }, { command: 'agent status' });
432
- }
433
- else {
434
- const agents = await registry.list();
435
- cliOutput({
436
- success: true,
437
- data: {
438
- agents: agents.map((a) => ({
439
- agentId: a.agentId,
440
- displayName: a.displayName,
441
- active: a.isActive,
442
- lastUsedAt: a.lastUsedAt,
443
- })),
444
- total: agents.length,
445
- },
446
- }, { command: 'agent status' });
447
- }
448
- }
449
- catch (err) {
450
- cliOutput({ success: false, error: { code: 'E_STATUS', message: String(err) } }, { command: 'agent status' });
451
- process.exitCode = 1;
452
- }
453
- });
454
- // --- cleo agent assign ---
455
- agent
456
- .command('assign <agentId> <taskId>')
457
- .description('Assign a task to an agent via messaging')
458
- .action(async (agentId, taskId) => {
459
- try {
460
- const { AgentRegistryAccessor, getDb, createConduit } = await import('@cleocode/core/internal');
461
- await getDb();
462
- const registry = new AgentRegistryAccessor(process.cwd());
463
- const active = await registry.getActive();
464
- if (!active) {
465
- cliOutput({
466
- success: false,
467
- error: {
468
- code: 'E_NO_ACTIVE',
469
- message: 'No active agent. Run: cleo agent signin <id>',
470
- },
471
- }, { command: 'agent assign' });
472
- process.exitCode = 1;
473
- return;
474
- }
475
- const conduit = await createConduit(registry);
476
- await conduit.send(agentId, `/action @${agentId} #task-assignment\n\nAssigned task ${taskId}. Run: cleo show ${taskId} && cleo start ${taskId}`);
477
- await conduit.disconnect();
478
- cliOutput({
479
- success: true,
480
- data: { agentId, taskId, assignedBy: active.agentId },
481
- }, { command: 'agent assign' });
482
- }
483
- catch (err) {
484
- cliOutput({ success: false, error: { code: 'E_ASSIGN', message: String(err) } }, { command: 'agent assign' });
485
- process.exitCode = 1;
486
- }
487
- });
488
- // --- cleo agent wake ---
489
- agent
490
- .command('wake <agentId>')
491
- .description('Wake an idle agent — send a prod message')
492
- .action(async (agentId) => {
493
- try {
494
- const { AgentRegistryAccessor, getDb, createConduit } = await import('@cleocode/core/internal');
495
- await getDb();
496
- const registry = new AgentRegistryAccessor(process.cwd());
497
- const active = await registry.getActive();
498
- if (!active) {
499
- cliOutput({
500
- success: false,
501
- error: {
502
- code: 'E_NO_ACTIVE',
503
- message: 'No active agent. Run: cleo agent signin <id>',
504
- },
505
- }, { command: 'agent wake' });
506
- process.exitCode = 1;
507
- return;
508
- }
509
- const conduit = await createConduit(registry);
510
- await conduit.send(agentId, `/action @${agentId} #wake #prod\n\nYou are idle. Check your queue: cleo current || cleo next. Report status immediately.`);
511
- await conduit.disconnect();
512
- cliOutput({ success: true, data: { agentId, prodBy: active.agentId } }, { command: 'agent wake' });
513
- }
514
- catch (err) {
515
- cliOutput({ success: false, error: { code: 'E_WAKE', message: String(err) } }, { command: 'agent wake' });
516
- process.exitCode = 1;
517
- }
518
- });
519
- // --- cleo agent spawn ---
520
- agent
521
- .command('spawn')
522
- .description('Spawn a new ephemeral agent for a specific task')
523
- .requiredOption('--role <role>', 'Agent role (e.g. code_dev, research, security)')
524
- .option('--task <taskId>', 'Task to assign to the spawned agent')
525
- .option('--model <model>', 'Model to use (e.g. opus, sonnet)')
526
- .option('--name <name>', 'Display name for the agent')
527
- .action(async (opts) => {
528
- try {
529
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
530
- await getDb();
531
- const registry = new AgentRegistryAccessor(process.cwd());
532
- const role = opts['role'];
533
- const taskId = opts['task'];
534
- const model = opts['model'] ?? 'sonnet';
535
- const displayName = opts['name'] ?? `ephemeral-${role}-${Date.now().toString(36)}`;
536
- const agentId = displayName;
537
- // Register the ephemeral agent locally (no cloud registration)
538
- await registry.register({
539
- agentId,
540
- displayName,
541
- apiKey: 'ephemeral-local-only',
542
- apiBaseUrl: 'local',
543
- classification: role,
544
- privacyTier: 'private',
545
- capabilities: ['chat', 'tools'],
546
- skills: [role],
547
- transportType: 'http',
548
- transportConfig: {},
549
- isActive: true,
550
- });
551
- cliOutput({
552
- success: true,
553
- data: {
554
- agentId,
555
- displayName,
556
- role,
557
- model,
558
- taskId: taskId ?? null,
559
- transport: 'local',
560
- lifecycle: 'ephemeral',
561
- },
562
- }, { command: 'agent spawn' });
563
- }
564
- catch (err) {
565
- cliOutput({ success: false, error: { code: 'E_SPAWN', message: String(err) } }, { command: 'agent spawn' });
566
- process.exitCode = 1;
567
- }
568
- });
569
- // --- cleo agent reassign ---
570
- agent
571
- .command('reassign <taskId> <agentId>')
572
- .description('Reassign a task to another agent via conduit message')
573
- .action(async (taskId, agentId) => {
574
- try {
575
- const { AgentRegistryAccessor, getDb, createConduit } = await import('@cleocode/core/internal');
576
- await getDb();
577
- const registry = new AgentRegistryAccessor(process.cwd());
578
- const active = await registry.getActive();
579
- if (!active) {
580
- cliOutput({ success: false, error: { code: 'E_NO_ACTIVE', message: 'No active agent.' } }, { command: 'agent reassign' });
581
- process.exitCode = 1;
582
- return;
583
- }
584
- const conduit = await createConduit(registry);
585
- await conduit.send(agentId, `/action @${agentId} #task-reassignment\n\nTask ${taskId} reassigned to you by ${active.agentId}. Run: cleo show ${taskId} && cleo start ${taskId}`);
586
- await conduit.disconnect();
587
- cliOutput({ success: true, data: { taskId, newOwner: agentId, reassignedBy: active.agentId } }, { command: 'agent reassign' });
588
- }
589
- catch (err) {
590
- cliOutput({ success: false, error: { code: 'E_REASSIGN', message: String(err) } }, { command: 'agent reassign' });
591
- process.exitCode = 1;
592
- }
593
- });
594
- // --- cleo agent stop-all ---
595
- agent
596
- .command('stop-all')
597
- .description('Stop all active agents — mark all offline')
598
- .action(async () => {
599
- try {
600
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
601
- await getDb();
602
- const registry = new AgentRegistryAccessor(process.cwd());
603
- const agents = await registry.list({ active: true });
604
- let stopped = 0;
605
- for (const a of agents) {
606
- await registry.update(a.agentId, { isActive: false });
607
- try {
608
- await fetch(`${a.apiBaseUrl}/agents/${a.agentId}/status`, {
609
- method: 'PUT',
610
- headers: {
611
- 'Content-Type': 'application/json',
612
- Authorization: `Bearer ${a.apiKey}`,
613
- 'X-Agent-Id': a.agentId,
614
- },
615
- body: JSON.stringify({ status: 'offline' }),
616
- signal: AbortSignal.timeout(3000),
617
- });
618
- }
619
- catch {
620
- /* best-effort */
621
- }
622
- stopped++;
623
- }
624
- cliOutput({ success: true, data: { stopped, total: agents.length } }, { command: 'agent stop-all' });
625
- }
626
- catch (err) {
627
- cliOutput({ success: false, error: { code: 'E_STOP_ALL', message: String(err) } }, { command: 'agent stop-all' });
628
- process.exitCode = 1;
629
- }
630
- });
631
- // --- cleo agent work ---
632
- agent
633
- .command('work <agentId>')
634
- .description('Enter autonomous work loop — poll tasks, report, optionally execute. Phase 3: --execute enables the Conductor Loop.')
635
- .option('--poll-interval <ms>', 'Task check interval in milliseconds', '30000')
636
- .option('--execute', 'Autonomously execute ready tasks via orchestrate.spawn.execute (Phase 3 Conductor Loop)')
637
- .option('--adapter <id>', 'Adapter id to route spawns through (default: auto-detect from capabilities)')
638
- .option('--epic <id>', 'Restrict autonomous execution to a specific epic (default: any ready task)')
639
- .action(async (agentId, opts) => {
640
- try {
641
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
642
- const { createRuntime } = await import('@cleocode/runtime');
643
- const { existsSync } = await import('node:fs');
644
- const { join } = await import('node:path');
645
- const { execFile } = await import('node:child_process');
646
- const { promisify } = await import('node:util');
647
- const execFileAsync = promisify(execFile);
648
- await getDb();
649
- const registry = new AgentRegistryAccessor(process.cwd());
650
- const credential = await registry.get(agentId);
651
- if (!credential) {
652
- cliOutput({
653
- success: false,
654
- error: { code: 'E_NOT_FOUND', message: `Agent '${agentId}' not registered.` },
655
- }, { command: 'agent work' });
656
- process.exitCode = 1;
657
- return;
658
- }
659
- await registry.update(agentId, { isActive: true });
660
- await registry.markUsed(agentId);
661
- const cantPath = join('.cleo', 'agents', `${agentId}.cant`);
662
- const hasProfile = existsSync(cantPath);
663
- const runtime = await createRuntime(registry, {
664
- agentId,
665
- pollIntervalMs: 5000,
666
- heartbeatIntervalMs: 30000,
667
- });
668
- runtime.poller.start();
669
- const executeMode = opts['execute'] === true;
670
- const epicRestrict = typeof opts['epic'] === 'string' ? opts['epic'] : undefined;
671
- const adapterRestrict = typeof opts['adapter'] === 'string' ? opts['adapter'] : undefined;
672
- cliOutput({
673
- success: true,
674
- data: {
675
- agentId,
676
- mode: executeMode ? 'conductor-loop' : 'watch-only',
677
- profile: hasProfile ? 'loaded' : 'none',
678
- status: 'running',
679
- epic: epicRestrict ?? 'any',
680
- adapter: adapterRestrict ?? 'auto',
681
- },
682
- }, { command: 'agent work' });
683
- // Parse LAFS envelope from CLI stdout (handles both minimal and full shapes)
684
- const parseLafs = (raw) => {
685
- const lines = raw.trim().split('\n');
686
- const envLine = [...lines].reverse().find((l) => l.startsWith('{'));
687
- if (!envLine)
688
- return undefined;
689
- try {
690
- const env = JSON.parse(envLine);
691
- if (env.ok === true)
692
- return env.r;
693
- if (env.success === true)
694
- return (env.result ?? env.data);
695
- return undefined;
696
- }
697
- catch {
698
- return undefined;
699
- }
700
- };
701
- const runCleo = async (args, timeoutMs = 15000) => {
702
- const { stdout } = await execFileAsync('cleo', args, {
703
- encoding: 'utf-8',
704
- timeout: timeoutMs,
705
- });
706
- return stdout;
707
- };
708
- const taskInterval = Number(opts['pollInterval'] ?? 30000);
709
- let inFlight = false;
710
- let iterations = 0;
711
- const workLoop = setInterval(async () => {
712
- if (inFlight)
713
- return;
714
- inFlight = true;
715
- iterations += 1;
716
- try {
717
- const currentRaw = await runCleo(['current']).catch(() => '');
718
- if (currentRaw.trim()) {
719
- // A task is already in progress — skip
720
- return;
721
- }
722
- // Resolve next ready task (respect epic restriction when set)
723
- const nextArgs = epicRestrict ? ['orchestrate', 'next', epicRestrict] : ['next'];
724
- const nextRaw = await runCleo(nextArgs).catch(() => '');
725
- if (!nextRaw.trim())
726
- return;
727
- const nextData = parseLafs(nextRaw);
728
- const taskId = nextData?.nextTask?.id ??
729
- (typeof nextData?.id === 'string' ? nextData.id : undefined);
730
- if (!taskId)
731
- return;
732
- if (!executeMode) {
733
- // Watch-only legacy behaviour: advertise availability
734
- console.log(`[${agentId}] Task available: ${taskId}. Pass --execute to run autonomously.`);
735
- return;
736
- }
737
- // Phase 3 Conductor Loop: actually execute via orchestrate.spawn.execute
738
- const spawnArgs = ['orchestrate', 'spawn', taskId];
739
- if (adapterRestrict) {
740
- spawnArgs.push('--adapter', adapterRestrict);
741
- }
742
- const spawnRaw = await runCleo(spawnArgs, 60000).catch((e) => {
743
- console.error(`[${agentId}] conductor-loop: spawn failed for ${taskId}: ${String(e)}`);
744
- return '';
745
- });
746
- const spawnData = parseLafs(spawnRaw);
747
- if (spawnData?.instanceId) {
748
- console.log(`[${agentId}] conductor-loop spawned task=${taskId} instance=${spawnData.instanceId} status=${spawnData.status ?? 'unknown'}`);
749
- }
750
- }
751
- catch {
752
- /* non-fatal — loop continues */
753
- }
754
- finally {
755
- inFlight = false;
756
- }
757
- }, taskInterval);
758
- const shutdown = () => {
759
- clearInterval(workLoop);
760
- runtime.stop();
761
- void registry.update(agentId, { isActive: false }).catch(() => { });
762
- if (executeMode) {
763
- console.log(`[${agentId}] conductor-loop shutdown after ${iterations} iterations.`);
764
- }
765
- process.exit(0);
766
- };
767
- process.on('SIGINT', shutdown);
768
- process.on('SIGTERM', shutdown);
769
- if (process.platform === 'win32') {
770
- process.on('message', (msg) => {
771
- if (msg === 'shutdown')
772
- shutdown();
773
- });
774
- }
775
- await new Promise(() => { });
776
- }
777
- catch (err) {
778
- cliOutput({ success: false, error: { code: 'E_WORK', message: String(err) } }, { command: 'agent work' });
779
- process.exitCode = 1;
780
- }
781
- });
782
- // --- cleo agent list ---
783
- /**
784
- * Lists agents visible in the current project (default: INNER JOIN project-scoped),
785
- * or all global agents when `--global` is supplied (full scan, no project filter).
786
- *
787
- * Output columns: agentId, name, classification, transportType, isActive,
788
- * lastUsedAt, attachment (derived from projectRef).
789
- *
790
- * @task T362 @epic T310
791
- */
792
- agent
793
- .command('list')
794
- .description('List registered agent credentials')
795
- .option('--active', 'Show only active agents (project-scoped mode only)')
796
- .option('--global', 'Show all global agents regardless of project attachment (ADR-037 §4 Q1=B)')
797
- .option('--include-disabled', 'Include detached/disabled agents (enabled=0)')
798
- .action(async (opts) => {
799
- try {
800
- const { listAgentsForProject, getDb } = await import('@cleocode/core/internal');
801
- await getDb();
802
- const includeGlobal = opts['global'] === true;
803
- const includeDisabled = opts['includeDisabled'] === true;
804
- const agents = listAgentsForProject(process.cwd(), {
805
- includeGlobal,
806
- includeDisabled,
807
- });
808
- // Apply legacy --active filter only when NOT in global mode
809
- const filtered = !includeGlobal && opts['active'] ? agents.filter((a) => a.isActive) : agents;
810
- cliOutput({
811
- success: true,
812
- data: filtered.map((a) => ({
813
- agentId: a.agentId,
814
- name: a.displayName,
815
- classification: a.classification ?? null,
816
- transportType: a.transportType,
817
- isActive: a.isActive,
818
- lastUsedAt: a.lastUsedAt ?? null,
819
- attachment: a.projectRef
820
- ? a.projectRef.enabled === 1
821
- ? '[attached]'
822
- : '[disabled]'
823
- : '[global]',
824
- })),
825
- }, { command: 'agent list' });
826
- }
827
- catch (err) {
828
- cliOutput({ success: false, error: { code: 'E_LIST', message: String(err) } }, { command: 'agent list' });
829
- process.exitCode = 1;
830
- }
831
- });
832
- // --- cleo agent get <id> ---
833
- /**
834
- * Returns details for a specific agent credential.
835
- *
836
- * Default: project-scoped lookup via `lookupAgent(includeGlobal=false)` — agent
837
- * must have a project_agent_refs row with enabled=1 in the current project.
838
- *
839
- * With `--global`: cross-project identity lookup via `lookupAgent(includeGlobal=true)`.
840
- * Returns the global identity even if the agent is not attached to this project;
841
- * projectRef block will be null when not attached.
842
- *
843
- * @task T362 @epic T310
844
- */
845
- agent
846
- .command('get <agentId>')
847
- .description('Get details for a specific agent credential')
848
- .option('--global', 'Perform global identity lookup — returns agent even if not attached to current project')
849
- .action(async (agentId, opts) => {
850
- try {
851
- const { lookupAgent, getDb } = await import('@cleocode/core/internal');
852
- await getDb();
853
- const includeGlobal = opts['global'] === true;
854
- const agent = lookupAgent(process.cwd(), agentId, { includeGlobal });
855
- if (!agent) {
856
- cliOutput({
857
- success: false,
858
- error: { code: 'E_NOT_FOUND', message: `Agent not found: ${agentId}` },
859
- }, { command: 'agent get' });
860
- process.exitCode = 4;
861
- return;
862
- }
863
- // Redact API key in output
864
- const redactedKey = agent.apiKey.length > 16
865
- ? `${agent.apiKey.substring(0, 12)}...${agent.apiKey.substring(agent.apiKey.length - 4)}`
866
- : '***redacted***';
867
- cliOutput({
868
- success: true,
869
- data: {
870
- agentId: agent.agentId,
871
- displayName: agent.displayName,
872
- apiKey: redactedKey,
873
- apiBaseUrl: agent.apiBaseUrl,
874
- classification: agent.classification ?? null,
875
- transportType: agent.transportType,
876
- isActive: agent.isActive,
877
- lastUsedAt: agent.lastUsedAt ?? null,
878
- createdAt: agent.createdAt,
879
- updatedAt: agent.updatedAt,
880
- projectRef: agent.projectRef ?? 'not attached to current project',
881
- },
882
- }, { command: 'agent get' });
883
- }
884
- catch (err) {
885
- cliOutput({ success: false, error: { code: 'E_GET', message: String(err) } }, { command: 'agent get' });
886
- process.exitCode = 1;
887
- }
888
- });
889
- // --- cleo agent remove <id> ---
890
- agent
891
- .command('remove <agentId>')
892
- .description('Remove an agent credential from the local registry')
893
- .action(async (agentId) => {
894
- try {
895
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
896
- await getDb();
897
- const registry = new AgentRegistryAccessor(process.cwd());
898
- await registry.remove(agentId);
899
- cliOutput({ success: true, data: { agentId, removed: true } }, { command: 'agent remove' });
900
- }
901
- catch (err) {
902
- cliOutput({ success: false, error: { code: 'E_REMOVE', message: String(err) } }, { command: 'agent remove' });
903
- process.exitCode = 1;
904
- }
905
- });
906
- // --- cleo agent rotate-key <id> ---
907
- agent
908
- .command('rotate-key <agentId>')
909
- .description('Rotate an agent API key (generates new key on cloud, re-encrypts locally)')
910
- .action(async (agentId) => {
911
- try {
912
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
913
- await getDb();
914
- const registry = new AgentRegistryAccessor(process.cwd());
915
- const result = await registry.rotateKey(agentId);
916
- cliOutput({
917
- success: true,
918
- data: {
919
- agentId: result.agentId,
920
- newApiKey: `${result.newApiKey.substring(0, 12)}...`,
921
- message: 'API key rotated. Old key is invalidated.',
922
- },
923
- }, { command: 'agent rotate-key' });
924
- }
925
- catch (err) {
926
- cliOutput({ success: false, error: { code: 'E_ROTATE', message: String(err) } }, { command: 'agent rotate-key' });
927
- process.exitCode = 1;
928
- }
929
- });
930
- // --- cleo agent claim-code <id> ---
931
- agent
932
- .command('claim-code <agentId>')
933
- .description('Generate a claim code for human ownership of an agent')
934
- .action(async (agentId) => {
935
- try {
936
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
937
- await getDb();
938
- const registry = new AgentRegistryAccessor(process.cwd());
939
- const credential = await registry.get(agentId);
940
- if (!credential) {
941
- cliOutput({
942
- success: false,
943
- error: { code: 'E_NOT_FOUND', message: `Agent not found: ${agentId}` },
944
- }, { command: 'agent claim-code' });
945
- process.exitCode = 4;
946
- return;
947
- }
948
- const response = await fetch(`${credential.apiBaseUrl}/agents/${agentId}/claim-code`, {
949
- method: 'POST',
950
- headers: {
951
- 'Content-Type': 'application/json',
952
- Authorization: `Bearer ${credential.apiKey}`,
953
- 'X-Agent-Id': agentId,
954
- },
955
- });
956
- if (!response.ok) {
957
- const text = await response.text().catch(() => '');
958
- throw new Error(`Failed to generate claim code: ${response.status} ${text}`);
959
- }
960
- const data = (await response.json());
961
- cliOutput({
962
- success: true,
963
- data: {
964
- agentId,
965
- claimCode: data.data?.claimCode,
966
- claimUrl: data.data?.claimUrl ?? `https://signaldock.io/claim/${data.data?.claimCode}`,
967
- expiresAt: data.data?.expiresAt,
968
- message: 'Share this claim code with the human owner to verify agent ownership.',
969
- },
970
- }, { command: 'agent claim-code' });
971
- }
972
- catch (err) {
973
- cliOutput({ success: false, error: { code: 'E_CLAIM', message: String(err) } }, { command: 'agent claim-code' });
974
- process.exitCode = 1;
975
- }
976
- });
977
- // --- cleo agent watch ---
978
- agent
979
- .command('watch')
980
- .description('Start continuous message polling for the active agent (long-running)')
981
- .option('--agent <id>', 'Agent ID to watch as (defaults to most recently used)')
982
- .option('--interval <ms>', 'Poll interval in milliseconds', '5000')
983
- .option('--group <ids>', 'Comma-separated group conversation IDs to monitor')
984
- .action(async (opts) => {
985
- try {
986
- const { AgentRegistryAccessor, getDb } = await import('@cleocode/core/internal');
987
- const { createRuntime } = await import('@cleocode/runtime');
988
- await getDb();
989
- const registry = new AgentRegistryAccessor(process.cwd());
990
- const groupIds = opts['group']
991
- ? opts['group'].split(',').map((s) => s.trim())
992
- : undefined;
993
- const handle = await createRuntime(registry, {
994
- agentId: opts['agent'],
995
- pollIntervalMs: Number(opts['interval']) || 5000,
996
- groupConversationIds: groupIds,
997
- });
998
- handle.poller.onMessage((msg) => {
999
- cliOutput({
1000
- success: true,
1001
- data: {
1002
- event: 'message',
1003
- id: msg.id,
1004
- from: msg.from,
1005
- content: msg.content,
1006
- threadId: msg.threadId,
1007
- timestamp: msg.timestamp,
1008
- },
1009
- }, { command: 'agent watch' });
1010
- });
1011
- handle.poller.start();
1012
- cliOutput({
1013
- success: true,
1014
- data: {
1015
- event: 'started',
1016
- agentId: handle.agentId,
1017
- pollIntervalMs: Number(opts['interval']) || 5000,
1018
- groupConversationIds: groupIds ?? [],
1019
- message: 'Watching for messages. Press Ctrl+C to stop.',
1020
- },
1021
- }, { command: 'agent watch' });
1022
- // Keep alive until SIGINT/SIGTERM
1023
- const shutdown = () => {
1024
- handle.stop();
1025
- cliOutput({ success: true, data: { event: 'stopped', agentId: handle.agentId } }, { command: 'agent watch' });
1026
- process.exit(0);
1027
- };
1028
- process.on('SIGINT', shutdown);
1029
- process.on('SIGTERM', shutdown);
1030
- if (process.platform === 'win32') {
1031
- process.on('message', (msg) => {
1032
- if (msg === 'shutdown')
1033
- shutdown();
1034
- });
1035
- }
1036
- }
1037
- catch (err) {
1038
- cliOutput({ success: false, error: { code: 'E_WATCH', message: String(err) } }, { command: 'agent watch' });
1039
- process.exitCode = 1;
1040
- }
1041
- });
1042
- // --- cleo agent poll ---
1043
- agent
1044
- .command('poll')
1045
- .description('One-shot message check for the active agent')
1046
- .option('--agent <id>', 'Agent ID to poll as (defaults to most recently used)')
1047
- .option('--limit <n>', 'Max messages to fetch', '20')
1048
- .action(async (opts) => {
1049
- try {
1050
- const { AgentRegistryAccessor, createConduit, getDb } = await import('@cleocode/core/internal');
1051
- await getDb();
1052
- const registry = new AgentRegistryAccessor(process.cwd());
1053
- const agentId = opts['agent'];
1054
- const conduit = await createConduit(registry, agentId);
1055
- const limit = Number(opts['limit']) || 20;
1056
- const messages = await conduit.poll({ limit });
1057
- cliOutput({
1058
- success: true,
1059
- data: { agentId: conduit.agentId, messages, count: messages.length, limit },
1060
- }, { command: 'agent poll' });
1061
- await conduit.disconnect();
1062
- }
1063
- catch (err) {
1064
- cliOutput({ success: false, error: { code: 'E_POLL', message: String(err) } }, { command: 'agent poll' });
1065
- process.exitCode = 1;
1066
- }
1067
- });
1068
- // --- cleo agent send ---
1069
- agent
1070
- .command('send <message>')
1071
- .description('Send a message to an agent or conversation')
1072
- .option('--to <agentId>', 'Target agent ID')
1073
- .option('--conv <conversationId>', 'Target conversation ID')
1074
- .option('--agent <id>', 'Send as this agent (defaults to most recently used)')
1075
- .action(async (message, opts) => {
1076
- try {
1077
- const { AgentRegistryAccessor, createConduit, getDb } = await import('@cleocode/core/internal');
1078
- await getDb();
1079
- const registry = new AgentRegistryAccessor(process.cwd());
1080
- const agentId = opts['agent'];
1081
- const to = opts['to'];
1082
- const conv = opts['conv'];
1083
- if (!to && !conv) {
1084
- cliOutput({ success: false, error: { code: 'E_ARGS', message: 'Must specify --to or --conv' } }, { command: 'agent send' });
1085
- process.exitCode = 1;
1086
- return;
1087
- }
1088
- const conduit = await createConduit(registry, agentId);
1089
- const result = await conduit.send(to ?? conv ?? '', message, {
1090
- threadId: conv,
1091
- });
1092
- cliOutput({ success: true, data: { messageId: result.messageId, deliveredAt: result.deliveredAt } }, { command: 'agent send' });
1093
- await conduit.disconnect();
1094
- }
1095
- catch (err) {
1096
- cliOutput({ success: false, error: { code: 'E_SEND', message: String(err) } }, { command: 'agent send' });
1097
- process.exitCode = 1;
1098
- }
1099
- });
1100
- // --- cleo agent health ---
1101
- agent
1102
- .command('health')
1103
- .description('Check agent health and detect stale or crashed agents')
1104
- .option('--id <agentId>', 'Check health for a specific agent ID')
1105
- .option('--threshold <ms>', 'Staleness threshold in milliseconds (default: 180000 = 3 minutes)', String(STALE_THRESHOLD_MS))
1106
- .option('--detect-crashed', 'Detect and mark crashed agents (write operation)')
1107
- .action(async (opts) => {
1108
- const thresholdMs = typeof opts['threshold'] === 'string' ? Number(opts['threshold']) : STALE_THRESHOLD_MS;
1109
- const agentId = opts['id'];
1110
- const detectCrashed = Boolean(opts['detectCrashed']);
1111
- if (agentId) {
1112
- const health = await checkAgentHealth(agentId, thresholdMs);
1113
- if (!health) {
1114
- cliOutput({
1115
- success: false,
1116
- error: { code: 'E_NOT_FOUND', message: `Agent not found: ${agentId}` },
1117
- }, { command: 'agent health' });
1118
- process.exitCode = 4;
1119
- return;
1120
- }
1121
- cliOutput({ success: true, data: health }, { command: 'agent health' });
1122
- return;
1123
- }
1124
- if (detectCrashed) {
1125
- const crashed = await detectCrashedAgents(thresholdMs);
1126
- cliOutput({
1127
- success: true,
1128
- data: {
1129
- detectedCrashed: crashed.length,
1130
- agents: crashed.map((a) => ({
1131
- id: a.id,
1132
- agentType: a.agentType,
1133
- lastHeartbeat: a.lastHeartbeat,
1134
- status: a.status,
1135
- })),
1136
- },
1137
- }, { command: 'agent health' });
1138
- return;
1139
- }
1140
- const [report, stale] = await Promise.all([
1141
- getHealthReport(thresholdMs),
1142
- detectStaleAgents(thresholdMs),
1143
- ]);
1144
- cliOutput({
1145
- success: true,
1146
- data: {
1147
- summary: {
1148
- total: report.total,
1149
- active: report.active,
1150
- idle: report.idle,
1151
- starting: report.starting,
1152
- error: report.error,
1153
- crashed: report.crashed,
1154
- stopped: report.stopped,
1155
- totalErrors: report.totalErrors,
1156
- },
1157
- staleAgents: stale.map((s) => ({
1158
- id: s.agentId,
1159
- status: s.status,
1160
- heartbeatAgeMs: s.heartbeatAgeMs,
1161
- lastHeartbeat: s.lastHeartbeat,
1162
- thresholdMs: s.thresholdMs,
1163
- })),
1164
- thresholdMs,
1165
- },
1166
- }, { command: 'agent health' });
1167
- });
1168
- }
1169
- //# sourceMappingURL=agent.js.map