@camaradesuk/git-worktree-tools 1.5.0 → 1.6.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 (135) hide show
  1. package/README.md +82 -11
  2. package/dist/cli/cleanpr.js +35 -4
  3. package/dist/cli/cleanpr.js.map +1 -1
  4. package/dist/cli/cleanpr.test.js +254 -0
  5. package/dist/cli/cleanpr.test.js.map +1 -1
  6. package/dist/cli/lswt.js +54 -6
  7. package/dist/cli/lswt.js.map +1 -1
  8. package/dist/cli/lswt.test.js +207 -0
  9. package/dist/cli/lswt.test.js.map +1 -1
  10. package/dist/cli/newpr.js +87 -65
  11. package/dist/cli/newpr.js.map +1 -1
  12. package/dist/cli/newpr.test.js +2 -1
  13. package/dist/cli/newpr.test.js.map +1 -1
  14. package/dist/cli/wt/clean.d.ts +16 -0
  15. package/dist/cli/wt/clean.d.ts.map +1 -0
  16. package/dist/cli/wt/clean.js +64 -0
  17. package/dist/cli/wt/clean.js.map +1 -0
  18. package/dist/cli/wt/completion.d.ts +12 -0
  19. package/dist/cli/wt/completion.d.ts.map +1 -0
  20. package/dist/cli/wt/completion.js +246 -0
  21. package/dist/cli/wt/completion.js.map +1 -0
  22. package/dist/cli/wt/completion.test.d.ts +5 -0
  23. package/dist/cli/wt/completion.test.d.ts.map +1 -0
  24. package/dist/cli/wt/completion.test.js +173 -0
  25. package/dist/cli/wt/completion.test.js.map +1 -0
  26. package/dist/cli/wt/config.d.ts +13 -0
  27. package/dist/cli/wt/config.d.ts.map +1 -0
  28. package/dist/cli/wt/config.js +40 -0
  29. package/dist/cli/wt/config.js.map +1 -0
  30. package/dist/cli/wt/entry.test.d.ts +8 -0
  31. package/dist/cli/wt/entry.test.d.ts.map +1 -0
  32. package/dist/cli/wt/entry.test.js +198 -0
  33. package/dist/cli/wt/entry.test.js.map +1 -0
  34. package/dist/cli/wt/link.d.ts +13 -0
  35. package/dist/cli/wt/link.d.ts.map +1 -0
  36. package/dist/cli/wt/link.js +88 -0
  37. package/dist/cli/wt/link.js.map +1 -0
  38. package/dist/cli/wt/list.d.ts +16 -0
  39. package/dist/cli/wt/list.d.ts.map +1 -0
  40. package/dist/cli/wt/list.js +65 -0
  41. package/dist/cli/wt/list.js.map +1 -0
  42. package/dist/cli/wt/new.d.ts +18 -0
  43. package/dist/cli/wt/new.d.ts.map +1 -0
  44. package/dist/cli/wt/new.js +78 -0
  45. package/dist/cli/wt/new.js.map +1 -0
  46. package/dist/cli/wt/run-command.d.ts +31 -0
  47. package/dist/cli/wt/run-command.d.ts.map +1 -0
  48. package/dist/cli/wt/run-command.js +49 -0
  49. package/dist/cli/wt/run-command.js.map +1 -0
  50. package/dist/cli/wt/run-command.test.d.ts +5 -0
  51. package/dist/cli/wt/run-command.test.d.ts.map +1 -0
  52. package/dist/cli/wt/run-command.test.js +88 -0
  53. package/dist/cli/wt/run-command.test.js.map +1 -0
  54. package/dist/cli/wt/state.d.ts +13 -0
  55. package/dist/cli/wt/state.d.ts.map +1 -0
  56. package/dist/cli/wt/state.js +38 -0
  57. package/dist/cli/wt/state.js.map +1 -0
  58. package/dist/cli/wt/wt.test.d.ts +8 -0
  59. package/dist/cli/wt/wt.test.d.ts.map +1 -0
  60. package/dist/cli/wt/wt.test.js +378 -0
  61. package/dist/cli/wt/wt.test.js.map +1 -0
  62. package/dist/cli/wt.d.ts +25 -0
  63. package/dist/cli/wt.d.ts.map +1 -0
  64. package/dist/cli/wt.js +74 -0
  65. package/dist/cli/wt.js.map +1 -0
  66. package/dist/cli/wtconfig.js +4 -4
  67. package/dist/cli/wtconfig.js.map +1 -1
  68. package/dist/cli/wtlink.js +66 -9
  69. package/dist/cli/wtlink.js.map +1 -1
  70. package/dist/cli/wtlink.test.js +101 -0
  71. package/dist/cli/wtlink.test.js.map +1 -1
  72. package/dist/e2e/cli.e2e.test.js +97 -1
  73. package/dist/e2e/cli.e2e.test.js.map +1 -1
  74. package/dist/e2e/lswt/lswt.e2e.test.js +33 -0
  75. package/dist/e2e/lswt/lswt.e2e.test.js.map +1 -1
  76. package/dist/e2e/wtlink/wtlink.e2e.test.js +52 -0
  77. package/dist/e2e/wtlink/wtlink.e2e.test.js.map +1 -1
  78. package/dist/lib/json-output.d.ts +11 -1
  79. package/dist/lib/json-output.d.ts.map +1 -1
  80. package/dist/lib/json-output.js +42 -1
  81. package/dist/lib/json-output.js.map +1 -1
  82. package/dist/lib/json-output.test.js +2 -0
  83. package/dist/lib/json-output.test.js.map +1 -1
  84. package/dist/lib/lswt/formatters.d.ts +1 -0
  85. package/dist/lib/lswt/formatters.d.ts.map +1 -1
  86. package/dist/lib/lswt/formatters.js +6 -1
  87. package/dist/lib/lswt/formatters.js.map +1 -1
  88. package/dist/lib/lswt/formatters.test.js +2 -2
  89. package/dist/lib/lswt/formatters.test.js.map +1 -1
  90. package/dist/lib/lswt/fuzzy-search.d.ts +27 -0
  91. package/dist/lib/lswt/fuzzy-search.d.ts.map +1 -0
  92. package/dist/lib/lswt/fuzzy-search.js +130 -0
  93. package/dist/lib/lswt/fuzzy-search.js.map +1 -0
  94. package/dist/lib/lswt/fuzzy-search.test.d.ts +5 -0
  95. package/dist/lib/lswt/fuzzy-search.test.d.ts.map +1 -0
  96. package/dist/lib/lswt/fuzzy-search.test.js +207 -0
  97. package/dist/lib/lswt/fuzzy-search.test.js.map +1 -0
  98. package/dist/lib/lswt/index.d.ts +1 -0
  99. package/dist/lib/lswt/index.d.ts.map +1 -1
  100. package/dist/lib/lswt/index.js +2 -0
  101. package/dist/lib/lswt/index.js.map +1 -1
  102. package/dist/lib/lswt/interactive.d.ts +8 -0
  103. package/dist/lib/lswt/interactive.d.ts.map +1 -1
  104. package/dist/lib/lswt/interactive.js +169 -20
  105. package/dist/lib/lswt/interactive.js.map +1 -1
  106. package/dist/lib/newpr/action-deps.test.d.ts +5 -0
  107. package/dist/lib/newpr/action-deps.test.d.ts.map +1 -0
  108. package/dist/lib/newpr/action-deps.test.js +111 -0
  109. package/dist/lib/newpr/action-deps.test.js.map +1 -0
  110. package/dist/lib/newpr/args.d.ts.map +1 -1
  111. package/dist/lib/newpr/args.js +6 -2
  112. package/dist/lib/newpr/args.js.map +1 -1
  113. package/dist/lib/newpr/args.test.js +209 -1
  114. package/dist/lib/newpr/args.test.js.map +1 -1
  115. package/dist/lib/prompts.d.ts +4 -0
  116. package/dist/lib/prompts.d.ts.map +1 -1
  117. package/dist/lib/prompts.js +178 -1
  118. package/dist/lib/prompts.js.map +1 -1
  119. package/dist/lib/prompts.test.js +279 -0
  120. package/dist/lib/prompts.test.js.map +1 -1
  121. package/dist/lib/wtlink/link-configs.test.js +282 -2
  122. package/dist/lib/wtlink/link-configs.test.js.map +1 -1
  123. package/dist/lib/wtlink/main-menu.js +1 -0
  124. package/dist/lib/wtlink/main-menu.js.map +1 -1
  125. package/dist/lib/wtlink/main-menu.test.d.ts +5 -0
  126. package/dist/lib/wtlink/main-menu.test.d.ts.map +1 -0
  127. package/dist/lib/wtlink/main-menu.test.js +124 -0
  128. package/dist/lib/wtlink/main-menu.test.js.map +1 -0
  129. package/dist/lib/wtlink/manage-manifest.d.ts +5 -0
  130. package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
  131. package/dist/lib/wtlink/manage-manifest.js +65 -2
  132. package/dist/lib/wtlink/manage-manifest.js.map +1 -1
  133. package/dist/lib/wtlink/manage-manifest.test.js +144 -2
  134. package/dist/lib/wtlink/manage-manifest.test.js.map +1 -1
  135. package/package.json +2 -1
package/README.md CHANGED
@@ -30,27 +30,51 @@ npm install -g @camaradesuk/git-worktree-tools
30
30
  ## Quick Start
31
31
 
32
32
  ```bash
33
- # Create a new PR with worktree
33
+ # Using the unified wt command (recommended)
34
+ wt new "Add user authentication feature" # Create PR with worktree
35
+ wt list # List worktrees
36
+ wt clean # Clean up merged/closed PRs
37
+ wt link # Manage shared config files
38
+ wt state --json # Query git state
39
+ wt config init # Configure settings
40
+
41
+ # Or use individual commands directly
34
42
  newpr "Add user authentication feature"
35
-
36
- # List all worktrees
37
43
  lswt
38
-
39
- # Clean up merged/closed PR worktrees
40
44
  cleanpr
41
-
42
- # Manage shared config files between worktrees
43
45
  wtlink
44
-
45
- # Query git state (for AI agents)
46
46
  wtstate --json
47
-
48
- # Configure settings with interactive wizard
49
47
  wtconfig init
50
48
  ```
51
49
 
52
50
  ## Commands
53
51
 
52
+ ### wt (Unified Command)
53
+
54
+ The `wt` command provides a single entry point for all git-worktree-tools functionality:
55
+
56
+ ```bash
57
+ wt <command> [options]
58
+ ```
59
+
60
+ | Command | Alias | Description |
61
+ | -------------------- | -------- | ----------------------------------- |
62
+ | `wt new <desc>` | `wt n` | Create a new PR with worktree |
63
+ | `wt list` | `wt ls` | List worktrees with PR status |
64
+ | `wt clean [pr]` | `wt c` | Clean up merged/closed PR worktrees |
65
+ | `wt link [cmd]` | `wt l` | Manage gitignored files via links |
66
+ | `wt state` | `wt s` | Query git worktree state |
67
+ | `wt config [cmd]` | `wt cfg` | Configuration management |
68
+ | `wt completion <sh>` | - | Generate shell completion scripts |
69
+
70
+ All subcommands accept the same options as their standalone equivalents. For example:
71
+
72
+ ```bash
73
+ wt new "Add feature" --draft # Same as: newpr "Add feature" --draft
74
+ wt list --json # Same as: lswt --json
75
+ wt clean --all # Same as: cleanpr --all
76
+ ```
77
+
54
78
  ### newpr
55
79
 
56
80
  Create a new PR with an associated worktree.
@@ -107,6 +131,15 @@ When running in a TTY terminal, `lswt` enters interactive mode where you can sel
107
131
  | `r` | Remove worktree (not available for main) |
108
132
  | `q` | Quit |
109
133
 
134
+ **Fuzzy search** — Press `/` to enter search mode and filter worktrees by:
135
+
136
+ - Branch name (`dark-mode`, `feat/auth`)
137
+ - PR number (`#42`, `42`)
138
+ - PR title (`Add dark mode`)
139
+ - PR state (`OPEN`, `MERGED`, `CLOSED`)
140
+
141
+ The search uses fuzzy matching, so typing `dm` will match `dark-mode`. Press `Enter` to confirm the filter, `Escape` to cancel, or `Backspace` to edit.
142
+
110
143
  Use `--no-interactive` to disable interactive mode, or pipe output to automatically switch to list mode.
111
144
 
112
145
  ### wtlink
@@ -550,6 +583,44 @@ cleanpr
550
583
  # → Deletes local branches
551
584
  ```
552
585
 
586
+ ## Shell Completion
587
+
588
+ Enable tab completion for `wt` commands in your shell:
589
+
590
+ ### Bash
591
+
592
+ ```bash
593
+ # Add to ~/.bashrc
594
+ wt completion bash >> ~/.bashrc
595
+ source ~/.bashrc
596
+ ```
597
+
598
+ ### Zsh
599
+
600
+ ```bash
601
+ # Create completion directory and add completion
602
+ mkdir -p ~/.zsh/completions
603
+ wt completion zsh > ~/.zsh/completions/_wt
604
+
605
+ # Add to ~/.zshrc (if not already present)
606
+ fpath=(~/.zsh/completions $fpath)
607
+ autoload -Uz compinit && compinit
608
+ ```
609
+
610
+ ### Fish
611
+
612
+ ```bash
613
+ wt completion fish > ~/.config/fish/completions/wt.fish
614
+ ```
615
+
616
+ After setup, you can tab-complete commands and options:
617
+
618
+ ```bash
619
+ wt <TAB> # Shows: new, list, clean, link, state, config, completion
620
+ wt new --<TAB> # Shows: --pr, --draft, --json, --non-interactive, --action
621
+ wt list --<TAB> # Shows: --verbose, --json, --no-status, --no-interactive
622
+ ```
623
+
553
624
  ## Development
554
625
 
555
626
  ```bash
@@ -12,7 +12,7 @@ import * as prompts from '../lib/prompts.js';
12
12
  import * as colors from '../lib/colors.js';
13
13
  import { loadConfig } from '../lib/config.js';
14
14
  import { parseArgs, getHelpText, gatherPrWorktreeInfo, createDefaultDeps, groupWorktreesByState, getCleanableWorktrees, findWorktreeByPrNumber, cleanWorktree, summarizeResults, } from '../lib/cleanpr/index.js';
15
- import { createSuccessResult, createErrorResult, formatJsonResult, ErrorCode, } from '../lib/json-output.js';
15
+ import { createSuccessResult, createErrorResult, formatJsonResult, ErrorCode, getErrorCodeFromError, getErrorSuggestion, } from '../lib/json-output.js';
16
16
  /**
17
17
  * Create cleanup dependencies using real git operations
18
18
  */
@@ -79,6 +79,7 @@ function outputJsonResult(results, worktrees, dryRun) {
79
79
  // Create a map for quick lookup
80
80
  const worktreeMap = new Map(worktrees.map((w) => [w.prNumber, w]));
81
81
  if (dryRun) {
82
+ const wouldCleanCount = results.filter((r) => r.success).length;
82
83
  const data = {
83
84
  wouldClean: results
84
85
  .filter((r) => r.success)
@@ -91,7 +92,10 @@ function outputJsonResult(results, worktrees, dryRun) {
91
92
  prState: w.prState,
92
93
  };
93
94
  }),
94
- totalWouldClean: results.filter((r) => r.success).length,
95
+ totalWouldClean: wouldCleanCount,
96
+ message: wouldCleanCount === 0
97
+ ? 'No PR worktrees would be cleaned.'
98
+ : `Would clean ${wouldCleanCount} PR worktree${wouldCleanCount === 1 ? '' : 's'}.`,
95
99
  };
96
100
  console.log(formatJsonResult(createSuccessResult('cleanpr', data)));
97
101
  }
@@ -114,6 +118,9 @@ function outputJsonResult(results, worktrees, dryRun) {
114
118
  skipped,
115
119
  totalCleaned: cleaned.length,
116
120
  totalSkipped: skipped.length,
121
+ message: cleaned.length === 0 && skipped.length === 0
122
+ ? 'No PR worktrees were cleaned.'
123
+ : `Cleaned ${cleaned.length} PR worktree${cleaned.length === 1 ? '' : 's'}${skipped.length > 0 ? `, skipped ${skipped.length}` : ''}.`,
117
124
  };
118
125
  console.log(formatJsonResult(createSuccessResult('cleanpr', data)));
119
126
  }
@@ -211,6 +218,12 @@ async function interactiveClean(worktrees, repoRoot, options) {
211
218
  const summary = summarizeResults(results);
212
219
  console.log('');
213
220
  console.log(colors.success(`Cleaned ${summary.cleaned} of ${summary.total} worktrees.`));
221
+ if (summary.cleaned > 0) {
222
+ console.log('');
223
+ console.log(colors.dim('Next steps:'));
224
+ console.log(colors.dim(' lswt # List remaining worktrees'));
225
+ console.log(colors.dim(' newpr "feature description" # Create a new PR'));
226
+ }
214
227
  }
215
228
  /**
216
229
  * Clean all merged/closed PRs automatically
@@ -224,11 +237,12 @@ async function cleanAll(worktrees, repoRoot, options) {
224
237
  skipped: [],
225
238
  totalCleaned: 0,
226
239
  totalSkipped: 0,
240
+ message: 'No merged or closed PR worktrees to clean.',
227
241
  };
228
242
  console.log(formatJsonResult(createSuccessResult('cleanpr', data)));
229
243
  }
230
244
  else {
231
- console.log(colors.info('No merged or closed PR worktrees found.'));
245
+ console.log(colors.info('No merged or closed PR worktrees to clean.'));
232
246
  }
233
247
  return;
234
248
  }
@@ -260,6 +274,12 @@ async function cleanAll(worktrees, repoRoot, options) {
260
274
  }
261
275
  else {
262
276
  console.log(colors.success(`Cleaned ${summary.cleaned} of ${summary.total} worktrees.`));
277
+ if (summary.cleaned > 0) {
278
+ console.log('');
279
+ console.log(colors.dim('Next steps:'));
280
+ console.log(colors.dim(' lswt # List remaining worktrees'));
281
+ console.log(colors.dim(' newpr "feature description" # Create a new PR'));
282
+ }
263
283
  }
264
284
  }
265
285
  }
@@ -301,6 +321,11 @@ async function cleanSpecific(prNumber, worktrees, repoRoot, config, options) {
301
321
  }
302
322
  else {
303
323
  console.log(colors.success(`PR #${prNumber} worktree cleaned up successfully.`));
324
+ console.log('');
325
+ console.log(colors.dim('Next steps:'));
326
+ console.log(colors.dim(' lswt # List remaining worktrees'));
327
+ console.log(colors.dim(' cleanpr --all # Clean all merged/closed PRs'));
328
+ console.log(colors.dim(' newpr "feature description" # Create a new PR'));
304
329
  }
305
330
  }
306
331
  else {
@@ -381,11 +406,17 @@ async function main() {
381
406
  main().catch((err) => {
382
407
  const useJson = hasJsonFlag(process.argv.slice(2));
383
408
  const message = err instanceof Error ? err.message : String(err);
409
+ const code = getErrorCodeFromError(err);
410
+ const suggestion = getErrorSuggestion(code);
384
411
  if (useJson) {
385
- outputJsonError(ErrorCode.UNKNOWN_ERROR, message);
412
+ outputJsonError(code, message);
386
413
  }
387
414
  else {
388
415
  console.error(colors.error(`Error: ${message}`));
416
+ if (suggestion) {
417
+ console.error('');
418
+ console.error(colors.dim(suggestion));
419
+ }
389
420
  }
390
421
  process.exit(1);
391
422
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cleanpr.js","sourceRoot":"","sources":["../../src/cli/cleanpr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleanpr.js","sourceRoot":"","sources":["../../src/cli/cleanpr.ts"],"names":[],"mappings":"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"}
@@ -168,6 +168,260 @@ describe('cli/cleanpr', () => {
168
168
  await runCli([]);
169
169
  expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('No PR worktrees'));
170
170
  });
171
+ it('displays grouped worktrees in interactive mode', async () => {
172
+ const mockWorktrees = [
173
+ makeWorktreeInfo({ prNumber: 1, prState: 'MERGED' }),
174
+ makeWorktreeInfo({ prNumber: 2, prState: 'CLOSED' }),
175
+ makeWorktreeInfo({ prNumber: 3, prState: 'OPEN' }),
176
+ ];
177
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
178
+ kind: 'success',
179
+ prNumber: null,
180
+ options: {
181
+ all: false,
182
+ force: false,
183
+ deleteRemote: false,
184
+ interactive: true,
185
+ json: false,
186
+ dryRun: false,
187
+ },
188
+ });
189
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
190
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
191
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
192
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
193
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
194
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
195
+ merged: [mockWorktrees[0]],
196
+ closed: [mockWorktrees[1]],
197
+ open: [mockWorktrees[2]],
198
+ unknown: [],
199
+ });
200
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue([]);
201
+ await runCli([]);
202
+ expect(cleanpr.groupWorktreesByState).toHaveBeenCalledWith(mockWorktrees);
203
+ expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('PR Worktrees'));
204
+ });
205
+ it('shows no cleanable message when only open PRs exist', async () => {
206
+ const mockWorktrees = [makeWorktreeInfo({ prNumber: 1, prState: 'OPEN' })];
207
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
208
+ kind: 'success',
209
+ prNumber: null,
210
+ options: {
211
+ all: false,
212
+ force: false,
213
+ deleteRemote: false,
214
+ interactive: true,
215
+ json: false,
216
+ dryRun: false,
217
+ },
218
+ });
219
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
220
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
221
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
222
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
223
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
224
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
225
+ merged: [],
226
+ closed: [],
227
+ open: mockWorktrees,
228
+ unknown: [],
229
+ });
230
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue([]);
231
+ await runCli([]);
232
+ expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('No merged or closed PRs'));
233
+ });
234
+ it('handles user cancel in interactive mode', async () => {
235
+ const mockWorktrees = [makeWorktreeInfo({ prNumber: 1, prState: 'MERGED' })];
236
+ const { promptChoice } = await import('../lib/prompts.js');
237
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
238
+ kind: 'success',
239
+ prNumber: null,
240
+ options: {
241
+ all: false,
242
+ force: false,
243
+ deleteRemote: false,
244
+ interactive: true,
245
+ json: false,
246
+ dryRun: false,
247
+ },
248
+ });
249
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
250
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
251
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
252
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
253
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
254
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
255
+ merged: mockWorktrees,
256
+ closed: [],
257
+ open: [],
258
+ unknown: [],
259
+ });
260
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue(mockWorktrees);
261
+ vi.mocked(promptChoice).mockResolvedValue('cancel');
262
+ await runCli([]);
263
+ expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('Cancelled'));
264
+ });
265
+ it('handles all option in interactive mode', async () => {
266
+ const mockWorktrees = [makeWorktreeInfo({ prNumber: 1, prState: 'MERGED' })];
267
+ const { promptChoice, promptConfirm } = await import('../lib/prompts.js');
268
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
269
+ kind: 'success',
270
+ prNumber: null,
271
+ options: {
272
+ all: false,
273
+ force: false,
274
+ deleteRemote: false,
275
+ interactive: true,
276
+ json: false,
277
+ dryRun: false,
278
+ },
279
+ });
280
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
281
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
282
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
283
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
284
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
285
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
286
+ merged: mockWorktrees,
287
+ closed: [],
288
+ open: [],
289
+ unknown: [],
290
+ });
291
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue(mockWorktrees);
292
+ vi.mocked(promptChoice).mockResolvedValue('all');
293
+ vi.mocked(promptConfirm).mockResolvedValue(false); // Don't delete remote
294
+ vi.mocked(cleanpr.cleanWorktree).mockReturnValue({
295
+ success: true,
296
+ message: 'Cleaned PR #1',
297
+ prNumber: 1,
298
+ localBranchDeleted: true,
299
+ remoteBranchDeleted: false,
300
+ });
301
+ vi.mocked(cleanpr.summarizeResults).mockReturnValue({ cleaned: 1, total: 1, failed: 0 });
302
+ await runCli([]);
303
+ expect(cleanpr.cleanWorktree).toHaveBeenCalled();
304
+ expect(cleanpr.summarizeResults).toHaveBeenCalled();
305
+ });
306
+ it('handles merged option in interactive mode', async () => {
307
+ const mockWorktrees = [
308
+ makeWorktreeInfo({ prNumber: 1, prState: 'MERGED' }),
309
+ makeWorktreeInfo({ prNumber: 2, prState: 'CLOSED' }),
310
+ ];
311
+ const { promptChoice, promptConfirm } = await import('../lib/prompts.js');
312
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
313
+ kind: 'success',
314
+ prNumber: null,
315
+ options: {
316
+ all: false,
317
+ force: false,
318
+ deleteRemote: false,
319
+ interactive: true,
320
+ json: false,
321
+ dryRun: false,
322
+ },
323
+ });
324
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
325
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
326
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
327
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
328
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
329
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
330
+ merged: [mockWorktrees[0]],
331
+ closed: [mockWorktrees[1]],
332
+ open: [],
333
+ unknown: [],
334
+ });
335
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue(mockWorktrees);
336
+ vi.mocked(promptChoice).mockResolvedValue('merged');
337
+ vi.mocked(promptConfirm).mockResolvedValue(false);
338
+ vi.mocked(cleanpr.cleanWorktree).mockReturnValue({
339
+ success: true,
340
+ message: 'Cleaned PR #1',
341
+ prNumber: 1,
342
+ localBranchDeleted: true,
343
+ remoteBranchDeleted: false,
344
+ });
345
+ vi.mocked(cleanpr.summarizeResults).mockReturnValue({ cleaned: 1, total: 1, failed: 0 });
346
+ await runCli([]);
347
+ // Should only clean merged (PR #1), not closed (PR #2)
348
+ expect(cleanpr.cleanWorktree).toHaveBeenCalledTimes(1);
349
+ });
350
+ it('handles select option in interactive mode', async () => {
351
+ const mockWorktrees = [makeWorktreeInfo({ prNumber: 1, prState: 'MERGED' })];
352
+ const { promptChoice, promptConfirm } = await import('../lib/prompts.js');
353
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
354
+ kind: 'success',
355
+ prNumber: null,
356
+ options: {
357
+ all: false,
358
+ force: false,
359
+ deleteRemote: false,
360
+ interactive: true,
361
+ json: false,
362
+ dryRun: false,
363
+ },
364
+ });
365
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
366
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
367
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
368
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
369
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
370
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
371
+ merged: mockWorktrees,
372
+ closed: [],
373
+ open: [],
374
+ unknown: [],
375
+ });
376
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue(mockWorktrees);
377
+ // First prompt: select action, Second: individual confirm, Third: remote deletion
378
+ vi.mocked(promptChoice).mockResolvedValue('select');
379
+ vi.mocked(promptConfirm)
380
+ .mockResolvedValueOnce(true) // Yes, clean this PR
381
+ .mockResolvedValueOnce(false); // No, don't delete remote
382
+ vi.mocked(cleanpr.cleanWorktree).mockReturnValue({
383
+ success: true,
384
+ message: 'Cleaned PR #1',
385
+ prNumber: 1,
386
+ localBranchDeleted: true,
387
+ remoteBranchDeleted: false,
388
+ });
389
+ vi.mocked(cleanpr.summarizeResults).mockReturnValue({ cleaned: 1, total: 1, failed: 0 });
390
+ await runCli([]);
391
+ expect(cleanpr.cleanWorktree).toHaveBeenCalled();
392
+ });
393
+ it('skips PR when user declines in select mode', async () => {
394
+ const mockWorktrees = [makeWorktreeInfo({ prNumber: 1, prState: 'MERGED' })];
395
+ const { promptChoice, promptConfirm } = await import('../lib/prompts.js');
396
+ vi.mocked(cleanpr.parseArgs).mockReturnValue({
397
+ kind: 'success',
398
+ prNumber: null,
399
+ options: {
400
+ all: false,
401
+ force: false,
402
+ deleteRemote: false,
403
+ interactive: true,
404
+ json: false,
405
+ dryRun: false,
406
+ },
407
+ });
408
+ vi.mocked(github.isGhInstalled).mockReturnValue(true);
409
+ vi.mocked(git.getRepoRoot).mockReturnValue('/repo');
410
+ vi.mocked(loadConfig).mockReturnValue(defaultConfig);
411
+ vi.mocked(cleanpr.createDefaultDeps).mockReturnValue({});
412
+ vi.mocked(cleanpr.gatherPrWorktreeInfo).mockResolvedValue(mockWorktrees);
413
+ vi.mocked(cleanpr.groupWorktreesByState).mockReturnValue({
414
+ merged: mockWorktrees,
415
+ closed: [],
416
+ open: [],
417
+ unknown: [],
418
+ });
419
+ vi.mocked(cleanpr.getCleanableWorktrees).mockReturnValue(mockWorktrees);
420
+ vi.mocked(promptChoice).mockResolvedValue('select');
421
+ vi.mocked(promptConfirm).mockResolvedValueOnce(false); // No, don't clean this PR
422
+ await runCli([]);
423
+ expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('Nothing to clean'));
424
+ });
171
425
  });
172
426
  describe('--all flag', () => {
173
427
  it('cleans all merged/closed worktrees in batch mode', async () => {