From e02072abf81b9e76fa6896f8d35bf5c692a7712a Mon Sep 17 00:00:00 2001 From: Adam Weidman Date: Wed, 1 Apr 2026 10:23:56 -0700 Subject: [PATCH] feat(config): add experimental.adk.agentSessionNoninteractiveEnabled setting --- docs/reference/configuration.md | 5 ++++ packages/cli/src/config/config.ts | 1 + .../cli/src/config/settingsSchema.test.ts | 25 ++++++++++++++++++ packages/cli/src/config/settingsSchema.ts | 20 ++++++++++++++ packages/core/src/config/config.test.ts | 26 +++++++++++++++++++ packages/core/src/config/config.ts | 13 ++++++++++ schemas/settings.schema.json | 17 ++++++++++++ 7 files changed, 107 insertions(+) diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index 6d0130688e..a39752aaed 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -1609,6 +1609,11 @@ their corresponding top-level category object in your `settings.json` file. - **Default:** `true` - **Requires restart:** Yes +- **`experimental.adk.agentSessionNoninteractiveEnabled`** (boolean): + - **Description:** Enable non-interactive agent sessions. + - **Default:** `false` + - **Requires restart:** Yes + - **`experimental.enableAgents`** (boolean): - **Description:** Enable local and remote subagents. - **Default:** `true` diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 3ee537ac35..495bc8c3a5 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -1010,6 +1010,7 @@ export async function loadCliConfig( format: (argv.outputFormat ?? settings.output?.format) as OutputFormat, }, gemmaModelRouter: settings.experimental?.gemmaModelRouter, + adk: settings.experimental?.adk, fakeResponses: argv.fakeResponses, recordResponses: argv.recordResponses, retryFetchErrors: settings.general?.retryFetchErrors, diff --git a/packages/cli/src/config/settingsSchema.test.ts b/packages/cli/src/config/settingsSchema.test.ts index 7deb1f533f..8bda41d55b 100644 --- a/packages/cli/src/config/settingsSchema.test.ts +++ b/packages/cli/src/config/settingsSchema.test.ts @@ -505,6 +505,31 @@ describe('SettingsSchema', () => { 'The model to use for the classifier. Only tested on `gemma3-1b-gpu-custom`.', ); }); + + it('should have adk setting in schema', () => { + const adk = getSettingsSchema().experimental.properties.adk; + expect(adk).toBeDefined(); + expect(adk.type).toBe('object'); + expect(adk.category).toBe('Experimental'); + expect(adk.default).toEqual({}); + expect(adk.requiresRestart).toBe(true); + expect(adk.showInDialog).toBe(false); + expect(adk.description).toBe( + 'Settings for the Agent Development Kit (ADK).', + ); + + const agentSessionNoninteractiveEnabled = + adk.properties.agentSessionNoninteractiveEnabled; + expect(agentSessionNoninteractiveEnabled).toBeDefined(); + expect(agentSessionNoninteractiveEnabled.type).toBe('boolean'); + expect(agentSessionNoninteractiveEnabled.category).toBe('Experimental'); + expect(agentSessionNoninteractiveEnabled.default).toBe(false); + expect(agentSessionNoninteractiveEnabled.requiresRestart).toBe(true); + expect(agentSessionNoninteractiveEnabled.showInDialog).toBe(false); + expect(agentSessionNoninteractiveEnabled.description).toBe( + 'Enable non-interactive agent sessions.', + ); + }); }); it('has JSON schema definitions for every referenced ref', () => { diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index bee5355d7c..7729dcc2a2 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -1985,6 +1985,26 @@ const SETTINGS_SCHEMA = { }, }, }, + adk: { + type: 'object', + label: 'ADK', + category: 'Experimental', + requiresRestart: true, + default: {}, + description: 'Settings for the Agent Development Kit (ADK).', + showInDialog: false, + properties: { + agentSessionNoninteractiveEnabled: { + type: 'boolean', + label: 'Agent Session Non-interactive Enabled', + category: 'Experimental', + requiresRestart: true, + default: false, + description: 'Enable non-interactive agent sessions.', + showInDialog: false, + }, + }, + }, enableAgents: { type: 'boolean', label: 'Enable Agents', diff --git a/packages/core/src/config/config.test.ts b/packages/core/src/config/config.test.ts index 1e5a5d5267..2cc80ad0c6 100644 --- a/packages/core/src/config/config.test.ts +++ b/packages/core/src/config/config.test.ts @@ -3416,3 +3416,29 @@ describe('ConfigSchema validation', () => { } }); }); + +describe('ADKSettings', () => { + const baseParams: ConfigParameters = { + sessionId: 'test', + targetDir: '.', + debugMode: false, + model: 'test-model', + cwd: '.', + }; + + it('should default agentSessionNoninteractiveEnabled to false', () => { + const config = new Config(baseParams); + expect(config.getAgentSessionNoninteractiveEnabled()).toBe(false); + }); + + it('should return provided agentSessionNoninteractiveEnabled', () => { + const params: ConfigParameters = { + ...baseParams, + adk: { + agentSessionNoninteractiveEnabled: true, + }, + }; + const config = new Config(params); + expect(config.getAgentSessionNoninteractiveEnabled()).toBe(true); + }); +}); diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index b2d6e32d85..fb44005243 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -238,6 +238,10 @@ export interface GemmaModelRouterSettings { }; } +export interface ADKSettings { + agentSessionNoninteractiveEnabled?: boolean; +} + export interface ExtensionSetting { name: string; description: string; @@ -675,6 +679,7 @@ export interface ConfigParameters { policyUpdateConfirmationRequest?: PolicyUpdateConfirmationRequest; output?: OutputSettings; gemmaModelRouter?: GemmaModelRouterSettings; + adk?: ADKSettings; disableModelRouterForAuth?: AuthType[]; continueOnFailedApiCall?: boolean; retryFetchErrors?: boolean; @@ -896,6 +901,7 @@ export class Config implements McpContext, AgentLoopContext { private readonly outputSettings: OutputSettings; private readonly gemmaModelRouter: GemmaModelRouterSettings; + private readonly agentSessionNoninteractiveEnabled: boolean; private readonly continueOnFailedApiCall: boolean; private readonly retryFetchErrors: boolean; @@ -1309,6 +1315,9 @@ export class Config implements McpContext, AgentLoopContext { params.gemmaModelRouter?.classifier?.model ?? 'gemma3-1b-gpu-custom', }, }; + + this.agentSessionNoninteractiveEnabled = + params.adk?.agentSessionNoninteractiveEnabled ?? false; this.retryFetchErrors = params.retryFetchErrors ?? true; this.maxAttempts = Math.min( params.maxAttempts ?? DEFAULT_MAX_ATTEMPTS, @@ -3343,6 +3352,10 @@ export class Config implements McpContext, AgentLoopContext { return this.gemmaModelRouter; } + getAgentSessionNoninteractiveEnabled(): boolean { + return this.agentSessionNoninteractiveEnabled; + } + /** * Get override settings for a specific agent. * Reads from agents.overrides.. diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index 5073fd7bd7..dbb4777a9f 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -2786,6 +2786,23 @@ }, "additionalProperties": false }, + "adk": { + "title": "ADK", + "description": "Settings for the Agent Development Kit (ADK).", + "markdownDescription": "Settings for the Agent Development Kit (ADK).\n\n- Category: `Experimental`\n- Requires restart: `yes`\n- Default: `{}`", + "default": {}, + "type": "object", + "properties": { + "agentSessionNoninteractiveEnabled": { + "title": "Agent Session Non-interactive Enabled", + "description": "Enable non-interactive agent sessions.", + "markdownDescription": "Enable non-interactive agent sessions.\n\n- Category: `Experimental`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + } + }, + "additionalProperties": false + }, "enableAgents": { "title": "Enable Agents", "description": "Enable local and remote subagents.",