@tangle-network/agent-runtime 0.185.2 → 0.188.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/dist/{activation-wYQYXdaN.js → activation-CpEoQaj5.js} +3 -3
- package/dist/{activation-wYQYXdaN.js.map → activation-CpEoQaj5.js.map} +1 -1
- package/dist/agent.d.ts +2 -2
- package/dist/agent.js +3 -3
- package/dist/{analyst-loop-DCTra9Qy.js → analyst-loop-CSH7P-Bf.js} +2 -2
- package/dist/{analyst-loop-DCTra9Qy.js.map → analyst-loop-CSH7P-Bf.js.map} +1 -1
- package/dist/analyst-loop.d.ts +1 -1
- package/dist/analyst-loop.js +1 -1
- package/dist/{authoring-DPBWqmKI.js → authoring-fsUwd9hg.js} +2 -2
- package/dist/{authoring-DPBWqmKI.js.map → authoring-fsUwd9hg.js.map} +1 -1
- package/dist/candidate-execution/index.js +4 -4
- package/dist/{candidate-execution-7lVEly33.js → candidate-execution-CehLeZmx.js} +4 -4
- package/dist/{candidate-execution-7lVEly33.js.map → candidate-execution-CehLeZmx.js.map} +1 -1
- package/dist/{conversation-DOuYw0ke.js → conversation-DILnmy84.js} +2 -2
- package/dist/{conversation-DOuYw0ke.js.map → conversation-DILnmy84.js.map} +1 -1
- package/dist/conversation.d.ts +1 -1
- package/dist/conversation.js +1 -1
- package/dist/{coordination-driver-CMA8JjHm.js → coordination-driver-CtbyZv5d.js} +4 -4
- package/dist/{coordination-driver-CMA8JjHm.js.map → coordination-driver-CtbyZv5d.js.map} +1 -1
- package/dist/durable.d.ts +24 -3
- package/dist/durable.js +12 -2
- package/dist/durable.js.map +1 -1
- package/dist/environment-provider-C4AQiUxj.d.ts +143 -0
- package/dist/{environment-provider-CoHsIFp5.js → environment-provider-DZxuH3E4.js} +55 -8
- package/dist/environment-provider-DZxuH3E4.js.map +1 -0
- package/dist/environment-provider.d.ts +2 -2
- package/dist/environment-provider.js +1 -1
- package/dist/{graph-BE92JgZp.js → graph-Cox_7pht.js} +92 -4
- package/dist/graph-Cox_7pht.js.map +1 -0
- package/dist/graph.d.ts +3 -3
- package/dist/graph.js +5 -5
- package/dist/{improvement-cycle-DpZ-QVJ7.js → improvement-cycle-BYHefgVo.js} +6 -6
- package/dist/{improvement-cycle-DpZ-QVJ7.js.map → improvement-cycle-BYHefgVo.js.map} +1 -1
- package/dist/{index-DHSZjuLC.d.ts → index-DA9jKuJc.d.ts} +3 -3
- package/dist/{index-BhtdFMnG.d.ts → index-DVob1IA1.d.ts} +117 -14
- package/dist/{index-Dg2UXocB.d.ts → index-DdmozvB8.d.ts} +4 -4
- package/dist/index.d.ts +9 -9
- package/dist/index.js +13 -13
- package/dist/intelligence.d.ts +5 -5
- package/dist/intelligence.js +6 -6
- package/dist/kernel.d.ts +7 -7
- package/dist/kernel.js +13 -13
- package/dist/{knowledge-ChNVQklk.js → knowledge-Bj1rDycX.js} +5 -5
- package/dist/{knowledge-ChNVQklk.js.map → knowledge-Bj1rDycX.js.map} +1 -1
- package/dist/knowledge.d.ts +1 -1
- package/dist/knowledge.js +1 -1
- package/dist/{loop-runner-bin-JEk_AK4l.js → loop-runner-bin-DgmtU0F0.js} +4 -4
- package/dist/{loop-runner-bin-JEk_AK4l.js.map → loop-runner-bin-DgmtU0F0.js.map} +1 -1
- package/dist/{loop-runner-bin-NanoP_bG.d.ts → loop-runner-bin-g9fWDuOh.d.ts} +3 -3
- 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 +6 -6
- package/dist/mcp/index.js +6 -6
- package/dist/{openai-tools-Cbk5uBUu.d.ts → openai-tools-BDwAdxk5.d.ts} +2 -2
- package/dist/{openai-tools-5SoV8xqN.js → openai-tools-Cz04RKfD.js} +2 -2
- package/dist/{openai-tools-5SoV8xqN.js.map → openai-tools-Cz04RKfD.js.map} +1 -1
- package/dist/{prepare-Tip-2ZoZ.js → prepare-BpIGs5Tc.js} +123 -40
- package/dist/prepare-BpIGs5Tc.js.map +1 -0
- package/dist/primeintellect/index.d.ts +1 -1
- package/dist/profiles.d.ts +2 -2
- package/dist/{protected-model-port-Dd3a1SRm.js → protected-model-port-YclORl0x.js} +2 -2
- package/dist/{protected-model-port-Dd3a1SRm.js.map → protected-model-port-YclORl0x.js.map} +1 -1
- package/dist/{provision-supervisor-DptgdNBI.js → provision-supervisor-B-_4I1In.js} +5 -5
- package/dist/{provision-supervisor-DptgdNBI.js.map → provision-supervisor-B-_4I1In.js.map} +1 -1
- package/dist/{redact-BYcuQ6R_.d.ts → redact-C9EWk1FT.d.ts} +3 -3
- package/dist/{runtime-DtzMGguV.js → runtime-DN0SxAaM.js} +13 -13
- package/dist/{runtime-DtzMGguV.js.map → runtime-DN0SxAaM.js.map} +1 -1
- package/dist/{runtime-B-DLSfE5.d.ts → runtime-EQgE3942.d.ts} +23 -7
- package/dist/{sandbox-events-DGXLxiuX.js → sandbox-events-DWeQRWxg.js} +4 -2
- package/dist/sandbox-events-DWeQRWxg.js.map +1 -0
- package/dist/{spawn-journal--N8Ten1q.js → spawn-journal-CxRa-NJ2.js} +2 -2
- package/dist/{spawn-journal--N8Ten1q.js.map → spawn-journal-CxRa-NJ2.js.map} +1 -1
- package/dist/{stream-agent-turn-DY-y9yW1.d.ts → stream-agent-turn-BomJ21AK.d.ts} +3 -3
- package/dist/{stream-agent-turn-C82amSXX.js → stream-agent-turn-DWWe_7bh.js} +2 -2
- package/dist/{stream-agent-turn-C82amSXX.js.map → stream-agent-turn-DWWe_7bh.js.map} +1 -1
- package/dist/{structural-rollout-BXxt_yLq.js → structural-rollout-DPmVZaLI.js} +4 -4
- package/dist/{structural-rollout-BXxt_yLq.js.map → structural-rollout-DPmVZaLI.js.map} +1 -1
- package/dist/{substrate-RrmNZoL3.d.ts → substrate-qLePHqvH.d.ts} +2 -2
- package/dist/{supervise-CgVFzWv-.js → supervise-BUy1cr2L.js} +245 -29
- package/dist/supervise-BUy1cr2L.js.map +1 -0
- package/dist/{supervisor-D7FrKvu6.js → supervisor-BSNkaM2a.js} +149 -20
- package/dist/supervisor-BSNkaM2a.js.map +1 -0
- package/dist/testing.d.ts +2 -2
- package/dist/testing.js +13 -13
- package/dist/tui/index.d.ts +1 -1
- package/dist/tui/index.js +1 -1
- package/dist/{types-B-rWcun_.d.ts → types-BbkiJR1D.d.ts} +37 -4
- package/dist/{types-CrTTgig6.d.ts → types-BdolQ6Zi.d.ts} +20 -1
- package/dist/{util-D6ZEuBMi.js → util-BfoW6RU7.js} +53 -4
- package/dist/util-BfoW6RU7.js.map +1 -0
- package/dist/{workspace-archive-ByonPBl-.js → workspace-archive-5K72EnlT.js} +2 -2
- package/dist/{workspace-archive-ByonPBl-.js.map → workspace-archive-5K72EnlT.js.map} +1 -1
- package/package.json +8 -8
- package/dist/environment-provider-CoHsIFp5.js.map +0 -1
- package/dist/environment-provider-CzohJCuk.d.ts +0 -89
- package/dist/graph-BE92JgZp.js.map +0 -1
- package/dist/prepare-Tip-2ZoZ.js.map +0 -1
- package/dist/sandbox-events-DGXLxiuX.js.map +0 -1
- package/dist/supervise-CgVFzWv-.js.map +0 -1
- package/dist/supervisor-D7FrKvu6.js.map +0 -1
- package/dist/util-D6ZEuBMi.js.map +0 -1
package/dist/testing.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Ho as SuperviseTestOptions, Nn as runGraphWithTestBrain, Wo as superviseWithTestBrain, cr as driverAgent, ds as supervisorAgentWithTestBrain, kn as RunGraphTestOptions, ns as SupervisorAgentTestDeps, sr as DriverAgentOptions } from "./index-
|
|
2
|
-
import { St as ToolLoopChat, xt as ToolLoopCallContext } from "./runtime-
|
|
1
|
+
import { Ho as SuperviseTestOptions, Nn as runGraphWithTestBrain, Wo as superviseWithTestBrain, cr as driverAgent, ds as supervisorAgentWithTestBrain, kn as RunGraphTestOptions, ns as SupervisorAgentTestDeps, sr as DriverAgentOptions } from "./index-DVob1IA1.js";
|
|
2
|
+
import { St as ToolLoopChat, xt as ToolLoopCallContext } from "./runtime-EQgE3942.js";
|
|
3
3
|
import { AgentImprovementProposal, AgentProfile, AgentProfileImprovementMeasuredComparison, SandboxSizePreset } from "@tangle-network/agent-interface";
|
|
4
4
|
//#region src/testing/index.d.ts
|
|
5
5
|
/** A proposal produced by Runtime's opaque profile-improvement path. */
|
package/dist/testing.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ct as immutableCandidateValue, et as parseExactAgentProfile, it as canonicalCandidateDigest$1, q as applyExactAgentProfileDiff } from "./prepare-
|
|
2
|
-
import { f as verifyAgentImprovementProposal } from "./improvement-cycle-
|
|
3
|
-
import { r as driverAgent } from "./coordination-driver-
|
|
4
|
-
import { c as supervisorAgentWithTestBrain, r as superviseWithTestBrain } from "./supervise-
|
|
5
|
-
import { i as runGraphWithTestBrain } from "./graph-
|
|
1
|
+
import { ct as immutableCandidateValue, et as parseExactAgentProfile, it as canonicalCandidateDigest$1, q as applyExactAgentProfileDiff } from "./prepare-BpIGs5Tc.js";
|
|
2
|
+
import { f as verifyAgentImprovementProposal } from "./improvement-cycle-BYHefgVo.js";
|
|
3
|
+
import { r as driverAgent } from "./coordination-driver-CtbyZv5d.js";
|
|
4
|
+
import { c as supervisorAgentWithTestBrain, r as superviseWithTestBrain } from "./supervise-BUy1cr2L.js";
|
|
5
|
+
import { i as runGraphWithTestBrain } from "./graph-Cox_7pht.js";
|
|
6
6
|
import { SANDBOX_SIZE_PRESET_NAMES } from "@tangle-network/agent-interface";
|
|
7
7
|
//#region src/testing/fixtures/agent-improvement-proposal.json
|
|
8
8
|
var agent_improvement_proposal_default = {
|
|
9
9
|
changedSurfaces: ["prompt"],
|
|
10
|
-
digest: "sha256:
|
|
10
|
+
digest: "sha256:5e55f3b7401ac8a958b82c582d526e1bd8bd9bf4235b77c292e5a7a4e1003b42",
|
|
11
11
|
evaluation: {
|
|
12
12
|
"decision": {
|
|
13
13
|
"contributingChecks": [
|
|
@@ -4578,7 +4578,7 @@ var agent_improvement_proposal_default = {
|
|
|
4578
4578
|
],
|
|
4579
4579
|
"metadata": {
|
|
4580
4580
|
"fixture": "agent-improvement-proposal",
|
|
4581
|
-
"runtimeVersion": "0.
|
|
4581
|
+
"runtimeVersion": "0.188.0"
|
|
4582
4582
|
},
|
|
4583
4583
|
"objectives": [
|
|
4584
4584
|
{
|
|
@@ -4689,8 +4689,8 @@ var agent_improvement_proposal_default = {
|
|
|
4689
4689
|
"baselineContentHash": "sha256:5c21ee53e513fc604cb09754e21c392b24a424da0ef37dbf8f1ee4a8a0b08f09",
|
|
4690
4690
|
"candidateContentHash": "sha256:60fcbb1c728194bd51d7d19cb732d1c3f1881dce7e0a6266b41c8b98cfd65693",
|
|
4691
4691
|
"kind": "agent-eval-loop",
|
|
4692
|
-
"recordDigest": "sha256:
|
|
4693
|
-
"runId": "agent-runtime-0.
|
|
4692
|
+
"recordDigest": "sha256:2b07977aec379937241f7446dc70914d02dc48b369fc7c675645e8a5744568c1",
|
|
4693
|
+
"runId": "agent-runtime-0.188.0-proposal-fixture",
|
|
4694
4694
|
"schema": "agent-candidate-experiment"
|
|
4695
4695
|
}
|
|
4696
4696
|
},
|
|
@@ -4713,13 +4713,13 @@ var agent_improvement_proposal_default = {
|
|
|
4713
4713
|
}],
|
|
4714
4714
|
kind: "agent-improvement-proposal",
|
|
4715
4715
|
proposedAt: "2026-07-10T01:00:00.000Z",
|
|
4716
|
-
runId: "agent-runtime-0.
|
|
4716
|
+
runId: "agent-runtime-0.188.0-proposal-fixture"
|
|
4717
4717
|
};
|
|
4718
4718
|
//#endregion
|
|
4719
4719
|
//#region src/testing/fixtures/agent-profile-improvement-proposal.json
|
|
4720
4720
|
var agent_profile_improvement_proposal_default = {
|
|
4721
4721
|
changedSurfaces: ["prompt", "skills"],
|
|
4722
|
-
digest: "sha256:
|
|
4722
|
+
digest: "sha256:ed1dd026e80e8e3ec2921a7142aef499031773fc731e8bf5244dce7fce007c83",
|
|
4723
4723
|
evaluation: {
|
|
4724
4724
|
"decision": {
|
|
4725
4725
|
"contributingChecks": [
|
|
@@ -6353,7 +6353,7 @@ var agent_profile_improvement_proposal_default = {
|
|
|
6353
6353
|
],
|
|
6354
6354
|
"metadata": {
|
|
6355
6355
|
"fixture": "agent-profile-improvement-proposal",
|
|
6356
|
-
"runtimeVersion": "0.
|
|
6356
|
+
"runtimeVersion": "0.188.0"
|
|
6357
6357
|
},
|
|
6358
6358
|
"objectives": [
|
|
6359
6359
|
{
|
|
@@ -6464,7 +6464,7 @@ var agent_profile_improvement_proposal_default = {
|
|
|
6464
6464
|
"baselineContentHash": "sha256:21c495a37c418c10bde64fbaa188beddeed31f1f051ea60a6a6582a9ee0db704",
|
|
6465
6465
|
"candidateContentHash": "sha256:103f77bc8481601eef1ad5fe6ba84a40dffabc3a44f421f8c8559121edab84e9",
|
|
6466
6466
|
"kind": "agent-eval-loop",
|
|
6467
|
-
"recordDigest": "sha256:
|
|
6467
|
+
"recordDigest": "sha256:ade7564ecc8030331079cb415e087d2b1d16ea24b25f5546d53dcbf765264538",
|
|
6468
6468
|
"runId": "profile-improvement-1",
|
|
6469
6469
|
"schema": "agent-profile-improvement-experiment"
|
|
6470
6470
|
}
|
package/dist/tui/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { an as provisionSupervisor, in as SupervisorCleanupReceipt, nn as ProvisionSupervisorRequest, rn as ProvisionedSupervisor, tn as ProvisionSupervisorConnection } from "../index-
|
|
1
|
+
import { an as provisionSupervisor, in as SupervisorCleanupReceipt, nn as ProvisionSupervisorRequest, rn as ProvisionedSupervisor, tn as ProvisionSupervisorConnection } from "../index-DVob1IA1.js";
|
|
2
2
|
//#region src/tui/top-app.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* The interactive side of the supervisor-run TUI: a keypress/mouse loop over the frames
|
package/dist/tui/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as provisionSupervisor } from "../provision-supervisor-
|
|
1
|
+
import { t as provisionSupervisor } from "../provision-supervisor-B-_4I1In.js";
|
|
2
2
|
import { a as renderTopFrameWithLayout, i as renderTopFrame, n as runTopApp, r as loadTopSnapshot, t as renderTopOnce } from "../top-app-DIBApkt1.js";
|
|
3
3
|
export { loadTopSnapshot, provisionSupervisor, renderTopFrame, renderTopFrameWithLayout, renderTopOnce, runTopApp };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { J as AgentTaskStatus, U as AgentRuntimeEvent, at as RuntimeStreamEvent, v as LoopTokenUsage, y as LoopTraceEmitter } from "./types-
|
|
1
|
+
import { J as AgentTaskStatus, U as AgentRuntimeEvent, at as RuntimeStreamEvent, v as LoopTokenUsage, y as LoopTraceEmitter } from "./types-BdolQ6Zi.js";
|
|
2
2
|
import { l as RuntimeHooks } from "./runtime-hooks-Bj6wJHlH.js";
|
|
3
3
|
import { AgentExactRunControlRef, AgentInteractiveSession, AgentInteractiveSessionPromptAcknowledgement, AgentInteractiveSessionPromptCommand, AgentInteractiveSessionRef, AgentInteractiveSessionStart, AgentNativeContextContinuationOptions, AgentNativeContextContinuationResult, AgentProfile, AgentSessionStatus, ChildTaskEvent, ContextTransferRequest, HarnessType, InteractionAcknowledgement, InteractionRequest, InteractionResponseCommand, NativeContextBoundaryProof, NativeContextContinuationRequest, NativeContextContinuationTurn, RuntimeEventEnvelope, Sha256Digest } from "@tangle-network/agent-interface";
|
|
4
4
|
import { ControlEvalResult, DefaultVerdict, KnowledgeReadinessReport, KnowledgeRequirement, ToolSpan } from "@tangle-network/agent-eval";
|
|
@@ -1599,8 +1599,14 @@ interface Budget {
|
|
|
1599
1599
|
readonly maxUsd?: number;
|
|
1600
1600
|
readonly deadlineMs?: number;
|
|
1601
1601
|
}
|
|
1602
|
-
/**
|
|
1603
|
-
*
|
|
1602
|
+
/**
|
|
1603
|
+
* Conserved spend, reconciled from the normalized `UsageEvent` stream. Tokens and usd are separate
|
|
1604
|
+
* channels (never folded).
|
|
1605
|
+
*
|
|
1606
|
+
* `boxMinutes` is a REPORTED channel, not a conserved one: it is summed across a run and carried
|
|
1607
|
+
* in the journal, and the budget pool never reserves, commits, or refunds against it. `budget.ts`
|
|
1608
|
+
* holds the reason.
|
|
1609
|
+
*/
|
|
1604
1610
|
interface Spend {
|
|
1605
1611
|
iterations: number;
|
|
1606
1612
|
tokens: LoopTokenUsage;
|
|
@@ -1620,6 +1626,33 @@ interface Spend {
|
|
|
1620
1626
|
* measured. */
|
|
1621
1627
|
usdEstimated?: number;
|
|
1622
1628
|
ms: number;
|
|
1629
|
+
/**
|
|
1630
|
+
* Platform box wall time in minutes — the third conserved channel, beside tokens and dollars.
|
|
1631
|
+
*
|
|
1632
|
+
* A run on a subscription seat has no marginal dollar per model call, so box time is the only
|
|
1633
|
+
* real resource it consumes. Before this channel existed such a run reported `$0` with nothing
|
|
1634
|
+
* beside it and was unaccountable by construction.
|
|
1635
|
+
*
|
|
1636
|
+
* ABSENT when nothing was measured. Never `0` for unknown: a zero would claim the box consumed
|
|
1637
|
+
* no platform time, which is a different fact from a box nobody metered. The field is absent
|
|
1638
|
+
* entirely on a run with no box (router, cli-bridge, inline), because "not applicable" is not
|
|
1639
|
+
* the same fact as "unmeasured" either.
|
|
1640
|
+
*/
|
|
1641
|
+
boxMinutes?: number;
|
|
1642
|
+
/** True when this record states its box time. `false` says a box RAN and its lifetime could not
|
|
1643
|
+
* be paired, so `boxMinutes` — when present at all — is a floor, never the total. The twin of
|
|
1644
|
+
* `tokensKnown` and `usdKnown` on the platform channel. */
|
|
1645
|
+
boxMinutesKnown?: boolean;
|
|
1646
|
+
/**
|
|
1647
|
+
* How `boxMinutes` was obtained, in the vocabulary `agent-eval`'s cost ledger already uses
|
|
1648
|
+
* (`CostProvenance`, `cost-ledger.ts`).
|
|
1649
|
+
*
|
|
1650
|
+
* `'observed'` — the platform itself reported the minutes.
|
|
1651
|
+
* `'estimated'` — this runtime derived them from the box lifetime it watched. A derived number
|
|
1652
|
+
* is not a platform receipt, and the conserved pool never reserves against it.
|
|
1653
|
+
* `'uncaptured'` — a box ran and nothing measured its time. Comes WITHOUT `boxMinutes`.
|
|
1654
|
+
*/
|
|
1655
|
+
boxMinutesProvenance?: 'observed' | 'estimated' | 'uncaptured';
|
|
1623
1656
|
}
|
|
1624
1657
|
/** `'acquiring'` is first-class (M1): a node spends real time + reaps an orphan box
|
|
1625
1658
|
* during sandbox acquire BEFORE it is `running`, so abort must be defined over it.
|
|
@@ -2532,4 +2565,4 @@ interface WidenGate<Out> {
|
|
|
2532
2565
|
}
|
|
2533
2566
|
//#endregion
|
|
2534
2567
|
export { TreeView as $, RetainedRunHandle as $n, sanitizeRuntimeStreamEvent as $t, ProviderModelExecutionEvidence as A, RetainedInteractiveEnvironmentInput as An, RuntimeEventOtelOptions as At, Settled as B, RecoverRetainedRunResult as Bn, padTraceId as Bt, NoWinnerError as C, ScopeProgressInput as Cn, EvalRunsExportResult as Ct, NodeStatus as D, ReconnectRetainedInteractiveRunOptions as Dn, OtelExportConfig as Dt, NodeSnapshot as E, readWorkerProgress as En, OtelAttribute as Et, RootMaterialization as F, NativeContextContinuationHandle as Fn, createOtelExporter as Ft, SpawnRejection as G, RetainedRunAdmission as Gn, RuntimeStreamEventSummary as Gt, SpawnJournal as H, RetainedInteractiveEnvironmentAdmission as Hn, RuntimeEventCollector as Ht, RootProviderModelEvidence as I, NativeContextContinuationInput as In, exportEvalRuns as It, SpendGap as J, RetainedRunCancellation as Jn, SanitizedKnowledgeRequirement as Jt, Spend as K, RetainedRunAdmissionHook as Kn, RuntimeTelemetryOptions as Kt, RootSignal as L, ReconnectRetainedRunOptions as Ln, generateSpanId as Lt, ResumedKeyState as M, RetainedInteractiveStartMaterial as Mn, buildLoopSpanNodes as Mt, ResumedWork as N, StartRetainedInteractiveRunOptions as Nn, buildRuntimeEventOtelSpans as Nt, ProfileMaterializationReceipt as O, RecoverRetainedInteractiveRunOptions as On, OtelExporter as Ot, RootHandle as P, NativeContextContinuationExecution as Pn, createOpenInferenceFileExporter as Pt, SupervisorOpts as Q, RetainedRunEventOptions as Qn, sanitizeKnowledgeReadinessReport as Qt, Runtime as R, RecoverRetainedRunIntentOptions as Rn, loopEventToOtelSpan as Rt, MaterializedModelIdentity as S, ExecutorProgress as Sn, EvalRunsExportConfig as St, NodeId as T, createActivityLog as Tn, LoopSpanNode as Tt, SpawnOpts as U, RetainedInteractiveIntentAdmission as Un, RuntimeStreamEventCollector as Ut, SpawnEvent as V, RetainedInteractiveAdmission as Vn, toOtelAttributes as Vt, SpawnPrior as W, RetainedInteractiveStartedAdmission as Wn, RuntimeStreamEventSink as Wt, SupervisedResult as X, RetainedRunEffect as Xn, createRuntimeStreamEventCollector as Xt, SteerableRootHandle as Y, RetainedRunDispatchedAdmission as Yn, createRuntimeEventCollector as Yt, Supervisor as Z, RetainedRunEnvironmentAdmission as Zn, sanitizeAgentRuntimeEvent as Zt, ExecutorRegistry as _, decodeToolPart as _n, mergeTraceEnv as _t, DefaultVerdict as a, WaitSpec as an, StartRetainedRunInEnvironmentOptions as ar, WorkerInteractiveSession as at, Handle as b, ActivityNote as bn, EvalRunEvent as bt, ExecutorAccounting as c, pollFor as cn, WorkerTraceUnavailableReason as ct, ExecutorContext as d, waitUntil as dn, readWorkerTraceContext as dt, PendingWait as en, RetainedRunIntentAdmission as er, UnconfirmedTeardown as et, ExecutorExecutionBinding as f, SessionMessageLike as fn, workerTraceEnv as ft, ExecutorProgressEvent as g, createPushTraceSource as gn, createPropagatingTraceEmitter as gt, ExecutorNodeContext as h, TraceSource as hn, TraceContext as ht, Budget as i, WaitRejection as in, RetainedRunTurnInput as ir, WidenGate as it, ResultBlobStore as j, RetainedInteractiveRunHandle as jn, buildLoopOtelSpans as jt, ProviderModelAttemptEvidence as k, RetainedInteractiveAdmissionHook as kn, OtelSpan as kt, ExecutorCancellation as l, timerAt as ln, WorkerTraceResolver as lt, ExecutorMaterialization as m, ToolStepInput as mn, workerTraceSeamKey as mt, AgentExecutionRef as n, WaitProbe as nn, RetainedRunSnapshot as nr, UsageEvent as nt, ExecutionBindingReceipt as o, createWaitProbes as on, StartRetainedRunOptions as or, WorkerInteractiveUnavailableReason as ot, ExecutorFactory as p, SessionTraceBox as pn, workerTraceHeaders as pt, SpendChannel as q, RetainedRunCancelOptions as qn, SanitizedKnowledgeReadinessReport as qt, AgentSpec as r, WaitProbeRegistry as rn, RetainedRunStartMaterial as rr, WaitOpts as rt, Executor as s, isWaitOutcome as sn, WorkerTraceEvidence as st, Agent as t, WaitOutcome as tn, RetainedRunReplayPoint as tr, UnknownMaterializationReason as tt, ExecutorCancellationRequest as u, validateWaitSpec as un, WorkerTraceSeamCarrier as ut, ExecutorResult as v, sandboxSessionTraceSource as vn, readTraceContextFromEnv as vt, NodeExecutionIdentity as w, WorkerProgress as wn, INTELLIGENCE_WIRE_VERSION as wt, MaterializedExecutionIdentity as x, DEFAULT_STALL_AFTER_MS as xn, EvalRunGeneration as xt, ExecutorToolCall as y, ActivityLog as yn, traceContextToEnv as yt, Scope as z, RecoverRetainedRunOptions as zn, padSpanId as zt };
|
|
2535
|
-
//# sourceMappingURL=types-
|
|
2568
|
+
//# sourceMappingURL=types-BbkiJR1D.d.ts.map
|
|
@@ -829,6 +829,19 @@ interface Iteration<Task, Output> {
|
|
|
829
829
|
promptCache?: Record<string, number | string>;
|
|
830
830
|
/** Summed LLM token usage across every `llm_call` event in this iteration. */
|
|
831
831
|
tokenUsage: LoopTokenUsage;
|
|
832
|
+
/**
|
|
833
|
+
* Wall time this iteration's box was alive, in milliseconds: from the moment the loop acquired
|
|
834
|
+
* the box to the moment the loop's own teardown returned.
|
|
835
|
+
*
|
|
836
|
+
* ABSENT when this iteration did not own the box's terminal. A lineage box and a same-sandbox
|
|
837
|
+
* box are reaped at loop end, AFTER the loop has already built its result, so no iteration can
|
|
838
|
+
* pair them. A missing lifetime is never a zero: a box nobody timed is a different fact from a
|
|
839
|
+
* box that lived no time.
|
|
840
|
+
*/
|
|
841
|
+
boxLiveMs?: number;
|
|
842
|
+
/** False when `boxLiveMs` is a floor rather than the full lifetime: the delete was attempted and
|
|
843
|
+
* never acknowledged, so the box may have outlived the number. */
|
|
844
|
+
boxLiveMsKnown?: false;
|
|
832
845
|
}
|
|
833
846
|
/** @stable */
|
|
834
847
|
interface Driver<Task, Output, Decision> {
|
|
@@ -911,6 +924,12 @@ interface LoopResult<Task, Output, Decision> {
|
|
|
911
924
|
/** Sum of every iteration's token usage. `loopDispatch` commits it through
|
|
912
925
|
* the campaign's paid-call receipt. */
|
|
913
926
|
tokenUsage: LoopTokenUsage;
|
|
927
|
+
/** Sum of `Iteration.boxLiveMs` over the iterations that could pair a box acquire with its
|
|
928
|
+
* teardown. ABSENT when none could — the run's box time went unmeasured, which is not a zero. */
|
|
929
|
+
boxLiveMs?: number;
|
|
930
|
+
/** False when at least one iteration ran a box whose lifetime the loop could not fully observe,
|
|
931
|
+
* so `boxLiveMs` is a floor over the run rather than its total. */
|
|
932
|
+
boxLiveMsKnown?: false;
|
|
914
933
|
/** Domain-free run provenance for auditability: the mount manifest recorded
|
|
915
934
|
* during `prepareBox` and the selection receipts for how the winner was
|
|
916
935
|
* chosen. Always present; empty arrays when nothing was recorded. */
|
|
@@ -1257,4 +1276,4 @@ interface ExecCtx {
|
|
|
1257
1276
|
}
|
|
1258
1277
|
//#endregion
|
|
1259
1278
|
export { OpenAIChatToolChoice as $, RuntimeRunCompleteInput as A, AgentBackendInput as B, MountRecorder as C, SelectionReceipt as D, SandboxClient as E, RuntimeRunRow as F, AgentTaskContext as G, AgentKnowledgeProvider as H, RuntimeRunStatus as I, AgentTaskStatus as J, AgentTaskRunResult as K, startRuntimeRun as L, RuntimeRunHandle as M, RuntimeRunOptions as N, ValidationCtx as O, RuntimeRunPersistenceAdapter as P, OpenAIChatTool as Q, AgentAdapter as R, MountManifestEntry as S, RunProvenance as T, AgentRuntimeEvent as U, AgentExecutionBackend as V, AgentRuntimeEventSink as W, KnowledgeReadinessDecision as X, BackendErrorDetail as Y, OpenAIChatResponseFormat as Z, LoopTeardownFailedPayload as _, Iteration as a, RuntimeStreamEvent as at, LoopTraceEvent as b, LoopIterationDispatchPayload as c, LoopLineageOptions as d, RunAgentTaskOptions as et, LoopPlanDescription as f, LoopStartedPayload as g, LoopSandboxPlacement as h, ExecCtx as i, RuntimeSessionStore as it, RuntimeRunCost as j, Validator as k, LoopIterationEndedPayload as l, LoopResult as m, DefaultVerdict as n, RuntimeCanonicalStreamEvent as nt, LoopDecisionPayload as o, LoopPlanPayload as p, AgentTaskSpec as q, Driver as r, RuntimeSession as rt, LoopEndedPayload as s, AgentRunSpec as t, RunAgentTaskStreamOptions as tt, LoopIterationStartedPayload as u, LoopTokenUsage as v, OutputAdapter as w, LoopWinner as x, LoopTraceEmitter as y, AgentBackendContext as z };
|
|
1260
|
-
//# sourceMappingURL=types-
|
|
1279
|
+
//# sourceMappingURL=types-BdolQ6Zi.d.ts.map
|
|
@@ -168,7 +168,8 @@ function cloneSpend(spend) {
|
|
|
168
168
|
usd: spend.usd,
|
|
169
169
|
...spend.usdKnown === false ? { usdKnown: false } : {},
|
|
170
170
|
...spend.usdEstimated !== void 0 ? { usdEstimated: spend.usdEstimated } : {},
|
|
171
|
-
ms: spend.ms
|
|
171
|
+
ms: spend.ms,
|
|
172
|
+
...boxMinutesOf(spend)
|
|
172
173
|
};
|
|
173
174
|
}
|
|
174
175
|
/**
|
|
@@ -186,9 +187,57 @@ function addSpend(a, b) {
|
|
|
186
187
|
usd: a.usd + b.usd,
|
|
187
188
|
...a.usdKnown === false || b.usdKnown === false ? { usdKnown: false } : {},
|
|
188
189
|
...usdEstimatedOf(a, b),
|
|
189
|
-
ms: a.ms + b.ms
|
|
190
|
+
ms: a.ms + b.ms,
|
|
191
|
+
...boxMinutesOf(a, b)
|
|
190
192
|
};
|
|
191
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Fold the platform box-time channel across spends, as a field to spread.
|
|
196
|
+
*
|
|
197
|
+
* Returns nothing when no input carried the channel, so a fold over router or cli-bridge work —
|
|
198
|
+
* which runs no box at all — never gains a `boxMinutesProvenance: 'uncaptured'` that would claim
|
|
199
|
+
* a box ran and went unmetered.
|
|
200
|
+
*
|
|
201
|
+
* Three rules, one per field:
|
|
202
|
+
* - `boxMinutes` sums the numbers that are present, and stays ABSENT when none is. A missing
|
|
203
|
+
* measurement never enters the sum as a zero.
|
|
204
|
+
* - `boxMinutesKnown` is sticky-false, like `tokensKnown`: one contributor that could not state
|
|
205
|
+
* its box time makes the whole sum a floor.
|
|
206
|
+
* - `boxMinutesProvenance` degrades. `'observed'` survives only when every contributor that
|
|
207
|
+
* carried a number was observed; one derived number makes the sum `'estimated'`; no number at
|
|
208
|
+
* all is `'uncaptured'`.
|
|
209
|
+
*/
|
|
210
|
+
function boxMinutesOf(...spends) {
|
|
211
|
+
const present = spends.filter((spend) => spend.boxMinutesProvenance !== void 0);
|
|
212
|
+
if (present.length === 0) return {};
|
|
213
|
+
let minutes = 0;
|
|
214
|
+
let sawNumber = false;
|
|
215
|
+
let known = true;
|
|
216
|
+
let observedOnly = true;
|
|
217
|
+
for (const spend of present) {
|
|
218
|
+
if (typeof spend.boxMinutes === "number" && Number.isFinite(spend.boxMinutes)) {
|
|
219
|
+
minutes += spend.boxMinutes;
|
|
220
|
+
sawNumber = true;
|
|
221
|
+
if (spend.boxMinutesProvenance !== "observed") observedOnly = false;
|
|
222
|
+
}
|
|
223
|
+
if (spend.boxMinutesKnown !== true) known = false;
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
...sawNumber ? { boxMinutes: roundBoxMinutes(minutes) } : {},
|
|
227
|
+
boxMinutesKnown: known,
|
|
228
|
+
boxMinutesProvenance: sawNumber ? observedOnly ? "observed" : "estimated" : "uncaptured"
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Box minutes at four decimals — a tenth of a second.
|
|
233
|
+
*
|
|
234
|
+
* Fine enough that a box alive for two seconds reports `0.0333` instead of a zero that would read
|
|
235
|
+
* as a measured free box, and coarse enough that summing floats does not print
|
|
236
|
+
* `1.5000000000000002`.
|
|
237
|
+
*/
|
|
238
|
+
function roundBoxMinutes(minutes) {
|
|
239
|
+
return Number(minutes.toFixed(4));
|
|
240
|
+
}
|
|
192
241
|
/** Copy a token subtotal without dropping optional provider cache telemetry. */
|
|
193
242
|
function cloneTokenUsage(usage) {
|
|
194
243
|
const cacheBreakdownUnknown = usage.cacheBreakdownKnown === false || usage.input > 0 && !hasClassifiedCacheBreakdown(usage);
|
|
@@ -346,6 +395,6 @@ async function mapWithConcurrency(items, limit, fn) {
|
|
|
346
395
|
return results;
|
|
347
396
|
}
|
|
348
397
|
//#endregion
|
|
349
|
-
export {
|
|
398
|
+
export { throwIfAborted as _, cloneTokenUsage as a, zeroSpend as b, isAbortError as c, randomSuffix as d, randomUuid as f, throwAbort as g, stringifySafe as h, cloneSpend as i, mapWithConcurrency as l, sleep as m, addTokenUsage as n, deleteBoxSafe as o, roundBoxMinutes as p, chargedTokens as r, hasCompleteCacheBreakdown as s, addSpend as t, promptCacheTokenClasses as u, unmeteredSpend as v, zeroTokenUsage as x, withTimeout as y };
|
|
350
399
|
|
|
351
|
-
//# sourceMappingURL=util-
|
|
400
|
+
//# sourceMappingURL=util-BfoW6RU7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util-BfoW6RU7.js","names":[],"sources":["../src/runtime/util.ts"],"sourcesContent":["/**\n *\n * Internal loop-kernel utilities shared across the kernel, drivers, and the\n * sandbox-acquire layer. Not part of the public barrel surface.\n *\n * @experimental\n */\n\nimport type { SandboxInstance } from '@tangle-network/sandbox'\nimport type { Spend } from './supervise/types'\nimport type { LoopTokenUsage } from './types'\n\n/**\n * Best-effort sandbox delete. Skips instances without a `delete` (test fakes);\n * swallows errors (the platform reaps on expiry). Returns `false` when delete\n * threw, `true` otherwise, so callers can surface a leak if they choose.\n */\nexport async function deleteBoxSafe(box: SandboxInstance | undefined): Promise<boolean> {\n if (!box || typeof (box as { delete?: unknown }).delete !== 'function') return true\n try {\n await box.delete()\n return true\n } catch {\n return false\n }\n}\n\n/** Short base36 id for trace correlation. Not cryptographic, not collision-free. */\nexport function randomSuffix(len = 8): string {\n return Math.random()\n .toString(36)\n .slice(2, 2 + len)\n}\n\n/** Collision-resistant id for sandbox naming (find-by-name recovery must be unique). */\nexport function randomUuid(): string {\n return crypto.randomUUID()\n}\n\n/** Construct an AbortError. Downstream code pattern-matches on `err.name`. */\nexport function abortError(): Error {\n const err = new Error('aborted')\n err.name = 'AbortError'\n return err\n}\n\n/** Throw an AbortError. */\nexport function throwAbort(): never {\n throw abortError()\n}\n\n/** Throw if the signal is already aborted; otherwise no-op. */\nexport function throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) throw abortError()\n}\n\n/** True for any error whose `name` is `AbortError` (the cross-kernel abort contract). */\nexport function isAbortError(err: unknown): boolean {\n return err instanceof Error && err.name === 'AbortError'\n}\n\n/**\n * Sleep that resolves early on abort and always clears its timer so it never\n * keeps the event loop alive. Resolves (does not reject) on abort — callers\n * re-check the signal explicitly after the sleep.\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal?.aborted) {\n resolve()\n return\n }\n let onAbort: (() => void) | undefined\n const timer = setTimeout(() => {\n if (onAbort && signal) signal.removeEventListener('abort', onAbort)\n resolve()\n }, ms)\n if (signal) {\n onAbort = () => {\n clearTimeout(timer)\n resolve()\n }\n signal.addEventListener('abort', onAbort, { once: true })\n }\n })\n}\n\n/**\n * Race a promise against a timeout. Resolves with the value if it settles in\n * time, otherwise resolves with `undefined`. Always clears the timer.\n */\nexport function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T | undefined> {\n return new Promise<T | undefined>((resolve) => {\n const timer = setTimeout(() => resolve(undefined), ms)\n promise.then(\n (value) => {\n clearTimeout(timer)\n resolve(value)\n },\n () => {\n clearTimeout(timer)\n resolve(undefined)\n },\n )\n })\n}\n\ninterface StringifyOptions {\n /** Pretty-print with 2-space indent. Default false (compact). */\n pretty?: boolean\n /** Truncate to this many chars, appending `…`. Default unbounded. */\n max?: number\n}\n\n/**\n * `JSON.stringify` with a `String()` fallback on throw (cyclic / non-JSON).\n * Strings pass through unstringified so a preview of a string output is the\n * string itself, not a quoted re-encoding.\n */\nexport function stringifySafe(value: unknown, opts: StringifyOptions = {}): string {\n let s: string\n try {\n if (typeof value === 'string') {\n s = value\n } else {\n const json = opts.pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value)\n s = json ?? String(value)\n }\n } catch {\n s = String(value)\n }\n if (opts.max !== undefined && s.length > opts.max) return `${s.slice(0, opts.max)}…`\n return s\n}\n\n/** A fresh zero token-usage accumulator. */\nexport function zeroTokenUsage(): LoopTokenUsage {\n return { input: 0, output: 0 }\n}\n\n/**\n * Sum the catalog-priced part of a dollar total across spends, as a field to spread.\n *\n * Returns nothing when no input carried one. A fold of pure provider receipts must not gain a\n * `usdEstimated: 0`, which would read as \"this runtime checked and priced none\" on a path that\n * never prices at all.\n */\nexport function usdEstimatedOf(...spends: ReadonlyArray<{ usdEstimated?: number }>): {\n usdEstimated?: number\n} {\n let total = 0\n let priced = false\n for (const spend of spends) {\n if (spend.usdEstimated === undefined) continue\n priced = true\n total += spend.usdEstimated\n }\n return priced ? { usdEstimated: total } : {}\n}\n\n/** A conserved spend with every channel at zero and no completeness claim on it. */\nexport function zeroSpend(): Spend {\n return { iterations: 0, tokens: zeroTokenUsage(), usd: 0, ms: 0 }\n}\n\n/**\n * The spend of work that HAPPENED and reported no usage receipt.\n *\n * Not the same value as {@link zeroSpend} even though both carry `{0,0}` tokens and `$0`. A bare\n * zero asserts a MEASUREMENT — \"this ran and cost nothing\" — and every consumer downstream reads it\n * that way: the pool keeps reporting `readout().tokensKnown === true`, the journal totals stay\n * clean, the OTEL span records a priced zero, and a caller's token-denominated ceiling can never\n * fire no matter how much the work really burned. A ceiling that cannot fire is worse than no\n * ceiling, because it reads as protection.\n *\n * `tokensKnown` is the marker the substrate already threads end to end for exactly this case\n * (`budget.ts`, `otel-spans.ts`, `spawn-journal.ts`, `supervisor.ts`): the work is recorded, the\n * zero is labelled a floor rather than a total, and every rollup that touches it reports its\n * balance as a ceiling rather than a measurement. Use this — never a bare zero — whenever a runtime\n * cannot see what its worker spent.\n *\n * The same rule applies to dollars. A dollar-capped run must refuse an executor whose billed spend\n * is unknowable; `budgetExempt` does not authorize Runtime to relabel unknown spend as a measured\n * zero. Callers that require dollar accounting must use a backend with a trusted billing receipt.\n */\nexport function unmeteredSpend(ms: number): Spend {\n return {\n iterations: 0,\n tokens: zeroTokenUsage(),\n tokensKnown: false,\n usd: 0,\n usdKnown: false,\n ms,\n }\n}\n\n/** Copy a conserved spend without dropping a completeness marker or the catalog-priced part. */\nexport function cloneSpend(spend: Spend): Spend {\n return {\n iterations: spend.iterations,\n tokens: cloneTokenUsage(spend.tokens),\n ...(spend.tokensKnown === false ? { tokensKnown: false } : {}),\n usd: spend.usd,\n ...(spend.usdKnown === false ? { usdKnown: false } : {}),\n ...(spend.usdEstimated !== undefined ? { usdEstimated: spend.usdEstimated } : {}),\n ms: spend.ms,\n ...boxMinutesOf(spend),\n }\n}\n\n/**\n * Sum two conserved spends per channel. Tokens and dollars never fold into each other, an\n * incomplete input keeps the sum incomplete on that channel, and the catalog-priced part of the\n * dollar total is summed separately so `usd - usdEstimated` still names what a provider billed.\n */\nexport function addSpend(a: Spend, b: Spend): Spend {\n const tokens = cloneTokenUsage(a.tokens)\n addTokenUsage(tokens, b.tokens)\n return {\n iterations: a.iterations + b.iterations,\n tokens,\n ...(a.tokensKnown === false || b.tokensKnown === false ? { tokensKnown: false } : {}),\n usd: a.usd + b.usd,\n ...(a.usdKnown === false || b.usdKnown === false ? { usdKnown: false } : {}),\n ...usdEstimatedOf(a, b),\n ms: a.ms + b.ms,\n ...boxMinutesOf(a, b),\n }\n}\n\n/**\n * Fold the platform box-time channel across spends, as a field to spread.\n *\n * Returns nothing when no input carried the channel, so a fold over router or cli-bridge work —\n * which runs no box at all — never gains a `boxMinutesProvenance: 'uncaptured'` that would claim\n * a box ran and went unmetered.\n *\n * Three rules, one per field:\n * - `boxMinutes` sums the numbers that are present, and stays ABSENT when none is. A missing\n * measurement never enters the sum as a zero.\n * - `boxMinutesKnown` is sticky-false, like `tokensKnown`: one contributor that could not state\n * its box time makes the whole sum a floor.\n * - `boxMinutesProvenance` degrades. `'observed'` survives only when every contributor that\n * carried a number was observed; one derived number makes the sum `'estimated'`; no number at\n * all is `'uncaptured'`.\n */\nfunction boxMinutesOf(...spends: ReadonlyArray<Spend>): {\n boxMinutes?: number\n boxMinutesKnown?: boolean\n boxMinutesProvenance?: 'observed' | 'estimated' | 'uncaptured'\n} {\n const present = spends.filter((spend) => spend.boxMinutesProvenance !== undefined)\n if (present.length === 0) return {}\n let minutes = 0\n let sawNumber = false\n let known = true\n let observedOnly = true\n for (const spend of present) {\n if (typeof spend.boxMinutes === 'number' && Number.isFinite(spend.boxMinutes)) {\n minutes += spend.boxMinutes\n sawNumber = true\n if (spend.boxMinutesProvenance !== 'observed') observedOnly = false\n }\n if (spend.boxMinutesKnown !== true) known = false\n }\n return {\n ...(sawNumber ? { boxMinutes: roundBoxMinutes(minutes) } : {}),\n boxMinutesKnown: known,\n boxMinutesProvenance: sawNumber ? (observedOnly ? 'observed' : 'estimated') : 'uncaptured',\n }\n}\n\n/**\n * Box minutes at four decimals — a tenth of a second.\n *\n * Fine enough that a box alive for two seconds reports `0.0333` instead of a zero that would read\n * as a measured free box, and coarse enough that summing floats does not print\n * `1.5000000000000002`.\n */\nexport function roundBoxMinutes(minutes: number): number {\n return Number(minutes.toFixed(4))\n}\n\n/** Copy a token subtotal without dropping optional provider cache telemetry. */\nexport function cloneTokenUsage(usage: LoopTokenUsage): LoopTokenUsage {\n const cacheBreakdownUnknown =\n usage.cacheBreakdownKnown === false || (usage.input > 0 && !hasClassifiedCacheBreakdown(usage))\n return {\n input: usage.input,\n output: usage.output,\n ...(usage.tokensKnown === false ? { tokensKnown: false as const } : {}),\n ...(usage.freshInput !== undefined ? { freshInput: usage.freshInput } : {}),\n ...(usage.cacheRead !== undefined ? { cacheRead: usage.cacheRead } : {}),\n ...(usage.cacheWrite !== undefined ? { cacheWrite: usage.cacheWrite } : {}),\n ...(cacheBreakdownUnknown ? { cacheBreakdownKnown: false as const } : {}),\n }\n}\n\n/** True only when every positive prompt token has a consistent cache classification. */\nexport function hasCompleteCacheBreakdown(usage: LoopTokenUsage): boolean {\n if (usage.cacheBreakdownKnown === false) return false\n return hasClassifiedCacheBreakdown(usage)\n}\n\nfunction hasClassifiedCacheBreakdown(usage: LoopTokenUsage): boolean {\n if (usage.input === 0) return true\n if (\n usage.freshInput === undefined ||\n usage.cacheRead === undefined ||\n usage.cacheWrite === undefined\n ) {\n return false\n }\n return usage.freshInput + usage.cacheRead + usage.cacheWrite === usage.input\n}\n\n/**\n * The token charge for one observation: every token counted ONCE, at the moment it first enters\n * the context — `input − cacheRead + output`.\n *\n * `input` is a rolled-up prompt total that re-counts a cached prefix on every turn that reads it,\n * so charging `input` makes a 100K prefix read 40 times cost 4.1M for content authored once. A\n * cache read is content that was already charged when it was written, so it is the one class the\n * charge subtracts. Under a complete split the result is exactly `freshInput + cacheWrite`. No\n * price weight is involved: this counts work, and money is a separate channel.\n *\n * The subtraction form is what makes the charge ADDITIVE. `input` and `cacheRead` both accumulate\n * through `addTokenUsage`, so the charge on an aggregate equals the sum of the charges on the\n * records that built it — including an aggregate that mixes classified and unclassified turns,\n * where the unclassified remainder is charged in full and only the reported cache reads are\n * credited. A form that read `freshInput + cacheWrite` directly loses that: one unclassified turn\n * would drop the whole aggregate to `input + output` and over-charge every classified turn with it.\n *\n * The one arithmetic guarantee: a set of classes that does not FIT inside the prompt total it\n * partitions credits nothing, so the charge is never below `output` and a class that overflows its\n * own total buys no tokens. It is not a guarantee against a provider that reports a cache read it\n * never served — that provider can under-report `input` just as easily, and the token channel is an\n * accounting unit, not a trust boundary. Prompt tokens the provider left unclassified are charged\n * in full, so a spend with no readable split charges an upper bound on newly-presented work rather\n * than a measurement, and every caller that enforces a ceiling must report the difference\n * (`BudgetPool` does it through `readout().cacheBreakdownKnown`).\n */\nexport function chargedTokens(usage: LoopTokenUsage): number {\n return usage.input - creditedCacheRead(usage) + usage.output\n}\n\n/** `cacheRead` if the reported classes fit inside `input`, else nothing. */\nfunction creditedCacheRead(usage: LoopTokenUsage): number {\n const { cacheRead } = usage\n if (cacheRead === undefined) return 0\n return classifiedTotal(usage, cacheRead) > usage.input ? 0 : cacheRead\n}\n\nfunction classifiedTotal(usage: Partial<LoopTokenUsage>, cacheRead: number): number {\n return (usage.freshInput ?? 0) + cacheRead + (usage.cacheWrite ?? 0)\n}\n\n/**\n * The only two members this reads out of a provider prompt-cache report, named rather than taken as\n * an open record: both the typed `PromptCacheUsage` and the open `promptCache` an `llm_call` carries\n * satisfy it, and each value is validated before it is credited.\n */\nexport interface PromptCacheCounters {\n readonly readTokens?: unknown\n readonly writeTokens?: unknown\n}\n\n/** The prompt-cache token classes of one observation, as `LoopTokenUsage` members. */\nexport type PromptCacheTokenClasses = Pick<\n LoopTokenUsage,\n 'freshInput' | 'cacheRead' | 'cacheWrite' | 'cacheBreakdownKnown'\n>\n\n/**\n * Translate one provider prompt-cache report into the prompt token classes `addTokenUsage` folds\n * and `chargedTokens` credits.\n *\n * The input is the open `promptCache` record an `llm_call` carries, keyed by the `PromptCacheUsage`\n * vocabulary (`readTokens`, `writeTokens`). Providers report that vocabulary unevenly, and the\n * three outcomes are different facts that must not collapse into one another:\n *\n * - **Nothing reported** — no classes and no marker. The caller's own unknown handling decides,\n * because a provider that says nothing about caching has not said the split is unknowable.\n * - **Read and write both reported, and fitting inside `input`** — a complete partition, so\n * `freshInput` is the remainder and the split is known.\n * - **One counter reported, or classes that overflow `input`** — the counters that ARE measured\n * pass through and `cacheBreakdownKnown` is false. A read with no write counter (OpenAI reports\n * no write) still credits the read it measured, while declaring the rest unclassified so the\n * charge stays a declared upper bound. An overflowing claim buys nothing: it cannot be a\n * partition of a total it exceeds.\n *\n * A counter the provider did not report stays absent. A zero would claim the provider measured no\n * cache, which is a different fact from a provider that did not report.\n */\nexport function promptCacheTokenClasses(\n input: number | undefined,\n promptCache: PromptCacheCounters | undefined,\n): PromptCacheTokenClasses {\n if (promptCache === undefined) return {}\n const read = tokenCount(promptCache.readTokens)\n const write = tokenCount(promptCache.writeTokens)\n if (read === undefined && write === undefined) return {}\n if (input === undefined || (read ?? 0) + (write ?? 0) > input) {\n return { cacheBreakdownKnown: false }\n }\n if (read !== undefined && write !== undefined) {\n return { freshInput: input - read - write, cacheRead: read, cacheWrite: write }\n }\n return {\n ...(read !== undefined ? { cacheRead: read } : {}),\n ...(write !== undefined ? { cacheWrite: write } : {}),\n cacheBreakdownKnown: false,\n }\n}\n\nfunction tokenCount(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined\n}\n\n/**\n * Add the observed subtotal into `acc`; token and cache incompleteness are sticky.\n *\n * A delta whose classes do not FIT inside its own `input` contributes its prompt total and NO\n * classes. Folding them in would hide the overflow: the accumulator's larger `input` can absorb a\n * class total that overflowed the one delta that reported it, and `chargedTokens` would then credit\n * at the aggregate a cache read it refuses at the record. That is the one way the charge could come\n * out below the sum of the charges on the records that built it.\n */\nexport function addTokenUsage(acc: LoopTokenUsage, delta: Partial<LoopTokenUsage>): void {\n acc.input += delta.input ?? 0\n acc.output += delta.output ?? 0\n if (delta.tokensKnown === false) acc.tokensKnown = false\n\n const input = delta.input ?? 0\n const fits = classifiedTotal(delta, delta.cacheRead ?? 0) <= input\n if (fits) {\n if (delta.freshInput !== undefined) acc.freshInput = (acc.freshInput ?? 0) + delta.freshInput\n if (delta.cacheRead !== undefined) acc.cacheRead = (acc.cacheRead ?? 0) + delta.cacheRead\n if (delta.cacheWrite !== undefined) acc.cacheWrite = (acc.cacheWrite ?? 0) + delta.cacheWrite\n }\n\n const classified =\n fits &&\n delta.freshInput !== undefined &&\n delta.cacheRead !== undefined &&\n delta.cacheWrite !== undefined &&\n delta.freshInput + delta.cacheRead + delta.cacheWrite === input\n // A provider that reports prompt input without all three classes leaves the\n // split unknown. Do not let an earlier complete turn make the aggregate look\n // complete after a later unclassified positive-input turn.\n if (delta.cacheBreakdownKnown === false || (input > 0 && !classified)) {\n acc.cacheBreakdownKnown = false\n }\n}\n\n/**\n * Map `items` through `fn` with at most `limit` calls in flight at once,\n * preserving input order in the result. On the first `fn` rejection no NEW\n * items are picked up; already-in-flight calls are awaited, then the first\n * error is rethrown. `limit` is clamped to ≥ 1.\n *\n * Used where a burst of provisioning (e.g. forking N child boxes) must respect\n * the loop's concurrency bound instead of firing all N at once.\n */\nexport async function mapWithConcurrency<T, R>(\n items: readonly T[],\n limit: number,\n fn: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const bound = Math.max(1, Math.floor(limit))\n const results = new Array<R>(items.length)\n let next = 0\n let failed = false\n const worker = async (): Promise<void> => {\n while (!failed) {\n const i = next\n next += 1\n if (i >= items.length) return\n try {\n results[i] = await fn(items[i] as T, i)\n } catch (err) {\n failed = true\n throw err\n }\n }\n }\n const workerCount = Math.min(bound, items.length)\n await Promise.all(Array.from({ length: workerCount }, () => worker()))\n return results\n}\n"],"mappings":";;;;;;AAiBA,eAAsB,cAAc,KAAoD;CACtF,IAAI,CAAC,OAAO,OAAQ,IAA6B,WAAW,YAAY,OAAO;CAC/E,IAAI;EACF,MAAM,IAAI,OAAO;EACjB,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;AAGA,SAAgB,aAAa,MAAM,GAAW;CAC5C,OAAO,KAAK,OAAO,CAAC,CACjB,SAAS,EAAE,CAAC,CACZ,MAAM,GAAG,IAAI,GAAG;AACrB;;AAGA,SAAgB,aAAqB;CACnC,OAAO,OAAO,WAAW;AAC3B;;AAGA,SAAgB,aAAoB;CAClC,MAAM,sBAAM,IAAI,MAAM,SAAS;CAC/B,IAAI,OAAO;CACX,OAAO;AACT;;AAGA,SAAgB,aAAoB;CAClC,MAAM,WAAW;AACnB;;AAGA,SAAgB,eAAe,QAAuC;CACpE,IAAI,QAAQ,SAAS,MAAM,WAAW;AACxC;;AAGA,SAAgB,aAAa,KAAuB;CAClD,OAAO,eAAe,SAAS,IAAI,SAAS;AAC9C;;;;;;AAOA,SAAgB,MAAM,IAAY,QAAqC;CACrE,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI,QAAQ,SAAS;GACnB,QAAQ;GACR;EACF;EACA,IAAI;EACJ,MAAM,QAAQ,iBAAiB;GAC7B,IAAI,WAAW,QAAQ,OAAO,oBAAoB,SAAS,OAAO;GAClE,QAAQ;EACV,GAAG,EAAE;EACL,IAAI,QAAQ;GACV,gBAAgB;IACd,aAAa,KAAK;IAClB,QAAQ;GACV;GACA,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EAC1D;CACF,CAAC;AACH;;;;;AAMA,SAAgB,YAAe,SAAqB,IAAoC;CACtF,OAAO,IAAI,SAAwB,YAAY;EAC7C,MAAM,QAAQ,iBAAiB,QAAQ,KAAA,CAAS,GAAG,EAAE;EACrD,QAAQ,MACL,UAAU;GACT,aAAa,KAAK;GAClB,QAAQ,KAAK;EACf,SACM;GACJ,aAAa,KAAK;GAClB,QAAQ,KAAA,CAAS;EACnB,CACF;CACF,CAAC;AACH;;;;;;AAcA,SAAgB,cAAc,OAAgB,OAAyB,CAAC,GAAW;CACjF,IAAI;CACJ,IAAI;EACF,IAAI,OAAO,UAAU,UACnB,IAAI;OAGJ,KADa,KAAK,SAAS,KAAK,UAAU,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,KAAK,MACpE,OAAO,KAAK;CAE5B,QAAQ;EACN,IAAI,OAAO,KAAK;CAClB;CACA,IAAI,KAAK,QAAQ,KAAA,KAAa,EAAE,SAAS,KAAK,KAAK,OAAO,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,EAAE;CAClF,OAAO;AACT;;AAGA,SAAgB,iBAAiC;CAC/C,OAAO;EAAE,OAAO;EAAG,QAAQ;CAAE;AAC/B;;;;;;;;AASA,SAAgB,eAAe,GAAG,QAEhC;CACA,IAAI,QAAQ;CACZ,IAAI,SAAS;CACb,KAAK,MAAM,SAAS,QAAQ;EAC1B,IAAI,MAAM,iBAAiB,KAAA,GAAW;EACtC,SAAS;EACT,SAAS,MAAM;CACjB;CACA,OAAO,SAAS,EAAE,cAAc,MAAM,IAAI,CAAC;AAC7C;;AAGA,SAAgB,YAAmB;CACjC,OAAO;EAAE,YAAY;EAAG,QAAQ,eAAe;EAAG,KAAK;EAAG,IAAI;CAAE;AAClE;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,eAAe,IAAmB;CAChD,OAAO;EACL,YAAY;EACZ,QAAQ,eAAe;EACvB,aAAa;EACb,KAAK;EACL,UAAU;EACV;CACF;AACF;;AAGA,SAAgB,WAAW,OAAqB;CAC9C,OAAO;EACL,YAAY,MAAM;EAClB,QAAQ,gBAAgB,MAAM,MAAM;EACpC,GAAI,MAAM,gBAAgB,QAAQ,EAAE,aAAa,MAAM,IAAI,CAAC;EAC5D,KAAK,MAAM;EACX,GAAI,MAAM,aAAa,QAAQ,EAAE,UAAU,MAAM,IAAI,CAAC;EACtD,GAAI,MAAM,iBAAiB,KAAA,IAAY,EAAE,cAAc,MAAM,aAAa,IAAI,CAAC;EAC/E,IAAI,MAAM;EACV,GAAG,aAAa,KAAK;CACvB;AACF;;;;;;AAOA,SAAgB,SAAS,GAAU,GAAiB;CAClD,MAAM,SAAS,gBAAgB,EAAE,MAAM;CACvC,cAAc,QAAQ,EAAE,MAAM;CAC9B,OAAO;EACL,YAAY,EAAE,aAAa,EAAE;EAC7B;EACA,GAAI,EAAE,gBAAgB,SAAS,EAAE,gBAAgB,QAAQ,EAAE,aAAa,MAAM,IAAI,CAAC;EACnF,KAAK,EAAE,MAAM,EAAE;EACf,GAAI,EAAE,aAAa,SAAS,EAAE,aAAa,QAAQ,EAAE,UAAU,MAAM,IAAI,CAAC;EAC1E,GAAG,eAAe,GAAG,CAAC;EACtB,IAAI,EAAE,KAAK,EAAE;EACb,GAAG,aAAa,GAAG,CAAC;CACtB;AACF;;;;;;;;;;;;;;;;;AAkBA,SAAS,aAAa,GAAG,QAIvB;CACA,MAAM,UAAU,OAAO,QAAQ,UAAU,MAAM,yBAAyB,KAAA,CAAS;CACjF,IAAI,QAAQ,WAAW,GAAG,OAAO,CAAC;CAClC,IAAI,UAAU;CACd,IAAI,YAAY;CAChB,IAAI,QAAQ;CACZ,IAAI,eAAe;CACnB,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,OAAO,MAAM,eAAe,YAAY,OAAO,SAAS,MAAM,UAAU,GAAG;GAC7E,WAAW,MAAM;GACjB,YAAY;GACZ,IAAI,MAAM,yBAAyB,YAAY,eAAe;EAChE;EACA,IAAI,MAAM,oBAAoB,MAAM,QAAQ;CAC9C;CACA,OAAO;EACL,GAAI,YAAY,EAAE,YAAY,gBAAgB,OAAO,EAAE,IAAI,CAAC;EAC5D,iBAAiB;EACjB,sBAAsB,YAAa,eAAe,aAAa,cAAe;CAChF;AACF;;;;;;;;AASA,SAAgB,gBAAgB,SAAyB;CACvD,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC;AAClC;;AAGA,SAAgB,gBAAgB,OAAuC;CACrE,MAAM,wBACJ,MAAM,wBAAwB,SAAU,MAAM,QAAQ,KAAK,CAAC,4BAA4B,KAAK;CAC/F,OAAO;EACL,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,GAAI,MAAM,gBAAgB,QAAQ,EAAE,aAAa,MAAe,IAAI,CAAC;EACrE,GAAI,MAAM,eAAe,KAAA,IAAY,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;EACzE,GAAI,MAAM,cAAc,KAAA,IAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;EACtE,GAAI,MAAM,eAAe,KAAA,IAAY,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;EACzE,GAAI,wBAAwB,EAAE,qBAAqB,MAAe,IAAI,CAAC;CACzE;AACF;;AAGA,SAAgB,0BAA0B,OAAgC;CACxE,IAAI,MAAM,wBAAwB,OAAO,OAAO;CAChD,OAAO,4BAA4B,KAAK;AAC1C;AAEA,SAAS,4BAA4B,OAAgC;CACnE,IAAI,MAAM,UAAU,GAAG,OAAO;CAC9B,IACE,MAAM,eAAe,KAAA,KACrB,MAAM,cAAc,KAAA,KACpB,MAAM,eAAe,KAAA,GAErB,OAAO;CAET,OAAO,MAAM,aAAa,MAAM,YAAY,MAAM,eAAe,MAAM;AACzE;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,cAAc,OAA+B;CAC3D,OAAO,MAAM,QAAQ,kBAAkB,KAAK,IAAI,MAAM;AACxD;;AAGA,SAAS,kBAAkB,OAA+B;CACxD,MAAM,EAAE,cAAc;CACtB,IAAI,cAAc,KAAA,GAAW,OAAO;CACpC,OAAO,gBAAgB,OAAO,SAAS,IAAI,MAAM,QAAQ,IAAI;AAC/D;AAEA,SAAS,gBAAgB,OAAgC,WAA2B;CAClF,QAAQ,MAAM,cAAc,KAAK,aAAa,MAAM,cAAc;AACpE;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,wBACd,OACA,aACyB;CACzB,IAAI,gBAAgB,KAAA,GAAW,OAAO,CAAC;CACvC,MAAM,OAAO,WAAW,YAAY,UAAU;CAC9C,MAAM,QAAQ,WAAW,YAAY,WAAW;CAChD,IAAI,SAAS,KAAA,KAAa,UAAU,KAAA,GAAW,OAAO,CAAC;CACvD,IAAI,UAAU,KAAA,MAAc,QAAQ,MAAM,SAAS,KAAK,OACtD,OAAO,EAAE,qBAAqB,MAAM;CAEtC,IAAI,SAAS,KAAA,KAAa,UAAU,KAAA,GAClC,OAAO;EAAE,YAAY,QAAQ,OAAO;EAAO,WAAW;EAAM,YAAY;CAAM;CAEhF,OAAO;EACL,GAAI,SAAS,KAAA,IAAY,EAAE,WAAW,KAAK,IAAI,CAAC;EAChD,GAAI,UAAU,KAAA,IAAY,EAAE,YAAY,MAAM,IAAI,CAAC;EACnD,qBAAqB;CACvB;AACF;AAEA,SAAS,WAAW,OAAoC;CACtD,OAAO,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAA;AAC1F;;;;;;;;;;AAWA,SAAgB,cAAc,KAAqB,OAAsC;CACvF,IAAI,SAAS,MAAM,SAAS;CAC5B,IAAI,UAAU,MAAM,UAAU;CAC9B,IAAI,MAAM,gBAAgB,OAAO,IAAI,cAAc;CAEnD,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,OAAO,gBAAgB,OAAO,MAAM,aAAa,CAAC,KAAK;CAC7D,IAAI,MAAM;EACR,IAAI,MAAM,eAAe,KAAA,GAAW,IAAI,cAAc,IAAI,cAAc,KAAK,MAAM;EACnF,IAAI,MAAM,cAAc,KAAA,GAAW,IAAI,aAAa,IAAI,aAAa,KAAK,MAAM;EAChF,IAAI,MAAM,eAAe,KAAA,GAAW,IAAI,cAAc,IAAI,cAAc,KAAK,MAAM;CACrF;CAEA,MAAM,aACJ,QACA,MAAM,eAAe,KAAA,KACrB,MAAM,cAAc,KAAA,KACpB,MAAM,eAAe,KAAA,KACrB,MAAM,aAAa,MAAM,YAAY,MAAM,eAAe;CAI5D,IAAI,MAAM,wBAAwB,SAAU,QAAQ,KAAK,CAAC,YACxD,IAAI,sBAAsB;AAE9B;;;;;;;;;;AAWA,eAAsB,mBACpB,OACA,OACA,IACc;CACd,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;CAC3C,MAAM,UAAU,IAAI,MAAS,MAAM,MAAM;CACzC,IAAI,OAAO;CACX,IAAI,SAAS;CACb,MAAM,SAAS,YAA2B;EACxC,OAAO,CAAC,QAAQ;GACd,MAAM,IAAI;GACV,QAAQ;GACR,IAAI,KAAK,MAAM,QAAQ;GACvB,IAAI;IACF,QAAQ,KAAK,MAAM,GAAG,MAAM,IAAS,CAAC;GACxC,SAAS,KAAK;IACZ,SAAS;IACT,MAAM;GACR;EACF;CACF;CACA,MAAM,cAAc,KAAK,IAAI,OAAO,MAAM,MAAM;CAChD,MAAM,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,YAAY,SAAS,OAAO,CAAC,CAAC;CACrE,OAAO;AACT"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as verifyMaterializedWorkspace, C as assertNoGitIndirection, D as captureMaterializedWorkspace, E as candidateWorkspaceManifest, G as isWellFormedUnicode, T as runCandidateGit, a as persistCandidateOutputArtifact, ct as immutableCandidateValue, it as canonicalCandidateDigest$1, k as verifyBytes, lt as omitTopLevelDigest, ot as deepFreezeCandidate, rt as canonicalCandidateBytes, st as embeddedCandidateArtifact, ut as sha256Bytes, w as readCandidateGitTreeFiles } from "./prepare-
|
|
1
|
+
import { A as verifyMaterializedWorkspace, C as assertNoGitIndirection, D as captureMaterializedWorkspace, E as candidateWorkspaceManifest, G as isWellFormedUnicode, T as runCandidateGit, a as persistCandidateOutputArtifact, ct as immutableCandidateValue, it as canonicalCandidateDigest$1, k as verifyBytes, lt as omitTopLevelDigest, ot as deepFreezeCandidate, rt as canonicalCandidateBytes, st as embeddedCandidateArtifact, ut as sha256Bytes, w as readCandidateGitTreeFiles } from "./prepare-BpIGs5Tc.js";
|
|
2
2
|
import { agentCandidateBundleSchema } from "@tangle-network/agent-interface";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { dirname, isAbsolute, join, resolve, sep, win32 } from "node:path";
|
|
@@ -568,4 +568,4 @@ const typedArrayByteLengthGetter = requireTypedArrayGetter("byteLength");
|
|
|
568
568
|
//#endregion
|
|
569
569
|
export { sealAgentCandidateBundle as i, captureAgentCandidateWorkspaceFiles as n, createAgentCandidateWorkspacePort as r, captureAgentCandidateWorkspace as t };
|
|
570
570
|
|
|
571
|
-
//# sourceMappingURL=workspace-archive-
|
|
571
|
+
//# sourceMappingURL=workspace-archive-5K72EnlT.js.map
|