@openclaw/codex 2026.10.10-beta.2 → 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-BVO-lpvn.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-tJl5mopa.mjs → apply-DvEtGGBB.mjs} +8 -8
- package/dist/.setup/{attempt-client-cleanup-DMJWXGxM.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-BW1YeaIk.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-BQkmyyjB.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-CjLCC0wm.mjs → build-state-CpGXWSN4.mjs} +1 -1
- package/dist/.setup/{client--P8jwXvA.mjs → client-Bxe8bl-K.mjs} +8 -8
- package/dist/.setup/{client-catalog-response-CsDxVVOZ.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-DqaVBeR3.mjs → command-dispatch-BD9-WK7I.mjs} +1 -1
- package/dist/.setup/{command-handlers-i6mEjvfo.mjs → command-handlers-g046iNsp.mjs} +22 -22
- package/dist/.setup/{command-rpc-B65jEc0r.mjs → command-rpc-CwpCTOrX.mjs} +11 -11
- package/dist/.setup/{compact-AO2H4RJe.mjs → compact-B-qCn3BG.mjs} +13 -13
- package/dist/.setup/{computer-use-YUnu0JVx.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-CfnUR-IM.mjs → conversation-binding-CXGGbblk.mjs} +38 -29
- 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-DOub3CB5.mjs → dynamic-tool-build-BzTaCmlT.mjs} +3 -3
- package/dist/.setup/{dynamic-tools-Us5mvq_N.mjs → dynamic-tools-BALvjDwR.mjs} +8 -8
- package/dist/.setup/{effective-mcp-catalog-DfUUoeeM.mjs → effective-mcp-catalog-CQbEkKv_.mjs} +6 -6
- package/dist/.setup/{ephemeral-turn-B2z0RIeF.mjs → ephemeral-turn-CNm9tN72.mjs} +2 -2
- package/dist/.setup/{inference-context-HRw3PDwn.mjs → inference-context-DYpvCEF3.mjs} +1 -1
- package/dist/.setup/{inference-proxy-CiLbHMLf.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-CybgD6uU.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-zUgpDLWR.mjs → mcp-app-session-preparation-CFbTbxia.mjs} +9 -9
- package/dist/.setup/{model-catalog-CWY3wo0B.mjs → model-catalog-BNSZklNP.mjs} +7 -7
- package/dist/.setup/{models-CmOBxsKF.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-CocOW9YS.mjs → native-hook-relay-COcu2b4l.mjs} +4 -4
- package/dist/.setup/{native-mcp-app-DrQeLxXj.mjs → native-mcp-app-CFyl3R2g.mjs} +5 -5
- package/dist/.setup/{native-skill-isolation-DL4-PQa4.mjs → native-skill-isolation-B8cWhSFy.mjs} +3 -3
- package/dist/.setup/{native-subagent-monitor-C3CIIaZG.mjs → native-subagent-monitor-LJd5_D5F.mjs} +153 -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-Bqj6VQvQ.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-CGEiG7hG.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-C_1fMsyD.mjs → provider-C1GuStnr.mjs} +4 -4
- package/dist/.setup/{provider-capabilities-C7pYYpvh.mjs → provider-capabilities-DMfkFwZi.mjs} +1 -1
- package/dist/.setup/{request-C6U8q2uz.mjs → request-DTgD_jsY.mjs} +5 -5
- package/dist/.setup/{run-attempt-BhuXanLv.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-DCN1FcBZ.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-CEi6SuLQ.mjs → session-catalog-events-BmhPYZGw.mjs} +4 -4
- package/dist/.setup/{session-catalog-index-qt4UWBua.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-BqBYi6kV.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-CNyhjZze.mjs → session-catalog-projection-C_w9yRCz.mjs} +4 -4
- package/dist/.setup/{session-catalog-source-z_mNyQdX.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-RZStisKb.mjs → session-retirement-BHMs5nFf.mjs} +6 -6
- package/dist/.setup/{settled-turn-finalizer-gioXygEX.mjs → settled-turn-finalizer-C3OEC7ED.mjs} +5 -5
- package/dist/.setup/{shared-client-CkyTrNB8.mjs → shared-client-BelwlhWf.mjs} +84 -33
- package/dist/.setup/{side-question-DHPWKgO3.mjs → side-question-Bt2vXr-h.mjs} +21 -21
- package/dist/.setup/{source-63MLSmLJ.mjs → source-DQN8P65G.mjs} +4 -4
- package/dist/.setup/{thread-lifecycle-run-zCXYFW8W.mjs → thread-lifecycle-run-aBfXzIGf.mjs} +79 -38
- package/dist/.setup/{thread-ownership-Bmk5a2Gu.mjs → thread-ownership-DxW6b6fR.mjs} +4 -4
- package/dist/.setup/{thread-policy-DYtvZ5Ay.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-vBShG3-o.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-BGj67FMK.mjs → turn-router-B62dF4CM.mjs} +1 -1
- package/dist/.setup/{upstream-session-fork-CWKjpdtW.mjs → upstream-session-fork-5d_7cWPF.mjs} +17 -17
- package/dist/.setup/{usage-AhrLFxZP.mjs → usage-DSIlxJrx.mjs} +3 -3
- package/dist/.setup/{usage-limit-error-BdNbGJC3.mjs → usage-limit-error-A0XP58jR.mjs} +1 -1
- package/dist/.setup/{web-search-provider.runtime-Yk6lnJBG.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-C3CIIaZG.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,
|
|
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
|
}
|
|
@@ -652,15 +673,20 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
652
673
|
if (!store || !current || !owner.completionCustody?.isCurrent()) return;
|
|
653
674
|
const custody = owner.completionCustody.retain();
|
|
654
675
|
try {
|
|
676
|
+
await this.drain(state);
|
|
655
677
|
const assignments = await store.read();
|
|
656
678
|
if (!this.dependencies.isCurrent(state) || !custody.isCurrent()) return;
|
|
657
679
|
for (const assignment of assignments) {
|
|
658
680
|
if (!matchesNativeAssignmentLifecycle(assignment.owner, current)) continue;
|
|
659
681
|
const recovery = await this.dependencies.readHistory(assignment);
|
|
660
|
-
await store.
|
|
682
|
+
const pending = await store.read();
|
|
661
683
|
if (!this.dependencies.isCurrent(state) || !custody.isCurrent()) return;
|
|
662
684
|
if (!recovery || recovery.parentThreadId !== assignment.nativeParentThreadId) continue;
|
|
663
|
-
|
|
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
|
+
}
|
|
664
690
|
}
|
|
665
691
|
} catch (error) {
|
|
666
692
|
embeddedAgentLog.warn("Native pending assignments remain for reconciliation", { error: formatErrorMessage$1(error) });
|
|
@@ -989,7 +1015,18 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
989
1015
|
let deferredToForeground = false;
|
|
990
1016
|
try {
|
|
991
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;
|
|
992
1025
|
if (!this.prepareDelivery(state, childState)) return;
|
|
1026
|
+
if (childState.completionDeliveryAbandoned) {
|
|
1027
|
+
await this.abandon(state, childState);
|
|
1028
|
+
return;
|
|
1029
|
+
}
|
|
993
1030
|
if (state.owners.size > 0 || !state.completionScope) {
|
|
994
1031
|
deferredToForeground = state.owners.size > 0;
|
|
995
1032
|
return;
|
|
@@ -1019,13 +1056,17 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1019
1056
|
this.prepareDelivery(state, childState);
|
|
1020
1057
|
return;
|
|
1021
1058
|
}
|
|
1022
|
-
if (!this.claim(state, childState)
|
|
1059
|
+
if (!this.claim(state, childState)) {
|
|
1023
1060
|
this.dependencies.unregisterChild(childState);
|
|
1024
1061
|
return;
|
|
1025
1062
|
}
|
|
1063
|
+
if (delivery.recoveryBlocked) {
|
|
1064
|
+
await this.abandon(state, childState);
|
|
1065
|
+
return;
|
|
1066
|
+
}
|
|
1026
1067
|
const recoveryPending = delivery.recoveryPending;
|
|
1027
1068
|
const error = delivery.error ?? (recoveryPending ? "requester recovery owns completion" : "completion delivery did not produce a parent response");
|
|
1028
|
-
this.scheduleRetry(childState, error, !recoveryPending);
|
|
1069
|
+
await this.scheduleRetry(state, childState, error, !recoveryPending);
|
|
1029
1070
|
} catch (error) {
|
|
1030
1071
|
if (!this.isCurrent(state, childState)) return;
|
|
1031
1072
|
if (!this.claim(state, childState)) {
|
|
@@ -1033,7 +1074,7 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1033
1074
|
return;
|
|
1034
1075
|
}
|
|
1035
1076
|
const message = formatErrorMessage$1(error);
|
|
1036
|
-
this.scheduleRetry(childState, message);
|
|
1077
|
+
await this.scheduleRetry(state, childState, message, !childState.completionDeliveryAbandoned);
|
|
1037
1078
|
embeddedAgentLog.warn("Failed to deliver Codex native subagent completion", {
|
|
1038
1079
|
parentThreadId: state.parentThreadId,
|
|
1039
1080
|
childThreadId: completion.childThreadId,
|
|
@@ -1093,22 +1134,41 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1093
1134
|
this.dependencies.releaseClientRetentionIfIdle();
|
|
1094
1135
|
return true;
|
|
1095
1136
|
}
|
|
1096
|
-
|
|
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) {
|
|
1097
1157
|
if (!childState.pendingCompletion || childState.completionDeliveryTimer || this.dependencies.children.get(childState.runId) !== childState) return;
|
|
1098
1158
|
if (chargeAttempt && childState.completionDeliveryAttempt >= this.maxRetries) {
|
|
1099
1159
|
embeddedAgentLog.warn("Native subagent completion retries exhausted", {
|
|
1100
1160
|
childThreadId: childState.childThreadId,
|
|
1101
1161
|
error
|
|
1102
1162
|
});
|
|
1103
|
-
this.
|
|
1163
|
+
await this.abandon(state, childState);
|
|
1104
1164
|
return;
|
|
1105
1165
|
}
|
|
1106
1166
|
const delayMs = delayForAttempt(this.retryDelaysMs, chargeAttempt ? childState.completionDeliveryAttempt++ : childState.completionDeliveryAttempt);
|
|
1107
1167
|
childState.completionDeliveryTimer = setTimeout(() => {
|
|
1108
1168
|
childState.completionDeliveryTimer = void 0;
|
|
1109
1169
|
if (this.dependencies.children.get(childState.runId) !== childState) return;
|
|
1110
|
-
const
|
|
1111
|
-
if (
|
|
1170
|
+
const currentParent = this.dependencies.parents.get(childState.parentThreadId);
|
|
1171
|
+
if (currentParent) this.deliverPending(currentParent, childState);
|
|
1112
1172
|
}, delayMs);
|
|
1113
1173
|
childState.completionDeliveryTimer.unref();
|
|
1114
1174
|
}
|
|
@@ -1116,7 +1176,7 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1116
1176
|
if (childState.completionCustody && !childState.completionCustody.isCurrent()) return false;
|
|
1117
1177
|
const requesterSessionKey = state.requesterSessionKey?.trim();
|
|
1118
1178
|
if (!requesterSessionKey) return true;
|
|
1119
|
-
const key = `${requesterSessionKey}\0${childState.runId}`;
|
|
1179
|
+
const key = childState.deliveryOwnerKey ?? `${requesterSessionKey}\0${childState.nativeTurnId ? codexNativeSubagentRunId(childState.childThreadId, childState.nativeTurnId) : childState.runId}`;
|
|
1120
1180
|
try {
|
|
1121
1181
|
state.assignmentStore?.assertCurrent();
|
|
1122
1182
|
assertHistoryOwnerMatchesRegistration(childState.historyOwner, state.historyOwner, childState.nativeParentThreadId, state.historyOwner !== void 0);
|
|
@@ -1357,6 +1417,11 @@ var CodexNativeSubagentHistoryRecovery = class {
|
|
|
1357
1417
|
includeTurns
|
|
1358
1418
|
}, { timeoutMs: THREAD_READ_TIMEOUT_MS });
|
|
1359
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
|
+
}
|
|
1360
1425
|
async read(assignment, options) {
|
|
1361
1426
|
const { childThreadId } = assignment;
|
|
1362
1427
|
const { recordedCompletion } = options;
|
|
@@ -2065,7 +2130,7 @@ async function registerNativeSubagentParent(input, dependencies) {
|
|
|
2065
2130
|
dependencies.prune(registeredState);
|
|
2066
2131
|
registrationSettled.resolve();
|
|
2067
2132
|
}
|
|
2068
|
-
const ready = dependencies.submissions.restore(state, owner).then(() => dependencies.assignments.restore(state, owner));
|
|
2133
|
+
const ready = dependencies.submissions.restore(state, owner).then(() => dependencies.submissions.drain(registeredState)).then(() => dependencies.assignments.restore(state, owner)).then(() => dependencies.assignments.drain(registeredState));
|
|
2069
2134
|
let registered = true;
|
|
2070
2135
|
let settlement;
|
|
2071
2136
|
return {
|
|
@@ -2572,6 +2637,7 @@ var CodexNativeSubagentSubmissionOwner = class {
|
|
|
2572
2637
|
if (!this.isObserving(state, custody) || !this.admitTurn(state, custody, turn, historyValidated)) return;
|
|
2573
2638
|
custody.phase = "promoting";
|
|
2574
2639
|
clearTimeout(custody.timer);
|
|
2640
|
+
custody.release();
|
|
2575
2641
|
}
|
|
2576
2642
|
settleChild(state, child) {
|
|
2577
2643
|
for (const custody of this.pending.get(state)?.values() ?? []) {
|
|
@@ -4410,6 +4476,8 @@ var Monitor = class {
|
|
|
4410
4476
|
parents: this.parentStates,
|
|
4411
4477
|
retiredParents: this.retiredParentStates,
|
|
4412
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),
|
|
4413
4481
|
releaseClientRetentionIfIdle: () => this.releaseClientRetentionIfIdle()
|
|
4414
4482
|
});
|
|
4415
4483
|
this.turnObservation = new CodexNativeSubagentTurnObservation({
|
|
@@ -4502,6 +4570,7 @@ var Monitor = class {
|
|
|
4502
4570
|
state.assignmentStore?.assertCurrent();
|
|
4503
4571
|
},
|
|
4504
4572
|
isCurrent: (state) => this.isCurrentParent(state),
|
|
4573
|
+
isNativeChildThread: (threadId) => this.historyRecovery.isNativeChildThread(threadId),
|
|
4505
4574
|
readHistory: (assignment) => this.historyRecovery.read({
|
|
4506
4575
|
...assignment,
|
|
4507
4576
|
nativeTurnId: assignment.nativeTurnId
|
|
@@ -4512,7 +4581,7 @@ var Monitor = class {
|
|
|
4512
4581
|
initialAssignment: !readCodexNativeSubagentRunId(assignment.runId)?.turnId
|
|
4513
4582
|
}),
|
|
4514
4583
|
restore: async (state, assignment, recovery, custody) => {
|
|
4515
|
-
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));
|
|
4516
4585
|
if (existing) {
|
|
4517
4586
|
const original = this.parentStates.get(existing.parentThreadId);
|
|
4518
4587
|
if (original && original.requesterSessionKey === state.requesterSessionKey && original.historyOwner && state.historyOwner && matchesNativeAssignmentLifecycle(original.historyOwner, state.historyOwner)) original.assignmentStore = state.assignmentStore;
|
|
@@ -4640,15 +4709,33 @@ var Monitor = class {
|
|
|
4640
4709
|
cancelledRequesters: []
|
|
4641
4710
|
}));
|
|
4642
4711
|
const matchesOwner = (owner) => owner.requesterAgentId === params.agentId && owner.requesterSessionKey === params.sessionKey && owner.requesterSessionId === params.sessionId && owner.requesterLifecycleRevision === params.lifecycleRevision && params.acceptsRequest(owner.requestCustody);
|
|
4643
|
-
const
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
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
|
+
}
|
|
4647
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
|
+
};
|
|
4648
4736
|
const matches = (state) => {
|
|
4649
|
-
if (state.agentId || state.historyOwner) return state.agentId === params.agentId && state.requesterSessionKey === params.sessionKey && state.historyOwner?.sessionId === params.sessionId && state.historyOwner?.lifecycleRevision === params.lifecycleRevision;
|
|
4650
|
-
|
|
4651
|
-
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);
|
|
4652
4739
|
};
|
|
4653
4740
|
if (!matches(parent)) throw new Error("Codex descendant cancellation requester generation changed");
|
|
4654
4741
|
const states = [...this.parentStates.values()].filter(matches);
|
|
@@ -4674,7 +4761,15 @@ var Monitor = class {
|
|
|
4674
4761
|
const deadline = performance.now() + CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS;
|
|
4675
4762
|
const registrations = states.flatMap((state) => [...state.pendingRegistrations ?? []].filter(matchesOwner));
|
|
4676
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)));
|
|
4677
|
-
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));
|
|
4678
4773
|
const owners = new Set(states.flatMap((state) => [...state.owners.values(), ...state.pendingRegistrations ?? []]));
|
|
4679
4774
|
for (const known of this.knownChildren.values()) if (states.includes(known.parent)) for (const pending of known.pendingTurns) {
|
|
4680
4775
|
if (pending.admittedOwner) owners.add(pending.admittedOwner);
|
|
@@ -4698,7 +4793,7 @@ var Monitor = class {
|
|
|
4698
4793
|
const requestCustody = child.requestCustody;
|
|
4699
4794
|
const assertChild = () => {
|
|
4700
4795
|
assertCurrent();
|
|
4701
|
-
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");
|
|
4702
4797
|
};
|
|
4703
4798
|
assertChild();
|
|
4704
4799
|
if (!child.terminal) {
|
|
@@ -4738,7 +4833,7 @@ var Monitor = class {
|
|
|
4738
4833
|
assertChild();
|
|
4739
4834
|
await this.submissions.settleCancelled(state, child, assertChild);
|
|
4740
4835
|
assertChild();
|
|
4741
|
-
await this.assignments.
|
|
4836
|
+
await this.assignments.acknowledge(state, child, assertChild);
|
|
4742
4837
|
assertChild();
|
|
4743
4838
|
this.unregisterChild(child);
|
|
4744
4839
|
}
|
|
@@ -4748,7 +4843,7 @@ var Monitor = class {
|
|
|
4748
4843
|
await this.submissions.drain(state);
|
|
4749
4844
|
assertCurrent();
|
|
4750
4845
|
}
|
|
4751
|
-
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");
|
|
4752
4847
|
return {
|
|
4753
4848
|
killed: cancelled ? 1 : 0,
|
|
4754
4849
|
cancelledRequesters: cancelled && requesterTurnRunId ? [{
|
|
@@ -4822,6 +4917,9 @@ var Monitor = class {
|
|
|
4822
4917
|
});
|
|
4823
4918
|
if (!capture) return;
|
|
4824
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);
|
|
4825
4923
|
await this.persistModelAssignment(request, capture);
|
|
4826
4924
|
request.signal?.throwIfAborted();
|
|
4827
4925
|
capture.assertCurrent();
|
|
@@ -4999,6 +5097,7 @@ var Monitor = class {
|
|
|
4999
5097
|
childState.settledWithoutCompletion = false;
|
|
5000
5098
|
childState.fallbackCompletion = void 0;
|
|
5001
5099
|
this.releaseClientRetention ??= this.retainClient?.();
|
|
5100
|
+
this.retainParentThreadForChild(childState.parentThreadId);
|
|
5002
5101
|
}
|
|
5003
5102
|
settleResumableChild(childState) {
|
|
5004
5103
|
if (childState.terminal) return;
|
|
@@ -5009,6 +5108,7 @@ var Monitor = class {
|
|
|
5009
5108
|
releaseNativeDirectChild(childState);
|
|
5010
5109
|
releaseNativeModelExecution(childState);
|
|
5011
5110
|
this.recovery.clearRecoveryTimers(childState);
|
|
5111
|
+
this.releaseParentThreadIfChildrenSettled(childState.parentThreadId);
|
|
5012
5112
|
this.releaseClientRetentionIfIdle();
|
|
5013
5113
|
}
|
|
5014
5114
|
handleChildTurnCompletion(notification, childState) {
|
|
@@ -5196,6 +5296,7 @@ var Monitor = class {
|
|
|
5196
5296
|
this.recovery.markTerminalThread(childState.childThreadId, state.parentThreadId);
|
|
5197
5297
|
releaseNativeDirectChild(childState);
|
|
5198
5298
|
this.recovery.clearRecoveryTimers(childState);
|
|
5299
|
+
this.releaseParentThreadIfChildrenSettled(state.parentThreadId);
|
|
5199
5300
|
this.completionDelivery.applyReceipts(state, childState.deliveryReceipts.record(childState.runId, this.knownChildren.get(childState.childThreadId)?.agentPaths ?? [childState.childThreadId], acceptedCompletion.result));
|
|
5200
5301
|
await this.completionDelivery.deliverPending(state, childState);
|
|
5201
5302
|
}
|
|
@@ -5261,10 +5362,7 @@ var Monitor = class {
|
|
|
5261
5362
|
if (!childState) {
|
|
5262
5363
|
this.updateChildThreadOwnership("claim", childThreadId, this.claimChildThread);
|
|
5263
5364
|
this.releaseClientRetention ??= this.retainClient?.();
|
|
5264
|
-
|
|
5265
|
-
const releaseParentThread = this.retainParentThread?.(parentThreadId);
|
|
5266
|
-
if (releaseParentThread) this.parentThreadRetentions.set(parentThreadId, releaseParentThread);
|
|
5267
|
-
}
|
|
5365
|
+
this.retainParentThreadForChild(parentThreadId);
|
|
5268
5366
|
childState = {
|
|
5269
5367
|
runId,
|
|
5270
5368
|
requestCustody: options.directOwner?.requestCustody,
|
|
@@ -5499,6 +5597,7 @@ var Monitor = class {
|
|
|
5499
5597
|
}
|
|
5500
5598
|
if (!transitioned) claimOwner.onDirectChildAccepted?.();
|
|
5501
5599
|
}
|
|
5600
|
+
this.observeActiveChild(child);
|
|
5502
5601
|
this.admissionCustody.bindEventSink(child);
|
|
5503
5602
|
return child;
|
|
5504
5603
|
}
|
|
@@ -5550,11 +5649,7 @@ var Monitor = class {
|
|
|
5550
5649
|
this.recovery.clearRecoveryTimers(childState);
|
|
5551
5650
|
this.completionDelivery.release(childState);
|
|
5552
5651
|
if (this.childStates.get(childState.runId) === childState) this.childStates.delete(childState.runId);
|
|
5553
|
-
|
|
5554
|
-
const releaseParentThread = this.parentThreadRetentions.get(childState.parentThreadId);
|
|
5555
|
-
this.parentThreadRetentions.delete(childState.parentThreadId);
|
|
5556
|
-
releaseParentThread?.();
|
|
5557
|
-
}
|
|
5652
|
+
this.releaseParentThreadIfChildrenSettled(childState.parentThreadId);
|
|
5558
5653
|
this.releaseClientRetentionIfIdle();
|
|
5559
5654
|
const state = this.parentStates.get(childState.parentThreadId);
|
|
5560
5655
|
if (state) {
|
|
@@ -5612,6 +5707,17 @@ var Monitor = class {
|
|
|
5612
5707
|
for (const known of this.knownChildren.values()) if (known.parent === state && this.currentChild(known.assignment.childThreadId)) return true;
|
|
5613
5708
|
return false;
|
|
5614
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
|
+
}
|
|
5615
5721
|
hasChildrenForParent(parentThreadId) {
|
|
5616
5722
|
for (const childState of this.childStates.values()) if (childState.parentThreadId === parentThreadId) return true;
|
|
5617
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";
|