@openclaw/codex 2026.9.6 → 2026.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +2 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/{account-usage-runtime-Eem_WGqY.mjs → account-usage-runtime-DFhbh1zz.mjs} +5 -5
  4. package/dist/.setup/{apply-DDOi8uNx.mjs → apply-D3GcSoSa.mjs} +22 -36
  5. package/dist/.setup/{attempt-client-cleanup-CEv1cKwF.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +128 -37
  6. package/dist/.setup/attempt-workspace-context-C5HigshI.mjs +164 -0
  7. package/dist/.setup/{auth-binding-DhLWa_7K.mjs → auth-binding-BLWz7stm.mjs} +14 -1
  8. package/dist/.setup/{auth-cache-key-B2mpaI9D.mjs → auth-cache-key-Dbvq-QgB.mjs} +36 -34
  9. package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
  10. package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
  11. package/dist/.setup/{binding-connection-ThoatDcb.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
  12. package/dist/.setup/{binding-connection.runtime-yoHrABt-.mjs → binding-connection.runtime-6TpgD1M6.mjs} +4 -4
  13. package/dist/.setup/{bounded-turn-B2HScEgT.mjs → bounded-turn-CbjoN2OW.mjs} +15 -18
  14. package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
  15. package/dist/.setup/{build-state-C7EnDVgr.mjs → build-state-Da1_z0kd.mjs} +1 -1
  16. package/dist/.setup/{capabilities-CDXOOFdZ.mjs → capabilities-B3WEZl4e.mjs} +2 -10
  17. package/dist/.setup/{client-Cs08OXVQ.mjs → client-N0JpgSzF.mjs} +138 -399
  18. package/dist/.setup/{client-catalog-response-BMgt_4q4.mjs → client-catalog-response-5HHLdcde.mjs} +1 -1
  19. package/dist/.setup/{command-dispatch-B4JuOsOk.mjs → command-dispatch-BeAoaovI.mjs} +5 -8
  20. package/dist/.setup/{command-formatters-Bmqvr9tO.mjs → command-formatters-R3ckE3Co.mjs} +29 -61
  21. package/dist/.setup/{command-handlers-DW7Lx9oH.mjs → command-handlers-ylTMS00z.mjs} +222 -343
  22. package/dist/.setup/{command-rpc-DixIj3HW.mjs → command-rpc-CGJGUQ6Y.mjs} +15 -18
  23. package/dist/.setup/compact-C2WamavS.mjs +776 -0
  24. package/dist/.setup/{config-BoTP_mrL.mjs → config-DKhXquav.mjs} +26 -28
  25. package/dist/.setup/{config-options-BvaRs51b.mjs → config-options-CzyWLTJt.mjs} +24 -37
  26. package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
  27. package/dist/.setup/{config-runtime-C8Rw1m1m.mjs → config-runtime-C0NbLms1.mjs} +2 -2
  28. package/dist/.setup/{config-security-BEReZ6go.mjs → config-security-CE-FcGw9.mjs} +32 -111
  29. package/dist/.setup/{config-utils-DujwEnhg.mjs → config-utils-D0CXecki.mjs} +3 -13
  30. package/dist/.setup/context-engine-projection-PezSESth.mjs +387 -0
  31. package/dist/.setup/{conversation-binding-DP-gMrBP.mjs → conversation-binding-3Min8qvP.mjs} +67 -90
  32. package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
  33. package/dist/.setup/{conversation-control-uK9Jomlc.mjs → conversation-control-CEP8X5JC.mjs} +8 -8
  34. package/dist/.setup/{cyber-failover-DYwbmf1o.mjs → cyber-failover-XV0nNRZu.mjs} +1 -1
  35. package/dist/.setup/{cyber-failover-notice-e9G3J9-e.mjs → cyber-failover-notice-RNpGpTyP.mjs} +1 -1
  36. package/dist/.setup/{dynamic-tools-BDXl-8Cw.mjs → dynamic-tools-DzlsLUuS.mjs} +2305 -2606
  37. package/dist/.setup/{effective-mcp-catalog-CvnvnGIe.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
  38. package/dist/.setup/{ephemeral-turn-poidXgek.mjs → ephemeral-turn-CDsPJOa2.mjs} +3 -3
  39. package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
  40. package/dist/.setup/{event-projector-usage-CnBS8Wa3.mjs → event-projector-usage-03R0I2dM.mjs} +3 -25
  41. package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
  42. package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
  43. package/dist/.setup/{inference-context-D96l9-ew.mjs → inference-context-D-9gWlTR.mjs} +16 -18
  44. package/dist/.setup/inference-dispatch-CMZtjQyz.mjs +359 -0
  45. package/dist/.setup/inference-metadata-CgIf7sOx.mjs +81 -0
  46. package/dist/.setup/{inference-proxy-b-aJMSxm.mjs → inference-proxy-DhcXOgUE.mjs} +174 -214
  47. package/dist/.setup/{isolated-completion-BIZFhTNG.mjs → isolated-completion-Dm3PzxJk.mjs} +9 -12
  48. package/dist/.setup/{managed-binary-BnshlFag.mjs → managed-binary-kiWRhNRE.mjs} +8 -12
  49. package/dist/.setup/{model-catalog-CfXJf9Ay.mjs → model-catalog-PAuZgJC6.mjs} +11 -10
  50. package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
  51. package/dist/.setup/{models-KnqBv0hE.mjs → models-DHXZtVVk.mjs} +9 -18
  52. package/dist/.setup/{native-auth-rWbGbMn3.mjs → native-auth-CuG53tu4.mjs} +4 -4
  53. package/dist/.setup/{native-execution-policy-umd0tgh4.mjs → native-execution-policy-BxZJy5mP.mjs} +5 -30
  54. package/dist/.setup/{native-subagent-monitor-D3filLY2.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4395 -3609
  55. package/dist/.setup/native-subagent-pending-assignments-DwkCzLvD.mjs +203 -0
  56. package/dist/.setup/native-task-assignments-DMQ0g3hu.mjs +194 -0
  57. package/dist/.setup/{node-cli-sessions-r3avj02l.mjs → node-cli-sessions-HC4W6FLI.mjs} +19 -49
  58. package/dist/.setup/{node-exec-server.runtime-BDwWXVpK.mjs → node-exec-server.runtime-BgBfWQqo.mjs} +3 -6
  59. package/dist/.setup/{plan-CN3VwfNU.mjs → plan-Y-QIvrKB.mjs} +49 -92
  60. package/dist/.setup/{plugin-activation-DT3MNtqj.mjs → plugin-activation-cNHRfaxU.mjs} +8 -36
  61. package/dist/.setup/{plugin-app-cache-key-B2CsSdnV.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +6 -23
  62. package/dist/.setup/{plugin-inventory-BoRei8Z4.mjs → plugin-inventory-Cky2XJUw.mjs} +21 -21
  63. package/dist/.setup/{plugin-marketplace-discovery-CDOi8IFs.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +18 -24
  64. package/dist/.setup/{plugin-metadata-cache-Ctmo83k_.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +115 -175
  65. package/dist/.setup/{provider-BOsxQHOM.mjs → provider-DH8NSzGt.mjs} +11 -14
  66. package/dist/.setup/{provider-capabilities-BfE88FZ5.mjs → provider-capabilities-CAxoF-X1.mjs} +13 -18
  67. package/dist/.setup/{rate-limits-CMU3DUD0.mjs → rate-limits-B7-X2TgG.mjs} +9 -31
  68. package/dist/.setup/{request-D2L0zMrq.mjs → request-BHZ1nz8d.mjs} +7 -6
  69. package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
  70. package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
  71. package/dist/.setup/{run-attempt-BHu11r7h.mjs → run-attempt-D8RZUOzY.mjs} +1035 -1023
  72. package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
  73. package/dist/.setup/{runtime-artifact-CLZ8udh-.mjs → runtime-artifact-DDQ-HGXf.mjs} +16 -4
  74. package/dist/.setup/runtime-artifact-connection-D68qQn1m.mjs +78 -0
  75. package/dist/.setup/sandbox-guard-DjCz2eOw.mjs +126 -0
  76. package/dist/.setup/scope-DOC1Xjc8.mjs +6 -0
  77. package/dist/.setup/session-binding-DGCYAfvD.mjs +443 -0
  78. package/dist/.setup/{session-binding-record-BGoz8wOK.mjs → session-binding-record-Oe9L-CNY.mjs} +52 -130
  79. package/dist/.setup/{session-binding-sidecars-BlB5EvIS.mjs → session-binding-sidecars-jo6H8dFr.mjs} +196 -17
  80. package/dist/.setup/{session-catalog-Pno1xGcl.mjs → session-catalog-4sCdv5qx.mjs} +170 -324
  81. package/dist/.setup/{session-catalog-adoption-BI6UTDZT.mjs → session-catalog-adoption-BU_pHWG7.mjs} +7 -6
  82. package/dist/.setup/{session-catalog-archive-lHBqzhaO.mjs → session-catalog-archive-spHfihri.mjs} +6 -6
  83. package/dist/.setup/session-catalog-events-DePDzzjc.mjs +139 -0
  84. package/dist/.setup/session-catalog-home-id-vlih0B_g.mjs +22 -0
  85. package/dist/.setup/{session-catalog-index-B9_VQIUz.mjs → session-catalog-index-CZvDzC6z.mjs} +126 -122
  86. package/dist/.setup/{session-catalog-index-order-hcdz07yN.mjs → session-catalog-index-order-BcQpHks3.mjs} +1 -1
  87. package/dist/.setup/{session-catalog-index-state-Dgh8ORJm.mjs → session-catalog-index-state-TeO7EyO-.mjs} +3 -2
  88. package/dist/.setup/session-catalog-limits-DDxOsQeC.mjs +14 -0
  89. package/dist/.setup/session-catalog-list-request-CvtxrYSe.mjs +170 -0
  90. package/dist/.setup/session-catalog-native-projection-DjhwGL6x.mjs +178 -0
  91. package/dist/.setup/{session-catalog-node-adoption-ITddWx_X.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +10 -27
  92. package/dist/.setup/{session-catalog-node-continue-6g6qi4A9.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +8 -10
  93. package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
  94. package/dist/.setup/{session-catalog-native-projection-DowriLid.mjs → session-catalog-parsing-CPGaPYr-.mjs} +11 -194
  95. package/dist/.setup/{session-catalog-projection-zK_PUsiE.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +6 -4
  96. package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
  97. package/dist/.setup/{session-cli-irrD-uo7.mjs → session-cli-Cn_nCqfq.mjs} +9 -22
  98. package/dist/.setup/{session-history-BrqhSCf9.mjs → session-history-D83lJWHG.mjs} +4 -6
  99. package/dist/.setup/{session-history-import-D-3wAgOP.mjs → session-history-import-WhX-X33a.mjs} +7 -10
  100. package/dist/.setup/session-history-read-Ov3StuL4.mjs +133 -0
  101. package/dist/.setup/{session-history.worker-CaCh0xF_.mjs → session-history.worker-MnPKncqP.mjs} +9 -5
  102. package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
  103. package/dist/.setup/{session-permission-policy-BI1QK_98.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
  104. package/dist/.setup/{session-retirement-BH-S6qkJ.mjs → session-retirement-qMTxkNx2.mjs} +17 -17
  105. package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
  106. package/dist/.setup/{settled-turn-finalizer-DiAi6Kx6.mjs → settled-turn-finalizer-BsvEabkw.mjs} +14 -10
  107. package/dist/.setup/{shared-client-DA4VR4Eb.mjs → shared-client-DqyTMYug.mjs} +783 -412
  108. package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
  109. package/dist/.setup/{side-question-BJ1wSDcB.mjs → side-question-C4kCmQy1.mjs} +79 -143
  110. package/dist/.setup/{source-CUzJq5WN.mjs → source-CS_7GFJZ.mjs} +80 -137
  111. package/dist/.setup/{thread-lifecycle-B3mfz1TG.mjs → thread-lifecycle-DPflntEJ.mjs} +294 -737
  112. package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
  113. package/dist/.setup/{thread-ownership-DcTtAcXj.mjs → thread-ownership-roNP0l1c.mjs} +45 -10
  114. package/dist/.setup/{thread-policy-DGuQsuFC.mjs → thread-policy-DTd-DtkX.mjs} +46 -7
  115. package/dist/.setup/{thread-requests-BLvGkP2R.mjs → thread-requests-B_bRnMGN.mjs} +199 -302
  116. package/dist/.setup/{thread-resume-DIBXwOpE.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
  117. package/dist/.setup/{timeout-C910MdAB.mjs → timeout-CXOfNoaX.mjs} +1 -35
  118. package/dist/.setup/{transcript-history-projection-ZZpkFkJ_.mjs → transcript-history-projection-DRSifI-1.mjs} +17 -89
  119. package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
  120. package/dist/.setup/{transcript-mirror-BtHDBp1G.mjs → transcript-mirror-kxmCYsuF.mjs} +7 -9
  121. package/dist/.setup/{transport-stdio-h2VHOskC.mjs → transport-stdio-Bdegpn2V.mjs} +5 -22
  122. package/dist/.setup/transport-websocket-BTBE-LD9.mjs +211 -0
  123. package/dist/.setup/{upstream-prompt-provenance-LphB8slG.mjs → upstream-prompt-provenance-fXkKbPVC.mjs} +3 -9
  124. package/dist/.setup/{upstream-session-fork-BUr4OUbC.mjs → upstream-session-fork-CBeVjBpT.mjs} +23 -23
  125. package/dist/.setup/{usage-BML0r-ua.mjs → usage-BMzNxeR_.mjs} +4 -4
  126. package/dist/.setup/{usage-limit-error-DUMbefVY.mjs → usage-limit-error-QXerDo3i.mjs} +4 -19
  127. package/dist/.setup/{web-search-provider.runtime-CDKlN-Rv.mjs → web-search-provider.runtime-P77OUeoo.mjs} +8 -19
  128. package/dist/api.js +9 -11
  129. package/dist/catalog-page.worker.js +1 -1
  130. package/dist/cli-metadata.js +1 -1
  131. package/dist/doctor-contract-api.js +50 -8
  132. package/dist/harness.js +344 -1
  133. package/dist/index.js +193 -245
  134. package/dist/media-understanding-provider.js +9 -22
  135. package/dist/migration-provider-api.js +1 -1
  136. package/dist/provider-discovery.js +1 -1
  137. package/dist/session-history-worker-runtime.js +3 -3
  138. package/dist/session-history.worker.js +1 -1
  139. package/openclaw.plugin.json +14 -2
  140. package/package.json +7 -6
  141. package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +0 -331
  142. package/dist/.setup/compact-Du5UvtxA.mjs +0 -680
  143. package/dist/.setup/event-projector-assistant-message-BsruvNrH.mjs +0 -103
  144. package/dist/.setup/event-projector-items-C6L_5ZiT.mjs +0 -234
  145. package/dist/.setup/harness-a_MsE4-_.mjs +0 -355
  146. package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
  147. package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
  148. package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
  149. package/dist/.setup/native-subagent-history-0nYYgo0k.mjs +0 -148
  150. package/dist/.setup/native-subagent-task-ids-wb8CKZGN.mjs +0 -441
  151. package/dist/.setup/plugin-approval-roundtrip-C0MZzCuP.mjs +0 -122
  152. package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
  153. package/dist/.setup/sandbox-guard-C2sRMOEY.mjs +0 -166
  154. package/dist/.setup/session-binding-Cm0apEbd.mjs +0 -692
  155. package/dist/.setup/session-catalog-events-Bj6j94E_.mjs +0 -347
  156. package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
  157. package/dist/.setup/session-initialization-rcgbZiid.mjs +0 -75
  158. package/dist/.setup/thread-history-page-DoVpnHim.mjs +0 -83
@@ -1,13 +1,10 @@
1
- import { f as readRecord, 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-DbFCehO7.mjs";
4
- import { 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";
7
5
  import { parse } from "smol-toml";
8
6
  import { readFileSync } from "node:fs";
9
- import path from "node:path";
10
- import { homedir, hostname } from "node:os";
7
+ import { hostname } from "node:os";
11
8
  import { isLoopbackHost } from "openclaw/plugin-sdk/request-url";
12
9
  //#region extensions/codex/src/app-server/config-exec-policy.ts
13
10
  function selectForcedPromptingSandbox(params) {
@@ -72,19 +69,13 @@ function parseAllowedSandboxModesFromCodexRequirements(content, hostName) {
72
69
  const requirements = parseCodexRequirements(content);
73
70
  const remoteSandboxModes = parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, hostName);
74
71
  if (remoteSandboxModes !== void 0) return remoteSandboxModes;
75
- return parseRequirementsSandboxModes(readRequirementsStringArray(requirements?.allowed_sandbox_modes));
72
+ return parseRequirementsValues(requirements?.allowed_sandbox_modes, normalizeRequirementsSandboxMode);
76
73
  }
77
74
  function parseAllowedApprovalPoliciesFromCodexRequirements(content) {
78
- const values = readRequirementsStringArray(parseCodexRequirements(content)?.allowed_approval_policies);
79
- if (values === void 0) return;
80
- const normalizedPolicies = values.map((entry) => normalizeRequirementsApprovalPolicy(entry)).filter((entry) => entry !== void 0);
81
- return normalizedPolicies.length > 0 ? new Set(normalizedPolicies) : void 0;
75
+ return parseRequirementsValues(parseCodexRequirements(content)?.allowed_approval_policies, normalizeRequirementsApprovalPolicy);
82
76
  }
83
77
  function parseAllowedApprovalsReviewersFromCodexRequirements(content) {
84
- const values = readRequirementsStringArray(parseCodexRequirements(content)?.allowed_approvals_reviewers);
85
- if (values === void 0) return;
86
- const normalizedReviewers = values.map((entry) => normalizeRequirementsApprovalsReviewer(entry)).filter((entry) => entry !== void 0);
87
- return normalizedReviewers.length > 0 ? new Set(normalizedReviewers) : void 0;
78
+ return parseRequirementsValues(parseCodexRequirements(content)?.allowed_approvals_reviewers, (value) => resolveApprovalsReviewer(value.trim().toLowerCase()));
88
79
  }
89
80
  function parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, hostName) {
90
81
  const normalizedHostName = normalizeRequirementsHostName(hostName);
@@ -94,13 +85,14 @@ function parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, host
94
85
  const config = readRecord(section);
95
86
  const patterns = readRequirementsStringArray(config?.hostname_patterns);
96
87
  if (!patterns || !requirementsHostNameMatchesAnyPattern(normalizedHostName, patterns)) continue;
97
- return parseRequirementsSandboxModes(readRequirementsStringArray(config?.allowed_sandbox_modes));
88
+ return parseRequirementsValues(config?.allowed_sandbox_modes, normalizeRequirementsSandboxMode);
98
89
  }
99
90
  }
100
- function parseRequirementsSandboxModes(values) {
91
+ function parseRequirementsValues(value, normalize) {
92
+ const values = readRequirementsStringArray(value);
101
93
  if (values === void 0) return;
102
- const normalizedModes = values.map((entry) => normalizeRequirementsSandboxMode(entry)).filter((entry) => entry !== void 0);
103
- return normalizedModes.length > 0 ? new Set(normalizedModes) : void 0;
94
+ const normalized = values.map(normalize).filter((entry) => entry !== void 0);
95
+ return normalized.length > 0 ? new Set(normalized) : void 0;
104
96
  }
105
97
  function parseCodexRequirements(content) {
106
98
  try {
@@ -142,9 +134,6 @@ function normalizeRequirementsApprovalPolicy(value) {
142
134
  if (normalized === "untrusted") return normalized;
143
135
  return resolveApprovalPolicy(normalized);
144
136
  }
145
- function normalizeRequirementsApprovalsReviewer(value) {
146
- return resolveApprovalsReviewer(value.trim().toLowerCase());
147
- }
148
137
  function selectGuardianApprovalPolicy(allowedApprovalPolicies, execModeRequiringPromptingApprovals) {
149
138
  if (allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("on-request")) return "on-request";
150
139
  if (allowedApprovalPolicies.has("untrusted")) return "untrusted";
@@ -164,43 +153,11 @@ function selectUserApprovalsReviewer(allowedApprovalsReviewers, execModeRequirin
164
153
  throw new Error(`tools.exec.mode=${execModeRequiringUserReviewer ?? "ask"} requires Codex app-server user approvals`);
165
154
  }
166
155
  //#endregion
167
- //#region extensions/codex/src/app-server/auth-start-options.ts
168
- const CODEX_APP_SERVER_HOME_DIRNAME = "codex-home";
169
- const CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE = "cli_auth_credentials_store=\"ephemeral\"";
170
- function resolveCodexAppServerHomeDir(agentDir) {
171
- if (!agentDir) throw new Error("Agent-scoped Codex requires an OpenClaw agent directory");
172
- return path.join(path.resolve(agentDir), CODEX_APP_SERVER_HOME_DIRNAME);
173
- }
174
- /** Resolves the native user Codex home used by Desktop and the CLI. */
175
- function resolveCodexAppServerUserHomeDir(env = process.env, homedir$1 = homedir) {
176
- const configured = normalizeOptionalString(env.CODEX_HOME);
177
- return path.resolve(configured ?? path.join(homedir$1(), ".codex"));
178
- }
179
- /** Resolves the local CODEX_HOME used when starting one app-server connection. */
180
- function resolveCodexAppServerLocalHomeDir(startOptions, agentDir, env = process.env) {
181
- if (startOptions.codexHome) return startOptions.codexHome;
182
- const configured = startOptions.env?.CODEX_HOME;
183
- if (configured?.trim()) return configured;
184
- return startOptions.homeScope === "user" ? resolveCodexAppServerUserHomeDir(env) : resolveCodexAppServerHomeDir(agentDir);
185
- }
186
- /** Forces OpenClaw-owned Codex auth to remain process-local. */
187
- function withEphemeralCodexAuthStore(params) {
188
- const { startOptions } = params;
189
- if (!params.preparedAuth && params.authProfileId === null) return startOptions;
190
- const args = normalizeCodexAppServerArgs(startOptions.args, CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE);
191
- return args === startOptions.args ? startOptions : {
192
- ...startOptions,
193
- args
194
- };
195
- }
196
- function withClearedEnvironmentVariables(startOptions, envVars) {
197
- const clearEnv = startOptions.clearEnv ?? [];
198
- const missingEnvVars = envVars.filter((envVar) => !clearEnv.includes(envVar));
199
- if (missingEnvVars.length === 0) return startOptions;
200
- return {
201
- ...startOptions,
202
- clearEnv: [...clearEnv, ...missingEnvVars]
203
- };
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);
204
161
  }
205
162
  //#endregion
206
163
  //#region extensions/codex/src/app-server/config-security.ts
@@ -239,22 +196,19 @@ function resolveCodexAppServerNetworkProxy(config, sandbox) {
239
196
  };
240
197
  return { networkProxy: {
241
198
  profileName,
242
- configFingerprint: fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch),
199
+ configFingerprint: createHash("sha256").update(stringifyCodexPolicy(configPatch)).digest("hex"),
243
200
  configPatch
244
201
  } };
245
202
  }
246
203
  function resolveNetworkProxyPermissionProfileName(config, profile) {
247
204
  const explicitProfileName = readNonEmptyString(config.profileName);
248
205
  if (explicitProfileName) return explicitProfileName;
249
- const suffix = createHash("sha256").update(stableStringifyJson({
206
+ const suffix = createHash("sha256").update(stringifyCodexPolicy({
250
207
  version: 1,
251
208
  profile
252
209
  })).digest("hex").slice(0, 16);
253
210
  return `${DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX}-${suffix}`;
254
211
  }
255
- function fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch) {
256
- return createHash("sha256").update(stableStringifyJson(configPatch)).digest("hex");
257
- }
258
212
  function normalizeNetworkProxyPermissionMap(value) {
259
213
  const entries = Object.entries(value ?? {}).map(([key, permission]) => [key.trim(), permission === "none" ? "deny" : permission]).filter(([key]) => key.length > 0);
260
214
  return entries.length > 0 ? Object.fromEntries(entries) : void 0;
@@ -262,11 +216,6 @@ function normalizeNetworkProxyPermissionMap(value) {
262
216
  function removeUndefinedJsonFields(value) {
263
217
  return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== void 0));
264
218
  }
265
- function stableStringifyJson(value) {
266
- if (Array.isArray(value)) return `[${value.map((item) => stableStringifyJson(item)).join(",")}]`;
267
- if (value && typeof value === "object") return `{${Object.entries(value).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stableStringifyJson(item)}`).join(",")}}`;
268
- return JSON.stringify(value);
269
- }
270
219
  /** Explicit MCP prompting must bypass Codex's unconditional Never-policy approval. */
271
220
  function hasCodexMcpToolApprovalOverrides(servers, serverNames, projectedMcpServers) {
272
221
  const modes = new Map(Object.entries(projectedMcpServers ?? {}).map(([name, server]) => [name, server.default_tools_approval_mode]));
@@ -283,44 +232,25 @@ function withMcpElicitationsApprovalPolicy(policy) {
283
232
  ...policy.granular,
284
233
  mcp_elicitations: true
285
234
  } };
286
- if (policy === "never") return { granular: {
287
- mcp_elicitations: true,
288
- rules: false,
289
- sandbox_approval: false,
290
- request_permissions: false,
291
- skill_approval: false
292
- } };
235
+ const prompting = policy !== "never";
293
236
  return { granular: {
294
237
  mcp_elicitations: true,
295
- rules: true,
296
- sandbox_approval: true,
297
- request_permissions: true,
298
- skill_approval: true
238
+ rules: prompting,
239
+ sandbox_approval: prompting,
240
+ request_permissions: prompting,
241
+ skill_approval: prompting
299
242
  } };
300
243
  }
301
244
  function resolveTransport(value) {
302
245
  return value === "websocket" || value === "unix" ? value : "stdio";
303
246
  }
304
- function normalizeRemoteWorkspaceRoot(value) {
305
- return readNonEmptyString(value);
306
- }
307
247
  function inferCodexAppServerConnectionClass(params) {
308
248
  if (params.transport !== "websocket") return "local-loopback";
309
249
  return params.url && isLoopbackWebSocketUrl(params.url) ? "local-loopback" : "remote";
310
250
  }
311
- function assertCodexAppServerConnectionClassConfig(params) {
312
- if (params.connectionClass === "remote" && !hasIdentityBearingWebSocketAuth({
313
- authToken: params.authToken,
314
- headers: params.headers
315
- })) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
316
- }
317
251
  /** Applies the canonical remote-auth boundary to any Codex AppServer transport. */
318
252
  function assertCodexAppServerConnectionSecurity(params) {
319
- assertCodexAppServerConnectionClassConfig({
320
- connectionClass: inferCodexAppServerConnectionClass(params),
321
- authToken: params.authToken,
322
- headers: params.headers
323
- });
253
+ if (inferCodexAppServerConnectionClass(params) === "remote" && !hasIdentityBearingWebSocketAuth(params)) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
324
254
  }
325
255
  function isLoopbackWebSocketUrl(value) {
326
256
  let parsed;
@@ -345,22 +275,13 @@ function resolveDefaultCodexAppServerPolicy(params) {
345
275
  dangerFullAccessAllowed: true
346
276
  };
347
277
  const content = readCodexRequirementsToml(params);
348
- if (content === void 0) {
349
- if (!params.forceGuardian) return {
350
- mode: "yolo",
351
- dangerFullAccessAllowed: true
352
- };
353
- return {
354
- mode: "guardian",
355
- dangerFullAccessAllowed: true,
356
- approvalPolicy: selectGuardianApprovalPolicy(void 0, params.execModeRequiringPromptingApprovals),
357
- approvalsReviewer: params.forceUserReviewer ? selectUserApprovalsReviewer(void 0, params.execModeRequiringUserReviewer) : selectGuardianApprovalsReviewer(void 0, params.execModeRequiringPromptingApprovals === "auto" ? "auto" : void 0),
358
- sandbox: selectGuardianSandbox(void 0)
359
- };
360
- }
361
- const allowedSandboxModes = parseAllowedSandboxModesFromCodexRequirements(content, readNonEmptyString(params.hostName) ?? hostname());
362
- const allowedApprovalPolicies = parseAllowedApprovalPoliciesFromCodexRequirements(content);
363
- 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);
364
285
  const yoloSandboxAllowed = allowedSandboxModes === void 0 || allowedSandboxModes.has("danger-full-access");
365
286
  const yoloApprovalAllowed = allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("never") && !allowedApprovalPolicies.has("untrusted");
366
287
  const yoloReviewerAllowed = allowedApprovalsReviewers === void 0 || allowedApprovalsReviewers.has("user");
@@ -377,4 +298,4 @@ function resolveDefaultCodexAppServerPolicy(params) {
377
298
  };
378
299
  }
379
300
  //#endregion
380
- export { selectForcedPromptingSandbox as A, assertCodexAppServerAllowedForOpenClawExecMode as C, resolveEffectiveOpenClawExecModeForCodexAppServer as D, resolveCodexPolicyModeForOpenClawExecMode as E, resolveSandbox as O, selectUserApprovalsReviewer as S, resolveApprovalsReviewer as T, parseAllowedApprovalsReviewersFromCodexRequirements as _, resolveCodexAppServerNetworkProxy as a, selectGuardianApprovalPolicy as b, resolveTransport as c, resolveCodexAppServerHomeDir as d, resolveCodexAppServerLocalHomeDir as f, parseAllowedApprovalPoliciesFromCodexRequirements as g, withEphemeralCodexAuthStore as h, normalizeRemoteWorkspaceRoot as i, selectGuardianSandbox as j, selectForcedDangerFullAccessSandbox as k, shouldAutoApproveCodexAppServerApprovals as l, withClearedEnvironmentVariables as m, hasCodexMcpToolApprovalOverrides as n, resolveDefaultCodexAppServerPolicy as o, resolveCodexAppServerUserHomeDir as p, inferCodexAppServerConnectionClass as r, resolvePolicyMode as s, assertCodexAppServerConnectionSecurity as t, withMcpElicitationsApprovalPolicy as u, parseAllowedSandboxModesFromCodexRequirements as v, resolveApprovalPolicy as w, selectGuardianApprovalsReviewer as x, readCodexRequirementsToml as y };
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 };