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,217 +1,168 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
*/
|
|
8
|
-
import { hasImage as clipboardHasImage, getImageBase64 as clipboardGetImageBase64 } from '@crosscopy/clipboard';
|
|
9
|
-
import clipboardFiles from 'clipboard-files';
|
|
10
|
-
import * as fs from 'fs';
|
|
11
|
-
import * as path from 'path';
|
|
12
|
-
import * as os from 'os';
|
|
13
|
-
import { logDebug, logError } from '../utils/logger.js';
|
|
14
|
-
// We no longer restrict to just IMAGE_EXTENSIONS. Any file is supported.
|
|
15
|
-
// However, we still have a list to guess generic mime types if not obvious.
|
|
16
|
-
/**
|
|
17
|
-
* Get files from clipboard (copied from file explorer)
|
|
18
|
-
*/
|
|
1
|
+
import { hasImage as clipboardHasImage, getImageBase64 as clipboardGetImageBase64 } from "@crosscopy/clipboard";
|
|
2
|
+
import clipboardFiles from "clipboard-files";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import * as os from "os";
|
|
6
|
+
import { logDebug, logError } from "../utils/logger.js";
|
|
19
7
|
function getClipboardFilesFromOS() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
logDebug(`Failed to read files from clipboard: ${error instanceof Error ? error.message : String(error)}`);
|
|
30
|
-
return [];
|
|
8
|
+
try {
|
|
9
|
+
const files = clipboardFiles.readFiles();
|
|
10
|
+
if (files && files.length > 0) {
|
|
11
|
+
logDebug(`Clipboard contains ${files.length} file(s): ${files.join(", ")}`);
|
|
12
|
+
return files;
|
|
31
13
|
}
|
|
14
|
+
return [];
|
|
15
|
+
} catch (error) {
|
|
16
|
+
logDebug(`Failed to read files from clipboard: ${error instanceof Error ? error.message : String(error)}`);
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
32
19
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// First check for raw image data (screenshots, etc.)
|
|
39
|
-
if (clipboardHasImage()) {
|
|
40
|
-
logDebug('Clipboard has raw image data');
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
// Then check for copied files
|
|
44
|
-
const files = getClipboardFilesFromOS();
|
|
45
|
-
if (files.length > 0) {
|
|
46
|
-
logDebug(`Clipboard has ${files.length} file(s)`);
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
return false;
|
|
20
|
+
async function hasClipboardFile() {
|
|
21
|
+
try {
|
|
22
|
+
if (clipboardHasImage()) {
|
|
23
|
+
logDebug("Clipboard has raw image data");
|
|
24
|
+
return true;
|
|
50
25
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
26
|
+
const files = getClipboardFilesFromOS();
|
|
27
|
+
if (files.length > 0) {
|
|
28
|
+
logDebug(`Clipboard has ${files.length} file(s)`);
|
|
29
|
+
return true;
|
|
54
30
|
}
|
|
31
|
+
return false;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
logError("Failed to check clipboard for files", error instanceof Error ? error : void 0);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
55
36
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Get MIME type from file extension
|
|
58
|
-
*/
|
|
59
37
|
function getMimeTypeFromExtension(filePath) {
|
|
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
|
-
|
|
38
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
39
|
+
const mimeTypes = {
|
|
40
|
+
".png": "image/png",
|
|
41
|
+
".jpg": "image/jpeg",
|
|
42
|
+
".jpeg": "image/jpeg",
|
|
43
|
+
".gif": "image/gif",
|
|
44
|
+
".bmp": "image/bmp",
|
|
45
|
+
".webp": "image/webp",
|
|
46
|
+
".ico": "image/x-icon",
|
|
47
|
+
".tiff": "image/tiff",
|
|
48
|
+
".tif": "image/tiff",
|
|
49
|
+
".svg": "image/svg+xml",
|
|
50
|
+
".pdf": "application/pdf",
|
|
51
|
+
".mp3": "audio/mpeg",
|
|
52
|
+
".wav": "audio/wav",
|
|
53
|
+
".flac": "audio/flac",
|
|
54
|
+
".mp4": "video/mp4",
|
|
55
|
+
".webm": "video/webm",
|
|
56
|
+
".mov": "video/quicktime",
|
|
57
|
+
".txt": "text/plain",
|
|
58
|
+
".md": "text/markdown",
|
|
59
|
+
".csv": "text/csv",
|
|
60
|
+
".json": "application/json"
|
|
61
|
+
};
|
|
62
|
+
return mimeTypes[ext] || "application/octet-stream";
|
|
85
63
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
* 1. Raw image data in clipboard (screenshots, copied from image editors)
|
|
92
|
-
* 2. Files copied from file explorer (up to 5 limit)
|
|
93
|
-
*/
|
|
94
|
-
export async function getClipboardFiles() {
|
|
64
|
+
async function getClipboardFiles() {
|
|
65
|
+
try {
|
|
66
|
+
logDebug("Starting clipboard file check...");
|
|
67
|
+
const clipboardFilesResult = [];
|
|
68
|
+
let hasRawImage = false;
|
|
95
69
|
try {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
try {
|
|
101
|
-
hasRawImage = clipboardHasImage();
|
|
102
|
-
logDebug(`clipboardHasImage() returned: ${hasRawImage}`);
|
|
103
|
-
}
|
|
104
|
-
catch (e) {
|
|
105
|
-
logDebug(`clipboardHasImage() threw error: ${e instanceof Error ? e.message : String(e)}`);
|
|
106
|
-
}
|
|
107
|
-
if (hasRawImage) {
|
|
108
|
-
logDebug('Image found in clipboard, attempting to get base64 data...');
|
|
109
|
-
// Get base64 image data from clipboard
|
|
110
|
-
let base64Data = null;
|
|
111
|
-
try {
|
|
112
|
-
base64Data = await clipboardGetImageBase64();
|
|
113
|
-
logDebug(`Got base64 data, length: ${base64Data ? base64Data.length : 0}`);
|
|
114
|
-
}
|
|
115
|
-
catch (e) {
|
|
116
|
-
logDebug(`clipboardGetImageBase64() threw error: ${e instanceof Error ? e.message : String(e)}`);
|
|
117
|
-
}
|
|
118
|
-
if (base64Data) {
|
|
119
|
-
// Determine MIME type (clipboard images are typically PNG)
|
|
120
|
-
const mimeType = 'image/png';
|
|
121
|
-
// Generate unique ID and filename
|
|
122
|
-
const id = `clipboard_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
123
|
-
const displayName = `clipboard_image_${Date.now()}.png`;
|
|
124
|
-
// Create temp directory for clipboard images
|
|
125
|
-
const tempDir = path.join(os.tmpdir(), 'centaurus-clipboard');
|
|
126
|
-
if (!fs.existsSync(tempDir)) {
|
|
127
|
-
fs.mkdirSync(tempDir, { recursive: true });
|
|
128
|
-
}
|
|
129
|
-
// Save to temp file
|
|
130
|
-
const tempPath = path.join(tempDir, displayName);
|
|
131
|
-
const imageBuffer = Buffer.from(base64Data, 'base64');
|
|
132
|
-
fs.writeFileSync(tempPath, imageBuffer);
|
|
133
|
-
logDebug(`Clipboard image saved to: ${tempPath}, size: ${imageBuffer.length} bytes`);
|
|
134
|
-
return [{
|
|
135
|
-
id,
|
|
136
|
-
base64Data,
|
|
137
|
-
mimeType,
|
|
138
|
-
tempPath,
|
|
139
|
-
displayName,
|
|
140
|
-
sizeBytes: imageBuffer.length,
|
|
141
|
-
}];
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// If no raw image data, try to get files from clipboard
|
|
145
|
-
const systemFiles = getClipboardFilesFromOS();
|
|
146
|
-
if (systemFiles.length > 0) {
|
|
147
|
-
// Limit to 5 files maximum to prevent overloading
|
|
148
|
-
const filesToProcess = systemFiles.slice(0, 5);
|
|
149
|
-
logDebug(`Using ${filesToProcess.length} file(s) from clipboard (out of ${systemFiles.length} total)`);
|
|
150
|
-
for (const filePath of filesToProcess) {
|
|
151
|
-
try {
|
|
152
|
-
// Read the file
|
|
153
|
-
const fileBuffer = fs.readFileSync(filePath);
|
|
154
|
-
const base64Data = fileBuffer.toString('base64');
|
|
155
|
-
const mimeType = getMimeTypeFromExtension(filePath);
|
|
156
|
-
const originalName = path.basename(filePath);
|
|
157
|
-
// Generate unique ID and filename with original extension
|
|
158
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
159
|
-
const id = `clipboard_file_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
160
|
-
const displayName = `clipboard_file_${Date.now()}_${originalName}`; // Prepend so it's unique but keep real name
|
|
161
|
-
// Create temp directory for clipboard files
|
|
162
|
-
const tempDir = path.join(os.tmpdir(), 'centaurus-clipboard');
|
|
163
|
-
if (!fs.existsSync(tempDir)) {
|
|
164
|
-
fs.mkdirSync(tempDir, { recursive: true });
|
|
165
|
-
}
|
|
166
|
-
// Copy to temp file (preserving original format)
|
|
167
|
-
const tempPath = path.join(tempDir, displayName);
|
|
168
|
-
fs.writeFileSync(tempPath, fileBuffer);
|
|
169
|
-
logDebug(`Clipboard file copied to: ${tempPath}, size: ${fileBuffer.length} bytes, original: ${originalName}`);
|
|
170
|
-
clipboardFilesResult.push({
|
|
171
|
-
id,
|
|
172
|
-
base64Data,
|
|
173
|
-
mimeType,
|
|
174
|
-
tempPath,
|
|
175
|
-
displayName,
|
|
176
|
-
sizeBytes: fileBuffer.length,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
catch (fileError) {
|
|
180
|
-
logError(`Failed to read file from clipboard: ${filePath}`, fileError instanceof Error ? fileError : undefined);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return clipboardFilesResult;
|
|
184
|
-
}
|
|
185
|
-
logDebug('No files found in clipboard (neither raw data nor files)');
|
|
186
|
-
return [];
|
|
70
|
+
hasRawImage = clipboardHasImage();
|
|
71
|
+
logDebug(`clipboardHasImage() returned: ${hasRawImage}`);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
logDebug(`clipboardHasImage() threw error: ${e instanceof Error ? e.message : String(e)}`);
|
|
187
74
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
75
|
+
if (hasRawImage) {
|
|
76
|
+
logDebug("Image found in clipboard, attempting to get base64 data...");
|
|
77
|
+
let base64Data = null;
|
|
78
|
+
try {
|
|
79
|
+
base64Data = await clipboardGetImageBase64();
|
|
80
|
+
logDebug(`Got base64 data, length: ${base64Data ? base64Data.length : 0}`);
|
|
81
|
+
} catch (e) {
|
|
82
|
+
logDebug(`clipboardGetImageBase64() threw error: ${e instanceof Error ? e.message : String(e)}`);
|
|
83
|
+
}
|
|
84
|
+
if (base64Data) {
|
|
85
|
+
const mimeType = "image/png";
|
|
86
|
+
const id = `clipboard_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
87
|
+
const displayName = `clipboard_image_${Date.now()}.png`;
|
|
88
|
+
const tempDir = path.join(os.tmpdir(), "centaurus-clipboard");
|
|
89
|
+
if (!fs.existsSync(tempDir)) {
|
|
90
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
91
|
+
}
|
|
92
|
+
const tempPath = path.join(tempDir, displayName);
|
|
93
|
+
const imageBuffer = Buffer.from(base64Data, "base64");
|
|
94
|
+
fs.writeFileSync(tempPath, imageBuffer);
|
|
95
|
+
logDebug(`Clipboard image saved to: ${tempPath}, size: ${imageBuffer.length} bytes`);
|
|
96
|
+
return [{
|
|
97
|
+
id,
|
|
98
|
+
base64Data,
|
|
99
|
+
mimeType,
|
|
100
|
+
tempPath,
|
|
101
|
+
displayName,
|
|
102
|
+
sizeBytes: imageBuffer.length
|
|
103
|
+
}];
|
|
104
|
+
}
|
|
191
105
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
106
|
+
const systemFiles = getClipboardFilesFromOS();
|
|
107
|
+
if (systemFiles.length > 0) {
|
|
108
|
+
const filesToProcess = systemFiles.slice(0, 5);
|
|
109
|
+
logDebug(`Using ${filesToProcess.length} file(s) from clipboard (out of ${systemFiles.length} total)`);
|
|
110
|
+
for (const filePath of filesToProcess) {
|
|
111
|
+
try {
|
|
112
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
113
|
+
const base64Data = fileBuffer.toString("base64");
|
|
114
|
+
const mimeType = getMimeTypeFromExtension(filePath);
|
|
115
|
+
const originalName = path.basename(filePath);
|
|
116
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
117
|
+
const id = `clipboard_file_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
118
|
+
const displayName = `clipboard_file_${Date.now()}_${originalName}`;
|
|
119
|
+
const tempDir = path.join(os.tmpdir(), "centaurus-clipboard");
|
|
120
|
+
if (!fs.existsSync(tempDir)) {
|
|
121
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
122
|
+
}
|
|
123
|
+
const tempPath = path.join(tempDir, displayName);
|
|
124
|
+
fs.writeFileSync(tempPath, fileBuffer);
|
|
125
|
+
logDebug(`Clipboard file copied to: ${tempPath}, size: ${fileBuffer.length} bytes, original: ${originalName}`);
|
|
126
|
+
clipboardFilesResult.push({
|
|
127
|
+
id,
|
|
128
|
+
base64Data,
|
|
129
|
+
mimeType,
|
|
130
|
+
tempPath,
|
|
131
|
+
displayName,
|
|
132
|
+
sizeBytes: fileBuffer.length
|
|
133
|
+
});
|
|
134
|
+
} catch (fileError) {
|
|
135
|
+
logError(`Failed to read file from clipboard: ${filePath}`, fileError instanceof Error ? fileError : void 0);
|
|
201
136
|
}
|
|
137
|
+
}
|
|
138
|
+
return clipboardFilesResult;
|
|
202
139
|
}
|
|
203
|
-
|
|
204
|
-
|
|
140
|
+
logDebug("No files found in clipboard (neither raw data nor files)");
|
|
141
|
+
return [];
|
|
142
|
+
} catch (error) {
|
|
143
|
+
logError("Failed to get clipboard files", error instanceof Error ? error : void 0);
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function cleanupClipboardFile(tempPath) {
|
|
148
|
+
try {
|
|
149
|
+
if (fs.existsSync(tempPath)) {
|
|
150
|
+
fs.unlinkSync(tempPath);
|
|
151
|
+
logDebug(`Cleaned up clipboard temp file: ${tempPath}`);
|
|
205
152
|
}
|
|
153
|
+
} catch (error) {
|
|
154
|
+
logError("Failed to cleanup clipboard temp file", error instanceof Error ? error : void 0);
|
|
155
|
+
}
|
|
206
156
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if (bytes < 1024)
|
|
212
|
-
return `${bytes} B`;
|
|
213
|
-
if (bytes < 1024 * 1024)
|
|
214
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
215
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
157
|
+
function formatFileSize(bytes) {
|
|
158
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
159
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
160
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
216
161
|
}
|
|
162
|
+
export {
|
|
163
|
+
cleanupClipboardFile,
|
|
164
|
+
formatFileSize,
|
|
165
|
+
getClipboardFiles,
|
|
166
|
+
hasClipboardFile
|
|
167
|
+
};
|
|
217
168
|
//# sourceMappingURL=clipboard-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard-service.js","sourceRoot":"","sources":["../../src/services/clipboard-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/services/clipboard-service.ts"],"sourcesContent":["/**\r\n * Clipboard Service\r\n * \r\n * Cross-platform clipboard access for images using @crosscopy/clipboard.\r\n * Also supports detecting image files copied from file explorer using clipboard-files.\r\n * Supports Windows, macOS, and Linux.\r\n */\r\n\r\nimport { hasImage as clipboardHasImage, getImageBase64 as clipboardGetImageBase64 } from '@crosscopy/clipboard';\r\nimport clipboardFiles from 'clipboard-files';\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as os from 'os';\r\nimport { logDebug, logError } from '../utils/logger.js';\r\n\r\n// We no longer restrict to just IMAGE_EXTENSIONS. Any file is supported.\r\n// However, we still have a list to guess generic mime types if not obvious.\r\n\r\n/**\r\n * Get files from clipboard (copied from file explorer)\r\n */\r\nfunction getClipboardFilesFromOS(): string[] {\r\n try {\r\n const files = clipboardFiles.readFiles();\r\n if (files && files.length > 0) {\r\n logDebug(`Clipboard contains ${files.length} file(s): ${files.join(', ')}`);\r\n return files;\r\n }\r\n return [];\r\n } catch (error) {\r\n logDebug(`Failed to read files from clipboard: ${error instanceof Error ? error.message : String(error)}`);\r\n return [];\r\n }\r\n}\r\n\r\nexport interface ClipboardFile {\r\n id: string;\r\n base64Data: string;\r\n mimeType: string;\r\n tempPath: string;\r\n displayName: string;\r\n sizeBytes: number;\r\n}\r\n\r\n/**\r\n * Check if the clipboard contains a file (either raw image data or copied files)\r\n */\r\nexport async function hasClipboardFile(): Promise<boolean> {\r\n try {\r\n // First check for raw image data (screenshots, etc.)\r\n if (clipboardHasImage()) {\r\n logDebug('Clipboard has raw image data');\r\n return true;\r\n }\r\n\r\n // Then check for copied files\r\n const files = getClipboardFilesFromOS();\r\n if (files.length > 0) {\r\n logDebug(`Clipboard has ${files.length} file(s)`);\r\n return true;\r\n }\r\n\r\n return false;\r\n } catch (error) {\r\n logError('Failed to check clipboard for files', error instanceof Error ? error : undefined);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Get MIME type from file extension\r\n */\r\nfunction getMimeTypeFromExtension(filePath: string): string {\r\n const ext = path.extname(filePath).toLowerCase();\r\n const mimeTypes: { [key: string]: string } = {\r\n '.png': 'image/png',\r\n '.jpg': 'image/jpeg',\r\n '.jpeg': 'image/jpeg',\r\n '.gif': 'image/gif',\r\n '.bmp': 'image/bmp',\r\n '.webp': 'image/webp',\r\n '.ico': 'image/x-icon',\r\n '.tiff': 'image/tiff',\r\n '.tif': 'image/tiff',\r\n '.svg': 'image/svg+xml',\r\n '.pdf': 'application/pdf',\r\n '.mp3': 'audio/mpeg',\r\n '.wav': 'audio/wav',\r\n '.flac': 'audio/flac',\r\n '.mp4': 'video/mp4',\r\n '.webm': 'video/webm',\r\n '.mov': 'video/quicktime',\r\n '.txt': 'text/plain',\r\n '.md': 'text/markdown',\r\n '.csv': 'text/csv',\r\n '.json': 'application/json'\r\n };\r\n return mimeTypes[ext] || 'application/octet-stream';\r\n}\r\n\r\n/**\r\n * Get files from clipboard and save to temp files\r\n * Returns array of ClipboardFiles with base64 data and temp file paths\r\n * \r\n * Supports two modes:\r\n * 1. Raw image data in clipboard (screenshots, copied from image editors)\r\n * 2. Files copied from file explorer (up to 5 limit)\r\n */\r\nexport async function getClipboardFiles(): Promise<ClipboardFile[]> {\r\n try {\r\n logDebug('Starting clipboard file check...');\r\n const clipboardFilesResult: ClipboardFile[] = [];\r\n\r\n // First, try to get raw image data (screenshots, etc.)\r\n let hasRawImage = false;\r\n try {\r\n hasRawImage = clipboardHasImage();\r\n logDebug(`clipboardHasImage() returned: ${hasRawImage}`);\r\n } catch (e) {\r\n logDebug(`clipboardHasImage() threw error: ${e instanceof Error ? e.message : String(e)}`);\r\n }\r\n\r\n if (hasRawImage) {\r\n logDebug('Image found in clipboard, attempting to get base64 data...');\r\n\r\n // Get base64 image data from clipboard\r\n let base64Data: string | null = null;\r\n try {\r\n base64Data = await clipboardGetImageBase64();\r\n logDebug(`Got base64 data, length: ${base64Data ? base64Data.length : 0}`);\r\n } catch (e) {\r\n logDebug(`clipboardGetImageBase64() threw error: ${e instanceof Error ? e.message : String(e)}`);\r\n }\r\n\r\n if (base64Data) {\r\n // Determine MIME type (clipboard images are typically PNG)\r\n const mimeType = 'image/png';\r\n\r\n // Generate unique ID and filename\r\n const id = `clipboard_${Date.now()}_${Math.random().toString(36).substring(7)}`;\r\n const displayName = `clipboard_image_${Date.now()}.png`;\r\n\r\n // Create temp directory for clipboard images\r\n const tempDir = path.join(os.tmpdir(), 'centaurus-clipboard');\r\n if (!fs.existsSync(tempDir)) {\r\n fs.mkdirSync(tempDir, { recursive: true });\r\n }\r\n\r\n // Save to temp file\r\n const tempPath = path.join(tempDir, displayName);\r\n const imageBuffer = Buffer.from(base64Data, 'base64');\r\n fs.writeFileSync(tempPath, imageBuffer);\r\n\r\n logDebug(`Clipboard image saved to: ${tempPath}, size: ${imageBuffer.length} bytes`);\r\n\r\n return [{\r\n id,\r\n base64Data,\r\n mimeType,\r\n tempPath,\r\n displayName,\r\n sizeBytes: imageBuffer.length,\r\n }];\r\n }\r\n }\r\n\r\n // If no raw image data, try to get files from clipboard\r\n const systemFiles = getClipboardFilesFromOS();\r\n if (systemFiles.length > 0) {\r\n // Limit to 5 files maximum to prevent overloading\r\n const filesToProcess = systemFiles.slice(0, 5);\r\n logDebug(`Using ${filesToProcess.length} file(s) from clipboard (out of ${systemFiles.length} total)`);\r\n\r\n for (const filePath of filesToProcess) {\r\n try {\r\n // Read the file\r\n const fileBuffer = fs.readFileSync(filePath);\r\n const base64Data = fileBuffer.toString('base64');\r\n const mimeType = getMimeTypeFromExtension(filePath);\r\n const originalName = path.basename(filePath);\r\n\r\n // Generate unique ID and filename with original extension\r\n const ext = path.extname(filePath).toLowerCase();\r\n const id = `clipboard_file_${Date.now()}_${Math.random().toString(36).substring(7)}`;\r\n const displayName = `clipboard_file_${Date.now()}_${originalName}`; // Prepend so it's unique but keep real name\r\n\r\n // Create temp directory for clipboard files\r\n const tempDir = path.join(os.tmpdir(), 'centaurus-clipboard');\r\n if (!fs.existsSync(tempDir)) {\r\n fs.mkdirSync(tempDir, { recursive: true });\r\n }\r\n\r\n // Copy to temp file (preserving original format)\r\n const tempPath = path.join(tempDir, displayName);\r\n fs.writeFileSync(tempPath, fileBuffer);\r\n\r\n logDebug(`Clipboard file copied to: ${tempPath}, size: ${fileBuffer.length} bytes, original: ${originalName}`);\r\n\r\n clipboardFilesResult.push({\r\n id,\r\n base64Data,\r\n mimeType,\r\n tempPath,\r\n displayName,\r\n sizeBytes: fileBuffer.length,\r\n });\r\n } catch (fileError) {\r\n logError(`Failed to read file from clipboard: ${filePath}`, fileError instanceof Error ? fileError : undefined);\r\n }\r\n }\r\n return clipboardFilesResult;\r\n }\r\n\r\n logDebug('No files found in clipboard (neither raw data nor files)');\r\n return [];\r\n } catch (error) {\r\n logError('Failed to get clipboard files', error instanceof Error ? error : undefined);\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Clean up temp clipboard files\r\n */\r\nexport function cleanupClipboardFile(tempPath: string): void {\r\n try {\r\n if (fs.existsSync(tempPath)) {\r\n fs.unlinkSync(tempPath);\r\n logDebug(`Cleaned up clipboard temp file: ${tempPath}`);\r\n }\r\n } catch (error) {\r\n logError('Failed to cleanup clipboard temp file', error instanceof Error ? error : undefined);\r\n }\r\n}\r\n\r\n/**\r\n * Format file size for display\r\n */\r\nexport function formatFileSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n"],"mappings":"AAQA,SAAS,YAAY,mBAAmB,kBAAkB,+BAA+B;AACzF,OAAO,oBAAoB;AAC3B,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,SAAS,UAAU,gBAAgB;AAQnC,SAAS,0BAAoC;AACzC,MAAI;AACA,UAAM,QAAQ,eAAe,UAAU;AACvC,QAAI,SAAS,MAAM,SAAS,GAAG;AAC3B,eAAS,sBAAsB,MAAM,MAAM,aAAa,MAAM,KAAK,IAAI,CAAC,EAAE;AAC1E,aAAO;AAAA,IACX;AACA,WAAO,CAAC;AAAA,EACZ,SAAS,OAAO;AACZ,aAAS,wCAAwC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AACzG,WAAO,CAAC;AAAA,EACZ;AACJ;AAcA,eAAsB,mBAAqC;AACvD,MAAI;AAEA,QAAI,kBAAkB,GAAG;AACrB,eAAS,8BAA8B;AACvC,aAAO;AAAA,IACX;AAGA,UAAM,QAAQ,wBAAwB;AACtC,QAAI,MAAM,SAAS,GAAG;AAClB,eAAS,iBAAiB,MAAM,MAAM,UAAU;AAChD,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX,SAAS,OAAO;AACZ,aAAS,uCAAuC,iBAAiB,QAAQ,QAAQ,MAAS;AAC1F,WAAO;AAAA,EACX;AACJ;AAKA,SAAS,yBAAyB,UAA0B;AACxD,QAAM,MAAM,KAAK,QAAQ,QAAQ,EAAE,YAAY;AAC/C,QAAM,YAAuC;AAAA,IACzC,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EACb;AACA,SAAO,UAAU,GAAG,KAAK;AAC7B;AAUA,eAAsB,oBAA8C;AAChE,MAAI;AACA,aAAS,kCAAkC;AAC3C,UAAM,uBAAwC,CAAC;AAG/C,QAAI,cAAc;AAClB,QAAI;AACA,oBAAc,kBAAkB;AAChC,eAAS,iCAAiC,WAAW,EAAE;AAAA,IAC3D,SAAS,GAAG;AACR,eAAS,oCAAoC,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,IAC7F;AAEA,QAAI,aAAa;AACb,eAAS,4DAA4D;AAGrE,UAAI,aAA4B;AAChC,UAAI;AACA,qBAAa,MAAM,wBAAwB;AAC3C,iBAAS,4BAA4B,aAAa,WAAW,SAAS,CAAC,EAAE;AAAA,MAC7E,SAAS,GAAG;AACR,iBAAS,0CAA0C,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,MACnG;AAEA,UAAI,YAAY;AAEZ,cAAM,WAAW;AAGjB,cAAM,KAAK,aAAa,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAC7E,cAAM,cAAc,mBAAmB,KAAK,IAAI,CAAC;AAGjD,cAAM,UAAU,KAAK,KAAK,GAAG,OAAO,GAAG,qBAAqB;AAC5D,YAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AACzB,aAAG,UAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,QAC7C;AAGA,cAAM,WAAW,KAAK,KAAK,SAAS,WAAW;AAC/C,cAAM,cAAc,OAAO,KAAK,YAAY,QAAQ;AACpD,WAAG,cAAc,UAAU,WAAW;AAEtC,iBAAS,6BAA6B,QAAQ,WAAW,YAAY,MAAM,QAAQ;AAEnF,eAAO,CAAC;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,YAAY;AAAA,QAC3B,CAAC;AAAA,MACL;AAAA,IACJ;AAGA,UAAM,cAAc,wBAAwB;AAC5C,QAAI,YAAY,SAAS,GAAG;AAExB,YAAM,iBAAiB,YAAY,MAAM,GAAG,CAAC;AAC7C,eAAS,SAAS,eAAe,MAAM,mCAAmC,YAAY,MAAM,SAAS;AAErG,iBAAW,YAAY,gBAAgB;AACnC,YAAI;AAEA,gBAAM,aAAa,GAAG,aAAa,QAAQ;AAC3C,gBAAM,aAAa,WAAW,SAAS,QAAQ;AAC/C,gBAAM,WAAW,yBAAyB,QAAQ;AAClD,gBAAM,eAAe,KAAK,SAAS,QAAQ;AAG3C,gBAAM,MAAM,KAAK,QAAQ,QAAQ,EAAE,YAAY;AAC/C,gBAAM,KAAK,kBAAkB,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAClF,gBAAM,cAAc,kBAAkB,KAAK,IAAI,CAAC,IAAI,YAAY;AAGhE,gBAAM,UAAU,KAAK,KAAK,GAAG,OAAO,GAAG,qBAAqB;AAC5D,cAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AACzB,eAAG,UAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,UAC7C;AAGA,gBAAM,WAAW,KAAK,KAAK,SAAS,WAAW;AAC/C,aAAG,cAAc,UAAU,UAAU;AAErC,mBAAS,6BAA6B,QAAQ,WAAW,WAAW,MAAM,qBAAqB,YAAY,EAAE;AAE7G,+BAAqB,KAAK;AAAA,YACtB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW,WAAW;AAAA,UAC1B,CAAC;AAAA,QACL,SAAS,WAAW;AAChB,mBAAS,uCAAuC,QAAQ,IAAI,qBAAqB,QAAQ,YAAY,MAAS;AAAA,QAClH;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAEA,aAAS,0DAA0D;AACnE,WAAO,CAAC;AAAA,EACZ,SAAS,OAAO;AACZ,aAAS,iCAAiC,iBAAiB,QAAQ,QAAQ,MAAS;AACpF,WAAO,CAAC;AAAA,EACZ;AACJ;AAKO,SAAS,qBAAqB,UAAwB;AACzD,MAAI;AACA,QAAI,GAAG,WAAW,QAAQ,GAAG;AACzB,SAAG,WAAW,QAAQ;AACtB,eAAS,mCAAmC,QAAQ,EAAE;AAAA,IAC1D;AAAA,EACJ,SAAS,OAAO;AACZ,aAAS,yCAAyC,iBAAiB,QAAQ,QAAQ,MAAS;AAAA,EAChG;AACJ;AAKO,SAAS,eAAe,OAAuB;AAClD,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK;AACjC,MAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAC5D,SAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC,CAAC;AAChD;","names":[]}
|
|
@@ -1,72 +1,70 @@
|
|
|
1
|
-
import dns from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import dns from "dns/promises";
|
|
2
|
+
class ConnectivityManager {
|
|
3
|
+
static instance;
|
|
4
|
+
isConnected = true;
|
|
5
|
+
checkInterval = null;
|
|
6
|
+
listeners = [];
|
|
7
|
+
lastCheck = 0;
|
|
8
|
+
CACHE_TTL_MS = 2e3;
|
|
9
|
+
// Cache result for 2 seoncds
|
|
10
|
+
POLLING_INTERVAL_MS = 5e3;
|
|
11
|
+
// Poll every 5 seconds
|
|
12
|
+
constructor() {
|
|
13
|
+
this.checkConnection();
|
|
14
|
+
this.startPolling();
|
|
15
|
+
}
|
|
16
|
+
static getInstance() {
|
|
17
|
+
if (!ConnectivityManager.instance) {
|
|
18
|
+
ConnectivityManager.instance = new ConnectivityManager();
|
|
15
19
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
return ConnectivityManager.instance;
|
|
21
|
+
}
|
|
22
|
+
startPolling() {
|
|
23
|
+
if (this.checkInterval) return;
|
|
24
|
+
this.checkInterval = setInterval(() => {
|
|
25
|
+
this.checkConnection();
|
|
26
|
+
}, this.POLLING_INTERVAL_MS);
|
|
27
|
+
}
|
|
28
|
+
stopPolling() {
|
|
29
|
+
if (this.checkInterval) {
|
|
30
|
+
clearInterval(this.checkInterval);
|
|
31
|
+
this.checkInterval = null;
|
|
21
32
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}, this.POLLING_INTERVAL_MS);
|
|
33
|
+
}
|
|
34
|
+
async checkConnection() {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
if (now - this.lastCheck < this.CACHE_TTL_MS) {
|
|
37
|
+
return this.isConnected;
|
|
28
38
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
try {
|
|
40
|
+
await dns.lookup("google.com");
|
|
41
|
+
this.updateStatus(true);
|
|
42
|
+
this.lastCheck = now;
|
|
43
|
+
return true;
|
|
44
|
+
} catch (error) {
|
|
45
|
+
this.updateStatus(false);
|
|
46
|
+
this.lastCheck = now;
|
|
47
|
+
return false;
|
|
34
48
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
// Lookup google.com to check connectivity
|
|
43
|
-
await dns.lookup('google.com');
|
|
44
|
-
this.updateStatus(true);
|
|
45
|
-
this.lastCheck = now;
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
catch (error) {
|
|
49
|
-
this.updateStatus(false);
|
|
50
|
-
this.lastCheck = now;
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
updateStatus(newStatus) {
|
|
55
|
-
if (this.isConnected !== newStatus) {
|
|
56
|
-
this.isConnected = newStatus;
|
|
57
|
-
this.notifyListeners();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
subscribe(listener) {
|
|
61
|
-
this.listeners.push(listener);
|
|
62
|
-
// Notify immediate status
|
|
63
|
-
listener(this.isConnected);
|
|
64
|
-
return () => {
|
|
65
|
-
this.listeners = this.listeners.filter(l => l !== listener);
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
notifyListeners() {
|
|
69
|
-
this.listeners.forEach(listener => listener(this.isConnected));
|
|
49
|
+
}
|
|
50
|
+
updateStatus(newStatus) {
|
|
51
|
+
if (this.isConnected !== newStatus) {
|
|
52
|
+
this.isConnected = newStatus;
|
|
53
|
+
this.notifyListeners();
|
|
70
54
|
}
|
|
55
|
+
}
|
|
56
|
+
subscribe(listener) {
|
|
57
|
+
this.listeners.push(listener);
|
|
58
|
+
listener(this.isConnected);
|
|
59
|
+
return () => {
|
|
60
|
+
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
notifyListeners() {
|
|
64
|
+
this.listeners.forEach((listener) => listener(this.isConnected));
|
|
65
|
+
}
|
|
71
66
|
}
|
|
67
|
+
export {
|
|
68
|
+
ConnectivityManager
|
|
69
|
+
};
|
|
72
70
|
//# sourceMappingURL=connectivity-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/services/connectivity-manager.ts"],"sourcesContent":["\r\nimport dns from 'dns/promises';\r\n\r\nexport class ConnectivityManager {\r\n private static instance: ConnectivityManager;\r\n private isConnected: boolean = true;\r\n private checkInterval: NodeJS.Timeout | null = null;\r\n private listeners: ((isConnected: boolean) => void)[] = [];\r\n private lastCheck: number = 0;\r\n private CACHE_TTL_MS = 2000; // Cache result for 2 seoncds\r\n private POLLING_INTERVAL_MS = 5000; // Poll every 5 seconds\r\n\r\n private constructor() {\r\n // Initial check\r\n this.checkConnection();\r\n // Start polling\r\n this.startPolling();\r\n }\r\n\r\n public static getInstance(): ConnectivityManager {\r\n if (!ConnectivityManager.instance) {\r\n ConnectivityManager.instance = new ConnectivityManager();\r\n }\r\n return ConnectivityManager.instance;\r\n }\r\n\r\n private startPolling() {\r\n if (this.checkInterval) return;\r\n this.checkInterval = setInterval(() => {\r\n this.checkConnection();\r\n }, this.POLLING_INTERVAL_MS);\r\n }\r\n\r\n public stopPolling() {\r\n if (this.checkInterval) {\r\n clearInterval(this.checkInterval);\r\n this.checkInterval = null;\r\n }\r\n }\r\n\r\n public async checkConnection(): Promise<boolean> {\r\n const now = Date.now();\r\n // Return cached value if within TTL\r\n if (now - this.lastCheck < this.CACHE_TTL_MS) {\r\n return this.isConnected;\r\n }\r\n\r\n try {\r\n // Lookup google.com to check connectivity\r\n await dns.lookup('google.com');\r\n this.updateStatus(true);\r\n this.lastCheck = now;\r\n return true;\r\n } catch (error) {\r\n this.updateStatus(false);\r\n this.lastCheck = now;\r\n return false;\r\n }\r\n }\r\n\r\n private updateStatus(newStatus: boolean) {\r\n if (this.isConnected !== newStatus) {\r\n this.isConnected = newStatus;\r\n this.notifyListeners();\r\n }\r\n }\r\n\r\n public subscribe(listener: (isConnected: boolean) => void): () => void {\r\n this.listeners.push(listener);\r\n // Notify immediate status\r\n listener(this.isConnected);\r\n\r\n return () => {\r\n this.listeners = this.listeners.filter(l => l !== listener);\r\n };\r\n }\r\n\r\n private notifyListeners() {\r\n this.listeners.forEach(listener => listener(this.isConnected));\r\n }\r\n}\r\n"],"mappings":"AACA,OAAO,SAAS;AAET,MAAM,oBAAoB;AAAA,EAC7B,OAAe;AAAA,EACP,cAAuB;AAAA,EACvB,gBAAuC;AAAA,EACvC,YAAgD,CAAC;AAAA,EACjD,YAAoB;AAAA,EACpB,eAAe;AAAA;AAAA,EACf,sBAAsB;AAAA;AAAA,EAEtB,cAAc;AAElB,SAAK,gBAAgB;AAErB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,OAAc,cAAmC;AAC7C,QAAI,CAAC,oBAAoB,UAAU;AAC/B,0BAAoB,WAAW,IAAI,oBAAoB;AAAA,IAC3D;AACA,WAAO,oBAAoB;AAAA,EAC/B;AAAA,EAEQ,eAAe;AACnB,QAAI,KAAK,cAAe;AACxB,SAAK,gBAAgB,YAAY,MAAM;AACnC,WAAK,gBAAgB;AAAA,IACzB,GAAG,KAAK,mBAAmB;AAAA,EAC/B;AAAA,EAEO,cAAc;AACjB,QAAI,KAAK,eAAe;AACpB,oBAAc,KAAK,aAAa;AAChC,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,MAAa,kBAAoC;AAC7C,UAAM,MAAM,KAAK,IAAI;AAErB,QAAI,MAAM,KAAK,YAAY,KAAK,cAAc;AAC1C,aAAO,KAAK;AAAA,IAChB;AAEA,QAAI;AAEA,YAAM,IAAI,OAAO,YAAY;AAC7B,WAAK,aAAa,IAAI;AACtB,WAAK,YAAY;AACjB,aAAO;AAAA,IACX,SAAS,OAAO;AACZ,WAAK,aAAa,KAAK;AACvB,WAAK,YAAY;AACjB,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEQ,aAAa,WAAoB;AACrC,QAAI,KAAK,gBAAgB,WAAW;AAChC,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACzB;AAAA,EACJ;AAAA,EAEO,UAAU,UAAsD;AACnE,SAAK,UAAU,KAAK,QAAQ;AAE5B,aAAS,KAAK,WAAW;AAEzB,WAAO,MAAM;AACT,WAAK,YAAY,KAAK,UAAU,OAAO,OAAK,MAAM,QAAQ;AAAA,IAC9D;AAAA,EACJ;AAAA,EAEQ,kBAAkB;AACtB,SAAK,UAAU,QAAQ,cAAY,SAAS,KAAK,WAAW,CAAC;AAAA,EACjE;AACJ;","names":[]}
|