@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,6 +1,7 @@
1
- import { p as sessionBindingIdentity } from "./session-binding-record-TH3xA0zj.mjs";
2
- import { _ as retainSharedCodexAppServerClientByInstanceId } from "./shared-client-BpTtuLQ5.mjs";
3
- import "./session-binding-_0W_fHRr.mjs";
1
+ import { v as sessionBindingIdentity } from "./session-binding-record-Oe9L-CNY.mjs";
2
+ import { l as retainSharedCodexAppServerClientByInstanceId } from "./shared-client-lifecycle-DJIgqgMw.mjs";
3
+ import "./shared-client-DqyTMYug.mjs";
4
+ import "./session-binding-DGCYAfvD.mjs";
4
5
  import { asOptionalRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
5
6
  import { assignMcpCatalogSafeServerNames } from "openclaw/plugin-sdk/agent-harness-runtime";
6
7
  //#region extensions/codex/src/app-server/effective-mcp-catalog.ts
@@ -21,7 +22,6 @@ function catalogTool(params) {
21
22
  ...params.deniedBySession ? { deniedBySession: true } : {}
22
23
  };
23
24
  }
24
- /** Converts Codex's thread-scoped status response into OpenClaw's MCP catalog shape. */
25
25
  function buildCodexEffectiveMcpCatalog(statuses, toolOverrides) {
26
26
  const orderedStatuses = [...new Map(statuses.map((status) => [status.name, status])).values()].toSorted((left, right) => left.name.localeCompare(right.name));
27
27
  const safeNames = assignMcpCatalogSafeServerNames(orderedStatuses.map((status) => status.name));
@@ -89,11 +89,6 @@ async function listCodexMcpServerStatuses(client, threadId) {
89
89
  }
90
90
  throw new Error("Codex mcpServerStatus/list exceeded the bounded page limit");
91
91
  }
92
- /** Loads the requested MCP inventory from the exact client/thread already selected for a run. */
93
- async function loadCodexEffectiveMcpCatalogFromThread(params) {
94
- const allowedServerNames = new Set(params.mcpServerNames);
95
- return buildCodexEffectiveMcpCatalog((await listCodexMcpServerStatuses(params.client, params.threadId)).filter((status) => allowedServerNames.has(status.name)), params.toolOverrides);
96
- }
97
92
  /** Loads MCP inventory from the bound Codex client while retaining its lease through all pages. */
98
93
  async function loadCodexEffectiveMcpCatalog(params, options) {
99
94
  const binding = options.bindingStore.read(sessionBindingIdentity({
@@ -103,17 +98,13 @@ async function loadCodexEffectiveMcpCatalog(params, options) {
103
98
  config: params.config
104
99
  }));
105
100
  if (!binding?.clientId) return;
106
- const retained = retainSharedCodexAppServerClientByInstanceId(binding.clientId);
101
+ const retained = await retainSharedCodexAppServerClientByInstanceId(binding.clientId);
107
102
  if (!retained) return;
108
103
  try {
109
- return await loadCodexEffectiveMcpCatalogFromThread({
110
- client: retained.client,
111
- threadId: binding.threadId,
112
- mcpServerNames: params.mcpServerNames,
113
- toolOverrides: params.toolOverrides
114
- });
104
+ const allowedServerNames = new Set(params.mcpServerNames);
105
+ return buildCodexEffectiveMcpCatalog((await listCodexMcpServerStatuses(retained.client, binding.threadId)).filter((status) => allowedServerNames.has(status.name)), params.toolOverrides);
115
106
  } finally {
116
- retained.release();
107
+ await retained.release();
117
108
  }
118
109
  }
119
110
  //#endregion
@@ -1,7 +1,7 @@
1
- import { m as isJsonObject } from "./config-security-BRQ2mgW9.mjs";
2
- import { T as readCodexTurnCompletedNotification } from "./client-vXs2929Q.mjs";
3
- import { m as getCodexAppServerTurnRouter } from "./attempt-client-cleanup-BpYKdTA0.mjs";
4
- import { c as readCodexNotificationItem, s as isTerminalTurnStatus, t as CodexUsageProjection } from "./event-projector-usage-C7Ntzs-f.mjs";
1
+ import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
+ import { E as readCodexTurnCompletedNotification } from "./client-N0JpgSzF.mjs";
3
+ import { h as getCodexAppServerTurnRouter } from "./attempt-client-cleanup-DOP-cW5j.mjs";
4
+ import { o as isTerminalTurnStatus, s as readCodexNotificationItem, t as CodexUsageProjection } from "./event-projector-usage-03R0I2dM.mjs";
5
5
  import { readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { toStringifiedError } from "openclaw/plugin-sdk/error-runtime";
7
7
  import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
@@ -36,8 +36,11 @@ var CodexEphemeralTurn = class {
36
36
  if (firstDelta) await options.onAssistantMessageStart?.();
37
37
  } else if (notification.method === "rawResponse/completed") this.usage.record(params);
38
38
  else if (notification.method === "turn/completed") {
39
- this.turn = readCodexTurnCompletedNotification(params)?.turn ?? this.turn;
40
- this.completion.resolve();
39
+ const completed = readCodexTurnCompletedNotification(params);
40
+ if (completed) {
41
+ this.turn = completed.turn;
42
+ this.completion.resolve();
43
+ }
41
44
  } else if (notification.method === "error") {
42
45
  this.usage.invalidateContext();
43
46
  if (params.willRetry !== true) {
@@ -0,0 +1,69 @@
1
+ import { t as codexProviderRefusalDiagnostics } from "./event-projector-values-DJSz8BTk.mjs";
2
+ import { o as resolveCodexLocalRuntimeAttribution } from "./native-subagent-monitor-Dpsmf2wz.mjs";
3
+ import { createAgentHarnessAssistantMessage } from "openclaw/plugin-sdk/agent-harness-attempt-runtime";
4
+ //#region extensions/codex/src/app-server/event-projector-assistant-message.ts
5
+ function createAssistantMessage(params, text, options) {
6
+ return createAttributedCodexAssistantMessage({
7
+ ...resolveCodexLocalRuntimeAttribution(params),
8
+ modelId: params.modelId
9
+ }, text, options);
10
+ }
11
+ /** Creates a Codex assistant row when a bounded call already owns attribution. */
12
+ function createAttributedCodexAssistantMessage(attribution, text, options) {
13
+ const refusal = options.providerRefusal;
14
+ return createAgentHarnessAssistantMessage({
15
+ ...attribution,
16
+ api: attribution.api ?? "openai-chatgpt-responses"
17
+ }, text, {
18
+ tokenUsage: options.tokenUsage,
19
+ aborted: options.aborted,
20
+ promptError: options.promptError,
21
+ errorMessage: refusal?.message,
22
+ ...refusal ? codexProviderRefusalDiagnostics(refusal, Date.now()) : {}
23
+ });
24
+ }
25
+ function createAssistantCommentaryMessage(params, text, itemId, timestamp) {
26
+ return {
27
+ ...createNonterminalAssistantMessage(params, [{
28
+ type: "text",
29
+ text
30
+ }], timestamp),
31
+ openclawStreamFallback: {
32
+ replacementText: text,
33
+ source: "segment",
34
+ itemId
35
+ }
36
+ };
37
+ }
38
+ function createAssistantAsyncMessage(params, text, itemId, timestamp, questions) {
39
+ return {
40
+ ...createNonterminalAssistantMessage(params, [{
41
+ type: "text",
42
+ text
43
+ }], timestamp),
44
+ openclawAsyncDelivery: {
45
+ itemId,
46
+ ...questions ? { questions } : {}
47
+ }
48
+ };
49
+ }
50
+ function createAssistantReasoningMessage(params, text) {
51
+ return createNonterminalAssistantMessage(params, [{
52
+ type: "thinking",
53
+ thinking: text
54
+ }]);
55
+ }
56
+ function createNonterminalAssistantMessage(params, content, timestamp) {
57
+ const attribution = resolveCodexLocalRuntimeAttribution(params);
58
+ return createAgentHarnessAssistantMessage({
59
+ ...attribution,
60
+ api: attribution.api ?? "openai-chatgpt-responses",
61
+ modelId: params.modelId
62
+ }, "", {
63
+ content,
64
+ aborted: false,
65
+ timestamp
66
+ });
67
+ }
68
+ //#endregion
69
+ export { createAttributedCodexAssistantMessage as a, createAssistantReasoningMessage as i, createAssistantCommentaryMessage as n, createAssistantMessage as r, createAssistantAsyncMessage as t };
@@ -1,4 +1,4 @@
1
- import { m as isJsonObject } from "./config-security-BRQ2mgW9.mjs";
1
+ import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
2
  import { asSafeIntegerInRange, readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
3
3
  import { normalizeUsage } from "openclaw/plugin-sdk/agent-harness-runtime";
4
4
  //#region extensions/codex/src/app-server/attempt-notifications.ts
@@ -15,13 +15,11 @@ function updateActiveTurnItemIds(notification, activeItemIds) {
15
15
  }
16
16
  activeItemIds.delete(itemId);
17
17
  }
18
- /** Reads an item id from supported notification envelope shapes. */
19
18
  function readNotificationItemId(notification) {
20
19
  if (!isJsonObject(notification.params)) return;
21
20
  const item = isJsonObject(notification.params.item) ? notification.params.item : void 0;
22
21
  return (item ? readStringField(item, "id") : void 0) ?? readStringField(notification.params, "itemId") ?? readStringField(notification.params, "id");
23
22
  }
24
- /** Detects completion for an OpenClaw dynamic tool result still awaited by Codex. */
25
23
  function isPendingOpenClawDynamicToolCompletionNotification(notification, pendingOpenClawDynamicToolCompletionIds) {
26
24
  if (notification.method !== "item/completed" || !isJsonObject(notification.params)) return false;
27
25
  const itemId = readNotificationItemId(notification);
@@ -35,7 +33,6 @@ function isRawFunctionToolOutputCompletionNotification(notification) {
35
33
  const item = isJsonObject(notification.params.item) ? notification.params.item : void 0;
36
34
  return item ? readStringField(item, "type") === "function_call_output" : false;
37
35
  }
38
- /** Returns true for terminal app-server thread status strings. */
39
36
  function isTerminalTurnStatus(status) {
40
37
  return status === "completed" || status === "interrupted" || status === "failed";
41
38
  }
@@ -46,13 +43,9 @@ function isCodexTurnAbortMarkerNotification(notification, options = {}) {
46
43
  const role = isJsonObject(item) ? readStringField(item, "role") : void 0;
47
44
  if (!isJsonObject(item) || readStringField(item, "type") !== "message" || role !== "user" && role !== "developer") return false;
48
45
  const text = extractRawResponseItemText(item).trim();
49
- const currentPromptTexts = [options.currentPromptText, ...options.currentPromptTexts ?? []].filter(isNonEmptyString).map((prompt) => prompt.trim());
46
+ const currentPromptTexts = [options.currentPromptText, ...options.currentPromptTexts ?? []].filter((prompt) => typeof prompt === "string" && prompt.length > 0).map((prompt) => prompt.trim());
50
47
  if (role === "user" && currentPromptTexts.includes(text)) return false;
51
- return readCodexTurnAbortMarkerBody(text) !== void 0;
52
- }
53
- function readCodexTurnAbortMarkerBody(text) {
54
- if (!text.startsWith(CODEX_TURN_ABORT_MARKER_START) || !text.endsWith(CODEX_TURN_ABORT_MARKER_END)) return;
55
- return text.slice(14, -15).trim();
48
+ return text.startsWith(CODEX_TURN_ABORT_MARKER_START) && text.endsWith(CODEX_TURN_ABORT_MARKER_END);
56
49
  }
57
50
  function extractRawResponseItemText(item) {
58
51
  const content = item.content;
@@ -65,7 +58,6 @@ function extractRawResponseItemText(item) {
65
58
  return text ? [text] : [];
66
59
  }).join("");
67
60
  }
68
- /** Reads a typed Codex item from notification params when id/type are present. */
69
61
  function readCodexNotificationItem(params) {
70
62
  if (!isJsonObject(params) || !isJsonObject(params.item)) return;
71
63
  const item = params.item;
@@ -86,20 +78,6 @@ function readRawResponseToolCallId(notification) {
86
78
  default: return;
87
79
  }
88
80
  }
89
- /** Maps Codex item types to the tool name shown in execution progress. */
90
- function codexExecutionToolName(item) {
91
- if (item.type === "dynamicToolCall" && typeof item.tool === "string") return item.tool;
92
- if (item.type === "mcpToolCall" && typeof item.tool === "string") {
93
- const server = typeof item.server === "string" && item.server ? item.server : void 0;
94
- return server ? `${server}.${item.tool}` : item.tool;
95
- }
96
- if (item.type === "commandExecution") return "bash";
97
- if (item.type === "fileChange") return "apply_patch";
98
- if (item.type === "webSearch") return "web_search";
99
- }
100
- function isNonEmptyString(value) {
101
- return typeof value === "string" && value.length > 0;
102
- }
103
81
  //#endregion
104
82
  //#region extensions/codex/src/app-server/event-projector-usage.ts
105
83
  function readTokenCount(record, key) {
@@ -199,4 +177,4 @@ var CodexUsageProjection = class {
199
177
  }
200
178
  };
201
179
  //#endregion
202
- export { isPendingOpenClawDynamicToolCompletionNotification as a, readCodexNotificationItem as c, updateActiveTurnItemIds as d, isCodexTurnAbortMarkerNotification as i, readNotificationItemId as l, readCodexThreadContextSnapshot as n, isRawFunctionToolOutputCompletionNotification as o, codexExecutionToolName as r, isTerminalTurnStatus as s, CodexUsageProjection as t, readRawResponseToolCallId as u };
180
+ export { isRawFunctionToolOutputCompletionNotification as a, readNotificationItemId as c, isPendingOpenClawDynamicToolCompletionNotification as i, readRawResponseToolCallId as l, readCodexThreadContextSnapshot as n, isTerminalTurnStatus as o, isCodexTurnAbortMarkerNotification as r, readCodexNotificationItem as s, CodexUsageProjection as t, updateActiveTurnItemIds as u };
@@ -0,0 +1,106 @@
1
+ import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
2
+ import { asFiniteNumber, normalizeOptionalString as normalizeOptionalString$1, readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
3
+ import { Buffer } from "node:buffer";
4
+ //#region extensions/codex/src/app-server/event-projector-values.ts
5
+ const BIO_POLICY_SAFETY_ACCESS_BLOCK_PREFIX = "This content was flagged for possible biological risk.";
6
+ /** Decode app-server v2 findings with the Codex UI's UTF-8 limits; never truncate a steer. */
7
+ function readCodexMisalignmentReview(value) {
8
+ if (!isJsonObject(value)) return;
9
+ const explanation = value.detailedExplanation;
10
+ if (typeof explanation !== "string" || !explanation.trim() || Buffer.byteLength(explanation, "utf8") > 65536) return;
11
+ const message = isJsonObject(value.steer) ? value.steer.message : void 0;
12
+ return {
13
+ explanation,
14
+ ...typeof message === "string" && message.trim() && Buffer.byteLength(message, "utf8") <= 1024 ? { continuation: { message } } : {},
15
+ ...typeof value.errorType === "string" && value.errorType.trim() ? { errorType: value.errorType } : {}
16
+ };
17
+ }
18
+ /** Project only Codex's explicit refusal contracts; other policy errors retain their own paths. */
19
+ function readCodexProviderRefusal(message, codexErrorInfo, options) {
20
+ if (!message) return;
21
+ if (codexErrorInfo === "cyberPolicy") return {
22
+ category: "cyber",
23
+ message
24
+ };
25
+ if (codexErrorInfo === "misalignmentPolicyViolation") {
26
+ const review = readCodexMisalignmentReview(options?.misalignment);
27
+ return {
28
+ category: "misalignment",
29
+ message,
30
+ ...review ? { review } : {},
31
+ ...options?.nativeThreadId ? { nativeThreadId: options.nativeThreadId } : {},
32
+ ...options?.nativeTurnId ? { nativeTurnId: options.nativeTurnId } : {}
33
+ };
34
+ }
35
+ return message.startsWith(BIO_POLICY_SAFETY_ACCESS_BLOCK_PREFIX) ? {
36
+ category: "bio",
37
+ message
38
+ } : void 0;
39
+ }
40
+ function codexProviderRefusalDetails(refusal) {
41
+ return {
42
+ provider: "openai",
43
+ category: refusal.category,
44
+ ...refusal.review ? { review: refusal.review } : {},
45
+ ...refusal.nativeThreadId ? { nativeThreadId: refusal.nativeThreadId } : {},
46
+ ...refusal.nativeTurnId ? { nativeTurnId: refusal.nativeTurnId } : {}
47
+ };
48
+ }
49
+ function codexProviderRefusalDiagnostics(refusal, timestamp) {
50
+ return refusal ? { diagnostics: [{
51
+ type: "provider_refusal",
52
+ timestamp,
53
+ details: codexProviderRefusalDetails(refusal)
54
+ }] } : {};
55
+ }
56
+ function readNonEmptyString(record, key) {
57
+ return normalizeOptionalString$1(record[key]);
58
+ }
59
+ function readNullableString(record, key) {
60
+ const value = record[key];
61
+ if (value === null) return null;
62
+ return typeof value === "string" ? value : void 0;
63
+ }
64
+ function readNonNegativeInteger(record, key) {
65
+ const value = asFiniteNumber(record[key]);
66
+ return value !== void 0 && Number.isInteger(value) && value >= 0 ? value : void 0;
67
+ }
68
+ function readCodexErrorNotificationMessage(record) {
69
+ const error = record.error;
70
+ return isJsonObject(error) ? readStringField(error, "message") : void 0;
71
+ }
72
+ function readHookOutputEntries(value) {
73
+ if (!Array.isArray(value)) return [];
74
+ return value.flatMap((entry) => {
75
+ if (!isJsonObject(entry)) return [];
76
+ const text = readStringField(entry, "text");
77
+ if (!text) return [];
78
+ const kind = readStringField(entry, "kind");
79
+ return [{
80
+ ...kind ? { kind } : {},
81
+ text
82
+ }];
83
+ });
84
+ }
85
+ function splitPlanText(text) {
86
+ return text.split(/\r?\n/).map((line) => line.trim().replace(/^[-*]\s+/, "")).filter((line) => line.length > 0);
87
+ }
88
+ function extractRawAssistantText(item) {
89
+ const parts = (Array.isArray(item.content) ? item.content : []).flatMap((entry) => {
90
+ if (!isJsonObject(entry)) return [];
91
+ const type = readStringField(entry, "type");
92
+ if (type !== "output_text" && type !== "text") return [];
93
+ const value = readStringField(entry, "text");
94
+ return value === void 0 ? [] : [value];
95
+ });
96
+ return parts.length > 0 ? parts.join("").trim() : void 0;
97
+ }
98
+ function readItem(value) {
99
+ if (!isJsonObject(value)) return;
100
+ const type = typeof value.type === "string" ? value.type : void 0;
101
+ const id = typeof value.id === "string" ? value.id : void 0;
102
+ if (!type || !id) return;
103
+ return value;
104
+ }
105
+ //#endregion
106
+ export { readCodexProviderRefusal as a, readNonEmptyString as c, splitPlanText as d, readCodexErrorNotificationMessage as i, readNonNegativeInteger as l, extractRawAssistantText as n, readHookOutputEntries as o, normalizeOptionalString$1 as r, readItem as s, codexProviderRefusalDiagnostics as t, readNullableString as u };
@@ -0,0 +1,2 @@
1
+ import { isIncognitoSessionKey as isIncognitoSessionKey$1 } from "openclaw/plugin-sdk/session-key-runtime";
2
+ export { isIncognitoSessionKey$1 as t };
@@ -1,9 +1,8 @@
1
- import { m as isJsonObject } from "./config-security-BRQ2mgW9.mjs";
1
+ import { n as readCodexInferenceMetadata } from "./inference-metadata-CgIf7sOx.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  //#region extensions/codex/src/app-server/inference-context.ts
4
4
  const MAX_CONTEXT_BYTES = 262144;
5
5
  const MAX_ACTIVE_ROOTS = 64;
6
- const CODEX_INFERENCE_GENERATION_KEY = "openclaw_inference_generation";
7
6
  /** One physical inference transport owns these confidential, nonpersistent snapshots. */
8
7
  function createCodexInferenceContext(assertClientCurrent) {
9
8
  const roots = /* @__PURE__ */ new Map();
@@ -47,32 +46,31 @@ function createCodexInferenceContext(assertClientCurrent) {
47
46
  };
48
47
  },
49
48
  /** Caller must authenticate its private transport before parsing any model request. */
50
- prepare(body) {
49
+ prepare(body, preparedMetadata, requireAdmission = false) {
51
50
  assertOpen();
52
- const metadata = isJsonObject(body.client_metadata) ? body.client_metadata : void 0;
53
- const raw = metadata?.["x-codex-turn-metadata"];
54
- if (typeof raw !== "string" || Buffer.byteLength(raw) > 1048576) throw new Error("Codex inference request is missing bounded native metadata");
55
- const value = JSON.parse(raw);
56
- if (!isJsonObject(value)) throw new Error("Codex inference request has invalid native metadata");
57
- const threadId = value.thread_id;
58
- if (metadata?.thread_id != null && threadId != null && metadata.thread_id !== threadId) throw new Error("Codex inference thread metadata disagrees");
59
- const child = Boolean(value.parent_thread_id || value.subagent_kind || metadata?.["x-openai-subagent"] || metadata?.["x-codex-parent-thread-id"]);
60
- const kind = value.request_kind;
61
- if (child || kind === "compaction" || kind === "memory") return {
51
+ const metadata = preparedMetadata ?? readCodexInferenceMetadata(body);
52
+ const child = Boolean(metadata.parentThreadId || metadata.subagentKind || metadata.subagent);
53
+ const kind = metadata.requestKind;
54
+ if (!requireAdmission && (child || kind === "compaction" || kind === "memory")) return {
62
55
  body,
63
56
  assertCurrent: assertOpen,
64
57
  signal: void 0
65
58
  };
66
- if (kind !== "turn" && kind !== "prewarm") throw new Error("Codex inference request has an unsupported native purpose");
67
- const registration = typeof threadId === "string" ? roots.get(threadId) : void 0;
68
- const generation = value[CODEX_INFERENCE_GENERATION_KEY];
69
- if (kind === "prewarm" && body.generate === false && generation == null) return {
59
+ if (child || kind !== "turn" && kind !== "prewarm" && !(requireAdmission && kind === "compaction")) throw new Error("Codex inference request has an unsupported native purpose");
60
+ const registration = metadata.threadId ? roots.get(metadata.threadId) : void 0;
61
+ const generation = metadata.generation;
62
+ if (!requireAdmission && kind === "prewarm" && body.generate === false && generation == null) return {
70
63
  body,
71
64
  assertCurrent: assertOpen,
72
65
  signal: void 0
73
66
  };
74
67
  if (!registration || generation !== registration.generation) throw new Error("Codex inference has no current admitted parent generation");
75
68
  registration.assertCurrent();
69
+ if (kind === "compaction") return {
70
+ body,
71
+ assertCurrent: registration.assertCurrent,
72
+ signal: registration.controller.signal
73
+ };
76
74
  const instructions = body.instructions;
77
75
  if (instructions !== void 0 && typeof instructions !== "string") throw new Error("Codex inference request has invalid top-level instructions");
78
76
  return {
@@ -91,4 +89,4 @@ function createCodexInferenceContext(assertClientCurrent) {
91
89
  };
92
90
  }
93
91
  //#endregion
94
- export { createCodexInferenceContext as n, CODEX_INFERENCE_GENERATION_KEY as t };
92
+ export { createCodexInferenceContext as t };