dmux 5.6.1 → 5.6.2

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 (58) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +38 -13
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/components/popups/projectSelectPopup.d.ts +6 -0
  5. package/dist/components/popups/projectSelectPopup.d.ts.map +1 -1
  6. package/dist/components/popups/projectSelectPopup.js +23 -4
  7. package/dist/components/popups/projectSelectPopup.js.map +1 -1
  8. package/dist/components/popups/reopenWorktreePopup.d.ts +26 -8
  9. package/dist/components/popups/reopenWorktreePopup.d.ts.map +1 -1
  10. package/dist/components/popups/reopenWorktreePopup.js +280 -50
  11. package/dist/components/popups/reopenWorktreePopup.js.map +1 -1
  12. package/dist/hooks/useInputHandling.d.ts +4 -1
  13. package/dist/hooks/useInputHandling.d.ts.map +1 -1
  14. package/dist/hooks/useInputHandling.js +65 -16
  15. package/dist/hooks/useInputHandling.js.map +1 -1
  16. package/dist/hooks/useNavigation.d.ts.map +1 -1
  17. package/dist/hooks/useNavigation.js +7 -8
  18. package/dist/hooks/useNavigation.js.map +1 -1
  19. package/dist/services/PaneAnalyzer.d.ts +1 -1
  20. package/dist/services/PaneAnalyzer.d.ts.map +1 -1
  21. package/dist/services/PaneAnalyzer.js +5 -2
  22. package/dist/services/PaneAnalyzer.js.map +1 -1
  23. package/dist/services/PopupManager.d.ts +11 -8
  24. package/dist/services/PopupManager.d.ts.map +1 -1
  25. package/dist/services/PopupManager.js +42 -6
  26. package/dist/services/PopupManager.js.map +1 -1
  27. package/dist/services/StatusDetector.d.ts.map +1 -1
  28. package/dist/services/StatusDetector.js +1 -1
  29. package/dist/services/StatusDetector.js.map +1 -1
  30. package/dist/services/WorktreeCleanupService.d.ts +2 -0
  31. package/dist/services/WorktreeCleanupService.d.ts.map +1 -1
  32. package/dist/services/WorktreeCleanupService.js +68 -6
  33. package/dist/services/WorktreeCleanupService.js.map +1 -1
  34. package/dist/utils/generated-agents-doc.d.ts +1 -1
  35. package/dist/utils/generated-agents-doc.js +1 -1
  36. package/dist/utils/paneAttentionHeuristics.d.ts +1 -0
  37. package/dist/utils/paneAttentionHeuristics.d.ts.map +1 -1
  38. package/dist/utils/paneAttentionHeuristics.js +89 -9
  39. package/dist/utils/paneAttentionHeuristics.js.map +1 -1
  40. package/dist/utils/paneCreation.d.ts +5 -0
  41. package/dist/utils/paneCreation.d.ts.map +1 -1
  42. package/dist/utils/paneCreation.js +88 -71
  43. package/dist/utils/paneCreation.js.map +1 -1
  44. package/dist/utils/projectRoot.d.ts +8 -0
  45. package/dist/utils/projectRoot.d.ts.map +1 -1
  46. package/dist/utils/projectRoot.js +73 -6
  47. package/dist/utils/projectRoot.js.map +1 -1
  48. package/dist/utils/reopenWorktree.d.ts +2 -0
  49. package/dist/utils/reopenWorktree.d.ts.map +1 -1
  50. package/dist/utils/reopenWorktree.js +5 -4
  51. package/dist/utils/reopenWorktree.js.map +1 -1
  52. package/dist/utils/resumeBranches.d.ts +29 -0
  53. package/dist/utils/resumeBranches.d.ts.map +1 -0
  54. package/dist/utils/resumeBranches.js +640 -0
  55. package/dist/utils/resumeBranches.js.map +1 -0
  56. package/dist/workers/PaneWorker.js +30 -17
  57. package/dist/workers/PaneWorker.js.map +1 -1
  58. package/package.json +1 -1
@@ -1,19 +1,66 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Popup for reopening closed worktrees
4
- * Shows a list of orphaned worktrees that can be reopened
3
+ * Popup for resuming local or remote branches.
5
4
  */
6
- import React, { useState } from 'react';
5
+ import React, { useEffect, useMemo, useState } from 'react';
7
6
  import { render, Box, Text, useInput, useApp } from 'ink';
8
7
  import * as fs from 'fs';
9
8
  import { pathToFileURL } from 'url';
10
9
  import { PopupContainer, PopupWrapper, writeSuccessAndExit } from './shared/index.js';
11
- import { PopupFooters, POPUP_CONFIG } from './config.js';
10
+ import { POPUP_CONFIG } from './config.js';
11
+ import { getResumableBranches } from '../../utils/resumeBranches.js';
12
12
  const MAX_VISIBLE_WORKTREES = 8;
13
+ const CONTENT_BOX_WIDTH = 72;
14
+ const CONTENT_INNER_WIDTH = CONTENT_BOX_WIDTH - 4;
15
+ const BRANCH_COLUMN_WIDTH = 34;
16
+ const LAST_WORKED_COLUMN_WIDTH = 16;
17
+ const SOURCE_FILTERS = [
18
+ { key: 'worktrees', label: 'Worktrees' },
19
+ { key: 'local', label: 'Local' },
20
+ { key: 'remote', label: 'Remote' },
21
+ ];
22
+ function toPopupBranch(worktree) {
23
+ return {
24
+ branchName: worktree.branchName,
25
+ slug: worktree.slug,
26
+ path: worktree.path,
27
+ lastModified: worktree.lastModified?.toISOString(),
28
+ hasUncommittedChanges: worktree.hasUncommittedChanges,
29
+ hasWorktree: worktree.hasWorktree,
30
+ hasLocalBranch: worktree.hasLocalBranch,
31
+ hasRemoteBranch: worktree.hasRemoteBranch,
32
+ isRemote: worktree.isRemote,
33
+ };
34
+ }
35
+ function loadRemoteResumableBranches(projectRoot, activePaneSlugs) {
36
+ return getResumableBranches(projectRoot, activePaneSlugs, {
37
+ includeRemoteBranches: true,
38
+ }).map((candidate) => toPopupBranch(candidate));
39
+ }
40
+ function isFilterTypingInput(input, key) {
41
+ if (!input) {
42
+ return false;
43
+ }
44
+ if (key.ctrl || key.meta || key.return || key.tab || key.escape) {
45
+ return false;
46
+ }
47
+ if (key.upArrow
48
+ || key.downArrow
49
+ || key.leftArrow
50
+ || key.rightArrow
51
+ || key.pageUp
52
+ || key.pageDown) {
53
+ return false;
54
+ }
55
+ return true;
56
+ }
13
57
  /**
14
58
  * Format relative time (e.g., "2 hours ago", "3 days ago")
15
59
  */
16
60
  function formatRelativeTime(dateStr) {
61
+ if (!dateStr) {
62
+ return '--';
63
+ }
17
64
  const date = new Date(dateStr);
18
65
  const now = new Date();
19
66
  const diffMs = now.getTime() - date.getTime();
@@ -52,78 +99,255 @@ function getVisibleWindow(totalItems, selectedIndex, maxVisible) {
52
99
  }
53
100
  function getWorktreeDetails(worktree) {
54
101
  const details = [];
55
- if (worktree.branch !== worktree.slug) {
56
- details.push(`branch:${worktree.branch}`);
102
+ if (worktree.hasRemoteBranch) {
103
+ details.push('remote');
57
104
  }
58
105
  if (worktree.hasUncommittedChanges) {
59
106
  details.push('dirty');
60
107
  }
61
108
  return details.join(' ');
62
109
  }
63
- export const ReopenWorktreePopupApp = ({ resultFile, projectName, worktrees, }) => {
110
+ export const ReopenWorktreePopupApp = ({ resultFile, projectName, worktrees, initialState, projectRoot, activePaneSlugs = [], loadRemoteBranches = loadRemoteResumableBranches, }) => {
111
+ const [availableWorktrees, setAvailableWorktrees] = useState(worktrees);
64
112
  const [selectedIndex, setSelectedIndex] = useState(0);
113
+ const [filterQuery, setFilterQuery] = useState(initialState.filterQuery);
114
+ const [includeWorktrees, setIncludeWorktrees] = useState(initialState.includeWorktrees);
115
+ const [includeLocalBranches, setIncludeLocalBranches] = useState(initialState.includeLocalBranches);
116
+ const [includeRemoteBranches, setIncludeRemoteBranches] = useState(initialState.includeRemoteBranches);
117
+ const [remoteLoaded, setRemoteLoaded] = useState(initialState.remoteLoaded);
118
+ const [isLoadingRemote, setIsLoadingRemote] = useState(false);
119
+ const [remoteLoadError, setRemoteLoadError] = useState(null);
120
+ const [focusedSourceIndex, setFocusedSourceIndex] = useState(0);
121
+ const [focusArea, setFocusArea] = useState('list');
65
122
  const { exit } = useApp();
123
+ useEffect(() => {
124
+ setAvailableWorktrees(worktrees);
125
+ }, [worktrees]);
126
+ useEffect(() => {
127
+ if (!includeRemoteBranches || remoteLoaded || !projectRoot) {
128
+ return;
129
+ }
130
+ let cancelled = false;
131
+ setIsLoadingRemote(true);
132
+ setRemoteLoadError(null);
133
+ const timer = setTimeout(() => {
134
+ try {
135
+ const remoteBranches = loadRemoteBranches(projectRoot, activePaneSlugs);
136
+ if (cancelled) {
137
+ return;
138
+ }
139
+ setAvailableWorktrees(remoteBranches);
140
+ setRemoteLoaded(true);
141
+ }
142
+ catch (error) {
143
+ if (cancelled) {
144
+ return;
145
+ }
146
+ setRemoteLoadError(error instanceof Error ? error.message : String(error));
147
+ }
148
+ finally {
149
+ if (!cancelled) {
150
+ setIsLoadingRemote(false);
151
+ }
152
+ }
153
+ }, 0);
154
+ return () => {
155
+ cancelled = true;
156
+ clearTimeout(timer);
157
+ };
158
+ }, [
159
+ activePaneSlugs,
160
+ includeRemoteBranches,
161
+ loadRemoteBranches,
162
+ projectRoot,
163
+ remoteLoaded,
164
+ ]);
165
+ const sourceFilteredWorktrees = useMemo(() => (availableWorktrees.filter((worktree) => ((includeWorktrees && worktree.hasWorktree)
166
+ || (includeLocalBranches && worktree.hasLocalBranch)
167
+ || (includeRemoteBranches && worktree.hasRemoteBranch)))), [availableWorktrees, includeLocalBranches, includeRemoteBranches, includeWorktrees]);
168
+ const filteredWorktrees = useMemo(() => {
169
+ const normalizedQuery = filterQuery.trim().toLowerCase();
170
+ if (!normalizedQuery) {
171
+ return sourceFilteredWorktrees;
172
+ }
173
+ return sourceFilteredWorktrees.filter((worktree) => {
174
+ const branchName = worktree.branchName.toLowerCase();
175
+ const slug = worktree.slug?.toLowerCase() || '';
176
+ return branchName.includes(normalizedQuery) || slug.includes(normalizedQuery);
177
+ });
178
+ }, [filterQuery, sourceFilteredWorktrees]);
179
+ useEffect(() => {
180
+ setSelectedIndex((current) => Math.min(current, Math.max(0, filteredWorktrees.length - 1)));
181
+ }, [filteredWorktrees.length]);
182
+ const toggleSourceFilter = (sourceKey) => {
183
+ if (sourceKey === 'worktrees') {
184
+ setIncludeWorktrees((current) => !current);
185
+ setSelectedIndex(0);
186
+ return;
187
+ }
188
+ if (sourceKey === 'local') {
189
+ setIncludeLocalBranches((current) => !current);
190
+ setSelectedIndex(0);
191
+ return;
192
+ }
193
+ setIncludeRemoteBranches((current) => !current);
194
+ setSelectedIndex(0);
195
+ };
66
196
  useInput((input, key) => {
67
- if (key.upArrow) {
68
- setSelectedIndex(Math.max(0, selectedIndex - 1));
197
+ if (key.tab) {
198
+ setFocusArea((current) => current === 'list' ? 'sources' : 'list');
199
+ return;
200
+ }
201
+ if (focusArea === 'sources') {
202
+ if (key.leftArrow) {
203
+ setFocusedSourceIndex((current) => Math.max(0, current - 1));
204
+ }
205
+ else if (key.rightArrow) {
206
+ setFocusedSourceIndex((current) => Math.min(SOURCE_FILTERS.length - 1, current + 1));
207
+ }
208
+ else if (key.downArrow) {
209
+ setFocusArea('list');
210
+ }
211
+ else if (input === '1') {
212
+ setFocusedSourceIndex(0);
213
+ toggleSourceFilter('worktrees');
214
+ }
215
+ else if (input === '2') {
216
+ setFocusedSourceIndex(1);
217
+ toggleSourceFilter('local');
218
+ }
219
+ else if (input === '3') {
220
+ setFocusedSourceIndex(2);
221
+ toggleSourceFilter('remote');
222
+ }
223
+ else if (input === ' ' || key.return) {
224
+ toggleSourceFilter(SOURCE_FILTERS[focusedSourceIndex]?.key ?? 'worktrees');
225
+ }
226
+ return;
227
+ }
228
+ if (key.backspace || key.delete) {
229
+ setFilterQuery((current) => current.slice(0, -1));
230
+ setSelectedIndex(0);
231
+ }
232
+ else if (isFilterTypingInput(input, key)) {
233
+ setFilterQuery((current) => `${current}${input}`);
234
+ setSelectedIndex(0);
235
+ }
236
+ else if (key.leftArrow || (key.upArrow && selectedIndex === 0)) {
237
+ setFocusArea('sources');
238
+ }
239
+ else if (key.upArrow) {
240
+ setSelectedIndex((current) => Math.max(0, current - 1));
69
241
  }
70
242
  else if (key.downArrow) {
71
- setSelectedIndex(Math.min(worktrees.length - 1, selectedIndex + 1));
243
+ setSelectedIndex((current) => (filteredWorktrees.length === 0
244
+ ? 0
245
+ : Math.min(filteredWorktrees.length - 1, current + 1)));
72
246
  }
73
- else if (key.return && worktrees.length > 0) {
74
- // User selected a worktree to reopen
75
- const selected = worktrees[selectedIndex];
76
- writeSuccessAndExit(resultFile, { slug: selected.slug, path: selected.path }, exit);
247
+ else if (key.return && filteredWorktrees.length > 0 && !isLoadingRemote) {
248
+ const selected = filteredWorktrees[selectedIndex];
249
+ writeSuccessAndExit(resultFile, {
250
+ action: 'select',
251
+ candidate: selected,
252
+ }, exit);
77
253
  }
78
254
  });
79
- if (worktrees.length === 0) {
80
- return (React.createElement(PopupWrapper, { resultFile: resultFile },
81
- React.createElement(PopupContainer, { footer: "Press ESC to close" },
82
- React.createElement(Box, { flexDirection: "column" },
83
- React.createElement(Text, null,
84
- "No closed worktrees found",
85
- projectName ? ` in ${projectName}` : '',
86
- "."),
87
- React.createElement(Text, { dimColor: true }, "All worktrees have active panes.")))));
88
- }
89
- const totalWorktrees = worktrees.length;
90
- const { startIndex, endIndex } = getVisibleWindow(totalWorktrees, selectedIndex, MAX_VISIBLE_WORKTREES);
91
- const visibleWorktrees = worktrees.slice(startIndex, endIndex);
92
- const emptyRows = Math.max(0, MAX_VISIBLE_WORKTREES - visibleWorktrees.length);
255
+ const totalWorktrees = availableWorktrees.length;
256
+ const totalSourceFilteredWorktrees = sourceFilteredWorktrees.length;
257
+ const totalFilteredWorktrees = filteredWorktrees.length;
258
+ const showEmptyState = totalFilteredWorktrees === 0;
259
+ const { startIndex, endIndex } = getVisibleWindow(totalFilteredWorktrees, selectedIndex, MAX_VISIBLE_WORKTREES);
260
+ const visibleWorktrees = filteredWorktrees.slice(startIndex, endIndex);
261
+ const renderedRowCount = showEmptyState ? 1 : visibleWorktrees.length;
262
+ const emptyRows = Math.max(0, MAX_VISIBLE_WORKTREES - renderedRowCount);
93
263
  const moreAbove = startIndex > 0;
94
- const moreBelow = endIndex < totalWorktrees;
264
+ const moreBelow = endIndex < totalFilteredWorktrees;
265
+ const filterActive = filterQuery.trim().length > 0;
266
+ const filterDisplay = filterQuery || 'Search branches';
267
+ const filterCursor = focusArea === 'list' ? '|' : '';
268
+ const searchFocused = focusArea === 'list';
269
+ const footer = focusArea === 'sources'
270
+ ? '←→ move • Space toggle • ↓ back • 1/2/3 quick toggle • ESC cancel'
271
+ : 'Type filter • ↑↓ navigate • ↑/← filters • Enter resume • ESC cancel';
272
+ const filterMessage = isLoadingRemote
273
+ ? 'Loading remote branches...'
274
+ : remoteLoadError
275
+ ? `Remote scan failed: ${remoteLoadError}`
276
+ : filterActive
277
+ ? `No matches for "${filterQuery}"`
278
+ : totalSourceFilteredWorktrees === 0 && !remoteLoaded && !includeRemoteBranches
279
+ ? 'No local branches or worktrees. Enable remote to scan remotes.'
280
+ : 'No branches match the selected sources.';
281
+ const remoteLabel = isLoadingRemote ? 'Remote…' : 'Remote';
282
+ const remoteLabelColor = remoteLoadError
283
+ ? POPUP_CONFIG.errorColor
284
+ : isLoadingRemote
285
+ ? POPUP_CONFIG.titleColor
286
+ : undefined;
95
287
  return (React.createElement(PopupWrapper, { resultFile: resultFile },
96
- React.createElement(PopupContainer, { footer: PopupFooters.choice() },
97
- React.createElement(Text, null, "Please select a previously closed worktree to reopen."),
98
- React.createElement(Box, { flexDirection: "column", borderStyle: POPUP_CONFIG.inputBorderStyle, borderColor: POPUP_CONFIG.borderColor, paddingX: 1, marginTop: 1, width: "100%" },
99
- React.createElement(Box, null,
100
- React.createElement(Box, { width: 34, paddingRight: 1 },
101
- React.createElement(Text, { dimColor: true }, "Worktree")),
102
- React.createElement(Box, { width: 16, paddingRight: 1 },
288
+ React.createElement(PopupContainer, { footer: footer },
289
+ React.createElement(Box, { borderStyle: POPUP_CONFIG.inputBorderStyle, borderColor: searchFocused ? POPUP_CONFIG.inputBorderColor : POPUP_CONFIG.borderColor, paddingX: 1, marginTop: 1, width: CONTENT_BOX_WIDTH, flexDirection: "column" },
290
+ React.createElement(Box, { width: CONTENT_INNER_WIDTH },
291
+ React.createElement(Text, { bold: true, color: searchFocused ? POPUP_CONFIG.inputBorderColor : POPUP_CONFIG.borderColor },
292
+ "\uF002",
293
+ ' '),
294
+ React.createElement(Text, { color: searchFocused ? 'white' : undefined, dimColor: !filterQuery, wrap: "truncate-end" }, `${filterDisplay}${filterCursor}`))),
295
+ React.createElement(Box, { borderStyle: POPUP_CONFIG.inputBorderStyle, borderColor: focusArea === 'sources' ? POPUP_CONFIG.inputBorderColor : POPUP_CONFIG.borderColor, paddingX: 1, marginTop: 1, width: CONTENT_BOX_WIDTH, flexDirection: "column" },
296
+ React.createElement(Box, { width: CONTENT_INNER_WIDTH }, SOURCE_FILTERS.map((source, index) => {
297
+ const isFocused = focusArea === 'sources' && focusedSourceIndex === index;
298
+ const isEnabled = source.key === 'worktrees'
299
+ ? includeWorktrees
300
+ : source.key === 'local'
301
+ ? includeLocalBranches
302
+ : includeRemoteBranches;
303
+ const marker = isEnabled ? '◉' : '◎';
304
+ const label = source.key === 'remote' ? remoteLabel : source.label;
305
+ const color = source.key === 'remote' && remoteLabelColor
306
+ ? remoteLabelColor
307
+ : isFocused
308
+ ? POPUP_CONFIG.titleColor
309
+ : 'white';
310
+ return (React.createElement(Box, { key: source.key, marginRight: 2 },
311
+ React.createElement(Text, { color: isEnabled ? POPUP_CONFIG.successColor : POPUP_CONFIG.dimColor, bold: isEnabled }, marker),
312
+ React.createElement(Text, { color: color, bold: isFocused },
313
+ ' ',
314
+ label)));
315
+ }))),
316
+ React.createElement(Box, { flexDirection: "column", borderStyle: POPUP_CONFIG.inputBorderStyle, borderColor: POPUP_CONFIG.borderColor, paddingX: 1, marginTop: 1, width: CONTENT_BOX_WIDTH },
317
+ React.createElement(Box, { width: CONTENT_INNER_WIDTH },
318
+ React.createElement(Box, { width: BRANCH_COLUMN_WIDTH, paddingRight: 1 },
319
+ React.createElement(Text, { dimColor: true }, "Branch")),
320
+ React.createElement(Box, { width: LAST_WORKED_COLUMN_WIDTH, paddingRight: 1 },
103
321
  React.createElement(Text, { dimColor: true }, "Last worked")),
104
- React.createElement(Text, { dimColor: true }, "Status")),
105
- visibleWorktrees.map((worktree, idx) => {
322
+ React.createElement(Box, { flexGrow: 1 },
323
+ React.createElement(Text, { dimColor: true }, "Status"))),
324
+ showEmptyState ? (React.createElement(Box, { width: CONTENT_INNER_WIDTH },
325
+ React.createElement(Text, { dimColor: true, wrap: "truncate-end" }, filterMessage))) : (visibleWorktrees.map((worktree, idx) => {
106
326
  const index = startIndex + idx;
107
327
  const isSelected = index === selectedIndex;
108
328
  const details = getWorktreeDetails(worktree);
109
- return (React.createElement(Box, { key: worktree.slug },
110
- React.createElement(Box, { width: 34, paddingRight: 1 },
329
+ return (React.createElement(Box, { key: worktree.branchName, width: CONTENT_INNER_WIDTH },
330
+ React.createElement(Box, { width: BRANCH_COLUMN_WIDTH, paddingRight: 1 },
111
331
  React.createElement(Text, { color: isSelected ? POPUP_CONFIG.titleColor : 'white', bold: isSelected, wrap: "truncate-end" },
112
332
  isSelected ? '▶ ' : ' ',
113
- worktree.slug)),
114
- React.createElement(Box, { width: 16, paddingRight: 1 },
333
+ worktree.branchName)),
334
+ React.createElement(Box, { width: LAST_WORKED_COLUMN_WIDTH, paddingRight: 1 },
115
335
  React.createElement(Text, { color: isSelected ? POPUP_CONFIG.titleColor : undefined, dimColor: !isSelected, wrap: "truncate-end" }, formatRelativeTime(worktree.lastModified))),
116
- React.createElement(Text, { color: worktree.hasUncommittedChanges ? 'yellow' : undefined, dimColor: !worktree.hasUncommittedChanges, wrap: "truncate-end" }, details || ' ')));
117
- }),
118
- Array.from({ length: emptyRows }).map((_, index) => (React.createElement(Box, { key: `empty-${index}` },
336
+ React.createElement(Box, { flexGrow: 1 },
337
+ React.createElement(Text, { color: worktree.hasUncommittedChanges ? 'yellow' : undefined, dimColor: !worktree.hasUncommittedChanges, wrap: "truncate-end" }, details || ' '))));
338
+ })),
339
+ Array.from({ length: emptyRows }).map((_, index) => (React.createElement(Box, { key: `empty-${index}`, width: CONTENT_INNER_WIDTH },
119
340
  React.createElement(Text, null, " ")))),
120
- React.createElement(Box, null,
341
+ React.createElement(Box, { width: CONTENT_INNER_WIDTH },
121
342
  React.createElement(Text, { dimColor: true },
343
+ totalFilteredWorktrees,
344
+ " of ",
122
345
  totalWorktrees,
123
- " reopenable worktree",
124
- totalWorktrees === 1 ? '' : 's',
346
+ " resumable branch",
347
+ totalWorktrees === 1 ? '' : 'es',
125
348
  moreAbove ? ` • ${startIndex} above` : '',
126
- moreBelow ? ` • ${totalWorktrees - endIndex} below` : ''))))));
349
+ moreBelow ? ` • ${totalFilteredWorktrees - endIndex} below` : '',
350
+ filterActive ? ' • filtered' : ''))))));
127
351
  };
128
352
  // Entry point
129
353
  function main() {
@@ -142,7 +366,13 @@ function main() {
142
366
  console.error('Error: Failed to read or parse data file');
143
367
  process.exit(1);
144
368
  }
145
- render(React.createElement(ReopenWorktreePopupApp, { resultFile: resultFile, projectName: data.projectName, worktrees: data.worktrees }));
369
+ render(React.createElement(ReopenWorktreePopupApp, { resultFile: resultFile, projectName: data.projectName, worktrees: data.worktrees, initialState: data.initialState ?? {
370
+ includeWorktrees: true,
371
+ includeLocalBranches: true,
372
+ includeRemoteBranches: false,
373
+ remoteLoaded: false,
374
+ filterQuery: '',
375
+ }, projectRoot: data.projectRoot, activePaneSlugs: data.activePaneSlugs }));
146
376
  }
147
377
  const entryPointHref = process.argv[1] ? pathToFileURL(process.argv[1]).href : '';
148
378
  if (import.meta.url === entryPointHref) {
@@ -1 +1 @@
1
- {"version":3,"file":"reopenWorktreePopup.js","sourceRoot":"","sources":["../../../src/components/popups/reopenWorktreePopup.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reopenWorktreePopup.js","sourceRoot":"","sources":["../../../src/components/popups/reopenWorktreePopup.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { DmuxPane, SidebarProject } from "../types.js";
2
+ import type { TrackProjectActivity } from "../types/activity.js";
3
+ import { type ResumableBranchCandidate } from "../utils/resumeBranches.js";
2
4
  import type { PopupManager } from "../services/PopupManager.js";
3
5
  import { type ProjectActionItem } from "../utils/projectActions.js";
4
6
  import type { AgentName } from "../utils/agentLaunch.js";
@@ -40,12 +42,13 @@ interface UseInputHandlingParams {
40
42
  popupManager: PopupManager;
41
43
  actionSystem: ActionSystem;
42
44
  controlPaneId: string | undefined;
45
+ trackProjectActivity: TrackProjectActivity;
43
46
  setStatusMessage: (message: string) => void;
44
47
  copyNonGitFiles: (worktreePath: string, sourceProjectRoot?: string) => Promise<void>;
45
48
  runCommandInternal: (type: "test" | "dev", pane: DmuxPane) => Promise<void>;
46
49
  handlePaneCreationWithAgent: (prompt: string, targetProjectRoot?: string) => Promise<void>;
47
50
  handleCreateChildWorktree: (pane: DmuxPane) => Promise<void>;
48
- handleReopenWorktree: (slug: string, worktreePath: string, targetProjectRoot?: string) => Promise<void>;
51
+ handleReopenWorktree: (candidate: ResumableBranchCandidate, targetProjectRoot?: string) => Promise<void>;
49
52
  setDevSourceFromPane: (pane: DmuxPane) => Promise<void>;
50
53
  savePanes: (panes: DmuxPane[]) => Promise<void>;
51
54
  sidebarProjects: SidebarProject[];
@@ -1 +1 @@
1
- {"version":3,"file":"useInputHandling.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputHandling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useInputHandling.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputHandling.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@ import { StateManager } from "../shared/StateManager.js";
5
5
  import { TmuxService } from "../services/TmuxService.js";
6
6
  import { STATUS_MESSAGE_DURATION_SHORT, STATUS_MESSAGE_DURATION_LONG, ANIMATION_DELAY, } from "../constants/timing.js";
7
7
  import { isPaneAction, PaneAction, TOGGLE_PANE_VISIBILITY_ACTION, } from "../actions/index.js";
8
- import { getMainBranch, getOrphanedWorktrees } from "../utils/git.js";
8
+ import { getMainBranch } from "../utils/git.js";
9
+ import { getResumableBranches, } from "../utils/resumeBranches.js";
9
10
  import { enforceControlPaneSize } from "../utils/tmux.js";
10
11
  import { SIDEBAR_WIDTH } from "../utils/layoutManager.js";
11
12
  import { suggestCommand } from "../utils/commands.js";
@@ -21,7 +22,7 @@ import { drainRemotePaneActions, getCurrentTmuxSessionName, } from "../utils/rem
21
22
  * Extracted from DmuxApp.tsx to reduce component complexity
22
23
  */
23
24
  export function useInputHandling(params) {
24
- const { panes, selectedIndex, setSelectedIndex, isCreatingPane, setIsCreatingPane, runningCommand, isUpdating, isLoading, ignoreInput, isDevMode, quitConfirmMode, setQuitConfirmMode, showCommandPrompt, setShowCommandPrompt, commandInput, setCommandInput, showFileCopyPrompt, setShowFileCopyPrompt, currentCommandType, setCurrentCommandType, projectSettings, saveSettings, settingsManager, popupManager, actionSystem, controlPaneId, setStatusMessage, copyNonGitFiles, runCommandInternal, handlePaneCreationWithAgent, handleCreateChildWorktree, handleReopenWorktree, setDevSourceFromPane, savePanes, sidebarProjects, saveSidebarProjects, loadPanes, cleanExit, availableAgents, panesFile, projectRoot, projectActionItems, findCardInDirection, } = params;
25
+ const { panes, selectedIndex, setSelectedIndex, isCreatingPane, setIsCreatingPane, runningCommand, isUpdating, isLoading, ignoreInput, isDevMode, quitConfirmMode, setQuitConfirmMode, showCommandPrompt, setShowCommandPrompt, commandInput, setCommandInput, showFileCopyPrompt, setShowFileCopyPrompt, currentCommandType, setCurrentCommandType, projectSettings, saveSettings, settingsManager, popupManager, actionSystem, controlPaneId, trackProjectActivity, setStatusMessage, copyNonGitFiles, runCommandInternal, handlePaneCreationWithAgent, handleCreateChildWorktree, handleReopenWorktree, setDevSourceFromPane, savePanes, sidebarProjects, saveSidebarProjects, loadPanes, cleanExit, availableAgents, panesFile, projectRoot, projectActionItems, findCardInDirection, } = params;
25
26
  const layoutRefreshDebounceRef = useRef(null);
26
27
  useEffect(() => {
27
28
  return () => {
@@ -192,10 +193,7 @@ export function useInputHandling(params) {
192
193
  try {
193
194
  const { resolveProjectRootFromPath } = await import("../utils/projectRoot.js");
194
195
  const resolved = resolveProjectRootFromPath(requestedProjectPath, projectRoot);
195
- const nextProjects = addSidebarProject(sidebarProjects, {
196
- projectRoot: resolved.projectRoot,
197
- projectName: resolved.projectName,
198
- });
196
+ const nextProjects = addSidebarProject(sidebarProjects, resolved);
199
197
  if (nextProjects === sidebarProjects) {
200
198
  selectProjectAction(resolved.projectRoot);
201
199
  setStatusMessage(`${resolved.projectName} is already in the sidebar`);
@@ -208,8 +206,42 @@ export function useInputHandling(params) {
208
206
  setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_SHORT);
209
207
  }
210
208
  catch (error) {
211
- setStatusMessage(error?.message || "Invalid project path");
212
- setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_LONG);
209
+ const { createEmptyGitProject, inspectProjectCreationTarget, } = await import("../utils/projectRoot.js");
210
+ const target = inspectProjectCreationTarget(requestedProjectPath, projectRoot);
211
+ if (target.state !== "missing" && target.state !== "empty_directory") {
212
+ const message = target.state === "directory_not_empty"
213
+ ? `Directory is not a git repository and is not empty: ${target.absolutePath}. New projects can only be created in a missing or empty directory.`
214
+ : (error?.message || "Invalid project path");
215
+ setStatusMessage(message);
216
+ setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_LONG);
217
+ return;
218
+ }
219
+ const confirmMessage = target.state === "missing"
220
+ ? `This project does not exist yet:\n${target.absolutePath}\n\nCreate a new empty git repository here?`
221
+ : `This directory is not a git repository:\n${target.absolutePath}\n\nInitialize a new empty git repository here?`;
222
+ const shouldCreateProject = await popupManager.launchConfirmPopup("Create Project", confirmMessage, "Create Project", "Cancel", projectRoot);
223
+ if (!shouldCreateProject) {
224
+ return;
225
+ }
226
+ try {
227
+ setStatusMessage(`Creating ${path.basename(target.absolutePath) || "project"}...`);
228
+ const createdProject = createEmptyGitProject(requestedProjectPath, projectRoot);
229
+ const nextProjects = addSidebarProject(sidebarProjects, createdProject);
230
+ if (nextProjects === sidebarProjects) {
231
+ selectProjectAction(createdProject.projectRoot);
232
+ setStatusMessage(`${createdProject.projectName} is already in the sidebar`);
233
+ setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_SHORT);
234
+ return;
235
+ }
236
+ const savedProjects = await saveSidebarProjects(nextProjects);
237
+ selectProjectAction(createdProject.projectRoot, savedProjects);
238
+ setStatusMessage(`Created ${createdProject.projectName} and added it to the sidebar`);
239
+ setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_SHORT);
240
+ }
241
+ catch (creationError) {
242
+ setStatusMessage(creationError?.message || "Failed to create project");
243
+ setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_LONG);
244
+ }
213
245
  }
214
246
  };
215
247
  const handleRemoveProjectFromSidebar = async (targetProjectRoot) => {
@@ -564,16 +596,33 @@ export function useInputHandling(params) {
564
596
  const activeSlugs = panes
565
597
  .filter((pane) => sameSidebarProjectRoot(getPaneProjectRoot(pane, projectRoot), targetProjectRoot))
566
598
  .map((pane) => pane.slug);
567
- const orphanedWorktrees = getOrphanedWorktrees(targetProjectRoot, activeSlugs);
568
- if (orphanedWorktrees.length === 0) {
569
- setStatusMessage(`No closed worktrees in ${targetProjectRoot}`);
570
- setTimeout(() => setStatusMessage(""), STATUS_MESSAGE_DURATION_SHORT);
599
+ const popupState = {
600
+ includeWorktrees: true,
601
+ includeLocalBranches: true,
602
+ includeRemoteBranches: false,
603
+ remoteLoaded: false,
604
+ filterQuery: "",
605
+ };
606
+ const resumableBranches = await trackProjectActivity(async () => getResumableBranches(targetProjectRoot, activeSlugs, {
607
+ includeRemoteBranches: false,
608
+ }), targetProjectRoot);
609
+ const result = await popupManager.launchReopenWorktreePopup(resumableBranches, targetProjectRoot, popupState, activeSlugs);
610
+ if (!result) {
571
611
  return;
572
612
  }
573
- const result = await popupManager.launchReopenWorktreePopup(orphanedWorktrees, targetProjectRoot);
574
- if (result) {
575
- await handleReopenWorktree(result.slug, result.path, targetProjectRoot);
576
- }
613
+ await handleReopenWorktree({
614
+ branchName: result.candidate.branchName,
615
+ slug: result.candidate.slug,
616
+ path: result.candidate.path,
617
+ lastModified: result.candidate.lastModified
618
+ ? new Date(result.candidate.lastModified)
619
+ : undefined,
620
+ hasUncommittedChanges: result.candidate.hasUncommittedChanges,
621
+ hasWorktree: result.candidate.hasWorktree,
622
+ hasLocalBranch: result.candidate.hasLocalBranch,
623
+ hasRemoteBranch: result.candidate.hasRemoteBranch,
624
+ isRemote: result.candidate.isRemote,
625
+ }, targetProjectRoot);
577
626
  };
578
627
  const executePaneShortcut = async (shortcut, selectedPane, options = {}) => {
579
628
  switch (shortcut) {