diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index aa00fbe9f2..e94119a931 100755 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -53,7 +53,7 @@ import { requestConsentNonInteractive } from './extensions/consent.js'; import { promptForSetting } from './extensions/extensionSettings.js'; import type { EventEmitter } from 'node:stream'; import { runExitCleanup } from '../utils/cleanup.js'; -import { getEnableHooks } from './settingsSchema.js'; +import { getEnableHooks, getEnableHooksUI } from './settingsSchema.js'; export interface CliArgs { query: string | undefined; @@ -292,7 +292,7 @@ export async function parseArguments(settings: Settings): Promise { } // Register hooks command if hooks are enabled - if (getEnableHooks(settings)) { + if (getEnableHooksUI(settings)) { yargsInstance.command(hooksCommand); } @@ -740,6 +740,7 @@ export async function loadCliConfig( modelConfigServiceConfig: settings.modelConfigs, // TODO: loading of hooks based on workspace trust enableHooks: getEnableHooks(settings), + enableHooksUI: getEnableHooksUI(settings), hooks: settings.hooks || {}, projectHooks: projectHooks || {}, onModelChange: (model: string) => saveModelChange(loadedSettings, model), diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index a51776316b..efe535e42e 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -2136,8 +2136,10 @@ type InferSettings = { export type Settings = InferSettings; -export function getEnableHooks(settings: Settings): boolean { - return ( - (settings.tools?.enableHooks ?? true) && (settings.hooks?.enabled ?? false) - ); +export function getEnableHooksUI(settings: Settings): boolean { + return settings.tools?.enableHooks ?? true; +} + +export function getEnableHooks(settings: Settings): boolean { + return getEnableHooksUI(settings) && (settings.hooks?.enabled ?? false); } diff --git a/packages/cli/src/services/BuiltinCommandLoader.test.ts b/packages/cli/src/services/BuiltinCommandLoader.test.ts index b99d58239e..6bebf0b06e 100644 --- a/packages/cli/src/services/BuiltinCommandLoader.test.ts +++ b/packages/cli/src/services/BuiltinCommandLoader.test.ts @@ -101,6 +101,7 @@ describe('BuiltinCommandLoader', () => { getFolderTrust: vi.fn().mockReturnValue(true), getEnableExtensionReloading: () => false, getEnableHooks: () => false, + getEnableHooksUI: () => false, isSkillsSupportEnabled: vi.fn().mockReturnValue(false), getMcpEnabled: vi.fn().mockReturnValue(true), getSkillManager: vi.fn().mockReturnValue({ @@ -199,6 +200,7 @@ describe('BuiltinCommandLoader profile', () => { getCheckpointingEnabled: () => false, getEnableExtensionReloading: () => false, getEnableHooks: () => false, + getEnableHooksUI: () => false, isSkillsSupportEnabled: vi.fn().mockReturnValue(false), getMcpEnabled: vi.fn().mockReturnValue(true), getSkillManager: vi.fn().mockReturnValue({ diff --git a/packages/cli/src/services/BuiltinCommandLoader.ts b/packages/cli/src/services/BuiltinCommandLoader.ts index 31395c0172..ea72ecdb05 100644 --- a/packages/cli/src/services/BuiltinCommandLoader.ts +++ b/packages/cli/src/services/BuiltinCommandLoader.ts @@ -78,7 +78,7 @@ export class BuiltinCommandLoader implements ICommandLoader { editorCommand, extensionsCommand(this.config?.getEnableExtensionReloading()), helpCommand, - ...(this.config?.getEnableHooks() ? [hooksCommand] : []), + ...(this.config?.getEnableHooksUI() ? [hooksCommand] : []), await ideCommand(), initCommand, ...(this.config?.getMcpEnabled() === false diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 10c06950b8..cc9929f23c 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -344,6 +344,7 @@ export interface ConfigParameters { disableYoloMode?: boolean; modelConfigServiceConfig?: ModelConfigServiceConfig; enableHooks?: boolean; + enableHooksUI?: boolean; experiments?: Experiments; hooks?: { [K in HookEventName]?: HookDefinition[] } & { disabled?: string[] }; projectHooks?: { [K in HookEventName]?: HookDefinition[] } & { @@ -470,6 +471,7 @@ export class Config { private readonly disableYoloMode: boolean; private pendingIncludeDirectories: string[]; private readonly enableHooks: boolean; + private readonly enableHooksUI: boolean; private readonly hooks: | { [K in HookEventName]?: HookDefinition[] } | undefined; @@ -603,6 +605,7 @@ export class Config { this.useWriteTodos = isPreviewModel(this.model) ? false : (params.useWriteTodos ?? true); + this.enableHooksUI = params.enableHooksUI ?? true; this.enableHooks = params.enableHooks ?? false; this.disabledHooks = (params.hooks && 'disabled' in params.hooks @@ -1671,6 +1674,10 @@ export class Config { return this.enableHooks; } + getEnableHooksUI(): boolean { + return this.enableHooksUI; + } + getCodebaseInvestigatorSettings(): CodebaseInvestigatorSettings { return this.codebaseInvestigatorSettings; }