fix(hooks): enable /hooks disable to reliably stop single hooks (#16804)

This commit is contained in:
Abhi
2026-01-16 19:28:36 -05:00
committed by GitHub
parent ee8d425603
commit 1998a713e2
4 changed files with 97 additions and 59 deletions

View File

@@ -89,6 +89,9 @@ async function enableAction(
: SettingScope.User;
settings.setValue(scope, 'hooks.disabled', newDisabledHooks);
// Update core config so re-initialization (e.g. extension reload) respects the change
config.updateDisabledHooks(settings.merged.hooks.disabled);
// Enable in hook system
hookSystem.setHookEnabled(hookName, true);
@@ -144,36 +147,32 @@ async function disableAction(
const settings = context.services.settings;
const disabledHooks = settings.merged.hooks.disabled;
// Add to disabled list if not already present
if (!disabledHooks.includes(hookName)) {
const newDisabledHooks = [...disabledHooks, hookName];
try {
if (!disabledHooks.includes(hookName)) {
const newDisabledHooks = [...disabledHooks, hookName];
// Update settings (setValue automatically saves)
try {
const scope = settings.workspace
? SettingScope.Workspace
: SettingScope.User;
settings.setValue(scope, 'hooks.disabled', newDisabledHooks);
// Disable in hook system
hookSystem.setHookEnabled(hookName, false);
return {
type: 'message',
messageType: 'info',
content: `Hook "${hookName}" disabled successfully.`,
};
} catch (error) {
return {
type: 'message',
messageType: 'error',
content: `Failed to disable hook: ${getErrorMessage(error)}`,
};
}
} else {
// Update core config so re-initialization (e.g. extension reload) respects the change
config.updateDisabledHooks(settings.merged.hooks.disabled);
// Always disable in hook system to ensure in-memory state matches settings
hookSystem.setHookEnabled(hookName, false);
return {
type: 'message',
messageType: 'info',
content: `Hook "${hookName}" is already disabled.`,
content: `Hook "${hookName}" disabled successfully.`,
};
} catch (error) {
return {
type: 'message',
messageType: 'error',
content: `Failed to disable hook: ${getErrorMessage(error)}`,
};
}
}
@@ -253,6 +252,9 @@ async function enableAllAction(
: SettingScope.User;
settings.setValue(scope, 'hooks.disabled', []);
// Update core config so re-initialization (e.g. extension reload) respects the change
config.updateDisabledHooks(settings.merged.hooks.disabled);
for (const hook of disabledHooks) {
const hookName = getHookDisplayName(hook);
hookSystem.setHookEnabled(hookName, true);
@@ -323,6 +325,9 @@ async function disableAllAction(
: SettingScope.User;
settings.setValue(scope, 'hooks.disabled', allHookNames);
// Update core config so re-initialization (e.g. extension reload) respects the change
config.updateDisabledHooks(settings.merged.hooks.disabled);
for (const hook of enabledHooks) {
const hookName = getHookDisplayName(hook);
hookSystem.setHookEnabled(hookName, false);