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.
- package/dist/actions/implementations/closeAction.d.ts.map +1 -1
- package/dist/actions/implementations/closeAction.js +22 -6
- package/dist/actions/implementations/closeAction.js.map +1 -1
- package/dist/actions/implementations/mergeAction.d.ts +3 -1
- package/dist/actions/implementations/mergeAction.d.ts.map +1 -1
- package/dist/actions/implementations/mergeAction.js +38 -4
- package/dist/actions/implementations/mergeAction.js.map +1 -1
- package/dist/actions/merge/multiMergeOrchestrator.d.ts +22 -0
- package/dist/actions/merge/multiMergeOrchestrator.d.ts.map +1 -0
- package/dist/actions/merge/multiMergeOrchestrator.js +452 -0
- package/dist/actions/merge/multiMergeOrchestrator.js.map +1 -0
- package/dist/actions/merge/types.d.ts +62 -0
- package/dist/actions/merge/types.d.ts.map +1 -0
- package/dist/actions/merge/types.js +7 -0
- package/dist/actions/merge/types.js.map +1 -0
- package/dist/chunks/styles.css_vue_type_style_index_0_src_true_lang-pW5mq51o.js +17 -0
- package/dist/components/popups/logsPopup.js +33 -17
- package/dist/components/popups/logsPopup.js.map +1 -1
- package/dist/dashboard.html +2 -2
- package/dist/dashboard.js +2 -2
- package/dist/hooks/useLayoutManagement.d.ts.map +1 -1
- package/dist/hooks/useLayoutManagement.js +43 -14
- package/dist/hooks/useLayoutManagement.js.map +1 -1
- package/dist/hooks/usePaneLoading.d.ts +3 -0
- package/dist/hooks/usePaneLoading.d.ts.map +1 -1
- package/dist/hooks/usePaneLoading.js +21 -1
- package/dist/hooks/usePaneLoading.js.map +1 -1
- package/dist/hooks/usePaneSync.d.ts +3 -0
- package/dist/hooks/usePaneSync.d.ts.map +1 -1
- package/dist/hooks/usePaneSync.js +11 -0
- package/dist/hooks/usePaneSync.js.map +1 -1
- package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -1
- package/dist/layout/TmuxLayoutApplier.js +4 -9
- package/dist/layout/TmuxLayoutApplier.js.map +1 -1
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +26 -37
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/services/PaneAnalyzer.d.ts +12 -3
- package/dist/services/PaneAnalyzer.d.ts.map +1 -1
- package/dist/services/PaneAnalyzer.js +57 -8
- package/dist/services/PaneAnalyzer.js.map +1 -1
- package/dist/services/PopupManager.d.ts.map +1 -1
- package/dist/services/PopupManager.js +7 -1
- package/dist/services/PopupManager.js.map +1 -1
- package/dist/services/StatusDetector.d.ts.map +1 -1
- package/dist/services/StatusDetector.js +28 -9
- package/dist/services/StatusDetector.js.map +1 -1
- package/dist/services/TmuxService.d.ts +9 -3
- package/dist/services/TmuxService.d.ts.map +1 -1
- package/dist/services/TmuxService.js +12 -3
- package/dist/services/TmuxService.js.map +1 -1
- package/dist/terminal.html +2 -2
- package/dist/terminal.js +3 -3
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +1 -1
- package/dist/utils/hooksDocs.d.ts +1 -1
- package/dist/utils/layoutManager.d.ts.map +1 -1
- package/dist/utils/layoutManager.js +226 -202
- package/dist/utils/layoutManager.js.map +1 -1
- package/dist/utils/worktreeDiscovery.d.ts +39 -0
- package/dist/utils/worktreeDiscovery.d.ts.map +1 -0
- package/dist/utils/worktreeDiscovery.js +241 -0
- package/dist/utils/worktreeDiscovery.js.map +1 -0
- package/package.json +7 -7
- package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +0 -28
- /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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/actions/merge/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|