agentenkit 0.3.0 → 0.4.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.
Files changed (216) hide show
  1. package/README.md +34 -14
  2. package/dist/adapters/inline.d.ts +19 -5
  3. package/dist/adapters/inline.d.ts.map +1 -1
  4. package/dist/adapters/inline.js +87 -14
  5. package/dist/adapters/inline.js.map +1 -1
  6. package/dist/adapters/memory.d.ts +65 -3
  7. package/dist/adapters/memory.d.ts.map +1 -1
  8. package/dist/adapters/memory.js +267 -3
  9. package/dist/adapters/memory.js.map +1 -1
  10. package/dist/adapters/prisma.d.ts +125 -18
  11. package/dist/adapters/prisma.d.ts.map +1 -1
  12. package/dist/adapters/prisma.js +308 -67
  13. package/dist/adapters/prisma.js.map +1 -1
  14. package/dist/adapters/qstash.d.ts +15 -2
  15. package/dist/adapters/qstash.d.ts.map +1 -1
  16. package/dist/adapters/qstash.js +31 -14
  17. package/dist/adapters/qstash.js.map +1 -1
  18. package/dist/adapters/redis.d.ts +40 -4
  19. package/dist/adapters/redis.d.ts.map +1 -1
  20. package/dist/adapters/redis.js +265 -20
  21. package/dist/adapters/redis.js.map +1 -1
  22. package/dist/adapters/sqlite.d.ts +52 -2
  23. package/dist/adapters/sqlite.d.ts.map +1 -1
  24. package/dist/adapters/sqlite.js +342 -35
  25. package/dist/adapters/sqlite.js.map +1 -1
  26. package/dist/adapters/stream-scripts.d.ts +49 -0
  27. package/dist/adapters/stream-scripts.d.ts.map +1 -0
  28. package/dist/adapters/stream-scripts.js +150 -0
  29. package/dist/adapters/stream-scripts.js.map +1 -0
  30. package/dist/adapters/upstash.d.ts +20 -0
  31. package/dist/adapters/upstash.d.ts.map +1 -1
  32. package/dist/adapters/upstash.js +29 -0
  33. package/dist/adapters/upstash.js.map +1 -1
  34. package/dist/admin/memory.d.ts +11 -1
  35. package/dist/admin/memory.d.ts.map +1 -1
  36. package/dist/admin/memory.js +83 -14
  37. package/dist/admin/memory.js.map +1 -1
  38. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
  39. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
  40. package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
  41. package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
  42. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
  43. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
  44. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
  45. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
  46. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
  47. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
  48. package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
  49. package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
  50. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
  51. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
  52. package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
  53. package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
  54. package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
  55. package/dist/admin/migrations/postgres/index.js +16 -1
  56. package/dist/admin/migrations/postgres/index.js.map +1 -1
  57. package/dist/admin/migrations/runner.d.ts +21 -1
  58. package/dist/admin/migrations/runner.d.ts.map +1 -1
  59. package/dist/admin/migrations/runner.js +41 -4
  60. package/dist/admin/migrations/runner.js.map +1 -1
  61. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
  62. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
  63. package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
  64. package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
  65. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
  66. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
  67. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
  68. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
  69. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
  70. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
  71. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
  72. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
  73. package/dist/admin/migrations/sqlite/index.d.ts +2 -2
  74. package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
  75. package/dist/admin/migrations/sqlite/index.js +17 -3
  76. package/dist/admin/migrations/sqlite/index.js.map +1 -1
  77. package/dist/admin/postgres.d.ts +14 -4
  78. package/dist/admin/postgres.d.ts.map +1 -1
  79. package/dist/admin/postgres.js +131 -36
  80. package/dist/admin/postgres.js.map +1 -1
  81. package/dist/admin/shared.d.ts +19 -0
  82. package/dist/admin/shared.d.ts.map +1 -0
  83. package/dist/admin/shared.js +28 -0
  84. package/dist/admin/shared.js.map +1 -0
  85. package/dist/admin/sqlite.d.ts +9 -1
  86. package/dist/admin/sqlite.d.ts.map +1 -1
  87. package/dist/admin/sqlite.js +112 -29
  88. package/dist/admin/sqlite.js.map +1 -1
  89. package/dist/core/admin.d.ts +28 -6
  90. package/dist/core/admin.d.ts.map +1 -1
  91. package/dist/core/admin.js +92 -23
  92. package/dist/core/admin.js.map +1 -1
  93. package/dist/core/agent.d.ts +7 -4
  94. package/dist/core/agent.d.ts.map +1 -1
  95. package/dist/core/agent.js +15 -11
  96. package/dist/core/agent.js.map +1 -1
  97. package/dist/core/agui.d.ts +17 -0
  98. package/dist/core/agui.d.ts.map +1 -0
  99. package/dist/core/agui.js +69 -0
  100. package/dist/core/agui.js.map +1 -0
  101. package/dist/core/context.d.ts +13 -1
  102. package/dist/core/context.d.ts.map +1 -1
  103. package/dist/core/context.js +70 -19
  104. package/dist/core/context.js.map +1 -1
  105. package/dist/core/deleteThread.d.ts.map +1 -1
  106. package/dist/core/deleteThread.js +33 -4
  107. package/dist/core/deleteThread.js.map +1 -1
  108. package/dist/core/engine.d.ts +41 -11
  109. package/dist/core/engine.d.ts.map +1 -1
  110. package/dist/core/engine.js +855 -352
  111. package/dist/core/engine.js.map +1 -1
  112. package/dist/core/follow.d.ts +63 -1
  113. package/dist/core/follow.d.ts.map +1 -1
  114. package/dist/core/follow.js +293 -16
  115. package/dist/core/follow.js.map +1 -1
  116. package/dist/core/hitl.d.ts +43 -0
  117. package/dist/core/hitl.d.ts.map +1 -1
  118. package/dist/core/hitl.js +163 -35
  119. package/dist/core/hitl.js.map +1 -1
  120. package/dist/core/keys.d.ts +22 -4
  121. package/dist/core/keys.d.ts.map +1 -1
  122. package/dist/core/keys.js +23 -5
  123. package/dist/core/keys.js.map +1 -1
  124. package/dist/core/lease.d.ts +46 -0
  125. package/dist/core/lease.d.ts.map +1 -0
  126. package/dist/core/lease.js +142 -0
  127. package/dist/core/lease.js.map +1 -0
  128. package/dist/core/loop.d.ts +27 -7
  129. package/dist/core/loop.d.ts.map +1 -1
  130. package/dist/core/loop.js +140 -55
  131. package/dist/core/loop.js.map +1 -1
  132. package/dist/core/messages.d.ts +21 -2
  133. package/dist/core/messages.d.ts.map +1 -1
  134. package/dist/core/messages.js +61 -2
  135. package/dist/core/messages.js.map +1 -1
  136. package/dist/core/prune.d.ts +24 -0
  137. package/dist/core/prune.d.ts.map +1 -0
  138. package/dist/core/prune.js +43 -0
  139. package/dist/core/prune.js.map +1 -0
  140. package/dist/core/publish.d.ts +38 -10
  141. package/dist/core/publish.d.ts.map +1 -1
  142. package/dist/core/publish.js +126 -12
  143. package/dist/core/publish.js.map +1 -1
  144. package/dist/core/reclaim.d.ts +8 -1
  145. package/dist/core/reclaim.d.ts.map +1 -1
  146. package/dist/core/reclaim.js +149 -18
  147. package/dist/core/reclaim.js.map +1 -1
  148. package/dist/core/run.d.ts +7 -3
  149. package/dist/core/run.d.ts.map +1 -1
  150. package/dist/core/run.js +95 -35
  151. package/dist/core/run.js.map +1 -1
  152. package/dist/core/segment.d.ts +62 -0
  153. package/dist/core/segment.d.ts.map +1 -0
  154. package/dist/core/segment.js +318 -0
  155. package/dist/core/segment.js.map +1 -0
  156. package/dist/core/settle.d.ts +57 -0
  157. package/dist/core/settle.d.ts.map +1 -0
  158. package/dist/core/settle.js +181 -0
  159. package/dist/core/settle.js.map +1 -0
  160. package/dist/core/snapshot.d.ts +36 -0
  161. package/dist/core/snapshot.d.ts.map +1 -0
  162. package/dist/core/snapshot.js +87 -0
  163. package/dist/core/snapshot.js.map +1 -0
  164. package/dist/core/stop.d.ts +16 -1
  165. package/dist/core/stop.d.ts.map +1 -1
  166. package/dist/core/stop.js +69 -15
  167. package/dist/core/stop.js.map +1 -1
  168. package/dist/core/stream-events.d.ts +184 -0
  169. package/dist/core/stream-events.d.ts.map +1 -0
  170. package/dist/core/stream-events.js +26 -0
  171. package/dist/core/stream-events.js.map +1 -0
  172. package/dist/core/stream.d.ts +29 -0
  173. package/dist/core/stream.d.ts.map +1 -1
  174. package/dist/core/stream.js +79 -0
  175. package/dist/core/stream.js.map +1 -1
  176. package/dist/core/subagent.d.ts +36 -5
  177. package/dist/core/subagent.d.ts.map +1 -1
  178. package/dist/core/subagent.js +117 -22
  179. package/dist/core/subagent.js.map +1 -1
  180. package/dist/core/types.d.ts +195 -12
  181. package/dist/core/types.d.ts.map +1 -1
  182. package/dist/core/types.js +26 -1
  183. package/dist/core/types.js.map +1 -1
  184. package/dist/core/usage.d.ts +53 -5
  185. package/dist/core/usage.d.ts.map +1 -1
  186. package/dist/core/usage.js +170 -47
  187. package/dist/core/usage.js.map +1 -1
  188. package/dist/index.d.ts +16 -11
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +12 -7
  191. package/dist/index.js.map +1 -1
  192. package/dist/ports/admin.d.ts +59 -0
  193. package/dist/ports/admin.d.ts.map +1 -1
  194. package/dist/ports/kv.d.ts +17 -0
  195. package/dist/ports/kv.d.ts.map +1 -1
  196. package/dist/ports/queue.d.ts +87 -7
  197. package/dist/ports/queue.d.ts.map +1 -1
  198. package/dist/ports/queue.js +36 -1
  199. package/dist/ports/queue.js.map +1 -1
  200. package/dist/ports/runtime.d.ts +171 -20
  201. package/dist/ports/runtime.d.ts.map +1 -1
  202. package/dist/ports/storage.d.ts +26 -5
  203. package/dist/ports/storage.d.ts.map +1 -1
  204. package/dist/ports/streams.d.ts +60 -0
  205. package/dist/ports/streams.d.ts.map +1 -0
  206. package/dist/ports/streams.js +20 -0
  207. package/dist/ports/streams.js.map +1 -0
  208. package/dist/pricing.d.ts +5 -0
  209. package/dist/pricing.d.ts.map +1 -1
  210. package/dist/pricing.js +35 -10
  211. package/dist/pricing.js.map +1 -1
  212. package/dist/runtime.d.ts +6 -0
  213. package/dist/runtime.d.ts.map +1 -1
  214. package/dist/runtime.js +144 -46
  215. package/dist/runtime.js.map +1 -1
  216. package/package.json +1 -1
@@ -0,0 +1,142 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ /** The one way the platform puts a job on the queue: it stamps the job with a
3
+ * fresh `dispatchId`, so every enqueue is a delivery of its own and only the
4
+ * queue's own redelivery repeats one (§3.4). */
5
+ export function enqueueJob(deps, job, opts) {
6
+ return deps.queue.enqueue({ ...job, dispatchId: job.dispatchId ?? randomUUID() }, opts);
7
+ }
8
+ /** The per-thread run lock (§3.4). */
9
+ export const runLockKey = (threadId) => `agent:lock:${threadId}`;
10
+ /** The run lock's value is `<runId>/<dispatchId>/<nonce>` (§3.4).
11
+ *
12
+ * - `runId` says which run holds the thread.
13
+ * - `dispatchId` says which delivery of that run. It rides on the job, so a
14
+ * queue that delivers the same job twice delivers the same `dispatchId`,
15
+ * and the second copy is known for a duplicate.
16
+ * - `nonce` is new on every acquire. Two holders of the same job — a stalled
17
+ * worker whose lease lapsed, and the redelivery that took it over — differ
18
+ * here and nowhere else, so the stalled one can neither renew nor free the
19
+ * new holder's lock.
20
+ *
21
+ * A value written before dispatch ids existed is a bare run id; it parses as
22
+ * that run with no dispatch. */
23
+ const SEP = '/';
24
+ export function parseLockValue(value) {
25
+ if (value === null)
26
+ return { runId: null, dispatchId: null };
27
+ const parts = value.split(SEP);
28
+ if (parts.length < 3)
29
+ return { runId: value, dispatchId: null };
30
+ return { runId: parts[0], dispatchId: parts[1] };
31
+ }
32
+ /** Thrown out of a loop whose lease was lost between steps: another worker
33
+ * may own the thread, so this one must not write another step to it. */
34
+ export class RunLockLostError extends Error {
35
+ constructor() {
36
+ super('run lock lost');
37
+ this.name = 'RunLockLostError';
38
+ }
39
+ }
40
+ /** One holder's grip on a thread's run lock. */
41
+ export class Lease {
42
+ deps;
43
+ key;
44
+ value;
45
+ lostFlag = false;
46
+ timer;
47
+ released = false;
48
+ constructor(deps, key, value) {
49
+ this.deps = deps;
50
+ this.key = key;
51
+ this.value = value;
52
+ }
53
+ /** Take the thread's run lock for a run and one delivery of it; null when
54
+ * someone else holds it. */
55
+ static async acquire(deps, threadId, runId, dispatchId) {
56
+ const value = [runId ?? randomUUID(), dispatchId ?? randomUUID(), randomUUID()].join(SEP);
57
+ const lease = new Lease(deps, runLockKey(threadId), value);
58
+ const ok = await deps.kv.set(lease.key, value, {
59
+ onlyIfNotExists: true,
60
+ exSeconds: deps.config.runLockLeaseSeconds,
61
+ });
62
+ return ok ? lease : null;
63
+ }
64
+ /** The lease could not be kept. Another worker may own the thread by now,
65
+ * so the holder must stop writing to it. */
66
+ get lost() {
67
+ return this.lostFlag;
68
+ }
69
+ /** Renew in the background until `release`, the way a queue renews a job
70
+ * lease: an expired lock then means a dead worker and nothing else.
71
+ * `onLost` runs once, when the lease cannot be kept — the key is gone or
72
+ * holds another holder's value, or no renewal has landed for two thirds of
73
+ * the lease (it is then close to lapsing, and another worker may take it
74
+ * before the next try). */
75
+ keep(onLost) {
76
+ if (this.timer || this.released)
77
+ return;
78
+ const leaseMs = this.deps.config.runLockLeaseSeconds * 1000;
79
+ const everyMs = Math.max(Math.floor(leaseMs / 6), 1);
80
+ const log = this.deps.log ?? console;
81
+ let lastOk = Date.now();
82
+ let inFlight = false;
83
+ this.timer = setInterval(async () => {
84
+ if (inFlight || this.lostFlag || this.released)
85
+ return;
86
+ inFlight = true;
87
+ let outcome = 'error';
88
+ let error;
89
+ try {
90
+ // Bounded: a call that hangs past the next tick counts as a failure,
91
+ // not as time silently spent holding a lease that may be lapsing.
92
+ const renewed = await Promise.race([
93
+ this.deps.kv.setIfValue(this.key, this.value, this.value, {
94
+ exSeconds: this.deps.config.runLockLeaseSeconds,
95
+ }),
96
+ new Promise((_, reject) => setTimeout(() => reject(new Error('renewal timed out')), everyMs).unref?.()),
97
+ ]);
98
+ outcome = renewed ? 'ok' : 'taken';
99
+ }
100
+ catch (err) {
101
+ error = err;
102
+ }
103
+ finally {
104
+ inFlight = false;
105
+ }
106
+ if (this.released)
107
+ return;
108
+ if (outcome === 'ok') {
109
+ lastOk = Date.now();
110
+ return;
111
+ }
112
+ if (outcome === 'error' && Date.now() - lastOk <= (leaseMs * 2) / 3) {
113
+ // The Logger port only promises `error`; a transient miss is not one.
114
+ log.warn?.('run lock renewal failed; retrying', { key: this.key, err: String(error) });
115
+ return;
116
+ }
117
+ log.error(outcome === 'taken'
118
+ ? 'run lock taken by another holder; ending the segment'
119
+ : 'run lock could not be renewed in time; ending the segment', { key: this.key, ...(error ? { err: String(error) } : {}) });
120
+ this.lostFlag = true;
121
+ this.stop();
122
+ onLost?.();
123
+ }, everyMs);
124
+ // Never hold a process open just to renew a lock.
125
+ this.timer.unref?.();
126
+ }
127
+ /** Stop renewing and free the lock, only while it is still this holder's.
128
+ * Safe to call more than once. */
129
+ async release() {
130
+ if (this.released)
131
+ return;
132
+ this.released = true;
133
+ this.stop();
134
+ await this.deps.kv.delIfValue(this.key, this.value).catch(() => undefined);
135
+ }
136
+ stop() {
137
+ if (this.timer)
138
+ clearInterval(this.timer);
139
+ this.timer = undefined;
140
+ }
141
+ }
142
+ //# sourceMappingURL=lease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.js","sourceRoot":"","sources":["../../src/core/lease.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import type { LanguageModel } from 'ai';
2
2
  import type { RuntimePorts } from '../ports/runtime.js';
3
3
  import type { AgentKind, ProviderOptions } from './types.js';
4
+ import type { AgentRunState } from './state.js';
5
+ import type { PrepareStepFn, SystemFn } from '../ports/runtime.js';
4
6
  import type { RegisteredAgent } from './agent.js';
5
- import { type TokenAttribution } from './usage.js';
7
+ import { type RunLedger, type TokenAttribution } from './usage.js';
6
8
  /** True for the sentinel a parked `requiresConfirmation` tool returns (§2.5).
7
9
  * It is never a real tool result and is never persisted. */
8
10
  export declare const isParked: (result: unknown) => boolean;
@@ -65,12 +67,7 @@ export declare function executeStep(agent: RegisteredAgent, call: {
65
67
  text: string;
66
68
  };
67
69
  }): Promise<StepResult>;
68
- /** Tokens a run has spent, main agent and nested runs together (§2.7). Shared
69
- * by reference so a child's spend counts against the run's safety cap the
70
- * moment it happens — a budget that ignores delegated work is not a budget. */
71
- export interface RunLedger {
72
- tokensUsed: number;
73
- }
70
+ export { RunLedger, seedRunLedger } from './usage.js';
74
71
  export interface LoopInput {
75
72
  /** Whose stream this loop persists to (§2.7). `null` is the main agent. */
76
73
  agentId: string | null;
@@ -85,6 +82,13 @@ export interface LoopInput {
85
82
  tools: Record<string, any>;
86
83
  maxSteps: number;
87
84
  abortSignal: AbortSignal;
85
+ /** True once the run lock is gone (§3.4): another worker may own the
86
+ * thread, so this loop must not write another step to it. */
87
+ fenced?: () => boolean;
88
+ /** Writes the parks raised during a step, once that step is saved (see
89
+ * ParkBox). Only the main loop sets it: a nested run's parks wait for the
90
+ * main agent's step. */
91
+ commitParks?: () => Promise<void>;
88
92
  providerOptions?: ProviderOptions;
89
93
  /** Cumulative cap for the whole run, checked against the shared ledger. */
90
94
  tokenBudget?: number;
@@ -103,9 +107,22 @@ export interface LoopInput {
103
107
  /** The name that goes on the bill line: the registered handle for the main
104
108
  * run, the delegation's name for a nested one. */
105
109
  agentName?: string;
110
+ /** Every raw chunk, as the SDK streams it: the host's own callback. */
106
111
  onChunk?: (chunk: unknown) => Promise<void>;
112
+ /** Publishes a chunk as an event. Deltas reach it merged (see ChunkBatcher),
113
+ * and everything a step streamed is out before the step is committed. */
114
+ publishChunk?: (chunk: unknown) => Promise<void>;
115
+ /** Calls whose tool failed (see withHitl), for their tool-result chunk. */
116
+ toolErrors?: Map<string, string>;
107
117
  /** Persona for a nested run; omitted, the agent's own spec `system` stands. */
108
118
  system?: string;
119
+ /** Builds the persona per step with the run's state (§3.1); wins over
120
+ * `system`. What the agent is acting on may change between steps. */
121
+ systemFn?: SystemFn;
122
+ /** Edits the prompt for one step, just before it is sent. See PrepareStepFn. */
123
+ prepareStep?: PrepareStepFn;
124
+ /** The run's state (§2.10), handed to `systemFn` and `prepareStep`. */
125
+ state?: AgentRunState;
109
126
  /** Carry the system prompt as a stamped message rather than the SDK's
110
127
  * `system:` string, so it can hold a cache breakpoint (§2.6). */
111
128
  cacheSystemPrompt?: boolean;
@@ -122,6 +139,9 @@ export interface LoopOutcome {
122
139
  parkedToolCallId?: string;
123
140
  /** The abort signal fired mid-loop — a user stop (§2.1). */
124
141
  aborted: boolean;
142
+ /** The last model call ended without a finish and without a user stop,
143
+ * and no error said why. The run must not be taken as finished. */
144
+ interrupted: boolean;
125
145
  /** Iterations this loop completed (§2.9). */
126
146
  steps: number;
127
147
  /** The run hit its money cap and stopped between steps (§4). */
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAQpB;6DAC6D;AAC7D,eAAO,MAAM,QAAQ,GAAI,QAAQ,OAAO,KAAG,OAGqB,CAAC;AAEjE;;;iBAGiB;AACjB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1C;qEACiE;IACjE,gBAAgB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,wDAAwD;IACxD,WAAW,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9E;;gBAEY;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IACvE;gFAC4E;IAC5E,QAAQ,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC7D;;kDAE8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;yEACqE;IACrE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C;oDACgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;0EAEsE;IACtE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;0DACsD;IACtD,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B,GACA,OAAO,CAAC,UAAU,CAAC,CAkGrB;AAeD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;yDACqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB;+EAC2E;IAC3E,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB;kEAC8D;IAC9D,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;IACvB;;6BAEyB;IACzB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;sDAEkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;4BACwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;0CACsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;uDACmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C;8EAC0E;IAC1E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,2EAA2E;IAC3E,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;0EACsE;IACtE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gFAAgF;IAChF,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,uEAAuE;IACvE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;sEACkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,WAAW,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB;wEACoE;IACpE,WAAW,EAAE,OAAO,CAAC;IACrB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;gDAQgD;AAChD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,WAAW,CAAC,CAuStB"}
package/dist/core/loop.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { generateText, streamText } from 'ai';
2
2
  import { systemCacheMessage } from './cache.js';
3
- import { fillTokens, providerMeta, recordCall, } from './usage.js';
3
+ import { fillTokens, providerMeta, } from './usage.js';
4
4
  import { estimateTokens } from './context.js';
5
- import { drainOrThrow } from './stream.js';
5
+ import { ChunkBatcher, chunkPayload, drainOrThrow } from './stream.js';
6
6
  import { publish, publishNotice } from './publish.js';
7
7
  import { HITL_PARKED } from './hitl.js';
8
+ import { RunLockLostError } from './lease.js';
8
9
  /** True for the sentinel a parked `requiresConfirmation` tool returns (§2.5).
9
10
  * It is never a real tool result and is never persisted. */
10
11
  export const isParked = (result) => typeof result === 'object' &&
@@ -14,7 +15,9 @@ export async function executeStep(agent, call) {
14
15
  // Ownership rule (§3.1): user args spread FIRST, platform keys LAST. The
15
16
  // user's stream callbacks are stripped here and re-chained by the platform
16
17
  // (onChunk below, onFinish at finalize) so the SDK can never own them.
17
- const { onChunk: _userOnChunk, onFinish: _userOnFinish, onStepFinish: userOnStepFinish, system: specSystem, ...userArgs } = agent.args;
18
+ const { onChunk: _userOnChunk, onFinish: _userOnFinish, onStepFinish: userOnStepFinish, system: specSystem,
19
+ // Platform hooks, not SDK options: the engine calls these itself.
20
+ systemFn: _systemFn, prepareStep: _prepareStep, onSettle: _onSettle, ...userArgs } = agent.args;
18
21
  // A nested run brings its own persona and must not inherit the parent's.
19
22
  const system = call.system ?? specSystem;
20
23
  const hoistSystem = call.cacheSystemPrompt === true && typeof system === 'string' && system.length > 0;
@@ -72,7 +75,10 @@ export async function executeStep(agent, call) {
72
75
  providerMetadata: meta,
73
76
  response: { id: response?.id, headers: response?.headers },
74
77
  streamedText: call.partial?.text || text,
75
- finished: true,
78
+ // The SDK makes up a finish when the provider's stream closes without
79
+ // one, with reason 'unknown'. A step like that did not finish: the
80
+ // provider cut it short without saying so.
81
+ finished: finishReason !== 'unknown',
76
82
  };
77
83
  }
78
84
  const result = await generateText(shared);
@@ -101,6 +107,7 @@ function capValue(value, limit) {
101
107
  const json = JSON.stringify(value) ?? 'null';
102
108
  return json.length <= limit ? value : `${json.slice(0, limit)}…`;
103
109
  }
110
+ export { RunLedger, seedRunLedger } from './usage.js';
104
111
  /** The platform-owned loop (§2.1, §5.6), run by the main agent and by every
105
112
  * nested run alike (§2.7).
106
113
  *
@@ -125,6 +132,7 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
125
132
  let stepsLeft = input.maxSteps;
126
133
  let stepsRun = 0;
127
134
  let costExhausted = false;
135
+ let interrupted = false;
128
136
  // The input count of the last finished call. A call cut off before its
129
137
  // finish never reports one, and its prompt was the same size as the
130
138
  // previous step's plus a little, so this is the honest floor to bill.
@@ -132,23 +140,53 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
132
140
  while (stepsLeft > 0 && !input.abortSignal.aborted) {
133
141
  stepsLeft--;
134
142
  const stepStartedAt = Date.now();
143
+ // Built per step with the run's state (§3.1): what the agent is acting
144
+ // on may have changed since the last step. A throw fails the step.
145
+ const system = input.systemFn ? await input.systemFn(threadId, input.state ?? {}) : input.system;
146
+ const prompt = input.prepareStep
147
+ ? await input.prepareStep(threadId, input.state ?? {}, input.messages)
148
+ : input.messages;
149
+ // One round trip is bounded in wall time when stepTimeoutMs is set: a
150
+ // model that accepts the call and never answers ends this step like any
151
+ // failed step, and the run takes the retry policy (§2.8).
152
+ const stepAbort = new AbortController();
153
+ const onRunAbort = () => stepAbort.abort(input.abortSignal.reason);
154
+ input.abortSignal.addEventListener('abort', onRunAbort, { once: true });
155
+ let stepTimedOut = false;
156
+ const stepLimit = deps.config.stepTimeoutMs;
157
+ const stepTimer = stepLimit > 0
158
+ ? setTimeout(() => { stepTimedOut = true; stepAbort.abort(new Error('step timed out')); }, stepLimit)
159
+ : undefined;
160
+ const timeoutError = () => new Error(`step ${stepsRun + 1} ran longer than ${stepLimit}ms`);
135
161
  const partial = { text: '' };
136
162
  let step;
163
+ const batcher = input.publishChunk ? new ChunkBatcher(input.publishChunk) : null;
137
164
  try {
138
165
  step = await executeStep(agent, {
139
166
  kind: input.kind,
140
167
  model: input.model,
141
- messages: input.messages,
168
+ messages: prompt,
142
169
  tools: input.tools,
143
170
  providerOptions: input.providerOptions,
144
- abortSignal: input.abortSignal,
145
- onChunk: input.kind === 'stream-text' ? input.onChunk : undefined,
146
- system: input.system,
171
+ abortSignal: stepAbort.signal,
172
+ onChunk: input.kind === 'stream-text'
173
+ ? async (chunk) => {
174
+ const published = chunkPayload(chunk, input.toolErrors);
175
+ if (published !== null)
176
+ await batcher?.push(published);
177
+ await input.onChunk?.(chunk);
178
+ }
179
+ : undefined,
180
+ system,
147
181
  cacheSystemPrompt: input.cacheSystemPrompt,
148
182
  partial,
149
183
  });
184
+ await batcher?.flush(); // the step's text is out before anything below
150
185
  }
151
186
  catch (err) {
187
+ await batcher?.flush();
188
+ clearTimeout(stepTimer);
189
+ input.abortSignal.removeEventListener('abort', onRunAbort);
152
190
  // The call ended without a finish: a user stop, or the provider failing
153
191
  // part way. Either way the provider billed for what it had already
154
192
  // produced, so the call is recorded rather than dropped — with
@@ -157,23 +195,78 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
157
195
  // certainly sent rather than billing the call as free.
158
196
  const cut = unfinishedUsage(input, stepsRun + 1, partial.text, input.abortSignal.aborted ? 'aborted' : 'error', lastInput || estimateTokens(input.messages));
159
197
  if (cut.totalTokens > 0) {
160
- const priced = await recordCall(deps, threadId, cut);
198
+ const priced = await ledger.record(deps, threadId, cut);
161
199
  addAttribution(attribution, priced);
162
200
  tokensUsed += priced.totalTokens;
163
- ledger.tokensUsed += priced.totalTokens;
164
201
  }
165
202
  if (input.abortSignal.aborted)
166
203
  break; // user stop mid-step
204
+ if (stepTimedOut)
205
+ throw timeoutError(); // → §2.8 retry policy
167
206
  throw err; // real failure → §2.8 redrive policy
168
207
  }
208
+ clearTimeout(stepTimer);
209
+ input.abortSignal.removeEventListener('abort', onRunAbort);
210
+ if (stepTimedOut && !step.finished && !input.abortSignal.aborted) {
211
+ // The step's own deadline cut the stream: billed like any cut call,
212
+ // then a failure for the retry policy.
213
+ const cut = unfinishedUsage(input, stepsRun + 1, partial.text, 'error', lastInput || estimateTokens(input.messages));
214
+ if (cut.totalTokens > 0) {
215
+ const priced = await ledger.record(deps, threadId, cut);
216
+ addAttribution(attribution, priced);
217
+ tokensUsed += priced.totalTokens;
218
+ }
219
+ throw timeoutError();
220
+ }
221
+ if (!step.finished) {
222
+ // The stream ended with no finish and no error. Billed like any call cut
223
+ // short, then handed back unfinished: the caller retries it rather than
224
+ // taking the partial step as the run's end.
225
+ const cut = unfinishedUsage(input, stepsRun + 1, partial.text, input.abortSignal.aborted ? 'aborted' : 'error', lastInput || estimateTokens(input.messages));
226
+ if (cut.totalTokens > 0) {
227
+ const priced = await ledger.record(deps, threadId, cut);
228
+ addAttribution(attribution, priced);
229
+ tokensUsed += priced.totalTokens;
230
+ }
231
+ if (!input.abortSignal.aborted)
232
+ interrupted = true;
233
+ break;
234
+ }
235
+ // One priced usage row per model call (§4), recorded below once the step
236
+ // is committed.
237
+ const stepUsage = {
238
+ runId: input.billingRunId,
239
+ agentId: input.agentId,
240
+ agentName: input.agentName,
241
+ kind: 'step',
242
+ step: stepsRun + 1,
243
+ model: input.modelKey,
244
+ modelId: input.modelId,
245
+ outcome: 'finished',
246
+ providerMetadata: providerMeta(step.providerMetadata, step.response),
247
+ ...fillTokens(step.usage, step.providerMetadata),
248
+ };
249
+ // The step is done, and its messages are the first thing it writes. A
250
+ // worker that lost the lock meanwhile must not write them: the next
251
+ // holder may already be writing its own. The call itself did happen and
252
+ // the provider billed it, so its usage is still recorded.
253
+ if (input.fenced?.()) {
254
+ await ledger.record(deps, threadId, stepUsage);
255
+ throw new RunLockLostError();
256
+ }
169
257
  // Per-step durability (§5.6): append this step's turns BEFORE the next
170
258
  // step. A parked HITL tool result (the sentinel) is NOT a real result —
171
- // it is skipped here; the resumed segment appends the user's verdict.
172
- const persisted = step.responseMessages.filter((m) => {
259
+ // it is skipped here; the resumed segment appends the user's verdict. Only
260
+ // the parked parts go: another tool in the same step that already ran
261
+ // keeps its result, or the model would be told it never did.
262
+ const persisted = step.responseMessages.flatMap((m) => {
173
263
  if (m.role !== 'tool')
174
- return true;
264
+ return [m];
175
265
  const parts = Array.isArray(m.content) ? m.content : [];
176
- return !parts.some((p) => isParked(p?.result));
266
+ const kept = parts.filter((p) => !isParked(p?.result));
267
+ if (kept.length === 0)
268
+ return [];
269
+ return [kept.length === parts.length ? m : { ...m, content: kept }];
177
270
  });
178
271
  for (const m of persisted) {
179
272
  await deps.storage.messages.append(threadId, {
@@ -183,34 +276,35 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
183
276
  });
184
277
  }
185
278
  input.messages.push(...step.responseMessages);
279
+ // One priced usage row per model call (§4), booked on the run-wide ledger
280
+ // the caps are checked against (§2.7). Written as soon as the step's
281
+ // messages are, before anything else: a crash after this point resumes
282
+ // from the saved step and never runs the call again, so its row must
283
+ // already be there.
284
+ const priced = await ledger.record(deps, threadId, stepUsage);
186
285
  // A replay boundary (§2.2). Everything this step produced is now durable
187
286
  // history, so a reconnecting client must NOT also replay its chunks — it
188
287
  // would render the same text twice, once from the message and once from
189
288
  // the stream that produced it. Persisted (not a bus notice) because the
190
289
  // snapshot needs its seq to know where durable ends and live begins.
290
+ // It carries the step's finish and usage: a run stream turns it into
291
+ // its STEP_FINISHED, at the moment the step is saved.
191
292
  await publish(deps, threadId, 'STEP_COMMITTED', {
192
293
  index: stepsRun,
193
294
  agentId: input.agentId,
194
- });
195
- // One priced usage row per model call (§4), then the same counters
196
- // accumulated across the segment's steps and into the run-wide ledger the
197
- // safety caps are checked against (§2.7).
198
- const priced = await recordCall(deps, threadId, {
199
- runId: input.billingRunId,
200
- agentId: input.agentId,
201
- agentName: input.agentName,
202
- kind: 'step',
203
295
  step: stepsRun + 1,
204
- model: input.modelKey,
205
- modelId: input.modelId,
206
- outcome: 'finished',
207
- providerMetadata: providerMeta(step.providerMetadata, step.response),
208
- ...fillTokens(step.usage, step.providerMetadata),
296
+ finishReason: step.finishReason,
297
+ inputTokens: priced.inputTokens,
298
+ cachedInputTokens: priced.cacheReadInputTokens,
299
+ outputTokens: priced.outputTokens,
300
+ totalTokens: priced.totalTokens,
209
301
  });
302
+ // The step is durable now, tool calls included, so the parks it raised
303
+ // can be written: WAITING_FOR_INPUT and the approval requests.
304
+ await input.commitParks?.();
210
305
  lastInput = priced.inputTokens;
211
306
  addAttribution(attribution, priced);
212
307
  tokensUsed += priced.totalTokens;
213
- ledger.tokensUsed += priced.totalTokens;
214
308
  lastText = step.text ?? '';
215
309
  lastFinishReason = step.finishReason;
216
310
  stepsRun += 1;
@@ -231,9 +325,11 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
231
325
  tools: (step.toolResults ?? [])
232
326
  .map((r) => r?.toolName)
233
327
  .filter(Boolean),
328
+ at: new Date(),
234
329
  ...(deps.config.recordPayloads
235
330
  ? {
236
- text: cap(step.text, deps.config.payloadCapChars),
331
+ // Left out when empty, as the Go runtime does.
332
+ ...(step.text ? { text: cap(step.text, deps.config.payloadCapChars) } : {}),
237
333
  toolCalls: (step.toolResults ?? []).map((r) => ({
238
334
  toolName: r?.toolName,
239
335
  args: capValue(r?.args, deps.config.payloadCapChars),
@@ -264,34 +360,22 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
264
360
  });
265
361
  break;
266
362
  }
267
- // The money cap (§4), checked in the same place and the same way. It reads
268
- // the run's spend back from the store rather than from a counter in this
269
- // process: a run that parked and resumed in another worker must not get
270
- // its cap reset, and a nested run's calls have to count against the same
271
- // cap.
363
+ // The money cap (§4), checked in the same place and the same way, against
364
+ // the same shared ledger: a nested run's calls count against it, and a
365
+ // run that parked or retried starts from what it already spent (see
366
+ // seedRunLedger).
272
367
  //
273
368
  // It only ever sees priced calls: with no pricer configured nothing is
274
369
  // ever spent and the cap never fires.
275
- if (input.costBudgetMicros) {
276
- try {
277
- const spent = await deps.storage.usage.total(threadId, { runId: input.billingRunId });
278
- if (spent.costMicros >= input.costBudgetMicros) {
279
- await publish(deps, threadId, 'COST_BUDGET_EXHAUSTED', {
280
- agentId: input.agentId,
281
- costMicros: spent.costMicros,
282
- costBudgetMicros: input.costBudgetMicros,
283
- currency: spent.currency,
284
- });
285
- costExhausted = true;
286
- break;
287
- }
288
- }
289
- catch (err) {
290
- (deps.log ?? console).error('cost budget not checked', {
291
- run: input.billingRunId,
292
- err,
293
- });
294
- }
370
+ if (input.costBudgetMicros && ledger.costMicros >= input.costBudgetMicros) {
371
+ await publish(deps, threadId, 'COST_BUDGET_EXHAUSTED', {
372
+ agentId: input.agentId,
373
+ costMicros: ledger.costMicros,
374
+ costBudgetMicros: input.costBudgetMicros,
375
+ ...(ledger.currency ? { currency: ledger.currency } : {}),
376
+ });
377
+ costExhausted = true;
378
+ break;
295
379
  }
296
380
  // 'tool-calls' → the SDK executed the step's tools; the loop feeds the
297
381
  // results back. Anything else ('stop', 'length', …) ends the run.
@@ -306,6 +390,7 @@ export async function runLoop(deps, agent, threadId, input, ledger) {
306
390
  parked,
307
391
  parkedToolCallId,
308
392
  aborted: input.abortSignal.aborted,
393
+ interrupted,
309
394
  steps: stepsRun,
310
395
  costExhausted,
311
396
  };
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/core/loop.ts"],"names":[],"mappings":"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"}