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,153 +1,161 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import { Box, Text, useInput } from
|
|
3
|
-
import { ToolExecutionMessage } from
|
|
4
|
-
import { MarkdownRenderer } from
|
|
5
|
-
import { ConnectionStatusMessage } from
|
|
6
|
-
/**
|
|
7
|
-
* Parse [IMAGE: ...] and [FILE: ...] markers from content
|
|
8
|
-
* Also handles uploading state (gs://uploading) and failed uploads (upload failed)
|
|
9
|
-
* Returns { textContent: string without markers, files: array of { type, format } }
|
|
10
|
-
*/
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import { ToolExecutionMessage } from "./ToolExecutionMessage.js";
|
|
4
|
+
import { MarkdownRenderer } from "./MarkdownRenderer.js";
|
|
5
|
+
import { ConnectionStatusMessage } from "./ConnectionStatusMessage.js";
|
|
11
6
|
function parseFileMarkers(content) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.trim();
|
|
27
|
-
return {
|
|
28
|
-
textContent,
|
|
29
|
-
files
|
|
30
|
-
};
|
|
7
|
+
const fileMarkerRegex = /\[(IMAGE|FILE):\s*([^\]]+?)\s*\((gs:\/\/[^\)]+|upload failed[^\)]*|uploading[^\)]*)\)\]/g;
|
|
8
|
+
const files = [];
|
|
9
|
+
let match;
|
|
10
|
+
while ((match = fileMarkerRegex.exec(content)) !== null) {
|
|
11
|
+
const type = match[1];
|
|
12
|
+
const filename = match[2].trim();
|
|
13
|
+
const ext = filename.split(".").pop()?.toLowerCase() || "file";
|
|
14
|
+
files.push({ type, format: ext });
|
|
15
|
+
}
|
|
16
|
+
let textContent = content.replace(/\[(IMAGE|FILE):\s*([^\]]+?)\s*\((gs:\/\/[^\)]+|upload failed[^\)]*|uploading[^\)]*)\)\]/g, "").trim();
|
|
17
|
+
return {
|
|
18
|
+
textContent,
|
|
19
|
+
files
|
|
20
|
+
};
|
|
31
21
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
export function countFilesInMessage(content) {
|
|
36
|
-
const fileMarkerMatches = content.match(/\[(IMAGE|FILE):\s*[^\]]+?\s*\((gs:\/\/[^\)]+|upload failed[^\)]*|uploading[^\)]*)\)\]/g) || [];
|
|
37
|
-
return fileMarkerMatches.length;
|
|
22
|
+
function countFilesInMessage(content) {
|
|
23
|
+
const fileMarkerMatches = content.match(/\[(IMAGE|FILE):\s*[^\]]+?\s*\((gs:\/\/[^\)]+|upload failed[^\)]*|uploading[^\)]*)\)\]/g) || [];
|
|
24
|
+
return fileMarkerMatches.length;
|
|
38
25
|
}
|
|
39
|
-
/**
|
|
40
|
-
* File attachment badge component
|
|
41
|
-
* Shows a styled box with file number and format
|
|
42
|
-
*/
|
|
43
26
|
const FileAttachmentBadge = ({ fileNumber, type, format }) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
27
|
+
const label = type === "IMAGE" ? "Image" : "File";
|
|
28
|
+
return /* @__PURE__ */ React.createElement(
|
|
29
|
+
Box,
|
|
30
|
+
{
|
|
31
|
+
borderStyle: "round",
|
|
32
|
+
borderColor: "#555555",
|
|
33
|
+
paddingX: 1,
|
|
34
|
+
marginRight: 1,
|
|
35
|
+
marginTop: 1
|
|
36
|
+
},
|
|
37
|
+
/* @__PURE__ */ React.createElement(Text, { color: "#aaaaaa" }, label, " ", fileNumber, " "),
|
|
38
|
+
/* @__PURE__ */ React.createElement(Text, { color: "#666666" }, "[", format, "]")
|
|
39
|
+
);
|
|
55
40
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return React.createElement(ToolExecutionMessage, { message: message });
|
|
41
|
+
function renderTextWithFileTags(text) {
|
|
42
|
+
const tagRegex = /(@[^\s@]+)/g;
|
|
43
|
+
const parts = [];
|
|
44
|
+
let lastIndex = 0;
|
|
45
|
+
let match;
|
|
46
|
+
let key = 0;
|
|
47
|
+
while ((match = tagRegex.exec(text)) !== null) {
|
|
48
|
+
if (match.index > lastIndex) {
|
|
49
|
+
parts.push(
|
|
50
|
+
/* @__PURE__ */ React.createElement(Text, { key: key++, color: "#ffffff" }, text.slice(lastIndex, match.index))
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
parts.push(
|
|
54
|
+
/* @__PURE__ */ React.createElement(Text, { key: key++, color: "#00ccff", bold: true }, match[1])
|
|
55
|
+
);
|
|
56
|
+
lastIndex = match.index + match[1].length;
|
|
57
|
+
}
|
|
58
|
+
if (lastIndex < text.length) {
|
|
59
|
+
parts.push(
|
|
60
|
+
/* @__PURE__ */ React.createElement(Text, { key: key++, color: "#ffffff" }, text.slice(lastIndex))
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return parts;
|
|
64
|
+
}
|
|
65
|
+
const MessageDisplay = React.memo(({
|
|
66
|
+
message,
|
|
67
|
+
fileCountBefore = 0
|
|
68
|
+
}) => {
|
|
69
|
+
const [selectedOption, setSelectedOption] = React.useState(0);
|
|
70
|
+
const [isApproved, setIsApproved] = React.useState(null);
|
|
71
|
+
const getRoleColor = (role) => {
|
|
72
|
+
switch (role) {
|
|
73
|
+
case "user":
|
|
74
|
+
return "#00ccff";
|
|
75
|
+
case "assistant":
|
|
76
|
+
return "#00cc66";
|
|
77
|
+
case "system":
|
|
78
|
+
return "#ffaa00";
|
|
79
|
+
case "tool":
|
|
80
|
+
return "#00ccff";
|
|
81
|
+
default:
|
|
82
|
+
return "#ffffff";
|
|
99
83
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
84
|
+
};
|
|
85
|
+
const getRoleLabel = (role) => {
|
|
86
|
+
switch (role) {
|
|
87
|
+
case "user":
|
|
88
|
+
return "You";
|
|
89
|
+
case "assistant":
|
|
90
|
+
return "Centaurus";
|
|
91
|
+
case "system":
|
|
92
|
+
return "System";
|
|
93
|
+
case "tool":
|
|
94
|
+
return "Tool";
|
|
95
|
+
default:
|
|
96
|
+
return role;
|
|
103
97
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
98
|
+
};
|
|
99
|
+
const timestamp = message.timestamp ? new Date(message.timestamp).toLocaleTimeString() : "";
|
|
100
|
+
useInput((input, key) => {
|
|
101
|
+
if (!message.approval || isApproved !== null) return;
|
|
102
|
+
if (key.upArrow) {
|
|
103
|
+
setSelectedOption(0);
|
|
104
|
+
} else if (key.downArrow) {
|
|
105
|
+
setSelectedOption(1);
|
|
106
|
+
} else if (key.return) {
|
|
107
|
+
const approved = selectedOption === 0;
|
|
108
|
+
setIsApproved(approved);
|
|
109
|
+
message.approval.resolve(approved);
|
|
108
110
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
111
|
+
}, { isActive: message.approval !== void 0 && isApproved === null });
|
|
112
|
+
if (message.toolExecution) {
|
|
113
|
+
return /* @__PURE__ */ React.createElement(ToolExecutionMessage, { message });
|
|
114
|
+
}
|
|
115
|
+
if (message.connectionStatus) {
|
|
116
|
+
return /* @__PURE__ */ React.createElement(ConnectionStatusMessage, { status: message.connectionStatus });
|
|
117
|
+
}
|
|
118
|
+
if (message.approval) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
if (message.role === "assistant" && !message.content.trim() && message.thinkingDuration === void 0) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const getBorderColor = () => {
|
|
125
|
+
if (message.isCommandMode) {
|
|
126
|
+
return message.role === "assistant" ? "#00cc66" : "#00ccff";
|
|
116
127
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
message.thinkingDuration !== 1 ? 's' : '',
|
|
146
|
-
" \u203A"))),
|
|
147
|
-
message.role === 'assistant' ? (message.content.trim() ? (React.createElement(Box, { borderStyle: "single", borderColor: borderColor, borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, paddingLeft: 1, flexDirection: "column", width: "100%" },
|
|
148
|
-
React.createElement(MarkdownRenderer, { content: message.content, maxWidth: (process.stdout.columns || 120) - 6 }))) : null) : (React.createElement(React.Fragment, null,
|
|
149
|
-
textContent.trim() ? (React.createElement(Box, { paddingLeft: 2 },
|
|
150
|
-
React.createElement(Text, { color: "#ffffff" }, textContent))) : null,
|
|
151
|
-
fileBadges.length > 0 && (React.createElement(Box, { paddingLeft: 2, flexDirection: "row", flexWrap: "wrap" }, fileBadges))))));
|
|
128
|
+
return message.role === "assistant" ? "#00ccff" : "#666666";
|
|
129
|
+
};
|
|
130
|
+
const borderColor = getBorderColor();
|
|
131
|
+
const { textContent, files } = message.role === "user" && !message.isCommandMode ? parseFileMarkers(message.content) : { textContent: message.content, files: [] };
|
|
132
|
+
const fileBadges = files.map((file, i) => /* @__PURE__ */ React.createElement(
|
|
133
|
+
FileAttachmentBadge,
|
|
134
|
+
{
|
|
135
|
+
key: `file-${message.id}-${i}`,
|
|
136
|
+
fileNumber: fileCountBefore + i + 1,
|
|
137
|
+
type: file.type,
|
|
138
|
+
format: file.format
|
|
139
|
+
}
|
|
140
|
+
));
|
|
141
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, !message.isSpacer && /* @__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")), message.role === "assistant" ? message.content.trim() ? /* @__PURE__ */ React.createElement(
|
|
142
|
+
Box,
|
|
143
|
+
{
|
|
144
|
+
borderStyle: "single",
|
|
145
|
+
borderColor,
|
|
146
|
+
borderLeft: true,
|
|
147
|
+
borderRight: false,
|
|
148
|
+
borderTop: false,
|
|
149
|
+
borderBottom: false,
|
|
150
|
+
paddingLeft: 1,
|
|
151
|
+
flexDirection: "column",
|
|
152
|
+
width: "100%"
|
|
153
|
+
},
|
|
154
|
+
/* @__PURE__ */ React.createElement(MarkdownRenderer, { content: message.content, maxWidth: (process.stdout.columns || 120) - 6 })
|
|
155
|
+
) : null : /* @__PURE__ */ React.createElement(React.Fragment, null, textContent.trim() ? /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2 }, /* @__PURE__ */ React.createElement(Text, null, renderTextWithFileTags(textContent))) : null, fileBadges.length > 0 && /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "row", flexWrap: "wrap" }, fileBadges)));
|
|
152
156
|
});
|
|
157
|
+
export {
|
|
158
|
+
MessageDisplay,
|
|
159
|
+
countFilesInMessage
|
|
160
|
+
};
|
|
153
161
|
//# sourceMappingURL=MessageDisplay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageDisplay.js","sourceRoot":"","sources":["../../../src/ui/components/MessageDisplay.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/components/MessageDisplay.tsx"],"sourcesContent":["import React from 'react';\r\nimport { Box, Text, useInput } from 'ink';\r\nimport { Message } from '../../types/index.js';\r\nimport { ToolExecutionMessage } from './ToolExecutionMessage.js';\r\nimport { MarkdownRenderer } from './MarkdownRenderer.js';\r\nimport { ConnectionStatusMessage } from './ConnectionStatusMessage.js';\r\n\r\ninterface MessageDisplayProps {\r\n message: Message;\r\n /** Total files in messages before this one (for global numbering) */\r\n fileCountBefore?: number;\r\n}\r\n\r\n/**\r\n * Parse [IMAGE: ...] and [FILE: ...] markers from content\r\n * Also handles uploading state (gs://uploading) and failed uploads (upload failed)\r\n * Returns { textContent: string without markers, files: array of { type, format } }\r\n */\r\nfunction parseFileMarkers(content: string): { textContent: string; files: Array<{ type: string; format: string }> } {\r\n // Pattern to match [IMAGE: filename (gs://...)] or [FILE: filename (upload failed...)] or [FILE: ... (gs://uploading)]\r\n const fileMarkerRegex = /\\[(IMAGE|FILE):\\s*([^\\]]+?)\\s*\\((gs:\\/\\/[^\\)]+|upload failed[^\\)]*|uploading[^\\)]*)\\)\\]/g;\r\n const files: Array<{ type: string; format: string }> = [];\r\n\r\n let match;\r\n while ((match = fileMarkerRegex.exec(content)) !== null) {\r\n const type = match[1]; // IMAGE or FILE\r\n const filename = match[2].trim();\r\n // Extract extension from filename\r\n const ext = filename.split('.').pop()?.toLowerCase() || 'file';\r\n files.push({ type, format: ext });\r\n }\r\n\r\n // Remove markers from content\r\n let textContent = content\r\n .replace(/\\[(IMAGE|FILE):\\s*([^\\]]+?)\\s*\\((gs:\\/\\/[^\\)]+|upload failed[^\\)]*|uploading[^\\)]*)\\)\\]/g, '')\r\n .trim();\r\n\r\n return {\r\n textContent,\r\n files\r\n };\r\n}\r\n\r\n/**\r\n * Count files in a message content\r\n */\r\nexport function countFilesInMessage(content: string): number {\r\n const fileMarkerMatches = content.match(/\\[(IMAGE|FILE):\\s*[^\\]]+?\\s*\\((gs:\\/\\/[^\\)]+|upload failed[^\\)]*|uploading[^\\)]*)\\)\\]/g) || [];\r\n return fileMarkerMatches.length;\r\n}\r\n\r\n/**\r\n * File attachment badge component\r\n * Shows a styled box with file number and format\r\n */\r\nconst FileAttachmentBadge: React.FC<{ fileNumber: number; type: string; format: string }> = ({ fileNumber, type, format }) => {\r\n const label = type === 'IMAGE' ? 'Image' : 'File';\r\n return (\r\n <Box\r\n borderStyle=\"round\"\r\n borderColor=\"#555555\"\r\n paddingX={1}\r\n marginRight={1}\r\n marginTop={1}\r\n >\r\n <Text color=\"#aaaaaa\">{label} {fileNumber} </Text>\r\n <Text color=\"#666666\">[{format}]</Text>\r\n </Box>\r\n );\r\n};\r\n\r\n/**\r\n * Render text content, highlighting @file-tag tokens in cyan so they stand\r\n * out the same way they do in the input bar.\r\n */\r\nfunction renderTextWithFileTags(text: string): React.ReactNode[] {\r\n const tagRegex = /(@[^\\s@]+)/g;\r\n const parts: React.ReactNode[] = [];\r\n let lastIndex = 0;\r\n let match: RegExpExecArray | null;\r\n let key = 0;\r\n\r\n while ((match = tagRegex.exec(text)) !== null) {\r\n if (match.index > lastIndex) {\r\n parts.push(\r\n <Text key={key++} color=\"#ffffff\">{text.slice(lastIndex, match.index)}</Text>\r\n );\r\n }\r\n parts.push(\r\n <Text key={key++} color=\"#00ccff\" bold>{match[1]}</Text>\r\n );\r\n lastIndex = match.index + match[1].length;\r\n }\r\n\r\n if (lastIndex < text.length) {\r\n parts.push(\r\n <Text key={key++} color=\"#ffffff\">{text.slice(lastIndex)}</Text>\r\n );\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nexport const MessageDisplay: React.FC<MessageDisplayProps> = React.memo(({\r\n message,\r\n fileCountBefore = 0\r\n}) => {\r\n const [selectedOption, setSelectedOption] = React.useState<number>(0);\r\n const [isApproved, setIsApproved] = React.useState<boolean | null>(null);\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 // Handle approval input\r\n useInput((input, key) => {\r\n if (!message.approval || isApproved !== null) return;\r\n\r\n if (key.upArrow) {\r\n setSelectedOption(0);\r\n } else if (key.downArrow) {\r\n setSelectedOption(1);\r\n } else if (key.return) {\r\n const approved = selectedOption === 0;\r\n setIsApproved(approved);\r\n message.approval.resolve(approved);\r\n }\r\n }, { isActive: message.approval !== undefined && isApproved === null });\r\n\r\n // Render tool execution message using specialized component\r\n if (message.toolExecution) {\r\n return <ToolExecutionMessage message={message} />;\r\n }\r\n\r\n // Render connection status message using specialized component\r\n if (message.connectionStatus) {\r\n return <ConnectionStatusMessage status={message.connectionStatus} />;\r\n }\r\n\r\n // Approval requests should never be in message history\r\n // They are handled by ApprovalSection component that replaces the input bar\r\n if (message.approval) {\r\n return null;\r\n }\r\n\r\n // Skip rendering empty assistant messages that have no meaningful content\r\n // This prevents blank space from appearing above tool execution messages\r\n // (especially in WSL mode where tools take longer and show 'executing' state)\r\n if (message.role === 'assistant' &&\r\n !message.content.trim() &&\r\n message.thinkingDuration === undefined) {\r\n return null;\r\n }\r\n\r\n // Determine border color based on message type\r\n const getBorderColor = () => {\r\n if (message.isCommandMode) {\r\n return message.role === 'assistant' ? '#00cc66' : '#00ccff';\r\n }\r\n return message.role === 'assistant' ? '#00ccff' : '#666666';\r\n };\r\n\r\n const borderColor = getBorderColor();\r\n\r\n // Parse markers for user messages (only in AI mode, not command/shell mode)\r\n const { textContent, files } = message.role === 'user' && !message.isCommandMode\r\n ? parseFileMarkers(message.content)\r\n : { textContent: message.content, files: [] };\r\n\r\n // Generate file badges with global numbering (fileCountBefore + i + 1)\r\n const fileBadges = files.map((file, i) => (\r\n <FileAttachmentBadge\r\n key={`file-${message.id}-${i}`}\r\n fileNumber={fileCountBefore + i + 1}\r\n type={file.type}\r\n format={file.format}\r\n />\r\n ));\r\n\r\n // Regular message rendering\r\n return (\r\n <Box flexDirection=\"column\" marginBottom={1}>\r\n {!message.isSpacer && (\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\r\n {/* Display thinking duration at the TOP for completed messages */}\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 {/* Render content with left border for AI responses - only if there's content */}\r\n {message.role === 'assistant' ? (\r\n message.content.trim() ? (\r\n <Box\r\n borderStyle=\"single\"\r\n borderColor={borderColor}\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 width=\"100%\"\r\n >\r\n <MarkdownRenderer content={message.content} maxWidth={(process.stdout.columns || 120) - 6} />\r\n </Box>\r\n ) : null\r\n ) : (\r\n <>\r\n {/* User message text (without file markers) */}\r\n {textContent.trim() ? (\r\n <Box paddingLeft={2}>\r\n <Text>{renderTextWithFileTags(textContent)}</Text>\r\n </Box>\r\n ) : null}\r\n\r\n {/* File attachment badges */}\r\n {fileBadges.length > 0 && (\r\n <Box paddingLeft={2} flexDirection=\"row\" flexWrap=\"wrap\">\r\n {fileBadges}\r\n </Box>\r\n )}\r\n </>\r\n )}\r\n </Box>\r\n );\r\n});\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,69 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Displays AI monitoring messages in the lower half of the screen during
|
|
5
|
-
* agent-controlled shell mode. Shows thinking indicators, tool calls,
|
|
6
|
-
* and text outputs.
|
|
7
|
-
*/
|
|
8
|
-
import React from 'react';
|
|
9
|
-
import { Box, Text } from 'ink';
|
|
10
|
-
import Spinner from 'ink-spinner';
|
|
11
|
-
/**
|
|
12
|
-
* Render a single monitoring message
|
|
13
|
-
*/
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import Spinner from "ink-spinner";
|
|
14
4
|
const MonitorMessageItem = ({ message }) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
case 'tool_call':
|
|
30
|
-
return (React.createElement(Box, { marginY: 0 },
|
|
31
|
-
React.createElement(Text, { color: "#00ccff" }, "\u26A1 "),
|
|
32
|
-
React.createElement(Text, { color: "#00ccff" }, message.content)));
|
|
33
|
-
case 'input_sent':
|
|
34
|
-
return (React.createElement(Box, { marginY: 0 },
|
|
35
|
-
React.createElement(Text, { color: "#00cc66" }, "\u2192 "),
|
|
36
|
-
React.createElement(Text, { color: "#00cc66" }, message.content)));
|
|
37
|
-
case 'text':
|
|
38
|
-
default:
|
|
39
|
-
return (React.createElement(Box, { marginY: 0 },
|
|
40
|
-
React.createElement(Text, null, message.content)));
|
|
41
|
-
}
|
|
5
|
+
switch (message.type) {
|
|
6
|
+
case "thinking":
|
|
7
|
+
if (message.isAnswered) {
|
|
8
|
+
return /* @__PURE__ */ React.createElement(Box, { marginY: 0 }, /* @__PURE__ */ React.createElement(Text, { color: "#00cc66" }, "\u2713 "), /* @__PURE__ */ React.createElement(Text, { color: "#00cc66" }, message.content));
|
|
9
|
+
}
|
|
10
|
+
return /* @__PURE__ */ React.createElement(Box, { marginY: 0 }, /* @__PURE__ */ React.createElement(Text, { color: "#ffaa00" }, /* @__PURE__ */ React.createElement(Spinner, { type: "dots" })), /* @__PURE__ */ React.createElement(Text, { color: "#ffaa00", dimColor: true }, " ", message.content));
|
|
11
|
+
case "tool_call":
|
|
12
|
+
return /* @__PURE__ */ React.createElement(Box, { marginY: 0 }, /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, "\u26A1 "), /* @__PURE__ */ React.createElement(Text, { color: "#00ccff" }, message.content));
|
|
13
|
+
case "input_sent":
|
|
14
|
+
return /* @__PURE__ */ React.createElement(Box, { marginY: 0 }, /* @__PURE__ */ React.createElement(Text, { color: "#00cc66" }, "\u2192 "), /* @__PURE__ */ React.createElement(Text, { color: "#00cc66" }, message.content));
|
|
15
|
+
case "text":
|
|
16
|
+
default:
|
|
17
|
+
return /* @__PURE__ */ React.createElement(Box, { marginY: 0 }, /* @__PURE__ */ React.createElement(Text, null, message.content));
|
|
18
|
+
}
|
|
42
19
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
20
|
+
const MonitorModeAIPanel = ({
|
|
21
|
+
messages,
|
|
22
|
+
maxHeight,
|
|
23
|
+
isActive
|
|
24
|
+
}) => {
|
|
25
|
+
if (!isActive) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const linesPerMessage = 2;
|
|
29
|
+
const maxMessages = Math.floor(maxHeight / linesPerMessage);
|
|
30
|
+
const visibleMessages = messages.slice(-maxMessages);
|
|
31
|
+
return /* @__PURE__ */ React.createElement(
|
|
32
|
+
Box,
|
|
33
|
+
{
|
|
34
|
+
flexDirection: "column",
|
|
35
|
+
borderStyle: "round",
|
|
36
|
+
borderColor: "#9945FF",
|
|
37
|
+
paddingX: 1,
|
|
38
|
+
height: maxHeight
|
|
39
|
+
},
|
|
40
|
+
/* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#9945FF", bold: true }, /* @__PURE__ */ React.createElement(Spinner, { type: "dots" }), " Agent Monitor"), /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, " - AI is controlling shell input")),
|
|
41
|
+
/* @__PURE__ */ React.createElement(Box, { flexDirection: "column", flexGrow: 1 }, visibleMessages.length === 0 ? /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, "Monitoring for input prompts...") : visibleMessages.map((msg) => /* @__PURE__ */ React.createElement(MonitorMessageItem, { key: msg.id, message: msg }))),
|
|
42
|
+
/* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "#666666", dimColor: true }, "Alt+I to disable agent control"))
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
var MonitorModeAIPanel_default = MonitorModeAIPanel;
|
|
46
|
+
export {
|
|
47
|
+
MonitorModeAIPanel,
|
|
48
|
+
MonitorModeAIPanel_default as default
|
|
67
49
|
};
|
|
68
|
-
export default MonitorModeAIPanel;
|
|
69
50
|
//# sourceMappingURL=MonitorModeAIPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/components/MonitorModeAIPanel.tsx"],"sourcesContent":["/**\r\n * Monitor Mode AI Panel Component\r\n * \r\n * Displays AI monitoring messages in the lower half of the screen during\r\n * agent-controlled shell mode. Shows thinking indicators, tool calls,\r\n * and text outputs.\r\n */\r\n\r\nimport React from 'react';\r\nimport { Box, Text } from 'ink';\r\nimport Spinner from 'ink-spinner';\r\nimport { MonitorMessage } from '../../services/monitored-shell-manager.js';\r\n\r\nexport interface MonitorModeAIPanelProps {\r\n messages: MonitorMessage[];\r\n maxHeight: number; // Maximum height in lines\r\n isActive: boolean;\r\n}\r\n\r\n/**\r\n * Render a single monitoring message\r\n */\r\nconst MonitorMessageItem: React.FC<{ message: MonitorMessage }> = ({ message }) => {\r\n switch (message.type) {\r\n case 'thinking':\r\n // Show tick if answered, spinner if still waiting\r\n if (message.isAnswered) {\r\n return (\r\n <Box marginY={0}>\r\n <Text color=\"#00cc66\">✓ </Text>\r\n <Text color=\"#00cc66\">{message.content}</Text>\r\n </Box>\r\n );\r\n }\r\n return (\r\n <Box marginY={0}>\r\n <Text color=\"#ffaa00\">\r\n <Spinner type=\"dots\" />\r\n </Text>\r\n <Text color=\"#ffaa00\" dimColor> {message.content}</Text>\r\n </Box>\r\n );\r\n\r\n case 'tool_call':\r\n return (\r\n <Box marginY={0}>\r\n <Text color=\"#00ccff\">⚡ </Text>\r\n <Text color=\"#00ccff\">{message.content}</Text>\r\n </Box>\r\n );\r\n\r\n case 'input_sent':\r\n return (\r\n <Box marginY={0}>\r\n <Text color=\"#00cc66\">→ </Text>\r\n <Text color=\"#00cc66\">{message.content}</Text>\r\n </Box>\r\n );\r\n\r\n case 'text':\r\n default:\r\n return (\r\n <Box marginY={0}>\r\n <Text>{message.content}</Text>\r\n </Box>\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Monitor Mode AI Panel\r\n * \r\n * Displays in the lower half of focus mode when agent control is enabled.\r\n * Shows only the messages that fit within the available height.\r\n */\r\nexport const MonitorModeAIPanel: React.FC<MonitorModeAIPanelProps> = ({\r\n messages,\r\n maxHeight,\r\n isActive\r\n}) => {\r\n if (!isActive) {\r\n return null;\r\n }\r\n\r\n // Calculate how many messages to show (estimate 1-2 lines per message)\r\n // Keep only the most recent messages that fit\r\n const linesPerMessage = 2;\r\n const maxMessages = Math.floor(maxHeight / linesPerMessage);\r\n const visibleMessages = messages.slice(-maxMessages);\r\n\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor=\"#9945FF\"\r\n paddingX={1}\r\n height={maxHeight}\r\n >\r\n {/* Header */}\r\n <Box marginBottom={1}>\r\n <Text color=\"#9945FF\" bold>\r\n <Spinner type=\"dots\" /> Agent Monitor\r\n </Text>\r\n <Text color=\"#666666\" dimColor> - AI is controlling shell input</Text>\r\n </Box>\r\n\r\n {/* Messages */}\r\n <Box flexDirection=\"column\" flexGrow={1}>\r\n {visibleMessages.length === 0 ? (\r\n <Text color=\"#666666\" dimColor>Monitoring for input prompts...</Text>\r\n ) : (\r\n visibleMessages.map((msg) => (\r\n <MonitorMessageItem key={msg.id} message={msg} />\r\n ))\r\n )}\r\n </Box>\r\n\r\n {/* Footer hint */}\r\n <Box marginTop={1}>\r\n <Text color=\"#666666\" dimColor>\r\n Alt+I to disable agent control\r\n </Text>\r\n </Box>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default MonitorModeAIPanel;\r\n"],"mappings":"AAQA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,OAAO,aAAa;AAYpB,MAAM,qBAA4D,CAAC,EAAE,QAAQ,MAAM;AAC/E,UAAQ,QAAQ,MAAM;AAAA,IAClB,KAAK;AAED,UAAI,QAAQ,YAAY;AACpB,eACI,oCAAC,OAAI,SAAS,KACV,oCAAC,QAAK,OAAM,aAAU,SAAE,GACxB,oCAAC,QAAK,OAAM,aAAW,QAAQ,OAAQ,CAC3C;AAAA,MAER;AACA,aACI,oCAAC,OAAI,SAAS,KACV,oCAAC,QAAK,OAAM,aACR,oCAAC,WAAQ,MAAK,QAAO,CACzB,GACA,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,KAAE,QAAQ,OAAQ,CACrD;AAAA,IAGR,KAAK;AACD,aACI,oCAAC,OAAI,SAAS,KACV,oCAAC,QAAK,OAAM,aAAU,SAAE,GACxB,oCAAC,QAAK,OAAM,aAAW,QAAQ,OAAQ,CAC3C;AAAA,IAGR,KAAK;AACD,aACI,oCAAC,OAAI,SAAS,KACV,oCAAC,QAAK,OAAM,aAAU,SAAE,GACxB,oCAAC,QAAK,OAAM,aAAW,QAAQ,OAAQ,CAC3C;AAAA,IAGR,KAAK;AAAA,IACL;AACI,aACI,oCAAC,OAAI,SAAS,KACV,oCAAC,YAAM,QAAQ,OAAQ,CAC3B;AAAA,EAEZ;AACJ;AAQO,MAAM,qBAAwD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,MAAI,CAAC,UAAU;AACX,WAAO;AAAA,EACX;AAIA,QAAM,kBAAkB;AACxB,QAAM,cAAc,KAAK,MAAM,YAAY,eAAe;AAC1D,QAAM,kBAAkB,SAAS,MAAM,CAAC,WAAW;AAEnD,SACI;AAAA,IAAC;AAAA;AAAA,MACG,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA;AAAA,IAGR,oCAAC,OAAI,cAAc,KACf,oCAAC,QAAK,OAAM,WAAU,MAAI,QACtB,oCAAC,WAAQ,MAAK,QAAO,GAAE,gBAC3B,GACA,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,kCAAgC,CACnE;AAAA,IAGA,oCAAC,OAAI,eAAc,UAAS,UAAU,KACjC,gBAAgB,WAAW,IACxB,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,iCAA+B,IAE9D,gBAAgB,IAAI,CAAC,QACjB,oCAAC,sBAAmB,KAAK,IAAI,IAAI,SAAS,KAAK,CAClD,CAET;AAAA,IAGA,oCAAC,OAAI,WAAW,KACZ,oCAAC,QAAK,OAAM,WAAU,UAAQ,QAAC,gCAE/B,CACJ;AAAA,EACJ;AAER;AAEA,IAAO,6BAAQ;","names":[]}
|