

























@@ -44,10 +44,14 @@ export function resolveCodexNativeExecutionPolicy(params: {
4444}): CodexNativeExecutionPolicy {
4545const config = params.config ?? {};
4646const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim() || undefined;
47+const agentId = resolvePolicyAgentId({ config, sessionKey, agentId: params.agentId });
48+const canReadSessionEntry =
49+params.readRuntimeSessionEntry &&
50+shouldReadRuntimeSessionEntry({ config, sessionKey, agentId: params.agentId });
4751const sessionEntry =
4852params.sessionEntry ??
49-(params.readRuntimeSessionEntry && sessionKey
50- ? readRuntimeSessionEntryBestEffort(sessionKey)
53+(canReadSessionEntry && sessionKey
54+ ? readRuntimeSessionEntryBestEffort({ sessionKey, agentId })
5155 : undefined);
5256const sandboxAvailable =
5357params.sandboxAvailable ??
@@ -57,7 +61,6 @@ export function resolveCodexNativeExecutionPolicy(params: {
5761 sessionKey,
5862}).sandboxed
5963 : false);
60-const agentId = resolvePolicyAgentId({ config, sessionKey, agentId: params.agentId });
6164const agentExec = resolvePolicyAgentExec({ config, agentId });
6265const globalExec = config.tools?.exec;
6366const requestedExecHost =
@@ -117,8 +120,7 @@ function resolvePolicyAgentId(params: {
117120return sessionAgentId;
118121}
119122const agents = listAgentEntries(params.config);
120-const defaultEntry = agents.find((entry) => entry?.default) ?? agents[0];
121-return normalizeAgentId(defaultEntry?.id);
123+return resolveDefaultPolicyAgentId(agents);
122124}
123125124126function resolvePolicyAgentExec(params: {
@@ -148,6 +150,40 @@ function parseAgentIdFromSessionKey(sessionKey?: string): string | undefined {
148150return normalizeAgentIdOrDefault(parts[1]);
149151}
150152153+function shouldReadRuntimeSessionEntry(params: {
154+config: OpenClawConfig;
155+sessionKey?: string;
156+agentId?: string;
157+}): boolean {
158+if (!params.sessionKey) {
159+return false;
160+}
161+const explicitAgentId = normalizeAgentIdOrDefault(params.agentId);
162+if (!explicitAgentId) {
163+return true;
164+}
165+const sessionAgentId = parseAgentIdFromSessionKey(params.sessionKey);
166+if (!sessionAgentId) {
167+return isDefaultAgentSessionKeyForAgent({ config: params.config, agentId: explicitAgentId });
168+}
169+return sessionAgentId === explicitAgentId;
170+}
171+172+function isDefaultAgentSessionKeyForAgent(params: {
173+config: OpenClawConfig;
174+agentId: string;
175+}): boolean {
176+return (
177+normalizeAgentId(params.agentId) ===
178+resolveDefaultPolicyAgentId(listAgentEntries(params.config))
179+);
180+}
181+182+function resolveDefaultPolicyAgentId(agents: AgentEntry[]): string {
183+const defaultEntry = agents.find((entry) => entry?.default) ?? agents[0];
184+return normalizeAgentId(defaultEntry?.id);
185+}
186+151187function normalizeAgentIdOrDefault(value?: string | null): string | undefined {
152188const normalized = normalizeAgentId(value);
153189return normalized === DEFAULT_AGENT_ID && !(value ?? "").trim() ? undefined : normalized;
@@ -194,9 +230,16 @@ function resolveEffectiveExecHost(params: {
194230return params.requestedExecHost;
195231}
196232197-function readRuntimeSessionEntryBestEffort(sessionKey: string): SessionEntry | undefined {
233+function readRuntimeSessionEntryBestEffort(params: {
234+sessionKey: string;
235+agentId: string;
236+}): SessionEntry | undefined {
198237try {
199-return getSessionEntry({ sessionKey, hydrateSkillPromptRefs: false });
238+return getSessionEntry({
239+sessionKey: params.sessionKey,
240+agentId: params.agentId,
241+hydrateSkillPromptRefs: false,
242+});
200243} catch {
201244return undefined;
202245}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。