centaurus-cli 3.0.0 → 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 -5037
- 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 +1513 -973
- 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 +605 -537
- 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 -400
- 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 -3249
- 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 -511
- 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 -167
- 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,"
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/components/SlashCommandAutocomplete.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\n\r\ninterface SlashCommandAutocompleteProps {\r\n commands: Array<{ name: string; description: string }>;\r\n selectedIndex: number;\r\n maxVisibleItems: number;\r\n scrollOffset: number;\r\n}\r\n\r\nexport const SlashCommandAutocomplete: React.FC<SlashCommandAutocompleteProps> = ({\r\n commands,\r\n selectedIndex,\r\n maxVisibleItems,\r\n scrollOffset\r\n}) => {\r\n if (commands.length === 0 || maxVisibleItems === 0) return null;\r\n\r\n // Calculate the visible window of commands\r\n const visibleCommands = commands.slice(scrollOffset, scrollOffset + maxVisibleItems);\r\n\r\n // Determine if we need scroll indicators\r\n const hasMoreAbove = scrollOffset > 0;\r\n const hasMoreBelow = scrollOffset + maxVisibleItems < commands.length;\r\n\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor=\"white\"\r\n paddingX={1}\r\n marginLeft={1}\r\n marginTop={0}\r\n >\r\n {/* Scroll up indicator */}\r\n {hasMoreAbove && (\r\n <Text color=\"#666666\" dimColor>↑ more</Text>\r\n )}\r\n\r\n {visibleCommands.map((cmd, index) => {\r\n const actualIndex = scrollOffset + index;\r\n const isSelected = actualIndex === selectedIndex;\r\n\r\n return (\r\n <Box\r\n key={cmd.name}\r\n paddingX={1}\r\n >\r\n <Text\r\n color={isSelected ? '#00ccff' : '#666666'}\r\n bold={isSelected}\r\n inverse={isSelected}\r\n >\r\n {cmd.name}\r\n </Text>\r\n <Text color=\"#666666\"> {cmd.description}</Text>\r\n </Box>\r\n );\r\n })}\r\n\r\n {/* Scroll down indicator */}\r\n {hasMoreBelow && (\r\n <Text color=\"#666666\" dimColor>↓ more</Text>\r\n )}\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AASnB,MAAM,2BAAoE,CAAC;AAAA,EAC9E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,MAAI,SAAS,WAAW,KAAK,oBAAoB,EAAG,QAAO;AAG3D,QAAM,kBAAkB,SAAS,MAAM,cAAc,eAAe,eAAe;AAGnF,QAAM,eAAe,eAAe;AACpC,QAAM,eAAe,eAAe,kBAAkB,SAAS;AAE/D,SACI;AAAA,IAAC;AAAA;AAAA,MACG,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA;AAAA,IAGV,gBACG,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,aAAM;AAAA,IAGxC,gBAAgB,IAAI,CAAC,KAAK,UAAU;AACjC,YAAM,cAAc,eAAe;AACnC,YAAM,aAAa,gBAAgB;AAEnC,aACI;AAAA,QAAC;AAAA;AAAA,UACG,KAAK,IAAI;AAAA,UACT,UAAU;AAAA;AAAA,QAEV;AAAA,UAAC;AAAA;AAAA,YACG,OAAO,aAAa,YAAY;AAAA,YAChC,MAAM;AAAA,YACN,SAAS;AAAA;AAAA,UAER,IAAI;AAAA,QACT;AAAA,QACA,oCAAC,QAAK,OAAM,aAAU,MAAG,IAAI,WAAY;AAAA,MAC7C;AAAA,IAER,CAAC;AAAA,IAGA,gBACG,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,aAAM;AAAA,EAE7C;AAER;","names":[]}
|
|
@@ -1,90 +1,59 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import { Box, Text } from
|
|
3
|
-
import Spinner from
|
|
4
|
-
import { useConnectivity } from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import Spinner from "ink-spinner";
|
|
4
|
+
import { useConnectivity } from "../../hooks/useConnectivity.js";
|
|
5
|
+
const StatusBar = ({
|
|
6
|
+
autoAcceptMode,
|
|
7
|
+
isLoading,
|
|
8
|
+
loadingMessage = "Processing...",
|
|
9
|
+
model,
|
|
10
|
+
subshellContext,
|
|
11
|
+
currentTokens,
|
|
12
|
+
maxTokens
|
|
13
|
+
}) => {
|
|
14
|
+
const isConnected = useConnectivity();
|
|
15
|
+
const tokenUsagePercent = currentTokens && maxTokens && maxTokens > 0 ? Math.round(currentTokens / maxTokens * 100) : 0;
|
|
16
|
+
const getTokenColor = () => {
|
|
17
|
+
if (tokenUsagePercent >= 90) return "red";
|
|
18
|
+
if (tokenUsagePercent >= 75) return "yellow";
|
|
19
|
+
return "#00ccff";
|
|
20
|
+
};
|
|
21
|
+
const formatTokenCount = (count) => {
|
|
22
|
+
if (count >= 1e6) {
|
|
23
|
+
return `${(count / 1e6).toFixed(1)}M`;
|
|
24
|
+
}
|
|
25
|
+
if (count >= 1e3) {
|
|
26
|
+
return `${(count / 1e3).toFixed(1)}K`;
|
|
27
|
+
}
|
|
28
|
+
return count.toString();
|
|
29
|
+
};
|
|
30
|
+
const getSubshellPrefix = () => {
|
|
31
|
+
if (!subshellContext || subshellContext.type === "local") {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const typeColors = {
|
|
35
|
+
ssh: "cyan",
|
|
36
|
+
wsl: "yellow",
|
|
37
|
+
docker: "blue"
|
|
18
38
|
};
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
};
|
|
39
|
-
const color = typeColors[subshellContext.type] || 'cyan';
|
|
40
|
-
const prefix = subshellContext.type.toUpperCase();
|
|
41
|
-
return (React.createElement(Box, { marginRight: 1 },
|
|
42
|
-
React.createElement(Text, { color: color, bold: true },
|
|
43
|
-
"[",
|
|
44
|
-
prefix,
|
|
45
|
-
"]")));
|
|
46
|
-
};
|
|
47
|
-
// Get working directory from context if available
|
|
48
|
-
const getWorkingDirectory = () => {
|
|
49
|
-
if (subshellContext && subshellContext.type !== 'local') {
|
|
50
|
-
const cwd = subshellContext.metadata.workingDirectory;
|
|
51
|
-
// Truncate long paths
|
|
52
|
-
if (cwd.length > 40) {
|
|
53
|
-
return '...' + cwd.slice(-37);
|
|
54
|
-
}
|
|
55
|
-
return cwd;
|
|
56
|
-
}
|
|
57
|
-
return null;
|
|
58
|
-
};
|
|
59
|
-
const workingDir = getWorkingDirectory();
|
|
60
|
-
return (React.createElement(Box, { borderStyle: "single", borderColor: "#003b59", paddingX: 1 },
|
|
61
|
-
React.createElement(Box, { flexGrow: 1 },
|
|
62
|
-
getSubshellPrefix(),
|
|
63
|
-
workingDir && (React.createElement(Box, { marginRight: 1 },
|
|
64
|
-
React.createElement(Text, { color: "#666666" }, "CWD: "),
|
|
65
|
-
React.createElement(Text, { color: "#00ccff" }, workingDir))),
|
|
66
|
-
isLoading && (React.createElement(Box, { marginRight: 1 },
|
|
67
|
-
React.createElement(Text, { color: "#00ccff" },
|
|
68
|
-
React.createElement(Spinner, { type: "dots" })),
|
|
69
|
-
React.createElement(Text, { color: "#00ccff" },
|
|
70
|
-
" ",
|
|
71
|
-
loadingMessage))),
|
|
72
|
-
!isLoading && model && (React.createElement(Box, { marginRight: 1 },
|
|
73
|
-
React.createElement(Text, { color: "#666666" }, "Model: "),
|
|
74
|
-
React.createElement(Text, { color: "#00ccff" }, model))),
|
|
75
|
-
currentTokens !== undefined && maxTokens !== undefined && maxTokens > 0 && (React.createElement(Box, { marginRight: 1 },
|
|
76
|
-
React.createElement(Text, { color: "#666666" }, "Context: "),
|
|
77
|
-
React.createElement(Text, { color: getTokenColor() },
|
|
78
|
-
formatTokenCount(currentTokens),
|
|
79
|
-
"/",
|
|
80
|
-
formatTokenCount(maxTokens),
|
|
81
|
-
" (",
|
|
82
|
-
tokenUsagePercent,
|
|
83
|
-
"%)")))),
|
|
84
|
-
React.createElement(Box, null,
|
|
85
|
-
!isConnected && (React.createElement(Box, { marginRight: 2 },
|
|
86
|
-
React.createElement(Text, { color: "red", bold: true }, "No internet connection"))),
|
|
87
|
-
autoAcceptMode && (React.createElement(Text, { color: "#00cc66", bold: true }, "[AUTO-ACCEPT: ON]")),
|
|
88
|
-
!autoAcceptMode && (React.createElement(Text, { color: "#666666", dimColor: true }, "[AUTO-ACCEPT: OFF]")))));
|
|
39
|
+
const color = typeColors[subshellContext.type] || "cyan";
|
|
40
|
+
const prefix = subshellContext.type.toUpperCase();
|
|
41
|
+
return /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color, bold: true }, "[", prefix, "]"));
|
|
42
|
+
};
|
|
43
|
+
const getWorkingDirectory = () => {
|
|
44
|
+
if (subshellContext && subshellContext.type !== "local") {
|
|
45
|
+
const cwd = subshellContext.metadata.workingDirectory;
|
|
46
|
+
if (cwd.length > 40) {
|
|
47
|
+
return "..." + cwd.slice(-37);
|
|
48
|
+
}
|
|
49
|
+
return cwd;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
const workingDir = getWorkingDirectory();
|
|
54
|
+
return /* @__PURE__ */ React.createElement(Box, { borderStyle: "single", borderColor: "#003b59", paddingX: 1 }, /* @__PURE__ */ React.createElement(Box, { flexGrow: 1 }, getSubshellPrefix(), workingDir && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "CWD: "), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, workingDir)), isLoading && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, /* @__PURE__ */ React.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, " ", loadingMessage)), !isLoading && model && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "Model: "), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, model)), currentTokens !== void 0 && maxTokens !== void 0 && maxTokens > 0 && /* @__PURE__ */ React.createElement(Box, { marginRight: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "Context: "), /* @__PURE__ */ React.createElement(Text, { color: getTokenColor() }, formatTokenCount(currentTokens), "/", formatTokenCount(maxTokens), " (", tokenUsagePercent, "%)"))), /* @__PURE__ */ React.createElement(Box, null, !isConnected && /* @__PURE__ */ React.createElement(Box, { marginRight: 2 }, /* @__PURE__ */ React.createElement(Text, { color: "red", bold: true }, "No internet connection")), autoAcceptMode && /* @__PURE__ */ React.createElement(Text, { color: "#00cc66", bold: true }, "[AUTO-ACCEPT: ON]"), !autoAcceptMode && /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, "[AUTO-ACCEPT: OFF]")));
|
|
55
|
+
};
|
|
56
|
+
export {
|
|
57
|
+
StatusBar
|
|
89
58
|
};
|
|
90
59
|
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/components/StatusBar.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport Spinner from 'ink-spinner';\r\nimport { SubshellContext } from '../../context/types.js';\r\n\r\ninterface StatusBarProps {\r\n autoAcceptMode: boolean;\r\n isLoading: boolean;\r\n loadingMessage?: string;\r\n model?: string;\r\n subshellContext?: SubshellContext;\r\n currentTokens?: number;\r\n maxTokens?: number;\r\n}\r\n\r\nimport { useConnectivity } from '../../hooks/useConnectivity.js';\r\n\r\nexport const StatusBar: React.FC<StatusBarProps> = ({\r\n autoAcceptMode,\r\n isLoading,\r\n loadingMessage = 'Processing...',\r\n model,\r\n subshellContext,\r\n currentTokens,\r\n maxTokens\r\n}) => {\r\n const isConnected = useConnectivity();\r\n\r\n // Calculate token usage percentage\r\n const tokenUsagePercent = currentTokens && maxTokens && maxTokens > 0\r\n ? Math.round((currentTokens / maxTokens) * 100)\r\n : 0;\r\n\r\n // Determine color based on usage\r\n const getTokenColor = () => {\r\n if (tokenUsagePercent >= 90) return 'red';\r\n if (tokenUsagePercent >= 75) return 'yellow';\r\n return '#00ccff';\r\n };\r\n\r\n // Format token count with K/M suffix\r\n const formatTokenCount = (count: number): string => {\r\n if (count >= 1000000) {\r\n return `${(count / 1000000).toFixed(1)}M`;\r\n }\r\n if (count >= 1000) {\r\n return `${(count / 1000).toFixed(1)}K`;\r\n }\r\n return count.toString();\r\n };\r\n\r\n // Get subshell type prefix with appropriate color\r\n const getSubshellPrefix = () => {\r\n if (!subshellContext || subshellContext.type === 'local') {\r\n return null;\r\n }\r\n\r\n const typeColors: Record<string, string> = {\r\n ssh: 'cyan',\r\n wsl: 'yellow',\r\n docker: 'blue',\r\n };\r\n\r\n const color = typeColors[subshellContext.type] || 'cyan';\r\n const prefix = subshellContext.type.toUpperCase();\r\n\r\n return (\r\n <Box marginRight={1}>\r\n <Text color={color} bold>[{prefix}]</Text>\r\n </Box>\r\n );\r\n };\r\n\r\n // Get working directory from context if available\r\n const getWorkingDirectory = () => {\r\n if (subshellContext && subshellContext.type !== 'local') {\r\n const cwd = subshellContext.metadata.workingDirectory;\r\n // Truncate long paths\r\n if (cwd.length > 40) {\r\n return '...' + cwd.slice(-37);\r\n }\r\n return cwd;\r\n }\r\n return null;\r\n };\r\n\r\n const workingDir = getWorkingDirectory();\r\n\r\n return (\r\n <Box borderStyle=\"single\" borderColor=\"#003b59\" paddingX={1}>\r\n <Box flexGrow={1}>\r\n {/* Show subshell prefix and working directory */}\r\n {getSubshellPrefix()}\r\n\r\n {workingDir && (\r\n <Box marginRight={1}>\r\n <Text color=\"#666666\">CWD: </Text>\r\n <Text color=\"#00ccff\">{workingDir}</Text>\r\n </Box>\r\n )}\r\n\r\n {isLoading && (\r\n <Box marginRight={1}>\r\n <Text color=\"#00ccff\">\r\n <Spinner type=\"dots\" />\r\n </Text>\r\n <Text color=\"#00ccff\"> {loadingMessage}</Text>\r\n </Box>\r\n )}\r\n\r\n {!isLoading && model && (\r\n <Box marginRight={1}>\r\n <Text color=\"#666666\">Model: </Text>\r\n <Text color=\"#00ccff\">{model}</Text>\r\n </Box>\r\n )}\r\n\r\n {/* Token usage display */}\r\n {currentTokens !== undefined && maxTokens !== undefined && maxTokens > 0 && (\r\n <Box marginRight={1}>\r\n <Text color=\"#666666\">Context: </Text>\r\n <Text color={getTokenColor()}>\r\n {formatTokenCount(currentTokens)}/{formatTokenCount(maxTokens)} ({tokenUsagePercent}%)\r\n </Text>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n <Box>\r\n {!isConnected && (\r\n <Box marginRight={2}>\r\n <Text color=\"red\" bold>No internet connection</Text>\r\n </Box>\r\n )}\r\n\r\n {autoAcceptMode && (\r\n <Text color=\"#00cc66\" bold>[AUTO-ACCEPT: ON]</Text>\r\n )}\r\n {!autoAcceptMode && (\r\n <Text color=\"#666666\" dimColor>[AUTO-ACCEPT: OFF]</Text>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n"],"mappings":"AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,OAAO,aAAa;AAapB,SAAS,uBAAuB;AAEzB,MAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAc,gBAAgB;AAGpC,QAAM,oBAAoB,iBAAiB,aAAa,YAAY,IAChE,KAAK,MAAO,gBAAgB,YAAa,GAAG,IAC5C;AAGJ,QAAM,gBAAgB,MAAM;AAC1B,QAAI,qBAAqB,GAAI,QAAO;AACpC,QAAI,qBAAqB,GAAI,QAAO;AACpC,WAAO;AAAA,EACT;AAGA,QAAM,mBAAmB,CAAC,UAA0B;AAClD,QAAI,SAAS,KAAS;AACpB,aAAO,IAAI,QAAQ,KAAS,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,IACrC;AACA,WAAO,MAAM,SAAS;AAAA,EACxB;AAGA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,CAAC,mBAAmB,gBAAgB,SAAS,SAAS;AACxD,aAAO;AAAA,IACT;AAEA,UAAM,aAAqC;AAAA,MACzC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,IACV;AAEA,UAAM,QAAQ,WAAW,gBAAgB,IAAI,KAAK;AAClD,UAAM,SAAS,gBAAgB,KAAK,YAAY;AAEhD,WACE,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAc,MAAI,QAAC,KAAE,QAAO,GAAC,CACrC;AAAA,EAEJ;AAGA,QAAM,sBAAsB,MAAM;AAChC,QAAI,mBAAmB,gBAAgB,SAAS,SAAS;AACvD,YAAM,MAAM,gBAAgB,SAAS;AAErC,UAAI,IAAI,SAAS,IAAI;AACnB,eAAO,QAAQ,IAAI,MAAM,GAAG;AAAA,MAC9B;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,oBAAoB;AAEvC,SACE,oCAAC,OAAI,aAAY,UAAS,aAAY,WAAU,UAAU,KACxD,oCAAC,OAAI,UAAU,KAEZ,kBAAkB,GAElB,cACC,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aAAU,OAAK,GAC3B,oCAAC,QAAK,OAAM,aAAW,UAAW,CACpC,GAGD,aACC,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aACV,oCAAC,WAAQ,MAAK,QAAO,CACvB,GACA,oCAAC,QAAK,OAAM,aAAU,KAAE,cAAe,CACzC,GAGD,CAAC,aAAa,SACb,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aAAU,SAAO,GAC7B,oCAAC,QAAK,OAAM,aAAW,KAAM,CAC/B,GAID,kBAAkB,UAAa,cAAc,UAAa,YAAY,KACrE,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,aAAU,WAAS,GAC/B,oCAAC,QAAK,OAAO,cAAc,KACxB,iBAAiB,aAAa,GAAE,KAAE,iBAAiB,SAAS,GAAE,MAAG,mBAAkB,IACtF,CACF,CAEJ,GAEA,oCAAC,WACE,CAAC,eACA,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAM,OAAM,MAAI,QAAC,wBAAsB,CAC/C,GAGD,kBACC,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,mBAAiB,GAE7C,CAAC,kBACA,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,oBAAkB,CAErD,CACF;AAEJ;","names":[]}
|
|
@@ -1,103 +1,120 @@
|
|
|
1
|
-
import React, { useState, useEffect, useRef } from
|
|
2
|
-
import { Box, Text } from
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const getRoleLabel = (role) => {
|
|
65
|
-
switch (role) {
|
|
66
|
-
case 'user': return 'You';
|
|
67
|
-
case 'assistant': return 'Centaurus';
|
|
68
|
-
case 'system': return 'System';
|
|
69
|
-
case 'tool': return 'Tool';
|
|
70
|
-
default: return role;
|
|
71
|
-
}
|
|
1
|
+
import React, { useState, useEffect, useRef } from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import wrapAnsi from "wrap-ansi";
|
|
4
|
+
import { MarkdownRenderer } from "./MarkdownRenderer.js";
|
|
5
|
+
import { getTerminalDimensions } from "../../hooks/useTerminalDimensions.js";
|
|
6
|
+
import { ShimmerText } from "./ShimmerText.js";
|
|
7
|
+
const STREAMING_TAIL_MAX_LINES = 5;
|
|
8
|
+
const STREAMING_UPDATE_THROTTLE_MS = 50;
|
|
9
|
+
function getLatestVisualTail(content, maxLines, width) {
|
|
10
|
+
if (!content) return "";
|
|
11
|
+
const normalized = content.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
12
|
+
const logicalLines = normalized.split("\n");
|
|
13
|
+
const safeWidth = Math.max(1, width);
|
|
14
|
+
let remaining = Math.max(1, maxLines);
|
|
15
|
+
const tail = [];
|
|
16
|
+
for (let i = logicalLines.length - 1; i >= 0 && remaining > 0; i--) {
|
|
17
|
+
const line = logicalLines[i];
|
|
18
|
+
const wrapped = wrapAnsi(line.length > 0 ? line : " ", safeWidth, { hard: true, trim: false }).split("\n");
|
|
19
|
+
if (wrapped.length <= remaining) {
|
|
20
|
+
tail.unshift(line);
|
|
21
|
+
remaining -= wrapped.length;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
tail.unshift(wrapped.slice(-remaining).join("\n"));
|
|
25
|
+
remaining = 0;
|
|
26
|
+
}
|
|
27
|
+
return tail.join("\n");
|
|
28
|
+
}
|
|
29
|
+
const StreamingMessageDisplay = React.memo(({
|
|
30
|
+
message,
|
|
31
|
+
maxLines
|
|
32
|
+
}) => {
|
|
33
|
+
const [displayContent, setDisplayContent] = useState("");
|
|
34
|
+
const contentBufferRef = useRef("");
|
|
35
|
+
const updateTimerRef = useRef(null);
|
|
36
|
+
const messageIdRef = useRef(message.id);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (messageIdRef.current !== message.id) {
|
|
39
|
+
messageIdRef.current = message.id;
|
|
40
|
+
setDisplayContent("");
|
|
41
|
+
contentBufferRef.current = "";
|
|
42
|
+
if (updateTimerRef.current) {
|
|
43
|
+
clearTimeout(updateTimerRef.current);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
contentBufferRef.current = message.content;
|
|
47
|
+
if (updateTimerRef.current) {
|
|
48
|
+
clearTimeout(updateTimerRef.current);
|
|
49
|
+
}
|
|
50
|
+
updateTimerRef.current = setTimeout(() => {
|
|
51
|
+
const fullContent = contentBufferRef.current;
|
|
52
|
+
const renderWidth = Math.max(20, (process.stdout.columns || 120) - 6);
|
|
53
|
+
const { maxStreamingLines } = getTerminalDimensions();
|
|
54
|
+
const effectiveMaxLines = Math.max(
|
|
55
|
+
1,
|
|
56
|
+
Math.min(maxLines ?? maxStreamingLines, STREAMING_TAIL_MAX_LINES)
|
|
57
|
+
);
|
|
58
|
+
setDisplayContent(getLatestVisualTail(fullContent, effectiveMaxLines, renderWidth));
|
|
59
|
+
}, STREAMING_UPDATE_THROTTLE_MS);
|
|
60
|
+
return () => {
|
|
61
|
+
if (updateTimerRef.current) {
|
|
62
|
+
clearTimeout(updateTimerRef.current);
|
|
63
|
+
}
|
|
72
64
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
65
|
+
}, [maxLines, message.content, message.id]);
|
|
66
|
+
const getRoleColor = (role) => {
|
|
67
|
+
switch (role) {
|
|
68
|
+
case "user":
|
|
69
|
+
return "#00ccff";
|
|
70
|
+
case "assistant":
|
|
71
|
+
return "#00cc66";
|
|
72
|
+
case "system":
|
|
73
|
+
return "#ffaa00";
|
|
74
|
+
case "tool":
|
|
75
|
+
return "#00ccff";
|
|
76
|
+
default:
|
|
77
|
+
return "#ffffff";
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const getRoleLabel = (role) => {
|
|
81
|
+
switch (role) {
|
|
82
|
+
case "user":
|
|
83
|
+
return "You";
|
|
84
|
+
case "assistant":
|
|
85
|
+
return "Centaurus";
|
|
86
|
+
case "system":
|
|
87
|
+
return "System";
|
|
88
|
+
case "tool":
|
|
89
|
+
return "Tool";
|
|
90
|
+
default:
|
|
91
|
+
return role;
|
|
83
92
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
93
|
+
};
|
|
94
|
+
const timestamp = message.timestamp ? new Date(message.timestamp).toLocaleTimeString() : "";
|
|
95
|
+
const hasContent = displayContent.trim();
|
|
96
|
+
const hasThoughts = message.thoughts && message.thoughts.length > 0;
|
|
97
|
+
const hasThinkingDuration = message.thinkingDuration !== void 0;
|
|
98
|
+
if (!hasContent && !hasThoughts && !hasThinkingDuration) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: getRoleColor(message.role), bold: true }, getRoleLabel(message.role), ":"), timestamp && /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, " ", timestamp)), message.thinkingDuration !== void 0 && message.thinkingDuration >= 0 && /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Thought for ", message.thinkingDuration, " second", message.thinkingDuration !== 1 ? "s" : "", " \u203A")), (displayContent.trim() || message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === void 0) && /* @__PURE__ */ React.createElement(
|
|
102
|
+
Box,
|
|
103
|
+
{
|
|
104
|
+
borderStyle: "single",
|
|
105
|
+
borderColor: "#00ccff",
|
|
106
|
+
borderLeft: true,
|
|
107
|
+
borderRight: false,
|
|
108
|
+
borderTop: false,
|
|
109
|
+
borderBottom: false,
|
|
110
|
+
paddingLeft: 1,
|
|
111
|
+
flexDirection: "column"
|
|
112
|
+
},
|
|
113
|
+
displayContent.trim() && /* @__PURE__ */ React.createElement(MarkdownRenderer, { content: displayContent, maxWidth: (process.stdout.columns || 120) - 6 }),
|
|
114
|
+
message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === void 0 && /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginTop: displayContent.trim() ? 1 : 0 }, /* @__PURE__ */ React.createElement(ShimmerText, { text: "Thinking...", baseColor: "#4a4a4a", dimShimmer: true }), message.thoughts.map((line, idx) => /* @__PURE__ */ React.createElement(Text, { key: idx, dimColor: true }, line)))
|
|
115
|
+
));
|
|
102
116
|
});
|
|
117
|
+
export {
|
|
118
|
+
StreamingMessageDisplay
|
|
119
|
+
};
|
|
103
120
|
//# sourceMappingURL=StreamingMessageDisplay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamingMessageDisplay.js","sourceRoot":"","sources":["../../../src/ui/components/StreamingMessageDisplay.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/components/StreamingMessageDisplay.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport wrapAnsi from 'wrap-ansi';\r\nimport { Message } from '../../types/index.js';\r\nimport { MarkdownRenderer } from './MarkdownRenderer.js';\r\nimport { getTerminalDimensions } from '../../hooks/useTerminalDimensions.js';\r\nimport { ShimmerText } from './ShimmerText.js';\r\n\r\ninterface StreamingMessageDisplayProps {\r\n message: Message;\r\n /** Optional override for max lines to display during streaming */\r\n maxLines?: number;\r\n}\r\n\r\nconst STREAMING_TAIL_MAX_LINES = 5;\r\nconst STREAMING_UPDATE_THROTTLE_MS = 50;\r\n\r\n/**\r\n * Keep only the latest visual lines (after wrapping), not just newline-delimited lines.\r\n * This prevents long wrapped paragraphs from flooding the streaming area.\r\n */\r\nfunction getLatestVisualTail(content: string, maxLines: number, width: number): string {\r\n if (!content) return '';\r\n\r\n const normalized = content.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\r\n const logicalLines = normalized.split('\\n');\r\n const safeWidth = Math.max(1, width);\r\n let remaining = Math.max(1, maxLines);\r\n const tail: string[] = [];\r\n\r\n for (let i = logicalLines.length - 1; i >= 0 && remaining > 0; i--) {\r\n const line = logicalLines[i];\r\n const wrapped = wrapAnsi(line.length > 0 ? line : ' ', safeWidth, { hard: true, trim: false }).split('\\n');\r\n\r\n if (wrapped.length <= remaining) {\r\n tail.unshift(line);\r\n remaining -= wrapped.length;\r\n continue;\r\n }\r\n\r\n // Include only the visible tail of this line when it exceeds the remaining budget.\r\n tail.unshift(wrapped.slice(-remaining).join('\\n'));\r\n remaining = 0;\r\n }\r\n\r\n return tail.join('\\n');\r\n}\r\n\r\n/**\r\n * StreamingMessageDisplay - Shows streaming content as it arrives\r\n * Truncates from top if content exceeds max lines to prevent flickering\r\n * Dynamically adjusts based on terminal height\r\n */\r\nexport const StreamingMessageDisplay: React.FC<StreamingMessageDisplayProps> = React.memo(({\r\n message,\r\n maxLines\r\n}) => {\r\n const [displayContent, setDisplayContent] = useState('');\r\n const contentBufferRef = useRef('');\r\n const updateTimerRef = useRef<NodeJS.Timeout | null>(null);\r\n const messageIdRef = useRef(message.id);\r\n\r\n useEffect(() => {\r\n // If message ID changed, reset everything\r\n if (messageIdRef.current !== message.id) {\r\n messageIdRef.current = message.id;\r\n setDisplayContent('');\r\n contentBufferRef.current = '';\r\n if (updateTimerRef.current) {\r\n clearTimeout(updateTimerRef.current);\r\n }\r\n }\r\n\r\n // Buffer the new content\r\n contentBufferRef.current = message.content;\r\n\r\n // Clear any existing timer\r\n if (updateTimerRef.current) {\r\n clearTimeout(updateTimerRef.current);\r\n }\r\n\r\n // Throttle updates to every 50ms for more responsive streaming while preventing excessive re-renders\r\n updateTimerRef.current = setTimeout(() => {\r\n const fullContent = contentBufferRef.current;\r\n const renderWidth = Math.max(20, (process.stdout.columns || 120) - 6);\r\n\r\n // Keep a tight tail window to avoid Ink duplication/flicker from large streamed payloads.\r\n const { maxStreamingLines } = getTerminalDimensions();\r\n const effectiveMaxLines = Math.max(\r\n 1,\r\n Math.min(maxLines ?? maxStreamingLines, STREAMING_TAIL_MAX_LINES)\r\n );\r\n\r\n setDisplayContent(getLatestVisualTail(fullContent, effectiveMaxLines, renderWidth));\r\n }, STREAMING_UPDATE_THROTTLE_MS);\r\n\r\n return () => {\r\n if (updateTimerRef.current) {\r\n clearTimeout(updateTimerRef.current);\r\n }\r\n };\r\n }, [maxLines, message.content, message.id]);\r\n\r\n const getRoleColor = (role: string) => {\r\n switch (role) {\r\n case 'user': return '#00ccff';\r\n case 'assistant': return '#00cc66';\r\n case 'system': return '#ffaa00';\r\n case 'tool': return '#00ccff';\r\n default: return '#ffffff';\r\n }\r\n };\r\n\r\n const getRoleLabel = (role: string) => {\r\n switch (role) {\r\n case 'user': return 'You';\r\n case 'assistant': return 'Centaurus';\r\n case 'system': return 'System';\r\n case 'tool': return 'Tool';\r\n default: return role;\r\n }\r\n };\r\n\r\n const timestamp = message.timestamp\r\n ? new Date(message.timestamp).toLocaleTimeString()\r\n : '';\r\n\r\n // Skip rendering completely empty streaming messages\r\n // This prevents blank space from appearing when tool goes to executing state\r\n const hasContent = displayContent.trim();\r\n const hasThoughts = message.thoughts && message.thoughts.length > 0;\r\n const hasThinkingDuration = message.thinkingDuration !== undefined;\r\n\r\n if (!hasContent && !hasThoughts && !hasThinkingDuration) {\r\n return null;\r\n }\r\n\r\n\r\n return (\r\n <Box flexDirection=\"column\" marginBottom={1}>\r\n <Box marginBottom={1}>\r\n <Text color={getRoleColor(message.role)} bold>\r\n {getRoleLabel(message.role)}:\r\n </Text>\r\n {timestamp && (\r\n <Text color=\"#666666\" dimColor> {timestamp}</Text>\r\n )}\r\n </Box>\r\n\r\n {/* Display thinking duration at the TOP after thinking completes */}\r\n {message.thinkingDuration !== undefined && message.thinkingDuration >= 0 && (\r\n <Box marginBottom={1}>\r\n <Text dimColor>Thought for {message.thinkingDuration} second{message.thinkingDuration !== 1 ? 's' : ''} ›</Text>\r\n </Box>\r\n )}\r\n\r\n {/* Display the current streaming content with markdown formatting and blue border */}\r\n {/* Also includes thinking lines inside the same border to keep the blue line continuous */}\r\n {/* Only render if there's actual content or thinking lines to display */}\r\n {(displayContent.trim() || (message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === undefined)) && (\r\n <Box\r\n borderStyle=\"single\"\r\n borderColor=\"#00ccff\"\r\n borderLeft={true}\r\n borderRight={false}\r\n borderTop={false}\r\n borderBottom={false}\r\n paddingLeft={1}\r\n flexDirection=\"column\"\r\n >\r\n {displayContent.trim() && (\r\n <MarkdownRenderer content={displayContent} maxWidth={(process.stdout.columns || 120) - 6} />\r\n )}\r\n\r\n {/* Display thinking lines (greyed out, last 3 lines) - shown WHILE thinking */}\r\n {message.thoughts && message.thoughts.length > 0 && message.thinkingDuration === undefined && (\r\n <Box flexDirection=\"column\" marginTop={displayContent.trim() ? 1 : 0}>\r\n {/* \"Thinking...\" label just above the thought preview lines */}\r\n <ShimmerText text=\"Thinking...\" baseColor=\"#4a4a4a\" dimShimmer />\r\n {message.thoughts.map((line, idx) => (\r\n <Text key={idx} dimColor>\r\n {line}\r\n </Text>\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n});\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
const TaskCompletedMessage = ({
|
|
4
|
+
taskNumber,
|
|
5
|
+
totalTasks,
|
|
6
|
+
taskDescription,
|
|
7
|
+
completionNote
|
|
8
|
+
}) => {
|
|
9
|
+
return /* @__PURE__ */ React.createElement(
|
|
10
|
+
Box,
|
|
11
|
+
{
|
|
12
|
+
flexDirection: "column",
|
|
13
|
+
borderStyle: "round",
|
|
14
|
+
borderColor: "#f59e0b",
|
|
15
|
+
paddingX: 1,
|
|
16
|
+
paddingY: 0,
|
|
17
|
+
marginY: 0,
|
|
18
|
+
alignSelf: "flex-start"
|
|
19
|
+
},
|
|
20
|
+
/* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: "#f59e0b", bold: true }, "[x] "), /* @__PURE__ */ React.createElement(Text, { color: "#f59e0b", bold: true }, "Task ", taskNumber, " of ", totalTasks, " Completed")),
|
|
21
|
+
/* @__PURE__ */ React.createElement(Box, { marginLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { color: "#888888", wrap: "wrap" }, taskDescription)),
|
|
22
|
+
completionNote && /* @__PURE__ */ React.createElement(Box, { marginLeft: 2, marginTop: 0 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true, wrap: "wrap" }, "Note: ", completionNote))
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
var TaskCompletedMessage_default = TaskCompletedMessage;
|
|
26
|
+
export {
|
|
27
|
+
TaskCompletedMessage,
|
|
28
|
+
TaskCompletedMessage_default as default
|
|
23
29
|
};
|
|
24
|
-
export default TaskCompletedMessage;
|
|
25
30
|
//# sourceMappingURL=TaskCompletedMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/components/TaskCompletedMessage.tsx"],"sourcesContent":["/**\r\n * TaskCompletedMessage Component\r\n * Displays a task completion message in the chat with checkbox styling\r\n */\r\n\r\nimport React from 'react';\r\nimport { Box, Text } from 'ink';\r\n\r\ninterface TaskCompletedMessageProps {\r\n taskNumber: number;\r\n totalTasks: number;\r\n taskDescription: string;\r\n completionNote?: string;\r\n}\r\n\r\nexport const TaskCompletedMessage: React.FC<TaskCompletedMessageProps> = ({\r\n taskNumber,\r\n totalTasks,\r\n taskDescription,\r\n completionNote\r\n}) => {\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor=\"#f59e0b\"\r\n paddingX={1}\r\n paddingY={0}\r\n marginY={0}\r\n alignSelf=\"flex-start\"\r\n >\r\n <Box>\r\n <Text color=\"#f59e0b\" bold>[x] </Text>\r\n <Text color=\"#f59e0b\" bold>Task {taskNumber} of {totalTasks} Completed</Text>\r\n </Box>\r\n <Box marginLeft={2}>\r\n <Text color=\"#888888\" wrap=\"wrap\">{taskDescription}</Text>\r\n </Box>\r\n {completionNote && (\r\n <Box marginLeft={2} marginTop={0}>\r\n <Text color=\"#666666\" dimColor wrap=\"wrap\">Note: {completionNote}</Text>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default TaskCompletedMessage;\r\n"],"mappings":"AAKA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AASnB,MAAM,uBAA4D,CAAC;AAAA,EACtE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,SACI;AAAA,IAAC;AAAA;AAAA,MACG,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAU;AAAA;AAAA,IAEV,oCAAC,WACG,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,MAAI,GAC/B,oCAAC,QAAK,OAAM,WAAU,MAAI,QAAC,SAAM,YAAW,QAAK,YAAW,YAAU,CAC1E;AAAA,IACA,oCAAC,OAAI,YAAY,KACb,oCAAC,QAAK,OAAM,WAAU,MAAK,UAAQ,eAAgB,CACvD;AAAA,IACC,kBACG,oCAAC,OAAI,YAAY,GAAG,WAAW,KAC3B,oCAAC,QAAK,OAAM,WAAU,UAAQ,MAAC,MAAK,UAAO,UAAO,cAAe,CACrE;AAAA,EAER;AAER;AAEA,IAAO,+BAAQ;","names":[]}
|