@tangle-network/agent-runtime 0.134.1 → 0.134.3

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.
Files changed (88) hide show
  1. package/dist/{activation-BaxUkhEf.js → activation-BJS5eud7.js} +3 -3
  2. package/dist/{activation-BaxUkhEf.js.map → activation-BJS5eud7.js.map} +1 -1
  3. package/dist/agent.d.ts +2 -2
  4. package/dist/agent.js +3 -3
  5. package/dist/{analyst-loop-BKWqQhVI.js → analyst-loop-Dk6_xfhI.js} +2 -2
  6. package/dist/{analyst-loop-BKWqQhVI.js.map → analyst-loop-Dk6_xfhI.js.map} +1 -1
  7. package/dist/analyst-loop.d.ts +1 -1
  8. package/dist/analyst-loop.js +1 -1
  9. package/dist/{authoring-BlbRLEOS.js → authoring-zj6jq4HE.js} +2 -2
  10. package/dist/{authoring-BlbRLEOS.js.map → authoring-zj6jq4HE.js.map} +1 -1
  11. package/dist/candidate-execution/index.js +4 -4
  12. package/dist/{candidate-execution-CJRP9CcZ.js → candidate-execution-DDOdYrRO.js} +4 -4
  13. package/dist/{candidate-execution-CJRP9CcZ.js.map → candidate-execution-DDOdYrRO.js.map} +1 -1
  14. package/dist/{conversation-CrWcNPQg.js → conversation-DYVSghi8.js} +2 -2
  15. package/dist/{conversation-CrWcNPQg.js.map → conversation-DYVSghi8.js.map} +1 -1
  16. package/dist/conversation.d.ts +1 -1
  17. package/dist/conversation.js +1 -1
  18. package/dist/{environment-provider-qDOhdE9M.d.ts → environment-provider-CCASQ5FA.d.ts} +3 -3
  19. package/dist/{environment-provider-CwvY-Zeq.js → environment-provider-CLNVqp6H.js} +2 -2
  20. package/dist/{environment-provider-CwvY-Zeq.js.map → environment-provider-CLNVqp6H.js.map} +1 -1
  21. package/dist/environment-provider.d.ts +1 -1
  22. package/dist/environment-provider.js +1 -1
  23. package/dist/{graph-CKNenH2a.js → graph-D0bln4rR.js} +3 -3
  24. package/dist/{graph-CKNenH2a.js.map → graph-D0bln4rR.js.map} +1 -1
  25. package/dist/{improvement-cycle-CSBantKB.js → improvement-cycle-fezPL8Th.js} +6 -6
  26. package/dist/{improvement-cycle-CSBantKB.js.map → improvement-cycle-fezPL8Th.js.map} +1 -1
  27. package/dist/{index-Cz4qKBxm.d.ts → index-BDPN51IH.d.ts} +4 -4
  28. package/dist/{index-CgBJtAzI.d.ts → index-Dg4MfLHq.d.ts} +3 -3
  29. package/dist/{index-De10l_EU.d.ts → index-gevMEHnE.d.ts} +13 -11
  30. package/dist/index.d.ts +9 -9
  31. package/dist/index.js +13 -13
  32. package/dist/intelligence.d.ts +5 -5
  33. package/dist/intelligence.js +6 -6
  34. package/dist/kernel.d.ts +6 -6
  35. package/dist/kernel.js +10 -10
  36. package/dist/{knowledge-B2C9t1Z4.js → knowledge-BXtZD-pC.js} +5 -5
  37. package/dist/{knowledge-B2C9t1Z4.js.map → knowledge-BXtZD-pC.js.map} +1 -1
  38. package/dist/knowledge.d.ts +1 -1
  39. package/dist/knowledge.js +1 -1
  40. package/dist/{loop-runner-bin-C0ymKYU7.js → loop-runner-bin-CjDcX5ua.js} +4 -4
  41. package/dist/{loop-runner-bin-C0ymKYU7.js.map → loop-runner-bin-CjDcX5ua.js.map} +1 -1
  42. package/dist/{loop-runner-bin-D-tgbSPx.d.ts → loop-runner-bin-DvaXefJJ.d.ts} +3 -3
  43. package/dist/loop-runner-bin.d.ts +1 -1
  44. package/dist/loop-runner-bin.js +1 -1
  45. package/dist/mcp/bin.js +3 -3
  46. package/dist/mcp/index.d.ts +5 -5
  47. package/dist/mcp/index.js +5 -5
  48. package/dist/{openai-tools-CzEiSbPW.d.ts → openai-tools-CF2RMD7_.d.ts} +2 -2
  49. package/dist/{openai-tools-ClOkPIi0.js → openai-tools-CycyI0v2.js} +2 -2
  50. package/dist/{openai-tools-ClOkPIi0.js.map → openai-tools-CycyI0v2.js.map} +1 -1
  51. package/dist/{prepare-BXEtLOj9.js → prepare-Cv7NzRZl.js} +2 -2
  52. package/dist/{prepare-BXEtLOj9.js.map → prepare-Cv7NzRZl.js.map} +1 -1
  53. package/dist/primeintellect/index.d.ts +1 -1
  54. package/dist/profiles.d.ts +1 -1
  55. package/dist/{protected-model-port-B7PAmTGi.js → protected-model-port-RnAK2ZrP.js} +2 -2
  56. package/dist/{protected-model-port-B7PAmTGi.js.map → protected-model-port-RnAK2ZrP.js.map} +1 -1
  57. package/dist/{redact-6UE6pdNi.d.ts → redact-8ssmxJ0J.d.ts} +3 -3
  58. package/dist/{runtime-Bisfbn3_.js → runtime-Btwztu5V.js} +14 -11
  59. package/dist/runtime-Btwztu5V.js.map +1 -0
  60. package/dist/{runtime-DlxoqEj2.d.ts → runtime-CFD7S185.d.ts} +4 -4
  61. package/dist/{sandbox-events-vIwmuPdl.js → sandbox-events-CA2amHoA.js} +98 -3
  62. package/dist/sandbox-events-CA2amHoA.js.map +1 -0
  63. package/dist/{spawn-journal-B856eA8e.js → spawn-journal-ZKEKel8N.js} +10 -4
  64. package/dist/spawn-journal-ZKEKel8N.js.map +1 -0
  65. package/dist/{stream-agent-turn-CJog3ebs.d.ts → stream-agent-turn-8rmaOWtn.d.ts} +3 -3
  66. package/dist/{stream-agent-turn-CdIcf-bn.js → stream-agent-turn-DYBpzMmq.js} +2 -2
  67. package/dist/{stream-agent-turn-CdIcf-bn.js.map → stream-agent-turn-DYBpzMmq.js.map} +1 -1
  68. package/dist/{structural-rollout-DKEP5i__.js → structural-rollout-BHluS9JC.js} +4 -4
  69. package/dist/{structural-rollout-DKEP5i__.js.map → structural-rollout-BHluS9JC.js.map} +1 -1
  70. package/dist/{supervise-DhghNvl6.js → supervise-BvjQqKsp.js} +17 -6
  71. package/dist/{supervise-DhghNvl6.js.map → supervise-BvjQqKsp.js.map} +1 -1
  72. package/dist/{supervisor-CMlIOkJP.js → supervisor-BsniJxSa.js} +113 -29
  73. package/dist/supervisor-BsniJxSa.js.map +1 -0
  74. package/dist/testing.d.ts +2 -2
  75. package/dist/testing.js +12 -12
  76. package/dist/{types-6zHo67jn.d.ts → types-Cz4m4Iv6.d.ts} +3 -3
  77. package/dist/{types-D4BfurNs.d.ts → types-XtB9WZzr.d.ts} +26 -5
  78. package/dist/util-C1bv6yog.js +282 -0
  79. package/dist/util-C1bv6yog.js.map +1 -0
  80. package/dist/{workspace-archive-B5oJu5mZ.js → workspace-archive-DFwzVhbk.js} +2 -2
  81. package/dist/{workspace-archive-B5oJu5mZ.js.map → workspace-archive-DFwzVhbk.js.map} +1 -1
  82. package/package.json +1 -1
  83. package/dist/runtime-Bisfbn3_.js.map +0 -1
  84. package/dist/sandbox-events-vIwmuPdl.js.map +0 -1
  85. package/dist/spawn-journal-B856eA8e.js.map +0 -1
  86. package/dist/supervisor-CMlIOkJP.js.map +0 -1
  87. package/dist/util-DD8bRWPL.js +0 -194
  88. package/dist/util-DD8bRWPL.js.map +0 -1
@@ -1,194 +0,0 @@
1
- //#region src/runtime/util.ts
2
- /**
3
- * Best-effort sandbox delete. Skips instances without a `delete` (test fakes);
4
- * swallows errors (the platform reaps on expiry). Returns `false` when delete
5
- * threw, `true` otherwise, so callers can surface a leak if they choose.
6
- */
7
- async function deleteBoxSafe(box) {
8
- if (!box || typeof box.delete !== "function") return true;
9
- try {
10
- await box.delete();
11
- return true;
12
- } catch {
13
- return false;
14
- }
15
- }
16
- /** Short base36 id for trace correlation. Not cryptographic, not collision-free. */
17
- function randomSuffix(len = 8) {
18
- return Math.random().toString(36).slice(2, 2 + len);
19
- }
20
- /** Collision-resistant id for sandbox naming (find-by-name recovery must be unique). */
21
- function randomUuid() {
22
- return crypto.randomUUID();
23
- }
24
- /** Construct an AbortError. Downstream code pattern-matches on `err.name`. */
25
- function abortError() {
26
- const err = /* @__PURE__ */ new Error("aborted");
27
- err.name = "AbortError";
28
- return err;
29
- }
30
- /** Throw an AbortError. */
31
- function throwAbort() {
32
- throw abortError();
33
- }
34
- /** Throw if the signal is already aborted; otherwise no-op. */
35
- function throwIfAborted(signal) {
36
- if (signal?.aborted) throw abortError();
37
- }
38
- /** True for any error whose `name` is `AbortError` (the cross-kernel abort contract). */
39
- function isAbortError(err) {
40
- return err instanceof Error && err.name === "AbortError";
41
- }
42
- /**
43
- * Sleep that resolves early on abort and always clears its timer so it never
44
- * keeps the event loop alive. Resolves (does not reject) on abort — callers
45
- * re-check the signal explicitly after the sleep.
46
- */
47
- function sleep(ms, signal) {
48
- return new Promise((resolve) => {
49
- if (signal?.aborted) {
50
- resolve();
51
- return;
52
- }
53
- let onAbort;
54
- const timer = setTimeout(() => {
55
- if (onAbort && signal) signal.removeEventListener("abort", onAbort);
56
- resolve();
57
- }, ms);
58
- if (signal) {
59
- onAbort = () => {
60
- clearTimeout(timer);
61
- resolve();
62
- };
63
- signal.addEventListener("abort", onAbort, { once: true });
64
- }
65
- });
66
- }
67
- /**
68
- * Race a promise against a timeout. Resolves with the value if it settles in
69
- * time, otherwise resolves with `undefined`. Always clears the timer.
70
- */
71
- function withTimeout(promise, ms) {
72
- return new Promise((resolve) => {
73
- const timer = setTimeout(() => resolve(void 0), ms);
74
- promise.then((value) => {
75
- clearTimeout(timer);
76
- resolve(value);
77
- }, () => {
78
- clearTimeout(timer);
79
- resolve(void 0);
80
- });
81
- });
82
- }
83
- /**
84
- * `JSON.stringify` with a `String()` fallback on throw (cyclic / non-JSON).
85
- * Strings pass through unstringified so a preview of a string output is the
86
- * string itself, not a quoted re-encoding.
87
- */
88
- function stringifySafe(value, opts = {}) {
89
- let s;
90
- try {
91
- if (typeof value === "string") s = value;
92
- else s = (opts.pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value)) ?? String(value);
93
- } catch {
94
- s = String(value);
95
- }
96
- if (opts.max !== void 0 && s.length > opts.max) return `${s.slice(0, opts.max)}…`;
97
- return s;
98
- }
99
- /** A fresh zero token-usage accumulator. */
100
- function zeroTokenUsage() {
101
- return {
102
- input: 0,
103
- output: 0
104
- };
105
- }
106
- /** Copy a token subtotal without dropping optional provider cache telemetry. */
107
- function cloneTokenUsage(usage) {
108
- const cacheBreakdownUnknown = usage.cacheBreakdownKnown === false || usage.input > 0 && !hasClassifiedCacheBreakdown(usage);
109
- return {
110
- input: usage.input,
111
- output: usage.output,
112
- ...usage.tokensKnown === false ? { tokensKnown: false } : {},
113
- ...usage.freshInput !== void 0 ? { freshInput: usage.freshInput } : {},
114
- ...usage.cacheRead !== void 0 ? { cacheRead: usage.cacheRead } : {},
115
- ...usage.cacheWrite !== void 0 ? { cacheWrite: usage.cacheWrite } : {},
116
- ...cacheBreakdownUnknown ? { cacheBreakdownKnown: false } : {}
117
- };
118
- }
119
- /** True only when every positive prompt token has a consistent cache classification. */
120
- function hasCompleteCacheBreakdown(usage) {
121
- if (usage.cacheBreakdownKnown === false) return false;
122
- return hasClassifiedCacheBreakdown(usage);
123
- }
124
- function hasClassifiedCacheBreakdown(usage) {
125
- if (usage.input === 0) return true;
126
- if (usage.freshInput === void 0 || usage.cacheRead === void 0 || usage.cacheWrite === void 0) return false;
127
- return usage.freshInput + usage.cacheRead + usage.cacheWrite === usage.input;
128
- }
129
- /**
130
- * The token charge for one observation: every token counted ONCE, at the moment it first enters
131
- * the context.
132
- *
133
- * `input` is a rolled-up prompt total that re-counts a cached prefix on every turn that reads it,
134
- * so charging `input` makes a 100K prefix read 40 times cost 4.1M for content authored once. The
135
- * three cache classes partition `input`, so `freshInput + cacheWrite` is exactly the prompt the
136
- * provider had to present anew. No price weight is involved: this counts work, and money is a
137
- * separate channel.
138
- *
139
- * Without a readable split the charge stays the rolled-up `input + output`. That number is an
140
- * UPPER BOUND on newly-presented work, not a measurement, and every caller that enforces a ceiling
141
- * must report the difference (`BudgetPool` does it through `readout().cacheBreakdownKnown`).
142
- */
143
- function chargedTokens(usage) {
144
- if (!hasCompleteCacheBreakdown(usage)) return usage.input + usage.output;
145
- const { freshInput = 0, cacheWrite = 0 } = usage;
146
- return freshInput + cacheWrite + usage.output;
147
- }
148
- /** Add the observed subtotal into `acc`; token and cache incompleteness are sticky. */
149
- function addTokenUsage(acc, delta) {
150
- acc.input += delta.input ?? 0;
151
- acc.output += delta.output ?? 0;
152
- if (delta.tokensKnown === false) acc.tokensKnown = false;
153
- if (delta.freshInput !== void 0) acc.freshInput = (acc.freshInput ?? 0) + delta.freshInput;
154
- if (delta.cacheRead !== void 0) acc.cacheRead = (acc.cacheRead ?? 0) + delta.cacheRead;
155
- if (delta.cacheWrite !== void 0) acc.cacheWrite = (acc.cacheWrite ?? 0) + delta.cacheWrite;
156
- const input = delta.input ?? 0;
157
- const classified = delta.freshInput !== void 0 && delta.cacheRead !== void 0 && delta.cacheWrite !== void 0 && delta.freshInput + delta.cacheRead + delta.cacheWrite === input;
158
- if (delta.cacheBreakdownKnown === false || input > 0 && !classified) acc.cacheBreakdownKnown = false;
159
- }
160
- /**
161
- * Map `items` through `fn` with at most `limit` calls in flight at once,
162
- * preserving input order in the result. On the first `fn` rejection no NEW
163
- * items are picked up; already-in-flight calls are awaited, then the first
164
- * error is rethrown. `limit` is clamped to ≥ 1.
165
- *
166
- * Used where a burst of provisioning (e.g. forking N child boxes) must respect
167
- * the loop's concurrency bound instead of firing all N at once.
168
- */
169
- async function mapWithConcurrency(items, limit, fn) {
170
- const bound = Math.max(1, Math.floor(limit));
171
- const results = new Array(items.length);
172
- let next = 0;
173
- let failed = false;
174
- const worker = async () => {
175
- while (!failed) {
176
- const i = next;
177
- next += 1;
178
- if (i >= items.length) return;
179
- try {
180
- results[i] = await fn(items[i], i);
181
- } catch (err) {
182
- failed = true;
183
- throw err;
184
- }
185
- }
186
- };
187
- const workerCount = Math.min(bound, items.length);
188
- await Promise.all(Array.from({ length: workerCount }, () => worker()));
189
- return results;
190
- }
191
- //#endregion
192
- export { hasCompleteCacheBreakdown as a, randomSuffix as c, stringifySafe as d, throwAbort as f, zeroTokenUsage as h, deleteBoxSafe as i, randomUuid as l, withTimeout as m, chargedTokens as n, isAbortError as o, throwIfAborted as p, cloneTokenUsage as r, mapWithConcurrency as s, addTokenUsage as t, sleep as u };
193
-
194
- //# sourceMappingURL=util-DD8bRWPL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util-DD8bRWPL.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 { 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/** 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.\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. The\n * three cache classes partition `input`, so `freshInput + cacheWrite` is exactly the prompt the\n * provider had to present anew. No price weight is involved: this counts work, and money is a\n * separate channel.\n *\n * Without a readable split the charge stays the rolled-up `input + output`. That number is an\n * UPPER BOUND on newly-presented work, not a measurement, and every caller that enforces a ceiling\n * must report the difference (`BudgetPool` does it through `readout().cacheBreakdownKnown`).\n */\nexport function chargedTokens(usage: LoopTokenUsage): number {\n if (!hasCompleteCacheBreakdown(usage)) return usage.input + usage.output\n // A complete split classifies every prompt token. The one complete case that carries no class\n // fields is `input === 0`, where there is no prompt to charge.\n const { freshInput = 0, cacheWrite = 0 } = usage\n return freshInput + cacheWrite + usage.output\n}\n\n/** Add the observed subtotal into `acc`; token and cache incompleteness are sticky. */\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 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 const input = delta.input ?? 0\n const classified =\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":"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"}