From 451e0b49cb6edd78742f395799179c2ae6b356da Mon Sep 17 00:00:00 2001 From: Abhi <43648792+abhipatel12@users.noreply.github.com> Date: Mon, 19 Jan 2026 22:59:30 -0500 Subject: [PATCH] feat(cli): add experiment gate for event-driven scheduler (#17055) --- docs/get-started/configuration.md | 5 +++++ packages/cli/src/config/config.ts | 2 ++ packages/cli/src/config/settingsSchema.test.ts | 14 ++++++++++++++ packages/cli/src/config/settingsSchema.ts | 9 +++++++++ packages/core/src/config/config.test.ts | 16 ++++++++++++++++ packages/core/src/config/config.ts | 8 ++++++++ schemas/settings.schema.json | 7 +++++++ 7 files changed, 61 insertions(+) diff --git a/docs/get-started/configuration.md b/docs/get-started/configuration.md index 31d3a9764a..e71bb3a586 100644 --- a/docs/get-started/configuration.md +++ b/docs/get-started/configuration.md @@ -835,6 +835,11 @@ their corresponding top-level category object in your `settings.json` file. - **Default:** `false` - **Requires restart:** Yes +- **`experimental.enableEventDrivenScheduler`** (boolean): + - **Description:** Enables event-driven scheduler within the CLI session. + - **Default:** `false` + - **Requires restart:** Yes + - **`experimental.extensionReloading`** (boolean): - **Description:** Enables extension loading/unloading within the CLI session. - **Default:** `false` diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index c5c61ce748..bfd316ba44 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -721,6 +721,8 @@ export async function loadCliConfig( enableExtensionReloading: settings.experimental?.extensionReloading, enableAgents: settings.experimental?.enableAgents, plan: settings.experimental?.plan, + enableEventDrivenScheduler: + settings.experimental?.enableEventDrivenScheduler, skillsSupport: settings.experimental?.skills || (settings.skills?.enabled ?? true), disabledSkills: settings.skills?.disabled, diff --git a/packages/cli/src/config/settingsSchema.test.ts b/packages/cli/src/config/settingsSchema.test.ts index f399dfdd1b..e3bf60deb2 100644 --- a/packages/cli/src/config/settingsSchema.test.ts +++ b/packages/cli/src/config/settingsSchema.test.ts @@ -381,6 +381,20 @@ describe('SettingsSchema', () => { ); }); + it('should have enableEventDrivenScheduler setting in schema', () => { + const setting = + getSettingsSchema().experimental.properties.enableEventDrivenScheduler; + expect(setting).toBeDefined(); + expect(setting.type).toBe('boolean'); + expect(setting.category).toBe('Experimental'); + expect(setting.default).toBe(false); + expect(setting.requiresRestart).toBe(true); + expect(setting.showInDialog).toBe(false); + expect(setting.description).toBe( + 'Enables event-driven scheduler within the CLI session.', + ); + }); + it('should have hooks.notifications setting in schema', () => { const setting = getSettingsSchema().hooks.properties.notifications; expect(setting).toBeDefined(); diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 9bee1977ec..9a87327ef4 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -1424,6 +1424,15 @@ const SETTINGS_SCHEMA = { description: 'Enable requesting and fetching of extension settings.', showInDialog: false, }, + enableEventDrivenScheduler: { + type: 'boolean', + label: 'Event Driven Scheduler', + category: 'Experimental', + requiresRestart: true, + default: false, + description: 'Enables event-driven scheduler within the CLI session.', + showInDialog: false, + }, extensionReloading: { type: 'boolean', label: 'Extension Reloading', diff --git a/packages/core/src/config/config.test.ts b/packages/core/src/config/config.test.ts index c7d5f66a15..74c0cdac86 100644 --- a/packages/core/src/config/config.test.ts +++ b/packages/core/src/config/config.test.ts @@ -855,6 +855,22 @@ describe('Server Config (config.ts)', () => { }); }); + describe('Event Driven Scheduler Configuration', () => { + it('should default enableEventDrivenScheduler to false when not provided', () => { + const config = new Config(baseParams); + expect(config.isEventDrivenSchedulerEnabled()).toBe(false); + }); + + it('should set enableEventDrivenScheduler to false when provided as false', () => { + const params: ConfigParameters = { + ...baseParams, + enableEventDrivenScheduler: false, + }; + const config = new Config(params); + expect(config.isEventDrivenSchedulerEnabled()).toBe(false); + }); + }); + describe('Shell Tool Inactivity Timeout', () => { it('should default to 300000ms (300 seconds) when not provided', () => { const config = new Config(baseParams); diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 80b1dece50..5f4363039d 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -379,6 +379,7 @@ export interface ConfigParameters { }; previewFeatures?: boolean; enableAgents?: boolean; + enableEventDrivenScheduler?: boolean; skillsSupport?: boolean; disabledSkills?: string[]; adminSkillsEnabled?: boolean; @@ -531,6 +532,7 @@ export class Config { private readonly enableAgents: boolean; private agents: AgentSettings; + private readonly enableEventDrivenScheduler: boolean; private readonly skillsSupport: boolean; private disabledSkills: string[]; private readonly adminSkillsEnabled: boolean; @@ -618,6 +620,8 @@ export class Config { this.agents = params.agents ?? {}; this.disableLLMCorrection = params.disableLLMCorrection ?? false; this.planEnabled = params.plan ?? false; + this.enableEventDrivenScheduler = + params.enableEventDrivenScheduler ?? false; this.skillsSupport = params.skillsSupport ?? false; this.disabledSkills = params.disabledSkills ?? []; this.adminSkillsEnabled = params.adminSkillsEnabled ?? true; @@ -1520,6 +1524,10 @@ export class Config { return this.enableAgents; } + isEventDrivenSchedulerEnabled(): boolean { + return this.enableEventDrivenScheduler; + } + getNoBrowser(): boolean { return this.noBrowser; } diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index fe20216219..9656c218bc 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -1400,6 +1400,13 @@ "default": false, "type": "boolean" }, + "enableEventDrivenScheduler": { + "title": "Event Driven Scheduler", + "description": "Enables event-driven scheduler within the CLI session.", + "markdownDescription": "Enables event-driven scheduler within the CLI session.\n\n- Category: `Experimental`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, "extensionReloading": { "title": "Extension Reloading", "description": "Enables extension loading/unloading within the CLI session.",