File size: 2,076 Bytes
84aa3bf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | /**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import type { SettingScope, LoadedSettings } from '../config/settings.js';
import {
type FeatureActionResult,
type FeatureToggleStrategy,
enableFeature,
disableFeature,
} from './featureToggleUtils.js';
export type AgentActionStatus = 'success' | 'no-op' | 'error';
/**
* Metadata representing the result of an agent settings operation.
*/
export interface AgentActionResult
extends Omit<FeatureActionResult, 'featureName'> {
agentName: string;
}
const agentStrategy: FeatureToggleStrategy = {
needsEnabling: (settings, scope, agentName) => {
const agentOverrides = settings.forScope(scope).settings.agents?.overrides;
return agentOverrides?.[agentName]?.enabled !== true;
},
enable: (settings, scope, agentName) => {
settings.setValue(scope, `agents.overrides.${agentName}.enabled`, true);
},
isExplicitlyDisabled: (settings, scope, agentName) => {
const agentOverrides = settings.forScope(scope).settings.agents?.overrides;
return agentOverrides?.[agentName]?.enabled === false;
},
disable: (settings, scope, agentName) => {
settings.setValue(scope, `agents.overrides.${agentName}.enabled`, false);
},
};
/**
* Enables an agent by setting `agents.overrides.<agentName>.enabled` to `true`
* in available writable scopes (User and Workspace).
*/
export function enableAgent(
settings: LoadedSettings,
agentName: string,
): AgentActionResult {
const { featureName, ...rest } = enableFeature(
settings,
agentName,
agentStrategy,
);
return {
...rest,
agentName: featureName,
};
}
/**
* Disables an agent by setting `agents.overrides.<agentName>.enabled` to `false`
* in the specified scope.
*/
export function disableAgent(
settings: LoadedSettings,
agentName: string,
scope: SettingScope,
): AgentActionResult {
const { featureName, ...rest } = disableFeature(
settings,
agentName,
scope,
agentStrategy,
);
return {
...rest,
agentName: featureName,
};
}
|