bitfab 0.59.0 → 0.60.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 (41) hide show
  1. package/dist/autoTrace.cjs.map +1 -1
  2. package/dist/autoTrace.d.cts +2 -0
  3. package/dist/autoTrace.d.ts +2 -0
  4. package/dist/autoTrace.js +1 -1
  5. package/dist/{chunk-ETZUSSF6.js → chunk-5DNB7EN7.js} +1 -1
  6. package/dist/chunk-5DNB7EN7.js.map +1 -0
  7. package/dist/{chunk-FHEEAPG2.js → chunk-7GIZS4E2.js} +54 -38
  8. package/dist/chunk-7GIZS4E2.js.map +1 -0
  9. package/dist/{chunk-R5MUOBRK.js → chunk-ASJPN3L2.js} +29 -14
  10. package/dist/chunk-ASJPN3L2.js.map +1 -0
  11. package/dist/{chunk-KFZ5OIN5.js → chunk-HKQGI5WP.js} +29 -14
  12. package/dist/chunk-HKQGI5WP.js.map +1 -0
  13. package/dist/{chunk-RYSCYPHQ.js → chunk-RXKKTRSN.js} +37 -38
  14. package/dist/chunk-RXKKTRSN.js.map +1 -0
  15. package/dist/{chunk-Y6FVWJKU.js → chunk-YS75T7YL.js} +18 -10
  16. package/dist/chunk-YS75T7YL.js.map +1 -0
  17. package/dist/{http-7WLON2BH.js → http-EQLFIFHN.js} +4 -2
  18. package/dist/{http-D7P4JL6C.js → http-QKQUDVEX.js} +4 -2
  19. package/dist/index.cjs +109 -79
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +71 -36
  22. package/dist/index.d.ts +71 -36
  23. package/dist/index.js +4 -4
  24. package/dist/node.cjs +109 -79
  25. package/dist/node.cjs.map +1 -1
  26. package/dist/node.d.cts +1 -1
  27. package/dist/node.d.ts +1 -1
  28. package/dist/node.js +4 -4
  29. package/dist/{replay-5TZNJ2DL.js → replay-TAYX5PBU.js} +3 -3
  30. package/dist/replayCli.js +2 -2
  31. package/dist/seedCli.js +2 -2
  32. package/package.json +1 -1
  33. package/dist/chunk-ETZUSSF6.js.map +0 -1
  34. package/dist/chunk-FHEEAPG2.js.map +0 -1
  35. package/dist/chunk-KFZ5OIN5.js.map +0 -1
  36. package/dist/chunk-R5MUOBRK.js.map +0 -1
  37. package/dist/chunk-RYSCYPHQ.js.map +0 -1
  38. package/dist/chunk-Y6FVWJKU.js.map +0 -1
  39. /package/dist/{http-7WLON2BH.js.map → http-EQLFIFHN.js.map} +0 -0
  40. /package/dist/{http-D7P4JL6C.js.map → http-QKQUDVEX.js.map} +0 -0
  41. /package/dist/{replay-5TZNJ2DL.js.map → replay-TAYX5PBU.js.map} +0 -0
@@ -6,7 +6,7 @@ import {
6
6
  runWithAutoTraceEntry,
7
7
  runWithAutoTraceNodeConfiguration,
8
8
  runWithAutoTraceRootContext
9
- } from "./chunk-ETZUSSF6.js";
9
+ } from "./chunk-5DNB7EN7.js";
10
10
  import {
11
11
  NO_MOCK_OVERRIDE,
12
12
  createIntegrationFixtureContext,
@@ -17,7 +17,7 @@ import {
17
17
  serializeValue,
18
18
  toJsonSafe,
19
19
  toJsonSafeReport
20
- } from "./chunk-FHEEAPG2.js";
20
+ } from "./chunk-7GIZS4E2.js";
21
21
  import {
22
22
  BitfabError,
23
23
  CONTENT_OFF_KEY,
@@ -28,6 +28,7 @@ import {
28
28
  ROOT_TRACE_FUNCTION_KEY_FIELD,
29
29
  SimulationPlan,
30
30
  callerTraceMetadata,
31
+ experimentIdWireFields,
31
32
  getReplayContext,
32
33
  gitRunner,
33
34
  isFrameworkInstrumentation,
@@ -35,7 +36,7 @@ import {
35
36
  readEnv,
36
37
  recordCallerTraceMetadata,
37
38
  retireTraceMetadata
38
- } from "./chunk-KFZ5OIN5.js";
39
+ } from "./chunk-HKQGI5WP.js";
39
40
  import {
40
41
  __privateAdd,
41
42
  __privateGet,
@@ -1484,27 +1485,27 @@ var LabelsClient = class {
1484
1485
  constructor(httpClient) {
1485
1486
  this.httpClient = httpClient;
1486
1487
  }
1487
- async save(update, testRunId) {
1488
- const [outcome] = await this.saveAll([update], testRunId);
1488
+ async save(update, experimentId) {
1489
+ const [outcome] = await this.saveAll([update], experimentId);
1489
1490
  return outcome;
1490
1491
  }
1491
- async saveAll(updates, testRunId) {
1492
+ async saveAll(updates, experimentId) {
1492
1493
  const response = await this.httpClient.request(
1493
1494
  LABELS_PATH,
1494
1495
  {
1495
1496
  labels: updates,
1496
- ...testRunId === void 0 ? {} : { testRunId }
1497
+ ...experimentId === void 0 ? {} : experimentIdWireFields(experimentId)
1497
1498
  }
1498
1499
  );
1499
1500
  return response.labels;
1500
1501
  }
1501
1502
  /** Withhold a verdict for a trace or replay attempt whose check did not run. */
1502
- async skip(target, testRunId) {
1503
- return this.save({ ...target, skip: true }, testRunId);
1503
+ async skip(target, experimentId) {
1504
+ return this.save({ ...target, skip: true }, experimentId);
1504
1505
  }
1505
1506
  /** Clear a previous verdict for a trace, replay attempt, or assertion. */
1506
- async archive(target, testRunId) {
1507
- return this.save({ ...target, archive: true }, testRunId);
1507
+ async archive(target, experimentId) {
1508
+ return this.save({ ...target, archive: true }, experimentId);
1508
1509
  }
1509
1510
  async saveHuman(update) {
1510
1511
  const [outcome] = await this.saveHumanAll([update]);
@@ -3827,6 +3828,15 @@ var BitfabVercelAiHandler = class {
3827
3828
  };
3828
3829
 
3829
3830
  // src/client.ts
3831
+ function resolveSpanExperimentId(options) {
3832
+ const { experimentId, testRunId } = options;
3833
+ if (experimentId !== void 0 && testRunId !== void 0 && experimentId !== testRunId) {
3834
+ throw new BitfabError(
3835
+ `experimentId ("${experimentId}") and its deprecated alias testRunId ("${testRunId}") were both passed with different values. Pass only experimentId.`
3836
+ );
3837
+ }
3838
+ return experimentId ?? testRunId;
3839
+ }
3830
3840
  var TRUNCATION_LIMIT_ORDER = [
3831
3841
  "max_depth",
3832
3842
  "max_captured_subtree_spans"
@@ -4416,13 +4426,12 @@ var Bitfab = class {
4416
4426
  "bitfab.node({ capture: false }) cannot use mockOnReplay: true because an uncaptured node has no recorded output."
4417
4427
  );
4418
4428
  }
4429
+ const experimentId = resolveSpanExperimentId(options);
4419
4430
  return {
4420
4431
  capture,
4421
4432
  type: options.type ?? "custom",
4422
4433
  ...options.name !== void 0 && { name: options.name },
4423
- ...options.testRunId !== void 0 && {
4424
- testRunId: options.testRunId
4425
- },
4434
+ ...experimentId !== void 0 && { experimentId },
4426
4435
  ...options.mockOnReplay !== void 0 && {
4427
4436
  mockOnReplay: options.mockOnReplay
4428
4437
  },
@@ -4557,6 +4566,7 @@ var Bitfab = class {
4557
4566
  return invokeWithoutNode();
4558
4567
  }
4559
4568
  const mockOnReplay = nodeConfiguration?.mockOnReplay ?? options.mockOnReplayDefault;
4569
+ const nodeExperimentId = nodeConfiguration === void 0 ? void 0 : resolveSpanExperimentId(nodeConfiguration);
4560
4570
  const childOptions = {
4561
4571
  name: spanName,
4562
4572
  type: nodeConfiguration?.type ?? "function",
@@ -4567,8 +4577,8 @@ var Bitfab = class {
4567
4577
  captureContent: true,
4568
4578
  autoTraceDefinition: definition,
4569
4579
  ...declaredNode && { declaredNode },
4570
- ...nodeConfiguration?.testRunId !== void 0 && {
4571
- testRunId: nodeConfiguration.testRunId
4580
+ ...nodeExperimentId !== void 0 && {
4581
+ experimentId: nodeExperimentId
4572
4582
  },
4573
4583
  ...mockOnReplay !== void 0 && {
4574
4584
  mockOnReplay
@@ -5229,6 +5239,7 @@ var Bitfab = class {
5229
5239
  const options = typeof optionsOrFn === "function" ? {} : optionsOrFn;
5230
5240
  const fn = typeof optionsOrFn === "function" ? optionsOrFn : maybeFn;
5231
5241
  const self = this;
5242
+ const optionExperimentId = resolveSpanExperimentId(options);
5232
5243
  const fnIsAsyncFunction = fn.constructor.name === "AsyncFunction";
5233
5244
  const fnReturnsPromise = fnIsAsyncFunction || (() => {
5234
5245
  try {
@@ -5331,7 +5342,7 @@ var Bitfab = class {
5331
5342
  const inputs = args;
5332
5343
  const startedAt = nowIsoTimestamp();
5333
5344
  const replayCtxAtStart = getReplayContext();
5334
- const testRunId = replayCtxAtStart?.testRunId ?? options.testRunId;
5345
+ const experimentId = replayCtxAtStart?.experimentId ?? optionExperimentId;
5335
5346
  if (isRootSpan && !activeTraceStates.has(traceId)) {
5336
5347
  const dbSnapshotRef = buildSnapshotRef(self.dbSnapshot, startedAt);
5337
5348
  self.simulationPlan.refresh();
@@ -5340,7 +5351,7 @@ var Bitfab = class {
5340
5351
  traceFunctionKey,
5341
5352
  startedAt,
5342
5353
  contexts: [],
5343
- ...testRunId !== void 0 && { testRunId },
5354
+ ...experimentId !== void 0 && { experimentId },
5344
5355
  ...replayCtxAtStart?.inputSourceTraceId && {
5345
5356
  inputSourceTraceId: replayCtxAtStart.inputSourceTraceId
5346
5357
  },
@@ -5386,7 +5397,7 @@ var Bitfab = class {
5386
5397
  contexts: newContext.contexts,
5387
5398
  prompt: newContext.prompt,
5388
5399
  endedAt,
5389
- ...testRunId !== void 0 && { testRunId },
5400
+ ...experimentId !== void 0 && { experimentId },
5390
5401
  ...replayCtx?.inputSourceSpanId && {
5391
5402
  inputSourceSpanId: replayCtx.inputSourceSpanId
5392
5403
  }
@@ -5407,7 +5418,7 @@ var Bitfab = class {
5407
5418
  name: traceState?.name,
5408
5419
  metadata: callerTraceMetadata(traceId),
5409
5420
  contexts: traceState?.contexts ?? [],
5410
- testRunId: traceState?.testRunId,
5421
+ experimentId: traceState?.experimentId,
5411
5422
  inputSourceTraceId: traceState?.inputSourceTraceId,
5412
5423
  replayAttempt: traceState?.replayAttempt,
5413
5424
  dbSnapshotRef: traceState?.dbSnapshotRef,
@@ -5721,9 +5732,6 @@ var Bitfab = class {
5721
5732
  return {
5722
5733
  traceId,
5723
5734
  addContext: (context) => {
5724
- if (!this.shouldRecord()) {
5725
- return Promise.resolve();
5726
- }
5727
5735
  if (typeof context !== "object" || context === null) {
5728
5736
  return Promise.resolve();
5729
5737
  }
@@ -5732,27 +5740,18 @@ var Bitfab = class {
5732
5740
  });
5733
5741
  },
5734
5742
  setMetadata: (metadata) => {
5735
- if (!this.shouldRecord()) {
5736
- return Promise.resolve();
5737
- }
5738
5743
  if (typeof metadata !== "object" || metadata === null) {
5739
5744
  return Promise.resolve();
5740
5745
  }
5741
5746
  return this.httpClient.patchTrace(traceId, { mergeMetadata: metadata });
5742
5747
  },
5743
5748
  setSessionId: (sessionId) => {
5744
- if (!this.shouldRecord()) {
5745
- return Promise.resolve();
5746
- }
5747
5749
  if (typeof sessionId !== "string" || sessionId.length === 0) {
5748
5750
  return Promise.resolve();
5749
5751
  }
5750
5752
  return this.httpClient.patchTrace(traceId, { setSessionId: sessionId });
5751
5753
  },
5752
5754
  setName: (name) => {
5753
- if (!this.shouldRecord()) {
5754
- return Promise.resolve();
5755
- }
5756
5755
  if (typeof name !== "string" || name.length === 0) {
5757
5756
  return Promise.resolve();
5758
5757
  }
@@ -5878,7 +5877,7 @@ var Bitfab = class {
5878
5877
  completed: true,
5879
5878
  ...params.dropped && { dropped: true },
5880
5879
  ...params.sessionId && { sessionId: params.sessionId },
5881
- ...params.testRunId && { testRunId: params.testRunId }
5880
+ ...params.experimentId !== void 0 && experimentIdWireFields(params.experimentId)
5882
5881
  });
5883
5882
  }
5884
5883
  sendsSpanOnCompletion(context) {
@@ -5990,7 +5989,7 @@ var Bitfab = class {
5990
5989
  },
5991
5990
  ...params.declaredNode === true && { [DECLARED_NODE_FIELD]: true },
5992
5991
  rawSpan: externalSpan,
5993
- ...params.testRunId && { testRunId: params.testRunId },
5992
+ ...params.experimentId !== void 0 && experimentIdWireFields(params.experimentId),
5994
5993
  ...params.mocked && { mocked: true },
5995
5994
  ...params.mockTarget && { mockTarget: params.mockTarget },
5996
5995
  ...params.mockSource && { mockSource: params.mockSource }
@@ -6136,7 +6135,7 @@ var Bitfab = class {
6136
6135
  await runWithSeedContext({ traceId }, async () => target(...args));
6137
6136
  } finally {
6138
6137
  try {
6139
- const { flushTraces: flushTraces2 } = await import("./http-D7P4JL6C.js");
6138
+ const { flushTraces: flushTraces2 } = await import("./http-QKQUDVEX.js");
6140
6139
  await flushTraces2(3e4);
6141
6140
  } finally {
6142
6141
  unrecorded = activeTraceStates.delete(traceId);
@@ -6195,7 +6194,7 @@ var Bitfab = class {
6195
6194
  `Function is wrapped with trace function key '${wrappedKey}' but replay was called with '${traceFunctionKey}'. Pass matching keys, or pass the unwrapped function to replay it under the explicit key.`
6196
6195
  );
6197
6196
  }
6198
- const { replay: doReplay } = await import("./replay-5TZNJ2DL.js");
6197
+ const { replay: doReplay } = await import("./replay-TAYX5PBU.js");
6199
6198
  return doReplay(
6200
6199
  this.httpClient,
6201
6200
  this.serviceUrl,
@@ -6515,7 +6514,7 @@ async function seedFromRegistry(registry, pipeline, cases, options = {}) {
6515
6514
  sessionId: seedCase.sessionId
6516
6515
  })
6517
6516
  );
6518
- const { flushTraces: flushTraces2 } = await import("./http-D7P4JL6C.js");
6517
+ const { flushTraces: flushTraces2 } = await import("./http-QKQUDVEX.js");
6519
6518
  await flushTraces2(3e4);
6520
6519
  return { pipeline, traceFunctionKey, traceIds };
6521
6520
  }
@@ -6559,4 +6558,4 @@ export {
6559
6558
  reseedFromRegistry,
6560
6559
  seedFromRegistry
6561
6560
  };
6562
- //# sourceMappingURL=chunk-RYSCYPHQ.js.map
6561
+ //# sourceMappingURL=chunk-RXKKTRSN.js.map