@google/gemini-cli-core 0.31.0-preview.3 → 0.32.0-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/changelogs/index.md +22 -0
- package/dist/docs/changelogs/latest.md +307 -352
- package/dist/docs/changelogs/preview.md +391 -293
- package/dist/docs/cli/plan-mode.md +29 -7
- package/dist/docs/cli/settings.md +15 -6
- package/dist/docs/cli/telemetry.md +39 -11
- package/dist/docs/extensions/reference.md +36 -0
- package/dist/docs/get-started/installation.md +1 -1
- package/dist/docs/local-development.md +49 -43
- package/dist/docs/reference/configuration.md +32 -0
- package/dist/docs/reference/keyboard-shortcuts.md +6 -6
- package/dist/docs/reference/policy-engine.md +4 -3
- package/dist/docs/resources/faq.md +13 -0
- package/dist/docs/resources/tos-privacy.md +6 -0
- package/dist/docs/resources/uninstall.md +1 -10
- package/dist/docs/tools/mcp-server.md +22 -0
- package/dist/src/agents/a2a-client-manager.d.ts +7 -6
- package/dist/src/agents/a2a-client-manager.js +8 -9
- package/dist/src/agents/a2a-client-manager.js.map +1 -1
- package/dist/src/agents/a2a-client-manager.test.js +45 -31
- package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
- package/dist/src/agents/a2aUtils.d.ts +25 -7
- package/dist/src/agents/a2aUtils.js +165 -58
- package/dist/src/agents/a2aUtils.js.map +1 -1
- package/dist/src/agents/a2aUtils.test.js +170 -27
- package/dist/src/agents/a2aUtils.test.js.map +1 -1
- package/dist/src/agents/generalist-agent.js +1 -2
- package/dist/src/agents/generalist-agent.js.map +1 -1
- package/dist/src/agents/registry.test.js +4 -2
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +2 -1
- package/dist/src/agents/remote-invocation.js +41 -22
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +196 -56
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.js +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +1 -1
- package/dist/src/agents/subagent-tool.js +15 -2
- package/dist/src/agents/subagent-tool.js.map +1 -1
- package/dist/src/agents/subagent-tool.test.js +31 -0
- package/dist/src/agents/subagent-tool.test.js.map +1 -1
- package/dist/src/billing/billing.d.ts +80 -0
- package/dist/src/billing/billing.js +127 -0
- package/dist/src/billing/billing.js.map +1 -0
- package/dist/src/billing/billing.test.d.ts +6 -0
- package/dist/src/billing/billing.test.js +182 -0
- package/dist/src/billing/billing.test.js.map +1 -0
- package/dist/src/billing/index.d.ts +6 -0
- package/dist/src/billing/index.js +7 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/code_assist/codeAssist.js +1 -1
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/codeAssist.test.js +2 -2
- package/dist/src/code_assist/codeAssist.test.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +9 -4
- package/dist/src/code_assist/converter.js +17 -2
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +6 -3
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +1 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +9 -4
- package/dist/src/code_assist/server.js +86 -5
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +11 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +2 -1
- package/dist/src/code_assist/setup.js +15 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +33 -10
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/config/config.d.ts +50 -4
- package/dist/src/config/config.js +77 -3
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +151 -1
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +1 -0
- package/dist/src/config/storage.js +3 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +3 -2
- package/dist/src/core/contentGenerator.js +9 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +2 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +21 -2
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +2 -1
- package/dist/src/core/fakeContentGenerator.js +1 -0
- package/dist/src/core/fakeContentGenerator.js.map +1 -1
- package/dist/src/core/geminiChat.js +6 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +34 -0
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
- package/dist/src/core/localLiteRtLmClient.js +77 -0
- package/dist/src/core/localLiteRtLmClient.js.map +1 -0
- package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
- package/dist/src/core/localLiteRtLmClient.test.js +87 -0
- package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.d.ts +2 -1
- package/dist/src/core/loggingContentGenerator.js +39 -17
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.js +122 -5
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts.test.js +1 -1
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/fallback/handler.js +2 -0
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/types.d.ts +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/policy/config.d.ts +18 -6
- package/dist/src/policy/config.js +50 -12
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +26 -26
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/policies/plan.toml +1 -1
- package/dist/src/policy/policy-engine.d.ts +8 -0
- package/dist/src/policy/policy-engine.js +12 -0
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +93 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +1 -1
- package/dist/src/policy/toml-loader.js +4 -2
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +15 -12
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/workspace-policy.test.js +10 -10
- package/dist/src/prompts/snippets.js +43 -27
- package/dist/src/prompts/snippets.js.map +1 -1
- package/dist/src/routing/modelRouterService.js +19 -11
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +38 -1
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/routingStrategy.d.ts +3 -2
- package/dist/src/routing/strategies/classifierStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/classifierStrategy.js +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +15 -13
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/compositeStrategy.js +3 -3
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.test.js +10 -8
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/defaultStrategy.js +1 -1
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.test.js +8 -4
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +6 -5
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.js +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +24 -22
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.d.ts +2 -1
- package/dist/src/routing/strategies/overrideStrategy.js +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.test.js +5 -4
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
- package/dist/src/scheduler/scheduler.d.ts +1 -0
- package/dist/src/scheduler/scheduler.js +18 -7
- package/dist/src/scheduler/scheduler.js.map +1 -1
- package/dist/src/scheduler/scheduler.test.js +19 -1
- package/dist/src/scheduler/scheduler.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_parallel.test.js +94 -3
- package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
- package/dist/src/scheduler/tool-executor.js +21 -12
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/scheduler/tool-executor.test.js +54 -0
- package/dist/src/scheduler/tool-executor.test.js.map +1 -1
- package/dist/src/services/trackerService.d.ts +49 -0
- package/dist/src/services/trackerService.js +172 -0
- package/dist/src/services/trackerService.js.map +1 -0
- package/dist/src/services/trackerService.test.d.ts +6 -0
- package/dist/src/services/trackerService.test.js +117 -0
- package/dist/src/services/trackerService.test.js.map +1 -0
- package/dist/src/services/trackerTypes.d.ts +51 -0
- package/dist/src/services/trackerTypes.js +33 -0
- package/dist/src/services/trackerTypes.js.map +1 -0
- package/dist/src/telemetry/billingEvents.d.ts +75 -0
- package/dist/src/telemetry/billingEvents.js +181 -0
- package/dist/src/telemetry/billingEvents.js.map +1 -0
- package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
- package/dist/src/telemetry/billingEvents.test.js +139 -0
- package/dist/src/telemetry/billingEvents.test.js.map +1 -0
- package/dist/src/telemetry/conseca-logger.test.js +1 -0
- package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +25 -0
- package/dist/src/telemetry/constants.js +29 -0
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +3 -1
- package/dist/src/telemetry/index.js +5 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -0
- package/dist/src/telemetry/loggers.js +10 -0
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +16 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +28 -0
- package/dist/src/telemetry/metrics.js +40 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/sanitize.test.js +1 -0
- package/dist/src/telemetry/sanitize.test.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +1 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/telemetryAttributes.js +2 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
- package/dist/src/telemetry/trace.d.ts +2 -1
- package/dist/src/telemetry/trace.js +13 -18
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/trace.test.d.ts +6 -0
- package/dist/src/telemetry/trace.test.js +116 -0
- package/dist/src/telemetry/trace.test.js.map +1 -0
- package/dist/src/tools/confirmation-policy.test.js +1 -0
- package/dist/src/tools/confirmation-policy.test.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js +2 -2
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js +3 -3
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
- package/dist/src/tools/grep-utils.d.ts +1 -1
- package/dist/src/tools/grep-utils.js +4 -4
- package/dist/src/tools/grep-utils.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +9 -9
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +8 -5
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/line-endings.test.js +3 -11
- package/dist/src/tools/line-endings.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +25 -0
- package/dist/src/tools/mcp-client-manager.js +66 -3
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +47 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +20 -9
- package/dist/src/tools/mcp-client.js +50 -46
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +96 -84
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -3
- package/dist/src/tools/mcp-tool.js +1 -0
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +1 -1
- package/dist/src/tools/ripGrep.js +7 -7
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +10 -7
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +1 -0
- package/dist/src/tools/tools.js +1 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +4 -17
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +29 -83
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/editCorrector.d.ts +1 -42
- package/dist/src/utils/editCorrector.js +9 -461
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +17 -421
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/envExpansion.js.map +1 -1
- package/dist/src/utils/errors.js +7 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/errors_timeout.test.d.ts +6 -0
- package/dist/src/utils/errors_timeout.test.js +40 -0
- package/dist/src/utils/errors_timeout.test.js.map +1 -0
- package/dist/src/utils/extensionLoader.js +35 -0
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +36 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fetch.js +13 -2
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.js +0 -1
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +0 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +24 -0
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/googleErrors.d.ts +2 -2
- package/dist/src/utils/googleQuotaErrors.d.ts +3 -1
- package/dist/src/utils/googleQuotaErrors.js +22 -12
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +33 -1
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
- package/dist/src/utils/retry.js +4 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +20 -0
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +0 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.31.0-preview.2.tgz +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { CreditType, GeminiUserTier } from '../code_assist/types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Strategy for handling quota exhaustion when AI credits are available.
|
|
9
|
+
* - 'ask': Prompt the user each time
|
|
10
|
+
* - 'always': Automatically use credits
|
|
11
|
+
* - 'never': Never use credits, show standard fallback
|
|
12
|
+
*/
|
|
13
|
+
export type OverageStrategy = 'ask' | 'always' | 'never';
|
|
14
|
+
/** Credit type for Google One AI credits */
|
|
15
|
+
export declare const G1_CREDIT_TYPE: CreditType;
|
|
16
|
+
/**
|
|
17
|
+
* The set of models that support AI credits overage billing.
|
|
18
|
+
* Only these models are eligible for the credits-based retry flow.
|
|
19
|
+
*/
|
|
20
|
+
export declare const OVERAGE_ELIGIBLE_MODELS: Set<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Checks if a model is eligible for AI credits overage billing.
|
|
23
|
+
* @param model The model name to check.
|
|
24
|
+
* @returns true if the model supports credits overage, false otherwise.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isOverageEligibleModel(model: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Wraps a URL in the AccountChooser redirect to maintain user context.
|
|
29
|
+
* @param email User's email address for account selection
|
|
30
|
+
* @param continueUrl The destination URL after account selection
|
|
31
|
+
* @returns The full AccountChooser redirect URL
|
|
32
|
+
*/
|
|
33
|
+
export declare function wrapInAccountChooser(email: string, continueUrl: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* UTM campaign identifiers per the design doc.
|
|
36
|
+
*/
|
|
37
|
+
export declare const G1_UTM_CAMPAIGNS: {
|
|
38
|
+
/** From Interception Flow "Manage" link (user has credits) */
|
|
39
|
+
readonly MANAGE_ACTIVITY: "hydrogen_cli_settings_ai_credits_activity_page";
|
|
40
|
+
/** From "Manage" to add more credits */
|
|
41
|
+
readonly MANAGE_ADD_CREDITS: "hydrogen_cli_settings_add_credits";
|
|
42
|
+
/** From Empty Wallet Flow "Get AI Credits" link */
|
|
43
|
+
readonly EMPTY_WALLET_ADD_CREDITS: "hydrogen_cli_insufficient_credits_add_credits";
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Builds a G1 AI URL with UTM tracking parameters.
|
|
47
|
+
* @param path The path segment (e.g., 'activity' or 'credits')
|
|
48
|
+
* @param email User's email for AccountChooser wrapper
|
|
49
|
+
* @param campaign The UTM campaign identifier
|
|
50
|
+
* @returns The complete URL wrapped in AccountChooser
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildG1Url(path: 'activity' | 'credits', email: string, campaign: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Extracts the G1 AI credit balance from a tier's available credits.
|
|
55
|
+
* @param tier The user tier to check
|
|
56
|
+
* @returns The credit amount as a number, 0 if eligible but empty, or null if not eligible
|
|
57
|
+
*/
|
|
58
|
+
export declare function getG1CreditBalance(tier: GeminiUserTier | null | undefined): number | null;
|
|
59
|
+
export declare const MIN_CREDIT_BALANCE = 50;
|
|
60
|
+
/**
|
|
61
|
+
* Determines if credits should be automatically used based on the overage strategy.
|
|
62
|
+
* @param strategy The configured overage strategy
|
|
63
|
+
* @param creditBalance The available credit balance
|
|
64
|
+
* @returns true if credits should be auto-used, false otherwise
|
|
65
|
+
*/
|
|
66
|
+
export declare function shouldAutoUseCredits(strategy: OverageStrategy, creditBalance: number | null): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Determines if the overage menu should be shown based on the strategy.
|
|
69
|
+
* @param strategy The configured overage strategy
|
|
70
|
+
* @param creditBalance The available credit balance
|
|
71
|
+
* @returns true if the menu should be shown
|
|
72
|
+
*/
|
|
73
|
+
export declare function shouldShowOverageMenu(strategy: OverageStrategy, creditBalance: number | null): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Determines if the empty wallet menu should be shown.
|
|
76
|
+
* @param strategy The configured overage strategy
|
|
77
|
+
* @param creditBalance The available credit balance
|
|
78
|
+
* @returns true if the empty wallet menu should be shown
|
|
79
|
+
*/
|
|
80
|
+
export declare function shouldShowEmptyWalletMenu(strategy: OverageStrategy, creditBalance: number | null): boolean;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_3_1_MODEL, } from '../config/models.js';
|
|
7
|
+
/** Credit type for Google One AI credits */
|
|
8
|
+
export const G1_CREDIT_TYPE = 'GOOGLE_ONE_AI';
|
|
9
|
+
/**
|
|
10
|
+
* The set of models that support AI credits overage billing.
|
|
11
|
+
* Only these models are eligible for the credits-based retry flow.
|
|
12
|
+
*/
|
|
13
|
+
export const OVERAGE_ELIGIBLE_MODELS = new Set([
|
|
14
|
+
PREVIEW_GEMINI_MODEL,
|
|
15
|
+
PREVIEW_GEMINI_3_1_MODEL,
|
|
16
|
+
]);
|
|
17
|
+
/**
|
|
18
|
+
* Checks if a model is eligible for AI credits overage billing.
|
|
19
|
+
* @param model The model name to check.
|
|
20
|
+
* @returns true if the model supports credits overage, false otherwise.
|
|
21
|
+
*/
|
|
22
|
+
export function isOverageEligibleModel(model) {
|
|
23
|
+
return OVERAGE_ELIGIBLE_MODELS.has(model);
|
|
24
|
+
}
|
|
25
|
+
/** Base URL for Google One AI page */
|
|
26
|
+
const G1_AI_BASE_URL = 'https://one.google.com/ai';
|
|
27
|
+
/** AccountChooser URL for redirecting with email context */
|
|
28
|
+
const ACCOUNT_CHOOSER_URL = 'https://accounts.google.com/AccountChooser';
|
|
29
|
+
/** UTM parameters for CLI tracking */
|
|
30
|
+
const UTM_SOURCE = 'gemini_cli';
|
|
31
|
+
// TODO: change to 'desktop' when G1 service fix is rolled out
|
|
32
|
+
const UTM_MEDIUM = 'web';
|
|
33
|
+
/**
|
|
34
|
+
* Wraps a URL in the AccountChooser redirect to maintain user context.
|
|
35
|
+
* @param email User's email address for account selection
|
|
36
|
+
* @param continueUrl The destination URL after account selection
|
|
37
|
+
* @returns The full AccountChooser redirect URL
|
|
38
|
+
*/
|
|
39
|
+
export function wrapInAccountChooser(email, continueUrl) {
|
|
40
|
+
const params = new URLSearchParams({
|
|
41
|
+
Email: email,
|
|
42
|
+
continue: continueUrl,
|
|
43
|
+
});
|
|
44
|
+
return `${ACCOUNT_CHOOSER_URL}?${params.toString()}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* UTM campaign identifiers per the design doc.
|
|
48
|
+
*/
|
|
49
|
+
export const G1_UTM_CAMPAIGNS = {
|
|
50
|
+
/** From Interception Flow "Manage" link (user has credits) */
|
|
51
|
+
MANAGE_ACTIVITY: 'hydrogen_cli_settings_ai_credits_activity_page',
|
|
52
|
+
/** From "Manage" to add more credits */
|
|
53
|
+
MANAGE_ADD_CREDITS: 'hydrogen_cli_settings_add_credits',
|
|
54
|
+
/** From Empty Wallet Flow "Get AI Credits" link */
|
|
55
|
+
EMPTY_WALLET_ADD_CREDITS: 'hydrogen_cli_insufficient_credits_add_credits',
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Builds a G1 AI URL with UTM tracking parameters.
|
|
59
|
+
* @param path The path segment (e.g., 'activity' or 'credits')
|
|
60
|
+
* @param email User's email for AccountChooser wrapper
|
|
61
|
+
* @param campaign The UTM campaign identifier
|
|
62
|
+
* @returns The complete URL wrapped in AccountChooser
|
|
63
|
+
*/
|
|
64
|
+
export function buildG1Url(path, email, campaign) {
|
|
65
|
+
const baseUrl = `${G1_AI_BASE_URL}/${path}`;
|
|
66
|
+
const params = new URLSearchParams({
|
|
67
|
+
utm_source: UTM_SOURCE,
|
|
68
|
+
utm_medium: UTM_MEDIUM,
|
|
69
|
+
utm_campaign: campaign,
|
|
70
|
+
});
|
|
71
|
+
const urlWithUtm = `${baseUrl}?${params.toString()}`;
|
|
72
|
+
return wrapInAccountChooser(email, urlWithUtm);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extracts the G1 AI credit balance from a tier's available credits.
|
|
76
|
+
* @param tier The user tier to check
|
|
77
|
+
* @returns The credit amount as a number, 0 if eligible but empty, or null if not eligible
|
|
78
|
+
*/
|
|
79
|
+
export function getG1CreditBalance(tier) {
|
|
80
|
+
if (!tier?.availableCredits) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const g1Credits = tier.availableCredits.filter((credit) => credit.creditType === G1_CREDIT_TYPE);
|
|
84
|
+
if (g1Credits.length === 0) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
// creditAmount is an int64 represented as string; sum all matching entries
|
|
88
|
+
return g1Credits.reduce((sum, credit) => {
|
|
89
|
+
const amount = parseInt(credit.creditAmount ?? '0', 10);
|
|
90
|
+
return sum + (isNaN(amount) ? 0 : amount);
|
|
91
|
+
}, 0);
|
|
92
|
+
}
|
|
93
|
+
export const MIN_CREDIT_BALANCE = 50;
|
|
94
|
+
/**
|
|
95
|
+
* Determines if credits should be automatically used based on the overage strategy.
|
|
96
|
+
* @param strategy The configured overage strategy
|
|
97
|
+
* @param creditBalance The available credit balance
|
|
98
|
+
* @returns true if credits should be auto-used, false otherwise
|
|
99
|
+
*/
|
|
100
|
+
export function shouldAutoUseCredits(strategy, creditBalance) {
|
|
101
|
+
return (strategy === 'always' &&
|
|
102
|
+
creditBalance != null &&
|
|
103
|
+
creditBalance >= MIN_CREDIT_BALANCE);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Determines if the overage menu should be shown based on the strategy.
|
|
107
|
+
* @param strategy The configured overage strategy
|
|
108
|
+
* @param creditBalance The available credit balance
|
|
109
|
+
* @returns true if the menu should be shown
|
|
110
|
+
*/
|
|
111
|
+
export function shouldShowOverageMenu(strategy, creditBalance) {
|
|
112
|
+
return (strategy === 'ask' &&
|
|
113
|
+
creditBalance != null &&
|
|
114
|
+
creditBalance >= MIN_CREDIT_BALANCE);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Determines if the empty wallet menu should be shown.
|
|
118
|
+
* @param strategy The configured overage strategy
|
|
119
|
+
* @param creditBalance The available credit balance
|
|
120
|
+
* @returns true if the empty wallet menu should be shown
|
|
121
|
+
*/
|
|
122
|
+
export function shouldShowEmptyWalletMenu(strategy, creditBalance) {
|
|
123
|
+
return (strategy !== 'never' &&
|
|
124
|
+
creditBalance != null &&
|
|
125
|
+
creditBalance < MIN_CREDIT_BALANCE);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=billing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../../src/billing/billing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { buildG1Url, getG1CreditBalance, G1_CREDIT_TYPE, G1_UTM_CAMPAIGNS, isOverageEligibleModel, shouldAutoUseCredits, shouldShowEmptyWalletMenu, shouldShowOverageMenu, wrapInAccountChooser, } from './billing.js';
|
|
8
|
+
describe('billing', () => {
|
|
9
|
+
describe('wrapInAccountChooser', () => {
|
|
10
|
+
it('should wrap URL with AccountChooser redirect', () => {
|
|
11
|
+
const result = wrapInAccountChooser('user@gmail.com', 'https://one.google.com/ai/activity');
|
|
12
|
+
expect(result).toBe('https://accounts.google.com/AccountChooser?Email=user%40gmail.com&continue=https%3A%2F%2Fone.google.com%2Fai%2Factivity');
|
|
13
|
+
});
|
|
14
|
+
it('should handle special characters in email', () => {
|
|
15
|
+
const result = wrapInAccountChooser('user+test@example.com', 'https://example.com');
|
|
16
|
+
expect(result).toContain('Email=user%2Btest%40example.com');
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('buildG1Url', () => {
|
|
20
|
+
it('should build activity URL with UTM params wrapped in AccountChooser', () => {
|
|
21
|
+
const result = buildG1Url('activity', 'user@gmail.com', G1_UTM_CAMPAIGNS.MANAGE_ACTIVITY);
|
|
22
|
+
// Should contain AccountChooser prefix
|
|
23
|
+
expect(result).toContain('https://accounts.google.com/AccountChooser');
|
|
24
|
+
expect(result).toContain('Email=user%40gmail.com');
|
|
25
|
+
// The continue URL should contain the G1 activity path and UTM params
|
|
26
|
+
expect(result).toContain('one.google.com%2Fai%2Factivity');
|
|
27
|
+
expect(result).toContain('utm_source%3Dgemini_cli');
|
|
28
|
+
expect(result).toContain('utm_campaign%3Dhydrogen_cli_settings_ai_credits_activity_page');
|
|
29
|
+
});
|
|
30
|
+
it('should build credits URL with UTM params wrapped in AccountChooser', () => {
|
|
31
|
+
const result = buildG1Url('credits', 'test@example.com', G1_UTM_CAMPAIGNS.EMPTY_WALLET_ADD_CREDITS);
|
|
32
|
+
expect(result).toContain('https://accounts.google.com/AccountChooser');
|
|
33
|
+
expect(result).toContain('one.google.com%2Fai%2Fcredits');
|
|
34
|
+
expect(result).toContain('utm_campaign%3Dhydrogen_cli_insufficient_credits_add_credits');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('getG1CreditBalance', () => {
|
|
38
|
+
it('should return null for null tier', () => {
|
|
39
|
+
expect(getG1CreditBalance(null)).toBeNull();
|
|
40
|
+
});
|
|
41
|
+
it('should return null for undefined tier', () => {
|
|
42
|
+
expect(getG1CreditBalance(undefined)).toBeNull();
|
|
43
|
+
});
|
|
44
|
+
it('should return null for tier without availableCredits', () => {
|
|
45
|
+
const tier = { id: 'PERSONAL' };
|
|
46
|
+
expect(getG1CreditBalance(tier)).toBeNull();
|
|
47
|
+
});
|
|
48
|
+
it('should return null for empty availableCredits array', () => {
|
|
49
|
+
const tier = { id: 'PERSONAL', availableCredits: [] };
|
|
50
|
+
expect(getG1CreditBalance(tier)).toBeNull();
|
|
51
|
+
});
|
|
52
|
+
it('should return null when no G1 credit type found', () => {
|
|
53
|
+
const tier = {
|
|
54
|
+
id: 'PERSONAL',
|
|
55
|
+
availableCredits: [
|
|
56
|
+
{ creditType: 'CREDIT_TYPE_UNSPECIFIED', creditAmount: '100' },
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
expect(getG1CreditBalance(tier)).toBeNull();
|
|
60
|
+
});
|
|
61
|
+
it('should return G1 credit balance when present', () => {
|
|
62
|
+
const tier = {
|
|
63
|
+
id: 'PERSONAL',
|
|
64
|
+
availableCredits: [{ creditType: G1_CREDIT_TYPE, creditAmount: '500' }],
|
|
65
|
+
};
|
|
66
|
+
expect(getG1CreditBalance(tier)).toBe(500);
|
|
67
|
+
});
|
|
68
|
+
it('should return G1 credit balance when multiple credit types present', () => {
|
|
69
|
+
const tier = {
|
|
70
|
+
id: 'PERSONAL',
|
|
71
|
+
availableCredits: [
|
|
72
|
+
{ creditType: 'CREDIT_TYPE_UNSPECIFIED', creditAmount: '100' },
|
|
73
|
+
{ creditType: G1_CREDIT_TYPE, creditAmount: '750' },
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
expect(getG1CreditBalance(tier)).toBe(750);
|
|
77
|
+
});
|
|
78
|
+
it('should return 0 for invalid credit amount', () => {
|
|
79
|
+
const tier = {
|
|
80
|
+
id: 'PERSONAL',
|
|
81
|
+
availableCredits: [
|
|
82
|
+
{ creditType: G1_CREDIT_TYPE, creditAmount: 'invalid' },
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
expect(getG1CreditBalance(tier)).toBe(0);
|
|
86
|
+
});
|
|
87
|
+
it('should handle large credit amounts (int64 as string)', () => {
|
|
88
|
+
const tier = {
|
|
89
|
+
id: 'PERSONAL',
|
|
90
|
+
availableCredits: [
|
|
91
|
+
{ creditType: G1_CREDIT_TYPE, creditAmount: '9999999999' },
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
expect(getG1CreditBalance(tier)).toBe(9999999999);
|
|
95
|
+
});
|
|
96
|
+
it('should sum multiple credits of the same G1 type', () => {
|
|
97
|
+
const tier = {
|
|
98
|
+
id: 'PERSONAL',
|
|
99
|
+
availableCredits: [
|
|
100
|
+
{ creditType: G1_CREDIT_TYPE, creditAmount: '1000' },
|
|
101
|
+
{ creditType: G1_CREDIT_TYPE, creditAmount: '8' },
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
expect(getG1CreditBalance(tier)).toBe(1008);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('shouldAutoUseCredits', () => {
|
|
108
|
+
it('should return true when strategy is always and balance > 0', () => {
|
|
109
|
+
expect(shouldAutoUseCredits('always', 100)).toBe(true);
|
|
110
|
+
});
|
|
111
|
+
it('should return false when strategy is always but balance is 0', () => {
|
|
112
|
+
expect(shouldAutoUseCredits('always', 0)).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
it('should return false when strategy is ask', () => {
|
|
115
|
+
expect(shouldAutoUseCredits('ask', 100)).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
it('should return false when strategy is never', () => {
|
|
118
|
+
expect(shouldAutoUseCredits('never', 100)).toBe(false);
|
|
119
|
+
});
|
|
120
|
+
it('should return false when creditBalance is null (ineligible)', () => {
|
|
121
|
+
expect(shouldAutoUseCredits('always', null)).toBe(false);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe('shouldShowOverageMenu', () => {
|
|
125
|
+
it('should return true when strategy is ask and balance > 0', () => {
|
|
126
|
+
expect(shouldShowOverageMenu('ask', 100)).toBe(true);
|
|
127
|
+
});
|
|
128
|
+
it('should return false when strategy is ask but balance is 0', () => {
|
|
129
|
+
expect(shouldShowOverageMenu('ask', 0)).toBe(false);
|
|
130
|
+
});
|
|
131
|
+
it('should return false when strategy is always', () => {
|
|
132
|
+
expect(shouldShowOverageMenu('always', 100)).toBe(false);
|
|
133
|
+
});
|
|
134
|
+
it('should return false when strategy is never', () => {
|
|
135
|
+
expect(shouldShowOverageMenu('never', 100)).toBe(false);
|
|
136
|
+
});
|
|
137
|
+
it('should return false when creditBalance is null (ineligible)', () => {
|
|
138
|
+
expect(shouldShowOverageMenu('ask', null)).toBe(false);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('shouldShowEmptyWalletMenu', () => {
|
|
142
|
+
it('should return true when strategy is ask and balance is 0', () => {
|
|
143
|
+
expect(shouldShowEmptyWalletMenu('ask', 0)).toBe(true);
|
|
144
|
+
});
|
|
145
|
+
it('should return true when strategy is always and balance is 0', () => {
|
|
146
|
+
expect(shouldShowEmptyWalletMenu('always', 0)).toBe(true);
|
|
147
|
+
});
|
|
148
|
+
it('should return false when strategy is never', () => {
|
|
149
|
+
expect(shouldShowEmptyWalletMenu('never', 0)).toBe(false);
|
|
150
|
+
});
|
|
151
|
+
it('should return false when balance > 0', () => {
|
|
152
|
+
expect(shouldShowEmptyWalletMenu('ask', 100)).toBe(false);
|
|
153
|
+
});
|
|
154
|
+
it('should return false when creditBalance is null (ineligible)', () => {
|
|
155
|
+
expect(shouldShowEmptyWalletMenu('ask', null)).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
describe('isOverageEligibleModel', () => {
|
|
159
|
+
it('should return true for gemini-3-pro-preview', () => {
|
|
160
|
+
expect(isOverageEligibleModel('gemini-3-pro-preview')).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
it('should return true for gemini-3.1-pro-preview', () => {
|
|
163
|
+
expect(isOverageEligibleModel('gemini-3.1-pro-preview')).toBe(true);
|
|
164
|
+
});
|
|
165
|
+
it('should return true for gemini-3.1-pro-preview-customtools', () => {
|
|
166
|
+
expect(isOverageEligibleModel('gemini-3.1-pro-preview-customtools')).toBe(false);
|
|
167
|
+
});
|
|
168
|
+
it('should return false for gemini-3-flash-preview', () => {
|
|
169
|
+
expect(isOverageEligibleModel('gemini-3-flash-preview')).toBe(false);
|
|
170
|
+
});
|
|
171
|
+
it('should return false for gemini-2.5-pro', () => {
|
|
172
|
+
expect(isOverageEligibleModel('gemini-2.5-pro')).toBe(false);
|
|
173
|
+
});
|
|
174
|
+
it('should return false for gemini-2.5-flash', () => {
|
|
175
|
+
expect(isOverageEligibleModel('gemini-2.5-flash')).toBe(false);
|
|
176
|
+
});
|
|
177
|
+
it('should return false for custom model names', () => {
|
|
178
|
+
expect(isOverageEligibleModel('my-custom-model')).toBe(false);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=billing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.test.js","sourceRoot":"","sources":["../../../src/billing/billing.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/billing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,cAAc,CAAC"}
|
|
@@ -13,7 +13,7 @@ export async function createCodeAssistContentGenerator(httpOptions, authType, co
|
|
|
13
13
|
authType === AuthType.COMPUTE_ADC) {
|
|
14
14
|
const authClient = await getOauthClient(authType, config);
|
|
15
15
|
const userData = await setupUser(authClient, config.getValidationHandler(), httpOptions);
|
|
16
|
-
return new CodeAssistServer(authClient, userData.projectId, httpOptions, sessionId, userData.userTier, userData.userTierName);
|
|
16
|
+
return new CodeAssistServer(authClient, userData.projectId, httpOptions, sessionId, userData.userTier, userData.userTierName, userData.paidTier, config);
|
|
17
17
|
}
|
|
18
18
|
throw new Error(`Unsupported authType: ${authType}`);
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,MAAc,EACd,SAAkB;IAElB,IACE,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QACvC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EACjC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,UAAU,EACV,MAAM,CAAC,oBAAoB,EAAE,EAC7B,WAAW,CACZ,CAAC;QACF,OAAO,IAAI,gBAAgB,CACzB,UAAU,EACV,QAAQ,CAAC,SAAS,EAClB,WAAW,EACX,SAAS,EACT,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"codeAssist.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAwB,EACxB,QAAkB,EAClB,MAAc,EACd,SAAkB;IAElB,IACE,QAAQ,KAAK,QAAQ,CAAC,iBAAiB;QACvC,QAAQ,KAAK,QAAQ,CAAC,WAAW,EACjC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,UAAU,EACV,MAAM,CAAC,oBAAoB,EAAE,EAC7B,WAAW,CACZ,CAAC;QACF,OAAO,IAAI,gBAAgB,CACzB,UAAU,EACV,QAAQ,CAAC,SAAS,EAClB,WAAW,EACX,SAAS,EACT,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,QAAQ,EACjB,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc;IAEd,IAAI,MAAM,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAE1C,4CAA4C;IAC5C,IAAI,MAAM,YAAY,uBAAuB,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -42,7 +42,7 @@ describe('codeAssist', () => {
|
|
|
42
42
|
const generator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, mockConfig, 'session-123');
|
|
43
43
|
expect(getOauthClient).toHaveBeenCalledWith(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
|
|
44
44
|
expect(setupUser).toHaveBeenCalledWith(mockAuthClient, mockValidationHandler, httpOptions);
|
|
45
|
-
expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, 'session-123', 'free-tier', 'free-tier-name');
|
|
45
|
+
expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, 'session-123', 'free-tier', 'free-tier-name', undefined, mockConfig);
|
|
46
46
|
expect(generator).toBeInstanceOf(MockedCodeAssistServer);
|
|
47
47
|
});
|
|
48
48
|
it('should create a server for COMPUTE_ADC', async () => {
|
|
@@ -52,7 +52,7 @@ describe('codeAssist', () => {
|
|
|
52
52
|
expect(getOauthClient).toHaveBeenCalledWith(AuthType.COMPUTE_ADC, mockConfig);
|
|
53
53
|
expect(setupUser).toHaveBeenCalledWith(mockAuthClient, mockValidationHandler, httpOptions);
|
|
54
54
|
expect(MockedCodeAssistServer).toHaveBeenCalledWith(mockAuthClient, 'test-project', httpOptions, undefined, // No session ID
|
|
55
|
-
'free-tier', 'free-tier-name');
|
|
55
|
+
'free-tier', 'free-tier-name', undefined, mockConfig);
|
|
56
56
|
expect(generator).toBeInstanceOf(MockedCodeAssistServer);
|
|
57
57
|
});
|
|
58
58
|
it('should throw an error for unsupported auth types', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeAssist.test.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,gCAAgC,EAChC,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,oBAAoB;AACpB,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACtB,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvB,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AAE9C,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AACvD,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,sBAAsB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC3D,MAAM,6BAA6B,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEzE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG;YACjB,oBAAoB,EAAE,GAAG,EAAE,CAAC,qBAAqB;SAC7B,CAAC;QACvB,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,UAAU,CAAC,IAAI;YACzB,YAAY,EAAE,gBAAgB;SAC/B,CAAC;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,oBAAoB,CAAC,iBAAiB,CAAC,cAAuB,CAAC,CAAC;YAChE,eAAe,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAEhD,MAAM,SAAS,GAAG,MAAM,gCAAgC,CACtD,WAAW,EACX,QAAQ,CAAC,iBAAiB,EAC1B,UAAU,EACV,aAAa,CACd,CAAC;YAEF,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,QAAQ,CAAC,iBAAiB,EAC1B,UAAU,CACX,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,cAAc,EACd,qBAAqB,EACrB,WAAW,CACZ,CAAC;YACF,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CACjD,cAAc,EACd,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,
|
|
1
|
+
{"version":3,"file":"codeAssist.test.js","sourceRoot":"","sources":["../../../src/code_assist/codeAssist.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { Content, ContentListUnion, GenerateContentParameters, CountTokensParameters, CountTokensResponse, GenerationConfigRoutingConfig, MediaResolution, Candidate, ModelSelectionConfig, GenerateContentResponsePromptFeedback, GenerateContentResponseUsageMetadata, Part, SafetySetting, PartUnion, SpeechConfigUnion, ThinkingConfig, ToolListUnion, ToolConfig } from '@google/genai';
|
|
7
7
|
import { GenerateContentResponse } from '@google/genai';
|
|
8
|
+
import type { Credits } from './types.js';
|
|
8
9
|
export interface CAGenerateContentRequest {
|
|
9
10
|
model: string;
|
|
10
11
|
project?: string;
|
|
11
12
|
user_prompt_id?: string;
|
|
12
13
|
request: VertexGenerateContentRequest;
|
|
14
|
+
enabled_credit_types?: string[];
|
|
13
15
|
}
|
|
14
16
|
interface VertexGenerateContentRequest {
|
|
15
17
|
contents: Content[];
|
|
@@ -46,11 +48,13 @@ interface VertexGenerationConfig {
|
|
|
46
48
|
thinkingConfig?: ThinkingConfig;
|
|
47
49
|
}
|
|
48
50
|
export interface CaGenerateContentResponse {
|
|
49
|
-
response
|
|
51
|
+
response?: VertexGenerateContentResponse;
|
|
50
52
|
traceId?: string;
|
|
53
|
+
consumedCredits?: Credits[];
|
|
54
|
+
remainingCredits?: Credits[];
|
|
51
55
|
}
|
|
52
56
|
interface VertexGenerateContentResponse {
|
|
53
|
-
candidates
|
|
57
|
+
candidates?: Candidate[];
|
|
54
58
|
automaticFunctionCallingHistory?: Content[];
|
|
55
59
|
promptFeedback?: GenerateContentResponsePromptFeedback;
|
|
56
60
|
usageMetadata?: GenerateContentResponseUsageMetadata;
|
|
@@ -64,12 +68,13 @@ interface VertexCountTokenRequest {
|
|
|
64
68
|
contents: Content[];
|
|
65
69
|
}
|
|
66
70
|
export interface CaCountTokenResponse {
|
|
67
|
-
totalTokens
|
|
71
|
+
totalTokens?: number;
|
|
68
72
|
}
|
|
69
73
|
export declare function toCountTokenRequest(req: CountTokensParameters): CaCountTokenRequest;
|
|
70
74
|
export declare function fromCountTokenResponse(res: CaCountTokenResponse): CountTokensResponse;
|
|
71
|
-
export declare function toGenerateContentRequest(req: GenerateContentParameters, userPromptId: string, project?: string, sessionId?: string): CAGenerateContentRequest;
|
|
75
|
+
export declare function toGenerateContentRequest(req: GenerateContentParameters, userPromptId: string, project?: string, sessionId?: string, enabledCreditTypes?: string[]): CAGenerateContentRequest;
|
|
72
76
|
export declare function fromGenerateContentResponse(res: CaGenerateContentResponse): GenerateContentResponse;
|
|
73
77
|
export declare function toContents(contents: ContentListUnion): Content[];
|
|
74
78
|
export declare function toParts(parts: PartUnion[]): Part[];
|
|
79
|
+
export declare function fromGenerateContentResponseUsage(metadata?: GenerateContentResponseUsageMetadata): GenerateContentResponseUsageMetadata | undefined;
|
|
75
80
|
export {};
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { GenerateContentResponse } from '@google/genai';
|
|
7
|
+
import { debugLogger } from '../utils/debugLogger.js';
|
|
7
8
|
export function toCountTokenRequest(req) {
|
|
8
9
|
return {
|
|
9
10
|
request: {
|
|
@@ -13,16 +14,20 @@ export function toCountTokenRequest(req) {
|
|
|
13
14
|
};
|
|
14
15
|
}
|
|
15
16
|
export function fromCountTokenResponse(res) {
|
|
17
|
+
if (res.totalTokens === undefined) {
|
|
18
|
+
debugLogger.warn('Warning: Code Assist API did not return totalTokens. Defaulting to 0.');
|
|
19
|
+
}
|
|
16
20
|
return {
|
|
17
|
-
totalTokens: res.totalTokens,
|
|
21
|
+
totalTokens: res.totalTokens ?? 0,
|
|
18
22
|
};
|
|
19
23
|
}
|
|
20
|
-
export function toGenerateContentRequest(req, userPromptId, project, sessionId) {
|
|
24
|
+
export function toGenerateContentRequest(req, userPromptId, project, sessionId, enabledCreditTypes) {
|
|
21
25
|
return {
|
|
22
26
|
model: req.model,
|
|
23
27
|
project,
|
|
24
28
|
user_prompt_id: userPromptId,
|
|
25
29
|
request: toVertexGenerateContentRequest(req, sessionId),
|
|
30
|
+
enabled_credit_types: enabledCreditTypes,
|
|
26
31
|
};
|
|
27
32
|
}
|
|
28
33
|
export function fromGenerateContentResponse(res) {
|
|
@@ -169,4 +174,14 @@ function toVertexGenerationConfig(config) {
|
|
|
169
174
|
thinkingConfig: config.thinkingConfig,
|
|
170
175
|
};
|
|
171
176
|
}
|
|
177
|
+
export function fromGenerateContentResponseUsage(metadata) {
|
|
178
|
+
if (!metadata) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
promptTokenCount: metadata.promptTokenCount,
|
|
183
|
+
candidatesTokenCount: metadata.candidatesTokenCount,
|
|
184
|
+
totalTokenCount: metadata.totalTokenCount,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
172
187
|
//# sourceMappingURL=converter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../src/code_assist/converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"converter.js","sourceRoot":"","sources":["../../../src/code_assist/converter.ts"],"names":[],"mappings":"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"}
|