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
@@ -40,8 +40,10 @@ var GLOBAL_INSTRUMENTATION_HOOKS_KEY = "__braintrust_instrumentation_hooks";
40
40
  var GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION = 1;
41
41
  var GLOBAL_INSTRUMENTATION_HOOKS_REGISTRY_BRAND = "braintrust.global-instrumentation-hooks.registry";
42
42
  var GLOBAL_INSTRUMENTATION_HOOK_BRAND = "braintrust.global-instrumentation-hooks.hook";
43
+ var GLOBAL_INVOCATION_HOOK_BRAND = "braintrust.global-instrumentation-hooks.invocation-hook";
43
44
  var registryBrand = Symbol.for(GLOBAL_INSTRUMENTATION_HOOKS_REGISTRY_BRAND);
44
45
  var hookBrand = Symbol.for(GLOBAL_INSTRUMENTATION_HOOK_BRAND);
46
+ var invocationHookBrand = Symbol.for(GLOBAL_INVOCATION_HOOK_BRAND);
45
47
  var errorReporter;
46
48
  function reportError(error) {
47
49
  try {
@@ -177,12 +179,69 @@ var traceEvents = [
177
179
  "asyncEnd",
178
180
  "error"
179
181
  ];
182
+ function traceInvocation(hook, operator, target, thisArg, args, additional, callbackIndex = -1) {
183
+ const context = {
184
+ ...additional,
185
+ arguments: args,
186
+ self: thisArg
187
+ };
188
+ const invoke = () => hook.invoke(target, thisArg, args, additional);
189
+ if (operator === "traceCallback") {
190
+ return hook.traceCallback(invoke, callbackIndex, context);
191
+ }
192
+ if (operator === "tracePromise") {
193
+ return hook.tracePromise(invoke, context);
194
+ }
195
+ return hook.traceSync(invoke, context);
196
+ }
197
+ var InvocationHook = class {
198
+ interceptors = [];
199
+ get hasInterceptors() {
200
+ return this.interceptors.length > 0;
201
+ }
202
+ intercept(interceptor) {
203
+ if (typeof interceptor !== "function") {
204
+ throw new TypeError("interceptor must be a function");
205
+ }
206
+ this.interceptors = [...this.interceptors, interceptor];
207
+ let active = true;
208
+ return () => {
209
+ if (!active) {
210
+ return;
211
+ }
212
+ active = false;
213
+ const index = this.interceptors.indexOf(interceptor);
214
+ if (index !== -1) {
215
+ this.interceptors = [
216
+ ...this.interceptors.slice(0, index),
217
+ ...this.interceptors.slice(index + 1)
218
+ ];
219
+ }
220
+ };
221
+ }
222
+ invoke(target, thisArg, args, additional) {
223
+ const interceptors = this.interceptors;
224
+ if (interceptors.length === 0) {
225
+ return Reflect.apply(target, thisArg, args);
226
+ }
227
+ let next = target;
228
+ for (let index = interceptors.length - 1; index >= 0; index -= 1) {
229
+ const interceptor = interceptors[index];
230
+ const downstream = next;
231
+ next = function(...nextArgs) {
232
+ return interceptor(downstream, this, nextArgs, additional);
233
+ };
234
+ }
235
+ return Reflect.apply(next, thisArg, args);
236
+ }
237
+ };
180
238
  var TracingHook = class {
181
239
  start;
182
240
  end;
183
241
  asyncStart;
184
242
  asyncEnd;
185
243
  error;
244
+ invocationHook = new InvocationHook();
186
245
  constructor(nameOrChannels) {
187
246
  Object.defineProperty(this, hookBrand, {
188
247
  configurable: false,
@@ -190,6 +249,12 @@ var TracingHook = class {
190
249
  value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,
191
250
  writable: false
192
251
  });
252
+ Object.defineProperty(this, invocationHookBrand, {
253
+ configurable: false,
254
+ enumerable: false,
255
+ value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,
256
+ writable: false
257
+ });
193
258
  if (typeof nameOrChannels === "string") {
194
259
  this.start = new HookChannel(`tracing:${nameOrChannels}:start`);
195
260
  this.end = new HookChannel(`tracing:${nameOrChannels}:end`);
@@ -207,6 +272,26 @@ var TracingHook = class {
207
272
  get hasSubscribers() {
208
273
  return this.start.hasSubscribers || this.end.hasSubscribers || this.asyncStart.hasSubscribers || this.asyncEnd.hasSubscribers || this.error.hasSubscribers;
209
274
  }
275
+ get hasInterceptors() {
276
+ return this.invocationHook.hasInterceptors;
277
+ }
278
+ intercept(interceptor) {
279
+ return this.invocationHook.intercept(interceptor);
280
+ }
281
+ invoke(target, thisArg, args, additional) {
282
+ return this.invocationHook.invoke(target, thisArg, args, additional);
283
+ }
284
+ traceInvocation(operator, target, thisArg, args, additional, callbackIndex = -1) {
285
+ return traceInvocation(
286
+ this,
287
+ operator,
288
+ target,
289
+ thisArg,
290
+ args,
291
+ additional,
292
+ callbackIndex
293
+ );
294
+ }
210
295
  subscribe(handlers) {
211
296
  for (const eventName of traceEvents) {
212
297
  const handler = handlers[eventName];
@@ -428,6 +513,60 @@ function hasTracingHookShape(value) {
428
513
  return false;
429
514
  }
430
515
  }
516
+ function hasInvocationHookShape(value) {
517
+ if (typeof value !== "object" && typeof value !== "function" || value === null) {
518
+ return false;
519
+ }
520
+ try {
521
+ const hook = value;
522
+ return value[invocationHookBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION && typeof hook.hasInterceptors === "boolean" && typeof hook.intercept === "function" && typeof hook.invoke === "function";
523
+ } catch {
524
+ return false;
525
+ }
526
+ }
527
+ function installInvocationHook(value) {
528
+ const hasInvocationHook = hasInvocationHookShape(value);
529
+ const invocationHook = new InvocationHook();
530
+ try {
531
+ if (!hasInvocationHook) {
532
+ Object.defineProperties(value, {
533
+ [invocationHookBrand]: {
534
+ configurable: false,
535
+ enumerable: false,
536
+ value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,
537
+ writable: false
538
+ },
539
+ hasInterceptors: {
540
+ configurable: false,
541
+ enumerable: false,
542
+ get: () => invocationHook.hasInterceptors
543
+ },
544
+ intercept: {
545
+ configurable: false,
546
+ enumerable: false,
547
+ value: invocationHook.intercept.bind(invocationHook),
548
+ writable: false
549
+ },
550
+ invoke: {
551
+ configurable: false,
552
+ enumerable: false,
553
+ value: invocationHook.invoke.bind(invocationHook),
554
+ writable: false
555
+ }
556
+ });
557
+ }
558
+ if (typeof value.traceInvocation !== "function") {
559
+ Object.defineProperty(value, "traceInvocation", {
560
+ configurable: false,
561
+ enumerable: false,
562
+ value: traceInvocation.bind(void 0, value),
563
+ writable: false
564
+ });
565
+ }
566
+ } catch (error) {
567
+ reportError(error);
568
+ }
569
+ }
431
570
  function isCompatibleTracingHook(value) {
432
571
  try {
433
572
  return value[hookBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION && hasTracingHookShape(value);
@@ -514,6 +653,7 @@ function newGlobalTracingChannel(nameOrChannels) {
514
653
  return inertTracingHook;
515
654
  }
516
655
  if (isCompatibleTracingHook(existing)) {
656
+ installInvocationHook(existing);
517
657
  return existing;
518
658
  }
519
659
  if (existing !== void 0) {
@@ -550,8 +690,7 @@ var transforms = {
550
690
  tracingHookDeclaration(state, node) {
551
691
  const {
552
692
  channelName,
553
- module: { name },
554
- operator
693
+ module: { name }
555
694
  } = state;
556
695
  const channelVariable = formatChannelVariable(channelName);
557
696
  const channelGetter = formatChannelGetter(channelName);
@@ -564,7 +703,7 @@ var transforms = {
564
703
  return;
565
704
  }
566
705
  const sharedHookLookup = hasSharedHookLookup ? "" : `
567
- const ${SHARED_HOOK_LOOKUP} = (__bt$hookName, __bt$operator) => {
706
+ const ${SHARED_HOOK_LOOKUP} = (__bt$hookName) => {
568
707
  try {
569
708
  const __bt$hooks = globalThis[${JSON.stringify(
570
709
  GLOBAL_INSTRUMENTATION_HOOKS_KEY
@@ -586,8 +725,7 @@ var transforms = {
586
725
  __bt$hook[Symbol.for(${JSON.stringify(
587
726
  GLOBAL_INSTRUMENTATION_HOOK_BRAND
588
727
  )})] !== ${GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION} ||
589
- typeof __bt$hook.hasSubscribers !== "boolean" ||
590
- typeof __bt$hook[__bt$operator] !== "function"
728
+ typeof __bt$hook.traceInvocation !== "function"
591
729
  ) return undefined;
592
730
  return __bt$hook;
593
731
  } catch {
@@ -600,8 +738,7 @@ var transforms = {
600
738
  let ${channelVariable};
601
739
  const ${channelGetter} = () =>
602
740
  ${channelVariable} ??= ${SHARED_HOOK_LOOKUP}(
603
- ${JSON.stringify(`orchestrion:${name}:${channelName}`)},
604
- ${JSON.stringify(operator)}
741
+ ${JSON.stringify(`orchestrion:${name}:${channelName}`)}
605
742
  );
606
743
  `;
607
744
  const sharedHookLookupIndex = node.body.findIndex(
@@ -676,28 +813,18 @@ function traceInstanceMethod(state, node, program) {
676
813
  ctor.value.body.body.push(...ctorBody);
677
814
  }
678
815
  function wrap(state, node) {
679
- const { operator, moduleVersion } = state;
680
- const wrapper = operator === "traceCallback" ? wrapCallback(state) : operator === "tracePromise" ? wrapPromise(state) : wrapSync(state);
816
+ const wrapper = wrapInvocation(state);
681
817
  const block = wrapper.body[0].body;
682
818
  const common = (0, import_meriyah.parse)(
683
819
  node.type === "ArrowFunctionExpression" ? `
684
- const __bt$ctx = {
685
- arguments,
686
- moduleVersion: ${JSON.stringify(moduleVersion)}
687
- };
688
- const __bt$traced = () => {
820
+ const __bt$target = (...__bt$args) => {
689
821
  const __bt$wrapped = () => {};
690
- return __bt$wrapped(...arguments);
822
+ return __bt$wrapped(...__bt$args);
691
823
  };
692
824
  ` : `
693
- const __bt$ctx = {
694
- arguments,
695
- self: this,
696
- moduleVersion: ${JSON.stringify(moduleVersion)}
697
- };
698
- const __bt$traced = () => {
825
+ const __bt$target = function (...__bt$args) {
699
826
  const __bt$wrapped = () => {};
700
- return __bt$wrapped.apply(this, arguments);
827
+ return __bt$wrapped.apply(this, __bt$args);
701
828
  };
702
829
  `
703
830
  ).body;
@@ -739,49 +866,25 @@ function wrapSuper(node) {
739
866
  node.body.body.unshift((0, import_meriyah.parse)("const __bt$super = {}").body[0]);
740
867
  }
741
868
  }
742
- function wrapCallback(state) {
743
- const {
744
- channelName,
745
- functionQuery: { callbackIndex = -1 }
746
- } = state;
869
+ function wrapInvocation(state) {
870
+ const { channelName, moduleVersion, operator, functionQuery } = state;
747
871
  const channelGetter = formatChannelGetter(channelName);
872
+ const callbackIndex = functionQuery.callbackIndex ?? -1;
748
873
  return (0, import_meriyah.parse)(`
749
874
  function wrapper () {
750
875
  const __bt$hook = ${channelGetter}();
751
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
752
- __bt$ctx.self ??= this;
753
- return __bt$hook.traceCallback(
754
- __bt$traced,
755
- ${callbackIndex},
756
- __bt$ctx
876
+ if (!__bt$hook) return __bt$target.apply(this, arguments);
877
+ return __bt$hook.traceInvocation(
878
+ ${JSON.stringify(operator)},
879
+ __bt$target,
880
+ this,
881
+ arguments,
882
+ { moduleVersion: ${JSON.stringify(moduleVersion)} },
883
+ ${callbackIndex}
757
884
  );
758
885
  }
759
886
  `);
760
887
  }
761
- function wrapPromise(state) {
762
- const { channelName } = state;
763
- const channelGetter = formatChannelGetter(channelName);
764
- return (0, import_meriyah.parse)(`
765
- function wrapper () {
766
- const __bt$hook = ${channelGetter}();
767
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
768
- __bt$ctx.self ??= this;
769
- return __bt$hook.tracePromise(__bt$traced, __bt$ctx);
770
- }
771
- `);
772
- }
773
- function wrapSync(state) {
774
- const { channelName } = state;
775
- const channelGetter = formatChannelGetter(channelName);
776
- return (0, import_meriyah.parse)(`
777
- function wrapper () {
778
- const __bt$hook = ${channelGetter}();
779
- if (!__bt$hook?.hasSubscribers) return __bt$traced();
780
- __bt$ctx.self ??= this;
781
- return __bt$hook.traceSync(__bt$traced, __bt$ctx);
782
- }
783
- `);
784
- }
785
888
 
786
889
  // src/auto-instrumentations/orchestrion-js/transformer.ts
787
890
  var Transformer = class {
@@ -1056,6 +1159,7 @@ var envIntegrationAliases = {
1056
1159
  cloudflareaichat: "cloudflareAIChat",
1057
1160
  "cloudflare-ai-chat": "cloudflareAIChat",
1058
1161
  "@cloudflare/ai-chat": "cloudflareAIChat",
1162
+ cloudflarethink: "cloudflareThink",
1059
1163
  cursor: "cursor",
1060
1164
  "cursor-sdk": "cursorSDK",
1061
1165
  cursorsdk: "cursorSDK",
@@ -1076,6 +1180,7 @@ var envIntegrationAliases = {
1076
1180
  openrouteragent: "openrouterAgent",
1077
1181
  "openrouter-agent": "openrouterAgent",
1078
1182
  mistral: "mistral",
1183
+ ollama: "ollama",
1079
1184
  googleadk: "googleADK",
1080
1185
  "google-adk": "googleADK",
1081
1186
  cohere: "cohere",
@@ -1096,7 +1201,10 @@ var envIntegrationAliases = {
1096
1201
  "langchain-js": "langchain",
1097
1202
  "@langchain": "langchain",
1098
1203
  langgraph: "langgraph",
1099
- langsmith: "langsmith"
1204
+ langsmith: "langsmith",
1205
+ voyage: "voyageai",
1206
+ "voyage-ai": "voyageai",
1207
+ voyageai: "voyageai"
1100
1208
  };
1101
1209
  function readDisabledInstrumentationEnvConfig(disabledList) {
1102
1210
  const integrations = {};
@@ -1161,11 +1269,21 @@ function defineChannels(pkg, channels, options) {
1161
1269
  const tracingChannel2 = () => isomorph_default.newTracingChannel(
1162
1270
  fullChannelName
1163
1271
  );
1272
+ const intercept2 = (interceptor) => {
1273
+ const hook = tracingChannel2();
1274
+ return typeof hook.intercept === "function" ? hook.intercept(interceptor) : () => {
1275
+ };
1276
+ };
1164
1277
  return [
1165
1278
  key,
1166
1279
  {
1167
1280
  ...asyncSpec,
1168
1281
  instrumentationName,
1282
+ intercept: intercept2,
1283
+ invoke: (target, thisArg, args, additional) => {
1284
+ const hook = tracingChannel2();
1285
+ return typeof hook.invoke === "function" ? hook.invoke(target, thisArg, args, additional) : Reflect.apply(target, thisArg, args);
1286
+ },
1169
1287
  tracingChannel: tracingChannel2,
1170
1288
  tracePromise: (fn, context) => tracingChannel2().tracePromise(
1171
1289
  fn,
@@ -1179,11 +1297,21 @@ function defineChannels(pkg, channels, options) {
1179
1297
  const tracingChannel = () => isomorph_default.newTracingChannel(
1180
1298
  fullChannelName
1181
1299
  );
1300
+ const intercept = (interceptor) => {
1301
+ const hook = tracingChannel();
1302
+ return typeof hook.intercept === "function" ? hook.intercept(interceptor) : () => {
1303
+ };
1304
+ };
1182
1305
  return [
1183
1306
  key,
1184
1307
  {
1185
1308
  ...syncSpec,
1186
1309
  instrumentationName,
1310
+ intercept,
1311
+ invoke: (target, thisArg, args, additional) => {
1312
+ const hook = tracingChannel();
1313
+ return typeof hook.invoke === "function" ? hook.invoke(target, thisArg, args, additional) : Reflect.apply(target, thisArg, args);
1314
+ },
1187
1315
  tracingChannel,
1188
1316
  traceSync: (fn, context) => tracingChannel().traceSync(
1189
1317
  fn,
@@ -1205,6 +1333,7 @@ var INSTRUMENTATION_NAMES = {
1205
1333
  CLAUDE_AGENT_SDK: "claude-agent-sdk",
1206
1334
  CLOUDFLARE_AI_CHAT: "cloudflare-ai-chat",
1207
1335
  CLOUDFLARE_AGENTS: "cloudflare-agents",
1336
+ CLOUDFLARE_THINK: "cloudflare-think",
1208
1337
  COHERE: "cohere",
1209
1338
  CURSOR_SDK: "cursor-sdk",
1210
1339
  EVE: "eve",
@@ -1219,13 +1348,15 @@ var INSTRUMENTATION_NAMES = {
1219
1348
  LANGSMITH: "langsmith",
1220
1349
  MASTRA: "mastra",
1221
1350
  MISTRAL: "mistral",
1351
+ OLLAMA: "ollama",
1222
1352
  OPENAI: "openai",
1223
1353
  OPENAI_AGENTS: "openai-agents",
1224
1354
  OPENAI_CODEX: "openai-codex",
1225
1355
  OPENROUTER: "openrouter",
1226
1356
  OPENROUTER_AGENT: "openrouter-agent",
1227
1357
  PI_CODING_AGENT: "pi-coding-agent",
1228
- STRANDS_AGENT_SDK: "strands-agent-sdk"
1358
+ STRANDS_AGENT_SDK: "strands-agent-sdk",
1359
+ VOYAGEAI: "voyageai"
1229
1360
  };
1230
1361
 
1231
1362
  // src/instrumentation/plugins/ai-sdk-channels.ts
@@ -1735,6 +1866,14 @@ var anthropicChannels = defineChannels(
1735
1866
  betaMessagesToolRunner: channel({
1736
1867
  channelName: "beta.messages.toolRunner",
1737
1868
  kind: "sync-stream"
1869
+ }),
1870
+ betaSessionsEventsStream: channel({
1871
+ channelName: "beta.sessions.events.stream",
1872
+ kind: "async"
1873
+ }),
1874
+ betaSessionsThreadsEventsStream: channel({
1875
+ channelName: "beta.sessions.threads.events.stream",
1876
+ kind: "async"
1738
1877
  })
1739
1878
  },
1740
1879
  { instrumentationName: INSTRUMENTATION_NAMES.ANTHROPIC }
@@ -1853,7 +1992,40 @@ var anthropicConfigs = [
1853
1992
  methodName: "toolRunner",
1854
1993
  kind: "Sync"
1855
1994
  }
1856
- }
1995
+ },
1996
+ // Managed Agents Sessions event streams are discovered automatically, but
1997
+ // remain passive until the user calls collectAnthropicSession() on the
1998
+ // returned stream.
1999
+ ...["mjs", "js"].map(
2000
+ (extension) => ({
2001
+ channelName: anthropicChannels.betaSessionsEventsStream.channelName,
2002
+ module: {
2003
+ name: "@anthropic-ai/sdk",
2004
+ versionRange: ">=0.86.0",
2005
+ filePath: `resources/beta/sessions/events.${extension}`
2006
+ },
2007
+ functionQuery: {
2008
+ className: "Events",
2009
+ methodName: "stream",
2010
+ kind: "Async"
2011
+ }
2012
+ })
2013
+ ),
2014
+ ...["mjs", "js"].map(
2015
+ (extension) => ({
2016
+ channelName: anthropicChannels.betaSessionsThreadsEventsStream.channelName,
2017
+ module: {
2018
+ name: "@anthropic-ai/sdk",
2019
+ versionRange: ">=0.86.0",
2020
+ filePath: `resources/beta/sessions/threads/events.${extension}`
2021
+ },
2022
+ functionQuery: {
2023
+ className: "Events",
2024
+ methodName: "stream",
2025
+ kind: "Async"
2026
+ }
2027
+ })
2028
+ )
1857
2029
  ];
1858
2030
 
1859
2031
  // src/instrumentation/plugins/bedrock-runtime-channels.ts
@@ -2050,6 +2222,36 @@ var cloudflareAgentsConfigs = [
2050
2222
  }
2051
2223
  ];
2052
2224
 
2225
+ // src/instrumentation/plugins/cloudflare-think-channels.ts
2226
+ var cloudflareThinkChannels = defineChannels(
2227
+ "@cloudflare/think",
2228
+ {
2229
+ runInferenceLoop: channel({
2230
+ channelName: "Think.runInferenceLoop",
2231
+ kind: "async"
2232
+ })
2233
+ },
2234
+ { instrumentationName: INSTRUMENTATION_NAMES.CLOUDFLARE_THINK }
2235
+ );
2236
+
2237
+ // src/auto-instrumentations/configs/cloudflare-think.ts
2238
+ var cloudflareThinkVersionRange = ">=0.13.0 <0.14.0";
2239
+ var cloudflareThinkConfigs = [
2240
+ {
2241
+ channelName: cloudflareThinkChannels.runInferenceLoop.channelName,
2242
+ module: {
2243
+ name: "@cloudflare/think",
2244
+ versionRange: cloudflareThinkVersionRange,
2245
+ filePath: "dist/think.js"
2246
+ },
2247
+ functionQuery: {
2248
+ className: "Think",
2249
+ methodName: "_runInferenceLoop",
2250
+ kind: "Async"
2251
+ }
2252
+ }
2253
+ ];
2254
+
2053
2255
  // src/instrumentation/plugins/cohere-channels.ts
2054
2256
  var cohereChannels = defineChannels(
2055
2257
  "cohere-ai",
@@ -3933,6 +4135,51 @@ var mistralConfigs = [
3933
4135
  }
3934
4136
  ];
3935
4137
 
4138
+ // src/instrumentation/plugins/ollama-channels.ts
4139
+ var ollamaChannels = defineChannels(
4140
+ "ollama",
4141
+ {
4142
+ chat: channel({
4143
+ channelName: "chat",
4144
+ kind: "async"
4145
+ }),
4146
+ generate: channel({
4147
+ channelName: "generate",
4148
+ kind: "async"
4149
+ }),
4150
+ embed: channel({
4151
+ channelName: "embed",
4152
+ kind: "async"
4153
+ })
4154
+ },
4155
+ { instrumentationName: INSTRUMENTATION_NAMES.OLLAMA }
4156
+ );
4157
+
4158
+ // src/auto-instrumentations/configs/ollama.ts
4159
+ var methods = [
4160
+ ["chat", ollamaChannels.chat.channelName],
4161
+ ["generate", ollamaChannels.generate.channelName],
4162
+ ["embed", ollamaChannels.embed.channelName]
4163
+ ];
4164
+ var implementationFiles = ["dist/browser.mjs", "dist/browser.cjs"];
4165
+ var ollamaConfigs = [
4166
+ ...implementationFiles.flatMap(
4167
+ (filePath) => methods.map(([methodName, channelName]) => ({
4168
+ channelName,
4169
+ module: {
4170
+ name: "ollama",
4171
+ versionRange: ">=0.6.0 <0.7.0",
4172
+ filePath
4173
+ },
4174
+ functionQuery: {
4175
+ className: "Ollama",
4176
+ methodName,
4177
+ kind: "Async"
4178
+ }
4179
+ }))
4180
+ )
4181
+ ];
4182
+
3936
4183
  // src/instrumentation/plugins/openai-agents-channels.ts
3937
4184
  var openAIAgentsCoreChannels = defineChannels(
3938
4185
  "@openai/agents-core",
@@ -4342,6 +4589,19 @@ var openRouterConfigs = [
4342
4589
  kind: "Async"
4343
4590
  }
4344
4591
  },
4592
+ {
4593
+ channelName: openRouterChannels.betaResponsesSend.channelName,
4594
+ module: {
4595
+ name: "@openrouter/sdk",
4596
+ versionRange: ">=1.1.2 <2.0.0",
4597
+ filePath: "esm/sdk/betaresponses.js"
4598
+ },
4599
+ functionQuery: {
4600
+ className: "BetaResponses",
4601
+ methodName: "send",
4602
+ kind: "Async"
4603
+ }
4604
+ },
4345
4605
  {
4346
4606
  channelName: openRouterChannels.callModel.channelName,
4347
4607
  module: {
@@ -4487,6 +4747,77 @@ var strandsAgentSDKConfigs = [
4487
4747
  }
4488
4748
  ];
4489
4749
 
4750
+ // src/instrumentation/plugins/voyageai-channels.ts
4751
+ var voyageAIChannels = defineChannels(
4752
+ "voyageai",
4753
+ {
4754
+ embed: channel({
4755
+ channelName: "embed",
4756
+ kind: "async"
4757
+ }),
4758
+ multimodalEmbed: channel({
4759
+ channelName: "multimodalEmbed",
4760
+ kind: "async"
4761
+ }),
4762
+ rerank: channel({
4763
+ channelName: "rerank",
4764
+ kind: "async"
4765
+ }),
4766
+ contextualizedEmbed: channel({
4767
+ channelName: "contextualizedEmbed",
4768
+ kind: "async"
4769
+ })
4770
+ },
4771
+ { instrumentationName: INSTRUMENTATION_NAMES.VOYAGEAI }
4772
+ );
4773
+
4774
+ // src/auto-instrumentations/configs/voyageai.ts
4775
+ var GENERATED_CLIENT_MODULES = [
4776
+ "dist/cjs/Client.js",
4777
+ "dist/esm/Client.mjs"
4778
+ ];
4779
+ var generatedClientOperations = [
4780
+ {
4781
+ channelName: voyageAIChannels.embed.channelName,
4782
+ methodName: "embed",
4783
+ versionRange: ">=0.2.0 <1.0.0"
4784
+ },
4785
+ {
4786
+ channelName: voyageAIChannels.multimodalEmbed.channelName,
4787
+ methodName: "multimodalEmbed",
4788
+ versionRange: ">=0.2.0 <1.0.0"
4789
+ },
4790
+ {
4791
+ channelName: voyageAIChannels.rerank.channelName,
4792
+ methodName: "rerank",
4793
+ versionRange: ">=0.2.0 <1.0.0"
4794
+ },
4795
+ {
4796
+ channelName: voyageAIChannels.contextualizedEmbed.channelName,
4797
+ methodName: "contextualizedEmbed",
4798
+ versionRange: ">=0.2.0 <1.0.0"
4799
+ }
4800
+ ];
4801
+ var voyageAIConfigs = [
4802
+ ...GENERATED_CLIENT_MODULES.flatMap(
4803
+ (filePath) => generatedClientOperations.map(
4804
+ ({ channelName, methodName, versionRange: versionRange2 }) => ({
4805
+ channelName,
4806
+ module: {
4807
+ name: "voyageai",
4808
+ versionRange: versionRange2,
4809
+ filePath
4810
+ },
4811
+ functionQuery: {
4812
+ className: "VoyageAIClient",
4813
+ methodName,
4814
+ kind: "Async"
4815
+ }
4816
+ })
4817
+ )
4818
+ )
4819
+ ];
4820
+
4490
4821
  // src/auto-instrumentations/configs/all.ts
4491
4822
  var defaultInstrumentationConfigGroups = [
4492
4823
  { integrations: ["openai"], configs: openaiConfigs },
@@ -4515,6 +4846,10 @@ var defaultInstrumentationConfigGroups = [
4515
4846
  integrations: ["cloudflareAgents"],
4516
4847
  configs: cloudflareAgentsConfigs
4517
4848
  },
4849
+ {
4850
+ integrations: ["cloudflareThink"],
4851
+ configs: cloudflareThinkConfigs
4852
+ },
4518
4853
  { integrations: ["cursor", "cursorSDK"], configs: cursorSDKConfigs },
4519
4854
  {
4520
4855
  integrations: ["openAIAgents"],
@@ -4539,6 +4874,7 @@ var defaultInstrumentationConfigGroups = [
4539
4874
  configs: openRouterAgentConfigs
4540
4875
  },
4541
4876
  { integrations: ["mistral"], configs: mistralConfigs },
4877
+ { integrations: ["ollama"], configs: ollamaConfigs },
4542
4878
  { integrations: ["googleADK"], configs: googleADKConfigs },
4543
4879
  { integrations: ["cohere"], configs: cohereConfigs },
4544
4880
  { integrations: ["groq"], configs: groqConfigs },
@@ -4561,6 +4897,10 @@ var defaultInstrumentationConfigGroups = [
4561
4897
  {
4562
4898
  integrations: ["flue"],
4563
4899
  configs: flueConfigs
4900
+ },
4901
+ {
4902
+ integrations: ["voyageai"],
4903
+ configs: voyageAIConfigs
4564
4904
  }
4565
4905
  // Note: `@mastra/core` is not listed here because its instrumentation
4566
4906
  // doesn't go through the AST `code-transformer` matcher — Mastra's
@@ -4794,6 +5134,49 @@ function applySpecialCasePatch(input) {
4794
5134
  return null;
4795
5135
  }
4796
5136
 
5137
+ // src/auto-instrumentations/loader/get-package-version.ts
5138
+ var import_node_fs = require("fs");
5139
+ var import_node_path = require("path");
5140
+ var packageNames = /* @__PURE__ */ new Map();
5141
+ function readPackageJson(baseDir) {
5142
+ try {
5143
+ const packageJsonPath = (0, import_node_path.join)(baseDir, "package.json");
5144
+ const jsonFile = (0, import_node_fs.readFileSync)(packageJsonPath, "utf8");
5145
+ return JSON.parse(jsonFile);
5146
+ } catch {
5147
+ return void 0;
5148
+ }
5149
+ }
5150
+ function resolvePackageBaseDir(baseDir) {
5151
+ try {
5152
+ return (0, import_node_fs.realpathSync)(baseDir);
5153
+ } catch {
5154
+ return baseDir;
5155
+ }
5156
+ }
5157
+ function readPackageJsonWithFallback(baseDir) {
5158
+ const packageJson = readPackageJson(baseDir);
5159
+ if (packageJson) {
5160
+ return packageJson;
5161
+ }
5162
+ const resolvedBaseDir = resolvePackageBaseDir(baseDir);
5163
+ if (resolvedBaseDir === baseDir) {
5164
+ return void 0;
5165
+ }
5166
+ return readPackageJson(resolvedBaseDir);
5167
+ }
5168
+ function getPackageName(baseDir) {
5169
+ if (packageNames.has(baseDir)) {
5170
+ return packageNames.get(baseDir);
5171
+ }
5172
+ const packageJson = readPackageJsonWithFallback(baseDir);
5173
+ if (typeof packageJson?.name === "string") {
5174
+ packageNames.set(baseDir, packageJson.name);
5175
+ return packageJson.name;
5176
+ }
5177
+ return void 0;
5178
+ }
5179
+
4797
5180
  // src/auto-instrumentations/bundler/webpack-loader.ts
4798
5181
  function getModuleVersion(basedir) {
4799
5182
  try {
@@ -4844,7 +5227,7 @@ function codeTransformerLoader(code, inputSourceMap) {
4844
5227
  if (!moduleDetails) {
4845
5228
  return callback(null, code, inputSourceMap);
4846
5229
  }
4847
- const moduleName = moduleDetails.name;
5230
+ const moduleName = getPackageName(moduleDetails.basedir) ?? moduleDetails.name;
4848
5231
  const normalizedModulePath = moduleDetails.path.replace(/\\/g, "/");
4849
5232
  const patched = applySpecialCasePatch({
4850
5233
  packageName: moduleName,