@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,121 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import Database from 'better-sqlite3';
4
+ import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
5
+ import { getWorkColumnSetting, findColumnByName } from '../../lib/pmo/utils.js';
6
+ import { styles } from '../../lib/styles.js';
7
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
8
+ import { ExecutionStorage } from '../../lib/execution/storage.js';
9
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
10
+ export default class WorkComplete extends PMOCommand {
11
+ static description = 'Mark work as complete (moves ticket to Done column)';
12
+ static examples = [
13
+ '<%= config.bin %> <%= command.id %>',
14
+ '<%= config.bin %> <%= command.id %> TKT-001',
15
+ ];
16
+ static args = {
17
+ ticketId: Args.string({
18
+ description: 'Ticket ID - prompts with dropdown if not provided',
19
+ required: false,
20
+ }),
21
+ };
22
+ static flags = {
23
+ ...pmoBaseFlags,
24
+ json: Flags.boolean({
25
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
26
+ default: false,
27
+ }),
28
+ };
29
+ async execute() {
30
+ const { args, flags } = await this.parse(WorkComplete);
31
+ const projectId = flags.project;
32
+ // Check if JSON output mode is active
33
+ const jsonMode = shouldOutputJson(flags);
34
+ // Helper to handle errors in JSON mode
35
+ const handleError = (code, message) => {
36
+ if (jsonMode) {
37
+ outputErrorAsJson(code, message, createMetadata('work complete', flags));
38
+ this.exit(1);
39
+ }
40
+ this.error(message);
41
+ };
42
+ // Get workspace info for execution storage
43
+ let workspaceInfo;
44
+ try {
45
+ workspaceInfo = getWorkspaceInfo();
46
+ }
47
+ catch {
48
+ return handleError('NOT_IN_WORKSPACE', 'Not in a workspace. Run "prlt init" first.');
49
+ }
50
+ // Open database for execution storage
51
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
52
+ const db = new Database(dbPath);
53
+ const executionStorage = new ExecutionStorage(db);
54
+ try {
55
+ // Get ticketId - prompt if not provided
56
+ let ticketId = args.ticketId;
57
+ if (!ticketId) {
58
+ // Get all tickets that could be completed (in progress / started), optionally filtered by project
59
+ const allTickets = await this.storage.listTickets(projectId);
60
+ const completableTickets = allTickets.filter(t => t.statusCategory === 'started' || (t.statusName && t.statusName.toLowerCase().includes('progress')));
61
+ if (completableTickets.length === 0) {
62
+ db.close();
63
+ if (jsonMode) {
64
+ outputErrorAsJson('NO_COMPLETABLE_WORK', 'No in-progress work found.', createMetadata('work complete', flags));
65
+ return;
66
+ }
67
+ this.log(styles.info('No in-progress work found.'));
68
+ return;
69
+ }
70
+ const selected = await this.selectFromList({
71
+ message: 'Select work to mark as complete:',
72
+ items: completableTickets,
73
+ getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
74
+ getValue: (t) => t.id,
75
+ getCommand: (t) => `prlt work complete ${t.id} --json`,
76
+ jsonMode: jsonMode ? { flags, commandName: 'work complete' } : null,
77
+ });
78
+ if (!selected) {
79
+ db.close();
80
+ return;
81
+ }
82
+ ticketId = selected;
83
+ }
84
+ // Get ticket
85
+ const ticket = await this.storage.getTicket(ticketId);
86
+ if (!ticket) {
87
+ db.close();
88
+ this.error(`Ticket "${ticketId}" not found.`);
89
+ }
90
+ // Get configured column name (from pmo_settings or default)
91
+ const targetColumnName = getWorkColumnSetting(db, 'done');
92
+ const board = await this.storage.getBoard(ticket.projectId);
93
+ const columnNames = board.columns.map(col => col.name);
94
+ const doneColumn = findColumnByName(columnNames, targetColumnName);
95
+ if (!doneColumn) {
96
+ db.close();
97
+ this.error(`No "${targetColumnName}" column found in board configuration. Configure with: prlt config set column_done <column-name>`);
98
+ }
99
+ const previousColumn = ticket.statusName;
100
+ // Move to Done column (moveTicket also updates status_id)
101
+ await this.storage.moveTicket(ticket.projectId, ticketId, doneColumn);
102
+ // Auto-export to board.md if configured
103
+ await autoExportToBoard(this.pmoPath, this.storage);
104
+ // Mark any running executions for this ticket as completed
105
+ const runningExecution = executionStorage.getRunningExecution(ticketId);
106
+ if (runningExecution) {
107
+ executionStorage.updateStatus(runningExecution.id, 'completed');
108
+ this.log(styles.muted(` Execution ${runningExecution.id} marked as completed`));
109
+ }
110
+ db.close();
111
+ this.log(styles.success(`Work complete: ${ticketId}`));
112
+ this.log(styles.muted(` Title: ${ticket.title}`));
113
+ this.log(styles.muted(` From: ${previousColumn}`));
114
+ this.log(styles.muted(` To: ${doneColumn}`));
115
+ }
116
+ catch (error) {
117
+ db.close();
118
+ throw error;
119
+ }
120
+ }
121
+ }
@@ -0,0 +1,13 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class Work extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ protected getPMOOptions(): {
10
+ promptIfMultiple: boolean;
11
+ };
12
+ execute(): Promise<void>;
13
+ }
@@ -0,0 +1,70 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
3
+ import { shouldOutputJson, } from '../../lib/prompt-json.js';
4
+ export default class Work extends PMOCommand {
5
+ static description = 'Interactive menu for work operations (ownership, assignment, execution)';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ ];
9
+ static flags = {
10
+ ...pmoBaseFlags,
11
+ json: Flags.boolean({
12
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
13
+ default: false,
14
+ }),
15
+ };
16
+ getPMOOptions() {
17
+ // Prompt for project selection so we can pass it to subcommands
18
+ return { promptIfMultiple: true };
19
+ }
20
+ async execute() {
21
+ const { flags } = await this.parse(Work);
22
+ // This command requires project context - get it once and reuse
23
+ const projectId = await this.requireProject();
24
+ // Check if JSON output mode is active
25
+ const jsonMode = shouldOutputJson(flags);
26
+ // Define choices once, use for both JSON and interactive modes
27
+ // Execution actions first (most common), then ownership
28
+ // Each choice includes the full command for AI agents to execute
29
+ const menuChoices = [
30
+ { id: 'start', name: 'Start work (launch single agent)', command: `prlt work start -P ${projectId} --json` },
31
+ { id: 'spawn', name: 'Spawn work (batch by column)', command: `prlt work spawn -P ${projectId} --json` },
32
+ { id: 'watch', name: 'Watch column (auto-spawn)', command: `prlt work watch -P ${projectId} --json` },
33
+ { id: 'ready', name: 'Mark work ready for review', command: `prlt work ready -P ${projectId} --json` },
34
+ { id: 'complete', name: 'Mark work complete', command: `prlt work complete -P ${projectId} --json` },
35
+ { id: 'cancel', name: 'Cancel', command: '' },
36
+ ];
37
+ const message = 'Work Operations - What would you like to do?';
38
+ const action = await this.selectFromList({
39
+ message: '🔨 ' + message,
40
+ items: menuChoices,
41
+ getName: (c) => c.name,
42
+ getValue: (c) => c.id,
43
+ getCommand: (c) => c.command,
44
+ jsonMode: jsonMode ? { flags, commandName: 'work' } : null,
45
+ });
46
+ if (action === 'cancel' || !action) {
47
+ return;
48
+ }
49
+ // Run the selected subcommand
50
+ // Pass --project to avoid re-prompting for project selection
51
+ const projectArgs = ['--project', projectId];
52
+ switch (action) {
53
+ case 'start':
54
+ await this.config.runCommand('work:start', projectArgs);
55
+ break;
56
+ case 'spawn':
57
+ await this.config.runCommand('work:spawn', projectArgs);
58
+ break;
59
+ case 'watch':
60
+ await this.config.runCommand('work:watch', projectArgs);
61
+ break;
62
+ case 'ready':
63
+ await this.config.runCommand('work:ready', projectArgs);
64
+ break;
65
+ case 'complete':
66
+ await this.config.runCommand('work:complete', projectArgs);
67
+ break;
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,24 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkReady extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ pr: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ draft: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ 'no-pr': import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ execute(): Promise<void>;
16
+ /**
17
+ * Check if we should offer PR creation (gh is available, on a feature branch, etc.)
18
+ */
19
+ private shouldOfferPRCreation;
20
+ /**
21
+ * Handle PR creation for the ticket.
22
+ */
23
+ private handlePRCreation;
24
+ }
@@ -0,0 +1,290 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import * as fs from 'node:fs';
4
+ import Database from 'better-sqlite3';
5
+ import inquirer from 'inquirer';
6
+ import { PMOCommand, pmoBaseFlags, autoExportToBoard } from '../../lib/pmo/index.js';
7
+ import { getWorkColumnSetting, findColumnByName } from '../../lib/pmo/utils.js';
8
+ import { styles } from '../../lib/styles.js';
9
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
10
+ import { ExecutionStorage } from '../../lib/execution/storage.js';
11
+ import { isGHInstalled, isGHAuthenticated, getCurrentBranch, getDefaultBaseBranch, hasBranchBeenPushed, pushBranch, hasUnpushedCommits, getCommitLog, createPR, getPRForBranch, generatePRTitle, generatePRBody, } from '../../lib/pr/index.js';
12
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
13
+ export default class WorkReady extends PMOCommand {
14
+ static description = 'Mark work as ready for review (moves ticket to In Review column)';
15
+ static examples = [
16
+ '<%= config.bin %> <%= command.id %>',
17
+ '<%= config.bin %> <%= command.id %> TKT-001',
18
+ '<%= config.bin %> <%= command.id %> --pr',
19
+ '<%= config.bin %> <%= command.id %> TKT-001 --pr --draft',
20
+ '<%= config.bin %> <%= command.id %> --json # Output choices as JSON',
21
+ ];
22
+ static args = {
23
+ ticketId: Args.string({
24
+ description: 'Ticket ID - prompts with dropdown if not provided',
25
+ required: false,
26
+ }),
27
+ };
28
+ static flags = {
29
+ ...pmoBaseFlags,
30
+ json: Flags.boolean({
31
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
32
+ default: false,
33
+ }),
34
+ pr: Flags.boolean({
35
+ description: 'Create a pull request for this work',
36
+ default: false,
37
+ }),
38
+ draft: Flags.boolean({
39
+ description: 'Create PR as draft (only with --pr)',
40
+ default: false,
41
+ }),
42
+ 'no-pr': Flags.boolean({
43
+ description: 'Skip PR creation prompt',
44
+ default: false,
45
+ }),
46
+ };
47
+ async execute() {
48
+ const { args, flags } = await this.parse(WorkReady);
49
+ const projectId = flags.project;
50
+ // Check if JSON output mode is active
51
+ const jsonMode = shouldOutputJson(flags);
52
+ // Helper to handle errors in JSON mode
53
+ const handleError = (code, message) => {
54
+ if (jsonMode) {
55
+ outputErrorAsJson(code, message, createMetadata('work ready', flags));
56
+ this.exit(1);
57
+ }
58
+ this.error(message);
59
+ };
60
+ // Get workspace info for execution storage
61
+ let workspaceInfo;
62
+ try {
63
+ workspaceInfo = getWorkspaceInfo();
64
+ }
65
+ catch {
66
+ return handleError('NOT_IN_WORKSPACE', 'Not in a workspace. Run "prlt init" first.');
67
+ }
68
+ // Open database for execution storage
69
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
70
+ const db = new Database(dbPath);
71
+ const executionStorage = new ExecutionStorage(db);
72
+ try {
73
+ // Get ticketId - prompt if not provided
74
+ let ticketId = args.ticketId;
75
+ if (!ticketId) {
76
+ // Get all in-progress (started) tickets for selection, optionally filtered by project
77
+ const allTickets = await this.storage.listTickets(projectId);
78
+ const inProgressTickets = allTickets.filter(t => t.statusCategory === 'started' || (t.statusName && t.statusName.toLowerCase().includes('progress')));
79
+ if (inProgressTickets.length === 0) {
80
+ db.close();
81
+ if (jsonMode) {
82
+ outputErrorAsJson('NO_IN_PROGRESS_WORK', 'No in-progress work found.', createMetadata('work ready', flags));
83
+ return;
84
+ }
85
+ this.log(styles.info('No in-progress work found.'));
86
+ return;
87
+ }
88
+ const selected = await this.selectFromList({
89
+ message: 'Select work to mark as ready for review:',
90
+ items: inProgressTickets,
91
+ getName: (t) => `${t.id} - ${t.title} (${t.statusName})`,
92
+ getValue: (t) => t.id,
93
+ getCommand: (t) => `prlt work ready ${t.id} --json`,
94
+ jsonMode: jsonMode ? { flags, commandName: 'work ready' } : null,
95
+ });
96
+ if (!selected) {
97
+ db.close();
98
+ return;
99
+ }
100
+ ticketId = selected;
101
+ }
102
+ // Get ticket
103
+ const ticket = await this.storage.getTicket(ticketId);
104
+ if (!ticket) {
105
+ db.close();
106
+ this.error(`Ticket "${ticketId}" not found.`);
107
+ }
108
+ // Get configured column name (from pmo_settings or default)
109
+ // In Linear-style workflow, "ready" moves ticket to Done (review is implicit via PR)
110
+ const targetColumnName = getWorkColumnSetting(db, 'done');
111
+ const board = await this.storage.getBoard(ticket.projectId);
112
+ const columnNames = board.columns.map(col => col.name);
113
+ const doneColumn = findColumnByName(columnNames, targetColumnName);
114
+ if (!doneColumn) {
115
+ db.close();
116
+ this.error(`No "${targetColumnName}" column found in board configuration. Configure with: prlt config set column_done <column-name>`);
117
+ }
118
+ const previousColumn = ticket.statusName;
119
+ // Move to Done column (moveTicket also updates status_id)
120
+ await this.storage.moveTicket(ticket.projectId, ticketId, doneColumn);
121
+ // Auto-export to board.md if configured
122
+ await autoExportToBoard(this.pmoPath, this.storage);
123
+ // Mark any running executions for this ticket as completed
124
+ const runningExecution = executionStorage.getRunningExecution(ticketId);
125
+ if (runningExecution) {
126
+ executionStorage.updateStatus(runningExecution.id, 'completed');
127
+ this.log(styles.muted(` Execution ${runningExecution.id} marked as completed`));
128
+ }
129
+ // Handle PR creation
130
+ let prUrl;
131
+ const shouldCreatePR = flags.pr || (!flags['no-pr'] && await this.shouldOfferPRCreation());
132
+ if (shouldCreatePR) {
133
+ // Get branch and worktree path from the execution record
134
+ const branch = runningExecution?.branch;
135
+ const agentName = runningExecution?.agentName;
136
+ let worktreePath;
137
+ if (agentName) {
138
+ // Get agent's worktree path
139
+ if (process.env.DEVCONTAINER === 'true') {
140
+ // In devcontainer, look for repo directories inside /workspace
141
+ const entries = fs.readdirSync('/workspace', { withFileTypes: true });
142
+ const repoDirs = entries.filter((e) => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules');
143
+ if (repoDirs.length > 0) {
144
+ // Use the first repo directory (typically proletariat-{agentName})
145
+ worktreePath = path.join('/workspace', repoDirs[0].name);
146
+ }
147
+ }
148
+ else {
149
+ const agentsPath = path.join(workspaceInfo.path, 'agents', 'staff');
150
+ const agentDir = path.join(agentsPath, agentName);
151
+ // Look for repo directories inside agent dir
152
+ const entries = fs.readdirSync(agentDir, { withFileTypes: true });
153
+ const repoDirs = entries.filter((e) => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules');
154
+ if (repoDirs.length > 0) {
155
+ // Use the first repo directory (typically the main worktree)
156
+ worktreePath = path.join(agentDir, repoDirs[0].name);
157
+ }
158
+ }
159
+ }
160
+ prUrl = await this.handlePRCreation(ticket, flags.draft, branch, worktreePath);
161
+ if (prUrl) {
162
+ // Store PR URL in ticket metadata
163
+ await this.storage.updateTicket(ticketId, {
164
+ metadata: {
165
+ ...ticket.metadata,
166
+ pr_url: prUrl,
167
+ },
168
+ });
169
+ }
170
+ }
171
+ db.close();
172
+ this.log(styles.success(`Work ready: ${ticketId}`));
173
+ this.log(styles.muted(` Title: ${ticket.title}`));
174
+ this.log(styles.muted(` From: ${previousColumn}`));
175
+ this.log(styles.muted(` To: ${doneColumn}`));
176
+ if (prUrl) {
177
+ this.log(styles.muted(` PR: ${prUrl}`));
178
+ }
179
+ }
180
+ catch (error) {
181
+ db.close();
182
+ throw error;
183
+ }
184
+ }
185
+ /**
186
+ * Check if we should offer PR creation (gh is available, on a feature branch, etc.)
187
+ */
188
+ async shouldOfferPRCreation() {
189
+ // Check if gh CLI is available
190
+ if (!isGHInstalled() || !isGHAuthenticated()) {
191
+ return false;
192
+ }
193
+ // Check if we're on a feature branch (not main/master)
194
+ const currentBranch = getCurrentBranch();
195
+ if (!currentBranch) {
196
+ return false;
197
+ }
198
+ const baseBranch = getDefaultBaseBranch();
199
+ if (currentBranch === baseBranch) {
200
+ return false;
201
+ }
202
+ // Check if PR already exists
203
+ const existingPR = getPRForBranch(currentBranch);
204
+ if (existingPR) {
205
+ this.log(styles.muted(` PR already exists: ${existingPR.url}`));
206
+ return false;
207
+ }
208
+ // Prompt user
209
+ const { createPR: wantPR } = await inquirer.prompt([{
210
+ type: 'list',
211
+ name: 'createPR',
212
+ message: 'Create a pull request for this work?',
213
+ choices: [
214
+ { name: 'Yes', value: true },
215
+ { name: 'No', value: false },
216
+ ],
217
+ default: true,
218
+ }]);
219
+ return wantPR;
220
+ }
221
+ /**
222
+ * Handle PR creation for the ticket.
223
+ */
224
+ async handlePRCreation(ticket, draft, branchFromExecution, worktreePath) {
225
+ // Use branch from execution record if available, otherwise try to detect
226
+ const currentBranch = branchFromExecution || getCurrentBranch();
227
+ if (!currentBranch) {
228
+ this.log(styles.warning('Could not determine current branch. Skipping PR creation.'));
229
+ return undefined;
230
+ }
231
+ // If we have a worktree path, cd to it for git operations
232
+ const originalCwd = process.cwd();
233
+ if (worktreePath) {
234
+ try {
235
+ process.chdir(worktreePath);
236
+ }
237
+ catch {
238
+ this.log(styles.warning(`Could not access worktree at ${worktreePath}. Skipping PR creation.`));
239
+ return undefined;
240
+ }
241
+ }
242
+ try {
243
+ const baseBranch = getDefaultBaseBranch();
244
+ // Push branch if needed
245
+ if (!hasBranchBeenPushed(currentBranch)) {
246
+ this.log(styles.muted(` Pushing branch to origin...`));
247
+ if (!pushBranch(currentBranch)) {
248
+ this.log(styles.warning('Failed to push branch. Skipping PR creation.'));
249
+ return undefined;
250
+ }
251
+ }
252
+ else if (hasUnpushedCommits(currentBranch)) {
253
+ this.log(styles.muted(` Pushing unpushed commits...`));
254
+ if (!pushBranch(currentBranch)) {
255
+ this.log(styles.warning('Failed to push commits. Skipping PR creation.'));
256
+ return undefined;
257
+ }
258
+ }
259
+ // Generate PR content
260
+ const prTitle = generatePRTitle(ticket.id, ticket.title);
261
+ const commits = getCommitLog(baseBranch);
262
+ const prBody = generatePRBody({
263
+ ticketId: ticket.id,
264
+ ticketTitle: ticket.title,
265
+ ticketDescription: ticket.description,
266
+ commits: commits.slice(0, 10),
267
+ });
268
+ // Create PR
269
+ this.log(styles.muted(` Creating pull request...`));
270
+ const result = createPR({
271
+ title: prTitle,
272
+ body: prBody,
273
+ base: baseBranch,
274
+ draft,
275
+ });
276
+ if (!result.success) {
277
+ this.log(styles.warning(`Failed to create PR: ${result.error}`));
278
+ return undefined;
279
+ }
280
+ this.log(styles.success(` PR #${result.number} created`));
281
+ return result.url;
282
+ }
283
+ finally {
284
+ // Restore original cwd
285
+ if (worktreePath) {
286
+ process.chdir(originalCwd);
287
+ }
288
+ }
289
+ }
290
+ }
@@ -0,0 +1,19 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class WorkRevise extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ ticketId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ mode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ executor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ 'run-on-host': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ session: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ execute(): Promise<void>;
18
+ private getCurrentBranch;
19
+ }