@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.
- package/README.md +2 -0
- package/assets/icon.png +0 -0
- package/dist/.setup/{account-usage-runtime-C2MOIvfq.mjs → account-usage-runtime-DFhbh1zz.mjs} +6 -6
- package/dist/.setup/{apply-CJ0ZfmBG.mjs → apply-D3GcSoSa.mjs} +35 -55
- package/dist/.setup/{attempt-client-cleanup-BpYKdTA0.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +179 -73
- package/dist/.setup/attempt-workspace-context-C5HigshI.mjs +164 -0
- package/dist/.setup/{auth-binding-DhLWa_7K.mjs → auth-binding-BLWz7stm.mjs} +14 -1
- package/dist/.setup/{auth-cache-key-QirmgiCo.mjs → auth-cache-key-Dbvq-QgB.mjs} +41 -111
- package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
- package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
- package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
- package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
- package/dist/.setup/{binding-connection-Bm38niE8.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-CnRMC0ta.mjs → binding-connection.runtime-6TpgD1M6.mjs} +5 -5
- package/dist/.setup/{bounded-turn-BtlZcivC.mjs → bounded-turn-CbjoN2OW.mjs} +140 -37
- package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
- package/dist/.setup/{build-state-Xx9ybZqa.mjs → build-state-Da1_z0kd.mjs} +1 -1
- package/dist/.setup/{capabilities-_vXcZGSx.mjs → capabilities-B3WEZl4e.mjs} +2 -10
- package/dist/.setup/{client-vXs2929Q.mjs → client-N0JpgSzF.mjs} +635 -872
- package/dist/.setup/client-catalog-response-5HHLdcde.mjs +285 -0
- package/dist/.setup/{command-dispatch-naHIZwwF.mjs → command-dispatch-BeAoaovI.mjs} +9 -8
- package/dist/.setup/{command-formatters-CGEkdawF.mjs → command-formatters-R3ckE3Co.mjs} +36 -64
- package/dist/.setup/{command-handlers-BtAJEW1X.mjs → command-handlers-ylTMS00z.mjs} +301 -488
- package/dist/.setup/{command-rpc-DHFpn4le.mjs → command-rpc-CGJGUQ6Y.mjs} +40 -28
- package/dist/.setup/compact-C2WamavS.mjs +776 -0
- package/dist/.setup/{config-CedDWjM-.mjs → config-DKhXquav.mjs} +26 -28
- package/dist/.setup/{config-options-BsanJ8QG.mjs → config-options-CzyWLTJt.mjs} +68 -65
- package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
- package/dist/.setup/{config-runtime-CeAhl_h4.mjs → config-runtime-C0NbLms1.mjs} +2 -2
- package/dist/.setup/{config-security-BRQ2mgW9.mjs → config-security-CE-FcGw9.mjs} +51 -215
- package/dist/.setup/{config-utils-DujwEnhg.mjs → config-utils-D0CXecki.mjs} +3 -13
- package/dist/.setup/context-engine-projection-PezSESth.mjs +387 -0
- package/dist/.setup/{conversation-binding-DhzrpTM6.mjs → conversation-binding-3Min8qvP.mjs} +71 -105
- package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
- package/dist/.setup/{conversation-control-DN53ns41.mjs → conversation-control-CEP8X5JC.mjs} +30 -69
- package/dist/.setup/{cyber-failover-DYwbmf1o.mjs → cyber-failover-XV0nNRZu.mjs} +1 -1
- package/dist/.setup/{cyber-failover-notice-e9G3J9-e.mjs → cyber-failover-notice-RNpGpTyP.mjs} +1 -1
- package/dist/.setup/{dynamic-tools-D16lOp67.mjs → dynamic-tools-DzlsLUuS.mjs} +3136 -3167
- package/dist/.setup/{effective-mcp-catalog-K6kLCN8X.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
- package/dist/.setup/{ephemeral-turn-R1gA8Sn6.mjs → ephemeral-turn-CDsPJOa2.mjs} +9 -6
- package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
- package/dist/.setup/{event-projector-usage-C7Ntzs-f.mjs → event-projector-usage-03R0I2dM.mjs} +4 -26
- package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
- package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
- package/dist/.setup/{inference-context-fulhZuz8.mjs → inference-context-D-9gWlTR.mjs} +16 -18
- package/dist/.setup/inference-dispatch-CMZtjQyz.mjs +359 -0
- package/dist/.setup/inference-metadata-CgIf7sOx.mjs +81 -0
- package/dist/.setup/inference-proxy-DhcXOgUE.mjs +561 -0
- package/dist/.setup/{isolated-completion-B6srt48J.mjs → isolated-completion-Dm3PzxJk.mjs} +15 -11
- package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
- package/dist/.setup/{managed-binary-DP6Rib3P.mjs → managed-binary-kiWRhNRE.mjs} +16 -9
- package/dist/.setup/{model-catalog-DkvUuBey.mjs → model-catalog-PAuZgJC6.mjs} +14 -14
- package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
- package/dist/.setup/{models-BDFgm_G-.mjs → models-DHXZtVVk.mjs} +9 -18
- package/dist/.setup/{native-auth-BLZGqFjw.mjs → native-auth-CuG53tu4.mjs} +5 -5
- package/dist/.setup/{native-execution-policy-YBMHSzC4.mjs → native-execution-policy-BxZJy5mP.mjs} +6 -31
- package/dist/.setup/{native-subagent-monitor-B1hxzIOy.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4422 -3808
- package/dist/.setup/native-subagent-pending-assignments-DwkCzLvD.mjs +203 -0
- package/dist/.setup/native-task-assignments-DMQ0g3hu.mjs +194 -0
- package/dist/.setup/{node-cli-sessions-Cl8b2ZF3.mjs → node-cli-sessions-HC4W6FLI.mjs} +99 -111
- package/dist/.setup/node-exec-server.runtime-BgBfWQqo.mjs +244 -0
- package/dist/.setup/{plan-xD7WKYTM.mjs → plan-Y-QIvrKB.mjs} +118 -163
- package/dist/.setup/{plugin-activation-r8nq5Jzp.mjs → plugin-activation-cNHRfaxU.mjs} +10 -47
- package/dist/.setup/{plugin-app-cache-key-BOxKP7db.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +9 -42
- package/dist/.setup/{plugin-inventory-DUle8DLz.mjs → plugin-inventory-Cky2XJUw.mjs} +32 -23
- package/dist/.setup/{plugin-marketplace-discovery-P-Vndfqq.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +22 -25
- package/dist/.setup/{plugin-metadata-cache-DsS5buNa.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +328 -318
- package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
- package/dist/.setup/provider-DH8NSzGt.mjs +51 -0
- package/dist/.setup/{provider-capabilities-B8J4Dy-O.mjs → provider-capabilities-CAxoF-X1.mjs} +35 -12
- package/dist/.setup/{rate-limits-DOEGYRNs.mjs → rate-limits-B7-X2TgG.mjs} +123 -166
- package/dist/.setup/{request-BioXJLYa.mjs → request-BHZ1nz8d.mjs} +25 -16
- package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
- package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
- package/dist/.setup/{run-attempt-rlA07pUv.mjs → run-attempt-D8RZUOzY.mjs} +2046 -1454
- package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
- package/dist/.setup/{runtime-artifact-Dy38Z5iU.mjs → runtime-artifact-DDQ-HGXf.mjs} +43 -47
- package/dist/.setup/runtime-artifact-connection-D68qQn1m.mjs +78 -0
- package/dist/.setup/sandbox-guard-DjCz2eOw.mjs +126 -0
- package/dist/.setup/scope-DOC1Xjc8.mjs +6 -0
- package/dist/.setup/session-binding-DGCYAfvD.mjs +443 -0
- package/dist/.setup/{session-binding-record-TH3xA0zj.mjs → session-binding-record-Oe9L-CNY.mjs} +73 -132
- package/dist/.setup/{session-binding-sidecars-CKYEcfNn.mjs → session-binding-sidecars-jo6H8dFr.mjs} +242 -60
- package/dist/.setup/{session-catalog-fUdWDx-U.mjs → session-catalog-4sCdv5qx.mjs} +598 -452
- package/dist/.setup/{session-catalog-adoption-CR_whkEW.mjs → session-catalog-adoption-BU_pHWG7.mjs} +59 -26
- package/dist/.setup/{session-catalog-archive-CwZaPacf.mjs → session-catalog-archive-spHfihri.mjs} +7 -7
- package/dist/.setup/session-catalog-events-DePDzzjc.mjs +139 -0
- package/dist/.setup/session-catalog-home-id-vlih0B_g.mjs +22 -0
- package/dist/.setup/{session-catalog-index-B141u15s.mjs → session-catalog-index-CZvDzC6z.mjs} +286 -182
- package/dist/.setup/{session-catalog-index-order-Cc5BzlQr.mjs → session-catalog-index-order-BcQpHks3.mjs} +2 -2
- package/dist/.setup/{session-catalog-index-state-BAuDztHN.mjs → session-catalog-index-state-TeO7EyO-.mjs} +6 -2
- package/dist/.setup/session-catalog-limits-DDxOsQeC.mjs +14 -0
- package/dist/.setup/session-catalog-list-request-CvtxrYSe.mjs +170 -0
- package/dist/.setup/session-catalog-native-projection-DjhwGL6x.mjs +178 -0
- package/dist/.setup/{session-catalog-node-adoption-BVRsYOSh.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +30 -35
- package/dist/.setup/{session-catalog-node-continue-Dowv8osw.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +25 -18
- package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
- package/dist/.setup/{session-catalog-native-projection-ChV3cCtm.mjs → session-catalog-parsing-CPGaPYr-.mjs} +14 -180
- package/dist/.setup/{session-catalog-projection-C1Bj9Jl-.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +15 -5
- package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
- package/dist/.setup/{session-cli-DIj-IE-E.mjs → session-cli-Cn_nCqfq.mjs} +11 -24
- package/dist/.setup/{session-history-C--SrLI8.mjs → session-history-D83lJWHG.mjs} +16 -23
- package/dist/.setup/{session-history-import-JHXT5Xfi.mjs → session-history-import-WhX-X33a.mjs} +7 -10
- package/dist/.setup/session-history-read-Ov3StuL4.mjs +133 -0
- package/dist/.setup/{session-history.worker-CpNj7H_P.mjs → session-history.worker-MnPKncqP.mjs} +14 -23
- package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
- package/dist/.setup/{session-permission-policy-DhurXY0l.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
- package/dist/.setup/{session-retirement-CU87AOg9.mjs → session-retirement-qMTxkNx2.mjs} +31 -12
- package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
- package/dist/.setup/{settled-turn-finalizer-CiY2bLFK.mjs → settled-turn-finalizer-BsvEabkw.mjs} +17 -13
- package/dist/.setup/{shared-client-BpTtuLQ5.mjs → shared-client-DqyTMYug.mjs} +826 -485
- package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
- package/dist/.setup/{side-question-DSCZyoBD.mjs → side-question-C4kCmQy1.mjs} +206 -334
- package/dist/.setup/{source-Bjp4UQij.mjs → source-CS_7GFJZ.mjs} +82 -139
- package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
- package/dist/.setup/{thread-archive-guard-jmecf6OJ.mjs → thread-archive-guard-C9frICzX.mjs} +10 -3
- package/dist/.setup/thread-lifecycle-DPflntEJ.mjs +2362 -0
- package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
- package/dist/.setup/{thread-ownership-skomxnIt.mjs → thread-ownership-roNP0l1c.mjs} +47 -10
- package/dist/.setup/thread-policy-DTd-DtkX.mjs +109 -0
- package/dist/.setup/thread-requests-B_bRnMGN.mjs +2102 -0
- package/dist/.setup/{thread-resume-BkNpj9Pz.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
- package/dist/.setup/timeout-CXOfNoaX.mjs +46 -0
- package/dist/.setup/transcript-history-projection-DRSifI-1.mjs +201 -0
- package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
- package/dist/.setup/{transcript-mirror-D4qp_leP.mjs → transcript-mirror-kxmCYsuF.mjs} +224 -206
- package/dist/.setup/{transport-stdio-Cmx94Oiy.mjs → transport-stdio-Bdegpn2V.mjs} +138 -75
- package/dist/.setup/transport-websocket-BTBE-LD9.mjs +211 -0
- package/dist/.setup/{upstream-prompt-provenance-LphB8slG.mjs → upstream-prompt-provenance-fXkKbPVC.mjs} +3 -9
- package/dist/.setup/{upstream-session-fork-D3UKxgVD.mjs → upstream-session-fork-CBeVjBpT.mjs} +48 -40
- package/dist/.setup/{usage-BOgBEKso.mjs → usage-BMzNxeR_.mjs} +5 -4
- package/dist/.setup/{usage-limit-error-C0ow7DOc.mjs → usage-limit-error-QXerDo3i.mjs} +5 -20
- package/dist/.setup/{web-search-provider.runtime-CTGuJt6i.mjs → web-search-provider.runtime-P77OUeoo.mjs} +10 -20
- package/dist/api.js +25 -16
- package/dist/catalog-page-worker-entrypoint.js +12 -0
- package/dist/catalog-page.worker.js +9 -0
- package/dist/cli-metadata.js +1 -1
- package/dist/doctor-contract-api.js +50 -8
- package/dist/harness.js +344 -1
- package/dist/index.js +345 -346
- package/dist/media-understanding-provider.js +9 -22
- package/dist/migration-provider-api.js +1 -1
- package/dist/provider-discovery.js +1 -1
- package/dist/session-history-worker-runtime.js +16 -33
- package/dist/session-history.worker.js +1 -1
- package/openclaw.plugin.json +14 -2
- package/package.json +11 -7
- package/dist/.setup/attempt-context-VXVwTCfS.mjs +0 -636
- package/dist/.setup/compact-C3i3qlzj.mjs +0 -687
- package/dist/.setup/event-projector-assistant-message-DNUR1s0A.mjs +0 -105
- package/dist/.setup/event-projector-items-DyTQ_XqL.mjs +0 -200
- package/dist/.setup/harness-rxaaoN-o.mjs +0 -349
- package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
- package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
- package/dist/.setup/inference-proxy-CC15HuSi.mjs +0 -311
- package/dist/.setup/launch-args-DnMak49W.mjs +0 -111
- package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
- package/dist/.setup/native-subagent-history-YXaL6dMd.mjs +0 -135
- package/dist/.setup/native-subagent-task-ids-DsuOonKv.mjs +0 -411
- package/dist/.setup/node-exec-server.runtime-BaViBKNz.mjs +0 -226
- package/dist/.setup/plugin-approval-roundtrip-CjfzafAZ.mjs +0 -122
- package/dist/.setup/provider-fFh_-VR3.mjs +0 -50
- package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
- package/dist/.setup/sandbox-guard-BBP-RbTf.mjs +0 -166
- package/dist/.setup/session-binding-_0W_fHRr.mjs +0 -721
- package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +0 -250
- package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
- package/dist/.setup/session-initialization-DH1z6fXn.mjs +0 -75
- package/dist/.setup/thread-history-page-BTx-4xsg.mjs +0 -83
- package/dist/.setup/thread-lifecycle-Cik28qWn.mjs +0 -4904
- package/dist/.setup/thread-policy-Cjs4B8xf.mjs +0 -54
- package/dist/.setup/timeout-DZF05XrR.mjs +0 -63
- package/dist/.setup/transcript-history-projection-DHNBDhCU.mjs +0 -243
- package/dist/.setup/version-CoqzXPgK.mjs +0 -12
package/dist/.setup/{session-catalog-adoption-CR_whkEW.mjs → session-catalog-adoption-BU_pHWG7.mjs}
RENAMED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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-
|
|
5
|
-
import { adoptionSessionKeyRest,
|
|
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
|
|
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)
|
|
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)
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
if (!sessionId) return;
|
|
48
|
+
return {
|
|
49
|
+
agentId,
|
|
49
50
|
sessionKey,
|
|
50
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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-
|
|
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 =
|
|
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;
|
package/dist/.setup/{session-catalog-archive-CwZaPacf.mjs → session-catalog-archive-spHfihri.mjs}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as assertCodexArchiveDescendantsUnowned } from "./thread-archive-guard-
|
|
4
|
-
import "./session-binding-
|
|
5
|
-
import {
|
|
6
|
-
import { isAdoptionSessionKeyForThread, requireIdleThread } from "./session-catalog-adoption-
|
|
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
|
|
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 };
|