@proletariat/cli 0.2.0 → 0.3.1

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 (526) hide show
  1. package/README.md +561 -251
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +103 -56
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -142
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -248
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -214
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -320
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,179 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
+ import { styles } from '../../lib/styles.js';
5
+ import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
6
+ export default class ActionRun extends PMOCommand {
7
+ static description = 'Run an action on one or more tickets (bulk action support)';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> TKT-001 --action implement',
10
+ '<%= config.bin %> <%= command.id %> TKT-001 TKT-002 TKT-003 --action groom',
11
+ '<%= config.bin %> <%= command.id %> --all --action groom # All backlog tickets',
12
+ '<%= config.bin %> <%= command.id %> --category started --action review',
13
+ ];
14
+ static strict = false; // Allow multiple ticket IDs
15
+ static args = {
16
+ ticketIds: Args.string({
17
+ description: 'Ticket ID(s) to run action on',
18
+ required: false,
19
+ }),
20
+ };
21
+ static flags = {
22
+ ...pmoBaseFlags,
23
+ action: Flags.string({
24
+ char: 'A',
25
+ description: 'Action to run (e.g., groom, implement, review)',
26
+ required: true,
27
+ }),
28
+ all: Flags.boolean({
29
+ char: 'a',
30
+ description: 'Run on all tickets in backlog',
31
+ default: false,
32
+ }),
33
+ category: Flags.string({
34
+ char: 'c',
35
+ description: 'Filter tickets by status category',
36
+ options: ['backlog', 'unstarted', 'started', 'completed', 'canceled'],
37
+ }),
38
+ 'dry-run': Flags.boolean({
39
+ description: 'Show what would be done without executing',
40
+ default: false,
41
+ }),
42
+ force: Flags.boolean({
43
+ char: 'f',
44
+ description: 'Skip confirmation prompt',
45
+ default: false,
46
+ }),
47
+ json: Flags.boolean({
48
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
49
+ default: false,
50
+ }),
51
+ };
52
+ async execute() {
53
+ const { argv, flags } = await this.parse(ActionRun);
54
+ const ticketIds = argv;
55
+ // Check if JSON output mode is active
56
+ const jsonMode = shouldOutputJson(flags);
57
+ // Helper to handle errors in JSON mode
58
+ const handleError = (code, message) => {
59
+ if (jsonMode) {
60
+ outputErrorAsJson(code, message, createMetadata('action run', flags));
61
+ this.exit(1);
62
+ }
63
+ this.error(message);
64
+ };
65
+ // Get the action
66
+ const action = await this.storage.getAction(flags.action);
67
+ if (!action) {
68
+ return handleError('ACTION_NOT_FOUND', `Action not found: ${flags.action}\nRun 'prlt action list' to see available actions.`);
69
+ }
70
+ // Get tickets to operate on
71
+ // Use -P flag to filter by project, or undefined to show all projects
72
+ const projectId = flags.project;
73
+ let tickets = [];
74
+ if (flags.all || flags.category) {
75
+ // Get tickets by filter
76
+ const allTickets = await this.storage.listTickets(projectId);
77
+ if (flags.category) {
78
+ tickets = allTickets.filter(t => t.statusCategory === flags.category);
79
+ }
80
+ else if (flags.all) {
81
+ // Default to backlog for --all
82
+ tickets = allTickets.filter(t => t.statusCategory === 'backlog' || !t.statusCategory);
83
+ }
84
+ }
85
+ else if (ticketIds.length > 0) {
86
+ // Get specific tickets
87
+ for (const id of ticketIds) {
88
+ const ticket = await this.storage.getTicket(id);
89
+ if (ticket) {
90
+ tickets.push(ticket);
91
+ }
92
+ else {
93
+ this.warn(`Ticket not found: ${id}`);
94
+ }
95
+ }
96
+ }
97
+ else {
98
+ // Interactive: show list of tickets to select
99
+ const allTickets = await this.storage.listTickets(projectId);
100
+ if (allTickets.length === 0) {
101
+ return handleError('NO_TICKETS', 'No tickets found.');
102
+ }
103
+ // In JSON mode, output ticket selection prompt
104
+ if (jsonMode) {
105
+ const ticketChoices = allTickets.map(t => ({
106
+ name: `${t.id} - ${t.title} [${t.statusName || t.statusCategory || 'unknown'}]`,
107
+ value: t.id,
108
+ }));
109
+ outputPromptAsJson(buildPromptConfig('checkbox', 'ticketIds', `Select tickets for "${action.name}" action:`, ticketChoices), createMetadata('action run', flags));
110
+ return;
111
+ }
112
+ const { selectedTickets } = await inquirer.prompt([{
113
+ type: 'checkbox',
114
+ name: 'selectedTickets',
115
+ message: `Select tickets for "${action.name}" action:`,
116
+ choices: allTickets.map(t => ({
117
+ name: `${t.id} - ${t.title} [${t.statusName || t.statusCategory || 'unknown'}]`,
118
+ value: t.id,
119
+ checked: action.suggestedForCategories?.includes(t.statusCategory),
120
+ })),
121
+ validate: (input) => input.length > 0 || 'Select at least one ticket',
122
+ }]);
123
+ for (const id of selectedTickets) {
124
+ const ticket = await this.storage.getTicket(id);
125
+ if (ticket)
126
+ tickets.push(ticket);
127
+ }
128
+ }
129
+ if (tickets.length === 0) {
130
+ this.error('No tickets matched the criteria.');
131
+ }
132
+ // Show what will be done
133
+ this.log('');
134
+ this.log(styles.header(`🎬 Action: ${action.name}`));
135
+ if (action.description) {
136
+ this.log(styles.muted(` ${action.description}`));
137
+ }
138
+ this.log('');
139
+ this.log(styles.emphasis(`Tickets (${tickets.length}):`));
140
+ for (const ticket of tickets) {
141
+ const status = ticket.statusName || ticket.statusCategory || 'unknown';
142
+ this.log(styles.muted(` • ${ticket.id}: ${ticket.title} [${status}]`));
143
+ }
144
+ this.log('');
145
+ if (action.defaultMoveToCategory) {
146
+ this.log(styles.muted(`After action: tickets will move to "${action.defaultMoveToCategory}"`));
147
+ this.log('');
148
+ }
149
+ if (flags['dry-run']) {
150
+ this.log(styles.warning('DRY RUN - no changes made'));
151
+ return;
152
+ }
153
+ // Confirm unless --force
154
+ if (!flags.force && tickets.length > 1) {
155
+ const { confirm } = await inquirer.prompt([{
156
+ type: 'confirm',
157
+ name: 'confirm',
158
+ message: `Run "${action.name}" on ${tickets.length} tickets?`,
159
+ default: true,
160
+ }]);
161
+ if (!confirm) {
162
+ this.log(styles.muted('Cancelled.'));
163
+ return;
164
+ }
165
+ }
166
+ // Queue the action for each ticket
167
+ // For now, this just outputs what would be done
168
+ // Full implementation would integrate with work/start
169
+ this.log('');
170
+ this.log(styles.muted('To execute, run for each ticket:'));
171
+ for (const ticket of tickets) {
172
+ this.log(styles.muted(` prlt work start ${ticket.id} --action ${action.id}`));
173
+ }
174
+ this.log('');
175
+ this.log(styles.muted('Or use spawn-all to distribute to agents:'));
176
+ this.log(styles.muted(` prlt work spawn-all --action ${action.id}`));
177
+ this.log('');
178
+ }
179
+ }
@@ -0,0 +1,15 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class ActionShow extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ protected getPMOOptions(): {
12
+ promptIfMultiple: boolean;
13
+ };
14
+ execute(): Promise<void>;
15
+ }
@@ -0,0 +1,47 @@
1
+ import { Args } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ export default class ActionShow extends PMOCommand {
5
+ static description = 'Show details of a work action';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %> groom',
8
+ '<%= config.bin %> <%= command.id %> implement',
9
+ ];
10
+ static args = {
11
+ id: Args.string({
12
+ description: 'Action ID to show',
13
+ required: true,
14
+ }),
15
+ };
16
+ static flags = {
17
+ ...pmoBaseFlags,
18
+ };
19
+ getPMOOptions() {
20
+ return { promptIfMultiple: false };
21
+ }
22
+ async execute() {
23
+ const { args } = await this.parse(ActionShow);
24
+ const action = await this.storage.getAction(args.id);
25
+ if (!action) {
26
+ this.error(`Action not found: ${args.id}`);
27
+ }
28
+ this.log(`\n${styles.emphasis(`Action: ${action.name}`)} ${styles.muted(`(${action.id})`)}`);
29
+ this.log('');
30
+ if (action.description) {
31
+ this.log(`${styles.muted('Description:')} ${action.description}`);
32
+ }
33
+ if (action.suggestedForCategories?.length) {
34
+ this.log(`${styles.muted('Suggested for:')} ${action.suggestedForCategories.join(', ')}`);
35
+ }
36
+ if (action.defaultMoveToCategory) {
37
+ this.log(`${styles.muted('Moves to:')} ${action.defaultMoveToCategory}`);
38
+ }
39
+ this.log(`${styles.muted('Built-in:')} ${action.isBuiltin ? 'Yes' : 'No'}`);
40
+ this.log('');
41
+ this.log(styles.muted('Prompt:'));
42
+ this.log('─'.repeat(40));
43
+ this.log(action.prompt);
44
+ this.log('─'.repeat(40));
45
+ this.log('');
46
+ }
47
+ }
@@ -0,0 +1,22 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class ActionUpdate extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ prompt: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ description: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'suggested-for': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'move-to': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ };
18
+ protected getPMOOptions(): {
19
+ promptIfMultiple: boolean;
20
+ };
21
+ execute(): Promise<void>;
22
+ }
@@ -0,0 +1,168 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import inquirer from 'inquirer';
3
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
+ import { styles } from '../../lib/styles.js';
5
+ import { STATE_CATEGORY_ORDER } from '../../lib/pmo/types.js';
6
+ import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildFormPromptConfig, } from '../../lib/prompt-json.js';
7
+ export default class ActionUpdate extends PMOCommand {
8
+ static description = 'Update a work action';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %> my-action --name "New Name"',
11
+ '<%= config.bin %> <%= command.id %> my-action --prompt "Updated prompt..."',
12
+ '<%= config.bin %> <%= command.id %> my-action # Interactive mode',
13
+ ];
14
+ static args = {
15
+ id: Args.string({
16
+ description: 'Action ID to update',
17
+ required: true,
18
+ }),
19
+ };
20
+ static flags = {
21
+ ...pmoBaseFlags,
22
+ name: Flags.string({
23
+ char: 'n',
24
+ description: 'New action name',
25
+ }),
26
+ prompt: Flags.string({
27
+ char: 'p',
28
+ description: 'New prompt text',
29
+ }),
30
+ description: Flags.string({
31
+ char: 'd',
32
+ description: 'New description',
33
+ }),
34
+ 'suggested-for': Flags.string({
35
+ description: 'Categories this action is suggested for (comma-separated)',
36
+ }),
37
+ 'move-to': Flags.string({
38
+ description: 'Category to move ticket to after action',
39
+ options: ['backlog', 'unstarted', 'started', 'completed', 'canceled', ''],
40
+ }),
41
+ interactive: Flags.boolean({
42
+ char: 'i',
43
+ description: 'Interactive mode - prompt for all fields',
44
+ default: false,
45
+ }),
46
+ json: Flags.boolean({
47
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
48
+ default: false,
49
+ }),
50
+ };
51
+ getPMOOptions() {
52
+ return { promptIfMultiple: false };
53
+ }
54
+ async execute() {
55
+ const { args, flags } = await this.parse(ActionUpdate);
56
+ // Check if JSON output mode is active
57
+ const jsonMode = shouldOutputJson(flags);
58
+ // Helper to handle errors in JSON mode
59
+ const handleError = (code, message) => {
60
+ if (jsonMode) {
61
+ outputErrorAsJson(code, message, createMetadata('action update', flags));
62
+ this.exit(1);
63
+ }
64
+ this.error(message);
65
+ };
66
+ // Get current action
67
+ const existingAction = await this.storage.getAction(args.id);
68
+ if (!existingAction) {
69
+ return handleError('ACTION_NOT_FOUND', `Action not found: ${args.id}`);
70
+ }
71
+ if (existingAction.isBuiltin) {
72
+ return handleError('CANNOT_UPDATE_BUILTIN', 'Cannot update built-in actions. Create a custom action instead.');
73
+ }
74
+ const hasFlags = flags.name || flags.prompt || flags.description !== undefined ||
75
+ flags['suggested-for'] || flags['move-to'] !== undefined;
76
+ const changes = {};
77
+ // Interactive mode if no flags provided or --interactive flag
78
+ if (!hasFlags || flags.interactive) {
79
+ // Build choices once - single source of truth
80
+ const suggestedForChoices = STATE_CATEGORY_ORDER.map(c => ({ name: c, value: c }));
81
+ const moveToChoices = [
82
+ { name: '(no change)', value: '__none__' },
83
+ ...STATE_CATEGORY_ORDER.map(c => ({ name: c, value: c })),
84
+ ];
85
+ // Define fields once - single source of truth for both JSON and interactive modes
86
+ const fields = [
87
+ { type: 'input', name: 'name', message: 'Name:', default: existingAction.name },
88
+ { type: 'input', name: 'description', message: 'Description:', default: existingAction.description || '' },
89
+ { type: 'editor', name: 'prompt', message: 'Prompt (opens editor):', default: existingAction.prompt },
90
+ { type: 'checkbox', name: 'suggestedFor', message: 'Suggested for categories:', choices: suggestedForChoices, default: existingAction.suggestedForCategories || [] },
91
+ { type: 'list', name: 'moveTo', message: 'Move ticket to category after action:', choices: moveToChoices, default: existingAction.defaultMoveToCategory || '__none__' },
92
+ ];
93
+ // In JSON mode, output form prompt
94
+ if (jsonMode) {
95
+ outputPromptAsJson(buildFormPromptConfig(fields), createMetadata('action update', flags));
96
+ }
97
+ this.log('');
98
+ this.log(styles.header(`Updating action: ${existingAction.name}`));
99
+ this.log(styles.muted('Press Enter to keep current value, or enter new value.'));
100
+ this.log('');
101
+ // Build inquirer prompts from fields, adding checkbox 'checked' state
102
+ const answers = await inquirer.prompt(fields.map(field => ({
103
+ ...field,
104
+ // For checkbox, convert default array to checked property on choices
105
+ choices: field.type === 'checkbox' && field.choices
106
+ ? field.choices.map(c => ({
107
+ ...c,
108
+ checked: field.default?.includes(c.value),
109
+ }))
110
+ : field.choices,
111
+ })));
112
+ if (answers.name !== existingAction.name)
113
+ changes.name = answers.name;
114
+ if (answers.description !== (existingAction.description || ''))
115
+ changes.description = answers.description;
116
+ if (answers.prompt !== existingAction.prompt)
117
+ changes.prompt = answers.prompt;
118
+ const currentSuggested = existingAction.suggestedForCategories?.sort().join(',') || '';
119
+ const newSuggested = answers.suggestedFor.sort().join(',');
120
+ if (newSuggested !== currentSuggested) {
121
+ changes.suggestedForCategories = answers.suggestedFor;
122
+ }
123
+ const currentMoveTo = existingAction.defaultMoveToCategory || '__none__';
124
+ if (answers.moveTo !== currentMoveTo) {
125
+ changes.defaultMoveToCategory = answers.moveTo === '__none__' ? null : answers.moveTo;
126
+ }
127
+ }
128
+ else {
129
+ // Flag-based update
130
+ if (flags.name)
131
+ changes.name = flags.name;
132
+ if (flags.prompt)
133
+ changes.prompt = flags.prompt;
134
+ if (flags.description !== undefined)
135
+ changes.description = flags.description;
136
+ if (flags['suggested-for']) {
137
+ changes.suggestedForCategories = flags['suggested-for'].split(',').map(s => s.trim());
138
+ }
139
+ if (flags['move-to'] !== undefined) {
140
+ changes.defaultMoveToCategory = flags['move-to'] || null;
141
+ }
142
+ }
143
+ // Check if any changes
144
+ if (Object.keys(changes).length === 0) {
145
+ this.log(styles.muted('No changes made.'));
146
+ return;
147
+ }
148
+ // Convert null to undefined for storage layer compatibility
149
+ const updatePayload = {
150
+ ...changes,
151
+ defaultMoveToCategory: changes.defaultMoveToCategory === null
152
+ ? undefined
153
+ : changes.defaultMoveToCategory,
154
+ };
155
+ const action = await this.storage.updateAction(args.id, updatePayload);
156
+ this.log(styles.success(`\nUpdated action "${styles.emphasis(action.name)}"`));
157
+ if (changes.name)
158
+ this.log(styles.muted(` Name: ${action.name}`));
159
+ if (changes.description !== undefined)
160
+ this.log(styles.muted(` Description: ${action.description || '(none)'}`));
161
+ if (changes.prompt)
162
+ this.log(styles.muted(` Prompt: (updated)`));
163
+ if (changes.suggestedForCategories)
164
+ this.log(styles.muted(` Suggested for: ${action.suggestedForCategories?.join(', ') || '(none)'}`));
165
+ if (changes.defaultMoveToCategory !== undefined)
166
+ this.log(styles.muted(` Moves to: ${action.defaultMoveToCategory || '(none)'}`));
167
+ }
168
+ }
@@ -0,0 +1,13 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class Agent extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ protected getPMOOptions(): {
10
+ promptIfMultiple: boolean;
11
+ };
12
+ execute(): Promise<void>;
13
+ }
@@ -0,0 +1,131 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { colors } from '../../lib/colors.js';
3
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
4
+ import { shouldOutputJson, } from '../../lib/prompt-json.js';
5
+ export default class Agent extends PMOCommand {
6
+ static description = 'Manage agents in the workspace';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %> list',
9
+ '<%= config.bin %> <%= command.id %> status camry',
10
+ '<%= config.bin %> <%= command.id %> visit tacoma',
11
+ '<%= config.bin %> <%= command.id %> staff add',
12
+ '<%= config.bin %> <%= command.id %> staff remove camry',
13
+ '<%= config.bin %> <%= command.id %> temp cleanup --temp',
14
+ '<%= config.bin %> <%= command.id %> restart altman',
15
+ '<%= config.bin %> <%= command.id %> rebuild altman',
16
+ '<%= config.bin %> <%= command.id %> shell altman',
17
+ '<%= config.bin %> <%= command.id %> themes list',
18
+ ];
19
+ static flags = {
20
+ ...pmoBaseFlags,
21
+ json: Flags.boolean({
22
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
23
+ default: false,
24
+ }),
25
+ };
26
+ getPMOOptions() {
27
+ return { promptIfMultiple: false };
28
+ }
29
+ async execute() {
30
+ const { flags } = await this.parse(Agent);
31
+ // Check if JSON output mode is active
32
+ const jsonMode = shouldOutputJson(flags);
33
+ // Define choices once, use for both JSON and interactive modes
34
+ // Each choice includes the full command for AI agents to execute
35
+ const menuChoices = [
36
+ { id: 'list', name: 'List all agents', command: 'prlt agent list --format json' },
37
+ { id: 'status', name: 'Show status', command: 'prlt agent status --json' },
38
+ { id: 'visit', name: 'Visit directory', command: 'prlt agent visit --json' },
39
+ { id: 'staff', name: 'Manage staff agents', command: 'prlt agent staff --json' },
40
+ { id: 'temp', name: 'Manage temp agents', command: 'prlt agent temp --json' },
41
+ { id: 'themes', name: 'Manage themes', command: 'prlt agent themes --json' },
42
+ { id: 'shell', name: 'Open shell', command: 'prlt agent shell --json' },
43
+ { id: 'restart', name: 'Restart', command: 'prlt agent restart --json' },
44
+ { id: 'rebuild', name: 'Rebuild', command: 'prlt agent rebuild --json' },
45
+ { id: 'cancel', name: 'Cancel', command: '' },
46
+ ];
47
+ const message = 'What would you like to do?';
48
+ this.log(colors.primary('🤖 Agent Management'));
49
+ this.log('');
50
+ this.log(colors.textMuted('Note: Agent pre-registration is no longer required!'));
51
+ this.log(colors.textMuted('Use "prlt work spawn" to create ephemeral agents automatically.'));
52
+ this.log('');
53
+ const action = await this.selectFromList({
54
+ message,
55
+ items: menuChoices,
56
+ getName: (c) => c.name,
57
+ getValue: (c) => c.id,
58
+ getCommand: (c) => c.command,
59
+ jsonMode: jsonMode ? { flags, commandName: 'agent' } : null,
60
+ });
61
+ if (action === 'cancel' || !action) {
62
+ this.log(colors.textMuted('Operation cancelled.'));
63
+ return;
64
+ }
65
+ // Execute the selected command directly (no subprocess)
66
+ try {
67
+ this.log(colors.primary(`\nExecuting: agent ${action}`));
68
+ switch (action) {
69
+ case 'list': {
70
+ const { default: ListCommand } = await import('./list.js');
71
+ const cmd = new ListCommand([], this.config);
72
+ await cmd.run();
73
+ break;
74
+ }
75
+ case 'status': {
76
+ const { default: StatusCommand } = await import('./status.js');
77
+ const cmd = new StatusCommand([], this.config);
78
+ await cmd.run();
79
+ break;
80
+ }
81
+ case 'visit': {
82
+ const { default: VisitCommand } = await import('./visit.js');
83
+ const cmd = new VisitCommand([], this.config);
84
+ await cmd.run();
85
+ break;
86
+ }
87
+ case 'staff': {
88
+ const { default: StaffCommand } = await import('./staff/index.js');
89
+ const cmd = new StaffCommand([], this.config);
90
+ await cmd.run();
91
+ break;
92
+ }
93
+ case 'temp': {
94
+ const { default: TempCommand } = await import('./temp/index.js');
95
+ const cmd = new TempCommand([], this.config);
96
+ await cmd.run();
97
+ break;
98
+ }
99
+ case 'themes': {
100
+ const { default: ThemesCommand } = await import('./themes/index.js');
101
+ const cmd = new ThemesCommand([], this.config);
102
+ await cmd.run();
103
+ break;
104
+ }
105
+ case 'restart': {
106
+ const { default: RestartCommand } = await import('./restart.js');
107
+ const cmd = new RestartCommand([], this.config);
108
+ await cmd.run();
109
+ break;
110
+ }
111
+ case 'rebuild': {
112
+ const { default: RebuildCommand } = await import('./rebuild.js');
113
+ const cmd = new RebuildCommand([], this.config);
114
+ await cmd.run();
115
+ break;
116
+ }
117
+ case 'shell': {
118
+ const { default: ShellCommand } = await import('./shell.js');
119
+ const cmd = new ShellCommand([], this.config);
120
+ await cmd.run();
121
+ break;
122
+ }
123
+ default:
124
+ this.error(`Unknown action: ${action}`);
125
+ }
126
+ }
127
+ catch (error) {
128
+ this.error(`Failed to execute agent ${action}: ${error instanceof Error ? error.message : String(error)}`);
129
+ }
130
+ }
131
+ }
@@ -0,0 +1,7 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class List extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {};
6
+ run(): Promise<void>;
7
+ }