@tangle-network/agent-runtime 6.0.7 → 7.0.0
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/CHANGELOG.md +24 -0
- package/README.md +23 -9
- package/dist/{activation-Bb2ovvM5.js → activation-Ba9IAgQ3.js} +2 -2
- package/dist/{activation-Bb2ovvM5.js.map → activation-Ba9IAgQ3.js.map} +1 -1
- package/dist/{activation-DPz8kGpT.d.ts → activation-DIkTEBWF.d.ts} +2 -2
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +4 -4
- package/dist/{coordination-manager-Cow3jgu1.js → coordination-manager-DQZ2u6L-.js} +58 -6
- package/dist/coordination-manager-DQZ2u6L-.js.map +1 -0
- package/dist/{delegate-zUOoWutU.js → delegate-DFLSVjFG.js} +2 -2
- package/dist/{delegate-zUOoWutU.js.map → delegate-DFLSVjFG.js.map} +1 -1
- package/dist/durable.d.ts +71 -4
- package/dist/durable.js +159 -11
- package/dist/durable.js.map +1 -1
- package/dist/{failure-cause-BzjUUsRz.js → failure-cause-rJTm_Tx8.js} +6 -9
- package/dist/failure-cause-rJTm_Tx8.js.map +1 -0
- package/dist/{graph-BS9p0hHV.js → graph-BjQF2syl.js} +7 -7
- package/dist/{graph-BS9p0hHV.js.map → graph-BjQF2syl.js.map} +1 -1
- package/dist/{graph-registry-DbCwfHMY.js → graph-registry-7X2nrreR.js} +2 -2
- package/dist/{graph-registry-DbCwfHMY.js.map → graph-registry-7X2nrreR.js.map} +1 -1
- package/dist/{graph-registry-C4ASeL2P.js → graph-registry-gYbq4L5Z.js} +1 -1
- package/dist/{improve-Ca4PSA2z.js → improve-BolbYegO.js} +7 -7
- package/dist/{improve-Ca4PSA2z.js.map → improve-BolbYegO.js.map} +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +10 -10
- package/dist/intelligence.d.ts +2 -2
- package/dist/intelligence.js +4 -4
- package/dist/{jsonl-file-BeUa5EDx.js → jsonl-file-DsxVI0E_.js} +5 -5
- package/dist/jsonl-file-DsxVI0E_.js.map +1 -0
- package/dist/kernel.d.ts +2 -2
- package/dist/kernel.js +14 -14
- package/dist/{loop-runner-B_K3oLGC.js → loop-runner-C9W3T_3T.js} +2 -2
- package/dist/{loop-runner-B_K3oLGC.js.map → loop-runner-C9W3T_3T.js.map} +1 -1
- package/dist/{loop-runner-9surW8mg.d.ts → loop-runner-Cs9IJ6Nk.d.ts} +2 -2
- package/dist/loop-runner-bin.d.ts +1 -1
- package/dist/loop-runner-bin.js +1 -1
- package/dist/mcp/bin.js +3 -3
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.js +6 -6
- package/dist/mcp/memory-bin.js +1 -1
- package/dist/profiles.d.ts +1 -1
- package/dist/{provision-supervisor-ZG-ZxIe9.js → provision-supervisor-BQFHjCtN.js} +5 -5
- package/dist/{provision-supervisor-ZG-ZxIe9.js.map → provision-supervisor-BQFHjCtN.js.map} +1 -1
- package/dist/{run-cancellation-CqF01-zj.js → run-cancellation-B84X8ZAP.js} +3 -3
- package/dist/{run-cancellation-CqF01-zj.js.map → run-cancellation-B84X8ZAP.js.map} +1 -1
- package/dist/{run-state-CeMgqULw.js → run-state-Dh1bGERI.js} +25 -19
- package/dist/run-state-Dh1bGERI.js.map +1 -0
- package/dist/{runtime-CBt8PWn5.js → runtime-C9F1PG2A.js} +17 -17
- package/dist/{runtime-CBt8PWn5.js.map → runtime-C9F1PG2A.js.map} +1 -1
- package/dist/{search-executor-CoLgtigZ.js → search-executor-CKR9_6NR.js} +4 -4
- package/dist/{search-executor-CoLgtigZ.js.map → search-executor-CKR9_6NR.js.map} +1 -1
- package/dist/{server-Dv_wLT9_.js → server-Dh3SQGQT.js} +4 -4
- package/dist/{server-Dv_wLT9_.js.map → server-Dh3SQGQT.js.map} +1 -1
- package/dist/{settle-record-DTh0cvF-.js → settle-record-C6LdVvok.js} +13 -5
- package/dist/settle-record-C6LdVvok.js.map +1 -0
- package/dist/{structural-rollout-ccetqcnq.js → structural-rollout-Dapf2aZY.js} +25 -7
- package/dist/structural-rollout-Dapf2aZY.js.map +1 -0
- package/dist/{supervise-BMqPWSv7.js → supervise-xwl2D6q3.js} +10 -8
- package/dist/{supervise-BMqPWSv7.js.map → supervise-xwl2D6q3.js.map} +1 -1
- package/dist/{supervision-discovery-mF3cWh36.js → supervision-discovery-B47U8TH5.js} +4 -4
- package/dist/{supervision-discovery-mF3cWh36.js.map → supervision-discovery-B47U8TH5.js.map} +1 -1
- package/dist/{scope-BF3RUg3U.js → supervisor-accounting-DxLQ_TQe.js} +343 -52
- package/dist/supervisor-accounting-DxLQ_TQe.js.map +1 -0
- package/dist/{supervisor-CigTbS9A.js → supervisor-gC-u_PRk.js} +12 -315
- package/dist/supervisor-gC-u_PRk.js.map +1 -0
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +11 -11
- package/dist/{tool-server-B9q2dtnW.js → tool-server-Dg350Bgz.js} +2 -2
- package/dist/{tool-server-B9q2dtnW.js.map → tool-server-Dg350Bgz.js.map} +1 -1
- package/dist/{top-web-DBhkr1lN.js → top-web-BJLnFQdr.js} +7 -7
- package/dist/{top-web-DBhkr1lN.js.map → top-web-BJLnFQdr.js.map} +1 -1
- package/dist/tui/bin.js +6 -6
- package/dist/tui/bin.js.map +1 -1
- package/dist/tui/index.d.ts +1 -1
- package/dist/tui/index.js +2 -2
- package/dist/{types-DmJTtmgm.d.ts → types-Jg274chm.d.ts} +156 -310
- package/package.json +1 -1
- package/dist/coordination-manager-Cow3jgu1.js.map +0 -1
- package/dist/failure-cause-BzjUUsRz.js.map +0 -1
- package/dist/jsonl-file-BeUa5EDx.js.map +0 -1
- package/dist/run-state-CeMgqULw.js.map +0 -1
- package/dist/scope-BF3RUg3U.js.map +0 -1
- package/dist/settle-record-DTh0cvF-.js.map +0 -1
- package/dist/structural-rollout-ccetqcnq.js.map +0 -1
- package/dist/supervisor-CigTbS9A.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { c as RetainedInteractiveAdmissionError, d as RetainedRunDispatchBindingError, f as RuntimeRunStateError, l as RetainedInteractiveBindingError, m as ValidationError, u as RetainedRunAdmissionError } from "./errors-AzSuGI23.js";
|
|
2
2
|
import { A as withBudgetResources, B as singleFlightTeardown, C as unreportedSpend, D as addResourceSpend, I as armDeadlineTimer, L as boundedChildDeadlineAt, M as CHILD_DEADLINE_REASON, R as checkInIdleMs, T as zeroSpend, V as teardownExecutor, a as cloneSpend, c as errorMessage, f as isAsyncIterable, i as chargedTokens, k as resourceTelemetry, n as addSpend, o as cloneTokenUsage, t as abortError, v as sleep } from "./util-C_cdPNC4.js";
|
|
3
|
-
import { $ as assertValidBudget, F as executorFailureInfra, G as budgetRecoverySeeds, H as BudgetReconcileFault, I as executorFailureReason, J as refreshBudgetLease, K as completedLeafBacking, M as contentAddress, P as executorFailure, Q as spendFromUsageTotals, U as budgetLeaseUpdates, W as budgetLeases, X as newUsageTotals, Y as meterUsageEvent, et as assertValidSpend, f as executorEvidenceWriter, g as prepareRetainedExecutor, h as leafContinuationExecutionId, j as traceRootWriter, lt as extractTransportEventIdentity, n as runtimeFailureCause, o as settlementFailureCause, q as createBudgetPool, s as BUDGET_CONTINUATION_TASK, t as reportedFailureCause, u as RetainedExecutionPendingError, ut as parseCanonicalTransportEvent, wt as recordValue, y as retainedExecutorSeamKey } from "./failure-cause-
|
|
3
|
+
import { $ as assertValidBudget, F as executorFailureInfra, G as budgetRecoverySeeds, H as BudgetReconcileFault, I as executorFailureReason, J as refreshBudgetLease, K as completedLeafBacking, M as contentAddress, P as executorFailure, Q as spendFromUsageTotals, U as budgetLeaseUpdates, W as budgetLeases, X as newUsageTotals, Y as meterUsageEvent, et as assertValidSpend, f as executorEvidenceWriter, g as prepareRetainedExecutor, h as leafContinuationExecutionId, j as traceRootWriter, lt as extractTransportEventIdentity, n as runtimeFailureCause, o as settlementFailureCause, q as createBudgetPool, s as BUDGET_CONTINUATION_TASK, t as reportedFailureCause, u as RetainedExecutionPendingError, ut as parseCanonicalTransportEvent, wt as recordValue, y as retainedExecutorSeamKey } from "./failure-cause-rJTm_Tx8.js";
|
|
4
4
|
import { a as errMessage, c as errorText, d as resolveRedactor, l as defaultRedactor, n as detachedSnapshot, r as shareParsedStrings } from "./snapshot-Cgj2Wzi6.js";
|
|
5
5
|
import { t as assertExecutableAgentProfile } from "./model-policy-JOcg3NRs.js";
|
|
6
|
-
import { a as readCommittedJsonLines, c as appendCommittedJsonLine, l as sha256, r as prepareJsonlAppend, s as withJsonlFileLock, t as isNoEntError } from "./jsonl-file-
|
|
6
|
+
import { a as readCommittedJsonLines, c as appendCommittedJsonLine, l as sha256, r as prepareJsonlAppend, s as withJsonlFileLock, t as isNoEntError } from "./jsonl-file-DsxVI0E_.js";
|
|
7
7
|
import { F as deepFreezeCandidate, h as workspaceLimits, i as readAgentCandidateWorkspaceArtifactFiles, j as verifiedArtifactChunks, m as safeArchivePath, z as sha256Bytes$1 } from "./workspace-streams-B7yNMahl.js";
|
|
8
8
|
import { a as writeAtomicDurableFile, n as assertNoSymlinkDescendant, o as captureRunWriteContext, r as publishExclusiveDurableFile, s as fenceRunWrite, t as appendDurableFile } from "./durable-file-DstVeHcj.js";
|
|
9
9
|
import { a as withPursuitContext, i as notifyRuntimeHookEvent } from "./runtime-hooks-CsW2pfFk.js";
|
|
@@ -9139,14 +9139,19 @@ function overBudget(budget, spent) {
|
|
|
9139
9139
|
return budget.maxTokens !== void 0 && chargedTokens(spent.tokens) > budget.maxTokens || budget.maxIterations !== void 0 && spent.iterations > budget.maxIterations || budget.maxUsd !== void 0 && spent.usdKnown !== false && spent.usd > budget.maxUsd;
|
|
9140
9140
|
}
|
|
9141
9141
|
// src/durable/spawn-journal/record-events.ts
|
|
9142
|
-
/** Decode
|
|
9143
|
-
function spawnJournalRecordEvents(record) {
|
|
9144
|
-
|
|
9142
|
+
/** Decode historical envelopes; readers own event validation. @internal */
|
|
9143
|
+
function spawnJournalRecordEvents(record, invalid = "throw") {
|
|
9144
|
+
const corrupt = (reason) => {
|
|
9145
|
+
if (invalid === "skip") return [];
|
|
9146
|
+
throw new Error(`spawn journal corrupted: ${reason}`);
|
|
9147
|
+
};
|
|
9148
|
+
if (!isRecord(record)) return corrupt("record must be an object");
|
|
9145
9149
|
if (record.kind === "begin") return [];
|
|
9146
|
-
|
|
9147
|
-
if (record.kind !== "events")
|
|
9148
|
-
|
|
9149
|
-
|
|
9150
|
+
const single = record.kind === "event" || record.kind === void 0 && "event" in record;
|
|
9151
|
+
if (!single && record.kind !== "events") return corrupt(`unknown record kind '${String(record.kind)}'`);
|
|
9152
|
+
const events = single ? [record.event] : record.events;
|
|
9153
|
+
if (!Array.isArray(events)) return corrupt("group has no events array");
|
|
9154
|
+
return events;
|
|
9150
9155
|
}
|
|
9151
9156
|
// src/durable/spawn-journal/journal-store.ts
|
|
9152
9157
|
/**
|
|
@@ -11088,47 +11093,6 @@ function maxSeqOf(events, pred) {
|
|
|
11088
11093
|
function reservedCursorFloor(events) {
|
|
11089
11094
|
return Math.max(maxSeqOf(events, closesCursorSlot), events.reduce((max, event) => event.kind === "reconciled" && event.settledSeq !== void 0 ? Math.max(max, event.settledSeq) : max, -1));
|
|
11090
11095
|
}
|
|
11091
|
-
/** Durable measured costs plus conservative unmeasured ceilings and remaining backing.
|
|
11092
|
-
* Unknown flags distinguish those charges from observed spend. */
|
|
11093
|
-
function sumSpendFromEvents(events) {
|
|
11094
|
-
const totals = sumMeasuredSpendFromEvents(events);
|
|
11095
|
-
const rootBudget = events.find((event) => event.kind === "spawned" && event.parent === void 0)?.budget;
|
|
11096
|
-
let remainingRootTokens = Math.max(0, (rootBudget?.maxTokens ?? 0) - chargedTokens(totals.childWork.tokens) - chargedTokens(totals.driverInference.tokens));
|
|
11097
|
-
let remainingRootIterations = Math.max(0, (rootBudget?.maxIterations ?? 0) - totals.childWork.iterations - totals.driverInference.iterations);
|
|
11098
|
-
let remainingRootUsd = Math.max(0, (rootBudget?.maxUsd ?? 0) - totals.childWork.usd - totals.driverInference.usd);
|
|
11099
|
-
for (const budget of uncertainSpawnBudgets(events)) {
|
|
11100
|
-
const unknown = withBudgetResources(zeroSpend(), budget);
|
|
11101
|
-
Object.assign(totals.childWork, addResourceSpend(totals.childWork.resources, unknown.resources));
|
|
11102
|
-
const iterationCharge = budget.maxIterations ?? remainingRootIterations;
|
|
11103
|
-
totals.childWork.iterations += iterationCharge;
|
|
11104
|
-
remainingRootIterations = Math.max(0, remainingRootIterations - iterationCharge);
|
|
11105
|
-
const tokenCharge = budget.maxTokens ?? remainingRootTokens;
|
|
11106
|
-
totals.childWork.tokens.input += tokenCharge;
|
|
11107
|
-
remainingRootTokens = Math.max(0, remainingRootTokens - tokenCharge);
|
|
11108
|
-
totals.childWork.tokensKnown = false;
|
|
11109
|
-
const usdCharge = budget.maxUsd ?? (rootBudget?.maxUsd !== void 0 ? remainingRootUsd : 0);
|
|
11110
|
-
totals.childWork.usd += usdCharge;
|
|
11111
|
-
totals.childWork.usdKnown = false;
|
|
11112
|
-
remainingRootUsd = Math.max(0, remainingRootUsd - usdCharge);
|
|
11113
|
-
}
|
|
11114
|
-
for (const { budget: held } of heldSpawnBudgets(events)) totals.childWork = addSpend(totals.childWork, {
|
|
11115
|
-
...zeroSpend(),
|
|
11116
|
-
iterations: held.maxIterations ?? 0,
|
|
11117
|
-
tokens: {
|
|
11118
|
-
input: held.maxTokens ?? 0,
|
|
11119
|
-
output: 0
|
|
11120
|
-
},
|
|
11121
|
-
tokensKnown: (held.maxTokens ?? 0) === 0,
|
|
11122
|
-
usd: held.maxUsd ?? 0,
|
|
11123
|
-
usdKnown: (held.maxUsd ?? 0) === 0,
|
|
11124
|
-
...held.resources === void 0 ? {} : { resources: Object.fromEntries(Object.entries(held.resources).map(([name, value]) => [name, {
|
|
11125
|
-
unit: value.unit,
|
|
11126
|
-
amount: value.limit,
|
|
11127
|
-
known: value.limit === 0
|
|
11128
|
-
}])) }
|
|
11129
|
-
});
|
|
11130
|
-
return totals;
|
|
11131
|
-
}
|
|
11132
11096
|
function sumMeasuredSpendFromEvents(events, ownerId) {
|
|
11133
11097
|
const budgets = new Map(events.flatMap((event) => event.kind === "spawned" ? [[event.id, event.budget]] : []));
|
|
11134
11098
|
let childWork = zeroSpend();
|
|
@@ -13762,6 +13726,333 @@ async function recoverRetainedChildren(args, children, spawn, next) {
|
|
|
13762
13726
|
throw error;
|
|
13763
13727
|
}
|
|
13764
13728
|
}
|
|
13765
|
-
|
|
13729
|
+
// src/durable/spawn-journal/provider-model-evidence.ts
|
|
13730
|
+
/**
|
|
13731
|
+
* Aggregate provider-served model evidence across one recursively owned journal forest.
|
|
13732
|
+
*
|
|
13733
|
+
* The parent tree records an owned driver's terminal summary, while that driver's own inference
|
|
13734
|
+
* and descendants live in its owned tree. This reducer follows the forest reader's explicit tree
|
|
13735
|
+
* edges and consumes each tree's metered attempts plus terminal leaf settlements exactly once.
|
|
13736
|
+
* A summary node is skipped because its owned tree supplies the source records. Plan materialization
|
|
13737
|
+
* is intentionally not read: it proves only what Runtime requested, not what a provider served.
|
|
13738
|
+
*
|
|
13739
|
+
* Missing legacy evidence, an unfinished node, an unopened owned tree, an identity conflict, and a
|
|
13740
|
+
* paid attempt without a qualified served snapshot all return unknown. An explicit
|
|
13741
|
+
* `providerDispatch: "not_started"` arm and Runtime accounting-only metered records are ignored
|
|
13742
|
+
* for served-model identity, while absent or malformed legacy data remains unknown here.
|
|
13743
|
+
*/
|
|
13744
|
+
function aggregateProviderModelEvidence(forest) {
|
|
13745
|
+
const attempts = [];
|
|
13746
|
+
const observedModels = /* @__PURE__ */ new Set();
|
|
13747
|
+
const canonicalModels = /* @__PURE__ */ new Set();
|
|
13748
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
13749
|
+
let reason;
|
|
13750
|
+
let sawProviderEvidence = false;
|
|
13751
|
+
for (const node of forest.nodes) nodes.set(forestNodeKey(node.treeRoot, node.id), node);
|
|
13752
|
+
if (forest.missingTrees.length > 0 || forest.inDoubt.length > 0) reason = "provider-model-missing";
|
|
13753
|
+
const markMissing = () => {
|
|
13754
|
+
reason ??= "provider-model-missing";
|
|
13755
|
+
};
|
|
13756
|
+
const markConflict = () => {
|
|
13757
|
+
reason = "provider-model-conflict";
|
|
13758
|
+
};
|
|
13759
|
+
const append = (raw) => {
|
|
13760
|
+
sawProviderEvidence = true;
|
|
13761
|
+
if (!isProviderEvidenceObject(raw)) {
|
|
13762
|
+
markMissing();
|
|
13763
|
+
return;
|
|
13764
|
+
}
|
|
13765
|
+
if (raw.status === "unknown") {
|
|
13766
|
+
if (raw.reason === "provider-model-conflict") markConflict();
|
|
13767
|
+
else if (!hasOnlyNotStartedAttempts(raw)) markMissing();
|
|
13768
|
+
} else if (raw.status !== "known") {
|
|
13769
|
+
markMissing();
|
|
13770
|
+
return;
|
|
13771
|
+
}
|
|
13772
|
+
if (!Array.isArray(raw.attempts) || !Array.isArray(raw.models)) {
|
|
13773
|
+
markMissing();
|
|
13774
|
+
return;
|
|
13775
|
+
}
|
|
13776
|
+
const declared = /* @__PURE__ */ new Set();
|
|
13777
|
+
for (const model of raw.models) if (typeof model !== "string" || model.length === 0) markMissing();
|
|
13778
|
+
else declared.add(model);
|
|
13779
|
+
const observedInRecord = /* @__PURE__ */ new Set();
|
|
13780
|
+
for (const rawAttempt of raw.attempts) {
|
|
13781
|
+
if (!isProviderAttemptEvidence(rawAttempt)) {
|
|
13782
|
+
markMissing();
|
|
13783
|
+
continue;
|
|
13784
|
+
}
|
|
13785
|
+
if (rawAttempt.identityConflict === true) markConflict();
|
|
13786
|
+
const observations = [...rawAttempt.observations];
|
|
13787
|
+
if (rawAttempt.providerDispatch === "not_started") {
|
|
13788
|
+
if (observations.length > 0) markMissing();
|
|
13789
|
+
attempts.push(Object.freeze({
|
|
13790
|
+
observations: Object.freeze([]),
|
|
13791
|
+
providerDispatch: "not_started",
|
|
13792
|
+
...rawAttempt.identityConflict === true ? { identityConflict: true } : {}
|
|
13793
|
+
}));
|
|
13794
|
+
continue;
|
|
13795
|
+
}
|
|
13796
|
+
if (observations.length === 0) {
|
|
13797
|
+
markMissing();
|
|
13798
|
+
attempts.push(Object.freeze({
|
|
13799
|
+
observations: Object.freeze([]),
|
|
13800
|
+
...rawAttempt.identityConflict === true ? { identityConflict: true } : {}
|
|
13801
|
+
}));
|
|
13802
|
+
continue;
|
|
13803
|
+
}
|
|
13804
|
+
let base;
|
|
13805
|
+
let snapshot;
|
|
13806
|
+
for (const model of observations) {
|
|
13807
|
+
if (typeof model !== "string" || model.length === 0) {
|
|
13808
|
+
markMissing();
|
|
13809
|
+
continue;
|
|
13810
|
+
}
|
|
13811
|
+
observedInRecord.add(model);
|
|
13812
|
+
observedModels.add(model);
|
|
13813
|
+
const identity = servedIdentityParts(model);
|
|
13814
|
+
if (identity === void 0) {
|
|
13815
|
+
markMissing();
|
|
13816
|
+
continue;
|
|
13817
|
+
}
|
|
13818
|
+
if (base !== void 0 && base !== identity.base) markConflict();
|
|
13819
|
+
if (snapshot !== void 0 && identity.snapshot !== void 0 && snapshot !== identity.snapshot) markConflict();
|
|
13820
|
+
base = identity.base;
|
|
13821
|
+
snapshot ??= identity.snapshot;
|
|
13822
|
+
if (identity.snapshot !== void 0) {
|
|
13823
|
+
canonicalModels.add(`${identity.base}@${identity.snapshot}`);
|
|
13824
|
+
if (canonicalModels.size > 1) markConflict();
|
|
13825
|
+
}
|
|
13826
|
+
}
|
|
13827
|
+
if (base === void 0 || snapshot === void 0) markMissing();
|
|
13828
|
+
attempts.push(Object.freeze({
|
|
13829
|
+
observations: Object.freeze(observations),
|
|
13830
|
+
...rawAttempt.identityConflict === true ? { identityConflict: true } : {}
|
|
13831
|
+
}));
|
|
13832
|
+
}
|
|
13833
|
+
if (declared.size !== observedInRecord.size || [...declared].some((model) => !observedInRecord.has(model))) markMissing();
|
|
13834
|
+
};
|
|
13835
|
+
const terminal = (treeRoot, event) => {
|
|
13836
|
+
const node = nodes.get(forestNodeKey(treeRoot, event.id));
|
|
13837
|
+
if (node === void 0) {
|
|
13838
|
+
markMissing();
|
|
13839
|
+
return;
|
|
13840
|
+
}
|
|
13841
|
+
if (node.ownedTreeRoot !== void 0) return;
|
|
13842
|
+
if (event.kind === "cancelled" && event.providerModel === void 0) {
|
|
13843
|
+
markMissing();
|
|
13844
|
+
return;
|
|
13845
|
+
}
|
|
13846
|
+
append(event.providerModel ?? node.providerModel);
|
|
13847
|
+
};
|
|
13848
|
+
for (const tree of forest.trees) for (const event of tree.events) if (event.kind === "metered") {
|
|
13849
|
+
if (event.accountingOnly === true) {
|
|
13850
|
+
if (event.providerModel !== void 0) markMissing();
|
|
13851
|
+
continue;
|
|
13852
|
+
}
|
|
13853
|
+
if (nodes.get(forestNodeKey(tree.root, event.id))?.ownedTreeRoot !== void 0) continue;
|
|
13854
|
+
const evidence = event.providerModel;
|
|
13855
|
+
if (evidence === void 0) markMissing();
|
|
13856
|
+
else append(evidence);
|
|
13857
|
+
} else if (event.kind === "settled" || event.kind === "cancelled") terminal(tree.root, event);
|
|
13858
|
+
if (!sawProviderEvidence || attempts.length === 0 || observedModels.size === 0) reason ??= "provider-model-missing";
|
|
13859
|
+
const models = Object.freeze([...observedModels]);
|
|
13860
|
+
const frozenAttempts = Object.freeze(attempts);
|
|
13861
|
+
return Object.freeze(reason === void 0 ? {
|
|
13862
|
+
status: "known",
|
|
13863
|
+
attempts: frozenAttempts,
|
|
13864
|
+
models
|
|
13865
|
+
} : {
|
|
13866
|
+
status: "unknown",
|
|
13867
|
+
attempts: frozenAttempts,
|
|
13868
|
+
models,
|
|
13869
|
+
reason
|
|
13870
|
+
});
|
|
13871
|
+
}
|
|
13872
|
+
function forestNodeKey(treeRoot, nodeId) {
|
|
13873
|
+
return `${treeRoot}\u0000${nodeId}`;
|
|
13874
|
+
}
|
|
13875
|
+
function isProviderEvidenceObject(value) {
|
|
13876
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && "status" in value;
|
|
13877
|
+
}
|
|
13878
|
+
function hasOnlyNotStartedAttempts(evidence) {
|
|
13879
|
+
return Array.isArray(evidence.attempts) && evidence.attempts.length > 0 && evidence.attempts.every((attempt) => isProviderAttemptEvidence(attempt) && attempt.providerDispatch === "not_started" && attempt.observations.length === 0 && attempt.identityConflict !== true);
|
|
13880
|
+
}
|
|
13881
|
+
function isProviderAttemptEvidence(value) {
|
|
13882
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && Array.isArray(value.observations) && (value.providerDispatch === void 0 || value.providerDispatch === "not_started");
|
|
13883
|
+
}
|
|
13884
|
+
function servedIdentityParts(model) {
|
|
13885
|
+
const at = model.lastIndexOf("@");
|
|
13886
|
+
const rawBase = at < 0 ? model : model.slice(0, at);
|
|
13887
|
+
const base = rawBase.slice(rawBase.lastIndexOf("/") + 1);
|
|
13888
|
+
if (base.length === 0) return void 0;
|
|
13889
|
+
const snapshot = at < 0 ? void 0 : model.slice(at + 1);
|
|
13890
|
+
if (snapshot !== void 0 && snapshot.length === 0) return void 0;
|
|
13891
|
+
return snapshot === void 0 ? { base } : {
|
|
13892
|
+
base,
|
|
13893
|
+
snapshot
|
|
13894
|
+
};
|
|
13895
|
+
}
|
|
13896
|
+
// src/runtime/supervise/settled-usage.ts
|
|
13897
|
+
/** Use ownership edges to avoid counting parent summaries as additional inference attempts. */
|
|
13898
|
+
function settledUsage(forest, spent, providerModel, profile) {
|
|
13899
|
+
let unknownAttempts = 0;
|
|
13900
|
+
const nodes = new Map(forest.nodes.map((node) => [`${node.treeRoot}\0${node.id}`, node]));
|
|
13901
|
+
for (const tree of forest.trees) {
|
|
13902
|
+
const metered = new Set(tree.events.filter((event) => event.kind === "metered" && !event.accountingOnly).map((event) => event.id));
|
|
13903
|
+
for (const event of tree.events) {
|
|
13904
|
+
if (nodes.get(`${tree.root}\0${event.id}`)?.ownedTreeRoot !== void 0) continue;
|
|
13905
|
+
if (event.kind === "metered" && event.accountingOnly) {
|
|
13906
|
+
if (event.spend.tokensKnown === false || event.spend.tokens.tokensKnown === false) unknownAttempts = null;
|
|
13907
|
+
continue;
|
|
13908
|
+
}
|
|
13909
|
+
let spend;
|
|
13910
|
+
if (event.kind === "metered" && !event.accountingOnly) spend = event.spend;
|
|
13911
|
+
else if ((event.kind === "settled" || event.kind === "cancelled") && !metered.has(event.id)) spend = event.spent;
|
|
13912
|
+
else continue;
|
|
13913
|
+
if (spend && spend.tokensKnown !== false && spend.tokens.tokensKnown !== false) continue;
|
|
13914
|
+
const evidence = event.providerModel;
|
|
13915
|
+
if (evidence?.attempts?.length !== 1) unknownAttempts = null;
|
|
13916
|
+
else if (unknownAttempts !== null && evidence.attempts[0]?.providerDispatch !== "not_started") unknownAttempts++;
|
|
13917
|
+
}
|
|
13918
|
+
}
|
|
13919
|
+
if (forest.inDoubt.length || forest.missingTrees.length) unknownAttempts = null;
|
|
13920
|
+
const status = spent.tokensKnown === true ? "known" : spent.tokens.input > 0 || spent.tokens.output > 0 ? "lower-bound" : "unknown";
|
|
13921
|
+
return {
|
|
13922
|
+
tokens: {
|
|
13923
|
+
status,
|
|
13924
|
+
input: status === "unknown" ? null : spent.tokens.input,
|
|
13925
|
+
output: status === "unknown" ? null : spent.tokens.output,
|
|
13926
|
+
unknownAttempts: status === "known" ? 0 : unknownAttempts === 0 ? null : unknownAttempts
|
|
13927
|
+
},
|
|
13928
|
+
requestedModel: {
|
|
13929
|
+
id: profile?.model?.default ?? null,
|
|
13930
|
+
harness: profile?.harness ?? null,
|
|
13931
|
+
provider: profile?.model?.provider ?? null
|
|
13932
|
+
},
|
|
13933
|
+
observedModels: providerModel.models
|
|
13934
|
+
};
|
|
13935
|
+
}
|
|
13936
|
+
// src/runtime/supervise/supervisor-accounting.ts
|
|
13937
|
+
/** Terminal usage comes from receipts, never admission's conservative reservation charges.
|
|
13938
|
+
* Missing receipts stay named gaps; ms is wall time because parallel executor times overlap. */
|
|
13939
|
+
async function terminalAccounting(journal, root, elapsedMs, profile) {
|
|
13940
|
+
const events = await journal.loadTree(root);
|
|
13941
|
+
if (events === void 0) throw new RuntimeRunStateError(`supervisor: spawn tree '${root}' is missing from the journal after run (corrupted log)`);
|
|
13942
|
+
for (const event of events) {
|
|
13943
|
+
const spend = event.kind === "metered" ? event.spend : event.kind === "settled" || event.kind === "cancelled" || event.kind === "reconciled" ? event.spent : void 0;
|
|
13944
|
+
if (spend !== void 0) assertValidSpend(spend, `settlement ${event.id}/${event.kind}`);
|
|
13945
|
+
}
|
|
13946
|
+
const { childWork, driverInference } = sumMeasuredSpendFromEvents(events);
|
|
13947
|
+
const gaps = spendGapsFromEvents(events);
|
|
13948
|
+
const forest = await loadSpawnForest(journal, root);
|
|
13949
|
+
const providerModel = aggregateProviderModelEvidence(forest);
|
|
13950
|
+
const fleetYield = fleetYieldFromForest(forest);
|
|
13951
|
+
const summed = addSpend(childWork, driverInference);
|
|
13952
|
+
const spentTotal = {
|
|
13953
|
+
...summed,
|
|
13954
|
+
ms: Math.max(0, elapsedMs),
|
|
13955
|
+
tokensKnown: summed.tokensKnown !== false && summed.tokens.tokensKnown !== false && !gaps.some((gap) => gap.channels.includes("tokens")),
|
|
13956
|
+
usdKnown: summed.usdKnown !== false && !gaps.some((gap) => gap.channels.includes("usd"))
|
|
13957
|
+
};
|
|
13958
|
+
assertValidSpend(spentTotal, "settlement total");
|
|
13959
|
+
return {
|
|
13960
|
+
spentTotal,
|
|
13961
|
+
usage: settledUsage(forest, spentTotal, providerModel, profile),
|
|
13962
|
+
childWork,
|
|
13963
|
+
driverInference,
|
|
13964
|
+
gaps,
|
|
13965
|
+
providerModel,
|
|
13966
|
+
fleetYield
|
|
13967
|
+
};
|
|
13968
|
+
}
|
|
13969
|
+
/** Count each child by its last terminal record across the owned forest; roots are exempt. */
|
|
13970
|
+
function fleetYieldFromForest(forest) {
|
|
13971
|
+
const spawned = /* @__PURE__ */ new Set();
|
|
13972
|
+
const terminal = /* @__PURE__ */ new Map();
|
|
13973
|
+
const released = /* @__PURE__ */ new Set();
|
|
13974
|
+
const unconfirmed = /* @__PURE__ */ new Set();
|
|
13975
|
+
for (const { event } of forest.events) if (event.kind === "spawned") {
|
|
13976
|
+
if (event.parent !== void 0) spawned.add(event.id);
|
|
13977
|
+
} else if (event.kind === "settled" || event.kind === "cancelled") {
|
|
13978
|
+
const bucket = event.kind === "cancelled" ? "cancelled" : event.status;
|
|
13979
|
+
terminal.set(event.id, bucket);
|
|
13980
|
+
released.delete(event.id);
|
|
13981
|
+
unconfirmed.delete(event.id);
|
|
13982
|
+
if (bucket !== "done" && event.retainedExecution === "released") released.add(event.id);
|
|
13983
|
+
if (bucket !== "done" && event.retainedExecution === "release-unconfirmed") unconfirmed.add(event.id);
|
|
13984
|
+
}
|
|
13985
|
+
const count = (bucket) => [...terminal.values()].filter((value) => value === bucket).length;
|
|
13986
|
+
const fleetYield = {
|
|
13987
|
+
spawned: spawned.size,
|
|
13988
|
+
done: count("done"),
|
|
13989
|
+
down: count("down"),
|
|
13990
|
+
cancelled: count("cancelled"),
|
|
13991
|
+
neverSettled: forest.inDoubt.length,
|
|
13992
|
+
releasedUnrecovered: released.size,
|
|
13993
|
+
releaseUnconfirmed: unconfirmed.size
|
|
13994
|
+
};
|
|
13995
|
+
if (fleetYield.done + fleetYield.down + fleetYield.cancelled + fleetYield.neverSettled !== fleetYield.spawned) throw new RuntimeRunStateError(`supervisor: fleet yield does not partition the spawned children of '${forest.root}' (${JSON.stringify(fleetYield)})`);
|
|
13996
|
+
if (fleetYield.releasedUnrecovered + fleetYield.releaseUnconfirmed > fleetYield.down + fleetYield.cancelled) throw new RuntimeRunStateError(`supervisor: released children exceed down + cancelled for '${forest.root}' (${JSON.stringify(fleetYield)})`);
|
|
13997
|
+
return fleetYield;
|
|
13998
|
+
}
|
|
13999
|
+
/** Merge missing-receipt channels by node and cause; the root settles in result.json. */
|
|
14000
|
+
function spendGapsFromEvents(events) {
|
|
14001
|
+
const labels = /* @__PURE__ */ new Map();
|
|
14002
|
+
const budgets = /* @__PURE__ */ new Map();
|
|
14003
|
+
const terminal = /* @__PURE__ */ new Set();
|
|
14004
|
+
for (const ev of events) if (ev.kind === "spawned") {
|
|
14005
|
+
labels.set(ev.id, ev.label);
|
|
14006
|
+
budgets.set(ev.id, ev.budget);
|
|
14007
|
+
} else if (closesCursorSlot(ev)) terminal.add(ev.id);
|
|
14008
|
+
const gaps = /* @__PURE__ */ new Map();
|
|
14009
|
+
const record = (id, kind, channels) => {
|
|
14010
|
+
if (channels.length === 0) return;
|
|
14011
|
+
const key = `${kind}:${id}`;
|
|
14012
|
+
const existing = gaps.get(key);
|
|
14013
|
+
if (existing !== void 0) for (const channel of channels) existing.channels.add(channel);
|
|
14014
|
+
else gaps.set(key, {
|
|
14015
|
+
id,
|
|
14016
|
+
kind,
|
|
14017
|
+
channels: new Set(channels)
|
|
14018
|
+
});
|
|
14019
|
+
};
|
|
14020
|
+
for (const ev of events) if (ev.kind === "spawned" && ev.parent !== void 0 && !terminal.has(ev.id)) record(ev.id, "never-settled", [
|
|
14021
|
+
"tokens",
|
|
14022
|
+
"usd",
|
|
14023
|
+
...Object.keys(ev.budget.resources ?? {}).map((name) => `resource:${name}`)
|
|
14024
|
+
]);
|
|
14025
|
+
else if (ev.kind === "cancelled" && ev.spent === void 0) record(ev.id, "unreported", [
|
|
14026
|
+
"tokens",
|
|
14027
|
+
"usd",
|
|
14028
|
+
...Object.keys(budgets.get(ev.id)?.resources ?? {}).map((name) => `resource:${name}`)
|
|
14029
|
+
]);
|
|
14030
|
+
else if (ev.kind === "settled" || ev.kind === "cancelled" && ev.spent !== void 0) record(ev.id, "unreported", unknownChannels(withBudgetResources(ev.spent, budgets.get(ev.id) ?? {})));
|
|
14031
|
+
else if (ev.kind === "metered") record(ev.id, "unreported", unknownChannels(ev.spend));
|
|
14032
|
+
return [...gaps.values()].map((gap) => {
|
|
14033
|
+
const label = labels.get(gap.id);
|
|
14034
|
+
return {
|
|
14035
|
+
id: gap.id,
|
|
14036
|
+
...label !== void 0 ? { label } : {},
|
|
14037
|
+
kind: gap.kind,
|
|
14038
|
+
channels: [...gap.channels]
|
|
14039
|
+
};
|
|
14040
|
+
});
|
|
14041
|
+
}
|
|
14042
|
+
/** The channels a single spend record explicitly marks incomplete. */
|
|
14043
|
+
function unknownChannels(spend) {
|
|
14044
|
+
const channels = [];
|
|
14045
|
+
if (spend.tokensKnown === false || spend.tokens.tokensKnown === false) channels.push("tokens");
|
|
14046
|
+
if (spend.usdKnown === false) channels.push("usd");
|
|
14047
|
+
for (const [name, resource] of Object.entries(spend.resources ?? {})) if (!resource.known) channels.push(`resource:${name}`);
|
|
14048
|
+
return channels;
|
|
14049
|
+
}
|
|
14050
|
+
/** True when any driver metered inference this run (so the winner carries a `spentBreakdown`).
|
|
14051
|
+
* Checks every channel `addSpend` sums — including `ms` — so the gate stays consistent with the
|
|
14052
|
+
* total even though the coordination driver currently stamps `ms: 0`. */
|
|
14053
|
+
function isNonEmptySpend(s) {
|
|
14054
|
+
return s.iterations > 0 || s.tokens.input > 0 || s.tokens.output > 0 || s.usd > 0 || s.ms > 0 || s.tokensKnown === false || s.usdKnown === false || Object.values(s.resources ?? {}).some((resource) => resource.amount > 0 || !resource.known);
|
|
14055
|
+
}
|
|
14056
|
+
export { closeScopeAdmission as $, readBoundHarnessSessions as $n, linkAbort as $r, nestedDriverTreeRoot as $t, replaySpawnTree as A, mergeTraceEnv as An, recordRuntimeOwnedProviderModel as Ar, scopeOwnerExecutionObservation as At, startRetainedInteractiveRun as B, createRuntimeEventCollector as Bn, executableAgentProfileSnapshot as Br, reconcileScopeRetainedOwnerEnvironment as Bt, writeWorkerCancellation as C, verifyObserverRecords as Cn, knownMaterializationReceipt as Cr, scopeRetainedOwnerPriorSpend as Ct, openSlotGroup as D, workerTraceEnv as Dn, recordRuntimeOwnedProviderAttemptStart as Dr, noteScopeOwnerPlannedExecution as Dt, createWorkerSlots as E, WORKER_TRACE_PROPAGATION as En, recordRuntimeOwnedDriveHarnessProviderEvidence as Er, finalizeScopeOwnerMaterialization as Et, interactiveAdmissionSeamKey as F, createOpenInferenceFileExporter as Fn, runtimeOwnedPendingExecutorMaterialization as Fr, runtimeGraphMetadataKey as Ft, reenteredWorkers as G, captureBoundHarnessTranscript as Gn, RetainedRunProviderContractError as Gr, bindScopeRetainedOwnerProvider as Gt, appendSpawnEvents as H, sanitizeKnowledgeReadinessReport as Hn, isRuntimeFlowBrain as Hr, noteScopeRetainedOwnerCoordination as Ht, attachWorker as I, createOtelExporter as In, runtimeOwnedScopeOwnerControl as Ir, beginScopeRetainedOwnerDrive as It, deriveNodeExecutionIdentity as J, harnessTranscriptFromLines as Jn, exactSession as Jr, loadSpawnForest as Jt, settledToIteration as K, captureHarnessTranscript as Kn, assertEventBinding as Kr, scopeRetainedOwnerContext as Kt, readWorkerInteractiveBinding as L, flatOtelSpan as Ln, runtimeOwnedScopeOwnerRuntime as Lr, scopeRetainedOwnerSettled as Lt, parseWorkerToolTraceArtifact as M, buildLoopOtelSpans as Mn, runtimeOwnedExecutorExecutionBinding as Mr, coordinationMcpAlias as Mt, workerTraceAnalysisStore as N, buildLoopSpanNodes as Nn, runtimeOwnedExecutorMaterialization as Nr, coordinationProfileToolPrefix as Nt, resolveWorkerSlots as O, workerTraceHeaders as On, recordRuntimeOwnedProviderDispatchNotStarted as Or, recordScopeOwnerMaterialization as Ot, nestedScopeSeamKey as P, buildRuntimeEventOtelSpans as Pn, runtimeOwnedExecutorProviderEvidence as Pr, providerVisibleProfile as Pt, closeRetainedSlots as Q, HARNESS_TRANSCRIPT_READ_LIMITS as Qn, abortReason as Qr, driverRuntime as Qt, reconnectRetainedInteractiveRun as R, generateSpanId as Rn, unknownExecutionBindingReceipt as Rr, scopeRetainedOwnerTurnEnded as Rt, workerInboxFileFromEventDir as S, observerRecordDigest as Sn, knownExecutionBindingReceipt as Sr, prepareScopeRetainedOwnerTask as St, writeWorkerSteerAcknowledgement as T, environmentGone as Tn, providerAttemptEvidence as Tr, beginScopeOwnerAttempt as Tt, spawnJournalRecordEvents as U, sanitizeRuntimeStreamEvent as Un, runtimeFlowAgent as Ur, scopeRetainedOwnerCheckpointing as Ut, FileSpawnJournal as V, createRuntimeStreamEventCollector as Vn, executableAgentSpecSnapshot as Vr, scopeRetainedOwnerRestorePoint as Vt, appendTeardownConfirmation as W, HARNESS_TRANSCRIPT_SETTLE_TIMEOUT_MS as Wn, runtimeFlowBrain as Wr, bindScopeRetainedOwnerEnvironmentId as Wt, queueOf as X, persistHarnessTranscript as Xn, sameControlCoordinates as Xr, materializeTreeView as Xt, freeSlots as Y, harnessTranscriptUnavailable as Yn, freezeControlRef as Yr, ownedTreeRootSpawn as Yt, rollingDispatch as Z, readHarnessTranscript as Zn, RunCancellationReason as Zr, attestNestedDriverTreeOwner as Zt, readWorkerSteerRequests as _, acceptedInteractiveControl as _n, attestRuntimeOwnedScopeOwner as _r, scopeRetainedOwnerResourceReader as _t, createRootStreamSink as a, executorObservationSeamKey as an, readWorkerProgress as ar, recordScopeOwnerDriverAttempt as at, supervisorRunsRoot as b, FileObserverJournal as bn, finalizeRuntimeOwnedPendingExecutor as br, abandonScopeRetainedOwnerInvocation as bt, readRootStreamReceipt as c, stopRetainedNativeExecution as cn, SEAT_RECHECK_MS as cr, releaseHeldEnvironments as ct, claimWorkerSteerDelivery as d, mintRetainedIdentity as dn, authoredSeatStages as dr, settleManagerWork as dt, runAbortable as ei, FileResultBlobStore as en, resolveHarnessTranscriptCapture as er, hasRetriableTeardowns as et, legacySupervisorRunDir as f, reconnectRetainedRun as fn, seatExecutionProfile as fr, startScopeRecoveries as ft, readWorkerSteerAcknowledgement as g, retainedCreateMaterial as gn, attestRuntimeOwnedPendingExecutor as gr, releaseScopeRetainedOwnerForSeatPause as gt, readWorkerCancellation as h, startRetainedRunInEnvironment as hn, attestRuntimeOwnedExecutor as hr, prepareScopeRetainedOwnerSeatSwitch as ht, ROOT_STREAM_FILE as i, providerMessageText as ii, executorObservation as in, describeToolArgs as ir, recordScopeOwnerBarrenPause as it, isTraceAnalysisStore as j, readTraceContextFromEnv as jn, runtimeOwnedDriveHarnessProviderEvidence as jr, scopeOwnerExecutorNodeContext as jt, prepareScopeResume as k, createPropagatingTraceEmitter as kn, recordRuntimeOwnedProviderIdentityConflict as kr, restoreScopeOwnerAcceptedExecution as kt, appendWorkerControlEvent as l, verifyWorkspaceMarker as ln, SeatChain as lr, releaseRetainedEnvironments as lt, readWorkerCancelRequests as m, startRetainedRun as mn, attestRuntimeOwnedDeferredExecutor as mr, waitForScopeChildren as mt, terminalAccounting as n, promptFromAgentTurnInput as ni, SpawnEventIndex as nn, DEFAULT_STALL_AFTER_MS as nr, meterRuntimeOwnedProviderAttempt as nt, nodeStreamFile as o, observeModelRequest as on, isLiveNodeStatus as or, recordScopeOwnerPause as ot, legacySupervisorRunsRoot as p, recoverRetainedRun as pn, subscriptionUsageLimitSignal as pr, unconfirmedTeardowns as pt, assertRecursiveReservationPolicy as q, harnessTranscriptArtifact as qn, awaitAbortable$1 as qr, scopeRetainedOwnerJournalRoot as qt, createScope as r, promptOptionsFromAgentTurnInput as ri, insideCursorNamespace as rn, createActivityLog as rr, pauseScopeSeatAdmission as rt, readRootStream as s, describeRetainedNativeStops as sn, isTerminalNodeStatus as sr, registerNestedTeardownScope as st, isNonEmptySpend as t, signalAbortError as ti, encodeResultBlob as tn, retainHarnessTranscript as tr, meterRuntimeOwnedAccounting as tt, cancelWorker as u, assertRetainedRunReplayMaterial as un, SeatPauseError as ur, retryUnconfirmedTeardowns as ut, safeWorkerFile as v, offerInteractiveControl as vn, authoredAgentIdentity as vr, environmentReader as vt, writeWorkerSteer as w, destroyInteractiveEnvironment as wn, newExecutionAttemptId as wr, scopeRetainedOwnerResult as wt, workerCancellationsDir as x, createFileObserverHooks as xn, inheritRuntimeOwnedExecutorAttestation as xr, consumeScopeRetainedOwnerResult as xt, supervisorRunDir as y, prepareInteractiveDelegation as yn, authoredProfileDigest as yr, resolveSpawnResourcePaths as yt, recoverRetainedInteractiveRun as z, loopEventToOtelSpan as zn, unknownMaterializationReceipt as zr, assertRetainedOwnerCoordinationRekey as zt };
|
|
13766
14057
|
|
|
13767
|
-
//# sourceMappingURL=
|
|
14058
|
+
//# sourceMappingURL=supervisor-accounting-DxLQ_TQe.js.map
|