@openclaw/codex 2026.9.5 → 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 (174) hide show
  1. package/README.md +2 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/{account-usage-runtime-C2MOIvfq.mjs → account-usage-runtime-DFhbh1zz.mjs} +6 -6
  4. package/dist/.setup/{apply-CJ0ZfmBG.mjs → apply-D3GcSoSa.mjs} +35 -55
  5. package/dist/.setup/{attempt-client-cleanup-BpYKdTA0.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +179 -73
  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-QirmgiCo.mjs → auth-cache-key-Dbvq-QgB.mjs} +41 -111
  9. package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
  10. package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
  11. package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
  12. package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
  13. package/dist/.setup/{binding-connection-Bm38niE8.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
  14. package/dist/.setup/{binding-connection.runtime-CnRMC0ta.mjs → binding-connection.runtime-6TpgD1M6.mjs} +5 -5
  15. package/dist/.setup/{bounded-turn-BtlZcivC.mjs → bounded-turn-CbjoN2OW.mjs} +140 -37
  16. package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
  17. package/dist/.setup/{build-state-Xx9ybZqa.mjs → build-state-Da1_z0kd.mjs} +1 -1
  18. package/dist/.setup/{capabilities-_vXcZGSx.mjs → capabilities-B3WEZl4e.mjs} +2 -10
  19. package/dist/.setup/{client-vXs2929Q.mjs → client-N0JpgSzF.mjs} +635 -872
  20. package/dist/.setup/client-catalog-response-5HHLdcde.mjs +285 -0
  21. package/dist/.setup/{command-dispatch-naHIZwwF.mjs → command-dispatch-BeAoaovI.mjs} +9 -8
  22. package/dist/.setup/{command-formatters-CGEkdawF.mjs → command-formatters-R3ckE3Co.mjs} +36 -64
  23. package/dist/.setup/{command-handlers-BtAJEW1X.mjs → command-handlers-ylTMS00z.mjs} +301 -488
  24. package/dist/.setup/{command-rpc-DHFpn4le.mjs → command-rpc-CGJGUQ6Y.mjs} +40 -28
  25. package/dist/.setup/compact-C2WamavS.mjs +776 -0
  26. package/dist/.setup/{config-CedDWjM-.mjs → config-DKhXquav.mjs} +26 -28
  27. package/dist/.setup/{config-options-BsanJ8QG.mjs → config-options-CzyWLTJt.mjs} +68 -65
  28. package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
  29. package/dist/.setup/{config-runtime-CeAhl_h4.mjs → config-runtime-C0NbLms1.mjs} +2 -2
  30. package/dist/.setup/{config-security-BRQ2mgW9.mjs → config-security-CE-FcGw9.mjs} +51 -215
  31. package/dist/.setup/{config-utils-DujwEnhg.mjs → config-utils-D0CXecki.mjs} +3 -13
  32. package/dist/.setup/context-engine-projection-PezSESth.mjs +387 -0
  33. package/dist/.setup/{conversation-binding-DhzrpTM6.mjs → conversation-binding-3Min8qvP.mjs} +71 -105
  34. package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
  35. package/dist/.setup/{conversation-control-DN53ns41.mjs → conversation-control-CEP8X5JC.mjs} +30 -69
  36. package/dist/.setup/{cyber-failover-DYwbmf1o.mjs → cyber-failover-XV0nNRZu.mjs} +1 -1
  37. package/dist/.setup/{cyber-failover-notice-e9G3J9-e.mjs → cyber-failover-notice-RNpGpTyP.mjs} +1 -1
  38. package/dist/.setup/{dynamic-tools-D16lOp67.mjs → dynamic-tools-DzlsLUuS.mjs} +3136 -3167
  39. package/dist/.setup/{effective-mcp-catalog-K6kLCN8X.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
  40. package/dist/.setup/{ephemeral-turn-R1gA8Sn6.mjs → ephemeral-turn-CDsPJOa2.mjs} +9 -6
  41. package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
  42. package/dist/.setup/{event-projector-usage-C7Ntzs-f.mjs → event-projector-usage-03R0I2dM.mjs} +4 -26
  43. package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
  44. package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
  45. package/dist/.setup/{inference-context-fulhZuz8.mjs → inference-context-D-9gWlTR.mjs} +16 -18
  46. package/dist/.setup/inference-dispatch-CMZtjQyz.mjs +359 -0
  47. package/dist/.setup/inference-metadata-CgIf7sOx.mjs +81 -0
  48. package/dist/.setup/inference-proxy-DhcXOgUE.mjs +561 -0
  49. package/dist/.setup/{isolated-completion-B6srt48J.mjs → isolated-completion-Dm3PzxJk.mjs} +15 -11
  50. package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
  51. package/dist/.setup/{managed-binary-DP6Rib3P.mjs → managed-binary-kiWRhNRE.mjs} +16 -9
  52. package/dist/.setup/{model-catalog-DkvUuBey.mjs → model-catalog-PAuZgJC6.mjs} +14 -14
  53. package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
  54. package/dist/.setup/{models-BDFgm_G-.mjs → models-DHXZtVVk.mjs} +9 -18
  55. package/dist/.setup/{native-auth-BLZGqFjw.mjs → native-auth-CuG53tu4.mjs} +5 -5
  56. package/dist/.setup/{native-execution-policy-YBMHSzC4.mjs → native-execution-policy-BxZJy5mP.mjs} +6 -31
  57. package/dist/.setup/{native-subagent-monitor-B1hxzIOy.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4422 -3808
  58. package/dist/.setup/native-subagent-pending-assignments-DwkCzLvD.mjs +203 -0
  59. package/dist/.setup/native-task-assignments-DMQ0g3hu.mjs +194 -0
  60. package/dist/.setup/{node-cli-sessions-Cl8b2ZF3.mjs → node-cli-sessions-HC4W6FLI.mjs} +99 -111
  61. package/dist/.setup/node-exec-server.runtime-BgBfWQqo.mjs +244 -0
  62. package/dist/.setup/{plan-xD7WKYTM.mjs → plan-Y-QIvrKB.mjs} +118 -163
  63. package/dist/.setup/{plugin-activation-r8nq5Jzp.mjs → plugin-activation-cNHRfaxU.mjs} +10 -47
  64. package/dist/.setup/{plugin-app-cache-key-BOxKP7db.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +9 -42
  65. package/dist/.setup/{plugin-inventory-DUle8DLz.mjs → plugin-inventory-Cky2XJUw.mjs} +32 -23
  66. package/dist/.setup/{plugin-marketplace-discovery-P-Vndfqq.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +22 -25
  67. package/dist/.setup/{plugin-metadata-cache-DsS5buNa.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +328 -318
  68. package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
  69. package/dist/.setup/provider-DH8NSzGt.mjs +51 -0
  70. package/dist/.setup/{provider-capabilities-B8J4Dy-O.mjs → provider-capabilities-CAxoF-X1.mjs} +35 -12
  71. package/dist/.setup/{rate-limits-DOEGYRNs.mjs → rate-limits-B7-X2TgG.mjs} +123 -166
  72. package/dist/.setup/{request-BioXJLYa.mjs → request-BHZ1nz8d.mjs} +25 -16
  73. package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
  74. package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
  75. package/dist/.setup/{run-attempt-rlA07pUv.mjs → run-attempt-D8RZUOzY.mjs} +2046 -1454
  76. package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
  77. package/dist/.setup/{runtime-artifact-Dy38Z5iU.mjs → runtime-artifact-DDQ-HGXf.mjs} +43 -47
  78. package/dist/.setup/runtime-artifact-connection-D68qQn1m.mjs +78 -0
  79. package/dist/.setup/sandbox-guard-DjCz2eOw.mjs +126 -0
  80. package/dist/.setup/scope-DOC1Xjc8.mjs +6 -0
  81. package/dist/.setup/session-binding-DGCYAfvD.mjs +443 -0
  82. package/dist/.setup/{session-binding-record-TH3xA0zj.mjs → session-binding-record-Oe9L-CNY.mjs} +73 -132
  83. package/dist/.setup/{session-binding-sidecars-CKYEcfNn.mjs → session-binding-sidecars-jo6H8dFr.mjs} +242 -60
  84. package/dist/.setup/{session-catalog-fUdWDx-U.mjs → session-catalog-4sCdv5qx.mjs} +598 -452
  85. package/dist/.setup/{session-catalog-adoption-CR_whkEW.mjs → session-catalog-adoption-BU_pHWG7.mjs} +59 -26
  86. package/dist/.setup/{session-catalog-archive-CwZaPacf.mjs → session-catalog-archive-spHfihri.mjs} +7 -7
  87. package/dist/.setup/session-catalog-events-DePDzzjc.mjs +139 -0
  88. package/dist/.setup/session-catalog-home-id-vlih0B_g.mjs +22 -0
  89. package/dist/.setup/{session-catalog-index-B141u15s.mjs → session-catalog-index-CZvDzC6z.mjs} +286 -182
  90. package/dist/.setup/{session-catalog-index-order-Cc5BzlQr.mjs → session-catalog-index-order-BcQpHks3.mjs} +2 -2
  91. package/dist/.setup/{session-catalog-index-state-BAuDztHN.mjs → session-catalog-index-state-TeO7EyO-.mjs} +6 -2
  92. package/dist/.setup/session-catalog-limits-DDxOsQeC.mjs +14 -0
  93. package/dist/.setup/session-catalog-list-request-CvtxrYSe.mjs +170 -0
  94. package/dist/.setup/session-catalog-native-projection-DjhwGL6x.mjs +178 -0
  95. package/dist/.setup/{session-catalog-node-adoption-BVRsYOSh.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +30 -35
  96. package/dist/.setup/{session-catalog-node-continue-Dowv8osw.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +25 -18
  97. package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
  98. package/dist/.setup/{session-catalog-native-projection-ChV3cCtm.mjs → session-catalog-parsing-CPGaPYr-.mjs} +14 -180
  99. package/dist/.setup/{session-catalog-projection-C1Bj9Jl-.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +15 -5
  100. package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
  101. package/dist/.setup/{session-cli-DIj-IE-E.mjs → session-cli-Cn_nCqfq.mjs} +11 -24
  102. package/dist/.setup/{session-history-C--SrLI8.mjs → session-history-D83lJWHG.mjs} +16 -23
  103. package/dist/.setup/{session-history-import-JHXT5Xfi.mjs → session-history-import-WhX-X33a.mjs} +7 -10
  104. package/dist/.setup/session-history-read-Ov3StuL4.mjs +133 -0
  105. package/dist/.setup/{session-history.worker-CpNj7H_P.mjs → session-history.worker-MnPKncqP.mjs} +14 -23
  106. package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
  107. package/dist/.setup/{session-permission-policy-DhurXY0l.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
  108. package/dist/.setup/{session-retirement-CU87AOg9.mjs → session-retirement-qMTxkNx2.mjs} +31 -12
  109. package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
  110. package/dist/.setup/{settled-turn-finalizer-CiY2bLFK.mjs → settled-turn-finalizer-BsvEabkw.mjs} +17 -13
  111. package/dist/.setup/{shared-client-BpTtuLQ5.mjs → shared-client-DqyTMYug.mjs} +826 -485
  112. package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
  113. package/dist/.setup/{side-question-DSCZyoBD.mjs → side-question-C4kCmQy1.mjs} +206 -334
  114. package/dist/.setup/{source-Bjp4UQij.mjs → source-CS_7GFJZ.mjs} +82 -139
  115. package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
  116. package/dist/.setup/{thread-archive-guard-jmecf6OJ.mjs → thread-archive-guard-C9frICzX.mjs} +10 -3
  117. package/dist/.setup/thread-lifecycle-DPflntEJ.mjs +2362 -0
  118. package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
  119. package/dist/.setup/{thread-ownership-skomxnIt.mjs → thread-ownership-roNP0l1c.mjs} +47 -10
  120. package/dist/.setup/thread-policy-DTd-DtkX.mjs +109 -0
  121. package/dist/.setup/thread-requests-B_bRnMGN.mjs +2102 -0
  122. package/dist/.setup/{thread-resume-BkNpj9Pz.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
  123. package/dist/.setup/timeout-CXOfNoaX.mjs +46 -0
  124. package/dist/.setup/transcript-history-projection-DRSifI-1.mjs +201 -0
  125. package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
  126. package/dist/.setup/{transcript-mirror-D4qp_leP.mjs → transcript-mirror-kxmCYsuF.mjs} +224 -206
  127. package/dist/.setup/{transport-stdio-Cmx94Oiy.mjs → transport-stdio-Bdegpn2V.mjs} +138 -75
  128. package/dist/.setup/transport-websocket-BTBE-LD9.mjs +211 -0
  129. package/dist/.setup/{upstream-prompt-provenance-LphB8slG.mjs → upstream-prompt-provenance-fXkKbPVC.mjs} +3 -9
  130. package/dist/.setup/{upstream-session-fork-D3UKxgVD.mjs → upstream-session-fork-CBeVjBpT.mjs} +48 -40
  131. package/dist/.setup/{usage-BOgBEKso.mjs → usage-BMzNxeR_.mjs} +5 -4
  132. package/dist/.setup/{usage-limit-error-C0ow7DOc.mjs → usage-limit-error-QXerDo3i.mjs} +5 -20
  133. package/dist/.setup/{web-search-provider.runtime-CTGuJt6i.mjs → web-search-provider.runtime-P77OUeoo.mjs} +10 -20
  134. package/dist/api.js +25 -16
  135. package/dist/catalog-page-worker-entrypoint.js +12 -0
  136. package/dist/catalog-page.worker.js +9 -0
  137. package/dist/cli-metadata.js +1 -1
  138. package/dist/doctor-contract-api.js +50 -8
  139. package/dist/harness.js +344 -1
  140. package/dist/index.js +345 -346
  141. package/dist/media-understanding-provider.js +9 -22
  142. package/dist/migration-provider-api.js +1 -1
  143. package/dist/provider-discovery.js +1 -1
  144. package/dist/session-history-worker-runtime.js +16 -33
  145. package/dist/session-history.worker.js +1 -1
  146. package/openclaw.plugin.json +14 -2
  147. package/package.json +11 -7
  148. package/dist/.setup/attempt-context-VXVwTCfS.mjs +0 -636
  149. package/dist/.setup/compact-C3i3qlzj.mjs +0 -687
  150. package/dist/.setup/event-projector-assistant-message-DNUR1s0A.mjs +0 -105
  151. package/dist/.setup/event-projector-items-DyTQ_XqL.mjs +0 -200
  152. package/dist/.setup/harness-rxaaoN-o.mjs +0 -349
  153. package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
  154. package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
  155. package/dist/.setup/inference-proxy-CC15HuSi.mjs +0 -311
  156. package/dist/.setup/launch-args-DnMak49W.mjs +0 -111
  157. package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
  158. package/dist/.setup/native-subagent-history-YXaL6dMd.mjs +0 -135
  159. package/dist/.setup/native-subagent-task-ids-DsuOonKv.mjs +0 -411
  160. package/dist/.setup/node-exec-server.runtime-BaViBKNz.mjs +0 -226
  161. package/dist/.setup/plugin-approval-roundtrip-CjfzafAZ.mjs +0 -122
  162. package/dist/.setup/provider-fFh_-VR3.mjs +0 -50
  163. package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
  164. package/dist/.setup/sandbox-guard-BBP-RbTf.mjs +0 -166
  165. package/dist/.setup/session-binding-_0W_fHRr.mjs +0 -721
  166. package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +0 -250
  167. package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
  168. package/dist/.setup/session-initialization-DH1z6fXn.mjs +0 -75
  169. package/dist/.setup/thread-history-page-BTx-4xsg.mjs +0 -83
  170. package/dist/.setup/thread-lifecycle-Cik28qWn.mjs +0 -4904
  171. package/dist/.setup/thread-policy-Cjs4B8xf.mjs +0 -54
  172. package/dist/.setup/timeout-DZF05XrR.mjs +0 -63
  173. package/dist/.setup/transcript-history-projection-DHNBDhCU.mjs +0 -243
  174. package/dist/.setup/version-CoqzXPgK.mjs +0 -12
@@ -1,8 +1,10 @@
1
- import { c as readExecAsk, f as readRecord, l as readExecSecurity } from "./config-utils-DujwEnhg.mjs";
2
- import "./config-security-BRQ2mgW9.mjs";
3
- import "./config-parsing-CcB9iPoq.mjs";
4
- import { c as canUseCodexModelBackedApprovalsReviewerForModel$1 } from "./config-options-BsanJ8QG.mjs";
5
- import "./config-runtime-CeAhl_h4.mjs";
1
+ import { a as readExecAsk, l as readRecord, o as readExecSecurity } from "./config-utils-D0CXecki.mjs";
2
+ import "./config-security-CE-FcGw9.mjs";
3
+ import "./config-parsing-b088LyhT.mjs";
4
+ import "./auth-start-options-BPIPeEX8.mjs";
5
+ import { c as canUseCodexModelBackedApprovalsReviewerForModel$1 } from "./config-options-CzyWLTJt.mjs";
6
+ import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
7
+ import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
6
8
  import { resolveAgentConfig } from "openclaw/plugin-sdk/agent-scope-runtime";
7
9
  import { execPolicy } from "openclaw/plugin-sdk/agent-harness-runtime";
8
10
  import { resolveExecApprovalsFromFile } from "openclaw/plugin-sdk/exec-approvals-runtime";
@@ -10,7 +12,10 @@ import { resolveProviderIdForAuth } from "openclaw/plugin-sdk/provider-auth-alia
10
12
  //#region extensions/codex/src/app-server/config-exec-approvals.ts
11
13
  function resolveOpenClawExecPolicyFromConfig(params) {
12
14
  const globalExec = readRecord(params.config?.tools?.exec);
13
- const globalPolicy = applyOpenClawExecPolicyLayer(createDefaultOpenClawExecPolicy(), globalExec);
15
+ const globalPolicy = applyOpenClawExecPolicyLayer({
16
+ ...resolveOpenClawExecPolicyForMode("full"),
17
+ touched: false
18
+ }, globalExec);
14
19
  const agentId = params.agentId?.trim();
15
20
  return applyOpenClawExecPolicyLayer(globalPolicy, agentId ? readRecord(resolveAgentConfig(params.config ?? {}, agentId)?.tools?.exec) : void 0);
16
21
  }
@@ -23,17 +28,14 @@ function resolveOpenClawExecPolicyForCodexAppServer(params) {
23
28
  config: params.config,
24
29
  agentId: params.agentId
25
30
  }), params.execOverrides);
26
- return applyOpenClawExecApprovalFloors(overridePolicy, resolveOpenClawExecApprovalFloorsForCodexAppServer({
27
- approvals: params.approvals,
31
+ return applyOpenClawExecApprovalFloors(overridePolicy, params.approvals ? resolveExecApprovalsFromFile({
32
+ file: params.approvals,
28
33
  agentId: params.agentId,
29
- policy: overridePolicy
30
- }));
31
- }
32
- function createDefaultOpenClawExecPolicy() {
33
- return {
34
- ...resolveOpenClawExecPolicyForMode("full"),
35
- touched: false
36
- };
34
+ overrides: {
35
+ security: overridePolicy.security,
36
+ ask: overridePolicy.ask
37
+ }
38
+ }).agent : void 0);
37
39
  }
38
40
  function applyOpenClawExecPolicyLayer(base, exec) {
39
41
  if (!exec) return base;
@@ -57,17 +59,6 @@ function applyOpenClawExecPolicyLayer(base, exec) {
57
59
  touched: true
58
60
  };
59
61
  }
60
- function resolveOpenClawExecApprovalFloorsForCodexAppServer(params) {
61
- if (!params.approvals) return;
62
- return resolveExecApprovalsFromFile({
63
- file: params.approvals,
64
- agentId: params.agentId,
65
- overrides: {
66
- security: params.policy.security,
67
- ask: params.policy.ask
68
- }
69
- }).agent;
70
- }
71
62
  function applyOpenClawExecApprovalFloors(base, approvalFloors) {
72
63
  if (!approvalFloors) return base;
73
64
  const nextSecurity = approvalFloors.security ? execPolicy.minSecurity(base.security, approvalFloors.security) : base.security;
@@ -104,4 +95,11 @@ function canUseCodexModelBackedApprovalsReviewerForModel(params) {
104
95
  return canUseCodexModelBackedApprovalsReviewerForModel$1(params, resolveProviderIdForAuth);
105
96
  }
106
97
  //#endregion
107
- export { resolveOpenClawExecPolicyForCodexAppServer as n, canUseCodexModelBackedApprovalsReviewerForModel as t };
98
+ //#region extensions/codex/src/app-server/config.ts
99
+ var config_exports = /* @__PURE__ */ __exportAll({
100
+ CODEX_PLUGINS_MARKETPLACE_NAME: () => CODEX_PLUGINS_MARKETPLACE_NAME,
101
+ CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME: () => CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME,
102
+ resolveCodexAppServerRuntimeOptions: () => resolveCodexAppServerRuntimeOptions
103
+ });
104
+ //#endregion
105
+ export { canUseCodexModelBackedApprovalsReviewerForModel as n, resolveOpenClawExecPolicyForCodexAppServer as r, config_exports as t };
@@ -1,8 +1,12 @@
1
- import { a as normalizeHeaders, d as readNumberEnv, f as readRecord, i as normalizeCodexServiceTier, o as normalizePositiveNumber, p as resolveArgs, r as normalizeCodexAppServerSecretInput, s as readBooleanEnv, t as hashSecretForKey, u as readNonEmptyString } from "./config-utils-DujwEnhg.mjs";
2
- import { A as stripTomlLineComments, C as parseInlineOpenAIModelProviderBaseUrl, E as readCodexRequirementsToml, F as resolveEffectiveOpenClawExecModeForCodexAppServer, I as resolveSandbox, L as selectForcedDangerFullAccessSandbox, M as resolveApprovalPolicy, N as resolveApprovalsReviewer, P as resolveCodexPolicyModeForOpenClawExecMode, R as selectForcedPromptingSandbox, T as parseTomlTableSection, _ as resolveCodexAppServerUserHomeDir, a as resolveCodexAppServerNetworkProxy, b as parseAllowedApprovalPoliciesFromCodexRequirements, c as resolveTransport, h as resolveCodexAppServerHomeDir, i as normalizeRemoteWorkspaceRoot, j as assertCodexAppServerAllowedForOpenClawExecMode, m as isJsonObject, o as resolveDefaultCodexAppServerPolicy, r as inferCodexAppServerConnectionClass, s as resolvePolicyMode, t as assertCodexAppServerConnectionSecurity, w as parseTomlStringValue, y as firstTomlTableOffset } from "./config-security-BRQ2mgW9.mjs";
3
- import { a as DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME, d as readCodexPluginConfig, n as DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS, o as DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS, r as DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS, s as assertCodexAppServerCommandHasNoInlineArgs } from "./config-parsing-CcB9iPoq.mjs";
4
- import { i as readCodexAppServerConfigOptions } from "./launch-args-DnMak49W.mjs";
5
- import { normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
1
+ import { c as readNumberEnv, i as normalizeHeaders, l as readRecord, r as normalizeCodexServiceTier, s as readNonEmptyString, t as hashSecretForKey, u as resolveArgs } from "./config-utils-D0CXecki.mjs";
2
+ import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
3
+ import { C as resolveSandbox, S as resolveEffectiveOpenClawExecModeForCodexAppServer, T as selectForcedPromptingSandbox, a as resolveDefaultCodexAppServerPolicy, b as resolveApprovalsReviewer, d as parseAllowedApprovalPoliciesFromCodexRequirements, i as resolveCodexAppServerNetworkProxy, m as readCodexRequirementsToml, o as resolvePolicyMode, r as inferCodexAppServerConnectionClass, s as resolveTransport, t as assertCodexAppServerConnectionSecurity, v as assertCodexAppServerAllowedForOpenClawExecMode, w as selectForcedDangerFullAccessSandbox, x as resolveCodexPolicyModeForOpenClawExecMode, y as resolveApprovalPolicy } from "./config-security-CE-FcGw9.mjs";
4
+ import { a as DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME, d as readCodexPluginConfig, n as DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS, o as DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS, r as DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS, s as assertCodexAppServerCommandHasNoInlineArgs } from "./config-parsing-b088LyhT.mjs";
5
+ import { i as readCodexAppServerConfigOptions } from "./launch-args-DbFCehO7.mjs";
6
+ import { r as resolveCodexAppServerUserHomeDir, t as resolveCodexAppServerHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
7
+ import { normalizeTrimmedStringList, parseBooleanValue } from "openclaw/plugin-sdk/string-coerce-runtime";
8
+ import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
9
+ import { resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
6
10
  import { parse } from "smol-toml";
7
11
  import { readFileSync } from "node:fs";
8
12
  import path from "node:path";
@@ -28,18 +32,21 @@ async function readCodexEffectiveConfig(client, cwd, options) {
28
32
  //#endregion
29
33
  //#region extensions/codex/src/app-server/config-reviewer-policy.ts
30
34
  const CODEX_CONFIG_TOML_FILENAME = "config.toml";
35
+ const CODEX_CLI_WHITESPACE = /^\p{White_Space}+|\p{White_Space}+$/gu;
31
36
  /** Cloud/system config can redirect reviews after local home/profile checks have passed. */
32
37
  async function assertCodexModelBackedReviewerEffectiveConfig(params) {
33
38
  if (params.approvalsReviewer !== "auto_review" && params.approvalsReviewer !== "guardian_subagent") return;
34
39
  const response = await readCodexEffectiveConfig(params.client, params.cwd, { signal: params.signal });
35
- const effectiveConfig = response.config;
36
- const modelProvider = effectiveConfig.model_provider;
37
- const providers = effectiveConfig.model_providers;
40
+ if (!isTrustedCodexReviewerConfig(response.config)) throw new Error("Codex model-backed approval reviewer requires the running server to use a trusted OpenAI endpoint");
41
+ return response;
42
+ }
43
+ function isTrustedCodexReviewerConfig(config) {
44
+ const modelProvider = config.model_provider;
45
+ const providers = config.model_providers;
38
46
  const providerRecords = providers == null ? void 0 : readRecord(providers);
39
47
  const provider = providerRecords?.openai;
40
48
  const openAIProvider = provider == null ? void 0 : readRecord(provider);
41
- if (modelProvider != null && modelProvider !== "openai" || providers != null && !providerRecords || provider != null && !openAIProvider || !isTrustedOptionalReviewerEndpoint(effectiveConfig.openai_base_url, isNativeOpenAIBaseUrl) || !isTrustedOptionalReviewerEndpoint(effectiveConfig.chatgpt_base_url, isNativeChatGPTBaseUrl) || !isTrustedOptionalReviewerEndpoint(openAIProvider?.base_url, isNativeOpenAIBaseUrl)) throw new Error("Codex model-backed approval reviewer requires the running server to use a trusted OpenAI endpoint");
42
- return response;
49
+ return (modelProvider == null || modelProvider === "openai") && (providers == null || providerRecords !== void 0) && (provider == null || openAIProvider !== void 0) && isTrustedOptionalReviewerEndpoint(config.openai_base_url, isNativeOpenAIBaseUrl) && isTrustedOptionalReviewerEndpoint(config.chatgpt_base_url, isNativeChatGPTBaseUrl) && isTrustedOptionalReviewerEndpoint(openAIProvider?.base_url, isNativeOpenAIBaseUrl);
43
50
  }
44
51
  function isTrustedOptionalReviewerEndpoint(value, isTrusted) {
45
52
  return value == null || typeof value === "string" && isTrusted(value);
@@ -51,12 +58,9 @@ function canUseCodexModelBackedApprovalsReviewerForModel(params, resolveAuthProv
51
58
  return (inferredProvider ?? explicitProvider) === "openai" && isTrustedCodexModelBackedOpenAIProvider(params, resolveAuthProviderId);
52
59
  }
53
60
  function isTrustedCodexModelBackedOpenAIProvider(params, resolveAuthProviderId) {
54
- if (!openAIBaseUrlEnvOverridesAreTrustedForModelBackedReview(params.env)) return false;
55
- const codexBaseUrlOverrides = readCodexBaseUrlOverridesForModelBackedReview(params);
56
- if (codexBaseUrlOverrides === false || !codexBaseUrlOverrides.openAI.every(isNativeOpenAIBaseUrl) || !codexBaseUrlOverrides.chatGPT.every(isNativeChatGPTBaseUrl)) return false;
57
- const openAIProviders = readConfiguredOpenAIProvidersForModelBackedReview(params.config, resolveAuthProviderId);
58
- if (openAIProviders.length === 0) return true;
59
- return openAIProviders.every((openAIProvider) => configuredOpenAIProviderIsTrustedForModelBackedReview(openAIProvider, params.model));
61
+ if (![params.env?.OPENAI_BASE_URL, params.env?.OPENAI_API_BASE].every(isNativeOpenAIBaseUrl)) return false;
62
+ if (!nativeCodexConfigIsTrustedForModelBackedReview(params)) return false;
63
+ return readConfiguredOpenAIProvidersForModelBackedReview(params.config, resolveAuthProviderId).every((openAIProvider) => configuredOpenAIProviderIsTrustedForModelBackedReview(openAIProvider, params.model));
60
64
  }
61
65
  function resolveCodexModelBackedReviewerPolicyContext(params) {
62
66
  const provider = params.provider?.trim();
@@ -67,46 +71,23 @@ function resolveCodexModelBackedReviewerPolicyContext(params) {
67
71
  const bindingModelProvider = params.bindingModelProvider?.trim();
68
72
  const currentModel = params.model?.trim();
69
73
  const bindingModel = params.bindingModel?.trim();
70
- if (bindingModelProvider && currentModel && bindingModel && currentModel === bindingModel) return {
71
- modelProvider: normalizeCodexModelBackedReviewerPolicyProvider(bindingModelProvider),
72
- model: params.model ?? params.bindingModel
73
- };
74
- const currentModelProvider = inferProviderFromModelRef(params.model);
75
- if (currentModelProvider) return {
76
- modelProvider: normalizeCodexModelBackedReviewerPolicyProvider(currentModelProvider),
77
- model: params.model
78
- };
79
- if (bindingModelProvider) return {
80
- modelProvider: normalizeCodexModelBackedReviewerPolicyProvider(bindingModelProvider),
81
- model: params.model ?? params.bindingModel
82
- };
74
+ const modelProvider = bindingModelProvider && currentModel && bindingModel && currentModel === bindingModel ? bindingModelProvider : (inferProviderFromModelRef(params.model) ?? bindingModelProvider) || (params.nativeAuthProfile === true ? "openai" : void 0);
83
75
  return {
84
- modelProvider: params.nativeAuthProfile === true ? "openai" : void 0,
76
+ modelProvider: modelProvider ? normalizeCodexModelBackedReviewerPolicyProvider(modelProvider) : void 0,
85
77
  model: params.model ?? params.bindingModel
86
78
  };
87
79
  }
88
- function readCodexBaseUrlOverridesForModelBackedReview(params) {
80
+ function nativeCodexConfigIsTrustedForModelBackedReview(params) {
89
81
  const configToml = readCodexAppServerConfigToml(params);
90
82
  if (configToml === false) return false;
91
- const configTomls = configToml === void 0 ? [] : [configToml];
92
83
  const nativeOverrides = readNativeCodexReviewerConfigOverrides(params);
93
84
  if (nativeOverrides === false) return false;
94
- configTomls.push(...nativeOverrides);
95
- const openAI = [];
96
- const chatGPT = [];
97
- for (const content of configTomls) {
98
- const topLevelContent = stripTomlLineComments(content).slice(0, firstTomlTableOffset(content));
99
- const modelProviderOpenAISection = parseTomlTableSection(content, "model_providers.openai");
100
- const modelProvider = parseTomlStringValue(topLevelContent, "model_provider");
101
- if (modelProvider === false || modelProvider && modelProvider !== "openai") return false;
102
- openAI.push(parseTomlStringValue(topLevelContent, "openai_base_url"), parseTomlStringValue(topLevelContent, "model_providers.openai.base_url"), parseInlineOpenAIModelProviderBaseUrl(topLevelContent), modelProviderOpenAISection ? parseTomlStringValue(modelProviderOpenAISection, "base_url") : void 0);
103
- chatGPT.push(parseTomlStringValue(topLevelContent, "chatgpt_base_url"));
85
+ if (configToml !== void 0) try {
86
+ nativeOverrides.unshift(parse(configToml, { integersAsBigInt: true }));
87
+ } catch {
88
+ return false;
104
89
  }
105
- if ([...openAI, ...chatGPT].includes(false)) return false;
106
- return {
107
- openAI: openAI.filter((entry) => typeof entry === "string"),
108
- chatGPT: chatGPT.filter((entry) => typeof entry === "string")
109
- };
90
+ return nativeOverrides.every(isTrustedCodexReviewerConfig);
110
91
  }
111
92
  function readNativeCodexReviewerConfigOverrides(params) {
112
93
  if (params.codexArgs?.some((arg) => !arg)) return false;
@@ -115,20 +96,39 @@ function readNativeCodexReviewerConfigOverrides(params) {
115
96
  for (const { name, value } of readCodexAppServerConfigOptions(params.codexArgs ?? [])) {
116
97
  if (!value) return false;
117
98
  if (name === "--profile" || name === "-p") profile = value;
118
- else overrides.push(`${value}\n`);
99
+ else {
100
+ const override = parseNativeCodexReviewerConfigOverride(value);
101
+ if (override === false) return false;
102
+ overrides.push(override);
103
+ }
119
104
  }
120
105
  if (profile) {
121
106
  if (path.basename(profile) !== profile || profile === "." || profile === "..") return false;
122
107
  const configPath = resolveCodexAppServerConfigPath(params);
123
108
  if (!configPath) return false;
124
109
  try {
125
- overrides.unshift(readFileSync(path.join(path.dirname(configPath), `${profile}.config.toml`), "utf8"));
110
+ overrides.unshift(parse(readFileSync(path.join(path.dirname(configPath), `${profile}.config.toml`), "utf8"), { integersAsBigInt: true }));
126
111
  } catch (error) {
127
112
  if (readErrorCode(error) !== "ENOENT") return false;
128
113
  }
129
114
  }
130
115
  return overrides;
131
116
  }
117
+ function parseNativeCodexReviewerConfigOverride(override) {
118
+ const separator = override.indexOf("=");
119
+ if (separator < 0) return false;
120
+ const key = override.slice(0, separator).replace(CODEX_CLI_WHITESPACE, "");
121
+ if (!key) return false;
122
+ const raw = override.slice(separator + 1).replace(CODEX_CLI_WHITESPACE, "");
123
+ let value;
124
+ try {
125
+ value = parse(`_x_ = ${raw}`, { integersAsBigInt: true })["_x_"];
126
+ } catch {
127
+ value = raw.replace(/^["']+|["']+$/g, "");
128
+ }
129
+ for (const segment of key.split(".").toReversed()) value = { [segment]: value };
130
+ return readRecord(value) ?? false;
131
+ }
132
132
  function readCodexAppServerConfigToml(params) {
133
133
  if (params.codexConfigToml !== void 0) return params.codexConfigToml ?? void 0;
134
134
  const configPath = resolveCodexAppServerConfigPath(params);
@@ -163,6 +163,7 @@ function codexConfigEnablesNativeComputerUse(params) {
163
163
  return false;
164
164
  }
165
165
  function resolveCodexAppServerConfigPath(params) {
166
+ if (params.codexHome) return path.join(params.codexHome, CODEX_CONFIG_TOML_FILENAME);
166
167
  if (params.homeScope === "user") return path.join(resolveCodexAppServerUserHomeDir(params.env), CODEX_CONFIG_TOML_FILENAME);
167
168
  const agentDir = readNonEmptyString(params.agentDir);
168
169
  return agentDir ? path.join(resolveCodexAppServerHomeDir(agentDir), CODEX_CONFIG_TOML_FILENAME) : void 0;
@@ -218,9 +219,6 @@ function isNativeOpenAIBaseUrl(value) {
218
219
  return false;
219
220
  }
220
221
  }
221
- function openAIBaseUrlEnvOverridesAreTrustedForModelBackedReview(env) {
222
- return [env?.OPENAI_BASE_URL, env?.OPENAI_API_BASE].every(isNativeOpenAIBaseUrl);
223
- }
224
222
  function isNativeChatGPTBaseUrl(value) {
225
223
  if (typeof value !== "string" || !value.trim()) return true;
226
224
  try {
@@ -271,7 +269,7 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
271
269
  const args = resolveArgs(config.args, env.OPENCLAW_CODEX_APP_SERVER_ARGS);
272
270
  const headers = normalizeHeaders(config.headers);
273
271
  const clearEnv = normalizeTrimmedStringList(config.clearEnv);
274
- const authToken = normalizeCodexAppServerSecretInput({
272
+ const authToken = normalizeResolvedSecretInputString({
275
273
  value: config.authToken,
276
274
  path: "plugins.entries.codex.config.appServer.authToken"
277
275
  });
@@ -281,7 +279,7 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
281
279
  url
282
280
  });
283
281
  const remoteAppsSubstrate = "preconfigured";
284
- const remoteWorkspaceRoot = normalizeRemoteWorkspaceRoot(config.remoteWorkspaceRoot);
282
+ const remoteWorkspaceRoot = readNonEmptyString(config.remoteWorkspaceRoot);
285
283
  const execMode = resolveEffectiveOpenClawExecModeForCodexAppServer({
286
284
  execMode: params.execMode,
287
285
  execPolicy: params.execPolicy
@@ -363,7 +361,7 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
363
361
  env
364
362
  });
365
363
  const managedCommandOrder = params.managedCommandOrder ?? (homeScope === "user" || computerUseConfig.enabled ? "desktop-first" : "package-first");
366
- const includeManagedCommandOrder = commandSource === "managed" && (managedCommandOrder === "desktop-first" || params.managedCommandOrder === "package-first");
364
+ const includeManagedCommandOrder = commandSource === "managed" && (managedCommandOrder === "desktop-first" || params.managedCommandOrder !== void 0);
367
365
  const managedComputerUsePluginNames = [.../* @__PURE__ */ new Set([DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME, computerUseConfig.pluginName])];
368
366
  return {
369
367
  start: {
@@ -388,12 +386,13 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
388
386
  ...remoteWorkspaceRoot ? { remoteWorkspaceRoot } : {},
389
387
  codeModeOnly: config.codeModeOnly === true,
390
388
  loopDetectionPreToolUseRelay: config.loopDetectionPreToolUseRelay !== false,
391
- requestTimeoutMs: normalizePositiveNumber(config.requestTimeoutMs, 6e4),
389
+ requestTimeoutMs: resolvePositiveTimerTimeoutMs(config.requestTimeoutMs, 6e4),
392
390
  approvalPolicy: forcedPolicy?.approvalPolicy ?? approvalPolicy,
393
391
  approvalPolicySource,
394
392
  sandbox: resolvedSandbox,
395
393
  approvalsReviewer: forcedPolicy?.approvalsReviewer ?? explicitApprovalsReviewer ?? defaultPolicy?.approvalsReviewer ?? (policyMode === "guardian" ? "auto_review" : "user"),
396
394
  ...serviceTier ? { serviceTier } : {},
395
+ enableUltrafast: config.enableUltrafast === true,
397
396
  ...resolveCodexAppServerNetworkProxy(config.networkProxy, resolvedSandbox)
398
397
  };
399
398
  }
@@ -435,6 +434,7 @@ function resolveCodexAppServerStartOptionsForAgent(params) {
435
434
  if (!params.agentDir) throw new Error("Agent-scoped Codex requires an OpenClaw agent directory");
436
435
  return codexConfigEnablesNativeComputerUse({
437
436
  agentDir: params.agentDir,
437
+ codexHome: startOptions.codexHome,
438
438
  codexConfigToml: params.codexConfigToml,
439
439
  env: params.env,
440
440
  homeScope: "agent",
@@ -452,17 +452,17 @@ function resolveCodexComputerUseConfig(params = {}) {
452
452
  const marketplaceName = readNonEmptyString(params.overrides?.marketplaceName) ?? readNonEmptyString(config.marketplaceName) ?? readNonEmptyString(env.OPENCLAW_CODEX_COMPUTER_USE_MARKETPLACE_NAME);
453
453
  const configuredPluginName = readNonEmptyString(params.overrides?.pluginName) ?? readNonEmptyString(config.pluginName) ?? readNonEmptyString(env.OPENCLAW_CODEX_COMPUTER_USE_PLUGIN_NAME);
454
454
  const configuredMcpServerName = readNonEmptyString(params.overrides?.mcpServerName) ?? readNonEmptyString(config.mcpServerName) ?? readNonEmptyString(env.OPENCLAW_CODEX_COMPUTER_USE_MCP_SERVER_NAME);
455
- const autoInstall = params.overrides?.autoInstall ?? config.autoInstall ?? readBooleanEnv(env.OPENCLAW_CODEX_COMPUTER_USE_AUTO_INSTALL) ?? false;
456
- const marketplaceDiscoveryTimeoutMs = normalizePositiveNumber(params.overrides?.marketplaceDiscoveryTimeoutMs ?? config.marketplaceDiscoveryTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS);
457
- const liveTestTimeoutMs = normalizePositiveNumber(params.overrides?.liveTestTimeoutMs ?? config.liveTestTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS);
458
- const toolCallTimeoutMs = normalizePositiveNumber(params.overrides?.toolCallTimeoutMs ?? config.toolCallTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS);
455
+ const autoInstall = params.overrides?.autoInstall ?? config.autoInstall ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_AUTO_INSTALL) ?? false;
456
+ const marketplaceDiscoveryTimeoutMs = resolvePositiveTimerTimeoutMs(params.overrides?.marketplaceDiscoveryTimeoutMs ?? config.marketplaceDiscoveryTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS);
457
+ const liveTestTimeoutMs = resolvePositiveTimerTimeoutMs(params.overrides?.liveTestTimeoutMs ?? config.liveTestTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS);
458
+ const toolCallTimeoutMs = resolvePositiveTimerTimeoutMs(params.overrides?.toolCallTimeoutMs ?? config.toolCallTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS);
459
459
  const healthCheckIntervalMinutes = normalizeComputerUseHealthCheckIntervalMinutes(params.overrides?.healthCheckIntervalMinutes ?? config.healthCheckIntervalMinutes ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_HEALTH_CHECK_INTERVAL_MINUTES));
460
- const healthCheckEnabled = params.overrides?.healthCheckEnabled ?? config.healthCheckEnabled ?? readBooleanEnv(env.OPENCLAW_CODEX_COMPUTER_USE_HEALTH_CHECK_ENABLED) ?? false;
460
+ const healthCheckEnabled = params.overrides?.healthCheckEnabled ?? config.healthCheckEnabled ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_HEALTH_CHECK_ENABLED) ?? false;
461
461
  const pluginCacheMode = normalizeComputerUsePluginCacheMode(params.overrides?.pluginCacheMode) ?? normalizeComputerUsePluginCacheMode(config.pluginCacheMode) ?? normalizeComputerUsePluginCacheMode(env.OPENCLAW_CODEX_COMPUTER_USE_PLUGIN_CACHE_MODE) ?? "independent";
462
- const strictReadiness = params.overrides?.strictReadiness ?? config.strictReadiness ?? readBooleanEnv(env.OPENCLAW_CODEX_COMPUTER_USE_STRICT_READINESS) ?? false;
463
- const autoRepair = params.overrides?.autoRepair ?? config.autoRepair ?? readBooleanEnv(env.OPENCLAW_CODEX_COMPUTER_USE_AUTO_REPAIR) ?? false;
462
+ const strictReadiness = params.overrides?.strictReadiness ?? config.strictReadiness ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_STRICT_READINESS) ?? false;
463
+ const autoRepair = params.overrides?.autoRepair ?? config.autoRepair ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_AUTO_REPAIR) ?? false;
464
464
  return {
465
- enabled: params.overrides?.enabled ?? config.enabled ?? readBooleanEnv(env.OPENCLAW_CODEX_COMPUTER_USE) ?? Boolean(autoInstall || marketplaceSource || marketplacePath || marketplaceName || configuredPluginName || configuredMcpServerName),
465
+ enabled: params.overrides?.enabled ?? config.enabled ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE) ?? Boolean(autoInstall || marketplaceSource || marketplacePath || marketplaceName || configuredPluginName || configuredMcpServerName),
466
466
  autoInstall,
467
467
  marketplaceDiscoveryTimeoutMs,
468
468
  liveTestTimeoutMs,
@@ -498,7 +498,10 @@ function codexAppServerStartOptionsKey(options, params = {}) {
498
498
  url: options.url ?? null,
499
499
  authToken: hashSecretForKey(options.authToken, "authToken"),
500
500
  headers: Object.entries(options.headers).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, value]) => [key, hashSecretForKey(value, `header:${key}`)]),
501
- env: Object.entries(options.env ?? {}).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, value]) => [key, hashSecretForKey(value, `env:${key}`)]),
501
+ env: Object.entries({
502
+ ...options.env,
503
+ ...options.codexHome ? { CODEX_HOME: options.codexHome } : {}
504
+ }).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, value]) => [key, hashSecretForKey(value, `env:${key}`)]),
502
505
  clearEnv: [...options.clearEnv ?? []].toSorted(),
503
506
  authProfileId: params.authProfileId ?? null,
504
507
  authBindingFingerprint: params.authBindingFingerprint ?? null,
@@ -1,4 +1,4 @@
1
- import { i as normalizeCodexServiceTier, m as CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN } from "./config-utils-DujwEnhg.mjs";
1
+ import { d as CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN, r as normalizeCodexServiceTier } from "./config-utils-D0CXecki.mjs";
2
2
  import { asNullableRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { z } from "zod";
4
4
  import { buildSecretInputSchema } from "openclaw/plugin-sdk/secret-input";
@@ -24,55 +24,33 @@ const DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS = 6e4;
24
24
  const DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS = 6e4;
25
25
  const DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS = 6e4;
26
26
  const DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX = "openclaw-network";
27
- const codexAppServerTransportSchema = z.enum([
28
- "stdio",
29
- "websocket",
30
- "unix"
31
- ]);
32
- const codexAppServerHomeScopeSchema = z.enum(["agent", "user"]);
33
27
  const SecretInputSchema = buildSecretInputSchema();
34
- const codexAppServerPolicyModeSchema = z.enum(["yolo", "guardian"]);
35
28
  const codexAppServerApprovalPolicySchema = z.preprocess((value) => value === "on-failure" ? "on-request" : value, z.enum(["never", "on-request"]));
36
- const codexAppServerSandboxSchema = z.enum([
37
- "read-only",
38
- "workspace-write",
39
- "danger-full-access"
40
- ]);
41
- const codexAppServerApprovalsReviewerSchema = z.enum([
42
- "user",
43
- "auto_review",
44
- "guardian_subagent"
45
- ]);
46
- const codexDynamicToolsLoadingSchema = z.enum(["searchable", "direct"]);
47
29
  const codexComputerUseHealthIntervalSchema = z.union([
48
30
  z.literal(30),
49
31
  z.literal(60),
50
32
  z.literal(120),
51
33
  z.literal(240)
52
34
  ]);
53
- const codexComputerUsePluginCacheModeSchema = z.enum(["shared", "independent"]);
54
35
  const codexPluginDestructivePolicySchema = z.union([
55
36
  z.boolean(),
56
37
  z.literal("auto"),
57
38
  z.literal("ask")
58
39
  ]);
59
40
  const codexAppServerServiceTierSchema = z.preprocess((value) => value === null ? null : normalizeCodexServiceTier(value), z.string().trim().min(1).nullable().optional()).optional();
60
- const codexAppServerCyberFailoverSchema = z.object({
41
+ const codexAppServerCyberFailoverSchema = z.strictObject({
61
42
  mode: z.enum(["auto", "off"]).optional(),
62
43
  model: z.string().trim().min(1).optional(),
63
44
  cooloffMs: z.number().positive().optional()
64
- }).strict();
65
- const codexAppServerExperimentalSchema = z.object({ sandboxExecServer: z.boolean().optional() }).strict();
66
- const codexAppServerRemoteWorkspaceRootSchema = z.string().trim().min(1);
67
- const codexAppServerNetworkProxyDomainPermissionSchema = z.enum(["allow", "deny"]);
68
- const codexAppServerNetworkProxyUnixSocketPermissionSchema = z.enum(["allow", "none"]);
69
- const codexAppServerNetworkProxySchema = z.object({
45
+ });
46
+ const codexAppServerExperimentalSchema = z.strictObject({ sandboxExecServer: z.boolean().optional() });
47
+ const codexAppServerNetworkProxySchema = z.strictObject({
70
48
  enabled: z.boolean().optional(),
71
49
  profileName: z.string().trim().min(1).optional(),
72
50
  baseProfile: z.enum(["read-only", "workspace"]).optional(),
73
51
  mode: z.enum(["limited", "full"]).optional(),
74
- domains: z.record(z.string(), codexAppServerNetworkProxyDomainPermissionSchema).optional(),
75
- unixSockets: z.record(z.string(), codexAppServerNetworkProxyUnixSocketPermissionSchema).optional(),
52
+ domains: z.record(z.string(), z.enum(["allow", "deny"])).optional(),
53
+ unixSockets: z.record(z.string(), z.enum(["allow", "none"])).optional(),
76
54
  proxyUrl: z.string().trim().min(1).optional(),
77
55
  socksUrl: z.string().trim().min(1).optional(),
78
56
  enableSocks5: z.boolean().optional(),
@@ -81,45 +59,45 @@ const codexAppServerNetworkProxySchema = z.object({
81
59
  allowLocalBinding: z.boolean().optional(),
82
60
  dangerouslyAllowNonLoopbackProxy: z.boolean().optional(),
83
61
  dangerouslyAllowAllUnixSockets: z.boolean().optional()
84
- }).strict();
85
- const codexPluginEntryConfigSchema = z.object({
62
+ });
63
+ const codexPluginEntryConfigSchema = z.strictObject({
86
64
  enabled: z.boolean().optional(),
87
65
  marketplaceName: z.string().regex(CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN).optional(),
88
66
  pluginName: z.string().trim().min(1).optional(),
89
67
  allow_destructive_actions: codexPluginDestructivePolicySchema.optional()
90
- }).strict();
91
- const codexPluginsConfigSchema = z.object({
68
+ });
69
+ const codexPluginsConfigSchema = z.strictObject({
92
70
  enabled: z.boolean().optional(),
93
71
  allow_all_plugins: z.boolean().optional(),
94
72
  allow_destructive_actions: codexPluginDestructivePolicySchema.optional(),
95
73
  plugins: z.record(z.string(), codexPluginEntryConfigSchema).optional()
96
- }).strict();
97
- const codexSupervisionEndpointSchema = z.union([z.object({
74
+ });
75
+ const codexSupervisionEndpointSchema = z.union([z.strictObject({
98
76
  id: z.string().optional(),
99
77
  label: z.string().optional(),
100
78
  transport: z.literal("stdio-proxy").optional(),
101
79
  command: z.string().optional(),
102
80
  args: z.array(z.string()).optional(),
103
81
  cwd: z.string().optional()
104
- }).strict(), z.object({
82
+ }), z.strictObject({
105
83
  id: z.string().optional(),
106
84
  label: z.string().optional(),
107
85
  transport: z.literal("websocket"),
108
86
  url: z.string(),
109
87
  authTokenEnv: z.string().optional()
110
- }).strict()]);
111
- const codexSupervisionConfigSchema = z.object({
88
+ })]);
89
+ const codexSupervisionConfigSchema = z.strictObject({
112
90
  enabled: z.boolean().optional(),
113
91
  endpoints: z.array(codexSupervisionEndpointSchema).optional(),
114
92
  allowRawTranscripts: z.boolean().optional(),
115
93
  allowWriteControls: z.boolean().optional()
116
- }).strict();
117
- const codexPluginConfigSchema = z.object({
118
- codexDynamicToolsLoading: codexDynamicToolsLoadingSchema.optional(),
94
+ });
95
+ const codexPluginConfigSchema = z.strictObject({
96
+ codexDynamicToolsLoading: z.enum(["searchable", "direct"]).optional(),
119
97
  codexDynamicToolsExclude: z.array(z.string()).optional(),
120
98
  sessionCatalog: codexSessionCatalogConfigSchema.optional(),
121
99
  discovery: codexDiscoveryConfigSchema.optional(),
122
- computerUse: z.object({
100
+ computerUse: z.strictObject({
123
101
  enabled: z.boolean().optional(),
124
102
  autoInstall: z.boolean().optional(),
125
103
  marketplaceDiscoveryTimeoutMs: z.number().positive().optional(),
@@ -127,7 +105,7 @@ const codexPluginConfigSchema = z.object({
127
105
  toolCallTimeoutMs: z.number().positive().optional(),
128
106
  healthCheckEnabled: z.boolean().optional(),
129
107
  healthCheckIntervalMinutes: codexComputerUseHealthIntervalSchema.optional(),
130
- pluginCacheMode: codexComputerUsePluginCacheModeSchema.optional(),
108
+ pluginCacheMode: z.enum(["shared", "independent"]).optional(),
131
109
  strictReadiness: z.boolean().optional(),
132
110
  autoRepair: z.boolean().optional(),
133
111
  marketplaceSource: z.string().optional(),
@@ -135,43 +113,65 @@ const codexPluginConfigSchema = z.object({
135
113
  marketplaceName: z.string().optional(),
136
114
  pluginName: z.string().optional(),
137
115
  mcpServerName: z.string().optional()
138
- }).strict().optional(),
116
+ }).optional(),
139
117
  codexPlugins: z.unknown().optional(),
140
118
  supervision: codexSupervisionConfigSchema.optional(),
141
- appServer: z.object({
142
- mode: codexAppServerPolicyModeSchema.optional(),
143
- transport: codexAppServerTransportSchema.optional(),
144
- homeScope: codexAppServerHomeScopeSchema.optional(),
119
+ appServer: z.strictObject({
120
+ mode: z.enum(["yolo", "guardian"]).optional(),
121
+ transport: z.enum([
122
+ "stdio",
123
+ "websocket",
124
+ "unix"
125
+ ]).optional(),
126
+ homeScope: z.enum(["agent", "user"]).optional(),
145
127
  command: z.string().optional(),
146
128
  args: z.union([z.array(z.string()), z.string()]).optional(),
147
129
  url: z.string().optional(),
148
130
  authToken: SecretInputSchema.optional(),
149
131
  headers: z.record(z.string(), SecretInputSchema).optional(),
150
132
  clearEnv: z.array(z.string()).optional(),
151
- remoteWorkspaceRoot: codexAppServerRemoteWorkspaceRootSchema.optional(),
133
+ remoteWorkspaceRoot: z.string().trim().min(1).optional(),
152
134
  codeModeOnly: z.boolean().optional(),
153
135
  loopDetectionPreToolUseRelay: z.boolean().optional(),
154
136
  requestTimeoutMs: z.number().positive().optional(),
155
137
  approvalPolicy: codexAppServerApprovalPolicySchema.optional(),
156
- sandbox: codexAppServerSandboxSchema.optional(),
157
- approvalsReviewer: codexAppServerApprovalsReviewerSchema.optional(),
138
+ sandbox: z.enum([
139
+ "read-only",
140
+ "workspace-write",
141
+ "danger-full-access"
142
+ ]).optional(),
143
+ approvalsReviewer: z.enum([
144
+ "user",
145
+ "auto_review",
146
+ "guardian_subagent"
147
+ ]).optional(),
158
148
  serviceTier: codexAppServerServiceTierSchema,
149
+ enableUltrafast: z.boolean().optional(),
159
150
  cyberFailover: codexAppServerCyberFailoverSchema.optional(),
160
151
  networkProxy: codexAppServerNetworkProxySchema.optional(),
161
152
  defaultWorkspaceDir: z.string().optional(),
162
153
  experimental: codexAppServerExperimentalSchema.optional()
163
- }).strict().optional()
164
- }).strict();
154
+ }).optional()
155
+ });
165
156
  function readCodexPluginConfig(value) {
166
- if (asNullableRecord(asNullableRecord(value)?.appServer)?.approvalPolicy === "untrusted") throw new Error("plugins.entries.codex.config.appServer.approvalPolicy=\"untrusted\" is retired; run \"openclaw doctor --fix\" to migrate it to \"on-request\".");
157
+ const appServer = asNullableRecord(asNullableRecord(value)?.appServer);
158
+ if (appServer?.approvalPolicy === "untrusted") throw new Error("plugins.entries.codex.config.appServer.approvalPolicy=\"untrusted\" is retired; run \"openclaw doctor --fix\" to migrate it to \"on-request\".");
167
159
  const parsed = codexPluginConfigSchema.safeParse(value);
168
- if (!parsed.success) return {};
160
+ if (!parsed.success) {
161
+ if (asNullableRecord(appServer?.networkProxy)?.enabled === true) {
162
+ const issuePath = parsed.error.issues[0]?.path ?? [];
163
+ const fieldDepth = issuePath[0] === "appServer" && issuePath[1] === "networkProxy" ? 3 : 2;
164
+ const fieldPath = ["plugins.entries.codex.config", ...issuePath.slice(0, fieldDepth)].join(".");
165
+ throw new Error(`Invalid ${fieldPath}; fix this field before starting Codex with network restrictions. Run "openclaw doctor --fix" for supported repairs.`);
166
+ }
167
+ return {};
168
+ }
169
169
  const { codexPlugins: rawCodexPlugins, ...config } = parsed.data;
170
170
  const plugins = codexPluginsConfigSchema.safeParse(rawCodexPlugins);
171
171
  if (!plugins.success) return config;
172
172
  return {
173
173
  ...config,
174
- ...plugins.data ? { codexPlugins: plugins.data } : {}
174
+ codexPlugins: plugins.data
175
175
  };
176
176
  }
177
177
  function isCodexSandboxExecServerEnabled(pluginConfig, sandbox) {
@@ -196,7 +196,7 @@ function resolveCodexPluginsPolicy(pluginConfig) {
196
196
  const enabled = config?.enabled === true;
197
197
  const destructivePolicy = resolveCodexPluginDestructivePolicy(config?.allow_destructive_actions ?? true);
198
198
  const pluginPolicies = Object.entries(config?.plugins ?? {}).flatMap(([configKey, entry]) => {
199
- if (!isCodexPluginMarketplaceName(entry.marketplaceName) || !entry.pluginName) return [];
199
+ if (!entry.marketplaceName || !entry.pluginName) return [];
200
200
  const entryDestructivePolicy = resolveCodexPluginDestructivePolicy(entry.allow_destructive_actions ?? config?.allow_destructive_actions ?? true);
201
201
  return [{
202
202
  configKey,
@@ -216,9 +216,6 @@ function resolveCodexPluginsPolicy(pluginConfig) {
216
216
  pluginPolicies
217
217
  };
218
218
  }
219
- function isCodexPluginMarketplaceName(value) {
220
- return typeof value === "string" && CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN.test(value);
221
- }
222
219
  function resolveCodexPluginDestructivePolicy(policy) {
223
220
  if (policy === "auto" || policy === "ask") return {
224
221
  allowDestructiveActions: true,
@@ -1,5 +1,5 @@
1
- import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
- import { r as createCodexAppServerConfig } from "./config-options-BsanJ8QG.mjs";
1
+ import { r as createCodexAppServerConfig } from "./config-options-CzyWLTJt.mjs";
2
+ import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
3
3
  import { resolveProviderIdForAuth } from "openclaw/plugin-sdk/provider-auth-aliases";
4
4
  //#region extensions/codex/src/app-server/config-runtime.ts
5
5
  var config_runtime_exports = /* @__PURE__ */ __exportAll({