Merge pull request #1296 from gsd-build/fix/gemini-before-tool-hook-1295

fix: use BeforeTool hook event for Gemini CLI prompt guard
This commit is contained in:
Tom Boucher
2026-03-21 14:10:55 -04:00
committed by GitHub

View File

@@ -3214,24 +3214,26 @@ function uninstall(isGlobal, runtime = 'claude') {
}
}
// Remove GSD hooks from PreToolUse (prompt injection guard)
if (settings.hooks && settings.hooks.PreToolUse) {
const before = settings.hooks.PreToolUse.length;
settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter(entry => {
if (entry.hooks && Array.isArray(entry.hooks)) {
const hasGsdHook = entry.hooks.some(h =>
h.command && h.command.includes('gsd-prompt-guard')
);
return !hasGsdHook;
// Remove GSD hooks from PreToolUse and BeforeTool (Gemini uses BeforeTool)
for (const eventName of ['PreToolUse', 'BeforeTool']) {
if (settings.hooks && settings.hooks[eventName]) {
const before = settings.hooks[eventName].length;
settings.hooks[eventName] = settings.hooks[eventName].filter(entry => {
if (entry.hooks && Array.isArray(entry.hooks)) {
const hasGsdHook = entry.hooks.some(h =>
h.command && h.command.includes('gsd-prompt-guard')
);
return !hasGsdHook;
}
return true;
});
if (settings.hooks[eventName].length < before) {
settingsModified = true;
console.log(` ${green}✓${reset} Removed prompt injection guard hook from settings`);
}
if (settings.hooks[eventName].length === 0) {
delete settings.hooks[eventName];
}
return true;
});
if (settings.hooks.PreToolUse.length < before) {
settingsModified = true;
console.log(` ${green}✓${reset} Removed prompt injection guard hook from settings`);
}
if (settings.hooks.PreToolUse.length === 0) {
delete settings.hooks.PreToolUse;
}
}
@@ -4119,7 +4121,8 @@ function install(isGlobal, runtime = 'claude') {
}
// Configure PreToolUse hook for prompt injection detection
const preToolEvent = 'PreToolUse';
// Gemini and Antigravity use BeforeTool instead of PreToolUse for pre-tool hooks
const preToolEvent = (runtime === 'gemini' || runtime === 'antigravity') ? 'BeforeTool' : 'PreToolUse';
if (!settings.hooks[preToolEvent]) {
settings.hooks[preToolEvent] = [];
}