dmux 2.2.1 → 3.0.1

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 (201) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +433 -179
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/MergePane.d.ts.map +1 -1
  5. package/dist/MergePane.js +4 -6
  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 +3 -1
  87. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  88. package/dist/hooks/usePaneCreation.js +49 -99
  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 +6 -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 +2 -1
  97. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  98. package/dist/hooks/useWorktreeActions.js +9 -1
  99. package/dist/hooks/useWorktreeActions.js.map +1 -1
  100. package/dist/index.js +48 -3
  101. package/dist/index.js.map +1 -1
  102. package/dist/server/actionsApi.d.ts +37 -0
  103. package/dist/server/actionsApi.d.ts.map +1 -0
  104. package/dist/server/actionsApi.js +256 -0
  105. package/dist/server/actionsApi.js.map +1 -0
  106. package/dist/server/embedded-assets.d.ts +13 -0
  107. package/dist/server/embedded-assets.d.ts.map +1 -0
  108. package/dist/server/embedded-assets.js +5038 -0
  109. package/dist/server/embedded-assets.js.map +1 -0
  110. package/dist/server/index.d.ts +21 -0
  111. package/dist/server/index.d.ts.map +1 -0
  112. package/dist/server/index.js +99 -0
  113. package/dist/server/index.js.map +1 -0
  114. package/dist/server/routes.d.ts +3 -0
  115. package/dist/server/routes.d.ts.map +1 -0
  116. package/dist/server/routes.js +672 -0
  117. package/dist/server/routes.js.map +1 -0
  118. package/dist/server/static.d.ts +6 -0
  119. package/dist/server/static.d.ts.map +1 -0
  120. package/dist/server/static.js +3040 -0
  121. package/dist/server/static.js.map +1 -0
  122. package/dist/services/ConfigWatcher.d.ts +20 -0
  123. package/dist/services/ConfigWatcher.d.ts.map +1 -0
  124. package/dist/services/ConfigWatcher.js +75 -0
  125. package/dist/services/ConfigWatcher.js.map +1 -0
  126. package/dist/services/PaneWorkerManager.d.ts +69 -0
  127. package/dist/services/PaneWorkerManager.d.ts.map +1 -0
  128. package/dist/services/PaneWorkerManager.js +272 -0
  129. package/dist/services/PaneWorkerManager.js.map +1 -0
  130. package/dist/services/StatusDetector.d.ts +87 -0
  131. package/dist/services/StatusDetector.d.ts.map +1 -0
  132. package/dist/services/StatusDetector.js +387 -0
  133. package/dist/services/StatusDetector.js.map +1 -0
  134. package/dist/services/TerminalDiffer.d.ts +85 -0
  135. package/dist/services/TerminalDiffer.d.ts.map +1 -0
  136. package/dist/services/TerminalDiffer.js +499 -0
  137. package/dist/services/TerminalDiffer.js.map +1 -0
  138. package/dist/services/TerminalStreamer.d.ts +80 -0
  139. package/dist/services/TerminalStreamer.d.ts.map +1 -0
  140. package/dist/services/TerminalStreamer.js +490 -0
  141. package/dist/services/TerminalStreamer.js.map +1 -0
  142. package/dist/services/TunnelService.d.ts +9 -0
  143. package/dist/services/TunnelService.d.ts.map +1 -0
  144. package/dist/services/TunnelService.js +34 -0
  145. package/dist/services/TunnelService.js.map +1 -0
  146. package/dist/services/WorkerMessageBus.d.ts +48 -0
  147. package/dist/services/WorkerMessageBus.d.ts.map +1 -0
  148. package/dist/services/WorkerMessageBus.js +120 -0
  149. package/dist/services/WorkerMessageBus.js.map +1 -0
  150. package/dist/shared/StateManager.d.ts +34 -0
  151. package/dist/shared/StateManager.d.ts.map +1 -0
  152. package/dist/shared/StateManager.js +108 -0
  153. package/dist/shared/StateManager.js.map +1 -0
  154. package/dist/shared/StreamProtocol.d.ts +75 -0
  155. package/dist/shared/StreamProtocol.d.ts.map +1 -0
  156. package/dist/shared/StreamProtocol.js +37 -0
  157. package/dist/shared/StreamProtocol.js.map +1 -0
  158. package/dist/terminal.html +17 -0
  159. package/dist/terminal.js +3 -0
  160. package/dist/types.d.ts +21 -1
  161. package/dist/types.d.ts.map +1 -1
  162. package/dist/utils/agentDetection.d.ts +18 -0
  163. package/dist/utils/agentDetection.d.ts.map +1 -0
  164. package/dist/utils/agentDetection.js +73 -0
  165. package/dist/utils/agentDetection.js.map +1 -0
  166. package/dist/utils/aiMerge.d.ts +35 -0
  167. package/dist/utils/aiMerge.d.ts.map +1 -0
  168. package/dist/utils/aiMerge.js +302 -0
  169. package/dist/utils/aiMerge.js.map +1 -0
  170. package/dist/utils/conflictResolutionPane.d.ts +19 -0
  171. package/dist/utils/conflictResolutionPane.d.ts.map +1 -0
  172. package/dist/utils/conflictResolutionPane.js +214 -0
  173. package/dist/utils/conflictResolutionPane.js.map +1 -0
  174. package/dist/utils/mergeExecution.d.ts +52 -0
  175. package/dist/utils/mergeExecution.d.ts.map +1 -0
  176. package/dist/utils/mergeExecution.js +192 -0
  177. package/dist/utils/mergeExecution.js.map +1 -0
  178. package/dist/utils/mergeValidation.d.ts +67 -0
  179. package/dist/utils/mergeValidation.d.ts.map +1 -0
  180. package/dist/utils/mergeValidation.js +213 -0
  181. package/dist/utils/mergeValidation.js.map +1 -0
  182. package/dist/utils/paneCreation.d.ts +17 -0
  183. package/dist/utils/paneCreation.d.ts.map +1 -0
  184. package/dist/utils/paneCreation.js +274 -0
  185. package/dist/utils/paneCreation.js.map +1 -0
  186. package/dist/utils/port.d.ts +5 -0
  187. package/dist/utils/port.d.ts.map +1 -0
  188. package/dist/utils/port.js +54 -0
  189. package/dist/utils/port.js.map +1 -0
  190. package/dist/utils/slug.d.ts.map +1 -1
  191. package/dist/utils/slug.js +32 -25
  192. package/dist/utils/slug.js.map +1 -1
  193. package/dist/workers/PaneWorker.d.ts +2 -0
  194. package/dist/workers/PaneWorker.d.ts.map +1 -0
  195. package/dist/workers/PaneWorker.js +362 -0
  196. package/dist/workers/PaneWorker.js.map +1 -0
  197. package/dist/workers/WorkerMessages.d.ts +36 -0
  198. package/dist/workers/WorkerMessages.d.ts.map +1 -0
  199. package/dist/workers/WorkerMessages.js +9 -0
  200. package/dist/workers/WorkerMessages.js.map +1 -0
  201. package/package.json +19 -5
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Merge Execution Utilities
3
+ *
4
+ * Handles the actual merge operations with proper error handling
5
+ */
6
+ import { execSync } from 'child_process';
7
+ /**
8
+ * Merge main branch into worktree branch
9
+ * This is step 1 of the two-phase merge: get latest changes from main
10
+ */
11
+ export function mergeMainIntoWorktree(worktreePath, mainBranch) {
12
+ try {
13
+ execSync(`git merge ${mainBranch} --no-edit`, {
14
+ cwd: worktreePath,
15
+ stdio: 'pipe',
16
+ });
17
+ return { success: true };
18
+ }
19
+ catch (error) {
20
+ const errorMessage = error instanceof Error ? error.message : String(error);
21
+ // Check if it's a merge conflict
22
+ if (errorMessage.includes('CONFLICT') || errorMessage.includes('conflict')) {
23
+ // Get list of conflicting files
24
+ const conflictFiles = getConflictingFiles(worktreePath);
25
+ return {
26
+ success: false,
27
+ error: 'Merge conflicts detected',
28
+ conflictFiles,
29
+ needsManualResolution: true,
30
+ };
31
+ }
32
+ return {
33
+ success: false,
34
+ error: errorMessage,
35
+ };
36
+ }
37
+ }
38
+ /**
39
+ * Merge worktree branch into main (should be clean after resolving conflicts)
40
+ * This is step 2 of the two-phase merge: bring changes back to main
41
+ */
42
+ export function mergeWorktreeIntoMain(mainRepoPath, worktreeBranch) {
43
+ try {
44
+ execSync(`git merge ${worktreeBranch} --no-edit`, {
45
+ cwd: mainRepoPath,
46
+ stdio: 'pipe',
47
+ });
48
+ return { success: true };
49
+ }
50
+ catch (error) {
51
+ const errorMessage = error instanceof Error ? error.message : String(error);
52
+ // This shouldn't have conflicts if we properly merged main into worktree first
53
+ if (errorMessage.includes('CONFLICT') || errorMessage.includes('conflict')) {
54
+ const conflictFiles = getConflictingFiles(mainRepoPath);
55
+ return {
56
+ success: false,
57
+ error: 'Unexpected merge conflicts in main',
58
+ conflictFiles,
59
+ needsManualResolution: true,
60
+ };
61
+ }
62
+ return {
63
+ success: false,
64
+ error: errorMessage,
65
+ };
66
+ }
67
+ }
68
+ /**
69
+ * Get list of files with merge conflicts
70
+ */
71
+ export function getConflictingFiles(repoPath) {
72
+ try {
73
+ const output = execSync('git diff --name-only --diff-filter=U', {
74
+ cwd: repoPath,
75
+ encoding: 'utf-8',
76
+ stdio: 'pipe',
77
+ });
78
+ return output
79
+ .trim()
80
+ .split('\n')
81
+ .filter(line => line.trim());
82
+ }
83
+ catch {
84
+ return [];
85
+ }
86
+ }
87
+ /**
88
+ * Abort an in-progress merge
89
+ */
90
+ export function abortMerge(repoPath) {
91
+ try {
92
+ execSync('git merge --abort', {
93
+ cwd: repoPath,
94
+ stdio: 'pipe',
95
+ });
96
+ return { success: true };
97
+ }
98
+ catch (error) {
99
+ return {
100
+ success: false,
101
+ error: error instanceof Error ? error.message : String(error),
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Check if repository is in a merge state
107
+ */
108
+ export function isInMergeState(repoPath) {
109
+ try {
110
+ const output = execSync('git status', {
111
+ cwd: repoPath,
112
+ encoding: 'utf-8',
113
+ stdio: 'pipe',
114
+ });
115
+ return output.includes('You have unmerged paths') ||
116
+ output.includes('All conflicts fixed but you are still merging');
117
+ }
118
+ catch {
119
+ return false;
120
+ }
121
+ }
122
+ /**
123
+ * Complete a merge after conflicts are resolved
124
+ */
125
+ export function completeMerge(repoPath, message) {
126
+ try {
127
+ // Check if all conflicts are resolved
128
+ const conflictFiles = getConflictingFiles(repoPath);
129
+ if (conflictFiles.length > 0) {
130
+ return {
131
+ success: false,
132
+ error: 'Not all conflicts have been resolved',
133
+ conflictFiles,
134
+ needsManualResolution: true,
135
+ };
136
+ }
137
+ // Complete the merge
138
+ const commitMsg = message || 'Merge branch with resolved conflicts';
139
+ execSync(`git commit -m "${commitMsg.replace(/"/g, '\\"')}"`, {
140
+ cwd: repoPath,
141
+ stdio: 'pipe',
142
+ });
143
+ return { success: true };
144
+ }
145
+ catch (error) {
146
+ return {
147
+ success: false,
148
+ error: error instanceof Error ? error.message : String(error),
149
+ };
150
+ }
151
+ }
152
+ /**
153
+ * Clean up worktree and branch after successful merge
154
+ */
155
+ export function cleanupAfterMerge(mainRepoPath, worktreePath, branchName) {
156
+ try {
157
+ // Remove worktree
158
+ execSync(`git worktree remove "${worktreePath}" --force`, {
159
+ cwd: mainRepoPath,
160
+ stdio: 'pipe',
161
+ });
162
+ // Delete branch (use -d for safety, it will fail if not merged)
163
+ execSync(`git branch -d ${branchName}`, {
164
+ cwd: mainRepoPath,
165
+ stdio: 'pipe',
166
+ });
167
+ return { success: true };
168
+ }
169
+ catch (error) {
170
+ return {
171
+ success: false,
172
+ error: error instanceof Error ? error.message : String(error),
173
+ };
174
+ }
175
+ }
176
+ /**
177
+ * Get merge status summary for user display
178
+ */
179
+ export function getMergeStatus(repoPath) {
180
+ try {
181
+ const output = execSync('git status --short', {
182
+ cwd: repoPath,
183
+ encoding: 'utf-8',
184
+ stdio: 'pipe',
185
+ });
186
+ return output.trim();
187
+ }
188
+ catch {
189
+ return '';
190
+ }
191
+ }
192
+ //# sourceMappingURL=mergeExecution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeExecution.js","sourceRoot":"","sources":["../../src/utils/mergeExecution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Merge Validation Utilities
3
+ *
4
+ * Provides comprehensive pre-merge validation to detect issues before attempting merge
5
+ */
6
+ export interface MergeValidationResult {
7
+ canMerge: boolean;
8
+ issues: MergeIssue[];
9
+ mainBranch: string;
10
+ worktreeBranch: string;
11
+ }
12
+ export interface MergeIssue {
13
+ type: 'main_dirty' | 'worktree_uncommitted' | 'merge_conflict' | 'nothing_to_merge';
14
+ message: string;
15
+ files?: string[];
16
+ canAutoResolve: boolean;
17
+ }
18
+ export interface GitStatus {
19
+ hasChanges: boolean;
20
+ files: string[];
21
+ summary: string;
22
+ }
23
+ /**
24
+ * Get git status for a repository
25
+ */
26
+ export declare function getGitStatus(repoPath: string): GitStatus;
27
+ /**
28
+ * Get current branch name
29
+ */
30
+ export declare function getCurrentBranch(repoPath: string): string;
31
+ /**
32
+ * Check if there are any commits to merge
33
+ */
34
+ export declare function hasCommitsToMerge(repoPath: string, fromBranch: string, toBranch: string): boolean;
35
+ /**
36
+ * Detect potential merge conflicts without actually merging
37
+ */
38
+ export declare function detectMergeConflicts(repoPath: string, sourceBranch: string, targetBranch: string): {
39
+ hasConflicts: boolean;
40
+ conflictFiles: string[];
41
+ };
42
+ /**
43
+ * Comprehensive pre-merge validation
44
+ */
45
+ export declare function validateMerge(mainRepoPath: string, worktreePath: string, worktreeBranch: string): MergeValidationResult;
46
+ /**
47
+ * Stage all uncommitted changes
48
+ */
49
+ export declare function stageAllChanges(repoPath: string): {
50
+ success: boolean;
51
+ error?: string;
52
+ };
53
+ /**
54
+ * Commit staged changes with a message
55
+ */
56
+ export declare function commitChanges(repoPath: string, message: string): {
57
+ success: boolean;
58
+ error?: string;
59
+ };
60
+ /**
61
+ * Stash uncommitted changes
62
+ */
63
+ export declare function stashChanges(repoPath: string): {
64
+ success: boolean;
65
+ error?: string;
66
+ };
67
+ //# sourceMappingURL=mergeValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/mergeValidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CA0BxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWjG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAwCpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,qBAAqB,CA4DvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CActF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CActC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAanF"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Merge Validation Utilities
3
+ *
4
+ * Provides comprehensive pre-merge validation to detect issues before attempting merge
5
+ */
6
+ import { execSync } from 'child_process';
7
+ /**
8
+ * Get git status for a repository
9
+ */
10
+ export function getGitStatus(repoPath) {
11
+ try {
12
+ const statusOutput = execSync('git status --porcelain', {
13
+ cwd: repoPath,
14
+ encoding: 'utf-8',
15
+ stdio: 'pipe',
16
+ });
17
+ const files = statusOutput
18
+ .trim()
19
+ .split('\n')
20
+ .filter(line => line.trim())
21
+ .map(line => line.substring(3)); // Remove status prefix (e.g., "M ", "A ", etc.)
22
+ return {
23
+ hasChanges: files.length > 0,
24
+ files,
25
+ summary: statusOutput.trim(),
26
+ };
27
+ }
28
+ catch (error) {
29
+ return {
30
+ hasChanges: false,
31
+ files: [],
32
+ summary: '',
33
+ };
34
+ }
35
+ }
36
+ /**
37
+ * Get current branch name
38
+ */
39
+ export function getCurrentBranch(repoPath) {
40
+ try {
41
+ return execSync('git branch --show-current', {
42
+ cwd: repoPath,
43
+ encoding: 'utf-8',
44
+ stdio: 'pipe',
45
+ }).trim();
46
+ }
47
+ catch {
48
+ return 'main';
49
+ }
50
+ }
51
+ /**
52
+ * Check if there are any commits to merge
53
+ */
54
+ export function hasCommitsToMerge(repoPath, fromBranch, toBranch) {
55
+ try {
56
+ const output = execSync(`git log ${toBranch}..${fromBranch} --oneline`, {
57
+ cwd: repoPath,
58
+ encoding: 'utf-8',
59
+ stdio: 'pipe',
60
+ });
61
+ return output.trim().length > 0;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /**
68
+ * Detect potential merge conflicts without actually merging
69
+ */
70
+ export function detectMergeConflicts(repoPath, sourceBranch, targetBranch) {
71
+ try {
72
+ // Use git merge-tree to simulate merge without touching working directory
73
+ const output = execSync(`git merge-tree $(git merge-base ${targetBranch} ${sourceBranch}) ${targetBranch} ${sourceBranch}`, {
74
+ cwd: repoPath,
75
+ encoding: 'utf-8',
76
+ stdio: 'pipe',
77
+ });
78
+ // Check for conflict markers in output
79
+ const hasConflicts = output.includes('<<<<<<<') || output.includes('>>>>>>>');
80
+ // Extract conflicting files (lines that contain conflict markers)
81
+ const conflictFiles = [];
82
+ if (hasConflicts) {
83
+ const lines = output.split('\n');
84
+ for (let i = 0; i < lines.length; i++) {
85
+ if (lines[i].startsWith('+<<<<<<<')) {
86
+ // Try to find filename in nearby lines
87
+ for (let j = Math.max(0, i - 10); j < i; j++) {
88
+ if (lines[j].startsWith('diff --git')) {
89
+ const match = lines[j].match(/b\/(.+)$/);
90
+ if (match) {
91
+ conflictFiles.push(match[1]);
92
+ }
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ return { hasConflicts, conflictFiles };
100
+ }
101
+ catch (error) {
102
+ // If git merge-tree fails, assume there might be conflicts
103
+ return { hasConflicts: true, conflictFiles: [] };
104
+ }
105
+ }
106
+ /**
107
+ * Comprehensive pre-merge validation
108
+ */
109
+ export function validateMerge(mainRepoPath, worktreePath, worktreeBranch) {
110
+ const issues = [];
111
+ // Get current main branch
112
+ const mainBranch = getCurrentBranch(mainRepoPath);
113
+ // Check if main branch is clean
114
+ const mainStatus = getGitStatus(mainRepoPath);
115
+ if (mainStatus.hasChanges) {
116
+ issues.push({
117
+ type: 'main_dirty',
118
+ message: `Main branch (${mainBranch}) has uncommitted changes`,
119
+ files: mainStatus.files,
120
+ canAutoResolve: true, // Can offer to commit or stash
121
+ });
122
+ }
123
+ // Check if worktree has uncommitted changes
124
+ const worktreeStatus = getGitStatus(worktreePath);
125
+ if (worktreeStatus.hasChanges) {
126
+ issues.push({
127
+ type: 'worktree_uncommitted',
128
+ message: `Worktree has uncommitted changes`,
129
+ files: worktreeStatus.files,
130
+ canAutoResolve: true, // Can offer to commit with AI message
131
+ });
132
+ }
133
+ // Check if there's anything to merge (commits OR uncommitted changes)
134
+ const hasCommits = hasCommitsToMerge(mainRepoPath, worktreeBranch, mainBranch);
135
+ if (!hasCommits && !worktreeStatus.hasChanges) {
136
+ issues.push({
137
+ type: 'nothing_to_merge',
138
+ message: 'No new commits to merge',
139
+ canAutoResolve: false,
140
+ });
141
+ }
142
+ // Detect potential merge conflicts
143
+ const { hasConflicts, conflictFiles } = detectMergeConflicts(mainRepoPath, worktreeBranch, mainBranch);
144
+ if (hasConflicts) {
145
+ issues.push({
146
+ type: 'merge_conflict',
147
+ message: 'Merge conflicts detected',
148
+ files: conflictFiles.length > 0 ? conflictFiles : ['(conflict detection incomplete)'],
149
+ canAutoResolve: true, // Can offer AI-assisted merge
150
+ });
151
+ }
152
+ return {
153
+ canMerge: issues.length === 0,
154
+ issues,
155
+ mainBranch,
156
+ worktreeBranch,
157
+ };
158
+ }
159
+ /**
160
+ * Stage all uncommitted changes
161
+ */
162
+ export function stageAllChanges(repoPath) {
163
+ try {
164
+ execSync('git add -A', {
165
+ cwd: repoPath,
166
+ stdio: 'pipe',
167
+ });
168
+ return { success: true };
169
+ }
170
+ catch (error) {
171
+ return {
172
+ success: false,
173
+ error: error instanceof Error ? error.message : String(error),
174
+ };
175
+ }
176
+ }
177
+ /**
178
+ * Commit staged changes with a message
179
+ */
180
+ export function commitChanges(repoPath, message) {
181
+ try {
182
+ execSync(`git commit -m "${message.replace(/"/g, '\\"')}"`, {
183
+ cwd: repoPath,
184
+ stdio: 'pipe',
185
+ });
186
+ return { success: true };
187
+ }
188
+ catch (error) {
189
+ return {
190
+ success: false,
191
+ error: error instanceof Error ? error.message : String(error),
192
+ };
193
+ }
194
+ }
195
+ /**
196
+ * Stash uncommitted changes
197
+ */
198
+ export function stashChanges(repoPath) {
199
+ try {
200
+ execSync('git stash push -u -m "dmux: auto-stash before merge"', {
201
+ cwd: repoPath,
202
+ stdio: 'pipe',
203
+ });
204
+ return { success: true };
205
+ }
206
+ catch (error) {
207
+ return {
208
+ success: false,
209
+ error: error instanceof Error ? error.message : String(error),
210
+ };
211
+ }
212
+ }
213
+ //# sourceMappingURL=mergeValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeValidation.js","sourceRoot":"","sources":["../../src/utils/mergeValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { DmuxPane } from '../types.js';
2
+ export interface CreatePaneOptions {
3
+ prompt: string;
4
+ agent?: 'claude' | 'opencode';
5
+ projectName: string;
6
+ existingPanes: DmuxPane[];
7
+ }
8
+ export interface CreatePaneResult {
9
+ pane: DmuxPane;
10
+ needsAgentChoice: boolean;
11
+ }
12
+ /**
13
+ * Core pane creation logic that can be used by both TUI and API
14
+ * Returns the newly created pane and whether agent choice is needed
15
+ */
16
+ export declare function createPane(options: CreatePaneOptions, availableAgents: Array<'claude' | 'opencode'>): Promise<CreatePaneResult>;
17
+ //# sourceMappingURL=paneCreation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paneCreation.d.ts","sourceRoot":"","sources":["../../src/utils/paneCreation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,eAAe,EAAE,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,GAC5C,OAAO,CAAC,gBAAgB,CAAC,CA4K3B"}