mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-12 12:54:07 -07:00
feat(core): Decouple enabling hooks UI from subsystem. (#16074)
This commit is contained in:
@@ -53,7 +53,7 @@ import { requestConsentNonInteractive } from './extensions/consent.js';
|
|||||||
import { promptForSetting } from './extensions/extensionSettings.js';
|
import { promptForSetting } from './extensions/extensionSettings.js';
|
||||||
import type { EventEmitter } from 'node:stream';
|
import type { EventEmitter } from 'node:stream';
|
||||||
import { runExitCleanup } from '../utils/cleanup.js';
|
import { runExitCleanup } from '../utils/cleanup.js';
|
||||||
import { getEnableHooks } from './settingsSchema.js';
|
import { getEnableHooks, getEnableHooksUI } from './settingsSchema.js';
|
||||||
|
|
||||||
export interface CliArgs {
|
export interface CliArgs {
|
||||||
query: string | undefined;
|
query: string | undefined;
|
||||||
@@ -292,7 +292,7 @@ export async function parseArguments(settings: Settings): Promise<CliArgs> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Register hooks command if hooks are enabled
|
// Register hooks command if hooks are enabled
|
||||||
if (getEnableHooks(settings)) {
|
if (getEnableHooksUI(settings)) {
|
||||||
yargsInstance.command(hooksCommand);
|
yargsInstance.command(hooksCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -740,6 +740,7 @@ export async function loadCliConfig(
|
|||||||
modelConfigServiceConfig: settings.modelConfigs,
|
modelConfigServiceConfig: settings.modelConfigs,
|
||||||
// TODO: loading of hooks based on workspace trust
|
// TODO: loading of hooks based on workspace trust
|
||||||
enableHooks: getEnableHooks(settings),
|
enableHooks: getEnableHooks(settings),
|
||||||
|
enableHooksUI: getEnableHooksUI(settings),
|
||||||
hooks: settings.hooks || {},
|
hooks: settings.hooks || {},
|
||||||
projectHooks: projectHooks || {},
|
projectHooks: projectHooks || {},
|
||||||
onModelChange: (model: string) => saveModelChange(loadedSettings, model),
|
onModelChange: (model: string) => saveModelChange(loadedSettings, model),
|
||||||
|
|||||||
@@ -2136,8 +2136,10 @@ type InferSettings<T extends SettingsSchema> = {
|
|||||||
|
|
||||||
export type Settings = InferSettings<SettingsSchemaType>;
|
export type Settings = InferSettings<SettingsSchemaType>;
|
||||||
|
|
||||||
export function getEnableHooks(settings: Settings): boolean {
|
export function getEnableHooksUI(settings: Settings): boolean {
|
||||||
return (
|
return settings.tools?.enableHooks ?? true;
|
||||||
(settings.tools?.enableHooks ?? true) && (settings.hooks?.enabled ?? false)
|
}
|
||||||
);
|
|
||||||
|
export function getEnableHooks(settings: Settings): boolean {
|
||||||
|
return getEnableHooksUI(settings) && (settings.hooks?.enabled ?? false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ describe('BuiltinCommandLoader', () => {
|
|||||||
getFolderTrust: vi.fn().mockReturnValue(true),
|
getFolderTrust: vi.fn().mockReturnValue(true),
|
||||||
getEnableExtensionReloading: () => false,
|
getEnableExtensionReloading: () => false,
|
||||||
getEnableHooks: () => false,
|
getEnableHooks: () => false,
|
||||||
|
getEnableHooksUI: () => false,
|
||||||
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
||||||
getMcpEnabled: vi.fn().mockReturnValue(true),
|
getMcpEnabled: vi.fn().mockReturnValue(true),
|
||||||
getSkillManager: vi.fn().mockReturnValue({
|
getSkillManager: vi.fn().mockReturnValue({
|
||||||
@@ -199,6 +200,7 @@ describe('BuiltinCommandLoader profile', () => {
|
|||||||
getCheckpointingEnabled: () => false,
|
getCheckpointingEnabled: () => false,
|
||||||
getEnableExtensionReloading: () => false,
|
getEnableExtensionReloading: () => false,
|
||||||
getEnableHooks: () => false,
|
getEnableHooks: () => false,
|
||||||
|
getEnableHooksUI: () => false,
|
||||||
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
isSkillsSupportEnabled: vi.fn().mockReturnValue(false),
|
||||||
getMcpEnabled: vi.fn().mockReturnValue(true),
|
getMcpEnabled: vi.fn().mockReturnValue(true),
|
||||||
getSkillManager: vi.fn().mockReturnValue({
|
getSkillManager: vi.fn().mockReturnValue({
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
|
|||||||
editorCommand,
|
editorCommand,
|
||||||
extensionsCommand(this.config?.getEnableExtensionReloading()),
|
extensionsCommand(this.config?.getEnableExtensionReloading()),
|
||||||
helpCommand,
|
helpCommand,
|
||||||
...(this.config?.getEnableHooks() ? [hooksCommand] : []),
|
...(this.config?.getEnableHooksUI() ? [hooksCommand] : []),
|
||||||
await ideCommand(),
|
await ideCommand(),
|
||||||
initCommand,
|
initCommand,
|
||||||
...(this.config?.getMcpEnabled() === false
|
...(this.config?.getMcpEnabled() === false
|
||||||
|
|||||||
@@ -344,6 +344,7 @@ export interface ConfigParameters {
|
|||||||
disableYoloMode?: boolean;
|
disableYoloMode?: boolean;
|
||||||
modelConfigServiceConfig?: ModelConfigServiceConfig;
|
modelConfigServiceConfig?: ModelConfigServiceConfig;
|
||||||
enableHooks?: boolean;
|
enableHooks?: boolean;
|
||||||
|
enableHooksUI?: boolean;
|
||||||
experiments?: Experiments;
|
experiments?: Experiments;
|
||||||
hooks?: { [K in HookEventName]?: HookDefinition[] } & { disabled?: string[] };
|
hooks?: { [K in HookEventName]?: HookDefinition[] } & { disabled?: string[] };
|
||||||
projectHooks?: { [K in HookEventName]?: HookDefinition[] } & {
|
projectHooks?: { [K in HookEventName]?: HookDefinition[] } & {
|
||||||
@@ -470,6 +471,7 @@ export class Config {
|
|||||||
private readonly disableYoloMode: boolean;
|
private readonly disableYoloMode: boolean;
|
||||||
private pendingIncludeDirectories: string[];
|
private pendingIncludeDirectories: string[];
|
||||||
private readonly enableHooks: boolean;
|
private readonly enableHooks: boolean;
|
||||||
|
private readonly enableHooksUI: boolean;
|
||||||
private readonly hooks:
|
private readonly hooks:
|
||||||
| { [K in HookEventName]?: HookDefinition[] }
|
| { [K in HookEventName]?: HookDefinition[] }
|
||||||
| undefined;
|
| undefined;
|
||||||
@@ -603,6 +605,7 @@ export class Config {
|
|||||||
this.useWriteTodos = isPreviewModel(this.model)
|
this.useWriteTodos = isPreviewModel(this.model)
|
||||||
? false
|
? false
|
||||||
: (params.useWriteTodos ?? true);
|
: (params.useWriteTodos ?? true);
|
||||||
|
this.enableHooksUI = params.enableHooksUI ?? true;
|
||||||
this.enableHooks = params.enableHooks ?? false;
|
this.enableHooks = params.enableHooks ?? false;
|
||||||
this.disabledHooks =
|
this.disabledHooks =
|
||||||
(params.hooks && 'disabled' in params.hooks
|
(params.hooks && 'disabled' in params.hooks
|
||||||
@@ -1671,6 +1674,10 @@ export class Config {
|
|||||||
return this.enableHooks;
|
return this.enableHooks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getEnableHooksUI(): boolean {
|
||||||
|
return this.enableHooksUI;
|
||||||
|
}
|
||||||
|
|
||||||
getCodebaseInvestigatorSettings(): CodebaseInvestigatorSettings {
|
getCodebaseInvestigatorSettings(): CodebaseInvestigatorSettings {
|
||||||
return this.codebaseInvestigatorSettings;
|
return this.codebaseInvestigatorSettings;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user