@camaradesuk/git-worktree-tools 1.7.0 → 1.9.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 (295) hide show
  1. package/README.md +69 -8
  2. package/dist/cli/cleanpr.js +11 -5
  3. package/dist/cli/cleanpr.js.map +1 -1
  4. package/dist/cli/cleanpr.test.js +12 -1
  5. package/dist/cli/cleanpr.test.js.map +1 -1
  6. package/dist/cli/newpr.js +302 -37
  7. package/dist/cli/newpr.js.map +1 -1
  8. package/dist/cli/newpr.test.js +336 -9
  9. package/dist/cli/newpr.test.js.map +1 -1
  10. package/dist/cli/prs.d.ts +22 -0
  11. package/dist/cli/prs.d.ts.map +1 -0
  12. package/dist/cli/prs.js +275 -0
  13. package/dist/cli/prs.js.map +1 -0
  14. package/dist/cli/prs.test.d.ts +8 -0
  15. package/dist/cli/prs.test.d.ts.map +1 -0
  16. package/dist/cli/prs.test.js +410 -0
  17. package/dist/cli/prs.test.js.map +1 -0
  18. package/dist/cli/wt/interactive-menu.d.ts +2 -0
  19. package/dist/cli/wt/interactive-menu.d.ts.map +1 -1
  20. package/dist/cli/wt/interactive-menu.js +17 -0
  21. package/dist/cli/wt/interactive-menu.js.map +1 -1
  22. package/dist/cli/wt/interactive-menu.test.js +28 -0
  23. package/dist/cli/wt/interactive-menu.test.js.map +1 -1
  24. package/dist/cli/wt/prs.d.ts +21 -0
  25. package/dist/cli/wt/prs.d.ts.map +1 -0
  26. package/dist/cli/wt/prs.js +251 -0
  27. package/dist/cli/wt/prs.js.map +1 -0
  28. package/dist/cli/wt/prs.test.d.ts +5 -0
  29. package/dist/cli/wt/prs.test.d.ts.map +1 -0
  30. package/dist/cli/wt/prs.test.js +410 -0
  31. package/dist/cli/wt/prs.test.js.map +1 -0
  32. package/dist/cli/wt.d.ts +1 -0
  33. package/dist/cli/wt.d.ts.map +1 -1
  34. package/dist/cli/wt.js +5 -0
  35. package/dist/cli/wt.js.map +1 -1
  36. package/dist/cli/wtconfig.d.ts +1 -0
  37. package/dist/cli/wtconfig.d.ts.map +1 -1
  38. package/dist/cli/wtconfig.js +115 -0
  39. package/dist/cli/wtconfig.js.map +1 -1
  40. package/dist/cli/wtconfig.test.js +6 -0
  41. package/dist/cli/wtconfig.test.js.map +1 -1
  42. package/dist/cli/wtlink.d.ts +2 -1
  43. package/dist/cli/wtlink.d.ts.map +1 -1
  44. package/dist/cli/wtlink.js +60 -2
  45. package/dist/cli/wtlink.js.map +1 -1
  46. package/dist/e2e/cli.e2e.test.js +6 -2
  47. package/dist/e2e/cli.e2e.test.js.map +1 -1
  48. package/dist/e2e/helpers/cli-runner.d.ts.map +1 -1
  49. package/dist/e2e/helpers/cli-runner.js +1 -0
  50. package/dist/e2e/helpers/cli-runner.js.map +1 -1
  51. package/dist/e2e/helpers/gh-mock.d.ts.map +1 -1
  52. package/dist/e2e/helpers/gh-mock.js +55 -1
  53. package/dist/e2e/helpers/gh-mock.js.map +1 -1
  54. package/dist/e2e/helpers/pty-wrapper.d.ts +15 -0
  55. package/dist/e2e/helpers/pty-wrapper.d.ts.map +1 -1
  56. package/dist/e2e/helpers/pty-wrapper.js +65 -0
  57. package/dist/e2e/helpers/pty-wrapper.js.map +1 -1
  58. package/dist/e2e/newpr-full-flow.e2e.test.js +1 -0
  59. package/dist/e2e/newpr-full-flow.e2e.test.js.map +1 -1
  60. package/dist/e2e/prs/prs.e2e.test.d.ts +7 -0
  61. package/dist/e2e/prs/prs.e2e.test.d.ts.map +1 -0
  62. package/dist/e2e/prs/prs.e2e.test.js +606 -0
  63. package/dist/e2e/prs/prs.e2e.test.js.map +1 -0
  64. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts +8 -0
  65. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts.map +1 -0
  66. package/dist/e2e/wt/interactive-menu.e2e.test.js +583 -0
  67. package/dist/e2e/wt/interactive-menu.e2e.test.js.map +1 -0
  68. package/dist/e2e/wt/wt.e2e.test.js +217 -4
  69. package/dist/e2e/wt/wt.e2e.test.js.map +1 -1
  70. package/dist/integration/prs.integration.test.d.ts +8 -0
  71. package/dist/integration/prs.integration.test.d.ts.map +1 -0
  72. package/dist/integration/prs.integration.test.js +478 -0
  73. package/dist/integration/prs.integration.test.js.map +1 -0
  74. package/dist/lib/ai/types.d.ts +12 -0
  75. package/dist/lib/ai/types.d.ts.map +1 -1
  76. package/dist/lib/ai/types.js.map +1 -1
  77. package/dist/lib/cleanpr/worktree-info.d.ts.map +1 -1
  78. package/dist/lib/cleanpr/worktree-info.js +1 -6
  79. package/dist/lib/cleanpr/worktree-info.js.map +1 -1
  80. package/dist/lib/cleanpr/worktree-info.test.js +10 -13
  81. package/dist/lib/cleanpr/worktree-info.test.js.map +1 -1
  82. package/dist/lib/config-editor.d.ts.map +1 -1
  83. package/dist/lib/config-editor.js.map +1 -1
  84. package/dist/lib/config-migration/detector.d.ts +25 -0
  85. package/dist/lib/config-migration/detector.d.ts.map +1 -0
  86. package/dist/lib/config-migration/detector.js +372 -0
  87. package/dist/lib/config-migration/detector.js.map +1 -0
  88. package/dist/lib/config-migration/detector.test.d.ts +5 -0
  89. package/dist/lib/config-migration/detector.test.d.ts.map +1 -0
  90. package/dist/lib/config-migration/detector.test.js +201 -0
  91. package/dist/lib/config-migration/detector.test.js.map +1 -0
  92. package/dist/lib/config-migration/index.d.ts +29 -0
  93. package/dist/lib/config-migration/index.d.ts.map +1 -0
  94. package/dist/lib/config-migration/index.js +33 -0
  95. package/dist/lib/config-migration/index.js.map +1 -0
  96. package/dist/lib/config-migration/reporter.d.ts +53 -0
  97. package/dist/lib/config-migration/reporter.d.ts.map +1 -0
  98. package/dist/lib/config-migration/reporter.js +257 -0
  99. package/dist/lib/config-migration/reporter.js.map +1 -0
  100. package/dist/lib/config-migration/reporter.test.d.ts +5 -0
  101. package/dist/lib/config-migration/reporter.test.d.ts.map +1 -0
  102. package/dist/lib/config-migration/reporter.test.js +305 -0
  103. package/dist/lib/config-migration/reporter.test.js.map +1 -0
  104. package/dist/lib/config-migration/runner.d.ts +46 -0
  105. package/dist/lib/config-migration/runner.d.ts.map +1 -0
  106. package/dist/lib/config-migration/runner.js +364 -0
  107. package/dist/lib/config-migration/runner.js.map +1 -0
  108. package/dist/lib/config-migration/runner.test.d.ts +5 -0
  109. package/dist/lib/config-migration/runner.test.d.ts.map +1 -0
  110. package/dist/lib/config-migration/runner.test.js +235 -0
  111. package/dist/lib/config-migration/runner.test.js.map +1 -0
  112. package/dist/lib/config-migration/types.d.ts +120 -0
  113. package/dist/lib/config-migration/types.d.ts.map +1 -0
  114. package/dist/lib/config-migration/types.js +70 -0
  115. package/dist/lib/config-migration/types.js.map +1 -0
  116. package/dist/lib/config-validation.d.ts.map +1 -1
  117. package/dist/lib/config-validation.js +62 -0
  118. package/dist/lib/config-validation.js.map +1 -1
  119. package/dist/lib/config-validation.test.js +25 -0
  120. package/dist/lib/config-validation.test.js.map +1 -1
  121. package/dist/lib/config.d.ts +65 -7
  122. package/dist/lib/config.d.ts.map +1 -1
  123. package/dist/lib/config.js +12 -0
  124. package/dist/lib/config.js.map +1 -1
  125. package/dist/lib/git.d.ts +32 -0
  126. package/dist/lib/git.d.ts.map +1 -1
  127. package/dist/lib/git.js +95 -1
  128. package/dist/lib/git.js.map +1 -1
  129. package/dist/lib/git.test.js +118 -1
  130. package/dist/lib/git.test.js.map +1 -1
  131. package/dist/lib/github.d.ts +41 -0
  132. package/dist/lib/github.d.ts.map +1 -1
  133. package/dist/lib/github.js +109 -0
  134. package/dist/lib/github.js.map +1 -1
  135. package/dist/lib/global-check.d.ts +2 -2
  136. package/dist/lib/global-check.js +3 -3
  137. package/dist/lib/global-check.js.map +1 -1
  138. package/dist/lib/global-check.test.js +3 -6
  139. package/dist/lib/global-check.test.js.map +1 -1
  140. package/dist/lib/hooks/confirmation.d.ts +49 -0
  141. package/dist/lib/hooks/confirmation.d.ts.map +1 -0
  142. package/dist/lib/hooks/confirmation.js +147 -0
  143. package/dist/lib/hooks/confirmation.js.map +1 -0
  144. package/dist/lib/hooks/confirmation.test.d.ts +7 -0
  145. package/dist/lib/hooks/confirmation.test.d.ts.map +1 -0
  146. package/dist/lib/hooks/confirmation.test.js +300 -0
  147. package/dist/lib/hooks/confirmation.test.js.map +1 -0
  148. package/dist/lib/hooks/executor.d.ts +16 -1
  149. package/dist/lib/hooks/executor.d.ts.map +1 -1
  150. package/dist/lib/hooks/executor.js +53 -4
  151. package/dist/lib/hooks/executor.js.map +1 -1
  152. package/dist/lib/hooks/index.d.ts +4 -2
  153. package/dist/lib/hooks/index.d.ts.map +1 -1
  154. package/dist/lib/hooks/index.js +3 -2
  155. package/dist/lib/hooks/index.js.map +1 -1
  156. package/dist/lib/hooks/types.d.ts +16 -0
  157. package/dist/lib/hooks/types.d.ts.map +1 -1
  158. package/dist/lib/hooks/types.js +12 -0
  159. package/dist/lib/hooks/types.js.map +1 -1
  160. package/dist/lib/json-output.d.ts +1 -0
  161. package/dist/lib/json-output.d.ts.map +1 -1
  162. package/dist/lib/json-output.js +2 -0
  163. package/dist/lib/json-output.js.map +1 -1
  164. package/dist/lib/lswt/action-executors.d.ts +2 -0
  165. package/dist/lib/lswt/action-executors.d.ts.map +1 -1
  166. package/dist/lib/lswt/action-executors.js +6 -4
  167. package/dist/lib/lswt/action-executors.js.map +1 -1
  168. package/dist/lib/lswt/action-executors.test.js +8 -0
  169. package/dist/lib/lswt/action-executors.test.js.map +1 -1
  170. package/dist/lib/lswt/actions.d.ts +1 -0
  171. package/dist/lib/lswt/actions.d.ts.map +1 -1
  172. package/dist/lib/lswt/actions.js +38 -10
  173. package/dist/lib/lswt/actions.js.map +1 -1
  174. package/dist/lib/lswt/actions.test.js +34 -22
  175. package/dist/lib/lswt/actions.test.js.map +1 -1
  176. package/dist/lib/lswt/environment.d.ts +21 -2
  177. package/dist/lib/lswt/environment.d.ts.map +1 -1
  178. package/dist/lib/lswt/environment.js +73 -32
  179. package/dist/lib/lswt/environment.js.map +1 -1
  180. package/dist/lib/lswt/environment.test.js +79 -1
  181. package/dist/lib/lswt/environment.test.js.map +1 -1
  182. package/dist/lib/lswt/interactive.js +8 -8
  183. package/dist/lib/lswt/interactive.js.map +1 -1
  184. package/dist/lib/lswt/worktree-info.d.ts.map +1 -1
  185. package/dist/lib/lswt/worktree-info.js +1 -6
  186. package/dist/lib/lswt/worktree-info.js.map +1 -1
  187. package/dist/lib/lswt/worktree-info.test.js +5 -17
  188. package/dist/lib/lswt/worktree-info.test.js.map +1 -1
  189. package/dist/lib/newpr/args.d.ts.map +1 -1
  190. package/dist/lib/newpr/args.js +15 -1
  191. package/dist/lib/newpr/args.js.map +1 -1
  192. package/dist/lib/newpr/hook-runner.d.ts +11 -0
  193. package/dist/lib/newpr/hook-runner.d.ts.map +1 -1
  194. package/dist/lib/newpr/hook-runner.js +49 -1
  195. package/dist/lib/newpr/hook-runner.js.map +1 -1
  196. package/dist/lib/newpr/hook-runner.test.js +121 -0
  197. package/dist/lib/newpr/hook-runner.test.js.map +1 -1
  198. package/dist/lib/newpr/plan-generator.d.ts +121 -0
  199. package/dist/lib/newpr/plan-generator.d.ts.map +1 -0
  200. package/dist/lib/newpr/plan-generator.js +185 -0
  201. package/dist/lib/newpr/plan-generator.js.map +1 -0
  202. package/dist/lib/newpr/plan-generator.test.d.ts +7 -0
  203. package/dist/lib/newpr/plan-generator.test.d.ts.map +1 -0
  204. package/dist/lib/newpr/plan-generator.test.js +387 -0
  205. package/dist/lib/newpr/plan-generator.test.js.map +1 -0
  206. package/dist/lib/newpr/types.d.ts +6 -0
  207. package/dist/lib/newpr/types.d.ts.map +1 -1
  208. package/dist/lib/prompts.d.ts.map +1 -1
  209. package/dist/lib/prompts.js +16 -12
  210. package/dist/lib/prompts.js.map +1 -1
  211. package/dist/lib/prs/actions.d.ts +74 -0
  212. package/dist/lib/prs/actions.d.ts.map +1 -0
  213. package/dist/lib/prs/actions.js +446 -0
  214. package/dist/lib/prs/actions.js.map +1 -0
  215. package/dist/lib/prs/actions.test.d.ts +5 -0
  216. package/dist/lib/prs/actions.test.d.ts.map +1 -0
  217. package/dist/lib/prs/actions.test.js +356 -0
  218. package/dist/lib/prs/actions.test.js.map +1 -0
  219. package/dist/lib/prs/data.d.ts +48 -0
  220. package/dist/lib/prs/data.d.ts.map +1 -0
  221. package/dist/lib/prs/data.js +171 -0
  222. package/dist/lib/prs/data.js.map +1 -0
  223. package/dist/lib/prs/data.test.d.ts +5 -0
  224. package/dist/lib/prs/data.test.d.ts.map +1 -0
  225. package/dist/lib/prs/data.test.js +417 -0
  226. package/dist/lib/prs/data.test.js.map +1 -0
  227. package/dist/lib/prs/details.d.ts +57 -0
  228. package/dist/lib/prs/details.d.ts.map +1 -0
  229. package/dist/lib/prs/details.js +246 -0
  230. package/dist/lib/prs/details.js.map +1 -0
  231. package/dist/lib/prs/details.test.d.ts +5 -0
  232. package/dist/lib/prs/details.test.d.ts.map +1 -0
  233. package/dist/lib/prs/details.test.js +325 -0
  234. package/dist/lib/prs/details.test.js.map +1 -0
  235. package/dist/lib/prs/filters.d.ts +56 -0
  236. package/dist/lib/prs/filters.d.ts.map +1 -0
  237. package/dist/lib/prs/filters.js +171 -0
  238. package/dist/lib/prs/filters.js.map +1 -0
  239. package/dist/lib/prs/filters.test.d.ts +5 -0
  240. package/dist/lib/prs/filters.test.d.ts.map +1 -0
  241. package/dist/lib/prs/filters.test.js +312 -0
  242. package/dist/lib/prs/filters.test.js.map +1 -0
  243. package/dist/lib/prs/formatters.d.ts +83 -0
  244. package/dist/lib/prs/formatters.d.ts.map +1 -0
  245. package/dist/lib/prs/formatters.js +389 -0
  246. package/dist/lib/prs/formatters.js.map +1 -0
  247. package/dist/lib/prs/formatters.test.d.ts +2 -0
  248. package/dist/lib/prs/formatters.test.d.ts.map +1 -0
  249. package/dist/lib/prs/formatters.test.js +387 -0
  250. package/dist/lib/prs/formatters.test.js.map +1 -0
  251. package/dist/lib/prs/interactive.d.ts +50 -0
  252. package/dist/lib/prs/interactive.d.ts.map +1 -0
  253. package/dist/lib/prs/interactive.js +453 -0
  254. package/dist/lib/prs/interactive.js.map +1 -0
  255. package/dist/lib/prs/interactive.test.d.ts +5 -0
  256. package/dist/lib/prs/interactive.test.d.ts.map +1 -0
  257. package/dist/lib/prs/interactive.test.js +364 -0
  258. package/dist/lib/prs/interactive.test.js.map +1 -0
  259. package/dist/lib/prs/types.d.ts +152 -0
  260. package/dist/lib/prs/types.d.ts.map +1 -0
  261. package/dist/lib/prs/types.js +17 -0
  262. package/dist/lib/prs/types.js.map +1 -0
  263. package/dist/lib/wtconfig/environment.d.ts +18 -1
  264. package/dist/lib/wtconfig/environment.d.ts.map +1 -1
  265. package/dist/lib/wtconfig/environment.js +60 -24
  266. package/dist/lib/wtconfig/environment.js.map +1 -1
  267. package/dist/lib/wtconfig/environment.test.js +45 -1
  268. package/dist/lib/wtconfig/environment.test.js.map +1 -1
  269. package/dist/lib/wtlink/config-manifest.d.ts +101 -0
  270. package/dist/lib/wtlink/config-manifest.d.ts.map +1 -0
  271. package/dist/lib/wtlink/config-manifest.js +219 -0
  272. package/dist/lib/wtlink/config-manifest.js.map +1 -0
  273. package/dist/lib/wtlink/config-manifest.test.d.ts +2 -0
  274. package/dist/lib/wtlink/config-manifest.test.d.ts.map +1 -0
  275. package/dist/lib/wtlink/config-manifest.test.js +486 -0
  276. package/dist/lib/wtlink/config-manifest.test.js.map +1 -0
  277. package/dist/lib/wtlink/link-configs.d.ts.map +1 -1
  278. package/dist/lib/wtlink/link-configs.js +36 -11
  279. package/dist/lib/wtlink/link-configs.js.map +1 -1
  280. package/dist/lib/wtlink/main-menu.d.ts.map +1 -1
  281. package/dist/lib/wtlink/main-menu.js +58 -50
  282. package/dist/lib/wtlink/main-menu.js.map +1 -1
  283. package/dist/lib/wtlink/main-menu.test.js +42 -40
  284. package/dist/lib/wtlink/main-menu.test.js.map +1 -1
  285. package/dist/lib/wtlink/manage-manifest.d.ts +9 -0
  286. package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
  287. package/dist/lib/wtlink/manage-manifest.js +346 -25
  288. package/dist/lib/wtlink/manage-manifest.js.map +1 -1
  289. package/dist/lib/wtlink/manage-manifest.test.js +52 -1
  290. package/dist/lib/wtlink/manage-manifest.test.js.map +1 -1
  291. package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
  292. package/dist/lib/wtlink/validate-manifest.js +27 -6
  293. package/dist/lib/wtlink/validate-manifest.js.map +1 -1
  294. package/package.json +2 -1
  295. package/schemas/worktreerc.schema.json +49 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/lib/prs/formatters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAiB/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAW5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,UAAU,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,EAC3E,aAAa,EAAE,MAAM,GACpB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAW7F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,CAGxD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,MAAM,CAIpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,MAAM,CAEnE;AA+BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAclE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,aAAa,EACjB,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAqER;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsB3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,MAAM,CAY5D;AAgCD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAmCpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBjF"}
@@ -0,0 +1,389 @@
1
+ /**
2
+ * PR display formatters - badges, colors, layout
3
+ */
4
+ import * as colors from '../colors.js';
5
+ /**
6
+ * Format relative time from ISO timestamp
7
+ */
8
+ export function formatRelativeTime(isoTimestamp) {
9
+ const date = new Date(isoTimestamp);
10
+ const now = new Date();
11
+ const diffMs = now.getTime() - date.getTime();
12
+ const diffSeconds = Math.floor(diffMs / 1000);
13
+ const diffMinutes = Math.floor(diffSeconds / 60);
14
+ const diffHours = Math.floor(diffMinutes / 60);
15
+ const diffDays = Math.floor(diffHours / 24);
16
+ const diffWeeks = Math.floor(diffDays / 7);
17
+ const diffMonths = Math.floor(diffDays / 30);
18
+ if (diffMinutes < 1)
19
+ return 'now';
20
+ if (diffMinutes < 60)
21
+ return `${diffMinutes}m`;
22
+ if (diffHours < 24)
23
+ return `${diffHours}h`;
24
+ if (diffDays < 7)
25
+ return `${diffDays}d`;
26
+ if (diffWeeks < 4)
27
+ return `${diffWeeks}w`;
28
+ return `${diffMonths}mo`;
29
+ }
30
+ /**
31
+ * Format state badge with color
32
+ */
33
+ export function formatStateBadge(state) {
34
+ switch (state) {
35
+ case 'OPEN':
36
+ return colors.green('[OPEN]');
37
+ case 'MERGED':
38
+ return colors.blue('[MERGED]');
39
+ case 'CLOSED':
40
+ return colors.red('[CLOSED]');
41
+ default:
42
+ return colors.dim(`[${state}]`);
43
+ }
44
+ }
45
+ /**
46
+ * Format draft badge
47
+ */
48
+ export function formatDraftBadge(isDraft) {
49
+ return isDraft ? colors.yellow('[DRAFT]') : '';
50
+ }
51
+ /**
52
+ * Format worktree indicator
53
+ */
54
+ export function formatWorktreeIndicator(hasWorktree) {
55
+ return hasWorktree ? colors.cyan('WT') : '';
56
+ }
57
+ /**
58
+ * Format review status indicator
59
+ */
60
+ export function formatReviewStatus(reviewDecision, approvalCount) {
61
+ if (reviewDecision === 'APPROVED') {
62
+ return colors.green(`\u2713${approvalCount}`);
63
+ }
64
+ if (reviewDecision === 'CHANGES_REQUESTED') {
65
+ return colors.red('\u2717');
66
+ }
67
+ if (reviewDecision === 'REVIEW_REQUIRED') {
68
+ return colors.yellow('\u25CB');
69
+ }
70
+ return '';
71
+ }
72
+ /**
73
+ * Format CI status indicator
74
+ */
75
+ export function formatCIStatus(checksStatus) {
76
+ switch (checksStatus) {
77
+ case 'SUCCESS':
78
+ return colors.green('\u25CF');
79
+ case 'FAILURE':
80
+ return colors.red('\u25CF');
81
+ case 'PENDING':
82
+ return colors.yellow('\u25CB');
83
+ default:
84
+ return '';
85
+ }
86
+ }
87
+ /**
88
+ * Format label badge (for preview label)
89
+ */
90
+ export function formatLabelBadge(label) {
91
+ return colors.magenta(`[${label}]`);
92
+ }
93
+ /**
94
+ * Truncate text to max length with ellipsis
95
+ */
96
+ export function truncate(text, maxLength) {
97
+ if (text.length <= maxLength)
98
+ return text;
99
+ return text.substring(0, maxLength - 3) + '...';
100
+ }
101
+ /**
102
+ * Get the raw badge text (without colors) for a PR
103
+ * Used to compute dynamic badge widths
104
+ */
105
+ export function getPrBadgeText(pr) {
106
+ const badge = `#${pr.number}`;
107
+ return badge;
108
+ }
109
+ /**
110
+ * Compute the maximum PR number width for alignment
111
+ */
112
+ export function computeMaxPrNumberWidth(prs) {
113
+ if (prs.length === 0)
114
+ return 4; // "#XXX"
115
+ const maxNum = Math.max(...prs.map((pr) => pr.number));
116
+ return `#${maxNum}`.length;
117
+ }
118
+ /**
119
+ * Alias for computeMaxPrNumberWidth (badge width = PR number width for list display)
120
+ */
121
+ export function computeMaxPrBadgeWidth(prs) {
122
+ return computeMaxPrNumberWidth(prs);
123
+ }
124
+ /**
125
+ * Highlight search pattern in text
126
+ */
127
+ function highlightSearchMatch(text, pattern) {
128
+ if (!pattern || pattern.length === 0) {
129
+ return text;
130
+ }
131
+ const lowerText = text.toLowerCase();
132
+ const lowerPattern = pattern.toLowerCase();
133
+ const index = lowerText.indexOf(lowerPattern);
134
+ if (index === -1) {
135
+ return text;
136
+ }
137
+ const before = text.substring(0, index);
138
+ const match = text.substring(index, index + pattern.length);
139
+ const after = text.substring(index + pattern.length);
140
+ return before + colors.bold(colors.yellow(match)) + after;
141
+ }
142
+ // Column widths for consistent alignment
143
+ const COL_STATE = 8; // [OPEN], [MERGED], [CLOSED]
144
+ const COL_DRAFT = 7; // [DRAFT] or empty
145
+ const COL_TITLE = 32; // PR title (truncated)
146
+ const COL_AUTHOR = 14; // @username
147
+ const COL_AGE = 4; // 2h, 1d, etc.
148
+ const COL_WT = 2; // WT indicator
149
+ const COL_REVIEW = 3; // Review status
150
+ const COL_CI = 1; // CI status
151
+ /**
152
+ * Format column header for PR list
153
+ */
154
+ export function formatPrColumnHeader(prNumberWidth) {
155
+ const parts = [];
156
+ parts.push(colors.dim('PR'.padStart(prNumberWidth)));
157
+ parts.push(colors.dim('STATE'.padEnd(COL_STATE)));
158
+ parts.push(colors.dim(''.padEnd(COL_DRAFT))); // DRAFT column (no header)
159
+ parts.push(colors.dim('TITLE'.padEnd(COL_TITLE)));
160
+ parts.push(colors.dim('AUTHOR'.padEnd(COL_AUTHOR)));
161
+ parts.push(colors.dim('AGE'.padEnd(COL_AGE)));
162
+ parts.push(colors.dim('WT'));
163
+ parts.push(colors.dim('RV'));
164
+ parts.push(colors.dim('CI'));
165
+ return parts.join(' ');
166
+ }
167
+ /**
168
+ * Format separator line for PR list header
169
+ */
170
+ export function formatPrColumnSeparator(prNumberWidth) {
171
+ const totalWidth = prNumberWidth +
172
+ 2 +
173
+ COL_STATE +
174
+ 2 +
175
+ COL_DRAFT +
176
+ 2 +
177
+ COL_TITLE +
178
+ 2 +
179
+ COL_AUTHOR +
180
+ 2 +
181
+ COL_AGE +
182
+ 2 +
183
+ COL_WT +
184
+ 2 +
185
+ COL_REVIEW +
186
+ 2 +
187
+ COL_CI;
188
+ return colors.dim('─'.repeat(totalWidth));
189
+ }
190
+ /**
191
+ * Format a single PR line for list display
192
+ */
193
+ export function formatPrListItem(pr, prNumberWidth, previewLabel, searchPattern) {
194
+ const parts = [];
195
+ // PR number (right-aligned)
196
+ const prNum = `#${pr.number}`.padStart(prNumberWidth);
197
+ parts.push(colors.bold(prNum));
198
+ // State badge (fixed width)
199
+ const stateBadge = formatStateBadge(pr.state);
200
+ // Calculate raw text length for padding (without ANSI codes)
201
+ const stateRaw = pr.state === 'OPEN' ? '[OPEN]' : pr.state === 'MERGED' ? '[MERGED]' : '[CLOSED]';
202
+ parts.push(stateBadge + ' '.repeat(COL_STATE - stateRaw.length));
203
+ // Draft badge (fixed width column)
204
+ if (pr.isDraft) {
205
+ parts.push(formatDraftBadge(true));
206
+ }
207
+ else {
208
+ parts.push(' '.repeat(COL_DRAFT));
209
+ }
210
+ // Title (truncated, with search highlighting) - fixed width
211
+ let title = pr.title;
212
+ // Add preview label indicator if matches
213
+ if (previewLabel && pr.labels.some((l) => l.toLowerCase() === previewLabel.toLowerCase())) {
214
+ title = `★ ${title}`;
215
+ }
216
+ const truncatedTitle = truncate(title, COL_TITLE);
217
+ const highlightedTitle = highlightSearchMatch(truncatedTitle, searchPattern);
218
+ const titlePadding = Math.max(0, COL_TITLE - truncatedTitle.length);
219
+ parts.push(highlightedTitle + ' '.repeat(titlePadding));
220
+ // Author (fixed width)
221
+ const authorText = `@${pr.author}`;
222
+ parts.push(colors.dim(truncate(authorText, COL_AUTHOR).padEnd(COL_AUTHOR)));
223
+ // Age (fixed width)
224
+ parts.push(colors.dim(formatRelativeTime(pr.updatedAt).padEnd(COL_AGE)));
225
+ // Worktree indicator (fixed width)
226
+ if (pr.hasWorktree) {
227
+ parts.push(formatWorktreeIndicator(true));
228
+ }
229
+ else {
230
+ parts.push(' '.repeat(COL_WT));
231
+ }
232
+ // Review status (fixed width)
233
+ const reviewStr = formatReviewStatus(pr.reviewDecision, pr.approvalCount);
234
+ if (reviewStr) {
235
+ // The review string contains color codes, pad based on content
236
+ const reviewRaw = pr.reviewDecision === 'APPROVED'
237
+ ? `✓${pr.approvalCount}`
238
+ : pr.reviewDecision === 'CHANGES_REQUESTED'
239
+ ? '✗'
240
+ : '○';
241
+ parts.push(reviewStr + ' '.repeat(Math.max(0, COL_REVIEW - reviewRaw.length)));
242
+ }
243
+ else {
244
+ parts.push(' '.repeat(COL_REVIEW));
245
+ }
246
+ // CI status (fixed width)
247
+ const ciStr = formatCIStatus(pr.checksStatus);
248
+ if (ciStr) {
249
+ parts.push(ciStr);
250
+ }
251
+ else {
252
+ parts.push(' '.repeat(COL_CI));
253
+ }
254
+ return parts.join(' ');
255
+ }
256
+ /**
257
+ * Format PR list header
258
+ */
259
+ export function formatPrListHeader(repoName) {
260
+ const lines = [];
261
+ lines.push(colors.cyan(colors.bold('\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557')));
262
+ lines.push(colors.cyan(colors.bold('\u2551')) +
263
+ colors.bold(` ${repoName} Pull Requests`.padEnd(66)) +
264
+ colors.cyan(colors.bold('\u2551')));
265
+ lines.push(colors.cyan(colors.bold('\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n')));
266
+ return lines.join('\n');
267
+ }
268
+ /**
269
+ * Format summary line
270
+ */
271
+ export function formatPrSummary(prs) {
272
+ const total = prs.length;
273
+ const open = prs.filter((p) => p.state === 'OPEN').length;
274
+ const drafts = prs.filter((p) => p.isDraft).length;
275
+ const withWorktree = prs.filter((p) => p.hasWorktree).length;
276
+ const parts = [`${total} PRs`];
277
+ if (open > 0)
278
+ parts.push(`${open} open`);
279
+ if (drafts > 0)
280
+ parts.push(`${drafts} drafts`);
281
+ if (withWorktree > 0)
282
+ parts.push(`${withWorktree} with worktrees`);
283
+ return colors.dim(parts.join(' \u00B7 '));
284
+ }
285
+ /**
286
+ * Get human-readable description of current state filter
287
+ */
288
+ function describeCurrentStateFilter(filters) {
289
+ const states = filters.states;
290
+ if (states.size === 3) {
291
+ return 'all';
292
+ }
293
+ if (states.size === 1) {
294
+ if (states.has('OPEN'))
295
+ return 'open';
296
+ if (states.has('MERGED'))
297
+ return 'merged';
298
+ if (states.has('CLOSED'))
299
+ return 'closed';
300
+ }
301
+ // Multiple but not all - list them
302
+ const stateNames = [];
303
+ if (states.has('OPEN'))
304
+ stateNames.push('open');
305
+ if (states.has('MERGED'))
306
+ stateNames.push('merged');
307
+ if (states.has('CLOSED'))
308
+ stateNames.push('closed');
309
+ return stateNames.join('+');
310
+ }
311
+ /**
312
+ * Get human-readable description of draft filter
313
+ */
314
+ function describeDraftFilter(showDrafts) {
315
+ if (showDrafts === 'only')
316
+ return 'drafts only';
317
+ if (showDrafts === false)
318
+ return 'no drafts';
319
+ return ''; // included by default, no need to show
320
+ }
321
+ /**
322
+ * Format filter indicator line
323
+ * Shows current view clearly with available shortcuts
324
+ */
325
+ export function formatFilterIndicator(filters) {
326
+ // Build "Showing: X PRs" description
327
+ const stateDesc = describeCurrentStateFilter(filters);
328
+ const draftDesc = describeDraftFilter(filters.showDrafts);
329
+ let showingText = stateDesc;
330
+ if (draftDesc) {
331
+ showingText += `, ${draftDesc}`;
332
+ }
333
+ // Build shortcut hints with current selection highlighted
334
+ const shortcuts = [];
335
+ const states = filters.states;
336
+ // State shortcuts - highlight the active one
337
+ const isOpen = states.size === 1 && states.has('OPEN');
338
+ const isMerged = states.size === 1 && states.has('MERGED');
339
+ const isClosed = states.size === 1 && states.has('CLOSED');
340
+ const isAll = states.size === 3;
341
+ shortcuts.push(isOpen ? colors.green('[o] open') : colors.dim('[o] open'));
342
+ shortcuts.push(isMerged ? colors.blue('[m] merged') : colors.dim('[m] merged'));
343
+ shortcuts.push(isClosed ? colors.red('[x] closed') : colors.dim('[x] closed'));
344
+ shortcuts.push(isAll ? colors.cyan('[a] all') : colors.dim('[a] all'));
345
+ // Draft shortcut - show current state
346
+ if (filters.showDrafts === 'only') {
347
+ shortcuts.push(colors.yellow('[d] drafts only'));
348
+ }
349
+ else if (filters.showDrafts === false) {
350
+ shortcuts.push(colors.dim('[d] no drafts'));
351
+ }
352
+ else {
353
+ shortcuts.push(colors.dim('[d] drafts'));
354
+ }
355
+ return `Showing: ${colors.bold(showingText)} · ${shortcuts.join(' ')}`;
356
+ }
357
+ /**
358
+ * Format shortcut legend
359
+ */
360
+ export function formatShortcutLegend() {
361
+ const shortcuts = [
362
+ `${colors.cyan('[w]')} worktree`,
363
+ `${colors.cyan('[b]')} browser`,
364
+ `${colors.cyan('[d]')} details`,
365
+ `${colors.cyan('[f]')} filter`,
366
+ `${colors.cyan('[/]')} search`,
367
+ `${colors.cyan('[r]')} refresh`,
368
+ `${colors.cyan('[q]')} quit`,
369
+ ];
370
+ return colors.dim('Shortcuts: ') + shortcuts.join(colors.dim(' \u00B7 '));
371
+ }
372
+ /**
373
+ * Format table output for non-interactive mode
374
+ */
375
+ export function formatPrTable(prs, previewLabel) {
376
+ if (prs.length === 0) {
377
+ return colors.dim('No pull requests found.');
378
+ }
379
+ const lines = [];
380
+ const prNumWidth = computeMaxPrNumberWidth(prs);
381
+ // Add header and separator
382
+ lines.push(formatPrColumnHeader(prNumWidth));
383
+ lines.push(formatPrColumnSeparator(prNumWidth));
384
+ for (const pr of prs) {
385
+ lines.push(formatPrListItem(pr, prNumWidth, previewLabel));
386
+ }
387
+ return lines.join('\n');
388
+ }
389
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/lib/prs/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.test.d.ts","sourceRoot":"","sources":["../../../src/lib/prs/formatters.test.ts"],"names":[],"mappings":""}