@proletariat/cli 0.2.0 → 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 +512 -253
  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,541 @@
1
+ /**
2
+ * Execution Configuration Storage
3
+ *
4
+ * Stores user preferences for execution settings in the workspace SQLite database.
5
+ * Uses the workspace_settings table (not pmo_settings - execution is workspace-level).
6
+ */
7
+ import inquirer from 'inquirer';
8
+ import { DEFAULT_EXECUTION_CONFIG } from './types.js';
9
+ import { isGHInstalled, isGHAuthenticated } from '../pr/index.js';
10
+ import { execSync } from 'child_process';
11
+ const SETTINGS_TABLE = 'workspace_settings';
12
+ // Config keys stored in workspace_settings table
13
+ const CONFIG_KEYS = {
14
+ terminalApp: 'execution.terminal.app',
15
+ shell: 'execution.shell',
16
+ defaultMode: 'execution.default_mode',
17
+ defaultExecutor: 'execution.default_executor',
18
+ autoExecute: 'execution.auto_execute',
19
+ tmuxSession: 'execution.tmux.session',
20
+ tmuxLayout: 'execution.tmux.layout',
21
+ tmuxControlMode: 'execution.tmux.control_mode',
22
+ dockerImage: 'execution.docker.image',
23
+ dockerNetwork: 'execution.docker.network',
24
+ dockerMemory: 'execution.docker.memory',
25
+ dockerCpus: 'execution.docker.cpus',
26
+ vmDefaultHost: 'execution.vm.default_host',
27
+ vmUser: 'execution.vm.user',
28
+ vmKeyPath: 'execution.vm.key_path',
29
+ vmSyncMethod: 'execution.vm.sync_method',
30
+ coderName: 'coder.name',
31
+ };
32
+ /**
33
+ * Get a setting value from the database
34
+ */
35
+ function getSetting(db, key) {
36
+ const row = db
37
+ .prepare(`SELECT value FROM ${SETTINGS_TABLE} WHERE key = ?`)
38
+ .get(key);
39
+ return row?.value ?? null;
40
+ }
41
+ /**
42
+ * Set a setting value in the database
43
+ */
44
+ function setSetting(db, key, value) {
45
+ db.prepare(`
46
+ INSERT INTO ${SETTINGS_TABLE} (key, value)
47
+ VALUES (?, ?)
48
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value
49
+ `).run(key, value);
50
+ }
51
+ /**
52
+ * Load execution config from database, merging with defaults
53
+ */
54
+ export function loadExecutionConfig(db) {
55
+ const config = { ...DEFAULT_EXECUTION_CONFIG };
56
+ // Load terminal app
57
+ const terminalApp = getSetting(db, CONFIG_KEYS.terminalApp);
58
+ if (terminalApp) {
59
+ config.terminal = { app: terminalApp };
60
+ }
61
+ // Load shell
62
+ const shell = getSetting(db, CONFIG_KEYS.shell);
63
+ if (shell) {
64
+ config.shell = shell;
65
+ }
66
+ // Load default environment
67
+ const defaultEnvironment = getSetting(db, CONFIG_KEYS.defaultMode);
68
+ if (defaultEnvironment) {
69
+ config.defaultEnvironment = defaultEnvironment;
70
+ }
71
+ // Load default executor
72
+ const defaultExecutor = getSetting(db, CONFIG_KEYS.defaultExecutor);
73
+ if (defaultExecutor) {
74
+ config.defaultExecutor = defaultExecutor;
75
+ }
76
+ // Load auto execute
77
+ const autoExecute = getSetting(db, CONFIG_KEYS.autoExecute);
78
+ if (autoExecute !== null) {
79
+ config.autoExecute = autoExecute === 'true';
80
+ }
81
+ // Load tmux settings
82
+ const tmuxSession = getSetting(db, CONFIG_KEYS.tmuxSession);
83
+ if (tmuxSession) {
84
+ config.tmux = { ...config.tmux, session: tmuxSession };
85
+ }
86
+ const tmuxLayout = getSetting(db, CONFIG_KEYS.tmuxLayout);
87
+ if (tmuxLayout) {
88
+ config.tmux = { ...config.tmux, layout: tmuxLayout };
89
+ }
90
+ const tmuxControlMode = getSetting(db, CONFIG_KEYS.tmuxControlMode);
91
+ if (tmuxControlMode !== null) {
92
+ config.tmux = { ...config.tmux, controlMode: tmuxControlMode === 'true' };
93
+ }
94
+ // Load docker settings
95
+ const dockerImage = getSetting(db, CONFIG_KEYS.dockerImage);
96
+ if (dockerImage) {
97
+ config.docker = { ...config.docker, image: dockerImage };
98
+ }
99
+ const dockerNetwork = getSetting(db, CONFIG_KEYS.dockerNetwork);
100
+ if (dockerNetwork) {
101
+ config.docker = { ...config.docker, network: dockerNetwork };
102
+ }
103
+ const dockerMemory = getSetting(db, CONFIG_KEYS.dockerMemory);
104
+ if (dockerMemory) {
105
+ config.docker = { ...config.docker, memory: dockerMemory };
106
+ }
107
+ const dockerCpus = getSetting(db, CONFIG_KEYS.dockerCpus);
108
+ if (dockerCpus) {
109
+ config.docker = { ...config.docker, cpus: parseInt(dockerCpus, 10) };
110
+ }
111
+ // Load VM settings
112
+ const vmDefaultHost = getSetting(db, CONFIG_KEYS.vmDefaultHost);
113
+ if (vmDefaultHost) {
114
+ config.vm = { ...config.vm, defaultHost: vmDefaultHost };
115
+ }
116
+ const vmUser = getSetting(db, CONFIG_KEYS.vmUser);
117
+ if (vmUser) {
118
+ config.vm = { ...config.vm, user: vmUser };
119
+ }
120
+ const vmKeyPath = getSetting(db, CONFIG_KEYS.vmKeyPath);
121
+ if (vmKeyPath) {
122
+ config.vm = { ...config.vm, keyPath: vmKeyPath };
123
+ }
124
+ const vmSyncMethod = getSetting(db, CONFIG_KEYS.vmSyncMethod);
125
+ if (vmSyncMethod) {
126
+ config.vm = { ...config.vm, syncMethod: vmSyncMethod };
127
+ }
128
+ return config;
129
+ }
130
+ /**
131
+ * Save a single execution config setting to database
132
+ */
133
+ export function saveExecutionSetting(db, key, value) {
134
+ setSetting(db, CONFIG_KEYS[key], value);
135
+ }
136
+ /**
137
+ * Save terminal app preference
138
+ */
139
+ export function saveTerminalApp(db, app) {
140
+ setSetting(db, CONFIG_KEYS.terminalApp, app);
141
+ }
142
+ /**
143
+ * Save shell preference
144
+ */
145
+ export function saveShell(db, shell) {
146
+ setSetting(db, CONFIG_KEYS.shell, shell);
147
+ }
148
+ /**
149
+ * Save tmux control mode preference.
150
+ * When enabled and using iTerm, tmux -CC is used for native tab integration.
151
+ */
152
+ export function saveTmuxControlMode(db, enabled) {
153
+ setSetting(db, CONFIG_KEYS.tmuxControlMode, enabled.toString());
154
+ }
155
+ /**
156
+ * Check if terminal app preference has been set
157
+ */
158
+ export function hasTerminalPreference(db) {
159
+ return getSetting(db, CONFIG_KEYS.terminalApp) !== null;
160
+ }
161
+ /**
162
+ * Check if shell preference has been set
163
+ */
164
+ export function hasShellPreference(db) {
165
+ return getSetting(db, CONFIG_KEYS.shell) !== null;
166
+ }
167
+ /**
168
+ * Auto-detect terminal app from environment.
169
+ * Uses TERM_PROGRAM env var set by most terminal emulators.
170
+ */
171
+ export function detectTerminalApp() {
172
+ const termProgram = process.env.TERM_PROGRAM?.toLowerCase() || '';
173
+ // Map TERM_PROGRAM values to our TerminalApp type
174
+ if (termProgram === 'iterm.app')
175
+ return 'iTerm';
176
+ if (termProgram === 'apple_terminal')
177
+ return 'Terminal';
178
+ if (termProgram === 'alacritty')
179
+ return 'Alacritty';
180
+ if (termProgram === 'wezterm')
181
+ return 'WezTerm';
182
+ if (termProgram === 'ghostty')
183
+ return 'Ghostty';
184
+ if (termProgram === 'kitty')
185
+ return 'Kitty';
186
+ if (termProgram === 'warp')
187
+ return 'Warp';
188
+ // Also check TERMINAL_EMULATOR for some apps
189
+ const termEmulator = process.env.TERMINAL_EMULATOR?.toLowerCase() || '';
190
+ if (termEmulator.includes('jetbrains'))
191
+ return 'tmux'; // IDE terminal, fall back to tmux
192
+ return null;
193
+ }
194
+ /**
195
+ * Auto-detect shell from environment.
196
+ * Uses SHELL env var.
197
+ */
198
+ export function detectShell() {
199
+ const shellPath = process.env.SHELL || '';
200
+ const shellName = shellPath.split('/').pop()?.toLowerCase() || '';
201
+ if (shellName === 'zsh')
202
+ return 'zsh';
203
+ if (shellName === 'bash')
204
+ return 'bash';
205
+ if (shellName === 'fish')
206
+ return 'fish';
207
+ return null;
208
+ }
209
+ /**
210
+ * Prompt user for terminal app preference (first-time setup)
211
+ */
212
+ export async function promptTerminalPreference(db) {
213
+ const { terminalApp } = await inquirer.prompt([
214
+ {
215
+ type: 'list',
216
+ name: 'terminalApp',
217
+ message: 'Which terminal app would you like to use for agent execution?',
218
+ choices: [
219
+ { name: 'iTerm', value: 'iTerm' },
220
+ { name: 'Terminal.app (macOS default)', value: 'Terminal' },
221
+ { name: 'Alacritty', value: 'Alacritty' },
222
+ { name: 'Ghostty', value: 'Ghostty' },
223
+ { name: 'Kitty', value: 'Kitty' },
224
+ { name: 'tmux', value: 'tmux' },
225
+ { name: 'Warp', value: 'Warp' },
226
+ { name: 'WezTerm', value: 'WezTerm' },
227
+ ],
228
+ default: 'iTerm',
229
+ },
230
+ ]);
231
+ // Save preference to database
232
+ saveTerminalApp(db, terminalApp);
233
+ // If iTerm selected, prompt for control mode preference
234
+ if (terminalApp === 'iTerm') {
235
+ await promptTmuxControlModePreference(db);
236
+ }
237
+ return terminalApp;
238
+ }
239
+ /**
240
+ * Prompt user for tmux control mode preference (iTerm only).
241
+ * When enabled, tmux -CC is used for native iTerm tab/window integration.
242
+ */
243
+ export async function promptTmuxControlModePreference(db) {
244
+ const { useControlMode } = await inquirer.prompt([
245
+ {
246
+ type: 'list',
247
+ name: 'useControlMode',
248
+ message: 'iTerm tmux integration mode:',
249
+ choices: [
250
+ {
251
+ name: 'Native tabs (tmux -CC) - iTerm handles windows/scrollback natively (Recommended)',
252
+ value: true,
253
+ },
254
+ {
255
+ name: 'Standard tmux - Traditional tmux interface inside iTerm',
256
+ value: false,
257
+ },
258
+ ],
259
+ default: true,
260
+ },
261
+ ]);
262
+ // Save preference to database
263
+ saveTmuxControlMode(db, useControlMode);
264
+ return useControlMode;
265
+ }
266
+ /**
267
+ * Get terminal app, auto-detecting or prompting if not set
268
+ */
269
+ export async function getTerminalApp(db) {
270
+ const config = loadExecutionConfig(db);
271
+ // If already set, return it
272
+ if (hasTerminalPreference(db)) {
273
+ return config.terminal.app;
274
+ }
275
+ // Try auto-detection first
276
+ const detected = detectTerminalApp();
277
+ if (detected) {
278
+ saveTerminalApp(db, detected);
279
+ // If iTerm detected, also enable control mode by default (best experience)
280
+ if (detected === 'iTerm') {
281
+ saveTmuxControlMode(db, true);
282
+ }
283
+ return detected;
284
+ }
285
+ // Fall back to prompting user
286
+ return promptTerminalPreference(db);
287
+ }
288
+ /**
289
+ * Prompt user for shell preference (first-time setup)
290
+ */
291
+ export async function promptShellPreference(db) {
292
+ const { shell } = await inquirer.prompt([
293
+ {
294
+ type: 'list',
295
+ name: 'shell',
296
+ message: 'Which shell do you use?',
297
+ choices: [
298
+ { name: 'zsh (macOS default)', value: 'zsh' },
299
+ { name: 'bash', value: 'bash' },
300
+ { name: 'fish', value: 'fish' },
301
+ ],
302
+ default: 'zsh',
303
+ },
304
+ ]);
305
+ // Save preference to database
306
+ saveShell(db, shell);
307
+ return shell;
308
+ }
309
+ /**
310
+ * Get shell, auto-detecting or prompting if not set
311
+ */
312
+ export async function getShell(db) {
313
+ const config = loadExecutionConfig(db);
314
+ // If already set, return it
315
+ if (hasShellPreference(db)) {
316
+ return config.shell;
317
+ }
318
+ // Try auto-detection first
319
+ const detected = detectShell();
320
+ if (detected) {
321
+ saveShell(db, detected);
322
+ return detected;
323
+ }
324
+ // Fall back to prompting user
325
+ return promptShellPreference(db);
326
+ }
327
+ /**
328
+ * Prompt for all execution settings in a consistent way.
329
+ * Used by work start, work spawn, and work watch commands.
330
+ */
331
+ export async function promptExecutionSettings(db, options) {
332
+ const { displayMode, environment, log = () => { } } = options;
333
+ // Load execution config from database
334
+ const executionConfig = loadExecutionConfig(db);
335
+ // If terminal display mode, ensure terminal and shell preferences are set (prompts on first use)
336
+ const needsTerminalConfig = displayMode === 'terminal';
337
+ if (needsTerminalConfig) {
338
+ const needsTerminal = !hasTerminalPreference(db);
339
+ const needsShell = !hasShellPreference(db);
340
+ // First-time setup header
341
+ if ((needsTerminal || needsShell) && !options.reconfigure) {
342
+ log('First-time execution setup');
343
+ log('');
344
+ }
345
+ let terminalApp;
346
+ let shell;
347
+ if (options.reconfigure) {
348
+ terminalApp = await promptTerminalPreference(db);
349
+ shell = await promptShellPreference(db);
350
+ }
351
+ else {
352
+ terminalApp = await getTerminalApp(db);
353
+ shell = await getShell(db);
354
+ }
355
+ executionConfig.terminal.app = terminalApp;
356
+ executionConfig.shell = shell;
357
+ }
358
+ // Prompt for output mode (interactive vs print)
359
+ // Only show this for terminal mode where streaming makes sense (not background)
360
+ let outputMode = options.outputMode ?? DEFAULT_EXECUTION_CONFIG.outputMode;
361
+ const streamingDisplayModes = ['terminal'];
362
+ if (options.outputMode === undefined && streamingDisplayModes.includes(displayMode)) {
363
+ const { selectedOutputMode } = await inquirer.prompt([
364
+ {
365
+ type: 'list',
366
+ name: 'selectedOutputMode',
367
+ message: 'How should Claude display output?',
368
+ choices: [
369
+ { name: 'interactive - Watch Claude work in real-time (streaming UI)', value: 'interactive' },
370
+ { name: 'print - Show final result only (better for logs)', value: 'print' },
371
+ ],
372
+ default: 'interactive',
373
+ },
374
+ ]);
375
+ outputMode = selectedOutputMode;
376
+ }
377
+ executionConfig.outputMode = outputMode;
378
+ // Prompt for permissions mode (unless flag override is provided)
379
+ let skipPermissions = options.skipPermissions ?? false;
380
+ if (options.skipPermissions === undefined) {
381
+ const containerNote = (environment === 'devcontainer' || environment === 'docker')
382
+ ? ' (container provides additional isolation)'
383
+ : '';
384
+ const { permissionMode } = await inquirer.prompt([
385
+ {
386
+ type: 'list',
387
+ name: 'permissionMode',
388
+ message: `Permission mode for Claude Code${containerNote}:`,
389
+ choices: [
390
+ { name: '🔒 safe - Requires approval for dangerous operations (recommended)', value: 'safe' },
391
+ { name: '⚠️ danger - Skip permission checks (--dangerously-skip-permissions)', value: 'danger' },
392
+ ],
393
+ default: 'safe',
394
+ },
395
+ ]);
396
+ skipPermissions = permissionMode === 'danger';
397
+ }
398
+ // Prompt for PR creation when work is complete (unless flag override is provided)
399
+ let createPR = options.createPR ?? false;
400
+ if (options.createPR === undefined) {
401
+ const ghAvailable = isGHInstalled() && isGHAuthenticated();
402
+ if (ghAvailable) {
403
+ const { prChoice } = await inquirer.prompt([
404
+ {
405
+ type: 'list',
406
+ name: 'prChoice',
407
+ message: 'Create a pull request when work is ready?',
408
+ choices: [
409
+ { name: '✓ Yes - Create PR when running `prlt work ready`', value: 'yes' },
410
+ { name: '✗ No - Just move ticket to review (can create PR later)', value: 'no' },
411
+ ],
412
+ default: 'yes',
413
+ },
414
+ ]);
415
+ createPR = prChoice === 'yes';
416
+ }
417
+ }
418
+ return {
419
+ executionConfig,
420
+ skipPermissions,
421
+ createPR,
422
+ };
423
+ }
424
+ // =============================================================================
425
+ // Coder Name Configuration
426
+ // =============================================================================
427
+ /**
428
+ * Get GitHub username via gh CLI.
429
+ * Returns null if gh is not installed or not authenticated.
430
+ */
431
+ export function getGitHubUsername() {
432
+ try {
433
+ const username = execSync('gh api user --jq .login', {
434
+ encoding: 'utf-8',
435
+ stdio: ['pipe', 'pipe', 'pipe'],
436
+ }).trim();
437
+ return username || null;
438
+ }
439
+ catch {
440
+ return null;
441
+ }
442
+ }
443
+ /**
444
+ * Get git config user.name as default coder name.
445
+ * Returns null if git user.name is not configured.
446
+ */
447
+ export function getGitUserName() {
448
+ try {
449
+ const userName = execSync('git config user.name', {
450
+ encoding: 'utf-8',
451
+ stdio: ['pipe', 'pipe', 'pipe'],
452
+ }).trim();
453
+ return userName || null;
454
+ }
455
+ catch {
456
+ return null;
457
+ }
458
+ }
459
+ /**
460
+ * Get the configured coder name from the database.
461
+ * Returns null if not configured.
462
+ */
463
+ export function getCoderName(db) {
464
+ return getSetting(db, CONFIG_KEYS.coderName);
465
+ }
466
+ /**
467
+ * Save coder name preference to database.
468
+ */
469
+ export function saveCoderName(db, name) {
470
+ setSetting(db, CONFIG_KEYS.coderName, name);
471
+ }
472
+ /**
473
+ * Check if coder name has been configured.
474
+ */
475
+ export function hasCoderName(db) {
476
+ return getSetting(db, CONFIG_KEYS.coderName) !== null;
477
+ }
478
+ /**
479
+ * Prompt user for coder name preference (first-time setup).
480
+ * Uses git config user.name as default if available.
481
+ */
482
+ export async function promptCoderName(db) {
483
+ const gitUserName = getGitUserName();
484
+ const defaultName = gitUserName
485
+ ? gitUserName.toLowerCase().replace(/[^a-z0-9]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '')
486
+ : '';
487
+ const { coderName } = await inquirer.prompt([
488
+ {
489
+ type: 'input',
490
+ name: 'coderName',
491
+ message: 'Enter your coder name (used in branch names):',
492
+ default: defaultName || undefined,
493
+ validate: (input) => {
494
+ if (!input.trim()) {
495
+ return 'Coder name is required';
496
+ }
497
+ // Validate it's kebab-case compatible
498
+ const normalized = input.toLowerCase().replace(/[^a-z0-9-]/g, '');
499
+ if (normalized !== input) {
500
+ return 'Coder name must be lowercase letters, numbers, and hyphens only';
501
+ }
502
+ return true;
503
+ },
504
+ },
505
+ ]);
506
+ // Save preference to database
507
+ saveCoderName(db, coderName);
508
+ return coderName;
509
+ }
510
+ /**
511
+ * Get coder name, auto-detecting from GitHub if not set.
512
+ * Priority: saved setting > GitHub username > git user.name > prompt
513
+ */
514
+ export async function getOrPromptCoderName(db) {
515
+ // If already set, return it
516
+ const existing = getCoderName(db);
517
+ if (existing) {
518
+ return existing;
519
+ }
520
+ // Try GitHub username first (most reliable for branch naming)
521
+ const ghUsername = getGitHubUsername();
522
+ if (ghUsername) {
523
+ saveCoderName(db, ghUsername);
524
+ return ghUsername;
525
+ }
526
+ // Fall back to git user.name (normalized to kebab-case)
527
+ const gitUserName = getGitUserName();
528
+ if (gitUserName) {
529
+ const normalized = gitUserName
530
+ .toLowerCase()
531
+ .replace(/[^a-z0-9]/g, '-')
532
+ .replace(/-+/g, '-')
533
+ .replace(/^-|-$/g, '');
534
+ if (normalized) {
535
+ saveCoderName(db, normalized);
536
+ return normalized;
537
+ }
538
+ }
539
+ // Last resort - prompt user
540
+ return promptCoderName(db);
541
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Devcontainer Template Generator
3
+ *
4
+ * Generates .devcontainer/ configuration for agent sandboxed execution.
5
+ * Uses a custom Dockerfile with network firewall for security sandboxing.
6
+ */
7
+ import { ExecutionConfig } from './types.js';
8
+ export interface DevcontainerOptions {
9
+ agentName: string;
10
+ agentDir: string;
11
+ repoWorktrees?: string[];
12
+ memory?: string;
13
+ cpus?: number;
14
+ timezone?: string;
15
+ }
16
+ export interface DevcontainerJson {
17
+ name: string;
18
+ build: {
19
+ dockerfile: string;
20
+ args?: Record<string, string>;
21
+ };
22
+ customizations: {
23
+ vscode: {
24
+ extensions: string[];
25
+ settings?: Record<string, unknown>;
26
+ };
27
+ };
28
+ capAdd: string[];
29
+ runArgs: string[];
30
+ remoteUser: string;
31
+ mounts: string[];
32
+ containerEnv?: Record<string, string>;
33
+ workspaceFolder: string;
34
+ postStartCommand: string;
35
+ waitFor: string;
36
+ }
37
+ /**
38
+ * Generate default devcontainer.json content
39
+ *
40
+ * Uses a custom Dockerfile with firewall for network sandboxing.
41
+ * Mounts the entire agent workspace directory so all contents (repos, prompt files, etc.)
42
+ * are accessible inside the container at /workspace.
43
+ */
44
+ export declare function generateDevcontainerJson(options: DevcontainerOptions, config?: ExecutionConfig): DevcontainerJson;
45
+ /**
46
+ * Generate Dockerfile content for the devcontainer.
47
+ * Uses architecture auto-detection for cross-platform compatibility.
48
+ */
49
+ export declare function generateDockerfile(options: DevcontainerOptions): string;
50
+ /**
51
+ * Generate firewall initialization script.
52
+ * Whitelists only necessary domains for Claude Code operation.
53
+ */
54
+ export declare function generateFirewallScript(): string;
55
+ /**
56
+ * Generate prlt setup script.
57
+ * Rebuilds better-sqlite3 if prlt is mounted from host (not installed via npm).
58
+ */
59
+ export declare function generatePrltSetupScript(): string;
60
+ /**
61
+ * Create .devcontainer/ directory structure for an agent
62
+ * Writes devcontainer.json, Dockerfile, and init-firewall.sh
63
+ */
64
+ export declare function createDevcontainerConfig(options: DevcontainerOptions, config?: ExecutionConfig): void;
65
+ /**
66
+ * Check if agent has devcontainer configuration
67
+ */
68
+ export declare function hasDevcontainerConfig(agentDir: string): boolean;
69
+ /**
70
+ * Read existing devcontainer.json
71
+ */
72
+ export declare function readDevcontainerJson(agentDir: string): DevcontainerJson | null;
73
+ /**
74
+ * Update devcontainer.json with new mounts (e.g., when new repo worktrees are added)
75
+ *
76
+ * Note: With the simplified mount strategy (entire agent workspace), this is mainly
77
+ * for backwards compatibility or if someone wants to customize mounts.
78
+ */
79
+ export declare function updateDevcontainerMounts(agentDir: string, _repoWorktrees: string[]): void;
80
+ /**
81
+ * Get list of repo directories inside the agent workspace.
82
+ * With the full workspace mount, this returns all non-hidden subdirectories
83
+ * (excluding .devcontainer).
84
+ */
85
+ export declare function getMountedRepos(agentDir: string): string[];