@openclaw/codex 2026.10.7 → 2026.10.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/.setup/{account-usage-runtime-gzHf_Qtb.mjs → account-usage-runtime-lUj2JqSj.mjs} +3 -3
- package/dist/.setup/{app-server-policy-V8zuN8q_.mjs → app-server-policy-CF-JwGUD.mjs} +1 -1
- package/dist/.setup/{apply-BaBl0hiG.mjs → apply-DjTVE_db.mjs} +8 -8
- package/dist/.setup/{attempt-client-cleanup-jWVRH043.mjs → attempt-client-cleanup-BmPBqnW3.mjs} +5 -5
- package/dist/.setup/{attempt-workspace-context-BkA0W8Jy.mjs → attempt-workspace-context-EAeScFrg.mjs} +1 -1
- package/dist/.setup/{auth-binding-BFTkrP_b.mjs → auth-binding-D1TJwzWf.mjs} +1 -1
- package/dist/.setup/{auth-cache-key-DrieYJUQ.mjs → auth-cache-key-8VTsPn2f.mjs} +3 -3
- package/dist/.setup/{binding-connection-C0t9TBX_.mjs → binding-connection-BIo1-hoT.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-Wdm5G_bw.mjs → binding-connection.runtime-C5yDsKBQ.mjs} +1 -1
- package/dist/.setup/{bounded-turn-s9yVsxaM.mjs → bounded-turn-DByEneJg.mjs} +11 -11
- package/dist/.setup/{bounded-turn-isolation-CIQJykuM.mjs → bounded-turn-isolation-BRNgfoRl.mjs} +2 -2
- package/dist/.setup/{build-state-B5mKL-in.mjs → build-state-vxQdf_74.mjs} +1 -1
- package/dist/.setup/{client-BM97zH3z.mjs → client-BTWv2cJe.mjs} +8 -8
- package/dist/.setup/{client-catalog-response-DhB266B_.mjs → client-catalog-response-CEZTmNz3.mjs} +1 -1
- package/dist/.setup/{command-dispatch-DsaWfzET.mjs → command-dispatch-rxpyy4f6.mjs} +1 -1
- package/dist/.setup/{command-handlers-zgDE_J40.mjs → command-handlers-D6utyBA8.mjs} +22 -22
- package/dist/.setup/{command-rpc-CAG1xrqm.mjs → command-rpc-CloxIlVK.mjs} +11 -11
- package/dist/.setup/{compact-BZK-e5zD.mjs → compact-CIJFn4Bi.mjs} +13 -13
- package/dist/.setup/{computer-use-CZhx4nNO.mjs → computer-use-vLGHqSOu.mjs} +7 -7
- package/dist/.setup/{config-LQemoqTL.mjs → config-d0gOFYEk.mjs} +2 -2
- package/dist/.setup/{config-runtime-DGB1-VbB.mjs → config-runtime-BUH-IDVE.mjs} +1 -1
- package/dist/.setup/{conversation-binding-qGuQR4jw.mjs → conversation-binding-BUw0IM5Z.mjs} +15 -15
- package/dist/.setup/{conversation-binding-data-GRGSgAro.mjs → conversation-binding-data-BqzGWkPW.mjs} +1 -1
- package/dist/.setup/{conversation-control-BtPxevoK.mjs → conversation-control-D5qVEey9.mjs} +3 -3
- package/dist/.setup/{doctor-start-options-C28ek2hD.mjs → doctor-start-options-DyLrwtq-.mjs} +3 -3
- package/dist/.setup/{dynamic-tool-build-Dp4v52Kl.mjs → dynamic-tool-build-OWTT0wP-.mjs} +3 -3
- package/dist/.setup/{dynamic-tools-C1Egdhrx.mjs → dynamic-tools-CygReZGj.mjs} +8 -8
- package/dist/.setup/{effective-mcp-catalog-BNwgItdW.mjs → effective-mcp-catalog-B_4Dtkdg.mjs} +6 -6
- package/dist/.setup/{ephemeral-turn-DeppK8zz.mjs → ephemeral-turn-B1Na_xCj.mjs} +2 -2
- package/dist/.setup/{inference-proxy-DSnaS-uS.mjs → inference-proxy-BZgN5W8m.mjs} +3 -3
- package/dist/.setup/{isolated-completion-BUS9Mqfm.mjs → isolated-completion-DGCmR0Q8.mjs} +5 -5
- package/dist/.setup/{managed-binary-DwC9wxch.mjs → managed-binary-Boj8_lWV.mjs} +1 -1
- package/dist/.setup/{mcp-app-session-preparation-D9F1O5si.mjs → mcp-app-session-preparation-DFvoViz9.mjs} +8 -8
- package/dist/.setup/{model-catalog-BBg4thof.mjs → model-catalog-CCr0L7T4.mjs} +7 -7
- package/dist/.setup/{models-B65GHU4g.mjs → models-CPdqFOZS.mjs} +3 -3
- package/dist/.setup/native-assignment-repair-BjS4uyQr.mjs +162 -0
- package/dist/.setup/{native-auth-CveRfTpz.mjs → native-auth-TAGxZP-r.mjs} +3 -3
- package/dist/.setup/{native-hook-relay-Ctyky2Qt.mjs → native-hook-relay-VHeLdZXU.mjs} +4 -4
- package/dist/.setup/{native-mcp-app-DprMGBqj.mjs → native-mcp-app-ly1JuStw.mjs} +5 -5
- package/dist/.setup/{native-skill-isolation-C4XYLm33.mjs → native-skill-isolation--6M-3BWV.mjs} +3 -3
- package/dist/.setup/{native-subagent-monitor-CJaIve3h.mjs → native-subagent-monitor-CuNglHrq.mjs} +161 -53
- package/dist/.setup/{native-subagent-pending-assignments-DmVhedNs.mjs → native-subagent-pending-assignments-BAOzwy85.mjs} +49 -11
- package/dist/.setup/{native-task-assignments-DYL9uxNe.mjs → native-task-assignments-Dap5NqiR.mjs} +4 -4
- package/dist/.setup/{node-cli-sessions-BxVYZNuY.mjs → node-cli-sessions-BQNAFnCa.mjs} +2 -2
- package/dist/.setup/{node-exec-server.runtime-8RehgPdQ.mjs → node-exec-server.runtime-B-4ogz9C.mjs} +2 -2
- package/dist/.setup/{plan-GqWF4XGA.mjs → plan-CqI4m0CC.mjs} +5 -5
- package/dist/.setup/{plugin-activation-BgfNFH2L.mjs → plugin-activation-Dbq2m2gh.mjs} +2 -2
- package/dist/.setup/{plugin-approval-roundtrip-x7UI_uqk.mjs → plugin-approval-roundtrip-DIE4DZ9S.mjs} +1 -1
- package/dist/.setup/{plugin-inventory-OhiCoyPH.mjs → plugin-inventory-CZLnMaxf.mjs} +1 -1
- package/dist/.setup/{project-doc-thread-config-D_sWbxFR.mjs → project-doc-thread-config-BYFXSVGk.mjs} +3 -3
- package/dist/.setup/{provider-Bi9QCsg1.mjs → provider-CBlKf65x.mjs} +4 -4
- package/dist/.setup/{provider-capabilities-BCZeV7xZ.mjs → provider-capabilities-BIyUe_cz.mjs} +10 -3
- package/dist/.setup/{request-XC1RG34l.mjs → request-6bus8ebp.mjs} +5 -5
- package/dist/.setup/{run-attempt-8U2CrqjW.mjs → run-attempt-BcePYT3A.mjs} +130 -59
- package/dist/.setup/{runtime-artifact-CCPLKFGR.mjs → runtime-artifact-Ch7fCcgJ.mjs} +3 -3
- package/dist/.setup/{runtime-artifact-connection-dFoSOKy7.mjs → runtime-artifact-connection-C3ootnwd.mjs} +2 -2
- package/dist/.setup/{sandbox-guard-Cf9XMRrg.mjs → sandbox-guard-CwOc36_1.mjs} +1 -1
- package/dist/.setup/{session-binding-BDnNz-Co.mjs → session-binding-_RE7vtVN.mjs} +38 -12
- package/dist/.setup/{session-binding-record-C2kDBZhx.mjs → session-binding-record-O62ZRFhy.mjs} +2 -2
- package/dist/.setup/{session-binding-sidecars-DijNZb31.mjs → session-binding-sidecars-CAHe3enw.mjs} +1 -1
- package/dist/.setup/{session-catalog-adoption-Cl6fHxS5.mjs → session-catalog-adoption-DuChFASf.mjs} +5 -5
- package/dist/.setup/{session-catalog-archive-CUU7jEkO.mjs → session-catalog-archive-Bs5cP3zm.mjs} +5 -5
- package/dist/.setup/{session-catalog-events-CpEyDv0D.mjs → session-catalog-events-C8i0HBz5.mjs} +4 -4
- package/dist/.setup/{session-catalog-index-order-B30rjUEJ.mjs → session-catalog-index-order-CTSrDiE1.mjs} +1 -1
- package/dist/.setup/{session-catalog-index-DpYCf1-8.mjs → session-catalog-index-zqaZhwr2.mjs} +8 -8
- package/dist/.setup/{session-catalog-limits-Daqt3JLk.mjs → session-catalog-limits-9Ay62KQ0.mjs} +1 -1
- package/dist/.setup/{session-catalog-list-request-SJyGz02j.mjs → session-catalog-list-request-uKKvUIoN.mjs} +3 -3
- package/dist/.setup/{session-catalog-native-projection-BYV0ICja.mjs → session-catalog-native-projection-C6KOqnIb.mjs} +4 -4
- package/dist/.setup/{session-catalog-node-adoption-D11N0CMr.mjs → session-catalog-node-adoption-BjYvYtAd.mjs} +2 -2
- package/dist/.setup/{session-catalog-node-continue-Ct62GeL1.mjs → session-catalog-node-continue-BEI9D3ev.mjs} +5 -5
- package/dist/.setup/{session-catalog-node-lookup-DQVe6vhs.mjs → session-catalog-node-lookup-CBomNvUN.mjs} +2 -2
- package/dist/.setup/{session-catalog-parsing-B4OyhylL.mjs → session-catalog-parsing-DmZmgRou.mjs} +1 -1
- package/dist/.setup/{session-catalog-projection-B0IyXrHt.mjs → session-catalog-projection-DD5m0grG.mjs} +4 -4
- package/dist/.setup/{session-catalog-source-CfIBVrbT.mjs → session-catalog-source-0x1LVwV-.mjs} +1 -1
- package/dist/.setup/{session-cli-BoJSZfGd.mjs → session-cli-B1f7NqXo.mjs} +1 -1
- package/dist/.setup/{session-history-import-DgwRu2eD.mjs → session-history-import-BhOzqhyI.mjs} +4 -4
- package/dist/.setup/{session-history.worker-DJQfek5p.mjs → session-history.worker-D2v5yRcB.mjs} +5 -3
- package/dist/.setup/{session-initialization-BjVtsTzi.mjs → session-initialization-Bwe0Bikj.mjs} +1 -1
- package/dist/.setup/{session-retirement-CKIS7jFv.mjs → session-retirement-BIFmgIgn.mjs} +6 -6
- package/dist/.setup/{settled-turn-finalizer-CnIWbqN7.mjs → settled-turn-finalizer-9WZ-Hnwo.mjs} +5 -5
- package/dist/.setup/{shared-client-AdQX0Tdq.mjs → shared-client-Bo9MCCKj.mjs} +15 -13
- package/dist/.setup/{side-question-ZVehuPZn.mjs → side-question-GmfBHNHK.mjs} +17 -17
- package/dist/.setup/{source-BszpKEvi.mjs → source-C4Al9cJx.mjs} +4 -4
- package/dist/.setup/{thread-lifecycle-run-DezS4UNT.mjs → thread-lifecycle-run-avZbRAjm.mjs} +40 -19
- package/dist/.setup/{thread-ownership-OXzPB_RV.mjs → thread-ownership-C5Hpc-Q1.mjs} +4 -4
- package/dist/.setup/{thread-policy-Dp4CQjdL.mjs → thread-policy-BFLbIpIt.mjs} +3 -3
- package/dist/.setup/{thread-requests-DjyDmCo4.mjs → thread-requests-pX9_RXpU.mjs} +2 -2
- package/dist/.setup/{thread-resume-8YKfRoX6.mjs → thread-resume-LBLXiIEh.mjs} +4 -4
- package/dist/.setup/{transcript-mirror-DVEzdOs0.mjs → transcript-mirror-CPdcVWTn.mjs} +1 -1
- package/dist/.setup/{transport-stdio-lgeKKHyw.mjs → transport-stdio-BsXQmXll.mjs} +1 -1
- package/dist/.setup/{transport-websocket-CEBjEtFP.mjs → transport-websocket-B5mq2Iq2.mjs} +1 -1
- package/dist/.setup/{turn-router-DnfbVPvu.mjs → turn-router-Ba0-h2NE.mjs} +1 -1
- package/dist/.setup/{upstream-session-fork-BhADVCrb.mjs → upstream-session-fork-C34T_h_K.mjs} +17 -17
- package/dist/.setup/{usage-BoTUkAoJ.mjs → usage-BHTnwsjV.mjs} +3 -3
- package/dist/.setup/{usage-limit-error-EoQ7Vl2A.mjs → usage-limit-error-YNy7uINJ.mjs} +1 -1
- package/dist/.setup/{web-search-provider.runtime-Cc6vN-2C.mjs → web-search-provider.runtime-BOqY-zot.mjs} +2 -2
- package/dist/.setup/{workspace-write-sandbox-probe-DvfWTvuR.mjs → workspace-write-sandbox-probe-DB6Y3XLX.mjs} +2 -2
- package/dist/.source-module-urls/a8ffe2b9525179f031f130700992add0f356b5fe3e562c8e70b2801696da5134.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/doctor-contract-api.js +14 -5
- package/dist/harness.js +20 -20
- 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/dist/session-history-worker-runtime.js +4 -2
- package/dist/session-history.worker.js +1 -1
- package/openclaw.plugin.json +5 -0
- package/package.json +4 -4
package/dist/.setup/{native-subagent-monitor-CJaIve3h.mjs → native-subagent-monitor-CuNglHrq.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-BAOzwy85.mjs";
|
|
2
2
|
import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
|
|
3
|
-
import { n as defineCodexBuildState } from "./build-state-
|
|
3
|
+
import { n as defineCodexBuildState } from "./build-state-vxQdf_74.mjs";
|
|
4
4
|
import { a as readHookOutputEntries, o as readItem, s as readNullableString } from "./event-projector-values-CLvG1Hil.mjs";
|
|
5
5
|
import { n as attachCodexMirrorIdentity } from "./upstream-prompt-provenance-Ccd9MFRJ.mjs";
|
|
6
6
|
import { t as readCodexMirroredSessionHistoryMessages } from "./session-history-BO6i_pfk.mjs";
|
|
7
|
-
import { J as retainCodexAppServerLiveThread, P as claimCodexAppServerLiveThread, R as hasCodexAppServerLiveThread, U as isCodexAppServerLiveThreadProtected } from "./shared-client-
|
|
8
|
-
import { M 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 } from "./attempt-client-cleanup-
|
|
7
|
+
import { J as retainCodexAppServerLiveThread, P as claimCodexAppServerLiveThread, R as hasCodexAppServerLiveThread, U as isCodexAppServerLiveThreadProtected } from "./shared-client-Bo9MCCKj.mjs";
|
|
8
|
+
import { M as readCodexAppServerWarningMessage } from "./client-BTWv2cJe.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-Ba0-h2NE.mjs";
|
|
10
|
+
import { s as interruptCodexTurnAndWaitBestEffort } from "./attempt-client-cleanup-BmPBqnW3.mjs";
|
|
11
11
|
import { t as projectCodexWebSearchItem } from "./web-search-item-CvokaZOo.mjs";
|
|
12
|
-
import { n as codexApprovalTimeoutText } from "./plugin-approval-roundtrip-
|
|
12
|
+
import { n as codexApprovalTimeoutText } from "./plugin-approval-roundtrip-DIE4DZ9S.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-CAHe3enw.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";
|
|
@@ -563,6 +563,7 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
563
563
|
this.dependencies = dependencies;
|
|
564
564
|
this.writes = /* @__PURE__ */ new Map();
|
|
565
565
|
this.snapshots = /* @__PURE__ */ new WeakMap();
|
|
566
|
+
this.acknowledged = /* @__PURE__ */ new WeakSet();
|
|
566
567
|
}
|
|
567
568
|
hasWrites(state) {
|
|
568
569
|
return this.writes.has(state);
|
|
@@ -600,7 +601,7 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
600
601
|
}
|
|
601
602
|
record(state, child) {
|
|
602
603
|
const assignment = this.fact(child);
|
|
603
|
-
if (!assignment || !state.assignmentStore || child.nativeCompletionDelivered || child.subscriptionClosed) return;
|
|
604
|
+
if (!assignment || !state.assignmentStore || child.nativeCompletionDelivered || child.completionDeliveryAbandoned || child.subscriptionClosed) return;
|
|
604
605
|
const snapshot = JSON.stringify(assignment);
|
|
605
606
|
if (this.snapshots.get(child) === snapshot) return;
|
|
606
607
|
this.snapshots.set(child, snapshot);
|
|
@@ -615,11 +616,46 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
615
616
|
}
|
|
616
617
|
settle(state, child) {
|
|
617
618
|
const assignment = this.fact(child);
|
|
618
|
-
if (!assignment || !state.assignmentStore || !child.nativeCompletionDelivered && (!child.subscriptionClosed || child.pendingCompletion)) return;
|
|
619
|
+
if (!assignment || !state.assignmentStore || this.acknowledged.has(child) || !child.nativeCompletionDelivered && (!child.subscriptionClosed || child.pendingCompletion)) return;
|
|
619
620
|
this.enqueue(state, async () => {
|
|
620
621
|
await state.assignmentStore?.consume(assignment, () => this.dependencies.assertCurrent(state));
|
|
621
622
|
});
|
|
622
623
|
}
|
|
624
|
+
abandon(state, child, assertCurrent) {
|
|
625
|
+
return this.enqueue(state, async () => {
|
|
626
|
+
const assignment = this.fact(child);
|
|
627
|
+
if (!assignment || !state.assignmentStore || !child.pendingCompletion) return;
|
|
628
|
+
if (!await state.assignmentStore.consume(assignment, () => {
|
|
629
|
+
this.dependencies.assertCurrent(state);
|
|
630
|
+
assertCurrent();
|
|
631
|
+
}, { status: child.pendingCompletion.status })) throw new Error("Undeliverable native assignment was not retired.");
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
async settleNestedCompletion(state, child, assertCurrent) {
|
|
635
|
+
const owner = child.historyOwner;
|
|
636
|
+
if (!owner || owner.parentThreadId === child.nativeParentThreadId || !await this.dependencies.isNativeChildThread(child.nativeParentThreadId)) return false;
|
|
637
|
+
await this.acknowledge(state, child, () => {
|
|
638
|
+
assertCurrent();
|
|
639
|
+
assertHistoryOwnerMatchesRegistration(owner, state.historyOwner, owner.parentThreadId, true);
|
|
640
|
+
});
|
|
641
|
+
child.nativeCompletionDelivered = true;
|
|
642
|
+
child.pendingCompletion = void 0;
|
|
643
|
+
return true;
|
|
644
|
+
}
|
|
645
|
+
acknowledge(state, child, assertCurrent) {
|
|
646
|
+
return this.enqueue(state, async () => {
|
|
647
|
+
const assertAdmission = () => {
|
|
648
|
+
this.dependencies.assertCurrent(state);
|
|
649
|
+
assertCurrent();
|
|
650
|
+
};
|
|
651
|
+
assertAdmission();
|
|
652
|
+
const assignment = this.fact(child);
|
|
653
|
+
if (!assignment || !state.assignmentStore || this.acknowledged.has(child)) return;
|
|
654
|
+
if (!await state.assignmentStore.consume(assignment, assertAdmission)) throw new Error("Native assignment was not acknowledged.");
|
|
655
|
+
this.acknowledged.add(child);
|
|
656
|
+
assertAdmission();
|
|
657
|
+
});
|
|
658
|
+
}
|
|
623
659
|
async restore(state, owner) {
|
|
624
660
|
const store = state.assignmentStore;
|
|
625
661
|
const current = state.historyOwner;
|
|
@@ -631,11 +667,15 @@ var CodexNativeSubagentAssignmentInventory = class {
|
|
|
631
667
|
for (const assignment of store.read()) {
|
|
632
668
|
if (!matchesNativeAssignmentLifecycle(assignment.owner, current)) continue;
|
|
633
669
|
const recovery = await this.dependencies.readHistory(assignment);
|
|
670
|
+
const pending = store.read();
|
|
634
671
|
if (!this.dependencies.isCurrent(state) || !custody.isCurrent()) return;
|
|
635
672
|
store.assertCurrent();
|
|
636
673
|
if (!recovery || recovery.parentThreadId !== assignment.nativeParentThreadId) continue;
|
|
637
|
-
|
|
638
|
-
|
|
674
|
+
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)));
|
|
675
|
+
if (surviving) {
|
|
676
|
+
await this.dependencies.restore(state, surviving, recovery, custody);
|
|
677
|
+
await this.drain(state);
|
|
678
|
+
}
|
|
639
679
|
}
|
|
640
680
|
} catch (error) {
|
|
641
681
|
embeddedAgentLog.warn("Native pending assignments remain for reconciliation", { error: formatErrorMessage$1(error) });
|
|
@@ -997,7 +1037,18 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
997
1037
|
childState.deliveringCompletion = true;
|
|
998
1038
|
let deferredToForeground = false;
|
|
999
1039
|
try {
|
|
1040
|
+
if (await this.dependencies.settleNestedCompletion(state, childState, () => {
|
|
1041
|
+
if (!this.isCurrent(state, childState) || childState.completionCustody && !childState.completionCustody.isCurrent()) throw new Error("Native completion acknowledgement is no longer current.");
|
|
1042
|
+
})) {
|
|
1043
|
+
this.dependencies.unregisterChild(childState);
|
|
1044
|
+
return;
|
|
1045
|
+
}
|
|
1046
|
+
if (!this.isCurrent(state, childState)) return;
|
|
1000
1047
|
if (!this.prepareDelivery(state, childState)) return;
|
|
1048
|
+
if (childState.completionDeliveryAbandoned) {
|
|
1049
|
+
await this.abandon(state, childState);
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1001
1052
|
if (state.owners.size > 0 || !state.completionScope) {
|
|
1002
1053
|
deferredToForeground = state.owners.size > 0;
|
|
1003
1054
|
return;
|
|
@@ -1027,13 +1078,17 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1027
1078
|
this.prepareDelivery(state, childState);
|
|
1028
1079
|
return;
|
|
1029
1080
|
}
|
|
1030
|
-
if (!this.claim(state, childState)
|
|
1081
|
+
if (!this.claim(state, childState)) {
|
|
1031
1082
|
this.dependencies.unregisterChild(childState);
|
|
1032
1083
|
return;
|
|
1033
1084
|
}
|
|
1085
|
+
if (delivery.recoveryBlocked) {
|
|
1086
|
+
await this.abandon(state, childState);
|
|
1087
|
+
return;
|
|
1088
|
+
}
|
|
1034
1089
|
const recoveryPending = delivery.recoveryPending;
|
|
1035
1090
|
const error = delivery.error ?? (recoveryPending ? "requester recovery owns completion" : "completion delivery did not produce a parent response");
|
|
1036
|
-
this.scheduleRetry(childState, error, !recoveryPending);
|
|
1091
|
+
await this.scheduleRetry(state, childState, error, !recoveryPending);
|
|
1037
1092
|
} catch (error) {
|
|
1038
1093
|
if (!this.isCurrent(state, childState)) return;
|
|
1039
1094
|
if (!this.claim(state, childState)) {
|
|
@@ -1041,7 +1096,7 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1041
1096
|
return;
|
|
1042
1097
|
}
|
|
1043
1098
|
const message = formatErrorMessage$1(error);
|
|
1044
|
-
this.scheduleRetry(childState, message);
|
|
1099
|
+
await this.scheduleRetry(state, childState, message, !childState.completionDeliveryAbandoned);
|
|
1045
1100
|
embeddedAgentLog.warn("Failed to deliver Codex native subagent completion", {
|
|
1046
1101
|
parentThreadId: state.parentThreadId,
|
|
1047
1102
|
childThreadId: completion.childThreadId,
|
|
@@ -1102,22 +1157,41 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1102
1157
|
this.dependencies.releaseClientRetentionIfIdle();
|
|
1103
1158
|
return true;
|
|
1104
1159
|
}
|
|
1105
|
-
|
|
1160
|
+
async abandon(state, child) {
|
|
1161
|
+
child.completionDeliveryAbandoned = true;
|
|
1162
|
+
try {
|
|
1163
|
+
await this.dependencies.abandon(state, child, () => {
|
|
1164
|
+
if (child.nativeCompletionDelivered || !this.isCurrent(state, child) || !this.claim(state, child)) throw new Error("Native completion retirement is no longer current.");
|
|
1165
|
+
});
|
|
1166
|
+
this.dependencies.unregisterChild(child);
|
|
1167
|
+
} catch (error) {
|
|
1168
|
+
if (this.isCurrent(state, child) && child.nativeCompletionDelivered) {
|
|
1169
|
+
this.prepareDelivery(state, child);
|
|
1170
|
+
return;
|
|
1171
|
+
}
|
|
1172
|
+
embeddedAgentLog.warn("Native completion retirement remains pending", {
|
|
1173
|
+
childThreadId: child.childThreadId,
|
|
1174
|
+
error: formatErrorMessage$1(error)
|
|
1175
|
+
});
|
|
1176
|
+
await this.scheduleRetry(state, child, formatErrorMessage$1(error), false);
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
async scheduleRetry(state, childState, error, chargeAttempt = true) {
|
|
1106
1180
|
if (!childState.pendingCompletion || childState.completionDeliveryTimer || this.dependencies.children.get(childState.runId) !== childState) return;
|
|
1107
1181
|
if (chargeAttempt && childState.completionDeliveryAttempt >= this.maxRetries) {
|
|
1108
1182
|
embeddedAgentLog.warn("Native subagent completion retries exhausted", {
|
|
1109
1183
|
childThreadId: childState.childThreadId,
|
|
1110
1184
|
error
|
|
1111
1185
|
});
|
|
1112
|
-
this.
|
|
1186
|
+
await this.abandon(state, childState);
|
|
1113
1187
|
return;
|
|
1114
1188
|
}
|
|
1115
1189
|
const delayMs = delayForAttempt(this.retryDelaysMs, chargeAttempt ? childState.completionDeliveryAttempt++ : childState.completionDeliveryAttempt);
|
|
1116
1190
|
childState.completionDeliveryTimer = setTimeout(() => {
|
|
1117
1191
|
childState.completionDeliveryTimer = void 0;
|
|
1118
1192
|
if (this.dependencies.children.get(childState.runId) !== childState) return;
|
|
1119
|
-
const
|
|
1120
|
-
if (
|
|
1193
|
+
const currentParent = this.dependencies.parents.get(childState.parentThreadId);
|
|
1194
|
+
if (currentParent) this.deliverPending(currentParent, childState);
|
|
1121
1195
|
}, delayMs);
|
|
1122
1196
|
childState.completionDeliveryTimer.unref();
|
|
1123
1197
|
}
|
|
@@ -1125,7 +1199,7 @@ var CodexNativeSubagentCompletionDelivery = class {
|
|
|
1125
1199
|
if (childState.completionCustody && !childState.completionCustody.isCurrent()) return false;
|
|
1126
1200
|
const requesterSessionKey = state.requesterSessionKey?.trim();
|
|
1127
1201
|
if (!requesterSessionKey) return true;
|
|
1128
|
-
const key = `${requesterSessionKey}\0${childState.runId}`;
|
|
1202
|
+
const key = childState.deliveryOwnerKey ?? `${requesterSessionKey}\0${childState.nativeTurnId ? codexNativeSubagentRunId(childState.childThreadId, childState.nativeTurnId) : childState.runId}`;
|
|
1129
1203
|
try {
|
|
1130
1204
|
state.assignmentStore?.assertCurrent();
|
|
1131
1205
|
assertHistoryOwnerMatchesRegistration(childState.historyOwner, state.historyOwner, childState.nativeParentThreadId, state.historyOwner !== void 0);
|
|
@@ -1372,6 +1446,11 @@ var CodexNativeSubagentHistoryRecovery = class {
|
|
|
1372
1446
|
includeTurns
|
|
1373
1447
|
}, { timeoutMs: THREAD_READ_TIMEOUT_MS });
|
|
1374
1448
|
}
|
|
1449
|
+
async isNativeChildThread(threadId) {
|
|
1450
|
+
if (this.knownChildren.has(threadId)) return true;
|
|
1451
|
+
const response = await this.requestThreadRead(threadId, false);
|
|
1452
|
+
return response.thread.id === threadId && Boolean(readThreadParentThreadId(response.thread));
|
|
1453
|
+
}
|
|
1375
1454
|
async read(assignment, options) {
|
|
1376
1455
|
const { childThreadId } = assignment;
|
|
1377
1456
|
const { recordedCompletion } = options;
|
|
@@ -1917,6 +1996,38 @@ function createCodexNativeSubagentMonitorRuntime(Monitor) {
|
|
|
1917
1996
|
};
|
|
1918
1997
|
}
|
|
1919
1998
|
//#endregion
|
|
1999
|
+
//#region extensions/codex/src/app-server/native-subagent-monitor-state.ts
|
|
2000
|
+
/** Parent registrations that share the source requester's session lifecycle. */
|
|
2001
|
+
function selectRequesterParentStates(states, source) {
|
|
2002
|
+
return [...states].filter((state) => state === source || Boolean(source.requesterSessionKey && state.requesterSessionKey === source.requesterSessionKey && state.agentId === source.agentId && source.historyOwner && state.historyOwner && matchesNativeAssignmentLifecycle(source.historyOwner, state.historyOwner)));
|
|
2003
|
+
}
|
|
2004
|
+
/**
|
|
2005
|
+
* Rebuilds a restored child's pending and observed native turns. Pending turns that still hold
|
|
2006
|
+
* a model source keep their completion custody; every other superseded pending turn releases it.
|
|
2007
|
+
*/
|
|
2008
|
+
function restoreKnownChildTurns(assignment, observedTurns, previous) {
|
|
2009
|
+
const currentIndex = observedTurns.findIndex((turn) => turn.turnId === assignment.nativeTurnId);
|
|
2010
|
+
const pendingTurns = observedTurns.filter((turn, index) => index > currentIndex && turn.turnId !== assignment.nativeTurnId).map((turn, index, turns) => ({
|
|
2011
|
+
turnId: turn.turnId,
|
|
2012
|
+
state: turn.state === "active" && index < turns.length - 1 ? void 0 : turn.state
|
|
2013
|
+
}));
|
|
2014
|
+
const retainedPending = previous?.pendingTurns.filter((pending) => pending.modelSource) ?? [];
|
|
2015
|
+
for (const retained of retainedPending) {
|
|
2016
|
+
const recovered = pendingTurns.find((pending) => pending.turnId === retained.turnId);
|
|
2017
|
+
if (recovered) {
|
|
2018
|
+
recovered.modelSource = retained.modelSource;
|
|
2019
|
+
recovered.completionCustody = retained.completionCustody;
|
|
2020
|
+
retained.completionCustody = void 0;
|
|
2021
|
+
} else pendingTurns.push(retained);
|
|
2022
|
+
}
|
|
2023
|
+
for (const pending of previous?.pendingTurns ?? []) if (!pendingTurns.includes(pending)) releaseCompletionCustody(pending);
|
|
2024
|
+
const turnIds = new Set([assignment.nativeTurnId, ...observedTurns.map((turn) => turn.turnId)].filter((id) => Boolean(id)));
|
|
2025
|
+
return {
|
|
2026
|
+
pendingTurns,
|
|
2027
|
+
observedTurns: new Map([...turnIds].map((turnId) => [turnId, pendingTurns.some((turn) => turn.turnId === turnId) ? { awaitingInteraction: true } : {}]))
|
|
2028
|
+
};
|
|
2029
|
+
}
|
|
2030
|
+
//#endregion
|
|
1920
2031
|
//#region extensions/codex/src/app-server/native-subagent-notification-routing.ts
|
|
1921
2032
|
function createCodexNativeSubagentNotificationRouter(deps) {
|
|
1922
2033
|
return (notification) => {
|
|
@@ -2608,6 +2719,7 @@ var CodexNativeSubagentSubmissionOwner = class {
|
|
|
2608
2719
|
if (!this.isObserving(state, custody) || !this.admitTurn(state, custody, turn, historyValidated)) return;
|
|
2609
2720
|
custody.phase = "promoting";
|
|
2610
2721
|
clearTimeout(custody.timer);
|
|
2722
|
+
custody.release();
|
|
2611
2723
|
}
|
|
2612
2724
|
settleChild(state, child) {
|
|
2613
2725
|
for (const custody of this.pending.get(state)?.values() ?? []) {
|
|
@@ -4428,6 +4540,8 @@ var Monitor = class {
|
|
|
4428
4540
|
parents: this.parentStates,
|
|
4429
4541
|
retiredParents: this.retiredParentStates,
|
|
4430
4542
|
unregisterChild: (child) => this.unregisterChild(child),
|
|
4543
|
+
abandon: (state, child, assertCurrent) => this.assignments.abandon(state, child, assertCurrent),
|
|
4544
|
+
settleNestedCompletion: (state, child, assertCurrent) => this.assignments.settleNestedCompletion(state, child, assertCurrent),
|
|
4431
4545
|
releaseClientRetentionIfIdle: () => this.releaseClientRetentionIfIdle()
|
|
4432
4546
|
});
|
|
4433
4547
|
this.turnObservation = new CodexNativeSubagentTurnObservation({
|
|
@@ -4521,6 +4635,7 @@ var Monitor = class {
|
|
|
4521
4635
|
state.assignmentStore?.assertCurrent();
|
|
4522
4636
|
},
|
|
4523
4637
|
isCurrent: (state) => this.isCurrentParent(state),
|
|
4638
|
+
isNativeChildThread: (threadId) => this.historyRecovery.isNativeChildThread(threadId),
|
|
4524
4639
|
readHistory: async (assignment) => {
|
|
4525
4640
|
const revision = this.recovery.retainThreadStatusRevision(assignment.childThreadId);
|
|
4526
4641
|
try {
|
|
@@ -4539,7 +4654,7 @@ var Monitor = class {
|
|
|
4539
4654
|
}
|
|
4540
4655
|
},
|
|
4541
4656
|
restore: async (state, assignment, recovery, custody) => {
|
|
4542
|
-
const existing = this.childStates.get(assignment.runId);
|
|
4657
|
+
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));
|
|
4543
4658
|
if (existing) {
|
|
4544
4659
|
const original = this.parentStates.get(existing.parentThreadId);
|
|
4545
4660
|
if (original && original.requesterSessionKey === state.requesterSessionKey && original.historyOwner && state.historyOwner && matchesNativeAssignmentLifecycle(original.historyOwner, state.historyOwner)) original.assignmentStore = state.assignmentStore;
|
|
@@ -4684,6 +4799,9 @@ var Monitor = class {
|
|
|
4684
4799
|
});
|
|
4685
4800
|
if (!capture) return;
|
|
4686
4801
|
try {
|
|
4802
|
+
const known = this.knownChildren.get(request.threadId);
|
|
4803
|
+
const child = known ? this.admitFollowupChild(known) : void 0;
|
|
4804
|
+
if (child?.nativeTurnId === request.turnId && child.settledWithoutCompletion) this.resumeChild(child);
|
|
4687
4805
|
await this.persistModelAssignment(request, capture);
|
|
4688
4806
|
request.signal?.throwIfAborted();
|
|
4689
4807
|
capture.assertCurrent();
|
|
@@ -4745,7 +4863,7 @@ var Monitor = class {
|
|
|
4745
4863
|
}
|
|
4746
4864
|
retireParent(parentThreadIdInput) {
|
|
4747
4865
|
const current = this.parentStates.get(parentThreadIdInput.trim());
|
|
4748
|
-
const states = current ? this.
|
|
4866
|
+
const states = current ? selectRequesterParentStates(this.parentStates.values(), current) : [];
|
|
4749
4867
|
for (const state of states) this.retiredParentStates.add(state);
|
|
4750
4868
|
const settlements = [];
|
|
4751
4869
|
for (const state of states) {
|
|
@@ -4858,6 +4976,7 @@ var Monitor = class {
|
|
|
4858
4976
|
childState.settledWithoutCompletion = false;
|
|
4859
4977
|
childState.fallbackCompletion = void 0;
|
|
4860
4978
|
this.releaseClientRetention ??= this.retainClient?.();
|
|
4979
|
+
this.retainParentThreadForChild(childState.parentThreadId);
|
|
4861
4980
|
}
|
|
4862
4981
|
settleResumableChild(childState) {
|
|
4863
4982
|
if (childState.terminal) return;
|
|
@@ -4868,6 +4987,7 @@ var Monitor = class {
|
|
|
4868
4987
|
releaseNativeDirectChild(childState);
|
|
4869
4988
|
releaseNativeModelExecution(childState);
|
|
4870
4989
|
this.recovery.clearRecoveryTimers(childState);
|
|
4990
|
+
this.releaseParentThreadIfChildrenSettled(childState.parentThreadId);
|
|
4871
4991
|
this.releaseClientRetentionIfIdle();
|
|
4872
4992
|
}
|
|
4873
4993
|
async handleChildTurnCompletion(notification, childState) {
|
|
@@ -5040,6 +5160,7 @@ var Monitor = class {
|
|
|
5040
5160
|
this.recovery.markTerminalRevision(childState.childThreadId);
|
|
5041
5161
|
releaseNativeDirectChild(childState);
|
|
5042
5162
|
this.recovery.clearRecoveryTimers(childState);
|
|
5163
|
+
this.releaseParentThreadIfChildrenSettled(state.parentThreadId);
|
|
5043
5164
|
this.completionDelivery.applyReceipts(state, childState.deliveryReceipts.record(childState.runId, this.knownChildren.get(childState.childThreadId)?.agentPaths ?? [childState.childThreadId], acceptedCompletion.result));
|
|
5044
5165
|
await this.completionDelivery.deliverPending(state, childState);
|
|
5045
5166
|
}
|
|
@@ -5094,10 +5215,7 @@ var Monitor = class {
|
|
|
5094
5215
|
if (!childState) {
|
|
5095
5216
|
this.updateChildThreadOwnership("claim", childThreadId, this.claimChildThread);
|
|
5096
5217
|
this.releaseClientRetention ??= this.retainClient?.();
|
|
5097
|
-
|
|
5098
|
-
const releaseParentThread = this.retainParentThread?.(parentThreadId);
|
|
5099
|
-
if (releaseParentThread) this.parentThreadRetentions.set(parentThreadId, releaseParentThread);
|
|
5100
|
-
}
|
|
5218
|
+
this.retainParentThreadForChild(parentThreadId);
|
|
5101
5219
|
childState = {
|
|
5102
5220
|
runId,
|
|
5103
5221
|
nativeTurnId: assignment.nativeTurnId,
|
|
@@ -5317,6 +5435,7 @@ var Monitor = class {
|
|
|
5317
5435
|
}
|
|
5318
5436
|
if (!transitioned) claimOwner.onDirectChildAccepted?.();
|
|
5319
5437
|
}
|
|
5438
|
+
this.observeActiveChild(child);
|
|
5320
5439
|
this.admissionCustody.bindEventSink(child);
|
|
5321
5440
|
return child;
|
|
5322
5441
|
}
|
|
@@ -5368,11 +5487,7 @@ var Monitor = class {
|
|
|
5368
5487
|
this.recovery.clearRecoveryTimers(childState);
|
|
5369
5488
|
this.completionDelivery.release(childState);
|
|
5370
5489
|
if (this.childStates.get(childState.runId) === childState) this.childStates.delete(childState.runId);
|
|
5371
|
-
|
|
5372
|
-
const releaseParentThread = this.parentThreadRetentions.get(childState.parentThreadId);
|
|
5373
|
-
this.parentThreadRetentions.delete(childState.parentThreadId);
|
|
5374
|
-
releaseParentThread?.();
|
|
5375
|
-
}
|
|
5490
|
+
this.releaseParentThreadIfChildrenSettled(childState.parentThreadId);
|
|
5376
5491
|
this.recovery.collectThreadStatusRevision(childState.childThreadId);
|
|
5377
5492
|
this.releaseClientRetentionIfIdle();
|
|
5378
5493
|
const state = this.parentStates.get(childState.parentThreadId);
|
|
@@ -5406,21 +5521,28 @@ var Monitor = class {
|
|
|
5406
5521
|
this.releaseClientRetention = void 0;
|
|
5407
5522
|
release?.();
|
|
5408
5523
|
}
|
|
5409
|
-
requesterParents(source) {
|
|
5410
|
-
return [...this.parentStates.values()].filter((state) => state === source || Boolean(source.requesterSessionKey && state.requesterSessionKey === source.requesterSessionKey && state.agentId === source.agentId && source.historyOwner && state.historyOwner && matchesNativeAssignmentLifecycle(source.historyOwner, state.historyOwner)));
|
|
5411
|
-
}
|
|
5412
5524
|
hasParentWork(state) {
|
|
5413
5525
|
if (state.modelSourceReferences || state.pendingRegistrations && !this.disposed && !this.retiredParentStates.has(state) || this.assignments.hasWrites(state) || this.submissions.hasCustody(state) || state.owners.size > 0 || this.childCloses.hasPending(state) || this.hasChildrenForParent(state.parentThreadId)) return true;
|
|
5414
5526
|
for (const known of this.knownChildren.values()) if (known.parent === state && this.currentChild(known.assignment.childThreadId)) return true;
|
|
5415
5527
|
return false;
|
|
5416
5528
|
}
|
|
5529
|
+
retainParentThreadForChild(parentThreadId) {
|
|
5530
|
+
if (this.parentThreadRetentions.has(parentThreadId)) return;
|
|
5531
|
+
const releaseParentThread = this.retainParentThread?.(parentThreadId);
|
|
5532
|
+
if (releaseParentThread) this.parentThreadRetentions.set(parentThreadId, releaseParentThread);
|
|
5533
|
+
}
|
|
5534
|
+
releaseParentThreadIfChildrenSettled(parentThreadId) {
|
|
5535
|
+
for (const childState of this.childStates.values()) if (childState.parentThreadId === parentThreadId && !childState.terminal && !childState.settledWithoutCompletion) return;
|
|
5536
|
+
const releaseParentThread = this.parentThreadRetentions.get(parentThreadId);
|
|
5537
|
+
this.parentThreadRetentions.delete(parentThreadId);
|
|
5538
|
+
releaseParentThread?.();
|
|
5539
|
+
}
|
|
5417
5540
|
hasChildrenForParent(parentThreadId) {
|
|
5418
|
-
|
|
5419
|
-
return false;
|
|
5541
|
+
return [...this.childStates.values()].some((child) => child.parentThreadId === parentThreadId);
|
|
5420
5542
|
}
|
|
5421
5543
|
pruneParentIfUnused(source) {
|
|
5422
5544
|
if (this.parentStates.get(source.parentThreadId) !== source) return;
|
|
5423
|
-
const states = this.
|
|
5545
|
+
const states = selectRequesterParentStates(this.parentStates.values(), source);
|
|
5424
5546
|
if (states.some((state) => this.hasParentWork(state))) return;
|
|
5425
5547
|
for (const state of states) {
|
|
5426
5548
|
this.submissions.retire(state);
|
|
@@ -5436,23 +5558,9 @@ var Monitor = class {
|
|
|
5436
5558
|
}
|
|
5437
5559
|
}
|
|
5438
5560
|
restoreKnownChild(state, assignment, observedTurns = []) {
|
|
5439
|
-
const currentIndex = observedTurns.findIndex((turn) => turn.turnId === assignment.nativeTurnId);
|
|
5440
|
-
const pendingTurns = observedTurns.filter((turn, index) => index > currentIndex && turn.turnId !== assignment.nativeTurnId).map((turn, index, turns) => ({
|
|
5441
|
-
turnId: turn.turnId,
|
|
5442
|
-
state: turn.state === "active" && index < turns.length - 1 ? void 0 : turn.state
|
|
5443
|
-
}));
|
|
5444
5561
|
const previous = this.knownChildren.get(assignment.childThreadId);
|
|
5445
5562
|
const previousRunId = previous?.assignment.runId;
|
|
5446
|
-
const
|
|
5447
|
-
for (const retained of retainedPending) {
|
|
5448
|
-
const recovered = pendingTurns.find((pending) => pending.turnId === retained.turnId);
|
|
5449
|
-
if (recovered) {
|
|
5450
|
-
recovered.modelSource = retained.modelSource;
|
|
5451
|
-
recovered.completionCustody = retained.completionCustody;
|
|
5452
|
-
retained.completionCustody = void 0;
|
|
5453
|
-
} else pendingTurns.push(retained);
|
|
5454
|
-
}
|
|
5455
|
-
for (const pending of previous?.pendingTurns ?? []) if (!pendingTurns.includes(pending)) releaseCompletionCustody(pending);
|
|
5563
|
+
const { pendingTurns, observedTurns: observedTurnStates } = restoreKnownChildTurns(assignment, observedTurns, previous);
|
|
5456
5564
|
this.knownChildren.set(assignment.childThreadId, {
|
|
5457
5565
|
configurationQualification: previous?.configurationQualification,
|
|
5458
5566
|
parent: state,
|
|
@@ -5463,7 +5571,7 @@ var Monitor = class {
|
|
|
5463
5571
|
terminal: false
|
|
5464
5572
|
},
|
|
5465
5573
|
turnId: pendingTurns.at(-1)?.turnId ?? assignment.nativeTurnId,
|
|
5466
|
-
observedTurns:
|
|
5574
|
+
observedTurns: observedTurnStates,
|
|
5467
5575
|
pendingTurns,
|
|
5468
5576
|
agentPaths: this.knownChildren.get(assignment.childThreadId)?.agentPaths ?? /* @__PURE__ */ new Set([assignment.childThreadId])
|
|
5469
5577
|
});
|
|
@@ -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-DYL9uxNe.mjs → native-task-assignments-Dap5NqiR.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-BAOzwy85.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-O62ZRFhy.mjs").then((n) => n.h);
|
|
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-O62ZRFhy.mjs").then((n) => n.h);
|
|
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-O62ZRFhy.mjs").then((n) => n.h);
|
|
174
174
|
const sessionStore = await import("openclaw/plugin-sdk/session-store-runtime");
|
|
175
175
|
let imported = 0;
|
|
176
176
|
let settled = 0;
|
|
@@ -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-DmZmgRou.mjs";
|
|
2
2
|
import { r as resolveCodexAppServerUserHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
|
|
3
3
|
import { o as formatCodexDisplayText } from "./command-formatters-xW9KpoSZ.mjs";
|
|
4
4
|
import { t as codexCatalogHomeId } from "./session-catalog-home-id-vlih0B_g.mjs";
|
|
@@ -196,7 +196,7 @@ async function resumeCodexCliSessionOnNode(params) {
|
|
|
196
196
|
let catalogAgentId;
|
|
197
197
|
let catalogHomeId;
|
|
198
198
|
if (params.sessionKey) {
|
|
199
|
-
const { adoptionSessionKeyRest, CODEX_NODE_SESSION_KEY_PREFIX, readNodeSessionMarker } = await import("./session-catalog-node-adoption-
|
|
199
|
+
const { adoptionSessionKeyRest, CODEX_NODE_SESSION_KEY_PREFIX, readNodeSessionMarker } = await import("./session-catalog-node-adoption-BjYvYtAd.mjs");
|
|
200
200
|
const entry = params.runtime.agent.session.getSessionEntry({
|
|
201
201
|
sessionKey: params.sessionKey,
|
|
202
202
|
readConsistency: "latest"
|
package/dist/.setup/{node-exec-server.runtime-8RehgPdQ.mjs → node-exec-server.runtime-B-4ogz9C.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as resolveManagedCodexNativeCommand, r as resolveManagedCodexAppServerStartOptions, t as isManagedCodexDesktopCommand } from "./managed-binary-
|
|
2
|
-
import { a as closeCodexAppServerTransportAndWait, t as createStdioTransport } from "./transport-stdio-
|
|
1
|
+
import { i as resolveManagedCodexNativeCommand, r as resolveManagedCodexAppServerStartOptions, t as isManagedCodexDesktopCommand } from "./managed-binary-Boj8_lWV.mjs";
|
|
2
|
+
import { a as closeCodexAppServerTransportAndWait, t as createStdioTransport } from "./transport-stdio-BsXQmXll.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,7 +1,7 @@
|
|
|
1
1
|
import { t as isOnlyMigrationKind } from "./scope-DOC1Xjc8.mjs";
|
|
2
|
-
import { u as CODEX_PLUGINS_MARKETPLACE_NAME } from "./plugin-inventory-
|
|
3
|
-
import "./config-
|
|
4
|
-
import { i as hasCodexSource, n as defaultCodexHome, o as readJsonObject, r as discoverCodexSource, s as sanitizeName, t as codexPluginMigrationSubscriptionWarning } from "./source-
|
|
2
|
+
import { u as CODEX_PLUGINS_MARKETPLACE_NAME } from "./plugin-inventory-CZLnMaxf.mjs";
|
|
3
|
+
import "./config-d0gOFYEk.mjs";
|
|
4
|
+
import { i as hasCodexSource, n as defaultCodexHome, o as readJsonObject, r as discoverCodexSource, s as sanitizeName, t as codexPluginMigrationSubscriptionWarning } from "./source-C4Al9cJx.mjs";
|
|
5
5
|
import { asBoolean, asOptionalRecord, isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
6
|
import { createHash } from "node:crypto";
|
|
7
7
|
import { runCommandBuffered } from "openclaw/plugin-sdk/process-runtime";
|
|
@@ -97,8 +97,8 @@ async function readCodexCliCredentialsAsync(options) {
|
|
|
97
97
|
options.signal?.throwIfAborted();
|
|
98
98
|
if (!options.allowKeychainPrompt) return;
|
|
99
99
|
const home = await fs.realpath(options.codexHome).catch(() => path.resolve(options.codexHome));
|
|
100
|
-
const { CodexAppServerClient } = await import("./client-
|
|
101
|
-
const { resolveManagedCodexPackageEntrypoint, resolveManagedCodexNativeCommand } = await import("./managed-binary-
|
|
100
|
+
const { CodexAppServerClient } = await import("./client-BTWv2cJe.mjs").then((n) => n.n);
|
|
101
|
+
const { resolveManagedCodexPackageEntrypoint, resolveManagedCodexNativeCommand } = await import("./managed-binary-Boj8_lWV.mjs").then((n) => n.n);
|
|
102
102
|
const launcher = resolveManagedCodexPackageEntrypoint(path.dirname(fileURLToPath(import.meta.url)));
|
|
103
103
|
const command = launcher ? resolveManagedCodexNativeCommand(launcher) : void 0;
|
|
104
104
|
if (!command) return;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as CodexAppServerRpcError } from "./rpc-error-C98SHchT.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-CZLnMaxf.mjs";
|
|
3
|
+
import "./config-d0gOFYEk.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 { _t as resolveCodexGatewayTimeoutWithGraceMs } from "./shared-client-
|
|
1
|
+
import { _t as resolveCodexGatewayTimeoutWithGraceMs } from "./shared-client-Bo9MCCKj.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-Bg9DbDI6.mjs";
|
|
2
|
-
import "./config-
|
|
2
|
+
import "./config-d0gOFYEk.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";
|