@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,12 +1,13 @@
1
- import { p as sessionBindingIdentity } from "./session-binding-record-TH3xA0zj.mjs";
2
- import { F as requireBoundThread, g as CatalogParamsError, x as boundedCatalogString } from "./session-catalog-native-projection-ChV3cCtm.mjs";
1
+ import { T as requireBoundThread, d as boundedCatalogString, o as CatalogParamsError } from "./session-catalog-parsing-CPGaPYr-.mjs";
2
+ import { v as sessionBindingIdentity } from "./session-binding-record-Oe9L-CNY.mjs";
3
3
  import { n as codexUpstreamBaseline, t as codexLastTerminalTurnId } from "./session-upstream-marker-D15C9NHp.mjs";
4
- import { i as reclaimCurrentCodexSessionGeneration } from "./session-binding-_0W_fHRr.mjs";
5
- import { adoptionSessionKeyRest, continueOperations, runSessionActionExclusive } from "./session-catalog-node-adoption-BVRsYOSh.mjs";
4
+ import { i as reclaimCurrentCodexSessionGeneration } from "./session-binding-DGCYAfvD.mjs";
5
+ import { adoptionSessionKeyRest, catalogSessionActions } from "./session-catalog-node-adoption-DgXvSGu0.mjs";
6
6
  import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
7
7
  import { listSessionCatalogEntries, sessionCatalogAdoptedSessionKey, sessionCatalogAdoptedSourceKey } from "openclaw/plugin-sdk/session-catalog";
8
8
  //#region extensions/codex/src/session-catalog-adoption.ts
9
9
  const CODEX_SUPERVISION_SESSION_KEY_PREFIX = "harness:codex:supervision:";
10
+ const continueOperations = /* @__PURE__ */ new Map();
10
11
  const boundCatalogSessionId = (value) => boundedCatalogString(value, 256);
11
12
  function requireIdleThread(thread, action) {
12
13
  if (thread.status?.type === "idle" || action === "archive" && thread.status?.type === "notLoaded") return;
@@ -32,36 +33,68 @@ function readCodexSupervisionMarker(entry) {
32
33
  };
33
34
  }
34
35
  async function listAdoptedSessionEntries(params) {
35
- const adopted = /* @__PURE__ */ new Map();
36
- for (const { agentId, entry, sessionKey } of listSessionCatalogEntries({
36
+ const entries = listSessionCatalogEntries({
37
37
  ...params.agentId ? { agentId: params.agentId } : {},
38
38
  config: params.config ?? {},
39
39
  runtime: params.runtime,
40
40
  sessionEntries: params.sessionEntries
41
- })) {
41
+ });
42
+ const candidateForEntry = ({ agentId, entry, sessionKey }) => {
42
43
  const sessionKeyRest = adoptionSessionKeyRest(sessionKey);
43
44
  const marker = readCodexSupervisionMarker(entry);
44
- if (!sessionKeyRest.startsWith(CODEX_SUPERVISION_SESSION_KEY_PREFIX) || !marker || entry.initializationPending === true || entry.agentHarnessId !== "codex" || entry.modelSelectionLocked !== true) continue;
45
+ if (!sessionKeyRest.startsWith(CODEX_SUPERVISION_SESSION_KEY_PREFIX) || !marker || entry.initializationPending === true || entry.agentHarnessId !== "codex" || entry.modelSelectionLocked !== true) return;
45
46
  const sessionId = entry.sessionId?.trim();
46
- if (!sessionId) continue;
47
- const binding = params.bindingStore.read(sessionBindingIdentity({
48
- sessionId,
47
+ if (!sessionId) return;
48
+ return {
49
+ agentId,
49
50
  sessionKey,
50
- config: params.config
51
- }));
52
- const sourceThreadId = binding?.supervisionSourceThreadId?.trim();
53
- const boundThreadId = binding?.threadId.trim();
54
- if (binding?.connectionScope !== "supervision" || !sourceThreadId || !boundThreadId || sessionKeyRest !== adoptionSessionKey(sourceThreadId, marker.sourceHomeId)) continue;
55
- const sourceKey = sessionCatalogAdoptedSourceKey(marker.sourceHomeId ?? "gateway:local", sourceThreadId);
56
- if (adopted.has(sourceKey)) throw new Error(`multiple OpenClaw sessions adopt Codex thread ${sourceThreadId} from the same home`);
57
- adopted.set(sourceKey, {
58
- key: sessionKey,
51
+ sessionKeyRest,
59
52
  sessionId,
60
- agentId,
61
- boundThreadId
62
- });
53
+ marker,
54
+ identity: sessionBindingIdentity({
55
+ sessionId,
56
+ sessionKey,
57
+ config: params.config
58
+ })
59
+ };
60
+ };
61
+ function* candidates() {
62
+ for (const entry of entries) {
63
+ const candidate = candidateForEntry(entry);
64
+ if (candidate) yield candidate;
65
+ }
66
+ }
67
+ const collect = (selected, readBinding = (identity) => params.bindingStore.read(identity)) => {
68
+ const adopted = /* @__PURE__ */ new Map();
69
+ for (const { agentId, sessionKey, sessionKeyRest, sessionId, marker, identity } of selected) {
70
+ const binding = readBinding(identity);
71
+ const sourceThreadId = binding?.supervisionSourceThreadId?.trim();
72
+ const boundThreadId = binding?.threadId.trim();
73
+ if (binding?.connectionScope !== "supervision" || !sourceThreadId || !boundThreadId || sessionKeyRest !== adoptionSessionKey(sourceThreadId, marker.sourceHomeId)) continue;
74
+ const sourceKey = sessionCatalogAdoptedSourceKey(marker.sourceHomeId ?? "gateway:local", sourceThreadId);
75
+ if (adopted.has(sourceKey)) throw new Error(`multiple OpenClaw sessions adopt Codex thread ${sourceThreadId} from the same home`);
76
+ adopted.set(sourceKey, {
77
+ key: sessionKey,
78
+ sessionId,
79
+ agentId,
80
+ boundThreadId
81
+ });
82
+ }
83
+ return adopted;
84
+ };
85
+ if (!params.bindingStore.readMany) return collect(candidates());
86
+ let prepared;
87
+ try {
88
+ prepared = [...candidates()];
89
+ } catch {
90
+ return collect(candidates());
91
+ }
92
+ const bindings = params.bindingStore.readMany(prepared.map(({ identity }) => identity));
93
+ try {
94
+ return collect(prepared, () => bindings.next().value);
95
+ } finally {
96
+ bindings.return(void 0);
63
97
  }
64
- return adopted;
65
98
  }
66
99
  async function findAdoptedSessionEntry(params) {
67
100
  const adopted = await listAdoptedSessionEntries(params);
@@ -119,7 +152,7 @@ async function createOrReuseAdoptedSession(params) {
119
152
  sourceThreadId: params.sourceThread.id,
120
153
  ...params.sourceHomeId ? { sourceHomeId: params.sourceHomeId } : {}
121
154
  };
122
- const { createImportedCodexSession } = await import("./session-history-import-JHXT5Xfi.mjs");
155
+ const { createImportedCodexSession } = await import("./session-history-import-WhX-X33a.mjs");
123
156
  const created = await createImportedCodexSession({
124
157
  runtime: params.api.runtime,
125
158
  bindingStore: params.bindingStore,
@@ -239,7 +272,7 @@ async function continueLocalCodexSession(params) {
239
272
  ...params,
240
273
  control
241
274
  });
242
- const operation = runSessionActionExclusive(sourceKey, async () => params.control.withPinnedConnection(run));
275
+ const operation = catalogSessionActions.enqueue(sourceKey, async () => params.control.withPinnedConnection(run));
243
276
  continueOperations.set(operationKey, operation);
244
277
  try {
245
278
  return await operation;
@@ -1,9 +1,9 @@
1
- import { p as sessionBindingIdentity } from "./session-binding-record-TH3xA0zj.mjs";
2
- import { g as CatalogParamsError } from "./session-catalog-native-projection-ChV3cCtm.mjs";
3
- import { t as assertCodexArchiveDescendantsUnowned } from "./thread-archive-guard-jmecf6OJ.mjs";
4
- import "./session-binding-_0W_fHRr.mjs";
5
- import { runSessionActionExclusive } from "./session-catalog-node-adoption-BVRsYOSh.mjs";
6
- import { isAdoptionSessionKeyForThread, requireIdleThread } from "./session-catalog-adoption-CR_whkEW.mjs";
1
+ import { o as CatalogParamsError } from "./session-catalog-parsing-CPGaPYr-.mjs";
2
+ import { v as sessionBindingIdentity } from "./session-binding-record-Oe9L-CNY.mjs";
3
+ import { t as assertCodexArchiveDescendantsUnowned } from "./thread-archive-guard-C9frICzX.mjs";
4
+ import "./session-binding-DGCYAfvD.mjs";
5
+ import { catalogSessionActions } from "./session-catalog-node-adoption-DgXvSGu0.mjs";
6
+ import { isAdoptionSessionKeyForThread, requireIdleThread } from "./session-catalog-adoption-BU_pHWG7.mjs";
7
7
  import { listAgentIds } from "openclaw/plugin-sdk/agent-scope-runtime";
8
8
  import { sessionCatalogAdoptedSourceKey } from "openclaw/plugin-sdk/session-catalog";
9
9
  //#region extensions/codex/src/session-catalog-archive.ts
@@ -26,7 +26,7 @@ function assertNoPendingSupervisionBranch(params) {
26
26
  }
27
27
  /** Archives one inactive Gateway-local Codex thread after a fresh status read. */
28
28
  async function archiveLocalCodexSession(params) {
29
- return await runSessionActionExclusive(sessionCatalogAdoptedSourceKey(params.hostId ?? "gateway:local", params.threadId), async () => {
29
+ return await catalogSessionActions.enqueue(sessionCatalogAdoptedSourceKey(params.hostId ?? "gateway:local", params.threadId), async () => {
30
30
  return await params.bindingStore.withThreadArchiveFence(async () => {
31
31
  const run = async (control) => {
32
32
  assertNoPendingSupervisionBranch(params);
@@ -0,0 +1,139 @@
1
+ import { c as MAX_CWD_LENGTH, d as boundedCatalogString } from "./session-catalog-parsing-CPGaPYr-.mjs";
2
+ import { n as defineCodexBuildState } from "./build-state-Da1_z0kd.mjs";
3
+ import { r as inferCodexAppServerConnectionClass } from "./config-security-CE-FcGw9.mjs";
4
+ import { n as resolveCodexAppServerLocalHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
5
+ import { n as codexCatalogHomeIdFromCanonicalPath } from "./session-catalog-home-id-vlih0B_g.mjs";
6
+ import { t as buildCodexAppServerConnectionFingerprint } from "./plugin-app-cache-key-BL9B5H0L.mjs";
7
+ import { d as observeCodexCatalogEphemeralThreads, r as projectCodexCatalogNativeThread, s as codexCatalogSourceForClient } from "./session-catalog-native-projection-DjhwGL6x.mjs";
8
+ import { createHash } from "node:crypto";
9
+ import { embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-registration";
10
+ import path from "node:path";
11
+ import fs from "node:fs/promises";
12
+ //#region extensions/codex/src/session-catalog-events.ts
13
+ const getCatalogEvents = defineCodexBuildState("openclaw.codexCatalogEvents", () => ({
14
+ listeners: /* @__PURE__ */ new Map(),
15
+ clients: /* @__PURE__ */ new WeakMap()
16
+ }));
17
+ const CATALOG_NOTIFICATION_METHODS = /* @__PURE__ */ new Set([
18
+ "thread/started",
19
+ "turn/started",
20
+ "turn/completed",
21
+ "thread/archived",
22
+ "thread/deleted",
23
+ "thread/unarchived",
24
+ "thread/reverted",
25
+ "thread/name/updated",
26
+ "thread/status/changed",
27
+ "thread/settings/updated"
28
+ ]);
29
+ function notifyEphemeralThread(homeKey, rawId) {
30
+ const id = boundedCatalogString(rawId, 256);
31
+ if (!id) return;
32
+ for (const listener of getCatalogEvents().listeners.get(homeKey) ?? []) try {
33
+ listener.onEphemeralThread?.(id);
34
+ } catch (error) {
35
+ embeddedAgentLog.warn("Codex catalog ephemeral observer failed", { error });
36
+ }
37
+ }
38
+ /** Uses prepared local identity or resolves it once during client/index startup. */
39
+ async function codexCatalogResidentHomeKey(params) {
40
+ if (inferCodexAppServerConnectionClass(params.startOptions) === "remote") {
41
+ const fingerprint = buildCodexAppServerConnectionFingerprint({
42
+ start: params.startOptions,
43
+ connectionClass: "remote"
44
+ }, params.agentDir);
45
+ return `remote:${createHash("sha256").update(fingerprint).digest("hex")}`;
46
+ }
47
+ if (params.sourceHomeId) return params.sourceHomeId;
48
+ const home = path.resolve(params.runtimeIdentity?.codexHome ?? resolveCodexAppServerLocalHomeDir(params.startOptions, params.agentDir));
49
+ return codexCatalogHomeIdFromCanonicalPath(await fs.realpath(home).catch(() => home));
50
+ }
51
+ function subscribeCodexCatalogEvents(homeKey, listener, callbacks = {}) {
52
+ const { listeners } = getCatalogEvents();
53
+ let homeListeners = listeners.get(homeKey);
54
+ if (!homeListeners) {
55
+ homeListeners = /* @__PURE__ */ new Set();
56
+ listeners.set(homeKey, homeListeners);
57
+ }
58
+ const subscription = {
59
+ notify: listener,
60
+ ...callbacks
61
+ };
62
+ homeListeners.add(subscription);
63
+ return () => {
64
+ homeListeners.delete(subscription);
65
+ if (homeListeners.size === 0 && listeners.get(homeKey) === homeListeners) listeners.delete(homeKey);
66
+ };
67
+ }
68
+ /** Observes physical clients without extending their lease or native thread lifetime. */
69
+ function observeCodexCatalogClient(client, params) {
70
+ const state = getCatalogEvents();
71
+ const existing = state.clients.get(client);
72
+ if (existing) return existing.then(() => void 0);
73
+ const observing = (async () => {
74
+ const homeKey = await codexCatalogResidentHomeKey({
75
+ ...params,
76
+ runtimeIdentity: client.getRuntimeIdentity()
77
+ });
78
+ if (client.getCloseError()) return;
79
+ const source = codexCatalogSourceForClient(client);
80
+ observeCodexCatalogEphemeralThreads(source, notifyEphemeralThread.bind(void 0, homeKey));
81
+ const notifyLifecycle = (callback) => {
82
+ for (const listener of state.listeners.get(homeKey) ?? []) try {
83
+ listener[callback]?.(source);
84
+ } catch (error) {
85
+ embeddedAgentLog.warn("Codex catalog lifecycle observer failed", {
86
+ callback,
87
+ error
88
+ });
89
+ }
90
+ };
91
+ const readThread = async (threadId) => (await client.request("thread/read", {
92
+ threadId,
93
+ includeTurns: false
94
+ }, {
95
+ timeoutMs: 6e4,
96
+ catalogPreview: true
97
+ })).thread;
98
+ const stopNotifications = client.addNotificationHandler((event) => {
99
+ if (!CATALOG_NOTIFICATION_METHODS.has(event.method)) return;
100
+ for (const listener of state.listeners.get(homeKey) ?? []) listener.notify(event, readThread, source);
101
+ });
102
+ const stopClose = client.addCloseHandler(() => {
103
+ stopNotifications();
104
+ stopClose();
105
+ notifyLifecycle("onClose");
106
+ });
107
+ if (inferCodexAppServerConnectionClass(params.startOptions) === "remote") notifyLifecycle("onRemoteReady");
108
+ return {
109
+ homeKey,
110
+ source
111
+ };
112
+ })();
113
+ state.clients.set(client, observing);
114
+ return observing.then(() => void 0);
115
+ }
116
+ /** Acknowledged resume settings may differ from the response thread's persisted metadata. */
117
+ async function publishCodexCatalogResume(client, response, sanitize) {
118
+ try {
119
+ const prepared = {
120
+ thread: projectCodexCatalogNativeThread(response.thread, sanitize),
121
+ cwd: boundedCatalogString(response.cwd, MAX_CWD_LENGTH),
122
+ modelProvider: boundedCatalogString(response.modelProvider, 500, "truncate")
123
+ };
124
+ const state = getCatalogEvents();
125
+ const binding = await state.clients.get(client);
126
+ if (!binding || binding.source.closed) return;
127
+ await Promise.all(Array.from(state.listeners.get(binding.homeKey) ?? [], async (listener) => {
128
+ try {
129
+ await listener.onResume?.(prepared, binding.source);
130
+ } catch (error) {
131
+ embeddedAgentLog.warn("Codex catalog resume observer failed", { error });
132
+ }
133
+ }));
134
+ } catch (error) {
135
+ embeddedAgentLog.warn("Codex catalog resume publication failed", { error });
136
+ }
137
+ }
138
+ //#endregion
139
+ export { subscribeCodexCatalogEvents as i, observeCodexCatalogClient as n, publishCodexCatalogResume as r, codexCatalogResidentHomeKey as t };
@@ -0,0 +1,22 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ //#region extensions/codex/src/session-catalog-home-id.ts
5
+ function canonicalCodexCatalogHome(value) {
6
+ const resolved = path.resolve(value);
7
+ try {
8
+ return fs.realpathSync.native(resolved);
9
+ } catch {
10
+ return resolved;
11
+ }
12
+ }
13
+ /** One canonical identity for catalog discovery and durable ownership rows. */
14
+ function codexCatalogHomeId(codexHome) {
15
+ return codexCatalogHomeIdFromCanonicalPath(canonicalCodexCatalogHome(codexHome));
16
+ }
17
+ /** Hashes lifecycle-prepared paths without repeating filesystem discovery. */
18
+ function codexCatalogHomeIdFromCanonicalPath(codexHome) {
19
+ return createHash("sha256").update("openclaw:codex-session-catalog-home:v1\0").update(codexHome).digest("hex");
20
+ }
21
+ //#endregion
22
+ export { codexCatalogHomeIdFromCanonicalPath as n, codexCatalogHomeId as t };