centaurus-cli 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/types.js +0 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/cli-adapter.js +5047 -5158
- package/dist/cli-adapter.js.map +1 -1
- package/dist/commands/CommandParser.js +372 -315
- package/dist/commands/CommandParser.js.map +1 -1
- package/dist/config/build-config.js +11 -42
- package/dist/config/build-config.js.map +1 -1
- package/dist/config/defaultConfig.js +94 -82
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/manager.js +144 -160
- package/dist/config/manager.js.map +1 -1
- package/dist/config/mcp-config-manager.js +411 -364
- package/dist/config/mcp-config-manager.js.map +1 -1
- package/dist/config/models.js +118 -185
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.js +186 -184
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/config/types.js +33 -26
- package/dist/config/types.js.map +1 -1
- package/dist/context/command-detector.js +63 -67
- package/dist/context/command-detector.js.map +1 -1
- package/dist/context/context-manager.js +533 -518
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/handlers/docker-handler.js +518 -576
- package/dist/context/handlers/docker-handler.js.map +1 -1
- package/dist/context/handlers/ssh-handler.js +1050 -1109
- package/dist/context/handlers/ssh-handler.js.map +1 -1
- package/dist/context/handlers/wsl-handler.js +558 -630
- package/dist/context/handlers/wsl-handler.js.map +1 -1
- package/dist/context/index.js +42 -6
- package/dist/context/index.js.map +1 -1
- package/dist/context/subshell-handler.js +0 -4
- package/dist/context/subshell-handler.js.map +1 -1
- package/dist/context/types.js +20 -31
- package/dist/context/types.js.map +1 -1
- package/dist/hooks/useConnectivity.js +13 -10
- package/dist/hooks/useConnectivity.js.map +1 -1
- package/dist/hooks/useTerminalDimensions.js +67 -79
- package/dist/hooks/useTerminalDimensions.js.map +1 -1
- package/dist/index.js +228 -251
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-command-handler.js +297 -260
- package/dist/mcp/mcp-command-handler.js.map +1 -1
- package/dist/mcp/mcp-server-manager.js +139 -155
- package/dist/mcp/mcp-server-manager.js.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.js +74 -94
- package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
- package/dist/services/ai-autocomplete-agent.js +169 -181
- package/dist/services/ai-autocomplete-agent.js.map +1 -1
- package/dist/services/ai-context-injector.js +180 -93
- package/dist/services/ai-context-injector.js.map +1 -1
- package/dist/services/ai-service-client.js +513 -456
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.js +443 -441
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/auth-handler.js +162 -198
- package/dist/services/auth-handler.js.map +1 -1
- package/dist/services/background-task-manager.js +258 -282
- package/dist/services/background-task-manager.js.map +1 -1
- package/dist/services/checkpoint-manager.js +1526 -1512
- package/dist/services/checkpoint-manager.js.map +1 -1
- package/dist/services/clipboard-service.js +151 -200
- package/dist/services/clipboard-service.js.map +1 -1
- package/dist/services/connectivity-manager.js +63 -65
- package/dist/services/connectivity-manager.js.map +1 -1
- package/dist/services/conversation-manager.js +118 -121
- package/dist/services/conversation-manager.js.map +1 -1
- package/dist/services/environment-context-injector.js +160 -187
- package/dist/services/environment-context-injector.js.map +1 -1
- package/dist/services/fast-context-agent.js +203 -243
- package/dist/services/fast-context-agent.js.map +1 -1
- package/dist/services/input-detection-agent.js +190 -202
- package/dist/services/input-detection-agent.js.map +1 -1
- package/dist/services/input-requirement-detector.js +155 -189
- package/dist/services/input-requirement-detector.js.map +1 -1
- package/dist/services/local-chat-storage.js +342 -365
- package/dist/services/local-chat-storage.js.map +1 -1
- package/dist/services/monitored-shell-manager.js +225 -233
- package/dist/services/monitored-shell-manager.js.map +1 -1
- package/dist/services/ollama-service.js +293 -310
- package/dist/services/ollama-service.js.map +1 -1
- package/dist/services/rules-storage.js +142 -0
- package/dist/services/rules-storage.js.map +1 -0
- package/dist/services/session-quota-manager.js +219 -235
- package/dist/services/session-quota-manager.js.map +1 -1
- package/dist/services/shell-input-agent.js +299 -334
- package/dist/services/shell-input-agent.js.map +1 -1
- package/dist/services/sub-agent-manager.js +459 -501
- package/dist/services/sub-agent-manager.js.map +1 -1
- package/dist/services/warpify-detector.js +133 -183
- package/dist/services/warpify-detector.js.map +1 -1
- package/dist/services/workflow-storage.js +202 -217
- package/dist/services/workflow-storage.js.map +1 -1
- package/dist/test-ssh-handler.js +148 -193
- package/dist/test-ssh-handler.js.map +1 -1
- package/dist/tools/add-mcp.js +161 -0
- package/dist/tools/add-mcp.js.map +1 -0
- package/dist/tools/background-command.js +240 -273
- package/dist/tools/background-command.js.map +1 -1
- package/dist/tools/command.js +447 -440
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/create-image.js +172 -202
- package/dist/tools/create-image.js.map +1 -1
- package/dist/tools/enter-remote-session.js +169 -215
- package/dist/tools/enter-remote-session.js.map +1 -1
- package/dist/tools/fast-context.js +60 -67
- package/dist/tools/fast-context.js.map +1 -1
- package/dist/tools/file-ops.js +601 -572
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/find-files.js +262 -303
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/get-diff.js +423 -406
- package/dist/tools/get-diff.js.map +1 -1
- package/dist/tools/grep-search.js +966 -948
- package/dist/tools/grep-search.js.map +1 -1
- package/dist/tools/inspect-symbol.js +308 -323
- package/dist/tools/inspect-symbol.js.map +1 -1
- package/dist/tools/plan-mode.js +459 -503
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/read-binary-file.js +160 -190
- package/dist/tools/read-binary-file.js.map +1 -1
- package/dist/tools/registry.js +100 -84
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/reproduce_issue.js +170 -151
- package/dist/tools/reproduce_issue.js.map +1 -1
- package/dist/tools/sub-agent.js +223 -228
- package/dist/tools/sub-agent.js.map +1 -1
- package/dist/tools/task-complete.js +28 -27
- package/dist/tools/task-complete.js.map +1 -1
- package/dist/tools/types.js +0 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/validation.js +96 -118
- package/dist/tools/validation.js.map +1 -1
- package/dist/tools/web-search.js +194 -194
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/workflow-tool.js +77 -82
- package/dist/tools/workflow-tool.js.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/rule.js +1 -0
- package/dist/types/rule.js.map +1 -0
- package/dist/types/workflow.js +0 -7
- package/dist/types/workflow.js.map +1 -1
- package/dist/ui/components/AgentTimer.js +24 -25
- package/dist/ui/components/AgentTimer.js.map +1 -1
- package/dist/ui/components/App.js +3266 -3263
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/AuthScreen.js +22 -34
- package/dist/ui/components/AuthScreen.js.map +1 -1
- package/dist/ui/components/AuthWelcomeScreen.js +30 -24
- package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
- package/dist/ui/components/Breadcrumbs.js +53 -82
- package/dist/ui/components/Breadcrumbs.js.map +1 -1
- package/dist/ui/components/CircularSelectInput.js +59 -67
- package/dist/ui/components/CircularSelectInput.js.map +1 -1
- package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
- package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
- package/dist/ui/components/CodeBlock.js +24 -42
- package/dist/ui/components/CodeBlock.js.map +1 -1
- package/dist/ui/components/ConfigViewer.js +18 -25
- package/dist/ui/components/ConfigViewer.js.map +1 -1
- package/dist/ui/components/ConfirmPrompt.js +49 -71
- package/dist/ui/components/ConfirmPrompt.js.map +1 -1
- package/dist/ui/components/ConnectionStatusMessage.js +32 -83
- package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.js +34 -49
- package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
- package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
- package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
- package/dist/ui/components/DiffViewer.js +68 -121
- package/dist/ui/components/DiffViewer.js.map +1 -1
- package/dist/ui/components/ErrorBoundary.js +40 -48
- package/dist/ui/components/ErrorBoundary.js.map +1 -1
- package/dist/ui/components/FileCreationPreview.js +29 -60
- package/dist/ui/components/FileCreationPreview.js.map +1 -1
- package/dist/ui/components/FileOperation.js +34 -29
- package/dist/ui/components/FileOperation.js.map +1 -1
- package/dist/ui/components/FileTagAutocomplete.js +55 -25
- package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
- package/dist/ui/components/FontRecommendation.js.map +1 -1
- package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
- package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
- package/dist/ui/components/InputBox.js +1620 -2150
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.js +234 -352
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/KeyboardHelp.js +34 -35
- package/dist/ui/components/KeyboardHelp.js.map +1 -1
- package/dist/ui/components/LoadingIndicator.js +22 -25
- package/dist/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/ui/components/MCPAddScreen.js +40 -51
- package/dist/ui/components/MCPAddScreen.js.map +1 -1
- package/dist/ui/components/MCPListScreen.js +40 -48
- package/dist/ui/components/MCPListScreen.js.map +1 -1
- package/dist/ui/components/MCPServerListScreen.js +49 -56
- package/dist/ui/components/MCPServerListScreen.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +69 -96
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageBox.js +66 -48
- package/dist/ui/components/MessageBox.js.map +1 -1
- package/dist/ui/components/MessageDisplay.js +150 -142
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/MonitorModeAIPanel.js +46 -65
- package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
- package/dist/ui/components/MultiLineInput.js +243 -277
- package/dist/ui/components/MultiLineInput.js.map +1 -1
- package/dist/ui/components/PasswordPrompt.js +37 -18
- package/dist/ui/components/PasswordPrompt.js.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.js +27 -38
- package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
- package/dist/ui/components/PlanReviewScreen.js +46 -50
- package/dist/ui/components/PlanReviewScreen.js.map +1 -1
- package/dist/ui/components/RulesEditorScreen.js +81 -0
- package/dist/ui/components/RulesEditorScreen.js.map +1 -0
- package/dist/ui/components/SelectPrompt.js +19 -8
- package/dist/ui/components/SelectPrompt.js.map +1 -1
- package/dist/ui/components/ShimmerText.js +44 -0
- package/dist/ui/components/ShimmerText.js.map +1 -0
- package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
- package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
- package/dist/ui/components/StatusBar.js +56 -87
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +116 -99
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/TaskCompletedMessage.js +28 -23
- package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
- package/dist/ui/components/TaskProgressIndicator.js +44 -70
- package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
- package/dist/ui/components/ThinkingDisplay.js +44 -41
- package/dist/ui/components/ThinkingDisplay.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +772 -1326
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/ToolExecutionStatus.js +53 -84
- package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
- package/dist/ui/components/ToolResult.js +22 -15
- package/dist/ui/components/ToolResult.js.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.js +88 -120
- package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
- package/dist/ui/components/WelcomeBanner.js +176 -26
- package/dist/ui/components/WelcomeBanner.js.map +1 -1
- package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
- package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
- package/dist/utils/ansi-encoder.js +30 -61
- package/dist/utils/ansi-encoder.js.map +1 -1
- package/dist/utils/chat-formatter.js +327 -305
- package/dist/utils/chat-formatter.js.map +1 -1
- package/dist/utils/command-history.js +152 -174
- package/dist/utils/command-history.js.map +1 -1
- package/dist/utils/context-sanitizer.js +49 -112
- package/dist/utils/context-sanitizer.js.map +1 -1
- package/dist/utils/conversation-logger.js +292 -324
- package/dist/utils/conversation-logger.js.map +1 -1
- package/dist/utils/custom-commands-manager.js +126 -131
- package/dist/utils/custom-commands-manager.js.map +1 -1
- package/dist/utils/editor-utils.js +732 -837
- package/dist/utils/editor-utils.js.map +1 -1
- package/dist/utils/file.js +174 -213
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/git-stats.js +169 -0
- package/dist/utils/git-stats.js.map +1 -0
- package/dist/utils/input-classifier.js +960 -482
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/logger.js +48 -73
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown-parser.js +277 -310
- package/dist/utils/markdown-parser.js.map +1 -1
- package/dist/utils/rule-reference-resolver.js +54 -0
- package/dist/utils/rule-reference-resolver.js.map +1 -0
- package/dist/utils/shell.js +144 -156
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/state.js +23 -22
- package/dist/utils/state.js.map +1 -1
- package/dist/utils/syntax-checker.js +279 -327
- package/dist/utils/syntax-checker.js.map +1 -1
- package/dist/utils/terminal-output.js +199 -302
- package/dist/utils/terminal-output.js.map +1 -1
- package/dist/utils/text-clipboard.js +47 -70
- package/dist/utils/text-clipboard.js.map +1 -1
- package/dist/utils/unicode-sanitizer.js +134 -197
- package/dist/utils/unicode-sanitizer.js.map +1 -1
- package/dist/utils/version-checker.js +46 -56
- package/dist/utils/version-checker.js.map +1 -1
- package/package.json +6 -4
- package/dist/ai/types.d.ts +0 -20
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/cli-adapter.d.ts +0 -514
- package/dist/cli-adapter.d.ts.map +0 -1
- package/dist/commands/CommandParser.d.ts +0 -27
- package/dist/commands/CommandParser.d.ts.map +0 -1
- package/dist/config/build-config.d.ts +0 -42
- package/dist/config/build-config.d.ts.map +0 -1
- package/dist/config/defaultConfig.d.ts +0 -79
- package/dist/config/defaultConfig.d.ts.map +0 -1
- package/dist/config/manager.d.ts +0 -62
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/mcp-config-manager.d.ts +0 -79
- package/dist/config/mcp-config-manager.d.ts.map +0 -1
- package/dist/config/models.d.ts +0 -83
- package/dist/config/models.d.ts.map +0 -1
- package/dist/config/slash-commands.d.ts +0 -23
- package/dist/config/slash-commands.d.ts.map +0 -1
- package/dist/config/types.d.ts +0 -35
- package/dist/config/types.d.ts.map +0 -1
- package/dist/context/command-detector.d.ts +0 -50
- package/dist/context/command-detector.d.ts.map +0 -1
- package/dist/context/context-manager.d.ts +0 -157
- package/dist/context/context-manager.d.ts.map +0 -1
- package/dist/context/handlers/docker-handler.d.ts +0 -130
- package/dist/context/handlers/docker-handler.d.ts.map +0 -1
- package/dist/context/handlers/ssh-handler.d.ts +0 -201
- package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
- package/dist/context/handlers/wsl-handler.d.ts +0 -146
- package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
- package/dist/context/index.d.ts +0 -8
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/subshell-handler.d.ts +0 -165
- package/dist/context/subshell-handler.d.ts.map +0 -1
- package/dist/context/types.d.ts +0 -70
- package/dist/context/types.d.ts.map +0 -1
- package/dist/hooks/useConnectivity.d.ts +0 -2
- package/dist/hooks/useConnectivity.d.ts.map +0 -1
- package/dist/hooks/useTerminalDimensions.d.ts +0 -41
- package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/mcp-command-handler.d.ts +0 -47
- package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
- package/dist/mcp/mcp-server-manager.d.ts +0 -30
- package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
- package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
- package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
- package/dist/services/ai-autocomplete-agent.d.ts +0 -39
- package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
- package/dist/services/ai-context-injector.d.ts +0 -41
- package/dist/services/ai-context-injector.d.ts.map +0 -1
- package/dist/services/ai-service-client.d.ts +0 -128
- package/dist/services/ai-service-client.d.ts.map +0 -1
- package/dist/services/api-client.d.ts +0 -353
- package/dist/services/api-client.d.ts.map +0 -1
- package/dist/services/auth-handler.d.ts +0 -30
- package/dist/services/auth-handler.d.ts.map +0 -1
- package/dist/services/background-task-manager.d.ts +0 -114
- package/dist/services/background-task-manager.d.ts.map +0 -1
- package/dist/services/checkpoint-manager.d.ts +0 -204
- package/dist/services/checkpoint-manager.d.ts.map +0 -1
- package/dist/services/clipboard-service.d.ts +0 -37
- package/dist/services/clipboard-service.d.ts.map +0 -1
- package/dist/services/connectivity-manager.d.ts +0 -18
- package/dist/services/connectivity-manager.d.ts.map +0 -1
- package/dist/services/conversation-manager.d.ts +0 -73
- package/dist/services/conversation-manager.d.ts.map +0 -1
- package/dist/services/environment-context-injector.d.ts +0 -69
- package/dist/services/environment-context-injector.d.ts.map +0 -1
- package/dist/services/fast-context-agent.d.ts +0 -12
- package/dist/services/fast-context-agent.d.ts.map +0 -1
- package/dist/services/input-detection-agent.d.ts +0 -40
- package/dist/services/input-detection-agent.d.ts.map +0 -1
- package/dist/services/input-requirement-detector.d.ts +0 -28
- package/dist/services/input-requirement-detector.d.ts.map +0 -1
- package/dist/services/local-chat-storage.d.ts +0 -182
- package/dist/services/local-chat-storage.d.ts.map +0 -1
- package/dist/services/monitored-shell-manager.d.ts +0 -120
- package/dist/services/monitored-shell-manager.d.ts.map +0 -1
- package/dist/services/ollama-service.d.ts +0 -197
- package/dist/services/ollama-service.d.ts.map +0 -1
- package/dist/services/session-quota-manager.d.ts +0 -101
- package/dist/services/session-quota-manager.d.ts.map +0 -1
- package/dist/services/shell-input-agent.d.ts +0 -89
- package/dist/services/shell-input-agent.d.ts.map +0 -1
- package/dist/services/sub-agent-manager.d.ts +0 -140
- package/dist/services/sub-agent-manager.d.ts.map +0 -1
- package/dist/services/warpify-detector.d.ts +0 -43
- package/dist/services/warpify-detector.d.ts.map +0 -1
- package/dist/services/workflow-storage.d.ts +0 -72
- package/dist/services/workflow-storage.d.ts.map +0 -1
- package/dist/test-ssh-handler.d.ts +0 -8
- package/dist/test-ssh-handler.d.ts.map +0 -1
- package/dist/tools/background-command.d.ts +0 -11
- package/dist/tools/background-command.d.ts.map +0 -1
- package/dist/tools/command.d.ts +0 -3
- package/dist/tools/command.d.ts.map +0 -1
- package/dist/tools/create-image.d.ts +0 -10
- package/dist/tools/create-image.d.ts.map +0 -1
- package/dist/tools/enter-remote-session.d.ts +0 -48
- package/dist/tools/enter-remote-session.d.ts.map +0 -1
- package/dist/tools/fast-context.d.ts +0 -3
- package/dist/tools/fast-context.d.ts.map +0 -1
- package/dist/tools/file-ops.d.ts +0 -7
- package/dist/tools/file-ops.d.ts.map +0 -1
- package/dist/tools/find-files.d.ts +0 -49
- package/dist/tools/find-files.d.ts.map +0 -1
- package/dist/tools/get-diff.d.ts +0 -14
- package/dist/tools/get-diff.d.ts.map +0 -1
- package/dist/tools/grep-search.d.ts +0 -155
- package/dist/tools/grep-search.d.ts.map +0 -1
- package/dist/tools/inspect-symbol.d.ts +0 -32
- package/dist/tools/inspect-symbol.d.ts.map +0 -1
- package/dist/tools/plan-mode.d.ts +0 -140
- package/dist/tools/plan-mode.d.ts.map +0 -1
- package/dist/tools/read-binary-file.d.ts +0 -10
- package/dist/tools/read-binary-file.d.ts.map +0 -1
- package/dist/tools/registry.d.ts +0 -31
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/reproduce_issue.d.ts +0 -2
- package/dist/tools/reproduce_issue.d.ts.map +0 -1
- package/dist/tools/sub-agent.d.ts +0 -9
- package/dist/tools/sub-agent.d.ts.map +0 -1
- package/dist/tools/task-complete.d.ts +0 -3
- package/dist/tools/task-complete.d.ts.map +0 -1
- package/dist/tools/types.d.ts +0 -40
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/validation.d.ts +0 -47
- package/dist/tools/validation.d.ts.map +0 -1
- package/dist/tools/web-search.d.ts +0 -24
- package/dist/tools/web-search.d.ts.map +0 -1
- package/dist/tools/workflow-tool.d.ts +0 -11
- package/dist/tools/workflow-tool.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -123
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/workflow.d.ts +0 -110
- package/dist/types/workflow.d.ts.map +0 -1
- package/dist/ui/components/AgentTimer.d.ts +0 -7
- package/dist/ui/components/AgentTimer.d.ts.map +0 -1
- package/dist/ui/components/App.d.ts +0 -197
- package/dist/ui/components/App.d.ts.map +0 -1
- package/dist/ui/components/AuthScreen.d.ts +0 -8
- package/dist/ui/components/AuthScreen.d.ts.map +0 -1
- package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
- package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
- package/dist/ui/components/Breadcrumbs.d.ts +0 -13
- package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
- package/dist/ui/components/CircularSelectInput.d.ts +0 -24
- package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
- package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
- package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/CodeBlock.d.ts +0 -9
- package/dist/ui/components/CodeBlock.d.ts.map +0 -1
- package/dist/ui/components/ConfigViewer.d.ts +0 -11
- package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
- package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
- package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
- package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
- package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
- package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
- package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
- package/dist/ui/components/DiffViewer.d.ts +0 -9
- package/dist/ui/components/DiffViewer.d.ts.map +0 -1
- package/dist/ui/components/ErrorBoundary.d.ts +0 -17
- package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/ui/components/FileCreationPreview.d.ts +0 -8
- package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
- package/dist/ui/components/FileOperation.d.ts +0 -10
- package/dist/ui/components/FileOperation.d.ts.map +0 -1
- package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
- package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/FontRecommendation.d.ts +0 -1
- package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
- package/dist/ui/components/InputBox.d.ts +0 -42
- package/dist/ui/components/InputBox.d.ts.map +0 -1
- package/dist/ui/components/InteractiveShell.d.ts +0 -30
- package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
- package/dist/ui/components/KeyboardHelp.d.ts +0 -7
- package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
- package/dist/ui/components/LoadingIndicator.d.ts +0 -3
- package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
- package/dist/ui/components/MCPAddScreen.d.ts +0 -13
- package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
- package/dist/ui/components/MCPListScreen.d.ts +0 -17
- package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
- package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
- package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
- package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
- package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
- package/dist/ui/components/MessageBox.d.ts +0 -10
- package/dist/ui/components/MessageBox.d.ts.map +0 -1
- package/dist/ui/components/MessageDisplay.d.ts +0 -14
- package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
- package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
- package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
- package/dist/ui/components/MultiLineInput.d.ts +0 -13
- package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
- package/dist/ui/components/PasswordPrompt.d.ts +0 -9
- package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
- package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
- package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
- package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
- package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
- package/dist/ui/components/SelectPrompt.d.ts +0 -12
- package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
- package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
- package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/StatusBar.d.ts +0 -14
- package/dist/ui/components/StatusBar.d.ts.map +0 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
- package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
- package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
- package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
- package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
- package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
- package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
- package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
- package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
- package/dist/ui/components/ToolResult.d.ts +0 -10
- package/dist/ui/components/ToolResult.d.ts.map +0 -1
- package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
- package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
- package/dist/ui/components/WelcomeBanner.d.ts +0 -3
- package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
- package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
- package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
- package/dist/utils/ansi-encoder.d.ts +0 -7
- package/dist/utils/ansi-encoder.d.ts.map +0 -1
- package/dist/utils/chat-formatter.d.ts +0 -12
- package/dist/utils/chat-formatter.d.ts.map +0 -1
- package/dist/utils/command-history.d.ts +0 -24
- package/dist/utils/command-history.d.ts.map +0 -1
- package/dist/utils/context-sanitizer.d.ts +0 -50
- package/dist/utils/context-sanitizer.d.ts.map +0 -1
- package/dist/utils/conversation-logger.d.ts +0 -142
- package/dist/utils/conversation-logger.d.ts.map +0 -1
- package/dist/utils/custom-commands-manager.d.ts +0 -59
- package/dist/utils/custom-commands-manager.d.ts.map +0 -1
- package/dist/utils/editor-utils.d.ts +0 -101
- package/dist/utils/editor-utils.d.ts.map +0 -1
- package/dist/utils/file.d.ts +0 -61
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/input-classifier.d.ts +0 -25
- package/dist/utils/input-classifier.d.ts.map +0 -1
- package/dist/utils/logger.d.ts +0 -17
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/markdown-parser.d.ts +0 -60
- package/dist/utils/markdown-parser.d.ts.map +0 -1
- package/dist/utils/shell.d.ts +0 -47
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/state.d.ts +0 -13
- package/dist/utils/state.d.ts.map +0 -1
- package/dist/utils/syntax-checker.d.ts +0 -24
- package/dist/utils/syntax-checker.d.ts.map +0 -1
- package/dist/utils/terminal-output.d.ts +0 -25
- package/dist/utils/terminal-output.d.ts.map +0 -1
- package/dist/utils/text-clipboard.d.ts +0 -12
- package/dist/utils/text-clipboard.d.ts.map +0 -1
- package/dist/utils/unicode-sanitizer.d.ts +0 -44
- package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
- package/dist/utils/version-checker.d.ts +0 -14
- package/dist/utils/version-checker.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-mode.js","sourceRoot":"","sources":["../../src/tools/plan-mode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/tools/plan-mode.ts"],"sourcesContent":["/**\r\n * Plan Mode - Structured Task Planning and Execution\r\n * Enables AI to create structured plans with hierarchical tasks and track completion\r\n * \r\n * Enhanced Features:\r\n * - Hierarchical tasks with subtasks (e.g., Task 1 -> 1.1, 1.2, 1.3)\r\n * - Design summary for context understanding\r\n * - Phased execution (one task at a time)\r\n * - Subtask-level completion tracking\r\n */\r\n\r\nimport { Tool, ToolExecutionContext } from './types.js';\r\n\r\n// ============================================================================\r\n// INTERFACES\r\n// ============================================================================\r\n\r\n/**\r\n * A subtask within a main task (e.g., 1.1, 1.2, 2.1)\r\n */\r\nexport interface PlanSubtask {\r\n id: string; // e.g., \"1.1\", \"2.3\"\r\n description: string;\r\n status: 'pending' | 'in_progress' | 'completed' | 'skipped';\r\n requirements?: string; // Traceability, e.g., \"Requirements: 1.1, 1.4\"\r\n completedAt?: Date;\r\n}\r\n\r\n/**\r\n * A main task in the plan (e.g., Task 1, Task 2)\r\n */\r\nexport interface PlanStep {\r\n id: string; // e.g., \"task_1\", \"task_2\"\r\n description: string; // Main task description\r\n subtasks: PlanSubtask[]; // Numbered subtasks (1.1, 1.2, etc.)\r\n status: 'pending' | 'in_progress' | 'completed' | 'skipped';\r\n estimatedComplexity?: 'low' | 'medium' | 'high';\r\n requirements?: string; // Traceability requirements\r\n completedAt?: Date;\r\n}\r\n\r\n/**\r\n * The complete plan with design summary and hierarchical tasks\r\n */\r\nexport interface Plan {\r\n title: string;\r\n designSummary: string; // Detailed design understanding\r\n summary: string; // Brief approach summary\r\n steps: PlanStep[];\r\n createdAt: Date;\r\n approved: boolean;\r\n isActive: boolean;\r\n currentTaskIndex: number; // Index of current main task (0-based)\r\n currentSubtaskIndex: number; // Index of current subtask within task (-1 if no subtasks)\r\n}\r\n\r\n// ============================================================================\r\n// STATE\r\n// ============================================================================\r\n\r\n// In-memory plan state\r\nlet currentPlan: Plan | null = null;\r\n\r\n// ============================================================================\r\n// TOOLS\r\n// ============================================================================\r\n\r\n/**\r\n * Create Plan Tool\r\n * AI uses this to generate a structured plan with hierarchical tasks\r\n */\r\nexport const createPlanTool: Tool = {\r\n schema: {\r\n name: 'create_plan',\r\n description: `Use this tool when in planning mode to create a detailed implementation plan.\r\nThis will present the plan to the user for review and approval before execution begins.\r\n\r\nThe plan should include:\r\n1. A clear title describing what will be accomplished\r\n2. A detailed design summary explaining your understanding of the codebase and approach\r\n3. A brief summary of the overall approach\r\n4. A numbered list of main tasks, each optionally containing subtasks\r\n\r\nIMPORTANT: Only use this tool when in planning mode. Each task should be:\r\n- Specific and actionable\r\n- Can have subtasks for more granular steps\r\n- Ordered in a logical sequence\r\n\r\nExample structure:\r\n- Task 1: Set up core infrastructure\r\n - 1.1: Create directory structure\r\n - 1.2: Define TypeScript interfaces\r\n- Task 2: Implement main feature\r\n - 2.1: Create component files\r\n - 2.2: Add unit tests`,\r\n parameters: {\r\n type: 'object',\r\n properties: {\r\n title: {\r\n type: 'string',\r\n description: 'A clear, concise title for the plan'\r\n },\r\n designSummary: {\r\n type: 'string',\r\n description: 'Detailed understanding of the codebase and how the changes will be implemented. Include architecture decisions, file structure understanding, and implementation approach.'\r\n },\r\n summary: {\r\n type: 'string',\r\n description: 'Brief 1-2 sentence summary of the overall approach'\r\n },\r\n tasks: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n properties: {\r\n description: {\r\n type: 'string',\r\n description: 'Clear description of what this main task accomplishes'\r\n },\r\n subtasks: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n properties: {\r\n description: {\r\n type: 'string',\r\n description: 'Specific subtask description'\r\n },\r\n requirements: {\r\n type: 'string',\r\n description: 'Optional traceability requirements'\r\n }\r\n },\r\n required: ['description']\r\n },\r\n description: 'Optional list of subtasks within this main task'\r\n },\r\n complexity: {\r\n type: 'string',\r\n enum: ['low', 'medium', 'high'],\r\n description: 'Estimated complexity of the task'\r\n },\r\n requirements: {\r\n type: 'string',\r\n description: 'Optional traceability requirements'\r\n }\r\n },\r\n required: ['description']\r\n },\r\n description: 'List of main tasks to execute, in order'\r\n }\r\n },\r\n required: ['title', 'summary', 'tasks']\r\n }\r\n },\r\n\r\n async execute(args: Record<string, any>, context: ToolExecutionContext): Promise<string> {\r\n const title = args.title as string;\r\n const designSummary = args.designSummary as string || '';\r\n const summary = args.summary as string;\r\n const tasks = args.tasks as Array<{\r\n description: string;\r\n subtasks?: Array<{ description: string; requirements?: string }>;\r\n complexity?: string;\r\n requirements?: string;\r\n }>;\r\n\r\n if (!title || title.trim().length === 0) {\r\n throw new Error('Plan title cannot be empty');\r\n }\r\n\r\n if (!tasks || tasks.length === 0) {\r\n throw new Error('Plan must have at least one task');\r\n }\r\n\r\n // Create the plan object with hierarchical structure\r\n const plan: Plan = {\r\n title: title.trim(),\r\n designSummary: designSummary?.trim() || '',\r\n summary: summary?.trim() || '',\r\n steps: tasks.map((task, taskIndex) => ({\r\n id: `task_${taskIndex + 1}`,\r\n description: task.description.trim(),\r\n subtasks: (task.subtasks || []).map((subtask, subtaskIndex) => ({\r\n id: `${taskIndex + 1}.${subtaskIndex + 1}`,\r\n description: subtask.description.trim(),\r\n status: 'pending' as const,\r\n requirements: subtask.requirements?.trim()\r\n })),\r\n status: 'pending' as const,\r\n estimatedComplexity: task.complexity as 'low' | 'medium' | 'high' | undefined,\r\n requirements: task.requirements?.trim()\r\n })),\r\n createdAt: new Date(),\r\n approved: false,\r\n isActive: false,\r\n currentTaskIndex: 0,\r\n currentSubtaskIndex: -1\r\n };\r\n\r\n currentPlan = plan;\r\n\r\n // Return confirmation - the UI will handle displaying the plan\r\n return `PLAN_CREATED:${JSON.stringify(plan)}`;\r\n }\r\n};\r\n\r\n/**\r\n * Mark Task Complete Tool\r\n * AI uses this to mark individual tasks or subtasks as completed during execution\r\n */\r\nexport const markTaskCompleteTool: Tool = {\r\n schema: {\r\n name: 'mark_task_complete',\r\n description: `Use this tool to mark a task or subtask as completed in the current plan.\r\nCall this after successfully completing each task/subtask in the plan.\r\n\r\nThis will:\r\n1. Update the task/subtask status to 'completed'\r\n2. Show a completion message in the UI\r\n3. Automatically advance to the next task/subtask\r\n\r\nYou can mark:\r\n- A main task: task_number=2\r\n- A subtask: task_number=\"2.1\" (marks subtask 1 of task 2)\r\n\r\nIMPORTANT: \r\n- Must have an active approved plan\r\n- Mark subtasks complete as you finish them\r\n- After marking the LAST task/subtask complete, output your summary then call task_complete to end the session`,\r\n parameters: {\r\n type: 'object',\r\n properties: {\r\n task_number: {\r\n type: 'string',\r\n description: 'The task number to mark complete. Use integer for main task (e.g., \"2\") or dot notation for subtask (e.g., \"2.1\")'\r\n },\r\n completion_note: {\r\n type: 'string',\r\n description: 'Optional note about what was accomplished'\r\n }\r\n },\r\n required: ['task_number']\r\n }\r\n },\r\n\r\n async execute(args: Record<string, any>, context: ToolExecutionContext): Promise<string> {\r\n if (!currentPlan) {\r\n throw new Error('No active plan. Create a plan first using create_plan.');\r\n }\r\n\r\n if (!currentPlan.approved || !currentPlan.isActive) {\r\n throw new Error('Plan must be approved and active before marking tasks complete.');\r\n }\r\n\r\n const taskNumberStr = String(args.task_number);\r\n const completionNote = args.completion_note as string | undefined;\r\n\r\n // Parse task number - can be \"2\" or \"2.1\"\r\n const parts = taskNumberStr.split('.');\r\n const mainTaskNum = parseInt(parts[0], 10);\r\n const subtaskNum = parts.length > 1 ? parseInt(parts[1], 10) : null;\r\n\r\n if (isNaN(mainTaskNum) || mainTaskNum < 1 || mainTaskNum > currentPlan.steps.length) {\r\n throw new Error(`Invalid task number. Must be between 1 and ${currentPlan.steps.length}.`);\r\n }\r\n\r\n const taskIndex = mainTaskNum - 1;\r\n const task = currentPlan.steps[taskIndex];\r\n\r\n // Handle subtask completion\r\n if (subtaskNum !== null) {\r\n if (!task.subtasks || subtaskNum < 1 || subtaskNum > task.subtasks.length) {\r\n throw new Error(`Invalid subtask number. Task ${mainTaskNum} has ${task.subtasks?.length || 0} subtasks.`);\r\n }\r\n\r\n const subtaskIndex = subtaskNum - 1;\r\n const subtask = task.subtasks[subtaskIndex];\r\n\r\n if (subtask.status === 'completed') {\r\n return `Subtask ${taskNumberStr} is already marked as completed.`;\r\n }\r\n\r\n // Mark subtask complete\r\n subtask.status = 'completed';\r\n subtask.completedAt = new Date();\r\n\r\n // Check if all subtasks are complete, then mark main task as complete\r\n const allSubtasksComplete = task.subtasks.every(st => st.status === 'completed' || st.status === 'skipped');\r\n if (allSubtasksComplete) {\r\n task.status = 'completed';\r\n task.completedAt = new Date();\r\n } else {\r\n task.status = 'in_progress';\r\n }\r\n\r\n // Update current subtask index\r\n const nextPendingSubtaskIndex = task.subtasks.findIndex(\r\n (st, idx) => idx > subtaskIndex && st.status === 'pending'\r\n );\r\n currentPlan.currentSubtaskIndex = nextPendingSubtaskIndex;\r\n\r\n // Calculate progress\r\n const { completedCount, totalCount, allComplete } = calculateProgress();\r\n\r\n const result = {\r\n type: 'subtask',\r\n taskNumber: taskNumberStr,\r\n taskDescription: subtask.description,\r\n completionNote: completionNote || null,\r\n completedCount,\r\n totalCount,\r\n allComplete,\r\n nextSubtask: nextPendingSubtaskIndex !== -1 ? task.subtasks[nextPendingSubtaskIndex].description : null,\r\n mainTaskComplete: allSubtasksComplete\r\n };\r\n\r\n return `TASK_COMPLETED:${JSON.stringify(result)}`;\r\n }\r\n\r\n // Handle main task completion (mark all subtasks as complete too)\r\n if (task.status === 'completed') {\r\n return `Task ${mainTaskNum} is already marked as completed.`;\r\n }\r\n\r\n // Mark the main task and all its subtasks as complete\r\n task.status = 'completed';\r\n task.completedAt = new Date();\r\n task.subtasks.forEach(st => {\r\n if (st.status !== 'completed' && st.status !== 'skipped') {\r\n st.status = 'completed';\r\n st.completedAt = new Date();\r\n }\r\n });\r\n\r\n // Update current task index to next pending task\r\n const nextPendingIndex = currentPlan.steps.findIndex(\r\n (step, idx) => idx > taskIndex && step.status === 'pending'\r\n );\r\n if (nextPendingIndex !== -1) {\r\n currentPlan.currentTaskIndex = nextPendingIndex;\r\n currentPlan.currentSubtaskIndex = -1;\r\n }\r\n\r\n // Calculate progress\r\n const { completedCount, totalCount, allComplete } = calculateProgress();\r\n\r\n const result = {\r\n type: 'task',\r\n taskNumber: mainTaskNum,\r\n taskDescription: task.description,\r\n completionNote: completionNote || null,\r\n completedCount,\r\n totalCount,\r\n allComplete,\r\n nextTask: allComplete ? null : currentPlan.steps[currentPlan.currentTaskIndex]?.description\r\n };\r\n\r\n return `TASK_COMPLETED:${JSON.stringify(result)}`;\r\n }\r\n};\r\n\r\n// ============================================================================\r\n// HELPER FUNCTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Calculate overall progress including subtasks\r\n */\r\nfunction calculateProgress(): { completedCount: number; totalCount: number; allComplete: boolean } {\r\n if (!currentPlan) {\r\n return { completedCount: 0, totalCount: 0, allComplete: false };\r\n }\r\n\r\n let completedCount = 0;\r\n let totalCount = 0;\r\n\r\n currentPlan.steps.forEach(step => {\r\n if (step.subtasks.length > 0) {\r\n // Count subtasks\r\n totalCount += step.subtasks.length;\r\n completedCount += step.subtasks.filter(st => st.status === 'completed').length;\r\n } else {\r\n // Count the main task if no subtasks\r\n totalCount += 1;\r\n if (step.status === 'completed') completedCount += 1;\r\n }\r\n });\r\n\r\n return {\r\n completedCount,\r\n totalCount,\r\n allComplete: completedCount === totalCount && totalCount > 0\r\n };\r\n}\r\n\r\n/**\r\n * Set the current plan (used by CLI adapter)\r\n */\r\nexport function setPlan(plan: Plan): void {\r\n currentPlan = plan;\r\n}\r\n\r\n/**\r\n * Get the current plan\r\n */\r\nexport function getCurrentPlan(): Plan | null {\r\n return currentPlan;\r\n}\r\n\r\n/**\r\n * Clear the current plan\r\n */\r\nexport function clearPlan(): void {\r\n currentPlan = null;\r\n}\r\n\r\n/**\r\n * Approve the current plan and make it active\r\n */\r\nexport function approvePlan(): Plan | null {\r\n if (currentPlan) {\r\n currentPlan.approved = true;\r\n currentPlan.isActive = true;\r\n currentPlan.currentTaskIndex = 0;\r\n currentPlan.currentSubtaskIndex = currentPlan.steps[0]?.subtasks?.length > 0 ? 0 : -1;\r\n }\r\n return currentPlan;\r\n}\r\n\r\n/**\r\n * Mark a task as complete by task number (for compatibility)\r\n */\r\nexport function markTaskComplete(taskNumber: number): PlanStep | null {\r\n if (!currentPlan || taskNumber < 1 || taskNumber > currentPlan.steps.length) {\r\n return null;\r\n }\r\n\r\n const task = currentPlan.steps[taskNumber - 1];\r\n task.status = 'completed';\r\n task.completedAt = new Date();\r\n\r\n // Also mark all subtasks as complete\r\n task.subtasks.forEach(st => {\r\n st.status = 'completed';\r\n st.completedAt = new Date();\r\n });\r\n\r\n return task;\r\n}\r\n\r\n/**\r\n * Get the current phase (task) with all its subtasks\r\n */\r\nexport function getCurrentPhase(): { taskNumber: number; task: PlanStep } | null {\r\n if (!currentPlan || !currentPlan.isActive) return null;\r\n\r\n const taskIndex = currentPlan.currentTaskIndex;\r\n if (taskIndex < 0 || taskIndex >= currentPlan.steps.length) return null;\r\n\r\n const task = currentPlan.steps[taskIndex];\r\n if (task.status === 'completed') {\r\n // Find next pending task\r\n const nextIndex = currentPlan.steps.findIndex(\r\n (step, idx) => idx > taskIndex && step.status === 'pending'\r\n );\r\n if (nextIndex === -1) return null;\r\n return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };\r\n }\r\n\r\n return { taskNumber: taskIndex + 1, task };\r\n}\r\n\r\n/**\r\n * Advance to the next phase after current task is complete\r\n * Returns the new phase or null if all phases are done\r\n */\r\nexport function advanceToNextPhase(): { taskNumber: number; task: PlanStep } | null {\r\n if (!currentPlan || !currentPlan.isActive) return null;\r\n\r\n const currentTask = currentPlan.steps[currentPlan.currentTaskIndex];\r\n\r\n // Mark current task as complete if not already\r\n if (currentTask && currentTask.status !== 'completed') {\r\n currentTask.status = 'completed';\r\n currentTask.completedAt = new Date();\r\n }\r\n\r\n // Find next pending task\r\n const nextIndex = currentPlan.steps.findIndex(\r\n (step, idx) => idx > currentPlan!.currentTaskIndex && step.status === 'pending'\r\n );\r\n\r\n if (nextIndex === -1) {\r\n return null; // All phases complete\r\n }\r\n\r\n currentPlan.currentTaskIndex = nextIndex;\r\n currentPlan.currentSubtaskIndex = currentPlan.steps[nextIndex].subtasks.length > 0 ? 0 : -1;\r\n\r\n return { taskNumber: nextIndex + 1, task: currentPlan.steps[nextIndex] };\r\n}\r\n\r\n/**\r\n * Get the next incomplete task\r\n */\r\nexport function getNextIncompleteTask(): { taskNumber: number; task: PlanStep } | null {\r\n if (!currentPlan) return null;\r\n\r\n const index = currentPlan.steps.findIndex(step => step.status === 'pending' || step.status === 'in_progress');\r\n if (index === -1) return null;\r\n\r\n return {\r\n taskNumber: index + 1,\r\n task: currentPlan.steps[index]\r\n };\r\n}\r\n\r\n/**\r\n * Check if all tasks are complete\r\n */\r\nexport function areAllTasksComplete(): boolean {\r\n if (!currentPlan) return false;\r\n return currentPlan.steps.every(step => step.status === 'completed' || step.status === 'skipped');\r\n}\r\n\r\n/**\r\n * Get plan progress summary (including subtasks)\r\n */\r\nexport function getPlanProgress(): { completed: number; total: number; percentage: number; currentTask: number; totalTasks: number } | null {\r\n if (!currentPlan) return null;\r\n\r\n const { completedCount, totalCount } = calculateProgress();\r\n const percentage = totalCount > 0 ? Math.round((completedCount / totalCount) * 100) : 0;\r\n\r\n const completedTasks = currentPlan.steps.filter(s => s.status === 'completed').length;\r\n\r\n return {\r\n completed: completedCount,\r\n total: totalCount,\r\n percentage,\r\n currentTask: currentPlan.currentTaskIndex + 1,\r\n totalTasks: currentPlan.steps.length\r\n };\r\n}\r\n\r\n/**\r\n * Generate plan context for AI system prompt injection (shows all tasks)\r\n */\r\nexport function getPlanContextForPrompt(): string {\r\n if (!currentPlan || !currentPlan.isActive) return '';\r\n\r\n const progress = getPlanProgress();\r\n if (!progress) return '';\r\n\r\n let context = `\\n\\n## ACTIVE PLAN: ${currentPlan.title}\\n`;\r\n if (currentPlan.designSummary) {\r\n context += `\\n### Design Summary:\\n${currentPlan.designSummary}\\n`;\r\n }\r\n context += `\\nProgress: ${progress.completed}/${progress.total} items completed (${progress.percentage}%)\\n`;\r\n context += `Current Task: ${progress.currentTask}/${progress.totalTasks}\\n\\n`;\r\n context += `### Tasks:\\n`;\r\n\r\n currentPlan.steps.forEach((step, index) => {\r\n const statusIcon = step.status === 'completed' ? '✅' :\r\n step.status === 'in_progress' ? '🔄' :\r\n step.status === 'skipped' ? '⏭️' : '⏳';\r\n const isCurrent = index === currentPlan!.currentTaskIndex && step.status !== 'completed';\r\n const marker = isCurrent ? ' 👈 CURRENT' : '';\r\n context += `${index + 1}. ${statusIcon} ${step.description}${marker}\\n`;\r\n\r\n // Add subtasks\r\n step.subtasks.forEach((subtask, subIndex) => {\r\n const subStatusIcon = subtask.status === 'completed' ? '✅' :\r\n subtask.status === 'in_progress' ? '🔄' : '⬜';\r\n context += ` ${index + 1}.${subIndex + 1}. ${subStatusIcon} ${subtask.description}\\n`;\r\n });\r\n });\r\n\r\n const nextTask = getNextIncompleteTask();\r\n if (nextTask) {\r\n context += `\\n**NEXT ACTION**: Complete task ${nextTask.taskNumber}: ${nextTask.task.description}\\n`;\r\n context += `After completing this task, call mark_task_complete with task_number=${nextTask.taskNumber}\\n`;\r\n } else {\r\n context += `\\n**ALL TASKS COMPLETE**: Output your summary of what was accomplished, then call task_complete().\\n`;\r\n }\r\n\r\n return context;\r\n}\r\n\r\n/**\r\n * Generate context for only the current phase (single task with its subtasks)\r\n * Used for phased execution where AI only sees one task at a time\r\n */\r\nexport function getPhaseContextForPrompt(): string {\r\n if (!currentPlan || !currentPlan.isActive) return '';\r\n\r\n const currentPhase = getCurrentPhase();\r\n if (!currentPhase) {\r\n return `\\n**ALL TASKS COMPLETE**: Output your summary of what was accomplished, then call task_complete().\\n`;\r\n }\r\n\r\n const progress = getPlanProgress();\r\n const { taskNumber, task } = currentPhase;\r\n\r\n let context = `\\n\\n## CURRENT TASK: ${currentPlan.title}\\n`;\r\n\r\n if (currentPlan.designSummary) {\r\n context += `\\n### Design Context:\\n${currentPlan.designSummary}\\n`;\r\n }\r\n\r\n context += `\\n### Overall Progress: Task ${taskNumber}/${currentPlan.steps.length}\\n`;\r\n context += `${progress ? `(${progress.completed}/${progress.total} items completed - ${progress.percentage}%)` : ''}\\n\\n`;\r\n\r\n context += `### YOUR CURRENT TASK:\\n`;\r\n context += `**Task ${taskNumber}: ${task.description}**\\n\\n`;\r\n\r\n if (task.subtasks.length > 0) {\r\n context += `Subtasks to complete:\\n`;\r\n task.subtasks.forEach((subtask, index) => {\r\n const subStatusIcon = subtask.status === 'completed' ? '✅' :\r\n subtask.status === 'in_progress' ? '🔄' : '⬜';\r\n const isCurrentSubtask = index === currentPlan!.currentSubtaskIndex;\r\n const marker = isCurrentSubtask && subtask.status === 'pending' ? ' 👈 CURRENT' : '';\r\n context += ` ${taskNumber}.${index + 1}. ${subStatusIcon} ${subtask.description}${marker}\\n`;\r\n });\r\n\r\n context += `\\n**Instructions**: Complete each subtask in order.\\n`;\r\n context += `After completing a subtask, call: mark_task_complete(task_number=\"${taskNumber}.X\")\\n`;\r\n context += `When all subtasks are done, the main task will be automatically marked complete.\\n`;\r\n } else {\r\n context += `\\n**Instructions**: Complete this task.\\n`;\r\n context += `When done, call: mark_task_complete(task_number=\"${taskNumber}\")\\n`;\r\n }\r\n\r\n return context;\r\n}\r\n\r\n// ============================================================================\r\n// EXPORTS\r\n// ============================================================================\r\n\r\nexport default {\r\n createPlanTool,\r\n markTaskCompleteTool,\r\n setPlan,\r\n getCurrentPlan,\r\n clearPlan,\r\n approvePlan,\r\n markTaskComplete,\r\n getCurrentPhase,\r\n advanceToNextPhase,\r\n getNextIncompleteTask,\r\n areAllTasksComplete,\r\n getPlanProgress,\r\n getPlanContextForPrompt,\r\n getPhaseContextForPrompt\r\n};\r\n"],"mappings":"AA6DA,IAAI,cAA2B;AAUxB,MAAM,iBAAuB;AAAA,EAClC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBb,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO;AAAA,UACL,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,eAAe;AAAA,UACb,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,SAAS;AAAA,UACP,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,OAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,YACL,MAAM;AAAA,YACN,YAAY;AAAA,cACV,aAAa;AAAA,gBACX,MAAM;AAAA,gBACN,aAAa;AAAA,cACf;AAAA,cACA,UAAU;AAAA,gBACR,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,YAAY;AAAA,oBACV,aAAa;AAAA,sBACX,MAAM;AAAA,sBACN,aAAa;AAAA,oBACf;AAAA,oBACA,cAAc;AAAA,sBACZ,MAAM;AAAA,sBACN,aAAa;AAAA,oBACf;AAAA,kBACF;AAAA,kBACA,UAAU,CAAC,aAAa;AAAA,gBAC1B;AAAA,gBACA,aAAa;AAAA,cACf;AAAA,cACA,YAAY;AAAA,gBACV,MAAM;AAAA,gBACN,MAAM,CAAC,OAAO,UAAU,MAAM;AAAA,gBAC9B,aAAa;AAAA,cACf;AAAA,cACA,cAAc;AAAA,gBACZ,MAAM;AAAA,gBACN,aAAa;AAAA,cACf;AAAA,YACF;AAAA,YACA,UAAU,CAAC,aAAa;AAAA,UAC1B;AAAA,UACA,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU,CAAC,SAAS,WAAW,OAAO;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAA2B,SAAgD;AACvF,UAAM,QAAQ,KAAK;AACnB,UAAM,gBAAgB,KAAK,iBAA2B;AACtD,UAAM,UAAU,KAAK;AACrB,UAAM,QAAQ,KAAK;AAOnB,QAAI,CAAC,SAAS,MAAM,KAAK,EAAE,WAAW,GAAG;AACvC,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAEA,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACpD;AAGA,UAAM,OAAa;AAAA,MACjB,OAAO,MAAM,KAAK;AAAA,MAClB,eAAe,eAAe,KAAK,KAAK;AAAA,MACxC,SAAS,SAAS,KAAK,KAAK;AAAA,MAC5B,OAAO,MAAM,IAAI,CAAC,MAAM,eAAe;AAAA,QACrC,IAAI,QAAQ,YAAY,CAAC;AAAA,QACzB,aAAa,KAAK,YAAY,KAAK;AAAA,QACnC,WAAW,KAAK,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,kBAAkB;AAAA,UAC9D,IAAI,GAAG,YAAY,CAAC,IAAI,eAAe,CAAC;AAAA,UACxC,aAAa,QAAQ,YAAY,KAAK;AAAA,UACtC,QAAQ;AAAA,UACR,cAAc,QAAQ,cAAc,KAAK;AAAA,QAC3C,EAAE;AAAA,QACF,QAAQ;AAAA,QACR,qBAAqB,KAAK;AAAA,QAC1B,cAAc,KAAK,cAAc,KAAK;AAAA,MACxC,EAAE;AAAA,MACF,WAAW,oBAAI,KAAK;AAAA,MACpB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,kBAAkB;AAAA,MAClB,qBAAqB;AAAA,IACvB;AAEA,kBAAc;AAGd,WAAO,gBAAgB,KAAK,UAAU,IAAI,CAAC;AAAA,EAC7C;AACF;AAMO,MAAM,uBAA6B;AAAA,EACxC,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBb,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,QACV,aAAa;AAAA,UACX,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,iBAAiB;AAAA,UACf,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU,CAAC,aAAa;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAA2B,SAAgD;AACvF,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAEA,QAAI,CAAC,YAAY,YAAY,CAAC,YAAY,UAAU;AAClD,YAAM,IAAI,MAAM,iEAAiE;AAAA,IACnF;AAEA,UAAM,gBAAgB,OAAO,KAAK,WAAW;AAC7C,UAAM,iBAAiB,KAAK;AAG5B,UAAM,QAAQ,cAAc,MAAM,GAAG;AACrC,UAAM,cAAc,SAAS,MAAM,CAAC,GAAG,EAAE;AACzC,UAAM,aAAa,MAAM,SAAS,IAAI,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI;AAE/D,QAAI,MAAM,WAAW,KAAK,cAAc,KAAK,cAAc,YAAY,MAAM,QAAQ;AACnF,YAAM,IAAI,MAAM,8CAA8C,YAAY,MAAM,MAAM,GAAG;AAAA,IAC3F;AAEA,UAAM,YAAY,cAAc;AAChC,UAAM,OAAO,YAAY,MAAM,SAAS;AAGxC,QAAI,eAAe,MAAM;AACvB,UAAI,CAAC,KAAK,YAAY,aAAa,KAAK,aAAa,KAAK,SAAS,QAAQ;AACzE,cAAM,IAAI,MAAM,gCAAgC,WAAW,QAAQ,KAAK,UAAU,UAAU,CAAC,YAAY;AAAA,MAC3G;AAEA,YAAM,eAAe,aAAa;AAClC,YAAM,UAAU,KAAK,SAAS,YAAY;AAE1C,UAAI,QAAQ,WAAW,aAAa;AAClC,eAAO,WAAW,aAAa;AAAA,MACjC;AAGA,cAAQ,SAAS;AACjB,cAAQ,cAAc,oBAAI,KAAK;AAG/B,YAAM,sBAAsB,KAAK,SAAS,MAAM,QAAM,GAAG,WAAW,eAAe,GAAG,WAAW,SAAS;AAC1G,UAAI,qBAAqB;AACvB,aAAK,SAAS;AACd,aAAK,cAAc,oBAAI,KAAK;AAAA,MAC9B,OAAO;AACL,aAAK,SAAS;AAAA,MAChB;AAGA,YAAM,0BAA0B,KAAK,SAAS;AAAA,QAC5C,CAAC,IAAI,QAAQ,MAAM,gBAAgB,GAAG,WAAW;AAAA,MACnD;AACA,kBAAY,sBAAsB;AAGlC,YAAM,EAAE,gBAAAA,iBAAgB,YAAAC,aAAY,aAAAC,aAAY,IAAI,kBAAkB;AAEtE,YAAMC,UAAS;AAAA,QACb,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,iBAAiB,QAAQ;AAAA,QACzB,gBAAgB,kBAAkB;AAAA,QAClC,gBAAAH;AAAA,QACA,YAAAC;AAAA,QACA,aAAAC;AAAA,QACA,aAAa,4BAA4B,KAAK,KAAK,SAAS,uBAAuB,EAAE,cAAc;AAAA,QACnG,kBAAkB;AAAA,MACpB;AAEA,aAAO,kBAAkB,KAAK,UAAUC,OAAM,CAAC;AAAA,IACjD;AAGA,QAAI,KAAK,WAAW,aAAa;AAC/B,aAAO,QAAQ,WAAW;AAAA,IAC5B;AAGA,SAAK,SAAS;AACd,SAAK,cAAc,oBAAI,KAAK;AAC5B,SAAK,SAAS,QAAQ,QAAM;AAC1B,UAAI,GAAG,WAAW,eAAe,GAAG,WAAW,WAAW;AACxD,WAAG,SAAS;AACZ,WAAG,cAAc,oBAAI,KAAK;AAAA,MAC5B;AAAA,IACF,CAAC;AAGD,UAAM,mBAAmB,YAAY,MAAM;AAAA,MACzC,CAAC,MAAM,QAAQ,MAAM,aAAa,KAAK,WAAW;AAAA,IACpD;AACA,QAAI,qBAAqB,IAAI;AAC3B,kBAAY,mBAAmB;AAC/B,kBAAY,sBAAsB;AAAA,IACpC;AAGA,UAAM,EAAE,gBAAgB,YAAY,YAAY,IAAI,kBAAkB;AAEtE,UAAM,SAAS;AAAA,MACb,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,iBAAiB,KAAK;AAAA,MACtB,gBAAgB,kBAAkB;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,cAAc,OAAO,YAAY,MAAM,YAAY,gBAAgB,GAAG;AAAA,IAClF;AAEA,WAAO,kBAAkB,KAAK,UAAU,MAAM,CAAC;AAAA,EACjD;AACF;AASA,SAAS,oBAA0F;AACjG,MAAI,CAAC,aAAa;AAChB,WAAO,EAAE,gBAAgB,GAAG,YAAY,GAAG,aAAa,MAAM;AAAA,EAChE;AAEA,MAAI,iBAAiB;AACrB,MAAI,aAAa;AAEjB,cAAY,MAAM,QAAQ,UAAQ;AAChC,QAAI,KAAK,SAAS,SAAS,GAAG;AAE5B,oBAAc,KAAK,SAAS;AAC5B,wBAAkB,KAAK,SAAS,OAAO,QAAM,GAAG,WAAW,WAAW,EAAE;AAAA,IAC1E,OAAO;AAEL,oBAAc;AACd,UAAI,KAAK,WAAW,YAAa,mBAAkB;AAAA,IACrD;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,aAAa,mBAAmB,cAAc,aAAa;AAAA,EAC7D;AACF;AAKO,SAAS,QAAQ,MAAkB;AACxC,gBAAc;AAChB;AAKO,SAAS,iBAA8B;AAC5C,SAAO;AACT;AAKO,SAAS,YAAkB;AAChC,gBAAc;AAChB;AAKO,SAAS,cAA2B;AACzC,MAAI,aAAa;AACf,gBAAY,WAAW;AACvB,gBAAY,WAAW;AACvB,gBAAY,mBAAmB;AAC/B,gBAAY,sBAAsB,YAAY,MAAM,CAAC,GAAG,UAAU,SAAS,IAAI,IAAI;AAAA,EACrF;AACA,SAAO;AACT;AAKO,SAAS,iBAAiB,YAAqC;AACpE,MAAI,CAAC,eAAe,aAAa,KAAK,aAAa,YAAY,MAAM,QAAQ;AAC3E,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,YAAY,MAAM,aAAa,CAAC;AAC7C,OAAK,SAAS;AACd,OAAK,cAAc,oBAAI,KAAK;AAG5B,OAAK,SAAS,QAAQ,QAAM;AAC1B,OAAG,SAAS;AACZ,OAAG,cAAc,oBAAI,KAAK;AAAA,EAC5B,CAAC;AAED,SAAO;AACT;AAKO,SAAS,kBAAiE;AAC/E,MAAI,CAAC,eAAe,CAAC,YAAY,SAAU,QAAO;AAElD,QAAM,YAAY,YAAY;AAC9B,MAAI,YAAY,KAAK,aAAa,YAAY,MAAM,OAAQ,QAAO;AAEnE,QAAM,OAAO,YAAY,MAAM,SAAS;AACxC,MAAI,KAAK,WAAW,aAAa;AAE/B,UAAM,YAAY,YAAY,MAAM;AAAA,MAClC,CAAC,MAAM,QAAQ,MAAM,aAAa,KAAK,WAAW;AAAA,IACpD;AACA,QAAI,cAAc,GAAI,QAAO;AAC7B,WAAO,EAAE,YAAY,YAAY,GAAG,MAAM,YAAY,MAAM,SAAS,EAAE;AAAA,EACzE;AAEA,SAAO,EAAE,YAAY,YAAY,GAAG,KAAK;AAC3C;AAMO,SAAS,qBAAoE;AAClF,MAAI,CAAC,eAAe,CAAC,YAAY,SAAU,QAAO;AAElD,QAAM,cAAc,YAAY,MAAM,YAAY,gBAAgB;AAGlE,MAAI,eAAe,YAAY,WAAW,aAAa;AACrD,gBAAY,SAAS;AACrB,gBAAY,cAAc,oBAAI,KAAK;AAAA,EACrC;AAGA,QAAM,YAAY,YAAY,MAAM;AAAA,IAClC,CAAC,MAAM,QAAQ,MAAM,YAAa,oBAAoB,KAAK,WAAW;AAAA,EACxE;AAEA,MAAI,cAAc,IAAI;AACpB,WAAO;AAAA,EACT;AAEA,cAAY,mBAAmB;AAC/B,cAAY,sBAAsB,YAAY,MAAM,SAAS,EAAE,SAAS,SAAS,IAAI,IAAI;AAEzF,SAAO,EAAE,YAAY,YAAY,GAAG,MAAM,YAAY,MAAM,SAAS,EAAE;AACzE;AAKO,SAAS,wBAAuE;AACrF,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,QAAQ,YAAY,MAAM,UAAU,UAAQ,KAAK,WAAW,aAAa,KAAK,WAAW,aAAa;AAC5G,MAAI,UAAU,GAAI,QAAO;AAEzB,SAAO;AAAA,IACL,YAAY,QAAQ;AAAA,IACpB,MAAM,YAAY,MAAM,KAAK;AAAA,EAC/B;AACF;AAKO,SAAS,sBAA+B;AAC7C,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO,YAAY,MAAM,MAAM,UAAQ,KAAK,WAAW,eAAe,KAAK,WAAW,SAAS;AACjG;AAKO,SAAS,kBAA4H;AAC1I,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,EAAE,gBAAgB,WAAW,IAAI,kBAAkB;AACzD,QAAM,aAAa,aAAa,IAAI,KAAK,MAAO,iBAAiB,aAAc,GAAG,IAAI;AAEtF,QAAM,iBAAiB,YAAY,MAAM,OAAO,OAAK,EAAE,WAAW,WAAW,EAAE;AAE/E,SAAO;AAAA,IACL,WAAW;AAAA,IACX,OAAO;AAAA,IACP;AAAA,IACA,aAAa,YAAY,mBAAmB;AAAA,IAC5C,YAAY,YAAY,MAAM;AAAA,EAChC;AACF;AAKO,SAAS,0BAAkC;AAChD,MAAI,CAAC,eAAe,CAAC,YAAY,SAAU,QAAO;AAElD,QAAM,WAAW,gBAAgB;AACjC,MAAI,CAAC,SAAU,QAAO;AAEtB,MAAI,UAAU;AAAA;AAAA,kBAAuB,YAAY,KAAK;AAAA;AACtD,MAAI,YAAY,eAAe;AAC7B,eAAW;AAAA;AAAA,EAA0B,YAAY,aAAa;AAAA;AAAA,EAChE;AACA,aAAW;AAAA,YAAe,SAAS,SAAS,IAAI,SAAS,KAAK,qBAAqB,SAAS,UAAU;AAAA;AACtG,aAAW,iBAAiB,SAAS,WAAW,IAAI,SAAS,UAAU;AAAA;AAAA;AACvE,aAAW;AAAA;AAEX,cAAY,MAAM,QAAQ,CAAC,MAAM,UAAU;AACzC,UAAM,aAAa,KAAK,WAAW,cAAc,WAC/C,KAAK,WAAW,gBAAgB,cAC9B,KAAK,WAAW,YAAY,iBAAO;AACvC,UAAM,YAAY,UAAU,YAAa,oBAAoB,KAAK,WAAW;AAC7E,UAAM,SAAS,YAAY,uBAAgB;AAC3C,eAAW,GAAG,QAAQ,CAAC,KAAK,UAAU,IAAI,KAAK,WAAW,GAAG,MAAM;AAAA;AAGnE,SAAK,SAAS,QAAQ,CAAC,SAAS,aAAa;AAC3C,YAAM,gBAAgB,QAAQ,WAAW,cAAc,WACrD,QAAQ,WAAW,gBAAgB,cAAO;AAC5C,iBAAW,MAAM,QAAQ,CAAC,IAAI,WAAW,CAAC,KAAK,aAAa,IAAI,QAAQ,WAAW;AAAA;AAAA,IACrF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,WAAW,sBAAsB;AACvC,MAAI,UAAU;AACZ,eAAW;AAAA,iCAAoC,SAAS,UAAU,KAAK,SAAS,KAAK,WAAW;AAAA;AAChG,eAAW,wEAAwE,SAAS,UAAU;AAAA;AAAA,EACxG,OAAO;AACL,eAAW;AAAA;AAAA;AAAA,EACb;AAEA,SAAO;AACT;AAMO,SAAS,2BAAmC;AACjD,MAAI,CAAC,eAAe,CAAC,YAAY,SAAU,QAAO;AAElD,QAAM,eAAe,gBAAgB;AACrC,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA;AAAA;AAAA,EACT;AAEA,QAAM,WAAW,gBAAgB;AACjC,QAAM,EAAE,YAAY,KAAK,IAAI;AAE7B,MAAI,UAAU;AAAA;AAAA,mBAAwB,YAAY,KAAK;AAAA;AAEvD,MAAI,YAAY,eAAe;AAC7B,eAAW;AAAA;AAAA,EAA0B,YAAY,aAAa;AAAA;AAAA,EAChE;AAEA,aAAW;AAAA,6BAAgC,UAAU,IAAI,YAAY,MAAM,MAAM;AAAA;AACjF,aAAW,GAAG,WAAW,IAAI,SAAS,SAAS,IAAI,SAAS,KAAK,sBAAsB,SAAS,UAAU,OAAO,EAAE;AAAA;AAAA;AAEnH,aAAW;AAAA;AACX,aAAW,UAAU,UAAU,KAAK,KAAK,WAAW;AAAA;AAAA;AAEpD,MAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,eAAW;AAAA;AACX,SAAK,SAAS,QAAQ,CAAC,SAAS,UAAU;AACxC,YAAM,gBAAgB,QAAQ,WAAW,cAAc,WACrD,QAAQ,WAAW,gBAAgB,cAAO;AAC5C,YAAM,mBAAmB,UAAU,YAAa;AAChD,YAAM,SAAS,oBAAoB,QAAQ,WAAW,YAAY,uBAAgB;AAClF,iBAAW,MAAM,UAAU,IAAI,QAAQ,CAAC,KAAK,aAAa,IAAI,QAAQ,WAAW,GAAG,MAAM;AAAA;AAAA,IAC5F,CAAC;AAED,eAAW;AAAA;AAAA;AACX,eAAW,qEAAqE,UAAU;AAAA;AAC1F,eAAW;AAAA;AAAA,EACb,OAAO;AACL,eAAW;AAAA;AAAA;AACX,eAAW,oDAAoD,UAAU;AAAA;AAAA,EAC3E;AAEA,SAAO;AACT;AAMA,IAAO,oBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":["completedCount","totalCount","allComplete","result"]}
|
|
@@ -1,210 +1,180 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* them to Google Cloud Storage and attaching them to the conversation context
|
|
6
|
-
* for Vertex AI multimodal understanding.
|
|
7
|
-
*/
|
|
8
|
-
import * as fs from 'fs';
|
|
9
|
-
import * as path from 'path';
|
|
10
|
-
import { apiClient } from '../services/api-client.js';
|
|
11
|
-
import { logDebug, logError } from '../utils/logger.js';
|
|
12
|
-
// Supported file extensions and their MIME types
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { apiClient } from "../services/api-client.js";
|
|
4
|
+
import { logDebug, logError } from "../utils/logger.js";
|
|
13
5
|
const SUPPORTED_FILE_TYPES = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
6
|
+
// Images
|
|
7
|
+
".png": "image/png",
|
|
8
|
+
".jpg": "image/jpeg",
|
|
9
|
+
".jpeg": "image/jpeg",
|
|
10
|
+
".gif": "image/gif",
|
|
11
|
+
".webp": "image/webp",
|
|
12
|
+
".bmp": "image/bmp",
|
|
13
|
+
".ico": "image/x-icon",
|
|
14
|
+
".tiff": "image/tiff",
|
|
15
|
+
".tif": "image/tiff",
|
|
16
|
+
".svg": "image/svg+xml",
|
|
17
|
+
// Documents
|
|
18
|
+
".pdf": "application/pdf",
|
|
19
|
+
// Audio (Vertex AI supports some audio formats)
|
|
20
|
+
".mp3": "audio/mpeg",
|
|
21
|
+
".wav": "audio/wav",
|
|
22
|
+
".flac": "audio/flac",
|
|
23
|
+
// Video (Vertex AI supports some video formats)
|
|
24
|
+
".mp4": "video/mp4",
|
|
25
|
+
".webm": "video/webm",
|
|
26
|
+
".mov": "video/quicktime"
|
|
35
27
|
};
|
|
36
|
-
/**
|
|
37
|
-
* Get MIME type from file extension
|
|
38
|
-
*/
|
|
39
28
|
function getMimeType(filePath) {
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
30
|
+
return SUPPORTED_FILE_TYPES[ext] || null;
|
|
42
31
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Format file size for display
|
|
45
|
-
*/
|
|
46
32
|
function formatFileSize(bytes) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
51
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
33
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
34
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
35
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
52
36
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Get display name for file type
|
|
55
|
-
*/
|
|
56
37
|
function getFileTypeDisplay(mimeType) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return 'Audio';
|
|
63
|
-
if (mimeType.startsWith('video/'))
|
|
64
|
-
return 'Video';
|
|
65
|
-
return 'File';
|
|
38
|
+
if (mimeType.startsWith("image/")) return "Image";
|
|
39
|
+
if (mimeType === "application/pdf") return "PDF";
|
|
40
|
+
if (mimeType.startsWith("audio/")) return "Audio";
|
|
41
|
+
if (mimeType.startsWith("video/")) return "Video";
|
|
42
|
+
return "File";
|
|
66
43
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Use this tool when:
|
|
73
|
-
- You need to read/analyze PDF documents
|
|
74
|
-
- You need to view/analyze images that are not in the clipboard
|
|
75
|
-
- You need to process audio or video files
|
|
76
|
-
- The file is binary and cannot be read as text
|
|
77
|
-
|
|
78
|
-
Supported formats:
|
|
79
|
-
- Images: PNG, JPG, JPEG, GIF, WebP, BMP, ICO, TIFF, SVG
|
|
80
|
-
- Documents: PDF
|
|
81
|
-
- Audio: MP3, WAV, FLAC
|
|
82
|
-
- Video: MP4, WebM, MOV
|
|
83
|
-
|
|
44
|
+
const readBinaryFileTool = {
|
|
45
|
+
schema: {
|
|
46
|
+
name: "read_binary_file",
|
|
47
|
+
description: `Read non-text files (PDFs, images, documents, audio, video) by uploading them to the AI context.
|
|
48
|
+
|
|
49
|
+
Use this tool when:
|
|
50
|
+
- You need to read/analyze PDF documents
|
|
51
|
+
- You need to view/analyze images that are not in the clipboard
|
|
52
|
+
- You need to process audio or video files
|
|
53
|
+
- The file is binary and cannot be read as text
|
|
54
|
+
|
|
55
|
+
Supported formats:
|
|
56
|
+
- Images: PNG, JPG, JPEG, GIF, WebP, BMP, ICO, TIFF, SVG
|
|
57
|
+
- Documents: PDF
|
|
58
|
+
- Audio: MP3, WAV, FLAC
|
|
59
|
+
- Video: MP4, WebM, MOV
|
|
60
|
+
|
|
84
61
|
The file will be uploaded to the AI's context, allowing you to analyze, describe, or extract information from it.`,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
},
|
|
92
|
-
file_path: {
|
|
93
|
-
type: 'string',
|
|
94
|
-
description: 'Path to the binary file to read. Can be absolute or relative (relative paths are resolved against the current working directory).',
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
required: ['reason_text', 'file_path'],
|
|
62
|
+
parameters: {
|
|
63
|
+
type: "object",
|
|
64
|
+
properties: {
|
|
65
|
+
reason_text: {
|
|
66
|
+
type: "string",
|
|
67
|
+
description: 'A brief explanation of why you are reading this file (e.g., "Analyzing the PDF to understand the project requirements").'
|
|
98
68
|
},
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
logDebug(`[read_binary_file] Starting to read file: ${file_path}`);
|
|
103
|
-
// Automatically resolve relative paths to absolute paths using current working directory
|
|
104
|
-
if (!path.isAbsolute(file_path)) {
|
|
105
|
-
const resolvedPath = path.resolve(context.cwd, file_path);
|
|
106
|
-
logDebug(`[read_binary_file] Resolved relative path "${file_path}" to absolute path "${resolvedPath}"`);
|
|
107
|
-
file_path = resolvedPath;
|
|
69
|
+
file_path: {
|
|
70
|
+
type: "string",
|
|
71
|
+
description: "Path to the binary file to read. Can be absolute or relative (relative paths are resolved against the current working directory)."
|
|
108
72
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
73
|
+
},
|
|
74
|
+
required: ["reason_text", "file_path"]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
async execute(args, context) {
|
|
78
|
+
let { file_path } = args;
|
|
79
|
+
logDebug(`[read_binary_file] Starting to read file: ${file_path}`);
|
|
80
|
+
if (!path.isAbsolute(file_path)) {
|
|
81
|
+
const resolvedPath = path.resolve(context.cwd, file_path);
|
|
82
|
+
logDebug(`[read_binary_file] Resolved relative path "${file_path}" to absolute path "${resolvedPath}"`);
|
|
83
|
+
file_path = resolvedPath;
|
|
84
|
+
}
|
|
85
|
+
if (!fs.existsSync(file_path)) {
|
|
86
|
+
return `Error: File not found: ${file_path}
|
|
87
|
+
|
|
88
|
+
Suggestions:
|
|
89
|
+
1. Check if the file path is correct
|
|
115
90
|
2. Use 'find_files' or 'list_dir' to locate the file first`;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
91
|
+
}
|
|
92
|
+
const mimeType = getMimeType(file_path);
|
|
93
|
+
if (!mimeType) {
|
|
94
|
+
const ext = path.extname(file_path).toLowerCase();
|
|
95
|
+
const supportedExts = Object.keys(SUPPORTED_FILE_TYPES).join(", ");
|
|
96
|
+
return `Error: Unsupported file type: ${ext}
|
|
97
|
+
|
|
98
|
+
Supported file types: ${supportedExts}
|
|
99
|
+
|
|
126
100
|
If this is a text file, use 'view_file' instead.`;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
// Check if API client is authenticated
|
|
146
|
-
if (!apiClient.isAuthenticated()) {
|
|
147
|
-
return `Error: Not authenticated. Please sign in first to read files.
|
|
148
|
-
|
|
101
|
+
}
|
|
102
|
+
const stats = fs.statSync(file_path);
|
|
103
|
+
const maxSize = 50 * 1024 * 1024;
|
|
104
|
+
if (stats.size > maxSize) {
|
|
105
|
+
return `Error: File is too large (${formatFileSize(stats.size)}). Maximum size is 50MB.`;
|
|
106
|
+
}
|
|
107
|
+
let fileData;
|
|
108
|
+
try {
|
|
109
|
+
const buffer = fs.readFileSync(file_path);
|
|
110
|
+
fileData = buffer.toString("base64");
|
|
111
|
+
logDebug(`[read_binary_file] Read ${stats.size} bytes, base64 length: ${fileData.length}`);
|
|
112
|
+
} catch (error) {
|
|
113
|
+
logError("Failed to read file", error instanceof Error ? error : void 0);
|
|
114
|
+
return `Error: Failed to read file: ${error instanceof Error ? error.message : "Unknown error"}`;
|
|
115
|
+
}
|
|
116
|
+
if (!apiClient.isAuthenticated()) {
|
|
117
|
+
return `Error: Not authenticated. Please sign in first to read files.
|
|
118
|
+
|
|
149
119
|
The file exists and is ${formatFileSize(stats.size)} but cannot be read without authentication.`;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
File: ${fileName}
|
|
172
|
-
Type: ${mimeType}
|
|
173
|
-
Size: ${sizeDisplay}
|
|
174
|
-
|
|
175
|
-
[FILE: ${fileName} (${uploadResult.gcsUri})]
|
|
176
|
-
|
|
120
|
+
}
|
|
121
|
+
let conversationId = context.cliAdapter?.getCurrentConversationId?.();
|
|
122
|
+
if (!conversationId) {
|
|
123
|
+
conversationId = `temp-${Date.now()}`;
|
|
124
|
+
logDebug(`[read_binary_file] No conversation ID available, using temp: ${conversationId}`);
|
|
125
|
+
}
|
|
126
|
+
const fileName = path.basename(file_path);
|
|
127
|
+
try {
|
|
128
|
+
logDebug(`[read_binary_file] Uploading to backend, conversationId: ${conversationId}`);
|
|
129
|
+
const uploadResult = await apiClient.uploadFile(
|
|
130
|
+
conversationId,
|
|
131
|
+
fileName,
|
|
132
|
+
mimeType,
|
|
133
|
+
fileData
|
|
134
|
+
);
|
|
135
|
+
logDebug(`[read_binary_file] Upload successful, gcsUri: ${uploadResult.gcsUri}`);
|
|
136
|
+
const fileTypeDisplay = getFileTypeDisplay(mimeType);
|
|
137
|
+
const sizeDisplay = formatFileSize(stats.size);
|
|
138
|
+
if (uploadResult.gcsUri) {
|
|
139
|
+
return `Successfully read ${fileTypeDisplay} into AI context.
|
|
140
|
+
|
|
141
|
+
File: ${fileName}
|
|
142
|
+
Type: ${mimeType}
|
|
143
|
+
Size: ${sizeDisplay}
|
|
144
|
+
|
|
145
|
+
[FILE: ${fileName} (${uploadResult.gcsUri})]
|
|
146
|
+
|
|
177
147
|
The file is now available in your context. You can analyze, describe, or extract information from it in your response.`;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
148
|
+
} else {
|
|
149
|
+
return `File read into storage but GCS URI not available.
|
|
150
|
+
|
|
151
|
+
File: ${fileName}
|
|
152
|
+
Type: ${mimeType}
|
|
153
|
+
Size: ${sizeDisplay}
|
|
154
|
+
Storage Path: ${uploadResult.storagePath}
|
|
155
|
+
|
|
187
156
|
Warning: The file may not be accessible to the AI model.`;
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
File: ${fileName}
|
|
157
|
+
}
|
|
158
|
+
} catch (error) {
|
|
159
|
+
logError("Failed to upload file", error instanceof Error ? error : void 0);
|
|
160
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
161
|
+
if (errorMessage.includes("401") || errorMessage.includes("Authentication")) {
|
|
162
|
+
return `Error: Authentication failed. Please sign in again with '/login'.`;
|
|
163
|
+
}
|
|
164
|
+
if (errorMessage.includes("timeout") || errorMessage.includes("ETIMEDOUT")) {
|
|
165
|
+
return `Error: Read timed out. The file might be too large or the connection is slow.
|
|
166
|
+
|
|
167
|
+
File: ${fileName}
|
|
201
168
|
Size: ${formatFileSize(stats.size)}`;
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
File: ${fileName}
|
|
169
|
+
}
|
|
170
|
+
return `Error: Failed to read file: ${errorMessage}
|
|
171
|
+
|
|
172
|
+
File: ${fileName}
|
|
206
173
|
Size: ${formatFileSize(stats.size)}`;
|
|
207
|
-
|
|
208
|
-
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
export {
|
|
178
|
+
readBinaryFileTool
|
|
209
179
|
};
|
|
210
180
|
//# sourceMappingURL=read-binary-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-binary-file.js","sourceRoot":"","sources":["../../src/tools/read-binary-file.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/tools/read-binary-file.ts"],"sourcesContent":["/**\r\n * Read Binary File Tool\r\n * \r\n * Enables the AI to read non-text files (PDFs, images, documents) by uploading\r\n * them to Google Cloud Storage and attaching them to the conversation context\r\n * for Vertex AI multimodal understanding.\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { Tool } from './types.js';\r\nimport { apiClient } from '../services/api-client.js';\r\nimport { logDebug, logError } from '../utils/logger.js';\r\n\r\n// Supported file extensions and their MIME types\r\nconst SUPPORTED_FILE_TYPES: Record<string, string> = {\r\n // Images\r\n '.png': 'image/png',\r\n '.jpg': 'image/jpeg',\r\n '.jpeg': 'image/jpeg',\r\n '.gif': 'image/gif',\r\n '.webp': 'image/webp',\r\n '.bmp': 'image/bmp',\r\n '.ico': 'image/x-icon',\r\n '.tiff': 'image/tiff',\r\n '.tif': 'image/tiff',\r\n '.svg': 'image/svg+xml',\r\n // Documents\r\n '.pdf': 'application/pdf',\r\n // Audio (Vertex AI supports some audio formats)\r\n '.mp3': 'audio/mpeg',\r\n '.wav': 'audio/wav',\r\n '.flac': 'audio/flac',\r\n // Video (Vertex AI supports some video formats)\r\n '.mp4': 'video/mp4',\r\n '.webm': 'video/webm',\r\n '.mov': 'video/quicktime',\r\n};\r\n\r\n/**\r\n * Get MIME type from file extension\r\n */\r\nfunction getMimeType(filePath: string): string | null {\r\n const ext = path.extname(filePath).toLowerCase();\r\n return SUPPORTED_FILE_TYPES[ext] || null;\r\n}\r\n\r\n/**\r\n * Format file size for display\r\n */\r\nfunction 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\r\n/**\r\n * Get display name for file type\r\n */\r\nfunction getFileTypeDisplay(mimeType: string): string {\r\n if (mimeType.startsWith('image/')) return 'Image';\r\n if (mimeType === 'application/pdf') return 'PDF';\r\n if (mimeType.startsWith('audio/')) return 'Audio';\r\n if (mimeType.startsWith('video/')) return 'Video';\r\n return 'File';\r\n}\r\n\r\nexport const readBinaryFileTool: Tool = {\r\n schema: {\r\n name: 'read_binary_file',\r\n description: `Read non-text files (PDFs, images, documents, audio, video) by uploading them to the AI context.\r\n\r\nUse this tool when:\r\n- You need to read/analyze PDF documents\r\n- You need to view/analyze images that are not in the clipboard\r\n- You need to process audio or video files\r\n- The file is binary and cannot be read as text\r\n\r\nSupported formats:\r\n- Images: PNG, JPG, JPEG, GIF, WebP, BMP, ICO, TIFF, SVG\r\n- Documents: PDF\r\n- Audio: MP3, WAV, FLAC\r\n- Video: MP4, WebM, MOV\r\n\r\nThe file will be uploaded to the AI's context, allowing you to analyze, describe, or extract information from it.`,\r\n parameters: {\r\n type: 'object',\r\n properties: {\r\n reason_text: {\r\n type: 'string',\r\n description: 'A brief explanation of why you are reading this file (e.g., \"Analyzing the PDF to understand the project requirements\").',\r\n },\r\n file_path: {\r\n type: 'string',\r\n description: 'Path to the binary file to read. Can be absolute or relative (relative paths are resolved against the current working directory).',\r\n },\r\n },\r\n required: ['reason_text', 'file_path'],\r\n },\r\n },\r\n\r\n async execute(args, context): Promise<string> {\r\n let { file_path } = args;\r\n\r\n logDebug(`[read_binary_file] Starting to read file: ${file_path}`);\r\n\r\n // Automatically resolve relative paths to absolute paths using current working directory\r\n if (!path.isAbsolute(file_path)) {\r\n const resolvedPath = path.resolve(context.cwd, file_path);\r\n logDebug(`[read_binary_file] Resolved relative path \"${file_path}\" to absolute path \"${resolvedPath}\"`);\r\n file_path = resolvedPath;\r\n }\r\n\r\n // Check if file exists\r\n if (!fs.existsSync(file_path)) {\r\n return `Error: File not found: ${file_path}\r\n\r\nSuggestions:\r\n1. Check if the file path is correct\r\n2. Use 'find_files' or 'list_dir' to locate the file first`;\r\n }\r\n\r\n // Get MIME type from extension\r\n const mimeType = getMimeType(file_path);\r\n if (!mimeType) {\r\n const ext = path.extname(file_path).toLowerCase();\r\n const supportedExts = Object.keys(SUPPORTED_FILE_TYPES).join(', ');\r\n return `Error: Unsupported file type: ${ext}\r\n\r\nSupported file types: ${supportedExts}\r\n\r\nIf this is a text file, use 'view_file' instead.`;\r\n }\r\n\r\n // Check file size (limit to 50MB for Vertex AI)\r\n const stats = fs.statSync(file_path);\r\n const maxSize = 50 * 1024 * 1024; // 50MB\r\n if (stats.size > maxSize) {\r\n return `Error: File is too large (${formatFileSize(stats.size)}). Maximum size is 50MB.`;\r\n }\r\n\r\n // Read file as base64\r\n let fileData: string;\r\n try {\r\n const buffer = fs.readFileSync(file_path);\r\n fileData = buffer.toString('base64');\r\n logDebug(`[read_binary_file] Read ${stats.size} bytes, base64 length: ${fileData.length}`);\r\n } catch (error) {\r\n logError('Failed to read file', error instanceof Error ? error : undefined);\r\n return `Error: Failed to read file: ${error instanceof Error ? error.message : 'Unknown error'}`;\r\n }\r\n\r\n // Check if API client is authenticated\r\n if (!apiClient.isAuthenticated()) {\r\n return `Error: Not authenticated. Please sign in first to read files.\r\n\r\nThe file exists and is ${formatFileSize(stats.size)} but cannot be read without authentication.`;\r\n }\r\n\r\n // Get conversation ID from context (if available)\r\n // The cliAdapter should have the current conversation ID\r\n let conversationId = context.cliAdapter?.getCurrentConversationId?.();\r\n if (!conversationId) {\r\n // Generate a temporary conversation ID if none exists\r\n conversationId = `temp-${Date.now()}`;\r\n logDebug(`[read_binary_file] No conversation ID available, using temp: ${conversationId}`);\r\n }\r\n\r\n // Upload file to backend\r\n const fileName = path.basename(file_path);\r\n try {\r\n logDebug(`[read_binary_file] Uploading to backend, conversationId: ${conversationId}`);\r\n const uploadResult = await apiClient.uploadFile(\r\n conversationId,\r\n fileName,\r\n mimeType,\r\n fileData\r\n );\r\n\r\n logDebug(`[read_binary_file] Upload successful, gcsUri: ${uploadResult.gcsUri}`);\r\n\r\n const fileTypeDisplay = getFileTypeDisplay(mimeType);\r\n const sizeDisplay = formatFileSize(stats.size);\r\n\r\n if (uploadResult.gcsUri) {\r\n // Return success with the file reference that can be used by the AI\r\n return `Successfully read ${fileTypeDisplay} into AI context.\r\n\r\nFile: ${fileName}\r\nType: ${mimeType}\r\nSize: ${sizeDisplay}\r\n\r\n[FILE: ${fileName} (${uploadResult.gcsUri})]\r\n\r\nThe file is now available in your context. You can analyze, describe, or extract information from it in your response.`;\r\n } else {\r\n return `File read into storage but GCS URI not available.\r\n\r\nFile: ${fileName}\r\nType: ${mimeType}\r\nSize: ${sizeDisplay}\r\nStorage Path: ${uploadResult.storagePath}\r\n\r\nWarning: The file may not be accessible to the AI model.`;\r\n }\r\n } catch (error) {\r\n logError('Failed to upload file', error instanceof Error ? error : undefined);\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n\r\n // Provide helpful error messages\r\n if (errorMessage.includes('401') || errorMessage.includes('Authentication')) {\r\n return `Error: Authentication failed. Please sign in again with '/login'.`;\r\n }\r\n if (errorMessage.includes('timeout') || errorMessage.includes('ETIMEDOUT')) {\r\n return `Error: Read timed out. The file might be too large or the connection is slow.\r\n\r\nFile: ${fileName}\r\nSize: ${formatFileSize(stats.size)}`;\r\n }\r\n\r\n return `Error: Failed to read file: ${errorMessage}\r\n\r\nFile: ${fileName}\r\nSize: ${formatFileSize(stats.size)}`;\r\n }\r\n },\r\n};\r\n"],"mappings":"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","names":[]}
|