dmux 2.2.0 → 3.0.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 (197) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +412 -179
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/MergePane.d.ts.map +1 -1
  5. package/dist/MergePane.js +4 -15
  6. package/dist/MergePane.js.map +1 -1
  7. package/dist/PaneAnalyzer.d.ts +45 -0
  8. package/dist/PaneAnalyzer.d.ts.map +1 -0
  9. package/dist/PaneAnalyzer.js +278 -0
  10. package/dist/PaneAnalyzer.js.map +1 -0
  11. package/dist/_plugin-vue_export-helper.css +1 -0
  12. package/dist/actions/index.d.ts +19 -0
  13. package/dist/actions/index.d.ts.map +1 -0
  14. package/dist/actions/index.js +54 -0
  15. package/dist/actions/index.js.map +1 -0
  16. package/dist/actions/paneActions.d.ts +45 -0
  17. package/dist/actions/paneActions.d.ts.map +1 -0
  18. package/dist/actions/paneActions.js +932 -0
  19. package/dist/actions/paneActions.js.map +1 -0
  20. package/dist/actions/types.d.ts +101 -0
  21. package/dist/actions/types.d.ts.map +1 -0
  22. package/dist/actions/types.js +129 -0
  23. package/dist/actions/types.js.map +1 -0
  24. package/dist/adapters/apiActionHandler.d.ts +64 -0
  25. package/dist/adapters/apiActionHandler.d.ts.map +1 -0
  26. package/dist/adapters/apiActionHandler.js +170 -0
  27. package/dist/adapters/apiActionHandler.js.map +1 -0
  28. package/dist/adapters/tuiActionHandler.d.ts +57 -0
  29. package/dist/adapters/tuiActionHandler.d.ts.map +1 -0
  30. package/dist/adapters/tuiActionHandler.js +152 -0
  31. package/dist/adapters/tuiActionHandler.js.map +1 -0
  32. package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +28 -0
  33. package/dist/components/ActionChoiceDialog.d.ts +16 -0
  34. package/dist/components/ActionChoiceDialog.d.ts.map +1 -0
  35. package/dist/components/ActionChoiceDialog.js +29 -0
  36. package/dist/components/ActionChoiceDialog.js.map +1 -0
  37. package/dist/components/ActionConfirmDialog.d.ts +16 -0
  38. package/dist/components/ActionConfirmDialog.d.ts.map +1 -0
  39. package/dist/components/ActionConfirmDialog.js +31 -0
  40. package/dist/components/ActionConfirmDialog.js.map +1 -0
  41. package/dist/components/ActionInputDialog.d.ts +16 -0
  42. package/dist/components/ActionInputDialog.d.ts.map +1 -0
  43. package/dist/components/ActionInputDialog.js +49 -0
  44. package/dist/components/ActionInputDialog.js.map +1 -0
  45. package/dist/components/ActionProgressDialog.d.ts +13 -0
  46. package/dist/components/ActionProgressDialog.d.ts.map +1 -0
  47. package/dist/components/ActionProgressDialog.js +20 -0
  48. package/dist/components/ActionProgressDialog.js.map +1 -0
  49. package/dist/components/FooterHelp.d.ts +2 -0
  50. package/dist/components/FooterHelp.d.ts.map +1 -1
  51. package/dist/components/FooterHelp.js +9 -2
  52. package/dist/components/FooterHelp.js.map +1 -1
  53. package/dist/components/KebabMenu.d.ts +10 -0
  54. package/dist/components/KebabMenu.d.ts.map +1 -0
  55. package/dist/components/KebabMenu.js +18 -0
  56. package/dist/components/KebabMenu.js.map +1 -0
  57. package/dist/components/LoadingIndicator.d.ts.map +1 -1
  58. package/dist/components/LoadingIndicator.js +5 -5
  59. package/dist/components/LoadingIndicator.js.map +1 -1
  60. package/dist/components/PaneCard.d.ts +1 -0
  61. package/dist/components/PaneCard.d.ts.map +1 -1
  62. package/dist/components/PaneCard.js +21 -20
  63. package/dist/components/PaneCard.js.map +1 -1
  64. package/dist/components/PanesGrid.d.ts +1 -0
  65. package/dist/components/PanesGrid.d.ts.map +1 -1
  66. package/dist/components/PanesGrid.js +5 -4
  67. package/dist/components/PanesGrid.js.map +1 -1
  68. package/dist/components/QRCode.d.ts +7 -0
  69. package/dist/components/QRCode.d.ts.map +1 -0
  70. package/dist/components/QRCode.js +19 -0
  71. package/dist/components/QRCode.js.map +1 -0
  72. package/dist/components/Spinner.d.ts +10 -0
  73. package/dist/components/Spinner.d.ts.map +1 -0
  74. package/dist/components/Spinner.js +15 -0
  75. package/dist/components/Spinner.js.map +1 -0
  76. package/dist/dashboard.html +14 -0
  77. package/dist/dashboard.js +2 -0
  78. package/dist/hooks/useActionSystem.d.ts +31 -0
  79. package/dist/hooks/useActionSystem.d.ts.map +1 -0
  80. package/dist/hooks/useActionSystem.js +95 -0
  81. package/dist/hooks/useActionSystem.js.map +1 -0
  82. package/dist/hooks/useAgentStatus.d.ts +4 -3
  83. package/dist/hooks/useAgentStatus.d.ts.map +1 -1
  84. package/dist/hooks/useAgentStatus.js +45 -194
  85. package/dist/hooks/useAgentStatus.js.map +1 -1
  86. package/dist/hooks/usePaneCreation.d.ts +2 -1
  87. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  88. package/dist/hooks/usePaneCreation.js +46 -100
  89. package/dist/hooks/usePaneCreation.js.map +1 -1
  90. package/dist/hooks/usePanes.d.ts.map +1 -1
  91. package/dist/hooks/usePanes.js +5 -3
  92. package/dist/hooks/usePanes.js.map +1 -1
  93. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  94. package/dist/hooks/useTerminalWidth.js +18 -1
  95. package/dist/hooks/useTerminalWidth.js.map +1 -1
  96. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  97. package/dist/hooks/useWorktreeActions.js +4 -0
  98. package/dist/hooks/useWorktreeActions.js.map +1 -1
  99. package/dist/index.js +43 -6
  100. package/dist/index.js.map +1 -1
  101. package/dist/server/actionsApi.d.ts +37 -0
  102. package/dist/server/actionsApi.d.ts.map +1 -0
  103. package/dist/server/actionsApi.js +256 -0
  104. package/dist/server/actionsApi.js.map +1 -0
  105. package/dist/server/embedded-assets.d.ts +13 -0
  106. package/dist/server/embedded-assets.d.ts.map +1 -0
  107. package/dist/server/embedded-assets.js +5012 -0
  108. package/dist/server/embedded-assets.js.map +1 -0
  109. package/dist/server/index.d.ts +21 -0
  110. package/dist/server/index.d.ts.map +1 -0
  111. package/dist/server/index.js +99 -0
  112. package/dist/server/index.js.map +1 -0
  113. package/dist/server/routes.d.ts +3 -0
  114. package/dist/server/routes.d.ts.map +1 -0
  115. package/dist/server/routes.js +672 -0
  116. package/dist/server/routes.js.map +1 -0
  117. package/dist/server/static.d.ts +6 -0
  118. package/dist/server/static.d.ts.map +1 -0
  119. package/dist/server/static.js +3040 -0
  120. package/dist/server/static.js.map +1 -0
  121. package/dist/services/ConfigWatcher.d.ts +20 -0
  122. package/dist/services/ConfigWatcher.d.ts.map +1 -0
  123. package/dist/services/ConfigWatcher.js +75 -0
  124. package/dist/services/ConfigWatcher.js.map +1 -0
  125. package/dist/services/PaneWorkerManager.d.ts +69 -0
  126. package/dist/services/PaneWorkerManager.d.ts.map +1 -0
  127. package/dist/services/PaneWorkerManager.js +272 -0
  128. package/dist/services/PaneWorkerManager.js.map +1 -0
  129. package/dist/services/StatusDetector.d.ts +87 -0
  130. package/dist/services/StatusDetector.d.ts.map +1 -0
  131. package/dist/services/StatusDetector.js +387 -0
  132. package/dist/services/StatusDetector.js.map +1 -0
  133. package/dist/services/TerminalDiffer.d.ts +85 -0
  134. package/dist/services/TerminalDiffer.d.ts.map +1 -0
  135. package/dist/services/TerminalDiffer.js +499 -0
  136. package/dist/services/TerminalDiffer.js.map +1 -0
  137. package/dist/services/TerminalStreamer.d.ts +80 -0
  138. package/dist/services/TerminalStreamer.d.ts.map +1 -0
  139. package/dist/services/TerminalStreamer.js +490 -0
  140. package/dist/services/TerminalStreamer.js.map +1 -0
  141. package/dist/services/TunnelService.d.ts +9 -0
  142. package/dist/services/TunnelService.d.ts.map +1 -0
  143. package/dist/services/TunnelService.js +34 -0
  144. package/dist/services/TunnelService.js.map +1 -0
  145. package/dist/services/WorkerMessageBus.d.ts +48 -0
  146. package/dist/services/WorkerMessageBus.d.ts.map +1 -0
  147. package/dist/services/WorkerMessageBus.js +120 -0
  148. package/dist/services/WorkerMessageBus.js.map +1 -0
  149. package/dist/shared/StateManager.d.ts +34 -0
  150. package/dist/shared/StateManager.d.ts.map +1 -0
  151. package/dist/shared/StateManager.js +108 -0
  152. package/dist/shared/StateManager.js.map +1 -0
  153. package/dist/shared/StreamProtocol.d.ts +75 -0
  154. package/dist/shared/StreamProtocol.d.ts.map +1 -0
  155. package/dist/shared/StreamProtocol.js +37 -0
  156. package/dist/shared/StreamProtocol.js.map +1 -0
  157. package/dist/terminal.html +17 -0
  158. package/dist/terminal.js +3 -0
  159. package/dist/types.d.ts +21 -1
  160. package/dist/types.d.ts.map +1 -1
  161. package/dist/utils/agentDetection.d.ts +18 -0
  162. package/dist/utils/agentDetection.d.ts.map +1 -0
  163. package/dist/utils/agentDetection.js +73 -0
  164. package/dist/utils/agentDetection.js.map +1 -0
  165. package/dist/utils/aiMerge.d.ts +35 -0
  166. package/dist/utils/aiMerge.d.ts.map +1 -0
  167. package/dist/utils/aiMerge.js +298 -0
  168. package/dist/utils/aiMerge.js.map +1 -0
  169. package/dist/utils/conflictResolutionPane.d.ts +19 -0
  170. package/dist/utils/conflictResolutionPane.d.ts.map +1 -0
  171. package/dist/utils/conflictResolutionPane.js +214 -0
  172. package/dist/utils/conflictResolutionPane.js.map +1 -0
  173. package/dist/utils/mergeExecution.d.ts +52 -0
  174. package/dist/utils/mergeExecution.d.ts.map +1 -0
  175. package/dist/utils/mergeExecution.js +192 -0
  176. package/dist/utils/mergeExecution.js.map +1 -0
  177. package/dist/utils/mergeValidation.d.ts +67 -0
  178. package/dist/utils/mergeValidation.d.ts.map +1 -0
  179. package/dist/utils/mergeValidation.js +213 -0
  180. package/dist/utils/mergeValidation.js.map +1 -0
  181. package/dist/utils/paneCreation.d.ts +17 -0
  182. package/dist/utils/paneCreation.d.ts.map +1 -0
  183. package/dist/utils/paneCreation.js +274 -0
  184. package/dist/utils/paneCreation.js.map +1 -0
  185. package/dist/utils/port.d.ts +5 -0
  186. package/dist/utils/port.d.ts.map +1 -0
  187. package/dist/utils/port.js +54 -0
  188. package/dist/utils/port.js.map +1 -0
  189. package/dist/workers/PaneWorker.d.ts +2 -0
  190. package/dist/workers/PaneWorker.d.ts.map +1 -0
  191. package/dist/workers/PaneWorker.js +362 -0
  192. package/dist/workers/PaneWorker.js.map +1 -0
  193. package/dist/workers/WorkerMessages.d.ts +36 -0
  194. package/dist/workers/WorkerMessages.d.ts.map +1 -0
  195. package/dist/workers/WorkerMessages.js +9 -0
  196. package/dist/workers/WorkerMessages.js.map +1 -0
  197. package/package.json +19 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiMerge.d.ts","sourceRoot":"","sources":["../../src/utils/aiMerge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuFH;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiCxF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqCpF;AAqED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkEzE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiC/F"}
@@ -0,0 +1,298 @@
1
+ /**
2
+ * AI-Assisted Merge Utilities
3
+ *
4
+ * Uses AI to help resolve merge conflicts intelligently
5
+ */
6
+ import { execSync } from 'child_process';
7
+ import fs from 'fs/promises';
8
+ import path from 'path';
9
+ /**
10
+ * Fetch with timeout wrapper
11
+ */
12
+ async function fetchWithTimeout(url, options, timeoutMs) {
13
+ const controller = new AbortController();
14
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
15
+ try {
16
+ const response = await fetch(url, {
17
+ ...options,
18
+ signal: controller.signal,
19
+ });
20
+ clearTimeout(timeoutId);
21
+ return response;
22
+ }
23
+ catch (error) {
24
+ clearTimeout(timeoutId);
25
+ throw error;
26
+ }
27
+ }
28
+ /**
29
+ * Call OpenRouter API for AI assistance
30
+ */
31
+ async function callOpenRouter(prompt, maxTokens = 1000, timeoutMs = 12000) {
32
+ const apiKey = process.env.OPENROUTER_API_KEY;
33
+ if (!apiKey)
34
+ return null;
35
+ try {
36
+ const response = await fetchWithTimeout('https://openrouter.ai/api/v1/chat/completions', {
37
+ method: 'POST',
38
+ headers: {
39
+ 'Content-Type': 'application/json',
40
+ 'Authorization': `Bearer ${apiKey}`,
41
+ },
42
+ body: JSON.stringify({
43
+ model: 'openai/gpt-4o-mini',
44
+ messages: [
45
+ {
46
+ role: 'user',
47
+ content: prompt,
48
+ },
49
+ ],
50
+ max_tokens: maxTokens,
51
+ temperature: 0.3,
52
+ }),
53
+ }, timeoutMs);
54
+ if (response.ok) {
55
+ const data = (await response.json());
56
+ return data.choices[0].message.content.trim();
57
+ }
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ return null;
63
+ }
64
+ /**
65
+ * Call Claude Code CLI for AI assistance
66
+ */
67
+ async function callClaudeCode(prompt, timeoutMs = 15000) {
68
+ try {
69
+ const result = execSync(`echo "${prompt.replace(/"/g, '\\"')}" | claude --no-interactive --max-turns 1 2>/dev/null`, {
70
+ encoding: 'utf-8',
71
+ stdio: 'pipe',
72
+ timeout: timeoutMs,
73
+ });
74
+ return result.trim() || null;
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ /**
81
+ * Get comprehensive git diff with context for commit message generation
82
+ */
83
+ export function getComprehensiveDiff(repoPath) {
84
+ try {
85
+ // Get staged changes first, then fall back to unstaged if nothing staged
86
+ let diff = execSync('git diff --cached', {
87
+ cwd: repoPath,
88
+ encoding: 'utf-8',
89
+ stdio: 'pipe',
90
+ });
91
+ let staged = true;
92
+ // If nothing staged, check unstaged changes
93
+ if (!diff.trim()) {
94
+ diff = execSync('git diff', {
95
+ cwd: repoPath,
96
+ encoding: 'utf-8',
97
+ stdio: 'pipe',
98
+ });
99
+ staged = false;
100
+ }
101
+ // Get file summary
102
+ const statusCmd = staged ? 'git diff --cached --stat' : 'git diff --stat';
103
+ const summary = execSync(statusCmd, {
104
+ cwd: repoPath,
105
+ encoding: 'utf-8',
106
+ stdio: 'pipe',
107
+ });
108
+ return { diff, summary };
109
+ }
110
+ catch {
111
+ return { diff: '', summary: '' };
112
+ }
113
+ }
114
+ /**
115
+ * Get AI-generated commit message from git diff
116
+ * Returns null if generation fails, so caller can handle fallback
117
+ */
118
+ export async function generateCommitMessage(repoPath) {
119
+ try {
120
+ const { diff, summary } = getComprehensiveDiff(repoPath);
121
+ if (!diff.trim()) {
122
+ return null; // No changes, let caller handle
123
+ }
124
+ // Include more context (up to 5000 chars) for better commit messages
125
+ const contextDiff = diff.length > 5000 ? diff.slice(0, 5000) + '\n...(truncated)' : diff;
126
+ const prompt = `Generate a concise conventional commit message (e.g., "feat: add feature", "fix: bug") for these changes. Respond with ONLY the commit message, nothing else:\n\nFile changes:\n${summary}\n\nDiff:\n${contextDiff}`;
127
+ // Try OpenRouter first
128
+ let message = await callOpenRouter(prompt, 50);
129
+ if (message) {
130
+ // Clean up the response
131
+ message = message.replace(/^["']|["']$/g, '').trim();
132
+ if (message && message.length < 100) {
133
+ return message;
134
+ }
135
+ }
136
+ // Try Claude Code as fallback
137
+ message = await callClaudeCode(prompt);
138
+ if (message) {
139
+ message = message.replace(/^["']|["']$/g, '').trim();
140
+ if (message && message.length < 100) {
141
+ return message;
142
+ }
143
+ }
144
+ // Both methods failed
145
+ return null;
146
+ }
147
+ catch {
148
+ return null;
149
+ }
150
+ }
151
+ /**
152
+ * Read a file with conflict markers
153
+ */
154
+ async function readConflictFile(filePath) {
155
+ return await fs.readFile(filePath, 'utf-8');
156
+ }
157
+ function parseConflicts(content) {
158
+ const sections = [];
159
+ const lines = content.split('\n');
160
+ let i = 0;
161
+ while (i < lines.length) {
162
+ if (lines[i].startsWith('<<<<<<<')) {
163
+ let ours = '';
164
+ let theirs = '';
165
+ let base = '';
166
+ i++;
167
+ // Read "ours" section
168
+ while (i < lines.length && !lines[i].startsWith('=======')) {
169
+ ours += lines[i] + '\n';
170
+ i++;
171
+ }
172
+ i++; // Skip =======
173
+ // Read "theirs" section (or base if 3-way)
174
+ while (i < lines.length && !lines[i].startsWith('>>>>>>>') && !lines[i].startsWith('|||||||')) {
175
+ if (lines[i].startsWith('|||||||')) {
176
+ break;
177
+ }
178
+ theirs += lines[i] + '\n';
179
+ i++;
180
+ }
181
+ // Check for 3-way merge (with base)
182
+ if (i < lines.length && lines[i].startsWith('|||||||')) {
183
+ base = theirs;
184
+ theirs = '';
185
+ i++; // Skip |||||||
186
+ while (i < lines.length && !lines[i].startsWith('>>>>>>>')) {
187
+ theirs += lines[i] + '\n';
188
+ i++;
189
+ }
190
+ }
191
+ sections.push({
192
+ ours: ours.trim(),
193
+ theirs: theirs.trim(),
194
+ base: base.trim() || undefined,
195
+ });
196
+ }
197
+ i++;
198
+ }
199
+ return sections;
200
+ }
201
+ /**
202
+ * Use AI to resolve a merge conflict
203
+ */
204
+ export async function aiResolveConflict(filePath, repoPath) {
205
+ try {
206
+ const fullPath = path.join(repoPath, filePath);
207
+ const content = await readConflictFile(fullPath);
208
+ const conflicts = parseConflicts(content);
209
+ if (conflicts.length === 0) {
210
+ return {
211
+ success: true,
212
+ resolvedContent: content,
213
+ };
214
+ }
215
+ // For now, use a simple strategy: try to intelligently merge both versions
216
+ const prompt = `You are resolving a git merge conflict. Below is a file with conflict markers.
217
+
218
+ Your task: Provide the COMPLETE resolved file content that intelligently combines both versions. Do NOT include any explanations, just the final file content.
219
+
220
+ File: ${filePath}
221
+
222
+ Conflict sections:
223
+ ${conflicts
224
+ .map((c, i) => `
225
+ Conflict ${i + 1}:
226
+ <<<<<<< OURS (current branch)
227
+ ${c.ours}
228
+ =======
229
+ >>>>>>> THEIRS (incoming branch)
230
+ ${c.theirs}
231
+ `)
232
+ .join('\n')}
233
+
234
+ Full file content:
235
+ ${content}
236
+
237
+ Respond with ONLY the complete resolved file content, no explanations:`;
238
+ // Try OpenRouter with longer timeout for conflict resolution
239
+ let resolved = await callOpenRouter(prompt, 2000, 20000);
240
+ if (!resolved) {
241
+ // Try Claude Code with longer timeout for conflict resolution
242
+ resolved = await callClaudeCode(prompt, 20000);
243
+ }
244
+ if (!resolved) {
245
+ return {
246
+ success: false,
247
+ error: 'AI resolution unavailable',
248
+ };
249
+ }
250
+ // Remove any markdown code fences if present
251
+ resolved = resolved.replace(/^```[\w]*\n/gm, '').replace(/\n```$/gm, '');
252
+ return {
253
+ success: true,
254
+ resolvedContent: resolved,
255
+ };
256
+ }
257
+ catch (error) {
258
+ return {
259
+ success: false,
260
+ error: error instanceof Error ? error.message : String(error),
261
+ };
262
+ }
263
+ }
264
+ /**
265
+ * Resolve all conflicts in a repository using AI
266
+ */
267
+ export async function aiResolveAllConflicts(repoPath, conflictFiles) {
268
+ const resolvedFiles = [];
269
+ const failedFiles = [];
270
+ for (const file of conflictFiles) {
271
+ const result = await aiResolveConflict(file, repoPath);
272
+ if (result.success && result.resolvedContent) {
273
+ try {
274
+ // Write resolved content
275
+ await fs.writeFile(path.join(repoPath, file), result.resolvedContent, 'utf-8');
276
+ // Stage the resolved file
277
+ execSync(`git add "${file}"`, {
278
+ cwd: repoPath,
279
+ stdio: 'pipe',
280
+ });
281
+ resolvedFiles.push(file);
282
+ }
283
+ catch {
284
+ failedFiles.push(file);
285
+ }
286
+ }
287
+ else {
288
+ failedFiles.push(file);
289
+ }
290
+ }
291
+ return {
292
+ success: failedFiles.length === 0,
293
+ resolvedFiles,
294
+ failedFiles,
295
+ error: failedFiles.length > 0 ? `Failed to resolve: ${failedFiles.join(', ')}` : undefined,
296
+ };
297
+ }
298
+ //# sourceMappingURL=aiMerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiMerge.js","sourceRoot":"","sources":["../../src/utils/aiMerge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Conflict Resolution Pane Creation
3
+ *
4
+ * Utilities for creating a new pane specifically for AI-assisted merge conflict resolution
5
+ */
6
+ import type { DmuxPane } from '../types.js';
7
+ export interface ConflictResolutionPaneOptions {
8
+ sourceBranch: string;
9
+ targetBranch: string;
10
+ targetRepoPath: string;
11
+ agent: 'claude' | 'opencode';
12
+ projectName: string;
13
+ existingPanes: DmuxPane[];
14
+ }
15
+ /**
16
+ * Create a pane for resolving merge conflicts with AI assistance
17
+ */
18
+ export declare function createConflictResolutionPane(options: ConflictResolutionPaneOptions): Promise<DmuxPane>;
19
+ //# sourceMappingURL=conflictResolutionPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflictResolutionPane.d.ts","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAgInB"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Conflict Resolution Pane Creation
3
+ *
4
+ * Utilities for creating a new pane specifically for AI-assisted merge conflict resolution
5
+ */
6
+ import { execSync } from 'child_process';
7
+ import { applySmartLayout } from './tmux.js';
8
+ /**
9
+ * Create a pane for resolving merge conflicts with AI assistance
10
+ */
11
+ export async function createConflictResolutionPane(options) {
12
+ const { sourceBranch, targetBranch, targetRepoPath, agent, projectName, existingPanes } = options;
13
+ // Generate slug for this conflict resolution session
14
+ const slug = `merge-${sourceBranch}-into-${targetBranch}`.substring(0, 50);
15
+ // Get current pane info
16
+ const originalPaneId = execSync('tmux display-message -p "#{pane_id}"', {
17
+ encoding: 'utf-8',
18
+ }).trim();
19
+ // Get current pane count
20
+ const paneCount = parseInt(execSync('tmux list-panes | wc -l', { encoding: 'utf-8' }).trim());
21
+ // Enable pane borders to show titles
22
+ try {
23
+ execSync(`tmux set-option -g pane-border-status top`, { stdio: 'pipe' });
24
+ }
25
+ catch {
26
+ // Ignore if already set or fails
27
+ }
28
+ // Create new pane
29
+ const paneInfo = execSync(`tmux split-window -h -P -F '#{pane_id}'`, {
30
+ encoding: 'utf-8',
31
+ }).trim();
32
+ // Wait for pane creation to settle
33
+ await new Promise((resolve) => setTimeout(resolve, 500));
34
+ // Set pane title
35
+ try {
36
+ execSync(`tmux select-pane -t '${paneInfo}' -T "${slug}"`, {
37
+ stdio: 'pipe',
38
+ });
39
+ }
40
+ catch {
41
+ // Ignore if setting title fails
42
+ }
43
+ // Apply smart layout based on pane count
44
+ const newPaneCount = paneCount + 1;
45
+ applySmartLayout(newPaneCount);
46
+ // CD into the target repository (where we'll resolve conflicts)
47
+ try {
48
+ execSync(`tmux send-keys -t '${paneInfo}' 'cd "${targetRepoPath}"' Enter`, {
49
+ stdio: 'pipe',
50
+ });
51
+ await new Promise((resolve) => setTimeout(resolve, 500));
52
+ }
53
+ catch (error) {
54
+ console.error('[conflictResolutionPane] Failed to cd into target repo:', error);
55
+ }
56
+ // Construct the AI prompt for conflict resolution
57
+ const prompt = `There are conflicts merging ${sourceBranch} into ${targetBranch}. Both are valid changes, so please keep both feature sets and merge them intelligently. Check git status to see the conflicting files, then resolve each conflict to preserve both sets of changes.`;
58
+ // Launch agent with the conflict resolution prompt
59
+ if (agent === 'claude') {
60
+ const escapedPrompt = prompt
61
+ .replace(/\\/g, '\\\\')
62
+ .replace(/"/g, '\\"')
63
+ .replace(/`/g, '\\`')
64
+ .replace(/\$/g, '\\$');
65
+ const claudeCmd = `claude "${escapedPrompt}" --permission-mode=acceptEdits`;
66
+ const escapedCmd = claudeCmd.replace(/'/g, "'\\''");
67
+ execSync(`tmux send-keys -t '${paneInfo}' '${escapedCmd}'`, {
68
+ stdio: 'pipe',
69
+ });
70
+ execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
71
+ // Auto-approve trust prompts for Claude
72
+ autoApproveTrustPrompt(paneInfo).catch(() => {
73
+ // Ignore errors in background monitoring
74
+ });
75
+ }
76
+ else if (agent === 'opencode') {
77
+ const openCoderCmd = `opencode`;
78
+ const escapedOpenCmd = openCoderCmd.replace(/'/g, "'\\''");
79
+ execSync(`tmux send-keys -t '${paneInfo}' '${escapedOpenCmd}'`, {
80
+ stdio: 'pipe',
81
+ });
82
+ execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
83
+ // Wait for opencode to start, then paste the prompt
84
+ await new Promise((resolve) => setTimeout(resolve, 1500));
85
+ const bufName = `dmux_prompt_${Date.now()}`;
86
+ const promptEsc = prompt.replace(/\\/g, '\\\\').replace(/'/g, "'\\''");
87
+ execSync(`tmux set-buffer -b '${bufName}' -- '${promptEsc}'`, {
88
+ stdio: 'pipe',
89
+ });
90
+ execSync(`tmux paste-buffer -b '${bufName}' -t '${paneInfo}'`, {
91
+ stdio: 'pipe',
92
+ });
93
+ await new Promise((resolve) => setTimeout(resolve, 200));
94
+ execSync(`tmux delete-buffer -b '${bufName}'`, { stdio: 'pipe' });
95
+ execSync(`tmux send-keys -t '${paneInfo}' Enter`, { stdio: 'pipe' });
96
+ }
97
+ // Keep focus on the new pane
98
+ execSync(`tmux select-pane -t '${paneInfo}'`, { stdio: 'pipe' });
99
+ // Create the pane object
100
+ const newPane = {
101
+ id: `dmux-${Date.now()}`,
102
+ slug,
103
+ prompt,
104
+ paneId: paneInfo,
105
+ agent,
106
+ // Note: No worktreePath - this pane operates directly in the target repo
107
+ };
108
+ // Switch back to the original pane
109
+ execSync(`tmux select-pane -t '${originalPaneId}'`, { stdio: 'pipe' });
110
+ // Re-set the title for the dmux pane
111
+ try {
112
+ execSync(`tmux select-pane -t '${originalPaneId}' -T "dmux-${projectName}"`, { stdio: 'pipe' });
113
+ }
114
+ catch {
115
+ // Ignore if setting title fails
116
+ }
117
+ return newPane;
118
+ }
119
+ /**
120
+ * Auto-approve Claude trust prompts (reused from paneCreation.ts)
121
+ */
122
+ async function autoApproveTrustPrompt(paneInfo) {
123
+ // Wait for Claude to start up before checking for prompts
124
+ await new Promise((resolve) => setTimeout(resolve, 800));
125
+ const maxChecks = 100;
126
+ const checkInterval = 100;
127
+ let lastContent = '';
128
+ let stableContentCount = 0;
129
+ let promptHandled = false;
130
+ const trustPromptPatterns = [
131
+ /Do you trust the files in this folder\?/i,
132
+ /Trust the files in this workspace\?/i,
133
+ /Do you trust the authors of the files/i,
134
+ /Do you want to trust this workspace\?/i,
135
+ /trust.*files.*folder/i,
136
+ /trust.*workspace/i,
137
+ /Do you trust/i,
138
+ /Trust this folder/i,
139
+ /trust.*directory/i,
140
+ /permission.*grant/i,
141
+ /allow.*access/i,
142
+ /workspace.*trust/i,
143
+ /accept.*edits/i,
144
+ /permission.*mode/i,
145
+ /allow.*claude/i,
146
+ /\[y\/n\]/i,
147
+ /\(y\/n\)/i,
148
+ /Yes\/No/i,
149
+ /\[Y\/n\]/i,
150
+ /press.*enter.*accept/i,
151
+ /press.*enter.*continue/i,
152
+ /❯\s*1\.\s*Yes,\s*proceed/i,
153
+ /Enter to confirm.*Esc to exit/i,
154
+ /1\.\s*Yes,\s*proceed/i,
155
+ /2\.\s*No,\s*exit/i,
156
+ ];
157
+ for (let i = 0; i < maxChecks; i++) {
158
+ await new Promise((resolve) => setTimeout(resolve, checkInterval));
159
+ try {
160
+ const paneContent = execSync(`tmux capture-pane -t '${paneInfo}' -p -S -30`, { encoding: 'utf-8', stdio: 'pipe' });
161
+ if (paneContent === lastContent) {
162
+ stableContentCount++;
163
+ }
164
+ else {
165
+ stableContentCount = 0;
166
+ lastContent = paneContent;
167
+ }
168
+ const hasTrustPrompt = trustPromptPatterns.some((pattern) => pattern.test(paneContent));
169
+ const hasClaudePermissionPrompt = paneContent.includes('Do you trust') ||
170
+ paneContent.includes('trust the files') ||
171
+ paneContent.includes('permission') ||
172
+ paneContent.includes('allow') ||
173
+ (paneContent.includes('folder') && paneContent.includes('?'));
174
+ if ((hasTrustPrompt || hasClaudePermissionPrompt) && !promptHandled) {
175
+ if (stableContentCount >= 2) {
176
+ const isNewClaudeFormat = /❯\s*1\.\s*Yes,\s*proceed/i.test(paneContent) ||
177
+ /Enter to confirm.*Esc to exit/i.test(paneContent);
178
+ if (isNewClaudeFormat) {
179
+ execSync(`tmux send-keys -t '${paneInfo}' Enter`, {
180
+ stdio: 'pipe',
181
+ });
182
+ }
183
+ else {
184
+ execSync(`tmux send-keys -t '${paneInfo}' 'y'`, { stdio: 'pipe' });
185
+ await new Promise((resolve) => setTimeout(resolve, 50));
186
+ execSync(`tmux send-keys -t '${paneInfo}' Enter`, {
187
+ stdio: 'pipe',
188
+ });
189
+ await new Promise((resolve) => setTimeout(resolve, 100));
190
+ execSync(`tmux send-keys -t '${paneInfo}' Enter`, {
191
+ stdio: 'pipe',
192
+ });
193
+ }
194
+ promptHandled = true;
195
+ await new Promise((resolve) => setTimeout(resolve, 500));
196
+ const updatedContent = execSync(`tmux capture-pane -t '${paneInfo}' -p -S -10`, { encoding: 'utf-8', stdio: 'pipe' });
197
+ const promptGone = !trustPromptPatterns.some((p) => p.test(updatedContent));
198
+ if (promptGone) {
199
+ break;
200
+ }
201
+ }
202
+ }
203
+ if (!hasTrustPrompt &&
204
+ !hasClaudePermissionPrompt &&
205
+ (paneContent.includes('Claude') || paneContent.includes('Assistant'))) {
206
+ break;
207
+ }
208
+ }
209
+ catch {
210
+ // Continue checking
211
+ }
212
+ }
213
+ }
214
+ //# sourceMappingURL=conflictResolutionPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflictResolutionPane.js","sourceRoot":"","sources":["../../src/utils/conflictResolutionPane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAW7C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAsC;IAEtC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAElG,qDAAqD;IACrD,MAAM,IAAI,GAAG,SAAS,YAAY,SAAS,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3E,wBAAwB;IACxB,MAAM,cAAc,GAAG,QAAQ,CAAC,sCAAsC,EAAE;QACtE,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC,IAAI,EAAE,CAAC;IAEV,yBAAyB;IACzB,MAAM,SAAS,GAAG,QAAQ,CACxB,QAAQ,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAClE,CAAC;IAEF,qCAAqC;IACrC,IAAI,CAAC;QACH,QAAQ,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,kBAAkB;IAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,yCAAyC,EAAE;QACnE,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC,IAAI,EAAE,CAAC;IAEV,mCAAmC;IACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzD,iBAAiB;IACjB,IAAI,CAAC;QACH,QAAQ,CAAC,wBAAwB,QAAQ,SAAS,IAAI,GAAG,EAAE;YACzD,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,yCAAyC;IACzC,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,CAAC;IACnC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAE/B,gEAAgE;IAChE,IAAI,CAAC;QACH,QAAQ,CAAC,sBAAsB,QAAQ,UAAU,cAAc,UAAU,EAAE;YACzE,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC;IAED,kDAAkD;IAClD,MAAM,MAAM,GAAG,+BAA+B,YAAY,SAAS,YAAY,sMAAsM,CAAC;IAEtR,mDAAmD;IACnD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,MAAM;aACzB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,WAAW,aAAa,iCAAiC,CAAC;QAC5E,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpD,QAAQ,CAAC,sBAAsB,QAAQ,MAAM,UAAU,GAAG,EAAE;YAC1D,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,QAAQ,CAAC,sBAAsB,QAAQ,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAErE,wCAAwC;QACxC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC1C,yCAAyC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,UAAU,CAAC;QAChC,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE3D,QAAQ,CAAC,sBAAsB,QAAQ,MAAM,cAAc,GAAG,EAAE;YAC9D,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,QAAQ,CAAC,sBAAsB,QAAQ,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAErE,oDAAoD;QACpD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvE,QAAQ,CAAC,uBAAuB,OAAO,SAAS,SAAS,GAAG,EAAE;YAC5D,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,QAAQ,CAAC,yBAAyB,OAAO,SAAS,QAAQ,GAAG,EAAE;YAC7D,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,QAAQ,CAAC,0BAA0B,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,QAAQ,CAAC,sBAAsB,QAAQ,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,6BAA6B;IAC7B,QAAQ,CAAC,wBAAwB,QAAQ,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEjE,yBAAyB;IACzB,MAAM,OAAO,GAAa;QACxB,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;QACxB,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,QAAQ;QAChB,KAAK;QACL,yEAAyE;KAC1E,CAAC;IAEF,mCAAmC;IACnC,QAAQ,CAAC,wBAAwB,cAAc,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvE,qCAAqC;IACrC,IAAI,CAAC;QACH,QAAQ,CACN,wBAAwB,cAAc,cAAc,WAAW,GAAG,EAClE,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IACpD,0DAA0D;IAC1D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzD,MAAM,SAAS,GAAG,GAAG,CAAC;IACtB,MAAM,aAAa,GAAG,GAAG,CAAC;IAC1B,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,mBAAmB,GAAG;QAC1B,0CAA0C;QAC1C,sCAAsC;QACtC,wCAAwC;QACxC,wCAAwC;QACxC,uBAAuB;QACvB,mBAAmB;QACnB,eAAe;QACf,oBAAoB;QACpB,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,mBAAmB;QACnB,gBAAgB;QAChB,mBAAmB;QACnB,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,UAAU;QACV,WAAW;QACX,uBAAuB;QACvB,yBAAyB;QACzB,2BAA2B;QAC3B,gCAAgC;QAChC,uBAAuB;QACvB,mBAAmB;KACpB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,QAAQ,CAC1B,yBAAyB,QAAQ,aAAa,EAC9C,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CACrC,CAAC;YAEF,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;gBAChC,kBAAkB,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,kBAAkB,GAAG,CAAC,CAAC;gBACvB,WAAW,GAAG,WAAW,CAAC;YAC5B,CAAC;YAED,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1B,CAAC;YAEF,MAAM,yBAAyB,GAC7B,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACpC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACvC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAClC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC7B,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhE,IAAI,CAAC,cAAc,IAAI,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpE,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,iBAAiB,GACrB,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC;wBAC7C,gCAAgC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAErD,IAAI,iBAAiB,EAAE,CAAC;wBACtB,QAAQ,CAAC,sBAAsB,QAAQ,SAAS,EAAE;4BAChD,KAAK,EAAE,MAAM;yBACd,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,sBAAsB,QAAQ,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;wBACnE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;wBACxD,QAAQ,CAAC,sBAAsB,QAAQ,SAAS,EAAE;4BAChD,KAAK,EAAE,MAAM;yBACd,CAAC,CAAC;wBACH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;wBACzD,QAAQ,CAAC,sBAAsB,QAAQ,SAAS,EAAE;4BAChD,KAAK,EAAE,MAAM;yBACd,CAAC,CAAC;oBACL,CAAC;oBAED,aAAa,GAAG,IAAI,CAAC;oBACrB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;oBAEzD,MAAM,cAAc,GAAG,QAAQ,CAC7B,yBAAyB,QAAQ,aAAa,EAC9C,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CACrC,CAAC;oBAEF,MAAM,UAAU,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACjD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CACvB,CAAC;oBAEF,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IACE,CAAC,cAAc;gBACf,CAAC,yBAAyB;gBAC1B,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EACrE,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Merge Execution Utilities
3
+ *
4
+ * Handles the actual merge operations with proper error handling
5
+ */
6
+ export interface MergeResult {
7
+ success: boolean;
8
+ error?: string;
9
+ conflictFiles?: string[];
10
+ needsManualResolution?: boolean;
11
+ }
12
+ /**
13
+ * Merge main branch into worktree branch
14
+ * This is step 1 of the two-phase merge: get latest changes from main
15
+ */
16
+ export declare function mergeMainIntoWorktree(worktreePath: string, mainBranch: string): MergeResult;
17
+ /**
18
+ * Merge worktree branch into main (should be clean after resolving conflicts)
19
+ * This is step 2 of the two-phase merge: bring changes back to main
20
+ */
21
+ export declare function mergeWorktreeIntoMain(mainRepoPath: string, worktreeBranch: string): MergeResult;
22
+ /**
23
+ * Get list of files with merge conflicts
24
+ */
25
+ export declare function getConflictingFiles(repoPath: string): string[];
26
+ /**
27
+ * Abort an in-progress merge
28
+ */
29
+ export declare function abortMerge(repoPath: string): {
30
+ success: boolean;
31
+ error?: string;
32
+ };
33
+ /**
34
+ * Check if repository is in a merge state
35
+ */
36
+ export declare function isInMergeState(repoPath: string): boolean;
37
+ /**
38
+ * Complete a merge after conflicts are resolved
39
+ */
40
+ export declare function completeMerge(repoPath: string, message?: string): MergeResult;
41
+ /**
42
+ * Clean up worktree and branch after successful merge
43
+ */
44
+ export declare function cleanupAfterMerge(mainRepoPath: string, worktreePath: string, branchName: string): {
45
+ success: boolean;
46
+ error?: string;
47
+ };
48
+ /**
49
+ * Get merge status summary for user display
50
+ */
51
+ export declare function getMergeStatus(repoPath: string): string;
52
+ //# sourceMappingURL=mergeExecution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeExecution.d.ts","sourceRoot":"","sources":["../../src/utils/mergeExecution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,WAAW,CA6Bb;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,WAAW,CA4Bb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAe9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAajF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAaxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CA2B7E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqBtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYvD"}