braintrust 3.7.0 → 3.8.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 (53) hide show
  1. package/LICENSE +201 -0
  2. package/dev/dist/index.d.mts +144 -2
  3. package/dev/dist/index.d.ts +144 -2
  4. package/dev/dist/index.js +3322 -799
  5. package/dev/dist/index.mjs +3214 -691
  6. package/dist/auto-instrumentations/bundler/esbuild.cjs +377 -13
  7. package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
  8. package/dist/auto-instrumentations/bundler/rollup.cjs +377 -13
  9. package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
  10. package/dist/auto-instrumentations/bundler/vite.cjs +377 -13
  11. package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
  12. package/dist/auto-instrumentations/bundler/webpack-loader.cjs +377 -13
  13. package/dist/auto-instrumentations/bundler/webpack-loader.d.ts +11 -9
  14. package/dist/auto-instrumentations/bundler/webpack.cjs +377 -13
  15. package/dist/auto-instrumentations/bundler/webpack.mjs +2 -2
  16. package/dist/auto-instrumentations/{chunk-EVUKFMHG.mjs → chunk-ITP7RAUY.mjs} +21 -3
  17. package/dist/auto-instrumentations/{chunk-ZK2IYER2.mjs → chunk-MD7W27YH.mjs} +5 -1
  18. package/dist/auto-instrumentations/{chunk-AKEXR4AL.mjs → chunk-OLBMPZXE.mjs} +378 -14
  19. package/dist/auto-instrumentations/{chunk-VLEJ5AEK.mjs → chunk-P5YLNB2A.mjs} +21 -3
  20. package/dist/auto-instrumentations/hook.mjs +393 -19
  21. package/dist/auto-instrumentations/index.cjs +379 -13
  22. package/dist/auto-instrumentations/index.d.mts +5 -1
  23. package/dist/auto-instrumentations/index.d.ts +5 -1
  24. package/dist/auto-instrumentations/index.mjs +5 -1
  25. package/dist/auto-instrumentations/loader/cjs-patch.cjs +34 -6
  26. package/dist/auto-instrumentations/loader/cjs-patch.d.mts +1 -0
  27. package/dist/auto-instrumentations/loader/cjs-patch.d.ts +1 -0
  28. package/dist/auto-instrumentations/loader/cjs-patch.mjs +15 -5
  29. package/dist/auto-instrumentations/loader/esm-hook.mjs +8 -3
  30. package/dist/auto-instrumentations/loader/get-package-version.cjs +20 -2
  31. package/dist/auto-instrumentations/loader/get-package-version.mjs +1 -1
  32. package/dist/browser.d.mts +199 -44
  33. package/dist/browser.d.ts +199 -44
  34. package/dist/browser.js +7086 -6747
  35. package/dist/browser.mjs +7086 -6747
  36. package/dist/cli.js +3200 -677
  37. package/dist/edge-light.d.mts +1 -1
  38. package/dist/edge-light.d.ts +1 -1
  39. package/dist/edge-light.js +12645 -12215
  40. package/dist/edge-light.mjs +12645 -12215
  41. package/dist/index.d.mts +199 -44
  42. package/dist/index.d.ts +199 -44
  43. package/dist/index.js +7173 -6834
  44. package/dist/index.mjs +7022 -6683
  45. package/dist/instrumentation/index.d.mts +7 -0
  46. package/dist/instrumentation/index.d.ts +7 -0
  47. package/dist/instrumentation/index.js +3170 -669
  48. package/dist/instrumentation/index.mjs +3170 -669
  49. package/dist/workerd.d.mts +1 -1
  50. package/dist/workerd.d.ts +1 -1
  51. package/dist/workerd.js +12645 -12215
  52. package/dist/workerd.mjs +12645 -12215
  53. package/package.json +45 -45
@@ -100,7 +100,7 @@ var DefaultTracingChannel = class {
100
100
  }
101
101
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
102
  tracePromise(fn, _message, thisArg, ...args) {
103
- return Promise.resolve(fn.apply(thisArg, args));
103
+ return fn.apply(thisArg, args);
104
104
  }
105
105
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
106
  traceCallback(fn, _position, _message, thisArg, ...args) {
@@ -120,6 +120,7 @@ var iso = {
120
120
  processOn: (_0, _1) => {
121
121
  },
122
122
  basename: (filepath) => filepath.split(/[\\/]/).pop() || filepath,
123
+ // eslint-disable-next-line no-restricted-properties -- preserving intentional console usage.
123
124
  writeln: (text) => console.log(text)
124
125
  };
125
126
  var isomorph_default = iso;
@@ -203,6 +204,10 @@ var openAIChannels = defineChannels("openai", {
203
204
  responsesParse: channel({
204
205
  channelName: "responses.parse",
205
206
  kind: "async"
207
+ }),
208
+ responsesCompact: channel({
209
+ channelName: "responses.compact",
210
+ kind: "async"
206
211
  })
207
212
  });
208
213
 
@@ -369,6 +374,19 @@ var openaiConfigs = [
369
374
  methodName: "parse",
370
375
  kind: "Async"
371
376
  }
377
+ },
378
+ {
379
+ channelName: openAIChannels.responsesCompact.channelName,
380
+ module: {
381
+ name: "openai",
382
+ versionRange: ">=6.10.0",
383
+ filePath: "resources/responses/responses.mjs"
384
+ },
385
+ functionQuery: {
386
+ className: "Responses",
387
+ methodName: "compact",
388
+ kind: "Async"
389
+ }
372
390
  }
373
391
  ];
374
392
 
@@ -456,6 +474,16 @@ var aiSDKChannels = defineChannels("ai", {
456
474
  channelName: "streamObject.sync",
457
475
  kind: "sync-stream"
458
476
  }),
477
+ embed: channel(
478
+ {
479
+ channelName: "embed",
480
+ kind: "async"
481
+ }
482
+ ),
483
+ embedMany: channel({
484
+ channelName: "embedMany",
485
+ kind: "async"
486
+ }),
459
487
  agentGenerate: channel({
460
488
  channelName: "Agent.generate",
461
489
  kind: "async"
@@ -464,6 +492,10 @@ var aiSDKChannels = defineChannels("ai", {
464
492
  channelName: "Agent.stream",
465
493
  kind: "async"
466
494
  }),
495
+ agentStreamSync: channel({
496
+ channelName: "Agent.stream.sync",
497
+ kind: "sync-stream"
498
+ }),
467
499
  toolLoopAgentGenerate: channel({
468
500
  channelName: "ToolLoopAgent.generate",
469
501
  kind: "async"
@@ -501,12 +533,12 @@ var aiSDKConfigs = [
501
533
  kind: "Async"
502
534
  }
503
535
  },
504
- // streamText - async function
536
+ // streamText - async function (v3 only, before the sync refactor in v4)
505
537
  {
506
538
  channelName: aiSDKChannels.streamText.channelName,
507
539
  module: {
508
540
  name: "ai",
509
- versionRange: ">=3.0.0",
541
+ versionRange: ">=3.0.0 <4.0.0",
510
542
  filePath: "dist/index.mjs"
511
543
  },
512
544
  functionQuery: {
@@ -514,8 +546,21 @@ var aiSDKConfigs = [
514
546
  kind: "Async"
515
547
  }
516
548
  },
549
+ // streamText - sync function returning stream (v4+)
517
550
  {
518
551
  channelName: aiSDKChannels.streamTextSync.channelName,
552
+ module: {
553
+ name: "ai",
554
+ versionRange: ">=4.0.0",
555
+ filePath: "dist/index.mjs"
556
+ },
557
+ functionQuery: {
558
+ functionName: "streamText",
559
+ kind: "Sync"
560
+ }
561
+ },
562
+ {
563
+ channelName: aiSDKChannels.streamText.channelName,
519
564
  module: {
520
565
  name: "ai",
521
566
  versionRange: ">=3.0.0",
@@ -523,7 +568,7 @@ var aiSDKConfigs = [
523
568
  },
524
569
  functionQuery: {
525
570
  functionName: "streamText",
526
- kind: "Sync"
571
+ kind: "Async"
527
572
  }
528
573
  },
529
574
  // generateObject - async function
@@ -551,12 +596,62 @@ var aiSDKConfigs = [
551
596
  kind: "Async"
552
597
  }
553
598
  },
554
- // streamObject - async function
599
+ // embed - async function
555
600
  {
556
- channelName: aiSDKChannels.streamObject.channelName,
601
+ channelName: aiSDKChannels.embed.channelName,
602
+ module: {
603
+ name: "ai",
604
+ versionRange: ">=3.0.0",
605
+ filePath: "dist/index.mjs"
606
+ },
607
+ functionQuery: {
608
+ functionName: "embed",
609
+ kind: "Async"
610
+ }
611
+ },
612
+ {
613
+ channelName: aiSDKChannels.embed.channelName,
614
+ module: {
615
+ name: "ai",
616
+ versionRange: ">=3.0.0",
617
+ filePath: "dist/index.js"
618
+ },
619
+ functionQuery: {
620
+ functionName: "embed",
621
+ kind: "Async"
622
+ }
623
+ },
624
+ // embedMany - async function
625
+ {
626
+ channelName: aiSDKChannels.embedMany.channelName,
627
+ module: {
628
+ name: "ai",
629
+ versionRange: ">=3.0.0",
630
+ filePath: "dist/index.mjs"
631
+ },
632
+ functionQuery: {
633
+ functionName: "embedMany",
634
+ kind: "Async"
635
+ }
636
+ },
637
+ {
638
+ channelName: aiSDKChannels.embedMany.channelName,
557
639
  module: {
558
640
  name: "ai",
559
641
  versionRange: ">=3.0.0",
642
+ filePath: "dist/index.js"
643
+ },
644
+ functionQuery: {
645
+ functionName: "embedMany",
646
+ kind: "Async"
647
+ }
648
+ },
649
+ // streamObject - async function (v3 only, before the sync refactor in v4)
650
+ {
651
+ channelName: aiSDKChannels.streamObject.channelName,
652
+ module: {
653
+ name: "ai",
654
+ versionRange: ">=3.0.0 <4.0.0",
560
655
  filePath: "dist/index.mjs"
561
656
  },
562
657
  functionQuery: {
@@ -564,8 +659,21 @@ var aiSDKConfigs = [
564
659
  kind: "Async"
565
660
  }
566
661
  },
662
+ // streamObject - sync function returning stream (v4+)
567
663
  {
568
664
  channelName: aiSDKChannels.streamObjectSync.channelName,
665
+ module: {
666
+ name: "ai",
667
+ versionRange: ">=4.0.0",
668
+ filePath: "dist/index.mjs"
669
+ },
670
+ functionQuery: {
671
+ functionName: "streamObject",
672
+ kind: "Sync"
673
+ }
674
+ },
675
+ {
676
+ channelName: aiSDKChannels.streamObject.channelName,
569
677
  module: {
570
678
  name: "ai",
571
679
  versionRange: ">=3.0.0",
@@ -573,7 +681,7 @@ var aiSDKConfigs = [
573
681
  },
574
682
  functionQuery: {
575
683
  functionName: "streamObject",
576
- kind: "Sync"
684
+ kind: "Async"
577
685
  }
578
686
  },
579
687
  // Agent.generate - async method (v5 only)
@@ -605,11 +713,11 @@ var aiSDKConfigs = [
605
713
  index: 0
606
714
  }
607
715
  },
608
- // Agent.stream - async method (v5 only)
716
+ // Agent.stream - sync method (v5 only)
609
717
  // 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.
718
+ // target the first sync `stream` method in the file instead of a class name.
611
719
  {
612
- channelName: aiSDKChannels.agentStream.channelName,
720
+ channelName: aiSDKChannels.agentStreamSync.channelName,
613
721
  module: {
614
722
  name: "ai",
615
723
  versionRange: ">=5.0.0 <6.0.0",
@@ -617,12 +725,12 @@ var aiSDKConfigs = [
617
725
  },
618
726
  functionQuery: {
619
727
  methodName: "stream",
620
- kind: "Async",
728
+ kind: "Sync",
621
729
  index: 0
622
730
  }
623
731
  },
624
732
  {
625
- channelName: aiSDKChannels.agentStream.channelName,
733
+ channelName: aiSDKChannels.agentStreamSync.channelName,
626
734
  module: {
627
735
  name: "ai",
628
736
  versionRange: ">=5.0.0 <6.0.0",
@@ -630,7 +738,7 @@ var aiSDKConfigs = [
630
738
  },
631
739
  functionQuery: {
632
740
  methodName: "stream",
633
- kind: "Async",
741
+ kind: "Sync",
634
742
  index: 0
635
743
  }
636
744
  },
@@ -782,6 +890,38 @@ var googleGenAIConfigs = [
782
890
  }
783
891
  ];
784
892
 
893
+ // src/instrumentation/plugins/openrouter-agent-channels.ts
894
+ var openRouterAgentChannels = defineChannels("@openrouter/agent", {
895
+ callModel: channel({
896
+ channelName: "callModel",
897
+ kind: "sync-stream"
898
+ }),
899
+ callModelTurn: channel({
900
+ channelName: "callModel.turn",
901
+ kind: "async"
902
+ }),
903
+ toolExecute: channel({
904
+ channelName: "tool.execute",
905
+ kind: "async"
906
+ })
907
+ });
908
+
909
+ // src/auto-instrumentations/configs/openrouter-agent.ts
910
+ var openRouterAgentConfigs = [
911
+ {
912
+ channelName: openRouterAgentChannels.callModel.channelName,
913
+ module: {
914
+ name: "@openrouter/agent",
915
+ versionRange: ">=0.1.2",
916
+ filePath: "esm/inner-loop/call-model.js"
917
+ },
918
+ functionQuery: {
919
+ functionName: "callModel",
920
+ kind: "Sync"
921
+ }
922
+ }
923
+ ];
924
+
785
925
  // src/instrumentation/plugins/openrouter-channels.ts
786
926
  var openRouterChannels = defineChannels("@openrouter/sdk", {
787
927
  chatSend: channel({
@@ -800,6 +940,10 @@ var openRouterChannels = defineChannels("@openrouter/sdk", {
800
940
  channelName: "callModel",
801
941
  kind: "sync-stream"
802
942
  }),
943
+ callModelTurn: channel({
944
+ channelName: "callModel.turn",
945
+ kind: "async"
946
+ }),
803
947
  toolExecute: channel({
804
948
  channelName: "tool.execute",
805
949
  kind: "async"
@@ -862,6 +1006,224 @@ var openRouterConfigs = [
862
1006
  }
863
1007
  ];
864
1008
 
1009
+ // src/instrumentation/plugins/mistral-channels.ts
1010
+ var mistralChannels = defineChannels("@mistralai/mistralai", {
1011
+ chatComplete: channel({
1012
+ channelName: "chat.complete",
1013
+ kind: "async"
1014
+ }),
1015
+ chatStream: channel({
1016
+ channelName: "chat.stream",
1017
+ kind: "async"
1018
+ }),
1019
+ embeddingsCreate: channel({
1020
+ channelName: "embeddings.create",
1021
+ kind: "async"
1022
+ }),
1023
+ fimComplete: channel({
1024
+ channelName: "fim.complete",
1025
+ kind: "async"
1026
+ }),
1027
+ fimStream: channel({
1028
+ channelName: "fim.stream",
1029
+ kind: "async"
1030
+ }),
1031
+ agentsComplete: channel({
1032
+ channelName: "agents.complete",
1033
+ kind: "async"
1034
+ }),
1035
+ agentsStream: channel({
1036
+ channelName: "agents.stream",
1037
+ kind: "async"
1038
+ })
1039
+ });
1040
+
1041
+ // src/auto-instrumentations/configs/mistral.ts
1042
+ var mistralConfigs = [
1043
+ {
1044
+ channelName: mistralChannels.chatComplete.channelName,
1045
+ module: {
1046
+ name: "@mistralai/mistralai",
1047
+ versionRange: ">=1.0.0 <2.0.0",
1048
+ filePath: "sdk/chat.js"
1049
+ },
1050
+ functionQuery: {
1051
+ className: "Chat",
1052
+ methodName: "complete",
1053
+ kind: "Async"
1054
+ }
1055
+ },
1056
+ {
1057
+ channelName: mistralChannels.chatComplete.channelName,
1058
+ module: {
1059
+ name: "@mistralai/mistralai",
1060
+ versionRange: ">=2.0.0 <3.0.0",
1061
+ filePath: "esm/sdk/chat.js"
1062
+ },
1063
+ functionQuery: {
1064
+ className: "Chat",
1065
+ methodName: "complete",
1066
+ kind: "Async"
1067
+ }
1068
+ },
1069
+ {
1070
+ channelName: mistralChannels.chatStream.channelName,
1071
+ module: {
1072
+ name: "@mistralai/mistralai",
1073
+ versionRange: ">=1.0.0 <2.0.0",
1074
+ filePath: "sdk/chat.js"
1075
+ },
1076
+ functionQuery: {
1077
+ className: "Chat",
1078
+ methodName: "stream",
1079
+ kind: "Async"
1080
+ }
1081
+ },
1082
+ {
1083
+ channelName: mistralChannels.chatStream.channelName,
1084
+ module: {
1085
+ name: "@mistralai/mistralai",
1086
+ versionRange: ">=2.0.0 <3.0.0",
1087
+ filePath: "esm/sdk/chat.js"
1088
+ },
1089
+ functionQuery: {
1090
+ className: "Chat",
1091
+ methodName: "stream",
1092
+ kind: "Async"
1093
+ }
1094
+ },
1095
+ {
1096
+ channelName: mistralChannels.embeddingsCreate.channelName,
1097
+ module: {
1098
+ name: "@mistralai/mistralai",
1099
+ versionRange: ">=1.0.0 <2.0.0",
1100
+ filePath: "sdk/embeddings.js"
1101
+ },
1102
+ functionQuery: {
1103
+ className: "Embeddings",
1104
+ methodName: "create",
1105
+ kind: "Async"
1106
+ }
1107
+ },
1108
+ {
1109
+ channelName: mistralChannels.embeddingsCreate.channelName,
1110
+ module: {
1111
+ name: "@mistralai/mistralai",
1112
+ versionRange: ">=2.0.0 <3.0.0",
1113
+ filePath: "esm/sdk/embeddings.js"
1114
+ },
1115
+ functionQuery: {
1116
+ className: "Embeddings",
1117
+ methodName: "create",
1118
+ kind: "Async"
1119
+ }
1120
+ },
1121
+ {
1122
+ channelName: mistralChannels.fimComplete.channelName,
1123
+ module: {
1124
+ name: "@mistralai/mistralai",
1125
+ versionRange: ">=1.0.0 <2.0.0",
1126
+ filePath: "sdk/fim.js"
1127
+ },
1128
+ functionQuery: {
1129
+ className: "Fim",
1130
+ methodName: "complete",
1131
+ kind: "Async"
1132
+ }
1133
+ },
1134
+ {
1135
+ channelName: mistralChannels.fimComplete.channelName,
1136
+ module: {
1137
+ name: "@mistralai/mistralai",
1138
+ versionRange: ">=2.0.0 <3.0.0",
1139
+ filePath: "esm/sdk/fim.js"
1140
+ },
1141
+ functionQuery: {
1142
+ className: "Fim",
1143
+ methodName: "complete",
1144
+ kind: "Async"
1145
+ }
1146
+ },
1147
+ {
1148
+ channelName: mistralChannels.fimStream.channelName,
1149
+ module: {
1150
+ name: "@mistralai/mistralai",
1151
+ versionRange: ">=1.0.0 <2.0.0",
1152
+ filePath: "sdk/fim.js"
1153
+ },
1154
+ functionQuery: {
1155
+ className: "Fim",
1156
+ methodName: "stream",
1157
+ kind: "Async"
1158
+ }
1159
+ },
1160
+ {
1161
+ channelName: mistralChannels.fimStream.channelName,
1162
+ module: {
1163
+ name: "@mistralai/mistralai",
1164
+ versionRange: ">=2.0.0 <3.0.0",
1165
+ filePath: "esm/sdk/fim.js"
1166
+ },
1167
+ functionQuery: {
1168
+ className: "Fim",
1169
+ methodName: "stream",
1170
+ kind: "Async"
1171
+ }
1172
+ },
1173
+ {
1174
+ channelName: mistralChannels.agentsComplete.channelName,
1175
+ module: {
1176
+ name: "@mistralai/mistralai",
1177
+ versionRange: ">=1.0.0 <2.0.0",
1178
+ filePath: "sdk/agents.js"
1179
+ },
1180
+ functionQuery: {
1181
+ className: "Agents",
1182
+ methodName: "complete",
1183
+ kind: "Async"
1184
+ }
1185
+ },
1186
+ {
1187
+ channelName: mistralChannels.agentsComplete.channelName,
1188
+ module: {
1189
+ name: "@mistralai/mistralai",
1190
+ versionRange: ">=2.0.0 <3.0.0",
1191
+ filePath: "esm/sdk/agents.js"
1192
+ },
1193
+ functionQuery: {
1194
+ className: "Agents",
1195
+ methodName: "complete",
1196
+ kind: "Async"
1197
+ }
1198
+ },
1199
+ {
1200
+ channelName: mistralChannels.agentsStream.channelName,
1201
+ module: {
1202
+ name: "@mistralai/mistralai",
1203
+ versionRange: ">=1.0.0 <2.0.0",
1204
+ filePath: "sdk/agents.js"
1205
+ },
1206
+ functionQuery: {
1207
+ className: "Agents",
1208
+ methodName: "stream",
1209
+ kind: "Async"
1210
+ }
1211
+ },
1212
+ {
1213
+ channelName: mistralChannels.agentsStream.channelName,
1214
+ module: {
1215
+ name: "@mistralai/mistralai",
1216
+ versionRange: ">=2.0.0 <3.0.0",
1217
+ filePath: "esm/sdk/agents.js"
1218
+ },
1219
+ functionQuery: {
1220
+ className: "Agents",
1221
+ methodName: "stream",
1222
+ kind: "Async"
1223
+ }
1224
+ }
1225
+ ];
1226
+
865
1227
  // src/auto-instrumentations/bundler/webpack-loader.ts
866
1228
  function getModuleVersion(basedir) {
867
1229
  try {
@@ -883,6 +1245,8 @@ function getMatcher(options) {
883
1245
  ...claudeAgentSDKConfigs,
884
1246
  ...googleGenAIConfigs,
885
1247
  ...openRouterConfigs,
1248
+ ...openRouterAgentConfigs,
1249
+ ...mistralConfigs,
886
1250
  ...options.instrumentations ?? []
887
1251
  ];
888
1252
  const dcModule = options.browser ? "dc-browser" : void 0;
@@ -23,21 +23,23 @@ interface BundlerPluginOptions {
23
23
  * Webpack loader for auto-instrumentation.
24
24
  *
25
25
  * This is a webpack loader (not a plugin) for compatibility with tools that only support loaders,
26
- * such as Next.js Turbopack. Unlike the other exports in this package, this does not use unplugin.
26
+ * such as Next.js Turbopack.
27
27
  *
28
28
  * Usage in next.config.js / next.config.ts:
29
29
  * ```javascript
30
- * export default {
31
- * webpack(config) {
32
- * config.module.rules.unshift({
33
- * use: [{ loader: 'braintrust/webpack-loader' }],
34
- * });
35
- * return config;
30
+ * const nextConfig: NextConfig = {
31
+ * turbopack: {
32
+ * rules: {
33
+ * // Apply the loader to all JS/MJS/CJS files from node_modules.
34
+ * // condition: "foreign" restricts the rule to third-party packages only.
35
+ * "*.{js,mjs,cjs}": {
36
+ * condition: "foreign",
37
+ * loaders: [{ loader: require.resolve("braintrust/webpack-loader") }],
38
+ * },
39
+ * },
36
40
  * },
37
41
  * };
38
42
  * ```
39
- *
40
- * For browser builds, the loader automatically uses 'dc-browser' for diagnostics_channel polyfill.
41
43
  */
42
44
 
43
45
  /**