@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,12 +1,10 @@
1
- import { u as readNonEmptyString } from "./config-utils-DujwEnhg.mjs";
2
- import { t as DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX } from "./config-parsing-CcB9iPoq.mjs";
3
- import { r as normalizeCodexAppServerArgs } from "./launch-args-DnMak49W.mjs";
4
- import { isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
1
+ import { l as readRecord, s as readNonEmptyString } from "./config-utils-D0CXecki.mjs";
2
+ import { t as DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX } from "./config-parsing-b088LyhT.mjs";
5
3
  import { createHash } from "node:crypto";
6
4
  import { AgentHarnessPreflightError } from "openclaw/plugin-sdk/agent-harness-registration";
5
+ import { parse } from "smol-toml";
7
6
  import { readFileSync } from "node:fs";
8
- import path from "node:path";
9
- import { homedir, hostname } from "node:os";
7
+ import { hostname } from "node:os";
10
8
  import { isLoopbackHost } from "openclaw/plugin-sdk/request-url";
11
9
  //#region extensions/codex/src/app-server/config-exec-policy.ts
12
10
  function selectForcedPromptingSandbox(params) {
@@ -68,129 +66,43 @@ function resolveCodexRequirementsPath(env, platform) {
68
66
  return UNIX_CODEX_REQUIREMENTS_PATH;
69
67
  }
70
68
  function parseAllowedSandboxModesFromCodexRequirements(content, hostName) {
71
- const remoteSandboxModes = parseMatchingRemoteSandboxModesFromCodexRequirements(content, hostName);
69
+ const requirements = parseCodexRequirements(content);
70
+ const remoteSandboxModes = parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, hostName);
72
71
  if (remoteSandboxModes !== void 0) return remoteSandboxModes;
73
- return parseRequirementsSandboxModes(parseTopLevelRequirementsStringArray(content, "allowed_sandbox_modes"));
72
+ return parseRequirementsValues(requirements?.allowed_sandbox_modes, normalizeRequirementsSandboxMode);
74
73
  }
75
74
  function parseAllowedApprovalPoliciesFromCodexRequirements(content) {
76
- const values = parseTopLevelRequirementsStringArray(content, "allowed_approval_policies");
77
- if (values === void 0) return;
78
- const normalizedPolicies = values.map((entry) => normalizeRequirementsApprovalPolicy(entry)).filter((entry) => entry !== void 0);
79
- return normalizedPolicies.length > 0 ? new Set(normalizedPolicies) : void 0;
75
+ return parseRequirementsValues(parseCodexRequirements(content)?.allowed_approval_policies, normalizeRequirementsApprovalPolicy);
80
76
  }
81
77
  function parseAllowedApprovalsReviewersFromCodexRequirements(content) {
82
- const values = parseTopLevelRequirementsStringArray(content, "allowed_approvals_reviewers");
83
- if (values === void 0) return;
84
- const normalizedReviewers = values.map((entry) => normalizeRequirementsApprovalsReviewer(entry)).filter((entry) => entry !== void 0);
85
- return normalizedReviewers.length > 0 ? new Set(normalizedReviewers) : void 0;
78
+ return parseRequirementsValues(parseCodexRequirements(content)?.allowed_approvals_reviewers, (value) => resolveApprovalsReviewer(value.trim().toLowerCase()));
86
79
  }
87
- function parseMatchingRemoteSandboxModesFromCodexRequirements(content, hostName) {
80
+ function parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, hostName) {
88
81
  const normalizedHostName = normalizeRequirementsHostName(hostName);
89
- if (normalizedHostName === void 0) return;
90
- for (const section of parseTomlArrayTableSections(content, "remote_sandbox_config")) {
91
- const patterns = parseRequirementsStringArray(section, "hostname_patterns");
82
+ const remoteConfigs = requirements?.remote_sandbox_config;
83
+ if (normalizedHostName === void 0 || !Array.isArray(remoteConfigs)) return;
84
+ for (const section of remoteConfigs) {
85
+ const config = readRecord(section);
86
+ const patterns = readRequirementsStringArray(config?.hostname_patterns);
92
87
  if (!patterns || !requirementsHostNameMatchesAnyPattern(normalizedHostName, patterns)) continue;
93
- return parseRequirementsSandboxModes(parseRequirementsStringArray(section, "allowed_sandbox_modes"));
88
+ return parseRequirementsValues(config?.allowed_sandbox_modes, normalizeRequirementsSandboxMode);
94
89
  }
95
90
  }
96
- function parseRequirementsSandboxModes(values) {
91
+ function parseRequirementsValues(value, normalize) {
92
+ const values = readRequirementsStringArray(value);
97
93
  if (values === void 0) return;
98
- const normalizedModes = values.map((entry) => normalizeRequirementsSandboxMode(entry)).filter((entry) => entry !== void 0);
99
- return normalizedModes.length > 0 ? new Set(normalizedModes) : void 0;
100
- }
101
- function parseTopLevelRequirementsStringArray(content, key) {
102
- return parseRequirementsStringArray(stripTomlLineComments(content).slice(0, firstTomlTableOffset(content)), key);
103
- }
104
- function parseTomlStringValue(content, key) {
105
- return parseTomlStringAssignmentValue(content, tomlDottedKeyPattern(key));
106
- }
107
- function parseInlineOpenAIModelProviderBaseUrl(content) {
108
- return parseTomlStringAssignmentValue(content, `${tomlKeyPattern("model_providers")}\\s*=\\s*\\{[\\s\\S]*?${tomlKeyPattern("openai")}\\s*=\\s*\\{[\\s\\S]*?${tomlKeyPattern("base_url")}`);
109
- }
110
- function parseTomlStringAssignmentValue(content, keyPattern) {
111
- const assignment = content.match(new RegExp(`(?:^|\\n)\\s*${keyPattern}\\s*=\\s*([^\\r\\n]*)`));
112
- if (!assignment) return;
113
- const rawValue = assignment[1]?.trimStart() ?? "";
114
- if (rawValue.startsWith("\"\"\"") || rawValue.startsWith("'''")) return false;
115
- const match = parseTomlStringAssignment(content, keyPattern);
116
- return match ? match[1] ?? match[2] ?? "" : false;
117
- }
118
- function parseTomlStringAssignment(content, keyPattern) {
119
- return content.match(new RegExp(`(?:^|\\n)\\s*${keyPattern}\\s*=\\s*(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|'([^']*)')`));
120
- }
121
- function tomlDottedKeyPattern(key) {
122
- return key.split(".").map(tomlKeyPattern).join("\\s*\\.\\s*");
123
- }
124
- function tomlKeyPattern(key) {
125
- const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
126
- return `(?:"${escaped}"|'${escaped}'|${escaped})`;
127
- }
128
- function parseRequirementsStringArray(content, key) {
129
- const match = content.match(new RegExp(`(?:^|\\n)\\s*${key}\\s*=\\s*\\[([\\s\\S]*?)\\]`));
130
- if (!match) return;
131
- const arrayBody = match[1] ?? "";
132
- const stringMatches = [...arrayBody.matchAll(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^']*)'/g)];
133
- if (stringMatches.length === 0 && arrayBody.trim().length > 0) return;
134
- return stringMatches.map((entry) => entry[1] ?? entry[2] ?? "");
135
- }
136
- function parseTomlTableSection(content, table) {
137
- const strippedContent = stripTomlLineComments(content);
138
- const tablePattern = tomlDottedKeyPattern(table);
139
- const match = new RegExp(`^\\s*\\[\\s*${tablePattern}\\s*\\]\\s*$`, "m").exec(strippedContent);
140
- if (!match) return;
141
- const sectionStart = match.index + match[0].length;
142
- const rest = strippedContent.slice(sectionStart);
143
- const nextTableOffset = rest.search(/^\s*\[/m);
144
- return nextTableOffset === -1 ? rest : rest.slice(0, nextTableOffset);
145
- }
146
- function parseTomlArrayTableSections(content, table) {
147
- const strippedContent = stripTomlLineComments(content);
148
- const escapedTable = table.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
149
- const headerPattern = new RegExp(`^\\s*\\[\\[\\s*${escapedTable}\\s*\\]\\]\\s*$`, "gm");
150
- const sections = [];
151
- for (let match = headerPattern.exec(strippedContent); match; match = headerPattern.exec(strippedContent)) {
152
- const sectionStart = headerPattern.lastIndex;
153
- const rest = strippedContent.slice(sectionStart);
154
- const nextTableOffset = rest.search(/^\s*\[/m);
155
- sections.push(nextTableOffset === -1 ? rest : rest.slice(0, nextTableOffset));
156
- }
157
- return sections;
158
- }
159
- function firstTomlTableOffset(content) {
160
- return content.match(/^\s*\[[^\]\n]/m)?.index ?? content.length;
161
- }
162
- function stripTomlLineComments(value) {
163
- let output = "";
164
- let quote;
165
- let escaped = false;
166
- for (let index = 0; index < value.length; index += 1) {
167
- const char = value[index] ?? "";
168
- if (quote) {
169
- output += char;
170
- if (quote === "\"" && escaped) {
171
- escaped = false;
172
- continue;
173
- }
174
- if (quote === "\"" && char === "\\") {
175
- escaped = true;
176
- continue;
177
- }
178
- if (char === quote) quote = void 0;
179
- continue;
180
- }
181
- if (char === "\"" || char === "'") {
182
- quote = char;
183
- output += char;
184
- continue;
185
- }
186
- if (char === "#") {
187
- while (index < value.length && value[index] !== "\n") index += 1;
188
- if (value[index] === "\n") output += "\n";
189
- continue;
190
- }
191
- output += char;
94
+ const normalized = values.map(normalize).filter((entry) => entry !== void 0);
95
+ return normalized.length > 0 ? new Set(normalized) : void 0;
96
+ }
97
+ function parseCodexRequirements(content) {
98
+ try {
99
+ return parse(content, { integersAsBigInt: true });
100
+ } catch {
101
+ return;
192
102
  }
193
- return output;
103
+ }
104
+ function readRequirementsStringArray(value) {
105
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string") ? value : void 0;
194
106
  }
195
107
  function normalizeRequirementsSandboxMode(value) {
196
108
  const compact = value.replace(/[\s_-]/g, "").toLowerCase();
@@ -222,9 +134,6 @@ function normalizeRequirementsApprovalPolicy(value) {
222
134
  if (normalized === "untrusted") return normalized;
223
135
  return resolveApprovalPolicy(normalized);
224
136
  }
225
- function normalizeRequirementsApprovalsReviewer(value) {
226
- return resolveApprovalsReviewer(value.trim().toLowerCase());
227
- }
228
137
  function selectGuardianApprovalPolicy(allowedApprovalPolicies, execModeRequiringPromptingApprovals) {
229
138
  if (allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("on-request")) return "on-request";
230
139
  if (allowedApprovalPolicies.has("untrusted")) return "untrusted";
@@ -244,48 +153,11 @@ function selectUserApprovalsReviewer(allowedApprovalsReviewers, execModeRequirin
244
153
  throw new Error(`tools.exec.mode=${execModeRequiringUserReviewer ?? "ask"} requires Codex app-server user approvals`);
245
154
  }
246
155
  //#endregion
247
- //#region extensions/codex/src/app-server/auth-start-options.ts
248
- const CODEX_APP_SERVER_HOME_DIRNAME = "codex-home";
249
- const CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE = "cli_auth_credentials_store=\"ephemeral\"";
250
- function resolveCodexAppServerHomeDir(agentDir) {
251
- if (!agentDir) throw new Error("Agent-scoped Codex requires an OpenClaw agent directory");
252
- return path.join(path.resolve(agentDir), CODEX_APP_SERVER_HOME_DIRNAME);
253
- }
254
- /** Resolves the native user Codex home used by Desktop and the CLI. */
255
- function resolveCodexAppServerUserHomeDir(env = process.env, homedir$1 = homedir) {
256
- const configured = normalizeOptionalString(env.CODEX_HOME);
257
- return path.resolve(configured ?? path.join(homedir$1(), ".codex"));
258
- }
259
- /** Resolves the local CODEX_HOME used when starting one app-server connection. */
260
- function resolveCodexAppServerLocalHomeDir(startOptions, agentDir, env = process.env) {
261
- const configured = startOptions.env?.CODEX_HOME;
262
- if (configured?.trim()) return configured;
263
- return startOptions.homeScope === "user" ? resolveCodexAppServerUserHomeDir(env) : resolveCodexAppServerHomeDir(agentDir);
264
- }
265
- /** Forces OpenClaw-owned Codex auth to remain process-local. */
266
- function withEphemeralCodexAuthStore(params) {
267
- const { startOptions } = params;
268
- if (!params.preparedAuth && params.authProfileId === null) return startOptions;
269
- const args = normalizeCodexAppServerArgs(startOptions.args, CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE);
270
- return args === startOptions.args ? startOptions : {
271
- ...startOptions,
272
- args
273
- };
274
- }
275
- //#endregion
276
- //#region extensions/codex/src/app-server/protocol.ts
277
- /** Namespace Codex keeps directly model-visible without exposing it to Code Mode guests. */
278
- const CODEX_OPENCLAW_DIRECT_DYNAMIC_TOOL_NAMESPACE = "openclaw_direct";
279
- function flattenCodexDynamicToolFunctions(tools) {
280
- return (tools ?? []).flatMap((tool) => tool.type === "namespace" ? tool.tools : [tool]);
281
- }
282
- /** Asserts the experimental beforeTurnId request field before it crosses the app-server boundary. */
283
- function assertCodexThreadForkParams(value) {
284
- if (!isRecord(value) || typeof value.threadId !== "string" || !value.threadId.trim() || value.beforeTurnId !== void 0 && value.beforeTurnId !== null && typeof value.beforeTurnId !== "string") throw new Error("Invalid Codex app-server thread/fork params");
285
- return value;
286
- }
287
- function isJsonObject(value) {
288
- return isRecord(value);
156
+ //#region extensions/codex/src/app-server/config-policy-json.ts
157
+ function stringifyCodexPolicy(value) {
158
+ if (Array.isArray(value)) return `[${value.map((item) => stringifyCodexPolicy(item)).join(",")}]`;
159
+ if (value && typeof value === "object") return `{${Object.entries(value).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stringifyCodexPolicy(item)}`).join(",")}}`;
160
+ return JSON.stringify(value);
289
161
  }
290
162
  //#endregion
291
163
  //#region extensions/codex/src/app-server/config-security.ts
@@ -324,34 +196,26 @@ function resolveCodexAppServerNetworkProxy(config, sandbox) {
324
196
  };
325
197
  return { networkProxy: {
326
198
  profileName,
327
- configFingerprint: fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch),
199
+ configFingerprint: createHash("sha256").update(stringifyCodexPolicy(configPatch)).digest("hex"),
328
200
  configPatch
329
201
  } };
330
202
  }
331
203
  function resolveNetworkProxyPermissionProfileName(config, profile) {
332
204
  const explicitProfileName = readNonEmptyString(config.profileName);
333
205
  if (explicitProfileName) return explicitProfileName;
334
- const suffix = createHash("sha256").update(stableStringifyJson({
206
+ const suffix = createHash("sha256").update(stringifyCodexPolicy({
335
207
  version: 1,
336
208
  profile
337
209
  })).digest("hex").slice(0, 16);
338
210
  return `${DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX}-${suffix}`;
339
211
  }
340
- function fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch) {
341
- return createHash("sha256").update(stableStringifyJson(configPatch)).digest("hex");
342
- }
343
212
  function normalizeNetworkProxyPermissionMap(value) {
344
- const entries = Object.entries(value ?? {}).map(([key, permission]) => [key.trim(), permission]).filter(([key]) => key.length > 0);
213
+ const entries = Object.entries(value ?? {}).map(([key, permission]) => [key.trim(), permission === "none" ? "deny" : permission]).filter(([key]) => key.length > 0);
345
214
  return entries.length > 0 ? Object.fromEntries(entries) : void 0;
346
215
  }
347
216
  function removeUndefinedJsonFields(value) {
348
217
  return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== void 0));
349
218
  }
350
- function stableStringifyJson(value) {
351
- if (Array.isArray(value)) return `[${value.map((item) => stableStringifyJson(item)).join(",")}]`;
352
- if (value && typeof value === "object") return `{${Object.entries(value).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stableStringifyJson(item)}`).join(",")}}`;
353
- return JSON.stringify(value);
354
- }
355
219
  /** Explicit MCP prompting must bypass Codex's unconditional Never-policy approval. */
356
220
  function hasCodexMcpToolApprovalOverrides(servers, serverNames, projectedMcpServers) {
357
221
  const modes = new Map(Object.entries(projectedMcpServers ?? {}).map(([name, server]) => [name, server.default_tools_approval_mode]));
@@ -368,44 +232,25 @@ function withMcpElicitationsApprovalPolicy(policy) {
368
232
  ...policy.granular,
369
233
  mcp_elicitations: true
370
234
  } };
371
- if (policy === "never") return { granular: {
372
- mcp_elicitations: true,
373
- rules: false,
374
- sandbox_approval: false,
375
- request_permissions: false,
376
- skill_approval: false
377
- } };
235
+ const prompting = policy !== "never";
378
236
  return { granular: {
379
237
  mcp_elicitations: true,
380
- rules: true,
381
- sandbox_approval: true,
382
- request_permissions: true,
383
- skill_approval: true
238
+ rules: prompting,
239
+ sandbox_approval: prompting,
240
+ request_permissions: prompting,
241
+ skill_approval: prompting
384
242
  } };
385
243
  }
386
244
  function resolveTransport(value) {
387
245
  return value === "websocket" || value === "unix" ? value : "stdio";
388
246
  }
389
- function normalizeRemoteWorkspaceRoot(value) {
390
- return readNonEmptyString(value);
391
- }
392
247
  function inferCodexAppServerConnectionClass(params) {
393
248
  if (params.transport !== "websocket") return "local-loopback";
394
249
  return params.url && isLoopbackWebSocketUrl(params.url) ? "local-loopback" : "remote";
395
250
  }
396
- function assertCodexAppServerConnectionClassConfig(params) {
397
- if (params.connectionClass === "remote" && !hasIdentityBearingWebSocketAuth({
398
- authToken: params.authToken,
399
- headers: params.headers
400
- })) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
401
- }
402
251
  /** Applies the canonical remote-auth boundary to any Codex AppServer transport. */
403
252
  function assertCodexAppServerConnectionSecurity(params) {
404
- assertCodexAppServerConnectionClassConfig({
405
- connectionClass: inferCodexAppServerConnectionClass(params),
406
- authToken: params.authToken,
407
- headers: params.headers
408
- });
253
+ if (inferCodexAppServerConnectionClass(params) === "remote" && !hasIdentityBearingWebSocketAuth(params)) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
409
254
  }
410
255
  function isLoopbackWebSocketUrl(value) {
411
256
  let parsed;
@@ -430,22 +275,13 @@ function resolveDefaultCodexAppServerPolicy(params) {
430
275
  dangerFullAccessAllowed: true
431
276
  };
432
277
  const content = readCodexRequirementsToml(params);
433
- if (content === void 0) {
434
- if (!params.forceGuardian) return {
435
- mode: "yolo",
436
- dangerFullAccessAllowed: true
437
- };
438
- return {
439
- mode: "guardian",
440
- dangerFullAccessAllowed: true,
441
- approvalPolicy: selectGuardianApprovalPolicy(void 0, params.execModeRequiringPromptingApprovals),
442
- approvalsReviewer: params.forceUserReviewer ? selectUserApprovalsReviewer(void 0, params.execModeRequiringUserReviewer) : selectGuardianApprovalsReviewer(void 0, params.execModeRequiringPromptingApprovals === "auto" ? "auto" : void 0),
443
- sandbox: selectGuardianSandbox(void 0)
444
- };
445
- }
446
- const allowedSandboxModes = parseAllowedSandboxModesFromCodexRequirements(content, readNonEmptyString(params.hostName) ?? hostname());
447
- const allowedApprovalPolicies = parseAllowedApprovalPoliciesFromCodexRequirements(content);
448
- const allowedApprovalsReviewers = parseAllowedApprovalsReviewersFromCodexRequirements(content);
278
+ if (content === void 0 && !params.forceGuardian) return {
279
+ mode: "yolo",
280
+ dangerFullAccessAllowed: true
281
+ };
282
+ const allowedSandboxModes = content === void 0 ? void 0 : parseAllowedSandboxModesFromCodexRequirements(content, readNonEmptyString(params.hostName) ?? hostname());
283
+ const allowedApprovalPolicies = content === void 0 ? void 0 : parseAllowedApprovalPoliciesFromCodexRequirements(content);
284
+ const allowedApprovalsReviewers = content === void 0 ? void 0 : parseAllowedApprovalsReviewersFromCodexRequirements(content);
449
285
  const yoloSandboxAllowed = allowedSandboxModes === void 0 || allowedSandboxModes.has("danger-full-access");
450
286
  const yoloApprovalAllowed = allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("never") && !allowedApprovalPolicies.has("untrusted");
451
287
  const yoloReviewerAllowed = allowedApprovalsReviewers === void 0 || allowedApprovalsReviewers.has("user");
@@ -462,4 +298,4 @@ function resolveDefaultCodexAppServerPolicy(params) {
462
298
  };
463
299
  }
464
300
  //#endregion
465
- export { stripTomlLineComments as A, parseInlineOpenAIModelProviderBaseUrl as C, selectGuardianApprovalPolicy as D, readCodexRequirementsToml as E, resolveEffectiveOpenClawExecModeForCodexAppServer as F, resolveSandbox as I, selectForcedDangerFullAccessSandbox as L, resolveApprovalPolicy as M, resolveApprovalsReviewer as N, selectGuardianApprovalsReviewer as O, resolveCodexPolicyModeForOpenClawExecMode as P, selectForcedPromptingSandbox as R, parseAllowedSandboxModesFromCodexRequirements as S, parseTomlTableSection as T, resolveCodexAppServerUserHomeDir as _, resolveCodexAppServerNetworkProxy as a, parseAllowedApprovalPoliciesFromCodexRequirements as b, resolveTransport as c, CODEX_OPENCLAW_DIRECT_DYNAMIC_TOOL_NAMESPACE as d, assertCodexThreadForkParams as f, resolveCodexAppServerLocalHomeDir as g, resolveCodexAppServerHomeDir as h, normalizeRemoteWorkspaceRoot as i, assertCodexAppServerAllowedForOpenClawExecMode as j, selectUserApprovalsReviewer as k, shouldAutoApproveCodexAppServerApprovals as l, isJsonObject as m, hasCodexMcpToolApprovalOverrides as n, resolveDefaultCodexAppServerPolicy as o, flattenCodexDynamicToolFunctions as p, inferCodexAppServerConnectionClass as r, resolvePolicyMode as s, assertCodexAppServerConnectionSecurity as t, withMcpElicitationsApprovalPolicy as u, withEphemeralCodexAuthStore as v, parseTomlStringValue as w, parseAllowedApprovalsReviewersFromCodexRequirements as x, firstTomlTableOffset as y, selectGuardianSandbox as z };
301
+ export { resolveSandbox as C, selectGuardianSandbox as E, resolveEffectiveOpenClawExecModeForCodexAppServer as S, selectForcedPromptingSandbox as T, selectUserApprovalsReviewer as _, resolveDefaultCodexAppServerPolicy as a, resolveApprovalsReviewer as b, shouldAutoApproveCodexAppServerApprovals as c, parseAllowedApprovalPoliciesFromCodexRequirements as d, parseAllowedApprovalsReviewersFromCodexRequirements as f, selectGuardianApprovalsReviewer as g, selectGuardianApprovalPolicy as h, resolveCodexAppServerNetworkProxy as i, withMcpElicitationsApprovalPolicy as l, readCodexRequirementsToml as m, hasCodexMcpToolApprovalOverrides as n, resolvePolicyMode as o, parseAllowedSandboxModesFromCodexRequirements as p, inferCodexAppServerConnectionClass as r, resolveTransport as s, assertCodexAppServerConnectionSecurity as t, stringifyCodexPolicy as u, assertCodexAppServerAllowedForOpenClawExecMode as v, selectForcedDangerFullAccessSandbox as w, resolveCodexPolicyModeForOpenClawExecMode as x, resolveApprovalPolicy as y };
@@ -1,6 +1,5 @@
1
- import { asOptionalRecord as readRecord, normalizeOptionalString as readNonEmptyString, parseBooleanValue } from "openclaw/plugin-sdk/string-coerce-runtime";
1
+ import { asOptionalRecord as readRecord, normalizeOptionalString as readNonEmptyString } from "openclaw/plugin-sdk/string-coerce-runtime";
2
2
  import { createHmac, randomBytes } from "node:crypto";
3
- import { resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
4
3
  import { splitCommandArgs } from "openclaw/plugin-sdk/process-runtime";
5
4
  import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
6
5
  //#region extensions/codex/src/app-server/config-contracts.shared.ts
@@ -22,22 +21,13 @@ function normalizeCodexServiceTier(value) {
22
21
  function isCodexFastServiceTier(value) {
23
22
  return normalizeCodexServiceTier(value) === "priority";
24
23
  }
25
- function normalizePositiveNumber(value, fallback) {
26
- return resolvePositiveTimerTimeoutMs(value, fallback);
27
- }
28
24
  function normalizeHeaders(value) {
29
25
  if (!value || typeof value !== "object" || Array.isArray(value)) return {};
30
- return Object.fromEntries(Object.entries(value).map(([key, child]) => [key.trim(), normalizeCodexAppServerSecretInput({
26
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => [key.trim(), normalizeResolvedSecretInputString({
31
27
  value: child,
32
28
  path: `plugins.entries.codex.config.appServer.headers.${key}`
33
29
  })]).filter((entry) => Boolean(entry[0] && entry[1])));
34
30
  }
35
- function normalizeCodexAppServerSecretInput(params) {
36
- return normalizeResolvedSecretInputString(params);
37
- }
38
- function readBooleanEnv(value) {
39
- return parseBooleanValue(value);
40
- }
41
31
  function readExecSecurity(value) {
42
32
  return value === "deny" || value === "allowlist" || value === "full" ? value : void 0;
43
33
  }
@@ -64,4 +54,4 @@ function getStartOptionsKeySecret() {
64
54
  return globalState[START_OPTIONS_KEY_SECRET_SYMBOL];
65
55
  }
66
56
  //#endregion
67
- export { normalizeHeaders as a, readExecAsk as c, readNumberEnv as d, readRecord as f, normalizeCodexServiceTier as i, readExecSecurity as l, CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN as m, isCodexFastServiceTier as n, normalizePositiveNumber as o, resolveArgs as p, normalizeCodexAppServerSecretInput as r, readBooleanEnv as s, hashSecretForKey as t, readNonEmptyString as u };
57
+ export { readExecAsk as a, readNumberEnv as c, CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN as d, normalizeHeaders as i, readRecord as l, isCodexFastServiceTier as n, readExecSecurity as o, normalizeCodexServiceTier as r, readNonEmptyString as s, hashSecretForKey as t, resolveArgs as u };