@arden-hq/loop 0.0.0-stage → 0.1.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 (223) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +121 -2
  3. package/dist/abort.d.ts +9 -0
  4. package/dist/abort.d.ts.map +1 -0
  5. package/dist/abort.js +31 -0
  6. package/dist/abort.js.map +1 -0
  7. package/dist/agent/agent.d.ts +48 -0
  8. package/dist/agent/agent.d.ts.map +1 -0
  9. package/dist/agent/agent.js +146 -0
  10. package/dist/agent/agent.js.map +1 -0
  11. package/dist/agent/background-tools.d.ts +51 -0
  12. package/dist/agent/background-tools.d.ts.map +1 -0
  13. package/dist/agent/background-tools.js +257 -0
  14. package/dist/agent/background-tools.js.map +1 -0
  15. package/dist/agent/budget.d.ts +5 -0
  16. package/dist/agent/budget.d.ts.map +1 -0
  17. package/dist/agent/budget.js +48 -0
  18. package/dist/agent/budget.js.map +1 -0
  19. package/dist/agent/config.d.ts +61 -0
  20. package/dist/agent/config.d.ts.map +1 -0
  21. package/dist/agent/config.js +99 -0
  22. package/dist/agent/config.js.map +1 -0
  23. package/dist/agent/guards.d.ts +10 -0
  24. package/dist/agent/guards.d.ts.map +1 -0
  25. package/dist/agent/guards.js +136 -0
  26. package/dist/agent/guards.js.map +1 -0
  27. package/dist/agent/history-journal.d.ts +18 -0
  28. package/dist/agent/history-journal.d.ts.map +1 -0
  29. package/dist/agent/history-journal.js +87 -0
  30. package/dist/agent/history-journal.js.map +1 -0
  31. package/dist/agent/history-projection.d.ts +6 -0
  32. package/dist/agent/history-projection.d.ts.map +1 -0
  33. package/dist/agent/history-projection.js +62 -0
  34. package/dist/agent/history-projection.js.map +1 -0
  35. package/dist/agent/interactions.d.ts +14 -0
  36. package/dist/agent/interactions.d.ts.map +1 -0
  37. package/dist/agent/interactions.js +85 -0
  38. package/dist/agent/interactions.js.map +1 -0
  39. package/dist/agent/middleware.d.ts +5 -0
  40. package/dist/agent/middleware.d.ts.map +1 -0
  41. package/dist/agent/middleware.js +55 -0
  42. package/dist/agent/middleware.js.map +1 -0
  43. package/dist/agent/model-output-projection.d.ts +27 -0
  44. package/dist/agent/model-output-projection.d.ts.map +1 -0
  45. package/dist/agent/model-output-projection.js +138 -0
  46. package/dist/agent/model-output-projection.js.map +1 -0
  47. package/dist/agent/model-output.d.ts +19 -0
  48. package/dist/agent/model-output.d.ts.map +1 -0
  49. package/dist/agent/model-output.js +172 -0
  50. package/dist/agent/model-output.js.map +1 -0
  51. package/dist/agent/model-turn.d.ts +29 -0
  52. package/dist/agent/model-turn.d.ts.map +1 -0
  53. package/dist/agent/model-turn.js +401 -0
  54. package/dist/agent/model-turn.js.map +1 -0
  55. package/dist/agent/policy.d.ts +28 -0
  56. package/dist/agent/policy.d.ts.map +1 -0
  57. package/dist/agent/policy.js +109 -0
  58. package/dist/agent/policy.js.map +1 -0
  59. package/dist/agent/provider-capabilities.d.ts +12 -0
  60. package/dist/agent/provider-capabilities.d.ts.map +1 -0
  61. package/dist/agent/provider-capabilities.js +76 -0
  62. package/dist/agent/provider-capabilities.js.map +1 -0
  63. package/dist/agent/recovery.d.ts +8 -0
  64. package/dist/agent/recovery.d.ts.map +1 -0
  65. package/dist/agent/recovery.js +21 -0
  66. package/dist/agent/recovery.js.map +1 -0
  67. package/dist/agent/replies.d.ts +3 -0
  68. package/dist/agent/replies.d.ts.map +1 -0
  69. package/dist/agent/replies.js +24 -0
  70. package/dist/agent/replies.js.map +1 -0
  71. package/dist/agent/run-state.d.ts +98 -0
  72. package/dist/agent/run-state.d.ts.map +1 -0
  73. package/dist/agent/run-state.js +454 -0
  74. package/dist/agent/run-state.js.map +1 -0
  75. package/dist/agent/run.d.ts +6 -0
  76. package/dist/agent/run.d.ts.map +1 -0
  77. package/dist/agent/run.js +462 -0
  78. package/dist/agent/run.js.map +1 -0
  79. package/dist/agent/streamed-call-history.d.ts +20 -0
  80. package/dist/agent/streamed-call-history.d.ts.map +1 -0
  81. package/dist/agent/streamed-call-history.js +71 -0
  82. package/dist/agent/streamed-call-history.js.map +1 -0
  83. package/dist/agent/streaming-tools.d.ts +23 -0
  84. package/dist/agent/streaming-tools.d.ts.map +1 -0
  85. package/dist/agent/streaming-tools.js +67 -0
  86. package/dist/agent/streaming-tools.js.map +1 -0
  87. package/dist/agent/structured-output.d.ts +27 -0
  88. package/dist/agent/structured-output.d.ts.map +1 -0
  89. package/dist/agent/structured-output.js +26 -0
  90. package/dist/agent/structured-output.js.map +1 -0
  91. package/dist/agent/tool-admission.d.ts +18 -0
  92. package/dist/agent/tool-admission.d.ts.map +1 -0
  93. package/dist/agent/tool-admission.js +22 -0
  94. package/dist/agent/tool-admission.js.map +1 -0
  95. package/dist/contracts/events.d.ts +236 -0
  96. package/dist/contracts/events.d.ts.map +1 -0
  97. package/dist/contracts/events.js +13 -0
  98. package/dist/contracts/events.js.map +1 -0
  99. package/dist/contracts/messages.d.ts +234 -0
  100. package/dist/contracts/messages.d.ts.map +1 -0
  101. package/dist/contracts/messages.js +11 -0
  102. package/dist/contracts/messages.js.map +1 -0
  103. package/dist/contracts/provider.d.ts +177 -0
  104. package/dist/contracts/provider.d.ts.map +1 -0
  105. package/dist/contracts/provider.js +26 -0
  106. package/dist/contracts/provider.js.map +1 -0
  107. package/dist/contracts/tools.d.ts +217 -0
  108. package/dist/contracts/tools.d.ts.map +1 -0
  109. package/dist/contracts/tools.js +16 -0
  110. package/dist/contracts/tools.js.map +1 -0
  111. package/dist/errors.d.ts +112 -0
  112. package/dist/errors.d.ts.map +1 -0
  113. package/dist/errors.js +190 -0
  114. package/dist/errors.js.map +1 -0
  115. package/dist/index.d.ts +34 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +20 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/internal/concurrency.d.ts +11 -0
  120. package/dist/internal/concurrency.d.ts.map +1 -0
  121. package/dist/internal/concurrency.js +86 -0
  122. package/dist/internal/concurrency.js.map +1 -0
  123. package/dist/internal/stream.d.ts +25 -0
  124. package/dist/internal/stream.d.ts.map +1 -0
  125. package/dist/internal/stream.js +97 -0
  126. package/dist/internal/stream.js.map +1 -0
  127. package/dist/internal/validate.d.ts +30 -0
  128. package/dist/internal/validate.d.ts.map +1 -0
  129. package/dist/internal/validate.js +480 -0
  130. package/dist/internal/validate.js.map +1 -0
  131. package/dist/providers/kit/errors.d.ts +40 -0
  132. package/dist/providers/kit/errors.d.ts.map +1 -0
  133. package/dist/providers/kit/errors.js +48 -0
  134. package/dist/providers/kit/errors.js.map +1 -0
  135. package/dist/providers/kit/index.d.ts +10 -0
  136. package/dist/providers/kit/index.d.ts.map +1 -0
  137. package/dist/providers/kit/index.js +10 -0
  138. package/dist/providers/kit/index.js.map +1 -0
  139. package/dist/providers/kit/retry.d.ts +43 -0
  140. package/dist/providers/kit/retry.d.ts.map +1 -0
  141. package/dist/providers/kit/retry.js +118 -0
  142. package/dist/providers/kit/retry.js.map +1 -0
  143. package/dist/providers/kit/sse.d.ts +22 -0
  144. package/dist/providers/kit/sse.d.ts.map +1 -0
  145. package/dist/providers/kit/sse.js +70 -0
  146. package/dist/providers/kit/sse.js.map +1 -0
  147. package/dist/providers/openai-responses/citations.d.ts +21 -0
  148. package/dist/providers/openai-responses/citations.d.ts.map +1 -0
  149. package/dist/providers/openai-responses/citations.js +65 -0
  150. package/dist/providers/openai-responses/citations.js.map +1 -0
  151. package/dist/providers/openai-responses/continuation.d.ts +19 -0
  152. package/dist/providers/openai-responses/continuation.d.ts.map +1 -0
  153. package/dist/providers/openai-responses/continuation.js +28 -0
  154. package/dist/providers/openai-responses/continuation.js.map +1 -0
  155. package/dist/providers/openai-responses/errors.d.ts +28 -0
  156. package/dist/providers/openai-responses/errors.d.ts.map +1 -0
  157. package/dist/providers/openai-responses/errors.js +103 -0
  158. package/dist/providers/openai-responses/errors.js.map +1 -0
  159. package/dist/providers/openai-responses/history.d.ts +8 -0
  160. package/dist/providers/openai-responses/history.d.ts.map +1 -0
  161. package/dist/providers/openai-responses/history.js +93 -0
  162. package/dist/providers/openai-responses/history.js.map +1 -0
  163. package/dist/providers/openai-responses/items.d.ts +106 -0
  164. package/dist/providers/openai-responses/items.d.ts.map +1 -0
  165. package/dist/providers/openai-responses/items.js +124 -0
  166. package/dist/providers/openai-responses/items.js.map +1 -0
  167. package/dist/providers/openai-responses/parameter-schema.d.ts +11 -0
  168. package/dist/providers/openai-responses/parameter-schema.d.ts.map +1 -0
  169. package/dist/providers/openai-responses/parameter-schema.js +186 -0
  170. package/dist/providers/openai-responses/parameter-schema.js.map +1 -0
  171. package/dist/providers/openai-responses/provider.d.ts +54 -0
  172. package/dist/providers/openai-responses/provider.d.ts.map +1 -0
  173. package/dist/providers/openai-responses/provider.js +270 -0
  174. package/dist/providers/openai-responses/provider.js.map +1 -0
  175. package/dist/providers/openai-responses/request.d.ts +41 -0
  176. package/dist/providers/openai-responses/request.d.ts.map +1 -0
  177. package/dist/providers/openai-responses/request.js +276 -0
  178. package/dist/providers/openai-responses/request.js.map +1 -0
  179. package/dist/providers/openai-responses/response.d.ts +7 -0
  180. package/dist/providers/openai-responses/response.d.ts.map +1 -0
  181. package/dist/providers/openai-responses/response.js +354 -0
  182. package/dist/providers/openai-responses/response.js.map +1 -0
  183. package/dist/providers/openai-responses/stored-items.d.ts +9 -0
  184. package/dist/providers/openai-responses/stored-items.d.ts.map +1 -0
  185. package/dist/providers/openai-responses/stored-items.js +133 -0
  186. package/dist/providers/openai-responses/stored-items.js.map +1 -0
  187. package/dist/providers/openai-responses/tool-search.d.ts +12 -0
  188. package/dist/providers/openai-responses/tool-search.d.ts.map +1 -0
  189. package/dist/providers/openai-responses/tool-search.js +68 -0
  190. package/dist/providers/openai-responses/tool-search.js.map +1 -0
  191. package/dist/providers/openai-responses/tools.d.ts +33 -0
  192. package/dist/providers/openai-responses/tools.d.ts.map +1 -0
  193. package/dist/providers/openai-responses/tools.js +53 -0
  194. package/dist/providers/openai-responses/tools.js.map +1 -0
  195. package/dist/providers/openai-responses/web-search.d.ts +5 -0
  196. package/dist/providers/openai-responses/web-search.d.ts.map +1 -0
  197. package/dist/providers/openai-responses/web-search.js +114 -0
  198. package/dist/providers/openai-responses/web-search.js.map +1 -0
  199. package/dist/providers/openai-responses/websocket.d.ts +29 -0
  200. package/dist/providers/openai-responses/websocket.d.ts.map +1 -0
  201. package/dist/providers/openai-responses/websocket.js +400 -0
  202. package/dist/providers/openai-responses/websocket.js.map +1 -0
  203. package/dist/tools/dispatch.d.ts +65 -0
  204. package/dist/tools/dispatch.d.ts.map +1 -0
  205. package/dist/tools/dispatch.js +536 -0
  206. package/dist/tools/dispatch.js.map +1 -0
  207. package/dist/tools/display-title.d.ts +18 -0
  208. package/dist/tools/display-title.d.ts.map +1 -0
  209. package/dist/tools/display-title.js +50 -0
  210. package/dist/tools/display-title.js.map +1 -0
  211. package/dist/tools/search.d.ts +36 -0
  212. package/dist/tools/search.d.ts.map +1 -0
  213. package/dist/tools/search.js +224 -0
  214. package/dist/tools/search.js.map +1 -0
  215. package/dist/tools/tool.d.ts +200 -0
  216. package/dist/tools/tool.d.ts.map +1 -0
  217. package/dist/tools/tool.js +275 -0
  218. package/dist/tools/tool.js.map +1 -0
  219. package/dist/tools/truncate.d.ts +18 -0
  220. package/dist/tools/truncate.d.ts.map +1 -0
  221. package/dist/tools/truncate.js +76 -0
  222. package/dist/tools/truncate.js.map +1 -0
  223. package/package.json +67 -4
@@ -0,0 +1,257 @@
1
+ import { AgentInvariantError } from "../errors.js";
2
+ import { raceAbort } from "../abort.js";
3
+ import { launchReceipt, parseToolCalls } from "../tools/dispatch.js";
4
+ import { normalizeToolResult } from "../internal/validate.js";
5
+ const capacityRejection = {
6
+ content: "Background tool capacity is full. This call was not started. Wait for a pending tool result before retrying.",
7
+ preview: "Background capacity reached",
8
+ is_error: true,
9
+ retryable: true
10
+ };
11
+ export class BackgroundTools {
12
+ options;
13
+ jobs = new Map();
14
+ replay;
15
+ constructor(options) {
16
+ this.options = options;
17
+ }
18
+ get pending() {
19
+ return this.jobs.size > 0 || this.replay !== undefined;
20
+ }
21
+ running() {
22
+ return [...this.jobs.values()].flatMap((job) => job.state.kind === "running" ? [job.held] : []);
23
+ }
24
+ async launch(input) {
25
+ if (input.recovered !== undefined) {
26
+ this.replay = { input, next: 0 };
27
+ await this.fillReplay();
28
+ return { completions: [], paused: [] };
29
+ }
30
+ const available = Math.max(0, this.options.capacity - this.jobs.size);
31
+ const calls = input.calls.filter((call) => !this.jobs.has(call.toolCall.id));
32
+ await this.start({ ...input, calls: calls.slice(0, available) });
33
+ const completions = [];
34
+ const paused = [];
35
+ for (const call of calls.slice(available)) {
36
+ const output = await this.options.execute({
37
+ call,
38
+ messages: this.options.messages,
39
+ metas: input.metas,
40
+ rejection: capacityRejection
41
+ });
42
+ completions.push(...output.completions);
43
+ paused.push(...output.paused);
44
+ }
45
+ if (completions.length > 0)
46
+ await this.options.checkpoint();
47
+ return { completions, paused };
48
+ }
49
+ async fillReplay() {
50
+ while (this.replay !== undefined && this.jobs.size < this.options.capacity) {
51
+ const replay = this.replay;
52
+ const end = Math.min(replay.input.calls.length, replay.next + this.options.capacity - this.jobs.size);
53
+ await this.start({ ...replay.input, calls: replay.input.calls.slice(replay.next, end) });
54
+ replay.next = end;
55
+ if (end === replay.input.calls.length)
56
+ this.replay = undefined;
57
+ }
58
+ }
59
+ async start(input) {
60
+ if (input.calls.length === 0)
61
+ return;
62
+ for (const call of input.calls) {
63
+ if (this.jobs.has(call.toolCall.id))
64
+ continue;
65
+ const id = call.toolCall.id;
66
+ if (this.options.messages.some((message) => message.message_id === `async-launch:${id}`)) {
67
+ if (input.recovered === undefined)
68
+ throw new AgentInvariantError(`Background tool call id was reused: ${id}`);
69
+ continue;
70
+ }
71
+ this.options.messages.push(input.mode === "native"
72
+ ? {
73
+ role: "user",
74
+ message_id: `async-launch:${id}`,
75
+ is_meta: true,
76
+ async_tool_launch: { call_id: id, delivery: "native" },
77
+ content: []
78
+ }
79
+ : launchReceipt(id));
80
+ }
81
+ await this.options.checkpoint();
82
+ for (const call of input.calls) {
83
+ const id = call.toolCall.id;
84
+ if (this.jobs.has(id))
85
+ continue;
86
+ const isolated = [...this.options.messages];
87
+ const offset = isolated.length;
88
+ const claimed = input.claimed?.get(id);
89
+ const recovered = claimed === undefined
90
+ ? Promise.resolve(input.recovered?.get(id))
91
+ : claimed.result.then((result) => result === undefined ? undefined : normalizeToolResult(result));
92
+ this.track(call, backgroundDelivery(this.options.messages, id) ?? input.mode, this.options.clock() + this.options.graceMs, recovered
93
+ .then((result) => this.options.execute({
94
+ call,
95
+ messages: isolated,
96
+ metas: input.metas,
97
+ ...(result === undefined ? {} : { recovered: result })
98
+ }))
99
+ .then((output) => ({ output, messages: isolated.slice(offset) })), claimed?.stop ?? this.options.stop);
100
+ }
101
+ }
102
+ adopt(backgrounded) {
103
+ this.track(backgrounded.call, "message", 0, backgrounded.settled, this.options.stop);
104
+ }
105
+ track(call, delivery, graceUntil, settled, stop) {
106
+ const id = call.toolCall.id;
107
+ const job = {
108
+ graceUntil,
109
+ held: {
110
+ toolCallId: id,
111
+ result: settled.then((outcome) => outcomeResult(outcome, id), () => undefined),
112
+ stop
113
+ },
114
+ state: { kind: "running" },
115
+ settled: settled.then((outcome) => {
116
+ job.state = {
117
+ kind: "settled",
118
+ outcome: {
119
+ output: outcome.output,
120
+ messages: outcome.messages.map((message) => {
121
+ if (delivery === "native" || message.role !== "tool")
122
+ return message;
123
+ return {
124
+ role: "user",
125
+ message_id: `async-result:${id}`,
126
+ client_id: `async-result:${id}`,
127
+ is_meta: true,
128
+ content: [
129
+ {
130
+ type: "context",
131
+ content_type: "async_tool_result",
132
+ content: message.content,
133
+ metadata: { tool_call_id: id, tool_name: call.name }
134
+ }
135
+ ]
136
+ };
137
+ })
138
+ }
139
+ };
140
+ }, (cause) => {
141
+ job.state = { kind: "failed", cause };
142
+ })
143
+ };
144
+ this.jobs.set(id, job);
145
+ }
146
+ async drain(options = {}) {
147
+ if (options.grace === true)
148
+ await this.awaitGrace();
149
+ if (options.wait === true &&
150
+ this.jobs.size > 0 &&
151
+ ![...this.jobs.values()].some((job) => job.state.kind !== "running")) {
152
+ const completion = Promise.race([
153
+ ...[...this.jobs.values()].map((job) => job.settled),
154
+ ...(options.wake === undefined ? [] : [options.wake])
155
+ ]);
156
+ let timeout;
157
+ try {
158
+ const maxWaitMs = options.maxWaitMs;
159
+ const waiting = maxWaitMs === undefined
160
+ ? completion
161
+ : Promise.race([
162
+ completion,
163
+ new Promise((resolve) => {
164
+ timeout = setTimeout(resolve, Math.max(0, maxWaitMs));
165
+ })
166
+ ]);
167
+ await raceAbort(waiting, this.options.signal);
168
+ }
169
+ finally {
170
+ clearTimeout(timeout);
171
+ }
172
+ }
173
+ let changed = false;
174
+ const completions = [];
175
+ const paused = [];
176
+ for (const [id, job] of this.jobs) {
177
+ if (job.state.kind === "failed")
178
+ throw job.state.cause;
179
+ if (job.state.kind === "running")
180
+ continue;
181
+ changed = true;
182
+ this.options.messages.push(...job.state.outcome.messages);
183
+ completions.push(...job.state.outcome.output.completions);
184
+ paused.push(...job.state.outcome.output.paused);
185
+ this.jobs.delete(id);
186
+ }
187
+ if (changed)
188
+ await this.options.checkpoint();
189
+ await this.fillReplay();
190
+ return { completions, paused };
191
+ }
192
+ async awaitGrace() {
193
+ const now = this.options.clock();
194
+ const fresh = [...this.jobs.values()].filter((job) => job.state.kind === "running" && job.graceUntil > now);
195
+ if (fresh.length === 0)
196
+ return;
197
+ const closesInMs = Math.max(...fresh.map((job) => job.graceUntil)) - now;
198
+ let timeout;
199
+ try {
200
+ await raceAbort(Promise.race([
201
+ Promise.all(fresh.map((job) => job.settled)),
202
+ new Promise((resolve) => {
203
+ timeout = setTimeout(resolve, closesInMs);
204
+ })
205
+ ]), this.options.signal);
206
+ }
207
+ finally {
208
+ clearTimeout(timeout);
209
+ }
210
+ }
211
+ }
212
+ const outcomeResult = (outcome, id) => {
213
+ const event = outcome.output.completions.find((completion) => completion.tool_id === id);
214
+ if (event === undefined)
215
+ return undefined;
216
+ return {
217
+ content: event.result,
218
+ preview: event.preview,
219
+ is_error: event.is_error,
220
+ retryable: event.retryable,
221
+ data: event.data,
222
+ message_extras: event.message_extras,
223
+ host: event.host,
224
+ model_content: event.model_content
225
+ };
226
+ };
227
+ const backgroundDelivery = (messages, id) => {
228
+ for (const message of messages) {
229
+ const launch = message.async_tool_launch;
230
+ if (typeof launch !== "object" ||
231
+ launch === null ||
232
+ !("call_id" in launch) ||
233
+ launch.call_id !== id ||
234
+ !("delivery" in launch))
235
+ continue;
236
+ if (launch.delivery === "native" || launch.delivery === "message")
237
+ return launch.delivery;
238
+ }
239
+ return undefined;
240
+ };
241
+ /** Receipts close portable wire calls but do not settle the underlying execution. */
242
+ export const pendingBackgroundCalls = (messages, options = {}) => {
243
+ const outputs = new Set(messages.flatMap((message) => message.role === "tool" && message.async_tool_launch === undefined
244
+ ? [message.tool_call_id]
245
+ : []));
246
+ const delivered = new Set(messages.flatMap((message) => typeof message.client_id === "string" ? [message.client_id] : []));
247
+ return parseToolCalls(messages.flatMap((message) => message.role === "assistant"
248
+ ? (message.tool_calls ?? []).filter((call) => {
249
+ const delivery = backgroundDelivery(messages, call.id);
250
+ return (delivery !== undefined &&
251
+ (delivery === "native"
252
+ ? !outputs.has(call.id)
253
+ : !delivered.has(`async-result:${call.id}`)));
254
+ })
255
+ : []), options.displayTitle);
256
+ };
257
+ //# sourceMappingURL=background-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-tools.js","sourceRoot":"","sources":["../../src/agent/background-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { RunBudget, RunBudgetOptions, RunBudgetSnapshot } from "../contracts/events.js";
2
+ /** Create a small synchronous budget that can be shared between agent runs. */
3
+ export declare const makeRunBudget: (options?: RunBudgetOptions) => RunBudget;
4
+ export declare const validateBudgetSnapshot: (value: RunBudgetSnapshot) => RunBudgetSnapshot;
5
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/agent/budget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAI5F,+EAA+E;AAC/E,eAAO,MAAM,aAAa,aAAa,gBAAgB,KAAQ,SAgC9D,CAAA;AAED,eAAO,MAAM,sBAAsB,UAAW,iBAAiB,KAAG,iBAcjE,CAAA"}
@@ -0,0 +1,48 @@
1
+ const validCount = (value) => Number.isSafeInteger(value) && value >= 0;
2
+ /** Create a small synchronous budget that can be shared between agent runs. */
3
+ export const makeRunBudget = (options = {}) => {
4
+ let current = {
5
+ toolCalls: options.toolCalls ?? 0,
6
+ outputTokens: options.outputTokens ?? 0,
7
+ ...(options.totalOutputTokens === undefined
8
+ ? {}
9
+ : { totalOutputTokens: options.totalOutputTokens })
10
+ };
11
+ if (!validCount(current.toolCalls) ||
12
+ !validCount(current.outputTokens) ||
13
+ (current.totalOutputTokens !== undefined && !validCount(current.totalOutputTokens))) {
14
+ throw new RangeError("run budget counts must be non-negative safe integers");
15
+ }
16
+ return Object.freeze({
17
+ snapshot: () => ({ ...current }),
18
+ reserveToolCalls: (count, limit) => {
19
+ if (!validCount(count) || (limit !== undefined && !validCount(limit))) {
20
+ throw new RangeError("tool budget counts must be non-negative safe integers");
21
+ }
22
+ if (limit !== undefined && current.toolCalls + count > limit)
23
+ return false;
24
+ current = { ...current, toolCalls: current.toolCalls + count };
25
+ return true;
26
+ },
27
+ addOutputTokens: (count) => {
28
+ if (!validCount(count))
29
+ throw new RangeError("output token count must be a non-negative safe integer");
30
+ current = { ...current, outputTokens: current.outputTokens + count };
31
+ return { ...current };
32
+ }
33
+ });
34
+ };
35
+ export const validateBudgetSnapshot = (value) => {
36
+ if (typeof value !== "object" ||
37
+ value === null ||
38
+ !Number.isSafeInteger(value.toolCalls) ||
39
+ value.toolCalls < 0 ||
40
+ !Number.isSafeInteger(value.outputTokens) ||
41
+ value.outputTokens < 0 ||
42
+ (value.totalOutputTokens !== undefined &&
43
+ (!Number.isSafeInteger(value.totalOutputTokens) || value.totalOutputTokens < 0))) {
44
+ throw new TypeError("budget snapshot must contain non-negative safe integer counts");
45
+ }
46
+ return value;
47
+ };
48
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/agent/budget.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAExF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,GAAqB,EAAE,EAAa,EAAE;IACzE,IAAI,OAAO,GAAsB;QAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;QACjC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;YACzC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;KACtD,CAAA;IACD,IACE,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;QAC9B,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;QACjC,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,EACnF,CAAC;QACD,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QAChC,gBAAgB,EAAE,CAAC,KAAa,EAAE,KAAc,EAAW,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,UAAU,CAAC,uDAAuD,CAAC,CAAA;YAC/E,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,KAAK,GAAG,KAAK;gBAAE,OAAO,KAAK,CAAA;YAC1E,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,CAAA;YAC9D,OAAO,IAAI,CAAA;QACb,CAAC;QACD,eAAe,EAAE,CAAC,KAAa,EAAqB,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBACpB,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAA;YAChF,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,KAAK,EAAE,CAAA;YACpE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;QACvB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAwB,EAAqB,EAAE;IACpF,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;QACtC,KAAK,CAAC,SAAS,GAAG,CAAC;QACnB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,KAAK,CAAC,YAAY,GAAG,CAAC;QACtB,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;YACpC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,EAClF,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,61 @@
1
+ import type { MessageIdMinter } from "../contracts/messages.js";
2
+ import type { ToolCallMiddleware } from "../contracts/tools.js";
3
+ import { ToolChoice, type ModelRequestMiddleware } from "../contracts/provider.js";
4
+ import type { RunPolicy } from "../contracts/events.js";
5
+ interface AgentLimits {
6
+ readonly maxIterations?: number;
7
+ readonly maxToolCalls?: number;
8
+ readonly maxWallTimeMs?: number;
9
+ readonly maxCost?: number;
10
+ /** Consecutive all-error steps before stopping. Zero disables this limit. */
11
+ readonly maxNoProgressSteps: number;
12
+ }
13
+ /** Input accepted by `validateAgentConfig`; limit fields are flattened for Agent callers. */
14
+ export interface AgentConfigInput extends Partial<AgentLimits> {
15
+ readonly model: string;
16
+ readonly maxOutputTokens?: number;
17
+ readonly toolChoice?: ToolChoice;
18
+ readonly reasoningEffort?: string;
19
+ /**
20
+ * Stable identity of the conversation a request extends — one value for a
21
+ * whole agent tree. Each provider maps it to its own prompt-cache mechanism
22
+ * (OpenAI: `prompt_cache_key`); the host never deals in cache details.
23
+ */
24
+ readonly cacheScope?: string;
25
+ readonly maxToolConcurrency?: number;
26
+ /**
27
+ * How long the next model request waits for background calls just launched,
28
+ * so a quick one delivers its result in that request instead of a running
29
+ * receipt and one more request. Zero disables the wait. Defaults to 1000.
30
+ */
31
+ readonly backgroundGraceMs?: number;
32
+ /**
33
+ * Execution time after which a call still running moves to the background:
34
+ * the model gets a receipt and the result arrives later. Counted from when
35
+ * the call's effect begins. Defaults to 10000; Infinity keeps every call in
36
+ * the foreground.
37
+ */
38
+ readonly foregroundBudgetMs?: number;
39
+ readonly modelRequestMiddlewares?: ReadonlyArray<ModelRequestMiddleware>;
40
+ readonly toolCallMiddlewares?: ReadonlyArray<ToolCallMiddleware>;
41
+ readonly policy?: RunPolicy;
42
+ readonly mintMessageId?: MessageIdMinter;
43
+ }
44
+ /** Immutable, validated configuration consumed by the Agent state machine. */
45
+ export interface AgentConfig extends AgentLimits {
46
+ readonly model: string;
47
+ readonly maxOutputTokens?: number;
48
+ readonly toolChoice: ToolChoice;
49
+ readonly maxToolConcurrency: number;
50
+ readonly backgroundGraceMs: number;
51
+ readonly foregroundBudgetMs: number;
52
+ readonly modelRequestMiddlewares: ReadonlyArray<ModelRequestMiddleware>;
53
+ readonly toolCallMiddlewares: ReadonlyArray<ToolCallMiddleware>;
54
+ readonly policy: RunPolicy;
55
+ readonly reasoningEffort?: string;
56
+ readonly cacheScope?: string;
57
+ readonly mintMessageId?: MessageIdMinter;
58
+ }
59
+ export declare const validateAgentConfig: (input: AgentConfigInput) => AgentConfig;
60
+ export {};
61
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAMvD,UAAU,WAAW;IACnB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,6EAA6E;IAC7E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AAMD,6FAA6F;AAC7F,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,WAAW,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAA;IACxE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CACzC;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,uBAAuB,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAA;IACvE,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC/D,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CACzC;AAwDD,eAAO,MAAM,mBAAmB,UAAW,gBAAgB,KAAG,WAkD7D,CAAA"}
@@ -0,0 +1,99 @@
1
+ import { InvalidAgentConfigError } from "../errors.js";
2
+ import { ToolChoice } from "../contracts/provider.js";
3
+ const defaultMaxToolConcurrency = 6;
4
+ const defaultBackgroundGraceMs = 1_000;
5
+ const defaultForegroundBudgetMs = 10_000;
6
+ const defaultAgentLimits = {
7
+ maxNoProgressSteps: 0
8
+ };
9
+ const invalidField = (field) => new InvalidAgentConfigError(`invalid agent config field: ${field}`);
10
+ const optionalNonNegative = (value) => value === undefined || (Number.isFinite(value) && value >= 0);
11
+ const optionalNonNegativeInteger = (value) => value === undefined || (Number.isSafeInteger(value) && value >= 0);
12
+ const positiveInteger = (value) => Number.isSafeInteger(value) && value >= 1;
13
+ const validateAgentLimits = (input = {}) => {
14
+ const limits = { ...defaultAgentLimits, ...input };
15
+ if (!optionalNonNegativeInteger(limits.maxIterations) ||
16
+ !optionalNonNegativeInteger(limits.maxToolCalls) ||
17
+ !optionalNonNegative(limits.maxWallTimeMs) ||
18
+ !optionalNonNegative(limits.maxCost) ||
19
+ !optionalNonNegativeInteger(limits.maxNoProgressSteps)) {
20
+ throw new InvalidAgentConfigError("iteration, tool-call, and no-progress limits must be non-negative integers; wall-time and cost limits must be finite non-negative values");
21
+ }
22
+ return limits;
23
+ };
24
+ const copyPolicy = (policy) => {
25
+ const source = policy ?? {};
26
+ return Object.freeze({
27
+ ...(source.finalizeInstruction === undefined
28
+ ? {}
29
+ : { finalizeInstruction: source.finalizeInstruction }),
30
+ ...(source.fallbackResultText === undefined
31
+ ? {}
32
+ : { fallbackResultText: source.fallbackResultText }),
33
+ ...(source.budgetDenialContent === undefined
34
+ ? {}
35
+ : { budgetDenialContent: source.budgetDenialContent })
36
+ });
37
+ };
38
+ const toolChoices = new Set(Object.values(ToolChoice));
39
+ const limitInput = (input) => ({
40
+ ...(input.maxIterations === undefined ? {} : { maxIterations: input.maxIterations }),
41
+ ...(input.maxToolCalls === undefined ? {} : { maxToolCalls: input.maxToolCalls }),
42
+ ...(input.maxWallTimeMs === undefined ? {} : { maxWallTimeMs: input.maxWallTimeMs }),
43
+ ...(input.maxCost === undefined ? {} : { maxCost: input.maxCost }),
44
+ ...(input.maxNoProgressSteps === undefined
45
+ ? {}
46
+ : { maxNoProgressSteps: input.maxNoProgressSteps })
47
+ });
48
+ export const validateAgentConfig = (input) => {
49
+ if (typeof input.model !== "string" || input.model.length === 0)
50
+ throw invalidField("model");
51
+ if (input.maxOutputTokens !== undefined && !positiveInteger(input.maxOutputTokens)) {
52
+ throw invalidField("maxOutputTokens");
53
+ }
54
+ const limits = validateAgentLimits(limitInput(input));
55
+ const toolChoice = input.toolChoice === undefined ? ToolChoice.AUTO : input.toolChoice;
56
+ if (!toolChoices.has(toolChoice))
57
+ throw invalidField("toolChoice");
58
+ const maxToolConcurrency = input.maxToolConcurrency === undefined ? defaultMaxToolConcurrency : input.maxToolConcurrency;
59
+ if (!positiveInteger(maxToolConcurrency))
60
+ throw invalidField("maxToolConcurrency");
61
+ const backgroundGraceMs = input.backgroundGraceMs ?? defaultBackgroundGraceMs;
62
+ if (!optionalNonNegative(backgroundGraceMs))
63
+ throw invalidField("backgroundGraceMs");
64
+ const foregroundBudgetMs = input.foregroundBudgetMs ?? defaultForegroundBudgetMs;
65
+ if (Number.isNaN(foregroundBudgetMs) || foregroundBudgetMs < 0)
66
+ throw invalidField("foregroundBudgetMs");
67
+ if (input.reasoningEffort !== undefined && typeof input.reasoningEffort !== "string") {
68
+ throw invalidField("reasoningEffort");
69
+ }
70
+ if (input.cacheScope !== undefined && typeof input.cacheScope !== "string") {
71
+ throw invalidField("cacheScope");
72
+ }
73
+ if (input.modelRequestMiddlewares !== undefined &&
74
+ !Array.isArray(input.modelRequestMiddlewares)) {
75
+ throw invalidField("modelRequestMiddlewares");
76
+ }
77
+ if (input.toolCallMiddlewares !== undefined && !Array.isArray(input.toolCallMiddlewares)) {
78
+ throw invalidField("toolCallMiddlewares");
79
+ }
80
+ if (input.mintMessageId !== undefined && typeof input.mintMessageId !== "function") {
81
+ throw invalidField("mintMessageId");
82
+ }
83
+ return Object.freeze({
84
+ model: input.model,
85
+ ...(input.maxOutputTokens === undefined ? {} : { maxOutputTokens: input.maxOutputTokens }),
86
+ ...limits,
87
+ toolChoice,
88
+ maxToolConcurrency,
89
+ backgroundGraceMs,
90
+ foregroundBudgetMs,
91
+ modelRequestMiddlewares: Object.freeze([...(input.modelRequestMiddlewares ?? [])]),
92
+ toolCallMiddlewares: Object.freeze([...(input.toolCallMiddlewares ?? [])]),
93
+ policy: copyPolicy(input.policy),
94
+ ...(input.reasoningEffort === undefined ? {} : { reasoningEffort: input.reasoningEffort }),
95
+ ...(input.cacheScope === undefined ? {} : { cacheScope: input.cacheScope }),
96
+ ...(input.mintMessageId === undefined ? {} : { mintMessageId: input.mintMessageId })
97
+ });
98
+ };
99
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { MaybePromise } from "../contracts/messages.js";
2
+ import type { Toolset } from "../contracts/tools.js";
3
+ import type { RunBudget } from "../contracts/events.js";
4
+ import { AgentCallbackError } from "../errors.js";
5
+ export declare const callbackFailure: (operation: string, cause: unknown) => AgentCallbackError;
6
+ export declare const invoke: <A>(operation: string, body: () => A) => A;
7
+ export declare const hookCall: <A>(hook: string, body: () => MaybePromise<A>) => Promise<A>;
8
+ export declare const guardToolset: (toolset: Toolset) => Toolset;
9
+ export declare const guardBudget: (budget: RunBudget) => RunBudget;
10
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/agent/guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,cAAc,CAAA;AAG1E,eAAO,MAAM,eAAe,cAAe,MAAM,SAAS,OAAO,KAAG,kBACqB,CAAA;AAEzF,eAAO,MAAM,MAAM,GAAI,CAAC,aAAa,MAAM,QAAQ,MAAM,CAAC,KAAG,CAM5D,CAAA;AAED,eAAO,MAAM,QAAQ,GAAU,CAAC,QAAQ,MAAM,QAAQ,MAAM,YAAY,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAMtF,CAAA;AAKD,eAAO,MAAM,YAAY,YAAa,OAAO,KAAG,OAkF/C,CAAA;AAED,eAAO,MAAM,WAAW,WAAY,SAAS,KAAG,SAyB9C,CAAA"}