wt-manager 1.4.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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +343 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +26 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/clean.d.ts +3 -0
  8. package/dist/commands/clean.d.ts.map +1 -0
  9. package/dist/commands/clean.js +339 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/init.d.ts +3 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +12 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/list.d.ts +3 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +202 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/new.d.ts +3 -0
  20. package/dist/commands/new.d.ts.map +1 -0
  21. package/dist/commands/new.js +147 -0
  22. package/dist/commands/new.js.map +1 -0
  23. package/dist/commands/remove.d.ts +3 -0
  24. package/dist/commands/remove.d.ts.map +1 -0
  25. package/dist/commands/remove.js +192 -0
  26. package/dist/commands/remove.js.map +1 -0
  27. package/dist/commands/wt.d.ts +3 -0
  28. package/dist/commands/wt.d.ts.map +1 -0
  29. package/dist/commands/wt.js +78 -0
  30. package/dist/commands/wt.js.map +1 -0
  31. package/dist/commands/wtclean.d.ts +3 -0
  32. package/dist/commands/wtclean.d.ts.map +1 -0
  33. package/dist/commands/wtclean.js +190 -0
  34. package/dist/commands/wtclean.js.map +1 -0
  35. package/dist/commands/wtlist.d.ts +3 -0
  36. package/dist/commands/wtlist.d.ts.map +1 -0
  37. package/dist/commands/wtlist.js +202 -0
  38. package/dist/commands/wtlist.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +3 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/utils/clipboard.d.ts +2 -0
  44. package/dist/utils/clipboard.d.ts.map +1 -0
  45. package/dist/utils/clipboard.js +23 -0
  46. package/dist/utils/clipboard.js.map +1 -0
  47. package/dist/utils/git.d.ts +45 -0
  48. package/dist/utils/git.d.ts.map +1 -0
  49. package/dist/utils/git.js +202 -0
  50. package/dist/utils/git.js.map +1 -0
  51. package/dist/utils/github.d.ts +21 -0
  52. package/dist/utils/github.d.ts.map +1 -0
  53. package/dist/utils/github.js +113 -0
  54. package/dist/utils/github.js.map +1 -0
  55. package/package.json +61 -0
@@ -0,0 +1,339 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { checkbox } from '@inquirer/prompts';
5
+ import { basename, dirname, join } from 'node:path';
6
+ import { readdirSync, statSync, existsSync, readFileSync } from 'node:fs';
7
+ import { execa } from 'execa';
8
+ import { listWorktrees, getRepoName, getRemoteUrl, hasUncommittedChanges, removeWorktree, deleteBranch, getCurrentWorktreePath, isPathInWorktree, } from '../utils/git.js';
9
+ import { getPRStatus, parseGitHubRepo, isGhCliAvailable } from '../utils/github.js';
10
+ function countContents(dirPath) {
11
+ let fileCount = 0;
12
+ let folderCount = 0;
13
+ try {
14
+ const entries = readdirSync(dirPath);
15
+ for (const entry of entries) {
16
+ const fullPath = join(dirPath, entry);
17
+ const stat = statSync(fullPath);
18
+ if (stat.isDirectory()) {
19
+ folderCount++;
20
+ }
21
+ else {
22
+ fileCount++;
23
+ }
24
+ }
25
+ }
26
+ catch {
27
+ }
28
+ return { fileCount, folderCount };
29
+ }
30
+ function findAbandonedFolders(worktreesDir) {
31
+ const abandoned = [];
32
+ if (!existsSync(worktreesDir)) {
33
+ return abandoned;
34
+ }
35
+ try {
36
+ const entries = readdirSync(worktreesDir);
37
+ for (const entry of entries) {
38
+ const fullPath = join(worktreesDir, entry);
39
+ const stat = statSync(fullPath);
40
+ if (stat.isDirectory()) {
41
+ const gitPath = join(fullPath, '.git');
42
+ if (!existsSync(gitPath)) {
43
+ const { fileCount, folderCount } = countContents(fullPath);
44
+ abandoned.push({
45
+ path: fullPath,
46
+ dirname: entry,
47
+ fileCount,
48
+ folderCount,
49
+ });
50
+ }
51
+ }
52
+ }
53
+ }
54
+ catch {
55
+ }
56
+ return abandoned;
57
+ }
58
+ function findOrphanWorktrees(worktreesDir) {
59
+ const orphans = [];
60
+ if (!existsSync(worktreesDir)) {
61
+ return orphans;
62
+ }
63
+ try {
64
+ const entries = readdirSync(worktreesDir);
65
+ for (const entry of entries) {
66
+ const fullPath = join(worktreesDir, entry);
67
+ const stat = statSync(fullPath);
68
+ if (stat.isDirectory()) {
69
+ const gitPath = join(fullPath, '.git');
70
+ if (existsSync(gitPath)) {
71
+ const gitStat = statSync(gitPath);
72
+ if (gitStat.isFile()) {
73
+ try {
74
+ const content = readFileSync(gitPath, 'utf-8');
75
+ const match = content.match(/^gitdir:\s*(.+)$/m);
76
+ if (match) {
77
+ const gitdir = match[1].trim();
78
+ if (!existsSync(gitdir)) {
79
+ orphans.push({
80
+ path: fullPath,
81
+ dirname: entry,
82
+ brokenGitdir: gitdir,
83
+ });
84
+ }
85
+ }
86
+ }
87
+ catch {
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+ catch {
95
+ }
96
+ return orphans;
97
+ }
98
+ export function cleanCommand() {
99
+ const cmd = new Command('clean');
100
+ cmd
101
+ .description('Remove merged/closed worktrees')
102
+ .option('-d, --dry-run', 'Show what would be removed without actually removing')
103
+ .option('-f, --force', 'Skip confirmation prompt')
104
+ .action(async (options) => {
105
+ const spinner = ora();
106
+ try {
107
+ const ghStatus = await isGhCliAvailable();
108
+ if (!ghStatus.available) {
109
+ console.error(chalk.red("Error: 'gh' CLI is required for wt clean"));
110
+ console.log('Install it with: brew install gh');
111
+ process.exit(1);
112
+ }
113
+ if (!ghStatus.authenticated) {
114
+ console.error(chalk.red('Error: gh CLI is not authenticated'));
115
+ console.log('Authenticate with: gh auth login');
116
+ process.exit(1);
117
+ }
118
+ spinner.start('Scanning worktrees...');
119
+ const repoName = await getRepoName();
120
+ const worktrees = await listWorktrees();
121
+ let githubInfo = null;
122
+ try {
123
+ const remoteUrl = await getRemoteUrl();
124
+ githubInfo = parseGitHubRepo(remoteUrl);
125
+ if (!githubInfo) {
126
+ console.error(chalk.red('Error: Not a GitHub repository'));
127
+ process.exit(1);
128
+ }
129
+ }
130
+ catch {
131
+ console.error(chalk.red('Error: No remote repository configured'));
132
+ process.exit(1);
133
+ }
134
+ const mainWorktree = worktrees[0];
135
+ const worktreesDir = join(dirname(mainWorktree.path), `${repoName}-worktrees`);
136
+ const filteredWorktrees = worktrees.filter((wt) => wt.path.includes(worktreesDir));
137
+ if (filteredWorktrees.length === 0) {
138
+ spinner.stop();
139
+ console.log(chalk.yellow(`No worktrees found in ${worktreesDir}`));
140
+ return;
141
+ }
142
+ spinner.text = 'Checking PR status...';
143
+ const currentPath = await getCurrentWorktreePath();
144
+ const cleanable = [];
145
+ for (const wt of filteredWorktrees) {
146
+ if (!wt.branch)
147
+ continue;
148
+ if (isPathInWorktree(currentPath, wt.path)) {
149
+ continue;
150
+ }
151
+ try {
152
+ const pr = await getPRStatus(githubInfo.owner, githubInfo.repo, wt.branch);
153
+ if (!pr)
154
+ continue;
155
+ const prState = pr.state;
156
+ if (prState === 'merged' || prState === 'closed') {
157
+ const uncommitted = await hasUncommittedChanges(wt.path);
158
+ cleanable.push({
159
+ path: wt.path,
160
+ dirname: basename(wt.path),
161
+ branch: wt.branch,
162
+ prState,
163
+ hasUncommittedChanges: uncommitted,
164
+ });
165
+ }
166
+ }
167
+ catch {
168
+ continue;
169
+ }
170
+ }
171
+ const skipped = cleanable.filter((w) => w.hasUncommittedChanges);
172
+ const toRemove = cleanable.filter((w) => !w.hasUncommittedChanges);
173
+ spinner.text = 'Scanning for abandoned folders...';
174
+ const abandonedFolders = findAbandonedFolders(worktreesDir);
175
+ const orphanWorktrees = findOrphanWorktrees(worktreesDir);
176
+ spinner.stop();
177
+ if (cleanable.length === 0 && abandonedFolders.length === 0 && orphanWorktrees.length === 0) {
178
+ console.log(chalk.green('✓ No merged/closed worktrees, abandoned folders, or orphan worktrees found'));
179
+ return;
180
+ }
181
+ const choices = [];
182
+ for (const wt of toRemove) {
183
+ const stateLabel = wt.prState === 'merged' ? chalk.green('MERGED') : chalk.yellow('CLOSED');
184
+ choices.push({
185
+ name: `${wt.dirname} (${stateLabel})`,
186
+ value: { type: 'worktree', data: wt },
187
+ checked: false,
188
+ });
189
+ }
190
+ for (const folder of abandonedFolders) {
191
+ choices.push({
192
+ name: `${folder.dirname} ${chalk.gray('(abandoned)')}`,
193
+ value: { type: 'abandoned', data: folder },
194
+ checked: false,
195
+ });
196
+ }
197
+ for (const orphan of orphanWorktrees) {
198
+ choices.push({
199
+ name: `${orphan.dirname} ${chalk.hex('#FFA500')('(orphan)')}`,
200
+ value: { type: 'orphan', data: orphan },
201
+ checked: false,
202
+ });
203
+ }
204
+ if (skipped.length > 0) {
205
+ console.log(chalk.yellow('⚠ Skipped (uncommitted changes):'));
206
+ for (const wt of skipped) {
207
+ console.log(` ${wt.dirname} (${wt.branch})`);
208
+ }
209
+ console.log();
210
+ }
211
+ if (choices.length === 0) {
212
+ console.log(chalk.yellow('No worktrees can be removed (all have uncommitted changes)'));
213
+ return;
214
+ }
215
+ if (options.dryRun) {
216
+ console.log(chalk.bold('Would remove:'));
217
+ for (const choice of choices) {
218
+ console.log(` ${choice.name}`);
219
+ }
220
+ return;
221
+ }
222
+ let selectedItems;
223
+ if (options.force) {
224
+ selectedItems = choices.map(c => c.value);
225
+ }
226
+ else {
227
+ selectedItems = await checkbox({
228
+ message: 'Select worktrees to remove:',
229
+ choices,
230
+ });
231
+ }
232
+ if (selectedItems.length === 0) {
233
+ console.log(chalk.yellow('No worktrees selected'));
234
+ return;
235
+ }
236
+ console.log();
237
+ let removed = 0;
238
+ let failed = 0;
239
+ let abandonedRemoved = 0;
240
+ let abandonedFailed = 0;
241
+ let orphanRemoved = 0;
242
+ let orphanFailed = 0;
243
+ const removeSpinner = ora();
244
+ for (const item of selectedItems) {
245
+ if (item.type === 'worktree') {
246
+ const wt = item.data;
247
+ removeSpinner.start(`Removing ${wt.dirname}...`);
248
+ try {
249
+ await removeWorktree(wt.path, true);
250
+ try {
251
+ await deleteBranch(wt.branch, true);
252
+ removeSpinner.succeed(`Removed: ${wt.dirname} (branch deleted)`);
253
+ }
254
+ catch {
255
+ removeSpinner.succeed(`Removed: ${wt.dirname}` + chalk.yellow(` (branch kept)`));
256
+ }
257
+ removed++;
258
+ }
259
+ catch (error) {
260
+ removeSpinner.fail(`Failed to remove: ${wt.dirname}`);
261
+ if (error instanceof Error) {
262
+ console.log(chalk.red(` ${error.message}`));
263
+ }
264
+ failed++;
265
+ }
266
+ }
267
+ else if (item.type === 'abandoned') {
268
+ const folder = item.data;
269
+ removeSpinner.start(`Removing ${folder.dirname}...`);
270
+ try {
271
+ await execa('rm', ['-rf', folder.path]);
272
+ removeSpinner.succeed(`Removed: ${folder.dirname}`);
273
+ abandonedRemoved++;
274
+ }
275
+ catch (error) {
276
+ removeSpinner.fail(`Failed to remove: ${folder.dirname}`);
277
+ if (error instanceof Error) {
278
+ console.log(chalk.red(` ${error.message}`));
279
+ }
280
+ abandonedFailed++;
281
+ }
282
+ }
283
+ else {
284
+ const orphan = item.data;
285
+ removeSpinner.start(`Removing ${orphan.dirname}...`);
286
+ try {
287
+ await execa('rm', ['-rf', orphan.path]);
288
+ removeSpinner.succeed(`Removed: ${orphan.dirname}`);
289
+ orphanRemoved++;
290
+ }
291
+ catch (error) {
292
+ removeSpinner.fail(`Failed to remove: ${orphan.dirname}`);
293
+ if (error instanceof Error) {
294
+ console.log(chalk.red(` ${error.message}`));
295
+ }
296
+ orphanFailed++;
297
+ }
298
+ }
299
+ }
300
+ console.log('━'.repeat(60));
301
+ const foldersRemoved = abandonedRemoved + orphanRemoved;
302
+ const foldersFailed = abandonedFailed + orphanFailed;
303
+ const totalRemoved = removed + foldersRemoved;
304
+ if (removed > 0 && foldersRemoved > 0) {
305
+ console.log(chalk.green(`✓ Cleaned up ${removed} worktree(s) and ${foldersRemoved} folder(s)!`));
306
+ }
307
+ else if (removed > 0) {
308
+ console.log(chalk.green(`✓ Cleaned up ${removed} worktree(s)!`));
309
+ }
310
+ else if (foldersRemoved > 0) {
311
+ console.log(chalk.green(`✓ Cleaned up ${foldersRemoved} folder(s)!`));
312
+ }
313
+ if (failed > 0 && foldersFailed > 0) {
314
+ console.log(chalk.red(`✗ Failed to remove ${failed} worktree(s) and ${foldersFailed} folder(s)`));
315
+ }
316
+ else if (failed > 0) {
317
+ console.log(chalk.red(`✗ Failed to remove ${failed} worktree(s)`));
318
+ }
319
+ else if (foldersFailed > 0) {
320
+ console.log(chalk.red(`✗ Failed to remove ${foldersFailed} folder(s)`));
321
+ }
322
+ if (totalRemoved > 0) {
323
+ console.log("Run 'wt list' to see remaining worktrees.");
324
+ }
325
+ }
326
+ catch (error) {
327
+ spinner.stop();
328
+ if (error instanceof Error) {
329
+ console.error(chalk.red(`Error: ${error.message}`));
330
+ }
331
+ else {
332
+ console.error(chalk.red('An unknown error occurred'));
333
+ }
334
+ process.exit(1);
335
+ }
336
+ });
337
+ return cmd;
338
+ }
339
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function initCommand(): Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,wBAAgB,WAAW,YAM1B"}
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ const SHELL_FUNCTION = `wtl() {
3
+ wt new "$@" && cd "$(pbpaste)" && webstorm . && claude
4
+ }`;
5
+ export function initCommand() {
6
+ return new Command('init')
7
+ .description('Output shell function for ~/.zshrc')
8
+ .action(() => {
9
+ console.log(SHELL_FUNCTION);
10
+ });
11
+ }
12
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,cAAc,GAAG;;EAErB,CAAA;AAEF,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function listCommand(): Command;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkCnC,wBAAgB,WAAW,YA0P1B"}
@@ -0,0 +1,202 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { basename, dirname, join } from 'node:path';
5
+ import { listWorktrees, getRepoName, getDefaultBranch, getCreationTime, hasUncommittedChanges, getAheadBehind, isPathInWorktree, getRemoteUrl, } from '../utils/git.js';
6
+ import { getPRStatus, parseGitHubRepo, isGhCliAvailable } from '../utils/github.js';
7
+ export function listCommand() {
8
+ const cmd = new Command('list');
9
+ cmd
10
+ .description('List all worktrees with status')
11
+ .option('--json', 'Output in JSON format')
12
+ .action(async (options) => {
13
+ const spinner = options.json ? null : ora('Gathering worktree information...').start();
14
+ try {
15
+ const repoName = await getRepoName();
16
+ const worktrees = await listWorktrees();
17
+ if (worktrees.length === 0) {
18
+ spinner?.stop();
19
+ console.log(chalk.yellow('No worktrees found'));
20
+ return;
21
+ }
22
+ const mainWorktree = worktrees[0];
23
+ const worktreesDir = join(dirname(mainWorktree.path), `${repoName}-worktrees`);
24
+ const filteredWorktrees = worktrees.filter((wt) => wt.path.includes(worktreesDir));
25
+ if (filteredWorktrees.length === 0) {
26
+ spinner?.stop();
27
+ console.log(chalk.yellow(`No worktrees found in ${worktreesDir}`));
28
+ return;
29
+ }
30
+ let githubInfo = null;
31
+ let githubError = null;
32
+ try {
33
+ const remoteUrl = await getRemoteUrl();
34
+ githubInfo = parseGitHubRepo(remoteUrl);
35
+ if (!githubInfo) {
36
+ githubError = 'not-github';
37
+ }
38
+ }
39
+ catch {
40
+ githubError = 'no-remote';
41
+ }
42
+ if (githubInfo) {
43
+ const ghStatus = await isGhCliAvailable();
44
+ if (!ghStatus.available || !ghStatus.authenticated) {
45
+ githubError = 'gh-unavailable';
46
+ }
47
+ }
48
+ const currentPath = process.cwd();
49
+ const defaultBranch = await getDefaultBranch();
50
+ if (spinner) {
51
+ spinner.text = 'Fetching status for worktrees...';
52
+ }
53
+ const worktreeInfos = await Promise.all(filteredWorktrees.map(async (wt) => {
54
+ const creationTime = await getCreationTime(wt.path);
55
+ const uncommitted = await hasUncommittedChanges(wt.path);
56
+ const isInWorktree = isPathInWorktree(currentPath, wt.path);
57
+ let ahead = 0;
58
+ let behind = 0;
59
+ if (wt.branch) {
60
+ const aheadBehind = await getAheadBehind(wt.branch, defaultBranch);
61
+ ahead = aheadBehind.ahead;
62
+ behind = aheadBehind.behind;
63
+ }
64
+ let prStatus;
65
+ if (githubInfo && wt.branch && !githubError) {
66
+ try {
67
+ const pr = await getPRStatus(githubInfo.owner, githubInfo.repo, wt.branch);
68
+ if (pr) {
69
+ let state;
70
+ if (pr.isDraft) {
71
+ state = 'draft';
72
+ }
73
+ else {
74
+ state = pr.state;
75
+ }
76
+ prStatus = {
77
+ state,
78
+ url: pr.url,
79
+ checksStatus: pr.checksStatus,
80
+ };
81
+ }
82
+ else {
83
+ prStatus = { state: 'no-pr' };
84
+ }
85
+ }
86
+ catch {
87
+ prStatus = { state: 'no-pr' };
88
+ }
89
+ }
90
+ else {
91
+ prStatus = { state: 'no-pr' };
92
+ }
93
+ return {
94
+ path: wt.path,
95
+ dirname: basename(wt.path),
96
+ branch: wt.branch || 'no-branch',
97
+ creationTime,
98
+ isCurrentWorktree: isInWorktree,
99
+ hasUncommittedChanges: uncommitted,
100
+ ahead,
101
+ behind,
102
+ prStatus,
103
+ };
104
+ }));
105
+ spinner?.stop();
106
+ worktreeInfos.sort((a, b) => a.creationTime - b.creationTime);
107
+ if (options.json) {
108
+ console.log(JSON.stringify(worktreeInfos, null, 2));
109
+ return;
110
+ }
111
+ console.log(chalk.bold(`Worktrees for ${repoName}:`));
112
+ console.log('━'.repeat(60));
113
+ console.log();
114
+ for (const info of worktreeInfos) {
115
+ let statusColor = chalk.gray;
116
+ if (info.prStatus?.state === 'open') {
117
+ statusColor = chalk.green;
118
+ }
119
+ else if (info.prStatus?.state === 'merged' || info.prStatus?.state === 'closed') {
120
+ statusColor = chalk.magenta;
121
+ }
122
+ let statusLine = `${statusColor(info.dirname.padEnd(40))} ${statusColor(info.prStatus?.state || 'no-pr')}`;
123
+ if (info.branch !== 'no-branch') {
124
+ statusLine += ` ${chalk.gray(`(↑${info.ahead} ↓${info.behind})`)}`;
125
+ }
126
+ if (info.hasUncommittedChanges) {
127
+ statusLine += ` ${chalk.yellow('(uncommitted changes)')}`;
128
+ }
129
+ if (info.behind > 10) {
130
+ statusLine += ` ${chalk.yellow('⚠️ outdated')}`;
131
+ }
132
+ if (info.prStatus?.checksStatus === 'failure') {
133
+ statusLine += ` ${chalk.red('❌ checks failing')}`;
134
+ }
135
+ if (info.isCurrentWorktree) {
136
+ statusLine += ` ${chalk.cyan('← you are here')}`;
137
+ }
138
+ console.log(statusLine);
139
+ console.log(` ${chalk.gray('Branch:')} ${info.branch}`);
140
+ if (info.prStatus?.url) {
141
+ console.log(` ${chalk.gray('PR:')} ${info.prStatus.url}`);
142
+ }
143
+ console.log();
144
+ }
145
+ console.log('━'.repeat(60));
146
+ const counts = {
147
+ total: worktreeInfos.length,
148
+ open: worktreeInfos.filter((w) => w.prStatus?.state === 'open').length,
149
+ draft: worktreeInfos.filter((w) => w.prStatus?.state === 'draft').length,
150
+ merged: worktreeInfos.filter((w) => w.prStatus?.state === 'merged').length,
151
+ closed: worktreeInfos.filter((w) => w.prStatus?.state === 'closed').length,
152
+ noPr: worktreeInfos.filter((w) => w.prStatus?.state === 'no-pr').length,
153
+ };
154
+ const parts = [];
155
+ if (counts.open > 0)
156
+ parts.push(`${counts.open} open`);
157
+ if (counts.draft > 0)
158
+ parts.push(`${counts.draft} draft`);
159
+ if (counts.merged > 0)
160
+ parts.push(`${counts.merged} merged`);
161
+ if (counts.closed > 0)
162
+ parts.push(`${counts.closed} closed`);
163
+ if (counts.noPr > 0)
164
+ parts.push(`${counts.noPr} no-pr`);
165
+ let summary = `Summary: ${counts.total} worktrees`;
166
+ if (parts.length > 0) {
167
+ summary += ` (${parts.join(', ')})`;
168
+ }
169
+ console.log(summary);
170
+ const cleanable = counts.merged + counts.closed;
171
+ if (cleanable > 0) {
172
+ console.log(chalk.blue(`💡 Run 'wt clean' to remove ${cleanable} merged/closed worktree(s)`));
173
+ }
174
+ if (githubError) {
175
+ if (githubError === 'not-github') {
176
+ console.log(chalk.blue('💡 Not a GitHub repository - PR status unavailable'));
177
+ }
178
+ else if (githubError === 'gh-unavailable') {
179
+ const ghStatus = await isGhCliAvailable();
180
+ if (!ghStatus.available) {
181
+ console.log(chalk.blue('💡 Install gh CLI for PR status: brew install gh'));
182
+ }
183
+ else if (!ghStatus.authenticated) {
184
+ console.log(chalk.blue('💡 Authenticate gh CLI for PR status: gh auth login'));
185
+ }
186
+ }
187
+ }
188
+ }
189
+ catch (error) {
190
+ spinner?.stop();
191
+ if (error instanceof Error) {
192
+ console.error(chalk.red(`Error: ${error.message}`));
193
+ }
194
+ else {
195
+ console.error(chalk.red('An unknown error occurred'));
196
+ }
197
+ process.exit(1);
198
+ }
199
+ });
200
+ return cmd;
201
+ }
202
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function newCommand(): Command;
3
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiBnC,wBAAgB,UAAU,YAiLzB"}