






















@@ -30,7 +30,10 @@ import {
3030resolveCodexSandboxEnvironmentSelection,
3131shouldRequireCodexSandboxExecServerEnvironment,
3232} from "./dynamic-tool-build.js";
33-import { buildCodexPluginAppCacheKey } from "./plugin-app-cache-key.js";
33+import {
34+buildCodexAppServerRuntimeFingerprint,
35+buildCodexPluginAppCacheKey,
36+} from "./plugin-app-cache-key.js";
3437import {
3538buildCodexPluginThreadConfig,
3639buildCodexPluginThreadConfigInputFingerprint,
@@ -148,20 +151,6 @@ export async function startCodexAttemptThread(params: {
148151const pluginThreadConfigPluginConfig = params.nativeToolSurfaceEnabled
149152 ? params.pluginConfig
150153 : disableCodexPluginThreadConfig(params.pluginConfig);
151-const pluginAppCacheKeyInput = {
152-appServer: params.appServer,
153-agentDir: params.agentDir,
154-authProfileId: params.startupAuthProfileId,
155-accountId: params.startupAuthAccountCacheKey,
156-envApiKeyFingerprint: params.startupEnvApiKeyCacheKey,
157-};
158-const pluginAppCacheKey = buildCodexPluginAppCacheKey(pluginAppCacheKeyInput);
159-const pluginThreadConfigInputFingerprint = pluginThreadConfigRequired
160- ? buildCodexPluginThreadConfigInputFingerprint({
161-pluginConfig: pluginThreadConfigPluginConfig,
162-appCacheKey: pluginAppCacheKey,
163-})
164- : undefined;
165154const resolvedPluginPolicy = pluginThreadConfigRequired
166155 ? resolveCodexPluginsPolicy(pluginThreadConfigPluginConfig)
167156 : undefined;
@@ -174,20 +163,6 @@ export async function startCodexAttemptThread(params: {
174163.map((plugin) => plugin.configKey)
175164.toSorted()
176165 : undefined;
177-const attemptParams = params.buildAttemptParams();
178-embeddedAgentLog.debug(
179-"codex plugin thread config eligibility",
180-buildCodexPluginThreadConfigEligibilityLogData({
181-sessionId: attemptParams.sessionId,
182-sessionKey: attemptParams.sessionKey ?? "",
183- pluginThreadConfigRequired,
184- resolvedPluginPolicy,
185- enabledPluginConfigKeys,
186- pluginAppCacheKey,
187-startupAuthProfileId: params.startupAuthProfileId,
188-appServer: params.appServer,
189-}),
190-);
191166pluginAppServer = mcpElicitationDelegationRequired
192167 ? {
193168 ...params.appServer,
@@ -243,6 +218,41 @@ export async function startCodexAttemptThread(params: {
243218timeoutMs: params.appServer.requestTimeoutMs,
244219signal: startupAbandonController.signal,
245220});
221+const startupRuntimeIdentity = activeStartupClient.getRuntimeIdentity();
222+const pluginAppCacheKey = buildCodexPluginAppCacheKey({
223+appServer: params.appServer,
224+agentDir: params.agentDir,
225+authProfileId: params.startupAuthProfileId,
226+accountId: params.startupAuthAccountCacheKey,
227+envApiKeyFingerprint: params.startupEnvApiKeyCacheKey,
228+appServerVersion: activeStartupClient.getServerVersion(),
229+runtimeIdentity: startupRuntimeIdentity,
230+});
231+const appServerRuntimeFingerprint = buildCodexAppServerRuntimeFingerprint({
232+appServer: params.appServer,
233+appServerVersion: activeStartupClient.getServerVersion(),
234+runtimeIdentity: startupRuntimeIdentity,
235+});
236+const pluginThreadConfigInputFingerprint = pluginThreadConfigRequired
237+ ? buildCodexPluginThreadConfigInputFingerprint({
238+pluginConfig: pluginThreadConfigPluginConfig,
239+appCacheKey: pluginAppCacheKey,
240+})
241+ : undefined;
242+const attemptParams = params.buildAttemptParams();
243+embeddedAgentLog.debug(
244+"codex plugin thread config eligibility",
245+buildCodexPluginThreadConfigEligibilityLogData({
246+sessionId: attemptParams.sessionId,
247+sessionKey: attemptParams.sessionKey ?? "",
248+ pluginThreadConfigRequired,
249+ resolvedPluginPolicy,
250+ enabledPluginConfigKeys,
251+ pluginAppCacheKey,
252+startupAuthProfileId: params.startupAuthProfileId,
253+appServer: params.appServer,
254+}),
255+);
246256let startupSandboxEnvironment: CodexSandboxExecEnvironment | undefined;
247257let startupSandboxEnvironmentAcquired = false;
248258const releaseStartupSandboxEnvironment = async () => {
@@ -291,8 +301,10 @@ export async function startCodexAttemptThread(params: {
291301);
292302const startupExecutionCwd = resolveCodexAppServerExecutionCwd({
293303effectiveCwd: params.effectiveCwd,
304+localWorkspaceRoot: params.effectiveWorkspace,
294305environment: startupSandboxEnvironment,
295306nativeToolSurfaceEnabled: params.nativeToolSurfaceEnabled,
307+remoteWorkspaceRoot: params.appServer.remoteWorkspaceRoot,
296308});
297309const startupSandboxPolicy = startupSandboxEnvironment
298310 ? resolveCodexExternalSandboxPolicyForOpenClawSandbox(params.sandbox)
@@ -319,6 +331,7 @@ export async function startCodexAttemptThread(params: {
319331mcpServersFingerprint: params.bundleMcpThreadConfig.fingerprint,
320332mcpServersFingerprintEvaluated: params.bundleMcpThreadConfig.evaluated,
321333environmentSelection: startupEnvironmentSelection,
334+ appServerRuntimeFingerprint,
322335contextEngineProjection: params.contextEngineProjection,
323336 signal,
324337pluginThreadConfig: pluginThreadConfigRequired
@@ -333,7 +346,7 @@ export async function startCodexAttemptThread(params: {
333346activeStartupClient.request(method, requestParams, {
334347timeoutMs: params.appServer.requestTimeoutMs,
335348 signal,
336- }),
349+}),
337350appCache: defaultCodexAppInventoryCache,
338351appCacheKey: pluginAppCacheKey,
339352}),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。