@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,15 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class Workflow extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
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,75 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ export default class Workflow extends PMOCommand {
5
+ static description = 'List all available workflows (alias for workflow list)';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --builtin',
9
+ '<%= config.bin %> <%= command.id %> --json',
10
+ ];
11
+ static flags = {
12
+ ...pmoBaseFlags,
13
+ builtin: Flags.boolean({
14
+ description: 'Show only built-in workflows',
15
+ default: false,
16
+ }),
17
+ custom: Flags.boolean({
18
+ description: 'Show only custom workflows',
19
+ default: false,
20
+ }),
21
+ json: Flags.boolean({
22
+ description: 'Output as JSON',
23
+ default: false,
24
+ }),
25
+ };
26
+ getPMOOptions() {
27
+ return { promptIfMultiple: false };
28
+ }
29
+ async execute() {
30
+ const { flags } = await this.parse(Workflow);
31
+ // Build filter
32
+ const filter = {};
33
+ if (flags.builtin)
34
+ filter.isBuiltin = true;
35
+ if (flags.custom)
36
+ filter.isBuiltin = false;
37
+ const workflows = await this.storage.listWorkflows(Object.keys(filter).length > 0 ? filter : undefined);
38
+ if (flags.json) {
39
+ this.log(JSON.stringify(workflows, null, 2));
40
+ return;
41
+ }
42
+ if (workflows.length === 0) {
43
+ this.log(styles.muted('\nNo workflows found.'));
44
+ this.log(styles.muted('Create one: prlt workflow create "My Workflow"'));
45
+ return;
46
+ }
47
+ this.log(`\n${styles.emphasis('Workflows')}`);
48
+ this.log('═'.repeat(60));
49
+ // Group by builtin vs custom
50
+ const builtinWorkflows = workflows.filter(w => w.isBuiltin);
51
+ const customWorkflows = workflows.filter(w => !w.isBuiltin);
52
+ if (builtinWorkflows.length > 0 && !flags.custom) {
53
+ this.log(`\n${styles.emphasis('Built-in')}`);
54
+ this.log('─'.repeat(40));
55
+ for (const workflow of builtinWorkflows) {
56
+ this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
57
+ if (workflow.description) {
58
+ this.log(` ${styles.muted(workflow.description)}`);
59
+ }
60
+ }
61
+ }
62
+ if (customWorkflows.length > 0 && !flags.builtin) {
63
+ this.log(`\n${styles.emphasis('Custom')}`);
64
+ this.log('─'.repeat(40));
65
+ for (const workflow of customWorkflows) {
66
+ this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
67
+ if (workflow.description) {
68
+ this.log(` ${styles.muted(workflow.description)}`);
69
+ }
70
+ }
71
+ }
72
+ this.log('');
73
+ this.log(styles.muted('View details: prlt workflow view <id>'));
74
+ }
75
+ }
@@ -0,0 +1,15 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkflowList extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ builtin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ custom: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
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,75 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { styles } from '../../lib/styles.js';
4
+ export default class WorkflowList extends PMOCommand {
5
+ static description = 'List all available workflows';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --builtin',
9
+ '<%= config.bin %> <%= command.id %> --json',
10
+ ];
11
+ static flags = {
12
+ ...pmoBaseFlags,
13
+ builtin: Flags.boolean({
14
+ description: 'Show only built-in workflows',
15
+ default: false,
16
+ }),
17
+ custom: Flags.boolean({
18
+ description: 'Show only custom workflows',
19
+ default: false,
20
+ }),
21
+ json: Flags.boolean({
22
+ description: 'Output as JSON',
23
+ default: false,
24
+ }),
25
+ };
26
+ getPMOOptions() {
27
+ return { promptIfMultiple: false };
28
+ }
29
+ async execute() {
30
+ const { flags } = await this.parse(WorkflowList);
31
+ // Build filter
32
+ const filter = {};
33
+ if (flags.builtin)
34
+ filter.isBuiltin = true;
35
+ if (flags.custom)
36
+ filter.isBuiltin = false;
37
+ const workflows = await this.storage.listWorkflows(Object.keys(filter).length > 0 ? filter : undefined);
38
+ if (flags.json) {
39
+ this.log(JSON.stringify(workflows, null, 2));
40
+ return;
41
+ }
42
+ if (workflows.length === 0) {
43
+ this.log(styles.muted('\nNo workflows found.'));
44
+ this.log(styles.muted('Create one: prlt workflow create "My Workflow"'));
45
+ return;
46
+ }
47
+ this.log(`\n${styles.emphasis('Workflows')}`);
48
+ this.log('═'.repeat(60));
49
+ // Group by builtin vs custom
50
+ const builtinWorkflows = workflows.filter(w => w.isBuiltin);
51
+ const customWorkflows = workflows.filter(w => !w.isBuiltin);
52
+ if (builtinWorkflows.length > 0 && !flags.custom) {
53
+ this.log(`\n${styles.emphasis('Built-in')}`);
54
+ this.log('─'.repeat(40));
55
+ for (const workflow of builtinWorkflows) {
56
+ this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
57
+ if (workflow.description) {
58
+ this.log(` ${styles.muted(workflow.description)}`);
59
+ }
60
+ }
61
+ }
62
+ if (customWorkflows.length > 0 && !flags.builtin) {
63
+ this.log(`\n${styles.emphasis('Custom')}`);
64
+ this.log('─'.repeat(40));
65
+ for (const workflow of customWorkflows) {
66
+ this.log(` ${styles.emphasis(workflow.name)} ${styles.muted(`(${workflow.id})`)}`);
67
+ if (workflow.description) {
68
+ this.log(` ${styles.muted(workflow.description)}`);
69
+ }
70
+ }
71
+ }
72
+ this.log('');
73
+ this.log(styles.muted('View details: prlt workflow view <id>'));
74
+ }
75
+ }
@@ -0,0 +1,13 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkflowSwitch extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ workflow: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ execute(): Promise<void>;
13
+ }
@@ -0,0 +1,117 @@
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
+ export default class WorkflowSwitch extends PMOCommand {
6
+ static description = 'Switch a project to use a different workflow';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %> kanban',
9
+ '<%= config.bin %> <%= command.id %> linear --project my-project',
10
+ '<%= config.bin %> <%= command.id %> --force # Skip confirmation',
11
+ ];
12
+ static args = {
13
+ workflow: Args.string({
14
+ description: 'Workflow ID to switch to',
15
+ required: false,
16
+ }),
17
+ };
18
+ static flags = {
19
+ ...pmoBaseFlags,
20
+ force: Flags.boolean({
21
+ char: 'f',
22
+ description: 'Skip confirmation prompt',
23
+ default: false,
24
+ }),
25
+ };
26
+ async execute() {
27
+ const { args, flags } = await this.parse(WorkflowSwitch);
28
+ const projectId = await this.requireProject();
29
+ // Get workflow - prompt for selection if not provided
30
+ let workflowId = args.workflow;
31
+ if (!workflowId) {
32
+ const workflows = await this.storage.listWorkflows();
33
+ if (workflows.length === 0) {
34
+ this.error('No workflows found.\nCreate one with: prlt workflow create "Workflow Name"');
35
+ }
36
+ const { selectedWorkflow } = await inquirer.prompt([{
37
+ type: 'list',
38
+ name: 'selectedWorkflow',
39
+ message: 'Select a workflow:',
40
+ choices: workflows.map(w => ({
41
+ name: `${w.name}${w.description ? ` - ${w.description}` : ''}`,
42
+ value: w.id,
43
+ })),
44
+ }]);
45
+ workflowId = selectedWorkflow;
46
+ }
47
+ // Verify workflow exists
48
+ const workflow = await this.storage.getWorkflow(workflowId);
49
+ if (!workflow) {
50
+ this.error(`Workflow not found: ${workflowId}\nRun 'prlt workflow list' to see available workflows.`);
51
+ }
52
+ // Get current project info
53
+ const project = await this.storage.getProject(projectId);
54
+ const currentWorkflowId = project?.workflowId;
55
+ // Check if already using this workflow
56
+ if (currentWorkflowId === workflowId) {
57
+ this.log(styles.muted(`Project is already using workflow "${workflow.name}".`));
58
+ return;
59
+ }
60
+ // Get tickets that will be affected
61
+ const tickets = await this.storage.listTickets(projectId);
62
+ if (tickets.length > 0 && !flags.force) {
63
+ const projectName = await this.getProjectName(projectId);
64
+ this.log(styles.warning(`\nProject "${projectName}" has ${tickets.length} ticket(s).`));
65
+ this.log(styles.warning('Tickets will be mapped to matching status categories in the new workflow.'));
66
+ this.log('');
67
+ const { confirm } = await inquirer.prompt([
68
+ {
69
+ type: 'list',
70
+ name: 'confirm',
71
+ message: `Switch to workflow "${workflow.name}"?`,
72
+ choices: [
73
+ { name: 'No', value: false },
74
+ { name: 'Yes, switch workflow', value: true },
75
+ ],
76
+ },
77
+ ]);
78
+ if (!confirm) {
79
+ this.log(styles.muted('Cancelled'));
80
+ return;
81
+ }
82
+ }
83
+ // Get new workflow statuses
84
+ const newStatuses = await this.storage.listStatuses(workflowId);
85
+ // Build category -> status mapping for the new workflow
86
+ const categoryToStatus = {};
87
+ for (const status of newStatuses) {
88
+ if (!categoryToStatus[status.category]) {
89
+ categoryToStatus[status.category] = { id: status.id, name: status.name };
90
+ }
91
+ }
92
+ // Find default status
93
+ const defaultStatus = newStatuses.find(s => s.isDefault) || newStatuses[0];
94
+ // Update project workflow_id
95
+ await this.storage.updateProject(projectId, { workflowId: workflowId });
96
+ // Migrate tickets to new statuses
97
+ let migratedCount = 0;
98
+ for (const ticket of tickets) {
99
+ // Get old status category
100
+ const oldCategory = ticket.statusCategory || 'backlog';
101
+ // Find matching status in new workflow, or use default
102
+ const newStatus = categoryToStatus[oldCategory] ||
103
+ (defaultStatus ? { id: defaultStatus.id, name: defaultStatus.name } : null);
104
+ if (newStatus) {
105
+ await this.storage.moveTicket(projectId, ticket.id, newStatus.name);
106
+ migratedCount++;
107
+ }
108
+ }
109
+ const projectName = await this.getProjectName(projectId);
110
+ this.log(styles.success(`\nSwitched project "${projectName}" to workflow "${styles.emphasis(workflow.name)}"`));
111
+ if (migratedCount > 0) {
112
+ this.log(styles.muted(`Migrated ${migratedCount} ticket(s) to matching statuses.`));
113
+ }
114
+ this.log('');
115
+ this.log(styles.muted(`View statuses: prlt status list`));
116
+ }
117
+ }
@@ -0,0 +1,16 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkflowView 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
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ protected getPMOOptions(): {
13
+ promptIfMultiple: boolean;
14
+ };
15
+ execute(): Promise<void>;
16
+ }
@@ -0,0 +1,114 @@
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 WorkflowView extends PMOCommand {
7
+ static description = 'View details of a workflow';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> default',
10
+ '<%= config.bin %> <%= command.id %> # Interactive selection',
11
+ '<%= config.bin %> <%= command.id %> --json',
12
+ ];
13
+ static args = {
14
+ id: Args.string({
15
+ description: 'Workflow ID - prompts with dropdown if not provided',
16
+ required: false,
17
+ }),
18
+ };
19
+ static flags = {
20
+ ...pmoBaseFlags,
21
+ json: Flags.boolean({
22
+ description: 'Output as JSON',
23
+ default: false,
24
+ }),
25
+ };
26
+ getPMOOptions() {
27
+ return { promptIfMultiple: false };
28
+ }
29
+ async execute() {
30
+ const { args, flags } = await this.parse(WorkflowView);
31
+ // Check if JSON output mode is active
32
+ const jsonMode = shouldOutputJson(flags);
33
+ // Helper to handle errors in JSON mode
34
+ const handleError = (code, message) => {
35
+ if (jsonMode) {
36
+ outputErrorAsJson(code, message, createMetadata('workflow view', flags));
37
+ this.exit(1);
38
+ }
39
+ this.error(message);
40
+ };
41
+ // Get workflow ID - prompt if not provided
42
+ let workflowId = args.id;
43
+ if (!workflowId) {
44
+ const workflows = await this.storage.listWorkflows();
45
+ if (workflows.length === 0) {
46
+ return handleError('NO_WORKFLOWS', 'No workflows found.');
47
+ }
48
+ // In JSON mode, output workflow selection prompt
49
+ if (jsonMode) {
50
+ const workflowChoices = workflows.map(w => ({
51
+ name: `${w.name}${w.isBuiltin ? ' (built-in)' : ''}`,
52
+ value: w.id,
53
+ }));
54
+ outputPromptAsJson(buildPromptConfig('list', 'id', 'Select workflow to view:', workflowChoices), createMetadata('workflow view', flags));
55
+ return;
56
+ }
57
+ const { selectedId } = await inquirer.prompt([{
58
+ type: 'list',
59
+ name: 'selectedId',
60
+ message: 'Select workflow to view:',
61
+ choices: workflows.map(w => ({
62
+ name: `${w.name}${w.isBuiltin ? ' (built-in)' : ''}`,
63
+ value: w.id,
64
+ })),
65
+ }]);
66
+ workflowId = selectedId;
67
+ }
68
+ // Get workflow details
69
+ const workflow = await this.storage.getWorkflow(workflowId);
70
+ if (!workflow) {
71
+ return handleError('WORKFLOW_NOT_FOUND', `Workflow not found: ${workflowId}`);
72
+ }
73
+ // Get workflow statuses
74
+ const statuses = await this.storage.listStatuses(workflowId);
75
+ if (flags.json) {
76
+ this.log(JSON.stringify({ workflow, statuses }, null, 2));
77
+ return;
78
+ }
79
+ this.log(`\n${styles.emphasis('Workflow:')} ${workflow.name}`);
80
+ this.log('═'.repeat(60));
81
+ this.log(styles.muted(` ID: ${workflow.id}`));
82
+ if (workflow.description) {
83
+ this.log(styles.muted(` Description: ${workflow.description}`));
84
+ }
85
+ this.log(styles.muted(` Type: ${workflow.isBuiltin ? 'Built-in' : 'Custom'}`));
86
+ this.log(styles.muted(` Created: ${workflow.createdAt.toLocaleDateString()}`));
87
+ if (statuses.length > 0) {
88
+ this.log(`\n${styles.emphasis('Statuses:')}`);
89
+ this.log('─'.repeat(40));
90
+ // Group by category
91
+ const byCategory = new Map();
92
+ for (const status of statuses) {
93
+ const existing = byCategory.get(status.category) || [];
94
+ existing.push(status);
95
+ byCategory.set(status.category, existing);
96
+ }
97
+ const categoryOrder = ['backlog', 'unstarted', 'started', 'completed', 'canceled'];
98
+ for (const category of categoryOrder) {
99
+ const categoryStatuses = byCategory.get(category);
100
+ if (categoryStatuses && categoryStatuses.length > 0) {
101
+ this.log(`\n ${styles.emphasis(category.toUpperCase())}`);
102
+ for (const status of categoryStatuses.sort((a, b) => a.position - b.position)) {
103
+ const defaultBadge = status.isDefault ? styles.muted(' (default)') : '';
104
+ this.log(` • ${status.name}${defaultBadge}`);
105
+ }
106
+ }
107
+ }
108
+ }
109
+ else {
110
+ this.log(styles.muted('\nNo statuses defined.'));
111
+ }
112
+ this.log('');
113
+ }
114
+ }
@@ -0,0 +1,12 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class WorkspaceAdd extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ path: 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
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,74 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import * as fs from 'node:fs';
4
+ import * as path from 'node:path';
5
+ import { registerWorkspace, normalizePath, isWorkspaceRegistered, getWorkspaceNameFromPath, } from '../../lib/machine-config.js';
6
+ export default class WorkspaceAdd extends Command {
7
+ static description = 'Register an existing workspace in the machine config';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> /path/to/workspace',
10
+ '<%= config.bin %> <%= command.id %> . --name my-workspace',
11
+ '<%= config.bin %> <%= command.id %> ~/projects/my-hq',
12
+ ];
13
+ static args = {
14
+ path: Args.string({
15
+ description: 'Path to the workspace to register',
16
+ required: true,
17
+ }),
18
+ };
19
+ static flags = {
20
+ name: Flags.string({
21
+ char: 'n',
22
+ description: 'Custom name for the workspace (defaults to directory basename or workspace config name)',
23
+ }),
24
+ };
25
+ async run() {
26
+ const { args, flags } = await this.parse(WorkspaceAdd);
27
+ // Normalize the path
28
+ const workspacePath = normalizePath(args.path);
29
+ // Check if path exists
30
+ if (!fs.existsSync(workspacePath)) {
31
+ this.error(`Path does not exist: ${workspacePath}`);
32
+ }
33
+ // Check if it's a directory
34
+ const stats = fs.statSync(workspacePath);
35
+ if (!stats.isDirectory()) {
36
+ this.error(`Path is not a directory: ${workspacePath}`);
37
+ }
38
+ // Validate it's a valid HQ workspace
39
+ const configPath = path.join(workspacePath, '.proletariat', 'config.json');
40
+ if (!fs.existsSync(configPath)) {
41
+ this.error(`Not a valid workspace: missing .proletariat/config.json\n` +
42
+ `Run "prlt init" to create a new workspace.`);
43
+ }
44
+ // Read config to validate type
45
+ try {
46
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
47
+ if (config.type !== 'hq') {
48
+ this.error(`Invalid workspace type: ${config.type}\n` +
49
+ `Only HQ workspaces can be registered.`);
50
+ }
51
+ }
52
+ catch (error) {
53
+ this.error(`Failed to read workspace config: ${error.message}`);
54
+ }
55
+ // Check if already registered
56
+ if (isWorkspaceRegistered(workspacePath)) {
57
+ this.log(chalk.yellow(`Workspace is already registered: ${workspacePath}`));
58
+ this.log(chalk.gray('Use "prlt workspace use" to set it as active.'));
59
+ return;
60
+ }
61
+ // Determine workspace name
62
+ const workspaceName = flags.name || getWorkspaceNameFromPath(workspacePath);
63
+ // Register the workspace
64
+ try {
65
+ const entry = registerWorkspace(workspacePath, workspaceName, true);
66
+ this.log(chalk.green(`Registered workspace: ${entry.name}`));
67
+ this.log(chalk.gray(` Path: ${entry.path}`));
68
+ this.log(chalk.gray(` Registered at: ${entry.registeredAt}`));
69
+ }
70
+ catch (error) {
71
+ this.error(`Failed to register workspace: ${error.message}`);
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class WorkspaceList extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ };
8
+ run(): Promise<void>;
9
+ }