fix(webfetch): guard redirect loops in built-in flow

This commit is contained in:
YeonGyu-Kim
2026-03-24 23:58:53 +09:00
parent cea8769a7f
commit af301ab29a
10 changed files with 401 additions and 0 deletions
@@ -15,6 +15,7 @@ import {
createReadImageResizerHook,
createJsonErrorRecoveryHook,
createTodoDescriptionOverrideHook,
createWebFetchRedirectGuardHook,
} from "../../hooks"
import {
getOpenCodeVersion,
@@ -37,6 +38,7 @@ export type ToolGuardHooks = {
jsonErrorRecovery: ReturnType<typeof createJsonErrorRecoveryHook> | null
readImageResizer: ReturnType<typeof createReadImageResizerHook> | null
todoDescriptionOverride: ReturnType<typeof createTodoDescriptionOverrideHook> | null
webfetchRedirectGuard: ReturnType<typeof createWebFetchRedirectGuardHook> | null
}
export function createToolGuardHooks(args: {
@@ -117,6 +119,10 @@ export function createToolGuardHooks(args: {
? safeHook("todo-description-override", () => createTodoDescriptionOverrideHook())
: null
const webfetchRedirectGuard = isHookEnabled("webfetch-redirect-guard")
? safeHook("webfetch-redirect-guard", () => createWebFetchRedirectGuardHook(ctx))
: null
return {
commentChecker,
toolOutputTruncator,
@@ -130,5 +136,6 @@ export function createToolGuardHooks(args: {
jsonErrorRecovery,
readImageResizer,
todoDescriptionOverride,
webfetchRedirectGuard,
}
}
+1
View File
@@ -125,6 +125,7 @@ export function createToolExecuteAfterHandler(args: {
await hooks.taskResumeInfo?.["tool.execute.after"]?.(input, output)
await hooks.readImageResizer?.["tool.execute.after"]?.(input, output)
await hooks.hashlineReadEnhancer?.["tool.execute.after"]?.(input, output)
await hooks.webfetchRedirectGuard?.["tool.execute.after"]?.(input, output)
await hooks.jsonErrorRecovery?.["tool.execute.after"]?.(input, output)
}
+1
View File
@@ -50,6 +50,7 @@ export function createToolExecuteBeforeHandler(args: {
await hooks.directoryReadmeInjector?.["tool.execute.before"]?.(input, output)
await hooks.rulesInjector?.["tool.execute.before"]?.(input, output)
await hooks.tasksTodowriteDisabler?.["tool.execute.before"]?.(input, output)
await hooks.webfetchRedirectGuard?.["tool.execute.before"]?.(input, output)
await hooks.prometheusMdOnly?.["tool.execute.before"]?.(input, output)
await hooks.sisyphusJuniorNotepad?.["tool.execute.before"]?.(input, output)
await hooks.atlasHook?.["tool.execute.before"]?.(input, output)