From 2d5357d7bc4deb1e83570e3cb332370323c12d7f Mon Sep 17 00:00:00 2001 From: Eva Date: Sat, 2 May 2026 01:21:42 +0700 Subject: [PATCH] fix: preserve session policy extension lookup --- .../.generated/plugin-sdk-api-baseline.sha256 | 4 ++-- .../codex/src/app-server/dynamic-tools.ts | 2 ++ .../codex/src/app-server/run-attempt.ts | 1 + .../session-entry-projection.contract.test.ts | 4 ++-- src/plugins/trusted-tool-policy.ts | 19 +++++++++++++++++-- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/docs/.generated/plugin-sdk-api-baseline.sha256 b/docs/.generated/plugin-sdk-api-baseline.sha256 index c46acc8bb81..5141c0d646d 100644 --- a/docs/.generated/plugin-sdk-api-baseline.sha256 +++ b/docs/.generated/plugin-sdk-api-baseline.sha256 @@ -1,2 +1,2 @@ -b7044c16230d4ed03b2d7f39a6443174bfdbf424868cc173f45bd6e90539bce1 plugin-sdk-api-baseline.json -7770b6b656780180bdc4c363e23054815709f4744515d89f709c14c0e1f84d9b plugin-sdk-api-baseline.jsonl +c04717506cb856f1ca3f8ddbc95dd4616fcdcc34c0115a26474210b45c745223 plugin-sdk-api-baseline.json +f30ff6ca7323f486f78760a60004cc6296af77962a7b5377cde3aea5aae5dbdb plugin-sdk-api-baseline.jsonl diff --git a/extensions/codex/src/app-server/dynamic-tools.ts b/extensions/codex/src/app-server/dynamic-tools.ts index 64a36d500a4..2ea8df69cba 100644 --- a/extensions/codex/src/app-server/dynamic-tools.ts +++ b/extensions/codex/src/app-server/dynamic-tools.ts @@ -6,6 +6,7 @@ import { extractToolResultMediaArtifact, filterToolResultMediaUrls, HEARTBEAT_RESPONSE_TOOL_NAME, + type EmbeddedRunAttemptParams, isToolWrappedWithBeforeToolCallHook, isMessagingTool, isMessagingToolSendAction, @@ -47,6 +48,7 @@ export function createCodexDynamicToolBridge(params: { signal: AbortSignal; hookContext?: { agentId?: string; + config?: EmbeddedRunAttemptParams["config"]; sessionId?: string; sessionKey?: string; runId?: string; diff --git a/extensions/codex/src/app-server/run-attempt.ts b/extensions/codex/src/app-server/run-attempt.ts index f534eae91de..6f195eaf368 100644 --- a/extensions/codex/src/app-server/run-attempt.ts +++ b/extensions/codex/src/app-server/run-attempt.ts @@ -425,6 +425,7 @@ export async function runCodexAppServerAttempt( signal: runAbortController.signal, hookContext: { agentId: sessionAgentId, + config: params.config, sessionId: params.sessionId, sessionKey: sandboxSessionKey, runId: params.runId, diff --git a/src/plugins/contracts/session-entry-projection.contract.test.ts b/src/plugins/contracts/session-entry-projection.contract.test.ts index fda2640f774..95364fdba32 100644 --- a/src/plugins/contracts/session-entry-projection.contract.test.ts +++ b/src/plugins/contracts/session-entry-projection.contract.test.ts @@ -606,8 +606,8 @@ describe("plugin session extension SessionEntry projection", () => { { gate: "open" }, { gate: "second" }, undefined, - undefined, - undefined, + { gate: "open" }, + { gate: "second" }, undefined, ]); expect(seenConfig).toEqual([undefined, undefined]); diff --git a/src/plugins/trusted-tool-policy.ts b/src/plugins/trusted-tool-policy.ts index 9ae07593a4b..fb4caab828f 100644 --- a/src/plugins/trusted-tool-policy.ts +++ b/src/plugins/trusted-tool-policy.ts @@ -1,3 +1,4 @@ +import { getRuntimeConfig } from "../config/config.js"; import type { OpenClawConfig } from "../config/types.openclaw.js"; import type { PluginHookBeforeToolCallEvent, @@ -18,6 +19,19 @@ export async function runTrustedToolPolicies( let hasAdjustedParams = false; let approval: PluginHookBeforeToolCallResult["requireApproval"]; const sessionExtensionStateCache = new Map | undefined>(); + let resolvedSessionConfig: OpenClawConfig | undefined = options?.config; + let didResolveSessionConfig = Boolean(options?.config); + const resolveSessionConfig = (): OpenClawConfig | undefined => { + if (!didResolveSessionConfig) { + didResolveSessionConfig = true; + try { + resolvedSessionConfig = getRuntimeConfig(); + } catch { + resolvedSessionConfig = undefined; + } + } + return resolvedSessionConfig; + }; for (const registration of policies) { const policyCtx: PluginHookToolContext = { ...ctx, @@ -26,11 +40,12 @@ export async function runTrustedToolPolicies( const normalizedNamespace = namespace.trim(); const cacheKey = registration.pluginId; if (!sessionExtensionStateCache.has(cacheKey)) { + const config = ctx.sessionKey ? resolveSessionConfig() : undefined; sessionExtensionStateCache.set( cacheKey, - options?.config + config ? getPluginSessionExtensionStateSync({ - cfg: options.config, + cfg: config, pluginId: registration.pluginId, sessionKey: ctx.sessionKey, })