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.
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +270 -1606
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/implementations/closeAction.d.ts +10 -0
- package/dist/actions/implementations/closeAction.d.ts.map +1 -0
- package/dist/actions/implementations/closeAction.js +201 -0
- package/dist/actions/implementations/closeAction.js.map +1 -0
- package/dist/actions/implementations/copyPathAction.d.ts +10 -0
- package/dist/actions/implementations/copyPathAction.d.ts.map +1 -0
- package/dist/actions/implementations/copyPathAction.js +34 -0
- package/dist/actions/implementations/copyPathAction.js.map +1 -0
- package/dist/actions/implementations/duplicateAction.d.ts +10 -0
- package/dist/actions/implementations/duplicateAction.d.ts.map +1 -0
- package/dist/actions/implementations/duplicateAction.js +25 -0
- package/dist/actions/implementations/duplicateAction.js.map +1 -0
- package/dist/actions/implementations/index.d.ts +14 -0
- package/dist/actions/implementations/index.d.ts.map +1 -0
- package/dist/actions/implementations/index.js +14 -0
- package/dist/actions/implementations/index.js.map +1 -0
- package/dist/actions/implementations/mergeAction.d.ts +14 -0
- package/dist/actions/implementations/mergeAction.d.ts.map +1 -0
- package/dist/actions/implementations/mergeAction.js +84 -0
- package/dist/actions/implementations/mergeAction.js.map +1 -0
- package/dist/actions/implementations/openInEditorAction.d.ts +12 -0
- package/dist/actions/implementations/openInEditorAction.d.ts.map +1 -0
- package/dist/actions/implementations/openInEditorAction.js +33 -0
- package/dist/actions/implementations/openInEditorAction.js.map +1 -0
- package/dist/actions/implementations/renameAction.d.ts +13 -0
- package/dist/actions/implementations/renameAction.d.ts.map +1 -0
- package/dist/actions/implementations/renameAction.js +18 -0
- package/dist/actions/implementations/renameAction.js.map +1 -0
- package/dist/actions/implementations/toggleAutopilotAction.d.ts +10 -0
- package/dist/actions/implementations/toggleAutopilotAction.d.ts.map +1 -0
- package/dist/actions/implementations/toggleAutopilotAction.js +33 -0
- package/dist/actions/implementations/toggleAutopilotAction.js.map +1 -0
- package/dist/actions/implementations/viewAction.d.ts +10 -0
- package/dist/actions/implementations/viewAction.d.ts.map +1 -0
- package/dist/actions/implementations/viewAction.js +26 -0
- package/dist/actions/implementations/viewAction.js.map +1 -0
- package/dist/actions/merge/commitMessageHandler.d.ts +27 -0
- package/dist/actions/merge/commitMessageHandler.d.ts.map +1 -0
- package/dist/actions/merge/commitMessageHandler.js +123 -0
- package/dist/actions/merge/commitMessageHandler.js.map +1 -0
- package/dist/actions/merge/conflictResolution.d.ts +13 -0
- package/dist/actions/merge/conflictResolution.d.ts.map +1 -0
- package/dist/actions/merge/conflictResolution.js +134 -0
- package/dist/actions/merge/conflictResolution.js.map +1 -0
- package/dist/actions/merge/issueHandlers/index.d.ts +11 -0
- package/dist/actions/merge/issueHandlers/index.d.ts.map +1 -0
- package/dist/actions/merge/issueHandlers/index.js +8 -0
- package/dist/actions/merge/issueHandlers/index.js.map +1 -0
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts +13 -0
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.d.ts.map +1 -0
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.js +72 -0
- package/dist/actions/merge/issueHandlers/mainDirtyHandler.js.map +1 -0
- package/dist/actions/merge/issueHandlers/mergeConflictHandler.d.ts +13 -0
- package/dist/actions/merge/issueHandlers/mergeConflictHandler.d.ts.map +1 -0
- package/dist/actions/merge/issueHandlers/mergeConflictHandler.js +52 -0
- package/dist/actions/merge/issueHandlers/mergeConflictHandler.js.map +1 -0
- package/dist/actions/merge/issueHandlers/nothingToMergeHandler.d.ts +7 -0
- package/dist/actions/merge/issueHandlers/nothingToMergeHandler.d.ts.map +1 -0
- package/dist/actions/merge/issueHandlers/nothingToMergeHandler.js +12 -0
- package/dist/actions/merge/issueHandlers/nothingToMergeHandler.js.map +1 -0
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts +13 -0
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.d.ts.map +1 -0
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js +49 -0
- package/dist/actions/merge/issueHandlers/worktreeUncommittedHandler.js.map +1 -0
- package/dist/actions/merge/mergeExecution.d.ts +22 -0
- package/dist/actions/merge/mergeExecution.d.ts.map +1 -0
- package/dist/actions/merge/mergeExecution.js +184 -0
- package/dist/actions/merge/mergeExecution.js.map +1 -0
- package/dist/actions/paneActions.d.ts +3 -40
- package/dist/actions/paneActions.d.ts.map +1 -1
- package/dist/actions/paneActions.js +4 -1038
- package/dist/actions/paneActions.js.map +1 -1
- package/dist/actions/types.d.ts +1 -0
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js.map +1 -1
- package/dist/components/{ActionChoiceDialog.d.ts → dialogs/ActionChoiceDialog.d.ts} +1 -1
- package/dist/components/dialogs/ActionChoiceDialog.d.ts.map +1 -0
- package/dist/components/dialogs/ActionChoiceDialog.js.map +1 -0
- package/dist/components/dialogs/ActionConfirmDialog.d.ts.map +1 -0
- package/dist/components/dialogs/ActionConfirmDialog.js.map +1 -0
- package/dist/components/dialogs/ActionInputDialog.d.ts.map +1 -0
- package/dist/components/{ActionInputDialog.js → dialogs/ActionInputDialog.js} +2 -2
- package/dist/components/dialogs/ActionInputDialog.js.map +1 -0
- package/dist/components/dialogs/ActionProgressDialog.d.ts.map +1 -0
- package/dist/components/dialogs/ActionProgressDialog.js.map +1 -0
- package/dist/components/dialogs/AgentChoiceDialog.d.ts.map +1 -0
- package/dist/components/dialogs/AgentChoiceDialog.js.map +1 -0
- package/dist/components/{CloseOptionsDialog.d.ts → dialogs/CloseOptionsDialog.d.ts} +1 -1
- package/dist/components/dialogs/CloseOptionsDialog.d.ts.map +1 -0
- package/dist/components/dialogs/CloseOptionsDialog.js.map +1 -0
- package/dist/components/dialogs/CommandPromptDialog.d.ts.map +1 -0
- package/dist/components/{CommandPromptDialog.js → dialogs/CommandPromptDialog.js} +1 -1
- package/dist/components/dialogs/CommandPromptDialog.js.map +1 -0
- package/dist/components/dialogs/DialogBox.d.ts.map +1 -0
- package/dist/components/dialogs/DialogBox.js.map +1 -0
- package/dist/components/dialogs/HooksDialog.d.ts.map +1 -0
- package/dist/components/dialogs/HooksDialog.js.map +1 -0
- package/dist/components/{MergeConfirmationDialog.d.ts → dialogs/MergeConfirmationDialog.d.ts} +1 -1
- package/dist/components/dialogs/MergeConfirmationDialog.d.ts.map +1 -0
- package/dist/components/dialogs/MergeConfirmationDialog.js.map +1 -0
- package/dist/components/{SettingsDialog.d.ts → dialogs/SettingsDialog.d.ts} +1 -1
- package/dist/components/dialogs/SettingsDialog.d.ts.map +1 -0
- package/dist/components/dialogs/SettingsDialog.js.map +1 -0
- package/dist/components/dialogs/UpdateDialog.d.ts.map +1 -0
- package/dist/components/dialogs/UpdateDialog.js.map +1 -0
- package/dist/components/indicators/CreatingIndicator.d.ts.map +1 -0
- package/dist/components/indicators/CreatingIndicator.js.map +1 -0
- package/dist/components/indicators/LoadingIndicator.d.ts.map +1 -0
- package/dist/components/indicators/LoadingIndicator.js.map +1 -0
- package/dist/components/indicators/RunningIndicator.d.ts.map +1 -0
- package/dist/components/indicators/RunningIndicator.js.map +1 -0
- package/dist/components/indicators/Spinner.d.ts.map +1 -0
- package/dist/components/indicators/Spinner.js.map +1 -0
- package/dist/components/indicators/UpdatingIndicator.d.ts.map +1 -0
- package/dist/components/indicators/UpdatingIndicator.js.map +1 -0
- package/dist/components/indicators/index.d.ts +6 -0
- package/dist/components/indicators/index.d.ts.map +1 -0
- package/dist/components/indicators/index.js +6 -0
- package/dist/components/indicators/index.js.map +1 -0
- package/dist/components/inputs/CleanTextInput.d.ts.map +1 -0
- package/dist/{CleanTextInput.js → components/inputs/CleanTextInput.js} +2 -144
- package/dist/components/inputs/CleanTextInput.js.map +1 -0
- package/dist/components/inputs/StyledTextInput.d.ts.map +1 -0
- package/dist/components/inputs/StyledTextInput.js.map +1 -0
- package/dist/components/inputs/index.d.ts +3 -0
- package/dist/components/inputs/index.d.ts.map +1 -0
- package/dist/components/inputs/index.js +3 -0
- package/dist/components/inputs/index.js.map +1 -0
- package/dist/components/{KebabMenu.d.ts → panes/KebabMenu.d.ts} +1 -1
- package/dist/components/panes/KebabMenu.d.ts.map +1 -0
- package/dist/components/panes/KebabMenu.js.map +1 -0
- package/dist/components/panes/MergePane.d.ts.map +1 -0
- package/dist/{MergePane.js → components/panes/MergePane.js} +1 -1
- package/dist/components/panes/MergePane.js.map +1 -0
- package/dist/components/{PaneCard.d.ts → panes/PaneCard.d.ts} +1 -1
- package/dist/components/panes/PaneCard.d.ts.map +1 -0
- package/dist/components/{PaneCard.js → panes/PaneCard.js} +1 -1
- package/dist/components/panes/PaneCard.js.map +1 -0
- package/dist/components/{PanesGrid.d.ts → panes/PanesGrid.d.ts} +2 -2
- package/dist/components/panes/PanesGrid.d.ts.map +1 -0
- package/dist/components/{PanesGrid.js → panes/PanesGrid.js} +1 -1
- package/dist/components/panes/PanesGrid.js.map +1 -0
- package/dist/components/panes/index.d.ts +5 -0
- package/dist/components/panes/index.d.ts.map +1 -0
- package/dist/components/panes/index.js +5 -0
- package/dist/components/panes/index.js.map +1 -0
- package/dist/components/popups/agentChoicePopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/agentChoicePopup.js +1 -1
- package/dist/components/popups/agentChoicePopup.js.map +1 -0
- package/dist/components/popups/choicePopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/choicePopup.js +3 -3
- package/dist/components/popups/choicePopup.js.map +1 -0
- package/dist/components/popups/config.d.ts.map +1 -0
- package/dist/{popups → components/popups}/config.js +1 -1
- package/dist/components/popups/config.js.map +1 -0
- package/dist/components/popups/confirmPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/confirmPopup.js +2 -3
- package/dist/components/popups/confirmPopup.js.map +1 -0
- package/dist/components/popups/hooksPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/hooksPopup.js +1 -1
- package/dist/components/popups/hooksPopup.js.map +1 -0
- package/dist/components/popups/inputPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/inputPopup.js +3 -4
- package/dist/components/popups/inputPopup.js.map +1 -0
- package/dist/components/popups/kebabMenuPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/kebabMenuPopup.js +1 -1
- package/dist/components/popups/kebabMenuPopup.js.map +1 -0
- package/dist/components/popups/logsPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/logsPopup.js +15 -7
- package/dist/components/popups/logsPopup.js.map +1 -0
- package/dist/components/popups/mergePopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/mergePopup.js +6 -6
- package/dist/components/popups/mergePopup.js.map +1 -0
- package/dist/components/popups/newPanePopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/newPanePopup.js +3 -3
- package/dist/components/popups/newPanePopup.js.map +1 -0
- package/dist/components/popups/progressPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/progressPopup.js +1 -2
- package/dist/components/popups/progressPopup.js.map +1 -0
- package/dist/components/popups/remotePopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/remotePopup.js +1 -1
- package/dist/components/popups/remotePopup.js.map +1 -0
- package/dist/components/popups/settingsPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/settingsPopup.js +1 -1
- package/dist/components/popups/settingsPopup.js.map +1 -0
- package/dist/components/popups/shared/FileList.d.ts.map +1 -0
- package/dist/components/popups/shared/FileList.js.map +1 -0
- package/dist/components/popups/shared/PopupContainer.d.ts.map +1 -0
- package/dist/components/popups/shared/PopupContainer.js.map +1 -0
- package/dist/components/popups/shared/PopupInputBox.d.ts.map +1 -0
- package/dist/components/popups/shared/PopupInputBox.js.map +1 -0
- package/dist/components/popups/shared/PopupWrapper.d.ts.map +1 -0
- package/dist/components/popups/shared/PopupWrapper.js.map +1 -0
- package/dist/components/popups/shared/index.d.ts.map +1 -0
- package/dist/components/popups/shared/index.js.map +1 -0
- package/dist/components/popups/shortcutsPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/shortcutsPopup.js +1 -1
- package/dist/components/popups/shortcutsPopup.js.map +1 -0
- package/dist/components/popups/templates/SimpleInputPopup.d.ts.map +1 -0
- package/dist/{popups → components/popups}/templates/SimpleInputPopup.js +2 -2
- package/dist/components/popups/templates/SimpleInputPopup.js.map +1 -0
- package/dist/components/ui/FileCopyPrompt.d.ts.map +1 -0
- package/dist/components/ui/FileCopyPrompt.js.map +1 -0
- package/dist/components/{FooterHelp.d.ts → ui/FooterHelp.d.ts} +4 -0
- package/dist/components/ui/FooterHelp.d.ts.map +1 -0
- package/dist/components/{FooterHelp.js → ui/FooterHelp.js} +45 -1
- package/dist/components/ui/FooterHelp.js.map +1 -0
- package/dist/components/ui/QRCode.d.ts.map +1 -0
- package/dist/components/ui/QRCode.js.map +1 -0
- package/dist/components/ui/ToastNotification.d.ts +13 -0
- package/dist/components/ui/ToastNotification.d.ts.map +1 -0
- package/dist/components/ui/ToastNotification.js +22 -0
- package/dist/components/ui/ToastNotification.js.map +1 -0
- package/dist/components/ui/index.d.ts +4 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +4 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/constants/timing.d.ts +22 -0
- package/dist/constants/timing.d.ts.map +1 -0
- package/dist/constants/timing.js +26 -0
- package/dist/constants/timing.js.map +1 -0
- package/dist/dashboard.js +2 -2
- package/dist/hooks/useActionSystem.d.ts +5 -4
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +105 -114
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useDebugInfo.d.ts +11 -0
- package/dist/hooks/useDebugInfo.d.ts.map +1 -0
- package/dist/hooks/useDebugInfo.js +34 -0
- package/dist/hooks/useDebugInfo.js.map +1 -0
- package/dist/hooks/useDialogState.d.ts +22 -0
- package/dist/hooks/useDialogState.d.ts.map +1 -0
- package/dist/hooks/useDialogState.js +62 -0
- package/dist/hooks/useDialogState.js.map +1 -0
- package/dist/hooks/useInputHandling.d.ts +60 -0
- package/dist/hooks/useInputHandling.d.ts.map +1 -0
- package/dist/hooks/useInputHandling.js +294 -0
- package/dist/hooks/useInputHandling.js.map +1 -0
- package/dist/hooks/useLayoutManagement.d.ts +12 -0
- package/dist/hooks/useLayoutManagement.d.ts.map +1 -0
- package/dist/hooks/useLayoutManagement.js +63 -0
- package/dist/hooks/useLayoutManagement.js.map +1 -0
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +4 -9
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePaneLoading.d.ts +45 -0
- package/dist/hooks/usePaneLoading.d.ts.map +1 -0
- package/dist/hooks/usePaneLoading.js +208 -0
- package/dist/hooks/usePaneLoading.js.map +1 -0
- package/dist/hooks/usePaneRunner.d.ts.map +1 -1
- package/dist/hooks/usePaneRunner.js +9 -6
- package/dist/hooks/usePaneRunner.js.map +1 -1
- package/dist/hooks/usePaneSync.d.ts +34 -0
- package/dist/hooks/usePaneSync.d.ts.map +1 -0
- package/dist/hooks/usePaneSync.js +186 -0
- package/dist/hooks/usePaneSync.js.map +1 -0
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +68 -406
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useServices.d.ts +24 -0
- package/dist/hooks/useServices.d.ts.map +1 -0
- package/dist/hooks/useServices.js +39 -0
- package/dist/hooks/useServices.js.map +1 -0
- package/dist/hooks/useShellDetection.d.ts +10 -0
- package/dist/hooks/useShellDetection.d.ts.map +1 -0
- package/dist/hooks/useShellDetection.js +67 -0
- package/dist/hooks/useShellDetection.js.map +1 -0
- package/dist/hooks/useStatusMessages.d.ts +11 -0
- package/dist/hooks/useStatusMessages.d.ts.map +1 -0
- package/dist/hooks/useStatusMessages.js +32 -0
- package/dist/hooks/useStatusMessages.js.map +1 -0
- package/dist/hooks/useTemporaryStatus.d.ts +13 -0
- package/dist/hooks/useTemporaryStatus.d.ts.map +1 -0
- package/dist/hooks/useTemporaryStatus.js +30 -0
- package/dist/hooks/useTemporaryStatus.js.map +1 -0
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
- package/dist/hooks/useTerminalWidth.js +7 -12
- package/dist/hooks/useTerminalWidth.js.map +1 -1
- package/dist/hooks/useTunnelManagement.d.ts +18 -0
- package/dist/hooks/useTunnelManagement.d.ts.map +1 -0
- package/dist/hooks/useTunnelManagement.js +55 -0
- package/dist/hooks/useTunnelManagement.js.map +1 -0
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +18 -13
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +124 -94
- package/dist/index.js.map +1 -1
- package/dist/layout/LayoutCalculator.d.ts +62 -0
- package/dist/layout/LayoutCalculator.d.ts.map +1 -0
- package/dist/layout/LayoutCalculator.js +140 -0
- package/dist/layout/LayoutCalculator.js.map +1 -0
- package/dist/layout/SpacerManager.d.ts +64 -0
- package/dist/layout/SpacerManager.d.ts.map +1 -0
- package/dist/layout/SpacerManager.js +156 -0
- package/dist/layout/SpacerManager.js.map +1 -0
- package/dist/layout/TmuxLayoutApplier.d.ts +62 -0
- package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -0
- package/dist/layout/TmuxLayoutApplier.js +147 -0
- package/dist/layout/TmuxLayoutApplier.js.map +1 -0
- package/dist/panes/decorative-pane.d.ts.map +1 -0
- package/dist/{decorative-pane.js → panes/decorative-pane.js} +1 -1
- package/dist/panes/decorative-pane.js.map +1 -0
- package/dist/panes/spacer-pane.d.ts.map +1 -0
- package/dist/panes/spacer-pane.js.map +1 -0
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +727 -5677
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/server/routes/actionsRoutes.d.ts +2 -0
- package/dist/server/routes/actionsRoutes.d.ts.map +1 -0
- package/dist/server/routes/actionsRoutes.js +110 -0
- package/dist/server/routes/actionsRoutes.js.map +1 -0
- package/dist/server/routes/healthRoutes.d.ts +13 -0
- package/dist/server/routes/healthRoutes.d.ts.map +1 -0
- package/dist/server/routes/healthRoutes.js +70 -0
- package/dist/server/routes/healthRoutes.js.map +1 -0
- package/dist/server/routes/index.d.ts +8 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +67 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/keysRoutes.d.ts +33 -0
- package/dist/server/routes/keysRoutes.d.ts.map +1 -0
- package/dist/server/routes/keysRoutes.js +128 -0
- package/dist/server/routes/keysRoutes.js.map +1 -0
- package/dist/server/routes/panesRoutes.d.ts +2 -0
- package/dist/server/routes/panesRoutes.d.ts.map +1 -0
- package/dist/server/routes/panesRoutes.js +373 -0
- package/dist/server/routes/panesRoutes.js.map +1 -0
- package/dist/server/routes/settingsRoutes.d.ts +94 -0
- package/dist/server/routes/settingsRoutes.d.ts.map +1 -0
- package/dist/server/routes/settingsRoutes.js +159 -0
- package/dist/server/routes/settingsRoutes.js.map +1 -0
- package/dist/server/routes/streamRoutes.d.ts +18 -0
- package/dist/server/routes/streamRoutes.d.ts.map +1 -0
- package/dist/server/routes/streamRoutes.js +87 -0
- package/dist/server/routes/streamRoutes.js.map +1 -0
- package/dist/server/routes/tunnelRoutes.d.ts +11 -0
- package/dist/server/routes/tunnelRoutes.d.ts.map +1 -0
- package/dist/server/routes/tunnelRoutes.js +28 -0
- package/dist/server/routes/tunnelRoutes.js.map +1 -0
- package/dist/server/routes.d.ts +16 -2
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +16 -878
- package/dist/server/routes.js.map +1 -1
- package/dist/{AutoUpdater.d.ts → services/AutoUpdater.d.ts} +1 -0
- package/dist/services/AutoUpdater.d.ts.map +1 -0
- package/dist/{AutoUpdater.js → services/AutoUpdater.js} +44 -10
- package/dist/services/AutoUpdater.js.map +1 -0
- package/dist/services/PaneAnalyzer.d.ts.map +1 -0
- package/dist/{PaneAnalyzer.js → services/PaneAnalyzer.js} +1 -1
- package/dist/services/PaneAnalyzer.js.map +1 -0
- package/dist/services/PaneLifecycleManager.d.ts +60 -0
- package/dist/services/PaneLifecycleManager.d.ts.map +1 -0
- package/dist/services/PaneLifecycleManager.js +119 -0
- package/dist/services/PaneLifecycleManager.js.map +1 -0
- package/dist/services/PaneWorkerManager.d.ts.map +1 -1
- package/dist/services/PaneWorkerManager.js +6 -3
- package/dist/services/PaneWorkerManager.js.map +1 -1
- package/dist/services/PopupManager.d.ts +68 -0
- package/dist/services/PopupManager.d.ts.map +1 -0
- package/dist/services/PopupManager.js +415 -0
- package/dist/services/PopupManager.js.map +1 -0
- package/dist/services/StatusDetector.d.ts.map +1 -1
- package/dist/services/StatusDetector.js +6 -8
- package/dist/services/StatusDetector.js.map +1 -1
- package/dist/services/TerminalStreamer.d.ts +1 -0
- package/dist/services/TerminalStreamer.d.ts.map +1 -1
- package/dist/services/TerminalStreamer.js +22 -16
- package/dist/services/TerminalStreamer.js.map +1 -1
- package/dist/services/TmuxService.d.ts +346 -0
- package/dist/services/TmuxService.d.ts.map +1 -0
- package/dist/services/TmuxService.js +849 -0
- package/dist/services/TmuxService.js.map +1 -0
- package/dist/services/ToastService.d.ts +71 -0
- package/dist/services/ToastService.d.ts.map +1 -0
- package/dist/services/ToastService.js +151 -0
- package/dist/services/ToastService.js.map +1 -0
- package/dist/services/TunnelService.d.ts.map +1 -1
- package/dist/services/TunnelService.js +2 -1
- package/dist/services/TunnelService.js.map +1 -1
- package/dist/shared/StateManager.d.ts +22 -0
- package/dist/shared/StateManager.d.ts.map +1 -1
- package/dist/shared/StateManager.js +68 -1
- package/dist/shared/StateManager.js.map +1 -1
- package/dist/terminal.js +3 -3
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/asciiArt.d.ts.map +1 -1
- package/dist/utils/asciiArt.js +9 -22
- package/dist/utils/asciiArt.js.map +1 -1
- package/dist/utils/atomicWrite.d.ts +33 -0
- package/dist/utils/atomicWrite.d.ts.map +1 -0
- package/dist/utils/atomicWrite.js +89 -0
- package/dist/utils/atomicWrite.js.map +1 -0
- package/dist/utils/conflictMonitor.d.ts +20 -0
- package/dist/utils/conflictMonitor.d.ts.map +1 -0
- package/dist/utils/conflictMonitor.js +113 -0
- package/dist/utils/conflictMonitor.js.map +1 -0
- package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
- package/dist/utils/conflictResolutionPane.js +70 -79
- package/dist/utils/conflictResolutionPane.js.map +1 -1
- package/dist/utils/errorHandling.d.ts +37 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorHandling.js +138 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +1 -1
- package/dist/utils/git.d.ts +4 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +15 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/hooksDocs.d.ts +1 -1
- package/dist/utils/layoutManager.d.ts +20 -16
- package/dist/utils/layoutManager.d.ts.map +1 -1
- package/dist/utils/layoutManager.js +159 -380
- package/dist/utils/layoutManager.js.map +1 -1
- package/dist/utils/mergeExecution.d.ts.map +1 -1
- package/dist/utils/mergeExecution.js +8 -1
- package/dist/utils/mergeExecution.js.map +1 -1
- package/dist/utils/mergeValidation.d.ts.map +1 -1
- package/dist/utils/mergeValidation.js +46 -13
- package/dist/utils/mergeValidation.js.map +1 -1
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +115 -106
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/paneRebinding.d.ts +14 -0
- package/dist/utils/paneRebinding.d.ts.map +1 -0
- package/dist/utils/paneRebinding.js +30 -0
- package/dist/utils/paneRebinding.js.map +1 -0
- package/dist/utils/popup.d.ts.map +1 -1
- package/dist/utils/popup.js +11 -17
- package/dist/utils/popup.js.map +1 -1
- package/dist/utils/postPaneCleanup.d.ts.map +1 -1
- package/dist/utils/postPaneCleanup.js +5 -14
- package/dist/utils/postPaneCleanup.js.map +1 -1
- package/dist/utils/shellPaneDetection.d.ts +3 -3
- package/dist/utils/shellPaneDetection.d.ts.map +1 -1
- package/dist/utils/shellPaneDetection.js +43 -29
- package/dist/utils/shellPaneDetection.js.map +1 -1
- package/dist/utils/systemCheck.d.ts +19 -0
- package/dist/utils/systemCheck.d.ts.map +1 -0
- package/dist/utils/systemCheck.js +160 -0
- package/dist/utils/systemCheck.js.map +1 -0
- package/dist/utils/tmux.d.ts +26 -7
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +84 -76
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/welcomePane.d.ts +2 -2
- package/dist/utils/welcomePane.d.ts.map +1 -1
- package/dist/utils/welcomePane.js +19 -33
- package/dist/utils/welcomePane.js.map +1 -1
- package/dist/utils/welcomePaneManager.d.ts.map +1 -1
- package/dist/utils/welcomePaneManager.js +11 -25
- package/dist/utils/welcomePaneManager.js.map +1 -1
- package/dist/workers/PaneWorker.js +7 -9
- package/dist/workers/PaneWorker.js.map +1 -1
- package/dist/workers/updateChecker.js +1 -1
- package/dist/workers/updateChecker.js.map +1 -1
- package/package.json +3 -1
- package/dist/AutoUpdater.d.ts.map +0 -1
- package/dist/AutoUpdater.js.map +0 -1
- package/dist/BetterTextInput.d.ts +0 -10
- package/dist/BetterTextInput.d.ts.map +0 -1
- package/dist/BetterTextInput.js +0 -177
- package/dist/BetterTextInput.js.map +0 -1
- package/dist/CleanTextInput.d.ts.map +0 -1
- package/dist/CleanTextInput.js.map +0 -1
- package/dist/EnhancedTextInput.d.ts +0 -13
- package/dist/EnhancedTextInput.d.ts.map +0 -1
- package/dist/EnhancedTextInput.js +0 -443
- package/dist/EnhancedTextInput.js.map +0 -1
- package/dist/GeminiTextInput.d.ts +0 -12
- package/dist/GeminiTextInput.d.ts.map +0 -1
- package/dist/GeminiTextInput.js +0 -210
- package/dist/GeminiTextInput.js.map +0 -1
- package/dist/MergePane.d.ts.map +0 -1
- package/dist/MergePane.js.map +0 -1
- package/dist/MultilineTextInput.d.ts +0 -10
- package/dist/MultilineTextInput.d.ts.map +0 -1
- package/dist/MultilineTextInput.js +0 -184
- package/dist/MultilineTextInput.js.map +0 -1
- package/dist/PaneAnalyzer.d.ts.map +0 -1
- package/dist/PaneAnalyzer.js.map +0 -1
- package/dist/SimpleEnhancedInput.d.ts +0 -13
- package/dist/SimpleEnhancedInput.d.ts.map +0 -1
- package/dist/SimpleEnhancedInput.js +0 -639
- package/dist/SimpleEnhancedInput.js.map +0 -1
- package/dist/SimpleGeminiInput.d.ts +0 -12
- package/dist/SimpleGeminiInput.d.ts.map +0 -1
- package/dist/SimpleGeminiInput.js +0 -223
- package/dist/SimpleGeminiInput.js.map +0 -1
- package/dist/StyledTextInput.d.ts.map +0 -1
- package/dist/StyledTextInput.js.map +0 -1
- package/dist/components/ActionChoiceDialog.d.ts.map +0 -1
- package/dist/components/ActionChoiceDialog.js.map +0 -1
- package/dist/components/ActionConfirmDialog.d.ts.map +0 -1
- package/dist/components/ActionConfirmDialog.js.map +0 -1
- package/dist/components/ActionInputDialog.d.ts.map +0 -1
- package/dist/components/ActionInputDialog.js.map +0 -1
- package/dist/components/ActionProgressDialog.d.ts.map +0 -1
- package/dist/components/ActionProgressDialog.js.map +0 -1
- package/dist/components/AgentChoiceDialog.d.ts.map +0 -1
- package/dist/components/AgentChoiceDialog.js.map +0 -1
- package/dist/components/CloseOptionsDialog.d.ts.map +0 -1
- package/dist/components/CloseOptionsDialog.js.map +0 -1
- package/dist/components/CommandPromptDialog.d.ts.map +0 -1
- package/dist/components/CommandPromptDialog.js.map +0 -1
- package/dist/components/CreatingIndicator.d.ts.map +0 -1
- package/dist/components/CreatingIndicator.js.map +0 -1
- package/dist/components/DialogBox.d.ts.map +0 -1
- package/dist/components/DialogBox.js.map +0 -1
- package/dist/components/FileCopyPrompt.d.ts.map +0 -1
- package/dist/components/FileCopyPrompt.js.map +0 -1
- package/dist/components/FooterHelp.d.ts.map +0 -1
- package/dist/components/FooterHelp.js.map +0 -1
- package/dist/components/HooksDialog.d.ts.map +0 -1
- package/dist/components/HooksDialog.js.map +0 -1
- package/dist/components/KebabMenu.d.ts.map +0 -1
- package/dist/components/KebabMenu.js.map +0 -1
- package/dist/components/LoadingIndicator.d.ts.map +0 -1
- package/dist/components/LoadingIndicator.js.map +0 -1
- package/dist/components/MergeConfirmationDialog.d.ts.map +0 -1
- package/dist/components/MergeConfirmationDialog.js.map +0 -1
- package/dist/components/PaneCard.d.ts.map +0 -1
- package/dist/components/PaneCard.js.map +0 -1
- package/dist/components/PanesGrid.d.ts.map +0 -1
- package/dist/components/PanesGrid.js.map +0 -1
- package/dist/components/QRCode.d.ts.map +0 -1
- package/dist/components/QRCode.js.map +0 -1
- package/dist/components/RunningIndicator.d.ts.map +0 -1
- package/dist/components/RunningIndicator.js.map +0 -1
- package/dist/components/SettingsDialog.d.ts.map +0 -1
- package/dist/components/SettingsDialog.js.map +0 -1
- package/dist/components/Spinner.d.ts.map +0 -1
- package/dist/components/Spinner.js.map +0 -1
- package/dist/components/UpdateDialog.d.ts.map +0 -1
- package/dist/components/UpdateDialog.js.map +0 -1
- package/dist/components/UpdatingIndicator.d.ts.map +0 -1
- package/dist/components/UpdatingIndicator.js.map +0 -1
- package/dist/decorative-pane.d.ts.map +0 -1
- package/dist/decorative-pane.js.map +0 -1
- package/dist/popups/agentChoicePopup.d.ts.map +0 -1
- package/dist/popups/agentChoicePopup.js.map +0 -1
- package/dist/popups/choicePopup.d.ts.map +0 -1
- package/dist/popups/choicePopup.js.map +0 -1
- package/dist/popups/components/FileList.d.ts.map +0 -1
- package/dist/popups/components/FileList.js.map +0 -1
- package/dist/popups/components/PopupContainer.d.ts.map +0 -1
- package/dist/popups/components/PopupContainer.js.map +0 -1
- package/dist/popups/components/PopupInputBox.d.ts.map +0 -1
- package/dist/popups/components/PopupInputBox.js.map +0 -1
- package/dist/popups/components/PopupWrapper.d.ts.map +0 -1
- package/dist/popups/components/PopupWrapper.js.map +0 -1
- package/dist/popups/components/index.d.ts.map +0 -1
- package/dist/popups/components/index.js.map +0 -1
- package/dist/popups/config.d.ts.map +0 -1
- package/dist/popups/config.js.map +0 -1
- package/dist/popups/confirmPopup.d.ts.map +0 -1
- package/dist/popups/confirmPopup.js.map +0 -1
- package/dist/popups/hooksPopup.d.ts.map +0 -1
- package/dist/popups/hooksPopup.js.map +0 -1
- package/dist/popups/inputPopup.d.ts.map +0 -1
- package/dist/popups/inputPopup.js.map +0 -1
- package/dist/popups/kebabMenuPopup.d.ts.map +0 -1
- package/dist/popups/kebabMenuPopup.js.map +0 -1
- package/dist/popups/logsPopup.d.ts.map +0 -1
- package/dist/popups/logsPopup.js.map +0 -1
- package/dist/popups/mergePopup.d.ts.map +0 -1
- package/dist/popups/mergePopup.js.map +0 -1
- package/dist/popups/newPanePopup.d.ts.map +0 -1
- package/dist/popups/newPanePopup.js.map +0 -1
- package/dist/popups/progressPopup.d.ts.map +0 -1
- package/dist/popups/progressPopup.js.map +0 -1
- package/dist/popups/remotePopup.d.ts.map +0 -1
- package/dist/popups/remotePopup.js.map +0 -1
- package/dist/popups/settingsPopup.d.ts.map +0 -1
- package/dist/popups/settingsPopup.js.map +0 -1
- package/dist/popups/shortcutsPopup.d.ts.map +0 -1
- package/dist/popups/shortcutsPopup.js.map +0 -1
- package/dist/popups/templates/SimpleInputPopup.d.ts.map +0 -1
- package/dist/popups/templates/SimpleInputPopup.js.map +0 -1
- package/dist/server/static.d.ts +0 -6
- package/dist/server/static.d.ts.map +0 -1
- package/dist/server/static.js +0 -3040
- package/dist/server/static.js.map +0 -1
- package/dist/spacer-pane.d.ts.map +0 -1
- package/dist/spacer-pane.js.map +0 -1
- /package/dist/components/{ActionChoiceDialog.js → dialogs/ActionChoiceDialog.js} +0 -0
- /package/dist/components/{ActionConfirmDialog.d.ts → dialogs/ActionConfirmDialog.d.ts} +0 -0
- /package/dist/components/{ActionConfirmDialog.js → dialogs/ActionConfirmDialog.js} +0 -0
- /package/dist/components/{ActionInputDialog.d.ts → dialogs/ActionInputDialog.d.ts} +0 -0
- /package/dist/components/{ActionProgressDialog.d.ts → dialogs/ActionProgressDialog.d.ts} +0 -0
- /package/dist/components/{ActionProgressDialog.js → dialogs/ActionProgressDialog.js} +0 -0
- /package/dist/components/{AgentChoiceDialog.d.ts → dialogs/AgentChoiceDialog.d.ts} +0 -0
- /package/dist/components/{AgentChoiceDialog.js → dialogs/AgentChoiceDialog.js} +0 -0
- /package/dist/components/{CloseOptionsDialog.js → dialogs/CloseOptionsDialog.js} +0 -0
- /package/dist/components/{CommandPromptDialog.d.ts → dialogs/CommandPromptDialog.d.ts} +0 -0
- /package/dist/components/{DialogBox.d.ts → dialogs/DialogBox.d.ts} +0 -0
- /package/dist/components/{DialogBox.js → dialogs/DialogBox.js} +0 -0
- /package/dist/components/{HooksDialog.d.ts → dialogs/HooksDialog.d.ts} +0 -0
- /package/dist/components/{HooksDialog.js → dialogs/HooksDialog.js} +0 -0
- /package/dist/components/{MergeConfirmationDialog.js → dialogs/MergeConfirmationDialog.js} +0 -0
- /package/dist/components/{SettingsDialog.js → dialogs/SettingsDialog.js} +0 -0
- /package/dist/components/{UpdateDialog.d.ts → dialogs/UpdateDialog.d.ts} +0 -0
- /package/dist/components/{UpdateDialog.js → dialogs/UpdateDialog.js} +0 -0
- /package/dist/components/{CreatingIndicator.d.ts → indicators/CreatingIndicator.d.ts} +0 -0
- /package/dist/components/{CreatingIndicator.js → indicators/CreatingIndicator.js} +0 -0
- /package/dist/components/{LoadingIndicator.d.ts → indicators/LoadingIndicator.d.ts} +0 -0
- /package/dist/components/{LoadingIndicator.js → indicators/LoadingIndicator.js} +0 -0
- /package/dist/components/{RunningIndicator.d.ts → indicators/RunningIndicator.d.ts} +0 -0
- /package/dist/components/{RunningIndicator.js → indicators/RunningIndicator.js} +0 -0
- /package/dist/components/{Spinner.d.ts → indicators/Spinner.d.ts} +0 -0
- /package/dist/components/{Spinner.js → indicators/Spinner.js} +0 -0
- /package/dist/components/{UpdatingIndicator.d.ts → indicators/UpdatingIndicator.d.ts} +0 -0
- /package/dist/components/{UpdatingIndicator.js → indicators/UpdatingIndicator.js} +0 -0
- /package/dist/{CleanTextInput.d.ts → components/inputs/CleanTextInput.d.ts} +0 -0
- /package/dist/{StyledTextInput.d.ts → components/inputs/StyledTextInput.d.ts} +0 -0
- /package/dist/{StyledTextInput.js → components/inputs/StyledTextInput.js} +0 -0
- /package/dist/components/{KebabMenu.js → panes/KebabMenu.js} +0 -0
- /package/dist/{MergePane.d.ts → components/panes/MergePane.d.ts} +0 -0
- /package/dist/{popups → components/popups}/agentChoicePopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/choicePopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/config.d.ts +0 -0
- /package/dist/{popups → components/popups}/confirmPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/hooksPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/inputPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/kebabMenuPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/logsPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/mergePopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/newPanePopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/progressPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/remotePopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/settingsPopup.d.ts +0 -0
- /package/dist/{popups/components → components/popups/shared}/FileList.d.ts +0 -0
- /package/dist/{popups/components → components/popups/shared}/FileList.js +0 -0
- /package/dist/{popups/components → components/popups/shared}/PopupContainer.d.ts +0 -0
- /package/dist/{popups/components → components/popups/shared}/PopupContainer.js +0 -0
- /package/dist/{popups/components → components/popups/shared}/PopupInputBox.d.ts +0 -0
- /package/dist/{popups/components → components/popups/shared}/PopupInputBox.js +0 -0
- /package/dist/{popups/components → components/popups/shared}/PopupWrapper.d.ts +0 -0
- /package/dist/{popups/components → components/popups/shared}/PopupWrapper.js +0 -0
- /package/dist/{popups/components → components/popups/shared}/index.d.ts +0 -0
- /package/dist/{popups/components → components/popups/shared}/index.js +0 -0
- /package/dist/{popups → components/popups}/shortcutsPopup.d.ts +0 -0
- /package/dist/{popups → components/popups}/templates/SimpleInputPopup.d.ts +0 -0
- /package/dist/components/{FileCopyPrompt.d.ts → ui/FileCopyPrompt.d.ts} +0 -0
- /package/dist/components/{FileCopyPrompt.js → ui/FileCopyPrompt.js} +0 -0
- /package/dist/components/{QRCode.d.ts → ui/QRCode.d.ts} +0 -0
- /package/dist/components/{QRCode.js → ui/QRCode.js} +0 -0
- /package/dist/{decorative-pane.d.ts → panes/decorative-pane.d.ts} +0 -0
- /package/dist/{spacer-pane.d.ts → panes/spacer-pane.d.ts} +0 -0
- /package/dist/{spacer-pane.js → panes/spacer-pane.js} +0 -0
- /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 "
|
|
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,
|
|
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"}
|