From d08450b0c27e0375f3f28303a83fac17b91acb56 Mon Sep 17 00:00:00 2001 From: Jerop Kipruto Date: Thu, 5 Mar 2026 21:18:30 -0500 Subject: [PATCH] feat(core): implement feature lifecycle management (Alpha, Beta, GA) Introduce FeatureGate system with FeatureStage enum, FeatureSpec metadata, and DefaultFeatureGate singleton. Features progress through Alpha (off), Beta (on), GA (locked on), and Deprecated stages. Integrate FeatureGate into Config with isFeatureEnabled() and legacy experimental flag mapping for backwards compatibility. Fixes #21324 --- schemas/settings.schema.json | 126 ++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 2 deletions(-) diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index 36816079ca..1cf9de033c 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -1611,8 +1611,8 @@ }, "experimental": { "title": "Experimental", - "description": "Setting to enable experimental features", - "markdownDescription": "Setting to enable experimental features\n\n- Category: `Experimental`\n- Requires restart: `yes`\n- Default: `{}`", + "description": "DEPRECATED: Use the \"features\" object instead. Setting to enable experimental features", + "markdownDescription": "DEPRECATED: Use the \"features\" object instead. Setting to enable experimental features\n\n- Category: `Experimental`\n- Requires restart: `yes`\n- Default: `{}`", "default": {}, "type": "object", "properties": { @@ -2040,6 +2040,128 @@ } }, "additionalProperties": false + }, + "features": { + "title": "Features", + "description": "Feature Lifecycle Management settings.", + "markdownDescription": "Feature Lifecycle Management settings.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `{}`", + "default": {}, + "type": "object", + "properties": { + "allAlpha": { + "title": "Enable all Alpha features", + "description": "Enable all Alpha features by default.", + "markdownDescription": "Enable all Alpha features by default.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "allBeta": { + "title": "Enable all Beta features", + "description": "Enable all Beta features by default.", + "markdownDescription": "Enable all Beta features by default.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `true`", + "default": true, + "type": "boolean" + }, + "toolOutputMasking": { + "title": "Tool Output Masking", + "description": "Enables tool output masking to save tokens.", + "markdownDescription": "Enables tool output masking to save tokens.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `true`", + "default": true, + "type": "boolean" + }, + "enableAgents": { + "title": "Enable Agents", + "description": "Enable local and remote subagents.", + "markdownDescription": "Enable local and remote subagents.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "extensionManagement": { + "title": "Extension Management", + "description": "Enable extension management features.", + "markdownDescription": "Enable extension management features.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `true`", + "default": true, + "type": "boolean" + }, + "extensionConfig": { + "title": "Extension Configuration", + "description": "Enable requesting and fetching of extension settings.", + "markdownDescription": "Enable requesting and fetching of extension settings.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `true`", + "default": true, + "type": "boolean" + }, + "extensionRegistry": { + "title": "Extension Registry Explore UI", + "description": "Enable extension registry explore UI.", + "markdownDescription": "Enable extension registry explore UI.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "extensionReloading": { + "title": "Extension Reloading", + "description": "Enables extension loading/unloading within the CLI session.", + "markdownDescription": "Enables extension loading/unloading within the CLI session.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "jitContext": { + "title": "JIT Context Loading", + "description": "Enable Just-In-Time (JIT) context loading.", + "markdownDescription": "Enable Just-In-Time (JIT) context loading.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "useOSC52Paste": { + "title": "Use OSC 52 Paste", + "description": "Use OSC 52 sequence for pasting.", + "markdownDescription": "Use OSC 52 sequence for pasting.\n\n- Category: `Features`\n- Requires restart: `no`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "plan": { + "title": "Plan Mode", + "description": "Enable planning features (Plan Mode and tools).", + "markdownDescription": "Enable planning features (Plan Mode and tools).\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "useOSC52Copy": { + "title": "Use OSC 52 Copy", + "description": "Use OSC 52 sequence for copying.", + "markdownDescription": "Use OSC 52 sequence for copying.\n\n- Category: `Features`\n- Requires restart: `no`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "taskTracker": { + "title": "Task Tracker", + "description": "Enable task tracker tools.", + "markdownDescription": "Enable task tracker tools.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "modelSteering": { + "title": "Model Steering", + "description": "Enable model steering (user hints) to guide the model during tool execution.", + "markdownDescription": "Enable model steering (user hints) to guide the model during tool execution.\n\n- Category: `Features`\n- Requires restart: `no`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "directWebFetch": { + "title": "Direct Web Fetch", + "description": "Enable web fetch behavior that bypasses LLM summarization.", + "markdownDescription": "Enable web fetch behavior that bypasses LLM summarization.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + }, + "gemmaModelRouter": { + "title": "Gemma Model Router", + "description": "Enable Gemma model router for local model routing.", + "markdownDescription": "Enable Gemma model router for local model routing.\n\n- Category: `Features`\n- Requires restart: `yes`\n- Default: `false`", + "default": false, + "type": "boolean" + } + }, + "additionalProperties": false } }, "$defs": {