@tangle-network/agent-runtime 3.0.22 → 3.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{activation-C4YpgQA6.js → activation-BDTnaeZJ.js} +2 -2
- package/dist/{activation-C4YpgQA6.js.map → activation-BDTnaeZJ.js.map} +1 -1
- package/dist/{activation-CzZ1rH8W.d.ts → activation-CBcWaDyp.d.ts} +2 -2
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +3 -3
- package/dist/{coordination-manager-BmdudTVI.js → coordination-manager-CLh5VPPb.js} +4 -4
- package/dist/{coordination-manager-BmdudTVI.js.map → coordination-manager-CLh5VPPb.js.map} +1 -1
- package/dist/{delegate-Dyvun8Na.js → delegate-BzVCMMWg.js} +2 -2
- package/dist/{delegate-Dyvun8Na.js.map → delegate-BzVCMMWg.js.map} +1 -1
- package/dist/durable.d.ts +1 -1
- package/dist/durable.js +6 -6
- package/dist/{graph-BWsJCPW6.js → graph-COAKyA5_.js} +5 -5
- package/dist/{graph-BWsJCPW6.js.map → graph-COAKyA5_.js.map} +1 -1
- package/dist/{improve-D9ldF3C-.js → improve-DdQMHXae.js} +6 -6
- package/dist/{improve-D9ldF3C-.js.map → improve-DdQMHXae.js.map} +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +8 -8
- package/dist/intelligence.d.ts +2 -2
- package/dist/intelligence.js +4 -4
- package/dist/kernel.d.ts +1 -1
- package/dist/kernel.js +11 -11
- package/dist/{loop-runner-DcRaz06a.d.ts → loop-runner-CgGtE2SB.d.ts} +2 -2
- package/dist/{loop-runner-D_-y7eqc.js → loop-runner-DJFatma_.js} +2 -2
- package/dist/{loop-runner-D_-y7eqc.js.map → loop-runner-DJFatma_.js.map} +1 -1
- 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 +5 -5
- package/dist/profiles.d.ts +1 -1
- package/dist/{provision-supervisor-R7YuENCf.js → provision-supervisor-BclhY3I8.js} +4 -4
- package/dist/{provision-supervisor-R7YuENCf.js.map → provision-supervisor-BclhY3I8.js.map} +1 -1
- package/dist/{run-cancellation-CdWgOBoB.js → run-cancellation-Ct1hGM4a.js} +2 -2
- package/dist/{run-cancellation-CdWgOBoB.js.map → run-cancellation-Ct1hGM4a.js.map} +1 -1
- package/dist/{runtime-BLbGjPQx.js → runtime-DDxYEprc.js} +12 -12
- package/dist/{runtime-BLbGjPQx.js.map → runtime-DDxYEprc.js.map} +1 -1
- package/dist/{scope-CLcWQe2X.js → scope-DKUxbkDo.js} +183 -225
- package/dist/scope-DKUxbkDo.js.map +1 -0
- package/dist/{search-executor-lRg99cow.js → search-executor-TdREPERN.js} +3 -3
- package/dist/{search-executor-lRg99cow.js.map → search-executor-TdREPERN.js.map} +1 -1
- package/dist/{server-BuOiFX51.js → server-z0jrV4t9.js} +3 -3
- package/dist/{server-BuOiFX51.js.map → server-z0jrV4t9.js.map} +1 -1
- package/dist/{structural-rollout-CU-LmJVH.js → structural-rollout-AA3RRmp1.js} +3 -3
- package/dist/{structural-rollout-CU-LmJVH.js.map → structural-rollout-AA3RRmp1.js.map} +1 -1
- package/dist/{supervise-D72qNXcX.js → supervise-DgO5kSvT.js} +36 -112
- package/dist/supervise-DgO5kSvT.js.map +1 -0
- package/dist/{supervision-discovery-DArxjLfh.js → supervision-discovery-CVF1LBXX.js} +2 -2
- package/dist/{supervision-discovery-DArxjLfh.js.map → supervision-discovery-CVF1LBXX.js.map} +1 -1
- package/dist/{supervisor-B4l82aVt.js → supervisor-DM44eBVw.js} +109 -4
- package/dist/supervisor-DM44eBVw.js.map +1 -0
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +11 -11
- package/dist/{top-web-D_HrKp6y.js → top-web-BgbnGWnU.js} +4 -4
- package/dist/{top-web-D_HrKp6y.js.map → top-web-BgbnGWnU.js.map} +1 -1
- package/dist/tui/bin.js +3 -3
- package/dist/tui/index.d.ts +1 -1
- package/dist/tui/index.js +2 -2
- package/dist/{types-a5W2oyhr.d.ts → types-3ZVht8Pk.d.ts} +7 -5
- package/package.json +1 -1
- package/dist/scope-CLcWQe2X.js.map +0 -1
- package/dist/supervise-D72qNXcX.js.map +0 -1
- package/dist/supervisor-B4l82aVt.js.map +0 -1
|
@@ -98,6 +98,147 @@ function promptPartFromInputPart(part) {
|
|
|
98
98
|
url: part.url
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
+
// src/runtime/supervise/abortable.ts
|
|
102
|
+
/** Provenance of an explicit cancellation, preserved through every abort link. */
|
|
103
|
+
var RunCancellationReason = class extends Error {
|
|
104
|
+
source;
|
|
105
|
+
operationId;
|
|
106
|
+
operator;
|
|
107
|
+
constructor(source, reason, operationId, operator) {
|
|
108
|
+
super(reason);
|
|
109
|
+
this.source = source;
|
|
110
|
+
this.operationId = operationId;
|
|
111
|
+
this.operator = operator;
|
|
112
|
+
this.name = "RunCancellationReason";
|
|
113
|
+
}
|
|
114
|
+
toString() {
|
|
115
|
+
return this.message;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* One abort race, and one abort cascade, for the supervision tree.
|
|
120
|
+
*
|
|
121
|
+
* Every layer that can be cancelled needs the same three things: the reason a signal
|
|
122
|
+
* carries, an `AbortError` built from it, and a settle-once race between the work and
|
|
123
|
+
* the signal. Written per layer, each drifts — a listener stops being removed on one
|
|
124
|
+
* path, a late resolution overwrites a cancellation that already won, or a cascade
|
|
125
|
+
* forwards no reason and renames every downstream death to the layer's own fallback.
|
|
126
|
+
*
|
|
127
|
+
* The fallback message is the only thing a layer supplies, so the error still names
|
|
128
|
+
* which layer cancelled.
|
|
129
|
+
*/
|
|
130
|
+
/**
|
|
131
|
+
* The reason a signal carries, or `fallback` when it states none.
|
|
132
|
+
*
|
|
133
|
+
* A cascade that drops the upstream reason turns every downstream death into its own generic
|
|
134
|
+
* message: the worker's `down` record then says nothing about WHY, which makes a whole class of
|
|
135
|
+
* child mortality undiagnosable from the journal alone.
|
|
136
|
+
*/
|
|
137
|
+
function abortReason(signal, fallback) {
|
|
138
|
+
const reason = signal.reason;
|
|
139
|
+
if (reason instanceof RunCancellationReason) return reason;
|
|
140
|
+
if (typeof reason === "string" && reason.length > 0) return reason;
|
|
141
|
+
if (reason instanceof Error && reason.name !== "AbortError" && reason.message.length > 0) return reason.message;
|
|
142
|
+
return fallback;
|
|
143
|
+
}
|
|
144
|
+
/** An `AbortError` carrying the signal's own string reason, or `fallback` when it states none. */
|
|
145
|
+
function signalAbortError(signal, fallback) {
|
|
146
|
+
const reason = abortReason(signal, fallback);
|
|
147
|
+
const error = new Error(reason instanceof Error ? reason.message : typeof reason === "string" && reason.length > 0 ? reason : fallback);
|
|
148
|
+
error.name = "AbortError";
|
|
149
|
+
return error;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Cascade N abort signals into one downstream abort that fires when ANY of them does, carrying
|
|
153
|
+
* that signal's own reason ({@link abortReason}). Node-portable: `AbortSignal.any` needs >=20.3
|
|
154
|
+
* and the package floor is >=20, and it would drop the reason anyway.
|
|
155
|
+
*
|
|
156
|
+
* The one cascade every executor uses, so a reason forwarded here reaches every layer below.
|
|
157
|
+
*/
|
|
158
|
+
function linkAbort(...sources) {
|
|
159
|
+
const controller = new AbortController();
|
|
160
|
+
const listeners = [];
|
|
161
|
+
const release = () => {
|
|
162
|
+
for (const { source, onAbort } of listeners) source.removeEventListener("abort", onAbort);
|
|
163
|
+
listeners.length = 0;
|
|
164
|
+
};
|
|
165
|
+
const abort = (reason) => {
|
|
166
|
+
release();
|
|
167
|
+
controller.abort(reason);
|
|
168
|
+
};
|
|
169
|
+
const alreadyAborted = sources.find((source) => source.aborted);
|
|
170
|
+
if (alreadyAborted !== void 0) {
|
|
171
|
+
controller.abort(abortReason(alreadyAborted, "aborted by parent scope"));
|
|
172
|
+
return {
|
|
173
|
+
signal: controller.signal,
|
|
174
|
+
abort,
|
|
175
|
+
release
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
for (const source of sources) {
|
|
179
|
+
const onAbort = () => abort(abortReason(source, "aborted by parent scope"));
|
|
180
|
+
listeners.push({
|
|
181
|
+
source,
|
|
182
|
+
onAbort
|
|
183
|
+
});
|
|
184
|
+
source.addEventListener("abort", onAbort, { once: true });
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
signal: controller.signal,
|
|
188
|
+
abort,
|
|
189
|
+
release
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Settle `act()` against `signal`. The first outcome wins and the listener is always
|
|
194
|
+
* removed, so neither a late resolution nor a late abort can settle the promise twice.
|
|
195
|
+
* The losing promise stays observed, so a late rejection cannot surface as an unhandled
|
|
196
|
+
* process error.
|
|
197
|
+
*
|
|
198
|
+
* The abort rejection is deferred one microtask so a result the action had ALREADY
|
|
199
|
+
* produced still wins. It does not hand the race to a listener the action registers
|
|
200
|
+
* from inside `act()`: this function subscribes before it calls `act()`, so its own
|
|
201
|
+
* abort handler runs first and settles the promise. A caller that must let the action
|
|
202
|
+
* observe the abort itself has to hold a live promise and await that instead.
|
|
203
|
+
*
|
|
204
|
+
* A synchronous throw from `act()` propagates as the rejection, not as an abort.
|
|
205
|
+
*/
|
|
206
|
+
async function runAbortable(act, signal, fallback) {
|
|
207
|
+
const aborted = () => typeof fallback === "string" ? signalAbortError(signal, fallback) : fallback();
|
|
208
|
+
if (signal.aborted) throw aborted();
|
|
209
|
+
return await new Promise((resolve, reject) => {
|
|
210
|
+
let settled = false;
|
|
211
|
+
const cleanup = () => signal.removeEventListener("abort", onAbort);
|
|
212
|
+
const onAbort = () => {
|
|
213
|
+
queueMicrotask(() => {
|
|
214
|
+
if (settled) return;
|
|
215
|
+
settled = true;
|
|
216
|
+
cleanup();
|
|
217
|
+
reject(aborted());
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
221
|
+
let work;
|
|
222
|
+
try {
|
|
223
|
+
work = Promise.resolve(act());
|
|
224
|
+
} catch (error) {
|
|
225
|
+
cleanup();
|
|
226
|
+
reject(error);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
work.then((value) => {
|
|
230
|
+
if (settled) return;
|
|
231
|
+
settled = true;
|
|
232
|
+
cleanup();
|
|
233
|
+
resolve(value);
|
|
234
|
+
}, (error) => {
|
|
235
|
+
if (settled) return;
|
|
236
|
+
settled = true;
|
|
237
|
+
cleanup();
|
|
238
|
+
reject(error);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
}
|
|
101
242
|
// src/runtime/retained-run-binding.ts
|
|
102
243
|
function exactSession(environment, controlRef) {
|
|
103
244
|
if (environment.id !== controlRef.environmentId || environment.provider !== controlRef.provider) throw new Error("provider reconstructed a different retained environment");
|
|
@@ -171,13 +312,7 @@ function cancellationRequest(controlRef, operationId, reason) {
|
|
|
171
312
|
}
|
|
172
313
|
async function exactSessionCancel(session, request, options) {
|
|
173
314
|
if (!session.cancelRun) throw new Error("provider session does not expose durable cancellation operations");
|
|
174
|
-
|
|
175
|
-
try {
|
|
176
|
-
acknowledgement = await awaitAbortable$1(Promise.resolve().then(() => session.cancelRun(request, options)), options.signal);
|
|
177
|
-
} catch (error) {
|
|
178
|
-
if (error instanceof RetainedRunProviderContractError) throw error;
|
|
179
|
-
throw error;
|
|
180
|
-
}
|
|
315
|
+
const acknowledgement = await awaitAbortable$1(Promise.resolve().then(() => session.cancelRun(request, options)), options.signal);
|
|
181
316
|
let exactAcknowledgement;
|
|
182
317
|
try {
|
|
183
318
|
exactAcknowledgement = AgentRunCancellationAcknowledgementSchema.parse(acknowledgement);
|
|
@@ -192,34 +327,8 @@ function hasDurableCancel(session) {
|
|
|
192
327
|
}
|
|
193
328
|
async function awaitAbortable$1(work, signal) {
|
|
194
329
|
if (signal === void 0) return await work;
|
|
195
|
-
if (signal.aborted)
|
|
196
|
-
|
|
197
|
-
throw abortError(signal.reason);
|
|
198
|
-
}
|
|
199
|
-
return await new Promise((resolve, reject) => {
|
|
200
|
-
let settled = false;
|
|
201
|
-
const cleanup = () => signal.removeEventListener("abort", onAbort);
|
|
202
|
-
const onAbort = () => {
|
|
203
|
-
queueMicrotask(() => {
|
|
204
|
-
if (settled) return;
|
|
205
|
-
settled = true;
|
|
206
|
-
cleanup();
|
|
207
|
-
reject(abortError(signal.reason));
|
|
208
|
-
});
|
|
209
|
-
};
|
|
210
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
211
|
-
Promise.resolve(work).then((value) => {
|
|
212
|
-
if (settled) return;
|
|
213
|
-
settled = true;
|
|
214
|
-
cleanup();
|
|
215
|
-
resolve(value);
|
|
216
|
-
}, (error) => {
|
|
217
|
-
if (settled) return;
|
|
218
|
-
settled = true;
|
|
219
|
-
cleanup();
|
|
220
|
-
reject(error);
|
|
221
|
-
});
|
|
222
|
-
});
|
|
330
|
+
if (signal.aborted) Promise.resolve(work).catch(() => void 0);
|
|
331
|
+
return await runAbortable(() => Promise.resolve(work), signal, () => abortError(signal.reason));
|
|
223
332
|
}
|
|
224
333
|
async function exactSessionResult(session) {
|
|
225
334
|
return session.result();
|
|
@@ -1679,7 +1788,13 @@ function openBudgetLedger(root, runStartedAtMs) {
|
|
|
1679
1788
|
usdMeasured: true,
|
|
1680
1789
|
freeIterations: root.maxIterations,
|
|
1681
1790
|
reservedIterations: 0,
|
|
1682
|
-
committedIterations: 0
|
|
1791
|
+
committedIterations: 0,
|
|
1792
|
+
ownerSpent: {
|
|
1793
|
+
iterations: 0,
|
|
1794
|
+
tokens: zeroTokenUsage(),
|
|
1795
|
+
usd: 0,
|
|
1796
|
+
ms: 0
|
|
1797
|
+
}
|
|
1683
1798
|
};
|
|
1684
1799
|
}
|
|
1685
1800
|
function ledgerValidateUnits(l, spend) {
|
|
@@ -1757,11 +1872,12 @@ function ledgerShortfalls(l, b, keep) {
|
|
|
1757
1872
|
else if (limit > state.remaining) short(`resource:${name}`, limit, state.remaining, state.reserved);
|
|
1758
1873
|
}
|
|
1759
1874
|
if (l.usdCapped && l.usdTainted) short("usd", wantUsd, 0, 0, true);
|
|
1760
|
-
const
|
|
1761
|
-
const
|
|
1875
|
+
const kept = (share = 0, spent) => Math.max(0, share - spent);
|
|
1876
|
+
const tokensFree = l.freeTokens - kept(keep?.tokens, chargedTokens(l.ownerSpent.tokens));
|
|
1877
|
+
const iterationsFree = l.freeIterations - kept(keep?.iterations, l.ownerSpent.iterations);
|
|
1762
1878
|
if (wantTokens > tokensFree) short("tokens", wantTokens, tokensFree, l.reservedTokens);
|
|
1763
1879
|
if (wantIterations > iterationsFree) short("iterations", wantIterations, iterationsFree, l.reservedIterations);
|
|
1764
|
-
const usdFree = l.freeUsd - (keep?.usd
|
|
1880
|
+
const usdFree = l.freeUsd - kept(keep?.usd, l.ownerSpent.usd);
|
|
1765
1881
|
if (l.usdCapped && !l.usdTainted && wantUsd > usdFree) short("usd", wantUsd, usdFree, l.reservedUsd);
|
|
1766
1882
|
return shortfalls;
|
|
1767
1883
|
}
|
|
@@ -1776,11 +1892,8 @@ function ledgerTake(l, b) {
|
|
|
1776
1892
|
l.reservedTokens += b.maxTokens;
|
|
1777
1893
|
l.freeIterations -= b.maxIterations;
|
|
1778
1894
|
l.reservedIterations += b.maxIterations;
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
l.freeUsd -= wantUsd;
|
|
1782
|
-
l.reservedUsd += wantUsd;
|
|
1783
|
-
}
|
|
1895
|
+
l.freeUsd -= b.maxUsd ?? 0;
|
|
1896
|
+
l.reservedUsd += b.maxUsd ?? 0;
|
|
1784
1897
|
}
|
|
1785
1898
|
/**
|
|
1786
1899
|
* The overspends a settlement of `spent` against `held` decides, before any balance moves. An
|
|
@@ -1843,6 +1956,13 @@ function ledgerSettle(l, held, spent, unknownUnderCap) {
|
|
|
1843
1956
|
* turn" the pool must never see.
|
|
1844
1957
|
*/
|
|
1845
1958
|
function ledgerObserve(l, spend, unknownUnderCap, requireAllResources) {
|
|
1959
|
+
debit(l, spend);
|
|
1960
|
+
l.ownerSpent = addSpend(l.ownerSpent, spend);
|
|
1961
|
+
if (unknownUnderCap) l.usdTainted = true;
|
|
1962
|
+
return ledgerCommitResources(l, spend, void 0, requireAllResources);
|
|
1963
|
+
}
|
|
1964
|
+
/** Move measured `spend` from free to committed on the token, iteration and dollar channels. */
|
|
1965
|
+
function debit(l, spend) {
|
|
1846
1966
|
noteUnknowns(l, spend);
|
|
1847
1967
|
const tokens = chargedTokens(spend.tokens);
|
|
1848
1968
|
l.freeTokens -= tokens;
|
|
@@ -1851,8 +1971,6 @@ function ledgerObserve(l, spend, unknownUnderCap, requireAllResources) {
|
|
|
1851
1971
|
l.committedIterations += spend.iterations;
|
|
1852
1972
|
l.committedUsd += spend.usd;
|
|
1853
1973
|
if (l.usdCapped) l.freeUsd -= spend.usd;
|
|
1854
|
-
if (unknownUnderCap) l.usdTainted = true;
|
|
1855
|
-
return ledgerCommitResources(l, spend, void 0, requireAllResources);
|
|
1856
1974
|
}
|
|
1857
1975
|
/**
|
|
1858
1976
|
* Reconstruct the balances from a prior process's durable record. Measured prior spend is debited
|
|
@@ -1861,25 +1979,17 @@ function ledgerObserve(l, spend, unknownUnderCap, requireAllResources) {
|
|
|
1861
1979
|
* the prior spend ALREADY happened, and refusing to record it would be a zero-cost restart.
|
|
1862
1980
|
*/
|
|
1863
1981
|
function ledgerRestore(l, root, restore) {
|
|
1982
|
+
if (restore.owner) l.ownerSpent = addSpend(l.ownerSpent, restore.owner);
|
|
1864
1983
|
if (restore.committed !== void 0) {
|
|
1865
1984
|
const committed = restore.committed;
|
|
1866
1985
|
assertValidSpend(committed, "budget restore committed");
|
|
1867
1986
|
ledgerValidateUnits(l, committed);
|
|
1868
1987
|
ledgerCommitResources(l, committed);
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
l.committedIterations += committed.iterations;
|
|
1875
|
-
l.committedUsd += committed.usd;
|
|
1876
|
-
if (l.usdCapped) {
|
|
1877
|
-
l.freeUsd -= committed.usd;
|
|
1878
|
-
if (committed.usdKnown === false) {
|
|
1879
|
-
l.usdTainted = true;
|
|
1880
|
-
if (l.freeUsd > 0) l.committedUsd += l.freeUsd;
|
|
1881
|
-
l.freeUsd = 0;
|
|
1882
|
-
}
|
|
1988
|
+
debit(l, committed);
|
|
1989
|
+
if (l.usdCapped && committed.usdKnown === false) {
|
|
1990
|
+
l.usdTainted = true;
|
|
1991
|
+
if (l.freeUsd > 0) l.committedUsd += l.freeUsd;
|
|
1992
|
+
l.freeUsd = 0;
|
|
1883
1993
|
}
|
|
1884
1994
|
}
|
|
1885
1995
|
for (const [index, uncertain] of (restore.uncertainReservations ?? []).entries()) {
|
|
@@ -2633,7 +2743,10 @@ const UNAVAILABLE_CODES = /* @__PURE__ */ new Set([
|
|
|
2633
2743
|
"provider_key_invalid",
|
|
2634
2744
|
"rate_limit_exceeded",
|
|
2635
2745
|
"rate_limit_error",
|
|
2636
|
-
"overloaded_error"
|
|
2746
|
+
"overloaded_error",
|
|
2747
|
+
"capacity_exhausted",
|
|
2748
|
+
"host_pressure",
|
|
2749
|
+
"provisioning_paused"
|
|
2637
2750
|
]);
|
|
2638
2751
|
/** 429 Too Many Requests, 503 Service Unavailable, and 529, which Anthropic uses for overload. */
|
|
2639
2752
|
const UNAVAILABLE_STATUSES = /* @__PURE__ */ new Set([
|
|
@@ -2957,7 +3070,6 @@ function prepareRetainedExecutor(factory, input) {
|
|
|
2957
3070
|
}
|
|
2958
3071
|
// src/runtime/failure-cause.ts
|
|
2959
3072
|
const MAX_CAUSE_CHARS = 2048;
|
|
2960
|
-
const MAX_CHAIN_STEPS = 12;
|
|
2961
3073
|
const MACHINE_CODE_PATTERN = /^[A-Za-z][A-Za-z0-9_.-]{0,63}$/u;
|
|
2962
3074
|
/** @internal Canonical producer-supplied remediation, shared by transport and read models. */
|
|
2963
3075
|
const runtimeFailureRemediationSchema = z.object({
|
|
@@ -3034,23 +3146,6 @@ function read(value, key) {
|
|
|
3034
3146
|
return;
|
|
3035
3147
|
}
|
|
3036
3148
|
}
|
|
3037
|
-
/** Every object in a failure's cause chain and aggregate members, bounded and cycle-safe. */
|
|
3038
|
-
function chain(error) {
|
|
3039
|
-
const out = [];
|
|
3040
|
-
const queue = [error];
|
|
3041
|
-
while (queue.length > 0 && out.length < MAX_CHAIN_STEPS) {
|
|
3042
|
-
const value = queue.shift();
|
|
3043
|
-
if (typeof value !== "object" || value === null || out.includes(value)) continue;
|
|
3044
|
-
out.push(value);
|
|
3045
|
-
const members = read(value, "errors");
|
|
3046
|
-
if (Array.isArray(members)) {
|
|
3047
|
-
const limit = Math.min(members.length, MAX_CHAIN_STEPS);
|
|
3048
|
-
for (let index = 0; index < limit; index++) queue.push(read(members, String(index)));
|
|
3049
|
-
}
|
|
3050
|
-
queue.push(read(value, "cause"));
|
|
3051
|
-
}
|
|
3052
|
-
return out;
|
|
3053
|
-
}
|
|
3054
3149
|
const UNATTRIBUTED = {
|
|
3055
3150
|
code: "unknown",
|
|
3056
3151
|
owner: "unknown"
|
|
@@ -3142,7 +3237,7 @@ function runtimeFailureCause(error, context = {}) {
|
|
|
3142
3237
|
const cause = errMessage(error).slice(0, MAX_CAUSE_CHARS);
|
|
3143
3238
|
const caller = context.signal?.aborted ? "aborted" : context.deadlineExpired ? "deadline-exceeded" : void 0;
|
|
3144
3239
|
try {
|
|
3145
|
-
const links =
|
|
3240
|
+
const links = causeChain(error);
|
|
3146
3241
|
const providerCode = upstreamMachineCode(links);
|
|
3147
3242
|
const upstream = links.find((link) => link instanceof BackendTransportError && link.backend === "bridge" && link.status === 403 && link.upstreamCode === "subscription_required" && link.providerDispatch === "not_started");
|
|
3148
3243
|
const remedy = runtimeFailureRemediationSchema.readonly().safeParse(upstream?.remediation);
|
|
@@ -3665,146 +3760,6 @@ function providerAttemptEvidence(model) {
|
|
|
3665
3760
|
models
|
|
3666
3761
|
});
|
|
3667
3762
|
}
|
|
3668
|
-
// src/runtime/supervise/abortable.ts
|
|
3669
|
-
/** Provenance of an explicit cancellation, preserved through every abort link. */
|
|
3670
|
-
var RunCancellationReason = class extends Error {
|
|
3671
|
-
source;
|
|
3672
|
-
operationId;
|
|
3673
|
-
operator;
|
|
3674
|
-
constructor(source, reason, operationId, operator) {
|
|
3675
|
-
super(reason);
|
|
3676
|
-
this.source = source;
|
|
3677
|
-
this.operationId = operationId;
|
|
3678
|
-
this.operator = operator;
|
|
3679
|
-
this.name = "RunCancellationReason";
|
|
3680
|
-
}
|
|
3681
|
-
toString() {
|
|
3682
|
-
return this.message;
|
|
3683
|
-
}
|
|
3684
|
-
};
|
|
3685
|
-
/**
|
|
3686
|
-
* One abort race, and one abort cascade, for the supervision tree.
|
|
3687
|
-
*
|
|
3688
|
-
* Every layer that can be cancelled needs the same three things: the reason a signal
|
|
3689
|
-
* carries, an `AbortError` built from it, and a settle-once race between the work and
|
|
3690
|
-
* the signal. Written per layer, each drifts — a listener stops being removed on one
|
|
3691
|
-
* path, a late resolution overwrites a cancellation that already won, or a cascade
|
|
3692
|
-
* forwards no reason and renames every downstream death to the layer's own fallback.
|
|
3693
|
-
*
|
|
3694
|
-
* The fallback message is the only thing a layer supplies, so the error still names
|
|
3695
|
-
* which layer cancelled.
|
|
3696
|
-
*/
|
|
3697
|
-
/**
|
|
3698
|
-
* The reason a signal carries, or `fallback` when it states none.
|
|
3699
|
-
*
|
|
3700
|
-
* A cascade that drops the upstream reason turns every downstream death into its own generic
|
|
3701
|
-
* message: the worker's `down` record then says nothing about WHY, which makes a whole class of
|
|
3702
|
-
* child mortality undiagnosable from the journal alone.
|
|
3703
|
-
*/
|
|
3704
|
-
function abortReason(signal, fallback) {
|
|
3705
|
-
const reason = signal.reason;
|
|
3706
|
-
if (reason instanceof RunCancellationReason) return reason;
|
|
3707
|
-
if (typeof reason === "string" && reason.length > 0) return reason;
|
|
3708
|
-
if (reason instanceof Error && reason.name !== "AbortError" && reason.message.length > 0) return reason.message;
|
|
3709
|
-
return fallback;
|
|
3710
|
-
}
|
|
3711
|
-
/** An `AbortError` carrying the signal's own string reason, or `fallback` when it states none. */
|
|
3712
|
-
function signalAbortError(signal, fallback) {
|
|
3713
|
-
const reason = abortReason(signal, fallback);
|
|
3714
|
-
const error = new Error(reason instanceof Error ? reason.message : typeof reason === "string" && reason.length > 0 ? reason : fallback);
|
|
3715
|
-
error.name = "AbortError";
|
|
3716
|
-
return error;
|
|
3717
|
-
}
|
|
3718
|
-
/**
|
|
3719
|
-
* Cascade N abort signals into one downstream abort that fires when ANY of them does, carrying
|
|
3720
|
-
* that signal's own reason ({@link abortReason}). Node-portable: `AbortSignal.any` needs >=20.3
|
|
3721
|
-
* and the package floor is >=20, and it would drop the reason anyway.
|
|
3722
|
-
*
|
|
3723
|
-
* The one cascade every executor uses, so a reason forwarded here reaches every layer below.
|
|
3724
|
-
*/
|
|
3725
|
-
function linkAbort(...sources) {
|
|
3726
|
-
const controller = new AbortController();
|
|
3727
|
-
const listeners = [];
|
|
3728
|
-
const release = () => {
|
|
3729
|
-
for (const { source, onAbort } of listeners) source.removeEventListener("abort", onAbort);
|
|
3730
|
-
listeners.length = 0;
|
|
3731
|
-
};
|
|
3732
|
-
const abort = (reason) => {
|
|
3733
|
-
release();
|
|
3734
|
-
controller.abort(reason);
|
|
3735
|
-
};
|
|
3736
|
-
const alreadyAborted = sources.find((source) => source.aborted);
|
|
3737
|
-
if (alreadyAborted !== void 0) {
|
|
3738
|
-
controller.abort(abortReason(alreadyAborted, "aborted by parent scope"));
|
|
3739
|
-
return {
|
|
3740
|
-
signal: controller.signal,
|
|
3741
|
-
abort,
|
|
3742
|
-
release
|
|
3743
|
-
};
|
|
3744
|
-
}
|
|
3745
|
-
for (const source of sources) {
|
|
3746
|
-
const onAbort = () => abort(abortReason(source, "aborted by parent scope"));
|
|
3747
|
-
listeners.push({
|
|
3748
|
-
source,
|
|
3749
|
-
onAbort
|
|
3750
|
-
});
|
|
3751
|
-
source.addEventListener("abort", onAbort, { once: true });
|
|
3752
|
-
}
|
|
3753
|
-
return {
|
|
3754
|
-
signal: controller.signal,
|
|
3755
|
-
abort,
|
|
3756
|
-
release
|
|
3757
|
-
};
|
|
3758
|
-
}
|
|
3759
|
-
/**
|
|
3760
|
-
* Settle `act()` against `signal`. The first outcome wins and the listener is always
|
|
3761
|
-
* removed, so neither a late resolution nor a late abort can settle the promise twice.
|
|
3762
|
-
* The losing promise stays observed, so a late rejection cannot surface as an unhandled
|
|
3763
|
-
* process error.
|
|
3764
|
-
*
|
|
3765
|
-
* The abort rejection is deferred one microtask so a result the action had ALREADY
|
|
3766
|
-
* produced still wins. It does not hand the race to a listener the action registers
|
|
3767
|
-
* from inside `act()`: this function subscribes before it calls `act()`, so its own
|
|
3768
|
-
* abort handler runs first and settles the promise. A caller that must let the action
|
|
3769
|
-
* observe the abort itself has to hold a live promise and await that instead.
|
|
3770
|
-
*
|
|
3771
|
-
* A synchronous throw from `act()` propagates as the rejection, not as an abort.
|
|
3772
|
-
*/
|
|
3773
|
-
async function runAbortable(act, signal, fallback) {
|
|
3774
|
-
if (signal.aborted) throw signalAbortError(signal, fallback);
|
|
3775
|
-
return await new Promise((resolve, reject) => {
|
|
3776
|
-
let settled = false;
|
|
3777
|
-
const cleanup = () => signal.removeEventListener("abort", onAbort);
|
|
3778
|
-
const onAbort = () => {
|
|
3779
|
-
queueMicrotask(() => {
|
|
3780
|
-
if (settled) return;
|
|
3781
|
-
settled = true;
|
|
3782
|
-
cleanup();
|
|
3783
|
-
reject(signalAbortError(signal, fallback));
|
|
3784
|
-
});
|
|
3785
|
-
};
|
|
3786
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
3787
|
-
let work;
|
|
3788
|
-
try {
|
|
3789
|
-
work = Promise.resolve(act());
|
|
3790
|
-
} catch (error) {
|
|
3791
|
-
cleanup();
|
|
3792
|
-
reject(error);
|
|
3793
|
-
return;
|
|
3794
|
-
}
|
|
3795
|
-
work.then((value) => {
|
|
3796
|
-
if (settled) return;
|
|
3797
|
-
settled = true;
|
|
3798
|
-
cleanup();
|
|
3799
|
-
resolve(value);
|
|
3800
|
-
}, (error) => {
|
|
3801
|
-
if (settled) return;
|
|
3802
|
-
settled = true;
|
|
3803
|
-
cleanup();
|
|
3804
|
-
reject(error);
|
|
3805
|
-
});
|
|
3806
|
-
});
|
|
3807
|
-
}
|
|
3808
3763
|
// src/runtime/supervise/seat-chain.ts
|
|
3809
3764
|
var SeatChainExhaustedError = class extends Error {
|
|
3810
3765
|
resumeAt;
|
|
@@ -14733,7 +14688,7 @@ function sumSpendFromEvents(events) {
|
|
|
14733
14688
|
}
|
|
14734
14689
|
return totals;
|
|
14735
14690
|
}
|
|
14736
|
-
function sumMeasuredSpendFromEvents(events) {
|
|
14691
|
+
function sumMeasuredSpendFromEvents(events, ownerId) {
|
|
14737
14692
|
const budgets = new Map(events.flatMap((event) => event.kind === "spawned" ? [[event.id, event.budget]] : []));
|
|
14738
14693
|
let childWork = zeroSpend();
|
|
14739
14694
|
let driverInference = zeroSpend();
|
|
@@ -14752,9 +14707,11 @@ function sumMeasuredSpendFromEvents(events) {
|
|
|
14752
14707
|
}
|
|
14753
14708
|
for (const [id, floor] of floors) childWork = addSpend(childWork, withBudgetResources(floor.spent, budgets.get(id) ?? {}));
|
|
14754
14709
|
for (const [id, spend] of owners) driverInference = addSpend(driverInference, withBudgetResources(spend, budgets.get(id) ?? {}));
|
|
14710
|
+
const owner = ownerId === void 0 ? void 0 : owners.get(ownerId);
|
|
14755
14711
|
return {
|
|
14756
14712
|
childWork,
|
|
14757
|
-
driverInference
|
|
14713
|
+
driverInference,
|
|
14714
|
+
owner
|
|
14758
14715
|
};
|
|
14759
14716
|
}
|
|
14760
14717
|
/** Restore the same journal projection and accounting for root and nested scopes. @internal */
|
|
@@ -14765,13 +14722,14 @@ async function prepareScopeResume(opts, events, signal, now, parentId = opts.run
|
|
|
14765
14722
|
const prior = prepared.events;
|
|
14766
14723
|
const recovering = new Set(prepared.recoveries.map((item) => item.spawned.id));
|
|
14767
14724
|
const measuredEvents = prior.filter((event) => event.kind !== "metered" && event.kind !== "reconciled" || !recovering.has(event.id));
|
|
14768
|
-
const measured = sumMeasuredSpendFromEvents(measuredEvents);
|
|
14725
|
+
const measured = sumMeasuredSpendFromEvents(measuredEvents, parentId);
|
|
14769
14726
|
const hasCommittedEvidence = measuredEvents.some((event) => event.kind === "metered" || event.kind === "reconciled" || event.kind === "settled" || event.kind === "cancelled");
|
|
14770
14727
|
const settled = await replaySpawnTree(opts.journal, opts.blobs, opts.runId);
|
|
14771
14728
|
if (!settleOnly) signal.throwIfAborted();
|
|
14772
14729
|
return {
|
|
14773
14730
|
poolRestore: {
|
|
14774
14731
|
...hasCommittedEvidence ? { committed: addSpend(measured.childWork, measured.driverInference) } : {},
|
|
14732
|
+
owner: measured.owner,
|
|
14775
14733
|
uncertainReservations: uncertainSpawnBudgets(prior, recovering)
|
|
14776
14734
|
},
|
|
14777
14735
|
resumeFrom: {
|
|
@@ -16813,6 +16771,6 @@ async function recoverRetainedChildren(args, children, spawn, next) {
|
|
|
16813
16771
|
throw error;
|
|
16814
16772
|
}
|
|
16815
16773
|
}
|
|
16816
|
-
export { deriveNodeExecutionIdentity as $,
|
|
16774
|
+
export { deriveNodeExecutionIdentity as $, exactSession as $i, persistHarnessTranscript as $n, RetainedExecutionPendingError as $r, insideCursorNamespace as $t, nestedScopeSeamKey as A, sandboxLeafOutputFromEvents as Ai, workerTraceEnv as An, recordRuntimeOwnedProviderDispatchNotStarted as Ar, beginScopeRetainedOwnerDrive as At, beginScopeOwnerAttempt as B, extractLlmCallEvent as Bi, flatOtelSpan as Bn, unknownMaterializationReceipt as Br, retainedOwnerWorkspaceRetentionSeamKey as Bt, writeWorkerSteerAcknowledgement as C, newUsageTotals as Ci, nativeCopyDelayMs as Cn, inheritRuntimeOwnedExecutorAttestation as Cr, environmentReader as Ct, isTraceAnalysisStore as D, createSandboxToolPartState as Di, openSlotGroup as Dn, providerAttemptEvidence as Dr, prepareScopeRetainedOwnerTask as Dt, replaySpawnTree as E, assertValidBudget as Ei, createWorkerSlots as En, newExecutionAttemptId as Er, consumeScopeRetainedOwnerResult as Et, recoverRetainedInteractiveRun as F, extractTransportEventIdentity as Fi, buildLoopOtelSpans as Fn, runtimeOwnedExecutorMaterialization as Fr, scopeRetainedOwnerRestorePoint as Ft, scopeOwnerExecutorNodeContext as G, sandboxTerminalUsageField as Gi, sanitizeKnowledgeReadinessReport as Gn, runtimeFlowBrain as Gr, materializeTreeView as Gt, noteScopeOwnerPlannedExecution as H, notifySandboxEventObserver as Hi, loopEventToOtelSpan as Hn, executableAgentSpecSnapshot as Hr, scopeRetainedOwnerJournalRoot as Ht, startRetainedInteractiveRun as I, assertSandboxServedModel as Ii, buildLoopSpanNodes as In, runtimeOwnedExecutorProviderEvidence as Ir, noteScopeRetainedOwnerCoordination as It, providerVisibleProfile as J, parseCodexUsageRecord as Ji, captureBoundHarnessTranscript as Jn, runtimeFailureCauseSchema as Jr, nestedDriverTreeRoot as Jt, coordinationMcpAlias as K, sumSandboxUsage as Ki, sanitizeRuntimeStreamEvent as Kn, reportedFailureCause as Kr, attestNestedDriverTreeOwner as Kt, FileSpawnJournal as L, canonicalSandboxUsageMode as Li, buildRuntimeEventOtelSpans as Ln, runtimeOwnedPendingExecutorMaterialization as Lr, scopeRetainedOwnerCheckpointing as Lt, attachWorker as M, sandboxProgressEvents as Mi, createPropagatingTraceEmitter as Mn, recordRuntimeOwnedProviderModel as Mr, scopeRetainedOwnerTurnEnded as Mt, readWorkerInteractiveBinding as N, terminalTextFromSandboxEvent as Ni, mergeTraceEnv as Nn, runtimeOwnedDriveHarnessProviderEvidence as Nr, assertRetainedOwnerCoordinationRekey as Nt, parseWorkerToolTraceArtifact as O, mapSandboxEvent as Oi, resolveWorkerSlots as On, recordRuntimeOwnedDriveHarnessProviderEvidence as Or, scopeRetainedOwnerPriorSpend as Ot, reconnectRetainedInteractiveRun as P, canonicalStreamEventFromSandboxEvent as Pi, readTraceContextFromEnv as Pn, runtimeOwnedExecutorExecutionBinding as Pr, reconcileScopeRetainedOwnerEnvironment as Pt, assertRecursiveReservationPolicy as Q, awaitAbortable$1 as Qi, harnessTranscriptUnavailable as Qn, DISPATCH_NOT_ADMITTED_CODE as Qr, closesCursorSlot as Qt, appendSpawnEvents as R, createSandboxTurnEventCollector as Ri, createOpenInferenceFileExporter as Rn, runtimeOwnedScopeOwnerRuntime as Rr, bindScopeRetainedOwnerEnvironmentId as Rt, writeWorkerSteer as S, meterUsageEvent as Si, captureProviderWorkspaceSnapshot as Sn, finalizeRuntimeOwnedPendingExecutor as Sr, scopeRetainedOwnerResourceReader as St, sumSpendFromEvents as T, spendFromUsageTotals as Ti, workspaceCaptureReceipt as Tn, knownMaterializationReceipt as Tr, abandonScopeRetainedOwnerInvocation as Tt, recordScopeOwnerMaterialization as U, sameModelId as Ui, createRuntimeEventCollector as Un, isRuntimeFlowBrain as Ur, loadSpawnForest as Ut, finalizeScopeOwnerMaterialization as V, isSandboxTerminalEvent as Vi, generateSpanId as Vn, executableAgentProfileSnapshot as Vr, scopeRetainedOwnerContext as Vt, restoreScopeOwnerAcceptedExecution as W, sandboxEventServedBackend as Wi, createRuntimeStreamEventCollector as Wn, runtimeFlowAgent as Wr, ownedTreeRootSpawn as Wt, reenteredWorkers as X, RetainedRunProviderContractError as Xi, harnessTranscriptArtifact as Xn, runtimeProviderCode as Xr, encodeResultBlob as Xt, runtimeGraphMetadataKey as Y, recordValue as Yi, captureHarnessTranscript as Yn, runtimeFailureRemediationSchema as Yr, FileResultBlobStore as Yt, settledToIteration as Z, assertEventBinding as Zi, harnessTranscriptFromLines as Zn, settlementFailureCause as Zr, SpawnEventIndex as Zt, supervisorRunDir as _, executorFailure as _i, destroyInteractiveEnvironment as _n, attestRuntimeOwnedExecutor as _r, startScopeRecoveries as _t, readRootStream as a, runAbortable as aa, retainedExecutorSeamKey as ai, reconnectRetainedRun as an, DEFAULT_STALL_AFTER_MS as ar, hasRetriableTeardowns as at, workerInboxFileFromEventDir as b, isCredentialRefusal as bi, assertProviderWorkspaceRetentionPort as bn, authoredAgentIdentity as br, prepareScopeRetainedOwnerSeatSwitch as bt, cancelWorker as c, promptOptionsFromAgentTurnInput as ca, cappedDoublingMs as ci, startRetainedRunInEnvironment as cn, readWorkerProgress as cr, recordScopeOwnerBarrenPause as ct, legacySupervisorRunsRoot as d, unavailableResumeAt as di, offerInteractiveControl as dn, SeatChain as dr, registerNestedTeardownScope as dt, freezeControlRef as ea, TRANSPORT_ERROR_CODES as ei, verifyWorkspaceMarker as en, readHarnessTranscript as er, freeSlots as et, readWorkerCancelRequests as f, unavailableSignalOfFailure as fi, prepareInteractiveDelegation as fn, SeatChainExhaustedError as fr, releaseHeldEnvironments as ft, safeWorkerFile as g, contentRef as gi, verifyObserverRecords as gn, attestRuntimeOwnedDeferredExecutor as gr, settleManagerWork as gt, readWorkerSteerRequests as h, contentAddress as hi, observerRecordDigest as hn, subscriptionUsageLimitSignal as hr, retryUnconfirmedTeardowns as ht, nodeStreamFile as i, linkAbort as ia, retainedExecutorContext as ii, mintRetainedIdentity as in, retainHarnessTranscript as ir, closeScopeAdmission as it, interactiveAdmissionSeamKey as j, sandboxOutputMarker as ji, workerTraceHeaders as jn, recordRuntimeOwnedProviderIdentityConflict as jr, scopeRetainedOwnerSettled as jt, workerTraceAnalysisStore as k, mapSandboxToolEvent as ki, WORKER_TRACE_PROPAGATION as kn, recordRuntimeOwnedProviderAttemptStart as kr, scopeRetainedOwnerResult as kt, claimWorkerSteerDelivery as l, providerMessageText as la, jitteredMs as li, retainedCreateMaterial as ln, isLiveNodeStatus as lr, recordScopeOwnerDriverAttempt as lt, readWorkerSteerAcknowledgement as m, TRACE_SUMMARY_SCHEMA as mi, createFileObserverHooks as mn, seatExecutionProfile as mr, releaseRetainedEnvironments as mt, ROOT_STREAM_FILE as n, RunCancellationReason as na, isSchemaRejection as ni, stopRetainedNativeExecution as nn, readBoundHarnessSessions as nr, rollingDispatch as nt, readRootStreamReceipt as o, signalAbortError as oa, UNAVAILABLE_CODES as oi, recoverRetainedRun as on, createActivityLog as or, meterRuntimeOwnedAccounting as ot, readWorkerCancellation as p, TRACE_ROOT_SCHEMA as pi, FileObserverJournal as pn, authoredSeatStages as pr, releaseManagerEnvironment as pt, coordinationProfileToolPrefix as q, decodeHarnessUsage as qi, HARNESS_TRANSCRIPT_SETTLE_TIMEOUT_MS as qn, runtimeFailureCause as qr, driverRuntime as qt, createRootStreamSink as r, abortReason as ra, registerRetainedExecutorPreparation as ri, assertRetainedRunReplayMaterial as rn, resolveHarnessTranscriptCapture as rr, closeRetainedSlots as rt, appendWorkerControlEvent as s, promptFromAgentTurnInput as sa, UNAVAILABLE_STATUSES as si, startRetainedRun as sn, describeToolArgs as sr, meterRuntimeOwnedProviderAttempt as st, createScope as t, sameControlCoordinates as ta, isProvisioningRefusal as ti, describeRetainedNativeStops as tn, HARNESS_TRANSCRIPT_READ_LIMITS as tr, queueOf as tt, legacySupervisorRunDir as u, unavailablePauseMs as ui, acceptedInteractiveControl as un, isTerminalNodeStatus as ur, recordScopeOwnerPause as ut, supervisorRunsRoot as v, hashJson as vi, environmentGone as vn, attestRuntimeOwnedPendingExecutor as vr, unconfirmedTeardowns as vt, prepareScopeResume as w, spendFromUsageEvents as wi, openNativeMirror as wn, knownExecutionBindingReceipt as wr, resolveSpawnResourcePaths as wt, writeWorkerCancellation as x, createBudgetPool as xi, captureProviderLiveWorkspace as xn, authoredProfileDigest as xr, releaseScopeRetainedOwnerForSeatPause as xt, workerCancellationsDir as y, credentialCommandExit as yi, DEFAULT_NATIVE_CAPTURE_INTERVAL_MS as yn, attestRuntimeOwnedScopeOwner as yr, waitForScopeChildren as yt, spawnJournalRecordEvents as z, createSandboxUsageLedger as zi, createOtelExporter as zn, unknownExecutionBindingReceipt as zr, bindScopeRetainedOwnerProvider as zt };
|
|
16817
16775
|
|
|
16818
|
-
//# sourceMappingURL=scope-
|
|
16776
|
+
//# sourceMappingURL=scope-DKUxbkDo.js.map
|