@proletariat/cli 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/README.md +561 -251
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +23 -0
  6. package/dist/commands/action/create.d.ts +21 -0
  7. package/dist/commands/action/create.js +126 -0
  8. package/dist/commands/action/delete.d.ts +17 -0
  9. package/dist/commands/action/delete.js +78 -0
  10. package/dist/commands/action/index.d.ts +15 -0
  11. package/dist/commands/action/index.js +107 -0
  12. package/dist/commands/action/list.d.ts +14 -0
  13. package/dist/commands/action/list.js +89 -0
  14. package/dist/commands/action/run.d.ts +19 -0
  15. package/dist/commands/action/run.js +179 -0
  16. package/dist/commands/action/show.d.ts +15 -0
  17. package/dist/commands/action/show.js +47 -0
  18. package/dist/commands/action/update.d.ts +22 -0
  19. package/dist/commands/action/update.js +168 -0
  20. package/dist/commands/agent/index.d.ts +13 -0
  21. package/dist/commands/agent/index.js +131 -0
  22. package/dist/commands/agent/list.d.ts +7 -0
  23. package/dist/commands/agent/list.js +126 -0
  24. package/dist/commands/agent/login.d.ts +16 -0
  25. package/dist/commands/agent/login.js +146 -0
  26. package/dist/commands/agent/rebuild.d.ts +18 -0
  27. package/dist/commands/agent/rebuild.js +133 -0
  28. package/dist/commands/agent/restart.d.ts +17 -0
  29. package/dist/commands/agent/restart.js +116 -0
  30. package/dist/commands/agent/shell.d.ts +23 -0
  31. package/dist/commands/agent/shell.js +378 -0
  32. package/dist/commands/agent/staff/add.d.ts +15 -0
  33. package/dist/commands/agent/staff/add.js +281 -0
  34. package/dist/commands/agent/staff/index.d.ts +14 -0
  35. package/dist/commands/agent/staff/index.js +90 -0
  36. package/dist/commands/agent/staff/list.d.ts +7 -0
  37. package/dist/commands/agent/staff/list.js +90 -0
  38. package/dist/commands/agent/staff/remove.d.ts +16 -0
  39. package/dist/commands/agent/staff/remove.js +137 -0
  40. package/dist/commands/agent/status.d.ts +17 -0
  41. package/dist/commands/agent/status.js +139 -0
  42. package/dist/commands/agent/temp/cleanup.d.ts +23 -0
  43. package/dist/commands/agent/temp/cleanup.js +388 -0
  44. package/dist/commands/agent/temp/index.d.ts +14 -0
  45. package/dist/commands/agent/temp/index.js +82 -0
  46. package/dist/commands/agent/temp/list.d.ts +7 -0
  47. package/dist/commands/agent/temp/list.js +108 -0
  48. package/dist/commands/agent/themes/add-names.d.ts +10 -0
  49. package/dist/commands/agent/themes/add-names.js +67 -0
  50. package/dist/commands/agent/themes/create.d.ts +13 -0
  51. package/dist/commands/agent/themes/create.js +66 -0
  52. package/dist/commands/agent/themes/index.d.ts +9 -0
  53. package/dist/commands/agent/themes/index.js +194 -0
  54. package/dist/commands/agent/themes/list.d.ts +6 -0
  55. package/dist/commands/agent/themes/list.js +41 -0
  56. package/dist/commands/agent/themes/set.d.ts +12 -0
  57. package/dist/commands/agent/themes/set.js +77 -0
  58. package/dist/commands/agent/visit.d.ts +16 -0
  59. package/dist/commands/agent/visit.js +88 -0
  60. package/dist/commands/autocomplete/setup.d.ts +14 -0
  61. package/dist/commands/autocomplete/setup.js +154 -0
  62. package/dist/commands/board/index.d.ts +17 -0
  63. package/dist/commands/board/index.js +255 -0
  64. package/dist/commands/board/watch.d.ts +13 -0
  65. package/dist/commands/board/watch.js +52 -0
  66. package/dist/commands/branch/create.d.ts +50 -0
  67. package/dist/commands/branch/create.js +624 -0
  68. package/dist/commands/branch/index.d.ts +13 -0
  69. package/dist/commands/branch/index.js +50 -0
  70. package/dist/commands/branch/list.d.ts +17 -0
  71. package/dist/commands/branch/list.js +120 -0
  72. package/dist/commands/branch/validate.d.ts +15 -0
  73. package/dist/commands/branch/validate.js +73 -0
  74. package/dist/commands/commit.d.ts +71 -0
  75. package/dist/commands/commit.js +499 -0
  76. package/dist/commands/docker/clean.d.ts +13 -0
  77. package/dist/commands/docker/clean.js +224 -0
  78. package/dist/commands/docker/index.d.ts +19 -0
  79. package/dist/commands/docker/index.js +274 -0
  80. package/dist/commands/docker/list.d.ts +16 -0
  81. package/dist/commands/docker/list.js +200 -0
  82. package/dist/commands/docker/logs.d.ts +14 -0
  83. package/dist/commands/docker/logs.js +118 -0
  84. package/dist/commands/docker/prune.d.ts +14 -0
  85. package/dist/commands/docker/prune.js +211 -0
  86. package/dist/commands/docker/restart.d.ts +14 -0
  87. package/dist/commands/docker/restart.js +129 -0
  88. package/dist/commands/docker/shell.d.ts +14 -0
  89. package/dist/commands/docker/shell.js +103 -0
  90. package/dist/commands/docker/start.d.ts +12 -0
  91. package/dist/commands/docker/start.js +92 -0
  92. package/dist/commands/docker/status.d.ts +7 -0
  93. package/dist/commands/docker/status.js +40 -0
  94. package/dist/commands/docker/stop.d.ts +14 -0
  95. package/dist/commands/docker/stop.js +134 -0
  96. package/dist/commands/docker/sync.d.ts +15 -0
  97. package/dist/commands/docker/sync.js +112 -0
  98. package/dist/commands/epic/activate.d.ts +13 -0
  99. package/dist/commands/epic/activate.js +118 -0
  100. package/dist/commands/epic/archive.d.ts +14 -0
  101. package/dist/commands/epic/archive.js +132 -0
  102. package/dist/commands/epic/create.d.ts +15 -0
  103. package/dist/commands/epic/create.js +137 -0
  104. package/dist/commands/epic/index.d.ts +13 -0
  105. package/dist/commands/epic/index.js +88 -0
  106. package/dist/commands/epic/link/block.d.ts +14 -0
  107. package/dist/commands/epic/link/block.js +79 -0
  108. package/dist/commands/epic/link/duplicates.d.ts +14 -0
  109. package/dist/commands/epic/link/duplicates.js +66 -0
  110. package/dist/commands/epic/link/index.d.ts +19 -0
  111. package/dist/commands/epic/link/index.js +242 -0
  112. package/dist/commands/epic/link/relates.d.ts +14 -0
  113. package/dist/commands/epic/link/relates.js +66 -0
  114. package/dist/commands/epic/link/remove.d.ts +16 -0
  115. package/dist/commands/epic/link/remove.js +89 -0
  116. package/dist/commands/epic/list.d.ts +11 -0
  117. package/dist/commands/epic/list.js +87 -0
  118. package/dist/commands/epic/move.d.ts +15 -0
  119. package/dist/commands/epic/move.js +184 -0
  120. package/dist/commands/epic/progress.d.ts +16 -0
  121. package/dist/commands/epic/progress.js +166 -0
  122. package/dist/commands/epic/project.d.ts +15 -0
  123. package/dist/commands/epic/project.js +219 -0
  124. package/dist/commands/epic/reorder.d.ts +21 -0
  125. package/dist/commands/epic/reorder.js +160 -0
  126. package/dist/commands/epic/spec.d.ts +15 -0
  127. package/dist/commands/epic/spec.js +191 -0
  128. package/dist/commands/epic/ticket.d.ts +18 -0
  129. package/dist/commands/epic/ticket.js +291 -0
  130. package/dist/commands/epic/view.d.ts +13 -0
  131. package/dist/commands/epic/view.js +117 -0
  132. package/dist/commands/execution/index.d.ts +13 -0
  133. package/dist/commands/execution/index.js +70 -0
  134. package/dist/commands/execution/list.d.ts +15 -0
  135. package/dist/commands/execution/list.js +144 -0
  136. package/dist/commands/execution/logs.d.ts +18 -0
  137. package/dist/commands/execution/logs.js +161 -0
  138. package/dist/commands/execution/stop.d.ts +22 -0
  139. package/dist/commands/execution/stop.js +248 -0
  140. package/dist/commands/gh/index.d.ts +9 -0
  141. package/dist/commands/gh/index.js +53 -0
  142. package/dist/commands/gh/login.d.ts +6 -0
  143. package/dist/commands/gh/login.js +57 -0
  144. package/dist/commands/gh/status.d.ts +6 -0
  145. package/dist/commands/gh/status.js +48 -0
  146. package/dist/commands/gh/token.d.ts +6 -0
  147. package/dist/commands/gh/token.js +59 -0
  148. package/dist/commands/init.d.ts +26 -0
  149. package/dist/commands/init.js +200 -0
  150. package/dist/commands/phase/create.d.ts +22 -0
  151. package/dist/commands/phase/create.js +123 -0
  152. package/dist/commands/phase/delete.d.ts +17 -0
  153. package/dist/commands/phase/delete.js +73 -0
  154. package/dist/commands/phase/list.d.ts +12 -0
  155. package/dist/commands/phase/list.js +76 -0
  156. package/dist/commands/phase/move.d.ts +17 -0
  157. package/dist/commands/phase/move.js +115 -0
  158. package/dist/commands/phase/template/apply.d.ts +17 -0
  159. package/dist/commands/phase/template/apply.js +106 -0
  160. package/dist/commands/phase/template/create.d.ts +16 -0
  161. package/dist/commands/phase/template/create.js +58 -0
  162. package/dist/commands/phase/template/delete.d.ts +17 -0
  163. package/dist/commands/phase/template/delete.js +98 -0
  164. package/dist/commands/phase/template/index.d.ts +15 -0
  165. package/dist/commands/phase/template/index.js +128 -0
  166. package/dist/commands/phase/template/list.d.ts +16 -0
  167. package/dist/commands/phase/template/list.js +95 -0
  168. package/dist/commands/phase/template/update.d.ts +17 -0
  169. package/dist/commands/phase/template/update.js +89 -0
  170. package/dist/commands/phase/update.d.ts +23 -0
  171. package/dist/commands/phase/update.js +174 -0
  172. package/dist/commands/pmo/init.d.ts +25 -0
  173. package/dist/commands/pmo/init.js +341 -0
  174. package/dist/commands/pr/create.d.ts +17 -0
  175. package/dist/commands/pr/create.js +242 -0
  176. package/dist/commands/pr/index.d.ts +9 -0
  177. package/dist/commands/pr/index.js +68 -0
  178. package/dist/commands/pr/link.d.ts +14 -0
  179. package/dist/commands/pr/link.js +212 -0
  180. package/dist/commands/pr/status.d.ts +12 -0
  181. package/dist/commands/pr/status.js +161 -0
  182. package/dist/commands/project/archive.d.ts +17 -0
  183. package/dist/commands/project/archive.js +83 -0
  184. package/dist/commands/project/create.d.ts +22 -0
  185. package/dist/commands/project/create.js +143 -0
  186. package/dist/commands/project/delete.d.ts +17 -0
  187. package/dist/commands/project/delete.js +128 -0
  188. package/dist/commands/project/index.d.ts +13 -0
  189. package/dist/commands/project/index.js +64 -0
  190. package/dist/commands/project/list.d.ts +14 -0
  191. package/dist/commands/project/list.js +96 -0
  192. package/dist/commands/project/spec.d.ts +18 -0
  193. package/dist/commands/project/spec.js +216 -0
  194. package/dist/commands/project/unarchive.d.ts +15 -0
  195. package/dist/commands/project/unarchive.js +35 -0
  196. package/dist/commands/project/view.d.ts +16 -0
  197. package/dist/commands/project/view.js +94 -0
  198. package/dist/commands/repo/add.d.ts +21 -0
  199. package/dist/commands/repo/add.js +118 -0
  200. package/dist/commands/repo/index.d.ts +13 -0
  201. package/dist/commands/repo/index.js +114 -0
  202. package/dist/commands/repo/list.d.ts +13 -0
  203. package/dist/commands/repo/list.js +96 -0
  204. package/dist/commands/repo/remove.d.ts +23 -0
  205. package/dist/commands/repo/remove.js +217 -0
  206. package/dist/commands/repo/view.d.ts +15 -0
  207. package/dist/commands/repo/view.js +99 -0
  208. package/dist/commands/session/attach.d.ts +40 -0
  209. package/dist/commands/session/attach.js +307 -0
  210. package/dist/commands/session/index.d.ts +13 -0
  211. package/dist/commands/session/index.js +64 -0
  212. package/dist/commands/session/list.d.ts +21 -0
  213. package/dist/commands/session/list.js +181 -0
  214. package/dist/commands/spec/create.d.ts +19 -0
  215. package/dist/commands/spec/create.js +130 -0
  216. package/dist/commands/spec/index.d.ts +13 -0
  217. package/dist/commands/spec/index.js +68 -0
  218. package/dist/commands/spec/link/depends.d.ts +14 -0
  219. package/dist/commands/spec/link/depends.js +64 -0
  220. package/dist/commands/spec/link/duplicates.d.ts +14 -0
  221. package/dist/commands/spec/link/duplicates.js +63 -0
  222. package/dist/commands/spec/link/index.d.ts +19 -0
  223. package/dist/commands/spec/link/index.js +200 -0
  224. package/dist/commands/spec/link/relates.d.ts +14 -0
  225. package/dist/commands/spec/link/relates.js +63 -0
  226. package/dist/commands/spec/link/remove.d.ts +16 -0
  227. package/dist/commands/spec/link/remove.js +94 -0
  228. package/dist/commands/spec/list.d.ts +12 -0
  229. package/dist/commands/spec/list.js +75 -0
  230. package/dist/commands/spec/plan.d.ts +15 -0
  231. package/dist/commands/spec/plan.js +108 -0
  232. package/dist/commands/spec/ticket.d.ts +18 -0
  233. package/dist/commands/spec/ticket.js +160 -0
  234. package/dist/commands/spec/view.d.ts +15 -0
  235. package/dist/commands/spec/view.js +163 -0
  236. package/dist/commands/status/create.d.ts +21 -0
  237. package/dist/commands/status/create.js +140 -0
  238. package/dist/commands/status/delete.d.ts +13 -0
  239. package/dist/commands/status/delete.js +77 -0
  240. package/dist/commands/status/index.d.ts +14 -0
  241. package/dist/commands/status/index.js +91 -0
  242. package/dist/commands/status/list.d.ts +12 -0
  243. package/dist/commands/status/list.js +93 -0
  244. package/dist/commands/status/move.d.ts +14 -0
  245. package/dist/commands/status/move.js +120 -0
  246. package/dist/commands/status/update.d.ts +20 -0
  247. package/dist/commands/status/update.js +180 -0
  248. package/dist/commands/template/delete.d.ts +15 -0
  249. package/dist/commands/template/delete.js +142 -0
  250. package/dist/commands/template/index.d.ts +10 -0
  251. package/dist/commands/template/index.js +64 -0
  252. package/dist/commands/template/list.d.ts +18 -0
  253. package/dist/commands/template/list.js +157 -0
  254. package/dist/commands/template/phase/apply.d.ts +14 -0
  255. package/dist/commands/template/phase/apply.js +41 -0
  256. package/dist/commands/template/phase/create.d.ts +12 -0
  257. package/dist/commands/template/phase/create.js +29 -0
  258. package/dist/commands/template/phase/delete.d.ts +13 -0
  259. package/dist/commands/template/phase/delete.js +34 -0
  260. package/dist/commands/template/phase/index.d.ts +10 -0
  261. package/dist/commands/template/phase/index.js +62 -0
  262. package/dist/commands/template/phase/list.d.ts +11 -0
  263. package/dist/commands/template/phase/list.js +34 -0
  264. package/dist/commands/template/phase/update.d.ts +13 -0
  265. package/dist/commands/template/phase/update.js +35 -0
  266. package/dist/commands/template/ticket/apply.d.ts +17 -0
  267. package/dist/commands/template/ticket/apply.js +58 -0
  268. package/dist/commands/template/ticket/delete.d.ts +13 -0
  269. package/dist/commands/template/ticket/delete.js +34 -0
  270. package/dist/commands/template/ticket/index.d.ts +10 -0
  271. package/dist/commands/template/ticket/index.js +62 -0
  272. package/dist/commands/template/ticket/list.d.ts +11 -0
  273. package/dist/commands/template/ticket/list.js +34 -0
  274. package/dist/commands/template/ticket/save.d.ts +13 -0
  275. package/dist/commands/template/ticket/save.js +35 -0
  276. package/dist/commands/ticket/bulk.d.ts +13 -0
  277. package/dist/commands/ticket/bulk.js +145 -0
  278. package/dist/commands/ticket/complete.d.ts +16 -0
  279. package/dist/commands/ticket/complete.js +170 -0
  280. package/dist/commands/ticket/create.d.ts +22 -0
  281. package/dist/commands/ticket/create.js +390 -0
  282. package/dist/commands/ticket/delete.d.ts +16 -0
  283. package/dist/commands/ticket/delete.js +178 -0
  284. package/dist/commands/ticket/edit.d.ts +27 -0
  285. package/dist/commands/ticket/edit.js +322 -0
  286. package/dist/commands/ticket/epic.d.ts +20 -0
  287. package/dist/commands/ticket/epic.js +333 -0
  288. package/dist/commands/ticket/index.d.ts +13 -0
  289. package/dist/commands/ticket/index.js +103 -0
  290. package/dist/commands/ticket/link/block.d.ts +14 -0
  291. package/dist/commands/ticket/link/block.js +94 -0
  292. package/dist/commands/ticket/link/duplicates.d.ts +14 -0
  293. package/dist/commands/ticket/link/duplicates.js +93 -0
  294. package/dist/commands/ticket/link/index.d.ts +19 -0
  295. package/dist/commands/ticket/link/index.js +239 -0
  296. package/dist/commands/ticket/link/relates.d.ts +14 -0
  297. package/dist/commands/ticket/link/relates.js +93 -0
  298. package/dist/commands/ticket/link/remove.d.ts +16 -0
  299. package/dist/commands/ticket/link/remove.js +128 -0
  300. package/dist/commands/ticket/list.d.ts +24 -0
  301. package/dist/commands/ticket/list.js +431 -0
  302. package/dist/commands/ticket/move.d.ts +18 -0
  303. package/dist/commands/ticket/move.js +212 -0
  304. package/dist/commands/ticket/project.d.ts +18 -0
  305. package/dist/commands/ticket/project.js +254 -0
  306. package/dist/commands/ticket/reassign.d.ts +19 -0
  307. package/dist/commands/ticket/reassign.js +279 -0
  308. package/dist/commands/ticket/spec.d.ts +18 -0
  309. package/dist/commands/ticket/spec.js +259 -0
  310. package/dist/commands/ticket/status.d.ts +13 -0
  311. package/dist/commands/ticket/status.js +87 -0
  312. package/dist/commands/ticket/template/apply.d.ts +25 -0
  313. package/dist/commands/ticket/template/apply.js +249 -0
  314. package/dist/commands/ticket/template/create.d.ts +19 -0
  315. package/dist/commands/ticket/template/create.js +210 -0
  316. package/dist/commands/ticket/template/delete.d.ts +17 -0
  317. package/dist/commands/ticket/template/delete.js +92 -0
  318. package/dist/commands/ticket/template/index.d.ts +15 -0
  319. package/dist/commands/ticket/template/index.js +118 -0
  320. package/dist/commands/ticket/template/list.d.ts +16 -0
  321. package/dist/commands/ticket/template/list.js +110 -0
  322. package/dist/commands/ticket/template/save.d.ts +14 -0
  323. package/dist/commands/ticket/template/save.js +110 -0
  324. package/dist/commands/ticket/update.d.ts +18 -0
  325. package/dist/commands/ticket/update.js +325 -0
  326. package/dist/commands/ticket/view.d.ts +13 -0
  327. package/dist/commands/ticket/view.js +80 -0
  328. package/dist/commands/whoami.d.ts +9 -0
  329. package/dist/commands/whoami.js +103 -0
  330. package/dist/commands/work/complete.d.ts +13 -0
  331. package/dist/commands/work/complete.js +121 -0
  332. package/dist/commands/work/index.d.ts +13 -0
  333. package/dist/commands/work/index.js +70 -0
  334. package/dist/commands/work/ready.d.ts +24 -0
  335. package/dist/commands/work/ready.js +290 -0
  336. package/dist/commands/work/revise.d.ts +19 -0
  337. package/dist/commands/work/revise.js +377 -0
  338. package/dist/commands/work/spawn-all.d.ts +17 -0
  339. package/dist/commands/work/spawn-all.js +58 -0
  340. package/dist/commands/work/spawn.d.ts +29 -0
  341. package/dist/commands/work/spawn.js +728 -0
  342. package/dist/commands/work/start.d.ts +39 -0
  343. package/dist/commands/work/start.js +1393 -0
  344. package/dist/commands/work/watch.d.ts +31 -0
  345. package/dist/commands/work/watch.js +359 -0
  346. package/dist/commands/workflow/create.d.ts +18 -0
  347. package/dist/commands/workflow/create.js +119 -0
  348. package/dist/commands/workflow/delete.d.ts +17 -0
  349. package/dist/commands/workflow/delete.js +119 -0
  350. package/dist/commands/workflow/index.d.ts +15 -0
  351. package/dist/commands/workflow/index.js +75 -0
  352. package/dist/commands/workflow/list.d.ts +15 -0
  353. package/dist/commands/workflow/list.js +75 -0
  354. package/dist/commands/workflow/switch.d.ts +13 -0
  355. package/dist/commands/workflow/switch.js +117 -0
  356. package/dist/commands/workflow/view.d.ts +16 -0
  357. package/dist/commands/workflow/view.js +114 -0
  358. package/dist/commands/workspace/add.d.ts +12 -0
  359. package/dist/commands/workspace/add.js +74 -0
  360. package/dist/commands/workspace/list.d.ts +9 -0
  361. package/dist/commands/workspace/list.js +153 -0
  362. package/dist/commands/workspace/remove.d.ts +13 -0
  363. package/dist/commands/workspace/remove.js +98 -0
  364. package/dist/commands/workspace/use.d.ts +12 -0
  365. package/dist/commands/workspace/use.js +111 -0
  366. package/dist/hooks/init.d.ts +11 -0
  367. package/dist/hooks/init.js +57 -0
  368. package/dist/index.d.ts +1 -0
  369. package/dist/index.js +1 -0
  370. package/dist/lib/agents/commands.d.ts +189 -0
  371. package/dist/lib/agents/commands.js +893 -0
  372. package/dist/lib/agents/index.d.ts +54 -0
  373. package/dist/lib/agents/index.js +382 -0
  374. package/dist/lib/branch/index.d.ts +120 -0
  375. package/dist/lib/branch/index.js +334 -0
  376. package/dist/lib/colors.d.ts +94 -0
  377. package/dist/lib/colors.js +68 -0
  378. package/dist/lib/commands/docker-command.d.ts +21 -0
  379. package/dist/lib/commands/docker-command.js +27 -0
  380. package/dist/lib/database/index.d.ts +176 -0
  381. package/dist/lib/database/index.js +581 -0
  382. package/dist/lib/docker/resolve.d.ts +38 -0
  383. package/dist/lib/docker/resolve.js +175 -0
  384. package/dist/lib/execution/config.d.ts +150 -0
  385. package/dist/lib/execution/config.js +541 -0
  386. package/dist/lib/execution/devcontainer.d.ts +85 -0
  387. package/dist/lib/execution/devcontainer.js +594 -0
  388. package/dist/lib/execution/index.d.ts +10 -0
  389. package/dist/lib/execution/index.js +10 -0
  390. package/dist/lib/execution/runners.d.ts +53 -0
  391. package/dist/lib/execution/runners.js +1182 -0
  392. package/dist/lib/execution/spawner.d.ts +85 -0
  393. package/dist/lib/execution/spawner.js +548 -0
  394. package/dist/lib/execution/storage.d.ts +159 -0
  395. package/dist/lib/execution/storage.js +425 -0
  396. package/dist/lib/execution/types.d.ts +145 -0
  397. package/dist/lib/execution/types.js +157 -0
  398. package/dist/lib/init/index.d.ts +75 -0
  399. package/dist/lib/init/index.js +355 -0
  400. package/dist/lib/machine-config.d.ts +170 -0
  401. package/dist/lib/machine-config.js +386 -0
  402. package/dist/lib/pmo/base-command.d.ts +195 -0
  403. package/dist/lib/pmo/base-command.js +319 -0
  404. package/dist/lib/pmo/create-spec-folders.d.ts +43 -0
  405. package/dist/lib/pmo/create-spec-folders.js +64 -0
  406. package/dist/lib/pmo/epic-files.d.ts +56 -0
  407. package/dist/lib/pmo/epic-files.js +195 -0
  408. package/dist/lib/pmo/find-pmo.d.ts +14 -0
  409. package/dist/lib/pmo/find-pmo.js +172 -0
  410. package/dist/lib/pmo/index.d.ts +109 -0
  411. package/dist/lib/pmo/index.js +501 -0
  412. package/dist/lib/pmo/markdown.d.ts +31 -0
  413. package/dist/lib/pmo/markdown.js +245 -0
  414. package/dist/lib/pmo/pmo-context.d.ts +27 -0
  415. package/dist/lib/pmo/pmo-context.js +44 -0
  416. package/dist/lib/pmo/schema.d.ts +82 -0
  417. package/dist/lib/pmo/schema.js +531 -0
  418. package/dist/lib/pmo/spec-parser.d.ts +25 -0
  419. package/dist/lib/pmo/spec-parser.js +205 -0
  420. package/dist/lib/pmo/spec-types.d.ts +43 -0
  421. package/dist/lib/pmo/spec-types.js +7 -0
  422. package/dist/lib/pmo/storage/actions.d.ts +34 -0
  423. package/dist/lib/pmo/storage/actions.js +177 -0
  424. package/dist/lib/pmo/storage/base.d.ts +47 -0
  425. package/dist/lib/pmo/storage/base.js +858 -0
  426. package/dist/lib/pmo/storage/dependencies.d.ts +61 -0
  427. package/dist/lib/pmo/storage/dependencies.js +267 -0
  428. package/dist/lib/pmo/storage/epics.d.ts +46 -0
  429. package/dist/lib/pmo/storage/epics.js +243 -0
  430. package/dist/lib/pmo/storage/helpers.d.ts +33 -0
  431. package/dist/lib/pmo/storage/helpers.js +148 -0
  432. package/dist/lib/pmo/storage/index.d.ts +186 -0
  433. package/dist/lib/pmo/storage/index.js +689 -0
  434. package/dist/lib/pmo/storage/phases.d.ts +65 -0
  435. package/dist/lib/pmo/storage/phases.js +392 -0
  436. package/dist/lib/pmo/storage/projects.d.ts +79 -0
  437. package/dist/lib/pmo/storage/projects.js +303 -0
  438. package/dist/lib/pmo/storage/specs.d.ts +77 -0
  439. package/dist/lib/pmo/storage/specs.js +389 -0
  440. package/dist/lib/pmo/storage/statuses.d.ts +63 -0
  441. package/dist/lib/pmo/storage/statuses.js +404 -0
  442. package/dist/lib/pmo/storage/subtasks.d.ts +37 -0
  443. package/dist/lib/pmo/storage/subtasks.js +184 -0
  444. package/dist/lib/pmo/storage/templates.d.ts +40 -0
  445. package/dist/lib/pmo/storage/templates.js +210 -0
  446. package/dist/lib/pmo/storage/tickets.d.ts +57 -0
  447. package/dist/lib/pmo/storage/tickets.js +453 -0
  448. package/dist/lib/pmo/storage/types.d.ts +200 -0
  449. package/dist/lib/pmo/storage/types.js +5 -0
  450. package/dist/lib/pmo/storage/views.d.ts +44 -0
  451. package/dist/lib/pmo/storage/views.js +355 -0
  452. package/dist/lib/pmo/storage-sqlite.d.ts +7 -0
  453. package/dist/lib/pmo/storage-sqlite.js +7 -0
  454. package/dist/lib/pmo/sync-manager.d.ts +92 -0
  455. package/dist/lib/pmo/sync-manager.js +229 -0
  456. package/dist/lib/pmo/types.d.ts +710 -0
  457. package/dist/lib/pmo/types.js +108 -0
  458. package/dist/lib/pmo/utils.d.ts +122 -0
  459. package/dist/lib/pmo/utils.js +174 -0
  460. package/dist/lib/pmo/watcher.d.ts +43 -0
  461. package/dist/lib/pmo/watcher.js +208 -0
  462. package/dist/lib/pr/index.d.ts +150 -0
  463. package/dist/lib/pr/index.js +483 -0
  464. package/dist/lib/prompt-json.d.ts +231 -0
  465. package/dist/lib/prompt-json.js +213 -0
  466. package/dist/lib/repos/index.d.ts +81 -0
  467. package/dist/lib/repos/index.js +679 -0
  468. package/dist/lib/styles.d.ts +98 -0
  469. package/dist/lib/styles.js +195 -0
  470. package/dist/lib/themes.d.ts +128 -0
  471. package/dist/lib/themes.js +301 -0
  472. package/dist/lib/ui/BoardUI.d.ts +21 -0
  473. package/dist/lib/ui/BoardUI.js +85 -0
  474. package/dist/lib/ui/ClaimTicketUI.d.ts +17 -0
  475. package/dist/lib/ui/ClaimTicketUI.js +64 -0
  476. package/dist/lib/ui/CreateTicketUI.d.ts +13 -0
  477. package/dist/lib/ui/CreateTicketUI.js +101 -0
  478. package/dist/lib/workspace.d.ts +66 -0
  479. package/dist/lib/workspace.js +204 -0
  480. package/oclif.manifest.json +10593 -0
  481. package/package.json +103 -56
  482. package/LICENSE +0 -21
  483. package/dist/bin/prlt.d.ts +0 -11
  484. package/dist/bin/prlt.d.ts.map +0 -1
  485. package/dist/bin/prlt.js +0 -144
  486. package/dist/bin/prlt.js.map +0 -1
  487. package/dist/lib/config/index.d.ts +0 -14
  488. package/dist/lib/config/index.d.ts.map +0 -1
  489. package/dist/lib/config/index.js +0 -142
  490. package/dist/lib/config/index.js.map +0 -1
  491. package/dist/lib/config/upgrade.d.ts +0 -2
  492. package/dist/lib/config/upgrade.d.ts.map +0 -1
  493. package/dist/lib/config/upgrade.js +0 -248
  494. package/dist/lib/config/upgrade.js.map +0 -1
  495. package/dist/lib/themes/index.d.ts +0 -8
  496. package/dist/lib/themes/index.d.ts.map +0 -1
  497. package/dist/lib/themes/index.js +0 -80
  498. package/dist/lib/themes/index.js.map +0 -1
  499. package/dist/lib/utils/helpers.d.ts +0 -4
  500. package/dist/lib/utils/helpers.d.ts.map +0 -1
  501. package/dist/lib/utils/helpers.js +0 -39
  502. package/dist/lib/utils/helpers.js.map +0 -1
  503. package/dist/lib/utils/logger.d.ts +0 -4
  504. package/dist/lib/utils/logger.d.ts.map +0 -1
  505. package/dist/lib/utils/logger.js +0 -28
  506. package/dist/lib/utils/logger.js.map +0 -1
  507. package/dist/lib/workspace/index.d.ts +0 -13
  508. package/dist/lib/workspace/index.d.ts.map +0 -1
  509. package/dist/lib/workspace/index.js +0 -116
  510. package/dist/lib/workspace/index.js.map +0 -1
  511. package/dist/lib/worktree/index.d.ts +0 -7
  512. package/dist/lib/worktree/index.d.ts.map +0 -1
  513. package/dist/lib/worktree/index.js +0 -362
  514. package/dist/lib/worktree/index.js.map +0 -1
  515. package/dist/lib/worktree/migrate.d.ts +0 -2
  516. package/dist/lib/worktree/migrate.d.ts.map +0 -1
  517. package/dist/lib/worktree/migrate.js +0 -214
  518. package/dist/lib/worktree/migrate.js.map +0 -1
  519. package/dist/lib/worktree/repair.d.ts +0 -3
  520. package/dist/lib/worktree/repair.d.ts.map +0 -1
  521. package/dist/lib/worktree/repair.js +0 -320
  522. package/dist/lib/worktree/repair.js.map +0 -1
  523. package/dist/types/index.d.ts +0 -57
  524. package/dist/types/index.d.ts.map +0 -1
  525. package/dist/types/index.js +0 -3
  526. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,153 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { findAllHQs, findHQRootWithSource, isValidHQ } from '../../lib/workspace.js';
4
+ import { getRegisteredWorkspaces, getActiveWorkspace, } from '../../lib/machine-config.js';
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ export default class WorkspaceList extends Command {
8
+ static description = 'List all registered and discovered HQ workspaces';
9
+ static examples = [
10
+ '<%= config.bin %> <%= command.id %>',
11
+ '<%= config.bin %> <%= command.id %> --json',
12
+ ];
13
+ static flags = {
14
+ json: Flags.boolean({
15
+ description: 'Output as JSON for machine-readable format',
16
+ default: false,
17
+ }),
18
+ };
19
+ async run() {
20
+ const { flags } = await this.parse(WorkspaceList);
21
+ const cwd = process.cwd();
22
+ // Get registered workspaces from machine config
23
+ const registeredWorkspaces = getRegisteredWorkspaces();
24
+ const activeWorkspacePath = getActiveWorkspace();
25
+ // Also find any workspaces in directory tree (for backward compatibility)
26
+ const discoveredHQs = findAllHQs(cwd);
27
+ // Get the current active workspace (from findHQRootWithSource)
28
+ const currentWorkspace = findHQRootWithSource(cwd);
29
+ // Build unified workspace list
30
+ const workspaces = [];
31
+ const seenPaths = new Set();
32
+ // Add registered workspaces first
33
+ for (const workspace of registeredWorkspaces) {
34
+ const exists = fs.existsSync(workspace.path);
35
+ const isActive = activeWorkspacePath === workspace.path ||
36
+ currentWorkspace?.path === workspace.path;
37
+ let hasPMO = false;
38
+ if (exists) {
39
+ const dbPath = path.join(workspace.path, '.proletariat', 'workspace.db');
40
+ hasPMO = fs.existsSync(dbPath);
41
+ }
42
+ workspaces.push({
43
+ name: workspace.name,
44
+ path: workspace.path,
45
+ isActive,
46
+ exists,
47
+ hasPMO,
48
+ registeredAt: workspace.registeredAt,
49
+ source: 'registry',
50
+ });
51
+ seenPaths.add(workspace.path);
52
+ }
53
+ // Add discovered workspaces that aren't in the registry
54
+ for (const hqPath of discoveredHQs) {
55
+ if (seenPaths.has(hqPath))
56
+ continue;
57
+ // Get workspace info
58
+ const configPath = path.join(hqPath, '.proletariat', 'config.json');
59
+ let workspaceName = path.basename(hqPath);
60
+ if (fs.existsSync(configPath)) {
61
+ try {
62
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
63
+ workspaceName = config.name || workspaceName;
64
+ }
65
+ catch {
66
+ // Use defaults
67
+ }
68
+ }
69
+ // Check if it has PMO
70
+ const dbPath = path.join(hqPath, '.proletariat', 'workspace.db');
71
+ const hasPMO = fs.existsSync(dbPath);
72
+ const isActive = currentWorkspace?.path === hqPath;
73
+ workspaces.push({
74
+ name: workspaceName,
75
+ path: hqPath,
76
+ isActive,
77
+ exists: true,
78
+ hasPMO,
79
+ source: 'discovered',
80
+ });
81
+ }
82
+ // JSON output
83
+ if (flags.json) {
84
+ const output = {
85
+ workspaces: workspaces.map((w) => ({
86
+ name: w.name,
87
+ path: w.path,
88
+ active: w.isActive,
89
+ exists: w.exists,
90
+ hasPMO: w.hasPMO,
91
+ registeredAt: w.registeredAt,
92
+ source: w.source,
93
+ })),
94
+ activeWorkspace: activeWorkspacePath,
95
+ envOverride: process.env.PRLT_HQ_PATH || null,
96
+ };
97
+ this.log(JSON.stringify(output, null, 2));
98
+ return;
99
+ }
100
+ // Human-readable output
101
+ if (workspaces.length === 0) {
102
+ this.log(chalk.yellow('No workspaces found.'));
103
+ this.log(chalk.gray('Run "prlt init" to create a new workspace.'));
104
+ return;
105
+ }
106
+ this.log(chalk.blue('\nRegistered workspaces:\n'));
107
+ for (const workspace of workspaces) {
108
+ const activeMarker = workspace.isActive ? chalk.green(' (active)') : '';
109
+ const envMarker = workspace.isActive && currentWorkspace?.source === 'env'
110
+ ? chalk.cyan(' [via PRLT_HQ_PATH]')
111
+ : '';
112
+ const pmoMarker = workspace.hasPMO
113
+ ? chalk.gray(' [has PMO]')
114
+ : chalk.gray(' [no PMO]');
115
+ const unregisteredMarker = workspace.source === 'discovered'
116
+ ? chalk.yellow(' [not registered]')
117
+ : '';
118
+ if (!workspace.exists) {
119
+ // Warning for stale registration
120
+ this.log(` ${chalk.red('⚠')} ${chalk.strikethrough(chalk.white(workspace.name))}${activeMarker}`);
121
+ this.log(chalk.red(` Path no longer exists: ${workspace.path}`));
122
+ }
123
+ else {
124
+ this.log(` ${chalk.white(workspace.name)}${activeMarker}${envMarker}${pmoMarker}${unregisteredMarker}`);
125
+ this.log(chalk.gray(` Path: ${workspace.path}`));
126
+ }
127
+ this.log('');
128
+ }
129
+ // Show warning for unregistered workspaces
130
+ const unregistered = workspaces.filter((w) => w.source === 'discovered');
131
+ if (unregistered.length > 0) {
132
+ this.log(chalk.yellow('Some workspaces are not registered.'));
133
+ this.log(chalk.gray('Run "prlt workspace add <path>" to register them.'));
134
+ this.log('');
135
+ }
136
+ // Show helpful hints if multiple workspaces found
137
+ const registeredCount = workspaces.filter((w) => w.source === 'registry').length;
138
+ if (registeredCount > 1) {
139
+ this.log(chalk.gray('To switch workspaces, run:'));
140
+ this.log(chalk.cyan(' prlt workspace use <name|path>'));
141
+ this.log('');
142
+ }
143
+ // Show PRLT_HQ_PATH if set
144
+ if (process.env.PRLT_HQ_PATH) {
145
+ this.log(chalk.blue('Current PRLT_HQ_PATH:'));
146
+ this.log(chalk.cyan(` ${process.env.PRLT_HQ_PATH}`));
147
+ if (!isValidHQ(process.env.PRLT_HQ_PATH)) {
148
+ this.log(chalk.red(' (Warning: This path is not a valid HQ workspace)'));
149
+ }
150
+ this.log('');
151
+ }
152
+ }
153
+ }
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class WorkspaceRemove extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ nameOrPath: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ private resolveWorkspacePath;
13
+ }
@@ -0,0 +1,98 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { findWorkspacesByName, findWorkspaceByPath, unregisterWorkspace, normalizePath, getActiveWorkspace, } from '../../lib/machine-config.js';
5
+ import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
6
+ export default class WorkspaceRemove extends Command {
7
+ static description = 'Unregister a workspace from the machine config (does NOT delete files)';
8
+ static examples = [
9
+ '<%= config.bin %> <%= command.id %> my-workspace',
10
+ '<%= config.bin %> <%= command.id %> /path/to/workspace',
11
+ ];
12
+ static args = {
13
+ nameOrPath: Args.string({
14
+ description: 'Workspace name or path to unregister',
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ json: Flags.boolean({
20
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
21
+ default: false,
22
+ }),
23
+ };
24
+ async run() {
25
+ const { args, flags } = await this.parse(WorkspaceRemove);
26
+ // Check if JSON output mode is active
27
+ const jsonMode = shouldOutputJson(flags);
28
+ // Helper to handle errors in JSON mode
29
+ const handleError = (code, message) => {
30
+ if (jsonMode) {
31
+ outputErrorAsJson(code, message, createMetadata('workspace remove', flags));
32
+ this.exit(1);
33
+ }
34
+ this.error(message);
35
+ };
36
+ const input = args.nameOrPath;
37
+ // Resolve workspace path
38
+ const workspacePath = await this.resolveWorkspacePath(input, jsonMode, flags);
39
+ // Check if this is the active workspace
40
+ const activeWorkspace = getActiveWorkspace();
41
+ const wasActive = activeWorkspace === workspacePath;
42
+ // Unregister the workspace
43
+ const removed = unregisterWorkspace(workspacePath);
44
+ if (removed) {
45
+ this.log(chalk.green(`Unregistered workspace: ${workspacePath}`));
46
+ this.log(chalk.gray('Note: Files were NOT deleted, only removed from registry.'));
47
+ if (wasActive) {
48
+ this.log(chalk.yellow('This was the active workspace. Active workspace has been cleared.'));
49
+ this.log(chalk.gray('Run "prlt workspace use <name>" to set a new active workspace.'));
50
+ }
51
+ }
52
+ else {
53
+ this.error(`Failed to unregister workspace: ${workspacePath}`);
54
+ }
55
+ }
56
+ async resolveWorkspacePath(input, jsonMode = false, flags = {}) {
57
+ // First, try to find by path
58
+ const normalizedPath = normalizePath(input);
59
+ const byPath = findWorkspaceByPath(normalizedPath);
60
+ if (byPath) {
61
+ return byPath.path;
62
+ }
63
+ // Try to find by name
64
+ const matches = findWorkspacesByName(input);
65
+ if (matches.length === 0) {
66
+ if (jsonMode) {
67
+ outputErrorAsJson('WORKSPACE_NOT_FOUND', `Workspace not found: ${input}`, createMetadata('workspace remove', flags));
68
+ this.exit(1);
69
+ }
70
+ this.error(`Workspace not found: ${input}`);
71
+ }
72
+ if (matches.length === 1) {
73
+ return matches[0].path;
74
+ }
75
+ // Build choices once, use for both JSON and interactive modes
76
+ const workspaceChoices = matches.map((w) => ({
77
+ name: `${w.name} - ${w.path}`,
78
+ value: w.path,
79
+ }));
80
+ const message = `Multiple workspaces found with name "${input}". Which workspace do you want to remove?`;
81
+ // In JSON mode, output workspace selection prompt
82
+ if (jsonMode) {
83
+ outputPromptAsJson(buildPromptConfig('list', 'workspacePath', message, workspaceChoices), createMetadata('workspace remove', flags));
84
+ this.exit(0);
85
+ }
86
+ // Multiple workspaces with same name - prompt user to choose
87
+ this.log(chalk.yellow(`Multiple workspaces found with name "${input}":`));
88
+ const { selected } = await inquirer.prompt([
89
+ {
90
+ type: 'list',
91
+ name: 'selected',
92
+ message: 'Which workspace do you want to remove?',
93
+ choices: workspaceChoices,
94
+ },
95
+ ]);
96
+ return selected;
97
+ }
98
+ }
@@ -0,0 +1,12 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class WorkspaceUse extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ nameOrPath: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,111 @@
1
+ import { Command, Args, Flags } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import * as fs from 'node:fs';
5
+ import { isValidHQ } from '../../lib/workspace.js';
6
+ import { findWorkspacesByName, findWorkspaceByPath, setActiveWorkspace, normalizePath, getRegisteredWorkspaces, } from '../../lib/machine-config.js';
7
+ import { shouldOutputJson, outputPromptAsJson, outputErrorAsJson, createMetadata, buildPromptConfig, } from '../../lib/prompt-json.js';
8
+ export default class WorkspaceUse extends Command {
9
+ static description = 'Set the active workspace';
10
+ static examples = [
11
+ '<%= config.bin %> <%= command.id %> my-workspace',
12
+ '<%= config.bin %> <%= command.id %> /path/to/workspace',
13
+ ];
14
+ static args = {
15
+ nameOrPath: Args.string({
16
+ description: 'Workspace name or path',
17
+ required: true,
18
+ }),
19
+ };
20
+ static flags = {
21
+ json: Flags.boolean({
22
+ description: 'Output prompt configuration as JSON (for AI agents/scripts)',
23
+ default: false,
24
+ }),
25
+ };
26
+ async run() {
27
+ const { args, flags } = await this.parse(WorkspaceUse);
28
+ // Check if JSON output mode is active
29
+ const jsonMode = shouldOutputJson(flags);
30
+ // Helper to handle errors in JSON mode
31
+ const handleError = (code, message) => {
32
+ if (jsonMode) {
33
+ outputErrorAsJson(code, message, createMetadata('workspace use', flags));
34
+ this.exit(1);
35
+ }
36
+ this.error(message);
37
+ };
38
+ const input = args.nameOrPath;
39
+ // First, try to find by path
40
+ const normalizedPath = normalizePath(input);
41
+ let workspace = findWorkspaceByPath(normalizedPath);
42
+ if (!workspace) {
43
+ // Try to find by name
44
+ const matches = findWorkspacesByName(input);
45
+ if (matches.length === 0) {
46
+ // Check if input is a valid path that exists but isn't registered
47
+ if (fs.existsSync(normalizedPath) && isValidHQ(normalizedPath)) {
48
+ this.log(chalk.yellow(`Workspace at "${normalizedPath}" exists but is not registered.`));
49
+ this.log(chalk.gray('Run "prlt workspace add" to register it first, or specify a registered workspace.'));
50
+ this.log('');
51
+ this.log(chalk.gray('Registered workspaces:'));
52
+ const registered = getRegisteredWorkspaces();
53
+ if (registered.length === 0) {
54
+ this.log(chalk.gray(' (none)'));
55
+ }
56
+ else {
57
+ for (const w of registered) {
58
+ this.log(chalk.gray(` - ${w.name} (${w.path})`));
59
+ }
60
+ }
61
+ this.error('Workspace not registered');
62
+ }
63
+ this.error(`Workspace not found: ${input}`);
64
+ }
65
+ if (matches.length > 1) {
66
+ // Build choices once, use for both JSON and interactive modes
67
+ const workspaceChoices = matches.map((w) => ({
68
+ name: `${w.name} - ${w.path}`,
69
+ value: w.path,
70
+ }));
71
+ const message = `Multiple workspaces found with name "${input}". Which workspace do you want to use?`;
72
+ // In JSON mode, output workspace selection prompt
73
+ if (jsonMode) {
74
+ outputPromptAsJson(buildPromptConfig('list', 'workspacePath', message, workspaceChoices), createMetadata('workspace use', flags));
75
+ return;
76
+ }
77
+ // Multiple workspaces with same name - prompt user to choose
78
+ this.log(chalk.yellow(`Multiple workspaces found with name "${input}":`));
79
+ const { selected } = await inquirer.prompt([
80
+ {
81
+ type: 'list',
82
+ name: 'selected',
83
+ message: 'Which workspace do you want to use?',
84
+ choices: workspaceChoices,
85
+ },
86
+ ]);
87
+ workspace = matches.find((w) => w.path === selected);
88
+ }
89
+ else {
90
+ workspace = matches[0];
91
+ }
92
+ }
93
+ // Validate workspace still exists on filesystem
94
+ if (!fs.existsSync(workspace.path)) {
95
+ this.error(`Workspace path no longer exists: ${workspace.path}`);
96
+ }
97
+ // Validate it's still a valid HQ
98
+ if (!isValidHQ(workspace.path)) {
99
+ this.error(`Path is no longer a valid workspace: ${workspace.path}`);
100
+ }
101
+ // Set as active workspace
102
+ try {
103
+ setActiveWorkspace(workspace.path);
104
+ this.log(chalk.green(`Active workspace set to: ${workspace.name}`));
105
+ this.log(chalk.gray(` Path: ${workspace.path}`));
106
+ }
107
+ catch (error) {
108
+ this.error(`Failed to set active workspace: ${error.message}`);
109
+ }
110
+ }
111
+ }
@@ -0,0 +1,11 @@
1
+ import { Hook } from '@oclif/core';
2
+ /**
3
+ * Init hook - runs before every command
4
+ *
5
+ * Detects first-time users and redirects them to the init flow.
6
+ * A user is considered "first-time" if:
7
+ * - No workspaces are registered in machine config (~/.proletariat/config.json)
8
+ * - AND they're not currently inside a valid HQ directory
9
+ */
10
+ declare const hook: Hook<'init'>;
11
+ export default hook;
@@ -0,0 +1,57 @@
1
+ import { readMachineConfig } from '../lib/machine-config.js';
2
+ import { findHQRoot } from '../lib/workspace.js';
3
+ /**
4
+ * Init hook - runs before every command
5
+ *
6
+ * Detects first-time users and redirects them to the init flow.
7
+ * A user is considered "first-time" if:
8
+ * - No workspaces are registered in machine config (~/.proletariat/config.json)
9
+ * - AND they're not currently inside a valid HQ directory
10
+ */
11
+ const hook = async function ({ id, config }) {
12
+ // Skip for init command to avoid infinite loop
13
+ if (id === 'init') {
14
+ return;
15
+ }
16
+ // Skip for help-related commands/flags
17
+ // When user runs just `prlt` with no args, id is undefined
18
+ if (!id || id === 'help') {
19
+ // Check if this is first-time user running bare `prlt`
20
+ if (!id && isFirstTimeUser()) {
21
+ // Run init command
22
+ const { run } = await import('@oclif/core');
23
+ await run(['init'], config);
24
+ // Exit after init completes to prevent showing help
25
+ process.exit(0);
26
+ }
27
+ return;
28
+ }
29
+ // For all other commands, check if first-time user
30
+ if (isFirstTimeUser()) {
31
+ const chalk = await import('chalk');
32
+ console.log(chalk.default.yellow('\n⚠️ No workspace found. Let\'s set one up first.\n'));
33
+ // Run init command
34
+ const { run } = await import('@oclif/core');
35
+ await run(['init'], config);
36
+ // Exit after init - user should re-run their original command
37
+ console.log(chalk.default.blue(`\n✅ Setup complete! You can now run: prlt ${id}\n`));
38
+ process.exit(0);
39
+ }
40
+ };
41
+ /**
42
+ * Check if this is a first-time user (no headquarters configured)
43
+ */
44
+ function isFirstTimeUser() {
45
+ // Check if user is currently inside a valid HQ directory
46
+ const currentHQ = findHQRoot();
47
+ if (currentHQ) {
48
+ return false;
49
+ }
50
+ // Check if any headquarters are registered in machine config
51
+ const machineConfig = readMachineConfig();
52
+ if (machineConfig.headquarters.length > 0) {
53
+ return false;
54
+ }
55
+ return true;
56
+ }
57
+ export default hook;
@@ -0,0 +1 @@
1
+ export { run } from '@oclif/core';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export { run } from '@oclif/core';
@@ -0,0 +1,189 @@
1
+ import { Agent, Repository } from '../database/index.js';
2
+ export interface AgentStatus {
3
+ name: string;
4
+ exists: boolean;
5
+ branch?: string;
6
+ assignedTickets: string[];
7
+ completedTickets: string[];
8
+ repositories: {
9
+ name: string;
10
+ status: string;
11
+ commitsAhead: number;
12
+ }[];
13
+ }
14
+ export interface WorkspaceInfo {
15
+ path: string;
16
+ type: 'hq' | 'workspace';
17
+ workspaceName: string;
18
+ hasPMO: boolean;
19
+ agents: Agent[];
20
+ repositories: Repository[];
21
+ agentsPath: string;
22
+ /** Active theme ID (if any) */
23
+ activeThemeId: string | null;
24
+ /** Directory name for persistent agents (e.g., 'staff', 'garage', 'portfolio') */
25
+ persistentAgentsDir: string;
26
+ /** Directory name for ephemeral agents (e.g., 'temp', 'pit', 'incubator') */
27
+ ephemeralAgentsDir: string;
28
+ }
29
+ /**
30
+ * Find workspace root and return workspace information.
31
+ *
32
+ * Search priority:
33
+ * 1. PRLT_HQ_PATH environment variable (ONLY when DEVCONTAINER=true - for devcontainer mounts)
34
+ * 2. Current directory tree for HQ with workspace.db
35
+ *
36
+ * NOTE: PRLT_HQ_PATH is ignored on host machines to support multiple agents
37
+ * working in different workspaces simultaneously.
38
+ */
39
+ export declare function getWorkspaceInfo(): WorkspaceInfo;
40
+ /**
41
+ * Validate agent name
42
+ */
43
+ export { isValidAgentName } from '../themes.js';
44
+ /**
45
+ * Get suggested agent names (not yet added to workspace)
46
+ */
47
+ export declare function getAvailableAgentSuggestions(workspaceInfo: WorkspaceInfo): string[];
48
+ /**
49
+ * Interactive agent selection - prompts user for agent names
50
+ */
51
+ export declare function selectAgentsInteractively(workspaceInfo: WorkspaceInfo, message?: string): Promise<string[]>;
52
+ /**
53
+ * Interactive selection from existing agents
54
+ */
55
+ export declare function selectExistingAgentsInteractively(workspaceInfo: WorkspaceInfo, message?: string): Promise<string[]>;
56
+ /**
57
+ * Get detailed status for a specific agent
58
+ */
59
+ export declare function getAgentStatus(workspaceInfo: WorkspaceInfo, agentName: string): AgentStatus;
60
+ /**
61
+ * Get status for all agents
62
+ */
63
+ export declare function getAllAgentsStatus(workspaceInfo: WorkspaceInfo): AgentStatus[];
64
+ /**
65
+ * Validate agent names (must be valid format)
66
+ */
67
+ export declare function validateAgentNames(agentNames: string[]): {
68
+ valid: string[];
69
+ invalid: string[];
70
+ };
71
+ export interface AddAgentOptions {
72
+ skipDevcontainer?: boolean;
73
+ themeId?: string;
74
+ }
75
+ /**
76
+ * Create agent worktrees and update database
77
+ */
78
+ export declare function addAgentsToWorkspace(workspaceInfo: WorkspaceInfo, agentNames: string[], options?: AddAgentOptions): Promise<string[]>;
79
+ /**
80
+ * Remove agents and clean up worktrees
81
+ */
82
+ export declare function removeAgentsFromWorkspace(workspaceInfo: WorkspaceInfo, agentNames: string[]): Promise<{
83
+ removed: string[];
84
+ failed: string[];
85
+ }>;
86
+ export interface EphemeralAgentOptions {
87
+ themeId?: string;
88
+ skipDevcontainer?: boolean;
89
+ /**
90
+ * Optional logger for conflict messages (e.g., when a tmux session or directory already exists)
91
+ */
92
+ log?: (message: string) => void;
93
+ }
94
+ export interface EphemeralAgentResult {
95
+ name: string;
96
+ baseName: string;
97
+ worktreePath: string;
98
+ agent: Agent;
99
+ }
100
+ /**
101
+ * Create an ephemeral agent on-demand for a spawn operation.
102
+ * Creates worktree in agents/temp/{name}/
103
+ */
104
+ export declare function createEphemeralAgent(workspaceInfo: WorkspaceInfo, options?: EphemeralAgentOptions): Promise<EphemeralAgentResult>;
105
+ /**
106
+ * Check if a tmux session exists for a given name
107
+ */
108
+ export declare function tmuxSessionExists(sessionName: string): boolean;
109
+ /**
110
+ * Get list of active tmux sessions that match our pattern
111
+ * Pattern: {ticketId}-{action}-{agent}
112
+ */
113
+ export declare function getActiveTmuxSessions(): Array<{
114
+ name: string;
115
+ ticketId: string;
116
+ agent: string;
117
+ }>;
118
+ /**
119
+ * Check if there's an active tmux session for a specific ticket
120
+ */
121
+ export declare function getTicketTmuxSession(ticketId: string): {
122
+ sessionName: string;
123
+ agent: string;
124
+ } | null;
125
+ /**
126
+ * Kill a tmux session by name
127
+ */
128
+ export declare function killTmuxSession(sessionName: string): boolean;
129
+ export interface CleanupOptions {
130
+ /** Logger for status messages */
131
+ log?: (message: string) => void;
132
+ /** If true, only show what would be cleaned without doing it */
133
+ dryRun?: boolean;
134
+ /** If true, skip git safety checks and force cleanup */
135
+ force?: boolean;
136
+ /** If true, push unpushed commits before cleanup */
137
+ pushFirst?: boolean;
138
+ }
139
+ export interface WorktreeGitStatus {
140
+ worktreePath: string;
141
+ repoName: string;
142
+ branch: string;
143
+ hasUncommittedChanges: boolean;
144
+ uncommittedFiles: string[];
145
+ hasUnpushedCommits: boolean;
146
+ unpushedCount: number;
147
+ }
148
+ export interface AgentGitStatus {
149
+ agentName: string;
150
+ worktrees: WorktreeGitStatus[];
151
+ hasUnsavedWork: boolean;
152
+ }
153
+ export interface CleanupResult {
154
+ agent: string;
155
+ success: boolean;
156
+ tmuxSessionsKilled: string[];
157
+ containersRemoved: string[];
158
+ directoriesRemoved: string[];
159
+ errors: string[];
160
+ /** Git status if cleanup was blocked due to unsaved work */
161
+ gitStatus?: AgentGitStatus;
162
+ /** Whether cleanup was blocked due to unsaved work */
163
+ blockedByGit?: boolean;
164
+ }
165
+ /**
166
+ * Get tmux sessions associated with an agent
167
+ */
168
+ export declare function getAgentTmuxSessions(agentName: string): string[];
169
+ /**
170
+ * Check git status for all worktrees in an agent directory.
171
+ * Returns info about uncommitted changes and unpushed commits.
172
+ */
173
+ export declare function getAgentGitStatus(workspaceInfo: WorkspaceInfo, agentName: string): AgentGitStatus;
174
+ /**
175
+ * Commit and push all work in an agent's worktrees.
176
+ * - Stages all uncommitted changes (git add -A)
177
+ * - Commits with a WIP message if there are staged changes
178
+ * - Pushes all commits to remote
179
+ * Returns true if all operations succeeded.
180
+ */
181
+ export declare function pushAgentWork(workspaceInfo: WorkspaceInfo, agentName: string, log?: (message: string) => void): boolean;
182
+ /**
183
+ * Clean up a single agent - removes resources but keeps DB record (marked as cleaned)
184
+ */
185
+ export declare function cleanupAgent(workspaceInfo: WorkspaceInfo, agentName: string, options?: CleanupOptions): Promise<CleanupResult>;
186
+ /**
187
+ * Get agents that can be cleaned up (active ephemeral agents with no running work)
188
+ */
189
+ export declare function getCleanableAgents(workspaceInfo: WorkspaceInfo, checkRunning?: boolean): Agent[];