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