bitfab 0.11.0 → 0.11.4

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.
package/dist/index.cjs CHANGED
@@ -35,7 +35,7 @@ var __version__;
35
35
  var init_version_generated = __esm({
36
36
  "src/version.generated.ts"() {
37
37
  "use strict";
38
- __version__ = "0.11.0";
38
+ __version__ = "0.11.4";
39
39
  }
40
40
  });
41
41
 
@@ -434,7 +434,15 @@ async function processItem(httpClient, serverItem, fn, testRunId) {
434
434
  } catch (e) {
435
435
  error = e instanceof Error ? e.message : String(e);
436
436
  }
437
- return { input: inputs, result, originalOutput, error };
437
+ return {
438
+ input: inputs,
439
+ result,
440
+ originalOutput,
441
+ error,
442
+ durationMs: serverItem.durationMs ?? null,
443
+ tokens: serverItem.tokens ?? null,
444
+ model: serverItem.model ?? null
445
+ };
438
446
  }
439
447
  async function mapWithConcurrency(tasks, maxConcurrency) {
440
448
  const results = new Array(tasks.length);
@@ -1981,6 +1989,65 @@ function runWithSpanStack(stack, fn) {
1981
1989
  throw error;
1982
1990
  }
1983
1991
  }
1992
+ function isAsyncGenerator(value) {
1993
+ if (value === null || typeof value !== "object") {
1994
+ return false;
1995
+ }
1996
+ const candidate = value;
1997
+ return typeof candidate.next === "function" && typeof candidate.return === "function" && typeof candidate.throw === "function" && typeof candidate[Symbol.asyncIterator] === "function";
1998
+ }
1999
+ function wrapAsyncGenerator(source, spanStack, sendSpan) {
2000
+ const yielded = [];
2001
+ let returnValue;
2002
+ let finalized = false;
2003
+ const finalize = (errorMsg) => {
2004
+ if (finalized) {
2005
+ return;
2006
+ }
2007
+ finalized = true;
2008
+ void sendSpan({
2009
+ result: { yielded, return: returnValue },
2010
+ ...errorMsg && { error: errorMsg }
2011
+ });
2012
+ };
2013
+ const step = (method, arg) => runWithSpanStack(spanStack, () => {
2014
+ const op = source[method];
2015
+ return op.call(source, arg);
2016
+ });
2017
+ const handle = async (method, arg) => {
2018
+ try {
2019
+ const result = await step(method, arg);
2020
+ if (result.done) {
2021
+ returnValue = result.value;
2022
+ finalize();
2023
+ } else {
2024
+ yielded.push(result.value);
2025
+ }
2026
+ return result;
2027
+ } catch (error) {
2028
+ finalize(error instanceof Error ? error.message : String(error));
2029
+ throw error;
2030
+ }
2031
+ };
2032
+ const wrapped = {
2033
+ next(arg) {
2034
+ return handle("next", arg);
2035
+ },
2036
+ return(value) {
2037
+ return handle("return", value);
2038
+ },
2039
+ throw(err) {
2040
+ return handle("throw", err);
2041
+ },
2042
+ [Symbol.asyncIterator]() {
2043
+ return wrapped;
2044
+ },
2045
+ [Symbol.asyncDispose]() {
2046
+ return handle("return", void 0).then(() => void 0);
2047
+ }
2048
+ };
2049
+ return wrapped;
2050
+ }
1984
2051
  var cachedCollectorClass;
1985
2052
  async function loadCollectorClass() {
1986
2053
  if (cachedCollectorClass !== void 0) {
@@ -2473,10 +2540,14 @@ var Bitfab = class {
2473
2540
  const inputs = args;
2474
2541
  const startedAt = (/* @__PURE__ */ new Date()).toISOString();
2475
2542
  if (isRootSpan && !activeTraceStates.has(traceId)) {
2543
+ const replayCtxAtRoot = getReplayContext();
2476
2544
  activeTraceStates.set(traceId, {
2477
2545
  traceId,
2478
2546
  startedAt,
2479
- contexts: []
2547
+ contexts: [],
2548
+ ...replayCtxAtRoot?.testRunId && {
2549
+ testRunId: replayCtxAtRoot.testRunId
2550
+ }
2480
2551
  });
2481
2552
  pendingSpanPromises.set(traceId, []);
2482
2553
  }
@@ -2523,7 +2594,8 @@ var Bitfab = class {
2523
2594
  endedAt,
2524
2595
  sessionId: traceState?.sessionId,
2525
2596
  metadata: traceState?.metadata,
2526
- contexts: traceState?.contexts ?? []
2597
+ contexts: traceState?.contexts ?? [],
2598
+ testRunId: traceState?.testRunId
2527
2599
  });
2528
2600
  activeTraceStates.delete(traceId);
2529
2601
  } else {
@@ -2551,6 +2623,9 @@ var Bitfab = class {
2551
2623
  throw error;
2552
2624
  });
2553
2625
  }
2626
+ if (isAsyncGenerator(result)) {
2627
+ return wrapAsyncGenerator(result, newStack, sendSpan);
2628
+ }
2554
2629
  void sendSpan({ result });
2555
2630
  return result;
2556
2631
  };
@@ -2603,7 +2678,8 @@ var Bitfab = class {
2603
2678
  traceFunctionKey: params.traceFunctionKey,
2604
2679
  externalTrace: rawTrace,
2605
2680
  completed: true,
2606
- ...params.sessionId && { sessionId: params.sessionId }
2681
+ ...params.sessionId && { sessionId: params.sessionId },
2682
+ ...params.testRunId && { testRunId: params.testRunId }
2607
2683
  });
2608
2684
  }
2609
2685
  /**