

























@@ -439,6 +439,10 @@ export function registerNativeHookRelay(
439439 relayId,
440440generation: registration.generation,
441441 event,
442+preToolUseUnavailable:
443+event === "pre_tool_use" && !nativeHookRelayEventHasLocalWork(registration, event)
444+ ? "noop"
445+ : undefined,
442446nice: params.command?.nice,
443447timeoutMs: params.command?.timeoutMs,
444448executable: params.command?.executable,
@@ -517,6 +521,7 @@ export function buildNativeHookRelayCommand(params: {
517521relayId: string;
518522generation?: string;
519523event: NativeHookRelayEvent;
524+preToolUseUnavailable?: "noop";
520525timeoutMs?: number;
521526executable?: string;
522527nice?: number | false;
@@ -541,6 +546,9 @@ export function buildNativeHookRelayCommand(params: {
541546 ...(params.generation ? ["--generation", params.generation] : []),
542547"--event",
543548params.event,
549+ ...(params.event === "pre_tool_use" && params.preToolUseUnavailable
550+ ? ["--pre-tool-use-unavailable", params.preToolUseUnavailable]
551+ : []),
544552"--timeout",
545553String(timeoutMs),
546554]);
@@ -752,13 +760,20 @@ export async function invokeNativeHookRelayBridge(
752760export function renderNativeHookRelayUnavailableResponse(params: {
753761provider: unknown;
754762event: unknown;
763+preToolUseUnavailable?: unknown;
755764message?: string;
756765}): NativeHookRelayProcessResponse {
757766const provider = readNativeHookRelayProvider(params.provider);
758767const event = readNativeHookRelayEvent(params.event);
759768const adapter = getNativeHookRelayProviderAdapter(provider);
760769const message = params.message?.trim() || "Native hook relay unavailable";
761770if (event === "pre_tool_use") {
771+// The standalone CLI cannot reconstruct the originating registration after
772+// relay lookup fails, so unavailable PreToolUse must fail closed unless the
773+// generated command explicitly recorded that no before-tool policy existed.
774+if (params.preToolUseUnavailable === "noop") {
775+return adapter.renderNoopResponse(event);
776+}
762777return adapter.renderPreToolUseBlockResponse(message);
763778}
764779if (event === "permission_request") {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。