@proletariat/cli 0.2.0 → 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 +512 -253
  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,377 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import { execSync } from 'node:child_process';
5
+ import inquirer from 'inquirer';
6
+ import Database from 'better-sqlite3';
7
+ import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
8
+ import { getWorkColumnSetting, findColumnByName } from '../../lib/pmo/utils.js';
9
+ import { styles } from '../../lib/styles.js';
10
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
11
+ import { DEFAULT_EXECUTION_CONFIG, } from '../../lib/execution/types.js';
12
+ import { runExecution, isDockerRunning } from '../../lib/execution/runners.js';
13
+ import { ExecutionStorage } from '../../lib/execution/storage.js';
14
+ import { loadExecutionConfig, getTerminalApp, getShell, hasTerminalPreference, hasShellPreference } from '../../lib/execution/config.js';
15
+ import { hasDevcontainerConfig } from '../../lib/execution/devcontainer.js';
16
+ import { isGHInstalled, isGHAuthenticated, getPRFeedback, hasPendingFeedback, formatPRFeedbackForPrompt, } from '../../lib/pr/index.js';
17
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
18
+ export default class WorkRevise extends PMOCommand {
19
+ static description = 'Address PR feedback on a ticket (fetches reviews/comments and spawns agent)';
20
+ static examples = [
21
+ '<%= config.bin %> <%= command.id %> TKT-001',
22
+ '<%= config.bin %> <%= command.id %> # Interactive mode',
23
+ '<%= config.bin %> <%= command.id %> --json # Output choices as JSON',
24
+ ];
25
+ static args = {
26
+ ticketId: Args.string({
27
+ description: 'Ticket ID - prompts with dropdown if not provided',
28
+ required: false,
29
+ }),
30
+ };
31
+ static flags = {
32
+ ...pmoBaseFlags,
33
+ json: Flags.boolean({
34
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
35
+ default: false,
36
+ }),
37
+ mode: Flags.string({
38
+ char: 'm',
39
+ description: 'Runtime mode',
40
+ options: ['foreground', 'background', 'tmux', 'terminal', 'devcontainer'],
41
+ }),
42
+ executor: Flags.string({
43
+ char: 'e',
44
+ description: 'Override executor',
45
+ options: ['claude-code', 'codex', 'aider', 'custom'],
46
+ }),
47
+ force: Flags.boolean({
48
+ char: 'f',
49
+ description: 'Start even if no pending feedback',
50
+ default: false,
51
+ }),
52
+ 'run-on-host': Flags.boolean({
53
+ description: 'Run on host even if devcontainer exists (bypasses sandbox)',
54
+ default: false,
55
+ }),
56
+ session: Flags.string({
57
+ char: 's',
58
+ description: 'Session manager inside container (tmux runs agent in tmux inside container)',
59
+ options: ['tmux', 'direct'],
60
+ default: 'tmux',
61
+ }),
62
+ };
63
+ async execute() {
64
+ const { args, flags } = await this.parse(WorkRevise);
65
+ const projectId = flags.project;
66
+ // Check if JSON output mode is active
67
+ const jsonMode = shouldOutputJson(flags);
68
+ // Helper to handle errors in JSON mode
69
+ const handleError = (code, message) => {
70
+ if (jsonMode) {
71
+ outputErrorAsJson(code, message, createMetadata('work revise', flags));
72
+ this.exit(1);
73
+ }
74
+ this.error(message);
75
+ };
76
+ // Check gh CLI is available
77
+ if (!isGHInstalled() || !isGHAuthenticated()) {
78
+ return handleError('GH_NOT_AVAILABLE', 'GitHub CLI (gh) is required for fetching PR feedback.\nRun: prlt gh login');
79
+ }
80
+ // Early Docker check
81
+ if (!flags['run-on-host'] && !isDockerRunning()) {
82
+ return handleError('DOCKER_NOT_RUNNING', 'Docker is not running.\n\n' +
83
+ 'Docker is required for devcontainer execution (recommended for agent sandboxing).\n' +
84
+ 'Please start Docker Desktop and try again.\n\n' +
85
+ 'Alternatively, use --run-on-host to run directly on your machine (bypasses sandbox).');
86
+ }
87
+ // Get workspace info
88
+ let workspaceInfo;
89
+ try {
90
+ workspaceInfo = getWorkspaceInfo();
91
+ }
92
+ catch {
93
+ this.error('Not in a workspace. Run "prlt init" first.');
94
+ }
95
+ // Open database
96
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
97
+ const db = new Database(dbPath);
98
+ const executionStorage = new ExecutionStorage(db);
99
+ try {
100
+ // Get ticketId - prompt with in-review tickets
101
+ let ticketId = args.ticketId;
102
+ if (!ticketId) {
103
+ const allTickets = await this.storage.listTickets(projectId);
104
+ // Filter to done tickets that have a PR (may need revision based on PR feedback)
105
+ const reviewTickets = allTickets.filter(t => {
106
+ const isDone = t.status === 'done' || (t.statusName && t.statusName.toLowerCase().includes('done'));
107
+ const hasPR = t.metadata?.pr_url;
108
+ return isDone && hasPR;
109
+ });
110
+ if (reviewTickets.length === 0) {
111
+ db.close();
112
+ this.log(styles.info('No done tickets with PRs found.'));
113
+ this.log(styles.muted('Use "prlt work start" for new work.'));
114
+ return;
115
+ }
116
+ const { selectedTicketId } = await inquirer.prompt([
117
+ {
118
+ type: 'list',
119
+ name: 'selectedTicketId',
120
+ message: 'Select ticket to revise:',
121
+ choices: reviewTickets.map((t) => ({
122
+ name: `${t.id} - ${t.title}`,
123
+ value: t.id,
124
+ })),
125
+ },
126
+ ]);
127
+ ticketId = selectedTicketId;
128
+ }
129
+ // Get ticket
130
+ const ticket = await this.storage.getTicket(ticketId);
131
+ if (!ticket) {
132
+ db.close();
133
+ this.error(`Ticket "${ticketId}" not found.`);
134
+ }
135
+ // Get PR URL from ticket metadata
136
+ const prUrl = ticket.metadata?.pr_url;
137
+ if (!prUrl) {
138
+ db.close();
139
+ this.error(`Ticket "${ticketId}" has no PR linked.\nCreate a PR first with "prlt pr create ${ticketId}".`);
140
+ }
141
+ // Fetch PR feedback
142
+ this.log(styles.muted('Fetching PR feedback...'));
143
+ const feedback = getPRFeedback(prUrl);
144
+ if (!feedback) {
145
+ db.close();
146
+ this.error(`Could not fetch PR feedback for ${prUrl}`);
147
+ }
148
+ // Check if there's actually feedback to address
149
+ if (!hasPendingFeedback(feedback) && !flags.force) {
150
+ db.close();
151
+ this.log(styles.success('No pending feedback to address!'));
152
+ this.log(styles.muted(`PR: ${feedback.prUrl}`));
153
+ this.log(styles.muted('Use --force to start revision anyway.'));
154
+ return;
155
+ }
156
+ // Format feedback for prompt
157
+ const formattedFeedback = formatPRFeedbackForPrompt(feedback);
158
+ // Get assignee
159
+ const agentName = ticket.assignee;
160
+ if (!agentName) {
161
+ db.close();
162
+ this.error(`Ticket "${ticketId}" has no assignee. Assign an agent first.`);
163
+ }
164
+ // Check if agent exists
165
+ const agentInfo = workspaceInfo.agents.find((a) => a.name === agentName);
166
+ if (!agentInfo) {
167
+ db.close();
168
+ this.error(`Agent "${agentName}" not found in workspace.\n` +
169
+ `Add agent first with "prlt agent add ${agentName}"`);
170
+ }
171
+ // Check for running execution
172
+ const runningExecution = executionStorage.getRunningExecution(ticketId);
173
+ if (runningExecution) {
174
+ db.close();
175
+ this.error(`Ticket "${ticketId}" already has work in progress: ${runningExecution.id}\n` +
176
+ `Stop it first with "prlt work stop ${runningExecution.id}"`);
177
+ }
178
+ // Find worktree path
179
+ const agentDir = path.join(workspaceInfo.agentsPath, agentName);
180
+ if (!fs.existsSync(agentDir)) {
181
+ db.close();
182
+ this.error(`Agent directory not found at ${agentDir}.`);
183
+ }
184
+ let worktreePath = agentDir;
185
+ const agentContents = fs.readdirSync(agentDir);
186
+ const repoWorktrees = agentContents.filter(item => {
187
+ const itemPath = path.join(agentDir, item);
188
+ const gitPath = path.join(itemPath, '.git');
189
+ return fs.statSync(itemPath).isDirectory() && fs.existsSync(gitPath);
190
+ });
191
+ if (repoWorktrees.length === 1) {
192
+ worktreePath = path.join(agentDir, repoWorktrees[0]);
193
+ }
194
+ else if (repoWorktrees.length > 1) {
195
+ worktreePath = agentDir;
196
+ this.log(styles.muted(` Repos: ${repoWorktrees.join(', ')}`));
197
+ }
198
+ else {
199
+ this.log(styles.muted(` No git worktree found, using current directory`));
200
+ worktreePath = process.cwd();
201
+ }
202
+ // Get branch from ticket metadata or current branch
203
+ const branch = ticket.metadata?.pr_branch || this.getCurrentBranch(worktreePath);
204
+ // Build execution context
205
+ const hqPath = path.dirname(this.pmoPath);
206
+ const context = {
207
+ ticketId: ticket.id,
208
+ ticketTitle: ticket.title,
209
+ ticketDescription: ticket.description,
210
+ ticketSubtasks: ticket.subtasks?.map(s => ({ title: s.title, done: s.done })),
211
+ ticketPriority: ticket.priority,
212
+ ticketCategory: ticket.category,
213
+ agentName,
214
+ agentDir,
215
+ worktreePath,
216
+ branch,
217
+ hqPath,
218
+ // Revision-specific context
219
+ isRevision: true,
220
+ prFeedback: formattedFeedback,
221
+ };
222
+ // Determine execution environment and display mode
223
+ const hasDevcontainer = hasDevcontainerConfig(agentDir);
224
+ let environment = 'host';
225
+ let displayMode = 'terminal';
226
+ let sandboxed = false;
227
+ if (hasDevcontainer && !flags['run-on-host']) {
228
+ environment = 'devcontainer';
229
+ const { selectedDisplay } = await inquirer.prompt([
230
+ {
231
+ type: 'list',
232
+ name: 'selectedDisplay',
233
+ message: 'How should the agent output be displayed?',
234
+ choices: [
235
+ { name: 'terminal - New terminal window', value: 'terminal' },
236
+ { name: 'background - Runs detached, reattach with: prlt session attach', value: 'background' },
237
+ ],
238
+ default: 'terminal',
239
+ },
240
+ ]);
241
+ displayMode = selectedDisplay;
242
+ }
243
+ else if (flags.mode) {
244
+ // Host environment: terminal/background are display modes
245
+ displayMode = flags.mode;
246
+ }
247
+ // Permission mode
248
+ const { permissionMode } = await inquirer.prompt([
249
+ {
250
+ type: 'list',
251
+ name: 'permissionMode',
252
+ message: 'Permission mode for Claude Code:',
253
+ choices: [
254
+ { name: 'danger - Skip permission checks (faster for revisions)', value: 'danger' },
255
+ { name: 'safe - Requires approval for dangerous operations', value: 'safe' },
256
+ ],
257
+ default: 'danger',
258
+ },
259
+ ]);
260
+ sandboxed = permissionMode === 'safe';
261
+ const executor = flags.executor || DEFAULT_EXECUTION_CONFIG.defaultExecutor;
262
+ // Show execution info
263
+ this.log('');
264
+ this.log(styles.header(`Revising: ${ticket.id}: ${ticket.title}`));
265
+ this.log(styles.muted(` Agent: ${agentName}`));
266
+ this.log(styles.muted(` PR: ${feedback.prUrl}`));
267
+ this.log(styles.muted(` Reviews: ${feedback.reviews.length}`));
268
+ this.log(styles.muted(` Comments: ${feedback.comments.length}`));
269
+ this.log(styles.muted(` Environment: ${environment}`));
270
+ this.log('');
271
+ // Checkout branch in worktree(s)
272
+ this.log(styles.muted('Checking out branch...'));
273
+ const gitRepos = repoWorktrees.length > 0
274
+ ? repoWorktrees.map(r => path.join(agentDir, r))
275
+ : [worktreePath];
276
+ for (const repoPath of gitRepos) {
277
+ const repoName = path.basename(repoPath);
278
+ try {
279
+ execSync(`git checkout ${branch}`, {
280
+ cwd: repoPath,
281
+ stdio: 'pipe',
282
+ });
283
+ this.log(styles.muted(` ${repoName}: checked out ${branch}`));
284
+ }
285
+ catch {
286
+ this.warn(`Could not checkout ${branch} in ${repoName}`);
287
+ }
288
+ }
289
+ // Create execution record
290
+ const execution = executionStorage.createExecution({
291
+ ticketId: ticket.id,
292
+ agentName,
293
+ executor,
294
+ environment,
295
+ displayMode,
296
+ sandboxed,
297
+ branch,
298
+ });
299
+ this.log(styles.muted(` Work ID: ${execution.id}`));
300
+ this.log('');
301
+ // Move ticket back to In Progress column
302
+ const inProgressColumnName = getWorkColumnSetting(db, 'in_progress');
303
+ const board = await this.storage.getBoard(ticket.projectId);
304
+ const columnNames = board.columns.map(col => col.name);
305
+ const inProgressColumn = findColumnByName(columnNames, inProgressColumnName);
306
+ if (inProgressColumn && ticket.statusName !== inProgressColumn) {
307
+ await this.storage.moveTicket(ticket.projectId, ticket.id, inProgressColumn);
308
+ this.log(styles.muted(` Moved to: ${inProgressColumn}`));
309
+ }
310
+ await autoExportToBoard(this.pmoPath, this.storage, (msg) => this.log(styles.muted(msg)));
311
+ // Load execution config
312
+ const executionConfig = loadExecutionConfig(db);
313
+ // Configure terminal if needed (for terminal display mode)
314
+ if (displayMode === 'terminal') {
315
+ const needsTerminal = !hasTerminalPreference(db);
316
+ const needsShell = !hasShellPreference(db);
317
+ let terminalApp;
318
+ let shell;
319
+ if (needsTerminal || needsShell) {
320
+ terminalApp = await getTerminalApp(db);
321
+ shell = await getShell(db);
322
+ }
323
+ else {
324
+ terminalApp = await getTerminalApp(db);
325
+ shell = await getShell(db);
326
+ }
327
+ executionConfig.terminal.app = terminalApp;
328
+ executionConfig.shell = shell;
329
+ }
330
+ executionConfig.outputMode = 'interactive';
331
+ executionConfig.sandboxed = sandboxed;
332
+ // Run execution
333
+ this.log(styles.muted('Starting agent to address feedback...'));
334
+ const sessionManager = (flags.session || 'tmux');
335
+ const result = await runExecution(environment, context, executor, executionConfig, {
336
+ displayMode,
337
+ sessionManager: environment === 'devcontainer' ? sessionManager : undefined,
338
+ });
339
+ if (result.success) {
340
+ executionStorage.updateStatus(execution.id, 'running');
341
+ executionStorage.updateProcessInfo(execution.id, {
342
+ pid: result.pid,
343
+ containerId: result.containerId,
344
+ sessionId: result.sessionId,
345
+ logPath: result.logPath,
346
+ });
347
+ this.log('');
348
+ this.log(styles.success(`Revision started (${execution.id})`));
349
+ this.log('');
350
+ this.log(styles.muted('Commands:'));
351
+ this.log(styles.muted(` prlt work status View work status`));
352
+ this.log(styles.muted(` prlt work stop ${execution.id} Stop work`));
353
+ }
354
+ else {
355
+ executionStorage.updateStatus(execution.id, 'failed');
356
+ this.error(`Failed to start revision: ${result.error}`);
357
+ }
358
+ db.close();
359
+ }
360
+ catch (error) {
361
+ db.close();
362
+ throw error;
363
+ }
364
+ }
365
+ getCurrentBranch(cwd) {
366
+ try {
367
+ return execSync('git rev-parse --abbrev-ref HEAD', {
368
+ cwd,
369
+ encoding: 'utf-8',
370
+ stdio: ['pipe', 'pipe', 'pipe'],
371
+ }).trim();
372
+ }
373
+ catch {
374
+ return 'main';
375
+ }
376
+ }
377
+ }
@@ -0,0 +1,17 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkSpawnAll extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ 'run-on-host': import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ 'skip-permissions': import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ 'create-pr': import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ executor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
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,58 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ export default class WorkSpawnAll extends PMOCommand {
4
+ static description = 'Spawn work on all backlog tickets (alias for "work start --all")';
5
+ static examples = [
6
+ '<%= config.bin %> <%= command.id %>',
7
+ '<%= config.bin %> <%= command.id %> --skip-permissions',
8
+ '<%= config.bin %> <%= command.id %> --create-pr',
9
+ ];
10
+ static flags = {
11
+ ...pmoBaseFlags,
12
+ force: Flags.boolean({
13
+ char: 'f',
14
+ description: 'Start even if work already in progress',
15
+ default: false,
16
+ }),
17
+ 'run-on-host': Flags.boolean({
18
+ description: 'Run on host even if devcontainer exists (bypasses sandbox)',
19
+ default: false,
20
+ }),
21
+ 'skip-permissions': Flags.boolean({
22
+ description: 'Skip permission prompts (danger mode)',
23
+ default: false,
24
+ }),
25
+ 'create-pr': Flags.boolean({
26
+ description: 'Create PR when work is ready',
27
+ default: false,
28
+ }),
29
+ executor: Flags.string({
30
+ char: 'e',
31
+ description: 'Override executor',
32
+ options: ['claude-code', 'codex', 'aider', 'custom'],
33
+ }),
34
+ };
35
+ getPMOOptions() {
36
+ return { promptIfMultiple: false };
37
+ }
38
+ async execute() {
39
+ const { flags } = await this.parse(WorkSpawnAll);
40
+ // This command requires project context
41
+ const projectId = await this.requireProject();
42
+ // Build args for work start --all
43
+ // Pass --project to avoid re-prompting for project selection
44
+ const args = ['--all', '--project', projectId];
45
+ if (flags.force)
46
+ args.push('--force');
47
+ if (flags['run-on-host'])
48
+ args.push('--run-on-host');
49
+ if (flags['skip-permissions'])
50
+ args.push('--skip-permissions');
51
+ if (flags['create-pr'])
52
+ args.push('--create-pr');
53
+ if (flags.executor)
54
+ args.push('--executor', flags.executor);
55
+ // Use oclif's run method to invoke work start
56
+ await this.config.runCommand('work:start', args);
57
+ }
58
+ }
@@ -0,0 +1,29 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkSpawn extends PMOCommand {
3
+ static description: string;
4
+ static strict: boolean;
5
+ static examples: string[];
6
+ static flags: {
7
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ many: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ column: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ strategy: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ mode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ executor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ 'run-on-host': import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ 'per-ticket': import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'skip-permissions': import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
+ 'create-pr': import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
+ 'no-pr': import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ action: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ session: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
26
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ };
28
+ execute(): Promise<void>;
29
+ }