@proletariat/cli 0.1.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/README.md +510 -255
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +104 -52
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -139
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -173
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -212
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -140
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,129 @@
1
+ import { Args, 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 inquirer from 'inquirer';
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 { isDockerRunning } from '../../lib/execution/runners.js';
10
+ import { resolveContainerId, containerExists, sanitizeContainerId } from '../../lib/docker/resolve.js';
11
+ import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
12
+ export default class DockerRestart extends Command {
13
+ static description = 'Restart a container (by execution ID, agent name, or container ID)';
14
+ static examples = [
15
+ '<%= config.bin %> <%= command.id %> WORK-001',
16
+ '<%= config.bin %> <%= command.id %> kalanick',
17
+ '<%= config.bin %> <%= command.id %> abc123 --force',
18
+ ];
19
+ static flags = {
20
+ force: Flags.boolean({
21
+ char: 'f',
22
+ aliases: ['yes', 'y'],
23
+ description: 'Skip confirmation prompt',
24
+ default: false,
25
+ }),
26
+ time: Flags.integer({
27
+ char: 't',
28
+ description: 'Seconds to wait before killing the container during stop',
29
+ default: 10,
30
+ }),
31
+ json: Flags.boolean({
32
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
33
+ default: false,
34
+ }),
35
+ };
36
+ static args = {
37
+ target: Args.string({
38
+ description: 'Execution ID (WORK-XXX), agent name, or container ID',
39
+ required: true,
40
+ }),
41
+ };
42
+ async run() {
43
+ const { args, flags } = await this.parse(DockerRestart);
44
+ if (!isDockerRunning()) {
45
+ this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
46
+ }
47
+ // Get workspace info
48
+ let workspaceInfo;
49
+ try {
50
+ workspaceInfo = getWorkspaceInfo();
51
+ }
52
+ catch {
53
+ this.error('Not in a workspace. Run "prlt init" first.');
54
+ }
55
+ // Open database
56
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
57
+ let db;
58
+ try {
59
+ db = new Database(dbPath);
60
+ }
61
+ catch {
62
+ this.error('Could not open workspace database.');
63
+ }
64
+ const executionStorage = new ExecutionStorage(db);
65
+ try {
66
+ const result = resolveContainerId(args.target, executionStorage);
67
+ if (!result.containerId) {
68
+ db.close();
69
+ this.error(result.error || 'Could not find container');
70
+ }
71
+ // Check if container exists
72
+ if (!containerExists(result.containerId)) {
73
+ db.close();
74
+ this.error(`Container ${result.displayName} does not exist`);
75
+ }
76
+ this.log(`\n${styles.header('Restart Container')}`);
77
+ this.log(styles.muted(`Target: ${result.displayName}`));
78
+ this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}\n`));
79
+ // Confirm
80
+ if (!flags.force) {
81
+ // Check if JSON output mode is active
82
+ const jsonMode = shouldOutputJson(flags);
83
+ // Build choices once, use for both JSON and interactive modes
84
+ const confirmChoices = [
85
+ { name: 'Yes', value: 'true' },
86
+ { name: 'No', value: 'false' },
87
+ ];
88
+ const confirmMessage = `Restart container ${result.displayName}?`;
89
+ // In JSON mode, output confirmation prompt
90
+ if (jsonMode) {
91
+ outputPromptAsJson(buildPromptConfig('list', 'confirmed', confirmMessage, confirmChoices), createMetadata('docker restart', flags));
92
+ db.close();
93
+ return;
94
+ }
95
+ const { confirm } = await inquirer.prompt([
96
+ {
97
+ type: 'confirm',
98
+ name: 'confirm',
99
+ message: confirmMessage,
100
+ default: true,
101
+ },
102
+ ]);
103
+ if (!confirm) {
104
+ this.log(`${styles.muted('Aborted.')}\n`);
105
+ db.close();
106
+ return;
107
+ }
108
+ }
109
+ // Restart container
110
+ this.log(styles.muted(`Restarting container (timeout: ${flags.time}s)...`));
111
+ try {
112
+ const safeId = sanitizeContainerId(result.containerId);
113
+ execSync(`docker restart -t ${flags.time} ${safeId}`, {
114
+ stdio: ['pipe', 'pipe', 'pipe'],
115
+ timeout: (flags.time + 30) * 1000, // Extra time for startup
116
+ });
117
+ this.log(`${styles.success('Container restarted successfully')}\n`);
118
+ }
119
+ catch (error) {
120
+ this.log(`${styles.error(`Failed to restart container: ${error instanceof Error ? error.message : error}`)}\n`);
121
+ }
122
+ db.close();
123
+ }
124
+ catch (error) {
125
+ db.close();
126
+ throw error;
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerShell extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ shell: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ user: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ workdir: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ static args: {
11
+ target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,103 @@
1
+ import { Args, Command, Flags } from '@oclif/core';
2
+ import { 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, isContainerRunning } from '../../lib/docker/resolve.js';
10
+ export default class DockerShell extends Command {
11
+ static description = 'Open a shell in a running 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 --shell /bin/bash',
16
+ ];
17
+ static flags = {
18
+ shell: Flags.string({
19
+ char: 's',
20
+ description: 'Shell to use',
21
+ default: '/bin/sh',
22
+ }),
23
+ user: Flags.string({
24
+ char: 'u',
25
+ description: 'User to run as',
26
+ }),
27
+ workdir: Flags.string({
28
+ char: 'w',
29
+ description: 'Working directory inside the container',
30
+ }),
31
+ };
32
+ static args = {
33
+ target: Args.string({
34
+ description: 'Execution ID (WORK-XXX), agent name, or container ID',
35
+ required: true,
36
+ }),
37
+ };
38
+ async run() {
39
+ const { args, flags } = await this.parse(DockerShell);
40
+ if (!isDockerRunning()) {
41
+ this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
42
+ }
43
+ // Get workspace info
44
+ let workspaceInfo;
45
+ try {
46
+ workspaceInfo = getWorkspaceInfo();
47
+ }
48
+ catch {
49
+ this.error('Not in a workspace. Run "prlt init" first.');
50
+ }
51
+ // Open database
52
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
53
+ let db;
54
+ try {
55
+ db = new Database(dbPath);
56
+ }
57
+ catch {
58
+ this.error('Could not open workspace database.');
59
+ }
60
+ const executionStorage = new ExecutionStorage(db);
61
+ try {
62
+ const result = resolveContainerId(args.target, executionStorage);
63
+ if (!result.containerId) {
64
+ db.close();
65
+ this.error(result.error || 'Could not find container');
66
+ }
67
+ // Check if container is running
68
+ if (!isContainerRunning(result.containerId)) {
69
+ db.close();
70
+ this.error(`Container ${result.displayName} is not running. Start it first or use 'docker restart'.`);
71
+ }
72
+ this.log(`\n${styles.header(`Shell into ${result.displayName}`)}`);
73
+ this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}`));
74
+ this.log(styles.muted(`Shell: ${flags.shell}`));
75
+ this.log('─'.repeat(50) + '\n');
76
+ db.close();
77
+ // Build docker exec command
78
+ const dockerArgs = ['exec', '-it'];
79
+ if (flags.user) {
80
+ dockerArgs.push('--user', flags.user);
81
+ }
82
+ if (flags.workdir) {
83
+ dockerArgs.push('--workdir', flags.workdir);
84
+ }
85
+ dockerArgs.push(result.containerId, flags.shell);
86
+ // Spawn interactive shell
87
+ const proc = spawn('docker', dockerArgs, {
88
+ stdio: 'inherit',
89
+ });
90
+ proc.on('error', (err) => {
91
+ this.error(`Failed to open shell: ${err.message}`);
92
+ });
93
+ proc.on('exit', (code) => {
94
+ this.log('');
95
+ this.log(styles.muted(`Shell exited with code ${code}`));
96
+ });
97
+ }
98
+ catch (error) {
99
+ db.close();
100
+ throw error;
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,12 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerStart extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ attach: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ };
8
+ static args: {
9
+ target: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,92 @@
1
+ import { Args, 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 } from '../../lib/execution/storage.js';
8
+ import { isDockerRunning } from '../../lib/execution/runners.js';
9
+ import { resolveContainerId, isContainerRunning, sanitizeContainerId } from '../../lib/docker/resolve.js';
10
+ export default class DockerStart extends Command {
11
+ static description = 'Start a stopped 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',
16
+ ];
17
+ static flags = {
18
+ attach: Flags.boolean({
19
+ char: 'a',
20
+ description: 'Attach to container after starting',
21
+ default: false,
22
+ }),
23
+ };
24
+ static args = {
25
+ target: Args.string({
26
+ description: 'Execution ID (WORK-XXX), agent name, or container ID',
27
+ required: true,
28
+ }),
29
+ };
30
+ async run() {
31
+ const { args, flags } = await this.parse(DockerStart);
32
+ if (!isDockerRunning()) {
33
+ this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
34
+ }
35
+ // Get workspace info
36
+ let workspaceInfo;
37
+ try {
38
+ workspaceInfo = getWorkspaceInfo();
39
+ }
40
+ catch {
41
+ this.error('Not in a workspace. Run "prlt init" first.');
42
+ }
43
+ // Open database
44
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
45
+ let db;
46
+ try {
47
+ db = new Database(dbPath);
48
+ }
49
+ catch {
50
+ this.error('Could not open workspace database.');
51
+ }
52
+ const executionStorage = new ExecutionStorage(db);
53
+ try {
54
+ const result = resolveContainerId(args.target, executionStorage);
55
+ if (!result.containerId) {
56
+ db.close();
57
+ this.error(result.error || 'Could not find container');
58
+ }
59
+ // Check if container is already running
60
+ if (isContainerRunning(result.containerId)) {
61
+ this.log(`\n${styles.warning(`Container ${result.displayName} is already running`)}\n`);
62
+ db.close();
63
+ return;
64
+ }
65
+ this.log(`\n${styles.header('Start Container')}`);
66
+ this.log(styles.muted(`Target: ${result.displayName}`));
67
+ this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}\n`));
68
+ // Start container
69
+ this.log(styles.muted('Starting container...'));
70
+ try {
71
+ const attachFlag = flags.attach ? '-a' : '';
72
+ const safeId = sanitizeContainerId(result.containerId);
73
+ execSync(`docker start ${attachFlag} ${safeId}`, {
74
+ stdio: flags.attach ? 'inherit' : ['pipe', 'pipe', 'pipe'],
75
+ });
76
+ // Update execution status if we have an execution ID
77
+ if (result.executionId) {
78
+ executionStorage.updateStatus(result.executionId, 'running');
79
+ }
80
+ this.log(`${styles.success('Container started successfully')}\n`);
81
+ }
82
+ catch (error) {
83
+ this.log(`${styles.error(`Failed to start container: ${error instanceof Error ? error.message : error}`)}\n`);
84
+ }
85
+ db.close();
86
+ }
87
+ catch (error) {
88
+ db.close();
89
+ throw error;
90
+ }
91
+ }
92
+ }
@@ -0,0 +1,7 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerStatus extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {};
6
+ run(): Promise<void>;
7
+ }
@@ -0,0 +1,40 @@
1
+ import { Command } from '@oclif/core';
2
+ import { execSync } from 'child_process';
3
+ import { styles } from '../../lib/styles.js';
4
+ import { isDockerRunning } from '../../lib/execution/runners.js';
5
+ export default class DockerStatus extends Command {
6
+ static description = 'Check if Docker daemon is running';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %>',
9
+ ];
10
+ static flags = {};
11
+ async run() {
12
+ this.log(`\n${styles.header('Docker Status')}`);
13
+ this.log('─'.repeat(50));
14
+ const running = isDockerRunning();
15
+ if (running) {
16
+ this.log(`${styles.success('Running')} Docker daemon is available`);
17
+ // Get more details
18
+ try {
19
+ const version = execSync('docker version --format "{{.Server.Version}}"', {
20
+ encoding: 'utf-8',
21
+ stdio: ['pipe', 'pipe', 'pipe'],
22
+ }).trim();
23
+ const info = execSync('docker info --format "{{.Containers}} containers ({{.ContainersRunning}} running)"', {
24
+ encoding: 'utf-8',
25
+ stdio: ['pipe', 'pipe', 'pipe'],
26
+ }).trim();
27
+ this.log(`\n${styles.muted(` Version: ${version}`)}`);
28
+ this.log(styles.muted(` ${info}\n`));
29
+ }
30
+ catch {
31
+ // Ignore errors getting additional info
32
+ this.log('');
33
+ }
34
+ }
35
+ else {
36
+ this.log(`${styles.error('Not Running')} Docker daemon is not available\n`);
37
+ this.log(`${styles.muted('Start Docker Desktop or the Docker daemon to use devcontainer features.')}\n`);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerStop 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
+ }
@@ -0,0 +1,134 @@
1
+ import { Args, 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 inquirer from 'inquirer';
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 { isDockerRunning } from '../../lib/execution/runners.js';
10
+ import { resolveContainerId, isContainerRunning, sanitizeContainerId } from '../../lib/docker/resolve.js';
11
+ import { shouldOutputJson, outputPromptAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
12
+ export default class DockerStop extends Command {
13
+ static description = 'Stop a running container (by execution ID, agent name, or container ID)';
14
+ static examples = [
15
+ '<%= config.bin %> <%= command.id %> WORK-001',
16
+ '<%= config.bin %> <%= command.id %> kalanick',
17
+ '<%= config.bin %> <%= command.id %> abc123 --force',
18
+ ];
19
+ static flags = {
20
+ force: Flags.boolean({
21
+ char: 'f',
22
+ aliases: ['yes', 'y'],
23
+ description: 'Skip confirmation prompt',
24
+ default: false,
25
+ }),
26
+ time: Flags.integer({
27
+ char: 't',
28
+ description: 'Seconds to wait before killing the container',
29
+ default: 10,
30
+ }),
31
+ json: Flags.boolean({
32
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
33
+ default: false,
34
+ }),
35
+ };
36
+ static args = {
37
+ target: Args.string({
38
+ description: 'Execution ID (WORK-XXX), agent name, or container ID',
39
+ required: true,
40
+ }),
41
+ };
42
+ async run() {
43
+ const { args, flags } = await this.parse(DockerStop);
44
+ if (!isDockerRunning()) {
45
+ this.error('Docker is not running. Start Docker Desktop or the Docker daemon first.');
46
+ }
47
+ // Get workspace info
48
+ let workspaceInfo;
49
+ try {
50
+ workspaceInfo = getWorkspaceInfo();
51
+ }
52
+ catch {
53
+ this.error('Not in a workspace. Run "prlt init" first.');
54
+ }
55
+ // Open database
56
+ const dbPath = path.join(workspaceInfo.path, '.proletariat', 'workspace.db');
57
+ let db;
58
+ try {
59
+ db = new Database(dbPath);
60
+ }
61
+ catch {
62
+ this.error('Could not open workspace database.');
63
+ }
64
+ const executionStorage = new ExecutionStorage(db);
65
+ try {
66
+ const result = resolveContainerId(args.target, executionStorage);
67
+ if (!result.containerId) {
68
+ db.close();
69
+ this.error(result.error || 'Could not find container');
70
+ }
71
+ // Check if container is running
72
+ if (!isContainerRunning(result.containerId)) {
73
+ this.log(`\n${styles.warning(`Container ${result.displayName} is not running`)}\n`);
74
+ db.close();
75
+ return;
76
+ }
77
+ this.log(`\n${styles.header('Stop Container')}`);
78
+ this.log(styles.muted(`Target: ${result.displayName}`));
79
+ this.log(styles.muted(`Container: ${result.containerId.substring(0, 12)}\n`));
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 = `Stop container ${result.displayName}?`;
90
+ // In JSON mode, output confirmation prompt
91
+ if (jsonMode) {
92
+ outputPromptAsJson(buildPromptConfig('list', 'confirmed', confirmMessage, confirmChoices), createMetadata('docker stop', flags));
93
+ db.close();
94
+ return;
95
+ }
96
+ const { confirm } = await inquirer.prompt([
97
+ {
98
+ type: 'confirm',
99
+ name: 'confirm',
100
+ message: confirmMessage,
101
+ default: false,
102
+ },
103
+ ]);
104
+ if (!confirm) {
105
+ this.log(`${styles.muted('Aborted.')}\n`);
106
+ db.close();
107
+ return;
108
+ }
109
+ }
110
+ // Stop container
111
+ this.log(styles.muted(`Stopping container (timeout: ${flags.time}s)...`));
112
+ try {
113
+ const safeId = sanitizeContainerId(result.containerId);
114
+ execSync(`docker stop -t ${flags.time} ${safeId}`, {
115
+ stdio: ['pipe', 'pipe', 'pipe'],
116
+ timeout: (flags.time + 5) * 1000,
117
+ });
118
+ // Update execution status if we have an execution ID
119
+ if (result.executionId) {
120
+ executionStorage.updateStatus(result.executionId, 'stopped');
121
+ }
122
+ this.log(`${styles.success('Container stopped successfully')}\n`);
123
+ }
124
+ catch (error) {
125
+ this.log(`${styles.error(`Failed to stop container: ${error instanceof Error ? error.message : error}`)}\n`);
126
+ }
127
+ db.close();
128
+ }
129
+ catch (error) {
130
+ db.close();
131
+ throw error;
132
+ }
133
+ }
134
+ }
@@ -0,0 +1,15 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DockerSync extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ /**
7
+ * Get raw container info from Docker
8
+ */
9
+ private getDockerContainers;
10
+ /**
11
+ * Extract agent name from devcontainer image name.
12
+ * Only used for initial sync - DB is source of truth after that.
13
+ */
14
+ private extractAgentFromImage;
15
+ }