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.
- package/dist/DmuxApp.d.ts +2 -2
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +405 -1134
- 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 +197 -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 +131 -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 +180 -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 -981
- package/dist/actions/paneActions.js.map +1 -1
- package/dist/actions/types.d.ts +2 -0
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +1 -0
- 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} +4 -3
- 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 +16 -0
- package/dist/components/dialogs/DialogBox.d.ts.map +1 -0
- package/dist/components/dialogs/DialogBox.js +12 -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 +19 -0
- package/dist/components/inputs/CleanTextInput.d.ts.map +1 -0
- package/dist/{CleanTextInput.js → components/inputs/CleanTextInput.js} +98 -160
- 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} +4 -2
- package/dist/components/panes/PaneCard.d.ts.map +1 -0
- package/dist/components/panes/PaneCard.js +55 -0
- package/dist/components/panes/PaneCard.js.map +1 -0
- package/dist/components/panes/PanesGrid.d.ts +12 -0
- package/dist/components/panes/PanesGrid.d.ts.map +1 -0
- package/dist/components/panes/PanesGrid.js +49 -0
- 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 +7 -0
- package/dist/components/popups/agentChoicePopup.d.ts.map +1 -0
- package/dist/components/popups/agentChoicePopup.js +74 -0
- package/dist/components/popups/agentChoicePopup.js.map +1 -0
- package/dist/components/popups/choicePopup.d.ts +7 -0
- package/dist/components/popups/choicePopup.d.ts.map +1 -0
- package/dist/components/popups/choicePopup.js +64 -0
- package/dist/components/popups/choicePopup.js.map +1 -0
- package/dist/components/popups/config.d.ts +40 -0
- package/dist/components/popups/config.d.ts.map +1 -0
- package/dist/components/popups/config.js +40 -0
- package/dist/components/popups/config.js.map +1 -0
- package/dist/components/popups/confirmPopup.d.ts +7 -0
- package/dist/components/popups/confirmPopup.d.ts.map +1 -0
- package/dist/components/popups/confirmPopup.js +71 -0
- package/dist/components/popups/confirmPopup.js.map +1 -0
- package/dist/components/popups/hooksPopup.d.ts +7 -0
- package/dist/components/popups/hooksPopup.d.ts.map +1 -0
- package/dist/components/popups/hooksPopup.js +71 -0
- package/dist/components/popups/hooksPopup.js.map +1 -0
- package/dist/components/popups/inputPopup.d.ts +7 -0
- package/dist/components/popups/inputPopup.d.ts.map +1 -0
- package/dist/components/popups/inputPopup.js +47 -0
- package/dist/components/popups/inputPopup.js.map +1 -0
- package/dist/components/popups/kebabMenuPopup.d.ts +7 -0
- package/dist/components/popups/kebabMenuPopup.d.ts.map +1 -0
- package/dist/components/popups/kebabMenuPopup.js +52 -0
- package/dist/components/popups/kebabMenuPopup.js.map +1 -0
- package/dist/components/popups/logsPopup.d.ts +12 -0
- package/dist/components/popups/logsPopup.d.ts.map +1 -0
- package/dist/components/popups/logsPopup.js +372 -0
- package/dist/components/popups/logsPopup.js.map +1 -0
- package/dist/components/popups/mergePopup.d.ts +7 -0
- package/dist/components/popups/mergePopup.d.ts.map +1 -0
- package/dist/components/popups/mergePopup.js +310 -0
- package/dist/components/popups/mergePopup.js.map +1 -0
- package/dist/components/popups/newPanePopup.d.ts +7 -0
- package/dist/components/popups/newPanePopup.d.ts.map +1 -0
- package/dist/components/popups/newPanePopup.js +234 -0
- package/dist/components/popups/newPanePopup.js.map +1 -0
- package/dist/components/popups/progressPopup.d.ts +8 -0
- package/dist/components/popups/progressPopup.d.ts.map +1 -0
- package/dist/components/popups/progressPopup.js +53 -0
- package/dist/components/popups/progressPopup.js.map +1 -0
- package/dist/components/popups/remotePopup.d.ts +6 -0
- package/dist/components/popups/remotePopup.d.ts.map +1 -0
- package/dist/components/popups/remotePopup.js +166 -0
- package/dist/components/popups/remotePopup.js.map +1 -0
- package/dist/components/popups/settingsPopup.d.ts +7 -0
- package/dist/components/popups/settingsPopup.d.ts.map +1 -0
- package/dist/components/popups/settingsPopup.js +212 -0
- package/dist/components/popups/settingsPopup.js.map +1 -0
- package/dist/components/popups/shared/FileList.d.ts +13 -0
- package/dist/components/popups/shared/FileList.d.ts.map +1 -0
- package/dist/components/popups/shared/FileList.js +61 -0
- package/dist/components/popups/shared/FileList.js.map +1 -0
- package/dist/components/popups/shared/PopupContainer.d.ts +14 -0
- package/dist/components/popups/shared/PopupContainer.d.ts.map +1 -0
- package/dist/components/popups/shared/PopupContainer.js +15 -0
- package/dist/components/popups/shared/PopupContainer.js.map +1 -0
- package/dist/components/popups/shared/PopupInputBox.d.ts +11 -0
- package/dist/components/popups/shared/PopupInputBox.d.ts.map +1 -0
- package/dist/components/popups/shared/PopupInputBox.js +10 -0
- package/dist/components/popups/shared/PopupInputBox.js.map +1 -0
- package/dist/components/popups/shared/PopupWrapper.d.ts +37 -0
- package/dist/components/popups/shared/PopupWrapper.d.ts.map +1 -0
- package/dist/components/popups/shared/PopupWrapper.js +88 -0
- package/dist/components/popups/shared/PopupWrapper.js.map +1 -0
- package/dist/components/popups/shared/index.d.ts +8 -0
- package/dist/components/popups/shared/index.d.ts.map +1 -0
- package/dist/components/popups/shared/index.js +8 -0
- package/dist/components/popups/shared/index.js.map +1 -0
- package/dist/components/popups/shortcutsPopup.d.ts +6 -0
- package/dist/components/popups/shortcutsPopup.d.ts.map +1 -0
- package/dist/components/popups/shortcutsPopup.js +74 -0
- package/dist/components/popups/shortcutsPopup.js.map +1 -0
- package/dist/components/popups/templates/SimpleInputPopup.d.ts +15 -0
- package/dist/components/popups/templates/SimpleInputPopup.d.ts.map +1 -0
- package/dist/components/popups/templates/SimpleInputPopup.js +28 -0
- 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/ui/FooterHelp.d.ts +19 -0
- package/dist/components/ui/FooterHelp.d.ts.map +1 -0
- package/dist/components/ui/FooterHelp.js +55 -0
- 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/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 +1 -1
- package/dist/hooks/useActionSystem.d.ts +18 -4
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +125 -30
- 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 +280 -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 +58 -0
- package/dist/hooks/useLayoutManagement.js.map +1 -0
- package/dist/hooks/useNavigation.js +1 -1
- package/dist/hooks/useNavigation.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +1 -2
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +17 -36
- 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 +188 -0
- package/dist/hooks/usePaneLoading.js.map +1 -0
- package/dist/hooks/usePaneRunner.d.ts.map +1 -1
- package/dist/hooks/usePaneRunner.js +16 -8
- 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 +182 -0
- package/dist/hooks/usePaneSync.js.map +1 -0
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +81 -258
- 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 +53 -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 +23 -24
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +279 -73
- 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 +143 -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 +148 -0
- package/dist/layout/SpacerManager.js.map +1 -0
- package/dist/layout/TmuxLayoutApplier.d.ts +59 -0
- package/dist/layout/TmuxLayoutApplier.d.ts.map +1 -0
- package/dist/layout/TmuxLayoutApplier.js +135 -0
- package/dist/layout/TmuxLayoutApplier.js.map +1 -0
- package/dist/panes/decorative-pane.d.ts +3 -0
- package/dist/panes/decorative-pane.d.ts.map +1 -0
- package/dist/panes/decorative-pane.js +136 -0
- package/dist/panes/decorative-pane.js.map +1 -0
- package/dist/panes/spacer-pane.d.ts +8 -0
- package/dist/panes/spacer-pane.d.ts.map +1 -0
- package/dist/panes/spacer-pane.js +40 -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 +849 -4752
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.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 +20 -0
- package/dist/server/routes/keysRoutes.d.ts.map +1 -0
- package/dist/server/routes/keysRoutes.js +111 -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 -811
- 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} +42 -9
- package/dist/services/AutoUpdater.js.map +1 -0
- package/dist/services/ConfigWatcher.d.ts.map +1 -1
- package/dist/services/ConfigWatcher.js +10 -3
- package/dist/services/ConfigWatcher.js.map +1 -1
- package/dist/services/LogService.d.ts +112 -0
- package/dist/services/LogService.d.ts.map +1 -0
- package/dist/services/LogService.js +252 -0
- package/dist/services/LogService.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 +41 -12
- 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.js +1 -1
- 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 +298 -0
- package/dist/services/TmuxService.d.ts.map +1 -0
- package/dist/services/TmuxService.js +768 -0
- package/dist/services/TmuxService.js.map +1 -0
- package/dist/services/TunnelService.d.ts +1 -0
- package/dist/services/TunnelService.d.ts.map +1 -1
- package/dist/services/TunnelService.js +57 -15
- package/dist/services/TunnelService.js.map +1 -1
- package/dist/shared/StateManager.d.ts +49 -1
- package/dist/shared/StateManager.d.ts.map +1 -1
- package/dist/shared/StateManager.js +97 -2
- package/dist/shared/StateManager.js.map +1 -1
- package/dist/theme/colors.d.ts +25 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +33 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/asciiArt.d.ts +26 -0
- package/dist/utils/asciiArt.d.ts.map +1 -0
- package/dist/utils/asciiArt.js +75 -0
- package/dist/utils/asciiArt.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 +75 -80
- 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 +112 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/fileScanner.d.ts +23 -0
- package/dist/utils/fileScanner.d.ts.map +1 -0
- package/dist/utils/fileScanner.js +123 -0
- package/dist/utils/fileScanner.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/hooks.d.ts.map +1 -1
- package/dist/utils/hooks.js +65 -36
- package/dist/utils/hooks.js.map +1 -1
- package/dist/utils/hooksDocs.d.ts +1 -1
- package/dist/utils/layoutManager.d.ts +49 -0
- package/dist/utils/layoutManager.d.ts.map +1 -0
- package/dist/utils/layoutManager.js +249 -0
- package/dist/utils/layoutManager.js.map +1 -0
- 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 +42 -13
- package/dist/utils/mergeValidation.js.map +1 -1
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +210 -88
- 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 +28 -0
- package/dist/utils/paneRebinding.js.map +1 -0
- package/dist/utils/popup.d.ts +97 -0
- package/dist/utils/popup.d.ts.map +1 -0
- package/dist/utils/popup.js +503 -0
- package/dist/utils/popup.js.map +1 -0
- package/dist/utils/postPaneCleanup.d.ts +12 -0
- package/dist/utils/postPaneCleanup.d.ts.map +1 -0
- package/dist/utils/postPaneCleanup.js +54 -0
- package/dist/utils/postPaneCleanup.js.map +1 -0
- package/dist/utils/shellPaneDetection.d.ts +44 -0
- package/dist/utils/shellPaneDetection.d.ts.map +1 -0
- package/dist/utils/shellPaneDetection.js +179 -0
- package/dist/utils/shellPaneDetection.js.map +1 -0
- 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 +72 -1
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +369 -99
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/welcomePane.d.ts +22 -0
- package/dist/utils/welcomePane.d.ts.map +1 -0
- package/dist/utils/welcomePane.js +111 -0
- package/dist/utils/welcomePane.js.map +1 -0
- package/dist/utils/welcomePaneManager.d.ts +36 -0
- package/dist/utils/welcomePaneManager.d.ts.map +1 -0
- package/dist/utils/welcomePaneManager.js +160 -0
- package/dist/utils/welcomePaneManager.js.map +1 -0
- package/dist/workers/PaneWorker.js +8 -8
- 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 +7 -2
- 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 +0 -10
- 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/FileCopyPrompt.d.ts.map +0 -1
- package/dist/components/FileCopyPrompt.js.map +0 -1
- package/dist/components/FooterHelp.d.ts +0 -10
- package/dist/components/FooterHelp.d.ts.map +0 -1
- package/dist/components/FooterHelp.js +0 -19
- 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/NewPaneDialog.d.ts +0 -9
- package/dist/components/NewPaneDialog.d.ts.map +0 -1
- package/dist/components/NewPaneDialog.js +0 -11
- package/dist/components/NewPaneDialog.js.map +0 -1
- package/dist/components/PaneCard.d.ts.map +0 -1
- package/dist/components/PaneCard.js +0 -38
- package/dist/components/PaneCard.js.map +0 -1
- package/dist/components/PanesGrid.d.ts +0 -14
- package/dist/components/PanesGrid.d.ts.map +0 -1
- package/dist/components/PanesGrid.js +0 -19
- 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/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/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/{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/{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/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/{PaneAnalyzer.d.ts → services/PaneAnalyzer.d.ts} +0 -0
|
@@ -1,639 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { Box, Text, useInput, useStdout } from 'ink';
|
|
3
|
-
import { execSync } from 'child_process';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import stringWidth from 'string-width';
|
|
6
|
-
import chalk from 'chalk';
|
|
7
|
-
const SimpleEnhancedInput = ({ value, onChange, placeholder = '', onSubmit, onCancel, isActive = true, workingDirectory = process.cwd() }) => {
|
|
8
|
-
const [cursorPosition, setCursorPosition] = useState(0);
|
|
9
|
-
const [showAutocomplete, setShowAutocomplete] = useState(false);
|
|
10
|
-
const [autocompleteQuery, setAutocompleteQuery] = useState('');
|
|
11
|
-
const [autocompleteStartPos, setAutocompleteStartPos] = useState(0);
|
|
12
|
-
const [fileMatches, setFileMatches] = useState([]);
|
|
13
|
-
const [selectedMatchIndex, setSelectedMatchIndex] = useState(0);
|
|
14
|
-
const [displayValue, setDisplayValue] = useState(value);
|
|
15
|
-
const { stdout } = useStdout();
|
|
16
|
-
const terminalWidth = stdout?.columns || 80;
|
|
17
|
-
const [pastedContent, setPastedContent] = useState(new Map());
|
|
18
|
-
// Update cursor when value changes externally
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
// Only update cursor to end if value actually changed and we're not already editing
|
|
21
|
-
if (value.length > 0 && cursorPosition === 0) {
|
|
22
|
-
// This is initial value, keep cursor at 0
|
|
23
|
-
}
|
|
24
|
-
else if (value === '') {
|
|
25
|
-
setCursorPosition(0);
|
|
26
|
-
}
|
|
27
|
-
}, [value]);
|
|
28
|
-
// Helper function to check if text looks like a paste that should be formatted
|
|
29
|
-
const shouldFormatPaste = (text) => {
|
|
30
|
-
// Only format if it's a large paste, not single newlines
|
|
31
|
-
// Single newline = user pressing shift+enter
|
|
32
|
-
// Multiple lines with content = likely a paste
|
|
33
|
-
if (text === '\n')
|
|
34
|
-
return false; // Single newline is never a paste
|
|
35
|
-
const hasMultipleLines = text.includes('\n') && text.length > 1;
|
|
36
|
-
const isVeryLong = text.length > 100;
|
|
37
|
-
// Check for code-like patterns that might break display
|
|
38
|
-
const hasSpecialChars = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/.test(text);
|
|
39
|
-
const hasAnsiCodes = /\x1b\[[0-9;]*[a-zA-Z]/.test(text);
|
|
40
|
-
return hasMultipleLines || isVeryLong || hasSpecialChars || hasAnsiCodes;
|
|
41
|
-
};
|
|
42
|
-
// Helper function to process pasted text
|
|
43
|
-
const processPastedText = (text) => {
|
|
44
|
-
if (!shouldFormatPaste(text)) {
|
|
45
|
-
return text;
|
|
46
|
-
}
|
|
47
|
-
// Generate a unique ID for this paste
|
|
48
|
-
const pasteId = pastedContent.size + 1;
|
|
49
|
-
// Store the actual content
|
|
50
|
-
const newPastedContent = new Map(pastedContent);
|
|
51
|
-
newPastedContent.set(pasteId, text);
|
|
52
|
-
setPastedContent(newPastedContent);
|
|
53
|
-
// Count lines in the pasted content
|
|
54
|
-
const lineCount = (text.match(/\n/g) || []).length + 1;
|
|
55
|
-
// Return placeholder text
|
|
56
|
-
return `[#${pasteId} pasted ${lineCount} lines]`;
|
|
57
|
-
};
|
|
58
|
-
// Helper function to get the actual value with pasted content restored
|
|
59
|
-
const getActualValue = () => {
|
|
60
|
-
let actualValue = displayValue;
|
|
61
|
-
// Replace all placeholders with actual content
|
|
62
|
-
pastedContent.forEach((content, id) => {
|
|
63
|
-
const placeholder = `[#${id} pasted ${(content.match(/\n/g) || []).length + 1} lines]`;
|
|
64
|
-
actualValue = actualValue.replace(placeholder, content);
|
|
65
|
-
});
|
|
66
|
-
return actualValue;
|
|
67
|
-
};
|
|
68
|
-
// Update display value when value prop changes
|
|
69
|
-
useEffect(() => {
|
|
70
|
-
setDisplayValue(value);
|
|
71
|
-
// Clear pasted content when value is cleared
|
|
72
|
-
if (value === '') {
|
|
73
|
-
setPastedContent(new Map());
|
|
74
|
-
}
|
|
75
|
-
}, [value]);
|
|
76
|
-
// Search for files when autocomplete query changes or when @ is typed
|
|
77
|
-
useEffect(() => {
|
|
78
|
-
if (showAutocomplete) {
|
|
79
|
-
searchFiles(autocompleteQuery);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
setFileMatches([]);
|
|
83
|
-
}
|
|
84
|
-
}, [autocompleteQuery, showAutocomplete]);
|
|
85
|
-
const searchFiles = async (query) => {
|
|
86
|
-
try {
|
|
87
|
-
// Directories to exclude from search
|
|
88
|
-
const excludeDirs = [
|
|
89
|
-
'node_modules',
|
|
90
|
-
'.git',
|
|
91
|
-
'dist',
|
|
92
|
-
'build',
|
|
93
|
-
'.next',
|
|
94
|
-
'.nuxt',
|
|
95
|
-
'.cache',
|
|
96
|
-
'coverage',
|
|
97
|
-
'.vscode',
|
|
98
|
-
'.idea',
|
|
99
|
-
'vendor',
|
|
100
|
-
'target',
|
|
101
|
-
'.pnpm-store',
|
|
102
|
-
'__pycache__',
|
|
103
|
-
'.pytest_cache',
|
|
104
|
-
'.tox',
|
|
105
|
-
'venv',
|
|
106
|
-
'.venv',
|
|
107
|
-
'env',
|
|
108
|
-
'.env'
|
|
109
|
-
];
|
|
110
|
-
// Build exclude arguments for find command
|
|
111
|
-
const excludeArgs = excludeDirs.map(dir => `-path "*/${dir}" -prune -o`).join(' ');
|
|
112
|
-
// If query is empty, show root directory files
|
|
113
|
-
let searchCmd;
|
|
114
|
-
let dirSearchCmd;
|
|
115
|
-
// Check if query is a directory path (ends with /)
|
|
116
|
-
const isDirectoryPath = query.endsWith('/');
|
|
117
|
-
if (query === '') {
|
|
118
|
-
// Show files and directories in the root of the working directory (excluding common dirs)
|
|
119
|
-
searchCmd = `find "${workingDirectory}" -maxdepth 1 \\( ${excludeArgs} -type f -print \\) 2>/dev/null | head -20`;
|
|
120
|
-
dirSearchCmd = `find "${workingDirectory}" -maxdepth 1 \\( ${excludeArgs} -type d -print \\) 2>/dev/null | grep -v "^${workingDirectory}$" | head -10`;
|
|
121
|
-
}
|
|
122
|
-
else if (isDirectoryPath) {
|
|
123
|
-
// Navigate into directory - show contents of the specified directory
|
|
124
|
-
const dirPath = path.join(workingDirectory, query.slice(0, -1)); // Remove trailing slash
|
|
125
|
-
searchCmd = `find "${dirPath}" -maxdepth 1 \\( ${excludeArgs} -type f -print \\) 2>/dev/null | head -20`;
|
|
126
|
-
dirSearchCmd = `find "${dirPath}" -maxdepth 1 \\( ${excludeArgs} -type d -print \\) 2>/dev/null | grep -v "^${dirPath}$" | head -10`;
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
// Search for files matching the query (excluding common dirs)
|
|
130
|
-
searchCmd = `find "${workingDirectory}" \\( ${excludeArgs} -type f -name "*${query}*" -print \\) 2>/dev/null | head -20`;
|
|
131
|
-
dirSearchCmd = `find "${workingDirectory}" \\( ${excludeArgs} -type d -name "*${query}*" -print \\) 2>/dev/null | head -10`;
|
|
132
|
-
}
|
|
133
|
-
let fileResults = [];
|
|
134
|
-
let dirResults = [];
|
|
135
|
-
try {
|
|
136
|
-
fileResults = execSync(searchCmd, { encoding: 'utf-8' }).trim().split('\n').filter(Boolean);
|
|
137
|
-
}
|
|
138
|
-
catch { }
|
|
139
|
-
try {
|
|
140
|
-
dirResults = execSync(dirSearchCmd, { encoding: 'utf-8' }).trim().split('\n').filter(Boolean);
|
|
141
|
-
}
|
|
142
|
-
catch { }
|
|
143
|
-
const matches = [];
|
|
144
|
-
// Helper to check if path contains excluded directories
|
|
145
|
-
const isExcluded = (filepath) => {
|
|
146
|
-
const excludedPatterns = [
|
|
147
|
-
'node_modules', '.git', 'dist', 'build', '.next', '.nuxt',
|
|
148
|
-
'.cache', 'coverage', '.vscode', '.idea', 'vendor', 'target',
|
|
149
|
-
'.pnpm-store', '__pycache__', '.pytest_cache', '.tox',
|
|
150
|
-
'venv', '.venv', 'env', '.env'
|
|
151
|
-
];
|
|
152
|
-
return excludedPatterns.some(pattern => filepath.includes(`/${pattern}/`) || filepath.endsWith(`/${pattern}`));
|
|
153
|
-
};
|
|
154
|
-
// Process directory matches
|
|
155
|
-
for (const dirPath of dirResults) {
|
|
156
|
-
if (isExcluded(dirPath))
|
|
157
|
-
continue;
|
|
158
|
-
const relativePath = path.relative(workingDirectory, dirPath);
|
|
159
|
-
if (relativePath && !relativePath.startsWith('..')) {
|
|
160
|
-
// When browsing within a directory, adjust the display path
|
|
161
|
-
let displayPath = relativePath;
|
|
162
|
-
if (isDirectoryPath && query) {
|
|
163
|
-
// We're inside a subdirectory, show just the item name
|
|
164
|
-
displayPath = path.basename(dirPath);
|
|
165
|
-
}
|
|
166
|
-
matches.push({
|
|
167
|
-
path: dirPath,
|
|
168
|
-
displayPath: displayPath + '/',
|
|
169
|
-
type: 'directory'
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Process file matches
|
|
174
|
-
for (const filePath of fileResults) {
|
|
175
|
-
if (isExcluded(filePath))
|
|
176
|
-
continue;
|
|
177
|
-
const relativePath = path.relative(workingDirectory, filePath);
|
|
178
|
-
if (relativePath && !relativePath.startsWith('..')) {
|
|
179
|
-
// When browsing within a directory, adjust the display path
|
|
180
|
-
let displayPath = relativePath;
|
|
181
|
-
if (isDirectoryPath && query) {
|
|
182
|
-
// We're inside a subdirectory, show just the item name
|
|
183
|
-
displayPath = path.basename(filePath);
|
|
184
|
-
}
|
|
185
|
-
matches.push({
|
|
186
|
-
path: filePath,
|
|
187
|
-
displayPath: displayPath,
|
|
188
|
-
type: 'file'
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
// Sort by relevance
|
|
193
|
-
matches.sort((a, b) => {
|
|
194
|
-
const aScore = a.displayPath.length;
|
|
195
|
-
const bScore = b.displayPath.length;
|
|
196
|
-
return aScore - bScore;
|
|
197
|
-
});
|
|
198
|
-
setFileMatches(matches.slice(0, 10));
|
|
199
|
-
setSelectedMatchIndex(0);
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
setFileMatches([]);
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
const insertText = (text, position, isPaste = false) => {
|
|
206
|
-
// Process text if it's a paste
|
|
207
|
-
const processedText = isPaste ? processPastedText(text) : text;
|
|
208
|
-
const before = displayValue.slice(0, position);
|
|
209
|
-
const after = displayValue.slice(position);
|
|
210
|
-
const newDisplayValue = before + processedText + after;
|
|
211
|
-
setDisplayValue(newDisplayValue);
|
|
212
|
-
// Update the actual value with processed text (placeholder for pastes)
|
|
213
|
-
const newValue = before + processedText + after;
|
|
214
|
-
onChange(newValue);
|
|
215
|
-
// Update cursor position - just move by the length of inserted text
|
|
216
|
-
// Don't add any special handling for wrapping
|
|
217
|
-
const newCursorPos = position + processedText.length;
|
|
218
|
-
setCursorPosition(newCursorPos);
|
|
219
|
-
};
|
|
220
|
-
const deleteText = (start, end) => {
|
|
221
|
-
const before = displayValue.slice(0, start);
|
|
222
|
-
const after = displayValue.slice(end);
|
|
223
|
-
const newDisplayValue = before + after;
|
|
224
|
-
setDisplayValue(newDisplayValue);
|
|
225
|
-
onChange(newDisplayValue);
|
|
226
|
-
setCursorPosition(start);
|
|
227
|
-
};
|
|
228
|
-
const moveCursor = (position) => {
|
|
229
|
-
const clampedPosition = Math.max(0, Math.min(displayValue.length, position));
|
|
230
|
-
setCursorPosition(clampedPosition);
|
|
231
|
-
};
|
|
232
|
-
// Gemini CLI-style buffer system with proper line tracking
|
|
233
|
-
const getBuffer = (text, width) => {
|
|
234
|
-
const lines = [];
|
|
235
|
-
let charPosition = 0;
|
|
236
|
-
const charToLineMap = [];
|
|
237
|
-
// Split by actual newlines first
|
|
238
|
-
const logicalLines = text.split('\n');
|
|
239
|
-
for (let logicalIdx = 0; logicalIdx < logicalLines.length; logicalIdx++) {
|
|
240
|
-
const logicalLine = logicalLines[logicalIdx];
|
|
241
|
-
if (logicalLine.length === 0) {
|
|
242
|
-
// Empty line
|
|
243
|
-
lines.push('');
|
|
244
|
-
charToLineMap[charPosition] = { line: lines.length - 1, col: 0 };
|
|
245
|
-
charPosition += 1; // for the newline
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
// Break this logical line into visual lines
|
|
249
|
-
let remaining = logicalLine;
|
|
250
|
-
let isFirstWrap = true;
|
|
251
|
-
while (remaining.length > 0) {
|
|
252
|
-
let lineContent = '';
|
|
253
|
-
let charsUsed = 0;
|
|
254
|
-
// Try to fit as many complete words as possible
|
|
255
|
-
const words = remaining.split(' ');
|
|
256
|
-
let wordIndex = 0;
|
|
257
|
-
while (wordIndex < words.length) {
|
|
258
|
-
const word = words[wordIndex];
|
|
259
|
-
const separator = (wordIndex === 0 || lineContent === '') ? '' : ' ';
|
|
260
|
-
const testContent = lineContent + separator + word;
|
|
261
|
-
if (stringWidth(testContent) <= width) {
|
|
262
|
-
lineContent = testContent;
|
|
263
|
-
charsUsed += (separator + word).length;
|
|
264
|
-
wordIndex++;
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
// This word doesn't fit
|
|
268
|
-
if (lineContent === '') {
|
|
269
|
-
// Word is longer than line width, break it
|
|
270
|
-
let charCount = 0;
|
|
271
|
-
for (let i = 0; i < word.length; i++) {
|
|
272
|
-
const testChar = word.slice(0, i + 1);
|
|
273
|
-
if (stringWidth(testChar) <= width) {
|
|
274
|
-
charCount = i + 1;
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
break;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
lineContent = word.slice(0, Math.max(1, charCount));
|
|
281
|
-
charsUsed = lineContent.length;
|
|
282
|
-
}
|
|
283
|
-
break;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
// Add this visual line
|
|
287
|
-
lines.push(lineContent);
|
|
288
|
-
// Map character positions to line/col
|
|
289
|
-
for (let i = 0; i < charsUsed; i++) {
|
|
290
|
-
charToLineMap[charPosition + i] = {
|
|
291
|
-
line: lines.length - 1,
|
|
292
|
-
col: i
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
// Move to next part
|
|
296
|
-
remaining = remaining.slice(charsUsed).trimStart();
|
|
297
|
-
charPosition += charsUsed;
|
|
298
|
-
// Skip spaces that were trimmed
|
|
299
|
-
const originalRemaining = logicalLine.slice(charPosition - (logicalIdx === 0 ? 0 : logicalIdx));
|
|
300
|
-
const spacesToSkip = originalRemaining.length - remaining.length - charsUsed;
|
|
301
|
-
if (spacesToSkip > 0 && !isFirstWrap) {
|
|
302
|
-
charPosition += spacesToSkip;
|
|
303
|
-
}
|
|
304
|
-
isFirstWrap = false;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
// Add newline mapping if not last logical line
|
|
308
|
-
if (logicalIdx < logicalLines.length - 1) {
|
|
309
|
-
charToLineMap[charPosition] = {
|
|
310
|
-
line: lines.length - 1,
|
|
311
|
-
col: lines[lines.length - 1]?.length || 0
|
|
312
|
-
};
|
|
313
|
-
charPosition += 1;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
// Handle cursor at end
|
|
317
|
-
if (charPosition <= text.length) {
|
|
318
|
-
charToLineMap[text.length] = {
|
|
319
|
-
line: Math.max(0, lines.length - 1),
|
|
320
|
-
col: lines[lines.length - 1]?.length || 0
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
return { lines, charToLineMap };
|
|
324
|
-
};
|
|
325
|
-
const findWordBoundary = (text, position, direction) => {
|
|
326
|
-
const wordRegex = /\w/;
|
|
327
|
-
let pos = position;
|
|
328
|
-
if (direction === 'left') {
|
|
329
|
-
// Skip any non-word chars
|
|
330
|
-
while (pos > 0 && !wordRegex.test(text[pos - 1])) {
|
|
331
|
-
pos--;
|
|
332
|
-
}
|
|
333
|
-
// Skip the word
|
|
334
|
-
while (pos > 0 && wordRegex.test(text[pos - 1])) {
|
|
335
|
-
pos--;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
// Skip any non-word chars
|
|
340
|
-
while (pos < text.length && !wordRegex.test(text[pos])) {
|
|
341
|
-
pos++;
|
|
342
|
-
}
|
|
343
|
-
// Skip the word
|
|
344
|
-
while (pos < text.length && wordRegex.test(text[pos])) {
|
|
345
|
-
pos++;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
return pos;
|
|
349
|
-
};
|
|
350
|
-
const completeFileReference = (match) => {
|
|
351
|
-
const before = displayValue.slice(0, autocompleteStartPos);
|
|
352
|
-
const after = displayValue.slice(cursorPosition);
|
|
353
|
-
// Build the complete path to insert
|
|
354
|
-
let completePath;
|
|
355
|
-
if (autocompleteQuery.endsWith('/')) {
|
|
356
|
-
// We're in a subdirectory, need to build the full path
|
|
357
|
-
completePath = autocompleteQuery + match.displayPath.replace(/\/$/, ''); // Remove trailing slash from directories
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
// Use the relative path from working directory
|
|
361
|
-
completePath = path.relative(workingDirectory, match.path);
|
|
362
|
-
}
|
|
363
|
-
const newDisplayValue = before + completePath + after;
|
|
364
|
-
setDisplayValue(newDisplayValue);
|
|
365
|
-
onChange(newDisplayValue);
|
|
366
|
-
setCursorPosition(autocompleteStartPos + completePath.length);
|
|
367
|
-
setShowAutocomplete(false);
|
|
368
|
-
setAutocompleteQuery('');
|
|
369
|
-
};
|
|
370
|
-
useInput((input, key) => {
|
|
371
|
-
// Only handle input when active
|
|
372
|
-
if (!isActive)
|
|
373
|
-
return;
|
|
374
|
-
// Handle autocomplete navigation
|
|
375
|
-
if (showAutocomplete) {
|
|
376
|
-
if (key.escape) {
|
|
377
|
-
setShowAutocomplete(false);
|
|
378
|
-
setAutocompleteQuery('');
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
else if (key.upArrow) {
|
|
382
|
-
setSelectedMatchIndex(Math.max(0, selectedMatchIndex - 1));
|
|
383
|
-
return;
|
|
384
|
-
}
|
|
385
|
-
else if (key.downArrow) {
|
|
386
|
-
setSelectedMatchIndex(Math.min(fileMatches.length - 1, selectedMatchIndex + 1));
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
else if (key.rightArrow) {
|
|
390
|
-
// Navigate into directory with right arrow
|
|
391
|
-
if (fileMatches.length > 0) {
|
|
392
|
-
const selectedMatch = fileMatches[selectedMatchIndex];
|
|
393
|
-
if (selectedMatch.type === 'directory') {
|
|
394
|
-
// Build the full path for navigation
|
|
395
|
-
let newQuery;
|
|
396
|
-
if (autocompleteQuery.endsWith('/')) {
|
|
397
|
-
// We're already in a directory, append the selected subdirectory
|
|
398
|
-
newQuery = autocompleteQuery + selectedMatch.displayPath;
|
|
399
|
-
}
|
|
400
|
-
else if (autocompleteQuery) {
|
|
401
|
-
// We have a search query, replace it with the full path
|
|
402
|
-
const relativePath = path.relative(workingDirectory, selectedMatch.path);
|
|
403
|
-
newQuery = relativePath + '/';
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
// We're at root, use the display path
|
|
407
|
-
newQuery = selectedMatch.displayPath;
|
|
408
|
-
}
|
|
409
|
-
setAutocompleteQuery(newQuery);
|
|
410
|
-
// Trigger a new search within this directory
|
|
411
|
-
searchFiles(newQuery);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
else if (key.leftArrow) {
|
|
417
|
-
// Navigate back/up one directory level with left arrow
|
|
418
|
-
if (autocompleteQuery.includes('/')) {
|
|
419
|
-
// Remove the last directory segment
|
|
420
|
-
const segments = autocompleteQuery.split('/');
|
|
421
|
-
segments.pop(); // Remove last segment
|
|
422
|
-
if (segments.length > 0) {
|
|
423
|
-
segments.pop(); // Remove the directory we're going back from
|
|
424
|
-
const newQuery = segments.length > 0 ? segments.join('/') + '/' : '';
|
|
425
|
-
setAutocompleteQuery(newQuery);
|
|
426
|
-
searchFiles(newQuery);
|
|
427
|
-
}
|
|
428
|
-
else {
|
|
429
|
-
// Go back to root
|
|
430
|
-
setAutocompleteQuery('');
|
|
431
|
-
searchFiles('');
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
else if (autocompleteQuery !== '') {
|
|
435
|
-
// Go back to root if we have a query but no slashes
|
|
436
|
-
setAutocompleteQuery('');
|
|
437
|
-
searchFiles('');
|
|
438
|
-
}
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
else if (key.return || key.tab) {
|
|
442
|
-
if (fileMatches.length > 0) {
|
|
443
|
-
completeFileReference(fileMatches[selectedMatchIndex]);
|
|
444
|
-
}
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
// Handle special keys
|
|
449
|
-
if (key.escape) {
|
|
450
|
-
onCancel?.();
|
|
451
|
-
return;
|
|
452
|
-
}
|
|
453
|
-
if (key.shift && key.return) {
|
|
454
|
-
// Insert newline for multiline input
|
|
455
|
-
// Force insert a newline character directly into the value
|
|
456
|
-
const before = displayValue.slice(0, cursorPosition);
|
|
457
|
-
const after = displayValue.slice(cursorPosition);
|
|
458
|
-
const newValue = before + '\n' + after;
|
|
459
|
-
setDisplayValue(newValue);
|
|
460
|
-
onChange(newValue);
|
|
461
|
-
setCursorPosition(cursorPosition + 1);
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
if (key.return && !key.shift) {
|
|
465
|
-
// Get the actual value with pasted content restored before submitting
|
|
466
|
-
const actualValue = getActualValue();
|
|
467
|
-
onChange(actualValue);
|
|
468
|
-
onSubmit?.();
|
|
469
|
-
return;
|
|
470
|
-
}
|
|
471
|
-
// Buffer-based navigation like Gemini CLI
|
|
472
|
-
if (!showAutocomplete && key.upArrow) {
|
|
473
|
-
const inputWidth = Math.max(1, terminalWidth - 4);
|
|
474
|
-
const buffer = getBuffer(displayValue, inputWidth);
|
|
475
|
-
const currentPos = buffer.charToLineMap[cursorPosition] || { line: 0, col: 0 };
|
|
476
|
-
if (currentPos.line > 0) {
|
|
477
|
-
const targetLine = currentPos.line - 1;
|
|
478
|
-
const targetLineLength = buffer.lines[targetLine].length;
|
|
479
|
-
const targetColumn = Math.min(currentPos.col, targetLineLength);
|
|
480
|
-
// Find character position for this line/column
|
|
481
|
-
let newCursorPos = 0;
|
|
482
|
-
for (let charPos = 0; charPos < displayValue.length; charPos++) {
|
|
483
|
-
const mapped = buffer.charToLineMap[charPos];
|
|
484
|
-
if (mapped && mapped.line === targetLine && mapped.col === targetColumn) {
|
|
485
|
-
newCursorPos = charPos;
|
|
486
|
-
break;
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
moveCursor(newCursorPos);
|
|
490
|
-
}
|
|
491
|
-
return;
|
|
492
|
-
}
|
|
493
|
-
if (!showAutocomplete && key.downArrow) {
|
|
494
|
-
const inputWidth = Math.max(1, terminalWidth - 4);
|
|
495
|
-
const buffer = getBuffer(displayValue, inputWidth);
|
|
496
|
-
const currentPos = buffer.charToLineMap[cursorPosition] || { line: 0, col: 0 };
|
|
497
|
-
if (currentPos.line < buffer.lines.length - 1) {
|
|
498
|
-
const targetLine = currentPos.line + 1;
|
|
499
|
-
const targetLineLength = buffer.lines[targetLine].length;
|
|
500
|
-
const targetColumn = Math.min(currentPos.col, targetLineLength);
|
|
501
|
-
// Find character position for this line/column
|
|
502
|
-
let newCursorPos = displayValue.length;
|
|
503
|
-
for (let charPos = 0; charPos <= displayValue.length; charPos++) {
|
|
504
|
-
const mapped = buffer.charToLineMap[charPos];
|
|
505
|
-
if (mapped && mapped.line === targetLine && mapped.col === targetColumn) {
|
|
506
|
-
newCursorPos = charPos;
|
|
507
|
-
break;
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
moveCursor(newCursorPos);
|
|
511
|
-
}
|
|
512
|
-
else {
|
|
513
|
-
// At last line, move to end
|
|
514
|
-
moveCursor(displayValue.length);
|
|
515
|
-
}
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
// Cursor movement
|
|
519
|
-
if (key.leftArrow) {
|
|
520
|
-
if (key.meta || key.alt || key.option) {
|
|
521
|
-
// Move to previous word
|
|
522
|
-
const newPos = findWordBoundary(displayValue, cursorPosition, 'left');
|
|
523
|
-
moveCursor(newPos);
|
|
524
|
-
}
|
|
525
|
-
else {
|
|
526
|
-
// Regular left movement - skip over newlines
|
|
527
|
-
if (cursorPosition > 0) {
|
|
528
|
-
moveCursor(cursorPosition - 1);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
return;
|
|
532
|
-
}
|
|
533
|
-
if (key.rightArrow) {
|
|
534
|
-
if (key.meta || key.alt || key.option) {
|
|
535
|
-
// Move to next word
|
|
536
|
-
const newPos = findWordBoundary(displayValue, cursorPosition, 'right');
|
|
537
|
-
moveCursor(newPos);
|
|
538
|
-
}
|
|
539
|
-
else {
|
|
540
|
-
// Regular right movement - skip over newlines
|
|
541
|
-
if (cursorPosition < displayValue.length) {
|
|
542
|
-
moveCursor(cursorPosition + 1);
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
return;
|
|
546
|
-
}
|
|
547
|
-
// Home/End keys - Ctrl+A / Ctrl+E
|
|
548
|
-
if (key.ctrl && input === 'a') {
|
|
549
|
-
moveCursor(0);
|
|
550
|
-
return;
|
|
551
|
-
}
|
|
552
|
-
if (key.ctrl && input === 'e') {
|
|
553
|
-
moveCursor(displayValue.length);
|
|
554
|
-
return;
|
|
555
|
-
}
|
|
556
|
-
// Deletion
|
|
557
|
-
if (key.backspace || key.delete) {
|
|
558
|
-
if (key.meta || key.alt || key.option) {
|
|
559
|
-
// Delete word
|
|
560
|
-
const wordStart = findWordBoundary(displayValue, cursorPosition, 'left');
|
|
561
|
-
deleteText(wordStart, cursorPosition);
|
|
562
|
-
}
|
|
563
|
-
else if (cursorPosition > 0) {
|
|
564
|
-
deleteText(cursorPosition - 1, cursorPosition);
|
|
565
|
-
}
|
|
566
|
-
return;
|
|
567
|
-
}
|
|
568
|
-
// Text input
|
|
569
|
-
if (input && !key.ctrl && !key.meta) {
|
|
570
|
-
// Detect paste by checking if input is unusually long or contains special characters
|
|
571
|
-
const isPaste = input.length > 1 && shouldFormatPaste(input);
|
|
572
|
-
// Use input as-is - terminal wrapping is visual only, not actual newlines
|
|
573
|
-
const filteredInput = input;
|
|
574
|
-
// Check for @ symbol to trigger autocomplete
|
|
575
|
-
if (filteredInput === '@') {
|
|
576
|
-
setShowAutocomplete(true);
|
|
577
|
-
setAutocompleteStartPos(cursorPosition + 1);
|
|
578
|
-
setAutocompleteQuery('');
|
|
579
|
-
insertText(filteredInput, cursorPosition, false);
|
|
580
|
-
}
|
|
581
|
-
else if (showAutocomplete) {
|
|
582
|
-
// Update autocomplete query
|
|
583
|
-
insertText(filteredInput, cursorPosition, isPaste);
|
|
584
|
-
const newQuery = displayValue.slice(autocompleteStartPos, cursorPosition + 1) + filteredInput;
|
|
585
|
-
setAutocompleteQuery(newQuery);
|
|
586
|
-
}
|
|
587
|
-
else {
|
|
588
|
-
insertText(filteredInput, cursorPosition, isPaste);
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
// Gemini CLI-style display with proper buffer-based cursor calculation
|
|
593
|
-
const getDisplayWithCursor = () => {
|
|
594
|
-
const inputWidth = Math.max(1, terminalWidth - 4);
|
|
595
|
-
const buffer = getBuffer(displayValue, inputWidth);
|
|
596
|
-
// Get cursor position from the character map
|
|
597
|
-
const cursorPos = buffer.charToLineMap[cursorPosition] || { line: 0, col: 0 };
|
|
598
|
-
const cursorLine = cursorPos.line;
|
|
599
|
-
const cursorColumn = cursorPos.col;
|
|
600
|
-
// Handle empty input
|
|
601
|
-
if (buffer.lines.length === 0 || (buffer.lines.length === 1 && buffer.lines[0] === '')) {
|
|
602
|
-
return (React.createElement(Box, null,
|
|
603
|
-
React.createElement(Text, null, chalk.inverse(' ')),
|
|
604
|
-
placeholder && React.createElement(Text, { dimColor: true }, placeholder)));
|
|
605
|
-
}
|
|
606
|
-
return (React.createElement(Box, { flexDirection: "column" }, buffer.lines.map((line, idx) => {
|
|
607
|
-
if (idx === cursorLine) {
|
|
608
|
-
// Line with cursor - exact Gemini CLI approach
|
|
609
|
-
const beforeCursor = line.slice(0, cursorColumn);
|
|
610
|
-
const atCursor = line[cursorColumn] || ' ';
|
|
611
|
-
const afterCursor = line.slice(cursorColumn + 1);
|
|
612
|
-
return (React.createElement(Box, { key: idx },
|
|
613
|
-
React.createElement(Text, null, beforeCursor),
|
|
614
|
-
React.createElement(Text, null, chalk.inverse(atCursor)),
|
|
615
|
-
React.createElement(Text, null, afterCursor)));
|
|
616
|
-
}
|
|
617
|
-
else {
|
|
618
|
-
return React.createElement(Text, { key: idx }, line);
|
|
619
|
-
}
|
|
620
|
-
})));
|
|
621
|
-
};
|
|
622
|
-
return (React.createElement(Box, { flexDirection: "column" },
|
|
623
|
-
React.createElement(Box, null, displayValue ? (getDisplayWithCursor()) : (React.createElement(React.Fragment, null,
|
|
624
|
-
React.createElement(Text, { inverse: true }, " "),
|
|
625
|
-
placeholder && React.createElement(Text, { dimColor: true }, placeholder)))),
|
|
626
|
-
showAutocomplete && fileMatches.length > 0 && (React.createElement(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "cyan", paddingX: 1 },
|
|
627
|
-
React.createElement(Text, { color: "cyan", dimColor: true }, autocompleteQuery.endsWith('/')
|
|
628
|
-
? `Browsing: @${autocompleteQuery}`
|
|
629
|
-
: autocompleteQuery
|
|
630
|
-
? `Files matching: @${autocompleteQuery}`
|
|
631
|
-
: 'Files in current directory:'),
|
|
632
|
-
fileMatches.map((match, index) => (React.createElement(Box, { key: match.path },
|
|
633
|
-
React.createElement(Text, { color: index === selectedMatchIndex ? 'cyan' : 'gray' },
|
|
634
|
-
index === selectedMatchIndex ? '▶ ' : ' ',
|
|
635
|
-
match.displayPath)))),
|
|
636
|
-
React.createElement(Text, { dimColor: true, italic: true }, "\u2191\u2193 select \u2022 \u2192 enter directory \u2022 \u2190 go back \u2022 Tab/Enter complete \u2022 Esc cancel")))));
|
|
637
|
-
};
|
|
638
|
-
export default SimpleEnhancedInput;
|
|
639
|
-
//# sourceMappingURL=SimpleEnhancedInput.js.map
|