braintrust 3.3.0 → 3.5.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 (60) hide show
  1. package/README.md +52 -67
  2. package/dev/dist/index.d.mts +98 -14
  3. package/dev/dist/index.d.ts +98 -14
  4. package/dev/dist/index.js +2751 -1463
  5. package/dev/dist/index.mjs +2383 -1095
  6. package/dist/auto-instrumentations/bundler/esbuild.cjs +476 -31
  7. package/dist/auto-instrumentations/bundler/esbuild.d.mts +2 -2
  8. package/dist/auto-instrumentations/bundler/esbuild.d.ts +2 -2
  9. package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
  10. package/dist/auto-instrumentations/bundler/rollup.cjs +476 -31
  11. package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
  12. package/dist/auto-instrumentations/bundler/vite.cjs +476 -31
  13. package/dist/auto-instrumentations/bundler/vite.d.mts +2 -2
  14. package/dist/auto-instrumentations/bundler/vite.d.ts +2 -2
  15. package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
  16. package/dist/auto-instrumentations/bundler/webpack.cjs +476 -31
  17. package/dist/auto-instrumentations/bundler/webpack.d.mts +2 -2
  18. package/dist/auto-instrumentations/bundler/webpack.d.ts +2 -2
  19. package/dist/auto-instrumentations/bundler/webpack.mjs +2 -2
  20. package/dist/auto-instrumentations/chunk-DQTPSXJB.mjs +733 -0
  21. package/dist/auto-instrumentations/chunk-EVUKFMHG.mjs +41 -0
  22. package/dist/auto-instrumentations/{chunk-OLOPGWTJ.mjs → chunk-F3TJZ3Z2.mjs} +1 -1
  23. package/dist/auto-instrumentations/chunk-VLEJ5AEK.mjs +41 -0
  24. package/dist/auto-instrumentations/hook.mjs +540 -37
  25. package/dist/auto-instrumentations/index.cjs +476 -31
  26. package/dist/auto-instrumentations/index.d.mts +5 -5
  27. package/dist/auto-instrumentations/index.d.ts +5 -5
  28. package/dist/auto-instrumentations/index.mjs +1 -1
  29. package/dist/auto-instrumentations/loader/cjs-patch.cjs +32 -10
  30. package/dist/auto-instrumentations/loader/cjs-patch.mjs +10 -5
  31. package/dist/auto-instrumentations/loader/esm-hook.mjs +11 -12
  32. package/dist/auto-instrumentations/loader/get-package-version.cjs +28 -8
  33. package/dist/auto-instrumentations/loader/get-package-version.d.mts +2 -1
  34. package/dist/auto-instrumentations/loader/get-package-version.d.ts +2 -1
  35. package/dist/auto-instrumentations/loader/get-package-version.mjs +3 -1
  36. package/dist/browser.d.mts +806 -306
  37. package/dist/browser.d.ts +806 -306
  38. package/dist/browser.js +3235 -2317
  39. package/dist/browser.mjs +3235 -2317
  40. package/dist/cli.js +2672 -1347
  41. package/dist/edge-light.d.mts +1 -1
  42. package/dist/edge-light.d.ts +1 -1
  43. package/dist/edge-light.js +3035 -2087
  44. package/dist/edge-light.mjs +3035 -2087
  45. package/dist/index.d.mts +806 -306
  46. package/dist/index.d.ts +806 -306
  47. package/dist/index.js +3570 -2654
  48. package/dist/index.mjs +3235 -2319
  49. package/dist/instrumentation/index.d.mts +16 -22
  50. package/dist/instrumentation/index.d.ts +16 -22
  51. package/dist/instrumentation/index.js +2241 -1077
  52. package/dist/instrumentation/index.mjs +2241 -1077
  53. package/dist/workerd.d.mts +1 -1
  54. package/dist/workerd.d.ts +1 -1
  55. package/dist/workerd.js +3035 -2087
  56. package/dist/workerd.mjs +3035 -2087
  57. package/package.json +26 -7
  58. package/dist/auto-instrumentations/chunk-KVX7OFPD.mjs +0 -288
  59. package/dist/auto-instrumentations/chunk-XDBPUTVE.mjs +0 -22
  60. package/dist/auto-instrumentations/chunk-ZEC7BCL4.mjs +0 -22
@@ -1,18 +1,197 @@
1
1
  import {
2
+ getPackageName,
2
3
  getPackageVersion
3
- } from "./chunk-ZEC7BCL4.mjs";
4
+ } from "./chunk-EVUKFMHG.mjs";
4
5
 
5
6
  // src/auto-instrumentations/hook.mts
6
- import { register } from "node:module";
7
+ import { register } from "module";
8
+
9
+ // src/isomorph.ts
10
+ var DefaultAsyncLocalStorage = class {
11
+ constructor() {
12
+ }
13
+ enterWith(_) {
14
+ }
15
+ run(_, callback) {
16
+ return callback();
17
+ }
18
+ getStore() {
19
+ return void 0;
20
+ }
21
+ };
22
+ var DefaultChannel = class {
23
+ constructor(name) {
24
+ this.name = name;
25
+ }
26
+ hasSubscribers = false;
27
+ subscribe(_subscription) {
28
+ }
29
+ unsubscribe(_subscription) {
30
+ return false;
31
+ }
32
+ bindStore(_store, _transform) {
33
+ }
34
+ unbindStore(_store) {
35
+ return false;
36
+ }
37
+ publish(_message) {
38
+ }
39
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
+ runStores(_message, fn, thisArg, ...args) {
41
+ return fn.apply(thisArg, args);
42
+ }
43
+ };
44
+ var DefaultTracingChannel = class {
45
+ start;
46
+ end;
47
+ asyncStart;
48
+ asyncEnd;
49
+ error;
50
+ constructor(nameOrChannels) {
51
+ if (typeof nameOrChannels === "string") {
52
+ this.start = new DefaultChannel(`tracing:${nameOrChannels}:start`);
53
+ this.end = new DefaultChannel(`tracing:${nameOrChannels}:end`);
54
+ this.asyncStart = new DefaultChannel(
55
+ `tracing:${nameOrChannels}:asyncStart`
56
+ );
57
+ this.asyncEnd = new DefaultChannel(`tracing:${nameOrChannels}:asyncEnd`);
58
+ this.error = new DefaultChannel(`tracing:${nameOrChannels}:error`);
59
+ return;
60
+ }
61
+ this.start = nameOrChannels.start ?? new DefaultChannel("tracing:start");
62
+ this.end = nameOrChannels.end ?? new DefaultChannel("tracing:end");
63
+ this.asyncStart = nameOrChannels.asyncStart ?? new DefaultChannel("tracing:asyncStart");
64
+ this.asyncEnd = nameOrChannels.asyncEnd ?? new DefaultChannel("tracing:asyncEnd");
65
+ this.error = nameOrChannels.error ?? new DefaultChannel("tracing:error");
66
+ }
67
+ get hasSubscribers() {
68
+ return this.start.hasSubscribers || this.end.hasSubscribers || this.asyncStart.hasSubscribers || this.asyncEnd.hasSubscribers || this.error.hasSubscribers;
69
+ }
70
+ subscribe(_handlers) {
71
+ }
72
+ unsubscribe(_handlers) {
73
+ return false;
74
+ }
75
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ traceSync(fn, _message, thisArg, ...args) {
77
+ return fn.apply(thisArg, args);
78
+ }
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ tracePromise(fn, _message, thisArg, ...args) {
81
+ return Promise.resolve(fn.apply(thisArg, args));
82
+ }
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ traceCallback(fn, _position, _message, thisArg, ...args) {
85
+ return fn.apply(thisArg, args);
86
+ }
87
+ };
88
+ var iso = {
89
+ buildType: "unknown",
90
+ // Will be set by configureBrowser() or configureNode()
91
+ getRepoInfo: async (_settings) => void 0,
92
+ getPastNAncestors: async () => [],
93
+ getEnv: (_name) => void 0,
94
+ getCallerLocation: () => void 0,
95
+ newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
96
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
+ newTracingChannel: (nameOrChannels) => new DefaultTracingChannel(nameOrChannels),
98
+ processOn: (_0, _1) => {
99
+ },
100
+ basename: (filepath) => filepath.split(/[\\/]/).pop() || filepath,
101
+ writeln: (text) => console.log(text)
102
+ };
103
+ var isomorph_default = iso;
104
+
105
+ // src/instrumentation/core/channel-definitions.ts
106
+ function channel(spec) {
107
+ return spec;
108
+ }
109
+ function defineChannels(pkg, channels) {
110
+ return Object.fromEntries(
111
+ Object.entries(channels).map(([key, spec]) => {
112
+ const fullChannelName = `orchestrion:${pkg}:${spec.channelName}`;
113
+ if (spec.kind === "async") {
114
+ const asyncSpec = spec;
115
+ const tracingChannel2 = () => isomorph_default.newTracingChannel(
116
+ fullChannelName
117
+ );
118
+ return [
119
+ key,
120
+ {
121
+ ...asyncSpec,
122
+ tracingChannel: tracingChannel2,
123
+ tracePromise: (fn, context) => tracingChannel2().tracePromise(
124
+ fn,
125
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
126
+ context
127
+ )
128
+ }
129
+ ];
130
+ }
131
+ const syncSpec = spec;
132
+ const tracingChannel = () => isomorph_default.newTracingChannel(
133
+ fullChannelName
134
+ );
135
+ return [
136
+ key,
137
+ {
138
+ ...syncSpec,
139
+ tracingChannel,
140
+ traceSync: (fn, context) => tracingChannel().traceSync(
141
+ fn,
142
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
143
+ context
144
+ )
145
+ }
146
+ ];
147
+ })
148
+ );
149
+ }
150
+
151
+ // src/instrumentation/plugins/openai-channels.ts
152
+ var openAIChannels = defineChannels("openai", {
153
+ chatCompletionsCreate: channel({
154
+ channelName: "chat.completions.create",
155
+ kind: "async"
156
+ }),
157
+ embeddingsCreate: channel({
158
+ channelName: "embeddings.create",
159
+ kind: "async"
160
+ }),
161
+ betaChatCompletionsParse: channel({
162
+ channelName: "beta.chat.completions.parse",
163
+ kind: "async"
164
+ }),
165
+ betaChatCompletionsStream: channel({
166
+ channelName: "beta.chat.completions.stream",
167
+ kind: "sync-stream"
168
+ }),
169
+ moderationsCreate: channel({
170
+ channelName: "moderations.create",
171
+ kind: "async"
172
+ }),
173
+ responsesCreate: channel({
174
+ channelName: "responses.create",
175
+ kind: "async"
176
+ }),
177
+ responsesStream: channel({
178
+ channelName: "responses.stream",
179
+ kind: "sync-stream"
180
+ }),
181
+ responsesParse: channel({
182
+ channelName: "responses.parse",
183
+ kind: "async"
184
+ })
185
+ });
7
186
 
8
187
  // src/auto-instrumentations/configs/openai.ts
9
188
  var openaiConfigs = [
10
189
  // Chat Completions
11
190
  {
12
- channelName: "chat.completions.create",
191
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
13
192
  module: {
14
193
  name: "openai",
15
- versionRange: ">=4.0.0",
194
+ versionRange: ">=4.0.0 <5.0.0",
16
195
  filePath: "resources/chat/completions.mjs"
17
196
  },
18
197
  functionQuery: {
@@ -21,9 +200,35 @@ var openaiConfigs = [
21
200
  kind: "Async"
22
201
  }
23
202
  },
203
+ {
204
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
205
+ module: {
206
+ name: "openai",
207
+ versionRange: ">=4.0.0 <5.0.0",
208
+ filePath: "resources/chat/completions/completions.mjs"
209
+ },
210
+ functionQuery: {
211
+ className: "Completions",
212
+ methodName: "create",
213
+ kind: "Async"
214
+ }
215
+ },
216
+ {
217
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
218
+ module: {
219
+ name: "openai",
220
+ versionRange: ">=5.0.0",
221
+ filePath: "resources/chat/completions/completions.mjs"
222
+ },
223
+ functionQuery: {
224
+ className: "Completions",
225
+ methodName: "create",
226
+ kind: "Async"
227
+ }
228
+ },
24
229
  // Embeddings
25
230
  {
26
- channelName: "embeddings.create",
231
+ channelName: openAIChannels.embeddingsCreate.channelName,
27
232
  module: {
28
233
  name: "openai",
29
234
  versionRange: ">=4.0.0",
@@ -37,10 +242,10 @@ var openaiConfigs = [
37
242
  },
38
243
  // Beta Chat Completions Parse
39
244
  {
40
- channelName: "beta.chat.completions.parse",
245
+ channelName: openAIChannels.betaChatCompletionsParse.channelName,
41
246
  module: {
42
247
  name: "openai",
43
- versionRange: ">=4.0.0",
248
+ versionRange: ">=4.0.0 <5.0.0",
44
249
  filePath: "resources/beta/chat/completions.mjs"
45
250
  },
46
251
  functionQuery: {
@@ -49,9 +254,22 @@ var openaiConfigs = [
49
254
  kind: "Async"
50
255
  }
51
256
  },
257
+ {
258
+ channelName: openAIChannels.betaChatCompletionsParse.channelName,
259
+ module: {
260
+ name: "openai",
261
+ versionRange: ">=5.0.0",
262
+ filePath: "resources/chat/completions/completions.mjs"
263
+ },
264
+ functionQuery: {
265
+ className: "Completions",
266
+ methodName: "parse",
267
+ kind: "Async"
268
+ }
269
+ },
52
270
  // Moderations
53
271
  {
54
- channelName: "moderations.create",
272
+ channelName: openAIChannels.moderationsCreate.channelName,
55
273
  module: {
56
274
  name: "openai",
57
275
  versionRange: ">=4.0.0",
@@ -65,10 +283,10 @@ var openaiConfigs = [
65
283
  },
66
284
  // Beta Chat Completions Stream
67
285
  {
68
- channelName: "beta.chat.completions.stream",
286
+ channelName: openAIChannels.betaChatCompletionsStream.channelName,
69
287
  module: {
70
288
  name: "openai",
71
- versionRange: ">=4.0.0",
289
+ versionRange: ">=4.0.0 <5.0.0",
72
290
  filePath: "resources/beta/chat/completions.mjs"
73
291
  },
74
292
  functionQuery: {
@@ -77,9 +295,22 @@ var openaiConfigs = [
77
295
  kind: "Sync"
78
296
  }
79
297
  },
298
+ {
299
+ channelName: openAIChannels.betaChatCompletionsStream.channelName,
300
+ module: {
301
+ name: "openai",
302
+ versionRange: ">=5.0.0",
303
+ filePath: "resources/chat/completions/completions.mjs"
304
+ },
305
+ functionQuery: {
306
+ className: "Completions",
307
+ methodName: "stream",
308
+ kind: "Sync"
309
+ }
310
+ },
80
311
  // Responses API (v4.87.0+)
81
312
  {
82
- channelName: "responses.create",
313
+ channelName: openAIChannels.responsesCreate.channelName,
83
314
  module: {
84
315
  name: "openai",
85
316
  versionRange: ">=4.87.0",
@@ -92,7 +323,7 @@ var openaiConfigs = [
92
323
  }
93
324
  },
94
325
  {
95
- channelName: "responses.stream",
326
+ channelName: openAIChannels.responsesStream.channelName,
96
327
  module: {
97
328
  name: "openai",
98
329
  versionRange: ">=4.87.0",
@@ -105,7 +336,7 @@ var openaiConfigs = [
105
336
  }
106
337
  },
107
338
  {
108
- channelName: "responses.parse",
339
+ channelName: openAIChannels.responsesParse.channelName,
109
340
  module: {
110
341
  name: "openai",
111
342
  versionRange: ">=4.87.0",
@@ -119,15 +350,27 @@ var openaiConfigs = [
119
350
  }
120
351
  ];
121
352
 
353
+ // src/instrumentation/plugins/anthropic-channels.ts
354
+ var anthropicChannels = defineChannels("@anthropic-ai/sdk", {
355
+ messagesCreate: channel({
356
+ channelName: "messages.create",
357
+ kind: "async"
358
+ }),
359
+ betaMessagesCreate: channel({
360
+ channelName: "beta.messages.create",
361
+ kind: "async"
362
+ })
363
+ });
364
+
122
365
  // src/auto-instrumentations/configs/anthropic.ts
123
366
  var anthropicConfigs = [
124
367
  // Messages API - create (supports streaming via stream=true parameter)
125
368
  {
126
- channelName: "messages.create",
369
+ channelName: anthropicChannels.messagesCreate.channelName,
127
370
  module: {
128
371
  name: "@anthropic-ai/sdk",
129
372
  versionRange: ">=0.60.0",
130
- filePath: "resources/messages.mjs"
373
+ filePath: "resources/messages/messages.mjs"
131
374
  },
132
375
  functionQuery: {
133
376
  className: "Messages",
@@ -137,7 +380,7 @@ var anthropicConfigs = [
137
380
  },
138
381
  // Beta Messages API - create (supports streaming via stream=true parameter)
139
382
  {
140
- channelName: "beta.messages.create",
383
+ channelName: anthropicChannels.betaMessagesCreate.channelName,
141
384
  module: {
142
385
  name: "@anthropic-ai/sdk",
143
386
  versionRange: ">=0.60.0",
@@ -151,11 +394,55 @@ var anthropicConfigs = [
151
394
  }
152
395
  ];
153
396
 
397
+ // src/instrumentation/plugins/ai-sdk-channels.ts
398
+ var aiSDKChannels = defineChannels("ai", {
399
+ generateText: channel({
400
+ channelName: "generateText",
401
+ kind: "async"
402
+ }),
403
+ streamText: channel({
404
+ channelName: "streamText",
405
+ kind: "async"
406
+ }),
407
+ streamTextSync: channel({
408
+ channelName: "streamText.sync",
409
+ kind: "sync-stream"
410
+ }),
411
+ generateObject: channel({
412
+ channelName: "generateObject",
413
+ kind: "async"
414
+ }),
415
+ streamObject: channel({
416
+ channelName: "streamObject",
417
+ kind: "async"
418
+ }),
419
+ streamObjectSync: channel({
420
+ channelName: "streamObject.sync",
421
+ kind: "sync-stream"
422
+ }),
423
+ agentGenerate: channel({
424
+ channelName: "Agent.generate",
425
+ kind: "async"
426
+ }),
427
+ agentStream: channel({
428
+ channelName: "Agent.stream",
429
+ kind: "async"
430
+ }),
431
+ toolLoopAgentGenerate: channel({
432
+ channelName: "ToolLoopAgent.generate",
433
+ kind: "async"
434
+ }),
435
+ toolLoopAgentStream: channel({
436
+ channelName: "ToolLoopAgent.stream",
437
+ kind: "async"
438
+ })
439
+ });
440
+
154
441
  // src/auto-instrumentations/configs/ai-sdk.ts
155
442
  var aiSDKConfigs = [
156
443
  // generateText - async function
157
444
  {
158
- channelName: "generateText",
445
+ channelName: aiSDKChannels.generateText.channelName,
159
446
  module: {
160
447
  name: "ai",
161
448
  versionRange: ">=3.0.0",
@@ -166,9 +453,21 @@ var aiSDKConfigs = [
166
453
  kind: "Async"
167
454
  }
168
455
  },
456
+ {
457
+ channelName: aiSDKChannels.generateText.channelName,
458
+ module: {
459
+ name: "ai",
460
+ versionRange: ">=3.0.0",
461
+ filePath: "dist/index.js"
462
+ },
463
+ functionQuery: {
464
+ functionName: "generateText",
465
+ kind: "Async"
466
+ }
467
+ },
169
468
  // streamText - async function
170
469
  {
171
- channelName: "streamText",
470
+ channelName: aiSDKChannels.streamText.channelName,
172
471
  module: {
173
472
  name: "ai",
174
473
  versionRange: ">=3.0.0",
@@ -179,9 +478,21 @@ var aiSDKConfigs = [
179
478
  kind: "Async"
180
479
  }
181
480
  },
481
+ {
482
+ channelName: aiSDKChannels.streamTextSync.channelName,
483
+ module: {
484
+ name: "ai",
485
+ versionRange: ">=3.0.0",
486
+ filePath: "dist/index.js"
487
+ },
488
+ functionQuery: {
489
+ functionName: "streamText",
490
+ kind: "Sync"
491
+ }
492
+ },
182
493
  // generateObject - async function
183
494
  {
184
- channelName: "generateObject",
495
+ channelName: aiSDKChannels.generateObject.channelName,
185
496
  module: {
186
497
  name: "ai",
187
498
  versionRange: ">=3.0.0",
@@ -192,9 +503,21 @@ var aiSDKConfigs = [
192
503
  kind: "Async"
193
504
  }
194
505
  },
506
+ {
507
+ channelName: aiSDKChannels.generateObject.channelName,
508
+ module: {
509
+ name: "ai",
510
+ versionRange: ">=3.0.0",
511
+ filePath: "dist/index.js"
512
+ },
513
+ functionQuery: {
514
+ functionName: "generateObject",
515
+ kind: "Async"
516
+ }
517
+ },
195
518
  // streamObject - async function
196
519
  {
197
- channelName: "streamObject",
520
+ channelName: aiSDKChannels.streamObject.channelName,
198
521
  module: {
199
522
  name: "ai",
200
523
  versionRange: ">=3.0.0",
@@ -205,41 +528,152 @@ var aiSDKConfigs = [
205
528
  kind: "Async"
206
529
  }
207
530
  },
208
- // Agent.generate - async method (v3-v5 only, Agent structure changed in v6)
209
531
  {
210
- channelName: "Agent.generate",
532
+ channelName: aiSDKChannels.streamObjectSync.channelName,
533
+ module: {
534
+ name: "ai",
535
+ versionRange: ">=3.0.0",
536
+ filePath: "dist/index.js"
537
+ },
538
+ functionQuery: {
539
+ functionName: "streamObject",
540
+ kind: "Sync"
541
+ }
542
+ },
543
+ // Agent.generate - async method (v5 only)
544
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
545
+ // target the first async `generate` method in the file instead of a class name.
546
+ {
547
+ channelName: aiSDKChannels.agentGenerate.channelName,
211
548
  module: {
212
549
  name: "ai",
213
- versionRange: ">=3.0.0 <6.0.0",
550
+ versionRange: ">=5.0.0 <6.0.0",
214
551
  filePath: "dist/index.mjs"
215
552
  },
216
553
  functionQuery: {
217
- className: "Agent",
218
554
  methodName: "generate",
219
- kind: "Async"
555
+ kind: "Async",
556
+ index: 0
220
557
  }
221
558
  },
222
- // Agent.stream - async method (v3-v5 only, Agent structure changed in v6)
223
559
  {
224
- channelName: "Agent.stream",
560
+ channelName: aiSDKChannels.agentGenerate.channelName,
561
+ module: {
562
+ name: "ai",
563
+ versionRange: ">=5.0.0 <6.0.0",
564
+ filePath: "dist/index.js"
565
+ },
566
+ functionQuery: {
567
+ methodName: "generate",
568
+ kind: "Async",
569
+ index: 0
570
+ }
571
+ },
572
+ // Agent.stream - async method (v5 only)
573
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
574
+ // target the first async `stream` method in the file instead of a class name.
575
+ {
576
+ channelName: aiSDKChannels.agentStream.channelName,
225
577
  module: {
226
578
  name: "ai",
227
- versionRange: ">=3.0.0 <6.0.0",
579
+ versionRange: ">=5.0.0 <6.0.0",
228
580
  filePath: "dist/index.mjs"
229
581
  },
230
582
  functionQuery: {
231
- className: "Agent",
232
583
  methodName: "stream",
233
- kind: "Async"
584
+ kind: "Async",
585
+ index: 0
586
+ }
587
+ },
588
+ {
589
+ channelName: aiSDKChannels.agentStream.channelName,
590
+ module: {
591
+ name: "ai",
592
+ versionRange: ">=5.0.0 <6.0.0",
593
+ filePath: "dist/index.js"
594
+ },
595
+ functionQuery: {
596
+ methodName: "stream",
597
+ kind: "Async",
598
+ index: 0
599
+ }
600
+ },
601
+ // ToolLoopAgent.generate - async method (v6 only, Experimental_Agent is an alias)
602
+ // The compiled AI SDK bundle emits this as an anonymous class method, so we
603
+ // target the first async `generate` method in the file instead of a class name.
604
+ {
605
+ channelName: aiSDKChannels.toolLoopAgentGenerate.channelName,
606
+ module: {
607
+ name: "ai",
608
+ versionRange: ">=6.0.0 <7.0.0",
609
+ filePath: "dist/index.mjs"
610
+ },
611
+ functionQuery: {
612
+ methodName: "generate",
613
+ kind: "Async",
614
+ index: 0
615
+ }
616
+ },
617
+ {
618
+ channelName: aiSDKChannels.toolLoopAgentGenerate.channelName,
619
+ module: {
620
+ name: "ai",
621
+ versionRange: ">=6.0.0 <7.0.0",
622
+ filePath: "dist/index.js"
623
+ },
624
+ functionQuery: {
625
+ methodName: "generate",
626
+ kind: "Async",
627
+ index: 0
628
+ }
629
+ },
630
+ // ToolLoopAgent.stream - 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 `stream` method in the file instead of a class name.
633
+ {
634
+ channelName: aiSDKChannels.toolLoopAgentStream.channelName,
635
+ module: {
636
+ name: "ai",
637
+ versionRange: ">=6.0.0 <7.0.0",
638
+ filePath: "dist/index.mjs"
639
+ },
640
+ functionQuery: {
641
+ methodName: "stream",
642
+ kind: "Async",
643
+ index: 0
644
+ }
645
+ },
646
+ {
647
+ channelName: aiSDKChannels.toolLoopAgentStream.channelName,
648
+ module: {
649
+ name: "ai",
650
+ versionRange: ">=6.0.0 <7.0.0",
651
+ filePath: "dist/index.js"
652
+ },
653
+ functionQuery: {
654
+ methodName: "stream",
655
+ kind: "Async",
656
+ index: 0
234
657
  }
235
658
  }
236
659
  ];
237
660
 
661
+ // src/instrumentation/plugins/claude-agent-sdk-channels.ts
662
+ var claudeAgentSDKChannels = defineChannels(
663
+ "@anthropic-ai/claude-agent-sdk",
664
+ {
665
+ query: channel({
666
+ channelName: "query",
667
+ kind: "async"
668
+ })
669
+ }
670
+ );
671
+
238
672
  // src/auto-instrumentations/configs/claude-agent-sdk.ts
239
673
  var claudeAgentSDKConfigs = [
240
674
  // query - Main entry point for agent interactions (top-level exported async generator function)
241
675
  {
242
- channelName: "query",
676
+ channelName: claudeAgentSDKChannels.query.channelName,
243
677
  module: {
244
678
  name: "@anthropic-ai/claude-agent-sdk",
245
679
  versionRange: ">=0.1.0",
@@ -252,12 +686,24 @@ var claudeAgentSDKConfigs = [
252
686
  }
253
687
  ];
254
688
 
689
+ // src/instrumentation/plugins/google-genai-channels.ts
690
+ var googleGenAIChannels = defineChannels("@google/genai", {
691
+ generateContent: channel({
692
+ channelName: "models.generateContent",
693
+ kind: "async"
694
+ }),
695
+ generateContentStream: channel({
696
+ channelName: "models.generateContentStream",
697
+ kind: "async"
698
+ })
699
+ });
700
+
255
701
  // src/auto-instrumentations/configs/google-genai.ts
256
702
  var googleGenAIConfigs = [
257
703
  // Models.generateContentInternal - The actual class method (Node.js entry point)
258
704
  // Note: generateContent is an arrow function property that calls this internal method
259
705
  {
260
- channelName: "models.generateContent",
706
+ channelName: googleGenAIChannels.generateContent.channelName,
261
707
  module: {
262
708
  name: "@google/genai",
263
709
  versionRange: ">=1.0.0",
@@ -272,7 +718,7 @@ var googleGenAIConfigs = [
272
718
  // Models.generateContentStreamInternal - The actual class method (Node.js entry point)
273
719
  // Note: generateContentStream is an arrow function property that calls this internal method
274
720
  {
275
- channelName: "models.generateContentStream",
721
+ channelName: googleGenAIChannels.generateContentStream.channelName,
276
722
  module: {
277
723
  name: "@google/genai",
278
724
  versionRange: ">=1.0.0",
@@ -290,8 +736,8 @@ var googleGenAIConfigs = [
290
736
  import {
291
737
  create
292
738
  } from "@apm-js-collab/code-transformer";
293
- import * as Module from "node:module";
294
- import { sep } from "node:path";
739
+ import * as Module from "module";
740
+ import { sep } from "path";
295
741
  import moduleDetailsFromPath from "module-details-from-path";
296
742
  var ModulePatch = class {
297
743
  packages;
@@ -315,11 +761,15 @@ var ModulePatch = class {
315
761
  const [content, filename] = args;
316
762
  const normalizedForPlatform = filename.split("/").join(sep);
317
763
  const resolvedModule = moduleDetailsFromPath(normalizedForPlatform);
318
- if (resolvedModule && self.packages.has(resolvedModule.name)) {
764
+ if (resolvedModule) {
765
+ const packageName = getPackageName(resolvedModule.basedir) ?? resolvedModule.name;
766
+ if (!self.packages.has(packageName)) {
767
+ return self.originalCompile.apply(this, args);
768
+ }
319
769
  const version = getPackageVersion(resolvedModule.basedir);
320
770
  const normalizedModulePath = resolvedModule.path.replace(/\\/g, "/");
321
771
  const transformer = self.instrumentator.getTransformer(
322
- resolvedModule.name,
772
+ packageName,
323
773
  version,
324
774
  normalizedModulePath
325
775
  );
@@ -347,6 +797,59 @@ var ModulePatch = class {
347
797
  };
348
798
 
349
799
  // src/auto-instrumentations/hook.mts
800
+ var dcPath = ["node", "diagnostics_channel"].join(":");
801
+ var dc = await import(
802
+ /* @vite-ignore */
803
+ dcPath
804
+ );
805
+ var dummyChannel = dc.tracingChannel("dummy");
806
+ var TracingChannel = dummyChannel.constructor;
807
+ if (TracingChannel && !Object.getOwnPropertyDescriptor(TracingChannel.prototype, "hasSubscribers")) {
808
+ Object.defineProperty(TracingChannel.prototype, "hasSubscribers", {
809
+ configurable: true,
810
+ enumerable: false,
811
+ get() {
812
+ return Boolean(
813
+ this.start?.hasSubscribers || this.end?.hasSubscribers || this.asyncStart?.hasSubscribers || this.asyncEnd?.hasSubscribers || this.error?.hasSubscribers
814
+ );
815
+ }
816
+ });
817
+ }
818
+ if (TracingChannel && TracingChannel.prototype.tracePromise) {
819
+ TracingChannel.prototype.tracePromise = function(fn, context = {}, thisArg, ...args) {
820
+ const { start, end, asyncStart, asyncEnd, error } = this;
821
+ function reject(err) {
822
+ context.error = err;
823
+ error?.publish(context);
824
+ asyncStart?.publish(context);
825
+ asyncEnd?.publish(context);
826
+ return Promise.reject(err);
827
+ }
828
+ function resolve(result) {
829
+ context.result = result;
830
+ asyncStart?.publish(context);
831
+ asyncEnd?.publish(context);
832
+ return result;
833
+ }
834
+ start?.publish(context);
835
+ try {
836
+ const result = Reflect.apply(fn, thisArg, args);
837
+ if (result && (typeof result === "object" || typeof result === "function") && typeof result.then === "function") {
838
+ return result.then(resolve, reject);
839
+ }
840
+ context.result = result;
841
+ asyncStart?.publish(context);
842
+ asyncEnd?.publish(context);
843
+ return result;
844
+ } catch (err) {
845
+ context.error = err;
846
+ error?.publish(context);
847
+ throw err;
848
+ } finally {
849
+ end?.publish(context);
850
+ }
851
+ };
852
+ }
350
853
  var allConfigs = [
351
854
  ...openaiConfigs,
352
855
  ...anthropicConfigs,