@office-ai/aioncli-core 0.2.2 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -3
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/src/agents/codebase-investigator.d.ts +11 -0
- package/dist/src/agents/codebase-investigator.js +73 -0
- package/dist/src/agents/codebase-investigator.js.map +1 -0
- package/dist/src/agents/executor.d.ts +88 -0
- package/dist/src/agents/executor.js +417 -0
- package/dist/src/agents/executor.js.map +1 -0
- package/dist/src/agents/executor.test.js +419 -0
- package/dist/src/agents/executor.test.js.map +1 -0
- package/dist/src/agents/invocation.d.ts +43 -0
- package/dist/src/agents/invocation.js +100 -0
- package/dist/src/agents/invocation.js.map +1 -0
- package/dist/src/agents/invocation.test.js +206 -0
- package/dist/src/agents/invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +35 -0
- package/dist/src/agents/registry.js +58 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/agents/registry.test.js +146 -0
- package/dist/src/agents/registry.test.js.map +1 -0
- package/dist/src/agents/schema-utils.d.ts +39 -0
- package/dist/src/agents/schema-utils.js +57 -0
- package/dist/src/agents/schema-utils.js.map +1 -0
- package/dist/src/agents/schema-utils.test.d.ts +6 -0
- package/dist/src/agents/schema-utils.test.js +144 -0
- package/dist/src/agents/schema-utils.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +36 -0
- package/dist/src/agents/subagent-tool-wrapper.js +47 -0
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.test.d.ts +6 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js +105 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +116 -0
- package/dist/src/agents/types.js +17 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/agents/utils.d.ts +15 -0
- package/dist/src/agents/utils.js +29 -0
- package/dist/src/agents/utils.js.map +1 -0
- package/dist/src/agents/utils.test.d.ts +6 -0
- package/dist/src/agents/utils.test.js +87 -0
- package/dist/src/agents/utils.test.js.map +1 -0
- package/dist/src/code_assist/codeAssist.d.ts +6 -3
- 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 +4 -1
- package/dist/src/code_assist/converter.js +38 -5
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +93 -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.d.ts +6 -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.d.ts +1 -1
- package/dist/src/code_assist/oauth2.js +107 -48
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +735 -343
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +4 -4
- package/dist/src/code_assist/server.js +25 -2
- 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/setup.d.ts +1 -1
- package/dist/src/code_assist/setup.js +1 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +17 -2
- package/dist/src/config/config.d.ts +121 -25
- package/dist/src/config/config.js +298 -87
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +370 -131
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/constants.d.ts +11 -0
- package/dist/src/config/constants.js +16 -0
- package/dist/src/config/constants.js.map +1 -0
- 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 +34 -0
- package/dist/src/config/storage.js +95 -0
- package/dist/src/config/storage.js.map +1 -0
- package/dist/src/config/storage.test.d.ts +6 -0
- package/dist/src/config/storage.test.js +47 -0
- package/dist/src/config/storage.test.js.map +1 -0
- 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 +54 -0
- package/dist/src/core/baseLlmClient.js +190 -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 +316 -0
- package/dist/src/core/baseLlmClient.test.js.map +1 -0
- package/dist/src/core/client.d.ts +28 -28
- package/dist/src/core/client.js +187 -333
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +745 -500
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +4 -4
- package/dist/src/core/contentGenerator.js +6 -7
- 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 +20 -7
- package/dist/src/core/coreToolScheduler.js +216 -53
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +564 -88
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +54 -43
- package/dist/src/core/geminiChat.js +298 -280
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +1255 -321
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiRequest.js +1 -0
- package/dist/src/core/geminiRequest.js.map +1 -1
- package/dist/src/core/logger.d.ts +4 -2
- package/dist/src/core/logger.js +4 -3
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +17 -16
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +3 -3
- package/dist/src/core/loggingContentGenerator.js +15 -16
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -5
- package/dist/src/core/nonInteractiveToolExecutor.js +14 -122
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +158 -78
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.d.ts +4 -3
- package/dist/src/core/openaiContentGenerator.js +21 -14
- package/dist/src/core/openaiContentGenerator.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.test.js +1 -0
- package/dist/src/core/openaiContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +5 -0
- package/dist/src/core/prompts.js +66 -44
- 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.d.ts +24 -18
- package/dist/src/core/subagent.js +125 -90
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +59 -44
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +37 -13
- package/dist/src/core/turn.js +63 -28
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +359 -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 +129 -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 +1 -1
- package/dist/src/generated/git-commit.js +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 +48 -12
- package/dist/src/ide/detect-ide.js +47 -66
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +79 -52
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +69 -23
- package/dist/src/ide/ide-client.js +372 -78
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +375 -30
- 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 +37 -24
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +104 -26
- 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 +7 -5
- package/dist/src/ide/process-utils.js +81 -50
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.d.ts +6 -0
- package/dist/src/ide/process-utils.test.js +158 -0
- package/dist/src/ide/process-utils.test.js.map +1 -0
- 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 +20 -2
- package/dist/src/index.js +20 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +3 -3
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +17 -13
- package/dist/src/mcp/oauth-provider.js +81 -69
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +212 -37
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +14 -32
- package/dist/src/mcp/oauth-token-storage.js +54 -25
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +256 -162
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +9 -1
- package/dist/src/mcp/oauth-utils.js +42 -27
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +41 -1
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +33 -0
- package/dist/src/mcp/sa-impersonation-provider.js +130 -0
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
- package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
- package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
- package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.js +160 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/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 +38 -0
- package/dist/src/mcp/token-storage/types.js +11 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -0
- 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/prompts/mcp-prompts.d.ts +2 -2
- package/dist/src/prompts/prompt-registry.d.ts +1 -1
- 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 +68 -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 +8 -14
- package/dist/src/services/chatRecordingService.js +33 -21
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +69 -25
- 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 +32 -18
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.test.js +3 -3
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/fileSystemService.d.ts +9 -0
- package/dist/src/services/fileSystemService.js +12 -1
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/fileSystemService.test.js +1 -1
- package/dist/src/services/fileSystemService.test.js.map +1 -1
- package/dist/src/services/gitService.d.ts +3 -1
- package/dist/src/services/gitService.js +30 -24
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +30 -37
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +8 -2
- package/dist/src/services/loopDetectionService.js +64 -24
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +64 -13
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +36 -2
- package/dist/src/services/shellExecutionService.js +238 -47
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +197 -58
- 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 +34 -4
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +322 -15
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +321 -11
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +51 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +124 -2
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +31 -0
- package/dist/src/telemetry/config.js +76 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/config.test.d.ts +6 -0
- package/dist/src/telemetry/config.test.js +124 -0
- package/dist/src/telemetry/config.test.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +17 -7
- package/dist/src/telemetry/constants.js +18 -7
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +5 -4
- package/dist/src/telemetry/file-exporters.js +1 -1
- package/dist/src/telemetry/file-exporters.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 +12 -2
- package/dist/src/telemetry/index.js +16 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +17 -2
- package/dist/src/telemetry/loggers.js +316 -14
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +3 -3
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +452 -48
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +323 -12
- package/dist/src/telemetry/metrics.js +464 -83
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +583 -38
- 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.d.ts +1 -1
- package/dist/src/telemetry/sdk.js +20 -2
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +108 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/telemetry-utils.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.js +14 -0
- package/dist/src/telemetry/telemetry-utils.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.test.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.test.js +40 -0
- package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +136 -8
- package/dist/src/telemetry/types.js +233 -11
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +3 -3
- package/dist/src/telemetry/uiTelemetry.js +7 -8
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +33 -29
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/config.d.ts +2 -1
- package/dist/src/test-utils/config.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 +66 -0
- package/dist/src/test-utils/{tools.js → mock-tool.js} +45 -29
- package/dist/src/test-utils/mock-tool.js.map +1 -0
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +1 -1
- package/dist/src/tools/diffOptions.d.ts +1 -1
- 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 +6 -5
- package/dist/src/tools/edit.js +58 -40
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +192 -16
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +7 -2
- package/dist/src/tools/glob.js +42 -23
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +80 -4
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +3 -2
- package/dist/src/tools/grep.js +35 -15
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +26 -3
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +3 -2
- package/dist/src/tools/ls.js +31 -39
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +145 -280
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +8 -6
- 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 +18 -21
- package/dist/src/tools/mcp-client.js +87 -120
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +32 -152
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +6 -4
- package/dist/src/tools/mcp-tool.js +51 -13
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +166 -12
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +3 -2
- package/dist/src/tools/memoryTool.js +14 -37
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +16 -4
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
- package/dist/src/tools/message-bus-integration.test.js +183 -0
- package/dist/src/tools/message-bus-integration.test.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +2 -2
- package/dist/src/tools/modifiable-tool.js +3 -3
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +4 -4
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +3 -2
- package/dist/src/tools/read-file.js +33 -43
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +39 -7
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +3 -2
- package/dist/src/tools/read-many-files.js +52 -107
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +64 -11
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +55 -0
- package/dist/src/tools/ripGrep.js +393 -0
- package/dist/src/tools/ripGrep.js.map +1 -0
- package/dist/src/tools/ripGrep.test.d.ts +6 -0
- package/dist/src/tools/ripGrep.test.js +976 -0
- package/dist/src/tools/ripGrep.test.js.map +1 -0
- package/dist/src/tools/shell.d.ts +13 -2
- package/dist/src/tools/shell.js +42 -32
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +57 -75
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +91 -0
- package/dist/src/tools/smart-edit.js +702 -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 +542 -0
- package/dist/src/tools/smart-edit.test.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +18 -1
- package/dist/src/tools/tool-error.js +27 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +10 -4
- package/dist/src/tools/tool-registry.js +20 -7
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +93 -10
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +33 -16
- package/dist/src/tools/tools.js +115 -5
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +1 -2
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +3 -2
- package/dist/src/tools/web-fetch.js +14 -10
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +55 -16
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +4 -3
- package/dist/src/tools/web-search.js +31 -8
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +69 -1
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +4 -3
- package/dist/src/tools/write-file.js +17 -18
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +108 -24
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +25 -0
- package/dist/src/tools/write-todos.js +150 -0
- package/dist/src/tools/write-todos.js.map +1 -0
- package/dist/src/tools/write-todos.test.d.ts +6 -0
- package/dist/src/tools/write-todos.test.js +89 -0
- package/dist/src/tools/write-todos.test.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +2 -2
- package/dist/src/utils/bfsFileSearch.js +13 -7
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +3 -3
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/editCorrector.d.ts +9 -8
- package/dist/src/utils/editCorrector.js +62 -19
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +33 -82
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.js +32 -45
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +62 -76
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +2 -2
- 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/errorReporting.d.ts +1 -1
- package/dist/src/utils/errors.d.ts +25 -0
- package/dist/src/utils/errors.js +42 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fetch.js +1 -1
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +24 -12
- package/dist/src/utils/fileUtils.js +170 -79
- 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/filesearch/crawler.d.ts +1 -1
- package/dist/src/utils/filesearch/crawler.test.js +2 -2
- package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +1 -0
- package/dist/src/utils/filesearch/fileSearch.js +14 -9
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +90 -0
- package/dist/src/utils/filesearch/fileSearch.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} +33 -29
- 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/generateContentResponseUtilities.d.ts +1 -2
- package/dist/src/utils/generateContentResponseUtilities.js +1 -13
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js +2 -40
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.d.ts +2 -2
- package/dist/src/utils/getFolderStructure.js +3 -3
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +4 -4
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.d.ts +3 -7
- package/dist/src/utils/gitIgnoreParser.js +126 -35
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +69 -38
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/gitUtils.js +2 -2
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/ignorePatterns.d.ts +103 -0
- package/dist/src/utils/ignorePatterns.js +220 -0
- package/dist/src/utils/ignorePatterns.js.map +1 -0
- package/dist/src/utils/ignorePatterns.test.d.ts +6 -0
- package/dist/src/utils/ignorePatterns.test.js +250 -0
- package/dist/src/utils/ignorePatterns.test.js.map +1 -0
- package/dist/src/utils/installationManager.d.ts +16 -0
- package/dist/src/utils/installationManager.js +50 -0
- package/dist/src/utils/installationManager.js.map +1 -0
- package/dist/src/utils/installationManager.test.d.ts +6 -0
- package/dist/src/utils/installationManager.test.js +83 -0
- package/dist/src/utils/installationManager.test.js.map +1 -0
- package/dist/src/utils/language-detection.d.ts +6 -0
- package/dist/src/utils/language-detection.js +101 -0
- package/dist/src/utils/language-detection.js.map +1 -0
- package/dist/src/utils/llm-edit-fixer.d.ts +26 -0
- package/dist/src/utils/llm-edit-fixer.js +131 -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 +186 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +7 -6
- package/dist/src/utils/memoryDiscovery.js +68 -33
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +88 -26
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +15 -22
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +16 -141
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/messageInspectors.d.ts +1 -1
- package/dist/src/utils/nextSpeakerChecker.d.ts +3 -3
- 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/partUtils.d.ts +22 -1
- package/dist/src/utils/partUtils.js +68 -0
- package/dist/src/utils/partUtils.js.map +1 -1
- package/dist/src/utils/partUtils.test.js +112 -1
- package/dist/src/utils/partUtils.test.js.map +1 -1
- package/dist/src/utils/pathReader.d.ts +17 -0
- package/dist/src/utils/pathReader.js +92 -0
- package/dist/src/utils/pathReader.js.map +1 -0
- package/dist/src/utils/pathReader.test.d.ts +6 -0
- package/dist/src/utils/pathReader.test.js +363 -0
- package/dist/src/utils/pathReader.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +0 -17
- package/dist/src/utils/paths.js +2 -28
- package/dist/src/utils/paths.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/quotaErrorDetection.d.ts +1 -1
- package/dist/src/utils/retry.d.ts +3 -1
- package/dist/src/utils/retry.js +60 -5
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +35 -3
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +15 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/src/utils/schemaValidator.test.d.ts +6 -0
- package/dist/src/utils/schemaValidator.test.js +113 -0
- package/dist/src/utils/schemaValidator.test.js.map +1 -0
- package/dist/src/utils/session.js +1 -1
- package/dist/src/utils/session.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +6 -1
- package/dist/src/utils/shell-utils.js +51 -30
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +9 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/summarizer.d.ts +2 -2
- package/dist/src/utils/summarizer.test.js.map +1 -1
- package/dist/src/utils/systemEncoding.js +2 -2
- package/dist/src/utils/systemEncoding.js.map +1 -1
- package/dist/src/utils/systemEncoding.test.js +2 -2
- package/dist/src/utils/systemEncoding.test.js.map +1 -1
- package/dist/src/utils/terminalSerializer.d.ts +25 -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/src/utils/thoughtUtils.d.ts +21 -0
- package/dist/src/utils/thoughtUtils.js +39 -0
- package/dist/src/utils/thoughtUtils.js.map +1 -0
- package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
- package/dist/src/utils/thoughtUtils.test.js +78 -0
- package/dist/src/utils/thoughtUtils.test.js.map +1 -0
- package/dist/src/utils/tool-utils.d.ts +19 -0
- package/dist/src/utils/tool-utils.js +58 -0
- package/dist/src/utils/tool-utils.js.map +1 -0
- package/dist/src/utils/tool-utils.test.d.ts +6 -0
- package/dist/src/utils/tool-utils.test.js +61 -0
- package/dist/src/utils/tool-utils.test.js.map +1 -0
- package/dist/src/utils/userAccountManager.d.ts +20 -0
- package/dist/src/utils/userAccountManager.js +114 -0
- package/dist/src/utils/userAccountManager.js.map +1 -0
- package/dist/src/utils/userAccountManager.test.d.ts +6 -0
- package/dist/src/utils/{user_account.test.js → userAccountManager.test.js} +33 -30
- package/dist/src/utils/userAccountManager.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.js +13 -7
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +41 -16
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -9
- package/dist/src/core/modelCheck.d.ts +0 -14
- package/dist/src/core/modelCheck.js +0 -62
- package/dist/src/core/modelCheck.js.map +0 -1
- package/dist/src/test-utils/tools.d.ts +0 -44
- package/dist/src/test-utils/tools.js.map +0 -1
- package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
- package/dist/src/utils/user_account.d.ts +0 -9
- package/dist/src/utils/user_account.js +0 -109
- package/dist/src/utils/user_account.js.map +0 -1
- package/dist/src/utils/user_account.test.js.map +0 -1
- package/dist/src/utils/user_id.d.ts +0 -11
- package/dist/src/utils/user_id.js +0 -49
- package/dist/src/utils/user_id.js.map +0 -1
- 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/flashFallback.integration.test.d.ts → agents/executor.test.d.ts} +0 -0
- /package/dist/src/{utils/user_account.test.d.ts → agents/invocation.test.d.ts} +0 -0
- /package/dist/src/{utils/user_id.test.d.ts → agents/registry.test.d.ts} +0 -0
package/dist/src/core/client.js
CHANGED
|
@@ -4,49 +4,67 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { getDirectoryContextString, getEnvironmentContext, } from '../utils/environmentContext.js';
|
|
7
|
-
import {
|
|
7
|
+
import { CompressionStatus } from './turn.js';
|
|
8
|
+
import { Turn, GeminiEventType } from './turn.js';
|
|
8
9
|
import { getCoreSystemPrompt, getCompressionPrompt } from './prompts.js';
|
|
9
|
-
import { getResponseText
|
|
10
|
+
import { getResponseText } from '../utils/partUtils.js';
|
|
10
11
|
import { checkNextSpeaker } from '../utils/nextSpeakerChecker.js';
|
|
11
12
|
import { reportError } from '../utils/errorReporting.js';
|
|
12
13
|
import { GeminiChat } from './geminiChat.js';
|
|
13
14
|
import { retryWithBackoff } from '../utils/retry.js';
|
|
14
15
|
import { getErrorMessage } from '../utils/errors.js';
|
|
15
|
-
import { isFunctionResponse } from '../utils/messageInspectors.js';
|
|
16
16
|
import { tokenLimit } from './tokenLimits.js';
|
|
17
|
-
import {
|
|
18
|
-
import { ProxyAgent, setGlobalDispatcher } from 'undici';
|
|
19
|
-
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';
|
|
20
18
|
import { LoopDetectionService } from '../services/loopDetectionService.js';
|
|
21
|
-
import {
|
|
19
|
+
import { ideContextStore } from '../ide/ideContext.js';
|
|
22
20
|
import { logChatCompression, logNextSpeakerCheck, } from '../telemetry/loggers.js';
|
|
23
|
-
import { makeChatCompressionEvent,
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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
|
+
const content = contents[i];
|
|
50
|
+
if (content.role === 'user' &&
|
|
51
|
+
!content.parts?.some((part) => !!part.functionResponse)) {
|
|
52
|
+
if (cumulativeCharCount >= targetCharCount) {
|
|
53
|
+
return i;
|
|
54
|
+
}
|
|
55
|
+
lastSplitPoint = i;
|
|
56
|
+
}
|
|
57
|
+
cumulativeCharCount += charCounts[i];
|
|
58
|
+
}
|
|
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;
|
|
48
65
|
}
|
|
49
|
-
|
|
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,29 +87,27 @@ export class GeminiClient {
|
|
|
71
87
|
sessionTurnCount = 0;
|
|
72
88
|
loopDetector;
|
|
73
89
|
lastPromptId;
|
|
90
|
+
currentSequenceModel = null;
|
|
74
91
|
lastSentIdeContext;
|
|
75
92
|
forceFullIdeContext = true;
|
|
93
|
+
/**
|
|
94
|
+
* At any point in this conversation, was compression triggered without
|
|
95
|
+
* being forced and did it fail?
|
|
96
|
+
*/
|
|
97
|
+
hasFailedCompressionAttempt = false;
|
|
76
98
|
constructor(config) {
|
|
77
99
|
this.config = config;
|
|
78
|
-
if (config.getProxy()) {
|
|
79
|
-
setGlobalDispatcher(new ProxyAgent(config.getProxy()));
|
|
80
|
-
}
|
|
81
|
-
this.embeddingModel = config.getEmbeddingModel();
|
|
82
100
|
this.loopDetector = new LoopDetectionService(config);
|
|
83
101
|
this.lastPromptId = this.config.getSessionId();
|
|
84
102
|
}
|
|
85
|
-
async initialize(
|
|
86
|
-
this.contentGenerator = await createContentGenerator(contentGeneratorConfig, this.config, this.config.getSessionId());
|
|
103
|
+
async initialize() {
|
|
87
104
|
this.chat = await this.startChat();
|
|
88
105
|
}
|
|
89
|
-
|
|
90
|
-
if (!this.
|
|
106
|
+
getContentGeneratorOrFail() {
|
|
107
|
+
if (!this.config.getContentGenerator()) {
|
|
91
108
|
throw new Error('Content generator not initialized');
|
|
92
109
|
}
|
|
93
|
-
return this.
|
|
94
|
-
}
|
|
95
|
-
getUserTier() {
|
|
96
|
-
return this.contentGenerator?.userTier;
|
|
110
|
+
return this.config.getContentGenerator();
|
|
97
111
|
}
|
|
98
112
|
async addHistory(content) {
|
|
99
113
|
this.getChat().addHistory(content);
|
|
@@ -105,32 +119,16 @@ export class GeminiClient {
|
|
|
105
119
|
return this.chat;
|
|
106
120
|
}
|
|
107
121
|
isInitialized() {
|
|
108
|
-
return this.chat !== undefined
|
|
122
|
+
return this.chat !== undefined;
|
|
109
123
|
}
|
|
110
124
|
getHistory() {
|
|
111
125
|
return this.getChat().getHistory();
|
|
112
126
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
newContent.parts = newContent.parts.map((part) => {
|
|
119
|
-
if (part &&
|
|
120
|
-
typeof part === 'object' &&
|
|
121
|
-
'thoughtSignature' in part) {
|
|
122
|
-
const newPart = { ...part };
|
|
123
|
-
delete newPart
|
|
124
|
-
.thoughtSignature;
|
|
125
|
-
return newPart;
|
|
126
|
-
}
|
|
127
|
-
return part;
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
return newContent;
|
|
131
|
-
})
|
|
132
|
-
: history;
|
|
133
|
-
this.getChat().setHistory(historyToSet);
|
|
127
|
+
stripThoughtsFromHistory() {
|
|
128
|
+
this.getChat().stripThoughtsFromHistory();
|
|
129
|
+
}
|
|
130
|
+
setHistory(history) {
|
|
131
|
+
this.getChat().setHistory(history);
|
|
134
132
|
this.forceFullIdeContext = true;
|
|
135
133
|
}
|
|
136
134
|
async setTools() {
|
|
@@ -142,6 +140,12 @@ export class GeminiClient {
|
|
|
142
140
|
async resetChat() {
|
|
143
141
|
this.chat = await this.startChat();
|
|
144
142
|
}
|
|
143
|
+
getChatRecordingService() {
|
|
144
|
+
return this.chat?.getChatRecordingService();
|
|
145
|
+
}
|
|
146
|
+
getLoopDetectionService() {
|
|
147
|
+
return this.loopDetector;
|
|
148
|
+
}
|
|
145
149
|
async addDirectoryContext() {
|
|
146
150
|
if (!this.chat) {
|
|
147
151
|
return;
|
|
@@ -153,6 +157,7 @@ export class GeminiClient {
|
|
|
153
157
|
}
|
|
154
158
|
async startChat(extraHistory) {
|
|
155
159
|
this.forceFullIdeContext = true;
|
|
160
|
+
this.hasFailedCompressionAttempt = false;
|
|
156
161
|
const envParts = await getEnvironmentContext(this.config);
|
|
157
162
|
const toolRegistry = this.config.getToolRegistry();
|
|
158
163
|
const toolDeclarations = toolRegistry.getFunctionDeclarations();
|
|
@@ -171,17 +176,17 @@ export class GeminiClient {
|
|
|
171
176
|
try {
|
|
172
177
|
const userMemory = this.config.getUserMemory();
|
|
173
178
|
const systemInstruction = getCoreSystemPrompt(userMemory);
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return new GeminiChat(this.config,
|
|
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, {
|
|
183
188
|
systemInstruction,
|
|
184
|
-
...
|
|
189
|
+
...config,
|
|
185
190
|
tools,
|
|
186
191
|
}, history);
|
|
187
192
|
}
|
|
@@ -191,7 +196,7 @@ export class GeminiClient {
|
|
|
191
196
|
}
|
|
192
197
|
}
|
|
193
198
|
getIdeContextParts(forceFullContext) {
|
|
194
|
-
const currentIdeContext =
|
|
199
|
+
const currentIdeContext = ideContextStore.get();
|
|
195
200
|
if (!currentIdeContext) {
|
|
196
201
|
return { contextParts: [], newIdeContext: undefined };
|
|
197
202
|
}
|
|
@@ -329,10 +334,11 @@ export class GeminiClient {
|
|
|
329
334
|
};
|
|
330
335
|
}
|
|
331
336
|
}
|
|
332
|
-
async *sendMessageStream(request, signal, prompt_id, turns = MAX_TURNS
|
|
337
|
+
async *sendMessageStream(request, signal, prompt_id, turns = MAX_TURNS) {
|
|
333
338
|
if (this.lastPromptId !== prompt_id) {
|
|
334
339
|
this.loopDetector.reset(prompt_id);
|
|
335
340
|
this.lastPromptId = prompt_id;
|
|
341
|
+
this.currentSequenceModel = null;
|
|
336
342
|
}
|
|
337
343
|
this.sessionTurnCount++;
|
|
338
344
|
if (this.config.getMaxSessionTurns() > 0 &&
|
|
@@ -345,10 +351,8 @@ export class GeminiClient {
|
|
|
345
351
|
if (!boundedTurns) {
|
|
346
352
|
return new Turn(this.getChat(), prompt_id);
|
|
347
353
|
}
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
const compressed = await this.tryCompressChat(prompt_id);
|
|
351
|
-
if (compressed) {
|
|
354
|
+
const compressed = await this.tryCompressChat(prompt_id, false);
|
|
355
|
+
if (compressed.compressionStatus === CompressionStatus.COMPRESSED) {
|
|
352
356
|
yield { type: GeminiEventType.ChatCompressed, value: compressed };
|
|
353
357
|
}
|
|
354
358
|
// Prevent context updates from being sent while a tool call is
|
|
@@ -373,186 +377,63 @@ export class GeminiClient {
|
|
|
373
377
|
this.forceFullIdeContext = false;
|
|
374
378
|
}
|
|
375
379
|
const turn = new Turn(this.getChat(), prompt_id);
|
|
380
|
+
const controller = new AbortController();
|
|
381
|
+
const linkedSignal = AbortSignal.any([signal, controller.signal]);
|
|
376
382
|
const loopDetected = await this.loopDetector.turnStarted(signal);
|
|
377
383
|
if (loopDetected) {
|
|
378
384
|
yield { type: GeminiEventType.LoopDetected };
|
|
379
385
|
return turn;
|
|
380
386
|
}
|
|
381
|
-
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);
|
|
382
405
|
for await (const event of resultStream) {
|
|
383
406
|
if (this.loopDetector.addAndCheck(event)) {
|
|
384
407
|
yield { type: GeminiEventType.LoopDetected };
|
|
408
|
+
controller.abort();
|
|
385
409
|
return turn;
|
|
386
410
|
}
|
|
387
411
|
yield event;
|
|
412
|
+
if (event.type === GeminiEventType.Error) {
|
|
413
|
+
return turn;
|
|
414
|
+
}
|
|
388
415
|
}
|
|
389
416
|
if (!turn.pendingToolCalls.length && signal && !signal.aborted) {
|
|
390
|
-
// Check if
|
|
391
|
-
|
|
392
|
-
if (currentModel !== initialModel) {
|
|
393
|
-
// Model was switched (likely due to quota error fallback)
|
|
394
|
-
// Don't continue with recursive call to prevent unwanted Flash execution
|
|
417
|
+
// Check if next speaker check is needed
|
|
418
|
+
if (this.config.getQuotaErrorOccurred()) {
|
|
395
419
|
return turn;
|
|
396
420
|
}
|
|
397
421
|
if (this.config.getSkipNextSpeakerCheck()) {
|
|
398
422
|
return turn;
|
|
399
423
|
}
|
|
400
|
-
const nextSpeakerCheck = await checkNextSpeaker(this.getChat(), this, signal);
|
|
424
|
+
const nextSpeakerCheck = await checkNextSpeaker(this.getChat(), this.config.getBaseLlmClient(), signal, prompt_id);
|
|
401
425
|
logNextSpeakerCheck(this.config, new NextSpeakerCheckEvent(prompt_id, turn.finishReason?.toString() || '', nextSpeakerCheck?.next_speaker || ''));
|
|
402
426
|
if (nextSpeakerCheck?.next_speaker === 'model') {
|
|
403
427
|
const nextRequest = [{ text: 'Please continue.' }];
|
|
404
428
|
// This recursive call's events will be yielded out, but the final
|
|
405
429
|
// turn object will be from the top-level call.
|
|
406
|
-
yield* this.sendMessageStream(nextRequest, signal, prompt_id, boundedTurns - 1
|
|
430
|
+
yield* this.sendMessageStream(nextRequest, signal, prompt_id, boundedTurns - 1);
|
|
407
431
|
}
|
|
408
432
|
}
|
|
409
433
|
return turn;
|
|
410
434
|
}
|
|
411
|
-
async generateJson(contents, schema, abortSignal, model, config = {}) {
|
|
412
|
-
// Use current model from config instead of hardcoded Flash model
|
|
413
|
-
const modelToUse = model || this.config.getModel() || DEFAULT_GEMINI_FLASH_MODEL;
|
|
414
|
-
// If using OpenAI authType, use OpenAI implementation
|
|
415
|
-
console.log("my generateJson", this.config.getContentGeneratorConfig()?.authType, modelToUse);
|
|
416
|
-
if (this.config.getContentGeneratorConfig()?.authType === AuthType.USE_OPENAI) {
|
|
417
|
-
return this.openaiGenerateJson(contents, schema, abortSignal, modelToUse, config);
|
|
418
|
-
}
|
|
419
|
-
try {
|
|
420
|
-
const userMemory = this.config.getUserMemory();
|
|
421
|
-
const systemInstruction = getCoreSystemPrompt(userMemory);
|
|
422
|
-
const requestConfig = {
|
|
423
|
-
abortSignal,
|
|
424
|
-
...this.generateContentConfig,
|
|
425
|
-
...config,
|
|
426
|
-
};
|
|
427
|
-
const apiCall = () => this.getContentGenerator().generateContent({
|
|
428
|
-
model: modelToUse,
|
|
429
|
-
config: {
|
|
430
|
-
...requestConfig,
|
|
431
|
-
systemInstruction,
|
|
432
|
-
responseJsonSchema: schema,
|
|
433
|
-
responseMimeType: 'application/json',
|
|
434
|
-
},
|
|
435
|
-
contents,
|
|
436
|
-
}, this.lastPromptId);
|
|
437
|
-
const result = await retryWithBackoff(apiCall, {
|
|
438
|
-
onPersistent429: async (authType, error) => await this.handleFlashFallback(authType, error),
|
|
439
|
-
authType: this.config.getContentGeneratorConfig()?.authType,
|
|
440
|
-
});
|
|
441
|
-
let text = getResponseText(result);
|
|
442
|
-
if (!text) {
|
|
443
|
-
const error = new Error('API returned an empty response for generateJson.');
|
|
444
|
-
await reportError(error, 'Error in generateJson: API returned an empty response.', contents, 'generateJson-empty-response');
|
|
445
|
-
throw error;
|
|
446
|
-
}
|
|
447
|
-
const prefix = '```json';
|
|
448
|
-
const suffix = '```';
|
|
449
|
-
if (text.startsWith(prefix) && text.endsWith(suffix)) {
|
|
450
|
-
ClearcutLogger.getInstance(this.config)?.logMalformedJsonResponseEvent(new MalformedJsonResponseEvent(modelToUse));
|
|
451
|
-
text = text
|
|
452
|
-
.substring(prefix.length, text.length - suffix.length)
|
|
453
|
-
.trim();
|
|
454
|
-
}
|
|
455
|
-
try {
|
|
456
|
-
return JSON.parse(text);
|
|
457
|
-
}
|
|
458
|
-
catch (parseError) {
|
|
459
|
-
await reportError(parseError, 'Failed to parse JSON response from generateJson.', {
|
|
460
|
-
responseTextFailedToParse: text,
|
|
461
|
-
originalRequestContents: contents,
|
|
462
|
-
}, 'generateJson-parse');
|
|
463
|
-
throw new Error(`Failed to parse API response as JSON: ${getErrorMessage(parseError)}`);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
catch (error) {
|
|
467
|
-
if (abortSignal.aborted) {
|
|
468
|
-
throw error;
|
|
469
|
-
}
|
|
470
|
-
// Avoid double reporting for the empty response case handled above
|
|
471
|
-
if (error instanceof Error &&
|
|
472
|
-
error.message === 'API returned an empty response for generateJson.') {
|
|
473
|
-
throw error;
|
|
474
|
-
}
|
|
475
|
-
await reportError(error, 'Error generating JSON content via API.', contents, 'generateJson-api');
|
|
476
|
-
throw new Error(`Failed to generate JSON content: ${getErrorMessage(error)}`);
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
async openaiGenerateJson(contents, schema, abortSignal, model, config = {}) {
|
|
480
|
-
try {
|
|
481
|
-
const userMemory = this.config.getUserMemory();
|
|
482
|
-
const systemInstruction = getCoreSystemPrompt(userMemory);
|
|
483
|
-
const requestConfig = {
|
|
484
|
-
abortSignal,
|
|
485
|
-
...this.generateContentConfig,
|
|
486
|
-
...config,
|
|
487
|
-
};
|
|
488
|
-
// Create function declaration for OpenAI-style response
|
|
489
|
-
const functionDeclaration = {
|
|
490
|
-
name: 'respond_in_schema',
|
|
491
|
-
description: 'Provide the response in provided schema',
|
|
492
|
-
parameters: schema,
|
|
493
|
-
};
|
|
494
|
-
const tools = [
|
|
495
|
-
{
|
|
496
|
-
functionDeclarations: [functionDeclaration],
|
|
497
|
-
},
|
|
498
|
-
];
|
|
499
|
-
const apiCall = () => this.getContentGenerator().generateContent({
|
|
500
|
-
model,
|
|
501
|
-
config: {
|
|
502
|
-
...requestConfig,
|
|
503
|
-
systemInstruction,
|
|
504
|
-
tools,
|
|
505
|
-
},
|
|
506
|
-
contents,
|
|
507
|
-
}, this.lastPromptId);
|
|
508
|
-
const result = await retryWithBackoff(apiCall, {
|
|
509
|
-
onPersistent429: async (authType, error) => await this.handleFlashFallback(authType, error),
|
|
510
|
-
authType: this.config.getContentGeneratorConfig()?.authType,
|
|
511
|
-
});
|
|
512
|
-
// Try to extract function call arguments
|
|
513
|
-
const functionCalls = getFunctionCalls(result);
|
|
514
|
-
if (functionCalls && functionCalls.length > 0) {
|
|
515
|
-
const functionCall = functionCalls.find((call) => call.name === 'respond_in_schema');
|
|
516
|
-
if (functionCall && functionCall.args) {
|
|
517
|
-
return functionCall.args;
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
// Fallback: try to parse response text as JSON
|
|
521
|
-
let text = getResponseText(result);
|
|
522
|
-
if (!text) {
|
|
523
|
-
const error = new Error('API returned an empty response for openaiGenerateJson.');
|
|
524
|
-
await reportError(error, 'Error in openaiGenerateJson: API returned an empty response.', contents, 'openaiGenerateJson-empty-response');
|
|
525
|
-
throw error;
|
|
526
|
-
}
|
|
527
|
-
// Handle markdown wrapped JSON
|
|
528
|
-
const prefix = '```json';
|
|
529
|
-
const suffix = '```';
|
|
530
|
-
if (text.startsWith(prefix) && text.endsWith(suffix)) {
|
|
531
|
-
text = text
|
|
532
|
-
.substring(prefix.length, text.length - suffix.length)
|
|
533
|
-
.trim();
|
|
534
|
-
}
|
|
535
|
-
try {
|
|
536
|
-
return JSON.parse(text);
|
|
537
|
-
}
|
|
538
|
-
catch (parseError) {
|
|
539
|
-
await reportError(parseError, 'Failed to parse JSON response from openaiGenerateJson.', {
|
|
540
|
-
responseTextFailedToParse: text,
|
|
541
|
-
originalRequestContents: contents,
|
|
542
|
-
}, 'openaiGenerateJson-parse');
|
|
543
|
-
throw new Error(`Failed to parse API response as JSON: ${getErrorMessage(parseError)}`);
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
catch (error) {
|
|
547
|
-
if (abortSignal.aborted) {
|
|
548
|
-
throw error;
|
|
549
|
-
}
|
|
550
|
-
await reportError(error, 'Error generating JSON content via OpenAI API.', contents, 'openaiGenerateJson-api');
|
|
551
|
-
throw new Error(`Failed to generate JSON content: ${getErrorMessage(error)}`);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
435
|
async generateContent(contents, generationConfig, abortSignal, model) {
|
|
555
|
-
|
|
436
|
+
let currentAttemptModel = model;
|
|
556
437
|
const configToUse = {
|
|
557
438
|
...this.generateContentConfig,
|
|
558
439
|
...generationConfig,
|
|
@@ -565,13 +446,22 @@ export class GeminiClient {
|
|
|
565
446
|
...configToUse,
|
|
566
447
|
systemInstruction,
|
|
567
448
|
};
|
|
568
|
-
const apiCall = () =>
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
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);
|
|
573
463
|
const result = await retryWithBackoff(apiCall, {
|
|
574
|
-
onPersistent429:
|
|
464
|
+
onPersistent429: onPersistent429Callback,
|
|
575
465
|
authType: this.config.getContentGeneratorConfig()?.authType,
|
|
576
466
|
});
|
|
577
467
|
return result;
|
|
@@ -580,79 +470,70 @@ export class GeminiClient {
|
|
|
580
470
|
if (abortSignal.aborted) {
|
|
581
471
|
throw error;
|
|
582
472
|
}
|
|
583
|
-
await reportError(error, `Error generating content via API with model ${
|
|
473
|
+
await reportError(error, `Error generating content via API with model ${currentAttemptModel}.`, {
|
|
584
474
|
requestContents: contents,
|
|
585
475
|
requestConfig: configToUse,
|
|
586
476
|
}, 'generateContent-api');
|
|
587
|
-
throw new Error(`Failed to generate content with model ${
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
async generateEmbedding(texts) {
|
|
591
|
-
if (!texts || texts.length === 0) {
|
|
592
|
-
return [];
|
|
593
|
-
}
|
|
594
|
-
const embedModelParams = {
|
|
595
|
-
model: this.embeddingModel,
|
|
596
|
-
contents: texts,
|
|
597
|
-
};
|
|
598
|
-
const embedContentResponse = await this.getContentGenerator().embedContent(embedModelParams);
|
|
599
|
-
if (!embedContentResponse.embeddings ||
|
|
600
|
-
embedContentResponse.embeddings.length === 0) {
|
|
601
|
-
throw new Error('No embeddings found in API response.');
|
|
602
|
-
}
|
|
603
|
-
if (embedContentResponse.embeddings.length !== texts.length) {
|
|
604
|
-
throw new Error(`API returned a mismatched number of embeddings. Expected ${texts.length}, got ${embedContentResponse.embeddings.length}.`);
|
|
477
|
+
throw new Error(`Failed to generate content with model ${currentAttemptModel}: ${getErrorMessage(error)}`);
|
|
605
478
|
}
|
|
606
|
-
return embedContentResponse.embeddings.map((embedding, index) => {
|
|
607
|
-
const values = embedding.values;
|
|
608
|
-
if (!values || values.length === 0) {
|
|
609
|
-
throw new Error(`API returned an empty embedding for input text at index ${index}: "${texts[index]}"`);
|
|
610
|
-
}
|
|
611
|
-
return values;
|
|
612
|
-
});
|
|
613
479
|
}
|
|
614
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);
|
|
615
490
|
const curatedHistory = this.getChat().getHistory(true);
|
|
616
491
|
// Regardless of `force`, don't do anything if the history is empty.
|
|
617
|
-
if (curatedHistory.length === 0
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
});
|
|
625
|
-
if (originalTokenCount === undefined) {
|
|
626
|
-
console.warn(`Could not determine token count for model ${model}.`);
|
|
627
|
-
return null;
|
|
492
|
+
if (curatedHistory.length === 0 ||
|
|
493
|
+
(this.hasFailedCompressionAttempt && !force)) {
|
|
494
|
+
return {
|
|
495
|
+
originalTokenCount: 0,
|
|
496
|
+
newTokenCount: 0,
|
|
497
|
+
compressionStatus: CompressionStatus.NOOP,
|
|
498
|
+
};
|
|
628
499
|
}
|
|
500
|
+
const originalTokenCount = uiTelemetryService.getLastPromptTokenCount();
|
|
629
501
|
const contextPercentageThreshold = this.config.getChatCompression()?.contextPercentageThreshold;
|
|
630
502
|
// Don't compress if not forced and we are under the limit.
|
|
631
503
|
if (!force) {
|
|
632
504
|
const threshold = contextPercentageThreshold ?? COMPRESSION_TOKEN_THRESHOLD;
|
|
633
505
|
if (originalTokenCount < threshold * tokenLimit(model)) {
|
|
634
|
-
return
|
|
506
|
+
return {
|
|
507
|
+
originalTokenCount,
|
|
508
|
+
newTokenCount: originalTokenCount,
|
|
509
|
+
compressionStatus: CompressionStatus.NOOP,
|
|
510
|
+
};
|
|
635
511
|
}
|
|
636
512
|
}
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
513
|
+
const splitPoint = findCompressSplitPoint(curatedHistory, 1 - COMPRESSION_PRESERVE_THRESHOLD);
|
|
514
|
+
const historyToCompress = curatedHistory.slice(0, splitPoint);
|
|
515
|
+
const historyToKeep = curatedHistory.slice(splitPoint);
|
|
516
|
+
const summaryResponse = await this.config
|
|
517
|
+
.getContentGenerator()
|
|
518
|
+
.generateContent({
|
|
519
|
+
model,
|
|
520
|
+
contents: [
|
|
521
|
+
...historyToCompress,
|
|
522
|
+
{
|
|
523
|
+
role: 'user',
|
|
524
|
+
parts: [
|
|
525
|
+
{
|
|
526
|
+
text: 'First, reason in your scratchpad. Then, generate the <state_snapshot>.',
|
|
527
|
+
},
|
|
528
|
+
],
|
|
529
|
+
},
|
|
530
|
+
],
|
|
651
531
|
config: {
|
|
652
532
|
systemInstruction: { text: getCompressionPrompt() },
|
|
653
533
|
},
|
|
654
534
|
}, prompt_id);
|
|
655
|
-
|
|
535
|
+
const summary = getResponseText(summaryResponse) ?? '';
|
|
536
|
+
const chat = await this.startChat([
|
|
656
537
|
{
|
|
657
538
|
role: 'user',
|
|
658
539
|
parts: [{ text: summary }],
|
|
@@ -664,60 +545,33 @@ export class GeminiClient {
|
|
|
664
545
|
...historyToKeep,
|
|
665
546
|
]);
|
|
666
547
|
this.forceFullIdeContext = true;
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
if (newTokenCount === undefined) {
|
|
673
|
-
console.warn('Could not determine compressed history token count.');
|
|
674
|
-
return null;
|
|
675
|
-
}
|
|
548
|
+
// Estimate token count 1 token ≈ 4 characters
|
|
549
|
+
const newTokenCount = Math.floor(chat
|
|
550
|
+
.getHistory()
|
|
551
|
+
.reduce((total, content) => total + JSON.stringify(content).length, 0) /
|
|
552
|
+
4);
|
|
676
553
|
logChatCompression(this.config, makeChatCompressionEvent({
|
|
677
554
|
tokens_before: originalTokenCount,
|
|
678
555
|
tokens_after: newTokenCount,
|
|
679
556
|
}));
|
|
557
|
+
if (newTokenCount > originalTokenCount) {
|
|
558
|
+
this.hasFailedCompressionAttempt = !force && true;
|
|
559
|
+
return {
|
|
560
|
+
originalTokenCount,
|
|
561
|
+
newTokenCount,
|
|
562
|
+
compressionStatus: CompressionStatus.COMPRESSION_FAILED_INFLATED_TOKEN_COUNT,
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
else {
|
|
566
|
+
this.chat = chat; // Chat compression successful, set new state.
|
|
567
|
+
uiTelemetryService.setLastPromptTokenCount(newTokenCount);
|
|
568
|
+
}
|
|
680
569
|
return {
|
|
681
570
|
originalTokenCount,
|
|
682
571
|
newTokenCount,
|
|
572
|
+
compressionStatus: CompressionStatus.COMPRESSED,
|
|
683
573
|
};
|
|
684
574
|
}
|
|
685
|
-
/**
|
|
686
|
-
* Handles falling back to Flash model when persistent 429 errors occur for OAuth users.
|
|
687
|
-
* Uses a fallback handler if provided by the config; otherwise, returns null.
|
|
688
|
-
*/
|
|
689
|
-
async handleFlashFallback(authType, error) {
|
|
690
|
-
// Only handle fallback for OAuth users
|
|
691
|
-
if (authType !== AuthType.LOGIN_WITH_GOOGLE) {
|
|
692
|
-
return null;
|
|
693
|
-
}
|
|
694
|
-
const currentModel = this.config.getModel();
|
|
695
|
-
const fallbackModel = DEFAULT_GEMINI_FLASH_MODEL;
|
|
696
|
-
// Don't fallback if already using Flash model
|
|
697
|
-
if (currentModel === fallbackModel) {
|
|
698
|
-
return null;
|
|
699
|
-
}
|
|
700
|
-
// Check if config has a fallback handler (set by CLI package)
|
|
701
|
-
const fallbackHandler = this.config.flashFallbackHandler;
|
|
702
|
-
if (typeof fallbackHandler === 'function') {
|
|
703
|
-
try {
|
|
704
|
-
const accepted = await fallbackHandler(currentModel, fallbackModel, error);
|
|
705
|
-
if (accepted !== false && accepted !== null) {
|
|
706
|
-
this.config.setModel(fallbackModel);
|
|
707
|
-
this.config.setFallbackMode(true);
|
|
708
|
-
return fallbackModel;
|
|
709
|
-
}
|
|
710
|
-
// Check if the model was switched manually in the handler
|
|
711
|
-
if (this.config.getModel() === fallbackModel) {
|
|
712
|
-
return null; // Model was switched but don't continue with current prompt
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
catch (error) {
|
|
716
|
-
console.warn('Flash fallback handler failed:', error);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
return null;
|
|
720
|
-
}
|
|
721
575
|
}
|
|
722
576
|
export const TEST_ONLY = {
|
|
723
577
|
COMPRESSION_PRESERVE_THRESHOLD,
|