@bitfab/sdk 0.76.5 → 0.76.7
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/{autoTrace-pZKu5Nk2.cjs → autoTrace-BtiEpHTN.cjs} +76 -4
- package/dist/autoTrace-BtiEpHTN.cjs.map +1 -0
- package/dist/{autoTrace-BgN0zCQf.js → autoTrace-RWUOk1WF.js} +47 -5
- package/dist/autoTrace-RWUOk1WF.js.map +1 -0
- package/dist/autoTrace.cjs +1 -1
- package/dist/autoTrace.js +1 -1
- package/dist/{babelPlugin-tupc_WZS.js → babelPlugin-398AO0eD.js} +6 -2
- package/dist/babelPlugin-398AO0eD.js.map +1 -0
- package/dist/{babelPlugin-C4ERQ8DW.cjs → babelPlugin-Btzkfl62.cjs} +6 -2
- package/dist/babelPlugin-Btzkfl62.cjs.map +1 -0
- package/dist/{http-BXQZC6_Y.cjs → http-7FhAoWen.cjs} +3 -3
- package/dist/{http-BXQZC6_Y.cjs.map → http-7FhAoWen.cjs.map} +1 -1
- package/dist/{http-BLyaXOOY.js → http-DoS4PUm6.js} +3 -3
- package/dist/{http-BLyaXOOY.js.map → http-DoS4PUm6.js.map} +1 -1
- package/dist/{index-QVRAlE4o.d.cts → index-C-3LPlPg.d.cts} +58 -2
- package/dist/{index-QVRAlE4o.d.ts → index-C-3LPlPg.d.ts} +58 -2
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/node.cjs +3 -3
- package/dist/node.d.cts +2 -2
- package/dist/node.d.ts +2 -2
- package/dist/node.js +3 -3
- package/dist/{registryCommand-M1u4H9PI.js → registryCommand-D9EkYtKh.js} +34 -3
- package/dist/registryCommand-D9EkYtKh.js.map +1 -0
- package/dist/replayCli.js +1 -1
- package/dist/seedCli.js +1 -1
- package/dist/{src-CWmTGb52.cjs → src-C0Mz9eoA.cjs} +119 -62
- package/dist/src-C0Mz9eoA.cjs.map +1 -0
- package/dist/{src-B_e7xNzm.js → src-Cm9Jdgfh.js} +119 -62
- package/dist/src-Cm9Jdgfh.js.map +1 -0
- package/dist/transform/babel.cjs +1 -1
- package/dist/transform/babel.js +1 -1
- package/dist/transform/loaderRuntime.cjs +2 -2
- package/dist/transform/loaderRuntime.js +2 -2
- package/dist/transform/nodeLoader.js +5 -1
- package/dist/transform/nodeLoader.js.map +1 -1
- package/dist/transform/swc.cjs +1 -1
- package/dist/transform/swc.js +1 -1
- package/dist/transform/unplugin.cjs +2 -2
- package/dist/transform/unplugin.js +2 -2
- package/dist/{transform-mb6EwHsJ.js → transform-BBlyY-tA.js} +2 -2
- package/dist/{transform-mb6EwHsJ.js.map → transform-BBlyY-tA.js.map} +1 -1
- package/dist/{transform-CcNCVr8A.cjs → transform-CclhVghC.cjs} +2 -2
- package/dist/{transform-CcNCVr8A.cjs.map → transform-CclhVghC.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/autoTrace-BgN0zCQf.js.map +0 -1
- package/dist/autoTrace-pZKu5Nk2.cjs.map +0 -1
- package/dist/babelPlugin-C4ERQ8DW.cjs.map +0 -1
- package/dist/babelPlugin-tupc_WZS.js.map +0 -1
- package/dist/registryCommand-M1u4H9PI.js.map +0 -1
- package/dist/src-B_e7xNzm.js.map +0 -1
- package/dist/src-CWmTGb52.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoTrace-RWUOk1WF.js","names":["target"],"sources":["../src/asyncStorage.ts","../src/captureSuppression.ts","../src/warnOnce.ts","../src/langchainRunScope.ts","../src/openaiAgentsSpanContext.ts","../src/streamFinalizationError.ts","../src/clientCalls.ts","../src/autoTrace.ts"],"sourcesContent":["/**\n * Shared AsyncLocalStorage loader.\n *\n * Provides two ways to initialize AsyncLocalStorage:\n *\n * 1. **Synchronous registration** (preferred for Node.js):\n * `asyncStorageNode.ts` calls `registerAsyncLocalStorageClass()` at module\n * evaluation time, so the class is available immediately - no async gap.\n * The `node.ts` entry point imports it before anything else.\n *\n * 2. **Async dynamic import** (fallback for the default entry point):\n * Loads `node:async_hooks` via a bundler-safe dynamic import. This is used\n * by the default `index.ts` entry point so the SDK works in browsers\n * (where the import silently fails) and in Node.js when imported via the\n * default entry point.\n *\n * ## Why the dynamic import looks like this\n *\n * We need to handle three environments:\n *\n * 1. **Pure Node.js** - `import(\"node:async_hooks\")` works natively.\n * 2. **Webpack/Turbopack (Next.js server)** - The bundler processes\n * `import()` calls at build time. The `webpackIgnore` magic comment tells\n * webpack (and turbopack) to emit a native `import()` call instead of\n * trying to resolve it, so Node.js handles it at runtime.\n * 3. **Browsers / Edge** - The `process.versions?.node` guard prevents\n * execution entirely. If it somehow runs, `.catch(() => {})` swallows\n * the failure.\n */\n\nexport interface AsyncLocalStorageLike<T> {\n getStore(): T | undefined\n run<R>(store: T, fn: () => R): R\n}\n\nlet AsyncLocalStorageClass: (new () => AsyncLocalStorageLike<unknown>) | null =\n null\nlet initDone = false\n\n/**\n * Register the AsyncLocalStorage class synchronously.\n *\n * Called by `asyncStorageNode.ts` at module evaluation time so the class\n * is available before any span is created - no async gap, no race condition.\n *\n * Safe to call multiple times; subsequent calls are no-ops.\n */\nexport function registerAsyncLocalStorageClass(\n cls: new () => AsyncLocalStorageLike<unknown>,\n): void {\n if (!AsyncLocalStorageClass) {\n AsyncLocalStorageClass = cls\n }\n initDone = true\n}\n\n/**\n * Assert that AsyncLocalStorage was registered successfully.\n *\n * Called by `node.ts` after importing `asyncStorageNode.ts` to catch\n * import-order bugs at startup rather than silently degrading to the\n * browser fallback (flat spans with no nesting).\n *\n * This should ONLY be called from the Node.js entry point where we\n * know `node:async_hooks` must be available.\n */\nexport function assertAsyncStorageRegistered(): void {\n if (!AsyncLocalStorageClass) {\n console.warn(\n \"Bitfab: AsyncLocalStorage not available - nested span context will not propagate.\",\n )\n }\n}\n\nexport const asyncStorageReady: Promise<void> = (\n typeof process !== \"undefined\" && process.versions?.node\n ? // The join trick hides \"node:async_hooks\" from static analysis so\n // bundlers that ban Node.js built-ins don't fail at build time.\n // webpackIgnore tells webpack/turbopack to emit a native import()\n // so Node.js can resolve the module at runtime.\n import(\n /* webpackIgnore: true */\n [\"node\", \"async_hooks\"].join(\":\")\n )\n .then(\n (mod: {\n AsyncLocalStorage: new () => AsyncLocalStorageLike<unknown>\n }) => {\n registerAsyncLocalStorageClass(mod.AsyncLocalStorage)\n },\n )\n .catch(() => {})\n : Promise.resolve()\n).then(() => {\n initDone = true\n})\n\nexport function isAsyncStorageInitDone(): boolean {\n return initDone\n}\n\nexport function createAsyncLocalStorage<T>(): AsyncLocalStorageLike<T> | null {\n return AsyncLocalStorageClass\n ? (new AsyncLocalStorageClass() as AsyncLocalStorageLike<T>)\n : null\n}\n","interface CaptureSuppressionState {\n depth: number\n}\n\ninterface CaptureSuppressionGlobal {\n __bitfabCaptureSuppressionV1?: CaptureSuppressionState\n}\n\nconst suppressionGlobal = globalThis as unknown as CaptureSuppressionGlobal\nconst suppressionState: CaptureSuppressionState =\n suppressionGlobal.__bitfabCaptureSuppressionV1 ?? { depth: 0 }\nsuppressionGlobal.__bitfabCaptureSuppressionV1 = suppressionState\n\nexport function isCaptureSuppressed(): boolean {\n return suppressionState.depth > 0\n}\n\nexport function runWithCaptureSuppressed<T>(fn: () => T): T {\n suppressionState.depth += 1\n try {\n return fn()\n } finally {\n suppressionState.depth -= 1\n }\n}\n","/**\n * Emit a `console.warn` at most once per distinct `key` for the life of the\n * process.\n *\n * The SDK must NEVER crash a host app, so every failure on the user's path\n * degrades silently (a span is dropped, a call runs untraced, a payload is\n * stubbed). Silent is safe but undebuggable: a user who suddenly has no traces,\n * or sees `<unserializable>` in a span, has no signal as to why. A one-time\n * warning per distinct issue restores that signal without spamming the console\n * from a hot path.\n *\n * Keys should identify the specific degradation (e.g. include the traced\n * function key) so each distinct issue warns once, not just the first one seen.\n */\nconst warned = new Set<string>()\n\nexport function warn(message: string): void {\n try {\n console.warn(`[bitfab] ${message}`)\n } catch {\n // Logging must never crash the host app (e.g. a closed/replaced console).\n }\n}\n\nexport function warnOnce(key: string, message: string): void {\n if (warned.has(key)) {\n return\n }\n warned.add(key)\n warn(message)\n}\n\nexport function writeOnce(\n key: string,\n line: string,\n write: (line: string) => void = console.warn,\n): void {\n if (warned.has(key)) {\n return\n }\n warned.add(key)\n try {\n write(line)\n } catch {}\n}\n\n/** Test-only: clear the dedup set so a warning can fire again. */\nexport function _resetWarnOnce(): void {\n warned.clear()\n}\n","import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { importOptionalPeer } from \"./optionalPeer.js\"\n\nconst RUN_SCOPE_STORAGE_SYMBOL = Symbol.for(\"bitfab.langchainRunScopeStorage\")\nconst SCOPED_GENERATE_SYMBOL = Symbol.for(\"bitfab.langchainScopedGenerate\")\nconst UNSCOPED_RUNS_SYMBOL = Symbol.for(\"bitfab.langchainUnscopedRuns\")\nconst MODEL_CLASSES = [\n {\n specifierParts: [\"@langchain\", \"core\", \"language_models\", \"chat_models\"],\n name: \"BaseChatModel\",\n },\n {\n specifierParts: [\"@langchain\", \"core\", \"language_models\", \"llms\"],\n name: \"BaseLLM\",\n },\n] as const\n\ninterface LangChainRunScope {\n recordedByHandler: boolean\n}\n\ntype Generate = ((...args: unknown[]) => unknown) & {\n [SCOPED_GENERATE_SYMBOL]?: true\n}\n\ntype StreamIterator = ((...args: unknown[]) => AsyncIterator<unknown>) & {\n [SCOPED_GENERATE_SYMBOL]?: true\n}\n\ninterface ModelPrototype {\n generate?: Generate\n _streamIterator?: StreamIterator\n}\n\nlet runScopeStorage: AsyncLocalStorageLike<LangChainRunScope> | null = null\nlet installation: Promise<void> | null = null\n\nfunction storage(): AsyncLocalStorageLike<LangChainRunScope> | null {\n if (runScopeStorage) {\n return runScopeStorage\n }\n const shared = globalThis as typeof globalThis & Record<symbol, unknown>\n const existing = shared[RUN_SCOPE_STORAGE_SYMBOL] as\n | AsyncLocalStorageLike<LangChainRunScope>\n | undefined\n runScopeStorage = existing ?? createAsyncLocalStorage<LangChainRunScope>()\n if (runScopeStorage && !existing) {\n shared[RUN_SCOPE_STORAGE_SYMBOL] = runScopeStorage\n }\n return runScopeStorage\n}\n\nfunction unscopedRuns(): Set<string> {\n const shared = globalThis as typeof globalThis & Record<symbol, unknown>\n const existing = shared[UNSCOPED_RUNS_SYMBOL] as Set<string> | undefined\n if (existing) {\n return existing\n }\n const created = new Set<string>()\n shared[UNSCOPED_RUNS_SYMBOL] = created\n return created\n}\n\nfunction scopedIterator(\n runStorage: AsyncLocalStorageLike<LangChainRunScope>,\n iterator: AsyncIterator<unknown>,\n): AsyncIterableIterator<unknown> {\n const scope: LangChainRunScope = { recordedByHandler: false }\n const inScope = <T>(step: () => Promise<T>): Promise<T> =>\n runStorage.run(scope, step)\n return {\n next: (...args: [] | [unknown]) => inScope(() => iterator.next(...args)),\n return: (value?: unknown) =>\n inScope(() =>\n iterator.return === undefined\n ? Promise.resolve({ done: true as const, value })\n : iterator.return(value),\n ),\n throw: (error?: unknown) =>\n inScope(() =>\n iterator.throw === undefined\n ? Promise.reject(error)\n : iterator.throw(error),\n ),\n [Symbol.asyncIterator]() {\n return this\n },\n }\n}\n\nfunction scopeStreamIterator(prototype: ModelPrototype): void {\n const original = prototype._streamIterator\n if (typeof original !== \"function\" || original[SCOPED_GENERATE_SYMBOL]) {\n return\n }\n const scoped: StreamIterator = function (this: unknown, ...args: unknown[]) {\n const runStorage = storage()\n const iterator = original.apply(this, args)\n return runStorage ? scopedIterator(runStorage, iterator) : iterator\n }\n scoped[SCOPED_GENERATE_SYMBOL] = true\n prototype._streamIterator = scoped\n}\n\nfunction scopeGenerate(prototype: ModelPrototype): void {\n const original = prototype.generate\n if (typeof original !== \"function\" || original[SCOPED_GENERATE_SYMBOL]) {\n return\n }\n const scoped: Generate = function (this: unknown, ...args: unknown[]) {\n const runStorage = storage()\n if (!runStorage) {\n return original.apply(this, args)\n }\n return runStorage.run({ recordedByHandler: false }, () =>\n original.apply(this, args),\n )\n }\n scoped[SCOPED_GENERATE_SYMBOL] = true\n prototype.generate = scoped\n}\n\nasync function scopeModelClass(\n specifierParts: readonly string[],\n name: string,\n): Promise<void> {\n try {\n const module =\n await importOptionalPeer<Record<string, unknown>>(specifierParts)\n const modelClass = module[name] as { prototype?: ModelPrototype }\n if (modelClass?.prototype) {\n scopeGenerate(modelClass.prototype)\n scopeStreamIterator(modelClass.prototype)\n }\n } catch {}\n}\n\nexport function installLangChainRunScopes(): Promise<void> {\n installation ??= Promise.all(\n MODEL_CLASSES.map(({ specifierParts, name }) =>\n scopeModelClass(specifierParts, name),\n ),\n ).then(() => undefined)\n return installation\n}\n\nexport function markLangChainRunRecorded(runId: string): void {\n const scope = storage()?.getStore()\n if (scope) {\n scope.recordedByHandler = true\n return\n }\n unscopedRuns().add(runId)\n}\n\nexport function forgetLangChainRun(runId: string): void {\n unscopedRuns().delete(runId)\n}\n\nexport function langChainHandlerRecordsCall(): boolean {\n const scope = storage()?.getStore()\n if (scope) {\n return scope.recordedByHandler\n }\n return unscopedRuns().size > 0\n}\n","const OPENAI_AGENTS_CONTEXT_STORAGE = Symbol.for(\n \"openai.agents.core.asyncLocalStorage\",\n)\nconst MAX_OPENAI_AGENTS_SPAN_CHAIN = 64\nexport const MODEL_CALL_SPAN_TYPES: ReadonlySet<string> = new Set([\n \"generation\",\n \"response\",\n])\n\ninterface OpenAiAgentsSpanLike {\n spanId?: unknown\n traceId?: unknown\n spanData?: { type?: unknown } | null\n previousSpan?: OpenAiAgentsSpanLike | null\n}\n\ninterface OpenAiAgentsContextStore {\n active?: unknown\n span?: OpenAiAgentsSpanLike | null\n}\n\ninterface OpenAiAgentsContextStorage {\n getStore(): OpenAiAgentsContextStore | undefined\n}\n\ninterface OpenAiAgentsSpanState {\n bitfabTraceIds: Map<string, string>\n endedSpanIds: Map<string, Set<string>>\n}\n\ninterface OpenAiAgentsSpanGlobal {\n __bitfabOpenAiAgentsSpansV1?: OpenAiAgentsSpanState\n}\n\nconst spanGlobal = globalThis as unknown as OpenAiAgentsSpanGlobal &\n Record<symbol, unknown>\nconst state: OpenAiAgentsSpanState = spanGlobal.__bitfabOpenAiAgentsSpansV1 ?? {\n bitfabTraceIds: new Map(),\n endedSpanIds: new Map(),\n}\nspanGlobal.__bitfabOpenAiAgentsSpansV1 = state\n\nexport function mapOpenAiAgentsTrace(\n agentsTraceId: string,\n bitfabTraceId: string,\n): void {\n state.bitfabTraceIds.set(agentsTraceId, bitfabTraceId)\n}\n\nexport function unmapOpenAiAgentsTrace(agentsTraceId: string): void {\n state.bitfabTraceIds.delete(agentsTraceId)\n state.endedSpanIds.delete(agentsTraceId)\n}\n\nexport function endOpenAiAgentsSpan(\n agentsTraceId: string,\n spanId: string,\n): void {\n if (!state.bitfabTraceIds.has(agentsTraceId)) {\n return\n }\n const ended = state.endedSpanIds.get(agentsTraceId) ?? new Set<string>()\n ended.add(spanId)\n state.endedSpanIds.set(agentsTraceId, ended)\n}\n\nfunction isOpenAiAgentsContextStorage(\n value: unknown,\n): value is OpenAiAgentsContextStorage {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as { getStore?: unknown }).getStore === \"function\"\n )\n}\n\nfunction currentOpenAiAgentsSpan(): OpenAiAgentsSpanLike | undefined {\n const storage = spanGlobal[OPENAI_AGENTS_CONTEXT_STORAGE]\n if (!isOpenAiAgentsContextStorage(storage)) {\n return undefined\n }\n try {\n const store = storage.getStore()\n return store?.active === true ? (store.span ?? undefined) : undefined\n } catch {\n return undefined\n }\n}\n\nfunction currentOpenAiAgentsSpans(): OpenAiAgentsSpanLike[] {\n const spans: OpenAiAgentsSpanLike[] = []\n let span = currentOpenAiAgentsSpan()\n while (span !== undefined && spans.length < MAX_OPENAI_AGENTS_SPAN_CHAIN) {\n spans.push(span)\n span = span.previousSpan ?? undefined\n }\n return spans\n}\n\nexport function openAiAgentsSpanChain(): string[] {\n if (state.bitfabTraceIds.size === 0) {\n return []\n }\n return currentOpenAiAgentsSpans()\n .map((span) => span.spanId)\n .filter((spanId): spanId is string => typeof spanId === \"string\")\n}\n\nexport function openAiAgentsParentSpanId(\n bitfabTraceId: string,\n enclosingSpanIds: readonly string[] | undefined,\n): string | undefined {\n if (state.bitfabTraceIds.size === 0) {\n return undefined\n }\n for (const span of currentOpenAiAgentsSpans()) {\n if (typeof span.spanId !== \"string\" || typeof span.traceId !== \"string\") {\n return undefined\n }\n if (state.bitfabTraceIds.get(span.traceId) !== bitfabTraceId) {\n return undefined\n }\n if (enclosingSpanIds?.includes(span.spanId)) {\n return undefined\n }\n if (!state.endedSpanIds.get(span.traceId)?.has(span.spanId)) {\n return span.spanId\n }\n }\n return undefined\n}\n\nexport function openAiAgentsModelCallOpen(): boolean {\n if (state.bitfabTraceIds.size === 0) {\n return false\n }\n return currentOpenAiAgentsSpans().some(\n (span) =>\n typeof span.traceId === \"string\" &&\n typeof span.spanId === \"string\" &&\n state.bitfabTraceIds.has(span.traceId) &&\n MODEL_CALL_SPAN_TYPES.has(String(span.spanData?.type)) &&\n !state.endedSpanIds.get(span.traceId)?.has(span.spanId),\n )\n}\n","export class StreamFinalizationError extends Error {\n constructor(\n message: string,\n readonly output: unknown,\n ) {\n super(message)\n this.name = \"StreamFinalizationError\"\n }\n}\n","import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { langChainHandlerRecordsCall } from \"./langchainRunScope.js\"\nimport { openAiAgentsModelCallOpen } from \"./openaiAgentsSpanContext.js\"\nimport { StreamFinalizationError } from \"./streamFinalizationError.js\"\n\nconst OPENROUTER_HOSTNAME = \"openrouter.ai\"\nconst ANTHROPIC_HOSTNAME = \"anthropic.com\"\nconst CLIENT_CALL_WATCH_STORAGE_SYMBOL = Symbol.for(\n \"bitfab.clientCallWatchStorage\",\n)\nconst RESPONSE_DONE_EVENTS = [\n \"response.completed\",\n \"response.incomplete\",\n \"response.failed\",\n] as const\nconst TRANSCRIPT_DONE_EVENT = \"transcript.text.done\"\nconst STREAM_END_EVENT = \"end\"\n\nexport type ClientCallEndpoint =\n | \"chat.completions\"\n | \"embeddings\"\n | \"audio.transcriptions\"\n | \"messages\"\n | \"responses\"\n | \"models\"\n\nexport interface ClientCallProvider {\n key: string\n provider: string\n library: string\n endpoint: ClientCallEndpoint\n methods: readonly string[]\n streamMethods: readonly string[]\n streamEvents: readonly string[]\n spanMethods?: Readonly<Record<string, string>>\n matchesReceiver(receiver: unknown): boolean\n isResponse(response: unknown): boolean\n prompt(body: unknown): string | undefined\n usage(body: unknown, response: unknown): Record<string, unknown>\n streamSummary?(events: unknown[]): unknown\n}\n\ninterface ClientCallWatch {\n recorded: boolean\n parent: ClientCallWatch | null\n}\n\ninterface ClientCallSpan {\n addContext(context: Record<string, unknown>): void\n setPrompt(prompt: string): void\n}\n\ninterface PromptEntry {\n role: string\n content: string\n}\n\ninterface ToolCallSlot {\n name?: string\n arguments: string\n}\n\ninterface EventStreamLike {\n on(event: string, listener: (...args: unknown[]) => void): unknown\n readonly errored?: boolean\n readonly aborted?: boolean\n}\n\ninterface IteratorStreamLike {\n iterator: () => AsyncIterator<unknown>\n}\n\nconst responsesRecordedByAutoTrace = new WeakSet<object>()\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n}\n\nfunction field(value: unknown, name: string): unknown {\n return isRecord(value) ? value[name] : undefined\n}\n\nfunction numberField(value: unknown, name: string): number | undefined {\n const found = field(value, name)\n return typeof found === \"number\" && Number.isFinite(found) ? found : undefined\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value !== \"\" ? value : undefined\n}\n\nfunction presentFields(\n values: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(values).filter(([, value]) => value !== undefined),\n )\n}\n\nfunction sumOfPresent(values: Array<number | undefined>): number | undefined {\n const present = values.filter((value) => value !== undefined)\n return present.length > 0\n ? present.reduce((total, value) => total + value, 0)\n : undefined\n}\n\nfunction textOf(content: unknown): string {\n return typeof content === \"string\" ? content : JSON.stringify(content)\n}\n\nfunction roleEntries(items: unknown[]): PromptEntry[] {\n return items.flatMap((item) => {\n const role = field(item, \"role\")\n if (typeof role !== \"string\") {\n return []\n }\n return [{ role, content: textOf(field(item, \"content\")) }]\n })\n}\n\nfunction isNil(value: unknown): value is null | undefined {\n return value === undefined || value === null\n}\n\nfunction isBlank(content: unknown): boolean {\n return (\n isNil(content) ||\n content === \"\" ||\n (Array.isArray(content) && content.length === 0)\n )\n}\n\nfunction systemEntry(content: unknown): PromptEntry[] {\n return isBlank(content) ? [] : [{ role: \"system\", content: textOf(content) }]\n}\n\nfunction userEntries(content: unknown): PromptEntry[] {\n if (isBlank(content)) {\n return []\n }\n if (\n Array.isArray(content) &&\n content.every((item) => typeof item === \"string\")\n ) {\n return content.map((item) => ({ role: \"user\", content: item }))\n }\n return [{ role: \"user\", content: textOf(content) }]\n}\n\nfunction renderedPrompt(entries: PromptEntry[]): string | undefined {\n return entries.length > 0 ? JSON.stringify(entries) : undefined\n}\n\nfunction modelOf(body: unknown, response: unknown): string | undefined {\n return (\n nonEmptyString(field(response, \"model\")) ??\n nonEmptyString(field(body, \"model\"))\n )\n}\n\nfunction lastMatching(\n items: unknown[],\n matches: (item: unknown) => boolean,\n): unknown {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (matches(items[index])) {\n return items[index]\n }\n }\n return undefined\n}\n\nfunction lastWith(events: unknown[], name: string): unknown {\n return lastMatching(events, (event) => !isNil(field(event, name)))\n}\n\nfunction clientOf(receiver: unknown): unknown {\n try {\n return field(receiver, \"_client\")\n } catch {\n return undefined\n }\n}\n\nfunction clientClassStatic(receiver: unknown, name: string): unknown {\n const client = clientOf(receiver)\n if (!isRecord(client)) {\n return undefined\n }\n try {\n const clientClass: unknown = client.constructor\n return typeof clientClass === \"function\"\n ? (clientClass as unknown as Record<string, unknown>)[name]\n : undefined\n } catch {\n return undefined\n }\n}\n\nfunction baseUrlHostIs(baseUrl: unknown, hostname: string): boolean {\n if (typeof baseUrl !== \"string\") {\n return false\n }\n try {\n const host = new URL(baseUrl).hostname\n return host === hostname || host.endsWith(`.${hostname}`)\n } catch {\n return false\n }\n}\n\nexport function isOpenRouterBaseUrl(baseUrl: unknown): boolean {\n return baseUrlHostIs(baseUrl, OPENROUTER_HOSTNAME)\n}\n\nexport function isAnthropicBaseUrl(baseUrl: unknown): boolean {\n return baseUrlHostIs(baseUrl, ANTHROPIC_HOSTNAME)\n}\n\nfunction isOpenRouterResource(receiver: unknown): boolean {\n try {\n return isOpenRouterBaseUrl(field(clientOf(receiver), \"baseURL\"))\n } catch {\n return false\n }\n}\n\nfunction isAnthropicResource(receiver: unknown): boolean {\n return (\n typeof clientClassStatic(receiver, \"AnthropicError\") === \"function\" ||\n typeof clientClassStatic(receiver, \"HUMAN_PROMPT\") === \"string\"\n )\n}\n\nfunction isOpenAIResource(receiver: unknown): boolean {\n return typeof clientClassStatic(receiver, \"OpenAI\") === \"function\"\n}\n\nfunction isGeminiModels(receiver: unknown): boolean {\n try {\n return (\n isRecord(receiver) &&\n isRecord(receiver.apiClient) &&\n typeof receiver.generateContent === \"function\" &&\n typeof receiver.generateContentStream === \"function\"\n )\n } catch {\n return false\n }\n}\n\nfunction isChatCompletion(response: unknown): boolean {\n return isRecord(response) && Array.isArray(response.choices)\n}\n\nfunction chatCompletionPrompt(body: unknown): string | undefined {\n const messages = field(body, \"messages\")\n return Array.isArray(messages)\n ? renderedPrompt(roleEntries(messages))\n : undefined\n}\n\nfunction chatCompletionUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n return {\n model: modelOf(body, response),\n upstreamProvider: nonEmptyString(field(response, \"provider\")),\n inputTokens: numberField(usage, \"prompt_tokens\"),\n outputTokens: numberField(usage, \"completion_tokens\"),\n cachedInputTokens: numberField(\n field(usage, \"prompt_tokens_details\"),\n \"cached_tokens\",\n ),\n reasoningTokens: numberField(\n field(usage, \"completion_tokens_details\"),\n \"reasoning_tokens\",\n ),\n costUsd: numberField(usage, \"cost\"),\n }\n}\n\nfunction chatToolCalls(chunks: unknown[]): unknown[] {\n const slots = new Map<number, ToolCallSlot>()\n for (const chunk of chunks) {\n const delta = field(firstChoice(chunk), \"delta\")\n const toolCalls = field(delta, \"tool_calls\")\n if (!Array.isArray(toolCalls)) {\n continue\n }\n for (const toolCall of toolCalls) {\n const index = numberField(toolCall, \"index\") ?? 0\n const slot = slots.get(index) ?? { arguments: \"\" }\n const fn = field(toolCall, \"function\")\n const name = nonEmptyString(field(fn, \"name\"))\n const args = nonEmptyString(field(fn, \"arguments\"))\n slots.set(index, {\n name: name ?? slot.name,\n arguments: slot.arguments + (args ?? \"\"),\n })\n }\n }\n return [...slots.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, slot]) => ({\n type: \"function\",\n function: { name: slot.name, arguments: slot.arguments },\n }))\n}\n\nfunction firstChoice(chunk: unknown): unknown {\n const choices = field(chunk, \"choices\")\n return Array.isArray(choices) ? choices[0] : undefined\n}\n\nfunction chatStreamSummary(chunks: unknown[]): unknown {\n if (chunks.length === 0) {\n return undefined\n }\n const last = lastWith(chunks, \"usage\") ?? chunks[chunks.length - 1]\n const text = chunks\n .map((chunk) => field(field(firstChoice(chunk), \"delta\"), \"content\"))\n .filter((content): content is string => typeof content === \"string\")\n .join(\"\")\n const finishReason = lastMatching(\n chunks.map((chunk) => field(firstChoice(chunk), \"finish_reason\")),\n (reason) => typeof reason === \"string\",\n )\n const toolCalls = chatToolCalls(chunks)\n return {\n object: \"chat.completion\",\n model: field(last, \"model\"),\n provider: field(last, \"provider\"),\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content: text,\n ...(toolCalls.length > 0 && { tool_calls: toolCalls }),\n },\n finish_reason: finishReason ?? null,\n },\n ],\n usage: field(last, \"usage\"),\n }\n}\n\nfunction isEmbeddingList(response: unknown): boolean {\n return (\n field(response, \"object\") === \"list\" &&\n Array.isArray(field(response, \"data\"))\n )\n}\n\nfunction embeddingPrompt(body: unknown): string | undefined {\n return renderedPrompt(userEntries(field(body, \"input\")))\n}\n\nfunction embeddingUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n const inputTokens = numberField(usage, \"prompt_tokens\")\n return {\n model: modelOf(body, response),\n upstreamProvider: nonEmptyString(field(response, \"provider\")),\n inputTokens,\n outputTokens: inputTokens === undefined ? undefined : 0,\n costUsd: numberField(usage, \"cost\"),\n }\n}\n\nfunction isTranscription(response: unknown): boolean {\n return typeof field(response, \"text\") === \"string\"\n}\n\nfunction transcriptionPrompt(body: unknown): string | undefined {\n return renderedPrompt(userEntries(field(body, \"prompt\")))\n}\n\nfunction transcriptionUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n return {\n model: modelOf(body, response),\n inputTokens: numberField(usage, \"input_tokens\"),\n outputTokens: numberField(usage, \"output_tokens\"),\n audioSeconds: numberField(usage, \"seconds\"),\n }\n}\n\nfunction transcriptionStreamSummary(events: unknown[]): unknown {\n return lastMatching(\n events,\n (event) => field(event, \"type\") === TRANSCRIPT_DONE_EVENT,\n )\n}\n\nfunction isAnthropicMessage(response: unknown): boolean {\n return (\n field(response, \"type\") === \"message\" &&\n Array.isArray(field(response, \"content\"))\n )\n}\n\nfunction anthropicPrompt(body: unknown): string | undefined {\n const messages = field(body, \"messages\")\n return renderedPrompt([\n ...systemEntry(field(body, \"system\")),\n ...(Array.isArray(messages) ? roleEntries(messages) : []),\n ])\n}\n\nfunction anthropicUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n const cacheRead = numberField(usage, \"cache_read_input_tokens\")\n return {\n model: modelOf(body, response),\n inputTokens: sumOfPresent([\n numberField(usage, \"input_tokens\"),\n cacheRead,\n numberField(usage, \"cache_creation_input_tokens\"),\n ]),\n outputTokens: numberField(usage, \"output_tokens\"),\n cachedInputTokens: cacheRead,\n }\n}\n\nfunction anthropicStreamSummary(events: unknown[]): unknown {\n const message = field(\n events.find((event) => field(event, \"type\") === \"message_start\"),\n \"message\",\n )\n if (!isRecord(message)) {\n return undefined\n }\n let usage: Record<string, unknown> = {\n ...(isRecord(message.usage) ? message.usage : {}),\n }\n let stopReason: unknown = null\n const text: string[] = []\n for (const event of events) {\n const type = field(event, \"type\")\n if (type === \"message_delta\") {\n const deltaUsage = field(event, \"usage\")\n usage = {\n ...usage,\n ...(isRecord(deltaUsage) ? presentFields(deltaUsage) : {}),\n }\n stopReason = field(field(event, \"delta\"), \"stop_reason\") ?? stopReason\n }\n if (type === \"content_block_delta\") {\n const deltaText = field(field(event, \"delta\"), \"text\")\n if (typeof deltaText === \"string\") {\n text.push(deltaText)\n }\n }\n }\n return {\n type: \"message\",\n role: \"assistant\",\n model: message.model,\n content: [{ type: \"text\", text: text.join(\"\") }],\n stop_reason: stopReason,\n usage,\n }\n}\n\nfunction isOpenAIResponse(response: unknown): boolean {\n return field(response, \"object\") === \"response\"\n}\n\nfunction openAIResponsesPrompt(body: unknown): string | undefined {\n const input = field(body, \"input\")\n return renderedPrompt([\n ...systemEntry(field(body, \"instructions\")),\n ...(typeof input === \"string\" ? [{ role: \"user\", content: input }] : []),\n ...(Array.isArray(input) ? roleEntries(input) : []),\n ])\n}\n\nfunction openAIResponsesUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usage\")\n return {\n model: modelOf(body, response),\n inputTokens: numberField(usage, \"input_tokens\"),\n outputTokens: numberField(usage, \"output_tokens\"),\n cachedInputTokens: numberField(\n field(usage, \"input_tokens_details\"),\n \"cached_tokens\",\n ),\n reasoningTokens: numberField(\n field(usage, \"output_tokens_details\"),\n \"reasoning_tokens\",\n ),\n costUsd: numberField(usage, \"cost\"),\n }\n}\n\nfunction openAIResponsesStreamSummary(events: unknown[]): unknown {\n return field(\n lastMatching(events, (event) =>\n RESPONSE_DONE_EVENTS.some((type) => field(event, \"type\") === type),\n ),\n \"response\",\n )\n}\n\nfunction isGeminiResponse(response: unknown): boolean {\n return (\n field(response, \"usageMetadata\") !== undefined ||\n Array.isArray(field(response, \"candidates\"))\n )\n}\n\nfunction geminiContentText(content: unknown): string | undefined {\n if (isNil(content)) {\n return undefined\n }\n if (typeof content === \"string\") {\n return content\n }\n const parts = field(content, \"parts\")\n if (Array.isArray(parts)) {\n const texts = parts.map((part) => field(part, \"text\"))\n if (texts.every((text) => typeof text === \"string\")) {\n return texts.join(\"\")\n }\n }\n const text = field(content, \"text\")\n return typeof text === \"string\" ? text : textOf(content)\n}\n\nfunction geminiEntries(contents: unknown): PromptEntry[] {\n if (isNil(contents)) {\n return []\n }\n const items = Array.isArray(contents) ? contents : [contents]\n return items.map((item) => ({\n role: nonEmptyString(field(item, \"role\")) ?? \"user\",\n content: geminiContentText(item) ?? \"\",\n }))\n}\n\nfunction geminiPrompt(body: unknown): string | undefined {\n return renderedPrompt([\n ...systemEntry(\n geminiContentText(field(field(body, \"config\"), \"systemInstruction\")),\n ),\n ...geminiEntries(field(body, \"contents\")),\n ])\n}\n\nfunction geminiModel(body: unknown, response: unknown): string | undefined {\n const model =\n nonEmptyString(field(response, \"modelVersion\")) ??\n nonEmptyString(field(body, \"model\"))\n return model === undefined\n ? undefined\n : model.slice(model.lastIndexOf(\"/\") + 1)\n}\n\nfunction geminiUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const usage = field(response, \"usageMetadata\")\n const thoughts = numberField(usage, \"thoughtsTokenCount\")\n return {\n model: geminiModel(body, response),\n inputTokens: sumOfPresent([\n numberField(usage, \"promptTokenCount\"),\n numberField(usage, \"toolUsePromptTokenCount\"),\n ]),\n outputTokens: sumOfPresent([\n numberField(usage, \"candidatesTokenCount\"),\n thoughts,\n ]),\n cachedInputTokens: numberField(usage, \"cachedContentTokenCount\"),\n reasoningTokens: thoughts,\n }\n}\n\nfunction isGeminiEmbeddingResponse(response: unknown): boolean {\n return Array.isArray(field(response, \"embeddings\"))\n}\n\nfunction geminiEmbeddingPrompt(body: unknown): string | undefined {\n return renderedPrompt(geminiEntries(field(body, \"contents\")))\n}\n\nfunction geminiEmbeddingUsage(\n body: unknown,\n response: unknown,\n): Record<string, unknown> {\n const embeddings = field(response, \"embeddings\")\n const inputTokens = sumOfPresent(\n (Array.isArray(embeddings) ? embeddings : []).map((embedding) =>\n numberField(field(embedding, \"statistics\"), \"tokenCount\"),\n ),\n )\n return {\n model: geminiModel(body, response),\n inputTokens,\n outputTokens: inputTokens === undefined ? undefined : 0,\n }\n}\n\nfunction geminiChunkText(chunk: unknown): string {\n const candidates = field(chunk, \"candidates\")\n return Array.isArray(candidates)\n ? (geminiContentText(field(candidates[0], \"content\")) ?? \"\")\n : \"\"\n}\n\nfunction geminiStreamSummary(chunks: unknown[]): unknown {\n if (chunks.length === 0) {\n return undefined\n }\n const last = lastWith(chunks, \"usageMetadata\") ?? chunks[chunks.length - 1]\n return {\n modelVersion: field(last, \"modelVersion\"),\n text: chunks.map(geminiChunkText).join(\"\"),\n usageMetadata: field(last, \"usageMetadata\"),\n }\n}\n\nexport const OPENROUTER: ClientCallProvider = {\n key: \"openrouter\",\n provider: \"openrouter\",\n library: \"openai\",\n endpoint: \"chat.completions\",\n methods: [\"create\", \"parse\"],\n streamMethods: [\"stream\"],\n streamEvents: [\"chunk\"],\n spanMethods: { stream: \"create\" },\n matchesReceiver: isOpenRouterResource,\n isResponse: isChatCompletion,\n prompt: chatCompletionPrompt,\n usage: chatCompletionUsage,\n streamSummary: chatStreamSummary,\n}\n\nexport const OPENAI_CHAT: ClientCallProvider = {\n ...OPENROUTER,\n key: \"openai-chat\",\n provider: \"openai\",\n matchesReceiver: isOpenAIResource,\n}\n\nconst OPENROUTER_EMBEDDINGS: ClientCallProvider = {\n key: \"openrouter-embeddings\",\n provider: \"openrouter\",\n library: \"openai\",\n endpoint: \"embeddings\",\n methods: [\"create\"],\n streamMethods: [],\n streamEvents: [],\n matchesReceiver: isOpenRouterResource,\n isResponse: isEmbeddingList,\n prompt: embeddingPrompt,\n usage: embeddingUsage,\n}\n\nexport const OPENAI_EMBEDDINGS: ClientCallProvider = {\n ...OPENROUTER_EMBEDDINGS,\n key: \"openai-embeddings\",\n provider: \"openai\",\n matchesReceiver: isOpenAIResource,\n}\n\nexport const OPENAI_TRANSCRIPTIONS: ClientCallProvider = {\n key: \"openai-transcriptions\",\n provider: \"openai\",\n library: \"openai\",\n endpoint: \"audio.transcriptions\",\n methods: [\"create\"],\n streamMethods: [],\n streamEvents: [],\n matchesReceiver: isOpenAIResource,\n isResponse: isTranscription,\n prompt: transcriptionPrompt,\n usage: transcriptionUsage,\n streamSummary: transcriptionStreamSummary,\n}\n\nexport const ANTHROPIC: ClientCallProvider = {\n key: \"anthropic\",\n provider: \"anthropic\",\n library: \"@anthropic-ai/sdk\",\n endpoint: \"messages\",\n methods: [\"create\", \"parse\"],\n streamMethods: [\"stream\"],\n streamEvents: [\"streamEvent\"],\n matchesReceiver: isAnthropicResource,\n isResponse: isAnthropicMessage,\n prompt: anthropicPrompt,\n usage: anthropicUsage,\n streamSummary: anthropicStreamSummary,\n}\n\nexport const OPENAI_RESPONSES: ClientCallProvider = {\n key: \"openai-responses\",\n provider: \"openai\",\n library: \"openai\",\n endpoint: \"responses\",\n methods: [\"create\", \"parse\"],\n streamMethods: [\"stream\"],\n streamEvents: RESPONSE_DONE_EVENTS,\n spanMethods: { stream: \"create\" },\n matchesReceiver: isOpenAIResource,\n isResponse: isOpenAIResponse,\n prompt: openAIResponsesPrompt,\n usage: openAIResponsesUsage,\n streamSummary: openAIResponsesStreamSummary,\n}\n\nexport const GEMINI: ClientCallProvider = {\n key: \"gemini\",\n provider: \"gemini\",\n library: \"@google/genai\",\n endpoint: \"models\",\n methods: [\"generateContent\"],\n streamMethods: [\"generateContentStream\"],\n streamEvents: [],\n matchesReceiver: isGeminiModels,\n isResponse: isGeminiResponse,\n prompt: geminiPrompt,\n usage: geminiUsage,\n streamSummary: geminiStreamSummary,\n}\n\nexport const GEMINI_EMBEDDINGS: ClientCallProvider = {\n key: \"gemini-embeddings\",\n provider: \"gemini\",\n library: \"@google/genai\",\n endpoint: \"models\",\n methods: [\"embedContent\"],\n streamMethods: [],\n streamEvents: [],\n matchesReceiver: isGeminiModels,\n isResponse: isGeminiEmbeddingResponse,\n prompt: geminiEmbeddingPrompt,\n usage: geminiEmbeddingUsage,\n}\n\nconst CLIENT_CALL_PROVIDERS: readonly ClientCallProvider[] = [\n OPENROUTER,\n OPENAI_CHAT,\n OPENROUTER_EMBEDDINGS,\n OPENAI_EMBEDDINGS,\n OPENAI_TRANSCRIPTIONS,\n ANTHROPIC,\n OPENAI_RESPONSES,\n GEMINI,\n GEMINI_EMBEDDINGS,\n]\n\nconst CLIENT_CALL_PROVIDERS_BY_KEY = new Map(\n CLIENT_CALL_PROVIDERS.map((provider) => [provider.key, provider]),\n)\n\nconst ANTHROPIC_CACHE_USAGE_KEYS = [\n \"cache_read_input_tokens\",\n \"cache_creation_input_tokens\",\n]\nconst CHAT_COMPLETION_USAGE_KEYS = [\"prompt_tokens\", \"completion_tokens\"]\n\nexport function clientCallProviderForUsage(\n usage: Record<string, unknown>,\n): ClientCallProvider {\n if (ANTHROPIC_CACHE_USAGE_KEYS.some((key) => key in usage)) {\n return ANTHROPIC\n }\n return CHAT_COMPLETION_USAGE_KEYS.some((key) => key in usage)\n ? OPENAI_CHAT\n : OPENAI_RESPONSES\n}\n\nexport function clientCallProvider(\n key: string | undefined,\n): ClientCallProvider | undefined {\n return key === undefined ? undefined : CLIENT_CALL_PROVIDERS_BY_KEY.get(key)\n}\n\nexport function providerForClientCall(\n endpoint: string,\n method: string,\n receiver: unknown,\n): ClientCallProvider | undefined {\n return CLIENT_CALL_PROVIDERS.find(\n (provider) =>\n provider.endpoint === endpoint &&\n (provider.methods.includes(method) ||\n provider.streamMethods.includes(method)) &&\n provider.matchesReceiver(receiver),\n )\n}\n\nexport function clientCallStreams(\n provider: ClientCallProvider,\n method: string,\n body: unknown,\n): boolean {\n return (\n provider.streamMethods.includes(method) || field(body, \"stream\") === true\n )\n}\n\nexport function clientCallContext(\n provider: ClientCallProvider,\n body: unknown,\n response: unknown,\n durationMs: number,\n): Record<string, unknown> {\n return {\n provider: provider.provider,\n ...presentFields(provider.usage(body, response)),\n durationMs,\n }\n}\n\nfunction recordClientCall(\n provider: ClientCallProvider,\n span: ClientCallSpan,\n body: unknown,\n response: unknown,\n durationMs: number,\n): void {\n try {\n const prompt = provider.prompt(body)\n if (prompt !== undefined) {\n span.setPrompt(prompt)\n }\n span.addContext(clientCallContext(provider, body, response, durationMs))\n } catch {}\n}\n\nlet clientCallWatchStorage: AsyncLocalStorageLike<ClientCallWatch> | null = null\n\nfunction watchStorage(): AsyncLocalStorageLike<ClientCallWatch> | null {\n if (clientCallWatchStorage) {\n return clientCallWatchStorage\n }\n const shared = globalThis as typeof globalThis & Record<symbol, unknown>\n const existing = shared[CLIENT_CALL_WATCH_STORAGE_SYMBOL] as\n | AsyncLocalStorageLike<ClientCallWatch>\n | undefined\n clientCallWatchStorage =\n existing ?? createAsyncLocalStorage<ClientCallWatch>()\n if (clientCallWatchStorage && !existing) {\n shared[CLIENT_CALL_WATCH_STORAGE_SYMBOL] = clientCallWatchStorage\n }\n return clientCallWatchStorage\n}\n\nexport function watchClientCall<T>(fn: () => T): {\n watch: ClientCallWatch\n result: T\n} {\n const storage = watchStorage()\n const watch: ClientCallWatch = {\n recorded: false,\n parent: storage?.getStore() ?? null,\n }\n const result = storage ? storage.run(watch, fn) : fn()\n return { watch, result }\n}\n\nfunction markEnclosingWatches(watch: ClientCallWatch): void {\n for (let current = watch.parent; current; current = current.parent) {\n current.recorded = true\n }\n}\n\nfunction markCurrentWatches(): void {\n markEnclosingWatches({\n recorded: true,\n parent: watchStorage()?.getStore() ?? null,\n })\n}\n\nexport function frameworkRecordsClientCall(): boolean {\n return langChainHandlerRecordsCall() || openAiAgentsModelCallOpen()\n}\n\nfunction isRecordedByAutoTrace(response: unknown): boolean {\n return isRecord(response) && responsesRecordedByAutoTrace.has(response)\n}\n\nexport function recordWatchedClientCall(\n provider: ClientCallProvider,\n span: ClientCallSpan,\n watch: ClientCallWatch,\n body: unknown,\n response: unknown,\n durationMs: number,\n): void {\n if (watch.recorded || isRecordedByAutoTrace(response)) {\n markEnclosingWatches(watch)\n return\n }\n if (!provider.isResponse(response)) {\n return\n }\n recordClientCall(provider, span, body, response, durationMs)\n responsesRecordedByAutoTrace.add(response as object)\n markEnclosingWatches(watch)\n}\n\nexport function recordAutoTracedClientCall<T>(\n provider: ClientCallProvider,\n invokeFn: () => T,\n body: unknown,\n span: ClientCallSpan,\n): T {\n const startedAt = Date.now()\n const { watch, result } = watchClientCall(invokeFn)\n const settle = (response: unknown): void => {\n recordWatchedClientCall(\n provider,\n span,\n watch,\n body,\n response,\n Date.now() - startedAt,\n )\n }\n if (result instanceof Promise) {\n return result.then((response) => {\n settle(response)\n return response\n }) as T\n }\n settle(result)\n return result\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return isRecord(value) && typeof value.then === \"function\"\n}\n\nfunction isIteratorStream(value: unknown): value is IteratorStreamLike {\n return isRecord(value) && typeof value.iterator === \"function\"\n}\n\nfunction isEventStream(value: unknown): value is EventStreamLike {\n return isRecord(value) && typeof value.on === \"function\"\n}\n\nfunction isAsyncIterator(value: unknown): value is AsyncIterator<unknown> {\n return isRecord(value) && typeof value.next === \"function\"\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nconst streamRecordingsByCall = new WeakMap<object, ClientCallStreamRecording>()\nconst droppedStreams =\n typeof FinalizationRegistry === \"function\"\n ? new FinalizationRegistry<ClientCallStreamRecording>((recording) =>\n recording.finish(undefined),\n )\n : undefined\n\nexport function sharedClientCallStreamRecording(\n call: object,\n provider: ClientCallProvider,\n body: unknown,\n): ClientCallStreamRecording {\n let recording = streamRecordingsByCall.get(call)\n if (recording === undefined) {\n recording = new ClientCallStreamRecording(provider, body)\n streamRecordingsByCall.set(call, recording)\n }\n return recording\n}\n\nexport class ClientCallStreamRecording {\n readonly done: Promise<unknown>\n private readonly events: unknown[] = []\n private readonly startedAt = Date.now()\n private finished = false\n private observing = false\n private span: ClientCallSpan | undefined\n private resolveDone: (summary: unknown) => void = () => {}\n private rejectDone: (error: unknown) => void = () => {}\n\n constructor(\n private readonly provider: ClientCallProvider,\n private readonly body: unknown,\n ) {\n this.done = new Promise((resolve, reject) => {\n this.resolveDone = resolve\n this.rejectDone = reject\n })\n this.done.catch(() => {})\n }\n\n start<T>(span: ClientCallSpan, invokeFn: () => T): T {\n this.span ??= span\n markCurrentWatches()\n let result: T\n try {\n result = invokeFn()\n } catch (error) {\n this.finish(error)\n throw error\n }\n if (this.observing) {\n return result\n }\n this.observing = true\n if (isThenable(result)) {\n result.then(\n (stream) => this.observe(stream),\n (error: unknown) => this.finish(error),\n )\n } else {\n this.observe(result)\n }\n return result\n }\n\n private observe(stream: unknown): void {\n if (isRecord(stream)) {\n droppedStreams?.register(stream, this)\n }\n try {\n if (isIteratorStream(stream)) {\n const iterator = stream.iterator\n stream.iterator = () => this.observed(iterator.call(stream))\n return\n }\n if (isEventStream(stream)) {\n for (const name of this.provider.streamEvents) {\n stream.on(name, (event: unknown) => {\n this.events.push(event)\n })\n }\n stream.on(STREAM_END_EVENT, () => {\n this.finish(\n stream.errored === true && stream.aborted !== true\n ? new Error(\"The stream failed\")\n : undefined,\n )\n })\n return\n }\n if (isAsyncIterator(stream)) {\n const observed = this.observed({\n next: stream.next.bind(stream),\n return: stream.return?.bind(stream),\n throw: stream.throw?.bind(stream),\n })\n stream.next = observed.next\n stream.return = observed.return\n stream.throw = observed.throw\n return\n }\n } catch {}\n this.finish(undefined)\n }\n\n private observed(\n iterator: AsyncIterator<unknown>,\n ): AsyncIterator<unknown> & AsyncIterable<unknown> {\n const next = async (...args: [] | [unknown]) => {\n try {\n const result = await iterator.next(...args)\n if (result.done === true) {\n this.finish(undefined)\n } else {\n this.events.push(result.value)\n }\n return result\n } catch (error) {\n this.finish(error)\n throw error\n }\n }\n const end = async (value?: unknown) => {\n try {\n return iterator.return === undefined\n ? { done: true as const, value }\n : await iterator.return(value)\n } finally {\n this.finish(undefined)\n }\n }\n const fail = async (error?: unknown) => {\n try {\n if (iterator.throw === undefined) {\n throw error\n }\n return await iterator.throw(error)\n } catch (raised) {\n this.finish(raised)\n throw raised\n }\n }\n const observed = {\n next,\n return: end,\n throw: fail,\n [Symbol.asyncIterator]: () => observed,\n }\n return observed\n }\n\n finish(error: unknown): void {\n if (this.finished) {\n return\n }\n this.finished = true\n let summary: unknown\n try {\n summary =\n this.events.length === 0\n ? undefined\n : this.provider.streamSummary?.(this.events)\n const prompt = this.provider.prompt(this.body)\n if (prompt !== undefined) {\n this.span?.setPrompt(prompt)\n }\n if (!isNil(summary)) {\n this.span?.addContext(\n clientCallContext(\n this.provider,\n this.body,\n summary,\n Date.now() - this.startedAt,\n ),\n )\n }\n } catch {}\n if (error === undefined) {\n this.resolveDone(summary)\n } else {\n this.rejectDone(new StreamFinalizationError(errorText(error), summary))\n }\n }\n}\n","import {\n type AsyncLocalStorageLike,\n createAsyncLocalStorage,\n} from \"./asyncStorage.js\"\nimport { isCaptureSuppressed } from \"./captureSuppression.js\"\nimport {\n type ClientCallProvider,\n clientCallStreams,\n frameworkRecordsClientCall,\n providerForClientCall,\n} from \"./clientCalls.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 baml?: boolean\n jev?: boolean\n clientCall?: string\n clientCallMethod?: string\n}\n\nexport interface AutoTraceNodeConfiguration {\n functionName: string\n name?: string\n type?: \"llm\" | \"agent\" | \"function\" | \"guardrail\" | \"handoff\" | \"custom\"\n defaultType?: boolean\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 SpanDetails {\n contexts: Record<string, unknown>[]\n prompt?: 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 spanDetails: SpanDetails,\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 spanDetails: SpanDetails,\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\n/**\n * Run `fn` with every active auto-trace frame re-based onto `spanStack`, so a\n * call the build transform discovers inside a framework integration's span\n * attaches under that span rather than under the nearest discovered call.\n * @internal\n */\nexport function runWithAutoTraceFramesAt<T>(\n spanStack: unknown,\n fn: () => T,\n): T {\n const scope = currentAutoTraceScope()\n if (!scope || scope.entries.length === 0) {\n return fn()\n }\n return runWithAutoTraceScope(\n {\n ...scope,\n entries: scope.entries.map((entry) => ({ ...entry, spanStack })),\n },\n fn,\n )\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\nconst heldRootWork = new WeakMap<AutoTraceContext, Promise<unknown>[]>()\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 const held: Promise<unknown>[] = []\n heldRootWork.set(context, held)\n let result: T\n try {\n result = runWithAutoTraceScope({ entries }, fn)\n } catch (error) {\n heldRootWork.delete(context)\n settleAutoTraceRoot(context)\n throw error\n }\n\n if (isAutoTraceAsyncGenerator(result)) {\n heldRootWork.delete(context)\n closeAutoTraceRoot()\n return wrapAutoTraceAsyncGenerator(context, spanStack, result) as T\n }\n\n if (result instanceof Promise) {\n return result.then(\n (value) => finishAfterHeldWork(context, held, () => value),\n (error) =>\n finishAfterHeldWork(context, held, () => {\n throw error\n }),\n ) as T\n }\n\n heldRootWork.delete(context)\n settleAutoTraceRoot(context)\n return result\n}\n\nfunction finishAfterHeldWork<T>(\n context: AutoTraceContext,\n held: Promise<unknown>[],\n finish: () => T,\n): T | Promise<T> {\n const pending = held.splice(0)\n if (pending.length === 0) {\n heldRootWork.delete(context)\n settleAutoTraceRoot(context)\n return finish()\n }\n return Promise.all(pending).then(() =>\n finishAfterHeldWork(context, held, finish),\n )\n}\n\nfunction holdAutoTraceRoots(work: Promise<unknown>): void {\n const settled = work.then(\n () => undefined,\n () => undefined,\n )\n for (const entry of currentAutoTraceEntries()) {\n heldRootWork.get(entry.context)?.push(settled)\n }\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 return invokeAsDiscoveredCall(definition, inputs, fn)\n}\n\n/**\n * Record a call the build transform did not wrap as a function, such as a\n * rewritten call site, as if the transform had discovered it. It is internal\n * runtime protocol, not a supported application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function invokeAsDiscoveredCall<T>(\n definition: AutoTraceFunctionDefinition,\n inputs: unknown[],\n fn: () => T,\n): T {\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 const spanDetails: SpanDetails = { contexts: [] }\n return invokeThroughAutoTraceEntries(\n scope.entries,\n (entry, next) =>\n entry.context.invoke(\n definition,\n inputs,\n next,\n entry,\n spanDetails,\n nodeConfiguration,\n ),\n fn,\n )\n}\n\nconst JEV_METHOD = \"systemOne\"\n\nconst jevDefinitions = new Map<string, AutoTraceFunctionDefinition>()\n\ntype JevReceiver = Record<typeof JEV_METHOD, (...args: unknown[]) => unknown>\n\ntype RecordedCallOutcome = { value: unknown } | { error: unknown }\n\nfunction receiverClassName(receiver: unknown): string | undefined {\n try {\n const name = (receiver as { constructor?: { name?: unknown } }).constructor\n ?.name\n return typeof name === \"string\" && name !== \"\" && name !== \"Object\"\n ? name\n : undefined\n } catch {\n return undefined\n }\n}\n\nfunction invokeRecordedClientCall(\n definition: AutoTraceFunctionDefinition,\n args: unknown[],\n call: () => unknown,\n): unknown {\n let outcome: RecordedCallOutcome | undefined\n const traced = invokeAsDiscoveredCall(definition, args, () => {\n try {\n const value = call()\n outcome = { value }\n return value\n } catch (error) {\n outcome = { error }\n throw error\n }\n })\n const settled = outcome\n outcome = undefined\n if (settled === undefined) {\n return traced\n }\n if (\"value\" in settled && traced === settled.value) {\n return traced\n }\n if (traced instanceof Promise) {\n holdAutoTraceRoots(traced)\n }\n if (\"error\" in settled) {\n throw settled.error\n }\n return settled.value\n}\n\nfunction jevDefinition(receiver: unknown): AutoTraceFunctionDefinition {\n const className = receiverClassName(receiver)\n const name =\n className === undefined ? JEV_METHOD : `${className}.${JEV_METHOD}`\n let definition = jevDefinitions.get(name)\n if (definition === undefined) {\n definition = {\n id: `ts-auto-v1:jev#${name}`,\n name,\n file: \"@typesafe-ai/sdk\",\n line: 0,\n column: 0,\n async: true,\n jev: true,\n }\n jevDefinitions.set(name, definition)\n }\n return definition\n}\n\n/**\n * Call `receiver.systemOne(...args)` from a call site rewritten by the build\n * transform. Beneath an automatic trace root the call is recorded as one `llm`\n * span with Jev's model and token usage, and the client's own returned value\n * is handed back unchanged. Outside a root it is a plain method call.\n *\n * This helper is internal transform/runtime protocol, not a supported\n * application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoJev(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n const target = receiver as JevReceiver\n if (!__bitfabAutoTraceActive()) {\n return target.systemOne(...args)\n }\n return invokeRecordedClientCall(jevDefinition(receiver), args, () =>\n target.systemOne(...args),\n )\n}\n\nconst clientCallDefinitions = new Map<string, AutoTraceFunctionDefinition>()\n\nfunction clientCallDefinition(\n provider: ClientCallProvider,\n receiver: unknown,\n method: string,\n): AutoTraceFunctionDefinition {\n const className = receiverClassName(receiver)\n const qualified = (methodName: string): string =>\n className === undefined ? methodName : `${className}.${methodName}`\n const id = `ts-auto-v1:${provider.key}#${qualified(method)}`\n let definition = clientCallDefinitions.get(id)\n if (definition === undefined) {\n definition = {\n id,\n name: qualified(provider.spanMethods?.[method] ?? method),\n file: provider.library,\n line: 0,\n column: 0,\n async: true,\n clientCall: provider.key,\n clientCallMethod: method,\n }\n clientCallDefinitions.set(id, definition)\n }\n return definition\n}\n\n/**\n * Call `receiver[method](...args)` from an LLM client call site rewritten by\n * the build transform: `.chat.completions`, `.embeddings`,\n * `.audio.transcriptions`, `.messages`, and `.responses` calls on an `openai`\n * or `@anthropic-ai/sdk` client, and `.models` calls on an `@google/genai`\n * client. Beneath an automatic trace root the call is recorded as one `llm`\n * span with the prompt, model, and token usage, and the client's own returned\n * value is handed back unchanged. A streamed call is recorded when its stream\n * finishes. Otherwise it is a plain method call.\n *\n * This helper is internal transform/runtime protocol, not a supported\n * application API.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoClientCall(\n endpoint: string,\n receiver: unknown,\n method: string,\n ...args: unknown[]\n): unknown {\n const call = (): unknown =>\n Reflect.apply(\n (receiver as Record<string, (...callArgs: unknown[]) => unknown>)[\n method\n ] as (...callArgs: unknown[]) => unknown,\n receiver,\n args,\n )\n if (!__bitfabAutoTraceActive()) {\n return call()\n }\n const provider = providerForClientCall(endpoint, method, receiver)\n if (\n provider === undefined ||\n (clientCallStreams(provider, method, args[0]) &&\n provider.streamSummary === undefined) ||\n frameworkRecordsClientCall()\n ) {\n return call()\n }\n return invokeRecordedClientCall(\n clientCallDefinition(provider, receiver, method),\n args,\n call,\n )\n}\n\n/**\n * @deprecated Emitted by older build transforms. Same as\n * `__bitfabAutoClientCall(\"chat.completions\", receiver, \"create\", ...args)`.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoOpenRouter(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n return __bitfabAutoClientCall(\"chat.completions\", receiver, \"create\", ...args)\n}\n\n/**\n * @deprecated Emitted by older build transforms. Same as\n * `__bitfabAutoClientCall(\"messages\", receiver, \"create\", ...args)`.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoAnthropic(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n return __bitfabAutoClientCall(\"messages\", receiver, \"create\", ...args)\n}\n\n/**\n * @deprecated Emitted by older build transforms. Same as\n * `__bitfabAutoClientCall(\"responses\", receiver, \"create\", ...args)`.\n *\n * @experimental The automatic tracing protocol may change.\n */\nexport function __bitfabAutoOpenAIResponses(\n receiver: unknown,\n ...args: unknown[]\n): unknown {\n return __bitfabAutoClientCall(\"responses\", receiver, \"create\", ...args)\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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"}
|
package/dist/autoTrace.cjs
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_autoTrace = require("./autoTrace-
|
|
5
|
+
const require_autoTrace = require("./autoTrace-BtiEpHTN.cjs");
|
|
6
6
|
exports.__bitfabAutoAnthropic = require_autoTrace.__bitfabAutoAnthropic;
|
|
7
7
|
exports.__bitfabAutoClientCall = require_autoTrace.__bitfabAutoClientCall;
|
|
8
8
|
exports.__bitfabAutoJev = require_autoTrace.__bitfabAutoJev;
|
package/dist/autoTrace.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as __bitfabAutoAnthropic, n as __bitfabAutoClientCall, r as __bitfabAutoJev, i as __bitfabAutoOpenAIResponses, a as __bitfabAutoOpenRouter, o as __bitfabAutoSpan, s as __bitfabAutoTraceActive, c as __bitfabAutoWrap, l as _resetAutoTraceTransformDetection, u as clearAutoTraceNodeConfiguration, d as currentAutoTraceEntries, f as invokeAsDiscoveredCall, p as invokeThroughAutoTraceEntries, m as runAsAutoTraceRootFunction, h as runWithAutoTraceEntry, g as runWithAutoTraceFramesAt, _ as runWithAutoTraceNodeConfiguration, v as runWithAutoTraceRootContext } from "./autoTrace-
|
|
1
|
+
export { t as __bitfabAutoAnthropic, n as __bitfabAutoClientCall, r as __bitfabAutoJev, i as __bitfabAutoOpenAIResponses, a as __bitfabAutoOpenRouter, o as __bitfabAutoSpan, s as __bitfabAutoTraceActive, c as __bitfabAutoWrap, l as _resetAutoTraceTransformDetection, u as clearAutoTraceNodeConfiguration, d as currentAutoTraceEntries, f as invokeAsDiscoveredCall, p as invokeThroughAutoTraceEntries, m as runAsAutoTraceRootFunction, h as runWithAutoTraceEntry, g as runWithAutoTraceFramesAt, _ as runWithAutoTraceNodeConfiguration, v as runWithAutoTraceRootContext } from "./autoTrace-RWUOk1WF.js";
|
|
@@ -274,7 +274,11 @@ const RECORDED_CLIENT_CALLS = [
|
|
|
274
274
|
{
|
|
275
275
|
...CLIENT_CALL_RUNTIME,
|
|
276
276
|
endpoint: "models",
|
|
277
|
-
methods: [
|
|
277
|
+
methods: [
|
|
278
|
+
"generateContent",
|
|
279
|
+
"generateContentStream",
|
|
280
|
+
"embedContent"
|
|
281
|
+
],
|
|
278
282
|
matchesReceiver: isModelsReceiver
|
|
279
283
|
}
|
|
280
284
|
];
|
|
@@ -435,4 +439,4 @@ function bitfabBabelPlugin(api) {
|
|
|
435
439
|
//#endregion
|
|
436
440
|
export { sourceFilename as i, AUTO_TRACE_TRANSFORM_MARKER as n, shouldTransformBitfabFile as r, bitfabBabelPlugin as t };
|
|
437
441
|
|
|
438
|
-
//# sourceMappingURL=babelPlugin-
|
|
442
|
+
//# sourceMappingURL=babelPlugin-398AO0eD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"babelPlugin-398AO0eD.js","names":[],"sources":["../../bitfab-typescript-transform/src/transformOptions.ts","../../bitfab-typescript-transform/src/babelPlugin.ts"],"sourcesContent":["export interface BitfabTransformOptions {\n /** Module that exports the automatic span runtime. */\n runtimeModule?: string\n /** Module imported at the top of BAML's generated client files so the SDK can use the `@boundaryml/baml` the bundler loads. Pass `false` to import nothing. Defaults to `\"@bitfab/sdk/baml\"`, added only when it resolves from the file's folder. */\n bamlRegistrationModule?: string | false\n /** Working directory removed from generated function IDs. */\n cwd?: string\n /** Return false to leave a file unchanged. */\n include?: (filename: string) => boolean\n}\n\nconst AUTO_TRACE_FUNCTION_ID_VERSION = \"ts-auto-v1\"\nexport const AUTO_TRACE_TRANSFORM_MARKER =\n \"__bitfab_auto_trace_transformed_v1__\"\n\nexport function autoTraceFunctionId(file: string, name: string): string {\n return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`\n}\n\nexport function sourceFilename(filename: string): string {\n return filename.replace(/\\\\/g, \"/\").split(/[?#]/, 1)[0] ?? \"\"\n}\n\nexport function autoTraceFilename(filename: string, cwd: string): string {\n const normalized = sourceFilename(filename)\n const normalizedCwd = cwd.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n return normalized.startsWith(`${normalizedCwd}/`)\n ? normalized.slice(normalizedCwd.length + 1)\n : normalized\n}\n\nexport function shouldTransformBitfabFile(\n filename: string,\n options: BitfabTransformOptions,\n): boolean {\n if (!filename) {\n return false\n }\n if (options.include && !options.include(filename)) {\n return false\n }\n\n const normalized = sourceFilename(filename)\n const normalizedCwd = options.cwd?.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n const isAbsolute =\n normalized.startsWith(\"/\") || /^[A-Za-z]:\\//.test(normalized)\n if (\n normalizedCwd &&\n isAbsolute &&\n normalized !== normalizedCwd &&\n !normalized.startsWith(`${normalizedCwd}/`)\n ) {\n return false\n }\n return (\n !normalized.includes(\"/node_modules/\") &&\n !normalized.endsWith(\".d.ts\") &&\n /\\.[cm]?[jt]sx?$/.test(normalized)\n )\n}\n","import { readFileSync } from \"node:fs\"\nimport { dirname, isAbsolute, join } from \"node:path\"\nimport type { NodePath, PluginObject, PluginPass } from \"@babel/core\"\nimport type * as BabelTypes from \"@babel/types\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n autoTraceFilename,\n autoTraceFunctionId,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\ntype BabelTypesApi = typeof BabelTypes\n\ntype BitfabPluginOptions = BitfabTransformOptions\n\ninterface BitfabPluginState extends PluginPass {\n opts: BitfabPluginOptions\n runtimeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n activeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n wrapperIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n recordedCallIdentifiers?: Map<string, ReturnType<BabelTypesApi[\"identifier\"]>>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n bamlGenerated?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n usedRecordedCalls?: Set<string>\n}\n\ninterface InstrumentedFunction {\n _bitfabInstrumented?: boolean\n}\n\nfunction propertyName(\n node: BabelTypes.Node | null | undefined,\n types: BabelTypesApi,\n): string | null {\n if (types.isIdentifier(node)) {\n return node.name\n }\n if (types.isStringLiteral(node)) {\n return node.value\n }\n return null\n}\n\nfunction functionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const node = path.node\n if (types.isFunctionDeclaration(node) || types.isFunctionExpression(node)) {\n if (node.id) {\n return node.id.name\n }\n }\n\n if (\n (types.isClassMethod(node) || types.isObjectMethod(node)) &&\n !node.computed &&\n types.isIdentifier(node.key)\n ) {\n return node.key.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n return propertyName(parent.id, types) ?? \"anonymous\"\n }\n if (types.isObjectProperty(parent) && !parent.computed) {\n return propertyName(parent.key, types) ?? \"anonymous\"\n }\n if (types.isClassProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n return name\n }\n }\n\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nconst JEV_METHOD = \"systemOne\"\n\nfunction isJevMethodDefinition(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n const isMethod =\n types.isClassMethod(path.node) ||\n types.isObjectMethod(path.node) ||\n types.isObjectProperty(parent) ||\n types.isClassProperty(parent)\n return isMethod && functionName(path, types) === JEV_METHOD\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n const parent = path.parentPath?.node\n const decorated =\n types.isClassMethod(node) || types.isClassPrivateMethod(node)\n ? node\n : types.isClassProperty(parent) && parent.value === node\n ? parent\n : null\n if (!decorated) {\n return false\n }\n\n return (\n decorated.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nconst BAML_GENERATED_HEADER = \"This file was generated by BAML\"\nconst BAML_CLIENT_CLASSES = new Set([\"BamlAsyncClient\", \"BamlSyncClient\"])\nconst BAML_OPTIONS_PARAMETER = \"__baml_options__\"\n\nconst BAML_PACKAGE = \"@boundaryml/baml\"\nconst DEFAULT_BAML_REGISTRATION_MODULE = \"@bitfab/sdk/baml\"\n\nfunction importsBamlAtRuntime(\n program: BabelTypes.Program,\n types: BabelTypesApi,\n): boolean {\n return program.body.some(\n (statement) =>\n types.isImportDeclaration(statement) &&\n statement.source.value === BAML_PACKAGE &&\n statement.importKind !== \"type\" &&\n statement.specifiers.some(\n (specifier) =>\n !types.isImportSpecifier(specifier) ||\n specifier.importKind !== \"type\",\n ),\n )\n}\n\nconst SDK_PACKAGE_PATH = [\"node_modules\", \"@bitfab\", \"sdk\", \"package.json\"]\nconst BAML_REGISTRATION_EXPORT = \"./baml\"\nconst sdkExportsBamlRegistrationByDirectory = new Map<string, boolean>()\n\nfunction readPackageJson(path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, \"utf8\"))\n } catch {\n return undefined\n }\n}\n\nfunction exportsBamlRegistration(packageJson: unknown): boolean {\n if (typeof packageJson !== \"object\" || packageJson === null) {\n return false\n }\n const exports = (packageJson as { exports?: unknown }).exports\n return (\n typeof exports === \"object\" &&\n exports !== null &&\n BAML_REGISTRATION_EXPORT in exports\n )\n}\n\nfunction nearestSdkExportsBamlRegistration(directory: string): boolean {\n const cached = sdkExportsBamlRegistrationByDirectory.get(directory)\n if (cached !== undefined) {\n return cached\n }\n const packageJson = readPackageJson(join(directory, ...SDK_PACKAGE_PATH))\n const parent = dirname(directory)\n const exported =\n packageJson !== undefined\n ? exportsBamlRegistration(packageJson)\n : parent !== directory && nearestSdkExportsBamlRegistration(parent)\n sdkExportsBamlRegistrationByDirectory.set(directory, exported)\n return exported\n}\n\nfunction defaultRegistrationResolves(filename: string): boolean {\n return (\n isAbsolute(filename) && nearestSdkExportsBamlRegistration(dirname(filename))\n )\n}\n\nfunction bamlRegistrationModuleFor(\n filename: string,\n configured: string | false | undefined,\n): string | null {\n if (configured === false) {\n return null\n }\n if (configured !== undefined) {\n return configured\n }\n return defaultRegistrationResolves(filename)\n ? DEFAULT_BAML_REGISTRATION_MODULE\n : null\n}\n\nfunction isBamlGeneratedSource(code: string): boolean {\n return code.slice(0, 4096).includes(BAML_GENERATED_HEADER)\n}\n\nfunction isBamlClientMethod(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) || node.kind !== \"method\" || node.static) {\n return false\n }\n const classPath = path.parentPath?.parentPath\n if (\n !classPath ||\n !(classPath.isClassDeclaration() || classPath.isClassExpression()) ||\n !classPath.node.id ||\n !BAML_CLIENT_CLASSES.has(classPath.node.id.name)\n ) {\n return false\n }\n const parameters = runtimeParameters(node, types)\n const last = parameters[parameters.length - 1]\n return types.isIdentifier(last, { name: BAML_OPTIONS_PARAMETER })\n}\n\nfunction bamlOptionsDeclaration(\n callerOptions: BabelTypes.Identifier,\n withCollector: BabelTypes.Identifier,\n types: BabelTypesApi,\n): BabelTypes.VariableDeclaration {\n return types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(BAML_OPTIONS_PARAMETER),\n types.conditionalExpression(\n types.binaryExpression(\n \"===\",\n types.cloneNode(withCollector),\n types.identifier(\"undefined\"),\n ),\n types.cloneNode(callerOptions),\n types.callExpression(types.cloneNode(withCollector), [\n types.cloneNode(callerOptions),\n types.memberExpression(\n types.thisExpression(),\n types.identifier(\"bamlOptions\"),\n ),\n ]),\n ),\n ),\n ])\n}\n\nfunction runtimeParameters(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): BabelTypes.Function[\"params\"] {\n return node.params.filter(\n (parameter) => !types.isIdentifier(parameter, { name: \"this\" }),\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of runtimeParameters(\n path.node,\n types,\n ).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parameters = runtimeParameters(path.node, types)\n return parameters.length === 1 && types.isRestElement(parameters[0])\n}\n\ntype RecordedCallNode =\n | BabelTypes.CallExpression\n | BabelTypes.OptionalCallExpression\n\ninterface RecordedClientCall {\n methods: readonly string[]\n endpoint?: string\n runtimeExport: string\n identifierHint: string\n receiverHint: string\n matchesReceiver: (\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n ) => boolean\n}\n\nfunction isNamedMember(\n node: BabelTypes.Node,\n name: string,\n types: BabelTypesApi,\n): node is BabelTypes.MemberExpression | BabelTypes.OptionalMemberExpression {\n return (\n (types.isMemberExpression(node) ||\n types.isOptionalMemberExpression(node)) &&\n !node.computed &&\n types.isIdentifier(node.property, { name })\n )\n}\n\nfunction isChatCompletionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"completions\", types) &&\n isNamedMember(receiver.object, \"chat\", types)\n )\n}\n\nfunction isMessagesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"messages\", types) &&\n !isNamedMember(receiver.object, \"beta\", types)\n )\n}\n\nfunction isResponsesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"responses\", types)\n}\n\nfunction isEmbeddingsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"embeddings\", types)\n}\n\nfunction isTranscriptionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"transcriptions\", types) &&\n isNamedMember(receiver.object, \"audio\", types)\n )\n}\n\nfunction isModelsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"models\", types)\n}\n\nconst CLIENT_CALL_RUNTIME = {\n runtimeExport: \"__bitfabAutoClientCall\",\n identifierHint: \"bitfabAutoClientCall\",\n receiverHint: \"bitfabClientCallReceiver\",\n}\n\nconst RECORDED_CLIENT_CALLS: readonly RecordedClientCall[] = [\n {\n methods: [JEV_METHOD],\n runtimeExport: \"__bitfabAutoJev\",\n identifierHint: \"bitfabAutoJev\",\n receiverHint: \"bitfabJevReceiver\",\n matchesReceiver: () => true,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"chat.completions\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isChatCompletionsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"embeddings\",\n methods: [\"create\"],\n matchesReceiver: isEmbeddingsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"audio.transcriptions\",\n methods: [\"create\"],\n matchesReceiver: isTranscriptionsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"messages\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isMessagesReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"responses\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isResponsesReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"models\",\n methods: [\"generateContent\", \"generateContentStream\", \"embedContent\"],\n matchesReceiver: isModelsReceiver,\n },\n]\n\nconst RECORDED_CALL_RUNTIMES = [\n ...new Map(\n RECORDED_CLIENT_CALLS.map((call) => [call.runtimeExport, call]),\n ).values(),\n]\n\nfunction recordedCallTarget(\n node: RecordedCallNode,\n types: BabelTypesApi,\n): {\n call: RecordedClientCall\n receiver: BabelTypes.Expression\n method: string\n} | null {\n const callee = node.callee\n if (\n !(\n types.isMemberExpression(callee) ||\n types.isOptionalMemberExpression(callee)\n ) ||\n callee.computed ||\n !types.isIdentifier(callee.property) ||\n types.isSuper(callee.object)\n ) {\n return null\n }\n const method = callee.property.name\n const receiver = callee.object\n const call = RECORDED_CLIENT_CALLS.find(\n (candidate) =>\n candidate.methods.includes(method) &&\n candidate.matchesReceiver(receiver, types),\n )\n return call === undefined ? null : { call, receiver, method }\n}\n\nfunction isOptionalChain(node: BabelTypes.Node, types: BabelTypesApi): boolean {\n return (\n types.isOptionalMemberExpression(node) ||\n types.isOptionalCallExpression(node)\n )\n}\n\nfunction continuesOptionalChain(\n path: NodePath<BabelTypes.OptionalCallExpression>,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parent\n return (\n (types.isOptionalMemberExpression(parent) && parent.object === path.node) ||\n (types.isOptionalCallExpression(parent) && parent.callee === path.node)\n )\n}\n\nfunction rewriteRecordedClientCall(\n path: NodePath<RecordedCallNode>,\n state: BitfabPluginState,\n types: BabelTypesApi,\n): void {\n if (state.skipFile || state.bamlGenerated) {\n return\n }\n const node = path.node\n const target = recordedCallTarget(node, types)\n const identifier =\n target === null\n ? undefined\n : state.recordedCallIdentifiers?.get(target.call.runtimeExport)\n if (target === null || identifier === undefined) {\n return\n }\n const { call: recordedCall, receiver, method } = target\n const optionalReceiver =\n types.isOptionalMemberExpression(node.callee) && node.callee.optional\n const optionalMethod = types.isOptionalCallExpression(node) && node.optional\n if (types.isOptionalCallExpression(node)) {\n if (\n continuesOptionalChain(\n path as NodePath<BabelTypes.OptionalCallExpression>,\n types,\n ) ||\n (!optionalReceiver && isOptionalChain(receiver, types))\n ) {\n return\n }\n }\n const guarded = optionalReceiver || optionalMethod\n const receiverReference =\n guarded && !path.scope.isStatic(receiver)\n ? path.scope.generateDeclaredUidIdentifier(recordedCall.receiverHint)\n : null\n const receiverValue = (): BabelTypes.Expression =>\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.cloneNode(receiverReference)\n const call = types.callExpression(\n types.cloneNode(identifier),\n recordedCall.endpoint === undefined\n ? [receiverValue(), ...node.arguments]\n : [\n types.stringLiteral(recordedCall.endpoint),\n receiverValue(),\n types.stringLiteral(method),\n ...node.arguments,\n ],\n )\n state.usedRuntime = true\n state.usedRecordedCalls?.add(recordedCall.runtimeExport)\n if (!guarded) {\n path.replaceWith(call)\n return\n }\n const firstReceiver =\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.assignmentExpression(\n \"=\",\n types.cloneNode(receiverReference),\n receiver,\n )\n const missing = (value: BabelTypes.Expression): BabelTypes.BinaryExpression =>\n types.binaryExpression(\"==\", value, types.nullLiteral())\n const methodOf = (value: BabelTypes.Expression): BabelTypes.Expression =>\n types.memberExpression(value, types.identifier(method))\n const test = optionalReceiver\n ? optionalMethod\n ? types.logicalExpression(\n \"||\",\n missing(firstReceiver),\n missing(methodOf(receiverValue())),\n )\n : missing(firstReceiver)\n : missing(methodOf(firstReceiver))\n path.replaceWith(\n types.conditionalExpression(\n test,\n types.unaryExpression(\"void\", types.numericLiteral(0)),\n call,\n ),\n )\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObject<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.recordedCallIdentifiers = new Map(\n RECORDED_CALL_RUNTIMES.map((call) => [\n call.runtimeExport,\n path.scope.generateUidIdentifier(call.identifierHint),\n ]),\n )\n state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? \"\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n state.usedRecordedCalls = new Set()\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const bamlRegistrationModule =\n !state.skipFile &&\n state.bamlGenerated &&\n importsBamlAtRuntime(path.node, types)\n ? bamlRegistrationModuleFor(\n sourceFilename(state.file.opts.filename ?? \"\"),\n state.opts.bamlRegistrationModule,\n )\n : null\n if (bamlRegistrationModule !== null) {\n path.unshiftContainer(\n \"body\",\n types.importDeclaration(\n [],\n types.stringLiteral(bamlRegistrationModule),\n ),\n )\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n }\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ...RECORDED_CALL_RUNTIMES.flatMap((call) => {\n const identifier = state.recordedCallIdentifiers?.get(\n call.runtimeExport,\n )\n return state.usedRecordedCalls?.has(call.runtimeExport) &&\n identifier\n ? [\n types.importSpecifier(\n identifier,\n types.identifier(call.runtimeExport),\n ),\n ]\n : []\n }),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n if (recordedCallTarget(path.node, types) !== null) {\n rewriteRecordedClientCall(path, state, types)\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n OptionalCallExpression: {\n exit(\n path: NodePath<BabelTypes.OptionalCallExpression>,\n state: BitfabPluginState,\n ) {\n rewriteRecordedClientCall(path, state, types)\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n !isInstrumentableFunction(node, types) ||\n isTraceDecoratorRoot(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const bamlMethod =\n state.bamlGenerated === true && isBamlClientMethod(path, types)\n if (state.bamlGenerated && !bamlMethod) {\n return\n }\n if (isJevMethodDefinition(path, types)) {\n return\n }\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const normalizedFilename = autoTraceFilename(\n state.file.opts.filename ?? \"unknown\",\n state.opts.cwd ?? state.file.opts.cwd ?? process.cwd(),\n )\n const { line, column } = sourcePosition(path)\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(bamlMethod\n ? [\n types.objectProperty(\n types.identifier(\"baml\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n node._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(types.cloneNode(state.wrapperIdentifier), [\n types.cloneNode(definitionIdentifier),\n node as BabelTypes.ArrowFunctionExpression,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const callerOptions = bamlMethod\n ? path.scope.generateUidIdentifier(\"bitfabBamlOptions\")\n : undefined\n const withCollector = bamlMethod\n ? path.scope.generateUidIdentifier(\"bitfabBamlWithCollector\")\n : undefined\n const tracedBody =\n callerOptions && withCollector\n ? types.blockStatement(\n [\n bamlOptionsDeclaration(callerOptions, withCollector, types),\n ...types.cloneNode(originalBody, true).body,\n ],\n [],\n )\n : types.cloneNode(originalBody, true)\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n ...(callerOptions\n ? [\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n callerOptions,\n types.identifier(BAML_OPTIONS_PARAMETER),\n ),\n ]),\n ]\n : []),\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n withCollector ? [types.cloneNode(withCollector)] : [],\n tracedBody,\n node.async ?? false,\n ),\n ],\n ),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n"],"mappings":"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"}
|
|
@@ -274,7 +274,11 @@ const RECORDED_CLIENT_CALLS = [
|
|
|
274
274
|
{
|
|
275
275
|
...CLIENT_CALL_RUNTIME,
|
|
276
276
|
endpoint: "models",
|
|
277
|
-
methods: [
|
|
277
|
+
methods: [
|
|
278
|
+
"generateContent",
|
|
279
|
+
"generateContentStream",
|
|
280
|
+
"embedContent"
|
|
281
|
+
],
|
|
278
282
|
matchesReceiver: isModelsReceiver
|
|
279
283
|
}
|
|
280
284
|
];
|
|
@@ -458,4 +462,4 @@ Object.defineProperty(exports, "sourceFilename", {
|
|
|
458
462
|
}
|
|
459
463
|
});
|
|
460
464
|
|
|
461
|
-
//# sourceMappingURL=babelPlugin-
|
|
465
|
+
//# sourceMappingURL=babelPlugin-Btzkfl62.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"babelPlugin-Btzkfl62.cjs","names":["path","readFileSync","join","dirname","isAbsolute"],"sources":["../../bitfab-typescript-transform/src/transformOptions.ts","../../bitfab-typescript-transform/src/babelPlugin.ts"],"sourcesContent":["export interface BitfabTransformOptions {\n /** Module that exports the automatic span runtime. */\n runtimeModule?: string\n /** Module imported at the top of BAML's generated client files so the SDK can use the `@boundaryml/baml` the bundler loads. Pass `false` to import nothing. Defaults to `\"@bitfab/sdk/baml\"`, added only when it resolves from the file's folder. */\n bamlRegistrationModule?: string | false\n /** Working directory removed from generated function IDs. */\n cwd?: string\n /** Return false to leave a file unchanged. */\n include?: (filename: string) => boolean\n}\n\nconst AUTO_TRACE_FUNCTION_ID_VERSION = \"ts-auto-v1\"\nexport const AUTO_TRACE_TRANSFORM_MARKER =\n \"__bitfab_auto_trace_transformed_v1__\"\n\nexport function autoTraceFunctionId(file: string, name: string): string {\n return `${AUTO_TRACE_FUNCTION_ID_VERSION}:${file}#${name}`\n}\n\nexport function sourceFilename(filename: string): string {\n return filename.replace(/\\\\/g, \"/\").split(/[?#]/, 1)[0] ?? \"\"\n}\n\nexport function autoTraceFilename(filename: string, cwd: string): string {\n const normalized = sourceFilename(filename)\n const normalizedCwd = cwd.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n return normalized.startsWith(`${normalizedCwd}/`)\n ? normalized.slice(normalizedCwd.length + 1)\n : normalized\n}\n\nexport function shouldTransformBitfabFile(\n filename: string,\n options: BitfabTransformOptions,\n): boolean {\n if (!filename) {\n return false\n }\n if (options.include && !options.include(filename)) {\n return false\n }\n\n const normalized = sourceFilename(filename)\n const normalizedCwd = options.cwd?.replace(/\\\\/g, \"/\").replace(/\\/$/, \"\")\n const isAbsolute =\n normalized.startsWith(\"/\") || /^[A-Za-z]:\\//.test(normalized)\n if (\n normalizedCwd &&\n isAbsolute &&\n normalized !== normalizedCwd &&\n !normalized.startsWith(`${normalizedCwd}/`)\n ) {\n return false\n }\n return (\n !normalized.includes(\"/node_modules/\") &&\n !normalized.endsWith(\".d.ts\") &&\n /\\.[cm]?[jt]sx?$/.test(normalized)\n )\n}\n","import { readFileSync } from \"node:fs\"\nimport { dirname, isAbsolute, join } from \"node:path\"\nimport type { NodePath, PluginObject, PluginPass } from \"@babel/core\"\nimport type * as BabelTypes from \"@babel/types\"\nimport type { BitfabTransformOptions } from \"./transformOptions.js\"\nimport {\n AUTO_TRACE_TRANSFORM_MARKER,\n autoTraceFilename,\n autoTraceFunctionId,\n shouldTransformBitfabFile,\n sourceFilename,\n} from \"./transformOptions.js\"\n\ntype BabelTypesApi = typeof BabelTypes\n\ntype BitfabPluginOptions = BitfabTransformOptions\n\ninterface BitfabPluginState extends PluginPass {\n opts: BitfabPluginOptions\n runtimeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n activeIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n wrapperIdentifier?: ReturnType<BabelTypesApi[\"identifier\"]>\n recordedCallIdentifiers?: Map<string, ReturnType<BabelTypesApi[\"identifier\"]>>\n definitions?: Array<ReturnType<BabelTypesApi[\"variableDeclaration\"]>>\n skipFile?: boolean\n bamlGenerated?: boolean\n usedRuntime?: boolean\n usedWrapper?: boolean\n usedRecordedCalls?: Set<string>\n}\n\ninterface InstrumentedFunction {\n _bitfabInstrumented?: boolean\n}\n\nfunction propertyName(\n node: BabelTypes.Node | null | undefined,\n types: BabelTypesApi,\n): string | null {\n if (types.isIdentifier(node)) {\n return node.name\n }\n if (types.isStringLiteral(node)) {\n return node.value\n }\n return null\n}\n\nfunction functionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const node = path.node\n if (types.isFunctionDeclaration(node) || types.isFunctionExpression(node)) {\n if (node.id) {\n return node.id.name\n }\n }\n\n if (\n (types.isClassMethod(node) || types.isObjectMethod(node)) &&\n !node.computed &&\n types.isIdentifier(node.key)\n ) {\n return node.key.name\n }\n\n const parent = path.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n return propertyName(parent.id, types) ?? \"anonymous\"\n }\n if (types.isObjectProperty(parent) && !parent.computed) {\n return propertyName(parent.key, types) ?? \"anonymous\"\n }\n if (types.isClassProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n return name\n }\n }\n\n const { line, column } = sourcePosition(path)\n return `anonymous-${line}-${column}`\n}\n\nconst JEV_METHOD = \"systemOne\"\n\nfunction isJevMethodDefinition(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parentPath?.node\n const isMethod =\n types.isClassMethod(path.node) ||\n types.isObjectMethod(path.node) ||\n types.isObjectProperty(parent) ||\n types.isClassProperty(parent)\n return isMethod && functionName(path, types) === JEV_METHOD\n}\n\nfunction isInstrumentableFunction(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): boolean {\n if (node.generator || types.isClassPrivateMethod(node)) {\n return false\n }\n return (\n !(types.isClassMethod(node) || types.isObjectMethod(node)) ||\n node.kind === \"method\"\n )\n}\n\nfunction sourcePosition(path: NodePath<BabelTypes.Function>): {\n line: number\n column: number\n} {\n const exportDeclaration = path.parentPath?.isExportDeclaration()\n ? path.parentPath.node\n : undefined\n const start = (exportDeclaration ?? path.node).loc?.start\n return { line: start?.line ?? 0, column: start?.column ?? 0 }\n}\n\nfunction qualifiedFunctionName(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): string {\n const ownName = functionName(path, types)\n if (ownName.startsWith(\"anonymous-\")) {\n return ownName\n }\n const scopes: string[] = []\n let ancestor: NodePath | null = path.parentPath\n while (ancestor) {\n if (ancestor.isFunction()) {\n if (!isInstrumentableFunction(ancestor.node, types)) {\n ancestor = ancestor.parentPath\n continue\n }\n const name = functionName(\n ancestor as NodePath<BabelTypes.Function>,\n types,\n )\n if (!name.startsWith(\"anonymous-\")) {\n scopes.unshift(name)\n }\n } else if (\n (ancestor.isClassDeclaration() || ancestor.isClassExpression()) &&\n ancestor.node.id\n ) {\n scopes.unshift(ancestor.node.id.name)\n } else if (ancestor.isObjectExpression()) {\n const parent = ancestor.parentPath?.node\n if (types.isVariableDeclarator(parent)) {\n const name = propertyName(parent.id, types)\n if (name) {\n scopes.unshift(name)\n }\n } else if (types.isObjectProperty(parent) && !parent.computed) {\n const name = propertyName(parent.key, types)\n if (name) {\n scopes.unshift(name)\n }\n }\n }\n ancestor = ancestor.parentPath\n }\n return [...scopes, ownName].join(\".\")\n}\n\nfunction isTraceDecoratorRoot(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n const parent = path.parentPath?.node\n const decorated =\n types.isClassMethod(node) || types.isClassPrivateMethod(node)\n ? node\n : types.isClassProperty(parent) && parent.value === node\n ? parent\n : null\n if (!decorated) {\n return false\n }\n\n return (\n decorated.decorators?.some((decorator) => {\n const expression = decorator.expression\n if (!types.isCallExpression(expression)) {\n return false\n }\n const callee = expression.callee\n return (\n types.isMemberExpression(callee) &&\n !callee.computed &&\n types.isIdentifier(callee.property, { name: \"trace\" })\n )\n }) ?? false\n )\n}\n\nfunction withNodeFunctionName(\n path: NodePath<BabelTypes.CallExpression>,\n types: BabelTypesApi,\n): string | null {\n if (path.node.arguments.length > 2) {\n return null\n }\n const callee = path.node.callee\n if (\n !types.isMemberExpression(callee) ||\n callee.computed ||\n !types.isIdentifier(callee.property, { name: \"withNode\" })\n ) {\n return null\n }\n const fn = path.node.arguments[path.node.arguments.length - 1]\n if (types.isIdentifier(fn)) {\n return fn.name\n }\n if (types.isMemberExpression(fn) && !fn.computed) {\n return propertyName(fn.property, types)\n }\n if (types.isFunctionExpression(fn) && fn.id) {\n return fn.id.name\n }\n return null\n}\n\nconst BAML_GENERATED_HEADER = \"This file was generated by BAML\"\nconst BAML_CLIENT_CLASSES = new Set([\"BamlAsyncClient\", \"BamlSyncClient\"])\nconst BAML_OPTIONS_PARAMETER = \"__baml_options__\"\n\nconst BAML_PACKAGE = \"@boundaryml/baml\"\nconst DEFAULT_BAML_REGISTRATION_MODULE = \"@bitfab/sdk/baml\"\n\nfunction importsBamlAtRuntime(\n program: BabelTypes.Program,\n types: BabelTypesApi,\n): boolean {\n return program.body.some(\n (statement) =>\n types.isImportDeclaration(statement) &&\n statement.source.value === BAML_PACKAGE &&\n statement.importKind !== \"type\" &&\n statement.specifiers.some(\n (specifier) =>\n !types.isImportSpecifier(specifier) ||\n specifier.importKind !== \"type\",\n ),\n )\n}\n\nconst SDK_PACKAGE_PATH = [\"node_modules\", \"@bitfab\", \"sdk\", \"package.json\"]\nconst BAML_REGISTRATION_EXPORT = \"./baml\"\nconst sdkExportsBamlRegistrationByDirectory = new Map<string, boolean>()\n\nfunction readPackageJson(path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, \"utf8\"))\n } catch {\n return undefined\n }\n}\n\nfunction exportsBamlRegistration(packageJson: unknown): boolean {\n if (typeof packageJson !== \"object\" || packageJson === null) {\n return false\n }\n const exports = (packageJson as { exports?: unknown }).exports\n return (\n typeof exports === \"object\" &&\n exports !== null &&\n BAML_REGISTRATION_EXPORT in exports\n )\n}\n\nfunction nearestSdkExportsBamlRegistration(directory: string): boolean {\n const cached = sdkExportsBamlRegistrationByDirectory.get(directory)\n if (cached !== undefined) {\n return cached\n }\n const packageJson = readPackageJson(join(directory, ...SDK_PACKAGE_PATH))\n const parent = dirname(directory)\n const exported =\n packageJson !== undefined\n ? exportsBamlRegistration(packageJson)\n : parent !== directory && nearestSdkExportsBamlRegistration(parent)\n sdkExportsBamlRegistrationByDirectory.set(directory, exported)\n return exported\n}\n\nfunction defaultRegistrationResolves(filename: string): boolean {\n return (\n isAbsolute(filename) && nearestSdkExportsBamlRegistration(dirname(filename))\n )\n}\n\nfunction bamlRegistrationModuleFor(\n filename: string,\n configured: string | false | undefined,\n): string | null {\n if (configured === false) {\n return null\n }\n if (configured !== undefined) {\n return configured\n }\n return defaultRegistrationResolves(filename)\n ? DEFAULT_BAML_REGISTRATION_MODULE\n : null\n}\n\nfunction isBamlGeneratedSource(code: string): boolean {\n return code.slice(0, 4096).includes(BAML_GENERATED_HEADER)\n}\n\nfunction isBamlClientMethod(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const node = path.node\n if (!types.isClassMethod(node) || node.kind !== \"method\" || node.static) {\n return false\n }\n const classPath = path.parentPath?.parentPath\n if (\n !classPath ||\n !(classPath.isClassDeclaration() || classPath.isClassExpression()) ||\n !classPath.node.id ||\n !BAML_CLIENT_CLASSES.has(classPath.node.id.name)\n ) {\n return false\n }\n const parameters = runtimeParameters(node, types)\n const last = parameters[parameters.length - 1]\n return types.isIdentifier(last, { name: BAML_OPTIONS_PARAMETER })\n}\n\nfunction bamlOptionsDeclaration(\n callerOptions: BabelTypes.Identifier,\n withCollector: BabelTypes.Identifier,\n types: BabelTypesApi,\n): BabelTypes.VariableDeclaration {\n return types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(BAML_OPTIONS_PARAMETER),\n types.conditionalExpression(\n types.binaryExpression(\n \"===\",\n types.cloneNode(withCollector),\n types.identifier(\"undefined\"),\n ),\n types.cloneNode(callerOptions),\n types.callExpression(types.cloneNode(withCollector), [\n types.cloneNode(callerOptions),\n types.memberExpression(\n types.thisExpression(),\n types.identifier(\"bamlOptions\"),\n ),\n ]),\n ),\n ),\n ])\n}\n\nfunction runtimeParameters(\n node: BabelTypes.Function,\n types: BabelTypesApi,\n): BabelTypes.Function[\"params\"] {\n return node.params.filter(\n (parameter) => !types.isIdentifier(parameter, { name: \"this\" }),\n )\n}\n\nfunction parameterInputs(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): ReturnType<BabelTypesApi[\"arrayExpression\"]> {\n const elements: Array<BabelTypes.Expression | BabelTypes.SpreadElement> = []\n\n for (const [index, parameter] of runtimeParameters(\n path.node,\n types,\n ).entries()) {\n if (!types.isArrowFunctionExpression(path.node)) {\n if (types.isRestElement(parameter)) {\n elements.push(\n types.spreadElement(\n types.callExpression(\n types.memberExpression(\n types.arrayExpression([\n types.spreadElement(types.identifier(\"arguments\")),\n ]),\n types.identifier(\"slice\"),\n ),\n [types.numericLiteral(index)],\n ),\n ),\n )\n } else {\n elements.push(\n types.memberExpression(\n types.identifier(\"arguments\"),\n types.numericLiteral(index),\n true,\n ),\n )\n }\n continue\n }\n\n if (types.isIdentifier(parameter)) {\n elements.push(types.identifier(parameter.name))\n } else if (\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ) {\n elements.push(\n types.spreadElement(types.identifier(parameter.argument.name)),\n )\n }\n }\n\n return types.arrayExpression(elements)\n}\n\nfunction needsArgumentWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n return (\n types.isArrowFunctionExpression(path.node) &&\n path.node.params.some(\n (parameter) =>\n !types.isIdentifier(parameter) &&\n !(\n types.isRestElement(parameter) &&\n types.isIdentifier(parameter.argument)\n ),\n )\n )\n}\n\nfunction isRestWrapper(\n path: NodePath<BabelTypes.Function>,\n types: BabelTypesApi,\n): boolean {\n const parameters = runtimeParameters(path.node, types)\n return parameters.length === 1 && types.isRestElement(parameters[0])\n}\n\ntype RecordedCallNode =\n | BabelTypes.CallExpression\n | BabelTypes.OptionalCallExpression\n\ninterface RecordedClientCall {\n methods: readonly string[]\n endpoint?: string\n runtimeExport: string\n identifierHint: string\n receiverHint: string\n matchesReceiver: (\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n ) => boolean\n}\n\nfunction isNamedMember(\n node: BabelTypes.Node,\n name: string,\n types: BabelTypesApi,\n): node is BabelTypes.MemberExpression | BabelTypes.OptionalMemberExpression {\n return (\n (types.isMemberExpression(node) ||\n types.isOptionalMemberExpression(node)) &&\n !node.computed &&\n types.isIdentifier(node.property, { name })\n )\n}\n\nfunction isChatCompletionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"completions\", types) &&\n isNamedMember(receiver.object, \"chat\", types)\n )\n}\n\nfunction isMessagesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"messages\", types) &&\n !isNamedMember(receiver.object, \"beta\", types)\n )\n}\n\nfunction isResponsesReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"responses\", types)\n}\n\nfunction isEmbeddingsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"embeddings\", types)\n}\n\nfunction isTranscriptionsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return (\n isNamedMember(receiver, \"transcriptions\", types) &&\n isNamedMember(receiver.object, \"audio\", types)\n )\n}\n\nfunction isModelsReceiver(\n receiver: BabelTypes.Expression,\n types: BabelTypesApi,\n): boolean {\n return isNamedMember(receiver, \"models\", types)\n}\n\nconst CLIENT_CALL_RUNTIME = {\n runtimeExport: \"__bitfabAutoClientCall\",\n identifierHint: \"bitfabAutoClientCall\",\n receiverHint: \"bitfabClientCallReceiver\",\n}\n\nconst RECORDED_CLIENT_CALLS: readonly RecordedClientCall[] = [\n {\n methods: [JEV_METHOD],\n runtimeExport: \"__bitfabAutoJev\",\n identifierHint: \"bitfabAutoJev\",\n receiverHint: \"bitfabJevReceiver\",\n matchesReceiver: () => true,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"chat.completions\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isChatCompletionsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"embeddings\",\n methods: [\"create\"],\n matchesReceiver: isEmbeddingsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"audio.transcriptions\",\n methods: [\"create\"],\n matchesReceiver: isTranscriptionsReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"messages\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isMessagesReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"responses\",\n methods: [\"create\", \"parse\", \"stream\"],\n matchesReceiver: isResponsesReceiver,\n },\n {\n ...CLIENT_CALL_RUNTIME,\n endpoint: \"models\",\n methods: [\"generateContent\", \"generateContentStream\", \"embedContent\"],\n matchesReceiver: isModelsReceiver,\n },\n]\n\nconst RECORDED_CALL_RUNTIMES = [\n ...new Map(\n RECORDED_CLIENT_CALLS.map((call) => [call.runtimeExport, call]),\n ).values(),\n]\n\nfunction recordedCallTarget(\n node: RecordedCallNode,\n types: BabelTypesApi,\n): {\n call: RecordedClientCall\n receiver: BabelTypes.Expression\n method: string\n} | null {\n const callee = node.callee\n if (\n !(\n types.isMemberExpression(callee) ||\n types.isOptionalMemberExpression(callee)\n ) ||\n callee.computed ||\n !types.isIdentifier(callee.property) ||\n types.isSuper(callee.object)\n ) {\n return null\n }\n const method = callee.property.name\n const receiver = callee.object\n const call = RECORDED_CLIENT_CALLS.find(\n (candidate) =>\n candidate.methods.includes(method) &&\n candidate.matchesReceiver(receiver, types),\n )\n return call === undefined ? null : { call, receiver, method }\n}\n\nfunction isOptionalChain(node: BabelTypes.Node, types: BabelTypesApi): boolean {\n return (\n types.isOptionalMemberExpression(node) ||\n types.isOptionalCallExpression(node)\n )\n}\n\nfunction continuesOptionalChain(\n path: NodePath<BabelTypes.OptionalCallExpression>,\n types: BabelTypesApi,\n): boolean {\n const parent = path.parent\n return (\n (types.isOptionalMemberExpression(parent) && parent.object === path.node) ||\n (types.isOptionalCallExpression(parent) && parent.callee === path.node)\n )\n}\n\nfunction rewriteRecordedClientCall(\n path: NodePath<RecordedCallNode>,\n state: BitfabPluginState,\n types: BabelTypesApi,\n): void {\n if (state.skipFile || state.bamlGenerated) {\n return\n }\n const node = path.node\n const target = recordedCallTarget(node, types)\n const identifier =\n target === null\n ? undefined\n : state.recordedCallIdentifiers?.get(target.call.runtimeExport)\n if (target === null || identifier === undefined) {\n return\n }\n const { call: recordedCall, receiver, method } = target\n const optionalReceiver =\n types.isOptionalMemberExpression(node.callee) && node.callee.optional\n const optionalMethod = types.isOptionalCallExpression(node) && node.optional\n if (types.isOptionalCallExpression(node)) {\n if (\n continuesOptionalChain(\n path as NodePath<BabelTypes.OptionalCallExpression>,\n types,\n ) ||\n (!optionalReceiver && isOptionalChain(receiver, types))\n ) {\n return\n }\n }\n const guarded = optionalReceiver || optionalMethod\n const receiverReference =\n guarded && !path.scope.isStatic(receiver)\n ? path.scope.generateDeclaredUidIdentifier(recordedCall.receiverHint)\n : null\n const receiverValue = (): BabelTypes.Expression =>\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.cloneNode(receiverReference)\n const call = types.callExpression(\n types.cloneNode(identifier),\n recordedCall.endpoint === undefined\n ? [receiverValue(), ...node.arguments]\n : [\n types.stringLiteral(recordedCall.endpoint),\n receiverValue(),\n types.stringLiteral(method),\n ...node.arguments,\n ],\n )\n state.usedRuntime = true\n state.usedRecordedCalls?.add(recordedCall.runtimeExport)\n if (!guarded) {\n path.replaceWith(call)\n return\n }\n const firstReceiver =\n receiverReference === null\n ? types.cloneNode(receiver)\n : types.assignmentExpression(\n \"=\",\n types.cloneNode(receiverReference),\n receiver,\n )\n const missing = (value: BabelTypes.Expression): BabelTypes.BinaryExpression =>\n types.binaryExpression(\"==\", value, types.nullLiteral())\n const methodOf = (value: BabelTypes.Expression): BabelTypes.Expression =>\n types.memberExpression(value, types.identifier(method))\n const test = optionalReceiver\n ? optionalMethod\n ? types.logicalExpression(\n \"||\",\n missing(firstReceiver),\n missing(methodOf(receiverValue())),\n )\n : missing(firstReceiver)\n : missing(methodOf(firstReceiver))\n path.replaceWith(\n types.conditionalExpression(\n test,\n types.unaryExpression(\"void\", types.numericLiteral(0)),\n call,\n ),\n )\n}\n\n/**\n * Babel adapter for Bitfab's experimental automatic call-span runtime.\n *\n * @experimental The transform protocol and generated function identities may\n * change before the feature is stable.\n */\nexport default function bitfabBabelPlugin(api: {\n types: BabelTypesApi\n}): PluginObject<BitfabPluginState> {\n const { types } = api\n\n return {\n name: \"bitfab-auto-trace\",\n visitor: {\n Program: {\n enter(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const filename = state.file.opts.filename ?? \"unknown\"\n state.skipFile =\n !shouldTransformBitfabFile(filename, state.opts) ||\n path.scope.hasBinding(AUTO_TRACE_TRANSFORM_MARKER) ||\n path.node.directives.some(\n (directive) => directive.value.value === \"use client\",\n )\n state.runtimeIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoSpan\")\n state.activeIdentifier = path.scope.generateUidIdentifier(\n \"bitfabAutoTraceActive\",\n )\n state.wrapperIdentifier =\n path.scope.generateUidIdentifier(\"bitfabAutoWrap\")\n state.recordedCallIdentifiers = new Map(\n RECORDED_CALL_RUNTIMES.map((call) => [\n call.runtimeExport,\n path.scope.generateUidIdentifier(call.identifierHint),\n ]),\n )\n state.bamlGenerated = isBamlGeneratedSource(state.file.code ?? \"\")\n state.definitions = []\n state.usedRuntime = false\n state.usedWrapper = false\n state.usedRecordedCalls = new Set()\n },\n exit(path: NodePath<BabelTypes.Program>, state: BitfabPluginState) {\n const bamlRegistrationModule =\n !state.skipFile &&\n state.bamlGenerated &&\n importsBamlAtRuntime(path.node, types)\n ? bamlRegistrationModuleFor(\n sourceFilename(state.file.opts.filename ?? \"\"),\n state.opts.bamlRegistrationModule,\n )\n : null\n if (bamlRegistrationModule !== null) {\n path.unshiftContainer(\n \"body\",\n types.importDeclaration(\n [],\n types.stringLiteral(bamlRegistrationModule),\n ),\n )\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n }\n if (\n state.skipFile ||\n !state.usedRuntime ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n\n state.file.metadata[AUTO_TRACE_TRANSFORM_MARKER] = true\n path.unshiftContainer(\"body\", [\n types.importDeclaration(\n [\n types.importSpecifier(\n state.runtimeIdentifier,\n types.identifier(\"__bitfabAutoSpan\"),\n ),\n types.importSpecifier(\n state.activeIdentifier,\n types.identifier(\"__bitfabAutoTraceActive\"),\n ),\n ...(state.usedWrapper\n ? [\n types.importSpecifier(\n state.wrapperIdentifier,\n types.identifier(\"__bitfabAutoWrap\"),\n ),\n ]\n : []),\n ...RECORDED_CALL_RUNTIMES.flatMap((call) => {\n const identifier = state.recordedCallIdentifiers?.get(\n call.runtimeExport,\n )\n return state.usedRecordedCalls?.has(call.runtimeExport) &&\n identifier\n ? [\n types.importSpecifier(\n identifier,\n types.identifier(call.runtimeExport),\n ),\n ]\n : []\n }),\n ],\n types.stringLiteral(\n state.opts.runtimeModule ?? \"@bitfab/sdk/auto\",\n ),\n ),\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n types.assignmentExpression(\n \"=\",\n types.memberExpression(\n types.identifier(\"globalThis\"),\n types.identifier(AUTO_TRACE_TRANSFORM_MARKER),\n ),\n types.booleanLiteral(true),\n ),\n ),\n ]),\n ...(state.definitions ?? []),\n ])\n },\n },\n CallExpression: {\n exit(\n path: NodePath<BabelTypes.CallExpression>,\n state: BitfabPluginState,\n ) {\n if (state.skipFile) {\n return\n }\n if (recordedCallTarget(path.node, types) !== null) {\n rewriteRecordedClientCall(path, state, types)\n return\n }\n const configuredName = withNodeFunctionName(path, types)\n if (configuredName === null) {\n return\n }\n if (path.node.arguments.length === 1) {\n path.node.arguments.push(types.identifier(\"undefined\"))\n }\n path.node.arguments.push(types.stringLiteral(configuredName))\n },\n },\n OptionalCallExpression: {\n exit(\n path: NodePath<BabelTypes.OptionalCallExpression>,\n state: BitfabPluginState,\n ) {\n rewriteRecordedClientCall(path, state, types)\n },\n },\n Function: {\n exit(path: NodePath<BabelTypes.Function>, state: BitfabPluginState) {\n const node = path.node as typeof path.node & InstrumentedFunction\n if (\n state.skipFile ||\n node._bitfabInstrumented ||\n !isInstrumentableFunction(node, types) ||\n isTraceDecoratorRoot(path, types) ||\n !state.runtimeIdentifier ||\n !state.activeIdentifier ||\n !state.wrapperIdentifier\n ) {\n return\n }\n const bamlMethod =\n state.bamlGenerated === true && isBamlClientMethod(path, types)\n if (state.bamlGenerated && !bamlMethod) {\n return\n }\n if (isJevMethodDefinition(path, types)) {\n return\n }\n const name = qualifiedFunctionName(path, types)\n if (name.startsWith(\"anonymous-\")) {\n return\n }\n const normalizedFilename = autoTraceFilename(\n state.file.opts.filename ?? \"unknown\",\n state.opts.cwd ?? state.file.opts.cwd ?? process.cwd(),\n )\n const { line, column } = sourcePosition(path)\n const definition = types.objectExpression([\n types.objectProperty(\n types.identifier(\"id\"),\n types.stringLiteral(\n autoTraceFunctionId(normalizedFilename, name),\n ),\n ),\n types.objectProperty(\n types.identifier(\"name\"),\n types.stringLiteral(name),\n ),\n types.objectProperty(\n types.identifier(\"file\"),\n types.stringLiteral(normalizedFilename),\n ),\n types.objectProperty(\n types.identifier(\"line\"),\n types.numericLiteral(line),\n ),\n types.objectProperty(\n types.identifier(\"column\"),\n types.numericLiteral(column),\n ),\n ...(node.async\n ? [\n types.objectProperty(\n types.identifier(\"async\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(bamlMethod\n ? [\n types.objectProperty(\n types.identifier(\"baml\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ...(isRestWrapper(path, types)\n ? [\n types.objectProperty(\n types.identifier(\"wrapper\"),\n types.booleanLiteral(true),\n ),\n ]\n : []),\n ])\n const definitionIdentifier = path.scope\n .getProgramParent()\n .generateUidIdentifier(\"bitfabAutoDefinition\")\n state.definitions?.push(\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(definitionIdentifier, definition),\n ]),\n )\n\n if (needsArgumentWrapper(path, types)) {\n node._bitfabInstrumented = true\n path.replaceWith(\n types.callExpression(types.cloneNode(state.wrapperIdentifier), [\n types.cloneNode(definitionIdentifier),\n node as BabelTypes.ArrowFunctionExpression,\n ]),\n )\n state.usedRuntime = true\n state.usedWrapper = true\n return\n }\n\n const originalBody = types.isBlockStatement(node.body)\n ? node.body\n : types.blockStatement([types.returnStatement(node.body)])\n const directives = originalBody.directives\n originalBody.directives = []\n\n const callerOptions = bamlMethod\n ? path.scope.generateUidIdentifier(\"bitfabBamlOptions\")\n : undefined\n const withCollector = bamlMethod\n ? path.scope.generateUidIdentifier(\"bitfabBamlWithCollector\")\n : undefined\n const tracedBody =\n callerOptions && withCollector\n ? types.blockStatement(\n [\n bamlOptionsDeclaration(callerOptions, withCollector, types),\n ...types.cloneNode(originalBody, true).body,\n ],\n [],\n )\n : types.cloneNode(originalBody, true)\n const body = types.blockStatement(\n [\n types.ifStatement(\n types.callExpression(\n types.cloneNode(state.activeIdentifier),\n [],\n ),\n types.blockStatement([\n ...(callerOptions\n ? [\n types.variableDeclaration(\"const\", [\n types.variableDeclarator(\n callerOptions,\n types.identifier(BAML_OPTIONS_PARAMETER),\n ),\n ]),\n ]\n : []),\n types.returnStatement(\n types.callExpression(\n types.cloneNode(state.runtimeIdentifier),\n [\n types.cloneNode(definitionIdentifier),\n parameterInputs(path, types),\n types.arrowFunctionExpression(\n withCollector ? [types.cloneNode(withCollector)] : [],\n tracedBody,\n node.async ?? false,\n ),\n ],\n ),\n ),\n ]),\n ),\n ...originalBody.body,\n ],\n directives,\n )\n node.body = body\n node._bitfabInstrumented = true\n state.usedRuntime = true\n },\n },\n },\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
const require_bamlPeer = require("./bamlPeer-BxJO7-pm.cjs");
|
|
2
|
-
const require_autoTrace = require("./autoTrace-
|
|
2
|
+
const require_autoTrace = require("./autoTrace-BtiEpHTN.cjs");
|
|
3
3
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
4
4
|
let _opentelemetry_core = require("@opentelemetry/core");
|
|
5
5
|
let _opentelemetry_resources = require("@opentelemetry/resources");
|
|
6
6
|
let _opentelemetry_sdk_trace = require("@opentelemetry/sdk-trace");
|
|
7
7
|
//#region src/version.generated.ts
|
|
8
|
-
const __version__ = "0.76.
|
|
8
|
+
const __version__ = "0.76.7";
|
|
9
9
|
const __packageName__ = "@bitfab/sdk";
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/traceCompletion.ts
|
|
@@ -2433,4 +2433,4 @@ Object.defineProperty(exports, "unrefTimer", {
|
|
|
2433
2433
|
}
|
|
2434
2434
|
});
|
|
2435
2435
|
|
|
2436
|
-
//# sourceMappingURL=http-
|
|
2436
|
+
//# sourceMappingURL=http-7FhAoWen.cjs.map
|