dmux 3.2.0 → 3.3.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 (655) hide show
  1. package/dist/DmuxApp.d.ts.map +1 -1
  2. package/dist/DmuxApp.js +270 -1606
  3. package/dist/DmuxApp.js.map +1 -1
  4. package/dist/actions/implementations/closeAction.d.ts +10 -0
  5. package/dist/actions/implementations/closeAction.d.ts.map +1 -0
  6. package/dist/actions/implementations/closeAction.js +201 -0
  7. package/dist/actions/implementations/closeAction.js.map +1 -0
  8. package/dist/actions/implementations/copyPathAction.d.ts +10 -0
  9. package/dist/actions/implementations/copyPathAction.d.ts.map +1 -0
  10. package/dist/actions/implementations/copyPathAction.js +34 -0
  11. package/dist/actions/implementations/copyPathAction.js.map +1 -0
  12. package/dist/actions/implementations/duplicateAction.d.ts +10 -0
  13. package/dist/actions/implementations/duplicateAction.d.ts.map +1 -0
  14. package/dist/actions/implementations/duplicateAction.js +25 -0
  15. package/dist/actions/implementations/duplicateAction.js.map +1 -0
  16. package/dist/actions/implementations/index.d.ts +14 -0
  17. package/dist/actions/implementations/index.d.ts.map +1 -0
  18. package/dist/actions/implementations/index.js +14 -0
  19. package/dist/actions/implementations/index.js.map +1 -0
  20. package/dist/actions/implementations/mergeAction.d.ts +14 -0
  21. package/dist/actions/implementations/mergeAction.d.ts.map +1 -0
  22. package/dist/actions/implementations/mergeAction.js +84 -0
  23. package/dist/actions/implementations/mergeAction.js.map +1 -0
  24. package/dist/actions/implementations/openInEditorAction.d.ts +12 -0
  25. package/dist/actions/implementations/openInEditorAction.d.ts.map +1 -0
  26. package/dist/actions/implementations/openInEditorAction.js +33 -0
  27. package/dist/actions/implementations/openInEditorAction.js.map +1 -0
  28. package/dist/actions/implementations/renameAction.d.ts +13 -0
  29. package/dist/actions/implementations/renameAction.d.ts.map +1 -0
  30. package/dist/actions/implementations/renameAction.js +18 -0
  31. package/dist/actions/implementations/renameAction.js.map +1 -0
  32. package/dist/actions/implementations/toggleAutopilotAction.d.ts +10 -0
  33. package/dist/actions/implementations/toggleAutopilotAction.d.ts.map +1 -0
  34. package/dist/actions/implementations/toggleAutopilotAction.js +33 -0
  35. package/dist/actions/implementations/toggleAutopilotAction.js.map +1 -0
  36. package/dist/actions/implementations/viewAction.d.ts +10 -0
  37. package/dist/actions/implementations/viewAction.d.ts.map +1 -0
  38. package/dist/actions/implementations/viewAction.js +26 -0
  39. package/dist/actions/implementations/viewAction.js.map +1 -0
  40. package/dist/actions/merge/commitMessageHandler.d.ts +27 -0
  41. package/dist/actions/merge/commitMessageHandler.d.ts.map +1 -0
  42. package/dist/actions/merge/commitMessageHandler.js +123 -0
  43. package/dist/actions/merge/commitMessageHandler.js.map +1 -0
  44. package/dist/actions/merge/conflictResolution.d.ts +13 -0
  45. package/dist/actions/merge/conflictResolution.d.ts.map +1 -0
  46. package/dist/actions/merge/conflictResolution.js +134 -0
  47. package/dist/actions/merge/conflictResolution.js.map +1 -0
  48. package/dist/actions/merge/issueHandlers/index.d.ts +11 -0
  49. package/dist/actions/merge/issueHandlers/index.d.ts.map +1 -0
  50. package/dist/actions/merge/issueHandlers/index.js +8 -0
  51. package/dist/actions/merge/issueHandlers/index.js.map +1 -0
  52. package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts +13 -0
  53. package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts.map +1 -0
  54. package/dist/actions/merge/issueHandlers/mainDirtyHandler.js +72 -0
  55. package/dist/actions/merge/issueHandlers/mainDirtyHandler.js.map +1 -0
  56. package/dist/actions/merge/issueHandlers/mergeConflictHandler.d.ts +13 -0
  57. package/dist/actions/merge/issueHandlers/mergeConflictHandler.d.ts.map +1 -0
  58. package/dist/actions/merge/issueHandlers/mergeConflictHandler.js +52 -0
  59. package/dist/actions/merge/issueHandlers/mergeConflictHandler.js.map +1 -0
  60. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.d.ts +7 -0
  61. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.d.ts.map +1 -0
  62. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.js +12 -0
  63. package/dist/actions/merge/issueHandlers/nothingToMergeHandler.js.map +1 -0
  64. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts +13 -0
  65. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts.map +1 -0
  66. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js +49 -0
  67. package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js.map +1 -0
  68. package/dist/actions/merge/mergeExecution.d.ts +22 -0
  69. package/dist/actions/merge/mergeExecution.d.ts.map +1 -0
  70. package/dist/actions/merge/mergeExecution.js +184 -0
  71. package/dist/actions/merge/mergeExecution.js.map +1 -0
  72. package/dist/actions/paneActions.d.ts +3 -40
  73. package/dist/actions/paneActions.d.ts.map +1 -1
  74. package/dist/actions/paneActions.js +4 -1038
  75. package/dist/actions/paneActions.js.map +1 -1
  76. package/dist/actions/types.d.ts +1 -0
  77. package/dist/actions/types.d.ts.map +1 -1
  78. package/dist/actions/types.js.map +1 -1
  79. package/dist/components/{ActionChoiceDialog.d.ts → dialogs/ActionChoiceDialog.d.ts} +1 -1
  80. package/dist/components/dialogs/ActionChoiceDialog.d.ts.map +1 -0
  81. package/dist/components/dialogs/ActionChoiceDialog.js.map +1 -0
  82. package/dist/components/dialogs/ActionConfirmDialog.d.ts.map +1 -0
  83. package/dist/components/dialogs/ActionConfirmDialog.js.map +1 -0
  84. package/dist/components/dialogs/ActionInputDialog.d.ts.map +1 -0
  85. package/dist/components/{ActionInputDialog.js → dialogs/ActionInputDialog.js} +2 -2
  86. package/dist/components/dialogs/ActionInputDialog.js.map +1 -0
  87. package/dist/components/dialogs/ActionProgressDialog.d.ts.map +1 -0
  88. package/dist/components/dialogs/ActionProgressDialog.js.map +1 -0
  89. package/dist/components/dialogs/AgentChoiceDialog.d.ts.map +1 -0
  90. package/dist/components/dialogs/AgentChoiceDialog.js.map +1 -0
  91. package/dist/components/{CloseOptionsDialog.d.ts → dialogs/CloseOptionsDialog.d.ts} +1 -1
  92. package/dist/components/dialogs/CloseOptionsDialog.d.ts.map +1 -0
  93. package/dist/components/dialogs/CloseOptionsDialog.js.map +1 -0
  94. package/dist/components/dialogs/CommandPromptDialog.d.ts.map +1 -0
  95. package/dist/components/{CommandPromptDialog.js → dialogs/CommandPromptDialog.js} +1 -1
  96. package/dist/components/dialogs/CommandPromptDialog.js.map +1 -0
  97. package/dist/components/dialogs/DialogBox.d.ts.map +1 -0
  98. package/dist/components/dialogs/DialogBox.js.map +1 -0
  99. package/dist/components/dialogs/HooksDialog.d.ts.map +1 -0
  100. package/dist/components/dialogs/HooksDialog.js.map +1 -0
  101. package/dist/components/{MergeConfirmationDialog.d.ts → dialogs/MergeConfirmationDialog.d.ts} +1 -1
  102. package/dist/components/dialogs/MergeConfirmationDialog.d.ts.map +1 -0
  103. package/dist/components/dialogs/MergeConfirmationDialog.js.map +1 -0
  104. package/dist/components/{SettingsDialog.d.ts → dialogs/SettingsDialog.d.ts} +1 -1
  105. package/dist/components/dialogs/SettingsDialog.d.ts.map +1 -0
  106. package/dist/components/dialogs/SettingsDialog.js.map +1 -0
  107. package/dist/components/dialogs/UpdateDialog.d.ts.map +1 -0
  108. package/dist/components/dialogs/UpdateDialog.js.map +1 -0
  109. package/dist/components/indicators/CreatingIndicator.d.ts.map +1 -0
  110. package/dist/components/indicators/CreatingIndicator.js.map +1 -0
  111. package/dist/components/indicators/LoadingIndicator.d.ts.map +1 -0
  112. package/dist/components/indicators/LoadingIndicator.js.map +1 -0
  113. package/dist/components/indicators/RunningIndicator.d.ts.map +1 -0
  114. package/dist/components/indicators/RunningIndicator.js.map +1 -0
  115. package/dist/components/indicators/Spinner.d.ts.map +1 -0
  116. package/dist/components/indicators/Spinner.js.map +1 -0
  117. package/dist/components/indicators/UpdatingIndicator.d.ts.map +1 -0
  118. package/dist/components/indicators/UpdatingIndicator.js.map +1 -0
  119. package/dist/components/indicators/index.d.ts +6 -0
  120. package/dist/components/indicators/index.d.ts.map +1 -0
  121. package/dist/components/indicators/index.js +6 -0
  122. package/dist/components/indicators/index.js.map +1 -0
  123. package/dist/components/inputs/CleanTextInput.d.ts.map +1 -0
  124. package/dist/{CleanTextInput.js → components/inputs/CleanTextInput.js} +2 -144
  125. package/dist/components/inputs/CleanTextInput.js.map +1 -0
  126. package/dist/components/inputs/StyledTextInput.d.ts.map +1 -0
  127. package/dist/components/inputs/StyledTextInput.js.map +1 -0
  128. package/dist/components/inputs/index.d.ts +3 -0
  129. package/dist/components/inputs/index.d.ts.map +1 -0
  130. package/dist/components/inputs/index.js +3 -0
  131. package/dist/components/inputs/index.js.map +1 -0
  132. package/dist/components/{KebabMenu.d.ts → panes/KebabMenu.d.ts} +1 -1
  133. package/dist/components/panes/KebabMenu.d.ts.map +1 -0
  134. package/dist/components/panes/KebabMenu.js.map +1 -0
  135. package/dist/components/panes/MergePane.d.ts.map +1 -0
  136. package/dist/{MergePane.js → components/panes/MergePane.js} +1 -1
  137. package/dist/components/panes/MergePane.js.map +1 -0
  138. package/dist/components/{PaneCard.d.ts → panes/PaneCard.d.ts} +1 -1
  139. package/dist/components/panes/PaneCard.d.ts.map +1 -0
  140. package/dist/components/{PaneCard.js → panes/PaneCard.js} +1 -1
  141. package/dist/components/panes/PaneCard.js.map +1 -0
  142. package/dist/components/{PanesGrid.d.ts → panes/PanesGrid.d.ts} +2 -2
  143. package/dist/components/panes/PanesGrid.d.ts.map +1 -0
  144. package/dist/components/{PanesGrid.js → panes/PanesGrid.js} +1 -1
  145. package/dist/components/panes/PanesGrid.js.map +1 -0
  146. package/dist/components/panes/index.d.ts +5 -0
  147. package/dist/components/panes/index.d.ts.map +1 -0
  148. package/dist/components/panes/index.js +5 -0
  149. package/dist/components/panes/index.js.map +1 -0
  150. package/dist/components/popups/agentChoicePopup.d.ts.map +1 -0
  151. package/dist/{popups → components/popups}/agentChoicePopup.js +1 -1
  152. package/dist/components/popups/agentChoicePopup.js.map +1 -0
  153. package/dist/components/popups/choicePopup.d.ts.map +1 -0
  154. package/dist/{popups → components/popups}/choicePopup.js +3 -3
  155. package/dist/components/popups/choicePopup.js.map +1 -0
  156. package/dist/components/popups/config.d.ts.map +1 -0
  157. package/dist/{popups → components/popups}/config.js +1 -1
  158. package/dist/components/popups/config.js.map +1 -0
  159. package/dist/components/popups/confirmPopup.d.ts.map +1 -0
  160. package/dist/{popups → components/popups}/confirmPopup.js +2 -3
  161. package/dist/components/popups/confirmPopup.js.map +1 -0
  162. package/dist/components/popups/hooksPopup.d.ts.map +1 -0
  163. package/dist/{popups → components/popups}/hooksPopup.js +1 -1
  164. package/dist/components/popups/hooksPopup.js.map +1 -0
  165. package/dist/components/popups/inputPopup.d.ts.map +1 -0
  166. package/dist/{popups → components/popups}/inputPopup.js +3 -4
  167. package/dist/components/popups/inputPopup.js.map +1 -0
  168. package/dist/components/popups/kebabMenuPopup.d.ts.map +1 -0
  169. package/dist/{popups → components/popups}/kebabMenuPopup.js +1 -1
  170. package/dist/components/popups/kebabMenuPopup.js.map +1 -0
  171. package/dist/components/popups/logsPopup.d.ts.map +1 -0
  172. package/dist/{popups → components/popups}/logsPopup.js +15 -7
  173. package/dist/components/popups/logsPopup.js.map +1 -0
  174. package/dist/components/popups/mergePopup.d.ts.map +1 -0
  175. package/dist/{popups → components/popups}/mergePopup.js +6 -6
  176. package/dist/components/popups/mergePopup.js.map +1 -0
  177. package/dist/components/popups/newPanePopup.d.ts.map +1 -0
  178. package/dist/{popups → components/popups}/newPanePopup.js +3 -3
  179. package/dist/components/popups/newPanePopup.js.map +1 -0
  180. package/dist/components/popups/progressPopup.d.ts.map +1 -0
  181. package/dist/{popups → components/popups}/progressPopup.js +1 -2
  182. package/dist/components/popups/progressPopup.js.map +1 -0
  183. package/dist/components/popups/remotePopup.d.ts.map +1 -0
  184. package/dist/{popups → components/popups}/remotePopup.js +1 -1
  185. package/dist/components/popups/remotePopup.js.map +1 -0
  186. package/dist/components/popups/settingsPopup.d.ts.map +1 -0
  187. package/dist/{popups → components/popups}/settingsPopup.js +1 -1
  188. package/dist/components/popups/settingsPopup.js.map +1 -0
  189. package/dist/components/popups/shared/FileList.d.ts.map +1 -0
  190. package/dist/components/popups/shared/FileList.js.map +1 -0
  191. package/dist/components/popups/shared/PopupContainer.d.ts.map +1 -0
  192. package/dist/components/popups/shared/PopupContainer.js.map +1 -0
  193. package/dist/components/popups/shared/PopupInputBox.d.ts.map +1 -0
  194. package/dist/components/popups/shared/PopupInputBox.js.map +1 -0
  195. package/dist/components/popups/shared/PopupWrapper.d.ts.map +1 -0
  196. package/dist/components/popups/shared/PopupWrapper.js.map +1 -0
  197. package/dist/components/popups/shared/index.d.ts.map +1 -0
  198. package/dist/components/popups/shared/index.js.map +1 -0
  199. package/dist/components/popups/shortcutsPopup.d.ts.map +1 -0
  200. package/dist/{popups → components/popups}/shortcutsPopup.js +1 -1
  201. package/dist/components/popups/shortcutsPopup.js.map +1 -0
  202. package/dist/components/popups/templates/SimpleInputPopup.d.ts.map +1 -0
  203. package/dist/{popups → components/popups}/templates/SimpleInputPopup.js +2 -2
  204. package/dist/components/popups/templates/SimpleInputPopup.js.map +1 -0
  205. package/dist/components/ui/FileCopyPrompt.d.ts.map +1 -0
  206. package/dist/components/ui/FileCopyPrompt.js.map +1 -0
  207. package/dist/components/{FooterHelp.d.ts → ui/FooterHelp.d.ts} +4 -0
  208. package/dist/components/ui/FooterHelp.d.ts.map +1 -0
  209. package/dist/components/{FooterHelp.js → ui/FooterHelp.js} +45 -1
  210. package/dist/components/ui/FooterHelp.js.map +1 -0
  211. package/dist/components/ui/QRCode.d.ts.map +1 -0
  212. package/dist/components/ui/QRCode.js.map +1 -0
  213. package/dist/components/ui/ToastNotification.d.ts +13 -0
  214. package/dist/components/ui/ToastNotification.d.ts.map +1 -0
  215. package/dist/components/ui/ToastNotification.js +22 -0
  216. package/dist/components/ui/ToastNotification.js.map +1 -0
  217. package/dist/components/ui/index.d.ts +4 -0
  218. package/dist/components/ui/index.d.ts.map +1 -0
  219. package/dist/components/ui/index.js +4 -0
  220. package/dist/components/ui/index.js.map +1 -0
  221. package/dist/constants/timing.d.ts +22 -0
  222. package/dist/constants/timing.d.ts.map +1 -0
  223. package/dist/constants/timing.js +26 -0
  224. package/dist/constants/timing.js.map +1 -0
  225. package/dist/dashboard.js +2 -2
  226. package/dist/hooks/useActionSystem.d.ts +5 -4
  227. package/dist/hooks/useActionSystem.d.ts.map +1 -1
  228. package/dist/hooks/useActionSystem.js +105 -114
  229. package/dist/hooks/useActionSystem.js.map +1 -1
  230. package/dist/hooks/useDebugInfo.d.ts +11 -0
  231. package/dist/hooks/useDebugInfo.d.ts.map +1 -0
  232. package/dist/hooks/useDebugInfo.js +34 -0
  233. package/dist/hooks/useDebugInfo.js.map +1 -0
  234. package/dist/hooks/useDialogState.d.ts +22 -0
  235. package/dist/hooks/useDialogState.d.ts.map +1 -0
  236. package/dist/hooks/useDialogState.js +62 -0
  237. package/dist/hooks/useDialogState.js.map +1 -0
  238. package/dist/hooks/useInputHandling.d.ts +60 -0
  239. package/dist/hooks/useInputHandling.d.ts.map +1 -0
  240. package/dist/hooks/useInputHandling.js +294 -0
  241. package/dist/hooks/useInputHandling.js.map +1 -0
  242. package/dist/hooks/useLayoutManagement.d.ts +12 -0
  243. package/dist/hooks/useLayoutManagement.d.ts.map +1 -0
  244. package/dist/hooks/useLayoutManagement.js +63 -0
  245. package/dist/hooks/useLayoutManagement.js.map +1 -0
  246. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  247. package/dist/hooks/usePaneCreation.js +4 -9
  248. package/dist/hooks/usePaneCreation.js.map +1 -1
  249. package/dist/hooks/usePaneLoading.d.ts +45 -0
  250. package/dist/hooks/usePaneLoading.d.ts.map +1 -0
  251. package/dist/hooks/usePaneLoading.js +208 -0
  252. package/dist/hooks/usePaneLoading.js.map +1 -0
  253. package/dist/hooks/usePaneRunner.d.ts.map +1 -1
  254. package/dist/hooks/usePaneRunner.js +9 -6
  255. package/dist/hooks/usePaneRunner.js.map +1 -1
  256. package/dist/hooks/usePaneSync.d.ts +34 -0
  257. package/dist/hooks/usePaneSync.d.ts.map +1 -0
  258. package/dist/hooks/usePaneSync.js +186 -0
  259. package/dist/hooks/usePaneSync.js.map +1 -0
  260. package/dist/hooks/usePanes.d.ts.map +1 -1
  261. package/dist/hooks/usePanes.js +68 -406
  262. package/dist/hooks/usePanes.js.map +1 -1
  263. package/dist/hooks/useServices.d.ts +24 -0
  264. package/dist/hooks/useServices.d.ts.map +1 -0
  265. package/dist/hooks/useServices.js +39 -0
  266. package/dist/hooks/useServices.js.map +1 -0
  267. package/dist/hooks/useShellDetection.d.ts +10 -0
  268. package/dist/hooks/useShellDetection.d.ts.map +1 -0
  269. package/dist/hooks/useShellDetection.js +67 -0
  270. package/dist/hooks/useShellDetection.js.map +1 -0
  271. package/dist/hooks/useStatusMessages.d.ts +11 -0
  272. package/dist/hooks/useStatusMessages.d.ts.map +1 -0
  273. package/dist/hooks/useStatusMessages.js +32 -0
  274. package/dist/hooks/useStatusMessages.js.map +1 -0
  275. package/dist/hooks/useTemporaryStatus.d.ts +13 -0
  276. package/dist/hooks/useTemporaryStatus.d.ts.map +1 -0
  277. package/dist/hooks/useTemporaryStatus.js +30 -0
  278. package/dist/hooks/useTemporaryStatus.js.map +1 -0
  279. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  280. package/dist/hooks/useTerminalWidth.js +7 -12
  281. package/dist/hooks/useTerminalWidth.js.map +1 -1
  282. package/dist/hooks/useTunnelManagement.d.ts +18 -0
  283. package/dist/hooks/useTunnelManagement.d.ts.map +1 -0
  284. package/dist/hooks/useTunnelManagement.js +55 -0
  285. package/dist/hooks/useTunnelManagement.js.map +1 -0
  286. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  287. package/dist/hooks/useWorktreeActions.js +18 -13
  288. package/dist/hooks/useWorktreeActions.js.map +1 -1
  289. package/dist/index.js +124 -94
  290. package/dist/index.js.map +1 -1
  291. package/dist/layout/LayoutCalculator.d.ts +62 -0
  292. package/dist/layout/LayoutCalculator.d.ts.map +1 -0
  293. package/dist/layout/LayoutCalculator.js +140 -0
  294. package/dist/layout/LayoutCalculator.js.map +1 -0
  295. package/dist/layout/SpacerManager.d.ts +64 -0
  296. package/dist/layout/SpacerManager.d.ts.map +1 -0
  297. package/dist/layout/SpacerManager.js +156 -0
  298. package/dist/layout/SpacerManager.js.map +1 -0
  299. package/dist/layout/TmuxLayoutApplier.d.ts +62 -0
  300. package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -0
  301. package/dist/layout/TmuxLayoutApplier.js +147 -0
  302. package/dist/layout/TmuxLayoutApplier.js.map +1 -0
  303. package/dist/panes/decorative-pane.d.ts.map +1 -0
  304. package/dist/{decorative-pane.js → panes/decorative-pane.js} +1 -1
  305. package/dist/panes/decorative-pane.js.map +1 -0
  306. package/dist/panes/spacer-pane.d.ts.map +1 -0
  307. package/dist/panes/spacer-pane.js.map +1 -0
  308. package/dist/server/embedded-assets.d.ts.map +1 -1
  309. package/dist/server/embedded-assets.js +727 -5677
  310. package/dist/server/embedded-assets.js.map +1 -1
  311. package/dist/server/routes/actionsRoutes.d.ts +2 -0
  312. package/dist/server/routes/actionsRoutes.d.ts.map +1 -0
  313. package/dist/server/routes/actionsRoutes.js +110 -0
  314. package/dist/server/routes/actionsRoutes.js.map +1 -0
  315. package/dist/server/routes/healthRoutes.d.ts +13 -0
  316. package/dist/server/routes/healthRoutes.d.ts.map +1 -0
  317. package/dist/server/routes/healthRoutes.js +70 -0
  318. package/dist/server/routes/healthRoutes.js.map +1 -0
  319. package/dist/server/routes/index.d.ts +8 -0
  320. package/dist/server/routes/index.d.ts.map +1 -0
  321. package/dist/server/routes/index.js +67 -0
  322. package/dist/server/routes/index.js.map +1 -0
  323. package/dist/server/routes/keysRoutes.d.ts +33 -0
  324. package/dist/server/routes/keysRoutes.d.ts.map +1 -0
  325. package/dist/server/routes/keysRoutes.js +128 -0
  326. package/dist/server/routes/keysRoutes.js.map +1 -0
  327. package/dist/server/routes/panesRoutes.d.ts +2 -0
  328. package/dist/server/routes/panesRoutes.d.ts.map +1 -0
  329. package/dist/server/routes/panesRoutes.js +373 -0
  330. package/dist/server/routes/panesRoutes.js.map +1 -0
  331. package/dist/server/routes/settingsRoutes.d.ts +94 -0
  332. package/dist/server/routes/settingsRoutes.d.ts.map +1 -0
  333. package/dist/server/routes/settingsRoutes.js +159 -0
  334. package/dist/server/routes/settingsRoutes.js.map +1 -0
  335. package/dist/server/routes/streamRoutes.d.ts +18 -0
  336. package/dist/server/routes/streamRoutes.d.ts.map +1 -0
  337. package/dist/server/routes/streamRoutes.js +87 -0
  338. package/dist/server/routes/streamRoutes.js.map +1 -0
  339. package/dist/server/routes/tunnelRoutes.d.ts +11 -0
  340. package/dist/server/routes/tunnelRoutes.d.ts.map +1 -0
  341. package/dist/server/routes/tunnelRoutes.js +28 -0
  342. package/dist/server/routes/tunnelRoutes.js.map +1 -0
  343. package/dist/server/routes.d.ts +16 -2
  344. package/dist/server/routes.d.ts.map +1 -1
  345. package/dist/server/routes.js +16 -878
  346. package/dist/server/routes.js.map +1 -1
  347. package/dist/{AutoUpdater.d.ts → services/AutoUpdater.d.ts} +1 -0
  348. package/dist/services/AutoUpdater.d.ts.map +1 -0
  349. package/dist/{AutoUpdater.js → services/AutoUpdater.js} +44 -10
  350. package/dist/services/AutoUpdater.js.map +1 -0
  351. package/dist/services/PaneAnalyzer.d.ts.map +1 -0
  352. package/dist/{PaneAnalyzer.js → services/PaneAnalyzer.js} +1 -1
  353. package/dist/services/PaneAnalyzer.js.map +1 -0
  354. package/dist/services/PaneLifecycleManager.d.ts +60 -0
  355. package/dist/services/PaneLifecycleManager.d.ts.map +1 -0
  356. package/dist/services/PaneLifecycleManager.js +119 -0
  357. package/dist/services/PaneLifecycleManager.js.map +1 -0
  358. package/dist/services/PaneWorkerManager.d.ts.map +1 -1
  359. package/dist/services/PaneWorkerManager.js +6 -3
  360. package/dist/services/PaneWorkerManager.js.map +1 -1
  361. package/dist/services/PopupManager.d.ts +68 -0
  362. package/dist/services/PopupManager.d.ts.map +1 -0
  363. package/dist/services/PopupManager.js +415 -0
  364. package/dist/services/PopupManager.js.map +1 -0
  365. package/dist/services/StatusDetector.d.ts.map +1 -1
  366. package/dist/services/StatusDetector.js +6 -8
  367. package/dist/services/StatusDetector.js.map +1 -1
  368. package/dist/services/TerminalStreamer.d.ts +1 -0
  369. package/dist/services/TerminalStreamer.d.ts.map +1 -1
  370. package/dist/services/TerminalStreamer.js +22 -16
  371. package/dist/services/TerminalStreamer.js.map +1 -1
  372. package/dist/services/TmuxService.d.ts +346 -0
  373. package/dist/services/TmuxService.d.ts.map +1 -0
  374. package/dist/services/TmuxService.js +849 -0
  375. package/dist/services/TmuxService.js.map +1 -0
  376. package/dist/services/ToastService.d.ts +71 -0
  377. package/dist/services/ToastService.d.ts.map +1 -0
  378. package/dist/services/ToastService.js +151 -0
  379. package/dist/services/ToastService.js.map +1 -0
  380. package/dist/services/TunnelService.d.ts.map +1 -1
  381. package/dist/services/TunnelService.js +2 -1
  382. package/dist/services/TunnelService.js.map +1 -1
  383. package/dist/shared/StateManager.d.ts +22 -0
  384. package/dist/shared/StateManager.d.ts.map +1 -1
  385. package/dist/shared/StateManager.js +68 -1
  386. package/dist/shared/StateManager.js.map +1 -1
  387. package/dist/terminal.js +3 -3
  388. package/dist/types.d.ts +7 -0
  389. package/dist/types.d.ts.map +1 -1
  390. package/dist/utils/asciiArt.d.ts.map +1 -1
  391. package/dist/utils/asciiArt.js +9 -22
  392. package/dist/utils/asciiArt.js.map +1 -1
  393. package/dist/utils/atomicWrite.d.ts +33 -0
  394. package/dist/utils/atomicWrite.d.ts.map +1 -0
  395. package/dist/utils/atomicWrite.js +89 -0
  396. package/dist/utils/atomicWrite.js.map +1 -0
  397. package/dist/utils/conflictMonitor.d.ts +20 -0
  398. package/dist/utils/conflictMonitor.d.ts.map +1 -0
  399. package/dist/utils/conflictMonitor.js +113 -0
  400. package/dist/utils/conflictMonitor.js.map +1 -0
  401. package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
  402. package/dist/utils/conflictResolutionPane.js +70 -79
  403. package/dist/utils/conflictResolutionPane.js.map +1 -1
  404. package/dist/utils/errorHandling.d.ts +37 -0
  405. package/dist/utils/errorHandling.d.ts.map +1 -0
  406. package/dist/utils/errorHandling.js +138 -0
  407. package/dist/utils/errorHandling.js.map +1 -0
  408. package/dist/utils/generated-agents-doc.d.ts +1 -1
  409. package/dist/utils/generated-agents-doc.js +1 -1
  410. package/dist/utils/git.d.ts +4 -0
  411. package/dist/utils/git.d.ts.map +1 -1
  412. package/dist/utils/git.js +15 -0
  413. package/dist/utils/git.js.map +1 -1
  414. package/dist/utils/hooksDocs.d.ts +1 -1
  415. package/dist/utils/layoutManager.d.ts +20 -16
  416. package/dist/utils/layoutManager.d.ts.map +1 -1
  417. package/dist/utils/layoutManager.js +159 -380
  418. package/dist/utils/layoutManager.js.map +1 -1
  419. package/dist/utils/mergeExecution.d.ts.map +1 -1
  420. package/dist/utils/mergeExecution.js +8 -1
  421. package/dist/utils/mergeExecution.js.map +1 -1
  422. package/dist/utils/mergeValidation.d.ts.map +1 -1
  423. package/dist/utils/mergeValidation.js +46 -13
  424. package/dist/utils/mergeValidation.js.map +1 -1
  425. package/dist/utils/paneCreation.d.ts.map +1 -1
  426. package/dist/utils/paneCreation.js +115 -106
  427. package/dist/utils/paneCreation.js.map +1 -1
  428. package/dist/utils/paneRebinding.d.ts +14 -0
  429. package/dist/utils/paneRebinding.d.ts.map +1 -0
  430. package/dist/utils/paneRebinding.js +30 -0
  431. package/dist/utils/paneRebinding.js.map +1 -0
  432. package/dist/utils/popup.d.ts.map +1 -1
  433. package/dist/utils/popup.js +11 -17
  434. package/dist/utils/popup.js.map +1 -1
  435. package/dist/utils/postPaneCleanup.d.ts.map +1 -1
  436. package/dist/utils/postPaneCleanup.js +5 -14
  437. package/dist/utils/postPaneCleanup.js.map +1 -1
  438. package/dist/utils/shellPaneDetection.d.ts +3 -3
  439. package/dist/utils/shellPaneDetection.d.ts.map +1 -1
  440. package/dist/utils/shellPaneDetection.js +43 -29
  441. package/dist/utils/shellPaneDetection.js.map +1 -1
  442. package/dist/utils/systemCheck.d.ts +19 -0
  443. package/dist/utils/systemCheck.d.ts.map +1 -0
  444. package/dist/utils/systemCheck.js +160 -0
  445. package/dist/utils/systemCheck.js.map +1 -0
  446. package/dist/utils/tmux.d.ts +26 -7
  447. package/dist/utils/tmux.d.ts.map +1 -1
  448. package/dist/utils/tmux.js +84 -76
  449. package/dist/utils/tmux.js.map +1 -1
  450. package/dist/utils/welcomePane.d.ts +2 -2
  451. package/dist/utils/welcomePane.d.ts.map +1 -1
  452. package/dist/utils/welcomePane.js +19 -33
  453. package/dist/utils/welcomePane.js.map +1 -1
  454. package/dist/utils/welcomePaneManager.d.ts.map +1 -1
  455. package/dist/utils/welcomePaneManager.js +11 -25
  456. package/dist/utils/welcomePaneManager.js.map +1 -1
  457. package/dist/workers/PaneWorker.js +7 -9
  458. package/dist/workers/PaneWorker.js.map +1 -1
  459. package/dist/workers/updateChecker.js +1 -1
  460. package/dist/workers/updateChecker.js.map +1 -1
  461. package/package.json +3 -1
  462. package/dist/AutoUpdater.d.ts.map +0 -1
  463. package/dist/AutoUpdater.js.map +0 -1
  464. package/dist/BetterTextInput.d.ts +0 -10
  465. package/dist/BetterTextInput.d.ts.map +0 -1
  466. package/dist/BetterTextInput.js +0 -177
  467. package/dist/BetterTextInput.js.map +0 -1
  468. package/dist/CleanTextInput.d.ts.map +0 -1
  469. package/dist/CleanTextInput.js.map +0 -1
  470. package/dist/EnhancedTextInput.d.ts +0 -13
  471. package/dist/EnhancedTextInput.d.ts.map +0 -1
  472. package/dist/EnhancedTextInput.js +0 -443
  473. package/dist/EnhancedTextInput.js.map +0 -1
  474. package/dist/GeminiTextInput.d.ts +0 -12
  475. package/dist/GeminiTextInput.d.ts.map +0 -1
  476. package/dist/GeminiTextInput.js +0 -210
  477. package/dist/GeminiTextInput.js.map +0 -1
  478. package/dist/MergePane.d.ts.map +0 -1
  479. package/dist/MergePane.js.map +0 -1
  480. package/dist/MultilineTextInput.d.ts +0 -10
  481. package/dist/MultilineTextInput.d.ts.map +0 -1
  482. package/dist/MultilineTextInput.js +0 -184
  483. package/dist/MultilineTextInput.js.map +0 -1
  484. package/dist/PaneAnalyzer.d.ts.map +0 -1
  485. package/dist/PaneAnalyzer.js.map +0 -1
  486. package/dist/SimpleEnhancedInput.d.ts +0 -13
  487. package/dist/SimpleEnhancedInput.d.ts.map +0 -1
  488. package/dist/SimpleEnhancedInput.js +0 -639
  489. package/dist/SimpleEnhancedInput.js.map +0 -1
  490. package/dist/SimpleGeminiInput.d.ts +0 -12
  491. package/dist/SimpleGeminiInput.d.ts.map +0 -1
  492. package/dist/SimpleGeminiInput.js +0 -223
  493. package/dist/SimpleGeminiInput.js.map +0 -1
  494. package/dist/StyledTextInput.d.ts.map +0 -1
  495. package/dist/StyledTextInput.js.map +0 -1
  496. package/dist/components/ActionChoiceDialog.d.ts.map +0 -1
  497. package/dist/components/ActionChoiceDialog.js.map +0 -1
  498. package/dist/components/ActionConfirmDialog.d.ts.map +0 -1
  499. package/dist/components/ActionConfirmDialog.js.map +0 -1
  500. package/dist/components/ActionInputDialog.d.ts.map +0 -1
  501. package/dist/components/ActionInputDialog.js.map +0 -1
  502. package/dist/components/ActionProgressDialog.d.ts.map +0 -1
  503. package/dist/components/ActionProgressDialog.js.map +0 -1
  504. package/dist/components/AgentChoiceDialog.d.ts.map +0 -1
  505. package/dist/components/AgentChoiceDialog.js.map +0 -1
  506. package/dist/components/CloseOptionsDialog.d.ts.map +0 -1
  507. package/dist/components/CloseOptionsDialog.js.map +0 -1
  508. package/dist/components/CommandPromptDialog.d.ts.map +0 -1
  509. package/dist/components/CommandPromptDialog.js.map +0 -1
  510. package/dist/components/CreatingIndicator.d.ts.map +0 -1
  511. package/dist/components/CreatingIndicator.js.map +0 -1
  512. package/dist/components/DialogBox.d.ts.map +0 -1
  513. package/dist/components/DialogBox.js.map +0 -1
  514. package/dist/components/FileCopyPrompt.d.ts.map +0 -1
  515. package/dist/components/FileCopyPrompt.js.map +0 -1
  516. package/dist/components/FooterHelp.d.ts.map +0 -1
  517. package/dist/components/FooterHelp.js.map +0 -1
  518. package/dist/components/HooksDialog.d.ts.map +0 -1
  519. package/dist/components/HooksDialog.js.map +0 -1
  520. package/dist/components/KebabMenu.d.ts.map +0 -1
  521. package/dist/components/KebabMenu.js.map +0 -1
  522. package/dist/components/LoadingIndicator.d.ts.map +0 -1
  523. package/dist/components/LoadingIndicator.js.map +0 -1
  524. package/dist/components/MergeConfirmationDialog.d.ts.map +0 -1
  525. package/dist/components/MergeConfirmationDialog.js.map +0 -1
  526. package/dist/components/PaneCard.d.ts.map +0 -1
  527. package/dist/components/PaneCard.js.map +0 -1
  528. package/dist/components/PanesGrid.d.ts.map +0 -1
  529. package/dist/components/PanesGrid.js.map +0 -1
  530. package/dist/components/QRCode.d.ts.map +0 -1
  531. package/dist/components/QRCode.js.map +0 -1
  532. package/dist/components/RunningIndicator.d.ts.map +0 -1
  533. package/dist/components/RunningIndicator.js.map +0 -1
  534. package/dist/components/SettingsDialog.d.ts.map +0 -1
  535. package/dist/components/SettingsDialog.js.map +0 -1
  536. package/dist/components/Spinner.d.ts.map +0 -1
  537. package/dist/components/Spinner.js.map +0 -1
  538. package/dist/components/UpdateDialog.d.ts.map +0 -1
  539. package/dist/components/UpdateDialog.js.map +0 -1
  540. package/dist/components/UpdatingIndicator.d.ts.map +0 -1
  541. package/dist/components/UpdatingIndicator.js.map +0 -1
  542. package/dist/decorative-pane.d.ts.map +0 -1
  543. package/dist/decorative-pane.js.map +0 -1
  544. package/dist/popups/agentChoicePopup.d.ts.map +0 -1
  545. package/dist/popups/agentChoicePopup.js.map +0 -1
  546. package/dist/popups/choicePopup.d.ts.map +0 -1
  547. package/dist/popups/choicePopup.js.map +0 -1
  548. package/dist/popups/components/FileList.d.ts.map +0 -1
  549. package/dist/popups/components/FileList.js.map +0 -1
  550. package/dist/popups/components/PopupContainer.d.ts.map +0 -1
  551. package/dist/popups/components/PopupContainer.js.map +0 -1
  552. package/dist/popups/components/PopupInputBox.d.ts.map +0 -1
  553. package/dist/popups/components/PopupInputBox.js.map +0 -1
  554. package/dist/popups/components/PopupWrapper.d.ts.map +0 -1
  555. package/dist/popups/components/PopupWrapper.js.map +0 -1
  556. package/dist/popups/components/index.d.ts.map +0 -1
  557. package/dist/popups/components/index.js.map +0 -1
  558. package/dist/popups/config.d.ts.map +0 -1
  559. package/dist/popups/config.js.map +0 -1
  560. package/dist/popups/confirmPopup.d.ts.map +0 -1
  561. package/dist/popups/confirmPopup.js.map +0 -1
  562. package/dist/popups/hooksPopup.d.ts.map +0 -1
  563. package/dist/popups/hooksPopup.js.map +0 -1
  564. package/dist/popups/inputPopup.d.ts.map +0 -1
  565. package/dist/popups/inputPopup.js.map +0 -1
  566. package/dist/popups/kebabMenuPopup.d.ts.map +0 -1
  567. package/dist/popups/kebabMenuPopup.js.map +0 -1
  568. package/dist/popups/logsPopup.d.ts.map +0 -1
  569. package/dist/popups/logsPopup.js.map +0 -1
  570. package/dist/popups/mergePopup.d.ts.map +0 -1
  571. package/dist/popups/mergePopup.js.map +0 -1
  572. package/dist/popups/newPanePopup.d.ts.map +0 -1
  573. package/dist/popups/newPanePopup.js.map +0 -1
  574. package/dist/popups/progressPopup.d.ts.map +0 -1
  575. package/dist/popups/progressPopup.js.map +0 -1
  576. package/dist/popups/remotePopup.d.ts.map +0 -1
  577. package/dist/popups/remotePopup.js.map +0 -1
  578. package/dist/popups/settingsPopup.d.ts.map +0 -1
  579. package/dist/popups/settingsPopup.js.map +0 -1
  580. package/dist/popups/shortcutsPopup.d.ts.map +0 -1
  581. package/dist/popups/shortcutsPopup.js.map +0 -1
  582. package/dist/popups/templates/SimpleInputPopup.d.ts.map +0 -1
  583. package/dist/popups/templates/SimpleInputPopup.js.map +0 -1
  584. package/dist/server/static.d.ts +0 -6
  585. package/dist/server/static.d.ts.map +0 -1
  586. package/dist/server/static.js +0 -3040
  587. package/dist/server/static.js.map +0 -1
  588. package/dist/spacer-pane.d.ts.map +0 -1
  589. package/dist/spacer-pane.js.map +0 -1
  590. /package/dist/components/{ActionChoiceDialog.js → dialogs/ActionChoiceDialog.js} +0 -0
  591. /package/dist/components/{ActionConfirmDialog.d.ts → dialogs/ActionConfirmDialog.d.ts} +0 -0
  592. /package/dist/components/{ActionConfirmDialog.js → dialogs/ActionConfirmDialog.js} +0 -0
  593. /package/dist/components/{ActionInputDialog.d.ts → dialogs/ActionInputDialog.d.ts} +0 -0
  594. /package/dist/components/{ActionProgressDialog.d.ts → dialogs/ActionProgressDialog.d.ts} +0 -0
  595. /package/dist/components/{ActionProgressDialog.js → dialogs/ActionProgressDialog.js} +0 -0
  596. /package/dist/components/{AgentChoiceDialog.d.ts → dialogs/AgentChoiceDialog.d.ts} +0 -0
  597. /package/dist/components/{AgentChoiceDialog.js → dialogs/AgentChoiceDialog.js} +0 -0
  598. /package/dist/components/{CloseOptionsDialog.js → dialogs/CloseOptionsDialog.js} +0 -0
  599. /package/dist/components/{CommandPromptDialog.d.ts → dialogs/CommandPromptDialog.d.ts} +0 -0
  600. /package/dist/components/{DialogBox.d.ts → dialogs/DialogBox.d.ts} +0 -0
  601. /package/dist/components/{DialogBox.js → dialogs/DialogBox.js} +0 -0
  602. /package/dist/components/{HooksDialog.d.ts → dialogs/HooksDialog.d.ts} +0 -0
  603. /package/dist/components/{HooksDialog.js → dialogs/HooksDialog.js} +0 -0
  604. /package/dist/components/{MergeConfirmationDialog.js → dialogs/MergeConfirmationDialog.js} +0 -0
  605. /package/dist/components/{SettingsDialog.js → dialogs/SettingsDialog.js} +0 -0
  606. /package/dist/components/{UpdateDialog.d.ts → dialogs/UpdateDialog.d.ts} +0 -0
  607. /package/dist/components/{UpdateDialog.js → dialogs/UpdateDialog.js} +0 -0
  608. /package/dist/components/{CreatingIndicator.d.ts → indicators/CreatingIndicator.d.ts} +0 -0
  609. /package/dist/components/{CreatingIndicator.js → indicators/CreatingIndicator.js} +0 -0
  610. /package/dist/components/{LoadingIndicator.d.ts → indicators/LoadingIndicator.d.ts} +0 -0
  611. /package/dist/components/{LoadingIndicator.js → indicators/LoadingIndicator.js} +0 -0
  612. /package/dist/components/{RunningIndicator.d.ts → indicators/RunningIndicator.d.ts} +0 -0
  613. /package/dist/components/{RunningIndicator.js → indicators/RunningIndicator.js} +0 -0
  614. /package/dist/components/{Spinner.d.ts → indicators/Spinner.d.ts} +0 -0
  615. /package/dist/components/{Spinner.js → indicators/Spinner.js} +0 -0
  616. /package/dist/components/{UpdatingIndicator.d.ts → indicators/UpdatingIndicator.d.ts} +0 -0
  617. /package/dist/components/{UpdatingIndicator.js → indicators/UpdatingIndicator.js} +0 -0
  618. /package/dist/{CleanTextInput.d.ts → components/inputs/CleanTextInput.d.ts} +0 -0
  619. /package/dist/{StyledTextInput.d.ts → components/inputs/StyledTextInput.d.ts} +0 -0
  620. /package/dist/{StyledTextInput.js → components/inputs/StyledTextInput.js} +0 -0
  621. /package/dist/components/{KebabMenu.js → panes/KebabMenu.js} +0 -0
  622. /package/dist/{MergePane.d.ts → components/panes/MergePane.d.ts} +0 -0
  623. /package/dist/{popups → components/popups}/agentChoicePopup.d.ts +0 -0
  624. /package/dist/{popups → components/popups}/choicePopup.d.ts +0 -0
  625. /package/dist/{popups → components/popups}/config.d.ts +0 -0
  626. /package/dist/{popups → components/popups}/confirmPopup.d.ts +0 -0
  627. /package/dist/{popups → components/popups}/hooksPopup.d.ts +0 -0
  628. /package/dist/{popups → components/popups}/inputPopup.d.ts +0 -0
  629. /package/dist/{popups → components/popups}/kebabMenuPopup.d.ts +0 -0
  630. /package/dist/{popups → components/popups}/logsPopup.d.ts +0 -0
  631. /package/dist/{popups → components/popups}/mergePopup.d.ts +0 -0
  632. /package/dist/{popups → components/popups}/newPanePopup.d.ts +0 -0
  633. /package/dist/{popups → components/popups}/progressPopup.d.ts +0 -0
  634. /package/dist/{popups → components/popups}/remotePopup.d.ts +0 -0
  635. /package/dist/{popups → components/popups}/settingsPopup.d.ts +0 -0
  636. /package/dist/{popups/components → components/popups/shared}/FileList.d.ts +0 -0
  637. /package/dist/{popups/components → components/popups/shared}/FileList.js +0 -0
  638. /package/dist/{popups/components → components/popups/shared}/PopupContainer.d.ts +0 -0
  639. /package/dist/{popups/components → components/popups/shared}/PopupContainer.js +0 -0
  640. /package/dist/{popups/components → components/popups/shared}/PopupInputBox.d.ts +0 -0
  641. /package/dist/{popups/components → components/popups/shared}/PopupInputBox.js +0 -0
  642. /package/dist/{popups/components → components/popups/shared}/PopupWrapper.d.ts +0 -0
  643. /package/dist/{popups/components → components/popups/shared}/PopupWrapper.js +0 -0
  644. /package/dist/{popups/components → components/popups/shared}/index.d.ts +0 -0
  645. /package/dist/{popups/components → components/popups/shared}/index.js +0 -0
  646. /package/dist/{popups → components/popups}/shortcutsPopup.d.ts +0 -0
  647. /package/dist/{popups → components/popups}/templates/SimpleInputPopup.d.ts +0 -0
  648. /package/dist/components/{FileCopyPrompt.d.ts → ui/FileCopyPrompt.d.ts} +0 -0
  649. /package/dist/components/{FileCopyPrompt.js → ui/FileCopyPrompt.js} +0 -0
  650. /package/dist/components/{QRCode.d.ts → ui/QRCode.d.ts} +0 -0
  651. /package/dist/components/{QRCode.js → ui/QRCode.js} +0 -0
  652. /package/dist/{decorative-pane.d.ts → panes/decorative-pane.d.ts} +0 -0
  653. /package/dist/{spacer-pane.d.ts → panes/spacer-pane.d.ts} +0 -0
  654. /package/dist/{spacer-pane.js → panes/spacer-pane.js} +0 -0
  655. /package/dist/{PaneAnalyzer.d.ts → services/PaneAnalyzer.d.ts} +0 -0
@@ -0,0 +1,140 @@
1
+ /**
2
+ * LayoutCalculator - Determines optimal grid layout for content panes
3
+ *
4
+ * Responsibilities:
5
+ * - Calculate optimal columns/rows for given terminal dimensions
6
+ * - Score layouts based on height comfort and balance
7
+ * - Distribute panes evenly across columns
8
+ *
9
+ * Does NOT:
10
+ * - Create/destroy tmux panes
11
+ * - Apply layouts to tmux
12
+ * - Manage spacer panes
13
+ */
14
+ export class LayoutCalculator {
15
+ config;
16
+ constructor(config) {
17
+ this.config = config;
18
+ }
19
+ /**
20
+ * Calculates the optimal layout for the given number of panes and terminal dimensions
21
+ *
22
+ * Algorithm:
23
+ * 1. Try all possible column counts (from numPanes down to 1)
24
+ * 2. For each, check if it fits in terminal at minimum comfortable size
25
+ * 3. Score layouts based on height, balance, and width comfort
26
+ * 4. Return the highest-scoring layout
27
+ *
28
+ * @param numContentPanes - Number of content panes to layout (excludes sidebar)
29
+ * @param terminalWidth - Total terminal width in cells
30
+ * @param terminalHeight - Total terminal height in cells
31
+ * @returns Optimal layout configuration
32
+ */
33
+ calculateOptimalLayout(numContentPanes, terminalWidth, terminalHeight) {
34
+ const { SIDEBAR_WIDTH, MIN_COMFORTABLE_WIDTH, MAX_COMFORTABLE_WIDTH, MIN_COMFORTABLE_HEIGHT, } = this.config;
35
+ // Special case: welcome pane or no panes
36
+ if (numContentPanes === 0) {
37
+ return {
38
+ cols: 0,
39
+ rows: 0,
40
+ windowWidth: terminalWidth, // Unlimited width for welcome pane
41
+ paneDistribution: [],
42
+ actualPaneWidth: 0,
43
+ };
44
+ }
45
+ // Try all column counts and score them to find the best layout
46
+ let bestLayout = null;
47
+ let bestScore = -1;
48
+ for (let cols = numContentPanes; cols >= 1; cols--) {
49
+ const rows = Math.ceil(numContentPanes / cols);
50
+ const columnBorders = cols - 1; // Vertical borders between columns
51
+ const rowBorders = rows - 1; // Horizontal borders between rows
52
+ // Calculate minimum required dimensions (can we fit at MIN width?)
53
+ const minRequiredWidth = SIDEBAR_WIDTH + cols * MIN_COMFORTABLE_WIDTH + columnBorders;
54
+ const minRequiredHeight = rows * MIN_COMFORTABLE_HEIGHT + rowBorders;
55
+ // Check if this layout fits in terminal at minimum comfortable size
56
+ if (minRequiredWidth <= terminalWidth &&
57
+ minRequiredHeight <= terminalHeight) {
58
+ // This layout fits! Now calculate actual pane dimensions
59
+ // Calculate ideal window max-width (cap each pane at MAX_COMFORTABLE_WIDTH)
60
+ // Window should be: sidebar + (columns * MAX width) + borders OR terminal width, whichever is smaller
61
+ const idealMaxWidth = SIDEBAR_WIDTH + cols * MAX_COMFORTABLE_WIDTH + columnBorders;
62
+ const windowWidth = Math.min(idealMaxWidth, terminalWidth);
63
+ // Calculate actual pane width using the constrained windowWidth (not terminalWidth)
64
+ // This ensures panes don't exceed MAX_COMFORTABLE_WIDTH
65
+ const effectiveContentWidth = windowWidth - SIDEBAR_WIDTH - columnBorders;
66
+ const actualPaneWidth = effectiveContentWidth / cols;
67
+ // Calculate pane distribution for spanning (e.g., [2, 1, 1, 1])
68
+ const distribution = this.distributePanes(numContentPanes, cols);
69
+ // Calculate pane height
70
+ const availableHeight = terminalHeight - rowBorders;
71
+ const paneHeight = Math.floor(availableHeight / rows);
72
+ // Score this layout (higher is better)
73
+ const score = this.scoreLayout(numContentPanes, cols, rows, actualPaneWidth, paneHeight, terminalHeight);
74
+ // Update best if this score is higher, OR if tied but with fewer columns (more width per pane)
75
+ const isBetter = score > bestScore || (score === bestScore && cols < (bestLayout?.cols || Infinity));
76
+ if (isBetter) {
77
+ bestScore = score;
78
+ bestLayout = {
79
+ cols,
80
+ rows,
81
+ windowWidth,
82
+ paneDistribution: distribution,
83
+ actualPaneWidth,
84
+ };
85
+ }
86
+ }
87
+ }
88
+ // Return the best layout we found
89
+ if (bestLayout) {
90
+ return bestLayout;
91
+ }
92
+ // Ultimate fallback: single column (forced cramped layout if terminal too small)
93
+ return {
94
+ cols: 1,
95
+ rows: numContentPanes,
96
+ windowWidth: terminalWidth,
97
+ paneDistribution: [numContentPanes],
98
+ actualPaneWidth: terminalWidth - SIDEBAR_WIDTH,
99
+ };
100
+ }
101
+ /**
102
+ * Distributes panes as evenly as possible across columns
103
+ * Examples:
104
+ * 5 panes, 3 cols → [2, 2, 1] (first 2 columns get extra pane)
105
+ * 5 panes, 4 cols → [2, 1, 1, 1] (first column gets extra pane)
106
+ * 6 panes, 3 cols → [2, 2, 2] (perfectly even)
107
+ */
108
+ distributePanes(numPanes, cols) {
109
+ const distribution = [];
110
+ const basePerCol = Math.floor(numPanes / cols);
111
+ const remainder = numPanes % cols;
112
+ for (let i = 0; i < cols; i++) {
113
+ // First 'remainder' columns get an extra pane
114
+ distribution.push(basePerCol + (i < remainder ? 1 : 0));
115
+ }
116
+ return distribution;
117
+ }
118
+ /**
119
+ * Scores a layout based on multiple factors
120
+ * Prefers layouts that:
121
+ * 1. Have more vertical space (bigger height)
122
+ * 2. Are more balanced (fewer rows, but not too wide)
123
+ * 3. Don't have a single pane in the last row
124
+ *
125
+ * @returns Score (0-1, higher is better)
126
+ */
127
+ scoreLayout(numContentPanes, cols, rows, actualPaneWidth, paneHeight, terminalHeight) {
128
+ const { MAX_COMFORTABLE_WIDTH } = this.config;
129
+ // Prefer layouts that:
130
+ // 1. Have more vertical space (bigger height)
131
+ // 2. Are more balanced (fewer rows, but not too wide)
132
+ // 3. Don't have a single pane in the last row
133
+ const panesInLastRow = (numContentPanes % cols) || cols;
134
+ const balanceScore = panesInLastRow === 1 ? 0.5 : 1.0; // Penalize single pane in last row
135
+ const heightScore = paneHeight / terminalHeight; // More vertical space is better
136
+ const widthScore = actualPaneWidth <= MAX_COMFORTABLE_WIDTH ? 1.0 : 0.8; // Prefer panes within comfortable width
137
+ return balanceScore * heightScore * widthScore;
138
+ }
139
+ }
140
+ //# sourceMappingURL=LayoutCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutCalculator.js","sourceRoot":"","sources":["../../src/layout/LayoutCalculator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { LayoutConfig } from '../utils/layoutManager.js';
2
+ import type { LayoutConfiguration } from './LayoutCalculator.js';
3
+ /**
4
+ * SpacerManager - Manages spacer panes for preventing overly-wide content panes
5
+ *
6
+ * Responsibilities:
7
+ * - Determine when a spacer pane is needed
8
+ * - Create spacer panes (visual padding panes with dots)
9
+ * - Destroy spacer panes when no longer needed
10
+ * - Find existing spacer panes
11
+ *
12
+ * Background:
13
+ * When the last row of a grid layout has fewer panes than other rows,
14
+ * tmux will stretch those panes to fill the width. This can make panes
15
+ * uncomfortably wide (e.g., >100 chars). Spacer panes fill that extra
16
+ * space with non-interactive visual padding.
17
+ *
18
+ * Does NOT:
19
+ * - Calculate layouts
20
+ * - Apply layouts to tmux
21
+ * - Manage content panes
22
+ */
23
+ export declare class SpacerManager {
24
+ private config;
25
+ private tmuxService;
26
+ constructor(config: LayoutConfig);
27
+ /**
28
+ * Finds the spacer pane ID if it exists
29
+ * @returns Spacer pane ID or null if not found
30
+ */
31
+ findSpacerPane(): string | null;
32
+ /**
33
+ * Creates a spacer pane that displays static gray dots
34
+ * Always splits from the last content pane to ensure spacer comes last
35
+ *
36
+ * @param lastContentPaneId - The ID of the last content pane to split from
37
+ * @returns The new spacer pane ID
38
+ * @throws Error if pane creation fails
39
+ */
40
+ createSpacerPane(lastContentPaneId: string): string;
41
+ /**
42
+ * Destroys a spacer pane by ID
43
+ * @param spacerId - The pane ID to destroy
44
+ */
45
+ destroySpacerPane(spacerId: string): void;
46
+ /**
47
+ * Determines if we need a spacer pane based on layout configuration
48
+ *
49
+ * We need a spacer when panes in the last row would exceed MAX_COMFORTABLE_WIDTH
50
+ * if stretched to fill the available width.
51
+ *
52
+ * Algorithm:
53
+ * 1. Check if last row is incomplete (fewer panes than other rows)
54
+ * 2. Calculate width per pane if distributed evenly
55
+ * 3. If width > MAX_COMFORTABLE_WIDTH, we need a spacer
56
+ * 4. Verify spacer would be wide enough (>= MIN_SPACER_WIDTH)
57
+ *
58
+ * @param numContentPanes - Total number of content panes
59
+ * @param layout - Calculated layout configuration
60
+ * @returns true if spacer is needed
61
+ */
62
+ needsSpacerPane(numContentPanes: number, layout: LayoutConfiguration): boolean;
63
+ }
64
+ //# sourceMappingURL=SpacerManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpacerManager.d.ts","sourceRoot":"","sources":["../../src/layout/SpacerManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAa;IAGZ,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,WAAW,CAA6B;gBAE5B,MAAM,EAAE,YAAY;IAExC;;;OAGG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAe/B;;;;;;;OAOG;IACH,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM;IAiCnD;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASzC;;;;;;;;;;;;;;;OAeG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO;CAiD/E"}
@@ -0,0 +1,156 @@
1
+ import { TmuxService } from '../services/TmuxService.js';
2
+ // Spacer pane identifier
3
+ const SPACER_PANE_TITLE = 'dmux-spacer';
4
+ const MIN_SPACER_WIDTH = 20; // Minimum width for spacer pane (tmux may reject layouts with tiny panes)
5
+ /**
6
+ * SpacerManager - Manages spacer panes for preventing overly-wide content panes
7
+ *
8
+ * Responsibilities:
9
+ * - Determine when a spacer pane is needed
10
+ * - Create spacer panes (visual padding panes with dots)
11
+ * - Destroy spacer panes when no longer needed
12
+ * - Find existing spacer panes
13
+ *
14
+ * Background:
15
+ * When the last row of a grid layout has fewer panes than other rows,
16
+ * tmux will stretch those panes to fill the width. This can make panes
17
+ * uncomfortably wide (e.g., >100 chars). Spacer panes fill that extra
18
+ * space with non-interactive visual padding.
19
+ *
20
+ * Does NOT:
21
+ * - Calculate layouts
22
+ * - Apply layouts to tmux
23
+ * - Manage content panes
24
+ */
25
+ export class SpacerManager {
26
+ config;
27
+ tmuxService = TmuxService.getInstance();
28
+ constructor(config) {
29
+ this.config = config;
30
+ }
31
+ /**
32
+ * Finds the spacer pane ID if it exists
33
+ * @returns Spacer pane ID or null if not found
34
+ */
35
+ findSpacerPane() {
36
+ try {
37
+ const allPanes = this.tmuxService.getAllPaneIdsSync();
38
+ for (const paneId of allPanes) {
39
+ const title = this.tmuxService.getPaneTitleSync(paneId);
40
+ if (title === SPACER_PANE_TITLE) {
41
+ return paneId;
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // Ignore errors
47
+ }
48
+ return null;
49
+ }
50
+ /**
51
+ * Creates a spacer pane that displays static gray dots
52
+ * Always splits from the last content pane to ensure spacer comes last
53
+ *
54
+ * @param lastContentPaneId - The ID of the last content pane to split from
55
+ * @returns The new spacer pane ID
56
+ * @throws Error if pane creation fails
57
+ */
58
+ createSpacerPane(lastContentPaneId) {
59
+ try {
60
+ // Store the currently active pane
61
+ const originalPaneId = this.tmuxService.getCurrentPaneIdSync();
62
+ // Switch to the last content pane
63
+ this.tmuxService.selectPaneSync(lastContentPaneId);
64
+ // Create a new pane running our spacer-pane script (just dots, no ASCII art)
65
+ // This will split from the currently active pane (the last content pane)
66
+ const scriptPath = `${process.cwd()}/dist/spacer-pane.js`;
67
+ const newPaneId = this.tmuxService.splitPaneSync({
68
+ command: `node '${scriptPath}'`
69
+ });
70
+ // Set the pane title to identify it as a spacer
71
+ this.tmuxService.setPaneTitleSync(newPaneId, SPACER_PANE_TITLE);
72
+ // Return focus to the originally active pane
73
+ this.tmuxService.selectPaneSync(originalPaneId);
74
+ // LogService.getInstance().debug(
75
+ // `Created spacer pane: ${newPaneId} (split from ${lastContentPaneId}, restored focus to ${originalPaneId})`,
76
+ // 'Layout'
77
+ // );
78
+ return newPaneId;
79
+ }
80
+ catch (error) {
81
+ // LogService.getInstance().debug(`Failed to create spacer pane: ${error}`, 'Layout');
82
+ throw error;
83
+ }
84
+ }
85
+ /**
86
+ * Destroys a spacer pane by ID
87
+ * @param spacerId - The pane ID to destroy
88
+ */
89
+ destroySpacerPane(spacerId) {
90
+ try {
91
+ this.tmuxService.killPaneSync(spacerId);
92
+ // LogService.getInstance().debug(`Destroyed spacer pane: ${spacerId}`, 'Layout');
93
+ }
94
+ catch (error) {
95
+ // LogService.getInstance().debug(`Failed to destroy spacer pane: ${error}`, 'Layout');
96
+ }
97
+ }
98
+ /**
99
+ * Determines if we need a spacer pane based on layout configuration
100
+ *
101
+ * We need a spacer when panes in the last row would exceed MAX_COMFORTABLE_WIDTH
102
+ * if stretched to fill the available width.
103
+ *
104
+ * Algorithm:
105
+ * 1. Check if last row is incomplete (fewer panes than other rows)
106
+ * 2. Calculate width per pane if distributed evenly
107
+ * 3. If width > MAX_COMFORTABLE_WIDTH, we need a spacer
108
+ * 4. Verify spacer would be wide enough (>= MIN_SPACER_WIDTH)
109
+ *
110
+ * @param numContentPanes - Total number of content panes
111
+ * @param layout - Calculated layout configuration
112
+ * @returns true if spacer is needed
113
+ */
114
+ needsSpacerPane(numContentPanes, layout) {
115
+ const { cols, rows, windowWidth } = layout;
116
+ // No spacer needed if we have no content or only one column
117
+ if (cols === 0 || cols === 1)
118
+ return false;
119
+ // Calculate number of panes in last row (row-based layout)
120
+ // For 5 panes in 3 cols: (5 % 3) || 3 = 2 (last row has 2 panes)
121
+ // For 6 panes in 3 cols: (6 % 3) || 3 = 3 (last row is full)
122
+ const panesInLastRow = (numContentPanes % cols) || cols;
123
+ // If last row is full, no spacer needed
124
+ if (panesInLastRow === cols)
125
+ return false;
126
+ // Calculate available width for the last row
127
+ const contentWidth = windowWidth - this.config.SIDEBAR_WIDTH - 1;
128
+ const bordersInLastRow = panesInLastRow - 1;
129
+ const availableWidth = contentWidth - bordersInLastRow;
130
+ // Calculate width per pane if we distribute evenly
131
+ const widthPerPane = availableWidth / panesInLastRow;
132
+ // LogService.getInstance().debug(
133
+ // `Spacer check: ${panesInLastRow} panes in last row, ${Math.round(availableWidth)} available width, ${Math.round(widthPerPane)} per pane (max: ${this.config.MAX_COMFORTABLE_WIDTH})`,
134
+ // 'Layout'
135
+ // );
136
+ // Need spacer if distributing width evenly would exceed comfortable width
137
+ if (widthPerPane <= this.config.MAX_COMFORTABLE_WIDTH) {
138
+ return false;
139
+ }
140
+ // Calculate what the spacer width would be
141
+ const contentPaneWidth = this.config.MAX_COMFORTABLE_WIDTH;
142
+ const totalBorders = panesInLastRow; // Total borders if we add spacer (between N+1 panes)
143
+ const totalContentWidth = panesInLastRow * contentPaneWidth;
144
+ const spacerWidth = contentWidth - totalContentWidth - totalBorders;
145
+ // Only use spacer if it would be wide enough (avoid tmux rejecting tiny panes)
146
+ if (spacerWidth < MIN_SPACER_WIDTH) {
147
+ // LogService.getInstance().debug(
148
+ // `Spacer would be too narrow (${spacerWidth} < ${MIN_SPACER_WIDTH}), skipping spacer`,
149
+ // 'Layout'
150
+ // );
151
+ return false;
152
+ }
153
+ return true;
154
+ }
155
+ }
156
+ //# sourceMappingURL=SpacerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpacerManager.js","sourceRoot":"","sources":["../../src/layout/SpacerManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { LayoutConfig } from '../utils/layoutManager.js';
2
+ import type { LayoutConfiguration } from './LayoutCalculator.js';
3
+ /**
4
+ * TmuxLayoutApplier - Applies calculated layouts to tmux
5
+ *
6
+ * Responsibilities:
7
+ * - Set tmux window dimensions
8
+ * - Generate and apply tmux layout strings
9
+ * - Handle layout application failures with fallbacks
10
+ * - Resize control pane (sidebar)
11
+ *
12
+ * Does NOT:
13
+ * - Calculate layouts (use LayoutCalculator)
14
+ * - Manage spacer panes (use SpacerManager)
15
+ * - Determine when layouts need recalculation
16
+ */
17
+ export declare class TmuxLayoutApplier {
18
+ private config;
19
+ private tmuxService;
20
+ constructor(config: LayoutConfig);
21
+ /**
22
+ * Sets tmux window dimensions to match calculated layout
23
+ *
24
+ * Accounts for status bar height to prevent terminal scrolling.
25
+ * Only resizes if dimensions have actually changed to prevent resize loops.
26
+ *
27
+ * @param width - Desired window width in cells
28
+ * @param height - Desired terminal height in cells (will subtract status bar)
29
+ */
30
+ setWindowDimensions(width: number, height: number): void;
31
+ /**
32
+ * Applies the calculated layout to tmux panes
33
+ *
34
+ * Strategy:
35
+ * 1. Generate custom layout string using sidebar grid algorithm
36
+ * 2. Apply layout via tmux select-layout
37
+ * 3. Fallback to main-vertical if custom layout fails
38
+ * 4. Ultimate fallback: just resize sidebar
39
+ *
40
+ * @param controlPaneId - ID of sidebar/control pane
41
+ * @param contentPaneIds - IDs of content panes (in display order)
42
+ * @param layout - Calculated layout configuration
43
+ * @param terminalHeight - Terminal height in cells
44
+ */
45
+ applyPaneLayout(controlPaneId: string, contentPaneIds: string[], layout: LayoutConfiguration, terminalHeight: number): void;
46
+ /**
47
+ * Resizes the control pane (sidebar) to configured width
48
+ * Used as ultimate fallback when layout application fails
49
+ */
50
+ private resizeControlPane;
51
+ /**
52
+ * Applies main-vertical layout as fallback
53
+ * Used when custom layout string generation or application fails
54
+ */
55
+ private applyMainVerticalFallback;
56
+ /**
57
+ * Logs current pane state for debugging
58
+ * Useful for diagnosing layout application failures
59
+ */
60
+ private logPaneState;
61
+ }
62
+ //# sourceMappingURL=TmuxLayoutApplier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TmuxLayoutApplier.d.ts","sourceRoot":"","sources":["../../src/layout/TmuxLayoutApplier.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,WAAW,CAA6B;gBAE5B,MAAM,EAAE,YAAY;IAExC;;;;;;;;OAQG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAyBxD;;;;;;;;;;;;;OAaG;IACH,eAAe,CACb,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,mBAAmB,EAC3B,cAAc,EAAE,MAAM,GACrB,IAAI;IAoDP;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;;OAGG;IACH,OAAO,CAAC,YAAY;CASrB"}
@@ -0,0 +1,147 @@
1
+ import { LogService } from '../services/LogService.js';
2
+ import { TmuxService } from '../services/TmuxService.js';
3
+ import { generateSidebarGridLayout } from '../utils/tmux.js';
4
+ /**
5
+ * TmuxLayoutApplier - Applies calculated layouts to tmux
6
+ *
7
+ * Responsibilities:
8
+ * - Set tmux window dimensions
9
+ * - Generate and apply tmux layout strings
10
+ * - Handle layout application failures with fallbacks
11
+ * - Resize control pane (sidebar)
12
+ *
13
+ * Does NOT:
14
+ * - Calculate layouts (use LayoutCalculator)
15
+ * - Manage spacer panes (use SpacerManager)
16
+ * - Determine when layouts need recalculation
17
+ */
18
+ export class TmuxLayoutApplier {
19
+ config;
20
+ tmuxService = TmuxService.getInstance();
21
+ constructor(config) {
22
+ this.config = config;
23
+ }
24
+ /**
25
+ * Sets tmux window dimensions to match calculated layout
26
+ *
27
+ * Accounts for status bar height to prevent terminal scrolling.
28
+ * Only resizes if dimensions have actually changed to prevent resize loops.
29
+ *
30
+ * @param width - Desired window width in cells
31
+ * @param height - Desired terminal height in cells (will subtract status bar)
32
+ */
33
+ setWindowDimensions(width, height) {
34
+ try {
35
+ // Subtract status bar height from the provided terminal height
36
+ const statusBarHeight = this.tmuxService.getStatusBarHeightSync();
37
+ const windowHeight = height - statusBarHeight;
38
+ // Check if dimensions have actually changed
39
+ const currentDims = this.tmuxService.getWindowDimensionsSync();
40
+ if (currentDims.width === width && currentDims.height === windowHeight) {
41
+ // Dimensions already correct, skip resize to prevent loops
42
+ return;
43
+ }
44
+ // Use manual mode to constrain width, but also set height to match terminal
45
+ this.tmuxService.setWindowOptionSync('window-size', 'manual');
46
+ this.tmuxService.resizeWindowSync({ width, height: windowHeight });
47
+ }
48
+ catch (error) {
49
+ // Log but don't fail - some tmux versions may not support this
50
+ LogService.getInstance().warn(`Could not set window dimensions to ${width}x${height}: ${error}`, 'Layout');
51
+ }
52
+ }
53
+ /**
54
+ * Applies the calculated layout to tmux panes
55
+ *
56
+ * Strategy:
57
+ * 1. Generate custom layout string using sidebar grid algorithm
58
+ * 2. Apply layout via tmux select-layout
59
+ * 3. Fallback to main-vertical if custom layout fails
60
+ * 4. Ultimate fallback: just resize sidebar
61
+ *
62
+ * @param controlPaneId - ID of sidebar/control pane
63
+ * @param contentPaneIds - IDs of content panes (in display order)
64
+ * @param layout - Calculated layout configuration
65
+ * @param terminalHeight - Terminal height in cells
66
+ */
67
+ applyPaneLayout(controlPaneId, contentPaneIds, layout, terminalHeight) {
68
+ const numContentPanes = contentPaneIds.length;
69
+ if (numContentPanes === 0) {
70
+ // No content panes, just resize sidebar
71
+ this.resizeControlPane(controlPaneId);
72
+ return;
73
+ }
74
+ try {
75
+ // Always use custom layout string generation - unified approach for all cases
76
+ // Use the calculated window dimensions, not current tmux dimensions (may be stale)
77
+ const layoutString = generateSidebarGridLayout(controlPaneId, contentPaneIds, this.config.SIDEBAR_WIDTH, layout.windowWidth, terminalHeight, layout.cols, this.config.MAX_COMFORTABLE_WIDTH);
78
+ if (layoutString) {
79
+ // Log pane state right before applying layout
80
+ this.logPaneState();
81
+ try {
82
+ this.tmuxService.selectLayoutSync(layoutString);
83
+ // LogService.getInstance().debug('Layout string applied successfully', 'Layout');
84
+ }
85
+ catch (layoutError) {
86
+ // Log the error for debugging
87
+ const errorMsg = layoutError?.message || String(layoutError);
88
+ LogService.getInstance().error(`Layout string application failed: ${errorMsg}`, 'Layout');
89
+ // LogService.getInstance().debug(`Failed layout string: ${layoutString}`, 'Layout');
90
+ // Fallback to main-vertical if custom layout fails
91
+ this.applyMainVerticalFallback();
92
+ }
93
+ }
94
+ else {
95
+ // Empty layout string - fallback to main-vertical
96
+ // LogService.getInstance().debug('Empty layout string, using main-vertical fallback', 'Layout');
97
+ this.applyMainVerticalFallback();
98
+ }
99
+ }
100
+ catch (error) {
101
+ // Fallback: just resize sidebar
102
+ this.resizeControlPane(controlPaneId);
103
+ }
104
+ }
105
+ /**
106
+ * Resizes the control pane (sidebar) to configured width
107
+ * Used as ultimate fallback when layout application fails
108
+ */
109
+ resizeControlPane(controlPaneId) {
110
+ try {
111
+ this.tmuxService.resizePaneSync(controlPaneId, {
112
+ width: this.config.SIDEBAR_WIDTH
113
+ });
114
+ }
115
+ catch (error) {
116
+ LogService.getInstance().error('Error resizing control pane', 'Layout', undefined, error instanceof Error ? error : undefined);
117
+ }
118
+ }
119
+ /**
120
+ * Applies main-vertical layout as fallback
121
+ * Used when custom layout string generation or application fails
122
+ */
123
+ applyMainVerticalFallback() {
124
+ try {
125
+ this.tmuxService.setWindowOptionSync('main-pane-width', String(this.config.SIDEBAR_WIDTH));
126
+ this.tmuxService.selectLayoutSync('main-vertical');
127
+ // LogService.getInstance().debug('Fell back to main-vertical layout', 'Layout');
128
+ }
129
+ catch (error) {
130
+ LogService.getInstance().error(`Main-vertical fallback failed: ${error}`, 'Layout');
131
+ }
132
+ }
133
+ /**
134
+ * Logs current pane state for debugging
135
+ * Useful for diagnosing layout application failures
136
+ */
137
+ logPaneState() {
138
+ // Commented out to reduce log noise
139
+ // try {
140
+ // const paneList = this.tmuxService.listPanesSync('#{pane_id}=#{pane_index}');
141
+ // LogService.getInstance().debug(`Panes right before layout apply: ${paneList}`, 'Layout');
142
+ // } catch {
143
+ // // Ignore errors
144
+ // }
145
+ }
146
+ }
147
+ //# sourceMappingURL=TmuxLayoutApplier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TmuxLayoutApplier.js","sourceRoot":"","sources":["../../src/layout/TmuxLayoutApplier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorative-pane.d.ts","sourceRoot":"","sources":["../../src/panes/decorative-pane.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  // Decorative pane renderer - displays ASCII art with animated falling binary characters
3
3
  // This runs continuously without showing a command prompt
4
- import { ASCII_ART as ASCII_ART_EXPORTS } from "./utils/asciiArt.js";
4
+ import { ASCII_ART as ASCII_ART_EXPORTS } from "../utils/asciiArt.js";
5
5
  // Parse the ASCII art string into an array of lines
6
6
  const ASCII_ART = ASCII_ART_EXPORTS.dmuxWelcome.trim().split("\n");
7
7
  const FILL_CHAR = "·";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorative-pane.js","sourceRoot":"","sources":["../../src/panes/decorative-pane.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacer-pane.d.ts","sourceRoot":"","sources":["../../src/panes/spacer-pane.ts"],"names":[],"mappings":";AAKA,QAAA,MAAM,QAAQ,qBAAmB,CAAA;AACjC,QAAA,MAAM,KAAK,cAAY,CAAA;AACvB,QAAA,MAAM,SAAS,WAAM,CAAA;AAErB,iBAAS,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAcnD;AAGD,QAAA,MAAM,YAAY,QAA+B,CAAA;AACjD,QAAA,MAAM,aAAa,QAA4B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacer-pane.js","sourceRoot":"","sources":["../../src/panes/spacer-pane.ts"],"names":[],"mappings":";;AAEA,sDAAsD;AACtD,sCAAsC;AAEtC,MAAM,QAAQ,GAAG,gBAAgB,CAAA,CAAC,+BAA+B;AACjE,MAAM,KAAK,GAAG,SAAS,CAAA;AACvB,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB,SAAS,MAAM,CAAC,KAAa,EAAE,MAAc;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;QACtC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IAED,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA,CAAC,+BAA+B;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,iBAAiB;AACjB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;AACjD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;AAC/C,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AAEnC,+BAA+B;AAC/B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IACxC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AAEF,2BAA2B;AAC3B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;AAEtB,2BAA2B;AAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"embedded-assets.d.ts","sourceRoot":"","sources":["../../src/server/embedded-assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAwrMxD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAInE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD"}
1
+ {"version":3,"file":"embedded-assets.d.ts","sourceRoot":"","sources":["../../src/server/embedded-assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAk2CxD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAInE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD"}