@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,17 +1,80 @@
1
- import { i as readCodexAppServerConfigOptions } from "./launch-args-DnMak49W.mjs";
2
- import { C as readCodexErrorNotification, E as createCodexElicitationResponse, b as assertCodexThreadStartResponse, x as assertCodexTurnStartResponse } from "./client-vXs2929Q.mjs";
3
- import "./config-CedDWjM-.mjs";
4
- import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-CeAhl_h4.mjs";
5
- import { u as isCodexAppServerStartSelectionChangedError } from "./shared-client-BpTtuLQ5.mjs";
6
- import { a as closeCodexStartupClientBestEffort, o as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-BpYKdTA0.mjs";
7
- import { t as CodexEphemeralTurn } from "./ephemeral-turn-R1gA8Sn6.mjs";
8
- import { r as readModelListResult } from "./models-BDFgm_G-.mjs";
9
- import { Ot as mergeCodexThreadConfigs, S as readCodexInheritedMcpServerNames, b as buildCodexRuntimeThreadConfig, q as attestCodexRestrictedToolSurfaceMcpServersDisabled, v as assertCodexManagedRequirementsDoNotOverrideToolPolicy, y as buildCodexRingZeroThreadConfigPatch } from "./thread-lifecycle-Cik28qWn.mjs";
10
- import { a as resolveCodexPromptError } from "./usage-limit-error-C0ow7DOc.mjs";
1
+ import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
+ import { a as resolveCodexPrivateLauncher, i as readCodexAppServerConfigOptions } from "./launch-args-DbFCehO7.mjs";
3
+ import { d as readCodexEffectiveConfig } from "./config-options-CzyWLTJt.mjs";
4
+ import "./config-DKhXquav.mjs";
5
+ import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
6
+ import { u as isCodexAppServerStartSelectionChangedError } from "./shared-client-DqyTMYug.mjs";
7
+ import { S as assertCodexTurnStartResponse, T as readCodexErrorNotification, k as createCodexElicitationResponse, x as assertCodexThreadStartResponse } from "./client-N0JpgSzF.mjs";
8
+ import { o as closeCodexStartupClientBestEffort, s as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-DOP-cW5j.mjs";
9
+ import { t as CodexEphemeralTurn } from "./ephemeral-turn-CDsPJOa2.mjs";
10
+ import { i as readModelListResult } from "./models-DHXZtVVk.mjs";
11
+ import { R as attestCodexRestrictedToolSurfaceMcpServersDisabled, St as mergeCodexThreadConfigs, l as readCodexInheritedMcpServerNames, n as buildCodexRingZeroThreadConfigPatch, r as buildCodexRuntimeThreadConfig, t as assertCodexManagedRequirementsDoNotOverrideToolPolicy } from "./thread-requests-B_bRnMGN.mjs";
12
+ import { S as resolveCodexAppServerReasoningEffort } from "./thread-lifecycle-DPflntEJ.mjs";
13
+ import { a as resolveCodexPromptError } from "./usage-limit-error-QXerDo3i.mjs";
11
14
  import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
15
+ import { parse } from "smol-toml";
12
16
  import path from "node:path";
13
17
  import fs from "node:fs/promises";
18
+ import { canonicalPathFromExistingAncestor, isPathInside } from "openclaw/plugin-sdk/file-access-runtime";
14
19
  import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
20
+ //#region extensions/codex/src/app-server/bounded-hook-policy.ts
21
+ function assertNoHookDeclarations(config) {
22
+ if (config.hooks === void 0) return;
23
+ if (!isJsonObject(config.hooks) || Object.entries(config.hooks).some(([event, value]) => event === "state" ? !isJsonObject(value) : !Array.isArray(value) || value.length > 0)) throw new Error("Codex private completion received unmanaged hook declarations");
24
+ }
25
+ async function assertPrivateLayerPath(value, root) {
26
+ if (typeof value !== "string" || !path.isAbsolute(value) || !isPathInside(root, await canonicalPathFromExistingAncestor(value))) throw new Error("Codex private completion inherited an external user or project config layer");
27
+ }
28
+ /** Proves hook discovery is confined to managed policy and this completion's private roots. */
29
+ async function assertCodexPrivateHookIsolation(client, workspace, signal) {
30
+ signal?.throwIfAborted();
31
+ const [codexHome, cwd] = await Promise.all([fs.realpath(workspace.codexHome), fs.realpath(workspace.cwd)]);
32
+ const response = await readCodexEffectiveConfig(client, cwd, { signal });
33
+ const features = response.config.features;
34
+ if (!isJsonObject(features) || typeof features.hooks !== "boolean" || features.plugins !== false || !Array.isArray(response.config.project_root_markers) || response.config.project_root_markers.length !== 0) throw new Error("Codex private completion could not verify isolated hook discovery settings");
35
+ if (!Array.isArray(response.layers)) throw new Error("Codex private completion config/read omitted config layers");
36
+ let privateUserLayer = false;
37
+ for (const layer of response.layers) {
38
+ if (!isJsonObject(layer) || !isJsonObject(layer.name) || !isJsonObject(layer.config)) throw new Error("Codex private completion config/read returned invalid config layers");
39
+ switch (layer.name.type) {
40
+ case "user":
41
+ await assertPrivateLayerPath(layer.name.file, codexHome);
42
+ privateUserLayer = true;
43
+ break;
44
+ case "project":
45
+ await assertPrivateLayerPath(layer.name.dotCodexFolder, cwd);
46
+ break;
47
+ case "packagedDefaults":
48
+ case "sessionFlags":
49
+ assertNoHookDeclarations(layer.config);
50
+ break;
51
+ case "system":
52
+ case "mdm":
53
+ case "enterpriseManaged": break;
54
+ default: throw new Error("Codex private completion received an unsupported config layer");
55
+ }
56
+ }
57
+ if (!privateUserLayer) throw new Error("Codex private completion could not verify its private Codex home");
58
+ signal?.throwIfAborted();
59
+ if (!features.hooks) {
60
+ const requirementsResponse = await client.request("configRequirements/read", {}, { signal });
61
+ if (!isJsonObject(requirementsResponse) || !isJsonObject(requirementsResponse.requirements) || !isJsonObject(requirementsResponse.requirements.featureRequirements) || requirementsResponse.requirements.featureRequirements.hooks !== false) throw new Error("Codex private completion cannot disable hooks without a managed requirement");
62
+ return { activeManagedHooks: false };
63
+ }
64
+ const inventory = await client.request("hooks/list", { cwds: [cwd] }, { signal });
65
+ if (!isJsonObject(inventory) || !Array.isArray(inventory.data) || inventory.data.length !== 1 || inventory.nextCursor !== void 0 && inventory.nextCursor !== null) throw new Error("Codex private completion received an incomplete hook inventory");
66
+ const entry = inventory.data[0];
67
+ if (!isJsonObject(entry) || entry.cwd !== cwd || !Array.isArray(entry.hooks) || !Array.isArray(entry.errors) || entry.errors.length !== 0 || !Array.isArray(entry.warnings) || entry.warnings.length !== 0) throw new Error("Codex private completion could not verify its hook inventory");
68
+ let activeManagedHooks = false;
69
+ for (const hook of entry.hooks) {
70
+ if (!isJsonObject(hook) || typeof hook.key !== "string" || !hook.key.trim() || typeof hook.enabled !== "boolean" || typeof hook.isManaged !== "boolean") throw new Error("Codex private completion received invalid hook metadata");
71
+ if (hook.enabled && !hook.isManaged) throw new Error("Codex private completion cannot run unmanaged hooks");
72
+ activeManagedHooks ||= hook.enabled && hook.isManaged;
73
+ }
74
+ signal?.throwIfAborted();
75
+ return { activeManagedHooks };
76
+ }
77
+ //#endregion
15
78
  //#region extensions/codex/src/app-server/bounded-turn.ts
16
79
  const CODEX_APP_SERVER_ARGS_ENV_KEY = "OPENCLAW_CODEX_APP_SERVER_ARGS";
17
80
  const CODEX_BOUNDED_THREAD_CONFIG = {
@@ -26,6 +89,7 @@ const CODEX_BOUNDED_THREAD_CONFIG = {
26
89
  };
27
90
  const CODEX_PRIVATE_BOUNDED_THREAD_CONFIG = {
28
91
  "features.hooks": false,
92
+ project_root_markers: [],
29
93
  notify: []
30
94
  };
31
95
  const CODEX_SETTLED_FINALIZER_THREAD_CONFIG = {
@@ -68,7 +132,7 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
68
132
  if (timeoutMs <= 0) throw timeoutError;
69
133
  params.assertCurrent?.();
70
134
  const agentDir = params.agentDir?.trim() || void 0;
71
- const startOptions = workspace.codexHome ? buildPrivateCodexAppServerStartOptions(appServer.start, workspace.codexHome) : appServer.start;
135
+ const startOptions = workspace.codexHome ? buildPrivateCodexAppServerStartOptions(appServer.start, workspace.codexHome, workspace.cwd, params.requireNoExternalCapabilities === true) : appServer.start;
72
136
  const ownsClient = !params.options.clientFactory;
73
137
  const clientOptions = {
74
138
  startOptions,
@@ -80,7 +144,7 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
80
144
  assertCurrent: params.assertCurrent,
81
145
  ...params.signal ? { abandonSignal: params.signal } : {}
82
146
  };
83
- const client = params.options.clientFactory ? await params.options.clientFactory(clientOptions) : await import("./shared-client-BpTtuLQ5.mjs").then((n) => n.y).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
147
+ const client = params.options.clientFactory ? await params.options.clientFactory(clientOptions) : await import("./shared-client-DqyTMYug.mjs").then((n) => n.v).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
84
148
  ...clientOptions,
85
149
  authProfileStore: params.authProfileStore
86
150
  }));
@@ -107,7 +171,6 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
107
171
  if (remainingRunMs <= 0) abortRun(timeoutError);
108
172
  const timeout = setTimeout(() => abortRun(timeoutError), Math.max(1, remainingRunMs));
109
173
  timeout.unref?.();
110
- let retrySelection = false;
111
174
  const requestOptions = {
112
175
  timeoutMs,
113
176
  signal: abortController.signal,
@@ -122,11 +185,23 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
122
185
  ...requestOptions
123
186
  });
124
187
  const inheritedMcpServerNames = params.requireNoExternalCapabilities ? await readCodexInheritedMcpServerNames(client, workspace.cwd, abortController.signal) : [];
125
- if (params.requireNoExternalCapabilities) await assertCodexManagedRequirementsDoNotOverrideToolPolicy(client, { restrictedToolSurface: true }, abortController.signal);
126
- const threadConfig = buildCodexRuntimeThreadConfig(resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames), { nativeCodeModeEnabled: false });
188
+ let enableManagedHooks = false;
189
+ if (params.requireNoExternalCapabilities) {
190
+ let privateManagedHooksPresent = false;
191
+ if (workspace.codexHome) privateManagedHooksPresent = (await assertCodexPrivateHookIsolation(client, {
192
+ codexHome: workspace.codexHome,
193
+ cwd: workspace.cwd
194
+ }, abortController.signal)).activeManagedHooks;
195
+ ({enableManagedHooks} = await assertCodexManagedRequirementsDoNotOverrideToolPolicy(client, {
196
+ restrictedToolSurface: true,
197
+ allowConfiguredManagedHooks: workspace.codexHome !== void 0,
198
+ privateManagedHooksPresent
199
+ }, abortController.signal));
200
+ }
201
+ const threadConfig = buildCodexRuntimeThreadConfig(resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames, enableManagedHooks), { nativeCodeModeEnabled: false });
127
202
  params.assertCurrent?.();
128
203
  const thread = assertCodexThreadStartResponse(await client.request("thread/start", {
129
- model: modelSelection.runtimeModelId,
204
+ model: modelSelection.model,
130
205
  ...params.modelProvider ? { modelProvider: params.modelProvider } : {},
131
206
  cwd: workspace.cwd,
132
207
  approvalPolicy: "on-request",
@@ -157,7 +232,11 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
157
232
  threadId: thread.thread.id,
158
233
  input: params.input,
159
234
  approvalPolicy: "on-request",
160
- effort: "low"
235
+ effort: params.thinkLevel === void 0 ? "low" : resolveCodexAppServerReasoningEffort({
236
+ thinkLevel: params.thinkLevel,
237
+ modelId: modelSelection.model,
238
+ supportedReasoningEfforts: modelSelection.supportedReasoningEfforts
239
+ })
161
240
  }, requestOptions));
162
241
  activeTurnId = turn.turn.id;
163
242
  if (abortController.signal.aborted) requestInterrupt();
@@ -171,17 +250,20 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
171
250
  throw failure instanceof Error ? failure : new Error(failure ?? `codex app-server ${params.taskLabel} turn failed`);
172
251
  }
173
252
  if (result.turn?.status !== "completed") throw new Error(`codex app-server ${params.taskLabel} turn ended with status ${result.turn?.status ?? "unknown"}`);
174
- if (!result.text && !params.allowEmptyText) throw new Error(`Codex app-server ${params.taskLabel} turn returned no text.`);
253
+ const lastHookPrompt = enableManagedHooks ? result.items.findLastIndex((item) => item.type === "hookPrompt") : -1;
254
+ const text = lastHookPrompt < 0 ? result.text : result.items.slice(lastHookPrompt + 1).filter((item) => item.type === "agentMessage").map((item) => item.text?.trim()).filter(Boolean).join("\n\n");
255
+ if (!text && !params.allowEmptyText) throw new Error(`Codex app-server ${params.taskLabel} turn returned no text.`);
175
256
  params.assertCurrent?.();
176
257
  return {
177
- text: result.text,
258
+ text,
178
259
  items: result.items,
179
260
  usage: result.usage,
180
- model: modelSelection.catalogId,
261
+ model: modelSelection.id,
181
262
  nativeSelection: {
182
263
  model: thread.model,
183
264
  modelProvider: thread.modelProvider
184
- }
265
+ },
266
+ managedHooksEnabled: enableManagedHooks
185
267
  };
186
268
  } finally {
187
269
  await interruptPromise;
@@ -189,28 +271,32 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
189
271
  }
190
272
  } catch (error) {
191
273
  if (abortController.signal.aborted) throw resolveCodexBoundedTurnAbortError(abortController.signal, params.taskLabel, timeoutError);
192
- if (ownsClient && isCodexAppServerStartSelectionChangedError(error) && selectionAttempt === 0) retrySelection = true;
193
- else throw error;
274
+ if (!ownsClient || !isCodexAppServerStartSelectionChangedError(error) || selectionAttempt !== 0) throw error;
194
275
  } finally {
195
276
  clearTimeout(timeout);
196
277
  params.signal?.removeEventListener("abort", abortFromCaller);
197
278
  await interruptPromise;
198
279
  if (ownsClient) await closeCodexStartupClientBestEffort(client);
199
280
  }
200
- if (retrySelection) return await runBoundedCodexAppServerTurnInWorkspace(params, appServer, workspace, selectionAttempt + 1, {
281
+ return await runBoundedCodexAppServerTurnInWorkspace(params, appServer, workspace, selectionAttempt + 1, {
201
282
  deadline,
202
283
  timeoutMs: totalTimeoutMs
203
284
  });
204
- throw new Error("Codex bounded turn selection retry exited unexpectedly");
205
285
  }
206
- function resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames) {
286
+ function resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames, enableManagedHooks) {
207
287
  const boundedConfig = mergeCodexThreadConfigs(CODEX_BOUNDED_THREAD_CONFIG, params.threadConfig) ?? CODEX_BOUNDED_THREAD_CONFIG;
208
288
  const privateConfig = workspace.codexHome ? mergeCodexThreadConfigs(boundedConfig, CODEX_PRIVATE_BOUNDED_THREAD_CONFIG) ?? boundedConfig : boundedConfig;
209
289
  if (!params.requireNoExternalCapabilities) return privateConfig;
210
- return mergeCodexThreadConfigs(privateConfig, CODEX_SETTLED_FINALIZER_THREAD_CONFIG, buildCodexRingZeroThreadConfigPatch({ toolsAllow: ["openclaw"] }, true, inheritedMcpServerNames)) ?? privateConfig;
290
+ return mergeCodexThreadConfigs(privateConfig, CODEX_SETTLED_FINALIZER_THREAD_CONFIG, buildCodexRingZeroThreadConfigPatch({ toolsAllow: ["openclaw"] }, true, inheritedMcpServerNames), enableManagedHooks ? { "features.hooks": true } : void 0) ?? privateConfig;
211
291
  }
212
- function buildPrivateCodexAppServerStartOptions(start, codexHome) {
213
- const providerArgs = readCodexAppServerConfigOptions(start.args).flatMap(({ name, value }) => (name === "-c" || name === "--config") && value && /^\s*(?:openai_base_url|model_catalog_json)\s*=/u.test(value) ? ["-c", value] : []);
292
+ function buildPrivateCodexAppServerStartOptions(start, codexHome, cwd, inspectManagedHooks) {
293
+ const launchCwd = start.cwd ?? process.cwd();
294
+ const { launcherArgs, nativeArgs } = resolveCodexPrivateLauncher({
295
+ command: start.command,
296
+ args: start.args,
297
+ cwd: launchCwd
298
+ });
299
+ const providerArgs = readCodexAppServerConfigOptions(nativeArgs).flatMap(({ name, value }) => (name === "-c" || name === "--config") && value && /^\s*(?:openai_base_url|model_catalog_json)\s*=/u.test(value) ? ["-c", resolvePrivateProviderOverride(value, launchCwd)] : []);
214
300
  const privateEnv = Object.fromEntries(Object.entries(start.env ?? {}).filter(([name]) => name.trim().toUpperCase() !== CODEX_APP_SERVER_ARGS_ENV_KEY));
215
301
  const clearEnv = (start.clearEnv ?? []).filter((name) => {
216
302
  const normalized = name.trim().toUpperCase();
@@ -218,10 +304,21 @@ function buildPrivateCodexAppServerStartOptions(start, codexHome) {
218
304
  });
219
305
  return {
220
306
  ...start,
307
+ command: !path.isAbsolute(start.command) && /[\\/]/u.test(start.command) ? path.resolve(launchCwd, start.command) : start.command,
221
308
  homeScope: "agent",
309
+ cwd,
222
310
  args: [
311
+ ...launcherArgs,
223
312
  "app-server",
224
313
  ...providerArgs,
314
+ "-c",
315
+ "project_root_markers=[]",
316
+ ...inspectManagedHooks ? [
317
+ "-c",
318
+ "features.hooks=true",
319
+ "-c",
320
+ "features.plugins=false"
321
+ ] : [],
225
322
  "--listen",
226
323
  "stdio://"
227
324
  ],
@@ -232,6 +329,18 @@ function buildPrivateCodexAppServerStartOptions(start, codexHome) {
232
329
  clearEnv: [...clearEnv, CODEX_APP_SERVER_ARGS_ENV_KEY]
233
330
  };
234
331
  }
332
+ function resolvePrivateProviderOverride(override, launchCwd) {
333
+ const separator = override.indexOf("=");
334
+ if (override.slice(0, separator).trim() !== "model_catalog_json") return override;
335
+ const rawPath = override.slice(separator + 1).trim();
336
+ let catalogPath;
337
+ try {
338
+ catalogPath = parse(`path = ${rawPath}`).path;
339
+ } catch {
340
+ catalogPath = rawPath;
341
+ }
342
+ return typeof catalogPath === "string" && catalogPath && !path.isAbsolute(catalogPath) ? `model_catalog_json=${JSON.stringify(path.resolve(launchCwd, catalogPath))}` : override;
343
+ }
235
344
  function createCodexBoundedApprovalHandler(taskLabel) {
236
345
  return (request) => {
237
346
  if (request.method === "item/commandExecution/requestApproval" || request.method === "item/fileChange/requestApproval") return {
@@ -264,20 +373,14 @@ async function resolveCodexBoundedTurnModel(params) {
264
373
  const supported = listed.filter((entry) => params.requiredModalities.every((modality) => entry.inputModalities.includes(modality)));
265
374
  const selected = supported.find((entry) => entry.isDefault) ?? supported[0];
266
375
  if (!selected) throw new Error(`Codex app-server has no model supporting ${params.requiredModalities.join(" and ")} input.`);
267
- return {
268
- catalogId: selected.id,
269
- runtimeModelId: selected.model
270
- };
376
+ return selected;
271
377
  }
272
378
  const model = params.selection.id;
273
379
  const match = listed.find((entry) => entry.model === model || entry.id === model);
274
380
  if (!match) throw new Error(`Codex app-server model not found: ${model}`);
275
381
  if (params.requiredModalities.includes("image") && !match.inputModalities.includes("image")) throw new Error(`Codex app-server model does not support images: ${model}`);
276
382
  if (params.requiredModalities.includes("text") && !match.inputModalities.includes("text")) throw new Error(`Codex app-server model does not support text: ${model}`);
277
- return {
278
- catalogId: match.id,
279
- runtimeModelId: match.model
280
- };
383
+ return match;
281
384
  }
282
385
  function resolveCodexBoundedTurnAbortError(signal, taskLabel, timeoutError) {
283
386
  return signal.reason === timeoutError ? timeoutError : /* @__PURE__ */ new Error(`codex app-server ${taskLabel} turn aborted`);
@@ -0,0 +1,14 @@
1
+ import { d as readCodexPluginConfig } from "./config-parsing-b088LyhT.mjs";
2
+ import { n as isCodexAppServerProxyLaunch } from "./launch-args-DbFCehO7.mjs";
3
+ import { i as resolveCodexAppServerHomeScope } from "./config-options-CzyWLTJt.mjs";
4
+ import "./config-DKhXquav.mjs";
5
+ import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
6
+ //#region extensions/codex/src/app-server/bounded-turn-isolation.ts
7
+ function resolveCodexBoundedTurnIsolation(options) {
8
+ const pluginConfig = readCodexPluginConfig(options.pluginConfig);
9
+ const homeScope = resolveCodexAppServerHomeScope({ appServer: pluginConfig.appServer });
10
+ const { start } = resolveCodexAppServerRuntimeOptions({ pluginConfig: options.pluginConfig });
11
+ return start.transport === "stdio" && (homeScope === "agent" || options.requireIsolatedAuth === true) && !isCodexAppServerProxyLaunch(start.args) ? "private-stdio" : "configured-transport";
12
+ }
13
+ //#endregion
14
+ export { resolveCodexBoundedTurnIsolation as t };
@@ -1,5 +1,5 @@
1
1
  //#region extensions/codex/package.json
2
- var version = "2026.9.5";
2
+ var version = "2026.9.7";
3
3
  //#endregion
4
4
  //#region extensions/codex/src/build-state.ts
5
5
  /**
@@ -1,9 +1,5 @@
1
- import { i as CodexAppServerRpcError } from "./timeout-DZF05XrR.mjs";
1
+ import { n as CodexAppServerRpcError } from "./rpc-error-BlD2vuzn.mjs";
2
2
  //#region extensions/codex/src/app-server/capabilities.ts
3
- /**
4
- * Capability helpers for optional Codex app-server control-plane methods.
5
- */
6
- /** Known app-server methods used by OpenClaw control surfaces. */
7
3
  const CODEX_CONTROL_METHODS = {
8
4
  account: "account/read",
9
5
  installedApps: "app/installed",
@@ -31,13 +27,9 @@ const CODEX_CONTROL_METHODS = {
31
27
  setThreadGoal: "thread/goal/set",
32
28
  clearThreadGoal: "thread/goal/clear"
33
29
  };
34
- /** Formats unsupported control calls differently from ordinary RPC failures. */
35
30
  function describeControlFailure(error) {
36
- if (isUnsupportedControlError(error)) return "unsupported by this Codex app-server";
31
+ if (error instanceof CodexAppServerRpcError && error.code === -32601) return "unsupported by this Codex app-server";
37
32
  return error instanceof Error ? error.message : String(error);
38
33
  }
39
- function isUnsupportedControlError(error) {
40
- return error instanceof CodexAppServerRpcError && error.code === -32601;
41
- }
42
34
  //#endregion
43
35
  export { describeControlFailure as n, CODEX_CONTROL_METHODS as t };