@openclaw/codex 2026.9.9 → 2026.9.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/.setup/{account-usage-runtime-9B-ABnCR.mjs → account-usage-runtime-CD8HYWaz.mjs} +1 -1
  2. package/dist/.setup/{apply-CBcTS6Se.mjs → apply-DN-qPbcH.mjs} +4 -4
  3. package/dist/.setup/{attempt-client-cleanup-_RUXhE5e.mjs → attempt-client-cleanup-93r-CLTi.mjs} +3 -3
  4. package/dist/.setup/{attempt-workspace-context-CSD2rKPq.mjs → attempt-workspace-context-ejEuxrY1.mjs} +1 -1
  5. package/dist/.setup/{auth-cache-key-gOhcdE_N.mjs → auth-cache-key-Bs_3kRJD.mjs} +1 -1
  6. package/dist/.setup/{bounded-turn-BKSjzckA.mjs → bounded-turn-I8Vb-qq3.mjs} +9 -9
  7. package/dist/.setup/{build-state-CDQUVDAI.mjs → build-state--SrHyc6r.mjs} +1 -1
  8. package/dist/.setup/{client-B4EOuI-w.mjs → client-CyquSiJ2.mjs} +2 -2
  9. package/dist/.setup/{client-catalog-response-CsnppTTd.mjs → client-catalog-response-B9pLl58Y.mjs} +1 -1
  10. package/dist/.setup/{command-dispatch-DHjWG2Ll.mjs → command-dispatch-BPLz7tlx.mjs} +1 -1
  11. package/dist/.setup/{command-handlers-DSRIPTiA.mjs → command-handlers-95-WVrcl.mjs} +12 -12
  12. package/dist/.setup/{command-rpc-CKsxWgF6.mjs → command-rpc-BDfCWgc_.mjs} +6 -6
  13. package/dist/.setup/{compact-CXguvBLF.mjs → compact-5zzFlH-W.mjs} +9 -9
  14. package/dist/.setup/{conversation-binding-BDlmcqm3.mjs → conversation-binding-C-0jWdSo.mjs} +9 -9
  15. package/dist/.setup/{conversation-control-CzxjbHH4.mjs → conversation-control-BEotI-gH.mjs} +2 -2
  16. package/dist/.setup/{dynamic-tools-86M3tRl4.mjs → dynamic-tools-D3NAwGw3.mjs} +6 -6
  17. package/dist/.setup/{effective-mcp-catalog-DMrerMF4.mjs → effective-mcp-catalog-C0DfQNYU.mjs} +2 -2
  18. package/dist/.setup/{ephemeral-turn-C-vPku4K.mjs → ephemeral-turn-ksZ9NfsS.mjs} +2 -2
  19. package/dist/.setup/{event-projector-assistant-message-Bhu17sxy.mjs → event-projector-assistant-message-BmWQXFLV.mjs} +1 -1
  20. package/dist/.setup/incognito-session-C5ve_-63.mjs +1 -0
  21. package/dist/.setup/{isolated-completion-D68PsLcF.mjs → isolated-completion-Ci27cKqA.mjs} +4 -4
  22. package/dist/.setup/{model-catalog-BeTX0Aeo.mjs → model-catalog-qzAfnHzR.mjs} +26 -19
  23. package/dist/.setup/{models-32Lqf2JB.mjs → models-BbEE4EWS.mjs} +3 -3
  24. package/dist/.setup/{native-subagent-monitor-BRr7YExU.mjs → native-subagent-monitor-B9aAqfnU.mjs} +5 -3
  25. package/dist/.setup/{plan-CMXvb-Wm.mjs → plan-DTyFfTkk.mjs} +2 -2
  26. package/dist/.setup/{plugin-metadata-cache-DiVUT-uC.mjs → plugin-metadata-cache-Q4ZFn6UH.mjs} +4 -4
  27. package/dist/.setup/{provider-D0GD39BJ.mjs → provider-Cnr_icbk.mjs} +4 -4
  28. package/dist/.setup/{provider-capabilities-CIWN6WAi.mjs → provider-capabilities-ByhBukaD.mjs} +2 -2
  29. package/dist/.setup/{request-D-Vhprx3.mjs → request-DxKAfWyy.mjs} +1 -1
  30. package/dist/.setup/{run-attempt-CKZd8eYZ.mjs → run-attempt-BZKhzSrb.mjs} +36 -21
  31. package/dist/.setup/{session-catalog-C7GPE6q8.mjs → session-catalog-BaVqm4-Q.mjs} +9 -9
  32. package/dist/.setup/{session-catalog-events-BNKvbFTA.mjs → session-catalog-events-D9zC7gRb.mjs} +2 -2
  33. package/dist/.setup/{session-catalog-index-BY4p8Fcc.mjs → session-catalog-index-CNKpHanP.mjs} +3 -3
  34. package/dist/.setup/{session-catalog-native-projection-DZyauw3D.mjs → session-catalog-native-projection-DhId_sl8.mjs} +1 -1
  35. package/dist/.setup/{session-catalog-projection-D5zfSje1.mjs → session-catalog-projection-DcqN7DuI.mjs} +1 -1
  36. package/dist/.setup/{session-cli-DjWr7ujR.mjs → session-cli-TEVHpWaE.mjs} +1 -1
  37. package/dist/.setup/{session-retirement-CPUSNh9U.mjs → session-retirement-CW0ciVbW.mjs} +6 -6
  38. package/dist/.setup/{settled-turn-finalizer-DVOvJUSw.mjs → settled-turn-finalizer-DlPT87wW.mjs} +5 -5
  39. package/dist/.setup/{shared-client-lifecycle-BXJRGNcp.mjs → shared-client-lifecycle-CJ0lYVCW.mjs} +1 -1
  40. package/dist/.setup/{shared-client-D6n5dvpA.mjs → shared-client-tOOyadmg.mjs} +62 -25
  41. package/dist/.setup/{side-question-BQTOqCgV.mjs → side-question-BbnuMFTT.mjs} +9 -9
  42. package/dist/.setup/{source-pT6uUrZg.mjs → source-Cr8STZpF.mjs} +1 -1
  43. package/dist/.setup/{thread-lifecycle-BPIjjjRJ.mjs → thread-lifecycle-DcNw9n7E.mjs} +77 -39
  44. package/dist/.setup/{thread-ownership-vY9gRYkw.mjs → thread-ownership-DDban_4i.mjs} +3 -3
  45. package/dist/.setup/{thread-policy-Bf769xTq.mjs → thread-policy-TTAb-1yF.mjs} +3 -3
  46. package/dist/.setup/{thread-requests-CIyAcDJ3.mjs → thread-requests-DmkmrGIt.mjs} +5 -5
  47. package/dist/.setup/{thread-resume-DZbRTxqM.mjs → thread-resume-eo3IhOhh.mjs} +5 -5
  48. package/dist/.setup/{upstream-session-fork-Ci2-RvEy.mjs → upstream-session-fork-BbUNlJPZ.mjs} +8 -8
  49. package/dist/.setup/{usage-BP3aZPPp.mjs → usage-CDiI_zkr.mjs} +1 -1
  50. package/dist/.setup/{usage-limit-error-CwGm2hnj.mjs → usage-limit-error-BLnJh1mB.mjs} +1 -1
  51. package/dist/.setup/{web-search-provider.runtime-mvv6G9ul.mjs → web-search-provider.runtime-B_E2kpZN.mjs} +2 -2
  52. package/dist/catalog-page.worker.js +1 -1
  53. package/dist/cli-metadata.js +1 -1
  54. package/dist/harness.js +14 -14
  55. package/dist/index.js +19 -19
  56. package/dist/media-understanding-provider.js +2 -2
  57. package/dist/migration-provider-api.js +1 -2
  58. package/dist/session-history.worker.js +1 -2
  59. package/package.json +5 -5
  60. package/dist/.setup/incognito-session-DWYapfwf.mjs +0 -2
@@ -4,9 +4,9 @@ import { u as stringifyCodexPolicy } from "./config-security-CE-FcGw9.mjs";
4
4
  import { n as resolveCodexAppServerLocalHomeDir, t as resolveCodexAppServerHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
5
5
  import { d as readCodexEffectiveConfig, n as codexSandboxPolicyForTurn, s as assertCodexModelBackedReviewerEffectiveConfig, u as CODEX_SESSION_OVERRIDABLE_LAYER_TYPES } from "./config-options-CzyWLTJt.mjs";
6
6
  import { i as markStartedCodexManagedThread } from "./managed-thread-store-BMqgThVL.mjs";
7
- import { l as retainSharedCodexAppServerClientByInstanceId, n as getCurrentSharedClientEntry } from "./shared-client-lifecycle-BXJRGNcp.mjs";
7
+ import { l as retainSharedCodexAppServerClientByInstanceId, n as getCurrentSharedClientEntry } from "./shared-client-lifecycle-CJ0lYVCW.mjs";
8
8
  import { t as withCodexAppServerThreadMutation } from "./thread-ownership-queue-Dp24d7-F.mjs";
9
- import { t as isIncognitoSessionKey } from "./incognito-session-DWYapfwf.mjs";
9
+ import { t as isIncognitoSessionKey } from "./incognito-session-C5ve_-63.mjs";
10
10
  import { n as CodexAppServerRpcError, r as isCodexThreadReadMissingError } from "./rpc-error-BlD2vuzn.mjs";
11
11
  import { t as codexCatalogHomeId } from "./session-catalog-home-id-vlih0B_g.mjs";
12
12
  import { r as withAbortableTimeout } from "./timeout-CXOfNoaX.mjs";
@@ -18,14 +18,14 @@ import "./config-DKhXquav.mjs";
18
18
  import { i as sanitizeInlineImageDataUrl, r as invalidInlineImageText } from "./session-history-read-Ov3StuL4.mjs";
19
19
  import { c as resolveCodexContextEngineProjectionMaxChars, o as neutralizeCodexExplicitMentionSigils } from "./context-engine-projection-PezSESth.mjs";
20
20
  import { n as normalizeCodexAppServerBindingModelProvider } from "./auth-profile-B0okYl2D.mjs";
21
- import { A as bindCodexInferenceThread, B as isCodexAppServerClientRuntimeLive, C as CodexThreadBindingConflictError, F as consumeCodexAppServerLiveThread, G as releaseCodexAppServerLiveThread, J as unsubscribeCodexAppServerLiveThread, M as getCodexInferenceThreadQualification, N as prepareCodexInferenceThreadConfig, Q as createCodexEphemeralThreadPolicy, S as CodexAdoptedThreadActiveError, T as CodexThreadStartRequestError, V as isCodexAppServerLiveThreadClaimed, j as getCodexInferenceThread, k as assertCodexInferenceRouteConfig, n as captureCodexAppServerClientLifetime, w as CodexThreadClientReplacementError, z as hasCodexAppServerSiblingThreadWork } from "./shared-client-D6n5dvpA.mjs";
22
- import { C as assertExactSupervisionModelSelection, D as readSupervisionResponseThreadId, O as resolveCodexThreadRolloutPath, d as isCodexAppServerRequestTimeoutError, l as isCodexAppServerOverloadError, p as resolveCodexAppServerClientInstanceId, r as getCodexAppServerClientInstanceId, v as assertCodexThreadAcceptsDirectInput, x as assertCodexThreadStartResponse, y as assertCodexThreadForkResponse } from "./client-B4EOuI-w.mjs";
23
- import { c as isCodexAppServerUnsafeSubscriptionError, g as hasCodexAppServerSiblingRouteWork, n as CODEX_APP_SERVER_UNSUBSCRIBE_TIMEOUT_MS, o as closeCodexStartupClientBestEffort, p as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError, u as retireUnsafeCodexTurnClientBestEffort } from "./attempt-client-cleanup-_RUXhE5e.mjs";
24
- import { $ as readActiveCodexTurnIdsFromResume, B as loadCodexNativeToolCatalog, C as mergeCodexNativeProjectDocThreadConfig, E as assertCodexNativeHookRelayAllowed, F as attestCodexThreadToolSurface, G as areUserMcpServersFingerprintsCompatible, H as applyCodexNativeSkillIsolation, I as checkCodexThreadAppAvailability, J as fingerprintCodexThreadConfig, K as codexDynamicToolsFingerprint, L as discardUnattestedCodexPluginThread, Q as legacyFingerprintUserMcpServersConfigPatch, R as attestCodexRestrictedToolSurfaceMcpServersDisabled, St as mergeCodexThreadConfigs, T as CodexManagedHooksOnlyError, Tt as buildCodexAppApprovalOverrides, U as resolveCodexNativeSkillIsolation, W as areCodexDynamicToolFingerprintsCompatible, X as fingerprintJsonObject, Y as fingerprintEnvironmentSelection, Z as fingerprintUserMcpServersConfigPatch, _ as resolveCodexAppServerModelProvider, at as shouldRotateCodexGpt56MultiAgentBinding, bt as disableUnlistedCodexApps, c as codexThreadSandboxOrPermissions, d as resolveCodexThreadApprovalsReviewer, et as shouldStartTransientNoToolThread, g as CODEX_NATIVE_PERSONALITY_NONE, h as buildDeveloperInstructions, i as buildCodexRuntimeThreadConfigForRun, it as shouldRotateCodexAppServerBindingForRuntime, l as readCodexInheritedMcpServerNames, lt as isMessageOnlyCodexSourceReply, m as mergeCodexNativeShellEnvironment, mt as buildCodexPluginAppsConfigPatchFromPolicyContext, n as buildCodexRingZeroThreadConfigPatch, nt as isTransientWebSearchRestriction, o as buildThreadResumeParams, p as resolveCodexWebSearchPlan, q as codexLegacyDynamicToolsFingerprint, rt as shouldRecheckRecoverablePluginBinding, s as buildThreadStartParams, t as assertCodexManagedRequirementsDoNotOverrideToolPolicy, u as readCodexManagedRequirementsFingerprint, ut as isSystemAgentOnlyCodexDynamicToolAllowlist, v as resolveCodexAppServerRequestModelSelection, x as joinPresentSections, xt as isCodexPluginThreadBindingStale, y as resolveCodexAppServerThreadModelSelection, yt as buildPluginAppPolicyContext, z as hasCodexNativeToolCatalog } from "./thread-requests-CIyAcDJ3.mjs";
21
+ import { $ as createCodexEphemeralThreadPolicy, A as bindCodexInferenceThread, B as isCodexAppServerClientRuntimeLive, C as CodexThreadBindingConflictError, F as consumeCodexAppServerLiveThread, H as isCodexAppServerLiveThreadProtected, K as releaseCodexAppServerLiveThread, M as getCodexInferenceThreadQualification, N as prepareCodexInferenceThreadConfig, S as CodexAdoptedThreadActiveError, T as CodexThreadStartRequestError, V as isCodexAppServerLiveThreadClaimed, Y as unsubscribeCodexAppServerLiveThread, et as wasCodexAppServerThreadClosed, j as getCodexInferenceThread, k as assertCodexInferenceRouteConfig, n as captureCodexAppServerClientLifetime, w as CodexThreadClientReplacementError, z as hasCodexAppServerSiblingThreadWork } from "./shared-client-tOOyadmg.mjs";
22
+ import { C as assertExactSupervisionModelSelection, D as readSupervisionResponseThreadId, O as resolveCodexThreadRolloutPath, d as isCodexAppServerRequestTimeoutError, l as isCodexAppServerOverloadError, p as resolveCodexAppServerClientInstanceId, r as getCodexAppServerClientInstanceId, v as assertCodexThreadAcceptsDirectInput, x as assertCodexThreadStartResponse, y as assertCodexThreadForkResponse } from "./client-CyquSiJ2.mjs";
23
+ import { c as isCodexAppServerUnsafeSubscriptionError, g as hasCodexAppServerSiblingRouteWork, n as CODEX_APP_SERVER_UNSUBSCRIBE_TIMEOUT_MS, o as closeCodexStartupClientBestEffort, p as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError, u as retireUnsafeCodexTurnClientBestEffort } from "./attempt-client-cleanup-93r-CLTi.mjs";
24
+ import { $ as readActiveCodexTurnIdsFromResume, B as loadCodexNativeToolCatalog, C as mergeCodexNativeProjectDocThreadConfig, E as assertCodexNativeHookRelayAllowed, F as attestCodexThreadToolSurface, G as areUserMcpServersFingerprintsCompatible, H as applyCodexNativeSkillIsolation, I as checkCodexThreadAppAvailability, J as fingerprintCodexThreadConfig, K as codexDynamicToolsFingerprint, L as discardUnattestedCodexPluginThread, Q as legacyFingerprintUserMcpServersConfigPatch, R as attestCodexRestrictedToolSurfaceMcpServersDisabled, St as mergeCodexThreadConfigs, T as CodexManagedHooksOnlyError, Tt as buildCodexAppApprovalOverrides, U as resolveCodexNativeSkillIsolation, W as areCodexDynamicToolFingerprintsCompatible, X as fingerprintJsonObject, Y as fingerprintEnvironmentSelection, Z as fingerprintUserMcpServersConfigPatch, _ as resolveCodexAppServerModelProvider, at as shouldRotateCodexGpt56MultiAgentBinding, bt as disableUnlistedCodexApps, c as codexThreadSandboxOrPermissions, d as resolveCodexThreadApprovalsReviewer, et as shouldStartTransientNoToolThread, g as CODEX_NATIVE_PERSONALITY_NONE, h as buildDeveloperInstructions, i as buildCodexRuntimeThreadConfigForRun, it as shouldRotateCodexAppServerBindingForRuntime, l as readCodexInheritedMcpServerNames, lt as isMessageOnlyCodexSourceReply, m as mergeCodexNativeShellEnvironment, mt as buildCodexPluginAppsConfigPatchFromPolicyContext, n as buildCodexRingZeroThreadConfigPatch, nt as isTransientWebSearchRestriction, o as buildThreadResumeParams, p as resolveCodexWebSearchPlan, q as codexLegacyDynamicToolsFingerprint, rt as shouldRecheckRecoverablePluginBinding, s as buildThreadStartParams, t as assertCodexManagedRequirementsDoNotOverrideToolPolicy, u as readCodexManagedRequirementsFingerprint, ut as isSystemAgentOnlyCodexDynamicToolAllowlist, v as resolveCodexAppServerRequestModelSelection, x as joinPresentSections, xt as isCodexPluginThreadBindingStale, y as resolveCodexAppServerThreadModelSelection, yt as buildPluginAppPolicyContext, z as hasCodexNativeToolCatalog } from "./thread-requests-DmkmrGIt.mjs";
25
25
  import { o as resolveCodexSessionBinding, r as hashCodexAppServerBindingFingerprint } from "./session-binding-DGCYAfvD.mjs";
26
- import { a as refreshCodexThreadPolicy, i as assertCodexSupervisionThreadLineage, n as CodexThreadPolicyHandoffError, o as refreshCodexThreadSkillsCatalog, r as assertAdoptedCodexThreadResumeAllowed, t as CodexIncognitoPolicyChangeError } from "./thread-policy-Bf769xTq.mjs";
27
- import { t as resumeCodexAppServerThread } from "./thread-resume-DZbRTxqM.mjs";
28
- import { c as withExclusiveCodexAppServerThread, r as retainCodexAppServerBindingSubscription, t as isSameCodexAppServerThreadOwner } from "./thread-ownership-vY9gRYkw.mjs";
26
+ import { a as refreshCodexThreadPolicy, i as assertCodexSupervisionThreadLineage, n as CodexThreadPolicyHandoffError, o as refreshCodexThreadSkillsCatalog, r as assertAdoptedCodexThreadResumeAllowed, t as CodexIncognitoPolicyChangeError } from "./thread-policy-TTAb-1yF.mjs";
27
+ import { t as resumeCodexAppServerThread } from "./thread-resume-eo3IhOhh.mjs";
28
+ import { c as withExclusiveCodexAppServerThread, r as retainCodexAppServerBindingSubscription, t as isSameCodexAppServerThreadOwner } from "./thread-ownership-DDban_4i.mjs";
29
29
  import "./transcript-mirror-kxmCYsuF.mjs";
30
30
  import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
31
31
  import crypto from "node:crypto";
@@ -1138,8 +1138,19 @@ async function releaseCodexBoundLiveThread(options) {
1138
1138
  const previous = changedClient ? await retainSharedCodexAppServerClientByInstanceId(options.ownerClientId) : void 0;
1139
1139
  if (changedClient && !previous) return false;
1140
1140
  const client = previous?.client ?? options.client;
1141
+ let threadClosed;
1142
+ let stopWatching;
1143
+ if (previous) {
1144
+ threadClosed = new Promise((resolve) => {
1145
+ stopWatching = client.addNotificationHandler((notification) => {
1146
+ const threadId = isJsonObject(notification.params) ? notification.params.threadId : void 0;
1147
+ if (notification.method === "thread/closed" && threadId === options.threadId) resolve();
1148
+ });
1149
+ });
1150
+ if (wasCodexAppServerThreadClosed(client, options.threadId)) threadClosed = Promise.resolve();
1151
+ }
1141
1152
  try {
1142
- if (isCodexAppServerLiveThreadClaimed(client, options.threadId)) throw new Error(`Codex thread ${options.threadId} is claimed by active work; stop it first.`);
1153
+ if (isCodexAppServerLiveThreadClaimed(client, options.threadId) || isCodexAppServerLiveThreadProtected(client, options.threadId)) throw new Error(`Codex thread ${options.threadId} is claimed by active work; stop it first.`);
1143
1154
  return await releaseCodexRetainedLiveThread({
1144
1155
  ...options,
1145
1156
  client,
@@ -1151,7 +1162,12 @@ async function releaseCodexBoundLiveThread(options) {
1151
1162
  } : void 0
1152
1163
  });
1153
1164
  } finally {
1154
- await previous?.release(!isCodexAppServerLiveThreadClaimed(client, options.threadId));
1165
+ try {
1166
+ const retiredExit = previous?.release(!isCodexAppServerLiveThreadClaimed(client, options.threadId) && !isCodexAppServerLiveThreadProtected(client, options.threadId));
1167
+ if (retiredExit) await options.lifecycleTiming.measure("retired-thread-runtime-release", () => threadClosed ? Promise.race([retiredExit, threadClosed]) : retiredExit);
1168
+ } finally {
1169
+ stopWatching?.();
1170
+ }
1155
1171
  }
1156
1172
  }
1157
1173
  /** Reuses one safely owned, fully matching subscription on its original client. */
@@ -1194,6 +1210,29 @@ async function tryReuseCodexLiveThread(options) {
1194
1210
  let ownershipTransferred = false;
1195
1211
  let preserveSubscription = false;
1196
1212
  let nativeThread;
1213
+ const cleanup = async (preserveOwner, ownership = retainedThread) => {
1214
+ let failure;
1215
+ let retainSubscription = preserveOwner;
1216
+ try {
1217
+ if (retainSubscription) try {
1218
+ assertWarmOwner();
1219
+ retainSubscription = isSameCodexAppServerThreadOwner(params.bindingStore.read(bindingIdentity), binding);
1220
+ } catch {
1221
+ retainSubscription = false;
1222
+ }
1223
+ if (retainSubscription) {
1224
+ if (!await retainCodexAppServerBindingSubscription(params.client, binding.threadId, ownership)) failure = { cause: /* @__PURE__ */ new Error("Codex live thread ownership could not be returned to its session") };
1225
+ } else await retainedThread.release(binding.threadId);
1226
+ } catch (cause) {
1227
+ failure = { cause };
1228
+ }
1229
+ if (failure) await abandonCodexLiveThreadRelease({
1230
+ client: params.client,
1231
+ abandonClient: params.abandonClient,
1232
+ lifecycleTiming,
1233
+ threadId: binding.threadId
1234
+ }, failure.cause);
1235
+ };
1197
1236
  try {
1198
1237
  assertWarmOwner();
1199
1238
  if (binding.preserveNativeModel || binding.connectionScope === "supervision") {
@@ -1295,9 +1334,18 @@ async function tryReuseCodexLiveThread(options) {
1295
1334
  threadId: binding.threadId,
1296
1335
  action: "resumed"
1297
1336
  });
1337
+ const liveThreadEphemeralPolicy = ephemeralPolicy && {
1338
+ ...ephemeralPolicy,
1339
+ skillsInstructions: params.skillsInstructions
1340
+ };
1298
1341
  ownershipTransferred = true;
1299
1342
  return {
1300
1343
  kind: "ready",
1344
+ cleanupOnFailure: () => cleanup(isCodexAppServerLiveThreadProtected(params.client, binding.threadId), {
1345
+ ...retainedThread,
1346
+ configFingerprint: liveThreadConfigFingerprint,
1347
+ ephemeralPolicy: liveThreadEphemeralPolicy
1348
+ }),
1301
1349
  binding: {
1302
1350
  ...binding,
1303
1351
  ...!incognito ? {
@@ -1308,38 +1356,14 @@ async function tryReuseCodexLiveThread(options) {
1308
1356
  environmentSelectionFingerprint
1309
1357
  } : {},
1310
1358
  liveThreadConfigFingerprint,
1311
- liveThreadEphemeralPolicy: ephemeralPolicy && {
1312
- ...ephemeralPolicy,
1313
- skillsInstructions: params.skillsInstructions
1314
- },
1359
+ liveThreadEphemeralPolicy,
1315
1360
  liveThreadOwnership: retainedThread,
1316
1361
  ...!incognito && retainedThread.serviceTier && resumeParams.serviceTier === void 0 ? { clearInheritedServiceTier: true } : {},
1317
1362
  lifecycle: { action: "resumed" }
1318
1363
  }
1319
1364
  };
1320
1365
  } finally {
1321
- if (!ownershipTransferred) {
1322
- let failure;
1323
- try {
1324
- if (preserveSubscription) try {
1325
- assertWarmOwner();
1326
- preserveSubscription = isSameCodexAppServerThreadOwner(params.bindingStore.read(bindingIdentity), binding);
1327
- } catch {
1328
- preserveSubscription = false;
1329
- }
1330
- if (preserveSubscription) {
1331
- if (!await retainCodexAppServerBindingSubscription(params.client, binding.threadId, retainedThread)) failure = { cause: /* @__PURE__ */ new Error("Codex live thread ownership could not be returned to its session") };
1332
- } else await retainedThread.release(binding.threadId);
1333
- } catch (cause) {
1334
- failure = { cause };
1335
- }
1336
- if (failure) await abandonCodexLiveThreadRelease({
1337
- client: params.client,
1338
- abandonClient: params.abandonClient,
1339
- lifecycleTiming,
1340
- threadId: binding.threadId
1341
- }, failure.cause);
1342
- }
1366
+ if (!ownershipTransferred) await cleanup(preserveSubscription);
1343
1367
  }
1344
1368
  }
1345
1369
  //#endregion
@@ -1834,7 +1858,8 @@ async function archiveSupervisionArtifact(client, threadId) {
1834
1858
  async function startOrResumeThread(input) {
1835
1859
  const incognito = isIncognitoSessionKey(input.params.sessionKey);
1836
1860
  const clientId = resolveCodexAppServerClientInstanceId(input.client);
1837
- return await withCodexThreadLifecycleBinding(input, async (bindingIdentity, saved, assert) => {
1861
+ let cleanupWarmBinding;
1862
+ const prep = withCodexThreadLifecycleBinding(input, async (bindingIdentity, saved, assert) => {
1838
1863
  const params = {
1839
1864
  ...input,
1840
1865
  assertCurrent: assert
@@ -2134,7 +2159,10 @@ async function startOrResumeThread(input) {
2134
2159
  clientId,
2135
2160
  buildLoadedPluginThreadConfig
2136
2161
  });
2137
- if (warmReuse.kind === "ready") return publishCodexThreadInferenceBinding(params, warmReuse.binding, true);
2162
+ if (warmReuse.kind === "ready") {
2163
+ cleanupWarmBinding = warmReuse.cleanupOnFailure;
2164
+ return publishCodexThreadInferenceBinding(params, warmReuse.binding, true);
2165
+ }
2138
2166
  if (incognito || warmReuse.kind === "rotate") {
2139
2167
  throwIfAborted();
2140
2168
  await clearCurrentBinding(incognito ? "rotating an unavailable ephemeral thread binding" : "rotating a stale plugin app binding");
@@ -2169,6 +2197,16 @@ async function startOrResumeThread(input) {
2169
2197
  if (replacementPredecessor) await releaseRetainedThread(replacementPredecessor.threadId, replacementPredecessor.clientId);
2170
2198
  return publishCodexThreadInferenceBinding(params, started);
2171
2199
  });
2200
+ try {
2201
+ return await prep;
2202
+ } catch (error) {
2203
+ if (cleanupWarmBinding) try {
2204
+ await cleanupWarmBinding();
2205
+ } catch (releaseError) {
2206
+ throw new AggregateError([error, releaseError], "Codex warm thread preparation and subscription cleanup failed", { cause: releaseError });
2207
+ }
2208
+ throw error;
2209
+ }
2172
2210
  }
2173
2211
  //#endregion
2174
2212
  //#region extensions/codex/src/app-server/user-input.ts
@@ -1,7 +1,7 @@
1
- import { l as retainSharedCodexAppServerClientByInstanceId } from "./shared-client-lifecycle-BXJRGNcp.mjs";
1
+ import { l as retainSharedCodexAppServerClientByInstanceId } from "./shared-client-lifecycle-CJ0lYVCW.mjs";
2
2
  import { t as withCodexAppServerThreadMutation } from "./thread-ownership-queue-Dp24d7-F.mjs";
3
- import { G as releaseCodexAppServerLiveThread, K as retainCodexAppServerLiveThread, V as isCodexAppServerLiveThreadClaimed } from "./shared-client-D6n5dvpA.mjs";
4
- import { o as closeCodexStartupClientBestEffort, p as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError } from "./attempt-client-cleanup-_RUXhE5e.mjs";
3
+ import { K as releaseCodexAppServerLiveThread, V as isCodexAppServerLiveThreadClaimed, q as retainCodexAppServerLiveThread } from "./shared-client-tOOyadmg.mjs";
4
+ import { o as closeCodexStartupClientBestEffort, p as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError } from "./attempt-client-cleanup-93r-CLTi.mjs";
5
5
  import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
6
6
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
7
7
  import { runWithAsyncWorkResources } from "openclaw/plugin-sdk/agent-harness-tool-runtime";
@@ -1,6 +1,6 @@
1
- import { r as requestCodexAppServerClientJson, t as CodexAppServerScopedRequestRejectedError } from "./request-D-Vhprx3.mjs";
2
- import { S as CodexAdoptedThreadActiveError } from "./shared-client-D6n5dvpA.mjs";
3
- import { l as isCodexAppServerOverloadError, u as isCodexAppServerPrewriteRequestCancellationError, v as assertCodexThreadAcceptsDirectInput } from "./client-B4EOuI-w.mjs";
1
+ import { r as requestCodexAppServerClientJson, t as CodexAppServerScopedRequestRejectedError } from "./request-DxKAfWyy.mjs";
2
+ import { S as CodexAdoptedThreadActiveError } from "./shared-client-tOOyadmg.mjs";
3
+ import { l as isCodexAppServerOverloadError, u as isCodexAppServerPrewriteRequestCancellationError, v as assertCodexThreadAcceptsDirectInput } from "./client-CyquSiJ2.mjs";
4
4
  import { AgentHarnessPreflightError, embeddedAgentLog, formatErrorMessage } from "openclaw/plugin-sdk/agent-harness-runtime";
5
5
  //#region extensions/codex/src/app-server/thread-policy.ts
6
6
  /** A refusal, not a failed native write: the ephemeral conversation must stay alive. */
@@ -4,17 +4,17 @@ import { u as stringifyCodexPolicy } from "./config-security-CE-FcGw9.mjs";
4
4
  import { f as resolveCodexPluginsPolicy } from "./config-parsing-b088LyhT.mjs";
5
5
  import { n as resolveCodexAppServerLocalHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
6
6
  import { d as readCodexEffectiveConfig, u as CODEX_SESSION_OVERRIDABLE_LAYER_TYPES } from "./config-options-CzyWLTJt.mjs";
7
- import { t as isIncognitoSessionKey } from "./incognito-session-DWYapfwf.mjs";
7
+ import { t as isIncognitoSessionKey } from "./incognito-session-C5ve_-63.mjs";
8
8
  import { a as defaultCodexAppInventoryCache, i as CodexAppInventoryCache, o as serializeCodexAppInventoryError, s as codexAppIdentityKey, t as buildCodexAppServerConnectionFingerprint } from "./plugin-app-cache-key-BL9B5H0L.mjs";
9
9
  import "./config-DKhXquav.mjs";
10
10
  import { t as isCodexAppServerNativeAuthProfile } from "./auth-profile-B0okYl2D.mjs";
11
- import { D as nativeHookRelayUnregisterQueue, W as readCodexClientSessionMeta } from "./shared-client-D6n5dvpA.mjs";
11
+ import { D as nativeHookRelayUnregisterQueue, G as readCodexClientSessionMeta } from "./shared-client-tOOyadmg.mjs";
12
12
  import { a as isCodexResponsesOAuthRun, i as isCodexResponsesOAuthCredential, t as CODEX_RESPONSES_OAUTH_PROVIDER } from "./responses-oauth-twnuTaAa.mjs";
13
- import { B as resolveCodexToolAbortTerminalReason } from "./client-B4EOuI-w.mjs";
14
- import { n as CODEX_APP_SERVER_UNSUBSCRIBE_TIMEOUT_MS, p as unsubscribeCodexThreadBestEffort } from "./attempt-client-cleanup-_RUXhE5e.mjs";
13
+ import { B as resolveCodexToolAbortTerminalReason } from "./client-CyquSiJ2.mjs";
14
+ import { n as CODEX_APP_SERVER_UNSUBSCRIBE_TIMEOUT_MS, p as unsubscribeCodexThreadBestEffort } from "./attempt-client-cleanup-93r-CLTi.mjs";
15
15
  import { t as ensureCodexPluginActivation } from "./plugin-activation-cNHRfaxU.mjs";
16
16
  import { r as hashCodexAppServerBindingFingerprint } from "./session-binding-DGCYAfvD.mjs";
17
- import { t as codexNativeSubagentMonitorRuntime } from "./native-subagent-monitor-BRr7YExU.mjs";
17
+ import { t as codexNativeSubagentMonitorRuntime } from "./native-subagent-monitor-B9aAqfnU.mjs";
18
18
  import { normalizeOptionalString, normalizeUniqueStringEntries, normalizeUniqueTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
19
19
  import * as crypto$1 from "node:crypto";
20
20
  import crypto, { createHash } from "node:crypto";
@@ -1,9 +1,9 @@
1
1
  import { n as CodexAppServerRpcError } from "./rpc-error-BlD2vuzn.mjs";
2
- import { r as publishCodexCatalogResume } from "./session-catalog-events-BNKvbFTA.mjs";
3
- import { t as CodexAppServerScopedRequestRejectedError } from "./request-D-Vhprx3.mjs";
4
- import { L as forgetCodexWorkspaceReferences, ft as isCodexAppServerStartupError, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-D6n5dvpA.mjs";
5
- import { b as assertCodexThreadResumeResponse, l as isCodexAppServerOverloadError, u as isCodexAppServerPrewriteRequestCancellationError } from "./client-B4EOuI-w.mjs";
6
- import { i as assertCodexThreadResumeSubscription, p as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError } from "./attempt-client-cleanup-_RUXhE5e.mjs";
2
+ import { r as publishCodexCatalogResume } from "./session-catalog-events-D9zC7gRb.mjs";
3
+ import { t as CodexAppServerScopedRequestRejectedError } from "./request-DxKAfWyy.mjs";
4
+ import { L as forgetCodexWorkspaceReferences, mt as isCodexAppServerStartupError, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-tOOyadmg.mjs";
5
+ import { b as assertCodexThreadResumeResponse, l as isCodexAppServerOverloadError, u as isCodexAppServerPrewriteRequestCancellationError } from "./client-CyquSiJ2.mjs";
6
+ import { i as assertCodexThreadResumeSubscription, p as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError } from "./attempt-client-cleanup-93r-CLTi.mjs";
7
7
  import { sanitizeTerminalText } from "openclaw/plugin-sdk/text-chunking";
8
8
  //#region extensions/codex/src/app-server/thread-resume.ts
9
9
  /** Owns Codex thread/resume subscription safety. */
@@ -8,19 +8,19 @@ import { r as projectCodexUserItemText } from "./transcript-history-projection-D
8
8
  import { n as codexUpstreamBaseline, t as codexLastTerminalTurnId } from "./session-upstream-marker-D15C9NHp.mjs";
9
9
  import { r as buildCodexPluginAppCacheKey } from "./plugin-app-cache-key-BL9B5H0L.mjs";
10
10
  import { n as readCodexSessionMeta } from "./session-catalog-provenance-DoAvktcj.mjs";
11
- import { t as CodexAppServerScopedRequestRejectedError } from "./request-D-Vhprx3.mjs";
11
+ import { t as CodexAppServerScopedRequestRejectedError } from "./request-DxKAfWyy.mjs";
12
12
  import { r as resolveOpenClawExecPolicyForCodexAppServer } from "./config-DKhXquav.mjs";
13
13
  import { r as resolveCodexSupervisionAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
14
14
  import { a as fingerprintCodexMirrorSourceMessage, c as readCodexMirrorSourceFingerprint } from "./transcript-mirror-attestation-YSegaktH.mjs";
15
- import { P as claimCodexAppServerLiveThread, R as hasCodexAppServerLiveThread, f as readCodexAppServerClientDesktopGenerationFingerprint } from "./shared-client-D6n5dvpA.mjs";
16
- import { l as isCodexAppServerOverloadError, u as isCodexAppServerPrewriteRequestCancellationError, v as assertCodexThreadAcceptsDirectInput, y as assertCodexThreadForkResponse } from "./client-B4EOuI-w.mjs";
17
- import { D as buildCodexNativeHookRelayConfig, E as assertCodexNativeHookRelayAllowed, H as applyCodexNativeSkillIsolation, I as checkCodexThreadAppAvailability, K as codexDynamicToolsFingerprint, M as resolveCodexNativeHookRelayEvents, St as mergeCodexThreadConfigs, U as resolveCodexNativeSkillIsolation, V as parseCodexNativeToolCatalog, X as fingerprintJsonObject, Z as fingerprintUserMcpServersConfigPatch, a as buildCodexThreadConfiguration, h as buildDeveloperInstructions, ht as buildCodexPluginThreadConfig, k as buildCodexNativeHookRelayId, p as resolveCodexWebSearchPlan, wt as shouldBuildCodexPluginThreadConfig } from "./thread-requests-CIyAcDJ3.mjs";
15
+ import { P as claimCodexAppServerLiveThread, R as hasCodexAppServerLiveThread, f as readCodexAppServerClientDesktopGenerationFingerprint } from "./shared-client-tOOyadmg.mjs";
16
+ import { l as isCodexAppServerOverloadError, u as isCodexAppServerPrewriteRequestCancellationError, v as assertCodexThreadAcceptsDirectInput, y as assertCodexThreadForkResponse } from "./client-CyquSiJ2.mjs";
17
+ import { D as buildCodexNativeHookRelayConfig, E as assertCodexNativeHookRelayAllowed, H as applyCodexNativeSkillIsolation, I as checkCodexThreadAppAvailability, K as codexDynamicToolsFingerprint, M as resolveCodexNativeHookRelayEvents, St as mergeCodexThreadConfigs, U as resolveCodexNativeSkillIsolation, V as parseCodexNativeToolCatalog, X as fingerprintJsonObject, Z as fingerprintUserMcpServersConfigPatch, a as buildCodexThreadConfiguration, h as buildDeveloperInstructions, ht as buildCodexPluginThreadConfig, k as buildCodexNativeHookRelayId, p as resolveCodexWebSearchPlan, wt as shouldBuildCodexPluginThreadConfig } from "./thread-requests-DmkmrGIt.mjs";
18
18
  import "./session-binding-DGCYAfvD.mjs";
19
- import { a as refreshCodexThreadPolicy, n as CodexThreadPolicyHandoffError } from "./thread-policy-Bf769xTq.mjs";
20
- import "./thread-ownership-vY9gRYkw.mjs";
19
+ import { a as refreshCodexThreadPolicy, n as CodexThreadPolicyHandoffError } from "./thread-policy-TTAb-1yF.mjs";
20
+ import "./thread-ownership-DDban_4i.mjs";
21
21
  import { n as resolveCodexNativeExecutionPolicy } from "./native-execution-policy-BxZJy5mP.mjs";
22
- import { l as prepareCodexWorkspaceDeveloperInstructions } from "./attempt-workspace-context-CSD2rKPq.mjs";
23
- import { d as isCodexDynamicToolExcluded, n as resolveCodexProviderWebSearchSupportForClient } from "./provider-capabilities-CIWN6WAi.mjs";
22
+ import { l as prepareCodexWorkspaceDeveloperInstructions } from "./attempt-workspace-context-ejEuxrY1.mjs";
23
+ import { d as isCodexDynamicToolExcluded, n as resolveCodexProviderWebSearchSupportForClient } from "./provider-capabilities-ByhBukaD.mjs";
24
24
  import { n as prepareCodexSessionInitialization } from "./session-initialization-6aveB9qb.mjs";
25
25
  import { createImportedCodexSession } from "./session-history-import-WhX-X33a.mjs";
26
26
  import { isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -1,5 +1,5 @@
1
1
  import { t as buildCodexAppServerUsageSnapshot } from "./rate-limits-B7-X2TgG.mjs";
2
- import { n as readCodexAppServerUsage } from "./request-D-Vhprx3.mjs";
2
+ import { n as readCodexAppServerUsage } from "./request-DxKAfWyy.mjs";
3
3
  import "./config-DKhXquav.mjs";
4
4
  import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
5
5
  import { CODEX_APP_SERVER_AUTH_MARKER } from "openclaw/plugin-sdk/agent-runtime";
@@ -1,7 +1,7 @@
1
1
  import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
2
  import { a as shouldRefreshCodexRateLimitsForUsageLimitMessage, i as resolveCodexUsageLimitResetAtMs, n as formatCodexUsageLimitErrorMessage } from "./rate-limits-B7-X2TgG.mjs";
3
3
  import { t as CODEX_CONTROL_METHODS } from "./capabilities-B3WEZl4e.mjs";
4
- import { X as readRecentCodexRateLimits, Y as readCodexRateLimitsRevision, Z as rememberCodexRateLimitsRead } from "./shared-client-D6n5dvpA.mjs";
4
+ import { Q as rememberCodexRateLimitsRead, X as readCodexRateLimitsRevision, Z as readRecentCodexRateLimits } from "./shared-client-tOOyadmg.mjs";
5
5
  import { readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { markAuthProfileBlockedUntil } from "openclaw/plugin-sdk/agent-runtime";
7
7
  import { embeddedAgentLog, formatErrorMessage } from "openclaw/plugin-sdk/agent-harness-runtime";
@@ -1,6 +1,6 @@
1
1
  import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
- import { f as buildCodexNativeWebSearchThreadConfig } from "./thread-requests-CIyAcDJ3.mjs";
3
- import { runBoundedCodexAppServerTurn } from "./bounded-turn-BKSjzckA.mjs";
2
+ import { f as buildCodexNativeWebSearchThreadConfig } from "./thread-requests-DmkmrGIt.mjs";
3
+ import { runBoundedCodexAppServerTurn } from "./bounded-turn-I8Vb-qq3.mjs";
4
4
  import { normalizeOptionalString, normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
5
5
  import { readStringParam, resolveSearchTimeoutSeconds, wrapWebContent } from "openclaw/plugin-sdk/provider-web-search";
6
6
  //#region extensions/codex/src/web-search-provider.runtime.ts
@@ -1,4 +1,4 @@
1
- import { t as createCodexCatalogDecoder } from "./.setup/client-catalog-response-CsnppTTd.mjs";
1
+ import { t as createCodexCatalogDecoder } from "./.setup/client-catalog-response-B9pLl58Y.mjs";
2
2
  import { serveWorkerTasks } from "openclaw/plugin-sdk/worker-task-server";
3
3
  //#region extensions/codex/catalog-page.worker.ts
4
4
  const decode = createCodexCatalogDecoder();
@@ -2,7 +2,7 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
2
2
  //#region extensions/codex/cli-metadata.ts
3
3
  function registerCodexCliMetadata(api) {
4
4
  api.registerCli(async ({ program }) => {
5
- const { registerCodexSessionCli } = await import("./.setup/session-cli-DjWr7ujR.mjs");
5
+ const { registerCodexSessionCli } = await import("./.setup/session-cli-TEVHpWaE.mjs");
6
6
  registerCodexSessionCli(program);
7
7
  }, { descriptors: [{
8
8
  name: "codex",
package/dist/harness.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { CODEX_NATIVE_TOOL_REQUIREMENTS } from "./native-tool-policy.js";
2
2
  import { n as readCodexRuntimeModelId } from "./.setup/model-runtime-BdqzOMkU.mjs";
3
3
  import { v as sessionBindingIdentity } from "./.setup/session-binding-record-Oe9L-CNY.mjs";
4
- import { t as codexBuildSymbol } from "./.setup/build-state-CDQUVDAI.mjs";
4
+ import { t as codexBuildSymbol } from "./.setup/build-state--SrHyc6r.mjs";
5
5
  import { resolvePluginConfigObject } from "openclaw/plugin-sdk/plugin-config-runtime";
6
6
  //#region extensions/codex/harness.ts
7
7
  const DEFAULT_CODEX_HARNESS_PROVIDER_IDS = /* @__PURE__ */ new Set(["codex", "openai"]);
@@ -108,7 +108,7 @@ function createCodexAppServerAgentHarness(options) {
108
108
  executionEnvironment: "host-only",
109
109
  upstreamKinds: ["codex-app-server"],
110
110
  fork: async (params) => {
111
- const { forkCodexUpstreamSession } = await import("./.setup/upstream-session-fork-Ci2-RvEy.mjs");
111
+ const { forkCodexUpstreamSession } = await import("./.setup/upstream-session-fork-BbUNlJPZ.mjs");
112
112
  return await forkCodexUpstreamSession(params, {
113
113
  bindingStore: options.bindingStore,
114
114
  controlFactory: sessionCatalogControlFactory,
@@ -130,18 +130,18 @@ function createCodexAppServerAgentHarness(options) {
130
130
  return validateCodexAppServerRuntimeArtifact(binding, void 0, resolveCodexAppServerRuntimeOptions({ pluginConfig: resolveAttemptPluginConfig(options.resolveConfig?.()) }).start);
131
131
  } },
132
132
  fetchUsageSnapshot: async (ctx) => {
133
- const { fetchCodexAppServerUsageSnapshot } = await import("./.setup/usage-BP3aZPPp.mjs");
133
+ const { fetchCodexAppServerUsageSnapshot } = await import("./.setup/usage-CDiI_zkr.mjs");
134
134
  return await fetchCodexAppServerUsageSnapshot(ctx, { pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig });
135
135
  },
136
136
  loadModelCatalog: async (params) => {
137
- const { createCodexAppServerModelCatalog } = await import("./.setup/model-catalog-BeTX0Aeo.mjs");
137
+ const { createCodexAppServerModelCatalog } = await import("./.setup/model-catalog-qzAfnHzR.mjs");
138
138
  if (disposed) return { entries: [] };
139
139
  modelCatalog ??= createCodexAppServerModelCatalog(harnessRuntimeId);
140
140
  return { entries: await modelCatalog.load(params, resolveAttemptPluginConfig(params.config)) };
141
141
  },
142
142
  readModelCatalogReadiness: (params) => modelCatalog?.read(params, resolveAttemptPluginConfig(params.config)),
143
143
  loadMcpToolCatalog: async (params) => {
144
- const { loadCodexEffectiveMcpCatalog } = await import("./.setup/effective-mcp-catalog-DMrerMF4.mjs");
144
+ const { loadCodexEffectiveMcpCatalog } = await import("./.setup/effective-mcp-catalog-C0DfQNYU.mjs");
145
145
  return await loadCodexEffectiveMcpCatalog(params, { bindingStore: options.bindingStore });
146
146
  },
147
147
  supports: (ctx) => {
@@ -184,7 +184,7 @@ function createCodexAppServerAgentHarness(options) {
184
184
  };
185
185
  },
186
186
  runAttempt: async (params) => {
187
- const { runCodexAppServerAttempt } = await import("./.setup/run-attempt-CKZd8eYZ.mjs");
187
+ const { runCodexAppServerAttempt } = await import("./.setup/run-attempt-BZKhzSrb.mjs");
188
188
  const { planCodexCyberEscalation, readCodexCyberAttemptVerdict, recordCodexCyberTargetUnavailable, reserveCodexCyberProbe, resolveCodexCyberFailoverConfig } = await import("./.setup/cyber-failover-XV0nNRZu.mjs");
189
189
  const { emitCodexCyberNotice } = await import("./.setup/cyber-failover-notice-RNpGpTyP.mjs");
190
190
  const pluginConfig = resolveAttemptPluginConfig(params.config);
@@ -250,7 +250,7 @@ function createCodexAppServerAgentHarness(options) {
250
250
  const { runHostPreparedIsolatedCompletion } = await import("openclaw/plugin-sdk/simple-completion-runtime");
251
251
  return runHostPreparedIsolatedCompletion(params);
252
252
  }
253
- const { runCodexIsolatedCompletion } = await import("./.setup/isolated-completion-D68PsLcF.mjs");
253
+ const { runCodexIsolatedCompletion } = await import("./.setup/isolated-completion-Ci27cKqA.mjs");
254
254
  return runCodexIsolatedCompletion(params, { pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig });
255
255
  },
256
256
  runIsolatedCompletion: async (params) => {
@@ -266,11 +266,11 @@ function createCodexAppServerAgentHarness(options) {
266
266
  });
267
267
  },
268
268
  finalizeSettledTurn: async (params) => {
269
- const { runCodexSettledTurnFinalization } = await import("./.setup/settled-turn-finalizer-DVOvJUSw.mjs");
269
+ const { runCodexSettledTurnFinalization } = await import("./.setup/settled-turn-finalizer-DlPT87wW.mjs");
270
270
  return runCodexSettledTurnFinalization(params, { pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig });
271
271
  },
272
272
  runSideQuestion: async (params) => {
273
- const { runCodexAppServerSideQuestion } = await import("./.setup/side-question-BQTOqCgV.mjs");
273
+ const { runCodexAppServerSideQuestion } = await import("./.setup/side-question-BbnuMFTT.mjs");
274
274
  return runCodexAppServerSideQuestion(params, {
275
275
  bindingStore: options.bindingStore,
276
276
  pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig,
@@ -281,25 +281,25 @@ function createCodexAppServerAgentHarness(options) {
281
281
  },
282
282
  compact: async (params) => {
283
283
  const admittedParams = requireCodexCompactionCapabilities(params);
284
- const { maybeCompactCodexAppServerSession } = await import("./.setup/compact-CXguvBLF.mjs");
284
+ const { maybeCompactCodexAppServerSession } = await import("./.setup/compact-5zzFlH-W.mjs");
285
285
  return maybeCompactCodexAppServerSession(admittedParams, {
286
286
  bindingStore: options.bindingStore,
287
287
  pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig
288
288
  });
289
289
  },
290
290
  withSessionDeletion: async (params, run) => {
291
- const { withCodexAppServerSessionDeletion } = await import("./.setup/session-retirement-CPUSNh9U.mjs");
291
+ const { withCodexAppServerSessionDeletion } = await import("./.setup/session-retirement-CW0ciVbW.mjs");
292
292
  params.assertCurrent();
293
293
  return withCodexAppServerSessionDeletion(options.bindingStore, params, run);
294
294
  },
295
295
  withSessionContextReset: async (params, run) => {
296
- const { withCodexAppServerSessionContextReset } = await import("./.setup/session-retirement-CPUSNh9U.mjs");
296
+ const { withCodexAppServerSessionContextReset } = await import("./.setup/session-retirement-CW0ciVbW.mjs");
297
297
  params.assertCurrent();
298
298
  return withCodexAppServerSessionContextReset(options.bindingStore, params, run);
299
299
  },
300
300
  reset: async (params) => {
301
301
  if (params.sessionId && params.reason !== "deleted") {
302
- const [{ reclaimCurrentCodexSessionGeneration }, { retireCodexAppServerSessionGeneration }] = await Promise.all([import("./.setup/session-binding-DGCYAfvD.mjs").then((n) => n.s), import("./.setup/session-retirement-CPUSNh9U.mjs")]);
302
+ const [{ reclaimCurrentCodexSessionGeneration }, { retireCodexAppServerSessionGeneration }] = await Promise.all([import("./.setup/session-binding-DGCYAfvD.mjs").then((n) => n.s), import("./.setup/session-retirement-CW0ciVbW.mjs")]);
303
303
  const identity = sessionBindingIdentity({
304
304
  agentId: params.agentId,
305
305
  sessionId: params.sessionId,
@@ -332,7 +332,7 @@ function createCodexAppServerAgentHarness(options) {
332
332
  function createCodexAppServerNativeCompaction(options) {
333
333
  return async (params) => {
334
334
  const admittedParams = requireCodexCompactionCapabilities(params);
335
- const { maybeCompactCodexAppServerSession } = await import("./.setup/compact-CXguvBLF.mjs");
335
+ const { maybeCompactCodexAppServerSession } = await import("./.setup/compact-5zzFlH-W.mjs");
336
336
  return maybeCompactCodexAppServerSession(admittedParams, {
337
337
  bindingStore: options.bindingStore,
338
338
  pluginConfig: options.resolvePluginConfig?.() ?? options.pluginConfig,
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { registerCodexCliMetadata } from "./cli-metadata.js";
2
2
  import { j as CODEX_INTERACTIVE_THREAD_SOURCE_KINDS } from "./.setup/session-catalog-parsing-CPGaPYr-.mjs";
3
3
  import { i as isJsonObject } from "./.setup/protocol-CANUwXJ3.mjs";
4
4
  import { f as readCurrentCodexAppServerBinding, h as readCurrentNativePendingAssignments, m as readCurrentCodexNativeSubagentSubmissions, n as assertCodexBindingMayBeReplaced, p as readCurrentCodexAppServerBindings, v as sessionBindingIdentity } from "./.setup/session-binding-record-Oe9L-CNY.mjs";
5
- import { n as defineCodexBuildState } from "./.setup/build-state-CDQUVDAI.mjs";
5
+ import { n as defineCodexBuildState } from "./.setup/build-state--SrHyc6r.mjs";
6
6
  import { createCodexAppServerAgentHarness, createCodexAppServerNativeCompaction } from "./harness.js";
7
7
  import { buildCodexMediaUnderstandingProvider } from "./media-understanding-provider.js";
8
8
  import codexProviderDiscovery from "./provider-discovery.js";
@@ -11,25 +11,25 @@ import { t as assertCodexAppServerConnectionSecurity } from "./.setup/config-sec
11
11
  import { d as readCodexPluginConfig } from "./.setup/config-parsing-b088LyhT.mjs";
12
12
  import { r as createCodexAppServerConfig, t as codexAppServerStartOptionsKey } from "./.setup/config-options-CzyWLTJt.mjs";
13
13
  import { o as setManagedCodexPluginRoot } from "./.setup/managed-binary-B6hQ1UKR.mjs";
14
- import { l as createCodexDesktopGenerationService, s as resolveCodexAppServerFallbackApiKeyCacheKey } from "./.setup/auth-cache-key-gOhcdE_N.mjs";
14
+ import { l as createCodexDesktopGenerationService, s as resolveCodexAppServerFallbackApiKeyCacheKey } from "./.setup/auth-cache-key-Bs_3kRJD.mjs";
15
15
  import { n as CODEX_MANAGED_THREAD_NAMESPACE, r as createCodexManagedThreadStore, t as CODEX_MANAGED_THREAD_MAX_ENTRIES } from "./.setup/managed-thread-store-BMqgThVL.mjs";
16
16
  import { n as CODEX_APP_SERVER_BINDING_NAMESPACE, t as CODEX_APP_SERVER_BINDING_MAX_ENTRIES } from "./.setup/session-binding-meta-B7aEMU7g.mjs";
17
- import { f as retireSharedCodexAppServerClientsBeforeDesktopGeneration } from "./.setup/shared-client-lifecycle-BXJRGNcp.mjs";
17
+ import { f as retireSharedCodexAppServerClientsBeforeDesktopGeneration } from "./.setup/shared-client-lifecycle-CJ0lYVCW.mjs";
18
18
  import { s as createCodexAppServerProcessReaperService } from "./.setup/transport-stdio-CbutOIEh.mjs";
19
19
  import { n as codexNativeProfileRecoveryService } from "./.setup/auth-profile-health-oHizqgye.mjs";
20
20
  import { n as withCodexConversationThreadActivity } from "./.setup/thread-ownership-queue-Dp24d7-F.mjs";
21
21
  import { c as canMutateCodexHost, n as filterCodexMarketplacePlugins, o as CODEX_NATIVE_EXECUTION_AUTH_ERROR, t as discoverCodexMarketplacePlugins } from "./.setup/plugin-marketplace-discovery-D_dV9FXa.mjs";
22
22
  import { o as formatCodexDisplayText } from "./.setup/command-formatters-R3ckE3Co.mjs";
23
23
  import { a as readCodexConversationBindingDataRecord, i as readCodexConversationBindingData, o as resolveCodexDefaultWorkspaceDir } from "./.setup/conversation-binding-data-C746z5Pn.mjs";
24
- import { t as isIncognitoSessionKey } from "./.setup/incognito-session-DWYapfwf.mjs";
25
- import { t as buildCodexMigrationProvider } from "./.setup/provider-D0GD39BJ.mjs";
24
+ import { t as isIncognitoSessionKey } from "./.setup/incognito-session-C5ve_-63.mjs";
25
+ import { t as buildCodexMigrationProvider } from "./.setup/provider-Cnr_icbk.mjs";
26
26
  import { t as CODEX_CONTROL_METHODS } from "./.setup/capabilities-B3WEZl4e.mjs";
27
27
  import { t as assertCodexArchiveDescendantsUnowned } from "./.setup/thread-archive-guard-C9frICzX.mjs";
28
28
  import { a as createCodexCliSessionNodeInvokePolicies, c as resolveCodexCliSessionForBindingOnNode, i as createCodexCliSessionNodeHostCommands, l as resumeCodexCliSessionOnNode, s as listCodexCliSessionsOnNode } from "./.setup/node-cli-sessions-HC4W6FLI.mjs";
29
29
  import { t as CODEX_CATALOG_MAX_ROWS } from "./.setup/session-catalog-limits-DDxOsQeC.mjs";
30
30
  import { t as CODEX_CATALOG_STATE_NAMESPACE } from "./.setup/session-catalog-index-state-TeO7EyO-.mjs";
31
- import { i as createCodexSessionCatalogNodeHostCommands, n as createCodexSessionCatalogNodeInvokePolicies, r as createCodexSessionCatalogControl, t as codexSessionCatalogRuntime } from "./.setup/session-catalog-C7GPE6q8.mjs";
32
- import { i as requestCodexAppServerJson } from "./.setup/request-D-Vhprx3.mjs";
31
+ import { i as createCodexSessionCatalogNodeHostCommands, n as createCodexSessionCatalogNodeInvokePolicies, r as createCodexSessionCatalogControl, t as codexSessionCatalogRuntime } from "./.setup/session-catalog-BaVqm4-Q.mjs";
32
+ import { i as requestCodexAppServerJson } from "./.setup/request-DxKAfWyy.mjs";
33
33
  import { t as createCodexWebSearchProviderBase } from "./.setup/web-search-provider.shared-BrZmlqyR.mjs";
34
34
  import { normalizePluginsConfig, resolveEffectiveEnableState, resolveLivePluginConfigObject, resolvePluginConfigObject } from "openclaw/plugin-sdk/plugin-config-runtime";
35
35
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
@@ -46,7 +46,7 @@ import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
46
46
  //#region extensions/codex/src/account-usage.ts
47
47
  function registerCodexAccountUsage(api) {
48
48
  api.registerGatewayMethod("codex.accountUsage", async (options) => {
49
- const { handleCodexAccountUsage } = await import("./.setup/account-usage-runtime-9B-ABnCR.mjs");
49
+ const { handleCodexAccountUsage } = await import("./.setup/account-usage-runtime-CD8HYWaz.mjs");
50
50
  await handleCodexAccountUsage(options);
51
51
  }, { scope: "operator.admin" });
52
52
  }
@@ -74,8 +74,8 @@ function createCodexAppServerConnectionHealthService(options) {
74
74
  return;
75
75
  }
76
76
  if (runtime.start.transport !== "websocket") return;
77
- const { getLeasedSharedCodexAppServerClient, releaseLeasedSharedCodexAppServerClient } = await import("./.setup/shared-client-D6n5dvpA.mjs").then((n) => n.v);
78
- const { isUnsupportedCodexAppServerVersionError } = await import("./.setup/client-B4EOuI-w.mjs").then((n) => n.n);
77
+ const { getLeasedSharedCodexAppServerClient, releaseLeasedSharedCodexAppServerClient } = await import("./.setup/shared-client-tOOyadmg.mjs").then((n) => n.v);
78
+ const { isUnsupportedCodexAppServerVersionError } = await import("./.setup/client-CyquSiJ2.mjs").then((n) => n.n);
79
79
  if (signal.aborted) return;
80
80
  let leasedClient;
81
81
  try {
@@ -226,7 +226,7 @@ function createCodexCommand(options) {
226
226
  ...ctx,
227
227
  gatewayClientScopes: ctx.gatewayClientScopes?.slice()
228
228
  };
229
- const { handleCodexCommand } = await import("./.setup/command-dispatch-DHjWG2Ll.mjs");
229
+ const { handleCodexCommand } = await import("./.setup/command-dispatch-BPLz7tlx.mjs");
230
230
  return handleCodexCommand(commandContext, options);
231
231
  }
232
232
  };
@@ -304,7 +304,7 @@ async function handleCodexConversationInboundClaim(event, ctx, options) {
304
304
  });
305
305
  if (nativeExecutionBlock) return { reply: { text: nativeExecutionBlock } };
306
306
  const { getSessionBindingService } = await import("openclaw/plugin-sdk/conversation-binding-runtime");
307
- const { runBoundTurnWithMissingThreadRecovery } = await import("./.setup/conversation-binding-BDlmcqm3.mjs");
307
+ const { runBoundTurnWithMissingThreadRecovery } = await import("./.setup/conversation-binding-C-0jWdSo.mjs");
308
308
  const current = options.bindingStore.read(identity);
309
309
  if (!isCurrentPublicBinding(publicBinding, getSessionBindingService()) || expected && (!current || current.threadId !== expected.threadId || current.conversationStartId !== expected.conversationStartId) || !expected && current && data.start?.id && current.conversationStartId !== data.start.id) return { reply: { text: "This Codex conversation was detached or changed before its message could run." } };
310
310
  return await runBoundTurnWithMissingThreadRecovery({
@@ -338,7 +338,7 @@ async function handleCodexConversationBindingResolved(event, options) {
338
338
  const binding = options.bindingStore.read(identity);
339
339
  assertCodexBindingMayBeReplaced(binding, "clearing a denied conversation binding");
340
340
  if (binding && (!data.start?.id || binding.conversationStartId === data.start.id)) await withCodexConversationThreadActivity(identity.bindingId, async () => {
341
- const { retireCodexConversationThreadBinding } = await import("./.setup/thread-ownership-vY9gRYkw.mjs").then((n) => n.o);
341
+ const { retireCodexConversationThreadBinding } = await import("./.setup/thread-ownership-DDban_4i.mjs").then((n) => n.o);
342
342
  return retireCodexConversationThreadBinding({
343
343
  bindingStore: options.bindingStore,
344
344
  identity,
@@ -390,7 +390,7 @@ function createCodexPluginsTool(options) {
390
390
  if (runtimeConfig() !== config || !isDeepStrictEqual(options.getPluginConfig(), pluginConfig) || !isDeepStrictEqual(codexBindingConnectionSelection(readBinding()), selection)) throw new Error("Codex plugin discovery ownership changed; retry the request.");
391
391
  };
392
392
  const workspaceDir = binding?.cwd?.trim() || options.context.workspaceDir?.trim() || resolveCodexDefaultWorkspaceDir(pluginConfig);
393
- const request = options.request ?? (await import("./.setup/command-rpc-CKsxWgF6.mjs").then((n) => n.n)).codexControlRequest;
393
+ const request = options.request ?? (await import("./.setup/command-rpc-BDfCWgc_.mjs").then((n) => n.n)).codexControlRequest;
394
394
  const connection = await resolveCodexBindingAppServerConnection({
395
395
  binding,
396
396
  pluginConfig,
@@ -567,7 +567,7 @@ function createCodexThreadsTool(options) {
567
567
  const mayReadRawTranscripts = supervision?.enabled !== true || supervision.allowRawTranscripts === true;
568
568
  if ((action === "fork" || action === "rename" || action === "archive" || action === "unarchive") && supervision?.enabled === true && supervision.allowWriteControls !== true) throw new Error("Codex native thread mutations are disabled for this codex plugin supervision config.");
569
569
  const run = async (archiveAdmission) => {
570
- const request = options.request ?? (await import("./.setup/command-rpc-CKsxWgF6.mjs").then((n) => n.n)).codexControlRequest;
570
+ const request = options.request ?? (await import("./.setup/command-rpc-BDfCWgc_.mjs").then((n) => n.n)).codexControlRequest;
571
571
  const { isModelSelectionLocked, ModelSelectionLockedError } = await import("openclaw/plugin-sdk/model-session-runtime");
572
572
  const { codexBindingConnectionSelection, resolveCodexBindingAppServerConnection } = await import("./.setup/binding-connection-DTtN1KrX.mjs").then((n) => n.n);
573
573
  const { resolveCodexSupervisionAppServerRuntimeOptions } = await import("./.setup/config-runtime-C0NbLms1.mjs").then((n) => n.t);
@@ -699,8 +699,8 @@ function createCodexThreadsTool(options) {
699
699
  const usesSupervisionConnection = binding?.connectionScope === "supervision" || admissionPlugin.appServer?.homeScope !== "user" && supervision?.enabled === true;
700
700
  if (attach && usesSupervisionConnection) throw new Error("Supervised Codex forks must stay detached; set attach=false.");
701
701
  const forkOptions = await requestOptions();
702
- const { retainCodexAppServerBindingSubscription, rollbackCodexAppServerBindingSubscription } = await import("./.setup/thread-ownership-vY9gRYkw.mjs").then((n) => n.o);
703
- const { closeCodexStartupClientBestEffort } = await import("./.setup/attempt-client-cleanup-_RUXhE5e.mjs").then((n) => n.a);
702
+ const { retainCodexAppServerBindingSubscription, rollbackCodexAppServerBindingSubscription } = await import("./.setup/thread-ownership-DDban_4i.mjs").then((n) => n.o);
703
+ const { closeCodexStartupClientBestEffort } = await import("./.setup/attempt-client-cleanup-93r-CLTi.mjs").then((n) => n.a);
704
704
  if (attach) {
705
705
  assertCodexBindingMayBeReplaced(binding, "attaching a different native fork");
706
706
  assertThreadIdle(await request(admissionConfig, CODEX_CONTROL_METHODS.readThread, {
@@ -1660,7 +1660,7 @@ function createCodexSupervisionTools(options) {
1660
1660
  }
1661
1661
  //#endregion
1662
1662
  //#region extensions/codex/src/web-search-provider.ts
1663
- const loadCodexWebSearchRuntime = createLazyRuntimeModule(() => import("./.setup/web-search-provider.runtime-mvv6G9ul.mjs"));
1663
+ const loadCodexWebSearchRuntime = createLazyRuntimeModule(() => import("./.setup/web-search-provider.runtime-B_E2kpZN.mjs"));
1664
1664
  const CodexWebSearchSchema = {
1665
1665
  type: "object",
1666
1666
  properties: { query: {
@@ -1925,7 +1925,7 @@ var codex_default = definePluginEntry({
1925
1925
  if (endedSessionKey && nextSessionKey && nextSessionKey !== endedSessionKey) return;
1926
1926
  if (event.nextSessionId?.trim() === event.sessionId.trim()) return;
1927
1927
  const config = resolveCurrentConfig();
1928
- const [{ sessionBindingIdentity }, { retireCodexAppServerSessionGeneration }] = await Promise.all([import("./.setup/session-binding-DGCYAfvD.mjs").then((n) => n.s), import("./.setup/session-retirement-CPUSNh9U.mjs")]);
1928
+ const [{ sessionBindingIdentity }, { retireCodexAppServerSessionGeneration }] = await Promise.all([import("./.setup/session-binding-DGCYAfvD.mjs").then((n) => n.s), import("./.setup/session-retirement-CW0ciVbW.mjs")]);
1929
1929
  await retireCodexAppServerSessionGeneration({
1930
1930
  bindingStore,
1931
1931
  identity: sessionBindingIdentity({