braintrust 3.12.0 → 3.13.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 (49) hide show
  1. package/dev/dist/index.d.mts +25 -6
  2. package/dev/dist/index.d.ts +25 -6
  3. package/dev/dist/index.js +134 -43
  4. package/dev/dist/index.mjs +113 -22
  5. package/dist/apply-auto-instrumentation.js +170 -170
  6. package/dist/apply-auto-instrumentation.mjs +1 -1
  7. package/dist/auto-instrumentations/bundler/esbuild.cjs +1 -0
  8. package/dist/auto-instrumentations/bundler/esbuild.mjs +2 -2
  9. package/dist/auto-instrumentations/bundler/next.cjs +1 -0
  10. package/dist/auto-instrumentations/bundler/next.mjs +3 -3
  11. package/dist/auto-instrumentations/bundler/rollup.cjs +1 -0
  12. package/dist/auto-instrumentations/bundler/rollup.mjs +2 -2
  13. package/dist/auto-instrumentations/bundler/vite.cjs +1 -0
  14. package/dist/auto-instrumentations/bundler/vite.mjs +2 -2
  15. package/dist/auto-instrumentations/bundler/webpack-loader.cjs +1 -0
  16. package/dist/auto-instrumentations/bundler/webpack.cjs +1 -0
  17. package/dist/auto-instrumentations/bundler/webpack.mjs +3 -3
  18. package/dist/auto-instrumentations/{chunk-2DPA74KK.mjs → chunk-E5DUYJWK.mjs} +1 -0
  19. package/dist/auto-instrumentations/{chunk-73BZUKVI.mjs → chunk-GJOO4ESL.mjs} +1 -1
  20. package/dist/auto-instrumentations/{chunk-AFXRW7I7.mjs → chunk-WFEUJACP.mjs} +1 -1
  21. package/dist/auto-instrumentations/hook.mjs +1 -0
  22. package/dist/auto-instrumentations/index.cjs +1 -0
  23. package/dist/auto-instrumentations/index.mjs +1 -1
  24. package/dist/browser.d.mts +149 -21
  25. package/dist/browser.d.ts +149 -21
  26. package/dist/browser.js +114 -24
  27. package/dist/browser.mjs +114 -24
  28. package/dist/{chunk-BW4DF4CY.js → chunk-26JGOELH.js} +1 -0
  29. package/dist/{chunk-MSLBGITU.mjs → chunk-75IQCUB2.mjs} +1 -0
  30. package/dist/cli.js +121 -44
  31. package/dist/edge-light.d.mts +1 -1
  32. package/dist/edge-light.d.ts +1 -1
  33. package/dist/edge-light.js +114 -24
  34. package/dist/edge-light.mjs +114 -24
  35. package/dist/index.d.mts +149 -21
  36. package/dist/index.d.ts +149 -21
  37. package/dist/index.js +529 -394
  38. package/dist/index.mjs +161 -26
  39. package/dist/instrumentation/index.d.mts +40 -3
  40. package/dist/instrumentation/index.d.ts +40 -3
  41. package/dist/instrumentation/index.js +15 -2
  42. package/dist/instrumentation/index.mjs +15 -2
  43. package/dist/workerd.d.mts +1 -1
  44. package/dist/workerd.d.ts +1 -1
  45. package/dist/workerd.js +114 -24
  46. package/dist/workerd.mjs +114 -24
  47. package/package.json +3 -17
  48. package/util/dist/index.d.mts +3 -1
  49. package/util/dist/index.d.ts +3 -1
package/dist/cli.js CHANGED
@@ -1232,7 +1232,7 @@ var require_package = __commonJS({
1232
1232
  "package.json"(exports2, module2) {
1233
1233
  module2.exports = {
1234
1234
  name: "braintrust",
1235
- version: "3.12.0",
1235
+ version: "3.13.0",
1236
1236
  description: "SDK for integrating Braintrust",
1237
1237
  repository: {
1238
1238
  type: "git",
@@ -1370,29 +1370,16 @@ var require_package = __commonJS({
1370
1370
  test: 'vitest run --exclude "src/wrappers/**/*.test.ts" --exclude "src/otel/**/*.test.ts" --exclude "smoke/**/*.test.ts" --exclude "src/zod/**/*.test.ts" --exclude "tests/api-compatibility/**"',
1371
1371
  "test:core": "pnpm prune && pnpm test",
1372
1372
  "test:checks": "pnpm run test:core && pnpm run test:vitest",
1373
- "test:external": "pnpm run test:external:sequential && node scripts/run-parallel.mjs test:external:ai-sdk-v5 test:external:ai-sdk-v6 test:external:claude-agent-sdk",
1374
- "test:external:sequential": "pnpm run test:external:openai && pnpm run test:external:anthropic && pnpm run test:external:google-genai",
1375
- "test:external:openai": "bash scripts/test-provider.sh test:openai openai",
1376
- "test:external:anthropic": "bash scripts/test-provider.sh test:anthropic @anthropic-ai/sdk",
1377
- "test:external:google-genai": "bash scripts/test-provider.sh test:google-genai @google/genai",
1378
- "test:external:ai-sdk": "pnpm run test:external:ai-sdk-v5 && pnpm run test:external:ai-sdk-v6",
1379
- "test:external:ai-sdk-v5": "cd src/wrappers/ai-sdk/tests/v5 && pnpm install --ignore-workspace && pnpm test",
1380
- "test:external:ai-sdk-v6": "cd src/wrappers/ai-sdk/tests/v6 && pnpm install --ignore-workspace && pnpm test",
1381
- "test:external:claude-agent-sdk": "cd src/wrappers/claude-agent-sdk && pnpm install && pnpm test",
1382
- "test:all": "pnpm run test:checks && pnpm run test:external",
1373
+ "test:all": "pnpm run test:checks",
1383
1374
  "test:api-compat": "vitest run tests/api-compatibility/api-compatibility.test.ts",
1384
- "test:anthropic": "vitest run src/wrappers/anthropic.test.ts",
1385
- "test:openai": "vitest run src/wrappers/oai.test.ts",
1386
1375
  "test:otel": "vitest run --dir src/otel",
1387
1376
  "test:otel-no-deps": "vitest run src/otel/otel-no-deps.test.ts --reporter=verbose",
1388
- "test:google-genai": "vitest run src/wrappers/google-genai.test.ts",
1389
1377
  "test:ai-sdk-v1": "vitest run src/wrappers/ai-sdk-v1.test.ts",
1390
1378
  "test:ai-sdk-v2": "vitest run src/wrappers/ai-sdk-v2.test.ts src/wrappers/ai-sdk-v1.test.ts",
1391
1379
  "test:ai-sdk-v3": "vitest run src/wrappers/ai-sdk-v3.test.ts",
1392
1380
  "test:zod-v3": "vitest run src/zod/zod-v3-serialization.test.ts",
1393
1381
  "test:zod-v4": "vitest run src/zod/zod-v4-serialization.test.ts",
1394
1382
  "test:mastra": "vitest run src/wrappers/mastra.test.ts",
1395
- "test:claude-agent-sdk": "pnpm --filter @braintrust/claude-agent-sdk-tests test",
1396
1383
  "test:vitest": "pnpm --filter @braintrust/vitest-wrapper-tests test",
1397
1384
  "test:output": "tsx scripts/test-output.ts --with-comparison --with-metrics --with-progress",
1398
1385
  bench: "tsx src/queue.bench.ts",
@@ -1423,7 +1410,6 @@ var require_package = __commonJS({
1423
1410
  "@types/node": "^20.10.5",
1424
1411
  "@types/pluralize": "^0.0.30",
1425
1412
  "@types/tar": "^6.1.13",
1426
- "@types/uuid": "^9.0.7",
1427
1413
  "@typescript-eslint/eslint-plugin": "^8.49.0",
1428
1414
  "@typescript-eslint/parser": "^8.49.0",
1429
1415
  ai: "^6.0.0",
@@ -1470,7 +1456,7 @@ var require_package = __commonJS({
1470
1456
  "source-map": "^0.7.4",
1471
1457
  "termi-link": "^1.0.1",
1472
1458
  unplugin: "^2.3.5",
1473
- uuid: "^9.0.1",
1459
+ uuid: "^11.1.1",
1474
1460
  "zod-to-json-schema": "^3.25.0"
1475
1461
  },
1476
1462
  peerDependencies: {
@@ -1494,7 +1480,7 @@ __export(cli_exports, {
1494
1480
  });
1495
1481
  module.exports = __toCommonJS(cli_exports);
1496
1482
  var esbuild = __toESM(require("esbuild"));
1497
- var dotenv2 = __toESM(require("dotenv"));
1483
+ var dotenv3 = __toESM(require("dotenv"));
1498
1484
  var import_node_fs2 = __toESM(require("node:fs"));
1499
1485
  var import_node_os = __toESM(require("node:os"));
1500
1486
  var import_node_path5 = __toESM(require("node:path"));
@@ -1593,6 +1579,7 @@ var iso = {
1593
1579
  getRepoInfo: async (_settings) => void 0,
1594
1580
  getPastNAncestors: async () => [],
1595
1581
  getEnv: (_name) => void 0,
1582
+ getBraintrustApiKey: async () => void 0,
1596
1583
  getCallerLocation: () => void 0,
1597
1584
  newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),
1598
1585
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -8470,10 +8457,11 @@ async function login(options = {}) {
8470
8457
  async function loginToState(options = {}) {
8471
8458
  const {
8472
8459
  appUrl = isomorph_default.getEnv("BRAINTRUST_APP_URL") || "https://www.braintrust.dev",
8473
- apiKey = isomorph_default.getEnv("BRAINTRUST_API_KEY"),
8460
+ apiKey: apiKeyArg,
8474
8461
  orgName = isomorph_default.getEnv("BRAINTRUST_ORG_NAME"),
8475
8462
  fetch: fetch2 = globalThis.fetch
8476
8463
  } = options || {};
8464
+ const apiKey = apiKeyArg !== void 0 ? apiKeyArg : await isomorph_default.getBraintrustApiKey();
8477
8465
  const appPublicUrl = isomorph_default.getEnv("BRAINTRUST_APP_PUBLIC_URL") || appUrl;
8478
8466
  const state = new BraintrustState(options);
8479
8467
  state.resetLoginInfo();
@@ -9492,9 +9480,15 @@ var SpanImpl = class _SpanImpl {
9492
9480
  const cachedSpan = {
9493
9481
  input: partialRecord.input,
9494
9482
  output: partialRecord.output,
9483
+ expected: partialRecord.expected,
9484
+ error: partialRecord.error,
9485
+ scores: partialRecord.scores,
9486
+ metrics: partialRecord.metrics,
9495
9487
  metadata: partialRecord.metadata,
9488
+ tags: partialRecord.tags,
9496
9489
  span_id: this._spanId,
9497
9490
  span_parents: this._spanParents,
9491
+ is_root: this._spanId === this._rootSpanId,
9498
9492
  span_attributes: partialRecord.span_attributes
9499
9493
  };
9500
9494
  this._state.spanCache.queueWrite(
@@ -9830,6 +9824,7 @@ var Dataset2 = class extends ObjectFetcher {
9830
9824
  metadata,
9831
9825
  tags,
9832
9826
  output,
9827
+ origin,
9833
9828
  isMerge
9834
9829
  }) {
9835
9830
  return new LazyValue(async () => {
@@ -9844,6 +9839,7 @@ var Dataset2 = class extends ObjectFetcher {
9844
9839
  created: !isMerge ? (/* @__PURE__ */ new Date()).toISOString() : void 0,
9845
9840
  //if we're merging/updating an event we will not add this ts
9846
9841
  metadata,
9842
+ origin,
9847
9843
  ...!!isMerge ? {
9848
9844
  [IS_MERGE_FIELD]: true
9849
9845
  } : {}
@@ -9863,6 +9859,7 @@ var Dataset2 = class extends ObjectFetcher {
9863
9859
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
9864
9860
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
9865
9861
  * JSON-serializable type, but its keys must be strings.
9862
+ * @param event.origin (Optional) a reference to the source object this dataset record was derived from.
9866
9863
  * @param event.id (Optional) a unique identifier for the event. If you don't provide one, Braintrust will generate one for you.
9867
9864
  * @param event.output: (Deprecated) The output of your application. Use `expected` instead.
9868
9865
  * @returns The `id` of the logged record.
@@ -9873,7 +9870,8 @@ var Dataset2 = class extends ObjectFetcher {
9873
9870
  metadata,
9874
9871
  tags,
9875
9872
  id,
9876
- output
9873
+ output,
9874
+ origin
9877
9875
  }) {
9878
9876
  this.validateEvent({ metadata, expected, output, tags });
9879
9877
  const rowId = id || (0, import_uuid2.v4)();
@@ -9885,6 +9883,7 @@ var Dataset2 = class extends ObjectFetcher {
9885
9883
  metadata,
9886
9884
  tags,
9887
9885
  output,
9886
+ origin,
9888
9887
  isMerge: false
9889
9888
  })
9890
9889
  );
@@ -11706,8 +11705,12 @@ async function invoke(args) {
11706
11705
 
11707
11706
  // src/trace.ts
11708
11707
  var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
11709
- constructor(objectType, _objectId, rootSpanId, _state, spanTypeFilter) {
11710
- const filterExpr = _SpanFetcher.buildFilter(rootSpanId, spanTypeFilter);
11708
+ constructor(objectType, _objectId, rootSpanId, _state, spanTypeFilter, includeScorers = false) {
11709
+ const filterExpr = _SpanFetcher.buildFilter(
11710
+ rootSpanId,
11711
+ spanTypeFilter,
11712
+ includeScorers
11713
+ );
11711
11714
  super(objectType, void 0, void 0, {
11712
11715
  filter: filterExpr
11713
11716
  });
@@ -11716,16 +11719,17 @@ var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
11716
11719
  this._state = _state;
11717
11720
  this.spanTypeFilter = spanTypeFilter;
11718
11721
  }
11719
- static buildFilter(rootSpanId, spanTypeFilter) {
11722
+ static buildFilter(rootSpanId, spanTypeFilter, includeScorers = false) {
11720
11723
  const children = [
11721
11724
  // Base filter: root_span_id = 'value'
11722
11725
  {
11723
11726
  op: "eq",
11724
11727
  left: { op: "ident", name: ["root_span_id"] },
11725
11728
  right: { op: "literal", value: rootSpanId }
11726
- },
11727
- // Exclude span_attributes.purpose = 'score'
11728
- {
11729
+ }
11730
+ ];
11731
+ if (!includeScorers) {
11732
+ children.push({
11729
11733
  op: "or",
11730
11734
  children: [
11731
11735
  {
@@ -11738,8 +11742,8 @@ var SpanFetcher = class _SpanFetcher extends ObjectFetcher {
11738
11742
  right: { op: "literal", value: "scorer" }
11739
11743
  }
11740
11744
  ]
11741
- }
11742
- ];
11745
+ });
11746
+ }
11743
11747
  if (spanTypeFilter && spanTypeFilter.length > 0) {
11744
11748
  children.push({
11745
11749
  op: "in",
@@ -11765,35 +11769,49 @@ var CachedSpanFetcher = class {
11765
11769
  fetchFn;
11766
11770
  constructor(objectTypeOrFetchFn, objectId, rootSpanId, getState) {
11767
11771
  if (typeof objectTypeOrFetchFn === "function") {
11768
- this.fetchFn = objectTypeOrFetchFn;
11772
+ this.fetchFn = (spanType) => objectTypeOrFetchFn(spanType);
11769
11773
  } else {
11770
11774
  const objectType = objectTypeOrFetchFn;
11771
- this.fetchFn = async (spanType) => {
11775
+ this.fetchFn = async (spanType, includeScorers) => {
11772
11776
  const state = await getState();
11773
11777
  const fetcher = new SpanFetcher(
11774
11778
  objectType,
11775
11779
  objectId,
11776
11780
  rootSpanId,
11777
11781
  state,
11778
- spanType
11782
+ spanType,
11783
+ includeScorers
11779
11784
  );
11780
11785
  const rows = await fetcher.fetchedData();
11781
- return rows.filter((row) => row.span_attributes?.purpose !== "scorer").map((row) => ({
11786
+ return rows.map((row) => ({
11782
11787
  input: row.input,
11783
11788
  output: row.output,
11789
+ expected: row.expected,
11790
+ error: row.error,
11791
+ scores: row.scores,
11792
+ metrics: row.metrics,
11784
11793
  metadata: row.metadata,
11785
11794
  span_id: row.span_id,
11786
11795
  span_parents: row.span_parents,
11796
+ is_root: row.is_root,
11787
11797
  span_attributes: row.span_attributes,
11788
11798
  id: row.id,
11789
11799
  _xact_id: row._xact_id,
11790
11800
  _pagination_key: row._pagination_key,
11791
- root_span_id: row.root_span_id
11801
+ root_span_id: row.root_span_id,
11802
+ created: row.created,
11803
+ tags: row.tags
11792
11804
  }));
11793
11805
  };
11794
11806
  }
11795
11807
  }
11796
- async getSpans({ spanType } = {}) {
11808
+ async getSpans({
11809
+ spanType,
11810
+ includeScorers = false
11811
+ } = {}) {
11812
+ if (includeScorers) {
11813
+ return this.fetchFn(spanType, true);
11814
+ }
11797
11815
  if (this.allFetched) {
11798
11816
  return this.getFromCache(spanType);
11799
11817
  }
@@ -11810,7 +11828,7 @@ var CachedSpanFetcher = class {
11810
11828
  return this.getFromCache(spanType);
11811
11829
  }
11812
11830
  async fetchSpans(spanType) {
11813
- const spans = await this.fetchFn(spanType);
11831
+ const spans = await this.fetchFn(spanType, false);
11814
11832
  for (const span of spans) {
11815
11833
  const type = span.span_attributes?.type ?? "";
11816
11834
  const existing = this.spanCache.get(type) ?? [];
@@ -11888,10 +11906,13 @@ var LocalTrace = class {
11888
11906
  * First checks the local span cache for recently logged spans, then falls
11889
11907
  * back to CachedSpanFetcher which handles BTQL fetching and caching.
11890
11908
  */
11891
- async getSpans({ spanType } = {}) {
11909
+ async getSpans({
11910
+ spanType,
11911
+ includeScorers = false
11912
+ } = {}) {
11892
11913
  const cachedSpans = this.state.spanCache.getByRootSpanId(this.rootSpanId);
11893
11914
  if (cachedSpans && cachedSpans.length > 0) {
11894
- let spans = cachedSpans.filter(
11915
+ let spans = includeScorers ? cachedSpans : cachedSpans.filter(
11895
11916
  (span) => span.span_attributes?.purpose !== "scorer"
11896
11917
  );
11897
11918
  if (spanType && spanType.length > 0) {
@@ -11902,13 +11923,19 @@ var LocalTrace = class {
11902
11923
  return spans.map((span) => ({
11903
11924
  input: span.input,
11904
11925
  output: span.output,
11926
+ expected: span.expected,
11927
+ error: span.error,
11928
+ scores: span.scores,
11929
+ metrics: span.metrics,
11905
11930
  metadata: span.metadata,
11906
11931
  span_id: span.span_id,
11907
11932
  span_parents: span.span_parents,
11908
- span_attributes: span.span_attributes
11933
+ is_root: span.is_root,
11934
+ span_attributes: span.span_attributes,
11935
+ tags: span.tags
11909
11936
  }));
11910
11937
  }
11911
- return this.cachedFetcher.getSpans({ spanType });
11938
+ return this.cachedFetcher.getSpans({ spanType, includeScorers });
11912
11939
  }
11913
11940
  /**
11914
11941
  * Get the thread (preprocessed messages) for this trace.
@@ -13353,6 +13380,7 @@ var fsSync = __toESM(require("node:fs"));
13353
13380
  var crypto = __toESM(require("node:crypto"));
13354
13381
  var import_node_util3 = require("node:util");
13355
13382
  var zlib = __toESM(require("node:zlib"));
13383
+ var dotenv = __toESM(require("dotenv"));
13356
13384
 
13357
13385
  // src/gitutil.ts
13358
13386
  var import_simple_git = require("simple-git");
@@ -29653,11 +29681,60 @@ var PluginRegistry = class {
29653
29681
  var registry = new PluginRegistry();
29654
29682
 
29655
29683
  // src/node/config.ts
29684
+ var BRAINTRUST_ENV_SEARCH_PARENT_LIMIT = 64;
29656
29685
  function configureNode() {
29657
29686
  isomorph_default.buildType = "node";
29658
29687
  isomorph_default.getRepoInfo = getRepoInfo;
29659
29688
  isomorph_default.getPastNAncestors = getPastNAncestors;
29660
- isomorph_default.getEnv = (name) => process.env[name];
29689
+ isomorph_default.getEnv = (name) => {
29690
+ const value = process.env[name];
29691
+ return name === "BRAINTRUST_API_KEY" && !value?.trim() ? void 0 : value;
29692
+ };
29693
+ isomorph_default.getBraintrustApiKey = async () => {
29694
+ const value = process.env.BRAINTRUST_API_KEY;
29695
+ if (value?.trim()) {
29696
+ return value;
29697
+ }
29698
+ const envPaths = [];
29699
+ for (let dir2 = process.cwd(), depth = 0; depth <= BRAINTRUST_ENV_SEARCH_PARENT_LIMIT; dir2 = path.dirname(dir2), depth++) {
29700
+ envPaths.push(path.join(dir2, ".env.braintrust"));
29701
+ if (path.dirname(dir2) === dir2) {
29702
+ break;
29703
+ }
29704
+ }
29705
+ const pending = /* @__PURE__ */ new Map();
29706
+ envPaths.forEach((envPath, index) => {
29707
+ pending.set(
29708
+ index,
29709
+ fs.readFile(envPath, "utf8").then(
29710
+ (contents) => ({ contents, envPath, index }),
29711
+ (error2) => ({ error: error2, envPath, index })
29712
+ )
29713
+ );
29714
+ });
29715
+ const results = [];
29716
+ let nearestUnresolvedIndex = 0;
29717
+ while (pending.size > 0) {
29718
+ const result = await Promise.race(pending.values());
29719
+ pending.delete(result.index);
29720
+ results[result.index] = result;
29721
+ while (results[nearestUnresolvedIndex]) {
29722
+ const nearestResult = results[nearestUnresolvedIndex];
29723
+ if ("contents" in nearestResult) {
29724
+ const parsed = dotenv.parse(nearestResult.contents);
29725
+ const apiKey = parsed.BRAINTRUST_API_KEY;
29726
+ return apiKey?.trim() ? apiKey : void 0;
29727
+ }
29728
+ const e = nearestResult.error;
29729
+ if (typeof e === "object" && e !== null && "code" in e && e.code === "ENOENT") {
29730
+ nearestUnresolvedIndex++;
29731
+ continue;
29732
+ }
29733
+ return void 0;
29734
+ }
29735
+ }
29736
+ return void 0;
29737
+ };
29661
29738
  isomorph_default.getCallerLocation = getCallerLocation;
29662
29739
  isomorph_default.newAsyncLocalStorage = () => new import_node_async_hooks.AsyncLocalStorage();
29663
29740
  isomorph_default.newTracingChannel = (nameOrChannels) => diagnostics_channel.tracingChannel(nameOrChannels);
@@ -30817,7 +30894,7 @@ async function buildBundledFunctionEntry({
30817
30894
 
30818
30895
  // src/cli/util/bundle.ts
30819
30896
  var import_env = require("@next/env");
30820
- var dotenv = __toESM(require("dotenv"));
30897
+ var dotenv2 = __toESM(require("dotenv"));
30821
30898
 
30822
30899
  // src/cli/util/debug-logging.ts
30823
30900
  var VERBOSE_DEPRECATION_MESSAGE = "--verbose is deprecated and will be removed in a future version of braintrust. Use --debug-logging debug to see full stack traces and troubleshooting details.";
@@ -30844,7 +30921,7 @@ async function loadCLIEnv(args) {
30844
30921
  normalizeDebugLoggingArgs(args);
30845
30922
  (0, import_env.loadEnvConfig)(process.cwd(), true);
30846
30923
  if (args.env_file) {
30847
- const loaded = dotenv.config({ path: args.env_file });
30924
+ const loaded = dotenv2.config({ path: args.env_file });
30848
30925
  if (loaded.error) {
30849
30926
  console.error(error(`Error loading ${args.env_file}: ${loaded.error}`));
30850
30927
  process.exit(1);
@@ -32395,7 +32472,7 @@ async function run(args) {
32395
32472
  normalizeDebugLoggingArgs(args);
32396
32473
  (0, import_env2.loadEnvConfig)(process.cwd(), true);
32397
32474
  if (args.env_file) {
32398
- const loaded = dotenv2.config({ path: args.env_file });
32475
+ const loaded = dotenv3.config({ path: args.env_file });
32399
32476
  if (loaded.error) {
32400
32477
  console.error(error(`Error loading ${args.env_file}: ${loaded.error}`));
32401
32478
  process.exit(1);
@@ -32473,7 +32550,7 @@ async function run(args) {
32473
32550
  }
32474
32551
  function addAuthArgs(parser) {
32475
32552
  parser.add_argument("--api-key", {
32476
- help: "Specify a braintrust api key. If the parameter is not specified, the BRAINTRUST_API_KEY environment variable will be used."
32553
+ help: "Specify a braintrust api key. If the parameter is not specified, BRAINTRUST_API_KEY or the nearest .env.braintrust file will be used."
32477
32554
  });
32478
32555
  parser.add_argument("--org-name", {
32479
32556
  help: "The name of a specific organization to connect to. This is useful if you belong to multiple."
@@ -1,2 +1,2 @@
1
- export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapFlueContext, wrapFlueSession, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.mjs';
1
+ export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetPipeline, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapFlueContext, wrapFlueSession, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.mjs';
2
2
  import 'zod/v3';
@@ -1,2 +1,2 @@
1
- export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapFlueContext, wrapFlueSession, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.js';
1
+ export { AnyDataset, Attachment, AttachmentParams, AttachmentReference, BRAINTRUST_CURRENT_SPAN_STORE, BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME, BackgroundLoggerOpts, BaseAttachment, BaseExperiment, BaseMetadata, BraintrustLangChainCallbackHandler, BraintrustMiddleware, BraintrustState, BraintrustStream, BraintrustStreamChunk, CachedSpanFetcher, ChatPrompt, CodeFunction, CodeOpts, CodePrompt, CommentEvent, CompiledPrompt, CompiledPromptParams, CompletionPrompt, ContextManager, ContextParentSpanIds, CreateProjectOpts, CurrentSpanStore, DEFAULT_FETCH_BATCH_SIZE, DEFAULT_MAX_REQUEST_SIZE, DataSummary, Dataset, DatasetPipeline, DatasetRecord, DatasetRestorePreviewResult, DatasetRestoreResult, DatasetSnapshot, DatasetSummary, DefaultMetadataType, DefaultPromptArgs, ERR_PERMALINK, EndSpanArgs, Eval, EvalCase, EvalClassifier, EvalHooks, EvalParameterSerializedSchema, EvalParameters, EvalResult, EvalResultWithSummary, EvalScorer, EvalScorerArgs, EvalTask, Evaluator, EvaluatorDef, EvaluatorDefinition, EvaluatorDefinitions, EvaluatorFile, EvaluatorManifest, Experiment, ExperimentLogFullArgs, ExperimentLogPartialArgs, ExperimentSummary, Exportable, ExternalAttachment, ExternalAttachmentParams, FailedHTTPResponse, FullInitDatasetOptions, FullInitOptions, FullLoginOptions, FunctionEvent, GetThreadOptions, IDGenerator, IdField, InitDatasetOptions, InitLoggerOptions, InitOptions, InputField, InstrumentationConfig, InvokeFunctionArgs, InvokeReturn, JSONAttachment, LEGACY_CACHED_HEADER, LOGS3_OVERFLOW_REFERENCE_TYPE, LangChainCallbackHandlerOptions, LazyValue, LoadPromptOptions, LogCommentFullArgs, LogFeedbackFullArgs, LogOptions, Logger, LoginInvalidOrgError, LoginOptions, Logs3OverflowInputRow, Logs3OverflowUpload, MetricSummary, NOOP_SPAN, NOOP_SPAN_PERMALINK, NoopSpan, ObjectFetcher, ObjectMetadata, OtherExperimentLogFields, ParametersSource, ParentExperimentIds, ParentProjectLogIds, Project, ProjectNameIdMap, PromiseUnless, Prompt, PromptBuilder, PromptContents, PromptDefinition, PromptDefinitionWithTools, PromptOpts, PromptRowWithId, ReadonlyAttachment, ReadonlyExperiment, RegisterSandboxOptions, RegisterSandboxResult, Reporter, ReporterBody, SandboxConfig, ScoreSummary, ScorerBuilder, ScorerOpts, SerializedBraintrustState, SetCurrentArg, Span, SpanContext, SpanData, SpanFetcher, SpanImpl, StartSpanArgs, TemplateFormat, TemplateRenderer, TemplateRendererPlugin, TestBackgroundLogger, ToolBuilder, Trace, UUIDGenerator, WithTransactionId, X_CACHED_HEADER, _exportsForTestingOnly, _internalGetGlobalState, _internalIso, _internalSetInitialState, addAzureBlobHeaders, braintrustStreamChunkSchema, buildLocalSummary, configureInstrumentation, constructLogs3OverflowRequest, createFinalValuePassThroughStream, currentExperiment, currentLogger, currentSpan, deepCopyEvent, default, defaultErrorScoreHandler, deserializePlainStringAsJSON, devNullWritableStream, evaluatorDefinitionSchema, evaluatorDefinitionsSchema, flush, getContextManager, getIdGenerator, getPromptVersions, getSpanParentObject, getTemplateRenderer, graph, init, initDataset, initExperiment, initFunction, initLogger, initNodeTestSuite, invoke, isTemplateFormat, loadParameters, loadPrompt, log, logError, login, loginToState, logs3OverflowUploadSchema, newId, parseCachedHeader, parseTemplateFormat, permalink, pickLogs3OverflowObjectIds, projects, promptContentsSchema, promptDefinitionSchema, promptDefinitionToPromptData, promptDefinitionWithToolsSchema, registerOtelFlush, registerSandbox, registerTemplatePlugin, renderMessage, renderPromptParams, renderTemplateContent, reportFailures, runEvaluator, setFetch, setMaskingFunction, spanComponentsToObjectId, startSpan, summarize, templateRegistry, toolFunctionDefinitionSchema, traceable, traced, updateSpan, uploadLogs3OverflowPayload, utf8ByteLength, withCurrent, withDataset, withExperiment, withLogger, withParent, wrapAISDK, wrapAISDKModel, wrapAgentClass, wrapAnthropic, wrapClaudeAgentSDK, wrapCohere, wrapCopilotClient, wrapCursorSDK, wrapFlueContext, wrapFlueSession, wrapGenkit, wrapGoogleADK, wrapGoogleGenAI, wrapGroq, wrapHuggingFace, wrapMastraAgent, wrapMistral, wrapOpenAI, wrapOpenAICodexSDK, wrapOpenAIv4, wrapOpenRouter, wrapOpenRouterAgent, wrapTraced, wrapVitest } from './browser.js';
2
2
  import 'zod/v3';