dmux 3.1.1 → 3.3.0

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