@vybestack/llxprt-code-core 0.1.19-beta → 0.1.19
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/README.md +49 -2
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/src/auth/anthropic-device-flow.d.ts +53 -0
- package/dist/src/auth/anthropic-device-flow.js +208 -0
- package/dist/src/auth/anthropic-device-flow.js.map +1 -0
- package/dist/src/auth/precedence.d.ts +55 -0
- package/dist/src/auth/precedence.js +211 -0
- package/dist/src/auth/precedence.js.map +1 -0
- package/dist/src/auth/qwen-device-flow.d.ts +45 -0
- package/dist/src/auth/qwen-device-flow.js +179 -0
- package/dist/src/auth/qwen-device-flow.js.map +1 -0
- package/dist/src/auth/token-store.d.ts +66 -0
- package/dist/src/auth/token-store.js +151 -0
- package/dist/src/auth/token-store.js.map +1 -0
- package/dist/src/auth/types.d.ts +130 -0
- package/dist/src/auth/types.js +60 -0
- package/dist/src/auth/types.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +2 -2
- package/dist/src/code_assist/converter.js +1 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/config/config.d.ts +7 -1
- package/dist/src/config/config.js +46 -5
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/endpoints.d.ts +60 -0
- package/dist/src/config/endpoints.js +126 -0
- package/dist/src/config/endpoints.js.map +1 -0
- package/dist/src/config/profileManager.d.ts +14 -4
- package/dist/src/config/profileManager.js +90 -11
- package/dist/src/config/profileManager.js.map +1 -1
- package/dist/src/core/client.d.ts +5 -2
- package/dist/src/core/client.js +164 -44
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +4 -1
- package/dist/src/core/contentGenerator.js +3 -0
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +5 -0
- package/dist/src/core/loggingContentGenerator.js +9 -1
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/subagent.js +12 -10
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +10 -2
- package/dist/src/ide/detect-ide.js +48 -5
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/ide-client.js +22 -15
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +10 -1
- package/dist/src/index.js +10 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/prompt-config/defaults/core-defaults.d.ts +1 -1
- package/dist/src/prompt-config/defaults/core-defaults.js +21 -326
- package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/core.md +1 -1
- package/dist/src/prompt-config/defaults/provider-defaults.d.ts +1 -1
- package/dist/src/prompt-config/defaults/provider-defaults.js +16 -19
- package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +273 -10
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/gemini-2-5-flash/core.md +278 -0
- package/dist/src/prompt-config/defaults/tool-defaults.d.ts +1 -1
- package/dist/src/prompt-config/defaults/tool-defaults.js +27 -75
- package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/tools/read-file.md +1 -1
- package/dist/src/providers/BaseProvider.d.ts +149 -0
- package/dist/src/providers/BaseProvider.js +315 -0
- package/dist/src/providers/BaseProvider.js.map +1 -0
- package/dist/src/providers/IProvider.d.ts +1 -0
- package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
- package/dist/src/providers/LoggingProviderWrapper.js +3 -0
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
- package/dist/src/providers/ProviderManager.d.ts +0 -1
- package/dist/src/providers/ProviderManager.js +23 -14
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
- package/dist/src/providers/anthropic/AnthropicProvider.js +173 -27
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +20 -7
- package/dist/src/providers/gemini/GeminiProvider.js +182 -147
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.d.ts +53 -6
- package/dist/src/providers/openai/OpenAIProvider.js +373 -40
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
- package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
- package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
- package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
- package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
- package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
- package/dist/src/services/loopDetectionService.js +4 -5
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/settings/SettingsService.d.ts +32 -0
- package/dist/src/settings/SettingsService.js +204 -0
- package/dist/src/settings/SettingsService.js.map +1 -0
- package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
- package/dist/src/settings/settingsServiceInstance.js +24 -0
- package/dist/src/settings/settingsServiceInstance.js.map +1 -0
- package/dist/src/settings/types.d.ts +141 -0
- package/dist/src/settings/types.js +5 -0
- package/dist/src/settings/types.js.map +1 -0
- package/dist/src/tools/edit.js +6 -7
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.js +7 -8
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/grep.js +6 -7
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/ls.js +9 -10
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -8
- package/dist/src/tools/mcp-tool.js +5 -18
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.js +4 -5
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.js +5 -6
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-many-files.js +17 -18
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/shell.js +8 -9
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +1 -15
- package/dist/src/tools/tool-registry.js +4 -72
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +6 -6
- package/dist/src/tools/tools.js +2 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +3 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.js +3 -4
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.js +4 -5
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/utils/editCorrector.js +8 -9
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +3 -4
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/schemaValidator.d.ts +1 -9
- package/dist/src/utils/schemaValidator.js +1 -109
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/package.json +4 -2
- package/dist/src/code_assist/converter.test.d.ts +0 -6
- package/dist/src/code_assist/converter.test.js +0 -279
- package/dist/src/code_assist/converter.test.js.map +0 -1
- package/dist/src/code_assist/oauth2.test.d.ts +0 -6
- package/dist/src/code_assist/oauth2.test.js +0 -370
- package/dist/src/code_assist/oauth2.test.js.map +0 -1
- package/dist/src/code_assist/server.test.d.ts +0 -6
- package/dist/src/code_assist/server.test.js +0 -134
- package/dist/src/code_assist/server.test.js.map +0 -1
- package/dist/src/code_assist/setup.test.d.ts +0 -6
- package/dist/src/code_assist/setup.test.js +0 -65
- package/dist/src/code_assist/setup.test.js.map +0 -1
- package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
- package/dist/src/config/config.alwaysAllow.test.js +0 -84
- package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
- package/dist/src/config/config.ephemeral.test.d.ts +0 -6
- package/dist/src/config/config.ephemeral.test.js +0 -152
- package/dist/src/config/config.ephemeral.test.js.map +0 -1
- package/dist/src/config/config.test.d.ts +0 -6
- package/dist/src/config/config.test.js +0 -369
- package/dist/src/config/config.test.js.map +0 -1
- package/dist/src/config/flashFallback.test.d.ts +0 -6
- package/dist/src/config/flashFallback.test.js +0 -91
- package/dist/src/config/flashFallback.test.js.map +0 -1
- package/dist/src/core/client.test.d.ts +0 -6
- package/dist/src/core/client.test.js +0 -1322
- package/dist/src/core/client.test.js.map +0 -1
- package/dist/src/core/contentGenerator.test.d.ts +0 -6
- package/dist/src/core/contentGenerator.test.js +0 -103
- package/dist/src/core/contentGenerator.test.js.map +0 -1
- package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
- package/dist/src/core/coreToolScheduler.test.js +0 -637
- package/dist/src/core/coreToolScheduler.test.js.map +0 -1
- package/dist/src/core/geminiChat.test.d.ts +0 -6
- package/dist/src/core/geminiChat.test.js +0 -425
- package/dist/src/core/geminiChat.test.js.map +0 -1
- package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
- package/dist/src/core/googleGenAIWrapper.test.js +0 -104
- package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
- package/dist/src/core/logger.test.d.ts +0 -6
- package/dist/src/core/logger.test.js +0 -467
- package/dist/src/core/logger.test.js.map +0 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
- package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
- package/dist/src/core/prompts-async.test.d.ts +0 -6
- package/dist/src/core/prompts-async.test.js +0 -115
- package/dist/src/core/prompts-async.test.js.map +0 -1
- package/dist/src/core/prompts.test.d.ts +0 -6
- package/dist/src/core/prompts.test.js +0 -68
- package/dist/src/core/prompts.test.js.map +0 -1
- package/dist/src/core/subagent.test.d.ts +0 -6
- package/dist/src/core/subagent.test.js +0 -519
- package/dist/src/core/subagent.test.js.map +0 -1
- package/dist/src/core/tokenLimits.test.d.ts +0 -6
- package/dist/src/core/tokenLimits.test.js +0 -66
- package/dist/src/core/tokenLimits.test.js.map +0 -1
- package/dist/src/core/turn.test.d.ts +0 -6
- package/dist/src/core/turn.test.js +0 -366
- package/dist/src/core/turn.test.js.map +0 -1
- package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
- package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
- package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
- package/dist/src/ide/ide-installer.test.d.ts +0 -6
- package/dist/src/ide/ide-installer.test.js +0 -55
- package/dist/src/ide/ide-installer.test.js.map +0 -1
- package/dist/src/ide/ideContext.test.d.ts +0 -6
- package/dist/src/ide/ideContext.test.js +0 -265
- package/dist/src/ide/ideContext.test.js.map +0 -1
- package/dist/src/index.test.d.ts +0 -6
- package/dist/src/index.test.js +0 -12
- package/dist/src/index.test.js.map +0 -1
- package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
- package/dist/src/integration-tests/todo-system.test.js +0 -46
- package/dist/src/integration-tests/todo-system.test.js.map +0 -1
- package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
- package/dist/src/mcp/google-auth-provider.test.js +0 -54
- package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
- package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
- package/dist/src/mcp/oauth-provider.test.js +0 -602
- package/dist/src/mcp/oauth-provider.test.js.map +0 -1
- package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
- package/dist/src/mcp/oauth-token-storage.test.js +0 -205
- package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
- package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
- package/dist/src/mcp/oauth-utils.test.js +0 -144
- package/dist/src/mcp/oauth-utils.test.js.map +0 -1
- package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
- package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
- package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
- package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
- package/dist/src/parsers/TextToolCallParser.test.js +0 -225
- package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
- package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
- package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
- package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
- package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
- package/dist/src/prompt-config/prompt-cache.test.js +0 -437
- package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
- package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
- package/dist/src/prompt-config/prompt-installer.test.js +0 -503
- package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
- package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
- package/dist/src/prompt-config/prompt-loader.test.js +0 -413
- package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
- package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
- package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
- package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
- package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
- package/dist/src/prompt-config/prompt-service.test.js +0 -811
- package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
- package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
- package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
- package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
- package/dist/src/providers/ProviderManager.test.d.ts +0 -6
- package/dist/src/providers/ProviderManager.test.js +0 -284
- package/dist/src/providers/ProviderManager.test.js.map +0 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
- package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
- package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
- package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
- package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
- package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
- package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
- package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
- package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
- package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
- package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
- package/dist/src/providers/integration/multi-provider.integration.test.js +0 -292
- package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
- package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
- package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
- package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
- package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
- package/dist/src/providers/openai/ConversationCache.test.js +0 -113
- package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
- package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
- package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
- package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
- package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
- package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
- package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
- package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
- package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
- package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
- package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
- package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
- package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
- package/dist/src/providers/openai/OpenAIProvider.test.js +0 -620
- package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
- package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
- package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
- package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
- package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
- package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
- package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
- package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
- package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
- package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
- package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
- package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
- package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
- package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
- package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
- package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
- package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
- package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
- package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
- package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
- package/dist/src/services/fileDiscoveryService.test.js +0 -143
- package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
- package/dist/src/services/gitService.test.d.ts +0 -6
- package/dist/src/services/gitService.test.js +0 -209
- package/dist/src/services/gitService.test.js.map +0 -1
- package/dist/src/services/loopDetectionService.test.d.ts +0 -6
- package/dist/src/services/loopDetectionService.test.js +0 -484
- package/dist/src/services/loopDetectionService.test.js.map +0 -1
- package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
- package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
- package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
- package/dist/src/services/shellExecutionService.test.d.ts +0 -6
- package/dist/src/services/shellExecutionService.test.js +0 -272
- package/dist/src/services/shellExecutionService.test.js.map +0 -1
- package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
- package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
- package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
- package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
- package/dist/src/services/shellExecutionService.windows.test.js +0 -79
- package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
- package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
- package/dist/src/services/tool-call-tracker-service.test.js +0 -99
- package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -6
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -187
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
- package/dist/src/telemetry/loggers.test.d.ts +0 -6
- package/dist/src/telemetry/loggers.test.js +0 -573
- package/dist/src/telemetry/loggers.test.js.map +0 -1
- package/dist/src/telemetry/metrics.test.d.ts +0 -6
- package/dist/src/telemetry/metrics.test.js +0 -212
- package/dist/src/telemetry/metrics.test.js.map +0 -1
- package/dist/src/telemetry/telemetry.test.d.ts +0 -6
- package/dist/src/telemetry/telemetry.test.js +0 -54
- package/dist/src/telemetry/telemetry.test.js.map +0 -1
- package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
- package/dist/src/telemetry/uiTelemetry.test.js +0 -518
- package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
- package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
- package/dist/src/tools/ToolFormatter.test.js +0 -349
- package/dist/src/tools/ToolFormatter.test.js.map +0 -1
- package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
- package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
- package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
- package/dist/src/tools/diffOptions.test.d.ts +0 -6
- package/dist/src/tools/diffOptions.test.js +0 -119
- package/dist/src/tools/diffOptions.test.js.map +0 -1
- package/dist/src/tools/edit.test.d.ts +0 -6
- package/dist/src/tools/edit.test.js +0 -689
- package/dist/src/tools/edit.test.js.map +0 -1
- package/dist/src/tools/glob.test.d.ts +0 -6
- package/dist/src/tools/glob.test.js +0 -332
- package/dist/src/tools/glob.test.js.map +0 -1
- package/dist/src/tools/grep.test.d.ts +0 -6
- package/dist/src/tools/grep.test.js +0 -272
- package/dist/src/tools/grep.test.js.map +0 -1
- package/dist/src/tools/ls.test.d.ts +0 -6
- package/dist/src/tools/ls.test.js +0 -357
- package/dist/src/tools/ls.test.js.map +0 -1
- package/dist/src/tools/mcp-client.test.d.ts +0 -6
- package/dist/src/tools/mcp-client.test.js +0 -617
- package/dist/src/tools/mcp-client.test.js.map +0 -1
- package/dist/src/tools/mcp-tool.test.d.ts +0 -6
- package/dist/src/tools/mcp-tool.test.js +0 -501
- package/dist/src/tools/mcp-tool.test.js.map +0 -1
- package/dist/src/tools/memoryTool.test.d.ts +0 -6
- package/dist/src/tools/memoryTool.test.js +0 -266
- package/dist/src/tools/memoryTool.test.js.map +0 -1
- package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
- package/dist/src/tools/modifiable-tool.test.js +0 -193
- package/dist/src/tools/modifiable-tool.test.js.map +0 -1
- package/dist/src/tools/read-file.test.d.ts +0 -6
- package/dist/src/tools/read-file.test.js +0 -319
- package/dist/src/tools/read-file.test.js.map +0 -1
- package/dist/src/tools/read-many-files.test.d.ts +0 -6
- package/dist/src/tools/read-many-files.test.js +0 -644
- package/dist/src/tools/read-many-files.test.js.map +0 -1
- package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
- package/dist/src/tools/shell.multibyte.test.js +0 -75
- package/dist/src/tools/shell.multibyte.test.js.map +0 -1
- package/dist/src/tools/shell.test.d.ts +0 -6
- package/dist/src/tools/shell.test.js +0 -367
- package/dist/src/tools/shell.test.js.map +0 -1
- package/dist/src/tools/todo-pause.spec.d.ts +0 -6
- package/dist/src/tools/todo-pause.spec.js +0 -287
- package/dist/src/tools/todo-pause.spec.js.map +0 -1
- package/dist/src/tools/todo-read.test.d.ts +0 -6
- package/dist/src/tools/todo-read.test.js +0 -162
- package/dist/src/tools/todo-read.test.js.map +0 -1
- package/dist/src/tools/todo-schemas.test.d.ts +0 -6
- package/dist/src/tools/todo-schemas.test.js +0 -341
- package/dist/src/tools/todo-schemas.test.js.map +0 -1
- package/dist/src/tools/todo-store.test.d.ts +0 -6
- package/dist/src/tools/todo-store.test.js +0 -169
- package/dist/src/tools/todo-store.test.js.map +0 -1
- package/dist/src/tools/todo-write.test.d.ts +0 -6
- package/dist/src/tools/todo-write.test.js +0 -226
- package/dist/src/tools/todo-write.test.js.map +0 -1
- package/dist/src/tools/tool-registry.test.d.ts +0 -6
- package/dist/src/tools/tool-registry.test.js +0 -468
- package/dist/src/tools/tool-registry.test.js.map +0 -1
- package/dist/src/tools/tools.test.d.ts +0 -6
- package/dist/src/tools/tools.test.js +0 -117
- package/dist/src/tools/tools.test.js.map +0 -1
- package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
- package/dist/src/tools/web-fetch.integration.test.js +0 -532
- package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
- package/dist/src/tools/web-search.test.d.ts +0 -6
- package/dist/src/tools/web-search.test.js +0 -230
- package/dist/src/tools/web-search.test.js.map +0 -1
- package/dist/src/tools/write-file.test.d.ts +0 -6
- package/dist/src/tools/write-file.test.js +0 -465
- package/dist/src/tools/write-file.test.js.map +0 -1
- package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
- package/dist/src/utils/bfsFileSearch.test.js +0 -191
- package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
- package/dist/src/utils/editCorrector.test.d.ts +0 -6
- package/dist/src/utils/editCorrector.test.js +0 -564
- package/dist/src/utils/editCorrector.test.js.map +0 -1
- package/dist/src/utils/editor.test.d.ts +0 -6
- package/dist/src/utils/editor.test.js +0 -445
- package/dist/src/utils/editor.test.js.map +0 -1
- package/dist/src/utils/environmentContext.test.d.ts +0 -6
- package/dist/src/utils/environmentContext.test.js +0 -139
- package/dist/src/utils/environmentContext.test.js.map +0 -1
- package/dist/src/utils/errorReporting.test.d.ts +0 -6
- package/dist/src/utils/errorReporting.test.js +0 -130
- package/dist/src/utils/errorReporting.test.js.map +0 -1
- package/dist/src/utils/fileUtils.test.d.ts +0 -6
- package/dist/src/utils/fileUtils.test.js +0 -363
- package/dist/src/utils/fileUtils.test.js.map +0 -1
- package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
- package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
- package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
- package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
- package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
- package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
- package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
- package/dist/src/utils/filesearch/ignore.test.js +0 -57
- package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
- package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
- package/dist/src/utils/filesearch/result-cache.test.js +0 -47
- package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
- package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
- package/dist/src/utils/flashFallback.integration.test.js +0 -120
- package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
- package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
- package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
- package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
- package/dist/src/utils/getFolderStructure.test.js +0 -282
- package/dist/src/utils/getFolderStructure.test.js.map +0 -1
- package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
- package/dist/src/utils/gitIgnoreParser.test.js +0 -154
- package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
- package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
- package/dist/src/utils/memoryDiscovery.test.js +0 -181
- package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
- package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
- package/dist/src/utils/memoryImportProcessor.test.js +0 -715
- package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
- package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
- package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
- package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
- package/dist/src/utils/partUtils.test.d.ts +0 -6
- package/dist/src/utils/partUtils.test.js +0 -130
- package/dist/src/utils/partUtils.test.js.map +0 -1
- package/dist/src/utils/paths.test.d.ts +0 -6
- package/dist/src/utils/paths.test.js +0 -153
- package/dist/src/utils/paths.test.js.map +0 -1
- package/dist/src/utils/retry.test.d.ts +0 -6
- package/dist/src/utils/retry.test.js +0 -322
- package/dist/src/utils/retry.test.js.map +0 -1
- package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
- package/dist/src/utils/safeJsonStringify.test.js +0 -61
- package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
- package/dist/src/utils/sanitization.test.d.ts +0 -6
- package/dist/src/utils/sanitization.test.js +0 -81
- package/dist/src/utils/sanitization.test.js.map +0 -1
- package/dist/src/utils/schemaValidator.test.d.ts +0 -6
- package/dist/src/utils/schemaValidator.test.js +0 -146
- package/dist/src/utils/schemaValidator.test.js.map +0 -1
- package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
- package/dist/src/utils/secure-browser-launcher.test.js +0 -149
- package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
- package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
- package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
- package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
- package/dist/src/utils/shell-utils.test.d.ts +0 -6
- package/dist/src/utils/shell-utils.test.js +0 -200
- package/dist/src/utils/shell-utils.test.js.map +0 -1
- package/dist/src/utils/summarizer.test.d.ts +0 -6
- package/dist/src/utils/summarizer.test.js +0 -131
- package/dist/src/utils/summarizer.test.js.map +0 -1
- package/dist/src/utils/systemEncoding.test.d.ts +0 -6
- package/dist/src/utils/systemEncoding.test.js +0 -368
- package/dist/src/utils/systemEncoding.test.js.map +0 -1
- package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
- package/dist/src/utils/toolOutputLimiter.test.js +0 -164
- package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
- package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
- package/dist/src/utils/unicodeUtils.test.js +0 -120
- package/dist/src/utils/unicodeUtils.test.js.map +0 -1
- package/dist/src/utils/user_account.test.d.ts +0 -6
- package/dist/src/utils/user_account.test.js +0 -153
- package/dist/src/utils/user_account.test.js.map +0 -1
- package/dist/src/utils/user_id.test.d.ts +0 -6
- package/dist/src/utils/user_id.test.js +0 -21
- package/dist/src/utils/user_id.test.js.map +0 -1
- package/dist/src/utils/workspaceContext.test.d.ts +0 -6
- package/dist/src/utils/workspaceContext.test.js +0 -209
- package/dist/src/utils/workspaceContext.test.js.map +0 -1
|
@@ -4,65 +4,115 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { AuthType, ContentGeneratorRole, AuthenticationRequiredError, getCoreSystemPromptAsync, createCodeAssistContentGenerator, } from '@vybestack/llxprt-code-core';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import { BaseProvider } from '../BaseProvider.js';
|
|
8
|
+
import { getSettingsService } from '../../settings/settingsServiceInstance.js';
|
|
9
|
+
export class GeminiProvider extends BaseProvider {
|
|
10
10
|
authMode = 'none';
|
|
11
|
-
|
|
11
|
+
geminiConfig;
|
|
12
12
|
currentModel = 'gemini-2.5-pro';
|
|
13
13
|
modelExplicitlySet = false;
|
|
14
14
|
authDetermined = false;
|
|
15
15
|
baseURL;
|
|
16
16
|
modelParams;
|
|
17
17
|
toolSchemas;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
18
|
+
geminiOAuthManager;
|
|
19
|
+
constructor(apiKey, baseURL, config, oauthManager) {
|
|
20
|
+
// Initialize base provider with auth configuration
|
|
21
|
+
// Check if OAuth is enabled for Gemini
|
|
22
|
+
let oauthEnabled = false;
|
|
23
|
+
if (oauthManager) {
|
|
24
|
+
// Cast to specific interface with isOAuthEnabled method
|
|
25
|
+
const manager = oauthManager;
|
|
26
|
+
if (manager.isOAuthEnabled &&
|
|
27
|
+
typeof manager.isOAuthEnabled === 'function') {
|
|
28
|
+
oauthEnabled = manager.isOAuthEnabled('gemini');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const baseConfig = {
|
|
32
|
+
name: 'gemini',
|
|
33
|
+
apiKey,
|
|
34
|
+
baseURL,
|
|
35
|
+
cliKey: apiKey, // CLI --key argument
|
|
36
|
+
envKeyNames: ['GEMINI_API_KEY', 'GOOGLE_API_KEY'],
|
|
37
|
+
isOAuthEnabled: oauthEnabled, // Check if OAuth is enabled
|
|
38
|
+
oauthProvider: 'gemini',
|
|
39
|
+
oauthManager, // Keep the manager for checking enablement
|
|
40
|
+
};
|
|
41
|
+
super(baseConfig);
|
|
42
|
+
// Store Gemini-specific configuration
|
|
43
|
+
this.geminiConfig = config;
|
|
44
|
+
this.baseURL = baseURL;
|
|
45
|
+
this.geminiOAuthManager = oauthManager;
|
|
23
46
|
// Do not determine auth mode on instantiation.
|
|
24
47
|
// This will be done lazily when a chat completion is requested.
|
|
25
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Updates OAuth configuration based on current OAuth manager state
|
|
51
|
+
*/
|
|
52
|
+
updateOAuthState() {
|
|
53
|
+
if (this.geminiOAuthManager) {
|
|
54
|
+
const manager = this.geminiOAuthManager;
|
|
55
|
+
if (manager.isOAuthEnabled &&
|
|
56
|
+
typeof manager.isOAuthEnabled === 'function') {
|
|
57
|
+
const isEnabled = manager.isOAuthEnabled('gemini');
|
|
58
|
+
// Update the OAuth configuration if state has changed
|
|
59
|
+
this.updateOAuthConfig(isEnabled, 'gemini', this.geminiOAuthManager);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
26
63
|
/**
|
|
27
64
|
* Determines the best available authentication method based on environment variables
|
|
28
|
-
* and existing configuration.
|
|
65
|
+
* and existing configuration. Now uses lazy evaluation with proper precedence chain.
|
|
29
66
|
*/
|
|
30
|
-
determineBestAuth() {
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const authType = this.config?.getContentGeneratorConfig()?.authType;
|
|
39
|
-
if (authType === AuthType.USE_NONE) {
|
|
40
|
-
this.authMode = 'none';
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
// If authType is USE_PROVIDER and no credentials exist, fall back to OAuth
|
|
44
|
-
if (authType === AuthType.USE_PROVIDER) {
|
|
45
|
-
if (!this.hasVertexAICredentials() && !this.hasGeminiAPIKey()) {
|
|
67
|
+
async determineBestAuth() {
|
|
68
|
+
// Re-check OAuth enablement state before determining auth
|
|
69
|
+
this.updateOAuthState();
|
|
70
|
+
// Use the base provider's auth precedence resolution
|
|
71
|
+
try {
|
|
72
|
+
const token = await this.getAuthToken();
|
|
73
|
+
// Check for special OAuth signal
|
|
74
|
+
if (token === 'USE_LOGIN_WITH_GOOGLE') {
|
|
46
75
|
this.authMode = 'oauth';
|
|
47
|
-
|
|
76
|
+
this.authDetermined = true;
|
|
77
|
+
return token; // Return the magic token
|
|
48
78
|
}
|
|
79
|
+
// Determine auth mode based on resolved authentication method
|
|
80
|
+
const authMethodName = await this.getAuthMethodName();
|
|
81
|
+
if (authMethodName?.startsWith('oauth-')) {
|
|
82
|
+
this.authMode = 'oauth';
|
|
83
|
+
}
|
|
84
|
+
else if (this.hasVertexAICredentials()) {
|
|
85
|
+
this.authMode = 'vertex-ai';
|
|
86
|
+
this.setupVertexAIAuth();
|
|
87
|
+
}
|
|
88
|
+
else if (this.hasGeminiAPIKey() || authMethodName?.includes('key')) {
|
|
89
|
+
this.authMode = 'gemini-api-key';
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.authMode = 'none';
|
|
93
|
+
}
|
|
94
|
+
this.authDetermined = true;
|
|
95
|
+
return token;
|
|
49
96
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
// Fall back to OAuth (will prompt user if needed)
|
|
61
|
-
else {
|
|
62
|
-
this.authMode = 'oauth';
|
|
63
|
-
// OAuth will be handled by the existing auth system
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Handle case where no auth is available
|
|
99
|
+
const authType = this.geminiConfig?.getContentGeneratorConfig()?.authType;
|
|
100
|
+
if (authType === AuthType.USE_NONE) {
|
|
101
|
+
this.authMode = 'none';
|
|
102
|
+
this.authDetermined = true;
|
|
103
|
+
throw new AuthenticationRequiredError('Authentication is set to USE_NONE but no credentials are available', this.authMode, ['GEMINI_API_KEY', 'GOOGLE_API_KEY']);
|
|
104
|
+
}
|
|
105
|
+
throw error;
|
|
64
106
|
}
|
|
65
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Implementation of BaseProvider abstract method
|
|
110
|
+
* Determines if this provider supports OAuth authentication
|
|
111
|
+
*/
|
|
112
|
+
supportsOAuth() {
|
|
113
|
+
// Gemini always supports Google OAuth
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
66
116
|
/**
|
|
67
117
|
* Checks if Vertex AI credentials are available
|
|
68
118
|
*/
|
|
@@ -75,7 +125,7 @@ export class GeminiProvider {
|
|
|
75
125
|
* Checks if Gemini API key is available
|
|
76
126
|
*/
|
|
77
127
|
hasGeminiAPIKey() {
|
|
78
|
-
return !!
|
|
128
|
+
return !!process.env.GEMINI_API_KEY;
|
|
79
129
|
}
|
|
80
130
|
/**
|
|
81
131
|
* Sets up environment variables for Vertex AI authentication
|
|
@@ -88,17 +138,18 @@ export class GeminiProvider {
|
|
|
88
138
|
* Sets the config instance for reading OAuth credentials
|
|
89
139
|
*/
|
|
90
140
|
setConfig(config) {
|
|
91
|
-
this.
|
|
141
|
+
this.geminiConfig = config;
|
|
92
142
|
// Sync with config model if user hasn't explicitly set a model
|
|
93
143
|
// This ensures consistency between config and provider state
|
|
94
144
|
const configModel = config.getModel();
|
|
95
145
|
if (!this.modelExplicitlySet && configModel) {
|
|
96
146
|
this.currentModel = configModel;
|
|
97
147
|
}
|
|
148
|
+
// Update OAuth configuration based on config
|
|
149
|
+
const authType = config.getContentGeneratorConfig()?.authType;
|
|
150
|
+
this.updateOAuthConfig(authType === AuthType.LOGIN_WITH_GOOGLE, 'gemini', this.geminiOAuthManager);
|
|
98
151
|
// Clear auth cache when config changes to allow re-determination
|
|
99
152
|
this.authDetermined = false;
|
|
100
|
-
// Re-determine auth after config is set
|
|
101
|
-
this.determineBestAuth();
|
|
102
153
|
}
|
|
103
154
|
async getModels() {
|
|
104
155
|
// For OAuth mode, return fixed list of models
|
|
@@ -126,7 +177,7 @@ export class GeminiProvider {
|
|
|
126
177
|
}
|
|
127
178
|
// For API key modes (gemini-api-key or vertex-ai), try to fetch real models
|
|
128
179
|
if (this.authMode === 'gemini-api-key' || this.authMode === 'vertex-ai') {
|
|
129
|
-
const apiKey = this.
|
|
180
|
+
const apiKey = (await this.getAuthToken()) || process.env.GEMINI_API_KEY;
|
|
130
181
|
if (apiKey) {
|
|
131
182
|
try {
|
|
132
183
|
const url = this.baseURL
|
|
@@ -206,39 +257,20 @@ export class GeminiProvider {
|
|
|
206
257
|
console.log('DEBUG: GeminiProvider.generateChatCompletion called with messages:', JSON.stringify(messages, null, 2));
|
|
207
258
|
}
|
|
208
259
|
}
|
|
209
|
-
// Check if we need to re-determine auth
|
|
210
|
-
const oauthValid = await this.isOAuthValid();
|
|
211
|
-
if (!oauthValid) {
|
|
212
|
-
this.authDetermined = false;
|
|
213
|
-
}
|
|
214
260
|
// Lazily determine the best auth method now that it's needed.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (!process.env.GOOGLE_API_KEY) {
|
|
226
|
-
throw new AuthenticationRequiredError('Google API key required for Vertex AI. Please set GOOGLE_API_KEY environment variable or use /auth to login with Google OAuth.', this.authMode, ['GOOGLE_API_KEY', 'GOOGLE_CLOUD_PROJECT', 'GOOGLE_CLOUD_LOCATION']);
|
|
227
|
-
}
|
|
228
|
-
break;
|
|
229
|
-
case 'oauth':
|
|
230
|
-
// OAuth auth will be validated when creating the content generator
|
|
231
|
-
break;
|
|
232
|
-
case 'none':
|
|
233
|
-
// In 'none' mode, check if ANY credentials are available
|
|
234
|
-
if (!this.hasGeminiAPIKey() && !this.hasVertexAICredentials()) {
|
|
235
|
-
throw new AuthenticationRequiredError('No authentication credentials found. Please use /auth to login with Google OAuth, set GEMINI_API_KEY, or configure Vertex AI credentials.', this.authMode, ['GEMINI_API_KEY', 'GOOGLE_API_KEY']);
|
|
236
|
-
}
|
|
237
|
-
break;
|
|
238
|
-
default:
|
|
239
|
-
// For any other auth mode, proceed without validation
|
|
240
|
-
break;
|
|
261
|
+
// This implements lazy OAuth triggering - OAuth is only triggered when making API calls
|
|
262
|
+
let authToken;
|
|
263
|
+
try {
|
|
264
|
+
authToken = await this.determineBestAuth();
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
if (error instanceof AuthenticationRequiredError) {
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
throw new AuthenticationRequiredError('Failed to resolve authentication for Gemini provider', this.authMode, ['GEMINI_API_KEY', 'GOOGLE_API_KEY']);
|
|
241
271
|
}
|
|
272
|
+
// Authentication has already been resolved by determineBestAuth()
|
|
273
|
+
// No need for additional validation since the auth token is already obtained
|
|
242
274
|
// Import the necessary modules dynamically to avoid circular dependencies
|
|
243
275
|
const { GoogleGenAI } = await import('@google/genai');
|
|
244
276
|
// Create the appropriate client based on auth mode
|
|
@@ -250,11 +282,8 @@ export class GeminiProvider {
|
|
|
250
282
|
};
|
|
251
283
|
switch (this.authMode) {
|
|
252
284
|
case 'gemini-api-key':
|
|
253
|
-
if (!this.apiKey && !process.env.GEMINI_API_KEY) {
|
|
254
|
-
throw new Error('Gemini API key required but not found');
|
|
255
|
-
}
|
|
256
285
|
genAI = new GoogleGenAI({
|
|
257
|
-
apiKey:
|
|
286
|
+
apiKey: authToken,
|
|
258
287
|
httpOptions: this.baseURL
|
|
259
288
|
? {
|
|
260
289
|
...httpOptions,
|
|
@@ -264,11 +293,8 @@ export class GeminiProvider {
|
|
|
264
293
|
});
|
|
265
294
|
break;
|
|
266
295
|
case 'vertex-ai':
|
|
267
|
-
if (!process.env.GOOGLE_API_KEY) {
|
|
268
|
-
throw new Error('Google API key required for Vertex AI');
|
|
269
|
-
}
|
|
270
296
|
genAI = new GoogleGenAI({
|
|
271
|
-
apiKey:
|
|
297
|
+
apiKey: authToken,
|
|
272
298
|
vertexai: true,
|
|
273
299
|
httpOptions: this.baseURL
|
|
274
300
|
? {
|
|
@@ -279,17 +305,21 @@ export class GeminiProvider {
|
|
|
279
305
|
});
|
|
280
306
|
break;
|
|
281
307
|
case 'oauth': {
|
|
308
|
+
// For OAuth, create a minimal config-like object if we don't have one
|
|
309
|
+
const configForOAuth = this.geminiConfig || {
|
|
310
|
+
getProxy: () => undefined, // OAuth only needs this from config
|
|
311
|
+
};
|
|
282
312
|
// For OAuth, we need to use the code assist server
|
|
283
|
-
const contentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE,
|
|
313
|
+
const contentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, configForOAuth, this.baseURL);
|
|
284
314
|
// Convert messages to Gemini request format
|
|
285
315
|
// Use config model in OAuth mode to ensure synchronization
|
|
286
316
|
const oauthModel = this.modelExplicitlySet
|
|
287
317
|
? this.currentModel
|
|
288
|
-
: this.
|
|
318
|
+
: this.geminiConfig?.getModel() || this.currentModel;
|
|
289
319
|
// Generate systemInstruction using getCoreSystemPrompt
|
|
290
320
|
// Get user memory from config if available
|
|
291
|
-
const userMemory = this.
|
|
292
|
-
? this.
|
|
321
|
+
const userMemory = this.geminiConfig?.getUserMemory
|
|
322
|
+
? this.geminiConfig.getUserMemory()
|
|
293
323
|
: '';
|
|
294
324
|
const systemInstruction = await getCoreSystemPromptAsync(userMemory, oauthModel);
|
|
295
325
|
// Store tools if provided
|
|
@@ -314,7 +344,7 @@ export class GeminiProvider {
|
|
|
314
344
|
},
|
|
315
345
|
};
|
|
316
346
|
// Use the content generator stream
|
|
317
|
-
const streamResult = await contentGenerator.generateContentStream(request, this.
|
|
347
|
+
const streamResult = await contentGenerator.generateContentStream(request, this.geminiConfig?.getSessionId() || 'default');
|
|
318
348
|
// Convert the stream to our format
|
|
319
349
|
for await (const response of streamResult) {
|
|
320
350
|
// Extract text from the response
|
|
@@ -351,34 +381,17 @@ export class GeminiProvider {
|
|
|
351
381
|
return;
|
|
352
382
|
}
|
|
353
383
|
case 'none':
|
|
354
|
-
// For 'none' mode,
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
}
|
|
366
|
-
else if (this.hasVertexAICredentials()) {
|
|
367
|
-
this.setupVertexAIAuth();
|
|
368
|
-
genAI = new GoogleGenAI({
|
|
369
|
-
apiKey: process.env.GOOGLE_API_KEY,
|
|
370
|
-
vertexai: true,
|
|
371
|
-
httpOptions: this.baseURL
|
|
372
|
-
? {
|
|
373
|
-
...httpOptions,
|
|
374
|
-
baseUrl: this.baseURL,
|
|
375
|
-
}
|
|
376
|
-
: httpOptions,
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
throw new Error('No authentication credentials found. Please use /auth to login with Google OAuth, set GEMINI_API_KEY, or configure Vertex AI credentials.');
|
|
381
|
-
}
|
|
384
|
+
// For 'none' mode, use the resolved auth token
|
|
385
|
+
genAI = new GoogleGenAI({
|
|
386
|
+
apiKey: authToken,
|
|
387
|
+
vertexai: this.hasVertexAICredentials(),
|
|
388
|
+
httpOptions: this.baseURL
|
|
389
|
+
? {
|
|
390
|
+
...httpOptions,
|
|
391
|
+
baseUrl: this.baseURL,
|
|
392
|
+
}
|
|
393
|
+
: httpOptions,
|
|
394
|
+
});
|
|
382
395
|
break;
|
|
383
396
|
default:
|
|
384
397
|
throw new Error(`Unsupported auth mode: ${this.authMode}`);
|
|
@@ -399,15 +412,15 @@ export class GeminiProvider {
|
|
|
399
412
|
// Use explicit model if set, otherwise fall back to config model
|
|
400
413
|
const modelToUse = this.modelExplicitlySet
|
|
401
414
|
? this.currentModel
|
|
402
|
-
: this.
|
|
415
|
+
: this.geminiConfig?.getModel() || this.currentModel;
|
|
403
416
|
// For Flash models, always include tools if available
|
|
404
417
|
if (modelToUse.includes('flash') && !geminiTools && this.toolSchemas) {
|
|
405
418
|
geminiTools = this.toolSchemas;
|
|
406
419
|
}
|
|
407
420
|
// Generate systemInstruction using getCoreSystemPrompt
|
|
408
421
|
// Get user memory from config if available
|
|
409
|
-
const userMemory = this.
|
|
410
|
-
? this.
|
|
422
|
+
const userMemory = this.geminiConfig?.getUserMemory
|
|
423
|
+
? this.geminiConfig.getUserMemory()
|
|
411
424
|
: '';
|
|
412
425
|
const systemInstruction = await getCoreSystemPromptAsync(userMemory, modelToUse);
|
|
413
426
|
const request = {
|
|
@@ -696,13 +709,12 @@ export class GeminiProvider {
|
|
|
696
709
|
return result;
|
|
697
710
|
}
|
|
698
711
|
setApiKey(apiKey) {
|
|
699
|
-
|
|
712
|
+
// Call base provider implementation
|
|
713
|
+
super.setApiKey?.(apiKey);
|
|
700
714
|
// Set the API key as an environment variable so it can be used by the core library
|
|
701
715
|
process.env.GEMINI_API_KEY = apiKey;
|
|
702
716
|
// Clear auth cache when API key changes
|
|
703
717
|
this.authDetermined = false;
|
|
704
|
-
// Re-determine auth after API key is set
|
|
705
|
-
this.determineBestAuth();
|
|
706
718
|
}
|
|
707
719
|
setBaseUrl(baseUrl) {
|
|
708
720
|
// If no baseUrl is provided or it's an empty string, clear to undefined
|
|
@@ -733,18 +745,49 @@ export class GeminiProvider {
|
|
|
733
745
|
* Gets the current model ID
|
|
734
746
|
*/
|
|
735
747
|
getCurrentModel() {
|
|
736
|
-
|
|
748
|
+
// Try to get from SettingsService first (source of truth)
|
|
749
|
+
try {
|
|
750
|
+
const settingsService = getSettingsService();
|
|
751
|
+
const providerSettings = settingsService.getProviderSettings(this.name);
|
|
752
|
+
if (providerSettings.model) {
|
|
753
|
+
return providerSettings.model;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
catch (error) {
|
|
757
|
+
if (process.env.DEBUG) {
|
|
758
|
+
console.warn('Failed to get model from SettingsService:', error);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
// Fall back to cached value or default
|
|
762
|
+
return this.currentModel || this.getDefaultModel();
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Gets the default model for Gemini
|
|
766
|
+
*/
|
|
767
|
+
getDefaultModel() {
|
|
768
|
+
return 'gemini-2.5-pro';
|
|
737
769
|
}
|
|
738
770
|
/**
|
|
739
771
|
* Sets the current model ID
|
|
740
772
|
*/
|
|
741
773
|
setModel(modelId) {
|
|
774
|
+
// Update SettingsService as the source of truth
|
|
775
|
+
try {
|
|
776
|
+
const settingsService = getSettingsService();
|
|
777
|
+
settingsService.setProviderSetting(this.name, 'model', modelId);
|
|
778
|
+
}
|
|
779
|
+
catch (error) {
|
|
780
|
+
if (process.env.DEBUG) {
|
|
781
|
+
console.warn('Failed to persist model to SettingsService:', error);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
// Keep local cache for performance
|
|
742
785
|
this.currentModel = modelId;
|
|
743
786
|
this.modelExplicitlySet = true;
|
|
744
787
|
// Always update config if available, not just in OAuth mode
|
|
745
788
|
// This ensures the model is properly synchronized
|
|
746
|
-
if (this.
|
|
747
|
-
this.
|
|
789
|
+
if (this.geminiConfig) {
|
|
790
|
+
this.geminiConfig.setModel(modelId);
|
|
748
791
|
}
|
|
749
792
|
}
|
|
750
793
|
/**
|
|
@@ -811,13 +854,12 @@ export class GeminiProvider {
|
|
|
811
854
|
},
|
|
812
855
|
};
|
|
813
856
|
let genAI;
|
|
857
|
+
// Get authentication token lazily
|
|
858
|
+
const authToken = await this.determineBestAuth();
|
|
814
859
|
switch (this.authMode) {
|
|
815
860
|
case 'gemini-api-key': {
|
|
816
|
-
if (!this.apiKey && !process.env.GEMINI_API_KEY) {
|
|
817
|
-
throw new Error('Gemini API key required for web search');
|
|
818
|
-
}
|
|
819
861
|
genAI = new GoogleGenAI({
|
|
820
|
-
apiKey:
|
|
862
|
+
apiKey: authToken,
|
|
821
863
|
httpOptions: this.baseURL
|
|
822
864
|
? {
|
|
823
865
|
...httpOptions,
|
|
@@ -843,11 +885,8 @@ export class GeminiProvider {
|
|
|
843
885
|
return apiKeyResult;
|
|
844
886
|
}
|
|
845
887
|
case 'vertex-ai': {
|
|
846
|
-
if (!process.env.GOOGLE_API_KEY) {
|
|
847
|
-
throw new Error('Google API key required for web search');
|
|
848
|
-
}
|
|
849
888
|
genAI = new GoogleGenAI({
|
|
850
|
-
apiKey:
|
|
889
|
+
apiKey: authToken,
|
|
851
890
|
vertexai: true,
|
|
852
891
|
httpOptions: this.baseURL
|
|
853
892
|
? {
|
|
@@ -875,7 +914,7 @@ export class GeminiProvider {
|
|
|
875
914
|
}
|
|
876
915
|
case 'oauth': {
|
|
877
916
|
// For OAuth, use the code assist content generator
|
|
878
|
-
const oauthContentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, this.
|
|
917
|
+
const oauthContentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, this.geminiConfig);
|
|
879
918
|
// For web search, always use gemini-2.5-flash regardless of the active model
|
|
880
919
|
const oauthRequest = {
|
|
881
920
|
model: 'gemini-2.5-flash',
|
|
@@ -889,7 +928,7 @@ export class GeminiProvider {
|
|
|
889
928
|
tools: [{ googleSearch: {} }],
|
|
890
929
|
},
|
|
891
930
|
};
|
|
892
|
-
const result = await oauthContentGenerator.generateContent(oauthRequest, this.
|
|
931
|
+
const result = await oauthContentGenerator.generateContent(oauthRequest, this.geminiConfig?.getSessionId() || 'default');
|
|
893
932
|
return result;
|
|
894
933
|
}
|
|
895
934
|
default:
|
|
@@ -908,13 +947,12 @@ export class GeminiProvider {
|
|
|
908
947
|
},
|
|
909
948
|
};
|
|
910
949
|
let genAI;
|
|
950
|
+
// Get authentication token lazily
|
|
951
|
+
const authToken = await this.determineBestAuth();
|
|
911
952
|
switch (this.authMode) {
|
|
912
953
|
case 'gemini-api-key': {
|
|
913
|
-
if (!this.apiKey && !process.env.GEMINI_API_KEY) {
|
|
914
|
-
throw new Error('Gemini API key required for web fetch');
|
|
915
|
-
}
|
|
916
954
|
genAI = new GoogleGenAI({
|
|
917
|
-
apiKey:
|
|
955
|
+
apiKey: authToken,
|
|
918
956
|
httpOptions: this.baseURL
|
|
919
957
|
? {
|
|
920
958
|
...httpOptions,
|
|
@@ -940,11 +978,8 @@ export class GeminiProvider {
|
|
|
940
978
|
return apiKeyResult;
|
|
941
979
|
}
|
|
942
980
|
case 'vertex-ai': {
|
|
943
|
-
if (!process.env.GOOGLE_API_KEY) {
|
|
944
|
-
throw new Error('Google API key required for web fetch');
|
|
945
|
-
}
|
|
946
981
|
genAI = new GoogleGenAI({
|
|
947
|
-
apiKey:
|
|
982
|
+
apiKey: authToken,
|
|
948
983
|
vertexai: true,
|
|
949
984
|
httpOptions: this.baseURL
|
|
950
985
|
? {
|
|
@@ -972,7 +1007,7 @@ export class GeminiProvider {
|
|
|
972
1007
|
}
|
|
973
1008
|
case 'oauth': {
|
|
974
1009
|
// For OAuth, use the code assist content generator
|
|
975
|
-
const oauthContentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, this.
|
|
1010
|
+
const oauthContentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, this.geminiConfig);
|
|
976
1011
|
// For web fetch, always use gemini-2.5-flash regardless of the active model
|
|
977
1012
|
const oauthRequest = {
|
|
978
1013
|
model: 'gemini-2.5-flash',
|
|
@@ -986,7 +1021,7 @@ export class GeminiProvider {
|
|
|
986
1021
|
tools: [{ urlContext: {} }],
|
|
987
1022
|
},
|
|
988
1023
|
};
|
|
989
|
-
const result = await oauthContentGenerator.generateContent(oauthRequest, this.
|
|
1024
|
+
const result = await oauthContentGenerator.generateContent(oauthRequest, this.geminiConfig?.getSessionId() || 'default');
|
|
990
1025
|
return result;
|
|
991
1026
|
}
|
|
992
1027
|
default:
|