@datasynx/agentic-ai-cartography 2.0.0 → 2.3.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 (68) hide show
  1. package/AGENTS.md +32 -0
  2. package/README.md +115 -6
  3. package/dist/api-bin.js +24 -0
  4. package/dist/api-bin.js.map +1 -0
  5. package/dist/{bookmarks-VS56KVCO.js → bookmarks-WXHE7GN7.js} +6 -3
  6. package/dist/{chunk-CJ2PITFA.js → chunk-2SZ5QHGH.js} +71 -9
  7. package/dist/chunk-2SZ5QHGH.js.map +1 -0
  8. package/dist/chunk-7QEBFMN4.js +3278 -0
  9. package/dist/chunk-7QEBFMN4.js.map +1 -0
  10. package/dist/chunk-7VZH5PFV.js +1134 -0
  11. package/dist/chunk-7VZH5PFV.js.map +1 -0
  12. package/dist/chunk-B2AKONVW.js +2465 -0
  13. package/dist/chunk-B2AKONVW.js.map +1 -0
  14. package/dist/chunk-WCR47QA2.js +277 -0
  15. package/dist/chunk-WCR47QA2.js.map +1 -0
  16. package/dist/cli.js +2367 -663
  17. package/dist/cli.js.map +1 -1
  18. package/dist/index.cjs +9405 -57913
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +3048 -69
  21. package/dist/index.d.ts +3048 -69
  22. package/dist/index.js +9150 -2607
  23. package/dist/index.js.map +1 -1
  24. package/dist/mcp-bin.js +17 -26
  25. package/dist/mcp-bin.js.map +1 -1
  26. package/dist/types-TJWXAQ2L.js +66 -0
  27. package/llms-full.txt +758 -0
  28. package/llms.txt +24 -0
  29. package/package.json +27 -9
  30. package/scripts/build-llms.mjs +89 -0
  31. package/scripts/build-mcpb.mjs +31 -0
  32. package/scripts/gen-api-schemas.ts +29 -0
  33. package/scripts/gen-docs.ts +123 -0
  34. package/scripts/sync-version.mjs +51 -0
  35. package/scripts/validate-server-json.mjs +54 -0
  36. package/server.json +4 -4
  37. package/dist/chunk-CJ2PITFA.js.map +0 -1
  38. package/dist/chunk-D6SRSLBF.js +0 -48
  39. package/dist/chunk-J6FDZ6HZ.js +0 -142
  40. package/dist/chunk-J6FDZ6HZ.js.map +0 -1
  41. package/dist/chunk-UGSNG3QJ.js +0 -49
  42. package/dist/chunk-UGSNG3QJ.js.map +0 -1
  43. package/dist/chunk-W7YE6AAH.js +0 -1516
  44. package/dist/chunk-W7YE6AAH.js.map +0 -1
  45. package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
  46. package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
  47. package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
  48. package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
  49. package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
  50. package/dist/sdk-A6NLO3DJ.js +0 -12294
  51. package/dist/sdk-A6NLO3DJ.js.map +0 -1
  52. package/dist/sdk-G5D4WQZ4.js +0 -12293
  53. package/dist/sdk-G5D4WQZ4.js.map +0 -1
  54. package/dist/sdk-QSTAREST.js +0 -4869
  55. package/dist/sdk-QSTAREST.js.map +0 -1
  56. package/dist/sqlite-vec-EZN67B2V.js +0 -40
  57. package/dist/sqlite-vec-EZN67B2V.js.map +0 -1
  58. package/dist/sqlite-vec-UK5YYE5T.js +0 -39
  59. package/dist/sqlite-vec-UK5YYE5T.js.map +0 -1
  60. package/dist/transformers.node-BTYUTJK5.js +0 -42884
  61. package/dist/transformers.node-BTYUTJK5.js.map +0 -1
  62. package/dist/transformers.node-J6PRTTOX.js +0 -42883
  63. package/dist/transformers.node-J6PRTTOX.js.map +0 -1
  64. package/dist/types-JG27FR3E.js +0 -29
  65. package/dist/types-JG27FR3E.js.map +0 -1
  66. package/scripts/postinstall.mjs +0 -7
  67. /package/dist/{bookmarks-VS56KVCO.js.map → bookmarks-WXHE7GN7.js.map} +0 -0
  68. /package/dist/{chunk-D6SRSLBF.js.map → types-TJWXAQ2L.js.map} +0 -0
@@ -1,4869 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./chunk-UGSNG3QJ.js";
3
-
4
- // node_modules/@anthropic-ai/sdk/internal/tslib.mjs
5
- function __classPrivateFieldSet(receiver, state, value, kind, f) {
6
- if (kind === "m")
7
- throw new TypeError("Private method is not writable");
8
- if (kind === "a" && !f)
9
- throw new TypeError("Private accessor was defined without a setter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
11
- throw new TypeError("Cannot write private member to an object whose class did not declare it");
12
- return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
13
- }
14
- function __classPrivateFieldGet(receiver, state, kind, f) {
15
- if (kind === "a" && !f)
16
- throw new TypeError("Private accessor was defined without a getter");
17
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
18
- throw new TypeError("Cannot read private member from an object whose class did not declare it");
19
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
20
- }
21
-
22
- // node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs
23
- var uuid4 = function() {
24
- const { crypto } = globalThis;
25
- if (crypto?.randomUUID) {
26
- uuid4 = crypto.randomUUID.bind(crypto);
27
- return crypto.randomUUID();
28
- }
29
- const u8 = new Uint8Array(1);
30
- const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => Math.random() * 255 & 255;
31
- return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16));
32
- };
33
-
34
- // node_modules/@anthropic-ai/sdk/internal/errors.mjs
35
- function isAbortError(err) {
36
- return typeof err === "object" && err !== null && // Spec-compliant fetch implementations
37
- ("name" in err && err.name === "AbortError" || // Expo fetch
38
- "message" in err && String(err.message).includes("FetchRequestCanceledException"));
39
- }
40
- var castToError = (err) => {
41
- if (err instanceof Error)
42
- return err;
43
- if (typeof err === "object" && err !== null) {
44
- try {
45
- if (Object.prototype.toString.call(err) === "[object Error]") {
46
- const error = new Error(err.message, err.cause ? { cause: err.cause } : {});
47
- if (err.stack)
48
- error.stack = err.stack;
49
- if (err.cause && !error.cause)
50
- error.cause = err.cause;
51
- if (err.name)
52
- error.name = err.name;
53
- return error;
54
- }
55
- } catch {
56
- }
57
- try {
58
- return new Error(JSON.stringify(err));
59
- } catch {
60
- }
61
- }
62
- return new Error(err);
63
- };
64
-
65
- // node_modules/@anthropic-ai/sdk/core/error.mjs
66
- var AnthropicError = class extends Error {
67
- };
68
- var APIError = class _APIError extends AnthropicError {
69
- constructor(status, error, message, headers) {
70
- super(`${_APIError.makeMessage(status, error, message)}`);
71
- this.status = status;
72
- this.headers = headers;
73
- this.requestID = headers?.get("request-id");
74
- this.error = error;
75
- }
76
- static makeMessage(status, error, message) {
77
- const msg = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message;
78
- if (status && msg) {
79
- return `${status} ${msg}`;
80
- }
81
- if (status) {
82
- return `${status} status code (no body)`;
83
- }
84
- if (msg) {
85
- return msg;
86
- }
87
- return "(no status code or body)";
88
- }
89
- static generate(status, errorResponse, message, headers) {
90
- if (!status || !headers) {
91
- return new APIConnectionError({ message, cause: castToError(errorResponse) });
92
- }
93
- const error = errorResponse;
94
- if (status === 400) {
95
- return new BadRequestError(status, error, message, headers);
96
- }
97
- if (status === 401) {
98
- return new AuthenticationError(status, error, message, headers);
99
- }
100
- if (status === 403) {
101
- return new PermissionDeniedError(status, error, message, headers);
102
- }
103
- if (status === 404) {
104
- return new NotFoundError(status, error, message, headers);
105
- }
106
- if (status === 409) {
107
- return new ConflictError(status, error, message, headers);
108
- }
109
- if (status === 422) {
110
- return new UnprocessableEntityError(status, error, message, headers);
111
- }
112
- if (status === 429) {
113
- return new RateLimitError(status, error, message, headers);
114
- }
115
- if (status >= 500) {
116
- return new InternalServerError(status, error, message, headers);
117
- }
118
- return new _APIError(status, error, message, headers);
119
- }
120
- };
121
- var APIUserAbortError = class extends APIError {
122
- constructor({ message } = {}) {
123
- super(void 0, void 0, message || "Request was aborted.", void 0);
124
- }
125
- };
126
- var APIConnectionError = class extends APIError {
127
- constructor({ message, cause }) {
128
- super(void 0, void 0, message || "Connection error.", void 0);
129
- if (cause)
130
- this.cause = cause;
131
- }
132
- };
133
- var APIConnectionTimeoutError = class extends APIConnectionError {
134
- constructor({ message } = {}) {
135
- super({ message: message ?? "Request timed out." });
136
- }
137
- };
138
- var BadRequestError = class extends APIError {
139
- };
140
- var AuthenticationError = class extends APIError {
141
- };
142
- var PermissionDeniedError = class extends APIError {
143
- };
144
- var NotFoundError = class extends APIError {
145
- };
146
- var ConflictError = class extends APIError {
147
- };
148
- var UnprocessableEntityError = class extends APIError {
149
- };
150
- var RateLimitError = class extends APIError {
151
- };
152
- var InternalServerError = class extends APIError {
153
- };
154
-
155
- // node_modules/@anthropic-ai/sdk/internal/utils/values.mjs
156
- var startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;
157
- var isAbsoluteURL = (url) => {
158
- return startsWithSchemeRegexp.test(url);
159
- };
160
- var isArray = (val) => (isArray = Array.isArray, isArray(val));
161
- var isReadonlyArray = isArray;
162
- function maybeObj(x) {
163
- if (typeof x !== "object") {
164
- return {};
165
- }
166
- return x ?? {};
167
- }
168
- function isEmptyObj(obj) {
169
- if (!obj)
170
- return true;
171
- for (const _k in obj)
172
- return false;
173
- return true;
174
- }
175
- function hasOwn(obj, key) {
176
- return Object.prototype.hasOwnProperty.call(obj, key);
177
- }
178
- var validatePositiveInteger = (name, n) => {
179
- if (typeof n !== "number" || !Number.isInteger(n)) {
180
- throw new AnthropicError(`${name} must be an integer`);
181
- }
182
- if (n < 0) {
183
- throw new AnthropicError(`${name} must be a positive integer`);
184
- }
185
- return n;
186
- };
187
- var safeJSON = (text) => {
188
- try {
189
- return JSON.parse(text);
190
- } catch (err) {
191
- return void 0;
192
- }
193
- };
194
-
195
- // node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs
196
- var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
197
-
198
- // node_modules/@anthropic-ai/sdk/version.mjs
199
- var VERSION = "0.78.0";
200
-
201
- // node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs
202
- var isRunningInBrowser = () => {
203
- return (
204
- // @ts-ignore
205
- typeof window !== "undefined" && // @ts-ignore
206
- typeof window.document !== "undefined" && // @ts-ignore
207
- typeof navigator !== "undefined"
208
- );
209
- };
210
- function getDetectedPlatform() {
211
- if (typeof Deno !== "undefined" && Deno.build != null) {
212
- return "deno";
213
- }
214
- if (typeof EdgeRuntime !== "undefined") {
215
- return "edge";
216
- }
217
- if (Object.prototype.toString.call(typeof globalThis.process !== "undefined" ? globalThis.process : 0) === "[object process]") {
218
- return "node";
219
- }
220
- return "unknown";
221
- }
222
- var getPlatformProperties = () => {
223
- const detectedPlatform = getDetectedPlatform();
224
- if (detectedPlatform === "deno") {
225
- return {
226
- "X-Stainless-Lang": "js",
227
- "X-Stainless-Package-Version": VERSION,
228
- "X-Stainless-OS": normalizePlatform(Deno.build.os),
229
- "X-Stainless-Arch": normalizeArch(Deno.build.arch),
230
- "X-Stainless-Runtime": "deno",
231
- "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown"
232
- };
233
- }
234
- if (typeof EdgeRuntime !== "undefined") {
235
- return {
236
- "X-Stainless-Lang": "js",
237
- "X-Stainless-Package-Version": VERSION,
238
- "X-Stainless-OS": "Unknown",
239
- "X-Stainless-Arch": `other:${EdgeRuntime}`,
240
- "X-Stainless-Runtime": "edge",
241
- "X-Stainless-Runtime-Version": globalThis.process.version
242
- };
243
- }
244
- if (detectedPlatform === "node") {
245
- return {
246
- "X-Stainless-Lang": "js",
247
- "X-Stainless-Package-Version": VERSION,
248
- "X-Stainless-OS": normalizePlatform(globalThis.process.platform ?? "unknown"),
249
- "X-Stainless-Arch": normalizeArch(globalThis.process.arch ?? "unknown"),
250
- "X-Stainless-Runtime": "node",
251
- "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown"
252
- };
253
- }
254
- const browserInfo = getBrowserInfo();
255
- if (browserInfo) {
256
- return {
257
- "X-Stainless-Lang": "js",
258
- "X-Stainless-Package-Version": VERSION,
259
- "X-Stainless-OS": "Unknown",
260
- "X-Stainless-Arch": "unknown",
261
- "X-Stainless-Runtime": `browser:${browserInfo.browser}`,
262
- "X-Stainless-Runtime-Version": browserInfo.version
263
- };
264
- }
265
- return {
266
- "X-Stainless-Lang": "js",
267
- "X-Stainless-Package-Version": VERSION,
268
- "X-Stainless-OS": "Unknown",
269
- "X-Stainless-Arch": "unknown",
270
- "X-Stainless-Runtime": "unknown",
271
- "X-Stainless-Runtime-Version": "unknown"
272
- };
273
- };
274
- function getBrowserInfo() {
275
- if (typeof navigator === "undefined" || !navigator) {
276
- return null;
277
- }
278
- const browserPatterns = [
279
- { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
280
- { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
281
- { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ },
282
- { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
283
- { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
284
- { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ }
285
- ];
286
- for (const { key, pattern } of browserPatterns) {
287
- const match = pattern.exec(navigator.userAgent);
288
- if (match) {
289
- const major = match[1] || 0;
290
- const minor = match[2] || 0;
291
- const patch = match[3] || 0;
292
- return { browser: key, version: `${major}.${minor}.${patch}` };
293
- }
294
- }
295
- return null;
296
- }
297
- var normalizeArch = (arch) => {
298
- if (arch === "x32")
299
- return "x32";
300
- if (arch === "x86_64" || arch === "x64")
301
- return "x64";
302
- if (arch === "arm")
303
- return "arm";
304
- if (arch === "aarch64" || arch === "arm64")
305
- return "arm64";
306
- if (arch)
307
- return `other:${arch}`;
308
- return "unknown";
309
- };
310
- var normalizePlatform = (platform) => {
311
- platform = platform.toLowerCase();
312
- if (platform.includes("ios"))
313
- return "iOS";
314
- if (platform === "android")
315
- return "Android";
316
- if (platform === "darwin")
317
- return "MacOS";
318
- if (platform === "win32")
319
- return "Windows";
320
- if (platform === "freebsd")
321
- return "FreeBSD";
322
- if (platform === "openbsd")
323
- return "OpenBSD";
324
- if (platform === "linux")
325
- return "Linux";
326
- if (platform)
327
- return `Other:${platform}`;
328
- return "Unknown";
329
- };
330
- var _platformHeaders;
331
- var getPlatformHeaders = () => {
332
- return _platformHeaders ?? (_platformHeaders = getPlatformProperties());
333
- };
334
-
335
- // node_modules/@anthropic-ai/sdk/internal/shims.mjs
336
- function getDefaultFetch() {
337
- if (typeof fetch !== "undefined") {
338
- return fetch;
339
- }
340
- throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`");
341
- }
342
- function makeReadableStream(...args) {
343
- const ReadableStream = globalThis.ReadableStream;
344
- if (typeof ReadableStream === "undefined") {
345
- throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");
346
- }
347
- return new ReadableStream(...args);
348
- }
349
- function ReadableStreamFrom(iterable) {
350
- let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
351
- return makeReadableStream({
352
- start() {
353
- },
354
- async pull(controller) {
355
- const { done, value } = await iter.next();
356
- if (done) {
357
- controller.close();
358
- } else {
359
- controller.enqueue(value);
360
- }
361
- },
362
- async cancel() {
363
- await iter.return?.();
364
- }
365
- });
366
- }
367
- function ReadableStreamToAsyncIterable(stream) {
368
- if (stream[Symbol.asyncIterator])
369
- return stream;
370
- const reader = stream.getReader();
371
- return {
372
- async next() {
373
- try {
374
- const result = await reader.read();
375
- if (result?.done)
376
- reader.releaseLock();
377
- return result;
378
- } catch (e) {
379
- reader.releaseLock();
380
- throw e;
381
- }
382
- },
383
- async return() {
384
- const cancelPromise = reader.cancel();
385
- reader.releaseLock();
386
- await cancelPromise;
387
- return { done: true, value: void 0 };
388
- },
389
- [Symbol.asyncIterator]() {
390
- return this;
391
- }
392
- };
393
- }
394
- async function CancelReadableStream(stream) {
395
- if (stream === null || typeof stream !== "object")
396
- return;
397
- if (stream[Symbol.asyncIterator]) {
398
- await stream[Symbol.asyncIterator]().return?.();
399
- return;
400
- }
401
- const reader = stream.getReader();
402
- const cancelPromise = reader.cancel();
403
- reader.releaseLock();
404
- await cancelPromise;
405
- }
406
-
407
- // node_modules/@anthropic-ai/sdk/internal/request-options.mjs
408
- var FallbackEncoder = ({ headers, body }) => {
409
- return {
410
- bodyHeaders: {
411
- "content-type": "application/json"
412
- },
413
- body: JSON.stringify(body)
414
- };
415
- };
416
-
417
- // node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs
418
- function concatBytes(buffers) {
419
- let length = 0;
420
- for (const buffer of buffers) {
421
- length += buffer.length;
422
- }
423
- const output = new Uint8Array(length);
424
- let index = 0;
425
- for (const buffer of buffers) {
426
- output.set(buffer, index);
427
- index += buffer.length;
428
- }
429
- return output;
430
- }
431
- var encodeUTF8_;
432
- function encodeUTF8(str) {
433
- let encoder;
434
- return (encodeUTF8_ ?? (encoder = new globalThis.TextEncoder(), encodeUTF8_ = encoder.encode.bind(encoder)))(str);
435
- }
436
- var decodeUTF8_;
437
- function decodeUTF8(bytes) {
438
- let decoder;
439
- return (decodeUTF8_ ?? (decoder = new globalThis.TextDecoder(), decodeUTF8_ = decoder.decode.bind(decoder)))(bytes);
440
- }
441
-
442
- // node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs
443
- var _LineDecoder_buffer;
444
- var _LineDecoder_carriageReturnIndex;
445
- var LineDecoder = class {
446
- constructor() {
447
- _LineDecoder_buffer.set(this, void 0);
448
- _LineDecoder_carriageReturnIndex.set(this, void 0);
449
- __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f");
450
- __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f");
451
- }
452
- decode(chunk) {
453
- if (chunk == null) {
454
- return [];
455
- }
456
- const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? encodeUTF8(chunk) : chunk;
457
- __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), binaryChunk]), "f");
458
- const lines = [];
459
- let patternIndex;
460
- while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f"))) != null) {
461
- if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") == null) {
462
- __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f");
463
- continue;
464
- }
465
- if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") != null && (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) {
466
- lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") - 1)));
467
- __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f")), "f");
468
- __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f");
469
- continue;
470
- }
471
- const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;
472
- const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(0, endIndex));
473
- lines.push(line);
474
- __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(patternIndex.index), "f");
475
- __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f");
476
- }
477
- return lines;
478
- }
479
- flush() {
480
- if (!__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) {
481
- return [];
482
- }
483
- return this.decode("\n");
484
- }
485
- };
486
- _LineDecoder_buffer = /* @__PURE__ */ new WeakMap(), _LineDecoder_carriageReturnIndex = /* @__PURE__ */ new WeakMap();
487
- LineDecoder.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]);
488
- LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g;
489
- function findNewlineIndex(buffer, startIndex) {
490
- const newline = 10;
491
- const carriage = 13;
492
- for (let i = startIndex ?? 0; i < buffer.length; i++) {
493
- if (buffer[i] === newline) {
494
- return { preceding: i, index: i + 1, carriage: false };
495
- }
496
- if (buffer[i] === carriage) {
497
- return { preceding: i, index: i + 1, carriage: true };
498
- }
499
- }
500
- return null;
501
- }
502
- function findDoubleNewlineIndex(buffer) {
503
- const newline = 10;
504
- const carriage = 13;
505
- for (let i = 0; i < buffer.length - 1; i++) {
506
- if (buffer[i] === newline && buffer[i + 1] === newline) {
507
- return i + 2;
508
- }
509
- if (buffer[i] === carriage && buffer[i + 1] === carriage) {
510
- return i + 2;
511
- }
512
- if (buffer[i] === carriage && buffer[i + 1] === newline && i + 3 < buffer.length && buffer[i + 2] === carriage && buffer[i + 3] === newline) {
513
- return i + 4;
514
- }
515
- }
516
- return -1;
517
- }
518
-
519
- // node_modules/@anthropic-ai/sdk/internal/utils/log.mjs
520
- var levelNumbers = {
521
- off: 0,
522
- error: 200,
523
- warn: 300,
524
- info: 400,
525
- debug: 500
526
- };
527
- var parseLogLevel = (maybeLevel, sourceName, client) => {
528
- if (!maybeLevel) {
529
- return void 0;
530
- }
531
- if (hasOwn(levelNumbers, maybeLevel)) {
532
- return maybeLevel;
533
- }
534
- loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);
535
- return void 0;
536
- };
537
- function noop() {
538
- }
539
- function makeLogFn(fnLevel, logger, logLevel) {
540
- if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {
541
- return noop;
542
- } else {
543
- return logger[fnLevel].bind(logger);
544
- }
545
- }
546
- var noopLogger = {
547
- error: noop,
548
- warn: noop,
549
- info: noop,
550
- debug: noop
551
- };
552
- var cachedLoggers = /* @__PURE__ */ new WeakMap();
553
- function loggerFor(client) {
554
- const logger = client.logger;
555
- const logLevel = client.logLevel ?? "off";
556
- if (!logger) {
557
- return noopLogger;
558
- }
559
- const cachedLogger = cachedLoggers.get(logger);
560
- if (cachedLogger && cachedLogger[0] === logLevel) {
561
- return cachedLogger[1];
562
- }
563
- const levelLogger = {
564
- error: makeLogFn("error", logger, logLevel),
565
- warn: makeLogFn("warn", logger, logLevel),
566
- info: makeLogFn("info", logger, logLevel),
567
- debug: makeLogFn("debug", logger, logLevel)
568
- };
569
- cachedLoggers.set(logger, [logLevel, levelLogger]);
570
- return levelLogger;
571
- }
572
- var formatRequestDetails = (details) => {
573
- if (details.options) {
574
- details.options = { ...details.options };
575
- delete details.options["headers"];
576
- }
577
- if (details.headers) {
578
- details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [
579
- name,
580
- name.toLowerCase() === "x-api-key" || name.toLowerCase() === "authorization" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value
581
- ]));
582
- }
583
- if ("retryOfRequestLogID" in details) {
584
- if (details.retryOfRequestLogID) {
585
- details.retryOf = details.retryOfRequestLogID;
586
- }
587
- delete details.retryOfRequestLogID;
588
- }
589
- return details;
590
- };
591
-
592
- // node_modules/@anthropic-ai/sdk/core/streaming.mjs
593
- var _Stream_client;
594
- var Stream = class _Stream {
595
- constructor(iterator, controller, client) {
596
- this.iterator = iterator;
597
- _Stream_client.set(this, void 0);
598
- this.controller = controller;
599
- __classPrivateFieldSet(this, _Stream_client, client, "f");
600
- }
601
- static fromSSEResponse(response, controller, client) {
602
- let consumed = false;
603
- const logger = client ? loggerFor(client) : console;
604
- async function* iterator() {
605
- if (consumed) {
606
- throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");
607
- }
608
- consumed = true;
609
- let done = false;
610
- try {
611
- for await (const sse of _iterSSEMessages(response, controller)) {
612
- if (sse.event === "completion") {
613
- try {
614
- yield JSON.parse(sse.data);
615
- } catch (e) {
616
- logger.error(`Could not parse message into JSON:`, sse.data);
617
- logger.error(`From chunk:`, sse.raw);
618
- throw e;
619
- }
620
- }
621
- if (sse.event === "message_start" || sse.event === "message_delta" || sse.event === "message_stop" || sse.event === "content_block_start" || sse.event === "content_block_delta" || sse.event === "content_block_stop") {
622
- try {
623
- yield JSON.parse(sse.data);
624
- } catch (e) {
625
- logger.error(`Could not parse message into JSON:`, sse.data);
626
- logger.error(`From chunk:`, sse.raw);
627
- throw e;
628
- }
629
- }
630
- if (sse.event === "ping") {
631
- continue;
632
- }
633
- if (sse.event === "error") {
634
- throw new APIError(void 0, safeJSON(sse.data) ?? sse.data, void 0, response.headers);
635
- }
636
- }
637
- done = true;
638
- } catch (e) {
639
- if (isAbortError(e))
640
- return;
641
- throw e;
642
- } finally {
643
- if (!done)
644
- controller.abort();
645
- }
646
- }
647
- return new _Stream(iterator, controller, client);
648
- }
649
- /**
650
- * Generates a Stream from a newline-separated ReadableStream
651
- * where each item is a JSON value.
652
- */
653
- static fromReadableStream(readableStream, controller, client) {
654
- let consumed = false;
655
- async function* iterLines() {
656
- const lineDecoder = new LineDecoder();
657
- const iter = ReadableStreamToAsyncIterable(readableStream);
658
- for await (const chunk of iter) {
659
- for (const line of lineDecoder.decode(chunk)) {
660
- yield line;
661
- }
662
- }
663
- for (const line of lineDecoder.flush()) {
664
- yield line;
665
- }
666
- }
667
- async function* iterator() {
668
- if (consumed) {
669
- throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");
670
- }
671
- consumed = true;
672
- let done = false;
673
- try {
674
- for await (const line of iterLines()) {
675
- if (done)
676
- continue;
677
- if (line)
678
- yield JSON.parse(line);
679
- }
680
- done = true;
681
- } catch (e) {
682
- if (isAbortError(e))
683
- return;
684
- throw e;
685
- } finally {
686
- if (!done)
687
- controller.abort();
688
- }
689
- }
690
- return new _Stream(iterator, controller, client);
691
- }
692
- [(_Stream_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() {
693
- return this.iterator();
694
- }
695
- /**
696
- * Splits the stream into two streams which can be
697
- * independently read from at different speeds.
698
- */
699
- tee() {
700
- const left = [];
701
- const right = [];
702
- const iterator = this.iterator();
703
- const teeIterator = (queue) => {
704
- return {
705
- next: () => {
706
- if (queue.length === 0) {
707
- const result = iterator.next();
708
- left.push(result);
709
- right.push(result);
710
- }
711
- return queue.shift();
712
- }
713
- };
714
- };
715
- return [
716
- new _Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, "f")),
717
- new _Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, "f"))
718
- ];
719
- }
720
- /**
721
- * Converts this stream to a newline-separated ReadableStream of
722
- * JSON stringified values in the stream
723
- * which can be turned back into a Stream with `Stream.fromReadableStream()`.
724
- */
725
- toReadableStream() {
726
- const self = this;
727
- let iter;
728
- return makeReadableStream({
729
- async start() {
730
- iter = self[Symbol.asyncIterator]();
731
- },
732
- async pull(ctrl) {
733
- try {
734
- const { value, done } = await iter.next();
735
- if (done)
736
- return ctrl.close();
737
- const bytes = encodeUTF8(JSON.stringify(value) + "\n");
738
- ctrl.enqueue(bytes);
739
- } catch (err) {
740
- ctrl.error(err);
741
- }
742
- },
743
- async cancel() {
744
- await iter.return?.();
745
- }
746
- });
747
- }
748
- };
749
- async function* _iterSSEMessages(response, controller) {
750
- if (!response.body) {
751
- controller.abort();
752
- if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") {
753
- throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);
754
- }
755
- throw new AnthropicError(`Attempted to iterate over a response with no body`);
756
- }
757
- const sseDecoder = new SSEDecoder();
758
- const lineDecoder = new LineDecoder();
759
- const iter = ReadableStreamToAsyncIterable(response.body);
760
- for await (const sseChunk of iterSSEChunks(iter)) {
761
- for (const line of lineDecoder.decode(sseChunk)) {
762
- const sse = sseDecoder.decode(line);
763
- if (sse)
764
- yield sse;
765
- }
766
- }
767
- for (const line of lineDecoder.flush()) {
768
- const sse = sseDecoder.decode(line);
769
- if (sse)
770
- yield sse;
771
- }
772
- }
773
- async function* iterSSEChunks(iterator) {
774
- let data = new Uint8Array();
775
- for await (const chunk of iterator) {
776
- if (chunk == null) {
777
- continue;
778
- }
779
- const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? encodeUTF8(chunk) : chunk;
780
- let newData = new Uint8Array(data.length + binaryChunk.length);
781
- newData.set(data);
782
- newData.set(binaryChunk, data.length);
783
- data = newData;
784
- let patternIndex;
785
- while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {
786
- yield data.slice(0, patternIndex);
787
- data = data.slice(patternIndex);
788
- }
789
- }
790
- if (data.length > 0) {
791
- yield data;
792
- }
793
- }
794
- var SSEDecoder = class {
795
- constructor() {
796
- this.event = null;
797
- this.data = [];
798
- this.chunks = [];
799
- }
800
- decode(line) {
801
- if (line.endsWith("\r")) {
802
- line = line.substring(0, line.length - 1);
803
- }
804
- if (!line) {
805
- if (!this.event && !this.data.length)
806
- return null;
807
- const sse = {
808
- event: this.event,
809
- data: this.data.join("\n"),
810
- raw: this.chunks
811
- };
812
- this.event = null;
813
- this.data = [];
814
- this.chunks = [];
815
- return sse;
816
- }
817
- this.chunks.push(line);
818
- if (line.startsWith(":")) {
819
- return null;
820
- }
821
- let [fieldname, _, value] = partition(line, ":");
822
- if (value.startsWith(" ")) {
823
- value = value.substring(1);
824
- }
825
- if (fieldname === "event") {
826
- this.event = value;
827
- } else if (fieldname === "data") {
828
- this.data.push(value);
829
- }
830
- return null;
831
- }
832
- };
833
- function partition(str, delimiter) {
834
- const index = str.indexOf(delimiter);
835
- if (index !== -1) {
836
- return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];
837
- }
838
- return [str, "", ""];
839
- }
840
-
841
- // node_modules/@anthropic-ai/sdk/internal/parse.mjs
842
- async function defaultParseResponse(client, props) {
843
- const { response, requestLogID, retryOfRequestLogID, startTime } = props;
844
- const body = await (async () => {
845
- if (props.options.stream) {
846
- loggerFor(client).debug("response", response.status, response.url, response.headers, response.body);
847
- if (props.options.__streamClass) {
848
- return props.options.__streamClass.fromSSEResponse(response, props.controller);
849
- }
850
- return Stream.fromSSEResponse(response, props.controller);
851
- }
852
- if (response.status === 204) {
853
- return null;
854
- }
855
- if (props.options.__binaryResponse) {
856
- return response;
857
- }
858
- const contentType = response.headers.get("content-type");
859
- const mediaType = contentType?.split(";")[0]?.trim();
860
- const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json");
861
- if (isJSON) {
862
- const contentLength = response.headers.get("content-length");
863
- if (contentLength === "0") {
864
- return void 0;
865
- }
866
- const json = await response.json();
867
- return addRequestID(json, response);
868
- }
869
- const text = await response.text();
870
- return text;
871
- })();
872
- loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({
873
- retryOfRequestLogID,
874
- url: response.url,
875
- status: response.status,
876
- body,
877
- durationMs: Date.now() - startTime
878
- }));
879
- return body;
880
- }
881
- function addRequestID(value, response) {
882
- if (!value || typeof value !== "object" || Array.isArray(value)) {
883
- return value;
884
- }
885
- return Object.defineProperty(value, "_request_id", {
886
- value: response.headers.get("request-id"),
887
- enumerable: false
888
- });
889
- }
890
-
891
- // node_modules/@anthropic-ai/sdk/core/api-promise.mjs
892
- var _APIPromise_client;
893
- var APIPromise = class _APIPromise extends Promise {
894
- constructor(client, responsePromise, parseResponse = defaultParseResponse) {
895
- super((resolve) => {
896
- resolve(null);
897
- });
898
- this.responsePromise = responsePromise;
899
- this.parseResponse = parseResponse;
900
- _APIPromise_client.set(this, void 0);
901
- __classPrivateFieldSet(this, _APIPromise_client, client, "f");
902
- }
903
- _thenUnwrap(transform) {
904
- return new _APIPromise(__classPrivateFieldGet(this, _APIPromise_client, "f"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));
905
- }
906
- /**
907
- * Gets the raw `Response` instance instead of parsing the response
908
- * data.
909
- *
910
- * If you want to parse the response body but still get the `Response`
911
- * instance, you can use {@link withResponse()}.
912
- *
913
- * 👋 Getting the wrong TypeScript type for `Response`?
914
- * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
915
- * to your `tsconfig.json`.
916
- */
917
- asResponse() {
918
- return this.responsePromise.then((p) => p.response);
919
- }
920
- /**
921
- * Gets the parsed response data, the raw `Response` instance and the ID of the request,
922
- * returned via the `request-id` header which is useful for debugging requests and resporting
923
- * issues to Anthropic.
924
- *
925
- * If you just want to get the raw `Response` instance without parsing it,
926
- * you can use {@link asResponse()}.
927
- *
928
- * 👋 Getting the wrong TypeScript type for `Response`?
929
- * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
930
- * to your `tsconfig.json`.
931
- */
932
- async withResponse() {
933
- const [data, response] = await Promise.all([this.parse(), this.asResponse()]);
934
- return { data, response, request_id: response.headers.get("request-id") };
935
- }
936
- parse() {
937
- if (!this.parsedPromise) {
938
- this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, "f"), data));
939
- }
940
- return this.parsedPromise;
941
- }
942
- then(onfulfilled, onrejected) {
943
- return this.parse().then(onfulfilled, onrejected);
944
- }
945
- catch(onrejected) {
946
- return this.parse().catch(onrejected);
947
- }
948
- finally(onfinally) {
949
- return this.parse().finally(onfinally);
950
- }
951
- };
952
- _APIPromise_client = /* @__PURE__ */ new WeakMap();
953
-
954
- // node_modules/@anthropic-ai/sdk/core/pagination.mjs
955
- var _AbstractPage_client;
956
- var AbstractPage = class {
957
- constructor(client, response, body, options) {
958
- _AbstractPage_client.set(this, void 0);
959
- __classPrivateFieldSet(this, _AbstractPage_client, client, "f");
960
- this.options = options;
961
- this.response = response;
962
- this.body = body;
963
- }
964
- hasNextPage() {
965
- const items = this.getPaginatedItems();
966
- if (!items.length)
967
- return false;
968
- return this.nextPageRequestOptions() != null;
969
- }
970
- async getNextPage() {
971
- const nextOptions = this.nextPageRequestOptions();
972
- if (!nextOptions) {
973
- throw new AnthropicError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");
974
- }
975
- return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions);
976
- }
977
- async *iterPages() {
978
- let page = this;
979
- yield page;
980
- while (page.hasNextPage()) {
981
- page = await page.getNextPage();
982
- yield page;
983
- }
984
- }
985
- async *[(_AbstractPage_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() {
986
- for await (const page of this.iterPages()) {
987
- for (const item of page.getPaginatedItems()) {
988
- yield item;
989
- }
990
- }
991
- }
992
- };
993
- var PagePromise = class extends APIPromise {
994
- constructor(client, request, Page2) {
995
- super(client, request, async (client2, props) => new Page2(client2, props.response, await defaultParseResponse(client2, props), props.options));
996
- }
997
- /**
998
- * Allow auto-paginating iteration on an unawaited list call, eg:
999
- *
1000
- * for await (const item of client.items.list()) {
1001
- * console.log(item)
1002
- * }
1003
- */
1004
- async *[Symbol.asyncIterator]() {
1005
- const page = await this;
1006
- for await (const item of page) {
1007
- yield item;
1008
- }
1009
- }
1010
- };
1011
- var Page = class extends AbstractPage {
1012
- constructor(client, response, body, options) {
1013
- super(client, response, body, options);
1014
- this.data = body.data || [];
1015
- this.has_more = body.has_more || false;
1016
- this.first_id = body.first_id || null;
1017
- this.last_id = body.last_id || null;
1018
- }
1019
- getPaginatedItems() {
1020
- return this.data ?? [];
1021
- }
1022
- hasNextPage() {
1023
- if (this.has_more === false) {
1024
- return false;
1025
- }
1026
- return super.hasNextPage();
1027
- }
1028
- nextPageRequestOptions() {
1029
- if (this.options.query?.["before_id"]) {
1030
- const first_id = this.first_id;
1031
- if (!first_id) {
1032
- return null;
1033
- }
1034
- return {
1035
- ...this.options,
1036
- query: {
1037
- ...maybeObj(this.options.query),
1038
- before_id: first_id
1039
- }
1040
- };
1041
- }
1042
- const cursor = this.last_id;
1043
- if (!cursor) {
1044
- return null;
1045
- }
1046
- return {
1047
- ...this.options,
1048
- query: {
1049
- ...maybeObj(this.options.query),
1050
- after_id: cursor
1051
- }
1052
- };
1053
- }
1054
- };
1055
- var PageCursor = class extends AbstractPage {
1056
- constructor(client, response, body, options) {
1057
- super(client, response, body, options);
1058
- this.data = body.data || [];
1059
- this.has_more = body.has_more || false;
1060
- this.next_page = body.next_page || null;
1061
- }
1062
- getPaginatedItems() {
1063
- return this.data ?? [];
1064
- }
1065
- hasNextPage() {
1066
- if (this.has_more === false) {
1067
- return false;
1068
- }
1069
- return super.hasNextPage();
1070
- }
1071
- nextPageRequestOptions() {
1072
- const cursor = this.next_page;
1073
- if (!cursor) {
1074
- return null;
1075
- }
1076
- return {
1077
- ...this.options,
1078
- query: {
1079
- ...maybeObj(this.options.query),
1080
- page: cursor
1081
- }
1082
- };
1083
- }
1084
- };
1085
-
1086
- // node_modules/@anthropic-ai/sdk/internal/uploads.mjs
1087
- var checkFileSupport = () => {
1088
- if (typeof File === "undefined") {
1089
- const { process } = globalThis;
1090
- const isOldNode = typeof process?.versions?.node === "string" && parseInt(process.versions.node.split(".")) < 20;
1091
- throw new Error("`File` is not defined as a global, which is required for file uploads." + (isOldNode ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : ""));
1092
- }
1093
- };
1094
- function makeFile(fileBits, fileName, options) {
1095
- checkFileSupport();
1096
- return new File(fileBits, fileName ?? "unknown_file", options);
1097
- }
1098
- function getName(value, stripPath) {
1099
- const val = typeof value === "object" && value !== null && ("name" in value && value.name && String(value.name) || "url" in value && value.url && String(value.url) || "filename" in value && value.filename && String(value.filename) || "path" in value && value.path && String(value.path)) || "";
1100
- return stripPath ? val.split(/[\\/]/).pop() || void 0 : val;
1101
- }
1102
- var isAsyncIterable = (value) => value != null && typeof value === "object" && typeof value[Symbol.asyncIterator] === "function";
1103
- var multipartFormRequestOptions = async (opts, fetch2, stripFilenames = true) => {
1104
- return { ...opts, body: await createForm(opts.body, fetch2, stripFilenames) };
1105
- };
1106
- var supportsFormDataMap = /* @__PURE__ */ new WeakMap();
1107
- function supportsFormData(fetchObject) {
1108
- const fetch2 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch;
1109
- const cached = supportsFormDataMap.get(fetch2);
1110
- if (cached)
1111
- return cached;
1112
- const promise = (async () => {
1113
- try {
1114
- const FetchResponse = "Response" in fetch2 ? fetch2.Response : (await fetch2("data:,")).constructor;
1115
- const data = new FormData();
1116
- if (data.toString() === await new FetchResponse(data).text()) {
1117
- return false;
1118
- }
1119
- return true;
1120
- } catch {
1121
- return true;
1122
- }
1123
- })();
1124
- supportsFormDataMap.set(fetch2, promise);
1125
- return promise;
1126
- }
1127
- var createForm = async (body, fetch2, stripFilenames = true) => {
1128
- if (!await supportsFormData(fetch2)) {
1129
- throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");
1130
- }
1131
- const form = new FormData();
1132
- await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value, stripFilenames)));
1133
- return form;
1134
- };
1135
- var isNamedBlob = (value) => value instanceof Blob && "name" in value;
1136
- var addFormValue = async (form, key, value, stripFilenames) => {
1137
- if (value === void 0)
1138
- return;
1139
- if (value == null) {
1140
- throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`);
1141
- }
1142
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
1143
- form.append(key, String(value));
1144
- } else if (value instanceof Response) {
1145
- let options = {};
1146
- const contentType = value.headers.get("Content-Type");
1147
- if (contentType) {
1148
- options = { type: contentType };
1149
- }
1150
- form.append(key, makeFile([await value.blob()], getName(value, stripFilenames), options));
1151
- } else if (isAsyncIterable(value)) {
1152
- form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value, stripFilenames)));
1153
- } else if (isNamedBlob(value)) {
1154
- form.append(key, makeFile([value], getName(value, stripFilenames), { type: value.type }));
1155
- } else if (Array.isArray(value)) {
1156
- await Promise.all(value.map((entry) => addFormValue(form, key + "[]", entry, stripFilenames)));
1157
- } else if (typeof value === "object") {
1158
- await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, stripFilenames)));
1159
- } else {
1160
- throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);
1161
- }
1162
- };
1163
-
1164
- // node_modules/@anthropic-ai/sdk/internal/to-file.mjs
1165
- var isBlobLike = (value) => value != null && typeof value === "object" && typeof value.size === "number" && typeof value.type === "string" && typeof value.text === "function" && typeof value.slice === "function" && typeof value.arrayBuffer === "function";
1166
- var isFileLike = (value) => value != null && typeof value === "object" && typeof value.name === "string" && typeof value.lastModified === "number" && isBlobLike(value);
1167
- var isResponseLike = (value) => value != null && typeof value === "object" && typeof value.url === "string" && typeof value.blob === "function";
1168
- async function toFile(value, name, options) {
1169
- checkFileSupport();
1170
- value = await value;
1171
- name || (name = getName(value, true));
1172
- if (isFileLike(value)) {
1173
- if (value instanceof File && name == null && options == null) {
1174
- return value;
1175
- }
1176
- return makeFile([await value.arrayBuffer()], name ?? value.name, {
1177
- type: value.type,
1178
- lastModified: value.lastModified,
1179
- ...options
1180
- });
1181
- }
1182
- if (isResponseLike(value)) {
1183
- const blob = await value.blob();
1184
- name || (name = new URL(value.url).pathname.split(/[\\/]/).pop());
1185
- return makeFile(await getBytes(blob), name, options);
1186
- }
1187
- const parts = await getBytes(value);
1188
- if (!options?.type) {
1189
- const type = parts.find((part) => typeof part === "object" && "type" in part && part.type);
1190
- if (typeof type === "string") {
1191
- options = { ...options, type };
1192
- }
1193
- }
1194
- return makeFile(parts, name, options);
1195
- }
1196
- async function getBytes(value) {
1197
- let parts = [];
1198
- if (typeof value === "string" || ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.
1199
- value instanceof ArrayBuffer) {
1200
- parts.push(value);
1201
- } else if (isBlobLike(value)) {
1202
- parts.push(value instanceof Blob ? value : await value.arrayBuffer());
1203
- } else if (isAsyncIterable(value)) {
1204
- for await (const chunk of value) {
1205
- parts.push(...await getBytes(chunk));
1206
- }
1207
- } else {
1208
- const constructor = value?.constructor?.name;
1209
- throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ""}${propsForError(value)}`);
1210
- }
1211
- return parts;
1212
- }
1213
- function propsForError(value) {
1214
- if (typeof value !== "object" || value === null)
1215
- return "";
1216
- const props = Object.getOwnPropertyNames(value);
1217
- return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`;
1218
- }
1219
-
1220
- // node_modules/@anthropic-ai/sdk/core/resource.mjs
1221
- var APIResource = class {
1222
- constructor(client) {
1223
- this._client = client;
1224
- }
1225
- };
1226
-
1227
- // node_modules/@anthropic-ai/sdk/internal/headers.mjs
1228
- var brand_privateNullableHeaders = /* @__PURE__ */ Symbol.for("brand.privateNullableHeaders");
1229
- function* iterateHeaders(headers) {
1230
- if (!headers)
1231
- return;
1232
- if (brand_privateNullableHeaders in headers) {
1233
- const { values, nulls } = headers;
1234
- yield* values.entries();
1235
- for (const name of nulls) {
1236
- yield [name, null];
1237
- }
1238
- return;
1239
- }
1240
- let shouldClear = false;
1241
- let iter;
1242
- if (headers instanceof Headers) {
1243
- iter = headers.entries();
1244
- } else if (isReadonlyArray(headers)) {
1245
- iter = headers;
1246
- } else {
1247
- shouldClear = true;
1248
- iter = Object.entries(headers ?? {});
1249
- }
1250
- for (let row of iter) {
1251
- const name = row[0];
1252
- if (typeof name !== "string")
1253
- throw new TypeError("expected header name to be a string");
1254
- const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];
1255
- let didClear = false;
1256
- for (const value of values) {
1257
- if (value === void 0)
1258
- continue;
1259
- if (shouldClear && !didClear) {
1260
- didClear = true;
1261
- yield [name, null];
1262
- }
1263
- yield [name, value];
1264
- }
1265
- }
1266
- }
1267
- var buildHeaders = (newHeaders) => {
1268
- const targetHeaders = new Headers();
1269
- const nullHeaders = /* @__PURE__ */ new Set();
1270
- for (const headers of newHeaders) {
1271
- const seenHeaders = /* @__PURE__ */ new Set();
1272
- for (const [name, value] of iterateHeaders(headers)) {
1273
- const lowerName = name.toLowerCase();
1274
- if (!seenHeaders.has(lowerName)) {
1275
- targetHeaders.delete(name);
1276
- seenHeaders.add(lowerName);
1277
- }
1278
- if (value === null) {
1279
- targetHeaders.delete(name);
1280
- nullHeaders.add(lowerName);
1281
- } else {
1282
- targetHeaders.append(name, value);
1283
- nullHeaders.delete(lowerName);
1284
- }
1285
- }
1286
- }
1287
- return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };
1288
- };
1289
-
1290
- // node_modules/@anthropic-ai/sdk/lib/stainless-helper-header.mjs
1291
- var SDK_HELPER_SYMBOL = /* @__PURE__ */ Symbol("anthropic.sdk.stainlessHelper");
1292
- function wasCreatedByStainlessHelper(value) {
1293
- return typeof value === "object" && value !== null && SDK_HELPER_SYMBOL in value;
1294
- }
1295
- function collectStainlessHelpers(tools, messages) {
1296
- const helpers = /* @__PURE__ */ new Set();
1297
- if (tools) {
1298
- for (const tool of tools) {
1299
- if (wasCreatedByStainlessHelper(tool)) {
1300
- helpers.add(tool[SDK_HELPER_SYMBOL]);
1301
- }
1302
- }
1303
- }
1304
- if (messages) {
1305
- for (const message of messages) {
1306
- if (wasCreatedByStainlessHelper(message)) {
1307
- helpers.add(message[SDK_HELPER_SYMBOL]);
1308
- }
1309
- if (Array.isArray(message.content)) {
1310
- for (const block of message.content) {
1311
- if (wasCreatedByStainlessHelper(block)) {
1312
- helpers.add(block[SDK_HELPER_SYMBOL]);
1313
- }
1314
- }
1315
- }
1316
- }
1317
- }
1318
- return Array.from(helpers);
1319
- }
1320
- function stainlessHelperHeader(tools, messages) {
1321
- const helpers = collectStainlessHelpers(tools, messages);
1322
- if (helpers.length === 0)
1323
- return {};
1324
- return { "x-stainless-helper": helpers.join(", ") };
1325
- }
1326
- function stainlessHelperHeaderFromFile(file) {
1327
- if (wasCreatedByStainlessHelper(file)) {
1328
- return { "x-stainless-helper": file[SDK_HELPER_SYMBOL] };
1329
- }
1330
- return {};
1331
- }
1332
-
1333
- // node_modules/@anthropic-ai/sdk/internal/utils/path.mjs
1334
- function encodeURIPath(str) {
1335
- return str.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);
1336
- }
1337
- var EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));
1338
- var createPathTagFunction = (pathEncoder = encodeURIPath) => function path2(statics, ...params) {
1339
- if (statics.length === 1)
1340
- return statics[0];
1341
- let postPath = false;
1342
- const invalidSegments = [];
1343
- const path3 = statics.reduce((previousValue, currentValue, index) => {
1344
- if (/[?#]/.test(currentValue)) {
1345
- postPath = true;
1346
- }
1347
- const value = params[index];
1348
- let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value);
1349
- if (index !== params.length && (value == null || typeof value === "object" && // handle values from other realms
1350
- value.toString === Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)?.toString)) {
1351
- encoded = value + "";
1352
- invalidSegments.push({
1353
- start: previousValue.length + currentValue.length,
1354
- length: encoded.length,
1355
- error: `Value of type ${Object.prototype.toString.call(value).slice(8, -1)} is not a valid path parameter`
1356
- });
1357
- }
1358
- return previousValue + currentValue + (index === params.length ? "" : encoded);
1359
- }, "");
1360
- const pathOnly = path3.split(/[?#]/, 1)[0];
1361
- const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;
1362
- let match;
1363
- while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {
1364
- invalidSegments.push({
1365
- start: match.index,
1366
- length: match[0].length,
1367
- error: `Value "${match[0]}" can't be safely passed as a path parameter`
1368
- });
1369
- }
1370
- invalidSegments.sort((a, b) => a.start - b.start);
1371
- if (invalidSegments.length > 0) {
1372
- let lastEnd = 0;
1373
- const underline = invalidSegments.reduce((acc, segment) => {
1374
- const spaces = " ".repeat(segment.start - lastEnd);
1375
- const arrows = "^".repeat(segment.length);
1376
- lastEnd = segment.start + segment.length;
1377
- return acc + spaces + arrows;
1378
- }, "");
1379
- throw new AnthropicError(`Path parameters result in path with invalid segments:
1380
- ${invalidSegments.map((e) => e.error).join("\n")}
1381
- ${path3}
1382
- ${underline}`);
1383
- }
1384
- return path3;
1385
- };
1386
- var path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);
1387
-
1388
- // node_modules/@anthropic-ai/sdk/resources/beta/files.mjs
1389
- var Files = class extends APIResource {
1390
- /**
1391
- * List Files
1392
- *
1393
- * @example
1394
- * ```ts
1395
- * // Automatically fetches more pages as needed.
1396
- * for await (const fileMetadata of client.beta.files.list()) {
1397
- * // ...
1398
- * }
1399
- * ```
1400
- */
1401
- list(params = {}, options) {
1402
- const { betas, ...query } = params ?? {};
1403
- return this._client.getAPIList("/v1/files", Page, {
1404
- query,
1405
- ...options,
1406
- headers: buildHeaders([
1407
- { "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString() },
1408
- options?.headers
1409
- ])
1410
- });
1411
- }
1412
- /**
1413
- * Delete File
1414
- *
1415
- * @example
1416
- * ```ts
1417
- * const deletedFile = await client.beta.files.delete(
1418
- * 'file_id',
1419
- * );
1420
- * ```
1421
- */
1422
- delete(fileID, params = {}, options) {
1423
- const { betas } = params ?? {};
1424
- return this._client.delete(path`/v1/files/${fileID}`, {
1425
- ...options,
1426
- headers: buildHeaders([
1427
- { "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString() },
1428
- options?.headers
1429
- ])
1430
- });
1431
- }
1432
- /**
1433
- * Download File
1434
- *
1435
- * @example
1436
- * ```ts
1437
- * const response = await client.beta.files.download(
1438
- * 'file_id',
1439
- * );
1440
- *
1441
- * const content = await response.blob();
1442
- * console.log(content);
1443
- * ```
1444
- */
1445
- download(fileID, params = {}, options) {
1446
- const { betas } = params ?? {};
1447
- return this._client.get(path`/v1/files/${fileID}/content`, {
1448
- ...options,
1449
- headers: buildHeaders([
1450
- {
1451
- "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString(),
1452
- Accept: "application/binary"
1453
- },
1454
- options?.headers
1455
- ]),
1456
- __binaryResponse: true
1457
- });
1458
- }
1459
- /**
1460
- * Get File Metadata
1461
- *
1462
- * @example
1463
- * ```ts
1464
- * const fileMetadata =
1465
- * await client.beta.files.retrieveMetadata('file_id');
1466
- * ```
1467
- */
1468
- retrieveMetadata(fileID, params = {}, options) {
1469
- const { betas } = params ?? {};
1470
- return this._client.get(path`/v1/files/${fileID}`, {
1471
- ...options,
1472
- headers: buildHeaders([
1473
- { "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString() },
1474
- options?.headers
1475
- ])
1476
- });
1477
- }
1478
- /**
1479
- * Upload File
1480
- *
1481
- * @example
1482
- * ```ts
1483
- * const fileMetadata = await client.beta.files.upload({
1484
- * file: fs.createReadStream('path/to/file'),
1485
- * });
1486
- * ```
1487
- */
1488
- upload(params, options) {
1489
- const { betas, ...body } = params;
1490
- return this._client.post("/v1/files", multipartFormRequestOptions({
1491
- body,
1492
- ...options,
1493
- headers: buildHeaders([
1494
- { "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString() },
1495
- stainlessHelperHeaderFromFile(body.file),
1496
- options?.headers
1497
- ])
1498
- }, this._client));
1499
- }
1500
- };
1501
-
1502
- // node_modules/@anthropic-ai/sdk/resources/beta/models.mjs
1503
- var Models = class extends APIResource {
1504
- /**
1505
- * Get a specific model.
1506
- *
1507
- * The Models API response can be used to determine information about a specific
1508
- * model or resolve a model alias to a model ID.
1509
- *
1510
- * @example
1511
- * ```ts
1512
- * const betaModelInfo = await client.beta.models.retrieve(
1513
- * 'model_id',
1514
- * );
1515
- * ```
1516
- */
1517
- retrieve(modelID, params = {}, options) {
1518
- const { betas } = params ?? {};
1519
- return this._client.get(path`/v1/models/${modelID}?beta=true`, {
1520
- ...options,
1521
- headers: buildHeaders([
1522
- { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 },
1523
- options?.headers
1524
- ])
1525
- });
1526
- }
1527
- /**
1528
- * List available models.
1529
- *
1530
- * The Models API response can be used to determine which models are available for
1531
- * use in the API. More recently released models are listed first.
1532
- *
1533
- * @example
1534
- * ```ts
1535
- * // Automatically fetches more pages as needed.
1536
- * for await (const betaModelInfo of client.beta.models.list()) {
1537
- * // ...
1538
- * }
1539
- * ```
1540
- */
1541
- list(params = {}, options) {
1542
- const { betas, ...query } = params ?? {};
1543
- return this._client.getAPIList("/v1/models?beta=true", Page, {
1544
- query,
1545
- ...options,
1546
- headers: buildHeaders([
1547
- { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 },
1548
- options?.headers
1549
- ])
1550
- });
1551
- }
1552
- };
1553
-
1554
- // node_modules/@anthropic-ai/sdk/internal/constants.mjs
1555
- var MODEL_NONSTREAMING_TOKENS = {
1556
- "claude-opus-4-20250514": 8192,
1557
- "claude-opus-4-0": 8192,
1558
- "claude-4-opus-20250514": 8192,
1559
- "anthropic.claude-opus-4-20250514-v1:0": 8192,
1560
- "claude-opus-4@20250514": 8192,
1561
- "claude-opus-4-1-20250805": 8192,
1562
- "anthropic.claude-opus-4-1-20250805-v1:0": 8192,
1563
- "claude-opus-4-1@20250805": 8192
1564
- };
1565
-
1566
- // node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs
1567
- function getOutputFormat(params) {
1568
- return params?.output_format ?? params?.output_config?.format;
1569
- }
1570
- function maybeParseBetaMessage(message, params, opts) {
1571
- const outputFormat = getOutputFormat(params);
1572
- if (!params || !("parse" in (outputFormat ?? {}))) {
1573
- return {
1574
- ...message,
1575
- content: message.content.map((block) => {
1576
- if (block.type === "text") {
1577
- const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", {
1578
- value: null,
1579
- enumerable: false
1580
- });
1581
- return Object.defineProperty(parsedBlock, "parsed", {
1582
- get() {
1583
- opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead.");
1584
- return null;
1585
- },
1586
- enumerable: false
1587
- });
1588
- }
1589
- return block;
1590
- }),
1591
- parsed_output: null
1592
- };
1593
- }
1594
- return parseBetaMessage(message, params, opts);
1595
- }
1596
- function parseBetaMessage(message, params, opts) {
1597
- let firstParsedOutput = null;
1598
- const content = message.content.map((block) => {
1599
- if (block.type === "text") {
1600
- const parsedOutput = parseBetaOutputFormat(params, block.text);
1601
- if (firstParsedOutput === null) {
1602
- firstParsedOutput = parsedOutput;
1603
- }
1604
- const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", {
1605
- value: parsedOutput,
1606
- enumerable: false
1607
- });
1608
- return Object.defineProperty(parsedBlock, "parsed", {
1609
- get() {
1610
- opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead.");
1611
- return parsedOutput;
1612
- },
1613
- enumerable: false
1614
- });
1615
- }
1616
- return block;
1617
- });
1618
- return {
1619
- ...message,
1620
- content,
1621
- parsed_output: firstParsedOutput
1622
- };
1623
- }
1624
- function parseBetaOutputFormat(params, content) {
1625
- const outputFormat = getOutputFormat(params);
1626
- if (outputFormat?.type !== "json_schema") {
1627
- return null;
1628
- }
1629
- try {
1630
- if ("parse" in outputFormat) {
1631
- return outputFormat.parse(content);
1632
- }
1633
- return JSON.parse(content);
1634
- } catch (error) {
1635
- throw new AnthropicError(`Failed to parse structured output: ${error}`);
1636
- }
1637
- }
1638
-
1639
- // node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs
1640
- var tokenize = (input) => {
1641
- let current = 0;
1642
- let tokens = [];
1643
- while (current < input.length) {
1644
- let char = input[current];
1645
- if (char === "\\") {
1646
- current++;
1647
- continue;
1648
- }
1649
- if (char === "{") {
1650
- tokens.push({
1651
- type: "brace",
1652
- value: "{"
1653
- });
1654
- current++;
1655
- continue;
1656
- }
1657
- if (char === "}") {
1658
- tokens.push({
1659
- type: "brace",
1660
- value: "}"
1661
- });
1662
- current++;
1663
- continue;
1664
- }
1665
- if (char === "[") {
1666
- tokens.push({
1667
- type: "paren",
1668
- value: "["
1669
- });
1670
- current++;
1671
- continue;
1672
- }
1673
- if (char === "]") {
1674
- tokens.push({
1675
- type: "paren",
1676
- value: "]"
1677
- });
1678
- current++;
1679
- continue;
1680
- }
1681
- if (char === ":") {
1682
- tokens.push({
1683
- type: "separator",
1684
- value: ":"
1685
- });
1686
- current++;
1687
- continue;
1688
- }
1689
- if (char === ",") {
1690
- tokens.push({
1691
- type: "delimiter",
1692
- value: ","
1693
- });
1694
- current++;
1695
- continue;
1696
- }
1697
- if (char === '"') {
1698
- let value = "";
1699
- let danglingQuote = false;
1700
- char = input[++current];
1701
- while (char !== '"') {
1702
- if (current === input.length) {
1703
- danglingQuote = true;
1704
- break;
1705
- }
1706
- if (char === "\\") {
1707
- current++;
1708
- if (current === input.length) {
1709
- danglingQuote = true;
1710
- break;
1711
- }
1712
- value += char + input[current];
1713
- char = input[++current];
1714
- } else {
1715
- value += char;
1716
- char = input[++current];
1717
- }
1718
- }
1719
- char = input[++current];
1720
- if (!danglingQuote) {
1721
- tokens.push({
1722
- type: "string",
1723
- value
1724
- });
1725
- }
1726
- continue;
1727
- }
1728
- let WHITESPACE = /\s/;
1729
- if (char && WHITESPACE.test(char)) {
1730
- current++;
1731
- continue;
1732
- }
1733
- let NUMBERS = /[0-9]/;
1734
- if (char && NUMBERS.test(char) || char === "-" || char === ".") {
1735
- let value = "";
1736
- if (char === "-") {
1737
- value += char;
1738
- char = input[++current];
1739
- }
1740
- while (char && NUMBERS.test(char) || char === ".") {
1741
- value += char;
1742
- char = input[++current];
1743
- }
1744
- tokens.push({
1745
- type: "number",
1746
- value
1747
- });
1748
- continue;
1749
- }
1750
- let LETTERS = /[a-z]/i;
1751
- if (char && LETTERS.test(char)) {
1752
- let value = "";
1753
- while (char && LETTERS.test(char)) {
1754
- if (current === input.length) {
1755
- break;
1756
- }
1757
- value += char;
1758
- char = input[++current];
1759
- }
1760
- if (value == "true" || value == "false" || value === "null") {
1761
- tokens.push({
1762
- type: "name",
1763
- value
1764
- });
1765
- } else {
1766
- current++;
1767
- continue;
1768
- }
1769
- continue;
1770
- }
1771
- current++;
1772
- }
1773
- return tokens;
1774
- };
1775
- var strip = (tokens) => {
1776
- if (tokens.length === 0) {
1777
- return tokens;
1778
- }
1779
- let lastToken = tokens[tokens.length - 1];
1780
- switch (lastToken.type) {
1781
- case "separator":
1782
- tokens = tokens.slice(0, tokens.length - 1);
1783
- return strip(tokens);
1784
- break;
1785
- case "number":
1786
- let lastCharacterOfLastToken = lastToken.value[lastToken.value.length - 1];
1787
- if (lastCharacterOfLastToken === "." || lastCharacterOfLastToken === "-") {
1788
- tokens = tokens.slice(0, tokens.length - 1);
1789
- return strip(tokens);
1790
- }
1791
- case "string":
1792
- let tokenBeforeTheLastToken = tokens[tokens.length - 2];
1793
- if (tokenBeforeTheLastToken?.type === "delimiter") {
1794
- tokens = tokens.slice(0, tokens.length - 1);
1795
- return strip(tokens);
1796
- } else if (tokenBeforeTheLastToken?.type === "brace" && tokenBeforeTheLastToken.value === "{") {
1797
- tokens = tokens.slice(0, tokens.length - 1);
1798
- return strip(tokens);
1799
- }
1800
- break;
1801
- case "delimiter":
1802
- tokens = tokens.slice(0, tokens.length - 1);
1803
- return strip(tokens);
1804
- break;
1805
- }
1806
- return tokens;
1807
- };
1808
- var unstrip = (tokens) => {
1809
- let tail = [];
1810
- tokens.map((token) => {
1811
- if (token.type === "brace") {
1812
- if (token.value === "{") {
1813
- tail.push("}");
1814
- } else {
1815
- tail.splice(tail.lastIndexOf("}"), 1);
1816
- }
1817
- }
1818
- if (token.type === "paren") {
1819
- if (token.value === "[") {
1820
- tail.push("]");
1821
- } else {
1822
- tail.splice(tail.lastIndexOf("]"), 1);
1823
- }
1824
- }
1825
- });
1826
- if (tail.length > 0) {
1827
- tail.reverse().map((item) => {
1828
- if (item === "}") {
1829
- tokens.push({
1830
- type: "brace",
1831
- value: "}"
1832
- });
1833
- } else if (item === "]") {
1834
- tokens.push({
1835
- type: "paren",
1836
- value: "]"
1837
- });
1838
- }
1839
- });
1840
- }
1841
- return tokens;
1842
- };
1843
- var generate = (tokens) => {
1844
- let output = "";
1845
- tokens.map((token) => {
1846
- switch (token.type) {
1847
- case "string":
1848
- output += '"' + token.value + '"';
1849
- break;
1850
- default:
1851
- output += token.value;
1852
- break;
1853
- }
1854
- });
1855
- return output;
1856
- };
1857
- var partialParse = (input) => JSON.parse(generate(unstrip(strip(tokenize(input)))));
1858
-
1859
- // node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs
1860
- var _BetaMessageStream_instances;
1861
- var _BetaMessageStream_currentMessageSnapshot;
1862
- var _BetaMessageStream_params;
1863
- var _BetaMessageStream_connectedPromise;
1864
- var _BetaMessageStream_resolveConnectedPromise;
1865
- var _BetaMessageStream_rejectConnectedPromise;
1866
- var _BetaMessageStream_endPromise;
1867
- var _BetaMessageStream_resolveEndPromise;
1868
- var _BetaMessageStream_rejectEndPromise;
1869
- var _BetaMessageStream_listeners;
1870
- var _BetaMessageStream_ended;
1871
- var _BetaMessageStream_errored;
1872
- var _BetaMessageStream_aborted;
1873
- var _BetaMessageStream_catchingPromiseCreated;
1874
- var _BetaMessageStream_response;
1875
- var _BetaMessageStream_request_id;
1876
- var _BetaMessageStream_logger;
1877
- var _BetaMessageStream_getFinalMessage;
1878
- var _BetaMessageStream_getFinalText;
1879
- var _BetaMessageStream_handleError;
1880
- var _BetaMessageStream_beginRequest;
1881
- var _BetaMessageStream_addStreamEvent;
1882
- var _BetaMessageStream_endRequest;
1883
- var _BetaMessageStream_accumulateMessage;
1884
- var JSON_BUF_PROPERTY = "__json_buf";
1885
- function tracksToolInput(content) {
1886
- return content.type === "tool_use" || content.type === "server_tool_use" || content.type === "mcp_tool_use";
1887
- }
1888
- var BetaMessageStream = class _BetaMessageStream {
1889
- constructor(params, opts) {
1890
- _BetaMessageStream_instances.add(this);
1891
- this.messages = [];
1892
- this.receivedMessages = [];
1893
- _BetaMessageStream_currentMessageSnapshot.set(this, void 0);
1894
- _BetaMessageStream_params.set(this, null);
1895
- this.controller = new AbortController();
1896
- _BetaMessageStream_connectedPromise.set(this, void 0);
1897
- _BetaMessageStream_resolveConnectedPromise.set(this, () => {
1898
- });
1899
- _BetaMessageStream_rejectConnectedPromise.set(this, () => {
1900
- });
1901
- _BetaMessageStream_endPromise.set(this, void 0);
1902
- _BetaMessageStream_resolveEndPromise.set(this, () => {
1903
- });
1904
- _BetaMessageStream_rejectEndPromise.set(this, () => {
1905
- });
1906
- _BetaMessageStream_listeners.set(this, {});
1907
- _BetaMessageStream_ended.set(this, false);
1908
- _BetaMessageStream_errored.set(this, false);
1909
- _BetaMessageStream_aborted.set(this, false);
1910
- _BetaMessageStream_catchingPromiseCreated.set(this, false);
1911
- _BetaMessageStream_response.set(this, void 0);
1912
- _BetaMessageStream_request_id.set(this, void 0);
1913
- _BetaMessageStream_logger.set(this, void 0);
1914
- _BetaMessageStream_handleError.set(this, (error) => {
1915
- __classPrivateFieldSet(this, _BetaMessageStream_errored, true, "f");
1916
- if (isAbortError(error)) {
1917
- error = new APIUserAbortError();
1918
- }
1919
- if (error instanceof APIUserAbortError) {
1920
- __classPrivateFieldSet(this, _BetaMessageStream_aborted, true, "f");
1921
- return this._emit("abort", error);
1922
- }
1923
- if (error instanceof AnthropicError) {
1924
- return this._emit("error", error);
1925
- }
1926
- if (error instanceof Error) {
1927
- const anthropicError = new AnthropicError(error.message);
1928
- anthropicError.cause = error;
1929
- return this._emit("error", anthropicError);
1930
- }
1931
- return this._emit("error", new AnthropicError(String(error)));
1932
- });
1933
- __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve, reject) => {
1934
- __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve, "f");
1935
- __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject, "f");
1936
- }), "f");
1937
- __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve, reject) => {
1938
- __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve, "f");
1939
- __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject, "f");
1940
- }), "f");
1941
- __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f").catch(() => {
1942
- });
1943
- __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f").catch(() => {
1944
- });
1945
- __classPrivateFieldSet(this, _BetaMessageStream_params, params, "f");
1946
- __classPrivateFieldSet(this, _BetaMessageStream_logger, opts?.logger ?? console, "f");
1947
- }
1948
- get response() {
1949
- return __classPrivateFieldGet(this, _BetaMessageStream_response, "f");
1950
- }
1951
- get request_id() {
1952
- return __classPrivateFieldGet(this, _BetaMessageStream_request_id, "f");
1953
- }
1954
- /**
1955
- * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
1956
- * returned vie the `request-id` header which is useful for debugging requests and resporting
1957
- * issues to Anthropic.
1958
- *
1959
- * This is the same as the `APIPromise.withResponse()` method.
1960
- *
1961
- * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
1962
- * as no `Response` is available.
1963
- */
1964
- async withResponse() {
1965
- __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f");
1966
- const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f");
1967
- if (!response) {
1968
- throw new Error("Could not resolve a `Response` object");
1969
- }
1970
- return {
1971
- data: this,
1972
- response,
1973
- request_id: response.headers.get("request-id")
1974
- };
1975
- }
1976
- /**
1977
- * Intended for use on the frontend, consuming a stream produced with
1978
- * `.toReadableStream()` on the backend.
1979
- *
1980
- * Note that messages sent to the model do not appear in `.on('message')`
1981
- * in this context.
1982
- */
1983
- static fromReadableStream(stream) {
1984
- const runner = new _BetaMessageStream(null);
1985
- runner._run(() => runner._fromReadableStream(stream));
1986
- return runner;
1987
- }
1988
- static createMessage(messages, params, options, { logger } = {}) {
1989
- const runner = new _BetaMessageStream(params, { logger });
1990
- for (const message of params.messages) {
1991
- runner._addMessageParam(message);
1992
- }
1993
- __classPrivateFieldSet(runner, _BetaMessageStream_params, { ...params, stream: true }, "f");
1994
- runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, "X-Stainless-Helper-Method": "stream" } }));
1995
- return runner;
1996
- }
1997
- _run(executor) {
1998
- executor().then(() => {
1999
- this._emitFinal();
2000
- this._emit("end");
2001
- }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f"));
2002
- }
2003
- _addMessageParam(message) {
2004
- this.messages.push(message);
2005
- }
2006
- _addMessage(message, emit = true) {
2007
- this.receivedMessages.push(message);
2008
- if (emit) {
2009
- this._emit("message", message);
2010
- }
2011
- }
2012
- async _createMessage(messages, params, options) {
2013
- const signal = options?.signal;
2014
- let abortHandler;
2015
- if (signal) {
2016
- if (signal.aborted)
2017
- this.controller.abort();
2018
- abortHandler = this.controller.abort.bind(this.controller);
2019
- signal.addEventListener("abort", abortHandler);
2020
- }
2021
- try {
2022
- __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this);
2023
- const { response, data: stream } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse();
2024
- this._connected(response);
2025
- for await (const event of stream) {
2026
- __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event);
2027
- }
2028
- if (stream.controller.signal?.aborted) {
2029
- throw new APIUserAbortError();
2030
- }
2031
- __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this);
2032
- } finally {
2033
- if (signal && abortHandler) {
2034
- signal.removeEventListener("abort", abortHandler);
2035
- }
2036
- }
2037
- }
2038
- _connected(response) {
2039
- if (this.ended)
2040
- return;
2041
- __classPrivateFieldSet(this, _BetaMessageStream_response, response, "f");
2042
- __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get("request-id"), "f");
2043
- __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response);
2044
- this._emit("connect");
2045
- }
2046
- get ended() {
2047
- return __classPrivateFieldGet(this, _BetaMessageStream_ended, "f");
2048
- }
2049
- get errored() {
2050
- return __classPrivateFieldGet(this, _BetaMessageStream_errored, "f");
2051
- }
2052
- get aborted() {
2053
- return __classPrivateFieldGet(this, _BetaMessageStream_aborted, "f");
2054
- }
2055
- abort() {
2056
- this.controller.abort();
2057
- }
2058
- /**
2059
- * Adds the listener function to the end of the listeners array for the event.
2060
- * No checks are made to see if the listener has already been added. Multiple calls passing
2061
- * the same combination of event and listener will result in the listener being added, and
2062
- * called, multiple times.
2063
- * @returns this MessageStream, so that calls can be chained
2064
- */
2065
- on(event, listener) {
2066
- const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []);
2067
- listeners.push({ listener });
2068
- return this;
2069
- }
2070
- /**
2071
- * Removes the specified listener from the listener array for the event.
2072
- * off() will remove, at most, one instance of a listener from the listener array. If any single
2073
- * listener has been added multiple times to the listener array for the specified event, then
2074
- * off() must be called multiple times to remove each instance.
2075
- * @returns this MessageStream, so that calls can be chained
2076
- */
2077
- off(event, listener) {
2078
- const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event];
2079
- if (!listeners)
2080
- return this;
2081
- const index = listeners.findIndex((l) => l.listener === listener);
2082
- if (index >= 0)
2083
- listeners.splice(index, 1);
2084
- return this;
2085
- }
2086
- /**
2087
- * Adds a one-time listener function for the event. The next time the event is triggered,
2088
- * this listener is removed and then invoked.
2089
- * @returns this MessageStream, so that calls can be chained
2090
- */
2091
- once(event, listener) {
2092
- const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []);
2093
- listeners.push({ listener, once: true });
2094
- return this;
2095
- }
2096
- /**
2097
- * This is similar to `.once()`, but returns a Promise that resolves the next time
2098
- * the event is triggered, instead of calling a listener callback.
2099
- * @returns a Promise that resolves the next time given event is triggered,
2100
- * or rejects if an error is emitted. (If you request the 'error' event,
2101
- * returns a promise that resolves with the error).
2102
- *
2103
- * Example:
2104
- *
2105
- * const message = await stream.emitted('message') // rejects if the stream errors
2106
- */
2107
- emitted(event) {
2108
- return new Promise((resolve, reject) => {
2109
- __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f");
2110
- if (event !== "error")
2111
- this.once("error", reject);
2112
- this.once(event, resolve);
2113
- });
2114
- }
2115
- async done() {
2116
- __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f");
2117
- await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f");
2118
- }
2119
- get currentMessage() {
2120
- return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f");
2121
- }
2122
- /**
2123
- * @returns a promise that resolves with the the final assistant Message response,
2124
- * or rejects if an error occurred or the stream ended prematurely without producing a Message.
2125
- * If structured outputs were used, this will be a ParsedMessage with a `parsed` field.
2126
- */
2127
- async finalMessage() {
2128
- await this.done();
2129
- return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this);
2130
- }
2131
- /**
2132
- * @returns a promise that resolves with the the final assistant Message's text response, concatenated
2133
- * together if there are more than one text blocks.
2134
- * Rejects if an error occurred or the stream ended prematurely without producing a Message.
2135
- */
2136
- async finalText() {
2137
- await this.done();
2138
- return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this);
2139
- }
2140
- _emit(event, ...args) {
2141
- if (__classPrivateFieldGet(this, _BetaMessageStream_ended, "f"))
2142
- return;
2143
- if (event === "end") {
2144
- __classPrivateFieldSet(this, _BetaMessageStream_ended, true, "f");
2145
- __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, "f").call(this);
2146
- }
2147
- const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event];
2148
- if (listeners) {
2149
- __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
2150
- listeners.forEach(({ listener }) => listener(...args));
2151
- }
2152
- if (event === "abort") {
2153
- const error = args[0];
2154
- if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
2155
- Promise.reject(error);
2156
- }
2157
- __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error);
2158
- __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error);
2159
- this._emit("end");
2160
- return;
2161
- }
2162
- if (event === "error") {
2163
- const error = args[0];
2164
- if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
2165
- Promise.reject(error);
2166
- }
2167
- __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error);
2168
- __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error);
2169
- this._emit("end");
2170
- }
2171
- }
2172
- _emitFinal() {
2173
- const finalMessage = this.receivedMessages.at(-1);
2174
- if (finalMessage) {
2175
- this._emit("finalMessage", __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this));
2176
- }
2177
- }
2178
- async _fromReadableStream(readableStream, options) {
2179
- const signal = options?.signal;
2180
- let abortHandler;
2181
- if (signal) {
2182
- if (signal.aborted)
2183
- this.controller.abort();
2184
- abortHandler = this.controller.abort.bind(this.controller);
2185
- signal.addEventListener("abort", abortHandler);
2186
- }
2187
- try {
2188
- __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this);
2189
- this._connected(null);
2190
- const stream = Stream.fromReadableStream(readableStream, this.controller);
2191
- for await (const event of stream) {
2192
- __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event);
2193
- }
2194
- if (stream.controller.signal?.aborted) {
2195
- throw new APIUserAbortError();
2196
- }
2197
- __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this);
2198
- } finally {
2199
- if (signal && abortHandler) {
2200
- signal.removeEventListener("abort", abortHandler);
2201
- }
2202
- }
2203
- }
2204
- [(_BetaMessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_params = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_listeners = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_ended = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_errored = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_aborted = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_response = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_request_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_logger = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_handleError = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_instances = /* @__PURE__ */ new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage2() {
2205
- if (this.receivedMessages.length === 0) {
2206
- throw new AnthropicError("stream ended without producing a Message with role=assistant");
2207
- }
2208
- return this.receivedMessages.at(-1);
2209
- }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText2() {
2210
- if (this.receivedMessages.length === 0) {
2211
- throw new AnthropicError("stream ended without producing a Message with role=assistant");
2212
- }
2213
- const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text);
2214
- if (textBlocks.length === 0) {
2215
- throw new AnthropicError("stream ended without producing a content block with type=text");
2216
- }
2217
- return textBlocks.join(" ");
2218
- }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest2() {
2219
- if (this.ended)
2220
- return;
2221
- __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f");
2222
- }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent2(event) {
2223
- if (this.ended)
2224
- return;
2225
- const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event);
2226
- this._emit("streamEvent", event, messageSnapshot);
2227
- switch (event.type) {
2228
- case "content_block_delta": {
2229
- const content = messageSnapshot.content.at(-1);
2230
- switch (event.delta.type) {
2231
- case "text_delta": {
2232
- if (content.type === "text") {
2233
- this._emit("text", event.delta.text, content.text || "");
2234
- }
2235
- break;
2236
- }
2237
- case "citations_delta": {
2238
- if (content.type === "text") {
2239
- this._emit("citation", event.delta.citation, content.citations ?? []);
2240
- }
2241
- break;
2242
- }
2243
- case "input_json_delta": {
2244
- if (tracksToolInput(content) && content.input) {
2245
- this._emit("inputJson", event.delta.partial_json, content.input);
2246
- }
2247
- break;
2248
- }
2249
- case "thinking_delta": {
2250
- if (content.type === "thinking") {
2251
- this._emit("thinking", event.delta.thinking, content.thinking);
2252
- }
2253
- break;
2254
- }
2255
- case "signature_delta": {
2256
- if (content.type === "thinking") {
2257
- this._emit("signature", content.signature);
2258
- }
2259
- break;
2260
- }
2261
- case "compaction_delta": {
2262
- if (content.type === "compaction" && content.content) {
2263
- this._emit("compaction", content.content);
2264
- }
2265
- break;
2266
- }
2267
- default:
2268
- checkNever(event.delta);
2269
- }
2270
- break;
2271
- }
2272
- case "message_stop": {
2273
- this._addMessageParam(messageSnapshot);
2274
- this._addMessage(maybeParseBetaMessage(messageSnapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, "f") }), true);
2275
- break;
2276
- }
2277
- case "content_block_stop": {
2278
- this._emit("contentBlock", messageSnapshot.content.at(-1));
2279
- break;
2280
- }
2281
- case "message_start": {
2282
- __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f");
2283
- break;
2284
- }
2285
- case "content_block_start":
2286
- case "message_delta":
2287
- break;
2288
- }
2289
- }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest2() {
2290
- if (this.ended) {
2291
- throw new AnthropicError(`stream has ended, this shouldn't happen`);
2292
- }
2293
- const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f");
2294
- if (!snapshot) {
2295
- throw new AnthropicError(`request ended without sending any chunks`);
2296
- }
2297
- __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f");
2298
- return maybeParseBetaMessage(snapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, "f") });
2299
- }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage2(event) {
2300
- let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f");
2301
- if (event.type === "message_start") {
2302
- if (snapshot) {
2303
- throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
2304
- }
2305
- return event.message;
2306
- }
2307
- if (!snapshot) {
2308
- throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
2309
- }
2310
- switch (event.type) {
2311
- case "message_stop":
2312
- return snapshot;
2313
- case "message_delta":
2314
- snapshot.container = event.delta.container;
2315
- snapshot.stop_reason = event.delta.stop_reason;
2316
- snapshot.stop_sequence = event.delta.stop_sequence;
2317
- snapshot.usage.output_tokens = event.usage.output_tokens;
2318
- snapshot.context_management = event.context_management;
2319
- if (event.usage.input_tokens != null) {
2320
- snapshot.usage.input_tokens = event.usage.input_tokens;
2321
- }
2322
- if (event.usage.cache_creation_input_tokens != null) {
2323
- snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
2324
- }
2325
- if (event.usage.cache_read_input_tokens != null) {
2326
- snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
2327
- }
2328
- if (event.usage.server_tool_use != null) {
2329
- snapshot.usage.server_tool_use = event.usage.server_tool_use;
2330
- }
2331
- if (event.usage.iterations != null) {
2332
- snapshot.usage.iterations = event.usage.iterations;
2333
- }
2334
- return snapshot;
2335
- case "content_block_start":
2336
- snapshot.content.push(event.content_block);
2337
- return snapshot;
2338
- case "content_block_delta": {
2339
- const snapshotContent = snapshot.content.at(event.index);
2340
- switch (event.delta.type) {
2341
- case "text_delta": {
2342
- if (snapshotContent?.type === "text") {
2343
- snapshot.content[event.index] = {
2344
- ...snapshotContent,
2345
- text: (snapshotContent.text || "") + event.delta.text
2346
- };
2347
- }
2348
- break;
2349
- }
2350
- case "citations_delta": {
2351
- if (snapshotContent?.type === "text") {
2352
- snapshot.content[event.index] = {
2353
- ...snapshotContent,
2354
- citations: [...snapshotContent.citations ?? [], event.delta.citation]
2355
- };
2356
- }
2357
- break;
2358
- }
2359
- case "input_json_delta": {
2360
- if (snapshotContent && tracksToolInput(snapshotContent)) {
2361
- let jsonBuf = snapshotContent[JSON_BUF_PROPERTY] || "";
2362
- jsonBuf += event.delta.partial_json;
2363
- const newContent = { ...snapshotContent };
2364
- Object.defineProperty(newContent, JSON_BUF_PROPERTY, {
2365
- value: jsonBuf,
2366
- enumerable: false,
2367
- writable: true
2368
- });
2369
- if (jsonBuf) {
2370
- try {
2371
- newContent.input = partialParse(jsonBuf);
2372
- } catch (err) {
2373
- const error = new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`);
2374
- __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f").call(this, error);
2375
- }
2376
- }
2377
- snapshot.content[event.index] = newContent;
2378
- }
2379
- break;
2380
- }
2381
- case "thinking_delta": {
2382
- if (snapshotContent?.type === "thinking") {
2383
- snapshot.content[event.index] = {
2384
- ...snapshotContent,
2385
- thinking: snapshotContent.thinking + event.delta.thinking
2386
- };
2387
- }
2388
- break;
2389
- }
2390
- case "signature_delta": {
2391
- if (snapshotContent?.type === "thinking") {
2392
- snapshot.content[event.index] = {
2393
- ...snapshotContent,
2394
- signature: event.delta.signature
2395
- };
2396
- }
2397
- break;
2398
- }
2399
- case "compaction_delta": {
2400
- if (snapshotContent?.type === "compaction") {
2401
- snapshot.content[event.index] = {
2402
- ...snapshotContent,
2403
- content: (snapshotContent.content || "") + event.delta.content
2404
- };
2405
- }
2406
- break;
2407
- }
2408
- default:
2409
- checkNever(event.delta);
2410
- }
2411
- return snapshot;
2412
- }
2413
- case "content_block_stop":
2414
- return snapshot;
2415
- }
2416
- }, Symbol.asyncIterator)]() {
2417
- const pushQueue = [];
2418
- const readQueue = [];
2419
- let done = false;
2420
- this.on("streamEvent", (event) => {
2421
- const reader = readQueue.shift();
2422
- if (reader) {
2423
- reader.resolve(event);
2424
- } else {
2425
- pushQueue.push(event);
2426
- }
2427
- });
2428
- this.on("end", () => {
2429
- done = true;
2430
- for (const reader of readQueue) {
2431
- reader.resolve(void 0);
2432
- }
2433
- readQueue.length = 0;
2434
- });
2435
- this.on("abort", (err) => {
2436
- done = true;
2437
- for (const reader of readQueue) {
2438
- reader.reject(err);
2439
- }
2440
- readQueue.length = 0;
2441
- });
2442
- this.on("error", (err) => {
2443
- done = true;
2444
- for (const reader of readQueue) {
2445
- reader.reject(err);
2446
- }
2447
- readQueue.length = 0;
2448
- });
2449
- return {
2450
- next: async () => {
2451
- if (!pushQueue.length) {
2452
- if (done) {
2453
- return { value: void 0, done: true };
2454
- }
2455
- return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true });
2456
- }
2457
- const chunk = pushQueue.shift();
2458
- return { value: chunk, done: false };
2459
- },
2460
- return: async () => {
2461
- this.abort();
2462
- return { value: void 0, done: true };
2463
- }
2464
- };
2465
- }
2466
- toReadableStream() {
2467
- const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);
2468
- return stream.toReadableStream();
2469
- }
2470
- };
2471
- function checkNever(x) {
2472
- }
2473
-
2474
- // node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs
2475
- var ToolError = class extends Error {
2476
- constructor(content) {
2477
- const message = typeof content === "string" ? content : content.map((block) => {
2478
- if (block.type === "text")
2479
- return block.text;
2480
- return `[${block.type}]`;
2481
- }).join(" ");
2482
- super(message);
2483
- this.name = "ToolError";
2484
- this.content = content;
2485
- }
2486
- };
2487
-
2488
- // node_modules/@anthropic-ai/sdk/lib/tools/CompactionControl.mjs
2489
- var DEFAULT_TOKEN_THRESHOLD = 1e5;
2490
- var DEFAULT_SUMMARY_PROMPT = `You have been working on the task described above but have not yet completed it. Write a continuation summary that will allow you (or another instance of yourself) to resume work efficiently in a future context window where the conversation history will be replaced with this summary. Your summary should be structured, concise, and actionable. Include:
2491
- 1. Task Overview
2492
- The user's core request and success criteria
2493
- Any clarifications or constraints they specified
2494
- 2. Current State
2495
- What has been completed so far
2496
- Files created, modified, or analyzed (with paths if relevant)
2497
- Key outputs or artifacts produced
2498
- 3. Important Discoveries
2499
- Technical constraints or requirements uncovered
2500
- Decisions made and their rationale
2501
- Errors encountered and how they were resolved
2502
- What approaches were tried that didn't work (and why)
2503
- 4. Next Steps
2504
- Specific actions needed to complete the task
2505
- Any blockers or open questions to resolve
2506
- Priority order if multiple steps remain
2507
- 5. Context to Preserve
2508
- User preferences or style requirements
2509
- Domain-specific details that aren't obvious
2510
- Any promises made to the user
2511
- Be concise but complete\u2014err on the side of including information that would prevent duplicate work or repeated mistakes. Write in a way that enables immediate resumption of the task.
2512
- Wrap your summary in <summary></summary> tags.`;
2513
-
2514
- // node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs
2515
- var _BetaToolRunner_instances;
2516
- var _BetaToolRunner_consumed;
2517
- var _BetaToolRunner_mutated;
2518
- var _BetaToolRunner_state;
2519
- var _BetaToolRunner_options;
2520
- var _BetaToolRunner_message;
2521
- var _BetaToolRunner_toolResponse;
2522
- var _BetaToolRunner_completion;
2523
- var _BetaToolRunner_iterationCount;
2524
- var _BetaToolRunner_checkAndCompact;
2525
- var _BetaToolRunner_generateToolResponse;
2526
- function promiseWithResolvers() {
2527
- let resolve;
2528
- let reject;
2529
- const promise = new Promise((res, rej) => {
2530
- resolve = res;
2531
- reject = rej;
2532
- });
2533
- return { promise, resolve, reject };
2534
- }
2535
- var BetaToolRunner = class {
2536
- constructor(client, params, options) {
2537
- _BetaToolRunner_instances.add(this);
2538
- this.client = client;
2539
- _BetaToolRunner_consumed.set(this, false);
2540
- _BetaToolRunner_mutated.set(this, false);
2541
- _BetaToolRunner_state.set(this, void 0);
2542
- _BetaToolRunner_options.set(this, void 0);
2543
- _BetaToolRunner_message.set(this, void 0);
2544
- _BetaToolRunner_toolResponse.set(this, void 0);
2545
- _BetaToolRunner_completion.set(this, void 0);
2546
- _BetaToolRunner_iterationCount.set(this, 0);
2547
- __classPrivateFieldSet(this, _BetaToolRunner_state, {
2548
- params: {
2549
- // You can't clone the entire params since there are functions as handlers.
2550
- // You also don't really need to clone params.messages, but it probably will prevent a foot gun
2551
- // somewhere.
2552
- ...params,
2553
- messages: structuredClone(params.messages)
2554
- }
2555
- }, "f");
2556
- const helpers = collectStainlessHelpers(params.tools, params.messages);
2557
- const helperValue = ["BetaToolRunner", ...helpers].join(", ");
2558
- __classPrivateFieldSet(this, _BetaToolRunner_options, {
2559
- ...options,
2560
- headers: buildHeaders([{ "x-stainless-helper": helperValue }, options?.headers])
2561
- }, "f");
2562
- __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
2563
- }
2564
- async *[(_BetaToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_mutated = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_state = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_options = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_message = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolResponse = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_completion = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_iterationCount = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_instances = /* @__PURE__ */ new WeakSet(), _BetaToolRunner_checkAndCompact = async function _BetaToolRunner_checkAndCompact2() {
2565
- const compactionControl = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.compactionControl;
2566
- if (!compactionControl || !compactionControl.enabled) {
2567
- return false;
2568
- }
2569
- let tokensUsed = 0;
2570
- if (__classPrivateFieldGet(this, _BetaToolRunner_message, "f") !== void 0) {
2571
- try {
2572
- const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
2573
- const totalInputTokens = message.usage.input_tokens + (message.usage.cache_creation_input_tokens ?? 0) + (message.usage.cache_read_input_tokens ?? 0);
2574
- tokensUsed = totalInputTokens + message.usage.output_tokens;
2575
- } catch {
2576
- return false;
2577
- }
2578
- }
2579
- const threshold = compactionControl.contextTokenThreshold ?? DEFAULT_TOKEN_THRESHOLD;
2580
- if (tokensUsed < threshold) {
2581
- return false;
2582
- }
2583
- const model = compactionControl.model ?? __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.model;
2584
- const summaryPrompt = compactionControl.summaryPrompt ?? DEFAULT_SUMMARY_PROMPT;
2585
- const messages = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages;
2586
- if (messages[messages.length - 1].role === "assistant") {
2587
- const lastMessage = messages[messages.length - 1];
2588
- if (Array.isArray(lastMessage.content)) {
2589
- const nonToolBlocks = lastMessage.content.filter((block) => block.type !== "tool_use");
2590
- if (nonToolBlocks.length === 0) {
2591
- messages.pop();
2592
- } else {
2593
- lastMessage.content = nonToolBlocks;
2594
- }
2595
- }
2596
- }
2597
- const response = await this.client.beta.messages.create({
2598
- model,
2599
- messages: [
2600
- ...messages,
2601
- {
2602
- role: "user",
2603
- content: [
2604
- {
2605
- type: "text",
2606
- text: summaryPrompt
2607
- }
2608
- ]
2609
- }
2610
- ],
2611
- max_tokens: __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_tokens
2612
- }, {
2613
- headers: { "x-stainless-helper": "compaction" }
2614
- });
2615
- if (response.content[0]?.type !== "text") {
2616
- throw new AnthropicError("Expected text response for compaction");
2617
- }
2618
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [
2619
- {
2620
- role: "user",
2621
- content: response.content
2622
- }
2623
- ];
2624
- return true;
2625
- }, Symbol.asyncIterator)]() {
2626
- var _a2;
2627
- if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
2628
- throw new AnthropicError("Cannot iterate over a consumed stream");
2629
- }
2630
- __classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f");
2631
- __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
2632
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f");
2633
- try {
2634
- while (true) {
2635
- let stream;
2636
- try {
2637
- if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations && __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) {
2638
- break;
2639
- }
2640
- __classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f");
2641
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f");
2642
- __classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a2 = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a2++, _a2), "f");
2643
- __classPrivateFieldSet(this, _BetaToolRunner_message, void 0, "f");
2644
- const { max_iterations, compactionControl, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
2645
- if (params.stream) {
2646
- stream = this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f"));
2647
- __classPrivateFieldSet(this, _BetaToolRunner_message, stream.finalMessage(), "f");
2648
- __classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => {
2649
- });
2650
- yield stream;
2651
- } else {
2652
- __classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f");
2653
- yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
2654
- }
2655
- const isCompacted = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_checkAndCompact).call(this);
2656
- if (!isCompacted) {
2657
- if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
2658
- const { role, content } = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f");
2659
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push({ role, content });
2660
- }
2661
- const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1));
2662
- if (toolMessage) {
2663
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage);
2664
- } else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) {
2665
- break;
2666
- }
2667
- }
2668
- } finally {
2669
- if (stream) {
2670
- stream.abort();
2671
- }
2672
- }
2673
- }
2674
- if (!__classPrivateFieldGet(this, _BetaToolRunner_message, "f")) {
2675
- throw new AnthropicError("ToolRunner concluded without a message from the server");
2676
- }
2677
- __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"));
2678
- } catch (error) {
2679
- __classPrivateFieldSet(this, _BetaToolRunner_consumed, false, "f");
2680
- __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise.catch(() => {
2681
- });
2682
- __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").reject(error);
2683
- __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f");
2684
- throw error;
2685
- }
2686
- }
2687
- setMessagesParams(paramsOrMutator) {
2688
- if (typeof paramsOrMutator === "function") {
2689
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params);
2690
- } else {
2691
- __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = paramsOrMutator;
2692
- }
2693
- __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f");
2694
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f");
2695
- }
2696
- /**
2697
- * Get the tool response for the last message from the assistant.
2698
- * Avoids redundant tool executions by caching results.
2699
- *
2700
- * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed
2701
- *
2702
- * @example
2703
- * const toolResponse = await runner.generateToolResponse();
2704
- * if (toolResponse) {
2705
- * console.log('Tool results:', toolResponse.content);
2706
- * }
2707
- */
2708
- async generateToolResponse() {
2709
- const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f") ?? this.params.messages.at(-1);
2710
- if (!message) {
2711
- return null;
2712
- }
2713
- return __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message);
2714
- }
2715
- /**
2716
- * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and
2717
- * will wait for an instance to start and go to completion.
2718
- *
2719
- * @returns A promise that resolves to the final BetaMessage when the iterator completes
2720
- *
2721
- * @example
2722
- * // Start consuming the iterator
2723
- * for await (const message of runner) {
2724
- * console.log('Message:', message.content);
2725
- * }
2726
- *
2727
- * // Meanwhile, wait for completion from another part of the code
2728
- * const finalMessage = await runner.done();
2729
- * console.log('Final response:', finalMessage.content);
2730
- */
2731
- done() {
2732
- return __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise;
2733
- }
2734
- /**
2735
- * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream:
2736
- * * If the iterator has not been consumed, consume the entire iterator and return the final message from the
2737
- * assistant.
2738
- * * If the iterator has been consumed, waits for it to complete and returns the final message.
2739
- *
2740
- * @returns A promise that resolves to the final BetaMessage from the conversation
2741
- * @throws {AnthropicError} If no messages were processed during the conversation
2742
- *
2743
- * @example
2744
- * const finalMessage = await runner.runUntilDone();
2745
- * console.log('Final response:', finalMessage.content);
2746
- */
2747
- async runUntilDone() {
2748
- if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) {
2749
- for await (const _ of this) {
2750
- }
2751
- }
2752
- return this.done();
2753
- }
2754
- /**
2755
- * Get the current parameters being used by the ToolRunner.
2756
- *
2757
- * @returns A readonly view of the current ToolRunnerParams
2758
- *
2759
- * @example
2760
- * const currentParams = runner.params;
2761
- * console.log('Current model:', currentParams.model);
2762
- * console.log('Message count:', currentParams.messages.length);
2763
- */
2764
- get params() {
2765
- return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params;
2766
- }
2767
- /**
2768
- * Add one or more messages to the conversation history.
2769
- *
2770
- * @param messages - One or more BetaMessageParam objects to add to the conversation
2771
- *
2772
- * @example
2773
- * runner.pushMessages(
2774
- * { role: 'user', content: 'Also, what about the weather in NYC?' }
2775
- * );
2776
- *
2777
- * @example
2778
- * // Adding multiple messages
2779
- * runner.pushMessages(
2780
- * { role: 'user', content: 'What about NYC?' },
2781
- * { role: 'user', content: 'And Boston?' }
2782
- * );
2783
- */
2784
- pushMessages(...messages) {
2785
- this.setMessagesParams((params) => ({
2786
- ...params,
2787
- messages: [...params.messages, ...messages]
2788
- }));
2789
- }
2790
- /**
2791
- * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone()
2792
- * This allows using `await runner` instead of `await runner.runUntilDone()`
2793
- */
2794
- then(onfulfilled, onrejected) {
2795
- return this.runUntilDone().then(onfulfilled, onrejected);
2796
- }
2797
- };
2798
- _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse2(lastMessage) {
2799
- if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f") !== void 0) {
2800
- return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
2801
- }
2802
- __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params, lastMessage), "f");
2803
- return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f");
2804
- };
2805
- async function generateToolResponse(params, lastMessage = params.messages.at(-1)) {
2806
- if (!lastMessage || lastMessage.role !== "assistant" || !lastMessage.content || typeof lastMessage.content === "string") {
2807
- return null;
2808
- }
2809
- const toolUseBlocks = lastMessage.content.filter((content) => content.type === "tool_use");
2810
- if (toolUseBlocks.length === 0) {
2811
- return null;
2812
- }
2813
- const toolResults = await Promise.all(toolUseBlocks.map(async (toolUse) => {
2814
- const tool = params.tools.find((t) => ("name" in t ? t.name : t.mcp_server_name) === toolUse.name);
2815
- if (!tool || !("run" in tool)) {
2816
- return {
2817
- type: "tool_result",
2818
- tool_use_id: toolUse.id,
2819
- content: `Error: Tool '${toolUse.name}' not found`,
2820
- is_error: true
2821
- };
2822
- }
2823
- try {
2824
- let input = toolUse.input;
2825
- if ("parse" in tool && tool.parse) {
2826
- input = tool.parse(input);
2827
- }
2828
- const result = await tool.run(input);
2829
- return {
2830
- type: "tool_result",
2831
- tool_use_id: toolUse.id,
2832
- content: result
2833
- };
2834
- } catch (error) {
2835
- return {
2836
- type: "tool_result",
2837
- tool_use_id: toolUse.id,
2838
- content: error instanceof ToolError ? error.content : `Error: ${error instanceof Error ? error.message : String(error)}`,
2839
- is_error: true
2840
- };
2841
- }
2842
- }));
2843
- return {
2844
- role: "user",
2845
- content: toolResults
2846
- };
2847
- }
2848
-
2849
- // node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs
2850
- var JSONLDecoder = class _JSONLDecoder {
2851
- constructor(iterator, controller) {
2852
- this.iterator = iterator;
2853
- this.controller = controller;
2854
- }
2855
- async *decoder() {
2856
- const lineDecoder = new LineDecoder();
2857
- for await (const chunk of this.iterator) {
2858
- for (const line of lineDecoder.decode(chunk)) {
2859
- yield JSON.parse(line);
2860
- }
2861
- }
2862
- for (const line of lineDecoder.flush()) {
2863
- yield JSON.parse(line);
2864
- }
2865
- }
2866
- [Symbol.asyncIterator]() {
2867
- return this.decoder();
2868
- }
2869
- static fromResponse(response, controller) {
2870
- if (!response.body) {
2871
- controller.abort();
2872
- if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") {
2873
- throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);
2874
- }
2875
- throw new AnthropicError(`Attempted to iterate over a response with no body`);
2876
- }
2877
- return new _JSONLDecoder(ReadableStreamToAsyncIterable(response.body), controller);
2878
- }
2879
- };
2880
-
2881
- // node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs
2882
- var Batches = class extends APIResource {
2883
- /**
2884
- * Send a batch of Message creation requests.
2885
- *
2886
- * The Message Batches API can be used to process multiple Messages API requests at
2887
- * once. Once a Message Batch is created, it begins processing immediately. Batches
2888
- * can take up to 24 hours to complete.
2889
- *
2890
- * Learn more about the Message Batches API in our
2891
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
2892
- *
2893
- * @example
2894
- * ```ts
2895
- * const betaMessageBatch =
2896
- * await client.beta.messages.batches.create({
2897
- * requests: [
2898
- * {
2899
- * custom_id: 'my-custom-id-1',
2900
- * params: {
2901
- * max_tokens: 1024,
2902
- * messages: [
2903
- * { content: 'Hello, world', role: 'user' },
2904
- * ],
2905
- * model: 'claude-opus-4-6',
2906
- * },
2907
- * },
2908
- * ],
2909
- * });
2910
- * ```
2911
- */
2912
- create(params, options) {
2913
- const { betas, ...body } = params;
2914
- return this._client.post("/v1/messages/batches?beta=true", {
2915
- body,
2916
- ...options,
2917
- headers: buildHeaders([
2918
- { "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
2919
- options?.headers
2920
- ])
2921
- });
2922
- }
2923
- /**
2924
- * This endpoint is idempotent and can be used to poll for Message Batch
2925
- * completion. To access the results of a Message Batch, make a request to the
2926
- * `results_url` field in the response.
2927
- *
2928
- * Learn more about the Message Batches API in our
2929
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
2930
- *
2931
- * @example
2932
- * ```ts
2933
- * const betaMessageBatch =
2934
- * await client.beta.messages.batches.retrieve(
2935
- * 'message_batch_id',
2936
- * );
2937
- * ```
2938
- */
2939
- retrieve(messageBatchID, params = {}, options) {
2940
- const { betas } = params ?? {};
2941
- return this._client.get(path`/v1/messages/batches/${messageBatchID}?beta=true`, {
2942
- ...options,
2943
- headers: buildHeaders([
2944
- { "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
2945
- options?.headers
2946
- ])
2947
- });
2948
- }
2949
- /**
2950
- * List all Message Batches within a Workspace. Most recently created batches are
2951
- * returned first.
2952
- *
2953
- * Learn more about the Message Batches API in our
2954
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
2955
- *
2956
- * @example
2957
- * ```ts
2958
- * // Automatically fetches more pages as needed.
2959
- * for await (const betaMessageBatch of client.beta.messages.batches.list()) {
2960
- * // ...
2961
- * }
2962
- * ```
2963
- */
2964
- list(params = {}, options) {
2965
- const { betas, ...query } = params ?? {};
2966
- return this._client.getAPIList("/v1/messages/batches?beta=true", Page, {
2967
- query,
2968
- ...options,
2969
- headers: buildHeaders([
2970
- { "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
2971
- options?.headers
2972
- ])
2973
- });
2974
- }
2975
- /**
2976
- * Delete a Message Batch.
2977
- *
2978
- * Message Batches can only be deleted once they've finished processing. If you'd
2979
- * like to delete an in-progress batch, you must first cancel it.
2980
- *
2981
- * Learn more about the Message Batches API in our
2982
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
2983
- *
2984
- * @example
2985
- * ```ts
2986
- * const betaDeletedMessageBatch =
2987
- * await client.beta.messages.batches.delete(
2988
- * 'message_batch_id',
2989
- * );
2990
- * ```
2991
- */
2992
- delete(messageBatchID, params = {}, options) {
2993
- const { betas } = params ?? {};
2994
- return this._client.delete(path`/v1/messages/batches/${messageBatchID}?beta=true`, {
2995
- ...options,
2996
- headers: buildHeaders([
2997
- { "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
2998
- options?.headers
2999
- ])
3000
- });
3001
- }
3002
- /**
3003
- * Batches may be canceled any time before processing ends. Once cancellation is
3004
- * initiated, the batch enters a `canceling` state, at which time the system may
3005
- * complete any in-progress, non-interruptible requests before finalizing
3006
- * cancellation.
3007
- *
3008
- * The number of canceled requests is specified in `request_counts`. To determine
3009
- * which requests were canceled, check the individual results within the batch.
3010
- * Note that cancellation may not result in any canceled requests if they were
3011
- * non-interruptible.
3012
- *
3013
- * Learn more about the Message Batches API in our
3014
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
3015
- *
3016
- * @example
3017
- * ```ts
3018
- * const betaMessageBatch =
3019
- * await client.beta.messages.batches.cancel(
3020
- * 'message_batch_id',
3021
- * );
3022
- * ```
3023
- */
3024
- cancel(messageBatchID, params = {}, options) {
3025
- const { betas } = params ?? {};
3026
- return this._client.post(path`/v1/messages/batches/${messageBatchID}/cancel?beta=true`, {
3027
- ...options,
3028
- headers: buildHeaders([
3029
- { "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
3030
- options?.headers
3031
- ])
3032
- });
3033
- }
3034
- /**
3035
- * Streams the results of a Message Batch as a `.jsonl` file.
3036
- *
3037
- * Each line in the file is a JSON object containing the result of a single request
3038
- * in the Message Batch. Results are not guaranteed to be in the same order as
3039
- * requests. Use the `custom_id` field to match results to requests.
3040
- *
3041
- * Learn more about the Message Batches API in our
3042
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
3043
- *
3044
- * @example
3045
- * ```ts
3046
- * const betaMessageBatchIndividualResponse =
3047
- * await client.beta.messages.batches.results(
3048
- * 'message_batch_id',
3049
- * );
3050
- * ```
3051
- */
3052
- async results(messageBatchID, params = {}, options) {
3053
- const batch = await this.retrieve(messageBatchID);
3054
- if (!batch.results_url) {
3055
- throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`);
3056
- }
3057
- const { betas } = params ?? {};
3058
- return this._client.get(batch.results_url, {
3059
- ...options,
3060
- headers: buildHeaders([
3061
- {
3062
- "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(),
3063
- Accept: "application/binary"
3064
- },
3065
- options?.headers
3066
- ]),
3067
- stream: true,
3068
- __binaryResponse: true
3069
- })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller));
3070
- }
3071
- };
3072
-
3073
- // node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs
3074
- var DEPRECATED_MODELS = {
3075
- "claude-1.3": "November 6th, 2024",
3076
- "claude-1.3-100k": "November 6th, 2024",
3077
- "claude-instant-1.1": "November 6th, 2024",
3078
- "claude-instant-1.1-100k": "November 6th, 2024",
3079
- "claude-instant-1.2": "November 6th, 2024",
3080
- "claude-3-sonnet-20240229": "July 21st, 2025",
3081
- "claude-3-opus-20240229": "January 5th, 2026",
3082
- "claude-2.1": "July 21st, 2025",
3083
- "claude-2.0": "July 21st, 2025",
3084
- "claude-3-7-sonnet-latest": "February 19th, 2026",
3085
- "claude-3-7-sonnet-20250219": "February 19th, 2026"
3086
- };
3087
- var MODELS_TO_WARN_WITH_THINKING_ENABLED = ["claude-opus-4-6"];
3088
- var Messages = class extends APIResource {
3089
- constructor() {
3090
- super(...arguments);
3091
- this.batches = new Batches(this._client);
3092
- }
3093
- create(params, options) {
3094
- const modifiedParams = transformOutputFormat(params);
3095
- const { betas, ...body } = modifiedParams;
3096
- if (body.model in DEPRECATED_MODELS) {
3097
- console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]}
3098
- Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);
3099
- }
3100
- if (body.model in MODELS_TO_WARN_WITH_THINKING_ENABLED && body.thinking && body.thinking.type === "enabled") {
3101
- console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);
3102
- }
3103
- let timeout = this._client._options.timeout;
3104
- if (!body.stream && timeout == null) {
3105
- const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0;
3106
- timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens);
3107
- }
3108
- const helperHeader = stainlessHelperHeader(body.tools, body.messages);
3109
- return this._client.post("/v1/messages?beta=true", {
3110
- body,
3111
- timeout: timeout ?? 6e5,
3112
- ...options,
3113
- headers: buildHeaders([
3114
- { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 },
3115
- helperHeader,
3116
- options?.headers
3117
- ]),
3118
- stream: modifiedParams.stream ?? false
3119
- });
3120
- }
3121
- /**
3122
- * Send a structured list of input messages with text and/or image content, along with an expected `output_format` and
3123
- * the response will be automatically parsed and available in the `parsed_output` property of the message.
3124
- *
3125
- * @example
3126
- * ```ts
3127
- * const message = await client.beta.messages.parse({
3128
- * model: 'claude-3-5-sonnet-20241022',
3129
- * max_tokens: 1024,
3130
- * messages: [{ role: 'user', content: 'What is 2+2?' }],
3131
- * output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'),
3132
- * });
3133
- *
3134
- * console.log(message.parsed_output?.answer); // 4
3135
- * ```
3136
- */
3137
- parse(params, options) {
3138
- options = {
3139
- ...options,
3140
- headers: buildHeaders([
3141
- { "anthropic-beta": [...params.betas ?? [], "structured-outputs-2025-12-15"].toString() },
3142
- options?.headers
3143
- ])
3144
- };
3145
- return this.create(params, options).then((message) => parseBetaMessage(message, params, { logger: this._client.logger ?? console }));
3146
- }
3147
- /**
3148
- * Create a Message stream
3149
- */
3150
- stream(body, options) {
3151
- return BetaMessageStream.createMessage(this, body, options);
3152
- }
3153
- /**
3154
- * Count the number of tokens in a Message.
3155
- *
3156
- * The Token Count API can be used to count the number of tokens in a Message,
3157
- * including tools, images, and documents, without creating it.
3158
- *
3159
- * Learn more about token counting in our
3160
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/token-counting)
3161
- *
3162
- * @example
3163
- * ```ts
3164
- * const betaMessageTokensCount =
3165
- * await client.beta.messages.countTokens({
3166
- * messages: [{ content: 'string', role: 'user' }],
3167
- * model: 'claude-opus-4-6',
3168
- * });
3169
- * ```
3170
- */
3171
- countTokens(params, options) {
3172
- const modifiedParams = transformOutputFormat(params);
3173
- const { betas, ...body } = modifiedParams;
3174
- return this._client.post("/v1/messages/count_tokens?beta=true", {
3175
- body,
3176
- ...options,
3177
- headers: buildHeaders([
3178
- { "anthropic-beta": [...betas ?? [], "token-counting-2024-11-01"].toString() },
3179
- options?.headers
3180
- ])
3181
- });
3182
- }
3183
- toolRunner(body, options) {
3184
- return new BetaToolRunner(this._client, body, options);
3185
- }
3186
- };
3187
- function transformOutputFormat(params) {
3188
- if (!params.output_format) {
3189
- return params;
3190
- }
3191
- if (params.output_config?.format) {
3192
- throw new AnthropicError("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated).");
3193
- }
3194
- const { output_format, ...rest } = params;
3195
- return {
3196
- ...rest,
3197
- output_config: {
3198
- ...params.output_config,
3199
- format: output_format
3200
- }
3201
- };
3202
- }
3203
- Messages.Batches = Batches;
3204
- Messages.BetaToolRunner = BetaToolRunner;
3205
- Messages.ToolError = ToolError;
3206
-
3207
- // node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs
3208
- var Versions = class extends APIResource {
3209
- /**
3210
- * Create Skill Version
3211
- *
3212
- * @example
3213
- * ```ts
3214
- * const version = await client.beta.skills.versions.create(
3215
- * 'skill_id',
3216
- * );
3217
- * ```
3218
- */
3219
- create(skillID, params = {}, options) {
3220
- const { betas, ...body } = params ?? {};
3221
- return this._client.post(path`/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions({
3222
- body,
3223
- ...options,
3224
- headers: buildHeaders([
3225
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3226
- options?.headers
3227
- ])
3228
- }, this._client));
3229
- }
3230
- /**
3231
- * Get Skill Version
3232
- *
3233
- * @example
3234
- * ```ts
3235
- * const version = await client.beta.skills.versions.retrieve(
3236
- * 'version',
3237
- * { skill_id: 'skill_id' },
3238
- * );
3239
- * ```
3240
- */
3241
- retrieve(version, params, options) {
3242
- const { skill_id, betas } = params;
3243
- return this._client.get(path`/v1/skills/${skill_id}/versions/${version}?beta=true`, {
3244
- ...options,
3245
- headers: buildHeaders([
3246
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3247
- options?.headers
3248
- ])
3249
- });
3250
- }
3251
- /**
3252
- * List Skill Versions
3253
- *
3254
- * @example
3255
- * ```ts
3256
- * // Automatically fetches more pages as needed.
3257
- * for await (const versionListResponse of client.beta.skills.versions.list(
3258
- * 'skill_id',
3259
- * )) {
3260
- * // ...
3261
- * }
3262
- * ```
3263
- */
3264
- list(skillID, params = {}, options) {
3265
- const { betas, ...query } = params ?? {};
3266
- return this._client.getAPIList(path`/v1/skills/${skillID}/versions?beta=true`, PageCursor, {
3267
- query,
3268
- ...options,
3269
- headers: buildHeaders([
3270
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3271
- options?.headers
3272
- ])
3273
- });
3274
- }
3275
- /**
3276
- * Delete Skill Version
3277
- *
3278
- * @example
3279
- * ```ts
3280
- * const version = await client.beta.skills.versions.delete(
3281
- * 'version',
3282
- * { skill_id: 'skill_id' },
3283
- * );
3284
- * ```
3285
- */
3286
- delete(version, params, options) {
3287
- const { skill_id, betas } = params;
3288
- return this._client.delete(path`/v1/skills/${skill_id}/versions/${version}?beta=true`, {
3289
- ...options,
3290
- headers: buildHeaders([
3291
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3292
- options?.headers
3293
- ])
3294
- });
3295
- }
3296
- };
3297
-
3298
- // node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs
3299
- var Skills = class extends APIResource {
3300
- constructor() {
3301
- super(...arguments);
3302
- this.versions = new Versions(this._client);
3303
- }
3304
- /**
3305
- * Create Skill
3306
- *
3307
- * @example
3308
- * ```ts
3309
- * const skill = await client.beta.skills.create();
3310
- * ```
3311
- */
3312
- create(params = {}, options) {
3313
- const { betas, ...body } = params ?? {};
3314
- return this._client.post("/v1/skills?beta=true", multipartFormRequestOptions({
3315
- body,
3316
- ...options,
3317
- headers: buildHeaders([
3318
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3319
- options?.headers
3320
- ])
3321
- }, this._client, false));
3322
- }
3323
- /**
3324
- * Get Skill
3325
- *
3326
- * @example
3327
- * ```ts
3328
- * const skill = await client.beta.skills.retrieve('skill_id');
3329
- * ```
3330
- */
3331
- retrieve(skillID, params = {}, options) {
3332
- const { betas } = params ?? {};
3333
- return this._client.get(path`/v1/skills/${skillID}?beta=true`, {
3334
- ...options,
3335
- headers: buildHeaders([
3336
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3337
- options?.headers
3338
- ])
3339
- });
3340
- }
3341
- /**
3342
- * List Skills
3343
- *
3344
- * @example
3345
- * ```ts
3346
- * // Automatically fetches more pages as needed.
3347
- * for await (const skillListResponse of client.beta.skills.list()) {
3348
- * // ...
3349
- * }
3350
- * ```
3351
- */
3352
- list(params = {}, options) {
3353
- const { betas, ...query } = params ?? {};
3354
- return this._client.getAPIList("/v1/skills?beta=true", PageCursor, {
3355
- query,
3356
- ...options,
3357
- headers: buildHeaders([
3358
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3359
- options?.headers
3360
- ])
3361
- });
3362
- }
3363
- /**
3364
- * Delete Skill
3365
- *
3366
- * @example
3367
- * ```ts
3368
- * const skill = await client.beta.skills.delete('skill_id');
3369
- * ```
3370
- */
3371
- delete(skillID, params = {}, options) {
3372
- const { betas } = params ?? {};
3373
- return this._client.delete(path`/v1/skills/${skillID}?beta=true`, {
3374
- ...options,
3375
- headers: buildHeaders([
3376
- { "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
3377
- options?.headers
3378
- ])
3379
- });
3380
- }
3381
- };
3382
- Skills.Versions = Versions;
3383
-
3384
- // node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs
3385
- var Beta = class extends APIResource {
3386
- constructor() {
3387
- super(...arguments);
3388
- this.models = new Models(this._client);
3389
- this.messages = new Messages(this._client);
3390
- this.files = new Files(this._client);
3391
- this.skills = new Skills(this._client);
3392
- }
3393
- };
3394
- Beta.Models = Models;
3395
- Beta.Messages = Messages;
3396
- Beta.Files = Files;
3397
- Beta.Skills = Skills;
3398
-
3399
- // node_modules/@anthropic-ai/sdk/resources/completions.mjs
3400
- var Completions = class extends APIResource {
3401
- create(params, options) {
3402
- const { betas, ...body } = params;
3403
- return this._client.post("/v1/complete", {
3404
- body,
3405
- timeout: this._client._options.timeout ?? 6e5,
3406
- ...options,
3407
- headers: buildHeaders([
3408
- { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 },
3409
- options?.headers
3410
- ]),
3411
- stream: params.stream ?? false
3412
- });
3413
- }
3414
- };
3415
-
3416
- // node_modules/@anthropic-ai/sdk/lib/parser.mjs
3417
- function getOutputFormat2(params) {
3418
- return params?.output_config?.format;
3419
- }
3420
- function maybeParseMessage(message, params, opts) {
3421
- const outputFormat = getOutputFormat2(params);
3422
- if (!params || !("parse" in (outputFormat ?? {}))) {
3423
- return {
3424
- ...message,
3425
- content: message.content.map((block) => {
3426
- if (block.type === "text") {
3427
- const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", {
3428
- value: null,
3429
- enumerable: false
3430
- });
3431
- return parsedBlock;
3432
- }
3433
- return block;
3434
- }),
3435
- parsed_output: null
3436
- };
3437
- }
3438
- return parseMessage(message, params, opts);
3439
- }
3440
- function parseMessage(message, params, opts) {
3441
- let firstParsedOutput = null;
3442
- const content = message.content.map((block) => {
3443
- if (block.type === "text") {
3444
- const parsedOutput = parseOutputFormat(params, block.text);
3445
- if (firstParsedOutput === null) {
3446
- firstParsedOutput = parsedOutput;
3447
- }
3448
- const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", {
3449
- value: parsedOutput,
3450
- enumerable: false
3451
- });
3452
- return parsedBlock;
3453
- }
3454
- return block;
3455
- });
3456
- return {
3457
- ...message,
3458
- content,
3459
- parsed_output: firstParsedOutput
3460
- };
3461
- }
3462
- function parseOutputFormat(params, content) {
3463
- const outputFormat = getOutputFormat2(params);
3464
- if (outputFormat?.type !== "json_schema") {
3465
- return null;
3466
- }
3467
- try {
3468
- if ("parse" in outputFormat) {
3469
- return outputFormat.parse(content);
3470
- }
3471
- return JSON.parse(content);
3472
- } catch (error) {
3473
- throw new AnthropicError(`Failed to parse structured output: ${error}`);
3474
- }
3475
- }
3476
-
3477
- // node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs
3478
- var _MessageStream_instances;
3479
- var _MessageStream_currentMessageSnapshot;
3480
- var _MessageStream_params;
3481
- var _MessageStream_connectedPromise;
3482
- var _MessageStream_resolveConnectedPromise;
3483
- var _MessageStream_rejectConnectedPromise;
3484
- var _MessageStream_endPromise;
3485
- var _MessageStream_resolveEndPromise;
3486
- var _MessageStream_rejectEndPromise;
3487
- var _MessageStream_listeners;
3488
- var _MessageStream_ended;
3489
- var _MessageStream_errored;
3490
- var _MessageStream_aborted;
3491
- var _MessageStream_catchingPromiseCreated;
3492
- var _MessageStream_response;
3493
- var _MessageStream_request_id;
3494
- var _MessageStream_logger;
3495
- var _MessageStream_getFinalMessage;
3496
- var _MessageStream_getFinalText;
3497
- var _MessageStream_handleError;
3498
- var _MessageStream_beginRequest;
3499
- var _MessageStream_addStreamEvent;
3500
- var _MessageStream_endRequest;
3501
- var _MessageStream_accumulateMessage;
3502
- var JSON_BUF_PROPERTY2 = "__json_buf";
3503
- function tracksToolInput2(content) {
3504
- return content.type === "tool_use" || content.type === "server_tool_use";
3505
- }
3506
- var MessageStream = class _MessageStream {
3507
- constructor(params, opts) {
3508
- _MessageStream_instances.add(this);
3509
- this.messages = [];
3510
- this.receivedMessages = [];
3511
- _MessageStream_currentMessageSnapshot.set(this, void 0);
3512
- _MessageStream_params.set(this, null);
3513
- this.controller = new AbortController();
3514
- _MessageStream_connectedPromise.set(this, void 0);
3515
- _MessageStream_resolveConnectedPromise.set(this, () => {
3516
- });
3517
- _MessageStream_rejectConnectedPromise.set(this, () => {
3518
- });
3519
- _MessageStream_endPromise.set(this, void 0);
3520
- _MessageStream_resolveEndPromise.set(this, () => {
3521
- });
3522
- _MessageStream_rejectEndPromise.set(this, () => {
3523
- });
3524
- _MessageStream_listeners.set(this, {});
3525
- _MessageStream_ended.set(this, false);
3526
- _MessageStream_errored.set(this, false);
3527
- _MessageStream_aborted.set(this, false);
3528
- _MessageStream_catchingPromiseCreated.set(this, false);
3529
- _MessageStream_response.set(this, void 0);
3530
- _MessageStream_request_id.set(this, void 0);
3531
- _MessageStream_logger.set(this, void 0);
3532
- _MessageStream_handleError.set(this, (error) => {
3533
- __classPrivateFieldSet(this, _MessageStream_errored, true, "f");
3534
- if (isAbortError(error)) {
3535
- error = new APIUserAbortError();
3536
- }
3537
- if (error instanceof APIUserAbortError) {
3538
- __classPrivateFieldSet(this, _MessageStream_aborted, true, "f");
3539
- return this._emit("abort", error);
3540
- }
3541
- if (error instanceof AnthropicError) {
3542
- return this._emit("error", error);
3543
- }
3544
- if (error instanceof Error) {
3545
- const anthropicError = new AnthropicError(error.message);
3546
- anthropicError.cause = error;
3547
- return this._emit("error", anthropicError);
3548
- }
3549
- return this._emit("error", new AnthropicError(String(error)));
3550
- });
3551
- __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve, reject) => {
3552
- __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve, "f");
3553
- __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject, "f");
3554
- }), "f");
3555
- __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve, reject) => {
3556
- __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve, "f");
3557
- __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject, "f");
3558
- }), "f");
3559
- __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => {
3560
- });
3561
- __classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => {
3562
- });
3563
- __classPrivateFieldSet(this, _MessageStream_params, params, "f");
3564
- __classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f");
3565
- }
3566
- get response() {
3567
- return __classPrivateFieldGet(this, _MessageStream_response, "f");
3568
- }
3569
- get request_id() {
3570
- return __classPrivateFieldGet(this, _MessageStream_request_id, "f");
3571
- }
3572
- /**
3573
- * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request,
3574
- * returned vie the `request-id` header which is useful for debugging requests and resporting
3575
- * issues to Anthropic.
3576
- *
3577
- * This is the same as the `APIPromise.withResponse()` method.
3578
- *
3579
- * This method will raise an error if you created the stream using `MessageStream.fromReadableStream`
3580
- * as no `Response` is available.
3581
- */
3582
- async withResponse() {
3583
- __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
3584
- const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f");
3585
- if (!response) {
3586
- throw new Error("Could not resolve a `Response` object");
3587
- }
3588
- return {
3589
- data: this,
3590
- response,
3591
- request_id: response.headers.get("request-id")
3592
- };
3593
- }
3594
- /**
3595
- * Intended for use on the frontend, consuming a stream produced with
3596
- * `.toReadableStream()` on the backend.
3597
- *
3598
- * Note that messages sent to the model do not appear in `.on('message')`
3599
- * in this context.
3600
- */
3601
- static fromReadableStream(stream) {
3602
- const runner = new _MessageStream(null);
3603
- runner._run(() => runner._fromReadableStream(stream));
3604
- return runner;
3605
- }
3606
- static createMessage(messages, params, options, { logger } = {}) {
3607
- const runner = new _MessageStream(params, { logger });
3608
- for (const message of params.messages) {
3609
- runner._addMessageParam(message);
3610
- }
3611
- __classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f");
3612
- runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, "X-Stainless-Helper-Method": "stream" } }));
3613
- return runner;
3614
- }
3615
- _run(executor) {
3616
- executor().then(() => {
3617
- this._emitFinal();
3618
- this._emit("end");
3619
- }, __classPrivateFieldGet(this, _MessageStream_handleError, "f"));
3620
- }
3621
- _addMessageParam(message) {
3622
- this.messages.push(message);
3623
- }
3624
- _addMessage(message, emit = true) {
3625
- this.receivedMessages.push(message);
3626
- if (emit) {
3627
- this._emit("message", message);
3628
- }
3629
- }
3630
- async _createMessage(messages, params, options) {
3631
- const signal = options?.signal;
3632
- let abortHandler;
3633
- if (signal) {
3634
- if (signal.aborted)
3635
- this.controller.abort();
3636
- abortHandler = this.controller.abort.bind(this.controller);
3637
- signal.addEventListener("abort", abortHandler);
3638
- }
3639
- try {
3640
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
3641
- const { response, data: stream } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse();
3642
- this._connected(response);
3643
- for await (const event of stream) {
3644
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
3645
- }
3646
- if (stream.controller.signal?.aborted) {
3647
- throw new APIUserAbortError();
3648
- }
3649
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
3650
- } finally {
3651
- if (signal && abortHandler) {
3652
- signal.removeEventListener("abort", abortHandler);
3653
- }
3654
- }
3655
- }
3656
- _connected(response) {
3657
- if (this.ended)
3658
- return;
3659
- __classPrivateFieldSet(this, _MessageStream_response, response, "f");
3660
- __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get("request-id"), "f");
3661
- __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response);
3662
- this._emit("connect");
3663
- }
3664
- get ended() {
3665
- return __classPrivateFieldGet(this, _MessageStream_ended, "f");
3666
- }
3667
- get errored() {
3668
- return __classPrivateFieldGet(this, _MessageStream_errored, "f");
3669
- }
3670
- get aborted() {
3671
- return __classPrivateFieldGet(this, _MessageStream_aborted, "f");
3672
- }
3673
- abort() {
3674
- this.controller.abort();
3675
- }
3676
- /**
3677
- * Adds the listener function to the end of the listeners array for the event.
3678
- * No checks are made to see if the listener has already been added. Multiple calls passing
3679
- * the same combination of event and listener will result in the listener being added, and
3680
- * called, multiple times.
3681
- * @returns this MessageStream, so that calls can be chained
3682
- */
3683
- on(event, listener) {
3684
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
3685
- listeners.push({ listener });
3686
- return this;
3687
- }
3688
- /**
3689
- * Removes the specified listener from the listener array for the event.
3690
- * off() will remove, at most, one instance of a listener from the listener array. If any single
3691
- * listener has been added multiple times to the listener array for the specified event, then
3692
- * off() must be called multiple times to remove each instance.
3693
- * @returns this MessageStream, so that calls can be chained
3694
- */
3695
- off(event, listener) {
3696
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
3697
- if (!listeners)
3698
- return this;
3699
- const index = listeners.findIndex((l) => l.listener === listener);
3700
- if (index >= 0)
3701
- listeners.splice(index, 1);
3702
- return this;
3703
- }
3704
- /**
3705
- * Adds a one-time listener function for the event. The next time the event is triggered,
3706
- * this listener is removed and then invoked.
3707
- * @returns this MessageStream, so that calls can be chained
3708
- */
3709
- once(event, listener) {
3710
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []);
3711
- listeners.push({ listener, once: true });
3712
- return this;
3713
- }
3714
- /**
3715
- * This is similar to `.once()`, but returns a Promise that resolves the next time
3716
- * the event is triggered, instead of calling a listener callback.
3717
- * @returns a Promise that resolves the next time given event is triggered,
3718
- * or rejects if an error is emitted. (If you request the 'error' event,
3719
- * returns a promise that resolves with the error).
3720
- *
3721
- * Example:
3722
- *
3723
- * const message = await stream.emitted('message') // rejects if the stream errors
3724
- */
3725
- emitted(event) {
3726
- return new Promise((resolve, reject) => {
3727
- __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
3728
- if (event !== "error")
3729
- this.once("error", reject);
3730
- this.once(event, resolve);
3731
- });
3732
- }
3733
- async done() {
3734
- __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f");
3735
- await __classPrivateFieldGet(this, _MessageStream_endPromise, "f");
3736
- }
3737
- get currentMessage() {
3738
- return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
3739
- }
3740
- /**
3741
- * @returns a promise that resolves with the the final assistant Message response,
3742
- * or rejects if an error occurred or the stream ended prematurely without producing a Message.
3743
- * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field.
3744
- */
3745
- async finalMessage() {
3746
- await this.done();
3747
- return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this);
3748
- }
3749
- /**
3750
- * @returns a promise that resolves with the the final assistant Message's text response, concatenated
3751
- * together if there are more than one text blocks.
3752
- * Rejects if an error occurred or the stream ended prematurely without producing a Message.
3753
- */
3754
- async finalText() {
3755
- await this.done();
3756
- return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this);
3757
- }
3758
- _emit(event, ...args) {
3759
- if (__classPrivateFieldGet(this, _MessageStream_ended, "f"))
3760
- return;
3761
- if (event === "end") {
3762
- __classPrivateFieldSet(this, _MessageStream_ended, true, "f");
3763
- __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this);
3764
- }
3765
- const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event];
3766
- if (listeners) {
3767
- __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once);
3768
- listeners.forEach(({ listener }) => listener(...args));
3769
- }
3770
- if (event === "abort") {
3771
- const error = args[0];
3772
- if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
3773
- Promise.reject(error);
3774
- }
3775
- __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
3776
- __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
3777
- this._emit("end");
3778
- return;
3779
- }
3780
- if (event === "error") {
3781
- const error = args[0];
3782
- if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) {
3783
- Promise.reject(error);
3784
- }
3785
- __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error);
3786
- __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error);
3787
- this._emit("end");
3788
- }
3789
- }
3790
- _emitFinal() {
3791
- const finalMessage = this.receivedMessages.at(-1);
3792
- if (finalMessage) {
3793
- this._emit("finalMessage", __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this));
3794
- }
3795
- }
3796
- async _fromReadableStream(readableStream, options) {
3797
- const signal = options?.signal;
3798
- let abortHandler;
3799
- if (signal) {
3800
- if (signal.aborted)
3801
- this.controller.abort();
3802
- abortHandler = this.controller.abort.bind(this.controller);
3803
- signal.addEventListener("abort", abortHandler);
3804
- }
3805
- try {
3806
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this);
3807
- this._connected(null);
3808
- const stream = Stream.fromReadableStream(readableStream, this.controller);
3809
- for await (const event of stream) {
3810
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event);
3811
- }
3812
- if (stream.controller.signal?.aborted) {
3813
- throw new APIUserAbortError();
3814
- }
3815
- __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this);
3816
- } finally {
3817
- if (signal && abortHandler) {
3818
- signal.removeEventListener("abort", abortHandler);
3819
- }
3820
- }
3821
- }
3822
- [(_MessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _MessageStream_params = /* @__PURE__ */ new WeakMap(), _MessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_listeners = /* @__PURE__ */ new WeakMap(), _MessageStream_ended = /* @__PURE__ */ new WeakMap(), _MessageStream_errored = /* @__PURE__ */ new WeakMap(), _MessageStream_aborted = /* @__PURE__ */ new WeakMap(), _MessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _MessageStream_response = /* @__PURE__ */ new WeakMap(), _MessageStream_request_id = /* @__PURE__ */ new WeakMap(), _MessageStream_logger = /* @__PURE__ */ new WeakMap(), _MessageStream_handleError = /* @__PURE__ */ new WeakMap(), _MessageStream_instances = /* @__PURE__ */ new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage2() {
3823
- if (this.receivedMessages.length === 0) {
3824
- throw new AnthropicError("stream ended without producing a Message with role=assistant");
3825
- }
3826
- return this.receivedMessages.at(-1);
3827
- }, _MessageStream_getFinalText = function _MessageStream_getFinalText2() {
3828
- if (this.receivedMessages.length === 0) {
3829
- throw new AnthropicError("stream ended without producing a Message with role=assistant");
3830
- }
3831
- const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text);
3832
- if (textBlocks.length === 0) {
3833
- throw new AnthropicError("stream ended without producing a content block with type=text");
3834
- }
3835
- return textBlocks.join(" ");
3836
- }, _MessageStream_beginRequest = function _MessageStream_beginRequest2() {
3837
- if (this.ended)
3838
- return;
3839
- __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, void 0, "f");
3840
- }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent2(event) {
3841
- if (this.ended)
3842
- return;
3843
- const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event);
3844
- this._emit("streamEvent", event, messageSnapshot);
3845
- switch (event.type) {
3846
- case "content_block_delta": {
3847
- const content = messageSnapshot.content.at(-1);
3848
- switch (event.delta.type) {
3849
- case "text_delta": {
3850
- if (content.type === "text") {
3851
- this._emit("text", event.delta.text, content.text || "");
3852
- }
3853
- break;
3854
- }
3855
- case "citations_delta": {
3856
- if (content.type === "text") {
3857
- this._emit("citation", event.delta.citation, content.citations ?? []);
3858
- }
3859
- break;
3860
- }
3861
- case "input_json_delta": {
3862
- if (tracksToolInput2(content) && content.input) {
3863
- this._emit("inputJson", event.delta.partial_json, content.input);
3864
- }
3865
- break;
3866
- }
3867
- case "thinking_delta": {
3868
- if (content.type === "thinking") {
3869
- this._emit("thinking", event.delta.thinking, content.thinking);
3870
- }
3871
- break;
3872
- }
3873
- case "signature_delta": {
3874
- if (content.type === "thinking") {
3875
- this._emit("signature", content.signature);
3876
- }
3877
- break;
3878
- }
3879
- default:
3880
- checkNever2(event.delta);
3881
- }
3882
- break;
3883
- }
3884
- case "message_stop": {
3885
- this._addMessageParam(messageSnapshot);
3886
- this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }), true);
3887
- break;
3888
- }
3889
- case "content_block_stop": {
3890
- this._emit("contentBlock", messageSnapshot.content.at(-1));
3891
- break;
3892
- }
3893
- case "message_start": {
3894
- __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f");
3895
- break;
3896
- }
3897
- case "content_block_start":
3898
- case "message_delta":
3899
- break;
3900
- }
3901
- }, _MessageStream_endRequest = function _MessageStream_endRequest2() {
3902
- if (this.ended) {
3903
- throw new AnthropicError(`stream has ended, this shouldn't happen`);
3904
- }
3905
- const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
3906
- if (!snapshot) {
3907
- throw new AnthropicError(`request ended without sending any chunks`);
3908
- }
3909
- __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, void 0, "f");
3910
- return maybeParseMessage(snapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") });
3911
- }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage2(event) {
3912
- let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f");
3913
- if (event.type === "message_start") {
3914
- if (snapshot) {
3915
- throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`);
3916
- }
3917
- return event.message;
3918
- }
3919
- if (!snapshot) {
3920
- throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`);
3921
- }
3922
- switch (event.type) {
3923
- case "message_stop":
3924
- return snapshot;
3925
- case "message_delta":
3926
- snapshot.stop_reason = event.delta.stop_reason;
3927
- snapshot.stop_sequence = event.delta.stop_sequence;
3928
- snapshot.usage.output_tokens = event.usage.output_tokens;
3929
- if (event.usage.input_tokens != null) {
3930
- snapshot.usage.input_tokens = event.usage.input_tokens;
3931
- }
3932
- if (event.usage.cache_creation_input_tokens != null) {
3933
- snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens;
3934
- }
3935
- if (event.usage.cache_read_input_tokens != null) {
3936
- snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens;
3937
- }
3938
- if (event.usage.server_tool_use != null) {
3939
- snapshot.usage.server_tool_use = event.usage.server_tool_use;
3940
- }
3941
- return snapshot;
3942
- case "content_block_start":
3943
- snapshot.content.push({ ...event.content_block });
3944
- return snapshot;
3945
- case "content_block_delta": {
3946
- const snapshotContent = snapshot.content.at(event.index);
3947
- switch (event.delta.type) {
3948
- case "text_delta": {
3949
- if (snapshotContent?.type === "text") {
3950
- snapshot.content[event.index] = {
3951
- ...snapshotContent,
3952
- text: (snapshotContent.text || "") + event.delta.text
3953
- };
3954
- }
3955
- break;
3956
- }
3957
- case "citations_delta": {
3958
- if (snapshotContent?.type === "text") {
3959
- snapshot.content[event.index] = {
3960
- ...snapshotContent,
3961
- citations: [...snapshotContent.citations ?? [], event.delta.citation]
3962
- };
3963
- }
3964
- break;
3965
- }
3966
- case "input_json_delta": {
3967
- if (snapshotContent && tracksToolInput2(snapshotContent)) {
3968
- let jsonBuf = snapshotContent[JSON_BUF_PROPERTY2] || "";
3969
- jsonBuf += event.delta.partial_json;
3970
- const newContent = { ...snapshotContent };
3971
- Object.defineProperty(newContent, JSON_BUF_PROPERTY2, {
3972
- value: jsonBuf,
3973
- enumerable: false,
3974
- writable: true
3975
- });
3976
- if (jsonBuf) {
3977
- newContent.input = partialParse(jsonBuf);
3978
- }
3979
- snapshot.content[event.index] = newContent;
3980
- }
3981
- break;
3982
- }
3983
- case "thinking_delta": {
3984
- if (snapshotContent?.type === "thinking") {
3985
- snapshot.content[event.index] = {
3986
- ...snapshotContent,
3987
- thinking: snapshotContent.thinking + event.delta.thinking
3988
- };
3989
- }
3990
- break;
3991
- }
3992
- case "signature_delta": {
3993
- if (snapshotContent?.type === "thinking") {
3994
- snapshot.content[event.index] = {
3995
- ...snapshotContent,
3996
- signature: event.delta.signature
3997
- };
3998
- }
3999
- break;
4000
- }
4001
- default:
4002
- checkNever2(event.delta);
4003
- }
4004
- return snapshot;
4005
- }
4006
- case "content_block_stop":
4007
- return snapshot;
4008
- }
4009
- }, Symbol.asyncIterator)]() {
4010
- const pushQueue = [];
4011
- const readQueue = [];
4012
- let done = false;
4013
- this.on("streamEvent", (event) => {
4014
- const reader = readQueue.shift();
4015
- if (reader) {
4016
- reader.resolve(event);
4017
- } else {
4018
- pushQueue.push(event);
4019
- }
4020
- });
4021
- this.on("end", () => {
4022
- done = true;
4023
- for (const reader of readQueue) {
4024
- reader.resolve(void 0);
4025
- }
4026
- readQueue.length = 0;
4027
- });
4028
- this.on("abort", (err) => {
4029
- done = true;
4030
- for (const reader of readQueue) {
4031
- reader.reject(err);
4032
- }
4033
- readQueue.length = 0;
4034
- });
4035
- this.on("error", (err) => {
4036
- done = true;
4037
- for (const reader of readQueue) {
4038
- reader.reject(err);
4039
- }
4040
- readQueue.length = 0;
4041
- });
4042
- return {
4043
- next: async () => {
4044
- if (!pushQueue.length) {
4045
- if (done) {
4046
- return { value: void 0, done: true };
4047
- }
4048
- return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true });
4049
- }
4050
- const chunk = pushQueue.shift();
4051
- return { value: chunk, done: false };
4052
- },
4053
- return: async () => {
4054
- this.abort();
4055
- return { value: void 0, done: true };
4056
- }
4057
- };
4058
- }
4059
- toReadableStream() {
4060
- const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);
4061
- return stream.toReadableStream();
4062
- }
4063
- };
4064
- function checkNever2(x) {
4065
- }
4066
-
4067
- // node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs
4068
- var Batches2 = class extends APIResource {
4069
- /**
4070
- * Send a batch of Message creation requests.
4071
- *
4072
- * The Message Batches API can be used to process multiple Messages API requests at
4073
- * once. Once a Message Batch is created, it begins processing immediately. Batches
4074
- * can take up to 24 hours to complete.
4075
- *
4076
- * Learn more about the Message Batches API in our
4077
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
4078
- *
4079
- * @example
4080
- * ```ts
4081
- * const messageBatch = await client.messages.batches.create({
4082
- * requests: [
4083
- * {
4084
- * custom_id: 'my-custom-id-1',
4085
- * params: {
4086
- * max_tokens: 1024,
4087
- * messages: [
4088
- * { content: 'Hello, world', role: 'user' },
4089
- * ],
4090
- * model: 'claude-opus-4-6',
4091
- * },
4092
- * },
4093
- * ],
4094
- * });
4095
- * ```
4096
- */
4097
- create(body, options) {
4098
- return this._client.post("/v1/messages/batches", { body, ...options });
4099
- }
4100
- /**
4101
- * This endpoint is idempotent and can be used to poll for Message Batch
4102
- * completion. To access the results of a Message Batch, make a request to the
4103
- * `results_url` field in the response.
4104
- *
4105
- * Learn more about the Message Batches API in our
4106
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
4107
- *
4108
- * @example
4109
- * ```ts
4110
- * const messageBatch = await client.messages.batches.retrieve(
4111
- * 'message_batch_id',
4112
- * );
4113
- * ```
4114
- */
4115
- retrieve(messageBatchID, options) {
4116
- return this._client.get(path`/v1/messages/batches/${messageBatchID}`, options);
4117
- }
4118
- /**
4119
- * List all Message Batches within a Workspace. Most recently created batches are
4120
- * returned first.
4121
- *
4122
- * Learn more about the Message Batches API in our
4123
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
4124
- *
4125
- * @example
4126
- * ```ts
4127
- * // Automatically fetches more pages as needed.
4128
- * for await (const messageBatch of client.messages.batches.list()) {
4129
- * // ...
4130
- * }
4131
- * ```
4132
- */
4133
- list(query = {}, options) {
4134
- return this._client.getAPIList("/v1/messages/batches", Page, { query, ...options });
4135
- }
4136
- /**
4137
- * Delete a Message Batch.
4138
- *
4139
- * Message Batches can only be deleted once they've finished processing. If you'd
4140
- * like to delete an in-progress batch, you must first cancel it.
4141
- *
4142
- * Learn more about the Message Batches API in our
4143
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
4144
- *
4145
- * @example
4146
- * ```ts
4147
- * const deletedMessageBatch =
4148
- * await client.messages.batches.delete('message_batch_id');
4149
- * ```
4150
- */
4151
- delete(messageBatchID, options) {
4152
- return this._client.delete(path`/v1/messages/batches/${messageBatchID}`, options);
4153
- }
4154
- /**
4155
- * Batches may be canceled any time before processing ends. Once cancellation is
4156
- * initiated, the batch enters a `canceling` state, at which time the system may
4157
- * complete any in-progress, non-interruptible requests before finalizing
4158
- * cancellation.
4159
- *
4160
- * The number of canceled requests is specified in `request_counts`. To determine
4161
- * which requests were canceled, check the individual results within the batch.
4162
- * Note that cancellation may not result in any canceled requests if they were
4163
- * non-interruptible.
4164
- *
4165
- * Learn more about the Message Batches API in our
4166
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
4167
- *
4168
- * @example
4169
- * ```ts
4170
- * const messageBatch = await client.messages.batches.cancel(
4171
- * 'message_batch_id',
4172
- * );
4173
- * ```
4174
- */
4175
- cancel(messageBatchID, options) {
4176
- return this._client.post(path`/v1/messages/batches/${messageBatchID}/cancel`, options);
4177
- }
4178
- /**
4179
- * Streams the results of a Message Batch as a `.jsonl` file.
4180
- *
4181
- * Each line in the file is a JSON object containing the result of a single request
4182
- * in the Message Batch. Results are not guaranteed to be in the same order as
4183
- * requests. Use the `custom_id` field to match results to requests.
4184
- *
4185
- * Learn more about the Message Batches API in our
4186
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/batch-processing)
4187
- *
4188
- * @example
4189
- * ```ts
4190
- * const messageBatchIndividualResponse =
4191
- * await client.messages.batches.results('message_batch_id');
4192
- * ```
4193
- */
4194
- async results(messageBatchID, options) {
4195
- const batch = await this.retrieve(messageBatchID);
4196
- if (!batch.results_url) {
4197
- throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`);
4198
- }
4199
- return this._client.get(batch.results_url, {
4200
- ...options,
4201
- headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]),
4202
- stream: true,
4203
- __binaryResponse: true
4204
- })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller));
4205
- }
4206
- };
4207
-
4208
- // node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs
4209
- var Messages2 = class extends APIResource {
4210
- constructor() {
4211
- super(...arguments);
4212
- this.batches = new Batches2(this._client);
4213
- }
4214
- create(body, options) {
4215
- if (body.model in DEPRECATED_MODELS2) {
4216
- console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS2[body.model]}
4217
- Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`);
4218
- }
4219
- if (body.model in MODELS_TO_WARN_WITH_THINKING_ENABLED2 && body.thinking && body.thinking.type === "enabled") {
4220
- console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`);
4221
- }
4222
- let timeout = this._client._options.timeout;
4223
- if (!body.stream && timeout == null) {
4224
- const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0;
4225
- timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens);
4226
- }
4227
- const helperHeader = stainlessHelperHeader(body.tools, body.messages);
4228
- return this._client.post("/v1/messages", {
4229
- body,
4230
- timeout: timeout ?? 6e5,
4231
- ...options,
4232
- headers: buildHeaders([helperHeader, options?.headers]),
4233
- stream: body.stream ?? false
4234
- });
4235
- }
4236
- /**
4237
- * Send a structured list of input messages with text and/or image content, along with an expected `output_config.format` and
4238
- * the response will be automatically parsed and available in the `parsed_output` property of the message.
4239
- *
4240
- * @example
4241
- * ```ts
4242
- * const message = await client.messages.parse({
4243
- * model: 'claude-sonnet-4-5-20250929',
4244
- * max_tokens: 1024,
4245
- * messages: [{ role: 'user', content: 'What is 2+2?' }],
4246
- * output_config: {
4247
- * format: zodOutputFormat(z.object({ answer: z.number() })),
4248
- * },
4249
- * });
4250
- *
4251
- * console.log(message.parsed_output?.answer); // 4
4252
- * ```
4253
- */
4254
- parse(params, options) {
4255
- return this.create(params, options).then((message) => parseMessage(message, params, { logger: this._client.logger ?? console }));
4256
- }
4257
- /**
4258
- * Create a Message stream.
4259
- *
4260
- * If `output_config.format` is provided with a parseable format (like `zodOutputFormat()`),
4261
- * the final message will include a `parsed_output` property with the parsed content.
4262
- *
4263
- * @example
4264
- * ```ts
4265
- * const stream = client.messages.stream({
4266
- * model: 'claude-sonnet-4-5-20250929',
4267
- * max_tokens: 1024,
4268
- * messages: [{ role: 'user', content: 'What is 2+2?' }],
4269
- * output_config: {
4270
- * format: zodOutputFormat(z.object({ answer: z.number() })),
4271
- * },
4272
- * });
4273
- *
4274
- * const message = await stream.finalMessage();
4275
- * console.log(message.parsed_output?.answer); // 4
4276
- * ```
4277
- */
4278
- stream(body, options) {
4279
- return MessageStream.createMessage(this, body, options, { logger: this._client.logger ?? console });
4280
- }
4281
- /**
4282
- * Count the number of tokens in a Message.
4283
- *
4284
- * The Token Count API can be used to count the number of tokens in a Message,
4285
- * including tools, images, and documents, without creating it.
4286
- *
4287
- * Learn more about token counting in our
4288
- * [user guide](https://docs.claude.com/en/docs/build-with-claude/token-counting)
4289
- *
4290
- * @example
4291
- * ```ts
4292
- * const messageTokensCount =
4293
- * await client.messages.countTokens({
4294
- * messages: [{ content: 'string', role: 'user' }],
4295
- * model: 'claude-opus-4-6',
4296
- * });
4297
- * ```
4298
- */
4299
- countTokens(body, options) {
4300
- return this._client.post("/v1/messages/count_tokens", { body, ...options });
4301
- }
4302
- };
4303
- var DEPRECATED_MODELS2 = {
4304
- "claude-1.3": "November 6th, 2024",
4305
- "claude-1.3-100k": "November 6th, 2024",
4306
- "claude-instant-1.1": "November 6th, 2024",
4307
- "claude-instant-1.1-100k": "November 6th, 2024",
4308
- "claude-instant-1.2": "November 6th, 2024",
4309
- "claude-3-sonnet-20240229": "July 21st, 2025",
4310
- "claude-3-opus-20240229": "January 5th, 2026",
4311
- "claude-2.1": "July 21st, 2025",
4312
- "claude-2.0": "July 21st, 2025",
4313
- "claude-3-7-sonnet-latest": "February 19th, 2026",
4314
- "claude-3-7-sonnet-20250219": "February 19th, 2026",
4315
- "claude-3-5-haiku-latest": "February 19th, 2026",
4316
- "claude-3-5-haiku-20241022": "February 19th, 2026"
4317
- };
4318
- var MODELS_TO_WARN_WITH_THINKING_ENABLED2 = ["claude-opus-4-6"];
4319
- Messages2.Batches = Batches2;
4320
-
4321
- // node_modules/@anthropic-ai/sdk/resources/models.mjs
4322
- var Models2 = class extends APIResource {
4323
- /**
4324
- * Get a specific model.
4325
- *
4326
- * The Models API response can be used to determine information about a specific
4327
- * model or resolve a model alias to a model ID.
4328
- */
4329
- retrieve(modelID, params = {}, options) {
4330
- const { betas } = params ?? {};
4331
- return this._client.get(path`/v1/models/${modelID}`, {
4332
- ...options,
4333
- headers: buildHeaders([
4334
- { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 },
4335
- options?.headers
4336
- ])
4337
- });
4338
- }
4339
- /**
4340
- * List available models.
4341
- *
4342
- * The Models API response can be used to determine which models are available for
4343
- * use in the API. More recently released models are listed first.
4344
- */
4345
- list(params = {}, options) {
4346
- const { betas, ...query } = params ?? {};
4347
- return this._client.getAPIList("/v1/models", Page, {
4348
- query,
4349
- ...options,
4350
- headers: buildHeaders([
4351
- { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 },
4352
- options?.headers
4353
- ])
4354
- });
4355
- }
4356
- };
4357
-
4358
- // node_modules/@anthropic-ai/sdk/internal/utils/env.mjs
4359
- var readEnv = (env) => {
4360
- if (typeof globalThis.process !== "undefined") {
4361
- return globalThis.process.env?.[env]?.trim() ?? void 0;
4362
- }
4363
- if (typeof globalThis.Deno !== "undefined") {
4364
- return globalThis.Deno.env?.get?.(env)?.trim();
4365
- }
4366
- return void 0;
4367
- };
4368
-
4369
- // node_modules/@anthropic-ai/sdk/client.mjs
4370
- var _BaseAnthropic_instances;
4371
- var _a;
4372
- var _BaseAnthropic_encoder;
4373
- var _BaseAnthropic_baseURLOverridden;
4374
- var HUMAN_PROMPT = "\\n\\nHuman:";
4375
- var AI_PROMPT = "\\n\\nAssistant:";
4376
- var BaseAnthropic = class {
4377
- /**
4378
- * API Client for interfacing with the Anthropic API.
4379
- *
4380
- * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null]
4381
- * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null]
4382
- * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API.
4383
- * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.
4384
- * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.
4385
- * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.
4386
- * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.
4387
- * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.
4388
- * @param {Record<string, string | undefined>} opts.defaultQuery - Default query parameters to include with every request to the API.
4389
- * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.
4390
- */
4391
- constructor({ baseURL = readEnv("ANTHROPIC_BASE_URL"), apiKey = readEnv("ANTHROPIC_API_KEY") ?? null, authToken = readEnv("ANTHROPIC_AUTH_TOKEN") ?? null, ...opts } = {}) {
4392
- _BaseAnthropic_instances.add(this);
4393
- _BaseAnthropic_encoder.set(this, void 0);
4394
- const options = {
4395
- apiKey,
4396
- authToken,
4397
- ...opts,
4398
- baseURL: baseURL || `https://api.anthropic.com`
4399
- };
4400
- if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {
4401
- throw new AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n");
4402
- }
4403
- this.baseURL = options.baseURL;
4404
- this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT;
4405
- this.logger = options.logger ?? console;
4406
- const defaultLogLevel = "warn";
4407
- this.logLevel = defaultLogLevel;
4408
- this.logLevel = parseLogLevel(options.logLevel, "ClientOptions.logLevel", this) ?? parseLogLevel(readEnv("ANTHROPIC_LOG"), "process.env['ANTHROPIC_LOG']", this) ?? defaultLogLevel;
4409
- this.fetchOptions = options.fetchOptions;
4410
- this.maxRetries = options.maxRetries ?? 2;
4411
- this.fetch = options.fetch ?? getDefaultFetch();
4412
- __classPrivateFieldSet(this, _BaseAnthropic_encoder, FallbackEncoder, "f");
4413
- this._options = options;
4414
- this.apiKey = typeof apiKey === "string" ? apiKey : null;
4415
- this.authToken = authToken;
4416
- }
4417
- /**
4418
- * Create a new client instance re-using the same options given to the current client with optional overriding.
4419
- */
4420
- withOptions(options) {
4421
- const client = new this.constructor({
4422
- ...this._options,
4423
- baseURL: this.baseURL,
4424
- maxRetries: this.maxRetries,
4425
- timeout: this.timeout,
4426
- logger: this.logger,
4427
- logLevel: this.logLevel,
4428
- fetch: this.fetch,
4429
- fetchOptions: this.fetchOptions,
4430
- apiKey: this.apiKey,
4431
- authToken: this.authToken,
4432
- ...options
4433
- });
4434
- return client;
4435
- }
4436
- defaultQuery() {
4437
- return this._options.defaultQuery;
4438
- }
4439
- validateHeaders({ values, nulls }) {
4440
- if (values.get("x-api-key") || values.get("authorization")) {
4441
- return;
4442
- }
4443
- if (this.apiKey && values.get("x-api-key")) {
4444
- return;
4445
- }
4446
- if (nulls.has("x-api-key")) {
4447
- return;
4448
- }
4449
- if (this.authToken && values.get("authorization")) {
4450
- return;
4451
- }
4452
- if (nulls.has("authorization")) {
4453
- return;
4454
- }
4455
- throw new Error('Could not resolve authentication method. Expected either apiKey or authToken to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted');
4456
- }
4457
- async authHeaders(opts) {
4458
- return buildHeaders([await this.apiKeyAuth(opts), await this.bearerAuth(opts)]);
4459
- }
4460
- async apiKeyAuth(opts) {
4461
- if (this.apiKey == null) {
4462
- return void 0;
4463
- }
4464
- return buildHeaders([{ "X-Api-Key": this.apiKey }]);
4465
- }
4466
- async bearerAuth(opts) {
4467
- if (this.authToken == null) {
4468
- return void 0;
4469
- }
4470
- return buildHeaders([{ Authorization: `Bearer ${this.authToken}` }]);
4471
- }
4472
- /**
4473
- * Basic re-implementation of `qs.stringify` for primitive types.
4474
- */
4475
- stringifyQuery(query) {
4476
- return Object.entries(query).filter(([_, value]) => typeof value !== "undefined").map(([key, value]) => {
4477
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
4478
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
4479
- }
4480
- if (value === null) {
4481
- return `${encodeURIComponent(key)}=`;
4482
- }
4483
- throw new AnthropicError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`);
4484
- }).join("&");
4485
- }
4486
- getUserAgent() {
4487
- return `${this.constructor.name}/JS ${VERSION}`;
4488
- }
4489
- defaultIdempotencyKey() {
4490
- return `stainless-node-retry-${uuid4()}`;
4491
- }
4492
- makeStatusError(status, error, message, headers) {
4493
- return APIError.generate(status, error, message, headers);
4494
- }
4495
- buildURL(path2, query, defaultBaseURL) {
4496
- const baseURL = !__classPrivateFieldGet(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL;
4497
- const url = isAbsoluteURL(path2) ? new URL(path2) : new URL(baseURL + (baseURL.endsWith("/") && path2.startsWith("/") ? path2.slice(1) : path2));
4498
- const defaultQuery = this.defaultQuery();
4499
- if (!isEmptyObj(defaultQuery)) {
4500
- query = { ...defaultQuery, ...query };
4501
- }
4502
- if (typeof query === "object" && query && !Array.isArray(query)) {
4503
- url.search = this.stringifyQuery(query);
4504
- }
4505
- return url.toString();
4506
- }
4507
- _calculateNonstreamingTimeout(maxTokens) {
4508
- const defaultTimeout = 10 * 60;
4509
- const expectedTimeout = 60 * 60 * maxTokens / 128e3;
4510
- if (expectedTimeout > defaultTimeout) {
4511
- throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details");
4512
- }
4513
- return defaultTimeout * 1e3;
4514
- }
4515
- /**
4516
- * Used as a callback for mutating the given `FinalRequestOptions` object.
4517
- */
4518
- async prepareOptions(options) {
4519
- }
4520
- /**
4521
- * Used as a callback for mutating the given `RequestInit` object.
4522
- *
4523
- * This is useful for cases where you want to add certain headers based off of
4524
- * the request properties, e.g. `method` or `url`.
4525
- */
4526
- async prepareRequest(request, { url, options }) {
4527
- }
4528
- get(path2, opts) {
4529
- return this.methodRequest("get", path2, opts);
4530
- }
4531
- post(path2, opts) {
4532
- return this.methodRequest("post", path2, opts);
4533
- }
4534
- patch(path2, opts) {
4535
- return this.methodRequest("patch", path2, opts);
4536
- }
4537
- put(path2, opts) {
4538
- return this.methodRequest("put", path2, opts);
4539
- }
4540
- delete(path2, opts) {
4541
- return this.methodRequest("delete", path2, opts);
4542
- }
4543
- methodRequest(method, path2, opts) {
4544
- return this.request(Promise.resolve(opts).then((opts2) => {
4545
- return { method, path: path2, ...opts2 };
4546
- }));
4547
- }
4548
- request(options, remainingRetries = null) {
4549
- return new APIPromise(this, this.makeRequest(options, remainingRetries, void 0));
4550
- }
4551
- async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {
4552
- const options = await optionsInput;
4553
- const maxRetries = options.maxRetries ?? this.maxRetries;
4554
- if (retriesRemaining == null) {
4555
- retriesRemaining = maxRetries;
4556
- }
4557
- await this.prepareOptions(options);
4558
- const { req, url, timeout } = await this.buildRequest(options, {
4559
- retryCount: maxRetries - retriesRemaining
4560
- });
4561
- await this.prepareRequest(req, { url, options });
4562
- const requestLogID = "log_" + (Math.random() * (1 << 24) | 0).toString(16).padStart(6, "0");
4563
- const retryLogStr = retryOfRequestLogID === void 0 ? "" : `, retryOf: ${retryOfRequestLogID}`;
4564
- const startTime = Date.now();
4565
- loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({
4566
- retryOfRequestLogID,
4567
- method: options.method,
4568
- url,
4569
- options,
4570
- headers: req.headers
4571
- }));
4572
- if (options.signal?.aborted) {
4573
- throw new APIUserAbortError();
4574
- }
4575
- const controller = new AbortController();
4576
- const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);
4577
- const headersTime = Date.now();
4578
- if (response instanceof globalThis.Error) {
4579
- const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;
4580
- if (options.signal?.aborted) {
4581
- throw new APIUserAbortError();
4582
- }
4583
- const isTimeout = isAbortError(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : ""));
4584
- if (retriesRemaining) {
4585
- loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`);
4586
- loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, formatRequestDetails({
4587
- retryOfRequestLogID,
4588
- url,
4589
- durationMs: headersTime - startTime,
4590
- message: response.message
4591
- }));
4592
- return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);
4593
- }
4594
- loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - error; no more retries left`);
4595
- loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (error; no more retries left)`, formatRequestDetails({
4596
- retryOfRequestLogID,
4597
- url,
4598
- durationMs: headersTime - startTime,
4599
- message: response.message
4600
- }));
4601
- if (isTimeout) {
4602
- throw new APIConnectionTimeoutError();
4603
- }
4604
- throw new APIConnectionError({ cause: response });
4605
- }
4606
- const specialHeaders = [...response.headers.entries()].filter(([name]) => name === "request-id").map(([name, value]) => ", " + name + ": " + JSON.stringify(value)).join("");
4607
- const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? "succeeded" : "failed"} with status ${response.status} in ${headersTime - startTime}ms`;
4608
- if (!response.ok) {
4609
- const shouldRetry = await this.shouldRetry(response);
4610
- if (retriesRemaining && shouldRetry) {
4611
- const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`;
4612
- await CancelReadableStream(response.body);
4613
- loggerFor(this).info(`${responseInfo} - ${retryMessage2}`);
4614
- loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage2})`, formatRequestDetails({
4615
- retryOfRequestLogID,
4616
- url: response.url,
4617
- status: response.status,
4618
- headers: response.headers,
4619
- durationMs: headersTime - startTime
4620
- }));
4621
- return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);
4622
- }
4623
- const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;
4624
- loggerFor(this).info(`${responseInfo} - ${retryMessage}`);
4625
- const errText = await response.text().catch((err2) => castToError(err2).message);
4626
- const errJSON = safeJSON(errText);
4627
- const errMessage = errJSON ? void 0 : errText;
4628
- loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({
4629
- retryOfRequestLogID,
4630
- url: response.url,
4631
- status: response.status,
4632
- headers: response.headers,
4633
- message: errMessage,
4634
- durationMs: Date.now() - startTime
4635
- }));
4636
- const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);
4637
- throw err;
4638
- }
4639
- loggerFor(this).info(responseInfo);
4640
- loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({
4641
- retryOfRequestLogID,
4642
- url: response.url,
4643
- status: response.status,
4644
- headers: response.headers,
4645
- durationMs: headersTime - startTime
4646
- }));
4647
- return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
4648
- }
4649
- getAPIList(path2, Page2, opts) {
4650
- return this.requestAPIList(Page2, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path2, ...opts2 })) : { method: "get", path: path2, ...opts });
4651
- }
4652
- requestAPIList(Page2, options) {
4653
- const request = this.makeRequest(options, null, void 0);
4654
- return new PagePromise(this, request, Page2);
4655
- }
4656
- async fetchWithTimeout(url, init, ms, controller) {
4657
- const { signal, method, ...options } = init || {};
4658
- const abort = this._makeAbort(controller);
4659
- if (signal)
4660
- signal.addEventListener("abort", abort, { once: true });
4661
- const timeout = setTimeout(abort, ms);
4662
- const isReadableBody = globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream || typeof options.body === "object" && options.body !== null && Symbol.asyncIterator in options.body;
4663
- const fetchOptions = {
4664
- signal: controller.signal,
4665
- ...isReadableBody ? { duplex: "half" } : {},
4666
- method: "GET",
4667
- ...options
4668
- };
4669
- if (method) {
4670
- fetchOptions.method = method.toUpperCase();
4671
- }
4672
- try {
4673
- return await this.fetch.call(void 0, url, fetchOptions);
4674
- } finally {
4675
- clearTimeout(timeout);
4676
- }
4677
- }
4678
- async shouldRetry(response) {
4679
- const shouldRetryHeader = response.headers.get("x-should-retry");
4680
- if (shouldRetryHeader === "true")
4681
- return true;
4682
- if (shouldRetryHeader === "false")
4683
- return false;
4684
- if (response.status === 408)
4685
- return true;
4686
- if (response.status === 409)
4687
- return true;
4688
- if (response.status === 429)
4689
- return true;
4690
- if (response.status >= 500)
4691
- return true;
4692
- return false;
4693
- }
4694
- async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {
4695
- let timeoutMillis;
4696
- const retryAfterMillisHeader = responseHeaders?.get("retry-after-ms");
4697
- if (retryAfterMillisHeader) {
4698
- const timeoutMs = parseFloat(retryAfterMillisHeader);
4699
- if (!Number.isNaN(timeoutMs)) {
4700
- timeoutMillis = timeoutMs;
4701
- }
4702
- }
4703
- const retryAfterHeader = responseHeaders?.get("retry-after");
4704
- if (retryAfterHeader && !timeoutMillis) {
4705
- const timeoutSeconds = parseFloat(retryAfterHeader);
4706
- if (!Number.isNaN(timeoutSeconds)) {
4707
- timeoutMillis = timeoutSeconds * 1e3;
4708
- } else {
4709
- timeoutMillis = Date.parse(retryAfterHeader) - Date.now();
4710
- }
4711
- }
4712
- if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1e3)) {
4713
- const maxRetries = options.maxRetries ?? this.maxRetries;
4714
- timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);
4715
- }
4716
- await sleep(timeoutMillis);
4717
- return this.makeRequest(options, retriesRemaining - 1, requestLogID);
4718
- }
4719
- calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {
4720
- const initialRetryDelay = 0.5;
4721
- const maxRetryDelay = 8;
4722
- const numRetries = maxRetries - retriesRemaining;
4723
- const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);
4724
- const jitter = 1 - Math.random() * 0.25;
4725
- return sleepSeconds * jitter * 1e3;
4726
- }
4727
- calculateNonstreamingTimeout(maxTokens, maxNonstreamingTokens) {
4728
- const maxTime = 60 * 60 * 1e3;
4729
- const defaultTime = 60 * 10 * 1e3;
4730
- const expectedTime = maxTime * maxTokens / 128e3;
4731
- if (expectedTime > defaultTime || maxNonstreamingTokens != null && maxTokens > maxNonstreamingTokens) {
4732
- throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details");
4733
- }
4734
- return defaultTime;
4735
- }
4736
- async buildRequest(inputOptions, { retryCount = 0 } = {}) {
4737
- const options = { ...inputOptions };
4738
- const { method, path: path2, query, defaultBaseURL } = options;
4739
- const url = this.buildURL(path2, query, defaultBaseURL);
4740
- if ("timeout" in options)
4741
- validatePositiveInteger("timeout", options.timeout);
4742
- options.timeout = options.timeout ?? this.timeout;
4743
- const { bodyHeaders, body } = this.buildBody({ options });
4744
- const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });
4745
- const req = {
4746
- method,
4747
- headers: reqHeaders,
4748
- ...options.signal && { signal: options.signal },
4749
- ...globalThis.ReadableStream && body instanceof globalThis.ReadableStream && { duplex: "half" },
4750
- ...body && { body },
4751
- ...this.fetchOptions ?? {},
4752
- ...options.fetchOptions ?? {}
4753
- };
4754
- return { req, url, timeout: options.timeout };
4755
- }
4756
- async buildHeaders({ options, method, bodyHeaders, retryCount }) {
4757
- let idempotencyHeaders = {};
4758
- if (this.idempotencyHeader && method !== "get") {
4759
- if (!options.idempotencyKey)
4760
- options.idempotencyKey = this.defaultIdempotencyKey();
4761
- idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;
4762
- }
4763
- const headers = buildHeaders([
4764
- idempotencyHeaders,
4765
- {
4766
- Accept: "application/json",
4767
- "User-Agent": this.getUserAgent(),
4768
- "X-Stainless-Retry-Count": String(retryCount),
4769
- ...options.timeout ? { "X-Stainless-Timeout": String(Math.trunc(options.timeout / 1e3)) } : {},
4770
- ...getPlatformHeaders(),
4771
- ...this._options.dangerouslyAllowBrowser ? { "anthropic-dangerous-direct-browser-access": "true" } : void 0,
4772
- "anthropic-version": "2023-06-01"
4773
- },
4774
- await this.authHeaders(options),
4775
- this._options.defaultHeaders,
4776
- bodyHeaders,
4777
- options.headers
4778
- ]);
4779
- this.validateHeaders(headers);
4780
- return headers.values;
4781
- }
4782
- _makeAbort(controller) {
4783
- return () => controller.abort();
4784
- }
4785
- buildBody({ options: { body, headers: rawHeaders } }) {
4786
- if (!body) {
4787
- return { bodyHeaders: void 0, body: void 0 };
4788
- }
4789
- const headers = buildHeaders([rawHeaders]);
4790
- if (
4791
- // Pass raw type verbatim
4792
- ArrayBuffer.isView(body) || body instanceof ArrayBuffer || body instanceof DataView || typeof body === "string" && // Preserve legacy string encoding behavior for now
4793
- headers.values.has("content-type") || // `Blob` is superset of `File`
4794
- globalThis.Blob && body instanceof globalThis.Blob || // `FormData` -> `multipart/form-data`
4795
- body instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded`
4796
- body instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`)
4797
- globalThis.ReadableStream && body instanceof globalThis.ReadableStream
4798
- ) {
4799
- return { bodyHeaders: void 0, body };
4800
- } else if (typeof body === "object" && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function")) {
4801
- return { bodyHeaders: void 0, body: ReadableStreamFrom(body) };
4802
- } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") {
4803
- return {
4804
- bodyHeaders: { "content-type": "application/x-www-form-urlencoded" },
4805
- body: this.stringifyQuery(body)
4806
- };
4807
- } else {
4808
- return __classPrivateFieldGet(this, _BaseAnthropic_encoder, "f").call(this, { body, headers });
4809
- }
4810
- }
4811
- };
4812
- _a = BaseAnthropic, _BaseAnthropic_encoder = /* @__PURE__ */ new WeakMap(), _BaseAnthropic_instances = /* @__PURE__ */ new WeakSet(), _BaseAnthropic_baseURLOverridden = function _BaseAnthropic_baseURLOverridden2() {
4813
- return this.baseURL !== "https://api.anthropic.com";
4814
- };
4815
- BaseAnthropic.Anthropic = _a;
4816
- BaseAnthropic.HUMAN_PROMPT = HUMAN_PROMPT;
4817
- BaseAnthropic.AI_PROMPT = AI_PROMPT;
4818
- BaseAnthropic.DEFAULT_TIMEOUT = 6e5;
4819
- BaseAnthropic.AnthropicError = AnthropicError;
4820
- BaseAnthropic.APIError = APIError;
4821
- BaseAnthropic.APIConnectionError = APIConnectionError;
4822
- BaseAnthropic.APIConnectionTimeoutError = APIConnectionTimeoutError;
4823
- BaseAnthropic.APIUserAbortError = APIUserAbortError;
4824
- BaseAnthropic.NotFoundError = NotFoundError;
4825
- BaseAnthropic.ConflictError = ConflictError;
4826
- BaseAnthropic.RateLimitError = RateLimitError;
4827
- BaseAnthropic.BadRequestError = BadRequestError;
4828
- BaseAnthropic.AuthenticationError = AuthenticationError;
4829
- BaseAnthropic.InternalServerError = InternalServerError;
4830
- BaseAnthropic.PermissionDeniedError = PermissionDeniedError;
4831
- BaseAnthropic.UnprocessableEntityError = UnprocessableEntityError;
4832
- BaseAnthropic.toFile = toFile;
4833
- var Anthropic = class extends BaseAnthropic {
4834
- constructor() {
4835
- super(...arguments);
4836
- this.completions = new Completions(this);
4837
- this.messages = new Messages2(this);
4838
- this.models = new Models2(this);
4839
- this.beta = new Beta(this);
4840
- }
4841
- };
4842
- Anthropic.Completions = Completions;
4843
- Anthropic.Messages = Messages2;
4844
- Anthropic.Models = Models2;
4845
- Anthropic.Beta = Beta;
4846
- export {
4847
- AI_PROMPT,
4848
- APIConnectionError,
4849
- APIConnectionTimeoutError,
4850
- APIError,
4851
- APIPromise,
4852
- APIUserAbortError,
4853
- Anthropic,
4854
- AnthropicError,
4855
- AuthenticationError,
4856
- BadRequestError,
4857
- BaseAnthropic,
4858
- ConflictError,
4859
- HUMAN_PROMPT,
4860
- InternalServerError,
4861
- NotFoundError,
4862
- PagePromise,
4863
- PermissionDeniedError,
4864
- RateLimitError,
4865
- UnprocessableEntityError,
4866
- Anthropic as default,
4867
- toFile
4868
- };
4869
- //# sourceMappingURL=sdk-QSTAREST.js.map