braintrust 3.26.0 → 3.28.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 (61) hide show
  1. package/dev/dist/index.d.mts +519 -186
  2. package/dev/dist/index.d.ts +519 -186
  3. package/dev/dist/index.js +3727 -1526
  4. package/dev/dist/index.mjs +2815 -614
  5. package/dist/apply-auto-instrumentation.js +372 -261
  6. package/dist/apply-auto-instrumentation.mjs +171 -60
  7. package/dist/auto-instrumentations/bundler/esbuild.cjs +458 -61
  8. package/dist/auto-instrumentations/bundler/esbuild.mjs +5 -4
  9. package/dist/auto-instrumentations/bundler/next.cjs +460 -63
  10. package/dist/auto-instrumentations/bundler/next.mjs +6 -5
  11. package/dist/auto-instrumentations/bundler/rollup.cjs +458 -61
  12. package/dist/auto-instrumentations/bundler/rollup.mjs +5 -4
  13. package/dist/auto-instrumentations/bundler/vite.cjs +487 -62
  14. package/dist/auto-instrumentations/bundler/vite.mjs +34 -5
  15. package/dist/auto-instrumentations/bundler/webpack-loader.cjs +444 -61
  16. package/dist/auto-instrumentations/bundler/webpack.cjs +458 -61
  17. package/dist/auto-instrumentations/bundler/webpack.mjs +6 -5
  18. package/dist/auto-instrumentations/{chunk-6E22MYSW.mjs → chunk-26PKVUKB.mjs} +109 -5
  19. package/dist/auto-instrumentations/{chunk-AKKPLXTP.mjs → chunk-2AMDGD65.mjs} +160 -57
  20. package/dist/auto-instrumentations/{chunk-V5LEODRX.mjs → chunk-HD35AM3M.mjs} +1 -1
  21. package/dist/auto-instrumentations/{chunk-XYN63IG5.mjs → chunk-I55G56ZL.mjs} +21 -58
  22. package/dist/auto-instrumentations/{chunk-NRE4QUQR.mjs → chunk-JPUFNW7X.mjs} +140 -0
  23. package/dist/auto-instrumentations/{chunk-XZHHE4Y3.mjs → chunk-NP7V4XB2.mjs} +157 -3
  24. package/dist/auto-instrumentations/hook.mjs +396 -32
  25. package/dist/auto-instrumentations/index.cjs +298 -2
  26. package/dist/auto-instrumentations/index.d.mts +5 -1
  27. package/dist/auto-instrumentations/index.d.ts +5 -1
  28. package/dist/auto-instrumentations/index.mjs +6 -2
  29. package/dist/auto-instrumentations/loader/cjs-patch.cjs +105 -57
  30. package/dist/auto-instrumentations/loader/cjs-patch.mjs +2 -2
  31. package/dist/auto-instrumentations/loader/esm-hook.mjs +1 -1
  32. package/dist/browser.d.mts +683 -56
  33. package/dist/browser.d.ts +683 -56
  34. package/dist/browser.js +4242 -655
  35. package/dist/browser.mjs +4242 -655
  36. package/dist/{chunk-VYNNEKSA.js → chunk-BBE7SNRV.js} +248 -10
  37. package/dist/{chunk-VRZZQPAA.js → chunk-OBBWQW6K.js} +3351 -1392
  38. package/dist/{chunk-XIZOM2HO.mjs → chunk-UPFNQCGB.mjs} +2419 -460
  39. package/dist/{chunk-PN7EWK66.mjs → chunk-ZHUHZWFY.mjs} +241 -3
  40. package/dist/cli.js +2867 -668
  41. package/dist/edge-light.d.mts +1 -1
  42. package/dist/edge-light.d.ts +1 -1
  43. package/dist/edge-light.js +4242 -655
  44. package/dist/edge-light.mjs +4242 -655
  45. package/dist/index.d.mts +1267 -640
  46. package/dist/index.d.ts +1267 -640
  47. package/dist/index.js +2107 -630
  48. package/dist/index.mjs +1649 -172
  49. package/dist/instrumentation/index.d.mts +198 -6
  50. package/dist/instrumentation/index.d.ts +198 -6
  51. package/dist/instrumentation/index.js +2661 -581
  52. package/dist/instrumentation/index.mjs +2661 -581
  53. package/dist/vitest-evals-reporter.js +45 -43
  54. package/dist/vitest-evals-reporter.mjs +5 -3
  55. package/dist/workerd.d.mts +1 -1
  56. package/dist/workerd.d.ts +1 -1
  57. package/dist/workerd.js +4242 -655
  58. package/dist/workerd.mjs +4242 -655
  59. package/package.json +2 -3
  60. package/util/dist/index.d.mts +1545 -100
  61. package/util/dist/index.d.ts +1545 -100
@@ -9,6 +9,7 @@ import {
9
9
  claudeAgentSDKChannels,
10
10
  cloudflareAIChatChannels,
11
11
  cloudflareAgentsChannels,
12
+ cloudflareThinkChannels,
12
13
  cohereChannels,
13
14
  cursorSDKChannels,
14
15
  flueChannels,
@@ -25,6 +26,7 @@ import {
25
26
  langChainChannels,
26
27
  langSmithChannels,
27
28
  mistralChannels,
29
+ ollamaChannels,
28
30
  openAIAgentsCoreChannels,
29
31
  openAIChannels,
30
32
  openAICodexChannels,
@@ -35,8 +37,9 @@ import {
35
37
  readDisabledInstrumentationEnvConfig,
36
38
  smithyClientChannels,
37
39
  smithyCoreChannels,
38
- strandsAgentSDKChannels
39
- } from "./chunk-PN7EWK66.mjs";
40
+ strandsAgentSDKChannels,
41
+ voyageAIChannels
42
+ } from "./chunk-ZHUHZWFY.mjs";
40
43
 
41
44
  // src/node/apply-auto-instrumentation-entry.ts
42
45
  import { register } from "node:module";
@@ -549,7 +552,40 @@ var anthropicConfigs = [
549
552
  methodName: "toolRunner",
550
553
  kind: "Sync"
551
554
  }
552
- }
555
+ },
556
+ // Managed Agents Sessions event streams are discovered automatically, but
557
+ // remain passive until the user calls collectAnthropicSession() on the
558
+ // returned stream.
559
+ ...["mjs", "js"].map(
560
+ (extension) => ({
561
+ channelName: anthropicChannels.betaSessionsEventsStream.channelName,
562
+ module: {
563
+ name: "@anthropic-ai/sdk",
564
+ versionRange: ">=0.86.0",
565
+ filePath: `resources/beta/sessions/events.${extension}`
566
+ },
567
+ functionQuery: {
568
+ className: "Events",
569
+ methodName: "stream",
570
+ kind: "Async"
571
+ }
572
+ })
573
+ ),
574
+ ...["mjs", "js"].map(
575
+ (extension) => ({
576
+ channelName: anthropicChannels.betaSessionsThreadsEventsStream.channelName,
577
+ module: {
578
+ name: "@anthropic-ai/sdk",
579
+ versionRange: ">=0.86.0",
580
+ filePath: `resources/beta/sessions/threads/events.${extension}`
581
+ },
582
+ functionQuery: {
583
+ className: "Events",
584
+ methodName: "stream",
585
+ kind: "Async"
586
+ }
587
+ })
588
+ )
553
589
  ];
554
590
 
555
591
  // src/auto-instrumentations/configs/bedrock-runtime.ts
@@ -679,6 +715,24 @@ var cloudflareAgentsConfigs = [
679
715
  }
680
716
  ];
681
717
 
718
+ // src/auto-instrumentations/configs/cloudflare-think.ts
719
+ var cloudflareThinkVersionRange = ">=0.13.0 <0.14.0";
720
+ var cloudflareThinkConfigs = [
721
+ {
722
+ channelName: cloudflareThinkChannels.runInferenceLoop.channelName,
723
+ module: {
724
+ name: "@cloudflare/think",
725
+ versionRange: cloudflareThinkVersionRange,
726
+ filePath: "dist/think.js"
727
+ },
728
+ functionQuery: {
729
+ className: "Think",
730
+ methodName: "_runInferenceLoop",
731
+ kind: "Async"
732
+ }
733
+ }
734
+ ];
735
+
682
736
  // src/auto-instrumentations/configs/cohere.ts
683
737
  var cohereConfigs = [
684
738
  {
@@ -2248,6 +2302,31 @@ var mistralConfigs = [
2248
2302
  }
2249
2303
  ];
2250
2304
 
2305
+ // src/auto-instrumentations/configs/ollama.ts
2306
+ var methods = [
2307
+ ["chat", ollamaChannels.chat.channelName],
2308
+ ["generate", ollamaChannels.generate.channelName],
2309
+ ["embed", ollamaChannels.embed.channelName]
2310
+ ];
2311
+ var implementationFiles = ["dist/browser.mjs", "dist/browser.cjs"];
2312
+ var ollamaConfigs = [
2313
+ ...implementationFiles.flatMap(
2314
+ (filePath) => methods.map(([methodName, channelName]) => ({
2315
+ channelName,
2316
+ module: {
2317
+ name: "ollama",
2318
+ versionRange: ">=0.6.0 <0.7.0",
2319
+ filePath
2320
+ },
2321
+ functionQuery: {
2322
+ className: "Ollama",
2323
+ methodName,
2324
+ kind: "Async"
2325
+ }
2326
+ }))
2327
+ )
2328
+ ];
2329
+
2251
2330
  // src/auto-instrumentations/configs/openai-agents.ts
2252
2331
  var lifecycleMethods = [
2253
2332
  ["onTraceStart", openAIAgentsCoreChannels.onTraceStart.channelName],
@@ -2537,6 +2616,19 @@ var openRouterConfigs = [
2537
2616
  kind: "Async"
2538
2617
  }
2539
2618
  },
2619
+ {
2620
+ channelName: openRouterChannels.betaResponsesSend.channelName,
2621
+ module: {
2622
+ name: "@openrouter/sdk",
2623
+ versionRange: ">=1.1.2 <2.0.0",
2624
+ filePath: "esm/sdk/betaresponses.js"
2625
+ },
2626
+ functionQuery: {
2627
+ className: "BetaResponses",
2628
+ methodName: "send",
2629
+ kind: "Async"
2630
+ }
2631
+ },
2540
2632
  {
2541
2633
  channelName: openRouterChannels.callModel.channelName,
2542
2634
  module: {
@@ -2630,6 +2722,53 @@ var strandsAgentSDKConfigs = [
2630
2722
  }
2631
2723
  ];
2632
2724
 
2725
+ // src/auto-instrumentations/configs/voyageai.ts
2726
+ var GENERATED_CLIENT_MODULES = [
2727
+ "dist/cjs/Client.js",
2728
+ "dist/esm/Client.mjs"
2729
+ ];
2730
+ var generatedClientOperations = [
2731
+ {
2732
+ channelName: voyageAIChannels.embed.channelName,
2733
+ methodName: "embed",
2734
+ versionRange: ">=0.2.0 <1.0.0"
2735
+ },
2736
+ {
2737
+ channelName: voyageAIChannels.multimodalEmbed.channelName,
2738
+ methodName: "multimodalEmbed",
2739
+ versionRange: ">=0.2.0 <1.0.0"
2740
+ },
2741
+ {
2742
+ channelName: voyageAIChannels.rerank.channelName,
2743
+ methodName: "rerank",
2744
+ versionRange: ">=0.2.0 <1.0.0"
2745
+ },
2746
+ {
2747
+ channelName: voyageAIChannels.contextualizedEmbed.channelName,
2748
+ methodName: "contextualizedEmbed",
2749
+ versionRange: ">=0.2.0 <1.0.0"
2750
+ }
2751
+ ];
2752
+ var voyageAIConfigs = [
2753
+ ...GENERATED_CLIENT_MODULES.flatMap(
2754
+ (filePath) => generatedClientOperations.map(
2755
+ ({ channelName, methodName, versionRange: versionRange2 }) => ({
2756
+ channelName,
2757
+ module: {
2758
+ name: "voyageai",
2759
+ versionRange: versionRange2,
2760
+ filePath
2761
+ },
2762
+ functionQuery: {
2763
+ className: "VoyageAIClient",
2764
+ methodName,
2765
+ kind: "Async"
2766
+ }
2767
+ })
2768
+ )
2769
+ )
2770
+ ];
2771
+
2633
2772
  // src/auto-instrumentations/configs/all.ts
2634
2773
  var defaultInstrumentationConfigGroups = [
2635
2774
  { integrations: ["openai"], configs: openaiConfigs },
@@ -2658,6 +2797,10 @@ var defaultInstrumentationConfigGroups = [
2658
2797
  integrations: ["cloudflareAgents"],
2659
2798
  configs: cloudflareAgentsConfigs
2660
2799
  },
2800
+ {
2801
+ integrations: ["cloudflareThink"],
2802
+ configs: cloudflareThinkConfigs
2803
+ },
2661
2804
  { integrations: ["cursor", "cursorSDK"], configs: cursorSDKConfigs },
2662
2805
  {
2663
2806
  integrations: ["openAIAgents"],
@@ -2682,6 +2825,7 @@ var defaultInstrumentationConfigGroups = [
2682
2825
  configs: openRouterAgentConfigs
2683
2826
  },
2684
2827
  { integrations: ["mistral"], configs: mistralConfigs },
2828
+ { integrations: ["ollama"], configs: ollamaConfigs },
2685
2829
  { integrations: ["googleADK"], configs: googleADKConfigs },
2686
2830
  { integrations: ["cohere"], configs: cohereConfigs },
2687
2831
  { integrations: ["groq"], configs: groqConfigs },
@@ -2704,6 +2848,10 @@ var defaultInstrumentationConfigGroups = [
2704
2848
  {
2705
2849
  integrations: ["flue"],
2706
2850
  configs: flueConfigs
2851
+ },
2852
+ {
2853
+ integrations: ["voyageai"],
2854
+ configs: voyageAIConfigs
2707
2855
  }
2708
2856
  // Note: `@mastra/core` is not listed here because its instrumentation
2709
2857
  // doesn't go through the AST `code-transformer` matcher — Mastra's
@@ -2760,8 +2908,7 @@ var transforms = {
2760
2908
  tracingHookDeclaration(state2, node) {
2761
2909
  const {
2762
2910
  channelName,
2763
- module: { name },
2764
- operator
2911
+ module: { name }
2765
2912
  } = state2;
2766
2913
  const channelVariable = formatChannelVariable(channelName);
2767
2914
  const channelGetter = formatChannelGetter(channelName);
@@ -2774,7 +2921,7 @@ var transforms = {
2774
2921
  return;
2775
2922
  }
2776
2923
  const sharedHookLookup = hasSharedHookLookup ? "" : `
2777
- const ${SHARED_HOOK_LOOKUP} = (__bt$hookName, __bt$operator) => {
2924
+ const ${SHARED_HOOK_LOOKUP} = (__bt$hookName) => {
2778
2925
  try {
2779
2926
  const __bt$hooks = globalThis[${JSON.stringify(
2780
2927
  GLOBAL_INSTRUMENTATION_HOOKS_KEY
@@ -2796,8 +2943,7 @@ var transforms = {
2796
2943
  __bt$hook[Symbol.for(${JSON.stringify(
2797
2944
  GLOBAL_INSTRUMENTATION_HOOK_BRAND
2798
2945
  )})] !== ${GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION} ||
2799
- typeof __bt$hook.hasSubscribers !== "boolean" ||
2800
- typeof __bt$hook[__bt$operator] !== "function"
2946
+ typeof __bt$hook.traceInvocation !== "function"
2801
2947
  ) return undefined;
2802
2948
  return __bt$hook;
2803
2949
  } catch {
@@ -2810,8 +2956,7 @@ var transforms = {
2810
2956
  let ${channelVariable};
2811
2957
  const ${channelGetter} = () =>
2812
2958
  ${channelVariable} ??= ${SHARED_HOOK_LOOKUP}(
2813
- ${JSON.stringify(`orchestrion:${name}:${channelName}`)},
2814
- ${JSON.stringify(operator)}
2959
+ ${JSON.stringify(`orchestrion:${name}:${channelName}`)}
2815
2960
  );
2816
2961
  `;
2817
2962
  const sharedHookLookupIndex = node.body.findIndex(
@@ -2886,28 +3031,18 @@ function traceInstanceMethod(state2, node, program) {
2886
3031
  ctor.value.body.body.push(...ctorBody);
2887
3032
  }
2888
3033
  function wrap(state2, node) {
2889
- const { operator, moduleVersion } = state2;
2890
- const wrapper = operator === "traceCallback" ? wrapCallback(state2) : operator === "tracePromise" ? wrapPromise(state2) : wrapSync(state2);
3034
+ const wrapper = wrapInvocation(state2);
2891
3035
  const block = wrapper.body[0].body;
2892
3036
  const common = parse(
2893
3037
  node.type === "ArrowFunctionExpression" ? `
2894
- const __bt$ctx = {
2895
- arguments,
2896
- moduleVersion: ${JSON.stringify(moduleVersion)}
2897
- };
2898
- const __bt$traced = () => {
3038
+ const __bt$target = (...__bt$args) => {
2899
3039
  const __bt$wrapped = () => {};
2900
- return __bt$wrapped(...arguments);
3040
+ return __bt$wrapped(...__bt$args);
2901
3041
  };
2902
3042
  ` : `
2903
- const __bt$ctx = {
2904
- arguments,
2905
- self: this,
2906
- moduleVersion: ${JSON.stringify(moduleVersion)}
2907
- };
2908
- const __bt$traced = () => {
3043
+ const __bt$target = function (...__bt$args) {
2909
3044
  const __bt$wrapped = () => {};
2910
- return __bt$wrapped.apply(this, arguments);
3045
+ return __bt$wrapped.apply(this, __bt$args);
2911
3046
  };
2912
3047
  `
2913
3048
  ).body;
@@ -2949,49 +3084,25 @@ function wrapSuper(node) {
2949
3084
  node.body.body.unshift(parse("const __bt$super = {}").body[0]);
2950
3085
  }
2951
3086
  }
2952
- function wrapCallback(state2) {
2953
- const {
2954
- channelName,
2955
- functionQuery: { callbackIndex = -1 }
2956
- } = state2;
3087
+ function wrapInvocation(state2) {
3088
+ const { channelName, moduleVersion, operator, functionQuery } = state2;
2957
3089
  const channelGetter = formatChannelGetter(channelName);
3090
+ const callbackIndex = functionQuery.callbackIndex ?? -1;
2958
3091
  return parse(`
2959
3092
  function wrapper () {
2960
3093
  const __bt$hook = ${channelGetter}();
2961
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
2962
- __bt$ctx.self ??= this;
2963
- return __bt$hook.traceCallback(
2964
- __bt$traced,
2965
- ${callbackIndex},
2966
- __bt$ctx
3094
+ if (!__bt$hook) return __bt$target.apply(this, arguments);
3095
+ return __bt$hook.traceInvocation(
3096
+ ${JSON.stringify(operator)},
3097
+ __bt$target,
3098
+ this,
3099
+ arguments,
3100
+ { moduleVersion: ${JSON.stringify(moduleVersion)} },
3101
+ ${callbackIndex}
2967
3102
  );
2968
3103
  }
2969
3104
  `);
2970
3105
  }
2971
- function wrapPromise(state2) {
2972
- const { channelName } = state2;
2973
- const channelGetter = formatChannelGetter(channelName);
2974
- return parse(`
2975
- function wrapper () {
2976
- const __bt$hook = ${channelGetter}();
2977
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
2978
- __bt$ctx.self ??= this;
2979
- return __bt$hook.tracePromise(__bt$traced, __bt$ctx);
2980
- }
2981
- `);
2982
- }
2983
- function wrapSync(state2) {
2984
- const { channelName } = state2;
2985
- const channelGetter = formatChannelGetter(channelName);
2986
- return parse(`
2987
- function wrapper () {
2988
- const __bt$hook = ${channelGetter}();
2989
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
2990
- __bt$ctx.self ??= this;
2991
- return __bt$hook.traceSync(__bt$traced, __bt$ctx);
2992
- }
2993
- `);
2994
- }
2995
3106
 
2996
3107
  // src/auto-instrumentations/orchestrion-js/transformer.ts
2997
3108
  var Transformer = class {