@proletariat/cli 0.1.4 → 0.3.0

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 +510 -255
  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 +104 -52
  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 -139
  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 -173
  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 -212
  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 -140
  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,59 @@
1
+ import { Command } from '@oclif/core';
2
+ import { execSync } from 'node:child_process';
3
+ import chalk from 'chalk';
4
+ import { styles } from '../../lib/styles.js';
5
+ import { isGHInstalled, isGHAuthenticated, isGHTokenInEnv } from '../../lib/pr/index.js';
6
+ export default class GHToken extends Command {
7
+ static description = 'Show GH_TOKEN setup for devcontainer PR creation';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %>',
10
+ ];
11
+ async run() {
12
+ // Check if gh is installed
13
+ if (!isGHInstalled()) {
14
+ this.log(chalk.red(' āœ— gh CLI not installed'));
15
+ this.log(styles.muted(''));
16
+ this.log(styles.muted(' Install first:'));
17
+ this.log(chalk.cyan(' brew install gh'));
18
+ return;
19
+ }
20
+ // Check if gh is authenticated
21
+ if (!isGHAuthenticated()) {
22
+ this.log(chalk.yellow(' ⚠ gh CLI not authenticated'));
23
+ this.log(styles.muted(''));
24
+ this.log(styles.muted(' Authenticate first:'));
25
+ this.log(chalk.cyan(' prlt gh login'));
26
+ return;
27
+ }
28
+ // Check if already set
29
+ if (isGHTokenInEnv()) {
30
+ this.log(chalk.green(' āœ“ GH_TOKEN is already set in your environment'));
31
+ this.log(styles.muted(''));
32
+ this.log(styles.muted(' PR creation will work in devcontainers.'));
33
+ return;
34
+ }
35
+ // Detect shell
36
+ const shell = process.env.SHELL || '/bin/zsh';
37
+ const rcFile = shell.includes('zsh') ? '~/.zshrc' : shell.includes('bash') ? '~/.bashrc' : '~/.profile';
38
+ this.log(chalk.yellow(' ⚠ GH_TOKEN not set'));
39
+ this.log(styles.muted(''));
40
+ this.log(styles.muted(' To enable PR creation from devcontainers, add this to your shell profile:'));
41
+ this.log(styles.muted(''));
42
+ this.log(chalk.cyan(` echo 'export GH_TOKEN=$(gh auth token 2>/dev/null)' >> ${rcFile}`));
43
+ this.log(styles.muted(''));
44
+ this.log(styles.muted(' Then restart your terminal or run:'));
45
+ this.log(chalk.cyan(` source ${rcFile}`));
46
+ this.log(styles.muted(''));
47
+ // Show current token (masked) for verification
48
+ try {
49
+ const token = execSync('gh auth token', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
50
+ if (token) {
51
+ const masked = token.substring(0, 4) + '...' + token.substring(token.length - 4);
52
+ this.log(styles.muted(` Your current gh token: ${masked}`));
53
+ }
54
+ }
55
+ catch {
56
+ // Ignore - token retrieval might fail
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,26 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Init extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ path: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ agents: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ repos: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ pmo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ /**
15
+ * Human mode: interactive prompts with colored output
16
+ */
17
+ private runHumanMode;
18
+ /**
19
+ * Agent mode: use flags, output JSON
20
+ */
21
+ private runAgentMode;
22
+ /**
23
+ * Output JSON to stdout
24
+ */
25
+ private outputJson;
26
+ }
@@ -0,0 +1,200 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import * as path from 'node:path';
4
+ import * as fs from 'node:fs';
5
+ import { promptForHQName, promptForHQLocation, initializeHQ, showNextSteps, validateHQLocation } from '../lib/init/index.js';
6
+ import { promptForAgentsWithTheme } from '../lib/agents/index.js';
7
+ import { promptForRepositories } from '../lib/repos/index.js';
8
+ import { promptForPMOSetup } from '../lib/pmo/index.js';
9
+ export default class Init extends Command {
10
+ static description = 'Initialize an HQ (headquarters) for managing repositories, agents, and projects';
11
+ static examples = [
12
+ // Human mode (interactive)
13
+ '<%= config.bin %> <%= command.id %>',
14
+ // Agent mode (JSON)
15
+ '<%= config.bin %> <%= command.id %> --json --name myproject',
16
+ '<%= config.bin %> <%= command.id %> --json --name myproject --path /path/to/hq --agents agent1,agent2 --pmo',
17
+ ];
18
+ static flags = {
19
+ json: Flags.boolean({
20
+ description: 'Agent mode: use flags instead of prompts, output JSON',
21
+ default: false,
22
+ }),
23
+ name: Flags.string({
24
+ description: 'HQ name (required in --json mode)',
25
+ char: 'n',
26
+ }),
27
+ path: Flags.string({
28
+ description: 'HQ path (defaults to ./{name}-hq)',
29
+ char: 'p',
30
+ }),
31
+ agents: Flags.string({
32
+ description: 'Comma-separated list of agent names',
33
+ char: 'a',
34
+ }),
35
+ repos: Flags.string({
36
+ description: 'Comma-separated list of repository paths to clone/move',
37
+ char: 'r',
38
+ }),
39
+ pmo: Flags.boolean({
40
+ description: 'Include PMO (Project Management Office)',
41
+ default: true,
42
+ allowNo: true,
43
+ }),
44
+ };
45
+ async run() {
46
+ const { flags } = await this.parse(Init);
47
+ if (flags.json) {
48
+ await this.runAgentMode(flags);
49
+ }
50
+ else if (!process.stdin.isTTY) {
51
+ // Non-interactive environment (likely an AI agent)
52
+ // Output guidance as JSON
53
+ this.outputJson({
54
+ success: false,
55
+ error: 'Interactive mode requires a TTY. Use --json flag for agent mode.',
56
+ hint: 'Run: prlt init --json --name <hq-name> [--path <path>] [--agents a1,a2] [--no-pmo]',
57
+ flags: {
58
+ '--json': 'Enable agent mode with JSON output',
59
+ '--name, -n': 'HQ name (required)',
60
+ '--path, -p': 'HQ path (defaults to ./{name}-hq)',
61
+ '--agents, -a': 'Comma-separated agent names',
62
+ '--repos, -r': 'Comma-separated repo paths',
63
+ '--pmo/--no-pmo': 'Include PMO (default: true)',
64
+ },
65
+ });
66
+ this.exit(1);
67
+ }
68
+ else {
69
+ await this.runHumanMode();
70
+ }
71
+ }
72
+ /**
73
+ * Human mode: interactive prompts with colored output
74
+ */
75
+ async runHumanMode() {
76
+ console.log(chalk.blue('šŸš€ Welcome to Proletariat...\n'));
77
+ console.log(chalk.blue('šŸ¢ Setting up your headquarters...\n'));
78
+ // Step 1: Get HQ name
79
+ const hqName = await promptForHQName();
80
+ // Step 2: Determine location (always adds -hq suffix)
81
+ const hqPath = await promptForHQLocation(hqName);
82
+ // Step 3: Add agents (with theme options)
83
+ const agentResult = await promptForAgentsWithTheme();
84
+ // Step 4: Add repositories
85
+ const repos = await promptForRepositories(process.cwd(), []);
86
+ // Step 5: PMO setup (uses shared prompt from lib/pmo)
87
+ const pmoSetup = await promptForPMOSetup(hqPath, hqName);
88
+ // Create the options object
89
+ const options = {
90
+ workspaceType: 'hq',
91
+ hqName,
92
+ hqPath,
93
+ selectedAgents: agentResult.agents,
94
+ repos,
95
+ pmoSetup,
96
+ themeId: agentResult.themeId,
97
+ customTheme: agentResult.customTheme,
98
+ };
99
+ // Initialize the HQ
100
+ await initializeHQ(options);
101
+ // Show next steps
102
+ await showNextSteps(options);
103
+ }
104
+ /**
105
+ * Agent mode: use flags, output JSON
106
+ */
107
+ async runAgentMode(flags) {
108
+ // Validate required fields
109
+ if (!flags.name) {
110
+ this.outputJson({
111
+ success: false,
112
+ error: 'Missing required flag: --name',
113
+ });
114
+ this.exit(1);
115
+ }
116
+ const hqName = flags.name;
117
+ const hqPath = flags.path || path.resolve(`./${hqName}-hq`);
118
+ // Validate HQ path is not inside a git repo
119
+ if (!validateHQLocation(hqPath)) {
120
+ this.outputJson({
121
+ success: false,
122
+ error: 'Cannot create HQ inside a git repository',
123
+ path: hqPath,
124
+ });
125
+ this.exit(1);
126
+ }
127
+ // Check if directory already exists
128
+ if (fs.existsSync(hqPath)) {
129
+ this.outputJson({
130
+ success: false,
131
+ error: 'Directory already exists',
132
+ path: hqPath,
133
+ });
134
+ this.exit(1);
135
+ }
136
+ // Parse agents
137
+ const selectedAgents = flags.agents
138
+ ? flags.agents.split(',').map(a => a.trim()).filter(Boolean)
139
+ : [];
140
+ // Parse repos
141
+ const repos = flags.repos
142
+ ? flags.repos.split(',').map(r => ({
143
+ path: r.trim(),
144
+ action: 'clone',
145
+ })).filter(r => r.path)
146
+ : [];
147
+ // Create options
148
+ const options = {
149
+ workspaceType: 'hq',
150
+ hqName,
151
+ hqPath,
152
+ selectedAgents,
153
+ repos,
154
+ quiet: true, // Suppress console output in JSON mode
155
+ pmoSetup: {
156
+ includePMO: flags.pmo,
157
+ location: 'separate',
158
+ boardTemplate: 'default',
159
+ boardName: `${hqName}-kanban`,
160
+ columns: ['Backlog', 'In Progress', 'Review', 'Done'],
161
+ storageType: 'sqlite',
162
+ },
163
+ };
164
+ try {
165
+ // Suppress console output in JSON mode
166
+ const originalLog = console.log;
167
+ console.log = () => { };
168
+ // Initialize the HQ
169
+ await initializeHQ(options);
170
+ // Restore console.log
171
+ console.log = originalLog;
172
+ // Output success JSON
173
+ this.outputJson({
174
+ success: true,
175
+ hq: {
176
+ name: hqName,
177
+ path: hqPath,
178
+ agents: selectedAgents,
179
+ repos: repos.map(r => r.path),
180
+ pmo: flags.pmo,
181
+ },
182
+ });
183
+ }
184
+ catch (error) {
185
+ // Restore console.log on error
186
+ console.log = console.log;
187
+ this.outputJson({
188
+ success: false,
189
+ error: error instanceof Error ? error.message : 'Unknown error',
190
+ });
191
+ this.exit(1);
192
+ }
193
+ }
194
+ /**
195
+ * Output JSON to stdout
196
+ */
197
+ outputJson(data) {
198
+ console.log(JSON.stringify(data, null, 2));
199
+ }
200
+ }
@@ -0,0 +1,22 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class PhaseCreate extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ color: 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
+ default: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ protected getPMOOptions(): {
18
+ promptIfMultiple: boolean;
19
+ };
20
+ execute(): Promise<void>;
21
+ private promptPhaseData;
22
+ }
@@ -0,0 +1,123 @@
1
+ import { Flags, Args } 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, createMetadata, buildFormPromptConfig, } from '../../lib/prompt-json.js';
7
+ export default class PhaseCreate extends PMOCommand {
8
+ static description = 'Create a new project lifecycle phase';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %> "On Hold" --category unstarted',
11
+ '<%= config.bin %> <%= command.id %> "In Review" --category started --color "#FFA500"',
12
+ '<%= config.bin %> <%= command.id %> -i # Interactive mode',
13
+ ];
14
+ static args = {
15
+ name: Args.string({
16
+ description: 'Phase name',
17
+ required: false,
18
+ }),
19
+ };
20
+ static flags = {
21
+ ...pmoBaseFlags,
22
+ category: Flags.string({
23
+ char: 'c',
24
+ description: 'State category',
25
+ options: ['backlog', 'unstarted', 'started', 'completed', 'canceled'],
26
+ }),
27
+ color: Flags.string({
28
+ description: 'Hex color (e.g., "#FF5733")',
29
+ }),
30
+ description: Flags.string({
31
+ char: 'd',
32
+ description: 'Phase description',
33
+ }),
34
+ default: Flags.boolean({
35
+ description: 'Set as default phase for new projects',
36
+ default: false,
37
+ }),
38
+ interactive: Flags.boolean({
39
+ char: 'i',
40
+ description: 'Interactive mode',
41
+ default: false,
42
+ }),
43
+ json: Flags.boolean({
44
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
45
+ default: false,
46
+ }),
47
+ };
48
+ getPMOOptions() {
49
+ return { promptIfMultiple: false };
50
+ }
51
+ async execute() {
52
+ const { args, flags } = await this.parse(PhaseCreate);
53
+ {
54
+ let phaseData;
55
+ // Auto-enter interactive mode if any required value is missing
56
+ if (flags.interactive || !args.name || !flags.category) {
57
+ // Check if JSON output mode is active
58
+ const jsonMode = shouldOutputJson(flags);
59
+ // In JSON mode, output form prompt
60
+ // Define labels once - single source of truth
61
+ const categoryLabels = {
62
+ triage: 'Triage - Inbox, needs review',
63
+ backlog: 'Backlog - Not yet scheduled for work',
64
+ unstarted: 'Unstarted - Scheduled but work hasn\'t begun',
65
+ started: 'Started - Work is actively in progress',
66
+ completed: 'Completed - Work finished successfully',
67
+ canceled: 'Canceled - Work won\'t be done',
68
+ };
69
+ const categoryChoices = STATE_CATEGORY_ORDER.map(cat => ({ name: categoryLabels[cat], value: cat }));
70
+ // Define fields once - single source of truth for both JSON and interactive modes
71
+ const fields = [
72
+ { type: 'input', name: 'name', message: 'Phase name:', default: args.name },
73
+ { type: 'list', name: 'category', message: 'Category:', choices: categoryChoices, default: flags.category },
74
+ { type: 'input', name: 'color', message: 'Color (hex, optional):', default: flags.color },
75
+ { type: 'input', name: 'description', message: 'Description (optional):', default: flags.description },
76
+ { type: 'confirm', name: 'isDefault', message: 'Set as default for new projects?', default: flags.default || false },
77
+ ];
78
+ if (jsonMode) {
79
+ outputPromptAsJson(buildFormPromptConfig(fields), createMetadata('phase create', flags));
80
+ }
81
+ phaseData = await this.promptPhaseData(fields);
82
+ }
83
+ else {
84
+ phaseData = {
85
+ name: args.name,
86
+ category: flags.category,
87
+ color: flags.color,
88
+ description: flags.description,
89
+ isDefault: flags.default,
90
+ };
91
+ }
92
+ const phase = await this.storage.createPhase(phaseData);
93
+ this.log(styles.success(`\nCreated phase "${styles.emphasis(phase.name)}"`));
94
+ this.log(styles.muted(` ID: ${phase.id}`));
95
+ this.log(styles.muted(` Category: ${phase.category}`));
96
+ if (phase.color) {
97
+ this.log(styles.muted(` Color: ${phase.color}`));
98
+ }
99
+ if (phase.description) {
100
+ this.log(styles.muted(` Description: ${phase.description}`));
101
+ }
102
+ if (phase.isDefault) {
103
+ this.log(styles.muted(` Default: Yes`));
104
+ }
105
+ }
106
+ }
107
+ async promptPhaseData(fields) {
108
+ // Build inquirer prompts from fields, adding validators
109
+ const answers = await inquirer.prompt(fields.map(field => ({
110
+ ...field,
111
+ validate: field.name === 'name'
112
+ ? ((input) => input.length > 0 || 'Name is required')
113
+ : undefined,
114
+ })));
115
+ return {
116
+ name: answers.name,
117
+ category: answers.category,
118
+ color: answers.color || undefined,
119
+ description: answers.description || undefined,
120
+ isDefault: answers.isDefault,
121
+ };
122
+ }
123
+ }
@@ -0,0 +1,17 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class PhaseDelete 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
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ protected getPMOOptions(): {
14
+ promptIfMultiple: boolean;
15
+ };
16
+ execute(): Promise<void>;
17
+ }
@@ -0,0 +1,73 @@
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 PhaseDelete extends PMOCommand {
7
+ static description = 'Delete a project lifecycle phase';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> on-hold',
10
+ '<%= config.bin %> <%= command.id %> on-hold --force',
11
+ ];
12
+ static args = {
13
+ id: Args.string({
14
+ description: 'Phase ID',
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...pmoBaseFlags,
20
+ force: Flags.boolean({
21
+ char: 'f',
22
+ description: 'Skip confirmation',
23
+ default: false,
24
+ }),
25
+ json: Flags.boolean({
26
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
27
+ default: false,
28
+ }),
29
+ };
30
+ getPMOOptions() {
31
+ return { promptIfMultiple: false };
32
+ }
33
+ async execute() {
34
+ const { args, flags } = await this.parse(PhaseDelete);
35
+ // Check if JSON output mode is active
36
+ const jsonMode = shouldOutputJson(flags);
37
+ // Helper to handle errors in JSON mode
38
+ const handleError = (code, message) => {
39
+ if (jsonMode) {
40
+ outputErrorAsJson(code, message, createMetadata('phase delete', flags));
41
+ this.exit(1);
42
+ }
43
+ this.error(message);
44
+ };
45
+ const phase = await this.storage.getPhase(args.id);
46
+ if (!phase) {
47
+ return handleError('PHASE_NOT_FOUND', `Phase "${args.id}" not found.`);
48
+ }
49
+ if (!flags.force) {
50
+ // In JSON mode, output confirmation prompt
51
+ if (jsonMode) {
52
+ const confirmChoices = [
53
+ { name: 'No', value: 'false' },
54
+ { name: 'Yes', value: 'true' },
55
+ ];
56
+ outputPromptAsJson(buildPromptConfig('list', 'confirmed', `Delete phase "${phase.name}"?`, confirmChoices), createMetadata('phase delete', flags));
57
+ return;
58
+ }
59
+ const { confirm } = await inquirer.prompt([{
60
+ type: 'confirm',
61
+ name: 'confirm',
62
+ message: `Delete phase "${phase.name}"?`,
63
+ default: false,
64
+ }]);
65
+ if (!confirm) {
66
+ this.log(styles.muted('Cancelled.'));
67
+ return;
68
+ }
69
+ }
70
+ await this.storage.deletePhase(args.id);
71
+ this.log(styles.success(`\nDeleted phase "${phase.name}"`));
72
+ }
73
+ }
@@ -0,0 +1,12 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class PhaseList extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ category: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ execute(): Promise<void>;
11
+ private groupByCategory;
12
+ }
@@ -0,0 +1,76 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ import { STATE_CATEGORY_ORDER } from '../../lib/pmo/types.js';
5
+ export default class PhaseList extends PMOCommand {
6
+ static description = 'List all project lifecycle phases';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %>',
9
+ '<%= config.bin %> <%= command.id %> --category started',
10
+ '<%= config.bin %> <%= command.id %> --json',
11
+ ];
12
+ static flags = {
13
+ ...pmoBaseFlags,
14
+ category: Flags.string({
15
+ char: 'c',
16
+ description: 'Filter by category',
17
+ options: ['backlog', 'unstarted', 'started', 'completed', 'canceled'],
18
+ }),
19
+ json: Flags.boolean({
20
+ description: 'Output as JSON',
21
+ default: false,
22
+ }),
23
+ };
24
+ async execute() {
25
+ const { flags } = await this.parse(PhaseList);
26
+ const phases = await this.storage.listPhases(flags.category ? { category: flags.category } : undefined);
27
+ if (flags.json) {
28
+ this.log(JSON.stringify(phases, null, 2));
29
+ return;
30
+ }
31
+ if (phases.length === 0) {
32
+ this.log(styles.muted('\nNo phases found.'));
33
+ return;
34
+ }
35
+ // Group by category
36
+ const grouped = this.groupByCategory(phases);
37
+ this.log(`\nšŸ“Š ${styles.emphasis('Project Lifecycle Phases')}`);
38
+ this.log('═'.repeat(60));
39
+ const categoryEmoji = {
40
+ triage: 'šŸ“¬',
41
+ backlog: 'šŸ“„',
42
+ unstarted: 'šŸ“‹',
43
+ started: 'šŸš€',
44
+ completed: 'āœ…',
45
+ canceled: '🚫',
46
+ };
47
+ for (const category of STATE_CATEGORY_ORDER) {
48
+ if (flags.category && flags.category !== category)
49
+ continue;
50
+ const categoryPhases = grouped.get(category);
51
+ if (!categoryPhases || categoryPhases.length === 0)
52
+ continue;
53
+ const emoji = categoryEmoji[category];
54
+ this.log(`\n${emoji} ${styles.emphasis(category.toUpperCase())}`);
55
+ this.log('─'.repeat(40));
56
+ for (const phase of categoryPhases) {
57
+ const defaultBadge = phase.isDefault ? styles.muted(' (default)') : '';
58
+ const colorPreview = phase.color ? `[${phase.color}]` : '';
59
+ this.log(` ${phase.name}${defaultBadge} ${styles.muted(colorPreview)}`);
60
+ if (phase.description) {
61
+ this.log(` ${styles.muted(phase.description)}`);
62
+ }
63
+ }
64
+ }
65
+ this.log('');
66
+ }
67
+ groupByCategory(phases) {
68
+ const grouped = new Map();
69
+ for (const phase of phases) {
70
+ const existing = grouped.get(phase.category) || [];
71
+ existing.push(phase);
72
+ grouped.set(phase.category, existing);
73
+ }
74
+ return grouped;
75
+ }
76
+ }
@@ -0,0 +1,17 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class PhaseMove extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ position: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ protected getPMOOptions(): {
14
+ promptIfMultiple: boolean;
15
+ };
16
+ execute(): Promise<void>;
17
+ }