@google/gemini-cli-core 0.0.3-preview.4
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/LICENSE +202 -0
- package/README.md +310 -0
- package/dist/.last_build +0 -0
- package/dist/google-gemini-cli-core-0.3.0-preview.3.tgz +0 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__mocks__/fs/promises.d.ts +11 -0
- package/dist/src/__mocks__/fs/promises.js +17 -0
- package/dist/src/__mocks__/fs/promises.js.map +1 -0
- package/dist/src/code_assist/codeAssist.d.ts +10 -0
- package/dist/src/code_assist/codeAssist.js +19 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +72 -0
- package/dist/src/code_assist/converter.js +159 -0
- package/dist/src/code_assist/converter.js.map +1 -0
- package/dist/src/code_assist/converter.test.d.ts +6 -0
- package/dist/src/code_assist/converter.test.js +362 -0
- package/dist/src/code_assist/converter.test.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +22 -0
- package/dist/src/code_assist/oauth2.js +353 -0
- package/dist/src/code_assist/oauth2.js.map +1 -0
- package/dist/src/code_assist/oauth2.test.d.ts +6 -0
- package/dist/src/code_assist/oauth2.test.js +427 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -0
- package/dist/src/code_assist/server.d.ts +37 -0
- package/dist/src/code_assist/server.js +125 -0
- package/dist/src/code_assist/server.js.map +1 -0
- package/dist/src/code_assist/server.test.d.ts +6 -0
- package/dist/src/code_assist/server.test.js +134 -0
- package/dist/src/code_assist/server.test.js.map +1 -0
- package/dist/src/code_assist/setup.d.ts +20 -0
- package/dist/src/code_assist/setup.js +101 -0
- package/dist/src/code_assist/setup.js.map +1 -0
- package/dist/src/code_assist/setup.test.d.ts +6 -0
- package/dist/src/code_assist/setup.test.js +171 -0
- package/dist/src/code_assist/setup.test.js.map +1 -0
- package/dist/src/code_assist/types.d.ts +148 -0
- package/dist/src/code_assist/types.js +46 -0
- package/dist/src/code_assist/types.js.map +1 -0
- package/dist/src/config/config.d.ts +318 -0
- package/dist/src/config/config.js +633 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/config.test.d.ts +6 -0
- package/dist/src/config/config.test.js +585 -0
- package/dist/src/config/config.test.js.map +1 -0
- package/dist/src/config/flashFallback.test.d.ts +6 -0
- package/dist/src/config/flashFallback.test.js +87 -0
- package/dist/src/config/flashFallback.test.js.map +1 -0
- package/dist/src/config/models.d.ts +9 -0
- package/dist/src/config/models.js +10 -0
- package/dist/src/config/models.js.map +1 -0
- package/dist/src/config/storage.d.ts +32 -0
- package/dist/src/config/storage.js +90 -0
- package/dist/src/config/storage.js.map +1 -0
- package/dist/src/config/storage.test.d.ts +6 -0
- package/dist/src/config/storage.test.js +43 -0
- package/dist/src/config/storage.test.js.map +1 -0
- package/dist/src/core/client.d.ts +65 -0
- package/dist/src/core/client.js +689 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/client.test.d.ts +6 -0
- package/dist/src/core/client.test.js +1857 -0
- package/dist/src/core/client.test.js.map +1 -0
- package/dist/src/core/contentGenerator.d.ts +33 -0
- package/dist/src/core/contentGenerator.js +80 -0
- package/dist/src/core/contentGenerator.js.map +1 -0
- package/dist/src/core/contentGenerator.test.d.ts +6 -0
- package/dist/src/core/contentGenerator.test.js +124 -0
- package/dist/src/core/contentGenerator.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +126 -0
- package/dist/src/core/coreToolScheduler.js +605 -0
- package/dist/src/core/coreToolScheduler.js.map +1 -0
- package/dist/src/core/coreToolScheduler.test.d.ts +6 -0
- package/dist/src/core/coreToolScheduler.test.js +923 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +122 -0
- package/dist/src/core/geminiChat.js +547 -0
- package/dist/src/core/geminiChat.js.map +1 -0
- package/dist/src/core/geminiChat.test.d.ts +6 -0
- package/dist/src/core/geminiChat.test.js +875 -0
- package/dist/src/core/geminiChat.test.js.map +1 -0
- package/dist/src/core/geminiRequest.d.ts +13 -0
- package/dist/src/core/geminiRequest.js +11 -0
- package/dist/src/core/geminiRequest.js.map +1 -0
- package/dist/src/core/logger.d.ts +60 -0
- package/dist/src/core/logger.js +360 -0
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/logger.test.d.ts +6 -0
- package/dist/src/core/logger.test.js +534 -0
- package/dist/src/core/logger.test.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.d.ts +25 -0
- package/dist/src/core/loggingContentGenerator.js +97 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +10 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +24 -0
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +6 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js +236 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
- package/dist/src/core/prompts.d.ts +12 -0
- package/dist/src/core/prompts.js +359 -0
- package/dist/src/core/prompts.js.map +1 -0
- package/dist/src/core/prompts.test.d.ts +6 -0
- package/dist/src/core/prompts.test.js +214 -0
- package/dist/src/core/prompts.test.js.map +1 -0
- package/dist/src/core/subagent.d.ts +236 -0
- package/dist/src/core/subagent.js +485 -0
- package/dist/src/core/subagent.js.map +1 -0
- package/dist/src/core/subagent.test.d.ts +6 -0
- package/dist/src/core/subagent.test.js +520 -0
- package/dist/src/core/subagent.test.js.map +1 -0
- package/dist/src/core/tokenLimits.d.ts +10 -0
- package/dist/src/core/tokenLimits.js +28 -0
- package/dist/src/core/tokenLimits.js.map +1 -0
- package/dist/src/core/turn.d.ts +125 -0
- package/dist/src/core/turn.js +154 -0
- package/dist/src/core/turn.js.map +1 -0
- package/dist/src/core/turn.test.d.ts +6 -0
- package/dist/src/core/turn.test.js +388 -0
- package/dist/src/core/turn.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +7 -0
- package/dist/src/generated/git-commit.js +10 -0
- package/dist/src/generated/git-commit.js.map +1 -0
- package/dist/src/ide/constants.d.ts +6 -0
- package/dist/src/ide/constants.js +7 -0
- package/dist/src/ide/constants.js.map +1 -0
- package/dist/src/ide/detect-ide.d.ts +25 -0
- package/dist/src/ide/detect-ide.js +104 -0
- package/dist/src/ide/detect-ide.js.map +1 -0
- package/dist/src/ide/detect-ide.test.d.ts +6 -0
- package/dist/src/ide/detect-ide.test.js +109 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +67 -0
- package/dist/src/ide/ide-client.js +418 -0
- package/dist/src/ide/ide-client.js.map +1 -0
- package/dist/src/ide/ide-client.test.d.ts +6 -0
- package/dist/src/ide/ide-client.test.js +155 -0
- package/dist/src/ide/ide-client.test.js.map +1 -0
- package/dist/src/ide/ide-installer.d.ts +14 -0
- package/dist/src/ide/ide-installer.js +107 -0
- package/dist/src/ide/ide-installer.js.map +1 -0
- package/dist/src/ide/ide-installer.test.d.ts +6 -0
- package/dist/src/ide/ide-installer.test.js +113 -0
- package/dist/src/ide/ide-installer.test.js.map +1 -0
- package/dist/src/ide/ideContext.d.ts +374 -0
- package/dist/src/ide/ideContext.js +147 -0
- package/dist/src/ide/ideContext.js.map +1 -0
- package/dist/src/ide/ideContext.test.d.ts +6 -0
- package/dist/src/ide/ideContext.test.js +265 -0
- package/dist/src/ide/ideContext.test.js.map +1 -0
- package/dist/src/ide/process-utils.d.ts +22 -0
- package/dist/src/ide/process-utils.js +153 -0
- package/dist/src/ide/process-utils.js.map +1 -0
- package/dist/src/ide/process-utils.test.d.ts +6 -0
- package/dist/src/ide/process-utils.test.js +72 -0
- package/dist/src/ide/process-utils.test.js.map +1 -0
- package/dist/src/index.d.ts +81 -0
- package/dist/src/index.js +90 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +6 -0
- package/dist/src/index.test.js +12 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.d.ts +23 -0
- package/dist/src/mcp/google-auth-provider.js +72 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.test.d.ts +6 -0
- package/dist/src/mcp/google-auth-provider.test.js +89 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +146 -0
- package/dist/src/mcp/oauth-provider.js +601 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
- package/dist/src/mcp/oauth-provider.test.js +672 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +61 -0
- package/dist/src/mcp/oauth-token-storage.js +148 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/oauth-token-storage.test.js +206 -0
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
- package/dist/src/mcp/oauth-utils.d.ts +119 -0
- package/dist/src/mcp/oauth-utils.js +235 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -0
- package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
- package/dist/src/mcp/oauth-utils.test.js +199 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
- package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
- package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.js +160 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +34 -0
- package/dist/src/mcp/token-storage/types.js +7 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -0
- package/dist/src/mocks/msw.d.ts +6 -0
- package/dist/src/mocks/msw.js +8 -0
- package/dist/src/mocks/msw.js.map +1 -0
- package/dist/src/prompts/mcp-prompts.d.ts +8 -0
- package/dist/src/prompts/mcp-prompts.js +13 -0
- package/dist/src/prompts/mcp-prompts.js.map +1 -0
- package/dist/src/prompts/prompt-registry.d.ts +34 -0
- package/dist/src/prompts/prompt-registry.js +63 -0
- package/dist/src/prompts/prompt-registry.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +150 -0
- package/dist/src/services/chatRecordingService.js +321 -0
- package/dist/src/services/chatRecordingService.js.map +1 -0
- package/dist/src/services/chatRecordingService.test.d.ts +6 -0
- package/dist/src/services/chatRecordingService.test.js +290 -0
- package/dist/src/services/chatRecordingService.test.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.d.ts +35 -0
- package/dist/src/services/fileDiscoveryService.js +91 -0
- package/dist/src/services/fileDiscoveryService.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.test.d.ts +6 -0
- package/dist/src/services/fileDiscoveryService.test.js +143 -0
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -0
- package/dist/src/services/fileSystemService.d.ts +31 -0
- package/dist/src/services/fileSystemService.js +18 -0
- package/dist/src/services/fileSystemService.js.map +1 -0
- package/dist/src/services/fileSystemService.test.d.ts +6 -0
- package/dist/src/services/fileSystemService.test.js +41 -0
- package/dist/src/services/fileSystemService.test.js.map +1 -0
- package/dist/src/services/gitService.d.ts +23 -0
- package/dist/src/services/gitService.js +110 -0
- package/dist/src/services/gitService.js.map +1 -0
- package/dist/src/services/gitService.test.d.ts +6 -0
- package/dist/src/services/gitService.test.js +212 -0
- package/dist/src/services/gitService.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +98 -0
- package/dist/src/services/loopDetectionService.js +363 -0
- package/dist/src/services/loopDetectionService.js.map +1 -0
- package/dist/src/services/loopDetectionService.test.d.ts +6 -0
- package/dist/src/services/loopDetectionService.test.js +558 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +68 -0
- package/dist/src/services/shellExecutionService.js +332 -0
- package/dist/src/services/shellExecutionService.js.map +1 -0
- package/dist/src/services/shellExecutionService.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.test.js +517 -0
- package/dist/src/services/shellExecutionService.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +121 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +773 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +17 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +407 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +90 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +229 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +32 -0
- package/dist/src/telemetry/constants.js +33 -0
- package/dist/src/telemetry/constants.js.map +1 -0
- package/dist/src/telemetry/file-exporters.d.ts +29 -0
- package/dist/src/telemetry/file-exporters.js +62 -0
- package/dist/src/telemetry/file-exporters.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +21 -0
- package/dist/src/telemetry/index.js +21 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
- package/dist/src/telemetry/integration.test.circular.js +54 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +26 -0
- package/dist/src/telemetry/loggers.js +404 -0
- package/dist/src/telemetry/loggers.js.map +1 -0
- package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.circular.js +107 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.test.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.js +658 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +36 -0
- package/dist/src/telemetry/metrics.js +208 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/metrics.test.d.ts +6 -0
- package/dist/src/telemetry/metrics.test.js +242 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +9 -0
- package/dist/src/telemetry/sdk.js +163 -0
- package/dist/src/telemetry/sdk.js.map +1 -0
- package/dist/src/telemetry/sdk.test.d.ts +6 -0
- package/dist/src/telemetry/sdk.test.js +82 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.js +14 -0
- package/dist/src/telemetry/telemetry-utils.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.test.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.test.js +40 -0
- package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
- package/dist/src/telemetry/telemetry.test.d.ts +6 -0
- package/dist/src/telemetry/telemetry.test.js +50 -0
- package/dist/src/telemetry/telemetry.test.js.map +1 -0
- package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
- package/dist/src/telemetry/tool-call-decision.js +29 -0
- package/dist/src/telemetry/tool-call-decision.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +220 -0
- package/dist/src/telemetry/types.js +383 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.d.ts +75 -0
- package/dist/src/telemetry/uiTelemetry.js +153 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.test.d.ts +6 -0
- package/dist/src/telemetry/uiTelemetry.test.js +558 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -0
- package/dist/src/test-utils/config.d.ts +17 -0
- package/dist/src/test-utils/config.js +32 -0
- package/dist/src/test-utils/config.js.map +1 -0
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
- package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
- package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
- package/dist/src/test-utils/tools.d.ts +45 -0
- package/dist/src/test-utils/tools.js +105 -0
- package/dist/src/test-utils/tools.js.map +1 -0
- package/dist/src/tools/diffOptions.d.ts +9 -0
- package/dist/src/tools/diffOptions.js +38 -0
- package/dist/src/tools/diffOptions.js.map +1 -0
- package/dist/src/tools/diffOptions.test.d.ts +6 -0
- package/dist/src/tools/diffOptions.test.js +119 -0
- package/dist/src/tools/diffOptions.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +56 -0
- package/dist/src/tools/edit.js +423 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/edit.test.d.ts +6 -0
- package/dist/src/tools/edit.test.js +713 -0
- package/dist/src/tools/edit.test.js.map +1 -0
- package/dist/src/tools/glob.d.ts +52 -0
- package/dist/src/tools/glob.js +236 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/glob.test.d.ts +6 -0
- package/dist/src/tools/glob.test.js +375 -0
- package/dist/src/tools/glob.test.js.map +1 -0
- package/dist/src/tools/grep.d.ts +47 -0
- package/dist/src/tools/grep.js +517 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/grep.test.d.ts +6 -0
- package/dist/src/tools/grep.test.js +295 -0
- package/dist/src/tools/grep.test.js.map +1 -0
- package/dist/src/tools/ls.d.ts +68 -0
- package/dist/src/tools/ls.js +227 -0
- package/dist/src/tools/ls.js.map +1 -0
- package/dist/src/tools/ls.test.d.ts +6 -0
- package/dist/src/tools/ls.test.js +389 -0
- package/dist/src/tools/ls.test.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.d.ts +38 -0
- package/dist/src/tools/mcp-client-manager.js +74 -0
- package/dist/src/tools/mcp-client-manager.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.test.d.ts +6 -0
- package/dist/src/tools/mcp-client-manager.test.js +39 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
- package/dist/src/tools/mcp-client.d.ts +199 -0
- package/dist/src/tools/mcp-client.js +995 -0
- package/dist/src/tools/mcp-client.js.map +1 -0
- package/dist/src/tools/mcp-client.test.d.ts +6 -0
- package/dist/src/tools/mcp-client.test.js +454 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +23 -0
- package/dist/src/tools/mcp-tool.js +240 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/mcp-tool.test.d.ts +6 -0
- package/dist/src/tools/mcp-tool.test.js +576 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +40 -0
- package/dist/src/tools/memoryTool.js +296 -0
- package/dist/src/tools/memoryTool.js.map +1 -0
- package/dist/src/tools/memoryTool.test.d.ts +6 -0
- package/dist/src/tools/memoryTool.test.js +298 -0
- package/dist/src/tools/memoryTool.test.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +32 -0
- package/dist/src/tools/modifiable-tool.js +88 -0
- package/dist/src/tools/modifiable-tool.js.map +1 -0
- package/dist/src/tools/modifiable-tool.test.d.ts +6 -0
- package/dist/src/tools/modifiable-tool.test.js +193 -0
- package/dist/src/tools/modifiable-tool.test.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +35 -0
- package/dist/src/tools/read-file.js +127 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/read-file.test.d.ts +6 -0
- package/dist/src/tools/read-file.test.js +311 -0
- package/dist/src/tools/read-file.test.js.map +1 -0
- package/dist/src/tools/read-many-files.d.ts +60 -0
- package/dist/src/tools/read-many-files.js +414 -0
- package/dist/src/tools/read-many-files.js.map +1 -0
- package/dist/src/tools/read-many-files.test.d.ts +6 -0
- package/dist/src/tools/read-many-files.test.js +565 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +47 -0
- package/dist/src/tools/ripGrep.js +368 -0
- package/dist/src/tools/ripGrep.js.map +1 -0
- package/dist/src/tools/ripGrep.test.d.ts +6 -0
- package/dist/src/tools/ripGrep.test.js +874 -0
- package/dist/src/tools/ripGrep.test.js.map +1 -0
- package/dist/src/tools/shell.d.ts +22 -0
- package/dist/src/tools/shell.js +320 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/shell.test.d.ts +6 -0
- package/dist/src/tools/shell.test.js +336 -0
- package/dist/src/tools/shell.test.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +43 -0
- package/dist/src/tools/tool-error.js +58 -0
- package/dist/src/tools/tool-error.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +86 -0
- package/dist/src/tools/tool-registry.js +369 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/tools/tool-registry.test.d.ts +6 -0
- package/dist/src/tools/tool-registry.test.js +332 -0
- package/dist/src/tools/tool-registry.test.js.map +1 -0
- package/dist/src/tools/tools.d.ts +274 -0
- package/dist/src/tools/tools.js +250 -0
- package/dist/src/tools/tools.js.map +1 -0
- package/dist/src/tools/tools.test.d.ts +6 -0
- package/dist/src/tools/tools.test.js +205 -0
- package/dist/src/tools/tools.test.js.map +1 -0
- package/dist/src/tools/web-fetch.d.ts +27 -0
- package/dist/src/tools/web-fetch.js +243 -0
- package/dist/src/tools/web-fetch.js.map +1 -0
- package/dist/src/tools/web-fetch.test.d.ts +6 -0
- package/dist/src/tools/web-fetch.test.js +114 -0
- package/dist/src/tools/web-fetch.test.js.map +1 -0
- package/dist/src/tools/web-search.d.ts +49 -0
- package/dist/src/tools/web-search.js +137 -0
- package/dist/src/tools/web-search.js.map +1 -0
- package/dist/src/tools/web-search.test.d.ts +6 -0
- package/dist/src/tools/web-search.test.js +207 -0
- package/dist/src/tools/web-search.test.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +52 -0
- package/dist/src/tools/write-file.js +314 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/tools/write-file.test.d.ts +6 -0
- package/dist/src/tools/write-file.test.js +531 -0
- package/dist/src/tools/write-file.test.js.map +1 -0
- package/dist/src/utils/LruCache.d.ts +13 -0
- package/dist/src/utils/LruCache.js +38 -0
- package/dist/src/utils/LruCache.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +24 -0
- package/dist/src/utils/bfsFileSearch.js +89 -0
- package/dist/src/utils/bfsFileSearch.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.test.d.ts +6 -0
- package/dist/src/utils/bfsFileSearch.test.js +163 -0
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -0
- package/dist/src/utils/browser.d.ts +13 -0
- package/dist/src/utils/browser.js +50 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/editCorrector.d.ts +53 -0
- package/dist/src/utils/editCorrector.js +545 -0
- package/dist/src/utils/editCorrector.js.map +1 -0
- package/dist/src/utils/editCorrector.test.d.ts +6 -0
- package/dist/src/utils/editCorrector.test.js +564 -0
- package/dist/src/utils/editCorrector.test.js.map +1 -0
- package/dist/src/utils/editor.d.ts +28 -0
- package/dist/src/utils/editor.js +186 -0
- package/dist/src/utils/editor.js.map +1 -0
- package/dist/src/utils/editor.test.d.ts +6 -0
- package/dist/src/utils/editor.test.js +445 -0
- package/dist/src/utils/editor.test.js.map +1 -0
- package/dist/src/utils/environmentContext.d.ts +21 -0
- package/dist/src/utils/environmentContext.js +90 -0
- package/dist/src/utils/environmentContext.js.map +1 -0
- package/dist/src/utils/environmentContext.test.d.ts +6 -0
- package/dist/src/utils/environmentContext.test.js +140 -0
- package/dist/src/utils/environmentContext.test.js.map +1 -0
- package/dist/src/utils/errorParsing.d.ts +8 -0
- package/dist/src/utils/errorParsing.js +93 -0
- package/dist/src/utils/errorParsing.js.map +1 -0
- package/dist/src/utils/errorParsing.test.d.ts +6 -0
- package/dist/src/utils/errorParsing.test.js +172 -0
- package/dist/src/utils/errorParsing.test.js.map +1 -0
- package/dist/src/utils/errorReporting.d.ts +14 -0
- package/dist/src/utils/errorReporting.js +88 -0
- package/dist/src/utils/errorReporting.js.map +1 -0
- package/dist/src/utils/errorReporting.test.d.ts +6 -0
- package/dist/src/utils/errorReporting.test.js +130 -0
- package/dist/src/utils/errorReporting.test.js.map +1 -0
- package/dist/src/utils/errors.d.ts +33 -0
- package/dist/src/utils/errors.js +86 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +11 -0
- package/dist/src/utils/fetch.js +51 -0
- package/dist/src/utils/fetch.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +52 -0
- package/dist/src/utils/fileUtils.js +283 -0
- package/dist/src/utils/fileUtils.js.map +1 -0
- package/dist/src/utils/fileUtils.test.d.ts +6 -0
- package/dist/src/utils/fileUtils.test.js +364 -0
- package/dist/src/utils/fileUtils.test.js.map +1 -0
- package/dist/src/utils/filesearch/crawlCache.d.ts +25 -0
- package/dist/src/utils/filesearch/crawlCache.js +57 -0
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -0
- package/dist/src/utils/filesearch/crawlCache.test.d.ts +6 -0
- package/dist/src/utils/filesearch/crawlCache.test.js +103 -0
- package/dist/src/utils/filesearch/crawlCache.test.js.map +1 -0
- package/dist/src/utils/filesearch/crawler.d.ts +15 -0
- package/dist/src/utils/filesearch/crawler.js +50 -0
- package/dist/src/utils/filesearch/crawler.js.map +1 -0
- package/dist/src/utils/filesearch/crawler.test.d.ts +6 -0
- package/dist/src/utils/filesearch/crawler.test.js +468 -0
- package/dist/src/utils/filesearch/crawler.test.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.d.ts +38 -0
- package/dist/src/utils/filesearch/fileSearch.js +191 -0
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.test.d.ts +6 -0
- package/dist/src/utils/filesearch/fileSearch.test.js +642 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.d.ts +42 -0
- package/dist/src/utils/filesearch/ignore.js +106 -0
- package/dist/src/utils/filesearch/ignore.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.test.d.ts +6 -0
- package/dist/src/utils/filesearch/ignore.test.js +144 -0
- package/dist/src/utils/filesearch/ignore.test.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.d.ts +33 -0
- package/dist/src/utils/filesearch/result-cache.js +59 -0
- package/dist/src/utils/filesearch/result-cache.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.test.d.ts +6 -0
- package/dist/src/utils/filesearch/result-cache.test.js +46 -0
- package/dist/src/utils/filesearch/result-cache.test.js.map +1 -0
- package/dist/src/utils/flashFallback.integration.test.d.ts +6 -0
- package/dist/src/utils/flashFallback.integration.test.js +118 -0
- package/dist/src/utils/flashFallback.integration.test.js.map +1 -0
- package/dist/src/utils/formatters.d.ts +6 -0
- package/dist/src/utils/formatters.js +16 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.d.ts +13 -0
- package/dist/src/utils/generateContentResponseUtilities.js +80 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.test.d.ts +6 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js +235 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -0
- package/dist/src/utils/getFolderStructure.d.ts +31 -0
- package/dist/src/utils/getFolderStructure.js +246 -0
- package/dist/src/utils/getFolderStructure.js.map +1 -0
- package/dist/src/utils/getFolderStructure.test.d.ts +6 -0
- package/dist/src/utils/getFolderStructure.test.js +282 -0
- package/dist/src/utils/getFolderStructure.test.js.map +1 -0
- package/dist/src/utils/getPty.d.ts +19 -0
- package/dist/src/utils/getPty.js +23 -0
- package/dist/src/utils/getPty.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.d.ts +20 -0
- package/dist/src/utils/gitIgnoreParser.js +61 -0
- package/dist/src/utils/gitIgnoreParser.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/gitIgnoreParser.test.js +154 -0
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +17 -0
- package/dist/src/utils/gitUtils.js +61 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/ignorePatterns.d.ts +103 -0
- package/dist/src/utils/ignorePatterns.js +220 -0
- package/dist/src/utils/ignorePatterns.js.map +1 -0
- package/dist/src/utils/ignorePatterns.test.d.ts +6 -0
- package/dist/src/utils/ignorePatterns.test.js +250 -0
- package/dist/src/utils/ignorePatterns.test.js.map +1 -0
- package/dist/src/utils/installationManager.d.ts +16 -0
- package/dist/src/utils/installationManager.js +50 -0
- package/dist/src/utils/installationManager.js.map +1 -0
- package/dist/src/utils/installationManager.test.d.ts +6 -0
- package/dist/src/utils/installationManager.test.js +83 -0
- package/dist/src/utils/installationManager.test.js.map +1 -0
- package/dist/src/utils/language-detection.d.ts +6 -0
- package/dist/src/utils/language-detection.js +101 -0
- package/dist/src/utils/language-detection.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +15 -0
- package/dist/src/utils/memoryDiscovery.js +253 -0
- package/dist/src/utils/memoryDiscovery.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.test.d.ts +6 -0
- package/dist/src/utils/memoryDiscovery.test.js +219 -0
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.d.ts +42 -0
- package/dist/src/utils/memoryImportProcessor.js +296 -0
- package/dist/src/utils/memoryImportProcessor.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.test.d.ts +6 -0
- package/dist/src/utils/memoryImportProcessor.test.js +573 -0
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -0
- package/dist/src/utils/messageInspectors.d.ts +8 -0
- package/dist/src/utils/messageInspectors.js +16 -0
- package/dist/src/utils/messageInspectors.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
- package/dist/src/utils/nextSpeakerChecker.js +91 -0
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.test.d.ts +6 -0
- package/dist/src/utils/nextSpeakerChecker.test.js +168 -0
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -0
- package/dist/src/utils/partUtils.d.ts +35 -0
- package/dist/src/utils/partUtils.js +133 -0
- package/dist/src/utils/partUtils.js.map +1 -0
- package/dist/src/utils/partUtils.test.d.ts +6 -0
- package/dist/src/utils/partUtils.test.js +241 -0
- package/dist/src/utils/partUtils.test.js.map +1 -0
- package/dist/src/utils/pathReader.d.ts +17 -0
- package/dist/src/utils/pathReader.js +92 -0
- package/dist/src/utils/pathReader.js.map +1 -0
- package/dist/src/utils/pathReader.test.d.ts +6 -0
- package/dist/src/utils/pathReader.test.js +363 -0
- package/dist/src/utils/pathReader.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +58 -0
- package/dist/src/utils/paths.js +159 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/paths.test.d.ts +6 -0
- package/dist/src/utils/paths.test.js +225 -0
- package/dist/src/utils/paths.test.js.map +1 -0
- package/dist/src/utils/quotaErrorDetection.d.ts +18 -0
- package/dist/src/utils/quotaErrorDetection.js +65 -0
- package/dist/src/utils/quotaErrorDetection.js.map +1 -0
- package/dist/src/utils/retry.d.ts +30 -0
- package/dist/src/utils/retry.js +276 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/retry.test.d.ts +6 -0
- package/dist/src/utils/retry.test.js +325 -0
- package/dist/src/utils/retry.test.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +25 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
- package/dist/src/utils/safeJsonStringify.test.js +61 -0
- package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +15 -0
- package/dist/src/utils/schemaValidator.js +38 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
- package/dist/src/utils/secure-browser-launcher.js +165 -0
- package/dist/src/utils/secure-browser-launcher.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
- package/dist/src/utils/secure-browser-launcher.test.js +149 -0
- package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
- package/dist/src/utils/session.d.ts +6 -0
- package/dist/src/utils/session.js +8 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +117 -0
- package/dist/src/utils/shell-utils.js +370 -0
- package/dist/src/utils/shell-utils.js.map +1 -0
- package/dist/src/utils/shell-utils.test.d.ts +6 -0
- package/dist/src/utils/shell-utils.test.js +332 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +25 -0
- package/dist/src/utils/summarizer.js +51 -0
- package/dist/src/utils/summarizer.js.map +1 -0
- package/dist/src/utils/summarizer.test.d.ts +6 -0
- package/dist/src/utils/summarizer.test.js +131 -0
- package/dist/src/utils/summarizer.test.js.map +1 -0
- package/dist/src/utils/systemEncoding.d.ts +40 -0
- package/dist/src/utils/systemEncoding.js +149 -0
- package/dist/src/utils/systemEncoding.js.map +1 -0
- package/dist/src/utils/systemEncoding.test.d.ts +6 -0
- package/dist/src/utils/systemEncoding.test.js +368 -0
- package/dist/src/utils/systemEncoding.test.js.map +1 -0
- package/dist/src/utils/testUtils.d.ts +29 -0
- package/dist/src/utils/testUtils.js +70 -0
- package/dist/src/utils/testUtils.js.map +1 -0
- package/dist/src/utils/textUtils.d.ts +13 -0
- package/dist/src/utils/textUtils.js +28 -0
- package/dist/src/utils/textUtils.js.map +1 -0
- package/dist/src/utils/tool-utils.d.ts +19 -0
- package/dist/src/utils/tool-utils.js +58 -0
- package/dist/src/utils/tool-utils.js.map +1 -0
- package/dist/src/utils/tool-utils.test.d.ts +6 -0
- package/dist/src/utils/tool-utils.test.js +61 -0
- package/dist/src/utils/tool-utils.test.js.map +1 -0
- package/dist/src/utils/userAccountManager.d.ts +20 -0
- package/dist/src/utils/userAccountManager.js +114 -0
- package/dist/src/utils/userAccountManager.js.map +1 -0
- package/dist/src/utils/userAccountManager.test.d.ts +6 -0
- package/dist/src/utils/userAccountManager.test.js +223 -0
- package/dist/src/utils/userAccountManager.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.d.ts +66 -0
- package/dist/src/utils/workspaceContext.js +171 -0
- package/dist/src/utils/workspaceContext.js.map +1 -0
- package/dist/src/utils/workspaceContext.test.d.ts +6 -0
- package/dist/src/utils/workspaceContext.test.js +318 -0
- package/dist/src/utils/workspaceContext.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
+
import { Config, ApprovalMode } from '../config/config.js';
|
|
8
|
+
import { ToolRegistry, DiscoveredTool } from './tool-registry.js';
|
|
9
|
+
import { DiscoveredMCPTool } from './mcp-tool.js';
|
|
10
|
+
import { mcpToTool } from '@google/genai';
|
|
11
|
+
import { spawn } from 'node:child_process';
|
|
12
|
+
import fs from 'node:fs';
|
|
13
|
+
import { MockTool } from '../test-utils/tools.js';
|
|
14
|
+
import { McpClientManager } from './mcp-client-manager.js';
|
|
15
|
+
import { ToolErrorType } from './tool-error.js';
|
|
16
|
+
vi.mock('node:fs');
|
|
17
|
+
// Mock ./mcp-client.js to control its behavior within tool-registry tests
|
|
18
|
+
vi.mock('./mcp-client.js', async () => {
|
|
19
|
+
const originalModule = await vi.importActual('./mcp-client.js');
|
|
20
|
+
return {
|
|
21
|
+
...originalModule,
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
// Mock node:child_process
|
|
25
|
+
vi.mock('node:child_process', async () => {
|
|
26
|
+
const actual = await vi.importActual('node:child_process');
|
|
27
|
+
return {
|
|
28
|
+
...actual,
|
|
29
|
+
execSync: vi.fn(),
|
|
30
|
+
spawn: vi.fn(),
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
// Mock MCP SDK Client and Transports
|
|
34
|
+
const mockMcpClientConnect = vi.fn();
|
|
35
|
+
const mockMcpClientOnError = vi.fn();
|
|
36
|
+
const mockStdioTransportClose = vi.fn();
|
|
37
|
+
const mockSseTransportClose = vi.fn();
|
|
38
|
+
vi.mock('@modelcontextprotocol/sdk/client/index.js', () => {
|
|
39
|
+
const MockClient = vi.fn().mockImplementation(() => ({
|
|
40
|
+
connect: mockMcpClientConnect,
|
|
41
|
+
set onerror(handler) {
|
|
42
|
+
mockMcpClientOnError(handler);
|
|
43
|
+
},
|
|
44
|
+
}));
|
|
45
|
+
return { Client: MockClient };
|
|
46
|
+
});
|
|
47
|
+
vi.mock('@modelcontextprotocol/sdk/client/stdio.js', () => {
|
|
48
|
+
const MockStdioClientTransport = vi.fn().mockImplementation(() => ({
|
|
49
|
+
stderr: {
|
|
50
|
+
on: vi.fn(),
|
|
51
|
+
},
|
|
52
|
+
close: mockStdioTransportClose,
|
|
53
|
+
}));
|
|
54
|
+
return { StdioClientTransport: MockStdioClientTransport };
|
|
55
|
+
});
|
|
56
|
+
vi.mock('@modelcontextprotocol/sdk/client/sse.js', () => {
|
|
57
|
+
const MockSSEClientTransport = vi.fn().mockImplementation(() => ({
|
|
58
|
+
close: mockSseTransportClose,
|
|
59
|
+
}));
|
|
60
|
+
return { SSEClientTransport: MockSSEClientTransport };
|
|
61
|
+
});
|
|
62
|
+
// Mock @google/genai mcpToTool
|
|
63
|
+
vi.mock('@google/genai', async () => {
|
|
64
|
+
const actualGenai = await vi.importActual('@google/genai');
|
|
65
|
+
return {
|
|
66
|
+
...actualGenai,
|
|
67
|
+
mcpToTool: vi.fn().mockImplementation(() => ({
|
|
68
|
+
tool: vi.fn().mockResolvedValue({ functionDeclarations: [] }),
|
|
69
|
+
callTool: vi.fn(),
|
|
70
|
+
})),
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
// Helper to create a mock CallableTool for specific test needs
|
|
74
|
+
const createMockCallableTool = (toolDeclarations) => ({
|
|
75
|
+
tool: vi.fn().mockResolvedValue({ functionDeclarations: toolDeclarations }),
|
|
76
|
+
callTool: vi.fn(),
|
|
77
|
+
});
|
|
78
|
+
const baseConfigParams = {
|
|
79
|
+
cwd: '/tmp',
|
|
80
|
+
model: 'test-model',
|
|
81
|
+
embeddingModel: 'test-embedding-model',
|
|
82
|
+
sandbox: undefined,
|
|
83
|
+
targetDir: '/test/dir',
|
|
84
|
+
debugMode: false,
|
|
85
|
+
userMemory: '',
|
|
86
|
+
geminiMdFileCount: 0,
|
|
87
|
+
approvalMode: ApprovalMode.DEFAULT,
|
|
88
|
+
sessionId: 'test-session-id',
|
|
89
|
+
};
|
|
90
|
+
describe('ToolRegistry', () => {
|
|
91
|
+
let config;
|
|
92
|
+
let toolRegistry;
|
|
93
|
+
let mockConfigGetToolDiscoveryCommand;
|
|
94
|
+
beforeEach(() => {
|
|
95
|
+
vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
96
|
+
vi.mocked(fs.statSync).mockReturnValue({
|
|
97
|
+
isDirectory: () => true,
|
|
98
|
+
});
|
|
99
|
+
config = new Config(baseConfigParams);
|
|
100
|
+
toolRegistry = new ToolRegistry(config);
|
|
101
|
+
vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
102
|
+
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
103
|
+
vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
104
|
+
vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
105
|
+
mockMcpClientConnect.mockReset().mockResolvedValue(undefined);
|
|
106
|
+
mockStdioTransportClose.mockReset();
|
|
107
|
+
mockSseTransportClose.mockReset();
|
|
108
|
+
vi.mocked(mcpToTool).mockClear();
|
|
109
|
+
vi.mocked(mcpToTool).mockReturnValue(createMockCallableTool([]));
|
|
110
|
+
mockConfigGetToolDiscoveryCommand = vi.spyOn(config, 'getToolDiscoveryCommand');
|
|
111
|
+
vi.spyOn(config, 'getMcpServers');
|
|
112
|
+
vi.spyOn(config, 'getMcpServerCommand');
|
|
113
|
+
vi.spyOn(config, 'getPromptRegistry').mockReturnValue({
|
|
114
|
+
clear: vi.fn(),
|
|
115
|
+
removePromptsByServer: vi.fn(),
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
afterEach(() => {
|
|
119
|
+
vi.restoreAllMocks();
|
|
120
|
+
});
|
|
121
|
+
describe('registerTool', () => {
|
|
122
|
+
it('should register a new tool', () => {
|
|
123
|
+
const tool = new MockTool();
|
|
124
|
+
toolRegistry.registerTool(tool);
|
|
125
|
+
expect(toolRegistry.getTool('mock-tool')).toBe(tool);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('getAllTools', () => {
|
|
129
|
+
it('should return all registered tools sorted alphabetically by displayName', () => {
|
|
130
|
+
// Register tools with displayNames in non-alphabetical order
|
|
131
|
+
const toolC = new MockTool('c-tool', 'Tool C');
|
|
132
|
+
const toolA = new MockTool('a-tool', 'Tool A');
|
|
133
|
+
const toolB = new MockTool('b-tool', 'Tool B');
|
|
134
|
+
toolRegistry.registerTool(toolC);
|
|
135
|
+
toolRegistry.registerTool(toolA);
|
|
136
|
+
toolRegistry.registerTool(toolB);
|
|
137
|
+
const allTools = toolRegistry.getAllTools();
|
|
138
|
+
const displayNames = allTools.map((t) => t.displayName);
|
|
139
|
+
// Assert that the returned array is sorted by displayName
|
|
140
|
+
expect(displayNames).toEqual(['Tool A', 'Tool B', 'Tool C']);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('getAllToolNames', () => {
|
|
144
|
+
it('should return all registered tool names', () => {
|
|
145
|
+
// Register tools with displayNames in non-alphabetical order
|
|
146
|
+
const toolC = new MockTool('c-tool', 'Tool C');
|
|
147
|
+
const toolA = new MockTool('a-tool', 'Tool A');
|
|
148
|
+
const toolB = new MockTool('b-tool', 'Tool B');
|
|
149
|
+
toolRegistry.registerTool(toolC);
|
|
150
|
+
toolRegistry.registerTool(toolA);
|
|
151
|
+
toolRegistry.registerTool(toolB);
|
|
152
|
+
const toolNames = toolRegistry.getAllToolNames();
|
|
153
|
+
// Assert that the returned array contains all tool names
|
|
154
|
+
expect(toolNames).toEqual(['c-tool', 'a-tool', 'b-tool']);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('getToolsByServer', () => {
|
|
158
|
+
it('should return an empty array if no tools match the server name', () => {
|
|
159
|
+
toolRegistry.registerTool(new MockTool());
|
|
160
|
+
expect(toolRegistry.getToolsByServer('any-mcp-server')).toEqual([]);
|
|
161
|
+
});
|
|
162
|
+
it('should return only tools matching the server name, sorted by name', async () => {
|
|
163
|
+
const server1Name = 'mcp-server-uno';
|
|
164
|
+
const server2Name = 'mcp-server-dos';
|
|
165
|
+
const mockCallable = {};
|
|
166
|
+
const mcpTool1_c = new DiscoveredMCPTool(mockCallable, server1Name, 'zebra-tool', 'd1', {});
|
|
167
|
+
const mcpTool1_a = new DiscoveredMCPTool(mockCallable, server1Name, 'apple-tool', 'd2', {});
|
|
168
|
+
const mcpTool1_b = new DiscoveredMCPTool(mockCallable, server1Name, 'banana-tool', 'd3', {});
|
|
169
|
+
const mcpTool2 = new DiscoveredMCPTool(mockCallable, server2Name, 'tool-on-server2', 'd4', {});
|
|
170
|
+
const nonMcpTool = new MockTool('regular-tool');
|
|
171
|
+
toolRegistry.registerTool(mcpTool1_c);
|
|
172
|
+
toolRegistry.registerTool(mcpTool1_a);
|
|
173
|
+
toolRegistry.registerTool(mcpTool1_b);
|
|
174
|
+
toolRegistry.registerTool(mcpTool2);
|
|
175
|
+
toolRegistry.registerTool(nonMcpTool);
|
|
176
|
+
const toolsFromServer1 = toolRegistry.getToolsByServer(server1Name);
|
|
177
|
+
const toolNames = toolsFromServer1.map((t) => t.name);
|
|
178
|
+
// Assert that the array has the correct tools and is sorted by name
|
|
179
|
+
expect(toolsFromServer1).toHaveLength(3);
|
|
180
|
+
expect(toolNames).toEqual(['apple-tool', 'banana-tool', 'zebra-tool']);
|
|
181
|
+
// Assert that all returned tools are indeed from the correct server
|
|
182
|
+
for (const tool of toolsFromServer1) {
|
|
183
|
+
expect(tool.serverName).toBe(server1Name);
|
|
184
|
+
}
|
|
185
|
+
// Assert that the other server's tools are returned correctly
|
|
186
|
+
const toolsFromServer2 = toolRegistry.getToolsByServer(server2Name);
|
|
187
|
+
expect(toolsFromServer2).toHaveLength(1);
|
|
188
|
+
expect(toolsFromServer2[0].name).toBe(mcpTool2.name);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe('discoverTools', () => {
|
|
192
|
+
it('should will preserve tool parametersJsonSchema during discovery from command', async () => {
|
|
193
|
+
const discoveryCommand = 'my-discovery-command';
|
|
194
|
+
mockConfigGetToolDiscoveryCommand.mockReturnValue(discoveryCommand);
|
|
195
|
+
const unsanitizedToolDeclaration = {
|
|
196
|
+
name: 'tool-with-bad-format',
|
|
197
|
+
description: 'A tool with an invalid format property',
|
|
198
|
+
parametersJsonSchema: {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
some_string: {
|
|
202
|
+
type: 'string',
|
|
203
|
+
format: 'uuid', // This is an unsupported format
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
const mockSpawn = vi.mocked(spawn);
|
|
209
|
+
const mockChildProcess = {
|
|
210
|
+
stdout: { on: vi.fn() },
|
|
211
|
+
stderr: { on: vi.fn() },
|
|
212
|
+
on: vi.fn(),
|
|
213
|
+
};
|
|
214
|
+
mockSpawn.mockReturnValue(mockChildProcess);
|
|
215
|
+
// Simulate stdout data
|
|
216
|
+
mockChildProcess.stdout.on.mockImplementation((event, callback) => {
|
|
217
|
+
if (event === 'data') {
|
|
218
|
+
callback(Buffer.from(JSON.stringify([
|
|
219
|
+
{ function_declarations: [unsanitizedToolDeclaration] },
|
|
220
|
+
])));
|
|
221
|
+
}
|
|
222
|
+
return mockChildProcess;
|
|
223
|
+
});
|
|
224
|
+
// Simulate process close
|
|
225
|
+
mockChildProcess.on.mockImplementation((event, callback) => {
|
|
226
|
+
if (event === 'close') {
|
|
227
|
+
callback(0);
|
|
228
|
+
}
|
|
229
|
+
return mockChildProcess;
|
|
230
|
+
});
|
|
231
|
+
await toolRegistry.discoverAllTools();
|
|
232
|
+
const discoveredTool = toolRegistry.getTool('tool-with-bad-format');
|
|
233
|
+
expect(discoveredTool).toBeDefined();
|
|
234
|
+
const registeredParams = discoveredTool.schema
|
|
235
|
+
.parametersJsonSchema;
|
|
236
|
+
expect(registeredParams).toStrictEqual({
|
|
237
|
+
type: 'object',
|
|
238
|
+
properties: {
|
|
239
|
+
some_string: {
|
|
240
|
+
type: 'string',
|
|
241
|
+
format: 'uuid',
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
it('should return a DISCOVERED_TOOL_EXECUTION_ERROR on tool failure', async () => {
|
|
247
|
+
const discoveryCommand = 'my-discovery-command';
|
|
248
|
+
mockConfigGetToolDiscoveryCommand.mockReturnValue(discoveryCommand);
|
|
249
|
+
vi.spyOn(config, 'getToolCallCommand').mockReturnValue('my-call-command');
|
|
250
|
+
const toolDeclaration = {
|
|
251
|
+
name: 'failing-tool',
|
|
252
|
+
description: 'A tool that fails',
|
|
253
|
+
parametersJsonSchema: {
|
|
254
|
+
type: 'object',
|
|
255
|
+
properties: {},
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
const mockSpawn = vi.mocked(spawn);
|
|
259
|
+
// --- Discovery Mock ---
|
|
260
|
+
const discoveryProcess = {
|
|
261
|
+
stdout: { on: vi.fn(), removeListener: vi.fn() },
|
|
262
|
+
stderr: { on: vi.fn(), removeListener: vi.fn() },
|
|
263
|
+
on: vi.fn(),
|
|
264
|
+
};
|
|
265
|
+
mockSpawn.mockReturnValueOnce(discoveryProcess);
|
|
266
|
+
discoveryProcess.stdout.on.mockImplementation((event, callback) => {
|
|
267
|
+
if (event === 'data') {
|
|
268
|
+
callback(Buffer.from(JSON.stringify([{ functionDeclarations: [toolDeclaration] }])));
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
discoveryProcess.on.mockImplementation((event, callback) => {
|
|
272
|
+
if (event === 'close') {
|
|
273
|
+
callback(0);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
await toolRegistry.discoverAllTools();
|
|
277
|
+
const discoveredTool = toolRegistry.getTool('failing-tool');
|
|
278
|
+
expect(discoveredTool).toBeDefined();
|
|
279
|
+
// --- Execution Mock ---
|
|
280
|
+
const executionProcess = {
|
|
281
|
+
stdout: { on: vi.fn(), removeListener: vi.fn() },
|
|
282
|
+
stderr: { on: vi.fn(), removeListener: vi.fn() },
|
|
283
|
+
stdin: { write: vi.fn(), end: vi.fn() },
|
|
284
|
+
on: vi.fn(),
|
|
285
|
+
connected: true,
|
|
286
|
+
disconnect: vi.fn(),
|
|
287
|
+
removeListener: vi.fn(),
|
|
288
|
+
};
|
|
289
|
+
mockSpawn.mockReturnValueOnce(executionProcess);
|
|
290
|
+
executionProcess.stderr.on.mockImplementation((event, callback) => {
|
|
291
|
+
if (event === 'data') {
|
|
292
|
+
callback(Buffer.from('Something went wrong'));
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
executionProcess.on.mockImplementation((event, callback) => {
|
|
296
|
+
if (event === 'close') {
|
|
297
|
+
callback(1); // Non-zero exit code
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
const invocation = discoveredTool.build({});
|
|
301
|
+
const result = await invocation.execute(new AbortController().signal);
|
|
302
|
+
expect(result.error?.type).toBe(ToolErrorType.DISCOVERED_TOOL_EXECUTION_ERROR);
|
|
303
|
+
expect(result.llmContent).toContain('Stderr: Something went wrong');
|
|
304
|
+
expect(result.llmContent).toContain('Exit Code: 1');
|
|
305
|
+
});
|
|
306
|
+
it('should discover tools using MCP servers defined in getMcpServers', async () => {
|
|
307
|
+
const discoverSpy = vi.spyOn(McpClientManager.prototype, 'discoverAllMcpTools');
|
|
308
|
+
mockConfigGetToolDiscoveryCommand.mockReturnValue(undefined);
|
|
309
|
+
vi.spyOn(config, 'getMcpServerCommand').mockReturnValue(undefined);
|
|
310
|
+
const mcpServerConfigVal = {
|
|
311
|
+
'my-mcp-server': {
|
|
312
|
+
command: 'mcp-server-cmd',
|
|
313
|
+
args: ['--port', '1234'],
|
|
314
|
+
trust: true,
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
vi.spyOn(config, 'getMcpServers').mockReturnValue(mcpServerConfigVal);
|
|
318
|
+
await toolRegistry.discoverAllTools();
|
|
319
|
+
expect(discoverSpy).toHaveBeenCalled();
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
describe('DiscoveredToolInvocation', () => {
|
|
323
|
+
it('should return the stringified params from getDescription', () => {
|
|
324
|
+
const tool = new DiscoveredTool(config, 'test-tool', 'A test tool', {});
|
|
325
|
+
const params = { param: 'testValue' };
|
|
326
|
+
const invocation = tool.build(params);
|
|
327
|
+
const description = invocation.getDescription();
|
|
328
|
+
expect(description).toBe(JSON.stringify(params));
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
//# sourceMappingURL=tool-registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.test.js","sourceRoot":"","sources":["../../../src/tools/tool-registry.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { FunctionDeclaration, PartListUnion } from '@google/genai';
|
|
7
|
+
import { ToolErrorType } from './tool-error.js';
|
|
8
|
+
import type { DiffUpdateResult } from '../ide/ideContext.js';
|
|
9
|
+
/**
|
|
10
|
+
* Represents a validated and ready-to-execute tool call.
|
|
11
|
+
* An instance of this is created by a `ToolBuilder`.
|
|
12
|
+
*/
|
|
13
|
+
export interface ToolInvocation<TParams extends object, TResult extends ToolResult> {
|
|
14
|
+
/**
|
|
15
|
+
* The validated parameters for this specific invocation.
|
|
16
|
+
*/
|
|
17
|
+
params: TParams;
|
|
18
|
+
/**
|
|
19
|
+
* Gets a pre-execution description of the tool operation.
|
|
20
|
+
*
|
|
21
|
+
* @returns A markdown string describing what the tool will do.
|
|
22
|
+
*/
|
|
23
|
+
getDescription(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Determines what file system paths the tool will affect.
|
|
26
|
+
* @returns A list of such paths.
|
|
27
|
+
*/
|
|
28
|
+
toolLocations(): ToolLocation[];
|
|
29
|
+
/**
|
|
30
|
+
* Determines if the tool should prompt for confirmation before execution.
|
|
31
|
+
* @returns Confirmation details or false if no confirmation is needed.
|
|
32
|
+
*/
|
|
33
|
+
shouldConfirmExecute(abortSignal: AbortSignal): Promise<ToolCallConfirmationDetails | false>;
|
|
34
|
+
/**
|
|
35
|
+
* Executes the tool with the validated parameters.
|
|
36
|
+
* @param signal AbortSignal for tool cancellation.
|
|
37
|
+
* @param updateOutput Optional callback to stream output.
|
|
38
|
+
* @returns Result of the tool execution.
|
|
39
|
+
*/
|
|
40
|
+
execute(signal: AbortSignal, updateOutput?: (output: string) => void): Promise<TResult>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A convenience base class for ToolInvocation.
|
|
44
|
+
*/
|
|
45
|
+
export declare abstract class BaseToolInvocation<TParams extends object, TResult extends ToolResult> implements ToolInvocation<TParams, TResult> {
|
|
46
|
+
readonly params: TParams;
|
|
47
|
+
constructor(params: TParams);
|
|
48
|
+
abstract getDescription(): string;
|
|
49
|
+
toolLocations(): ToolLocation[];
|
|
50
|
+
shouldConfirmExecute(_abortSignal: AbortSignal): Promise<ToolCallConfirmationDetails | false>;
|
|
51
|
+
abstract execute(signal: AbortSignal, updateOutput?: (output: string) => void): Promise<TResult>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A type alias for a tool invocation where the specific parameter and result types are not known.
|
|
55
|
+
*/
|
|
56
|
+
export type AnyToolInvocation = ToolInvocation<object, ToolResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Interface for a tool builder that validates parameters and creates invocations.
|
|
59
|
+
*/
|
|
60
|
+
export interface ToolBuilder<TParams extends object, TResult extends ToolResult> {
|
|
61
|
+
/**
|
|
62
|
+
* The internal name of the tool (used for API calls).
|
|
63
|
+
*/
|
|
64
|
+
name: string;
|
|
65
|
+
/**
|
|
66
|
+
* The user-friendly display name of the tool.
|
|
67
|
+
*/
|
|
68
|
+
displayName: string;
|
|
69
|
+
/**
|
|
70
|
+
* Description of what the tool does.
|
|
71
|
+
*/
|
|
72
|
+
description: string;
|
|
73
|
+
/**
|
|
74
|
+
* The kind of tool for categorization and permissions
|
|
75
|
+
*/
|
|
76
|
+
kind: Kind;
|
|
77
|
+
/**
|
|
78
|
+
* Function declaration schema from @google/genai.
|
|
79
|
+
*/
|
|
80
|
+
schema: FunctionDeclaration;
|
|
81
|
+
/**
|
|
82
|
+
* Whether the tool's output should be rendered as markdown.
|
|
83
|
+
*/
|
|
84
|
+
isOutputMarkdown: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Whether the tool supports live (streaming) output.
|
|
87
|
+
*/
|
|
88
|
+
canUpdateOutput: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Validates raw parameters and builds a ready-to-execute invocation.
|
|
91
|
+
* @param params The raw, untrusted parameters from the model.
|
|
92
|
+
* @returns A valid `ToolInvocation` if successful. Throws an error if validation fails.
|
|
93
|
+
*/
|
|
94
|
+
build(params: TParams): ToolInvocation<TParams, TResult>;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* New base class for tools that separates validation from execution.
|
|
98
|
+
* New tools should extend this class.
|
|
99
|
+
*/
|
|
100
|
+
export declare abstract class DeclarativeTool<TParams extends object, TResult extends ToolResult> implements ToolBuilder<TParams, TResult> {
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly displayName: string;
|
|
103
|
+
readonly description: string;
|
|
104
|
+
readonly kind: Kind;
|
|
105
|
+
readonly parameterSchema: unknown;
|
|
106
|
+
readonly isOutputMarkdown: boolean;
|
|
107
|
+
readonly canUpdateOutput: boolean;
|
|
108
|
+
constructor(name: string, displayName: string, description: string, kind: Kind, parameterSchema: unknown, isOutputMarkdown?: boolean, canUpdateOutput?: boolean);
|
|
109
|
+
get schema(): FunctionDeclaration;
|
|
110
|
+
/**
|
|
111
|
+
* Validates the raw tool parameters.
|
|
112
|
+
* Subclasses should override this to add custom validation logic
|
|
113
|
+
* beyond the JSON schema check.
|
|
114
|
+
* @param params The raw parameters from the model.
|
|
115
|
+
* @returns An error message string if invalid, null otherwise.
|
|
116
|
+
*/
|
|
117
|
+
validateToolParams(_params: TParams): string | null;
|
|
118
|
+
/**
|
|
119
|
+
* The core of the new pattern. It validates parameters and, if successful,
|
|
120
|
+
* returns a `ToolInvocation` object that encapsulates the logic for the
|
|
121
|
+
* specific, validated call.
|
|
122
|
+
* @param params The raw, untrusted parameters from the model.
|
|
123
|
+
* @returns A `ToolInvocation` instance.
|
|
124
|
+
*/
|
|
125
|
+
abstract build(params: TParams): ToolInvocation<TParams, TResult>;
|
|
126
|
+
/**
|
|
127
|
+
* A convenience method that builds and executes the tool in one step.
|
|
128
|
+
* Throws an error if validation fails.
|
|
129
|
+
* @param params The raw, untrusted parameters from the model.
|
|
130
|
+
* @param signal AbortSignal for tool cancellation.
|
|
131
|
+
* @param updateOutput Optional callback to stream output.
|
|
132
|
+
* @returns The result of the tool execution.
|
|
133
|
+
*/
|
|
134
|
+
buildAndExecute(params: TParams, signal: AbortSignal, updateOutput?: (output: string) => void): Promise<TResult>;
|
|
135
|
+
/**
|
|
136
|
+
* Similar to `build` but never throws.
|
|
137
|
+
* @param params The raw, untrusted parameters from the model.
|
|
138
|
+
* @returns A `ToolInvocation` instance.
|
|
139
|
+
*/
|
|
140
|
+
private silentBuild;
|
|
141
|
+
/**
|
|
142
|
+
* A convenience method that builds and executes the tool in one step.
|
|
143
|
+
* Never throws.
|
|
144
|
+
* @param params The raw, untrusted parameters from the model.
|
|
145
|
+
* @params abortSignal a signal to abort.
|
|
146
|
+
* @returns The result of the tool execution.
|
|
147
|
+
*/
|
|
148
|
+
validateBuildAndExecute(params: TParams, abortSignal: AbortSignal): Promise<ToolResult>;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* New base class for declarative tools that separates validation from execution.
|
|
152
|
+
* New tools should extend this class, which provides a `build` method that
|
|
153
|
+
* validates parameters before deferring to a `createInvocation` method for
|
|
154
|
+
* the final `ToolInvocation` object instantiation.
|
|
155
|
+
*/
|
|
156
|
+
export declare abstract class BaseDeclarativeTool<TParams extends object, TResult extends ToolResult> extends DeclarativeTool<TParams, TResult> {
|
|
157
|
+
build(params: TParams): ToolInvocation<TParams, TResult>;
|
|
158
|
+
validateToolParams(params: TParams): string | null;
|
|
159
|
+
protected validateToolParamValues(_params: TParams): string | null;
|
|
160
|
+
protected abstract createInvocation(params: TParams): ToolInvocation<TParams, TResult>;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* A type alias for a declarative tool where the specific parameter and result types are not known.
|
|
164
|
+
*/
|
|
165
|
+
export type AnyDeclarativeTool = DeclarativeTool<object, ToolResult>;
|
|
166
|
+
/**
|
|
167
|
+
* Type guard to check if an object is a Tool.
|
|
168
|
+
* @param obj The object to check.
|
|
169
|
+
* @returns True if the object is a Tool, false otherwise.
|
|
170
|
+
*/
|
|
171
|
+
export declare function isTool(obj: unknown): obj is AnyDeclarativeTool;
|
|
172
|
+
export interface ToolResult {
|
|
173
|
+
/**
|
|
174
|
+
* Content meant to be included in LLM history.
|
|
175
|
+
* This should represent the factual outcome of the tool execution.
|
|
176
|
+
*/
|
|
177
|
+
llmContent: PartListUnion;
|
|
178
|
+
/**
|
|
179
|
+
* Markdown string for user display.
|
|
180
|
+
* This provides a user-friendly summary or visualization of the result.
|
|
181
|
+
* NOTE: This might also be considered UI-specific and could potentially be
|
|
182
|
+
* removed or modified in a further refactor if the server becomes purely API-driven.
|
|
183
|
+
* For now, we keep it as the core logic in ReadFileTool currently produces it.
|
|
184
|
+
*/
|
|
185
|
+
returnDisplay: ToolResultDisplay;
|
|
186
|
+
/**
|
|
187
|
+
* If this property is present, the tool call is considered a failure.
|
|
188
|
+
*/
|
|
189
|
+
error?: {
|
|
190
|
+
message: string;
|
|
191
|
+
type?: ToolErrorType;
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Detects cycles in a JSON schemas due to `$ref`s.
|
|
196
|
+
* @param schema The root of the JSON schema.
|
|
197
|
+
* @returns `true` if a cycle is detected, `false` otherwise.
|
|
198
|
+
*/
|
|
199
|
+
export declare function hasCycleInSchema(schema: object): boolean;
|
|
200
|
+
export type ToolResultDisplay = string | FileDiff;
|
|
201
|
+
export interface FileDiff {
|
|
202
|
+
fileDiff: string;
|
|
203
|
+
fileName: string;
|
|
204
|
+
originalContent: string | null;
|
|
205
|
+
newContent: string;
|
|
206
|
+
diffStat?: DiffStat;
|
|
207
|
+
}
|
|
208
|
+
export interface DiffStat {
|
|
209
|
+
ai_removed_lines: number;
|
|
210
|
+
ai_added_lines: number;
|
|
211
|
+
user_added_lines: number;
|
|
212
|
+
user_removed_lines: number;
|
|
213
|
+
}
|
|
214
|
+
export interface ToolEditConfirmationDetails {
|
|
215
|
+
type: 'edit';
|
|
216
|
+
title: string;
|
|
217
|
+
onConfirm: (outcome: ToolConfirmationOutcome, payload?: ToolConfirmationPayload) => Promise<void>;
|
|
218
|
+
fileName: string;
|
|
219
|
+
filePath: string;
|
|
220
|
+
fileDiff: string;
|
|
221
|
+
originalContent: string | null;
|
|
222
|
+
newContent: string;
|
|
223
|
+
isModifying?: boolean;
|
|
224
|
+
ideConfirmation?: Promise<DiffUpdateResult>;
|
|
225
|
+
}
|
|
226
|
+
export interface ToolConfirmationPayload {
|
|
227
|
+
newContent: string;
|
|
228
|
+
}
|
|
229
|
+
export interface ToolExecuteConfirmationDetails {
|
|
230
|
+
type: 'exec';
|
|
231
|
+
title: string;
|
|
232
|
+
onConfirm: (outcome: ToolConfirmationOutcome) => Promise<void>;
|
|
233
|
+
command: string;
|
|
234
|
+
rootCommand: string;
|
|
235
|
+
}
|
|
236
|
+
export interface ToolMcpConfirmationDetails {
|
|
237
|
+
type: 'mcp';
|
|
238
|
+
title: string;
|
|
239
|
+
serverName: string;
|
|
240
|
+
toolName: string;
|
|
241
|
+
toolDisplayName: string;
|
|
242
|
+
onConfirm: (outcome: ToolConfirmationOutcome) => Promise<void>;
|
|
243
|
+
}
|
|
244
|
+
export interface ToolInfoConfirmationDetails {
|
|
245
|
+
type: 'info';
|
|
246
|
+
title: string;
|
|
247
|
+
onConfirm: (outcome: ToolConfirmationOutcome) => Promise<void>;
|
|
248
|
+
prompt: string;
|
|
249
|
+
urls?: string[];
|
|
250
|
+
}
|
|
251
|
+
export type ToolCallConfirmationDetails = ToolEditConfirmationDetails | ToolExecuteConfirmationDetails | ToolMcpConfirmationDetails | ToolInfoConfirmationDetails;
|
|
252
|
+
export declare enum ToolConfirmationOutcome {
|
|
253
|
+
ProceedOnce = "proceed_once",
|
|
254
|
+
ProceedAlways = "proceed_always",
|
|
255
|
+
ProceedAlwaysServer = "proceed_always_server",
|
|
256
|
+
ProceedAlwaysTool = "proceed_always_tool",
|
|
257
|
+
ModifyWithEditor = "modify_with_editor",
|
|
258
|
+
Cancel = "cancel"
|
|
259
|
+
}
|
|
260
|
+
export declare enum Kind {
|
|
261
|
+
Read = "read",
|
|
262
|
+
Edit = "edit",
|
|
263
|
+
Delete = "delete",
|
|
264
|
+
Move = "move",
|
|
265
|
+
Search = "search",
|
|
266
|
+
Execute = "execute",
|
|
267
|
+
Think = "think",
|
|
268
|
+
Fetch = "fetch",
|
|
269
|
+
Other = "other"
|
|
270
|
+
}
|
|
271
|
+
export interface ToolLocation {
|
|
272
|
+
path: string;
|
|
273
|
+
line?: number;
|
|
274
|
+
}
|