@google/gemini-cli-core 0.21.1 → 0.22.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/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/agents/codebase-investigator.js +2 -2
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/codebase-investigator.test.js +2 -2
- package/dist/src/agents/codebase-investigator.test.js.map +1 -1
- package/dist/src/agents/delegate-to-agent-tool.d.ts +19 -0
- package/dist/src/agents/delegate-to-agent-tool.js +111 -0
- package/dist/src/agents/delegate-to-agent-tool.js.map +1 -0
- package/dist/src/agents/delegate-to-agent-tool.test.d.ts +6 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js +133 -0
- package/dist/src/agents/delegate-to-agent-tool.test.js.map +1 -0
- package/dist/src/agents/executor.js +1 -1
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/agents/registry.d.ts +15 -0
- package/dist/src/agents/registry.js +49 -17
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +22 -33
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/availability/policyCatalog.d.ts +0 -1
- package/dist/src/availability/policyCatalog.js +8 -6
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/availability/policyCatalog.test.js +2 -2
- package/dist/src/availability/policyCatalog.test.js.map +1 -1
- package/dist/src/availability/policyHelpers.d.ts +2 -5
- package/dist/src/availability/policyHelpers.js +17 -30
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/availability/policyHelpers.test.js +2 -30
- package/dist/src/availability/policyHelpers.test.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.js +2 -1
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.js +7 -10
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -1
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.js +53 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/init.test.d.ts +6 -0
- package/dist/src/commands/init.test.js +25 -0
- package/dist/src/commands/init.test.js.map +1 -0
- package/dist/src/config/config.d.ts +0 -5
- package/dist/src/config/config.js +30 -69
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +36 -123
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +10 -11
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/models.d.ts +17 -22
- package/dist/src/config/models.js +32 -64
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +89 -57
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +4 -0
- package/dist/src/core/baseLlmClient.d.ts +1 -3
- package/dist/src/core/baseLlmClient.js +1 -8
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.js +3 -4
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +1 -3
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +5 -3
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +29 -2
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +1 -1
- package/dist/src/core/coreToolScheduler.js +72 -34
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +134 -37
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +23 -16
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +186 -40
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +0 -2
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +4 -5
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +15 -12
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +14 -13
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.js +1 -1
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/fallback/handler.js +121 -54
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +266 -82
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.js +6 -1
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +8 -1
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
- package/dist/src/hooks/hookRegistry.d.ts +0 -7
- package/dist/src/hooks/hookRegistry.js +0 -20
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/hookRegistry.test.js +1 -7
- package/dist/src/hooks/hookRegistry.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +1 -1
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookSystem.d.ts +0 -8
- package/dist/src/hooks/hookSystem.js +0 -18
- package/dist/src/hooks/hookSystem.js.map +1 -1
- package/dist/src/hooks/hookSystem.test.js +2 -21
- package/dist/src/hooks/hookSystem.test.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +32 -1
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +1 -1
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/output/json-formatter.test.js +2 -0
- package/dist/src/output/json-formatter.test.js.map +1 -1
- package/dist/src/output/stream-json-formatter.js +6 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -1
- package/dist/src/output/stream-json-formatter.test.js +98 -100
- package/dist/src/output/stream-json-formatter.test.js.map +1 -1
- package/dist/src/output/types.d.ts +2 -0
- package/dist/src/policy/config.js +71 -2
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/persistence.test.d.ts +6 -0
- package/dist/src/policy/persistence.test.js +149 -0
- package/dist/src/policy/persistence.test.js.map +1 -0
- package/dist/src/policy/policies/agent.toml +31 -0
- package/dist/src/policy/policy-engine.js +55 -1
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/shell-safety.test.d.ts +6 -0
- package/dist/src/policy/shell-safety.test.js +74 -0
- package/dist/src/policy/shell-safety.test.js.map +1 -0
- package/dist/src/policy/toml-loader.d.ts +8 -0
- package/dist/src/policy/toml-loader.js +3 -3
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/routing/modelRouterService.js +15 -0
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +62 -0
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +21 -10
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +1 -2
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +12 -23
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +39 -69
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +3 -4
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/safety/checker-runner.js +17 -6
- package/dist/src/safety/checker-runner.js.map +1 -1
- package/dist/src/services/chatCompressionService.js +1 -3
- package/dist/src/services/chatCompressionService.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +5 -0
- package/dist/src/services/chatRecordingService.js +7 -0
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/fileSystemService.d.ts +0 -9
- package/dist/src/services/fileSystemService.js +0 -11
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/loopDetectionService.js +2 -2
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.js +32 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +3 -0
- package/dist/src/services/modelConfigService.js +3 -2
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +110 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +1 -2
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +6 -3
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +222 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +0 -16
- package/dist/src/telemetry/activity-detector.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +5 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +18 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +5 -5
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/startupProfiler.test.js +1 -2
- package/dist/src/telemetry/startupProfiler.test.js.map +1 -1
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +10 -5
- package/dist/src/telemetry/types.js +16 -8
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +1 -0
- package/dist/src/telemetry/uiTelemetry.js +2 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +4 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-message-bus.js.map +1 -1
- package/dist/src/tools/edit.js +1 -0
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/mcp-tool.js +13 -0
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +25 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.js +1 -0
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +2 -1
- package/dist/src/tools/shell.js +9 -1
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +2 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.js +1 -0
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +1 -0
- package/dist/src/tools/tool-names.js +1 -0
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tools.d.ts +19 -0
- package/dist/src/tools/tools.js +28 -9
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +1 -0
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/write-file.js +1 -0
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.d.ts +8 -0
- package/dist/src/utils/bfsFileSearch.js +63 -23
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +65 -1
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/checkpointUtils.js.map +1 -1
- package/dist/src/utils/extensionLoader.d.ts +2 -2
- package/dist/src/utils/extensionLoader.js +5 -6
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +11 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +1 -1
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/pathCorrector.js +12 -2
- package/dist/src/utils/pathCorrector.js.map +1 -1
- package/dist/src/utils/pathCorrector.test.js +6 -2
- package/dist/src/utils/pathCorrector.test.js.map +1 -1
- package/dist/src/utils/retry.js +16 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +22 -7
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/shell-permissions.d.ts +52 -0
- package/dist/src/utils/shell-permissions.js +188 -0
- package/dist/src/utils/shell-permissions.js.map +1 -0
- package/dist/src/utils/shell-permissions.test.d.ts +6 -0
- package/dist/src/utils/shell-permissions.test.js +342 -0
- package/dist/src/utils/shell-permissions.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +10 -47
- package/dist/src/utils/shell-utils.js +1 -182
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +1 -288
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/version.d.ts +6 -0
- package/dist/src/utils/version.js +15 -0
- package/dist/src/utils/version.js.map +1 -0
- package/dist/src/utils/version.test.d.ts +6 -0
- package/dist/src/utils/version.test.js +39 -0
- package/dist/src/utils/version.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
|
@@ -3,33 +3,26 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { createDefaultPolicy,
|
|
7
|
-
import { DEFAULT_GEMINI_MODEL,
|
|
6
|
+
import { createDefaultPolicy, getModelPolicyChain } from './policyCatalog.js';
|
|
7
|
+
import { DEFAULT_GEMINI_MODEL, getEffectiveModel } from '../config/models.js';
|
|
8
8
|
/**
|
|
9
9
|
* Resolves the active policy chain for the given config, ensuring the
|
|
10
10
|
* user-selected active model is represented.
|
|
11
11
|
*/
|
|
12
|
-
export function resolvePolicyChain(config, preferredModel
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
chain = createSingleModelChain(modelFromConfig);
|
|
12
|
+
export function resolvePolicyChain(config, preferredModel) {
|
|
13
|
+
const chain = getModelPolicyChain({
|
|
14
|
+
previewEnabled: !!config.getPreviewFeatures(),
|
|
15
|
+
userTier: config.getUserTier(),
|
|
16
|
+
});
|
|
17
|
+
// TODO: This will be replaced when we get rid of Fallback Modes.
|
|
18
|
+
// Switch to getActiveModel()
|
|
19
|
+
const activeModel = preferredModel ??
|
|
20
|
+
getEffectiveModel(config.isInFallbackMode(), config.getModel(), config.getPreviewFeatures());
|
|
21
|
+
if (activeModel === 'auto') {
|
|
22
|
+
return [...chain];
|
|
26
23
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (activeIndex !== -1) {
|
|
30
|
-
return wrapsAround
|
|
31
|
-
? [...chain.slice(activeIndex), ...chain.slice(0, activeIndex)]
|
|
32
|
-
: [...chain.slice(activeIndex)];
|
|
24
|
+
if (chain.some((policy) => policy.model === activeModel)) {
|
|
25
|
+
return [...chain];
|
|
33
26
|
}
|
|
34
27
|
// If the user specified a model not in the default chain, we assume they want
|
|
35
28
|
// *only* that model. We do not fallback to the default chain.
|
|
@@ -38,23 +31,17 @@ export function resolvePolicyChain(config, preferredModel, wrapsAround = false)
|
|
|
38
31
|
/**
|
|
39
32
|
* Produces the failed policy (if it exists in the chain) and the list of
|
|
40
33
|
* fallback candidates that follow it.
|
|
41
|
-
* @param chain - The ordered list of available model policies.
|
|
42
|
-
* @param failedModel - The identifier of the model that failed.
|
|
43
|
-
* @param wrapsAround - If true, treats the chain as a circular buffer.
|
|
44
34
|
*/
|
|
45
|
-
export function buildFallbackPolicyContext(chain, failedModel
|
|
35
|
+
export function buildFallbackPolicyContext(chain, failedModel) {
|
|
46
36
|
const index = chain.findIndex((policy) => policy.model === failedModel);
|
|
47
37
|
if (index === -1) {
|
|
48
38
|
return { failedPolicy: undefined, candidates: chain };
|
|
49
39
|
}
|
|
50
40
|
// Return [candidates_after, candidates_before] to prioritize downgrades
|
|
51
41
|
// (continuing the chain) before wrapping around to upgrades.
|
|
52
|
-
const candidates = wrapsAround
|
|
53
|
-
? [...chain.slice(index + 1), ...chain.slice(0, index)]
|
|
54
|
-
: [...chain.slice(index + 1)];
|
|
55
42
|
return {
|
|
56
43
|
failedPolicy: chain[index],
|
|
57
|
-
candidates,
|
|
44
|
+
candidates: [...chain.slice(index + 1), ...chain.slice(0, index)],
|
|
58
45
|
};
|
|
59
46
|
}
|
|
60
47
|
export function resolvePolicyAction(failureKind, policy) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policyHelpers.js","sourceRoot":"","sources":["../../../src/availability/policyHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,
|
|
1
|
+
{"version":3,"file":"policyHelpers.js","sourceRoot":"","sources":["../../../src/availability/policyHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
7
7
|
import { resolvePolicyChain, buildFallbackPolicyContext, applyModelSelection, } from './policyHelpers.js';
|
|
8
8
|
import { createDefaultPolicy } from './policyCatalog.js';
|
|
9
|
-
import { DEFAULT_GEMINI_MODEL_AUTO } from '../config/models.js';
|
|
10
9
|
const createMockConfig = (overrides = {}) => ({
|
|
11
10
|
getPreviewFeatures: () => false,
|
|
12
11
|
getUserTier: () => undefined,
|
|
@@ -16,7 +15,7 @@ const createMockConfig = (overrides = {}) => ({
|
|
|
16
15
|
});
|
|
17
16
|
describe('policyHelpers', () => {
|
|
18
17
|
describe('resolvePolicyChain', () => {
|
|
19
|
-
it('
|
|
18
|
+
it('inserts the active model when missing from the catalog', () => {
|
|
20
19
|
const config = createMockConfig({
|
|
21
20
|
getModel: () => 'custom-model',
|
|
22
21
|
});
|
|
@@ -33,7 +32,7 @@ describe('policyHelpers', () => {
|
|
|
33
32
|
});
|
|
34
33
|
it('returns the default chain when active model is "auto"', () => {
|
|
35
34
|
const config = createMockConfig({
|
|
36
|
-
getModel: () =>
|
|
35
|
+
getModel: () => 'auto',
|
|
37
36
|
});
|
|
38
37
|
const chain = resolvePolicyChain(config);
|
|
39
38
|
// Expect default chain [Pro, Flash]
|
|
@@ -41,23 +40,6 @@ describe('policyHelpers', () => {
|
|
|
41
40
|
expect(chain[0]?.model).toBe('gemini-2.5-pro');
|
|
42
41
|
expect(chain[1]?.model).toBe('gemini-2.5-flash');
|
|
43
42
|
});
|
|
44
|
-
it('starts chain from preferredModel when model is "auto"', () => {
|
|
45
|
-
const config = createMockConfig({
|
|
46
|
-
getModel: () => DEFAULT_GEMINI_MODEL_AUTO,
|
|
47
|
-
});
|
|
48
|
-
const chain = resolvePolicyChain(config, 'gemini-2.5-flash');
|
|
49
|
-
expect(chain).toHaveLength(1);
|
|
50
|
-
expect(chain[0]?.model).toBe('gemini-2.5-flash');
|
|
51
|
-
});
|
|
52
|
-
it('wraps around the chain when wrapsAround is true', () => {
|
|
53
|
-
const config = createMockConfig({
|
|
54
|
-
getModel: () => DEFAULT_GEMINI_MODEL_AUTO,
|
|
55
|
-
});
|
|
56
|
-
const chain = resolvePolicyChain(config, 'gemini-2.5-flash', true);
|
|
57
|
-
expect(chain).toHaveLength(2);
|
|
58
|
-
expect(chain[0]?.model).toBe('gemini-2.5-flash');
|
|
59
|
-
expect(chain[1]?.model).toBe('gemini-2.5-pro');
|
|
60
|
-
});
|
|
61
43
|
});
|
|
62
44
|
describe('buildFallbackPolicyContext', () => {
|
|
63
45
|
it('returns remaining candidates after the failed model', () => {
|
|
@@ -68,16 +50,6 @@ describe('policyHelpers', () => {
|
|
|
68
50
|
];
|
|
69
51
|
const context = buildFallbackPolicyContext(chain, 'b');
|
|
70
52
|
expect(context.failedPolicy?.model).toBe('b');
|
|
71
|
-
expect(context.candidates.map((p) => p.model)).toEqual(['c']);
|
|
72
|
-
});
|
|
73
|
-
it('wraps around when building fallback context if wrapsAround is true', () => {
|
|
74
|
-
const chain = [
|
|
75
|
-
createDefaultPolicy('a'),
|
|
76
|
-
createDefaultPolicy('b'),
|
|
77
|
-
createDefaultPolicy('c'),
|
|
78
|
-
];
|
|
79
|
-
const context = buildFallbackPolicyContext(chain, 'b', true);
|
|
80
|
-
expect(context.failedPolicy?.model).toBe('b');
|
|
81
53
|
expect(context.candidates.map((p) => p.model)).toEqual(['c', 'a']);
|
|
82
54
|
});
|
|
83
55
|
it('returns full chain when model is not in policy list', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policyHelpers.test.js","sourceRoot":"","sources":["../../../src/availability/policyHelpers.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"policyHelpers.test.js","sourceRoot":"","sources":["../../../src/availability/policyHelpers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { getReleaseChannel } from '../../utils/channel.js';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
8
|
import path from 'node:path';
|
|
9
|
+
import { getVersion } from '../../utils/version.js';
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
11
|
const __dirname = path.dirname(__filename);
|
|
11
12
|
// Cache all client metadata.
|
|
@@ -40,7 +41,7 @@ export async function getClientMetadata() {
|
|
|
40
41
|
clientMetadataPromise = (async () => ({
|
|
41
42
|
ideName: 'IDE_UNSPECIFIED',
|
|
42
43
|
pluginType: 'GEMINI',
|
|
43
|
-
ideVersion:
|
|
44
|
+
ideVersion: await getVersion(),
|
|
44
45
|
platform: getPlatform(),
|
|
45
46
|
updateChannel: await getReleaseChannel(__dirname),
|
|
46
47
|
}))();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client_metadata.js","sourceRoot":"","sources":["../../../../src/code_assist/experiments/client_metadata.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"client_metadata.js","sourceRoot":"","sources":["../../../../src/code_assist/experiments/client_metadata.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,6BAA6B;AAC7B,IAAI,qBAA0D,CAAC;AAE/D,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,QAAQ,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5C,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9C,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3C,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7C,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,iBAAiB;YAC1B,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,MAAM,UAAU,EAAE;YAC9B,QAAQ,EAAE,WAAW,EAAE;YACvB,aAAa,EAAE,MAAM,iBAAiB,CAAC,SAAS,CAAC;SAClD,CAAC,CAAC,EAAE,CAAC;IACR,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
7
|
import { ReleaseChannel, getReleaseChannel } from '../../utils/channel.js';
|
|
8
|
+
import { getVersion } from '../../utils/version.js';
|
|
8
9
|
// Mock dependencies before importing the module under test
|
|
9
10
|
vi.mock('../../utils/channel.js', async () => {
|
|
10
11
|
const actual = await vi.importActual('../../utils/channel.js');
|
|
@@ -13,6 +14,9 @@ vi.mock('../../utils/channel.js', async () => {
|
|
|
13
14
|
getReleaseChannel: vi.fn(),
|
|
14
15
|
};
|
|
15
16
|
});
|
|
17
|
+
vi.mock('../../utils/version.js', async () => ({
|
|
18
|
+
getVersion: vi.fn(),
|
|
19
|
+
}));
|
|
16
20
|
describe('client_metadata', () => {
|
|
17
21
|
const originalPlatform = process.platform;
|
|
18
22
|
const originalArch = process.arch;
|
|
@@ -25,6 +29,7 @@ describe('client_metadata', () => {
|
|
|
25
29
|
await import('./client_metadata.js');
|
|
26
30
|
// Provide a default mock implementation for each test
|
|
27
31
|
vi.mocked(getReleaseChannel).mockResolvedValue(ReleaseChannel.STABLE);
|
|
32
|
+
vi.mocked(getVersion).mockResolvedValue('0.0.0');
|
|
28
33
|
});
|
|
29
34
|
afterEach(() => {
|
|
30
35
|
// Restore original process properties to avoid side-effects between tests
|
|
@@ -55,20 +60,12 @@ describe('client_metadata', () => {
|
|
|
55
60
|
}
|
|
56
61
|
});
|
|
57
62
|
describe('getClientMetadata', () => {
|
|
58
|
-
it('should use
|
|
59
|
-
|
|
60
|
-
Object.defineProperty(process, 'version', { value: 'v18.0.0' });
|
|
63
|
+
it('should use version from getCliVersion for ideVersion', async () => {
|
|
64
|
+
vi.mocked(getVersion).mockResolvedValue('1.2.3');
|
|
61
65
|
const { getClientMetadata } = await import('./client_metadata.js');
|
|
62
66
|
const metadata = await getClientMetadata();
|
|
63
67
|
expect(metadata.ideVersion).toBe('1.2.3');
|
|
64
68
|
});
|
|
65
|
-
it('should use process.version for ideVersion as a fallback', async () => {
|
|
66
|
-
delete process.env['CLI_VERSION'];
|
|
67
|
-
Object.defineProperty(process, 'version', { value: 'v20.0.0' });
|
|
68
|
-
const { getClientMetadata } = await import('./client_metadata.js');
|
|
69
|
-
const metadata = await getClientMetadata();
|
|
70
|
-
expect(metadata.ideVersion).toBe('v20.0.0');
|
|
71
|
-
});
|
|
72
69
|
it('should call getReleaseChannel to get the update channel', async () => {
|
|
73
70
|
vi.mocked(getReleaseChannel).mockResolvedValue(ReleaseChannel.NIGHTLY);
|
|
74
71
|
const { getClientMetadata } = await import('./client_metadata.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client_metadata.test.js","sourceRoot":"","sources":["../../../../src/code_assist/experiments/client_metadata.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"client_metadata.test.js","sourceRoot":"","sources":["../../../../src/code_assist/experiments/client_metadata.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export function performInit(doesGeminiMdExist) {
|
|
7
|
+
if (doesGeminiMdExist) {
|
|
8
|
+
return {
|
|
9
|
+
type: 'message',
|
|
10
|
+
messageType: 'info',
|
|
11
|
+
content: 'A GEMINI.md file already exists in this directory. No changes were made.',
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
type: 'submit_prompt',
|
|
16
|
+
content: `
|
|
17
|
+
You are an AI agent that brings the power of Gemini directly into the terminal. Your task is to analyze the current directory and generate a comprehensive GEMINI.md file to be used as instructional context for future interactions.
|
|
18
|
+
|
|
19
|
+
**Analysis Process:**
|
|
20
|
+
|
|
21
|
+
1. **Initial Exploration:**
|
|
22
|
+
* Start by listing the files and directories to get a high-level overview of the structure.
|
|
23
|
+
* Read the README file (e.g., \`README.md\`, \`README.txt\`) if it exists. This is often the best place to start.
|
|
24
|
+
|
|
25
|
+
2. **Iterative Deep Dive (up to 10 files):**
|
|
26
|
+
* Based on your initial findings, select a few files that seem most important (e.g., configuration files, main source files, documentation).
|
|
27
|
+
* Read them. As you learn more, refine your understanding and decide which files to read next. You don't need to decide all 10 files at once. Let your discoveries guide your exploration.
|
|
28
|
+
|
|
29
|
+
3. **Identify Project Type:**
|
|
30
|
+
* **Code Project:** Look for clues like \`package.json\`, \`requirements.txt\`, \`pom.xml\`, \`go.mod\`, \`Cargo.toml\`, \`build.gradle\`, or a \`src\` directory. If you find them, this is likely a software project.
|
|
31
|
+
* **Non-Code Project:** If you don't find code-related files, this might be a directory for documentation, research papers, notes, or something else.
|
|
32
|
+
|
|
33
|
+
**GEMINI.md Content Generation:**
|
|
34
|
+
|
|
35
|
+
**For a Code Project:**
|
|
36
|
+
|
|
37
|
+
* **Project Overview:** Write a clear and concise summary of the project's purpose, main technologies, and architecture.
|
|
38
|
+
* **Building and Running:** Document the key commands for building, running, and testing the project. Infer these from the files you've read (e.g., \`scripts\` in \`package.json\`, \`Makefile\`, etc.). If you can't find explicit commands, provide a placeholder with a TODO.
|
|
39
|
+
* **Development Conventions:** Describe any coding styles, testing practices, or contribution guidelines you can infer from the codebase.
|
|
40
|
+
|
|
41
|
+
**For a Non-Code Project:**
|
|
42
|
+
|
|
43
|
+
* **Directory Overview:** Describe the purpose and contents of the directory. What is it for? What kind of information does it hold?
|
|
44
|
+
* **Key Files:** List the most important files and briefly explain what they contain.
|
|
45
|
+
* **Usage:** Explain how the contents of this directory are intended to be used.
|
|
46
|
+
|
|
47
|
+
**Final Output:**
|
|
48
|
+
|
|
49
|
+
Write the complete content to the \`GEMINI.md\` file. The output must be well-formatted Markdown.
|
|
50
|
+
`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,UAAU,WAAW,CAAC,iBAA0B;IACpD,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,MAAM;YACnB,OAAO,EACL,0EAA0E;SAC7E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCZ;KACE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { expect, describe, it } from 'vitest';
|
|
7
|
+
import { performInit } from './init.js';
|
|
8
|
+
describe('performInit', () => {
|
|
9
|
+
it('returns info if GEMINI.md already exists', () => {
|
|
10
|
+
const result = performInit(true);
|
|
11
|
+
expect(result.type).toBe('message');
|
|
12
|
+
if (result.type === 'message') {
|
|
13
|
+
expect(result.messageType).toBe('info');
|
|
14
|
+
expect(result.content).toContain('already exists');
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
it('returns submit_prompt if GEMINI.md does not exist', () => {
|
|
18
|
+
const result = performInit(false);
|
|
19
|
+
expect(result.type).toBe('submit_prompt');
|
|
20
|
+
if (result.type === 'submit_prompt') {
|
|
21
|
+
expect(result.content).toContain('You are an AI agent');
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=init.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/init.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE1C,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -36,7 +36,6 @@ import { PolicyEngine } from '../policy/policy-engine.js';
|
|
|
36
36
|
import type { PolicyEngineConfig } from '../policy/types.js';
|
|
37
37
|
import { HookSystem } from '../hooks/index.js';
|
|
38
38
|
import type { UserTierId } from '../code_assist/types.js';
|
|
39
|
-
import type { RetrieveUserQuotaResponse } from '../code_assist/types.js';
|
|
40
39
|
import type { Experiments } from '../code_assist/experiments/experiments.js';
|
|
41
40
|
import { AgentRegistry } from '../agents/registry.js';
|
|
42
41
|
import { ApprovalMode } from '../policy/types.js';
|
|
@@ -280,7 +279,6 @@ export declare class Config {
|
|
|
280
279
|
private readonly bugCommand;
|
|
281
280
|
private model;
|
|
282
281
|
private previewFeatures;
|
|
283
|
-
private hasAccessToPreviewModel;
|
|
284
282
|
private readonly noBrowser;
|
|
285
283
|
private readonly folderTrust;
|
|
286
284
|
private ideMode;
|
|
@@ -393,9 +391,6 @@ export declare class Config {
|
|
|
393
391
|
getQuestion(): string | undefined;
|
|
394
392
|
getPreviewFeatures(): boolean | undefined;
|
|
395
393
|
setPreviewFeatures(previewFeatures: boolean): void;
|
|
396
|
-
getHasAccessToPreviewModel(): boolean;
|
|
397
|
-
setHasAccessToPreviewModel(hasAccess: boolean): void;
|
|
398
|
-
refreshUserQuota(): Promise<RetrieveUserQuotaResponse | undefined>;
|
|
399
394
|
getCoreTools(): string[] | undefined;
|
|
400
395
|
getAllowedTools(): string[] | undefined;
|
|
401
396
|
/**
|
|
@@ -29,7 +29,7 @@ import { GitService } from '../services/gitService.js';
|
|
|
29
29
|
import { initializeTelemetry, DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT, uiTelemetryService, } from '../telemetry/index.js';
|
|
30
30
|
import { coreEvents } from '../utils/events.js';
|
|
31
31
|
import { tokenLimit } from '../core/tokenLimits.js';
|
|
32
|
-
import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL,
|
|
32
|
+
import { DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_GEMINI_FLASH_MODEL, DEFAULT_THINKING_MODE, } from './models.js';
|
|
33
33
|
import { shouldAttemptBrowserLaunch } from '../utils/browser.js';
|
|
34
34
|
import { ideContextStore } from '../ide/ideContext.js';
|
|
35
35
|
import { WriteTodosTool } from '../tools/write-todos.js';
|
|
@@ -51,7 +51,8 @@ import { HookSystem } from '../hooks/index.js';
|
|
|
51
51
|
import { getCodeAssistServer } from '../code_assist/codeAssist.js';
|
|
52
52
|
import { AgentRegistry } from '../agents/registry.js';
|
|
53
53
|
import { setGlobalProxy } from '../utils/fetch.js';
|
|
54
|
-
import {
|
|
54
|
+
import { DelegateToAgentTool } from '../agents/delegate-to-agent-tool.js';
|
|
55
|
+
import { DELEGATE_TO_AGENT_TOOL_NAME } from '../tools/tool-names.js';
|
|
55
56
|
import { getExperiments } from '../code_assist/experiments/experiments.js';
|
|
56
57
|
import { ExperimentFlags } from '../code_assist/experiments/flagNames.js';
|
|
57
58
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
@@ -183,7 +184,6 @@ export class Config {
|
|
|
183
184
|
bugCommand;
|
|
184
185
|
model;
|
|
185
186
|
previewFeatures;
|
|
186
|
-
hasAccessToPreviewModel = false;
|
|
187
187
|
noBrowser;
|
|
188
188
|
folderTrust;
|
|
189
189
|
ideMode;
|
|
@@ -300,7 +300,8 @@ export class Config {
|
|
|
300
300
|
this.bugCommand = params.bugCommand;
|
|
301
301
|
this.model = params.model;
|
|
302
302
|
this._activeModel = params.model;
|
|
303
|
-
this.enableModelAvailabilityService =
|
|
303
|
+
this.enableModelAvailabilityService =
|
|
304
|
+
params.enableModelAvailabilityService ?? false;
|
|
304
305
|
this.enableAgents = params.enableAgents ?? false;
|
|
305
306
|
this.experimentalJitContext = params.experimentalJitContext ?? false;
|
|
306
307
|
this.modelAvailabilityService = new ModelAvailabilityService();
|
|
@@ -342,10 +343,7 @@ export class Config {
|
|
|
342
343
|
params.truncateToolOutputLines ?? DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES;
|
|
343
344
|
this.enableToolOutputTruncation = params.enableToolOutputTruncation ?? true;
|
|
344
345
|
this.useSmartEdit = params.useSmartEdit ?? true;
|
|
345
|
-
|
|
346
|
-
this.useWriteTodos = isPreviewModel(this.model)
|
|
347
|
-
? false
|
|
348
|
-
: (params.useWriteTodos ?? true);
|
|
346
|
+
this.useWriteTodos = params.useWriteTodos ?? true;
|
|
349
347
|
this.enableHooks = params.enableHooks ?? false;
|
|
350
348
|
this.disabledHooks =
|
|
351
349
|
(params.hooks && 'disabled' in params.hooks
|
|
@@ -415,11 +413,19 @@ export class Config {
|
|
|
415
413
|
// TODO(12593): Fix the settings loading logic to properly merge defaults and
|
|
416
414
|
// remove this hack.
|
|
417
415
|
let modelConfigServiceConfig = params.modelConfigServiceConfig;
|
|
418
|
-
if (modelConfigServiceConfig
|
|
419
|
-
modelConfigServiceConfig
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
416
|
+
if (modelConfigServiceConfig) {
|
|
417
|
+
if (!modelConfigServiceConfig.aliases) {
|
|
418
|
+
modelConfigServiceConfig = {
|
|
419
|
+
...modelConfigServiceConfig,
|
|
420
|
+
aliases: DEFAULT_MODEL_CONFIGS.aliases,
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
if (!modelConfigServiceConfig.overrides) {
|
|
424
|
+
modelConfigServiceConfig = {
|
|
425
|
+
...modelConfigServiceConfig,
|
|
426
|
+
overrides: DEFAULT_MODEL_CONFIGS.overrides,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
423
429
|
}
|
|
424
430
|
this.modelConfigService = new ModelConfigService(modelConfigServiceConfig ?? DEFAULT_MODEL_CONFIGS);
|
|
425
431
|
}
|
|
@@ -473,8 +479,6 @@ export class Config {
|
|
|
473
479
|
// Restore the conversation history to the new client
|
|
474
480
|
this.geminiClient.stripThoughtsFromHistory();
|
|
475
481
|
}
|
|
476
|
-
// Reset availability status when switching auth (e.g. from limited key to OAuth)
|
|
477
|
-
this.modelAvailabilityService.reset();
|
|
478
482
|
const newContentGeneratorConfig = await createContentGeneratorConfig(this, authMethod);
|
|
479
483
|
this.contentGenerator = await createContentGenerator(newContentGeneratorConfig, this, this.getSessionId());
|
|
480
484
|
// Only assign to instance properties after successful initialization
|
|
@@ -484,9 +488,6 @@ export class Config {
|
|
|
484
488
|
const previewFeatures = this.getPreviewFeatures();
|
|
485
489
|
const codeAssistServer = getCodeAssistServer(this);
|
|
486
490
|
if (codeAssistServer) {
|
|
487
|
-
if (codeAssistServer.projectId) {
|
|
488
|
-
await this.refreshUserQuota();
|
|
489
|
-
}
|
|
490
491
|
this.experimentsPromise = getExperiments(codeAssistServer)
|
|
491
492
|
.then((experiments) => {
|
|
492
493
|
this.setExperiments(experiments);
|
|
@@ -506,17 +507,8 @@ export class Config {
|
|
|
506
507
|
this.experiments = undefined;
|
|
507
508
|
this.experimentsPromise = undefined;
|
|
508
509
|
}
|
|
509
|
-
const authType = this.contentGeneratorConfig.authType;
|
|
510
|
-
if (authType === AuthType.USE_GEMINI ||
|
|
511
|
-
authType === AuthType.USE_VERTEX_AI) {
|
|
512
|
-
this.setHasAccessToPreviewModel(true);
|
|
513
|
-
}
|
|
514
510
|
// Reset the session flag since we're explicitly changing auth and using default model
|
|
515
511
|
this.inFallbackMode = false;
|
|
516
|
-
// Update model if user no longer has access to the preview model
|
|
517
|
-
if (!this.hasAccessToPreviewModel && isPreviewModel(this.model)) {
|
|
518
|
-
this.setModel(DEFAULT_GEMINI_MODEL_AUTO);
|
|
519
|
-
}
|
|
520
512
|
}
|
|
521
513
|
async getExperimentsAsync() {
|
|
522
514
|
if (this.experiments) {
|
|
@@ -583,6 +575,7 @@ export class Config {
|
|
|
583
575
|
setActiveModel(model) {
|
|
584
576
|
if (this._activeModel !== model) {
|
|
585
577
|
this._activeModel = model;
|
|
578
|
+
coreEvents.emitModelChanged(model);
|
|
586
579
|
}
|
|
587
580
|
}
|
|
588
581
|
resetTurn() {
|
|
@@ -666,39 +659,8 @@ export class Config {
|
|
|
666
659
|
return this.previewFeatures;
|
|
667
660
|
}
|
|
668
661
|
setPreviewFeatures(previewFeatures) {
|
|
669
|
-
// If it's using a preview model and it's turning off previewFeatures,
|
|
670
|
-
// switch the model to the default auto mode.
|
|
671
|
-
if (this.previewFeatures && !previewFeatures) {
|
|
672
|
-
if (isPreviewModel(this.getModel())) {
|
|
673
|
-
this.setModel(DEFAULT_GEMINI_MODEL_AUTO);
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
662
|
this.previewFeatures = previewFeatures;
|
|
677
663
|
}
|
|
678
|
-
getHasAccessToPreviewModel() {
|
|
679
|
-
return this.hasAccessToPreviewModel;
|
|
680
|
-
}
|
|
681
|
-
setHasAccessToPreviewModel(hasAccess) {
|
|
682
|
-
this.hasAccessToPreviewModel = hasAccess;
|
|
683
|
-
}
|
|
684
|
-
async refreshUserQuota() {
|
|
685
|
-
const codeAssistServer = getCodeAssistServer(this);
|
|
686
|
-
if (!codeAssistServer || !codeAssistServer.projectId) {
|
|
687
|
-
return undefined;
|
|
688
|
-
}
|
|
689
|
-
try {
|
|
690
|
-
const quota = await codeAssistServer.retrieveUserQuota({
|
|
691
|
-
project: codeAssistServer.projectId,
|
|
692
|
-
});
|
|
693
|
-
const hasAccess = quota.buckets?.some((b) => b.modelId === PREVIEW_GEMINI_MODEL) ?? false;
|
|
694
|
-
this.setHasAccessToPreviewModel(hasAccess);
|
|
695
|
-
return quota;
|
|
696
|
-
}
|
|
697
|
-
catch (e) {
|
|
698
|
-
debugLogger.debug('Failed to retrieve user quota', e);
|
|
699
|
-
return undefined;
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
664
|
getCoreTools() {
|
|
703
665
|
return this.coreTools;
|
|
704
666
|
}
|
|
@@ -1192,17 +1154,16 @@ export class Config {
|
|
|
1192
1154
|
registerCoreTool(WriteTodosTool, this);
|
|
1193
1155
|
}
|
|
1194
1156
|
// Register Subagents as Tools
|
|
1195
|
-
if
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
}
|
|
1157
|
+
// Register DelegateToAgentTool if agents are enabled
|
|
1158
|
+
if (this.isAgentsEnabled() ||
|
|
1159
|
+
this.getCodebaseInvestigatorSettings().enabled) {
|
|
1160
|
+
// Check if the delegate tool itself is allowed (if allowedTools is set)
|
|
1161
|
+
const allowedTools = this.getAllowedTools();
|
|
1162
|
+
const isAllowed = !allowedTools || allowedTools.includes(DELEGATE_TO_AGENT_TOOL_NAME);
|
|
1163
|
+
if (isAllowed) {
|
|
1164
|
+
const messageBusEnabled = this.getEnableMessageBusIntegration();
|
|
1165
|
+
const delegateTool = new DelegateToAgentTool(this.agentRegistry, this, messageBusEnabled ? this.getMessageBus() : undefined);
|
|
1166
|
+
registry.registerTool(delegateTool);
|
|
1206
1167
|
}
|
|
1207
1168
|
}
|
|
1208
1169
|
await registry.discoverAllTools();
|