@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,200 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import * as path from 'path';
4
+ import Database from 'better-sqlite3';
5
+ import { styles } from '../../lib/styles.js';
6
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
7
+ import { ExecutionStorage, ContainerStorage } from '../../lib/execution/storage.js';
8
+ import { isDockerRunning } from '../../lib/execution/runners.js';
9
+ export default class DockerList extends Command {
10
+ static description = 'Show Docker containers from agent_work table with status';
11
+ static examples = [
12
+ '<%= config.bin %> <%= command.id %>',
13
+ '<%= config.bin %> <%= command.id %> --all',
14
+ '<%= config.bin %> <%= command.id %> --running',
15
+ ];
16
+ static flags = {
17
+ all: Flags.boolean({
18
+ char: 'a',
19
+ description: 'Show all containers (including non-devcontainer)',
20
+ default: false,
21
+ }),
22
+ running: Flags.boolean({
23
+ char: 'r',
24
+ description: 'Only show running containers',
25
+ default: false,
26
+ }),
27
+ };
28
+ async run() {
29
+ const { flags } = await this.parse(DockerList);
30
+ // Check Docker status first
31
+ if (!isDockerRunning()) {
32
+ this.log(`\n${styles.error('Docker is not running')}`);
33
+ this.log(`${styles.muted('Start Docker Desktop or the Docker daemon first.')}\n`);
34
+ return;
35
+ }
36
+ // Get workspace info
37
+ let workspaceInfo;
38
+ try {
39
+ workspaceInfo = getWorkspaceInfo();
40
+ }
41
+ catch {
42
+ this.error('Not in a workspace. Run "prlt init" first.');
43
+ }
44
+ // Open database
45
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
46
+ let db;
47
+ try {
48
+ db = new Database(dbPath);
49
+ }
50
+ catch {
51
+ this.error('Could not open workspace database.');
52
+ }
53
+ const executionStorage = new ExecutionStorage(db);
54
+ const containerStorage = new ContainerStorage(db);
55
+ try {
56
+ // Get containers tracked in agent_work (executions)
57
+ const trackedExecutions = this.getTrackedContainers(executionStorage);
58
+ // Get containers from containers table (source of truth for agent names)
59
+ const dbContainers = containerStorage.listContainers({ limit: 50 });
60
+ // Get running docker containers
61
+ const runningContainers = this.getDockerContainers(workspaceInfo.agentsPath, flags.all);
62
+ this.log(`\n${styles.header('Docker Containers')}`);
63
+ this.log('='.repeat(100));
64
+ // Display active executions from database
65
+ const activeExecutions = trackedExecutions.filter(e => e.status === 'running' || e.status === 'starting');
66
+ if (activeExecutions.length > 0) {
67
+ this.log(styles.subheader('\nActive Executions:'));
68
+ this.log(styles.muted(padEnd('ID', 15) +
69
+ padEnd('Agent', 15) +
70
+ padEnd('Ticket', 12) +
71
+ padEnd('Status', 12) +
72
+ 'Container'));
73
+ this.log('-'.repeat(80));
74
+ for (const exec of activeExecutions) {
75
+ const statusColor = getStatusColor(exec.status);
76
+ const containerId = exec.containerId ? exec.containerId.substring(0, 12) : styles.muted('none');
77
+ // Check if container is actually running in Docker
78
+ let containerStatus = '';
79
+ if (exec.containerId) {
80
+ const isRunning = runningContainers.some(c => c.id.startsWith(exec.containerId.substring(0, 12)));
81
+ containerStatus = isRunning ? styles.success(' (up)') : styles.warning(' (down)');
82
+ }
83
+ this.log(padEnd(exec.id, 15) +
84
+ padEnd(exec.agentName, 15) +
85
+ padEnd(exec.ticketId, 12) +
86
+ statusColor(padEnd(exec.status, 12)) +
87
+ containerId + containerStatus);
88
+ }
89
+ }
90
+ // Display containers from DB (with agent names - source of truth)
91
+ const filteredContainers = flags.running
92
+ ? runningContainers.filter(c => c.status.includes('Up'))
93
+ : runningContainers;
94
+ if (filteredContainers.length > 0) {
95
+ this.log(styles.subheader('\nDocker Containers' + (flags.all ? ' (all)' : ' (devcontainers)') + ':'));
96
+ this.log(styles.muted(padEnd('Container ID', 15) +
97
+ padEnd('Agent', 15) +
98
+ padEnd('Status', 15) +
99
+ 'Uptime'));
100
+ this.log('-'.repeat(70));
101
+ for (const container of filteredContainers) {
102
+ const statusColor = container.status.includes('Up') ? styles.success : styles.muted;
103
+ // Look up agent name from DB (source of truth)
104
+ const dbContainer = dbContainers.find(c => c.dockerId.startsWith(container.id.substring(0, 12)));
105
+ const agentName = dbContainer?.agentName || this.extractAgentFromImage(container.image) || container.name;
106
+ this.log(padEnd(container.id, 15) +
107
+ padEnd(agentName, 15) +
108
+ statusColor(padEnd(container.status, 15)) +
109
+ styles.muted(container.uptime));
110
+ }
111
+ }
112
+ else if (!flags.running) {
113
+ this.log(styles.muted('\nNo devcontainer Docker containers found.'));
114
+ }
115
+ else {
116
+ this.log(styles.muted('\nNo running containers found.'));
117
+ }
118
+ this.log(`\n${styles.muted('Commands:')}`);
119
+ this.log(styles.muted(' prlt docker status Check Docker daemon status'));
120
+ this.log(`${styles.muted(' prlt docker clean Remove orphaned containers')}\n`);
121
+ db.close();
122
+ }
123
+ catch (error) {
124
+ db.close();
125
+ throw error;
126
+ }
127
+ }
128
+ getTrackedContainers(executionStorage) {
129
+ // Get executions that used devcontainer environment
130
+ const executions = executionStorage.listExecutions({ limit: 50 });
131
+ return executions.filter(e => e.environment === 'devcontainer' ||
132
+ e.containerId);
133
+ }
134
+ getDockerContainers(agentsPath, showAll) {
135
+ try {
136
+ // Get containers - filter by devcontainer label unless --all
137
+ let cmd = 'docker ps -a --format "{{.ID}}|{{.Names}}|{{.Image}}|{{.Status}}|{{.Label \\"devcontainer.local_folder\\"}}"';
138
+ const output = execSync(cmd, {
139
+ encoding: 'utf-8',
140
+ stdio: ['pipe', 'pipe', 'pipe'],
141
+ }).trim();
142
+ if (!output)
143
+ return [];
144
+ const containers = [];
145
+ const lines = output.split('\n');
146
+ for (const line of lines) {
147
+ const [id, name, image, status, agentDir] = line.split('|');
148
+ // Filter to devcontainers unless --all
149
+ if (!showAll && !agentDir)
150
+ continue;
151
+ // Extract uptime from status
152
+ const uptimeMatch = status.match(/Up (.+)/);
153
+ const uptime = uptimeMatch ? uptimeMatch[1] : '-';
154
+ containers.push({
155
+ id,
156
+ name,
157
+ image,
158
+ status: status.split(' ').slice(0, 2).join(' '),
159
+ agentDir: agentDir || null,
160
+ uptime,
161
+ });
162
+ }
163
+ return containers;
164
+ }
165
+ catch {
166
+ return [];
167
+ }
168
+ }
169
+ /**
170
+ * Extract agent name from devcontainer image name (fallback only)
171
+ */
172
+ extractAgentFromImage(image) {
173
+ const match = image.match(/^vsc-([^-]+)-/);
174
+ return match ? match[1] : null;
175
+ }
176
+ }
177
+ function padEnd(str, length) {
178
+ return str.padEnd(length);
179
+ }
180
+ function truncate(str, maxLength) {
181
+ if (str.length <= maxLength)
182
+ return str;
183
+ return str.substring(0, maxLength - 2) + '..';
184
+ }
185
+ function getStatusColor(status) {
186
+ switch (status) {
187
+ case 'running':
188
+ return styles.success;
189
+ case 'starting':
190
+ return styles.warning;
191
+ case 'completed':
192
+ return styles.muted;
193
+ case 'failed':
194
+ return styles.error;
195
+ case 'stopped':
196
+ return styles.muted;
197
+ default:
198
+ return (s) => s;
199
+ }
200
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerLogs extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ follow: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ tail: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
8
+ timestamps: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ static args: {
11
+ target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,118 @@
1
+ import { Args, Command, Flags } from '@oclif/core';
2
+ import { execSync, spawn } from 'child_process';
3
+ import * as path from 'path';
4
+ import Database from 'better-sqlite3';
5
+ import { styles } from '../../lib/styles.js';
6
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
7
+ import { ExecutionStorage } from '../../lib/execution/storage.js';
8
+ import { isDockerRunning } from '../../lib/execution/runners.js';
9
+ import { resolveContainerId } from '../../lib/docker/resolve.js';
10
+ export default class DockerLogs extends Command {
11
+ static description = 'View logs from a container (by execution ID, agent name, or container ID)';
12
+ static examples = [
13
+ '<%= config.bin %> <%= command.id %> WORK-001',
14
+ '<%= config.bin %> <%= command.id %> kalanick',
15
+ '<%= config.bin %> <%= command.id %> abc123 --follow',
16
+ '<%= config.bin %> <%= command.id %> WORK-001 --tail 100',
17
+ ];
18
+ static flags = {
19
+ follow: Flags.boolean({
20
+ char: 'f',
21
+ description: 'Follow log output',
22
+ default: false,
23
+ }),
24
+ tail: Flags.integer({
25
+ char: 'n',
26
+ description: 'Number of lines to show from the end',
27
+ default: 100,
28
+ }),
29
+ timestamps: Flags.boolean({
30
+ char: 't',
31
+ description: 'Show timestamps',
32
+ default: false,
33
+ }),
34
+ };
35
+ static args = {
36
+ target: Args.string({
37
+ description: 'Execution ID (WORK-XXX), agent name, or container ID',
38
+ required: true,
39
+ }),
40
+ };
41
+ async run() {
42
+ const { args, flags } = await this.parse(DockerLogs);
43
+ if (!isDockerRunning()) {
44
+ this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
45
+ }
46
+ // Get workspace info
47
+ let workspaceInfo;
48
+ try {
49
+ workspaceInfo = getWorkspaceInfo();
50
+ }
51
+ catch {
52
+ this.error('Not in a workspace. Run "prlt init" first.');
53
+ }
54
+ // Open database
55
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
56
+ let db;
57
+ try {
58
+ db = new Database(dbPath);
59
+ }
60
+ catch {
61
+ this.error('Could not open workspace database.');
62
+ }
63
+ const executionStorage = new ExecutionStorage(db);
64
+ try {
65
+ const result = resolveContainerId(args.target, executionStorage);
66
+ if (!result.containerId) {
67
+ db.close();
68
+ this.error(result.error || 'Could not find container');
69
+ }
70
+ // Build docker logs command
71
+ const dockerArgs = ['logs'];
72
+ if (flags.follow) {
73
+ dockerArgs.push('--follow');
74
+ }
75
+ if (flags.tail) {
76
+ dockerArgs.push('--tail', String(flags.tail));
77
+ }
78
+ if (flags.timestamps) {
79
+ dockerArgs.push('--timestamps');
80
+ }
81
+ dockerArgs.push(result.containerId);
82
+ this.log(`\n${styles.header(`Logs for ${result.displayName}`)}`);
83
+ this.log(styles.muted(`Container: ${result.containerId}`));
84
+ this.log('─'.repeat(60) + '\n');
85
+ db.close();
86
+ if (flags.follow) {
87
+ // Stream logs
88
+ const proc = spawn('docker', dockerArgs, {
89
+ stdio: 'inherit',
90
+ });
91
+ proc.on('error', (err) => {
92
+ this.error(`Failed to get logs: ${err.message}`);
93
+ });
94
+ }
95
+ else {
96
+ // Get logs synchronously
97
+ try {
98
+ const output = execSync(`docker ${dockerArgs.join(' ')}`, {
99
+ encoding: 'utf-8',
100
+ stdio: ['pipe', 'pipe', 'pipe'],
101
+ maxBuffer: 10 * 1024 * 1024, // 10MB buffer
102
+ });
103
+ this.log(output);
104
+ }
105
+ catch (error) {
106
+ if (error instanceof Error && 'stderr' in error) {
107
+ this.error(`Failed to get logs: ${error.stderr}`);
108
+ }
109
+ throw error;
110
+ }
111
+ }
112
+ }
113
+ catch (error) {
114
+ db.close();
115
+ throw error;
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerPrune extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ volumes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ private showPrunePreview;
14
+ }
@@ -0,0 +1,211 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import inquirer from 'inquirer';
4
+ import { styles } from '../../lib/styles.js';
5
+ import { isDockerRunning } from '../../lib/execution/runners.js';
6
+ import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
7
+ export default class DockerPrune extends Command {
8
+ static description = 'Remove unused Docker resources (containers, images, volumes, networks)';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %>',
11
+ '<%= config.bin %> <%= command.id %> --all',
12
+ '<%= config.bin %> <%= command.id %> --volumes',
13
+ '<%= config.bin %> <%= command.id %> --dry-run',
14
+ ];
15
+ static flags = {
16
+ force: Flags.boolean({
17
+ char: 'f',
18
+ aliases: ['yes', 'y'],
19
+ description: 'Skip confirmation prompt',
20
+ default: false,
21
+ }),
22
+ 'dry-run': Flags.boolean({
23
+ char: 'd',
24
+ description: 'Show what would be removed without removing',
25
+ default: false,
26
+ }),
27
+ all: Flags.boolean({
28
+ char: 'a',
29
+ description: 'Remove all unused images, not just dangling ones',
30
+ default: false,
31
+ }),
32
+ volumes: Flags.boolean({
33
+ description: 'Also prune volumes (dangerous - data loss possible)',
34
+ default: false,
35
+ }),
36
+ json: Flags.boolean({
37
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
38
+ default: false,
39
+ }),
40
+ };
41
+ async run() {
42
+ const { flags } = await this.parse(DockerPrune);
43
+ if (!isDockerRunning()) {
44
+ this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
45
+ }
46
+ this.log(`\n${styles.header('Docker Prune')}`);
47
+ this.log('─'.repeat(60));
48
+ // Get current disk usage
49
+ this.log(styles.subheader('\nCurrent Docker disk usage:'));
50
+ try {
51
+ const dfOutput = execSync('docker system df', {
52
+ encoding: 'utf-8',
53
+ stdio: ['pipe', 'pipe', 'pipe'],
54
+ });
55
+ this.log(styles.muted(dfOutput));
56
+ }
57
+ catch {
58
+ this.log(styles.muted('Could not get disk usage info'));
59
+ }
60
+ // Show what will be pruned
61
+ this.log(styles.subheader('Will remove:'));
62
+ this.log(styles.muted(' • Stopped containers'));
63
+ this.log(styles.muted(' • Unused networks'));
64
+ if (flags.all) {
65
+ this.log(styles.muted(' • All unused images (not just dangling)'));
66
+ }
67
+ else {
68
+ this.log(styles.muted(' • Dangling images'));
69
+ }
70
+ this.log(styles.muted(' • Build cache'));
71
+ if (flags.volumes) {
72
+ this.log(styles.warning(' • Unused volumes (DATA LOSS POSSIBLE)'));
73
+ }
74
+ if (flags['dry-run']) {
75
+ this.log(`\n${styles.warning('[DRY RUN] Would prune the above resources')}\n`);
76
+ // Show what would be removed
77
+ this.showPrunePreview(flags.all, flags.volumes);
78
+ return;
79
+ }
80
+ // Confirm
81
+ if (!flags.force) {
82
+ // Check if JSON output mode is active
83
+ const jsonMode = shouldOutputJson(flags);
84
+ // Build choices once, use for both JSON and interactive modes
85
+ const confirmChoices = [
86
+ { name: 'No', value: 'false' },
87
+ { name: 'Yes', value: 'true' },
88
+ ];
89
+ const confirmMessage = flags.volumes
90
+ ? 'This will remove unused resources INCLUDING VOLUMES. Data may be lost. Continue?'
91
+ : 'Remove unused Docker resources?';
92
+ // In JSON mode, output confirmation prompt
93
+ if (jsonMode) {
94
+ outputPromptAsJson(buildPromptConfig('list', 'confirmed', confirmMessage, confirmChoices), createMetadata('docker prune', flags));
95
+ return;
96
+ }
97
+ const { confirm } = await inquirer.prompt([
98
+ {
99
+ type: 'confirm',
100
+ name: 'confirm',
101
+ message: confirmMessage,
102
+ default: false,
103
+ },
104
+ ]);
105
+ if (!confirm) {
106
+ this.log(`${styles.muted('Aborted.')}\n`);
107
+ return;
108
+ }
109
+ }
110
+ // Run prune
111
+ this.log(`\n${styles.muted('Pruning Docker resources...')}\n`);
112
+ try {
113
+ // Prune containers
114
+ this.log(styles.muted('Removing stopped containers...'));
115
+ const containerResult = execSync('docker container prune -f', {
116
+ encoding: 'utf-8',
117
+ stdio: ['pipe', 'pipe', 'pipe'],
118
+ });
119
+ this.log(styles.muted(containerResult.trim()));
120
+ // Prune networks
121
+ this.log(styles.muted('\nRemoving unused networks...'));
122
+ const networkResult = execSync('docker network prune -f', {
123
+ encoding: 'utf-8',
124
+ stdio: ['pipe', 'pipe', 'pipe'],
125
+ });
126
+ this.log(styles.muted(networkResult.trim()));
127
+ // Prune images
128
+ this.log(styles.muted('\nRemoving unused images...'));
129
+ const imageCmd = flags.all ? 'docker image prune -af' : 'docker image prune -f';
130
+ const imageResult = execSync(imageCmd, {
131
+ encoding: 'utf-8',
132
+ stdio: ['pipe', 'pipe', 'pipe'],
133
+ });
134
+ this.log(styles.muted(imageResult.trim()));
135
+ // Prune build cache
136
+ this.log(styles.muted('\nRemoving build cache...'));
137
+ const buildResult = execSync('docker builder prune -f', {
138
+ encoding: 'utf-8',
139
+ stdio: ['pipe', 'pipe', 'pipe'],
140
+ });
141
+ this.log(styles.muted(buildResult.trim()));
142
+ // Prune volumes if requested
143
+ if (flags.volumes) {
144
+ this.log(styles.warning('\nRemoving unused volumes...'));
145
+ const volumeResult = execSync('docker volume prune -f', {
146
+ encoding: 'utf-8',
147
+ stdio: ['pipe', 'pipe', 'pipe'],
148
+ });
149
+ this.log(styles.muted(volumeResult.trim()));
150
+ }
151
+ this.log(`\n${styles.success('Docker prune completed')}`);
152
+ // Show new disk usage
153
+ this.log(styles.subheader('\nNew Docker disk usage:'));
154
+ const newDfOutput = execSync('docker system df', {
155
+ encoding: 'utf-8',
156
+ stdio: ['pipe', 'pipe', 'pipe'],
157
+ });
158
+ this.log(styles.muted(newDfOutput));
159
+ }
160
+ catch (error) {
161
+ this.log(styles.error(`Prune failed: ${error instanceof Error ? error.message : error}`));
162
+ }
163
+ }
164
+ showPrunePreview(includeAllImages, includeVolumes) {
165
+ this.log(styles.subheader('Preview of resources to remove:'));
166
+ this.log('');
167
+ // Stopped containers
168
+ try {
169
+ const containers = execSync('docker ps -aq --filter "status=exited" --filter "status=created"', {
170
+ encoding: 'utf-8',
171
+ stdio: ['pipe', 'pipe', 'pipe'],
172
+ }).trim();
173
+ const containerCount = containers ? containers.split('\n').length : 0;
174
+ this.log(styles.muted(`Containers: ${containerCount} stopped container(s)`));
175
+ }
176
+ catch {
177
+ this.log(styles.muted('Containers: Unable to check'));
178
+ }
179
+ // Dangling images
180
+ try {
181
+ const imageCmd = includeAllImages
182
+ ? 'docker images -q --filter "dangling=false" | wc -l'
183
+ : 'docker images -q --filter "dangling=true" | wc -l';
184
+ const imageCount = execSync(imageCmd, {
185
+ encoding: 'utf-8',
186
+ shell: '/bin/sh',
187
+ stdio: ['pipe', 'pipe', 'pipe'],
188
+ }).trim();
189
+ const label = includeAllImages ? 'unused image(s)' : 'dangling image(s)';
190
+ this.log(styles.muted(`Images: ${imageCount} ${label}`));
191
+ }
192
+ catch {
193
+ this.log(styles.muted('Images: Unable to check'));
194
+ }
195
+ // Volumes
196
+ if (includeVolumes) {
197
+ try {
198
+ const volumes = execSync('docker volume ls -q --filter "dangling=true"', {
199
+ encoding: 'utf-8',
200
+ stdio: ['pipe', 'pipe', 'pipe'],
201
+ }).trim();
202
+ const volumeCount = volumes ? volumes.split('\n').length : 0;
203
+ this.log(styles.warning(`Volumes: ${volumeCount} unused volume(s)`));
204
+ }
205
+ catch {
206
+ this.log(styles.muted('Volumes: Unable to check'));
207
+ }
208
+ }
209
+ this.log('');
210
+ }
211
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerRestart extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ time: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
8
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ static args: {
11
+ target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ run(): Promise<void>;
14
+ }