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
This commit is contained in:
Jerop Kipruto
2026-03-05 21:18:30 -05:00
parent 4fca1dcd08
commit d08450b0c2

View File

@@ -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": {