@openclaw/codex 2026.8.1 → 2026.8.2

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 (54) hide show
  1. package/dist/api.js +2 -2
  2. package/dist/{attempt-client-cleanup-CVPvp9dL.js → attempt-client-cleanup-CpVfwctT.js} +1 -1
  3. package/dist/{binding-connection-CCQFs8lf.js → binding-connection-CF7BmrDk.js} +2 -2
  4. package/dist/{bounded-turn-rq5tiSXk.js → bounded-turn-DRC3hcjm.js} +10 -9
  5. package/dist/{capabilities-CGm_94eL.js → capabilities-D6m_TdVy.js} +1 -1
  6. package/dist/cli-metadata.js +1 -1
  7. package/dist/{command-formatters-C54Yg3eA.js → command-formatters--UToCokS.js} +4 -3
  8. package/dist/{command-handlers-BvOAHTrA.js → command-handlers-CLFx2Ypa.js} +41 -33
  9. package/dist/{compact-Hd7SAc0N.js → compact-5xqW1oCh.js} +13 -11
  10. package/dist/{config-Cxw3Cl3k.js → config-CcYL77O6.js} +6 -4
  11. package/dist/{conversation-binding-data-CW2GuupV.js → conversation-binding-data-BiodpIzq.js} +2 -1
  12. package/dist/doctor-contract-api.js +8 -4
  13. package/dist/{dynamic-tools-BFoUcRdx.js → dynamic-tools-BmeXjwNZ.js} +103 -106
  14. package/dist/{effective-mcp-catalog-BTJHnDSx.js → effective-mcp-catalog-XXQKgK1U.js} +2 -2
  15. package/dist/{event-projector-usage-D3PHFFXh.js → event-projector-usage-B2r5vhWH.js} +7 -12
  16. package/dist/{harness-DVfUQBlQ.js → harness-BgeB7LnD.js} +13 -13
  17. package/dist/harness.js +1 -1
  18. package/dist/index.js +56 -37
  19. package/dist/{isolated-completion-Cbbx_5Ed.js → isolated-completion-CxTus3vZ.js} +3 -3
  20. package/dist/media-understanding-provider.js +1 -1
  21. package/dist/{model-catalog-o6Cgjoss.js → model-catalog-DULBcniB.js} +5 -5
  22. package/dist/{models-DgFWSuxA.js → models-DaWfETQk.js} +4 -3
  23. package/dist/{native-subagent-monitor-CwFyoylz.js → native-subagent-monitor-vXYUZH37.js} +24 -104
  24. package/dist/{node-exec-server.runtime-DXrqpw1c.js → node-exec-server.runtime-DirKVZ5h.js} +2 -2
  25. package/dist/{plugin-approval-roundtrip-D80UZiJ_.js → plugin-approval-roundtrip-CCWQGlAI.js} +2 -1
  26. package/dist/{plugin-marketplace-discovery-mdmScYOj.js → plugin-marketplace-discovery-BXjIFEiw.js} +14 -13
  27. package/dist/{plugin-metadata-cache-CulOABwu.js → plugin-metadata-cache-DQQm4gWT.js} +5 -5
  28. package/dist/{rate-limits-hFtzt2Up.js → rate-limits-BqHEHXQJ.js} +3 -2
  29. package/dist/{request-CCm4LaED.js → request-BWxweEdK.js} +2 -2
  30. package/dist/{run-attempt-BwNQDH2u.js → run-attempt-BVLE4Gbi.js} +133 -182
  31. package/dist/{runtime-artifact-DeBvleJw.js → runtime-artifact-D9pYp4zL.js} +3 -3
  32. package/dist/{session-binding-q2WSTVmC.js → session-binding-D0zinCP1.js} +1 -1
  33. package/dist/{session-catalog-C2Tae4rI.js → session-catalog-eMhVm0Ql.js} +232 -204
  34. package/dist/{session-catalog-home-id-DAKUrm3C.js → session-catalog-home-id-Dt2GiG5o.js} +3 -3
  35. package/dist/{session-cli-BuDjm5Ou.js → session-cli-B2lyjJA0.js} +1 -1
  36. package/dist/session-history-C5J1AKzG.js +87 -0
  37. package/dist/{session-permission-policy-gLm40Vtq.js → session-permission-policy-ScnAyG90.js} +1 -1
  38. package/dist/{session-retirement-CdkI0bvb.js → session-retirement-CtUtUTr9.js} +4 -4
  39. package/dist/{session-upstream-marker-Bcy33kam.js → session-upstream-marker-gqrYIRHk.js} +1 -1
  40. package/dist/settled-turn-context-Bk3IUwod.js +290 -0
  41. package/dist/settled-turn-finalizer-BXLN9PfJ.js +104 -0
  42. package/dist/{shared-client-kNkljY-R.js → shared-client-B1tT5U6r.js} +33 -35
  43. package/dist/{side-question-GwD73tX6.js → side-question-CZ-mCw-t.js} +18 -15
  44. package/dist/{thread-lifecycle-Ss-uwnC4.js → thread-lifecycle-CGGKP720.js} +206 -163
  45. package/dist/{thread-ownership-CeYBqg_4.js → thread-ownership-RkaoZCmQ.js} +2 -2
  46. package/dist/{thread-resume-DF54hagX.js → thread-resume-BFt1-ZDa.js} +7 -6
  47. package/dist/{transcript-mirror-CkEQIna-.js → transcript-mirror-1ep4XjzF.js} +14 -7
  48. package/dist/{transport-stdio-C7-s9TLG.js → transport-stdio-NT_Dpd9V.js} +40 -24
  49. package/dist/{upstream-prompt-provenance-CFmsKwr9.js → upstream-prompt-provenance-LphB8slG.js} +8 -4
  50. package/dist/{upstream-session-fork-BACGlOFa.js → upstream-session-fork-Dc8BFExw.js} +13 -19
  51. package/dist/{usage-C2l8Mils.js → usage-DUhd58gI.js} +3 -3
  52. package/dist/{web-search-provider.runtime-B2XgRdFv.js → web-search-provider.runtime-BEmlE7ov.js} +3 -3
  53. package/package.json +5 -5
  54. package/dist/settled-turn-finalizer-B8JJcxCi.js +0 -329
package/dist/api.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as resolveCodexAppServerStartOptionsForAgent, i as resolveCodexAppServerRuntimeOptions } from "./config-Cxw3Cl3k.js";
1
+ import { a as resolveCodexAppServerStartOptionsForAgent, i as resolveCodexAppServerRuntimeOptions } from "./config-CcYL77O6.js";
2
2
  import { a as CODEX_APP_SERVER_VERSION, n as resolveManagedCodexAppServerStartOptions, r as resolveManagedCodexNativeCommand, t as isManagedCodexDesktopCommand } from "./managed-binary-ZkGodW19.js";
3
3
  import path from "node:path";
4
4
  import { resolveDefaultModelForAgent } from "openclaw/plugin-sdk/agent-runtime";
@@ -9,7 +9,7 @@ import { resolveEffectiveAgentRuntime } from "openclaw/plugin-sdk/command-auth-n
9
9
  //#region extensions/codex/src/doctor.ts
10
10
  const CODEX_MANAGED_APP_SERVER_CHECK_ID = "codex/managed-app-server";
11
11
  const CODEX_VERSION_TIMEOUT_MS = 5e3;
12
- const CODEX_VERSION_MAX_BUFFER_BYTES = 64 * 1024;
12
+ const CODEX_VERSION_MAX_BUFFER_BYTES = 65536;
13
13
  function managedCodexFinding(params) {
14
14
  return {
15
15
  checkId: CODEX_MANAGED_APP_SERVER_CHECK_ID,
@@ -1,4 +1,4 @@
1
- import { $ as CodexAppServerRpcError, Ht as isJsonObject, wt as unsubscribeCodexAppServerLiveThread, y as retireSharedCodexAppServerClientIfCurrent } from "./shared-client-kNkljY-R.js";
1
+ import { $ as CodexAppServerRpcError, Ht as isJsonObject, wt as unsubscribeCodexAppServerLiveThread, y as retireSharedCodexAppServerClientIfCurrent } from "./shared-client-B1tT5U6r.js";
2
2
  import { asFiniteNumber, normalizeOptionalString, normalizeOptionalString as normalizeOptionalString$1, readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
4
4
  import { embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-runtime";
@@ -1,5 +1,5 @@
1
- import { T as readCodexPluginConfig, i as resolveCodexAppServerRuntimeOptions, s as resolveCodexSupervisionAppServerRuntimeOptions } from "./config-Cxw3Cl3k.js";
2
- import { n as buildCodexAppServerConnectionFingerprint, o as resolveCodexCatalogConnectionHome } from "./thread-resume-DF54hagX.js";
1
+ import { T as readCodexPluginConfig, i as resolveCodexAppServerRuntimeOptions, s as resolveCodexSupervisionAppServerRuntimeOptions } from "./config-CcYL77O6.js";
2
+ import { n as buildCodexAppServerConnectionFingerprint, o as resolveCodexCatalogConnectionHome } from "./thread-resume-BFt1-ZDa.js";
3
3
  //#region extensions/codex/src/app-server/binding-connection.ts
4
4
  /** Requires the native model pair after a supervised pending branch has materialized. */
5
5
  function requireCodexSupervisionModelSelection(binding) {
@@ -1,11 +1,11 @@
1
1
  import { n as readCodexAppServerConfigOptions } from "./launch-args-sXOAg0SX.js";
2
- import { i as resolveCodexAppServerRuntimeOptions } from "./config-Cxw3Cl3k.js";
3
- import { Ht as isJsonObject, et as createCodexElicitationResponse, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-kNkljY-R.js";
2
+ import { i as resolveCodexAppServerRuntimeOptions } from "./config-CcYL77O6.js";
3
+ import { Ht as isJsonObject, et as createCodexElicitationResponse, u as isCodexAppServerStartSelectionChangedError } from "./shared-client-B1tT5U6r.js";
4
4
  import { c as assertCodexTurnStartResponse, f as readCodexTurnCompletedNotification, s as assertCodexThreadStartResponse, u as readCodexErrorNotification } from "./protocol-validators-Bg5rpNxk.js";
5
- import { a as closeCodexStartupClientBestEffort, o as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS, v as readCodexNotificationTurnId } from "./attempt-client-cleanup-CVPvp9dL.js";
6
- import { b as isTerminalTurnStatus, n as normalizeCodexResponseTokenUsage, x as readCodexNotificationItem, y as isRetryableErrorNotification } from "./event-projector-usage-D3PHFFXh.js";
7
- import { r as readModelListResult } from "./models-DgFWSuxA.js";
8
- import { _ as buildCodexRingZeroThreadConfigPatch, g as attestCodexRestrictedToolSurfaceMcpServersDisabled, h as assertCodexManagedRequirementsDoNotOverrideToolPolicy, ot as mergeCodexThreadConfigs, v as buildCodexRuntimeThreadConfig, y as readCodexInheritedMcpServerNames } from "./thread-lifecycle-Ss-uwnC4.js";
5
+ import { a as closeCodexStartupClientBestEffort, o as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS, v as readCodexNotificationTurnId } from "./attempt-client-cleanup-CpVfwctT.js";
6
+ import { b as isTerminalTurnStatus, n as normalizeCodexResponseTokenUsage, x as readCodexNotificationItem, y as isRetryableErrorNotification } from "./event-projector-usage-B2r5vhWH.js";
7
+ import { r as readModelListResult } from "./models-DaWfETQk.js";
8
+ import { _ as buildCodexRingZeroThreadConfigPatch, g as attestCodexRestrictedToolSurfaceMcpServersDisabled, h as assertCodexManagedRequirementsDoNotOverrideToolPolicy, ot as mergeCodexThreadConfigs, v as buildCodexRuntimeThreadConfig, y as readCodexInheritedMcpServerNames } from "./thread-lifecycle-CGGKP720.js";
9
9
  import { readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
10
10
  import fs from "node:fs/promises";
11
11
  import path from "node:path";
@@ -77,7 +77,7 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
77
77
  config: params.config,
78
78
  timeoutMs,
79
79
  ...params.signal ? { abandonSignal: params.signal } : {}
80
- }) : await import("./shared-client-kNkljY-R.js").then((n) => n.x).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
80
+ }) : await import("./shared-client-B1tT5U6r.js").then((n) => n.x).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
81
81
  startOptions,
82
82
  timeoutMs,
83
83
  ...authSelection,
@@ -241,14 +241,15 @@ function createCodexBoundedApprovalHandler(taskLabel) {
241
241
  };
242
242
  }
243
243
  async function resolveCodexBoundedTurnModel(params) {
244
- const listed = readModelListResult(await params.client.request("model/list", {
244
+ const result = await params.client.request("model/list", {
245
245
  limit: null,
246
246
  cursor: null,
247
247
  includeHidden: params.selection.mode === "required"
248
248
  }, {
249
249
  timeoutMs: Math.min(params.timeoutMs, 5e3),
250
250
  signal: params.signal
251
- })).models;
251
+ });
252
+ const listed = readModelListResult(result).models;
252
253
  if (params.selection.mode === "live-default") {
253
254
  const supported = listed.filter((entry) => params.requiredModalities.every((modality) => entry.inputModalities.includes(modality)));
254
255
  const selected = supported.find((entry) => entry.isDefault) ?? supported[0];
@@ -1,4 +1,4 @@
1
- import { $ as CodexAppServerRpcError } from "./shared-client-kNkljY-R.js";
1
+ import { $ as CodexAppServerRpcError } from "./shared-client-B1tT5U6r.js";
2
2
  //#region extensions/codex/src/app-server/capabilities.ts
3
3
  /**
4
4
  * Capability helpers for optional Codex app-server control-plane methods.
@@ -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("./session-cli-BuDjm5Ou.js");
5
+ const { registerCodexSessionCli } = await import("./session-cli-B2lyjJA0.js");
6
6
  registerCodexSessionCli(program);
7
7
  }, { descriptors: [{
8
8
  name: "codex",
@@ -1,5 +1,5 @@
1
- import { Ht as isJsonObject } from "./shared-client-kNkljY-R.js";
2
- import { c as summarizeCodexRateLimits, o as summarizeCodexAccountRateLimits, r as hasCodexRateLimitSnapshots } from "./rate-limits-hFtzt2Up.js";
1
+ import { Ht as isJsonObject } from "./shared-client-B1tT5U6r.js";
2
+ import { c as summarizeCodexRateLimits, o as summarizeCodexAccountRateLimits, r as hasCodexRateLimitSnapshots } from "./rate-limits-BqHEHXQJ.js";
3
3
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
4
4
  //#region extensions/codex/src/command-formatters.ts
5
5
  /**
@@ -118,7 +118,8 @@ function formatSkills(response) {
118
118
  return lines.join("\n");
119
119
  }
120
120
  function formatCodexSkillEntry(entry) {
121
- return `\`${formatCodexDisplayText(normalizeOptionalString((isJsonObject(entry) ? entry : {}).name) ?? "<unknown>")}\``;
121
+ const record = isJsonObject(entry) ? entry : {};
122
+ return `\`${formatCodexDisplayText(normalizeOptionalString(record.name) ?? "<unknown>")}\``;
122
123
  }
123
124
  const CODEX_RESUME_SAFE_THREAD_ID_PATTERN = /^[A-Za-z0-9._:-]+$/;
124
125
  function formatCodexResumeHint(threadId) {
@@ -1,21 +1,21 @@
1
- import { i as resolveCodexAppServerRuntimeOptions, j as CODEX_PLUGINS_MARKETPLACE_NAME, k as isCodexFastServiceTier } from "./config-Cxw3Cl3k.js";
2
- import { Ft as resolveCodexAppServerFallbackApiKeyCacheKey, Ht as isJsonObject, Nt as resolveCodexAppServerAuthProfileIdForAgent, c as getLeasedSharedCodexAppServerClient, gt as consumeCodexAppServerLiveThread, h as releaseLeasedSharedCodexAppServerClient, jt as resolveCodexAppServerAuthAccountCacheKey, vt as hasCodexAppServerLiveThread } from "./shared-client-kNkljY-R.js";
3
- import { c as reclaimCurrentCodexSessionGeneration, d as sessionBindingIdentity, i as createCodexSessionGenerationSupersededError, n as assertCodexBindingMayBeReplaced, r as bindingStoreKey, s as normalizeCodexAppServerBindingModelProvider } from "./session-binding-q2WSTVmC.js";
1
+ import { i as resolveCodexAppServerRuntimeOptions, j as CODEX_PLUGINS_MARKETPLACE_NAME, k as isCodexFastServiceTier } from "./config-CcYL77O6.js";
2
+ import { Ft as resolveCodexAppServerFallbackApiKeyCacheKey, Ht as isJsonObject, Nt as resolveCodexAppServerAuthProfileIdForAgent, c as getLeasedSharedCodexAppServerClient, gt as consumeCodexAppServerLiveThread, h as releaseLeasedSharedCodexAppServerClient, jt as resolveCodexAppServerAuthAccountCacheKey, vt as hasCodexAppServerLiveThread } from "./shared-client-B1tT5U6r.js";
3
+ import { c as reclaimCurrentCodexSessionGeneration, d as sessionBindingIdentity, i as createCodexSessionGenerationSupersededError, n as assertCodexBindingMayBeReplaced, r as bindingStoreKey, s as normalizeCodexAppServerBindingModelProvider } from "./session-binding-D0zinCP1.js";
4
4
  import { o as assertCodexThreadResumeResponse, r as assertCodexThreadAcceptsDirectInput } from "./protocol-validators-Bg5rpNxk.js";
5
- import { a as closeCodexStartupClientBestEffort } from "./attempt-client-cleanup-CVPvp9dL.js";
6
- import { t as listAllCodexAppServerModels } from "./models-DgFWSuxA.js";
7
- import { i as buildCodexPluginAppCacheKey, s as defaultCodexAppInventoryCache } from "./thread-resume-DF54hagX.js";
8
- import { dt as isOpenAiCuratedMarketplaceName, lt as refreshCodexPluginRuntimeState } from "./thread-lifecycle-Ss-uwnC4.js";
9
- import { a as rollbackCodexAppServerBindingSubscription, c as withExclusiveCodexAppServerThread, i as retireCodexConversationThreadBinding, l as isIncognitoSessionKey, n as releaseCodexAppServerBindingSubscription, r as retainCodexAppServerBindingSubscription, s as withCodexConversationThreadActivity, t as isSameCodexAppServerThreadOwner } from "./thread-ownership-CeYBqg_4.js";
10
- import { c as resolveCodexNativeSandboxBlock, s as resolveCodexNativeExecutionBlock } from "./request-CCm4LaED.js";
11
- import { t as CODEX_CONTROL_METHODS } from "./capabilities-CGm_94eL.js";
12
- import { s as summarizeCodexAccountUsage } from "./rate-limits-hFtzt2Up.js";
13
- import { a as formatComputerUseStatus, c as formatSkills, i as formatCodexStatus, l as formatThreads, n as formatAccount, o as formatList, r as formatCodexDisplayText, s as formatModels, t as buildHelp } from "./command-formatters-C54Yg3eA.js";
14
- import { _ as hasCodexAdminScope, a as parseCodexPermissionsModeArg, c as setCodexConversationModel, d as stopCodexConversationTurn, g as canMutateCodexHost, h as CODEX_NATIVE_EXECUTION_AUTH_ERROR, i as parseCodexFastModeArg, l as setCodexConversationPermissions, m as CODEX_HOST_INSPECTION_AUTH_ERROR, n as parseCodexPluginMarketplaceId, o as readCodexConversationActiveTurn, p as CODEX_FULL_PERMISSIONS_AUTH_ERROR, r as formatPermissionsMode, s as setCodexConversationFastMode, t as discoverCodexMarketplacePlugins, u as steerCodexConversationTurn } from "./plugin-marketplace-discovery-mdmScYOj.js";
15
- import { i as readCodexConversationBindingData, n as createCodexCliNodeConversationBindingData, o as resolveCodexDefaultWorkspaceDir, r as createCodexConversationBindingData } from "./conversation-binding-data-CW2GuupV.js";
16
- import { n as resolveCodexBindingAppServerConnection } from "./binding-connection-CCQFs8lf.js";
17
- import { c as readCodexStatusProbes, l as requestOptions, p as formatCodexCliSessions, s as codexControlRequest, u as safeCodexControlRequest } from "./session-catalog-C2Tae4rI.js";
18
- import { i as readCodexComputerUseStatus, r as installCodexComputerUse, t as defaultCodexPluginMetadataCache } from "./plugin-metadata-cache-CulOABwu.js";
5
+ import { a as closeCodexStartupClientBestEffort } from "./attempt-client-cleanup-CpVfwctT.js";
6
+ import { t as listAllCodexAppServerModels } from "./models-DaWfETQk.js";
7
+ import { i as buildCodexPluginAppCacheKey, s as defaultCodexAppInventoryCache } from "./thread-resume-BFt1-ZDa.js";
8
+ import { dt as isOpenAiCuratedMarketplaceName, lt as refreshCodexPluginRuntimeState } from "./thread-lifecycle-CGGKP720.js";
9
+ import { a as rollbackCodexAppServerBindingSubscription, c as withExclusiveCodexAppServerThread, i as retireCodexConversationThreadBinding, l as isIncognitoSessionKey, n as releaseCodexAppServerBindingSubscription, r as retainCodexAppServerBindingSubscription, s as withCodexConversationThreadActivity, t as isSameCodexAppServerThreadOwner } from "./thread-ownership-RkaoZCmQ.js";
10
+ import { c as resolveCodexNativeSandboxBlock, s as resolveCodexNativeExecutionBlock } from "./request-BWxweEdK.js";
11
+ import { t as CODEX_CONTROL_METHODS } from "./capabilities-D6m_TdVy.js";
12
+ import { s as summarizeCodexAccountUsage } from "./rate-limits-BqHEHXQJ.js";
13
+ import { a as formatComputerUseStatus, c as formatSkills, i as formatCodexStatus, l as formatThreads, n as formatAccount, o as formatList, r as formatCodexDisplayText, s as formatModels, t as buildHelp } from "./command-formatters--UToCokS.js";
14
+ import { _ as hasCodexAdminScope, a as parseCodexPermissionsModeArg, c as setCodexConversationModel, d as stopCodexConversationTurn, g as canMutateCodexHost, h as CODEX_NATIVE_EXECUTION_AUTH_ERROR, i as parseCodexFastModeArg, l as setCodexConversationPermissions, m as CODEX_HOST_INSPECTION_AUTH_ERROR, n as parseCodexPluginMarketplaceId, o as readCodexConversationActiveTurn, p as CODEX_FULL_PERMISSIONS_AUTH_ERROR, r as formatPermissionsMode, s as setCodexConversationFastMode, t as discoverCodexMarketplacePlugins, u as steerCodexConversationTurn } from "./plugin-marketplace-discovery-BXjIFEiw.js";
15
+ import { i as readCodexConversationBindingData, n as createCodexCliNodeConversationBindingData, o as resolveCodexDefaultWorkspaceDir, r as createCodexConversationBindingData } from "./conversation-binding-data-BiodpIzq.js";
16
+ import { n as resolveCodexBindingAppServerConnection } from "./binding-connection-CF7BmrDk.js";
17
+ import { c as readCodexStatusProbes, l as requestOptions, p as formatCodexCliSessions, s as codexControlRequest, u as safeCodexControlRequest } from "./session-catalog-eMhVm0Ql.js";
18
+ import { i as readCodexComputerUseStatus, r as installCodexComputerUse, t as defaultCodexPluginMetadataCache } from "./plugin-metadata-cache-DQQm4gWT.js";
19
19
  import { normalizeOptionalString, normalizeUniqueStringEntries } from "openclaw/plugin-sdk/string-coerce-runtime";
20
20
  import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
21
21
  import crypto from "node:crypto";
@@ -591,7 +591,8 @@ function parseCodexCliSessionsArgs(args) {
591
591
  continue;
592
592
  }
593
593
  if (arg === "--limit") {
594
- const parsedLimit = parseStrictPositiveInteger(readRequiredOptionValue(args, index));
594
+ const value = readRequiredOptionValue(args, index);
595
+ const parsedLimit = parseStrictPositiveInteger(value);
595
596
  if (parsedLimit === void 0) {
596
597
  parsed.help = true;
597
598
  continue;
@@ -752,7 +753,7 @@ const CODEX_DIAGNOSTICS_COOLDOWN_MS = 6e4;
752
753
  const CODEX_DIAGNOSTICS_ERROR_MAX_CHARS = 500;
753
754
  const CODEX_DIAGNOSTICS_COOLDOWN_MAX_THREADS = 100;
754
755
  const CODEX_DIAGNOSTICS_COOLDOWN_MAX_SCOPES = 100;
755
- const CODEX_DIAGNOSTICS_CONFIRMATION_TTL_MS = 5 * 6e4;
756
+ const CODEX_DIAGNOSTICS_CONFIRMATION_TTL_MS = 3e5;
756
757
  const CODEX_DIAGNOSTICS_CONFIRMATION_MAX_REQUESTS_PER_SCOPE = 100;
757
758
  const CODEX_DIAGNOSTICS_CONFIRMATION_MAX_SCOPES = 100;
758
759
  const CODEX_DIAGNOSTICS_SCOPE_FIELD_MAX_CHARS = 128;
@@ -1063,7 +1064,8 @@ function resolveCodexCommandDeps(overrides) {
1063
1064
  //#endregion
1064
1065
  //#region extensions/codex/src/command-handler-scope.ts
1065
1066
  async function resolveControlTarget(ctx) {
1066
- const data = readCodexConversationBindingData(await ctx.getCurrentConversationBinding());
1067
+ const binding = await ctx.getCurrentConversationBinding();
1068
+ const data = readCodexConversationBindingData(binding);
1067
1069
  const scope = resolveCodexConversationControlScope(ctx);
1068
1070
  if (data?.kind === "codex-app-server-session") return {
1069
1071
  identity: conversationBindingIdentity(data.bindingId),
@@ -1087,13 +1089,14 @@ async function resolveCommandAppServerScope(deps, ctx, pluginConfig) {
1087
1089
  const fallback = resolveCodexConversationControlScope(ctx);
1088
1090
  const agentDir = target?.agentDir ?? fallback.agentDir;
1089
1091
  const binding = target ? await deps.bindingStore.read(target.identity) : void 0;
1092
+ const authProfileId = binding?.connectionScope === "supervision" ? void 0 : resolveCodexAppServerAuthProfileIdForAgent({
1093
+ authProfileId: binding?.authProfileId ?? target?.requestedAuthProfileId,
1094
+ agentDir,
1095
+ config: ctx.config
1096
+ });
1090
1097
  const connection = resolveCodexBindingAppServerConnection({
1091
1098
  binding,
1092
- authProfileId: binding?.connectionScope === "supervision" ? void 0 : resolveCodexAppServerAuthProfileIdForAgent({
1093
- authProfileId: binding?.authProfileId ?? target?.requestedAuthProfileId,
1094
- agentDir,
1095
- config: ctx.config
1096
- }),
1099
+ authProfileId,
1097
1100
  pluginConfig
1098
1101
  });
1099
1102
  return {
@@ -1392,8 +1395,9 @@ function isCurrentSessionModelSelectionLocked(ctx) {
1392
1395
  const sessionKey = ctx.sessionKey?.trim();
1393
1396
  if (!sessionKey) return false;
1394
1397
  const { agentId } = resolveCodexConversationControlScope(ctx);
1398
+ const storePath = resolveStorePath(ctx.config.session?.store, { agentId });
1395
1399
  return isModelSelectionLocked(getSessionEntry({
1396
- storePath: resolveStorePath(ctx.config.session?.store, { agentId }),
1400
+ storePath,
1397
1401
  sessionKey,
1398
1402
  hydrateSkillPromptRefs: false,
1399
1403
  readConsistency: "latest"
@@ -1450,7 +1454,8 @@ async function bindConversation(deps, ctx, pluginConfig, args) {
1450
1454
  }
1451
1455
  async function detachConversation(deps, ctx) {
1452
1456
  if (isCurrentSessionModelSelectionLocked(ctx)) return MODEL_SELECTION_LOCKED_MESSAGE;
1453
- const data = readCodexConversationBindingData(await ctx.getCurrentConversationBinding());
1457
+ const current = await ctx.getCurrentConversationBinding();
1458
+ const data = readCodexConversationBindingData(current);
1454
1459
  const identity = data?.kind === "codex-app-server-session" ? conversationBindingIdentity(data.bindingId) : void 0;
1455
1460
  const sourceSessionKey = data?.kind === "codex-app-server-session" ? data.source?.sessionKey : void 0;
1456
1461
  let expectedThreadId;
@@ -1519,13 +1524,14 @@ async function describeConversationBinding(deps, ctx) {
1519
1524
  }
1520
1525
  async function buildThreads(deps, ctx, pluginConfig, filter) {
1521
1526
  const scope = await resolveCommandAppServerScope(deps, ctx, pluginConfig);
1522
- return formatThreads(await deps.codexControlRequest(pluginConfig, CODEX_CONTROL_METHODS.listThreads, {
1527
+ const response = await deps.codexControlRequest(pluginConfig, CODEX_CONTROL_METHODS.listThreads, {
1523
1528
  limit: 10,
1524
1529
  ...filter.trim() ? { searchTerm: filter.trim() } : {}
1525
1530
  }, {
1526
1531
  config: ctx.config,
1527
1532
  ...scope
1528
- }));
1533
+ });
1534
+ return formatThreads(response);
1529
1535
  }
1530
1536
  async function buildCodexCliSessions(deps, args) {
1531
1537
  const parsed = parseCodexCliSessionsArgs(args);
@@ -1651,12 +1657,13 @@ async function bindCodexCliNodeSession(deps, ctx, parsed) {
1651
1657
  if (isCurrentSessionModelSelectionLocked(ctx)) return MODEL_SELECTION_LOCKED_MESSAGE;
1652
1658
  if (ctx.sessionId) {
1653
1659
  const scope = resolveCodexConversationControlScope(ctx);
1654
- assertCodexBindingMayBeReplaced(await deps.bindingStore.read(sessionBindingIdentity({
1660
+ const binding = await deps.bindingStore.read(sessionBindingIdentity({
1655
1661
  sessionId: ctx.sessionId,
1656
1662
  sessionKey: ctx.sessionKey,
1657
1663
  agentId: scope.agentId,
1658
1664
  config: ctx.config
1659
- })), "binding a Codex CLI node session");
1665
+ }));
1666
+ assertCodexBindingMayBeReplaced(binding, "binding a Codex CLI node session");
1660
1667
  }
1661
1668
  const resolved = await deps.resolveCodexCliSessionForBindingOnNode({
1662
1669
  requestedNode: parsed.host,
@@ -1917,12 +1924,13 @@ async function startThreadAction(deps, ctx, pluginConfig, kind, args) {
1917
1924
  });
1918
1925
  if (currentSession?.sessionId !== ctx.sessionId || resolvePersistedSessionRuntimeId(currentSession) !== "codex") return "Codex compaction is unavailable because the current OpenClaw session is not using the Codex runtime.";
1919
1926
  if (target.identity.kind === "conversation") {
1920
- if (!isSameCodexAppServerThreadOwner(binding, ctx.sessionId ? await deps.bindingStore.read(sessionBindingIdentity({
1927
+ const sessionBinding = ctx.sessionId ? await deps.bindingStore.read(sessionBindingIdentity({
1921
1928
  sessionId: ctx.sessionId,
1922
1929
  sessionKey: ctx.sessionKey,
1923
1930
  agentId: sessionTarget.agentId,
1924
1931
  config: ctx.config
1925
- })) : void 0)) return "Codex compaction is unavailable because the conversation-bound thread differs from the current session binding. Resume that thread into the session first.";
1932
+ })) : void 0;
1933
+ if (!isSameCodexAppServerThreadOwner(binding, sessionBinding)) return "Codex compaction is unavailable because the conversation-bound thread differs from the current session binding. Resume that thread into the session first.";
1926
1934
  }
1927
1935
  const compactCurrent = ctx.runtimeContext?.compactCurrent;
1928
1936
  if (!compactCurrent) return "Codex compaction is unavailable because this command is not bound to a session.";
@@ -1,11 +1,11 @@
1
- import { $ as CodexAppServerRpcError, Ct as retainCodexAppServerLiveThread, Ht as isJsonObject, c as getLeasedSharedCodexAppServerClient, gt as consumeCodexAppServerLiveThread, h as releaseLeasedSharedCodexAppServerClient } from "./shared-client-kNkljY-R.js";
2
- import { d as sessionBindingIdentity, t as CODEX_APP_SERVER_BINDING_GUARDED_REQUEST_TIMEOUT_MS } from "./session-binding-q2WSTVmC.js";
3
- import { _ as readCodexNotificationThreadId, a as closeCodexStartupClientBestEffort, f as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError, s as isCodexAlreadyTerminalInterruptError, v as readCodexNotificationTurnId } from "./attempt-client-cleanup-CVPvp9dL.js";
4
- import { i as readCodexThreadContextSnapshot, x as readCodexNotificationItem } from "./event-projector-usage-D3PHFFXh.js";
5
- import { t as resumeCodexAppServerThread } from "./thread-resume-DF54hagX.js";
6
- import { l as isIncognitoSessionKey, t as isSameCodexAppServerThreadOwner } from "./thread-ownership-CeYBqg_4.js";
7
- import { s as resolveCodexNativeExecutionBlock } from "./request-CCm4LaED.js";
8
- import { n as resolveCodexBindingAppServerConnection } from "./binding-connection-CCQFs8lf.js";
1
+ import { $ as CodexAppServerRpcError, Ct as retainCodexAppServerLiveThread, Ht as isJsonObject, c as getLeasedSharedCodexAppServerClient, gt as consumeCodexAppServerLiveThread, h as releaseLeasedSharedCodexAppServerClient } from "./shared-client-B1tT5U6r.js";
2
+ import { d as sessionBindingIdentity, t as CODEX_APP_SERVER_BINDING_GUARDED_REQUEST_TIMEOUT_MS } from "./session-binding-D0zinCP1.js";
3
+ import { _ as readCodexNotificationThreadId, a as closeCodexStartupClientBestEffort, f as unsubscribeCodexThreadBestEffort, r as CodexAppServerUnsafeSubscriptionError, s as isCodexAlreadyTerminalInterruptError, v as readCodexNotificationTurnId } from "./attempt-client-cleanup-CpVfwctT.js";
4
+ import { i as readCodexThreadContextSnapshot, x as readCodexNotificationItem } from "./event-projector-usage-B2r5vhWH.js";
5
+ import { t as resumeCodexAppServerThread } from "./thread-resume-BFt1-ZDa.js";
6
+ import { l as isIncognitoSessionKey, t as isSameCodexAppServerThreadOwner } from "./thread-ownership-RkaoZCmQ.js";
7
+ import { s as resolveCodexNativeExecutionBlock } from "./request-BWxweEdK.js";
8
+ import { n as resolveCodexBindingAppServerConnection } from "./binding-connection-CF7BmrDk.js";
9
9
  import { t as persistCodexContextCompactionActivity } from "./context-compaction-activity-BOeJf7yo.js";
10
10
  import { asOptionalRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
11
11
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
@@ -281,7 +281,7 @@ async function compactCodexNativeThread(params, options) {
281
281
  config: params.config,
282
282
  sessionKey: params.sandboxSessionKey ?? params.sessionKey,
283
283
  sessionId: params.sessionId,
284
- agentId: params.agentId,
284
+ agentId: params.sandboxAgentId ?? params.agentId,
285
285
  sandbox,
286
286
  surface: "native compaction"
287
287
  });
@@ -533,8 +533,10 @@ async function compactCodexNativeThread(params, options) {
533
533
  try {
534
534
  if ((compactionSucceeded || compactionRequestDefinitelyRejected) && retainedThreadOwnership) {
535
535
  const ownership = retainedThreadOwnership;
536
- if (!(isSameCodexAppServerThreadOwner(await options.bindingStore.read(bindingIdentity), binding) && await options.bindingStore.withLease(bindingIdentity, async () => {
537
- if (!isSameCodexAppServerThreadOwner(await options.bindingStore.read(bindingIdentity), binding)) return false;
536
+ const currentBinding = await options.bindingStore.read(bindingIdentity);
537
+ if (!(isSameCodexAppServerThreadOwner(currentBinding, binding) && await options.bindingStore.withLease(bindingIdentity, async () => {
538
+ const leasedBinding = await options.bindingStore.read(bindingIdentity);
539
+ if (!isSameCodexAppServerThreadOwner(leasedBinding, binding)) return false;
538
540
  return await retainCodexAppServerLiveThread(client, binding.threadId, ownership.release, ownership.configFingerprint, ownership.serviceTier);
539
541
  }))) await releaseThreadSubscription?.();
540
542
  } else await releaseThreadSubscription?.();
@@ -722,10 +722,11 @@ const CODEX_CONFIG_TOML_FILENAME = "config.toml";
722
722
  /** Cloud/system config can redirect reviews after local home/profile checks have passed. */
723
723
  async function assertCodexModelBackedReviewerEffectiveConfig(params) {
724
724
  if (params.approvalsReviewer !== "auto_review" && params.approvalsReviewer !== "guardian_subagent") return;
725
- const effectiveConfig = readRecord(readRecord(await params.client.request("config/read", {
725
+ const response = await params.client.request("config/read", {
726
726
  cwd: path.resolve(params.cwd),
727
727
  includeLayers: false
728
- }, { signal: params.signal }))?.config);
728
+ }, { signal: params.signal });
729
+ const effectiveConfig = readRecord(readRecord(response)?.config);
729
730
  if (!effectiveConfig) throw new Error("Codex config/read returned an invalid model-backed reviewer config");
730
731
  const modelProvider = effectiveConfig.model_provider;
731
732
  const providers = effectiveConfig.model_providers;
@@ -975,10 +976,11 @@ function resolveCodexAppServerNetworkProxy(config, sandbox) {
975
976
  function resolveNetworkProxyPermissionProfileName(config, profile) {
976
977
  const explicitProfileName = readNonEmptyString(config.profileName);
977
978
  if (explicitProfileName) return explicitProfileName;
978
- return `${DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX}-${createHash("sha256").update(stableStringifyJson({
979
+ const suffix = createHash("sha256").update(stableStringifyJson({
979
980
  version: 1,
980
981
  profile
981
- })).digest("hex").slice(0, 16)}`;
982
+ })).digest("hex").slice(0, 16);
983
+ return `${DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX}-${suffix}`;
982
984
  }
983
985
  function fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch) {
984
986
  return createHash("sha256").update(stableStringifyJson(configPatch)).digest("hex");
@@ -94,7 +94,8 @@ function legacyCodexConversationBindingId(sessionFile) {
94
94
  return `legacy-${createHash("sha256").update(sessionFile).digest("base64url")}`;
95
95
  }
96
96
  function resolveCodexDefaultWorkspaceDir(pluginConfig) {
97
- return normalizeOptionalString(asOptionalRecord(asOptionalRecord(pluginConfig)?.appServer)?.defaultWorkspaceDir) ?? process.cwd();
97
+ const appServer = asOptionalRecord(asOptionalRecord(pluginConfig)?.appServer);
98
+ return normalizeOptionalString(appServer?.defaultWorkspaceDir) ?? process.cwd();
98
99
  }
99
100
  function readConversationStart(value) {
100
101
  const read = (key) => {
@@ -6,9 +6,9 @@ import { createHash } from "node:crypto";
6
6
  import { isDeepStrictEqual } from "node:util";
7
7
  import { pathExists } from "openclaw/plugin-sdk/security-runtime";
8
8
  import { listAgentIds, resolveAgentDir, resolveSessionAgentIdsStrict } from "openclaw/plugin-sdk/agent-scope-runtime";
9
+ import { setImmediate } from "node:timers/promises";
9
10
  import { normalizeAgentId } from "openclaw/plugin-sdk/routing";
10
11
  import { canonicalPathFromExistingAncestor, isPathInside } from "openclaw/plugin-sdk/file-access-runtime";
11
- import { setImmediate } from "node:timers/promises";
12
12
  import { withFileLock } from "openclaw/plugin-sdk/file-lock";
13
13
  import { archiveLegacyStateSource, legacyStateFileExists } from "openclaw/plugin-sdk/runtime-doctor-migrations";
14
14
  //#region extensions/codex/src/migration/session-binding-orphans.ts
@@ -392,7 +392,7 @@ async function migrateSource(source, candidates, params, store) {
392
392
  return await withFileLock(source.sidecarPath, LEGACY_BINDING_LOCK_OPTIONS, async () => {
393
393
  const [contents, stat] = await Promise.all([fs.readFile(source.sidecarPath, "utf8"), fs.stat(source.sidecarPath)]);
394
394
  const raw = JSON.parse(contents);
395
- const [{ bindingStoreKey, createStoredCodexAppServerBinding, normalizeStoredCodexAppServerBindingFingerprints, readStoredCodexAppServerBinding }, { legacyCodexConversationBindingId }] = await Promise.all([import("./session-binding-q2WSTVmC.js").then((n) => n.f), import("./conversation-binding-data-CW2GuupV.js").then((n) => n.t)]);
395
+ const [{ bindingStoreKey, createStoredCodexAppServerBinding, normalizeStoredCodexAppServerBindingFingerprints, readStoredCodexAppServerBinding }, { legacyCodexConversationBindingId }] = await Promise.all([import("./session-binding-D0zinCP1.js").then((n) => n.f), import("./conversation-binding-data-BiodpIzq.js").then((n) => n.t)]);
396
396
  const agentId = owner?.agentId ?? (source.agentIds.size === 1 ? [...source.agentIds][0] : void 0);
397
397
  const baseStored = createStoredCodexAppServerBinding(raw, {
398
398
  now: stat.mtime.toISOString(),
@@ -679,7 +679,8 @@ const legacyConfigRules = [
679
679
  * Removes retired Codex plugin config keys while preserving unrelated config.
680
680
  */
681
681
  function normalizeCompatibilityConfig({ cfg }) {
682
- const rawPluginConfig = asNullableRecord(asNullableRecord(cfg.plugins?.entries?.codex)?.config);
682
+ const rawEntry = asNullableRecord(cfg.plugins?.entries?.codex);
683
+ const rawPluginConfig = asNullableRecord(rawEntry?.config);
683
684
  const rawCodexPlugins = asNullableRecord(rawPluginConfig?.codexPlugins);
684
685
  const rawAppServer = asNullableRecord(rawPluginConfig?.appServer);
685
686
  const shouldRemoveDynamicToolsProfile = rawPluginConfig !== null && hasRetiredDynamicToolsProfile(rawPluginConfig);
@@ -690,7 +691,10 @@ function normalizeCompatibilityConfig({ cfg }) {
690
691
  changes: []
691
692
  };
692
693
  const nextConfig = structuredClone(cfg);
693
- const nextPluginConfig = asNullableRecord(asNullableRecord(asNullableRecord(asNullableRecord(nextConfig.plugins)?.entries)?.codex)?.config);
694
+ const nextPlugins = asNullableRecord(nextConfig.plugins);
695
+ const nextEntries = asNullableRecord(nextPlugins?.entries);
696
+ const nextEntry = asNullableRecord(nextEntries?.codex);
697
+ const nextPluginConfig = asNullableRecord(nextEntry?.config);
694
698
  if (!nextPluginConfig) return {
695
699
  config: cfg,
696
700
  changes: []