braintrust 3.3.0 → 3.4.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 (44) hide show
  1. package/README.md +52 -67
  2. package/dev/dist/index.d.mts +53 -9
  3. package/dev/dist/index.d.ts +53 -9
  4. package/dev/dist/index.js +1839 -1298
  5. package/dev/dist/index.mjs +1503 -962
  6. package/dist/auto-instrumentations/bundler/esbuild.cjs +270 -23
  7. package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
  8. package/dist/auto-instrumentations/bundler/rollup.cjs +270 -23
  9. package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
  10. package/dist/auto-instrumentations/bundler/vite.cjs +270 -23
  11. package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
  12. package/dist/auto-instrumentations/bundler/webpack.cjs +270 -23
  13. package/dist/auto-instrumentations/bundler/webpack.mjs +2 -2
  14. package/dist/auto-instrumentations/{chunk-OLOPGWTJ.mjs → chunk-D5ZPIUEL.mjs} +1 -1
  15. package/dist/auto-instrumentations/chunk-LVWWLUMN.mjs +535 -0
  16. package/dist/auto-instrumentations/hook.mjs +306 -23
  17. package/dist/auto-instrumentations/index.cjs +270 -23
  18. package/dist/auto-instrumentations/index.d.mts +5 -5
  19. package/dist/auto-instrumentations/index.d.ts +5 -5
  20. package/dist/auto-instrumentations/index.mjs +1 -1
  21. package/dist/auto-instrumentations/loader/esm-hook.mjs +7 -8
  22. package/dist/browser.d.mts +474 -47
  23. package/dist/browser.d.ts +474 -47
  24. package/dist/browser.js +2258 -2095
  25. package/dist/browser.mjs +2258 -2095
  26. package/dist/cli.js +1817 -1232
  27. package/dist/edge-light.d.mts +1 -1
  28. package/dist/edge-light.d.ts +1 -1
  29. package/dist/edge-light.js +2188 -2027
  30. package/dist/edge-light.mjs +2188 -2027
  31. package/dist/index.d.mts +474 -47
  32. package/dist/index.d.ts +474 -47
  33. package/dist/index.js +2576 -2415
  34. package/dist/index.mjs +2259 -2098
  35. package/dist/instrumentation/index.d.mts +16 -22
  36. package/dist/instrumentation/index.d.ts +16 -22
  37. package/dist/instrumentation/index.js +1558 -1068
  38. package/dist/instrumentation/index.mjs +1558 -1068
  39. package/dist/workerd.d.mts +1 -1
  40. package/dist/workerd.d.ts +1 -1
  41. package/dist/workerd.js +2188 -2027
  42. package/dist/workerd.mjs +2188 -2027
  43. package/package.json +6 -3
  44. package/dist/auto-instrumentations/chunk-KVX7OFPD.mjs +0 -288
@@ -5,14 +5,146 @@ import {
5
5
  // src/auto-instrumentations/hook.mts
6
6
  import { register } from "node:module";
7
7
 
8
+ // src/isomorph.ts
9
+ var DefaultAsyncLocalStorage = class {
10
+ constructor() {
11
+ }
12
+ enterWith(_) {
13
+ }
14
+ run(_, callback) {
15
+ return callback();
16
+ }
17
+ getStore() {
18
+ return void 0;
19
+ }
20
+ };
21
+ var DefaultTracingChannel = class {
22
+ hasSubscribers = false;
23
+ subscribe(_handlers) {
24
+ }
25
+ unsubscribe(_handlers) {
26
+ return false;
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ traceSync(fn, _message, thisArg, ...args) {
30
+ return fn.apply(thisArg, args);
31
+ }
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ tracePromise(fn, _message, thisArg, ...args) {
34
+ return Promise.resolve(fn.apply(thisArg, args));
35
+ }
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ traceCallback(fn, _position, _message, thisArg, ...args) {
38
+ return fn.apply(thisArg, args);
39
+ }
40
+ };
41
+ var iso = {
42
+ buildType: "unknown",
43
+ // Will be set by configureBrowser() or configureNode()
44
+ getRepoInfo: async (_settings) => void 0,
45
+ getPastNAncestors: async () => [],
46
+ getEnv: (_name) => void 0,
47
+ getCallerLocation: () => void 0,
48
+ newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ newTracingChannel: (_nameOrChannels) => new DefaultTracingChannel(),
51
+ processOn: (_0, _1) => {
52
+ },
53
+ basename: (filepath) => filepath.split(/[\\/]/).pop() || filepath,
54
+ writeln: (text) => console.log(text)
55
+ };
56
+ var isomorph_default = iso;
57
+
58
+ // src/instrumentation/core/channel-definitions.ts
59
+ function channel(spec) {
60
+ return spec;
61
+ }
62
+ function defineChannels(pkg, channels) {
63
+ return Object.fromEntries(
64
+ Object.entries(channels).map(([key, spec]) => {
65
+ const fullChannelName = `orchestrion:${pkg}:${spec.channelName}`;
66
+ if (spec.kind === "async") {
67
+ const asyncSpec = spec;
68
+ const tracingChannel2 = () => isomorph_default.newTracingChannel(
69
+ fullChannelName
70
+ );
71
+ return [
72
+ key,
73
+ {
74
+ ...asyncSpec,
75
+ tracingChannel: tracingChannel2,
76
+ tracePromise: (fn, context) => tracingChannel2().tracePromise(
77
+ fn,
78
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
79
+ context
80
+ )
81
+ }
82
+ ];
83
+ }
84
+ const syncSpec = spec;
85
+ const tracingChannel = () => isomorph_default.newTracingChannel(
86
+ fullChannelName
87
+ );
88
+ return [
89
+ key,
90
+ {
91
+ ...syncSpec,
92
+ tracingChannel,
93
+ traceSync: (fn, context) => tracingChannel().traceSync(
94
+ fn,
95
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
96
+ context
97
+ )
98
+ }
99
+ ];
100
+ })
101
+ );
102
+ }
103
+
104
+ // src/instrumentation/plugins/openai-channels.ts
105
+ var openAIChannels = defineChannels("openai", {
106
+ chatCompletionsCreate: channel({
107
+ channelName: "chat.completions.create",
108
+ kind: "async"
109
+ }),
110
+ embeddingsCreate: channel({
111
+ channelName: "embeddings.create",
112
+ kind: "async"
113
+ }),
114
+ betaChatCompletionsParse: channel({
115
+ channelName: "beta.chat.completions.parse",
116
+ kind: "async"
117
+ }),
118
+ betaChatCompletionsStream: channel({
119
+ channelName: "beta.chat.completions.stream",
120
+ kind: "sync-stream"
121
+ }),
122
+ moderationsCreate: channel({
123
+ channelName: "moderations.create",
124
+ kind: "async"
125
+ }),
126
+ responsesCreate: channel({
127
+ channelName: "responses.create",
128
+ kind: "async"
129
+ }),
130
+ responsesStream: channel({
131
+ channelName: "responses.stream",
132
+ kind: "sync-stream"
133
+ }),
134
+ responsesParse: channel({
135
+ channelName: "responses.parse",
136
+ kind: "async"
137
+ })
138
+ });
139
+
8
140
  // src/auto-instrumentations/configs/openai.ts
9
141
  var openaiConfigs = [
10
142
  // Chat Completions
11
143
  {
12
- channelName: "chat.completions.create",
144
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
13
145
  module: {
14
146
  name: "openai",
15
- versionRange: ">=4.0.0",
147
+ versionRange: ">=4.0.0 <5.0.0",
16
148
  filePath: "resources/chat/completions.mjs"
17
149
  },
18
150
  functionQuery: {
@@ -21,9 +153,35 @@ var openaiConfigs = [
21
153
  kind: "Async"
22
154
  }
23
155
  },
156
+ {
157
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
158
+ module: {
159
+ name: "openai",
160
+ versionRange: ">=4.0.0 <5.0.0",
161
+ filePath: "resources/chat/completions/completions.mjs"
162
+ },
163
+ functionQuery: {
164
+ className: "Completions",
165
+ methodName: "create",
166
+ kind: "Async"
167
+ }
168
+ },
169
+ {
170
+ channelName: openAIChannels.chatCompletionsCreate.channelName,
171
+ module: {
172
+ name: "openai",
173
+ versionRange: ">=5.0.0",
174
+ filePath: "resources/chat/completions/completions.mjs"
175
+ },
176
+ functionQuery: {
177
+ className: "Completions",
178
+ methodName: "create",
179
+ kind: "Async"
180
+ }
181
+ },
24
182
  // Embeddings
25
183
  {
26
- channelName: "embeddings.create",
184
+ channelName: openAIChannels.embeddingsCreate.channelName,
27
185
  module: {
28
186
  name: "openai",
29
187
  versionRange: ">=4.0.0",
@@ -37,10 +195,10 @@ var openaiConfigs = [
37
195
  },
38
196
  // Beta Chat Completions Parse
39
197
  {
40
- channelName: "beta.chat.completions.parse",
198
+ channelName: openAIChannels.betaChatCompletionsParse.channelName,
41
199
  module: {
42
200
  name: "openai",
43
- versionRange: ">=4.0.0",
201
+ versionRange: ">=4.0.0 <5.0.0",
44
202
  filePath: "resources/beta/chat/completions.mjs"
45
203
  },
46
204
  functionQuery: {
@@ -49,9 +207,22 @@ var openaiConfigs = [
49
207
  kind: "Async"
50
208
  }
51
209
  },
210
+ {
211
+ channelName: openAIChannels.betaChatCompletionsParse.channelName,
212
+ module: {
213
+ name: "openai",
214
+ versionRange: ">=5.0.0",
215
+ filePath: "resources/chat/completions/completions.mjs"
216
+ },
217
+ functionQuery: {
218
+ className: "Completions",
219
+ methodName: "parse",
220
+ kind: "Async"
221
+ }
222
+ },
52
223
  // Moderations
53
224
  {
54
- channelName: "moderations.create",
225
+ channelName: openAIChannels.moderationsCreate.channelName,
55
226
  module: {
56
227
  name: "openai",
57
228
  versionRange: ">=4.0.0",
@@ -65,10 +236,10 @@ var openaiConfigs = [
65
236
  },
66
237
  // Beta Chat Completions Stream
67
238
  {
68
- channelName: "beta.chat.completions.stream",
239
+ channelName: openAIChannels.betaChatCompletionsStream.channelName,
69
240
  module: {
70
241
  name: "openai",
71
- versionRange: ">=4.0.0",
242
+ versionRange: ">=4.0.0 <5.0.0",
72
243
  filePath: "resources/beta/chat/completions.mjs"
73
244
  },
74
245
  functionQuery: {
@@ -77,9 +248,22 @@ var openaiConfigs = [
77
248
  kind: "Sync"
78
249
  }
79
250
  },
251
+ {
252
+ channelName: openAIChannels.betaChatCompletionsStream.channelName,
253
+ module: {
254
+ name: "openai",
255
+ versionRange: ">=5.0.0",
256
+ filePath: "resources/chat/completions/completions.mjs"
257
+ },
258
+ functionQuery: {
259
+ className: "Completions",
260
+ methodName: "stream",
261
+ kind: "Sync"
262
+ }
263
+ },
80
264
  // Responses API (v4.87.0+)
81
265
  {
82
- channelName: "responses.create",
266
+ channelName: openAIChannels.responsesCreate.channelName,
83
267
  module: {
84
268
  name: "openai",
85
269
  versionRange: ">=4.87.0",
@@ -92,7 +276,7 @@ var openaiConfigs = [
92
276
  }
93
277
  },
94
278
  {
95
- channelName: "responses.stream",
279
+ channelName: openAIChannels.responsesStream.channelName,
96
280
  module: {
97
281
  name: "openai",
98
282
  versionRange: ">=4.87.0",
@@ -105,7 +289,7 @@ var openaiConfigs = [
105
289
  }
106
290
  },
107
291
  {
108
- channelName: "responses.parse",
292
+ channelName: openAIChannels.responsesParse.channelName,
109
293
  module: {
110
294
  name: "openai",
111
295
  versionRange: ">=4.87.0",
@@ -119,15 +303,27 @@ var openaiConfigs = [
119
303
  }
120
304
  ];
121
305
 
306
+ // src/instrumentation/plugins/anthropic-channels.ts
307
+ var anthropicChannels = defineChannels("@anthropic-ai/sdk", {
308
+ messagesCreate: channel({
309
+ channelName: "messages.create",
310
+ kind: "async"
311
+ }),
312
+ betaMessagesCreate: channel({
313
+ channelName: "beta.messages.create",
314
+ kind: "async"
315
+ })
316
+ });
317
+
122
318
  // src/auto-instrumentations/configs/anthropic.ts
123
319
  var anthropicConfigs = [
124
320
  // Messages API - create (supports streaming via stream=true parameter)
125
321
  {
126
- channelName: "messages.create",
322
+ channelName: anthropicChannels.messagesCreate.channelName,
127
323
  module: {
128
324
  name: "@anthropic-ai/sdk",
129
325
  versionRange: ">=0.60.0",
130
- filePath: "resources/messages.mjs"
326
+ filePath: "resources/messages/messages.mjs"
131
327
  },
132
328
  functionQuery: {
133
329
  className: "Messages",
@@ -137,7 +333,7 @@ var anthropicConfigs = [
137
333
  },
138
334
  // Beta Messages API - create (supports streaming via stream=true parameter)
139
335
  {
140
- channelName: "beta.messages.create",
336
+ channelName: anthropicChannels.betaMessagesCreate.channelName,
141
337
  module: {
142
338
  name: "@anthropic-ai/sdk",
143
339
  versionRange: ">=0.60.0",
@@ -151,11 +347,39 @@ var anthropicConfigs = [
151
347
  }
152
348
  ];
153
349
 
350
+ // src/instrumentation/plugins/ai-sdk-channels.ts
351
+ var aiSDKChannels = defineChannels("ai", {
352
+ generateText: channel({
353
+ channelName: "generateText",
354
+ kind: "async"
355
+ }),
356
+ streamText: channel({
357
+ channelName: "streamText",
358
+ kind: "async"
359
+ }),
360
+ generateObject: channel({
361
+ channelName: "generateObject",
362
+ kind: "async"
363
+ }),
364
+ streamObject: channel({
365
+ channelName: "streamObject",
366
+ kind: "async"
367
+ }),
368
+ agentGenerate: channel({
369
+ channelName: "Agent.generate",
370
+ kind: "async"
371
+ }),
372
+ agentStream: channel({
373
+ channelName: "Agent.stream",
374
+ kind: "async"
375
+ })
376
+ });
377
+
154
378
  // src/auto-instrumentations/configs/ai-sdk.ts
155
379
  var aiSDKConfigs = [
156
380
  // generateText - async function
157
381
  {
158
- channelName: "generateText",
382
+ channelName: aiSDKChannels.generateText.channelName,
159
383
  module: {
160
384
  name: "ai",
161
385
  versionRange: ">=3.0.0",
@@ -168,7 +392,7 @@ var aiSDKConfigs = [
168
392
  },
169
393
  // streamText - async function
170
394
  {
171
- channelName: "streamText",
395
+ channelName: aiSDKChannels.streamText.channelName,
172
396
  module: {
173
397
  name: "ai",
174
398
  versionRange: ">=3.0.0",
@@ -181,7 +405,7 @@ var aiSDKConfigs = [
181
405
  },
182
406
  // generateObject - async function
183
407
  {
184
- channelName: "generateObject",
408
+ channelName: aiSDKChannels.generateObject.channelName,
185
409
  module: {
186
410
  name: "ai",
187
411
  versionRange: ">=3.0.0",
@@ -194,7 +418,7 @@ var aiSDKConfigs = [
194
418
  },
195
419
  // streamObject - async function
196
420
  {
197
- channelName: "streamObject",
421
+ channelName: aiSDKChannels.streamObject.channelName,
198
422
  module: {
199
423
  name: "ai",
200
424
  versionRange: ">=3.0.0",
@@ -207,7 +431,7 @@ var aiSDKConfigs = [
207
431
  },
208
432
  // Agent.generate - async method (v3-v5 only, Agent structure changed in v6)
209
433
  {
210
- channelName: "Agent.generate",
434
+ channelName: aiSDKChannels.agentGenerate.channelName,
211
435
  module: {
212
436
  name: "ai",
213
437
  versionRange: ">=3.0.0 <6.0.0",
@@ -221,7 +445,7 @@ var aiSDKConfigs = [
221
445
  },
222
446
  // Agent.stream - async method (v3-v5 only, Agent structure changed in v6)
223
447
  {
224
- channelName: "Agent.stream",
448
+ channelName: aiSDKChannels.agentStream.channelName,
225
449
  module: {
226
450
  name: "ai",
227
451
  versionRange: ">=3.0.0 <6.0.0",
@@ -235,11 +459,22 @@ var aiSDKConfigs = [
235
459
  }
236
460
  ];
237
461
 
462
+ // src/instrumentation/plugins/claude-agent-sdk-channels.ts
463
+ var claudeAgentSDKChannels = defineChannels(
464
+ "@anthropic-ai/claude-agent-sdk",
465
+ {
466
+ query: channel({
467
+ channelName: "query",
468
+ kind: "async"
469
+ })
470
+ }
471
+ );
472
+
238
473
  // src/auto-instrumentations/configs/claude-agent-sdk.ts
239
474
  var claudeAgentSDKConfigs = [
240
475
  // query - Main entry point for agent interactions (top-level exported async generator function)
241
476
  {
242
- channelName: "query",
477
+ channelName: claudeAgentSDKChannels.query.channelName,
243
478
  module: {
244
479
  name: "@anthropic-ai/claude-agent-sdk",
245
480
  versionRange: ">=0.1.0",
@@ -252,12 +487,24 @@ var claudeAgentSDKConfigs = [
252
487
  }
253
488
  ];
254
489
 
490
+ // src/instrumentation/plugins/google-genai-channels.ts
491
+ var googleGenAIChannels = defineChannels("@google/genai", {
492
+ generateContent: channel({
493
+ channelName: "models.generateContent",
494
+ kind: "async"
495
+ }),
496
+ generateContentStream: channel({
497
+ channelName: "models.generateContentStream",
498
+ kind: "async"
499
+ })
500
+ });
501
+
255
502
  // src/auto-instrumentations/configs/google-genai.ts
256
503
  var googleGenAIConfigs = [
257
504
  // Models.generateContentInternal - The actual class method (Node.js entry point)
258
505
  // Note: generateContent is an arrow function property that calls this internal method
259
506
  {
260
- channelName: "models.generateContent",
507
+ channelName: googleGenAIChannels.generateContent.channelName,
261
508
  module: {
262
509
  name: "@google/genai",
263
510
  versionRange: ">=1.0.0",
@@ -272,7 +519,7 @@ var googleGenAIConfigs = [
272
519
  // Models.generateContentStreamInternal - The actual class method (Node.js entry point)
273
520
  // Note: generateContentStream is an arrow function property that calls this internal method
274
521
  {
275
- channelName: "models.generateContentStream",
522
+ channelName: googleGenAIChannels.generateContentStream.channelName,
276
523
  module: {
277
524
  name: "@google/genai",
278
525
  versionRange: ">=1.0.0",
@@ -347,6 +594,42 @@ var ModulePatch = class {
347
594
  };
348
595
 
349
596
  // src/auto-instrumentations/hook.mts
597
+ var dcPath = ["node", "diagnostics_channel"].join(":");
598
+ var dc = await import(
599
+ /* @vite-ignore */
600
+ dcPath
601
+ );
602
+ var dummyChannel = dc.tracingChannel("dummy");
603
+ var TracingChannel = dummyChannel.constructor;
604
+ if (TracingChannel && TracingChannel.prototype.tracePromise) {
605
+ TracingChannel.prototype.tracePromise = function(fn, context = {}, thisArg, ...args) {
606
+ const { start, end, asyncStart, asyncEnd, error } = this;
607
+ function reject(err) {
608
+ context.error = err;
609
+ error?.publish(context);
610
+ asyncStart?.publish(context);
611
+ asyncEnd?.publish(context);
612
+ return Promise.reject(err);
613
+ }
614
+ function resolve(result) {
615
+ context.result = result;
616
+ asyncStart?.publish(context);
617
+ asyncEnd?.publish(context);
618
+ return result;
619
+ }
620
+ start?.publish(context);
621
+ try {
622
+ const promise = Reflect.apply(fn, thisArg, args);
623
+ return promise.then(resolve, reject);
624
+ } catch (err) {
625
+ context.error = err;
626
+ error?.publish(context);
627
+ throw err;
628
+ } finally {
629
+ end?.publish(context);
630
+ }
631
+ };
632
+ }
350
633
  var allConfigs = [
351
634
  ...openaiConfigs,
352
635
  ...anthropicConfigs,