bitfab 0.65.0 → 0.65.3

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 (93) hide show
  1. package/cloudReplay.py +207 -30
  2. package/dist/autoTrace.cjs +28 -0
  3. package/dist/autoTrace.cjs.map +1 -1
  4. package/dist/autoTrace.d.cts +2 -1
  5. package/dist/autoTrace.d.ts +2 -1
  6. package/dist/autoTrace.js +3 -1
  7. package/dist/{chunk-CYF5LGHB.js → chunk-CL66KPSI.js} +2 -2
  8. package/dist/{chunk-6FFC55V5.js → chunk-MNMG2BAE.js} +4 -4
  9. package/dist/chunk-MNMG2BAE.js.map +1 -0
  10. package/dist/{chunk-UKQOBPTJ.js → chunk-MPZBAVVQ.js} +2 -2
  11. package/dist/{chunk-UKQOBPTJ.js.map → chunk-MPZBAVVQ.js.map} +1 -1
  12. package/dist/{chunk-2A4MMF2B.js → chunk-NMPHLDEG.js} +2 -2
  13. package/dist/{chunk-MN3E2RUU.js → chunk-PTCLRG4E.js} +3 -3
  14. package/dist/{chunk-YWXQM6J3.js → chunk-QRNHRY7F.js} +28 -1
  15. package/dist/chunk-QRNHRY7F.js.map +1 -0
  16. package/dist/{chunk-BTCULORS.js → chunk-SE73IWU6.js} +29 -13
  17. package/dist/chunk-SE73IWU6.js.map +1 -0
  18. package/dist/{chunk-YXRWWUSR.js → chunk-VX6HW3LS.js} +2 -2
  19. package/dist/{chunk-YXRWWUSR.js.map → chunk-VX6HW3LS.js.map} +1 -1
  20. package/dist/{chunk-IBWW3SP4.js → chunk-YVJAOGHE.js} +2 -2
  21. package/dist/{chunk-GSHCHCB5.js → chunk-ZG6SHKEF.js} +12 -41
  22. package/dist/chunk-ZG6SHKEF.js.map +1 -0
  23. package/dist/{http-UAXBI747.js → http-UHEXY3ZE.js} +2 -2
  24. package/dist/{http-EIX65EBE.js → http-VGZFZ3DQ.js} +2 -2
  25. package/dist/index.cjs +37 -7
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +4 -4
  30. package/dist/node.cjs +37 -7
  31. package/dist/node.cjs.map +1 -1
  32. package/dist/node.js +4 -4
  33. package/dist/{replay-EVDUMCAS.js → replay-NJ7VOSPW.js} +3 -3
  34. package/dist/{replay-U65EXYUR.js → replay-R3EIGP7F.js} +3 -3
  35. package/dist/replayCli.js +3 -3
  36. package/dist/seedCli.js +3 -3
  37. package/dist/transform/babel.cjs +11 -40
  38. package/dist/transform/babel.cjs.map +1 -1
  39. package/dist/transform/babel.js +1 -1
  40. package/dist/transform/bun.cjs +11 -40
  41. package/dist/transform/bun.cjs.map +1 -1
  42. package/dist/transform/bun.js +3 -3
  43. package/dist/transform/esbuild.cjs +11 -40
  44. package/dist/transform/esbuild.cjs.map +1 -1
  45. package/dist/transform/esbuild.js +3 -3
  46. package/dist/transform/loaderRuntime.cjs +11 -40
  47. package/dist/transform/loaderRuntime.cjs.map +1 -1
  48. package/dist/transform/loaderRuntime.js +2 -2
  49. package/dist/transform/nest.cjs +11 -40
  50. package/dist/transform/nest.cjs.map +1 -1
  51. package/dist/transform/nest.js +3 -3
  52. package/dist/transform/next.cjs +11 -40
  53. package/dist/transform/next.cjs.map +1 -1
  54. package/dist/transform/next.js +3 -3
  55. package/dist/transform/nodeLoader.js +11 -40
  56. package/dist/transform/nodeLoader.js.map +1 -1
  57. package/dist/transform/rolldown.cjs +11 -40
  58. package/dist/transform/rolldown.cjs.map +1 -1
  59. package/dist/transform/rolldown.js +3 -3
  60. package/dist/transform/rollup.cjs +11 -40
  61. package/dist/transform/rollup.cjs.map +1 -1
  62. package/dist/transform/rollup.js +3 -3
  63. package/dist/transform/rsbuild.cjs +11 -40
  64. package/dist/transform/rsbuild.cjs.map +1 -1
  65. package/dist/transform/rsbuild.js +3 -3
  66. package/dist/transform/rspack.cjs +11 -40
  67. package/dist/transform/rspack.cjs.map +1 -1
  68. package/dist/transform/rspack.js +3 -3
  69. package/dist/transform/swc.cjs +11 -40
  70. package/dist/transform/swc.cjs.map +1 -1
  71. package/dist/transform/swc.js +2 -2
  72. package/dist/transform/unplugin.cjs +11 -40
  73. package/dist/transform/unplugin.cjs.map +1 -1
  74. package/dist/transform/unplugin.js +3 -3
  75. package/dist/transform/vite.cjs +11 -40
  76. package/dist/transform/vite.cjs.map +1 -1
  77. package/dist/transform/vite.js +3 -3
  78. package/dist/transform/webpack.cjs +11 -40
  79. package/dist/transform/webpack.cjs.map +1 -1
  80. package/dist/transform/webpack.js +3 -3
  81. package/package.json +11 -11
  82. package/dist/chunk-6FFC55V5.js.map +0 -1
  83. package/dist/chunk-BTCULORS.js.map +0 -1
  84. package/dist/chunk-GSHCHCB5.js.map +0 -1
  85. package/dist/chunk-YWXQM6J3.js.map +0 -1
  86. /package/dist/{chunk-CYF5LGHB.js.map → chunk-CL66KPSI.js.map} +0 -0
  87. /package/dist/{chunk-2A4MMF2B.js.map → chunk-NMPHLDEG.js.map} +0 -0
  88. /package/dist/{chunk-MN3E2RUU.js.map → chunk-PTCLRG4E.js.map} +0 -0
  89. /package/dist/{chunk-IBWW3SP4.js.map → chunk-YVJAOGHE.js.map} +0 -0
  90. /package/dist/{http-EIX65EBE.js.map → http-UHEXY3ZE.js.map} +0 -0
  91. /package/dist/{http-UAXBI747.js.map → http-VGZFZ3DQ.js.map} +0 -0
  92. /package/dist/{replay-EVDUMCAS.js.map → replay-NJ7VOSPW.js.map} +0 -0
  93. /package/dist/{replay-U65EXYUR.js.map → replay-R3EIGP7F.js.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  replayContextReady,
9
9
  runWithReplayContext,
10
10
  unrefTimer
11
- } from "./chunk-UKQOBPTJ.js";
11
+ } from "./chunk-MPZBAVVQ.js";
12
12
  import {
13
13
  runWithCaptureSuppressed,
14
14
  warnOnce,
@@ -2057,4 +2057,4 @@ export {
2057
2057
  warnJudgeAssertionsDeprecated,
2058
2058
  replay
2059
2059
  };
2060
- //# sourceMappingURL=chunk-2A4MMF2B.js.map
2060
+ //# sourceMappingURL=chunk-NMPHLDEG.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  transformBitfabSource
3
- } from "./chunk-IBWW3SP4.js";
3
+ } from "./chunk-YVJAOGHE.js";
4
4
  import {
5
5
  shouldTransformBitfabFile
6
- } from "./chunk-GSHCHCB5.js";
6
+ } from "./chunk-ZG6SHKEF.js";
7
7
 
8
8
  // ../bitfab-typescript-transform/src/unplugin.ts
9
9
  import { createUnplugin } from "unplugin";
@@ -25,4 +25,4 @@ var bitfabTraceUnplugin = createUnplugin((options) => {
25
25
  export {
26
26
  bitfabTraceUnplugin
27
27
  };
28
- //# sourceMappingURL=chunk-MN3E2RUU.js.map
28
+ //# sourceMappingURL=chunk-PTCLRG4E.js.map
@@ -72,6 +72,29 @@ function runWithAutoTraceNodeConfiguration(nodeConfiguration, fn) {
72
72
  }
73
73
  return result;
74
74
  }
75
+ function runAsAutoTraceRootFunction(functionName, fn) {
76
+ const scope = currentAutoTraceScope();
77
+ if (!scope || scope.entries.length === 0 || functionName === "") {
78
+ return fn();
79
+ }
80
+ const rootFunction = {
81
+ name: functionName,
82
+ entering: true
83
+ };
84
+ try {
85
+ return runWithAutoTraceScope({ ...scope, rootFunction }, fn);
86
+ } finally {
87
+ rootFunction.entering = false;
88
+ }
89
+ }
90
+ function isRootFunctionEntry(scope, simpleName) {
91
+ const rootFunction = scope.rootFunction;
92
+ if (rootFunction === void 0 || !rootFunction.entering) {
93
+ return false;
94
+ }
95
+ rootFunction.entering = false;
96
+ return rootFunction.name === simpleName;
97
+ }
75
98
  var SUBTREE_TRACING_DOCS_URL = "https://docs.bitfab.ai/typescript-sdk#experimental-subtree-tracing";
76
99
  function noteTransformedModule() {
77
100
  autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ = true;
@@ -181,6 +204,9 @@ function __bitfabAutoSpan(definition, inputs, fn) {
181
204
  }
182
205
  const nameParts = definition.name.split(".");
183
206
  const simpleName = nameParts[nameParts.length - 1];
207
+ if (isRootFunctionEntry(scope, simpleName)) {
208
+ return fn();
209
+ }
184
210
  const nodeConfiguration = simpleName === scope.nodeConfiguration?.functionName ? shareFinalize(scope.nodeConfiguration) : void 0;
185
211
  return invokeThroughAutoTraceEntries(
186
212
  scope.entries,
@@ -233,6 +259,7 @@ export {
233
259
  runWithAutoTraceEntry,
234
260
  clearAutoTraceNodeConfiguration,
235
261
  runWithAutoTraceNodeConfiguration,
262
+ runAsAutoTraceRootFunction,
236
263
  runWithAutoTraceRootContext,
237
264
  invokeThroughAutoTraceEntries,
238
265
  __bitfabAutoSpan,
@@ -240,4 +267,4 @@ export {
240
267
  __bitfabAutoTraceActive,
241
268
  _resetAutoTraceTransformDetection
242
269
  };
243
- //# sourceMappingURL=chunk-YWXQM6J3.js.map
270
+ //# sourceMappingURL=chunk-QRNHRY7F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/autoTrace.ts"],"sourcesContent":["import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { isCaptureSuppressed } from \"./captureSuppression.js\"\nimport { warnOnce } from \"./warnOnce.js\"\n\nexport interface AutoTraceFunctionDefinition {\n id: string\n name: string\n file: string\n line: number\n column: number\n async?: boolean\n wrapper?: boolean\n}\n\nexport interface AutoTraceNodeConfiguration {\n functionName: string\n name?: string\n type?: \"llm\" | \"agent\" | \"function\" | \"guardrail\" | \"handoff\" | \"custom\"\n capture: boolean\n experimentId?: string\n /** @deprecated Use experimentId. */\n testRunId?: string\n mockOnReplay?: boolean\n replayReusable?: boolean\n // biome-ignore lint/suspicious/noExplicitAny: node finalizers receive the configured function's result, whose type is owned by the caller\n finalize?: (result: any) => unknown | Promise<unknown>\n}\n\nexport interface NestedTraceLink {\n traceFunctionKey: string\n traceId?: string\n rootSpanId?: string\n}\n\nexport interface AutoTraceEntry {\n context: AutoTraceContext\n depth: number\n spanStack: unknown\n}\n\nexport interface AutoTraceContext {\n readonly traceFunctionKey: string\n invoke<T>(\n definition: AutoTraceFunctionDefinition,\n inputs: unknown[],\n fn: () => T,\n entry: AutoTraceEntry,\n nodeConfiguration?: AutoTraceNodeConfiguration,\n ): T\n invokeNestedRoot<T>(\n name: string,\n functionName: string,\n inputs: unknown[],\n fn: () => T,\n entry: AutoTraceEntry,\n link: NestedTraceLink | undefined,\n ): T\n}\n\ninterface AutoTraceRootFunction {\n name: string\n entering: boolean\n}\n\ninterface AutoTraceScope {\n entries: readonly AutoTraceEntry[]\n nodeConfiguration?: AutoTraceNodeConfiguration\n rootFunction?: AutoTraceRootFunction\n}\n\ninterface AutoTraceState {\n storage: AsyncLocalStorageLike<AutoTraceScope> | null\n browserScope: AutoTraceScope | undefined\n // Older SDK copies read this field when sharing the process-wide V4 state.\n capturePolicies: WeakMap<object, Map<string, ReadonlySet<string>>>\n activeRoots: number\n}\n\ninterface AutoTraceGlobal {\n __bitfabAutoTraceStateV4?: AutoTraceState\n __bitfab_auto_trace_transformed_v1__?: boolean\n}\n\ninterface AutoTraceAsyncGenerator {\n next(value?: unknown): Promise<IteratorResult<unknown, unknown>>\n return(value?: unknown): Promise<IteratorResult<unknown, unknown>>\n throw(error?: unknown): Promise<IteratorResult<unknown, unknown>>\n [Symbol.asyncIterator](): AutoTraceAsyncGenerator\n}\n\nconst autoTraceGlobal = globalThis as unknown as AutoTraceGlobal\nconst autoTraceState: AutoTraceState =\n autoTraceGlobal.__bitfabAutoTraceStateV4 ?? {\n storage: null,\n browserScope: undefined,\n capturePolicies: new WeakMap(),\n activeRoots: 0,\n }\nautoTraceGlobal.__bitfabAutoTraceStateV4 = autoTraceState\n\nfunction initializeAutoTraceStorage(): void {\n autoTraceState.storage ??= createAsyncLocalStorage<AutoTraceScope>()\n}\n\nfunction runWithAutoTraceScope<T>(scope: AutoTraceScope, fn: () => T): T {\n initializeAutoTraceStorage()\n if (autoTraceState.storage) {\n return autoTraceState.storage.run(scope, fn)\n }\n\n const previous = autoTraceState.browserScope\n autoTraceState.browserScope = scope\n try {\n return fn()\n } finally {\n autoTraceState.browserScope = previous\n }\n}\n\nexport function currentAutoTraceEntries(): readonly AutoTraceEntry[] {\n return currentAutoTraceScope()?.entries ?? []\n}\n\nfunction replaceEntry(\n entries: readonly AutoTraceEntry[],\n previous: AutoTraceEntry,\n updated: AutoTraceEntry,\n): readonly AutoTraceEntry[] {\n return entries.map((entry) => (entry === previous ? updated : entry))\n}\n\nexport function runWithAutoTraceEntry<T>(\n previous: AutoTraceEntry,\n updated: AutoTraceEntry,\n fn: () => T,\n): T {\n const result = runWithAutoTraceScope(\n { entries: replaceEntry(currentAutoTraceEntries(), previous, updated) },\n fn,\n )\n if (isAutoTraceAsyncGenerator(result)) {\n return wrapAutoTraceEntryAsyncGenerator(previous, updated, result) as T\n }\n return result\n}\n\nfunction wrapAutoTraceEntryAsyncGenerator(\n previous: AutoTraceEntry,\n updated: AutoTraceEntry,\n source: AutoTraceAsyncGenerator,\n): AutoTraceAsyncGenerator {\n const step = (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown,\n ): Promise<IteratorResult<unknown, unknown>> =>\n runWithAutoTraceScope(\n { entries: replaceEntry(currentAutoTraceEntries(), previous, updated) },\n () => source[method](value),\n )\n const wrapped: AutoTraceAsyncGenerator = {\n next: (value) => step(\"next\", value),\n return: (value) => step(\"return\", value),\n throw: (error) => step(\"throw\", error),\n [Symbol.asyncIterator]: () => wrapped,\n }\n return wrapped\n}\n\nexport function clearAutoTraceNodeConfiguration<T>(fn: () => T): T {\n return runWithAutoTraceScope({ entries: currentAutoTraceEntries() }, fn)\n}\n\nexport function runWithAutoTraceNodeConfiguration<T>(\n nodeConfiguration: AutoTraceNodeConfiguration,\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0) {\n return fn()\n }\n\n const result = runWithAutoTraceScope({ ...scope, nodeConfiguration }, fn)\n if (isAutoTraceAsyncGenerator(result)) {\n return wrapAutoTraceNodeAsyncGenerator(nodeConfiguration, result) as T\n }\n return result\n}\n\nexport function runAsAutoTraceRootFunction<T>(\n functionName: string,\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0 || functionName === \"\") {\n return fn()\n }\n const rootFunction: AutoTraceRootFunction = {\n name: functionName,\n entering: true,\n }\n try {\n return runWithAutoTraceScope({ ...scope, rootFunction }, fn)\n } finally {\n rootFunction.entering = false\n }\n}\n\nfunction isRootFunctionEntry(\n scope: AutoTraceScope,\n simpleName: string | undefined,\n): boolean {\n const rootFunction = scope.rootFunction\n if (rootFunction === undefined || !rootFunction.entering) {\n return false\n }\n rootFunction.entering = false\n return rootFunction.name === simpleName\n}\n\nconst SUBTREE_TRACING_DOCS_URL =\n \"https://docs.bitfab.ai/typescript-sdk#experimental-subtree-tracing\"\n\nfunction noteTransformedModule(): void {\n autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ = true\n}\n\nfunction transformInstalled(): boolean {\n return autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ === true\n}\n\nfunction runsOnNode(): boolean {\n return typeof process !== \"undefined\" && Boolean(process.versions?.node)\n}\n\nfunction closeAutoTraceRoot(): void {\n autoTraceState.activeRoots -= 1\n}\n\nfunction settleAutoTraceRoot(context: AutoTraceContext): void {\n closeAutoTraceRoot()\n if (transformInstalled() || !runsOnNode()) {\n return\n }\n warnOnce(\n \"auto-trace-transform-missing\",\n `trace root \"${context.traceFunctionKey}\" recorded only its own span. ` +\n \"No module in this build was compiled by @bitfab/sdk/transform, so calls \" +\n \"beneath the root were not discovered. Add the SDK's transform adapter \" +\n `to the server build: ${SUBTREE_TRACING_DOCS_URL}`,\n )\n}\n\nexport function runWithAutoTraceRootContext<T>(\n context: AutoTraceContext,\n spanStack: unknown,\n fn: () => T,\n): T {\n autoTraceState.activeRoots += 1\n const entries = [\n ...currentAutoTraceEntries(),\n { context, depth: 0, spanStack },\n ]\n let result: T\n try {\n result = runWithAutoTraceScope({ entries }, fn)\n } catch (error) {\n settleAutoTraceRoot(context)\n throw error\n }\n\n if (isAutoTraceAsyncGenerator(result)) {\n closeAutoTraceRoot()\n return wrapAutoTraceAsyncGenerator(context, spanStack, result) as T\n }\n\n if (result instanceof Promise) {\n return result.finally(() => {\n settleAutoTraceRoot(context)\n }) as T\n }\n\n settleAutoTraceRoot(context)\n return result\n}\n\nexport function invokeThroughAutoTraceEntries<T>(\n entries: readonly AutoTraceEntry[],\n step: (entry: AutoTraceEntry, next: () => T) => T,\n fn: () => T,\n): T {\n let run = fn\n for (let index = entries.length - 1; index >= 0; index -= 1) {\n const entry = entries[index] as AutoTraceEntry\n const next = run\n run = () => step(entry, next)\n }\n return run()\n}\n\nfunction isAutoTraceAsyncGenerator(\n value: unknown,\n): value is AutoTraceAsyncGenerator {\n if (value === null || typeof value !== \"object\") {\n return false\n }\n const candidate = value as Record<PropertyKey, unknown>\n return (\n typeof candidate.next === \"function\" &&\n typeof candidate.return === \"function\" &&\n typeof candidate.throw === \"function\" &&\n typeof candidate[Symbol.asyncIterator] === \"function\"\n )\n}\n\nfunction wrapAutoTraceAsyncGenerator(\n context: AutoTraceContext,\n spanStack: unknown,\n source: AutoTraceAsyncGenerator,\n): AutoTraceAsyncGenerator {\n const step = (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown,\n ): Promise<IteratorResult<unknown, unknown>> =>\n runWithAutoTraceRootContext(context, spanStack, () => source[method](value))\n const wrapped: AutoTraceAsyncGenerator = {\n next: (value) => step(\"next\", value),\n return: (value) => step(\"return\", value),\n throw: (error) => step(\"throw\", error),\n [Symbol.asyncIterator]: () => wrapped,\n }\n return wrapped\n}\n\nfunction wrapAutoTraceNodeAsyncGenerator(\n nodeConfiguration: AutoTraceNodeConfiguration,\n source: AutoTraceAsyncGenerator,\n): AutoTraceAsyncGenerator {\n const step = (\n method: \"next\" | \"return\" | \"throw\",\n value?: unknown,\n ): Promise<IteratorResult<unknown, unknown>> =>\n runWithAutoTraceNodeConfiguration(nodeConfiguration, () =>\n source[method](value),\n )\n const wrapped: AutoTraceAsyncGenerator = {\n next: (value) => step(\"next\", value),\n return: (value) => step(\"return\", value),\n throw: (error) => step(\"throw\", error),\n [Symbol.asyncIterator]: () => wrapped,\n }\n return wrapped\n}\n\nfunction shareFinalize(\n configuration: AutoTraceNodeConfiguration,\n): AutoTraceNodeConfiguration {\n const finalize = configuration.finalize\n if (finalize === undefined) {\n return configuration\n }\n let settled: Promise<unknown> | undefined\n return {\n ...configuration,\n finalize: (result: unknown) => {\n settled ??= Promise.resolve().then(() => finalize(result))\n return settled\n },\n }\n}\n\nexport function __bitfabAutoSpan<T>(\n definition: AutoTraceFunctionDefinition,\n inputs: unknown[],\n fn: () => T,\n): T {\n noteTransformedModule()\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0 || isCaptureSuppressed()) {\n return fn()\n }\n const nameParts = definition.name.split(\".\")\n const simpleName = nameParts[nameParts.length - 1]\n if (isRootFunctionEntry(scope, simpleName)) {\n return fn()\n }\n const nodeConfiguration =\n simpleName === scope.nodeConfiguration?.functionName\n ? shareFinalize(scope.nodeConfiguration)\n : undefined\n return invokeThroughAutoTraceEntries(\n scope.entries,\n (entry, next) =>\n entry.context.invoke(definition, inputs, next, entry, nodeConfiguration),\n fn,\n )\n}\n\n/**\n * Preserve a function's original call arguments for transform cases where\n * parameter bindings discard them, such as destructured arrow parameters.\n *\n * This helper is internal transform/runtime protocol. The proxy preserves the\n * target's callability, arity, async identity, and non-constructibility while\n * only allocating a trace closure beneath an active automatic trace root.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoWrap<T extends (...args: never[]) => unknown>(\n definition: AutoTraceFunctionDefinition,\n fn: T,\n): T {\n noteTransformedModule()\n if (fn.name === \"\") {\n const nameParts = definition.name.split(\".\")\n const inferredName = nameParts[nameParts.length - 1]\n if (inferredName !== undefined) {\n Object.defineProperty(fn, \"name\", {\n configurable: true,\n value: inferredName,\n })\n }\n }\n\n const target = fn as unknown as (...args: unknown[]) => unknown\n return new Proxy(target, {\n apply(callTarget, thisArg, args) {\n if (!__bitfabAutoTraceActive()) {\n return Reflect.apply(callTarget, thisArg, args)\n }\n return __bitfabAutoSpan(definition, args, () =>\n Reflect.apply(callTarget, thisArg, args),\n )\n },\n }) as unknown as T\n}\n\n/**\n * Return whether the current call is inside an automatic trace root.\n *\n * Build transforms use this before allocating function metadata, captured\n * inputs, or an invocation closure. It is internal transform/runtime protocol,\n * not a supported application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoTraceActive(): boolean {\n if (autoTraceState.activeRoots === 0 || isCaptureSuppressed()) {\n return false\n }\n return currentAutoTraceEntries().length > 0\n}\n\nfunction currentAutoTraceScope(): AutoTraceScope | undefined {\n initializeAutoTraceStorage()\n return autoTraceState.storage?.getStore() ?? autoTraceState.browserScope\n}\n\nexport function _resetAutoTraceTransformDetection(): void {\n autoTraceGlobal.__bitfab_auto_trace_transformed_v1__ = undefined\n}\n"],"mappings":"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","names":[]}
@@ -3,10 +3,11 @@ import {
3
3
  clearAutoTraceNodeConfiguration,
4
4
  currentAutoTraceEntries,
5
5
  invokeThroughAutoTraceEntries,
6
+ runAsAutoTraceRootFunction,
6
7
  runWithAutoTraceEntry,
7
8
  runWithAutoTraceNodeConfiguration,
8
9
  runWithAutoTraceRootContext
9
- } from "./chunk-YWXQM6J3.js";
10
+ } from "./chunk-QRNHRY7F.js";
10
11
  import {
11
12
  NO_MOCK_OVERRIDE,
12
13
  createIntegrationFixtureContext,
@@ -17,7 +18,7 @@ import {
17
18
  serializeValue,
18
19
  toJsonSafe,
19
20
  toJsonSafeReport
20
- } from "./chunk-2A4MMF2B.js";
21
+ } from "./chunk-NMPHLDEG.js";
21
22
  import {
22
23
  BitfabError,
23
24
  CONTENT_OFF_KEY,
@@ -37,7 +38,7 @@ import {
37
38
  readEnv,
38
39
  recordCallerTraceMetadata,
39
40
  retireTraceMetadata
40
- } from "./chunk-UKQOBPTJ.js";
41
+ } from "./chunk-MPZBAVVQ.js";
41
42
  import {
42
43
  __privateAdd,
43
44
  __privateGet,
@@ -4457,6 +4458,11 @@ function readBooleanEnv(name) {
4457
4458
  );
4458
4459
  return void 0;
4459
4460
  }
4461
+ var AUTO_TRACE_NODE_FUNCTION_NAMES = /* @__PURE__ */ new WeakMap();
4462
+ function registerAutoTraceNode(configured, functionName) {
4463
+ AUTO_TRACE_NODE_FUNCTION_NAMES.set(configured, functionName);
4464
+ return configured;
4465
+ }
4460
4466
  var DEFAULT_AUTO_TRACE_MAX_DEPTH = 30;
4461
4467
  var DEFAULT_AUTO_TRACE_MAX_CAPTURED_SUBTREE_SPANS = 500;
4462
4468
  function spanOwnerName(receiver) {
@@ -4592,7 +4598,13 @@ var Bitfab = class {
4592
4598
  throw new BitfabError("bitfab.withTrace requires a function");
4593
4599
  }
4594
4600
  const name = fn.name !== "" ? fn.name : traceFunctionKey;
4595
- return this.createAutoTraceRoot(traceFunctionKey, name, options, fn);
4601
+ return this.createAutoTraceRoot(
4602
+ traceFunctionKey,
4603
+ name,
4604
+ options,
4605
+ fn,
4606
+ AUTO_TRACE_NODE_FUNCTION_NAMES.get(fn) ?? fn.name.replace(/^bound /, "")
4607
+ );
4596
4608
  }
4597
4609
  /**
4598
4610
  * Configure a transformed class method when it is discovered beneath a
@@ -4673,7 +4685,7 @@ var Bitfab = class {
4673
4685
  }
4674
4686
  createAutoTraceNode(configuration, fn, functionName) {
4675
4687
  const nodeConfiguration = { ...configuration, functionName };
4676
- return function(...args) {
4688
+ return registerAutoTraceNode(function(...args) {
4677
4689
  if (!__bitfabAutoTraceActive()) {
4678
4690
  if (enclosingSurface() === "opt-in") {
4679
4691
  throw mixedTracingError("node()", "opt-out", "opt-in");
@@ -4684,11 +4696,15 @@ var Bitfab = class {
4684
4696
  nodeConfiguration,
4685
4697
  () => fn.apply(this, args)
4686
4698
  );
4687
- };
4699
+ }, functionName);
4688
4700
  }
4689
- createAutoTraceRoot(traceFunctionKey, name, options, fn) {
4701
+ createAutoTraceRoot(traceFunctionKey, name, options, fn, rootFunctionName = "") {
4690
4702
  const self = this;
4691
4703
  self.simulationPlan.refresh();
4704
+ const runRootFunction = (receiver, args) => runAsAutoTraceRootFunction(
4705
+ rootFunctionName,
4706
+ () => fn.apply(receiver, args)
4707
+ );
4692
4708
  const maxDepth = autoTraceLimit(
4693
4709
  options.maxDepth,
4694
4710
  DEFAULT_AUTO_TRACE_MAX_DEPTH
@@ -4851,7 +4867,7 @@ var Bitfab = class {
4851
4867
  return runWithAutoTraceRootContext(
4852
4868
  autoTraceContext,
4853
4869
  getSpanStack(),
4854
- () => fn.apply(this, args)
4870
+ () => runRootFunction(this, args)
4855
4871
  );
4856
4872
  }
4857
4873
  );
@@ -4884,7 +4900,7 @@ var Bitfab = class {
4884
4900
  ),
4885
4901
  () => {
4886
4902
  if (link === void 0) {
4887
- return fn.apply(this, args);
4903
+ return runRootFunction(this, args);
4888
4904
  }
4889
4905
  const innermost = enclosing[enclosing.length - 1];
4890
4906
  const innermostNow = currentAutoTraceEntries().find(
@@ -6403,7 +6419,7 @@ var Bitfab = class {
6403
6419
  await runWithSeedContext({ traceId }, async () => target(...args));
6404
6420
  } finally {
6405
6421
  try {
6406
- const { flushTraces: flushTraces2 } = await import("./http-UAXBI747.js");
6422
+ const { flushTraces: flushTraces2 } = await import("./http-UHEXY3ZE.js");
6407
6423
  await flushTraces2(3e4);
6408
6424
  } finally {
6409
6425
  unrecorded = activeTraceStates.delete(traceId);
@@ -6462,7 +6478,7 @@ var Bitfab = class {
6462
6478
  `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.`
6463
6479
  );
6464
6480
  }
6465
- const { replay: doReplay } = await import("./replay-U65EXYUR.js");
6481
+ const { replay: doReplay } = await import("./replay-R3EIGP7F.js");
6466
6482
  return doReplay(
6467
6483
  this.httpClient,
6468
6484
  this.serviceUrl,
@@ -6808,7 +6824,7 @@ async function seedFromRegistry(registry, pipeline, cases, options = {}) {
6808
6824
  sessionId: seedCase.sessionId
6809
6825
  })
6810
6826
  );
6811
- const { flushTraces: flushTraces2 } = await import("./http-UAXBI747.js");
6827
+ const { flushTraces: flushTraces2 } = await import("./http-UHEXY3ZE.js");
6812
6828
  await flushTraces2(3e4);
6813
6829
  return { pipeline, traceFunctionKey, traceIds };
6814
6830
  }
@@ -6855,4 +6871,4 @@ export {
6855
6871
  reseedFromRegistry,
6856
6872
  seedFromRegistry
6857
6873
  };
6858
- //# sourceMappingURL=chunk-BTCULORS.js.map
6874
+ //# sourceMappingURL=chunk-SE73IWU6.js.map