@openclaw/codex 2026.9.6 → 2026.9.7

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 (158) hide show
  1. package/README.md +2 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/{account-usage-runtime-Eem_WGqY.mjs → account-usage-runtime-DFhbh1zz.mjs} +5 -5
  4. package/dist/.setup/{apply-DDOi8uNx.mjs → apply-D3GcSoSa.mjs} +22 -36
  5. package/dist/.setup/{attempt-client-cleanup-CEv1cKwF.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +128 -37
  6. package/dist/.setup/attempt-workspace-context-C5HigshI.mjs +164 -0
  7. package/dist/.setup/{auth-binding-DhLWa_7K.mjs → auth-binding-BLWz7stm.mjs} +14 -1
  8. package/dist/.setup/{auth-cache-key-B2mpaI9D.mjs → auth-cache-key-Dbvq-QgB.mjs} +36 -34
  9. package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
  10. package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
  11. package/dist/.setup/{binding-connection-ThoatDcb.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
  12. package/dist/.setup/{binding-connection.runtime-yoHrABt-.mjs → binding-connection.runtime-6TpgD1M6.mjs} +4 -4
  13. package/dist/.setup/{bounded-turn-B2HScEgT.mjs → bounded-turn-CbjoN2OW.mjs} +15 -18
  14. package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
  15. package/dist/.setup/{build-state-C7EnDVgr.mjs → build-state-Da1_z0kd.mjs} +1 -1
  16. package/dist/.setup/{capabilities-CDXOOFdZ.mjs → capabilities-B3WEZl4e.mjs} +2 -10
  17. package/dist/.setup/{client-Cs08OXVQ.mjs → client-N0JpgSzF.mjs} +138 -399
  18. package/dist/.setup/{client-catalog-response-BMgt_4q4.mjs → client-catalog-response-5HHLdcde.mjs} +1 -1
  19. package/dist/.setup/{command-dispatch-B4JuOsOk.mjs → command-dispatch-BeAoaovI.mjs} +5 -8
  20. package/dist/.setup/{command-formatters-Bmqvr9tO.mjs → command-formatters-R3ckE3Co.mjs} +29 -61
  21. package/dist/.setup/{command-handlers-DW7Lx9oH.mjs → command-handlers-ylTMS00z.mjs} +222 -343
  22. package/dist/.setup/{command-rpc-DixIj3HW.mjs → command-rpc-CGJGUQ6Y.mjs} +15 -18
  23. package/dist/.setup/compact-C2WamavS.mjs +776 -0
  24. package/dist/.setup/{config-BoTP_mrL.mjs → config-DKhXquav.mjs} +26 -28
  25. package/dist/.setup/{config-options-BvaRs51b.mjs → config-options-CzyWLTJt.mjs} +24 -37
  26. package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
  27. package/dist/.setup/{config-runtime-C8Rw1m1m.mjs → config-runtime-C0NbLms1.mjs} +2 -2
  28. package/dist/.setup/{config-security-BEReZ6go.mjs → config-security-CE-FcGw9.mjs} +32 -111
  29. package/dist/.setup/{config-utils-DujwEnhg.mjs → config-utils-D0CXecki.mjs} +3 -13
  30. package/dist/.setup/context-engine-projection-PezSESth.mjs +387 -0
  31. package/dist/.setup/{conversation-binding-DP-gMrBP.mjs → conversation-binding-3Min8qvP.mjs} +67 -90
  32. package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
  33. package/dist/.setup/{conversation-control-uK9Jomlc.mjs → conversation-control-CEP8X5JC.mjs} +8 -8
  34. package/dist/.setup/{cyber-failover-DYwbmf1o.mjs → cyber-failover-XV0nNRZu.mjs} +1 -1
  35. package/dist/.setup/{cyber-failover-notice-e9G3J9-e.mjs → cyber-failover-notice-RNpGpTyP.mjs} +1 -1
  36. package/dist/.setup/{dynamic-tools-BDXl-8Cw.mjs → dynamic-tools-DzlsLUuS.mjs} +2305 -2606
  37. package/dist/.setup/{effective-mcp-catalog-CvnvnGIe.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
  38. package/dist/.setup/{ephemeral-turn-poidXgek.mjs → ephemeral-turn-CDsPJOa2.mjs} +3 -3
  39. package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
  40. package/dist/.setup/{event-projector-usage-CnBS8Wa3.mjs → event-projector-usage-03R0I2dM.mjs} +3 -25
  41. package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
  42. package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
  43. package/dist/.setup/{inference-context-D96l9-ew.mjs → inference-context-D-9gWlTR.mjs} +16 -18
  44. package/dist/.setup/inference-dispatch-CMZtjQyz.mjs +359 -0
  45. package/dist/.setup/inference-metadata-CgIf7sOx.mjs +81 -0
  46. package/dist/.setup/{inference-proxy-b-aJMSxm.mjs → inference-proxy-DhcXOgUE.mjs} +174 -214
  47. package/dist/.setup/{isolated-completion-BIZFhTNG.mjs → isolated-completion-Dm3PzxJk.mjs} +9 -12
  48. package/dist/.setup/{managed-binary-BnshlFag.mjs → managed-binary-kiWRhNRE.mjs} +8 -12
  49. package/dist/.setup/{model-catalog-CfXJf9Ay.mjs → model-catalog-PAuZgJC6.mjs} +11 -10
  50. package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
  51. package/dist/.setup/{models-KnqBv0hE.mjs → models-DHXZtVVk.mjs} +9 -18
  52. package/dist/.setup/{native-auth-rWbGbMn3.mjs → native-auth-CuG53tu4.mjs} +4 -4
  53. package/dist/.setup/{native-execution-policy-umd0tgh4.mjs → native-execution-policy-BxZJy5mP.mjs} +5 -30
  54. package/dist/.setup/{native-subagent-monitor-D3filLY2.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4395 -3609
  55. package/dist/.setup/native-subagent-pending-assignments-DwkCzLvD.mjs +203 -0
  56. package/dist/.setup/native-task-assignments-DMQ0g3hu.mjs +194 -0
  57. package/dist/.setup/{node-cli-sessions-r3avj02l.mjs → node-cli-sessions-HC4W6FLI.mjs} +19 -49
  58. package/dist/.setup/{node-exec-server.runtime-BDwWXVpK.mjs → node-exec-server.runtime-BgBfWQqo.mjs} +3 -6
  59. package/dist/.setup/{plan-CN3VwfNU.mjs → plan-Y-QIvrKB.mjs} +49 -92
  60. package/dist/.setup/{plugin-activation-DT3MNtqj.mjs → plugin-activation-cNHRfaxU.mjs} +8 -36
  61. package/dist/.setup/{plugin-app-cache-key-B2CsSdnV.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +6 -23
  62. package/dist/.setup/{plugin-inventory-BoRei8Z4.mjs → plugin-inventory-Cky2XJUw.mjs} +21 -21
  63. package/dist/.setup/{plugin-marketplace-discovery-CDOi8IFs.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +18 -24
  64. package/dist/.setup/{plugin-metadata-cache-Ctmo83k_.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +115 -175
  65. package/dist/.setup/{provider-BOsxQHOM.mjs → provider-DH8NSzGt.mjs} +11 -14
  66. package/dist/.setup/{provider-capabilities-BfE88FZ5.mjs → provider-capabilities-CAxoF-X1.mjs} +13 -18
  67. package/dist/.setup/{rate-limits-CMU3DUD0.mjs → rate-limits-B7-X2TgG.mjs} +9 -31
  68. package/dist/.setup/{request-D2L0zMrq.mjs → request-BHZ1nz8d.mjs} +7 -6
  69. package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
  70. package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
  71. package/dist/.setup/{run-attempt-BHu11r7h.mjs → run-attempt-D8RZUOzY.mjs} +1035 -1023
  72. package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
  73. package/dist/.setup/{runtime-artifact-CLZ8udh-.mjs → runtime-artifact-DDQ-HGXf.mjs} +16 -4
  74. package/dist/.setup/runtime-artifact-connection-D68qQn1m.mjs +78 -0
  75. package/dist/.setup/sandbox-guard-DjCz2eOw.mjs +126 -0
  76. package/dist/.setup/scope-DOC1Xjc8.mjs +6 -0
  77. package/dist/.setup/session-binding-DGCYAfvD.mjs +443 -0
  78. package/dist/.setup/{session-binding-record-BGoz8wOK.mjs → session-binding-record-Oe9L-CNY.mjs} +52 -130
  79. package/dist/.setup/{session-binding-sidecars-BlB5EvIS.mjs → session-binding-sidecars-jo6H8dFr.mjs} +196 -17
  80. package/dist/.setup/{session-catalog-Pno1xGcl.mjs → session-catalog-4sCdv5qx.mjs} +170 -324
  81. package/dist/.setup/{session-catalog-adoption-BI6UTDZT.mjs → session-catalog-adoption-BU_pHWG7.mjs} +7 -6
  82. package/dist/.setup/{session-catalog-archive-lHBqzhaO.mjs → session-catalog-archive-spHfihri.mjs} +6 -6
  83. package/dist/.setup/session-catalog-events-DePDzzjc.mjs +139 -0
  84. package/dist/.setup/session-catalog-home-id-vlih0B_g.mjs +22 -0
  85. package/dist/.setup/{session-catalog-index-B9_VQIUz.mjs → session-catalog-index-CZvDzC6z.mjs} +126 -122
  86. package/dist/.setup/{session-catalog-index-order-hcdz07yN.mjs → session-catalog-index-order-BcQpHks3.mjs} +1 -1
  87. package/dist/.setup/{session-catalog-index-state-Dgh8ORJm.mjs → session-catalog-index-state-TeO7EyO-.mjs} +3 -2
  88. package/dist/.setup/session-catalog-limits-DDxOsQeC.mjs +14 -0
  89. package/dist/.setup/session-catalog-list-request-CvtxrYSe.mjs +170 -0
  90. package/dist/.setup/session-catalog-native-projection-DjhwGL6x.mjs +178 -0
  91. package/dist/.setup/{session-catalog-node-adoption-ITddWx_X.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +10 -27
  92. package/dist/.setup/{session-catalog-node-continue-6g6qi4A9.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +8 -10
  93. package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
  94. package/dist/.setup/{session-catalog-native-projection-DowriLid.mjs → session-catalog-parsing-CPGaPYr-.mjs} +11 -194
  95. package/dist/.setup/{session-catalog-projection-zK_PUsiE.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +6 -4
  96. package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
  97. package/dist/.setup/{session-cli-irrD-uo7.mjs → session-cli-Cn_nCqfq.mjs} +9 -22
  98. package/dist/.setup/{session-history-BrqhSCf9.mjs → session-history-D83lJWHG.mjs} +4 -6
  99. package/dist/.setup/{session-history-import-D-3wAgOP.mjs → session-history-import-WhX-X33a.mjs} +7 -10
  100. package/dist/.setup/session-history-read-Ov3StuL4.mjs +133 -0
  101. package/dist/.setup/{session-history.worker-CaCh0xF_.mjs → session-history.worker-MnPKncqP.mjs} +9 -5
  102. package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
  103. package/dist/.setup/{session-permission-policy-BI1QK_98.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
  104. package/dist/.setup/{session-retirement-BH-S6qkJ.mjs → session-retirement-qMTxkNx2.mjs} +17 -17
  105. package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
  106. package/dist/.setup/{settled-turn-finalizer-DiAi6Kx6.mjs → settled-turn-finalizer-BsvEabkw.mjs} +14 -10
  107. package/dist/.setup/{shared-client-DA4VR4Eb.mjs → shared-client-DqyTMYug.mjs} +783 -412
  108. package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
  109. package/dist/.setup/{side-question-BJ1wSDcB.mjs → side-question-C4kCmQy1.mjs} +79 -143
  110. package/dist/.setup/{source-CUzJq5WN.mjs → source-CS_7GFJZ.mjs} +80 -137
  111. package/dist/.setup/{thread-lifecycle-B3mfz1TG.mjs → thread-lifecycle-DPflntEJ.mjs} +294 -737
  112. package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
  113. package/dist/.setup/{thread-ownership-DcTtAcXj.mjs → thread-ownership-roNP0l1c.mjs} +45 -10
  114. package/dist/.setup/{thread-policy-DGuQsuFC.mjs → thread-policy-DTd-DtkX.mjs} +46 -7
  115. package/dist/.setup/{thread-requests-BLvGkP2R.mjs → thread-requests-B_bRnMGN.mjs} +199 -302
  116. package/dist/.setup/{thread-resume-DIBXwOpE.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
  117. package/dist/.setup/{timeout-C910MdAB.mjs → timeout-CXOfNoaX.mjs} +1 -35
  118. package/dist/.setup/{transcript-history-projection-ZZpkFkJ_.mjs → transcript-history-projection-DRSifI-1.mjs} +17 -89
  119. package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
  120. package/dist/.setup/{transcript-mirror-BtHDBp1G.mjs → transcript-mirror-kxmCYsuF.mjs} +7 -9
  121. package/dist/.setup/{transport-stdio-h2VHOskC.mjs → transport-stdio-Bdegpn2V.mjs} +5 -22
  122. package/dist/.setup/transport-websocket-BTBE-LD9.mjs +211 -0
  123. package/dist/.setup/{upstream-prompt-provenance-LphB8slG.mjs → upstream-prompt-provenance-fXkKbPVC.mjs} +3 -9
  124. package/dist/.setup/{upstream-session-fork-BUr4OUbC.mjs → upstream-session-fork-CBeVjBpT.mjs} +23 -23
  125. package/dist/.setup/{usage-BML0r-ua.mjs → usage-BMzNxeR_.mjs} +4 -4
  126. package/dist/.setup/{usage-limit-error-DUMbefVY.mjs → usage-limit-error-QXerDo3i.mjs} +4 -19
  127. package/dist/.setup/{web-search-provider.runtime-CDKlN-Rv.mjs → web-search-provider.runtime-P77OUeoo.mjs} +8 -19
  128. package/dist/api.js +9 -11
  129. package/dist/catalog-page.worker.js +1 -1
  130. package/dist/cli-metadata.js +1 -1
  131. package/dist/doctor-contract-api.js +50 -8
  132. package/dist/harness.js +344 -1
  133. package/dist/index.js +193 -245
  134. package/dist/media-understanding-provider.js +9 -22
  135. package/dist/migration-provider-api.js +1 -1
  136. package/dist/provider-discovery.js +1 -1
  137. package/dist/session-history-worker-runtime.js +3 -3
  138. package/dist/session-history.worker.js +1 -1
  139. package/openclaw.plugin.json +14 -2
  140. package/package.json +7 -6
  141. package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +0 -331
  142. package/dist/.setup/compact-Du5UvtxA.mjs +0 -680
  143. package/dist/.setup/event-projector-assistant-message-BsruvNrH.mjs +0 -103
  144. package/dist/.setup/event-projector-items-C6L_5ZiT.mjs +0 -234
  145. package/dist/.setup/harness-a_MsE4-_.mjs +0 -355
  146. package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
  147. package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
  148. package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
  149. package/dist/.setup/native-subagent-history-0nYYgo0k.mjs +0 -148
  150. package/dist/.setup/native-subagent-task-ids-wb8CKZGN.mjs +0 -441
  151. package/dist/.setup/plugin-approval-roundtrip-C0MZzCuP.mjs +0 -122
  152. package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
  153. package/dist/.setup/sandbox-guard-C2sRMOEY.mjs +0 -166
  154. package/dist/.setup/session-binding-Cm0apEbd.mjs +0 -692
  155. package/dist/.setup/session-catalog-events-Bj6j94E_.mjs +0 -347
  156. package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
  157. package/dist/.setup/session-initialization-rcgbZiid.mjs +0 -75
  158. package/dist/.setup/thread-history-page-DoVpnHim.mjs +0 -83
@@ -1,7 +1,8 @@
1
1
  import { t as attemptTerminal } from "./attempt-terminal-gZrxQ35N.mjs";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs/promises";
4
- import { awaitAgentEndSideEffects, embeddedAgentLog, emitAgentEvent, runAgentEndSideEffects } from "openclaw/plugin-sdk/agent-harness-runtime";
4
+ import { awaitAgentEndSideEffects, embeddedAgentLog, runAgentEndSideEffects } from "openclaw/plugin-sdk/agent-harness-runtime";
5
+ import { emitAgentHarnessAttemptEvent } from "openclaw/plugin-sdk/agent-harness-attempt-runtime";
5
6
  //#region extensions/codex/src/app-server/workspace-dir-cache.ts
6
7
  /** Process-local cache of Codex workspaces already created by the run loop. */
7
8
  const codexWorkspaceDirCache = /* @__PURE__ */ new Set();
@@ -13,17 +14,13 @@ function shouldKeepCodexSharedAbortOpen(params) {
13
14
  if (params.explicitCancellationObserved || terminal.aborted || terminal.externalAbort) return false;
14
15
  return params.trigger === "memory" || !params.attemptSucceeded;
15
16
  }
16
- function withCodexAppServerFastModeServiceTier(appServer, params) {
17
+ function withCodexAppServerFastModeServiceTier(appServer, params, configuredAppServer = appServer) {
17
18
  const fastMode = typeof params.fastMode === "function" ? params.fastMode() : params.fastMode;
18
- const serviceTier = fastMode === void 0 ? appServer.serviceTier : fastMode ? "priority" : void 0;
19
+ const serviceTier = fastMode === void 0 ? configuredAppServer.serviceTier : fastMode ? "priority" : void 0;
19
20
  if (serviceTier === appServer.serviceTier) return appServer;
20
- if (serviceTier) return {
21
- ...appServer,
22
- serviceTier
23
- };
24
21
  return {
25
22
  ...appServer,
26
- serviceTier: null
23
+ serviceTier: serviceTier || null
27
24
  };
28
25
  }
29
26
  function estimateCodexAppServerProjectedTurnTokens(params) {
@@ -36,22 +33,11 @@ async function ensureCodexWorkspaceDirOnce(workspaceDir) {
36
33
  await fs.mkdir(normalized, { recursive: true });
37
34
  codexWorkspaceDirCache.add(normalized);
38
35
  }
39
- async function emitCodexAppServerEvent(params, event) {
40
- try {
41
- emitAgentEvent({
42
- runId: params.runId,
43
- stream: event.stream,
44
- data: event.data,
45
- ...params.sessionKey ? { sessionKey: params.sessionKey } : {}
46
- });
47
- } catch (error) {
48
- embeddedAgentLog.debug("codex app-server global agent event emit failed", { error });
49
- }
50
- try {
51
- await params.onAgentEvent?.(event);
52
- } catch (error) {
53
- embeddedAgentLog.debug("codex app-server agent event handler threw", { error });
54
- }
36
+ function emitCodexAppServerEvent(params, event) {
37
+ return emitAgentHarnessAttemptEvent(params, event, {
38
+ label: "codex app-server",
39
+ log: embeddedAgentLog
40
+ });
55
41
  }
56
42
  async function runCodexAgentEndHook(params, hookParams) {
57
43
  const sideEffectParams = {
@@ -1,6 +1,7 @@
1
1
  import { n as isCodexAppServerProxyLaunch } from "./launch-args-DbFCehO7.mjs";
2
- import { a as resolvePackagedCodexNativeCommand } from "./managed-binary-BnshlFag.mjs";
3
- import { n as resolveCodexAppServerSpawnEnv, r as resolveCodexAppServerSpawnInvocation } from "./transport-stdio-h2VHOskC.mjs";
2
+ import { a as resolvePackagedCodexNativeCommand } from "./managed-binary-kiWRhNRE.mjs";
3
+ import { n as resolveCodexAppServerSpawnEnv, r as resolveCodexAppServerSpawnInvocation } from "./transport-stdio-Bdegpn2V.mjs";
4
+ import { captureCodexConfiguredConnection, finalizeCodexConfiguredConnection, isCodexConfiguredConnectionArtifact, validateCodexConfiguredConnectionCapture } from "./runtime-artifact-connection-D68qQn1m.mjs";
4
5
  import { createHash } from "node:crypto";
5
6
  import { resolveWindowsExecutablePath } from "openclaw/plugin-sdk/windows-spawn";
6
7
  import { constants } from "node:fs";
@@ -8,7 +9,7 @@ import path from "node:path";
8
9
  import fs$1 from "node:fs/promises";
9
10
  import { isPathInside, sha256File } from "openclaw/plugin-sdk/file-access-runtime";
10
11
  //#region extensions/codex/src/app-server/runtime-artifact.ts
11
- /** Exact local runtime artifact identity for verified Codex setup turns. */
12
+ /** Local executable or configured-service identity for verified Codex turns. */
12
13
  const ARTIFACT_ID_PREFIX = "codex-app-server:v1:";
13
14
  const ARTIFACT_HASH_DOMAIN = "openclaw-codex-app-server-runtime-artifact-v1\0";
14
15
  const MAX_ARTIFACT_ID_BYTES = 32768;
@@ -467,14 +468,22 @@ function fingerprintBinding(descriptor, contentFingerprint) {
467
468
  }
468
469
  /** Captures exact candidate bytes immediately before app-server startup. */
469
470
  async function captureCodexAppServerRuntimeArtifactBeforeStart(params) {
471
+ throwIfAborted(params.signal);
472
+ if (params.startOptions.transport !== "stdio") return captureCodexConfiguredConnection(params.startOptions);
470
473
  const descriptor = await captureFilesystemDescriptor(params);
471
474
  return {
475
+ kind: "local-executable",
472
476
  descriptor,
473
477
  contentFingerprint: await hashSelectedArtifactFiles(descriptor, params.signal)
474
478
  };
475
479
  }
476
480
  /** Rechecks startup bytes and adds initialized handshake identity. */
477
481
  async function finalizeCodexAppServerRuntimeArtifact(params) {
482
+ throwIfAborted(params.signal);
483
+ if (params.before.kind === "configured-connection") return finalizeCodexConfiguredConnection({
484
+ ...params,
485
+ before: params.before
486
+ });
478
487
  const afterDescriptor = await captureFilesystemDescriptor(params);
479
488
  const afterContentFingerprint = await hashSelectedArtifactFiles(afterDescriptor, params.signal);
480
489
  if (JSON.stringify(afterDescriptor) !== JSON.stringify(params.before.descriptor) || afterContentFingerprint !== params.before.contentFingerprint) throw new Error("Codex app-server runtime artifact changed during startup");
@@ -494,6 +503,7 @@ async function finalizeCodexAppServerRuntimeArtifact(params) {
494
503
  }
495
504
  /** Checks current pre-spawn bytes and selection against a previously minted binding. */
496
505
  function validateCodexAppServerRuntimeArtifactCapture(binding, capture) {
506
+ if (capture.kind === "configured-connection") return validateCodexConfiguredConnectionCapture(binding, capture);
497
507
  try {
498
508
  const expectedDescriptor = decodeArtifactId(binding.id);
499
509
  const { serverVersion: _serverVersion, userAgentFingerprint: _userAgentFingerprint, ...expectedFilesystemDescriptor } = expectedDescriptor;
@@ -514,8 +524,10 @@ function readCodexAppServerClientRuntimeArtifact(client) {
514
524
  return getRuntimeArtifactBindings().get(client);
515
525
  }
516
526
  /** Re-hashes only the exact Codex files named by a server-minted artifact binding. */
517
- async function validateCodexAppServerRuntimeArtifact(binding, signal) {
527
+ async function validateCodexAppServerRuntimeArtifact(binding, signal, startOptions) {
518
528
  try {
529
+ throwIfAborted(signal);
530
+ if (isCodexConfiguredConnectionArtifact(binding.id)) return Boolean(startOptions && validateCodexConfiguredConnectionCapture(binding, captureCodexConfiguredConnection(startOptions)));
519
531
  const descriptor = decodeArtifactId(binding.id);
520
532
  const contentFingerprint = await hashSelectedArtifactFiles(descriptor, signal);
521
533
  return binding.fingerprint === fingerprintBinding(descriptor, contentFingerprint);
@@ -0,0 +1,78 @@
1
+ import { t as codexAppServerStartOptionsKey } from "./config-options-CzyWLTJt.mjs";
2
+ import "./config-runtime-C0NbLms1.mjs";
3
+ import { r as resolveCodexAppServerUnixSocketPath } from "./transport-websocket-BTBE-LD9.mjs";
4
+ import { createHash } from "node:crypto";
5
+ import path from "node:path";
6
+ //#region extensions/codex/src/app-server/runtime-artifact-connection.ts
7
+ /** Configured-service identity, distinct from local executable attestation. */
8
+ const CONNECTION_ID_PREFIX = "codex-app-server:connection:v1:";
9
+ const CONNECTION_HASH_DOMAIN = "openclaw-codex-configured-connection-v1\0";
10
+ function captureCodexConfiguredConnection(start) {
11
+ if (start.transport !== "websocket" && start.transport !== "unix" || start.transport === "websocket" && !start.url?.trim()) throw new Error("Verified remote Codex inference requires a configured socket endpoint");
12
+ const unixSocketPath = resolveCodexAppServerUnixSocketPath(start);
13
+ const key = codexAppServerStartOptionsKey({
14
+ transport: start.transport,
15
+ command: "",
16
+ args: [],
17
+ url: unixSocketPath ? `unix://${path.resolve(unixSocketPath)}` : start.url,
18
+ authToken: start.authToken,
19
+ headers: start.headers
20
+ });
21
+ return Object.freeze({
22
+ kind: "configured-connection",
23
+ transport: start.transport,
24
+ selectionFingerprint: createHash("sha256").update(key).digest("hex")
25
+ });
26
+ }
27
+ function finalizeCodexConfiguredConnection(params) {
28
+ const after = captureCodexConfiguredConnection(params.startOptions);
29
+ if (JSON.stringify(after) !== JSON.stringify(params.before)) throw new Error("Codex configured connection changed during startup");
30
+ const serverVersion = params.runtimeIdentity?.serverVersion?.trim();
31
+ if (!serverVersion) throw new Error("Codex app-server did not report an initialized runtime identity");
32
+ const descriptor = {
33
+ ...after,
34
+ runtimeIdentityFingerprint: createHash("sha256").update(JSON.stringify({
35
+ serverVersion,
36
+ userAgent: params.runtimeIdentity?.userAgent ?? null,
37
+ codexHome: params.runtimeIdentity?.codexHome ?? null,
38
+ platformFamily: params.runtimeIdentity?.platformFamily ?? null,
39
+ platformOs: params.runtimeIdentity?.platformOs ?? null
40
+ })).digest("hex")
41
+ };
42
+ return Object.freeze({
43
+ id: encodeConnectionId(descriptor),
44
+ fingerprint: fingerprint(descriptor)
45
+ });
46
+ }
47
+ function isCodexConfiguredConnectionArtifact(id) {
48
+ return id.startsWith(CONNECTION_ID_PREFIX);
49
+ }
50
+ function validateCodexConfiguredConnectionCapture(binding, capture) {
51
+ try {
52
+ const descriptor = decodeConnectionId(binding.id);
53
+ return descriptor.transport === capture.transport && descriptor.selectionFingerprint === capture.selectionFingerprint && binding.fingerprint === fingerprint(descriptor);
54
+ } catch {
55
+ return false;
56
+ }
57
+ }
58
+ function encodeConnectionId(descriptor) {
59
+ return `${CONNECTION_ID_PREFIX}${Buffer.from(JSON.stringify(descriptor)).toString("base64url")}`;
60
+ }
61
+ function fingerprint(descriptor) {
62
+ return createHash("sha256").update(CONNECTION_HASH_DOMAIN).update(JSON.stringify(descriptor)).digest("hex");
63
+ }
64
+ function decodeConnectionId(id) {
65
+ if (!isCodexConfiguredConnectionArtifact(id) || Buffer.byteLength(id) > 2048) throw new Error("Invalid Codex configured connection artifact");
66
+ const value = JSON.parse(Buffer.from(id.slice(31), "base64url").toString("utf8"));
67
+ if (!value || typeof value !== "object" || Array.isArray(value) || !("kind" in value) || value.kind !== "configured-connection" || !("transport" in value) || value.transport !== "websocket" && value.transport !== "unix" || !("selectionFingerprint" in value) || typeof value.selectionFingerprint !== "string" || !/^[a-f0-9]{64}$/u.test(value.selectionFingerprint) || !("runtimeIdentityFingerprint" in value) || typeof value.runtimeIdentityFingerprint !== "string" || !/^[a-f0-9]{64}$/u.test(value.runtimeIdentityFingerprint)) throw new Error("Invalid Codex configured connection descriptor");
68
+ const descriptor = {
69
+ kind: value.kind,
70
+ transport: value.transport,
71
+ selectionFingerprint: value.selectionFingerprint,
72
+ runtimeIdentityFingerprint: value.runtimeIdentityFingerprint
73
+ };
74
+ if (encodeConnectionId(descriptor) !== id) throw new Error("Invalid noncanonical Codex configured connection artifact");
75
+ return descriptor;
76
+ }
77
+ //#endregion
78
+ export { captureCodexConfiguredConnection, finalizeCodexConfiguredConnection, isCodexConfiguredConnectionArtifact, validateCodexConfiguredConnectionCapture };
@@ -0,0 +1,126 @@
1
+ import { l as isCodexRemoteExecPlacementSandbox } from "./config-parsing-b088LyhT.mjs";
2
+ import { n as resolveCodexNativeExecutionPolicy, t as formatCodexNativeNodeExecBlock } from "./native-execution-policy-BxZJy5mP.mjs";
3
+ import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
4
+ import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
5
+ import { tryResolveDefaultAgentId } from "openclaw/plugin-sdk/agent-scope-runtime";
6
+ import { parseAgentSessionKey } from "openclaw/plugin-sdk/routing";
7
+ import { resolveSandboxRuntimeStatus } from "openclaw/plugin-sdk/sandbox";
8
+ //#region extensions/codex/src/app-server/sandbox-guard.ts
9
+ /**
10
+ * Blocks direct Codex app-server requests that would bypass OpenClaw sandbox or
11
+ * node-exec routing guarantees.
12
+ */
13
+ var sandbox_guard_exports = /* @__PURE__ */ __exportAll({
14
+ resolveCodexAppServerDirectSandboxBypassBlock: () => resolveCodexAppServerDirectSandboxBypassBlock,
15
+ resolveCodexNativeExecutionBlock: () => resolveCodexNativeExecutionBlock,
16
+ resolveCodexNativeSandboxBlock: () => resolveCodexNativeSandboxBlock
17
+ });
18
+ const ALLOWED_CONTROL_PLANE_METHODS = /* @__PURE__ */ new Set([
19
+ "account/rateLimits/read",
20
+ "account/read",
21
+ "app/installed",
22
+ "app/list",
23
+ "app/read",
24
+ "config/batchWrite",
25
+ "config/mcpServer/reload",
26
+ "config/read",
27
+ "config/value/write",
28
+ "environment/add",
29
+ "experimentalFeature/list",
30
+ "experimentalFeature/enablement/set",
31
+ "feedback/upload",
32
+ "hooks/list",
33
+ "initialize",
34
+ "marketplace/add",
35
+ "mcpServerStatus/list",
36
+ "model/list",
37
+ "plugin/install",
38
+ "plugin/installed",
39
+ "plugin/list",
40
+ "plugin/read",
41
+ "skills/list",
42
+ "thread/archive",
43
+ "thread/inject_items",
44
+ "thread/list",
45
+ "thread/metadata/update",
46
+ "thread/name/set",
47
+ "thread/read",
48
+ "thread/rollback",
49
+ "thread/unarchive",
50
+ "thread/unsubscribe",
51
+ "turn/interrupt",
52
+ "turn/steer"
53
+ ]);
54
+ /** Returns a block message when a direct app-server method would bypass OpenClaw execution policy. */
55
+ function resolveCodexAppServerDirectSandboxBypassBlock(params) {
56
+ const controlPlane = ALLOWED_CONTROL_PLANE_METHODS.has(params.method);
57
+ if (!controlPlane || params.method === "config/mcpServer/reload") {
58
+ const nodeExecBlock = resolveCodexNativeNodeExecBlock({
59
+ config: params.config,
60
+ sessionKey: params.sessionKey,
61
+ sessionId: params.sessionId,
62
+ surface: `app-server method \`${params.method}\``
63
+ });
64
+ if (nodeExecBlock) return nodeExecBlock;
65
+ }
66
+ if (controlPlane) return;
67
+ const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim();
68
+ if (!sessionKey) return;
69
+ const sandboxBlock = resolveCodexNativeSandboxBlock({
70
+ config: params.config,
71
+ sessionKey,
72
+ sandbox: params.sandbox,
73
+ surface: `app-server method \`${params.method}\``
74
+ });
75
+ if (!sandboxBlock) return;
76
+ if (params.method === "thread/start" && hasOpenClawSandboxEnvironmentSelection(params.requestParams)) return;
77
+ return sandboxBlock;
78
+ }
79
+ /** Resolves the generic native-execution block for sandboxed or node-hosted sessions. */
80
+ function resolveCodexNativeExecutionBlock(params) {
81
+ return resolveCodexNativeSandboxBlock(params) ?? resolveCodexNativeNodeExecBlock(params);
82
+ }
83
+ /** Returns a block message when native Codex execution cannot honor active sandboxing. */
84
+ function resolveCodexNativeSandboxBlock(params) {
85
+ if (params.sandboxEnvironmentSelected) return;
86
+ const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim();
87
+ if (!sessionKey) return;
88
+ if (isCodexRemoteExecPlacementSandbox(params.sandbox) || params.sandbox?.enabled === true) return formatCodexNativeSandboxBlock({ surface: params.surface });
89
+ const sandboxAgentId = parseAgentSessionKey(sessionKey)?.agentId ?? params.agentId ?? tryResolveDefaultAgentId(params.config ?? {});
90
+ if (!sandboxAgentId) return;
91
+ if (!resolveSandboxRuntimeStatus({
92
+ cfg: params.config,
93
+ sessionKey,
94
+ agentId: sandboxAgentId,
95
+ classificationAgentId: sandboxAgentId
96
+ }).sandboxed) return;
97
+ return formatCodexNativeSandboxBlock({ surface: params.surface });
98
+ }
99
+ function hasOpenClawSandboxEnvironmentSelection(value) {
100
+ if (!isRecord(value)) return false;
101
+ const environments = value.environments;
102
+ return Array.isArray(environments) && environments.length > 0 && environments.every((environment) => isRecord(environment) && typeof environment.environmentId === "string" && environment.environmentId.startsWith("openclaw-sandbox-") && typeof environment.cwd === "string" && environment.cwd.trim().length > 0);
103
+ }
104
+ function formatCodexNativeSandboxBlock(params) {
105
+ return [
106
+ `Codex-native ${params.surface} is unavailable because OpenClaw sandboxing is active for this session.`,
107
+ "This mode cannot route execution through the OpenClaw sandbox backend.",
108
+ "Use a normal Codex harness turn, or run an intentionally unsandboxed session."
109
+ ].join(" ");
110
+ }
111
+ function resolveCodexNativeNodeExecBlock(params) {
112
+ const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim();
113
+ const policy = resolveCodexNativeExecutionPolicy({
114
+ config: params.config,
115
+ sessionKey,
116
+ agentId: params.agentId,
117
+ readRuntimeSessionEntry: Boolean(sessionKey)
118
+ });
119
+ if (policy.nativeToolSurfaceAllowed) return;
120
+ return formatCodexNativeNodeExecBlock({
121
+ surface: params.surface,
122
+ reason: policy.blockReason
123
+ });
124
+ }
125
+ //#endregion
126
+ export { resolveCodexNativeSandboxBlock as n, sandbox_guard_exports as r, resolveCodexNativeExecutionBlock as t };
@@ -0,0 +1,6 @@
1
+ //#region extensions/codex/src/migration/scope.ts
2
+ function isOnlyMigrationKind({ itemKinds }, kind) {
3
+ return Boolean(itemKinds?.length && itemKinds.every((itemKind) => itemKind === kind));
4
+ }
5
+ //#endregion
6
+ export { isOnlyMigrationKind as t };