@camaradesuk/git-worktree-tools 1.6.0 → 1.8.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 (334) hide show
  1. package/README.md +371 -421
  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 +148 -39
  7. package/dist/cli/newpr.js.map +1 -1
  8. package/dist/cli/newpr.test.js +57 -21
  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 +408 -0
  17. package/dist/cli/prs.test.js.map +1 -0
  18. package/dist/cli/wt/clean.d.ts +1 -0
  19. package/dist/cli/wt/clean.d.ts.map +1 -1
  20. package/dist/cli/wt/clean.js +11 -1
  21. package/dist/cli/wt/clean.js.map +1 -1
  22. package/dist/cli/wt/config.d.ts +1 -1
  23. package/dist/cli/wt/config.d.ts.map +1 -1
  24. package/dist/cli/wt/config.js +148 -13
  25. package/dist/cli/wt/config.js.map +1 -1
  26. package/dist/cli/wt/config.test.d.ts +5 -0
  27. package/dist/cli/wt/config.test.d.ts.map +1 -0
  28. package/dist/cli/wt/config.test.js +260 -0
  29. package/dist/cli/wt/config.test.js.map +1 -0
  30. package/dist/cli/wt/entry.test.js +11 -8
  31. package/dist/cli/wt/entry.test.js.map +1 -1
  32. package/dist/cli/wt/init.d.ts +14 -0
  33. package/dist/cli/wt/init.d.ts.map +1 -0
  34. package/dist/cli/wt/init.js +209 -0
  35. package/dist/cli/wt/init.js.map +1 -0
  36. package/dist/cli/wt/init.test.d.ts +5 -0
  37. package/dist/cli/wt/init.test.d.ts.map +1 -0
  38. package/dist/cli/wt/init.test.js +165 -0
  39. package/dist/cli/wt/init.test.js.map +1 -0
  40. package/dist/cli/wt/init.unit.test.d.ts +5 -0
  41. package/dist/cli/wt/init.unit.test.d.ts.map +1 -0
  42. package/dist/cli/wt/init.unit.test.js +432 -0
  43. package/dist/cli/wt/init.unit.test.js.map +1 -0
  44. package/dist/cli/wt/interactive-menu.d.ts +43 -0
  45. package/dist/cli/wt/interactive-menu.d.ts.map +1 -0
  46. package/dist/cli/wt/interactive-menu.js +656 -0
  47. package/dist/cli/wt/interactive-menu.js.map +1 -0
  48. package/dist/cli/wt/interactive-menu.test.d.ts +10 -0
  49. package/dist/cli/wt/interactive-menu.test.d.ts.map +1 -0
  50. package/dist/cli/wt/interactive-menu.test.js +736 -0
  51. package/dist/cli/wt/interactive-menu.test.js.map +1 -0
  52. package/dist/cli/wt/link.d.ts +9 -0
  53. package/dist/cli/wt/link.d.ts.map +1 -1
  54. package/dist/cli/wt/link.js +27 -0
  55. package/dist/cli/wt/link.js.map +1 -1
  56. package/dist/cli/wt/list.d.ts +2 -2
  57. package/dist/cli/wt/list.d.ts.map +1 -1
  58. package/dist/cli/wt/list.js +17 -17
  59. package/dist/cli/wt/list.js.map +1 -1
  60. package/dist/cli/wt/new.d.ts +7 -1
  61. package/dist/cli/wt/new.d.ts.map +1 -1
  62. package/dist/cli/wt/new.js +58 -6
  63. package/dist/cli/wt/new.js.map +1 -1
  64. package/dist/cli/wt/prs.d.ts +21 -0
  65. package/dist/cli/wt/prs.d.ts.map +1 -0
  66. package/dist/cli/wt/prs.js +251 -0
  67. package/dist/cli/wt/prs.js.map +1 -0
  68. package/dist/cli/wt/prs.test.d.ts +5 -0
  69. package/dist/cli/wt/prs.test.d.ts.map +1 -0
  70. package/dist/cli/wt/prs.test.js +410 -0
  71. package/dist/cli/wt/prs.test.js.map +1 -0
  72. package/dist/cli/wt/wt.test.js +159 -16
  73. package/dist/cli/wt/wt.test.js.map +1 -1
  74. package/dist/cli/wt.d.ts +3 -1
  75. package/dist/cli/wt.d.ts.map +1 -1
  76. package/dist/cli/wt.js +103 -3
  77. package/dist/cli/wt.js.map +1 -1
  78. package/dist/cli/wt.unit.test.d.ts +7 -0
  79. package/dist/cli/wt.unit.test.d.ts.map +1 -0
  80. package/dist/cli/wt.unit.test.js +182 -0
  81. package/dist/cli/wt.unit.test.js.map +1 -0
  82. package/dist/cli/wtconfig.js +18 -4
  83. package/dist/cli/wtconfig.js.map +1 -1
  84. package/dist/cli/wtconfig.test.js +21 -16
  85. package/dist/cli/wtconfig.test.js.map +1 -1
  86. package/dist/cli/wtlink.d.ts +2 -1
  87. package/dist/cli/wtlink.d.ts.map +1 -1
  88. package/dist/cli/wtlink.js +41 -2
  89. package/dist/cli/wtlink.js.map +1 -1
  90. package/dist/e2e/cli.e2e.test.js +6 -2
  91. package/dist/e2e/cli.e2e.test.js.map +1 -1
  92. package/dist/e2e/helpers/cli-runner.d.ts.map +1 -1
  93. package/dist/e2e/helpers/cli-runner.js +1 -0
  94. package/dist/e2e/helpers/cli-runner.js.map +1 -1
  95. package/dist/e2e/helpers/gh-mock.d.ts.map +1 -1
  96. package/dist/e2e/helpers/gh-mock.js +55 -1
  97. package/dist/e2e/helpers/gh-mock.js.map +1 -1
  98. package/dist/e2e/helpers/pty-wrapper.d.ts +15 -0
  99. package/dist/e2e/helpers/pty-wrapper.d.ts.map +1 -1
  100. package/dist/e2e/helpers/pty-wrapper.js +65 -0
  101. package/dist/e2e/helpers/pty-wrapper.js.map +1 -1
  102. package/dist/e2e/newpr/scenarios.e2e.test.js +7 -7
  103. package/dist/e2e/newpr/scenarios.e2e.test.js.map +1 -1
  104. package/dist/e2e/newpr-full-flow.e2e.test.js +1 -0
  105. package/dist/e2e/newpr-full-flow.e2e.test.js.map +1 -1
  106. package/dist/e2e/prs/prs.e2e.test.d.ts +7 -0
  107. package/dist/e2e/prs/prs.e2e.test.d.ts.map +1 -0
  108. package/dist/e2e/prs/prs.e2e.test.js +606 -0
  109. package/dist/e2e/prs/prs.e2e.test.js.map +1 -0
  110. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts +8 -0
  111. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts.map +1 -0
  112. package/dist/e2e/wt/interactive-menu.e2e.test.js +583 -0
  113. package/dist/e2e/wt/interactive-menu.e2e.test.js.map +1 -0
  114. package/dist/e2e/wt/wt.e2e.test.d.ts +9 -0
  115. package/dist/e2e/wt/wt.e2e.test.d.ts.map +1 -0
  116. package/dist/e2e/wt/wt.e2e.test.js +597 -0
  117. package/dist/e2e/wt/wt.e2e.test.js.map +1 -0
  118. package/dist/integration/prs.integration.test.d.ts +8 -0
  119. package/dist/integration/prs.integration.test.d.ts.map +1 -0
  120. package/dist/integration/prs.integration.test.js +478 -0
  121. package/dist/integration/prs.integration.test.js.map +1 -0
  122. package/dist/lib/ai/base-provider.d.ts +22 -0
  123. package/dist/lib/ai/base-provider.d.ts.map +1 -1
  124. package/dist/lib/ai/base-provider.js +180 -99
  125. package/dist/lib/ai/base-provider.js.map +1 -1
  126. package/dist/lib/ai/base-provider.test.js +13 -14
  127. package/dist/lib/ai/base-provider.test.js.map +1 -1
  128. package/dist/lib/ai/cli-provider.d.ts +11 -7
  129. package/dist/lib/ai/cli-provider.d.ts.map +1 -1
  130. package/dist/lib/ai/cli-provider.js +19 -49
  131. package/dist/lib/ai/cli-provider.js.map +1 -1
  132. package/dist/lib/ai/cli-provider.test.js +47 -49
  133. package/dist/lib/ai/cli-provider.test.js.map +1 -1
  134. package/dist/lib/ai/index.d.ts +2 -1
  135. package/dist/lib/ai/index.d.ts.map +1 -1
  136. package/dist/lib/ai/index.js +2 -0
  137. package/dist/lib/ai/index.js.map +1 -1
  138. package/dist/lib/ai/provider-manager.js +2 -2
  139. package/dist/lib/ai/provider-manager.js.map +1 -1
  140. package/dist/lib/ai/repo-docs.d.ts +43 -0
  141. package/dist/lib/ai/repo-docs.d.ts.map +1 -0
  142. package/dist/lib/ai/repo-docs.js +274 -0
  143. package/dist/lib/ai/repo-docs.js.map +1 -0
  144. package/dist/lib/ai/repo-docs.test.d.ts +5 -0
  145. package/dist/lib/ai/repo-docs.test.d.ts.map +1 -0
  146. package/dist/lib/ai/repo-docs.test.js +357 -0
  147. package/dist/lib/ai/repo-docs.test.js.map +1 -0
  148. package/dist/lib/ai/types.d.ts +18 -2
  149. package/dist/lib/ai/types.d.ts.map +1 -1
  150. package/dist/lib/ai/types.js.map +1 -1
  151. package/dist/lib/config-editor.d.ts +21 -0
  152. package/dist/lib/config-editor.d.ts.map +1 -0
  153. package/dist/lib/config-editor.js +729 -0
  154. package/dist/lib/config-editor.js.map +1 -0
  155. package/dist/lib/config-editor.test.d.ts +11 -0
  156. package/dist/lib/config-editor.test.d.ts.map +1 -0
  157. package/dist/lib/config-editor.test.js +526 -0
  158. package/dist/lib/config-editor.test.js.map +1 -0
  159. package/dist/lib/config-validation.d.ts +28 -0
  160. package/dist/lib/config-validation.d.ts.map +1 -0
  161. package/dist/lib/config-validation.js +590 -0
  162. package/dist/lib/config-validation.js.map +1 -0
  163. package/dist/lib/config-validation.test.d.ts +5 -0
  164. package/dist/lib/config-validation.test.d.ts.map +1 -0
  165. package/dist/lib/config-validation.test.js +398 -0
  166. package/dist/lib/config-validation.test.js.map +1 -0
  167. package/dist/lib/config.d.ts +149 -6
  168. package/dist/lib/config.d.ts.map +1 -1
  169. package/dist/lib/config.js +261 -55
  170. package/dist/lib/config.js.map +1 -1
  171. package/dist/lib/config.test.js +2 -1
  172. package/dist/lib/config.test.js.map +1 -1
  173. package/dist/lib/constants.d.ts +50 -1
  174. package/dist/lib/constants.d.ts.map +1 -1
  175. package/dist/lib/constants.js +67 -1
  176. package/dist/lib/constants.js.map +1 -1
  177. package/dist/lib/constants.test.d.ts +5 -0
  178. package/dist/lib/constants.test.d.ts.map +1 -0
  179. package/dist/lib/constants.test.js +121 -0
  180. package/dist/lib/constants.test.js.map +1 -0
  181. package/dist/lib/git.d.ts +44 -0
  182. package/dist/lib/git.d.ts.map +1 -1
  183. package/dist/lib/git.js +121 -1
  184. package/dist/lib/git.js.map +1 -1
  185. package/dist/lib/git.test.js +118 -1
  186. package/dist/lib/git.test.js.map +1 -1
  187. package/dist/lib/github.d.ts +41 -0
  188. package/dist/lib/github.d.ts.map +1 -1
  189. package/dist/lib/github.js +109 -0
  190. package/dist/lib/github.js.map +1 -1
  191. package/dist/lib/global-check.d.ts +38 -0
  192. package/dist/lib/global-check.d.ts.map +1 -0
  193. package/dist/lib/global-check.js +135 -0
  194. package/dist/lib/global-check.js.map +1 -0
  195. package/dist/lib/global-check.test.d.ts +5 -0
  196. package/dist/lib/global-check.test.d.ts.map +1 -0
  197. package/dist/lib/global-check.test.js +150 -0
  198. package/dist/lib/global-check.test.js.map +1 -0
  199. package/dist/lib/global-config.d.ts +102 -0
  200. package/dist/lib/global-config.d.ts.map +1 -0
  201. package/dist/lib/global-config.js +234 -0
  202. package/dist/lib/global-config.js.map +1 -0
  203. package/dist/lib/global-config.test.d.ts +5 -0
  204. package/dist/lib/global-config.test.d.ts.map +1 -0
  205. package/dist/lib/global-config.test.js +282 -0
  206. package/dist/lib/global-config.test.js.map +1 -0
  207. package/dist/lib/json-output.d.ts +1 -0
  208. package/dist/lib/json-output.d.ts.map +1 -1
  209. package/dist/lib/json-output.js +2 -0
  210. package/dist/lib/json-output.js.map +1 -1
  211. package/dist/lib/logger.d.ts +175 -0
  212. package/dist/lib/logger.d.ts.map +1 -0
  213. package/dist/lib/logger.js +475 -0
  214. package/dist/lib/logger.js.map +1 -0
  215. package/dist/lib/logger.test.d.ts +5 -0
  216. package/dist/lib/logger.test.d.ts.map +1 -0
  217. package/dist/lib/logger.test.js +292 -0
  218. package/dist/lib/logger.test.js.map +1 -0
  219. package/dist/lib/lswt/action-executors.d.ts.map +1 -1
  220. package/dist/lib/lswt/action-executors.js +2 -1
  221. package/dist/lib/lswt/action-executors.js.map +1 -1
  222. package/dist/lib/lswt/action-executors.test.js +3 -0
  223. package/dist/lib/lswt/action-executors.test.js.map +1 -1
  224. package/dist/lib/lswt/actions.d.ts +1 -0
  225. package/dist/lib/lswt/actions.d.ts.map +1 -1
  226. package/dist/lib/lswt/actions.js +38 -10
  227. package/dist/lib/lswt/actions.js.map +1 -1
  228. package/dist/lib/lswt/actions.test.js +34 -22
  229. package/dist/lib/lswt/actions.test.js.map +1 -1
  230. package/dist/lib/lswt/interactive.js +8 -8
  231. package/dist/lib/lswt/interactive.js.map +1 -1
  232. package/dist/lib/newpr/args.d.ts.map +1 -1
  233. package/dist/lib/newpr/args.js +9 -2
  234. package/dist/lib/newpr/args.js.map +1 -1
  235. package/dist/lib/newpr/args.test.js +1 -1
  236. package/dist/lib/newpr/args.test.js.map +1 -1
  237. package/dist/lib/newpr/types.d.ts +2 -0
  238. package/dist/lib/newpr/types.d.ts.map +1 -1
  239. package/dist/lib/prompts.d.ts +6 -0
  240. package/dist/lib/prompts.d.ts.map +1 -1
  241. package/dist/lib/prompts.js +39 -13
  242. package/dist/lib/prompts.js.map +1 -1
  243. package/dist/lib/prompts.test.js +72 -1
  244. package/dist/lib/prompts.test.js.map +1 -1
  245. package/dist/lib/prs/actions.d.ts +70 -0
  246. package/dist/lib/prs/actions.d.ts.map +1 -0
  247. package/dist/lib/prs/actions.js +444 -0
  248. package/dist/lib/prs/actions.js.map +1 -0
  249. package/dist/lib/prs/actions.test.d.ts +5 -0
  250. package/dist/lib/prs/actions.test.d.ts.map +1 -0
  251. package/dist/lib/prs/actions.test.js +313 -0
  252. package/dist/lib/prs/actions.test.js.map +1 -0
  253. package/dist/lib/prs/data.d.ts +48 -0
  254. package/dist/lib/prs/data.d.ts.map +1 -0
  255. package/dist/lib/prs/data.js +171 -0
  256. package/dist/lib/prs/data.js.map +1 -0
  257. package/dist/lib/prs/data.test.d.ts +5 -0
  258. package/dist/lib/prs/data.test.d.ts.map +1 -0
  259. package/dist/lib/prs/data.test.js +417 -0
  260. package/dist/lib/prs/data.test.js.map +1 -0
  261. package/dist/lib/prs/details.d.ts +57 -0
  262. package/dist/lib/prs/details.d.ts.map +1 -0
  263. package/dist/lib/prs/details.js +246 -0
  264. package/dist/lib/prs/details.js.map +1 -0
  265. package/dist/lib/prs/details.test.d.ts +5 -0
  266. package/dist/lib/prs/details.test.d.ts.map +1 -0
  267. package/dist/lib/prs/details.test.js +325 -0
  268. package/dist/lib/prs/details.test.js.map +1 -0
  269. package/dist/lib/prs/filters.d.ts +56 -0
  270. package/dist/lib/prs/filters.d.ts.map +1 -0
  271. package/dist/lib/prs/filters.js +171 -0
  272. package/dist/lib/prs/filters.js.map +1 -0
  273. package/dist/lib/prs/filters.test.d.ts +5 -0
  274. package/dist/lib/prs/filters.test.d.ts.map +1 -0
  275. package/dist/lib/prs/filters.test.js +312 -0
  276. package/dist/lib/prs/filters.test.js.map +1 -0
  277. package/dist/lib/prs/formatters.d.ts +83 -0
  278. package/dist/lib/prs/formatters.d.ts.map +1 -0
  279. package/dist/lib/prs/formatters.js +389 -0
  280. package/dist/lib/prs/formatters.js.map +1 -0
  281. package/dist/lib/prs/formatters.test.d.ts +2 -0
  282. package/dist/lib/prs/formatters.test.d.ts.map +1 -0
  283. package/dist/lib/prs/formatters.test.js +387 -0
  284. package/dist/lib/prs/formatters.test.js.map +1 -0
  285. package/dist/lib/prs/interactive.d.ts +50 -0
  286. package/dist/lib/prs/interactive.d.ts.map +1 -0
  287. package/dist/lib/prs/interactive.js +453 -0
  288. package/dist/lib/prs/interactive.js.map +1 -0
  289. package/dist/lib/prs/interactive.test.d.ts +5 -0
  290. package/dist/lib/prs/interactive.test.d.ts.map +1 -0
  291. package/dist/lib/prs/interactive.test.js +364 -0
  292. package/dist/lib/prs/interactive.test.js.map +1 -0
  293. package/dist/lib/prs/types.d.ts +152 -0
  294. package/dist/lib/prs/types.d.ts.map +1 -0
  295. package/dist/lib/prs/types.js +17 -0
  296. package/dist/lib/prs/types.js.map +1 -0
  297. package/dist/lib/schema.test.d.ts +10 -0
  298. package/dist/lib/schema.test.d.ts.map +1 -0
  299. package/dist/lib/schema.test.js +309 -0
  300. package/dist/lib/schema.test.js.map +1 -0
  301. package/dist/lib/wtconfig/environment.d.ts.map +1 -1
  302. package/dist/lib/wtconfig/environment.js +6 -4
  303. package/dist/lib/wtconfig/environment.js.map +1 -1
  304. package/dist/lib/wtconfig/environment.test.js +2 -7
  305. package/dist/lib/wtconfig/environment.test.js.map +1 -1
  306. package/dist/lib/wtconfig/types.d.ts +3 -1
  307. package/dist/lib/wtconfig/types.d.ts.map +1 -1
  308. package/dist/lib/wtlink/config-manifest.d.ts +101 -0
  309. package/dist/lib/wtlink/config-manifest.d.ts.map +1 -0
  310. package/dist/lib/wtlink/config-manifest.js +219 -0
  311. package/dist/lib/wtlink/config-manifest.js.map +1 -0
  312. package/dist/lib/wtlink/config-manifest.test.d.ts +2 -0
  313. package/dist/lib/wtlink/config-manifest.test.d.ts.map +1 -0
  314. package/dist/lib/wtlink/config-manifest.test.js +460 -0
  315. package/dist/lib/wtlink/config-manifest.test.js.map +1 -0
  316. package/dist/lib/wtlink/link-configs.d.ts.map +1 -1
  317. package/dist/lib/wtlink/link-configs.js +36 -11
  318. package/dist/lib/wtlink/link-configs.js.map +1 -1
  319. package/dist/lib/wtlink/main-menu.d.ts.map +1 -1
  320. package/dist/lib/wtlink/main-menu.js +58 -50
  321. package/dist/lib/wtlink/main-menu.js.map +1 -1
  322. package/dist/lib/wtlink/main-menu.test.js +42 -40
  323. package/dist/lib/wtlink/main-menu.test.js.map +1 -1
  324. package/dist/lib/wtlink/manage-manifest.d.ts +9 -0
  325. package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
  326. package/dist/lib/wtlink/manage-manifest.js +346 -25
  327. package/dist/lib/wtlink/manage-manifest.js.map +1 -1
  328. package/dist/lib/wtlink/manage-manifest.test.js +196 -7
  329. package/dist/lib/wtlink/manage-manifest.test.js.map +1 -1
  330. package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
  331. package/dist/lib/wtlink/validate-manifest.js +27 -6
  332. package/dist/lib/wtlink/validate-manifest.js.map +1 -1
  333. package/package.json +2 -1
  334. package/schemas/worktreerc.schema.json +441 -0
@@ -0,0 +1,453 @@
1
+ /**
2
+ * PR browser interactive mode - keyboard-driven UI for PR selection
3
+ */
4
+ import * as colors from '../colors.js';
5
+ import { createDefaultFilterState } from './types.js';
6
+ import { setExclusiveState, setAllStates, cycleDraftFilter } from './filters.js';
7
+ import { applyFilters } from './data.js';
8
+ import { formatPrListItem, formatPrListHeader, formatPrSummary, formatFilterIndicator, computeMaxPrBadgeWidth, formatPrColumnHeader, formatPrColumnSeparator, } from './formatters.js';
9
+ import { executePrAction, createDefaultActionDeps } from './actions.js';
10
+ import { showPrDetail, createDefaultDetailDeps } from './details.js';
11
+ /** Map shortcut keys to actions (for PR-specific actions) */
12
+ const SHORTCUT_MAP = {
13
+ w: 'create_worktree',
14
+ b: 'open_browser',
15
+ e: 'open_editor',
16
+ t: 'open_terminal',
17
+ c: 'copy_url',
18
+ n: 'copy_number',
19
+ r: 'refresh',
20
+ q: 'exit',
21
+ };
22
+ /** Filter keys - exclusive state selection */
23
+ const FILTER_STATE_KEYS = {
24
+ o: 'filter_show_open', // Show OPEN only
25
+ m: 'filter_show_merged', // Show MERGED only
26
+ x: 'filter_show_closed', // Show CLOSED only
27
+ a: 'filter_show_all', // Show all states
28
+ d: 'filter_toggle_drafts', // Cycle draft filter
29
+ };
30
+ /**
31
+ * Get the action for a shortcut key, handling PR-specific rules.
32
+ * Returns null if the shortcut is not valid for this PR.
33
+ */
34
+ export function getActionForShortcut(shortcutKey, pr) {
35
+ if (!(shortcutKey in SHORTCUT_MAP)) {
36
+ return null;
37
+ }
38
+ const action = SHORTCUT_MAP[shortcutKey];
39
+ // 'e' (open editor) and 't' (open terminal) only work if PR has worktree
40
+ if ((shortcutKey === 'e' || shortcutKey === 't') && !pr.hasWorktree) {
41
+ return null;
42
+ }
43
+ // 'w' changes meaning based on worktree status
44
+ if (shortcutKey === 'w') {
45
+ return pr.hasWorktree ? 'open_worktree' : 'create_worktree';
46
+ }
47
+ return action;
48
+ }
49
+ /**
50
+ * Create default interactive dependencies using raw keyboard input
51
+ */
52
+ export function createDefaultPrInteractiveDeps() {
53
+ return {
54
+ selectPr: selectPrWithShortcuts,
55
+ pressEnterToContinue: pressEnterToContinue,
56
+ showDetails: (pr) => showPrDetail(pr, createDefaultDetailDeps()),
57
+ executeAction: (action, pr) => executePrAction(action, pr, createDefaultActionDeps()),
58
+ };
59
+ }
60
+ /**
61
+ * Wait for user to press Enter
62
+ */
63
+ async function pressEnterToContinue() {
64
+ if (!process.stdin.isTTY)
65
+ return;
66
+ return new Promise((resolve) => {
67
+ console.log(colors.dim('\nPress Enter to continue...'));
68
+ const wasRaw = process.stdin.isRaw;
69
+ process.stdin.setRawMode(true);
70
+ process.stdin.resume();
71
+ const onData = (key) => {
72
+ const char = key.toString();
73
+ // Enter or Ctrl+C
74
+ if (char === '\r' || char === '\n' || char === '\x03') {
75
+ process.stdin.setRawMode(wasRaw ?? false);
76
+ process.stdin.removeListener('data', onData);
77
+ process.stdin.pause();
78
+ resolve();
79
+ }
80
+ };
81
+ process.stdin.on('data', onData);
82
+ });
83
+ }
84
+ /**
85
+ * Format PR choice for display in the list
86
+ */
87
+ export function formatPrChoice(pr, badgeWidth, isSelected, previewLabel, searchPattern) {
88
+ const prefix = isSelected ? colors.cyan('❯ ') : ' ';
89
+ const line = formatPrListItem(pr, badgeWidth, previewLabel, searchPattern);
90
+ return `${prefix}${isSelected ? colors.bold(line) : line}`;
91
+ }
92
+ /**
93
+ * Apply search filter to PRs
94
+ */
95
+ export function filterPrsBySearch(prs, searchPattern) {
96
+ if (!searchPattern || searchPattern.length === 0) {
97
+ return prs.map((pr, i) => ({ pr, originalIndex: i }));
98
+ }
99
+ const pattern = searchPattern.toLowerCase();
100
+ return prs
101
+ .map((pr, i) => ({ pr, originalIndex: i }))
102
+ .filter(({ pr }) => {
103
+ const searchable = `#${pr.number} ${pr.title} @${pr.author} ${pr.headBranch}`.toLowerCase();
104
+ return searchable.includes(pattern);
105
+ });
106
+ }
107
+ /**
108
+ * Select a PR from the list with keyboard shortcuts
109
+ * Arrow keys to navigate, Enter to select, or press a shortcut key
110
+ * Press '/' to enter search mode
111
+ *
112
+ * This function uses raw stdin keypress handling and is intentionally
113
+ * excluded from coverage. The logic is tested via dependency injection.
114
+ */
115
+ /* c8 ignore start */
116
+ async function selectPrWithShortcuts(prs, filterState) {
117
+ // Guard: if stdin is not a TTY, we can't do interactive selection
118
+ if (!process.stdin.isTTY) {
119
+ return { pr: prs[0] ?? null, action: null };
120
+ }
121
+ return new Promise((resolve) => {
122
+ // Start with Exit selected if no PRs
123
+ let selectedIndex = prs.length === 0 ? 0 : 0;
124
+ let firstRender = true;
125
+ let searchMode = false;
126
+ let searchPattern = '';
127
+ let filteredPrs = prs;
128
+ let filteredIndices = prs.map((_, i) => i);
129
+ let previousTotalLines = prs.length + 2;
130
+ // Compute badge width once for consistent alignment
131
+ const badgeWidth = computeMaxPrBadgeWidth(prs);
132
+ // Update filtered list based on search pattern
133
+ const updateFiltered = () => {
134
+ const results = filterPrsBySearch(prs, searchPattern);
135
+ filteredPrs = results.map((r) => r.pr);
136
+ filteredIndices = results.map((r) => r.originalIndex);
137
+ // Clamp selected index to valid range
138
+ if (selectedIndex >= filteredPrs.length) {
139
+ selectedIndex = Math.max(0, filteredPrs.length - 1);
140
+ }
141
+ };
142
+ const exitIndex = () => filteredPrs.length;
143
+ // Render the list
144
+ const render = () => {
145
+ const totalItems = filteredPrs.length;
146
+ // When no PRs, we show 1 line for "No PRs found" message + 1 for Exit + 1 for prompt
147
+ // When PRs exist, add 2 for header + separator
148
+ const listLines = prs.length > 0 ? prs.length + 2 : 1;
149
+ const currentTotalLines = listLines + 2 + (searchMode ? 1 : 0);
150
+ // Move cursor up to overwrite previous render
151
+ if (!firstRender) {
152
+ process.stdout.write(`\x1b[${previousTotalLines}A`);
153
+ }
154
+ firstRender = false;
155
+ previousTotalLines = currentTotalLines;
156
+ // Render search bar if in search mode
157
+ if (searchMode) {
158
+ const searchPrompt = colors.cyan('🔍 Search: ');
159
+ const cursor = colors.dim('▊');
160
+ process.stdout.write(`\x1b[2K${searchPrompt}${searchPattern}${cursor}\n`);
161
+ }
162
+ // Handle empty state
163
+ if (prs.length === 0) {
164
+ process.stdout.write(`\x1b[2K ${colors.dim('No PRs found matching the filters.')}\n`);
165
+ }
166
+ else {
167
+ // Render header and separator
168
+ process.stdout.write(`\x1b[2K ${formatPrColumnHeader(badgeWidth)}\n`);
169
+ process.stdout.write(`\x1b[2K ${formatPrColumnSeparator(badgeWidth)}\n`);
170
+ // Render each PR (always render all slots for consistent display)
171
+ for (let i = 0; i < prs.length; i++) {
172
+ if (i < totalItems) {
173
+ const pr = filteredPrs[i];
174
+ const line = formatPrChoice(pr, badgeWidth, i === selectedIndex, 'preview', // TODO: get from config
175
+ searchMode ? searchPattern : undefined);
176
+ process.stdout.write(`\x1b[2K${line}\n`);
177
+ }
178
+ else {
179
+ process.stdout.write(`\x1b[2K\n`);
180
+ }
181
+ }
182
+ }
183
+ // Exit option (always show, selected when no PRs or at bottom)
184
+ const exitPrefix = selectedIndex === exitIndex() ? colors.cyan('❯ ') : ' ';
185
+ const exitText = selectedIndex === exitIndex() ? colors.bold(colors.dim('Exit')) : colors.dim('Exit');
186
+ process.stdout.write(`\x1b[2K${exitPrefix}${exitText}\n`);
187
+ // Prompt line
188
+ if (searchMode) {
189
+ const matchCount = filteredPrs.length === prs.length ? '' : ` (${filteredPrs.length}/${prs.length})`;
190
+ process.stdout.write(`\x1b[2K${colors.dim(`Type to search${matchCount} • esc cancel • enter select`)}\n`);
191
+ }
192
+ else if (prs.length === 0) {
193
+ process.stdout.write(`\x1b[2K${colors.dim('esc back • q quit')}\n`);
194
+ }
195
+ else {
196
+ process.stdout.write(`\x1b[2K${colors.dim('↑/↓ navigate • enter select • / search • w worktree • b browser • q quit')}\n`);
197
+ }
198
+ // Clear extra lines from previous render
199
+ const linesToClear = previousTotalLines;
200
+ if (linesToClear > currentTotalLines) {
201
+ for (let i = 0; i < linesToClear - currentTotalLines; i++) {
202
+ process.stdout.write(`\x1b[2K\n`);
203
+ }
204
+ process.stdout.write(`\x1b[${linesToClear - currentTotalLines}A`);
205
+ }
206
+ };
207
+ // Initial render
208
+ render();
209
+ // Set up raw mode for keypress handling
210
+ process.stdin.setRawMode(true);
211
+ process.stdin.resume();
212
+ const cleanup = () => {
213
+ process.stdin.setRawMode(false);
214
+ process.stdin.removeListener('data', onKeypress);
215
+ process.stdin.pause();
216
+ };
217
+ const onKeypress = (key) => {
218
+ const char = key.toString();
219
+ // Handle Ctrl+C
220
+ if (char === '\x03') {
221
+ cleanup();
222
+ process.exit(0);
223
+ }
224
+ if (searchMode) {
225
+ // Search mode key handling
226
+ if (char === '\x1b') {
227
+ // Escape - exit search mode
228
+ searchMode = false;
229
+ searchPattern = '';
230
+ updateFiltered();
231
+ render();
232
+ }
233
+ else if (char === '\r' || char === '\n') {
234
+ // Enter - select current item
235
+ searchMode = false;
236
+ if (selectedIndex === exitIndex() || filteredPrs.length === 0) {
237
+ cleanup();
238
+ resolve({ pr: null, action: null });
239
+ }
240
+ else {
241
+ cleanup();
242
+ resolve({ pr: filteredPrs[selectedIndex], action: null });
243
+ }
244
+ }
245
+ else if (char === '\x7f' || char === '\b') {
246
+ // Backspace
247
+ if (searchPattern.length > 0) {
248
+ searchPattern = searchPattern.slice(0, -1);
249
+ updateFiltered();
250
+ render();
251
+ }
252
+ }
253
+ else if (char.length === 1 && char >= ' ') {
254
+ // Printable character
255
+ searchPattern += char;
256
+ updateFiltered();
257
+ render();
258
+ }
259
+ return;
260
+ }
261
+ // Normal mode key handling
262
+ if (char === '\x1b' && prs.length === 0) {
263
+ // Escape when no PRs - go back
264
+ cleanup();
265
+ resolve({ pr: null, action: 'exit' });
266
+ }
267
+ else if (char === '\x1b[A') {
268
+ // Up arrow
269
+ selectedIndex = Math.max(0, selectedIndex - 1);
270
+ render();
271
+ }
272
+ else if (char === '\x1b[B') {
273
+ // Down arrow
274
+ selectedIndex = Math.min(exitIndex(), selectedIndex + 1);
275
+ render();
276
+ }
277
+ else if (char === '\r' || char === '\n') {
278
+ // Enter - select current item
279
+ if (selectedIndex === exitIndex()) {
280
+ cleanup();
281
+ resolve({ pr: null, action: null });
282
+ }
283
+ else {
284
+ cleanup();
285
+ resolve({ pr: filteredPrs[selectedIndex], action: null });
286
+ }
287
+ }
288
+ else if (char === '/') {
289
+ // Enter search mode
290
+ searchMode = true;
291
+ searchPattern = '';
292
+ render();
293
+ }
294
+ else if (char === 'q') {
295
+ // Quit
296
+ cleanup();
297
+ resolve({ pr: null, action: 'exit' });
298
+ }
299
+ else if (char in FILTER_STATE_KEYS) {
300
+ // Filter key - exclusive state selection or draft toggle
301
+ cleanup();
302
+ resolve({ pr: null, action: FILTER_STATE_KEYS[char] });
303
+ }
304
+ else if (char in SHORTCUT_MAP && selectedIndex < filteredPrs.length) {
305
+ // Shortcut key for current PR
306
+ const pr = filteredPrs[selectedIndex];
307
+ const action = getActionForShortcut(char, pr);
308
+ if (action) {
309
+ cleanup();
310
+ resolve({ pr, action });
311
+ }
312
+ }
313
+ };
314
+ process.stdin.on('data', onKeypress);
315
+ });
316
+ }
317
+ /* c8 ignore stop */
318
+ /**
319
+ * Print PR list header with summary and filter indicators
320
+ */
321
+ export function printPrHeader(repoName, prs, filterState) {
322
+ console.log(formatPrListHeader(repoName));
323
+ console.log(formatPrSummary(prs));
324
+ console.log();
325
+ console.log(formatFilterIndicator(filterState));
326
+ console.log();
327
+ }
328
+ /**
329
+ * Run the interactive PR browser loop
330
+ *
331
+ * @param allPrs - All PRs (unfiltered) - filtering is done internally
332
+ * @param repoName - Repository name for header display
333
+ * @param previewLabel - Label to highlight in PR list
334
+ * @param initialFilterState - Initial filter state (optional, defaults to showing OPEN)
335
+ * @param interactiveDeps - Dependencies for testing
336
+ */
337
+ export async function runPrInteractiveMode(allPrs, repoName, previewLabel, initialFilterState, interactiveDeps) {
338
+ const deps = interactiveDeps ?? createDefaultPrInteractiveDeps();
339
+ let filterState = initialFilterState ?? createDefaultFilterState();
340
+ let running = true;
341
+ while (running) {
342
+ // Apply current filters to get display list
343
+ const filteredPrs = applyFilters(allPrs, filterState);
344
+ // Clear screen for clean display
345
+ console.clear();
346
+ // Print header
347
+ printPrHeader(repoName, filteredPrs, filterState);
348
+ // Combined selection: user can select a PR or press a shortcut key
349
+ const selection = await deps.selectPr(filteredPrs, filterState);
350
+ // Handle filter actions - exclusive state selection
351
+ if (selection.action === 'filter_show_open') {
352
+ filterState = setExclusiveState(filterState, 'OPEN');
353
+ continue; // Re-render with new filter
354
+ }
355
+ if (selection.action === 'filter_show_merged') {
356
+ filterState = setExclusiveState(filterState, 'MERGED');
357
+ continue; // Re-render with new filter
358
+ }
359
+ if (selection.action === 'filter_show_closed') {
360
+ filterState = setExclusiveState(filterState, 'CLOSED');
361
+ continue; // Re-render with new filter
362
+ }
363
+ if (selection.action === 'filter_show_all') {
364
+ filterState = setAllStates(filterState);
365
+ continue; // Re-render with new filter
366
+ }
367
+ if (selection.action === 'filter_toggle_drafts') {
368
+ filterState = cycleDraftFilter(filterState);
369
+ continue; // Re-render with new filter
370
+ }
371
+ if (!selection.pr && !selection.action) {
372
+ running = false;
373
+ console.log(colors.dim('\nGoodbye!\n'));
374
+ continue;
375
+ }
376
+ if (selection.action === 'exit') {
377
+ running = false;
378
+ console.log(colors.dim('\nGoodbye!\n'));
379
+ continue;
380
+ }
381
+ // Handle PR action (shortcut key pressed on a PR)
382
+ if (selection.pr && selection.action) {
383
+ const result = await deps.executeAction(selection.action, selection.pr);
384
+ // Display result message
385
+ if (result.message) {
386
+ if (result.success) {
387
+ console.log(colors.green(`\n✓ ${result.message}`));
388
+ }
389
+ else {
390
+ console.log(colors.red(`\n✗ ${result.message}`));
391
+ }
392
+ await deps.pressEnterToContinue();
393
+ }
394
+ // Handle refresh if needed
395
+ if (result.shouldRefresh && deps.refreshPrs) {
396
+ allPrs = await deps.refreshPrs();
397
+ }
398
+ // Handle exit if requested
399
+ if (result.shouldExit) {
400
+ running = false;
401
+ console.log(colors.dim('\nGoodbye!\n'));
402
+ }
403
+ continue;
404
+ }
405
+ // Handle PR selection (Enter pressed on a PR) - show detail view
406
+ if (selection.pr) {
407
+ let currentPr = selection.pr;
408
+ // Detail view loop - stay in detail view until user presses back or exit
409
+ while (true) {
410
+ const action = await deps.showDetails(currentPr);
411
+ if (action === 'back') {
412
+ break; // Return to list
413
+ }
414
+ if (action === 'exit') {
415
+ running = false;
416
+ console.log(colors.dim('\nGoodbye!\n'));
417
+ break;
418
+ }
419
+ // Execute the action
420
+ const result = await deps.executeAction(action, currentPr);
421
+ // Display result
422
+ console.clear();
423
+ if (result.message) {
424
+ if (result.success) {
425
+ console.log(colors.green(`\n✓ ${result.message}`));
426
+ }
427
+ else {
428
+ console.log(colors.red(`\n✗ ${result.message}`));
429
+ }
430
+ await deps.pressEnterToContinue();
431
+ }
432
+ // Handle refresh
433
+ if (result.shouldRefresh && deps.refreshPrs) {
434
+ allPrs = await deps.refreshPrs();
435
+ // Update currentPr with fresh data if still exists
436
+ const updatedPr = allPrs.find((p) => p.number === currentPr.number);
437
+ if (updatedPr) {
438
+ currentPr = updatedPr;
439
+ }
440
+ else {
441
+ break; // PR no longer exists, return to list
442
+ }
443
+ }
444
+ // Exit requested from action
445
+ if (result.shouldExit) {
446
+ running = false;
447
+ break;
448
+ }
449
+ }
450
+ }
451
+ }
452
+ }
453
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/lib/prs/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for PR interactive browser
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=interactive.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.test.d.ts","sourceRoot":"","sources":["../../../src/lib/prs/interactive.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}