centaurus-cli 3.0.1 → 3.1.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/ai/types.js +0 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/cli-adapter.js +5047 -5158
- package/dist/cli-adapter.js.map +1 -1
- package/dist/commands/CommandParser.js +372 -315
- package/dist/commands/CommandParser.js.map +1 -1
- package/dist/config/build-config.js +11 -42
- package/dist/config/build-config.js.map +1 -1
- package/dist/config/defaultConfig.js +94 -82
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/manager.js +144 -160
- package/dist/config/manager.js.map +1 -1
- package/dist/config/mcp-config-manager.js +411 -364
- package/dist/config/mcp-config-manager.js.map +1 -1
- package/dist/config/models.js +118 -185
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.js +186 -184
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/config/types.js +33 -26
- package/dist/config/types.js.map +1 -1
- package/dist/context/command-detector.js +63 -67
- package/dist/context/command-detector.js.map +1 -1
- package/dist/context/context-manager.js +533 -518
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/handlers/docker-handler.js +518 -576
- package/dist/context/handlers/docker-handler.js.map +1 -1
- package/dist/context/handlers/ssh-handler.js +1050 -1109
- package/dist/context/handlers/ssh-handler.js.map +1 -1
- package/dist/context/handlers/wsl-handler.js +558 -630
- package/dist/context/handlers/wsl-handler.js.map +1 -1
- package/dist/context/index.js +42 -6
- package/dist/context/index.js.map +1 -1
- package/dist/context/subshell-handler.js +0 -4
- package/dist/context/subshell-handler.js.map +1 -1
- package/dist/context/types.js +20 -31
- package/dist/context/types.js.map +1 -1
- package/dist/hooks/useConnectivity.js +13 -10
- package/dist/hooks/useConnectivity.js.map +1 -1
- package/dist/hooks/useTerminalDimensions.js +67 -79
- package/dist/hooks/useTerminalDimensions.js.map +1 -1
- package/dist/index.js +228 -251
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-command-handler.js +297 -260
- package/dist/mcp/mcp-command-handler.js.map +1 -1
- package/dist/mcp/mcp-server-manager.js +139 -155
- package/dist/mcp/mcp-server-manager.js.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.js +74 -94
- package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
- package/dist/services/ai-autocomplete-agent.js +169 -181
- package/dist/services/ai-autocomplete-agent.js.map +1 -1
- package/dist/services/ai-context-injector.js +180 -93
- package/dist/services/ai-context-injector.js.map +1 -1
- package/dist/services/ai-service-client.js +513 -456
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.js +443 -441
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/auth-handler.js +162 -198
- package/dist/services/auth-handler.js.map +1 -1
- package/dist/services/background-task-manager.js +258 -282
- package/dist/services/background-task-manager.js.map +1 -1
- package/dist/services/checkpoint-manager.js +1526 -1512
- package/dist/services/checkpoint-manager.js.map +1 -1
- package/dist/services/clipboard-service.js +151 -200
- package/dist/services/clipboard-service.js.map +1 -1
- package/dist/services/connectivity-manager.js +63 -65
- package/dist/services/connectivity-manager.js.map +1 -1
- package/dist/services/conversation-manager.js +118 -121
- package/dist/services/conversation-manager.js.map +1 -1
- package/dist/services/environment-context-injector.js +160 -187
- package/dist/services/environment-context-injector.js.map +1 -1
- package/dist/services/fast-context-agent.js +203 -243
- package/dist/services/fast-context-agent.js.map +1 -1
- package/dist/services/input-detection-agent.js +190 -202
- package/dist/services/input-detection-agent.js.map +1 -1
- package/dist/services/input-requirement-detector.js +155 -189
- package/dist/services/input-requirement-detector.js.map +1 -1
- package/dist/services/local-chat-storage.js +342 -365
- package/dist/services/local-chat-storage.js.map +1 -1
- package/dist/services/monitored-shell-manager.js +225 -233
- package/dist/services/monitored-shell-manager.js.map +1 -1
- package/dist/services/ollama-service.js +293 -310
- package/dist/services/ollama-service.js.map +1 -1
- package/dist/services/rules-storage.js +142 -0
- package/dist/services/rules-storage.js.map +1 -0
- package/dist/services/session-quota-manager.js +219 -235
- package/dist/services/session-quota-manager.js.map +1 -1
- package/dist/services/shell-input-agent.js +299 -334
- package/dist/services/shell-input-agent.js.map +1 -1
- package/dist/services/sub-agent-manager.js +459 -501
- package/dist/services/sub-agent-manager.js.map +1 -1
- package/dist/services/warpify-detector.js +133 -183
- package/dist/services/warpify-detector.js.map +1 -1
- package/dist/services/workflow-storage.js +202 -217
- package/dist/services/workflow-storage.js.map +1 -1
- package/dist/test-ssh-handler.js +148 -193
- package/dist/test-ssh-handler.js.map +1 -1
- package/dist/tools/add-mcp.js +161 -0
- package/dist/tools/add-mcp.js.map +1 -0
- package/dist/tools/background-command.js +240 -273
- package/dist/tools/background-command.js.map +1 -1
- package/dist/tools/command.js +447 -440
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/create-image.js +172 -202
- package/dist/tools/create-image.js.map +1 -1
- package/dist/tools/enter-remote-session.js +169 -215
- package/dist/tools/enter-remote-session.js.map +1 -1
- package/dist/tools/fast-context.js +60 -67
- package/dist/tools/fast-context.js.map +1 -1
- package/dist/tools/file-ops.js +601 -572
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/find-files.js +262 -303
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/get-diff.js +423 -406
- package/dist/tools/get-diff.js.map +1 -1
- package/dist/tools/grep-search.js +966 -948
- package/dist/tools/grep-search.js.map +1 -1
- package/dist/tools/inspect-symbol.js +308 -323
- package/dist/tools/inspect-symbol.js.map +1 -1
- package/dist/tools/plan-mode.js +459 -503
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/read-binary-file.js +160 -190
- package/dist/tools/read-binary-file.js.map +1 -1
- package/dist/tools/registry.js +100 -84
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/reproduce_issue.js +170 -151
- package/dist/tools/reproduce_issue.js.map +1 -1
- package/dist/tools/sub-agent.js +223 -228
- package/dist/tools/sub-agent.js.map +1 -1
- package/dist/tools/task-complete.js +28 -27
- package/dist/tools/task-complete.js.map +1 -1
- package/dist/tools/types.js +0 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/validation.js +96 -118
- package/dist/tools/validation.js.map +1 -1
- package/dist/tools/web-search.js +194 -194
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/workflow-tool.js +77 -82
- package/dist/tools/workflow-tool.js.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/rule.js +1 -0
- package/dist/types/rule.js.map +1 -0
- package/dist/types/workflow.js +0 -7
- package/dist/types/workflow.js.map +1 -1
- package/dist/ui/components/AgentTimer.js +24 -25
- package/dist/ui/components/AgentTimer.js.map +1 -1
- package/dist/ui/components/App.js +3266 -3263
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/AuthScreen.js +22 -34
- package/dist/ui/components/AuthScreen.js.map +1 -1
- package/dist/ui/components/AuthWelcomeScreen.js +30 -24
- package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
- package/dist/ui/components/Breadcrumbs.js +53 -82
- package/dist/ui/components/Breadcrumbs.js.map +1 -1
- package/dist/ui/components/CircularSelectInput.js +59 -67
- package/dist/ui/components/CircularSelectInput.js.map +1 -1
- package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
- package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
- package/dist/ui/components/CodeBlock.js +24 -42
- package/dist/ui/components/CodeBlock.js.map +1 -1
- package/dist/ui/components/ConfigViewer.js +18 -25
- package/dist/ui/components/ConfigViewer.js.map +1 -1
- package/dist/ui/components/ConfirmPrompt.js +49 -71
- package/dist/ui/components/ConfirmPrompt.js.map +1 -1
- package/dist/ui/components/ConnectionStatusMessage.js +32 -83
- package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.js +34 -49
- package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
- package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
- package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
- package/dist/ui/components/DiffViewer.js +68 -121
- package/dist/ui/components/DiffViewer.js.map +1 -1
- package/dist/ui/components/ErrorBoundary.js +40 -48
- package/dist/ui/components/ErrorBoundary.js.map +1 -1
- package/dist/ui/components/FileCreationPreview.js +29 -60
- package/dist/ui/components/FileCreationPreview.js.map +1 -1
- package/dist/ui/components/FileOperation.js +34 -29
- package/dist/ui/components/FileOperation.js.map +1 -1
- package/dist/ui/components/FileTagAutocomplete.js +55 -25
- package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
- package/dist/ui/components/FontRecommendation.js.map +1 -1
- package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
- package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
- package/dist/ui/components/InputBox.js +1620 -2150
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.js +234 -352
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/KeyboardHelp.js +34 -35
- package/dist/ui/components/KeyboardHelp.js.map +1 -1
- package/dist/ui/components/LoadingIndicator.js +22 -25
- package/dist/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/ui/components/MCPAddScreen.js +40 -51
- package/dist/ui/components/MCPAddScreen.js.map +1 -1
- package/dist/ui/components/MCPListScreen.js +40 -48
- package/dist/ui/components/MCPListScreen.js.map +1 -1
- package/dist/ui/components/MCPServerListScreen.js +49 -56
- package/dist/ui/components/MCPServerListScreen.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +69 -96
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageBox.js +66 -48
- package/dist/ui/components/MessageBox.js.map +1 -1
- package/dist/ui/components/MessageDisplay.js +150 -142
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/MonitorModeAIPanel.js +46 -65
- package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
- package/dist/ui/components/MultiLineInput.js +243 -277
- package/dist/ui/components/MultiLineInput.js.map +1 -1
- package/dist/ui/components/PasswordPrompt.js +37 -18
- package/dist/ui/components/PasswordPrompt.js.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.js +27 -38
- package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
- package/dist/ui/components/PlanReviewScreen.js +46 -50
- package/dist/ui/components/PlanReviewScreen.js.map +1 -1
- package/dist/ui/components/RulesEditorScreen.js +81 -0
- package/dist/ui/components/RulesEditorScreen.js.map +1 -0
- package/dist/ui/components/SelectPrompt.js +19 -8
- package/dist/ui/components/SelectPrompt.js.map +1 -1
- package/dist/ui/components/ShimmerText.js +44 -0
- package/dist/ui/components/ShimmerText.js.map +1 -0
- package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
- package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
- package/dist/ui/components/StatusBar.js +56 -87
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +116 -99
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/TaskCompletedMessage.js +28 -23
- package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
- package/dist/ui/components/TaskProgressIndicator.js +44 -70
- package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
- package/dist/ui/components/ThinkingDisplay.js +44 -41
- package/dist/ui/components/ThinkingDisplay.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +772 -1326
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/ToolExecutionStatus.js +53 -84
- package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
- package/dist/ui/components/ToolResult.js +22 -15
- package/dist/ui/components/ToolResult.js.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.js +88 -120
- package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
- package/dist/ui/components/WelcomeBanner.js +176 -26
- package/dist/ui/components/WelcomeBanner.js.map +1 -1
- package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
- package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
- package/dist/utils/ansi-encoder.js +30 -61
- package/dist/utils/ansi-encoder.js.map +1 -1
- package/dist/utils/chat-formatter.js +327 -305
- package/dist/utils/chat-formatter.js.map +1 -1
- package/dist/utils/command-history.js +152 -174
- package/dist/utils/command-history.js.map +1 -1
- package/dist/utils/context-sanitizer.js +49 -112
- package/dist/utils/context-sanitizer.js.map +1 -1
- package/dist/utils/conversation-logger.js +292 -324
- package/dist/utils/conversation-logger.js.map +1 -1
- package/dist/utils/custom-commands-manager.js +126 -131
- package/dist/utils/custom-commands-manager.js.map +1 -1
- package/dist/utils/editor-utils.js +732 -837
- package/dist/utils/editor-utils.js.map +1 -1
- package/dist/utils/file.js +174 -213
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/git-stats.js +169 -0
- package/dist/utils/git-stats.js.map +1 -0
- package/dist/utils/input-classifier.js +960 -482
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/logger.js +48 -73
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown-parser.js +277 -310
- package/dist/utils/markdown-parser.js.map +1 -1
- package/dist/utils/rule-reference-resolver.js +54 -0
- package/dist/utils/rule-reference-resolver.js.map +1 -0
- package/dist/utils/shell.js +144 -156
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/state.js +23 -22
- package/dist/utils/state.js.map +1 -1
- package/dist/utils/syntax-checker.js +279 -327
- package/dist/utils/syntax-checker.js.map +1 -1
- package/dist/utils/terminal-output.js +199 -302
- package/dist/utils/terminal-output.js.map +1 -1
- package/dist/utils/text-clipboard.js +47 -70
- package/dist/utils/text-clipboard.js.map +1 -1
- package/dist/utils/unicode-sanitizer.js +134 -197
- package/dist/utils/unicode-sanitizer.js.map +1 -1
- package/dist/utils/version-checker.js +46 -56
- package/dist/utils/version-checker.js.map +1 -1
- package/package.json +6 -4
- package/dist/ai/types.d.ts +0 -20
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/cli-adapter.d.ts +0 -514
- package/dist/cli-adapter.d.ts.map +0 -1
- package/dist/commands/CommandParser.d.ts +0 -27
- package/dist/commands/CommandParser.d.ts.map +0 -1
- package/dist/config/build-config.d.ts +0 -42
- package/dist/config/build-config.d.ts.map +0 -1
- package/dist/config/defaultConfig.d.ts +0 -79
- package/dist/config/defaultConfig.d.ts.map +0 -1
- package/dist/config/manager.d.ts +0 -62
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/mcp-config-manager.d.ts +0 -79
- package/dist/config/mcp-config-manager.d.ts.map +0 -1
- package/dist/config/models.d.ts +0 -83
- package/dist/config/models.d.ts.map +0 -1
- package/dist/config/slash-commands.d.ts +0 -23
- package/dist/config/slash-commands.d.ts.map +0 -1
- package/dist/config/types.d.ts +0 -35
- package/dist/config/types.d.ts.map +0 -1
- package/dist/context/command-detector.d.ts +0 -50
- package/dist/context/command-detector.d.ts.map +0 -1
- package/dist/context/context-manager.d.ts +0 -157
- package/dist/context/context-manager.d.ts.map +0 -1
- package/dist/context/handlers/docker-handler.d.ts +0 -130
- package/dist/context/handlers/docker-handler.d.ts.map +0 -1
- package/dist/context/handlers/ssh-handler.d.ts +0 -201
- package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
- package/dist/context/handlers/wsl-handler.d.ts +0 -146
- package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
- package/dist/context/index.d.ts +0 -8
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/subshell-handler.d.ts +0 -165
- package/dist/context/subshell-handler.d.ts.map +0 -1
- package/dist/context/types.d.ts +0 -70
- package/dist/context/types.d.ts.map +0 -1
- package/dist/hooks/useConnectivity.d.ts +0 -2
- package/dist/hooks/useConnectivity.d.ts.map +0 -1
- package/dist/hooks/useTerminalDimensions.d.ts +0 -41
- package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/mcp-command-handler.d.ts +0 -47
- package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
- package/dist/mcp/mcp-server-manager.d.ts +0 -30
- package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
- package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
- package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
- package/dist/services/ai-autocomplete-agent.d.ts +0 -39
- package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
- package/dist/services/ai-context-injector.d.ts +0 -41
- package/dist/services/ai-context-injector.d.ts.map +0 -1
- package/dist/services/ai-service-client.d.ts +0 -128
- package/dist/services/ai-service-client.d.ts.map +0 -1
- package/dist/services/api-client.d.ts +0 -353
- package/dist/services/api-client.d.ts.map +0 -1
- package/dist/services/auth-handler.d.ts +0 -30
- package/dist/services/auth-handler.d.ts.map +0 -1
- package/dist/services/background-task-manager.d.ts +0 -114
- package/dist/services/background-task-manager.d.ts.map +0 -1
- package/dist/services/checkpoint-manager.d.ts +0 -204
- package/dist/services/checkpoint-manager.d.ts.map +0 -1
- package/dist/services/clipboard-service.d.ts +0 -37
- package/dist/services/clipboard-service.d.ts.map +0 -1
- package/dist/services/connectivity-manager.d.ts +0 -18
- package/dist/services/connectivity-manager.d.ts.map +0 -1
- package/dist/services/conversation-manager.d.ts +0 -73
- package/dist/services/conversation-manager.d.ts.map +0 -1
- package/dist/services/environment-context-injector.d.ts +0 -69
- package/dist/services/environment-context-injector.d.ts.map +0 -1
- package/dist/services/fast-context-agent.d.ts +0 -12
- package/dist/services/fast-context-agent.d.ts.map +0 -1
- package/dist/services/input-detection-agent.d.ts +0 -40
- package/dist/services/input-detection-agent.d.ts.map +0 -1
- package/dist/services/input-requirement-detector.d.ts +0 -28
- package/dist/services/input-requirement-detector.d.ts.map +0 -1
- package/dist/services/local-chat-storage.d.ts +0 -182
- package/dist/services/local-chat-storage.d.ts.map +0 -1
- package/dist/services/monitored-shell-manager.d.ts +0 -120
- package/dist/services/monitored-shell-manager.d.ts.map +0 -1
- package/dist/services/ollama-service.d.ts +0 -197
- package/dist/services/ollama-service.d.ts.map +0 -1
- package/dist/services/session-quota-manager.d.ts +0 -101
- package/dist/services/session-quota-manager.d.ts.map +0 -1
- package/dist/services/shell-input-agent.d.ts +0 -89
- package/dist/services/shell-input-agent.d.ts.map +0 -1
- package/dist/services/sub-agent-manager.d.ts +0 -140
- package/dist/services/sub-agent-manager.d.ts.map +0 -1
- package/dist/services/warpify-detector.d.ts +0 -43
- package/dist/services/warpify-detector.d.ts.map +0 -1
- package/dist/services/workflow-storage.d.ts +0 -72
- package/dist/services/workflow-storage.d.ts.map +0 -1
- package/dist/test-ssh-handler.d.ts +0 -8
- package/dist/test-ssh-handler.d.ts.map +0 -1
- package/dist/tools/background-command.d.ts +0 -11
- package/dist/tools/background-command.d.ts.map +0 -1
- package/dist/tools/command.d.ts +0 -3
- package/dist/tools/command.d.ts.map +0 -1
- package/dist/tools/create-image.d.ts +0 -10
- package/dist/tools/create-image.d.ts.map +0 -1
- package/dist/tools/enter-remote-session.d.ts +0 -48
- package/dist/tools/enter-remote-session.d.ts.map +0 -1
- package/dist/tools/fast-context.d.ts +0 -3
- package/dist/tools/fast-context.d.ts.map +0 -1
- package/dist/tools/file-ops.d.ts +0 -7
- package/dist/tools/file-ops.d.ts.map +0 -1
- package/dist/tools/find-files.d.ts +0 -49
- package/dist/tools/find-files.d.ts.map +0 -1
- package/dist/tools/get-diff.d.ts +0 -14
- package/dist/tools/get-diff.d.ts.map +0 -1
- package/dist/tools/grep-search.d.ts +0 -155
- package/dist/tools/grep-search.d.ts.map +0 -1
- package/dist/tools/inspect-symbol.d.ts +0 -32
- package/dist/tools/inspect-symbol.d.ts.map +0 -1
- package/dist/tools/plan-mode.d.ts +0 -140
- package/dist/tools/plan-mode.d.ts.map +0 -1
- package/dist/tools/read-binary-file.d.ts +0 -10
- package/dist/tools/read-binary-file.d.ts.map +0 -1
- package/dist/tools/registry.d.ts +0 -31
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/reproduce_issue.d.ts +0 -2
- package/dist/tools/reproduce_issue.d.ts.map +0 -1
- package/dist/tools/sub-agent.d.ts +0 -9
- package/dist/tools/sub-agent.d.ts.map +0 -1
- package/dist/tools/task-complete.d.ts +0 -3
- package/dist/tools/task-complete.d.ts.map +0 -1
- package/dist/tools/types.d.ts +0 -40
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/validation.d.ts +0 -47
- package/dist/tools/validation.d.ts.map +0 -1
- package/dist/tools/web-search.d.ts +0 -24
- package/dist/tools/web-search.d.ts.map +0 -1
- package/dist/tools/workflow-tool.d.ts +0 -11
- package/dist/tools/workflow-tool.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -123
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/workflow.d.ts +0 -110
- package/dist/types/workflow.d.ts.map +0 -1
- package/dist/ui/components/AgentTimer.d.ts +0 -7
- package/dist/ui/components/AgentTimer.d.ts.map +0 -1
- package/dist/ui/components/App.d.ts +0 -197
- package/dist/ui/components/App.d.ts.map +0 -1
- package/dist/ui/components/AuthScreen.d.ts +0 -8
- package/dist/ui/components/AuthScreen.d.ts.map +0 -1
- package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
- package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
- package/dist/ui/components/Breadcrumbs.d.ts +0 -13
- package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
- package/dist/ui/components/CircularSelectInput.d.ts +0 -24
- package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
- package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
- package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/CodeBlock.d.ts +0 -9
- package/dist/ui/components/CodeBlock.d.ts.map +0 -1
- package/dist/ui/components/ConfigViewer.d.ts +0 -11
- package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
- package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
- package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
- package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
- package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
- package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
- package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
- package/dist/ui/components/DiffViewer.d.ts +0 -9
- package/dist/ui/components/DiffViewer.d.ts.map +0 -1
- package/dist/ui/components/ErrorBoundary.d.ts +0 -17
- package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/ui/components/FileCreationPreview.d.ts +0 -8
- package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
- package/dist/ui/components/FileOperation.d.ts +0 -10
- package/dist/ui/components/FileOperation.d.ts.map +0 -1
- package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
- package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/FontRecommendation.d.ts +0 -1
- package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
- package/dist/ui/components/InputBox.d.ts +0 -42
- package/dist/ui/components/InputBox.d.ts.map +0 -1
- package/dist/ui/components/InteractiveShell.d.ts +0 -30
- package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
- package/dist/ui/components/KeyboardHelp.d.ts +0 -7
- package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
- package/dist/ui/components/LoadingIndicator.d.ts +0 -3
- package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
- package/dist/ui/components/MCPAddScreen.d.ts +0 -13
- package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
- package/dist/ui/components/MCPListScreen.d.ts +0 -17
- package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
- package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
- package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
- package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
- package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
- package/dist/ui/components/MessageBox.d.ts +0 -10
- package/dist/ui/components/MessageBox.d.ts.map +0 -1
- package/dist/ui/components/MessageDisplay.d.ts +0 -14
- package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
- package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
- package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
- package/dist/ui/components/MultiLineInput.d.ts +0 -13
- package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
- package/dist/ui/components/PasswordPrompt.d.ts +0 -9
- package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
- package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
- package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
- package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
- package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
- package/dist/ui/components/SelectPrompt.d.ts +0 -12
- package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
- package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
- package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/StatusBar.d.ts +0 -14
- package/dist/ui/components/StatusBar.d.ts.map +0 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
- package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
- package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
- package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
- package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
- package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
- package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
- package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
- package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
- package/dist/ui/components/ToolResult.d.ts +0 -10
- package/dist/ui/components/ToolResult.d.ts.map +0 -1
- package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
- package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
- package/dist/ui/components/WelcomeBanner.d.ts +0 -3
- package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
- package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
- package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
- package/dist/utils/ansi-encoder.d.ts +0 -7
- package/dist/utils/ansi-encoder.d.ts.map +0 -1
- package/dist/utils/chat-formatter.d.ts +0 -12
- package/dist/utils/chat-formatter.d.ts.map +0 -1
- package/dist/utils/command-history.d.ts +0 -24
- package/dist/utils/command-history.d.ts.map +0 -1
- package/dist/utils/context-sanitizer.d.ts +0 -50
- package/dist/utils/context-sanitizer.d.ts.map +0 -1
- package/dist/utils/conversation-logger.d.ts +0 -142
- package/dist/utils/conversation-logger.d.ts.map +0 -1
- package/dist/utils/custom-commands-manager.d.ts +0 -59
- package/dist/utils/custom-commands-manager.d.ts.map +0 -1
- package/dist/utils/editor-utils.d.ts +0 -101
- package/dist/utils/editor-utils.d.ts.map +0 -1
- package/dist/utils/file.d.ts +0 -61
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/input-classifier.d.ts +0 -25
- package/dist/utils/input-classifier.d.ts.map +0 -1
- package/dist/utils/logger.d.ts +0 -17
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/markdown-parser.d.ts +0 -60
- package/dist/utils/markdown-parser.d.ts.map +0 -1
- package/dist/utils/shell.d.ts +0 -47
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/state.d.ts +0 -13
- package/dist/utils/state.d.ts.map +0 -1
- package/dist/utils/syntax-checker.d.ts +0 -24
- package/dist/utils/syntax-checker.d.ts.map +0 -1
- package/dist/utils/terminal-output.d.ts +0 -25
- package/dist/utils/terminal-output.d.ts.map +0 -1
- package/dist/utils/text-clipboard.d.ts +0 -12
- package/dist/utils/text-clipboard.d.ts.map +0 -1
- package/dist/utils/unicode-sanitizer.d.ts +0 -44
- package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
- package/dist/utils/version-checker.d.ts +0 -14
- package/dist/utils/version-checker.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wsl-handler.js","sourceRoot":"","sources":["../../../src/context/handlers/wsl-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/context/handlers/wsl-handler.ts"],"sourcesContent":["/**\r\n * WSL Handler for Windows Subsystem for Linux\r\n */\r\n\r\nimport { exec, spawn, ChildProcess } from 'child_process';\r\nimport { promisify } from 'util';\r\nimport { SubshellHandler, BreadcrumbInfo, CommandResult, DirectoryEntry, SearchResult } from '../subshell-handler.js';\r\nimport { SubshellContext, SubshellConnectionError, SubshellExecutionError, OSType } from '../types.js';\r\nimport { randomBytes } from 'crypto';\r\nimport * as os from 'os';\r\n\r\nconst execAsync = promisify(exec);\r\n\r\n/**\r\n * WSL-specific configuration\r\n */\r\nexport interface WSLConfig {\r\n /** WSL distribution name (e.g., \"Ubuntu\", \"Debian\") */\r\n distribution: string;\r\n}\r\n\r\n/**\r\n * WSL Handler implementation\r\n */\r\nexport class WSLHandler implements SubshellHandler {\r\n readonly type = 'wsl';\r\n readonly detectionPatterns = [\r\n /^wsl$/,\r\n /^wsl\\s+/,\r\n /^wsl\\.exe\\s+/,\r\n ];\r\n\r\n private config: WSLConfig | null = null;\r\n private currentWorkingDirectory: string = '~';\r\n private shellType: string = 'bash';\r\n private sessionId: string = '';\r\n private shellProcess: ChildProcess | null = null;\r\n private commandQueue: Array<{\r\n command: string;\r\n resolve: (result: CommandResult) => void;\r\n reject: (error: Error) => void;\r\n }> = [];\r\n private currentOutput: string = '';\r\n private currentError: string = '';\r\n\r\n // Streaming output callback for real-time display\r\n private onOutputCallback: ((data: string, type: 'stdout' | 'stderr') => void) | null = null;\r\n\r\n /**\r\n * Set a callback to receive real-time output from commands\r\n * This is essential for interactive commands like sudo that need user input\r\n */\r\n setOutputCallback(callback: ((data: string, type: 'stdout' | 'stderr') => void) | null): void {\r\n this.onOutputCallback = callback;\r\n }\r\n\r\n /**\r\n * Write data to the shell's stdin (for user input like passwords)\r\n */\r\n writeToStdin(data: string): boolean {\r\n if (this.shellProcess && this.shellProcess.stdin && !this.shellProcess.stdin.destroyed) {\r\n this.shellProcess.stdin.write(data);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Detect if a command should trigger this handler\r\n */\r\n detect(command: string): boolean {\r\n return this.detectionPatterns.some(pattern => pattern.test(command));\r\n }\r\n\r\n /**\r\n * Connect to the WSL environment\r\n */\r\n async connect(command: string, cwd: string): Promise<SubshellContext> {\r\n this.sessionId = randomBytes(16).toString('hex');\r\n\r\n try {\r\n // Verify WSL is available (Windows only)\r\n this.verifyWSLAvailable();\r\n\r\n // Parse WSL command to extract distribution\r\n this.config = await this.parseWSLCommand(command);\r\n\r\n // Spawn interactive shell\r\n await this.spawnInteractiveShell();\r\n\r\n // Detect shell type\r\n this.shellType = await this.detectShellType();\r\n\r\n // Get initial working directory\r\n this.currentWorkingDirectory = await this.getCurrentWorkingDirectory();\r\n\r\n return {\r\n type: 'wsl',\r\n handler: this,\r\n metadata: {\r\n workingDirectory: this.currentWorkingDirectory,\r\n shell: this.shellType,\r\n os: 'linux',\r\n distroName: this.config.distribution,\r\n },\r\n connectionState: 'connected',\r\n sessionId: this.sessionId,\r\n };\r\n } catch (error) {\r\n throw new SubshellConnectionError(\r\n 'wsl',\r\n error instanceof Error ? error.message : 'Unknown error',\r\n false\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Spawn an interactive shell process\r\n */\r\n private async spawnInteractiveShell(): Promise<void> {\r\n if (!this.config) {\r\n throw new Error('Config not initialized');\r\n }\r\n\r\n const distro = this.config.distribution.trim().replace(/\\0/g, '');\r\n\r\n return new Promise((resolve, reject) => {\r\n // Spawn wsl.exe with the distribution\r\n this.shellProcess = spawn('wsl.exe', ['-d', distro], {\r\n stdio: ['pipe', 'pipe', 'pipe'],\r\n shell: false,\r\n });\r\n\r\n if (!this.shellProcess.stdout || !this.shellProcess.stderr || !this.shellProcess.stdin) {\r\n reject(new Error('Failed to create shell process streams'));\r\n return;\r\n }\r\n\r\n let hasResolved = false;\r\n let errorOutput = '';\r\n let initCommandSent = false;\r\n\r\n // Set up output handlers\r\n this.shellProcess.stdout.on('data', (data: Buffer) => {\r\n const text = data.toString();\r\n this.currentOutput += text;\r\n\r\n // Stream to callback if registered (for real-time UI display)\r\n if (this.onOutputCallback) {\r\n this.onOutputCallback(text, 'stdout');\r\n }\r\n\r\n // If we get any output, the shell is working\r\n if (!hasResolved) {\r\n hasResolved = true;\r\n resolve();\r\n }\r\n });\r\n\r\n this.shellProcess.stderr.on('data', (data: Buffer) => {\r\n const text = data.toString();\r\n this.currentError += text;\r\n errorOutput += text;\r\n\r\n // Stream to callback if registered (for real-time UI display)\r\n if (this.onOutputCallback) {\r\n this.onOutputCallback(text, 'stderr');\r\n }\r\n });\r\n\r\n this.shellProcess.on('exit', (code) => {\r\n if (!hasResolved) {\r\n hasResolved = true;\r\n\r\n // Check for common WSL errors\r\n if (errorOutput.includes('HCS_E_SERVICE_NOT_AVAILABLE')) {\r\n reject(new Error('WSL service is not running. Try running \"wsl --shutdown\" and then try again, or restart your computer.'));\r\n } else if (errorOutput.includes('required feature is not installed')) {\r\n reject(new Error('WSL is not properly installed or enabled. Please ensure WSL 2 is installed and the Virtual Machine Platform feature is enabled.'));\r\n } else {\r\n reject(new Error(`WSL process exited with code ${code}. Error: ${errorOutput || 'No error output'}`));\r\n }\r\n }\r\n this.shellProcess = null;\r\n });\r\n\r\n this.shellProcess.on('error', (error) => {\r\n if (!hasResolved) {\r\n hasResolved = true;\r\n reject(new Error(`Failed to spawn WSL process: ${error.message}`));\r\n }\r\n });\r\n\r\n // Wait for stdin to be ready, then send initialization command\r\n const sendInitCommand = () => {\r\n if (!initCommandSent && this.shellProcess && this.shellProcess.stdin && !this.shellProcess.stdin.destroyed) {\r\n initCommandSent = true;\r\n this.shellProcess.stdin.write('echo \"CENTAURUS_READY\"\\n');\r\n }\r\n };\r\n\r\n // Try to send command immediately if stdin is already writable\r\n if (this.shellProcess.stdin.writable) {\r\n sendInitCommand();\r\n } else {\r\n // Otherwise wait for the 'ready' event on stdin\r\n this.shellProcess.stdin.once('ready', sendInitCommand);\r\n }\r\n\r\n // Fallback: also try after a small delay in case ready event doesn't fire\r\n setTimeout(() => {\r\n sendInitCommand();\r\n }, 200);\r\n\r\n // Timeout if we don't get a response\r\n // WSL cold-start can take 10+ seconds on first run\r\n setTimeout(() => {\r\n if (!hasResolved) {\r\n hasResolved = true;\r\n reject(new Error(`WSL shell initialization timed out. Error: ${errorOutput || 'No error output'}`));\r\n }\r\n }, 15000);\r\n });\r\n }\r\n\r\n /**\r\n * Disconnect from the WSL environment\r\n */\r\n async disconnect(): Promise<void> {\r\n if (this.shellProcess) {\r\n this.shellProcess.kill();\r\n this.shellProcess = null;\r\n }\r\n this.config = null;\r\n }\r\n\r\n /**\r\n * Check if this handler is currently connected to a WSL environment\r\n */\r\n isConnected(): boolean {\r\n return this.config !== null && this.shellProcess !== null;\r\n }\r\n\r\n /**\r\n * Execute a command in the WSL environment\r\n */\r\n async executeCommand(command: string): Promise<CommandResult> {\r\n if (!this.config) {\r\n throw new SubshellExecutionError(command, 'Not connected to WSL - config is null');\r\n }\r\n\r\n if (!this.shellProcess) {\r\n throw new SubshellExecutionError(command, 'Not connected to WSL - shell process is null');\r\n }\r\n\r\n if (!this.shellProcess.stdin) {\r\n throw new SubshellExecutionError(command, 'Not connected to WSL - stdin is null');\r\n }\r\n\r\n if (this.shellProcess.killed || this.shellProcess.exitCode !== null) {\r\n throw new SubshellExecutionError(command, 'Not connected to WSL - shell process has exited');\r\n }\r\n\r\n try {\r\n // Clear previous output\r\n this.currentOutput = '';\r\n this.currentError = '';\r\n\r\n // Unique PWD tag for this session\r\n const pwdTag = `__CENTAURUS_PWD_${this.sessionId}__`;\r\n\r\n // Build command with pwd tracking\r\n let commandWithPwd: string;\r\n const trimmedCommand = command.trim();\r\n\r\n // Check if this is a cd command\r\n if (trimmedCommand.startsWith('cd ') || trimmedCommand === 'cd') {\r\n // For cd commands, execute directly without prepending current directory\r\n // The shell maintains its own state\r\n commandWithPwd = `${command}; echo \"${pwdTag}:$(pwd)\"\\n`;\r\n } else {\r\n // For other commands, ensure we're in the right directory first\r\n commandWithPwd = `cd ${this.currentWorkingDirectory} && ${command}; echo \"${pwdTag}:$(pwd)\"\\n`;\r\n }\r\n\r\n // Send command to shell\r\n this.shellProcess.stdin.write(commandWithPwd);\r\n\r\n // Wait for command to complete (look for the pwd marker)\r\n const result = await this.waitForCommandCompletion(30000);\r\n\r\n return result;\r\n } catch (error: any) {\r\n return {\r\n stdout: '',\r\n stderr: error.message || 'Command execution failed',\r\n exitCode: 1,\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Wait for command completion by monitoring output\r\n */\r\n private async waitForCommandCompletion(timeoutMs = 30000): Promise<CommandResult> {\r\n const pwdTag = `__CENTAURUS_PWD_${this.sessionId}__`;\r\n const pwdRegex = new RegExp(`${pwdTag}:(.+)$`, 'm');\r\n const removeRegex = new RegExp(`${pwdTag}:.+$`, 'm');\r\n\r\n return new Promise((resolve, reject) => {\r\n const startTime = Date.now();\r\n const checkInterval = setInterval(() => {\r\n if (timeoutMs > 0 && Date.now() - startTime >= timeoutMs) {\r\n clearInterval(checkInterval);\r\n reject(new Error(`Command execution timed out after ${timeoutMs}ms`));\r\n return;\r\n }\r\n\r\n const pwdMatch = this.currentOutput.match(pwdRegex);\r\n\r\n if (pwdMatch) {\r\n clearInterval(checkInterval);\r\n\r\n // Extract working directory\r\n const newCwd = pwdMatch[1].trim();\r\n this.currentWorkingDirectory = newCwd;\r\n\r\n // Clean output\r\n const cleanStdout = this.currentOutput\r\n .replace(removeRegex, '')\r\n .trim();\r\n\r\n resolve({\r\n stdout: cleanStdout,\r\n stderr: this.currentError,\r\n exitCode: 0,\r\n });\r\n }\r\n }, 100);\r\n });\r\n }\r\n\r\n /**\r\n * Read a file from the WSL filesystem\r\n */\r\n async readFile(path: string): Promise<string> {\r\n if (!this.config) {\r\n throw new Error('Not connected to WSL');\r\n }\r\n\r\n const distro = this.config.distribution.trim().replace(/\\0/g, '');\r\n const wslPath = this.resolveWSLPath(path);\r\n // Use base64 to avoid encoding issues and binary-safe transfer\r\n const command = `wsl.exe -d ${distro} -- bash -c \"base64 '${wslPath}' 2>/dev/null || cat '${wslPath}' | base64\"`;\r\n\r\n try {\r\n const { stdout } = await execAsync(command);\r\n const b64 = stdout.replace(/\\s+/g, '');\r\n return Buffer.from(b64, 'base64').toString('utf-8');\r\n } catch (error: any) {\r\n throw new Error(`Failed to read file ${path}: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Write a file to the WSL filesystem\r\n */\r\n async writeFile(path: string, content: string | Buffer): Promise<void> {\r\n if (!this.config) {\r\n throw new Error('Not connected to WSL');\r\n }\r\n\r\n const distro = this.config.distribution.trim().replace(/\\0/g, '');\r\n const wslPath = this.resolveWSLPath(path);\r\n\r\n // Use base64-encoded, chunked writes to avoid shell arg/command length limits\r\n const inputBuffer = Buffer.isBuffer(content) ? content : Buffer.from(content, 'utf8');\r\n const base64Content = inputBuffer.toString('base64');\r\n const CHUNK_SIZE = 32000; // conservative size per command\r\n\r\n try {\r\n // Truncate/initialize file\r\n const truncateCmd = `wsl.exe -d ${distro} -- bash -c \": > '${wslPath}'\"`;\r\n await execAsync(truncateCmd);\r\n\r\n // Write in chunks\r\n for (let i = 0; i < base64Content.length; i += CHUNK_SIZE) {\r\n const chunk = base64Content.slice(i, i + CHUNK_SIZE);\r\n const writeCmd = `wsl.exe -d ${distro} -- bash -c \"echo '${chunk}' | base64 -d >> '${wslPath}'\"`;\r\n await execAsync(writeCmd);\r\n }\r\n } catch (error: any) {\r\n throw new Error(`Failed to write file ${path}: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * List directory contents in WSL\r\n */\r\n async listDirectory(path: string): Promise<DirectoryEntry[]> {\r\n if (!this.config) {\r\n throw new Error('Not connected to WSL');\r\n }\r\n\r\n const distro = this.config.distribution.trim().replace(/\\0/g, '');\r\n const wslPath = this.resolveWSLPath(path);\r\n const command = `wsl.exe -d ${distro} -- ls -la \"${wslPath}\"`;\r\n\r\n try {\r\n const { stdout } = await execAsync(command);\r\n return this.parseDirectoryListing(stdout);\r\n } catch (error: any) {\r\n throw new Error(`Failed to list directory ${path}: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Search for files matching a pattern in WSL\r\n */\r\n async searchFiles(pattern: string, directory: string): Promise<SearchResult[]> {\r\n if (!this.config) {\r\n throw new Error('Not connected to WSL');\r\n }\r\n\r\n const distro = this.config.distribution.trim().replace(/\\0/g, '');\r\n const wslPath = this.resolveWSLPath(directory);\r\n const escapedPattern = pattern.replace(/'/g, \"'\\\\''\");\r\n const command = `wsl.exe -d ${distro} -- bash -c \"grep -rn '${escapedPattern}' '${wslPath}' 2>/dev/null || true\"`;\r\n\r\n try {\r\n const { stdout } = await execAsync(command);\r\n return this.parseSearchResults(stdout);\r\n } catch (error: any) {\r\n // grep returns non-zero if no matches, which is not an error\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Get the current working directory in WSL\r\n */\r\n async getCurrentWorkingDirectory(): Promise<string> {\r\n if (!this.config || !this.shellProcess || !this.shellProcess.stdin) {\r\n return '~';\r\n }\r\n\r\n try {\r\n // Clear output\r\n this.currentOutput = '';\r\n\r\n // Send pwd command\r\n this.shellProcess.stdin.write('pwd\\n');\r\n\r\n // Wait for output\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n\r\n const lines = this.currentOutput.trim().split('\\n');\r\n const path = lines[lines.length - 1].trim();\r\n\r\n return path || '~';\r\n } catch {\r\n return '~';\r\n }\r\n }\r\n\r\n /**\r\n * Get the shell type\r\n */\r\n async getShellType(): Promise<string> {\r\n return this.shellType;\r\n }\r\n\r\n /**\r\n * Get the operating system type (always linux for WSL)\r\n */\r\n async getOSType(): Promise<OSType> {\r\n return 'linux';\r\n }\r\n\r\n /**\r\n * Get breadcrumb information for the UI\r\n */\r\n getBreadcrumbs(): BreadcrumbInfo[] {\r\n if (!this.config) {\r\n return [];\r\n }\r\n\r\n return [\r\n {\r\n label: 'wsl',\r\n color: 'yellow',\r\n },\r\n {\r\n label: this.config.distribution,\r\n color: 'yellow',\r\n },\r\n ];\r\n }\r\n\r\n // Private helper methods\r\n\r\n /**\r\n * Verify that WSL is available on the system\r\n */\r\n private verifyWSLAvailable(): void {\r\n if (os.platform() !== 'win32') {\r\n throw new Error('WSL is only available on Windows');\r\n }\r\n }\r\n\r\n /**\r\n * Parse WSL command to extract distribution name\r\n */\r\n private async parseWSLCommand(command: string): Promise<WSLConfig> {\r\n const parts = command.trim().split(/\\s+/);\r\n let distribution = '';\r\n\r\n // Look for -d or --distribution flag\r\n for (let i = 1; i < parts.length; i++) {\r\n const part = parts[i];\r\n\r\n if ((part === '-d' || part === '--distribution') && i + 1 < parts.length) {\r\n distribution = parts[i + 1];\r\n break;\r\n }\r\n }\r\n\r\n // If no distribution specified, get the default\r\n if (!distribution) {\r\n distribution = await this.getDefaultDistribution();\r\n }\r\n\r\n return {\r\n distribution,\r\n };\r\n }\r\n\r\n /**\r\n * Get the default WSL distribution\r\n */\r\n private async getDefaultDistribution(): Promise<string> {\r\n try {\r\n const { stdout } = await execAsync('wsl.exe --list --verbose');\r\n\r\n // Remove BOM and null bytes from output\r\n const cleanOutput = stdout.replace(/^\\uFEFF/, '').replace(/\\0/g, '');\r\n const lines = cleanOutput.split('\\n');\r\n\r\n // Find the line with * (default distribution)\r\n for (const line of lines) {\r\n if (line.includes('*')) {\r\n const match = line.match(/\\*\\s+(\\S+)/);\r\n if (match) {\r\n const distro = match[1].trim().replace(/\\0/g, '');\r\n if (distro) {\r\n return distro;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If no default found, return the first distribution\r\n for (const line of lines) {\r\n const match = line.match(/^\\s+(\\S+)/);\r\n if (match && !match[1].includes('NAME')) {\r\n const distro = match[1].trim().replace(/\\0/g, '');\r\n if (distro) {\r\n return distro;\r\n }\r\n }\r\n }\r\n\r\n throw new Error('No WSL distributions found');\r\n } catch (error) {\r\n throw new Error('Failed to detect WSL distribution');\r\n }\r\n }\r\n\r\n /**\r\n * Detect the shell type in WSL\r\n */\r\n private async detectShellType(): Promise<string> {\r\n if (!this.config || !this.shellProcess || !this.shellProcess.stdin) {\r\n return 'bash';\r\n }\r\n\r\n try {\r\n // Clear output\r\n this.currentOutput = '';\r\n\r\n // Send command to detect shell\r\n this.shellProcess.stdin.write('echo $SHELL\\n');\r\n\r\n // Wait for output\r\n await new Promise(resolve => setTimeout(resolve, 300));\r\n\r\n const shellPath = this.currentOutput.trim();\r\n\r\n if (shellPath.includes('bash')) return 'bash';\r\n if (shellPath.includes('zsh')) return 'zsh';\r\n if (shellPath.includes('fish')) return 'fish';\r\n\r\n return 'bash';\r\n } catch {\r\n return 'bash';\r\n }\r\n }\r\n\r\n /**\r\n * Build a WSL command with working directory context\r\n */\r\n private buildWSLCommand(command: string): string {\r\n if (!this.config) {\r\n throw new Error('Not connected to WSL');\r\n }\r\n\r\n // Validate distribution name\r\n const distro = this.config.distribution.trim().replace(/\\0/g, '');\r\n if (!distro) {\r\n throw new Error('Invalid WSL distribution name');\r\n }\r\n\r\n // Determine the directory to cd into\r\n const targetDir = this.currentWorkingDirectory === '~' || this.currentWorkingDirectory === ''\r\n ? '~'\r\n : this.currentWorkingDirectory;\r\n\r\n // Unique PWD tag\r\n const pwdTag = `__CENTAURUS_PWD_${this.sessionId}__`;\r\n\r\n // Build the command with pwd tracking\r\n // Use single quotes to avoid escaping issues with $\r\n const bashScript = `cd ${targetDir} && ${command}; echo \"${pwdTag}:$(pwd)\"`;\r\n\r\n // Use wsl.exe with bash -c and single quotes\r\n return `wsl.exe -d ${distro} -- bash -c '${bashScript.replace(/'/g, \"'\\\\''\")}'`;\r\n }\r\n\r\n /**\r\n * Convert Windows path to WSL path\r\n */\r\n static windowsToWSLPath(windowsPath: string): string {\r\n // Convert C:\\Users\\... to /mnt/c/Users/...\r\n const match = windowsPath.match(/^([A-Za-z]):(\\\\|\\/)/);\r\n if (match) {\r\n const drive = match[1].toLowerCase();\r\n const rest = windowsPath.substring(2).replace(/\\\\/g, '/');\r\n return `/mnt/${drive}${rest}`;\r\n }\r\n\r\n // Already a Unix path\r\n return windowsPath.replace(/\\\\/g, '/');\r\n }\r\n\r\n /**\r\n * Convert WSL path to Windows path\r\n */\r\n static wslToWindowsPath(wslPath: string): string {\r\n // Convert /mnt/c/Users/... to C:\\Users\\...\r\n const match = wslPath.match(/^\\/mnt\\/([a-z])(\\/.*)?$/);\r\n if (match) {\r\n const drive = match[1].toUpperCase();\r\n const rest = (match[2] || '').replace(/\\//g, '\\\\');\r\n return `${drive}:${rest}`;\r\n }\r\n\r\n // Not a /mnt path, return as-is\r\n return wslPath;\r\n }\r\n\r\n /**\r\n * Resolve a path to a WSL path\r\n */\r\n private resolveWSLPath(path: string): string {\r\n // If it's already an absolute Unix path, use it\r\n if (path.startsWith('/')) {\r\n return path;\r\n }\r\n\r\n // If it starts with ~, use it\r\n if (path.startsWith('~')) {\r\n return path;\r\n }\r\n\r\n // If it's a Windows path, convert it\r\n if (path.match(/^[A-Za-z]:/)) {\r\n return WSLHandler.windowsToWSLPath(path);\r\n }\r\n\r\n // Otherwise, treat as relative to current working directory\r\n return `${this.currentWorkingDirectory}/${path}`;\r\n }\r\n\r\n /**\r\n * Parse directory listing output\r\n */\r\n private parseDirectoryListing(output: string): DirectoryEntry[] {\r\n const entries: DirectoryEntry[] = [];\r\n const lines = output.split('\\n').filter(line => line.trim());\r\n\r\n for (const line of lines) {\r\n // Skip total line and current/parent directory\r\n if (line.startsWith('total') || line.endsWith(' .') || line.endsWith(' ..')) {\r\n continue;\r\n }\r\n\r\n // Parse ls -la output: permissions links owner group size date time name\r\n const match = line.match(/^([drwx-]+)\\s+\\d+\\s+\\S+\\s+\\S+\\s+(\\d+)\\s+\\S+\\s+\\S+\\s+\\S+\\s+(.+)$/);\r\n if (match) {\r\n const permissions = match[1];\r\n const size = parseInt(match[2], 10);\r\n const name = match[3];\r\n\r\n entries.push({\r\n name,\r\n type: permissions.startsWith('d') ? 'directory' : 'file',\r\n size,\r\n permissions,\r\n });\r\n }\r\n }\r\n\r\n return entries;\r\n }\r\n\r\n /**\r\n * Parse search results from grep output\r\n */\r\n private parseSearchResults(output: string): SearchResult[] {\r\n const results: SearchResult[] = [];\r\n const lines = output.split('\\n').filter(line => line.trim());\r\n\r\n for (const line of lines) {\r\n const match = line.match(/^(.+?):(\\d+):(.+)$/);\r\n if (match) {\r\n results.push({\r\n file: match[1],\r\n line: parseInt(match[2], 10),\r\n content: match[3],\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Execute a promise with a timeout\r\n */\r\n private async executeWithTimeout<T>(\r\n operation: () => Promise<T>,\r\n timeoutMs: number,\r\n operationName: string\r\n ): Promise<T> {\r\n return Promise.race([\r\n operation(),\r\n new Promise<T>((_, reject) =>\r\n setTimeout(\r\n () => reject(new Error(`${operationName} timed out after ${timeoutMs}ms`)),\r\n timeoutMs\r\n )\r\n ),\r\n ]);\r\n }\r\n\r\n /**\r\n * Create a new instance of this handler\r\n */\r\n createNew(): SubshellHandler {\r\n const newHandler = new WSLHandler();\r\n if (this.onOutputCallback) {\r\n newHandler.setOutputCallback(this.onOutputCallback);\r\n }\r\n return newHandler;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
package/dist/context/index.js
CHANGED
|
@@ -1,7 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import {
|
|
2
|
+
SubshellContext,
|
|
3
|
+
SubshellMetadata,
|
|
4
|
+
SubshellType,
|
|
5
|
+
ConnectionState,
|
|
6
|
+
OSType,
|
|
7
|
+
SubshellConnectionError,
|
|
8
|
+
SubshellExecutionError
|
|
9
|
+
} from "./types";
|
|
10
|
+
import {
|
|
11
|
+
SubshellHandler,
|
|
12
|
+
BreadcrumbInfo,
|
|
13
|
+
CommandResult,
|
|
14
|
+
DirectoryEntry,
|
|
15
|
+
SearchResult
|
|
16
|
+
} from "./subshell-handler";
|
|
17
|
+
import {
|
|
18
|
+
ContextManager,
|
|
19
|
+
ContextChangeCallback
|
|
20
|
+
} from "./context-manager";
|
|
21
|
+
import {
|
|
22
|
+
CommandDetector,
|
|
23
|
+
DetectionResult
|
|
24
|
+
} from "./command-detector";
|
|
25
|
+
export {
|
|
26
|
+
BreadcrumbInfo,
|
|
27
|
+
CommandDetector,
|
|
28
|
+
CommandResult,
|
|
29
|
+
ConnectionState,
|
|
30
|
+
ContextChangeCallback,
|
|
31
|
+
ContextManager,
|
|
32
|
+
DetectionResult,
|
|
33
|
+
DirectoryEntry,
|
|
34
|
+
OSType,
|
|
35
|
+
SearchResult,
|
|
36
|
+
SubshellConnectionError,
|
|
37
|
+
SubshellContext,
|
|
38
|
+
SubshellExecutionError,
|
|
39
|
+
SubshellHandler,
|
|
40
|
+
SubshellMetadata,
|
|
41
|
+
SubshellType
|
|
42
|
+
};
|
|
7
43
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/context/index.ts"],"sourcesContent":["/**\r\n * Context management system exports\r\n */\r\n\r\nexport {\r\n SubshellContext,\r\n SubshellMetadata,\r\n SubshellType,\r\n ConnectionState,\r\n OSType,\r\n SubshellConnectionError,\r\n SubshellExecutionError,\r\n} from './types';\r\n\r\nexport {\r\n SubshellHandler,\r\n BreadcrumbInfo,\r\n CommandResult,\r\n DirectoryEntry,\r\n SearchResult,\r\n} from './subshell-handler';\r\n\r\nexport {\r\n ContextManager,\r\n ContextChangeCallback,\r\n} from './context-manager';\r\n\r\nexport {\r\n CommandDetector,\r\n DetectionResult,\r\n} from './command-detector';\r\n"],"mappings":"AAIA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/context/types.js
CHANGED
|
@@ -1,34 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
reason;
|
|
10
|
-
recoverable;
|
|
11
|
-
constructor(type, reason, recoverable) {
|
|
12
|
-
super(`${type} connection failed: ${reason}`);
|
|
13
|
-
this.type = type;
|
|
14
|
-
this.reason = reason;
|
|
15
|
-
this.recoverable = recoverable;
|
|
16
|
-
this.name = 'SubshellConnectionError';
|
|
17
|
-
}
|
|
1
|
+
class SubshellConnectionError extends Error {
|
|
2
|
+
constructor(type, reason, recoverable) {
|
|
3
|
+
super(`${type} connection failed: ${reason}`);
|
|
4
|
+
this.type = type;
|
|
5
|
+
this.reason = reason;
|
|
6
|
+
this.recoverable = recoverable;
|
|
7
|
+
this.name = "SubshellConnectionError";
|
|
8
|
+
}
|
|
18
9
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
super(`Command execution failed: ${reason}`);
|
|
28
|
-
this.command = command;
|
|
29
|
-
this.reason = reason;
|
|
30
|
-
this.exitCode = exitCode;
|
|
31
|
-
this.name = 'SubshellExecutionError';
|
|
32
|
-
}
|
|
10
|
+
class SubshellExecutionError extends Error {
|
|
11
|
+
constructor(command, reason, exitCode) {
|
|
12
|
+
super(`Command execution failed: ${reason}`);
|
|
13
|
+
this.command = command;
|
|
14
|
+
this.reason = reason;
|
|
15
|
+
this.exitCode = exitCode;
|
|
16
|
+
this.name = "SubshellExecutionError";
|
|
17
|
+
}
|
|
33
18
|
}
|
|
19
|
+
export {
|
|
20
|
+
SubshellConnectionError,
|
|
21
|
+
SubshellExecutionError
|
|
22
|
+
};
|
|
34
23
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/context/types.ts"],"sourcesContent":["/**\r\n * Core types for the subshell context management system\r\n */\r\n\r\n/**\r\n * Connection state for a subshell\r\n */\r\nexport type ConnectionState = 'connecting' | 'connected' | 'disconnected' | 'error';\r\n\r\n/**\r\n * Operating system types\r\n */\r\nexport type OSType = 'windows' | 'macos' | 'linux';\r\n\r\n/**\r\n * Subshell type identifiers\r\n */\r\nexport type SubshellType = 'local' | 'ssh' | 'wsl' | 'docker';\r\n\r\n/**\r\n * Metadata about a subshell environment\r\n */\r\nexport interface SubshellMetadata {\r\n /** Remote hostname (for SSH) */\r\n hostname?: string;\r\n \r\n /** Remote username (for SSH) */\r\n username?: string;\r\n \r\n /** Current working directory in the subshell */\r\n workingDirectory: string;\r\n \r\n /** Shell type (bash, zsh, fish, etc.) */\r\n shell: string;\r\n \r\n /** Operating system type */\r\n os: OSType;\r\n \r\n /** WSL distribution name (for WSL) */\r\n distroName?: string;\r\n \r\n /** Docker container ID (for Docker) */\r\n containerId?: string;\r\n \r\n /** Port number (for SSH) */\r\n port?: number;\r\n}\r\n\r\n/**\r\n * Context representing the current execution environment\r\n */\r\nexport interface SubshellContext {\r\n /** Type of the current context */\r\n type: SubshellType;\r\n \r\n /** Handler for this subshell (undefined for local) */\r\n handler?: any; // Using any to avoid circular dependency, will be SubshellHandler at runtime\r\n \r\n /** Metadata about the environment */\r\n metadata: SubshellMetadata;\r\n \r\n /** Current connection state */\r\n connectionState: ConnectionState;\r\n \r\n /** Unique session identifier */\r\n sessionId: string;\r\n}\r\n\r\n/**\r\n * Error thrown when a subshell connection fails\r\n */\r\nexport class SubshellConnectionError extends Error {\r\n constructor(\r\n public type: string,\r\n public reason: string,\r\n public recoverable: boolean\r\n ) {\r\n super(`${type} connection failed: ${reason}`);\r\n this.name = 'SubshellConnectionError';\r\n }\r\n}\r\n\r\n/**\r\n * Error thrown when a subshell command execution fails\r\n */\r\nexport class SubshellExecutionError extends Error {\r\n constructor(\r\n public command: string,\r\n public reason: string,\r\n public exitCode?: number\r\n ) {\r\n super(`Command execution failed: ${reason}`);\r\n this.name = 'SubshellExecutionError';\r\n }\r\n}\r\n"],"mappings":"AAuEO,MAAM,gCAAgC,MAAM;AAAA,EACjD,YACS,MACA,QACA,aACP;AACA,UAAM,GAAG,IAAI,uBAAuB,MAAM,EAAE;AAJrC;AACA;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AAKO,MAAM,+BAA+B,MAAM;AAAA,EAChD,YACS,SACA,QACA,UACP;AACA,UAAM,6BAA6B,MAAM,EAAE;AAJpC;AACA;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { useState, useEffect } from
|
|
2
|
-
import { ConnectivityManager } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { ConnectivityManager } from "../services/connectivity-manager.js";
|
|
3
|
+
function useConnectivity() {
|
|
4
|
+
const [isConnected, setIsConnected] = useState(true);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const manager = ConnectivityManager.getInstance();
|
|
7
|
+
const unsubscribe = manager.subscribe(setIsConnected);
|
|
8
|
+
return () => unsubscribe();
|
|
9
|
+
}, []);
|
|
10
|
+
return isConnected;
|
|
11
11
|
}
|
|
12
|
+
export {
|
|
13
|
+
useConnectivity
|
|
14
|
+
};
|
|
12
15
|
//# sourceMappingURL=useConnectivity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useConnectivity.ts"],"sourcesContent":["\r\nimport { useState, useEffect } from 'react';\r\nimport { ConnectivityManager } from '../services/connectivity-manager.js';\r\n\r\nexport function useConnectivity() {\r\n const [isConnected, setIsConnected] = useState(true);\r\n\r\n useEffect(() => {\r\n const manager = ConnectivityManager.getInstance();\r\n const unsubscribe = manager.subscribe(setIsConnected);\r\n return () => unsubscribe();\r\n }, []);\r\n\r\n return isConnected;\r\n}\r\n"],"mappings":"AACA,SAAS,UAAU,iBAAiB;AACpC,SAAS,2BAA2B;AAE7B,SAAS,kBAAkB;AAC9B,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,IAAI;AAEnD,YAAU,MAAM;AACZ,UAAM,UAAU,oBAAoB,YAAY;AAChD,UAAM,cAAc,QAAQ,UAAU,cAAc;AACpD,WAAO,MAAM,YAAY;AAAA,EAC7B,GAAG,CAAC,CAAC;AAEL,SAAO;AACX;","names":[]}
|
|
@@ -1,84 +1,72 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
SAFETY_BUFFER: 6,
|
|
22
|
-
// Reserved height for thinking display when active
|
|
23
|
-
THINKING_RESERVED_HEIGHT: 6,
|
|
24
|
-
// Minimum lines for streaming display (floor value)
|
|
25
|
-
MIN_STREAMING_LINES: 3,
|
|
1
|
+
import { useState, useEffect, useCallback } from "react";
|
|
2
|
+
const TERMINAL_HEIGHT_CONSTANTS = {
|
|
3
|
+
// InputBox reserved height:
|
|
4
|
+
// - Header row (CWD, Model, Mode) = 1 line
|
|
5
|
+
// - Input area borders = 2 lines (top + bottom of box)
|
|
6
|
+
// - Input prompt line = 1 line
|
|
7
|
+
// - Footer hints row = 1 line
|
|
8
|
+
// - Autocomplete dropdown (if visible) = up to 3 lines
|
|
9
|
+
// - Extra margin for markdown padding = 2 lines
|
|
10
|
+
INPUT_BOX_RESERVED_HEIGHT: 10,
|
|
11
|
+
// ABSOLUTE MINIMUM terminal rows to enable streaming
|
|
12
|
+
// Must be fairly high because integrated terminals may report buffer size
|
|
13
|
+
// Enable streaming for terminals with 35+ rows
|
|
14
|
+
MIN_ROWS_FOR_STREAMING: 35,
|
|
15
|
+
// Extra safety buffer to prevent edge-case flickering
|
|
16
|
+
SAFETY_BUFFER: 6,
|
|
17
|
+
// Reserved height for thinking display when active
|
|
18
|
+
THINKING_RESERVED_HEIGHT: 6,
|
|
19
|
+
// Minimum lines for streaming display (floor value)
|
|
20
|
+
MIN_STREAMING_LINES: 3
|
|
26
21
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
maxStreamingLines,
|
|
53
|
-
maxThinkingHeight,
|
|
54
|
-
};
|
|
22
|
+
function getTerminalDimensions() {
|
|
23
|
+
const columns = process.stdout.columns || 80;
|
|
24
|
+
const rows = process.stdout.rows || 24;
|
|
25
|
+
const {
|
|
26
|
+
INPUT_BOX_RESERVED_HEIGHT,
|
|
27
|
+
MIN_ROWS_FOR_STREAMING,
|
|
28
|
+
SAFETY_BUFFER,
|
|
29
|
+
THINKING_RESERVED_HEIGHT,
|
|
30
|
+
MIN_STREAMING_LINES
|
|
31
|
+
} = TERMINAL_HEIGHT_CONSTANTS;
|
|
32
|
+
const availableStreamingLines = Math.max(
|
|
33
|
+
0,
|
|
34
|
+
rows - INPUT_BOX_RESERVED_HEIGHT - THINKING_RESERVED_HEIGHT - SAFETY_BUFFER
|
|
35
|
+
);
|
|
36
|
+
const shouldEnableStreaming = rows >= MIN_ROWS_FOR_STREAMING;
|
|
37
|
+
const maxStreamingLines = shouldEnableStreaming ? Math.max(MIN_STREAMING_LINES, availableStreamingLines - SAFETY_BUFFER) : MIN_STREAMING_LINES;
|
|
38
|
+
const maxThinkingHeight = Math.max(2, Math.min(3, Math.floor(availableStreamingLines / 5)));
|
|
39
|
+
return {
|
|
40
|
+
columns,
|
|
41
|
+
rows,
|
|
42
|
+
availableStreamingLines,
|
|
43
|
+
shouldEnableStreaming,
|
|
44
|
+
maxStreamingLines,
|
|
45
|
+
maxThinkingHeight
|
|
46
|
+
};
|
|
55
47
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
handleResize();
|
|
70
|
-
return () => {
|
|
71
|
-
process.stdout.off('resize', handleResize);
|
|
72
|
-
};
|
|
73
|
-
}, [handleResize]);
|
|
74
|
-
return dimensions;
|
|
48
|
+
function useTerminalDimensions() {
|
|
49
|
+
const [dimensions, setDimensions] = useState(getTerminalDimensions);
|
|
50
|
+
const handleResize = useCallback(() => {
|
|
51
|
+
setDimensions(getTerminalDimensions());
|
|
52
|
+
}, []);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
process.stdout.on("resize", handleResize);
|
|
55
|
+
handleResize();
|
|
56
|
+
return () => {
|
|
57
|
+
process.stdout.off("resize", handleResize);
|
|
58
|
+
};
|
|
59
|
+
}, [handleResize]);
|
|
60
|
+
return dimensions;
|
|
75
61
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
*/
|
|
80
|
-
export function isTerminalTooSmallForStreaming() {
|
|
81
|
-
const { shouldEnableStreaming } = getTerminalDimensions();
|
|
82
|
-
return !shouldEnableStreaming;
|
|
62
|
+
function isTerminalTooSmallForStreaming() {
|
|
63
|
+
const { shouldEnableStreaming } = getTerminalDimensions();
|
|
64
|
+
return !shouldEnableStreaming;
|
|
83
65
|
}
|
|
66
|
+
export {
|
|
67
|
+
TERMINAL_HEIGHT_CONSTANTS,
|
|
68
|
+
getTerminalDimensions,
|
|
69
|
+
isTerminalTooSmallForStreaming,
|
|
70
|
+
useTerminalDimensions
|
|
71
|
+
};
|
|
84
72
|
//# sourceMappingURL=useTerminalDimensions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useTerminalDimensions.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\r\n\r\n/**\r\n * Constants for terminal height calculations\r\n * VERY AGGRESSIVELY tuned to prevent streaming issues in VS Code integrated terminal\r\n * VS Code may report terminal buffer size (e.g., 50+ rows) even when only 10-15 are visible\r\n */\r\nexport const TERMINAL_HEIGHT_CONSTANTS = {\r\n // InputBox reserved height:\r\n // - Header row (CWD, Model, Mode) = 1 line\r\n // - Input area borders = 2 lines (top + bottom of box)\r\n // - Input prompt line = 1 line\r\n // - Footer hints row = 1 line \r\n // - Autocomplete dropdown (if visible) = up to 3 lines\r\n // - Extra margin for markdown padding = 2 lines\r\n INPUT_BOX_RESERVED_HEIGHT: 10,\r\n\r\n // ABSOLUTE MINIMUM terminal rows to enable streaming\r\n // Must be fairly high because integrated terminals may report buffer size\r\n // Enable streaming for terminals with 35+ rows\r\n MIN_ROWS_FOR_STREAMING: 35,\r\n\r\n // Extra safety buffer to prevent edge-case flickering\r\n SAFETY_BUFFER: 6,\r\n\r\n // Reserved height for thinking display when active\r\n THINKING_RESERVED_HEIGHT: 6,\r\n\r\n // Minimum lines for streaming display (floor value)\r\n MIN_STREAMING_LINES: 3,\r\n};\r\n\r\nexport interface TerminalDimensions {\r\n /** Terminal width in columns */\r\n columns: number;\r\n /** Terminal height in rows */\r\n rows: number;\r\n /** Available lines for streaming content after InputBox reservation */\r\n availableStreamingLines: number;\r\n /** Whether streaming should be enabled based on available height */\r\n shouldEnableStreaming: boolean;\r\n /** Maximum lines to show in streaming display */\r\n maxStreamingLines: number;\r\n /** Maximum height for thinking display */\r\n maxThinkingHeight: number;\r\n}\r\n\r\n/**\r\n * Get current terminal dimensions and calculate streaming parameters\r\n */\r\nexport function getTerminalDimensions(): TerminalDimensions {\r\n const columns = process.stdout.columns || 80;\r\n const rows = process.stdout.rows || 24;\r\n\r\n const {\r\n INPUT_BOX_RESERVED_HEIGHT,\r\n MIN_ROWS_FOR_STREAMING,\r\n SAFETY_BUFFER,\r\n THINKING_RESERVED_HEIGHT,\r\n MIN_STREAMING_LINES,\r\n } = TERMINAL_HEIGHT_CONSTANTS;\r\n\r\n // Calculate available space for streaming content\r\n const availableStreamingLines = Math.max(\r\n 0,\r\n rows - INPUT_BOX_RESERVED_HEIGHT - THINKING_RESERVED_HEIGHT - SAFETY_BUFFER\r\n );\r\n\r\n // VERY STRICT CHECK: Only enable streaming if terminal has enough ABSOLUTE rows\r\n // This is intentionally very conservative to prevent issues in VS Code integrated terminals\r\n const shouldEnableStreaming = rows >= MIN_ROWS_FOR_STREAMING;\r\n\r\n // Calculate max lines for streaming display\r\n // Use available lines minus safety buffer, with a minimum floor\r\n const maxStreamingLines = shouldEnableStreaming\r\n ? Math.max(MIN_STREAMING_LINES, availableStreamingLines - SAFETY_BUFFER)\r\n : MIN_STREAMING_LINES;\r\n\r\n // Calculate max height for thinking display (dynamic based on available space)\r\n // Default to 2-3, but can be smaller in tight spaces\r\n const maxThinkingHeight = Math.max(2, Math.min(3, Math.floor(availableStreamingLines / 5)));\r\n\r\n return {\r\n columns,\r\n rows,\r\n availableStreamingLines,\r\n shouldEnableStreaming,\r\n maxStreamingLines,\r\n maxThinkingHeight,\r\n };\r\n}\r\n\r\n/**\r\n * React hook for reactive terminal dimension tracking\r\n * Updates on terminal resize events\r\n */\r\nexport function useTerminalDimensions(): TerminalDimensions {\r\n const [dimensions, setDimensions] = useState<TerminalDimensions>(getTerminalDimensions);\r\n\r\n const handleResize = useCallback(() => {\r\n setDimensions(getTerminalDimensions());\r\n }, []);\r\n\r\n useEffect(() => {\r\n // Listen for resize events\r\n process.stdout.on('resize', handleResize);\r\n\r\n // Initial calculation\r\n handleResize();\r\n\r\n return () => {\r\n process.stdout.off('resize', handleResize);\r\n };\r\n }, [handleResize]);\r\n\r\n return dimensions;\r\n}\r\n\r\n/**\r\n * Utility to check if terminal is too small for streaming\r\n * Can be used outside of React components\r\n */\r\nexport function isTerminalTooSmallForStreaming(): boolean {\r\n const { shouldEnableStreaming } = getTerminalDimensions();\r\n return !shouldEnableStreaming;\r\n}\r\n"],"mappings":"AAAA,SAAS,UAAU,WAAW,mBAAmB;AAO1C,MAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrC,2BAA2B;AAAA;AAAA;AAAA;AAAA,EAK3B,wBAAwB;AAAA;AAAA,EAGxB,eAAe;AAAA;AAAA,EAGf,0BAA0B;AAAA;AAAA,EAG1B,qBAAqB;AACzB;AAoBO,SAAS,wBAA4C;AACxD,QAAM,UAAU,QAAQ,OAAO,WAAW;AAC1C,QAAM,OAAO,QAAQ,OAAO,QAAQ;AAEpC,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAGJ,QAAM,0BAA0B,KAAK;AAAA,IACjC;AAAA,IACA,OAAO,4BAA4B,2BAA2B;AAAA,EAClE;AAIA,QAAM,wBAAwB,QAAQ;AAItC,QAAM,oBAAoB,wBACpB,KAAK,IAAI,qBAAqB,0BAA0B,aAAa,IACrE;AAIN,QAAM,oBAAoB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,0BAA0B,CAAC,CAAC,CAAC;AAE1F,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAMO,SAAS,wBAA4C;AACxD,QAAM,CAAC,YAAY,aAAa,IAAI,SAA6B,qBAAqB;AAEtF,QAAM,eAAe,YAAY,MAAM;AACnC,kBAAc,sBAAsB,CAAC;AAAA,EACzC,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AAEZ,YAAQ,OAAO,GAAG,UAAU,YAAY;AAGxC,iBAAa;AAEb,WAAO,MAAM;AACT,cAAQ,OAAO,IAAI,UAAU,YAAY;AAAA,IAC7C;AAAA,EACJ,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAO;AACX;AAMO,SAAS,iCAA0C;AACtD,QAAM,EAAE,sBAAsB,IAAI,sBAAsB;AACxD,SAAO,CAAC;AACZ;","names":[]}
|