mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-22 12:01:39 -07:00
feat(sdd): guard built-in SDD with experimental.sdd flag
This commit is contained in:
@@ -726,8 +726,10 @@ describe('ExtensionManager', () => {
|
||||
const emitSpy = vi.spyOn(coreEvents, 'emitFeedback');
|
||||
|
||||
// Create a FRESH manager to ensure loadExtensions actually runs
|
||||
const settings = createTestMergedSettings();
|
||||
settings.experimental.sdd = true;
|
||||
const manager = new ExtensionManager({
|
||||
settings: createTestMergedSettings(),
|
||||
settings,
|
||||
workspaceDir: tempWorkspaceDir,
|
||||
requestConsent: vi.fn().mockResolvedValue(true),
|
||||
requestSetting: null,
|
||||
@@ -765,8 +767,10 @@ describe('ExtensionManager', () => {
|
||||
const emitSpy = vi.spyOn(coreEvents, 'emitFeedback');
|
||||
|
||||
// Create a FRESH manager
|
||||
const settings = createTestMergedSettings();
|
||||
settings.experimental.sdd = true;
|
||||
const manager = new ExtensionManager({
|
||||
settings: createTestMergedSettings(),
|
||||
settings,
|
||||
workspaceDir: tempWorkspaceDir,
|
||||
requestConsent: vi.fn().mockResolvedValue(true),
|
||||
requestSetting: null,
|
||||
@@ -790,5 +794,29 @@ describe('ExtensionManager', () => {
|
||||
expect.stringContaining('/spec setup'),
|
||||
);
|
||||
});
|
||||
|
||||
it('should NOT load sdd builtin when experimental.sdd is false', async () => {
|
||||
// Create a builtin extension named 'sdd'
|
||||
createExtension({
|
||||
extensionsDir: builtinExtensionsDir,
|
||||
name: 'sdd',
|
||||
version: '1.0.0',
|
||||
});
|
||||
|
||||
// Create a manager with default settings (experimental.sdd = false)
|
||||
const settings = createTestMergedSettings();
|
||||
settings.experimental.sdd = false;
|
||||
const manager = new ExtensionManager({
|
||||
settings,
|
||||
workspaceDir: tempWorkspaceDir,
|
||||
requestConsent: vi.fn().mockResolvedValue(true),
|
||||
requestSetting: null,
|
||||
});
|
||||
|
||||
const extensions = await manager.loadExtensions(builtinExtensionsDir);
|
||||
|
||||
// Verify builtin was NOT loaded
|
||||
expect(extensions.find((e) => e.name === 'sdd')).toBeUndefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -671,6 +671,11 @@ Would you like to attempt to install via "git clone" instead?`,
|
||||
|
||||
for (const builtinExt of builtinResolved) {
|
||||
if (builtinExt) {
|
||||
const isSdd = builtinExt.name === 'sdd';
|
||||
if (isSdd && !this.settings.experimental.sdd) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const existingIdx = builtExtensions.findIndex(
|
||||
(e) => e.name === builtinExt.name,
|
||||
);
|
||||
@@ -682,7 +687,7 @@ Would you like to attempt to install via "git clone" instead?`,
|
||||
builtExtensions[existingIdx] = builtinExt;
|
||||
} else {
|
||||
// Check if this is the new 'sdd' extension and if 'conductor' is installed.
|
||||
if (builtinExt.name === 'sdd') {
|
||||
if (isSdd) {
|
||||
const conductorIdx = builtExtensions.findIndex(
|
||||
(e) => e.name === 'conductor',
|
||||
);
|
||||
|
||||
@@ -1955,6 +1955,15 @@ const SETTINGS_SCHEMA = {
|
||||
description: 'Enable Plan Mode.',
|
||||
showInDialog: true,
|
||||
},
|
||||
sdd: {
|
||||
type: 'boolean',
|
||||
label: 'Spec-Driven Development (SDD)',
|
||||
category: 'Experimental',
|
||||
requiresRestart: true,
|
||||
default: false,
|
||||
description: 'Enable built-in Spec-Driven Development (SDD) workflow.',
|
||||
showInDialog: true,
|
||||
},
|
||||
taskTracker: {
|
||||
type: 'boolean',
|
||||
label: 'Task Tracker',
|
||||
|
||||
Reference in New Issue
Block a user