@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,150 @@
1
+ /**
2
+ * PR Utilities
3
+ *
4
+ * Utilities for creating and managing GitHub pull requests.
5
+ * Uses the `gh` CLI for GitHub operations.
6
+ */
7
+ export interface PRInfo {
8
+ number: number;
9
+ url: string;
10
+ title: string;
11
+ state: 'OPEN' | 'CLOSED' | 'MERGED';
12
+ headBranch: string;
13
+ baseBranch: string;
14
+ isDraft: boolean;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ }
18
+ export interface CreatePROptions {
19
+ title: string;
20
+ body?: string;
21
+ base?: string;
22
+ draft?: boolean;
23
+ cwd?: string;
24
+ }
25
+ export interface CreatePRResult {
26
+ success: boolean;
27
+ url?: string;
28
+ number?: number;
29
+ error?: string;
30
+ }
31
+ /**
32
+ * Check if `gh` CLI is installed.
33
+ */
34
+ export declare function isGHInstalled(): boolean;
35
+ /**
36
+ * Check if `gh` is authenticated.
37
+ */
38
+ export declare function isGHAuthenticated(): boolean;
39
+ /**
40
+ * Get the authenticated GitHub username.
41
+ */
42
+ export declare function getGHUsername(): string | null;
43
+ /**
44
+ * Check if GH_TOKEN or GITHUB_TOKEN is set in environment.
45
+ */
46
+ export declare function isGHTokenInEnv(): boolean;
47
+ /**
48
+ * Get the GitHub repository from git remote.
49
+ * Returns format: owner/repo
50
+ */
51
+ export declare function getGitHubRepo(cwd?: string): string | null;
52
+ /**
53
+ * Get the default base branch (main or master).
54
+ */
55
+ export declare function getDefaultBaseBranch(cwd?: string): string;
56
+ /**
57
+ * Get the current branch name.
58
+ */
59
+ export declare function getCurrentBranch(cwd?: string): string | null;
60
+ /**
61
+ * Check if the current branch has been pushed to remote.
62
+ */
63
+ export declare function hasBranchBeenPushed(branch: string, cwd?: string): boolean;
64
+ /**
65
+ * Push the current branch to origin.
66
+ */
67
+ export declare function pushBranch(branch: string, cwd?: string): boolean;
68
+ /**
69
+ * Check if there are unpushed commits.
70
+ */
71
+ export declare function hasUnpushedCommits(branch: string, cwd?: string): boolean;
72
+ /**
73
+ * Get the commit log between base and head.
74
+ */
75
+ export declare function getCommitLog(base: string, cwd?: string): string[];
76
+ /**
77
+ * Create a GitHub pull request using `gh` CLI.
78
+ */
79
+ export declare function createPR(options: CreatePROptions): CreatePRResult;
80
+ /**
81
+ * Get PR info for a branch.
82
+ */
83
+ export declare function getPRForBranch(branch: string, cwd?: string): PRInfo | null;
84
+ /**
85
+ * Get PR info by number.
86
+ */
87
+ export declare function getPRByNumber(prNumber: number, cwd?: string): PRInfo | null;
88
+ /**
89
+ * List open PRs for the current repo.
90
+ */
91
+ export declare function listOpenPRs(cwd?: string): PRInfo[];
92
+ /**
93
+ * Generate PR title from ticket info.
94
+ */
95
+ export declare function generatePRTitle(ticketId: string, ticketTitle: string): string;
96
+ /**
97
+ * Generate PR body from ticket info.
98
+ */
99
+ export declare function generatePRBody(options: {
100
+ ticketId: string;
101
+ ticketTitle: string;
102
+ ticketDescription?: string;
103
+ commits?: string[];
104
+ }): string;
105
+ /**
106
+ * Comment on a PR (either review comment or general comment).
107
+ */
108
+ export interface PRComment {
109
+ id: string;
110
+ author: string;
111
+ body: string;
112
+ createdAt: string;
113
+ path?: string;
114
+ line?: number;
115
+ diffHunk?: string;
116
+ }
117
+ /**
118
+ * Review on a PR.
119
+ */
120
+ export interface PRReview {
121
+ id: string;
122
+ author: string;
123
+ state: 'APPROVED' | 'CHANGES_REQUESTED' | 'COMMENTED' | 'PENDING' | 'DISMISSED';
124
+ body: string;
125
+ createdAt: string;
126
+ comments: PRComment[];
127
+ }
128
+ /**
129
+ * Full feedback for a PR (reviews + comments).
130
+ */
131
+ export interface PRFeedback {
132
+ prNumber: number;
133
+ prUrl: string;
134
+ prTitle: string;
135
+ reviews: PRReview[];
136
+ comments: PRComment[];
137
+ reviewDecision?: 'APPROVED' | 'CHANGES_REQUESTED' | 'REVIEW_REQUIRED' | null;
138
+ }
139
+ /**
140
+ * Get PR feedback (reviews and comments) by PR URL or number.
141
+ */
142
+ export declare function getPRFeedback(prUrlOrNumber: string | number, cwd?: string): PRFeedback | null;
143
+ /**
144
+ * Check if a PR has pending feedback that needs addressing.
145
+ */
146
+ export declare function hasPendingFeedback(feedback: PRFeedback): boolean;
147
+ /**
148
+ * Format PR feedback as markdown for agent prompt.
149
+ */
150
+ export declare function formatPRFeedbackForPrompt(feedback: PRFeedback): string;
@@ -0,0 +1,483 @@
1
+ /**
2
+ * PR Utilities
3
+ *
4
+ * Utilities for creating and managing GitHub pull requests.
5
+ * Uses the `gh` CLI for GitHub operations.
6
+ */
7
+ import { execSync, spawnSync } from 'node:child_process';
8
+ // =============================================================================
9
+ // GitHub CLI Detection
10
+ // =============================================================================
11
+ /**
12
+ * Check if `gh` CLI is installed.
13
+ */
14
+ export function isGHInstalled() {
15
+ try {
16
+ execSync('gh --version', { stdio: ['pipe', 'pipe', 'pipe'] });
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
23
+ /**
24
+ * Check if `gh` is authenticated.
25
+ */
26
+ export function isGHAuthenticated() {
27
+ try {
28
+ execSync('gh auth status', { stdio: ['pipe', 'pipe', 'pipe'] });
29
+ return true;
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ /**
36
+ * Get the authenticated GitHub username.
37
+ */
38
+ export function getGHUsername() {
39
+ try {
40
+ const result = execSync('gh api user -q .login', {
41
+ encoding: 'utf-8',
42
+ stdio: ['pipe', 'pipe', 'pipe'],
43
+ }).trim();
44
+ return result || null;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Check if GH_TOKEN or GITHUB_TOKEN is set in environment.
52
+ */
53
+ export function isGHTokenInEnv() {
54
+ return !!(process.env.GH_TOKEN || process.env.GITHUB_TOKEN);
55
+ }
56
+ // =============================================================================
57
+ // Git Remote Detection
58
+ // =============================================================================
59
+ /**
60
+ * Get the GitHub repository from git remote.
61
+ * Returns format: owner/repo
62
+ */
63
+ export function getGitHubRepo(cwd) {
64
+ try {
65
+ const remoteUrl = execSync('git remote get-url origin', {
66
+ cwd,
67
+ encoding: 'utf-8',
68
+ stdio: ['pipe', 'pipe', 'pipe'],
69
+ }).trim();
70
+ // Parse GitHub URL formats:
71
+ // https://github.com/owner/repo.git
72
+ // git@github.com:owner/repo.git
73
+ // ssh://git@github.com/owner/repo.git
74
+ const httpsMatch = remoteUrl.match(/github\.com[/:]([^/]+)\/([^/.]+)(\.git)?$/);
75
+ const sshMatch = remoteUrl.match(/git@github\.com:([^/]+)\/([^/.]+)(\.git)?$/);
76
+ const match = httpsMatch || sshMatch;
77
+ if (match) {
78
+ return `${match[1]}/${match[2]}`;
79
+ }
80
+ return null;
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ /**
87
+ * Get the default base branch (main or master).
88
+ */
89
+ export function getDefaultBaseBranch(cwd) {
90
+ try {
91
+ // Check if 'main' exists
92
+ execSync('git rev-parse --verify main', {
93
+ cwd,
94
+ stdio: ['pipe', 'pipe', 'pipe'],
95
+ });
96
+ return 'main';
97
+ }
98
+ catch {
99
+ // Fall back to 'master'
100
+ try {
101
+ execSync('git rev-parse --verify master', {
102
+ cwd,
103
+ stdio: ['pipe', 'pipe', 'pipe'],
104
+ });
105
+ return 'master';
106
+ }
107
+ catch {
108
+ return 'main'; // Default to main even if not found
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Get the current branch name.
114
+ */
115
+ export function getCurrentBranch(cwd) {
116
+ try {
117
+ return execSync('git rev-parse --abbrev-ref HEAD', {
118
+ cwd,
119
+ encoding: 'utf-8',
120
+ stdio: ['pipe', 'pipe', 'pipe'],
121
+ }).trim();
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ }
127
+ /**
128
+ * Check if the current branch has been pushed to remote.
129
+ */
130
+ export function hasBranchBeenPushed(branch, cwd) {
131
+ try {
132
+ execSync(`git rev-parse --verify origin/${branch}`, {
133
+ cwd,
134
+ stdio: ['pipe', 'pipe', 'pipe'],
135
+ });
136
+ return true;
137
+ }
138
+ catch {
139
+ return false;
140
+ }
141
+ }
142
+ /**
143
+ * Push the current branch to origin.
144
+ */
145
+ export function pushBranch(branch, cwd) {
146
+ try {
147
+ execSync(`git push -u origin ${branch}`, {
148
+ cwd,
149
+ stdio: ['pipe', 'pipe', 'pipe'],
150
+ });
151
+ return true;
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ }
157
+ /**
158
+ * Check if there are unpushed commits.
159
+ */
160
+ export function hasUnpushedCommits(branch, cwd) {
161
+ try {
162
+ const result = execSync(`git log origin/${branch}..HEAD --oneline`, {
163
+ cwd,
164
+ encoding: 'utf-8',
165
+ stdio: ['pipe', 'pipe', 'pipe'],
166
+ }).trim();
167
+ return result.length > 0;
168
+ }
169
+ catch {
170
+ // If origin/branch doesn't exist, all commits are unpushed
171
+ return true;
172
+ }
173
+ }
174
+ /**
175
+ * Get the commit log between base and head.
176
+ */
177
+ export function getCommitLog(base, cwd) {
178
+ try {
179
+ const output = execSync(`git log ${base}..HEAD --oneline`, {
180
+ cwd,
181
+ encoding: 'utf-8',
182
+ stdio: ['pipe', 'pipe', 'pipe'],
183
+ }).trim();
184
+ return output ? output.split('\n') : [];
185
+ }
186
+ catch {
187
+ return [];
188
+ }
189
+ }
190
+ // =============================================================================
191
+ // PR Operations
192
+ // =============================================================================
193
+ /**
194
+ * Create a GitHub pull request using `gh` CLI.
195
+ */
196
+ export function createPR(options) {
197
+ const { title, body, base, draft, cwd } = options;
198
+ const args = ['pr', 'create', '--title', title];
199
+ if (body) {
200
+ args.push('--body', body);
201
+ }
202
+ if (base) {
203
+ args.push('--base', base);
204
+ }
205
+ if (draft) {
206
+ args.push('--draft');
207
+ }
208
+ try {
209
+ const result = spawnSync('gh', args, {
210
+ cwd,
211
+ encoding: 'utf-8',
212
+ stdio: ['pipe', 'pipe', 'pipe'],
213
+ });
214
+ if (result.status !== 0) {
215
+ return {
216
+ success: false,
217
+ error: result.stderr || 'Failed to create PR',
218
+ };
219
+ }
220
+ // Parse the PR URL from stdout
221
+ const url = result.stdout.trim();
222
+ const prMatch = url.match(/\/pull\/(\d+)/);
223
+ const number = prMatch ? parseInt(prMatch[1], 10) : undefined;
224
+ return {
225
+ success: true,
226
+ url,
227
+ number,
228
+ };
229
+ }
230
+ catch (error) {
231
+ return {
232
+ success: false,
233
+ error: error instanceof Error ? error.message : 'Unknown error',
234
+ };
235
+ }
236
+ }
237
+ /**
238
+ * Get PR info for a branch.
239
+ */
240
+ export function getPRForBranch(branch, cwd) {
241
+ try {
242
+ const result = execSync(`gh pr view ${branch} --json number,url,title,state,headRefName,baseRefName,isDraft,createdAt,updatedAt`, {
243
+ cwd,
244
+ encoding: 'utf-8',
245
+ stdio: ['pipe', 'pipe', 'pipe'],
246
+ });
247
+ const data = JSON.parse(result);
248
+ return {
249
+ number: data.number,
250
+ url: data.url,
251
+ title: data.title,
252
+ state: data.state,
253
+ headBranch: data.headRefName,
254
+ baseBranch: data.baseRefName,
255
+ isDraft: data.isDraft,
256
+ createdAt: data.createdAt,
257
+ updatedAt: data.updatedAt,
258
+ };
259
+ }
260
+ catch {
261
+ return null;
262
+ }
263
+ }
264
+ /**
265
+ * Get PR info by number.
266
+ */
267
+ export function getPRByNumber(prNumber, cwd) {
268
+ try {
269
+ const result = execSync(`gh pr view ${prNumber} --json number,url,title,state,headRefName,baseRefName,isDraft,createdAt,updatedAt`, {
270
+ cwd,
271
+ encoding: 'utf-8',
272
+ stdio: ['pipe', 'pipe', 'pipe'],
273
+ });
274
+ const data = JSON.parse(result);
275
+ return {
276
+ number: data.number,
277
+ url: data.url,
278
+ title: data.title,
279
+ state: data.state,
280
+ headBranch: data.headRefName,
281
+ baseBranch: data.baseRefName,
282
+ isDraft: data.isDraft,
283
+ createdAt: data.createdAt,
284
+ updatedAt: data.updatedAt,
285
+ };
286
+ }
287
+ catch {
288
+ return null;
289
+ }
290
+ }
291
+ /**
292
+ * List open PRs for the current repo.
293
+ */
294
+ export function listOpenPRs(cwd) {
295
+ try {
296
+ const result = execSync('gh pr list --json number,url,title,state,headRefName,baseRefName,isDraft,createdAt,updatedAt', {
297
+ cwd,
298
+ encoding: 'utf-8',
299
+ stdio: ['pipe', 'pipe', 'pipe'],
300
+ });
301
+ const data = JSON.parse(result);
302
+ return data.map(pr => ({
303
+ number: pr.number,
304
+ url: pr.url,
305
+ title: pr.title,
306
+ state: pr.state,
307
+ headBranch: pr.headRefName,
308
+ baseBranch: pr.baseRefName,
309
+ isDraft: pr.isDraft,
310
+ createdAt: pr.createdAt,
311
+ updatedAt: pr.updatedAt,
312
+ }));
313
+ }
314
+ catch {
315
+ return [];
316
+ }
317
+ }
318
+ // =============================================================================
319
+ // PR Title Generation
320
+ // =============================================================================
321
+ /**
322
+ * Generate PR title from ticket info.
323
+ */
324
+ export function generatePRTitle(ticketId, ticketTitle) {
325
+ return `${ticketId}: ${ticketTitle}`;
326
+ }
327
+ /**
328
+ * Generate PR body from ticket info.
329
+ */
330
+ export function generatePRBody(options) {
331
+ const { ticketId, ticketTitle, ticketDescription, commits } = options;
332
+ const lines = [];
333
+ lines.push('## Summary');
334
+ lines.push('');
335
+ lines.push(`Resolves ${ticketId}: ${ticketTitle}`);
336
+ lines.push('');
337
+ if (ticketDescription) {
338
+ lines.push('## Description');
339
+ lines.push('');
340
+ lines.push(ticketDescription);
341
+ lines.push('');
342
+ }
343
+ if (commits && commits.length > 0) {
344
+ lines.push('## Changes');
345
+ lines.push('');
346
+ for (const commit of commits) {
347
+ lines.push(`- ${commit}`);
348
+ }
349
+ lines.push('');
350
+ }
351
+ lines.push('## Test Plan');
352
+ lines.push('');
353
+ lines.push('- [ ] Tests pass locally');
354
+ lines.push('- [ ] Manual testing completed');
355
+ lines.push('');
356
+ return lines.join('\n');
357
+ }
358
+ /**
359
+ * Get PR feedback (reviews and comments) by PR URL or number.
360
+ */
361
+ export function getPRFeedback(prUrlOrNumber, cwd) {
362
+ try {
363
+ const result = execSync(`gh pr view ${prUrlOrNumber} --json number,url,title,reviews,comments,reviewDecision`, {
364
+ cwd,
365
+ encoding: 'utf-8',
366
+ stdio: ['pipe', 'pipe', 'pipe'],
367
+ });
368
+ const data = JSON.parse(result);
369
+ // Parse reviews
370
+ const reviews = (data.reviews || []).map((review) => ({
371
+ id: review.id,
372
+ author: review.author?.login || 'unknown',
373
+ state: review.state,
374
+ body: review.body || '',
375
+ createdAt: review.createdAt,
376
+ comments: (review.comments || []).map(c => ({
377
+ id: c.id,
378
+ author: c.author?.login || 'unknown',
379
+ body: c.body,
380
+ createdAt: c.createdAt,
381
+ path: c.path,
382
+ line: c.line,
383
+ diffHunk: c.diffHunk,
384
+ })),
385
+ }));
386
+ // Parse general comments (not part of reviews)
387
+ const comments = (data.comments || []).map((comment) => ({
388
+ id: comment.id,
389
+ author: comment.author?.login || 'unknown',
390
+ body: comment.body,
391
+ createdAt: comment.createdAt,
392
+ }));
393
+ return {
394
+ prNumber: data.number,
395
+ prUrl: data.url,
396
+ prTitle: data.title,
397
+ reviews,
398
+ comments,
399
+ reviewDecision: data.reviewDecision,
400
+ };
401
+ }
402
+ catch {
403
+ return null;
404
+ }
405
+ }
406
+ /**
407
+ * Check if a PR has pending feedback that needs addressing.
408
+ */
409
+ export function hasPendingFeedback(feedback) {
410
+ // Check for "changes requested" reviews
411
+ const hasChangesRequested = feedback.reviews.some(r => r.state === 'CHANGES_REQUESTED');
412
+ if (hasChangesRequested)
413
+ return true;
414
+ // Check review decision
415
+ if (feedback.reviewDecision === 'CHANGES_REQUESTED')
416
+ return true;
417
+ // Check for unresolved comments (any review comments or general comments)
418
+ const hasReviewComments = feedback.reviews.some(r => r.comments.length > 0);
419
+ const hasGeneralComments = feedback.comments.length > 0;
420
+ return hasReviewComments || hasGeneralComments;
421
+ }
422
+ /**
423
+ * Format PR feedback as markdown for agent prompt.
424
+ */
425
+ export function formatPRFeedbackForPrompt(feedback) {
426
+ const lines = [];
427
+ lines.push(`## PR Feedback to Address`);
428
+ lines.push('');
429
+ lines.push(`**PR:** ${feedback.prTitle} (#${feedback.prNumber})`);
430
+ lines.push(`**URL:** ${feedback.prUrl}`);
431
+ if (feedback.reviewDecision) {
432
+ const decisionEmoji = feedback.reviewDecision === 'APPROVED' ? '✅' :
433
+ feedback.reviewDecision === 'CHANGES_REQUESTED' ? '❌' : '⏳';
434
+ lines.push(`**Status:** ${decisionEmoji} ${feedback.reviewDecision}`);
435
+ }
436
+ lines.push('');
437
+ // Add reviews with comments
438
+ const reviewsWithFeedback = feedback.reviews.filter(r => r.state === 'CHANGES_REQUESTED' || r.body || r.comments.length > 0);
439
+ if (reviewsWithFeedback.length > 0) {
440
+ lines.push('### Reviews');
441
+ lines.push('');
442
+ for (const review of reviewsWithFeedback) {
443
+ const stateEmoji = review.state === 'APPROVED' ? '✅' :
444
+ review.state === 'CHANGES_REQUESTED' ? '❌' : '💬';
445
+ lines.push(`#### ${stateEmoji} ${review.author} (${review.state})`);
446
+ if (review.body) {
447
+ lines.push('');
448
+ lines.push(review.body);
449
+ }
450
+ if (review.comments.length > 0) {
451
+ lines.push('');
452
+ lines.push('**Comments:**');
453
+ for (const comment of review.comments) {
454
+ lines.push('');
455
+ if (comment.path) {
456
+ lines.push(`📄 **${comment.path}**${comment.line ? `:${comment.line}` : ''}`);
457
+ if (comment.diffHunk) {
458
+ lines.push('```diff');
459
+ lines.push(comment.diffHunk);
460
+ lines.push('```');
461
+ }
462
+ }
463
+ lines.push(`> ${comment.body.replace(/\n/g, '\n> ')}`);
464
+ }
465
+ }
466
+ lines.push('');
467
+ }
468
+ }
469
+ // Add general comments
470
+ if (feedback.comments.length > 0) {
471
+ lines.push('### General Comments');
472
+ lines.push('');
473
+ for (const comment of feedback.comments) {
474
+ lines.push(`**${comment.author}:**`);
475
+ lines.push(`> ${comment.body.replace(/\n/g, '\n> ')}`);
476
+ lines.push('');
477
+ }
478
+ }
479
+ lines.push('---');
480
+ lines.push('');
481
+ lines.push('Please address the feedback above. After making changes, commit and push.');
482
+ return lines.join('\n');
483
+ }