@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,5 +1,6 @@
1
- import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
- import { i as CodexAppServerRpcError, n as withTimeout, t as withAbortableTimeout } from "./timeout-DZF05XrR.mjs";
1
+ import { n as CodexAppServerRpcError } from "./rpc-error-BlD2vuzn.mjs";
2
+ import { i as withTimeout, r as withAbortableTimeout } from "./timeout-CXOfNoaX.mjs";
3
+ import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
3
4
  //#region extensions/codex/src/app-server/request.ts
4
5
  var request_exports = /* @__PURE__ */ __exportAll({
5
6
  CodexAppServerScopedRequestRejectedError: () => CodexAppServerScopedRequestRejectedError,
@@ -28,7 +29,7 @@ async function requestCodexAppServerClientJson(params) {
28
29
  let phase = "prepare";
29
30
  observeControlPhase(params.controlObservation, phase);
30
31
  try {
31
- const { resolveCodexAppServerDirectSandboxBypassBlock } = await import("./sandbox-guard-BBP-RbTf.mjs").then((n) => n.r);
32
+ const { resolveCodexAppServerDirectSandboxBypassBlock } = await import("./sandbox-guard-DjCz2eOw.mjs").then((n) => n.r);
32
33
  const sandboxBlock = resolveCodexAppServerDirectSandboxBypassBlock({
33
34
  method: params.method,
34
35
  requestParams: params.requestParams,
@@ -57,7 +58,7 @@ async function requestCodexAppServerClientJson(params) {
57
58
  }
58
59
  async function requestCodexAppServerJson(params) {
59
60
  observeControlPhase(params.controlObservation, "prepare");
60
- const { resolveCodexAppServerDirectSandboxBypassBlock } = await import("./sandbox-guard-BBP-RbTf.mjs").then((n) => n.r);
61
+ const { resolveCodexAppServerDirectSandboxBypassBlock } = await import("./sandbox-guard-DjCz2eOw.mjs").then((n) => n.r);
61
62
  const sandboxBlock = resolveCodexAppServerDirectSandboxBypassBlock({
62
63
  method: params.method,
63
64
  requestParams: params.requestParams,
@@ -81,6 +82,15 @@ var CodexAppServerScopedRequestRejectedError = class extends Error {
81
82
  this.name = "CodexAppServerScopedRequestRejectedError";
82
83
  }
83
84
  };
85
+ function createScopeCleanupError(message) {
86
+ const stackTraceLimit = Error.stackTraceLimit;
87
+ try {
88
+ Error.stackTraceLimit = 0;
89
+ return new CodexAppServerScopedRequestRejectedError(message);
90
+ } finally {
91
+ Error.stackTraceLimit = stackTraceLimit;
92
+ }
93
+ }
84
94
  function assertRequestOwnerCurrent(assertCurrent) {
85
95
  try {
86
96
  assertCurrent?.();
@@ -99,6 +109,7 @@ async function readCodexAppServerUsage(options) {
99
109
  const deadline = performance.now() + options.timeoutMs;
100
110
  return await withCodexAppServerJsonClient({
101
111
  timeoutMs: options.timeoutMs,
112
+ signal: options.signal,
102
113
  timeoutMessage: "codex app-server usage read timed out",
103
114
  agentDir: options.agentDir,
104
115
  ...options.authProfileId ? { authProfileId: options.authProfileId } : {},
@@ -118,20 +129,13 @@ async function readCodexAppServerUsage(options) {
118
129
  };
119
130
  });
120
131
  }
121
- function extractCodexAccountEmail(value) {
122
- if (!value || typeof value !== "object") return;
123
- const record = value;
124
- const account = record.account && typeof record.account === "object" ? record.account : record;
125
- const email = account.email ?? account.accountEmail;
126
- return typeof email === "string" && email.trim() ? email.trim() : void 0;
127
- }
128
132
  async function readCodexAccountEmailBestEffort(request, deadline) {
129
133
  const boundMs = Math.min(CODEX_ACCOUNT_READ_MAX_TIMEOUT_MS, deadline - performance.now() - CODEX_USAGE_DEADLINE_RESERVE_MS);
130
134
  if (boundMs <= 0) return;
131
135
  const read = request({
132
136
  method: "account/read",
133
137
  requestParams: {}
134
- }).then((account) => extractCodexAccountEmail(account), () => void 0);
138
+ }).then(({ account }) => account?.type === "chatgpt" ? account.email?.trim() || void 0 : void 0, () => void 0);
135
139
  let timer;
136
140
  const timeout = new Promise((resolve) => {
137
141
  timer = setTimeout(() => resolve(void 0), boundMs);
@@ -155,6 +159,9 @@ async function withCodexAppServerJsonClient(params, run) {
155
159
  let errorPhase;
156
160
  observeControlPhase(params.controlObservation, activePhase);
157
161
  const timeoutController = new AbortController();
162
+ const abort = () => timeoutController.abort(params.signal?.reason);
163
+ params.signal?.addEventListener("abort", abort, { once: true });
164
+ if (params.signal?.aborted) abort();
158
165
  const deadline = Number.isFinite(timeoutMs) && timeoutMs > 0 ? performance.now() + timeoutMs : void 0;
159
166
  const isPastDeadline = () => deadline !== void 0 && performance.now() >= deadline;
160
167
  const throwIfAbandoned = () => {
@@ -166,13 +173,14 @@ async function withCodexAppServerJsonClient(params, run) {
166
173
  return deadline === void 0 ? timeoutMs : Math.max(1, deadline - performance.now());
167
174
  };
168
175
  try {
176
+ throwIfAbandoned();
169
177
  return await withAbortableTimeout({
170
178
  signal: timeoutController.signal,
171
179
  timeoutMs,
172
180
  timeoutMessage,
173
181
  promise: (async () => {
174
- const { resolveCodexAppServerDirectSandboxBypassBlock } = await import("./sandbox-guard-BBP-RbTf.mjs").then((n) => n.r);
175
- const { createIsolatedCodexAppServerClient, getLeasedSharedCodexAppServerClient, isCodexAppServerStartSelectionChangedError, releaseLeasedSharedCodexAppServerClient, retireSharedCodexAppServerClientIfCurrent } = await import("./shared-client-BpTtuLQ5.mjs").then((n) => n.y);
182
+ const { resolveCodexAppServerDirectSandboxBypassBlock } = await import("./sandbox-guard-DjCz2eOw.mjs").then((n) => n.r);
183
+ const { createIsolatedCodexAppServerClient, getLeasedSharedCodexAppServerClient, isCodexAppServerStartSelectionChangedError, releaseLeasedSharedCodexAppServerClient, retireSharedCodexAppServerClientIfCurrent } = await import("./shared-client-DqyTMYug.mjs").then((n) => n.v);
176
184
  for (let attempt = 0; attempt < 2; attempt += 1) {
177
185
  errorPhase = void 0;
178
186
  activePhase = "prepare";
@@ -225,7 +233,7 @@ async function withCodexAppServerJsonClient(params, run) {
225
233
  timeoutMs: remainingTimeoutMs(),
226
234
  signal: timeoutController.signal,
227
235
  ...attemptWaiterFinished ? { attemptWaiterFinished } : {},
228
- ...params.catalogPreview && method === "thread/list" ? {
236
+ ...params.catalogPreview ? {
229
237
  catalogPreview: true,
230
238
  catalogPreviewCache: params.catalogPreviewCache,
231
239
  catalogRows: params.catalogRows
@@ -285,7 +293,8 @@ async function withCodexAppServerJsonClient(params, run) {
285
293
  if (deadlineObserved) throw new Error(timeoutMessage, { cause: error });
286
294
  throw error;
287
295
  } finally {
288
- timeoutController.abort(new CodexAppServerScopedRequestRejectedError(timeoutMessage));
296
+ params.signal?.removeEventListener("abort", abort);
297
+ timeoutController.abort(createScopeCleanupError(timeoutMessage));
289
298
  }
290
299
  }
291
300
  //#endregion
@@ -0,0 +1,93 @@
1
+ import { createHash } from "node:crypto";
2
+ import { findPersistedAuthProfileCredential, isPendingOAuthRefreshFence, isSameOAuthRefreshGeneration, resolveApiKeyForProfile } from "openclaw/plugin-sdk/agent-runtime";
3
+ import { decodeOpenAICodexJwtPayload } from "openclaw/plugin-sdk/provider-auth";
4
+ //#region extensions/codex/src/app-server/responses-oauth.ts
5
+ const CODEX_RESPONSES_OAUTH_PROVIDER = "openclaw_token_sharing";
6
+ function isCodexResponsesOAuthRun(params) {
7
+ return params.runtimePlan?.auth.selectedAuthMode === "oauth" && params.runtimePlan.auth.selectedAuthFlow === "chatgpt-token-sharing";
8
+ }
9
+ function isCodexResponsesOAuthCredential(credential) {
10
+ return credential?.type === "oauth" && credential.provider === "openai" && credential.authFlow === "chatgpt-token-sharing";
11
+ }
12
+ function isCodexResponsesOAuth(prepared) {
13
+ return prepared?.kind === "profile" && prepared.snapshot?.inferenceAuth === "host-oauth";
14
+ }
15
+ /** The OAuth owner verified this ID token. Decoding here compares identity, never proves it. */
16
+ function fingerprintCodexResponsesOAuth(credential) {
17
+ if (!isCodexResponsesOAuthCredential(credential) || credential?.type !== "oauth") throw new Error("ChatGPT subscription sharing is unavailable; sign in with OpenClaw again.");
18
+ const subject = credential.idToken && decodeOpenAICodexJwtPayload(credential.idToken)?.sub;
19
+ if (!credential.issuer || !credential.clientId || typeof subject !== "string" || !subject) throw new Error("ChatGPT subscription sharing identity is missing; sign in again.");
20
+ return createHash("sha256").update(JSON.stringify([
21
+ credential.issuer,
22
+ credential.clientId,
23
+ subject,
24
+ credential.authFlow
25
+ ])).digest("hex");
26
+ }
27
+ async function resolveCodexResponsesOAuthProfileFingerprint(params) {
28
+ const credential = params.store.profiles[params.profileId];
29
+ if (credential?.type === "oauth" && isPendingOAuthRefreshFence(credential)) {
30
+ const resolved = await resolveApiKeyForProfile({
31
+ cfg: params.config,
32
+ store: params.store,
33
+ profileId: params.profileId,
34
+ agentDir: params.agentDir,
35
+ allowProfileFallback: false
36
+ });
37
+ if (!resolved?.credential || resolved.profileId !== params.profileId) throw new Error("ChatGPT subscription sharing could not settle its refresh; sign in again.");
38
+ const fingerprint = fingerprintCodexResponsesOAuth(resolved.credential);
39
+ params.store.profiles[params.profileId] = resolved.credential;
40
+ return fingerprint;
41
+ }
42
+ if (!credential) throw new Error("ChatGPT subscription sharing profile is unavailable; sign in again.");
43
+ return fingerprintCodexResponsesOAuth(credential);
44
+ }
45
+ /** Keep OAuth refresh and persisted grant ownership in OpenClaw, outside native Codex auth. */
46
+ function createCodexResponsesOAuth(params) {
47
+ const persisted = Boolean(findPersistedAuthProfileCredential(params)) || params.store.runtimePersistedProfileIds?.includes(params.profileId) === true;
48
+ const readCredential = () => persisted ? findPersistedAuthProfileCredential(params) : params.store.profiles[params.profileId];
49
+ const validate = (credential) => {
50
+ if (fingerprintCodexResponsesOAuth(credential) !== params.fingerprint) throw new Error("ChatGPT subscription sharing identity changed; reconnect before retrying.");
51
+ };
52
+ let lastCredential = params.store.profiles[params.profileId];
53
+ validate(lastCredential);
54
+ const validateCurrent = (credential, reference) => {
55
+ if (credential?.type === "oauth" && reference?.type === "oauth" && isPendingOAuthRefreshFence(credential) && credential.authFlow === reference.authFlow && credential.issuer === reference.issuer && credential.clientId === reference.clientId && isSameOAuthRefreshGeneration({
56
+ profileId: params.profileId,
57
+ left: credential,
58
+ right: reference
59
+ })) return;
60
+ validate(credential);
61
+ };
62
+ return { async resolve(forceRefresh) {
63
+ const credential = readCredential();
64
+ validateCurrent(credential, lastCredential);
65
+ const resolved = await resolveApiKeyForProfile({
66
+ cfg: params.config,
67
+ agentDir: params.agentDir,
68
+ profileId: params.profileId,
69
+ store: persisted ? {
70
+ ...params.store,
71
+ profiles: {
72
+ ...params.store.profiles,
73
+ [params.profileId]: credential
74
+ }
75
+ } : params.store,
76
+ forceRefresh,
77
+ allowProfileFallback: false,
78
+ validateOAuthCredential: validate
79
+ });
80
+ if (!resolved?.apiKey || resolved.profileId !== params.profileId) throw new Error("ChatGPT subscription sharing could not refresh; sign in again.");
81
+ const resolvedCredential = resolved.credential;
82
+ validate(resolvedCredential);
83
+ lastCredential = resolvedCredential;
84
+ const assertCurrent = () => validateCurrent(readCredential(), resolvedCredential);
85
+ assertCurrent();
86
+ return {
87
+ token: resolved.apiKey,
88
+ assertCurrent
89
+ };
90
+ } };
91
+ }
92
+ //#endregion
93
+ export { isCodexResponsesOAuthRun as a, isCodexResponsesOAuthCredential as i, createCodexResponsesOAuth as n, resolveCodexResponsesOAuthProfileFingerprint as o, isCodexResponsesOAuth as r, CODEX_RESPONSES_OAUTH_PROVIDER as t };
@@ -0,0 +1,31 @@
1
+ import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
+ //#region extensions/codex/src/app-server/rpc-error.ts
3
+ const CODEX_APP_SERVER_OVERLOADED_ERROR_CODE = -32001;
4
+ /** RPC error wrapper that preserves app-server error code and data. */
5
+ var CodexAppServerRpcError = class extends Error {
6
+ constructor(error, method) {
7
+ super(formatCodexAppServerRpcErrorMessage(error, method));
8
+ this.name = "CodexAppServerRpcError";
9
+ this.code = error.code;
10
+ this.data = error.data;
11
+ this.method = method;
12
+ }
13
+ };
14
+ function isCodexThreadReadMissingError(error, threadId) {
15
+ return error instanceof CodexAppServerRpcError && error.method === "thread/read" && error.code === -32600 && error.message === `thread not loaded: ${threadId}`;
16
+ }
17
+ function formatCodexAppServerRpcErrorMessage(error, method) {
18
+ const message = error.message || `${method} failed`;
19
+ const detail = readCodexAppServerRpcReloginDetail(error.data);
20
+ return detail && !message.includes(detail) ? `${message}: ${detail}` : message;
21
+ }
22
+ function readCodexAppServerRpcReloginDetail(data) {
23
+ const record = isJsonObject(data) ? data : void 0;
24
+ const nested = isJsonObject(record?.error) ? record.error : record;
25
+ if (!nested) return;
26
+ const isRelogin = nested.action === "relogin" || nested.reason === "cloudRequirements" && nested.errorCode === "Auth";
27
+ const detail = typeof nested.detail === "string" ? nested.detail.trim() : "";
28
+ return isRelogin && detail ? detail : void 0;
29
+ }
30
+ //#endregion
31
+ export { CodexAppServerRpcError as n, isCodexThreadReadMissingError as r, CODEX_APP_SERVER_OVERLOADED_ERROR_CODE as t };