@google/gemini-cli-core 0.0.3-preview.4 → 0.0.3
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 +2 -2
- package/README.md +12 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/codeAssist.d.ts +2 -0
- package/dist/src/code_assist/codeAssist.js +12 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +3 -1
- package/dist/src/code_assist/converter.js +2 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +10 -0
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.d.ts +25 -0
- package/dist/src/code_assist/oauth-credential-storage.js +109 -0
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js +136 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -0
- package/dist/src/code_assist/oauth2.js +92 -29
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +729 -339
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +1 -1
- package/dist/src/code_assist/server.js +24 -1
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +25 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +17 -2
- package/dist/src/config/config.d.ts +72 -12
- package/dist/src/config/config.js +196 -64
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +305 -178
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +16 -0
- package/dist/src/config/models.js +29 -0
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.d.ts +6 -0
- package/dist/src/config/models.test.js +55 -0
- package/dist/src/config/models.test.js.map +1 -0
- package/dist/src/config/storage.d.ts +2 -0
- package/dist/src/config/storage.js +6 -1
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +4 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/confirmation-bus/index.d.ts +7 -0
- package/dist/src/confirmation-bus/index.js +8 -0
- package/dist/src/confirmation-bus/index.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.d.ts +17 -0
- package/dist/src/confirmation-bus/message-bus.js +81 -0
- package/dist/src/confirmation-bus/message-bus.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.test.d.ts +6 -0
- package/dist/src/confirmation-bus/message-bus.test.js +164 -0
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -0
- package/dist/src/confirmation-bus/types.d.ts +38 -0
- package/dist/src/confirmation-bus/types.js +15 -0
- package/dist/src/confirmation-bus/types.js.map +1 -0
- package/dist/src/core/baseLlmClient.d.ts +46 -0
- package/dist/src/core/baseLlmClient.js +112 -0
- package/dist/src/core/baseLlmClient.js.map +1 -0
- package/dist/src/core/baseLlmClient.test.d.ts +6 -0
- package/dist/src/core/baseLlmClient.test.js +253 -0
- package/dist/src/core/baseLlmClient.test.js.map +1 -0
- package/dist/src/core/client.d.ts +16 -21
- package/dist/src/core/client.js +145 -232
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +393 -492
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +2 -3
- package/dist/src/core/contentGenerator.js +0 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +1 -3
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +8 -3
- package/dist/src/core/coreToolScheduler.js +106 -5
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +233 -5
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +38 -32
- package/dist/src/core/geminiChat.js +209 -219
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +674 -386
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +13 -16
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +59 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +5 -0
- package/dist/src/core/prompts.js +63 -42
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +130 -1
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/subagent.js +7 -10
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +32 -22
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +21 -5
- package/dist/src/core/turn.js +45 -11
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +340 -100
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.d.ts +7 -0
- package/dist/src/fallback/handler.js +51 -0
- package/dist/src/fallback/handler.js.map +1 -0
- package/dist/src/fallback/handler.test.d.ts +6 -0
- package/dist/src/fallback/handler.test.js +130 -0
- package/dist/src/fallback/handler.test.js.map +1 -0
- package/dist/src/fallback/types.d.ts +14 -0
- package/dist/src/fallback/types.js +7 -0
- package/dist/src/fallback/types.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ide/constants.d.ts +3 -0
- package/dist/src/ide/constants.js +3 -0
- package/dist/src/ide/constants.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +42 -14
- package/dist/src/ide/detect-ide.js +22 -68
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +11 -51
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +60 -18
- package/dist/src/ide/ide-client.js +275 -53
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +239 -6
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +2 -2
- package/dist/src/ide/ide-installer.js +15 -11
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +30 -12
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +35 -365
- package/dist/src/ide/ideContext.js +60 -106
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/ide/ideContext.test.js +152 -24
- package/dist/src/ide/ideContext.test.js.map +1 -1
- package/dist/src/ide/process-utils.d.ts +0 -1
- package/dist/src/ide/process-utils.js +43 -25
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.js +90 -4
- package/dist/src/ide/process-utils.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +486 -0
- package/dist/src/ide/types.js +138 -0
- package/dist/src/ide/types.js.map +1 -0
- package/dist/src/index.d.ts +10 -2
- package/dist/src/index.js +11 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +15 -12
- package/dist/src/mcp/oauth-provider.js +63 -56
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +74 -35
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +14 -10
- package/dist/src/mcp/oauth-token-storage.js +52 -20
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +255 -162
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.d.ts +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.js +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
- package/dist/src/mcp/token-storage/file-token-storage.js +144 -0
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.js +235 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/index.d.ts +11 -0
- package/dist/src/mcp/token-storage/index.js +12 -0
- package/dist/src/mcp/token-storage/index.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +31 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +190 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +254 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +4 -0
- package/dist/src/mcp/token-storage/types.js +5 -1
- package/dist/src/mcp/token-storage/types.js.map +1 -1
- package/dist/src/output/json-formatter.d.ts +11 -0
- package/dist/src/output/json-formatter.js +30 -0
- package/dist/src/output/json-formatter.js.map +1 -0
- package/dist/src/output/json-formatter.test.d.ts +6 -0
- package/dist/src/output/json-formatter.test.js +266 -0
- package/dist/src/output/json-formatter.test.js.map +1 -0
- package/dist/src/output/types.d.ts +20 -0
- package/dist/src/output/types.js +11 -0
- package/dist/src/output/types.js.map +1 -0
- package/dist/src/policy/index.d.ts +7 -0
- package/dist/src/policy/index.js +8 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/policy/policy-engine.d.ts +30 -0
- package/dist/src/policy/policy-engine.js +92 -0
- package/dist/src/policy/policy-engine.js.map +1 -0
- package/dist/src/policy/policy-engine.test.d.ts +6 -0
- package/dist/src/policy/policy-engine.test.js +515 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -0
- package/dist/src/policy/stable-stringify.d.ts +58 -0
- package/dist/src/policy/stable-stringify.js +122 -0
- package/dist/src/policy/stable-stringify.js.map +1 -0
- package/dist/src/policy/types.d.ts +47 -0
- package/dist/src/policy/types.js +12 -0
- package/dist/src/policy/types.js.map +1 -0
- package/dist/src/routing/modelRouterService.d.ts +23 -0
- package/dist/src/routing/modelRouterService.js +70 -0
- package/dist/src/routing/modelRouterService.js.map +1 -0
- package/dist/src/routing/modelRouterService.test.d.ts +6 -0
- package/dist/src/routing/modelRouterService.test.js +98 -0
- package/dist/src/routing/modelRouterService.test.js.map +1 -0
- package/dist/src/routing/routingStrategy.d.ts +62 -0
- package/dist/src/routing/routingStrategy.js +7 -0
- package/dist/src/routing/routingStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/classifierStrategy.js +173 -0
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js +192 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.d.ts +26 -0
- package/dist/src/routing/strategies/compositeStrategy.js +67 -0
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/compositeStrategy.test.js +123 -0
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/defaultStrategy.js +20 -0
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/defaultStrategy.test.js +26 -0
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/fallbackStrategy.js +25 -0
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js +55 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.d.ts +15 -0
- package/dist/src/routing/strategies/overrideStrategy.js +28 -0
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js +42 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +7 -13
- package/dist/src/services/chatRecordingService.js +28 -19
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +62 -20
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +10 -0
- package/dist/src/services/fileDiscoveryService.js +31 -17
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/gitService.js +9 -12
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +10 -20
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +5 -0
- package/dist/src/services/loopDetectionService.js +36 -20
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +41 -12
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +34 -2
- package/dist/src/services/shellExecutionService.js +192 -43
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +184 -55
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/activity-detector.d.ts +41 -0
- package/dist/src/telemetry/activity-detector.js +61 -0
- package/dist/src/telemetry/activity-detector.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
- package/dist/src/telemetry/activity-detector.test.js +136 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -0
- package/dist/src/telemetry/activity-types.d.ts +19 -0
- package/dist/src/telemetry/activity-types.js +21 -0
- package/dist/src/telemetry/activity-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +16 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +143 -24
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +101 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +19 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +48 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +8 -0
- package/dist/src/telemetry/constants.js +8 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +34 -0
- package/dist/src/telemetry/gcp-exporters.js +117 -0
- package/dist/src/telemetry/gcp-exporters.js.map +1 -0
- package/dist/src/telemetry/gcp-exporters.test.d.ts +6 -0
- package/dist/src/telemetry/gcp-exporters.test.js +318 -0
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -0
- package/dist/src/telemetry/high-water-mark-tracker.d.ts +43 -0
- package/dist/src/telemetry/high-water-mark-tracker.js +88 -0
- package/dist/src/telemetry/high-water-mark-tracker.js.map +1 -0
- package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +6 -0
- package/dist/src/telemetry/high-water-mark-tracker.test.js +152 -0
- package/dist/src/telemetry/high-water-mark-tracker.test.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +7 -2
- package/dist/src/telemetry/index.js +7 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +8 -1
- package/dist/src/telemetry/loggers.js +140 -8
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +268 -39
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +4 -3
- package/dist/src/telemetry/metrics.js +33 -10
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +47 -25
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/rate-limiter.d.ts +48 -0
- package/dist/src/telemetry/rate-limiter.js +100 -0
- package/dist/src/telemetry/rate-limiter.js.map +1 -0
- package/dist/src/telemetry/rate-limiter.test.d.ts +6 -0
- package/dist/src/telemetry/rate-limiter.test.js +207 -0
- package/dist/src/telemetry/rate-limiter.test.js.map +1 -0
- package/dist/src/telemetry/sdk.js +16 -1
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +95 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +70 -6
- package/dist/src/telemetry/types.js +112 -8
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -1
- package/dist/src/telemetry/uiTelemetry.js +6 -7
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +15 -15
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/index.d.ts +6 -0
- package/dist/src/test-utils/index.js +7 -0
- package/dist/src/test-utils/index.js.map +1 -0
- package/dist/src/test-utils/mock-tool.d.ts +41 -0
- package/dist/src/test-utils/mock-tool.js +51 -0
- package/dist/src/test-utils/mock-tool.js.map +1 -0
- package/dist/src/tools/diffOptions.js +21 -13
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/dist/src/tools/diffOptions.test.js +58 -22
- package/dist/src/tools/diffOptions.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +2 -2
- package/dist/src/tools/edit.js +35 -44
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +124 -13
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +5 -1
- package/dist/src/tools/glob.js +24 -17
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +51 -0
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/ls.js +19 -32
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +140 -280
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +5 -3
- package/dist/src/tools/mcp-client-manager.js +13 -4
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +20 -1
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -5
- package/dist/src/tools/mcp-client.js +40 -35
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +3 -3
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -2
- package/dist/src/tools/mcp-tool.js +9 -9
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +28 -7
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +5 -33
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-file.js +8 -3
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +29 -0
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +1 -1
- package/dist/src/tools/read-many-files.js +18 -50
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +4 -4
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +8 -0
- package/dist/src/tools/ripGrep.js +26 -1
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +107 -5
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +12 -2
- package/dist/src/tools/shell.js +20 -24
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +35 -70
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +72 -0
- package/dist/src/tools/smart-edit.js +594 -0
- package/dist/src/tools/smart-edit.js.map +1 -0
- package/dist/src/tools/smart-edit.test.d.ts +6 -0
- package/dist/src/tools/smart-edit.test.js +419 -0
- package/dist/src/tools/smart-edit.test.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +2 -1
- package/dist/src/tools/tool-registry.js +6 -5
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +14 -7
- package/dist/src/tools/tools.js +9 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +4 -3
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +1 -1
- package/dist/src/tools/web-search.js +3 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.js +14 -19
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +99 -19
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.js +11 -5
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/editCorrector.d.ts +7 -6
- package/dist/src/utils/editCorrector.js +61 -18
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +30 -79
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.js +31 -44
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +61 -75
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/errorParsing.js +2 -2
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/errorParsing.test.js +7 -7
- package/dist/src/utils/errorParsing.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +6 -0
- package/dist/src/utils/errors.js +10 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +20 -3
- package/dist/src/utils/fileUtils.js +154 -32
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +347 -29
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.d.ts +6 -0
- package/dist/src/utils/{flashFallback.integration.test.js → flashFallback.test.js} +31 -27
- package/dist/src/utils/flashFallback.test.js.map +1 -0
- package/dist/src/utils/geminiIgnoreParser.d.ts +18 -0
- package/dist/src/utils/geminiIgnoreParser.js +61 -0
- package/dist/src/utils/geminiIgnoreParser.js.map +1 -0
- package/dist/src/utils/geminiIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/geminiIgnoreParser.test.js +50 -0
- package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.d.ts +3 -7
- package/dist/src/utils/gitIgnoreParser.js +125 -34
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +66 -35
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.d.ts +26 -0
- package/dist/src/utils/llm-edit-fixer.js +121 -0
- package/dist/src/utils/llm-edit-fixer.js.map +1 -0
- package/dist/src/utils/llm-edit-fixer.test.d.ts +6 -0
- package/dist/src/utils/llm-edit-fixer.test.js +105 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +5 -4
- package/dist/src/utils/memoryDiscovery.js +10 -9
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +50 -25
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.d.ts +2 -2
- package/dist/src/utils/nextSpeakerChecker.js +8 -2
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +75 -64
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/promptIdContext.d.ts +7 -0
- package/dist/src/utils/promptIdContext.js +8 -0
- package/dist/src/utils/promptIdContext.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +5 -0
- package/dist/src/utils/shell-utils.js +23 -0
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/terminalSerializer.d.ts +28 -0
- package/dist/src/utils/terminalSerializer.js +432 -0
- package/dist/src/utils/terminalSerializer.js.map +1 -0
- package/dist/src/utils/terminalSerializer.test.d.ts +6 -0
- package/dist/src/utils/terminalSerializer.test.js +176 -0
- package/dist/src/utils/terminalSerializer.test.js.map +1 -0
- package/dist/src/utils/textUtils.d.ts +5 -0
- package/dist/src/utils/textUtils.js +14 -0
- package/dist/src/utils/textUtils.js.map +1 -1
- package/dist/src/utils/textUtils.test.d.ts +6 -0
- package/dist/src/utils/textUtils.test.js +59 -0
- package/dist/src/utils/textUtils.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -3
- package/dist/google-gemini-cli-core-0.3.0-preview.3.tgz +0 -0
- package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
- /package/dist/src/{utils/flashFallback.integration.test.d.ts → code_assist/oauth-credential-storage.test.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseLlmClient.test.js","sourceRoot":"","sources":["../../../src/core/baseLlmClient.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,24 +7,26 @@ import type { GenerateContentConfig, PartListUnion, Content, GenerateContentResp
|
|
|
7
7
|
import type { ServerGeminiStreamEvent, ChatCompressionInfo } from './turn.js';
|
|
8
8
|
import { Turn } from './turn.js';
|
|
9
9
|
import type { Config } from '../config/config.js';
|
|
10
|
-
import type { UserTierId } from '../code_assist/types.js';
|
|
11
10
|
import { GeminiChat } from './geminiChat.js';
|
|
12
|
-
import type {
|
|
11
|
+
import type { ChatRecordingService } from '../services/chatRecordingService.js';
|
|
12
|
+
import { LoopDetectionService } from '../services/loopDetectionService.js';
|
|
13
|
+
export declare function isThinkingSupported(model: string): boolean;
|
|
14
|
+
export declare function isThinkingDefault(model: string): boolean;
|
|
13
15
|
/**
|
|
14
|
-
* Returns the index of the
|
|
16
|
+
* Returns the index of the oldest item to keep when compressing. May return
|
|
17
|
+
* contents.length which indicates that everything should be compressed.
|
|
15
18
|
*
|
|
16
19
|
* Exported for testing purposes.
|
|
17
20
|
*/
|
|
18
|
-
export declare function
|
|
21
|
+
export declare function findCompressSplitPoint(contents: Content[], fraction: number): number;
|
|
19
22
|
export declare class GeminiClient {
|
|
20
23
|
private readonly config;
|
|
21
24
|
private chat?;
|
|
22
|
-
private contentGenerator?;
|
|
23
|
-
private readonly embeddingModel;
|
|
24
25
|
private readonly generateContentConfig;
|
|
25
26
|
private sessionTurnCount;
|
|
26
27
|
private readonly loopDetector;
|
|
27
28
|
private lastPromptId;
|
|
29
|
+
private currentSequenceModel;
|
|
28
30
|
private lastSentIdeContext;
|
|
29
31
|
private forceFullIdeContext;
|
|
30
32
|
/**
|
|
@@ -33,31 +35,24 @@ export declare class GeminiClient {
|
|
|
33
35
|
*/
|
|
34
36
|
private hasFailedCompressionAttempt;
|
|
35
37
|
constructor(config: Config);
|
|
36
|
-
initialize(
|
|
37
|
-
|
|
38
|
-
getUserTier(): UserTierId | undefined;
|
|
38
|
+
initialize(): Promise<void>;
|
|
39
|
+
private getContentGeneratorOrFail;
|
|
39
40
|
addHistory(content: Content): Promise<void>;
|
|
40
41
|
getChat(): GeminiChat;
|
|
41
42
|
isInitialized(): boolean;
|
|
42
43
|
getHistory(): Content[];
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}): void;
|
|
44
|
+
stripThoughtsFromHistory(): void;
|
|
45
|
+
setHistory(history: Content[]): void;
|
|
46
46
|
setTools(): Promise<void>;
|
|
47
47
|
resetChat(): Promise<void>;
|
|
48
|
+
getChatRecordingService(): ChatRecordingService | undefined;
|
|
49
|
+
getLoopDetectionService(): LoopDetectionService;
|
|
48
50
|
addDirectoryContext(): Promise<void>;
|
|
49
51
|
startChat(extraHistory?: Content[]): Promise<GeminiChat>;
|
|
50
52
|
private getIdeContextParts;
|
|
51
|
-
sendMessageStream(request: PartListUnion, signal: AbortSignal, prompt_id: string, turns?: number
|
|
52
|
-
|
|
53
|
-
generateContent(contents: Content[], generationConfig: GenerateContentConfig, abortSignal: AbortSignal, model?: string): Promise<GenerateContentResponse>;
|
|
54
|
-
generateEmbedding(texts: string[]): Promise<number[][]>;
|
|
53
|
+
sendMessageStream(request: PartListUnion, signal: AbortSignal, prompt_id: string, turns?: number): AsyncGenerator<ServerGeminiStreamEvent, Turn>;
|
|
54
|
+
generateContent(contents: Content[], generationConfig: GenerateContentConfig, abortSignal: AbortSignal, model: string): Promise<GenerateContentResponse>;
|
|
55
55
|
tryCompressChat(prompt_id: string, force?: boolean): Promise<ChatCompressionInfo>;
|
|
56
|
-
/**
|
|
57
|
-
* Handles falling back to Flash model when persistent 429 errors occur for OAuth users.
|
|
58
|
-
* Uses a fallback handler if provided by the config; otherwise, returns null.
|
|
59
|
-
*/
|
|
60
|
-
private handleFlashFallback;
|
|
61
56
|
}
|
|
62
57
|
export declare const TEST_ONLY: {
|
|
63
58
|
COMPRESSION_PRESERVE_THRESHOLD: number;
|
package/dist/src/core/client.js
CHANGED
|
@@ -13,40 +13,58 @@ import { reportError } from '../utils/errorReporting.js';
|
|
|
13
13
|
import { GeminiChat } from './geminiChat.js';
|
|
14
14
|
import { retryWithBackoff } from '../utils/retry.js';
|
|
15
15
|
import { getErrorMessage } from '../utils/errors.js';
|
|
16
|
-
import { isFunctionResponse } from '../utils/messageInspectors.js';
|
|
17
16
|
import { tokenLimit } from './tokenLimits.js';
|
|
18
|
-
import {
|
|
19
|
-
import { ProxyAgent, setGlobalDispatcher } from 'undici';
|
|
20
|
-
import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/models.js';
|
|
17
|
+
import { DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, DEFAULT_THINKING_MODE, getEffectiveModel, } from '../config/models.js';
|
|
21
18
|
import { LoopDetectionService } from '../services/loopDetectionService.js';
|
|
22
|
-
import {
|
|
23
|
-
import { logChatCompression, logNextSpeakerCheck,
|
|
24
|
-
import { makeChatCompressionEvent,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return
|
|
19
|
+
import { ideContextStore } from '../ide/ideContext.js';
|
|
20
|
+
import { logChatCompression, logNextSpeakerCheck, } from '../telemetry/loggers.js';
|
|
21
|
+
import { makeChatCompressionEvent, NextSpeakerCheckEvent, } from '../telemetry/types.js';
|
|
22
|
+
import { handleFallback } from '../fallback/handler.js';
|
|
23
|
+
import { uiTelemetryService } from '../telemetry/uiTelemetry.js';
|
|
24
|
+
export function isThinkingSupported(model) {
|
|
25
|
+
return model.startsWith('gemini-2.5') || model === DEFAULT_GEMINI_MODEL_AUTO;
|
|
26
|
+
}
|
|
27
|
+
export function isThinkingDefault(model) {
|
|
28
|
+
if (model.startsWith('gemini-2.5-flash-lite')) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return model.startsWith('gemini-2.5') || model === DEFAULT_GEMINI_MODEL_AUTO;
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
|
-
* Returns the index of the
|
|
34
|
+
* Returns the index of the oldest item to keep when compressing. May return
|
|
35
|
+
* contents.length which indicates that everything should be compressed.
|
|
32
36
|
*
|
|
33
37
|
* Exported for testing purposes.
|
|
34
38
|
*/
|
|
35
|
-
export function
|
|
39
|
+
export function findCompressSplitPoint(contents, fraction) {
|
|
36
40
|
if (fraction <= 0 || fraction >= 1) {
|
|
37
41
|
throw new Error('Fraction must be between 0 and 1');
|
|
38
42
|
}
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
const charCounts = contents.map((content) => JSON.stringify(content).length);
|
|
44
|
+
const totalCharCount = charCounts.reduce((a, b) => a + b, 0);
|
|
45
|
+
const targetCharCount = totalCharCount * fraction;
|
|
46
|
+
let lastSplitPoint = 0; // 0 is always valid (compress nothing)
|
|
47
|
+
let cumulativeCharCount = 0;
|
|
48
|
+
for (let i = 0; i < contents.length; i++) {
|
|
49
|
+
cumulativeCharCount += charCounts[i];
|
|
50
|
+
const content = contents[i];
|
|
51
|
+
if (content.role === 'user' &&
|
|
52
|
+
!content.parts?.some((part) => !!part.functionResponse)) {
|
|
53
|
+
if (cumulativeCharCount >= targetCharCount) {
|
|
54
|
+
return i;
|
|
55
|
+
}
|
|
56
|
+
lastSplitPoint = i;
|
|
47
57
|
}
|
|
48
58
|
}
|
|
49
|
-
|
|
59
|
+
// We found no split points after targetCharCount.
|
|
60
|
+
// Check if it's safe to compress everything.
|
|
61
|
+
const lastContent = contents[contents.length - 1];
|
|
62
|
+
if (lastContent?.role === 'model' &&
|
|
63
|
+
!lastContent?.parts?.some((part) => part.functionCall)) {
|
|
64
|
+
return contents.length;
|
|
65
|
+
}
|
|
66
|
+
// Can't compress everything so just compress at last splitpoint.
|
|
67
|
+
return lastSplitPoint;
|
|
50
68
|
}
|
|
51
69
|
const MAX_TURNS = 100;
|
|
52
70
|
/**
|
|
@@ -62,8 +80,6 @@ const COMPRESSION_PRESERVE_THRESHOLD = 0.3;
|
|
|
62
80
|
export class GeminiClient {
|
|
63
81
|
config;
|
|
64
82
|
chat;
|
|
65
|
-
contentGenerator;
|
|
66
|
-
embeddingModel;
|
|
67
83
|
generateContentConfig = {
|
|
68
84
|
temperature: 0,
|
|
69
85
|
topP: 1,
|
|
@@ -71,6 +87,7 @@ export class GeminiClient {
|
|
|
71
87
|
sessionTurnCount = 0;
|
|
72
88
|
loopDetector;
|
|
73
89
|
lastPromptId;
|
|
90
|
+
currentSequenceModel = null;
|
|
74
91
|
lastSentIdeContext;
|
|
75
92
|
forceFullIdeContext = true;
|
|
76
93
|
/**
|
|
@@ -80,25 +97,17 @@ export class GeminiClient {
|
|
|
80
97
|
hasFailedCompressionAttempt = false;
|
|
81
98
|
constructor(config) {
|
|
82
99
|
this.config = config;
|
|
83
|
-
if (config.getProxy()) {
|
|
84
|
-
setGlobalDispatcher(new ProxyAgent(config.getProxy()));
|
|
85
|
-
}
|
|
86
|
-
this.embeddingModel = config.getEmbeddingModel();
|
|
87
100
|
this.loopDetector = new LoopDetectionService(config);
|
|
88
101
|
this.lastPromptId = this.config.getSessionId();
|
|
89
102
|
}
|
|
90
|
-
async initialize(
|
|
91
|
-
this.contentGenerator = await createContentGenerator(contentGeneratorConfig, this.config, this.config.getSessionId());
|
|
103
|
+
async initialize() {
|
|
92
104
|
this.chat = await this.startChat();
|
|
93
105
|
}
|
|
94
|
-
|
|
95
|
-
if (!this.
|
|
106
|
+
getContentGeneratorOrFail() {
|
|
107
|
+
if (!this.config.getContentGenerator()) {
|
|
96
108
|
throw new Error('Content generator not initialized');
|
|
97
109
|
}
|
|
98
|
-
return this.
|
|
99
|
-
}
|
|
100
|
-
getUserTier() {
|
|
101
|
-
return this.contentGenerator?.userTier;
|
|
110
|
+
return this.config.getContentGenerator();
|
|
102
111
|
}
|
|
103
112
|
async addHistory(content) {
|
|
104
113
|
this.getChat().addHistory(content);
|
|
@@ -110,32 +119,16 @@ export class GeminiClient {
|
|
|
110
119
|
return this.chat;
|
|
111
120
|
}
|
|
112
121
|
isInitialized() {
|
|
113
|
-
return this.chat !== undefined
|
|
122
|
+
return this.chat !== undefined;
|
|
114
123
|
}
|
|
115
124
|
getHistory() {
|
|
116
125
|
return this.getChat().getHistory();
|
|
117
126
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
newContent.parts = newContent.parts.map((part) => {
|
|
124
|
-
if (part &&
|
|
125
|
-
typeof part === 'object' &&
|
|
126
|
-
'thoughtSignature' in part) {
|
|
127
|
-
const newPart = { ...part };
|
|
128
|
-
delete newPart
|
|
129
|
-
.thoughtSignature;
|
|
130
|
-
return newPart;
|
|
131
|
-
}
|
|
132
|
-
return part;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
return newContent;
|
|
136
|
-
})
|
|
137
|
-
: history;
|
|
138
|
-
this.getChat().setHistory(historyToSet);
|
|
127
|
+
stripThoughtsFromHistory() {
|
|
128
|
+
this.getChat().stripThoughtsFromHistory();
|
|
129
|
+
}
|
|
130
|
+
setHistory(history) {
|
|
131
|
+
this.getChat().setHistory(history);
|
|
139
132
|
this.forceFullIdeContext = true;
|
|
140
133
|
}
|
|
141
134
|
async setTools() {
|
|
@@ -147,6 +140,12 @@ export class GeminiClient {
|
|
|
147
140
|
async resetChat() {
|
|
148
141
|
this.chat = await this.startChat();
|
|
149
142
|
}
|
|
143
|
+
getChatRecordingService() {
|
|
144
|
+
return this.chat?.getChatRecordingService();
|
|
145
|
+
}
|
|
146
|
+
getLoopDetectionService() {
|
|
147
|
+
return this.loopDetector;
|
|
148
|
+
}
|
|
150
149
|
async addDirectoryContext() {
|
|
151
150
|
if (!this.chat) {
|
|
152
151
|
return;
|
|
@@ -177,18 +176,17 @@ export class GeminiClient {
|
|
|
177
176
|
try {
|
|
178
177
|
const userMemory = this.config.getUserMemory();
|
|
179
178
|
const systemInstruction = getCoreSystemPrompt(userMemory);
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
return new GeminiChat(this.config, this.getContentGenerator(), {
|
|
179
|
+
const model = this.config.getModel();
|
|
180
|
+
const config = { ...this.generateContentConfig };
|
|
181
|
+
if (isThinkingSupported(model)) {
|
|
182
|
+
config.thinkingConfig = {
|
|
183
|
+
includeThoughts: true,
|
|
184
|
+
thinkingBudget: DEFAULT_THINKING_MODE,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return new GeminiChat(this.config, {
|
|
190
188
|
systemInstruction,
|
|
191
|
-
...
|
|
189
|
+
...config,
|
|
192
190
|
tools,
|
|
193
191
|
}, history);
|
|
194
192
|
}
|
|
@@ -198,7 +196,7 @@ export class GeminiClient {
|
|
|
198
196
|
}
|
|
199
197
|
}
|
|
200
198
|
getIdeContextParts(forceFullContext) {
|
|
201
|
-
const currentIdeContext =
|
|
199
|
+
const currentIdeContext = ideContextStore.get();
|
|
202
200
|
if (!currentIdeContext) {
|
|
203
201
|
return { contextParts: [], newIdeContext: undefined };
|
|
204
202
|
}
|
|
@@ -336,10 +334,11 @@ export class GeminiClient {
|
|
|
336
334
|
};
|
|
337
335
|
}
|
|
338
336
|
}
|
|
339
|
-
async *sendMessageStream(request, signal, prompt_id, turns = MAX_TURNS
|
|
337
|
+
async *sendMessageStream(request, signal, prompt_id, turns = MAX_TURNS) {
|
|
340
338
|
if (this.lastPromptId !== prompt_id) {
|
|
341
339
|
this.loopDetector.reset(prompt_id);
|
|
342
340
|
this.lastPromptId = prompt_id;
|
|
341
|
+
this.currentSequenceModel = null;
|
|
343
342
|
}
|
|
344
343
|
this.sessionTurnCount++;
|
|
345
344
|
if (this.config.getMaxSessionTurns() > 0 &&
|
|
@@ -352,9 +351,7 @@ export class GeminiClient {
|
|
|
352
351
|
if (!boundedTurns) {
|
|
353
352
|
return new Turn(this.getChat(), prompt_id);
|
|
354
353
|
}
|
|
355
|
-
|
|
356
|
-
const initialModel = originalModel || this.config.getModel();
|
|
357
|
-
const compressed = await this.tryCompressChat(prompt_id);
|
|
354
|
+
const compressed = await this.tryCompressChat(prompt_id, false);
|
|
358
355
|
if (compressed.compressionStatus === CompressionStatus.COMPRESSED) {
|
|
359
356
|
yield { type: GeminiEventType.ChatCompressed, value: compressed };
|
|
360
357
|
}
|
|
@@ -380,15 +377,35 @@ export class GeminiClient {
|
|
|
380
377
|
this.forceFullIdeContext = false;
|
|
381
378
|
}
|
|
382
379
|
const turn = new Turn(this.getChat(), prompt_id);
|
|
380
|
+
const controller = new AbortController();
|
|
381
|
+
const linkedSignal = AbortSignal.any([signal, controller.signal]);
|
|
383
382
|
const loopDetected = await this.loopDetector.turnStarted(signal);
|
|
384
383
|
if (loopDetected) {
|
|
385
384
|
yield { type: GeminiEventType.LoopDetected };
|
|
386
385
|
return turn;
|
|
387
386
|
}
|
|
388
|
-
const
|
|
387
|
+
const routingContext = {
|
|
388
|
+
history: this.getChat().getHistory(/*curated=*/ true),
|
|
389
|
+
request,
|
|
390
|
+
signal,
|
|
391
|
+
};
|
|
392
|
+
let modelToUse;
|
|
393
|
+
// Determine Model (Stickiness vs. Routing)
|
|
394
|
+
if (this.currentSequenceModel) {
|
|
395
|
+
modelToUse = this.currentSequenceModel;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
const router = await this.config.getModelRouterService();
|
|
399
|
+
const decision = await router.route(routingContext);
|
|
400
|
+
modelToUse = decision.model;
|
|
401
|
+
// Lock the model for the rest of the sequence
|
|
402
|
+
this.currentSequenceModel = modelToUse;
|
|
403
|
+
}
|
|
404
|
+
const resultStream = turn.run(modelToUse, request, linkedSignal);
|
|
389
405
|
for await (const event of resultStream) {
|
|
390
406
|
if (this.loopDetector.addAndCheck(event)) {
|
|
391
407
|
yield { type: GeminiEventType.LoopDetected };
|
|
408
|
+
controller.abort();
|
|
392
409
|
return turn;
|
|
393
410
|
}
|
|
394
411
|
yield event;
|
|
@@ -397,92 +414,26 @@ export class GeminiClient {
|
|
|
397
414
|
}
|
|
398
415
|
}
|
|
399
416
|
if (!turn.pendingToolCalls.length && signal && !signal.aborted) {
|
|
400
|
-
// Check if
|
|
401
|
-
|
|
402
|
-
if (currentModel !== initialModel) {
|
|
403
|
-
// Model was switched (likely due to quota error fallback)
|
|
404
|
-
// Don't continue with recursive call to prevent unwanted Flash execution
|
|
417
|
+
// Check if next speaker check is needed
|
|
418
|
+
if (this.config.getQuotaErrorOccurred()) {
|
|
405
419
|
return turn;
|
|
406
420
|
}
|
|
407
421
|
if (this.config.getSkipNextSpeakerCheck()) {
|
|
408
422
|
return turn;
|
|
409
423
|
}
|
|
410
|
-
const nextSpeakerCheck = await checkNextSpeaker(this.getChat(), this, signal);
|
|
424
|
+
const nextSpeakerCheck = await checkNextSpeaker(this.getChat(), this.config.getBaseLlmClient(), signal, prompt_id);
|
|
411
425
|
logNextSpeakerCheck(this.config, new NextSpeakerCheckEvent(prompt_id, turn.finishReason?.toString() || '', nextSpeakerCheck?.next_speaker || ''));
|
|
412
426
|
if (nextSpeakerCheck?.next_speaker === 'model') {
|
|
413
427
|
const nextRequest = [{ text: 'Please continue.' }];
|
|
414
428
|
// This recursive call's events will be yielded out, but the final
|
|
415
429
|
// turn object will be from the top-level call.
|
|
416
|
-
yield* this.sendMessageStream(nextRequest, signal, prompt_id, boundedTurns - 1
|
|
430
|
+
yield* this.sendMessageStream(nextRequest, signal, prompt_id, boundedTurns - 1);
|
|
417
431
|
}
|
|
418
432
|
}
|
|
419
433
|
return turn;
|
|
420
434
|
}
|
|
421
|
-
async generateJson(contents, schema, abortSignal, model, config = {}) {
|
|
422
|
-
// Use current model from config instead of hardcoded Flash model
|
|
423
|
-
const modelToUse = model || this.config.getModel() || DEFAULT_GEMINI_FLASH_MODEL;
|
|
424
|
-
try {
|
|
425
|
-
const userMemory = this.config.getUserMemory();
|
|
426
|
-
const systemInstruction = getCoreSystemPrompt(userMemory);
|
|
427
|
-
const requestConfig = {
|
|
428
|
-
abortSignal,
|
|
429
|
-
...this.generateContentConfig,
|
|
430
|
-
...config,
|
|
431
|
-
};
|
|
432
|
-
const apiCall = () => this.getContentGenerator().generateContent({
|
|
433
|
-
model: modelToUse,
|
|
434
|
-
config: {
|
|
435
|
-
...requestConfig,
|
|
436
|
-
systemInstruction,
|
|
437
|
-
responseJsonSchema: schema,
|
|
438
|
-
responseMimeType: 'application/json',
|
|
439
|
-
},
|
|
440
|
-
contents,
|
|
441
|
-
}, this.lastPromptId);
|
|
442
|
-
const result = await retryWithBackoff(apiCall, {
|
|
443
|
-
onPersistent429: async (authType, error) => await this.handleFlashFallback(authType, error),
|
|
444
|
-
authType: this.config.getContentGeneratorConfig()?.authType,
|
|
445
|
-
});
|
|
446
|
-
let text = getResponseText(result);
|
|
447
|
-
if (!text) {
|
|
448
|
-
const error = new Error('API returned an empty response for generateJson.');
|
|
449
|
-
await reportError(error, 'Error in generateJson: API returned an empty response.', contents, 'generateJson-empty-response');
|
|
450
|
-
throw error;
|
|
451
|
-
}
|
|
452
|
-
const prefix = '```json';
|
|
453
|
-
const suffix = '```';
|
|
454
|
-
if (text.startsWith(prefix) && text.endsWith(suffix)) {
|
|
455
|
-
logMalformedJsonResponse(this.config, new MalformedJsonResponseEvent(modelToUse));
|
|
456
|
-
text = text
|
|
457
|
-
.substring(prefix.length, text.length - suffix.length)
|
|
458
|
-
.trim();
|
|
459
|
-
}
|
|
460
|
-
try {
|
|
461
|
-
return JSON.parse(text);
|
|
462
|
-
}
|
|
463
|
-
catch (parseError) {
|
|
464
|
-
await reportError(parseError, 'Failed to parse JSON response from generateJson.', {
|
|
465
|
-
responseTextFailedToParse: text,
|
|
466
|
-
originalRequestContents: contents,
|
|
467
|
-
}, 'generateJson-parse');
|
|
468
|
-
throw new Error(`Failed to parse API response as JSON: ${getErrorMessage(parseError)}`);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
catch (error) {
|
|
472
|
-
if (abortSignal.aborted) {
|
|
473
|
-
throw error;
|
|
474
|
-
}
|
|
475
|
-
// Avoid double reporting for the empty response case handled above
|
|
476
|
-
if (error instanceof Error &&
|
|
477
|
-
error.message === 'API returned an empty response for generateJson.') {
|
|
478
|
-
throw error;
|
|
479
|
-
}
|
|
480
|
-
await reportError(error, 'Error generating JSON content via API.', contents, 'generateJson-api');
|
|
481
|
-
throw new Error(`Failed to generate JSON content: ${getErrorMessage(error)}`);
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
435
|
async generateContent(contents, generationConfig, abortSignal, model) {
|
|
485
|
-
|
|
436
|
+
let currentAttemptModel = model;
|
|
486
437
|
const configToUse = {
|
|
487
438
|
...this.generateContentConfig,
|
|
488
439
|
...generationConfig,
|
|
@@ -495,13 +446,22 @@ export class GeminiClient {
|
|
|
495
446
|
...configToUse,
|
|
496
447
|
systemInstruction,
|
|
497
448
|
};
|
|
498
|
-
const apiCall = () =>
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
449
|
+
const apiCall = () => {
|
|
450
|
+
const modelToUse = this.config.isInFallbackMode()
|
|
451
|
+
? DEFAULT_GEMINI_FLASH_MODEL
|
|
452
|
+
: model;
|
|
453
|
+
currentAttemptModel = modelToUse;
|
|
454
|
+
return this.getContentGeneratorOrFail().generateContent({
|
|
455
|
+
model: modelToUse,
|
|
456
|
+
config: requestConfig,
|
|
457
|
+
contents,
|
|
458
|
+
}, this.lastPromptId);
|
|
459
|
+
};
|
|
460
|
+
const onPersistent429Callback = async (authType, error) =>
|
|
461
|
+
// Pass the captured model to the centralized handler.
|
|
462
|
+
await handleFallback(this.config, currentAttemptModel, authType, error);
|
|
503
463
|
const result = await retryWithBackoff(apiCall, {
|
|
504
|
-
onPersistent429:
|
|
464
|
+
onPersistent429: onPersistent429Callback,
|
|
505
465
|
authType: this.config.getContentGeneratorConfig()?.authType,
|
|
506
466
|
});
|
|
507
467
|
return result;
|
|
@@ -510,38 +470,23 @@ export class GeminiClient {
|
|
|
510
470
|
if (abortSignal.aborted) {
|
|
511
471
|
throw error;
|
|
512
472
|
}
|
|
513
|
-
await reportError(error, `Error generating content via API with model ${
|
|
473
|
+
await reportError(error, `Error generating content via API with model ${currentAttemptModel}.`, {
|
|
514
474
|
requestContents: contents,
|
|
515
475
|
requestConfig: configToUse,
|
|
516
476
|
}, 'generateContent-api');
|
|
517
|
-
throw new Error(`Failed to generate content with model ${
|
|
477
|
+
throw new Error(`Failed to generate content with model ${currentAttemptModel}: ${getErrorMessage(error)}`);
|
|
518
478
|
}
|
|
519
479
|
}
|
|
520
|
-
async generateEmbedding(texts) {
|
|
521
|
-
if (!texts || texts.length === 0) {
|
|
522
|
-
return [];
|
|
523
|
-
}
|
|
524
|
-
const embedModelParams = {
|
|
525
|
-
model: this.embeddingModel,
|
|
526
|
-
contents: texts,
|
|
527
|
-
};
|
|
528
|
-
const embedContentResponse = await this.getContentGenerator().embedContent(embedModelParams);
|
|
529
|
-
if (!embedContentResponse.embeddings ||
|
|
530
|
-
embedContentResponse.embeddings.length === 0) {
|
|
531
|
-
throw new Error('No embeddings found in API response.');
|
|
532
|
-
}
|
|
533
|
-
if (embedContentResponse.embeddings.length !== texts.length) {
|
|
534
|
-
throw new Error(`API returned a mismatched number of embeddings. Expected ${texts.length}, got ${embedContentResponse.embeddings.length}.`);
|
|
535
|
-
}
|
|
536
|
-
return embedContentResponse.embeddings.map((embedding, index) => {
|
|
537
|
-
const values = embedding.values;
|
|
538
|
-
if (!values || values.length === 0) {
|
|
539
|
-
throw new Error(`API returned an empty embedding for input text at index ${index}: "${texts[index]}"`);
|
|
540
|
-
}
|
|
541
|
-
return values;
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
480
|
async tryCompressChat(prompt_id, force = false) {
|
|
481
|
+
// If the model is 'auto', we will use a placeholder model to check.
|
|
482
|
+
// Compression occurs before we choose a model, so calling `count_tokens`
|
|
483
|
+
// before the model is chosen would result in an error.
|
|
484
|
+
const configModel = this.config.getModel();
|
|
485
|
+
let model = configModel === DEFAULT_GEMINI_MODEL_AUTO
|
|
486
|
+
? DEFAULT_GEMINI_MODEL
|
|
487
|
+
: configModel;
|
|
488
|
+
// Check if the model needs to be a fallback
|
|
489
|
+
model = getEffectiveModel(this.config.isInFallbackMode(), model);
|
|
545
490
|
const curatedHistory = this.getChat().getHistory(true);
|
|
546
491
|
// Regardless of `force`, don't do anything if the history is empty.
|
|
547
492
|
if (curatedHistory.length === 0 ||
|
|
@@ -552,8 +497,7 @@ export class GeminiClient {
|
|
|
552
497
|
compressionStatus: CompressionStatus.NOOP,
|
|
553
498
|
};
|
|
554
499
|
}
|
|
555
|
-
const
|
|
556
|
-
const { totalTokens: originalTokenCount } = await this.getContentGenerator().countTokens({
|
|
500
|
+
const { totalTokens: originalTokenCount } = await this.getContentGeneratorOrFail().countTokens({
|
|
557
501
|
model,
|
|
558
502
|
contents: curatedHistory,
|
|
559
503
|
});
|
|
@@ -578,25 +522,29 @@ export class GeminiClient {
|
|
|
578
522
|
};
|
|
579
523
|
}
|
|
580
524
|
}
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
525
|
+
const splitPoint = findCompressSplitPoint(curatedHistory, 1 - COMPRESSION_PRESERVE_THRESHOLD);
|
|
526
|
+
const historyToCompress = curatedHistory.slice(0, splitPoint);
|
|
527
|
+
const historyToKeep = curatedHistory.slice(splitPoint);
|
|
528
|
+
const summaryResponse = await this.config
|
|
529
|
+
.getContentGenerator()
|
|
530
|
+
.generateContent({
|
|
531
|
+
model,
|
|
532
|
+
contents: [
|
|
533
|
+
...historyToCompress,
|
|
534
|
+
{
|
|
535
|
+
role: 'user',
|
|
536
|
+
parts: [
|
|
537
|
+
{
|
|
538
|
+
text: 'First, reason in your scratchpad. Then, generate the <state_snapshot>.',
|
|
539
|
+
},
|
|
540
|
+
],
|
|
541
|
+
},
|
|
542
|
+
],
|
|
595
543
|
config: {
|
|
596
544
|
systemInstruction: { text: getCompressionPrompt() },
|
|
597
|
-
maxOutputTokens: originalTokenCount,
|
|
598
545
|
},
|
|
599
546
|
}, prompt_id);
|
|
547
|
+
const summary = getResponseText(summaryResponse) ?? '';
|
|
600
548
|
const chat = await this.startChat([
|
|
601
549
|
{
|
|
602
550
|
role: 'user',
|
|
@@ -609,7 +557,7 @@ export class GeminiClient {
|
|
|
609
557
|
...historyToKeep,
|
|
610
558
|
]);
|
|
611
559
|
this.forceFullIdeContext = true;
|
|
612
|
-
const { totalTokens: newTokenCount } = await this.
|
|
560
|
+
const { totalTokens: newTokenCount } = await this.getContentGeneratorOrFail().countTokens({
|
|
613
561
|
// model might change after calling `sendMessage`, so we get the newest value from config
|
|
614
562
|
model: this.config.getModel(),
|
|
615
563
|
contents: chat.getHistory(),
|
|
@@ -623,6 +571,7 @@ export class GeminiClient {
|
|
|
623
571
|
compressionStatus: CompressionStatus.COMPRESSION_FAILED_TOKEN_COUNT_ERROR,
|
|
624
572
|
};
|
|
625
573
|
}
|
|
574
|
+
uiTelemetryService.setLastPromptTokenCount(newTokenCount);
|
|
626
575
|
logChatCompression(this.config, makeChatCompressionEvent({
|
|
627
576
|
tokens_before: originalTokenCount,
|
|
628
577
|
tokens_after: newTokenCount,
|
|
@@ -645,42 +594,6 @@ export class GeminiClient {
|
|
|
645
594
|
compressionStatus: CompressionStatus.COMPRESSED,
|
|
646
595
|
};
|
|
647
596
|
}
|
|
648
|
-
/**
|
|
649
|
-
* Handles falling back to Flash model when persistent 429 errors occur for OAuth users.
|
|
650
|
-
* Uses a fallback handler if provided by the config; otherwise, returns null.
|
|
651
|
-
*/
|
|
652
|
-
async handleFlashFallback(authType, error) {
|
|
653
|
-
// Only handle fallback for OAuth users
|
|
654
|
-
if (authType !== AuthType.LOGIN_WITH_GOOGLE) {
|
|
655
|
-
return null;
|
|
656
|
-
}
|
|
657
|
-
const currentModel = this.config.getModel();
|
|
658
|
-
const fallbackModel = DEFAULT_GEMINI_FLASH_MODEL;
|
|
659
|
-
// Don't fallback if already using Flash model
|
|
660
|
-
if (currentModel === fallbackModel) {
|
|
661
|
-
return null;
|
|
662
|
-
}
|
|
663
|
-
// Check if config has a fallback handler (set by CLI package)
|
|
664
|
-
const fallbackHandler = this.config.flashFallbackHandler;
|
|
665
|
-
if (typeof fallbackHandler === 'function') {
|
|
666
|
-
try {
|
|
667
|
-
const accepted = await fallbackHandler(currentModel, fallbackModel, error);
|
|
668
|
-
if (accepted !== false && accepted !== null) {
|
|
669
|
-
this.config.setModel(fallbackModel);
|
|
670
|
-
this.config.setFallbackMode(true);
|
|
671
|
-
return fallbackModel;
|
|
672
|
-
}
|
|
673
|
-
// Check if the model was switched manually in the handler
|
|
674
|
-
if (this.config.getModel() === fallbackModel) {
|
|
675
|
-
return null; // Model was switched but don't continue with current prompt
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
catch (error) {
|
|
679
|
-
console.warn('Flash fallback handler failed:', error);
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
return null;
|
|
683
|
-
}
|
|
684
597
|
}
|
|
685
598
|
export const TEST_ONLY = {
|
|
686
599
|
COMPRESSION_PRESERVE_THRESHOLD,
|