dmux 3.3.0 → 3.4.3

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 (132) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +51 -12
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/actions/implementations/closeAction.d.ts.map +1 -1
  5. package/dist/actions/implementations/closeAction.js +24 -4
  6. package/dist/actions/implementations/closeAction.js.map +1 -1
  7. package/dist/actions/merge/commitMessageHandler.d.ts.map +1 -1
  8. package/dist/actions/merge/commitMessageHandler.js +0 -8
  9. package/dist/actions/merge/commitMessageHandler.js.map +1 -1
  10. package/dist/actions/merge/mergeExecution.d.ts.map +1 -1
  11. package/dist/actions/merge/mergeExecution.js +5 -1
  12. package/dist/actions/merge/mergeExecution.js.map +1 -1
  13. package/dist/chunks/styles.css_vue_type_style_index_0_src_true_lang-pW5mq51o.js +17 -0
  14. package/dist/components/popups/logsPopup.js +35 -19
  15. package/dist/components/popups/logsPopup.js.map +1 -1
  16. package/dist/components/ui/FooterHelp.d.ts +4 -0
  17. package/dist/components/ui/FooterHelp.d.ts.map +1 -1
  18. package/dist/components/ui/FooterHelp.js +45 -1
  19. package/dist/components/ui/FooterHelp.js.map +1 -1
  20. package/dist/components/ui/ToastNotification.d.ts +13 -0
  21. package/dist/components/ui/ToastNotification.d.ts.map +1 -0
  22. package/dist/components/ui/ToastNotification.js +22 -0
  23. package/dist/components/ui/ToastNotification.js.map +1 -0
  24. package/dist/dashboard.html +2 -2
  25. package/dist/dashboard.js +2 -2
  26. package/dist/hooks/useActionSystem.d.ts.map +1 -1
  27. package/dist/hooks/useActionSystem.js +8 -23
  28. package/dist/hooks/useActionSystem.js.map +1 -1
  29. package/dist/hooks/useInputHandling.d.ts.map +1 -1
  30. package/dist/hooks/useInputHandling.js +16 -2
  31. package/dist/hooks/useInputHandling.js.map +1 -1
  32. package/dist/hooks/useLayoutManagement.d.ts.map +1 -1
  33. package/dist/hooks/useLayoutManagement.js +46 -12
  34. package/dist/hooks/useLayoutManagement.js.map +1 -1
  35. package/dist/hooks/usePaneLoading.d.ts +3 -0
  36. package/dist/hooks/usePaneLoading.d.ts.map +1 -1
  37. package/dist/hooks/usePaneLoading.js +48 -8
  38. package/dist/hooks/usePaneLoading.js.map +1 -1
  39. package/dist/hooks/usePaneSync.d.ts +3 -0
  40. package/dist/hooks/usePaneSync.d.ts.map +1 -1
  41. package/dist/hooks/usePaneSync.js +18 -3
  42. package/dist/hooks/usePaneSync.js.map +1 -1
  43. package/dist/hooks/usePanes.js +16 -4
  44. package/dist/hooks/usePanes.js.map +1 -1
  45. package/dist/hooks/useShellDetection.js +20 -6
  46. package/dist/hooks/useShellDetection.js.map +1 -1
  47. package/dist/index.js +58 -46
  48. package/dist/index.js.map +1 -1
  49. package/dist/layout/LayoutCalculator.d.ts.map +1 -1
  50. package/dist/layout/LayoutCalculator.js +0 -3
  51. package/dist/layout/LayoutCalculator.js.map +1 -1
  52. package/dist/layout/SpacerManager.js +15 -7
  53. package/dist/layout/SpacerManager.js.map +1 -1
  54. package/dist/layout/TmuxLayoutApplier.d.ts +4 -1
  55. package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -1
  56. package/dist/layout/TmuxLayoutApplier.js +28 -21
  57. package/dist/layout/TmuxLayoutApplier.js.map +1 -1
  58. package/dist/server/embedded-assets.d.ts.map +1 -1
  59. package/dist/server/embedded-assets.js +137 -97
  60. package/dist/server/embedded-assets.js.map +1 -1
  61. package/dist/server/routes/keysRoutes.d.ts +15 -2
  62. package/dist/server/routes/keysRoutes.d.ts.map +1 -1
  63. package/dist/server/routes/keysRoutes.js +18 -1
  64. package/dist/server/routes/keysRoutes.js.map +1 -1
  65. package/dist/services/AutoUpdater.d.ts.map +1 -1
  66. package/dist/services/AutoUpdater.js +2 -1
  67. package/dist/services/AutoUpdater.js.map +1 -1
  68. package/dist/services/PaneAnalyzer.d.ts +12 -3
  69. package/dist/services/PaneAnalyzer.d.ts.map +1 -1
  70. package/dist/services/PaneAnalyzer.js +57 -8
  71. package/dist/services/PaneAnalyzer.js.map +1 -1
  72. package/dist/services/PopupManager.d.ts.map +1 -1
  73. package/dist/services/PopupManager.js +7 -1
  74. package/dist/services/PopupManager.js.map +1 -1
  75. package/dist/services/StatusDetector.d.ts.map +1 -1
  76. package/dist/services/StatusDetector.js +31 -14
  77. package/dist/services/StatusDetector.js.map +1 -1
  78. package/dist/services/TmuxService.d.ts +57 -3
  79. package/dist/services/TmuxService.d.ts.map +1 -1
  80. package/dist/services/TmuxService.js +97 -7
  81. package/dist/services/TmuxService.js.map +1 -1
  82. package/dist/services/ToastService.d.ts +71 -0
  83. package/dist/services/ToastService.d.ts.map +1 -0
  84. package/dist/services/ToastService.js +151 -0
  85. package/dist/services/ToastService.js.map +1 -0
  86. package/dist/shared/StateManager.d.ts +22 -0
  87. package/dist/shared/StateManager.d.ts.map +1 -1
  88. package/dist/shared/StateManager.js +68 -1
  89. package/dist/shared/StateManager.js.map +1 -1
  90. package/dist/terminal.html +2 -2
  91. package/dist/terminal.js +3 -3
  92. package/dist/types.d.ts +3 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/dist/utils/asciiArt.js +3 -3
  95. package/dist/utils/asciiArt.js.map +1 -1
  96. package/dist/utils/atomicWrite.d.ts +33 -0
  97. package/dist/utils/atomicWrite.d.ts.map +1 -0
  98. package/dist/utils/atomicWrite.js +89 -0
  99. package/dist/utils/atomicWrite.js.map +1 -0
  100. package/dist/utils/errorHandling.js +34 -8
  101. package/dist/utils/errorHandling.js.map +1 -1
  102. package/dist/utils/generated-agents-doc.d.ts +1 -1
  103. package/dist/utils/generated-agents-doc.js +1 -1
  104. package/dist/utils/hooksDocs.d.ts +1 -1
  105. package/dist/utils/layoutManager.d.ts.map +1 -1
  106. package/dist/utils/layoutManager.js +223 -169
  107. package/dist/utils/layoutManager.js.map +1 -1
  108. package/dist/utils/mergeValidation.d.ts.map +1 -1
  109. package/dist/utils/mergeValidation.js +5 -1
  110. package/dist/utils/mergeValidation.js.map +1 -1
  111. package/dist/utils/paneCreation.d.ts.map +1 -1
  112. package/dist/utils/paneCreation.js +5 -4
  113. package/dist/utils/paneCreation.js.map +1 -1
  114. package/dist/utils/paneRebinding.js +4 -2
  115. package/dist/utils/paneRebinding.js.map +1 -1
  116. package/dist/utils/postPaneCleanup.d.ts.map +1 -1
  117. package/dist/utils/postPaneCleanup.js +1 -11
  118. package/dist/utils/postPaneCleanup.js.map +1 -1
  119. package/dist/utils/shellPaneDetection.js +33 -23
  120. package/dist/utils/shellPaneDetection.js.map +1 -1
  121. package/dist/utils/tmux.d.ts.map +1 -1
  122. package/dist/utils/tmux.js +19 -13
  123. package/dist/utils/tmux.js.map +1 -1
  124. package/dist/utils/welcomePane.d.ts.map +1 -1
  125. package/dist/utils/welcomePane.js +1 -7
  126. package/dist/utils/welcomePane.js.map +1 -1
  127. package/dist/utils/welcomePaneManager.d.ts.map +1 -1
  128. package/dist/utils/welcomePaneManager.js +10 -24
  129. package/dist/utils/welcomePaneManager.js.map +1 -1
  130. package/package.json +7 -7
  131. package/dist/chunks/_plugin-vue_export-helper-Cvoq67hi.js +0 -28
  132. /package/dist/{_plugin-vue_export-helper.css → styles.css} +0 -0
@@ -36,195 +36,249 @@ let lastLayoutDimensions = null;
36
36
  * 9. Apply layout to tmux
37
37
  */
38
38
  export async function recalculateAndApplyLayout(controlPaneId, contentPaneIds, terminalWidth, terminalHeight, config = DEFAULT_LAYOUT_CONFIG) {
39
- // Create class instances with config
40
- const calculator = new LayoutCalculator(config);
41
- const spacerManager = new SpacerManager(config);
42
- const layoutApplier = new TmuxLayoutApplier(config);
43
- // Step 1: Filter out any existing spacer from content panes
44
- const existingSpacerId = spacerManager.findSpacerPane();
45
- const realContentPanes = contentPaneIds.filter(id => id !== existingSpacerId);
46
- // Check if dimensions and pane count have changed since last layout
47
- const dimensionsUnchanged = lastLayoutDimensions &&
48
- lastLayoutDimensions.width === terminalWidth &&
49
- lastLayoutDimensions.height === terminalHeight &&
50
- lastLayoutDimensions.paneCount === realContentPanes.length;
51
- if (dimensionsUnchanged && existingSpacerId) {
52
- LogService.getInstance().debug(`Layout unchanged (${terminalWidth}x${terminalHeight}, ${realContentPanes.length} panes), skipping spacer recreation`, 'Layout');
53
- return;
54
- }
55
- // Update last layout dimensions
56
- lastLayoutDimensions = {
57
- width: terminalWidth,
58
- height: terminalHeight,
59
- paneCount: realContentPanes.length,
60
- };
61
- // Step 2: Calculate layout for real content panes only
62
- const layout = calculator.calculateOptimalLayout(realContentPanes.length, terminalWidth, terminalHeight);
63
- // Step 3: Determine if we need a spacer pane
64
- const needsSpacer = spacerManager.needsSpacerPane(realContentPanes.length, layout);
65
- // Step 4: Manage spacer pane creation/destruction
66
- // ALWAYS destroy existing spacer on layout recalc to ensure fresh positioning
67
- let spacerId = null;
68
- LogService.getInstance().debug(`Spacer management: needs=${needsSpacer}, existing=${existingSpacerId || 'none'}`, 'Layout');
69
- // Destroy existing spacer if present (we'll recreate if needed)
70
- if (existingSpacerId) {
71
- LogService.getInstance().debug(`Destroying existing spacer for recreation: ${existingSpacerId}`, 'Layout');
72
- spacerManager.destroySpacerPane(existingSpacerId);
73
- }
74
- // Create new spacer if needed
75
- if (needsSpacer) {
39
+ // Wrap entire function in try-catch to prevent crashes during resize
40
+ try {
41
+ // Validate inputs to prevent crashes from bad data
42
+ if (!controlPaneId || typeof controlPaneId !== 'string') {
43
+ LogService.getInstance().warn('Invalid controlPaneId, skipping layout', 'Layout');
44
+ return;
45
+ }
46
+ if (terminalWidth <= 0 || terminalHeight <= 0) {
47
+ LogService.getInstance().warn(`Invalid terminal dimensions: ${terminalWidth}x${terminalHeight}, skipping layout`, 'Layout');
48
+ return;
49
+ }
50
+ // Create class instances with config
51
+ const calculator = new LayoutCalculator(config);
52
+ const spacerManager = new SpacerManager(config);
53
+ const layoutApplier = new TmuxLayoutApplier(config);
54
+ // Step 1: Filter out any existing spacer from content panes
55
+ let existingSpacerId = null;
76
56
  try {
77
- const lastContentPaneId = realContentPanes[realContentPanes.length - 1];
78
- if (!lastContentPaneId) {
79
- throw new Error('No content panes available to split from');
80
- }
81
- spacerId = spacerManager.createSpacerPane(lastContentPaneId);
82
- LogService.getInstance().debug(`Created fresh spacer pane: ${spacerId}`, 'Layout');
83
- // CRITICAL: Wait for tmux to fully register the new pane before applying layout
84
- await new Promise(resolve => setTimeout(resolve, TMUX_PANE_CREATION_DELAY));
85
- // Verify the pane appears in list-panes output
86
- const tmuxService = TmuxService.getInstance();
87
- let paneVerified = false;
88
- for (let attempts = 0; attempts < 3; attempts++) {
89
- try {
90
- const allPaneIds = tmuxService.getAllPaneIdsSync();
91
- if (allPaneIds.includes(spacerId)) {
92
- paneVerified = true;
93
- LogService.getInstance().debug(`Verified spacer pane ${spacerId} in list-panes (attempt ${attempts + 1})`, 'Layout');
94
- break;
57
+ existingSpacerId = spacerManager.findSpacerPane();
58
+ }
59
+ catch (error) {
60
+ LogService.getInstance().debug(`Failed to find spacer pane: ${error}`, 'Layout');
61
+ }
62
+ const realContentPanes = contentPaneIds.filter(id => id !== existingSpacerId);
63
+ // Check if dimensions and pane count have changed since last layout
64
+ const dimensionsUnchanged = lastLayoutDimensions &&
65
+ lastLayoutDimensions.width === terminalWidth &&
66
+ lastLayoutDimensions.height === terminalHeight &&
67
+ lastLayoutDimensions.paneCount === realContentPanes.length;
68
+ if (dimensionsUnchanged) {
69
+ // Layout unchanged - skip ALL layout operations to prevent Ink redraw
70
+ // This prevents the dmux UI from being cleared on resize when nothing changed
71
+ // (Removed noisy debug log that fires on every check)
72
+ return;
73
+ }
74
+ // Only log when dimensions actually change (much less noisy)
75
+ LogService.getInstance().info(`Layout dimensions changed: ${terminalWidth}x${terminalHeight}, ${realContentPanes.length} panes`, 'layout');
76
+ // Update last layout dimensions
77
+ lastLayoutDimensions = {
78
+ width: terminalWidth,
79
+ height: terminalHeight,
80
+ paneCount: realContentPanes.length,
81
+ };
82
+ // Step 2: Calculate layout for real content panes only
83
+ const layout = calculator.calculateOptimalLayout(realContentPanes.length, terminalWidth, terminalHeight);
84
+ // Step 3: Determine if we need a spacer pane
85
+ const needsSpacer = spacerManager.needsSpacerPane(realContentPanes.length, layout);
86
+ // Step 4: Manage spacer pane creation/destruction
87
+ // ALWAYS destroy existing spacer on layout recalc to ensure fresh positioning
88
+ let spacerId = null;
89
+ // LogService.getInstance().debug(
90
+ // `Spacer management: needs=${needsSpacer}, existing=${existingSpacerId || 'none'}`,
91
+ // 'Layout'
92
+ // );
93
+ // Destroy existing spacer if present (we'll recreate if needed)
94
+ if (existingSpacerId) {
95
+ // LogService.getInstance().debug(`Destroying existing spacer for recreation: ${existingSpacerId}`, 'Layout');
96
+ spacerManager.destroySpacerPane(existingSpacerId);
97
+ }
98
+ // Create new spacer if needed
99
+ if (needsSpacer) {
100
+ try {
101
+ const lastContentPaneId = realContentPanes[realContentPanes.length - 1];
102
+ if (!lastContentPaneId) {
103
+ throw new Error('No content panes available to split from');
104
+ }
105
+ spacerId = spacerManager.createSpacerPane(lastContentPaneId);
106
+ // LogService.getInstance().debug(`Created fresh spacer pane: ${spacerId}`, 'Layout');
107
+ // CRITICAL: Wait for tmux to fully register the new pane before applying layout
108
+ await new Promise(resolve => setTimeout(resolve, TMUX_PANE_CREATION_DELAY));
109
+ // Verify the pane appears in list-panes output
110
+ const tmuxService = TmuxService.getInstance();
111
+ let paneVerified = false;
112
+ for (let attempts = 0; attempts < 3; attempts++) {
113
+ try {
114
+ const allPaneIds = tmuxService.getAllPaneIdsSync();
115
+ if (allPaneIds.includes(spacerId)) {
116
+ paneVerified = true;
117
+ // LogService.getInstance().debug(
118
+ // `Verified spacer pane ${spacerId} in list-panes (attempt ${attempts + 1})`,
119
+ // 'Layout'
120
+ // );
121
+ break;
122
+ }
123
+ }
124
+ catch {
125
+ // Pane not ready yet, wait a bit
126
+ if (attempts < 2)
127
+ await new Promise(resolve => setTimeout(resolve, TMUX_PANE_CREATION_DELAY));
95
128
  }
96
129
  }
97
- catch {
98
- // Pane not ready yet, wait a bit
99
- if (attempts < 2)
100
- await new Promise(resolve => setTimeout(resolve, TMUX_PANE_CREATION_DELAY));
130
+ if (!paneVerified) {
131
+ LogService.getInstance().warn(`Spacer pane ${spacerId} not verified, continuing anyway`, 'Layout');
132
+ // Don't throw - continue and let it fail with better logs
101
133
  }
102
134
  }
103
- if (!paneVerified) {
104
- LogService.getInstance().debug(`WARNING: Spacer pane ${spacerId} not verified, continuing anyway`, 'Layout');
105
- // Don't throw - continue and let it fail with better logs
135
+ catch (error) {
136
+ // LogService.getInstance().debug(`Continuing without spacer pane: ${error}`, 'Layout');
137
+ spacerId = null;
106
138
  }
107
139
  }
108
- catch (error) {
109
- LogService.getInstance().debug(`Continuing without spacer pane: ${error}`, 'Layout');
110
- spacerId = null;
140
+ // Step 5: Build final pane list (real panes + spacer if exists)
141
+ let finalContentPanes = spacerId ? [...realContentPanes, spacerId] : realContentPanes;
142
+ // CRITICAL: Sort panes by tmux index, then put spacer LAST
143
+ // Tmux applies layout geometry by pane index order!
144
+ const paneIndices = new Map();
145
+ try {
146
+ const tmuxService = TmuxService.getInstance();
147
+ // Get pane index from tmux (pane_index format variable)
148
+ const indexOutput = tmuxService.listPanesSync('#{pane_id}=#{pane_index}');
149
+ const indexLines = indexOutput.split('\n').filter(l => l.trim());
150
+ indexLines.forEach(line => {
151
+ const [paneId, indexStr] = line.split('=');
152
+ if (paneId && indexStr) {
153
+ paneIndices.set(paneId, parseInt(indexStr, 10));
154
+ }
155
+ });
156
+ // Sort by index, but force spacer to the end
157
+ finalContentPanes = finalContentPanes.sort((a, b) => {
158
+ // Spacer always last
159
+ if (a === spacerId)
160
+ return 1;
161
+ if (b === spacerId)
162
+ return -1;
163
+ // Otherwise sort by tmux index
164
+ const indexA = paneIndices.get(a) || 0;
165
+ const indexB = paneIndices.get(b) || 0;
166
+ return indexA - indexB;
167
+ });
168
+ // LogService.getInstance().debug(
169
+ // `Pane order sorted by index: ${finalContentPanes.map(p => `${p}(idx:${paneIndices.get(p)})`).join(', ')}`,
170
+ // 'Layout'
171
+ // );
111
172
  }
112
- }
113
- // Step 5: Build final pane list (real panes + spacer if exists)
114
- let finalContentPanes = spacerId ? [...realContentPanes, spacerId] : realContentPanes;
115
- // CRITICAL: Sort panes by tmux index, then put spacer LAST
116
- // Tmux applies layout geometry by pane index order!
117
- const paneIndices = new Map();
118
- try {
119
- const tmuxService = TmuxService.getInstance();
120
- // Get pane index from tmux (pane_index format variable)
121
- const indexOutput = tmuxService.listPanesSync('#{pane_id}=#{pane_index}');
122
- const indexLines = indexOutput.split('\n').filter(l => l.trim());
123
- indexLines.forEach(line => {
124
- const [paneId, indexStr] = line.split('=');
125
- if (paneId && indexStr) {
126
- paneIndices.set(paneId, parseInt(indexStr, 10));
127
- }
128
- });
129
- // Sort by index, but force spacer to the end
130
- finalContentPanes = finalContentPanes.sort((a, b) => {
131
- // Spacer always last
132
- if (a === spacerId)
133
- return 1;
134
- if (b === spacerId)
135
- return -1;
136
- // Otherwise sort by tmux index
137
- const indexA = paneIndices.get(a) || 0;
138
- const indexB = paneIndices.get(b) || 0;
139
- return indexA - indexB;
140
- });
141
- LogService.getInstance().debug(`Pane order sorted by index: ${finalContentPanes.map(p => `${p}(idx:${paneIndices.get(p)})`).join(', ')}`, 'Layout');
142
- }
143
- catch (err) {
144
- LogService.getInstance().debug(`Failed to sort by index: ${err}`, 'Layout');
145
- }
146
- // Step 6: Recalculate layout with spacer included if present
147
- const finalLayout = spacerId
148
- ? calculator.calculateOptimalLayout(finalContentPanes.length, terminalWidth, terminalHeight)
149
- : layout;
150
- // Log current tmux state before applying layout
151
- try {
173
+ catch (err) {
174
+ // LogService.getInstance().debug(`Failed to sort by index: ${err}`, 'Layout');
175
+ }
176
+ // Step 6: Recalculate layout with spacer included if present
177
+ const finalLayout = spacerId
178
+ ? calculator.calculateOptimalLayout(finalContentPanes.length, terminalWidth, terminalHeight)
179
+ : layout;
180
+ // Log current tmux state before applying layout (commented out to reduce noise)
181
+ // try {
182
+ // const tmuxService = TmuxService.getInstance();
183
+ // const positions = tmuxService.getPanePositionsSync();
184
+ // const positionsStr = positions.map(p =>
185
+ // `${p.paneId} ${p.width}x${p.height} @${p.left},${p.top}`
186
+ // ).join('\n');
187
+ // LogService.getInstance().debug(`Current pane positions before layout:\n${positionsStr}`, 'Layout');
188
+ // } catch {}
189
+ // CRITICAL ORDER: Resize sidebar FIRST (before window), then window
190
+ // This prevents tmux from redistributing window width changes to the sidebar
191
+ // Step 7: Find and verify the actual control pane
192
+ // The control pane ID may change after layout operations, so we need to find it by position
152
193
  const tmuxService = TmuxService.getInstance();
153
- const positions = tmuxService.getPanePositionsSync();
154
- const positionsStr = positions.map(p => `${p.paneId} ${p.width}x${p.height} @${p.left},${p.top}`).join('\n');
155
- LogService.getInstance().debug(`Current pane positions before layout:\n${positionsStr}`, 'Layout');
156
- }
157
- catch { }
158
- // CRITICAL ORDER: Resize sidebar FIRST (before window), then window
159
- // This prevents tmux from redistributing window width changes to the sidebar
160
- // Step 7: Find and verify the actual control pane
161
- // The control pane ID may change after layout operations, so we need to find it by position
162
- const tmuxService = TmuxService.getInstance();
163
- let actualControlPaneId = controlPaneId;
164
- try {
165
- // First, verify the provided controlPaneId still exists
166
- await tmuxService.paneExists(controlPaneId);
167
- }
168
- catch {
169
- // Control pane ID is stale, find it by position (leftmost pane at x=0)
170
- // Use the smallest pane at x=0 as the sidebar (allows for slight width variations)
194
+ let actualControlPaneId = controlPaneId;
171
195
  try {
172
- const positions = tmuxService.getPanePositionsSync();
173
- let smallestPaneAtLeft = null;
174
- for (const pos of positions) {
175
- // Find the smallest pane at x=0 (likely the sidebar)
176
- if (pos.left === 0 && (!smallestPaneAtLeft || pos.width < smallestPaneAtLeft.width)) {
177
- smallestPaneAtLeft = { id: pos.paneId, width: pos.width };
196
+ // First, verify the provided controlPaneId still exists
197
+ await tmuxService.paneExists(controlPaneId);
198
+ }
199
+ catch {
200
+ // Control pane ID is stale, find it by position (leftmost pane at x=0)
201
+ // Use the smallest pane at x=0 as the sidebar (allows for slight width variations)
202
+ try {
203
+ const positions = tmuxService.getPanePositionsSync();
204
+ let smallestPaneAtLeft = null;
205
+ for (const pos of positions) {
206
+ // Find the smallest pane at x=0 (likely the sidebar)
207
+ if (pos.left === 0 && (!smallestPaneAtLeft || pos.width < smallestPaneAtLeft.width)) {
208
+ smallestPaneAtLeft = { id: pos.paneId, width: pos.width };
209
+ }
210
+ }
211
+ if (smallestPaneAtLeft) {
212
+ actualControlPaneId = smallestPaneAtLeft.id;
213
+ // LogService.getInstance().debug(
214
+ // `Control pane ID updated: ${controlPaneId} → ${actualControlPaneId} (width: ${smallestPaneAtLeft.width})`,
215
+ // 'Layout'
216
+ // );
178
217
  }
179
218
  }
180
- if (smallestPaneAtLeft) {
181
- actualControlPaneId = smallestPaneAtLeft.id;
182
- LogService.getInstance().debug(`Control pane ID updated: ${controlPaneId} → ${actualControlPaneId} (width: ${smallestPaneAtLeft.width})`, 'Layout');
219
+ catch (findError) {
220
+ // LogService.getInstance().debug(`Failed to find control pane by position: ${findError}`, 'Layout');
183
221
  }
184
222
  }
185
- catch (findError) {
186
- LogService.getInstance().debug(`Failed to find control pane by position: ${findError}`, 'Layout');
187
- }
188
- }
189
- // Step 8: Check sidebar width (but DON'T resize yet)
190
- // We'll let the layout application handle the sizing to avoid pane swapping
191
- try {
192
- const currentSidebarWidth = tmuxService.getPaneWidthSync(actualControlPaneId);
193
- if (currentSidebarWidth !== config.SIDEBAR_WIDTH) {
194
- LogService.getInstance().debug(`Sidebar width mismatch: ${currentSidebarWidth} (current) vs ${config.SIDEBAR_WIDTH} (target), will fix via layout`, 'Layout');
223
+ // Step 8: Check sidebar width (but DON'T resize yet)
224
+ // We'll let the layout application handle the sizing to avoid pane swapping
225
+ // Commented out to reduce log noise
226
+ // try {
227
+ // const currentSidebarWidth = tmuxService.getPaneWidthSync(actualControlPaneId);
228
+ //
229
+ // if (currentSidebarWidth !== config.SIDEBAR_WIDTH) {
230
+ // LogService.getInstance().debug(
231
+ // `Sidebar width mismatch: ${currentSidebarWidth} (current) vs ${config.SIDEBAR_WIDTH} (target), will fix via layout`,
232
+ // 'Layout'
233
+ // );
234
+ // } else {
235
+ // LogService.getInstance().debug(`Sidebar width already correct: ${config.SIDEBAR_WIDTH}`, 'Layout');
236
+ // }
237
+ // } catch (error) {
238
+ // LogService.getInstance().debug(`Failed to check sidebar width: ${error}`, 'Layout');
239
+ // }
240
+ // Step 8: Check window dimensions and resize if needed
241
+ // Do this AFTER sidebar resize so sidebar width is locked
242
+ const currentWindowDims = getWindowDimensions();
243
+ // Calculate target window height (accounting for status bar)
244
+ const statusBarHeight = tmuxService.getStatusBarHeightSync();
245
+ const targetWindowHeight = terminalHeight - statusBarHeight;
246
+ const needsWindowResize = currentWindowDims.width !== finalLayout.windowWidth ||
247
+ currentWindowDims.height !== targetWindowHeight;
248
+ if (needsWindowResize) {
249
+ // LogService.getInstance().debug(
250
+ // `Resizing window: ${currentWindowDims.width}x${currentWindowDims.height} → ${finalLayout.windowWidth}x${targetWindowHeight}`,
251
+ // 'Layout'
252
+ // );
253
+ layoutApplier.setWindowDimensions(finalLayout.windowWidth, terminalHeight);
254
+ // Wait for tmux to complete the window resize
255
+ await new Promise(resolve => setTimeout(resolve, TMUX_PANE_CREATION_DELAY));
256
+ // Note: We don't re-enforce sidebar width here anymore
257
+ // The layout application below will set the correct dimensions for all panes
195
258
  }
196
259
  else {
197
- LogService.getInstance().debug(`Sidebar width already correct: ${config.SIDEBAR_WIDTH}`, 'Layout');
260
+ // LogService.getInstance().debug(
261
+ // `Window dimensions already correct: ${finalLayout.windowWidth}x${terminalHeight}`,
262
+ // 'Layout'
263
+ // );
198
264
  }
265
+ // Log window state after sidebar enforcement (commented out to reduce noise)
266
+ // try {
267
+ // const windowDims = tmuxService.getWindowDimensionsSync();
268
+ // const layout = tmuxService.getCurrentLayoutSync();
269
+ // LogService.getInstance().debug(
270
+ // `After sidebar enforcement: Window: ${windowDims.width}x${windowDims.height}, Layout: ${layout}`,
271
+ // 'Layout'
272
+ // );
273
+ // } catch {}
274
+ // Step 9: Apply the layout to tmux
275
+ layoutApplier.applyPaneLayout(actualControlPaneId, finalContentPanes, finalLayout, terminalHeight);
199
276
  }
200
277
  catch (error) {
201
- LogService.getInstance().debug(`Failed to check sidebar width: ${error}`, 'Layout');
202
- }
203
- // Step 8: Check window dimensions and resize if needed
204
- // Do this AFTER sidebar resize so sidebar width is locked
205
- const currentWindowDims = getWindowDimensions();
206
- const needsWindowResize = currentWindowDims.width !== finalLayout.windowWidth ||
207
- currentWindowDims.height !== terminalHeight;
208
- if (needsWindowResize) {
209
- LogService.getInstance().debug(`Resizing window: ${currentWindowDims.width}x${currentWindowDims.height} → ${finalLayout.windowWidth}x${terminalHeight}`, 'Layout');
210
- layoutApplier.setWindowDimensions(finalLayout.windowWidth, terminalHeight);
211
- // Wait for tmux to complete the window resize
212
- await new Promise(resolve => setTimeout(resolve, TMUX_PANE_CREATION_DELAY));
213
- // Note: We don't re-enforce sidebar width here anymore
214
- // The layout application below will set the correct dimensions for all panes
215
- }
216
- else {
217
- LogService.getInstance().debug(`Window dimensions already correct: ${finalLayout.windowWidth}x${terminalHeight}`, 'Layout');
218
- }
219
- // Log window state after sidebar enforcement
220
- try {
221
- const windowDims = tmuxService.getWindowDimensionsSync();
222
- const layout = tmuxService.getCurrentLayoutSync();
223
- LogService.getInstance().debug(`After sidebar enforcement: Window: ${windowDims.width}x${windowDims.height}, Layout: ${layout}`, 'Layout');
278
+ // Catch-all for any errors during layout recalculation
279
+ // Log but don't crash - layout will be retried on next resize event
280
+ LogService.getInstance().error(`Layout recalculation failed: ${error}`, 'Layout', undefined, error instanceof Error ? error : undefined);
224
281
  }
225
- catch { }
226
- // Step 9: Apply the layout to tmux
227
- layoutApplier.applyPaneLayout(actualControlPaneId, finalContentPanes, finalLayout, terminalHeight);
228
282
  }
229
283
  /**
230
284
  * Calculates optimal layout configuration based on terminal dimensions
@@ -1 +1 @@
1
- {"version":3,"file":"layoutManager.js","sourceRoot":"","sources":["../../src/utils/layoutManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAA6B,MAAM,wBAAwB,CAAC;AAE7F,6BAA6B;AAC7B,OAAO,EAAE,gBAAgB,EAA4B,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAanE,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,aAAa,EAAE,EAAE;IACjB,qBAAqB,EAAE,EAAE;IACzB,qBAAqB,EAAE,EAAE;IACzB,sBAAsB,EAAE,EAAE;CAC3B,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,qBAAqB,CAAC,aAAa,CAAC;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,qBAAqB,CAAC;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,qBAAqB,CAAC;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,sBAAsB,CAAC;AAKnF,sEAAsE;AACtE,IAAI,oBAAoB,GAAgE,IAAI,CAAC;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,aAAqB,EACrB,cAAwB,EACxB,aAAqB,EACrB,cAAsB,EACtB,SAAuB,qBAAqB;IAE5C,qCAAqC;IACrC,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEpD,4DAA4D;IAC5D,MAAM,gBAAgB,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC;IACxD,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,gBAAgB,CAAC,CAAC;IAE9E,oEAAoE;IACpE,MAAM,mBAAmB,GACvB,oBAAoB;QACpB,oBAAoB,CAAC,KAAK,KAAK,aAAa;QAC5C,oBAAoB,CAAC,MAAM,KAAK,cAAc;QAC9C,oBAAoB,CAAC,SAAS,KAAK,gBAAgB,CAAC,MAAM,CAAC;IAE7D,IAAI,mBAAmB,IAAI,gBAAgB,EAAE,CAAC;QAC5C,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,qBAAqB,aAAa,IAAI,cAAc,KAAK,gBAAgB,CAAC,MAAM,qCAAqC,EACrH,QAAQ,CACT,CAAC;QACF,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,oBAAoB,GAAG;QACrB,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,cAAc;QACtB,SAAS,EAAE,gBAAgB,CAAC,MAAM;KACnC,CAAC;IAEF,uDAAuD;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,sBAAsB,CAC9C,gBAAgB,CAAC,MAAM,EACvB,aAAa,EACb,cAAc,CACf,CAAC;IAEF,6CAA6C;IAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnF,kDAAkD;IAClD,8EAA8E;IAC9E,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,4BAA4B,WAAW,cAAc,gBAAgB,IAAI,MAAM,EAAE,EACjF,QAAQ,CACT,CAAC;IAEF,gEAAgE;IAChE,IAAI,gBAAgB,EAAE,CAAC;QACrB,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,8CAA8C,gBAAgB,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3G,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,CAAC;IAED,8BAA8B;IAC9B,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAC7D,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,8BAA8B,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;YAEnF,gFAAgF;YAChF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;YAE5E,+CAA+C;YAC/C,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;gBAChD,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,WAAW,CAAC,iBAAiB,EAAE,CAAC;oBAEnD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAClC,YAAY,GAAG,IAAI,CAAC;wBACpB,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,wBAAwB,QAAQ,2BAA2B,QAAQ,GAAG,CAAC,GAAG,EAC1E,QAAQ,CACT,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;oBACjC,IAAI,QAAQ,GAAG,CAAC;wBAAE,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBAChG,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,wBAAwB,QAAQ,kCAAkC,EAClE,QAAQ,CACT,CAAC;gBACF,0DAA0D;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;YACrF,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEtF,2DAA2D;IAC3D,oDAAoD;IACpD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC9C,wDAAwD;QACxD,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACvB,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClD,qBAAqB;YACrB,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC,CAAC;YAE9B,+BAA+B;YAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,+BAA+B,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACzG,QAAQ,CACT,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,6DAA6D;IAC7D,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,UAAU,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,CAAC;QAC5F,CAAC,CAAC,MAAM,CAAC;IAEX,gDAAgD;IAChD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACrC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,0CAA0C,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,oEAAoE;IACpE,6EAA6E;IAE7E,kDAAkD;IAClD,4FAA4F;IAC5F,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,mBAAmB,GAAG,aAAa,CAAC;IACxC,IAAI,CAAC;QACH,wDAAwD;QACxD,MAAM,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,mFAAmF;QACnF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,kBAAkB,GAAyC,IAAI,CAAC;YAEpE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,qDAAqD;gBACrD,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,kBAAkB,IAAI,GAAG,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpF,kBAAkB,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,IAAI,kBAAkB,EAAE,CAAC;gBACvB,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,CAAC;gBAC5C,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,4BAA4B,aAAa,MAAM,mBAAmB,YAAY,kBAAkB,CAAC,KAAK,GAAG,EACzG,QAAQ,CACT,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,4CAA4C,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,4EAA4E;IAC5E,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,WAAW,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAE9E,IAAI,mBAAmB,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;YACjD,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,2BAA2B,mBAAmB,iBAAiB,MAAM,CAAC,aAAa,gCAAgC,EACnH,QAAQ,CACT,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED,uDAAuD;IACvD,0DAA0D;IAC1D,MAAM,iBAAiB,GAAG,mBAAmB,EAAE,CAAC;IAChD,MAAM,iBAAiB,GACrB,iBAAiB,CAAC,KAAK,KAAK,WAAW,CAAC,WAAW;QACnD,iBAAiB,CAAC,MAAM,KAAK,cAAc,CAAC;IAE9C,IAAI,iBAAiB,EAAE,CAAC;QACtB,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,oBAAoB,iBAAiB,CAAC,KAAK,IAAI,iBAAiB,CAAC,MAAM,MAAM,WAAW,CAAC,WAAW,IAAI,cAAc,EAAE,EACxH,QAAQ,CACT,CAAC;QACF,aAAa,CAAC,mBAAmB,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAE3E,8CAA8C;QAC9C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAE5E,uDAAuD;QACvD,6EAA6E;IAC/E,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,sCAAsC,WAAW,CAAC,WAAW,IAAI,cAAc,EAAE,EACjF,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,WAAW,CAAC,uBAAuB,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,WAAW,CAAC,oBAAoB,EAAE,CAAC;QAClD,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAC5B,sCAAsC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,aAAa,MAAM,EAAE,EAChG,QAAQ,CACT,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,mCAAmC;IACnC,aAAa,CAAC,eAAe,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AACrG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,eAAuB,EACvB,aAAqB,EACrB,cAAsB,EACtB,SAAuB,qBAAqB;IAE5C,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,sBAAsB,CAAC,eAAe,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAY;IAC5D,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"layoutManager.js","sourceRoot":"","sources":["../../src/utils/layoutManager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mergeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/mergeValidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,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,CAsCxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;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,CA0EpD;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"}
1
+ {"version":3,"file":"mergeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/mergeValidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,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,CAuCxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;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,CA0EpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,qBAAqB,CAqEvB;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"}
@@ -11,6 +11,7 @@ import { getCurrentBranch as getCurrentBranchUtil } from './git.js';
11
11
  */
12
12
  export function getGitStatus(repoPath) {
13
13
  try {
14
+ LogService.getInstance().info(`Getting git status for: ${repoPath}`, 'mergeValidation');
14
15
  const statusOutput = execSync('git status --porcelain', {
15
16
  cwd: repoPath,
16
17
  encoding: 'utf-8',
@@ -31,7 +32,7 @@ export function getGitStatus(repoPath) {
31
32
  LogService.getInstance().info(`Git status: "${line}" → "${filename}"`, 'mergeValidation');
32
33
  return filename;
33
34
  });
34
- LogService.getInstance().info(`Final files: ${JSON.stringify(files)}`, 'mergeValidation');
35
+ LogService.getInstance().info(`Final files for ${repoPath}: ${JSON.stringify(files)}`, 'mergeValidation');
35
36
  return {
36
37
  hasChanges: files.length > 0,
37
38
  files,
@@ -151,6 +152,7 @@ export function validateMerge(mainRepoPath, worktreePath, worktreeBranch) {
151
152
  }
152
153
  // Check if worktree has uncommitted changes
153
154
  const worktreeStatus = getGitStatus(worktreePath);
155
+ LogService.getInstance().info(`Worktree status: hasChanges=${worktreeStatus.hasChanges}, files=${JSON.stringify(worktreeStatus.files)}`, 'mergeValidation');
154
156
  if (worktreeStatus.hasChanges) {
155
157
  issues.push({
156
158
  type: 'worktree_uncommitted',
@@ -161,7 +163,9 @@ export function validateMerge(mainRepoPath, worktreePath, worktreeBranch) {
161
163
  }
162
164
  // Check if there's anything to merge (commits OR uncommitted changes)
163
165
  const hasCommits = hasCommitsToMerge(mainRepoPath, worktreeBranch, mainBranch);
166
+ LogService.getInstance().info(`Merge check: hasCommits=${hasCommits}, worktreeHasChanges=${worktreeStatus.hasChanges}`, 'mergeValidation');
164
167
  if (!hasCommits && !worktreeStatus.hasChanges) {
168
+ LogService.getInstance().info('Adding nothing_to_merge issue', 'mergeValidation');
165
169
  issues.push({
166
170
  type: 'nothing_to_merge',
167
171
  message: 'No new commits to merge',
@@ -1 +1 @@
1
- {"version":3,"file":"mergeValidation.js","sourceRoot":"","sources":["../../src/utils/mergeValidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAsBpE;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YACtD,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,YAAY;aACvB,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3B,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,wCAAwC;YACxC,8DAA8D;YAC9D,6DAA6D;YAC7D,2FAA2F;YAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,QAAQ,QAAQ,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC1F,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QAEL,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAE1F,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;YAC5B,KAAK;YACL,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAAgB;IACtF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,QAAQ,KAAK,UAAU,YAAY,EAAE;YACtE,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,YAAoB,EACpB,YAAoB;IAEpB,IAAI,CAAC;QACH,0EAA0E;QAC1E,MAAM,MAAM,GAAG,QAAQ,CACrB,mCAAmC,YAAY,IAAI,YAAY,KAAK,YAAY,IAAI,YAAY,EAAE,EAClG;YACE,GAAG,EAAE,QAAQ;YACb,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CACF,CAAC;QAEF,uCAAuC;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE9E,kEAAkE;QAClE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,uCAAuC;oBACvC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;4BACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BACzC,IAAI,KAAK,EAAE,CAAC;gCACV,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC/B,CAAC;4BACD,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kDAAkD;QAClD,IAAI,CAAC;YACH,sDAAsD;YACtD,MAAM,QAAQ,GAAG,QAAQ,CACvB,qCAAqC,YAAY,MAAM,YAAY,EAAE,EACrE;gBACE,GAAG,EAAE,QAAQ;gBACb,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,MAAM;aACd,CACF,CAAC;YAEF,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEhE,qEAAqE;YACrE,yEAAyE;YACzE,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5B,0CAA0C;gBAC1C,MAAM,YAAY,GAAG,QAAQ,CAC3B,wBAAwB,YAAY,MAAM,YAAY,EAAE,EACxD;oBACE,GAAG,EAAE,QAAQ;oBACb,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,MAAM;iBACd,CACF,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAErC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;YAC7D,CAAC;YAED,mCAAmC;YACnC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,YAAoB,EACpB,YAAoB,EACpB,cAAsB;IAEtB,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,0BAA0B;IAC1B,MAAM,UAAU,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAElD,gCAAgC;IAChC,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gBAAgB,UAAU,2BAA2B;YAC9D,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,cAAc,EAAE,IAAI,EAAE,+BAA+B;SACtD,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,MAAM,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,kCAAkC;YAC3C,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,cAAc,EAAE,IAAI,EAAE,sCAAsC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,MAAM,UAAU,GAAG,iBAAiB,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC/E,IAAI,CAAC,UAAU,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,yBAAyB;YAClC,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;IAED,mCAAmC;IACnC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,oBAAoB,CAC1D,YAAY,EACZ,cAAc,EACd,UAAU,CACX,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,0BAA0B;YACnC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC;YACrF,cAAc,EAAE,IAAI,EAAE,8BAA8B;SACrD,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC7B,MAAM;QACN,UAAU;QACV,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,EAAE;YACrB,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,OAAe;IAEf,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE;YAC1D,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,QAAQ,CAAC,sDAAsD,EAAE;YAC/D,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"mergeValidation.js","sourceRoot":"","sources":["../../src/utils/mergeValidation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"paneCreation.d.ts","sourceRoot":"","sources":["../../src/utils/paneCreation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,aAAa,CAAC;AAcxD,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;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;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,CAoZ3B"}
1
+ {"version":3,"file":"paneCreation.d.ts","sourceRoot":"","sources":["../../src/utils/paneCreation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,aAAa,CAAC;AAexD,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;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;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,CAoZ3B"}
@@ -8,6 +8,7 @@ import { generateSlug } from './slug.js';
8
8
  import { capturePaneContent } from './paneCapture.js';
9
9
  import { triggerHook } from './hooks.js';
10
10
  import { TMUX_LAYOUT_APPLY_DELAY, TMUX_SPLIT_DELAY } from '../constants/timing.js';
11
+ import { atomicWriteJsonSync } from './atomicWrite.js';
11
12
  /**
12
13
  * Core pane creation logic that can be used by both TUI and API
13
14
  * Returns the newly created pane and whether agent choice is needed
@@ -96,7 +97,7 @@ export async function createPane(options, availableAgents) {
96
97
  config.controlPaneId = controlPaneId;
97
98
  config.controlPaneSize = SIDEBAR_WIDTH;
98
99
  config.lastUpdated = new Date().toISOString();
99
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
100
+ atomicWriteJsonSync(configPath, config);
100
101
  }
101
102
  // Else: Pane exists, we can use it
102
103
  }
@@ -106,7 +107,7 @@ export async function createPane(options, availableAgents) {
106
107
  config.controlPaneId = controlPaneId;
107
108
  config.controlPaneSize = SIDEBAR_WIDTH;
108
109
  config.lastUpdated = new Date().toISOString();
109
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
110
+ atomicWriteJsonSync(configPath, config);
110
111
  }
111
112
  }
112
113
  catch (error) {
@@ -157,7 +158,7 @@ export async function createPane(options, availableAgents) {
157
158
  const config = JSON.parse(configContent);
158
159
  config.controlPaneId = currentPaneId;
159
160
  config.lastUpdated = new Date().toISOString();
160
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
161
+ atomicWriteJsonSync(configPath, config);
161
162
  controlPaneId = currentPaneId; // Update local variable
162
163
  }
163
164
  catch (configError) {
@@ -341,7 +342,7 @@ export async function createPane(options, availableAgents) {
341
342
  // Add the new pane to the config (panesCount becomes 1)
342
343
  config.panes = [...existingPanes, newPane];
343
344
  config.lastUpdated = new Date().toISOString();
344
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
345
+ atomicWriteJsonSync(configPath, config);
345
346
  // NOW destroy the welcome pane (event-based destruction)
346
347
  const { destroyWelcomePaneCoordinated } = await import('./welcomePaneManager.js');
347
348
  destroyWelcomePaneCoordinated(projectRoot);