braintrust 3.6.0 → 3.7.1

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 (33) hide show
  1. package/dev/dist/index.js +2692 -1472
  2. package/dev/dist/index.mjs +2616 -1396
  3. package/dist/auto-instrumentations/bundler/esbuild.cjs +46 -21
  4. package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
  5. package/dist/auto-instrumentations/bundler/rollup.cjs +46 -21
  6. package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
  7. package/dist/auto-instrumentations/bundler/vite.cjs +46 -21
  8. package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
  9. package/dist/auto-instrumentations/bundler/webpack-loader.cjs +952 -0
  10. package/dist/auto-instrumentations/bundler/webpack-loader.d.ts +53 -0
  11. package/dist/auto-instrumentations/bundler/webpack.cjs +46 -21
  12. package/dist/auto-instrumentations/bundler/webpack.mjs +2 -2
  13. package/dist/auto-instrumentations/{chunk-WOUC73KB.mjs → chunk-NY4CGTN6.mjs} +1 -1
  14. package/dist/auto-instrumentations/{chunk-F7WAXFNM.mjs → chunk-YCKND42U.mjs} +46 -21
  15. package/dist/auto-instrumentations/hook.mjs +77 -26
  16. package/dist/auto-instrumentations/index.cjs +46 -21
  17. package/dist/auto-instrumentations/index.mjs +1 -1
  18. package/dist/browser.d.mts +8 -30
  19. package/dist/browser.d.ts +8 -30
  20. package/dist/browser.js +5051 -6344
  21. package/dist/browser.mjs +5051 -6344
  22. package/dist/cli.js +2622 -1398
  23. package/dist/edge-light.js +9456 -10773
  24. package/dist/edge-light.mjs +9456 -10773
  25. package/dist/index.d.mts +8 -30
  26. package/dist/index.d.ts +8 -30
  27. package/dist/index.js +5078 -6371
  28. package/dist/index.mjs +4870 -6163
  29. package/dist/instrumentation/index.js +2491 -1319
  30. package/dist/instrumentation/index.mjs +2491 -1319
  31. package/dist/workerd.js +9456 -10773
  32. package/dist/workerd.mjs +9456 -10773
  33. package/package.json +6 -2
@@ -0,0 +1,952 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+
25
+ // src/auto-instrumentations/bundler/webpack-loader.ts
26
+ var import_code_transformer = require("@apm-js-collab/code-transformer");
27
+ var import_path = require("path");
28
+ var import_fs = require("fs");
29
+ var import_module_details_from_path = __toESM(require("module-details-from-path"));
30
+
31
+ // src/isomorph.ts
32
+ var DefaultAsyncLocalStorage = class {
33
+ constructor() {
34
+ }
35
+ enterWith(_) {
36
+ }
37
+ run(_, callback) {
38
+ return callback();
39
+ }
40
+ getStore() {
41
+ return void 0;
42
+ }
43
+ };
44
+ var DefaultChannel = class {
45
+ constructor(name) {
46
+ this.name = name;
47
+ }
48
+ hasSubscribers = false;
49
+ subscribe(_subscription) {
50
+ }
51
+ unsubscribe(_subscription) {
52
+ return false;
53
+ }
54
+ bindStore(_store, _transform) {
55
+ }
56
+ unbindStore(_store) {
57
+ return false;
58
+ }
59
+ publish(_message) {
60
+ }
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ runStores(_message, fn, thisArg, ...args) {
63
+ return fn.apply(thisArg, args);
64
+ }
65
+ };
66
+ var DefaultTracingChannel = class {
67
+ start;
68
+ end;
69
+ asyncStart;
70
+ asyncEnd;
71
+ error;
72
+ constructor(nameOrChannels) {
73
+ if (typeof nameOrChannels === "string") {
74
+ this.start = new DefaultChannel(`tracing:${nameOrChannels}:start`);
75
+ this.end = new DefaultChannel(`tracing:${nameOrChannels}:end`);
76
+ this.asyncStart = new DefaultChannel(
77
+ `tracing:${nameOrChannels}:asyncStart`
78
+ );
79
+ this.asyncEnd = new DefaultChannel(`tracing:${nameOrChannels}:asyncEnd`);
80
+ this.error = new DefaultChannel(`tracing:${nameOrChannels}:error`);
81
+ return;
82
+ }
83
+ this.start = nameOrChannels.start ?? new DefaultChannel("tracing:start");
84
+ this.end = nameOrChannels.end ?? new DefaultChannel("tracing:end");
85
+ this.asyncStart = nameOrChannels.asyncStart ?? new DefaultChannel("tracing:asyncStart");
86
+ this.asyncEnd = nameOrChannels.asyncEnd ?? new DefaultChannel("tracing:asyncEnd");
87
+ this.error = nameOrChannels.error ?? new DefaultChannel("tracing:error");
88
+ }
89
+ get hasSubscribers() {
90
+ return this.start.hasSubscribers || this.end.hasSubscribers || this.asyncStart.hasSubscribers || this.asyncEnd.hasSubscribers || this.error.hasSubscribers;
91
+ }
92
+ subscribe(_handlers) {
93
+ }
94
+ unsubscribe(_handlers) {
95
+ return false;
96
+ }
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ traceSync(fn, _message, thisArg, ...args) {
99
+ return fn.apply(thisArg, args);
100
+ }
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ tracePromise(fn, _message, thisArg, ...args) {
103
+ return fn.apply(thisArg, args);
104
+ }
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ traceCallback(fn, _position, _message, thisArg, ...args) {
107
+ return fn.apply(thisArg, args);
108
+ }
109
+ };
110
+ var iso = {
111
+ buildType: "unknown",
112
+ // Will be set by configureBrowser() or configureNode()
113
+ getRepoInfo: async (_settings) => void 0,
114
+ getPastNAncestors: async () => [],
115
+ getEnv: (_name) => void 0,
116
+ getCallerLocation: () => void 0,
117
+ newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
118
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
119
+ newTracingChannel: (nameOrChannels) => new DefaultTracingChannel(nameOrChannels),
120
+ processOn: (_0, _1) => {
121
+ },
122
+ basename: (filepath) => filepath.split(/[\\/]/).pop() || filepath,
123
+ // eslint-disable-next-line no-restricted-properties -- preserving intentional console usage.
124
+ writeln: (text) => console.log(text)
125
+ };
126
+ var isomorph_default = iso;
127
+
128
+ // src/instrumentation/core/channel-definitions.ts
129
+ function channel(spec) {
130
+ return spec;
131
+ }
132
+ function defineChannels(pkg, channels) {
133
+ return Object.fromEntries(
134
+ Object.entries(channels).map(([key, spec]) => {
135
+ const fullChannelName = `orchestrion:${pkg}:${spec.channelName}`;
136
+ if (spec.kind === "async") {
137
+ const asyncSpec = spec;
138
+ const tracingChannel2 = () => isomorph_default.newTracingChannel(
139
+ fullChannelName
140
+ );
141
+ return [
142
+ key,
143
+ {
144
+ ...asyncSpec,
145
+ tracingChannel: tracingChannel2,
146
+ tracePromise: (fn, context) => tracingChannel2().tracePromise(
147
+ fn,
148
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
149
+ context
150
+ )
151
+ }
152
+ ];
153
+ }
154
+ const syncSpec = spec;
155
+ const tracingChannel = () => isomorph_default.newTracingChannel(
156
+ fullChannelName
157
+ );
158
+ return [
159
+ key,
160
+ {
161
+ ...syncSpec,
162
+ tracingChannel,
163
+ traceSync: (fn, context) => tracingChannel().traceSync(
164
+ fn,
165
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
166
+ context
167
+ )
168
+ }
169
+ ];
170
+ })
171
+ );
172
+ }
173
+
174
+ // src/instrumentation/plugins/openai-channels.ts
175
+ var openAIChannels = defineChannels("openai", {
176
+ chatCompletionsCreate: channel({
177
+ channelName: "chat.completions.create",
178
+ kind: "async"
179
+ }),
180
+ embeddingsCreate: channel({
181
+ channelName: "embeddings.create",
182
+ kind: "async"
183
+ }),
184
+ betaChatCompletionsParse: channel({
185
+ channelName: "beta.chat.completions.parse",
186
+ kind: "async"
187
+ }),
188
+ betaChatCompletionsStream: channel({
189
+ channelName: "beta.chat.completions.stream",
190
+ kind: "sync-stream"
191
+ }),
192
+ moderationsCreate: channel({
193
+ channelName: "moderations.create",
194
+ kind: "async"
195
+ }),
196
+ responsesCreate: channel({
197
+ channelName: "responses.create",
198
+ kind: "async"
199
+ }),
200
+ responsesStream: channel({
201
+ channelName: "responses.stream",
202
+ kind: "sync-stream"
203
+ }),
204
+ responsesParse: channel({
205
+ channelName: "responses.parse",
206
+ kind: "async"
207
+ })
208
+ });
209
+
210
+ // src/auto-instrumentations/configs/openai.ts
211
+ var openaiConfigs = [
212
+ // Chat Completions
213
+ {
214
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
215
+ module: {
216
+ name: "openai",
217
+ versionRange: ">=4.0.0 <5.0.0",
218
+ filePath: "resources/chat/completions.mjs"
219
+ },
220
+ functionQuery: {
221
+ className: "Completions",
222
+ methodName: "create",
223
+ kind: "Async"
224
+ }
225
+ },
226
+ {
227
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
228
+ module: {
229
+ name: "openai",
230
+ versionRange: ">=4.0.0 <5.0.0",
231
+ filePath: "resources/chat/completions/completions.mjs"
232
+ },
233
+ functionQuery: {
234
+ className: "Completions",
235
+ methodName: "create",
236
+ kind: "Async"
237
+ }
238
+ },
239
+ {
240
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
241
+ module: {
242
+ name: "openai",
243
+ versionRange: ">=5.0.0",
244
+ filePath: "resources/chat/completions/completions.mjs"
245
+ },
246
+ functionQuery: {
247
+ className: "Completions",
248
+ methodName: "create",
249
+ kind: "Async"
250
+ }
251
+ },
252
+ // Embeddings
253
+ {
254
+ channelName: openAIChannels.embeddingsCreate.channelName,
255
+ module: {
256
+ name: "openai",
257
+ versionRange: ">=4.0.0",
258
+ filePath: "resources/embeddings.mjs"
259
+ },
260
+ functionQuery: {
261
+ className: "Embeddings",
262
+ methodName: "create",
263
+ kind: "Async"
264
+ }
265
+ },
266
+ // Beta Chat Completions Parse
267
+ {
268
+ channelName: openAIChannels.betaChatCompletionsParse.channelName,
269
+ module: {
270
+ name: "openai",
271
+ versionRange: ">=4.0.0 <5.0.0",
272
+ filePath: "resources/beta/chat/completions.mjs"
273
+ },
274
+ functionQuery: {
275
+ className: "Completions",
276
+ methodName: "parse",
277
+ kind: "Async"
278
+ }
279
+ },
280
+ {
281
+ channelName: openAIChannels.betaChatCompletionsParse.channelName,
282
+ module: {
283
+ name: "openai",
284
+ versionRange: ">=5.0.0",
285
+ filePath: "resources/chat/completions/completions.mjs"
286
+ },
287
+ functionQuery: {
288
+ className: "Completions",
289
+ methodName: "parse",
290
+ kind: "Async"
291
+ }
292
+ },
293
+ // Moderations
294
+ {
295
+ channelName: openAIChannels.moderationsCreate.channelName,
296
+ module: {
297
+ name: "openai",
298
+ versionRange: ">=4.0.0",
299
+ filePath: "resources/moderations.mjs"
300
+ },
301
+ functionQuery: {
302
+ className: "Moderations",
303
+ methodName: "create",
304
+ kind: "Async"
305
+ }
306
+ },
307
+ // Beta Chat Completions Stream
308
+ {
309
+ channelName: openAIChannels.betaChatCompletionsStream.channelName,
310
+ module: {
311
+ name: "openai",
312
+ versionRange: ">=4.0.0 <5.0.0",
313
+ filePath: "resources/beta/chat/completions.mjs"
314
+ },
315
+ functionQuery: {
316
+ className: "Completions",
317
+ methodName: "stream",
318
+ kind: "Sync"
319
+ }
320
+ },
321
+ {
322
+ channelName: openAIChannels.betaChatCompletionsStream.channelName,
323
+ module: {
324
+ name: "openai",
325
+ versionRange: ">=5.0.0",
326
+ filePath: "resources/chat/completions/completions.mjs"
327
+ },
328
+ functionQuery: {
329
+ className: "Completions",
330
+ methodName: "stream",
331
+ kind: "Sync"
332
+ }
333
+ },
334
+ // Responses API (v4.87.0+)
335
+ {
336
+ channelName: openAIChannels.responsesCreate.channelName,
337
+ module: {
338
+ name: "openai",
339
+ versionRange: ">=4.87.0",
340
+ filePath: "resources/responses/responses.mjs"
341
+ },
342
+ functionQuery: {
343
+ className: "Responses",
344
+ methodName: "create",
345
+ kind: "Async"
346
+ }
347
+ },
348
+ {
349
+ channelName: openAIChannels.responsesStream.channelName,
350
+ module: {
351
+ name: "openai",
352
+ versionRange: ">=4.87.0",
353
+ filePath: "resources/responses/responses.mjs"
354
+ },
355
+ functionQuery: {
356
+ className: "Responses",
357
+ methodName: "stream",
358
+ kind: "Sync"
359
+ }
360
+ },
361
+ {
362
+ channelName: openAIChannels.responsesParse.channelName,
363
+ module: {
364
+ name: "openai",
365
+ versionRange: ">=4.87.0",
366
+ filePath: "resources/responses/responses.mjs"
367
+ },
368
+ functionQuery: {
369
+ className: "Responses",
370
+ methodName: "parse",
371
+ kind: "Async"
372
+ }
373
+ }
374
+ ];
375
+
376
+ // src/instrumentation/plugins/anthropic-channels.ts
377
+ var anthropicChannels = defineChannels("@anthropic-ai/sdk", {
378
+ messagesCreate: channel({
379
+ channelName: "messages.create",
380
+ kind: "async"
381
+ }),
382
+ betaMessagesCreate: channel({
383
+ channelName: "beta.messages.create",
384
+ kind: "async"
385
+ })
386
+ });
387
+
388
+ // src/auto-instrumentations/configs/anthropic.ts
389
+ var anthropicConfigs = [
390
+ // Messages API - create in older SDK layouts (supports streaming via stream=true parameter)
391
+ {
392
+ channelName: anthropicChannels.messagesCreate.channelName,
393
+ module: {
394
+ name: "@anthropic-ai/sdk",
395
+ versionRange: ">=0.27.0 <0.39.0",
396
+ filePath: "resources/messages.mjs"
397
+ },
398
+ functionQuery: {
399
+ className: "Messages",
400
+ methodName: "create",
401
+ kind: "Async"
402
+ }
403
+ },
404
+ // Messages API - create (supports streaming via stream=true parameter)
405
+ {
406
+ channelName: anthropicChannels.messagesCreate.channelName,
407
+ module: {
408
+ name: "@anthropic-ai/sdk",
409
+ versionRange: ">=0.39.0",
410
+ filePath: "resources/messages/messages.mjs"
411
+ },
412
+ functionQuery: {
413
+ className: "Messages",
414
+ methodName: "create",
415
+ kind: "Async"
416
+ }
417
+ },
418
+ // Beta Messages API - create (supports streaming via stream=true parameter)
419
+ {
420
+ channelName: anthropicChannels.betaMessagesCreate.channelName,
421
+ module: {
422
+ name: "@anthropic-ai/sdk",
423
+ versionRange: ">=0.39.0",
424
+ filePath: "resources/beta/messages/messages.mjs"
425
+ },
426
+ functionQuery: {
427
+ className: "Messages",
428
+ methodName: "create",
429
+ kind: "Async"
430
+ }
431
+ }
432
+ ];
433
+
434
+ // src/instrumentation/plugins/ai-sdk-channels.ts
435
+ var aiSDKChannels = defineChannels("ai", {
436
+ generateText: channel({
437
+ channelName: "generateText",
438
+ kind: "async"
439
+ }),
440
+ streamText: channel({
441
+ channelName: "streamText",
442
+ kind: "async"
443
+ }),
444
+ generateObject: channel({
445
+ channelName: "generateObject",
446
+ kind: "async"
447
+ }),
448
+ streamObject: channel({
449
+ channelName: "streamObject",
450
+ kind: "async"
451
+ }),
452
+ agentGenerate: channel({
453
+ channelName: "Agent.generate",
454
+ kind: "async"
455
+ }),
456
+ agentStream: channel({
457
+ channelName: "Agent.stream",
458
+ kind: "async"
459
+ }),
460
+ toolLoopAgentGenerate: channel({
461
+ channelName: "ToolLoopAgent.generate",
462
+ kind: "async"
463
+ }),
464
+ toolLoopAgentStream: channel({
465
+ channelName: "ToolLoopAgent.stream",
466
+ kind: "async"
467
+ })
468
+ });
469
+
470
+ // src/auto-instrumentations/configs/ai-sdk.ts
471
+ var aiSDKConfigs = [
472
+ // generateText - async function
473
+ {
474
+ channelName: aiSDKChannels.generateText.channelName,
475
+ module: {
476
+ name: "ai",
477
+ versionRange: ">=3.0.0",
478
+ filePath: "dist/index.mjs"
479
+ },
480
+ functionQuery: {
481
+ functionName: "generateText",
482
+ kind: "Async"
483
+ }
484
+ },
485
+ {
486
+ channelName: aiSDKChannels.generateText.channelName,
487
+ module: {
488
+ name: "ai",
489
+ versionRange: ">=3.0.0",
490
+ filePath: "dist/index.js"
491
+ },
492
+ functionQuery: {
493
+ functionName: "generateText",
494
+ kind: "Async"
495
+ }
496
+ },
497
+ // streamText - function returning stream
498
+ {
499
+ channelName: aiSDKChannels.streamText.channelName,
500
+ module: {
501
+ name: "ai",
502
+ versionRange: ">=3.0.0",
503
+ filePath: "dist/index.mjs"
504
+ },
505
+ functionQuery: {
506
+ functionName: "streamText",
507
+ kind: "Async"
508
+ }
509
+ },
510
+ {
511
+ channelName: aiSDKChannels.streamText.channelName,
512
+ module: {
513
+ name: "ai",
514
+ versionRange: ">=3.0.0",
515
+ filePath: "dist/index.js"
516
+ },
517
+ functionQuery: {
518
+ functionName: "streamText",
519
+ kind: "Async"
520
+ }
521
+ },
522
+ // generateObject - async function
523
+ {
524
+ channelName: aiSDKChannels.generateObject.channelName,
525
+ module: {
526
+ name: "ai",
527
+ versionRange: ">=3.0.0",
528
+ filePath: "dist/index.mjs"
529
+ },
530
+ functionQuery: {
531
+ functionName: "generateObject",
532
+ kind: "Async"
533
+ }
534
+ },
535
+ {
536
+ channelName: aiSDKChannels.generateObject.channelName,
537
+ module: {
538
+ name: "ai",
539
+ versionRange: ">=3.0.0",
540
+ filePath: "dist/index.js"
541
+ },
542
+ functionQuery: {
543
+ functionName: "generateObject",
544
+ kind: "Async"
545
+ }
546
+ },
547
+ // streamObject - function returning stream
548
+ {
549
+ channelName: aiSDKChannels.streamObject.channelName,
550
+ module: {
551
+ name: "ai",
552
+ versionRange: ">=3.0.0",
553
+ filePath: "dist/index.mjs"
554
+ },
555
+ functionQuery: {
556
+ functionName: "streamObject",
557
+ kind: "Async"
558
+ }
559
+ },
560
+ {
561
+ channelName: aiSDKChannels.streamObject.channelName,
562
+ module: {
563
+ name: "ai",
564
+ versionRange: ">=3.0.0",
565
+ filePath: "dist/index.js"
566
+ },
567
+ functionQuery: {
568
+ functionName: "streamObject",
569
+ kind: "Async"
570
+ }
571
+ },
572
+ // Agent.generate - async method (v5 only)
573
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
574
+ // target the first async `generate` method in the file instead of a class name.
575
+ {
576
+ channelName: aiSDKChannels.agentGenerate.channelName,
577
+ module: {
578
+ name: "ai",
579
+ versionRange: ">=5.0.0 <6.0.0",
580
+ filePath: "dist/index.mjs"
581
+ },
582
+ functionQuery: {
583
+ methodName: "generate",
584
+ kind: "Async",
585
+ index: 0
586
+ }
587
+ },
588
+ {
589
+ channelName: aiSDKChannels.agentGenerate.channelName,
590
+ module: {
591
+ name: "ai",
592
+ versionRange: ">=5.0.0 <6.0.0",
593
+ filePath: "dist/index.js"
594
+ },
595
+ functionQuery: {
596
+ methodName: "generate",
597
+ kind: "Async",
598
+ index: 0
599
+ }
600
+ },
601
+ // Agent.stream - async method (v5 only)
602
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
603
+ // target the first async `stream` method in the file instead of a class name.
604
+ {
605
+ channelName: aiSDKChannels.agentStream.channelName,
606
+ module: {
607
+ name: "ai",
608
+ versionRange: ">=5.0.0 <6.0.0",
609
+ filePath: "dist/index.mjs"
610
+ },
611
+ functionQuery: {
612
+ methodName: "stream",
613
+ kind: "Async",
614
+ index: 0
615
+ }
616
+ },
617
+ {
618
+ channelName: aiSDKChannels.agentStream.channelName,
619
+ module: {
620
+ name: "ai",
621
+ versionRange: ">=5.0.0 <6.0.0",
622
+ filePath: "dist/index.js"
623
+ },
624
+ functionQuery: {
625
+ methodName: "stream",
626
+ kind: "Async",
627
+ index: 0
628
+ }
629
+ },
630
+ // ToolLoopAgent.generate - async method (v6 only, Experimental_Agent is an alias)
631
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
632
+ // target the first async `generate` method in the file instead of a class name.
633
+ {
634
+ channelName: aiSDKChannels.toolLoopAgentGenerate.channelName,
635
+ module: {
636
+ name: "ai",
637
+ versionRange: ">=6.0.0 <7.0.0",
638
+ filePath: "dist/index.mjs"
639
+ },
640
+ functionQuery: {
641
+ methodName: "generate",
642
+ kind: "Async",
643
+ index: 0
644
+ }
645
+ },
646
+ {
647
+ channelName: aiSDKChannels.toolLoopAgentGenerate.channelName,
648
+ module: {
649
+ name: "ai",
650
+ versionRange: ">=6.0.0 <7.0.0",
651
+ filePath: "dist/index.js"
652
+ },
653
+ functionQuery: {
654
+ methodName: "generate",
655
+ kind: "Async",
656
+ index: 0
657
+ }
658
+ },
659
+ // ToolLoopAgent.stream - async method (v6 only, Experimental_Agent is an alias)
660
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
661
+ // target the first async `stream` method in the file instead of a class name.
662
+ {
663
+ channelName: aiSDKChannels.toolLoopAgentStream.channelName,
664
+ module: {
665
+ name: "ai",
666
+ versionRange: ">=6.0.0 <7.0.0",
667
+ filePath: "dist/index.mjs"
668
+ },
669
+ functionQuery: {
670
+ methodName: "stream",
671
+ kind: "Async",
672
+ index: 0
673
+ }
674
+ },
675
+ {
676
+ channelName: aiSDKChannels.toolLoopAgentStream.channelName,
677
+ module: {
678
+ name: "ai",
679
+ versionRange: ">=6.0.0 <7.0.0",
680
+ filePath: "dist/index.js"
681
+ },
682
+ functionQuery: {
683
+ methodName: "stream",
684
+ kind: "Async",
685
+ index: 0
686
+ }
687
+ }
688
+ ];
689
+
690
+ // src/instrumentation/plugins/claude-agent-sdk-channels.ts
691
+ var claudeAgentSDKChannels = defineChannels(
692
+ "@anthropic-ai/claude-agent-sdk",
693
+ {
694
+ query: channel({
695
+ channelName: "query",
696
+ kind: "sync-stream"
697
+ })
698
+ }
699
+ );
700
+
701
+ // src/auto-instrumentations/configs/claude-agent-sdk.ts
702
+ var claudeAgentSDKConfigs = [
703
+ // query - Main entry point for agent interactions. The SDK returns an async
704
+ // iterable, but the exported query function itself is synchronous.
705
+ {
706
+ channelName: claudeAgentSDKChannels.query.channelName,
707
+ module: {
708
+ name: "@anthropic-ai/claude-agent-sdk",
709
+ versionRange: ">=0.1.0 <0.2.0",
710
+ filePath: "sdk.mjs"
711
+ },
712
+ functionQuery: {
713
+ functionName: "query",
714
+ kind: "Sync"
715
+ }
716
+ },
717
+ {
718
+ channelName: claudeAgentSDKChannels.query.channelName,
719
+ module: {
720
+ name: "@anthropic-ai/claude-agent-sdk",
721
+ versionRange: ">=0.2.0",
722
+ filePath: "sdk.mjs"
723
+ },
724
+ functionQuery: {
725
+ functionName: "query",
726
+ kind: "Sync",
727
+ isExportAlias: true
728
+ }
729
+ }
730
+ ];
731
+
732
+ // src/instrumentation/plugins/google-genai-channels.ts
733
+ var googleGenAIChannels = defineChannels("@google/genai", {
734
+ generateContent: channel({
735
+ channelName: "models.generateContent",
736
+ kind: "async"
737
+ }),
738
+ generateContentStream: channel({
739
+ channelName: "models.generateContentStream",
740
+ kind: "async"
741
+ })
742
+ });
743
+
744
+ // src/auto-instrumentations/configs/google-genai.ts
745
+ var googleGenAIConfigs = [
746
+ // Models.generateContentInternal - The actual class method (Node.js entry point)
747
+ // Note: generateContent is an arrow function property that calls this internal method
748
+ {
749
+ channelName: googleGenAIChannels.generateContent.channelName,
750
+ module: {
751
+ name: "@google/genai",
752
+ versionRange: ">=1.0.0",
753
+ filePath: "dist/node/index.mjs"
754
+ },
755
+ functionQuery: {
756
+ className: "Models",
757
+ methodName: "generateContentInternal",
758
+ kind: "Async"
759
+ }
760
+ },
761
+ // Models.generateContentStreamInternal - The actual class method (Node.js entry point)
762
+ // Note: generateContentStream is an arrow function property that calls this internal method
763
+ {
764
+ channelName: googleGenAIChannels.generateContentStream.channelName,
765
+ module: {
766
+ name: "@google/genai",
767
+ versionRange: ">=1.0.0",
768
+ filePath: "dist/node/index.mjs"
769
+ },
770
+ functionQuery: {
771
+ className: "Models",
772
+ methodName: "generateContentStreamInternal",
773
+ kind: "Async"
774
+ }
775
+ }
776
+ ];
777
+
778
+ // src/instrumentation/plugins/openrouter-channels.ts
779
+ var openRouterChannels = defineChannels("@openrouter/sdk", {
780
+ chatSend: channel({
781
+ channelName: "chat.send",
782
+ kind: "async"
783
+ }),
784
+ embeddingsGenerate: channel({
785
+ channelName: "embeddings.generate",
786
+ kind: "async"
787
+ }),
788
+ betaResponsesSend: channel({
789
+ channelName: "beta.responses.send",
790
+ kind: "async"
791
+ }),
792
+ callModel: channel({
793
+ channelName: "callModel",
794
+ kind: "sync-stream"
795
+ }),
796
+ callModelTurn: channel({
797
+ channelName: "callModel.turn",
798
+ kind: "async"
799
+ }),
800
+ toolExecute: channel({
801
+ channelName: "tool.execute",
802
+ kind: "async"
803
+ })
804
+ });
805
+
806
+ // src/auto-instrumentations/configs/openrouter.ts
807
+ var openRouterConfigs = [
808
+ {
809
+ channelName: openRouterChannels.chatSend.channelName,
810
+ module: {
811
+ name: "@openrouter/sdk",
812
+ versionRange: ">=0.9.11 <1.0.0",
813
+ filePath: "esm/sdk/chat.js"
814
+ },
815
+ functionQuery: {
816
+ className: "Chat",
817
+ methodName: "send",
818
+ kind: "Async"
819
+ }
820
+ },
821
+ {
822
+ channelName: openRouterChannels.embeddingsGenerate.channelName,
823
+ module: {
824
+ name: "@openrouter/sdk",
825
+ versionRange: ">=0.9.11 <1.0.0",
826
+ filePath: "esm/sdk/embeddings.js"
827
+ },
828
+ functionQuery: {
829
+ className: "Embeddings",
830
+ methodName: "generate",
831
+ kind: "Async"
832
+ }
833
+ },
834
+ {
835
+ channelName: openRouterChannels.betaResponsesSend.channelName,
836
+ module: {
837
+ name: "@openrouter/sdk",
838
+ versionRange: ">=0.9.11 <1.0.0",
839
+ filePath: "esm/sdk/responses.js"
840
+ },
841
+ functionQuery: {
842
+ className: "Responses",
843
+ methodName: "send",
844
+ kind: "Async"
845
+ }
846
+ },
847
+ {
848
+ channelName: openRouterChannels.callModel.channelName,
849
+ module: {
850
+ name: "@openrouter/sdk",
851
+ versionRange: ">=0.9.11 <1.0.0",
852
+ filePath: "esm/sdk/sdk.js"
853
+ },
854
+ functionQuery: {
855
+ className: "OpenRouter",
856
+ methodName: "callModel",
857
+ kind: "Sync"
858
+ }
859
+ }
860
+ ];
861
+
862
+ // src/auto-instrumentations/bundler/webpack-loader.ts
863
+ function getModuleVersion(basedir) {
864
+ try {
865
+ const packageJsonPath = (0, import_path.join)(basedir, "package.json");
866
+ const packageJson = JSON.parse((0, import_fs.readFileSync)(packageJsonPath, "utf8"));
867
+ if (packageJson.version) {
868
+ return packageJson.version;
869
+ }
870
+ } catch (error) {
871
+ }
872
+ return void 0;
873
+ }
874
+ var matcherCache = /* @__PURE__ */ new Map();
875
+ function getMatcher(options) {
876
+ const allInstrumentations = [
877
+ ...openaiConfigs,
878
+ ...anthropicConfigs,
879
+ ...aiSDKConfigs,
880
+ ...claudeAgentSDKConfigs,
881
+ ...googleGenAIConfigs,
882
+ ...openRouterConfigs,
883
+ ...options.instrumentations ?? []
884
+ ];
885
+ const dcModule = options.browser ? "dc-browser" : void 0;
886
+ const configHash = JSON.stringify({ allInstrumentations, dcModule });
887
+ if (matcherCache.has(configHash)) {
888
+ return matcherCache.get(configHash);
889
+ }
890
+ for (const [hash, matcher2] of matcherCache.entries()) {
891
+ if (hash !== configHash) {
892
+ matcher2.free();
893
+ matcherCache.delete(hash);
894
+ }
895
+ }
896
+ const matcher = (0, import_code_transformer.create)(allInstrumentations, dcModule ?? null);
897
+ matcherCache.set(configHash, matcher);
898
+ return matcher;
899
+ }
900
+ process.on("exit", () => {
901
+ for (const matcher of matcherCache.values()) {
902
+ matcher.free();
903
+ }
904
+ matcherCache.clear();
905
+ });
906
+ function codeTransformerLoader(code, inputSourceMap) {
907
+ const callback = this.async();
908
+ const options = this.getOptions() ?? {};
909
+ const resourcePath = this.resourcePath;
910
+ if (!resourcePath) {
911
+ return callback(null, code, inputSourceMap);
912
+ }
913
+ const ext = (0, import_path.extname)(resourcePath);
914
+ let isModule = ext === ".mjs" || ext === ".ts" || ext === ".tsx";
915
+ if (ext === ".js") {
916
+ isModule = code.includes("export ") || code.includes("import ");
917
+ }
918
+ const normalizedForPlatform = resourcePath.split("/").join(import_path.sep);
919
+ const moduleDetails = (0, import_module_details_from_path.default)(normalizedForPlatform);
920
+ if (!moduleDetails) {
921
+ return callback(null, code, inputSourceMap);
922
+ }
923
+ const moduleName = moduleDetails.name;
924
+ const moduleVersion = getModuleVersion(moduleDetails.basedir);
925
+ if (!moduleVersion) {
926
+ return callback(null, code, inputSourceMap);
927
+ }
928
+ const normalizedModulePath = moduleDetails.path.replace(/\\/g, "/");
929
+ const matcher = getMatcher(options);
930
+ const transformer = matcher.getTransformer(
931
+ moduleName,
932
+ moduleVersion,
933
+ normalizedModulePath
934
+ );
935
+ if (!transformer) {
936
+ return callback(null, code, inputSourceMap);
937
+ }
938
+ try {
939
+ const moduleType = isModule ? "esm" : "cjs";
940
+ const result = transformer.transform(code, moduleType);
941
+ callback(null, result.code, result.map ?? void 0);
942
+ } catch (error) {
943
+ console.warn(
944
+ `[code-transformer-loader] Error transforming ${resourcePath}:`,
945
+ error
946
+ );
947
+ callback(null, code, inputSourceMap);
948
+ } finally {
949
+ transformer.free();
950
+ }
951
+ }
952
+ module.exports = codeTransformerLoader;