dmux 3.3.1 → 3.5.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 (66) hide show
  1. package/dist/actions/implementations/closeAction.d.ts.map +1 -1
  2. package/dist/actions/implementations/closeAction.js +22 -6
  3. package/dist/actions/implementations/closeAction.js.map +1 -1
  4. package/dist/actions/implementations/mergeAction.d.ts +3 -1
  5. package/dist/actions/implementations/mergeAction.d.ts.map +1 -1
  6. package/dist/actions/implementations/mergeAction.js +38 -4
  7. package/dist/actions/implementations/mergeAction.js.map +1 -1
  8. package/dist/actions/merge/multiMergeOrchestrator.d.ts +22 -0
  9. package/dist/actions/merge/multiMergeOrchestrator.d.ts.map +1 -0
  10. package/dist/actions/merge/multiMergeOrchestrator.js +452 -0
  11. package/dist/actions/merge/multiMergeOrchestrator.js.map +1 -0
  12. package/dist/actions/merge/types.d.ts +62 -0
  13. package/dist/actions/merge/types.d.ts.map +1 -0
  14. package/dist/actions/merge/types.js +7 -0
  15. package/dist/actions/merge/types.js.map +1 -0
  16. package/dist/chunks/styles.css_vue_type_style_index_0_src_true_lang-pW5mq51o.js +17 -0
  17. package/dist/components/popups/logsPopup.js +33 -17
  18. package/dist/components/popups/logsPopup.js.map +1 -1
  19. package/dist/dashboard.html +2 -2
  20. package/dist/dashboard.js +2 -2
  21. package/dist/hooks/useLayoutManagement.d.ts.map +1 -1
  22. package/dist/hooks/useLayoutManagement.js +43 -14
  23. package/dist/hooks/useLayoutManagement.js.map +1 -1
  24. package/dist/hooks/usePaneLoading.d.ts +3 -0
  25. package/dist/hooks/usePaneLoading.d.ts.map +1 -1
  26. package/dist/hooks/usePaneLoading.js +21 -1
  27. package/dist/hooks/usePaneLoading.js.map +1 -1
  28. package/dist/hooks/usePaneSync.d.ts +3 -0
  29. package/dist/hooks/usePaneSync.d.ts.map +1 -1
  30. package/dist/hooks/usePaneSync.js +11 -0
  31. package/dist/hooks/usePaneSync.js.map +1 -1
  32. package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -1
  33. package/dist/layout/TmuxLayoutApplier.js +4 -9
  34. package/dist/layout/TmuxLayoutApplier.js.map +1 -1
  35. package/dist/server/embedded-assets.d.ts.map +1 -1
  36. package/dist/server/embedded-assets.js +26 -37
  37. package/dist/server/embedded-assets.js.map +1 -1
  38. package/dist/services/PaneAnalyzer.d.ts +12 -3
  39. package/dist/services/PaneAnalyzer.d.ts.map +1 -1
  40. package/dist/services/PaneAnalyzer.js +57 -8
  41. package/dist/services/PaneAnalyzer.js.map +1 -1
  42. package/dist/services/PopupManager.d.ts.map +1 -1
  43. package/dist/services/PopupManager.js +7 -1
  44. package/dist/services/PopupManager.js.map +1 -1
  45. package/dist/services/StatusDetector.d.ts.map +1 -1
  46. package/dist/services/StatusDetector.js +28 -9
  47. package/dist/services/StatusDetector.js.map +1 -1
  48. package/dist/services/TmuxService.d.ts +9 -3
  49. package/dist/services/TmuxService.d.ts.map +1 -1
  50. package/dist/services/TmuxService.js +12 -3
  51. package/dist/services/TmuxService.js.map +1 -1
  52. package/dist/terminal.html +2 -2
  53. package/dist/terminal.js +3 -3
  54. package/dist/utils/generated-agents-doc.d.ts +1 -1
  55. package/dist/utils/generated-agents-doc.js +1 -1
  56. package/dist/utils/hooksDocs.d.ts +1 -1
  57. package/dist/utils/layoutManager.d.ts.map +1 -1
  58. package/dist/utils/layoutManager.js +226 -202
  59. package/dist/utils/layoutManager.js.map +1 -1
  60. package/dist/utils/worktreeDiscovery.d.ts +39 -0
  61. package/dist/utils/worktreeDiscovery.d.ts.map +1 -0
  62. package/dist/utils/worktreeDiscovery.js +241 -0
  63. package/dist/utils/worktreeDiscovery.js.map +1 -0
  64. package/package.json +7 -7
  65. package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +0 -28
  66. /package/dist/{_plugin-vue_export-helper.css → styles.css} +0 -0
@@ -0,0 +1,452 @@
1
+ /**
2
+ * Multi-Merge Orchestrator
3
+ *
4
+ * Coordinates merging multiple worktrees in sequence with proper
5
+ * dialog handling and error recovery.
6
+ */
7
+ import { getWorktreeDisplayLabel } from '../../utils/worktreeDiscovery.js';
8
+ /**
9
+ * Build the merge queue from detected worktrees
10
+ * - Runs validation on each worktree
11
+ * - Filters to only those with changes to merge
12
+ * - Already sorted by depth (deepest first from detectAllWorktrees)
13
+ */
14
+ export async function buildMergeQueue(worktrees) {
15
+ const { validateMerge } = await import('../../utils/mergeValidation.js');
16
+ const queue = [];
17
+ for (const worktree of worktrees) {
18
+ const validation = validateMerge(worktree.parentRepoPath, worktree.worktreePath, worktree.branch);
19
+ // Include if there's something to merge (has issues that can be resolved, or can merge)
20
+ // Exclude only if the ONLY issue is 'nothing_to_merge'
21
+ const hasNothingToMerge = validation.issues.some(i => i.type === 'nothing_to_merge');
22
+ const hasOnlyNothingToMerge = validation.issues.length === 1 && hasNothingToMerge;
23
+ if (!hasOnlyNothingToMerge) {
24
+ queue.push({
25
+ worktree,
26
+ validation,
27
+ status: 'pending',
28
+ });
29
+ }
30
+ }
31
+ return queue;
32
+ }
33
+ /**
34
+ * Execute multi-merge with sequential dialogs
35
+ * Returns ActionResult that chains through each merge
36
+ */
37
+ export async function executeMultiMerge(pane, context, queue) {
38
+ // Start with confirmation dialog
39
+ return showMultiMergeConfirmation(pane, context, queue);
40
+ }
41
+ /**
42
+ * Show initial confirmation dialog listing all worktrees to merge
43
+ */
44
+ function showMultiMergeConfirmation(pane, context, queue) {
45
+ const worktreeList = queue
46
+ .map((item, idx) => {
47
+ const label = getWorktreeDisplayLabel(item.worktree);
48
+ const issues = item.validation.issues
49
+ .filter(i => i.type !== 'nothing_to_merge')
50
+ .map(i => i.type.replace(/_/g, ' '))
51
+ .join(', ');
52
+ return ` ${idx + 1}. ${label}${issues ? ` [${issues}]` : ''}`;
53
+ })
54
+ .join('\n');
55
+ return {
56
+ type: 'confirm',
57
+ title: 'Multi-Repository Merge',
58
+ message: `Merge ${queue.length} repositor${queue.length === 1 ? 'y' : 'ies'}?\n\n${worktreeList}`,
59
+ confirmLabel: 'Start Merge',
60
+ cancelLabel: 'Cancel',
61
+ onConfirm: async () => {
62
+ // Initialize result tracking
63
+ const result = {
64
+ totalWorktrees: queue.length,
65
+ successful: 0,
66
+ failed: 0,
67
+ skipped: 0,
68
+ results: [],
69
+ };
70
+ // Start processing the queue
71
+ return processNextInQueue(pane, context, queue, 0, result);
72
+ },
73
+ onCancel: async () => {
74
+ return {
75
+ type: 'info',
76
+ message: 'Multi-merge cancelled',
77
+ dismissable: true,
78
+ };
79
+ },
80
+ };
81
+ }
82
+ /**
83
+ * Process the next item in the merge queue
84
+ */
85
+ async function processNextInQueue(pane, context, queue, currentIndex, result) {
86
+ // Check if we're done
87
+ if (currentIndex >= queue.length) {
88
+ return showMultiMergeSummary(pane, context, result);
89
+ }
90
+ const item = queue[currentIndex];
91
+ const worktreeLabel = getWorktreeDisplayLabel(item.worktree);
92
+ // Show progress
93
+ console.error(`[multiMerge] Processing ${currentIndex + 1}/${queue.length}: ${worktreeLabel}`);
94
+ // Update status
95
+ item.status = 'in_progress';
96
+ // Execute the merge for this worktree
97
+ return executeSingleWorktreeMerge(pane, context, item, currentIndex, queue.length, async (success, error) => {
98
+ // Record result
99
+ if (success) {
100
+ item.status = 'completed';
101
+ result.successful++;
102
+ result.results.push({
103
+ worktree: item.worktree,
104
+ status: 'completed',
105
+ });
106
+ }
107
+ else if (error === 'skipped') {
108
+ item.status = 'skipped';
109
+ result.skipped++;
110
+ result.results.push({
111
+ worktree: item.worktree,
112
+ status: 'skipped',
113
+ });
114
+ }
115
+ else {
116
+ item.status = 'failed';
117
+ item.error = error;
118
+ result.failed++;
119
+ result.results.push({
120
+ worktree: item.worktree,
121
+ status: 'failed',
122
+ error,
123
+ });
124
+ }
125
+ // Process next item
126
+ return processNextInQueue(pane, context, queue, currentIndex + 1, result);
127
+ });
128
+ }
129
+ /**
130
+ * Execute merge for a single worktree in the queue
131
+ */
132
+ async function executeSingleWorktreeMerge(pane, context, item, currentIndex, totalCount, onComplete) {
133
+ const { validation, worktree } = item;
134
+ const worktreeLabel = getWorktreeDisplayLabel(worktree);
135
+ const progressPrefix = `[${currentIndex + 1}/${totalCount}] ${worktreeLabel}`;
136
+ // Handle issues first (same as single merge flow)
137
+ if (!validation.canMerge) {
138
+ return handleWorktreeMergeIssues(pane, context, item, progressPrefix, onComplete);
139
+ }
140
+ // No issues - show confirmation for this worktree
141
+ return {
142
+ type: 'confirm',
143
+ title: progressPrefix,
144
+ message: `Merge "${worktree.branch}" into ${validation.mainBranch}?`,
145
+ confirmLabel: 'Merge',
146
+ cancelLabel: 'Skip',
147
+ onConfirm: async () => {
148
+ return performWorktreeMerge(pane, context, item, progressPrefix, onComplete);
149
+ },
150
+ onCancel: async () => {
151
+ // Skip this worktree, continue with others
152
+ return onComplete(false, 'skipped');
153
+ },
154
+ };
155
+ }
156
+ /**
157
+ * Handle merge issues for a single worktree in multi-merge context
158
+ */
159
+ async function handleWorktreeMergeIssues(pane, context, item, progressPrefix, onComplete) {
160
+ const { validation, worktree } = item;
161
+ const { issues, mainBranch } = validation;
162
+ // Create retry function for this specific worktree
163
+ const retryMerge = async () => {
164
+ // Re-validate
165
+ const { validateMerge } = await import('../../utils/mergeValidation.js');
166
+ item.validation = validateMerge(worktree.parentRepoPath, worktree.worktreePath, worktree.branch);
167
+ if (item.validation.canMerge) {
168
+ return performWorktreeMerge(pane, context, item, progressPrefix, onComplete);
169
+ }
170
+ else {
171
+ return handleWorktreeMergeIssues(pane, context, item, progressPrefix, onComplete);
172
+ }
173
+ };
174
+ // Check for nothing to merge
175
+ const nothingToMerge = issues.find(i => i.type === 'nothing_to_merge');
176
+ if (nothingToMerge) {
177
+ return onComplete(false, 'skipped');
178
+ }
179
+ // Check for main dirty
180
+ const mainDirty = issues.find(i => i.type === 'main_dirty');
181
+ if (mainDirty) {
182
+ return handleMainDirtyForWorktree(item, progressPrefix, mainBranch, retryMerge, onComplete);
183
+ }
184
+ // Check for worktree uncommitted
185
+ const worktreeUncommitted = issues.find(i => i.type === 'worktree_uncommitted');
186
+ if (worktreeUncommitted) {
187
+ return handleUncommittedForWorktree(item, progressPrefix, retryMerge, onComplete);
188
+ }
189
+ // Check for merge conflict
190
+ const mergeConflict = issues.find(i => i.type === 'merge_conflict');
191
+ if (mergeConflict) {
192
+ return handleConflictForWorktree(pane, context, item, progressPrefix, mainBranch, onComplete);
193
+ }
194
+ // Unknown issue - skip with error
195
+ return onComplete(false, issues.map(i => i.message).join('; '));
196
+ }
197
+ /**
198
+ * Handle main branch dirty for a worktree in multi-merge
199
+ */
200
+ async function handleMainDirtyForWorktree(item, progressPrefix, mainBranch, retryMerge, onComplete) {
201
+ const { worktree, validation } = item;
202
+ const issue = validation.issues.find(i => i.type === 'main_dirty');
203
+ const files = issue.files || [];
204
+ return {
205
+ type: 'choice',
206
+ title: `${progressPrefix}: Main Branch Has Changes`,
207
+ message: `${mainBranch} in ${worktree.repoName} has uncommitted changes:\n${files.slice(0, 3).map(f => ` • ${f}`).join('\n')}${files.length > 3 ? '\n ...' : ''}`,
208
+ options: [
209
+ {
210
+ id: 'commit_automatic',
211
+ label: 'AI commit (automatic)',
212
+ description: 'Auto-generate and commit immediately',
213
+ default: true,
214
+ },
215
+ {
216
+ id: 'commit_ai_editable',
217
+ label: 'AI commit (editable)',
218
+ description: 'Generate message, edit before commit',
219
+ },
220
+ {
221
+ id: 'commit_manual',
222
+ label: 'Manual commit message',
223
+ description: 'Write your own commit message',
224
+ },
225
+ {
226
+ id: 'skip',
227
+ label: 'Skip this repo',
228
+ description: 'Continue with other repositories',
229
+ },
230
+ ],
231
+ onSelect: async (optionId) => {
232
+ if (optionId === 'skip') {
233
+ return onComplete(false, 'skipped');
234
+ }
235
+ if (optionId === 'commit_automatic' ||
236
+ optionId === 'commit_ai_editable' ||
237
+ optionId === 'commit_manual') {
238
+ const { handleCommitWithOptions } = await import('./commitMessageHandler.js');
239
+ return handleCommitWithOptions(worktree.parentRepoPath, optionId, retryMerge);
240
+ }
241
+ return onComplete(false, 'Unknown option');
242
+ },
243
+ dismissable: false,
244
+ };
245
+ }
246
+ /**
247
+ * Handle uncommitted changes in worktree for multi-merge
248
+ */
249
+ async function handleUncommittedForWorktree(item, progressPrefix, retryMerge, onComplete) {
250
+ const { worktree, validation } = item;
251
+ const issue = validation.issues.find(i => i.type === 'worktree_uncommitted');
252
+ const files = issue.files || [];
253
+ return {
254
+ type: 'choice',
255
+ title: `${progressPrefix}: Uncommitted Changes`,
256
+ message: `${worktree.repoName} worktree has uncommitted changes:\n${files.slice(0, 3).map(f => ` • ${f}`).join('\n')}${files.length > 3 ? '\n ...' : ''}`,
257
+ options: [
258
+ {
259
+ id: 'commit_automatic',
260
+ label: 'AI commit (automatic)',
261
+ description: 'Auto-generate and commit immediately',
262
+ default: true,
263
+ },
264
+ {
265
+ id: 'commit_ai_editable',
266
+ label: 'AI commit (editable)',
267
+ description: 'Generate message, edit before commit',
268
+ },
269
+ {
270
+ id: 'commit_manual',
271
+ label: 'Manual commit message',
272
+ description: 'Write your own commit message',
273
+ },
274
+ {
275
+ id: 'skip',
276
+ label: 'Skip this repo',
277
+ description: 'Continue with other repositories',
278
+ },
279
+ ],
280
+ onSelect: async (optionId) => {
281
+ if (optionId === 'skip') {
282
+ return onComplete(false, 'skipped');
283
+ }
284
+ if (optionId === 'commit_automatic' ||
285
+ optionId === 'commit_ai_editable' ||
286
+ optionId === 'commit_manual') {
287
+ const { handleCommitWithOptions } = await import('./commitMessageHandler.js');
288
+ return handleCommitWithOptions(worktree.worktreePath, optionId, retryMerge);
289
+ }
290
+ return onComplete(false, 'Unknown option');
291
+ },
292
+ dismissable: false,
293
+ };
294
+ }
295
+ /**
296
+ * Handle merge conflict for a worktree in multi-merge
297
+ */
298
+ async function handleConflictForWorktree(pane, context, item, progressPrefix, mainBranch, onComplete) {
299
+ const { worktree, validation } = item;
300
+ const issue = validation.issues.find(i => i.type === 'merge_conflict');
301
+ const files = issue.files || [];
302
+ return {
303
+ type: 'choice',
304
+ title: `${progressPrefix}: Merge Conflicts`,
305
+ message: `Conflicts detected in ${worktree.repoName}:\n${files.slice(0, 3).map(f => ` • ${f}`).join('\n')}${files.length > 3 ? '\n ...' : ''}`,
306
+ options: [
307
+ {
308
+ id: 'skip',
309
+ label: 'Skip this repo',
310
+ description: 'Resolve conflicts manually later',
311
+ default: true,
312
+ },
313
+ {
314
+ id: 'abort',
315
+ label: 'Stop multi-merge',
316
+ description: 'Abort remaining merges',
317
+ },
318
+ ],
319
+ onSelect: async (optionId) => {
320
+ if (optionId === 'skip') {
321
+ return onComplete(false, 'skipped');
322
+ }
323
+ if (optionId === 'abort') {
324
+ return {
325
+ type: 'info',
326
+ title: 'Multi-Merge Aborted',
327
+ message: `Stopped at ${worktree.repoName} due to conflicts.`,
328
+ dismissable: true,
329
+ };
330
+ }
331
+ return onComplete(false, 'Unknown option');
332
+ },
333
+ dismissable: false,
334
+ };
335
+ }
336
+ /**
337
+ * Actually perform the merge for a worktree
338
+ */
339
+ async function performWorktreeMerge(pane, context, item, progressPrefix, onComplete) {
340
+ const { worktree, validation } = item;
341
+ const { mainBranch } = validation;
342
+ const { mergeMainIntoWorktree, mergeWorktreeIntoMain } = await import('../../utils/mergeExecution.js');
343
+ const { triggerHook } = await import('../../utils/hooks.js');
344
+ // Trigger pre_merge hook
345
+ await triggerHook('pre_merge', worktree.parentRepoPath, pane, {
346
+ DMUX_TARGET_BRANCH: mainBranch,
347
+ DMUX_WORKTREE_PATH: worktree.worktreePath,
348
+ DMUX_REPO_NAME: worktree.repoName,
349
+ });
350
+ // Step 1: Merge main into worktree
351
+ const step1 = mergeMainIntoWorktree(worktree.worktreePath, mainBranch);
352
+ if (!step1.success) {
353
+ if (step1.needsManualResolution && step1.conflictFiles?.length) {
354
+ // Conflict occurred during merge
355
+ return {
356
+ type: 'choice',
357
+ title: `${progressPrefix}: Merge Conflict`,
358
+ message: `Conflict while merging ${mainBranch} into worktree:\n${step1.conflictFiles.slice(0, 3).map(f => ` • ${f}`).join('\n')}`,
359
+ options: [
360
+ {
361
+ id: 'skip',
362
+ label: 'Skip this repo',
363
+ description: 'Abort this merge, continue with others',
364
+ default: true,
365
+ },
366
+ {
367
+ id: 'abort_all',
368
+ label: 'Stop multi-merge',
369
+ description: 'Stop processing remaining repos',
370
+ },
371
+ ],
372
+ onSelect: async (optionId) => {
373
+ const { abortMerge } = await import('../../utils/mergeExecution.js');
374
+ abortMerge(worktree.worktreePath);
375
+ if (optionId === 'abort_all') {
376
+ return {
377
+ type: 'info',
378
+ title: 'Multi-Merge Aborted',
379
+ message: `Stopped due to conflicts in ${worktree.repoName}`,
380
+ dismissable: true,
381
+ };
382
+ }
383
+ return onComplete(false, 'skipped');
384
+ },
385
+ dismissable: false,
386
+ };
387
+ }
388
+ return onComplete(false, `Merge failed: ${step1.error}`);
389
+ }
390
+ // Step 2: Merge worktree into main
391
+ const step2 = mergeWorktreeIntoMain(worktree.parentRepoPath, worktree.branch);
392
+ if (!step2.success) {
393
+ return onComplete(false, `Failed to merge into ${mainBranch}: ${step2.error}`);
394
+ }
395
+ // Trigger post_merge hook
396
+ await triggerHook('post_merge', worktree.parentRepoPath, pane, {
397
+ DMUX_TARGET_BRANCH: mainBranch,
398
+ DMUX_WORKTREE_PATH: worktree.worktreePath,
399
+ DMUX_REPO_NAME: worktree.repoName,
400
+ });
401
+ console.error(`[multiMerge] Successfully merged ${worktree.repoName}`);
402
+ return onComplete(true);
403
+ }
404
+ /**
405
+ * Show final summary of multi-merge operation
406
+ */
407
+ function showMultiMergeSummary(pane, context, result) {
408
+ const summaryLines = result.results.map(r => {
409
+ const label = getWorktreeDisplayLabel(r.worktree);
410
+ const icon = r.status === 'completed' ? '✓' : r.status === 'skipped' ? '○' : '✗';
411
+ const suffix = r.error && r.status === 'failed' ? ` (${r.error})` : '';
412
+ return ` ${icon} ${label}${suffix}`;
413
+ });
414
+ const message = [
415
+ `Completed: ${result.successful}`,
416
+ result.skipped > 0 ? `Skipped: ${result.skipped}` : null,
417
+ result.failed > 0 ? `Failed: ${result.failed}` : null,
418
+ '',
419
+ ...summaryLines,
420
+ ]
421
+ .filter(Boolean)
422
+ .join('\n');
423
+ // If all successful, offer to close pane
424
+ if (result.failed === 0 && result.successful > 0) {
425
+ return {
426
+ type: 'confirm',
427
+ title: 'Multi-Merge Complete',
428
+ message,
429
+ confirmLabel: 'Close Pane',
430
+ cancelLabel: 'Keep Open',
431
+ onConfirm: async () => {
432
+ const { closePane } = await import('../implementations/closeAction.js');
433
+ return closePane(pane, context);
434
+ },
435
+ onCancel: async () => {
436
+ return {
437
+ type: 'success',
438
+ message: 'Merges complete. Pane kept open.',
439
+ dismissable: true,
440
+ };
441
+ },
442
+ };
443
+ }
444
+ // Some failures - just show info
445
+ return {
446
+ type: 'info',
447
+ title: result.failed > 0 ? 'Multi-Merge Partial' : 'Multi-Merge Complete',
448
+ message,
449
+ dismissable: true,
450
+ };
451
+ }
452
+ //# sourceMappingURL=multiMergeOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiMergeOrchestrator.js","sourceRoot":"","sources":["../../../src/actions/merge/multiMergeOrchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Multi-Merge Type Definitions
3
+ *
4
+ * Types for managing multiple worktree merges in a single operation.
5
+ */
6
+ import type { MergeValidationResult } from '../../utils/mergeValidation.js';
7
+ /**
8
+ * Information about a single worktree (either root or sub-worktree)
9
+ */
10
+ export interface WorktreeInfo {
11
+ /** Absolute path to the worktree directory */
12
+ worktreePath: string;
13
+ /** Absolute path to the parent repo (where the worktree originated from) */
14
+ parentRepoPath: string;
15
+ /** Name of the repository (derived from parent repo's directory name) */
16
+ repoName: string;
17
+ /** Current branch in this worktree */
18
+ branch: string;
19
+ /** Main branch in parent repo (main, master, etc.) */
20
+ mainBranch: string;
21
+ /** Whether this is the root worktree (the dmux pane's worktree) */
22
+ isRoot: boolean;
23
+ /** Relative path from root worktree (for display), "." for root */
24
+ relativePath: string;
25
+ /** Depth level (0 = root, 1 = immediate child, etc.) */
26
+ depth: number;
27
+ }
28
+ /**
29
+ * A single item in the merge queue
30
+ */
31
+ export interface MergeQueueItem {
32
+ worktree: WorktreeInfo;
33
+ validation: MergeValidationResult;
34
+ status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'skipped';
35
+ error?: string;
36
+ }
37
+ /**
38
+ * Result of multi-merge operation
39
+ */
40
+ export interface MultiMergeResult {
41
+ totalWorktrees: number;
42
+ successful: number;
43
+ failed: number;
44
+ skipped: number;
45
+ results: Array<{
46
+ worktree: WorktreeInfo;
47
+ status: 'completed' | 'failed' | 'skipped';
48
+ error?: string;
49
+ }>;
50
+ }
51
+ /**
52
+ * Options for executing a single worktree merge within a multi-merge context
53
+ */
54
+ export interface SingleMergeOptions {
55
+ /** Skip the close pane prompt (for multi-merge where we close after all) */
56
+ skipClosePrompt?: boolean;
57
+ /** Callback when merge completes (success or failure) */
58
+ onComplete?: (success: boolean, error?: string) => Promise<void>;
59
+ /** Label to display for this worktree in dialogs */
60
+ worktreeLabel?: string;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/actions/merge/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IAErB,4EAA4E;IAC5E,cAAc,EAAE,MAAM,CAAC;IAEvB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IAEnB,mEAAmE;IACnE,MAAM,EAAE,OAAO,CAAC;IAEhB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IAErB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,qBAAqB,CAAC;IAClC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,YAAY,CAAC;QACvB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,yDAAyD;IACzD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Multi-Merge Type Definitions
3
+ *
4
+ * Types for managing multiple worktree merges in a single operation.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/actions/merge/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}