@openclaw/codex 2026.9.4 → 2026.9.5

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 (148) hide show
  1. package/assets/activity.svg +30 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/.setup/account-usage-runtime-C2MOIvfq.mjs +75 -0
  4. package/dist/{apply-CvT8tW5i.js → .setup/apply-CJ0ZfmBG.mjs} +11 -11
  5. package/dist/.setup/async-questions-DdhOCwGi.mjs +27 -0
  6. package/dist/{attempt-client-cleanup-DKHzbwt5.js → .setup/attempt-client-cleanup-BpYKdTA0.mjs} +29 -14
  7. package/dist/{attempt-context-D44yeDII.js → .setup/attempt-context-VXVwTCfS.mjs} +5 -5
  8. package/dist/.setup/attempt-terminal-gZrxQ35N.mjs +5 -0
  9. package/dist/{auth-binding-CWlKVccJ.js → .setup/auth-binding-DhLWa_7K.mjs} +1 -1
  10. package/dist/{auth-cache-key-7orQae_j.js → .setup/auth-cache-key-QirmgiCo.mjs} +3 -3
  11. package/dist/{auth-profile-CwzO4_RG.js → .setup/auth-profile-WqZtZfXN.mjs} +1 -1
  12. package/dist/.setup/binding-connection-Bm38niE8.mjs +50 -0
  13. package/dist/.setup/binding-connection.runtime-CnRMC0ta.mjs +48 -0
  14. package/dist/{bounded-turn-C_Hneydj.js → .setup/bounded-turn-BtlZcivC.mjs} +16 -11
  15. package/dist/{build-state-BCmg9-5p.js → .setup/build-state-Xx9ybZqa.mjs} +1 -1
  16. package/dist/{capabilities-8vx68WLH.js → .setup/capabilities-_vXcZGSx.mjs} +1 -1
  17. package/dist/{client-B57KWPQx.js → .setup/client-vXs2929Q.mjs} +332 -163
  18. package/dist/{command-dispatch-BpduNGVf.js → .setup/command-dispatch-naHIZwwF.mjs} +3 -3
  19. package/dist/{command-formatters-lxlkNZgU.js → .setup/command-formatters-CGEkdawF.mjs} +2 -2
  20. package/dist/{command-handlers-tiL9iWj7.js → .setup/command-handlers-BtAJEW1X.mjs} +59 -42
  21. package/dist/{command-rpc-CR5EOEZX.js → .setup/command-rpc-DHFpn4le.mjs} +22 -13
  22. package/dist/{compact-B_H3AOd7.js → .setup/compact-C3i3qlzj.mjs} +28 -43
  23. package/dist/{config-oIORaQ5T.js → .setup/config-CedDWjM-.mjs} +5 -4
  24. package/dist/{config-options-CXMq1T-C.js → .setup/config-options-BsanJ8QG.mjs} +6 -418
  25. package/dist/{protocol-5bh1G-H7.js → .setup/config-parsing-CcB9iPoq.mjs} +9 -51
  26. package/dist/{config-runtime-D0zGNIHu.js → .setup/config-runtime-CeAhl_h4.mjs} +2 -2
  27. package/dist/.setup/config-security-BRQ2mgW9.mjs +465 -0
  28. package/dist/{conversation-binding-DsB4-O7U.js → .setup/conversation-binding-DhzrpTM6.mjs} +23 -21
  29. package/dist/{conversation-binding-data-BiodpIzq.js → .setup/conversation-binding-data-CrcyZk6O.mjs} +1 -1
  30. package/dist/{conversation-control-CtUu1b3m.js → .setup/conversation-control-DN53ns41.mjs} +17 -13
  31. package/dist/.setup/cyber-failover-DYwbmf1o.mjs +123 -0
  32. package/dist/.setup/cyber-failover-notice-e9G3J9-e.mjs +17 -0
  33. package/dist/{dynamic-tools-CmN5RAip.js → .setup/dynamic-tools-D16lOp67.mjs} +101 -55
  34. package/dist/{effective-mcp-catalog-Bd73bqA8.js → .setup/effective-mcp-catalog-K6kLCN8X.mjs} +3 -3
  35. package/dist/{ephemeral-turn-D78_VmzO.js → .setup/ephemeral-turn-R1gA8Sn6.mjs} +4 -5
  36. package/dist/{event-projector-assistant-message-BmBM4qBV.js → .setup/event-projector-assistant-message-DNUR1s0A.mjs} +6 -3
  37. package/dist/{event-projector-items-5VhsECCO.js → .setup/event-projector-items-DyTQ_XqL.mjs} +1 -1
  38. package/dist/{attempt-notifications-C9XufG6l.js → .setup/event-projector-usage-C7Ntzs-f.mjs} +102 -9
  39. package/dist/{harness-C7rRa7bm.js → .setup/harness-rxaaoN-o.mjs} +74 -20
  40. package/dist/{inference-context-Dr_mzvk4.js → .setup/inference-context-fulhZuz8.mjs} +1 -1
  41. package/dist/{inference-proxy-HGXKUIre.js → .setup/inference-proxy-CC15HuSi.mjs} +4 -4
  42. package/dist/{isolated-completion-DWVb5U2J.js → .setup/isolated-completion-B6srt48J.mjs} +7 -7
  43. package/dist/{launch-args-RXQwn8zV.js → .setup/launch-args-DnMak49W.mjs} +22 -1
  44. package/dist/{managed-binary-D22rNEcR.js → .setup/managed-binary-DP6Rib3P.mjs} +2 -2
  45. package/dist/{managed-thread-store-D1t5jh3G.js → .setup/managed-thread-store-BMqgThVL.mjs} +48 -14
  46. package/dist/{model-catalog-Dq2n8f_p.js → .setup/model-catalog-DkvUuBey.mjs} +35 -10
  47. package/dist/{models-PCKOim-h.js → .setup/models-BDFgm_G-.mjs} +3 -3
  48. package/dist/.setup/native-auth-BLZGqFjw.mjs +57 -0
  49. package/dist/{native-subagent-history-DjtPloaU.js → .setup/native-subagent-history-YXaL6dMd.mjs} +24 -29
  50. package/dist/.setup/native-subagent-monitor-B1hxzIOy.mjs +5031 -0
  51. package/dist/{native-subagent-task-ids-BzTdT0Uw.js → .setup/native-subagent-task-ids-DsuOonKv.mjs} +32 -8
  52. package/dist/{node-cli-sessions-DKaOmVUh.js → .setup/node-cli-sessions-Cl8b2ZF3.mjs} +1 -1
  53. package/dist/{node-exec-server.runtime-Cl2vapEi.js → .setup/node-exec-server.runtime-BaViBKNz.mjs} +3 -3
  54. package/dist/{plan-7uG-Fp36.js → .setup/plan-xD7WKYTM.mjs} +64 -48
  55. package/dist/{plugin-activation-BYQculil.js → .setup/plugin-activation-r8nq5Jzp.mjs} +3 -3
  56. package/dist/{plugin-app-cache-key-d0eKxy7b.js → .setup/plugin-app-cache-key-BOxKP7db.mjs} +29 -25
  57. package/dist/{plugin-approval-roundtrip-Bz3FT8W5.js → .setup/plugin-approval-roundtrip-CjfzafAZ.mjs} +1 -1
  58. package/dist/{plugin-inventory-oL4Na1ZG.js → .setup/plugin-inventory-DUle8DLz.mjs} +7 -6
  59. package/dist/{plugin-metadata-cache-ClPJpRio.js → .setup/plugin-metadata-cache-DsS5buNa.mjs} +29 -14
  60. package/dist/{provider-capabilities-BvCUL69A.js → .setup/provider-capabilities-B8J4Dy-O.mjs} +2 -2
  61. package/dist/{provider-MQ8PVkuE.js → .setup/provider-fFh_-VR3.mjs} +4 -4
  62. package/dist/{rate-limits-CBMmWBr9.js → .setup/rate-limits-DOEGYRNs.mjs} +90 -46
  63. package/dist/{request-B7hEkBGq.js → .setup/request-BioXJLYa.mjs} +113 -33
  64. package/dist/.setup/run-attempt-lifecycle-B7JbY4-F.mjs +71 -0
  65. package/dist/{run-attempt-CvsAAGa0.js → .setup/run-attempt-rlA07pUv.mjs} +580 -498
  66. package/dist/{runtime-artifact-BJ0rXBZ_.js → .setup/runtime-artifact-Dy38Z5iU.mjs} +2 -2
  67. package/dist/{sandbox-guard-BxgyoM8M.js → .setup/sandbox-guard-BBP-RbTf.mjs} +3 -3
  68. package/dist/{session-binding-CI8UuilT.js → .setup/session-binding-_0W_fHRr.mjs} +46 -64
  69. package/dist/{session-binding-record-Bcvslnhf.js → .setup/session-binding-record-TH3xA0zj.mjs} +181 -3
  70. package/dist/.setup/session-binding-sidecars-CKYEcfNn.mjs +543 -0
  71. package/dist/{session-catalog-adoption-tcZi1IfX.js → .setup/session-catalog-adoption-CR_whkEW.mjs} +6 -6
  72. package/dist/{session-catalog-archive-CwKg8Xz2.js → .setup/session-catalog-archive-CwZaPacf.mjs} +6 -6
  73. package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +250 -0
  74. package/dist/.setup/session-catalog-fUdWDx-U.mjs +2464 -0
  75. package/dist/.setup/session-catalog-index-B141u15s.mjs +1070 -0
  76. package/dist/.setup/session-catalog-index-order-Cc5BzlQr.mjs +48 -0
  77. package/dist/.setup/session-catalog-index-state-BAuDztHN.mjs +180 -0
  78. package/dist/{thread-history-page-D0JIp48V.js → .setup/session-catalog-native-projection-ChV3cCtm.mjs} +206 -95
  79. package/dist/{session-catalog-node-adoption-B1tgDW-m.js → .setup/session-catalog-node-adoption-BVRsYOSh.mjs} +3 -3
  80. package/dist/{session-catalog-node-continue-Ci-DXyJP.js → .setup/session-catalog-node-continue-Dowv8osw.mjs} +7 -7
  81. package/dist/.setup/session-catalog-projection-C1Bj9Jl-.mjs +414 -0
  82. package/dist/{session-cli-DNN_jhGc.js → .setup/session-cli-DIj-IE-E.mjs} +4 -4
  83. package/dist/{session-history-Cz-tOOYj.js → .setup/session-history-C--SrLI8.mjs} +10 -5
  84. package/dist/{session-history-import-DwyijFI6.js → .setup/session-history-import-JHXT5Xfi.mjs} +4 -4
  85. package/dist/{session-history-read-cxPUxyVV.js → .setup/session-history-read-B3ZfSUbF.mjs} +2 -2
  86. package/dist/{session-history.worker-BeK1YOyT.js → .setup/session-history.worker-CpNj7H_P.mjs} +5 -6
  87. package/dist/{session-initialization-Ct0_Hzmg.js → .setup/session-initialization-DH1z6fXn.mjs} +2 -2
  88. package/dist/{session-permission-policy-BBmXA8Eg.js → .setup/session-permission-policy-DhurXY0l.mjs} +2 -2
  89. package/dist/{session-retirement-B2YfbAAT.js → .setup/session-retirement-CU87AOg9.mjs} +6 -6
  90. package/dist/{settled-turn-context-Du6gdUDd.js → .setup/settled-turn-context-fmwouT5I.mjs} +2 -2
  91. package/dist/{settled-turn-finalizer-Dn91stmc.js → .setup/settled-turn-finalizer-CiY2bLFK.mjs} +9 -9
  92. package/dist/{shared-client-CscigXXL.js → .setup/shared-client-BpTtuLQ5.mjs} +286 -145
  93. package/dist/{side-question-BGMJQf4U.js → .setup/side-question-DSCZyoBD.mjs} +64 -47
  94. package/dist/{source-CElXU0Oy.js → .setup/source-Bjp4UQij.mjs} +7 -6
  95. package/dist/{thread-archive-guard-DfpBr-Sz.js → .setup/thread-archive-guard-jmecf6OJ.mjs} +1 -1
  96. package/dist/.setup/thread-history-page-BTx-4xsg.mjs +83 -0
  97. package/dist/{thread-lifecycle-DXl1-I6b.js → .setup/thread-lifecycle-Cik28qWn.mjs} +256 -128
  98. package/dist/{thread-ownership-BsDRTsyp.js → .setup/thread-ownership-skomxnIt.mjs} +4 -4
  99. package/dist/{thread-policy-BuEQfE0g.js → .setup/thread-policy-Cjs4B8xf.mjs} +2 -2
  100. package/dist/{thread-resume-DsDOZpFg.js → .setup/thread-resume-BkNpj9Pz.mjs} +8 -5
  101. package/dist/.setup/timeout-DZF05XrR.mjs +63 -0
  102. package/dist/{transcript-history-projection-v17wXgdK.js → .setup/transcript-history-projection-DHNBDhCU.mjs} +8 -3
  103. package/dist/{transcript-mirror-C5CKgNy6.js → .setup/transcript-mirror-D4qp_leP.mjs} +15 -6
  104. package/dist/{transcript-mirror-attestation-DibE0krH.js → .setup/transcript-mirror-attestation-CzM-94NC.mjs} +4 -1
  105. package/dist/{transport-stdio-BGjHoYLr.js → .setup/transport-stdio-Cmx94Oiy.mjs} +149 -44
  106. package/dist/{upstream-session-fork-BZerMte_.js → .setup/upstream-session-fork-D3UKxgVD.mjs} +27 -26
  107. package/dist/{usage-tCk-mg_x.js → .setup/usage-BOgBEKso.mjs} +4 -4
  108. package/dist/.setup/usage-limit-error-C0ow7DOc.mjs +166 -0
  109. package/dist/{version-omm6IPI3.js → .setup/version-CoqzXPgK.mjs} +1 -1
  110. package/dist/{web-search-provider.runtime-B7bGbGWq.js → .setup/web-search-provider.runtime-CTGuJt6i.mjs} +3 -3
  111. package/dist/api.js +6 -6
  112. package/dist/cli-metadata.js +1 -1
  113. package/dist/doctor-contract-api.js +8 -528
  114. package/dist/harness.js +1 -1
  115. package/dist/index.js +123 -83
  116. package/dist/media-understanding-provider.js +3 -3
  117. package/dist/migration-provider-api.js +1 -1
  118. package/dist/native-tool-policy.js +12 -0
  119. package/dist/provider-discovery.js +18 -0
  120. package/dist/session-history-worker-runtime.js +23 -5
  121. package/dist/session-history.worker.js +2 -2
  122. package/dist/web-search-contract-api.js +1 -1
  123. package/openclaw.plugin.json +354 -69
  124. package/package.json +11 -8
  125. package/dist/binding-connection-D3udKbIE.js +0 -60
  126. package/dist/event-projector-usage-BfXmpOec.js +0 -102
  127. package/dist/native-subagent-history-owner-Pcp7JuVF.js +0 -34
  128. package/dist/native-subagent-monitor-fQ7eIXEf.js +0 -2978
  129. package/dist/rpc-error-ttN_QjEm.js +0 -30
  130. package/dist/session-catalog-ct-AH01I.js +0 -1477
  131. package/dist/session-catalog-home-id-CwhLdC03.js +0 -18
  132. package/dist/session-catalog-provenance-D-dIfRAH.js +0 -96
  133. package/dist/timeout-BVw8aaM1.js +0 -33
  134. package/dist/{auth-profile-selection-DFu9e167.js → .setup/auth-profile-selection-DFu9e167.mjs} +0 -0
  135. package/dist/{config-utils-DujwEnhg.js → .setup/config-utils-DujwEnhg.mjs} +0 -0
  136. package/dist/{context-compaction-activity-CMla5FPJ.js → .setup/context-compaction-activity-CMla5FPJ.mjs} +0 -0
  137. package/dist/{elicitation-input-DPoK8F7w.js → .setup/elicitation-input-DPoK8F7w.mjs} +0 -0
  138. package/dist/{history-rejection-B4nOXNXF.js → .setup/history-rejection-B4nOXNXF.mjs} +0 -0
  139. package/dist/{image-payload-sanitizer-tupAr-2o.js → .setup/image-payload-sanitizer-tupAr-2o.mjs} +0 -0
  140. package/dist/{incognito-session-uhrBF6wJ.js → .setup/incognito-session-uhrBF6wJ.mjs} +0 -0
  141. package/dist/{local-runtime-attribution-B_2mnqhb.js → .setup/local-runtime-attribution-B_2mnqhb.mjs} +0 -0
  142. package/dist/{native-execution-policy-umd0tgh4.js → .setup/native-execution-policy-YBMHSzC4.mjs} +1 -1
  143. /package/dist/{plugin-marketplace-discovery-P-Vndfqq.js → .setup/plugin-marketplace-discovery-P-Vndfqq.mjs} +0 -0
  144. /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
  145. /package/dist/{session-binding-meta-B7aEMU7g.js → .setup/session-binding-meta-B7aEMU7g.mjs} +0 -0
  146. /package/dist/{session-upstream-marker-D15C9NHp.js → .setup/session-upstream-marker-D15C9NHp.mjs} +0 -0
  147. /package/dist/{upstream-prompt-provenance-LphB8slG.js → .setup/upstream-prompt-provenance-LphB8slG.mjs} +0 -0
  148. /package/dist/{web-search-provider.shared-BrZmlqyR.js → .setup/web-search-provider.shared-BrZmlqyR.mjs} +0 -0
@@ -1,250 +1,11 @@
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.js";
2
- import { _ as assertCodexAppServerCommandHasNoInlineArgs, d as DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX, f as DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS, g as DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS, h as DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME, l as resolveCodexAppServerUserHomeDir, o as isJsonObject, p as DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS, s as resolveCodexAppServerHomeDir, x as readCodexPluginConfig } from "./protocol-5bh1G-H7.js";
3
- import { r as readCodexAppServerConfigOptions } from "./launch-args-RXQwn8zV.js";
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";
4
5
  import { normalizeTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
5
- import { createHash } from "node:crypto";
6
- import { AgentHarnessPreflightError } from "openclaw/plugin-sdk/agent-harness-registration";
7
6
  import { parse } from "smol-toml";
8
7
  import { readFileSync } from "node:fs";
9
8
  import path from "node:path";
10
- import { hostname } from "node:os";
11
- import { isLoopbackHost } from "openclaw/plugin-sdk/request-url";
12
- //#region extensions/codex/src/app-server/config-exec-policy.ts
13
- function selectForcedPromptingSandbox(params) {
14
- if (params.configuredSandbox === "read-only" || params.defaultSandbox === "read-only") return "read-only";
15
- return params.defaultSandbox ?? "workspace-write";
16
- }
17
- function selectForcedDangerFullAccessSandbox(params) {
18
- if (params.configuredSandbox === "read-only") return "read-only";
19
- if (params.defaultPolicy?.dangerFullAccessAllowed === false) {
20
- if (params.openClawSandboxActive) return params.defaultPolicy.sandbox ?? "workspace-write";
21
- throw new Error("legacy full exec security with ask requires Codex app-server danger-full-access");
22
- }
23
- return "danger-full-access";
24
- }
25
- function selectGuardianSandbox(allowedSandboxModes) {
26
- if (allowedSandboxModes === void 0 || allowedSandboxModes.has("workspace-write")) return "workspace-write";
27
- if (allowedSandboxModes.has("read-only")) return "read-only";
28
- if (allowedSandboxModes.has("danger-full-access")) return "danger-full-access";
29
- return "workspace-write";
30
- }
31
- function resolveApprovalPolicy(value) {
32
- if (value === "untrusted") throw new Error("Codex app-server approval policy \"untrusted\" is retired; run \"openclaw doctor --fix\" and use \"on-request\".");
33
- if (value === "on-failure") return "on-request";
34
- return value === "on-request" || value === "never" ? value : void 0;
35
- }
36
- function resolveSandbox(value) {
37
- return value === "read-only" || value === "workspace-write" || value === "danger-full-access" ? value : void 0;
38
- }
39
- function resolveApprovalsReviewer(value) {
40
- return value === "auto_review" || value === "guardian_subagent" || value === "user" ? value : void 0;
41
- }
42
- function resolveEffectiveOpenClawExecModeForCodexAppServer(params) {
43
- if (params.execPolicy?.touched === true) return params.execPolicy.mode;
44
- return params.execMode;
45
- }
46
- function resolveCodexPolicyModeForOpenClawExecMode(mode) {
47
- if (!mode || mode === "full") return;
48
- return "guardian";
49
- }
50
- function assertCodexAppServerAllowedForOpenClawExecMode(mode) {
51
- if (mode === "deny" || mode === "allowlist") throw new AgentHarnessPreflightError(`Codex app-server local execution is unavailable because effective tools.exec.mode=${mode}. Execution-host approvals are authoritative. For gateway turns, inspect them with \`openclaw approvals get --gateway\` and update that same target with \`openclaw approvals set --gateway --stdin\`; for local \`agent exec\`, omit \`--gateway\`. Intentionally align that host policy before retrying.`, { scope: "harness" });
52
- }
53
- //#endregion
54
- //#region extensions/codex/src/app-server/config-requirements.ts
55
- const UNIX_CODEX_REQUIREMENTS_PATH = "/etc/codex/requirements.toml";
56
- const WINDOWS_CODEX_REQUIREMENTS_SUFFIX = "\\OpenAI\\Codex\\requirements.toml";
57
- function readCodexRequirementsToml(params) {
58
- if (params.requirementsToml !== void 0) return params.requirementsToml ?? void 0;
59
- const requirementsPath = readNonEmptyString(params.requirementsPath) ?? resolveCodexRequirementsPath(params.env ?? process.env, params.platform ?? process.platform);
60
- try {
61
- if (params.readRequirementsFile) return params.readRequirementsFile(requirementsPath);
62
- return readFileSync(requirementsPath, "utf8");
63
- } catch {
64
- return;
65
- }
66
- }
67
- function resolveCodexRequirementsPath(env, platform) {
68
- if (platform === "win32") return `${(readNonEmptyString(env.ProgramData) ?? "C:\\ProgramData").replace(/[\\/]+$/, "")}${WINDOWS_CODEX_REQUIREMENTS_SUFFIX}`;
69
- return UNIX_CODEX_REQUIREMENTS_PATH;
70
- }
71
- function parseAllowedSandboxModesFromCodexRequirements(content, hostName) {
72
- const remoteSandboxModes = parseMatchingRemoteSandboxModesFromCodexRequirements(content, hostName);
73
- if (remoteSandboxModes !== void 0) return remoteSandboxModes;
74
- return parseRequirementsSandboxModes(parseTopLevelRequirementsStringArray(content, "allowed_sandbox_modes"));
75
- }
76
- function parseAllowedApprovalPoliciesFromCodexRequirements(content) {
77
- const values = parseTopLevelRequirementsStringArray(content, "allowed_approval_policies");
78
- if (values === void 0) return;
79
- const normalizedPolicies = values.map((entry) => normalizeRequirementsApprovalPolicy(entry)).filter((entry) => entry !== void 0);
80
- return normalizedPolicies.length > 0 ? new Set(normalizedPolicies) : void 0;
81
- }
82
- function parseAllowedApprovalsReviewersFromCodexRequirements(content) {
83
- const values = parseTopLevelRequirementsStringArray(content, "allowed_approvals_reviewers");
84
- if (values === void 0) return;
85
- const normalizedReviewers = values.map((entry) => normalizeRequirementsApprovalsReviewer(entry)).filter((entry) => entry !== void 0);
86
- return normalizedReviewers.length > 0 ? new Set(normalizedReviewers) : void 0;
87
- }
88
- function parseMatchingRemoteSandboxModesFromCodexRequirements(content, hostName) {
89
- const normalizedHostName = normalizeRequirementsHostName(hostName);
90
- if (normalizedHostName === void 0) return;
91
- for (const section of parseTomlArrayTableSections(content, "remote_sandbox_config")) {
92
- const patterns = parseRequirementsStringArray(section, "hostname_patterns");
93
- if (!patterns || !requirementsHostNameMatchesAnyPattern(normalizedHostName, patterns)) continue;
94
- return parseRequirementsSandboxModes(parseRequirementsStringArray(section, "allowed_sandbox_modes"));
95
- }
96
- }
97
- function parseRequirementsSandboxModes(values) {
98
- if (values === void 0) return;
99
- const normalizedModes = values.map((entry) => normalizeRequirementsSandboxMode(entry)).filter((entry) => entry !== void 0);
100
- return normalizedModes.length > 0 ? new Set(normalizedModes) : void 0;
101
- }
102
- function parseTopLevelRequirementsStringArray(content, key) {
103
- return parseRequirementsStringArray(stripTomlLineComments(content).slice(0, firstTomlTableOffset(content)), key);
104
- }
105
- function parseTomlStringValue(content, key) {
106
- return parseTomlStringAssignmentValue(content, tomlDottedKeyPattern(key));
107
- }
108
- function parseInlineOpenAIModelProviderBaseUrl(content) {
109
- return parseTomlStringAssignmentValue(content, `${tomlKeyPattern("model_providers")}\\s*=\\s*\\{[\\s\\S]*?${tomlKeyPattern("openai")}\\s*=\\s*\\{[\\s\\S]*?${tomlKeyPattern("base_url")}`);
110
- }
111
- function parseTomlStringAssignmentValue(content, keyPattern) {
112
- const assignment = content.match(new RegExp(`(?:^|\\n)\\s*${keyPattern}\\s*=\\s*([^\\r\\n]*)`));
113
- if (!assignment) return;
114
- const rawValue = assignment[1]?.trimStart() ?? "";
115
- if (rawValue.startsWith("\"\"\"") || rawValue.startsWith("'''")) return false;
116
- const match = parseTomlStringAssignment(content, keyPattern);
117
- return match ? match[1] ?? match[2] ?? "" : false;
118
- }
119
- function parseTomlStringAssignment(content, keyPattern) {
120
- return content.match(new RegExp(`(?:^|\\n)\\s*${keyPattern}\\s*=\\s*(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|'([^']*)')`));
121
- }
122
- function tomlDottedKeyPattern(key) {
123
- return key.split(".").map(tomlKeyPattern).join("\\s*\\.\\s*");
124
- }
125
- function tomlKeyPattern(key) {
126
- const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
127
- return `(?:"${escaped}"|'${escaped}'|${escaped})`;
128
- }
129
- function parseRequirementsStringArray(content, key) {
130
- const match = content.match(new RegExp(`(?:^|\\n)\\s*${key}\\s*=\\s*\\[([\\s\\S]*?)\\]`));
131
- if (!match) return;
132
- const arrayBody = match[1] ?? "";
133
- const stringMatches = [...arrayBody.matchAll(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^']*)'/g)];
134
- if (stringMatches.length === 0 && arrayBody.trim().length > 0) return;
135
- return stringMatches.map((entry) => entry[1] ?? entry[2] ?? "");
136
- }
137
- function parseTomlTableSection(content, table) {
138
- const strippedContent = stripTomlLineComments(content);
139
- const tablePattern = tomlDottedKeyPattern(table);
140
- const match = new RegExp(`^\\s*\\[\\s*${tablePattern}\\s*\\]\\s*$`, "m").exec(strippedContent);
141
- if (!match) return;
142
- const sectionStart = match.index + match[0].length;
143
- const rest = strippedContent.slice(sectionStart);
144
- const nextTableOffset = rest.search(/^\s*\[/m);
145
- return nextTableOffset === -1 ? rest : rest.slice(0, nextTableOffset);
146
- }
147
- function parseTomlArrayTableSections(content, table) {
148
- const strippedContent = stripTomlLineComments(content);
149
- const escapedTable = table.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
150
- const headerPattern = new RegExp(`^\\s*\\[\\[\\s*${escapedTable}\\s*\\]\\]\\s*$`, "gm");
151
- const sections = [];
152
- for (let match = headerPattern.exec(strippedContent); match; match = headerPattern.exec(strippedContent)) {
153
- const sectionStart = headerPattern.lastIndex;
154
- const rest = strippedContent.slice(sectionStart);
155
- const nextTableOffset = rest.search(/^\s*\[/m);
156
- sections.push(nextTableOffset === -1 ? rest : rest.slice(0, nextTableOffset));
157
- }
158
- return sections;
159
- }
160
- function firstTomlTableOffset(content) {
161
- return content.match(/^\s*\[[^\]\n]/m)?.index ?? content.length;
162
- }
163
- function stripTomlLineComments(value) {
164
- let output = "";
165
- let quote;
166
- let escaped = false;
167
- for (let index = 0; index < value.length; index += 1) {
168
- const char = value[index] ?? "";
169
- if (quote) {
170
- output += char;
171
- if (quote === "\"" && escaped) {
172
- escaped = false;
173
- continue;
174
- }
175
- if (quote === "\"" && char === "\\") {
176
- escaped = true;
177
- continue;
178
- }
179
- if (char === quote) quote = void 0;
180
- continue;
181
- }
182
- if (char === "\"" || char === "'") {
183
- quote = char;
184
- output += char;
185
- continue;
186
- }
187
- if (char === "#") {
188
- while (index < value.length && value[index] !== "\n") index += 1;
189
- if (value[index] === "\n") output += "\n";
190
- continue;
191
- }
192
- output += char;
193
- }
194
- return output;
195
- }
196
- function normalizeRequirementsSandboxMode(value) {
197
- const compact = value.replace(/[\s_-]/g, "").toLowerCase();
198
- if (compact === "readonly") return "read-only";
199
- if (compact === "workspacewrite") return "workspace-write";
200
- if (compact === "dangerfullaccess") return "danger-full-access";
201
- }
202
- function normalizeRequirementsHostName(value) {
203
- const normalized = value.trim().replace(/\.+$/g, "").toLowerCase();
204
- return normalized.length > 0 ? normalized : void 0;
205
- }
206
- function requirementsHostNameMatchesAnyPattern(hostName, patterns) {
207
- return patterns.some((pattern) => {
208
- const normalizedPattern = normalizeRequirementsHostName(pattern);
209
- return normalizedPattern !== void 0 && globPatternMatches(hostName, normalizedPattern);
210
- });
211
- }
212
- function globPatternMatches(value, pattern) {
213
- let regex = "^";
214
- for (const char of pattern) if (char === "*") regex += ".*";
215
- else if (char === "?") regex += ".";
216
- else regex += char.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
217
- regex += "$";
218
- return new RegExp(regex).test(value);
219
- }
220
- function normalizeRequirementsApprovalPolicy(value) {
221
- const normalized = value.trim().toLowerCase();
222
- if (normalized === "on-failure") return "on-request";
223
- if (normalized === "untrusted") return normalized;
224
- return resolveApprovalPolicy(normalized);
225
- }
226
- function normalizeRequirementsApprovalsReviewer(value) {
227
- return resolveApprovalsReviewer(value.trim().toLowerCase());
228
- }
229
- function selectGuardianApprovalPolicy(allowedApprovalPolicies, execModeRequiringPromptingApprovals) {
230
- if (allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("on-request")) return "on-request";
231
- if (allowedApprovalPolicies.has("untrusted")) return "untrusted";
232
- if (execModeRequiringPromptingApprovals) throw new Error(`tools.exec.mode=${execModeRequiringPromptingApprovals} requires Codex app-server prompting approvals`);
233
- if (allowedApprovalPolicies.has("never")) return "never";
234
- return "on-request";
235
- }
236
- function selectGuardianApprovalsReviewer(allowedApprovalsReviewers, execModeRequiringAutoReviewer) {
237
- if (allowedApprovalsReviewers === void 0 || allowedApprovalsReviewers.has("auto_review")) return "auto_review";
238
- if (allowedApprovalsReviewers.has("guardian_subagent")) return "guardian_subagent";
239
- if (execModeRequiringAutoReviewer) throw new Error(`tools.exec.mode=${execModeRequiringAutoReviewer} requires Codex app-server auto approvals`);
240
- if (allowedApprovalsReviewers.has("user")) return "user";
241
- return "auto_review";
242
- }
243
- function selectUserApprovalsReviewer(allowedApprovalsReviewers, execModeRequiringUserReviewer) {
244
- if (allowedApprovalsReviewers === void 0 || allowedApprovalsReviewers.has("user")) return "user";
245
- throw new Error(`tools.exec.mode=${execModeRequiringUserReviewer ?? "ask"} requires Codex app-server user approvals`);
246
- }
247
- //#endregion
248
9
  //#region extensions/codex/src/app-server/config-layer-policy.ts
249
10
  const CODEX_SESSION_OVERRIDABLE_LAYER_TYPES = /* @__PURE__ */ new Set([
250
11
  "packagedDefaults",
@@ -478,180 +239,6 @@ function inferProviderFromModelRef(model) {
478
239
  return slashIndex > 0 ? normalized?.slice(0, slashIndex) : void 0;
479
240
  }
480
241
  //#endregion
481
- //#region extensions/codex/src/app-server/config-security.ts
482
- function shouldAutoApproveCodexAppServerApprovals(appServer) {
483
- return appServer.networkProxy === void 0 && appServer.approvalPolicy === "never" && appServer.sandbox === "danger-full-access";
484
- }
485
- function resolveCodexAppServerNetworkProxy(config, sandbox) {
486
- if (config?.enabled !== true) return {};
487
- const fileSystemMode = config.baseProfile === "read-only" || !config.baseProfile && sandbox === "read-only" ? "read" : "write";
488
- const networkConfig = removeUndefinedJsonFields({
489
- enabled: true,
490
- mode: config.mode,
491
- domains: normalizeNetworkProxyPermissionMap(config.domains),
492
- unix_sockets: normalizeNetworkProxyPermissionMap(config.unixSockets),
493
- proxy_url: readNonEmptyString(config.proxyUrl),
494
- socks_url: readNonEmptyString(config.socksUrl),
495
- enable_socks5: config.enableSocks5,
496
- enable_socks5_udp: config.enableSocks5Udp,
497
- allow_upstream_proxy: config.allowUpstreamProxy,
498
- allow_local_binding: config.allowLocalBinding,
499
- dangerously_allow_non_loopback_proxy: config.dangerouslyAllowNonLoopbackProxy,
500
- dangerously_allow_all_unix_sockets: config.dangerouslyAllowAllUnixSockets
501
- });
502
- const profile = {
503
- filesystem: {
504
- ":minimal": "read",
505
- ":project_roots": { ".": fileSystemMode }
506
- },
507
- network: networkConfig
508
- };
509
- const profileName = resolveNetworkProxyPermissionProfileName(config, profile);
510
- const configPatch = {
511
- "features.network_proxy.enabled": true,
512
- default_permissions: profileName,
513
- permissions: { [profileName]: profile }
514
- };
515
- return { networkProxy: {
516
- profileName,
517
- configFingerprint: fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch),
518
- configPatch
519
- } };
520
- }
521
- function resolveNetworkProxyPermissionProfileName(config, profile) {
522
- const explicitProfileName = readNonEmptyString(config.profileName);
523
- if (explicitProfileName) return explicitProfileName;
524
- const suffix = createHash("sha256").update(stableStringifyJson({
525
- version: 1,
526
- profile
527
- })).digest("hex").slice(0, 16);
528
- return `${DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX}-${suffix}`;
529
- }
530
- function fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch) {
531
- return createHash("sha256").update(stableStringifyJson(configPatch)).digest("hex");
532
- }
533
- function normalizeNetworkProxyPermissionMap(value) {
534
- const entries = Object.entries(value ?? {}).map(([key, permission]) => [key.trim(), permission]).filter(([key]) => key.length > 0);
535
- return entries.length > 0 ? Object.fromEntries(entries) : void 0;
536
- }
537
- function removeUndefinedJsonFields(value) {
538
- return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== void 0));
539
- }
540
- function stableStringifyJson(value) {
541
- if (Array.isArray(value)) return `[${value.map((item) => stableStringifyJson(item)).join(",")}]`;
542
- if (value && typeof value === "object") return `{${Object.entries(value).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stableStringifyJson(item)}`).join(",")}}`;
543
- return JSON.stringify(value);
544
- }
545
- /** Explicit MCP prompting must bypass Codex's unconditional Never-policy approval. */
546
- function hasCodexMcpToolApprovalOverrides(servers, serverNames, projectedMcpServers) {
547
- const modes = new Map(Object.entries(projectedMcpServers ?? {}).map(([name, server]) => [name, server.default_tools_approval_mode]));
548
- for (const name of serverNames ?? Object.keys(servers ?? {})) {
549
- const server = servers?.[name];
550
- const mode = server?.codex?.defaultToolsApprovalMode;
551
- if (mode !== void 0 && (serverNames !== void 0 || server?.enabled !== false)) modes.set(name, mode);
552
- }
553
- return [...modes.values()].some((mode) => mode === "auto" || mode === "prompt");
554
- }
555
- function withMcpElicitationsApprovalPolicy(policy) {
556
- if (policy === "untrusted") return policy;
557
- if (typeof policy !== "string") return { granular: {
558
- ...policy.granular,
559
- mcp_elicitations: true
560
- } };
561
- if (policy === "never") return { granular: {
562
- mcp_elicitations: true,
563
- rules: false,
564
- sandbox_approval: false,
565
- request_permissions: false,
566
- skill_approval: false
567
- } };
568
- return { granular: {
569
- mcp_elicitations: true,
570
- rules: true,
571
- sandbox_approval: true,
572
- request_permissions: true,
573
- skill_approval: true
574
- } };
575
- }
576
- function resolveTransport(value) {
577
- return value === "websocket" || value === "unix" ? value : "stdio";
578
- }
579
- function normalizeRemoteWorkspaceRoot(value) {
580
- return readNonEmptyString(value);
581
- }
582
- function inferCodexAppServerConnectionClass(params) {
583
- if (params.transport !== "websocket") return "local-loopback";
584
- return params.url && isLoopbackWebSocketUrl(params.url) ? "local-loopback" : "remote";
585
- }
586
- function assertCodexAppServerConnectionClassConfig(params) {
587
- if (params.connectionClass === "remote" && !hasIdentityBearingWebSocketAuth({
588
- authToken: params.authToken,
589
- headers: params.headers
590
- })) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
591
- }
592
- /** Applies the canonical remote-auth boundary to any Codex AppServer transport. */
593
- function assertCodexAppServerConnectionSecurity(params) {
594
- assertCodexAppServerConnectionClassConfig({
595
- connectionClass: inferCodexAppServerConnectionClass(params),
596
- authToken: params.authToken,
597
- headers: params.headers
598
- });
599
- }
600
- function isLoopbackWebSocketUrl(value) {
601
- let parsed;
602
- try {
603
- parsed = new URL(value);
604
- } catch {
605
- return false;
606
- }
607
- if (parsed.protocol !== "ws:" && parsed.protocol !== "wss:") return false;
608
- return isLoopbackHost(parsed.hostname);
609
- }
610
- function hasIdentityBearingWebSocketAuth(params) {
611
- if (readNonEmptyString(params.authToken)) return true;
612
- return Object.entries(params.headers).some(([key, value]) => key.trim().toLowerCase() === "authorization" && Boolean(readNonEmptyString(value)));
613
- }
614
- function resolvePolicyMode(value) {
615
- return value === "guardian" || value === "yolo" ? value : void 0;
616
- }
617
- function resolveDefaultCodexAppServerPolicy(params) {
618
- if (params.transport !== "stdio") return {
619
- mode: "yolo",
620
- dangerFullAccessAllowed: true
621
- };
622
- const content = readCodexRequirementsToml(params);
623
- if (content === void 0) {
624
- if (!params.forceGuardian) return {
625
- mode: "yolo",
626
- dangerFullAccessAllowed: true
627
- };
628
- return {
629
- mode: "guardian",
630
- dangerFullAccessAllowed: true,
631
- approvalPolicy: selectGuardianApprovalPolicy(void 0, params.execModeRequiringPromptingApprovals),
632
- approvalsReviewer: params.forceUserReviewer ? selectUserApprovalsReviewer(void 0, params.execModeRequiringUserReviewer) : selectGuardianApprovalsReviewer(void 0, params.execModeRequiringPromptingApprovals === "auto" ? "auto" : void 0),
633
- sandbox: selectGuardianSandbox(void 0)
634
- };
635
- }
636
- const allowedSandboxModes = parseAllowedSandboxModesFromCodexRequirements(content, readNonEmptyString(params.hostName) ?? hostname());
637
- const allowedApprovalPolicies = parseAllowedApprovalPoliciesFromCodexRequirements(content);
638
- const allowedApprovalsReviewers = parseAllowedApprovalsReviewersFromCodexRequirements(content);
639
- const yoloSandboxAllowed = allowedSandboxModes === void 0 || allowedSandboxModes.has("danger-full-access");
640
- const yoloApprovalAllowed = allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("never") && !allowedApprovalPolicies.has("untrusted");
641
- const yoloReviewerAllowed = allowedApprovalsReviewers === void 0 || allowedApprovalsReviewers.has("user");
642
- if (!params.forceGuardian && yoloSandboxAllowed && yoloApprovalAllowed && yoloReviewerAllowed) return {
643
- mode: "yolo",
644
- dangerFullAccessAllowed: true
645
- };
646
- return {
647
- mode: "guardian",
648
- dangerFullAccessAllowed: yoloSandboxAllowed,
649
- approvalPolicy: selectGuardianApprovalPolicy(allowedApprovalPolicies, params.execModeRequiringPromptingApprovals),
650
- approvalsReviewer: params.forceUserReviewer ? selectUserApprovalsReviewer(allowedApprovalsReviewers, params.execModeRequiringUserReviewer) : selectGuardianApprovalsReviewer(allowedApprovalsReviewers, params.execModeRequiringPromptingApprovals === "auto" ? "auto" : void 0),
651
- sandbox: selectGuardianSandbox(allowedSandboxModes)
652
- };
653
- }
654
- //#endregion
655
242
  //#region extensions/codex/src/app-server/config-options.ts
656
243
  /**
657
244
  * Sole owner of the app-server home-scope decision. Ordinary harness connections
@@ -845,6 +432,7 @@ function resolveCodexAppServerStartOptionsForAgent(params) {
845
432
  ...startOptions,
846
433
  managedCommandOrder: "desktop-first"
847
434
  };
435
+ if (!params.agentDir) throw new Error("Agent-scoped Codex requires an OpenClaw agent directory");
848
436
  return codexConfigEnablesNativeComputerUse({
849
437
  agentDir: params.agentDir,
850
438
  codexConfigToml: params.codexConfigToml,
@@ -952,4 +540,4 @@ function codexSandboxPolicyForTurn(mode, cwd, nativeArgs = []) {
952
540
  };
953
541
  }
954
542
  //#endregion
955
- export { selectUserApprovalsReviewer as C, selectGuardianApprovalsReviewer as S, parseAllowedApprovalPoliciesFromCodexRequirements as _, resolveCodexAppServerStartOptionsForAgent as a, readCodexRequirementsToml as b, hasCodexMcpToolApprovalOverrides as c, withMcpElicitationsApprovalPolicy as d, assertCodexModelBackedReviewerEffectiveConfig as f, readCodexEffectiveConfig as g, CODEX_SESSION_OVERRIDABLE_LAYER_TYPES as h, resolveCodexAppServerHomeScope as i, resolveCodexAppServerNetworkProxy as l, resolveCodexModelBackedReviewerPolicyContext as m, codexSandboxPolicyForTurn as n, resolveCodexComputerUseConfig as o, canUseCodexModelBackedApprovalsReviewerForModel as p, createCodexAppServerConfig as r, assertCodexAppServerConnectionSecurity as s, codexAppServerStartOptionsKey as t, shouldAutoApproveCodexAppServerApprovals as u, parseAllowedApprovalsReviewersFromCodexRequirements as v, selectGuardianSandbox as w, selectGuardianApprovalPolicy as x, parseAllowedSandboxModesFromCodexRequirements as y };
543
+ export { resolveCodexAppServerStartOptionsForAgent as a, canUseCodexModelBackedApprovalsReviewerForModel as c, readCodexEffectiveConfig as d, resolveCodexAppServerHomeScope as i, resolveCodexModelBackedReviewerPolicyContext as l, codexSandboxPolicyForTurn as n, resolveCodexComputerUseConfig as o, createCodexAppServerConfig as r, assertCodexModelBackedReviewerEffectiveConfig as s, codexAppServerStartOptionsKey as t, CODEX_SESSION_OVERRIDABLE_LAYER_TYPES as u };
@@ -1,11 +1,8 @@
1
- import { i as normalizeCodexServiceTier, m as CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN } from "./config-utils-DujwEnhg.js";
2
- import { n as normalizeCodexAppServerArgs } from "./launch-args-RXQwn8zV.js";
3
- import { asNullableRecord, isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
1
+ import { i as normalizeCodexServiceTier, m as CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN } from "./config-utils-DujwEnhg.mjs";
2
+ import { asNullableRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
4
3
  import { z } from "zod";
5
4
  import { buildSecretInputSchema } from "openclaw/plugin-sdk/secret-input";
6
5
  import { detectWindowsSpawnCommandInlineArgs } from "openclaw/plugin-sdk/windows-spawn";
7
- import path from "node:path";
8
- import { homedir } from "node:os";
9
6
  //#region extensions/codex/src/app-server/session-discovery-config.ts
10
7
  const codexSessionCatalogHomeSchema = z.union([z.string().trim().min(1), z.object({
11
8
  path: z.string().trim().min(1),
@@ -60,6 +57,11 @@ const codexPluginDestructivePolicySchema = z.union([
60
57
  z.literal("ask")
61
58
  ]);
62
59
  const codexAppServerServiceTierSchema = z.preprocess((value) => value === null ? null : normalizeCodexServiceTier(value), z.string().trim().min(1).nullable().optional()).optional();
60
+ const codexAppServerCyberFailoverSchema = z.object({
61
+ mode: z.enum(["auto", "off"]).optional(),
62
+ model: z.string().trim().min(1).optional(),
63
+ cooloffMs: z.number().positive().optional()
64
+ }).strict();
63
65
  const codexAppServerExperimentalSchema = z.object({ sandboxExecServer: z.boolean().optional() }).strict();
64
66
  const codexAppServerRemoteWorkspaceRootSchema = z.string().trim().min(1);
65
67
  const codexAppServerNetworkProxyDomainPermissionSchema = z.enum(["allow", "deny"]);
@@ -154,6 +156,7 @@ const codexPluginConfigSchema = z.object({
154
156
  sandbox: codexAppServerSandboxSchema.optional(),
155
157
  approvalsReviewer: codexAppServerApprovalsReviewerSchema.optional(),
156
158
  serviceTier: codexAppServerServiceTierSchema,
159
+ cyberFailover: codexAppServerCyberFailoverSchema.optional(),
157
160
  networkProxy: codexAppServerNetworkProxySchema.optional(),
158
161
  defaultWorkspaceDir: z.string().optional(),
159
162
  experimental: codexAppServerExperimentalSchema.optional()
@@ -227,49 +230,4 @@ function resolveCodexPluginDestructivePolicy(policy) {
227
230
  };
228
231
  }
229
232
  //#endregion
230
- //#region extensions/codex/src/app-server/auth-start-options.ts
231
- const CODEX_APP_SERVER_HOME_DIRNAME = "codex-home";
232
- const CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE = "cli_auth_credentials_store=\"ephemeral\"";
233
- function resolveCodexAppServerHomeDir(agentDir) {
234
- return path.join(path.resolve(agentDir), CODEX_APP_SERVER_HOME_DIRNAME);
235
- }
236
- /** Resolves the native user Codex home used by Desktop and the CLI. */
237
- function resolveCodexAppServerUserHomeDir(env = process.env, homedir$1 = homedir) {
238
- const configured = normalizeOptionalString(env.CODEX_HOME);
239
- return path.resolve(configured ?? path.join(homedir$1(), ".codex"));
240
- }
241
- /** Resolves the local CODEX_HOME used when starting one app-server connection. */
242
- function resolveCodexAppServerLocalHomeDir(startOptions, agentDir, env = process.env) {
243
- const configured = startOptions.env?.CODEX_HOME;
244
- if (configured?.trim()) return configured;
245
- return startOptions.homeScope === "user" ? resolveCodexAppServerUserHomeDir(env) : resolveCodexAppServerHomeDir(agentDir);
246
- }
247
- /** Forces OpenClaw-owned Codex auth to remain process-local. */
248
- function withEphemeralCodexAuthStore(params) {
249
- const { startOptions } = params;
250
- if (!params.preparedAuth && params.authProfileId === null) return startOptions;
251
- const args = normalizeCodexAppServerArgs(startOptions.args, CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE);
252
- return args === startOptions.args ? startOptions : {
253
- ...startOptions,
254
- args
255
- };
256
- }
257
- //#endregion
258
- //#region extensions/codex/src/app-server/protocol.ts
259
- /** Namespace Codex keeps directly model-visible without exposing it to Code Mode guests. */
260
- const CODEX_OPENCLAW_DIRECT_DYNAMIC_TOOL_NAMESPACE = "openclaw_direct";
261
- function flattenCodexDynamicToolFunctions(tools) {
262
- return (tools ?? []).flatMap((tool) => tool.type === "namespace" ? tool.tools : [tool]);
263
- }
264
- /** Asserts the experimental beforeTurnId request field before it crosses the app-server boundary. */
265
- function assertCodexThreadForkParams(value) {
266
- 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");
267
- return value;
268
- }
269
- const CODEX_INTERACTIVE_THREAD_SOURCE_KINDS = ["cli", "vscode"];
270
- const CODEX_INTERACTIVE_CUSTOM_THREAD_SOURCES = ["atlas", "chatgpt"];
271
- function isJsonObject(value) {
272
- return isRecord(value);
273
- }
274
- //#endregion
275
- export { resolveCodexPluginsPolicy as S, assertCodexAppServerCommandHasNoInlineArgs as _, flattenCodexDynamicToolFunctions as a, isCodexSandboxExecServerEnabled as b, resolveCodexAppServerLocalHomeDir as c, DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX as d, DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS as f, DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS as g, DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME as h, assertCodexThreadForkParams as i, resolveCodexAppServerUserHomeDir as l, DEFAULT_CODEX_COMPUTER_USE_MCP_SERVER_NAME as m, CODEX_INTERACTIVE_THREAD_SOURCE_KINDS as n, isJsonObject as o, DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS as p, CODEX_OPENCLAW_DIRECT_DYNAMIC_TOOL_NAMESPACE as r, resolveCodexAppServerHomeDir as s, CODEX_INTERACTIVE_CUSTOM_THREAD_SOURCES as t, withEphemeralCodexAuthStore as u, isCodexPairedNodeRemoteExecPlacementSandbox as v, readCodexPluginConfig as x, isCodexRemoteExecPlacementSandbox as y };
233
+ export { DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME as a, isCodexPairedNodeRemoteExecPlacementSandbox as c, readCodexPluginConfig as d, resolveCodexPluginsPolicy as f, DEFAULT_CODEX_COMPUTER_USE_MCP_SERVER_NAME as i, isCodexRemoteExecPlacementSandbox as l, DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS as n, DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS as o, DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS as r, assertCodexAppServerCommandHasNoInlineArgs as s, DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX as t, isCodexSandboxExecServerEnabled as u };
@@ -1,5 +1,5 @@
1
- import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
2
- import { r as createCodexAppServerConfig } from "./config-options-CXMq1T-C.js";
1
+ import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
+ import { r as createCodexAppServerConfig } from "./config-options-BsanJ8QG.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({