@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,126 @@
1
+ import { Command } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import * as path from 'node:path';
4
+ import * as fs from 'node:fs';
5
+ import { getWorkspaceInfo, getAllAgentsStatus, getAgentTmuxSessions } from '../../lib/agents/commands.js';
6
+ export default class List extends Command {
7
+ static description = 'List all agents and their current status';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %>',
10
+ ];
11
+ static flags = {};
12
+ async run() {
13
+ try {
14
+ // Get workspace information
15
+ const workspaceInfo = getWorkspaceInfo();
16
+ // Filter to active agents only
17
+ const activeAgents = workspaceInfo.agents.filter(a => a.status === 'active');
18
+ if (activeAgents.length === 0) {
19
+ this.log(chalk.yellow('No active agents found.'));
20
+ this.log(chalk.dim('Use "prlt agent staff add" or "prlt work spawn" to create agents.'));
21
+ return;
22
+ }
23
+ // Get status for all active agents
24
+ const agentsStatus = getAllAgentsStatus(workspaceInfo);
25
+ // Separate by type
26
+ const staffAgents = activeAgents.filter(a => a.type === 'persistent');
27
+ const tempAgents = activeAgents.filter(a => a.type === 'ephemeral');
28
+ // Staff agents section
29
+ if (staffAgents.length > 0) {
30
+ this.log(chalk.bold.cyan('\n Staff Agents:\n'));
31
+ const staffStatus = agentsStatus.filter(a => staffAgents.some(s => s.name === a.name));
32
+ for (const agentStatus of staffStatus) {
33
+ const statusIcon = agentStatus.exists ? '🟢' : '🔴';
34
+ const status = agentStatus.exists ? chalk.green('Active') : chalk.red('Missing');
35
+ this.log(`${statusIcon} ${chalk.bold(agentStatus.name)} ${chalk.dim('[staff]')} - ${status}`);
36
+ if (agentStatus.exists) {
37
+ if (agentStatus.branch) {
38
+ this.log(chalk.cyan(` Branch: ${agentStatus.branch}`));
39
+ }
40
+ if (agentStatus.repositories.length > 0) {
41
+ const dirtyRepos = agentStatus.repositories.filter(r => r.status === 'dirty').length;
42
+ const reposWithCommits = agentStatus.repositories.filter(r => r.commitsAhead > 0);
43
+ let repoStatusText = `${agentStatus.repositories.length} repo(s)`;
44
+ if (dirtyRepos > 0) {
45
+ repoStatusText += `, ${dirtyRepos} dirty`;
46
+ }
47
+ if (reposWithCommits.length > 0) {
48
+ const commitDetails = reposWithCommits.map(r => `${r.name}(+${r.commitsAhead})`).join(', ');
49
+ repoStatusText += `, commits ahead: ${commitDetails}`;
50
+ }
51
+ this.log(chalk.white(` Repositories: ${repoStatusText}`));
52
+ }
53
+ if (agentStatus.assignedTickets.length > 0) {
54
+ this.log(chalk.blue(` Current tickets: ${agentStatus.assignedTickets.join(', ')}`));
55
+ }
56
+ else {
57
+ this.log(chalk.white(' No active tickets'));
58
+ }
59
+ if (agentStatus.completedTickets.length > 0) {
60
+ this.log(chalk.white(` Completed: ${agentStatus.completedTickets.length} ticket(s)`));
61
+ }
62
+ }
63
+ else {
64
+ const agentDir = path.join(workspaceInfo.agentsPath, agentStatus.name);
65
+ const dirExists = fs.existsSync(agentDir);
66
+ if (dirExists) {
67
+ this.log(chalk.red(` Invalid or broken worktrees`));
68
+ }
69
+ else {
70
+ this.log(chalk.red(` Agent directory not found`));
71
+ }
72
+ this.log(chalk.white(' Run "prlt agent staff add" to recreate'));
73
+ }
74
+ this.log('');
75
+ }
76
+ }
77
+ // Temp agents section
78
+ if (tempAgents.length > 0) {
79
+ this.log(chalk.bold.yellow('\n Temporary Agents:\n'));
80
+ const tempStatus = agentsStatus.filter(a => tempAgents.some(s => s.name === a.name));
81
+ for (const agentStatus of tempStatus) {
82
+ const sessions = getAgentTmuxSessions(agentStatus.name);
83
+ const hasRunningWork = sessions.length > 0;
84
+ const statusIcon = hasRunningWork ? '🟡' : (agentStatus.exists ? '🟢' : '🔴');
85
+ const runningLabel = hasRunningWork ? chalk.yellow(' (running)') : '';
86
+ const status = agentStatus.exists ? chalk.green('Active') : chalk.red('Missing');
87
+ this.log(`${statusIcon} ${chalk.bold(agentStatus.name)} ${chalk.dim('[temp]')} - ${status}${runningLabel}`);
88
+ if (agentStatus.exists) {
89
+ if (agentStatus.branch) {
90
+ this.log(chalk.cyan(` Branch: ${agentStatus.branch}`));
91
+ }
92
+ if (agentStatus.assignedTickets.length > 0) {
93
+ this.log(chalk.blue(` Current tickets: ${agentStatus.assignedTickets.join(', ')}`));
94
+ }
95
+ }
96
+ else {
97
+ this.log(chalk.red(` Agent directory not found`));
98
+ }
99
+ this.log('');
100
+ }
101
+ }
102
+ // Summary
103
+ const activeStaffCount = agentsStatus.filter(a => staffAgents.some(s => s.name === a.name) && a.exists).length;
104
+ const activeTempCount = agentsStatus.filter(a => tempAgents.some(s => s.name === a.name) && a.exists).length;
105
+ const runningTempCount = tempAgents.filter(a => {
106
+ const sessions = getAgentTmuxSessions(a.name);
107
+ return sessions.length > 0;
108
+ }).length;
109
+ const totalAssignedTickets = agentsStatus.reduce((sum, a) => sum + a.assignedTickets.length, 0);
110
+ this.log(chalk.bold(`Summary:`));
111
+ this.log(` Staff agents: ${staffAgents.length} (${activeStaffCount} active)`);
112
+ this.log(` Temp agents: ${tempAgents.length} (${activeTempCount} active${runningTempCount > 0 ? `, ${runningTempCount} running` : ''})`);
113
+ if (workspaceInfo.hasPMO) {
114
+ this.log(` Tickets assigned: ${totalAssignedTickets}`);
115
+ }
116
+ // Show cleaned agents count if any
117
+ const cleanedAgents = workspaceInfo.agents.filter(a => a.status === 'cleaned');
118
+ if (cleanedAgents.length > 0) {
119
+ this.log(chalk.dim(` Cleaned (historical): ${cleanedAgents.length}`));
120
+ }
121
+ }
122
+ catch (error) {
123
+ this.error(error instanceof Error ? error.message : String(error));
124
+ }
125
+ }
126
+ }
@@ -0,0 +1,16 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class Login extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ protected getPMOOptions(): {
13
+ promptIfMultiple: boolean;
14
+ };
15
+ execute(): Promise<void>;
16
+ }
@@ -0,0 +1,146 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import * as path from 'node:path';
3
+ import * as fs from 'node:fs';
4
+ import { execSync } from 'node:child_process';
5
+ import inquirer from 'inquirer';
6
+ import { colors } from '../../lib/colors.js';
7
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
8
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
9
+ import { isDockerRunning } from '../../lib/execution/runners.js';
10
+ import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
11
+ export default class Login extends PMOCommand {
12
+ static description = 'Authenticate Claude Code inside an agent container (one-time setup)';
13
+ static examples = [
14
+ '<%= config.bin %> <%= command.id %> damodei',
15
+ '<%= config.bin %> <%= command.id %>',
16
+ ];
17
+ static args = {
18
+ name: Args.string({
19
+ description: 'Agent name to authenticate',
20
+ required: false,
21
+ }),
22
+ };
23
+ static flags = {
24
+ ...pmoBaseFlags,
25
+ json: Flags.boolean({
26
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
27
+ default: false,
28
+ }),
29
+ };
30
+ getPMOOptions() {
31
+ return { promptIfMultiple: false };
32
+ }
33
+ async execute() {
34
+ const { args, flags } = await this.parse(Login);
35
+ // Check if JSON output mode is active
36
+ const jsonMode = shouldOutputJson(flags);
37
+ // Helper to handle errors in JSON mode
38
+ const handleError = (code, message) => {
39
+ if (jsonMode) {
40
+ outputErrorAsJson(code, message, createMetadata('agent login', flags));
41
+ this.exit(1);
42
+ }
43
+ this.error(message);
44
+ };
45
+ // Check Docker is running
46
+ if (!isDockerRunning()) {
47
+ return handleError('DOCKER_NOT_RUNNING', 'Docker is not running. Please start Docker Desktop and try again.');
48
+ }
49
+ // Get workspace information
50
+ const workspaceInfo = getWorkspaceInfo();
51
+ if (workspaceInfo.agents.length === 0) {
52
+ if (jsonMode) {
53
+ outputErrorAsJson('NO_AGENTS', 'No agents found. Add agents with "prlt agent add"', createMetadata('agent login', flags));
54
+ return;
55
+ }
56
+ this.log(colors.warning('No agents found. Add agents with "prlt agent add"'));
57
+ return;
58
+ }
59
+ let agentName = args.name;
60
+ // Interactive mode if no agent specified
61
+ if (!agentName) {
62
+ // In JSON mode, output agent selection prompt
63
+ if (jsonMode) {
64
+ const agentChoices = workspaceInfo.agents.map((agent) => ({ name: agent.name, value: agent.name }));
65
+ outputPromptAsJson(buildPromptConfig('list', 'name', 'Select agent to authenticate:', agentChoices), createMetadata('agent login', flags));
66
+ return;
67
+ }
68
+ const { selected } = await inquirer.prompt([
69
+ {
70
+ type: 'list',
71
+ name: 'selected',
72
+ message: 'Select agent to authenticate:',
73
+ choices: workspaceInfo.agents.map(agent => ({
74
+ name: agent.name,
75
+ value: agent.name
76
+ }))
77
+ }
78
+ ]);
79
+ agentName = selected;
80
+ }
81
+ // Validate agent exists
82
+ const agent = workspaceInfo.agents.find(a => a.name === agentName);
83
+ if (!agent) {
84
+ this.error(`Agent "${agentName}" not found. Available agents: ${workspaceInfo.agents.map(a => a.name).join(', ')}`);
85
+ }
86
+ const agentDir = path.join(workspaceInfo.agentsPath, agentName);
87
+ // Check if devcontainer exists
88
+ const devcontainerPath = path.join(agentDir, '.devcontainer');
89
+ try {
90
+ execSync(`test -d "${devcontainerPath}"`, { stdio: 'ignore' });
91
+ }
92
+ catch {
93
+ this.error(`Agent "${agentName}" does not have a devcontainer configuration. Run "prlt agent add ${agentName}" to initialize.`);
94
+ }
95
+ // Get container ID
96
+ this.log(colors.primary(`🔐 Authenticating agent: ${agentName}`));
97
+ this.log('');
98
+ let containerId;
99
+ try {
100
+ containerId = execSync(`docker ps --filter "label=devcontainer.local_folder=${agentDir}" --format "{{.ID}}"`, { encoding: 'utf-8' }).trim();
101
+ }
102
+ catch {
103
+ this.error('Failed to find running container. Make sure the agent container is running.');
104
+ }
105
+ if (!containerId) {
106
+ this.log(colors.warning('Container is not running. Starting it now...'));
107
+ this.log('');
108
+ try {
109
+ execSync(`devcontainer up --workspace-folder "${agentDir}"`, {
110
+ stdio: 'inherit',
111
+ cwd: agentDir
112
+ });
113
+ // Get container ID again
114
+ containerId = execSync(`docker ps --filter "label=devcontainer.local_folder=${agentDir}" --format "{{.ID}}"`, { encoding: 'utf-8' }).trim();
115
+ }
116
+ catch {
117
+ this.error('Failed to start container.');
118
+ }
119
+ }
120
+ // Create a helper script to launch interactive session
121
+ this.log(colors.success(`✓ Container running: ${containerId}`));
122
+ this.log('');
123
+ // Generate script that opens interactive Claude and prompts for /login
124
+ const scriptPath = `/tmp/prlt-agent-login-${containerId}.sh`;
125
+ const scriptContent = `#!/bin/bash
126
+ echo "======================================"
127
+ echo "Claude Code Authentication"
128
+ echo "======================================"
129
+ echo ""
130
+ echo "Type: /login"
131
+ echo "Then follow the browser prompts to authenticate with your Claude subscription."
132
+ echo ""
133
+ echo "Your credentials will be saved and persist across container rebuilds."
134
+ echo ""
135
+ docker exec -it ${containerId} claude
136
+ `;
137
+ fs.writeFileSync(scriptPath, scriptContent, { mode: 0o755 });
138
+ this.log(colors.text('Opening interactive Claude session...'));
139
+ this.log('');
140
+ // Execute the script directly with a new shell
141
+ execSync(`open -a Terminal ${scriptPath}`, { stdio: 'inherit' });
142
+ this.log(colors.success('✓ Opened new terminal window'));
143
+ this.log(colors.textSecondary('Complete the /login flow in the new terminal window.'));
144
+ this.log(colors.textSecondary('Your credentials will be saved automatically.'));
145
+ }
146
+ }
@@ -0,0 +1,18 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class AgentRebuild extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ 'no-cache': import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ protected getPMOOptions(): {
14
+ promptIfMultiple: boolean;
15
+ };
16
+ execute(): Promise<void>;
17
+ private getAvailableAgents;
18
+ }
@@ -0,0 +1,133 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { exec } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ import * as path from 'node:path';
5
+ import * as fs from 'node:fs';
6
+ import { colors } from '../../lib/colors.js';
7
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
8
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
9
+ import { isDockerRunning } from '../../lib/execution/runners.js';
10
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
11
+ const execAsync = promisify(exec);
12
+ export default class AgentRebuild extends PMOCommand {
13
+ static description = 'Rebuild a specific agent devcontainer image';
14
+ static examples = [
15
+ '<%= config.bin %> <%= command.id %> altman',
16
+ '<%= config.bin %> <%= command.id %> altman --no-cache',
17
+ '<%= config.bin %> <%= command.id %> # Interactive selection',
18
+ '<%= config.bin %> <%= command.id %> --json # JSON mode for AI agents',
19
+ ];
20
+ static args = {
21
+ name: Args.string({
22
+ description: 'Agent name to rebuild',
23
+ required: false,
24
+ }),
25
+ };
26
+ static flags = {
27
+ ...pmoBaseFlags,
28
+ json: Flags.boolean({
29
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
30
+ default: false,
31
+ }),
32
+ 'no-cache': Flags.boolean({
33
+ description: 'Build without using cache',
34
+ default: false,
35
+ }),
36
+ };
37
+ getPMOOptions() {
38
+ return { promptIfMultiple: false };
39
+ }
40
+ async execute() {
41
+ const { args, flags } = await this.parse(AgentRebuild);
42
+ // Check if JSON output mode is active
43
+ const jsonMode = shouldOutputJson(flags);
44
+ // Check Docker is running
45
+ if (!isDockerRunning()) {
46
+ if (jsonMode) {
47
+ outputErrorAsJson('DOCKER_NOT_RUNNING', 'Docker is not running. Please start Docker Desktop and try again.', createMetadata('agent rebuild', flags));
48
+ this.exit(1);
49
+ }
50
+ this.error('Docker is not running. Please start Docker Desktop and try again.');
51
+ }
52
+ let agentName = args.name;
53
+ // If no agent name provided, prompt for selection
54
+ if (!agentName) {
55
+ const agents = this.getAvailableAgents();
56
+ if (agents.length === 0) {
57
+ if (jsonMode) {
58
+ outputErrorAsJson('NO_AGENTS', 'No agents found.', createMetadata('agent rebuild', flags));
59
+ return;
60
+ }
61
+ this.log(colors.warning('No agents found.'));
62
+ return;
63
+ }
64
+ const selected = await this.selectFromList({
65
+ message: 'Select agent to rebuild:',
66
+ items: agents,
67
+ getName: (a) => a.name,
68
+ getValue: (a) => a.name,
69
+ getCommand: (a) => `prlt agent rebuild ${a.name} --json`,
70
+ jsonMode: jsonMode ? { flags, commandName: 'agent rebuild' } : null,
71
+ });
72
+ if (!selected) {
73
+ return;
74
+ }
75
+ agentName = selected;
76
+ }
77
+ // Get workspace info
78
+ const workspaceInfo = getWorkspaceInfo();
79
+ if (!workspaceInfo) {
80
+ this.error('Not in a proletariat workspace. Run `prlt init` first.');
81
+ }
82
+ this.log(colors.primary(`🔨 Rebuilding agent: ${agentName}\n`));
83
+ const agentsPath = path.join(workspaceInfo.path, 'agents', 'staff');
84
+ const agentDir = path.join(agentsPath, agentName);
85
+ try {
86
+ this.log(colors.textSecondary(' Building devcontainer...'));
87
+ const buildCommand = [
88
+ 'devcontainer',
89
+ 'build',
90
+ '--workspace-folder',
91
+ agentDir,
92
+ ];
93
+ if (flags['no-cache']) {
94
+ buildCommand.push('--no-cache');
95
+ }
96
+ const { stderr } = await execAsync(buildCommand.join(' '));
97
+ if (stderr && !stderr.includes('WARNING')) {
98
+ this.log(colors.textMuted(` ${stderr.trim()}`));
99
+ }
100
+ this.log('');
101
+ this.log(colors.success(`✓ Agent ${agentName} rebuild complete`));
102
+ this.log(colors.textMuted('Use `prlt agent restart` to apply changes to running container'));
103
+ }
104
+ catch (error) {
105
+ this.error(`Failed to rebuild agent ${agentName}: ${error instanceof Error ? error.message : String(error)}`);
106
+ }
107
+ }
108
+ getAvailableAgents() {
109
+ const workspaceInfo = getWorkspaceInfo();
110
+ if (!workspaceInfo) {
111
+ return [];
112
+ }
113
+ const agents = [];
114
+ const agentsPath = path.join(workspaceInfo.path, 'agents');
115
+ // Check staff agents
116
+ const staffPath = path.join(agentsPath, 'staff');
117
+ if (fs.existsSync(staffPath)) {
118
+ const staffAgents = fs.readdirSync(staffPath, { withFileTypes: true })
119
+ .filter(d => d.isDirectory() && !d.name.startsWith('.'))
120
+ .map(d => ({ name: d.name, type: 'staff' }));
121
+ agents.push(...staffAgents);
122
+ }
123
+ // Check temp agents
124
+ const tempPath = path.join(agentsPath, 'temp');
125
+ if (fs.existsSync(tempPath)) {
126
+ const tempAgents = fs.readdirSync(tempPath, { withFileTypes: true })
127
+ .filter(d => d.isDirectory() && !d.name.startsWith('.'))
128
+ .map(d => ({ name: d.name, type: 'temp' }));
129
+ agents.push(...tempAgents);
130
+ }
131
+ return agents;
132
+ }
133
+ }
@@ -0,0 +1,17 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class AgentRestart extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ protected getPMOOptions(): {
13
+ promptIfMultiple: boolean;
14
+ };
15
+ execute(): Promise<void>;
16
+ private getAvailableAgents;
17
+ }
@@ -0,0 +1,116 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { exec } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ import * as path from 'node:path';
5
+ import * as fs from 'node:fs';
6
+ import { colors } from '../../lib/colors.js';
7
+ import { PMOCommand, pmoBaseFlags } from '../../lib/pmo/index.js';
8
+ import { isDockerRunning } from '../../lib/execution/runners.js';
9
+ import { getWorkspaceInfo } from '../../lib/agents/commands.js';
10
+ import { shouldOutputJson, outputErrorAsJson, createMetadata, } from '../../lib/prompt-json.js';
11
+ const execAsync = promisify(exec);
12
+ export default class AgentRestart extends PMOCommand {
13
+ static description = 'Restart a specific agent devcontainer';
14
+ static examples = [
15
+ '<%= config.bin %> <%= command.id %> altman',
16
+ '<%= config.bin %> <%= command.id %> # Interactive selection',
17
+ '<%= config.bin %> <%= command.id %> --json # JSON mode for AI agents',
18
+ ];
19
+ static args = {
20
+ name: Args.string({
21
+ description: 'Agent name to restart',
22
+ required: false,
23
+ }),
24
+ };
25
+ static flags = {
26
+ ...pmoBaseFlags,
27
+ json: Flags.boolean({
28
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
29
+ default: false,
30
+ }),
31
+ };
32
+ getPMOOptions() {
33
+ return { promptIfMultiple: false };
34
+ }
35
+ async execute() {
36
+ const { args, flags } = await this.parse(AgentRestart);
37
+ // Check if JSON output mode is active
38
+ const jsonMode = shouldOutputJson(flags);
39
+ // Check Docker is running
40
+ if (!isDockerRunning()) {
41
+ if (jsonMode) {
42
+ outputErrorAsJson('DOCKER_NOT_RUNNING', 'Docker is not running. Please start Docker Desktop and try again.', createMetadata('agent restart', flags));
43
+ this.exit(1);
44
+ }
45
+ this.error('Docker is not running. Please start Docker Desktop and try again.');
46
+ }
47
+ let agentName = args.name;
48
+ // If no agent name provided, prompt for selection
49
+ if (!agentName) {
50
+ const agents = this.getAvailableAgents();
51
+ if (agents.length === 0) {
52
+ if (jsonMode) {
53
+ outputErrorAsJson('NO_AGENTS', 'No agents found.', createMetadata('agent restart', flags));
54
+ return;
55
+ }
56
+ this.log(colors.warning('No agents found.'));
57
+ return;
58
+ }
59
+ const selected = await this.selectFromList({
60
+ message: 'Select agent to restart:',
61
+ items: agents,
62
+ getName: (a) => a.name,
63
+ getValue: (a) => a.name,
64
+ getCommand: (a) => `prlt agent restart ${a.name} --json`,
65
+ jsonMode: jsonMode ? { flags, commandName: 'agent restart' } : null,
66
+ });
67
+ if (!selected) {
68
+ return;
69
+ }
70
+ agentName = selected;
71
+ }
72
+ this.log(colors.primary(`🔄 Restarting agent: ${agentName}\n`));
73
+ // Find container by agent name
74
+ const { stdout: containers } = await execAsync(`docker ps -a --format "{{.Names}}" | grep -i "${agentName}" || true`);
75
+ const containerNames = containers.trim().split('\n').filter(Boolean);
76
+ if (containerNames.length === 0) {
77
+ this.log(colors.warning(`No container found for agent: ${agentName}`));
78
+ this.log(colors.textMuted('The container will be created on next `prlt work start`'));
79
+ return;
80
+ }
81
+ for (const containerName of containerNames) {
82
+ this.log(colors.textSecondary(` Stopping container: ${containerName}...`));
83
+ await execAsync(`docker stop ${containerName}`);
84
+ this.log(colors.textSecondary(` Removing container: ${containerName}...`));
85
+ await execAsync(`docker rm ${containerName}`);
86
+ }
87
+ this.log('');
88
+ this.log(colors.success(`✓ Agent ${agentName} container restarted`));
89
+ this.log(colors.textMuted('Container will rebuild with updated configuration on next `prlt work start`'));
90
+ }
91
+ getAvailableAgents() {
92
+ const workspaceInfo = getWorkspaceInfo();
93
+ if (!workspaceInfo) {
94
+ return [];
95
+ }
96
+ const agents = [];
97
+ const agentsPath = path.join(workspaceInfo.path, 'agents');
98
+ // Check staff agents
99
+ const staffPath = path.join(agentsPath, 'staff');
100
+ if (fs.existsSync(staffPath)) {
101
+ const staffAgents = fs.readdirSync(staffPath, { withFileTypes: true })
102
+ .filter(d => d.isDirectory() && !d.name.startsWith('.'))
103
+ .map(d => ({ name: d.name, type: 'staff' }));
104
+ agents.push(...staffAgents);
105
+ }
106
+ // Check temp agents
107
+ const tempPath = path.join(agentsPath, 'temp');
108
+ if (fs.existsSync(tempPath)) {
109
+ const tempAgents = fs.readdirSync(tempPath, { withFileTypes: true })
110
+ .filter(d => d.isDirectory() && !d.name.startsWith('.'))
111
+ .map(d => ({ name: d.name, type: 'temp' }));
112
+ agents.push(...tempAgents);
113
+ }
114
+ return agents;
115
+ }
116
+ }
@@ -0,0 +1,23 @@
1
+ import { PMOCommand } from '../../lib/pmo/index.js';
2
+ export default class Shell extends PMOCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ name: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ };
12
+ protected getPMOOptions(): {
13
+ promptIfMultiple: boolean;
14
+ };
15
+ execute(): Promise<void>;
16
+ private openDevcontainerShell;
17
+ private openHostShell;
18
+ /**
19
+ * Run a script in a new terminal window using the same method as work start.
20
+ * Uses osascript with proper iTerm/Terminal handling.
21
+ */
22
+ private runInTerminal;
23
+ }