@openclaw/codex 2026.10.10-beta.3 → 2026.10.10-beta.4
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/dist/.setup/{account-usage-runtime-BOspqhfQ.mjs → account-usage-runtime-CO_i9_7B.mjs} +3 -3
- package/dist/.setup/{app-server-policy-Cog6mm2i.mjs → app-server-policy-CFCEWj0w.mjs} +1 -1
- package/dist/.setup/{apply-DVeFKzUL.mjs → apply-DvEtGGBB.mjs} +8 -8
- package/dist/.setup/{attempt-client-cleanup-BLp6z_DD.mjs → attempt-client-cleanup-Bj4T3tcX.mjs} +5 -5
- package/dist/.setup/{attempt-workspace-context-GYPLawX6.mjs → attempt-workspace-context-DxHd71bH.mjs} +1 -1
- package/dist/.setup/{auth-binding-830RLAJW.mjs → auth-binding-BY7Fm501.mjs} +1 -1
- package/dist/.setup/{auth-cache-key-aolg0chE.mjs → auth-cache-key-Do2ZQrNP.mjs} +3 -3
- package/dist/.setup/{binding-connection-GTgUj9pi.mjs → binding-connection-hJD5mFkM.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-RcWR3vQu.mjs → binding-connection.runtime-Dap4qmsz.mjs} +1 -1
- package/dist/.setup/{bounded-turn-DJr0EXh7.mjs → bounded-turn-DnxnHHZP.mjs} +10 -10
- package/dist/.setup/{bounded-turn-isolation-D8CDrAVX.mjs → bounded-turn-isolation-Iz8EsqFg.mjs} +2 -2
- package/dist/.setup/{build-state-DswWyGqI.mjs → build-state-CpGXWSN4.mjs} +1 -1
- package/dist/.setup/{client-CPPD2q0Z.mjs → client-Bxe8bl-K.mjs} +8 -8
- package/dist/.setup/{client-catalog-response-FeIOBhaz.mjs → client-catalog-response-D-dEl0Ac.mjs} +1 -1
- package/dist/.setup/{client-initialize-CjgZcX61.mjs → client-initialize-CPNmLwhL.mjs} +1 -1
- package/dist/.setup/{command-dispatch-DlgDPLEv.mjs → command-dispatch-BD9-WK7I.mjs} +1 -1
- package/dist/.setup/{command-handlers-B7Kcgt8i.mjs → command-handlers-g046iNsp.mjs} +22 -22
- package/dist/.setup/{command-rpc-DomZ6_l8.mjs → command-rpc-CwpCTOrX.mjs} +11 -11
- package/dist/.setup/{compact-H5H5Cvbw.mjs → compact-B-qCn3BG.mjs} +13 -13
- package/dist/.setup/{computer-use-BFfXSTZw.mjs → computer-use-C0qJq1rh.mjs} +6 -6
- package/dist/.setup/{config-BfrAlTMT.mjs → config-BZYTxljj.mjs} +2 -2
- package/dist/.setup/{config-runtime-BZRizyuG.mjs → config-runtime-CqCrHEAU.mjs} +1 -1
- package/dist/.setup/{conversation-binding-DyiBKCA4.mjs → conversation-binding-CXGGbblk.mjs} +16 -16
- package/dist/.setup/{conversation-binding-data-khgW0n-o.mjs → conversation-binding-data-CAKQCqTL.mjs} +1 -1
- package/dist/.setup/{conversation-control-B2EpVZEb.mjs → conversation-control-CTZTP_rE.mjs} +3 -3
- package/dist/.setup/{doctor-start-options-8uIBXIzR.mjs → doctor-start-options-CpcBuzLb.mjs} +3 -3
- package/dist/.setup/{dynamic-tool-build-DkJpWzXt.mjs → dynamic-tool-build-BzTaCmlT.mjs} +3 -3
- package/dist/.setup/{dynamic-tools-UL4DHNTh.mjs → dynamic-tools-BALvjDwR.mjs} +8 -8
- package/dist/.setup/{effective-mcp-catalog-CvJiu5dn.mjs → effective-mcp-catalog-CQbEkKv_.mjs} +6 -6
- package/dist/.setup/{ephemeral-turn-C9iVxYQi.mjs → ephemeral-turn-CNm9tN72.mjs} +2 -2
- package/dist/.setup/{inference-context-BPwyk-Op.mjs → inference-context-DYpvCEF3.mjs} +1 -1
- package/dist/.setup/{inference-proxy-iJoMVyEy.mjs → inference-proxy-e1Rg8kr_.mjs} +1 -1
- package/dist/.setup/{installed-probe-lVC1X5ve.mjs → installed-probe-yc_w-vom.mjs} +3 -3
- package/dist/.setup/{isolated-completion-Bv8qIPw_.mjs → isolated-completion-B1mlyhKu.mjs} +5 -5
- package/dist/.setup/{managed-binary-DbKvGXKl.mjs → managed-binary-BwzkwiGo.mjs} +2 -2
- package/dist/.setup/{mcp-app-session-preparation-DtvMR_yX.mjs → mcp-app-session-preparation-CFbTbxia.mjs} +9 -9
- package/dist/.setup/{model-catalog-EWVLBn3F.mjs → model-catalog-BNSZklNP.mjs} +7 -7
- package/dist/.setup/{models-Bc4yyUrk.mjs → models-HgvyBseb.mjs} +3 -3
- package/dist/.setup/native-assignment-repair-BsWKjUjZ.mjs +162 -0
- package/dist/.setup/{native-auth-DpZIaY8N.mjs → native-auth-o_vw8KWa.mjs} +3 -3
- package/dist/.setup/{native-hook-relay-DbNYjwuC.mjs → native-hook-relay-COcu2b4l.mjs} +4 -4
- package/dist/.setup/{native-mcp-app-gkEJsgj2.mjs → native-mcp-app-CFyl3R2g.mjs} +5 -5
- package/dist/.setup/{native-skill-isolation-Cja6Nv79.mjs → native-skill-isolation-B8cWhSFy.mjs} +3 -3
- package/dist/.setup/{native-subagent-monitor-D1pYkirc.mjs → native-subagent-monitor-LJd5_D5F.mjs} +151 -47
- package/dist/.setup/{native-subagent-pending-assignments-CTinVtjo.mjs → native-subagent-pending-assignments-CX-LtYDX.mjs} +49 -11
- package/dist/.setup/{native-task-assignments-YJopbaVO.mjs → native-task-assignments-CMd-JiUS.mjs} +4 -4
- package/dist/.setup/{node-cli-sessions-BuJnBnEq.mjs → node-cli-sessions-C59CAyDh.mjs} +2 -2
- package/dist/.setup/{node-exec-server.runtime-CP7RC1Nd.mjs → node-exec-server.runtime-DvRSh5Oi.mjs} +2 -2
- package/dist/.setup/{plan-BUB3QGL7.mjs → plan-C3H9W_2P.mjs} +5 -5
- package/dist/.setup/{plugin-activation-CXPWe-hl.mjs → plugin-activation-Cj2k3W9n.mjs} +2 -2
- package/dist/.setup/{plugin-approval-roundtrip-BkiVPLuc.mjs → plugin-approval-roundtrip-DEbTgtVQ.mjs} +1 -1
- package/dist/.setup/{plugin-inventory-DE9wcaeH.mjs → plugin-inventory-BVP15PmN.mjs} +1 -1
- package/dist/.setup/{project-doc-thread-config-B0UI3f1D.mjs → project-doc-thread-config-Ds92xu17.mjs} +3 -3
- package/dist/.setup/{provider-Rt7awchu.mjs → provider-C1GuStnr.mjs} +4 -4
- package/dist/.setup/{provider-capabilities-C0laqfjE.mjs → provider-capabilities-DMfkFwZi.mjs} +1 -1
- package/dist/.setup/{request-DbU7VQMs.mjs → request-DTgD_jsY.mjs} +5 -5
- package/dist/.setup/{run-attempt-BFAgRiTd.mjs → run-attempt-DB4AY6QP.mjs} +127 -72
- package/dist/.setup/{runtime-artifact-CmLWeyJB.mjs → runtime-artifact-Bn_GvxjU.mjs} +3 -3
- package/dist/.setup/{runtime-artifact-connection-DpWlZ02e.mjs → runtime-artifact-connection-DCwh9tgV.mjs} +2 -2
- package/dist/.setup/{sandbox-guard-DneAfNye.mjs → sandbox-guard-CrzVgQUn.mjs} +1 -1
- package/dist/.setup/{session-binding-BgsWcbdY.mjs → session-binding-Dg0B6Zua.mjs} +38 -12
- package/dist/.setup/{session-binding-record-C_THntMe.mjs → session-binding-record-BpWF2Sus.mjs} +2 -2
- package/dist/.setup/{session-binding-sidecars-BNSS6WL4.mjs → session-binding-sidecars-C9uEGpDX.mjs} +1 -1
- package/dist/.setup/{session-cancellation-9l8N4EUL.mjs → session-cancellation-Bg94rN6N.mjs} +4 -4
- package/dist/.setup/{session-catalog-adoption-ppsLlVLB.mjs → session-catalog-adoption-D6pqS43M.mjs} +5 -5
- package/dist/.setup/{session-catalog-archive-CqLRHJ6z.mjs → session-catalog-archive-B-ZpAiiK.mjs} +5 -5
- package/dist/.setup/{session-catalog-events-CicBG92S.mjs → session-catalog-events-BmhPYZGw.mjs} +4 -4
- package/dist/.setup/{session-catalog-index-ft2e51lh.mjs → session-catalog-index-D7fccO1r.mjs} +8 -8
- package/dist/.setup/{session-catalog-index-order-0Zqng2u8.mjs → session-catalog-index-order-DyCNai_t.mjs} +1 -1
- package/dist/.setup/{session-catalog-limits-Dc6E0BZz.mjs → session-catalog-limits-CGjAZOTM.mjs} +1 -1
- package/dist/.setup/{session-catalog-list-request-CAjoWjaH.mjs → session-catalog-list-request-DGn9LMJY.mjs} +3 -3
- package/dist/.setup/{session-catalog-native-projection-CwOyRRXK.mjs → session-catalog-native-projection-HAmuA2-G.mjs} +4 -4
- package/dist/.setup/{session-catalog-node-adoption-e9v8mGgx.mjs → session-catalog-node-adoption-C_41f1dK.mjs} +2 -2
- package/dist/.setup/{session-catalog-node-continue-H7nrzcUD.mjs → session-catalog-node-continue-FuNSGUYz.mjs} +5 -5
- package/dist/.setup/{session-catalog-node-lookup-BrZfDkA8.mjs → session-catalog-node-lookup-BfHfknjz.mjs} +2 -2
- package/dist/.setup/{session-catalog-parsing-V6jyFg9g.mjs → session-catalog-parsing-ktmfo9oa.mjs} +1 -1
- package/dist/.setup/{session-catalog-projection-By1iGA1y.mjs → session-catalog-projection-C_w9yRCz.mjs} +4 -4
- package/dist/.setup/{session-catalog-source-DghHV4qB.mjs → session-catalog-source-BW46oF7X.mjs} +1 -1
- package/dist/.setup/{session-cli-CBGKiqdv.mjs → session-cli-COjTO3Dy.mjs} +1 -1
- package/dist/.setup/{session-history-import-BwPKwcNi.mjs → session-history-import-BZHN6RtG.mjs} +4 -4
- package/dist/.setup/{session-initialization-Dn3vveGv.mjs → session-initialization-Bztyf-sf.mjs} +1 -1
- package/dist/.setup/{session-retirement-D9qTLXqz.mjs → session-retirement-BHMs5nFf.mjs} +6 -6
- package/dist/.setup/{settled-turn-finalizer-Cn7yngMH.mjs → settled-turn-finalizer-C3OEC7ED.mjs} +5 -5
- package/dist/.setup/{shared-client-B8v6e5D0.mjs → shared-client-BelwlhWf.mjs} +63 -27
- package/dist/.setup/{side-question-DFFnd64D.mjs → side-question-Bt2vXr-h.mjs} +21 -21
- package/dist/.setup/{source-DTo8pzXK.mjs → source-DQN8P65G.mjs} +4 -4
- package/dist/.setup/{thread-lifecycle-run-DOC2IWpW.mjs → thread-lifecycle-run-aBfXzIGf.mjs} +36 -22
- package/dist/.setup/{thread-ownership-DJ8PPxRc.mjs → thread-ownership-DxW6b6fR.mjs} +4 -4
- package/dist/.setup/{thread-policy-UldER50x.mjs → thread-policy-j-BAwvSk.mjs} +3 -3
- package/dist/.setup/{thread-requests-BjawdIVV.mjs → thread-requests-6Dy8hyXF.mjs} +2 -2
- package/dist/.setup/{thread-resume-BZWI-rUL.mjs → thread-resume-CZxguYjc.mjs} +4 -4
- package/dist/.setup/{transcript-mirror-CEQJZlF3.mjs → transcript-mirror-5w4Hx1kt.mjs} +1 -1
- package/dist/.setup/{transport-stdio-Bq160Dhv.mjs → transport-stdio-BVeWgcK6.mjs} +1 -1
- package/dist/.setup/{transport-websocket-0YqiI_MH.mjs → transport-websocket-2Y-cL8kD.mjs} +1 -1
- package/dist/.setup/{turn-router-CaEj5E0i.mjs → turn-router-B62dF4CM.mjs} +1 -1
- package/dist/.setup/{upstream-session-fork-Dqf5_VFU.mjs → upstream-session-fork-5d_7cWPF.mjs} +17 -17
- package/dist/.setup/{usage-BfOJuCR7.mjs → usage-DSIlxJrx.mjs} +3 -3
- package/dist/.setup/{usage-limit-error-B0x1eymI.mjs → usage-limit-error-A0XP58jR.mjs} +1 -1
- package/dist/.setup/{web-search-provider.runtime-BwYKjmzK.mjs → web-search-provider.runtime-B-m9u2M1.mjs} +2 -2
- package/dist/.setup/{workspace-write-sandbox-probe-DJxOXcF3.mjs → workspace-write-sandbox-probe-D5OfU42L.mjs} +2 -2
- package/dist/.source-module-urls/6c41bd629a7a55e13b9ba84558fce30100391f4f229cc77b7c54b07fb0bfe9cf.json +1 -0
- package/dist/api.js +3 -3
- package/dist/catalog-page.worker.js +1 -1
- package/dist/cli-metadata.js +1 -1
- package/dist/client-version-api.js +3 -3
- package/dist/doctor-contract-api.js +14 -5
- package/dist/harness.js +21 -21
- package/dist/index.js +68 -58
- package/dist/media-understanding-provider.js +2 -2
- package/dist/migration-provider-api.js +1 -1
- package/dist/provider-discovery.js +1 -1
- package/openclaw.plugin.json +5 -0
- package/package.json +4 -4
package/dist/.setup/{native-subagent-monitor-D1pYkirc.mjs → native-subagent-monitor-LJd5_D5F.mjs}
RENAMED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as readCodexNativeSubagentRunId, f as readNativeSubagentThreadIds, h as assertHistoryOwnerMatchesRegistration, l as codexNativeSubagentRunId, m as readThreadSpawnSource, p as readThreadParentThreadId, t as matchesNativeAssignmentLifecycle, u as normalizeIdentifier } from "./native-subagent-pending-assignments-CX-LtYDX.mjs";
|
|
2
2
|
import { r as isJsonObject } from "./protocol-CaPAVwe9.mjs";
|
|
3
|
-
import { n as defineCodexBuildState } from "./build-state-
|
|
3
|
+
import { n as defineCodexBuildState } from "./build-state-CpGXWSN4.mjs";
|
|
4
4
|
import { a as readHookOutputEntries, o as readItem, s as readNullableString } from "./event-projector-values-yf4us9Pf.mjs";
|
|
5
5
|
import { n as attachCodexMirrorIdentity } from "./upstream-prompt-provenance-Ccd9MFRJ.mjs";
|
|
6
6
|
import { t as readCodexMirroredSessionHistoryMessages } from "./session-history-7W0cgTXF.mjs";
|
|
7
|
-
import { A as hasCodexAppServerLiveThread, E as claimCodexAppServerLiveThread, V as retainCodexAppServerLiveThread } from "./shared-client-
|
|
8
|
-
import { j as readCodexAppServerWarningMessage } from "./client-
|
|
9
|
-
import { C as unknownItemStatus, _ as itemName, b as matchesCodexSnapshotTurn, f as isMutatingNativeToolItem, g as itemKind, h as isSideEffectingNativeToolItem, l as auditNativeToolName, m as isProjectedNativeToolItem, p as isNonSuccessItemStatus, u as auditNativeToolTerminalStatus, v as itemStatus, y as itemTitle } from "./turn-router-
|
|
10
|
-
import { s as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-
|
|
7
|
+
import { A as hasCodexAppServerLiveThread, E as claimCodexAppServerLiveThread, V as retainCodexAppServerLiveThread } from "./shared-client-BelwlhWf.mjs";
|
|
8
|
+
import { j as readCodexAppServerWarningMessage } from "./client-Bxe8bl-K.mjs";
|
|
9
|
+
import { C as unknownItemStatus, _ as itemName, b as matchesCodexSnapshotTurn, f as isMutatingNativeToolItem, g as itemKind, h as isSideEffectingNativeToolItem, l as auditNativeToolName, m as isProjectedNativeToolItem, p as isNonSuccessItemStatus, u as auditNativeToolTerminalStatus, v as itemStatus, y as itemTitle } from "./turn-router-B62dF4CM.mjs";
|
|
10
|
+
import { s as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-Bj4T3tcX.mjs";
|
|
11
11
|
import { t as projectCodexWebSearchItem } from "./web-search-item-DHVuNSqk.mjs";
|
|
12
|
-
import { n as codexApprovalTimeoutText } from "./plugin-approval-roundtrip-
|
|
12
|
+
import { n as codexApprovalTimeoutText } from "./plugin-approval-roundtrip-DEbTgtVQ.mjs";
|
|
13
13
|
import { t as resolveCodexLocalRuntimeAttribution } from "./local-runtime-attribution-CZz2DJ4q.mjs";
|
|
14
|
-
import { t as __exportAll } from "./session-binding-sidecars-
|
|
14
|
+
import { t as __exportAll } from "./session-binding-sidecars-C9uEGpDX.mjs";
|
|
15
15
|
import { asFiniteNumber, asNonArrayRecord, normalizeOptionalString, readStringField } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
16
16
|
import { randomUUID } from "node:crypto";
|
|
17
17
|
import { asDateTimestampMs } from "openclaw/plugin-sdk/number-runtime";
|
|
@@ -574,7 +574,7 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
574
574
|
this.dependencies = dependencies;
|
|
575
575
|
this.writes = /* @__PURE__ */ new Map();
|
|
576
576
|
this.snapshots = /* @__PURE__ */ new WeakMap();
|
|
577
|
-
this.
|
|
577
|
+
this.acknowledged = /* @__PURE__ */ new WeakSet();
|
|
578
578
|
}
|
|
579
579
|
hasWrites(state) {
|
|
580
580
|
return this.writes.has(state);
|
|
@@ -612,7 +612,7 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
612
612
|
}
|
|
613
613
|
record(state, child) {
|
|
614
614
|
const assignment = this.fact(child);
|
|
615
|
-
if (!assignment || !state.assignmentStore || child.nativeCompletionDelivered || child.subscriptionClosed) return;
|
|
615
|
+
if (!assignment || !state.assignmentStore || child.nativeCompletionDelivered || child.completionDeliveryAbandoned || child.subscriptionClosed) return;
|
|
616
616
|
const snapshot = JSON.stringify(assignment);
|
|
617
617
|
if (this.snapshots.get(child) === snapshot) return;
|
|
618
618
|
this.snapshots.set(child, snapshot);
|
|
@@ -627,12 +627,33 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
627
627
|
}
|
|
628
628
|
settle(state, child) {
|
|
629
629
|
const assignment = this.fact(child);
|
|
630
|
-
if (!assignment || !state.assignmentStore || !child.nativeCompletionDelivered && (!child.subscriptionClosed || child.pendingCompletion)) return;
|
|
630
|
+
if (!assignment || !state.assignmentStore || this.acknowledged.has(child) || !child.nativeCompletionDelivered && (!child.subscriptionClosed || child.pendingCompletion)) return;
|
|
631
631
|
this.enqueue(state, async () => {
|
|
632
632
|
await state.assignmentStore?.consume(assignment, () => this.dependencies.assertCurrent(state));
|
|
633
633
|
});
|
|
634
634
|
}
|
|
635
|
-
|
|
635
|
+
abandon(state, child, assertCurrent) {
|
|
636
|
+
return this.enqueue(state, async () => {
|
|
637
|
+
const assignment = this.fact(child);
|
|
638
|
+
if (!assignment || !state.assignmentStore || !child.pendingCompletion) return;
|
|
639
|
+
if (!await state.assignmentStore.consume(assignment, () => {
|
|
640
|
+
this.dependencies.assertCurrent(state);
|
|
641
|
+
assertCurrent();
|
|
642
|
+
}, { status: child.pendingCompletion.status })) throw new Error("Undeliverable native assignment was not retired.");
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
async settleNestedCompletion(state, child, assertCurrent) {
|
|
646
|
+
const owner = child.historyOwner;
|
|
647
|
+
if (!owner || owner.parentThreadId === child.nativeParentThreadId || !await this.dependencies.isNativeChildThread(child.nativeParentThreadId)) return false;
|
|
648
|
+
await this.acknowledge(state, child, () => {
|
|
649
|
+
assertCurrent();
|
|
650
|
+
assertHistoryOwnerMatchesRegistration(owner, state.historyOwner, owner.parentThreadId, true);
|
|
651
|
+
});
|
|
652
|
+
child.nativeCompletionDelivered = true;
|
|
653
|
+
child.pendingCompletion = void 0;
|
|
654
|
+
return true;
|
|
655
|
+
}
|
|
656
|
+
acknowledge(state, child, assertCurrent) {
|
|
636
657
|
return this.enqueue(state, async () => {
|
|
637
658
|
const assertAdmission = () => {
|
|
638
659
|
this.dependencies.assertCurrent(state);
|
|
@@ -640,9 +661,9 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
640
661
|
};
|
|
641
662
|
assertAdmission();
|
|
642
663
|
const assignment = this.fact(child);
|
|
643
|
-
if (!assignment || !state.assignmentStore || this.
|
|
644
|
-
if (!await state.assignmentStore.consume(assignment, assertAdmission)) throw new Error("
|
|
645
|
-
this.
|
|
664
|
+
if (!assignment || !state.assignmentStore || this.acknowledged.has(child)) return;
|
|
665
|
+
if (!await state.assignmentStore.consume(assignment, assertAdmission)) throw new Error("Native assignment was not acknowledged.");
|
|
666
|
+
this.acknowledged.add(child);
|
|
646
667
|
assertAdmission();
|
|
647
668
|
});
|
|
648
669
|
}
|
|
@@ -658,11 +679,14 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
658
679
|
for (const assignment of assignments) {
|
|
659
680
|
if (!matchesNativeAssignmentLifecycle(assignment.owner, current)) continue;
|
|
660
681
|
const recovery = await this.dependencies.readHistory(assignment);
|
|
661
|
-
await store.
|
|
682
|
+
const pending = await store.read();
|
|
662
683
|
if (!this.dependencies.isCurrent(state) || !custody.isCurrent()) return;
|
|
663
684
|
if (!recovery || recovery.parentThreadId !== assignment.nativeParentThreadId) continue;
|
|
664
|
-
|
|
665
|
-
|
|
685
|
+
const surviving = pending.find((entry) => entry.childThreadId === assignment.childThreadId && entry.nativeParentThreadId === assignment.nativeParentThreadId && matchesNativeAssignmentLifecycle(entry.owner, assignment.owner) && (entry.nativeTurnId === assignment.nativeTurnId && (entry.nativeTurnId !== void 0 || entry.runId === assignment.runId) || recovery.nativeTurnId !== void 0 && entry.nativeTurnId === recovery.nativeTurnId && (assignment.nativeTurnId === void 0 || entry.runId === assignment.runId)));
|
|
686
|
+
if (surviving) {
|
|
687
|
+
await this.dependencies.restore(state, surviving, recovery, custody);
|
|
688
|
+
await this.drain(state);
|
|
689
|
+
}
|
|
666
690
|
}
|
|
667
691
|
} catch (error) {
|
|
668
692
|
embeddedAgentLog.warn("Native pending assignments remain for reconciliation", { error: formatErrorMessage$1(error) });
|
|
@@ -991,7 +1015,18 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
991
1015
|
let deferredToForeground = false;
|
|
992
1016
|
try {
|
|
993
1017
|
if (childState.cancellationRequested && completion.status === "cancelled") return;
|
|
1018
|
+
if (await this.dependencies.settleNestedCompletion(state, childState, () => {
|
|
1019
|
+
if (!this.isCurrent(state, childState) || childState.completionCustody && !childState.completionCustody.isCurrent()) throw new Error("Native completion acknowledgement is no longer current.");
|
|
1020
|
+
})) {
|
|
1021
|
+
this.dependencies.unregisterChild(childState);
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
1024
|
+
if (!this.isCurrent(state, childState)) return;
|
|
994
1025
|
if (!this.prepareDelivery(state, childState)) return;
|
|
1026
|
+
if (childState.completionDeliveryAbandoned) {
|
|
1027
|
+
await this.abandon(state, childState);
|
|
1028
|
+
return;
|
|
1029
|
+
}
|
|
995
1030
|
if (state.owners.size > 0 || !state.completionScope) {
|
|
996
1031
|
deferredToForeground = state.owners.size > 0;
|
|
997
1032
|
return;
|
|
@@ -1021,13 +1056,17 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1021
1056
|
this.prepareDelivery(state, childState);
|
|
1022
1057
|
return;
|
|
1023
1058
|
}
|
|
1024
|
-
if (!this.claim(state, childState)
|
|
1059
|
+
if (!this.claim(state, childState)) {
|
|
1025
1060
|
this.dependencies.unregisterChild(childState);
|
|
1026
1061
|
return;
|
|
1027
1062
|
}
|
|
1063
|
+
if (delivery.recoveryBlocked) {
|
|
1064
|
+
await this.abandon(state, childState);
|
|
1065
|
+
return;
|
|
1066
|
+
}
|
|
1028
1067
|
const recoveryPending = delivery.recoveryPending;
|
|
1029
1068
|
const error = delivery.error ?? (recoveryPending ? "requester recovery owns completion" : "completion delivery did not produce a parent response");
|
|
1030
|
-
this.scheduleRetry(childState, error, !recoveryPending);
|
|
1069
|
+
await this.scheduleRetry(state, childState, error, !recoveryPending);
|
|
1031
1070
|
} catch (error) {
|
|
1032
1071
|
if (!this.isCurrent(state, childState)) return;
|
|
1033
1072
|
if (!this.claim(state, childState)) {
|
|
@@ -1035,7 +1074,7 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1035
1074
|
return;
|
|
1036
1075
|
}
|
|
1037
1076
|
const message = formatErrorMessage$1(error);
|
|
1038
|
-
this.scheduleRetry(childState, message);
|
|
1077
|
+
await this.scheduleRetry(state, childState, message, !childState.completionDeliveryAbandoned);
|
|
1039
1078
|
embeddedAgentLog.warn("Failed to deliver Codex native subagent completion", {
|
|
1040
1079
|
parentThreadId: state.parentThreadId,
|
|
1041
1080
|
childThreadId: completion.childThreadId,
|
|
@@ -1095,22 +1134,41 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1095
1134
|
this.dependencies.releaseClientRetentionIfIdle();
|
|
1096
1135
|
return true;
|
|
1097
1136
|
}
|
|
1098
|
-
|
|
1137
|
+
async abandon(state, child) {
|
|
1138
|
+
child.completionDeliveryAbandoned = true;
|
|
1139
|
+
try {
|
|
1140
|
+
await this.dependencies.abandon(state, child, () => {
|
|
1141
|
+
if (child.nativeCompletionDelivered || !this.isCurrent(state, child) || !this.claim(state, child)) throw new Error("Native completion retirement is no longer current.");
|
|
1142
|
+
});
|
|
1143
|
+
this.dependencies.unregisterChild(child);
|
|
1144
|
+
} catch (error) {
|
|
1145
|
+
if (this.isCurrent(state, child) && child.nativeCompletionDelivered) {
|
|
1146
|
+
this.prepareDelivery(state, child);
|
|
1147
|
+
return;
|
|
1148
|
+
}
|
|
1149
|
+
embeddedAgentLog.warn("Native completion retirement remains pending", {
|
|
1150
|
+
childThreadId: child.childThreadId,
|
|
1151
|
+
error: formatErrorMessage$1(error)
|
|
1152
|
+
});
|
|
1153
|
+
await this.scheduleRetry(state, child, formatErrorMessage$1(error), false);
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
async scheduleRetry(state, childState, error, chargeAttempt = true) {
|
|
1099
1157
|
if (!childState.pendingCompletion || childState.completionDeliveryTimer || this.dependencies.children.get(childState.runId) !== childState) return;
|
|
1100
1158
|
if (chargeAttempt && childState.completionDeliveryAttempt >= this.maxRetries) {
|
|
1101
1159
|
embeddedAgentLog.warn("Native subagent completion retries exhausted", {
|
|
1102
1160
|
childThreadId: childState.childThreadId,
|
|
1103
1161
|
error
|
|
1104
1162
|
});
|
|
1105
|
-
this.
|
|
1163
|
+
await this.abandon(state, childState);
|
|
1106
1164
|
return;
|
|
1107
1165
|
}
|
|
1108
1166
|
const delayMs = delayForAttempt(this.retryDelaysMs, chargeAttempt ? childState.completionDeliveryAttempt++ : childState.completionDeliveryAttempt);
|
|
1109
1167
|
childState.completionDeliveryTimer = setTimeout(() => {
|
|
1110
1168
|
childState.completionDeliveryTimer = void 0;
|
|
1111
1169
|
if (this.dependencies.children.get(childState.runId) !== childState) return;
|
|
1112
|
-
const
|
|
1113
|
-
if (
|
|
1170
|
+
const currentParent = this.dependencies.parents.get(childState.parentThreadId);
|
|
1171
|
+
if (currentParent) this.deliverPending(currentParent, childState);
|
|
1114
1172
|
}, delayMs);
|
|
1115
1173
|
childState.completionDeliveryTimer.unref();
|
|
1116
1174
|
}
|
|
@@ -1118,7 +1176,7 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1118
1176
|
if (childState.completionCustody && !childState.completionCustody.isCurrent()) return false;
|
|
1119
1177
|
const requesterSessionKey = state.requesterSessionKey?.trim();
|
|
1120
1178
|
if (!requesterSessionKey) return true;
|
|
1121
|
-
const key = `${requesterSessionKey}\0${childState.runId}`;
|
|
1179
|
+
const key = childState.deliveryOwnerKey ?? `${requesterSessionKey}\0${childState.nativeTurnId ? codexNativeSubagentRunId(childState.childThreadId, childState.nativeTurnId) : childState.runId}`;
|
|
1122
1180
|
try {
|
|
1123
1181
|
state.assignmentStore?.assertCurrent();
|
|
1124
1182
|
assertHistoryOwnerMatchesRegistration(childState.historyOwner, state.historyOwner, childState.nativeParentThreadId, state.historyOwner !== void 0);
|
|
@@ -1359,6 +1417,11 @@ var CodexNativeSubagentHistoryRecovery = class {
|
|
|
1359
1417
|
includeTurns
|
|
1360
1418
|
}, { timeoutMs: THREAD_READ_TIMEOUT_MS });
|
|
1361
1419
|
}
|
|
1420
|
+
async isNativeChildThread(threadId) {
|
|
1421
|
+
if (this.knownChildren.has(threadId)) return true;
|
|
1422
|
+
const response = await this.requestThreadRead(threadId, false);
|
|
1423
|
+
return response.thread.id === threadId && Boolean(readThreadParentThreadId(response.thread));
|
|
1424
|
+
}
|
|
1362
1425
|
async read(assignment, options) {
|
|
1363
1426
|
const { childThreadId } = assignment;
|
|
1364
1427
|
const { recordedCompletion } = options;
|
|
@@ -2574,6 +2637,7 @@ var CodexNativeSubagentSubmissionOwner = class {
|
|
|
2574
2637
|
if (!this.isObserving(state, custody) || !this.admitTurn(state, custody, turn, historyValidated)) return;
|
|
2575
2638
|
custody.phase = "promoting";
|
|
2576
2639
|
clearTimeout(custody.timer);
|
|
2640
|
+
custody.release();
|
|
2577
2641
|
}
|
|
2578
2642
|
settleChild(state, child) {
|
|
2579
2643
|
for (const custody of this.pending.get(state)?.values() ?? []) {
|
|
@@ -4412,6 +4476,8 @@ var Monitor = class {
|
|
|
4412
4476
|
parents: this.parentStates,
|
|
4413
4477
|
retiredParents: this.retiredParentStates,
|
|
4414
4478
|
unregisterChild: (child) => this.unregisterChild(child),
|
|
4479
|
+
abandon: (state, child, assertCurrent) => this.assignments.abandon(state, child, assertCurrent),
|
|
4480
|
+
settleNestedCompletion: (state, child, assertCurrent) => this.assignments.settleNestedCompletion(state, child, assertCurrent),
|
|
4415
4481
|
releaseClientRetentionIfIdle: () => this.releaseClientRetentionIfIdle()
|
|
4416
4482
|
});
|
|
4417
4483
|
this.turnObservation = new CodexNativeSubagentTurnObservation({
|
|
@@ -4504,6 +4570,7 @@ var Monitor = class {
|
|
|
4504
4570
|
state.assignmentStore?.assertCurrent();
|
|
4505
4571
|
},
|
|
4506
4572
|
isCurrent: (state) => this.isCurrentParent(state),
|
|
4573
|
+
isNativeChildThread: (threadId) => this.historyRecovery.isNativeChildThread(threadId),
|
|
4507
4574
|
readHistory: (assignment) => this.historyRecovery.read({
|
|
4508
4575
|
...assignment,
|
|
4509
4576
|
nativeTurnId: assignment.nativeTurnId
|
|
@@ -4514,7 +4581,7 @@ var Monitor = class {
|
|
|
4514
4581
|
initialAssignment: !readCodexNativeSubagentRunId(assignment.runId)?.turnId
|
|
4515
4582
|
}),
|
|
4516
4583
|
restore: async (state, assignment, recovery, custody) => {
|
|
4517
|
-
const existing = this.childStates.get(assignment.runId);
|
|
4584
|
+
const existing = this.childStates.get(assignment.runId) ?? [...this.childStates.values()].find((child) => assignment.nativeTurnId !== void 0 && child.childThreadId === assignment.childThreadId && child.nativeTurnId === assignment.nativeTurnId && child.nativeParentThreadId === assignment.nativeParentThreadId && child.historyOwner !== void 0 && matchesNativeAssignmentLifecycle(child.historyOwner, assignment.owner));
|
|
4518
4585
|
if (existing) {
|
|
4519
4586
|
const original = this.parentStates.get(existing.parentThreadId);
|
|
4520
4587
|
if (original && original.requesterSessionKey === state.requesterSessionKey && original.historyOwner && state.historyOwner && matchesNativeAssignmentLifecycle(original.historyOwner, state.historyOwner)) original.assignmentStore = state.assignmentStore;
|
|
@@ -4642,15 +4709,33 @@ var Monitor = class {
|
|
|
4642
4709
|
cancelledRequesters: []
|
|
4643
4710
|
}));
|
|
4644
4711
|
const matchesOwner = (owner) => owner.requesterAgentId === params.agentId && owner.requesterSessionKey === params.sessionKey && owner.requesterSessionId === params.sessionId && owner.requesterLifecycleRevision === params.lifecycleRevision && params.acceptsRequest(owner.requestCustody);
|
|
4645
|
-
const
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4712
|
+
const selectedOwners = /* @__PURE__ */ new Map();
|
|
4713
|
+
const stableOwners = /* @__PURE__ */ new Set();
|
|
4714
|
+
for (const state of this.parentStates.values()) {
|
|
4715
|
+
const owner = [...state.owners.values()].find(matchesOwner);
|
|
4716
|
+
if (owner) {
|
|
4717
|
+
selectedOwners.set(state, owner);
|
|
4718
|
+
stableOwners.add(owner);
|
|
4719
|
+
continue;
|
|
4720
|
+
}
|
|
4721
|
+
const pendingOwner = [...state.pendingRegistrations ?? []].find(matchesOwner);
|
|
4722
|
+
if (pendingOwner) selectedOwners.set(state, pendingOwner);
|
|
4723
|
+
}
|
|
4724
|
+
for (const child of this.childStates.values()) {
|
|
4725
|
+
const owner = child.modelExecution?.owner ?? child.directOwner;
|
|
4726
|
+
const state = this.parentStates.get(child.parentThreadId);
|
|
4727
|
+
if (state && owner && matchesOwner(owner) && params.acceptsRequest(child.requestCustody)) {
|
|
4728
|
+
selectedOwners.set(state, owner);
|
|
4729
|
+
stableOwners.add(owner);
|
|
4730
|
+
}
|
|
4649
4731
|
}
|
|
4732
|
+
const hasSelectedOwner = (state) => {
|
|
4733
|
+
const owner = selectedOwners.get(state);
|
|
4734
|
+
return Boolean(owner && matchesOwner(owner) && (stableOwners.has(owner) || state.pendingRegistrations?.has(owner) || owner.descendantsCancelled));
|
|
4735
|
+
};
|
|
4650
4736
|
const matches = (state) => {
|
|
4651
|
-
if (state.agentId || state.historyOwner) return state.agentId === params.agentId && state.requesterSessionKey === params.sessionKey && state.historyOwner?.sessionId === params.sessionId && state.historyOwner?.lifecycleRevision === params.lifecycleRevision;
|
|
4652
|
-
|
|
4653
|
-
return Boolean(state.preparing && owner && matchesOwner(owner) && (state.pendingRegistrations?.has(owner) || owner.descendantsCancelled));
|
|
4737
|
+
if (state.agentId || state.historyOwner) return state.agentId === params.agentId && state.requesterSessionKey === params.sessionKey && state.historyOwner?.sessionId === params.sessionId && state.historyOwner?.lifecycleRevision === params.lifecycleRevision || hasSelectedOwner(state);
|
|
4738
|
+
return state.preparing === true && hasSelectedOwner(state);
|
|
4654
4739
|
};
|
|
4655
4740
|
if (!matches(parent)) throw new Error("Codex descendant cancellation requester generation changed");
|
|
4656
4741
|
const states = [...this.parentStates.values()].filter(matches);
|
|
@@ -4676,7 +4761,15 @@ var Monitor = class {
|
|
|
4676
4761
|
const deadline = performance.now() + CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS;
|
|
4677
4762
|
const registrations = states.flatMap((state) => [...state.pendingRegistrations ?? []].filter(matchesOwner));
|
|
4678
4763
|
const registrationResults = Promise.allSettled(registrations.map((owner) => waitForNativeCancellationWork(this.client, owner.registrationSettled ?? Promise.reject(/* @__PURE__ */ new Error("Codex pending registration has no settlement owner")), deadline)));
|
|
4679
|
-
const
|
|
4764
|
+
const selectedOwnerChildren = /* @__PURE__ */ new Set();
|
|
4765
|
+
const matchesGeneration = (child) => {
|
|
4766
|
+
const owner = child.modelExecution?.owner ?? child.directOwner;
|
|
4767
|
+
const matched = child.historyOwner?.sessionId === params.sessionId && child.historyOwner?.lifecycleRevision === params.lifecycleRevision || Boolean(owner && matchesOwner(owner));
|
|
4768
|
+
if (owner && matched && matchesOwner(owner)) selectedOwnerChildren.add(child);
|
|
4769
|
+
return matched;
|
|
4770
|
+
};
|
|
4771
|
+
const matchesChild = (child) => matchesGeneration(child) || selectedOwnerChildren.has(child);
|
|
4772
|
+
const selected = [...this.childStates.values()].filter((child) => matchesGeneration(child) && states.some((state) => state.parentThreadId === child.parentThreadId) && params.acceptsRequest(child.requestCustody));
|
|
4680
4773
|
const owners = new Set(states.flatMap((state) => [...state.owners.values(), ...state.pendingRegistrations ?? []]));
|
|
4681
4774
|
for (const known of this.knownChildren.values()) if (states.includes(known.parent)) for (const pending of known.pendingTurns) {
|
|
4682
4775
|
if (pending.admittedOwner) owners.add(pending.admittedOwner);
|
|
@@ -4700,7 +4793,7 @@ var Monitor = class {
|
|
|
4700
4793
|
const requestCustody = child.requestCustody;
|
|
4701
4794
|
const assertChild = () => {
|
|
4702
4795
|
assertCurrent();
|
|
4703
|
-
if (this.childStates.get(child.runId) !== child || this.currentChild(child.childThreadId) !== child || turnId !== void 0 && child.nativeTurnId !== turnId || child.requesterTurnRunId !== requesterTurnRunId || child.requestCustody !== requestCustody || !params.acceptsRequest(requestCustody) || child
|
|
4796
|
+
if (this.childStates.get(child.runId) !== child || this.currentChild(child.childThreadId) !== child || turnId !== void 0 && child.nativeTurnId !== turnId || child.requesterTurnRunId !== requesterTurnRunId || child.requestCustody !== requestCustody || !params.acceptsRequest(requestCustody) || !matchesChild(child) || child.completionCustody && !child.completionCustody.isCurrent()) throw new Error("Codex descendant assignment changed before cancellation");
|
|
4704
4797
|
};
|
|
4705
4798
|
assertChild();
|
|
4706
4799
|
if (!child.terminal) {
|
|
@@ -4740,7 +4833,7 @@ var Monitor = class {
|
|
|
4740
4833
|
assertChild();
|
|
4741
4834
|
await this.submissions.settleCancelled(state, child, assertChild);
|
|
4742
4835
|
assertChild();
|
|
4743
|
-
await this.assignments.
|
|
4836
|
+
await this.assignments.acknowledge(state, child, assertChild);
|
|
4744
4837
|
assertChild();
|
|
4745
4838
|
this.unregisterChild(child);
|
|
4746
4839
|
}
|
|
@@ -4750,7 +4843,7 @@ var Monitor = class {
|
|
|
4750
4843
|
await this.submissions.drain(state);
|
|
4751
4844
|
assertCurrent();
|
|
4752
4845
|
}
|
|
4753
|
-
if (child.requesterTurnRunId !== requesterTurnRunId || child.requestCustody !== requestCustody || child
|
|
4846
|
+
if (child.requesterTurnRunId !== requesterTurnRunId || child.requestCustody !== requestCustody || !matchesChild(child)) throw new Error("Codex descendant requester changed during settlement");
|
|
4754
4847
|
return {
|
|
4755
4848
|
killed: cancelled ? 1 : 0,
|
|
4756
4849
|
cancelledRequesters: cancelled && requesterTurnRunId ? [{
|
|
@@ -4824,6 +4917,9 @@ var Monitor = class {
|
|
|
4824
4917
|
});
|
|
4825
4918
|
if (!capture) return;
|
|
4826
4919
|
try {
|
|
4920
|
+
const known = this.knownChildren.get(request.threadId);
|
|
4921
|
+
const child = known ? this.admitFollowupChild(known) : void 0;
|
|
4922
|
+
if (child?.nativeTurnId === request.turnId && child.settledWithoutCompletion) this.resumeChild(child);
|
|
4827
4923
|
await this.persistModelAssignment(request, capture);
|
|
4828
4924
|
request.signal?.throwIfAborted();
|
|
4829
4925
|
capture.assertCurrent();
|
|
@@ -5001,6 +5097,7 @@ var Monitor = class {
|
|
|
5001
5097
|
childState.settledWithoutCompletion = false;
|
|
5002
5098
|
childState.fallbackCompletion = void 0;
|
|
5003
5099
|
this.releaseClientRetention ??= this.retainClient?.();
|
|
5100
|
+
this.retainParentThreadForChild(childState.parentThreadId);
|
|
5004
5101
|
}
|
|
5005
5102
|
settleResumableChild(childState) {
|
|
5006
5103
|
if (childState.terminal) return;
|
|
@@ -5011,6 +5108,7 @@ var Monitor = class {
|
|
|
5011
5108
|
releaseNativeDirectChild(childState);
|
|
5012
5109
|
releaseNativeModelExecution(childState);
|
|
5013
5110
|
this.recovery.clearRecoveryTimers(childState);
|
|
5111
|
+
this.releaseParentThreadIfChildrenSettled(childState.parentThreadId);
|
|
5014
5112
|
this.releaseClientRetentionIfIdle();
|
|
5015
5113
|
}
|
|
5016
5114
|
handleChildTurnCompletion(notification, childState) {
|
|
@@ -5198,6 +5296,7 @@ var Monitor = class {
|
|
|
5198
5296
|
this.recovery.markTerminalThread(childState.childThreadId, state.parentThreadId);
|
|
5199
5297
|
releaseNativeDirectChild(childState);
|
|
5200
5298
|
this.recovery.clearRecoveryTimers(childState);
|
|
5299
|
+
this.releaseParentThreadIfChildrenSettled(state.parentThreadId);
|
|
5201
5300
|
this.completionDelivery.applyReceipts(state, childState.deliveryReceipts.record(childState.runId, this.knownChildren.get(childState.childThreadId)?.agentPaths ?? [childState.childThreadId], acceptedCompletion.result));
|
|
5202
5301
|
await this.completionDelivery.deliverPending(state, childState);
|
|
5203
5302
|
}
|
|
@@ -5263,10 +5362,7 @@ var Monitor = class {
|
|
|
5263
5362
|
if (!childState) {
|
|
5264
5363
|
this.updateChildThreadOwnership("claim", childThreadId, this.claimChildThread);
|
|
5265
5364
|
this.releaseClientRetention ??= this.retainClient?.();
|
|
5266
|
-
|
|
5267
|
-
const releaseParentThread = this.retainParentThread?.(parentThreadId);
|
|
5268
|
-
if (releaseParentThread) this.parentThreadRetentions.set(parentThreadId, releaseParentThread);
|
|
5269
|
-
}
|
|
5365
|
+
this.retainParentThreadForChild(parentThreadId);
|
|
5270
5366
|
childState = {
|
|
5271
5367
|
runId,
|
|
5272
5368
|
requestCustody: options.directOwner?.requestCustody,
|
|
@@ -5501,6 +5597,7 @@ var Monitor = class {
|
|
|
5501
5597
|
}
|
|
5502
5598
|
if (!transitioned) claimOwner.onDirectChildAccepted?.();
|
|
5503
5599
|
}
|
|
5600
|
+
this.observeActiveChild(child);
|
|
5504
5601
|
this.admissionCustody.bindEventSink(child);
|
|
5505
5602
|
return child;
|
|
5506
5603
|
}
|
|
@@ -5552,11 +5649,7 @@ var Monitor = class {
|
|
|
5552
5649
|
this.recovery.clearRecoveryTimers(childState);
|
|
5553
5650
|
this.completionDelivery.release(childState);
|
|
5554
5651
|
if (this.childStates.get(childState.runId) === childState) this.childStates.delete(childState.runId);
|
|
5555
|
-
|
|
5556
|
-
const releaseParentThread = this.parentThreadRetentions.get(childState.parentThreadId);
|
|
5557
|
-
this.parentThreadRetentions.delete(childState.parentThreadId);
|
|
5558
|
-
releaseParentThread?.();
|
|
5559
|
-
}
|
|
5652
|
+
this.releaseParentThreadIfChildrenSettled(childState.parentThreadId);
|
|
5560
5653
|
this.releaseClientRetentionIfIdle();
|
|
5561
5654
|
const state = this.parentStates.get(childState.parentThreadId);
|
|
5562
5655
|
if (state) {
|
|
@@ -5614,6 +5707,17 @@ var Monitor = class {
|
|
|
5614
5707
|
for (const known of this.knownChildren.values()) if (known.parent === state && this.currentChild(known.assignment.childThreadId)) return true;
|
|
5615
5708
|
return false;
|
|
5616
5709
|
}
|
|
5710
|
+
retainParentThreadForChild(parentThreadId) {
|
|
5711
|
+
if (this.parentThreadRetentions.has(parentThreadId)) return;
|
|
5712
|
+
const releaseParentThread = this.retainParentThread?.(parentThreadId);
|
|
5713
|
+
if (releaseParentThread) this.parentThreadRetentions.set(parentThreadId, releaseParentThread);
|
|
5714
|
+
}
|
|
5715
|
+
releaseParentThreadIfChildrenSettled(parentThreadId) {
|
|
5716
|
+
for (const childState of this.childStates.values()) if (childState.parentThreadId === parentThreadId && !childState.terminal && !childState.settledWithoutCompletion) return;
|
|
5717
|
+
const releaseParentThread = this.parentThreadRetentions.get(parentThreadId);
|
|
5718
|
+
this.parentThreadRetentions.delete(parentThreadId);
|
|
5719
|
+
releaseParentThread?.();
|
|
5720
|
+
}
|
|
5617
5721
|
hasChildrenForParent(parentThreadId) {
|
|
5618
5722
|
for (const childState of this.childStates.values()) if (childState.parentThreadId === parentThreadId) return true;
|
|
5619
5723
|
return false;
|
|
@@ -151,7 +151,7 @@ const assignmentSchema = z.object({
|
|
|
151
151
|
const inventorySchema = z.object({
|
|
152
152
|
version: z.literal(1),
|
|
153
153
|
assignments: z.array(assignmentSchema)
|
|
154
|
-
}).strict()
|
|
154
|
+
}).strict();
|
|
155
155
|
/** Native parent rotation is not physical requester or connection adoption. */
|
|
156
156
|
function matchesNativeAssignmentLifecycle(saved, current) {
|
|
157
157
|
return saved.sessionId === current.sessionId && saved.lifecycleRevision === current.lifecycleRevision && saved.connectionFingerprint === current.connectionFingerprint;
|
|
@@ -159,29 +159,67 @@ function matchesNativeAssignmentLifecycle(saved, current) {
|
|
|
159
159
|
function readNativePendingAssignments(value) {
|
|
160
160
|
if (value === void 0) return;
|
|
161
161
|
const parsed = inventorySchema.safeParse(value);
|
|
162
|
-
if (!parsed.success) throw new Error("Invalid Codex native pending assignment metadata.");
|
|
162
|
+
if (!parsed.success || new Set(parsed.data.assignments.map((entry) => entry.runId)).size !== parsed.data.assignments.length) throw new Error("Invalid Codex native pending assignment metadata.");
|
|
163
163
|
return parsed.data;
|
|
164
164
|
}
|
|
165
|
+
function mergeNativeAssignmentMetadata(current, incoming) {
|
|
166
|
+
const genericRunId = codexNativeSubagentRunId(current.childThreadId);
|
|
167
|
+
if (current.runId !== incoming.runId && current.runId !== genericRunId && incoming.runId !== genericRunId || current.submission && incoming.submission && !isDeepStrictEqual(current.submission, incoming.submission) || current.recordedCompletion && incoming.recordedCompletion && !isDeepStrictEqual(current.recordedCompletion, incoming.recordedCompletion)) throw new Error("Conflicting Codex native pending assignment metadata.");
|
|
168
|
+
if (current.runId === genericRunId) current.runId = incoming.runId;
|
|
169
|
+
if (incoming.submission) current.submission = incoming.submission;
|
|
170
|
+
if (incoming.recordedCompletion) current.recordedCompletion = incoming.recordedCompletion;
|
|
171
|
+
}
|
|
172
|
+
/** Doctor and binding writes merge compatible facts for one obligation, never distinct turns. */
|
|
173
|
+
function normalizeNativePendingAssignments(value) {
|
|
174
|
+
if (value === void 0) return;
|
|
175
|
+
return {
|
|
176
|
+
version: 1,
|
|
177
|
+
assignments: mergeNativePendingAssignments(inventorySchema.parse(value).assignments)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function mergeNativePendingAssignments(entries) {
|
|
181
|
+
const assignments = [];
|
|
182
|
+
for (const entry of entries) {
|
|
183
|
+
const existing = assignments.find((saved) => saved.childThreadId === entry.childThreadId && saved.nativeTurnId === entry.nativeTurnId && (entry.nativeTurnId !== void 0 || saved.runId === entry.runId));
|
|
184
|
+
if (!existing) {
|
|
185
|
+
assignments.push(entry);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (existing.nativeParentThreadId !== entry.nativeParentThreadId || !isDeepStrictEqual(existing.owner, entry.owner)) throw new Error("Conflicting Codex native pending assignment metadata.");
|
|
189
|
+
mergeNativeAssignmentMetadata(existing, entry);
|
|
190
|
+
}
|
|
191
|
+
if (new Set(assignments.map((entry) => entry.runId)).size !== assignments.length) throw new Error("Conflicting Codex native pending assignment metadata.");
|
|
192
|
+
return assignments;
|
|
193
|
+
}
|
|
165
194
|
function mutateNativePendingAssignments(params) {
|
|
166
|
-
const current =
|
|
167
|
-
|
|
195
|
+
const current = normalizeNativePendingAssignments(params.current);
|
|
196
|
+
let assignment = assignmentSchema.parse(params.assignment);
|
|
168
197
|
const owner = codexNativeSubagentHistoryOwnerSchema.parse(params.owner);
|
|
169
198
|
if (!matchesNativeAssignmentLifecycle(assignment.owner, owner)) return { applied: false };
|
|
170
199
|
const assignments = current?.assignments ?? [];
|
|
171
|
-
const existing = assignments.find((entry) => entry.runId === assignment.runId);
|
|
172
|
-
if (
|
|
200
|
+
const existing = assignments.find((entry) => entry.runId === assignment.runId) ?? assignments.find((entry) => assignment.nativeTurnId !== void 0 && entry.childThreadId === assignment.childThreadId && entry.nativeTurnId === assignment.nativeTurnId);
|
|
201
|
+
if (params.consume && !existing) return {
|
|
202
|
+
applied: false,
|
|
203
|
+
absent: true
|
|
204
|
+
};
|
|
205
|
+
if (existing && (!isDeepStrictEqual(existing.owner, assignment.owner) || existing.nativeParentThreadId !== assignment.nativeParentThreadId || existing.childThreadId !== assignment.childThreadId) || params.consume && existing?.nativeTurnId !== assignment.nativeTurnId) return { applied: false };
|
|
173
206
|
const remaining = assignments.filter((entry) => entry !== existing);
|
|
174
207
|
if (!params.consume) {
|
|
175
|
-
if (existing
|
|
208
|
+
if (existing && existing.nativeTurnId === assignment.nativeTurnId) {
|
|
209
|
+
mergeNativeAssignmentMetadata(existing, assignment);
|
|
210
|
+
assignment = existing;
|
|
211
|
+
} else if (existing?.recordedCompletion && !assignment.recordedCompletion) assignment.recordedCompletion = existing.recordedCompletion;
|
|
176
212
|
remaining.push(assignment);
|
|
177
213
|
}
|
|
214
|
+
const next = !params.consume && existing && existing.nativeTurnId !== assignment.nativeTurnId ? mergeNativePendingAssignments(remaining) : remaining;
|
|
178
215
|
return {
|
|
179
216
|
applied: true,
|
|
180
|
-
next:
|
|
217
|
+
next: next.length ? {
|
|
181
218
|
version: 1,
|
|
182
|
-
assignments:
|
|
183
|
-
} : void 0
|
|
219
|
+
assignments: next
|
|
220
|
+
} : void 0,
|
|
221
|
+
consumed: params.consume ? existing : void 0
|
|
184
222
|
};
|
|
185
223
|
}
|
|
186
224
|
//#endregion
|
|
187
|
-
export {
|
|
225
|
+
export { createCodexNativeSubagentHistoryOwner as _, adoptCodexNativeSubagentSubmissions as a, readCodexNativeSubagentSubmissions as c, readCodexNativeSubagentRunId as d, readNativeSubagentThreadIds as f, codexNativeSubagentHistoryConnectionFingerprint as g, assertHistoryOwnerMatchesRegistration as h, readNativePendingAssignments as i, codexNativeSubagentRunId as l, readThreadSpawnSource as m, mutateNativePendingAssignments as n, matchesCodexNativeSubagentSubmissionOwner as o, readThreadParentThreadId as p, normalizeNativePendingAssignments as r, mutateCodexNativeSubagentSubmissions as s, matchesNativeAssignmentLifecycle as t, normalizeIdentifier as u, readCodexNativeSubagentHistoryOwner as v };
|
package/dist/.setup/{native-task-assignments-YJopbaVO.mjs → native-task-assignments-CMd-JiUS.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as readCodexNativeSubagentRunId, g as codexNativeSubagentHistoryConnectionFingerprint, i as readNativePendingAssignments, v as readCodexNativeSubagentHistoryOwner } from "./native-subagent-pending-assignments-CX-LtYDX.mjs";
|
|
2
2
|
import { i as CODEX_APP_SERVER_BINDING_NAMESPACE, r as CODEX_APP_SERVER_BINDING_MAX_ENTRIES } from "./session-binding-meta-Lkm5Lpf4.mjs";
|
|
3
3
|
import { isDeepStrictEqual } from "node:util";
|
|
4
4
|
import { z } from "zod";
|
|
@@ -56,7 +56,7 @@ async function inspect(params) {
|
|
|
56
56
|
if (extractErrorCode(error) === "ENOENT") return [];
|
|
57
57
|
throw error;
|
|
58
58
|
}
|
|
59
|
-
const { bindingStoreKey, readStoredCodexAppServerBinding } = await import("./session-binding-record-
|
|
59
|
+
const { bindingStoreKey, readStoredCodexAppServerBinding } = await import("./session-binding-record-BpWF2Sus.mjs").then((n) => n._);
|
|
60
60
|
const { executeSqliteQuerySync, getNodeSqliteKysely, openNodeSqliteDatabase, prepareSqliteReadOnlyLocation, tableExists } = await import("openclaw/plugin-sdk/sqlite-runtime");
|
|
61
61
|
const snapshot = await prepareSqliteReadOnlyLocation(source, { preserveSourceArtifacts: true });
|
|
62
62
|
try {
|
|
@@ -126,7 +126,7 @@ function prepareAssignment(task, stored, params, { getSessionEntry, resolveStore
|
|
|
126
126
|
}
|
|
127
127
|
async function settleHistoricalDelivery(task, key, observedBinding, params, sessionStore) {
|
|
128
128
|
const { executeSqliteQuerySync, getNodeSqliteKysely, openNodeSqliteDatabase, resolveExistingSqliteFileUri, runSqliteImmediateTransactionSync } = await import("openclaw/plugin-sdk/sqlite-runtime");
|
|
129
|
-
const { readStoredCodexAppServerBinding } = await import("./session-binding-record-
|
|
129
|
+
const { readStoredCodexAppServerBinding } = await import("./session-binding-record-BpWF2Sus.mjs").then((n) => n._);
|
|
130
130
|
const db = openNodeSqliteDatabase(resolveExistingSqliteFileUri(databasePath(params)));
|
|
131
131
|
try {
|
|
132
132
|
const sql = getNodeSqliteKysely(db);
|
|
@@ -170,7 +170,7 @@ const codexNativeTaskAssignmentMigration = {
|
|
|
170
170
|
changes: [],
|
|
171
171
|
warnings
|
|
172
172
|
};
|
|
173
|
-
const { bindingStoreKey, readStoredCodexAppServerBinding } = await import("./session-binding-record-
|
|
173
|
+
const { bindingStoreKey, readStoredCodexAppServerBinding } = await import("./session-binding-record-BpWF2Sus.mjs").then((n) => n._);
|
|
174
174
|
const { getSessionEntry, resolveStorePath } = await import("openclaw/plugin-sdk/session-store-runtime");
|
|
175
175
|
const sessionStore = {
|
|
176
176
|
getSessionEntry,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as unwrapNodeInvokePayload, x as readBoundedOptionalString } from "./session-catalog-parsing-
|
|
1
|
+
import { A as unwrapNodeInvokePayload, x as readBoundedOptionalString } from "./session-catalog-parsing-ktmfo9oa.mjs";
|
|
2
2
|
import { r as resolveCodexAppServerUserHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
|
|
3
3
|
import { o as formatCodexDisplayText } from "./command-formatters-B_7-QZ1c.mjs";
|
|
4
4
|
import { t as codexCatalogHomeId } from "./session-catalog-home-id-vlih0B_g.mjs";
|
|
@@ -197,7 +197,7 @@ async function resumeCodexCliSessionOnNode(params) {
|
|
|
197
197
|
let catalogHomeId;
|
|
198
198
|
if (params.sessionKey) {
|
|
199
199
|
const storePath = params.storePath ?? params.runtime.agent.session.resolveStorePath(void 0, { agentId: params.agentId });
|
|
200
|
-
const { adoptionSessionKeyRest, CODEX_NODE_SESSION_KEY_PREFIX, readNodeSessionMarker } = await import("./session-catalog-node-adoption-
|
|
200
|
+
const { adoptionSessionKeyRest, CODEX_NODE_SESSION_KEY_PREFIX, readNodeSessionMarker } = await import("./session-catalog-node-adoption-C_41f1dK.mjs");
|
|
201
201
|
const entry = await params.runtime.agent.session.getSessionEntryAsync({
|
|
202
202
|
agentId: params.agentId,
|
|
203
203
|
storePath,
|
package/dist/.setup/{node-exec-server.runtime-CP7RC1Nd.mjs → node-exec-server.runtime-DvRSh5Oi.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as isManagedCodexDesktopCommand, f as resolveManagedCodexNativeCommand, u as resolveManagedCodexAppServerStartOptions } from "./managed-binary-
|
|
2
|
-
import { o as closeCodexAppServerTransportAndWait, t as createStdioTransport } from "./transport-stdio-
|
|
1
|
+
import { a as isManagedCodexDesktopCommand, f as resolveManagedCodexNativeCommand, u as resolveManagedCodexAppServerStartOptions } from "./managed-binary-BwzkwiGo.mjs";
|
|
2
|
+
import { o as closeCodexAppServerTransportAndWait, t as createStdioTransport } from "./transport-stdio-BVeWgcK6.mjs";
|
|
3
3
|
import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
4
|
import { stripVTControlCharacters } from "node:util";
|
|
5
5
|
import { killProcessTree } from "openclaw/plugin-sdk/process-runtime";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as isOnlyMigrationKind } from "./scope-DOC1Xjc8.mjs";
|
|
2
|
-
import { u as CODEX_PLUGINS_MARKETPLACE_NAME } from "./plugin-inventory-
|
|
3
|
-
import "./config-
|
|
2
|
+
import { u as CODEX_PLUGINS_MARKETPLACE_NAME } from "./plugin-inventory-BVP15PmN.mjs";
|
|
3
|
+
import "./config-BZYTxljj.mjs";
|
|
4
4
|
import { t as readCodexExperimentalFeature } from "./experimental-features-uGnVDtp-.mjs";
|
|
5
|
-
import { i as hasCodexSource, n as defaultCodexHome, o as readJsonObject, r as discoverCodexSource, s as sanitizeName, t as codexPluginMigrationSubscriptionWarning } from "./source-
|
|
5
|
+
import { i as hasCodexSource, n as defaultCodexHome, o as readJsonObject, r as discoverCodexSource, s as sanitizeName, t as codexPluginMigrationSubscriptionWarning } from "./source-DQN8P65G.mjs";
|
|
6
6
|
import { asBoolean, asOptionalRecord, isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
8
|
import { runCommandBuffered } from "openclaw/plugin-sdk/process-runtime";
|
|
@@ -98,8 +98,8 @@ async function readCodexCliCredentialsAsync(options) {
|
|
|
98
98
|
options.signal?.throwIfAborted();
|
|
99
99
|
if (!options.allowKeychainPrompt) return;
|
|
100
100
|
const home = await fs.realpath(options.codexHome).catch(() => path.resolve(options.codexHome));
|
|
101
|
-
const { CodexAppServerClient } = await import("./client-
|
|
102
|
-
const { resolveManagedCodexPackageEntrypoint, resolveManagedCodexNativeCommand } = await import("./managed-binary-
|
|
101
|
+
const { CodexAppServerClient } = await import("./client-Bxe8bl-K.mjs").then((n) => n.n);
|
|
102
|
+
const { resolveManagedCodexPackageEntrypoint, resolveManagedCodexNativeCommand } = await import("./managed-binary-BwzkwiGo.mjs").then((n) => n.o);
|
|
103
103
|
const launcher = resolveManagedCodexPackageEntrypoint(path.dirname(fileURLToPath(import.meta.url)));
|
|
104
104
|
const command = launcher ? resolveManagedCodexNativeCommand(launcher) : void 0;
|
|
105
105
|
if (!command) return;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as CodexAppServerRpcError } from "./rpc-error-DemqqaxE.mjs";
|
|
2
|
-
import { i as listCodexPluginMetadata, n as findCodexMarketplacePluginSummary, o as pluginReadParams, r as isOpenAiCuratedMarketplaceName, t as createCodexAppInventoryRequest, u as CODEX_PLUGINS_MARKETPLACE_NAME } from "./plugin-inventory-
|
|
3
|
-
import "./config-
|
|
2
|
+
import { i as listCodexPluginMetadata, n as findCodexMarketplacePluginSummary, o as pluginReadParams, r as isOpenAiCuratedMarketplaceName, t as createCodexAppInventoryRequest, u as CODEX_PLUGINS_MARKETPLACE_NAME } from "./plugin-inventory-BVP15PmN.mjs";
|
|
3
|
+
import "./config-BZYTxljj.mjs";
|
|
4
4
|
import { coerceErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
5
5
|
//#region extensions/codex/src/app-server/plugin-activation.ts
|
|
6
6
|
/** Activates legacy curated plugins without granting install authority to other marketplaces. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pt as resolveCodexGatewayTimeoutWithGraceMs } from "./shared-client-BelwlhWf.mjs";
|
|
2
2
|
import { truncateUtf16Safe } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
3
3
|
import { isApprovalNotFoundError, toErrorObject } from "openclaw/plugin-sdk/error-runtime";
|
|
4
4
|
import { racePromiseWithAbortSignal } from "openclaw/plugin-sdk/time-runtime";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as findCodexAppById } from "./plugin-app-cache-key-DRb-niJc.mjs";
|
|
2
|
-
import "./config-
|
|
2
|
+
import "./config-BZYTxljj.mjs";
|
|
3
3
|
import { embeddedAgentLog } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
4
4
|
//#region extensions/codex/src/app-server/config-contracts.ts
|
|
5
5
|
const CODEX_PLUGINS_MARKETPLACE_NAME = "openai-curated";
|