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
@@ -34,7 +34,7 @@ __export(next_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(next_exports);
36
36
  var import_node_module = require("module");
37
- var import_node_path = require("path");
37
+ var import_node_path2 = require("path");
38
38
 
39
39
  // src/auto-instrumentations/bundler/plugin.ts
40
40
  var import_unplugin = require("unplugin");
@@ -57,8 +57,10 @@ var GLOBAL_INSTRUMENTATION_HOOKS_KEY = "__braintrust_instrumentation_hooks";
57
57
  var GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION = 1;
58
58
  var GLOBAL_INSTRUMENTATION_HOOKS_REGISTRY_BRAND = "braintrust.global-instrumentation-hooks.registry";
59
59
  var GLOBAL_INSTRUMENTATION_HOOK_BRAND = "braintrust.global-instrumentation-hooks.hook";
60
+ var GLOBAL_INVOCATION_HOOK_BRAND = "braintrust.global-instrumentation-hooks.invocation-hook";
60
61
  var registryBrand = Symbol.for(GLOBAL_INSTRUMENTATION_HOOKS_REGISTRY_BRAND);
61
62
  var hookBrand = Symbol.for(GLOBAL_INSTRUMENTATION_HOOK_BRAND);
63
+ var invocationHookBrand = Symbol.for(GLOBAL_INVOCATION_HOOK_BRAND);
62
64
  var errorReporter;
63
65
  function reportError(error) {
64
66
  try {
@@ -194,12 +196,69 @@ var traceEvents = [
194
196
  "asyncEnd",
195
197
  "error"
196
198
  ];
199
+ function traceInvocation(hook, operator, target, thisArg, args, additional, callbackIndex = -1) {
200
+ const context = {
201
+ ...additional,
202
+ arguments: args,
203
+ self: thisArg
204
+ };
205
+ const invoke = () => hook.invoke(target, thisArg, args, additional);
206
+ if (operator === "traceCallback") {
207
+ return hook.traceCallback(invoke, callbackIndex, context);
208
+ }
209
+ if (operator === "tracePromise") {
210
+ return hook.tracePromise(invoke, context);
211
+ }
212
+ return hook.traceSync(invoke, context);
213
+ }
214
+ var InvocationHook = class {
215
+ interceptors = [];
216
+ get hasInterceptors() {
217
+ return this.interceptors.length > 0;
218
+ }
219
+ intercept(interceptor) {
220
+ if (typeof interceptor !== "function") {
221
+ throw new TypeError("interceptor must be a function");
222
+ }
223
+ this.interceptors = [...this.interceptors, interceptor];
224
+ let active = true;
225
+ return () => {
226
+ if (!active) {
227
+ return;
228
+ }
229
+ active = false;
230
+ const index = this.interceptors.indexOf(interceptor);
231
+ if (index !== -1) {
232
+ this.interceptors = [
233
+ ...this.interceptors.slice(0, index),
234
+ ...this.interceptors.slice(index + 1)
235
+ ];
236
+ }
237
+ };
238
+ }
239
+ invoke(target, thisArg, args, additional) {
240
+ const interceptors = this.interceptors;
241
+ if (interceptors.length === 0) {
242
+ return Reflect.apply(target, thisArg, args);
243
+ }
244
+ let next = target;
245
+ for (let index = interceptors.length - 1; index >= 0; index -= 1) {
246
+ const interceptor = interceptors[index];
247
+ const downstream = next;
248
+ next = function(...nextArgs) {
249
+ return interceptor(downstream, this, nextArgs, additional);
250
+ };
251
+ }
252
+ return Reflect.apply(next, thisArg, args);
253
+ }
254
+ };
197
255
  var TracingHook = class {
198
256
  start;
199
257
  end;
200
258
  asyncStart;
201
259
  asyncEnd;
202
260
  error;
261
+ invocationHook = new InvocationHook();
203
262
  constructor(nameOrChannels) {
204
263
  Object.defineProperty(this, hookBrand, {
205
264
  configurable: false,
@@ -207,6 +266,12 @@ var TracingHook = class {
207
266
  value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,
208
267
  writable: false
209
268
  });
269
+ Object.defineProperty(this, invocationHookBrand, {
270
+ configurable: false,
271
+ enumerable: false,
272
+ value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,
273
+ writable: false
274
+ });
210
275
  if (typeof nameOrChannels === "string") {
211
276
  this.start = new HookChannel(`tracing:${nameOrChannels}:start`);
212
277
  this.end = new HookChannel(`tracing:${nameOrChannels}:end`);
@@ -224,6 +289,26 @@ var TracingHook = class {
224
289
  get hasSubscribers() {
225
290
  return this.start.hasSubscribers || this.end.hasSubscribers || this.asyncStart.hasSubscribers || this.asyncEnd.hasSubscribers || this.error.hasSubscribers;
226
291
  }
292
+ get hasInterceptors() {
293
+ return this.invocationHook.hasInterceptors;
294
+ }
295
+ intercept(interceptor) {
296
+ return this.invocationHook.intercept(interceptor);
297
+ }
298
+ invoke(target, thisArg, args, additional) {
299
+ return this.invocationHook.invoke(target, thisArg, args, additional);
300
+ }
301
+ traceInvocation(operator, target, thisArg, args, additional, callbackIndex = -1) {
302
+ return traceInvocation(
303
+ this,
304
+ operator,
305
+ target,
306
+ thisArg,
307
+ args,
308
+ additional,
309
+ callbackIndex
310
+ );
311
+ }
227
312
  subscribe(handlers) {
228
313
  for (const eventName of traceEvents) {
229
314
  const handler = handlers[eventName];
@@ -445,6 +530,60 @@ function hasTracingHookShape(value) {
445
530
  return false;
446
531
  }
447
532
  }
533
+ function hasInvocationHookShape(value) {
534
+ if (typeof value !== "object" && typeof value !== "function" || value === null) {
535
+ return false;
536
+ }
537
+ try {
538
+ const hook = value;
539
+ return value[invocationHookBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION && typeof hook.hasInterceptors === "boolean" && typeof hook.intercept === "function" && typeof hook.invoke === "function";
540
+ } catch {
541
+ return false;
542
+ }
543
+ }
544
+ function installInvocationHook(value) {
545
+ const hasInvocationHook = hasInvocationHookShape(value);
546
+ const invocationHook = new InvocationHook();
547
+ try {
548
+ if (!hasInvocationHook) {
549
+ Object.defineProperties(value, {
550
+ [invocationHookBrand]: {
551
+ configurable: false,
552
+ enumerable: false,
553
+ value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,
554
+ writable: false
555
+ },
556
+ hasInterceptors: {
557
+ configurable: false,
558
+ enumerable: false,
559
+ get: () => invocationHook.hasInterceptors
560
+ },
561
+ intercept: {
562
+ configurable: false,
563
+ enumerable: false,
564
+ value: invocationHook.intercept.bind(invocationHook),
565
+ writable: false
566
+ },
567
+ invoke: {
568
+ configurable: false,
569
+ enumerable: false,
570
+ value: invocationHook.invoke.bind(invocationHook),
571
+ writable: false
572
+ }
573
+ });
574
+ }
575
+ if (typeof value.traceInvocation !== "function") {
576
+ Object.defineProperty(value, "traceInvocation", {
577
+ configurable: false,
578
+ enumerable: false,
579
+ value: traceInvocation.bind(void 0, value),
580
+ writable: false
581
+ });
582
+ }
583
+ } catch (error) {
584
+ reportError(error);
585
+ }
586
+ }
448
587
  function isCompatibleTracingHook(value) {
449
588
  try {
450
589
  return value[hookBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION && hasTracingHookShape(value);
@@ -531,6 +670,7 @@ function newGlobalTracingChannel(nameOrChannels) {
531
670
  return inertTracingHook;
532
671
  }
533
672
  if (isCompatibleTracingHook(existing)) {
673
+ installInvocationHook(existing);
534
674
  return existing;
535
675
  }
536
676
  if (existing !== void 0) {
@@ -567,8 +707,7 @@ var transforms = {
567
707
  tracingHookDeclaration(state, node) {
568
708
  const {
569
709
  channelName,
570
- module: { name },
571
- operator
710
+ module: { name }
572
711
  } = state;
573
712
  const channelVariable = formatChannelVariable(channelName);
574
713
  const channelGetter = formatChannelGetter(channelName);
@@ -581,7 +720,7 @@ var transforms = {
581
720
  return;
582
721
  }
583
722
  const sharedHookLookup = hasSharedHookLookup ? "" : `
584
- const ${SHARED_HOOK_LOOKUP} = (__bt$hookName, __bt$operator) => {
723
+ const ${SHARED_HOOK_LOOKUP} = (__bt$hookName) => {
585
724
  try {
586
725
  const __bt$hooks = globalThis[${JSON.stringify(
587
726
  GLOBAL_INSTRUMENTATION_HOOKS_KEY
@@ -603,8 +742,7 @@ var transforms = {
603
742
  __bt$hook[Symbol.for(${JSON.stringify(
604
743
  GLOBAL_INSTRUMENTATION_HOOK_BRAND
605
744
  )})] !== ${GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION} ||
606
- typeof __bt$hook.hasSubscribers !== "boolean" ||
607
- typeof __bt$hook[__bt$operator] !== "function"
745
+ typeof __bt$hook.traceInvocation !== "function"
608
746
  ) return undefined;
609
747
  return __bt$hook;
610
748
  } catch {
@@ -617,8 +755,7 @@ var transforms = {
617
755
  let ${channelVariable};
618
756
  const ${channelGetter} = () =>
619
757
  ${channelVariable} ??= ${SHARED_HOOK_LOOKUP}(
620
- ${JSON.stringify(`orchestrion:${name}:${channelName}`)},
621
- ${JSON.stringify(operator)}
758
+ ${JSON.stringify(`orchestrion:${name}:${channelName}`)}
622
759
  );
623
760
  `;
624
761
  const sharedHookLookupIndex = node.body.findIndex(
@@ -693,28 +830,18 @@ function traceInstanceMethod(state, node, program) {
693
830
  ctor.value.body.body.push(...ctorBody);
694
831
  }
695
832
  function wrap(state, node) {
696
- const { operator, moduleVersion } = state;
697
- const wrapper = operator === "traceCallback" ? wrapCallback(state) : operator === "tracePromise" ? wrapPromise(state) : wrapSync(state);
833
+ const wrapper = wrapInvocation(state);
698
834
  const block = wrapper.body[0].body;
699
835
  const common = (0, import_meriyah.parse)(
700
836
  node.type === "ArrowFunctionExpression" ? `
701
- const __bt$ctx = {
702
- arguments,
703
- moduleVersion: ${JSON.stringify(moduleVersion)}
704
- };
705
- const __bt$traced = () => {
837
+ const __bt$target = (...__bt$args) => {
706
838
  const __bt$wrapped = () => {};
707
- return __bt$wrapped(...arguments);
839
+ return __bt$wrapped(...__bt$args);
708
840
  };
709
841
  ` : `
710
- const __bt$ctx = {
711
- arguments,
712
- self: this,
713
- moduleVersion: ${JSON.stringify(moduleVersion)}
714
- };
715
- const __bt$traced = () => {
842
+ const __bt$target = function (...__bt$args) {
716
843
  const __bt$wrapped = () => {};
717
- return __bt$wrapped.apply(this, arguments);
844
+ return __bt$wrapped.apply(this, __bt$args);
718
845
  };
719
846
  `
720
847
  ).body;
@@ -756,49 +883,25 @@ function wrapSuper(node) {
756
883
  node.body.body.unshift((0, import_meriyah.parse)("const __bt$super = {}").body[0]);
757
884
  }
758
885
  }
759
- function wrapCallback(state) {
760
- const {
761
- channelName,
762
- functionQuery: { callbackIndex = -1 }
763
- } = state;
886
+ function wrapInvocation(state) {
887
+ const { channelName, moduleVersion, operator, functionQuery } = state;
764
888
  const channelGetter = formatChannelGetter(channelName);
889
+ const callbackIndex = functionQuery.callbackIndex ?? -1;
765
890
  return (0, import_meriyah.parse)(`
766
891
  function wrapper () {
767
892
  const __bt$hook = ${channelGetter}();
768
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
769
- __bt$ctx.self ??= this;
770
- return __bt$hook.traceCallback(
771
- __bt$traced,
772
- ${callbackIndex},
773
- __bt$ctx
893
+ if (!__bt$hook) return __bt$target.apply(this, arguments);
894
+ return __bt$hook.traceInvocation(
895
+ ${JSON.stringify(operator)},
896
+ __bt$target,
897
+ this,
898
+ arguments,
899
+ { moduleVersion: ${JSON.stringify(moduleVersion)} },
900
+ ${callbackIndex}
774
901
  );
775
902
  }
776
903
  `);
777
904
  }
778
- function wrapPromise(state) {
779
- const { channelName } = state;
780
- const channelGetter = formatChannelGetter(channelName);
781
- return (0, import_meriyah.parse)(`
782
- function wrapper () {
783
- const __bt$hook = ${channelGetter}();
784
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
785
- __bt$ctx.self ??= this;
786
- return __bt$hook.tracePromise(__bt$traced, __bt$ctx);
787
- }
788
- `);
789
- }
790
- function wrapSync(state) {
791
- const { channelName } = state;
792
- const channelGetter = formatChannelGetter(channelName);
793
- return (0, import_meriyah.parse)(`
794
- function wrapper () {
795
- const __bt$hook = ${channelGetter}();
796
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
797
- __bt$ctx.self ??= this;
798
- return __bt$hook.traceSync(__bt$traced, __bt$ctx);
799
- }
800
- `);
801
- }
802
905
 
803
906
  // src/auto-instrumentations/orchestrion-js/transformer.ts
804
907
  var Transformer = class {
@@ -1074,6 +1177,7 @@ var envIntegrationAliases = {
1074
1177
  cloudflareaichat: "cloudflareAIChat",
1075
1178
  "cloudflare-ai-chat": "cloudflareAIChat",
1076
1179
  "@cloudflare/ai-chat": "cloudflareAIChat",
1180
+ cloudflarethink: "cloudflareThink",
1077
1181
  cursor: "cursor",
1078
1182
  "cursor-sdk": "cursorSDK",
1079
1183
  cursorsdk: "cursorSDK",
@@ -1094,6 +1198,7 @@ var envIntegrationAliases = {
1094
1198
  openrouteragent: "openrouterAgent",
1095
1199
  "openrouter-agent": "openrouterAgent",
1096
1200
  mistral: "mistral",
1201
+ ollama: "ollama",
1097
1202
  googleadk: "googleADK",
1098
1203
  "google-adk": "googleADK",
1099
1204
  cohere: "cohere",
@@ -1114,7 +1219,10 @@ var envIntegrationAliases = {
1114
1219
  "langchain-js": "langchain",
1115
1220
  "@langchain": "langchain",
1116
1221
  langgraph: "langgraph",
1117
- langsmith: "langsmith"
1222
+ langsmith: "langsmith",
1223
+ voyage: "voyageai",
1224
+ "voyage-ai": "voyageai",
1225
+ voyageai: "voyageai"
1118
1226
  };
1119
1227
  function readDisabledInstrumentationEnvConfig(disabledList) {
1120
1228
  const integrations = {};
@@ -1179,11 +1287,21 @@ function defineChannels(pkg, channels, options) {
1179
1287
  const tracingChannel2 = () => isomorph_default.newTracingChannel(
1180
1288
  fullChannelName
1181
1289
  );
1290
+ const intercept2 = (interceptor) => {
1291
+ const hook = tracingChannel2();
1292
+ return typeof hook.intercept === "function" ? hook.intercept(interceptor) : () => {
1293
+ };
1294
+ };
1182
1295
  return [
1183
1296
  key,
1184
1297
  {
1185
1298
  ...asyncSpec,
1186
1299
  instrumentationName,
1300
+ intercept: intercept2,
1301
+ invoke: (target, thisArg, args, additional) => {
1302
+ const hook = tracingChannel2();
1303
+ return typeof hook.invoke === "function" ? hook.invoke(target, thisArg, args, additional) : Reflect.apply(target, thisArg, args);
1304
+ },
1187
1305
  tracingChannel: tracingChannel2,
1188
1306
  tracePromise: (fn, context) => tracingChannel2().tracePromise(
1189
1307
  fn,
@@ -1197,11 +1315,21 @@ function defineChannels(pkg, channels, options) {
1197
1315
  const tracingChannel = () => isomorph_default.newTracingChannel(
1198
1316
  fullChannelName
1199
1317
  );
1318
+ const intercept = (interceptor) => {
1319
+ const hook = tracingChannel();
1320
+ return typeof hook.intercept === "function" ? hook.intercept(interceptor) : () => {
1321
+ };
1322
+ };
1200
1323
  return [
1201
1324
  key,
1202
1325
  {
1203
1326
  ...syncSpec,
1204
1327
  instrumentationName,
1328
+ intercept,
1329
+ invoke: (target, thisArg, args, additional) => {
1330
+ const hook = tracingChannel();
1331
+ return typeof hook.invoke === "function" ? hook.invoke(target, thisArg, args, additional) : Reflect.apply(target, thisArg, args);
1332
+ },
1205
1333
  tracingChannel,
1206
1334
  traceSync: (fn, context) => tracingChannel().traceSync(
1207
1335
  fn,
@@ -1223,6 +1351,7 @@ var INSTRUMENTATION_NAMES = {
1223
1351
  CLAUDE_AGENT_SDK: "claude-agent-sdk",
1224
1352
  CLOUDFLARE_AI_CHAT: "cloudflare-ai-chat",
1225
1353
  CLOUDFLARE_AGENTS: "cloudflare-agents",
1354
+ CLOUDFLARE_THINK: "cloudflare-think",
1226
1355
  COHERE: "cohere",
1227
1356
  CURSOR_SDK: "cursor-sdk",
1228
1357
  EVE: "eve",
@@ -1237,13 +1366,15 @@ var INSTRUMENTATION_NAMES = {
1237
1366
  LANGSMITH: "langsmith",
1238
1367
  MASTRA: "mastra",
1239
1368
  MISTRAL: "mistral",
1369
+ OLLAMA: "ollama",
1240
1370
  OPENAI: "openai",
1241
1371
  OPENAI_AGENTS: "openai-agents",
1242
1372
  OPENAI_CODEX: "openai-codex",
1243
1373
  OPENROUTER: "openrouter",
1244
1374
  OPENROUTER_AGENT: "openrouter-agent",
1245
1375
  PI_CODING_AGENT: "pi-coding-agent",
1246
- STRANDS_AGENT_SDK: "strands-agent-sdk"
1376
+ STRANDS_AGENT_SDK: "strands-agent-sdk",
1377
+ VOYAGEAI: "voyageai"
1247
1378
  };
1248
1379
 
1249
1380
  // src/instrumentation/plugins/ai-sdk-channels.ts
@@ -1753,6 +1884,14 @@ var anthropicChannels = defineChannels(
1753
1884
  betaMessagesToolRunner: channel({
1754
1885
  channelName: "beta.messages.toolRunner",
1755
1886
  kind: "sync-stream"
1887
+ }),
1888
+ betaSessionsEventsStream: channel({
1889
+ channelName: "beta.sessions.events.stream",
1890
+ kind: "async"
1891
+ }),
1892
+ betaSessionsThreadsEventsStream: channel({
1893
+ channelName: "beta.sessions.threads.events.stream",
1894
+ kind: "async"
1756
1895
  })
1757
1896
  },
1758
1897
  { instrumentationName: INSTRUMENTATION_NAMES.ANTHROPIC }
@@ -1871,7 +2010,40 @@ var anthropicConfigs = [
1871
2010
  methodName: "toolRunner",
1872
2011
  kind: "Sync"
1873
2012
  }
1874
- }
2013
+ },
2014
+ // Managed Agents Sessions event streams are discovered automatically, but
2015
+ // remain passive until the user calls collectAnthropicSession() on the
2016
+ // returned stream.
2017
+ ...["mjs", "js"].map(
2018
+ (extension) => ({
2019
+ channelName: anthropicChannels.betaSessionsEventsStream.channelName,
2020
+ module: {
2021
+ name: "@anthropic-ai/sdk",
2022
+ versionRange: ">=0.86.0",
2023
+ filePath: `resources/beta/sessions/events.${extension}`
2024
+ },
2025
+ functionQuery: {
2026
+ className: "Events",
2027
+ methodName: "stream",
2028
+ kind: "Async"
2029
+ }
2030
+ })
2031
+ ),
2032
+ ...["mjs", "js"].map(
2033
+ (extension) => ({
2034
+ channelName: anthropicChannels.betaSessionsThreadsEventsStream.channelName,
2035
+ module: {
2036
+ name: "@anthropic-ai/sdk",
2037
+ versionRange: ">=0.86.0",
2038
+ filePath: `resources/beta/sessions/threads/events.${extension}`
2039
+ },
2040
+ functionQuery: {
2041
+ className: "Events",
2042
+ methodName: "stream",
2043
+ kind: "Async"
2044
+ }
2045
+ })
2046
+ )
1875
2047
  ];
1876
2048
 
1877
2049
  // src/instrumentation/plugins/bedrock-runtime-channels.ts
@@ -2068,6 +2240,36 @@ var cloudflareAgentsConfigs = [
2068
2240
  }
2069
2241
  ];
2070
2242
 
2243
+ // src/instrumentation/plugins/cloudflare-think-channels.ts
2244
+ var cloudflareThinkChannels = defineChannels(
2245
+ "@cloudflare/think",
2246
+ {
2247
+ runInferenceLoop: channel({
2248
+ channelName: "Think.runInferenceLoop",
2249
+ kind: "async"
2250
+ })
2251
+ },
2252
+ { instrumentationName: INSTRUMENTATION_NAMES.CLOUDFLARE_THINK }
2253
+ );
2254
+
2255
+ // src/auto-instrumentations/configs/cloudflare-think.ts
2256
+ var cloudflareThinkVersionRange = ">=0.13.0 <0.14.0";
2257
+ var cloudflareThinkConfigs = [
2258
+ {
2259
+ channelName: cloudflareThinkChannels.runInferenceLoop.channelName,
2260
+ module: {
2261
+ name: "@cloudflare/think",
2262
+ versionRange: cloudflareThinkVersionRange,
2263
+ filePath: "dist/think.js"
2264
+ },
2265
+ functionQuery: {
2266
+ className: "Think",
2267
+ methodName: "_runInferenceLoop",
2268
+ kind: "Async"
2269
+ }
2270
+ }
2271
+ ];
2272
+
2071
2273
  // src/instrumentation/plugins/cohere-channels.ts
2072
2274
  var cohereChannels = defineChannels(
2073
2275
  "cohere-ai",
@@ -3951,6 +4153,51 @@ var mistralConfigs = [
3951
4153
  }
3952
4154
  ];
3953
4155
 
4156
+ // src/instrumentation/plugins/ollama-channels.ts
4157
+ var ollamaChannels = defineChannels(
4158
+ "ollama",
4159
+ {
4160
+ chat: channel({
4161
+ channelName: "chat",
4162
+ kind: "async"
4163
+ }),
4164
+ generate: channel({
4165
+ channelName: "generate",
4166
+ kind: "async"
4167
+ }),
4168
+ embed: channel({
4169
+ channelName: "embed",
4170
+ kind: "async"
4171
+ })
4172
+ },
4173
+ { instrumentationName: INSTRUMENTATION_NAMES.OLLAMA }
4174
+ );
4175
+
4176
+ // src/auto-instrumentations/configs/ollama.ts
4177
+ var methods = [
4178
+ ["chat", ollamaChannels.chat.channelName],
4179
+ ["generate", ollamaChannels.generate.channelName],
4180
+ ["embed", ollamaChannels.embed.channelName]
4181
+ ];
4182
+ var implementationFiles = ["dist/browser.mjs", "dist/browser.cjs"];
4183
+ var ollamaConfigs = [
4184
+ ...implementationFiles.flatMap(
4185
+ (filePath) => methods.map(([methodName, channelName]) => ({
4186
+ channelName,
4187
+ module: {
4188
+ name: "ollama",
4189
+ versionRange: ">=0.6.0 <0.7.0",
4190
+ filePath
4191
+ },
4192
+ functionQuery: {
4193
+ className: "Ollama",
4194
+ methodName,
4195
+ kind: "Async"
4196
+ }
4197
+ }))
4198
+ )
4199
+ ];
4200
+
3954
4201
  // src/instrumentation/plugins/openai-agents-channels.ts
3955
4202
  var openAIAgentsCoreChannels = defineChannels(
3956
4203
  "@openai/agents-core",
@@ -4360,6 +4607,19 @@ var openRouterConfigs = [
4360
4607
  kind: "Async"
4361
4608
  }
4362
4609
  },
4610
+ {
4611
+ channelName: openRouterChannels.betaResponsesSend.channelName,
4612
+ module: {
4613
+ name: "@openrouter/sdk",
4614
+ versionRange: ">=1.1.2 <2.0.0",
4615
+ filePath: "esm/sdk/betaresponses.js"
4616
+ },
4617
+ functionQuery: {
4618
+ className: "BetaResponses",
4619
+ methodName: "send",
4620
+ kind: "Async"
4621
+ }
4622
+ },
4363
4623
  {
4364
4624
  channelName: openRouterChannels.callModel.channelName,
4365
4625
  module: {
@@ -4505,6 +4765,77 @@ var strandsAgentSDKConfigs = [
4505
4765
  }
4506
4766
  ];
4507
4767
 
4768
+ // src/instrumentation/plugins/voyageai-channels.ts
4769
+ var voyageAIChannels = defineChannels(
4770
+ "voyageai",
4771
+ {
4772
+ embed: channel({
4773
+ channelName: "embed",
4774
+ kind: "async"
4775
+ }),
4776
+ multimodalEmbed: channel({
4777
+ channelName: "multimodalEmbed",
4778
+ kind: "async"
4779
+ }),
4780
+ rerank: channel({
4781
+ channelName: "rerank",
4782
+ kind: "async"
4783
+ }),
4784
+ contextualizedEmbed: channel({
4785
+ channelName: "contextualizedEmbed",
4786
+ kind: "async"
4787
+ })
4788
+ },
4789
+ { instrumentationName: INSTRUMENTATION_NAMES.VOYAGEAI }
4790
+ );
4791
+
4792
+ // src/auto-instrumentations/configs/voyageai.ts
4793
+ var GENERATED_CLIENT_MODULES = [
4794
+ "dist/cjs/Client.js",
4795
+ "dist/esm/Client.mjs"
4796
+ ];
4797
+ var generatedClientOperations = [
4798
+ {
4799
+ channelName: voyageAIChannels.embed.channelName,
4800
+ methodName: "embed",
4801
+ versionRange: ">=0.2.0 <1.0.0"
4802
+ },
4803
+ {
4804
+ channelName: voyageAIChannels.multimodalEmbed.channelName,
4805
+ methodName: "multimodalEmbed",
4806
+ versionRange: ">=0.2.0 <1.0.0"
4807
+ },
4808
+ {
4809
+ channelName: voyageAIChannels.rerank.channelName,
4810
+ methodName: "rerank",
4811
+ versionRange: ">=0.2.0 <1.0.0"
4812
+ },
4813
+ {
4814
+ channelName: voyageAIChannels.contextualizedEmbed.channelName,
4815
+ methodName: "contextualizedEmbed",
4816
+ versionRange: ">=0.2.0 <1.0.0"
4817
+ }
4818
+ ];
4819
+ var voyageAIConfigs = [
4820
+ ...GENERATED_CLIENT_MODULES.flatMap(
4821
+ (filePath) => generatedClientOperations.map(
4822
+ ({ channelName, methodName, versionRange: versionRange2 }) => ({
4823
+ channelName,
4824
+ module: {
4825
+ name: "voyageai",
4826
+ versionRange: versionRange2,
4827
+ filePath
4828
+ },
4829
+ functionQuery: {
4830
+ className: "VoyageAIClient",
4831
+ methodName,
4832
+ kind: "Async"
4833
+ }
4834
+ })
4835
+ )
4836
+ )
4837
+ ];
4838
+
4508
4839
  // src/auto-instrumentations/configs/all.ts
4509
4840
  var defaultInstrumentationConfigGroups = [
4510
4841
  { integrations: ["openai"], configs: openaiConfigs },
@@ -4533,6 +4864,10 @@ var defaultInstrumentationConfigGroups = [
4533
4864
  integrations: ["cloudflareAgents"],
4534
4865
  configs: cloudflareAgentsConfigs
4535
4866
  },
4867
+ {
4868
+ integrations: ["cloudflareThink"],
4869
+ configs: cloudflareThinkConfigs
4870
+ },
4536
4871
  { integrations: ["cursor", "cursorSDK"], configs: cursorSDKConfigs },
4537
4872
  {
4538
4873
  integrations: ["openAIAgents"],
@@ -4557,6 +4892,7 @@ var defaultInstrumentationConfigGroups = [
4557
4892
  configs: openRouterAgentConfigs
4558
4893
  },
4559
4894
  { integrations: ["mistral"], configs: mistralConfigs },
4895
+ { integrations: ["ollama"], configs: ollamaConfigs },
4560
4896
  { integrations: ["googleADK"], configs: googleADKConfigs },
4561
4897
  { integrations: ["cohere"], configs: cohereConfigs },
4562
4898
  { integrations: ["groq"], configs: groqConfigs },
@@ -4579,6 +4915,10 @@ var defaultInstrumentationConfigGroups = [
4579
4915
  {
4580
4916
  integrations: ["flue"],
4581
4917
  configs: flueConfigs
4918
+ },
4919
+ {
4920
+ integrations: ["voyageai"],
4921
+ configs: voyageAIConfigs
4582
4922
  }
4583
4923
  // Note: `@mastra/core` is not listed here because its instrumentation
4584
4924
  // doesn't go through the AST `code-transformer` matcher — Mastra's
@@ -4812,6 +5152,49 @@ function applySpecialCasePatch(input) {
4812
5152
  return null;
4813
5153
  }
4814
5154
 
5155
+ // src/auto-instrumentations/loader/get-package-version.ts
5156
+ var import_node_fs = require("fs");
5157
+ var import_node_path = require("path");
5158
+ var packageNames = /* @__PURE__ */ new Map();
5159
+ function readPackageJson(baseDir) {
5160
+ try {
5161
+ const packageJsonPath = (0, import_node_path.join)(baseDir, "package.json");
5162
+ const jsonFile = (0, import_node_fs.readFileSync)(packageJsonPath, "utf8");
5163
+ return JSON.parse(jsonFile);
5164
+ } catch {
5165
+ return void 0;
5166
+ }
5167
+ }
5168
+ function resolvePackageBaseDir(baseDir) {
5169
+ try {
5170
+ return (0, import_node_fs.realpathSync)(baseDir);
5171
+ } catch {
5172
+ return baseDir;
5173
+ }
5174
+ }
5175
+ function readPackageJsonWithFallback(baseDir) {
5176
+ const packageJson = readPackageJson(baseDir);
5177
+ if (packageJson) {
5178
+ return packageJson;
5179
+ }
5180
+ const resolvedBaseDir = resolvePackageBaseDir(baseDir);
5181
+ if (resolvedBaseDir === baseDir) {
5182
+ return void 0;
5183
+ }
5184
+ return readPackageJson(resolvedBaseDir);
5185
+ }
5186
+ function getPackageName(baseDir) {
5187
+ if (packageNames.has(baseDir)) {
5188
+ return packageNames.get(baseDir);
5189
+ }
5190
+ const packageJson = readPackageJsonWithFallback(baseDir);
5191
+ if (typeof packageJson?.name === "string") {
5192
+ packageNames.set(baseDir, packageJson.name);
5193
+ return packageJson.name;
5194
+ }
5195
+ return void 0;
5196
+ }
5197
+
4815
5198
  // src/auto-instrumentations/bundler/plugin.ts
4816
5199
  function getModuleVersion(basedir) {
4817
5200
  try {
@@ -4833,6 +5216,20 @@ var unplugin = (0, import_unplugin.createUnplugin)((options = {}) => {
4833
5216
  return {
4834
5217
  name: "code-transformer",
4835
5218
  enforce: "pre",
5219
+ transformInclude(id) {
5220
+ const pathWithoutQuery = id.split("?", 1)[0];
5221
+ if (!pathWithoutQuery) {
5222
+ return false;
5223
+ }
5224
+ if (pathWithoutQuery.startsWith("file:")) {
5225
+ try {
5226
+ return (0, import_path.isAbsolute)((0, import_url.fileURLToPath)(pathWithoutQuery));
5227
+ } catch {
5228
+ return false;
5229
+ }
5230
+ }
5231
+ return (0, import_path.isAbsolute)(pathWithoutQuery);
5232
+ },
4836
5233
  transform(code, id) {
4837
5234
  if (!id) {
4838
5235
  return null;
@@ -4849,7 +5246,7 @@ var unplugin = (0, import_unplugin.createUnplugin)((options = {}) => {
4849
5246
  if (!moduleDetails) {
4850
5247
  return null;
4851
5248
  }
4852
- const moduleName = moduleDetails.name;
5249
+ const moduleName = getPackageName(moduleDetails.basedir) ?? moduleDetails.name;
4853
5250
  const normalizedModulePath = moduleDetails.path.replace(/\\/g, "/");
4854
5251
  const moduleVersion = getModuleVersion(moduleDetails.basedir);
4855
5252
  const patched = applySpecialCasePatch({
@@ -4895,7 +5292,7 @@ var unplugin = (0, import_unplugin.createUnplugin)((options = {}) => {
4895
5292
  var webpackPlugin = unplugin.webpack;
4896
5293
 
4897
5294
  // src/auto-instrumentations/bundler/next.ts
4898
- var requireFromProject = (0, import_node_module.createRequire)((0, import_node_path.join)(process.cwd(), "package.json"));
5295
+ var requireFromProject = (0, import_node_module.createRequire)((0, import_node_path2.join)(process.cwd(), "package.json"));
4899
5296
  var TURBOPACK_RULE_MATCHER = "*.{js,mjs,cjs}";
4900
5297
  function wrapNextjsConfigWithBraintrust(nextConfig) {
4901
5298
  const castNextConfig = nextConfig ?? {};