{"version":3,"sources":["jsdelivr-header.js","/npm/braintrust@3.37.2/dist/browser.js"],"names":[],"mappings":"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","file":"/npm/braintrust@3.37.2/dist/browser.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /npm/braintrust@3.37.2/dist/browser.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/browser/index.ts\nvar browser_exports = {};\n__export(browser_exports, {\n  Attachment: () => Attachment,\n  AttachmentReference: () => AttachmentReference,\n  BAGGAGE_HEADER: () => BAGGAGE_HEADER,\n  BRAINTRUST_CURRENT_SPAN_STORE: () => BRAINTRUST_CURRENT_SPAN_STORE,\n  BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME: () => BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME,\n  BRAINTRUST_PARENT_KEY: () => BRAINTRUST_PARENT_KEY,\n  BaseAttachment: () => BaseAttachment,\n  BaseExperiment: () => BaseExperiment,\n  BraintrustLangChainCallbackHandler: () => BraintrustLangChainCallbackHandler,\n  BraintrustMiddleware: () => BraintrustMiddleware,\n  BraintrustObservabilityExporter: () => BraintrustObservabilityExporter,\n  BraintrustState: () => BraintrustState,\n  BraintrustStream: () => BraintrustStream,\n  CachedSpanFetcher: () => CachedSpanFetcher,\n  CodeFunction: () => CodeFunction,\n  CodePrompt: () => CodePrompt,\n  ContextManager: () => ContextManager,\n  DEFAULT_FETCH_BATCH_SIZE: () => DEFAULT_FETCH_BATCH_SIZE,\n  DEFAULT_MAX_REQUEST_SIZE: () => DEFAULT_MAX_REQUEST_SIZE,\n  Dataset: () => Dataset2,\n  DatasetPipeline: () => DatasetPipeline,\n  ERR_PERMALINK: () => ERR_PERMALINK,\n  Eval: () => Eval,\n  EvalResultWithSummary: () => EvalResultWithSummary,\n  Experiment: () => Experiment2,\n  ExternalAttachment: () => ExternalAttachment,\n  FailedHTTPResponse: () => FailedHTTPResponse,\n  IDGenerator: () => IDGenerator,\n  JSONAttachment: () => JSONAttachment,\n  LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,\n  LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,\n  LazyValue: () => LazyValue,\n  LocalTrace: () => LocalTrace,\n  Logger: () => Logger,\n  LoginInvalidOrgError: () => LoginInvalidOrgError,\n  NOOP_SPAN: () => NOOP_SPAN,\n  NOOP_SPAN_PERMALINK: () => NOOP_SPAN_PERMALINK,\n  NoopSpan: () => NoopSpan,\n  OTELIDGenerator: () => OTELIDGenerator,\n  ObjectFetcher: () => ObjectFetcher,\n  Project: () => Project2,\n  ProjectNameIdMap: () => ProjectNameIdMap,\n  Prompt: () => Prompt2,\n  PromptBuilder: () => PromptBuilder,\n  ReadonlyAttachment: () => ReadonlyAttachment,\n  ReadonlyExperiment: () => ReadonlyExperiment,\n  Reporter: () => Reporter,\n  ScorerBuilder: () => ScorerBuilder,\n  SpanFetcher: () => SpanFetcher,\n  SpanImpl: () => SpanImpl,\n  TRACEPARENT_HEADER: () => TRACEPARENT_HEADER,\n  TRACESTATE_HEADER: () => TRACESTATE_HEADER,\n  TestBackgroundLogger: () => TestBackgroundLogger,\n  ToolBuilder: () => ToolBuilder,\n  UUIDGenerator: () => UUIDGenerator,\n  WorkflowBatchScorer: () => WorkflowBatchScorer,\n  WorkflowBatchTask: () => WorkflowBatchTask,\n  WorkflowEvalMemoryStore: () => WorkflowEvalMemoryStore,\n  WorkflowEvalRedisStore: () => WorkflowEvalRedisStore,\n  WorkflowScorer: () => WorkflowScorer,\n  WorkflowTask: () => WorkflowTask,\n  X_CACHED_HEADER: () => X_CACHED_HEADER,\n  _exportsForTestingOnly: () => _exportsForTestingOnly,\n  _internalGetGlobalState: () => _internalGetGlobalState,\n  _internalIso: () => isomorph_default,\n  _internalSetInitialState: () => _internalSetInitialState,\n  addAzureBlobHeaders: () => addAzureBlobHeaders,\n  agentAssertionScorer: () => agentAssertionScorer,\n  braintrustAISDKTelemetry: () => braintrustAISDKTelemetry,\n  braintrustEveHook: () => braintrustEveHook,\n  braintrustEveInstrumentation: () => braintrustEveInstrumentation,\n  braintrustFlueInstrumentation: () => braintrustFlueInstrumentation,\n  braintrustFlueObserver: () => braintrustFlueObserver,\n  braintrustStreamChunkSchema: () => braintrustStreamChunkSchema,\n  buildLocalSummary: () => buildLocalSummary,\n  collectAnthropicSession: () => collectAnthropicSession,\n  completeOpenAIBatchTrace: () => completeOpenAIBatchTrace,\n  configureInstrumentation: () => configureInstrumentation,\n  constructLogs3OverflowRequest: () => constructLogs3OverflowRequest,\n  createFinalValuePassThroughStream: () => createFinalValuePassThroughStream,\n  currentExperiment: () => currentExperiment,\n  currentLogger: () => currentLogger,\n  currentSpan: () => currentSpan,\n  deepCopyEvent: () => deepCopyEvent,\n  default: () => exports_exports,\n  defaultErrorScoreHandler: () => defaultErrorScoreHandler,\n  defineWorkflowEval: () => defineWorkflowEval,\n  deserializePlainStringAsJSON: () => deserializePlainStringAsJSON,\n  devNullWritableStream: () => devNullWritableStream,\n  evaluatorDefinitionSchema: () => evaluatorDefinitionSchema,\n  evaluatorDefinitionsSchema: () => evaluatorDefinitionsSchema,\n  extractTraceContextFromHeaders: () => extractTraceContextFromHeaders,\n  failOpenAIAgentsTrace: () => failOpenAIAgentsTrace,\n  flush: () => flush,\n  getContextManager: () => getContextManager,\n  getIdGenerator: () => getIdGenerator,\n  getPromptVersions: () => getPromptVersions,\n  getSpanParentObject: () => getSpanParentObject,\n  getTemplateRenderer: () => getTemplateRenderer,\n  graph: () => graph_framework_exports,\n  init: () => init,\n  initDataset: () => initDataset,\n  initExperiment: () => initExperiment,\n  initFunction: () => initFunction,\n  initLogger: () => initLogger,\n  initNodeTestSuite: () => initNodeTestSuite,\n  injectTraceContext: () => injectTraceContext,\n  invoke: () => invoke,\n  isTemplateFormat: () => isTemplateFormat,\n  loadParameters: () => loadParameters,\n  loadPrompt: () => loadPrompt,\n  log: () => log,\n  logError: () => logError,\n  login: () => login,\n  loginToState: () => loginToState,\n  logs3OverflowUploadSchema: () => logs3OverflowUploadSchema,\n  newId: () => newId,\n  openaiBatchesRetrieveTraced: () => openaiBatchesRetrieveTraced,\n  openaiFilesCreateTraced: () => openaiFilesCreateTraced,\n  parseCachedHeader: () => parseCachedHeader,\n  parseTemplateFormat: () => parseTemplateFormat,\n  permalink: () => permalink,\n  pickLogs3OverflowObjectIds: () => pickLogs3OverflowObjectIds,\n  projects: () => projects,\n  promptContentsSchema: () => promptContentsSchema,\n  promptDefinitionSchema: () => promptDefinitionSchema,\n  promptDefinitionToPromptData: () => promptDefinitionToPromptData,\n  promptDefinitionWithToolsSchema: () => promptDefinitionWithToolsSchema,\n  registerOtelFlush: () => registerOtelFlush,\n  registerSandbox: () => registerSandbox,\n  registerTemplatePlugin: () => registerTemplatePlugin,\n  renderMessage: () => renderMessage,\n  renderPromptParams: () => renderPromptParams,\n  renderTemplateContent: () => renderTemplateContent,\n  reportFailures: () => reportFailures,\n  runEvaluator: () => runEvaluator,\n  setFetch: () => setFetch,\n  setMaskingFunction: () => setMaskingFunction,\n  spanComponentsToObjectId: () => spanComponentsToObjectId,\n  startOpenAIAgentsTrace: () => startOpenAIAgentsTrace,\n  startSpan: () => startSpan,\n  summarize: () => summarize,\n  templateRegistry: () => templateRegistry,\n  toolFunctionDefinitionSchema: () => ToolFunctionDefinition,\n  traceable: () => traceable,\n  traced: () => traced,\n  updateOpenAIAgentsTrace: () => updateOpenAIAgentsTrace,\n  updateSpan: () => updateSpan,\n  uploadLogs3OverflowPayload: () => uploadLogs3OverflowPayload,\n  utf8ByteLength: () => utf8ByteLength2,\n  withCurrent: () => withCurrent,\n  withDataset: () => withDataset,\n  withExperiment: () => withExperiment,\n  withLogger: () => withLogger,\n  withParent: () => withParent,\n  wrapAISDK: () => wrapAISDK,\n  wrapAISDKModel: () => wrapAISDKModel,\n  wrapAgentClass: () => wrapAgentClass,\n  wrapAnthropic: () => wrapAnthropic,\n  wrapBedrockRuntime: () => wrapBedrockRuntime,\n  wrapClaudeAgentSDK: () => wrapClaudeAgentSDK,\n  wrapCloudflareAIChat: () => wrapCloudflareAIChat,\n  wrapCloudflareAgent: () => wrapCloudflareAgent,\n  wrapCloudflareThink: () => wrapCloudflareThink,\n  wrapCohere: () => wrapCohere,\n  wrapCopilotClient: () => wrapCopilotClient,\n  wrapCursorSDK: () => wrapCursorSDK,\n  wrapElevenLabs: () => wrapElevenLabs,\n  wrapGenkit: () => wrapGenkit,\n  wrapGoogleADK: () => wrapGoogleADK,\n  wrapGoogleGenAI: () => wrapGoogleGenAI,\n  wrapGoogleGenerativeAI: () => wrapGoogleGenerativeAI,\n  wrapGroq: () => wrapGroq,\n  wrapHuggingFace: () => wrapHuggingFace,\n  wrapHuggingFaceTransformers: () => wrapHuggingFaceTransformers,\n  wrapLangGraphSDK: () => wrapLangGraphSDK,\n  wrapLangSmithClient: () => wrapLangSmithClient,\n  wrapLangSmithRunTrees: () => wrapLangSmithRunTrees,\n  wrapLangSmithTraceable: () => wrapLangSmithTraceable,\n  wrapMastraAgent: () => wrapMastraAgent,\n  wrapMistral: () => wrapMistral,\n  wrapOllama: () => wrapOllama,\n  wrapOpenAI: () => wrapOpenAI,\n  wrapOpenAICodexSDK: () => wrapOpenAICodexSDK,\n  wrapOpenAIv4: () => wrapOpenAIv4,\n  wrapOpenRouter: () => wrapOpenRouter,\n  wrapOpenRouterAgent: () => wrapOpenRouterAgent,\n  wrapPiCodingAgentSDK: () => wrapPiCodingAgentSDK,\n  wrapStrandsAgentSDK: () => wrapStrandsAgentSDK,\n  wrapTraced: () => wrapTraced,\n  wrapTypeSafe: () => wrapTypeSafe,\n  wrapVitest: () => wrapVitest,\n  wrapVoyageAI: () => wrapVoyageAI\n});\nmodule.exports = __toCommonJS(browser_exports);\n\n// src/global-instrumentation-hooks.ts\nvar GLOBAL_INSTRUMENTATION_HOOKS_KEY = \"__braintrust_instrumentation_hooks\";\nvar GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION = 1;\nvar GLOBAL_INSTRUMENTATION_HOOKS_REGISTRY_BRAND = \"braintrust.global-instrumentation-hooks.registry\";\nvar GLOBAL_INSTRUMENTATION_HOOK_BRAND = \"braintrust.global-instrumentation-hooks.hook\";\nvar GLOBAL_INVOCATION_HOOK_BRAND = \"braintrust.global-instrumentation-hooks.invocation-hook\";\nvar registryBrand = Symbol.for(GLOBAL_INSTRUMENTATION_HOOKS_REGISTRY_BRAND);\nvar hookBrand = Symbol.for(GLOBAL_INSTRUMENTATION_HOOK_BRAND);\nvar invocationHookBrand = Symbol.for(GLOBAL_INVOCATION_HOOK_BRAND);\nvar errorReporter;\nfunction setGlobalHookErrorReporter(reporter) {\n  const previousReporter = errorReporter;\n  errorReporter = reporter;\n  return () => {\n    if (errorReporter === reporter) {\n      errorReporter = previousReporter;\n    }\n  };\n}\nfunction reportError(error) {\n  try {\n    errorReporter?.(error);\n  } catch {\n  }\n}\nfunction setContextValue(context, key, value) {\n  try {\n    context[key] = value;\n  } catch (error) {\n    reportError(error);\n  }\n}\nfunction wrapStoreRun(store, message, next, transform) {\n  return () => {\n    let context;\n    try {\n      context = transform ? transform(message) : message;\n    } catch (error) {\n      reportError(error);\n      return next();\n    }\n    let called = false;\n    let result;\n    let providerError;\n    let providerThrew = false;\n    const runNext = () => {\n      if (called) {\n        reportError(\n          new Error(\n            \"Instrumentation store invoked its callback more than once\"\n          )\n        );\n        if (providerThrew) {\n          throw providerError;\n        }\n        return result;\n      }\n      called = true;\n      try {\n        result = next();\n        return result;\n      } catch (error) {\n        providerThrew = true;\n        providerError = error;\n        throw error;\n      }\n    };\n    try {\n      store.run(context, runNext);\n    } catch (error) {\n      if (!providerThrew || error !== providerError) {\n        reportError(error);\n      }\n    }\n    if (!called) {\n      reportError(\n        new Error(\"Instrumentation store did not invoke its callback\")\n      );\n      return runNext();\n    }\n    if (providerThrew) {\n      throw providerError;\n    }\n    return result;\n  };\n}\nvar HookChannel = class {\n  constructor(name) {\n    this.name = name;\n  }\n  name;\n  subscribers = [];\n  stores = /* @__PURE__ */ new Map();\n  get hasSubscribers() {\n    return this.subscribers.length > 0 || this.stores.size > 0;\n  }\n  subscribe(subscription) {\n    if (typeof subscription !== \"function\") {\n      throw new TypeError(\"subscription must be a function\");\n    }\n    this.subscribers = [...this.subscribers, subscription];\n  }\n  unsubscribe(subscription) {\n    const index = this.subscribers.indexOf(subscription);\n    if (index === -1) {\n      return false;\n    }\n    this.subscribers = [\n      ...this.subscribers.slice(0, index),\n      ...this.subscribers.slice(index + 1)\n    ];\n    return true;\n  }\n  bindStore(store, transform) {\n    if (!store || typeof store.run !== \"function\") {\n      throw new TypeError(\"store must have a run method\");\n    }\n    this.stores.set(\n      store,\n      transform\n    );\n  }\n  unbindStore(store) {\n    return this.stores.delete(store);\n  }\n  publish(message) {\n    const subscribers = this.subscribers;\n    for (const subscriber of subscribers) {\n      try {\n        subscriber(message, this.name);\n      } catch (error) {\n        reportError(error);\n      }\n    }\n  }\n  runStores(message, fn, thisArg, ...args) {\n    let run = () => {\n      this.publish(message);\n      return Reflect.apply(fn, thisArg, args);\n    };\n    for (const [store, transform] of this.stores.entries()) {\n      run = wrapStoreRun(store, message, run, transform);\n    }\n    return run();\n  }\n};\nvar traceEvents = [\n  \"start\",\n  \"end\",\n  \"asyncStart\",\n  \"asyncEnd\",\n  \"error\"\n];\nfunction traceInvocation(hook, operator, target, thisArg, args, additional, callbackIndex = -1) {\n  const context = {\n    ...additional,\n    arguments: args,\n    self: thisArg\n  };\n  const invoke2 = () => hook.invoke(target, thisArg, args, additional);\n  if (operator === \"traceCallback\") {\n    return hook.traceCallback(invoke2, callbackIndex, context);\n  }\n  if (operator === \"tracePromise\") {\n    return hook.tracePromise(invoke2, context);\n  }\n  return hook.traceSync(invoke2, context);\n}\nvar InvocationHook = class {\n  interceptors = [];\n  get hasInterceptors() {\n    return this.interceptors.length > 0;\n  }\n  intercept(interceptor) {\n    if (typeof interceptor !== \"function\") {\n      throw new TypeError(\"interceptor must be a function\");\n    }\n    this.interceptors = [...this.interceptors, interceptor];\n    let active = true;\n    return () => {\n      if (!active) {\n        return;\n      }\n      active = false;\n      const index = this.interceptors.indexOf(interceptor);\n      if (index !== -1) {\n        this.interceptors = [\n          ...this.interceptors.slice(0, index),\n          ...this.interceptors.slice(index + 1)\n        ];\n      }\n    };\n  }\n  invoke(target, thisArg, args, additional) {\n    const interceptors = this.interceptors;\n    if (interceptors.length === 0) {\n      return Reflect.apply(target, thisArg, args);\n    }\n    let next = target;\n    for (let index = interceptors.length - 1; index >= 0; index -= 1) {\n      const interceptor = interceptors[index];\n      const downstream = next;\n      next = function(...nextArgs) {\n        return interceptor(downstream, this, nextArgs, additional);\n      };\n    }\n    return Reflect.apply(next, thisArg, args);\n  }\n};\nvar TracingHook = class {\n  start;\n  end;\n  asyncStart;\n  asyncEnd;\n  error;\n  invocationHook = new InvocationHook();\n  constructor(nameOrChannels) {\n    Object.defineProperty(this, hookBrand, {\n      configurable: false,\n      enumerable: false,\n      value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,\n      writable: false\n    });\n    Object.defineProperty(this, invocationHookBrand, {\n      configurable: false,\n      enumerable: false,\n      value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,\n      writable: false\n    });\n    if (typeof nameOrChannels === \"string\") {\n      this.start = new HookChannel(`tracing:${nameOrChannels}:start`);\n      this.end = new HookChannel(`tracing:${nameOrChannels}:end`);\n      this.asyncStart = new HookChannel(`tracing:${nameOrChannels}:asyncStart`);\n      this.asyncEnd = new HookChannel(`tracing:${nameOrChannels}:asyncEnd`);\n      this.error = new HookChannel(`tracing:${nameOrChannels}:error`);\n      return;\n    }\n    this.start = nameOrChannels.start ?? new HookChannel(\"tracing:start\");\n    this.end = nameOrChannels.end ?? new HookChannel(\"tracing:end\");\n    this.asyncStart = nameOrChannels.asyncStart ?? new HookChannel(\"tracing:asyncStart\");\n    this.asyncEnd = nameOrChannels.asyncEnd ?? new HookChannel(\"tracing:asyncEnd\");\n    this.error = nameOrChannels.error ?? new HookChannel(\"tracing:error\");\n  }\n  get hasSubscribers() {\n    return this.start.hasSubscribers || this.end.hasSubscribers || this.asyncStart.hasSubscribers || this.asyncEnd.hasSubscribers || this.error.hasSubscribers;\n  }\n  get hasInterceptors() {\n    return this.invocationHook.hasInterceptors;\n  }\n  intercept(interceptor) {\n    return this.invocationHook.intercept(interceptor);\n  }\n  invoke(target, thisArg, args, additional) {\n    return this.invocationHook.invoke(target, thisArg, args, additional);\n  }\n  traceInvocation(operator, target, thisArg, args, additional, callbackIndex = -1) {\n    return traceInvocation(\n      this,\n      operator,\n      target,\n      thisArg,\n      args,\n      additional,\n      callbackIndex\n    );\n  }\n  subscribe(handlers) {\n    for (const eventName of traceEvents) {\n      const handler = handlers[eventName];\n      if (handler) {\n        this[eventName].subscribe(handler);\n      }\n    }\n  }\n  unsubscribe(handlers) {\n    let done = true;\n    for (const eventName of traceEvents) {\n      const handler = handlers[eventName];\n      if (handler && !this[eventName].unsubscribe(handler)) {\n        done = false;\n      }\n    }\n    return done;\n  }\n  traceSync(fn, message = {}, thisArg, ...args) {\n    if (!this.hasSubscribers) {\n      return Reflect.apply(fn, thisArg, args);\n    }\n    const context = message;\n    return this.start.runStores(message, () => {\n      try {\n        const result = Reflect.apply(fn, thisArg, args);\n        setContextValue(context, \"result\", result);\n        return result;\n      } catch (error) {\n        setContextValue(context, \"error\", error);\n        this.error.publish(message);\n        throw error;\n      } finally {\n        this.end.publish(message);\n      }\n    });\n  }\n  tracePromise(fn, message = {}, thisArg, ...args) {\n    if (!this.hasSubscribers) {\n      return Reflect.apply(fn, thisArg, args);\n    }\n    const context = message;\n    return this.start.runStores(message, () => {\n      let result;\n      try {\n        result = Reflect.apply(fn, thisArg, args);\n      } catch (error) {\n        setContextValue(context, \"error\", error);\n        this.error.publish(message);\n        this.end.publish(message);\n        throw error;\n      }\n      this.end.publish(message);\n      if (!result || typeof result !== \"object\" && typeof result !== \"function\") {\n        setContextValue(context, \"result\", result);\n        this.asyncStart.publish(message);\n        this.asyncEnd.publish(message);\n        return result;\n      }\n      let terminalPublished = false;\n      const finishUnobservedResult = (error) => {\n        reportError(error);\n        if (!terminalPublished) {\n          terminalPublished = true;\n          setContextValue(context, \"result\", result);\n          this.asyncStart.publish(message);\n          this.asyncEnd.publish(message);\n        }\n        return result;\n      };\n      let then;\n      try {\n        then = result.then;\n      } catch (error) {\n        return finishUnobservedResult(error);\n      }\n      if (typeof then !== \"function\") {\n        setContextValue(context, \"result\", result);\n        this.asyncStart.publish(message);\n        this.asyncEnd.publish(message);\n        return result;\n      }\n      const resolve = (resolved) => {\n        if (!terminalPublished) {\n          terminalPublished = true;\n          setContextValue(context, \"result\", resolved);\n          this.asyncStart.publish(message);\n          this.asyncEnd.publish(message);\n        }\n        return resolved;\n      };\n      let rejectionThrown = false;\n      let rejectionError;\n      const reject2 = (error) => {\n        if (!terminalPublished) {\n          terminalPublished = true;\n          setContextValue(context, \"error\", error);\n          this.error.publish(message);\n          this.asyncStart.publish(message);\n          this.asyncEnd.publish(message);\n        }\n        rejectionThrown = true;\n        rejectionError = error;\n        throw error;\n      };\n      let isPlainPromise;\n      try {\n        isPlainPromise = result instanceof Promise && result.constructor === Promise;\n      } catch (error) {\n        return finishUnobservedResult(error);\n      }\n      try {\n        if (isPlainPromise) {\n          return Reflect.apply(then, result, [resolve, reject2]);\n        }\n        Reflect.apply(then, result, [\n          resolve,\n          (error) => {\n            try {\n              reject2(error);\n            } catch {\n            }\n          }\n        ]);\n      } catch (error) {\n        if (rejectionThrown && error === rejectionError) {\n          return result;\n        }\n        return finishUnobservedResult(error);\n      }\n      return result;\n    });\n  }\n  traceCallback(fn, position = -1, message = {}, thisArg, ...args) {\n    if (!this.hasSubscribers) {\n      return Reflect.apply(fn, thisArg, args);\n    }\n    const context = message;\n    const callArgs = args.length > 0 ? args : context.arguments ?? args;\n    const callback = Array.prototype.at.call(callArgs, position);\n    if (typeof callback !== \"function\") {\n      return Reflect.apply(fn, thisArg, args);\n    }\n    const { asyncStart, asyncEnd, error: errorChannel } = this;\n    function wrappedCallback(error, result) {\n      if (error) {\n        setContextValue(context, \"error\", error);\n        errorChannel.publish(message);\n      } else {\n        setContextValue(context, \"result\", result);\n      }\n      return asyncStart.runStores(message, () => {\n        try {\n          return Reflect.apply(callback, this, arguments);\n        } finally {\n          asyncEnd.publish(message);\n        }\n      });\n    }\n    Array.prototype.splice.call(callArgs, position, 1, wrappedCallback);\n    return this.start.runStores(message, () => {\n      try {\n        return Reflect.apply(fn, thisArg, args);\n      } catch (error) {\n        setContextValue(context, \"error\", error);\n        this.error.publish(message);\n        throw error;\n      } finally {\n        this.end.publish(message);\n      }\n    });\n  }\n};\nvar inertChannel = Object.freeze({\n  name: \"braintrust:inert\",\n  hasSubscribers: false,\n  subscribe() {\n  },\n  unsubscribe() {\n    return false;\n  },\n  bindStore() {\n  },\n  unbindStore() {\n    return false;\n  },\n  publish() {\n  },\n  runStores(_message, fn, thisArg, ...args) {\n    return Reflect.apply(fn, thisArg, args);\n  }\n});\nvar inertTracingHook = new TracingHook({\n  start: inertChannel,\n  end: inertChannel,\n  asyncStart: inertChannel,\n  asyncEnd: inertChannel,\n  error: inertChannel\n});\nfunction isHookChannel(value) {\n  if (typeof value !== \"object\" && typeof value !== \"function\" || value === null) {\n    return false;\n  }\n  try {\n    const channel2 = value;\n    return typeof channel2.hasSubscribers === \"boolean\" && typeof channel2.subscribe === \"function\" && typeof channel2.unsubscribe === \"function\" && typeof channel2.bindStore === \"function\" && typeof channel2.unbindStore === \"function\" && typeof channel2.publish === \"function\" && typeof channel2.runStores === \"function\";\n  } catch {\n    return false;\n  }\n}\nfunction hasTracingHookShape(value) {\n  if (typeof value !== \"object\" && typeof value !== \"function\" || value === null) {\n    return false;\n  }\n  try {\n    const hook = value;\n    return typeof hook.hasSubscribers === \"boolean\" && typeof hook.subscribe === \"function\" && typeof hook.unsubscribe === \"function\" && typeof hook.traceSync === \"function\" && typeof hook.tracePromise === \"function\" && typeof hook.traceCallback === \"function\" && isHookChannel(hook.start) && isHookChannel(hook.end) && isHookChannel(hook.asyncStart) && isHookChannel(hook.asyncEnd) && isHookChannel(hook.error);\n  } catch {\n    return false;\n  }\n}\nfunction hasInvocationHookShape(value) {\n  if (typeof value !== \"object\" && typeof value !== \"function\" || value === null) {\n    return false;\n  }\n  try {\n    const hook = value;\n    return value[invocationHookBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION && typeof hook.hasInterceptors === \"boolean\" && typeof hook.intercept === \"function\" && typeof hook.invoke === \"function\";\n  } catch {\n    return false;\n  }\n}\nfunction installInvocationHook(value) {\n  const hasInvocationHook = hasInvocationHookShape(value);\n  const invocationHook = new InvocationHook();\n  try {\n    if (!hasInvocationHook) {\n      Object.defineProperties(value, {\n        [invocationHookBrand]: {\n          configurable: false,\n          enumerable: false,\n          value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,\n          writable: false\n        },\n        hasInterceptors: {\n          configurable: false,\n          enumerable: false,\n          get: () => invocationHook.hasInterceptors\n        },\n        intercept: {\n          configurable: false,\n          enumerable: false,\n          value: invocationHook.intercept.bind(invocationHook),\n          writable: false\n        },\n        invoke: {\n          configurable: false,\n          enumerable: false,\n          value: invocationHook.invoke.bind(invocationHook),\n          writable: false\n        }\n      });\n    }\n    if (typeof value.traceInvocation !== \"function\") {\n      Object.defineProperty(value, \"traceInvocation\", {\n        configurable: false,\n        enumerable: false,\n        value: traceInvocation.bind(void 0, value),\n        writable: false\n      });\n    }\n  } catch (error) {\n    reportError(error);\n  }\n}\nfunction isCompatibleTracingHook(value) {\n  try {\n    return value[hookBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION && hasTracingHookShape(value);\n  } catch {\n    return false;\n  }\n}\nfunction isCompatibleHookRegistry(value) {\n  try {\n    return value instanceof Map && value[registryBrand] === GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION;\n  } catch {\n    return false;\n  }\n}\nfunction getHookRegistry() {\n  let descriptor;\n  try {\n    descriptor = Object.getOwnPropertyDescriptor(\n      globalThis,\n      GLOBAL_INSTRUMENTATION_HOOKS_KEY\n    );\n  } catch (error) {\n    reportError(error);\n    return void 0;\n  }\n  if (descriptor && \"value\" in descriptor && isCompatibleHookRegistry(descriptor.value) && (descriptor.configurable || descriptor.enumerable === false)) {\n    if (descriptor.configurable || descriptor.writable) {\n      try {\n        Object.defineProperty(globalThis, GLOBAL_INSTRUMENTATION_HOOKS_KEY, {\n          configurable: false,\n          enumerable: false,\n          value: descriptor.value,\n          writable: false\n        });\n      } catch (error) {\n        reportError(error);\n        return void 0;\n      }\n    }\n    return descriptor.value;\n  }\n  if (descriptor && !descriptor.configurable) {\n    reportError(new Error(\"Incompatible global instrumentation hook registry\"));\n    return void 0;\n  }\n  const registry2 = /* @__PURE__ */ new Map();\n  try {\n    Object.defineProperty(registry2, registryBrand, {\n      configurable: false,\n      enumerable: false,\n      value: GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION,\n      writable: false\n    });\n  } catch (error) {\n    reportError(error);\n    return void 0;\n  }\n  try {\n    Object.defineProperty(globalThis, GLOBAL_INSTRUMENTATION_HOOKS_KEY, {\n      configurable: false,\n      enumerable: false,\n      value: registry2,\n      writable: false\n    });\n    return registry2;\n  } catch (error) {\n    reportError(error);\n    return void 0;\n  }\n}\nfunction newGlobalTracingChannel(nameOrChannels) {\n  if (typeof nameOrChannels !== \"string\") {\n    return new TracingHook(nameOrChannels);\n  }\n  const registry2 = getHookRegistry();\n  if (!registry2) {\n    return inertTracingHook;\n  }\n  let existing;\n  try {\n    existing = Map.prototype.get.call(registry2, nameOrChannels);\n  } catch (error) {\n    reportError(error);\n    return inertTracingHook;\n  }\n  if (isCompatibleTracingHook(existing)) {\n    installInvocationHook(existing);\n    return existing;\n  }\n  if (existing !== void 0) {\n    reportError(\n      new Error(`Invalid global instrumentation hook: ${nameOrChannels}`)\n    );\n    try {\n      Map.prototype.delete.call(registry2, nameOrChannels);\n    } catch (error) {\n      reportError(error);\n      return inertTracingHook;\n    }\n  }\n  const hook = new TracingHook(nameOrChannels);\n  try {\n    Map.prototype.set.call(registry2, nameOrChannels, hook);\n  } catch (error) {\n    reportError(error);\n    return inertTracingHook;\n  }\n  return hook;\n}\n\n// src/isomorph.ts\nvar DefaultAsyncLocalStorage = class {\n  constructor() {\n  }\n  run(_, callback) {\n    return callback();\n  }\n  getStore() {\n    return void 0;\n  }\n};\nvar iso = {\n  buildType: \"unknown\",\n  // Will be set by configureBrowser() or configureNode()\n  getRepoInfo: async (_settings) => void 0,\n  getPastNAncestors: async () => [],\n  getEnv: (_name) => void 0,\n  getBraintrustApiKey: async () => void 0,\n  getCallerLocation: () => void 0,\n  newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  newTracingChannel: (nameOrChannels) => newGlobalTracingChannel(nameOrChannels),\n  processOn: (_0, _1) => {\n  },\n  basename: (filepath) => filepath.split(/[\\\\/]/).pop() || filepath,\n  // eslint-disable-next-line no-restricted-properties -- preserving intentional console usage.\n  writeln: (text) => console.log(text)\n};\nvar isomorph_default = iso;\n\n// src/logger.ts\nvar import_uuid2 = require(\"uuid\");\n\n// src/debug-logger.ts\nvar PREFIX = \"[braintrust]\";\nvar DEBUG_LOG_LEVEL_SYMBOL = /* @__PURE__ */ Symbol.for(\"braintrust-debug-log-level\");\nvar LOG_LEVEL_PRIORITY = {\n  error: 0,\n  warn: 1,\n  info: 2,\n  debug: 3\n};\nvar hasWarnedAboutInvalidEnvValue = false;\nvar debugLogStateResolver = void 0;\nfunction warnInvalidEnvValue(value) {\n  if (hasWarnedAboutInvalidEnvValue) {\n    return;\n  }\n  hasWarnedAboutInvalidEnvValue = true;\n  console.warn(\n    PREFIX,\n    `Invalid BRAINTRUST_DEBUG_LOG_LEVEL value \"${value}\". Expected \"error\", \"warn\", \"info\", or \"debug\".`\n  );\n}\nfunction normalizeDebugLogLevelOption(option) {\n  if (option === false) {\n    return void 0;\n  }\n  if (option === \"error\" || option === \"warn\" || option === \"info\" || option === \"debug\") {\n    return option;\n  }\n  throw new Error(\n    `Invalid debugLogLevel value \"${option}\". Expected false, \"error\", \"warn\", \"info\", or \"debug\".`\n  );\n}\nfunction parseDebugLogLevelEnv(value) {\n  if (!value) {\n    return void 0;\n  }\n  if (value === \"error\" || value === \"warn\" || value === \"info\" || value === \"debug\") {\n    return value;\n  }\n  warnInvalidEnvValue(value);\n  return void 0;\n}\nfunction getEnvDebugLogLevel() {\n  return parseDebugLogLevelEnv(isomorph_default.getEnv(\"BRAINTRUST_DEBUG_LOG_LEVEL\"));\n}\nfunction setGlobalDebugLogLevel(level) {\n  globalThis[DEBUG_LOG_LEVEL_SYMBOL] = level;\n}\nfunction resetDebugLoggerForTests() {\n  hasWarnedAboutInvalidEnvValue = false;\n  setGlobalDebugLogLevel(void 0);\n}\nfunction setDebugLogStateResolver(resolver) {\n  debugLogStateResolver = resolver;\n}\nfunction resolveDebugLogLevel(state) {\n  const stateLevel = state?.getDebugLogLevel?.();\n  const hasStateOverride = state?.hasDebugLogLevelOverride?.() ?? false;\n  if (hasStateOverride) {\n    return stateLevel;\n  }\n  const globalLevel = (\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    globalThis[DEBUG_LOG_LEVEL_SYMBOL]\n  );\n  if (globalLevel !== void 0) {\n    return globalLevel === false ? void 0 : globalLevel;\n  }\n  return getEnvDebugLogLevel();\n}\nfunction emit(method, state, args) {\n  const level = resolveDebugLogLevel(state);\n  if (!level || LOG_LEVEL_PRIORITY[method] > LOG_LEVEL_PRIORITY[level]) {\n    return;\n  }\n  if (method === \"info\") {\n    console.log(PREFIX, ...args);\n  } else if (method === \"debug\") {\n    console.debug(PREFIX, ...args);\n  } else if (method === \"warn\") {\n    console.warn(PREFIX, ...args);\n  } else {\n    console.error(PREFIX, ...args);\n  }\n}\nfunction createDebugLogger(state) {\n  const resolveState = () => state ?? debugLogStateResolver?.();\n  return {\n    info(...args) {\n      emit(\"info\", resolveState(), args);\n    },\n    debug(...args) {\n      emit(\"debug\", resolveState(), args);\n    },\n    warn(...args) {\n      emit(\"warn\", resolveState(), args);\n    },\n    error(...args) {\n      emit(\"error\", resolveState(), args);\n    }\n  };\n}\nvar debugLogger = {\n  ...createDebugLogger(),\n  forState(state) {\n    return createDebugLogger(state);\n  }\n};\nsetGlobalHookErrorReporter((error) => {\n  debugLogger.error(\"Global instrumentation hook error:\", error);\n});\n\n// src/queue.ts\nvar DEFAULT_QUEUE_SIZE = 15e3;\nvar Queue = class {\n  items = [];\n  maxSize;\n  enforceSizeLimit = false;\n  constructor(maxSize) {\n    if (maxSize < 1) {\n      debugLogger.warn(\n        `maxSize ${maxSize} is <1, using default ${DEFAULT_QUEUE_SIZE}`\n      );\n      maxSize = DEFAULT_QUEUE_SIZE;\n    }\n    this.maxSize = maxSize;\n  }\n  /**\n   * Set queue size limit enforcement. When enabled, the queue will drop new items\n   * when it reaches maxSize. When disabled (default), the queue can grow unlimited.\n   */\n  enforceQueueSizeLimit(enforce) {\n    this.enforceSizeLimit = enforce;\n  }\n  push(...items) {\n    const dropped = [];\n    for (const item of items) {\n      if (!this.enforceSizeLimit) {\n        this.items.push(item);\n      } else {\n        if (this.items.length >= this.maxSize) {\n          dropped.push(item);\n        } else {\n          this.items.push(item);\n        }\n      }\n    }\n    return dropped;\n  }\n  peek() {\n    return this.items[0];\n  }\n  drain() {\n    const items = [...this.items];\n    this.items = [];\n    return items;\n  }\n  drainWhile(predicate) {\n    let end = 0;\n    while (end < this.items.length && predicate(this.items[end])) {\n      end++;\n    }\n    const items = this.items.slice(0, end);\n    this.items = this.items.slice(end);\n    return items;\n  }\n  clear() {\n    this.items = [];\n  }\n  length() {\n    return this.items.length;\n  }\n  get capacity() {\n    return this.maxSize;\n  }\n};\n\n// src/id-gen.ts\nvar import_uuid = require(\"uuid\");\nvar IDGenerator = class {\n};\nvar UUIDGenerator = class extends IDGenerator {\n  getSpanId() {\n    return (0, import_uuid.v4)();\n  }\n  getTraceId() {\n    return (0, import_uuid.v4)();\n  }\n  shareRootSpanId() {\n    return true;\n  }\n};\nfunction generateHexId(bytes) {\n  let result = \"\";\n  for (let i = 0; i < bytes; i++) {\n    result += Math.floor(Math.random() * 256).toString(16).padStart(2, \"0\");\n  }\n  return result;\n}\nvar OTELIDGenerator = class extends IDGenerator {\n  getSpanId() {\n    return generateHexId(8);\n  }\n  getTraceId() {\n    return generateHexId(16);\n  }\n  shareRootSpanId() {\n    return false;\n  }\n};\nfunction parseEnvBool(name) {\n  const raw = isomorph_default.getEnv(name);\n  if (raw === void 0 || raw === null) {\n    return false;\n  }\n  const normalized = raw.trim().toLowerCase();\n  return normalized === \"true\" || normalized === \"1\" || normalized === \"yes\" || normalized === \"y\" || normalized === \"on\";\n}\nfunction isOtelCompatMode() {\n  return parseEnvBool(\"BRAINTRUST_OTEL_COMPAT\") || globalThis.BRAINTRUST_CONTEXT_MANAGER !== void 0 || globalThis.BRAINTRUST_ID_GENERATOR !== void 0;\n}\nvar _warnedLegacyUuidConflict = false;\nfunction resolveUseLegacyUuidIds() {\n  const legacy = parseEnvBool(\"BRAINTRUST_LEGACY_IDS\");\n  if (parseEnvBool(\"BRAINTRUST_OTEL_COMPAT\")) {\n    if (legacy && !_warnedLegacyUuidConflict) {\n      _warnedLegacyUuidConflict = true;\n      debugLogger.warn(\n        \"BRAINTRUST_LEGACY_IDS is ignored because BRAINTRUST_OTEL_COMPAT requires OpenTelemetry-compatible hex span IDs. Using hex IDs.\"\n      );\n    }\n    return false;\n  }\n  return legacy;\n}\nfunction getIdGenerator() {\n  if (globalThis.BRAINTRUST_ID_GENERATOR !== void 0) {\n    return new globalThis.BRAINTRUST_ID_GENERATOR();\n  }\n  return resolveUseLegacyUuidIds() ? new UUIDGenerator() : new OTELIDGenerator();\n}\n\n// src/propagation.ts\nvar TRACEPARENT_HEADER = \"traceparent\";\nvar TRACESTATE_HEADER = \"tracestate\";\nvar BAGGAGE_HEADER = \"baggage\";\nvar BRAINTRUST_PARENT_KEY = \"braintrust.parent\";\nvar DEFAULT_TRACE_FLAGS = \"01\";\nvar TRACEPARENT_RE = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;\nvar ZERO_TRACE_ID = \"0\".repeat(32);\nvar ZERO_SPAN_ID = \"0\".repeat(16);\nvar MAX_BAGGAGE_LENGTH = 8192;\nvar MAX_BAGGAGE_MEMBERS = 64;\nvar _utf8Encoder = new TextEncoder();\nfunction utf8ByteLength(value) {\n  return _utf8Encoder.encode(value).length;\n}\nfunction capBaggageToMemberBoundary(value) {\n  const totalBytes = utf8ByteLength(value);\n  const withinBytes = totalBytes <= MAX_BAGGAGE_LENGTH;\n  let commaCount = 0;\n  for (let i = 0; i < value.length; i++) {\n    if (value.charCodeAt(i) === 44) {\n      commaCount++;\n    }\n  }\n  const withinMembers = commaCount < MAX_BAGGAGE_MEMBERS;\n  if (withinBytes && withinMembers) {\n    return value;\n  }\n  const kept = [];\n  let length = 0;\n  for (const rawMember of value.split(\",\")) {\n    if (kept.length >= MAX_BAGGAGE_MEMBERS) {\n      break;\n    }\n    const cost = utf8ByteLength(rawMember) + (kept.length ? 1 : 0);\n    if (length + cost > MAX_BAGGAGE_LENGTH) {\n      break;\n    }\n    kept.push(rawMember);\n    length += cost;\n  }\n  if (!kept.length) {\n    return \"\";\n  }\n  return kept.join(\",\");\n}\nfunction isTraceContextHeaderTupleArray(value) {\n  return Array.isArray(value) && value.every(\n    (item) => Array.isArray(item) && typeof item[0] === \"string\" && typeof item[1] === \"string\"\n  );\n}\nfunction isListHeader(name) {\n  const lowered = name.toLowerCase();\n  return lowered === BAGGAGE_HEADER || lowered === TRACESTATE_HEADER;\n}\nfunction headerValueToString(value, name) {\n  if (value === void 0 || value === null) {\n    return void 0;\n  }\n  if (Array.isArray(value)) {\n    const stringValues = value.filter((item) => {\n      return typeof item === \"string\";\n    });\n    if (!stringValues.length) {\n      return void 0;\n    }\n    return isListHeader(name) ? stringValues.join(\",\") : stringValues[0];\n  }\n  return typeof value === \"string\" ? value : String(value);\n}\nfunction getHeader(headers, name) {\n  if (!headers) {\n    return void 0;\n  }\n  if (isTraceContextHeaderTupleArray(headers)) {\n    const lowered2 = name.toLowerCase();\n    const matches = headers.filter(([key]) => key.toLowerCase() === lowered2).map(([, value]) => value);\n    if (!matches.length) {\n      return void 0;\n    }\n    return headerValueToString(matches, name);\n  }\n  const getter = headers.get;\n  if (typeof getter === \"function\") {\n    try {\n      const value = headerValueToString(getter.call(headers, name), name);\n      if (value !== void 0) {\n        return value;\n      }\n    } catch {\n    }\n  }\n  const nodeGetter = headers.getHeader;\n  if (typeof nodeGetter === \"function\") {\n    try {\n      const value = headerValueToString(nodeGetter.call(headers, name), name);\n      if (value !== void 0) {\n        return value;\n      }\n    } catch {\n    }\n  }\n  const headerBag = headers;\n  const exact = headerValueToString(headerBag[name], name);\n  if (exact !== void 0) {\n    return exact;\n  }\n  const lowered = name.toLowerCase();\n  for (const key of Object.keys(headers)) {\n    if (key !== name && key.toLowerCase() === lowered) {\n      const value = headerValueToString(headerBag[key], name);\n      if (value !== void 0) {\n        return value;\n      }\n    }\n  }\n  return void 0;\n}\nfunction isHex(value, length) {\n  if (typeof value !== \"string\" || value.length !== length) {\n    return false;\n  }\n  for (let i = 0; i < value.length; i++) {\n    const c = value[i];\n    const isDigit = c >= \"0\" && c <= \"9\";\n    const isLowerHex = c >= \"a\" && c <= \"f\";\n    if (!isDigit && !isLowerHex) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction parseTraceparent(value) {\n  if (!value || typeof value !== \"string\") {\n    return void 0;\n  }\n  const match = TRACEPARENT_RE.exec(value.trim());\n  if (!match) {\n    return void 0;\n  }\n  const traceId = match[1];\n  const spanId = match[2];\n  const traceFlags = match[3];\n  if (traceId === ZERO_TRACE_ID || spanId === ZERO_SPAN_ID) {\n    return void 0;\n  }\n  return { traceId, spanId, traceFlags };\n}\nfunction formatTraceparent(traceId, spanId, traceFlags = DEFAULT_TRACE_FLAGS) {\n  if (!isHex(traceId, 32) || traceId === ZERO_TRACE_ID) {\n    return void 0;\n  }\n  if (!isHex(spanId, 16) || spanId === ZERO_SPAN_ID) {\n    return void 0;\n  }\n  const flags = isHex(traceFlags, 2) ? traceFlags : DEFAULT_TRACE_FLAGS;\n  return `00-${traceId}-${spanId}-${flags}`;\n}\nfunction percentEncode(value) {\n  return encodeURIComponent(value);\n}\nfunction percentDecode(value) {\n  if (!value.includes(\"%\")) {\n    return value;\n  }\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return value;\n  }\n}\nfunction parseBaggage(value) {\n  const result = {};\n  if (!value || typeof value !== \"string\") {\n    return result;\n  }\n  const bounded = capBaggageToMemberBoundary(value);\n  for (let member of bounded.split(\",\")) {\n    member = member.trim();\n    if (!member || !member.includes(\"=\")) {\n      continue;\n    }\n    member = member.split(\";\", 1)[0];\n    const eq = member.indexOf(\"=\");\n    const key = percentDecode(member.slice(0, eq).trim());\n    const val = member.slice(eq + 1).trim();\n    if (!key) {\n      continue;\n    }\n    result[key] = percentDecode(val);\n  }\n  return result;\n}\nfunction mergeBaggage(existing, braintrustParent) {\n  let btMember = void 0;\n  if (braintrustParent) {\n    const encodedKey = percentEncode(BRAINTRUST_PARENT_KEY);\n    const encodedVal = percentEncode(String(braintrustParent));\n    btMember = `${encodedKey}=${encodedVal}`;\n    if (utf8ByteLength(btMember) > MAX_BAGGAGE_LENGTH) {\n      btMember = void 0;\n    }\n  }\n  let byteBudget = MAX_BAGGAGE_LENGTH;\n  let memberBudget = MAX_BAGGAGE_MEMBERS;\n  if (btMember !== void 0) {\n    byteBudget -= utf8ByteLength(btMember) + 1;\n    memberBudget -= 1;\n  }\n  const relayed = [];\n  let length = 0;\n  if (existing && typeof existing === \"string\") {\n    for (const rawMember of existing.split(\",\")) {\n      const member = rawMember.trim();\n      if (!member || !member.includes(\"=\")) {\n        continue;\n      }\n      const keyPart = member.split(\";\", 1)[0].split(\"=\", 1)[0];\n      const key = percentDecode(keyPart.trim());\n      if (key === BRAINTRUST_PARENT_KEY) {\n        continue;\n      }\n      if (relayed.length >= memberBudget) {\n        break;\n      }\n      const cost = utf8ByteLength(member) + (relayed.length ? 1 : 0);\n      if (length + cost > byteBudget) {\n        break;\n      }\n      relayed.push(member);\n      length += cost;\n    }\n  }\n  const members = btMember !== void 0 ? [...relayed, btMember] : relayed;\n  if (!members.length) {\n    return void 0;\n  }\n  return members.join(\",\");\n}\n\n// util/db_fields.ts\nvar TRANSACTION_ID_FIELD = \"_xact_id\";\nvar OBJECT_DELETE_FIELD = \"_object_delete\";\nvar ID_FIELD = \"id\";\nvar IS_MERGE_FIELD = \"_is_merge\";\nvar MERGE_PATHS_FIELD = \"_merge_paths\";\nvar ARRAY_DELETE_FIELD = \"_array_delete\";\nvar AUDIT_SOURCE_FIELD = \"_audit_source\";\nvar AUDIT_METADATA_FIELD = \"_audit_metadata\";\nvar VALID_SOURCES = [\"app\", \"api\", \"external\"];\nvar PARENT_ID_FIELD = \"_parent_id\";\nvar OBJECT_ID_KEYS = [\n  \"experiment_id\",\n  \"dataset_id\",\n  \"prompt_session_id\",\n  \"project_id\",\n  \"log_id\",\n  \"function_data\"\n];\n\n// util/span_identifier_v3.ts\nvar uuid3 = __toESM(require(\"uuid\"));\n\n// util/span_identifier_v2.ts\nvar uuid2 = __toESM(require(\"uuid\"));\n\n// util/span_identifier_v1.ts\nvar uuid = __toESM(require(\"uuid\"));\nvar import_v3 = require(\"zod/v3\");\nfunction tryMakeUuid(s) {\n  try {\n    const ret = uuid.parse(s);\n    if (ret.length !== 16) {\n      throw new Error();\n    }\n    return { bytes: Buffer.from(ret), isUUID: true };\n  } catch (e) {\n    return { bytes: Buffer.from(s, \"utf-8\"), isUUID: false };\n  }\n}\nvar ENCODING_VERSION_NUMBER = 1;\nvar INVALID_ENCODING_ERRMSG = \"SpanComponents string is not properly encoded. This may be due to a version mismatch between the SDK library used to export the span and the library used to decode it. Please make sure you are using the same SDK version across the board\";\nvar SpanObjectTypeV1 = /* @__PURE__ */ ((SpanObjectTypeV12) => {\n  SpanObjectTypeV12[SpanObjectTypeV12[\"EXPERIMENT\"] = 1] = \"EXPERIMENT\";\n  SpanObjectTypeV12[SpanObjectTypeV12[\"PROJECT_LOGS\"] = 2] = \"PROJECT_LOGS\";\n  return SpanObjectTypeV12;\n})(SpanObjectTypeV1 || {});\nvar SpanObjectTypeV1EnumSchema = import_v3.z.nativeEnum(SpanObjectTypeV1);\nvar SpanRowIdsV1 = class {\n  rowId;\n  spanId;\n  rootSpanId;\n  constructor(args) {\n    this.rowId = args.rowId;\n    this.spanId = args.spanId;\n    this.rootSpanId = args.rootSpanId;\n    if (!this.rowId) {\n      throw new Error(\"rowId must be nonempty string\");\n    }\n    if (!this.spanId) {\n      throw new Error(\"spanId must be nonempty string\");\n    }\n    if (!this.rootSpanId) {\n      throw new Error(\"rootSpanId must be nonempty string\");\n    }\n  }\n  toObject() {\n    return {\n      rowId: this.rowId,\n      spanId: this.spanId,\n      rootSpanId: this.rootSpanId\n    };\n  }\n};\nvar SpanComponentsV1 = class _SpanComponentsV1 {\n  objectType;\n  objectId;\n  rowIds;\n  constructor(args) {\n    this.objectType = args.objectType;\n    this.objectId = args.objectId;\n    this.rowIds = args.rowIds;\n  }\n  toStr() {\n    const allBuffers = [];\n    const { bytes: rowIdBytes, isUUID: rowIdIsUUID } = this.rowIds ? tryMakeUuid(this.rowIds.rowId) : { bytes: Buffer.from(\"\"), isUUID: false };\n    allBuffers.push(\n      Buffer.from([\n        ENCODING_VERSION_NUMBER,\n        this.objectType,\n        this.rowIds ? 1 : 0,\n        rowIdIsUUID ? 1 : 0\n      ])\n    );\n    const { bytes: objectIdBytes, isUUID: objectIdIsUUID } = tryMakeUuid(\n      this.objectId\n    );\n    if (!objectIdIsUUID) {\n      throw new Error(\"object_id component must be a valid UUID\");\n    }\n    allBuffers.push(objectIdBytes);\n    if (this.rowIds) {\n      const { bytes: spanIdBytes, isUUID: spanIdIsUUID } = tryMakeUuid(\n        this.rowIds.spanId\n      );\n      if (!spanIdIsUUID) {\n        throw new Error(\"span_id component must be a valid UUID\");\n      }\n      const { bytes: rootSpanIdBytes, isUUID: rootSpanIdIsUUID } = tryMakeUuid(\n        this.rowIds.rootSpanId\n      );\n      if (!rootSpanIdIsUUID) {\n        throw new Error(\"root_span_id component must be a valid UUID\");\n      }\n      allBuffers.push(spanIdBytes, rootSpanIdBytes, rowIdBytes);\n    }\n    return Buffer.concat(allBuffers).toString(\"base64\");\n  }\n  static fromStr(s) {\n    try {\n      const rawBytes = Buffer.from(s, \"base64\");\n      if (rawBytes[0] !== ENCODING_VERSION_NUMBER) {\n        throw new Error();\n      }\n      const objectType = SpanObjectTypeV1EnumSchema.parse(rawBytes[1]);\n      if (![0, 1].includes(rawBytes[2])) {\n        throw new Error();\n      }\n      if (![0, 1].includes(rawBytes[3])) {\n        throw new Error();\n      }\n      const hasRowId = rawBytes[2] == 1;\n      const rowIdIsUUID = rawBytes[3] == 1;\n      const objectId = uuid.stringify(rawBytes.subarray(4, 20));\n      const rowIds = (() => {\n        if (!hasRowId) {\n          return void 0;\n        }\n        const spanId = uuid.stringify(rawBytes.subarray(20, 36));\n        const rootSpanId = uuid.stringify(rawBytes.subarray(36, 52));\n        const rowId = rowIdIsUUID ? uuid.stringify(rawBytes.subarray(52)) : rawBytes.subarray(52).toString(\"utf-8\");\n        return new SpanRowIdsV1({ rowId, spanId, rootSpanId });\n      })();\n      return new _SpanComponentsV1({ objectType, objectId, rowIds });\n    } catch (e) {\n      throw new Error(INVALID_ENCODING_ERRMSG);\n    }\n  }\n  objectIdFields() {\n    switch (this.objectType) {\n      case 1 /* EXPERIMENT */:\n        return { experiment_id: this.objectId };\n      case 2 /* PROJECT_LOGS */:\n        return { project_id: this.objectId, log_id: \"g\" };\n      default:\n        throw new Error(\"Impossible\");\n    }\n  }\n  toObject() {\n    return {\n      objectType: this.objectType,\n      objectId: this.objectId,\n      rowIds: this.rowIds?.toObject()\n    };\n  }\n};\n\n// util/span_identifier_v2.ts\nvar import_v32 = require(\"zod/v3\");\nfunction tryMakeUuid2(s) {\n  try {\n    const ret = uuid2.parse(s);\n    if (ret.length !== 16) {\n      throw new Error();\n    }\n    return { bytes: Buffer.from(ret), isUUID: true };\n  } catch (e) {\n    return { bytes: Buffer.from(s, \"utf-8\"), isUUID: false };\n  }\n}\nvar ENCODING_VERSION_NUMBER2 = 2;\nvar INVALID_ENCODING_ERRMSG2 = `SpanComponents string is not properly encoded. This library only supports encoding versions up to ${ENCODING_VERSION_NUMBER2}. Please make sure the SDK library used to decode the SpanComponents is at least as new as any library used to encode it.`;\nvar INTEGER_ENCODING_NUM_BYTES = 4;\nvar SpanObjectTypeV2 = /* @__PURE__ */ ((SpanObjectTypeV22) => {\n  SpanObjectTypeV22[SpanObjectTypeV22[\"EXPERIMENT\"] = 1] = \"EXPERIMENT\";\n  SpanObjectTypeV22[SpanObjectTypeV22[\"PROJECT_LOGS\"] = 2] = \"PROJECT_LOGS\";\n  return SpanObjectTypeV22;\n})(SpanObjectTypeV2 || {});\nvar SpanObjectTypeV2EnumSchema = import_v32.z.nativeEnum(SpanObjectTypeV2);\nvar SpanRowIdsV2 = class {\n  rowId;\n  spanId;\n  rootSpanId;\n  constructor(args) {\n    this.rowId = args.rowId;\n    this.spanId = args.spanId;\n    this.rootSpanId = args.rootSpanId;\n    if (!this.rowId) {\n      throw new Error(\"rowId must be nonempty string\");\n    }\n    if (!this.spanId) {\n      throw new Error(\"spanId must be nonempty string\");\n    }\n    if (!this.rootSpanId) {\n      throw new Error(\"rootSpanId must be nonempty string\");\n    }\n  }\n  toObject() {\n    return {\n      rowId: this.rowId,\n      spanId: this.spanId,\n      rootSpanId: this.rootSpanId\n    };\n  }\n};\nvar SpanComponentsV2 = class _SpanComponentsV2 {\n  objectType;\n  objectId;\n  computeObjectMetadataArgs;\n  rowIds;\n  constructor(args) {\n    this.objectType = args.objectType;\n    this.objectId = args.objectId;\n    this.computeObjectMetadataArgs = args.computeObjectMetadataArgs;\n    this.rowIds = args.rowIds;\n    if (!(this.objectId || this.computeObjectMetadataArgs)) {\n      throw new Error(\n        \"Must provide either objectId or computeObjectMetadataArgs\"\n      );\n    }\n  }\n  toStr() {\n    const allBuffers = [];\n    const { bytes: rowIdBytes, isUUID: rowIdIsUUID } = this.rowIds ? tryMakeUuid2(this.rowIds.rowId) : { bytes: Buffer.from(\"\"), isUUID: false };\n    allBuffers.push(\n      Buffer.from([\n        ENCODING_VERSION_NUMBER2,\n        this.objectType,\n        this.objectId ? 1 : 0,\n        this.computeObjectMetadataArgs ? 1 : 0,\n        this.rowIds ? 1 : 0,\n        rowIdIsUUID ? 1 : 0\n      ])\n    );\n    if (this.objectId) {\n      const { bytes: objectIdBytes, isUUID: objectIdIsUUID } = tryMakeUuid2(\n        this.objectId\n      );\n      if (!objectIdIsUUID) {\n        throw new Error(\"object_id component must be a valid UUID\");\n      }\n      allBuffers.push(objectIdBytes);\n    }\n    if (this.computeObjectMetadataArgs) {\n      const computeObjectMetadataBytes = Buffer.from(\n        JSON.stringify(this.computeObjectMetadataArgs),\n        \"utf-8\"\n      );\n      const serializedLenBytes = Buffer.alloc(INTEGER_ENCODING_NUM_BYTES);\n      serializedLenBytes.writeInt32BE(computeObjectMetadataBytes.length);\n      allBuffers.push(serializedLenBytes, computeObjectMetadataBytes);\n    }\n    if (this.rowIds) {\n      const { bytes: spanIdBytes, isUUID: spanIdIsUUID } = tryMakeUuid2(\n        this.rowIds.spanId\n      );\n      if (!spanIdIsUUID) {\n        throw new Error(\"span_id component must be a valid UUID\");\n      }\n      const { bytes: rootSpanIdBytes, isUUID: rootSpanIdIsUUID } = tryMakeUuid2(\n        this.rowIds.rootSpanId\n      );\n      if (!rootSpanIdIsUUID) {\n        throw new Error(\"root_span_id component must be a valid UUID\");\n      }\n      allBuffers.push(spanIdBytes, rootSpanIdBytes, rowIdBytes);\n    }\n    return Buffer.concat(allBuffers).toString(\"base64\");\n  }\n  static fromStr(s) {\n    try {\n      const rawBytes = Buffer.from(s, \"base64\");\n      if (rawBytes[0] < ENCODING_VERSION_NUMBER2) {\n        const spanComponentsOld = SpanComponentsV1.fromStr(s);\n        return new _SpanComponentsV2({\n          objectType: SpanObjectTypeV2EnumSchema.parse(\n            spanComponentsOld.objectType\n          ),\n          objectId: spanComponentsOld.objectId,\n          rowIds: spanComponentsOld.rowIds ? new SpanRowIdsV2({\n            rowId: spanComponentsOld.rowIds.rowId,\n            spanId: spanComponentsOld.rowIds.spanId,\n            rootSpanId: spanComponentsOld.rowIds.rootSpanId\n          }) : void 0\n        });\n      }\n      if (rawBytes[0] !== ENCODING_VERSION_NUMBER2) {\n        throw new Error();\n      }\n      const objectType = SpanObjectTypeV2EnumSchema.parse(rawBytes[1]);\n      for (let i = 2; i < 6; ++i) {\n        if (![0, 1].includes(rawBytes[i])) {\n          throw new Error();\n        }\n      }\n      const hasObjectId = rawBytes[2] == 1;\n      const hasComputeObjectMetadataArgs = rawBytes[3] == 1;\n      const hasRowId = rawBytes[4] == 1;\n      const rowIdIsUUID = rawBytes[5] == 1;\n      let byteCursor = 6;\n      let objectId = void 0;\n      if (hasObjectId) {\n        const nextByteCursor = byteCursor + 16;\n        objectId = uuid2.stringify(\n          rawBytes.subarray(byteCursor, nextByteCursor)\n        );\n        byteCursor = nextByteCursor;\n      }\n      let computeObjectMetadataArgs;\n      if (hasComputeObjectMetadataArgs) {\n        let nextByteCursor = byteCursor + INTEGER_ENCODING_NUM_BYTES;\n        const serializedLenBytes = rawBytes.readInt32BE(byteCursor);\n        byteCursor = nextByteCursor;\n        nextByteCursor = byteCursor + serializedLenBytes;\n        computeObjectMetadataArgs = JSON.parse(\n          rawBytes.subarray(byteCursor, nextByteCursor).toString(\"utf-8\")\n        );\n        byteCursor = nextByteCursor;\n      }\n      const rowIds = (() => {\n        if (!hasRowId) {\n          return void 0;\n        }\n        let nextByteCursor = byteCursor + 16;\n        const spanId = uuid2.stringify(\n          rawBytes.subarray(byteCursor, nextByteCursor)\n        );\n        byteCursor = nextByteCursor;\n        nextByteCursor = byteCursor + 16;\n        const rootSpanId = uuid2.stringify(\n          rawBytes.subarray(byteCursor, nextByteCursor)\n        );\n        byteCursor = nextByteCursor;\n        const rowId = rowIdIsUUID ? uuid2.stringify(rawBytes.subarray(byteCursor)) : rawBytes.subarray(byteCursor).toString(\"utf-8\");\n        return new SpanRowIdsV2({ rowId, spanId, rootSpanId });\n      })();\n      return new _SpanComponentsV2({\n        objectType,\n        objectId,\n        computeObjectMetadataArgs,\n        rowIds\n      });\n    } catch (e) {\n      throw new Error(INVALID_ENCODING_ERRMSG2);\n    }\n  }\n  objectIdFields() {\n    if (!this.objectId) {\n      throw new Error(\n        \"Impossible: cannot invoke `object_id_fields` unless SpanComponentsV2 is initialized with an `object_id`\"\n      );\n    }\n    switch (this.objectType) {\n      case 1 /* EXPERIMENT */:\n        return { experiment_id: this.objectId };\n      case 2 /* PROJECT_LOGS */:\n        return { project_id: this.objectId, log_id: \"g\" };\n      default:\n        throw new Error(\"Impossible\");\n    }\n  }\n  toObject() {\n    return {\n      objectType: this.objectType,\n      objectId: this.objectId,\n      computeObjectMetadataArgs: this.computeObjectMetadataArgs,\n      rowIds: this.rowIds?.toObject()\n    };\n  }\n};\n\n// util/span_identifier_v3.ts\nvar import_v33 = require(\"zod/v3\");\n\n// util/bytes.ts\nfunction concatUint8Arrays(...arrays) {\n  const totalLength = arrays.reduce((acc, arr) => acc + arr.length, 0);\n  const result = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const arr of arrays) {\n    result.set(arr, offset);\n    offset += arr.length;\n  }\n  return result;\n}\nfunction uint8ArrayToBase64(uint8Array) {\n  let binary = \"\";\n  for (let i = 0; i < uint8Array.length; i++) {\n    binary += String.fromCharCode(uint8Array[i]);\n  }\n  return btoa(binary);\n}\nfunction base64ToUint8Array(base64) {\n  const binary = atob(base64);\n  const uint8Array = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    uint8Array[i] = binary.charCodeAt(i);\n  }\n  return uint8Array;\n}\nfunction uint8ArrayToString(uint8Array) {\n  const decoder2 = new TextDecoder(\"utf-8\");\n  return decoder2.decode(uint8Array);\n}\nfunction stringToUint8Array(str) {\n  const encoder2 = new TextEncoder();\n  return encoder2.encode(str);\n}\n\n// util/span_identifier_v3.ts\nfunction tryMakeUuid3(s) {\n  try {\n    const ret = uuid3.parse(s);\n    if (ret.length !== 16) {\n      throw new Error();\n    }\n    return { bytes: new Uint8Array(ret), isUUID: true };\n  } catch {\n    return { bytes: void 0, isUUID: false };\n  }\n}\nvar ENCODING_VERSION_NUMBER3 = 3;\nvar INVALID_ENCODING_ERRMSG3 = `SpanComponents string is not properly encoded. This library only supports encoding versions up to ${ENCODING_VERSION_NUMBER3}. Please make sure the SDK library used to decode the SpanComponents is at least as new as any library used to encode it.`;\nvar SpanObjectTypeV3 = /* @__PURE__ */ ((SpanObjectTypeV32) => {\n  SpanObjectTypeV32[SpanObjectTypeV32[\"EXPERIMENT\"] = 1] = \"EXPERIMENT\";\n  SpanObjectTypeV32[SpanObjectTypeV32[\"PROJECT_LOGS\"] = 2] = \"PROJECT_LOGS\";\n  SpanObjectTypeV32[SpanObjectTypeV32[\"PLAYGROUND_LOGS\"] = 3] = \"PLAYGROUND_LOGS\";\n  return SpanObjectTypeV32;\n})(SpanObjectTypeV3 || {});\nvar spanObjectTypeV3EnumSchema = import_v33.z.nativeEnum(SpanObjectTypeV3);\nfunction spanObjectTypeV3ToTypedString(objectType) {\n  switch (objectType) {\n    case 1 /* EXPERIMENT */:\n      return \"experiment\";\n    case 2 /* PROJECT_LOGS */:\n      return \"project_logs\";\n    case 3 /* PLAYGROUND_LOGS */:\n      return \"playground_logs\";\n    default:\n      const x = objectType;\n      throw new Error(`Unknown SpanObjectTypeV3: ${x}`);\n  }\n}\nfunction spanObjectTypeV3ToString(objectType) {\n  return spanObjectTypeV3ToTypedString(objectType);\n}\nvar InternalSpanComponentUUIDFields = /* @__PURE__ */ ((InternalSpanComponentUUIDFields2) => {\n  InternalSpanComponentUUIDFields2[InternalSpanComponentUUIDFields2[\"OBJECT_ID\"] = 1] = \"OBJECT_ID\";\n  InternalSpanComponentUUIDFields2[InternalSpanComponentUUIDFields2[\"ROW_ID\"] = 2] = \"ROW_ID\";\n  InternalSpanComponentUUIDFields2[InternalSpanComponentUUIDFields2[\"SPAN_ID\"] = 3] = \"SPAN_ID\";\n  InternalSpanComponentUUIDFields2[InternalSpanComponentUUIDFields2[\"ROOT_SPAN_ID\"] = 4] = \"ROOT_SPAN_ID\";\n  return InternalSpanComponentUUIDFields2;\n})(InternalSpanComponentUUIDFields || {});\nvar internalSpanComponentUUIDFieldsEnumSchema = import_v33.z.nativeEnum(\n  InternalSpanComponentUUIDFields\n);\nvar _INTERNAL_SPAN_COMPONENT_UUID_FIELDS_ID_TO_NAME = {\n  [1 /* OBJECT_ID */]: \"object_id\",\n  [2 /* ROW_ID */]: \"row_id\",\n  [3 /* SPAN_ID */]: \"span_id\",\n  [4 /* ROOT_SPAN_ID */]: \"root_span_id\"\n};\nvar spanComponentsV3Schema = import_v33.z.object({\n  object_type: spanObjectTypeV3EnumSchema,\n  // TODO(manu): We should have a more elaborate zod schema for\n  // `propagated_event`. This will required zod-ifying the contents of\n  // sdk/js/util/object.ts.\n  propagated_event: import_v33.z.record(import_v33.z.unknown()).nullish()\n}).and(\n  import_v33.z.union([\n    // Must provide one or the other.\n    import_v33.z.object({\n      object_id: import_v33.z.string().nullish(),\n      compute_object_metadata_args: import_v33.z.optional(import_v33.z.null())\n    }),\n    import_v33.z.object({\n      object_id: import_v33.z.optional(import_v33.z.null()),\n      compute_object_metadata_args: import_v33.z.record(import_v33.z.unknown())\n    })\n  ])\n).and(\n  import_v33.z.union([\n    // Either all of these must be provided or none.\n    import_v33.z.object({\n      row_id: import_v33.z.string(),\n      span_id: import_v33.z.string(),\n      root_span_id: import_v33.z.string()\n    }),\n    import_v33.z.object({\n      row_id: import_v33.z.optional(import_v33.z.null()),\n      span_id: import_v33.z.optional(import_v33.z.null()),\n      root_span_id: import_v33.z.optional(import_v33.z.null())\n    })\n  ])\n);\nvar SpanComponentsV3 = class _SpanComponentsV3 {\n  constructor(data) {\n    this.data = data;\n  }\n  data;\n  toStr() {\n    const jsonObj = {\n      compute_object_metadata_args: this.data.compute_object_metadata_args || void 0,\n      propagated_event: this.data.propagated_event || void 0\n    };\n    const allBuffers = [];\n    allBuffers.push(\n      new Uint8Array([ENCODING_VERSION_NUMBER3, this.data.object_type])\n    );\n    const uuidEntries = [];\n    function addUuidField(origVal, fieldId) {\n      const ret = tryMakeUuid3(origVal);\n      if (ret.isUUID) {\n        uuidEntries.push(\n          concatUint8Arrays(new Uint8Array([fieldId]), ret.bytes)\n        );\n      } else {\n        jsonObj[_INTERNAL_SPAN_COMPONENT_UUID_FIELDS_ID_TO_NAME[fieldId]] = origVal;\n      }\n    }\n    if (this.data.object_id) {\n      addUuidField(\n        this.data.object_id,\n        1 /* OBJECT_ID */\n      );\n    }\n    if (this.data.row_id) {\n      addUuidField(this.data.row_id, 2 /* ROW_ID */);\n    }\n    if (this.data.span_id) {\n      addUuidField(this.data.span_id, 3 /* SPAN_ID */);\n    }\n    if (this.data.root_span_id) {\n      addUuidField(\n        this.data.root_span_id,\n        4 /* ROOT_SPAN_ID */\n      );\n    }\n    if (uuidEntries.length > 255) {\n      throw new Error(\"Impossible: too many UUID entries to encode\");\n    }\n    allBuffers.push(new Uint8Array([uuidEntries.length]));\n    allBuffers.push(...uuidEntries);\n    if (Object.keys(jsonObj).length > 0) {\n      allBuffers.push(stringToUint8Array(JSON.stringify(jsonObj)));\n    }\n    return uint8ArrayToBase64(concatUint8Arrays(...allBuffers));\n  }\n  static fromStr(s) {\n    try {\n      const rawBytes = base64ToUint8Array(s);\n      const jsonObj = {};\n      if (rawBytes[0] < ENCODING_VERSION_NUMBER3) {\n        const spanComponentsOld = SpanComponentsV2.fromStr(s);\n        jsonObj[\"object_type\"] = spanComponentsOld.objectType;\n        jsonObj[\"object_id\"] = spanComponentsOld.objectId;\n        jsonObj[\"compute_object_metadata_args\"] = spanComponentsOld.computeObjectMetadataArgs;\n        if (spanComponentsOld.rowIds) {\n          jsonObj[\"row_id\"] = spanComponentsOld.rowIds.rowId;\n          jsonObj[\"span_id\"] = spanComponentsOld.rowIds.spanId;\n          jsonObj[\"root_span_id\"] = spanComponentsOld.rowIds.rootSpanId;\n        }\n      } else {\n        jsonObj[\"object_type\"] = rawBytes[1];\n        const numUuidEntries = rawBytes[2];\n        let byteOffset = 3;\n        for (let i = 0; i < numUuidEntries; ++i) {\n          const fieldId = internalSpanComponentUUIDFieldsEnumSchema.parse(\n            rawBytes[byteOffset]\n          );\n          const fieldBytes = rawBytes.subarray(byteOffset + 1, byteOffset + 17);\n          byteOffset += 17;\n          jsonObj[_INTERNAL_SPAN_COMPONENT_UUID_FIELDS_ID_TO_NAME[fieldId]] = uuid3.stringify(fieldBytes);\n        }\n        if (byteOffset < rawBytes.length) {\n          const remainingJsonObj = JSON.parse(\n            uint8ArrayToString(rawBytes.subarray(byteOffset))\n          );\n          Object.assign(jsonObj, remainingJsonObj);\n        }\n      }\n      return _SpanComponentsV3.fromJsonObj(jsonObj);\n    } catch {\n      throw new Error(INVALID_ENCODING_ERRMSG3);\n    }\n  }\n  objectIdFields() {\n    if (!this.data.object_id) {\n      throw new Error(\n        \"Impossible: cannot invoke `objectIdFields` unless SpanComponentsV3 is initialized with an `object_id`\"\n      );\n    }\n    switch (this.data.object_type) {\n      case 1 /* EXPERIMENT */:\n        return { experiment_id: this.data.object_id };\n      case 2 /* PROJECT_LOGS */:\n        return { project_id: this.data.object_id, log_id: \"g\" };\n      case 3 /* PLAYGROUND_LOGS */:\n        return { prompt_session_id: this.data.object_id, log_id: \"x\" };\n      default:\n        this.data.object_type;\n        throw new Error(\"Impossible\");\n    }\n  }\n  async export() {\n    return this.toStr();\n  }\n  static fromJsonObj(jsonObj) {\n    return new _SpanComponentsV3(spanComponentsV3Schema.parse(jsonObj));\n  }\n};\n\n// util/type_util.ts\nfunction isObject(value) {\n  return value instanceof Object && !(value instanceof Array);\n}\nfunction isArray(value) {\n  return value instanceof Array;\n}\nfunction isObjectOrArray(value) {\n  return value instanceof Object;\n}\nfunction isPromiseLike(value) {\n  return value != null && (typeof value === \"object\" || typeof value === \"function\") && \"then\" in value && typeof value.then === \"function\";\n}\n\n// util/object_util.ts\nvar SET_UNION_FIELDS = /* @__PURE__ */ new Set([\"tags\"]);\nvar FORBIDDEN_MERGE_KEYS = /* @__PURE__ */ new Set([\n  \"__proto__\",\n  \"constructor\",\n  \"prototype\"\n]);\nfunction mergeDictsWithPaths({\n  mergeInto,\n  mergeFrom,\n  mergePaths\n}) {\n  const mergePathsSerialized = new Set(\n    mergePaths.map((p) => JSON.stringify(p))\n  );\n  return mergeDictsWithPathsHelper({\n    mergeInto,\n    mergeFrom,\n    path: [],\n    mergePaths: mergePathsSerialized\n  });\n}\nfunction mergeDictsWithPathsHelper({\n  mergeInto,\n  mergeFrom,\n  path,\n  mergePaths\n}) {\n  Object.entries(mergeFrom).forEach(([k, mergeFromV]) => {\n    if (FORBIDDEN_MERGE_KEYS.has(k)) return;\n    const fullPath = path.concat([k]);\n    const fullPathSerialized = JSON.stringify(fullPath);\n    const mergeIntoV = recordFind(mergeInto, k);\n    const isSetUnionField = path.length === 0 && SET_UNION_FIELDS.has(k) && !mergePaths.has(fullPathSerialized);\n    if (isSetUnionField && isArray(mergeIntoV) && isArray(mergeFromV)) {\n      const seen = /* @__PURE__ */ new Set();\n      const combined = [];\n      for (const item of [...mergeIntoV, ...mergeFromV]) {\n        const key = typeof item === \"object\" ? JSON.stringify(item) : String(item);\n        if (!seen.has(key)) {\n          seen.add(key);\n          combined.push(item);\n        }\n      }\n      mergeInto[k] = combined;\n    } else if (isObject(mergeIntoV) && isObject(mergeFromV) && !mergePaths.has(fullPathSerialized)) {\n      mergeDictsWithPathsHelper({\n        mergeInto: mergeIntoV,\n        mergeFrom: mergeFromV,\n        path: fullPath,\n        mergePaths\n      });\n    } else {\n      if (mergeFromV !== void 0) {\n        mergeInto[k] = mergeFromV;\n      }\n    }\n  });\n  return mergeInto;\n}\nfunction mergeDicts(mergeInto, mergeFrom) {\n  return mergeDictsWithPaths({ mergeInto, mergeFrom, mergePaths: [] });\n}\nfunction recordFind(m, k) {\n  return m[k];\n}\nfunction getObjValueByPath(row, path) {\n  let curr = row;\n  for (const p of path) {\n    if (!isObjectOrArray(curr)) {\n      return null;\n    }\n    curr = curr[p];\n  }\n  return curr;\n}\n\n// util/merge_row_batch.ts\nfunction generateMergedRowKey(row) {\n  return JSON.stringify(\n    [\n      \"org_id\",\n      \"project_id\",\n      \"experiment_id\",\n      \"dataset_id\",\n      \"prompt_session_id\",\n      \"log_id\",\n      \"id\"\n    ].map((k) => row[k])\n  );\n}\nvar MERGE_ROW_SKIP_FIELDS = [\n  \"created\",\n  \"span_id\",\n  \"root_span_id\",\n  \"span_parents\",\n  \"_parent_id\"\n  // TODO: handle merge paths.\n];\nfunction popMergeRowSkipFields(row) {\n  const popped = {};\n  for (const field of MERGE_ROW_SKIP_FIELDS) {\n    if (field in row) {\n      popped[field] = row[field];\n      delete row[field];\n    }\n  }\n  return popped;\n}\nfunction restoreMergeRowSkipFields(row, skipFields) {\n  for (const field of MERGE_ROW_SKIP_FIELDS) {\n    delete row[field];\n    if (field in skipFields) {\n      row[field] = skipFields[field];\n    }\n  }\n}\nfunction mergeRowBatch(rows) {\n  for (const row of rows) {\n    if (row.id === void 0) {\n      throw new Error(\n        \"Logged row is missing an id. This is an internal braintrust error. Please contact us at info@braintrust.dev for help\"\n      );\n    }\n  }\n  const rowGroups = /* @__PURE__ */ new Map();\n  for (const row of rows) {\n    const key = generateMergedRowKey(row);\n    const existingRow = rowGroups.get(key);\n    if (existingRow !== void 0 && row[IS_MERGE_FIELD]) {\n      const skipFields = popMergeRowSkipFields(existingRow);\n      const preserveNoMerge = !existingRow[IS_MERGE_FIELD];\n      mergeDicts(existingRow, row);\n      restoreMergeRowSkipFields(existingRow, skipFields);\n      if (preserveNoMerge) {\n        delete existingRow[IS_MERGE_FIELD];\n      }\n    } else {\n      rowGroups.set(key, row);\n    }\n  }\n  return [...rowGroups.values()];\n}\nfunction batchItems(args) {\n  const { items } = args;\n  const batchMaxNumItems = args.batchMaxNumItems ?? Number.POSITIVE_INFINITY;\n  const batchMaxNumBytes = args.batchMaxNumBytes ?? Number.POSITIVE_INFINITY;\n  const getByteSize = args.getByteSize;\n  const output = [];\n  let batch = [];\n  let batchLen = 0;\n  function addToBatch(item) {\n    batch.push(item);\n    batchLen += getByteSize(item);\n  }\n  function flushBatch() {\n    output.push(batch);\n    batch = [];\n    batchLen = 0;\n  }\n  for (const item of items) {\n    const itemSize = getByteSize(item);\n    if (batch.length > 0 && !(itemSize + batchLen < batchMaxNumBytes && batch.length < batchMaxNumItems)) {\n      flushBatch();\n    }\n    addToBatch(item);\n  }\n  if (batch.length > 0) {\n    flushBatch();\n  }\n  return output;\n}\n\n// util/object.ts\nvar DEFAULT_IS_LEGACY_DATASET = false;\nfunction ensureDatasetRecord(r, legacy) {\n  if (legacy) {\n    return ensureLegacyDatasetRecord(r);\n  } else {\n    return ensureNewDatasetRecord(r);\n  }\n}\nfunction ensureLegacyDatasetRecord(r) {\n  if (\"output\" in r) {\n    return r;\n  }\n  const row = {\n    ...r,\n    output: r.expected\n  };\n  delete row.expected;\n  return row;\n}\nfunction ensureNewDatasetRecord(r) {\n  if (\"expected\" in r) {\n    return r;\n  }\n  const row = {\n    ...r,\n    tags: null,\n    expected: r.output\n  };\n  delete row.output;\n  return row;\n}\n\n// util/json_util.ts\nfunction constructJsonArray(items) {\n  return `[${items.join(\",\")}]`;\n}\n\n// util/string_util.ts\nfunction _urljoin(...parts) {\n  return parts.map(\n    (x, i) => x.replace(/^\\//, \"\").replace(i < parts.length - 1 ? /\\/$/ : \"\", \"\")\n  ).filter((x) => x.trim() !== \"\").join(\"/\");\n}\nfunction slugify(text, options) {\n  if (typeof text !== \"string\") {\n    throw new Error(\"slugify: string argument expected\");\n  }\n  const charMap = {\n    // Currency and symbols\n    $: \"dollar\",\n    \"%\": \"percent\",\n    \"&\": \"and\",\n    // Latin characters\n    \\u00C0: \"A\",\n    \\u00C1: \"A\",\n    \\u00C2: \"A\",\n    \\u00C3: \"A\",\n    \\u00C4: \"A\",\n    \\u00C5: \"A\",\n    \\u00C6: \"AE\",\n    \\u00C7: \"C\",\n    \\u00C8: \"E\",\n    \\u00C9: \"E\",\n    \\u00CA: \"E\",\n    \\u00CB: \"E\",\n    \\u00CC: \"I\",\n    \\u00CD: \"I\",\n    \\u00CE: \"I\",\n    \\u00CF: \"I\",\n    \\u00D1: \"N\",\n    \\u00D2: \"O\",\n    \\u00D3: \"O\",\n    \\u00D4: \"O\",\n    \\u00D5: \"O\",\n    \\u00D6: \"O\",\n    \\u00D8: \"O\",\n    \\u00D9: \"U\",\n    \\u00DA: \"U\",\n    \\u00DB: \"U\",\n    \\u00DC: \"U\",\n    \\u00DD: \"Y\",\n    \\u00E0: \"a\",\n    \\u00E1: \"a\",\n    \\u00E2: \"a\",\n    \\u00E3: \"a\",\n    \\u00E4: \"a\",\n    \\u00E5: \"a\",\n    \\u00E6: \"ae\",\n    \\u00E7: \"c\",\n    \\u00E8: \"e\",\n    \\u00E9: \"e\",\n    \\u00EA: \"e\",\n    \\u00EB: \"e\",\n    \\u00EC: \"i\",\n    \\u00ED: \"i\",\n    \\u00EE: \"i\",\n    \\u00EF: \"i\",\n    \\u00F1: \"n\",\n    \\u00F2: \"o\",\n    \\u00F3: \"o\",\n    \\u00F4: \"o\",\n    \\u00F5: \"o\",\n    \\u00F6: \"o\",\n    \\u00F8: \"o\",\n    \\u00F9: \"u\",\n    \\u00FA: \"u\",\n    \\u00FB: \"u\",\n    \\u00FC: \"u\",\n    \\u00FD: \"y\",\n    \\u00FF: \"y\"\n  };\n  const replacement = \"-\";\n  const trim = options?.trim !== false;\n  let slug = text.normalize().split(\"\").reduce((result, ch) => {\n    const mapped = charMap[ch] || ch;\n    const appendChar = mapped === replacement ? \" \" : mapped;\n    return result + appendChar.replace(/[^\\w\\s$*_+~.()'\"!\\-:@]+/g, \"\");\n  }, \"\");\n  if (options?.strict) {\n    slug = slug.replace(/[^A-Za-z0-9\\s]/g, \"\");\n  }\n  if (trim) {\n    slug = slug.trim();\n  }\n  slug = slug.replace(/\\s+/g, replacement);\n  if (options?.lower) {\n    slug = slug.toLowerCase();\n  }\n  return slug;\n}\n\n// util/span_identifier_v4.ts\nvar import_v34 = require(\"zod/v3\");\nvar ENCODING_VERSION_NUMBER_V4 = 4;\nfunction tryMakeHexTraceId(s) {\n  try {\n    if (typeof s === \"string\" && s.length === 32) {\n      const bytes = new Uint8Array(16);\n      for (let i = 0; i < 16; i++) {\n        const hex = s.substr(i * 2, 2);\n        const byte = parseInt(hex, 16);\n        if (isNaN(byte)) throw new Error();\n        bytes[i] = byte;\n      }\n      return { bytes, isHex: true };\n    }\n  } catch {\n  }\n  return { bytes: void 0, isHex: false };\n}\nfunction tryMakeHexSpanId(s) {\n  try {\n    if (typeof s === \"string\" && s.length === 16) {\n      const bytes = new Uint8Array(8);\n      for (let i = 0; i < 8; i++) {\n        const hex = s.substr(i * 2, 2);\n        const byte = parseInt(hex, 16);\n        if (isNaN(byte)) throw new Error();\n        bytes[i] = byte;\n      }\n      return { bytes, isHex: true };\n    }\n  } catch {\n  }\n  return { bytes: void 0, isHex: false };\n}\nvar INVALID_ENCODING_ERRMSG_V4 = `SpanComponents string is not properly encoded. This library only supports encoding versions up to ${ENCODING_VERSION_NUMBER_V4}. Please make sure the SDK library used to decode the SpanComponents is at least as new as any library used to encode it.`;\nvar FIELDS_ID_TO_NAME = {\n  [1 /* OBJECT_ID */]: \"object_id\",\n  [2 /* ROW_ID */]: \"row_id\",\n  [3 /* SPAN_ID */]: \"span_id\",\n  [4 /* ROOT_SPAN_ID */]: \"root_span_id\"\n};\nvar spanComponentsV4Schema = import_v34.z.object({\n  object_type: spanObjectTypeV3EnumSchema,\n  propagated_event: import_v34.z.record(import_v34.z.unknown()).nullish()\n}).and(\n  import_v34.z.union([\n    // Must provide one or the other.\n    import_v34.z.object({\n      object_id: import_v34.z.string().nullish(),\n      compute_object_metadata_args: import_v34.z.optional(import_v34.z.null())\n    }),\n    import_v34.z.object({\n      object_id: import_v34.z.optional(import_v34.z.null()),\n      compute_object_metadata_args: import_v34.z.record(import_v34.z.unknown())\n    })\n  ])\n).and(\n  import_v34.z.union([\n    // Either all of these must be provided or none.\n    import_v34.z.object({\n      row_id: import_v34.z.string(),\n      span_id: import_v34.z.string(),\n      root_span_id: import_v34.z.string()\n    }),\n    import_v34.z.object({\n      row_id: import_v34.z.optional(import_v34.z.null()),\n      span_id: import_v34.z.optional(import_v34.z.null()),\n      root_span_id: import_v34.z.optional(import_v34.z.null())\n    })\n  ])\n);\nvar SpanComponentsV4 = class _SpanComponentsV4 {\n  constructor(data) {\n    this.data = data;\n  }\n  data;\n  toStr() {\n    const jsonObj = {\n      compute_object_metadata_args: this.data.compute_object_metadata_args || void 0,\n      propagated_event: this.data.propagated_event || void 0\n    };\n    Object.keys(jsonObj).forEach((key) => {\n      if (jsonObj[key] === void 0) {\n        delete jsonObj[key];\n      }\n    });\n    const allBuffers = [];\n    allBuffers.push(\n      new Uint8Array([ENCODING_VERSION_NUMBER_V4, this.data.object_type])\n    );\n    const hexEntries = [];\n    function addHexField(origVal, fieldId) {\n      let hexResult;\n      if (fieldId === 3 /* SPAN_ID */) {\n        hexResult = tryMakeHexSpanId(origVal);\n      } else if (fieldId === 4 /* ROOT_SPAN_ID */) {\n        hexResult = tryMakeHexTraceId(origVal);\n      } else {\n        hexResult = { bytes: void 0, isHex: false };\n      }\n      if (hexResult.isHex) {\n        hexEntries.push(\n          concatUint8Arrays(new Uint8Array([fieldId]), hexResult.bytes)\n        );\n      } else {\n        jsonObj[FIELDS_ID_TO_NAME[fieldId]] = origVal;\n      }\n    }\n    if (this.data.object_id) {\n      addHexField(this.data.object_id, 1 /* OBJECT_ID */);\n    }\n    if (this.data.row_id) {\n      addHexField(this.data.row_id, 2 /* ROW_ID */);\n    }\n    if (this.data.span_id) {\n      addHexField(this.data.span_id, 3 /* SPAN_ID */);\n    }\n    if (this.data.root_span_id) {\n      addHexField(this.data.root_span_id, 4 /* ROOT_SPAN_ID */);\n    }\n    if (hexEntries.length > 255) {\n      throw new Error(\"Impossible: too many hex entries to encode\");\n    }\n    allBuffers.push(new Uint8Array([hexEntries.length]));\n    allBuffers.push(...hexEntries);\n    if (Object.keys(jsonObj).length > 0) {\n      allBuffers.push(stringToUint8Array(JSON.stringify(jsonObj)));\n    }\n    return uint8ArrayToBase64(concatUint8Arrays(...allBuffers));\n  }\n  static fromStr(s) {\n    try {\n      const rawBytes = base64ToUint8Array(s);\n      const jsonObj = {};\n      if (rawBytes[0] < ENCODING_VERSION_NUMBER_V4) {\n        const v3Components = SpanComponentsV3.fromStr(s);\n        jsonObj[\"object_type\"] = v3Components.data.object_type;\n        jsonObj[\"object_id\"] = v3Components.data.object_id;\n        jsonObj[\"compute_object_metadata_args\"] = v3Components.data.compute_object_metadata_args;\n        jsonObj[\"row_id\"] = v3Components.data.row_id;\n        jsonObj[\"span_id\"] = v3Components.data.span_id;\n        jsonObj[\"root_span_id\"] = v3Components.data.root_span_id;\n        jsonObj[\"propagated_event\"] = v3Components.data.propagated_event;\n      } else {\n        jsonObj[\"object_type\"] = rawBytes[1];\n        const numHexEntries = rawBytes[2];\n        let byteOffset = 3;\n        for (let i = 0; i < numHexEntries; i++) {\n          const fieldId = rawBytes[byteOffset];\n          if (fieldId === 3 /* SPAN_ID */) {\n            const hexBytes = rawBytes.subarray(byteOffset + 1, byteOffset + 9);\n            byteOffset += 9;\n            jsonObj[FIELDS_ID_TO_NAME[fieldId]] = Array.from(\n              hexBytes,\n              (b) => b.toString(16).padStart(2, \"0\")\n            ).join(\"\");\n          } else if (fieldId === 4 /* ROOT_SPAN_ID */) {\n            const hexBytes = rawBytes.subarray(byteOffset + 1, byteOffset + 17);\n            byteOffset += 17;\n            jsonObj[FIELDS_ID_TO_NAME[fieldId]] = Array.from(\n              hexBytes,\n              (b) => b.toString(16).padStart(2, \"0\")\n            ).join(\"\");\n          } else {\n            const hexBytes = rawBytes.subarray(byteOffset + 1, byteOffset + 17);\n            byteOffset += 17;\n            jsonObj[FIELDS_ID_TO_NAME[fieldId]] = Array.from(\n              hexBytes,\n              (b) => b.toString(16).padStart(2, \"0\")\n            ).join(\"\");\n          }\n        }\n        if (byteOffset < rawBytes.length) {\n          const remainingJsonObj = JSON.parse(\n            uint8ArrayToString(rawBytes.subarray(byteOffset))\n          );\n          Object.assign(jsonObj, remainingJsonObj);\n        }\n      }\n      return _SpanComponentsV4.fromJsonObj(jsonObj);\n    } catch {\n      throw new Error(INVALID_ENCODING_ERRMSG_V4);\n    }\n  }\n  objectIdFields() {\n    if (!this.data.object_id) {\n      throw new Error(\n        \"Impossible: cannot invoke `objectIdFields` unless SpanComponentsV4 is initialized with an `object_id`\"\n      );\n    }\n    switch (this.data.object_type) {\n      case 1 /* EXPERIMENT */:\n        return { experiment_id: this.data.object_id };\n      case 2 /* PROJECT_LOGS */:\n        return { project_id: this.data.object_id, log_id: \"g\" };\n      case 3 /* PLAYGROUND_LOGS */:\n        return { prompt_session_id: this.data.object_id, log_id: \"x\" };\n      default:\n        this.data.object_type;\n        throw new Error(`Invalid object_type ${this.data.object_type}`);\n    }\n  }\n  async export() {\n    return this.toStr();\n  }\n  static fromJsonObj(jsonObj) {\n    return new _SpanComponentsV4(spanComponentsV4Schema.parse(jsonObj));\n  }\n};\nfunction makeScorerPropagatedEvent(parent) {\n  const parentPropagatedEvent = parent ? SpanComponentsV4.fromStr(parent).data.propagated_event ?? {} : {};\n  return mergeDicts(\n    { ...parentPropagatedEvent },\n    { span_attributes: { purpose: \"scorer\" } }\n  );\n}\n\n// util/git_fields.ts\nfunction mergeGitMetadataSettings(s1, s2) {\n  if (s1.collect === \"all\") {\n    return s2;\n  } else if (s2.collect === \"all\") {\n    return s1;\n  } else if (s1.collect === \"none\") {\n    return s1;\n  } else if (s2.collect === \"none\") {\n    return s2;\n  }\n  const fields = (s1.fields ?? []).filter((f) => (s2.fields ?? []).includes(f));\n  const collect = fields.length > 0 ? \"some\" : \"none\";\n  return { collect, fields };\n}\n\n// util/xact-ids.ts\nvar TOP_BITS = BigInt(\"0x0DE1\") << BigInt(48);\nvar MOD = BigInt(1) << BigInt(64);\nvar COPRIME = BigInt(\"205891132094649\");\nvar COPRIME_INVERSE = BigInt(\"1522336535492693385\");\nfunction modularMultiply(value, prime) {\n  return value * prime % MOD;\n}\nfunction prettifyXact(valueString) {\n  const value = BigInt(valueString);\n  const encoded = modularMultiply(value, COPRIME);\n  return encoded.toString(16).padStart(16, \"0\");\n}\nfunction loadPrettyXact(encodedHex) {\n  if (encodedHex.length !== 16) {\n    return encodedHex;\n  }\n  const value = BigInt(`0x${encodedHex}`);\n  const multipliedInverse = modularMultiply(value, COPRIME_INVERSE);\n  const withTopBits = TOP_BITS | multipliedInverse;\n  return withTopBits.toString();\n}\n\n// util/zod_util.ts\nvar import_v35 = require(\"zod/v3\");\n\n// src/util.ts\nvar GLOBAL_PROJECT = \"Global\";\nfunction runCatchFinally(f, catchF, finallyF) {\n  let runSyncCleanup = true;\n  try {\n    const ret = f();\n    if (ret instanceof Promise) {\n      runSyncCleanup = false;\n      return ret.catch(catchF).finally(finallyF);\n    } else {\n      return ret;\n    }\n  } catch (e) {\n    return catchF(e);\n  } finally {\n    if (runSyncCleanup) {\n      finallyF();\n    }\n  }\n}\nfunction getCurrentUnixTimestamp() {\n  return (/* @__PURE__ */ new Date()).getTime() / 1e3;\n}\nfunction isEmpty2(a) {\n  return a === void 0 || a === null;\n}\nvar LazyValue = class {\n  callable;\n  resolvedValue = void 0;\n  value = {\n    computedState: \"uninitialized\"\n  };\n  constructor(callable) {\n    this.callable = callable;\n  }\n  get() {\n    if (this.value.computedState !== \"uninitialized\") {\n      return this.value.val;\n    }\n    this.value = {\n      computedState: \"in_progress\",\n      val: this.callable().then((x) => {\n        this.value.computedState = \"succeeded\";\n        this.resolvedValue = x;\n        return x;\n      })\n    };\n    return this.value.val;\n  }\n  getSync() {\n    return {\n      resolved: this.value.computedState === \"succeeded\",\n      value: this.resolvedValue\n    };\n  }\n  // If this is true, the caller should be able to obtain the LazyValue without\n  // it throwing.\n  get hasSucceeded() {\n    return this.value.computedState === \"succeeded\";\n  }\n};\nvar SyncLazyValue = class {\n  callable;\n  value = {\n    computedState: \"uninitialized\"\n  };\n  constructor(callable) {\n    this.callable = callable;\n  }\n  get() {\n    if (this.value.computedState !== \"uninitialized\") {\n      return this.value.val;\n    }\n    const result = this.callable();\n    this.value = { computedState: \"succeeded\", val: result };\n    return result;\n  }\n  // If this is true, the caller should be able to obtain the SyncLazyValue without\n  // it throwing.\n  get hasSucceeded() {\n    return this.value.computedState === \"succeeded\";\n  }\n};\nfunction addAzureBlobHeaders(headers, url) {\n  if (url.includes(\"blob.core.windows.net\")) {\n    headers[\"x-ms-blob-type\"] = \"BlockBlob\";\n  }\n}\nvar InternalAbortError = class extends Error {\n  constructor(message) {\n    super(message);\n    this.name = \"InternalAbortError\";\n  }\n};\nfunction filterFrom(record, keys) {\n  const out = {};\n  for (const k of Object.keys(record)) {\n    if (!keys.includes(k)) {\n      out[k] = record[k];\n    }\n  }\n  return out;\n}\n\n// src/generated_types.ts\nvar import_v36 = require(\"zod/v3\");\nvar AclObjectType = import_v36.z.union([\n  import_v36.z.enum([\n    \"organization\",\n    \"project\",\n    \"experiment\",\n    \"dataset\",\n    \"prompt\",\n    \"prompt_session\",\n    \"group\",\n    \"role\",\n    \"org_member\",\n    \"project_log\",\n    \"org_project\",\n    \"org_audit_logs\",\n    \"project_group\",\n    \"project_group_projects\",\n    \"ai_secret\",\n    \"org_ai_secret\",\n    \"org_account\"\n  ]),\n  import_v36.z.null()\n]);\nvar Permission = import_v36.z.enum([\n  \"create\",\n  \"read\",\n  \"update\",\n  \"delete\",\n  \"create_acls\",\n  \"read_acls\",\n  \"update_acls\",\n  \"delete_acls\"\n]);\nvar Acl = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  object_type: AclObjectType.and(import_v36.z.string()),\n  object_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  group_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  permission: Permission.and(import_v36.z.union([import_v36.z.string(), import_v36.z.null()])).optional(),\n  restrict_object_type: AclObjectType.and(import_v36.z.unknown()).optional(),\n  role_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  _object_org_id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar Agent = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  slug: import_v36.z.string(),\n  kind: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional()\n});\nvar AISecret = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  updated_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  secret_updated_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  org_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  type: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n  secret_updated_by_user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  preview_secret: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar ResponseFormatJsonSchema = import_v36.z.object({\n  name: import_v36.z.string(),\n  description: import_v36.z.string().optional(),\n  schema: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.string()]).optional(),\n  strict: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional()\n});\nvar ResponseFormatNullish = import_v36.z.union([\n  import_v36.z.object({ type: import_v36.z.literal(\"json_object\") }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"json_schema\"),\n    json_schema: ResponseFormatJsonSchema\n  }),\n  import_v36.z.object({ type: import_v36.z.literal(\"text\") }),\n  import_v36.z.null()\n]);\nvar AnyModelParams = import_v36.z.object({\n  temperature: import_v36.z.number().optional(),\n  top_p: import_v36.z.number().optional(),\n  max_tokens: import_v36.z.number(),\n  max_completion_tokens: import_v36.z.number().optional(),\n  frequency_penalty: import_v36.z.number().optional(),\n  presence_penalty: import_v36.z.number().optional(),\n  response_format: ResponseFormatNullish.optional(),\n  tool_choice: import_v36.z.union([\n    import_v36.z.literal(\"auto\"),\n    import_v36.z.literal(\"none\"),\n    import_v36.z.literal(\"required\"),\n    import_v36.z.object({\n      type: import_v36.z.literal(\"function\"),\n      function: import_v36.z.object({ name: import_v36.z.string() })\n    })\n  ]).optional(),\n  function_call: import_v36.z.union([\n    import_v36.z.literal(\"auto\"),\n    import_v36.z.literal(\"none\"),\n    import_v36.z.object({ name: import_v36.z.string() })\n  ]).optional(),\n  n: import_v36.z.number().optional(),\n  stop: import_v36.z.array(import_v36.z.string()).optional(),\n  reasoning_effort: import_v36.z.enum([\"none\", \"minimal\", \"low\", \"medium\", \"high\"]).optional(),\n  chat_template_kwargs: import_v36.z.object({ enable_thinking: import_v36.z.boolean() }).partial().passthrough().optional(),\n  verbosity: import_v36.z.enum([\"low\", \"medium\", \"high\"]).optional(),\n  top_k: import_v36.z.number().optional(),\n  stop_sequences: import_v36.z.array(import_v36.z.string()).optional(),\n  reasoning_enabled: import_v36.z.boolean().optional(),\n  reasoning_budget: import_v36.z.number().optional(),\n  max_tokens_to_sample: import_v36.z.number().optional(),\n  maxOutputTokens: import_v36.z.number().optional(),\n  topP: import_v36.z.number().optional(),\n  topK: import_v36.z.number().optional(),\n  use_cache: import_v36.z.boolean().optional()\n});\nvar ApiKey = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  preview_name: import_v36.z.string(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  user_email: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  user_given_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  user_family_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  org_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  expires_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar TriggeredFunctionState = import_v36.z.object({\n  triggered_xact_id: import_v36.z.string(),\n  completed_xact_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  idempotency_key: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  attempts: import_v36.z.number().int().gte(0).optional().default(0),\n  scope: import_v36.z.union([\n    import_v36.z.object({ type: import_v36.z.literal(\"span\") }),\n    import_v36.z.object({ type: import_v36.z.literal(\"trace\") }),\n    import_v36.z.object({ type: import_v36.z.literal(\"group\"), key: import_v36.z.string(), value: import_v36.z.string() })\n  ])\n});\nvar AsyncScoringState = import_v36.z.union([\n  import_v36.z.object({\n    status: import_v36.z.literal(\"enabled\"),\n    token: import_v36.z.string(),\n    function_ids: import_v36.z.array(import_v36.z.unknown()),\n    skip_logging: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n    triggered_functions: import_v36.z.union([import_v36.z.record(TriggeredFunctionState), import_v36.z.null()]).optional(),\n    last_triggered_xact_id: import_v36.z.union([import_v36.z.string(), import_v36.z.number(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.object({ status: import_v36.z.literal(\"disabled\") }),\n  import_v36.z.null(),\n  import_v36.z.null()\n]);\nvar AsyncScoringControl = import_v36.z.union([\n  import_v36.z.object({ kind: import_v36.z.literal(\"score_update\"), token: import_v36.z.string().optional() }),\n  import_v36.z.object({ kind: import_v36.z.literal(\"state_override\"), state: AsyncScoringState }),\n  import_v36.z.object({ kind: import_v36.z.literal(\"state_force_reselect\") }),\n  import_v36.z.object({ kind: import_v36.z.literal(\"state_enabled_force_rescore\") }),\n  import_v36.z.object({\n    kind: import_v36.z.literal(\"trigger_functions\"),\n    triggered_functions: import_v36.z.array(\n      import_v36.z.object({\n        function_id: import_v36.z.unknown().optional(),\n        scope: import_v36.z.union([\n          import_v36.z.object({ type: import_v36.z.literal(\"span\") }),\n          import_v36.z.object({ type: import_v36.z.literal(\"trace\") })\n        ]),\n        idempotency_key: import_v36.z.string().optional(),\n        triggered_xact_id: import_v36.z.union([import_v36.z.string(), import_v36.z.number()]).optional()\n      })\n    ).min(1)\n  }),\n  import_v36.z.object({\n    kind: import_v36.z.literal(\"complete_triggered_functions\"),\n    function_ids: import_v36.z.array(import_v36.z.unknown()).min(1),\n    triggered_xact_id: import_v36.z.string()\n  }),\n  import_v36.z.object({\n    kind: import_v36.z.literal(\"mark_attempt_failed\"),\n    function_ids: import_v36.z.array(import_v36.z.unknown()).min(1)\n  })\n]);\nvar BraintrustAttachmentReference = import_v36.z.object({\n  type: import_v36.z.literal(\"braintrust_attachment\"),\n  filename: import_v36.z.string().min(1),\n  content_type: import_v36.z.string().min(1),\n  key: import_v36.z.string().min(1)\n});\nvar ExternalAttachmentReference = import_v36.z.object({\n  type: import_v36.z.literal(\"external_attachment\"),\n  filename: import_v36.z.string().min(1),\n  content_type: import_v36.z.string().min(1),\n  url: import_v36.z.string().min(1)\n});\nvar AttachmentReference = import_v36.z.discriminatedUnion(\"type\", [\n  BraintrustAttachmentReference,\n  ExternalAttachmentReference\n]);\nvar UploadStatus = import_v36.z.enum([\"uploading\", \"done\", \"error\"]);\nvar AttachmentStatus = import_v36.z.object({\n  upload_status: UploadStatus,\n  error_message: import_v36.z.string().optional()\n});\nvar AutomationStatus = import_v36.z.enum([\"active\", \"paused\"]);\nvar FunctionTypeEnum = import_v36.z.enum([\n  \"llm\",\n  \"scorer\",\n  \"task\",\n  \"tool\",\n  \"custom_view\",\n  \"preprocessor\",\n  \"facet\",\n  \"classifier\",\n  \"tag\",\n  \"parameters\",\n  \"sandbox\"\n]);\nvar FacetPreprocessorId = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"function\"),\n    id: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"global\"),\n    name: import_v36.z.string(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\")\n  }),\n  import_v36.z.object({ type: import_v36.z.literal(\"inline\"), code: import_v36.z.string().min(1) }),\n  import_v36.z.null()\n]);\nvar SavedFunctionId = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"function\"),\n    id: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"global\"),\n    name: import_v36.z.string(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\")\n  })\n]);\nvar TopicMapGenerationSettings = import_v36.z.object({\n  algorithm: import_v36.z.enum([\"hdbscan\", \"kmeans\", \"community\"]),\n  dimension_reduction: import_v36.z.enum([\"umap\", \"pca\", \"none\"]),\n  sample_size: import_v36.z.number().int().gt(0).optional(),\n  n_clusters: import_v36.z.number().int().gt(0).optional(),\n  min_cluster_size: import_v36.z.number().int().gt(0).optional(),\n  min_samples: import_v36.z.number().int().gt(0).optional(),\n  hierarchy_threshold: import_v36.z.number().int().gt(0).optional(),\n  naming_model: import_v36.z.string().optional()\n});\nvar TopicMapData = import_v36.z.object({\n  type: import_v36.z.literal(\"topic_map\"),\n  source_facet: import_v36.z.string(),\n  source_facet_function: SavedFunctionId.and(import_v36.z.unknown()).optional(),\n  embedding_model: import_v36.z.string(),\n  bundle_key: import_v36.z.string().optional(),\n  report_key: import_v36.z.string().optional(),\n  topic_names: import_v36.z.record(import_v36.z.string()).optional(),\n  generation_settings: TopicMapGenerationSettings.optional(),\n  disable_reconciliation: import_v36.z.boolean().optional(),\n  reconcile_mode: import_v36.z.enum([\"evolve\", \"names_only\"]).optional(),\n  distance_threshold: import_v36.z.number().optional(),\n  btql_filter: import_v36.z.string().optional(),\n  automation_btql_filter: import_v36.z.string().optional()\n});\nvar BatchedFacetData = import_v36.z.object({\n  type: import_v36.z.literal(\"batched_facet\"),\n  preprocessor: FacetPreprocessorId.optional(),\n  facets: import_v36.z.array(\n    import_v36.z.object({\n      name: import_v36.z.string(),\n      prompt: import_v36.z.string(),\n      model: import_v36.z.string().optional(),\n      embedding_model: import_v36.z.string().optional(),\n      no_match_pattern: import_v36.z.string().optional()\n    })\n  ),\n  topic_maps: import_v36.z.record(\n    import_v36.z.array(\n      import_v36.z.object({\n        function_name: import_v36.z.string(),\n        topic_map_id: import_v36.z.string().optional(),\n        topic_map_data: TopicMapData\n      })\n    )\n  ).optional()\n});\nvar BraintrustModelParams = import_v36.z.object({\n  use_cache: import_v36.z.boolean(),\n  reasoning_enabled: import_v36.z.boolean(),\n  reasoning_budget: import_v36.z.number()\n}).partial();\nvar CallEvent = import_v36.z.union([\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    data: import_v36.z.string(),\n    event: import_v36.z.literal(\"text_delta\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    data: import_v36.z.string(),\n    event: import_v36.z.literal(\"reasoning_delta\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    data: import_v36.z.string(),\n    event: import_v36.z.literal(\"json_delta\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    data: import_v36.z.string(),\n    event: import_v36.z.literal(\"progress\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    data: import_v36.z.string(),\n    event: import_v36.z.literal(\"error\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    data: import_v36.z.string(),\n    event: import_v36.z.literal(\"console\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    event: import_v36.z.literal(\"start\"),\n    data: import_v36.z.literal(\"\")\n  }),\n  import_v36.z.object({\n    id: import_v36.z.string().optional(),\n    event: import_v36.z.literal(\"done\"),\n    data: import_v36.z.literal(\"\")\n  })\n]);\nvar ChatCompletionContentPartTextWithTitle = import_v36.z.object({\n  text: import_v36.z.string().default(\"\"),\n  type: import_v36.z.literal(\"text\"),\n  cache_control: import_v36.z.object({\n    type: import_v36.z.literal(\"ephemeral\"),\n    ttl: import_v36.z.enum([\"5m\", \"1h\"]).optional()\n  }).optional()\n});\nvar ChatCompletionContentPartImageWithTitle = import_v36.z.object({\n  image_url: import_v36.z.object({\n    url: import_v36.z.string(),\n    detail: import_v36.z.union([import_v36.z.literal(\"auto\"), import_v36.z.literal(\"low\"), import_v36.z.literal(\"high\")]).optional()\n  }),\n  type: import_v36.z.literal(\"image_url\"),\n  cache_control: import_v36.z.object({\n    type: import_v36.z.literal(\"ephemeral\"),\n    ttl: import_v36.z.enum([\"5m\", \"1h\"]).optional()\n  }).optional()\n});\nvar ChatCompletionContentPartInputAudioWithTitle = import_v36.z.object({\n  input_audio: import_v36.z.object({ data: import_v36.z.string(), format: import_v36.z.enum([\"wav\", \"mp3\"]) }),\n  type: import_v36.z.literal(\"input_audio\"),\n  cache_control: import_v36.z.object({\n    type: import_v36.z.literal(\"ephemeral\"),\n    ttl: import_v36.z.enum([\"5m\", \"1h\"]).optional()\n  }).optional()\n});\nvar ChatCompletionContentPartFileFile = import_v36.z.object({ file_data: import_v36.z.string(), filename: import_v36.z.string(), file_id: import_v36.z.string() }).partial();\nvar ChatCompletionContentPartFileWithTitle = import_v36.z.object({\n  file: ChatCompletionContentPartFileFile,\n  type: import_v36.z.literal(\"file\"),\n  cache_control: import_v36.z.object({\n    type: import_v36.z.literal(\"ephemeral\"),\n    ttl: import_v36.z.enum([\"5m\", \"1h\"]).optional()\n  }).optional()\n});\nvar ChatCompletionContentPart = import_v36.z.union([\n  ChatCompletionContentPartTextWithTitle,\n  ChatCompletionContentPartImageWithTitle,\n  ChatCompletionContentPartInputAudioWithTitle,\n  ChatCompletionContentPartFileWithTitle\n]);\nvar ChatCompletionContentPartText = import_v36.z.object({\n  text: import_v36.z.string().default(\"\"),\n  type: import_v36.z.literal(\"text\"),\n  cache_control: import_v36.z.object({\n    type: import_v36.z.literal(\"ephemeral\"),\n    ttl: import_v36.z.enum([\"5m\", \"1h\"]).optional()\n  }).optional()\n});\nvar ChatCompletionMessageToolCall = import_v36.z.object({\n  id: import_v36.z.string(),\n  function: import_v36.z.object({ arguments: import_v36.z.string(), name: import_v36.z.string() }),\n  type: import_v36.z.literal(\"function\")\n});\nvar ChatCompletionMessageReasoning = import_v36.z.object({ id: import_v36.z.string(), content: import_v36.z.string() }).partial();\nvar ChatCompletionMessageParam = import_v36.z.union([\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText)]),\n    role: import_v36.z.literal(\"system\"),\n    name: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPart)]),\n    role: import_v36.z.literal(\"user\"),\n    name: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    role: import_v36.z.literal(\"assistant\"),\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText), import_v36.z.null()]).optional(),\n    function_call: import_v36.z.object({ arguments: import_v36.z.string(), name: import_v36.z.string() }).optional(),\n    name: import_v36.z.string().optional(),\n    tool_calls: import_v36.z.array(ChatCompletionMessageToolCall).optional(),\n    reasoning: import_v36.z.array(ChatCompletionMessageReasoning).optional(),\n    reasoning_signature: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText)]),\n    role: import_v36.z.literal(\"tool\"),\n    tool_call_id: import_v36.z.string().default(\"\")\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    name: import_v36.z.string(),\n    role: import_v36.z.literal(\"function\")\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText)]),\n    role: import_v36.z.literal(\"developer\"),\n    name: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    role: import_v36.z.literal(\"model\"),\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  })\n]);\nvar ChatCompletionOpenAIMessageParam = import_v36.z.union([\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText)]),\n    role: import_v36.z.literal(\"system\"),\n    name: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPart)]),\n    role: import_v36.z.literal(\"user\"),\n    name: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    role: import_v36.z.literal(\"assistant\"),\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText), import_v36.z.null()]).optional(),\n    function_call: import_v36.z.object({ arguments: import_v36.z.string(), name: import_v36.z.string() }).optional(),\n    name: import_v36.z.string().optional(),\n    tool_calls: import_v36.z.array(ChatCompletionMessageToolCall).optional(),\n    reasoning: import_v36.z.array(ChatCompletionMessageReasoning).optional(),\n    reasoning_signature: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText)]),\n    role: import_v36.z.literal(\"tool\"),\n    tool_call_id: import_v36.z.string().default(\"\")\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    name: import_v36.z.string(),\n    role: import_v36.z.literal(\"function\")\n  }),\n  import_v36.z.object({\n    content: import_v36.z.union([import_v36.z.string(), import_v36.z.array(ChatCompletionContentPartText)]),\n    role: import_v36.z.literal(\"developer\"),\n    name: import_v36.z.string().optional()\n  })\n]);\nvar ChatCompletionTool = import_v36.z.object({\n  function: import_v36.z.object({\n    name: import_v36.z.string(),\n    description: import_v36.z.string().optional(),\n    parameters: import_v36.z.object({}).partial().passthrough().optional()\n  }),\n  type: import_v36.z.literal(\"function\")\n});\nvar CodeBundle = import_v36.z.object({\n  runtime_context: import_v36.z.object({\n    runtime: import_v36.z.enum([\"node\", \"python\", \"browser\", \"quickjs\"]),\n    version: import_v36.z.string()\n  }),\n  location: import_v36.z.union([\n    import_v36.z.object({\n      type: import_v36.z.literal(\"experiment\"),\n      eval_name: import_v36.z.string(),\n      position: import_v36.z.union([\n        import_v36.z.object({ type: import_v36.z.literal(\"task\") }),\n        import_v36.z.object({ type: import_v36.z.literal(\"scorer\"), index: import_v36.z.number().int().gte(0) }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"classifier\"),\n          index: import_v36.z.number().int().gte(0)\n        })\n      ])\n    }),\n    import_v36.z.object({ type: import_v36.z.literal(\"function\"), index: import_v36.z.number().int().gte(0) }),\n    import_v36.z.object({\n      type: import_v36.z.literal(\"sandbox\"),\n      sandbox_spec: import_v36.z.union([\n        import_v36.z.object({ provider: import_v36.z.literal(\"modal\"), snapshot_ref: import_v36.z.string() }),\n        import_v36.z.object({ provider: import_v36.z.literal(\"lambda\") })\n      ]),\n      entrypoints: import_v36.z.array(import_v36.z.string()).optional(),\n      eval_name: import_v36.z.string(),\n      parameters: import_v36.z.object({}).partial().passthrough().optional(),\n      evaluator_definition: import_v36.z.unknown().optional()\n    })\n  ]),\n  bundle_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  preview: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar Dataset = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n  url_slug: import_v36.z.string()\n});\nvar ObjectReferenceNullish = import_v36.z.union([\n  import_v36.z.object({\n    object_type: import_v36.z.enum([\n      \"project_logs\",\n      \"experiment\",\n      \"dataset\",\n      \"prompt\",\n      \"function\",\n      \"prompt_session\"\n    ]),\n    object_id: import_v36.z.string().uuid(),\n    id: import_v36.z.string(),\n    _xact_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.null()\n]);\nvar DatasetEvent = import_v36.z.object({\n  id: import_v36.z.string(),\n  _xact_id: import_v36.z.string(),\n  created: import_v36.z.string().datetime({ offset: true }),\n  _pagination_key: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  project_id: import_v36.z.string().uuid(),\n  dataset_id: import_v36.z.string().uuid(),\n  input: import_v36.z.unknown().optional(),\n  expected: import_v36.z.unknown().optional(),\n  metadata: import_v36.z.union([\n    import_v36.z.object({ model: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]) }).partial().passthrough(),\n    import_v36.z.null()\n  ]).optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  span_id: import_v36.z.string(),\n  root_span_id: import_v36.z.string(),\n  is_root: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  origin: ObjectReferenceNullish.optional(),\n  comments: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]).optional(),\n  audit_data: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]).optional(),\n  facets: import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.string(), import_v36.z.null()])), import_v36.z.null()]).optional(),\n  classifications: import_v36.z.union([\n    import_v36.z.record(\n      import_v36.z.array(\n        import_v36.z.object({\n          id: import_v36.z.string(),\n          label: import_v36.z.string().optional(),\n          confidence: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n          metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n          source: SavedFunctionId.and(\n            import_v36.z.union([\n              import_v36.z.object({\n                type: import_v36.z.literal(\"function\"),\n                id: import_v36.z.string(),\n                version: import_v36.z.string().optional()\n              }),\n              import_v36.z.object({\n                type: import_v36.z.literal(\"global\"),\n                name: import_v36.z.string(),\n                function_type: FunctionTypeEnum.optional().default(\"scorer\")\n              }),\n              import_v36.z.null()\n            ])\n          ).optional()\n        })\n      )\n    ),\n    import_v36.z.null()\n  ]).optional()\n});\nvar DatasetSnapshot = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  dataset_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n  xact_id: import_v36.z.string(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()])\n});\nvar EnvVar = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  object_type: import_v36.z.enum([\"organization\", \"project\", \"function\", \"mcp_server\"]),\n  object_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  secret_updated_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  secret_updated_by_user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  used: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n  preview_secret: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  secret_type: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  secret_category: import_v36.z.enum([\n    \"env_var\",\n    \"ai_provider\",\n    \"sandbox_provider\",\n    \"automation_integration\"\n  ]).optional().default(\"env_var\")\n});\nvar RepoInfo = import_v36.z.union([\n  import_v36.z.object({\n    commit: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    branch: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    tag: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    dirty: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    author_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    author_email: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    commit_message: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    commit_time: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    git_diff: import_v36.z.union([import_v36.z.string(), import_v36.z.null()])\n  }).partial(),\n  import_v36.z.null()\n]);\nvar Experiment = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  repo_info: RepoInfo.optional(),\n  commit: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  base_exp_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  dataset_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  dataset_version: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  internal_metadata: import_v36.z.union([\n    import_v36.z.object({\n      dataset_filter: import_v36.z.union([\n        import_v36.z.object({}).partial().passthrough(),\n        import_v36.z.null()\n      ])\n    }).partial().passthrough(),\n    import_v36.z.null()\n  ]).optional(),\n  parameters_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  parameters_version: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  public: import_v36.z.boolean(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional()\n});\nvar SpanType = import_v36.z.union([\n  import_v36.z.enum([\n    \"llm\",\n    \"score\",\n    \"function\",\n    \"eval\",\n    \"task\",\n    \"tool\",\n    \"automation\",\n    \"facet\",\n    \"preprocessor\",\n    \"classifier\",\n    \"review\",\n    \"question\",\n    \"log\"\n  ]),\n  import_v36.z.null()\n]);\nvar SpanAttributes = import_v36.z.union([\n  import_v36.z.object({\n    name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    type: SpanType,\n    purpose: import_v36.z.union([import_v36.z.literal(\"scorer\"), import_v36.z.null()]),\n    log_level: import_v36.z.union([\n      import_v36.z.enum([\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"]),\n      import_v36.z.null()\n    ])\n  }).partial().passthrough(),\n  import_v36.z.null()\n]);\nvar ExperimentEvent = import_v36.z.object({\n  id: import_v36.z.string(),\n  _xact_id: import_v36.z.string(),\n  created: import_v36.z.string().datetime({ offset: true }),\n  _pagination_key: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  project_id: import_v36.z.string().uuid(),\n  experiment_id: import_v36.z.string().uuid(),\n  input: import_v36.z.unknown().optional(),\n  output: import_v36.z.unknown().optional(),\n  expected: import_v36.z.unknown().optional(),\n  error: import_v36.z.unknown().optional(),\n  scores: import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.number(), import_v36.z.null()])), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([\n    import_v36.z.object({ model: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]) }).partial().passthrough(),\n    import_v36.z.null()\n  ]).optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  metrics: import_v36.z.union([import_v36.z.record(import_v36.z.number()), import_v36.z.null()]).optional(),\n  context: import_v36.z.union([\n    import_v36.z.object({\n      caller_functionname: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      caller_filename: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      caller_lineno: import_v36.z.union([import_v36.z.number(), import_v36.z.null()])\n    }).partial().passthrough(),\n    import_v36.z.null()\n  ]).optional(),\n  span_id: import_v36.z.string(),\n  span_parents: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  root_span_id: import_v36.z.string(),\n  span_attributes: SpanAttributes.optional(),\n  is_root: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  origin: ObjectReferenceNullish.optional(),\n  comments: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]).optional(),\n  audit_data: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]).optional(),\n  facets: import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.string(), import_v36.z.null()])), import_v36.z.null()]).optional(),\n  classifications: import_v36.z.union([\n    import_v36.z.record(\n      import_v36.z.array(\n        import_v36.z.object({\n          id: import_v36.z.string(),\n          label: import_v36.z.string().optional(),\n          confidence: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n          metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n          source: SavedFunctionId.and(\n            import_v36.z.union([\n              import_v36.z.object({\n                type: import_v36.z.literal(\"function\"),\n                id: import_v36.z.string(),\n                version: import_v36.z.string().optional()\n              }),\n              import_v36.z.object({\n                type: import_v36.z.literal(\"global\"),\n                name: import_v36.z.string(),\n                function_type: FunctionTypeEnum.optional().default(\"scorer\")\n              }),\n              import_v36.z.null()\n            ])\n          ).optional()\n        })\n      )\n    ),\n    import_v36.z.null()\n  ]).optional()\n});\nvar ExtendedSavedFunctionId = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"function\"),\n    id: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"global\"),\n    name: import_v36.z.string(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\")\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"slug\"),\n    project_id: import_v36.z.string(),\n    slug: import_v36.z.string()\n  })\n]);\nvar FacetData = import_v36.z.object({\n  type: import_v36.z.literal(\"facet\"),\n  preprocessor: FacetPreprocessorId.optional(),\n  prompt: import_v36.z.string(),\n  model: import_v36.z.string().optional(),\n  embedding_model: import_v36.z.string().optional(),\n  no_match_pattern: import_v36.z.string().optional()\n});\nvar PromptBlockDataNullish = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"chat\"),\n    messages: import_v36.z.array(ChatCompletionMessageParam),\n    tools: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({ type: import_v36.z.literal(\"completion\"), content: import_v36.z.string() }),\n  import_v36.z.null()\n]);\nvar ModelParams = import_v36.z.union([\n  import_v36.z.object({\n    use_cache: import_v36.z.boolean(),\n    reasoning_enabled: import_v36.z.boolean(),\n    reasoning_budget: import_v36.z.number(),\n    temperature: import_v36.z.number(),\n    top_p: import_v36.z.number(),\n    max_tokens: import_v36.z.number(),\n    max_completion_tokens: import_v36.z.number(),\n    frequency_penalty: import_v36.z.number(),\n    presence_penalty: import_v36.z.number(),\n    response_format: ResponseFormatNullish,\n    tool_choice: import_v36.z.union([\n      import_v36.z.literal(\"auto\"),\n      import_v36.z.literal(\"none\"),\n      import_v36.z.literal(\"required\"),\n      import_v36.z.object({\n        type: import_v36.z.literal(\"function\"),\n        function: import_v36.z.object({ name: import_v36.z.string() })\n      })\n    ]),\n    function_call: import_v36.z.union([\n      import_v36.z.literal(\"auto\"),\n      import_v36.z.literal(\"none\"),\n      import_v36.z.object({ name: import_v36.z.string() })\n    ]),\n    n: import_v36.z.number(),\n    stop: import_v36.z.array(import_v36.z.string()),\n    reasoning_effort: import_v36.z.enum([\"none\", \"minimal\", \"low\", \"medium\", \"high\"]),\n    chat_template_kwargs: import_v36.z.object({ enable_thinking: import_v36.z.boolean() }).partial().passthrough(),\n    verbosity: import_v36.z.enum([\"low\", \"medium\", \"high\"])\n  }).partial().passthrough(),\n  import_v36.z.object({\n    use_cache: import_v36.z.boolean().optional(),\n    reasoning_enabled: import_v36.z.boolean().optional(),\n    reasoning_budget: import_v36.z.number().optional(),\n    max_tokens: import_v36.z.number(),\n    temperature: import_v36.z.number(),\n    top_p: import_v36.z.number().optional(),\n    top_k: import_v36.z.number().optional(),\n    stop_sequences: import_v36.z.array(import_v36.z.string()).optional(),\n    max_tokens_to_sample: import_v36.z.number().optional()\n  }).passthrough(),\n  import_v36.z.object({\n    use_cache: import_v36.z.boolean(),\n    reasoning_enabled: import_v36.z.boolean(),\n    reasoning_budget: import_v36.z.number(),\n    temperature: import_v36.z.number(),\n    maxOutputTokens: import_v36.z.number(),\n    topP: import_v36.z.number(),\n    topK: import_v36.z.number()\n  }).partial().passthrough(),\n  import_v36.z.object({\n    use_cache: import_v36.z.boolean(),\n    reasoning_enabled: import_v36.z.boolean(),\n    reasoning_budget: import_v36.z.number(),\n    temperature: import_v36.z.number(),\n    topK: import_v36.z.number()\n  }).partial().passthrough(),\n  import_v36.z.object({\n    use_cache: import_v36.z.boolean(),\n    reasoning_enabled: import_v36.z.boolean(),\n    reasoning_budget: import_v36.z.number()\n  }).partial().passthrough()\n]);\nvar PromptOptionsNullish = import_v36.z.union([\n  import_v36.z.object({\n    model: import_v36.z.string(),\n    params: ModelParams,\n    position: import_v36.z.string(),\n    endpoint_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()])\n  }).partial(),\n  import_v36.z.null()\n]);\nvar PromptParserNullish = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"llm_classifier\"),\n    use_cot: import_v36.z.boolean(),\n    choice_scores: import_v36.z.record(import_v36.z.number().gte(0).lte(1)).optional(),\n    choice: import_v36.z.array(import_v36.z.string()).optional(),\n    allow_no_match: import_v36.z.boolean().optional(),\n    allow_skip: import_v36.z.boolean().optional()\n  }),\n  import_v36.z.null()\n]);\nvar PreprocessorId = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"function\"),\n    id: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"global\"),\n    name: import_v36.z.string(),\n    function_type: import_v36.z.literal(\"preprocessor\").optional().default(\"preprocessor\")\n  }),\n  import_v36.z.object({ type: import_v36.z.literal(\"inline\"), code: import_v36.z.string().min(1) }),\n  import_v36.z.null()\n]);\nvar PromptDataNullish = import_v36.z.union([\n  import_v36.z.object({\n    prompt: PromptBlockDataNullish,\n    options: PromptOptionsNullish,\n    parser: PromptParserNullish,\n    preprocessor: PreprocessorId,\n    tool_functions: import_v36.z.union([import_v36.z.array(SavedFunctionId), import_v36.z.null()]),\n    template_format: import_v36.z.union([\n      import_v36.z.enum([\"mustache\", \"nunjucks\", \"none\"]),\n      import_v36.z.null()\n    ]),\n    mcp: import_v36.z.union([\n      import_v36.z.record(\n        import_v36.z.union([\n          import_v36.z.object({\n            type: import_v36.z.literal(\"id\"),\n            id: import_v36.z.string().uuid(),\n            is_disabled: import_v36.z.boolean().optional(),\n            enabled_tools: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional()\n          }),\n          import_v36.z.object({\n            type: import_v36.z.literal(\"url\"),\n            url: import_v36.z.string(),\n            is_disabled: import_v36.z.boolean().optional(),\n            enabled_tools: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional()\n          })\n        ])\n      ),\n      import_v36.z.null()\n    ]),\n    origin: import_v36.z.union([\n      import_v36.z.object({\n        prompt_id: import_v36.z.string(),\n        project_id: import_v36.z.string(),\n        prompt_version: import_v36.z.string()\n      }).partial(),\n      import_v36.z.null()\n    ])\n  }).partial(),\n  import_v36.z.null()\n]);\nvar FunctionTypeEnumNullish = import_v36.z.union([\n  import_v36.z.enum([\n    \"llm\",\n    \"scorer\",\n    \"task\",\n    \"tool\",\n    \"custom_view\",\n    \"preprocessor\",\n    \"facet\",\n    \"classifier\",\n    \"tag\",\n    \"parameters\",\n    \"sandbox\"\n  ]),\n  import_v36.z.null()\n]);\nvar FunctionIdRef = import_v36.z.object({}).partial().passthrough();\nvar PromptBlockData = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"chat\"),\n    messages: import_v36.z.array(ChatCompletionMessageParam),\n    tools: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({ type: import_v36.z.literal(\"completion\"), content: import_v36.z.string() })\n]);\nvar GraphNode = import_v36.z.union([\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"function\"),\n    function: FunctionIdRef\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"input\")\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"output\")\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"literal\"),\n    value: import_v36.z.unknown().optional()\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"btql\"),\n    expr: import_v36.z.string()\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"gate\"),\n    condition: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"aggregator\")\n  }),\n  import_v36.z.object({\n    description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    position: import_v36.z.union([import_v36.z.object({ x: import_v36.z.number(), y: import_v36.z.number() }), import_v36.z.null()]).optional(),\n    type: import_v36.z.literal(\"prompt_template\"),\n    prompt: PromptBlockData\n  })\n]);\nvar GraphEdge = import_v36.z.object({\n  source: import_v36.z.object({ node: import_v36.z.string().max(1024), variable: import_v36.z.string() }),\n  target: import_v36.z.object({ node: import_v36.z.string().max(1024), variable: import_v36.z.string() }),\n  purpose: import_v36.z.enum([\"control\", \"data\", \"messages\"])\n});\nvar GraphData = import_v36.z.object({\n  type: import_v36.z.literal(\"graph\"),\n  nodes: import_v36.z.record(GraphNode),\n  edges: import_v36.z.record(GraphEdge)\n});\nvar FunctionData = import_v36.z.union([\n  import_v36.z.object({ type: import_v36.z.literal(\"prompt\") }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"code\"),\n    data: import_v36.z.union([\n      import_v36.z.object({ type: import_v36.z.literal(\"bundle\") }).and(CodeBundle),\n      import_v36.z.object({\n        type: import_v36.z.literal(\"inline\"),\n        runtime_context: import_v36.z.object({\n          runtime: import_v36.z.enum([\"node\", \"python\", \"browser\", \"quickjs\"]),\n          version: import_v36.z.string()\n        }),\n        code: import_v36.z.string(),\n        code_hash: import_v36.z.string().optional()\n      })\n    ])\n  }),\n  GraphData,\n  import_v36.z.object({\n    type: import_v36.z.literal(\"remote_eval\"),\n    endpoint: import_v36.z.string(),\n    eval_name: import_v36.z.string(),\n    parameters: import_v36.z.object({}).partial().passthrough(),\n    parameters_version: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"global\"),\n    name: import_v36.z.string(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\"),\n    config: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional()\n  }),\n  FacetData,\n  BatchedFacetData,\n  import_v36.z.object({\n    type: import_v36.z.literal(\"parameters\"),\n    data: import_v36.z.object({}).partial().passthrough(),\n    __schema: import_v36.z.object({\n      type: import_v36.z.literal(\"object\"),\n      properties: import_v36.z.record(import_v36.z.object({}).partial().passthrough()),\n      required: import_v36.z.array(import_v36.z.string()).optional(),\n      additionalProperties: import_v36.z.boolean().optional()\n    })\n  }),\n  TopicMapData.and(import_v36.z.unknown())\n]);\nvar Function = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  _xact_id: import_v36.z.string(),\n  project_id: import_v36.z.string().uuid(),\n  log_id: import_v36.z.literal(\"p\"),\n  org_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  slug: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  prompt_data: PromptDataNullish.optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n  function_type: FunctionTypeEnumNullish.optional(),\n  function_data: FunctionData,\n  origin: import_v36.z.union([\n    import_v36.z.object({\n      object_type: AclObjectType.and(import_v36.z.string()),\n      object_id: import_v36.z.string().uuid(),\n      internal: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional()\n    }),\n    import_v36.z.null()\n  ]).optional(),\n  function_schema: import_v36.z.union([\n    import_v36.z.object({ parameters: import_v36.z.unknown(), returns: import_v36.z.unknown() }).partial(),\n    import_v36.z.null()\n  ]).optional()\n});\nvar FunctionFormat = import_v36.z.enum([\n  \"llm\",\n  \"code\",\n  \"global\",\n  \"graph\",\n  \"topic_map\"\n]);\nvar PromptData = import_v36.z.object({\n  prompt: PromptBlockDataNullish,\n  options: PromptOptionsNullish,\n  parser: PromptParserNullish,\n  preprocessor: PreprocessorId,\n  tool_functions: import_v36.z.union([import_v36.z.array(SavedFunctionId), import_v36.z.null()]),\n  template_format: import_v36.z.union([\n    import_v36.z.enum([\"mustache\", \"nunjucks\", \"none\"]),\n    import_v36.z.null()\n  ]),\n  mcp: import_v36.z.union([\n    import_v36.z.record(\n      import_v36.z.union([\n        import_v36.z.object({\n          type: import_v36.z.literal(\"id\"),\n          id: import_v36.z.string().uuid(),\n          is_disabled: import_v36.z.boolean().optional(),\n          enabled_tools: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional()\n        }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"url\"),\n          url: import_v36.z.string(),\n          is_disabled: import_v36.z.boolean().optional(),\n          enabled_tools: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional()\n        })\n      ])\n    ),\n    import_v36.z.null()\n  ]),\n  origin: import_v36.z.union([\n    import_v36.z.object({\n      prompt_id: import_v36.z.string(),\n      project_id: import_v36.z.string(),\n      prompt_version: import_v36.z.string()\n    }).partial(),\n    import_v36.z.null()\n  ])\n}).partial();\nvar FunctionId = import_v36.z.union([\n  import_v36.z.object({ function_id: import_v36.z.string(), version: import_v36.z.string().optional() }),\n  import_v36.z.object({\n    project_name: import_v36.z.string(),\n    slug: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    global_function: import_v36.z.string(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\")\n  }),\n  import_v36.z.object({\n    prompt_session_id: import_v36.z.string(),\n    prompt_session_function_id: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    inline_context: import_v36.z.object({\n      runtime: import_v36.z.enum([\"node\", \"python\", \"browser\", \"quickjs\"]),\n      version: import_v36.z.string()\n    }),\n    code: import_v36.z.string(),\n    function_type: FunctionTypeEnum.and(import_v36.z.unknown()).optional(),\n    name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.object({\n    inline_prompt: PromptData.optional(),\n    inline_function: import_v36.z.object({}).partial().passthrough(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\"),\n    name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.object({\n    inline_prompt: PromptData,\n    function_type: FunctionTypeEnum.optional().default(\"scorer\"),\n    name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n  })\n]);\nvar FunctionObjectType = import_v36.z.enum([\n  \"prompt\",\n  \"tool\",\n  \"scorer\",\n  \"task\",\n  \"workflow\",\n  \"custom_view\",\n  \"preprocessor\",\n  \"facet\",\n  \"classifier\",\n  \"parameters\",\n  \"sandbox\"\n]);\nvar FunctionOutputType = import_v36.z.enum([\n  \"completion\",\n  \"score\",\n  \"facet\",\n  \"classification\",\n  \"any\"\n]);\nvar GitMetadataSettings = import_v36.z.object({\n  collect: import_v36.z.enum([\"all\", \"none\", \"some\"]),\n  fields: import_v36.z.array(\n    import_v36.z.enum([\n      \"commit\",\n      \"branch\",\n      \"tag\",\n      \"dirty\",\n      \"author_name\",\n      \"author_email\",\n      \"commit_message\",\n      \"commit_time\",\n      \"git_diff\"\n    ])\n  ).optional()\n});\nvar Group = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  org_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  member_users: import_v36.z.union([import_v36.z.array(import_v36.z.string().uuid()), import_v36.z.null()]).optional(),\n  member_groups: import_v36.z.union([import_v36.z.array(import_v36.z.string().uuid()), import_v36.z.null()]).optional()\n});\nvar GroupScope = import_v36.z.object({\n  type: import_v36.z.literal(\"group\"),\n  group_by: import_v36.z.string(),\n  interval_seconds: import_v36.z.number().gte(1).optional(),\n  max_traces: import_v36.z.number().int().gte(1).lte(64).optional(),\n  placement: import_v36.z.enum([\"first\", \"each\"]),\n  idle_seconds: import_v36.z.number().optional()\n});\nvar IfExists = import_v36.z.enum([\"error\", \"ignore\", \"replace\"]);\nvar ImageRenderingMode = import_v36.z.union([\n  import_v36.z.enum([\"auto\", \"click_to_load\", \"blocked\"]),\n  import_v36.z.null()\n]);\nvar InvokeParent = import_v36.z.union([\n  import_v36.z.object({\n    object_type: import_v36.z.enum([\"project_logs\", \"experiment\", \"playground_logs\"]),\n    object_id: import_v36.z.string(),\n    row_ids: import_v36.z.union([\n      import_v36.z.object({\n        id: import_v36.z.string(),\n        span_id: import_v36.z.string(),\n        root_span_id: import_v36.z.string()\n      }),\n      import_v36.z.null()\n    ]).optional(),\n    propagated_event: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.string()\n]);\nvar StreamingMode = import_v36.z.union([\n  import_v36.z.enum([\"auto\", \"parallel\", \"json\", \"text\"]),\n  import_v36.z.null()\n]);\nvar InvokeFunction = FunctionId.and(\n  import_v36.z.object({\n    input: import_v36.z.unknown(),\n    expected: import_v36.z.unknown(),\n    metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]),\n    tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]),\n    messages: import_v36.z.array(ChatCompletionMessageParam),\n    parent: InvokeParent,\n    stream: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    mode: StreamingMode,\n    strict: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    mcp_auth: import_v36.z.record(import_v36.z.object({ oauth_token: import_v36.z.string() }).partial()),\n    overrides: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]),\n    endpoint_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()])\n  }).partial()\n);\nvar MCPServer = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  url: import_v36.z.string()\n});\nvar MessageRole = import_v36.z.enum([\n  \"system\",\n  \"user\",\n  \"assistant\",\n  \"function\",\n  \"tool\",\n  \"model\",\n  \"developer\"\n]);\nvar NamedScore = import_v36.z.object({\n  name: import_v36.z.string(),\n  score: import_v36.z.union([import_v36.z.number(), import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.object({}).partial().passthrough().optional()\n});\nvar NullableSavedFunctionId = import_v36.z.union([\n  import_v36.z.object({\n    type: import_v36.z.literal(\"function\"),\n    id: import_v36.z.string(),\n    version: import_v36.z.string().optional()\n  }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"global\"),\n    name: import_v36.z.string(),\n    function_type: FunctionTypeEnum.optional().default(\"scorer\")\n  }),\n  import_v36.z.null()\n]);\nvar ObjectReference = import_v36.z.object({\n  object_type: import_v36.z.enum([\n    \"project_logs\",\n    \"experiment\",\n    \"dataset\",\n    \"prompt\",\n    \"function\",\n    \"prompt_session\"\n  ]),\n  object_id: import_v36.z.string().uuid(),\n  id: import_v36.z.string(),\n  _xact_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar SpanScope = import_v36.z.object({ type: import_v36.z.literal(\"span\") });\nvar TraceScope = import_v36.z.object({\n  type: import_v36.z.literal(\"trace\"),\n  idle_seconds: import_v36.z.number().optional()\n});\nvar OnlineScoreConfig = import_v36.z.union([\n  import_v36.z.object({\n    status: AutomationStatus.optional(),\n    sampling_rate: import_v36.z.number().gte(0).lte(1),\n    scorers: import_v36.z.array(SavedFunctionId),\n    btql_filter: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n    apply_to_root_span: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n    apply_to_span_names: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n    skip_logging: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n    scope: import_v36.z.union([SpanScope, TraceScope, GroupScope, import_v36.z.null()]).optional()\n  }),\n  import_v36.z.null()\n]);\nvar Organization = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  api_url: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  is_universal_api: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  is_dataplane_private: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  proxy_url: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  realtime_url: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  archived_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  image_rendering_mode: ImageRenderingMode.optional()\n});\nvar RetentionObjectType = import_v36.z.enum([\n  \"project_logs\",\n  \"experiment\",\n  \"dataset\"\n]);\nvar OrgAutomation = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  org_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  config: import_v36.z.object({\n    event_type: import_v36.z.literal(\"retention\"),\n    object_type: RetentionObjectType,\n    retention_days: import_v36.z.number().int().gte(0)\n  })\n});\nvar ProjectSettings = import_v36.z.union([\n  import_v36.z.object({\n    comparison_key: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    baseline_experiment_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    spanFieldOrder: import_v36.z.union([\n      import_v36.z.array(\n        import_v36.z.object({\n          object_type: import_v36.z.string(),\n          column_id: import_v36.z.string(),\n          position: import_v36.z.string(),\n          layout: import_v36.z.union([import_v36.z.literal(\"full\"), import_v36.z.literal(\"two_column\"), import_v36.z.null()]).optional()\n        })\n      ),\n      import_v36.z.null()\n    ]),\n    remote_eval_sources: import_v36.z.union([\n      import_v36.z.array(\n        import_v36.z.object({\n          url: import_v36.z.string(),\n          name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n          description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n        })\n      ),\n      import_v36.z.null()\n    ]),\n    disable_realtime_queries: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    monitor_charts_use_metrics_start: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    coding_agent_insights_dashboard: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    blind_reviews: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    require_all_human_review_scores: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    default_preprocessor: NullableSavedFunctionId\n  }).partial(),\n  import_v36.z.null()\n]);\nvar Project = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  org_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  settings: ProjectSettings.optional()\n});\nvar WindowedAutomationConfig = import_v36.z.object({\n  event_type: import_v36.z.literal(\"windowed\"),\n  product_origin: import_v36.z.union([import_v36.z.literal(\"patterns\"), import_v36.z.null()]).optional(),\n  status: AutomationStatus.optional(),\n  threshold: import_v36.z.object({\n    calculation: import_v36.z.object({\n      type: import_v36.z.literal(\"btql\"),\n      btql_query: import_v36.z.string().min(1),\n      output: import_v36.z.object({\n        type: import_v36.z.literal(\"scalar\"),\n        value_column: import_v36.z.string().min(1)\n      })\n    }),\n    policy: import_v36.z.object({\n      condition: import_v36.z.object({\n        type: import_v36.z.literal(\"threshold\"),\n        operator: import_v36.z.enum([\"lt\", \"lte\", \"gt\", \"gte\", \"eq\", \"neq\"]),\n        threshold: import_v36.z.number()\n      }),\n      pending_seconds: import_v36.z.number().int().gte(0).lte(2592e3),\n      no_data_behavior: import_v36.z.enum([\"keep_last\", \"resolve\", \"alert\"]),\n      renotify_interval_seconds: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n      notify_on_recovery: import_v36.z.boolean().optional().default(true)\n    })\n  }).optional(),\n  window: import_v36.z.object({\n    window_seconds: import_v36.z.number().int().gte(1).lte(2592e3),\n    schedule: import_v36.z.union([\n      import_v36.z.object({\n        type: import_v36.z.literal(\"interval\"),\n        evaluation_interval_seconds: import_v36.z.number().int().gte(1).lte(2592e3)\n      }),\n      import_v36.z.object({\n        type: import_v36.z.literal(\"cron\"),\n        cron_expression: import_v36.z.string().min(1),\n        timezone: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n      })\n    ]),\n    evaluation_delay_seconds: import_v36.z.number().int().gte(0).lte(2592e3)\n  }),\n  loop: import_v36.z.object({\n    prompt: import_v36.z.string().min(1).max(1e4),\n    include_trigger_input: import_v36.z.boolean().optional().default(false),\n    agent_slug: import_v36.z.string().min(1),\n    auto_approve_tools: import_v36.z.array(import_v36.z.string().min(1)).optional().default([]),\n    harness: import_v36.z.enum([\"codex\", \"native\", \"claude-code\"]).optional(),\n    model: import_v36.z.string().min(1).optional(),\n    endpoint_name: import_v36.z.string().min(1).optional(),\n    reasoning_effort: import_v36.z.enum([\"none\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]).optional()\n  }).optional(),\n  actions: import_v36.z.array(\n    import_v36.z.union([\n      import_v36.z.object({\n        type: import_v36.z.literal(\"webhook\"),\n        url: import_v36.z.string(),\n        formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n      }),\n      import_v36.z.object({\n        type: import_v36.z.literal(\"slack\"),\n        workspace_id: import_v36.z.string(),\n        channel: import_v36.z.string(),\n        message_template: import_v36.z.string().optional(),\n        formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n      }),\n      import_v36.z.object({\n        type: import_v36.z.literal(\"pagerduty\"),\n        routing_key_secret_name: import_v36.z.string().uuid(),\n        severity: import_v36.z.enum([\"critical\", \"error\", \"warning\", \"info\"]),\n        formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n      })\n    ])\n  ).max(20).optional().default([])\n});\nvar TopicAutomationFacetModel = import_v36.z.union([\n  import_v36.z.enum([\"brain-facet-latest\", \"brain-facet-1\", \"brain-facet-2\"]),\n  import_v36.z.null()\n]);\nvar TopicMapFunctionAutomation = import_v36.z.object({\n  function: SavedFunctionId.and(import_v36.z.unknown()),\n  btql_filter: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar TopicAutomationDataScope = import_v36.z.union([\n  import_v36.z.object({ type: import_v36.z.literal(\"project_logs\") }),\n  import_v36.z.object({ type: import_v36.z.literal(\"project_experiments\") }),\n  import_v36.z.object({ type: import_v36.z.literal(\"experiment\"), experiment_id: import_v36.z.string() }),\n  import_v36.z.null()\n]);\nvar TopicAutomationConfig = import_v36.z.object({\n  event_type: import_v36.z.literal(\"topic\"),\n  status: AutomationStatus.optional(),\n  sampling_rate: import_v36.z.number().gte(0).lte(1),\n  facet_model: TopicAutomationFacetModel.optional(),\n  facet_functions: import_v36.z.array(SavedFunctionId),\n  topic_map_functions: import_v36.z.array(TopicMapFunctionAutomation),\n  scope: import_v36.z.union([SpanScope, TraceScope, GroupScope, import_v36.z.null()]).optional(),\n  data_scope: TopicAutomationDataScope.optional(),\n  btql_filter: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  rerun_seconds: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n  relabel_overlap_seconds: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n  backfill_time_range: import_v36.z.union([\n    import_v36.z.string(),\n    import_v36.z.object({ from: import_v36.z.string(), to: import_v36.z.string() }),\n    import_v36.z.null()\n  ]).optional()\n});\nvar TopicDigestAutomationConfig = import_v36.z.object({\n  event_type: import_v36.z.literal(\"topic_digest\"),\n  status: AutomationStatus.optional(),\n  window_seconds: import_v36.z.number().int().gte(3600).lte(2592e3).optional().default(86400),\n  scheduled_time_minutes_utc: import_v36.z.number().int().gte(0).lte(1439),\n  action: import_v36.z.object({\n    type: import_v36.z.literal(\"slack\"),\n    workspace_id: import_v36.z.string(),\n    channel: import_v36.z.string(),\n    message_template: import_v36.z.string().optional(),\n    formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n  }),\n  topic_map_function_ids: import_v36.z.array(import_v36.z.string()).max(10).optional()\n});\nvar ProjectAutomation = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  config: import_v36.z.union([\n    import_v36.z.object({\n      event_type: import_v36.z.literal(\"logs\"),\n      status: AutomationStatus.optional(),\n      btql_filter: import_v36.z.string(),\n      interval_seconds: import_v36.z.number().gte(1).lte(2592e3),\n      action: import_v36.z.union([\n        import_v36.z.object({\n          type: import_v36.z.literal(\"webhook\"),\n          url: import_v36.z.string(),\n          formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n        }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"slack\"),\n          workspace_id: import_v36.z.string(),\n          channel: import_v36.z.string(),\n          message_template: import_v36.z.string().optional(),\n          formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n        }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"pagerduty\"),\n          routing_key_secret_name: import_v36.z.string().uuid(),\n          severity: import_v36.z.enum([\"critical\", \"error\", \"warning\", \"info\"]),\n          formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n        })\n      ])\n    }),\n    import_v36.z.object({\n      event_type: import_v36.z.literal(\"btql_export\"),\n      status: AutomationStatus.optional(),\n      export_definition: import_v36.z.union([\n        import_v36.z.object({ type: import_v36.z.literal(\"log_traces\") }),\n        import_v36.z.object({ type: import_v36.z.literal(\"log_spans\") }),\n        import_v36.z.object({ type: import_v36.z.literal(\"btql_query\"), btql_query: import_v36.z.string() })\n      ]),\n      scope: import_v36.z.union([SpanScope, TraceScope, GroupScope, import_v36.z.null()]).optional(),\n      export_path: import_v36.z.string(),\n      format: import_v36.z.enum([\"jsonl\", \"parquet\"]),\n      interval_seconds: import_v36.z.number().gte(1).lte(2592e3),\n      credentials: import_v36.z.union([\n        import_v36.z.object({\n          type: import_v36.z.literal(\"aws_iam\"),\n          role_arn: import_v36.z.string(),\n          external_id: import_v36.z.string()\n        }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"gcp_service_account\"),\n          service_account_email: import_v36.z.string(),\n          credential_name: import_v36.z.string().min(1).optional()\n        })\n      ]),\n      batch_size: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional()\n    }),\n    import_v36.z.object({\n      event_type: import_v36.z.literal(\"async_query\"),\n      status: AutomationStatus.optional(),\n      created_by_user_id: import_v36.z.string().uuid(),\n      object_type: import_v36.z.enum([\n        \"project_logs\",\n        \"experiment\",\n        \"dataset\",\n        \"playground_logs\"\n      ]),\n      object_id: import_v36.z.string(),\n      query: import_v36.z.string(),\n      format: import_v36.z.literal(\"jsonl\"),\n      batch_size: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional()\n    }),\n    import_v36.z.object({\n      event_type: import_v36.z.literal(\"retention\"),\n      object_type: RetentionObjectType,\n      retention_days: import_v36.z.number().int().gte(0)\n    }),\n    import_v36.z.object({\n      event_type: import_v36.z.literal(\"environment_update\"),\n      status: AutomationStatus.optional(),\n      environment_filter: import_v36.z.array(import_v36.z.string()).optional(),\n      action: import_v36.z.union([\n        import_v36.z.object({\n          type: import_v36.z.literal(\"webhook\"),\n          url: import_v36.z.string(),\n          formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n        }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"slack\"),\n          workspace_id: import_v36.z.string(),\n          channel: import_v36.z.string(),\n          message_template: import_v36.z.string().optional(),\n          formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n        }),\n        import_v36.z.object({\n          type: import_v36.z.literal(\"pagerduty\"),\n          routing_key_secret_name: import_v36.z.string().uuid(),\n          severity: import_v36.z.enum([\"critical\", \"error\", \"warning\", \"info\"]),\n          formatting_prompt: import_v36.z.string().min(1).max(1e4).optional()\n        })\n      ])\n    }),\n    WindowedAutomationConfig,\n    TopicAutomationConfig,\n    TopicDigestAutomationConfig\n  ]),\n  runtime_block: import_v36.z.object({ reason: import_v36.z.string(), model: import_v36.z.string() }).optional()\n});\nvar ProjectGroup = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  org_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  member_projects: import_v36.z.array(import_v36.z.string().uuid())\n});\nvar ProjectLogsEvent = import_v36.z.object({\n  id: import_v36.z.string(),\n  _xact_id: import_v36.z.string(),\n  _pagination_key: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.string().datetime({ offset: true }),\n  org_id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  log_id: import_v36.z.literal(\"g\"),\n  input: import_v36.z.unknown().optional(),\n  output: import_v36.z.unknown().optional(),\n  expected: import_v36.z.unknown().optional(),\n  error: import_v36.z.unknown().optional(),\n  scores: import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.number(), import_v36.z.null()])), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([\n    import_v36.z.object({ model: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]) }).partial().passthrough(),\n    import_v36.z.null()\n  ]).optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  metrics: import_v36.z.union([import_v36.z.record(import_v36.z.number()), import_v36.z.null()]).optional(),\n  context: import_v36.z.union([\n    import_v36.z.object({\n      caller_functionname: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      caller_filename: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      caller_lineno: import_v36.z.union([import_v36.z.number(), import_v36.z.null()])\n    }).partial().passthrough(),\n    import_v36.z.null()\n  ]).optional(),\n  span_id: import_v36.z.string(),\n  span_parents: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  root_span_id: import_v36.z.string(),\n  is_root: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  span_attributes: SpanAttributes.optional(),\n  origin: ObjectReferenceNullish.optional(),\n  comments: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]).optional(),\n  audit_data: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]).optional(),\n  _async_scoring_state: import_v36.z.unknown().optional(),\n  facets: import_v36.z.union([import_v36.z.record(import_v36.z.union([import_v36.z.string(), import_v36.z.null()])), import_v36.z.null()]).optional(),\n  classifications: import_v36.z.union([\n    import_v36.z.record(\n      import_v36.z.array(\n        import_v36.z.object({\n          id: import_v36.z.string(),\n          label: import_v36.z.string().optional(),\n          confidence: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n          metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n          source: SavedFunctionId.and(\n            import_v36.z.union([\n              import_v36.z.object({\n                type: import_v36.z.literal(\"function\"),\n                id: import_v36.z.string(),\n                version: import_v36.z.string().optional()\n              }),\n              import_v36.z.object({\n                type: import_v36.z.literal(\"global\"),\n                name: import_v36.z.string(),\n                function_type: FunctionTypeEnum.optional().default(\"scorer\")\n              }),\n              import_v36.z.null()\n            ])\n          ).optional()\n        })\n      )\n    ),\n    import_v36.z.null()\n  ]).optional()\n});\nvar ProjectScoreType = import_v36.z.enum([\n  \"slider\",\n  \"categorical\",\n  \"weighted\",\n  \"minimum\",\n  \"maximum\",\n  \"online\",\n  \"free-form\"\n]);\nvar ProjectScoreCategory = import_v36.z.object({\n  name: import_v36.z.string(),\n  value: import_v36.z.number()\n});\nvar ProjectScoreCategories = import_v36.z.union([\n  import_v36.z.array(ProjectScoreCategory),\n  import_v36.z.record(import_v36.z.number()),\n  import_v36.z.array(import_v36.z.string()),\n  import_v36.z.null()\n]);\nvar ProjectScoreCondition = import_v36.z.union([\n  import_v36.z.object({\n    when: import_v36.z.object({\n      clauses: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]),\n      subspan_clauses: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]),\n      trace_clauses: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()])\n    }).partial(),\n    behavior: import_v36.z.literal(\"hidden\").optional().default(\"hidden\")\n  }),\n  import_v36.z.null()\n]);\nvar ProjectScoreConfig = import_v36.z.union([\n  import_v36.z.object({\n    multi_select: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    destination: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    visibility: import_v36.z.union([\n      import_v36.z.object({\n        users: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]),\n        groups: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()])\n      }).partial(),\n      import_v36.z.null()\n    ]),\n    online: OnlineScoreConfig,\n    condition: ProjectScoreCondition,\n    object_types: import_v36.z.union([\n      import_v36.z.array(import_v36.z.enum([\"project_logs\", \"dataset\", \"experiment\"])),\n      import_v36.z.null()\n    ])\n  }).partial(),\n  import_v36.z.null()\n]);\nvar ProjectScore = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  score_type: ProjectScoreType,\n  categories: ProjectScoreCategories.optional(),\n  config: ProjectScoreConfig.optional(),\n  position: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar ProjectTag = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  color: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  position: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar Prompt = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  _xact_id: import_v36.z.string(),\n  project_id: import_v36.z.string().uuid(),\n  log_id: import_v36.z.literal(\"p\"),\n  org_id: import_v36.z.string().uuid(),\n  name: import_v36.z.string(),\n  slug: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  prompt_data: PromptDataNullish.optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional(),\n  metadata: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional(),\n  function_type: FunctionTypeEnumNullish.optional()\n});\nvar PromptOptions = import_v36.z.object({\n  model: import_v36.z.string(),\n  params: ModelParams,\n  position: import_v36.z.string(),\n  endpoint_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()])\n}).partial();\nvar PromptSessionEvent = import_v36.z.object({\n  id: import_v36.z.string(),\n  _xact_id: import_v36.z.string(),\n  created: import_v36.z.string().datetime({ offset: true }),\n  _pagination_key: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  project_id: import_v36.z.string().uuid(),\n  prompt_session_id: import_v36.z.string().uuid(),\n  prompt_session_data: import_v36.z.unknown().optional(),\n  prompt_data: import_v36.z.unknown().optional(),\n  function_data: import_v36.z.unknown().optional(),\n  function_type: FunctionTypeEnumNullish.optional(),\n  object_data: import_v36.z.unknown().optional(),\n  completion: import_v36.z.unknown().optional(),\n  tags: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]).optional()\n});\nvar ResponseFormat = import_v36.z.union([\n  import_v36.z.object({ type: import_v36.z.literal(\"json_object\") }),\n  import_v36.z.object({\n    type: import_v36.z.literal(\"json_schema\"),\n    json_schema: ResponseFormatJsonSchema\n  }),\n  import_v36.z.object({ type: import_v36.z.literal(\"text\") })\n]);\nvar Role = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  org_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  member_permissions: import_v36.z.union([\n    import_v36.z.array(\n      import_v36.z.object({\n        permission: Permission,\n        restrict_object_type: AclObjectType.optional()\n      })\n    ),\n    import_v36.z.null()\n  ]).optional(),\n  member_roles: import_v36.z.union([import_v36.z.array(import_v36.z.string().uuid()), import_v36.z.null()]).optional()\n});\nvar RunEval = import_v36.z.object({\n  project_id: import_v36.z.string(),\n  data: import_v36.z.union([\n    import_v36.z.object({\n      dataset_id: import_v36.z.string(),\n      dataset_version: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n      dataset_environment: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n      _internal_btql: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional()\n    }),\n    import_v36.z.object({\n      project_name: import_v36.z.string(),\n      dataset_name: import_v36.z.string(),\n      dataset_version: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n      dataset_environment: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n      _internal_btql: import_v36.z.union([import_v36.z.object({}).partial().passthrough(), import_v36.z.null()]).optional()\n    }),\n    import_v36.z.object({ data: import_v36.z.array(import_v36.z.unknown()) }),\n    import_v36.z.object({ experiment_name: import_v36.z.string() })\n  ]),\n  name: import_v36.z.string().optional(),\n  parameters: import_v36.z.object({}).partial().passthrough().optional(),\n  task: FunctionId.and(import_v36.z.unknown()),\n  scores: import_v36.z.array(FunctionId),\n  experiment_name: import_v36.z.string().optional(),\n  metadata: import_v36.z.object({}).partial().passthrough().optional(),\n  parent: InvokeParent.and(import_v36.z.unknown()).optional(),\n  stream: import_v36.z.boolean().optional(),\n  trial_count: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n  is_public: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  timeout: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional(),\n  max_concurrency: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]).optional().default(10),\n  base_experiment_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  base_experiment_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  git_metadata_settings: GitMetadataSettings.and(\n    import_v36.z.union([import_v36.z.object({}).partial(), import_v36.z.null()])\n  ).optional(),\n  repo_info: RepoInfo.and(import_v36.z.unknown()).optional(),\n  strict: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional(),\n  stop_token: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  extra_messages: import_v36.z.string().optional(),\n  tags: import_v36.z.array(import_v36.z.string()).optional(),\n  mcp_auth: import_v36.z.record(import_v36.z.object({ oauth_token: import_v36.z.string() }).partial()).optional(),\n  endpoint_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar ScoreObject = import_v36.z.object({\n  name: import_v36.z.string().optional(),\n  score: import_v36.z.union([import_v36.z.number(), import_v36.z.boolean(), import_v36.z.null()]),\n  metadata: import_v36.z.object({}).partial().passthrough().optional()\n});\nvar ScoreResult = import_v36.z.union([\n  ScoreObject,\n  NamedScore,\n  import_v36.z.union([import_v36.z.number(), import_v36.z.boolean()]),\n  import_v36.z.array(NamedScore),\n  import_v36.z.null()\n]);\nvar ServiceToken = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  preview_name: import_v36.z.string(),\n  service_account_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  service_account_email: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  service_account_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  org_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  expires_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar SpanIFrame = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  project_id: import_v36.z.string().uuid(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  url: import_v36.z.string(),\n  post_message: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional()\n});\nvar SSEConsoleEventData = import_v36.z.object({\n  stream: import_v36.z.enum([\"stderr\", \"stdout\"]),\n  message: import_v36.z.string()\n});\nvar SSEProgressEventData = import_v36.z.object({\n  id: import_v36.z.string(),\n  object_type: FunctionObjectType,\n  origin: ObjectReferenceNullish.and(import_v36.z.unknown()).optional(),\n  format: FunctionFormat,\n  output_type: FunctionOutputType,\n  name: import_v36.z.string(),\n  event: import_v36.z.enum([\n    \"reasoning_delta\",\n    \"text_delta\",\n    \"json_delta\",\n    \"error\",\n    \"console\",\n    \"start\",\n    \"done\",\n    \"progress\"\n  ]),\n  data: import_v36.z.string()\n});\nvar ToolFunctionDefinition = import_v36.z.object({\n  type: import_v36.z.literal(\"function\"),\n  function: import_v36.z.object({\n    name: import_v36.z.string(),\n    description: import_v36.z.string().optional(),\n    parameters: import_v36.z.object({}).partial().passthrough().optional(),\n    strict: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional()\n  })\n});\nvar User = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  given_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  family_name: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  email: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  avatar_url: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\nvar ViewDataSearch = import_v36.z.union([\n  import_v36.z.object({\n    filter: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]),\n    tag: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]),\n    match: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()]),\n    sort: import_v36.z.union([import_v36.z.array(import_v36.z.unknown()), import_v36.z.null()])\n  }).partial(),\n  import_v36.z.null()\n]);\nvar ViewData = import_v36.z.union([\n  import_v36.z.object({ search: ViewDataSearch, custom_charts: import_v36.z.unknown() }).partial(),\n  import_v36.z.null()\n]);\nvar ViewOptions = import_v36.z.union([\n  import_v36.z.object({\n    viewType: import_v36.z.literal(\"monitor\"),\n    options: import_v36.z.object({\n      spanType: import_v36.z.union([import_v36.z.enum([\"range\", \"frame\"]), import_v36.z.null()]),\n      rangeValue: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      frameStart: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      frameEnd: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      tzUTC: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n      chartVisibility: import_v36.z.union([import_v36.z.record(import_v36.z.boolean()), import_v36.z.null()]),\n      projectId: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n      type: import_v36.z.union([import_v36.z.enum([\"project\", \"experiment\"]), import_v36.z.null()]),\n      groupBy: import_v36.z.union([import_v36.z.string(), import_v36.z.null()])\n    }).partial(),\n    freezeColumns: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]).optional()\n  }),\n  import_v36.z.object({\n    columnVisibility: import_v36.z.union([import_v36.z.record(import_v36.z.boolean()), import_v36.z.null()]),\n    columnOrder: import_v36.z.union([import_v36.z.array(import_v36.z.string()), import_v36.z.null()]),\n    columnSizing: import_v36.z.union([import_v36.z.record(import_v36.z.number()), import_v36.z.null()]),\n    grouping: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    rowHeight: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    tallGroupRows: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()]),\n    layout: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    topicMapReportKey: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    chartHeight: import_v36.z.union([import_v36.z.number(), import_v36.z.null()]),\n    excludedMeasures: import_v36.z.union([\n      import_v36.z.array(\n        import_v36.z.object({\n          type: import_v36.z.enum([\"none\", \"score\", \"metric\", \"metadata\"]),\n          value: import_v36.z.string()\n        })\n      ),\n      import_v36.z.null()\n    ]),\n    yMetric: import_v36.z.union([\n      import_v36.z.object({\n        type: import_v36.z.enum([\"none\", \"score\", \"metric\", \"metadata\"]),\n        value: import_v36.z.string()\n      }),\n      import_v36.z.null()\n    ]),\n    xAxis: import_v36.z.union([\n      import_v36.z.object({\n        type: import_v36.z.enum([\"none\", \"score\", \"metric\", \"metadata\"]),\n        value: import_v36.z.string()\n      }),\n      import_v36.z.null()\n    ]),\n    symbolGrouping: import_v36.z.union([\n      import_v36.z.object({\n        type: import_v36.z.enum([\"none\", \"score\", \"metric\", \"metadata\"]),\n        value: import_v36.z.string()\n      }),\n      import_v36.z.null()\n    ]),\n    pointSizeMetric: import_v36.z.union([\n      import_v36.z.object({\n        type: import_v36.z.enum([\"none\", \"score\", \"metric\", \"metadata\"]),\n        value: import_v36.z.string()\n      }),\n      import_v36.z.null()\n    ]),\n    xAxisAggregation: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    chartAnnotations: import_v36.z.union([\n      import_v36.z.array(import_v36.z.object({ id: import_v36.z.string(), text: import_v36.z.string() })),\n      import_v36.z.null()\n    ]),\n    timeRangeFilter: import_v36.z.union([\n      import_v36.z.string(),\n      import_v36.z.object({ from: import_v36.z.string(), to: import_v36.z.string() }),\n      import_v36.z.null()\n    ]),\n    queryShape: import_v36.z.union([\n      import_v36.z.enum([\"traces\", \"spans\", \"logs\", \"topics\"]),\n      import_v36.z.null()\n    ]),\n    cluster: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]),\n    freezeColumns: import_v36.z.union([import_v36.z.boolean(), import_v36.z.null()])\n  }).partial(),\n  import_v36.z.null()\n]);\nvar View = import_v36.z.object({\n  id: import_v36.z.string().uuid(),\n  object_type: AclObjectType.and(import_v36.z.string()),\n  object_id: import_v36.z.string().uuid(),\n  view_type: import_v36.z.enum([\n    \"projects\",\n    \"experiments\",\n    \"experiment\",\n    \"playgrounds\",\n    \"playground\",\n    \"datasets\",\n    \"dataset\",\n    \"prompts\",\n    \"parameters\",\n    \"tools\",\n    \"scorers\",\n    \"classifiers\",\n    \"logs\",\n    \"monitor\",\n    \"for_review_project_log\",\n    \"for_review_experiments\",\n    \"for_review_datasets\"\n  ]),\n  name: import_v36.z.string(),\n  description: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  starred: import_v36.z.boolean().optional(),\n  created: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  updated_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  view_data: ViewData.optional(),\n  options: ViewOptions.optional(),\n  user_id: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional(),\n  deleted_at: import_v36.z.union([import_v36.z.string(), import_v36.z.null()]).optional()\n});\n\n// src/logger.ts\nvar import_functions = require(\"@vercel/functions\");\n\n// src/template/plugins/mustache.ts\nvar import_mustache2 = __toESM(require(\"mustache\"));\n\n// src/template/mustache-utils.ts\nvar import_mustache = __toESM(require(\"mustache\"));\nfunction lintTemplate(template, context) {\n  const variables = getMustacheVars(template);\n  for (const variable of variables) {\n    const arrPathsReplaced = variable[1].replaceAll(/\\.\\d+/g, \".0\");\n    const fieldExists = getObjValueByPath(context, arrPathsReplaced.split(\".\")) !== void 0;\n    if (!fieldExists) {\n      throw new Error(`Variable '${variable[1]}' does not exist.`);\n    }\n  }\n}\nfunction getMustacheVars(prompt) {\n  try {\n    return import_mustache.default.parse(prompt).filter(\n      (span) => span[0] === \"name\" || span[0] === \"&\"\n    );\n  } catch {\n    return [];\n  }\n}\n\n// src/template/plugins/mustache.ts\nvar jsonEscape = (v) => typeof v === \"string\" ? v : JSON.stringify(v);\nvar mustachePlugin = {\n  name: \"mustache\",\n  defaultOptions: { strict: true, escape: jsonEscape },\n  createRenderer() {\n    const opts = this.defaultOptions ?? {};\n    const escapeFn = opts?.escape ?? jsonEscape;\n    const strictDefault = typeof opts?.strict === \"boolean\" ? opts.strict : true;\n    return {\n      render(template, variables, escape, strict) {\n        const esc = escape ?? escapeFn;\n        const strictMode = typeof strict === \"boolean\" ? strict : strictDefault;\n        if (strictMode) lintTemplate(template, variables);\n        return import_mustache2.default.render(template, variables, void 0, { escape: esc });\n      },\n      lint(template, variables) {\n        lintTemplate(template, variables);\n      }\n    };\n  }\n};\n\n// src/template/registry.ts\nvar TemplatePluginRegistry = class {\n  plugins = /* @__PURE__ */ new Map();\n  register(plugin) {\n    if (this.plugins.has(plugin.name)) {\n      console.warn(\n        `Template plugin '${plugin.name}' already registered, overwriting`\n      );\n    }\n    const entry = {\n      plugin,\n      renderer: plugin.defaultOptions !== void 0 ? plugin.createRenderer() : void 0\n    };\n    this.plugins.set(plugin.name, entry);\n  }\n  getAvailable() {\n    return Array.from(this.plugins.keys());\n  }\n  get(name) {\n    return this.plugins.get(name)?.renderer;\n  }\n  isRegistered(name) {\n    return this.plugins.has(name);\n  }\n};\nvar templateRegistry = new TemplatePluginRegistry();\nvar registerTemplatePlugin = templateRegistry.register.bind(templateRegistry);\nvar getTemplateRenderer = templateRegistry.get.bind(templateRegistry);\nregisterTemplatePlugin(mustachePlugin);\n\n// src/template/renderer.ts\nfunction isTemplateFormat(v) {\n  return v === \"mustache\" || v === \"nunjucks\" || v === \"none\";\n}\nfunction parseTemplateFormat(value, defaultFormat = \"mustache\") {\n  return isTemplateFormat(value) ? value : defaultFormat;\n}\nfunction renderTemplateContent(template, variables, escape, options) {\n  const strict = !!options.strict;\n  const templateFormat = parseTemplateFormat(options.templateFormat);\n  if (templateFormat === \"none\") {\n    return template;\n  }\n  const renderer = getTemplateRenderer(templateFormat);\n  if (!renderer) {\n    if (templateFormat === \"nunjucks\") {\n      throw new Error(\n        \"Nunjucks templating requires @braintrust/template-nunjucks. Install and import it to enable templateFormat: 'nunjucks'.\"\n      );\n    }\n    throw new Error(`No template renderer registered for ${templateFormat}`);\n  }\n  if (strict && renderer.lint) {\n    renderer.lint(template, variables);\n  }\n  return renderer.render(template, variables, escape, strict);\n}\n\n// src/logger.ts\nvar import_v38 = require(\"zod/v3\");\n\n// src/functions/stream.ts\nvar import_eventsource_parser = require(\"eventsource-parser\");\nvar import_v37 = require(\"zod/v3\");\nvar braintrustStreamChunkSchema = import_v37.z.union([\n  import_v37.z.object({\n    type: import_v37.z.literal(\"text_delta\"),\n    data: import_v37.z.string()\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"reasoning_delta\"),\n    data: import_v37.z.string()\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"json_delta\"),\n    data: import_v37.z.string()\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"error\"),\n    data: import_v37.z.string()\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"console\"),\n    data: SSEConsoleEventData\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"progress\"),\n    data: SSEProgressEventData\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"start\"),\n    data: import_v37.z.string()\n  }),\n  import_v37.z.object({\n    type: import_v37.z.literal(\"done\"),\n    data: import_v37.z.string()\n  })\n]);\nvar BraintrustStream = class _BraintrustStream {\n  stream;\n  memoizedFinalValue;\n  signal;\n  constructor(baseStream, { signal } = {}) {\n    this.signal = signal;\n    this.stream = baseStream.pipeThrough(btStreamParser(), { signal });\n  }\n  /**\n   * Copy the stream. This returns a new stream that shares the same underlying\n   * stream (via `tee`). Since streams are consumed in Javascript, use `copy()` if you\n   * need to use the stream multiple times.\n   *\n   * @returns A new stream that you can independently consume.\n   */\n  copy() {\n    const [newStream, copyStream] = this.stream.tee();\n    this.stream = copyStream;\n    return new _BraintrustStream(newStream, { signal: this.signal });\n  }\n  /**\n   * Get the underlying ReadableStream.\n   *\n   * @returns The underlying `ReadableStream<BraintrustStreamChunk>`.\n   */\n  toReadableStream() {\n    return this.stream;\n  }\n  /**\n   * Returns an async iterator for the BraintrustStream.\n   * This allows for easy consumption of the stream using a for-await...of loop.\n   *\n   * @returns An async iterator that yields BraintrustStreamChunk objects.\n   */\n  [Symbol.asyncIterator]() {\n    const reader = this.stream.getReader();\n    return {\n      async next() {\n        const { done, value } = await reader.read();\n        if (done) {\n          reader.releaseLock();\n          return { done: true, value: void 0 };\n        }\n        return { done: false, value };\n      },\n      async return() {\n        reader.releaseLock();\n        return { done: true, value: void 0 };\n      },\n      async throw(error) {\n        reader.releaseLock();\n        throw error;\n      }\n    };\n  }\n  /**\n   * Get the final value of the stream. The final value is the concatenation of all\n   * the chunks in the stream, deserialized into a string or JSON object, depending on\n   * the value's type.\n   *\n   * This function returns a promise that resolves when the stream is closed, and\n   * contains the final value. Multiple calls to `finalValue()` will return the same\n   * promise, so it is safe to call this multiple times.\n   *\n   * This function consumes the stream, so if you need to use the stream multiple\n   * times, you should call `copy()` first.\n   *\n   * @returns A promise that resolves with the final value of the stream or `undefined` if the stream is empty.\n   */\n  finalValue() {\n    if (this.memoizedFinalValue) {\n      return this.memoizedFinalValue;\n    }\n    this.memoizedFinalValue = new Promise((resolve, reject2) => {\n      this.stream.pipeThrough(createFinalValuePassThroughStream(resolve, reject2), {\n        signal: this.signal\n      }).pipeTo(devNullWritableStream(), { signal: this.signal }).catch(reject2);\n    });\n    return this.memoizedFinalValue;\n  }\n  static parseRawEvent(event) {\n    switch (event.event) {\n      case \"text_delta\":\n        return {\n          type: \"text_delta\",\n          data: JSON.parse(event.data)\n        };\n      case \"reasoning_delta\":\n        return {\n          type: \"reasoning_delta\",\n          data: JSON.parse(event.data)\n        };\n      case \"json_delta\":\n        return {\n          type: \"json_delta\",\n          data: event.data\n        };\n      case \"error\":\n        return {\n          type: \"error\",\n          data: JSON.parse(event.data)\n        };\n      case \"progress\":\n        return {\n          type: \"progress\",\n          data: SSEProgressEventData.parse(JSON.parse(event.data))\n        };\n      case \"console\":\n        return {\n          type: \"console\",\n          data: SSEConsoleEventData.parse(JSON.parse(event.data))\n        };\n      case \"start\":\n        return {\n          type: \"start\",\n          data: \"\"\n        };\n      case \"done\":\n        return {\n          type: \"done\",\n          data: \"\"\n        };\n      default: {\n        const _event = event;\n        throw new Error(`Unknown event type ${JSON.stringify(_event)}`);\n      }\n    }\n  }\n  static serializeRawEvent(event) {\n    switch (event.type) {\n      case \"text_delta\":\n        return {\n          event: \"text_delta\",\n          data: JSON.stringify(event.data)\n        };\n      case \"reasoning_delta\":\n        return {\n          event: \"reasoning_delta\",\n          data: JSON.stringify(event.data)\n        };\n      case \"json_delta\":\n        return {\n          event: \"json_delta\",\n          data: event.data\n        };\n      case \"error\":\n        return {\n          event: \"error\",\n          data: JSON.stringify(event.data)\n        };\n      case \"progress\":\n        return {\n          event: \"progress\",\n          data: JSON.stringify(event.data)\n        };\n      case \"console\":\n        return {\n          event: \"console\",\n          data: JSON.stringify(event.data)\n        };\n      case \"start\":\n        return {\n          event: \"start\",\n          data: \"\"\n        };\n      case \"done\":\n        return {\n          event: \"done\",\n          data: \"\"\n        };\n      default: {\n        const _event = event;\n        throw new Error(`Unknown event type ${JSON.stringify(_event)}`);\n      }\n    }\n  }\n};\nfunction btStreamParser() {\n  const decoder2 = new TextDecoder();\n  let parser;\n  return new TransformStream({\n    async start(controller) {\n      parser = (0, import_eventsource_parser.createParser)((event) => {\n        if (event.type === \"reconnect-interval\") {\n          return;\n        }\n        const parsed = CallEvent.safeParse(event);\n        if (!parsed.success) {\n          throw new Error(`Failed to parse event: ${parsed.error}`);\n        }\n        controller.enqueue(BraintrustStream.parseRawEvent(parsed.data));\n      });\n    },\n    async transform(chunk, controller) {\n      if (chunk instanceof Uint8Array) {\n        parser.feed(decoder2.decode(chunk, { stream: true }));\n      } else if (typeof chunk === \"string\") {\n        parser.feed(chunk);\n      } else {\n        controller.enqueue(chunk);\n      }\n    },\n    async flush(controller) {\n      const tail = decoder2.decode();\n      if (tail) {\n        parser.feed(tail);\n      }\n      controller.terminate();\n    }\n  });\n}\nfunction createFinalValuePassThroughStream(onFinal, onError) {\n  const decoder2 = new TextDecoder();\n  const textChunks = [];\n  const jsonChunks = [];\n  const reasoningChunks = [];\n  const transformStream = new TransformStream({\n    transform(chunk, controller) {\n      if (typeof chunk === \"string\") {\n        textChunks.push(chunk);\n        controller.enqueue({\n          type: \"text_delta\",\n          data: chunk\n        });\n      } else if (chunk instanceof Uint8Array) {\n        textChunks.push(decoder2.decode(chunk));\n        controller.enqueue({\n          type: \"text_delta\",\n          data: decoder2.decode(chunk)\n        });\n      } else if (braintrustStreamChunkSchema.safeParse(chunk).success) {\n        const chunkType = chunk.type;\n        switch (chunkType) {\n          case \"text_delta\":\n            textChunks.push(chunk.data);\n            break;\n          case \"json_delta\":\n            jsonChunks.push(chunk.data);\n            break;\n          case \"reasoning_delta\":\n            reasoningChunks.push(chunk.data);\n            break;\n          case \"error\":\n            onError(chunk.data);\n            break;\n          case \"progress\":\n          case \"start\":\n          case \"done\":\n          case \"console\":\n            break;\n          default:\n            const _type = chunkType;\n            onError(`Unknown chunk type: ${_type}`);\n        }\n        controller.enqueue(chunk);\n      } else {\n        onError(`Unknown chunk type ${JSON.stringify(chunk)}`);\n      }\n    },\n    flush(controller) {\n      if (jsonChunks.length > 0) {\n        onFinal(JSON.parse(jsonChunks.join(\"\")));\n      } else if (textChunks.length > 0) {\n        onFinal(textChunks.join(\"\"));\n      } else if (reasoningChunks.length > 0) {\n        onFinal(reasoningChunks.join(\"\"));\n      } else {\n        onFinal(void 0);\n      }\n      controller.terminate();\n    }\n  });\n  return transformStream;\n}\nfunction devNullWritableStream() {\n  return new WritableStream({\n    write(chunk) {\n    },\n    close() {\n    },\n    abort(reason) {\n    },\n    start(controller) {\n    }\n  });\n}\n\n// src/prompt-cache/disk-cache.ts\nfunction canUseDiskCache() {\n  return !!(isomorph_default.hash && isomorph_default.gunzip && isomorph_default.gzip && isomorph_default.stat && isomorph_default.readFile && isomorph_default.writeFile && isomorph_default.utimes && isomorph_default.readdir && isomorph_default.mkdir && isomorph_default.unlink && isomorph_default.homedir);\n}\nvar DiskCache = class {\n  dir;\n  max;\n  mkdir;\n  logWarnings;\n  /**\n   * Creates a new DiskCache instance.\n   * @param options - Configuration options for the cache.\n   */\n  constructor(options) {\n    if (!canUseDiskCache()) {\n      throw new Error(\"Disk cache is not supported on this platform\");\n    }\n    this.dir = options.cacheDir;\n    this.max = options.max;\n    this.logWarnings = options.logWarnings ?? true;\n    this.mkdir = options.mkdir ?? true;\n  }\n  getEntryPath(key) {\n    const hashed = isomorph_default.hash(key);\n    return isomorph_default.pathJoin(this.dir, hashed);\n  }\n  /**\n   * Retrieves a value from the cache.\n   * Updates the entry's access time when read.\n   *\n   * @param key - The key to look up in the cache.\n   * @returns The cached value if found, undefined otherwise.\n   */\n  async get(key) {\n    try {\n      const filePath = this.getEntryPath(key);\n      const data = await isomorph_default.gunzip(await isomorph_default.readFile(filePath));\n      await isomorph_default.utimes(filePath, /* @__PURE__ */ new Date(), /* @__PURE__ */ new Date());\n      return JSON.parse(data.toString());\n    } catch (e) {\n      if (e.code === \"ENOENT\") {\n        return void 0;\n      }\n      if (this.logWarnings) {\n        console.warn(\"Failed to read from disk cache\", e);\n      }\n      return void 0;\n    }\n  }\n  /**\n   * Stores a value in the cache.\n   * If the cache is at its maximum size, the least recently used entries will be evicted.\n   *\n   * @param key - The key to store the value under.\n   * @param value - The value to store in the cache.\n   */\n  async set(key, value) {\n    try {\n      if (this.mkdir) {\n        await isomorph_default.mkdir(this.dir, { recursive: true });\n      }\n      const filePath = this.getEntryPath(key);\n      const data = await isomorph_default.gzip(JSON.stringify(value));\n      await isomorph_default.writeFile(filePath, data);\n      await this.evictOldestIfFull();\n    } catch (e) {\n      if (this.logWarnings) {\n        console.warn(\"Failed to write to disk cache\", e);\n      }\n      return;\n    }\n  }\n  async evictOldestIfFull() {\n    if (!this.max) {\n      return;\n    }\n    const files = await isomorph_default.readdir(this.dir);\n    const paths = files.map((file) => isomorph_default.pathJoin(this.dir, file));\n    if (paths.length <= this.max) {\n      return;\n    }\n    const stats = await Promise.all(\n      paths.map(async (path) => {\n        const stat = await isomorph_default.stat(path);\n        return {\n          path,\n          mtime: stat.mtime.getTime()\n        };\n      })\n    );\n    stats.sort((a, b) => a.mtime - b.mtime);\n    const toRemove = stats.slice(0, stats.length - this.max);\n    await Promise.all(toRemove.map((stat) => isomorph_default.unlink(stat.path)));\n  }\n};\n\n// src/lru-cache.ts\nvar LRUCache = class {\n  cache;\n  maxSize;\n  constructor(options = {}) {\n    this.cache = /* @__PURE__ */ new Map();\n    this.maxSize = options.max;\n  }\n  /**\n   * Retrieves a value from the cache.\n   * If the key exists, the item is marked as most recently used.\n   *\n   * @param key - The key to look up.\n   * @returns The cached value if found, undefined otherwise.\n   */\n  get(key) {\n    const entry = this.cache.get(key);\n    if (entry === void 0) {\n      return void 0;\n    }\n    this.cache.delete(key);\n    this.cache.set(key, entry);\n    return entry.value;\n  }\n  /**\n   * Checks whether a key exists and marks it as most recently used.\n   */\n  has(key) {\n    if (!this.cache.has(key)) {\n      return false;\n    }\n    this.get(key);\n    return true;\n  }\n  /**\n   * Stores a value in the cache.\n   * If the key already exists, the value is updated and marked as most recently used.\n   * If the cache is at its maximum size, the least recently used item is evicted.\n   *\n   * @param key - The key to store.\n   * @param value - The value to store.\n   */\n  set(key, value) {\n    if (this.cache.has(key)) {\n      this.cache.delete(key);\n    } else if (this.maxSize && this.cache.size >= this.maxSize) {\n      const first = this.cache.keys().next().value;\n      this.cache.delete(first);\n    }\n    this.cache.set(key, { value });\n  }\n  /**\n   * Removes an item from the cache.\n   */\n  delete(key) {\n    return this.cache.delete(key);\n  }\n  /**\n   * Iterates over cache entries from least to most recently used.\n   */\n  *entries() {\n    for (const [key, entry] of this.cache) {\n      yield [key, entry.value];\n    }\n  }\n  /**\n   * Iterates over cache keys from least to most recently used.\n   */\n  keys() {\n    return this.cache.keys();\n  }\n  /**\n   * Iterates over cache values from least to most recently used.\n   */\n  *values() {\n    for (const entry of this.cache.values()) {\n      yield entry.value;\n    }\n  }\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n  /**\n   * Removes all items from the cache.\n   */\n  clear() {\n    this.cache.clear();\n  }\n};\n\n// src/prompt-cache/cache-config.ts\nvar CACHE_LOCATION_ENV_VAR = \"BRAINTRUST_CACHE_LOCATION\";\nvar DEFAULT_CACHE_MEMORY_MAX = 1 << 10;\nvar DEFAULT_CACHE_DISK_MAX = 1 << 20;\nvar warnedInvalidCacheModeEnvValue = false;\nvar warnedUnavailableDiskCacheMode = false;\nfunction warnInvalidCacheMode(value) {\n  if (warnedInvalidCacheModeEnvValue) {\n    return;\n  }\n  warnedInvalidCacheModeEnvValue = true;\n  debugLogger.warn(\n    `Invalid ${CACHE_LOCATION_ENV_VAR} value \"${value}\". Expected \"mixed\", \"memory\", \"disk\", or \"none\". Falling back to \"mixed\".`\n  );\n}\nfunction warnUnavailableDiskCache() {\n  if (warnedUnavailableDiskCacheMode) {\n    return;\n  }\n  warnedUnavailableDiskCacheMode = true;\n  debugLogger.warn(\n    `Disk cache is not supported on this platform, so ${CACHE_LOCATION_ENV_VAR}=\"disk\" disables prompt and parameters caching.`\n  );\n}\nfunction parseCacheMode() {\n  const value = isomorph_default.getEnv(CACHE_LOCATION_ENV_VAR);\n  const normalized = value?.trim().toLowerCase();\n  if (!normalized) {\n    return \"mixed\";\n  }\n  if (normalized === \"mixed\" || normalized === \"memory\" || normalized === \"disk\" || normalized === \"none\") {\n    return normalized;\n  }\n  warnInvalidCacheMode(value ?? \"\");\n  return \"mixed\";\n}\nfunction parsePositiveIntegerEnv(envVar, defaultValue) {\n  const value = Number(isomorph_default.getEnv(envVar));\n  return Number.isInteger(value) && value > 0 ? value : defaultValue;\n}\nfunction createCacheLayers({\n  memoryMaxEnvVar,\n  diskCacheDirEnvVar,\n  diskMaxEnvVar,\n  getDefaultDiskCacheDir\n}) {\n  const mode = parseCacheMode();\n  const memoryCache = mode === \"mixed\" || mode === \"memory\" ? new LRUCache({\n    max: parsePositiveIntegerEnv(\n      memoryMaxEnvVar,\n      DEFAULT_CACHE_MEMORY_MAX\n    )\n  }) : void 0;\n  let diskCache;\n  if (mode === \"mixed\" || mode === \"disk\") {\n    if (canUseDiskCache()) {\n      diskCache = new DiskCache({\n        cacheDir: isomorph_default.getEnv(diskCacheDirEnvVar) ?? getDefaultDiskCacheDir(),\n        max: parsePositiveIntegerEnv(diskMaxEnvVar, DEFAULT_CACHE_DISK_MAX)\n      });\n    } else if (mode === \"disk\") {\n      warnUnavailableDiskCache();\n    }\n  }\n  if (diskCache) {\n    return { memoryCache, diskCache };\n  }\n  return { memoryCache };\n}\n\n// src/prompt-cache/prompt-cache.ts\nfunction createCacheKey(key, namespace) {\n  let cacheKey;\n  if (key.id) {\n    cacheKey = `id:${key.id}`;\n  } else {\n    const prefix = key.projectId ?? key.projectName;\n    if (!prefix) {\n      throw new Error(\"Either projectId or projectName must be provided\");\n    }\n    if (!key.slug) {\n      throw new Error(\"Slug must be provided when not using ID\");\n    }\n    cacheKey = `${prefix}:${key.slug}:${key.version ?? \"latest\"}`;\n  }\n  return namespace === void 0 ? cacheKey : `${namespace.length}:${namespace}:${cacheKey}`;\n}\nvar PromptCache = class _PromptCache {\n  memoryCache;\n  diskCache;\n  namespace;\n  expectedResolvedOrgIdentity;\n  constructor(options) {\n    this.memoryCache = options.memoryCache;\n    this.diskCache = options.diskCache;\n    this.namespace = options.namespace;\n    this.expectedResolvedOrgIdentity = options.expectedResolvedOrgIdentity;\n  }\n  /**\n   * Returns a cache view that shares the same storage layers but isolates all\n   * entries under the provided namespace.\n   */\n  withNamespace(namespace, expectedResolvedOrgIdentity) {\n    return new _PromptCache({\n      memoryCache: this.memoryCache,\n      diskCache: this.diskCache,\n      namespace,\n      expectedResolvedOrgIdentity\n    });\n  }\n  /**\n   * Retrieves a prompt from the cache.\n   * First checks the in-memory LRU cache, then falls back to checking the disk cache if available.\n   */\n  async get(key) {\n    const cacheKey = createCacheKey(key, this.namespace);\n    if (this.memoryCache) {\n      const memoryEntry = this.memoryCache.get(cacheKey);\n      if (memoryEntry !== void 0 && (this.expectedResolvedOrgIdentity === void 0 || memoryEntry.resolvedOrgIdentity === this.expectedResolvedOrgIdentity)) {\n        return memoryEntry.value;\n      }\n    }\n    if (this.diskCache) {\n      const diskEntry = await this.diskCache.get(cacheKey);\n      if (!diskEntry || this.expectedResolvedOrgIdentity !== void 0 && diskEntry.resolvedOrgIdentity !== this.expectedResolvedOrgIdentity) {\n        return void 0;\n      }\n      const serializedPrompt = diskEntry.value;\n      const diskPrompt = new Prompt2(\n        serializedPrompt.metadata,\n        serializedPrompt.defaults,\n        serializedPrompt.noTrace\n      );\n      this.memoryCache?.set(cacheKey, {\n        value: diskPrompt,\n        resolvedOrgIdentity: diskEntry.resolvedOrgIdentity\n      });\n      return diskPrompt;\n    }\n    return void 0;\n  }\n  /**\n   * Stores a prompt in the cache.\n   * Writes to the in-memory cache and the disk cache if available.\n   *\n   * @param key - The key to store the value under.\n   * @param value - The value to store in the cache.\n   * @throws If there is an error writing to the disk cache.\n   */\n  async set(key, value) {\n    const cacheKey = createCacheKey(key, this.namespace);\n    const memoryEntry = {\n      value,\n      resolvedOrgIdentity: this.expectedResolvedOrgIdentity\n    };\n    this.memoryCache?.set(cacheKey, memoryEntry);\n    if (this.diskCache) {\n      await this.diskCache.set(cacheKey, {\n        value: value._internalSerializeForCache(),\n        resolvedOrgIdentity: this.expectedResolvedOrgIdentity\n      });\n    }\n  }\n};\n\n// src/prompt-cache/parameters-cache.ts\nfunction createCacheKey2(key, namespace) {\n  let cacheKey;\n  if (key.id) {\n    cacheKey = `parameters:id:${key.id}`;\n  } else {\n    const prefix = key.projectId ?? key.projectName;\n    if (!prefix) {\n      throw new Error(\"Either projectId or projectName must be provided\");\n    }\n    if (!key.slug) {\n      throw new Error(\"Slug must be provided when not using ID\");\n    }\n    cacheKey = `parameters:${prefix}:${key.slug}:${key.version ?? \"latest\"}`;\n  }\n  return namespace === void 0 ? cacheKey : `${namespace.length}:${namespace}:${cacheKey}`;\n}\nvar ParametersCache = class _ParametersCache {\n  memoryCache;\n  diskCache;\n  namespace;\n  expectedResolvedOrgIdentity;\n  constructor(options) {\n    this.memoryCache = options.memoryCache;\n    this.diskCache = options.diskCache;\n    this.namespace = options.namespace;\n    this.expectedResolvedOrgIdentity = options.expectedResolvedOrgIdentity;\n  }\n  withNamespace(namespace, expectedResolvedOrgIdentity) {\n    return new _ParametersCache({\n      memoryCache: this.memoryCache,\n      diskCache: this.diskCache,\n      namespace,\n      expectedResolvedOrgIdentity\n    });\n  }\n  async get(key) {\n    const cacheKey = createCacheKey2(key, this.namespace);\n    if (this.memoryCache) {\n      const memoryEntry = this.memoryCache.get(cacheKey);\n      if (memoryEntry !== void 0 && (this.expectedResolvedOrgIdentity === void 0 || memoryEntry.resolvedOrgIdentity === this.expectedResolvedOrgIdentity)) {\n        return memoryEntry.value;\n      }\n    }\n    if (this.diskCache) {\n      const diskEntry = await this.diskCache.get(cacheKey);\n      if (!diskEntry || this.expectedResolvedOrgIdentity !== void 0 && diskEntry.resolvedOrgIdentity !== this.expectedResolvedOrgIdentity) {\n        return void 0;\n      }\n      const diskParameters = new RemoteEvalParameters(diskEntry.value.metadata);\n      this.memoryCache?.set(cacheKey, {\n        value: diskParameters,\n        resolvedOrgIdentity: diskEntry.resolvedOrgIdentity\n      });\n      return diskParameters;\n    }\n    return void 0;\n  }\n  async set(key, value) {\n    const cacheKey = createCacheKey2(key, this.namespace);\n    const memoryEntry = {\n      value,\n      resolvedOrgIdentity: this.expectedResolvedOrgIdentity\n    };\n    this.memoryCache?.set(cacheKey, memoryEntry);\n    if (this.diskCache) {\n      await this.diskCache.set(cacheKey, {\n        value: value._internalSerializeForCache(),\n        resolvedOrgIdentity: this.expectedResolvedOrgIdentity\n      });\n    }\n  }\n};\n\n// src/span-cache.ts\nvar activeCaches = /* @__PURE__ */ new Set();\nvar exitHandlersRegistered = false;\nfunction canUseSpanCache() {\n  return !!(isomorph_default.pathJoin && isomorph_default.tmpdir && isomorph_default.writeFileSync && isomorph_default.appendFileSync && isomorph_default.readFileSync && isomorph_default.unlinkSync && isomorph_default.openFile);\n}\nvar SpanCache = class {\n  cacheFilePath = null;\n  fileHandle = null;\n  // type-erased fs.promises.FileHandle\n  initialized = false;\n  initPromise = null;\n  generation = 0;\n  // Tracks whether the cache was explicitly disabled (via constructor or disable())\n  _explicitlyDisabled;\n  // Tracks whether the cache has been enabled (for evals only)\n  _enabled = false;\n  // Reference count of active evals using this cache\n  _activeEvalCount = 0;\n  // Small in-memory index tracking which rootSpanIds have data\n  rootSpanIndex = /* @__PURE__ */ new Set();\n  constructor(options) {\n    this._explicitlyDisabled = options?.disabled ?? false;\n  }\n  /**\n   * Disable the cache at runtime. This is called automatically when\n   * initFunction is used, since remote function spans won't be in the cache.\n   */\n  disable() {\n    this._explicitlyDisabled = true;\n  }\n  /**\n   * Start caching spans for use during evaluations.\n   * This only starts caching if the cache wasn't permanently disabled.\n   * Called by Eval() to turn on caching for the duration of the eval.\n   * Uses reference counting to support parallel evals.\n   */\n  start() {\n    if (!this._explicitlyDisabled) {\n      this._enabled = true;\n      this._activeEvalCount++;\n    }\n  }\n  /**\n   * Stop caching spans and return to the default disabled state.\n   * Unlike disable(), this allows start() to work again for future evals.\n   * Called after an eval completes to return to the default state.\n   * Uses reference counting - only disables when all evals are complete.\n   */\n  stop() {\n    this._activeEvalCount--;\n    if (this._activeEvalCount <= 0) {\n      this._activeEvalCount = 0;\n      this._enabled = false;\n    }\n  }\n  get disabled() {\n    return this._explicitlyDisabled || !this._enabled || !canUseSpanCache();\n  }\n  async ensureInitialized() {\n    if (this.disabled) {\n      return;\n    }\n    if (this.initialized) {\n      return;\n    }\n    if (this.initPromise) {\n      return this.initPromise;\n    }\n    const generation = this.generation;\n    this.initPromise = (async () => {\n      if (!isomorph_default.tmpdir || !isomorph_default.pathJoin || !isomorph_default.openFile) {\n        return;\n      }\n      const tmpDir = isomorph_default.tmpdir();\n      const uniqueId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n      const cacheFilePath = isomorph_default.pathJoin(\n        tmpDir,\n        `braintrust-span-cache-${uniqueId}.jsonl`\n      );\n      const fileHandle = await isomorph_default.openFile(cacheFilePath, \"a+\");\n      if (generation !== this.generation) {\n        try {\n          await fileHandle.close();\n        } catch {\n        }\n        if (isomorph_default.unlinkSync) {\n          try {\n            isomorph_default.unlinkSync(cacheFilePath);\n          } catch {\n          }\n        }\n        return;\n      }\n      this.cacheFilePath = cacheFilePath;\n      this.fileHandle = fileHandle;\n      this.initialized = true;\n      this.registerExitHandler();\n    })();\n    return this.initPromise;\n  }\n  /**\n   * Register a handler to clean up the temp file on process exit.\n   * Uses a global registry to avoid registering multiple handlers.\n   */\n  registerExitHandler() {\n    activeCaches.add(this);\n    if (typeof process !== \"undefined\" && process.on && !exitHandlersRegistered) {\n      exitHandlersRegistered = true;\n      const cleanupAllCaches = () => {\n        for (const cache of activeCaches) {\n          if (cache.fileHandle) {\n            try {\n              cache.fileHandle.close().catch(() => {\n              });\n              cache.fileHandle = null;\n            } catch {\n            }\n          }\n          if (cache.cacheFilePath && canUseSpanCache() && isomorph_default.unlinkSync) {\n            try {\n              isomorph_default.unlinkSync(cache.cacheFilePath);\n            } catch {\n            }\n          }\n        }\n      };\n      process.on(\"exit\", cleanupAllCaches);\n      process.on(\"SIGINT\", cleanupAllCaches);\n      process.on(\"SIGTERM\", cleanupAllCaches);\n      process.on(\"beforeExit\", cleanupAllCaches);\n    }\n  }\n  // Buffer for pending writes - flushed asynchronously\n  writeBuffer = [];\n  flushScheduled = false;\n  flushPromise = null;\n  /**\n   * Queue a span write for async flushing.\n   * This is non-blocking - writes are buffered in memory and flushed\n   * to disk on the next microtask.\n   */\n  queueWrite(rootSpanId, spanId, data) {\n    if (this.disabled) {\n      return;\n    }\n    const record = { rootSpanId, spanId, data };\n    this.writeBuffer.push(record);\n    this.rootSpanIndex.add(rootSpanId);\n    if (!this.flushScheduled) {\n      this.flushScheduled = true;\n      this.flushPromise = this.flushWriteBuffer();\n    }\n  }\n  /**\n   * Flush the write buffer to disk asynchronously.\n   * Called automatically after queueWrite, but can also be called explicitly.\n   */\n  async flushWriteBuffer() {\n    const generation = this.generation;\n    const recordsToFlush = [...this.writeBuffer];\n    this.flushScheduled = false;\n    if (recordsToFlush.length === 0) {\n      return;\n    }\n    await this.ensureInitialized();\n    if (generation !== this.generation || !this.fileHandle) {\n      return;\n    }\n    const lines = recordsToFlush.map((r) => JSON.stringify(r) + \"\\n\").join(\"\");\n    await this.fileHandle.appendFile(lines, \"utf8\");\n    this.writeBuffer = this.writeBuffer.filter(\n      (r) => !recordsToFlush.includes(r)\n    );\n  }\n  /**\n   * Wait for any pending writes to complete.\n   * Call this before reading from the cache to ensure consistency.\n   */\n  async waitForPendingWrites() {\n    if (this.flushPromise) {\n      await this.flushPromise;\n      this.flushPromise = null;\n    }\n  }\n  /**\n   * Get all cached spans for a given rootSpanId.\n   *\n   * This reads the file and merges all records for the given rootSpanId.\n   *\n   * @param rootSpanId The root span ID to look up\n   * @returns Array of cached spans, or undefined if not in cache\n   */\n  getByRootSpanId(rootSpanId) {\n    if (this.disabled) {\n      return void 0;\n    }\n    if (!this.rootSpanIndex.has(rootSpanId)) {\n      return void 0;\n    }\n    const spanMap = /* @__PURE__ */ new Map();\n    if (this.initialized && this.cacheFilePath && isomorph_default.readFileSync) {\n      try {\n        const content = isomorph_default.readFileSync(this.cacheFilePath, \"utf8\");\n        const lines = content.trim().split(\"\\n\").filter(Boolean);\n        for (const line of lines) {\n          try {\n            const record = JSON.parse(line);\n            if (record.rootSpanId !== rootSpanId) {\n              continue;\n            }\n            const existing = spanMap.get(record.spanId);\n            if (existing) {\n              mergeDicts(\n                existing,\n                record.data\n              );\n            } else {\n              spanMap.set(record.spanId, record.data);\n            }\n          } catch {\n          }\n        }\n      } catch {\n      }\n    }\n    for (const record of this.writeBuffer) {\n      if (record.rootSpanId !== rootSpanId) {\n        continue;\n      }\n      const existing = spanMap.get(record.spanId);\n      if (existing) {\n        mergeDicts(\n          existing,\n          record.data\n        );\n      } else {\n        spanMap.set(record.spanId, record.data);\n      }\n    }\n    if (spanMap.size === 0) {\n      return void 0;\n    }\n    return Array.from(spanMap.values());\n  }\n  /**\n   * Check if a rootSpanId has cached data.\n   */\n  has(rootSpanId) {\n    if (this.disabled) {\n      return false;\n    }\n    return this.rootSpanIndex.has(rootSpanId);\n  }\n  /**\n   * Clear all cached spans for a given rootSpanId.\n   * Note: This only removes from the index. The data remains in the file\n   * but will be ignored on reads.\n   */\n  clear(rootSpanId) {\n    this.rootSpanIndex.delete(rootSpanId);\n  }\n  /**\n   * Clear all cached data and remove the cache file.\n   */\n  clearAll() {\n    this.rootSpanIndex.clear();\n    this.dispose();\n  }\n  /**\n   * Get the number of root spans currently tracked.\n   */\n  get size() {\n    return this.rootSpanIndex.size;\n  }\n  /**\n   * Clean up the cache file. Call this when the eval is complete.\n   * Only performs cleanup when all active evals have completed (refcount = 0).\n   */\n  dispose() {\n    if (this._activeEvalCount > 0) {\n      return;\n    }\n    activeCaches.delete(this);\n    this.generation++;\n    this.writeBuffer = [];\n    this.flushScheduled = false;\n    this.flushPromise = null;\n    if (this.fileHandle) {\n      this.fileHandle.close().catch(() => {\n      });\n      this.fileHandle = null;\n    }\n    if (this.cacheFilePath && canUseSpanCache() && isomorph_default.unlinkSync) {\n      try {\n        isomorph_default.unlinkSync(this.cacheFilePath);\n      } catch {\n      }\n      this.cacheFilePath = null;\n    }\n    this.initialized = false;\n    this.initPromise = null;\n    this.rootSpanIndex.clear();\n  }\n};\n\n// src/span-origin.ts\nvar INSTRUMENTATION_NAMES = {\n  AI_SDK: \"ai-sdk\",\n  ANTHROPIC: \"anthropic\",\n  BEDROCK_RUNTIME: \"bedrock-runtime\",\n  BRAINTRUST_JS_LOGGER: \"braintrust-js-logger\",\n  CLAUDE_AGENT_SDK: \"claude-agent-sdk\",\n  CLOUDFLARE_AI_CHAT: \"cloudflare-ai-chat\",\n  CLOUDFLARE_AGENTS: \"cloudflare-agents\",\n  CLOUDFLARE_THINK: \"cloudflare-think\",\n  COHERE: \"cohere\",\n  CURSOR_SDK: \"cursor-sdk\",\n  DEEPSEEK_HARNESS: \"deepseek-harness\",\n  EVE: \"eve\",\n  FLUE: \"flue\",\n  GENKIT: \"genkit\",\n  GITHUB_COPILOT: \"github-copilot\",\n  GOOGLE_ADK: \"google-adk\",\n  GOOGLE_GENERATIVE_AI: \"google-generative-ai\",\n  GOOGLE_GENAI: \"google-genai\",\n  GROQ: \"groq\",\n  HUGGINGFACE: \"huggingface\",\n  LANGCHAIN: \"langchain\",\n  LANGSMITH: \"langsmith\",\n  MASTRA: \"mastra\",\n  MISTRAL: \"mistral\",\n  LANGGRAPH_SDK: \"langgraph-sdk\",\n  OLLAMA: \"ollama\",\n  OPENAI: \"openai\",\n  OPENAI_AGENTS: \"openai-agents\",\n  OPENAI_CODEX: \"openai-codex\",\n  OPENROUTER: \"openrouter\",\n  OPENROUTER_AGENT: \"openrouter-agent\",\n  PI_CODING_AGENT: \"pi-coding-agent\",\n  STRANDS_AGENT_SDK: \"strands-agent-sdk\",\n  TEMPORAL: \"temporal\",\n  TYPESAFE: \"typesafe\",\n  VOYAGEAI: \"voyageai\",\n  ELEVENLABS: \"elevenlabs\"\n};\nvar INTERNAL_SPAN_INSTRUMENTATION_NAME = /* @__PURE__ */ Symbol.for(\n  \"braintrust.spanInstrumentationName\"\n);\nvar SDK_VERSION = true ? \"3.37.2\" : \"0.0.0\";\nfunction withSpanInstrumentationName(args, instrumentationName) {\n  return {\n    ...args,\n    [INTERNAL_SPAN_INSTRUMENTATION_NAME]: instrumentationName\n  };\n}\nfunction getSpanInstrumentationName(args) {\n  if (typeof args !== \"object\" || args === null) {\n    return void 0;\n  }\n  const value = args[INTERNAL_SPAN_INSTRUMENTATION_NAME];\n  return isSpanInstrumentationName(value) ? value : void 0;\n}\nfunction detectSpanOriginEnvironment(explicit) {\n  if (explicit) return explicit;\n  const envType = isomorph_default.getEnv(\"BRAINTRUST_ENVIRONMENT_TYPE\");\n  const envName = isomorph_default.getEnv(\"BRAINTRUST_ENVIRONMENT_NAME\");\n  if (envType || envName) {\n    return {\n      ...envType ? { type: envType } : {},\n      ...envName ? { name: envName } : {}\n    };\n  }\n  const ci = firstPresent([\n    [\"GITHUB_ACTIONS\", \"github_actions\"],\n    [\"GITLAB_CI\", \"gitlab_ci\"],\n    [\"CIRCLECI\", \"circleci\"],\n    [\"BUILDKITE\", \"buildkite\"],\n    [\"JENKINS_URL\", \"jenkins\"],\n    [\"JENKINS_HOME\", \"jenkins\"],\n    [\"TF_BUILD\", \"azure_pipelines\"],\n    [\"TEAMCITY_VERSION\", \"teamcity\"],\n    [\"TRAVIS\", \"travis\"],\n    [\"BITBUCKET_BUILD_NUMBER\", \"bitbucket\"]\n  ]);\n  if (ci) return { type: \"ci\", name: ci };\n  if (isomorph_default.getEnv(\"CI\")) return { type: \"ci\", name: \"ci\" };\n  const earlyServer = firstPresent([\n    [\"VERCEL\", \"vercel\"],\n    [\"NETLIFY\", \"netlify\"]\n  ]);\n  if (earlyServer) return { type: \"server\", name: earlyServer };\n  if (isomorph_default.getEnv(\"ECS_CONTAINER_METADATA_URI\") || isomorph_default.getEnv(\"ECS_CONTAINER_METADATA_URI_V4\")) {\n    return { type: \"server\", name: \"ecs\" };\n  }\n  const awsExecutionEnv = isomorph_default.getEnv(\"AWS_EXECUTION_ENV\");\n  if (awsExecutionEnv?.startsWith(\"AWS_ECS_\")) {\n    return { type: \"server\", name: \"ecs\" };\n  }\n  if (awsExecutionEnv?.startsWith(\"AWS_Lambda_\")) {\n    return { type: \"server\", name: \"aws_lambda\" };\n  }\n  if (isomorph_default.getEnv(\"AWS_LAMBDA_FUNCTION_NAME\")) {\n    return { type: \"server\", name: \"aws_lambda\" };\n  }\n  const server = firstPresent([\n    [\"K_SERVICE\", \"cloud_run\"],\n    [\"FUNCTION_TARGET\", \"gcp_functions\"],\n    [\"KUBERNETES_SERVICE_HOST\", \"kubernetes\"],\n    [\"DYNO\", \"heroku\"],\n    [\"FLY_APP_NAME\", \"fly\"],\n    [\"RAILWAY_ENVIRONMENT\", \"railway\"],\n    [\"RENDER_SERVICE_NAME\", \"render\"]\n  ]);\n  if (server) return { type: \"server\", name: server };\n  return deploymentModeEnvironment(\"NODE_ENV\", isomorph_default.getEnv(\"NODE_ENV\"));\n}\nfunction makeSpanOrigin(instrumentationName, environment) {\n  return {\n    name: \"braintrust.sdk.javascript\",\n    version: SDK_VERSION,\n    instrumentation: { name: instrumentationName },\n    ...environment ? { environment } : {}\n  };\n}\nfunction mergeSpanOriginContext(context, instrumentationName, environment) {\n  const next = { ...context ?? {} };\n  const current = isObject2(next.span_origin) ? { ...next.span_origin } : {};\n  next.span_origin = {\n    ...makeSpanOrigin(instrumentationName, environment),\n    ...current\n  };\n  return next;\n}\nfunction isSpanInstrumentationName(value) {\n  return Object.values(INSTRUMENTATION_NAMES).some((name) => name === value);\n}\nfunction firstPresent(entries) {\n  return entries.find(([key]) => Boolean(isomorph_default.getEnv(key)))?.[1];\n}\nfunction deploymentModeEnvironment(_key, value) {\n  if (!value) return void 0;\n  const normalized = value.toLowerCase();\n  if (normalized === \"production\" || normalized === \"staging\") {\n    return { type: \"server\", name: normalized };\n  }\n  if (normalized === \"development\" || normalized === \"local\") {\n    return { type: \"local\", name: normalized };\n  }\n  return { name: value };\n}\nfunction isObject2(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// src/span-customizer.ts\nvar SPAN_CUSTOMIZERS_KEY = /* @__PURE__ */ Symbol.for(\"braintrust.spanCustomizers\");\nvar shared = globalThis;\nvar PROTECTED_FIELDS = /* @__PURE__ */ new Set([\n  ID_FIELD,\n  \"span_id\",\n  \"root_span_id\",\n  \"span_parents\",\n  \"org_id\",\n  ...OBJECT_ID_KEYS,\n  IS_MERGE_FIELD,\n  MERGE_PATHS_FIELD,\n  PARENT_ID_FIELD,\n  OBJECT_DELETE_FIELD,\n  ARRAY_DELETE_FIELD,\n  TRANSACTION_ID_FIELD\n]);\nvar MASKING_FIELDS = [\n  \"input\",\n  \"output\",\n  \"expected\",\n  \"metadata\",\n  \"context\",\n  \"scores\",\n  \"metrics\"\n];\nfunction createMaskingCustomizer(maskingFunction) {\n  return {\n    onSpanExport(data) {\n      const masked = { ...data };\n      for (const field of MASKING_FIELDS) {\n        if (data[field] === void 0) continue;\n        try {\n          masked[field] = maskingFunction(data[field]);\n        } catch (error) {\n          const errorType = error instanceof Error ? error.constructor.name : \"Error\";\n          const message = `ERROR: Failed to mask field '${field}' - ${errorType}`;\n          if (field === \"scores\" || field === \"metrics\") {\n            delete masked[field];\n            masked.error = masked.error ? `${masked.error}; ${message}` : message;\n          } else {\n            masked[field] = field === \"metadata\" ? { error: message } : message;\n          }\n        }\n      }\n      return masked;\n    }\n  };\n}\nfunction isPlainRecord(value) {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === null || Object.getPrototypeOf(prototype) === null;\n}\nfunction copyProtocolValue(value) {\n  if (Array.isArray(value)) return value.map(copyProtocolValue);\n  if (isPlainRecord(value)) return copyPlainRecord(value);\n  return value;\n}\nfunction copyPlainRecord(record) {\n  return Object.fromEntries(\n    Object.entries(record).map(([key, item]) => [key, copyProtocolValue(item)])\n  );\n}\nfunction restoreProtocolFields(data, protectedFields) {\n  const restored = {};\n  for (const key of Object.keys(data)) {\n    if (!PROTECTED_FIELDS.has(key)) {\n      Object.defineProperty(restored, key, {\n        value: data[key],\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    }\n  }\n  for (const key of Object.keys(protectedFields)) {\n    restored[key] = copyProtocolValue(protectedFields[key]);\n  }\n  return restored;\n}\nvar FAILURE_LOGGING_PERIOD_MS = 6e4;\nvar failureLoggingState = {\n  numSuppressed: 0,\n  lastLoggedTimestamp: -Infinity\n};\nfunction registerCustomizerFailure() {\n  const timeNow = Date.now();\n  if (timeNow - failureLoggingState.lastLoggedTimestamp < FAILURE_LOGGING_PERIOD_MS) {\n    failureLoggingState.numSuppressed++;\n    return;\n  }\n  const suppressed = failureLoggingState.numSuppressed ? ` ${failureLoggingState.numSuppressed} additional records were dropped since the last report.` : \"\";\n  console.error(\n    `[braintrust] Span export customizer failed; dropping record.${suppressed}`\n  );\n  failureLoggingState.numSuppressed = 0;\n  failureLoggingState.lastLoggedTimestamp = timeNow;\n}\nfunction setSpanCustomizers(customizers) {\n  if (customizers?.length && isOtelCompatMode()) {\n    console.error(\n      \"Braintrust span customizers are not supported with OpenTelemetry compat mode yet.\"\n    );\n    return;\n  }\n  shared[SPAN_CUSTOMIZERS_KEY] = customizers;\n}\nfunction customizeSpanExport(data, customizers = shared[SPAN_CUSTOMIZERS_KEY]) {\n  if (!customizers?.length) return data;\n  let protectedFields;\n  for (const customizer of customizers) {\n    try {\n      if (!customizer.onSpanExport) continue;\n      if (!protectedFields) {\n        data = copyPlainRecord(data);\n        protectedFields = {};\n        for (const key of PROTECTED_FIELDS) {\n          if (Object.prototype.hasOwnProperty.call(data, key)) {\n            protectedFields[key] = copyProtocolValue(data[key]);\n          }\n        }\n      }\n      const result = customizer.onSpanExport(data);\n      if (isPromiseLike(result)) {\n        void Promise.resolve(result).catch(() => {\n        });\n        throw new TypeError(\"Span export customizers must be synchronous\");\n      }\n      if (!isPlainRecord(result)) {\n        throw new TypeError(\n          \"Span export customizers must return a plain object\"\n        );\n      }\n      data = restoreProtocolFields(result, protectedFields);\n    } catch {\n      registerCustomizerFailure();\n      return null;\n    }\n  }\n  return data;\n}\n\n// src/logger.ts\nvar BRAINTRUST_ATTACHMENT = BraintrustAttachmentReference.shape.type.value;\nvar EXTERNAL_ATTACHMENT = ExternalAttachmentReference.shape.type.value;\nvar LOGS3_OVERFLOW_REFERENCE_TYPE = \"logs3_overflow\";\nvar BRAINTRUST_PARAMS = Object.keys(BraintrustModelParams.shape);\nvar RESET_CONTEXT_MANAGER_STATE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.resetContextManagerState\"\n);\nvar DEFAULT_MAX_REQUEST_SIZE = 6 * 1024 * 1024;\nvar datasetSnapshotRegisterResponseSchema = import_v38.z.object({\n  dataset_snapshot: DatasetSnapshot,\n  found_existing: import_v38.z.boolean().optional()\n});\nvar datasetObjectInfoSchema = import_v38.z.object({\n  object_id: import_v38.z.string(),\n  object_name: import_v38.z.string(),\n  parent_cols: import_v38.z.object({\n    project: import_v38.z.object({\n      id: import_v38.z.string(),\n      name: import_v38.z.string()\n    })\n  })\n});\nvar datasetRestorePreviewResultSchema = import_v38.z.object({\n  rows_to_restore: import_v38.z.number(),\n  rows_to_delete: import_v38.z.number()\n});\nvar datasetRestoreResultSchema = import_v38.z.object({\n  xact_id: import_v38.z.string().nullable(),\n  rows_restored: import_v38.z.number(),\n  rows_deleted: import_v38.z.number()\n});\nvar parametersRowSchema = import_v38.z.object({\n  id: import_v38.z.string().uuid(),\n  _xact_id: import_v38.z.string(),\n  project_id: import_v38.z.string().uuid(),\n  name: import_v38.z.string(),\n  slug: import_v38.z.string(),\n  description: import_v38.z.union([import_v38.z.string(), import_v38.z.null()]).optional(),\n  function_type: import_v38.z.literal(\"parameters\"),\n  function_data: import_v38.z.object({\n    type: import_v38.z.literal(\"parameters\"),\n    data: import_v38.z.record(import_v38.z.unknown()).optional(),\n    __schema: import_v38.z.record(import_v38.z.unknown())\n  }),\n  metadata: import_v38.z.union([import_v38.z.object({}).partial().passthrough(), import_v38.z.null()]).optional()\n});\nvar InlineAttachmentReferenceSchema = import_v38.z.object({\n  type: import_v38.z.literal(\"inline_attachment\"),\n  src: import_v38.z.string().min(1),\n  content_type: import_v38.z.string().optional(),\n  filename: import_v38.z.string().optional()\n});\nvar LoginInvalidOrgError = class extends Error {\n  constructor(message) {\n    super(message);\n    this.message = message;\n  }\n  message;\n};\nvar INITIAL_SPAN_WRITE_AS_MERGE = /* @__PURE__ */ Symbol(\n  \"braintrust.initial-span-write-as-merge\"\n);\nvar RESUME_SPAN_WITHOUT_INITIAL_WRITE = /* @__PURE__ */ Symbol(\n  \"braintrust.resume-span-without-initial-write\"\n);\nvar INTERNAL_SPAN_CONTEXT = /* @__PURE__ */ Symbol(\"braintrust.internal-span-context\");\nvar BRAINTRUST_CURRENT_SPAN_STORE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.currentSpanStore\"\n);\nvar ContextManager = class {\n  /**\n   * Returns the value to store in the ALS bound to a global hook's start event.\n   * In default mode this is the Span itself; in OTEL mode it is the OTEL Context\n   * containing the span so that OTEL's own ALS stores a proper Context object.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  wrapSpanForStore(span) {\n    return span;\n  }\n};\nvar BraintrustContextManager = class extends ContextManager {\n  _currentSpan;\n  [BRAINTRUST_CURRENT_SPAN_STORE];\n  constructor() {\n    super();\n    this._currentSpan = isomorph_default.newAsyncLocalStorage();\n    this[BRAINTRUST_CURRENT_SPAN_STORE] = this._currentSpan;\n  }\n  getParentSpanIds() {\n    const currentSpan2 = this._currentSpan.getStore();\n    if (!currentSpan2) {\n      return void 0;\n    }\n    return {\n      rootSpanId: currentSpan2.rootSpanId,\n      spanParents: [currentSpan2.spanId]\n    };\n  }\n  runInContext(span, callback) {\n    return this._currentSpan.run(span, callback);\n  }\n  getCurrentSpan() {\n    return this._currentSpan.getStore();\n  }\n};\nfunction getSpanComponentsClass() {\n  if (globalThis.BRAINTRUST_SPAN_COMPONENT) {\n    return globalThis.BRAINTRUST_SPAN_COMPONENT;\n  }\n  return resolveUseLegacyUuidIds() ? SpanComponentsV3 : SpanComponentsV4;\n}\nfunction getContextManager() {\n  return globalThis.BRAINTRUST_CONTEXT_MANAGER ? new globalThis.BRAINTRUST_CONTEXT_MANAGER() : new BraintrustContextManager();\n}\nvar NoopSpan = class {\n  id;\n  spanId;\n  rootSpanId;\n  spanParents;\n  kind = \"span\";\n  constructor() {\n    this.id = \"\";\n    this.spanId = \"\";\n    this.rootSpanId = \"\";\n    this.spanParents = [];\n  }\n  log(_) {\n  }\n  logFeedback(_event) {\n  }\n  traced(callback, _1) {\n    return callback(this);\n  }\n  getParentInfo() {\n    return void 0;\n  }\n  startSpan(_1) {\n    return this;\n  }\n  end(args) {\n    return args?.endTime ?? getCurrentUnixTimestamp();\n  }\n  async export() {\n    return \"\";\n  }\n  inject(carrier) {\n    return carrier ?? {};\n  }\n  async permalink() {\n    return NOOP_SPAN_PERMALINK;\n  }\n  link() {\n    return NOOP_SPAN_PERMALINK;\n  }\n  async flush() {\n  }\n  close(args) {\n    return this.end(args);\n  }\n  setAttributes(_args) {\n  }\n  startSpanWithParents(_spanId, _spanParents, _args) {\n    return this;\n  }\n  state() {\n    return _internalGetGlobalState();\n  }\n  // Custom inspect for Node.js console.log\n  [/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    return `NoopSpan {\n  kind: '${this.kind}',\n  id: '${this.id}',\n  spanId: '${this.spanId}',\n  rootSpanId: '${this.rootSpanId}',\n  spanParents: ${JSON.stringify(this.spanParents)}\n}`;\n  }\n  // Custom toString\n  toString() {\n    return `NoopSpan(id=${this.id}, spanId=${this.spanId})`;\n  }\n};\nvar NOOP_SPAN = new NoopSpan();\nvar NOOP_SPAN_PERMALINK = \"https://braintrust.dev/noop-span\";\nvar loginSchema = import_v38.z.strictObject({\n  appUrl: import_v38.z.string(),\n  appPublicUrl: import_v38.z.string(),\n  orgName: import_v38.z.string(),\n  apiUrl: import_v38.z.string(),\n  proxyUrl: import_v38.z.string(),\n  loginToken: import_v38.z.string(),\n  orgId: import_v38.z.string().nullish(),\n  gitMetadataSettings: GitMetadataSettings.nullish(),\n  debugLogLevel: import_v38.z.enum([\"error\", \"warn\", \"info\", \"debug\"]).optional(),\n  // Distinguishes explicit false from unset so env fallback stays disabled after deserialization.\n  debugLogLevelDisabled: import_v38.z.boolean().optional()\n});\nvar stateNonce = 0;\nvar V1_PROXY_SUFFIX = \"/v1/proxy\";\nvar LOADER_LOGIN_CACHE_MAX = 16;\nvar LOGIN_TIMEOUT_MS = 3e4;\nvar PROJECT_LOOKUP_TIMEOUT_MS = 3e4;\nvar PROJECT_CACHE_TTL_MS = 15 * 60 * 1e3;\nfunction normalizeProxyConnUrl(proxyUrl) {\n  return proxyUrl.endsWith(V1_PROXY_SUFFIX) ? proxyUrl.slice(0, proxyUrl.length - V1_PROXY_SUFFIX.length) : proxyUrl;\n}\nvar BraintrustState = class _BraintrustState {\n  id;\n  currentExperiment;\n  // Note: the value of IsAsyncFlush doesn't really matter here, since we\n  // (safely) dynamically cast it whenever retrieving the logger.\n  currentLogger;\n  currentParent;\n  currentSpan;\n  // Any time we re-log in, we directly update the apiConn inside the logger.\n  // This is preferable to replacing the whole logger, which would create the\n  // possibility of multiple loggers floating around, which may not log in a\n  // deterministic order.\n  _bgLogger;\n  _overrideBgLogger = null;\n  appUrl = null;\n  appPublicUrl = null;\n  loginToken = null;\n  orgId = null;\n  orgName = null;\n  apiUrl = null;\n  proxyUrl = null;\n  loggedIn = false;\n  gitMetadataSettings;\n  debugLogLevel;\n  debugLogLevelConfigured = false;\n  fetch = globalThis.fetch;\n  _appConn = null;\n  _apiConn = null;\n  _proxyConn = null;\n  promptCache;\n  parametersCache;\n  spanCache;\n  /** @internal */\n  projectMetadataCache = new LRUCache({ max: 1e3 });\n  _idGenerator = null;\n  _contextManager = null;\n  _otelFlushCallback = null;\n  spanOriginEnvironment;\n  traceContextSigningSecret;\n  loaderLoginCache = /* @__PURE__ */ new WeakMap();\n  loginParams;\n  activeLoginOrgNameSelector;\n  loginGeneration = 0;\n  loginQueueTail;\n  pendingLogins = /* @__PURE__ */ new WeakMap();\n  constructor(loginParams) {\n    this.loginParams = { ...loginParams };\n    this.activeLoginOrgNameSelector = loginParams.orgName ?? isomorph_default.getEnv(\"BRAINTRUST_ORG_NAME\");\n    this.id = `${(/* @__PURE__ */ new Date()).toLocaleString()}-${stateNonce++}`;\n    this.currentExperiment = void 0;\n    this.currentLogger = void 0;\n    this.currentParent = isomorph_default.newAsyncLocalStorage();\n    this.currentSpan = isomorph_default.newAsyncLocalStorage();\n    if (loginParams.fetch) {\n      this.fetch = loginParams.fetch;\n    }\n    const defaultGetLogConn = async () => {\n      await this.login({});\n      return this.apiConn();\n    };\n    this._bgLogger = new SyncLazyValue(\n      () => new HTTPBackgroundLogger(new LazyValue(defaultGetLogConn), loginParams)\n    );\n    if (loginParams.debugLogLevel !== void 0) {\n      this.debugLogLevelConfigured = true;\n      this.debugLogLevel = normalizeDebugLogLevelOption(\n        loginParams.debugLogLevel\n      );\n      setGlobalDebugLogLevel(this.debugLogLevel ?? false);\n    } else {\n      this.debugLogLevel = getEnvDebugLogLevel();\n      setGlobalDebugLogLevel(void 0);\n    }\n    this.resetLoginInfo();\n    const { memoryCache, diskCache } = createCacheLayers({\n      memoryMaxEnvVar: \"BRAINTRUST_PROMPT_CACHE_MEMORY_MAX\",\n      diskCacheDirEnvVar: \"BRAINTRUST_PROMPT_CACHE_DIR\",\n      diskMaxEnvVar: \"BRAINTRUST_PROMPT_CACHE_DISK_MAX\",\n      getDefaultDiskCacheDir: () => `${isomorph_default.getEnv(\"HOME\") ?? isomorph_default.homedir()}/.braintrust/prompt_cache`\n    });\n    this.promptCache = new PromptCache({ memoryCache, diskCache });\n    const {\n      memoryCache: parametersMemoryCache,\n      diskCache: parametersDiskCache\n    } = createCacheLayers(\n      {\n        memoryMaxEnvVar: \"BRAINTRUST_PARAMETERS_CACHE_MEMORY_MAX\",\n        diskCacheDirEnvVar: \"BRAINTRUST_PARAMETERS_CACHE_DIR\",\n        diskMaxEnvVar: \"BRAINTRUST_PARAMETERS_CACHE_DISK_MAX\",\n        getDefaultDiskCacheDir: () => `${isomorph_default.getEnv(\"HOME\") ?? isomorph_default.homedir()}/.braintrust/parameters_cache`\n      }\n    );\n    this.parametersCache = new ParametersCache({\n      memoryCache: parametersMemoryCache,\n      diskCache: parametersDiskCache\n    });\n    this.spanCache = new SpanCache({ disabled: loginParams.disableSpanCache });\n    this.spanOriginEnvironment = detectSpanOriginEnvironment();\n    this._internalSetTraceContextSigningSecret(loginParams.apiKey);\n  }\n  /** @internal */\n  _internalSetTraceContextSigningSecret(secret) {\n    const normalizedSecret = secret?.trim();\n    if (normalizedSecret) {\n      this.traceContextSigningSecret = normalizedSecret;\n    }\n  }\n  /** @internal */\n  _internalGetTraceContextSigningSecret() {\n    return (this.traceContextSigningSecret ?? this.loginToken ?? isomorph_default.getEnv(\"BRAINTRUST_API_KEY\"))?.trim();\n  }\n  resetLoginInfo() {\n    this.loginGeneration++;\n    this.loginQueueTail = void 0;\n    this.pendingLogins = /* @__PURE__ */ new WeakMap();\n    this.projectMetadataCache.clear();\n    this.appUrl = null;\n    this.appPublicUrl = null;\n    this.loginToken = null;\n    this.orgId = null;\n    this.orgName = null;\n    this.apiUrl = null;\n    this.proxyUrl = null;\n    this.loggedIn = false;\n    this.gitMetadataSettings = void 0;\n    this._appConn = null;\n    this._apiConn = null;\n    this._proxyConn = null;\n    this.loaderLoginCache = /* @__PURE__ */ new WeakMap();\n  }\n  /** @internal */\n  async _internalResolveLoaderLoginOptions({\n    apiKey,\n    appUrl,\n    orgName,\n    fetch: fetch2,\n    forceLogin\n  }) {\n    const resolvedAppUrl = appUrl ?? (this.loggedIn ? this.appUrl ?? void 0 : void 0) ?? this.loginParams.appUrl ?? isomorph_default.getEnv(\"BRAINTRUST_APP_URL\") ?? \"https://www.braintrust.dev\";\n    const resolvedApiKey = apiKey ?? (this.loggedIn ? this.loginToken ?? void 0 : void 0) ?? this.loginParams.apiKey ?? await isomorph_default.getBraintrustApiKey();\n    if (!resolvedApiKey) {\n      throw new Error(\n        \"Please specify an api key (e.g. by setting BRAINTRUST_API_KEY).\"\n      );\n    }\n    const normalizedApiKey = HTTPConnection.sanitize_token(resolvedApiKey);\n    const usesActiveCredential = this.loggedIn && normalizedApiKey === this.loginToken;\n    const requestedOrgName = orgName ?? (usesActiveCredential ? this.activeLoginOrgNameSelector : void 0) ?? this.loginParams.orgName ?? isomorph_default.getEnv(\"BRAINTRUST_ORG_NAME\");\n    const resolvedOrgName = orgName ?? (usesActiveCredential ? this.orgName ?? void 0 : void 0) ?? requestedOrgName;\n    const resolvedFetch = fetch2 ?? (this.loggedIn ? this.fetch : void 0) ?? this.loginParams.fetch ?? globalThis.fetch;\n    const credentialCacheNamespace = JSON.stringify([\n      \"loader-credential\",\n      resolvedAppUrl,\n      requestedOrgName,\n      normalizedApiKey\n    ]);\n    return {\n      apiKey: normalizedApiKey,\n      appUrl: resolvedAppUrl,\n      orgName: resolvedOrgName,\n      fetch: resolvedFetch,\n      forceLogin,\n      credentialCacheNamespace,\n      existingState: !forceLogin && usesActiveCredential && resolvedAppUrl === this.appUrl && resolvedOrgName === this.orgName && resolvedFetch === this.fetch ? this : void 0\n    };\n  }\n  /** @internal */\n  _internalGetLoaderCacheViews(loginOptions, requestState) {\n    const expectedResolvedOrgIdentity = requestState?.orgId && requestState.appUrl ? JSON.stringify([\n      \"loader-org\",\n      requestState.appUrl,\n      requestState.orgId\n    ]) : void 0;\n    return {\n      promptCache: this.promptCache.withNamespace(\n        loginOptions.credentialCacheNamespace,\n        expectedResolvedOrgIdentity\n      ),\n      parametersCache: this.parametersCache.withNamespace(\n        loginOptions.credentialCacheNamespace,\n        expectedResolvedOrgIdentity\n      )\n    };\n  }\n  /** @internal */\n  async _internalGetLoaderState({\n    apiKey,\n    appUrl,\n    orgName,\n    fetch: fetch2,\n    forceLogin,\n    existingState\n  }) {\n    if (existingState) {\n      return existingState;\n    }\n    let cache = this.loaderLoginCache.get(fetch2);\n    if (!cache) {\n      cache = new LRUCache({ max: LOADER_LOGIN_CACHE_MAX });\n      this.loaderLoginCache.set(fetch2, cache);\n    }\n    const cacheKey = JSON.stringify([appUrl, orgName, apiKey]);\n    if (!forceLogin) {\n      const cachedState = cache.get(cacheKey);\n      if (cachedState) {\n        return cachedState;\n      }\n    }\n    const statePromise = loginToLoaderRequestState({\n      orgName,\n      apiKey,\n      appUrl,\n      fetch: fetch2\n    });\n    cache.set(cacheKey, statePromise);\n    try {\n      return await statePromise;\n    } catch (error) {\n      if (cache.get(cacheKey) === statePromise) {\n        cache.delete(cacheKey);\n      }\n      throw error;\n    }\n  }\n  resetIdGenState() {\n    this._idGenerator = null;\n  }\n  [RESET_CONTEXT_MANAGER_STATE]() {\n    this._contextManager = null;\n  }\n  get idGenerator() {\n    if (this._idGenerator === null) {\n      this._idGenerator = getIdGenerator();\n    }\n    return this._idGenerator;\n  }\n  get contextManager() {\n    if (this._contextManager === null) {\n      this._contextManager = getContextManager();\n    }\n    return this._contextManager;\n  }\n  /**\n   * Register an OTEL flush callback. This is called by @braintrust/otel\n   * when it initializes a BraintrustSpanProcessor/Exporter.\n   */\n  registerOtelFlush(callback) {\n    this._otelFlushCallback = callback;\n  }\n  /**\n   * Flush OTEL spans if a callback is registered.\n   * Called during ensureSpansFlushed to ensure OTEL spans are visible in BTQL.\n   */\n  async flushOtel() {\n    if (this._otelFlushCallback) {\n      await this._otelFlushCallback();\n    }\n  }\n  copyLoginInfo(other) {\n    this.projectMetadataCache.clear();\n    this.appUrl = other.appUrl;\n    this.appPublicUrl = other.appPublicUrl;\n    this.loginToken = other.loginToken;\n    this.orgId = other.orgId;\n    this.orgName = other.orgName;\n    this.apiUrl = other.apiUrl;\n    this.proxyUrl = other.proxyUrl;\n    this.loggedIn = other.loggedIn;\n    this.gitMetadataSettings = other.gitMetadataSettings;\n    this.debugLogLevel = other.debugLogLevel;\n    this.debugLogLevelConfigured = other.debugLogLevelConfigured;\n    this.traceContextSigningSecret = other.traceContextSigningSecret;\n    this.fetch = other.fetch;\n    this.activeLoginOrgNameSelector = other.activeLoginOrgNameSelector;\n    setGlobalDebugLogLevel(\n      this.debugLogLevelConfigured ? this.debugLogLevel ?? false : void 0\n    );\n    this._appConn = other._appConn;\n    this._apiConn = other._apiConn;\n    this.loginReplaceApiConn(this.apiConn());\n    this._proxyConn = other._proxyConn;\n  }\n  serialize() {\n    if (!this.loggedIn) {\n      throw new Error(\n        \"Cannot serialize BraintrustState without being logged in\"\n      );\n    }\n    if (!this.appUrl || !this.appPublicUrl || !this.apiUrl || !this.proxyUrl || !this.orgName || !this.loginToken || !this.loggedIn) {\n      throw new Error(\n        \"Cannot serialize BraintrustState without all login attributes\"\n      );\n    }\n    return {\n      appUrl: this.appUrl,\n      appPublicUrl: this.appPublicUrl,\n      loginToken: this.loginToken,\n      orgId: this.orgId,\n      orgName: this.orgName,\n      apiUrl: this.apiUrl,\n      proxyUrl: this.proxyUrl,\n      gitMetadataSettings: this.gitMetadataSettings,\n      ...this.debugLogLevel ? { debugLogLevel: this.debugLogLevel } : {},\n      ...this.debugLogLevelConfigured && !this.debugLogLevel ? { debugLogLevelDisabled: true } : {}\n    };\n  }\n  static deserialize(serialized, opts) {\n    const serializedParsed = loginSchema.safeParse(serialized);\n    if (!serializedParsed.success) {\n      throw new Error(\n        `Cannot deserialize BraintrustState: ${serializedParsed.error.message}`\n      );\n    }\n    const state = new _BraintrustState({ ...opts });\n    for (const key of Object.keys(loginSchema.shape)) {\n      state[key] = serializedParsed.data[key];\n    }\n    if (!state.loginToken) {\n      throw new Error(\n        \"Cannot deserialize BraintrustState without a login token\"\n      );\n    }\n    state.apiConn().set_token(state.loginToken);\n    state.apiConn().make_long_lived();\n    state.appConn().set_token(state.loginToken);\n    if (state.proxyUrl) {\n      state.proxyConn().make_long_lived();\n      state.proxyConn().set_token(state.loginToken);\n    }\n    state.loggedIn = true;\n    state.debugLogLevelConfigured = \"debugLogLevel\" in serializedParsed.data || !!serializedParsed.data.debugLogLevelDisabled;\n    setGlobalDebugLogLevel(\n      state.debugLogLevelConfigured ? state.debugLogLevel ?? false : void 0\n    );\n    state.loginReplaceApiConn(state.apiConn());\n    return state;\n  }\n  setFetch(fetch2) {\n    if (fetch2 !== this.fetch) {\n      this.projectMetadataCache.clear();\n    }\n    this.loginParams.fetch = fetch2;\n    this.fetch = fetch2;\n    this._apiConn?.setFetch(fetch2);\n    this._appConn?.setFetch(fetch2);\n  }\n  setMaskingFunction(maskingFunction) {\n    this.bgLogger().setMaskingFunction(maskingFunction);\n  }\n  setDebugLogLevel(option) {\n    if (option === void 0) {\n      return;\n    }\n    this.debugLogLevelConfigured = true;\n    this.debugLogLevel = normalizeDebugLogLevelOption(option);\n    setGlobalDebugLogLevel(this.debugLogLevel ?? false);\n  }\n  getDebugLogLevel() {\n    return this.debugLogLevel;\n  }\n  hasDebugLogLevelOverride() {\n    return this.debugLogLevelConfigured;\n  }\n  async login(loginParams) {\n    this._internalSetTraceContextSigningSecret(loginParams.apiKey);\n    this.setDebugLogLevel(loginParams.debugLogLevel);\n    if (this.apiUrl && !loginParams.forceLogin) {\n      return;\n    }\n    const generation = this.loginGeneration;\n    const pendingLogins = this.pendingLogins;\n    const options = {\n      ...this.loginParams,\n      ...Object.fromEntries(\n        Object.entries(loginParams).filter(([k, v]) => !isEmpty2(v))\n      )\n    };\n    const appUrl = options.appUrl ?? (isomorph_default.getEnv(\"BRAINTRUST_APP_URL\") || \"https://www.braintrust.dev\");\n    const orgName = options.orgName ?? isomorph_default.getEnv(\"BRAINTRUST_ORG_NAME\");\n    const fetch2 = options.fetch ?? globalThis.fetch;\n    const apiKey = options.apiKey ?? await isomorph_default.getBraintrustApiKey();\n    if (generation !== this.loginGeneration) {\n      throw new Error(\"Login cancelled by a reset.\");\n    }\n    if (this.apiUrl && !loginParams.forceLogin) {\n      if (this.appUrl !== appUrl || this.loginToken !== (apiKey && HTTPConnection.sanitize_token(apiKey)) || this.activeLoginOrgNameSelector !== orgName || this.fetch !== fetch2) {\n        throw new Error(\n          \"Another login completed with different options during credential discovery. To force re-login, pass `forceLogin: true`.\"\n        );\n      }\n      return;\n    }\n    let pending = pendingLogins.get(fetch2);\n    if (!pending) {\n      pending = /* @__PURE__ */ new Map();\n      pendingLogins.set(fetch2, pending);\n    }\n    const key = JSON.stringify([\n      appUrl,\n      orgName,\n      apiKey,\n      options.debugLogLevel\n    ]);\n    const existing = pending.get(key);\n    if (!loginParams.forceLogin && existing) {\n      return existing;\n    }\n    const previousLogin = this.loginQueueTail;\n    const loginPromise = (async () => {\n      if (previousLogin) {\n        await previousLogin.catch(() => {\n        });\n      }\n      if (generation !== this.loginGeneration) {\n        throw new Error(\"Login cancelled by a reset.\");\n      }\n      const newState = await loginToState({\n        ...options,\n        appUrl,\n        orgName,\n        apiKey,\n        fetch: fetch2\n      });\n      if (generation !== this.loginGeneration) {\n        throw new Error(\"Login cancelled by a reset.\");\n      }\n      this.copyLoginInfo(newState);\n    })();\n    this.loginQueueTail = loginPromise;\n    pending.set(key, loginPromise);\n    try {\n      await loginPromise;\n    } finally {\n      if (this.loginQueueTail === loginPromise) {\n        this.loginQueueTail = void 0;\n      }\n      if (pending.get(key) === loginPromise) {\n        pending.delete(key);\n      }\n    }\n  }\n  appConn() {\n    if (!this._appConn) {\n      if (!this.appUrl) {\n        throw new Error(\"Must initialize appUrl before requesting appConn\");\n      }\n      this._appConn = new HTTPConnection(this.appUrl, this.fetch);\n    }\n    return this._appConn;\n  }\n  apiConn() {\n    if (!this._apiConn) {\n      if (!this.apiUrl) {\n        throw new Error(\"Must initialize apiUrl before requesting apiConn\");\n      }\n      this._apiConn = new HTTPConnection(this.apiUrl, this.fetch);\n    }\n    return this._apiConn;\n  }\n  proxyConn() {\n    if (!this.proxyUrl) {\n      return this.apiConn();\n    }\n    if (!this._proxyConn) {\n      if (!this.proxyUrl) {\n        throw new Error(\"Must initialize proxyUrl before requesting proxyConn\");\n      }\n      this._proxyConn = new HTTPConnection(\n        normalizeProxyConnUrl(this.proxyUrl),\n        this.fetch\n      );\n    }\n    return this._proxyConn;\n  }\n  bgLogger() {\n    if (this._overrideBgLogger) {\n      return this._overrideBgLogger;\n    }\n    return this._bgLogger.get();\n  }\n  httpLogger() {\n    return this._bgLogger.get();\n  }\n  setOverrideBgLogger(logger) {\n    this._overrideBgLogger = logger;\n  }\n  // Should only be called by the login function.\n  loginReplaceApiConn(apiConn) {\n    this._bgLogger.get().internalReplaceApiConn(apiConn);\n  }\n  disable() {\n    this._bgLogger.get().disable();\n  }\n  enforceQueueSizeLimit(enforce) {\n    this._bgLogger.get().enforceQueueSizeLimit(enforce);\n  }\n  // Custom serialization to avoid logging sensitive data\n  toJSON() {\n    return {\n      id: this.id,\n      orgId: this.orgId,\n      orgName: this.orgName,\n      appUrl: this.appUrl,\n      appPublicUrl: this.appPublicUrl,\n      apiUrl: this.apiUrl,\n      proxyUrl: this.proxyUrl,\n      loggedIn: this.loggedIn\n      // Explicitly exclude loginToken, _apiConn, _appConn, _proxyConn and other sensitive fields\n    };\n  }\n  // Custom inspect for Node.js console.log\n  [/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    return `BraintrustState {\n  id: '${this.id}',\n  orgId: ${this.orgId ? `'${this.orgId}'` : \"null\"},\n  orgName: ${this.orgName ? `'${this.orgName}'` : \"null\"},\n  appUrl: ${this.appUrl ? `'${this.appUrl}'` : \"null\"},\n  apiUrl: ${this.apiUrl ? `'${this.apiUrl}'` : \"null\"},\n  proxyUrl: ${this.proxyUrl ? `'${this.proxyUrl}'` : \"null\"},\n  loggedIn: ${this.loggedIn},\n  loginToken: '[REDACTED]'\n}`;\n  }\n  // Custom toString\n  toString() {\n    return `BraintrustState(id=${this.id}, org=${this.orgName || \"none\"}, loggedIn=${this.loggedIn})`;\n  }\n};\nvar _globalState;\nfunction useTestBackgroundLogger() {\n  const state = _internalGetGlobalState();\n  if (!state) {\n    throw new Error(\"global state not set yet\");\n  }\n  const logger = new TestBackgroundLogger();\n  state.setOverrideBgLogger(logger);\n  return logger;\n}\nfunction clearTestBackgroundLogger() {\n  _internalGetGlobalState()?.setOverrideBgLogger(null);\n}\nfunction initTestExperiment(experimentName, projectName, experimentFullInfo = {}) {\n  setInitialTestState();\n  const state = _internalGetGlobalState();\n  const project = projectName ?? experimentName;\n  const lazyMetadata = new LazyValue(\n    async () => ({\n      project: { id: project, name: project, fullInfo: {} },\n      experiment: {\n        id: experimentName,\n        name: experimentName,\n        fullInfo: experimentFullInfo\n      }\n    })\n  );\n  return new Experiment2(state, lazyMetadata);\n}\nfunction _internalSetInitialState() {\n  if (_globalState) {\n    return;\n  }\n  const sym = /* @__PURE__ */ Symbol.for(\"braintrust-state\");\n  let existing = globalThis[sym];\n  if (!existing) {\n    const state = new BraintrustState({});\n    globalThis[sym] = state;\n    existing = state;\n  }\n  _globalState = existing;\n}\nvar _internalGetGlobalState = () => _globalState;\nsetDebugLogStateResolver(() => _internalGetGlobalState());\nfunction registerOtelFlush(callback) {\n  _globalState?.registerOtelFlush(callback);\n  _globalState?.spanCache?.disable();\n}\nvar FailedHTTPResponse = class extends Error {\n  status;\n  text;\n  data;\n  cause;\n  constructor(status, text, data, cause) {\n    super(`${status}: ${text} (${data})`);\n    this.status = status;\n    this.text = text;\n    this.data = data;\n    this.cause = cause;\n  }\n};\nvar HTTPTransportError = class extends Error {\n  cause;\n  constructor(cause) {\n    super(cause instanceof Error ? cause.message : String(cause));\n    this.name = \"HTTPTransportError\";\n    this.cause = cause;\n  }\n};\nvar httpTransportErrorCauses = /* @__PURE__ */ new WeakSet();\nfunction recordHTTPTransportError(error) {\n  if (typeof error === \"object\" && error !== null || typeof error === \"function\") {\n    httpTransportErrorCauses.add(error);\n  }\n}\nfunction rethrowHTTPTransportError(error, classifyTransportErrors) {\n  if (classifyTransportErrors) {\n    throw new HTTPTransportError(error);\n  }\n  recordHTTPTransportError(error);\n  throw error;\n}\nfunction isLoaderCacheFallbackError(error) {\n  if (error instanceof FailedHTTPResponse) {\n    return error.status === 408 || error.status === 429 || error.status >= 500;\n  }\n  if (error instanceof HTTPTransportError) {\n    return true;\n  }\n  return (typeof error === \"object\" && error !== null || typeof error === \"function\") && httpTransportErrorCauses.has(error);\n}\nasync function readJSONResponse(response, classifyTransportErrors = false) {\n  let data;\n  try {\n    data = await response.text();\n  } catch (error) {\n    rethrowHTTPTransportError(error, classifyTransportErrors);\n  }\n  return JSON.parse(data);\n}\nasync function checkResponse(resp) {\n  if (resp.ok) {\n    return resp;\n  }\n  let data;\n  try {\n    data = await resp.text();\n  } catch (error) {\n    throw new FailedHTTPResponse(\n      resp.status,\n      resp.statusText,\n      \"Unable to read response body\",\n      error\n    );\n  }\n  throw new FailedHTTPResponse(resp.status, resp.statusText, data);\n}\nvar HTTPConnection = class _HTTPConnection {\n  constructor(base_url, fetch2, classifyTransportErrors = false) {\n    this.classifyTransportErrors = classifyTransportErrors;\n    this.base_url = base_url;\n    this.token = null;\n    this.headers = {};\n    this._reset();\n    this.fetch = fetch2;\n  }\n  classifyTransportErrors;\n  base_url;\n  token;\n  headers;\n  fetch;\n  setFetch(fetch2) {\n    this.fetch = fetch2;\n  }\n  async ping() {\n    try {\n      const resp = await this.get(\"ping\");\n      return resp.status === 200;\n    } catch {\n      return false;\n    }\n  }\n  make_long_lived() {\n    this._reset();\n  }\n  static sanitize_token(token) {\n    return token.trim();\n  }\n  set_token(token) {\n    token = _HTTPConnection.sanitize_token(token);\n    this.token = token;\n    this._reset();\n  }\n  // As far as I can tell, you cannot set the retry/backoff factor here\n  _reset() {\n    this.headers = {};\n    if (this.token) {\n      this.headers[\"Authorization\"] = `Bearer ${this.token}`;\n    }\n  }\n  async get(path, params = void 0, config) {\n    const { headers, ...rest } = config || {};\n    const url = new URL(_urljoin(this.base_url, path));\n    url.search = new URLSearchParams(\n      params ? Object.entries(params).filter(([_, v]) => v !== void 0).flatMap(\n        ([k, v]) => v !== void 0 ? typeof v === \"string\" ? [[k, v]] : v.map((x) => [k, x]) : []\n      ) : []\n    ).toString();\n    const this_fetch = this.fetch;\n    const this_headers = this.headers;\n    let response;\n    try {\n      response = await this_fetch(url.toString(), {\n        headers: {\n          Accept: \"application/json\",\n          ...this_headers,\n          ...headers\n        },\n        keepalive: true,\n        ...rest\n      });\n    } catch (error) {\n      if (config?.signal?.aborted) {\n        throw getAbortReason(config.signal);\n      }\n      rethrowHTTPTransportError(error, this.classifyTransportErrors);\n    }\n    return await checkResponse(response);\n  }\n  async post(path, params, config, retries = 0) {\n    const { headers, ...rest } = config || {};\n    const this_fetch = this.fetch;\n    const this_base_url = this.base_url;\n    const this_headers = this.headers;\n    const tries = retries + 1;\n    for (let i = 0; i < tries; i++) {\n      try {\n        let response;\n        try {\n          response = await this_fetch(_urljoin(this_base_url, path), {\n            method: \"POST\",\n            headers: {\n              Accept: \"application/json\",\n              \"Content-Type\": \"application/json\",\n              ...this_headers,\n              ...headers\n            },\n            body: typeof params === \"string\" ? params : params ? JSON.stringify(params) : void 0,\n            keepalive: true,\n            ...rest\n          });\n        } catch (error) {\n          if (config?.signal?.aborted) {\n            throw getAbortReason(config.signal);\n          }\n          rethrowHTTPTransportError(error, this.classifyTransportErrors);\n        }\n        return await checkResponse(response);\n      } catch (error) {\n        if (config?.signal?.aborted) {\n          throw getAbortReason(config.signal);\n        }\n        if (i === tries - 1 || !isRetryableHTTPError(error)) {\n          throw error;\n        }\n        debugLogger.debug(\n          `Retrying API request ${path} after ${formatHTTPError(error)}`\n        );\n        const sleepTimeMs = HTTP_RETRY_BASE_SLEEP_TIME_S * 1e3 * 2 ** i + Math.random() * HTTP_RETRY_JITTER_MS;\n        debugLogger.info(\n          `Sleeping for ${sleepTimeMs}ms before retrying API request`\n        );\n        await waitForRetry(sleepTimeMs, config?.signal);\n      }\n    }\n    throw new Error(\"Unexpected retry state\");\n  }\n  async get_json(object_type, args = void 0, retries = 0, signal) {\n    const tries = retries + 1;\n    for (let i = 0; i < tries; i++) {\n      try {\n        const resp = await this.get(`${object_type}`, args, { signal });\n        return await readJSONResponse(resp, this.classifyTransportErrors);\n      } catch (e) {\n        if (signal?.aborted) {\n          throw getAbortReason(signal);\n        }\n        if (i < tries - 1) {\n          debugLogger.debug(\n            `Retrying API request ${object_type} ${JSON.stringify(args)} ${e.status} ${e.text}`\n          );\n          const sleepTimeS = HTTP_RETRY_BASE_SLEEP_TIME_S * 2 ** i;\n          debugLogger.info(\n            `Sleeping for ${sleepTimeS}s before retrying API request`\n          );\n          await waitForRetry(sleepTimeS * 1e3, signal);\n          continue;\n        }\n        throw e;\n      }\n    }\n  }\n  async post_json(object_type, args = void 0, signal) {\n    const resp = await this.post(`${object_type}`, args, {\n      headers: { \"Content-Type\": \"application/json\" },\n      signal\n    });\n    return await readJSONResponse(resp, this.classifyTransportErrors);\n  }\n  // Custom inspect for Node.js console.log\n  [/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    return `HTTPConnection {\n  base_url: '${this.base_url}',\n  token: '[REDACTED]'\n}`;\n  }\n  // Custom toString\n  toString() {\n    return `HTTPConnection(${this.base_url})`;\n  }\n};\nvar BaseAttachment = class {\n  reference;\n};\nvar Attachment = class extends BaseAttachment {\n  /**\n   * The object that replaces this `Attachment` at upload time.\n   */\n  reference;\n  uploader;\n  _data;\n  state;\n  // For debug logging only.\n  dataDebugString;\n  /**\n   * Construct an attachment.\n   *\n   * @param param A parameter object with:\n   *\n   * `data`: A string representing the path of the file on disk, or a\n   * `Blob`/`ArrayBuffer` with the file's contents. The caller is responsible\n   * for ensuring the file/blob/buffer is not modified until upload is complete.\n   *\n   * `filename`: The desired name of the file in Braintrust after uploading.\n   * This parameter is for visualization purposes only and has no effect on\n   * attachment storage.\n   *\n   * `contentType`: The MIME type of the file.\n   *\n   * `state`: (Optional) For internal use.\n   */\n  constructor({ data, filename, contentType, state }) {\n    super();\n    this.reference = {\n      type: BRAINTRUST_ATTACHMENT,\n      filename,\n      content_type: contentType,\n      key: newId()\n    };\n    this.state = state;\n    this.dataDebugString = typeof data === \"string\" ? data : \"<in-memory data>\";\n    this._data = this.initData(data);\n    this.uploader = this.initUploader();\n  }\n  /**\n   * On first access, (1) reads the attachment from disk if needed, (2)\n   * authenticates with the data plane to request a signed URL, (3) uploads to\n   * object store, and (4) updates the attachment.\n   *\n   * @returns The attachment status.\n   */\n  async upload() {\n    return await this.uploader.get();\n  }\n  /**\n   * The attachment contents. This is a lazy value that will read the attachment contents from disk or memory on first access.\n   */\n  async data() {\n    return this._data.get();\n  }\n  /**\n   * A human-readable description for logging and debugging.\n   *\n   * @returns The debug object. The return type is not stable and may change in\n   * a future release.\n   */\n  debugInfo() {\n    return {\n      inputData: this.dataDebugString,\n      reference: this.reference,\n      state: this.state\n    };\n  }\n  initUploader() {\n    const doUpload = async (conn, orgId) => {\n      const requestParams = {\n        key: this.reference.key,\n        filename: this.reference.filename,\n        content_type: this.reference.content_type,\n        org_id: orgId\n      };\n      const [metadataPromiseResult, dataPromiseResult] = await Promise.allSettled([\n        conn.post(\"/attachment\", requestParams),\n        this._data.get()\n      ]);\n      if (metadataPromiseResult.status === \"rejected\") {\n        const errorStr = JSON.stringify(metadataPromiseResult.reason);\n        throw new Error(\n          `Failed to request signed URL from API server: ${errorStr}`\n        );\n      }\n      if (dataPromiseResult.status === \"rejected\") {\n        const errorStr = JSON.stringify(dataPromiseResult.reason);\n        throw new Error(`Failed to read file: ${errorStr}`);\n      }\n      const metadataResponse = metadataPromiseResult.value;\n      const data = dataPromiseResult.value;\n      let signedUrl;\n      let headers;\n      try {\n        ({ signedUrl, headers } = import_v38.z.object({\n          signedUrl: import_v38.z.string().url(),\n          headers: import_v38.z.record(import_v38.z.string())\n        }).parse(await metadataResponse.json()));\n      } catch (error) {\n        if (error instanceof import_v38.ZodError) {\n          const errorStr = JSON.stringify(error.flatten());\n          throw new Error(`Invalid response from API server: ${errorStr}`);\n        }\n        throw error;\n      }\n      addAzureBlobHeaders(headers, signedUrl);\n      let objectStoreResponse;\n      try {\n        objectStoreResponse = await checkResponse(\n          await fetch(signedUrl, {\n            method: \"PUT\",\n            headers,\n            body: data\n          })\n        );\n        await objectStoreResponse.body?.cancel();\n      } catch (error) {\n        if (error instanceof FailedHTTPResponse) {\n          throw new Error(\n            `Failed to upload attachment to object store: ${error.status} ${error.text} ${error.data}`\n          );\n        }\n        throw error;\n      }\n      return { signedUrl, metadataResponse, objectStoreResponse };\n    };\n    const errorWrapper = async () => {\n      const status = { upload_status: \"done\" };\n      const state = this.state ?? _globalState;\n      await state.login({});\n      const conn = state.apiConn();\n      const orgId = state.orgId ?? \"\";\n      try {\n        await doUpload(conn, orgId);\n      } catch (error) {\n        status.upload_status = \"error\";\n        status.error_message = error instanceof Error ? error.message : JSON.stringify(error);\n      }\n      const requestParams = {\n        key: this.reference.key,\n        org_id: orgId,\n        status\n      };\n      const statusResponse = await conn.post(\n        \"/attachment/status\",\n        requestParams\n      );\n      await statusResponse.body?.cancel();\n      if (!statusResponse.ok) {\n        const errorStr = JSON.stringify(statusResponse);\n        throw new Error(`Couldn't log attachment status: ${errorStr}`);\n      }\n      return status;\n    };\n    return new LazyValue(errorWrapper);\n  }\n  initData(data) {\n    if (typeof data === \"string\") {\n      this.ensureFileReadable(data);\n      const readFile = isomorph_default.readFile;\n      if (!readFile) {\n        throw new Error(\n          `This platform does not support reading the filesystem. Construct the Attachment\nwith a Blob/ArrayBuffer, or run the program on Node.js.`\n        );\n      }\n      return new LazyValue(async () => new Blob([await readFile(data)]));\n    } else {\n      return new LazyValue(async () => new Blob([data]));\n    }\n  }\n  ensureFileReadable(data) {\n    const statSync = isomorph_default.statSync;\n    if (!statSync) {\n      throw new Error(\n        `This platform does not support reading the filesystem. Construct the Attachment\nwith a Blob/ArrayBuffer, or run the program on Node.js.`\n      );\n    }\n    try {\n      statSync(data);\n    } catch (e) {\n      debugLogger.warn(`Failed to read file: ${e}`);\n    }\n  }\n};\nvar ExternalAttachment = class extends BaseAttachment {\n  /**\n   * The object that replaces this `ExternalAttachment` at upload time.\n   */\n  reference;\n  _data;\n  state;\n  /**\n   * Construct an external attachment.\n   *\n   * @param param A parameter object with:\n   *\n   * `url`: The fully qualified URL of the file in the external object store.\n   *\n   * `filename`: The desired name of the file in Braintrust after uploading.\n   * This parameter is for visualization purposes only and has no effect on\n   * attachment storage.\n   *\n   * `contentType`: The MIME type of the file.\n   *\n   * `state`: (Optional) For internal use.\n   */\n  constructor({ url, filename, contentType, state }) {\n    super();\n    this.reference = {\n      type: EXTERNAL_ATTACHMENT,\n      filename,\n      content_type: contentType,\n      url\n    };\n    this._data = this.initData();\n  }\n  /**\n   * For ExternalAttachment, this is a no-op since the data already resides\n   * in the external object store. It marks the attachment as already uploaded.\n   *\n   * @returns The attachment status, which will always indicate success.\n   */\n  async upload() {\n    return { upload_status: \"done\" };\n  }\n  /**\n   * The attachment contents. This is a lazy value that will read the attachment contents from the external object store on first access.\n   */\n  async data() {\n    return this._data.get();\n  }\n  /**\n   * A human-readable description for logging and debugging.\n   *\n   * @returns The debug object. The return type is not stable and may change in\n   * a future release.\n   */\n  debugInfo() {\n    return {\n      url: this.reference.url,\n      reference: this.reference,\n      state: this.state\n    };\n  }\n  initData() {\n    return new LazyValue(async () => {\n      const readonly = new ReadonlyAttachment(this.reference, this.state);\n      return await readonly.data();\n    });\n  }\n};\nvar attachmentMetadataSchema = import_v38.z.object({\n  downloadUrl: import_v38.z.string(),\n  status: AttachmentStatus\n});\nvar ReadonlyAttachment = class {\n  /**\n   * Attachment metadata.\n   */\n  reference;\n  _data;\n  state;\n  /**\n   * Construct a ReadonlyAttachment.\n   *\n   * @param reference The `AttachmentReference` that should be read by the\n   * `ReadonlyAttachment` object.\n   * @param state (Optional) For internal use.\n   * @returns The new `ReadonlyAttachment` object.\n   */\n  constructor(reference, state) {\n    this.reference = reference;\n    this.state = state;\n    this._data = this.initDownloader();\n  }\n  /**\n   * The attachment contents. This is a lazy value that will read the attachment\n   * contents from the object store on first access.\n   */\n  async data() {\n    return this._data.get();\n  }\n  /**\n   * Returns the attachment contents as a base64-encoded URL that is suitable\n   * for use in a prompt.\n   *\n   * @returns The attachment contents as a base64-encoded URL.\n   */\n  async asBase64Url() {\n    const buf = await (await this.data()).arrayBuffer();\n    const base64 = Buffer.from(buf).toString(\"base64\");\n    return `data:${this.reference.content_type};base64,${base64}`;\n  }\n  /**\n   * Fetch the attachment metadata, which includes a downloadUrl and a status.\n   * This will re-fetch the status each time in case it changes over time.\n   */\n  async metadata() {\n    const state = this.state ?? _globalState;\n    await state.login({});\n    const params = {\n      filename: this.reference.filename,\n      content_type: this.reference.content_type,\n      org_id: state.orgId || \"\"\n    };\n    if (this.reference.type === \"braintrust_attachment\") {\n      params.key = this.reference.key;\n    } else if (this.reference.type === \"external_attachment\") {\n      params.url = this.reference.url;\n    }\n    const resp = await state.apiConn().get(\"/attachment\", params);\n    if (!resp.ok) {\n      const errorStr = JSON.stringify(resp);\n      throw new Error(`Invalid response from API server: ${errorStr}`);\n    }\n    return attachmentMetadataSchema.parse(await resp.json());\n  }\n  /**\n   * Fetch the attachment upload status. This will re-fetch the status each time\n   * in case it changes over time.\n   */\n  async status() {\n    return (await this.metadata()).status;\n  }\n  initDownloader() {\n    const download = async () => {\n      const { downloadUrl, status } = await this.metadata();\n      if (status.upload_status !== \"done\") {\n        throw new Error(\n          `Expected attachment status \"done\", got \"${status.upload_status}\"`\n        );\n      }\n      const objResponse = await fetch(downloadUrl);\n      if (objResponse.status !== 200) {\n        const error = await objResponse.text();\n        throw new Error(`Couldn't download attachment: ${error}`);\n      }\n      return await objResponse.blob();\n    };\n    return new LazyValue(download);\n  }\n};\nvar JSONAttachment = class extends Attachment {\n  /**\n   * Construct a JSONAttachment from a JSON-serializable object.\n   *\n   * @param data The JSON object to attach. Must be JSON-serializable.\n   * @param options Additional options:\n   * - `filename`: The filename for the attachment (defaults to \"data.json\")\n   * - `pretty`: Whether to pretty-print the JSON (defaults to false)\n   * - `state`: (Optional) For internal use.\n   *\n   * @example\n   * ```typescript\n   * const largeTranscript = [\n   *   { role: \"user\", content: \"...\" },\n   *   { role: \"assistant\", content: \"...\" },\n   *   // ... many more messages\n   * ];\n   *\n   * logger.log({\n   *   input: {\n   *     type: \"chat\",\n   *     transcript: new JSONAttachment(largeTranscript, { filename: \"transcript.json\" })\n   *   }\n   * });\n   * ```\n   */\n  constructor(data, options) {\n    const { filename = \"data.json\", pretty = false, state } = options ?? {};\n    const deferredJsonAttachment = globalThis.__BT_DATASET_PIPELINE_DEFER_JSON_ATTACHMENT__;\n    if (deferredJsonAttachment) {\n      super({\n        data: new Blob([]),\n        filename,\n        contentType: \"application/json\",\n        state\n      });\n      return deferredJsonAttachment(data, {\n        filename,\n        pretty\n      });\n    }\n    const jsonString = pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);\n    const blob = new Blob([jsonString], { type: \"application/json\" });\n    super({\n      data: blob,\n      filename,\n      contentType: \"application/json\",\n      state\n    });\n  }\n};\nfunction logFeedbackImpl(state, parentObjectType, parentObjectId, {\n  id,\n  expected,\n  scores,\n  metadata: inputMetadata,\n  tags,\n  comment,\n  source: inputSource\n}) {\n  const source = inputSource ?? \"external\";\n  if (!VALID_SOURCES.includes(source)) {\n    throw new Error(`source must be one of ${VALID_SOURCES}`);\n  }\n  if (isEmpty2(scores) && isEmpty2(expected) && isEmpty2(tags) && isEmpty2(comment)) {\n    throw new Error(\n      \"At least one of scores, expected, tags, or comment must be specified\"\n    );\n  }\n  const validatedEvent = validateAndSanitizeExperimentLogPartialArgs({\n    scores,\n    metadata: inputMetadata,\n    expected,\n    tags\n  });\n  const { metadata, ...rawUpdateEvent } = deepCopyEvent(validatedEvent);\n  const updateEvent = Object.fromEntries(\n    Object.entries(rawUpdateEvent).filter(([_, v]) => !isEmpty2(v))\n  );\n  const parentIds = async () => new SpanComponentsV3({\n    object_type: parentObjectType,\n    object_id: await parentObjectId.get()\n  }).objectIdFields();\n  if (Object.keys(updateEvent).length > 0) {\n    const record = new LazyValue(async () => {\n      return {\n        id,\n        ...updateEvent,\n        ...await parentIds(),\n        [AUDIT_SOURCE_FIELD]: source,\n        [AUDIT_METADATA_FIELD]: metadata,\n        [IS_MERGE_FIELD]: true\n      };\n    });\n    state.bgLogger().log([record]);\n  }\n  if (!isEmpty2(comment)) {\n    const record = new LazyValue(async () => {\n      return {\n        id: (0, import_uuid2.v4)(),\n        created: (/* @__PURE__ */ new Date()).toISOString(),\n        origin: {\n          // NOTE: We do not know (or care?) what the transaction id of the row that\n          // we're commenting on is here, so we omit it.\n          id\n        },\n        comment: {\n          text: comment\n        },\n        ...await parentIds(),\n        [AUDIT_SOURCE_FIELD]: source,\n        [AUDIT_METADATA_FIELD]: metadata\n      };\n    });\n    state.bgLogger().log([record]);\n  }\n}\nfunction updateSpanImpl({\n  state,\n  parentObjectType,\n  parentObjectId,\n  id,\n  root_span_id,\n  span_id,\n  event\n}) {\n  if (isEmpty2(root_span_id) !== isEmpty2(span_id)) {\n    throw new Error(\"both root_span_id and span_id must be set, or neither\");\n  }\n  const hasExplicitSpanIds = root_span_id !== void 0 && span_id !== void 0;\n  const updateEvent = deepCopyEvent(\n    validateAndSanitizeExperimentLogPartialArgs({\n      ...event,\n      id,\n      ...hasExplicitSpanIds ? { root_span_id, span_id } : {}\n    })\n  );\n  const parentIds = async () => new SpanComponentsV3({\n    object_type: parentObjectType,\n    object_id: await parentObjectId.get()\n  }).objectIdFields();\n  const record = new LazyValue(\n    async () => customizeSpanExport({\n      id,\n      ...updateEvent,\n      ...await parentIds(),\n      [IS_MERGE_FIELD]: true\n    })\n  );\n  state.bgLogger().log([record]);\n}\nfunction updateSpan({\n  exported,\n  state,\n  ...event\n}) {\n  const resolvedState = state ?? _globalState;\n  const components = SpanComponentsV4.fromStr(exported);\n  if (!components.data.row_id) {\n    throw new Error(\"Exported span must have a row id\");\n  }\n  updateSpanImpl({\n    state: resolvedState,\n    parentObjectType: components.data.object_type,\n    parentObjectId: new LazyValue(\n      spanComponentsToObjectIdLambda(resolvedState, components)\n    ),\n    id: components.data.row_id,\n    root_span_id: components.data.root_span_id,\n    span_id: components.data.span_id,\n    event\n  });\n}\nfunction _internalResumeSpan({\n  exported,\n  state\n}) {\n  const resolvedState = state ?? _globalState;\n  const components = SpanComponentsV4.fromStr(exported);\n  const { row_id, root_span_id, span_id } = components.data;\n  if (!row_id || !root_span_id || !span_id) {\n    throw new Error(\"Only exported root spans can be resumed\");\n  }\n  return new SpanImpl({\n    state: resolvedState,\n    parentObjectType: components.data.object_type,\n    parentObjectId: new LazyValue(\n      spanComponentsToObjectIdLambda(resolvedState, components)\n    ),\n    parentComputeObjectMetadataArgs: void 0,\n    parentSpanIds: { parentSpanIds: [], rootSpanId: root_span_id },\n    spanId: span_id,\n    event: { id: row_id },\n    propagatedEvent: components.data.propagated_event ?? void 0,\n    [RESUME_SPAN_WITHOUT_INITIAL_WRITE]: true\n  });\n}\nfunction spanComponentsToObjectIdLambda(state, components) {\n  if (components.data.object_id) {\n    const ret = components.data.object_id;\n    return async () => ret;\n  }\n  if (!components.data.compute_object_metadata_args) {\n    throw new Error(\n      \"Impossible: must provide either objectId or computeObjectMetadataArgs\"\n    );\n  }\n  switch (components.data.object_type) {\n    case 1 /* EXPERIMENT */:\n      throw new Error(\n        \"Impossible: computeObjectMetadataArgs not supported for experiments\"\n      );\n    case 3 /* PLAYGROUND_LOGS */:\n      throw new Error(\n        \"Impossible: computeObjectMetadataArgs not supported for prompt sessions\"\n      );\n    case 2 /* PROJECT_LOGS */:\n      return async () => (await computeLoggerMetadata(state, {\n        ...components.data.compute_object_metadata_args\n      })).project.id;\n    default:\n      const x = components.data.object_type;\n      throw new Error(`Unknown object type: ${x}`);\n  }\n}\nasync function spanComponentsToObjectId({\n  components,\n  state\n}) {\n  return await spanComponentsToObjectIdLambda(\n    state ?? _globalState,\n    components\n  )();\n}\nvar ERR_PERMALINK = \"https://braintrust.dev/error-generating-link\";\nfunction getErrPermlink(msg) {\n  if (msg == \"\") {\n    return ERR_PERMALINK;\n  }\n  return `${ERR_PERMALINK}?msg=${encodeURIComponent(msg)}`;\n}\nfunction _getAppUrl(appUrl) {\n  return appUrl || isomorph_default.getEnv(\"BRAINTRUST_APP_URL\") || \"https://www.braintrust.dev\";\n}\nfunction _getOrgName(orgName) {\n  return orgName || isomorph_default.getEnv(\"BRAINTRUST_ORG_NAME\") || void 0;\n}\nfunction _getLinkBaseUrl(state, linkArgs) {\n  const appUrl = _getAppUrl(state.appUrl || linkArgs?.app_url);\n  const orgName = _getOrgName(state.orgName || linkArgs?.org_name);\n  if (!orgName) {\n    return null;\n  }\n  return `${appUrl}/app/${orgName}`;\n}\nasync function permalink(slug, opts) {\n  if (slug === \"\") {\n    return NOOP_SPAN_PERMALINK;\n  }\n  const state = opts?.state ?? _globalState;\n  const getOrgName = async () => {\n    if (opts?.orgName) {\n      return opts.orgName;\n    }\n    await state.login({});\n    if (!state.orgName) {\n      throw new Error(\"provide-org-or-login\");\n    }\n    return state.orgName;\n  };\n  const getAppUrl = async () => {\n    if (opts?.appUrl) {\n      return opts.appUrl;\n    }\n    await state.login({});\n    if (!state.appUrl) {\n      throw new Error(\"provide-app-url-or-login\");\n    }\n    return state.appUrl;\n  };\n  try {\n    const components = SpanComponentsV4.fromStr(slug);\n    const object_type = spanObjectTypeV3ToString(components.data.object_type);\n    const [orgName, appUrl, object_id] = await Promise.all([\n      getOrgName(),\n      getAppUrl(),\n      spanComponentsToObjectId({ components, state })\n    ]);\n    const id = components.data.row_id;\n    if (!id) {\n      throw new Error(\"Span slug does not refer to an individual row\");\n    }\n    const urlParams = new URLSearchParams({ object_type, object_id, id });\n    return `${appUrl}/app/${orgName}/object?${urlParams}`;\n  } catch (e) {\n    if (e instanceof FailedHTTPResponse) {\n      return getErrPermlink(`http-error-${e.status}`);\n    }\n    return getErrPermlink(e instanceof Error ? e.message : String(e));\n  }\n}\nfunction startSpanParentArgs(args) {\n  let argParentObjectId = void 0;\n  let argParentSpanIds = void 0;\n  let argPropagatedEvent = void 0;\n  let argPropagatedState = void 0;\n  const { parentSlug, propagatedState: parentPropagatedState } = normalizeParent(args.parent, args.state);\n  if (parentSlug) {\n    if (args.parentSpanIds) {\n      throw new Error(\"Cannot specify both parent and parentSpanIds\");\n    }\n    const parentComponents = SpanComponentsV4.fromStr(parentSlug);\n    if (args.parentObjectType !== parentComponents.data.object_type) {\n      throw new Error(\n        `Mismatch between expected span parent object type ${args.parentObjectType} and provided type ${parentComponents.data.object_type}`\n      );\n    }\n    argParentObjectId = args.parentObjectId;\n    if (parentComponents.data.row_id && parentSpanIdsUsable(\n      parentComponents.data.span_id,\n      parentComponents.data.root_span_id\n    )) {\n      argParentSpanIds = {\n        spanId: parentComponents.data.span_id,\n        rootSpanId: parentComponents.data.root_span_id\n      };\n    }\n    argPropagatedEvent = args.propagatedEvent ?? (parentComponents.data.propagated_event ?? void 0);\n    const propagatedState = args.propagatedState ?? parentPropagatedState;\n    if (propagatedState) {\n      const { braintrustParent: _ignoredBraintrustParent, ...w3cState } = propagatedState;\n      argPropagatedState = w3cState;\n    }\n  } else {\n    argParentObjectId = args.parentObjectId;\n    argParentSpanIds = args.parentSpanIds;\n    argPropagatedEvent = args.propagatedEvent;\n    argPropagatedState = args.propagatedState;\n  }\n  return {\n    parentObjectType: args.parentObjectType,\n    parentObjectId: argParentObjectId,\n    parentComputeObjectMetadataArgs: args.parentComputeObjectMetadataArgs,\n    parentSpanIds: argParentSpanIds,\n    propagatedEvent: argPropagatedEvent,\n    propagatedState: argPropagatedState\n  };\n}\nvar Logger = class {\n  state;\n  lazyMetadata;\n  _asyncFlush;\n  computeMetadataArgs;\n  _linkArgs;\n  lastStartTime;\n  lazyId;\n  calledStartSpan;\n  // For type identification.\n  kind = \"logger\";\n  constructor(state, lazyMetadata, logOptions = {}) {\n    this.lazyMetadata = lazyMetadata;\n    this._asyncFlush = logOptions.asyncFlush;\n    this.computeMetadataArgs = logOptions.computeMetadataArgs;\n    this._linkArgs = logOptions.linkArgs;\n    this.lastStartTime = getCurrentUnixTimestamp();\n    this.lazyId = new LazyValue(async () => await this.id);\n    this.calledStartSpan = false;\n    this.state = state;\n  }\n  get org_id() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).org_id;\n    })();\n  }\n  get project() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).project;\n    })();\n  }\n  get id() {\n    return (async () => (await this.project).id)();\n  }\n  get loggingState() {\n    return this.state;\n  }\n  parentObjectType() {\n    return 2 /* PROJECT_LOGS */;\n  }\n  /**\n   * Log a single event. The event will be batched and uploaded behind the scenes if `logOptions.asyncFlush` is true.\n   *\n   * @param event The event to log.\n   * @param event.input: (Optional) the arguments that uniquely define a user input (an arbitrary, JSON serializable object).\n   * @param event.output: (Optional) the output of your application, including post-processing (an arbitrary, JSON serializable object), that allows you to determine whether the result is correct or not. For example, in an app that generates SQL queries, the `output` should be the _result_ of the SQL query generated by the model, not the query itself, because there may be multiple valid queries that answer a single question.\n   * @param event.expected: (Optional) the ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to determine if your `output` value is correct or not. Braintrust currently does not compare `output` to `expected` for you, since there are so many different ways to do that correctly. Instead, these values are just used to help you navigate while digging into analyses. However, we may later use these values to re-score outputs or fine-tune your models.\n   * @param event.error: (Optional) The error that occurred, if any. If you use tracing to run an experiment, errors are automatically logged when your code throws an exception.\n   * @param event.scores: (Optional) a dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals that help you determine how accurate the outputs are compared to what you expect and diagnose failures. For example, a summarization app might have one score that tells you how accurate the summary is, and another that measures the word similarity between the generated and grouth truth summary. The word similarity score could help you determine whether the summarization was covering similar concepts or not. You can use these scores to help you sort, filter, and compare logs.\n   * @param event.metadata: (Optional) a dictionary with additional data about the test example, model outputs, or just about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any JSON-serializable type, but its keys must be strings.\n   * @param event.metrics: (Optional) a dictionary of metrics to log. The following keys are populated automatically: \"start\", \"end\".\n   * @param event.id: (Optional) a unique identifier for the event. If you don't provide one, BrainTrust will generate one for you.\n   * @param options Additional logging options\n   * @param options.allowConcurrentWithSpans in rare cases where you need to log at the top level separately from spans on the logger elsewhere, set this to true.\n   * @returns The `id` of the logged event.\n   */\n  log(event, options) {\n    if (this.calledStartSpan && !options?.allowConcurrentWithSpans) {\n      throw new Error(\n        \"Cannot run toplevel `log` method while using spans. To log to the span, call `logger.traced` and then log with `span.log`\"\n      );\n    }\n    const span = this.startSpanImpl({ startTime: this.lastStartTime, event });\n    this.lastStartTime = span.end();\n    const ret = span.id;\n    if (this.asyncFlush === true) {\n      return ret;\n    } else {\n      return (async () => {\n        await this.flush();\n        return ret;\n      })();\n    }\n  }\n  /**\n   * Create a new toplevel span underneath the logger. The name defaults to \"root\".\n   *\n   * See {@link Span.traced} for full details.\n   */\n  traced(callback, args) {\n    const { setCurrent, ...argsRest } = args ?? {};\n    const span = this.startSpan(argsRest);\n    const ret = runCatchFinally(\n      () => {\n        if (setCurrent ?? true) {\n          return withCurrent(span, callback);\n        } else {\n          return callback(span);\n        }\n      },\n      (e) => {\n        logError(span, e);\n        throw e;\n      },\n      () => span.end()\n    );\n    if (this.asyncFlush) {\n      return ret;\n    } else {\n      return (async () => {\n        const awaitedRet = await ret;\n        await this.flush();\n        return awaitedRet;\n      })();\n    }\n  }\n  /**\n   * Lower-level alternative to `traced`. This allows you to start a span yourself, and can be useful in situations\n   * where you cannot use callbacks. However, spans started with `startSpan` will not be marked as the \"current span\",\n   * so `currentSpan()` and `traced()` will be no-ops. If you want to mark a span as current, use `traced` instead.\n   *\n   * See {@link traced} for full details.\n   */\n  startSpan(args) {\n    this.calledStartSpan = true;\n    return this.startSpanImpl(args);\n  }\n  startSpanImpl(args) {\n    return new SpanImpl({\n      ...args,\n      // Sometimes `args` gets passed directly into this function, and it contains an undefined value for `state`.\n      // To ensure that we always use this logger's state, we override the `state` argument no matter what.\n      state: this.state,\n      ...startSpanParentArgs({\n        state: this.state,\n        parent: args?.parent,\n        parentObjectType: this.parentObjectType(),\n        parentObjectId: this.lazyId,\n        parentComputeObjectMetadataArgs: this.computeMetadataArgs,\n        parentSpanIds: args?.parentSpanIds,\n        propagatedEvent: args?.propagatedEvent\n      }),\n      defaultRootType: \"task\" /* TASK */\n    });\n  }\n  /**\n   * Log feedback to an event. Feedback is used to save feedback scores, set an expected value, or add a comment.\n   *\n   * @param event\n   * @param event.id The id of the event to log feedback for. This is the `id` returned by `log` or accessible as the `id` field of a span.\n   * @param event.scores (Optional) a dictionary of numeric values (between 0 and 1) to log. These scores will be merged into the existing scores for the event.\n   * @param event.expected (Optional) the ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to determine if your `output` value is correct or not.\n   * @param event.comment (Optional) an optional comment string to log about the event.\n   * @param event.metadata (Optional) a dictionary with additional data about the feedback. If you have a `user_id`, you can log it here and access it in the Braintrust UI. Note, this metadata does not correspond to the main event itself, but rather the audit log attached to the event.\n   * @param event.source (Optional) the source of the feedback. Must be one of \"external\" (default), \"app\", or \"api\".\n   */\n  logFeedback(event) {\n    logFeedbackImpl(this.state, this.parentObjectType(), this.lazyId, event);\n  }\n  /**\n   * Update a span in the experiment using its id. It is important that you only update a span once the original span has been fully written and flushed,\n   * since otherwise updates to the span may conflict with the original span.\n   *\n   * @param event The event data to update the span with. Must include `id`. See {@link Experiment.log} for a full list of valid fields.\n   */\n  updateSpan(event) {\n    const { id, root_span_id, span_id, ...eventRest } = event;\n    if (!id) {\n      throw new Error(\"Span id is required to update a span\");\n    }\n    updateSpanImpl({\n      state: this.state,\n      parentObjectType: this.parentObjectType(),\n      parentObjectId: this.lazyId,\n      id,\n      root_span_id,\n      span_id,\n      event: eventRest\n    });\n  }\n  /**\n   * Return a serialized representation of the logger that can be used to start subspans in other places.\n   *\n   * See {@link Span.startSpan} for more details.\n   */\n  async export() {\n    return new (getSpanComponentsClass())({\n      object_type: this.parentObjectType(),\n      ...this.computeMetadataArgs && !this.lazyId.hasSucceeded ? { compute_object_metadata_args: this.computeMetadataArgs } : { object_id: await this.lazyId.get() }\n    }).toStr();\n  }\n  /*\n   * Flush any pending logs to the server.\n   */\n  async flush() {\n    return await this.state.bgLogger().flush();\n  }\n  get asyncFlush() {\n    return this._asyncFlush;\n  }\n  /**\n   * Return the base URL for links (e.g. https://braintrust.dev/app/my-org-name)\n   * if we have the info, otherwise return null.\n   * Resolution order: state -> linkArgs -> env var\n   */\n  _getLinkBaseUrl() {\n    return _getLinkBaseUrl(this.state, this._linkArgs);\n  }\n  /**\n   * Return this logger's Braintrust parent string (`project_id:<id>` or\n   * `project_name:<name>`) for the `braintrust.parent` baggage entry, or\n   * undefined when it cannot be determined synchronously.\n   */\n  _getOtelParent() {\n    const id = this.computeMetadataArgs?.project_id || this.lazyId.getSync().value;\n    if (id) {\n      return `project_id:${id}`;\n    }\n    const name = this.computeMetadataArgs?.project_name;\n    if (name) {\n      return `project_name:${name}`;\n    }\n    return void 0;\n  }\n};\nfunction castLogger(logger, asyncFlush) {\n  if (logger === void 0) return void 0;\n  if (asyncFlush !== void 0 && !!asyncFlush !== !!logger.asyncFlush) {\n    throw new Error(\n      `Asserted asyncFlush setting ${asyncFlush} does not match stored logger's setting ${logger.asyncFlush}`\n    );\n  }\n  return logger;\n}\nvar logs3OverflowUploadSchema = import_v38.z.object({\n  method: import_v38.z.enum([\"PUT\", \"POST\"]),\n  signedUrl: import_v38.z.string().url(),\n  headers: import_v38.z.record(import_v38.z.string()).optional(),\n  fields: import_v38.z.record(import_v38.z.string()).optional(),\n  key: import_v38.z.string().min(1)\n});\nfunction constructLogs3Data(items) {\n  return `{\"rows\": ${constructJsonArray(items.map((i) => i.str))}, \"api_version\": 2}`;\n}\nfunction constructLogs3OverflowRequest(key) {\n  return {\n    rows: {\n      type: LOGS3_OVERFLOW_REFERENCE_TYPE,\n      key\n    },\n    api_version: 2\n  };\n}\nfunction pickLogs3OverflowObjectIds(row) {\n  const objectIds = {};\n  for (const key of OBJECT_ID_KEYS) {\n    if (key in row) {\n      objectIds[key] = row[key];\n    }\n  }\n  return objectIds;\n}\nasync function uploadLogs3OverflowPayload(upload, payload, fetchFn = fetch) {\n  if (upload.method === \"POST\") {\n    if (!upload.fields) {\n      throw new Error(\"Missing logs3 overflow upload fields\");\n    }\n    if (typeof FormData === \"undefined\" || typeof Blob === \"undefined\") {\n      throw new Error(\"FormData is not available for logs3 overflow upload\");\n    }\n    const form = new FormData();\n    for (const [key, value] of Object.entries(upload.fields)) {\n      form.append(key, value);\n    }\n    const contentType = upload.fields[\"Content-Type\"] ?? \"application/json\";\n    form.append(\"file\", new Blob([payload], { type: contentType }));\n    const headers2 = {};\n    for (const [key, value] of Object.entries(upload.headers ?? {})) {\n      if (key.toLowerCase() !== \"content-type\") {\n        headers2[key] = value;\n      }\n    }\n    const response2 = await fetchFn(upload.signedUrl, {\n      method: \"POST\",\n      headers: headers2,\n      body: form\n    });\n    if (!response2.ok) {\n      const responseText = await response2.text().catch(() => \"\");\n      throw new Error(\n        `Failed to upload logs3 overflow payload: ${response2.status} ${responseText}`\n      );\n    }\n    return;\n  }\n  const headers = { ...upload.headers ?? {} };\n  addAzureBlobHeaders(headers, upload.signedUrl);\n  const response = await fetchFn(upload.signedUrl, {\n    method: \"PUT\",\n    headers,\n    body: payload\n  });\n  if (!response.ok) {\n    const responseText = await response.text().catch(() => \"\");\n    throw new Error(\n      `Failed to upload logs3 overflow payload: ${response.status} ${responseText}`\n    );\n  }\n}\nfunction stringifyWithOverflowMeta(item) {\n  const str = JSON.stringify(item);\n  const record = item;\n  return {\n    str,\n    overflowMeta: {\n      object_ids: pickLogs3OverflowObjectIds(record),\n      is_delete: record[OBJECT_DELETE_FIELD] === true,\n      input_row: {\n        byte_size: utf8ByteLength2(str)\n      }\n    }\n  };\n}\nfunction utf8ByteLength2(value) {\n  if (typeof TextEncoder !== \"undefined\") {\n    return new TextEncoder().encode(value).length;\n  }\n  return value.length;\n}\nfunction now() {\n  return (/* @__PURE__ */ new Date()).getTime();\n}\nvar DEFAULT_FLUSH_BACKPRESSURE_BYTES = 10 * 1024 * 1024;\nvar DEFAULT_MAX_CONCURRENT_LOG_REQUESTS = 8;\nfunction getNumericEnv(name) {\n  const raw = isomorph_default.getEnv(name);\n  if (raw === void 0 || raw === null || raw.trim() === \"\") {\n    return void 0;\n  }\n  const value = Number(raw);\n  return isNaN(value) ? void 0 : value;\n}\nvar TestBackgroundLogger = class {\n  items = [];\n  exportCustomizers = [];\n  log(items) {\n    this.items.push(items);\n  }\n  setMaskingFunction(maskingFunction) {\n    this.exportCustomizers = maskingFunction ? [createMaskingCustomizer(maskingFunction)] : [];\n  }\n  async flush() {\n    return Promise.resolve();\n  }\n  pendingFlushBytes() {\n    return 0;\n  }\n  flushBackpressureBytes() {\n    return DEFAULT_FLUSH_BACKPRESSURE_BYTES;\n  }\n  async drain() {\n    const items = this.items;\n    this.items = [];\n    const events = [];\n    for (const item of items) {\n      for (const event of item) {\n        const value = await event.get();\n        if (value !== null) events.push(value);\n      }\n    }\n    let batch = mergeRowBatch(events);\n    if (this.exportCustomizers.length) {\n      batch = batch.map(\n        (item) => customizeSpanExport(\n          item,\n          this.exportCustomizers\n        )\n      ).filter((item) => item !== null);\n    }\n    return batch;\n  }\n};\nvar BACKGROUND_LOGGER_BASE_SLEEP_TIME_S = 1;\nvar HTTP_RETRY_BASE_SLEEP_TIME_S = 1;\nvar HTTP_RETRY_JITTER_MS = 200;\nvar BTQL_HTTP_RETRIES = 3;\nvar RETRYABLE_HTTP_STATUS_CODES = /* @__PURE__ */ new Set([500, 502, 503, 504]);\nfunction isRetryableHTTPError(error) {\n  return !(error instanceof FailedHTTPResponse) || RETRYABLE_HTTP_STATUS_CODES.has(error.status);\n}\nfunction formatHTTPError(error) {\n  if (error instanceof FailedHTTPResponse) {\n    return `${error.status} ${error.text}`;\n  }\n  return error instanceof Error ? error.message : String(error);\n}\nfunction getAbortReason(signal) {\n  return signal.reason ?? new Error(\"Request aborted\");\n}\nasync function waitForRetry(delayMs, signal) {\n  if (!signal) {\n    await new Promise((resolve) => setTimeout(resolve, delayMs));\n    return;\n  }\n  if (signal.aborted) {\n    throw getAbortReason(signal);\n  }\n  await new Promise((resolve, reject2) => {\n    const onAbort = () => {\n      clearTimeout(timeout);\n      signal.removeEventListener(\"abort\", onAbort);\n      reject2(getAbortReason(signal));\n    };\n    const timeout = setTimeout(() => {\n      signal.removeEventListener(\"abort\", onAbort);\n      resolve();\n    }, delayMs);\n    signal.addEventListener(\"abort\", onAbort, { once: true });\n    if (signal.aborted) {\n      onAbort();\n    }\n  });\n}\nvar ConcurrencyLimiter = class {\n  constructor(limit) {\n    this.limit = limit;\n  }\n  limit;\n  activeCount = 0;\n  waiters = [];\n  async run(callback) {\n    if (this.activeCount >= this.limit) {\n      await new Promise((resolve) => this.waiters.push(resolve));\n    } else {\n      this.activeCount++;\n    }\n    try {\n      return await callback();\n    } finally {\n      const next = this.waiters.shift();\n      if (next) {\n        next();\n      } else {\n        this.activeCount--;\n      }\n    }\n  }\n};\nvar HTTPBackgroundLogger = class _HTTPBackgroundLogger {\n  apiConn;\n  queue;\n  activeFlush = Promise.resolve();\n  activeFlushResolved = true;\n  onFlushError;\n  exportCustomizers = [];\n  requestLimiter;\n  lastEnqueuedSequence = 0;\n  completedSequence = 0;\n  syncFlush = false;\n  maxRequestSizeOverride = null;\n  _maxRequestSizePromise = null;\n  defaultBatchSize = 100;\n  numTries = 3;\n  queueDropExceedingMaxsize = DEFAULT_QUEUE_SIZE;\n  queueDropLoggingPeriod = 60;\n  failedPublishPayloadsDir = void 0;\n  allPublishPayloadsDir = void 0;\n  _flushBackpressureBytes = DEFAULT_FLUSH_BACKPRESSURE_BYTES;\n  _pendingBytes = 0;\n  _disabled = false;\n  queueDropLoggingState = {\n    numDropped: 0,\n    lastLoggedTimestamp: 0\n  };\n  constructor(apiConn, opts) {\n    opts = opts ?? {};\n    this.apiConn = apiConn;\n    const syncFlushEnv = getNumericEnv(\"BRAINTRUST_SYNC_FLUSH\");\n    if (syncFlushEnv !== void 0) {\n      this.syncFlush = Boolean(syncFlushEnv);\n    }\n    const defaultBatchSizeEnv = getNumericEnv(\"BRAINTRUST_DEFAULT_BATCH_SIZE\");\n    if (defaultBatchSizeEnv !== void 0) {\n      this.defaultBatchSize = defaultBatchSizeEnv;\n    }\n    const maxRequestSizeEnv = getNumericEnv(\"BRAINTRUST_MAX_REQUEST_SIZE\");\n    if (maxRequestSizeEnv !== void 0) {\n      this.maxRequestSizeOverride = maxRequestSizeEnv;\n    }\n    const numTriesEnv = getNumericEnv(\"BRAINTRUST_NUM_RETRIES\");\n    if (numTriesEnv !== void 0) {\n      this.numTries = numTriesEnv + 1;\n    }\n    const queueDropExceedingMaxsizeEnv = getNumericEnv(\n      \"BRAINTRUST_QUEUE_DROP_EXCEEDING_MAXSIZE\"\n    );\n    if (queueDropExceedingMaxsizeEnv !== void 0) {\n      this.queueDropExceedingMaxsize = queueDropExceedingMaxsizeEnv;\n    }\n    this.queue = new Queue(this.queueDropExceedingMaxsize);\n    const maxConcurrentLogRequests = getNumericEnv(\"BRAINTRUST_MAX_CONCURRENT_LOG_REQUESTS\") ?? DEFAULT_MAX_CONCURRENT_LOG_REQUESTS;\n    if (!Number.isInteger(maxConcurrentLogRequests) || maxConcurrentLogRequests < 1) {\n      debugLogger.warn(\n        `maxConcurrentLogRequests ${maxConcurrentLogRequests} is not a positive integer, using default ${DEFAULT_MAX_CONCURRENT_LOG_REQUESTS}`\n      );\n      this.requestLimiter = new ConcurrencyLimiter(\n        DEFAULT_MAX_CONCURRENT_LOG_REQUESTS\n      );\n    } else {\n      this.requestLimiter = new ConcurrencyLimiter(maxConcurrentLogRequests);\n    }\n    const queueDropLoggingPeriodEnv = getNumericEnv(\n      \"BRAINTRUST_QUEUE_DROP_LOGGING_PERIOD\"\n    );\n    if (queueDropLoggingPeriodEnv !== void 0) {\n      this.queueDropLoggingPeriod = queueDropLoggingPeriodEnv;\n    }\n    if (isomorph_default.getEnv(\"BRAINTRUST_LOG_FLUSH_CHUNK_SIZE\")) {\n      debugLogger.warn(\n        \"BRAINTRUST_LOG_FLUSH_CHUNK_SIZE is deprecated and no longer has any effect. Log flushing now sends all items at once and batches them automatically. This environment variable will be removed in a future major release.\"\n      );\n    }\n    const flushBackpressureBytesEnv = getNumericEnv(\n      \"BRAINTRUST_FLUSH_BACKPRESSURE_BYTES\"\n    );\n    if (flushBackpressureBytesEnv !== void 0 && flushBackpressureBytesEnv > 0) {\n      this._flushBackpressureBytes = flushBackpressureBytesEnv;\n    }\n    const failedPublishPayloadsDirEnv = isomorph_default.getEnv(\n      \"BRAINTRUST_FAILED_PUBLISH_PAYLOADS_DIR\"\n    );\n    if (failedPublishPayloadsDirEnv) {\n      this.failedPublishPayloadsDir = failedPublishPayloadsDirEnv;\n    }\n    const allPublishPayloadsDirEnv = isomorph_default.getEnv(\n      \"BRAINTRUST_ALL_PUBLISH_PAYLOADS_DIR\"\n    );\n    if (allPublishPayloadsDirEnv) {\n      this.allPublishPayloadsDir = allPublishPayloadsDirEnv;\n    }\n    if (!opts.noExitFlush) {\n      isomorph_default.processOn(\"beforeExit\", async () => {\n        await this.flush();\n      });\n    }\n    this.onFlushError = opts.onFlushError;\n  }\n  setMaskingFunction(maskingFunction) {\n    this.exportCustomizers = maskingFunction ? [createMaskingCustomizer(maskingFunction)] : [];\n  }\n  pendingFlushBytes() {\n    return this._pendingBytes;\n  }\n  flushBackpressureBytes() {\n    return this._flushBackpressureBytes;\n  }\n  log(items) {\n    if (this._disabled) {\n      return;\n    }\n    const queuedItems = items.map((event) => ({\n      sequence: ++this.lastEnqueuedSequence,\n      event\n    }));\n    const droppedItems = this.queue.push(...queuedItems);\n    this.lastEnqueuedSequence -= droppedItems.length;\n    if (!this.syncFlush) {\n      this.triggerActiveFlush();\n    }\n    if (droppedItems.length) {\n      this.registerDroppedItemCount(droppedItems.length);\n      if (this.allPublishPayloadsDir || this.failedPublishPayloadsDir) {\n        this.dumpDroppedEvents(droppedItems.map((item) => item.event));\n      }\n    }\n  }\n  getMaxRequestSize() {\n    if (!this._maxRequestSizePromise) {\n      this._maxRequestSizePromise = (async () => {\n        let serverLimit = null;\n        try {\n          const conn = await this.apiConn.get();\n          const versionInfo = await conn.get_json(\"version\");\n          serverLimit = import_v38.z.object({ logs3_payload_max_bytes: import_v38.z.number().nullish() }).parse(versionInfo).logs3_payload_max_bytes ?? null;\n        } catch (e) {\n          debugLogger.warn(\n            \"Failed to fetch version info for payload limit:\",\n            e\n          );\n        }\n        const validServerLimit = serverLimit !== null && serverLimit > 0 ? serverLimit : null;\n        const canUseOverflow = validServerLimit !== null;\n        let maxRequestSize = DEFAULT_MAX_REQUEST_SIZE;\n        if (this.maxRequestSizeOverride !== null) {\n          maxRequestSize = validServerLimit !== null ? Math.min(this.maxRequestSizeOverride, validServerLimit) : this.maxRequestSizeOverride;\n        } else if (validServerLimit !== null) {\n          maxRequestSize = validServerLimit;\n        }\n        return { maxRequestSize, canUseOverflow };\n      })();\n    }\n    return this._maxRequestSizePromise;\n  }\n  async flush() {\n    const targetSequence = this.lastEnqueuedSequence;\n    while (this.completedSequence < targetSequence) {\n      this.triggerActiveFlush();\n      await this.activeFlush;\n    }\n  }\n  async flushThrough(flushBoundary, args) {\n    const batchSize = args?.batchSize ?? this.defaultBatchSize;\n    const queuedItems = this.queue.drainWhile(\n      (item) => item.sequence <= flushBoundary\n    );\n    if (queuedItems.length === 0) {\n      return;\n    }\n    try {\n      if (!this._disabled) {\n        await this.flushWrappedItemsChunk(\n          queuedItems.map((item) => item.event),\n          batchSize\n        );\n      }\n    } catch (error) {\n      this.reportFlushError(error);\n    } finally {\n      this.completedSequence = queuedItems[queuedItems.length - 1].sequence;\n    }\n  }\n  async flushWrappedItemsChunk(wrappedItems, batchSize) {\n    if (!wrappedItems.length) {\n      return;\n    }\n    const [allItems, attachments] = await this.unwrapLazyValues(wrappedItems);\n    if (allItems.length === 0) {\n      return;\n    }\n    let chunkBytes = 0;\n    const allItemsWithMeta = allItems.map((item) => {\n      const withMeta = stringifyWithOverflowMeta(item);\n      chunkBytes += withMeta.str.length;\n      return withMeta;\n    });\n    this._pendingBytes += chunkBytes;\n    const maxRequestSizeResult = await this.getMaxRequestSize();\n    const batches = batchItems({\n      items: allItemsWithMeta,\n      batchMaxNumItems: batchSize,\n      batchMaxNumBytes: maxRequestSizeResult.maxRequestSize / 2,\n      getByteSize: (item) => item.str.length\n    });\n    const postPromises = batches.map(\n      (batch) => this.requestLimiter.run(async () => {\n        try {\n          await this.submitLogsRequest(batch, maxRequestSizeResult);\n          return { type: \"success\" };\n        } catch (e) {\n          return { type: \"error\", value: e };\n        }\n      })\n    );\n    const results = await Promise.all(postPromises);\n    this._pendingBytes = Math.max(0, this._pendingBytes - chunkBytes);\n    const failingResultErrors = results.map((r) => r.type === \"success\" ? void 0 : r.value).filter((r) => r !== void 0);\n    if (failingResultErrors.length) {\n      throw new AggregateError(\n        failingResultErrors,\n        `Encountered the following errors while logging:`\n      );\n    }\n    const attachmentErrors = [];\n    for (const attachment of attachments) {\n      try {\n        const result = await attachment.upload();\n        if (result.upload_status === \"error\") {\n          throw new Error(result.error_message);\n        }\n      } catch (error) {\n        attachmentErrors.push(error);\n      }\n    }\n    if (attachmentErrors.length === 1) {\n      throw attachmentErrors[0];\n    } else if (attachmentErrors.length > 1) {\n      throw new AggregateError(\n        attachmentErrors,\n        `Encountered the following errors while uploading attachments:`\n      );\n    }\n  }\n  async unwrapLazyValues(wrappedItems) {\n    for (let i = 0; i < this.numTries; ++i) {\n      try {\n        const items = (await Promise.all(wrappedItems.map((x) => x.get()))).filter((item) => item !== null);\n        const attachments = [];\n        items.forEach((item) => extractAttachments(item, attachments));\n        let mergedItems = mergeRowBatch(items);\n        if (this.exportCustomizers.length) {\n          mergedItems = mergedItems.map(\n            (item) => customizeSpanExport(\n              item,\n              this.exportCustomizers\n            )\n          ).filter((item) => item !== null);\n        }\n        return [mergedItems, attachments];\n      } catch (e) {\n        let errmsg = \"Encountered error when constructing records to flush\";\n        const isRetrying = i + 1 < this.numTries;\n        if (isRetrying) {\n          errmsg += \". Retrying\";\n        }\n        debugLogger.warn(errmsg);\n        if (!isRetrying) {\n          debugLogger.warn(\n            `Failed to construct log records to flush after ${this.numTries} attempts. Dropping batch`\n          );\n          throw e;\n        } else {\n          debugLogger.warn(e);\n          const sleepTimeS = BACKGROUND_LOGGER_BASE_SLEEP_TIME_S * 2 ** i;\n          debugLogger.info(`Sleeping for ${sleepTimeS}s`);\n          await new Promise(\n            (resolve) => setTimeout(resolve, sleepTimeS * 1e3)\n          );\n        }\n      }\n    }\n    throw new Error(\"Impossible\");\n  }\n  async requestLogs3OverflowUpload(conn, args) {\n    let response;\n    try {\n      response = await conn.post_json(\"logs3/overflow\", {\n        content_type: \"application/json\",\n        size_bytes: args.sizeBytes,\n        rows: args.rows\n      });\n    } catch (error) {\n      const errorStr = JSON.stringify(error);\n      throw new Error(\n        `Failed to request logs3 overflow upload URL: ${errorStr}`\n      );\n    }\n    try {\n      return logs3OverflowUploadSchema.parse(response);\n    } catch (error) {\n      if (error instanceof import_v38.ZodError) {\n        const errorStr = JSON.stringify(error.flatten());\n        throw new Error(`Invalid response from API server: ${errorStr}`);\n      }\n      throw error;\n    }\n  }\n  async _uploadLogs3OverflowPayload(conn, upload, payload) {\n    await uploadLogs3OverflowPayload(upload, payload, conn.fetch.bind(conn));\n  }\n  async submitLogsRequest(items, {\n    maxRequestSize,\n    canUseOverflow\n  }) {\n    const conn = await this.apiConn.get();\n    const dataStr = constructLogs3Data(items);\n    const payloadBytes = utf8ByteLength2(dataStr);\n    const useOverflow = canUseOverflow && payloadBytes > maxRequestSize;\n    if (this.allPublishPayloadsDir) {\n      await _HTTPBackgroundLogger.writePayloadToDir({\n        payloadDir: this.allPublishPayloadsDir,\n        payload: dataStr\n      });\n    }\n    let overflowUpload = null;\n    const overflowRows = useOverflow ? items.map((item) => item.overflowMeta) : null;\n    for (let i = 0; i < this.numTries; i++) {\n      const startTime = now();\n      let error = void 0;\n      try {\n        if (overflowRows) {\n          if (!overflowUpload) {\n            const currentUpload = await this.requestLogs3OverflowUpload(conn, {\n              rows: overflowRows,\n              sizeBytes: payloadBytes\n            });\n            await this._uploadLogs3OverflowPayload(\n              conn,\n              currentUpload,\n              dataStr\n            );\n            overflowUpload = currentUpload;\n          }\n          await conn.post_json(\n            \"logs3\",\n            constructLogs3OverflowRequest(overflowUpload.key)\n          );\n        } else {\n          await conn.post_json(\"logs3\", dataStr);\n        }\n      } catch (e) {\n        error = e;\n      }\n      if (error === void 0) {\n        return;\n      }\n      const isRetrying = i + 1 < this.numTries;\n      const retryingText = isRetrying ? \"\" : \" Retrying\";\n      const errorText = (() => {\n        if (error instanceof FailedHTTPResponse) {\n          return `${error.status} (${error.text}): ${error.data}`;\n        } else {\n          return `${error}`;\n        }\n      })();\n      const errMsg = `log request failed. Elapsed time: ${(now() - startTime) / 1e3} seconds. Payload size: ${payloadBytes}.${retryingText}\nError: ${errorText}`;\n      if (!isRetrying && this.failedPublishPayloadsDir) {\n        await _HTTPBackgroundLogger.writePayloadToDir({\n          payloadDir: this.failedPublishPayloadsDir,\n          payload: dataStr\n        });\n        this.logFailedPayloadsDir();\n      }\n      if (!isRetrying) {\n        debugLogger.warn(\n          `log request failed after ${this.numTries} retries. Dropping batch`\n        );\n        throw new Error(errMsg);\n      } else {\n        debugLogger.warn(errMsg);\n        if (isRetrying) {\n          const sleepTimeS = BACKGROUND_LOGGER_BASE_SLEEP_TIME_S * 2 ** i;\n          debugLogger.info(`Sleeping for ${sleepTimeS}s`);\n          await new Promise(\n            (resolve) => setTimeout(resolve, sleepTimeS * 1e3)\n          );\n        }\n      }\n    }\n  }\n  registerDroppedItemCount(numItems) {\n    if (numItems <= 0) {\n      return;\n    }\n    this.queueDropLoggingState.numDropped += numItems;\n    const timeNow = getCurrentUnixTimestamp();\n    if (timeNow - this.queueDropLoggingState.lastLoggedTimestamp > this.queueDropLoggingPeriod) {\n      debugLogger.warn(\n        `Dropped ${this.queueDropLoggingState.numDropped} elements due to full queue`\n      );\n      if (this.failedPublishPayloadsDir) {\n        this.logFailedPayloadsDir();\n      }\n      this.queueDropLoggingState.numDropped = 0;\n      this.queueDropLoggingState.lastLoggedTimestamp = timeNow;\n    }\n  }\n  async dumpDroppedEvents(wrappedItems) {\n    const publishPayloadsDir = [\n      this.allPublishPayloadsDir,\n      this.failedPublishPayloadsDir\n    ].reduce((acc, x) => x ? acc.concat([x]) : acc, new Array());\n    if (!(wrappedItems.length && publishPayloadsDir.length)) {\n      return;\n    }\n    try {\n      const [allItems, allAttachments] = await this.unwrapLazyValues(wrappedItems);\n      const dataStr = constructLogs3Data(\n        allItems.map((x) => stringifyWithOverflowMeta(x))\n      );\n      const attachmentStr = JSON.stringify(\n        allAttachments.map((a) => a.debugInfo())\n      );\n      const payload = `{\"data\": ${dataStr}, \"attachments\": ${attachmentStr}}\n`;\n      for (const payloadDir of publishPayloadsDir) {\n        await _HTTPBackgroundLogger.writePayloadToDir({ payloadDir, payload });\n      }\n    } catch (e) {\n      debugLogger.error(e);\n    }\n  }\n  static async writePayloadToDir({\n    payloadDir,\n    payload\n  }) {\n    if (!(isomorph_default.pathJoin && isomorph_default.mkdir && isomorph_default.writeFile)) {\n      debugLogger.warn(\n        \"Cannot dump payloads: filesystem-operations not supported on this platform\"\n      );\n      return;\n    }\n    const payloadFile = isomorph_default.pathJoin(\n      payloadDir,\n      `payload_${getCurrentUnixTimestamp()}_${(0, import_uuid2.v4)().slice(0, 8)}.json`\n    );\n    try {\n      await isomorph_default.mkdir(payloadDir, { recursive: true });\n      await isomorph_default.writeFile(payloadFile, payload);\n    } catch (e) {\n      debugLogger.error(\n        `Failed to write failed payload to output file ${payloadFile}:\n`,\n        e\n      );\n    }\n  }\n  triggerActiveFlush() {\n    if (this.activeFlushResolved) {\n      const flushBoundary = this.lastEnqueuedSequence;\n      if (flushBoundary <= this.completedSequence) {\n        return;\n      }\n      this.activeFlushResolved = false;\n      this.activeFlush = (async () => {\n        try {\n          await this.flushThrough(flushBoundary);\n        } catch (err) {\n          this.reportFlushError(err);\n        } finally {\n          this.activeFlushResolved = true;\n          if (!this.syncFlush && this.queue.length() > 0) {\n            this.triggerActiveFlush();\n          }\n        }\n      })();\n      try {\n        (0, import_functions.waitUntil)(this.activeFlush);\n      } catch (error) {\n        debugLogger.error(\"Failed to register background flush\", error);\n      }\n    }\n  }\n  reportFlushError(error) {\n    const errors = error instanceof AggregateError ? error.errors : [error];\n    for (const currentError of errors) {\n      try {\n        this.onFlushError?.(currentError);\n      } catch (callbackError) {\n        debugLogger.error(\"Error in onFlushError callback\", callbackError);\n      }\n    }\n  }\n  logFailedPayloadsDir() {\n    debugLogger.warn(\n      `Logging failed payloads to ${this.failedPublishPayloadsDir}`\n    );\n  }\n  // Should only be called by BraintrustState.\n  internalReplaceApiConn(apiConn) {\n    this.apiConn = new LazyValue(async () => apiConn);\n  }\n  disable() {\n    this._disabled = true;\n    this.triggerActiveFlush();\n  }\n  enforceQueueSizeLimit(enforce) {\n    this.queue.enforceQueueSizeLimit(enforce);\n  }\n};\nfunction isDatasetSnapshotNameLookup(lookup) {\n  return \"snapshotName\" in lookup;\n}\nfunction assertDatasetSnapshotLookup(lookup) {\n  const hasSnapshotName = lookup.snapshotName !== void 0;\n  const hasXactId = lookup.xactId !== void 0;\n  if (hasSnapshotName === hasXactId) {\n    throw new Error(\"Exactly one of snapshotName or xactId must be provided\");\n  }\n}\nfunction getExperimentDatasetFilter({\n  dataset,\n  _internal_btql\n}) {\n  if (_internal_btql !== void 0) {\n    return _internal_btql;\n  }\n  if (!(dataset instanceof Dataset2)) {\n    return void 0;\n  }\n  const datasetFilter = Reflect.get(dataset, \"_internal_btql\");\n  return isObject(datasetFilter) ? datasetFilter : void 0;\n}\nfunction getInternalBtqlLimit(internalBtql) {\n  const limit = internalBtql?.[\"limit\"];\n  return typeof limit === \"number\" ? limit : void 0;\n}\nfunction init(projectOrOptions, optionalOptions) {\n  const options = (() => {\n    if (typeof projectOrOptions === \"string\") {\n      return { ...optionalOptions, project: projectOrOptions };\n    } else {\n      if (optionalOptions !== void 0) {\n        throw new Error(\n          \"Cannot specify options struct as both parameters. Must call either init(project, options) or init(options).\"\n        );\n      }\n      return projectOrOptions;\n    }\n  })();\n  const {\n    project,\n    experiment,\n    description,\n    dataset,\n    _internal_btql,\n    parameters,\n    baseExperiment,\n    isPublic,\n    open,\n    update,\n    appUrl,\n    apiKey,\n    orgName,\n    forceLogin,\n    fetch: fetch2,\n    metadata,\n    tags,\n    gitMetadataSettings,\n    projectId,\n    baseExperimentId,\n    repoInfo,\n    state: stateArg\n  } = options;\n  if (!project && !projectId) {\n    throw new Error(\"Must specify at least one of project or projectId\");\n  }\n  if (open && update) {\n    throw new Error(\"Cannot open and update an experiment at the same time\");\n  }\n  const state = stateArg ?? _globalState;\n  state._internalSetTraceContextSigningSecret(apiKey);\n  state.enforceQueueSizeLimit(false);\n  if (open) {\n    if (isEmpty2(experiment)) {\n      throw new Error(`Cannot open an experiment without specifying its name`);\n    }\n    const lazyMetadata2 = new LazyValue(\n      async () => {\n        await state.login({ apiKey, appUrl, orgName, fetch: fetch2, forceLogin });\n        const args = {\n          project_name: project,\n          project_id: projectId,\n          org_name: state.orgName,\n          experiment_name: experiment\n        };\n        const response = await state.appConn().post_json(\"api/experiment/get\", args);\n        if (response.length === 0) {\n          throw new Error(\n            `Experiment ${experiment} not found in project ${projectId ?? project}.`\n          );\n        }\n        const info = response[0];\n        return {\n          project: {\n            id: info.project_id,\n            name: project ?? \"UNKNOWN_PROJECT\",\n            fullInfo: {}\n          },\n          experiment: {\n            id: info.id,\n            name: info.name,\n            fullInfo: info\n          }\n        };\n      }\n    );\n    return new ReadonlyExperiment(\n      stateArg ?? _globalState,\n      lazyMetadata2\n    );\n  }\n  const lazyMetadata = new LazyValue(\n    async () => {\n      await state.login({ apiKey, appUrl, orgName });\n      const args = {\n        project_name: project,\n        project_id: projectId,\n        org_id: state.orgId,\n        update\n      };\n      if (experiment) {\n        args[\"experiment_name\"] = experiment;\n      }\n      if (description) {\n        args[\"description\"] = description;\n      }\n      const repoInfoArg = await (async () => {\n        if (repoInfo) {\n          return repoInfo;\n        }\n        const mergedGitMetadataSettings = state.gitMetadataSettings == null ? gitMetadataSettings ?? { collect: \"none\" } : mergeGitMetadataSettings(\n          state.gitMetadataSettings,\n          gitMetadataSettings ?? { collect: \"all\" }\n        );\n        return await isomorph_default.getRepoInfo(mergedGitMetadataSettings);\n      })();\n      if (repoInfoArg) {\n        args[\"repo_info\"] = repoInfoArg;\n      }\n      if (baseExperimentId) {\n        args[\"base_exp_id\"] = baseExperimentId;\n      } else if (baseExperiment) {\n        args[\"base_experiment\"] = baseExperiment;\n      } else {\n        args[\"ancestor_commits\"] = await isomorph_default.getPastNAncestors();\n      }\n      if (dataset !== void 0) {\n        const datasetSelection = await serializeDatasetForExperiment({\n          dataset,\n          state\n        });\n        args[\"dataset_id\"] = datasetSelection.datasetId;\n        if (datasetSelection.datasetVersion !== void 0) {\n          args[\"dataset_version\"] = datasetSelection.datasetVersion;\n        }\n      }\n      const datasetFilter = getExperimentDatasetFilter({\n        dataset,\n        _internal_btql\n      });\n      if (datasetFilter !== void 0) {\n        args[\"internal_metadata\"] = {\n          dataset_filter: datasetFilter\n        };\n      }\n      if (parameters !== void 0) {\n        if (RemoteEvalParameters.isParameters(parameters)) {\n          args[\"parameters_id\"] = parameters.id;\n          args[\"parameters_version\"] = parameters.version;\n        } else {\n          args[\"parameters_id\"] = parameters.id;\n          if (parameters.version !== void 0) {\n            args[\"parameters_version\"] = parameters.version;\n          }\n        }\n      }\n      if (isPublic !== void 0) {\n        args[\"public\"] = isPublic;\n      }\n      if (metadata) {\n        args[\"metadata\"] = metadata;\n      }\n      if (tags) {\n        validateTags(tags);\n        args[\"tags\"] = tags;\n      }\n      let response = null;\n      while (true) {\n        try {\n          response = await state.appConn().post_json(\"api/experiment/register\", args);\n          break;\n        } catch (e) {\n          if (args[\"base_experiment\"] && `${\"data\" in e && e.data}`.includes(\"base experiment\")) {\n            debugLogger.forState(state).warn(`Base experiment ${args[\"base_experiment\"]} not found.`);\n            delete args[\"base_experiment\"];\n          } else {\n            throw e;\n          }\n        }\n      }\n      return {\n        project: {\n          id: response.project.id,\n          name: response.project.name,\n          fullInfo: response.project\n        },\n        experiment: {\n          id: response.experiment.id,\n          name: response.experiment.name,\n          created: response.experiment.created,\n          fullInfo: response.experiment\n        }\n      };\n    }\n  );\n  const ret = new Experiment2(\n    state,\n    lazyMetadata,\n    dataset !== void 0 ? dataset : void 0\n  );\n  if (options.setCurrent ?? true) {\n    state.currentExperiment = ret;\n  }\n  return ret;\n}\nfunction initExperiment(projectOrOptions, optionalOptions) {\n  const options = (() => {\n    if (typeof projectOrOptions === \"string\") {\n      return { ...optionalOptions, project: projectOrOptions };\n    } else {\n      if (optionalOptions !== void 0) {\n        throw new Error(\n          \"Cannot specify options struct as both parameters. Must call either init(project, options) or init(options).\"\n        );\n      }\n      return projectOrOptions;\n    }\n  })();\n  return init(options);\n}\nfunction withExperiment(project, callback, options = {}) {\n  debugLogger.forState(options.state).warn(\n    \"withExperiment is deprecated and will be removed in a future version of braintrust. Simply create the experiment with `init`.\"\n  );\n  const experiment = init(project, options);\n  return callback(experiment);\n}\nfunction withLogger(callback, options = {}) {\n  debugLogger.forState(options.state).warn(\n    \"withLogger is deprecated and will be removed in a future version of braintrust. Simply create the logger with `initLogger`.\"\n  );\n  const logger = initLogger(options);\n  return callback(logger);\n}\nasync function getDatasetSnapshots(params) {\n  const { state, datasetId } = params;\n  return DatasetSnapshot.array().parse(\n    await state.appConn().post_json(\"api/dataset_snapshot/get\", {\n      dataset_id: datasetId,\n      ...\"snapshotName\" in params ? { name: params.snapshotName } : {},\n      ...\"xactId\" in params ? { xact_id: params.xactId } : {}\n    })\n  );\n}\nasync function getDatasetSnapshot(params) {\n  assertDatasetSnapshotLookup(params);\n  const snapshots = await getDatasetSnapshots(params);\n  if (snapshots.length > 1) {\n    throw new Error(\n      isDatasetSnapshotNameLookup(params) ? `Expected a unique dataset snapshot named \"${params.snapshotName}\" for ${params.datasetId}` : `Expected a unique dataset snapshot for xact_id \"${params.xactId}\" in ${params.datasetId}`\n    );\n  }\n  return snapshots[0];\n}\nfunction normalizeDatasetSelection({\n  version,\n  environment,\n  snapshotName\n}) {\n  if (version !== void 0) {\n    return { version };\n  }\n  if (snapshotName !== void 0) {\n    return { snapshotName };\n  }\n  if (environment !== void 0) {\n    return { environment };\n  }\n  return {};\n}\nasync function resolveDatasetSnapshotName({\n  state,\n  datasetId,\n  snapshotName\n}) {\n  const match = await getDatasetSnapshot({\n    state,\n    datasetId,\n    snapshotName\n  });\n  if (match === void 0) {\n    throw new Error(\n      `Dataset snapshot \"${snapshotName}\" not found for ${datasetId}`\n    );\n  }\n  return match.xact_id;\n}\nasync function resolveDatasetSnapshotNameForMetadata({\n  state,\n  lazyMetadata,\n  snapshotName\n}) {\n  const metadata = await lazyMetadata.get();\n  return await resolveDatasetSnapshotName({\n    state,\n    datasetId: metadata.dataset.id,\n    snapshotName\n  });\n}\nasync function resolveDatasetEnvironment({\n  state,\n  datasetId,\n  environment\n}) {\n  const environmentObjectPath = `environment-object/dataset/${datasetId}/${encodeURIComponent(environment)}`;\n  const response = state.orgName == null ? await state.apiConn().get_json(environmentObjectPath) : await state.apiConn().get_json(environmentObjectPath, {\n    org_name: state.orgName\n  });\n  return import_v38.z.object({ object_version: import_v38.z.string() }).parse(response).object_version;\n}\nasync function resolveDatasetEnvironmentForMetadata({\n  state,\n  lazyMetadata,\n  environment\n}) {\n  const metadata = await lazyMetadata.get();\n  return await resolveDatasetEnvironment({\n    state,\n    datasetId: metadata.dataset.id,\n    environment\n  });\n}\nasync function serializeDatasetForExperiment({\n  dataset,\n  state\n}) {\n  if (!Dataset2.isDataset(dataset)) {\n    const selection2 = normalizeDatasetSelection(dataset);\n    if (selection2.version !== void 0) {\n      return {\n        datasetId: dataset.id,\n        datasetVersion: selection2.version\n      };\n    }\n    if (selection2.snapshotName !== void 0) {\n      return {\n        datasetId: dataset.id,\n        datasetVersion: await resolveDatasetSnapshotName({\n          state,\n          datasetId: dataset.id,\n          snapshotName: selection2.snapshotName\n        })\n      };\n    }\n    if (selection2.environment !== void 0) {\n      return {\n        datasetId: dataset.id,\n        datasetVersion: await resolveDatasetEnvironment({\n          state,\n          datasetId: dataset.id,\n          environment: selection2.environment\n        })\n      };\n    }\n    return {\n      datasetId: dataset.id\n    };\n  }\n  const evalData = await dataset.toEvalData();\n  const selection = normalizeDatasetSelection({\n    version: evalData.dataset_version,\n    environment: evalData.dataset_environment,\n    snapshotName: evalData.dataset_snapshot_name\n  });\n  if (selection.version !== void 0) {\n    return {\n      datasetId: evalData.dataset_id,\n      datasetVersion: selection.version\n    };\n  }\n  const datasetVersion = await dataset.version();\n  if (datasetVersion !== void 0) {\n    return {\n      datasetId: evalData.dataset_id,\n      datasetVersion\n    };\n  }\n  return {\n    datasetId: evalData.dataset_id\n  };\n}\nfunction initDataset(projectOrOptions, optionalOptions) {\n  const options = (() => {\n    if (typeof projectOrOptions === \"string\") {\n      return { ...optionalOptions, project: projectOrOptions };\n    } else {\n      if (optionalOptions !== void 0) {\n        throw new Error(\n          \"Cannot specify options struct as both parameters. Must call either initDataset(project, options) or initDataset(options).\"\n        );\n      }\n      return projectOrOptions;\n    }\n  })();\n  const {\n    project,\n    dataset,\n    datasetId,\n    description,\n    version,\n    snapshotName,\n    environment,\n    appUrl,\n    apiKey,\n    orgName,\n    fetch: fetch2,\n    forceLogin,\n    projectId,\n    metadata,\n    useOutput: legacy,\n    state: stateArg,\n    _internal_btql\n  } = options;\n  if (datasetId !== void 0 && (description !== void 0 || metadata !== void 0)) {\n    throw new Error(\n      \"Cannot specify description or metadata when datasetId is provided\"\n    );\n  }\n  const selection = normalizeDatasetSelection({\n    version,\n    environment,\n    snapshotName\n  });\n  const normalizedVersion = selection.version;\n  const normalizedEnvironment = selection.environment;\n  const normalizedSnapshotName = selection.snapshotName;\n  const cliInternalBtql = globalThis.__bt_eval_internal_btql;\n  const internalBtql = cliInternalBtql === void 0 ? _internal_btql : _internal_btql === void 0 ? cliInternalBtql : isObject(_internal_btql) ? { ...cliInternalBtql, ..._internal_btql } : _internal_btql;\n  const state = stateArg ?? _globalState;\n  const lazyMetadata = new LazyValue(\n    async () => {\n      await state.login({\n        orgName,\n        apiKey,\n        appUrl,\n        fetch: fetch2,\n        forceLogin\n      });\n      if (datasetId !== void 0) {\n        const objectInfo = datasetObjectInfoSchema.array().parse(\n          await state.appConn().post_json(\"api/self/get_object_info\", {\n            object_type: \"dataset\",\n            object_ids: [datasetId]\n          })\n        );\n        if (objectInfo.length === 0) {\n          throw new Error(`Dataset with ID ${datasetId} not found`);\n        }\n        if (objectInfo.length !== 1) {\n          throw new Error(\n            `Expected exactly one dataset with ID ${datasetId}, but found ${objectInfo.length}`\n          );\n        }\n        const datasetInfo = objectInfo[0];\n        return {\n          project: {\n            id: datasetInfo.parent_cols.project.id,\n            name: datasetInfo.parent_cols.project.name,\n            fullInfo: datasetInfo.parent_cols.project\n          },\n          dataset: {\n            id: datasetInfo.object_id,\n            name: datasetInfo.object_name,\n            fullInfo: datasetInfo\n          }\n        };\n      }\n      const args = {\n        org_id: state.orgId,\n        project_name: project,\n        project_id: projectId,\n        dataset_name: dataset,\n        description,\n        metadata\n      };\n      const response = await state.appConn().post_json(\"api/dataset/register\", args);\n      return {\n        project: {\n          id: response.project.id,\n          name: response.project.name,\n          fullInfo: response.project\n        },\n        dataset: {\n          id: response.dataset.id,\n          name: response.dataset.name,\n          fullInfo: response.dataset\n        }\n      };\n    }\n  );\n  const resolvedVersion = normalizedVersion !== void 0 ? normalizedVersion : normalizedSnapshotName !== void 0 ? new LazyValue(async () => {\n    return await resolveDatasetSnapshotNameForMetadata({\n      state,\n      lazyMetadata,\n      snapshotName: normalizedSnapshotName\n    });\n  }) : normalizedEnvironment !== void 0 ? new LazyValue(async () => {\n    return await resolveDatasetEnvironmentForMetadata({\n      state,\n      lazyMetadata,\n      environment: normalizedEnvironment\n    });\n  }) : void 0;\n  const datasetObject = new Dataset2(\n    stateArg ?? _globalState,\n    lazyMetadata,\n    typeof resolvedVersion === \"string\" ? resolvedVersion : void 0,\n    legacy,\n    internalBtql,\n    resolvedVersion instanceof LazyValue || normalizedEnvironment !== void 0 || normalizedSnapshotName !== void 0 ? {\n      ...resolvedVersion instanceof LazyValue ? {\n        lazyPinnedVersion: resolvedVersion\n      } : {},\n      ...normalizedEnvironment !== void 0 ? {\n        pinnedEnvironment: normalizedEnvironment\n      } : {},\n      ...normalizedSnapshotName !== void 0 ? {\n        pinnedSnapshotName: normalizedSnapshotName\n      } : {}\n    } : void 0\n  );\n  return datasetObject;\n}\nfunction withDataset(project, callback, options = {}) {\n  debugLogger.forState(options.state).warn(\n    \"withDataset is deprecated and will be removed in a future version of braintrust. Simply create the dataset with `initDataset`.\"\n  );\n  const dataset = initDataset(project, options);\n  return callback(dataset);\n}\nasync function computeLoggerMetadata(state, {\n  project_name,\n  project_id,\n  project_group_name\n}) {\n  await state.login({});\n  const org_id = state.orgId;\n  if (!isEmpty2(project_id) && !isEmpty2(project_name)) {\n    return {\n      org_id,\n      project: { id: project_id, name: project_name, fullInfo: {} }\n    };\n  }\n  const groupName = project_group_name || void 0;\n  const cache = state.projectMetadataCache;\n  const key = JSON.stringify([\n    state.appUrl,\n    org_id,\n    state.loginToken,\n    isEmpty2(project_id) ? [\"name\", project_name || GLOBAL_PROJECT, groupName] : [\"id\", project_id]\n  ]);\n  const cached = cache.get(key);\n  if (cached && Date.now() < cached.expiresAt) {\n    return structuredClone(await cached.promise);\n  }\n  const conn = state.appConn();\n  const controller = new AbortController();\n  let timeout;\n  const entry = {\n    // The lookup timeout bounds pending requests; the cache TTL starts on success.\n    expiresAt: Infinity,\n    promise: Promise.race([\n      (async () => {\n        if (isEmpty2(project_id)) {\n          const response2 = await conn.post_json(\n            \"api/project/register\",\n            {\n              project_name: project_name || GLOBAL_PROJECT,\n              org_id,\n              project_group_name: groupName\n            },\n            controller.signal\n          );\n          return {\n            org_id,\n            project: {\n              id: response2.project.id,\n              name: response2.project.name,\n              fullInfo: response2.project\n            }\n          };\n        }\n        const response = await conn.get_json(\n          \"api/project\",\n          { id: project_id },\n          0,\n          controller.signal\n        );\n        return {\n          org_id,\n          project: {\n            id: project_id,\n            name: response.name,\n            fullInfo: response.project\n          }\n        };\n      })(),\n      new Promise((_, reject2) => {\n        timeout = setTimeout(() => {\n          const error = new Error(\n            \"Braintrust project lookup timed out after 30 seconds.\"\n          );\n          reject2(error);\n          controller.abort(error);\n        }, PROJECT_LOOKUP_TIMEOUT_MS);\n      })\n    ])\n  };\n  cache.set(key, entry);\n  try {\n    const metadata = await entry.promise;\n    entry.expiresAt = Date.now() + PROJECT_CACHE_TTL_MS;\n    return structuredClone(metadata);\n  } catch (error) {\n    if (cache.get(key) === entry) {\n      cache.delete(key);\n    }\n    throw error;\n  } finally {\n    clearTimeout(timeout);\n  }\n}\nfunction initLogger(options = {}) {\n  const {\n    projectName,\n    projectId,\n    _createInProjectGroup,\n    asyncFlush: asyncFlushArg,\n    appUrl,\n    apiKey,\n    orgName,\n    forceLogin,\n    debugLogLevel,\n    environment,\n    fetch: fetch2,\n    state: stateArg\n  } = options || {};\n  const asyncFlush = asyncFlushArg === void 0 ? true : asyncFlushArg;\n  const computeMetadataArgs = {\n    project_name: projectName,\n    project_id: projectId,\n    project_group_name: _createInProjectGroup\n  };\n  const linkArgs = {\n    org_name: orgName,\n    app_url: appUrl,\n    project_name: projectName,\n    project_id: projectId\n  };\n  const state = stateArg ?? _globalState;\n  state._internalSetTraceContextSigningSecret(apiKey);\n  state.setDebugLogLevel(debugLogLevel);\n  state.spanOriginEnvironment = detectSpanOriginEnvironment(environment);\n  state.enforceQueueSizeLimit(true);\n  const lazyMetadata = new LazyValue(\n    async () => {\n      await state.login({\n        orgName,\n        apiKey,\n        appUrl,\n        forceLogin,\n        fetch: fetch2\n      });\n      return computeLoggerMetadata(state, computeMetadataArgs);\n    }\n  );\n  const ret = new Logger(state, lazyMetadata, {\n    asyncFlush,\n    computeMetadataArgs,\n    linkArgs\n  });\n  if (options.setCurrent ?? true) {\n    state.currentLogger = ret;\n  }\n  return ret;\n}\nasync function runCredentialScopedLoaderRequest(state, loginOptions, request) {\n  const resolvedLoginOptions = await state._internalResolveLoaderLoginOptions(loginOptions);\n  let cacheViews = state._internalGetLoaderCacheViews(resolvedLoginOptions);\n  try {\n    const requestState = await state._internalGetLoaderState(resolvedLoginOptions);\n    cacheViews = state._internalGetLoaderCacheViews(\n      resolvedLoginOptions,\n      requestState\n    );\n    return {\n      ok: true,\n      response: await request(requestState),\n      ...cacheViews\n    };\n  } catch (error) {\n    return { ok: false, error, ...cacheViews };\n  }\n}\nasync function loadPrompt({\n  projectName,\n  projectId,\n  slug,\n  version,\n  environment,\n  id,\n  defaults,\n  noTrace = false,\n  appUrl,\n  apiKey,\n  orgName,\n  fetch: fetch2,\n  forceLogin,\n  state: stateArg\n}) {\n  const versionOrEnvironment = version ? { version } : environment ? { environment } : {};\n  if (id) {\n  } else if (isEmpty2(projectName) && isEmpty2(projectId)) {\n    throw new Error(\"Must specify either projectName or projectId\");\n  } else if (isEmpty2(slug)) {\n    throw new Error(\"Must specify slug\");\n  }\n  const state = stateArg ?? _globalState;\n  const result = await runCredentialScopedLoaderRequest(\n    state,\n    { orgName, apiKey, appUrl, fetch: fetch2, forceLogin },\n    async (requestState) => {\n      let response2;\n      if (id) {\n        response2 = await requestState.apiConn().get_json(`v1/prompt/${id}`, versionOrEnvironment);\n        if (response2) {\n          response2 = { objects: [response2] };\n        }\n      } else {\n        response2 = await requestState.apiConn().get_json(\"v1/prompt\", {\n          project_name: projectName,\n          project_id: projectId,\n          slug,\n          ...versionOrEnvironment\n        });\n      }\n      return response2;\n    }\n  );\n  const { promptCache } = result;\n  if (!result.ok) {\n    const e = result.error;\n    if (!isLoaderCacheFallbackError(e)) {\n      throw e;\n    }\n    if (version || environment) {\n      throw new Error(`Prompt not found with specified parameters: ${e}`);\n    }\n    debugLogger.forState(state).warn(\"Failed to load prompt, attempting to fall back to cache:\", e);\n    let prompt2;\n    if (id) {\n      prompt2 = await promptCache.get({ id });\n      if (!prompt2) {\n        throw new Error(\n          `Prompt with id ${id} not found (not found on server or in local cache): ${e}`\n        );\n      }\n    } else {\n      prompt2 = await promptCache.get({\n        slug,\n        projectId,\n        projectName,\n        version: version ?? \"latest\"\n      });\n      if (!prompt2) {\n        throw new Error(\n          `Prompt ${slug} (version ${version ?? \"latest\"}) not found in ${[\n            projectName ?? projectId\n          ]} (not found on server or in local cache): ${e}`\n        );\n      }\n    }\n    return prompt2;\n  }\n  const { response } = result;\n  if (!(\"objects\" in response) || response.objects.length === 0) {\n    if (id) {\n      throw new Error(`Prompt with id ${id} not found.`);\n    } else {\n      throw new Error(\n        `Prompt ${slug} not found in ${[projectName ?? projectId]}`\n      );\n    }\n  } else if (response.objects.length > 1) {\n    if (id) {\n      throw new Error(\n        `Multiple prompts found with id ${id}. This should never happen.`\n      );\n    } else {\n      throw new Error(\n        `Multiple prompts found with slug ${slug} in project ${projectName ?? projectId}. This should never happen.`\n      );\n    }\n  }\n  const metadata = Prompt.parse(response[\"objects\"][0]);\n  const prompt = new Prompt2(metadata, defaults || {}, noTrace);\n  try {\n    if (id) {\n      await promptCache.set({ id }, prompt);\n    } else if (slug) {\n      await promptCache.set(\n        { slug, projectId, projectName, version: version ?? \"latest\" },\n        prompt\n      );\n    }\n  } catch (e) {\n    debugLogger.forState(state).warn(\"Failed to set prompt in cache:\", e);\n  }\n  return prompt;\n}\nasync function loadParameters({\n  projectName,\n  projectId,\n  slug,\n  version,\n  environment,\n  id,\n  appUrl,\n  apiKey,\n  orgName,\n  fetch: fetch2,\n  forceLogin,\n  state: stateArg\n}) {\n  const versionOrEnvironment = version ? { version } : environment ? { environment } : {};\n  if (id) {\n  } else if (isEmpty2(projectName) && isEmpty2(projectId)) {\n    throw new Error(\"Must specify either projectName or projectId\");\n  } else if (isEmpty2(slug)) {\n    throw new Error(\"Must specify slug\");\n  }\n  const state = stateArg ?? _globalState;\n  const result = await runCredentialScopedLoaderRequest(\n    state,\n    { orgName, apiKey, appUrl, fetch: fetch2, forceLogin },\n    async (requestState) => {\n      let response2;\n      if (id) {\n        response2 = await requestState.apiConn().get_json(`v1/function/${id}`, {\n          ...versionOrEnvironment\n        });\n        if (response2) {\n          response2 = { objects: [response2] };\n        }\n      } else {\n        response2 = await requestState.apiConn().get_json(\"v1/function\", {\n          project_name: projectName,\n          project_id: projectId,\n          slug,\n          function_type: \"parameters\",\n          ...versionOrEnvironment\n        });\n      }\n      return response2;\n    }\n  );\n  const { parametersCache } = result;\n  if (!result.ok) {\n    const e = result.error;\n    if (!isLoaderCacheFallbackError(e)) {\n      throw e;\n    }\n    if (version || environment) {\n      throw new Error(`Parameters not found with specified parameters: ${e}`);\n    }\n    debugLogger.forState(state).warn(\"Failed to load parameters, attempting to fall back to cache:\", e);\n    let parameters2;\n    if (id) {\n      parameters2 = await parametersCache.get({ id });\n      if (!parameters2) {\n        throw new Error(\n          `Parameters with id ${id} not found (not found on server or in local cache): ${e}`\n        );\n      }\n    } else {\n      parameters2 = await parametersCache.get({\n        slug,\n        projectId,\n        projectName,\n        version: version ?? \"latest\"\n      });\n      if (!parameters2) {\n        throw new Error(\n          `Parameters ${slug} (version ${version ?? \"latest\"}) not found in ${[\n            projectName ?? projectId\n          ]} (not found on server or in local cache): ${e}`\n        );\n      }\n    }\n    return parameters2;\n  }\n  const { response } = result;\n  if (!(\"objects\" in response) || response.objects.length === 0) {\n    if (id) {\n      throw new Error(`Parameters with id ${id} not found.`);\n    } else {\n      throw new Error(\n        `Parameters ${slug} not found in ${[projectName ?? projectId]}`\n      );\n    }\n  } else if (response.objects.length > 1) {\n    if (id) {\n      throw new Error(\n        `Multiple parameters found with id ${id}. This should never happen.`\n      );\n    } else {\n      throw new Error(\n        `Multiple parameters found with slug ${slug} in project ${projectName ?? projectId}. This should never happen.`\n      );\n    }\n  }\n  const metadata = parametersRowSchema.parse(response[\"objects\"][0]);\n  const parameters = new RemoteEvalParameters(metadata);\n  try {\n    if (id) {\n      await parametersCache.set({ id }, parameters);\n    } else if (slug) {\n      await parametersCache.set(\n        { slug, projectId, projectName, version: version ?? \"latest\" },\n        parameters\n      );\n    }\n  } catch (e) {\n    debugLogger.forState(state).warn(\"Failed to set parameters in cache:\", e);\n  }\n  return parameters;\n}\nfunction setMaskingFunction(maskingFunction) {\n  _internalGetGlobalState().setMaskingFunction(maskingFunction);\n}\nasync function login(options = {}) {\n  const { forceLogin = false } = options || {};\n  if (!_internalGetGlobalState()) {\n    _internalSetInitialState();\n  }\n  const state = _internalGetGlobalState();\n  state.setDebugLogLevel(options.debugLogLevel);\n  if (state.loggedIn && !forceLogin) {\n    let checkUpdatedParam2 = function(varname, arg, orig) {\n      if (!isEmpty2(arg) && !isEmpty2(orig) && arg !== orig) {\n        throw new Error(\n          `Re-logging in with different ${varname} (${arg}) than original (${orig}). To force re-login, pass \\`forceLogin: true\\``\n        );\n      }\n    };\n    var checkUpdatedParam = checkUpdatedParam2;\n    checkUpdatedParam2(\"appUrl\", options.appUrl, state.appUrl);\n    checkUpdatedParam2(\n      \"apiKey\",\n      options.apiKey ? HTTPConnection.sanitize_token(options.apiKey) : void 0,\n      state.loginToken\n    );\n    checkUpdatedParam2(\"orgName\", options.orgName, state.orgName);\n    return state;\n  }\n  await state.login(options);\n  return state;\n}\nasync function loginToLoaderRequestState({\n  appUrl,\n  apiKey,\n  orgName,\n  fetch: fetch2\n}) {\n  let orgId;\n  let apiUrl;\n  if (apiKey === TEST_API_KEY) {\n    orgId = \"test-org-id\";\n    apiUrl = \"https://braintrust.dev/fake-api-url\";\n  } else {\n    let loginResponse;\n    try {\n      loginResponse = await fetch2(_urljoin(appUrl, `/api/apikey/login`), {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${apiKey}`\n        }\n      });\n    } catch (error) {\n      throw new HTTPTransportError(error);\n    }\n    const info = await readJSONResponse(\n      await checkResponse(loginResponse),\n      true\n    );\n    const org = selectLoginOrg(info.org_info, orgName);\n    orgId = org.id;\n    apiUrl = isomorph_default.getEnv(\"BRAINTRUST_API_URL\") ?? org.api_url;\n    if (!apiUrl) {\n      throw new Error(\n        orgName ? `Unable to log into organization '${orgName}'. Are you sure this credential is scoped to the organization?` : \"Unable to log into any organization with the provided credential.\"\n      );\n    }\n  }\n  const apiConnection = new HTTPConnection(apiUrl, fetch2, true);\n  apiConnection.set_token(apiKey);\n  apiConnection.make_long_lived();\n  return {\n    appUrl,\n    orgId,\n    apiConn: () => apiConnection\n  };\n}\nasync function loginToState(options = {}) {\n  const {\n    appUrl = isomorph_default.getEnv(\"BRAINTRUST_APP_URL\") || \"https://www.braintrust.dev\",\n    apiKey: apiKeyArg,\n    orgName = isomorph_default.getEnv(\"BRAINTRUST_ORG_NAME\"),\n    fetch: fetch2 = globalThis.fetch\n  } = options || {};\n  const apiKey = apiKeyArg !== void 0 ? apiKeyArg : await isomorph_default.getBraintrustApiKey();\n  const appPublicUrl = isomorph_default.getEnv(\"BRAINTRUST_APP_PUBLIC_URL\") || appUrl;\n  const state = new BraintrustState(options);\n  state.resetLoginInfo();\n  state.appUrl = appUrl;\n  state.appPublicUrl = appPublicUrl;\n  let conn = null;\n  if (!apiKey) {\n    throw new Error(\n      \"Please specify an api key (e.g. by setting BRAINTRUST_API_KEY).\"\n    );\n  } else if (apiKey === TEST_API_KEY) {\n    const testOrgInfo = [\n      {\n        id: \"test-org-id\",\n        name: \"test-org-name\",\n        api_url: \"https://braintrust.dev/fake-api-url\"\n      }\n    ];\n    state.loggedIn = true;\n    state.loginToken = TEST_API_KEY;\n    _saveOrgInfo(state, testOrgInfo, testOrgInfo[0].name);\n    return state;\n  } else {\n    const controller = new AbortController();\n    let timeout;\n    let info;\n    try {\n      info = await Promise.race([\n        (async () => {\n          const response = await fetch2(_urljoin(appUrl, `/api/apikey/login`), {\n            method: \"POST\",\n            headers: {\n              \"Content-Type\": \"application/json\",\n              Authorization: `Bearer ${apiKey}`\n            },\n            signal: controller.signal\n          });\n          return readJSONResponse(await checkResponse(response));\n        })(),\n        new Promise((_, reject2) => {\n          timeout = setTimeout(() => {\n            const error = new Error(\n              \"Braintrust login timed out after 30 seconds.\"\n            );\n            reject2(error);\n            controller.abort(error);\n          }, LOGIN_TIMEOUT_MS);\n        })\n      ]);\n    } finally {\n      clearTimeout(timeout);\n    }\n    _saveOrgInfo(state, info.org_info, orgName);\n    if (!state.apiUrl) {\n      if (orgName) {\n        throw new Error(\n          `Unable to log into organization '${orgName}'. Are you sure this credential is scoped to the organization?`\n        );\n      } else {\n        throw new Error(\n          \"Unable to log into any organization with the provided credential.\"\n        );\n      }\n    }\n    conn = state.apiConn();\n    conn.set_token(apiKey);\n    if (!conn) {\n      throw new Error(\"Conn should be set at this point (a bug)\");\n    }\n    conn.make_long_lived();\n    state.appConn().set_token(apiKey);\n    if (state.proxyUrl) {\n      state.proxyConn().set_token(apiKey);\n    }\n    state.loginToken = conn.token;\n    state.loggedIn = true;\n    state.loginReplaceApiConn(conn);\n  }\n  return state;\n}\nfunction log(event) {\n  debugLogger.warn(\n    \"braintrust.log is deprecated and will be removed in a future version of braintrust. Use `experiment.log` instead.\"\n  );\n  const e = currentExperiment();\n  if (!e) {\n    throw new Error(\"Not initialized. Please call init() first\");\n  }\n  return e.log(event);\n}\nasync function summarize(options = {}) {\n  debugLogger.warn(\n    \"braintrust.summarize is deprecated and will be removed in a future version of braintrust. Use `experiment.summarize` instead.\"\n  );\n  const e = currentExperiment();\n  if (!e) {\n    throw new Error(\"Not initialized. Please call init() first\");\n  }\n  return await e.summarize(options);\n}\nfunction currentExperiment(options) {\n  const state = options?.state ?? _globalState;\n  return state.currentExperiment;\n}\nfunction currentLogger(options) {\n  const state = options?.state ?? _globalState;\n  return castLogger(state.currentLogger, options?.asyncFlush);\n}\nfunction currentSpan(options) {\n  const state = options?.state ?? _globalState;\n  return state.contextManager.getCurrentSpan() ?? NOOP_SPAN;\n}\nfunction getSpanParentObjectAndPropagatedState(options) {\n  const state = options?.state ?? _globalState;\n  const parentSpan = currentSpan({ state });\n  if (!Object.is(parentSpan, NOOP_SPAN)) {\n    return { parentObject: parentSpan, propagatedState: void 0 };\n  }\n  const parent = options?.parent ?? state.currentParent.getStore();\n  const { parentSlug, propagatedState } = normalizeParent(parent, state);\n  if (parentSlug) {\n    return {\n      parentObject: SpanComponentsV4.fromStr(parentSlug),\n      propagatedState\n    };\n  }\n  const experiment = currentExperiment();\n  if (experiment) {\n    return { parentObject: experiment, propagatedState: void 0 };\n  }\n  const logger = currentLogger(options);\n  if (logger) {\n    return { parentObject: logger, propagatedState: void 0 };\n  }\n  return { parentObject: NOOP_SPAN, propagatedState: void 0 };\n}\nfunction getSpanParentObject(options) {\n  return getSpanParentObjectAndPropagatedState(options).parentObject;\n}\nfunction _internalExportParentSynchronously(parent) {\n  if (\"toStr\" in parent) {\n    return parent.toStr();\n  }\n  if (\"getParentInfo\" in parent) {\n    const parentInfo = parent.getParentInfo();\n    if (!parentInfo) {\n      return void 0;\n    }\n    const objectId = parentInfo.objectId.getSync().value;\n    if (!objectId && !parentInfo.computeObjectMetadataArgs) {\n      return void 0;\n    }\n    return new SpanComponentsV4({\n      object_type: parentInfo.objectType,\n      ...objectId ? { object_id: objectId } : {\n        compute_object_metadata_args: parentInfo.computeObjectMetadataArgs ?? {}\n      },\n      row_id: parent.id,\n      root_span_id: parent.rootSpanId,\n      span_id: parent.spanId\n    }).toStr();\n  }\n  const components = braintrustParentToComponents(parent._getOtelParent());\n  if (!components) {\n    return void 0;\n  }\n  return new SpanComponentsV4({\n    object_type: components.objectType,\n    ...components.objectId ? { object_id: components.objectId } : { compute_object_metadata_args: components.computeArgs ?? {} }\n  }).toStr();\n}\nfunction currentBraintrustParent(state) {\n  const resolvedState = state ?? _globalState;\n  const experiment = currentExperiment({ state: resolvedState });\n  if (experiment) {\n    try {\n      return experiment._getOtelParent() ?? void 0;\n    } catch {\n      return void 0;\n    }\n  }\n  const logger = currentLogger({ state: resolvedState });\n  if (logger) {\n    try {\n      return logger._getOtelParent() ?? void 0;\n    } catch {\n      return void 0;\n    }\n  }\n  return void 0;\n}\nfunction braintrustParentToComponents(braintrustParent) {\n  if (!braintrustParent) {\n    return void 0;\n  }\n  if (braintrustParent.startsWith(\"project_id:\")) {\n    const objectId = braintrustParent.slice(\"project_id:\".length);\n    return objectId ? {\n      objectType: 2 /* PROJECT_LOGS */,\n      objectId,\n      computeArgs: void 0\n    } : void 0;\n  }\n  if (braintrustParent.startsWith(\"project_name:\")) {\n    const name = braintrustParent.slice(\"project_name:\".length);\n    return name ? {\n      objectType: 2 /* PROJECT_LOGS */,\n      objectId: void 0,\n      computeArgs: { project_name: name }\n    } : void 0;\n  }\n  if (braintrustParent.startsWith(\"experiment_id:\")) {\n    const objectId = braintrustParent.slice(\"experiment_id:\".length);\n    return objectId ? {\n      objectType: 1 /* EXPERIMENT */,\n      objectId,\n      computeArgs: void 0\n    } : void 0;\n  }\n  return void 0;\n}\nfunction isMutableHeaderTupleArray(carrier) {\n  return Array.isArray(carrier) && carrier.every((item) => Array.isArray(item) && typeof item[0] === \"string\");\n}\nfunction setHeader(carrier, name, value) {\n  if (isMutableHeaderTupleArray(carrier)) {\n    const lowered2 = name.toLowerCase();\n    for (let i = carrier.length - 1; i >= 0; i--) {\n      if (carrier[i][0].toLowerCase() === lowered2) {\n        carrier.splice(i, 1);\n      }\n    }\n    carrier.push([name, value]);\n    return;\n  }\n  const setter = carrier.set;\n  if (typeof setter === \"function\") {\n    const deleter = carrier.delete;\n    if (typeof deleter === \"function\") {\n      try {\n        deleter.call(carrier, name);\n      } catch {\n      }\n    }\n    setter.call(carrier, name, value);\n    return;\n  }\n  const nodeSetter = carrier.setHeader;\n  if (typeof nodeSetter === \"function\") {\n    const remover = carrier.removeHeader;\n    if (typeof remover === \"function\") {\n      try {\n        remover.call(carrier, name);\n      } catch {\n      }\n    }\n    nodeSetter.call(carrier, name, value);\n    return;\n  }\n  const headerSetter = carrier.header;\n  if (typeof headerSetter === \"function\") {\n    const deleter = carrier.delete;\n    if (typeof deleter === \"function\") {\n      try {\n        deleter.call(carrier, name);\n      } catch {\n      }\n    }\n    const remover = carrier.removeHeader;\n    if (typeof remover === \"function\") {\n      try {\n        remover.call(carrier, name);\n      } catch {\n      }\n    }\n    headerSetter.call(carrier, name, value);\n    return;\n  }\n  const headerBag = carrier;\n  const lowered = name.toLowerCase();\n  for (const key of Object.keys(headerBag)) {\n    if (key !== name && key.toLowerCase() === lowered) {\n      delete headerBag[key];\n    }\n  }\n  headerBag[name] = value;\n}\nfunction deleteHeader(carrier, name) {\n  const lowered = name.toLowerCase();\n  if (isMutableHeaderTupleArray(carrier)) {\n    for (let i = carrier.length - 1; i >= 0; i--) {\n      if (carrier[i][0].toLowerCase() === lowered) {\n        carrier.splice(i, 1);\n      }\n    }\n    return;\n  }\n  const deleter = carrier.delete;\n  if (typeof deleter === \"function\") {\n    try {\n      deleter.call(carrier, name);\n      return;\n    } catch {\n    }\n  }\n  const remover = carrier.removeHeader;\n  if (typeof remover === \"function\") {\n    try {\n      remover.call(carrier, name);\n      return;\n    } catch {\n    }\n  }\n  const headerBag = carrier;\n  for (const key of Object.keys(headerBag)) {\n    if (key.toLowerCase() === lowered) {\n      delete headerBag[key];\n    }\n  }\n}\nfunction _injectIntoCarrier(carrier, args) {\n  const traceFlags = args.propagatedState?.traceFlags;\n  const traceparent = traceFlags ? formatTraceparent(args.traceId, args.spanId, traceFlags) : formatTraceparent(args.traceId, args.spanId);\n  if (traceparent === void 0) {\n    return;\n  }\n  setHeader(carrier, TRACEPARENT_HEADER, traceparent);\n  const tracestate = args.propagatedState?.tracestate;\n  if (tracestate) {\n    setHeader(carrier, TRACESTATE_HEADER, tracestate);\n  }\n  const existing = getHeader(carrier, BAGGAGE_HEADER);\n  const baggageValue = mergeBaggage(existing, args.braintrustParent);\n  if (baggageValue !== void 0) {\n    setHeader(carrier, BAGGAGE_HEADER, baggageValue);\n  } else if (existing !== void 0) {\n    deleteHeader(carrier, BAGGAGE_HEADER);\n  }\n}\nfunction injectTraceContext(carrier, options) {\n  const resolvedCarrier = carrier ?? {};\n  const span = options?.span ?? currentSpan({ state: options?.state });\n  try {\n    return span.inject(resolvedCarrier);\n  } catch (e) {\n    debugLogger.warn(`Error injecting trace context: ${e}`);\n    return resolvedCarrier;\n  }\n}\nfunction extractTraceContextFromHeaders(headers) {\n  if (!headers) {\n    return void 0;\n  }\n  const traceparent = getHeader(headers, TRACEPARENT_HEADER);\n  if (!traceparent || parseTraceparent(traceparent) === void 0) {\n    return void 0;\n  }\n  const context = { [TRACEPARENT_HEADER]: traceparent };\n  const baggageValue = getHeader(headers, BAGGAGE_HEADER);\n  if (baggageValue) {\n    context[BAGGAGE_HEADER] = baggageValue;\n  }\n  const tracestate = getHeader(headers, TRACESTATE_HEADER);\n  if (tracestate) {\n    context[TRACESTATE_HEADER] = tracestate;\n  }\n  return context;\n}\nfunction resolveW3cParent(context, state) {\n  const traceparent = getHeader(context, TRACEPARENT_HEADER);\n  const parsed = traceparent ? parseTraceparent(traceparent) : void 0;\n  if (parsed === void 0) {\n    return { parentSlug: void 0, propagatedState: void 0 };\n  }\n  const { traceId, spanId, traceFlags } = parsed;\n  let braintrustParent = void 0;\n  const baggageValue = getHeader(context, BAGGAGE_HEADER);\n  if (baggageValue) {\n    braintrustParent = parseBaggage(baggageValue)[BRAINTRUST_PARENT_KEY];\n  }\n  if (!braintrustParent) {\n    braintrustParent = currentBraintrustParent(state);\n  }\n  if (!braintrustParent) {\n    debugLogger.warn(\n      \"Received traceparent without a braintrust.parent and no active logger/experiment; cannot route the trace. Starting a fresh local span instead.\"\n    );\n    return { parentSlug: void 0, propagatedState: void 0 };\n  }\n  const parsedParent = braintrustParentToComponents(braintrustParent);\n  if (parsedParent === void 0) {\n    debugLogger.warn(\n      `Invalid braintrust.parent: ${JSON.stringify(braintrustParent)}`\n    );\n    return { parentSlug: void 0, propagatedState: void 0 };\n  }\n  const { objectType, objectId, computeArgs } = parsedParent;\n  const tracestate = getHeader(context, TRACESTATE_HEADER);\n  const slug = new SpanComponentsV4({\n    object_type: objectType,\n    ...computeArgs ? { compute_object_metadata_args: computeArgs } : { object_id: objectId },\n    row_id: \"bt-propagation\",\n    // non-empty to enable span_id/root_span_id\n    span_id: spanId,\n    root_span_id: traceId\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  }).toStr();\n  return {\n    parentSlug: slug,\n    propagatedState: { tracestate, traceFlags, braintrustParent }\n  };\n}\nfunction normalizeParent(parent, state) {\n  if (parent && typeof parent === \"object\") {\n    return resolveW3cParent(parent, state);\n  }\n  return {\n    parentSlug: parent ?? void 0,\n    propagatedState: void 0\n  };\n}\nfunction parentSpanIdsUsable(spanId, rootSpanId) {\n  return Boolean(spanId) && Boolean(rootSpanId);\n}\nfunction logError(span, error) {\n  let errorMessage3 = \"<error>\";\n  let stackTrace = \"\";\n  if (error instanceof Error) {\n    errorMessage3 = error.message;\n    stackTrace = error.stack || \"\";\n  } else {\n    errorMessage3 = String(error);\n  }\n  span.log({ error: `${errorMessage3}\n\n${stackTrace}` });\n}\nfunction traced(callback, args) {\n  const { span, isSyncFlushLogger } = startSpanAndIsLogger(args);\n  const ret = runCatchFinally(\n    () => {\n      if (args?.setCurrent ?? true) {\n        return withCurrent(span, callback);\n      } else {\n        return callback(span);\n      }\n    },\n    (e) => {\n      logError(span, e);\n      throw e;\n    },\n    () => span.end()\n  );\n  if (args?.asyncFlush === void 0 || args?.asyncFlush) {\n    return ret;\n  } else {\n    return (async () => {\n      const awaitedRet = await ret;\n      if (isSyncFlushLogger) {\n        await span.flush();\n      }\n      return awaitedRet;\n    })();\n  }\n}\nfunction isGeneratorFunction(fn) {\n  return Object.prototype.toString.call(fn) === \"[object GeneratorFunction]\";\n}\nfunction isAsyncGeneratorFunction(fn) {\n  return Object.prototype.toString.call(fn) === \"[object AsyncGeneratorFunction]\";\n}\nfunction wrapTracedSyncGenerator(fn, spanArgs, noTraceIO) {\n  const wrapper = function* (...fnArgs) {\n    const span = startSpan(spanArgs);\n    try {\n      if (!noTraceIO) {\n        span.log({ input: fnArgs });\n      }\n      const maxItems = getNumericEnv(\"BRAINTRUST_MAX_GENERATOR_ITEMS\") ?? 1e3;\n      if (!noTraceIO && maxItems !== 0) {\n        let collected = [];\n        let truncated = false;\n        const gen = generatorWithCurrent(span, fn.apply(this, fnArgs));\n        try {\n          for (const value of gen) {\n            if (maxItems === -1 || !truncated && collected.length < maxItems) {\n              collected.push(value);\n            } else {\n              truncated = true;\n              collected = [];\n              debugLogger.warn(\n                `Generator output exceeded limit of ${maxItems} items, output not logged. Increase BRAINTRUST_MAX_GENERATOR_ITEMS or set to -1 to disable limit.`\n              );\n            }\n            yield value;\n          }\n          if (!truncated) {\n            span.log({ output: collected });\n          }\n        } catch (error) {\n          logError(span, error);\n          if (!truncated && collected.length > 0) {\n            span.log({ output: collected });\n          }\n          throw error;\n        }\n      } else {\n        const gen = generatorWithCurrent(span, fn.apply(this, fnArgs));\n        for (const value of gen) {\n          yield value;\n        }\n      }\n    } finally {\n      span.end();\n    }\n  };\n  Object.defineProperty(wrapper, \"name\", { value: fn.name });\n  return wrapper;\n}\nfunction wrapTracedAsyncGenerator(fn, spanArgs, noTraceIO) {\n  const wrapper = async function* (...fnArgs) {\n    const span = startSpan(spanArgs);\n    try {\n      if (!noTraceIO) {\n        span.log({ input: fnArgs });\n      }\n      const maxItems = getNumericEnv(\"BRAINTRUST_MAX_GENERATOR_ITEMS\") ?? 1e3;\n      if (!noTraceIO && maxItems !== 0) {\n        let collected = [];\n        let truncated = false;\n        const gen = asyncGeneratorWithCurrent(span, fn.apply(this, fnArgs));\n        try {\n          for await (const value of gen) {\n            if (maxItems === -1 || !truncated && collected.length < maxItems) {\n              collected.push(value);\n            } else {\n              truncated = true;\n              collected = [];\n              debugLogger.warn(\n                `Generator output exceeded limit of ${maxItems} items, output not logged. Increase BRAINTRUST_MAX_GENERATOR_ITEMS or set to -1 to disable limit.`\n              );\n            }\n            yield value;\n          }\n          if (!truncated) {\n            span.log({ output: collected });\n          }\n        } catch (error) {\n          logError(span, error);\n          if (!truncated && collected.length > 0) {\n            span.log({ output: collected });\n          }\n          throw error;\n        }\n      } else {\n        const gen = asyncGeneratorWithCurrent(span, fn.apply(this, fnArgs));\n        for await (const value of gen) {\n          yield value;\n        }\n      }\n    } finally {\n      span.end();\n    }\n  };\n  Object.defineProperty(wrapper, \"name\", { value: fn.name });\n  return wrapper;\n}\nfunction wrapTraced(fn, args) {\n  const spanArgs = {\n    name: fn.name,\n    type: \"function\",\n    ...args\n  };\n  const hasExplicitInput = args && args.event && \"input\" in args.event && args.event.input !== void 0;\n  const hasExplicitOutput = args && args.event && args.event.output !== void 0;\n  const noTraceIO = args?.noTraceIO || hasExplicitInput || hasExplicitOutput;\n  if (isGeneratorFunction(fn)) {\n    return wrapTracedSyncGenerator(fn, spanArgs, !!noTraceIO);\n  }\n  if (isAsyncGeneratorFunction(fn)) {\n    return wrapTracedAsyncGenerator(fn, spanArgs, !!noTraceIO);\n  }\n  if (args?.asyncFlush) {\n    return ((...fnArgs) => traced((span) => {\n      if (!args?.noTraceIO && !hasExplicitInput) {\n        span.log({ input: fnArgs });\n      }\n      const output = fn(...fnArgs);\n      if (!args?.noTraceIO && !hasExplicitOutput) {\n        if (output instanceof Promise) {\n          return (async () => {\n            const result = await output;\n            span.log({ output: result });\n            return result;\n          })();\n        } else {\n          span.log({ output });\n        }\n      }\n      return output;\n    }, spanArgs));\n  } else {\n    return ((...fnArgs) => traced(async (span) => {\n      if (!args?.noTraceIO && !hasExplicitInput) {\n        span.log({ input: fnArgs });\n      }\n      const outputResult = fn(...fnArgs);\n      const output = await outputResult;\n      if (!args?.noTraceIO && !hasExplicitOutput) {\n        span.log({ output });\n      }\n      return output;\n    }, spanArgs));\n  }\n}\nvar traceable = wrapTraced;\nfunction startSpan(args) {\n  return startSpanAndIsLogger(args).span;\n}\nfunction _internalStartSpanWithInitialMerge(args) {\n  return startSpanAndIsLogger({\n    ...args,\n    [INITIAL_SPAN_WRITE_AS_MERGE]: true\n  }).span;\n}\nfunction _internalStartSpanWithInitialMergeAndParentSpanIds(args) {\n  return startSpanAndIsLogger(\n    {\n      ...args,\n      [INITIAL_SPAN_WRITE_AS_MERGE]: true\n    },\n    { useParentSpanIdsForObjectParent: true }\n  ).span;\n}\nfunction _internalStartSpanWithContext(args, context) {\n  return startSpanAndIsLogger({\n    ...args,\n    [INTERNAL_SPAN_CONTEXT]: context\n  }).span;\n}\nasync function flush(options) {\n  const state = options?.state ?? _globalState;\n  return await state.bgLogger().flush();\n}\nfunction setFetch(fetch2) {\n  _internalGetGlobalState().setFetch(fetch2);\n}\nfunction startSpanAndIsLogger(args, internalOptions) {\n  const state = args?.state ?? _globalState;\n  const { parentObject, propagatedState } = getSpanParentObjectAndPropagatedState({\n    asyncFlush: args?.asyncFlush,\n    parent: args?.parent,\n    state\n  });\n  if (parentObject instanceof SpanComponentsV3 || parentObject instanceof SpanComponentsV4) {\n    const parentSpanIds = parentObject.data.row_id && parentSpanIdsUsable(\n      parentObject.data.span_id,\n      parentObject.data.root_span_id\n    ) ? {\n      spanId: parentObject.data.span_id,\n      rootSpanId: parentObject.data.root_span_id\n    } : internalOptions?.useParentSpanIdsForObjectParent ? args?.parentSpanIds : void 0;\n    const { parent: _ignoredParent, ...spanArgs } = args ?? {};\n    const span = new SpanImpl({\n      state,\n      ...spanArgs,\n      parentObjectType: parentObject.data.object_type,\n      parentObjectId: new LazyValue(\n        spanComponentsToObjectIdLambda(state, parentObject)\n      ),\n      parentComputeObjectMetadataArgs: parentObject.data.compute_object_metadata_args ?? void 0,\n      parentSpanIds,\n      propagatedEvent: args?.propagatedEvent ?? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      (parentObject.data.propagated_event ?? void 0),\n      propagatedState\n    });\n    return {\n      span,\n      isSyncFlushLogger: parentObject.data.object_type === 2 /* PROJECT_LOGS */ && // Since there's no parent logger here, we're free to choose the async flush\n      // behavior, and therefore propagate along whatever we get from the arguments\n      args?.asyncFlush === false\n    };\n  } else {\n    const span = parentObject.startSpan(args);\n    return {\n      span,\n      isSyncFlushLogger: parentObject.kind === \"logger\" && parentObject.asyncFlush === false\n    };\n  }\n}\nfunction withCurrent(span, callback, state = void 0) {\n  const currentState = state ?? _globalState;\n  return currentState.contextManager.runInContext(span, () => callback(span));\n}\nfunction* generatorWithCurrent(span, gen, state = void 0) {\n  let nextValue;\n  while (true) {\n    const result = withCurrent(\n      span,\n      () => {\n        try {\n          return gen.next(nextValue);\n        } catch (e) {\n          return { value: void 0, done: true, error: e };\n        }\n      },\n      state\n    );\n    if (\"error\" in result) {\n      throw result.error;\n    }\n    if (result.done) {\n      return result.value;\n    }\n    nextValue = yield result.value;\n  }\n}\nasync function* asyncGeneratorWithCurrent(span, gen, state = void 0) {\n  let nextValue;\n  while (true) {\n    const result = await withCurrent(\n      span,\n      async () => {\n        try {\n          return await gen.next(nextValue);\n        } catch (e) {\n          return { value: void 0, done: true, error: e };\n        }\n      },\n      state\n    );\n    if (\"error\" in result) {\n      throw result.error;\n    }\n    if (result.done) {\n      return result.value;\n    }\n    nextValue = yield result.value;\n  }\n}\nfunction withParent(parent, callback, state = void 0) {\n  return (state ?? _globalState).currentParent.run(parent, () => callback());\n}\nfunction _saveOrgInfo(state, orgInfo, orgName) {\n  const org = selectLoginOrg(orgInfo, orgName);\n  state.orgId = org.id;\n  state.orgName = org.name;\n  state.apiUrl = isomorph_default.getEnv(\"BRAINTRUST_API_URL\") ?? org.api_url;\n  state.proxyUrl = isomorph_default.getEnv(\"BRAINTRUST_PROXY_URL\") ?? org.proxy_url;\n  state.gitMetadataSettings = org.git_metadata || void 0;\n}\nfunction selectLoginOrg(orgInfo, orgName) {\n  if (orgInfo.length === 0) {\n    throw new LoginInvalidOrgError(\n      \"This user is not part of any organizations.\"\n    );\n  }\n  for (const org of orgInfo) {\n    if (orgName === void 0 || org.name === orgName) {\n      return org;\n    }\n  }\n  throw new LoginInvalidOrgError(\n    `Organization ${orgName} not found. Must be one of ${orgInfo.map((org) => org.name).join(\", \")}`\n  );\n}\nfunction validateTags(tags) {\n  const seen = /* @__PURE__ */ new Set();\n  for (const tag of tags) {\n    if (typeof tag !== \"string\") {\n      throw new Error(\"tags must be strings\");\n    }\n    if (seen.has(tag)) {\n      throw new Error(`duplicate tag: ${tag}`);\n    }\n    seen.add(tag);\n  }\n}\nfunction validateAndSanitizeExperimentLogPartialArgs(event) {\n  if (event.scores) {\n    if (Array.isArray(event.scores)) {\n      throw new Error(\"scores must be an object, not an array\");\n    }\n    for (const [name, rawScore] of Object.entries(event.scores)) {\n      let score = rawScore;\n      if (typeof name !== \"string\") {\n        throw new Error(\"score names must be strings\");\n      }\n      if (score === null || score === void 0) {\n        continue;\n      }\n      if (typeof score === \"boolean\") {\n        score = score ? 1 : 0;\n        event.scores[name] = score;\n      }\n      if (typeof score !== \"number\") {\n        throw new Error(\"score values must be numbers\");\n      }\n      if (score < 0 || score > 1) {\n        throw new Error(\"score values must be between 0 and 1\");\n      }\n    }\n  }\n  if (event.metadata) {\n    for (const key of Object.keys(event.metadata)) {\n      if (typeof key !== \"string\") {\n        throw new Error(\"metadata keys must be strings\");\n      }\n    }\n  }\n  if (event.metrics) {\n    for (const [key, value] of Object.entries(event.metrics)) {\n      if (typeof key !== \"string\") {\n        throw new Error(\"metric keys must be strings\");\n      }\n      if (value !== void 0 && typeof value !== \"number\") {\n        throw new Error(\"metric values must be numbers\");\n      }\n    }\n  }\n  if (\"input\" in event && event.input && \"inputs\" in event && event.inputs) {\n    throw new Error(\n      \"Only one of input or inputs (deprecated) can be specified. Prefer input.\"\n    );\n  }\n  if (\"tags\" in event && event.tags) {\n    validateTags(event.tags);\n  }\n  if (\"inputs\" in event) {\n    const { inputs, ...rest } = event;\n    return { input: inputs, ...rest };\n  } else {\n    return { ...event };\n  }\n}\nfunction deepCopyEvent(event) {\n  const attachments = [];\n  const ATTACHMENT_INDEX_KEY = \"_bt_internal_saved_attachment_idx\";\n  const ATTACHMENT_MARKER_KEY = \"_bt_internal_saved_attachment_marker\";\n  const attachmentMarker = ++deepCopyEventMarkerCounter;\n  const serialized = JSON.stringify(event, (_k, v) => {\n    if (v instanceof Error) {\n      return v.message;\n    } else if (v instanceof SpanImpl || v instanceof NoopSpan) {\n      return `<span>`;\n    } else if (v instanceof Experiment2) {\n      return `<experiment>`;\n    } else if (v instanceof Dataset2) {\n      return `<dataset>`;\n    } else if (v instanceof Logger) {\n      return `<logger>`;\n    } else if (v instanceof BaseAttachment) {\n      const idx = attachments.push(v);\n      return {\n        [ATTACHMENT_INDEX_KEY]: idx - 1,\n        [ATTACHMENT_MARKER_KEY]: attachmentMarker\n      };\n    } else if (v instanceof ReadonlyAttachment) {\n      return v.reference;\n    }\n    return v;\n  });\n  const x = JSON.parse(serialized, (_k, v) => {\n    if (isDeepCopyAttachmentPlaceholder(v, attachmentMarker)) {\n      return attachments[v[ATTACHMENT_INDEX_KEY]];\n    }\n    return v;\n  });\n  return x;\n}\nvar deepCopyEventMarkerCounter = 0;\nfunction isDeepCopyAttachmentPlaceholder(value, attachmentMarker) {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const record = value;\n  if (!Object.hasOwn(record, \"_bt_internal_saved_attachment_idx\") || !Object.hasOwn(record, \"_bt_internal_saved_attachment_marker\")) {\n    return false;\n  }\n  if (Object.keys(record).length !== 2) {\n    return false;\n  }\n  const attachmentIndex = record._bt_internal_saved_attachment_idx;\n  const marker = record._bt_internal_saved_attachment_marker;\n  return Number.isInteger(attachmentIndex) && attachmentIndex >= 0 && marker === attachmentMarker;\n}\nfunction extractAttachments(event, attachments) {\n  for (const [key, value] of Object.entries(event)) {\n    if (!value) {\n      continue;\n    }\n    if (value instanceof BaseAttachment) {\n      attachments.push(value);\n      event[key] = value.reference;\n      continue;\n    }\n    if (value?.type === BRAINTRUST_ATTACHMENT && value.key && !value.uploader) {\n      continue;\n    }\n    if (value?.reference?.type === BRAINTRUST_ATTACHMENT && value?.uploader) {\n      const attachment = new Attachment({\n        data: value.dataDebugString,\n        filename: value.reference.filename,\n        contentType: value.reference.content_type\n      });\n      attachments.push(attachment);\n      event[key] = attachment.reference;\n      continue;\n    }\n    if (!(value instanceof Object)) {\n      continue;\n    }\n    extractAttachments(value, attachments);\n  }\n}\nfunction enrichAttachments(event, state) {\n  for (const [key, value] of Object.entries(event)) {\n    const parsedValue = AttachmentReference.safeParse(value);\n    if (parsedValue.success) {\n      event[key] = new ReadonlyAttachment(parsedValue.data, state);\n      continue;\n    }\n    if (!(value instanceof Object)) {\n      continue;\n    }\n    enrichAttachments(value, state);\n  }\n  return event;\n}\nasync function resolveAttachmentsToBase64(event, state) {\n  for (const [key, value] of Object.entries(event)) {\n    if (value instanceof ReadonlyAttachment) {\n      event[key] = await value.asBase64Url();\n      continue;\n    }\n    if (!(value instanceof Object)) {\n      continue;\n    }\n    await resolveAttachmentsToBase64(value, state);\n  }\n  return event;\n}\nfunction validateAndSanitizeExperimentLogFullArgs(event, hasDataset) {\n  if (\"input\" in event && !isEmpty2(event.input) && \"inputs\" in event && !isEmpty2(event.inputs) || !(\"input\" in event) && !(\"inputs\" in event)) {\n    throw new Error(\n      \"Exactly one of input or inputs (deprecated) must be specified. Prefer input.\"\n    );\n  }\n  if (isEmpty2(event.output)) {\n    throw new Error(\"output must be specified\");\n  }\n  if (isEmpty2(event.scores)) {\n    throw new Error(\"scores must be specified\");\n  }\n  if (hasDataset && event.datasetRecordId === void 0) {\n    throw new Error(\"datasetRecordId must be specified when using a dataset\");\n  } else if (!hasDataset && event.datasetRecordId !== void 0) {\n    throw new Error(\n      \"datasetRecordId cannot be specified when not using a dataset\"\n    );\n  }\n  return event;\n}\nvar DEFAULT_FETCH_BATCH_SIZE = 1e3;\nvar MAX_BTQL_ITERATIONS = 1e4;\nvar ObjectFetcher = class {\n  constructor(objectType, pinnedVersion, mutateRecord, _internal_btql, _internalBrainstoreRealtime = true) {\n    this.objectType = objectType;\n    this.pinnedVersion = pinnedVersion;\n    this.mutateRecord = mutateRecord;\n    this._internal_btql = _internal_btql;\n    this._internalBrainstoreRealtime = _internalBrainstoreRealtime;\n  }\n  objectType;\n  pinnedVersion;\n  mutateRecord;\n  _internal_btql;\n  _internalBrainstoreRealtime;\n  _fetchedData = void 0;\n  get id() {\n    throw new Error(\"ObjectFetcher subclasses must have an 'id' attribute\");\n  }\n  async getState() {\n    throw new Error(\"ObjectFetcher subclasses must have a 'getState' method\");\n  }\n  getPinnedVersion() {\n    return this.pinnedVersion;\n  }\n  setPinnedVersion(pinnedVersion) {\n    this.pinnedVersion = pinnedVersion;\n  }\n  getInternalBtql() {\n    return this._internal_btql;\n  }\n  async *fetchRecordsFromApi(batchSize) {\n    const state = await this.getState();\n    const objectId = await this.id;\n    const batchLimit = batchSize ?? DEFAULT_FETCH_BATCH_SIZE;\n    const internalLimit = getInternalBtqlLimit(this._internal_btql);\n    let remainingLimit = internalLimit;\n    const internalBtqlWithoutReservedQueryKeys = Object.fromEntries(\n      Object.entries(this._internal_btql ?? {}).filter(\n        ([key]) => key !== \"cursor\" && key !== \"limit\" && key !== \"select\" && key !== \"from\"\n      )\n    );\n    let cursor = void 0;\n    let iterations = 0;\n    while (true) {\n      if (remainingLimit !== void 0 && remainingLimit <= 0) {\n        return;\n      }\n      const limit = remainingLimit === void 0 ? batchLimit : Math.min(batchLimit, remainingLimit);\n      const resp = await state.apiConn().post(\n        `btql`,\n        {\n          query: {\n            select: [\n              {\n                op: \"star\"\n              }\n            ],\n            from: {\n              op: \"function\",\n              name: {\n                op: \"ident\",\n                name: [this.objectType]\n              },\n              args: [\n                {\n                  op: \"literal\",\n                  value: objectId\n                }\n              ]\n            },\n            cursor,\n            limit,\n            ...internalBtqlWithoutReservedQueryKeys\n          },\n          use_columnstore: false,\n          brainstore_realtime: this._internalBrainstoreRealtime,\n          query_source: `js_sdk_object_fetcher_${this.objectType}`,\n          ...this.pinnedVersion !== void 0 ? {\n            version: this.pinnedVersion\n          } : {}\n        },\n        { headers: { \"Accept-Encoding\": \"gzip\" } },\n        BTQL_HTTP_RETRIES\n      );\n      const respJson = await resp.json();\n      const mutate = this.mutateRecord;\n      for (const record of respJson.data ?? []) {\n        if (remainingLimit !== void 0 && remainingLimit <= 0) {\n          return;\n        }\n        const mutatedRecord = mutate ? mutate(record) : record;\n        if (remainingLimit !== void 0) {\n          remainingLimit--;\n        }\n        yield mutatedRecord;\n      }\n      if (!respJson.cursor) {\n        break;\n      }\n      cursor = respJson.cursor;\n      iterations++;\n      if (iterations > MAX_BTQL_ITERATIONS) {\n        throw new Error(\"Too many BTQL iterations\");\n      }\n    }\n  }\n  /**\n   * Fetch all records from the object.\n   *\n   * @param options Optional parameters for fetching.\n   * @param options.batchSize The number of records to fetch per request. Defaults to 1000.\n   * @returns An async generator of records.\n   */\n  async *fetch(options) {\n    if (this._fetchedData !== void 0) {\n      for (const record of this._fetchedData) {\n        yield record;\n      }\n      return;\n    }\n    for await (const record of this.fetchRecordsFromApi(options?.batchSize)) {\n      yield record;\n    }\n  }\n  [Symbol.asyncIterator]() {\n    return this.fetch();\n  }\n  async fetchedData(options) {\n    if (this._fetchedData === void 0) {\n      const data = [];\n      for await (const record of this.fetchRecordsFromApi(options?.batchSize)) {\n        data.push(record);\n      }\n      this._fetchedData = data;\n    }\n    return this._fetchedData || [];\n  }\n  clearCache() {\n    this._fetchedData = void 0;\n  }\n  async version(options) {\n    if (this.pinnedVersion !== void 0) {\n      return this.pinnedVersion;\n    } else {\n      let maxVersion = void 0;\n      for await (const record of this.fetch(options)) {\n        const xactId = String(record[TRANSACTION_ID_FIELD] ?? \"0\");\n        if (maxVersion === void 0 || xactId > maxVersion) {\n          maxVersion = xactId;\n        }\n      }\n      return maxVersion;\n    }\n  }\n};\nvar Experiment2 = class extends ObjectFetcher {\n  lazyMetadata;\n  dataset;\n  lastStartTime;\n  lazyId;\n  calledStartSpan;\n  state;\n  // For type identification.\n  kind = \"experiment\";\n  constructor(state, lazyMetadata, dataset) {\n    super(\"experiment\", void 0, (r) => enrichAttachments(r, state));\n    this.lazyMetadata = lazyMetadata;\n    this.dataset = dataset;\n    this.lastStartTime = getCurrentUnixTimestamp();\n    this.lazyId = new LazyValue(async () => await this.id);\n    this.calledStartSpan = false;\n    this.state = state;\n  }\n  get id() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).experiment.id;\n    })();\n  }\n  get loggingState() {\n    return this.state;\n  }\n  /**\n   * Wait for the experiment ID to be resolved. This is useful for ensuring the ID\n   * is available synchronously in child spans (for OTEL parent attributes).\n   * @internal\n   */\n  async _waitForId() {\n    await this.lazyId.get().catch(() => {\n    });\n  }\n  get name() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).experiment.name;\n    })();\n  }\n  get project() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).project;\n    })();\n  }\n  async _getBaseExperimentId() {\n    const baseExperimentId = (await this.lazyMetadata.get()).experiment.fullInfo[\"base_exp_id\"];\n    return typeof baseExperimentId === \"string\" && baseExperimentId ? baseExperimentId : void 0;\n  }\n  parentObjectType() {\n    return 1 /* EXPERIMENT */;\n  }\n  async getState() {\n    await this.lazyMetadata.get();\n    return this.state;\n  }\n  /**\n   * Log a single event to the experiment. The event will be batched and uploaded behind the scenes.\n   *\n   * @param event The event to log.\n   * @param event.input: The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on, Braintrust will use the `input` to know whether two test cases are the same between experiments, so they should not contain experiment-specific state. A simple rule of thumb is that if you run the same experiment twice, the `input` should be identical.\n   * @param event.output: The output of your application, including post-processing (an arbitrary, JSON serializable object), that allows you to determine whether the result is correct or not. For example, in an app that generates SQL queries, the `output` should be the _result_ of the SQL query generated by the model, not the query itself, because there may be multiple valid queries that answer a single question.\n   * @param event.expected: (Optional) The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to determine if your `output` value is correct or not. Braintrust currently does not compare `output` to `expected` for you, since there are so many different ways to do that correctly. Instead, these values are just used to help you navigate your experiments while digging into analyses. However, we may later use these values to re-score outputs or fine-tune your models.\n   * @param event.error: (Optional) The error that occurred, if any. If you use tracing to run an experiment, errors are automatically logged when your code throws an exception.\n   * @param event.scores: A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals that help you determine how accurate the outputs are compared to what you expect and diagnose failures. For example, a summarization app might have one score that tells you how accurate the summary is, and another that measures the word similarity between the generated and grouth truth summary. The word similarity score could help you determine whether the summarization was covering similar concepts or not. You can use these scores to help you sort, filter, and compare experiments.\n   * @param event.metadata: (Optional) a dictionary with additional data about the test example, model outputs, or just about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any JSON-serializable type, but its keys must be strings.\n   * @param event.metrics: (Optional) a dictionary of metrics to log. The following keys are populated automatically: \"start\", \"end\".\n   * @param event.id: (Optional) a unique identifier for the event. If you don't provide one, BrainTrust will generate one for you.\n   * @param event.dataset_record_id: (Optional) the id of the dataset record that this event is associated with. This field is required if and only if the experiment is associated with a dataset. This field is unused and will be removed in a future version.\n   * @param options Additional logging options\n   * @param options.allowConcurrentWithSpans in rare cases where you need to log at the top level separately from spans on the experiment elsewhere, set this to true.\n   * @returns The `id` of the logged event.\n   */\n  log(event, options) {\n    if (this.calledStartSpan && !options?.allowConcurrentWithSpans) {\n      throw new Error(\n        \"Cannot run toplevel `log` method while using spans. To log to the span, call `experiment.traced` and then log with `span.log`\"\n      );\n    }\n    event = validateAndSanitizeExperimentLogFullArgs(event, !!this.dataset);\n    const span = this.startSpanImpl({ startTime: this.lastStartTime, event });\n    this.lastStartTime = span.end();\n    return span.id;\n  }\n  /**\n   * Create a new toplevel span underneath the experiment. The name defaults to \"root\".\n   *\n   * See {@link Span.traced} for full details.\n   */\n  traced(callback, args) {\n    const { setCurrent, ...argsRest } = args ?? {};\n    const span = this.startSpan(argsRest);\n    const ret = runCatchFinally(\n      () => {\n        if (setCurrent ?? true) {\n          return withCurrent(span, callback);\n        } else {\n          return callback(span);\n        }\n      },\n      (e) => {\n        logError(span, e);\n        throw e;\n      },\n      () => span.end()\n    );\n    return ret;\n  }\n  /**\n   * Lower-level alternative to `traced`. This allows you to start a span yourself, and can be useful in situations\n   * where you cannot use callbacks. However, spans started with `startSpan` will not be marked as the \"current span\",\n   * so `currentSpan()` and `traced()` will be no-ops. If you want to mark a span as current, use `traced` instead.\n   *\n   * See {@link traced} for full details.\n   */\n  startSpan(args) {\n    this.calledStartSpan = true;\n    return this.startSpanImpl(args);\n  }\n  startSpanImpl(args) {\n    return new SpanImpl({\n      ...args,\n      // Sometimes `args` gets passed directly into this function, and it contains an undefined value for `state`.\n      // To ensure that we always use this experiment's state, we override the `state` argument no matter what.\n      state: this.state,\n      ...startSpanParentArgs({\n        state: this.state,\n        parent: args?.parent,\n        parentObjectType: this.parentObjectType(),\n        parentObjectId: this.lazyId,\n        parentComputeObjectMetadataArgs: void 0,\n        parentSpanIds: void 0,\n        propagatedEvent: args?.propagatedEvent\n      }),\n      defaultRootType: \"eval\" /* EVAL */\n    });\n  }\n  async fetchBaseExperiment() {\n    const state = await this.getState();\n    const conn = state.appConn();\n    try {\n      const resp = await conn.post(\"/api/base_experiment/get_id\", {\n        id: await this.id\n      });\n      const base = await resp.json();\n      return {\n        id: base[\"base_exp_id\"],\n        name: base[\"base_exp_name\"]\n      };\n    } catch (e) {\n      if (e instanceof FailedHTTPResponse && e.status === 400) {\n        return null;\n      } else {\n        throw e;\n      }\n    }\n  }\n  /**\n   * Summarize the experiment, including the scores (compared to the closest reference experiment) and metadata.\n   *\n   * @param options Options for summarizing the experiment.\n   * @param options.summarizeScores Whether to summarize the scores. If False, only the metadata will be returned.\n   * @param options.comparisonExperimentId The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.\n   * @returns A summary of the experiment, including the scores (compared to the closest reference experiment) and metadata.\n   */\n  async summarize(options = {}) {\n    const {\n      summarizeScores = true,\n      comparisonExperimentId: comparisonExperimentIdOpt\n    } = options || {};\n    let comparisonExperimentId = comparisonExperimentIdOpt;\n    const state = await this.getState();\n    const projectUrl = `${state.appPublicUrl}/app/${encodeURIComponent(\n      state.orgName\n    )}/p/${encodeURIComponent((await this.project).name)}`;\n    const experimentUrl = `${projectUrl}/experiments/${encodeURIComponent(\n      await this.name\n    )}`;\n    let scores = void 0;\n    let metrics = void 0;\n    let comparisonExperimentName = void 0;\n    if (summarizeScores) {\n      await this.flush();\n      if (comparisonExperimentId === void 0) {\n        const baseExperiment = await this.fetchBaseExperiment();\n        if (baseExperiment !== null) {\n          comparisonExperimentId = baseExperiment.id;\n          comparisonExperimentName = baseExperiment.name;\n        }\n      } else {\n        try {\n          const comparisonExperiment = await state.apiConn().get_json(`v1/experiment/${comparisonExperimentId}`);\n          if (typeof comparisonExperiment[\"name\"] === \"string\") {\n            comparisonExperimentName = comparisonExperiment[\"name\"];\n          }\n        } catch {\n        }\n      }\n      try {\n        const results = await state.apiConn().get_json(\n          \"/experiment-comparison2\",\n          {\n            experiment_id: await this.id,\n            base_experiment_id: comparisonExperimentId\n          },\n          3\n        );\n        scores = results[\"scores\"];\n        metrics = results[\"metrics\"];\n      } catch (e) {\n        debugLogger.forState(state).warn(\n          `Failed to fetch experiment scores and metrics: ${e}\n\nView complete results in Braintrust or run experiment.summarize() again.`\n        );\n        scores = {};\n        metrics = {};\n      }\n    }\n    return {\n      projectName: (await this.project).name,\n      experimentName: await this.name,\n      projectId: (await this.project).id,\n      experimentId: await this.id,\n      projectUrl,\n      experimentUrl,\n      comparisonExperimentName,\n      scores: scores ?? {},\n      metrics: metrics ?? {}\n    };\n  }\n  /**\n   * Log feedback to an event in the experiment. Feedback is used to save feedback scores, set an expected value, or add a comment.\n   *\n   * @param event\n   * @param event.id The id of the event to log feedback for. This is the `id` returned by `log` or accessible as the `id` field of a span.\n   * @param event.scores (Optional) a dictionary of numeric values (between 0 and 1) to log. These scores will be merged into the existing scores for the event.\n   * @param event.expected (Optional) the ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to determine if your `output` value is correct or not.\n   * @param event.comment (Optional) an optional comment string to log about the event.\n   * @param event.metadata (Optional) a dictionary with additional data about the feedback. If you have a `user_id`, you can log it here and access it in the Braintrust UI. Note, this metadata does not correspond to the main event itself, but rather the audit log attached to the event.\n   * @param event.source (Optional) the source of the feedback. Must be one of \"external\" (default), \"app\", or \"api\".\n   */\n  logFeedback(event) {\n    logFeedbackImpl(this.state, this.parentObjectType(), this.lazyId, event);\n  }\n  /**\n   * Update a span in the experiment using its id. It is important that you only update a span once the original span has been fully written and flushed,\n   * since otherwise updates to the span may conflict with the original span.\n   *\n   * @param event The event data to update the span with. Must include `id`. See {@link Experiment.log} for a full list of valid fields.\n   */\n  updateSpan(event) {\n    const { id, root_span_id, span_id, ...eventRest } = event;\n    if (!id) {\n      throw new Error(\"Span id is required to update a span\");\n    }\n    updateSpanImpl({\n      state: this.state,\n      parentObjectType: this.parentObjectType(),\n      parentObjectId: this.lazyId,\n      id,\n      root_span_id,\n      span_id,\n      event: eventRest\n    });\n  }\n  /**\n   * Return a serialized representation of the experiment that can be used to start subspans in other places.\n   *\n   * See {@link Span.startSpan} for more details.\n   */\n  async export() {\n    return new (getSpanComponentsClass())({\n      object_type: this.parentObjectType(),\n      object_id: await this.id\n    }).toStr();\n  }\n  /**\n   * Return this experiment's Braintrust parent string (`experiment_id:<id>`) for\n   * the `braintrust.parent` baggage entry, or undefined when it cannot be\n   * determined synchronously.\n   */\n  _getOtelParent() {\n    const id = this.lazyId.getSync().value;\n    return id ? `experiment_id:${id}` : void 0;\n  }\n  /**\n   * Flush any pending rows to the server.\n   */\n  async flush() {\n    return await this.state.bgLogger().flush();\n  }\n  /**\n   * @deprecated This function is deprecated. You can simply remove it from your code.\n   */\n  async close() {\n    debugLogger.forState(this.state).warn(\n      \"close is deprecated and will be removed in a future version of braintrust. It is now a no-op and can be removed\"\n    );\n    return this.id;\n  }\n};\nvar ReadonlyExperiment = class extends ObjectFetcher {\n  constructor(state, lazyMetadata) {\n    super(\"experiment\", void 0, (r) => enrichAttachments(r, state));\n    this.state = state;\n    this.lazyMetadata = lazyMetadata;\n  }\n  state;\n  lazyMetadata;\n  get id() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).experiment.id;\n    })();\n  }\n  get name() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).experiment.name;\n    })();\n  }\n  get loggingState() {\n    return this.state;\n  }\n  async getState() {\n    await this.lazyMetadata.get();\n    return this.state;\n  }\n  async *asDataset(options) {\n    const records = this.fetch(options);\n    for await (const record of records) {\n      const isRoot = record.is_root ?? record.root_span_id === record.span_id;\n      if (!isRoot) {\n        continue;\n      }\n      const { output, expected: expectedRecord, metadata } = record;\n      const expected = expectedRecord ?? output;\n      yield {\n        input: record.input,\n        tags: record.tags,\n        expected,\n        metadata\n      };\n    }\n  }\n};\nvar executionCounter = 0;\nfunction newId() {\n  return (0, import_uuid2.v4)();\n}\nfunction _resolveSpanIds(spanId, parentSpanIds, lookupSpanParent, idGenerator, contextManager) {\n  const resolvedSpanId = spanId ?? idGenerator.getSpanId();\n  if (parentSpanIds) {\n    return {\n      spanId: resolvedSpanId,\n      rootSpanId: parentSpanIds.rootSpanId,\n      spanParents: \"parentSpanIds\" in parentSpanIds ? parentSpanIds.parentSpanIds : [parentSpanIds.spanId]\n    };\n  }\n  if (lookupSpanParent) {\n    const parentInfo = contextManager.getParentSpanIds();\n    if (parentInfo) {\n      return {\n        spanId: resolvedSpanId,\n        rootSpanId: parentInfo.rootSpanId,\n        spanParents: parentInfo.spanParents\n      };\n    }\n  }\n  let resolvedRootSpanId;\n  if (idGenerator.shareRootSpanId()) {\n    resolvedRootSpanId = resolvedSpanId;\n  } else {\n    resolvedRootSpanId = idGenerator.getTraceId();\n  }\n  return {\n    spanId: resolvedSpanId,\n    rootSpanId: resolvedRootSpanId,\n    spanParents: void 0\n  };\n}\nvar SpanImpl = class _SpanImpl {\n  _state;\n  isMerge;\n  loggedEndTime;\n  propagatedEvent;\n  // For internal use only.\n  parentObjectType;\n  parentObjectId;\n  parentComputeObjectMetadataArgs;\n  _id;\n  _spanId;\n  _rootSpanId;\n  _spanParents;\n  // Inbound W3C trace-context state (tracestate + raw traceparent flags) to\n  // forward on outbound propagation. Captured at the span that received it (via\n  // extractTraceContextFromHeaders) and inherited by all subspans, so that any\n  // inject() within the trace re-emits the upstream state unchanged, per the W3C\n  // Trace Context spec. Not interpreted.\n  _propagatedState;\n  kind = \"span\";\n  constructor(args) {\n    this._state = args.state;\n    this._propagatedState = args.propagatedState;\n    const instrumentationName = getSpanInstrumentationName(args) ?? INSTRUMENTATION_NAMES.BRAINTRUST_JS_LOGGER;\n    const spanAttributes = args.spanAttributes ?? {};\n    const rawEvent = args.event ?? {};\n    const type = args.type ?? (args.parentSpanIds ? void 0 : args.defaultRootType);\n    this.loggedEndTime = void 0;\n    this.parentObjectType = args.parentObjectType;\n    this.parentObjectId = args.parentObjectId;\n    this.parentComputeObjectMetadataArgs = args.parentComputeObjectMetadataArgs;\n    this.propagatedEvent = args.propagatedEvent;\n    if (this.propagatedEvent) {\n      mergeDicts(rawEvent, this.propagatedEvent);\n    }\n    const { id: eventId, ...event } = rawEvent;\n    const callerLocation = isomorph_default.getCallerLocation();\n    const name = (() => {\n      if (args.name) return args.name;\n      if (!args.parentSpanIds) return \"root\";\n      if (callerLocation) {\n        const pathComponents = callerLocation.caller_filename.split(\"/\");\n        const filename = pathComponents[pathComponents.length - 1];\n        return [callerLocation.caller_functionname].concat(\n          filename ? [`${filename}:${callerLocation.caller_lineno}`] : []\n        ).join(\":\");\n      }\n      return \"subspan\";\n    })();\n    const internalData = {\n      metrics: {\n        start: args.startTime ?? getCurrentUnixTimestamp()\n      },\n      context: mergeSpanOriginContext(\n        { ...callerLocation, ...args[INTERNAL_SPAN_CONTEXT] },\n        instrumentationName,\n        this._state.spanOriginEnvironment\n      ),\n      span_attributes: {\n        name,\n        type,\n        ...spanAttributes,\n        exec_counter: executionCounter++\n      },\n      created: (/* @__PURE__ */ new Date()).toISOString()\n    };\n    this._id = eventId ?? this._state.idGenerator.getSpanId();\n    const resolvedIds = _resolveSpanIds(\n      args.spanId,\n      args.parentSpanIds,\n      true,\n      // Always lookup span parent from context manager unless explicit parent provided\n      this._state.idGenerator,\n      this._state.contextManager\n    );\n    this._spanId = resolvedIds.spanId;\n    this._rootSpanId = resolvedIds.rootSpanId;\n    this._spanParents = resolvedIds.spanParents;\n    this.isMerge = args[INITIAL_SPAN_WRITE_AS_MERGE] === true;\n    if (!args[RESUME_SPAN_WITHOUT_INITIAL_WRITE]) {\n      this.logInternal({ event, internalData });\n    }\n    this.isMerge = true;\n  }\n  getParentInfo() {\n    return {\n      objectType: this.parentObjectType,\n      objectId: this.parentObjectId,\n      computeObjectMetadataArgs: this.parentComputeObjectMetadataArgs && {\n        ...this.parentComputeObjectMetadataArgs\n      }\n    };\n  }\n  get id() {\n    return this._id;\n  }\n  get spanId() {\n    return this._spanId;\n  }\n  get rootSpanId() {\n    return this._rootSpanId;\n  }\n  get spanParents() {\n    return this._spanParents ?? [];\n  }\n  setAttributes(args) {\n    this.logInternal({ internalData: { span_attributes: args } });\n  }\n  setSpanParents(parents) {\n    this.logInternal({ internalData: { span_parents: parents } });\n  }\n  log(event) {\n    this.logInternal({ event });\n  }\n  logInternal({\n    event,\n    internalData\n  }) {\n    const [serializableInternalData, lazyInternalData] = splitLoggingData({\n      event,\n      internalData\n    });\n    const partialRecord = deepCopyEvent({\n      id: this.id,\n      span_id: this._spanId,\n      root_span_id: this._rootSpanId,\n      span_parents: this._spanParents,\n      ...serializableInternalData,\n      [IS_MERGE_FIELD]: this.isMerge\n    });\n    if (typeof partialRecord.metrics?.end === \"number\") {\n      this.loggedEndTime = partialRecord.metrics.end;\n    }\n    if (this.parentObjectType === 1 /* EXPERIMENT */) {\n      const cachedSpan = {\n        input: partialRecord.input,\n        output: partialRecord.output,\n        expected: partialRecord.expected,\n        error: partialRecord.error,\n        scores: partialRecord.scores,\n        metrics: partialRecord.metrics,\n        metadata: partialRecord.metadata,\n        tags: partialRecord.tags,\n        span_id: this._spanId,\n        span_parents: this._spanParents,\n        is_root: !this._spanParents || this._spanParents.length === 0,\n        span_attributes: partialRecord.span_attributes\n      };\n      this._state.spanCache.queueWrite(\n        this._rootSpanId,\n        this._spanId,\n        cachedSpan\n      );\n    }\n    const computeRecord = async () => {\n      const record = {\n        ...partialRecord,\n        ...Object.fromEntries(\n          await Promise.all(\n            Object.entries(lazyInternalData).map(async ([key, value]) => [\n              key,\n              await value.get()\n            ])\n          )\n        ),\n        ...new SpanComponentsV3({\n          object_type: this.parentObjectType,\n          object_id: await this.parentObjectId.get()\n        }).objectIdFields()\n      };\n      return customizeSpanExport(record);\n    };\n    this._state.bgLogger().log([new LazyValue(computeRecord)]);\n  }\n  logFeedback(event) {\n    logFeedbackImpl(this._state, this.parentObjectType, this.parentObjectId, {\n      ...event,\n      id: this.id\n    });\n  }\n  traced(callback, args) {\n    const { setCurrent, ...argsRest } = args ?? {};\n    const span = this.startSpan(argsRest);\n    return runCatchFinally(\n      () => {\n        if (setCurrent ?? true) {\n          return withCurrent(span, callback);\n        } else {\n          return callback(span);\n        }\n      },\n      (e) => {\n        logError(span, e);\n        throw e;\n      },\n      () => span.end()\n    );\n  }\n  startSpan(args) {\n    const parentSpanIds = args?.parent ? void 0 : { spanId: this._spanId, rootSpanId: this._rootSpanId };\n    return new _SpanImpl({\n      state: this._state,\n      ...args,\n      ...startSpanParentArgs({\n        state: this._state,\n        parent: args?.parent,\n        parentObjectType: this.parentObjectType,\n        parentObjectId: this.parentObjectId,\n        parentComputeObjectMetadataArgs: this.parentComputeObjectMetadataArgs,\n        parentSpanIds,\n        propagatedEvent: args?.propagatedEvent ?? this.propagatedEvent,\n        propagatedState: this._propagatedState\n      })\n    });\n  }\n  startSpanWithParents(spanId, spanParents, args) {\n    const parentSpanIds = {\n      parentSpanIds: spanParents,\n      rootSpanId: this._rootSpanId\n    };\n    return new _SpanImpl({\n      state: this._state,\n      ...args,\n      ...startSpanParentArgs({\n        state: this._state,\n        parent: args?.parent,\n        parentObjectType: this.parentObjectType,\n        parentObjectId: this.parentObjectId,\n        parentComputeObjectMetadataArgs: this.parentComputeObjectMetadataArgs,\n        parentSpanIds,\n        propagatedEvent: args?.propagatedEvent ?? this.propagatedEvent,\n        propagatedState: this._propagatedState\n      }),\n      spanId\n    });\n  }\n  end(args) {\n    let endTime;\n    let internalData = {};\n    if (!this.loggedEndTime) {\n      endTime = args?.endTime ?? getCurrentUnixTimestamp();\n      internalData = { metrics: { end: endTime } };\n    } else {\n      endTime = this.loggedEndTime;\n    }\n    this.logInternal({ internalData });\n    return endTime;\n  }\n  async export() {\n    this._state.spanCache.disable();\n    return new (getSpanComponentsClass())({\n      object_type: this.parentObjectType,\n      ...this.parentComputeObjectMetadataArgs && !this.parentObjectId.hasSucceeded ? { compute_object_metadata_args: this.parentComputeObjectMetadataArgs } : { object_id: await this.parentObjectId.get() },\n      row_id: this.id,\n      span_id: this._spanId,\n      root_span_id: this._rootSpanId,\n      propagated_event: this.propagatedEvent\n    }).toStr();\n  }\n  /**\n   * Return this span's Braintrust parent string (`project_id:<id>`,\n   * `project_name:<name>`, or `experiment_id:<id>`) for the `braintrust.parent`\n   * baggage entry, or undefined when it cannot be determined synchronously.\n   */\n  _getOtelParent() {\n    if (this.parentObjectType === 2 /* PROJECT_LOGS */) {\n      const id = this.parentComputeObjectMetadataArgs?.project_id || this.parentObjectId.getSync().value;\n      const name = this.parentComputeObjectMetadataArgs?.project_name;\n      if (id) {\n        return `project_id:${id}`;\n      } else if (name) {\n        return `project_name:${name}`;\n      }\n    } else if (this.parentObjectType === 1 /* EXPERIMENT */) {\n      const id = this.parentComputeObjectMetadataArgs?.experiment_id || this.parentObjectId.getSync().value;\n      if (id) {\n        return `experiment_id:${id}`;\n      }\n    }\n    return void 0;\n  }\n  inject(carrier) {\n    const resolvedCarrier = carrier ?? {};\n    try {\n      const braintrustParent = this._getOtelParent() ?? this._propagatedState?.braintrustParent;\n      if (!braintrustParent) {\n        debugLogger.forState(this._state).warn(\n          \"Injecting trace context without braintrust.parent because the span's destination is not available yet. The receiver will start a new local trace instead of continuing this one.\"\n        );\n      }\n      _injectIntoCarrier(resolvedCarrier, {\n        traceId: this._rootSpanId,\n        spanId: this._spanId,\n        braintrustParent,\n        propagatedState: this._propagatedState\n      });\n    } catch (e) {\n      debugLogger.warn(`Error injecting trace context: ${e}`);\n    }\n    return resolvedCarrier;\n  }\n  async permalink() {\n    return await permalink(await this.export(), {\n      state: this._state\n    });\n  }\n  link() {\n    if (!this.id) {\n      return NOOP_SPAN_PERMALINK;\n    }\n    try {\n      let baseUrl = null;\n      if (this.parentObjectType === 2 /* PROJECT_LOGS */) {\n        const curLogger = this._state.currentLogger;\n        if (curLogger) {\n          baseUrl = curLogger._getLinkBaseUrl();\n        }\n      }\n      if (!baseUrl) {\n        baseUrl = _getLinkBaseUrl(this._state);\n        if (!baseUrl) {\n          throw new Error(\"log-in-or-provide-org-name\");\n        }\n      }\n      return this._link(baseUrl);\n    } catch (e) {\n      return getErrPermlink(e instanceof Error ? e.message : String(e));\n    }\n  }\n  _link(baseUrl) {\n    const args = this.parentComputeObjectMetadataArgs;\n    switch (this.parentObjectType) {\n      case 2 /* PROJECT_LOGS */: {\n        const projectID = args?.project_id || this.parentObjectId.getSync().value;\n        const projectName = args?.project_name;\n        if (projectID) {\n          return `${baseUrl}/object?object_type=project_logs&object_id=${projectID}&id=${this._id}`;\n        } else if (projectName) {\n          return `${baseUrl}/p/${projectName}/logs?oid=${this._id}`;\n        } else {\n          return getErrPermlink(\"provide-project-name-or-id\");\n        }\n      }\n      case 1 /* EXPERIMENT */: {\n        const expID = args?.experiment_id || this.parentObjectId?.getSync()?.value;\n        if (!expID) {\n          return getErrPermlink(\"provide-experiment-id\");\n        } else {\n          return `${baseUrl}/object?object_type=experiment&object_id=${expID}&id=${this._id}`;\n        }\n      }\n      case 3 /* PLAYGROUND_LOGS */: {\n        return NOOP_SPAN_PERMALINK;\n      }\n      default: {\n        const _exhaustive = this.parentObjectType;\n        _exhaustive;\n        return NOOP_SPAN_PERMALINK;\n      }\n    }\n  }\n  async flush() {\n    return await this._state.bgLogger().flush();\n  }\n  close(args) {\n    return this.end(args);\n  }\n  state() {\n    return this._state;\n  }\n  // Custom inspect for Node.js console.log\n  [/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    return `SpanImpl {\n  kind: '${this.kind}',\n  id: '${this.id}',\n  spanId: '${this.spanId}',\n  rootSpanId: '${this.rootSpanId}',\n  spanParents: ${JSON.stringify(this.spanParents)}\n}`;\n  }\n  // Custom toString\n  toString() {\n    return `SpanImpl(id=${this.id}, spanId=${this.spanId})`;\n  }\n};\nfunction splitLoggingData({\n  event,\n  internalData\n}) {\n  const sanitized = validateAndSanitizeExperimentLogPartialArgs(event ?? {});\n  const sanitizedAndInternalData = {};\n  mergeDicts(sanitizedAndInternalData, internalData || {});\n  mergeDicts(sanitizedAndInternalData, sanitized);\n  const serializableInternalData = {};\n  const lazyInternalData = {};\n  for (const [key, value] of Object.entries(sanitizedAndInternalData)) {\n    if (value instanceof BraintrustStream) {\n      const streamCopy = value.copy();\n      lazyInternalData[key] = new LazyValue(async () => {\n        return await new Promise((resolve, reject2) => {\n          streamCopy.toReadableStream().pipeThrough(createFinalValuePassThroughStream(resolve, reject2)).pipeTo(devNullWritableStream());\n        });\n      });\n    } else if (value instanceof ReadableStream) {\n      lazyInternalData[key] = new LazyValue(async () => {\n        return await new Promise((resolve, reject2) => {\n          value.pipeThrough(createFinalValuePassThroughStream(resolve, reject2)).pipeTo(devNullWritableStream());\n        });\n      });\n    } else {\n      serializableInternalData[key] = value;\n    }\n  }\n  return [serializableInternalData, lazyInternalData];\n}\nvar Dataset2 = class extends ObjectFetcher {\n  constructor(state, lazyMetadata, pinnedVersion, legacy, _internal_btql, pinState) {\n    const isLegacyDataset = legacy ?? DEFAULT_IS_LEGACY_DATASET;\n    if (isLegacyDataset) {\n      debugLogger.forState(state).warn(\n        `Records will be fetched from this dataset in the legacy format, with the \"expected\" field renamed to \"output\". Please update your code to use \"expected\", and use \\`braintrust.initDataset()\\` with \\`{ useOutput: false }\\`, which will become the default in a future version of Braintrust.`\n      );\n    }\n    super(\n      \"dataset\",\n      pinnedVersion,\n      (r) => (\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        ensureDatasetRecord(\n          enrichAttachments(r, this.state),\n          isLegacyDataset\n        )\n      ),\n      _internal_btql\n    );\n    this.state = state;\n    void this.__braintrust_dataset_marker;\n    this.lazyMetadata = lazyMetadata;\n    this.lazyPinnedVersion = pinState?.lazyPinnedVersion;\n    this.pinnedEnvironment = pinState?.pinnedEnvironment;\n    this.pinnedSnapshotName = pinState?.pinnedSnapshotName;\n  }\n  state;\n  lazyMetadata;\n  __braintrust_dataset_marker = true;\n  newRecords = 0;\n  lazyPinnedVersion;\n  pinnedEnvironment;\n  pinnedSnapshotName;\n  get id() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).dataset.id;\n    })();\n  }\n  get name() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).dataset.name;\n    })();\n  }\n  get project() {\n    return (async () => {\n      return (await this.lazyMetadata.get()).project;\n    })();\n  }\n  get loggingState() {\n    return this.state;\n  }\n  async toEvalData() {\n    await this.getState();\n    const metadata = await this.lazyMetadata.get();\n    const pinnedVersion = this.getPinnedVersion();\n    const internalBtql = this.getInternalBtql();\n    return {\n      dataset_id: metadata.dataset.id,\n      ...this.pinnedEnvironment !== void 0 ? {\n        dataset_environment: this.pinnedEnvironment\n      } : {},\n      ...this.pinnedEnvironment === void 0 && this.pinnedSnapshotName !== void 0 ? {\n        dataset_snapshot_name: this.pinnedSnapshotName\n      } : {},\n      ...this.pinnedEnvironment === void 0 && this.pinnedSnapshotName === void 0 && pinnedVersion !== void 0 ? {\n        dataset_version: pinnedVersion\n      } : {},\n      ...internalBtql !== void 0 ? { _internal_btql: internalBtql } : {}\n    };\n  }\n  async getState() {\n    await this.lazyMetadata.get();\n    if (this.lazyPinnedVersion !== void 0 && this.getPinnedVersion() === void 0) {\n      this.setPinnedVersion(await this.lazyPinnedVersion.get());\n    }\n    return this.state;\n  }\n  async version(options) {\n    const pinnedVersion = this.getPinnedVersion();\n    if (pinnedVersion !== void 0) {\n      return pinnedVersion;\n    }\n    await this.getState();\n    return await super.version(options);\n  }\n  validateEvent({\n    metadata,\n    expected,\n    output,\n    tags\n  }) {\n    if (metadata !== void 0) {\n      for (const key of Object.keys(metadata)) {\n        if (typeof key !== \"string\") {\n          throw new Error(\"metadata keys must be strings\");\n        }\n      }\n    }\n    if (expected !== void 0 && output !== void 0) {\n      throw new Error(\n        \"Only one of expected or output (deprecated) can be specified. Prefer expected.\"\n      );\n    }\n    if (tags) {\n      validateTags(tags);\n    }\n  }\n  createArgs({\n    id,\n    input,\n    expected,\n    metadata,\n    tags,\n    output,\n    origin,\n    isMerge\n  }) {\n    return new LazyValue(async () => {\n      const dataset_id = await this.id;\n      const expectedValue = expected === void 0 ? output : expected;\n      const args = {\n        id,\n        input,\n        expected: expectedValue,\n        tags,\n        dataset_id,\n        created: !isMerge ? (/* @__PURE__ */ new Date()).toISOString() : void 0,\n        //if we're merging/updating an event we will not add this ts\n        metadata,\n        origin,\n        ...!!isMerge ? {\n          [IS_MERGE_FIELD]: true\n        } : {}\n      };\n      return args;\n    });\n  }\n  /**\n   * Insert a single record to the dataset. The record will be batched and uploaded behind the scenes. If you pass in an `id`,\n   * and a record with that `id` already exists, it will be overwritten (upsert).\n   *\n   * @param event The event to log.\n   * @param event.input The argument that uniquely define an input case (an arbitrary, JSON serializable object).\n   * @param event.expected The output of your application, including post-processing (an arbitrary, JSON serializable object).\n   * @param event.tags (Optional) a list of strings that you can use to filter and group records later.\n   * @param event.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just\n   * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the\n   * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any\n   * JSON-serializable type, but its keys must be strings.\n   * @param event.origin (Optional) a reference to the source object this dataset record was derived from.\n   * @param event.id (Optional) a unique identifier for the event. If you don't provide one, Braintrust will generate one for you.\n   * @param event.output: (Deprecated) The output of your application. Use `expected` instead.\n   * @returns The `id` of the logged record.\n   */\n  insert({\n    input,\n    expected,\n    metadata,\n    tags,\n    id,\n    output,\n    origin\n  }) {\n    this.validateEvent({ metadata, expected, output, tags });\n    const rowId = id || (0, import_uuid2.v4)();\n    const args = this.createArgs(\n      deepCopyEvent({\n        id: rowId,\n        input,\n        expected,\n        metadata,\n        tags,\n        output,\n        origin,\n        isMerge: false\n      })\n    );\n    this.state.bgLogger().log([args]);\n    this.newRecords++;\n    return rowId;\n  }\n  /**\n   * Update fields of a single record in the dataset. The updated fields will be batched and uploaded behind the scenes.\n   * You must pass in an `id` of the record to update. Only the fields provided will be updated; other fields will remain unchanged.\n   *\n   * @param event The fields to update in the record.\n   * @param event.id The unique identifier of the record to update.\n   * @param event.input (Optional) The new input value for the record (an arbitrary, JSON serializable object).\n   * @param event.expected (Optional) The new expected output value for the record (an arbitrary, JSON serializable object).\n   * @param event.tags (Optional) A list of strings to update the tags of the record.\n   * @param event.metadata (Optional) A dictionary to update the metadata of the record. The values in `metadata` can be any\n   * JSON-serializable type, but its keys must be strings.\n   * @returns The `id` of the updated record.\n   */\n  update({\n    input,\n    expected,\n    metadata,\n    tags,\n    id\n  }) {\n    this.validateEvent({ metadata, expected, tags });\n    const args = this.createArgs(\n      deepCopyEvent({\n        id,\n        input,\n        expected,\n        metadata,\n        tags,\n        isMerge: true\n      })\n    );\n    this.state.bgLogger().log([args]);\n    return id;\n  }\n  delete(id) {\n    const args = new LazyValue(async () => ({\n      id,\n      dataset_id: await this.id,\n      created: (/* @__PURE__ */ new Date()).toISOString(),\n      _object_delete: true\n    }));\n    this.state.bgLogger().log([args]);\n    return id;\n  }\n  async createSnapshot({\n    name,\n    description,\n    update\n  }) {\n    await this.flush();\n    const state = await this.getState();\n    const datasetId = await this.id;\n    const currentVersion = this.getPinnedVersion() ?? await (await state.apiConn().get(\"xact-id\")).text();\n    const response = await state.appConn().post_json(\"api/dataset_snapshot/register\", {\n      dataset_id: datasetId,\n      dataset_snapshot_name: name,\n      description,\n      xact_id: currentVersion,\n      update\n    });\n    return datasetSnapshotRegisterResponseSchema.parse(response).dataset_snapshot;\n  }\n  async listSnapshots() {\n    const state = await this.getState();\n    return await getDatasetSnapshots({\n      state,\n      datasetId: await this.id\n    });\n  }\n  async getSnapshot(lookup) {\n    const state = await this.getState();\n    const datasetId = await this.id;\n    return await getDatasetSnapshot({\n      state,\n      datasetId,\n      ...lookup\n    });\n  }\n  async updateSnapshot(snapshotId, {\n    name,\n    description\n  }) {\n    const state = await this.getState();\n    return DatasetSnapshot.parse(\n      await state.appConn().post_json(\"api/dataset_snapshot/patch_id\", {\n        id: snapshotId,\n        name,\n        description\n      })\n    );\n  }\n  async deleteSnapshot(snapshotId) {\n    const state = await this.getState();\n    return DatasetSnapshot.parse(\n      await state.appConn().post_json(\"api/dataset_snapshot/delete_id\", {\n        id: snapshotId\n      })\n    );\n  }\n  async restorePreview({\n    version\n  }) {\n    await this.flush();\n    const state = await this.getState();\n    const datasetId = await this.id;\n    return datasetRestorePreviewResultSchema.parse(\n      await state.apiConn().post_json(`v1/dataset/${datasetId}/restore/preview`, {\n        version\n      })\n    );\n  }\n  async restore({\n    version\n  }) {\n    await this.flush();\n    const state = await this.getState();\n    const datasetId = await this.id;\n    return datasetRestoreResultSchema.parse(\n      await state.apiConn().post_json(`v1/dataset/${datasetId}/restore`, {\n        version\n      })\n    );\n  }\n  /**\n   * Summarize the dataset, including high level metrics about its size and other metadata.\n   * @param summarizeData Whether to summarize the data. If false, only the metadata will be returned.\n   * @returns `DatasetSummary`\n   * @returns A summary of the dataset.\n   */\n  async summarize(options = {}) {\n    const { summarizeData = true } = options || {};\n    await this.flush();\n    const state = await this.getState();\n    const projectUrl = `${state.appPublicUrl}/app/${encodeURIComponent(\n      state.orgName\n    )}/p/${encodeURIComponent((await this.project).name)}`;\n    const datasetUrl = `${projectUrl}/datasets/${encodeURIComponent(\n      await this.name\n    )}`;\n    let dataSummary;\n    if (summarizeData) {\n      const rawDataSummary = import_v38.z.object({\n        total_records: import_v38.z.number()\n      }).parse(\n        await state.apiConn().get_json(\n          \"dataset-summary\",\n          {\n            dataset_id: await this.id\n          },\n          3\n        )\n      );\n      dataSummary = {\n        newRecords: this.newRecords,\n        totalRecords: rawDataSummary.total_records\n      };\n    }\n    return {\n      projectName: (await this.project).name,\n      datasetName: await this.name,\n      projectUrl,\n      datasetUrl,\n      dataSummary\n    };\n  }\n  /**\n   * Flush any pending rows to the server.\n   */\n  async flush() {\n    return await this.state.bgLogger().flush();\n  }\n  /**\n   * @deprecated This function is deprecated. You can simply remove it from your code.\n   */\n  async close() {\n    debugLogger.forState(this.state).warn(\n      \"close is deprecated and will be removed in a future version of braintrust. It is now a no-op and can be removed\"\n    );\n    return this.id;\n  }\n  static isDataset(data) {\n    return typeof data === \"object\" && data !== null && \"__braintrust_dataset_marker\" in data;\n  }\n};\nfunction isAttachmentObject(value) {\n  return BraintrustAttachmentReference.safeParse(value).success || InlineAttachmentReferenceSchema.safeParse(value).success || ExternalAttachmentReference.safeParse(value).success;\n}\nfunction isURL(url) {\n  try {\n    const parsedUrl = new URL(url.trim());\n    return parsedUrl.protocol === \"http:\" || parsedUrl.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\nfunction expandAttachmentArrayPreTemplate(content, variables) {\n  if (typeof content !== \"string\") return null;\n  const match = content.match(/^\\{\\{\\s*([\\w.]+)\\s*\\}\\}$/);\n  if (!match) return null;\n  const varPath = match[1];\n  const value = varPath.includes(\".\") ? getObjValueByPath(variables, varPath.split(\".\")) : variables[varPath];\n  if (!Array.isArray(value)) return null;\n  const allValid = value.every(\n    (v) => isAttachmentObject(v) || typeof v === \"string\" && isURL(v)\n  );\n  if (!allValid) return null;\n  return value.map((item) => ({\n    type: \"image_url\",\n    image_url: { url: item }\n  }));\n}\nfunction renderMessage(render, message) {\n  return renderMessageImpl(render, message, {});\n}\nfunction renderMessageImpl(render, message, variables) {\n  return {\n    ...message,\n    ...\"content\" in message ? {\n      content: isEmpty2(message.content) ? void 0 : typeof message.content === \"string\" ? render(message.content) : message.content.flatMap((c) => {\n        switch (c.type) {\n          case \"text\":\n            return [{ ...c, text: render(c.text) }];\n          case \"image_url\":\n            if (isObject(c.image_url.url)) {\n              throw new Error(\n                \"Attachments must be replaced with URLs before calling `build()`\"\n              );\n            }\n            if (variables) {\n              const expanded = expandAttachmentArrayPreTemplate(\n                c.image_url.url,\n                variables\n              );\n              if (expanded) {\n                return expanded;\n              }\n            }\n            return [\n              {\n                ...c,\n                image_url: {\n                  ...c.image_url,\n                  url: render(c.image_url.url)\n                }\n              }\n            ];\n          case \"input_audio\":\n            return [\n              {\n                ...c,\n                input_audio: {\n                  ...c.input_audio,\n                  data: render(c.input_audio.data)\n                }\n              }\n            ];\n          case \"file\":\n            return [\n              {\n                ...c,\n                file: {\n                  ...c.file.file_data && {\n                    file_data: render(c.file.file_data)\n                  },\n                  ...c.file.file_id && {\n                    file_id: render(c.file.file_id)\n                  },\n                  ...c.file.filename && {\n                    filename: render(c.file.filename)\n                  }\n                }\n              }\n            ];\n          default:\n            const _exhaustiveCheck = c;\n            return _exhaustiveCheck;\n        }\n      })\n    } : {},\n    ...\"tool_calls\" in message ? {\n      tool_calls: isEmpty2(message.tool_calls) ? void 0 : message.tool_calls.map((t) => {\n        return {\n          type: t.type,\n          id: render(t.id),\n          function: {\n            name: render(t.function.name),\n            arguments: render(t.function.arguments)\n          }\n        };\n      })\n    } : {},\n    ...\"tool_call_id\" in message ? {\n      tool_call_id: render(message.tool_call_id)\n    } : {}\n  };\n}\nfunction deserializePlainStringAsJSON(s) {\n  if (s.trim() === \"\") {\n    return { value: null, error: void 0 };\n  }\n  try {\n    return { value: JSON.parse(s), error: void 0 };\n  } catch (e) {\n    return { value: s, error: e };\n  }\n}\nfunction renderTemplatedObject(obj, args, options) {\n  if (typeof obj === \"string\") {\n    return renderTemplateContent(\n      obj,\n      args,\n      (value) => typeof value === \"string\" ? value : JSON.stringify(value),\n      {\n        strict: options.strict,\n        templateFormat: options.templateFormat\n      }\n    );\n  } else if (isArray(obj)) {\n    return obj.map((item) => renderTemplatedObject(item, args, options));\n  } else if (isObject(obj)) {\n    return Object.fromEntries(\n      Object.entries(obj).map(([key, value]) => [\n        key,\n        renderTemplatedObject(value, args, options)\n      ])\n    );\n  }\n  return obj;\n}\nfunction renderPromptParams(params, args, options = {}) {\n  const templateFormat = parseTemplateFormat(options.templateFormat);\n  const strict = !!options.strict;\n  const schemaParsed = import_v38.z.object({\n    response_format: import_v38.z.object({\n      type: import_v38.z.literal(\"json_schema\"),\n      json_schema: ResponseFormatJsonSchema.omit({ schema: true }).extend({\n        schema: import_v38.z.unknown()\n      })\n    })\n  }).safeParse(params);\n  if (schemaParsed.success) {\n    const rawSchema = schemaParsed.data.response_format.json_schema.schema;\n    const templatedSchema = renderTemplatedObject(rawSchema, args, {\n      strict,\n      templateFormat\n    });\n    const parsedSchema = typeof templatedSchema === \"string\" ? deserializePlainStringAsJSON(templatedSchema).value : templatedSchema;\n    return {\n      ...params,\n      response_format: {\n        ...schemaParsed.data.response_format,\n        json_schema: {\n          ...schemaParsed.data.response_format.json_schema,\n          schema: parsedSchema\n        }\n      }\n    };\n  }\n  return params;\n}\nvar Prompt2 = class _Prompt {\n  constructor(metadata, defaults, noTrace) {\n    this.metadata = metadata;\n    this.defaults = defaults;\n    this.noTrace = noTrace;\n    void this.__braintrust_prompt_marker;\n  }\n  metadata;\n  defaults;\n  noTrace;\n  parsedPromptData;\n  hasParsedPromptData = false;\n  __braintrust_prompt_marker = true;\n  get id() {\n    return this.metadata.id;\n  }\n  get projectId() {\n    return this.metadata.project_id;\n  }\n  get name() {\n    return \"name\" in this.metadata ? this.metadata.name : `Playground function ${this.metadata.id}`;\n  }\n  get slug() {\n    return \"slug\" in this.metadata ? this.metadata.slug : this.metadata.id;\n  }\n  get prompt() {\n    return this.getParsedPromptData()?.prompt;\n  }\n  get version() {\n    return this.metadata[TRANSACTION_ID_FIELD];\n  }\n  get options() {\n    return this.getParsedPromptData()?.options || {};\n  }\n  get templateFormat() {\n    return this.getParsedPromptData()?.template_format;\n  }\n  get promptData() {\n    return this.getParsedPromptData();\n  }\n  /**\n   * Build the prompt with the given formatting options. The args you pass in will\n   * be forwarded to the mustache template that defines the prompt and rendered with\n   * the `mustache-js` library.\n   *\n   * @param buildArgs Args to forward along to the prompt template.\n   */\n  build(buildArgs, options = {}) {\n    return this.runBuild(buildArgs, {\n      flavor: options.flavor ?? \"chat\",\n      messages: options.messages,\n      strict: options.strict,\n      templateFormat: options.templateFormat\n    });\n  }\n  /**\n   * This is a special build method that first resolves attachment references, and then\n   * calls the regular build method. You should use this if you are building prompts from\n   * dataset rows that contain attachments.\n   *\n   * @param buildArgs Args to forward along to the prompt template.\n   */\n  async buildWithAttachments(buildArgs, options = {}) {\n    const hydrated = buildArgs instanceof Object ? await resolveAttachmentsToBase64(buildArgs, options.state) : buildArgs;\n    return this.runBuild(hydrated, {\n      flavor: options.flavor ?? \"chat\",\n      messages: options.messages,\n      strict: options.strict,\n      templateFormat: options.templateFormat\n    });\n  }\n  runBuild(buildArgs, options) {\n    const { flavor } = options;\n    const params = Object.fromEntries(\n      Object.entries({\n        ...this.defaults,\n        ...Object.fromEntries(\n          Object.entries(this.options.params || {}).filter(\n            ([k, _v]) => !BRAINTRUST_PARAMS.includes(k)\n          )\n        ),\n        ...!isEmpty2(this.options.model) ? {\n          model: this.options.model\n        } : {}\n      }).filter(([key, value]) => key !== \"response_format\" || value !== null)\n    );\n    if (!(\"model\" in params) || isEmpty2(params.model)) {\n      throw new Error(\n        \"No model specified. Either specify it in the prompt or as a default\"\n      );\n    }\n    const spanInfo = this.noTrace ? {} : {\n      span_info: {\n        metadata: {\n          prompt: this.id ? {\n            variables: buildArgs,\n            id: this.id,\n            project_id: this.projectId,\n            version: this.version,\n            ...\"prompt_session_id\" in this.metadata ? { prompt_session_id: this.metadata.prompt_session_id } : {}\n          } : void 0\n        }\n      }\n    };\n    const prompt = this.prompt;\n    if (!prompt) {\n      throw new Error(\"Empty prompt\");\n    }\n    const dictArgParsed = import_v38.z.record(import_v38.z.unknown()).safeParse(buildArgs);\n    const variables = {\n      input: buildArgs,\n      ...dictArgParsed.success ? dictArgParsed.data : {}\n    };\n    const promptDataTemplateFormat = this.templateFormat;\n    const resolvedTemplateFormat = parseTemplateFormat(\n      options.templateFormat ?? promptDataTemplateFormat\n    );\n    const renderedPrompt = _Prompt.renderPrompt({\n      prompt,\n      buildArgs,\n      options: { ...options, templateFormat: resolvedTemplateFormat }\n    });\n    if (flavor === \"chat\") {\n      if (renderedPrompt.type !== \"chat\") {\n        throw new Error(\n          \"Prompt is a completion prompt. Use buildCompletion() instead\"\n        );\n      }\n      return {\n        ...renderPromptParams(params, variables, {\n          strict: options.strict,\n          templateFormat: resolvedTemplateFormat\n        }),\n        ...spanInfo,\n        messages: renderedPrompt.messages,\n        ...renderedPrompt.tools ? {\n          tools: ChatCompletionTool.array().parse(JSON.parse(renderedPrompt.tools))\n        } : void 0\n      };\n    } else if (flavor === \"completion\") {\n      if (renderedPrompt.type !== \"completion\") {\n        throw new Error(`Prompt is a chat prompt. Use flavor: 'chat' instead`);\n      }\n      return {\n        ...renderPromptParams(params, variables, {\n          strict: options.strict,\n          templateFormat: resolvedTemplateFormat\n        }),\n        ...spanInfo,\n        prompt: renderedPrompt.content\n      };\n    } else {\n      throw new Error(\"never!\");\n    }\n  }\n  static renderPrompt({\n    prompt,\n    buildArgs,\n    options\n  }) {\n    const escape = (v) => {\n      if (v === void 0) {\n        throw new Error(\"Missing!\");\n      } else if (typeof v === \"string\") {\n        return v;\n      } else if (v instanceof ReadonlyAttachment) {\n        throw new Error(\n          \"Use buildWithAttachments() to build prompts with attachments\"\n        );\n      } else {\n        return JSON.stringify(v);\n      }\n    };\n    const dictArgParsed = import_v38.z.record(import_v38.z.unknown()).safeParse(buildArgs);\n    const variables = {\n      input: buildArgs,\n      ...dictArgParsed.success ? dictArgParsed.data : {}\n    };\n    const templateFormat = parseTemplateFormat(options.templateFormat);\n    if (prompt.type === \"chat\") {\n      const render = (template) => renderTemplateContent(template, variables, escape, {\n        strict: options.strict,\n        templateFormat\n      });\n      const baseMessages = (prompt.messages || []).map(\n        (m) => renderMessageImpl(render, m, variables)\n      );\n      const hasSystemPrompt = baseMessages.some((m) => m.role === \"system\");\n      const messages = [\n        ...baseMessages,\n        ...(options.messages ?? []).filter(\n          (m) => !(hasSystemPrompt && m.role === \"system\")\n        )\n      ];\n      return {\n        type: \"chat\",\n        messages,\n        ...prompt.tools?.trim() ? {\n          tools: render(prompt.tools)\n        } : void 0\n      };\n    } else if (prompt.type === \"completion\") {\n      if (options.messages) {\n        throw new Error(\n          \"extra messages are not supported for completion prompts\"\n        );\n      }\n      const content = renderTemplateContent(prompt.content, variables, escape, {\n        strict: options.strict,\n        templateFormat\n      });\n      return {\n        type: \"completion\",\n        content\n      };\n    } else {\n      const _ = prompt;\n      throw new Error(`Invalid prompt type: ${_}`);\n    }\n  }\n  getParsedPromptData() {\n    if (!this.hasParsedPromptData) {\n      this.parsedPromptData = PromptData.parse(this.metadata.prompt_data);\n      this.hasParsedPromptData = true;\n    }\n    return this.parsedPromptData;\n  }\n  static isPrompt(data) {\n    return typeof data === \"object\" && data !== null && \"__braintrust_prompt_marker\" in data;\n  }\n  /** @internal */\n  _internalSerializeForCache() {\n    return {\n      metadata: this.metadata,\n      defaults: this.defaults,\n      noTrace: this.noTrace\n    };\n  }\n  static fromPromptData(name, promptData) {\n    return new _Prompt(\n      {\n        name,\n        slug: name,\n        prompt_data: promptData\n      },\n      {},\n      false\n    );\n  }\n};\nvar RemoteEvalParameters = class {\n  constructor(metadata) {\n    this.metadata = metadata;\n    void this.__braintrust_parameters_marker;\n  }\n  metadata;\n  __braintrust_parameters_marker = true;\n  get id() {\n    return this.metadata.id;\n  }\n  get projectId() {\n    return this.metadata.project_id;\n  }\n  get name() {\n    return this.metadata.name;\n  }\n  get slug() {\n    return this.metadata.slug;\n  }\n  get version() {\n    return this.metadata[TRANSACTION_ID_FIELD];\n  }\n  get schema() {\n    return this.metadata.function_data.__schema;\n  }\n  get data() {\n    return this.metadata.function_data.data ?? {};\n  }\n  /** @internal */\n  _internalSerializeForCache() {\n    return { metadata: this.metadata };\n  }\n  validate(data) {\n    if (typeof data !== \"object\" || data === null) {\n      return false;\n    }\n    const schemaProps = this.schema.properties;\n    if (typeof schemaProps !== \"object\" || schemaProps === null) {\n      return true;\n    }\n    for (const key of Object.keys(schemaProps)) {\n      if (!(key in data)) {\n        const required = Array.isArray(this.schema.required) ? this.schema.required : [];\n        if (required.includes(key)) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  static isParameters(x) {\n    return typeof x === \"object\" && x !== null && \"__braintrust_parameters_marker\" in x && x.__braintrust_parameters_marker === true;\n  }\n};\nvar TEST_API_KEY = \"___TEST_API_KEY__THIS_IS_NOT_REAL___\";\nfunction setInitialTestState() {\n  if (!_internalGetGlobalState()) {\n    _internalSetInitialState();\n  }\n}\nasync function simulateLoginForTests() {\n  return await login({\n    apiKey: TEST_API_KEY,\n    appUrl: \"https://braintrust.dev\"\n  });\n}\nfunction simulateLogoutForTests() {\n  const state = _internalGetGlobalState();\n  state.resetLoginInfo();\n  state.resetIdGenState();\n  state[RESET_CONTEXT_MANAGER_STATE]();\n  state.appUrl = \"https://www.braintrust.dev\";\n  return state;\n}\nasync function getPromptVersions(projectId, promptId) {\n  const state = _internalGetGlobalState();\n  if (!state) {\n    throw new Error(\"Must log in first\");\n  }\n  await state.login({});\n  const query = {\n    from: {\n      op: \"function\",\n      name: {\n        op: \"ident\",\n        name: [\"project_prompts\"]\n      },\n      args: [\n        {\n          op: \"literal\",\n          value: projectId\n        }\n      ]\n    },\n    select: [\n      {\n        op: \"star\"\n      }\n    ],\n    filter: {\n      op: \"eq\",\n      left: { op: \"ident\", name: [\"id\"] },\n      right: { op: \"literal\", value: promptId }\n    }\n  };\n  const response = await state.apiConn().post(\n    \"btql\",\n    {\n      query,\n      audit_log: true,\n      use_columnstore: false,\n      brainstore_realtime: true\n    },\n    { headers: { \"Accept-Encoding\": \"gzip\" } },\n    BTQL_HTTP_RETRIES\n  );\n  if (!response.ok) {\n    throw new Error(\n      `API request failed: ${response.status} ${response.statusText}`\n    );\n  }\n  const result = await response.json();\n  return result.data?.filter(\n    (entry) => [\"upsert\", \"merge\"].includes(entry.audit_data?.action)\n  ).map((entry) => prettifyXact(entry._xact_id)) || [];\n}\nfunction resetIdGenStateForTests() {\n  const state = _internalGetGlobalState();\n  if (state) {\n    state.resetIdGenState();\n  }\n}\nvar _exportsForTestingOnly = {\n  extractAttachments,\n  deepCopyEvent,\n  useTestBackgroundLogger,\n  clearTestBackgroundLogger,\n  resetDebugLoggerForTests,\n  simulateLoginForTests,\n  simulateLogoutForTests,\n  setInitialTestState,\n  initTestExperiment,\n  isGeneratorFunction,\n  isAsyncGeneratorFunction,\n  resetIdGenStateForTests,\n  validateTags,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  isomorph: isomorph_default\n  // Expose isomorph for build type detection\n};\n\n// src/instrumentation/core/stream-patcher.ts\nfunction isAsyncIterable(value) {\n  return value !== null && typeof value === \"object\" && Symbol.asyncIterator in value && typeof value[Symbol.asyncIterator] === \"function\";\n}\nfunction hasAsyncIteratorMethods(value) {\n  return value !== null && typeof value === \"object\" && \"next\" in value && typeof value.next === \"function\";\n}\nfunction isSelfAsyncIterator(value) {\n  try {\n    return value[Symbol.asyncIterator]() === value;\n  } catch {\n    return false;\n  }\n}\nfunction patchStreamIfNeeded(stream, options) {\n  if (!isAsyncIterable(stream)) {\n    return stream;\n  }\n  if (Object.isFrozen(stream) || Object.isSealed(stream)) {\n    console.warn(\n      \"Cannot patch frozen/sealed stream. Stream output will not be collected.\"\n    );\n    return stream;\n  }\n  const chunks = [];\n  let completed = false;\n  const notifyCancellation = async () => {\n    try {\n      await (options.onCancel ?? options.onComplete)(chunks);\n    } catch (error) {\n      debugLogger.error(\"Error in stream cancellation handler:\", error);\n    }\n  };\n  const patchAbortIfPresent = () => {\n    try {\n      if (\"abort\" in stream && typeof stream.abort === \"function\") {\n        const originalAbort = stream.abort.bind(stream);\n        stream.abort = (...args) => {\n          try {\n            return originalAbort(...args);\n          } finally {\n            if (!completed) {\n              completed = true;\n              void notifyCancellation();\n            }\n          }\n        };\n      }\n    } catch (error) {\n      debugLogger.warn(\"Failed to patch stream abort method:\", error);\n    }\n  };\n  if (hasAsyncIteratorMethods(stream) && isSelfAsyncIterator(stream)) {\n    if (\"__braintrust_patched_iterator_methods\" in stream) {\n      return stream;\n    }\n    try {\n      const originalNext = stream.next.bind(stream);\n      const originalReturn = typeof stream.return === \"function\" ? stream.return.bind(stream) : null;\n      const originalThrow = typeof stream.throw === \"function\" ? stream.throw.bind(stream) : null;\n      stream.next = async (...args) => {\n        try {\n          const result = await runNextWithWrapper(\n            options,\n            () => originalNext(...args)\n          );\n          if (result.done) {\n            if (!completed) {\n              completed = true;\n              try {\n                await options.onComplete(chunks);\n              } catch (error) {\n                console.error(\"Error in stream onComplete handler:\", error);\n              }\n            }\n          } else {\n            const chunk = result.value;\n            const shouldCollect = options.shouldCollect ? options.shouldCollect(chunk) : true;\n            if (shouldCollect) {\n              chunks.push(chunk);\n              if (options.onChunk) {\n                try {\n                  await options.onChunk(chunk);\n                } catch (error) {\n                  console.error(\"Error in stream onChunk handler:\", error);\n                }\n              }\n            }\n          }\n          return result;\n        } catch (error) {\n          if (!completed) {\n            completed = true;\n            if (options.onError) {\n              try {\n                await options.onError(\n                  error instanceof Error ? error : new Error(String(error)),\n                  chunks\n                );\n              } catch (handlerError) {\n                console.error(\"Error in stream onError handler:\", handlerError);\n              }\n            }\n          }\n          throw error;\n        }\n      };\n      if (originalReturn) {\n        stream.return = async (...args) => {\n          if (!completed) {\n            completed = true;\n            await notifyCancellation();\n          }\n          return originalReturn(...args);\n        };\n      }\n      if (originalThrow) {\n        stream.throw = async (...args) => {\n          if (!completed) {\n            completed = true;\n            const rawError = args[0];\n            const error = rawError instanceof Error ? rawError : new Error(String(rawError));\n            if (options.onError) {\n              try {\n                await options.onError(error, chunks);\n              } catch (handlerError) {\n                console.error(\"Error in stream onError handler:\", handlerError);\n              }\n            }\n          }\n          return originalThrow(...args);\n        };\n      }\n      Object.defineProperty(stream, \"__braintrust_patched_iterator_methods\", {\n        value: true\n      });\n      patchAbortIfPresent();\n      return stream;\n    } catch (error) {\n      console.warn(\"Failed to patch stream iterator methods:\", error);\n    }\n  }\n  const originalIteratorFn = stream[Symbol.asyncIterator];\n  if (\"__braintrust_patched\" in originalIteratorFn && originalIteratorFn[\"__braintrust_patched\"]) {\n    return stream;\n  }\n  try {\n    const patchedIteratorFn = function() {\n      const iterator = originalIteratorFn.call(this);\n      const originalNext = iterator.next.bind(iterator);\n      iterator.next = async function(...args) {\n        try {\n          const result = await runNextWithWrapper(\n            options,\n            () => originalNext(...args)\n          );\n          if (result.done) {\n            if (!completed) {\n              completed = true;\n              try {\n                await options.onComplete(chunks);\n              } catch (error) {\n                console.error(\"Error in stream onComplete handler:\", error);\n              }\n            }\n          } else {\n            const chunk = result.value;\n            const shouldCollect = options.shouldCollect ? options.shouldCollect(chunk) : true;\n            if (shouldCollect) {\n              chunks.push(chunk);\n              if (options.onChunk) {\n                try {\n                  await options.onChunk(chunk);\n                } catch (error) {\n                  console.error(\"Error in stream onChunk handler:\", error);\n                }\n              }\n            }\n          }\n          return result;\n        } catch (error) {\n          if (!completed) {\n            completed = true;\n            if (options.onError) {\n              try {\n                await options.onError(\n                  error instanceof Error ? error : new Error(String(error)),\n                  chunks\n                );\n              } catch (handlerError) {\n                console.error(\"Error in stream onError handler:\", handlerError);\n              }\n            }\n          }\n          throw error;\n        }\n      };\n      if (iterator.return) {\n        const originalReturn = iterator.return.bind(iterator);\n        iterator.return = async function(...args) {\n          if (!completed) {\n            completed = true;\n            await notifyCancellation();\n          }\n          return originalReturn(...args);\n        };\n      }\n      if (iterator.throw) {\n        const originalThrow = iterator.throw.bind(iterator);\n        iterator.throw = async function(...args) {\n          if (!completed) {\n            completed = true;\n            const rawError = args[0];\n            const error = rawError instanceof Error ? rawError : new Error(String(rawError));\n            if (options.onError) {\n              try {\n                await options.onError(error, chunks);\n              } catch (handlerError) {\n                console.error(\"Error in stream onError handler:\", handlerError);\n              }\n            }\n          }\n          return originalThrow(...args);\n        };\n      }\n      return iterator;\n    };\n    Object.defineProperty(patchedIteratorFn, \"__braintrust_patched\", {\n      value: true\n    });\n    stream[Symbol.asyncIterator] = patchedIteratorFn;\n    patchAbortIfPresent();\n    return stream;\n  } catch (error) {\n    console.warn(\"Failed to patch stream:\", error);\n    return stream;\n  }\n}\nfunction observeByteStream(value, options) {\n  let ended = false;\n  let started = false;\n  const start = () => {\n    if (started || ended) return;\n    started = true;\n    try {\n      options.onStart?.();\n    } catch (error) {\n      debugLogger.error(`Error starting ${options.debugLabel} observer`, error);\n    }\n  };\n  const safeObserve = (chunk) => {\n    if (ended) return;\n    try {\n      options.onChunk(chunk);\n    } catch (error) {\n      debugLogger.error(`Error collecting ${options.debugLabel}`, error);\n      end(false);\n    }\n  };\n  const end = (success, error) => {\n    if (ended) return;\n    ended = true;\n    try {\n      if (success) options.onComplete();\n      else options.onCancel(error);\n    } catch (loggingError) {\n      debugLogger.error(`Error logging ${options.debugLabel}`, loggingError);\n      if (success)\n        try {\n          options.onCancel();\n        } catch (cancelError) {\n          debugLogger.error(\n            `Error cancelling ${options.debugLabel} observer`,\n            cancelError\n          );\n        }\n    }\n  };\n  if (value === null || typeof value !== \"object\" || !Object.isExtensible(value)) {\n    end(false);\n    return;\n  }\n  if (\"read\" in value && typeof value.read === \"function\" && \"on\" in value && typeof value.on === \"function\") {\n    value.on(\"end\", () => end(true));\n    value.on(\"close\", () => end(false));\n    const emit2 = \"emit\" in value ? value.emit : void 0;\n    if (typeof emit2 === \"function\")\n      value.emit = function(event, ...args) {\n        if (event === \"data\" && args[0] instanceof Uint8Array) {\n          start();\n          safeObserve(args[0]);\n        }\n        if (event === \"error\") end(false, args[0]);\n        return Reflect.apply(emit2, this, [event, ...args]);\n      };\n    return;\n  }\n  if (\"getReader\" in value && typeof value.getReader === \"function\") {\n    const webStream = value;\n    const pipeTo = webStream.pipeTo;\n    const pipeThrough = webStream.pipeThrough;\n    webStream.pipeTo = function(destination, streamOptions) {\n      if (destination === null || typeof destination !== \"object\" || this.locked || destination.locked)\n        return pipeTo.call(this, destination, streamOptions);\n      start();\n      const writer = destination.getWriter();\n      let writerReleased = false;\n      const releaseWriter = () => {\n        if (writerReleased) return;\n        writerReleased = true;\n        writer.releaseLock();\n      };\n      const observedDestination = new WritableStream({\n        write(chunk) {\n          safeObserve(chunk);\n          return writer.write(chunk);\n        },\n        async close() {\n          try {\n            if (!streamOptions?.preventClose) await writer.close();\n            end(true);\n          } finally {\n            releaseWriter();\n          }\n        },\n        async abort(reason) {\n          try {\n            if (!streamOptions?.preventAbort) await writer.abort(reason);\n            end(false, reason);\n          } finally {\n            releaseWriter();\n          }\n        }\n      });\n      try {\n        return pipeTo.call(this, observedDestination, {\n          preventCancel: streamOptions?.preventCancel,\n          signal: streamOptions?.signal\n        }).catch((error) => {\n          end(false, error);\n          throw error;\n        }).finally(releaseWriter);\n      } catch (error) {\n        releaseWriter();\n        throw error;\n      }\n    };\n    webStream.pipeThrough = function(transform, streamOptions) {\n      if (this.locked || transform.writable.locked || transform.readable.locked)\n        return pipeThrough.call(\n          this,\n          transform,\n          streamOptions\n        );\n      const result = webStream.pipeTo.call(\n        this,\n        transform.writable,\n        streamOptions\n      );\n      void result.catch(() => {\n      });\n      return transform.readable;\n    };\n    const getReader = value.getReader;\n    value.getReader = function(...args) {\n      const reader = Reflect.apply(getReader, this, args);\n      const read4 = reader.read;\n      reader.read = function(...readArgs) {\n        start();\n        const readValue = () => Reflect.apply(read4, this, readArgs);\n        return Promise.resolve(\n          options.aroundRead ? options.aroundRead(readValue) : readValue()\n        ).then(\n          (result) => {\n            if (result.value) safeObserve(result.value);\n            if (result.done) end(true);\n            return result;\n          },\n          (error) => {\n            end(false, error);\n            throw error;\n          }\n        );\n      };\n      const readerCancel = reader.cancel;\n      reader.cancel = function(...cancelArgs) {\n        const result = Reflect.apply(readerCancel, this, cancelArgs);\n        end(false);\n        return result;\n      };\n      return reader;\n    };\n    const streamCancel = value.cancel;\n    if (typeof streamCancel === \"function\")\n      value.cancel = function(...args) {\n        const result = Reflect.apply(streamCancel, this, args);\n        void Promise.resolve(result).then(\n          () => end(false),\n          () => {\n          }\n        );\n        return result;\n      };\n  }\n  if (\"getReader\" in value && typeof value.getReader === \"function\" && \"values\" in value && typeof value.values === \"function\") {\n    const values = value.values;\n    const iterate = function(...args) {\n      const iterator = Reflect.apply(values, this, args);\n      patchStreamIfNeeded(iterator, {\n        shouldCollect(chunk) {\n          safeObserve(chunk);\n          return false;\n        },\n        onComplete: () => end(true),\n        onCancel: () => end(false),\n        onError: (error) => end(false, error),\n        aroundNext: (next) => {\n          start();\n          return options.aroundRead ? options.aroundRead(next) : next();\n        }\n      });\n      return iterator;\n    };\n    value.values = iterate;\n    Object.defineProperty(value, Symbol.asyncIterator, {\n      configurable: true,\n      writable: true,\n      value: iterate\n    });\n  } else if (isAsyncIterable(value)) {\n    patchStreamIfNeeded(value, {\n      shouldCollect: (chunk) => {\n        safeObserve(chunk);\n        return false;\n      },\n      onComplete: () => end(true),\n      onCancel: () => end(false),\n      onError: (error) => end(false, error),\n      aroundNext: (next) => {\n        start();\n        return options.aroundRead ? options.aroundRead(next) : next();\n      }\n    });\n  } else if (!(\"getReader\" in value) || typeof value.getReader !== \"function\")\n    end(false);\n}\nfunction runNextWithWrapper(options, callback) {\n  return options.aroundNext ? options.aroundNext(callback) : callback();\n}\n\n// src/instrumentation/core/channel-tracing-utils.ts\nfunction hasChannelSpanInfo(value) {\n  return isObject(value) && isObject(value.span_info);\n}\nfunction getChannelSpanInfo(event) {\n  if (isObject(event.span_info)) {\n    return event.span_info;\n  }\n  const firstArg = event.arguments?.[0];\n  if (hasChannelSpanInfo(firstArg)) {\n    return firstArg.span_info;\n  }\n  return void 0;\n}\nfunction buildStartSpanArgs(config, event) {\n  const spanInfo = getChannelSpanInfo(event);\n  const spanAttributes = {\n    type: config.type\n  };\n  if (isObject(spanInfo?.spanAttributes)) {\n    mergeDicts(spanAttributes, spanInfo.spanAttributes);\n  }\n  return {\n    name: typeof spanInfo?.name === \"string\" && spanInfo.name ? spanInfo.name : resolveConfigName(config.name, event),\n    spanAttributes,\n    spanInfoMetadata: isObject(spanInfo?.metadata) ? spanInfo.metadata : void 0\n  };\n}\nfunction resolveConfigName(name, event) {\n  if (typeof name === \"string\") {\n    return name;\n  }\n  try {\n    const resolved = name(event.arguments ?? [], event);\n    return resolved || \"unknown\";\n  } catch (error) {\n    debugLogger.error(\"Error resolving instrumentation span name:\", error);\n    return \"unknown\";\n  }\n}\nfunction mergeInputMetadata(metadata, spanInfoMetadata) {\n  if (!spanInfoMetadata) {\n    return isObject(metadata) ? (\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      metadata\n    ) : void 0;\n  }\n  const mergedMetadata = {};\n  mergeDicts(mergedMetadata, spanInfoMetadata);\n  if (isObject(metadata)) {\n    mergeDicts(mergedMetadata, metadata);\n  }\n  return mergedMetadata;\n}\n\n// src/instrumentation/core/plugin.ts\nvar BasePlugin = class {\n  enabled = false;\n  unsubscribers = [];\n  /**\n   * Enables the plugin. Must be called before the plugin will receive events.\n   */\n  enable() {\n    if (this.enabled) {\n      return;\n    }\n    this.enabled = true;\n    this.onEnable();\n  }\n  /**\n   * Disables the plugin. After this, the plugin will no longer receive events.\n   */\n  disable() {\n    if (!this.enabled) {\n      return;\n    }\n    this.enabled = false;\n    this.onDisable();\n  }\n  /**\n   * Helper to subscribe to a channel with raw handlers.\n   *\n   * @param channelName - The channel name to subscribe to\n   * @param handlers - Event handlers\n   */\n  subscribe(channelName, handlers) {\n    const channel2 = isomorph_default.newTracingChannel(channelName);\n    channel2.subscribe(handlers);\n  }\n  /**\n   * Subscribe to a channel for async methods (non-streaming).\n   * Creates a span and logs input/output/metrics.\n   */\n  subscribeToChannel(channelName, config) {\n    const channel2 = isomorph_default.newTracingChannel(channelName);\n    const spans = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        const { name, spanAttributes, spanInfoMetadata } = buildStartSpanArgs(\n          config,\n          event\n        );\n        const span = startSpan({\n          name,\n          spanAttributes\n        });\n        const startTime = getCurrentUnixTimestamp();\n        spans.set(event, { span, startTime });\n        try {\n          const { input, metadata } = config.extractInput(event.arguments);\n          span.log({\n            input,\n            metadata: mergeInputMetadata(metadata, spanInfoMetadata)\n          });\n        } catch (error) {\n          console.error(`Error extracting input for ${channelName}:`, error);\n        }\n      },\n      asyncEnd: (event) => {\n        const spanData = spans.get(event);\n        if (!spanData) {\n          return;\n        }\n        const { span, startTime } = spanData;\n        try {\n          const output = config.extractOutput(event.result, event);\n          const metrics = config.extractMetrics(event.result, startTime, event);\n          const metadata = config.extractMetadata?.(event.result, event);\n          span.log({\n            output,\n            ...metadata !== void 0 ? { metadata } : {},\n            metrics\n          });\n        } catch (error) {\n          console.error(`Error extracting output for ${channelName}:`, error);\n        } finally {\n          span.end();\n          spans.delete(event);\n        }\n      },\n      error: (event) => {\n        const spanData = spans.get(event);\n        if (!spanData) {\n          return;\n        }\n        const { span } = spanData;\n        span.log({\n          error: event.error.message\n        });\n        span.end();\n        spans.delete(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n  /**\n   * Subscribe to a channel for async methods that may return streams.\n   * Handles both streaming and non-streaming responses.\n   */\n  subscribeToStreamingChannel(channelName, config) {\n    const channel2 = isomorph_default.newTracingChannel(channelName);\n    const spans = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        const { name, spanAttributes, spanInfoMetadata } = buildStartSpanArgs(\n          config,\n          event\n        );\n        const span = startSpan({\n          name,\n          spanAttributes\n        });\n        const startTime = getCurrentUnixTimestamp();\n        spans.set(event, { span, startTime });\n        try {\n          const { input, metadata } = config.extractInput(event.arguments);\n          span.log({\n            input,\n            metadata: mergeInputMetadata(metadata, spanInfoMetadata)\n          });\n        } catch (error) {\n          console.error(`Error extracting input for ${channelName}:`, error);\n        }\n      },\n      asyncEnd: (event) => {\n        const spanData = spans.get(event);\n        if (!spanData) {\n          return;\n        }\n        const { span, startTime } = spanData;\n        if (isAsyncIterable(event.result)) {\n          let firstChunkTime;\n          patchStreamIfNeeded(event.result, {\n            onChunk: () => {\n              if (firstChunkTime === void 0) {\n                firstChunkTime = getCurrentUnixTimestamp();\n              }\n            },\n            onComplete: (chunks) => {\n              try {\n                let output;\n                let metrics;\n                let metadata;\n                if (config.aggregateChunks) {\n                  const aggregated = config.aggregateChunks(\n                    chunks,\n                    event.result,\n                    event\n                  );\n                  output = aggregated.output;\n                  metrics = aggregated.metrics;\n                  metadata = aggregated.metadata;\n                } else {\n                  output = config.extractOutput(chunks, event);\n                  metrics = config.extractMetrics(chunks, startTime, event);\n                }\n                if (metrics.time_to_first_token === void 0 && firstChunkTime !== void 0) {\n                  metrics.time_to_first_token = firstChunkTime - startTime;\n                } else if (metrics.time_to_first_token === void 0 && chunks.length > 0) {\n                  metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n                }\n                span.log({\n                  output,\n                  ...metadata !== void 0 ? { metadata } : {},\n                  metrics\n                });\n              } catch (error) {\n                console.error(\n                  `Error extracting output for ${channelName}:`,\n                  error\n                );\n              } finally {\n                span.end();\n              }\n            },\n            onError: (error) => {\n              span.log({\n                error: error.message\n              });\n              span.end();\n            }\n          });\n        } else {\n          try {\n            const output = config.extractOutput(event.result, event);\n            const metadata = config.extractMetadata ? config.extractMetadata(event.result, event) : void 0;\n            const metrics = config.extractMetrics(\n              event.result,\n              startTime,\n              event\n            );\n            span.log({\n              output,\n              ...metadata !== void 0 ? { metadata } : {},\n              metrics\n            });\n          } catch (error) {\n            console.error(`Error extracting output for ${channelName}:`, error);\n          } finally {\n            span.end();\n            spans.delete(event);\n          }\n        }\n      },\n      error: (event) => {\n        const spanData = spans.get(event);\n        if (!spanData) {\n          return;\n        }\n        const { span } = spanData;\n        span.log({\n          error: event.error.message\n        });\n        span.end();\n        spans.delete(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n  /**\n   * Subscribe to a channel for sync methods that return event-based streams.\n   * Used for methods like beta.chat.completions.stream() and responses.stream().\n   */\n  subscribeToSyncStreamChannel(channelName, config) {\n    const channel2 = isomorph_default.newTracingChannel(channelName);\n    const spans = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        const { name, spanAttributes, spanInfoMetadata } = buildStartSpanArgs(\n          config,\n          event\n        );\n        const span = startSpan({\n          name,\n          spanAttributes\n        });\n        const startTime = getCurrentUnixTimestamp();\n        spans.set(event, { span, startTime });\n        try {\n          const { input, metadata } = config.extractInput(event.arguments);\n          span.log({\n            input,\n            metadata: mergeInputMetadata(metadata, spanInfoMetadata)\n          });\n        } catch (error) {\n          console.error(`Error extracting input for ${channelName}:`, error);\n        }\n      },\n      end: (event) => {\n        const spanData = spans.get(event);\n        if (!spanData) {\n          return;\n        }\n        const { span, startTime } = spanData;\n        const stream = event.result;\n        if (!stream || typeof stream.on !== \"function\") {\n          span.end();\n          spans.delete(event);\n          return;\n        }\n        let first = true;\n        stream.on(\"chunk\", (chunk) => {\n          if (first) {\n            const now2 = getCurrentUnixTimestamp();\n            span.log({\n              metrics: {\n                time_to_first_token: now2 - startTime\n              }\n            });\n            first = false;\n          }\n        });\n        stream.on(\"chatCompletion\", (completion) => {\n          try {\n            span.log({\n              output: completion.choices\n            });\n          } catch (error) {\n            console.error(\n              `Error extracting chatCompletion for ${channelName}:`,\n              error\n            );\n          }\n        });\n        stream.on(\"event\", (streamEvent) => {\n          if (config.extractFromEvent) {\n            try {\n              if (first) {\n                const now2 = getCurrentUnixTimestamp();\n                span.log({\n                  metrics: {\n                    time_to_first_token: now2 - startTime\n                  }\n                });\n                first = false;\n              }\n              const extracted = config.extractFromEvent(streamEvent);\n              if (extracted && Object.keys(extracted).length > 0) {\n                span.log(extracted);\n              }\n            } catch (error) {\n              console.error(\n                `Error extracting event for ${channelName}:`,\n                error\n              );\n            }\n          }\n        });\n        stream.on(\"end\", () => {\n          span.end();\n          spans.delete(event);\n        });\n      },\n      error: (event) => {\n        const spanData = spans.get(event);\n        if (!spanData) {\n          return;\n        }\n        const { span } = spanData;\n        span.log({\n          error: event.error.message\n        });\n        span.end();\n        spans.delete(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n};\n\n// src/instrumentation/core/logging.ts\nfunction toLoggedError(error) {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  if (typeof error === \"string\") {\n    return error;\n  }\n  try {\n    const serialized = JSON.stringify(error);\n    return serialized === void 0 ? String(error) : serialized;\n  } catch {\n    try {\n      return String(error);\n    } catch {\n      return \"<unserializable error>\";\n    }\n  }\n}\n\n// src/wrappers/attachment-utils.ts\nvar CAPTURE_ATTACHMENTS_ENV_VAR = \"BRAINTRUST_CAPTURE_ATTACHMENTS\";\nfunction isAutoCaptureAttachmentsEnabled() {\n  const value = isomorph_default.getEnv(CAPTURE_ATTACHMENTS_ENV_VAR);\n  return value !== void 0 && [\"1\", \"true\"].includes(value.trim().toLowerCase());\n}\nfunction getExtensionFromMediaType(mediaType) {\n  const extensionMap = {\n    \"image/png\": \"png\",\n    \"image/jpeg\": \"jpg\",\n    \"image/gif\": \"gif\",\n    \"image/webp\": \"webp\",\n    \"image/svg+xml\": \"svg\",\n    \"audio/mpeg\": \"mp3\",\n    \"audio/flac\": \"flac\",\n    \"audio/basic\": \"mulaw\",\n    \"audio/mp4\": \"m4a\",\n    \"audio/wav\": \"wav\",\n    \"audio/webm\": \"webm\",\n    \"audio/ogg\": \"ogg\",\n    \"video/mp4\": \"mp4\",\n    \"video/webm\": \"webm\",\n    \"application/pdf\": \"pdf\",\n    \"application/json\": \"json\",\n    \"text/plain\": \"txt\",\n    \"text/html\": \"html\",\n    \"text/csv\": \"csv\"\n  };\n  return extensionMap[mediaType] || \"bin\";\n}\nfunction convertDataToBlob(data, mediaType) {\n  try {\n    if (typeof data === \"string\") {\n      if (data.startsWith(\"data:\")) {\n        const base64Match = data.match(/^data:[^;]+;base64,(.+)$/);\n        if (base64Match) {\n          const base64 = base64Match[1];\n          const binaryString = atob(base64);\n          const bytes = new Uint8Array(binaryString.length);\n          for (let i = 0; i < binaryString.length; i++) {\n            bytes[i] = binaryString.charCodeAt(i);\n          }\n          return new Blob([bytes], { type: mediaType });\n        }\n      } else if (data.startsWith(\"http://\") || data.startsWith(\"https://\")) {\n        return null;\n      } else {\n        const binaryString = atob(data);\n        const bytes = new Uint8Array(binaryString.length);\n        for (let i = 0; i < binaryString.length; i++) {\n          bytes[i] = binaryString.charCodeAt(i);\n        }\n        return new Blob([bytes], { type: mediaType });\n      }\n    } else if (data instanceof Uint8Array) {\n      return new Blob([data], { type: mediaType });\n    } else if (data instanceof ArrayBuffer) {\n      return new Blob([data], { type: mediaType });\n    } else if (typeof Buffer !== \"undefined\" && data instanceof Buffer) {\n      return new Blob([data], { type: mediaType });\n    }\n  } catch {\n    return null;\n  }\n  return null;\n}\nfunction processInputAttachments(input, captureAttachments = true) {\n  if (!input) {\n    return input;\n  }\n  let attachmentIndex = 0;\n  const inferMediaTypeFromDataUrl = (value, fallback2) => {\n    const mediaTypeMatch = value.match(/^data:([^;]+);/);\n    return mediaTypeMatch?.[1] || fallback2;\n  };\n  const toAttachment = (value, mediaType, filename) => {\n    const blob = convertDataToBlob(value, mediaType);\n    if (!blob) {\n      return null;\n    }\n    return new Attachment({\n      data: blob,\n      filename,\n      contentType: mediaType\n    });\n  };\n  const processNode = (node) => {\n    if (Array.isArray(node)) {\n      return node.map(processNode);\n    }\n    if (!node || typeof node !== \"object\") {\n      return node;\n    }\n    if (node.type === \"image_url\" && node.image_url && typeof node.image_url === \"object\" && typeof node.image_url.url === \"string\" && node.image_url.url.startsWith(\"data:\")) {\n      const mediaType = inferMediaTypeFromDataUrl(\n        node.image_url.url,\n        \"image/png\"\n      );\n      const filename = `image.${getExtensionFromMediaType(mediaType)}`;\n      const attachment = captureAttachments ? toAttachment(node.image_url.url, mediaType, filename) : \"<omitted>\";\n      if (attachment) {\n        return {\n          ...node,\n          image_url: {\n            ...node.image_url,\n            url: attachment\n          }\n        };\n      }\n    }\n    const voyageBase64Key = node.type === \"image_base64\" ? Object.hasOwn(node, \"imageBase64\") ? \"imageBase64\" : \"image_base64\" : node.type === \"video_base64\" ? Object.hasOwn(node, \"videoBase64\") ? \"videoBase64\" : \"video_base64\" : void 0;\n    const voyageBase64Value = voyageBase64Key ? node[voyageBase64Key] : void 0;\n    if (voyageBase64Key && typeof voyageBase64Value === \"string\" && voyageBase64Value.startsWith(\"data:\")) {\n      const mediaType = inferMediaTypeFromDataUrl(\n        voyageBase64Value,\n        node.type === \"video_base64\" ? \"video/mp4\" : \"image/png\"\n      );\n      const filename = `${node.type === \"video_base64\" ? \"video\" : \"image\"}.${getExtensionFromMediaType(mediaType)}`;\n      const attachment = captureAttachments ? toAttachment(voyageBase64Value, mediaType, filename) : \"<omitted>\";\n      if (attachment) {\n        return {\n          ...node,\n          [voyageBase64Key]: attachment\n        };\n      }\n    }\n    if (node.type === \"file\" && node.file && typeof node.file === \"object\" && typeof node.file.file_data === \"string\" && node.file.file_data.startsWith(\"data:\")) {\n      const mediaType = inferMediaTypeFromDataUrl(\n        node.file.file_data,\n        \"application/octet-stream\"\n      );\n      const filename = typeof node.file.filename === \"string\" && node.file.filename ? node.file.filename : `document.${getExtensionFromMediaType(mediaType)}`;\n      const attachment = captureAttachments ? toAttachment(node.file.file_data, mediaType, filename) : \"<omitted>\";\n      if (attachment) {\n        return {\n          ...node,\n          file: {\n            ...node.file,\n            file_data: attachment\n          }\n        };\n      }\n    }\n    if (node.type === \"image\" && node.image) {\n      let mediaType = \"image/png\";\n      if (typeof node.image === \"string\" && node.image.startsWith(\"data:\")) {\n        mediaType = inferMediaTypeFromDataUrl(node.image, mediaType);\n      } else if (node.mediaType) {\n        mediaType = node.mediaType;\n      }\n      const filename = `input_image_${attachmentIndex}.${getExtensionFromMediaType(mediaType)}`;\n      const attachment = captureAttachments ? toAttachment(node.image, mediaType, filename) : node.image instanceof URL || typeof node.image === \"string\" && /^https?:/.test(node.image) ? null : \"<omitted>\";\n      if (attachment) {\n        attachmentIndex++;\n        return {\n          ...node,\n          image: attachment\n        };\n      }\n    }\n    if (node.type === \"file\" && node.data) {\n      const mediaType = node.mediaType || \"application/octet-stream\";\n      const filename = node.filename || `input_file_${attachmentIndex}.${getExtensionFromMediaType(mediaType)}`;\n      const attachment = captureAttachments ? toAttachment(node.data, mediaType, filename) : node.data instanceof URL || typeof node.data === \"string\" && /^https?:/.test(node.data) ? null : \"<omitted>\";\n      if (attachment) {\n        attachmentIndex++;\n        return {\n          ...node,\n          data: attachment\n        };\n      }\n    }\n    const processed = {};\n    for (const [key, value] of Object.entries(node)) {\n      processed[key] = processNode(value);\n    }\n    return processed;\n  };\n  if (Array.isArray(input)) {\n    return input.map(processNode);\n  }\n  return processNode(input);\n}\n\n// src/instrumentation/auto-instrumentation-suppression.ts\nvar autoInstrumentationSuppressionStore;\nfunction suppressionStore() {\n  autoInstrumentationSuppressionStore ??= isomorph_default.newAsyncLocalStorage();\n  return autoInstrumentationSuppressionStore;\n}\nfunction isAutoInstrumentationSuppressed() {\n  return suppressionStore().getStore() === true;\n}\nfunction runWithAutoInstrumentationSuppressed(callback) {\n  return suppressionStore().run(true, callback);\n}\nfunction runWithAutoInstrumentationAllowed(callback) {\n  return suppressionStore().run(void 0, callback);\n}\n\n// src/instrumentation/plugins/openai-media.ts\nvar AUDIO_TYPES = new Map(\n  Object.entries({\n    mp3: \"audio/mpeg\",\n    opus: \"audio/ogg\",\n    aac: \"audio/aac\",\n    flac: \"audio/flac\",\n    wav: \"audio/wav\",\n    pcm: \"audio/pcm\"\n  })\n);\nfunction mediaAttachment(value, contentType, filename, captureAttachments) {\n  if (value instanceof URL) return value.toString();\n  if (typeof value === \"string\" && /^https?:/.test(value)) return value;\n  if (!captureAttachments) return \"<omitted>\";\n  const blob = value instanceof Blob ? value : convertDataToBlob(value, contentType);\n  if (blob)\n    return new Attachment({\n      data: blob,\n      contentType: blob.type || contentType,\n      filename\n    });\n  return value;\n}\nfunction mediaUsage(usage) {\n  if (!isObject(usage)) return {};\n  const metrics = {};\n  for (const [source, dest] of [\n    [\"input_tokens\", \"prompt_tokens\"],\n    [\"output_tokens\", \"completion_tokens\"],\n    [\"total_tokens\", \"tokens\"]\n  ]) {\n    const value = usage[source];\n    if (typeof value === \"number\") metrics[dest] = value;\n  }\n  for (const [source, prefix] of [\n    [\"input_token_details\", \"prompt\"],\n    [\"input_tokens_details\", \"prompt\"],\n    [\"output_token_details\", \"completion\"],\n    [\"output_tokens_details\", \"completion\"]\n  ]) {\n    const details = usage[source];\n    if (!isObject(details)) continue;\n    for (const key of [\n      \"audio_tokens\",\n      \"text_tokens\",\n      \"image_tokens\",\n      \"cached_tokens\"\n    ]) {\n      const value = details[key];\n      if (typeof value === \"number\") metrics[`${prefix}_${key}`] = value;\n    }\n  }\n  return metrics;\n}\nasync function mediaInput(params, operation, captureAttachments) {\n  const pendingContent = [];\n  for (const [key, purpose] of [\n    [\"image\", \"reference\"],\n    [\"mask\", \"mask\"],\n    [\"file\", \"input\"]\n  ]) {\n    const value = params[key];\n    if (value === void 0) continue;\n    for (const item of Array.isArray(value) ? value : [value]) {\n      pendingContent.push(\n        (async () => {\n          const isImage = key !== \"file\";\n          const sourceName = isObject(item) && typeof item.name === \"string\" ? item.name : isObject(item) && typeof item.path === \"string\" ? item.path.split(/[\\\\/]/).pop() : void 0;\n          const extension = sourceName?.split(\".\").pop()?.toLowerCase() ?? \"\";\n          const imageTypes = /* @__PURE__ */ new Map([\n            [\"jpg\", \"image/jpeg\"],\n            [\"jpeg\", \"image/jpeg\"],\n            [\"png\", \"image/png\"],\n            [\"webp\", \"image/webp\"]\n          ]);\n          const contentType = isObject(item) && typeof item.type === \"string\" && item.type ? item.type : (isImage ? imageTypes.get(extension) : AUDIO_TYPES.get(extension)) ?? \"application/octet-stream\";\n          const filename = sourceName ?? `input.${getExtensionFromMediaType(contentType)}`;\n          let data = item;\n          if (captureAttachments && !(item instanceof Blob) && isObject(item) && typeof item.arrayBuffer === \"function\" && typeof item.size === \"number\") {\n            try {\n              data = await item.arrayBuffer();\n            } catch (error) {\n              debugLogger.debug(\"OpenAI upload capture failed\", error);\n            }\n          }\n          if (captureAttachments && isObject(item) && typeof item.read === \"function\" && typeof item.pipe === \"function\" && typeof item.emit === \"function\" && item.readableEnded !== true) {\n            const stream = item;\n            data = await new Promise((resolve) => {\n              const chunks = [];\n              const emit2 = stream.emit;\n              let settled = false;\n              stream.emit = function(event, ...args) {\n                if (!settled) {\n                  try {\n                    if (event === \"data\") {\n                      const chunk = typeof args[0] === \"string\" ? new Blob([args[0]]) : convertDataToBlob(args[0], contentType);\n                      if (chunk) chunks.push(chunk);\n                    }\n                    if (event === \"end\" || event === \"error\" || event === \"close\") {\n                      settled = true;\n                      resolve(\n                        event === \"end\" ? new Blob(chunks, { type: contentType }) : item\n                      );\n                      chunks.length = 0;\n                    }\n                  } catch (error) {\n                    settled = true;\n                    resolve(item);\n                    debugLogger.debug(\"OpenAI upload capture failed\", error);\n                  }\n                }\n                return emit2.call(this, event, ...args);\n              };\n            });\n          }\n          const attachment = mediaAttachment(\n            data,\n            contentType,\n            filename,\n            captureAttachments\n          );\n          return isImage ? { type: \"image_url\", image_url: { url: attachment }, purpose } : { type: \"file\", file: { filename, file_data: attachment } };\n        })()\n      );\n    }\n  }\n  const keys = operation === \"speech\" ? [\"voice\", \"speed\", \"language\"] : operation === \"transcribe\" || operation === \"translate\" ? [\"language\", \"timestamp_granularities\"] : [\"n\", \"size\", \"quality\", \"style\", \"background\", \"output_format\"];\n  const parameters = {};\n  for (const key of keys)\n    if (Object.hasOwn(params, key) && params[key] !== void 0)\n      parameters[key] = params[key];\n  if ([\"speech\", \"transcribe\", \"translate\"].includes(operation) && params.response_format)\n    parameters.format = params.response_format;\n  const prompt = params.prompt ?? params.input;\n  const content = await Promise.all(pendingContent);\n  return {\n    operation,\n    ...prompt !== void 0 ? { prompt } : {},\n    ...content.length ? { content } : {},\n    ...Object.keys(parameters).length ? { parameters } : {}\n  };\n}\nfunction mediaOutput(result, params, captureAttachments) {\n  if (typeof result === \"string\")\n    return { content: [{ type: \"text\", text: result }] };\n  const content = [];\n  for (const item of result.data ?? []) {\n    const format = result.output_format ?? params.output_format ?? \"png\";\n    const url = item.b64_json ? mediaAttachment(\n      item.b64_json,\n      `image/${format}`,\n      `generated-image.${format}`,\n      captureAttachments\n    ) : item.url;\n    if (url !== void 0)\n      content.push({\n        type: \"image_url\",\n        image_url: { url },\n        ...item.revised_prompt ? { revised_prompt: item.revised_prompt } : {}\n      });\n  }\n  if (result.text !== void 0)\n    content.push({ type: \"text\", text: result.text });\n  const annotations = {};\n  for (const key of [\"language\", \"duration\", \"segments\", \"words\"])\n    if (result[key] !== void 0) annotations[key] = result[key];\n  return {\n    content,\n    ...Object.keys(annotations).length ? { annotations } : {}\n  };\n}\nfunction observeMediaPromise(promise, onValue, onError, onRaw) {\n  const candidate = promise;\n  const then = candidate.then.bind(candidate);\n  const success = (value) => {\n    onValue(value);\n    return value;\n  };\n  const failure = (error) => {\n    onError(error);\n    throw error;\n  };\n  candidate.then = (fulfilled, rejected) => then(success, failure).then(fulfilled, rejected);\n  if (candidate.catch)\n    candidate.catch = (rejected) => candidate.then(void 0, rejected);\n  if (candidate.finally)\n    candidate.finally = (callback) => Promise.resolve(candidate).finally(callback);\n  let withResponse = false;\n  if (candidate.withResponse) {\n    const original = candidate.withResponse.bind(candidate);\n    candidate.withResponse = () => {\n      withResponse = true;\n      return original().then((value) => {\n        onValue(value.data);\n        return value;\n      }, failure);\n    };\n  }\n  if (candidate.asResponse) {\n    const original = candidate.asResponse.bind(candidate);\n    candidate.asResponse = () => original().then((response) => {\n      if (!withResponse) onRaw(response);\n      return response;\n    }, failure);\n  }\n  if (!candidate.asResponse)\n    void then(success, (error) => {\n      onError(error);\n    });\n}\nfunction observeSpeech(response, params, span, first) {\n  const responseContentType = response.headers.get(\"content-type\")?.split(\";\")[0];\n  const isSSE = responseContentType === \"text/event-stream\";\n  const contentType = !isSSE && responseContentType !== \"application/octet-stream\" && responseContentType || AUDIO_TYPES.get(params.response_format ?? \"mp3\") || \"\";\n  const decoder2 = new TextDecoder();\n  let pendingEvents = \"\";\n  let observedEvents = false;\n  let speechDone = false;\n  const speechAudio = [];\n  const consumeEvents = (text) => {\n    observedEvents = true;\n    pendingEvents += text.replace(/\\r\\n/g, \"\\n\");\n    let end;\n    while ((end = pendingEvents.indexOf(\"\\n\\n\")) !== -1) {\n      const block = pendingEvents.slice(0, end);\n      pendingEvents = pendingEvents.slice(end + 2);\n      const data = block.split(\"\\n\").filter((line) => line.startsWith(\"data:\")).map((line) => line.slice(5).trimStart()).join(\"\\n\");\n      if (!data || data === \"[DONE]\") continue;\n      const event = JSON.parse(data);\n      if (event.type === \"speech.audio.delta\" && event.audio) {\n        const audio = convertDataToBlob(event.audio, contentType);\n        if (audio) {\n          speechAudio.push(audio);\n          first();\n        }\n      }\n      if (event.type === \"speech.audio.done\") {\n        speechDone = true;\n        span.log({ metrics: mediaUsage(event.usage) });\n      }\n    }\n  };\n  const observeBytes = (bytes) => {\n    if (isSSE) consumeEvents(decoder2.decode(bytes, { stream: true }));\n    else if (bytes.byteLength) first();\n  };\n  const filename = response.headers.get(\"content-disposition\")?.match(/filename=\"?([^\";]+)/)?.[1] ?? `speech.${[...AUDIO_TYPES].find(([, type]) => type === contentType)?.[0] ?? getExtensionFromMediaType(contentType)}`;\n  let completed = false;\n  let cancelled = false;\n  const finish = async (blob) => {\n    if (completed || cancelled || !contentType) return;\n    completed = true;\n    if (isSSE) {\n      if (!observedEvents) consumeEvents(await blob.text());\n      consumeEvents(decoder2.decode() + \"\\n\\n\");\n      if (!speechDone || !speechAudio.length) return;\n      blob = new Blob(speechAudio, { type: contentType });\n    } else if (blob.size) first();\n    span.log({\n      metrics: { end: getCurrentUnixTimestamp() },\n      output: {\n        content: [\n          {\n            type: \"file\",\n            file: {\n              filename,\n              file_data: new Attachment({ data: blob, contentType, filename }),\n              byte_size: blob.size\n            }\n          }\n        ]\n      }\n    });\n  };\n  for (const method of [\"arrayBuffer\", \"blob\"]) {\n    const original = response[method].bind(response);\n    Object.defineProperty(response, method, {\n      configurable: true,\n      value: async () => {\n        let value;\n        try {\n          value = await original();\n        } catch (error) {\n          cancelled = true;\n          try {\n            span.log({ error });\n          } catch {\n          }\n          throw error;\n        }\n        try {\n          await finish(\n            value instanceof Blob ? value : new Blob([value], { type: contentType })\n          );\n        } catch (error) {\n          debugLogger.debug(\"OpenAI speech capture failed\", error);\n        }\n        return value;\n      }\n    });\n  }\n  const body = response.body;\n  if (!body) return;\n  const chunks = [];\n  if (typeof body.cancel === \"function\") {\n    const cancel = body.cancel.bind(body);\n    body.cancel = (...args) => {\n      const result = cancel(...args);\n      cancelled = true;\n      chunks.length = 0;\n      return result;\n    };\n  }\n  if (!(\"getReader\" in body)) {\n    const nodeBody = body;\n    const emit2 = nodeBody.emit;\n    nodeBody.emit = function(event, ...args) {\n      try {\n        if (event === \"data\") {\n          const blob = convertDataToBlob(args[0], contentType);\n          if (blob) {\n            chunks.push(blob);\n            if (args[0] instanceof Uint8Array) observeBytes(args[0]);\n          }\n        }\n        if (event === \"end\")\n          void finish(new Blob(chunks, { type: contentType })).catch(\n            (error) => debugLogger.debug(\"OpenAI speech capture failed\", error)\n          );\n        if (event === \"error\" || event === \"close\") {\n          cancelled = true;\n          chunks.length = 0;\n          if (event === \"error\") span.log({ error: args[0] });\n        }\n      } catch (error) {\n        debugLogger.debug(\"OpenAI speech capture failed\", error);\n      }\n      return emit2.call(this, event, ...args);\n    };\n    return;\n  }\n  const originalGetReader = body.getReader.bind(body);\n  Object.defineProperty(body, \"getReader\", {\n    configurable: true,\n    value: (...args) => {\n      const reader = originalGetReader(...args);\n      const read4 = reader.read.bind(reader);\n      const cancel = reader.cancel.bind(reader);\n      reader.cancel = (...args2) => {\n        const result = cancel(...args2);\n        cancelled = true;\n        chunks.length = 0;\n        return result;\n      };\n      Object.defineProperty(reader, \"read\", {\n        configurable: true,\n        value: (...readArgs) => Reflect.apply(read4, reader, readArgs).then(\n          async (result) => {\n            try {\n              if (result.done)\n                await finish(new Blob(chunks, { type: contentType }));\n              else {\n                observeBytes(result.value);\n                const value = result.value;\n                chunks.push(\n                  new Blob([\n                    new Uint8Array(\n                      value.buffer,\n                      value.byteOffset,\n                      value.byteLength\n                    )\n                  ])\n                );\n              }\n            } catch (error) {\n              debugLogger.debug(\"OpenAI speech capture failed\", error);\n            }\n            return result;\n          },\n          (error) => {\n            cancelled = true;\n            chunks.length = 0;\n            try {\n              span.log({ error });\n            } catch {\n            }\n            throw error;\n          }\n        )\n      });\n      return reader;\n    }\n  });\n  const pipeThrough = body.pipeThrough.bind(body);\n  const pipeTo = body.pipeTo.bind(body);\n  Object.defineProperty(body, \"pipeTo\", {\n    configurable: true,\n    value: (destination, options) => {\n      if (!(destination instanceof WritableStream) || destination.locked || body.locked)\n        return pipeTo(destination, options);\n      const observer = new TransformStream({\n        transform(chunk, controller) {\n          try {\n            observeBytes(chunk);\n            chunks.push(new Blob([chunk]));\n          } catch (error) {\n            debugLogger.debug(\"OpenAI speech capture failed\", error);\n          }\n          controller.enqueue(chunk);\n        }\n      });\n      return pipeThrough(observer).pipeTo(destination, options).then(\n        async () => {\n          try {\n            await finish(new Blob(chunks, { type: contentType }));\n          } catch (error) {\n            debugLogger.debug(\"OpenAI speech capture failed\", error);\n          }\n        },\n        (error) => {\n          cancelled = true;\n          chunks.length = 0;\n          try {\n            span.log({ error });\n          } catch {\n          }\n          throw error;\n        }\n      );\n    }\n  });\n  Object.defineProperty(body, \"pipeThrough\", {\n    configurable: true,\n    value: (transform, options) => {\n      if (!transform || !(transform.readable instanceof ReadableStream) || !(transform.writable instanceof WritableStream) || transform.writable.locked || body.locked)\n        return pipeThrough(transform, options);\n      const observer = new TransformStream({\n        transform(chunk, controller) {\n          try {\n            observeBytes(chunk);\n            chunks.push(new Blob([chunk]));\n          } catch (error) {\n            debugLogger.debug(\"OpenAI speech capture failed\", error);\n          }\n          controller.enqueue(chunk);\n        },\n        async flush() {\n          try {\n            await finish(new Blob(chunks, { type: contentType }));\n          } catch (error) {\n            debugLogger.debug(\"OpenAI speech capture failed\", error);\n          }\n        }\n      });\n      return pipeThrough(observer).pipeThrough(transform, options);\n    }\n  });\n  patchStreamIfNeeded(body, {\n    onChunk: (chunk) => {\n      observeBytes(chunk);\n      chunks.push(new Blob([chunk]));\n    },\n    onComplete: () => finish(new Blob(chunks, { type: contentType })),\n    onCancel: () => {\n      cancelled = true;\n      chunks.length = 0;\n    },\n    onError: (error) => {\n      cancelled = true;\n      chunks.length = 0;\n      span.log({ error });\n    }\n  });\n  if (\"values\" in body)\n    Object.defineProperty(body, \"values\", {\n      configurable: true,\n      value: Reflect.get(body, Symbol.asyncIterator)\n    });\n}\nfunction interceptOpenAIMedia(channel2, operation) {\n  return channel2.intercept((target, thisArg, args, additional) => {\n    if (isAutoInstrumentationSuppressed()) return target.apply(thisArg, args);\n    const params = args[0];\n    const captureAttachments = isAutoCaptureAttachmentsEnabled();\n    let span;\n    try {\n      const { name, spanAttributes, spanInfoMetadata } = buildStartSpanArgs(\n        { name: `openai.${channel2.channelName}`, type: \"llm\" },\n        { arguments: args, span_info: additional.span_info }\n      );\n      span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name,\n            spanAttributes,\n            event: {\n              metadata: mergeInputMetadata(\n                {\n                  // Provider defaults can change independently of the SDK version.\n                  model: params.model ?? (operation === \"variation\" ? \"dall-e-2\" : void 0),\n                  provider: \"openai\"\n                },\n                spanInfoMetadata\n              )\n            }\n          },\n          INSTRUMENTATION_NAMES.OPENAI\n        )\n      );\n    } catch (error) {\n      debugLogger.debug(\"OpenAI media span failed\", error);\n      return target.apply(thisArg, args);\n    }\n    void mediaInput(params, operation, captureAttachments).then((input) => span.log({ input })).catch((error) => debugLogger.debug(\"OpenAI media input failed\", error));\n    const start = getCurrentUnixTimestamp();\n    let seen = false;\n    let ended = false;\n    const first = () => {\n      if (!seen) {\n        seen = true;\n        span.log({\n          metrics: { time_to_first_token: getCurrentUnixTimestamp() - start }\n        });\n      }\n    };\n    const finish = (result2, error) => {\n      if (ended) return;\n      ended = true;\n      try {\n        if (result2 !== void 0)\n          span.log({\n            output: mediaOutput(result2, params, captureAttachments),\n            ...typeof result2 === \"object\" ? {\n              metrics: mediaUsage(result2.usage),\n              ...result2.model ? { metadata: { model: result2.model } } : {}\n            } : {}\n          });\n        if (error !== void 0) span.log({ error });\n      } catch (error2) {\n        debugLogger.debug(\"OpenAI media output failed\", error2);\n      } finally {\n        try {\n          span.end();\n        } catch (error2) {\n          debugLogger.debug(\"OpenAI media finalization failed\", error2);\n        }\n      }\n    };\n    let observed = false;\n    const onValue = (value) => {\n      if (observed) return;\n      observed = true;\n      try {\n        if (value instanceof Response || isObject(value) && typeof Reflect.get(value, \"arrayBuffer\") === \"function\" && Reflect.get(value, \"headers\")) {\n          span.log({ output: { content: [] } });\n          if (captureAttachments)\n            observeSpeech(value, params, span, first);\n          finish();\n        } else if (isAsyncIterable(value)) {\n          const accumulated = {};\n          const audio = [];\n          patchStreamIfNeeded(value, {\n            onChunk: (event) => {\n              if (event.b64_json || event.audio || event.delta || event.text)\n                first();\n              if (event.usage) accumulated.usage = event.usage;\n              if (event.model) accumulated.model = event.model;\n              if (event.type.endsWith(\".completed\") && event.b64_json) {\n                accumulated.data = [\n                  ...accumulated.data ?? [],\n                  {\n                    b64_json: captureAttachments ? event.b64_json : \"<omitted>\"\n                  }\n                ];\n                accumulated.output_format = event.output_format;\n              }\n              if (event.type === \"transcript.text.delta\")\n                accumulated.text = (accumulated.text ?? \"\") + (event.delta ?? \"\");\n              if (event.type === \"transcript.text.done\")\n                accumulated.text = event.text ?? accumulated.text;\n              if (event.type === \"transcript.text.segment\")\n                accumulated.segments = [...accumulated.segments ?? [], event];\n              if (captureAttachments && event.audio) {\n                const blob = convertDataToBlob(\n                  event.audio,\n                  AUDIO_TYPES.get(params.response_format ?? \"mp3\") ?? \"application/octet-stream\"\n                );\n                if (blob) audio.push(blob);\n              }\n            },\n            onComplete: () => {\n              finish(accumulated);\n              if (captureAttachments && audio.length) {\n                const contentType = AUDIO_TYPES.get(params.response_format ?? \"mp3\") ?? \"application/octet-stream\";\n                const filename = `speech.${params.response_format ?? \"mp3\"}`;\n                span.log({\n                  output: {\n                    content: [\n                      {\n                        type: \"file\",\n                        file: {\n                          filename,\n                          file_data: new Attachment({\n                            data: new Blob(audio, { type: contentType }),\n                            contentType,\n                            filename\n                          })\n                        }\n                      }\n                    ]\n                  }\n                });\n              }\n            },\n            onCancel: () => finish(accumulated),\n            onError: (error) => finish(accumulated, error)\n          });\n        } else finish(value);\n      } catch (error) {\n        debugLogger.debug(\"OpenAI media observation failed\", error);\n        finish();\n      }\n    };\n    let result;\n    try {\n      result = withCurrent(\n        span,\n        () => runWithAutoInstrumentationSuppressed(() => target.apply(thisArg, args))\n      );\n    } catch (error) {\n      finish(void 0, error);\n      throw error;\n    }\n    try {\n      observeMediaPromise(\n        result,\n        onValue,\n        (error) => finish(void 0, error),\n        (response) => {\n          if (operation === \"speech\") onValue(response);\n          else finish();\n        }\n      );\n    } catch (error) {\n      debugLogger.debug(\"OpenAI media promise observation failed\", error);\n      finish();\n    }\n    return result;\n  });\n}\n\n// src/instrumentation/core/channel-tracing.ts\nfunction isSyncStreamLike(value) {\n  return !!value && typeof value === \"object\" && typeof value.on === \"function\";\n}\nfunction hasChoices(value) {\n  return !!value && typeof value === \"object\" && \"choices\" in value;\n}\nfunction normalizeMetadata(metadata) {\n  return isObject(metadata) ? metadata : void 0;\n}\nfunction startSpanForEvent(config, event, channelName, instrumentationName) {\n  const { name, spanAttributes, spanInfoMetadata } = buildStartSpanArgs(\n    config,\n    event\n  );\n  const spanArgs = withSpanInstrumentationName(\n    {\n      name,\n      spanAttributes\n    },\n    instrumentationName\n  );\n  let span;\n  try {\n    span = config.startSpan?.(spanArgs) ?? startSpan(spanArgs);\n  } catch (error) {\n    debugLogger.error(`Error starting span for ${channelName}:`, error);\n    span = startSpan(spanArgs);\n  }\n  const startTime = getCurrentUnixTimestamp();\n  try {\n    const { input, metadata } = config.extractInput(\n      event.arguments,\n      event,\n      span\n    );\n    span.log({\n      input,\n      metadata: mergeInputMetadata(metadata, spanInfoMetadata)\n    });\n  } catch (error) {\n    debugLogger.error(`Error extracting input for ${channelName}:`, error);\n  }\n  return { span, startTime };\n}\nfunction shouldTraceEvent(config, event, channelName) {\n  if (!config.shouldTrace) {\n    return true;\n  }\n  try {\n    return config.shouldTrace(event.arguments, event);\n  } catch (error) {\n    debugLogger.error(\n      `Error checking trace predicate for ${channelName}:`,\n      error\n    );\n    return true;\n  }\n}\nfunction ensureSpanStateForEvent(states, config, event, channelName, instrumentationName) {\n  const key = event;\n  const existing = states.get(key);\n  if (existing) {\n    return existing;\n  }\n  if (!shouldTraceEvent(config, event, channelName)) {\n    return void 0;\n  }\n  const created = startSpanForEvent(\n    config,\n    event,\n    channelName,\n    instrumentationName\n  );\n  states.set(key, created);\n  return created;\n}\nfunction bindCurrentSpanStoreToStart(tracingChannel, states, config, channelName, instrumentationName) {\n  const state = _internalGetGlobalState();\n  const startChannel = tracingChannel.start;\n  const contextManager = state?.contextManager;\n  const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n  if (!currentSpanStore || !startChannel) {\n    return void 0;\n  }\n  startChannel.bindStore(\n    currentSpanStore,\n    (event) => {\n      if (isAutoInstrumentationSuppressed()) {\n        return currentSpanStore.getStore();\n      }\n      const spanState = ensureSpanStateForEvent(\n        states,\n        config,\n        event,\n        channelName,\n        instrumentationName\n      );\n      return spanState ? contextManager.wrapSpanForStore(spanState.span) : currentSpanStore.getStore();\n    }\n  );\n  return () => {\n    startChannel.unbindStore(currentSpanStore);\n  };\n}\nfunction logErrorAndEnd(states, event, channelName) {\n  const spanData = states.get(event);\n  if (!spanData) {\n    return;\n  }\n  try {\n    spanData.span.log({ error: event.error });\n  } catch (error) {\n    debugLogger.error(`Error logging failure for ${channelName}:`, error);\n  }\n  try {\n    spanData.span.end();\n  } catch (error) {\n    debugLogger.error(`Error ending span for ${channelName}:`, error);\n  }\n  states.delete(event);\n}\nfunction runStreamingCompletionHook(args) {\n  if (!args.config.onComplete) {\n    return;\n  }\n  try {\n    args.config.onComplete({\n      channelName: args.channelName,\n      ...args.chunks ? { chunks: args.chunks } : {},\n      endEvent: args.endEvent,\n      ...args.metadata !== void 0 ? { metadata: args.metadata } : {},\n      metrics: args.metrics,\n      output: args.output,\n      result: args.result,\n      span: args.span,\n      startTime: args.startTime\n    });\n  } catch (error) {\n    debugLogger.error(\n      `Error in onComplete hook for ${args.channelName}:`,\n      error\n    );\n  }\n}\nfunction runStreamingErrorHook(args) {\n  if (!args.config.onError) {\n    return;\n  }\n  try {\n    args.config.onError({\n      channelName: args.channelName,\n      error: args.error,\n      event: args.event,\n      span: args.span,\n      startTime: args.startTime\n    });\n  } catch (error) {\n    debugLogger.error(`Error in onError hook for ${args.channelName}:`, error);\n  }\n}\nfunction traceAsyncChannel(channel2, config) {\n  const tracingChannel = channel2.tracingChannel();\n  const states = /* @__PURE__ */ new WeakMap();\n  const channelName = channel2.channelName;\n  const unbindCurrentSpanStore = bindCurrentSpanStoreToStart(\n    tracingChannel,\n    states,\n    config,\n    channelName,\n    channel2.instrumentationName\n  );\n  const handlers = {\n    start: (event) => {\n      if (isAutoInstrumentationSuppressed()) {\n        return;\n      }\n      ensureSpanStateForEvent(\n        states,\n        config,\n        event,\n        channelName,\n        channel2.instrumentationName\n      );\n    },\n    asyncEnd: (event) => {\n      const spanData = states.get(event);\n      if (!spanData) {\n        return;\n      }\n      const asyncEndEvent = event;\n      const { span, startTime } = spanData;\n      try {\n        const output = config.extractOutput(\n          asyncEndEvent.result,\n          asyncEndEvent\n        );\n        const metrics = config.extractMetrics(\n          asyncEndEvent.result,\n          startTime,\n          asyncEndEvent\n        );\n        const metadata = config.extractMetadata?.(\n          asyncEndEvent.result,\n          asyncEndEvent\n        );\n        span.log({\n          output,\n          ...normalizeMetadata(metadata) !== void 0 ? { metadata: normalizeMetadata(metadata) } : {},\n          metrics\n        });\n      } catch (error) {\n        debugLogger.error(`Error extracting output for ${channelName}:`, error);\n      } finally {\n        span.end();\n        states.delete(event);\n      }\n    },\n    error: (event) => {\n      logErrorAndEnd(states, event, channelName);\n    }\n  };\n  tracingChannel.subscribe(handlers);\n  return () => {\n    unbindCurrentSpanStore?.();\n    tracingChannel.unsubscribe(handlers);\n  };\n}\nfunction traceStreamingChannel(channel2, config) {\n  const tracingChannel = channel2.tracingChannel();\n  const states = /* @__PURE__ */ new WeakMap();\n  const channelName = channel2.channelName;\n  const unbindCurrentSpanStore = bindCurrentSpanStoreToStart(\n    tracingChannel,\n    states,\n    config,\n    channelName,\n    channel2.instrumentationName\n  );\n  const handlers = {\n    start: (event) => {\n      if (isAutoInstrumentationSuppressed()) {\n        return;\n      }\n      ensureSpanStateForEvent(\n        states,\n        config,\n        event,\n        channelName,\n        channel2.instrumentationName\n      );\n    },\n    asyncEnd: (event) => {\n      const spanData = states.get(event);\n      if (!spanData) {\n        return;\n      }\n      const asyncEndEvent = event;\n      const { span, startTime } = spanData;\n      if (isAsyncIterable(asyncEndEvent.result)) {\n        let firstChunkTime;\n        const handleStreamError = (error) => {\n          try {\n            span.log({ error });\n          } catch (loggingError) {\n            debugLogger.error(\n              `Error logging failure for ${channelName}:`,\n              loggingError\n            );\n          }\n          try {\n            span.end();\n          } catch (endingError) {\n            debugLogger.error(\n              `Error ending span for ${channelName}:`,\n              endingError\n            );\n          }\n          states.delete(event);\n          runStreamingErrorHook({\n            channelName,\n            config,\n            error,\n            event: asyncEndEvent,\n            span,\n            startTime\n          });\n        };\n        patchStreamIfNeeded(asyncEndEvent.result, {\n          onChunk: () => {\n            if (firstChunkTime === void 0) {\n              firstChunkTime = getCurrentUnixTimestamp();\n            }\n          },\n          onComplete: (chunks) => {\n            let completion2;\n            try {\n              let output;\n              let metrics;\n              let metadata;\n              let error;\n              if (config.aggregateChunks) {\n                const aggregated = config.aggregateChunks(\n                  chunks,\n                  asyncEndEvent.result,\n                  asyncEndEvent,\n                  startTime\n                );\n                output = aggregated.output;\n                metrics = aggregated.metrics;\n                metadata = aggregated.metadata;\n                error = aggregated.error;\n              } else {\n                output = config.extractOutput(\n                  chunks,\n                  asyncEndEvent\n                );\n                metrics = config.extractMetrics(\n                  chunks,\n                  startTime,\n                  asyncEndEvent\n                );\n              }\n              if (metrics.time_to_first_token === void 0 && firstChunkTime !== void 0) {\n                metrics.time_to_first_token = firstChunkTime - startTime;\n              } else if (metrics.time_to_first_token === void 0 && chunks.length > 0) {\n                metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n              }\n              completion2 = {\n                ...metadata !== void 0 ? { metadata } : {},\n                metrics,\n                output\n              };\n              span.log({\n                output,\n                ...metadata !== void 0 ? { metadata } : {},\n                metrics,\n                ...error !== void 0 ? { error } : {}\n              });\n            } catch (error) {\n              debugLogger.error(\n                `Error extracting output for ${channelName}:`,\n                error\n              );\n            } finally {\n              try {\n                span.end();\n              } catch (error) {\n                debugLogger.error(\n                  `Error ending span for ${channelName}:`,\n                  error\n                );\n              }\n              states.delete(event);\n            }\n            if (completion2) {\n              runStreamingCompletionHook({\n                channelName,\n                chunks,\n                config,\n                endEvent: asyncEndEvent,\n                ...completion2.metadata !== void 0 ? { metadata: completion2.metadata } : {},\n                metrics: completion2.metrics,\n                output: completion2.output,\n                result: asyncEndEvent.result,\n                span,\n                startTime\n              });\n            }\n          },\n          onCancel: () => {\n            const error = new Error(\"Stream cancelled before completion\");\n            error.name = \"AbortError\";\n            handleStreamError(error);\n          },\n          onError: handleStreamError\n        });\n        return;\n      }\n      if (config.patchResult?.({\n        channelName,\n        endEvent: asyncEndEvent,\n        result: asyncEndEvent.result,\n        span,\n        startTime\n      })) {\n        states.delete(event);\n        return;\n      }\n      let completion;\n      try {\n        const output = config.extractOutput(\n          asyncEndEvent.result,\n          asyncEndEvent\n        );\n        const metrics = config.extractMetrics(\n          asyncEndEvent.result,\n          startTime,\n          asyncEndEvent\n        );\n        const metadata = config.extractMetadata?.(\n          asyncEndEvent.result,\n          asyncEndEvent\n        );\n        completion = {\n          ...normalizeMetadata(metadata) !== void 0 ? { metadata: normalizeMetadata(metadata) } : {},\n          metrics,\n          output\n        };\n        span.log({\n          output,\n          ...normalizeMetadata(metadata) !== void 0 ? { metadata: normalizeMetadata(metadata) } : {},\n          metrics\n        });\n      } catch (error) {\n        debugLogger.error(`Error extracting output for ${channelName}:`, error);\n      } finally {\n        try {\n          span.end();\n        } catch (error) {\n          debugLogger.error(`Error ending span for ${channelName}:`, error);\n        }\n        states.delete(event);\n      }\n      if (completion) {\n        runStreamingCompletionHook({\n          channelName,\n          config,\n          endEvent: asyncEndEvent,\n          ...completion.metadata !== void 0 ? { metadata: completion.metadata } : {},\n          metrics: completion.metrics,\n          output: completion.output,\n          result: asyncEndEvent.result,\n          span,\n          startTime\n        });\n      }\n    },\n    error: (event) => {\n      const spanData = states.get(event);\n      logErrorAndEnd(states, event, channelName);\n      if (spanData) {\n        runStreamingErrorHook({\n          channelName,\n          config,\n          error: event.error,\n          event,\n          span: spanData.span,\n          startTime: spanData.startTime\n        });\n      }\n    }\n  };\n  tracingChannel.subscribe(handlers);\n  return () => {\n    unbindCurrentSpanStore?.();\n    tracingChannel.unsubscribe(handlers);\n  };\n}\nfunction traceSyncStreamChannel(channel2, config) {\n  const tracingChannel = channel2.tracingChannel();\n  const states = /* @__PURE__ */ new WeakMap();\n  const channelName = channel2.channelName;\n  const unbindCurrentSpanStore = bindCurrentSpanStoreToStart(\n    tracingChannel,\n    states,\n    config,\n    channelName,\n    channel2.instrumentationName\n  );\n  const handlers = {\n    start: (event) => {\n      if (isAutoInstrumentationSuppressed()) {\n        return;\n      }\n      ensureSpanStateForEvent(\n        states,\n        config,\n        event,\n        channelName,\n        channel2.instrumentationName\n      );\n    },\n    end: (event) => {\n      const spanData = states.get(event);\n      if (!spanData) {\n        return;\n      }\n      const { span, startTime } = spanData;\n      const endEvent = event;\n      const handleResolvedResult = (result) => {\n        const resolvedEndEvent = {\n          ...endEvent,\n          result\n        };\n        if (config.patchResult?.({\n          channelName,\n          endEvent: resolvedEndEvent,\n          result,\n          span,\n          startTime\n        })) {\n          return;\n        }\n        const stream = result;\n        if (!isSyncStreamLike(stream)) {\n          span.end();\n          states.delete(event);\n          return;\n        }\n        let first = true;\n        stream.on(\"chunk\", () => {\n          if (first) {\n            span.log({\n              metrics: {\n                time_to_first_token: getCurrentUnixTimestamp() - startTime\n              }\n            });\n            first = false;\n          }\n        });\n        stream.on(\"chatCompletion\", (completion) => {\n          try {\n            if (hasChoices(completion)) {\n              span.log({\n                output: completion.choices\n              });\n            }\n          } catch (error) {\n            debugLogger.error(\n              `Error extracting chatCompletion for ${channelName}:`,\n              error\n            );\n          }\n        });\n        stream.on(\"event\", (streamEvent) => {\n          if (!config.extractFromEvent) {\n            return;\n          }\n          try {\n            if (first) {\n              span.log({\n                metrics: {\n                  time_to_first_token: getCurrentUnixTimestamp() - startTime\n                }\n              });\n              first = false;\n            }\n            const extracted = config.extractFromEvent(streamEvent);\n            if (extracted && Object.keys(extracted).length > 0) {\n              span.log(extracted);\n            }\n          } catch (error) {\n            debugLogger.error(\n              `Error extracting event for ${channelName}:`,\n              error\n            );\n          }\n        });\n        stream.on(\"end\", () => {\n          span.end();\n          states.delete(event);\n        });\n        stream.on(\"error\", (error) => {\n          span.log({\n            error: error.message\n          });\n          span.end();\n          states.delete(event);\n        });\n      };\n      handleResolvedResult(endEvent.result);\n    },\n    error: (event) => {\n      logErrorAndEnd(states, event, channelName);\n    }\n  };\n  tracingChannel.subscribe(handlers);\n  return () => {\n    unbindCurrentSpanStore?.();\n    tracingChannel.unsubscribe(handlers);\n  };\n}\nfunction unsubscribeAll(unsubscribers) {\n  for (const unsubscribe of unsubscribers) {\n    unsubscribe();\n  }\n  return [];\n}\n\n// src/instrumentation/core/channel-definitions.ts\nfunction channel(spec) {\n  return spec;\n}\nfunction defineChannels(pkg, channels, options) {\n  const { instrumentationName } = options;\n  return Object.fromEntries(\n    Object.entries(channels).map(([key, spec]) => {\n      const fullChannelName = `orchestrion:${pkg}:${spec.channelName}`;\n      if (spec.kind === \"async\") {\n        const asyncSpec = spec;\n        const tracingChannel2 = () => isomorph_default.newTracingChannel(\n          fullChannelName\n        );\n        const intercept2 = (interceptor) => {\n          const hook = tracingChannel2();\n          return typeof hook.intercept === \"function\" ? hook.intercept(interceptor) : () => {\n          };\n        };\n        return [\n          key,\n          {\n            ...asyncSpec,\n            instrumentationName,\n            intercept: intercept2,\n            invoke: (target, thisArg, args, additional) => {\n              const hook = tracingChannel2();\n              return typeof hook.invoke === \"function\" ? hook.invoke(target, thisArg, args, additional) : Reflect.apply(target, thisArg, args);\n            },\n            tracingChannel: tracingChannel2,\n            tracePromise: (fn, context) => tracingChannel2().tracePromise(\n              fn,\n              // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n              context\n            )\n          }\n        ];\n      }\n      const syncSpec = spec;\n      const tracingChannel = () => isomorph_default.newTracingChannel(\n        fullChannelName\n      );\n      const intercept = (interceptor) => {\n        const hook = tracingChannel();\n        return typeof hook.intercept === \"function\" ? hook.intercept(interceptor) : () => {\n        };\n      };\n      return [\n        key,\n        {\n          ...syncSpec,\n          instrumentationName,\n          intercept,\n          invoke: (target, thisArg, args, additional) => {\n            const hook = tracingChannel();\n            return typeof hook.invoke === \"function\" ? hook.invoke(target, thisArg, args, additional) : Reflect.apply(target, thisArg, args);\n          },\n          tracingChannel,\n          traceSync: (fn, context) => tracingChannel().traceSync(\n            fn,\n            // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n            context\n          )\n        }\n      ];\n    })\n  );\n}\n\n// src/instrumentation/plugins/openai-channels.ts\nvar openAIChannels = defineChannels(\n  \"openai\",\n  {\n    imagesGenerate: channel({ channelName: \"images.generate\", kind: \"async\" }),\n    imagesEdit: channel({ channelName: \"images.edit\", kind: \"async\" }),\n    imagesCreateVariation: channel({ channelName: \"images.createVariation\", kind: \"async\" }),\n    audioSpeechCreate: channel({ channelName: \"audio.speech.create\", kind: \"async\" }),\n    audioTranscriptionsCreate: channel({ channelName: \"audio.transcriptions.create\", kind: \"async\" }),\n    audioTranslationsCreate: channel({ channelName: \"audio.translations.create\", kind: \"async\" }),\n    agentsTraceStart: channel({\n      channelName: \"agents.trace.start\",\n      kind: \"async\"\n    }),\n    agentsTraceCapture: channel({\n      channelName: \"agents.trace.capture\",\n      kind: \"async\"\n    }),\n    agentsTraceFail: channel({\n      channelName: \"agents.trace.fail\",\n      kind: \"async\"\n    }),\n    filesCreateTraced: channel({\n      channelName: \"files.create-traced\",\n      kind: \"async\"\n    }),\n    batchesRetrieveTraced: channel({\n      channelName: \"batches.retrieve-traced\",\n      kind: \"async\"\n    }),\n    batchesCompleteTrace: channel({\n      channelName: \"batches.complete-trace\",\n      kind: \"async\"\n    }),\n    chatCompletionsCreate: channel({\n      channelName: \"chat.completions.create\",\n      kind: \"async\"\n    }),\n    embeddingsCreate: channel({\n      channelName: \"embeddings.create\",\n      kind: \"async\"\n    }),\n    betaChatCompletionsParse: channel({\n      channelName: \"beta.chat.completions.parse\",\n      kind: \"async\"\n    }),\n    betaChatCompletionsStream: channel({\n      channelName: \"beta.chat.completions.stream\",\n      kind: \"sync-stream\"\n    }),\n    moderationsCreate: channel({\n      channelName: \"moderations.create\",\n      kind: \"async\"\n    }),\n    responsesCreate: channel({\n      channelName: \"responses.create\",\n      kind: \"async\"\n    }),\n    responsesStream: channel({\n      channelName: \"responses.stream\",\n      kind: \"sync-stream\"\n    }),\n    responsesParse: channel({\n      channelName: \"responses.parse\",\n      kind: \"async\"\n    }),\n    responsesCompact: channel({\n      channelName: \"responses.compact\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.OPENAI }\n);\n\n// src/instrumentation/plugins/openai-span-data.ts\nvar OPENAI_METADATA_KEYS = [\n  \"model\",\n  \"temperature\",\n  \"top_p\",\n  \"max_tokens\",\n  \"frequency_penalty\",\n  \"presence_penalty\",\n  \"stop\",\n  \"response_format\",\n  \"tools\",\n  \"tool_choice\",\n  \"parallel_tool_calls\",\n  \"max_tool_calls\"\n];\nfunction batchMetadata(params) {\n  const metadata = { provider: \"openai\" };\n  for (const key of OPENAI_METADATA_KEYS) {\n    try {\n      const value = Reflect.get(params, key);\n      if (value !== void 0) {\n        metadata[key] = value;\n      }\n    } catch {\n    }\n  }\n  return metadata;\n}\nfunction extractOpenAIBatchInput(endpoint, params) {\n  if (endpoint === \"/v1/embeddings\") {\n    const inputs = Array.isArray(params.input) && typeof params.input[0] !== \"number\" ? params.input : [params.input];\n    return {\n      input: {\n        inputs: inputs.map((content) => ({ content })),\n        ...params.dimensions !== void 0 ? { output_dimensions: params.dimensions } : {}\n      },\n      metadata: { provider: \"openai\", model: params.model }\n    };\n  }\n  const input = endpoint === \"/v1/chat/completions\" ? params.messages : params.input;\n  return {\n    input: processInputAttachments(input, isAutoCaptureAttachmentsEnabled()),\n    metadata: batchMetadata(params)\n  };\n}\nfunction extractOpenAIChatInput(params) {\n  const { messages, ...metadata } = params;\n  return {\n    input: processInputAttachments(messages, isAutoCaptureAttachmentsEnabled()),\n    metadata: { ...metadata, provider: \"openai\" }\n  };\n}\nfunction extractOpenAIResponsesInput(params) {\n  const { input, ...metadata } = params;\n  return {\n    input: processInputAttachments(input, isAutoCaptureAttachmentsEnabled()),\n    metadata: { ...metadata, provider: \"openai\" }\n  };\n}\nfunction extractOpenAIResponsesMetadata(result) {\n  if (!result) {\n    return void 0;\n  }\n  const { output: _output, usage: _usage, ...metadata } = result;\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nfunction processImagesInOutput(output, captureAttachments = isAutoCaptureAttachmentsEnabled()) {\n  if (Array.isArray(output)) {\n    return output.map(\n      (item) => processImagesInOutput(item, captureAttachments)\n    );\n  }\n  if (isObject(output) && output.type === \"image_generation_call\" && typeof output.result === \"string\" && output.result) {\n    if (!captureAttachments) {\n      return { ...output, result: \"<omitted>\" };\n    }\n    const fileExtension = output.output_format || \"png\";\n    const contentType = `image/${fileExtension}`;\n    const baseFilename = typeof output.revised_prompt === \"string\" ? output.revised_prompt.slice(0, 50).replace(/[^a-zA-Z0-9]/g, \"_\") : \"generated_image\";\n    let binaryString;\n    try {\n      binaryString = atob(output.result);\n    } catch {\n      return output;\n    }\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    return {\n      ...output,\n      result: new Attachment({\n        data: new Blob([bytes], { type: contentType }),\n        filename: `${baseFilename}.${fileExtension}`,\n        contentType\n      })\n    };\n  }\n  return output;\n}\n\n// src/openai-utils.ts\nvar BRAINTRUST_CACHED_STREAM_METRIC = \"__braintrust_cached_metric\";\nvar LEGACY_CACHED_HEADER = \"x-cached\";\nvar X_CACHED_HEADER = \"x-bt-cached\";\nvar TOKEN_NAME_MAP = {\n  input_tokens: \"prompt_tokens\",\n  output_tokens: \"completion_tokens\",\n  total_tokens: \"tokens\"\n};\nvar TOKEN_PREFIX_MAP = {\n  input: \"prompt\",\n  output: \"completion\"\n};\nfunction parseMetricsFromUsage(usage) {\n  if (!usage) {\n    return {};\n  }\n  const metrics = {};\n  for (const [oaiName, value] of Object.entries(usage)) {\n    if (typeof value === \"number\") {\n      const metricName = TOKEN_NAME_MAP[oaiName] || oaiName;\n      metrics[metricName] = value;\n      continue;\n    }\n    if (!oaiName.endsWith(\"_tokens_details\") || !isObject(value)) {\n      continue;\n    }\n    const rawPrefix = oaiName.slice(0, -\"_tokens_details\".length);\n    const prefix = TOKEN_PREFIX_MAP[rawPrefix] || rawPrefix;\n    for (const [key, nestedValue] of Object.entries(value)) {\n      if (typeof nestedValue !== \"number\") {\n        continue;\n      }\n      metrics[`${prefix}_${key}`] = nestedValue;\n    }\n  }\n  return metrics;\n}\nfunction parseCachedHeader(value) {\n  if (!value) {\n    return void 0;\n  }\n  return [\"true\", \"hit\"].includes(value.toLowerCase()) ? 1 : 0;\n}\nfunction getCachedMetricFromHeaders(headers) {\n  if (!headers || typeof headers.get !== \"function\") {\n    return void 0;\n  }\n  const cachedHeader = headers.get(X_CACHED_HEADER);\n  if (cachedHeader) {\n    return parseCachedHeader(cachedHeader);\n  }\n  return parseCachedHeader(headers.get(LEGACY_CACHED_HEADER));\n}\n\n// src/instrumentation/plugins/openai-manual-instrumentation-utils.ts\nasync function deterministicDigest(namespace, ...parts) {\n  const encoded = new TextEncoder().encode(\n    [namespace, ...parts].map((part) => `${part.length}:${part}`).join(\"\\0\")\n  );\n  return new Uint8Array(\n    await globalThis.crypto.subtle.digest(\"SHA-256\", encoded)\n  );\n}\nfunction digestHex(bytes, length) {\n  return Array.from(bytes.slice(0, length)).map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nfunction digestUuid(bytes) {\n  const hex = digestHex(bytes, 16);\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n// src/instrumentation/plugins/openai-batch-instrumentation.ts\nvar SUPPORTED_ENDPOINTS = /* @__PURE__ */ new Set([\n  \"/v1/chat/completions\",\n  \"/v1/responses\",\n  \"/v1/embeddings\"\n]);\nvar EMBEDDING_METRICS = /* @__PURE__ */ new Set([\n  \"prompt_tokens\",\n  \"tokens\",\n  \"prompt_audio_tokens\",\n  \"estimated_cost\"\n]);\nvar TERMINAL_STATUSES = /* @__PURE__ */ new Set([\n  \"completed\",\n  \"failed\",\n  \"expired\",\n  \"cancelled\"\n]);\nvar pendingBatchTraces = /* @__PURE__ */ new Map();\nfunction read(value, key) {\n  if (!isObject(value)) {\n    return void 0;\n  }\n  try {\n    return Reflect.get(value, key);\n  } catch {\n    return void 0;\n  }\n}\nfunction isBatchRecordIterable(value) {\n  if (value === null || typeof value !== \"object\" && typeof value !== \"function\") {\n    return false;\n  }\n  return typeof read(value, Symbol.iterator) === \"function\" || typeof read(value, Symbol.asyncIterator) === \"function\";\n}\nfunction validCustomId(value) {\n  return typeof value === \"string\" && value.length > 0 && value.length <= 64;\n}\nfunction logBatchInstrumentationError(context, error) {\n  debugLogger.debug(`OpenAI Batch instrumentation ${context}:`, error);\n}\nasync function exportParent(parent) {\n  if (\"toStr\" in parent && typeof parent.toStr === \"function\") {\n    return parent.toStr();\n  }\n  if (\"export\" in parent && typeof parent.export === \"function\") {\n    return await parent.export();\n  }\n  return void 0;\n}\nasync function batchSpanIds(inputFileId) {\n  const [row, span, root] = await Promise.all([\n    deterministicDigest(\"openai:batch:row\", inputFileId),\n    deterministicDigest(\"openai:batch:span\", inputFileId),\n    deterministicDigest(\"openai:batch:root\", inputFileId)\n  ]);\n  return {\n    rowId: digestUuid(row),\n    spanId: digestHex(span, 8),\n    rootSpanId: digestHex(root, 16)\n  };\n}\nasync function childSpanIds(inputFileId, customId) {\n  const [row, span] = await Promise.all([\n    deterministicDigest(\"openai:batch:child:row\", inputFileId, customId),\n    deterministicDigest(\"openai:batch:child:span\", inputFileId, customId)\n  ]);\n  return { rowId: digestUuid(row), spanId: digestHex(span, 8) };\n}\nasync function startBatchSpan(context) {\n  const ids = await batchSpanIds(context.inputFileId);\n  const parent = SpanComponentsV4.fromStr(context.parent);\n  const hasParentSpan = Boolean(\n    parent.data.row_id && parent.data.span_id && parent.data.root_span_id\n  );\n  return withCurrent(\n    NOOP_SPAN,\n    () => _internalStartSpanWithInitialMergeAndParentSpanIds(\n      withSpanInstrumentationName(\n        {\n          name: \"openai.batch\",\n          type: \"task\" /* TASK */,\n          parent: context.parent,\n          ...!hasParentSpan ? {\n            parentSpanIds: {\n              parentSpanIds: [],\n              rootSpanId: ids.rootSpanId\n            }\n          } : {},\n          spanId: ids.spanId,\n          startTime: context.taskStartTime,\n          event: {\n            id: ids.rowId,\n            metadata: {\n              endpoint: context.endpoint,\n              input_file_id: context.inputFileId,\n              provider: \"openai\"\n            }\n          }\n        },\n        INSTRUMENTATION_NAMES.OPENAI\n      )\n    )\n  );\n}\nasync function startBatchChild(context, taskParent, input) {\n  const ids = await childSpanIds(context.inputFileId, input.customId);\n  return withCurrent(\n    NOOP_SPAN,\n    () => _internalStartSpanWithInitialMerge(\n      withSpanInstrumentationName(\n        {\n          name: context.endpoint === \"/v1/chat/completions\" ? \"Chat Completion\" : context.endpoint === \"/v1/embeddings\" ? \"Embedding\" : \"openai.responses.create\",\n          type: \"llm\" /* LLM */,\n          parent: taskParent,\n          spanId: ids.spanId,\n          startTime: context.childStartTime,\n          event: {\n            id: ids.rowId,\n            ...input.spanData?.input !== void 0 ? { input: input.spanData.input } : {},\n            metadata: {\n              ...input.spanData?.metadata,\n              custom_id: input.customId,\n              provider: \"openai\"\n            }\n          }\n        },\n        INSTRUMENTATION_NAMES.OPENAI\n      )\n    )\n  );\n}\nasync function* jsonlRecords(file, onIssue = () => {\n}) {\n  const resolvedFile = await file;\n  if (typeof resolvedFile === \"string\" || resolvedFile instanceof Uint8Array || resolvedFile instanceof ArrayBuffer || typeof Buffer !== \"undefined\" && Buffer.isBuffer(resolvedFile)) {\n    const text = typeof resolvedFile === \"string\" ? resolvedFile : new TextDecoder().decode(resolvedFile);\n    for (const line of text.split(\"\\n\")) {\n      if (!line.trim()) {\n        continue;\n      }\n      try {\n        yield JSON.parse(line.replace(/\\r$/, \"\"));\n      } catch (error) {\n        logBatchInstrumentationError(\"skipped malformed JSONL\", error);\n        onIssue(new Error(\"OpenAI Batch file contains malformed JSONL\"));\n      }\n    }\n    return;\n  }\n  const body = read(resolvedFile, \"body\");\n  const getReader = read(body, \"getReader\");\n  if (isObject(body) && typeof getReader === \"function\") {\n    let reader;\n    try {\n      reader = Reflect.apply(getReader, body, []);\n      const decoder2 = new TextDecoder();\n      let pending = \"\";\n      while (true) {\n        const readChunk = read(reader, \"read\");\n        if (typeof readChunk !== \"function\") {\n          throw new Error(\"Response body stream has no read method\");\n        }\n        const chunk = await Reflect.apply(readChunk, reader, []);\n        if (!isObject(chunk)) {\n          throw new Error(\"Response body stream returned an invalid chunk\");\n        }\n        if (chunk.done === true) {\n          pending += decoder2.decode();\n          break;\n        }\n        if (!(chunk.value instanceof Uint8Array)) {\n          throw new Error(\"Response body stream returned a non-byte chunk\");\n        }\n        pending += decoder2.decode(chunk.value, { stream: true });\n        let newline = pending.indexOf(\"\\n\");\n        while (newline !== -1) {\n          const line = pending.slice(0, newline).replace(/\\r$/, \"\");\n          pending = pending.slice(newline + 1);\n          if (line.trim()) {\n            try {\n              yield JSON.parse(line);\n            } catch (error) {\n              logBatchInstrumentationError(\"skipped malformed JSONL\", error);\n              onIssue(new Error(\"OpenAI Batch file contains malformed JSONL\"));\n            }\n          }\n          newline = pending.indexOf(\"\\n\");\n        }\n      }\n      if (pending.trim()) {\n        try {\n          yield JSON.parse(pending.replace(/\\r$/, \"\"));\n        } catch (error) {\n          logBatchInstrumentationError(\"skipped malformed JSONL\", error);\n          onIssue(new Error(\"OpenAI Batch file contains malformed JSONL\"));\n        }\n      }\n    } catch (error) {\n      logBatchInstrumentationError(\"could not read JSONL response body\", error);\n      onIssue(new Error(\"OpenAI Batch response body could not be read\"));\n    } finally {\n      const releaseLock = read(reader, \"releaseLock\");\n      if (typeof releaseLock === \"function\") {\n        try {\n          Reflect.apply(releaseLock, reader, []);\n        } catch (error) {\n          logBatchInstrumentationError(\n            \"could not release stream reader\",\n            error\n          );\n        }\n      }\n    }\n    return;\n  }\n  if (isBatchRecordIterable(resolvedFile)) {\n    for await (const record of resolvedFile) {\n      yield record;\n    }\n    return;\n  }\n  logBatchInstrumentationError(\"skipped invalid JSONL source\", resolvedFile);\n  onIssue(new Error(\"OpenAI Batch file source is invalid\"));\n}\nasync function readBatchInputs(file) {\n  const inputs = /* @__PURE__ */ new Map();\n  const issues = [];\n  let endpoint;\n  try {\n    for await (const value of jsonlRecords(\n      file,\n      (issue) => issues.push(issue)\n    )) {\n      const customId = read(value, \"custom_id\");\n      const url = read(value, \"url\");\n      const body = read(value, \"body\");\n      if (!validCustomId(customId) || inputs.has(customId) || read(value, \"method\") !== \"POST\" || typeof url !== \"string\" || !SUPPORTED_ENDPOINTS.has(url) || endpoint !== void 0 && endpoint !== url || !isObject(body)) {\n        issues.push(new Error(\"OpenAI Batch input contains an invalid record\"));\n        continue;\n      }\n      endpoint = url;\n      let spanData;\n      try {\n        spanData = extractOpenAIBatchInput(url, body);\n      } catch (error) {\n        logBatchInstrumentationError(\"could not extract batch input\", error);\n      }\n      inputs.set(customId, { customId, spanData });\n    }\n  } catch (error) {\n    logBatchInstrumentationError(\"could not process input file\", error);\n    issues.push(new Error(\"OpenAI Batch input file could not be processed\"));\n  }\n  if (!endpoint || inputs.size === 0) {\n    issues.push(new Error(\"OpenAI Batch input contains no supported records\"));\n  }\n  return { endpoint, inputs, issues };\n}\nasync function writePendingSpans(trace, endTime) {\n  const task = await startBatchSpan(trace.context);\n  const taskParent = await task.export();\n  for (const input of trace.inputs.values()) {\n    try {\n      const child = await startBatchChild(trace.context, taskParent, input);\n      if (endTime !== void 0) {\n        child.end({ endTime });\n      }\n    } catch (error) {\n      logBatchInstrumentationError(\"could not write batch request span\", error);\n    }\n  }\n  if (endTime !== void 0) {\n    if (trace.status && trace.status !== \"completed\") {\n      task.log({ error: new Error(`OpenAI Batch ${trace.status}`) });\n    }\n    task.end({ endTime });\n  }\n}\nvar interceptOpenAIFilesCreateTraced = async (target, thisArg, args) => {\n  const startTime = getCurrentUnixTimestamp();\n  const inputPromise = readBatchInputs(args[0].inputFileContent);\n  const parentPromise = exportParent(args[0].parent);\n  const file = await Reflect.apply(target, thisArg, args);\n  try {\n    const inputFileId = read(file, \"id\");\n    const [inputData, exportedParent2] = await Promise.all([\n      inputPromise,\n      parentPromise\n    ]);\n    if (typeof inputFileId !== \"string\" || !exportedParent2 || !inputData.endpoint || inputData.issues.length > 0) {\n      if (inputData.issues[0]) {\n        logBatchInstrumentationError(\n          \"skipped invalid input file\",\n          inputData.issues[0]\n        );\n      }\n      return file;\n    }\n    const trace = {\n      context: {\n        inputFileId,\n        endpoint: inputData.endpoint,\n        parent: exportedParent2,\n        taskStartTime: startTime,\n        childStartTime: startTime\n      },\n      inputs: inputData.inputs\n    };\n    pendingBatchTraces.set(inputFileId, trace);\n    await writePendingSpans(trace);\n  } catch (error) {\n    logBatchInstrumentationError(\"could not start batch spans\", error);\n  }\n  return file;\n};\nfunction validTimestamp(value) {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\nfunction terminalEndTime(batch, startTime) {\n  let timestamp;\n  switch (batch.status) {\n    case \"completed\":\n      timestamp = batch.completed_at;\n      break;\n    case \"failed\":\n      timestamp = batch.failed_at;\n      break;\n    case \"expired\":\n      timestamp = batch.expired_at;\n      break;\n    default:\n      timestamp = batch.cancelled_at;\n  }\n  return validTimestamp(timestamp) ? Math.max(timestamp, startTime) : Math.max(getCurrentUnixTimestamp(), startTime);\n}\nasync function updateBatchTimestamps(batch) {\n  const trace = pendingBatchTraces.get(batch.input_file_id);\n  if (!trace || trace.context.endpoint !== batch.endpoint) {\n    return;\n  }\n  if (validTimestamp(batch.created_at)) {\n    trace.context.taskStartTime = batch.created_at;\n  }\n  trace.context.childStartTime = validTimestamp(batch.in_progress_at) ? Math.max(batch.in_progress_at, trace.context.taskStartTime) : trace.context.taskStartTime;\n  trace.status = batch.status;\n  if (TERMINAL_STATUSES.has(batch.status)) {\n    trace.endTime = terminalEndTime(batch, trace.context.childStartTime);\n  }\n  await writePendingSpans(trace, trace.endTime);\n}\nvar interceptOpenAIBatchesRetrieveTraced = (target, thisArg, args) => Promise.resolve(Reflect.apply(target, thisArg, args)).then(async (batch) => {\n  try {\n    await updateBatchTimestamps(batch);\n  } catch (error) {\n    logBatchInstrumentationError(\"could not update batch timestamps\", error);\n  }\n  return batch;\n});\nfunction errorFromResult(result) {\n  const error = read(result.value, \"error\");\n  if (isObject(error)) {\n    const message = read(error, \"message\");\n    return new Error(\n      typeof message === \"string\" ? message : \"OpenAI Batch request failed\"\n    );\n  }\n  const response = read(result.value, \"response\");\n  const statusCode = read(response, \"status_code\");\n  if (result.source === \"error\" || typeof statusCode === \"number\" && (statusCode < 200 || statusCode >= 300)) {\n    const message = read(read(read(response, \"body\"), \"error\"), \"message\");\n    return new Error(\n      typeof message === \"string\" ? message : \"OpenAI Batch request failed\"\n    );\n  }\n  return void 0;\n}\nasync function completeBatchResult(context, taskParent, endTime, input, result) {\n  const child = await startBatchChild(context, taskParent, input);\n  try {\n    const resultError = errorFromResult(result);\n    const responseBody = read(read(result.value, \"response\"), \"body\");\n    const embeddings = read(responseBody, \"data\");\n    const embeddingOutput = context.endpoint === \"/v1/embeddings\" ? { count: Array.isArray(embeddings) ? embeddings.length : 0 } : void 0;\n    if (resultError) {\n      child.log({\n        error: resultError,\n        ...embeddingOutput ? { output: embeddingOutput } : {}\n      });\n    } else if (isObject(responseBody)) {\n      const model = read(responseBody, \"model\");\n      const metrics = parseMetricsFromUsage(read(responseBody, \"usage\"));\n      child.log({\n        output: embeddingOutput ?? (context.endpoint === \"/v1/chat/completions\" ? read(responseBody, \"choices\") : processImagesInOutput(read(responseBody, \"output\"))),\n        ...typeof model === \"string\" ? { metadata: { model } } : {},\n        metrics: context.endpoint === \"/v1/embeddings\" ? Object.fromEntries(\n          Object.entries(metrics).filter(\n            ([name]) => EMBEDDING_METRICS.has(name)\n          )\n        ) : metrics\n      });\n    } else {\n      child.log({ error: new Error(\"OpenAI Batch response body is missing\") });\n    }\n  } catch (error) {\n    child.log({ error });\n  } finally {\n    child.end({ endTime });\n  }\n}\nasync function completeResultFile({\n  context,\n  endTime,\n  file,\n  inputs,\n  issues,\n  seen,\n  source,\n  taskParent\n}) {\n  if (file === void 0) {\n    return;\n  }\n  for await (const value of jsonlRecords(file, (issue) => issues.push(issue))) {\n    const customId = read(value, \"custom_id\");\n    if (!validCustomId(customId) || !isObject(value)) {\n      issues.push(\n        new Error(\"OpenAI Batch result is missing a valid custom_id\")\n      );\n      continue;\n    }\n    if (seen.has(customId)) {\n      issues.push(new Error(\"OpenAI Batch result contains a duplicate\"));\n      continue;\n    }\n    const input = inputs.get(customId);\n    if (!input) {\n      issues.push(\n        new Error(\"OpenAI Batch result does not match an input record\")\n      );\n      continue;\n    }\n    seen.add(customId);\n    await completeBatchResult(context, taskParent, endTime, input, {\n      value,\n      source\n    });\n  }\n}\nfunction sameInputs(first, second) {\n  return first.size === second.size && [...first.keys()].every((customId) => second.has(customId));\n}\nasync function contextForCompletion(inputFileId, inputData) {\n  if (!inputData.endpoint || inputData.issues.length > 0) {\n    return void 0;\n  }\n  const existing = pendingBatchTraces.get(inputFileId);\n  if (existing) {\n    if (existing.context.endpoint !== inputData.endpoint || !sameInputs(existing.inputs, inputData.inputs)) {\n      return void 0;\n    }\n    return { ...existing, inputs: inputData.inputs };\n  }\n  const parent = await exportParent(getSpanParentObject());\n  if (!parent) {\n    return void 0;\n  }\n  const startTime = getCurrentUnixTimestamp();\n  return {\n    context: {\n      inputFileId,\n      endpoint: inputData.endpoint,\n      parent,\n      taskStartTime: startTime,\n      childStartTime: startTime\n    },\n    inputs: inputData.inputs\n  };\n}\nasync function completeBatch(args) {\n  const inputData = await readBatchInputs(args.inputFileContent);\n  const trace = await contextForCompletion(args.inputFileId, inputData);\n  if (!trace) {\n    logBatchInstrumentationError(\n      \"left batch spans pending\",\n      inputData.issues[0] ?? new Error(\"OpenAI Batch input does not match\")\n    );\n    return;\n  }\n  const endTime = trace.endTime ?? getCurrentUnixTimestamp();\n  const task = await startBatchSpan(trace.context);\n  const taskParent = await task.export();\n  const issues = [];\n  const seen = /* @__PURE__ */ new Set();\n  await Promise.all([\n    completeResultFile({\n      context: trace.context,\n      endTime,\n      file: args.outputFileContent,\n      inputs: trace.inputs,\n      issues,\n      seen,\n      source: \"output\",\n      taskParent\n    }),\n    completeResultFile({\n      context: trace.context,\n      endTime,\n      file: args.errorFileContent,\n      inputs: trace.inputs,\n      issues,\n      seen,\n      source: \"error\",\n      taskParent\n    })\n  ]);\n  if (issues.length > 0) {\n    logBatchInstrumentationError(\"left batch spans pending\", issues[0]);\n    return;\n  }\n  const missing = [...trace.inputs.values()].filter(\n    ({ customId }) => !seen.has(customId)\n  );\n  if (!trace.status || trace.status === \"completed\") {\n    if (missing.length > 0) {\n      logBatchInstrumentationError(\n        \"left batch spans pending\",\n        new Error(\"OpenAI Batch result files are incomplete\")\n      );\n      return;\n    }\n  } else {\n    for (const input of missing) {\n      const child = await startBatchChild(trace.context, taskParent, input);\n      child.log({ error: new Error(`OpenAI Batch ${trace.status}`) });\n      child.end({ endTime });\n    }\n    task.log({ error: new Error(`OpenAI Batch ${trace.status}`) });\n  }\n  task.end({ endTime });\n  pendingBatchTraces.delete(args.inputFileId);\n}\nvar interceptOpenAIBatchTraceComplete = (target, thisArg, args) => Promise.resolve(Reflect.apply(target, thisArg, args)).then(async (result) => {\n  try {\n    await completeBatch(args[0]);\n  } catch (error) {\n    logBatchInstrumentationError(\"could not complete batch\", error);\n  }\n  return result;\n});\n\n// src/instrumentation/plugins/openai-agents-api-instrumentation.ts\nvar TERMINAL_TURN_EVENTS = /* @__PURE__ */ new Set([\n  \"agent.session.turn.completed\",\n  \"agent.session.turn.failed\",\n  \"agent.session.turn.cancelled\"\n]);\nvar TURN_LIFECYCLE_EVENTS = /* @__PURE__ */ new Set([\n  \"agent.session.turn.created\",\n  \"agent.session.turn.in_progress\",\n  ...TERMINAL_TURN_EVENTS\n]);\nvar SESSION_EVENTS = /* @__PURE__ */ new Set([\n  \"agent.session.created\",\n  \"agent.session.failed\",\n  \"agent.session.idle\",\n  \"agent.session.in_progress\",\n  \"agent.session.requires_action\"\n]);\nvar SUBAGENT_EVENTS = /* @__PURE__ */ new Set([\n  \"agent.session.subagent.active\",\n  \"agent.session.subagent.closed\",\n  \"agent.session.subagent.created\"\n]);\nfunction read2(value, key) {\n  if (!isObject(value)) {\n    return void 0;\n  }\n  try {\n    return Reflect.get(value, key);\n  } catch {\n    return void 0;\n  }\n}\nfunction stringValue(value) {\n  return typeof value === \"string\" && value.length > 0 ? value : void 0;\n}\nfunction recordValue(record, key) {\n  return Object.hasOwn(record, key) ? record[key] : void 0;\n}\nfunction setRecordValue(record, key, value) {\n  Object.defineProperty(record, key, {\n    configurable: true,\n    enumerable: true,\n    value,\n    writable: true\n  });\n}\nfunction loggedError(value, fallback2) {\n  if (value instanceof Error) {\n    return value;\n  }\n  const message = stringValue(read2(value, \"message\"));\n  return new Error(message ?? (typeof value === \"string\" ? value : fallback2));\n}\nfunction logInstrumentationError(context, error) {\n  debugLogger.debug(`OpenAI Agents API instrumentation ${context}:`, error);\n}\nasync function childSpanIds2(rootKey, kind, providerId) {\n  const [row, span] = await Promise.all([\n    deterministicDigest(\"openai:agents:row\", rootKey, kind, providerId),\n    deterministicDigest(\"openai:agents:span\", rootKey, kind, providerId)\n  ]);\n  return { rowId: digestUuid(row), spanId: digestHex(span, 8) };\n}\nfunction traceMetadata(args) {\n  const metadata = {};\n  const suppliedMetadata = read2(args, \"metadata\");\n  if (isObject(suppliedMetadata)) {\n    try {\n      for (const key of Object.keys(suppliedMetadata)) {\n        metadata[key] = read2(suppliedMetadata, key);\n      }\n    } catch (error) {\n      logInstrumentationError(\"could not read supplied metadata\", error);\n    }\n  }\n  const agent = read2(args, \"agent\");\n  const agentId = stringValue(read2(agent, \"id\")) ?? stringValue(read2(args, \"agent_id\"));\n  const agentName = stringValue(read2(agent, \"name\"));\n  const model = stringValue(read2(agent, \"model\"));\n  return {\n    ...metadata,\n    api: \"agents\",\n    ...agentId ? { agent_id: agentId } : {},\n    ...agentName ? { agent_name: agentName } : {},\n    ...model ? { model } : {},\n    provider: \"openai\"\n  };\n}\nfunction copyState(state) {\n  return {\n    ...state,\n    callItems: { ...state.callItems },\n    eventIds: [...state.eventIds],\n    openTools: { ...state.openTools },\n    subagents: { ...state.subagents },\n    turnSubagents: { ...state.turnSubagents }\n  };\n}\nfunction startRootSpan(state) {\n  const root = SpanComponentsV4.fromStr(state.root);\n  const parent = SpanComponentsV4.fromStr(state.rootParent);\n  const rowId = stringValue(root.data.row_id);\n  const rootSpanId = stringValue(root.data.root_span_id);\n  const spanId = stringValue(root.data.span_id);\n  if (!rowId || !rootSpanId || !spanId) {\n    throw new Error(\"OpenAI Agents trace root is invalid\");\n  }\n  const hasParentSpan = Boolean(\n    parent.data.row_id && parent.data.span_id && parent.data.root_span_id\n  );\n  return withCurrent(\n    NOOP_SPAN,\n    () => _internalStartSpanWithInitialMergeAndParentSpanIds(\n      withSpanInstrumentationName(\n        {\n          name: \"openai.agents.turn\",\n          type: \"task\" /* TASK */,\n          parent: state.rootParent,\n          ...!hasParentSpan ? {\n            parentSpanIds: {\n              parentSpanIds: [],\n              rootSpanId\n            }\n          } : {},\n          spanId,\n          startTime: state.startTime,\n          event: { id: rowId }\n        },\n        INSTRUMENTATION_NAMES.OPENAI\n      )\n    )\n  );\n}\nasync function startSubagentSpan(state, subagentId, input, metadata, visiting = /* @__PURE__ */ new Set()) {\n  const subagent = recordValue(state.subagents, subagentId);\n  let parent = state.root;\n  if (subagent?.parentAgentId && subagent.parentAgentId !== subagentId && recordValue(state.subagents, subagent.parentAgentId) && !visiting.has(subagent.parentAgentId)) {\n    visiting.add(subagentId);\n    parent = await (await startSubagentSpan(\n      state,\n      subagent.parentAgentId,\n      void 0,\n      void 0,\n      visiting\n    )).export();\n  }\n  const ids = await childSpanIds2(state.rootKey, \"subagent\", subagentId);\n  return withCurrent(\n    NOOP_SPAN,\n    () => _internalStartSpanWithInitialMerge(\n      withSpanInstrumentationName(\n        {\n          name: \"openai.agents.subagent\",\n          type: \"task\" /* TASK */,\n          parent,\n          spanId: ids.spanId,\n          startTime: subagent?.openedAt,\n          event: {\n            id: ids.rowId,\n            ...input !== void 0 ? { input } : {},\n            metadata: {\n              ...metadata,\n              agent_id: subagentId,\n              ...subagent?.parentAgentId ? { parent_agent_id: subagent.parentAgentId } : {},\n              provider: \"openai\"\n            }\n          }\n        },\n        INSTRUMENTATION_NAMES.OPENAI\n      )\n    )\n  );\n}\nasync function parentForTurn(state, turnId) {\n  const subagentId = turnId ? recordValue(state.turnSubagents, turnId) : void 0;\n  if (!subagentId) {\n    return state.root;\n  }\n  return await (await startSubagentSpan(state, subagentId)).export();\n}\nasync function startToolSpan(state, tool, input) {\n  const ids = await childSpanIds2(state.rootKey, \"tool\", tool.itemId);\n  return withCurrent(\n    NOOP_SPAN,\n    async () => _internalStartSpanWithInitialMerge(\n      withSpanInstrumentationName(\n        {\n          name: tool.name,\n          type: \"tool\" /* TOOL */,\n          parent: await parentForTurn(state, tool.turnId),\n          spanId: ids.spanId,\n          startTime: tool.startTime,\n          event: {\n            id: ids.rowId,\n            ...input !== void 0 ? { input } : {},\n            metadata: {\n              item_id: tool.itemId,\n              provider: \"openai\",\n              tool_type: tool.toolType,\n              ...tool.turnId ? { turn_id: tool.turnId } : {}\n            }\n          }\n        },\n        INSTRUMENTATION_NAMES.OPENAI\n      )\n    )\n  );\n}\nfunction toolFromItem(item, observedAt) {\n  const itemId = stringValue(read2(item, \"id\"));\n  const toolType = stringValue(read2(item, \"type\"));\n  if (!itemId || !toolType) {\n    return void 0;\n  }\n  const turnId = stringValue(read2(item, \"turn_id\"));\n  switch (toolType) {\n    case \"function_call\":\n      return {\n        input: read2(item, \"arguments\"),\n        tool: {\n          itemId,\n          name: stringValue(read2(item, \"name\")) ?? \"Function call\",\n          startTime: observedAt,\n          toolType,\n          ...turnId ? { turnId } : {}\n        }\n      };\n    case \"mcp_call\": {\n      const name = stringValue(read2(item, \"name\")) ?? \"MCP call\";\n      const server = stringValue(read2(item, \"server_label\"));\n      return {\n        input: read2(item, \"arguments\"),\n        tool: {\n          itemId,\n          name: server ? `${server}.${name}` : name,\n          startTime: observedAt,\n          toolType,\n          ...turnId ? { turnId } : {}\n        }\n      };\n    }\n    case \"web_search_call\":\n      return {\n        input: read2(item, \"action\"),\n        tool: {\n          itemId,\n          name: \"Web search\",\n          startTime: observedAt,\n          toolType,\n          ...turnId ? { turnId } : {}\n        }\n      };\n    case \"command_execution\":\n      return {\n        input: {\n          command: read2(item, \"command\"),\n          cwd: read2(item, \"cwd\")\n        },\n        tool: {\n          itemId,\n          name: \"Command execution\",\n          startTime: observedAt,\n          toolType,\n          ...turnId ? { turnId } : {}\n        }\n      };\n    default:\n      return void 0;\n  }\n}\nfunction textFromContent(content) {\n  if (!Array.isArray(content)) {\n    return void 0;\n  }\n  const text = [];\n  for (const part of content) {\n    const partText = read2(part, \"text\");\n    if (read2(part, \"type\") === \"output_text\" && typeof partText === \"string\") {\n      text.push(partText);\n    }\n  }\n  return text.length > 0 ? text.join(\"\") : void 0;\n}\nfunction toolOutput(item, toolType) {\n  switch (toolType) {\n    case \"function_call\":\n      return read2(item, \"output\");\n    case \"mcp_call\":\n      return read2(item, \"output\");\n    case \"web_search_call\":\n      return read2(item, \"action\");\n    case \"command_execution\":\n      return read2(item, \"output\");\n    default:\n      return void 0;\n  }\n}\nfunction toolFailed(item, toolType) {\n  const status = read2(item, \"status\");\n  const explicitError = read2(item, \"error\");\n  if (explicitError !== void 0 && explicitError !== null) {\n    return loggedError(explicitError, `OpenAI ${toolType} failed`);\n  }\n  if (status === \"failed\" || status === \"incomplete\") {\n    return new Error(`OpenAI ${toolType} ${status}`);\n  }\n  if (toolType === \"command_execution\" && typeof read2(item, \"exit_code\") === \"number\" && read2(item, \"exit_code\") !== 0) {\n    return new Error(\n      `OpenAI command exited with code ${read2(item, \"exit_code\")}`\n    );\n  }\n  return void 0;\n}\nasync function completeTool(state, tool, item, endTime) {\n  const span = await startToolSpan(state, tool);\n  const output = toolOutput(item, tool.toolType);\n  const error = toolFailed(item, tool.toolType);\n  span.log({\n    ...output !== void 0 ? { output } : {},\n    ...error ? { error } : {},\n    metadata: {\n      status: read2(item, \"status\"),\n      ...tool.toolType === \"command_execution\" ? { exit_code: read2(item, \"exit_code\") } : {}\n    }\n  });\n  span.end({ endTime });\n  Reflect.deleteProperty(state.openTools, tool.itemId);\n}\nasync function captureMessage(state, item) {\n  if (read2(item, \"type\") !== \"message\" || read2(item, \"role\") !== \"assistant\" || read2(item, \"phase\") !== \"final_answer\") {\n    return;\n  }\n  const output = textFromContent(read2(item, \"content\"));\n  if (output === void 0) {\n    return;\n  }\n  const turnId = stringValue(read2(item, \"turn_id\"));\n  const subagentId = turnId ? recordValue(state.turnSubagents, turnId) : void 0;\n  if (subagentId) {\n    (await startSubagentSpan(state, subagentId)).log({ output });\n  } else {\n    startRootSpan(state).log({ output });\n  }\n}\nasync function captureItem(state, item, isDone, observedAt) {\n  await captureMessage(state, item);\n  const itemType = stringValue(read2(item, \"type\"));\n  if (itemType === \"function_call_output\") {\n    const callId = stringValue(read2(item, \"call_id\"));\n    const itemId = callId ? recordValue(state.callItems, callId) : void 0;\n    const tool2 = itemId ? recordValue(state.openTools, itemId) : void 0;\n    if (tool2) {\n      await completeTool(state, tool2, item, observedAt);\n    }\n    return;\n  }\n  const descriptor = toolFromItem(item, observedAt);\n  if (!descriptor) {\n    return;\n  }\n  const existing = recordValue(state.openTools, descriptor.tool.itemId);\n  const tool = existing ?? descriptor.tool;\n  setRecordValue(state.openTools, tool.itemId, tool);\n  if (itemType === \"function_call\") {\n    const callId = stringValue(read2(item, \"call_id\"));\n    if (callId) {\n      setRecordValue(state.callItems, callId, tool.itemId);\n    }\n  }\n  await startToolSpan(state, tool, descriptor.input);\n  const status = read2(item, \"status\");\n  const terminalFunctionCall = itemType === \"function_call\" && (status === \"failed\" || status === \"incomplete\");\n  if (itemType !== \"function_call\" && (isDone || status !== \"in_progress\") || terminalFunctionCall) {\n    await completeTool(state, tool, item, observedAt);\n  }\n}\nfunction updateSessionMetadata(state, session) {\n  const sessionId = stringValue(read2(session, \"id\"));\n  const agent = read2(session, \"agent\");\n  startRootSpan(state).log({\n    metadata: {\n      ...sessionId ? { session_id: sessionId } : {},\n      ...stringValue(read2(agent, \"id\")) ? { agent_id: read2(agent, \"id\") } : {},\n      ...stringValue(read2(agent, \"name\")) ? { agent_name: read2(agent, \"name\") } : {},\n      ...stringValue(read2(agent, \"model\")) ? { model: read2(agent, \"model\") } : {}\n    }\n  });\n}\nasync function captureSubagent(state, eventType, subagent, observedAt) {\n  const subagentId = stringValue(read2(subagent, \"id\"));\n  if (!subagentId) {\n    return;\n  }\n  const existing = recordValue(state.subagents, subagentId);\n  const observedOpenedAt = read2(subagent, \"opened_at\");\n  const openedAt = typeof observedOpenedAt === \"number\" && Number.isFinite(observedOpenedAt) && observedOpenedAt >= 0 ? observedOpenedAt : existing?.openedAt ?? observedAt;\n  const observedClosedAt = read2(subagent, \"closed_at\");\n  const closedAt = typeof observedClosedAt === \"number\" && Number.isFinite(observedClosedAt) && observedClosedAt >= 0 ? observedClosedAt : existing?.closedAt;\n  const parentAgentId = stringValue(read2(subagent, \"parent_agent_id\")) ?? existing?.parentAgentId;\n  setRecordValue(state.subagents, subagentId, {\n    ...closedAt !== void 0 ? { closedAt } : {},\n    openedAt,\n    ...parentAgentId ? { parentAgentId } : {}\n  });\n  const span = await startSubagentSpan(\n    state,\n    subagentId,\n    read2(subagent, \"instructions\"),\n    {\n      ...stringValue(read2(subagent, \"name\")) ? { agent_name: read2(subagent, \"name\") } : {},\n      status: read2(subagent, \"status\")\n    }\n  );\n  if (eventType === \"agent.session.subagent.closed\") {\n    span.end({ endTime: closedAt ?? observedAt });\n  }\n}\nasync function closeTrace(state, endTime, error, usage) {\n  if (state.ended) {\n    return;\n  }\n  for (const tool of Object.values(state.openTools)) {\n    const span = await startToolSpan(state, tool);\n    span.log({\n      error: error ?? new Error(\"OpenAI Agents turn ended before tool completion\")\n    });\n    span.end({ endTime });\n  }\n  state.openTools = {};\n  for (const subagentId of Object.keys(state.subagents)) {\n    const subagent = state.subagents[subagentId];\n    const span = await startSubagentSpan(state, subagentId);\n    span.end({ endTime: subagent.closedAt ?? endTime });\n  }\n  const root = startRootSpan(state);\n  root.log({\n    ...error ? { error } : {},\n    metrics: parseMetricsFromUsage(usage)\n  });\n  root.end({ endTime });\n  state.ended = true;\n}\nasync function captureTurnLifecycle(state, event, eventType, observedAt) {\n  const turn = read2(event, \"turn\");\n  const turnId = stringValue(read2(event, \"turn_id\")) ?? stringValue(read2(turn, \"id\"));\n  const subagentId = stringValue(read2(turn, \"subagent_id\"));\n  if (turnId && subagentId) {\n    setRecordValue(state.turnSubagents, turnId, subagentId);\n    if (!recordValue(state.subagents, subagentId)) {\n      const createdAt = read2(turn, \"created_at\");\n      setRecordValue(state.subagents, subagentId, {\n        openedAt: typeof createdAt === \"number\" && Number.isFinite(createdAt) && createdAt >= 0 ? createdAt : observedAt\n      });\n    }\n    await startSubagentSpan(state, subagentId);\n  }\n  const sessionId = stringValue(read2(event, \"session_id\"));\n  if (sessionId) {\n    startRootSpan(state).log({ metadata: { session_id: sessionId } });\n  }\n  if (!TERMINAL_TURN_EVENTS.has(eventType) || subagentId) {\n    if (subagentId && eventType === \"agent.session.turn.failed\") {\n      (await startSubagentSpan(state, subagentId)).log({\n        error: loggedError(read2(turn, \"error\"), \"OpenAI subagent turn failed\")\n      });\n    }\n    return;\n  }\n  const completedAt = read2(turn, \"completed_at\");\n  const endTime = typeof completedAt === \"number\" && Number.isFinite(completedAt) && completedAt >= 0 ? completedAt : observedAt;\n  const usage = read2(event, \"usage\") ?? read2(turn, \"usage\");\n  const error = eventType === \"agent.session.turn.completed\" ? void 0 : loggedError(\n    read2(turn, \"error\"),\n    eventType === \"agent.session.turn.cancelled\" ? \"OpenAI Agents turn cancelled\" : \"OpenAI Agents turn failed\"\n  );\n  await closeTrace(state, endTime, error, usage);\n}\nasync function captureEvent(state, event) {\n  if (state.ended) {\n    return state;\n  }\n  const eventType = stringValue(read2(event, \"type\"));\n  const eventId = stringValue(read2(event, \"event_id\"));\n  if (!eventType || eventId && state.eventIds.includes(eventId)) {\n    return state;\n  }\n  const next = copyState(state);\n  const observedAt = getCurrentUnixTimestamp();\n  let handled = false;\n  if (SESSION_EVENTS.has(eventType)) {\n    const session = read2(event, \"session\");\n    if (session) {\n      updateSessionMetadata(next, session);\n    }\n    handled = true;\n  }\n  if (eventType === \"agent.session.turn.item.added\") {\n    await captureItem(next, read2(event, \"item\"), false, observedAt);\n    handled = true;\n  } else if (eventType === \"agent.session.turn.item.done\") {\n    await captureItem(next, read2(event, \"item\"), true, observedAt);\n    handled = true;\n  } else if (TURN_LIFECYCLE_EVENTS.has(eventType)) {\n    await captureTurnLifecycle(next, event, eventType, observedAt);\n    handled = true;\n  } else if (SUBAGENT_EVENTS.has(eventType)) {\n    await captureSubagent(next, eventType, read2(event, \"subagent\"), observedAt);\n    handled = true;\n  } else if (eventType === \"agent.session.turn.output_text.delta\" && next.firstTokenAt === void 0 && stringValue(read2(event, \"delta\"))) {\n    next.firstTokenAt = observedAt;\n    startRootSpan(next).log({\n      metrics: { time_to_first_token: observedAt - next.startTime }\n    });\n    handled = true;\n  } else if (eventType === \"agent.session.failed\") {\n    const session = read2(event, \"session\");\n    const lastActiveAt = read2(session, \"last_active_at\");\n    const endTime = typeof lastActiveAt === \"number\" && Number.isFinite(lastActiveAt) && lastActiveAt >= 0 ? lastActiveAt : observedAt;\n    await closeTrace(\n      next,\n      endTime,\n      loggedError(read2(session, \"error\"), \"OpenAI Agents session failed\"),\n      read2(session, \"usage\")\n    );\n    handled = true;\n  } else if (eventType === \"error\") {\n    await closeTrace(\n      next,\n      observedAt,\n      loggedError(read2(event, \"error\"), \"OpenAI Agents session failed\")\n    );\n    handled = true;\n  }\n  if (!handled) {\n    return state;\n  }\n  if (eventId) {\n    next.eventIds.push(eventId);\n  }\n  return next;\n}\nvar interceptOpenAIAgentsTraceStart = async (target, thisArg, args) => {\n  const fallback2 = await Reflect.apply(target, thisArg, args);\n  try {\n    const state = args[0].state;\n    const parent = state.rootParent;\n    const traceArgs = args[0].args;\n    const parentComponents = SpanComponentsV4.fromStr(parent);\n    const hasParentSpan = Boolean(\n      parentComponents.data.row_id && parentComponents.data.span_id && parentComponents.data.root_span_id\n    );\n    const rootComponents = SpanComponentsV4.fromStr(state.root);\n    const rowId = stringValue(rootComponents.data.row_id);\n    const rootSpanId = stringValue(rootComponents.data.root_span_id);\n    const spanId = stringValue(rootComponents.data.span_id);\n    if (!rowId || !rootSpanId || !spanId) {\n      throw new Error(\"OpenAI Agents trace root is invalid\");\n    }\n    withCurrent(\n      NOOP_SPAN,\n      () => _internalStartSpanWithInitialMergeAndParentSpanIds(\n        withSpanInstrumentationName(\n          {\n            name: \"openai.agents.turn\",\n            type: \"task\" /* TASK */,\n            parent,\n            ...!hasParentSpan ? {\n              parentSpanIds: {\n                parentSpanIds: [],\n                rootSpanId\n              }\n            } : {},\n            spanId,\n            startTime: state.startTime,\n            event: {\n              id: rowId,\n              input: read2(traceArgs, \"input\"),\n              metadata: traceMetadata(traceArgs)\n            }\n          },\n          INSTRUMENTATION_NAMES.OPENAI\n        )\n      )\n    );\n    return state;\n  } catch (error) {\n    logInstrumentationError(\"could not start trace\", error);\n    return fallback2;\n  }\n};\nvar interceptOpenAIAgentsTraceCapture = async (target, thisArg, args) => {\n  const fallback2 = await Reflect.apply(target, thisArg, args);\n  if (!args[0].state) {\n    return fallback2;\n  }\n  try {\n    return await captureEvent(args[0].state, args[0].event);\n  } catch (error) {\n    logInstrumentationError(\"could not capture event\", error);\n    return fallback2;\n  }\n};\nvar interceptOpenAIAgentsTraceFail = async (target, thisArg, args) => {\n  const fallback2 = await Reflect.apply(target, thisArg, args);\n  if (!args[0].state) {\n    return fallback2;\n  }\n  try {\n    const next = copyState(args[0].state);\n    await closeTrace(\n      next,\n      getCurrentUnixTimestamp(),\n      loggedError(args[0].error, \"OpenAI Agents request failed\")\n    );\n    return next;\n  } catch (error) {\n    logInstrumentationError(\"could not fail trace\", error);\n    return fallback2;\n  }\n};\n\n// src/instrumentation/plugins/openai-plugin.ts\nvar OpenAIPlugin = class extends BasePlugin {\n  constructor() {\n    super();\n  }\n  onEnable() {\n    this.unsubscribers.push(\n      openAIChannels.agentsTraceStart.intercept(\n        interceptOpenAIAgentsTraceStart\n      ),\n      openAIChannels.agentsTraceCapture.intercept(\n        interceptOpenAIAgentsTraceCapture\n      ),\n      openAIChannels.agentsTraceFail.intercept(interceptOpenAIAgentsTraceFail),\n      openAIChannels.filesCreateTraced.intercept(\n        interceptOpenAIFilesCreateTraced\n      ),\n      openAIChannels.batchesRetrieveTraced.intercept(\n        interceptOpenAIBatchesRetrieveTraced\n      ),\n      openAIChannels.batchesCompleteTrace.intercept(\n        interceptOpenAIBatchTraceComplete\n      )\n    );\n    this.unsubscribers.push(\n      interceptOpenAIMedia(openAIChannels.imagesGenerate, \"generate\"),\n      interceptOpenAIMedia(openAIChannels.imagesEdit, \"edit\"),\n      interceptOpenAIMedia(openAIChannels.imagesCreateVariation, \"variation\"),\n      interceptOpenAIMedia(openAIChannels.audioSpeechCreate, \"speech\"),\n      interceptOpenAIMedia(\n        openAIChannels.audioTranscriptionsCreate,\n        \"transcribe\"\n      ),\n      interceptOpenAIMedia(openAIChannels.audioTranslationsCreate, \"translate\")\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openAIChannels.chatCompletionsCreate, {\n        name: \"Chat Completion\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIChatInput(params),\n        extractOutput: (result) => {\n          return result?.choices;\n        },\n        extractMetrics: (result, startTime, endEvent) => {\n          const metrics = withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateChatCompletionChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openAIChannels.embeddingsCreate, {\n        name: \"Embedding\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => {\n          const { input, ...metadata } = params;\n          return {\n            input,\n            metadata: { ...metadata, provider: \"openai\" }\n          };\n        },\n        extractOutput: (result) => {\n          const embedding = result?.data?.[0]?.embedding;\n          return Array.isArray(embedding) ? { embedding_length: embedding.length } : void 0;\n        },\n        extractMetrics: (result, _startTime, endEvent) => {\n          return withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n        }\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openAIChannels.betaChatCompletionsParse, {\n        name: \"Chat Completion\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIChatInput(params),\n        extractOutput: (result) => {\n          return result?.choices;\n        },\n        extractMetrics: (result, startTime, endEvent) => {\n          const metrics = withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateChatCompletionChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(openAIChannels.betaChatCompletionsStream, {\n        name: \"Chat Completion\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIChatInput(params)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openAIChannels.moderationsCreate, {\n        name: \"Moderation\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => {\n          const { input, ...metadata } = params;\n          return {\n            input,\n            metadata: { ...metadata, provider: \"openai\" }\n          };\n        },\n        extractOutput: (result) => {\n          return result?.results;\n        },\n        extractMetrics: (result, _startTime, endEvent) => {\n          return withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n        }\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openAIChannels.responsesCreate, {\n        name: \"openai.responses.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIResponsesInput(params),\n        extractOutput: (result) => {\n          return processImagesInOutput(result?.output);\n        },\n        extractMetadata: (result) => extractOpenAIResponsesMetadata(result),\n        extractMetrics: (result, startTime, endEvent) => {\n          const metrics = withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateResponseStreamEvents\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(openAIChannels.responsesStream, {\n        name: \"openai.responses.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIResponsesInput(params),\n        extractFromEvent: (event) => TERMINAL_RESPONSE_EVENT_TYPES.has(event.type) ? aggregateResponseStreamEvents([event]) : {}\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openAIChannels.responsesParse, {\n        name: \"openai.responses.parse\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIResponsesInput(params),\n        extractOutput: (result) => {\n          return processImagesInOutput(result?.output);\n        },\n        extractMetadata: (result) => extractOpenAIResponsesMetadata(result),\n        extractMetrics: (result, startTime, endEvent) => {\n          const metrics = withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateResponseStreamEvents\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openAIChannels.responsesCompact, {\n        name: \"openai.responses.compact\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => extractOpenAIResponsesInput(params),\n        extractOutput: (result) => {\n          return processImagesInOutput(result?.output);\n        },\n        extractMetadata: (result) => extractOpenAIResponsesMetadata(result),\n        extractMetrics: (result, startTime, endEvent) => {\n          const metrics = withCachedMetric(\n            parseMetricsFromUsage(result?.usage),\n            result,\n            endEvent\n          );\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        }\n      })\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction getCachedMetricFromEndEvent(endEvent) {\n  if (!isObject(endEvent)) {\n    return void 0;\n  }\n  const response = endEvent.response;\n  if (!isObject(response)) {\n    return void 0;\n  }\n  const headers = response.headers;\n  if (!headers || typeof headers.get !== \"function\") {\n    return void 0;\n  }\n  return getCachedMetricFromHeaders(headers);\n}\nfunction withCachedMetric(metrics, result, endEvent) {\n  if (metrics.cached !== void 0) {\n    return metrics;\n  }\n  const cachedFromEvent = getCachedMetricFromEndEvent(endEvent);\n  if (cachedFromEvent !== void 0) {\n    return {\n      ...metrics,\n      cached: cachedFromEvent\n    };\n  }\n  if (!isObject(result)) {\n    return metrics;\n  }\n  const cached = result[BRAINTRUST_CACHED_STREAM_METRIC];\n  if (typeof cached !== \"number\") {\n    return metrics;\n  }\n  return {\n    ...metrics,\n    cached\n  };\n}\nfunction mergeLogprobTokens(existing, incoming) {\n  if (incoming === void 0) {\n    return existing;\n  }\n  if (incoming === null) {\n    return existing ?? null;\n  }\n  if (Array.isArray(existing)) {\n    return [...existing, ...incoming];\n  }\n  return [...incoming];\n}\nfunction aggregateChatLogprobs(existing, incoming) {\n  if (incoming === void 0) {\n    return existing;\n  }\n  if (incoming === null) {\n    return existing ?? null;\n  }\n  const aggregated = existing && existing !== null ? { ...existing, ...incoming } : { ...incoming };\n  const content = mergeLogprobTokens(existing?.content, incoming.content);\n  if (content !== void 0) {\n    aggregated.content = content;\n  }\n  const refusal = mergeLogprobTokens(existing?.refusal, incoming.refusal);\n  if (refusal !== void 0) {\n    aggregated.refusal = refusal;\n  }\n  return aggregated;\n}\nfunction createAggregatedChatChoice(index) {\n  return {\n    index,\n    role: void 0,\n    content: void 0,\n    reasoning_content: void 0,\n    refusal: void 0,\n    audio: void 0,\n    toolCallsByIndex: /* @__PURE__ */ new Map(),\n    logprobs: void 0,\n    finish_reason: void 0\n  };\n}\nfunction toChatChoice(choice) {\n  const toolCalls2 = Array.from(choice.toolCallsByIndex.entries()).sort(([left], [right]) => left - right).map(([, toolCall]) => toolCall);\n  return {\n    index: choice.index,\n    message: {\n      role: choice.role,\n      content: choice.content,\n      ...choice.reasoning_content !== void 0 ? { reasoning_content: choice.reasoning_content } : {},\n      ...choice.refusal !== void 0 ? { refusal: choice.refusal } : {},\n      ...choice.audio !== void 0 ? { audio: choice.audio } : {},\n      tool_calls: toolCalls2.length > 0 ? toolCalls2 : void 0\n    },\n    logprobs: choice.logprobs ?? null,\n    finish_reason: choice.finish_reason\n  };\n}\nfunction aggregateChatCompletionChunks(chunks, streamResult, endEvent) {\n  const choicesByIndex = /* @__PURE__ */ new Map();\n  let metrics = {};\n  for (const chunk of chunks) {\n    if (chunk.usage) {\n      metrics = {\n        ...metrics,\n        ...parseMetricsFromUsage(chunk.usage)\n      };\n    }\n    const choices = chunk.choices;\n    if (!choices?.length) {\n      continue;\n    }\n    for (const choice of choices) {\n      const choiceIndex = choice.index;\n      let aggregatedChoice = choicesByIndex.get(choiceIndex);\n      if (!aggregatedChoice) {\n        aggregatedChoice = createAggregatedChatChoice(choiceIndex);\n        choicesByIndex.set(choiceIndex, aggregatedChoice);\n      }\n      if (choice.finish_reason) {\n        aggregatedChoice.finish_reason = choice.finish_reason;\n      }\n      aggregatedChoice.logprobs = aggregateChatLogprobs(\n        aggregatedChoice.logprobs,\n        choice.logprobs\n      );\n      const delta = choice.delta;\n      if (!delta) {\n        continue;\n      }\n      if (delta.finish_reason) {\n        aggregatedChoice.finish_reason = delta.finish_reason;\n      }\n      if (!aggregatedChoice.role && delta.role) {\n        aggregatedChoice.role = delta.role;\n      }\n      if (delta.content) {\n        aggregatedChoice.content = (aggregatedChoice.content || \"\") + delta.content;\n      }\n      if (typeof delta.reasoning_content === \"string\") {\n        aggregatedChoice.reasoning_content = (aggregatedChoice.reasoning_content ?? \"\") + delta.reasoning_content;\n      } else if (delta.reasoning_content === null) {\n        aggregatedChoice.reasoning_content ??= null;\n      }\n      if (delta.refusal) {\n        aggregatedChoice.refusal = (aggregatedChoice.refusal || \"\") + delta.refusal;\n      }\n      if (delta.audio) {\n        const { id, expires_at: expiresAt, transcript } = delta.audio;\n        if (id !== void 0 || expiresAt !== void 0 || transcript !== void 0) {\n          aggregatedChoice.audio ??= {};\n          if (id !== void 0) {\n            aggregatedChoice.audio.id = id;\n          }\n          if (expiresAt !== void 0) {\n            aggregatedChoice.audio.expires_at = expiresAt;\n          }\n          if (transcript !== void 0) {\n            aggregatedChoice.audio.transcript = (aggregatedChoice.audio.transcript || \"\") + transcript;\n          }\n        }\n      }\n      if (delta.tool_calls) {\n        for (const toolDelta of delta.tool_calls) {\n          let aggregatedToolCall = aggregatedChoice.toolCallsByIndex.get(\n            toolDelta.index\n          );\n          if (!aggregatedToolCall) {\n            aggregatedToolCall = {\n              function: { arguments: \"\" }\n            };\n            aggregatedChoice.toolCallsByIndex.set(\n              toolDelta.index,\n              aggregatedToolCall\n            );\n          }\n          if (toolDelta.id !== void 0) {\n            aggregatedToolCall.id = toolDelta.id;\n          }\n          if (toolDelta.type !== void 0) {\n            aggregatedToolCall.type = toolDelta.type;\n          }\n          if (toolDelta.function?.name !== void 0) {\n            aggregatedToolCall.function.name = toolDelta.function.name;\n          }\n          if (toolDelta.function?.arguments !== void 0) {\n            aggregatedToolCall.function.arguments += toolDelta.function.arguments;\n          }\n        }\n      }\n    }\n  }\n  metrics = withCachedMetric(metrics, streamResult, endEvent);\n  const output = Array.from(choicesByIndex.values()).sort((left, right) => left.index - right.index).map(toChatChoice);\n  return {\n    metrics,\n    output: output.length > 0 ? output : [toChatChoice(createAggregatedChatChoice(0))]\n  };\n}\nvar TERMINAL_RESPONSE_EVENT_TYPES = /* @__PURE__ */ new Set([\n  \"response.completed\",\n  \"response.incomplete\",\n  \"response.failed\"\n]);\nfunction aggregateResponseStreamEvents(chunks, _streamResult, endEvent) {\n  let output = void 0;\n  let metrics = {};\n  let metadata = void 0;\n  let error = void 0;\n  for (const chunk of chunks) {\n    if (!chunk?.response || !TERMINAL_RESPONSE_EVENT_TYPES.has(chunk.type)) {\n      continue;\n    }\n    const response = chunk.response;\n    if (response.output !== void 0) {\n      output = processImagesInOutput(response.output);\n    }\n    const { usage: _usage, output: _output, ...rest } = response;\n    if (Object.keys(rest).length > 0) {\n      metadata = rest;\n    }\n    metrics = parseMetricsFromUsage(response.usage);\n    if (chunk.type === \"response.failed\" && response.error) {\n      error = `${response.error.code}: ${response.error.message}`;\n    }\n  }\n  return {\n    output,\n    metrics: withCachedMetric(metrics, void 0, endEvent),\n    ...metadata !== void 0 ? { metadata } : {},\n    ...error !== void 0 ? { error } : {}\n  };\n}\n\n// src/instrumentation/plugins/openai-codex-channels.ts\nvar openAICodexChannels = defineChannels(\n  \"@openai/codex-sdk\",\n  {\n    run: channel({\n      channelName: \"Thread.run\",\n      kind: \"async\"\n    }),\n    runStreamed: channel({\n      channelName: \"Thread.runStreamed\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.OPENAI_CODEX }\n);\n\n// src/instrumentation/plugins/openai-codex-plugin.ts\nvar PATCHED_STREAMED_TURN = /* @__PURE__ */ Symbol.for(\n  \"braintrust.openai-codex.patched-streamed-turn\"\n);\nvar OpenAICodexPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToRun();\n    this.subscribeToRunStreamed();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n  }\n  subscribeToRun() {\n    const channel2 = openAICodexChannels.run.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        states.set(event, startCodexRun(event, \"Thread.run\"));\n      },\n      asyncEnd: async (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        states.delete(event);\n        await finalizeCompletedRun(state, event.result);\n      },\n      error: async (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        states.delete(event);\n        await finalizeCodexRun(state, { error: event.error });\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n  subscribeToRunStreamed() {\n    const channel2 = openAICodexChannels.runStreamed.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        states.set(event, startCodexRun(event, \"Thread.runStreamed\"));\n      },\n      asyncEnd: async (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        states.delete(event);\n        await patchStreamedTurn(event.result, state);\n      },\n      error: async (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        states.delete(event);\n        await finalizeCodexRun(state, { error: event.error });\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n};\nfunction startCodexRun(event, operation) {\n  const input = event.arguments[0];\n  const turnOptions = event.arguments[1];\n  const thread = event.thread ?? extractThreadFromEvent(event);\n  const sanitizedInput = sanitizeInput(input);\n  const metadata = {\n    ...extractThreadMetadata(thread),\n    ...extractTurnOptionsMetadata(turnOptions),\n    \"openai_codex.operation\": operation,\n    provider: \"openai\",\n    ...event.moduleVersion ? { \"openai_codex.version\": event.moduleVersion } : {}\n  };\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: \"OpenAI Codex\",\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.OPENAI_CODEX\n    )\n  );\n  const startTime = getCurrentUnixTimestamp();\n  safeLog(span, {\n    input: sanitizedInput,\n    metadata\n  });\n  return {\n    activeItemSpans: /* @__PURE__ */ new Map(),\n    completedItems: [],\n    finalized: false,\n    input: sanitizedInput,\n    llmSequence: 0,\n    metadata,\n    metrics: {},\n    outputText: [],\n    span,\n    startTime\n  };\n}\nasync function patchStreamedTurn(streamedTurn, state) {\n  if (!streamedTurn || typeof streamedTurn !== \"object\") {\n    await finalizeCodexRun(state, { output: streamedTurn });\n    return;\n  }\n  const turnRecord = streamedTurn;\n  if (turnRecord[PATCHED_STREAMED_TURN] || !isAsyncIterable2(turnRecord.events)) {\n    return;\n  }\n  try {\n    Object.defineProperty(turnRecord, PATCHED_STREAMED_TURN, {\n      configurable: false,\n      enumerable: false,\n      value: true\n    });\n    turnRecord.events = patchCodexEventStream(turnRecord.events, state);\n  } catch {\n    await finalizeCodexRun(state, { output: streamedTurn });\n  }\n}\nasync function* patchCodexEventStream(events, state) {\n  try {\n    for await (const event of events) {\n      try {\n        await handleCodexEvent(state, event);\n      } catch (error) {\n        logInstrumentationError2(\"OpenAI Codex stream event\", error);\n      }\n      yield event;\n    }\n    await finalizeCodexRun(state);\n  } catch (error) {\n    await finalizeCodexRun(state, { error });\n    throw error;\n  }\n}\nasync function handleCodexEvent(state, event) {\n  switch (event.type) {\n    case \"thread.started\":\n      state.metadata[\"openai_codex.thread_id\"] = event.thread_id;\n      return;\n    case \"turn.completed\":\n      Object.assign(state.metrics, extractUsageMetrics(event.usage));\n      return;\n    case \"turn.failed\":\n      await finalizeCodexRun(state, {\n        error: event.error?.message ?? \"Codex turn failed\"\n      });\n      return;\n    case \"item.started\":\n      await handleCodexItemStarted(state, event.item);\n      return;\n    case \"item.updated\":\n      await handleCodexItemUpdated(state, event.item);\n      return;\n    case \"item.completed\":\n      await handleCodexItemCompleted(state, event.item);\n      return;\n    case \"error\":\n      if (event.message) {\n        debugLogger.debug(\"OpenAI Codex stream event:\", event.message);\n      }\n      return;\n    default:\n      return;\n  }\n}\nasync function finalizeCompletedRun(state, turn) {\n  if (!turn) {\n    await finalizeCodexRun(state, { output: turn });\n    return;\n  }\n  Object.assign(state.metrics, extractUsageMetrics(turn.usage));\n  state.finalResponse = turn.finalResponse;\n  for (const item of turn.items ?? []) {\n    await handleCodexItemCompleted(state, item);\n  }\n  await finalizeCodexRun(state, { output: turn.finalResponse });\n}\nasync function finalizeCodexRun(state, params = {}) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  const output = params.output ?? state.finalResponse ?? (state.outputText.length > 0 ? state.outputText.join(\"\\n\") : void 0);\n  const metrics = {\n    ...cleanMetrics(state.metrics),\n    ...buildDurationMetrics(state.startTime)\n  };\n  await finishActiveLlmSpan(state, params.error);\n  try {\n    const error = params.error;\n    safeLog(state.span, {\n      ...error ? { error: toLoggedError(error) } : {},\n      metadata: state.metadata,\n      metrics,\n      output\n    });\n  } finally {\n    endOpenItemSpans(state);\n    state.span.end();\n  }\n}\nasync function handleCodexItemStarted(state, item) {\n  if (isCodexToolItem(item)) {\n    await finishActiveLlmSpan(state);\n    await startCodexItemSpan(state, item);\n    return;\n  }\n  await recordCodexLlmItem(state, item, { allowAnonymousText: false });\n}\nasync function handleCodexItemUpdated(state, item) {\n  updateCodexItem(state, item);\n  await recordCodexLlmItem(state, item, { allowAnonymousText: false });\n}\nasync function handleCodexItemCompleted(state, item) {\n  state.completedItems.push(item);\n  collectOutputText(state, item);\n  if (isCodexToolItem(item)) {\n    await finishActiveLlmSpan(state);\n    await finishCodexItemSpan(state, item);\n    return;\n  }\n  await recordCodexLlmItem(state, item, { allowAnonymousText: true });\n}\nasync function createCompletedItemSpan(state, item) {\n  const spanArgs = await itemSpanArgs(state, item);\n  if (!spanArgs) {\n    return;\n  }\n  const span = startSpan(\n    withSpanInstrumentationName(\n      spanArgs.start,\n      INSTRUMENTATION_NAMES.OPENAI_CODEX\n    )\n  );\n  safeLog(span, spanArgs.end);\n  span.end();\n}\nasync function recordCodexLlmItem(state, item, options) {\n  if (item.type !== \"agent_message\" && item.type !== \"reasoning\") {\n    return;\n  }\n  const text = typeof item.text === \"string\" ? item.text : void 0;\n  const active = await ensureActiveLlmSpan(state);\n  if (!text) {\n    return;\n  }\n  if (item.type === \"agent_message\") {\n    if (item.id) {\n      active.messagesById.set(item.id, text);\n    } else if (options.allowAnonymousText) {\n      active.anonymousMessages.push(text);\n    }\n  } else if (item.id) {\n    active.reasoningById.set(item.id, text);\n  } else if (options.allowAnonymousText) {\n    active.anonymousReasoning.push(text);\n  }\n}\nasync function ensureActiveLlmSpan(state) {\n  if (state.activeLlmSpan) {\n    return state.activeLlmSpan;\n  }\n  const sequence = state.llmSequence + 1;\n  state.llmSequence = sequence;\n  const metadata = {\n    ...state.metadata.provider ? { provider: state.metadata.provider } : {},\n    ...state.metadata.model ? { model: state.metadata.model } : {},\n    ...state.metadata[\"openai_codex.model\"] ? { \"openai_codex.model\": state.metadata[\"openai_codex.model\"] } : {},\n    ...state.metadata[\"openai_codex.model_reasoning_effort\"] ? {\n      \"openai_codex.model_reasoning_effort\": state.metadata[\"openai_codex.model_reasoning_effort\"]\n    } : {},\n    ...state.metadata[\"openai_codex.operation\"] ? { \"openai_codex.operation\": state.metadata[\"openai_codex.operation\"] } : {},\n    ...state.metadata[\"openai_codex.thread_id\"] ? { \"openai_codex.thread_id\": state.metadata[\"openai_codex.thread_id\"] } : {},\n    \"openai_codex.llm_sequence\": sequence\n  };\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          ...sequence === 1 ? { input: state.input } : {},\n          metadata\n        },\n        name: \"OpenAI Codex LLM\",\n        parent: await state.span.export(),\n        spanAttributes: { type: \"llm\" /* LLM */ }\n      },\n      INSTRUMENTATION_NAMES.OPENAI_CODEX\n    )\n  );\n  state.activeLlmSpan = {\n    anonymousMessages: [],\n    anonymousReasoning: [],\n    messagesById: /* @__PURE__ */ new Map(),\n    metadata,\n    reasoningById: /* @__PURE__ */ new Map(),\n    span\n  };\n  return state.activeLlmSpan;\n}\nasync function finishActiveLlmSpan(state, error) {\n  const active = state.activeLlmSpan;\n  if (!active) {\n    return;\n  }\n  state.activeLlmSpan = void 0;\n  const output = buildLlmOutput(active);\n  safeLog(active.span, {\n    ...error ? { error: toLoggedError(error) } : {},\n    metadata: active.metadata,\n    ...output ? { output } : {}\n  });\n  active.span.end();\n}\nfunction buildLlmOutput(active) {\n  const reasoning = [\n    ...active.reasoningById.values(),\n    ...active.anonymousReasoning\n  ].filter((text) => text.length > 0).join(\"\\n\");\n  const message = [...active.messagesById.values(), ...active.anonymousMessages].filter((text) => text.length > 0).join(\"\\n\");\n  const output = {\n    ...reasoning ? { reasoning } : {},\n    ...message ? { message } : {}\n  };\n  return Object.keys(output).length > 0 ? output : void 0;\n}\nasync function startCodexItemSpan(state, item) {\n  const itemId = item.id;\n  if (!itemId || state.activeItemSpans.has(itemId)) {\n    return;\n  }\n  const spanArgs = await itemSpanArgs(state, item);\n  if (!spanArgs) {\n    return;\n  }\n  state.activeItemSpans.set(\n    itemId,\n    startSpan(\n      withSpanInstrumentationName(\n        spanArgs.start,\n        INSTRUMENTATION_NAMES.OPENAI_CODEX\n      )\n    )\n  );\n}\nfunction updateCodexItem(state, item) {\n  if (item.type === \"agent_message\" && typeof item.text === \"string\") {\n    state.finalResponse = item.text;\n  }\n}\nasync function finishCodexItemSpan(state, item) {\n  const itemId = item.id;\n  if (!itemId) {\n    await createCompletedItemSpan(state, item);\n    return;\n  }\n  const span = state.activeItemSpans.get(itemId);\n  if (!span) {\n    await createCompletedItemSpan(state, item);\n    return;\n  }\n  state.activeItemSpans.delete(itemId);\n  const spanArgs = await itemSpanArgs(state, item);\n  if (spanArgs) {\n    safeLog(span, spanArgs.end);\n  }\n  span.end();\n}\nfunction isCodexToolItem(item) {\n  return item.type === \"command_execution\" || item.type === \"file_change\" || item.type === \"mcp_tool_call\" || item.type === \"web_search\";\n}\nasync function itemSpanArgs(state, item) {\n  const parent = await state.span.export();\n  const baseMetadata = {\n    \"openai_codex.item_id\": item.id,\n    \"openai_codex.item_type\": item.type\n  };\n  switch (item.type) {\n    case \"command_execution\":\n      return commandSpanArgs(parent, baseMetadata, item);\n    case \"mcp_tool_call\":\n      return mcpToolSpanArgs(parent, baseMetadata, item);\n    case \"web_search\":\n      return webSearchSpanArgs(parent, baseMetadata, item);\n    case \"file_change\":\n      return fileChangeSpanArgs(parent, baseMetadata, item);\n    default:\n      return void 0;\n  }\n}\nfunction commandSpanArgs(parent, baseMetadata, item) {\n  const metadata = {\n    ...baseMetadata,\n    \"gen_ai.tool.name\": \"command_execution\",\n    \"openai_codex.command.exit_code\": item.exit_code,\n    \"openai_codex.command.status\": item.status\n  };\n  return {\n    start: {\n      event: { input: item.command, metadata },\n      name: \"tool: command_execution\",\n      parent,\n      spanAttributes: { type: \"tool\" /* TOOL */ }\n    },\n    end: {\n      ...item.status === \"failed\" ? { error: item.aggregated_output || \"Command execution failed\" } : {},\n      metadata,\n      output: item.aggregated_output\n    }\n  };\n}\nfunction mcpToolSpanArgs(parent, baseMetadata, item) {\n  const toolName = item.tool || \"mcp_tool_call\";\n  const metadata = {\n    ...baseMetadata,\n    \"gen_ai.tool.name\": toolName,\n    \"openai_codex.mcp.server\": item.server,\n    \"openai_codex.mcp.status\": item.status\n  };\n  return {\n    start: {\n      event: {\n        input: {\n          arguments: item.arguments,\n          server: item.server,\n          tool: item.tool\n        },\n        metadata\n      },\n      name: `tool: ${toolName}`,\n      parent,\n      spanAttributes: { type: \"tool\" /* TOOL */ }\n    },\n    end: {\n      ...item.error?.message ? { error: item.error.message } : {},\n      metadata,\n      output: item.result\n    }\n  };\n}\nfunction webSearchSpanArgs(parent, baseMetadata, item) {\n  const metadata = {\n    ...baseMetadata,\n    \"gen_ai.tool.name\": \"web_search\"\n  };\n  return {\n    start: {\n      event: { input: item.query, metadata },\n      name: \"tool: web_search\",\n      parent,\n      spanAttributes: { type: \"tool\" /* TOOL */ }\n    },\n    end: { metadata }\n  };\n}\nfunction fileChangeSpanArgs(parent, baseMetadata, item) {\n  const metadata = {\n    ...baseMetadata,\n    \"gen_ai.tool.name\": \"file_change\",\n    \"openai_codex.file_change.status\": item.status\n  };\n  return {\n    start: {\n      event: { input: item.changes, metadata },\n      name: \"tool: file_change\",\n      parent,\n      spanAttributes: { type: \"tool\" /* TOOL */ }\n    },\n    end: {\n      ...item.status === \"failed\" ? { error: \"File change failed\" } : {},\n      metadata,\n      output: item.changes\n    }\n  };\n}\nfunction endOpenItemSpans(state) {\n  for (const [, span] of state.activeItemSpans) {\n    safeLog(span, { error: \"Codex item did not complete\" });\n    span.end();\n  }\n  state.activeItemSpans.clear();\n}\nfunction collectOutputText(state, item) {\n  if (item.type === \"agent_message\" && typeof item.text === \"string\") {\n    state.finalResponse = item.text;\n    state.outputText.push(item.text);\n  } else if (item.type === \"reasoning\" && typeof item.text === \"string\" && !state.finalResponse) {\n    state.outputText.push(item.text);\n  }\n}\nfunction extractThreadFromEvent(event) {\n  return event.self && typeof event.self === \"object\" ? event.self : void 0;\n}\nfunction extractThreadMetadata(thread) {\n  const threadOptions = extractThreadOptions(thread);\n  return {\n    ...thread?.id ? { \"openai_codex.thread_id\": thread.id } : {},\n    ...extractThreadOptionsMetadata(threadOptions)\n  };\n}\nfunction extractThreadOptions(thread) {\n  if (!thread || typeof thread !== \"object\") {\n    return void 0;\n  }\n  const value = Reflect.get(thread, \"_threadOptions\");\n  return value && typeof value === \"object\" ? value : void 0;\n}\nfunction extractThreadOptionsMetadata(options) {\n  if (!options) {\n    return {};\n  }\n  return {\n    ...options.model ? { model: options.model } : {},\n    ...options.model ? { \"openai_codex.model\": options.model } : {},\n    ...options.sandboxMode ? { \"openai_codex.sandbox_mode\": options.sandboxMode } : {},\n    ...options.workingDirectory ? { \"openai_codex.working_directory\": options.workingDirectory } : {},\n    ...options.skipGitRepoCheck !== void 0 ? { \"openai_codex.skip_git_repo_check\": options.skipGitRepoCheck } : {},\n    ...options.modelReasoningEffort ? {\n      \"openai_codex.model_reasoning_effort\": options.modelReasoningEffort\n    } : {},\n    ...options.networkAccessEnabled !== void 0 ? {\n      \"openai_codex.network_access_enabled\": options.networkAccessEnabled\n    } : {},\n    ...options.webSearchMode ? { \"openai_codex.web_search_mode\": options.webSearchMode } : {},\n    ...options.webSearchEnabled !== void 0 ? { \"openai_codex.web_search_enabled\": options.webSearchEnabled } : {},\n    ...options.approvalPolicy ? { \"openai_codex.approval_policy\": options.approvalPolicy } : {},\n    ...options.additionalDirectories ? {\n      \"openai_codex.additional_directories\": options.additionalDirectories\n    } : {}\n  };\n}\nfunction extractTurnOptionsMetadata(options) {\n  if (!options) {\n    return {};\n  }\n  return {\n    ...options.outputSchema !== void 0 ? { \"openai_codex.output_schema\": true } : {}\n  };\n}\nfunction sanitizeInput(input) {\n  if (typeof input === \"string\") {\n    return input;\n  }\n  return input.map((item) => {\n    if (item.type === \"local_image\") {\n      return {\n        path: item.path,\n        type: \"local_image\"\n      };\n    }\n    return item;\n  });\n}\nfunction extractUsageMetrics(usage) {\n  if (!usage) {\n    return {};\n  }\n  const metrics = {};\n  const promptTokens = firstNumber(usage.prompt_tokens, usage.input_tokens);\n  if (promptTokens !== void 0) {\n    metrics.prompt_tokens = promptTokens;\n  }\n  const promptCachedTokens = firstNumber(\n    usage.prompt_cached_tokens,\n    usage.cached_input_tokens\n  );\n  if (promptCachedTokens !== void 0) {\n    metrics.prompt_cached_tokens = promptCachedTokens;\n  }\n  const completionTokens = firstNumber(\n    usage.completion_tokens,\n    usage.output_tokens\n  );\n  if (completionTokens !== void 0) {\n    metrics.completion_tokens = completionTokens;\n  }\n  const completionReasoningTokens = firstNumber(\n    usage.completion_reasoning_tokens,\n    usage.reasoning_output_tokens\n  );\n  if (completionReasoningTokens !== void 0) {\n    metrics.completion_reasoning_tokens = completionReasoningTokens;\n  }\n  const totalTokens = firstNumber(\n    usage.totalTokens,\n    usage.tokens,\n    usage.total_tokens\n  );\n  if (totalTokens !== void 0) {\n    metrics.tokens = totalTokens;\n  }\n  return metrics;\n}\nfunction firstNumber(...values) {\n  for (const value of values) {\n    if (typeof value === \"number\") {\n      return value;\n    }\n  }\n  return void 0;\n}\nfunction buildDurationMetrics(startTime) {\n  const end = getCurrentUnixTimestamp();\n  return {\n    duration: end - startTime,\n    end,\n    start: startTime\n  };\n}\nfunction cleanMetrics(metrics) {\n  const cleaned = {};\n  for (const [key, value] of Object.entries(metrics)) {\n    if (value !== void 0 && Number.isFinite(value)) {\n      cleaned[key] = value;\n    }\n  }\n  return cleaned;\n}\nfunction isAsyncIterable2(value) {\n  return !!value && typeof value === \"object\" && Symbol.asyncIterator in value && typeof value[Symbol.asyncIterator] === \"function\";\n}\nfunction safeLog(span, event) {\n  try {\n    span.log(event);\n  } catch (error) {\n    logInstrumentationError2(\"OpenAI Codex span log\", error);\n  }\n}\nfunction logInstrumentationError2(context, error) {\n  debugLogger.error(`Error processing ${context}:`, error);\n}\n\n// src/wrappers/anthropic-tokens-util.ts\nfunction finalizeAnthropicTokens(metrics) {\n  const hasSplitCacheCreationTokens = metrics.prompt_cache_creation_5m_tokens !== void 0 || metrics.prompt_cache_creation_1h_tokens !== void 0;\n  const splitCacheCreationTokens = (metrics.prompt_cache_creation_5m_tokens || 0) + (metrics.prompt_cache_creation_1h_tokens || 0);\n  const aggregateCacheCreationTokens = metrics.prompt_cache_creation_tokens || 0;\n  const effectiveCacheCreationTokens = Math.max(\n    aggregateCacheCreationTokens,\n    splitCacheCreationTokens\n  );\n  const prompt_tokens = (metrics.prompt_tokens || 0) + (metrics.prompt_cached_tokens || 0) + effectiveCacheCreationTokens;\n  const finalized = {\n    ...metrics,\n    prompt_tokens,\n    tokens: prompt_tokens + (metrics.completion_tokens || 0)\n  };\n  if (hasSplitCacheCreationTokens && splitCacheCreationTokens >= aggregateCacheCreationTokens) {\n    delete finalized.prompt_cache_creation_tokens;\n  }\n  return finalized;\n}\nfunction toNumericMetrics(metrics) {\n  return Object.fromEntries(\n    Object.entries(metrics).filter(\n      (entry) => entry[1] !== void 0\n    )\n  );\n}\nfunction extractAnthropicCacheTokens(cacheReadTokens = 0, cacheCreationTokens = 0) {\n  const cacheTokens = {};\n  if (cacheReadTokens > 0) {\n    cacheTokens.prompt_cached_tokens = cacheReadTokens;\n  }\n  if (cacheCreationTokens > 0) {\n    cacheTokens.prompt_cache_creation_tokens = cacheCreationTokens;\n  }\n  return cacheTokens;\n}\n\n// src/wrappers/anthropic-session-collector.ts\nvar sessionStreamCollectors = /* @__PURE__ */ new WeakMap();\nfunction registerAnthropicSessionStreamCollector(stream, collector) {\n  sessionStreamCollectors.set(stream, collector);\n}\nfunction collectAnthropicSession(stream) {\n  const collector = sessionStreamCollectors.get(stream);\n  if (!collector) {\n    return stream;\n  }\n  sessionStreamCollectors.delete(stream);\n  try {\n    collector();\n  } catch (error) {\n    debugLogger.error(\"Failed to collect Anthropic Sessions stream:\", error);\n  }\n  return stream;\n}\n\n// src/instrumentation/plugins/anthropic-channels.ts\nvar anthropicChannels = defineChannels(\n  \"@anthropic-ai/sdk\",\n  {\n    messagesCreate: channel({\n      channelName: \"messages.create\",\n      kind: \"async\"\n    }),\n    betaMessagesCreate: channel({\n      channelName: \"beta.messages.create\",\n      kind: \"async\"\n    }),\n    betaMessagesToolRunner: channel({\n      channelName: \"beta.messages.toolRunner\",\n      kind: \"sync-stream\"\n    }),\n    betaSessionsEventsStream: channel({\n      channelName: \"beta.sessions.events.stream\",\n      kind: \"async\"\n    }),\n    betaSessionsThreadsEventsStream: channel({\n      channelName: \"beta.sessions.threads.events.stream\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.ANTHROPIC }\n);\n\n// src/instrumentation/plugins/anthropic-plugin.ts\nvar ANTHROPIC_TOOL_RUNNER_TOOL_WRAPPED = /* @__PURE__ */ Symbol.for(\n  \"braintrust.anthropic_tool_runner_tool_wrapped\"\n);\nvar AnthropicPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToAnthropicChannels();\n    this.subscribeToAnthropicToolRunner();\n    this.subscribeToAnthropicSessionStreams();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToAnthropicChannels() {\n    const anthropicConfig = {\n      name: \"anthropic.messages.create\",\n      type: \"llm\" /* LLM */,\n      extractInput: (args) => {\n        const params = args[0] || {};\n        const input = coalesceInput(params.messages || [], params.system);\n        const metadata = filterFrom(params, [\"messages\", \"system\"]);\n        return {\n          input: processAttachmentsInInput(input),\n          metadata: { ...metadata, provider: \"anthropic\" }\n        };\n      },\n      extractOutput: (message) => {\n        return message ? { role: message.role, content: message.content } : null;\n      },\n      extractMetrics: (message, startTime) => {\n        const metrics = parseMetricsFromUsage2(message?.usage);\n        if (startTime) {\n          metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n        }\n        const finalized = finalizeAnthropicTokens(metrics);\n        return Object.fromEntries(\n          Object.entries(finalized).filter(\n            (entry) => entry[1] !== void 0\n          )\n        );\n      },\n      extractMetadata: (message) => {\n        const metadata = {};\n        const metas = [\"stop_reason\", \"stop_sequence\"];\n        for (const m of metas) {\n          if (message?.[m] !== void 0) {\n            metadata[m] = message[m];\n          }\n        }\n        return metadata;\n      },\n      aggregateChunks: (chunks) => aggregateAnthropicStreamChunks(chunks)\n    };\n    this.unsubscribers.push(\n      traceStreamingChannel(anthropicChannels.messagesCreate, anthropicConfig)\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(anthropicChannels.betaMessagesCreate, {\n        ...anthropicConfig,\n        name: \"anthropic.messages.create\"\n      })\n    );\n  }\n  subscribeToAnthropicToolRunner() {\n    const tracingChannel = anthropicChannels.betaMessagesToolRunner.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        if (isAutoInstrumentationSuppressed()) {\n          return;\n        }\n        const params = event.arguments[0] ?? {};\n        const span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name: \"anthropic.beta.messages.toolRunner\",\n              spanAttributes: {\n                type: \"task\" /* TASK */\n              }\n            },\n            INSTRUMENTATION_NAMES.ANTHROPIC\n          )\n        );\n        span.log({\n          input: processAttachmentsInInput(\n            coalesceInput(params.messages ?? [], params.system)\n          ),\n          metadata: {\n            ...extractAnthropicToolRunnerMetadata(params),\n            provider: \"anthropic\"\n          }\n        });\n        const state = {\n          aggregatedMetrics: {},\n          finalized: false,\n          iterationCount: 0,\n          seenMessages: /* @__PURE__ */ new WeakSet(),\n          span,\n          startTime: getCurrentUnixTimestamp()\n        };\n        states.set(event, state);\n      },\n      end: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        patchAnthropicToolRunner({\n          runner: event.result,\n          state\n        });\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        finalizeAnthropicToolRunnerError(state, event.error);\n        states.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToAnthropicSessionStreams() {\n    this.subscribeToAnthropicSessionStream(\n      anthropicChannels.betaSessionsEventsStream,\n      false\n    );\n    this.subscribeToAnthropicSessionStream(\n      anthropicChannels.betaSessionsThreadsEventsStream,\n      true\n    );\n  }\n  subscribeToAnthropicSessionStream(channel2, isThread) {\n    const tracingChannel = channel2.tracingChannel();\n    const pending = /* @__PURE__ */ new WeakSet();\n    const handlers = {\n      start: (event) => {\n        if (isAutoInstrumentationSuppressed()) {\n          return;\n        }\n        pending.add(event);\n      },\n      asyncEnd: (event) => {\n        if (!pending.delete(event)) {\n          return;\n        }\n        const stream = event.result;\n        if (!isAsyncIterable(stream)) {\n          return;\n        }\n        registerAnthropicSessionStreamCollector(stream, () => {\n          wrapAnthropicSessionEventStream(stream, isThread);\n        });\n      },\n      error: (event) => {\n        pending.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => tracingChannel.unsubscribe(handlers));\n  }\n};\nfunction wrapAnthropicSessionEventStream(stream, isThread) {\n  const state = {\n    history: [],\n    isThread,\n    pendingInput: [],\n    seenEventIds: /* @__PURE__ */ new Set()\n  };\n  patchStreamIfNeeded(stream, {\n    onChunk: (event) => handleAnthropicSessionEvent(state, event),\n    onComplete: () => finalizeAnthropicSessionTurn(state),\n    onError: (error) => finalizeAnthropicSessionTurn(state, error)\n  });\n  return stream;\n}\nfunction handleAnthropicSessionEvent(state, event) {\n  try {\n    if (typeof event.id === \"string\" && event.type !== \"event_delta\" && state.seenEventIds.has(event.id)) {\n      return;\n    }\n    if (typeof event.id === \"string\" && event.type !== \"event_delta\") {\n      state.seenEventIds.add(event.id);\n    }\n    switch (event.type) {\n      case \"user.message\":\n      case \"system.message\":\n        recordAnthropicSessionInput(\n          state,\n          event\n        );\n        break;\n      case \"session.status_running\":\n        if (!state.isThread) {\n          ensureAnthropicSessionTurn(state);\n        }\n        break;\n      case \"session.thread_status_running\":\n        if (state.isThread) {\n          ensureAnthropicSessionTurn(state);\n        }\n        break;\n      case \"span.model_request_start\":\n        if (typeof event.id === \"string\") {\n          startAnthropicSessionModel(state, event.id);\n        }\n        break;\n      case \"event_delta\":\n        recordAnthropicSessionFirstToken(state, event);\n        break;\n      case \"agent.message\":\n        recordAnthropicSessionMessage(\n          state,\n          event\n        );\n        break;\n      case \"agent.custom_tool_use\":\n      case \"agent.mcp_tool_use\":\n      case \"agent.tool_use\":\n        startAnthropicSessionTool(state, event);\n        break;\n      case \"user.tool_confirmation\":\n        recordAnthropicSessionToolConfirmation(state, event);\n        break;\n      case \"agent.mcp_tool_result\":\n      case \"agent.tool_result\":\n      case \"user.custom_tool_result\":\n      case \"user.tool_result\":\n        finalizeAnthropicSessionTool(\n          state,\n          event\n        );\n        break;\n      case \"span.model_request_end\":\n        finalizeAnthropicSessionModel(\n          state,\n          event\n        );\n        break;\n      case \"session.status_idle\":\n      case \"session.thread_status_idle\": {\n        if (event.type === \"session.status_idle\" && state.isThread || event.type === \"session.thread_status_idle\" && !state.isThread) {\n          break;\n        }\n        const stopReason = isObject(event.stop_reason) ? event.stop_reason.type : void 0;\n        if (stopReason === \"end_turn\") {\n          finalizeAnthropicSessionTurn(state);\n        } else if (stopReason === \"retries_exhausted\") {\n          finalizeAnthropicSessionTurn(\n            state,\n            \"Anthropic session retries exhausted\"\n          );\n        }\n        break;\n      }\n      case \"session.error\":\n        finalizeAnthropicSessionTurn(state, event.error);\n        break;\n      case \"session.deleted\":\n      case \"session.status_terminated\":\n      case \"session.thread_status_terminated\":\n        if (event.type === \"session.deleted\" || event.type === \"session.status_terminated\" && !state.isThread || event.type === \"session.thread_status_terminated\" && state.isThread) {\n          finalizeAnthropicSessionTurn(state);\n        }\n        break;\n      default:\n        break;\n    }\n  } catch (error) {\n    debugLogger.debug(\"Error processing Anthropic Sessions event:\", error);\n  }\n}\nfunction ensureAnthropicSessionTurn(state) {\n  if (state.activeTurn) {\n    return state.activeTurn;\n  }\n  const input = state.pendingInput;\n  state.pendingInput = [];\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          ...input.length > 0 ? { input } : {},\n          metadata: { provider: \"anthropic\" }\n        },\n        name: state.isThread ? \"anthropic.beta.sessions.thread.turn\" : \"anthropic.beta.sessions.turn\",\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.ANTHROPIC\n    )\n  );\n  state.activeTurn = {\n    activeTools: /* @__PURE__ */ new Map(),\n    input: input.slice(),\n    metrics: {},\n    span\n  };\n  return state.activeTurn;\n}\nfunction recordAnthropicSessionInput(state, event) {\n  const content = processAttachmentsInInput(event.content);\n  const message = {\n    role: event.type === \"system.message\" ? \"system\" : \"user\",\n    content\n  };\n  state.history.push(message);\n  if (state.activeTurn) {\n    state.activeTurn.input.push(message);\n  } else {\n    state.pendingInput.push(message);\n  }\n}\nfunction startAnthropicSessionModel(state, startEventId) {\n  const turn = ensureAnthropicSessionTurn(state);\n  if (turn.activeModel) {\n    finalizeAnthropicSessionModelState(state, turn);\n  }\n  const span = withCurrent(\n    turn.span,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            ...state.history.length > 0 ? { input: state.history.slice() } : {},\n            metadata: { provider: \"anthropic\" }\n          },\n          name: \"anthropic.messages.create\",\n          spanAttributes: { type: \"llm\" /* LLM */ }\n        },\n        INSTRUMENTATION_NAMES.ANTHROPIC\n      )\n    )\n  );\n  turn.activeModel = {\n    output: [],\n    span,\n    startEventId,\n    startTime: getCurrentUnixTimestamp()\n  };\n}\nfunction recordAnthropicSessionFirstToken(state, event) {\n  const model = state.activeTurn?.activeModel;\n  if (!model || model.firstTokenTime !== void 0 || !isObject(event.delta) || !isObject(event.delta.content) || typeof event.delta.content.text !== \"string\") {\n    return;\n  }\n  model.firstTokenTime = getCurrentUnixTimestamp();\n}\nfunction recordAnthropicSessionMessage(state, event) {\n  const turn = ensureAnthropicSessionTurn(state);\n  const content = processAttachmentsInInput(\n    event.content\n  );\n  if (turn.activeModel) {\n    turn.activeModel.output.push(...content);\n  } else {\n    const output = { role: \"assistant\", content };\n    turn.lastOutput = output;\n    state.history.push(output);\n  }\n}\nfunction startAnthropicSessionTool(state, event) {\n  const turn = ensureAnthropicSessionTurn(state);\n  if (turn.activeModel) {\n    turn.activeModel.output.push({\n      type: \"tool_use\",\n      id: event.id,\n      name: event.name,\n      input: event.input\n    });\n  }\n  const existing = turn.activeTools.get(event.id);\n  if (existing) {\n    existing.span.end();\n    turn.activeTools.delete(event.id);\n  }\n  const span = withCurrent(\n    turn.span,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: { input: event.input },\n          name: event.name,\n          spanAttributes: { type: \"tool\" /* TOOL */ }\n        },\n        INSTRUMENTATION_NAMES.ANTHROPIC\n      )\n    )\n  );\n  const toolState = {\n    approval: event.evaluated_permission === \"allow\" ? \"approved\" : event.evaluated_permission === \"deny\" ? \"denied\" : void 0,\n    span\n  };\n  turn.activeTools.set(event.id, toolState);\n  if (toolState.approval === \"denied\") {\n    finalizeAnthropicSessionToolState(toolState);\n    turn.activeTools.delete(event.id);\n  }\n}\nfunction recordAnthropicSessionToolConfirmation(state, event) {\n  if (typeof event.tool_use_id !== \"string\" || event.result !== \"allow\" && event.result !== \"deny\") {\n    return;\n  }\n  const turn = state.activeTurn;\n  const tool = turn?.activeTools.get(event.tool_use_id);\n  if (!turn || !tool) {\n    return;\n  }\n  tool.approval = event.result === \"allow\" ? \"approved\" : \"denied\";\n  if (tool.approval === \"denied\") {\n    finalizeAnthropicSessionToolState(tool);\n    turn.activeTools.delete(event.tool_use_id);\n  }\n}\nfunction finalizeAnthropicSessionTool(state, event) {\n  const toolUseId = event.tool_use_id ?? event.mcp_tool_use_id ?? event.custom_tool_use_id;\n  if (!toolUseId) {\n    return;\n  }\n  const content = processAttachmentsInInput(event.content);\n  const turn = state.activeTurn;\n  const tool = turn?.activeTools.get(toolUseId);\n  if (turn && tool) {\n    finalizeAnthropicSessionToolState(tool, event, content);\n    turn.activeTools.delete(toolUseId);\n  }\n  const toolResult = {\n    type: \"tool_result\",\n    tool_use_id: toolUseId,\n    ...content !== void 0 ? { content } : {},\n    ...event.is_error === true ? { is_error: true } : {}\n  };\n  state.history.push({\n    role: \"user\",\n    content: [toolResult]\n  });\n}\nfunction finalizeAnthropicSessionToolState(state, event, content = event?.content) {\n  safeAnthropicSessionLog(state.span, {\n    ...event?.is_error === true ? {\n      error: content ?? \"Anthropic session tool execution failed\"\n    } : {},\n    ...state.approval ? { metadata: { tool_approval: state.approval } } : {},\n    ...content !== void 0 ? { output: content } : {}\n  });\n  state.span.end();\n}\nfunction finalizeAnthropicSessionModel(state, event) {\n  const turn = state.activeTurn;\n  const model = turn?.activeModel;\n  if (!turn || !model || model.startEventId !== event.model_request_start_id) {\n    return;\n  }\n  finalizeAnthropicSessionModelState(state, turn, event);\n}\nfunction finalizeAnthropicSessionModelState(state, turn, event) {\n  const model = turn.activeModel;\n  if (!model) {\n    return;\n  }\n  turn.activeModel = void 0;\n  const metrics = event ? parseAnthropicSessionModelUsage(event.model_usage) : {};\n  if (model.firstTokenTime !== void 0) {\n    metrics.time_to_first_token = model.firstTokenTime - model.startTime;\n  }\n  const output = model.output.length > 0 ? { role: \"assistant\", content: model.output } : void 0;\n  safeAnthropicSessionLog(model.span, {\n    ...event?.is_error ? { error: \"Anthropic session model request failed\" } : {},\n    ...Object.keys(metrics).length > 0 ? { metrics } : {},\n    ...output ? { output } : {}\n  });\n  model.span.end();\n  if (output) {\n    turn.lastOutput = output;\n    state.history.push(output);\n  }\n  for (const key of [\n    \"prompt_tokens\",\n    \"completion_tokens\",\n    \"tokens\",\n    \"prompt_cached_tokens\",\n    \"prompt_cache_creation_tokens\"\n  ]) {\n    const value = metrics[key];\n    if (typeof value === \"number\") {\n      turn.metrics[key] = (turn.metrics[key] ?? 0) + value;\n    }\n  }\n}\nfunction parseAnthropicSessionModelUsage(usage) {\n  const finalized = finalizeAnthropicTokens({\n    completion_tokens: usage.output_tokens,\n    prompt_cache_creation_tokens: usage.cache_creation_input_tokens,\n    prompt_cached_tokens: usage.cache_read_input_tokens,\n    prompt_tokens: usage.input_tokens\n  });\n  return Object.fromEntries(\n    Object.entries(finalized).filter(\n      (entry) => entry[1] !== void 0\n    )\n  );\n}\nfunction finalizeAnthropicSessionTurn(state, error) {\n  const turn = state.activeTurn;\n  if (!turn) {\n    return;\n  }\n  state.activeTurn = void 0;\n  finalizeAnthropicSessionModelState(state, turn);\n  for (const tool of turn.activeTools.values()) {\n    finalizeAnthropicSessionToolState(tool);\n  }\n  turn.activeTools.clear();\n  safeAnthropicSessionLog(turn.span, {\n    ...error !== void 0 ? { error: error instanceof Error ? error : toLoggedError(error) } : {},\n    ...turn.input.length > 0 ? { input: turn.input } : {},\n    ...turn.lastOutput ? { output: turn.lastOutput } : {},\n    ...Object.keys(turn.metrics).length > 0 ? { metrics: turn.metrics } : {}\n  });\n  turn.span.end();\n}\nfunction safeAnthropicSessionLog(span, event) {\n  try {\n    span.log(event);\n  } catch (error) {\n    debugLogger.debug(\"Error logging Anthropic Sessions span:\", error);\n  }\n}\nfunction parseMetricsFromUsage2(usage) {\n  if (!usage) {\n    return {};\n  }\n  const metrics = {};\n  function saveIfExistsTo(source, target) {\n    const value = usage[source];\n    if (value !== void 0 && value !== null && typeof value === \"number\") {\n      metrics[target] = value;\n    }\n  }\n  saveIfExistsTo(\"input_tokens\", \"prompt_tokens\");\n  saveIfExistsTo(\"output_tokens\", \"completion_tokens\");\n  saveIfExistsTo(\"cache_read_input_tokens\", \"prompt_cached_tokens\");\n  saveIfExistsTo(\"cache_creation_input_tokens\", \"prompt_cache_creation_tokens\");\n  if (isObject(usage.cache_creation)) {\n    const cacheCreation = usage.cache_creation;\n    for (const [source, target] of [\n      [\"ephemeral_5m_input_tokens\", \"prompt_cache_creation_5m_tokens\"],\n      [\"ephemeral_1h_input_tokens\", \"prompt_cache_creation_1h_tokens\"]\n    ]) {\n      const value = cacheCreation[source];\n      if (typeof value === \"number\") {\n        metrics[target] = value;\n      }\n    }\n  }\n  if (isObject(usage.output_tokens_details)) {\n    const thinkingTokens = usage.output_tokens_details.thinking_tokens;\n    if (typeof thinkingTokens === \"number\") {\n      metrics.completion_reasoning_tokens = thinkingTokens;\n    }\n  }\n  if (isObject(usage.server_tool_use)) {\n    for (const [name, value] of Object.entries(usage.server_tool_use)) {\n      if (typeof value === \"number\") {\n        metrics[`server_tool_use_${name}`] = value;\n      }\n    }\n  }\n  return metrics;\n}\nfunction extractAnthropicToolRunnerMetadata(params) {\n  const metadata = filterFrom(params, [\"messages\", \"system\", \"tools\"]);\n  const toolNames = extractAnthropicToolNames(params.tools);\n  return {\n    ...metadata,\n    operation: \"toolRunner\",\n    ...toolNames.length > 0 ? { tool_names: toolNames } : {}\n  };\n}\nfunction extractAnthropicToolNames(tools) {\n  const toolNames = [];\n  for (const tool of tools) {\n    if (!tool || typeof tool !== \"object\") {\n      continue;\n    }\n    const toolRecord = tool;\n    if (typeof toolRecord.name === \"string\") {\n      toolNames.push(toolRecord.name);\n      continue;\n    }\n    if (typeof toolRecord.mcp_server_name === \"string\") {\n      toolNames.push(toolRecord.mcp_server_name);\n    }\n  }\n  return toolNames;\n}\nfunction getAnthropicToolRunnerInput(args) {\n  return args.length > 0 ? args[0] : void 0;\n}\nfunction wrapAnthropicToolRunnerTools(params, state) {\n  if (!Array.isArray(params.tools)) {\n    return;\n  }\n  params.tools = params.tools.map(\n    (tool, index) => wrapAnthropicToolRunnerTool(tool, index, state)\n  );\n}\nfunction wrapAnthropicToolRunnerTool(tool, index, state) {\n  if (!tool || typeof tool !== \"object\" || typeof tool.run !== \"function\" || tool[ANTHROPIC_TOOL_RUNNER_TOOL_WRAPPED]) {\n    return tool;\n  }\n  const toolName = typeof tool.name === \"string\" ? tool.name : `tool[${index}]`;\n  const originalRun = tool.run;\n  const runDescriptor = Object.getOwnPropertyDescriptor(tool, \"run\");\n  const wrappedTool = Object.create(\n    Object.getPrototypeOf(tool),\n    Object.getOwnPropertyDescriptors(tool)\n  );\n  Object.defineProperty(wrappedTool, \"run\", {\n    configurable: runDescriptor?.configurable ?? true,\n    enumerable: runDescriptor?.enumerable ?? true,\n    value: function braintrustAnthropicToolRunnerRun(...args) {\n      return state.span.traced(\n        (span) => {\n          const finalizeSuccess = (result) => {\n            span.log({ output: result });\n            return result;\n          };\n          const finalizeError = (error) => {\n            span.log({ error: toLoggedError(error) });\n            throw error;\n          };\n          try {\n            const result = Reflect.apply(originalRun, this, args);\n            if (isPromiseLike(result)) {\n              return result.then(finalizeSuccess, finalizeError);\n            }\n            return finalizeSuccess(result);\n          } catch (error) {\n            return finalizeError(error);\n          }\n        },\n        withSpanInstrumentationName(\n          {\n            event: {\n              input: getAnthropicToolRunnerInput(args),\n              metadata: {\n                \"gen_ai.tool.name\": toolName,\n                provider: \"anthropic\"\n              }\n            },\n            name: `tool: ${toolName}`,\n            spanAttributes: {\n              type: \"tool\" /* TOOL */\n            }\n          },\n          INSTRUMENTATION_NAMES.ANTHROPIC\n        )\n      );\n    },\n    writable: runDescriptor?.writable ?? true\n  });\n  Object.defineProperty(wrappedTool, ANTHROPIC_TOOL_RUNNER_TOOL_WRAPPED, {\n    configurable: false,\n    enumerable: false,\n    value: true,\n    writable: false\n  });\n  return wrappedTool;\n}\nfunction getAnthropicToolRunnerParams(runnerRecord) {\n  const params = Reflect.get(runnerRecord, \"params\");\n  return params && typeof params === \"object\" ? params : void 0;\n}\nfunction ensureAnthropicToolRunnerToolsWrapped(runnerRecord, state) {\n  const params = getAnthropicToolRunnerParams(runnerRecord);\n  if (params) {\n    wrapAnthropicToolRunnerTools(params, state);\n  }\n}\nfunction wrapAnthropicToolRunnerSetMessagesParams(runnerRecord, state) {\n  const setMessagesParams = Reflect.get(runnerRecord, \"setMessagesParams\");\n  if (typeof setMessagesParams !== \"function\") {\n    return;\n  }\n  Reflect.set(\n    runnerRecord,\n    \"setMessagesParams\",\n    function patchedSetMessagesParams(...args) {\n      const result = Reflect.apply(setMessagesParams, this, args);\n      const nextParams = getAnthropicToolRunnerParams(runnerRecord);\n      if (nextParams) {\n        wrapAnthropicToolRunnerTools(nextParams, state);\n      }\n      return result;\n    }\n  );\n}\nfunction isAnthropicMessage(value) {\n  return !!value && typeof value === \"object\" && typeof value.role === \"string\" && Array.isArray(value.content);\n}\nfunction isAnthropicMessageStream(value) {\n  return !!value && typeof value === \"object\" && isAsyncIterable(value) && \"finalMessage\" in value && typeof value.finalMessage === \"function\";\n}\nfunction recordAnthropicToolRunnerMessage(state, message) {\n  if (typeof message !== \"object\" || message === null) {\n    return;\n  }\n  if (state.seenMessages.has(message)) {\n    state.lastMessage = message;\n    return;\n  }\n  state.seenMessages.add(message);\n  state.lastMessage = message;\n  const parsedMetrics = parseMetricsFromUsage2(message.usage);\n  for (const [key, value] of Object.entries(parsedMetrics)) {\n    if (typeof value === \"number\") {\n      state.aggregatedMetrics[key] = (state.aggregatedMetrics[key] ?? 0) + value;\n    }\n  }\n}\nfunction instrumentAnthropicMessageStream(stream, state) {\n  if (\"__braintrust_tool_runner_stream_patched\" in stream) {\n    return;\n  }\n  if (!Object.isFrozen(stream) && !Object.isSealed(stream)) {\n    patchStreamIfNeeded(stream, {\n      onChunk: () => {\n        if (state.firstTokenTime === void 0) {\n          state.firstTokenTime = getCurrentUnixTimestamp();\n        }\n      },\n      onComplete: () => void 0\n    });\n  }\n  if (typeof stream.finalMessage === \"function\") {\n    const originalFinalMessage = stream.finalMessage.bind(stream);\n    stream.finalMessage = async () => {\n      const message = await originalFinalMessage();\n      recordAnthropicToolRunnerMessage(state, message);\n      return message;\n    };\n  }\n  Object.defineProperty(stream, \"__braintrust_tool_runner_stream_patched\", {\n    value: true\n  });\n}\nasync function finalizeAnthropicToolRunner(state, finalMessage) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  const message = finalMessage ?? state.lastMessage;\n  if (message) {\n    recordAnthropicToolRunnerMessage(state, message);\n  }\n  const metrics = finalizeAnthropicTokens({\n    ...state.aggregatedMetrics\n  });\n  if (state.firstTokenTime !== void 0) {\n    metrics.time_to_first_token = state.firstTokenTime - state.startTime;\n  }\n  const metadata = {\n    anthropic_tool_runner_iterations: state.iterationCount\n  };\n  if (message?.stop_reason !== void 0) {\n    metadata.stop_reason = message.stop_reason;\n  }\n  if (message?.stop_sequence !== void 0) {\n    metadata.stop_sequence = message.stop_sequence;\n  }\n  state.span.log({\n    ...message ? { output: { role: message.role, content: message.content } } : {},\n    metadata,\n    metrics: Object.fromEntries(\n      Object.entries(metrics).filter(\n        (entry) => entry[1] !== void 0\n      )\n    )\n  });\n  state.span.end();\n}\nfunction finalizeAnthropicToolRunnerError(state, error) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  state.span.log({\n    error: toLoggedError(error)\n  });\n  state.span.end();\n}\nasync function resolveAnthropicToolRunnerFinalMessage(runner) {\n  if (typeof runner.done === \"function\") {\n    return await runner.done();\n  }\n  if (typeof runner.runUntilDone === \"function\") {\n    return await runner.runUntilDone();\n  }\n  return void 0;\n}\nfunction wrapAnthropicToolRunnerPromiseMethod(runnerRecord, methodName, state) {\n  const method = runnerRecord[methodName];\n  if (typeof method !== \"function\") {\n    return;\n  }\n  runnerRecord[methodName] = async (...args) => {\n    ensureAnthropicToolRunnerToolsWrapped(runnerRecord, state);\n    return await withCurrent(state.span, async () => {\n      try {\n        const message = await method.apply(runnerRecord, args);\n        recordAnthropicToolRunnerMessage(state, message);\n        await finalizeAnthropicToolRunner(state, message);\n        return message;\n      } catch (error) {\n        finalizeAnthropicToolRunnerError(state, error);\n        throw error;\n      }\n    });\n  };\n}\nfunction patchAnthropicToolRunner(args) {\n  const { runner, state } = args;\n  if (!runner || typeof runner !== \"object\") {\n    void finalizeAnthropicToolRunner(state);\n    return;\n  }\n  const runnerRecord = runner;\n  if (\"__braintrust_tool_runner_patched\" in runnerRecord) {\n    return;\n  }\n  ensureAnthropicToolRunnerToolsWrapped(runnerRecord, state);\n  wrapAnthropicToolRunnerSetMessagesParams(runnerRecord, state);\n  wrapAnthropicToolRunnerPromiseMethod(runnerRecord, \"done\", state);\n  wrapAnthropicToolRunnerPromiseMethod(runnerRecord, \"runUntilDone\", state);\n  if (!isAsyncIterable(runnerRecord)) {\n    Object.defineProperty(runnerRecord, \"__braintrust_tool_runner_patched\", {\n      value: true\n    });\n    return;\n  }\n  const originalIterator = runnerRecord[Symbol.asyncIterator].bind(runnerRecord);\n  runnerRecord[Symbol.asyncIterator] = function() {\n    const iterator = originalIterator();\n    return {\n      async next(value) {\n        try {\n          ensureAnthropicToolRunnerToolsWrapped(runnerRecord, state);\n          const result = await withCurrent(\n            state.span,\n            () => value === void 0 ? iterator.next() : iterator.next(value)\n          );\n          if (result.done) {\n            const finalMessage = await resolveAnthropicToolRunnerFinalMessage(runner);\n            await finalizeAnthropicToolRunner(state, finalMessage);\n            return result;\n          }\n          state.iterationCount += 1;\n          if (isAnthropicMessage(result.value)) {\n            if (state.firstTokenTime === void 0) {\n              state.firstTokenTime = getCurrentUnixTimestamp();\n            }\n            recordAnthropicToolRunnerMessage(state, result.value);\n          } else if (isAnthropicMessageStream(result.value)) {\n            instrumentAnthropicMessageStream(result.value, state);\n          }\n          return result;\n        } catch (error) {\n          finalizeAnthropicToolRunnerError(state, error);\n          throw error;\n        }\n      },\n      async return(value) {\n        try {\n          ensureAnthropicToolRunnerToolsWrapped(runnerRecord, state);\n          const result = typeof iterator.return === \"function\" ? await withCurrent(state.span, () => iterator.return(value)) : { done: true, value };\n          const finalMessage = await resolveAnthropicToolRunnerFinalMessage(\n            runner\n          ).catch(() => void 0);\n          await finalizeAnthropicToolRunner(state, finalMessage);\n          return result;\n        } catch (error) {\n          finalizeAnthropicToolRunnerError(state, error);\n          throw error;\n        }\n      },\n      async throw(error) {\n        finalizeAnthropicToolRunnerError(state, error);\n        if (typeof iterator.throw === \"function\") {\n          return await withCurrent(state.span, () => iterator.throw(error));\n        }\n        throw error;\n      },\n      [Symbol.asyncIterator]() {\n        return this;\n      }\n    };\n  };\n  Object.defineProperty(runnerRecord, \"__braintrust_tool_runner_patched\", {\n    value: true\n  });\n}\nfunction aggregateAnthropicStreamChunks(chunks) {\n  const fallbackTextDeltas = [];\n  const contentBlocks = {};\n  const contentBlockDeltas = {};\n  let metrics = {};\n  let metadata = {};\n  let role;\n  for (const event of chunks) {\n    switch (event?.type) {\n      case \"message_start\":\n        if (event.message?.usage) {\n          const initialMetrics = parseMetricsFromUsage2(event.message.usage);\n          metrics = { ...metrics, ...initialMetrics };\n        }\n        if (typeof event.message?.role === \"string\") {\n          role = event.message.role;\n        }\n        break;\n      case \"content_block_start\":\n        if (event.content_block) {\n          contentBlocks[event.index] = event.content_block;\n          contentBlockDeltas[event.index] = { textDeltas: [], citations: [] };\n        }\n        break;\n      case \"content_block_delta\": {\n        const acc = contentBlockDeltas[event.index];\n        const delta = event.delta;\n        if (!delta) break;\n        if (delta.type === \"text_delta\" && \"text\" in delta) {\n          const text = delta.text;\n          if (text) {\n            if (acc !== void 0) {\n              acc.textDeltas.push(text);\n            } else {\n              fallbackTextDeltas.push(text);\n            }\n          }\n        } else if (delta.type === \"input_json_delta\" && \"partial_json\" in delta) {\n          const partialJson = delta.partial_json;\n          if (partialJson && acc !== void 0) {\n            acc.textDeltas.push(partialJson);\n          }\n        } else if (delta.type === \"thinking_delta\" && \"thinking\" in delta) {\n          const thinking = delta.thinking;\n          if (thinking && acc !== void 0) {\n            acc.textDeltas.push(thinking);\n          }\n        } else if (delta.type === \"citations_delta\" && \"citation\" in delta) {\n          const citation = delta.citation;\n          if (citation && acc !== void 0) {\n            acc.citations.push(citation);\n          }\n        }\n        break;\n      }\n      case \"content_block_stop\":\n        finalizeContentBlock(\n          event.index,\n          contentBlocks,\n          contentBlockDeltas,\n          fallbackTextDeltas\n        );\n        break;\n      case \"message_delta\":\n        if (event.usage) {\n          const finalMetrics = parseMetricsFromUsage2(event.usage);\n          metrics = { ...metrics, ...finalMetrics };\n        }\n        if (event.delta) {\n          metadata = { ...metadata, ...event.delta };\n        }\n        break;\n    }\n  }\n  const orderedContent = Object.entries(contentBlocks).map(([index, block]) => ({\n    block,\n    index: Number(index)\n  })).filter(({ block }) => block !== void 0).sort((left, right) => left.index - right.index).map(({ block }) => block);\n  let output = fallbackTextDeltas.join(\"\");\n  if (orderedContent.length > 0) {\n    if (orderedContent.every(isTextContentBlock) && orderedContent.every((block) => !block.citations?.length)) {\n      output = orderedContent.map((block) => block.text).join(\"\");\n    } else {\n      output = {\n        ...role ? { role } : {},\n        content: orderedContent\n      };\n    }\n  }\n  const finalized = finalizeAnthropicTokens(metrics);\n  const filteredMetrics = Object.fromEntries(\n    Object.entries(finalized).filter(\n      (entry) => entry[1] !== void 0\n    )\n  );\n  return {\n    output,\n    metrics: filteredMetrics,\n    metadata\n  };\n}\nfunction finalizeContentBlock(index, contentBlocks, contentBlockDeltas, fallbackTextDeltas) {\n  const contentBlock = contentBlocks[index];\n  if (!contentBlock) {\n    return;\n  }\n  const acc = contentBlockDeltas[index];\n  const text = acc?.textDeltas.join(\"\") ?? \"\";\n  if (isToolUseLikeContentBlock(contentBlock)) {\n    if (!text) {\n      return;\n    }\n    try {\n      const parsedInput = JSON.parse(text);\n      if (!isObject(parsedInput)) {\n        fallbackTextDeltas.push(text);\n        delete contentBlocks[index];\n        return;\n      }\n      const parsedToolUseBlock = {\n        type: contentBlock.type,\n        id: contentBlock.id,\n        name: contentBlock.name,\n        input: parsedInput\n      };\n      contentBlocks[index] = parsedToolUseBlock;\n    } catch {\n      fallbackTextDeltas.push(text);\n      delete contentBlocks[index];\n    }\n    return;\n  }\n  if (isTextContentBlock(contentBlock)) {\n    if (!text) {\n      delete contentBlocks[index];\n      return;\n    }\n    const updated = { ...contentBlock, text };\n    if (acc?.citations.length) {\n      updated.citations = acc.citations;\n    }\n    contentBlocks[index] = updated;\n    return;\n  }\n  if (isThinkingContentBlock(contentBlock)) {\n    if (!text) {\n      delete contentBlocks[index];\n      return;\n    }\n    contentBlocks[index] = {\n      ...contentBlock,\n      thinking: text\n    };\n    return;\n  }\n}\nfunction isTextContentBlock(contentBlock) {\n  return contentBlock.type === \"text\";\n}\nfunction isToolUseLikeContentBlock(contentBlock) {\n  return (contentBlock.type === \"tool_use\" || contentBlock.type === \"server_tool_use\") && typeof contentBlock.id === \"string\" && typeof contentBlock.name === \"string\" && isObject(contentBlock.input);\n}\nfunction isThinkingContentBlock(contentBlock) {\n  return contentBlock.type === \"thinking\";\n}\nfunction isAnthropicBase64ContentBlock(input) {\n  return (input.type === \"image\" || input.type === \"document\") && isObject(input.source) && input.source.type === \"base64\";\n}\nfunction convertBase64ToAttachment(source, contentType) {\n  const mediaType = typeof source.media_type === \"string\" ? source.media_type : \"image/png\";\n  const base64Data = source.data;\n  if (base64Data && typeof base64Data === \"string\") {\n    const binaryString = atob(base64Data);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    const blob = new Blob([bytes], { type: mediaType });\n    const extension = mediaType.split(\"/\")[1] || \"bin\";\n    const prefix = contentType === \"document\" ? \"document\" : \"image\";\n    const filename = `${prefix}.${extension}`;\n    const attachment = new Attachment({\n      data: blob,\n      filename,\n      contentType: mediaType\n    });\n    return {\n      ...source,\n      data: attachment\n    };\n  }\n  return { ...source };\n}\nfunction processAttachmentsInInput(input) {\n  if (Array.isArray(input)) {\n    return input.map(processAttachmentsInInput);\n  }\n  if (isObject(input)) {\n    if (isAnthropicBase64ContentBlock(input)) {\n      return {\n        ...input,\n        source: convertBase64ToAttachment(input.source, input.type)\n      };\n    }\n    const processed = {};\n    for (const [key, value] of Object.entries(input)) {\n      processed[key] = processAttachmentsInInput(value);\n    }\n    return processed;\n  }\n  return input;\n}\nfunction coalesceInput(messages, system) {\n  const input = (messages || []).slice();\n  if (system) {\n    input.unshift({ role: \"system\", content: system });\n  }\n  return input;\n}\n\n// src/wrappers/ai-sdk/normalize-logged-output.ts\nvar REMOVE_NORMALIZED_VALUE = /* @__PURE__ */ Symbol(\"braintrust.ai-sdk.remove-normalized\");\nfunction normalizeAISDKLoggedOutput(value) {\n  const normalized = normalizeAISDKLoggedValue(value);\n  return normalized === REMOVE_NORMALIZED_VALUE ? {} : normalized;\n}\nfunction normalizeAISDKLoggedValue(value, context = {}) {\n  if (Array.isArray(value)) {\n    return value.map((entry) => normalizeAISDKLoggedValue(entry, context)).filter((entry) => entry !== REMOVE_NORMALIZED_VALUE);\n  }\n  if (!value || typeof value !== \"object\") {\n    return value;\n  }\n  const nextInProviderMetadata = context.inProviderMetadata || context.parentKey === \"providerMetadata\" || context.parentKey === \"experimental_providerMetadata\";\n  const normalizedEntries = [];\n  for (const [key, entry] of Object.entries(value)) {\n    if (key === \"cachedPromptTokens\" && entry === 0) {\n      continue;\n    }\n    if (context.parentKey === \"request\" && key === \"body\" && entry === \"<omitted>\") {\n      continue;\n    }\n    const normalizedEntry = normalizeAISDKLoggedValue(entry, {\n      inProviderMetadata: nextInProviderMetadata,\n      parentKey: key\n    });\n    if (normalizedEntry === REMOVE_NORMALIZED_VALUE) {\n      continue;\n    }\n    normalizedEntries.push([key, normalizedEntry]);\n  }\n  if (normalizedEntries.length === 0) {\n    if (context.parentKey === \"request\" || nextInProviderMetadata) {\n      return REMOVE_NORMALIZED_VALUE;\n    }\n    return {};\n  }\n  return Object.fromEntries(normalizedEntries);\n}\n\n// src/zod/utils.ts\nvar import_zod_to_json_schema = require(\"zod-to-json-schema\");\nvar z42 = __toESM(require(\"zod/v4\"));\nfunction isZodV4(zodObject) {\n  return typeof zodObject === \"object\" && zodObject !== null && \"_zod\" in zodObject && zodObject._zod !== void 0;\n}\nfunction zodToJsonSchema(schema) {\n  if (isZodV4(schema)) {\n    return z42.toJSONSchema(schema, {\n      target: \"draft-7\"\n    });\n  }\n  return (0, import_zod_to_json_schema.zodToJsonSchema)(schema);\n}\n\n// src/wrappers/ai-sdk/tool-serialization.ts\nfunction isZodSchema(value) {\n  return value != null && typeof value === \"object\" && \"_def\" in value && typeof value._def === \"object\";\n}\nfunction serializeZodSchema(schema) {\n  try {\n    return zodToJsonSchema(schema);\n  } catch {\n    return {\n      type: \"object\",\n      description: \"Zod schema (conversion failed)\"\n    };\n  }\n}\nfunction serializeTool(tool) {\n  if (!tool || typeof tool !== \"object\") {\n    return tool;\n  }\n  const serialized = { ...tool };\n  if (isZodSchema(serialized.inputSchema)) {\n    serialized.inputSchema = serializeZodSchema(serialized.inputSchema);\n  }\n  if (isZodSchema(serialized.parameters)) {\n    serialized.parameters = serializeZodSchema(serialized.parameters);\n  }\n  if (\"execute\" in serialized) {\n    delete serialized.execute;\n  }\n  if (\"render\" in serialized) {\n    delete serialized.render;\n  }\n  return serialized;\n}\nfunction serializeAISDKToolsForLogging(tools) {\n  if (!tools || typeof tools !== \"object\") {\n    return tools;\n  }\n  if (Array.isArray(tools)) {\n    return tools.map(serializeTool);\n  }\n  const serialized = {};\n  for (const [key, tool] of Object.entries(tools)) {\n    serialized[key] = serializeTool(tool);\n  }\n  return serialized;\n}\n\n// src/vendor-sdk-types/ai-sdk-v7-telemetry.ts\nvar BRAINTRUST_AI_SDK_V7_OPERATION_KEY = /* @__PURE__ */ Symbol.for(\n  \"braintrust.ai-sdk.v7.telemetry-operation-key\"\n);\n\n// src/wrappers/ai-sdk/workflow-agent-context.ts\nvar workflowAgentWrapperSpans = /* @__PURE__ */ new Map();\nfunction registerWorkflowAgentWrapperSpan(span) {\n  if (span.spanId) {\n    workflowAgentWrapperSpans.set(span.spanId, span);\n  }\n}\nfunction unregisterWorkflowAgentWrapperSpan(span) {\n  if (span.spanId) {\n    workflowAgentWrapperSpans.delete(span.spanId);\n  }\n}\nfunction currentWorkflowAgentWrapperSpan() {\n  const parentSpanIds = _internalGetGlobalState().contextManager.getParentSpanIds()?.spanParents ?? [];\n  for (const parentSpanId of parentSpanIds) {\n    const span = workflowAgentWrapperSpans.get(parentSpanId);\n    if (span) {\n      return span;\n    }\n  }\n  return void 0;\n}\n\n// src/wrappers/ai-sdk/harness-agent-context.ts\nvar BRAINTRUST_TURN_CONTEXT_KEY = \"__braintrust_trace_context\";\nvar sessionTurnParents = /* @__PURE__ */ new WeakMap();\nvar wrapperTurnParents = /* @__PURE__ */ new WeakMap();\nvar patchedLifecycleMethods = /* @__PURE__ */ new WeakMap();\nvar harnessTurnParentStore;\nfunction serializedTurnContext(value) {\n  if (!isObject(value)) {\n    return void 0;\n  }\n  const context = value[BRAINTRUST_TURN_CONTEXT_KEY];\n  if (!isObject(context) || typeof context.parent !== \"string\" || typeof context.sessionId !== \"string\" || typeof context.signature !== \"string\") {\n    return void 0;\n  }\n  const expectedSignature = signTurnContext({\n    parent: context.parent,\n    sessionId: context.sessionId\n  });\n  if (!expectedSignature || !isomorph_default.timingSafeEqual?.(context.signature, expectedSignature)) {\n    return void 0;\n  }\n  const parent = SpanComponentsV4.fromStr(context.parent);\n  if (!parent.data.row_id || !parent.data.root_span_id || !parent.data.span_id) {\n    return void 0;\n  }\n  return {\n    parent: context.parent,\n    sessionId: context.sessionId\n  };\n}\nfunction signTurnContext(context) {\n  const secret = _internalGetGlobalState()._internalGetTraceContextSigningSecret();\n  return secret ? isomorph_default.hmacSha256?.(\n    secret,\n    JSON.stringify([BRAINTRUST_TURN_CONTEXT_KEY, context])\n  ) : void 0;\n}\nfunction continuationParentFromCreateSessionParams(params) {\n  if (!isObject(params)) {\n    return void 0;\n  }\n  const continuation = params.continueFrom ?? (isObject(params.resumeFrom) ? params.resumeFrom.continueFrom : void 0);\n  const context = serializedTurnContext(continuation);\n  if (!context) {\n    return void 0;\n  }\n  if (params.sessionId !== context.sessionId) {\n    return void 0;\n  }\n  return context.parent;\n}\nfunction exportedParent(parent) {\n  return typeof parent === \"string\" ? parent : _internalExportParentSynchronously(parent);\n}\nfunction addSerializedContext(args) {\n  if (!isObject(args.continuation) || args.sessionId === void 0) {\n    return;\n  }\n  const parent = exportedParent(args.parent);\n  if (!parent) {\n    return;\n  }\n  const context = {\n    parent,\n    sessionId: args.sessionId\n  };\n  const signature = signTurnContext(context);\n  if (!signature) {\n    return;\n  }\n  Object.defineProperty(args.continuation, BRAINTRUST_TURN_CONTEXT_KEY, {\n    configurable: true,\n    enumerable: true,\n    value: {\n      ...context,\n      signature\n    },\n    writable: true\n  });\n}\nfunction lifecycleMethodDescriptor(session, method) {\n  let owner = session;\n  while (owner) {\n    const descriptor = Object.getOwnPropertyDescriptor(owner, method);\n    if (descriptor) {\n      return { descriptor, owner };\n    }\n    owner = Object.getPrototypeOf(owner);\n  }\n  return void 0;\n}\nfunction patchLifecycleMethod(session, method) {\n  let resolvedDescriptor;\n  try {\n    resolvedDescriptor = lifecycleMethodDescriptor(session, method);\n  } catch {\n    return;\n  }\n  if (!resolvedDescriptor || !(\"value\" in resolvedDescriptor.descriptor) || typeof resolvedDescriptor.descriptor.value !== \"function\") {\n    return;\n  }\n  const { descriptor, owner } = resolvedDescriptor;\n  const patched = patchedLifecycleMethods.get(owner);\n  if (patched?.has(method)) {\n    return;\n  }\n  const original = descriptor.value;\n  const replacement = function(...args) {\n    const result = Reflect.apply(original, this, args);\n    const addContext = (state) => {\n      try {\n        const parent = sessionTurnParents.get(this);\n        if (!parent) {\n          return;\n        }\n        const continuation = method === \"suspendTurn\" ? state : isObject(state) ? state.continueFrom : void 0;\n        addSerializedContext({\n          continuation,\n          parent,\n          sessionId: typeof this.sessionId === \"string\" ? this.sessionId : void 0\n        });\n      } catch {\n      }\n    };\n    try {\n      if (isObject(result) && typeof result.then === \"function\") {\n        void Promise.resolve(result).then(addContext, () => {\n        });\n      } else {\n        addContext(result);\n      }\n    } catch {\n    }\n    return result;\n  };\n  try {\n    Object.defineProperty(owner, method, {\n      ...descriptor,\n      value: replacement\n    });\n    const ownerMethods = patched ?? /* @__PURE__ */ new Set();\n    ownerMethods.add(method);\n    if (!patched) {\n      patchedLifecycleMethods.set(owner, ownerMethods);\n    }\n  } catch {\n  }\n}\nfunction patchLifecycleMethods(session) {\n  patchLifecycleMethod(session, \"suspendTurn\");\n  patchLifecycleMethod(session, \"detach\");\n  patchLifecycleMethod(session, \"stop\");\n}\nfunction registerHarnessTurnSpan(args) {\n  if (!isObject(args.session)) {\n    return;\n  }\n  const session = args.session;\n  sessionTurnParents.set(session, args.span);\n  wrapperTurnParents.set(args.span, args.span);\n  patchLifecycleMethods(session);\n}\nfunction harnessContinuationParent(session) {\n  return isObject(session) ? sessionTurnParents.get(session) : void 0;\n}\nfunction captureHarnessCreateSessionParent(params) {\n  try {\n    return continuationParentFromCreateSessionParams(params);\n  } catch {\n    return void 0;\n  }\n}\nfunction registerHarnessSessionParent(session, parent) {\n  if (!parent || !isObject(session)) {\n    return;\n  }\n  const harnessSession = session;\n  sessionTurnParents.set(harnessSession, parent);\n  patchLifecycleMethods(harnessSession);\n}\nfunction currentHarnessTurnParent() {\n  return harnessTurnParentStore?.getStore() ?? wrapperTurnParents.get(currentSpan());\n}\nfunction bindHarnessTurnParentToStart(tracingChannel, parentFromEvent) {\n  const startChannel = tracingChannel.start;\n  if (!startChannel) {\n    return () => {\n    };\n  }\n  harnessTurnParentStore ??= isomorph_default.newAsyncLocalStorage();\n  const store = harnessTurnParentStore;\n  startChannel.bindStore(\n    store,\n    (event) => parentFromEvent(event) ?? store.getStore()\n  );\n  return () => {\n    startChannel.unbindStore(store);\n  };\n}\nfunction startHarnessTurnChildSpan(parent, args) {\n  const spanArgs = withSpanInstrumentationName(\n    args,\n    INSTRUMENTATION_NAMES.AI_SDK\n  );\n  return typeof parent === \"string\" ? startSpan({ ...spanArgs, parent }) : parent.startSpan(spanArgs);\n}\nfunction updateHarnessTurn(parent, update = {}) {\n  if (!parent) {\n    return;\n  }\n  const log3 = (event) => {\n    if (typeof parent === \"string\") {\n      updateSpan({ exported: parent, ...event });\n    } else {\n      parent.log(event);\n    }\n  };\n  try {\n    if (Object.prototype.hasOwnProperty.call(update, \"output\")) {\n      log3({ output: null });\n    }\n    log3(update);\n  } catch {\n  }\n}\nfunction endHarnessTurn(parent) {\n  const endTime = getCurrentUnixTimestamp();\n  if (!parent) {\n    return endTime;\n  }\n  try {\n    const event = { metrics: { end: endTime } };\n    if (typeof parent === \"string\") {\n      updateSpan({ exported: parent, ...event });\n    } else {\n      parent.log(event);\n    }\n  } catch {\n  }\n  return endTime;\n}\n\n// src/wrappers/ai-sdk/telemetry.ts\nfunction braintrustAISDKTelemetry() {\n  const operations = /* @__PURE__ */ new Map();\n  const operationKeysByCallId = /* @__PURE__ */ new Map();\n  const modelSpans = /* @__PURE__ */ new Map();\n  const objectSpans = /* @__PURE__ */ new Map();\n  const embedSpans = /* @__PURE__ */ new Map();\n  const rerankSpans = /* @__PURE__ */ new Map();\n  const toolSpans = /* @__PURE__ */ new Map();\n  let workflowAgentOperationCounter = 0;\n  const runSafely = (name, callback) => {\n    try {\n      callback();\n    } catch (error) {\n      console.error(`Error in Braintrust AI SDK telemetry ${name}:`, error);\n    }\n  };\n  const startChildSpan = (operationKey, name, type, event, parentOverride) => {\n    const parent = operations.get(operationKey)?.span;\n    const spanArgs = withSpanInstrumentationName(\n      {\n        name,\n        spanAttributes: { type },\n        ...event ? { event } : {}\n      },\n      INSTRUMENTATION_NAMES.AI_SDK\n    );\n    const span = parentOverride ? startHarnessTurnChildSpan(parentOverride, spanArgs) : parent ? parent.startSpan(spanArgs) : startSpan(spanArgs);\n    const state = operations.get(operationKey);\n    if (state && type === \"llm\" /* LLM */) {\n      state.hadModelChild = true;\n    }\n    return span;\n  };\n  const registerOperation = (state) => {\n    operations.set(state.operationKey, state);\n    const keys = operationKeysByCallId.get(state.callId) ?? [];\n    keys.push(state.operationKey);\n    operationKeysByCallId.set(state.callId, keys);\n  };\n  const deleteOperation = (operationKey) => {\n    const state = operations.get(operationKey);\n    if (!state) {\n      return;\n    }\n    for (const tool of state.providerTools.values()) {\n      if (!tool.ended) {\n        tool.span.end();\n      }\n    }\n    operations.delete(operationKey);\n    const keys = operationKeysByCallId.get(state.callId);\n    if (!keys) {\n      return;\n    }\n    const index = keys.indexOf(operationKey);\n    if (index >= 0) {\n      keys.splice(index, 1);\n    }\n    if (keys.length === 0) {\n      operationKeysByCallId.delete(state.callId);\n    }\n  };\n  const explicitOperationKey = (event) => {\n    if (!isObject(event)) {\n      return void 0;\n    }\n    const key = event[BRAINTRUST_AI_SDK_V7_OPERATION_KEY];\n    return typeof key === \"string\" ? key : void 0;\n  };\n  const createOperationKey = (event, operationName) => {\n    const explicit = explicitOperationKey(event);\n    if (explicit) {\n      return explicit;\n    }\n    if (operationName === \"WorkflowAgent.stream\") {\n      workflowAgentOperationCounter += 1;\n      return `${event.callId}:${workflowAgentOperationCounter}`;\n    }\n    return event.callId;\n  };\n  const operationKeyForCallId = (callId, mode = \"active\") => {\n    const keys = operationKeysByCallId.get(callId);\n    if (!keys || keys.length === 0) {\n      return operations.has(callId) ? callId : void 0;\n    }\n    if (keys.length === 1) {\n      return keys[0];\n    }\n    const wrapperSpan = currentWorkflowAgentWrapperSpan();\n    if (wrapperSpan?.spanId) {\n      const key = keys.find(\n        (candidate) => operations.get(candidate)?.span.spanId === wrapperSpan.spanId\n      );\n      if (key) {\n        return key;\n      }\n    }\n    return callId === \"workflow-agent\" || mode === \"active\" ? keys[keys.length - 1] : keys[0];\n  };\n  const operationKeyFromEvent = (event, mode = \"active\") => {\n    const explicit = explicitOperationKey(event);\n    if (explicit && operations.has(explicit)) {\n      return explicit;\n    }\n    if (isObject(event)) {\n      const callId = event.callId;\n      if (typeof callId === \"string\") {\n        const operationKey = operationKeyForCallId(callId, mode);\n        if (operationKey) {\n          return operationKey;\n        }\n        const workflowAgentKeys2 = operationKeysByCallId.get(\"workflow-agent\");\n        if (workflowAgentKeys2?.length) {\n          return workflowAgentKeys2[workflowAgentKeys2.length - 1];\n        }\n        return callId === \"workflow-agent\" ? void 0 : callId;\n      }\n    }\n    const wrapperSpan = currentWorkflowAgentWrapperSpan();\n    if (wrapperSpan?.spanId) {\n      for (const [operationKey, state] of operations) {\n        if (state.operationName === \"WorkflowAgent.stream\" && state.span.spanId === wrapperSpan.spanId) {\n          return operationKey;\n        }\n      }\n    }\n    const workflowAgentKeys = operationKeysByCallId.get(\"workflow-agent\");\n    if (workflowAgentKeys?.length) {\n      return workflowAgentKeys[workflowAgentKeys.length - 1];\n    }\n    if (operations.size === 1) {\n      return operations.keys().next().value;\n    }\n    return void 0;\n  };\n  const closeOpenChildSpans = (operationKey, error) => {\n    for (const tool of operations.get(operationKey)?.providerTools.values() ?? []) {\n      if (!tool.ended) {\n        if (error !== void 0) {\n          tool.span.log({ error });\n        }\n        tool.span.end();\n        tool.ended = true;\n      }\n    }\n    const openModelSpans = modelSpans.get(operationKey);\n    if (openModelSpans) {\n      for (const span of openModelSpans) {\n        if (error !== void 0) {\n          logError(span, error);\n        }\n        span.end();\n      }\n      modelSpans.delete(operationKey);\n    }\n    const openObjectSpan = objectSpans.get(operationKey);\n    if (openObjectSpan) {\n      if (error !== void 0) {\n        logError(openObjectSpan, error);\n      }\n      openObjectSpan.end();\n      objectSpans.delete(operationKey);\n    }\n    for (const [embedCallId, embedState] of embedSpans) {\n      if (embedState.operationKey === operationKey) {\n        if (error !== void 0) {\n          logError(embedState.span, error);\n        }\n        embedState.span.end();\n        embedSpans.delete(embedCallId);\n      }\n    }\n    const openRerankSpan = rerankSpans.get(operationKey);\n    if (openRerankSpan) {\n      if (error !== void 0) {\n        logError(openRerankSpan, error);\n      }\n      openRerankSpan.end();\n      rerankSpans.delete(operationKey);\n    }\n    for (const [toolCallId, toolState] of toolSpans) {\n      if (toolState.operationKey === operationKey) {\n        if (error !== void 0) {\n          logError(toolState.span, error);\n        }\n        toolState.span.end();\n        toolSpans.delete(toolCallId);\n      }\n    }\n  };\n  const abortReasonFromEvent = (event) => {\n    if (isObject(event)) {\n      const abortEvent = event;\n      if (abortEvent.error !== void 0) {\n        return abortEvent.error;\n      }\n      if (abortEvent.reason !== void 0) {\n        return abortEvent.reason;\n      }\n    }\n    return new Error(\"AI SDK operation aborted\");\n  };\n  const shouldSkipTelemetryChildren = (state) => state?.operationName === \"WorkflowAgent.stream\" && !state.ownsSpan;\n  const onObjectStepEnd = (event) => {\n    runSafely(\"onObjectStepEnd\", () => {\n      const operationKey = operationKeyFromEvent(event);\n      const span = operationKey ? objectSpans.get(operationKey) : void 0;\n      if (!operationKey || !span) {\n        return;\n      }\n      const result = {\n        ...event,\n        text: event.objectText\n      };\n      span.log({\n        ...shouldRecordOutputs(event) ? {\n          output: processAISDKOutput(result, DEFAULT_DENY_OUTPUT_PATHS)\n        } : {},\n        metrics: extractTokenMetrics(result)\n      });\n      span.end();\n      objectSpans.delete(operationKey);\n    });\n  };\n  const onEmbedEnd = (event) => {\n    runSafely(\"onEmbedEnd\", () => {\n      const state = embedSpans.get(event.embedCallId);\n      if (!state) {\n        return;\n      }\n      const result = {\n        ...event,\n        embeddings: event.embeddings\n      };\n      state.span.log({\n        ...shouldRecordOutputs(event) ? {\n          output: processAISDKEmbeddingOutput(\n            result,\n            DEFAULT_DENY_OUTPUT_PATHS\n          )\n        } : {},\n        metrics: extractTokenMetrics(result)\n      });\n      state.span.end();\n      embedSpans.delete(event.embedCallId);\n    });\n  };\n  const onRerankEnd = (event) => {\n    runSafely(\"onRerankEnd\", () => {\n      const operationKey = operationKeyFromEvent(event);\n      const span = operationKey ? rerankSpans.get(operationKey) : void 0;\n      if (!operationKey || !span) {\n        return;\n      }\n      const result = {\n        ranking: event.ranking?.map((entry) => ({\n          originalIndex: entry.index,\n          score: entry.relevanceScore\n        }))\n      };\n      span.log({\n        ...shouldRecordOutputs(event) ? {\n          output: processAISDKRerankOutput(\n            result,\n            DEFAULT_DENY_OUTPUT_PATHS\n          )\n        } : {}\n      });\n      span.end();\n      rerankSpans.delete(operationKey);\n    });\n  };\n  const onEnd = (event) => {\n    runSafely(\"onEnd\", () => {\n      const operationKey = operationKeyFromEvent(event, \"finish\");\n      const state = operationKey ? operations.get(operationKey) : void 0;\n      if (!state) {\n        return;\n      }\n      if (!state.ownsSpan) {\n        deleteOperation(state.operationKey);\n        return;\n      }\n      const result = finishResult(event, state.operationName);\n      const metrics = state.hadModelChild ? {} : extractTokenMetrics(result);\n      const timeToFirstToken = state.operationName === \"WorkflowAgent.stream\" ? void 0 : extractTimeToFirstToken(result, state);\n      if (timeToFirstToken !== void 0) {\n        metrics.time_to_first_token = timeToFirstToken;\n      }\n      state.span.log({\n        ...shouldRecordOutputs(event) ? {\n          output: finishOutput(result, state.operationName)\n        } : {},\n        metrics\n      });\n      state.span.end();\n      deleteOperation(state.operationKey);\n    });\n  };\n  return {\n    onStart(event) {\n      runSafely(\"onStart\", () => {\n        const operationName = operationNameFromId(event.operationId);\n        const workflowAgent = operationName === \"WorkflowAgent.stream\";\n        const wrapperSpan = workflowAgent ? currentWorkflowAgentWrapperSpan() : void 0;\n        const ownsSpan = !wrapperSpan;\n        const harnessTurnParent = currentHarnessTurnParent();\n        const span = ownsSpan ? harnessTurnParent ? startHarnessTurnChildSpan(\n          harnessTurnParent,\n          withSpanInstrumentationName(\n            {\n              name: operationName,\n              spanAttributes: { type: \"function\" /* FUNCTION */ }\n            },\n            INSTRUMENTATION_NAMES.AI_SDK\n          )\n        ) : startSpan(\n          withSpanInstrumentationName(\n            {\n              name: operationName,\n              spanAttributes: { type: \"function\" /* FUNCTION */ }\n            },\n            INSTRUMENTATION_NAMES.AI_SDK\n          )\n        ) : wrapperSpan;\n        const operationKey = createOperationKey(event, operationName);\n        registerOperation({\n          callId: event.callId,\n          hadModelChild: false,\n          harnessTurnParent,\n          loggedInput: false,\n          operationName,\n          operationKey,\n          ownsSpan,\n          span,\n          startTime: getCurrentUnixTimestamp(),\n          providerTools: /* @__PURE__ */ new Map(),\n          recordInputs: event.recordInputs,\n          recordOutputs: event.recordOutputs\n        });\n        if (!ownsSpan) {\n          return;\n        }\n        let metadata = metadataFromEvent(event);\n        const logPayload = { metadata };\n        const workflowAgentCallInput = workflowAgent ? operationInput(event, operationName) : void 0;\n        if (workflowAgentCallInput) {\n          metadata = {\n            ...metadata,\n            ...extractWorkflowMetadataFromCallParams(workflowAgentCallInput)\n          };\n          logPayload.metadata = metadata;\n        }\n        if (shouldRecordInputs(event)) {\n          const callInput = workflowAgentCallInput ?? operationInput(event, operationName);\n          const { input, outputPromise } = workflowAgent ? processAISDKWorkflowAgentCallInput(callInput) : processAISDKCallInput(callInput);\n          logPayload.input = input;\n          const state = operations.get(operationKey);\n          if (state) {\n            state.loggedInput = hasPromptLikeInput(input);\n          }\n          if (outputPromise && !workflowAgent && input && typeof input === \"object\") {\n            outputPromise.then((resolvedData) => {\n              span.log({\n                input: {\n                  ...input,\n                  ...resolvedData\n                }\n              });\n            }).catch(() => {\n            });\n          }\n        }\n        span.log(logPayload);\n      });\n    },\n    onLanguageModelCallStart(event) {\n      runSafely(\"onLanguageModelCallStart\", () => {\n        const operationKey = operationKeyFromEvent(event);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (shouldSkipTelemetryChildren(state)) {\n          return;\n        }\n        const operationName = state?.operationName ?? \"generateText\";\n        const callInput = operationInput(event, operationName);\n        const workflowAgent = operationName === \"WorkflowAgent.stream\";\n        const processedInput = shouldRecordInputs(event) && workflowAgent ? processAISDKWorkflowAgentModelCallInput(callInput).input : shouldRecordInputs(event) ? processAISDKCallInput(callInput).input : void 0;\n        if (workflowAgent && state?.ownsSpan && !state.loggedInput && hasPromptLikeInput(processedInput)) {\n          state.span.log({\n            input: processedInput,\n            metadata: {\n              ...metadataFromEvent(event),\n              ...extractWorkflowMetadataFromCallParams(callInput)\n            }\n          });\n          state.loggedInput = true;\n        }\n        const openSpans = operationKey ? modelSpans.get(operationKey) : void 0;\n        if (operationKey && openSpans) {\n          for (const span2 of openSpans) {\n            span2.end();\n          }\n          modelSpans.delete(operationKey);\n        }\n        const span = startChildSpan(\n          operationKey ?? event.callId,\n          operationName === \"streamText\" ? \"doStream\" : \"doGenerate\",\n          \"llm\" /* LLM */,\n          {\n            ...shouldRecordInputs(event) ? {\n              input: processedInput\n            } : {},\n            metadata: workflowAgent ? {\n              ...metadataFromEvent(event),\n              ...extractWorkflowMetadataFromCallParams(callInput)\n            } : metadataFromEvent(event)\n          }\n        );\n        const spanKey = operationKey ?? event.callId;\n        const spans = modelSpans.get(spanKey) ?? [];\n        spans.push(span);\n        modelSpans.set(spanKey, spans);\n      });\n    },\n    onLanguageModelCallEnd(event) {\n      runSafely(\"onLanguageModelCallEnd\", () => {\n        const operationKey = operationKeyFromEvent(event);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (shouldSkipTelemetryChildren(state)) {\n          return;\n        }\n        if (state && Array.isArray(event.content)) {\n          for (const part of event.content) {\n            if (!isObject(part) || part.providerExecuted !== true || typeof part.toolCallId !== \"string\" || typeof part.toolName !== \"string\" || typeof part.type !== \"string\" || ![\"tool-call\", \"tool-result\", \"tool-error\"].includes(part.type)) {\n              continue;\n            }\n            const toolPart = part;\n            let tool = state.providerTools.get(toolPart.toolCallId);\n            if (tool?.ended) {\n              continue;\n            }\n            if (!tool) {\n              tool = {\n                span: startChildSpan(\n                  state.operationKey,\n                  toolPart.toolName,\n                  \"tool\" /* TOOL */,\n                  {\n                    metadata: {\n                      ...createAISDKIntegrationMetadata(),\n                      toolCallId: toolPart.toolCallId,\n                      toolName: toolPart.toolName,\n                      providerExecuted: true\n                    }\n                  },\n                  state.harnessTurnParent\n                ),\n                ended: false\n              };\n              state.providerTools.set(toolPart.toolCallId, tool);\n            }\n            if (state.recordInputs !== false && shouldRecordInputs(event) && toolPart.input !== void 0) {\n              tool.span.log({ input: toolPart.input });\n            }\n            if (toolPart.type === \"tool-call\") {\n              continue;\n            }\n            if (toolPart.type === \"tool-error\") {\n              tool.span.log({ error: toolPart.error });\n            } else if (state.recordOutputs !== false && shouldRecordOutputs(event)) {\n              tool.span.log({ output: toolPart.output });\n            }\n            tool.span.end();\n            tool.ended = true;\n          }\n        }\n        const span = operationKey ? shiftModelSpan(modelSpans, operationKey) : void 0;\n        if (!span) {\n          return;\n        }\n        const timeToFirstOutputMs = safePerformance(event)?.timeToFirstOutputMs;\n        if (state?.operationName === \"streamText\" && state.firstChunkTime === void 0 && typeof timeToFirstOutputMs === \"number\") {\n          state.firstChunkTime = state.startTime + timeToFirstOutputMs / 1e3;\n        }\n        const result = {\n          ...event,\n          response: event.responseId ? { id: event.responseId } : void 0\n        };\n        span.log({\n          ...shouldRecordOutputs(event) ? {\n            output: processAISDKOutput(result, DEFAULT_DENY_OUTPUT_PATHS)\n          } : {},\n          metrics: extractTokenMetrics(result)\n        });\n        span.end();\n      });\n    },\n    onObjectStepStart(event) {\n      runSafely(\"onObjectStepStart\", () => {\n        const operationKey = operationKeyFromEvent(event);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (shouldSkipTelemetryChildren(state)) {\n          return;\n        }\n        const openSpan = operationKey ? objectSpans.get(operationKey) : void 0;\n        if (operationKey && openSpan) {\n          openSpan.end();\n          objectSpans.delete(operationKey);\n        }\n        const span = startChildSpan(\n          operationKey ?? event.callId,\n          state?.operationName === \"streamObject\" ? \"doStream\" : \"doGenerate\",\n          \"llm\" /* LLM */,\n          {\n            ...shouldRecordInputs(event) ? {\n              input: {\n                prompt: event.promptMessages\n              }\n            } : {},\n            metadata: metadataFromEvent(event)\n          }\n        );\n        objectSpans.set(operationKey ?? event.callId, span);\n      });\n    },\n    onObjectStepEnd,\n    onEmbedStart(event) {\n      runSafely(\"onEmbedStart\", () => {\n        const operationKey = operationKeyFromEvent(event);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (shouldSkipTelemetryChildren(state)) {\n          return;\n        }\n        for (const [embedCallId, embedState] of embedSpans) {\n          if (embedState.operationKey === operationKey && (state?.operationName === \"embed\" || embedState.values === event.values)) {\n            embedState.span.end();\n            embedSpans.delete(embedCallId);\n          }\n        }\n        const span = startChildSpan(\n          operationKey ?? event.callId,\n          \"doEmbed\",\n          \"llm\" /* LLM */,\n          {\n            ...shouldRecordInputs(event) ? {\n              input: {\n                values: event.values\n              }\n            } : {},\n            metadata: metadataFromEvent(event)\n          }\n        );\n        embedSpans.set(event.embedCallId, {\n          operationKey: operationKey ?? event.callId,\n          span,\n          values: event.values\n        });\n      });\n    },\n    onEmbedEnd,\n    onRerankStart(event) {\n      runSafely(\"onRerankStart\", () => {\n        const operationKey = operationKeyFromEvent(event);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (shouldSkipTelemetryChildren(state)) {\n          return;\n        }\n        const openSpan = operationKey ? rerankSpans.get(operationKey) : void 0;\n        if (operationKey && openSpan) {\n          openSpan.end();\n          rerankSpans.delete(operationKey);\n        }\n        const span = startChildSpan(\n          operationKey ?? event.callId,\n          \"doRerank\",\n          \"llm\" /* LLM */,\n          {\n            ...shouldRecordInputs(event) ? {\n              input: {\n                documents: event.documents,\n                query: event.query,\n                topN: event.topN\n              }\n            } : {},\n            metadata: metadataFromEvent(event)\n          }\n        );\n        rerankSpans.set(operationKey ?? event.callId, span);\n      });\n    },\n    onRerankEnd,\n    onToolExecutionStart(event) {\n      runSafely(\"onToolExecutionStart\", () => {\n        const operationKey = operationKeyFromEvent(event);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (shouldSkipTelemetryChildren(state)) {\n          return;\n        }\n        const toolCallId = event.toolCall.toolCallId;\n        if (!operationKey || !toolCallId) {\n          return;\n        }\n        const span = startChildSpan(\n          operationKey,\n          event.toolCall.toolName || \"tool\",\n          \"tool\" /* TOOL */,\n          {\n            ...shouldRecordInputs(event) ? {\n              input: event.toolCall.input\n            } : {},\n            metadata: {\n              ...createAISDKIntegrationMetadata(),\n              toolCallId,\n              ...typeof event.toolCall.toolName === \"string\" ? { toolName: event.toolCall.toolName } : {}\n            }\n          },\n          state?.harnessTurnParent\n        );\n        toolSpans.set(toolCallId, { operationKey, span });\n      });\n    },\n    onToolExecutionEnd(event) {\n      runSafely(\"onToolExecutionEnd\", () => {\n        const toolCallId = event.toolCall.toolCallId;\n        const state = toolCallId ? toolSpans.get(toolCallId) : void 0;\n        if (!toolCallId || !state) {\n          return;\n        }\n        const toolOutput2 = event.toolOutput;\n        const workflowToolError = event.success === false && \"error\" in event ? event.error : void 0;\n        if (toolOutput2?.type === \"tool-error\" || workflowToolError !== void 0) {\n          const error = toolOutput2?.error ?? workflowToolError;\n          state.span.log({\n            error: error instanceof Error ? error.message : String(error),\n            metrics: typeof event.durationMs === \"number\" ? { duration_ms: event.durationMs } : {}\n          });\n        } else {\n          const output = toolOutput2 && \"output\" in toolOutput2 ? toolOutput2.output : event.output;\n          state.span.log({\n            ...shouldRecordOutputs(event) ? { output } : {},\n            metrics: typeof event.durationMs === \"number\" ? { duration_ms: event.durationMs } : {}\n          });\n        }\n        state.span.end();\n        toolSpans.delete(toolCallId);\n      });\n    },\n    onChunk(event) {\n      runSafely(\"onChunk\", () => {\n        const callId = event.chunk?.callId;\n        if (!callId) {\n          return;\n        }\n        const operationKey = operationKeyForCallId(callId);\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (!state || state.firstChunkTime !== void 0) {\n          return;\n        }\n        state.firstChunkTime = getCurrentUnixTimestamp();\n      });\n    },\n    onEnd,\n    onAbort(event) {\n      runSafely(\"onAbort\", () => {\n        const operationKey = operationKeyFromEvent(event, \"finish\");\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (!operationKey || !state) {\n          return;\n        }\n        const error = abortReasonFromEvent(event);\n        closeOpenChildSpans(operationKey, error);\n        if (state.ownsSpan) {\n          logError(state.span, error);\n          state.span.end();\n        }\n        deleteOperation(operationKey);\n      });\n    },\n    onError(event) {\n      runSafely(\"onError\", () => {\n        const errorEvent = isObject(event) ? event : {};\n        const operationKey = operationKeyFromEvent(errorEvent, \"finish\");\n        const state = operationKey ? operations.get(operationKey) : void 0;\n        if (!operationKey || !state) {\n          return;\n        }\n        const error = errorEvent.error ?? event;\n        closeOpenChildSpans(operationKey, error);\n        if (state.ownsSpan) {\n          logError(state.span, error);\n          state.span.end();\n        }\n        deleteOperation(operationKey);\n      });\n    },\n    executeTool({ toolCallId, execute }) {\n      const state = toolSpans.get(toolCallId);\n      return state ? withCurrent(state.span, () => execute()) : execute();\n    }\n  };\n}\nfunction shouldRecordInputs(event) {\n  return event.recordInputs !== false;\n}\nfunction shouldRecordOutputs(event) {\n  return event.recordOutputs !== false;\n}\nfunction hasPromptLikeInput(input) {\n  if (!isObject(input)) {\n    return false;\n  }\n  return input.prompt !== void 0 || input.messages !== void 0;\n}\nfunction operationNameFromId(operationId) {\n  if (operationId === \"ai.workflowAgent.stream\") {\n    return \"WorkflowAgent.stream\";\n  }\n  return operationId?.startsWith(\"ai.\") ? operationId.slice(\"ai.\".length) : operationId || \"ai-sdk\";\n}\nfunction modelFromEvent(event) {\n  return event.modelId ? {\n    modelId: event.modelId,\n    ...event.provider ? { provider: event.provider } : {}\n  } : void 0;\n}\nfunction metadataFromEvent(event) {\n  const metadata = createAISDKIntegrationMetadata();\n  const { model, provider } = serializeModelWithProvider(modelFromEvent(event));\n  if (model) {\n    metadata.model = model;\n  }\n  if (provider) {\n    metadata.provider = provider;\n  }\n  if (typeof event.functionId === \"string\") {\n    metadata.functionId = event.functionId;\n  }\n  return metadata;\n}\nfunction operationInput(event, operationName) {\n  if (operationName === \"embed\") {\n    return {\n      model: modelFromEvent(event),\n      value: event.value\n    };\n  }\n  if (operationName === \"embedMany\") {\n    return {\n      model: modelFromEvent(event),\n      values: Array.isArray(event.value) ? event.value ?? [] : void 0\n    };\n  }\n  if (operationName === \"rerank\") {\n    return {\n      model: modelFromEvent(event),\n      documents: event.documents,\n      query: event.query,\n      topN: event.topN\n    };\n  }\n  return {\n    model: modelFromEvent(event),\n    instructions: event.instructions,\n    system: event.system,\n    prompt: event.prompt,\n    messages: event.messages,\n    tools: event.tools,\n    toolChoice: event.toolChoice,\n    activeTools: event.activeTools,\n    output: event.output,\n    schema: event.schema,\n    schemaName: event.schemaName,\n    schemaDescription: event.schemaDescription,\n    maxOutputTokens: event.maxOutputTokens,\n    temperature: event.temperature,\n    topP: event.topP,\n    topK: event.topK,\n    presencePenalty: event.presencePenalty,\n    frequencyPenalty: event.frequencyPenalty,\n    seed: event.seed,\n    maxRetries: event.maxRetries,\n    headers: event.headers,\n    providerOptions: event.providerOptions\n  };\n}\nfunction shiftModelSpan(modelSpans, callId) {\n  const spans = modelSpans.get(callId);\n  const span = spans?.shift();\n  if (spans && spans.length === 0) {\n    modelSpans.delete(callId);\n  }\n  return span;\n}\nfunction finishResult(event, operationName) {\n  if (operationName === \"embed\") {\n    return {\n      ...event,\n      embedding: event.embedding\n    };\n  }\n  if (operationName === \"embedMany\") {\n    return {\n      ...event,\n      embeddings: event.embedding\n    };\n  }\n  if (operationName === \"rerank\") {\n    return event;\n  }\n  return event;\n}\nfunction extractTimeToFirstToken(result, state) {\n  if (state.firstChunkTime !== void 0) {\n    return state.firstChunkTime - state.startTime;\n  }\n  const performanceCandidates = [\n    safePerformance(result),\n    safePerformance(result.finalStep),\n    ...Array.isArray(result.steps) ? (result.steps ?? []).map(safePerformance) : []\n  ];\n  for (const performance2 of performanceCandidates) {\n    const timeToFirstOutputMs = performance2?.timeToFirstOutputMs;\n    if (typeof timeToFirstOutputMs === \"number\") {\n      return timeToFirstOutputMs / 1e3;\n    }\n  }\n  return void 0;\n}\nfunction safePerformance(value) {\n  if (!isObject(value)) {\n    return void 0;\n  }\n  const performance2 = value.performance;\n  return isObject(performance2) ? performance2 : void 0;\n}\nfunction finishOutput(result, operationName) {\n  if (operationName === \"embed\" || operationName === \"embedMany\") {\n    return processAISDKEmbeddingOutput(\n      result,\n      DEFAULT_DENY_OUTPUT_PATHS\n    );\n  }\n  if (operationName === \"rerank\") {\n    return processAISDKRerankOutput(\n      result,\n      DEFAULT_DENY_OUTPUT_PATHS\n    );\n  }\n  return processAISDKOutput(result, DEFAULT_DENY_OUTPUT_PATHS);\n}\n\n// src/instrumentation/plugins/ai-sdk-channels.ts\nvar BRAINTRUST_WRAPPED_AI_SDK_MODEL = /* @__PURE__ */ Symbol.for(\n  \"braintrust.ai-sdk.wrapped-model\"\n);\nvar aiSDKChannels = defineChannels(\n  \"ai\",\n  {\n    modelGenerate: channel({\n      channelName: \"model.doGenerate\",\n      kind: \"async\"\n    }),\n    modelStream: channel({\n      channelName: \"model.doStream\",\n      kind: \"async\"\n    }),\n    evaluate: channel({\n      channelName: \"evaluate\",\n      kind: \"async\"\n    }),\n    generateText: channel({\n      channelName: \"generateText\",\n      kind: \"async\"\n    }),\n    generateImage: channel({\n      channelName: \"generateImage\",\n      kind: \"async\"\n    }),\n    streamText: channel({\n      channelName: \"streamText\",\n      kind: \"async\"\n    }),\n    streamTextSync: channel({\n      channelName: \"streamText.sync\",\n      kind: \"sync-stream\"\n    }),\n    generateObject: channel({\n      channelName: \"generateObject\",\n      kind: \"async\"\n    }),\n    streamObject: channel({\n      channelName: \"streamObject\",\n      kind: \"async\"\n    }),\n    streamObjectSync: channel({\n      channelName: \"streamObject.sync\",\n      kind: \"sync-stream\"\n    }),\n    embed: channel({\n      channelName: \"embed\",\n      kind: \"async\"\n    }),\n    embedMany: channel({\n      channelName: \"embedMany\",\n      kind: \"async\"\n    }),\n    rerank: channel({\n      channelName: \"rerank\",\n      kind: \"async\"\n    }),\n    agentGenerate: channel({\n      channelName: \"Agent.generate\",\n      kind: \"async\"\n    }),\n    agentStream: channel({\n      channelName: \"Agent.stream\",\n      kind: \"async\"\n    }),\n    agentStreamSync: channel({\n      channelName: \"Agent.stream.sync\",\n      kind: \"sync-stream\"\n    }),\n    toolLoopAgentGenerate: channel({\n      channelName: \"ToolLoopAgent.generate\",\n      kind: \"async\"\n    }),\n    toolLoopAgentStream: channel({\n      channelName: \"ToolLoopAgent.stream\",\n      kind: \"async\"\n    }),\n    workflowAgentStream: channel({\n      channelName: \"WorkflowAgent.stream\",\n      kind: \"async\"\n    }),\n    v7CreateTelemetryDispatcher: channel({\n      channelName: \"createTelemetryDispatcher\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.AI_SDK }\n);\nvar harnessAgentChannels = defineChannels(\n  \"@ai-sdk/harness\",\n  {\n    createSession: channel({\n      channelName: \"HarnessAgent.createSession\",\n      kind: \"async\"\n    }),\n    generate: channel({\n      channelName: \"HarnessAgent.generate\",\n      kind: \"async\"\n    }),\n    stream: channel({\n      channelName: \"HarnessAgent.stream\",\n      kind: \"async\"\n    }),\n    continueGenerate: channel({\n      channelName: \"HarnessAgent.continueGenerate\",\n      kind: \"async\"\n    }),\n    continueStream: channel({\n      channelName: \"HarnessAgent.continueStream\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.AI_SDK }\n);\n\n// src/instrumentation/plugins/ai-sdk-metrics.ts\nfunction safeFieldRead(obj, field) {\n  if (!obj || typeof obj !== \"object\") {\n    return void 0;\n  }\n  try {\n    const value = Reflect.get(obj, field);\n    if (isPromiseLike(value)) {\n      void Promise.resolve(value).catch(() => {\n      });\n      return void 0;\n    }\n    return value;\n  } catch {\n    return void 0;\n  }\n}\nfunction firstNumber2(...values) {\n  return values.find((value) => typeof value === \"number\");\n}\nfunction parseGatewayCost(cost) {\n  if (typeof cost === \"number\") {\n    return cost;\n  }\n  if (typeof cost === \"string\") {\n    const parsed = Number.parseFloat(cost);\n    return Number.isNaN(parsed) ? void 0 : parsed;\n  }\n  return void 0;\n}\nfunction extractCost(result) {\n  const steps = safeFieldRead(result, \"steps\");\n  if (Array.isArray(steps)) {\n    let total = 0;\n    let found = false;\n    for (const step of steps) {\n      const providerMetadata2 = safeFieldRead(step, \"providerMetadata\");\n      const gateway2 = safeFieldRead(providerMetadata2, \"gateway\");\n      const cost2 = parseGatewayCost(safeFieldRead(gateway2, \"cost\")) ?? parseGatewayCost(safeFieldRead(gateway2, \"marketCost\"));\n      if (cost2 !== void 0 && cost2 > 0) {\n        total += cost2;\n        found = true;\n      }\n    }\n    if (found) {\n      return total;\n    }\n  }\n  const providerMetadata = safeFieldRead(result, \"providerMetadata\");\n  const gateway = safeFieldRead(providerMetadata, \"gateway\");\n  const cost = parseGatewayCost(safeFieldRead(gateway, \"cost\")) ?? parseGatewayCost(safeFieldRead(gateway, \"marketCost\"));\n  return cost !== void 0 && cost > 0 ? cost : void 0;\n}\nfunction extractTokenMetrics(result) {\n  const totalUsage = safeFieldRead(result, \"totalUsage\");\n  const usageValue = totalUsage ?? safeFieldRead(result, \"usage\");\n  if (!usageValue || typeof usageValue !== \"object\") {\n    return {};\n  }\n  const usage = usageValue;\n  const inputTokensValue = safeFieldRead(usage, \"inputTokens\");\n  const outputTokensValue = safeFieldRead(usage, \"outputTokens\");\n  const inputTokenDetails = safeFieldRead(usage, \"inputTokenDetails\");\n  const providerMetadata = safeFieldRead(result, \"providerMetadata\");\n  const anthropicMetadata = safeFieldRead(providerMetadata, \"anthropic\");\n  const anthropicUsage = safeFieldRead(anthropicMetadata, \"usage\");\n  const metrics = {};\n  const promptTokens = firstNumber2(\n    safeFieldRead(inputTokensValue, \"total\"),\n    inputTokensValue,\n    safeFieldRead(usage, \"promptTokens\"),\n    safeFieldRead(usage, \"prompt_tokens\")\n  );\n  const completionTokens = firstNumber2(\n    safeFieldRead(outputTokensValue, \"total\"),\n    outputTokensValue,\n    safeFieldRead(usage, \"completionTokens\"),\n    safeFieldRead(usage, \"completion_tokens\")\n  );\n  if (completionTokens !== void 0) {\n    metrics.completion_tokens = completionTokens;\n  }\n  const totalTokens = firstNumber2(\n    safeFieldRead(usage, \"totalTokens\"),\n    safeFieldRead(usage, \"tokens\"),\n    safeFieldRead(usage, \"total_tokens\")\n  );\n  const promptCachedTokens = firstNumber2(\n    safeFieldRead(inputTokensValue, \"cacheRead\"),\n    safeFieldRead(inputTokenDetails, \"cacheReadTokens\"),\n    safeFieldRead(usage, \"cachedInputTokens\"),\n    safeFieldRead(usage, \"promptCachedTokens\"),\n    safeFieldRead(usage, \"prompt_cached_tokens\"),\n    safeFieldRead(anthropicUsage, \"cache_read_input_tokens\")\n  );\n  if (promptCachedTokens !== void 0) {\n    metrics.prompt_cached_tokens = promptCachedTokens;\n  }\n  const promptCacheCreationTokens = firstNumber2(\n    safeFieldRead(inputTokensValue, \"cacheWrite\"),\n    safeFieldRead(inputTokenDetails, \"cacheWriteTokens\"),\n    safeFieldRead(usage, \"promptCacheCreationTokens\"),\n    safeFieldRead(usage, \"prompt_cache_creation_tokens\"),\n    safeFieldRead(anthropicMetadata, \"cacheCreationInputTokens\"),\n    safeFieldRead(anthropicUsage, \"cache_creation_input_tokens\")\n  );\n  if (promptCacheCreationTokens !== void 0) {\n    metrics.prompt_cache_creation_tokens = promptCacheCreationTokens;\n  }\n  const anthropicInputTokens = firstNumber2(\n    safeFieldRead(anthropicUsage, \"input_tokens\")\n  );\n  const cacheTokens = (promptCachedTokens ?? 0) + (promptCacheCreationTokens ?? 0);\n  const promptTokensExcludeCache = cacheTokens > 0 && promptTokens !== void 0 && anthropicInputTokens !== void 0 && promptTokens === anthropicInputTokens;\n  const normalizedPromptTokens = promptTokens === void 0 ? void 0 : promptTokens + (promptTokensExcludeCache ? cacheTokens : 0);\n  if (normalizedPromptTokens !== void 0) {\n    metrics.prompt_tokens = normalizedPromptTokens;\n  }\n  if (totalTokens !== void 0) {\n    const totalTokensExcludeCache = promptTokensExcludeCache && completionTokens !== void 0 && totalTokens === promptTokens + completionTokens;\n    metrics.tokens = totalTokens + (totalTokensExcludeCache ? cacheTokens : 0);\n  } else if (normalizedPromptTokens !== void 0 && completionTokens !== void 0) {\n    metrics.tokens = normalizedPromptTokens + completionTokens;\n  }\n  const promptReasoningTokens = firstNumber2(\n    safeFieldRead(usage, \"promptReasoningTokens\"),\n    safeFieldRead(usage, \"prompt_reasoning_tokens\")\n  );\n  if (promptReasoningTokens !== void 0) {\n    metrics.prompt_reasoning_tokens = promptReasoningTokens;\n  }\n  const completionCachedTokens = firstNumber2(\n    safeFieldRead(usage, \"completionCachedTokens\"),\n    safeFieldRead(usage, \"completion_cached_tokens\")\n  );\n  if (completionCachedTokens !== void 0) {\n    metrics.completion_cached_tokens = completionCachedTokens;\n  }\n  const reasoningTokens = firstNumber2(\n    safeFieldRead(outputTokensValue, \"reasoning\"),\n    safeFieldRead(usage, \"reasoningTokens\"),\n    safeFieldRead(usage, \"completionReasoningTokens\"),\n    safeFieldRead(usage, \"completion_reasoning_tokens\"),\n    safeFieldRead(usage, \"reasoning_tokens\"),\n    safeFieldRead(usage, \"thinkingTokens\"),\n    safeFieldRead(usage, \"thinking_tokens\")\n  );\n  if (reasoningTokens !== void 0) {\n    metrics.completion_reasoning_tokens = reasoningTokens;\n    metrics.reasoning_tokens = reasoningTokens;\n  }\n  const completionAudioTokens = firstNumber2(\n    safeFieldRead(usage, \"completionAudioTokens\"),\n    safeFieldRead(usage, \"completion_audio_tokens\")\n  );\n  if (completionAudioTokens !== void 0) {\n    metrics.completion_audio_tokens = completionAudioTokens;\n  }\n  const cost = extractCost(result);\n  if (cost !== void 0) {\n    metrics.estimated_cost = cost;\n  }\n  return metrics;\n}\n\n// src/instrumentation/plugins/cloudflare-think-context.ts\nvar cloudflareThinkSpans = /* @__PURE__ */ new Map();\nfunction registerCloudflareThinkSpan(span) {\n  if (span.spanId) {\n    cloudflareThinkSpans.set(span.spanId, span);\n  }\n}\nfunction unregisterCloudflareThinkSpan(span) {\n  if (span.spanId) {\n    cloudflareThinkSpans.delete(span.spanId);\n  }\n}\nfunction currentCloudflareThinkSpan() {\n  const parentSpanIds = _internalGetGlobalState()?.contextManager.getParentSpanIds()?.spanParents ?? [];\n  for (const parentSpanId of parentSpanIds) {\n    const span = cloudflareThinkSpans.get(parentSpanId);\n    if (span) {\n      return span;\n    }\n  }\n  return void 0;\n}\n\n// src/instrumentation/plugins/ai-sdk-plugin.ts\nvar DEFAULT_DENY_OUTPUT_PATHS = [\n  // v3\n  \"roundtrips[].request.body\",\n  \"roundtrips[].request.headers\",\n  \"roundtrips[].response.headers\",\n  \"rawResponse.headers\",\n  \"responseMessages\",\n  // v5\n  \"request.body\",\n  \"request.headers\",\n  \"responses[].headers\",\n  \"response.body\",\n  \"response.headers\",\n  \"steps[].request.body\",\n  \"steps[].request.headers\",\n  \"steps[].responses[].headers\",\n  \"steps[].response.body\",\n  \"steps[].response.headers\"\n];\nvar AUTO_PATCHED_MODEL = /* @__PURE__ */ Symbol.for(\"braintrust.ai-sdk.auto-patched-model\");\nvar AUTO_PATCHED_TOOL = /* @__PURE__ */ Symbol.for(\"braintrust.ai-sdk.auto-patched-tool\");\nvar AUTO_PATCHED_V7_TELEMETRY_DISPATCHER = /* @__PURE__ */ Symbol.for(\n  \"braintrust.ai-sdk.v7.auto-patched-telemetry-dispatcher\"\n);\nvar RUNTIME_DENY_OUTPUT_PATHS = /* @__PURE__ */ Symbol.for(\n  \"braintrust.ai-sdk.deny-output-paths\"\n);\nvar aiSDKV7TelemetryOperationCounter = 0;\nvar TRANSPORT_PAYLOAD_ROOT_PATHS = [\n  \"rawResponse\",\n  \"request\",\n  \"response\",\n  \"responses[]\",\n  \"roundtrips[].request\",\n  \"roundtrips[].response\",\n  \"steps[].request\",\n  \"steps[].response\",\n  \"steps[].responses[]\"\n];\nvar AI_SDK_V7_TELEMETRY_CALLBACKS = [\n  \"onStart\",\n  \"onStepStart\",\n  \"onLanguageModelCallStart\",\n  \"onLanguageModelCallEnd\",\n  \"onToolExecutionStart\",\n  \"onToolExecutionEnd\",\n  \"onChunk\",\n  \"onStepEnd\",\n  \"onStepFinish\",\n  \"onObjectStepStart\",\n  \"onObjectStepEnd\",\n  \"onEmbedStart\",\n  \"onEmbedEnd\",\n  \"onRerankStart\",\n  \"onRerankEnd\",\n  \"onEnd\",\n  \"onAbort\",\n  \"onError\"\n];\nvar AISDKPlugin = class extends BasePlugin {\n  config;\n  constructor(config = {}) {\n    super();\n    this.config = config;\n  }\n  onEnable() {\n    this.subscribeToAISDK();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToAISDK() {\n    const denyOutputPaths = this.config.denyOutputPaths || DEFAULT_DENY_OUTPUT_PATHS;\n    this.unsubscribers.push(\n      interceptAISDKV7TelemetryDispatcher(),\n      interceptAISDKEvaluate(denyOutputPaths),\n      interceptAISDKModelGenerate(denyOutputPaths),\n      interceptAISDKModelStream(denyOutputPaths),\n      subscribeToHarnessAgentCreateSession()\n    );\n    this.unsubscribers.push(\n      subscribeToHarnessContinuation(\n        harnessAgentChannels.continueGenerate,\n        denyOutputPaths\n      ),\n      subscribeToHarnessContinuation(\n        harnessAgentChannels.continueStream,\n        denyOutputPaths\n      )\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.generateText, {\n        name: \"generateText\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths),\n        extractOutput: (result, endEvent) => {\n          finalizeAISDKChildTracing(endEvent);\n          return processAISDKOutput(\n            result,\n            resolveDenyOutputPaths(endEvent, denyOutputPaths)\n          );\n        },\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent),\n        aggregateChunks: aggregateAISDKChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(aiSDKChannels.generateImage, {\n        name: \"generateImage\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params], event) => prepareAISDKGenerateImageInput(params, event.self),\n        extractOutput: (result, endEvent) => processAISDKGenerateImageOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result) => extractTokenMetrics(result)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.streamText, {\n        name: \"streamText\",\n        type: \"function\" /* FUNCTION */,\n        shouldTrace: () => currentCloudflareThinkSpan() === void 0,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent, startTime),\n        aggregateChunks: aggregateAISDKChunks,\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(aiSDKChannels.streamTextSync, {\n        name: \"streamText\",\n        type: \"function\" /* FUNCTION */,\n        shouldTrace: () => currentCloudflareThinkSpan() === void 0,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths),\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.generateObject, {\n        name: \"generateObject\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths),\n        extractOutput: (result, endEvent) => {\n          finalizeAISDKChildTracing(endEvent);\n          return processAISDKOutput(\n            result,\n            resolveDenyOutputPaths(endEvent, denyOutputPaths)\n          );\n        },\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent),\n        aggregateChunks: aggregateAISDKChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.streamObject, {\n        name: \"streamObject\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent, startTime),\n        aggregateChunks: aggregateAISDKChunks,\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(aiSDKChannels.streamObjectSync, {\n        name: \"streamObject\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths),\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(aiSDKChannels.embed, {\n        name: \"embed\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event) => prepareAISDKEmbedInput(params, event.self),\n        extractOutput: (result, endEvent) => processAISDKEmbeddingOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(aiSDKChannels.embedMany, {\n        name: \"embedMany\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event) => prepareAISDKEmbedInput(params, event.self),\n        extractOutput: (result, endEvent) => processAISDKEmbeddingOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(aiSDKChannels.rerank, {\n        name: \"rerank\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event) => prepareAISDKRerankInput(params, event.self),\n        extractOutput: (result, endEvent) => processAISDKRerankOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.agentGenerate, {\n        name: \"Agent.generate\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths, {\n          agentOwner: true\n        }),\n        extractOutput: (result, endEvent) => {\n          finalizeAISDKChildTracing(endEvent);\n          return processAISDKOutput(\n            result,\n            resolveDenyOutputPaths(endEvent, denyOutputPaths)\n          );\n        },\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent),\n        aggregateChunks: aggregateAISDKChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.agentStream, {\n        name: \"Agent.stream\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths, {\n          agentOwner: true\n        }),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent, startTime),\n        aggregateChunks: aggregateAISDKChunks,\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(aiSDKChannels.agentStreamSync, {\n        name: \"Agent.stream\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths, {\n          agentOwner: true\n        }),\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(harnessAgentChannels.generate, {\n        name: \"HarnessAgent.generate\",\n        startSpan: _internalStartSpanWithInitialMerge,\n        type: \"task\" /* TASK */,\n        extractInput: ([params], event, span) => prepareAISDKHarnessAgentInput(params, event.self, span),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result) => extractTokenMetrics(result),\n        aggregateChunks: aggregateAISDKChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(harnessAgentChannels.stream, {\n        name: \"HarnessAgent.stream\",\n        startSpan: _internalStartSpanWithInitialMerge,\n        type: \"task\" /* TASK */,\n        extractInput: ([params], event, span) => prepareAISDKHarnessAgentInput(params, event.self, span),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, startTime) => ({\n          ...extractTokenMetrics(result),\n          ...startTime === void 0 ? {} : {\n            time_to_first_token: getCurrentUnixTimestamp() - startTime\n          }\n        }),\n        aggregateChunks: aggregateAISDKChunks,\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          resolvePromiseUsage: true,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(harnessAgentChannels.continueGenerate, {\n        name: \"HarnessAgent.continueGenerate\",\n        shouldTrace: (args) => !harnessContinuationParent(harnessSessionFromArguments(args)),\n        startSpan: _internalStartSpanWithInitialMerge,\n        type: \"task\" /* TASK */,\n        extractInput: ([params], event, span) => prepareAISDKHarnessAgentInput(params, event.self, span),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result) => extractTokenMetrics(result),\n        aggregateChunks: aggregateAISDKChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(harnessAgentChannels.continueStream, {\n        name: \"HarnessAgent.continueStream\",\n        shouldTrace: (args) => !harnessContinuationParent(harnessSessionFromArguments(args)),\n        startSpan: _internalStartSpanWithInitialMerge,\n        type: \"task\" /* TASK */,\n        extractInput: ([params], event, span) => prepareAISDKHarnessAgentInput(params, event.self, span),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, startTime) => ({\n          ...extractTokenMetrics(result),\n          ...startTime === void 0 ? {} : {\n            time_to_first_token: getCurrentUnixTimestamp() - startTime\n          }\n        }),\n        aggregateChunks: aggregateAISDKChunks,\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          resolvePromiseUsage: true,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.toolLoopAgentGenerate, {\n        name: \"ToolLoopAgent.generate\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths, {\n          agentOwner: true\n        }),\n        extractOutput: (result, endEvent) => {\n          finalizeAISDKChildTracing(endEvent);\n          return processAISDKOutput(\n            result,\n            resolveDenyOutputPaths(endEvent, denyOutputPaths)\n          );\n        },\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent),\n        aggregateChunks: aggregateAISDKChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.toolLoopAgentStream, {\n        name: \"ToolLoopAgent.stream\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKCallInput(params, event, span, denyOutputPaths, {\n          agentOwner: true\n        }),\n        extractOutput: (result, endEvent) => processAISDKOutput(\n          result,\n          resolveDenyOutputPaths(endEvent, denyOutputPaths)\n        ),\n        extractMetrics: (result, startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent, startTime),\n        aggregateChunks: aggregateAISDKChunks,\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(aiSDKChannels.workflowAgentStream, {\n        name: \"WorkflowAgent.stream\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params], event, span) => prepareAISDKWorkflowAgentStreamInput(\n          params,\n          event,\n          span,\n          denyOutputPaths\n        ),\n        extractOutput: (result, endEvent) => {\n          finalizeAISDKChildTracing(endEvent);\n          return processAISDKOutput(\n            result,\n            resolveDenyOutputPaths(endEvent, denyOutputPaths)\n          );\n        },\n        extractMetrics: (result, _startTime, endEvent) => extractTopLevelAISDKMetrics(result, endEvent),\n        aggregateChunks: aggregateAISDKChunks,\n        onComplete: ({ span }) => {\n          unregisterWorkflowAgentWrapperSpan(span);\n        },\n        onError: ({ event, span }) => {\n          finalizeAISDKChildTracing(event);\n          unregisterWorkflowAgentWrapperSpan(span);\n        },\n        patchResult: ({ endEvent, result, span, startTime }) => patchAISDKStreamingResult({\n          defaultDenyOutputPaths: denyOutputPaths,\n          endEvent,\n          onComplete: () => unregisterWorkflowAgentWrapperSpan(span),\n          onCancel: () => unregisterWorkflowAgentWrapperSpan(span),\n          onError: () => unregisterWorkflowAgentWrapperSpan(span),\n          result,\n          span,\n          startTime\n        })\n      })\n    );\n  }\n};\nfunction interceptAISDKEvaluate(defaultDenyOutputPaths) {\n  return aiSDKChannels.evaluate.intercept(\n    (target, thisArg, args, additional) => {\n      if (isAutoInstrumentationSuppressed()) {\n        return Reflect.apply(target, thisArg, args);\n      }\n      let span;\n      let denyOutputPaths;\n      try {\n        const params = args[0];\n        const spanInfo = additional.span_info;\n        denyOutputPaths = resolveDenyOutputPaths(\n          { ...additional, arguments: args },\n          defaultDenyOutputPaths\n        );\n        span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name: spanInfo?.name ?? \"evaluate\",\n              spanAttributes: {\n                type: \"question\",\n                ...spanInfo?.spanAttributes\n              },\n              event: {\n                input: {\n                  state: params.state,\n                  questions: addEvaluationIds(params.questions)\n                },\n                metadata: {\n                  ...extractBaseMetadata(params.model),\n                  ...spanInfo?.metadata\n                }\n              }\n            },\n            INSTRUMENTATION_NAMES.AI_SDK\n          )\n        );\n      } catch (error) {\n        debugLogger.error(\"Error starting span for evaluate:\", error);\n        return Reflect.apply(target, thisArg, args);\n      }\n      const finish = (log3) => {\n        try {\n          log3();\n        } catch (error) {\n          debugLogger.error(\"Error logging span for evaluate:\", error);\n        }\n        try {\n          span.end();\n        } catch (error) {\n          debugLogger.error(\"Error ending span for evaluate:\", error);\n        }\n      };\n      try {\n        const result = withCurrent(\n          span,\n          () => runWithAutoInstrumentationSuppressed(\n            () => Reflect.apply(target, thisArg, args)\n          )\n        );\n        void Promise.resolve(result).then(\n          (value) => finish(() => {\n            const confidence = value.providerMetadata?.typesafe?.confidence;\n            const gatewayRouting = extractGatewayRoutingInfo(value);\n            const requestMetadata = serializeModelWithProvider(args[0].model);\n            const providerMetadataKeys = Object.keys(\n              value.providerMetadata ?? {}\n            ).filter((key) => key !== \"gateway\");\n            const resolvedModel = serializeModelWithProvider(\n              gatewayRouting?.model ?? value.response?.modelId\n            );\n            const resolvedProvider = gatewayRouting?.provider ?? (providerMetadataKeys.length === 1 ? providerMetadataKeys[0] : resolvedModel.provider ?? requestMetadata.provider);\n            span.log({\n              output: omit(\n                {\n                  answers: addEvaluationIds(value.answers, confidence)\n                },\n                denyOutputPaths\n              ),\n              metrics: extractTokenMetrics(value),\n              metadata: {\n                ...resolvedModel.model ? { model: resolvedModel.model } : {},\n                ...resolvedProvider ? { provider: resolvedProvider } : {},\n                ...confidence ? { providerMetadata: { typesafe: { confidence } } } : {}\n              }\n            });\n          }),\n          (error) => finish(() => span.log({ error }))\n        );\n        return result;\n      } catch (error) {\n        finish(() => span.log({ error }));\n        throw error;\n      }\n    }\n  );\n}\nfunction addEvaluationIds(value, confidence = void 0) {\n  if (!isObject(value)) {\n    return value;\n  }\n  return Object.entries(value).map(([id, entry]) => {\n    if (!isObject(entry)) {\n      return { id, value: entry };\n    }\n    const answerConfidence = isObject(confidence) ? confidence[id] : void 0;\n    return {\n      ...entry,\n      ...typeof answerConfidence === \"number\" && (entry.type === \"choice\" || entry.type === \"score\") ? { confidence: answerConfidence } : {},\n      id\n    };\n  });\n}\nfunction subscribeToHarnessAgentCreateSession() {\n  const channel2 = harnessAgentChannels.createSession.tracingChannel();\n  const parents = /* @__PURE__ */ new WeakMap();\n  const handlers = {\n    start: (event) => {\n      const parent = captureHarnessCreateSessionParent(event.arguments?.[0]);\n      if (parent) {\n        parents.set(event, parent);\n      }\n    },\n    asyncEnd: (event) => {\n      registerHarnessSessionParent(event.result, parents.get(event));\n      parents.delete(event);\n    },\n    error: (event) => {\n      parents.delete(event);\n    }\n  };\n  channel2.subscribe(handlers);\n  return () => channel2.unsubscribe(handlers);\n}\nfunction harnessContinuationParentFromEvent(event) {\n  try {\n    return harnessContinuationParent(event.arguments?.[0]?.session);\n  } catch {\n    return void 0;\n  }\n}\nfunction subscribeToHarnessContinuation(continuationChannel, defaultDenyOutputPaths) {\n  const channel2 = continuationChannel.tracingChannel();\n  const parents = /* @__PURE__ */ new WeakMap();\n  const startTimes = /* @__PURE__ */ new WeakMap();\n  const unbindParentStore = bindHarnessTurnParentToStart(\n    channel2,\n    harnessContinuationParentFromEvent\n  );\n  const handlers = {\n    start: (event) => {\n      const parent = harnessContinuationParentFromEvent(event);\n      if (!parent) {\n        return;\n      }\n      parents.set(event, parent);\n      startTimes.set(event, getCurrentUnixTimestamp());\n      try {\n        const params = event.arguments?.[0];\n        if (params) {\n          prepareAISDKHarnessAgentInput(params, event.self);\n        }\n      } catch (error) {\n        debugLogger.error(\n          \"Error preparing Harness continuation telemetry:\",\n          error\n        );\n      }\n    },\n    asyncEnd: (event) => {\n      const parent = parents.get(event);\n      const startTime = startTimes.get(event) ?? getCurrentUnixTimestamp();\n      parents.delete(event);\n      startTimes.delete(event);\n      if (!parent) {\n        return;\n      }\n      const endEvent = event;\n      const span = {\n        end: () => endHarnessTurn(parent),\n        log: (update) => updateHarnessTurn(\n          parent,\n          Object.prototype.hasOwnProperty.call(update, \"error\") && !Object.prototype.hasOwnProperty.call(update, \"output\") ? { ...update, output: null } : update\n        )\n      };\n      try {\n        if (isAsyncIterable(endEvent.result)) {\n          patchStreamIfNeeded(endEvent.result, {\n            onComplete: (chunks) => {\n              try {\n                const { metadata, metrics, output } = aggregateAISDKChunks(\n                  chunks,\n                  endEvent.result,\n                  endEvent\n                );\n                span.log({\n                  ...metadata ? { metadata } : {},\n                  metrics,\n                  output\n                });\n              } catch (error) {\n                debugLogger.error(\n                  \"Error aggregating Harness continuation stream:\",\n                  error\n                );\n              } finally {\n                span.end();\n              }\n            },\n            onError: (error) => {\n              span.log({ error: toLoggedError(error), output: null });\n              span.end();\n            }\n          });\n          return;\n        }\n        if (patchAISDKStreamingResult({\n          defaultDenyOutputPaths,\n          endEvent,\n          result: endEvent.result,\n          resolvePromiseUsage: true,\n          span,\n          startTime\n        })) {\n          return;\n        }\n        finalizeAISDKChildTracing(endEvent);\n        span.log({\n          metrics: extractTokenMetrics(endEvent.result),\n          output: processAISDKOutput(\n            endEvent.result,\n            resolveDenyOutputPaths(endEvent, defaultDenyOutputPaths)\n          )\n        });\n        span.end();\n      } catch (error) {\n        debugLogger.error(\"Error tracing Harness continuation:\", error);\n        span.end();\n      }\n    },\n    error: (event) => {\n      const parent = parents.get(event);\n      parents.delete(event);\n      startTimes.delete(event);\n      if (!parent) {\n        return;\n      }\n      updateHarnessTurn(parent, {\n        error: toLoggedError(event.error),\n        output: null\n      });\n      endHarnessTurn(parent);\n    }\n  };\n  channel2.subscribe(handlers);\n  return () => {\n    unbindParentStore();\n    channel2.unsubscribe(handlers);\n  };\n}\nfunction interceptAISDKV7TelemetryDispatcher() {\n  const telemetry = braintrustAISDKTelemetry();\n  return aiSDKChannels.v7CreateTelemetryDispatcher.intercept(\n    (target, thisArg, args) => {\n      const dispatcher = Reflect.apply(target, thisArg, args);\n      const telemetryOptions = args[0]?.telemetry;\n      if (telemetryOptions?.isEnabled !== false) {\n        try {\n          patchAISDKV7TelemetryDispatcher(\n            dispatcher,\n            telemetry,\n            telemetryOptions\n          );\n        } catch (error) {\n          debugLogger.error(\n            \"Error instrumenting AI SDK v7 telemetry dispatcher:\",\n            error\n          );\n        }\n      }\n      return dispatcher;\n    }\n  );\n}\nfunction buildAISDKModelSpanArgs(name, params, model) {\n  return withSpanInstrumentationName(\n    {\n      name,\n      spanAttributes: { type: \"llm\" /* LLM */ },\n      event: buildAISDKModelStartEvent(\n        params,\n        buildAISDKChildMetadata(model),\n        {}\n      )\n    },\n    INSTRUMENTATION_NAMES.AI_SDK\n  );\n}\nfunction interceptAISDKModelGenerate(defaultDenyOutputPaths) {\n  return aiSDKChannels.modelGenerate.intercept(\n    async (target, thisArg, [params], additional) => {\n      const span = _internalStartSpanWithInitialMerge(\n        buildAISDKModelSpanArgs(\"doGenerate\", params, additional.model)\n      );\n      try {\n        const result = await withCurrent(\n          span,\n          () => Reflect.apply(target, thisArg, [params])\n        );\n        const metrics = extractTokenMetrics(result);\n        span.log({\n          output: processAISDKOutput(\n            result,\n            additional.denyOutputPaths ?? defaultDenyOutputPaths\n          ),\n          metrics,\n          ...mergeMetadataPayload(\n            buildResolvedMetadataPayload(result),\n            buildMissingUsageMetadata(\n              result,\n              metrics,\n              \"ai_sdk_result_missing_usage\"\n            )\n          )\n        });\n        return result;\n      } catch (error) {\n        span.log({ error: toLoggedError(error) });\n        throw error;\n      } finally {\n        span.end();\n      }\n    }\n  );\n}\nfunction interceptAISDKModelStream(defaultDenyOutputPaths) {\n  return aiSDKChannels.modelStream.intercept(\n    async (target, thisArg, [params], additional) => {\n      const span = _internalStartSpanWithInitialMerge(\n        buildAISDKModelSpanArgs(\"doStream\", params, additional.model)\n      );\n      const startTime = getCurrentUnixTimestamp();\n      let result;\n      try {\n        result = await withCurrent(\n          span,\n          () => Reflect.apply(target, thisArg, [params])\n        );\n      } catch (error) {\n        span.log({ error: toLoggedError(error) });\n        span.end();\n        throw error;\n      }\n      const reader = result.stream.getReader();\n      const output = {};\n      const textParts = [];\n      const reasoningParts = [];\n      const toolCalls2 = [];\n      let firstChunkTime;\n      let ended = false;\n      const logAndEnd = (usageUnavailableReason) => {\n        if (ended) {\n          return;\n        }\n        ended = true;\n        output.text = textParts.join(\"\");\n        output.reasoning = reasoningParts.join(\"\");\n        output.toolCalls = toolCalls2;\n        const aggregatedResult = output;\n        const metrics = extractTokenMetrics(aggregatedResult);\n        if (firstChunkTime !== void 0) {\n          metrics.time_to_first_token = Math.max(\n            firstChunkTime - startTime,\n            1e-6\n          );\n        }\n        const missingUsageMetadata = usageUnavailableReason ? { usage_unavailable_reason: usageUnavailableReason } : buildMissingUsageMetadata(\n          aggregatedResult,\n          metrics,\n          \"ai_sdk_result_missing_usage\"\n        );\n        span.log({\n          output: processAISDKOutput(\n            aggregatedResult,\n            additional.denyOutputPaths ?? defaultDenyOutputPaths\n          ),\n          metrics,\n          ...mergeMetadataPayload(\n            buildResolvedMetadataPayload(aggregatedResult),\n            missingUsageMetadata\n          )\n        });\n        span.end();\n      };\n      const processChunk = (chunk) => {\n        if (firstChunkTime === void 0 && isAISDKContentStreamChunk(chunk)) {\n          firstChunkTime = getCurrentUnixTimestamp();\n        }\n        switch (chunk.type) {\n          case \"text-delta\":\n            textParts.push(extractTextDelta(chunk));\n            break;\n          case \"reasoning-delta\":\n            reasoningParts.push(chunk.delta ?? chunk.text ?? \"\");\n            break;\n          case \"tool-call\":\n            toolCalls2.push(chunk);\n            break;\n          case \"object\":\n            output.object = chunk.object;\n            break;\n          case \"finish\":\n            output.finishReason = chunk.finishReason;\n            output.usage = chunk.usage;\n            if (chunk.providerMetadata !== void 0) {\n              output.providerMetadata = chunk.providerMetadata;\n            }\n            logAndEnd();\n            break;\n        }\n      };\n      return {\n        ...result,\n        stream: new ReadableStream({\n          async pull(controller) {\n            try {\n              const next = await withCurrent(span, () => reader.read());\n              if (next.done) {\n                logAndEnd(\"ai_sdk_stream_finished_without_usage\");\n                controller.close();\n                return;\n              }\n              processChunk(next.value);\n              controller.enqueue(next.value);\n            } catch (error) {\n              span.log({ error: toLoggedError(error) });\n              logAndEnd(\"ai_sdk_stream_errored_without_usage\");\n              controller.error(error);\n            }\n          },\n          async cancel(reason) {\n            try {\n              await reader.cancel(reason);\n            } finally {\n              logAndEnd(\"ai_sdk_stream_cancelled_without_usage\");\n            }\n          }\n        })\n      };\n    }\n  );\n}\nfunction patchAISDKV7TelemetryDispatcher(dispatcher, telemetry, telemetryOptions) {\n  if (!isObject(dispatcher)) {\n    return;\n  }\n  const dispatcherRecord = dispatcher;\n  if (dispatcherRecord[AUTO_PATCHED_V7_TELEMETRY_DISPATCHER]) {\n    return;\n  }\n  dispatcherRecord[AUTO_PATCHED_V7_TELEMETRY_DISPATCHER] = true;\n  let operationKey;\n  const telemetryEventFields = {};\n  if (typeof telemetryOptions?.recordInputs === \"boolean\") {\n    telemetryEventFields.recordInputs = telemetryOptions.recordInputs;\n  }\n  if (typeof telemetryOptions?.recordOutputs === \"boolean\") {\n    telemetryEventFields.recordOutputs = telemetryOptions.recordOutputs;\n  }\n  if (typeof telemetryOptions?.functionId === \"string\") {\n    telemetryEventFields.functionId = telemetryOptions.functionId;\n  }\n  const eventWithOperationKey = (event) => {\n    if (!isObject(event)) {\n      return event;\n    }\n    const eventRecord = event;\n    const callId = typeof eventRecord.callId === \"string\" ? eventRecord.callId : \"unknown\";\n    operationKey ??= `${callId}:${++aiSDKV7TelemetryOperationCounter}`;\n    if (Object.keys(telemetryEventFields).length > 0) {\n      const augmentedEvent = {\n        ...telemetryEventFields,\n        ...event\n      };\n      try {\n        Object.defineProperty(augmentedEvent, BRAINTRUST_AI_SDK_V7_OPERATION_KEY, {\n          configurable: true,\n          enumerable: false,\n          value: operationKey\n        });\n      } catch {\n        augmentedEvent[BRAINTRUST_AI_SDK_V7_OPERATION_KEY] = operationKey;\n      }\n      return augmentedEvent;\n    }\n    try {\n      Object.defineProperty(eventRecord, BRAINTRUST_AI_SDK_V7_OPERATION_KEY, {\n        configurable: true,\n        enumerable: false,\n        value: operationKey\n      });\n      return event;\n    } catch {\n      return {\n        ...event,\n        [BRAINTRUST_AI_SDK_V7_OPERATION_KEY]: operationKey\n      };\n    }\n  };\n  for (const key of AI_SDK_V7_TELEMETRY_CALLBACKS) {\n    const braintrustCallback = telemetry[key];\n    if (typeof braintrustCallback !== \"function\") {\n      continue;\n    }\n    const existingCallback = dispatcherRecord[key];\n    dispatcherRecord[key] = (event) => {\n      const existingResult = typeof existingCallback === \"function\" ? existingCallback.call(dispatcher, event) : void 0;\n      try {\n        const braintrustResult = braintrustCallback.call(\n          telemetry,\n          eventWithOperationKey(event)\n        );\n        if (isPromiseLike(braintrustResult)) {\n          void Promise.resolve(braintrustResult).catch(() => void 0);\n        }\n      } catch {\n      }\n      return existingResult;\n    };\n  }\n  const braintrustExecuteTool = telemetry.executeTool;\n  if (typeof braintrustExecuteTool !== \"function\") {\n    return;\n  }\n  const existingExecuteTool = dispatcherRecord.executeTool;\n  dispatcherRecord.executeTool = (args) => braintrustExecuteTool.call(telemetry, {\n    ...args,\n    ...operationKey ? { [BRAINTRUST_AI_SDK_V7_OPERATION_KEY]: operationKey } : {},\n    execute: () => typeof existingExecuteTool === \"function\" ? existingExecuteTool.call(dispatcher, args) : args.execute()\n  });\n}\nfunction resolveDenyOutputPaths(event, defaultDenyOutputPaths) {\n  if (Array.isArray(event?.denyOutputPaths)) {\n    return event.denyOutputPaths;\n  }\n  const firstArgument2 = event?.arguments && event.arguments.length > 0 ? event.arguments[0] : void 0;\n  if (!firstArgument2 || typeof firstArgument2 !== \"object\") {\n    return defaultDenyOutputPaths;\n  }\n  const runtimeDenyOutputPaths = firstArgument2[RUNTIME_DENY_OUTPUT_PATHS];\n  if (Array.isArray(runtimeDenyOutputPaths) && runtimeDenyOutputPaths.every((path) => typeof path === \"string\")) {\n    return runtimeDenyOutputPaths;\n  }\n  return defaultDenyOutputPaths;\n}\nvar isZodSchema2 = (value) => {\n  return value != null && typeof value === \"object\" && \"_def\" in value && typeof value._def === \"object\";\n};\nvar serializeZodSchema2 = (schema) => {\n  try {\n    return zodToJsonSchema(schema);\n  } catch {\n    return {\n      type: \"object\",\n      description: \"Zod schema (conversion failed)\"\n    };\n  }\n};\nvar isOutputObject = (value) => {\n  if (value == null || typeof value !== \"object\") {\n    return false;\n  }\n  const output = value;\n  if (!(\"responseFormat\" in output)) {\n    return false;\n  }\n  if (output.type === \"object\" || output.type === \"text\") {\n    return true;\n  }\n  if (typeof output.responseFormat === \"function\" || typeof output.responseFormat === \"object\") {\n    return true;\n  }\n  return false;\n};\nvar serializeOutputObject = (output, model) => {\n  try {\n    const result = {\n      response_format: null\n    };\n    if (output.type) {\n      result.type = output.type;\n    }\n    let responseFormat;\n    if (typeof output.responseFormat === \"function\") {\n      const mockModelForSchema = {\n        supportsStructuredOutputs: true,\n        ...model && typeof model === \"object\" ? model : {}\n      };\n      responseFormat = output.responseFormat({ model: mockModelForSchema });\n    } else if (output.responseFormat != null && typeof output.responseFormat === \"object\") {\n      responseFormat = output.responseFormat;\n    }\n    if (responseFormat) {\n      if (typeof responseFormat.then === \"function\") {\n        result.response_format = Promise.resolve(responseFormat).then(\n          (resolved) => {\n            if (resolved.schema && isZodSchema2(resolved.schema)) {\n              return {\n                ...resolved,\n                schema: serializeZodSchema2(resolved.schema)\n              };\n            }\n            return resolved;\n          }\n        );\n      } else {\n        const syncResponseFormat = responseFormat;\n        if (syncResponseFormat.schema && isZodSchema2(syncResponseFormat.schema)) {\n          responseFormat = {\n            ...syncResponseFormat,\n            schema: serializeZodSchema2(syncResponseFormat.schema)\n          };\n        }\n        result.response_format = responseFormat;\n      }\n    }\n    return result;\n  } catch {\n    return {\n      response_format: null\n    };\n  }\n};\nvar processInputAttachmentsSync = (input) => {\n  if (!input) return { input };\n  const processed = { ...input };\n  delete processed.headers;\n  delete processed.experimental_output;\n  if (input.messages && Array.isArray(input.messages)) {\n    processed.messages = input.messages.map(processMessage);\n  }\n  if (input.prompt && typeof input.prompt === \"object\") {\n    if (Array.isArray(input.prompt)) {\n      processed.prompt = input.prompt.map(processMessage);\n    } else {\n      processed.prompt = processPromptContent(input.prompt);\n    }\n  }\n  if (input.schema && isZodSchema2(input.schema)) {\n    processed.schema = serializeZodSchema2(input.schema);\n  }\n  if (input.callOptionsSchema && isZodSchema2(input.callOptionsSchema)) {\n    processed.callOptionsSchema = serializeZodSchema2(input.callOptionsSchema);\n  }\n  if (input.tools) {\n    processed.tools = serializeAISDKToolsForLogging(input.tools);\n  }\n  let outputPromise;\n  if (input.output && isOutputObject(input.output)) {\n    const serialized = serializeOutputObject(input.output, input.model);\n    if (serialized.response_format && typeof serialized.response_format.then === \"function\") {\n      processed.output = { ...serialized, response_format: {} };\n      outputPromise = serialized.response_format.then(\n        (resolvedFormat) => ({\n          output: { ...serialized, response_format: resolvedFormat }\n        })\n      );\n    } else {\n      processed.output = serialized;\n    }\n  }\n  return {\n    input: sanitizeAISDKCallInputValue(processed),\n    outputPromise\n  };\n};\nvar processMessage = (message) => {\n  if (!message || typeof message !== \"object\") return message;\n  if (Array.isArray(message.content)) {\n    return {\n      ...message,\n      content: message.content.map(processContentPart)\n    };\n  }\n  if (typeof message.content === \"object\" && message.content !== null) {\n    return {\n      ...message,\n      content: processContentPart(message.content)\n    };\n  }\n  return message;\n};\nvar processPromptContent = (prompt) => {\n  if (Array.isArray(prompt)) {\n    return prompt.map(processContentPart);\n  }\n  if (prompt.content) {\n    if (Array.isArray(prompt.content)) {\n      return {\n        ...prompt,\n        content: prompt.content.map(processContentPart)\n      };\n    } else if (typeof prompt.content === \"object\") {\n      return {\n        ...prompt,\n        content: processContentPart(prompt.content)\n      };\n    }\n  }\n  return prompt;\n};\nvar processContentPart = (part) => {\n  if (!part || typeof part !== \"object\") return part;\n  try {\n    if (part.type === \"image\" && part.image) {\n      const imageAttachment = convertImageToAttachment(\n        part.image,\n        part.mimeType || part.mediaType\n      );\n      if (imageAttachment) {\n        return {\n          ...part,\n          image: imageAttachment\n        };\n      }\n    }\n    if (part.type === \"file\" && part.data && (part.mimeType || part.mediaType)) {\n      const fileAttachment = convertDataToAttachment(\n        part.data,\n        part.mimeType || part.mediaType,\n        part.name || part.filename\n      );\n      if (fileAttachment) {\n        return {\n          ...part,\n          data: fileAttachment\n        };\n      }\n    }\n    if (part.type === \"image_url\" && part.image_url) {\n      if (typeof part.image_url === \"object\" && part.image_url.url) {\n        const imageAttachment = convertImageToAttachment(part.image_url.url);\n        if (imageAttachment) {\n          return {\n            ...part,\n            image_url: {\n              ...part.image_url,\n              url: imageAttachment\n            }\n          };\n        }\n      }\n    }\n  } catch (error) {\n    console.warn(\"Error processing content part:\", error);\n  }\n  return part;\n};\nvar convertImageToAttachment = (image, explicitMimeType) => {\n  try {\n    if (typeof image === \"string\" && image.startsWith(\"data:\")) {\n      const [mimeTypeSection, base64Data] = image.split(\",\");\n      const mimeType = mimeTypeSection.match(/data:(.*?);/)?.[1];\n      if (mimeType && base64Data) {\n        const blob = convertDataToBlob(base64Data, mimeType);\n        if (blob) {\n          return new Attachment({\n            data: blob,\n            filename: `image.${getExtensionFromMediaType(mimeType)}`,\n            contentType: mimeType\n          });\n        }\n      }\n    }\n    if (explicitMimeType) {\n      const blob = convertDataToBlob(image, explicitMimeType);\n      if (blob) {\n        return new Attachment({\n          data: blob,\n          filename: `image.${getExtensionFromMediaType(explicitMimeType)}`,\n          contentType: explicitMimeType\n        });\n      }\n    }\n    if (image instanceof Blob && image.type) {\n      return new Attachment({\n        data: image,\n        filename: `image.${getExtensionFromMediaType(image.type)}`,\n        contentType: image.type\n      });\n    }\n    if (image instanceof Attachment) {\n      return image;\n    }\n  } catch (error) {\n    console.warn(\"Error converting image to attachment:\", error);\n  }\n  return null;\n};\nvar convertDataToAttachment = (data, mimeType, filename) => {\n  if (!mimeType) return null;\n  try {\n    let blob = null;\n    if (typeof data === \"string\" && data.startsWith(\"data:\")) {\n      const [, base64Data] = data.split(\",\");\n      if (base64Data) {\n        blob = convertDataToBlob(base64Data, mimeType);\n      }\n    } else if (typeof data === \"string\" && data.length > 0) {\n      blob = convertDataToBlob(data, mimeType);\n    } else if (data instanceof Uint8Array) {\n      blob = new Blob([data], { type: mimeType });\n    } else if (typeof Buffer !== \"undefined\" && Buffer.isBuffer(data)) {\n      blob = new Blob([data], { type: mimeType });\n    } else if (data instanceof Blob) {\n      blob = data;\n    }\n    if (blob) {\n      return new Attachment({\n        data: blob,\n        filename: filename || `file.${getExtensionFromMediaType(mimeType)}`,\n        contentType: mimeType\n      });\n    }\n  } catch (error) {\n    console.warn(\"Error converting data to attachment:\", error);\n  }\n  return null;\n};\nfunction processAISDKCallInput(params) {\n  return processInputAttachmentsSync(params);\n}\nfunction processAISDKGenerateImageInput(params) {\n  const prompt = params.prompt;\n  if (!isObject(prompt) || Array.isArray(prompt)) {\n    return processAISDKCallInput(params);\n  }\n  const processedPrompt = { ...prompt };\n  if (Array.isArray(prompt.images)) {\n    processedPrompt.images = prompt.images.map(\n      (image) => convertImageToAttachment(image, \"image/png\") ?? image\n    );\n  }\n  if (prompt.mask !== void 0) {\n    processedPrompt.mask = convertImageToAttachment(prompt.mask, \"image/png\") ?? prompt.mask;\n  }\n  return processAISDKCallInput({\n    ...params,\n    prompt: processedPrompt\n  });\n}\nfunction processAISDKWorkflowAgentCallInput(params) {\n  const processed = processAISDKCallInput(params);\n  return {\n    ...processed,\n    input: extractWorkflowAgentInput(processed.input)\n  };\n}\nfunction processAISDKWorkflowAgentModelCallInput(params) {\n  const processed = processAISDKCallInput(params);\n  return {\n    ...processed,\n    input: extractWorkflowAgentModelInput(processed.input)\n  };\n}\nfunction prepareAISDKCallInput(params, event, span, defaultDenyOutputPaths, childTracingOptions = {}) {\n  const { input, outputPromise } = processAISDKCallInput(params);\n  if (outputPromise && input && typeof input === \"object\") {\n    outputPromise.then((resolvedData) => {\n      span.log({\n        input: {\n          ...input,\n          ...resolvedData\n        }\n      });\n    }).catch(() => {\n    });\n  }\n  const metadata = extractMetadataFromCallParams(params, event.self);\n  const childTracing = prepareAISDKChildTracing(\n    params,\n    event.self,\n    span,\n    defaultDenyOutputPaths,\n    event.aiSDK,\n    childTracingOptions\n  );\n  event.modelWrapped = childTracing.modelWrapped;\n  if (childTracing.cleanup) {\n    event.__braintrust_ai_sdk_cleanup = childTracing.cleanup;\n  }\n  return {\n    input,\n    metadata\n  };\n}\nfunction prepareAISDKHarnessAgentInput(params, self, span) {\n  if (span) {\n    registerHarnessTurnSpan({\n      session: params.session,\n      span\n    });\n  }\n  if (isObject(self)) {\n    try {\n      if (isObject(self.settings)) {\n        const settings = self.settings;\n        if (settings.telemetry === void 0) {\n          Reflect.set(self, \"settings\", { ...settings, telemetry: {} });\n        }\n      }\n    } catch {\n    }\n  }\n  const selectedInput = {};\n  if (params.prompt !== void 0) {\n    selectedInput.prompt = params.prompt;\n  }\n  if (params.messages !== void 0) {\n    selectedInput.messages = params.messages;\n  }\n  if (params.toolApprovalContinuations !== void 0) {\n    selectedInput.toolApprovalContinuations = params.toolApprovalContinuations;\n  }\n  const metadata = extractMetadataFromCallParams({}, self);\n  if (isObject(params.session) && typeof params.session.sessionId === \"string\") {\n    metadata.sessionId = params.session.sessionId;\n  }\n  if (isObject(self)) {\n    if (typeof self.harnessId === \"string\") {\n      metadata.harnessId = self.harnessId;\n    }\n    if (typeof self.permissionMode === \"string\") {\n      metadata.permissionMode = self.permissionMode;\n    }\n  }\n  return {\n    input: processAISDKCallInput(selectedInput).input,\n    metadata\n  };\n}\nfunction harnessSessionFromArguments(args) {\n  const params = args[0];\n  return isObject(params) ? params.session : void 0;\n}\nfunction prepareAISDKWorkflowAgentStreamInput(params, event, span, defaultDenyOutputPaths) {\n  registerWorkflowAgentWrapperSpan(span);\n  const { input } = processAISDKWorkflowAgentCallInput(params);\n  const metadata = extractWorkflowMetadataFromCallParams(params, event.self);\n  const childTracing = prepareAISDKChildTracing(\n    params,\n    event.self,\n    span,\n    defaultDenyOutputPaths,\n    event.aiSDK,\n    { agentOwner: true, workflowAgent: true }\n  );\n  event.modelWrapped = childTracing.modelWrapped;\n  if (childTracing.cleanup) {\n    event.__braintrust_ai_sdk_cleanup = childTracing.cleanup;\n  }\n  return {\n    input,\n    metadata\n  };\n}\nfunction prepareAISDKAgentCallInput(params, event, span, defaultDenyOutputPaths = DEFAULT_DENY_OUTPUT_PATHS) {\n  const { input } = processAISDKWorkflowAgentCallInput(params);\n  const metadata = extractMetadataFromCallParams(params, event.self);\n  const childTracing = prepareAISDKChildTracing(\n    params,\n    event.self,\n    span,\n    defaultDenyOutputPaths,\n    event.aiSDK,\n    { agentOwner: true }\n  );\n  event.modelWrapped = childTracing.modelWrapped;\n  if (childTracing.cleanup) {\n    event.__braintrust_ai_sdk_cleanup = childTracing.cleanup;\n  }\n  return { input, metadata };\n}\nfunction prepareAISDKEmbedInput(params, self) {\n  return {\n    input: { ...params },\n    metadata: extractMetadataFromEmbedParams(params, self)\n  };\n}\nfunction prepareAISDKGenerateImageInput(params, self) {\n  return {\n    input: processAISDKGenerateImageInput(params).input,\n    metadata: extractMetadataFromCallParams(params, self)\n  };\n}\nfunction prepareAISDKRerankInput(params, self) {\n  const { documents, query } = params;\n  return {\n    input: {\n      documents,\n      query\n    },\n    metadata: extractMetadataFromRerankParams(params, self)\n  };\n}\nfunction extractTopLevelAISDKMetrics(result, event, startTime) {\n  const metrics = hasModelChildTracing(event) ? {} : extractTokenMetrics(result);\n  if (startTime) {\n    metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n  }\n  return metrics;\n}\nasync function extractResolvedAISDKTokenMetrics(result) {\n  for (const field of [\"totalUsage\", \"usage\"]) {\n    try {\n      const usage = await Promise.resolve(result[field]);\n      if (usage !== void 0) {\n        return extractTokenMetrics({ [field]: usage });\n      }\n    } catch {\n    }\n  }\n  return extractTokenMetrics(result);\n}\nfunction hasModelChildTracing(event) {\n  return event?.modelWrapped === true || event?.__braintrust_ai_sdk_model_wrapped === true;\n}\nfunction serializeToolExecutionInput(args) {\n  return args.length > 0 ? args[0] : args;\n}\nfunction createAISDKIntegrationMetadata() {\n  return {\n    braintrust: {\n      integration_name: \"ai-sdk\",\n      sdk_language: \"typescript\"\n    }\n  };\n}\nfunction resolveModelFromSelf(self) {\n  return self && typeof self === \"object\" && \"model\" in self && self.model ? self.model : self && typeof self === \"object\" && \"settings\" in self && self.settings?.model ? self.settings?.model : void 0;\n}\nfunction resolveToolsFromSelf(self) {\n  if (!self || typeof self !== \"object\") {\n    return void 0;\n  }\n  const selfRecord = self;\n  return selfRecord.tools ?? selfRecord.settings?.tools;\n}\nfunction extractBaseMetadata(model, self) {\n  const metadata = createAISDKIntegrationMetadata();\n  const { model: modelId, provider } = serializeModelWithProvider(\n    model ?? resolveModelFromSelf(self)\n  );\n  if (modelId) {\n    metadata.model = modelId;\n  }\n  if (provider) {\n    metadata.provider = provider;\n  }\n  return metadata;\n}\nfunction extractMetadataFromCallParams(params, self) {\n  const metadata = extractBaseMetadata(params.model, self);\n  const tools = serializeAISDKToolsForLogging(\n    params.tools ?? resolveToolsFromSelf(self)\n  );\n  if (tools) {\n    metadata.tools = tools;\n  }\n  return metadata;\n}\nfunction extractWorkflowMetadataFromCallParams(params, self) {\n  const metadata = extractMetadataFromCallParams(params, self);\n  const options = extractAISDKCallOptionsForMetadata(params);\n  if (Object.keys(options).length > 0) {\n    metadata.options = options;\n  }\n  return metadata;\n}\nfunction extractWorkflowAgentInput(params) {\n  const input = {};\n  if (params.instructions !== void 0) {\n    input.instructions = params.instructions;\n  }\n  if (params.system !== void 0) {\n    input.system = params.system;\n  }\n  if (Array.isArray(params.messages)) {\n    return { ...input, messages: params.messages };\n  }\n  if (typeof params.prompt === \"string\") {\n    return { ...input, prompt: params.prompt };\n  }\n  if (Array.isArray(params.prompt)) {\n    return { ...input, prompt: params.prompt };\n  }\n  return input;\n}\nfunction extractWorkflowAgentModelInput(params) {\n  const input = {};\n  if (params.instructions !== void 0) {\n    input.instructions = params.instructions;\n  }\n  if (params.system !== void 0) {\n    input.system = params.system;\n  }\n  if (Array.isArray(params.messages)) {\n    return { ...input, messages: params.messages };\n  }\n  if (typeof params.prompt === \"string\") {\n    return { ...input, prompt: params.prompt };\n  }\n  if (Array.isArray(params.prompt)) {\n    return { ...input, messages: params.prompt };\n  }\n  return input;\n}\nfunction sanitizeAISDKCallInputValue(value, depth = 0) {\n  if (value === void 0 || typeof value === \"function\") {\n    return void 0;\n  }\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (isPromiseLike(value)) {\n    return \"[Promise]\";\n  }\n  if (typeof AbortSignal !== \"undefined\" && value instanceof AbortSignal) {\n    return \"[AbortSignal]\";\n  }\n  if (depth >= 8) {\n    return \"[Object]\";\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => sanitizeAISDKCallInputValue(item, depth + 1)).filter((item) => item !== void 0);\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== Object.prototype && prototype !== null) {\n    return value;\n  }\n  const sanitized = {};\n  for (const [key, nested] of Object.entries(value)) {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\" || key.toLowerCase() === \"headers\") {\n      continue;\n    }\n    const sanitizedNested = sanitizeAISDKCallInputValue(nested, depth + 1);\n    if (sanitizedNested !== void 0) {\n      sanitized[key] = sanitizedNested;\n    }\n  }\n  return sanitized;\n}\nfunction extractAISDKCallOptionsForMetadata(params) {\n  const options = {};\n  const inputOrTopLevelKeys = /* @__PURE__ */ new Set([\n    \"model\",\n    \"instructions\",\n    \"messages\",\n    \"prompt\",\n    \"system\",\n    \"tools\",\n    \"headers\",\n    \"abortSignal\",\n    \"signal\",\n    \"experimental_output\"\n  ]);\n  for (const [key, value] of Object.entries(params)) {\n    if (inputOrTopLevelKeys.has(key) || key === \"__proto__\" || key === \"constructor\" || key === \"prototype\" || /^on[A-Z]/.test(key) && typeof value === \"function\") {\n      continue;\n    }\n    const sanitized = sanitizeAISDKMetadataValue(value);\n    if (sanitized !== void 0) {\n      options[key] = sanitized;\n    }\n  }\n  return options;\n}\nfunction sanitizeAISDKMetadataValue(value, depth = 0) {\n  if (value === void 0) {\n    return void 0;\n  }\n  if (typeof value === \"function\") {\n    return \"[Function]\";\n  }\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (isPromiseLike(value)) {\n    return \"[Promise]\";\n  }\n  if (typeof AbortSignal !== \"undefined\" && value instanceof AbortSignal) {\n    return \"[AbortSignal]\";\n  }\n  if (depth >= 8) {\n    return \"[Object]\";\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => sanitizeAISDKMetadataValue(item, depth + 1)).filter((item) => item !== void 0);\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  const sanitized = {};\n  for (const [key, nested] of Object.entries(value)) {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\" || key.toLowerCase() === \"headers\") {\n      continue;\n    }\n    const sanitizedNested = sanitizeAISDKMetadataValue(nested, depth + 1);\n    if (sanitizedNested !== void 0) {\n      sanitized[key] = sanitizedNested;\n    }\n  }\n  return sanitized;\n}\nfunction buildAISDKModelStartEvent(callOptions, baseMetadata, options) {\n  if (!options.workflowAgent) {\n    return {\n      input: processAISDKCallInput(callOptions).input,\n      metadata: baseMetadata\n    };\n  }\n  return {\n    input: processAISDKWorkflowAgentModelCallInput(callOptions).input,\n    metadata: {\n      ...baseMetadata,\n      ...extractWorkflowMetadataFromCallParams(callOptions)\n    }\n  };\n}\nfunction extractMetadataFromEmbedParams(params, self) {\n  return extractBaseMetadata(params.model, self);\n}\nfunction extractMetadataFromRerankParams(params, self) {\n  const metadata = extractBaseMetadata(params.model, self);\n  if (typeof params.topN === \"number\") {\n    metadata.topN = params.topN;\n  }\n  if (Array.isArray(params.documents)) {\n    metadata.document_count = params.documents.length;\n  }\n  return metadata;\n}\nfunction activeAISDKChildPatchEntry(entries) {\n  const activeSpan = currentSpan();\n  const activeSpanId = activeSpan.spanId;\n  if (activeSpanId) {\n    for (let index = entries.length - 1; index >= 0; index -= 1) {\n      const entry = entries[index];\n      if (entry?.activeSpanIds.has(activeSpanId)) {\n        return entry;\n      }\n    }\n  }\n  const activeParentSpanIds = activeSpan.spanParents ?? [];\n  for (let index = entries.length - 1; index >= 0; index -= 1) {\n    const entry = entries[index];\n    if (entry?.parentSpan.spanId && activeParentSpanIds.includes(entry.parentSpan.spanId)) {\n      return entry;\n    }\n  }\n  for (let index = entries.length - 1; index >= 0; index -= 1) {\n    const entry = entries[index];\n    if (entry?.parentSpan.spanId === activeSpanId) {\n      return entry;\n    }\n  }\n  return entries[entries.length - 1];\n}\nfunction attachNestedAISDKChildPatchEntry(entries, nestedSpan, cleanup) {\n  const activeSpanId = currentSpan().spanId;\n  if (!activeSpanId || activeSpanId === nestedSpan.spanId) {\n    return false;\n  }\n  for (let index = entries.length - 1; index >= 0; index -= 1) {\n    const entry = entries[index];\n    if (entry?.parentSpan.spanId === activeSpanId || entry?.activeSpanIds.has(activeSpanId)) {\n      entry.activeSpanIds.add(nestedSpan.spanId);\n      cleanup.push(() => {\n        entry.activeSpanIds.delete(nestedSpan.spanId);\n      });\n      return true;\n    }\n  }\n  return false;\n}\nfunction shadowActiveAISDKChildPatchEntry(entries, entry, nestedSpan, cleanup) {\n  const activeSpanId = currentSpan().spanId;\n  if (!activeSpanId || activeSpanId === nestedSpan.spanId) {\n    return;\n  }\n  for (let index = entries.length - 1; index >= 0; index -= 1) {\n    const existingEntry = entries[index];\n    if (existingEntry?.parentSpan.spanId === activeSpanId || existingEntry?.activeSpanIds.has(activeSpanId)) {\n      entry.activeSpanIds.add(activeSpanId);\n      cleanup.push(() => {\n        entry.activeSpanIds.delete(activeSpanId);\n      });\n      return;\n    }\n  }\n}\nfunction closeOpenAISDKModelPatchSpans(entry) {\n  for (const span of entry.openSpans) {\n    span.end();\n  }\n  entry.openSpans.clear();\n}\nfunction prepareAISDKChildTracing(params, self, parentSpan, denyOutputPaths, aiSDK, childTracingOptions = {}) {\n  const cleanup = [];\n  const patchedModels = /* @__PURE__ */ new WeakMap();\n  const patchedTools = /* @__PURE__ */ new WeakSet();\n  let modelWrapped = false;\n  const patchModel = (model) => {\n    const resolvedModel = resolveAISDKModel(model, aiSDK);\n    if (!resolvedModel || typeof resolvedModel !== \"object\" || typeof resolvedModel.doGenerate !== \"function\") {\n      return resolvedModel;\n    }\n    if (resolvedModel[BRAINTRUST_WRAPPED_AI_SDK_MODEL]) {\n      modelWrapped = true;\n      return resolvedModel;\n    }\n    const existingWrappedModel = patchedModels.get(resolvedModel);\n    if (existingWrappedModel) {\n      modelWrapped = true;\n      return existingWrappedModel;\n    }\n    modelWrapped = true;\n    const modelRecord = resolvedModel;\n    const entry = {\n      activeSpanIds: /* @__PURE__ */ new Set([parentSpan.spanId]),\n      baseMetadata: buildAISDKChildMetadata(resolvedModel),\n      childTracingOptions,\n      denyOutputPaths,\n      openSpans: /* @__PURE__ */ new Set(),\n      parentSpan\n    };\n    const cleanupModelEntry = (state2, patchedModel) => {\n      closeOpenAISDKModelPatchSpans(entry);\n      const index = state2.entries.indexOf(entry);\n      if (index >= 0) {\n        state2.entries.splice(index, 1);\n      }\n      if (state2.entries.length > 0) {\n        return;\n      }\n      patchedModel.doGenerate = state2.originalDoGenerate;\n      patchedModel.doStream = state2.originalDoStream;\n      delete patchedModel[AUTO_PATCHED_MODEL];\n    };\n    const existingState = modelRecord[AUTO_PATCHED_MODEL];\n    if (existingState) {\n      patchedModels.set(resolvedModel, resolvedModel);\n      if (childTracingOptions.agentOwner && attachNestedAISDKChildPatchEntry(\n        existingState.entries,\n        parentSpan,\n        cleanup\n      )) {\n        return resolvedModel;\n      }\n      if (!childTracingOptions.agentOwner) {\n        shadowActiveAISDKChildPatchEntry(\n          existingState.entries,\n          entry,\n          parentSpan,\n          cleanup\n        );\n      }\n      existingState.entries.push(entry);\n      cleanup.push(() => {\n        cleanupModelEntry(existingState, modelRecord);\n      });\n      return resolvedModel;\n    }\n    const originalDoGenerate = resolvedModel.doGenerate;\n    const originalDoStream = resolvedModel.doStream;\n    const wrappedModel = Object.create(\n      Object.getPrototypeOf(resolvedModel)\n    );\n    Object.defineProperties(\n      wrappedModel,\n      Object.getOwnPropertyDescriptors(resolvedModel)\n    );\n    const wrappedModelRecord = wrappedModel;\n    const state = {\n      entries: [entry],\n      originalDoGenerate,\n      originalDoStream\n    };\n    Object.defineProperty(wrappedModel, AUTO_PATCHED_MODEL, {\n      configurable: true,\n      value: state\n    });\n    wrappedModel.doGenerate = async function doGeneratePatched(callOptions) {\n      const activeEntry = activeAISDKChildPatchEntry(state.entries);\n      if (!activeEntry) {\n        return Reflect.apply(originalDoGenerate, resolvedModel, [callOptions]);\n      }\n      closeOpenAISDKModelPatchSpans(activeEntry);\n      return activeEntry.parentSpan.traced(\n        async (span) => {\n          activeEntry.openSpans.add(span);\n          try {\n            const result = await Reflect.apply(\n              originalDoGenerate,\n              resolvedModel,\n              [callOptions]\n            );\n            const output = processAISDKOutput(\n              result,\n              activeEntry.denyOutputPaths\n            );\n            const metrics = extractTokenMetrics(result);\n            const metadataPayload = buildResolvedMetadataPayload(result);\n            const missingUsageMetadata = buildMissingUsageMetadata(\n              output,\n              metrics,\n              \"ai_sdk_result_missing_usage\"\n            );\n            span.log({\n              output,\n              metrics,\n              ...mergeMetadataPayload(metadataPayload, missingUsageMetadata)\n            });\n            return result;\n          } finally {\n            activeEntry.openSpans.delete(span);\n          }\n        },\n        withSpanInstrumentationName(\n          {\n            name: \"doGenerate\",\n            spanAttributes: {\n              type: \"llm\" /* LLM */\n            },\n            event: buildAISDKModelStartEvent(\n              callOptions,\n              activeEntry.baseMetadata,\n              {\n                workflowAgent: activeEntry.childTracingOptions.workflowAgent\n              }\n            )\n          },\n          INSTRUMENTATION_NAMES.AI_SDK\n        )\n      );\n    };\n    if (originalDoStream) {\n      wrappedModel.doStream = async function doStreamPatched(callOptions) {\n        const activeEntry = activeAISDKChildPatchEntry(state.entries);\n        if (!activeEntry) {\n          return Reflect.apply(originalDoStream, resolvedModel, [callOptions]);\n        }\n        closeOpenAISDKModelPatchSpans(activeEntry);\n        const span = activeEntry.parentSpan.startSpan(\n          withSpanInstrumentationName(\n            {\n              name: \"doStream\",\n              spanAttributes: {\n                type: \"llm\" /* LLM */\n              },\n              event: buildAISDKModelStartEvent(\n                callOptions,\n                activeEntry.baseMetadata,\n                {\n                  workflowAgent: activeEntry.childTracingOptions.workflowAgent\n                }\n              )\n            },\n            INSTRUMENTATION_NAMES.AI_SDK\n          )\n        );\n        activeEntry.openSpans.add(span);\n        const streamStartTime = getCurrentUnixTimestamp();\n        const result = await withCurrent(\n          span,\n          () => Reflect.apply(originalDoStream, resolvedModel, [callOptions])\n        );\n        let firstChunkTime;\n        const output = {};\n        let text = \"\";\n        let reasoning = \"\";\n        const toolCalls2 = [];\n        let object = void 0;\n        let streamSpanEnded = false;\n        const logAndEndStreamSpan = (usageUnavailableReason) => {\n          if (streamSpanEnded) {\n            return;\n          }\n          output.text = text;\n          output.reasoning = reasoning;\n          output.toolCalls = toolCalls2;\n          if (object !== void 0) {\n            output.object = object;\n          }\n          const metrics = extractTokenMetrics(output);\n          if (firstChunkTime !== void 0 && !activeEntry.childTracingOptions.workflowAgent) {\n            metrics.time_to_first_token = Math.max(\n              firstChunkTime - streamStartTime,\n              1e-6\n            );\n          }\n          const metadataPayload = buildResolvedMetadataPayload(\n            output\n          );\n          const missingUsageMetadata = usageUnavailableReason ? { usage_unavailable_reason: usageUnavailableReason } : buildMissingUsageMetadata(\n            output,\n            metrics,\n            \"ai_sdk_result_missing_usage\"\n          );\n          span.log({\n            output: processAISDKOutput(\n              output,\n              activeEntry.denyOutputPaths\n            ),\n            metrics,\n            ...mergeMetadataPayload(metadataPayload, missingUsageMetadata)\n          });\n          activeEntry.openSpans.delete(span);\n          span.end();\n          streamSpanEnded = true;\n        };\n        const transformStream = new TransformStream({\n          transform(chunk, controller) {\n            if (firstChunkTime === void 0 && isAISDKContentStreamChunk(chunk)) {\n              firstChunkTime = getCurrentUnixTimestamp();\n            }\n            switch (chunk.type) {\n              case \"text-delta\":\n                text += extractTextDelta(chunk);\n                break;\n              case \"reasoning-delta\":\n                if (chunk.delta) {\n                  reasoning += chunk.delta;\n                } else if (chunk.text) {\n                  reasoning += chunk.text;\n                }\n                break;\n              case \"tool-call\":\n                toolCalls2.push(chunk);\n                break;\n              case \"object\":\n                object = chunk.object;\n                break;\n              case \"raw\":\n                if (chunk.rawValue) {\n                  const rawVal = chunk.rawValue;\n                  if (rawVal.delta?.content) {\n                    text += rawVal.delta.content;\n                  } else if (rawVal.choices?.[0]?.delta?.content) {\n                    text += rawVal.choices[0].delta.content;\n                  } else if (typeof rawVal.text === \"string\") {\n                    text += rawVal.text;\n                  } else if (typeof rawVal.content === \"string\") {\n                    text += rawVal.content;\n                  }\n                }\n                break;\n              case \"finish\":\n                output.finishReason = chunk.finishReason;\n                output.usage = chunk.usage;\n                logAndEndStreamSpan();\n                break;\n            }\n            controller.enqueue(chunk);\n          },\n          flush() {\n            logAndEndStreamSpan(\"ai_sdk_stream_finished_without_usage\");\n          }\n        });\n        return {\n          ...result,\n          stream: result.stream.pipeThrough(transformStream)\n        };\n      };\n    }\n    cleanup.push(() => {\n      cleanupModelEntry(state, wrappedModelRecord);\n    });\n    patchedModels.set(resolvedModel, wrappedModel);\n    patchedModels.set(wrappedModel, wrappedModel);\n    return wrappedModel;\n  };\n  const patchTool = (tool, name) => {\n    if (tool == null || typeof tool !== \"object\" || !(\"execute\" in tool) || typeof tool.execute !== \"function\" || patchedTools.has(tool)) {\n      return;\n    }\n    patchedTools.add(tool);\n    const toolRecord = tool;\n    const entry = {\n      activeSpanIds: /* @__PURE__ */ new Set([parentSpan.spanId]),\n      childTracingOptions,\n      name,\n      parentSpan\n    };\n    const cleanupToolEntry = (state2) => {\n      const index = state2.entries.indexOf(entry);\n      if (index >= 0) {\n        state2.entries.splice(index, 1);\n      }\n      if (state2.entries.length > 0) {\n        return;\n      }\n      tool.execute = state2.originalExecute;\n      delete toolRecord[AUTO_PATCHED_TOOL];\n    };\n    const existingState = toolRecord[AUTO_PATCHED_TOOL];\n    if (existingState) {\n      if (childTracingOptions.agentOwner && attachNestedAISDKChildPatchEntry(\n        existingState.entries,\n        parentSpan,\n        cleanup\n      )) {\n        return;\n      }\n      if (!childTracingOptions.agentOwner) {\n        shadowActiveAISDKChildPatchEntry(\n          existingState.entries,\n          entry,\n          parentSpan,\n          cleanup\n        );\n      }\n      existingState.entries.push(entry);\n      cleanup.push(() => {\n        cleanupToolEntry(existingState);\n      });\n      return;\n    }\n    const originalExecute = toolRecord.execute;\n    const state = {\n      entries: [entry],\n      originalExecute\n    };\n    toolRecord[AUTO_PATCHED_TOOL] = state;\n    tool.execute = function executePatched(...args) {\n      const activeEntry = activeAISDKChildPatchEntry(state.entries);\n      const result = Reflect.apply(originalExecute, this, args);\n      if (!activeEntry) {\n        return result;\n      }\n      const executionOptions = args[1];\n      const toolCallId = isObject(executionOptions) ? executionOptions.toolCallId : void 0;\n      const toolInput = {\n        input: serializeToolExecutionInput(args),\n        ...typeof toolCallId === \"string\" ? { metadata: { toolCallId } } : {}\n      };\n      if (isAsyncGenerator(result)) {\n        return (async function* () {\n          const span = activeEntry.parentSpan.startSpan(\n            withSpanInstrumentationName(\n              {\n                name: activeEntry.name,\n                spanAttributes: {\n                  type: \"tool\" /* TOOL */\n                }\n              },\n              INSTRUMENTATION_NAMES.AI_SDK\n            )\n          );\n          span.log(toolInput);\n          try {\n            let lastValue;\n            for await (const value of result) {\n              lastValue = value;\n              yield value;\n            }\n            span.log({ output: lastValue });\n          } catch (error) {\n            span.log({ error: toLoggedError(error) });\n            throw error;\n          } finally {\n            span.end();\n          }\n        })();\n      }\n      return activeEntry.parentSpan.traced(\n        async (span) => {\n          span.log(toolInput);\n          const awaitedResult = await result;\n          span.log({ output: awaitedResult });\n          return awaitedResult;\n        },\n        withSpanInstrumentationName(\n          {\n            name: activeEntry.name,\n            spanAttributes: {\n              type: \"tool\" /* TOOL */\n            }\n          },\n          INSTRUMENTATION_NAMES.AI_SDK\n        )\n      );\n    };\n    cleanup.push(() => {\n      cleanupToolEntry(state);\n    });\n  };\n  const patchTools = (tools) => {\n    if (!tools) {\n      return;\n    }\n    const inferName = (tool, fallback2) => tool && (tool.name || tool.toolName || tool.id) || fallback2;\n    if (Array.isArray(tools)) {\n      tools.forEach(\n        (tool, index) => patchTool(tool, inferName(tool, `tool[${index}]`))\n      );\n      return;\n    }\n    for (const [key, tool] of Object.entries(tools)) {\n      patchTool(tool, key);\n    }\n  };\n  if (params && typeof params === \"object\") {\n    const originalParamModel = params.model;\n    const patchedParamModel = patchModel(originalParamModel);\n    if (patchedParamModel && patchedParamModel !== originalParamModel) {\n      params.model = patchedParamModel;\n      cleanup.push(() => {\n        params.model = originalParamModel;\n      });\n    }\n    patchTools(params.tools);\n  }\n  if (self && typeof self === \"object\") {\n    const selfRecord = self;\n    if (selfRecord.model !== void 0) {\n      const originalSelfModel = selfRecord.model;\n      const patchedSelfModel = patchModel(originalSelfModel);\n      if (patchedSelfModel && patchedSelfModel !== originalSelfModel) {\n        selfRecord.model = patchedSelfModel;\n        cleanup.push(() => {\n          selfRecord.model = originalSelfModel;\n        });\n      }\n    }\n    if (selfRecord.tools !== void 0) {\n      patchTools(selfRecord.tools);\n    }\n    if (selfRecord.settings && typeof selfRecord.settings === \"object\") {\n      if (selfRecord.settings.model !== void 0) {\n        const originalSettingsModel = selfRecord.settings.model;\n        const patchedSettingsModel = patchModel(originalSettingsModel);\n        if (patchedSettingsModel && patchedSettingsModel !== originalSettingsModel) {\n          selfRecord.settings.model = patchedSettingsModel;\n          cleanup.push(() => {\n            if (selfRecord.settings) {\n              selfRecord.settings.model = originalSettingsModel;\n            }\n          });\n        }\n      }\n      if (selfRecord.settings.tools !== void 0) {\n        patchTools(selfRecord.settings.tools);\n      }\n    }\n  }\n  return {\n    cleanup: cleanup.length > 0 ? () => {\n      while (cleanup.length > 0) {\n        cleanup.pop()?.();\n      }\n    } : void 0,\n    modelWrapped\n  };\n}\nfunction finalizeAISDKChildTracing(event) {\n  const cleanup = event?.__braintrust_ai_sdk_cleanup;\n  if (event && typeof cleanup === \"function\") {\n    cleanup();\n    delete event.__braintrust_ai_sdk_cleanup;\n  }\n}\nfunction extractAISDKStreamPart(chunk) {\n  if (!isObject(chunk) || !isObject(chunk.part)) {\n    return chunk;\n  }\n  return chunk.part;\n}\nfunction stringContent(value) {\n  return typeof value === \"string\" && value.length > 0 ? value : void 0;\n}\nfunction rawValueHasAISDKContent(value) {\n  if (value === void 0 || value === null) {\n    return false;\n  }\n  if (typeof value === \"string\") {\n    return value.length > 0;\n  }\n  if (!isObject(value)) {\n    return true;\n  }\n  const delta = value.delta;\n  if (stringContent(value.content) || stringContent(value.text) || stringContent(value.delta) || stringContent(value.arguments) || stringContent(value.partial_json) || isObject(delta) && (stringContent(delta.content) || stringContent(delta.text) || stringContent(delta.arguments) || stringContent(delta.partial_json) || stringContent(delta.thinking)) || Array.isArray(value.choices) && value.choices.some((choice) => {\n    if (!isObject(choice) || !isObject(choice.delta)) {\n      return false;\n    }\n    const choiceDelta = choice.delta;\n    if (stringContent(choiceDelta.content) || stringContent(choiceDelta.text)) {\n      return true;\n    }\n    if (isObject(choiceDelta.function_call) && stringContent(choiceDelta.function_call.arguments)) {\n      return true;\n    }\n    return Array.isArray(choiceDelta.tool_calls) && choiceDelta.tool_calls.some(\n      (toolCall) => isObject(toolCall) && isObject(toolCall.function) && stringContent(toolCall.function.arguments)\n    );\n  })) {\n    return true;\n  }\n  return false;\n}\nfunction isAISDKContentStreamChunk(chunk) {\n  const part = extractAISDKStreamPart(chunk);\n  if (typeof part === \"string\") {\n    return part.length > 0;\n  }\n  if (!isObject(part) || typeof part.type !== \"string\") {\n    return false;\n  }\n  switch (part.type) {\n    case \"text-delta\":\n      return stringContent(part.textDelta) !== void 0 || stringContent(part.delta) !== void 0 || stringContent(part.text) !== void 0 || stringContent(part.content) !== void 0;\n    case \"reasoning-delta\":\n      return stringContent(part.delta) !== void 0 || stringContent(part.text) !== void 0 || stringContent(part.content) !== void 0;\n    case \"tool-call\":\n    case \"object\":\n    case \"file\":\n      return true;\n    case \"tool-input-delta\":\n    case \"tool-call-delta\":\n      return stringContent(part.argsTextDelta) !== void 0 || stringContent(part.inputTextDelta) !== void 0 || stringContent(part.delta) !== void 0 || stringContent(part.text) !== void 0 || stringContent(part.content) !== void 0;\n    case \"raw\":\n      return rawValueHasAISDKContent(part.rawValue);\n    default:\n      return false;\n  }\n}\nfunction isAISDKContentAsyncIterableChunk(chunk) {\n  if (isAISDKContentStreamChunk(chunk)) {\n    return true;\n  }\n  const part = extractAISDKStreamPart(chunk);\n  return isObject(part) && typeof part.type !== \"string\";\n}\nfunction patchAISDKStreamingResult(args) {\n  const {\n    defaultDenyOutputPaths,\n    endEvent,\n    forceTopLevelMetrics,\n    onComplete,\n    onCancel,\n    onError,\n    result,\n    resolvePromiseUsage,\n    span,\n    startTime,\n    transformOutput\n  } = args;\n  if (!result || typeof result !== \"object\") {\n    return false;\n  }\n  const resultRecord = result;\n  attachKnownResultPromiseHandlers(resultRecord);\n  let finalized = false;\n  const finalize = (outcome) => {\n    if (finalized) {\n      return;\n    }\n    finalized = true;\n    try {\n      finalizeAISDKChildTracing(endEvent);\n    } catch (error) {\n      debugLogger.error(\"Error finalizing AI SDK child tracing:\", error);\n    }\n    try {\n      span.end();\n    } catch (error) {\n      debugLogger.error(\"Error ending AI SDK streaming span:\", error);\n    }\n    if (outcome && \"error\" in outcome) {\n      try {\n        onError?.(outcome.error);\n      } catch (error) {\n        debugLogger.error(\"Error in AI SDK streaming error hook:\", error);\n      }\n    } else if (outcome) {\n      try {\n        onComplete?.(outcome);\n      } catch (error) {\n        debugLogger.error(\"Error in AI SDK streaming completion hook:\", error);\n      }\n    } else {\n      try {\n        onCancel?.();\n      } catch (error) {\n        debugLogger.error(\n          \"Error in AI SDK streaming cancellation hook:\",\n          error\n        );\n      }\n    }\n  };\n  let outputLogged = false;\n  const logStreamingOutput = async (firstChunkTime) => {\n    if (outputLogged) {\n      return;\n    }\n    outputLogged = true;\n    try {\n      const metrics = forceTopLevelMetrics ? await extractResolvedAISDKTokenMetrics(result) : extractTopLevelAISDKMetrics(result, endEvent);\n      if (resolvePromiseUsage && !forceTopLevelMetrics) {\n        try {\n          const resultRecord2 = result;\n          const pendingUsage = resultRecord2.totalUsage ?? resultRecord2.usage;\n          if (isPromiseLike(pendingUsage)) {\n            const usage = await Promise.resolve(pendingUsage);\n            if (isObject(usage)) {\n              Object.assign(\n                metrics,\n                extractTokenMetrics({ usage })\n              );\n            }\n          }\n        } catch {\n        }\n      }\n      if (metrics.time_to_first_token === void 0 && firstChunkTime !== void 0) {\n        metrics.time_to_first_token = firstChunkTime - startTime;\n      }\n      const processedOutput = await processAISDKStreamingOutput(\n        result,\n        resolveDenyOutputPaths(endEvent, defaultDenyOutputPaths)\n      );\n      const output = transformOutput ? transformOutput(processedOutput) : processedOutput;\n      const metadata = buildResolvedMetadataPayload(result).metadata;\n      try {\n        span.log({\n          output,\n          ...metadata ? { metadata } : {},\n          metrics\n        });\n      } catch (error) {\n        debugLogger.error(\"Error logging AI SDK streaming output:\", error);\n      }\n      finalize({ metrics, output });\n    } catch (error) {\n      const loggedError2 = toLoggedError(error);\n      try {\n        span.log({ error: loggedError2 });\n      } catch (loggingError) {\n        debugLogger.error(\n          \"Error logging AI SDK streaming failure:\",\n          loggingError\n        );\n      }\n      finalize({\n        error: error instanceof Error ? error : new Error(String(loggedError2))\n      });\n    }\n  };\n  const createAsyncIterableHooks = () => {\n    let firstChunkTime;\n    return {\n      onChunk: (chunk) => {\n        if (firstChunkTime === void 0 && isAISDKContentAsyncIterableChunk(chunk)) {\n          firstChunkTime = getCurrentUnixTimestamp();\n        }\n      },\n      onComplete: async () => {\n        await logStreamingOutput(firstChunkTime);\n      },\n      onError: (error) => {\n        if (!outputLogged) {\n          outputLogged = true;\n          try {\n            span.log({ error });\n          } catch (loggingError) {\n            debugLogger.error(\n              \"Error logging AI SDK stream failure:\",\n              loggingError\n            );\n          }\n        }\n        finalize({ error });\n      },\n      onCancel: finalize\n    };\n  };\n  const patchAsyncIterable = (stream) => isReadableStreamLike(stream) ? createPatchedReadableStream(stream, createAsyncIterableHooks()) : createPatchedAsyncIterable(stream, createAsyncIterableHooks());\n  const patchAsyncIterableField = (field) => {\n    let descriptorOwner = resultRecord;\n    let descriptor;\n    while (descriptorOwner) {\n      descriptor = Object.getOwnPropertyDescriptor(descriptorOwner, field);\n      if (descriptor) {\n        break;\n      }\n      descriptorOwner = Object.getPrototypeOf(descriptorOwner);\n    }\n    if (!descriptor || descriptorOwner === resultRecord && !descriptor.configurable) {\n      return false;\n    }\n    if (\"value\" in descriptor) {\n      if (!isAsyncIterable(descriptor.value)) {\n        return false;\n      }\n      try {\n        Object.defineProperty(resultRecord, field, {\n          configurable: descriptorOwner === resultRecord ? descriptor.configurable : true,\n          enumerable: descriptor.enumerable,\n          value: patchAsyncIterable(descriptor.value),\n          writable: descriptor.writable\n        });\n        return true;\n      } catch {\n        return false;\n      }\n    }\n    if (typeof descriptor.get !== \"function\") {\n      return false;\n    }\n    const originalGet = descriptor.get;\n    const originalSet = descriptor.set;\n    try {\n      Object.defineProperty(resultRecord, field, {\n        configurable: descriptorOwner === resultRecord ? descriptor.configurable : true,\n        enumerable: descriptor.enumerable,\n        get() {\n          const stream = originalGet.call(this);\n          return isAsyncIterable(stream) ? patchAsyncIterable(stream) : stream;\n        },\n        ...originalSet ? {\n          set(value) {\n            originalSet.call(this, value);\n          }\n        } : {}\n      });\n      return true;\n    } catch {\n      return false;\n    }\n  };\n  let patched = false;\n  if (isReadableStreamLike(resultRecord.baseStream)) {\n    let firstChunkTime;\n    const transformedBaseStream = resultRecord.baseStream.pipeThrough(\n      new TransformStream({\n        transform(chunk, controller) {\n          if (firstChunkTime === void 0 && isAISDKContentStreamChunk(chunk)) {\n            firstChunkTime = getCurrentUnixTimestamp();\n          }\n          controller.enqueue(chunk);\n        },\n        async flush() {\n          await logStreamingOutput(firstChunkTime);\n        }\n      })\n    );\n    const reader = transformedBaseStream.getReader();\n    const wrappedBaseStream = new ReadableStream({\n      async pull(controller) {\n        try {\n          const { done, value } = await reader.read();\n          if (done) {\n            controller.close();\n            return;\n          }\n          controller.enqueue(value);\n        } catch (error) {\n          const loggedError2 = toLoggedError(error);\n          try {\n            span.log({ error: loggedError2 });\n          } catch (loggingError) {\n            debugLogger.error(\n              \"Error logging AI SDK base stream failure:\",\n              loggingError\n            );\n          }\n          finalize({\n            error: error instanceof Error ? error : new Error(String(loggedError2))\n          });\n          controller.error(error);\n        }\n      },\n      async cancel(reason) {\n        try {\n          finalize();\n        } finally {\n          await reader.cancel(reason);\n        }\n      }\n    });\n    Object.defineProperty(resultRecord, \"baseStream\", {\n      configurable: true,\n      enumerable: true,\n      value: wrappedBaseStream,\n      writable: true\n    });\n    patched = true;\n  }\n  for (const field of [\n    \"partialObjectStream\",\n    \"textStream\",\n    \"fullStream\",\n    \"stream\"\n  ]) {\n    patched = patchAsyncIterableField(field) || patched;\n  }\n  return patched;\n}\nfunction attachKnownResultPromiseHandlers(result) {\n  const promiseLikeFields = [\n    \"content\",\n    \"text\",\n    \"object\",\n    \"value\",\n    \"values\",\n    \"finishReason\",\n    \"embedding\",\n    \"embeddings\",\n    \"usage\",\n    \"totalUsage\",\n    \"responses\",\n    \"steps\"\n  ];\n  for (const field of promiseLikeFields) {\n    try {\n      if (!(field in result)) {\n        continue;\n      }\n      const value = result[field];\n      if (isPromiseLike(value)) {\n        void Promise.resolve(value).catch(() => {\n        });\n      }\n    } catch {\n    }\n  }\n}\nfunction isReadableStreamLike(value) {\n  return value != null && typeof value === \"object\" && typeof value.getReader === \"function\" && typeof value.pipeThrough === \"function\";\n}\nfunction createPatchedReadableStream(stream, hooks) {\n  let reader;\n  let completed = false;\n  return new ReadableStream({\n    async pull(controller) {\n      reader ??= stream.getReader();\n      try {\n        const { done, value } = await reader.read();\n        if (done) {\n          completed = true;\n          await hooks.onComplete();\n          controller.close();\n          return;\n        }\n        hooks.onChunk(value);\n        controller.enqueue(value);\n      } catch (error) {\n        completed = true;\n        hooks.onError(\n          error instanceof Error ? error : new Error(String(error))\n        );\n        controller.error(error);\n      }\n    },\n    async cancel(reason) {\n      if (!completed) {\n        completed = true;\n        try {\n          await hooks.onCancel?.();\n        } catch {\n        }\n      }\n      if (reader) {\n        await reader.cancel(reason);\n      } else if (stream.cancel) {\n        await stream.cancel(reason);\n      }\n    }\n  });\n}\nfunction createPatchedAsyncIterable(stream, hooks) {\n  return {\n    async *[Symbol.asyncIterator]() {\n      let completed = false;\n      try {\n        for await (const chunk of stream) {\n          hooks.onChunk(chunk);\n          yield chunk;\n        }\n        completed = true;\n        await hooks.onComplete();\n      } catch (error) {\n        completed = true;\n        hooks.onError(\n          error instanceof Error ? error : new Error(String(error))\n        );\n        throw error;\n      } finally {\n        if (!completed) {\n          try {\n            await hooks.onCancel?.();\n          } catch {\n          }\n        }\n      }\n    }\n  };\n}\nasync function processAISDKStreamingOutput(result, denyOutputPaths) {\n  const output = processAISDKOutput(result, denyOutputPaths);\n  if (!output || typeof output !== \"object\") {\n    return output;\n  }\n  const outputRecord = output;\n  const isObjectStreamingResult = result != null && typeof result === \"object\" && \"partialObjectStream\" in result;\n  try {\n    if (!isObjectStreamingResult && \"text\" in result) {\n      const resolvedText = await Promise.resolve(result.text);\n      if (typeof resolvedText === \"string\") {\n        outputRecord.text = resolvedText;\n      }\n    }\n  } catch {\n  }\n  try {\n    if (\"object\" in result) {\n      const resolvedObject = await Promise.resolve(result.object);\n      if (resolvedObject !== void 0) {\n        outputRecord.object = resolvedObject;\n      }\n    }\n  } catch {\n  }\n  try {\n    if (\"finishReason\" in result) {\n      const resolvedFinishReason = await Promise.resolve(result.finishReason);\n      if (resolvedFinishReason !== void 0) {\n        outputRecord.finishReason = resolvedFinishReason;\n      }\n    }\n  } catch {\n  }\n  return outputRecord;\n}\nfunction buildAISDKChildMetadata(model) {\n  const { model: modelId, provider } = serializeModelWithProvider(model);\n  return {\n    ...modelId ? { model: modelId } : {},\n    ...provider ? { provider } : {},\n    braintrust: {\n      integration_name: \"ai-sdk\",\n      sdk_language: \"typescript\"\n    }\n  };\n}\nfunction buildResolvedMetadataPayload(result) {\n  const gatewayInfo = extractGatewayRoutingInfo(result);\n  const metadata = {};\n  if (gatewayInfo?.provider) {\n    metadata.provider = gatewayInfo.provider;\n  }\n  if (gatewayInfo?.model) {\n    metadata.model = gatewayInfo.model;\n  }\n  let finishReason;\n  try {\n    finishReason = result.finishReason;\n  } catch {\n    finishReason = void 0;\n  }\n  if (isPromiseLike(finishReason)) {\n    void Promise.resolve(finishReason).catch(() => {\n    });\n  } else if (finishReason !== void 0) {\n    metadata.finish_reason = finishReason;\n  }\n  return Object.keys(metadata).length > 0 ? { metadata } : {};\n}\nfunction mergeMetadataPayload(metadataPayload, extraMetadata) {\n  if (!extraMetadata || Object.keys(extraMetadata).length === 0) {\n    return metadataPayload;\n  }\n  return {\n    metadata: {\n      ...metadataPayload.metadata ?? {},\n      ...extraMetadata\n    }\n  };\n}\nfunction buildMissingUsageMetadata(output, metrics, reason) {\n  if (!hasLoggedOutput(output) || hasTokenUsageMetrics(metrics)) {\n    return void 0;\n  }\n  return { usage_unavailable_reason: reason };\n}\nfunction hasLoggedOutput(output) {\n  if (output === null || output === void 0) {\n    return false;\n  }\n  if (Array.isArray(output)) {\n    return output.length > 0;\n  }\n  if (typeof output === \"object\") {\n    return Object.keys(output).length > 0;\n  }\n  return true;\n}\nfunction hasTokenUsageMetrics(metrics) {\n  return Object.keys(metrics).some(\n    (key) => key !== \"estimated_cost\" && key !== \"time_to_first_token\"\n  );\n}\nfunction resolveAISDKModel(model, aiSDK) {\n  if (typeof model !== \"string\") {\n    return model;\n  }\n  const provider = globalThis.AI_SDK_DEFAULT_PROVIDER ?? aiSDK?.gateway ?? null;\n  if (provider && typeof provider.languageModel === \"function\") {\n    return provider.languageModel(model);\n  }\n  return model;\n}\nfunction extractTextDelta(chunk) {\n  if (typeof chunk.textDelta === \"string\") return chunk.textDelta;\n  if (typeof chunk.delta === \"string\") return chunk.delta;\n  if (typeof chunk.text === \"string\") return chunk.text;\n  if (typeof chunk.content === \"string\") return chunk.content;\n  return \"\";\n}\nfunction isAsyncGenerator(value) {\n  return value != null && typeof value === \"object\" && typeof value[Symbol.asyncIterator] === \"function\" && typeof value.next === \"function\" && typeof value.return === \"function\" && typeof value.throw === \"function\";\n}\nfunction processAISDKOutput(output, denyOutputPaths) {\n  if (!output) return output;\n  const merged = extractSerializableOutputFields(output);\n  const deleteOutputPaths = denyOutputPaths.filter(\n    (path) => path.toLowerCase().endsWith(\"headers\")\n  );\n  const sanitized = omit(merged, denyOutputPaths, deleteOutputPaths);\n  for (const path of TRANSPORT_PAYLOAD_ROOT_PATHS) {\n    const stack = [{ obj: sanitized, keys: parsePath(path) }];\n    while (stack.length > 0) {\n      const entry = stack.pop();\n      if (!entry || entry.keys.length === 0) {\n        continue;\n      }\n      const firstKey = entry.keys[0];\n      const remainingKeys = entry.keys.slice(1);\n      if (firstKey === \"[]\") {\n        if (Array.isArray(entry.obj)) {\n          for (const item of entry.obj) {\n            stack.push({\n              obj: item,\n              keys: remainingKeys\n            });\n          }\n        }\n        continue;\n      }\n      if (!entry.obj || typeof entry.obj !== \"object\" || !(firstKey in entry.obj)) {\n        continue;\n      }\n      const record = entry.obj;\n      if (remainingKeys.length === 0) {\n        record[firstKey] = sanitizeAISDKMetadataValue(record[firstKey]);\n        continue;\n      }\n      stack.push({\n        obj: record[firstKey],\n        keys: remainingKeys\n      });\n    }\n  }\n  return normalizeAISDKLoggedOutput(sanitized);\n}\nfunction processAISDKGenerateImageOutput(output, denyOutputPaths) {\n  if (!output || typeof output !== \"object\") {\n    return output;\n  }\n  const summarized = {};\n  for (const field of [\n    \"usage\",\n    \"warnings\",\n    \"providerMetadata\",\n    \"experimental_providerMetadata\",\n    \"responses\"\n  ]) {\n    const value = safeSerializableFieldRead(output, field);\n    if (value !== void 0 && isSerializableOutputValue(value)) {\n      summarized[field] = value;\n    }\n  }\n  const images = safeSerializableFieldRead(output, \"images\");\n  const image = safeSerializableFieldRead(output, \"image\");\n  const generatedFiles = Array.isArray(images) && images.length > 0 ? images : image !== void 0 ? [image] : [];\n  const loggedOutput = normalizeAISDKLoggedOutput(\n    omit(summarized, denyOutputPaths)\n  );\n  if (generatedFiles.length > 0) {\n    loggedOutput.images = generatedFiles.map(\n      (file, index) => convertAISDKGeneratedFileToAttachment(file, index)\n    );\n  }\n  return loggedOutput;\n}\nfunction convertAISDKGeneratedFileToAttachment(file, index) {\n  if (!file || typeof file !== \"object\") {\n    return file;\n  }\n  const generatedFile = file;\n  const generatedMediaType = safeSerializableFieldRead(\n    generatedFile,\n    \"mediaType\"\n  );\n  const mediaType = typeof generatedMediaType === \"string\" ? generatedMediaType : \"application/octet-stream\";\n  const data = safeSerializableFieldRead(generatedFile, \"base64\") ?? safeSerializableFieldRead(generatedFile, \"uint8Array\");\n  const blob = convertDataToBlob(data, mediaType);\n  if (blob) {\n    return new Attachment({\n      data: blob,\n      filename: `generated_image_${index}.${getExtensionFromMediaType(mediaType)}`,\n      contentType: mediaType\n    });\n  }\n  return file;\n}\nfunction processAISDKEmbeddingOutput(output, denyOutputPaths) {\n  if (!output || typeof output !== \"object\") {\n    return output;\n  }\n  const summarized = {};\n  const whitelistedFields = [\n    \"usage\",\n    \"totalUsage\",\n    \"warnings\",\n    \"providerMetadata\",\n    \"experimental_providerMetadata\"\n  ];\n  for (const field of whitelistedFields) {\n    const value = safeSerializableFieldRead(output, field);\n    if (value !== void 0 && isSerializableOutputValue(value)) {\n      summarized[field] = value;\n    }\n  }\n  const embedding = safeSerializableFieldRead(output, \"embedding\");\n  if (Array.isArray(embedding)) {\n    summarized.embedding_length = embedding.length;\n  }\n  const embeddings = safeSerializableFieldRead(output, \"embeddings\");\n  if (Array.isArray(embeddings)) {\n    summarized.embedding_count = embeddings.length;\n    const firstEmbedding = embeddings.find((item) => Array.isArray(item));\n    if (Array.isArray(firstEmbedding)) {\n      summarized.embedding_length = firstEmbedding.length;\n    }\n  }\n  return normalizeAISDKLoggedOutput(omit(summarized, denyOutputPaths));\n}\nfunction processAISDKRerankOutput(output, _denyOutputPaths) {\n  if (!output || typeof output !== \"object\") {\n    return output;\n  }\n  const ranking = safeSerializableFieldRead(output, \"ranking\");\n  if (Array.isArray(ranking)) {\n    return ranking.slice(0, 100).map((item) => {\n      const entry = item && typeof item === \"object\" ? item : void 0;\n      return {\n        index: typeof entry?.originalIndex === \"number\" ? entry.originalIndex : void 0,\n        relevance_score: typeof entry?.score === \"number\" ? entry.score : void 0\n      };\n    });\n  }\n  return void 0;\n}\nfunction safeSerializableFieldRead(obj, field) {\n  try {\n    const value = obj?.[field];\n    if (isPromiseLike(value)) {\n      void Promise.resolve(value).catch(() => {\n      });\n      return void 0;\n    }\n    return value;\n  } catch {\n    return void 0;\n  }\n}\nfunction aggregateAISDKChunks(chunks, _result, endEvent) {\n  const lastChunk = chunks[chunks.length - 1];\n  const output = {};\n  let metrics = {};\n  let metadata;\n  if (lastChunk) {\n    metrics = hasModelChildTracing(endEvent) ? {} : extractTokenMetrics(lastChunk);\n    metadata = buildResolvedMetadataPayload(lastChunk).metadata;\n    const text = safeSerializableFieldRead(lastChunk, \"text\");\n    if (text !== void 0) {\n      output.text = text;\n    }\n    const objectValue = safeSerializableFieldRead(lastChunk, \"object\");\n    if (objectValue !== void 0) {\n      output.object = objectValue;\n    }\n    const finishReason = safeSerializableFieldRead(lastChunk, \"finishReason\");\n    if (finishReason !== void 0) {\n      output.finishReason = finishReason;\n    }\n    const toolCalls2 = safeSerializableFieldRead(lastChunk, \"toolCalls\");\n    if (toolCalls2 !== void 0) {\n      output.toolCalls = toolCalls2;\n    }\n  }\n  finalizeAISDKChildTracing(endEvent);\n  return { output, metrics, metadata };\n}\nfunction extractGetterValues(obj) {\n  const getterValues = {};\n  const getterNames = [\n    \"content\",\n    \"messages\",\n    \"text\",\n    \"output\",\n    \"object\",\n    \"value\",\n    \"values\",\n    \"embedding\",\n    \"embeddings\",\n    \"finishReason\",\n    \"usage\",\n    \"totalUsage\",\n    \"toolCalls\",\n    \"toolResults\",\n    \"warnings\",\n    \"responses\",\n    \"experimental_providerMetadata\",\n    \"providerMetadata\",\n    \"rawResponse\",\n    \"response\"\n  ];\n  for (const name of getterNames) {\n    try {\n      if (!obj || !(name in obj)) {\n        continue;\n      }\n      const value = obj[name];\n      if (isPromiseLike(value)) {\n        void Promise.resolve(value).catch(() => {\n        });\n        continue;\n      }\n      if (isSerializableOutputValue(value)) {\n        getterValues[name] = value;\n      }\n    } catch {\n    }\n  }\n  return getterValues;\n}\nfunction extractSerializableOutputFields(output) {\n  const serialized = {};\n  const directFieldNames = [\n    \"messages\",\n    \"steps\",\n    \"output\",\n    \"request\",\n    \"responseMessages\",\n    \"warnings\",\n    \"rawResponse\",\n    \"response\",\n    \"providerMetadata\",\n    \"experimental_providerMetadata\"\n  ];\n  for (const name of directFieldNames) {\n    try {\n      const value = output?.[name];\n      if (isPromiseLike(value)) {\n        void Promise.resolve(value).catch(() => {\n        });\n        continue;\n      }\n      if (isSerializableOutputValue(value)) {\n        serialized[name] = value;\n      }\n    } catch {\n    }\n  }\n  return {\n    ...serialized,\n    ...extractGetterValues(output)\n  };\n}\nfunction isSerializableOutputValue(value) {\n  if (typeof value === \"function\") {\n    return false;\n  }\n  if (isPromiseLike(value)) {\n    return false;\n  }\n  if (value && typeof value === \"object\" && typeof value.getReader === \"function\") {\n    return false;\n  }\n  if (value && typeof value === \"object\" && typeof value[Symbol.asyncIterator] === \"function\") {\n    return false;\n  }\n  return true;\n}\nfunction serializeModelWithProvider(model) {\n  const modelId = typeof model === \"string\" ? model : model?.modelId;\n  const explicitProvider = typeof model === \"object\" ? model?.provider : void 0;\n  if (!modelId) {\n    return { model: modelId, provider: explicitProvider };\n  }\n  const parsed = parseGatewayModelString(modelId);\n  return {\n    model: parsed.model,\n    provider: explicitProvider === \"gateway\" ? parsed.provider || explicitProvider : explicitProvider || parsed.provider\n  };\n}\nfunction parseGatewayModelString(modelString) {\n  if (!modelString || typeof modelString !== \"string\") {\n    return { model: modelString };\n  }\n  const slashIndex = modelString.indexOf(\"/\");\n  if (slashIndex > 0 && slashIndex < modelString.length - 1) {\n    return {\n      provider: modelString.substring(0, slashIndex),\n      model: modelString.substring(slashIndex + 1)\n    };\n  }\n  return { model: modelString };\n}\nfunction extractGatewayRoutingInfo(result) {\n  const steps = safeSerializableFieldRead(result, \"steps\");\n  if (Array.isArray(steps) && steps.length > 0) {\n    const routing2 = steps[0]?.providerMetadata?.gateway?.routing;\n    if (routing2) {\n      return {\n        provider: routing2.resolvedProvider || routing2.finalProvider,\n        model: routing2.resolvedProviderApiModelId\n      };\n    }\n  }\n  const providerMetadata = safeSerializableFieldRead(\n    result,\n    \"providerMetadata\"\n  );\n  const routing = providerMetadata?.gateway?.routing;\n  if (routing) {\n    return {\n      provider: routing.resolvedProvider || routing.finalProvider,\n      model: routing.resolvedProviderApiModelId\n    };\n  }\n  return null;\n}\nfunction deepCopy(obj) {\n  return JSON.parse(JSON.stringify(obj));\n}\nfunction parsePath(path) {\n  const keys = [];\n  let current = \"\";\n  for (let i = 0; i < path.length; i++) {\n    const char = path[i];\n    if (char === \".\") {\n      if (current) {\n        keys.push(current);\n        current = \"\";\n      }\n    } else if (char === \"[\") {\n      if (current) {\n        keys.push(current);\n        current = \"\";\n      }\n      let bracketContent = \"\";\n      i++;\n      while (i < path.length && path[i] !== \"]\") {\n        bracketContent += path[i];\n        i++;\n      }\n      if (bracketContent === \"\") {\n        keys.push(\"[]\");\n      } else {\n        const index = parseInt(bracketContent, 10);\n        keys.push(isNaN(index) ? bracketContent : index);\n      }\n    } else {\n      current += char;\n    }\n  }\n  if (current) {\n    keys.push(current);\n  }\n  return keys;\n}\nfunction omitAtPath(obj, keys, deleteLeaf = false) {\n  if (keys.length === 0) return;\n  const firstKey = keys[0];\n  const remainingKeys = keys.slice(1);\n  if (firstKey === \"[]\") {\n    if (Array.isArray(obj)) {\n      obj.forEach((item) => {\n        if (remainingKeys.length > 0) {\n          omitAtPath(\n            item,\n            remainingKeys,\n            deleteLeaf\n          );\n        }\n      });\n    }\n  } else if (remainingKeys.length === 0) {\n    if (obj && typeof obj === \"object\" && firstKey in obj) {\n      if (deleteLeaf) {\n        delete obj[firstKey];\n      } else {\n        obj[firstKey] = \"<omitted>\";\n      }\n    }\n  } else {\n    if (obj && typeof obj === \"object\" && firstKey in obj) {\n      omitAtPath(\n        obj[firstKey],\n        remainingKeys,\n        deleteLeaf\n      );\n    }\n  }\n}\nfunction omit(obj, paths, deletePaths = []) {\n  const result = deepCopy(obj);\n  const deletePathSet = new Set(deletePaths);\n  for (const path of paths) {\n    const keys = parsePath(path);\n    omitAtPath(result, keys, deletePathSet.has(path));\n  }\n  return result;\n}\n\n// src/instrumentation/plugins/claude-agent-sdk-channels.ts\nvar claudeAgentSDKChannels = defineChannels(\n  \"@anthropic-ai/claude-agent-sdk\",\n  {\n    query: channel({\n      channelName: \"query\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK }\n);\n\n// src/instrumentation/plugins/claude-agent-sdk-instrumentation-constants.ts\nvar CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION = \"__braintrust_skip_local_tool_hooks\";\n\n// src/instrumentation/plugins/claude-agent-sdk-local-tool-context.ts\nvar localToolContextStore = isomorph_default.newAsyncLocalStorage();\nvar localToolParentResolversByToolUseId = /* @__PURE__ */ new Map();\nfunction runWithClaudeLocalToolContext(callback, resolver) {\n  return localToolContextStore.run(resolver, callback);\n}\nfunction registerClaudeLocalToolParentResolver(toolUseId, resolver) {\n  localToolParentResolversByToolUseId.set(toolUseId, resolver);\n}\nfunction getClaudeLocalToolParentResolver(toolUseId) {\n  const currentResolver = localToolContextStore.getStore();\n  if (!toolUseId) {\n    return currentResolver;\n  }\n  const registeredResolver = localToolParentResolversByToolUseId.get(toolUseId);\n  localToolParentResolversByToolUseId.delete(toolUseId);\n  return currentResolver ?? registeredResolver;\n}\n\n// src/instrumentation/plugins/claude-agent-sdk-local-tool-spans.ts\nvar LOCAL_TOOL_HANDLER_WRAPPED = /* @__PURE__ */ Symbol.for(\n  \"braintrust.claude_agent_sdk.local_tool_handler_wrapped\"\n);\nfunction getToolUseIdFromExtra(extra) {\n  if (!extra || typeof extra !== \"object\" || !(\"_meta\" in extra)) {\n    return void 0;\n  }\n  const meta = Reflect.get(extra, \"_meta\");\n  if (!meta || typeof meta !== \"object\") {\n    return void 0;\n  }\n  const toolUseId = Reflect.get(meta, \"claudecode/toolUseId\");\n  return typeof toolUseId === \"string\" ? toolUseId : void 0;\n}\nfunction wrapLocalClaudeToolHandler(handler, getMetadata) {\n  if (handler[LOCAL_TOOL_HANDLER_WRAPPED]) {\n    return handler;\n  }\n  const wrappedHandler = function wrappedLocalToolHandler(...handlerArgs) {\n    const metadata = getMetadata();\n    const rawToolName = metadata.serverName ? `mcp__${metadata.serverName}__${metadata.toolName}` : metadata.toolName;\n    const toolUseId = getToolUseIdFromExtra(handlerArgs[1]);\n    const localToolParentResolver = getClaudeLocalToolParentResolver(toolUseId);\n    const spanName = metadata.serverName ? `tool: ${metadata.serverName}/${metadata.toolName}` : `tool: ${metadata.toolName}`;\n    const runWithResolvedParent = async () => {\n      const parent = toolUseId && localToolParentResolver ? await localToolParentResolver(toolUseId).catch(() => void 0) : void 0;\n      const span = startSpan(\n        withSpanInstrumentationName(\n          {\n            event: {\n              input: handlerArgs[0],\n              metadata: {\n                \"claude_agent_sdk.raw_tool_name\": rawToolName,\n                \"gen_ai.tool.name\": metadata.toolName,\n                ...toolUseId && { \"gen_ai.tool.call.id\": toolUseId },\n                ...metadata.serverName && {\n                  \"mcp.server\": metadata.serverName\n                }\n              }\n            },\n            name: spanName,\n            ...parent && { parent },\n            spanAttributes: { type: \"tool\" /* TOOL */ }\n          },\n          INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK\n        )\n      );\n      const runHandler = () => Reflect.apply(handler, this, handlerArgs);\n      const finalizeSuccess = (result) => {\n        span.log({ output: result });\n        span.end();\n        return result;\n      };\n      const finalizeError = (error) => {\n        span.log({ error: toLoggedError(error) });\n        span.end();\n        throw error;\n      };\n      return withCurrent(span, () => {\n        try {\n          const result = runHandler();\n          if (isPromiseLike(result)) {\n            return result.then(finalizeSuccess, finalizeError);\n          }\n          return finalizeSuccess(result);\n        } catch (error) {\n          return finalizeError(error);\n        }\n      });\n    };\n    return runWithResolvedParent();\n  };\n  Object.defineProperty(wrappedHandler, LOCAL_TOOL_HANDLER_WRAPPED, {\n    configurable: false,\n    enumerable: false,\n    value: true,\n    writable: false\n  });\n  return wrappedHandler;\n}\nfunction getRegisteredTools(instance) {\n  if (!instance || typeof instance !== \"object\") {\n    return void 0;\n  }\n  if (!(\"_registeredTools\" in instance)) {\n    return void 0;\n  }\n  const registeredTools = Reflect.get(instance, \"_registeredTools\");\n  if (registeredTools instanceof Map) {\n    return registeredTools;\n  }\n  if (registeredTools && typeof registeredTools === \"object\") {\n    return registeredTools;\n  }\n  return void 0;\n}\nfunction wrapLocalMcpServerToolHandlers(serverName, serverConfig) {\n  if (!serverConfig || typeof serverConfig !== \"object\") {\n    return false;\n  }\n  if (!(\"instance\" in serverConfig)) {\n    return false;\n  }\n  const instance = Reflect.get(serverConfig, \"instance\");\n  const registeredTools = getRegisteredTools(instance);\n  if (!registeredTools) {\n    return false;\n  }\n  let wrappedAny = false;\n  const wrapHandler = (toolName, registration) => {\n    if (!registration || typeof registration !== \"object\") {\n      return;\n    }\n    const handler = Reflect.get(registration, \"handler\");\n    if (typeof handler !== \"function\") {\n      return;\n    }\n    const wrappedHandler = wrapLocalClaudeToolHandler(handler, () => ({\n      serverName,\n      toolName\n    }));\n    if (wrappedHandler !== handler) {\n      Reflect.set(registration, \"handler\", wrappedHandler);\n      wrappedAny = true;\n    }\n  };\n  if (registeredTools instanceof Map) {\n    for (const [toolName, registration] of registeredTools.entries()) {\n      wrapHandler(toolName, registration);\n    }\n    return wrappedAny;\n  }\n  for (const [toolName, registration] of Object.entries(registeredTools)) {\n    wrapHandler(toolName, registration);\n  }\n  return wrappedAny;\n}\nfunction collectLocalMcpServerToolHookNames(serverName, serverConfig) {\n  const toolNames = /* @__PURE__ */ new Set();\n  if (!serverConfig || typeof serverConfig !== \"object\") {\n    return toolNames;\n  }\n  if (\"instance\" in serverConfig) {\n    const instance = Reflect.get(serverConfig, \"instance\");\n    const registeredTools = getRegisteredTools(instance);\n    if (registeredTools instanceof Map) {\n      for (const toolName of registeredTools.keys()) {\n        toolNames.add(toolName);\n        toolNames.add(`mcp__${serverName}__${toolName}`);\n      }\n    } else if (registeredTools) {\n      for (const toolName of Object.keys(registeredTools)) {\n        toolNames.add(toolName);\n        toolNames.add(`mcp__${serverName}__${toolName}`);\n      }\n    }\n  }\n  if (\"tools\" in serverConfig) {\n    const rawTools = Reflect.get(serverConfig, \"tools\");\n    if (Array.isArray(rawTools)) {\n      for (const tool of rawTools) {\n        if (!tool || typeof tool !== \"object\") {\n          continue;\n        }\n        const toolName = Reflect.get(tool, \"name\");\n        if (typeof toolName !== \"string\") {\n          continue;\n        }\n        toolNames.add(toolName);\n        toolNames.add(`mcp__${serverName}__${toolName}`);\n      }\n    }\n  }\n  return toolNames;\n}\n\n// src/instrumentation/plugins/claude-agent-sdk-plugin.ts\nvar ROOT_LLM_PARENT_KEY = \"__root__\";\nvar SUB_AGENT_PROMPT_SOURCE_PRIORITY = {\n  delegation: 0,\n  lifecycle: 1,\n  sidechain: 2\n};\nfunction llmParentKey(parentToolUseId) {\n  return parentToolUseId ?? ROOT_LLM_PARENT_KEY;\n}\nfunction isSubAgentDelegationToolName(toolName) {\n  return toolName === \"Agent\" || toolName === \"Task\";\n}\nfunction filterSerializableOptions(options) {\n  const allowedKeys = [\n    \"model\",\n    \"maxTurns\",\n    \"cwd\",\n    \"continue\",\n    \"allowedTools\",\n    \"disallowedTools\",\n    \"additionalDirectories\",\n    \"permissionMode\",\n    \"debug\",\n    \"agentName\",\n    \"instructions\"\n  ];\n  const filtered = {};\n  for (const key of allowedKeys) {\n    if (options[key] !== void 0) {\n      filtered[key] = options[key];\n    }\n  }\n  return filtered;\n}\nfunction getNumberProperty(obj, key) {\n  if (!obj || typeof obj !== \"object\" || !(key in obj)) {\n    return void 0;\n  }\n  const value = Reflect.get(obj, key);\n  return typeof value === \"number\" ? value : void 0;\n}\nfunction getStringProperty(obj, key) {\n  if (!obj || typeof obj !== \"object\" || !(key in obj)) {\n    return void 0;\n  }\n  const value = Reflect.get(obj, key);\n  return typeof value === \"string\" ? value : void 0;\n}\nfunction upsertSubAgentDetails(detailsByToolUseId, toolUseId, update) {\n  const existing = detailsByToolUseId.get(toolUseId) ?? {};\n  const merged = {\n    ...existing,\n    ...Object.fromEntries(\n      Object.entries(update).filter(([, value]) => value !== void 0)\n    )\n  };\n  detailsByToolUseId.set(toolUseId, merged);\n  return merged;\n}\nfunction formatSubAgentSpanName(details) {\n  if (details?.description) {\n    return `Agent: ${details.description}`;\n  }\n  if (details?.agentType) {\n    return `Agent: ${details.agentType}`;\n  }\n  return \"Agent: sub-agent\";\n}\nfunction subAgentDetailsToMetadata(details) {\n  if (!details) {\n    return {};\n  }\n  const metadata = {};\n  if (details.agentId) {\n    metadata[\"claude_agent_sdk.agent_id\"] = details.agentId;\n  }\n  if (details.agentType) {\n    metadata[\"claude_agent_sdk.agent_type\"] = details.agentType;\n  }\n  if (details.description) {\n    metadata[\"claude_agent_sdk.description\"] = details.description;\n  }\n  if (details.taskId) {\n    metadata[\"claude_agent_sdk.task_id\"] = details.taskId;\n  }\n  if (details.taskType) {\n    metadata[\"claude_agent_sdk.task_type\"] = details.taskType;\n  }\n  if (details.toolUseId) {\n    metadata[\"claude_agent_sdk.tool_use_id\"] = details.toolUseId;\n  }\n  if (details.workflowName) {\n    metadata[\"claude_agent_sdk.workflow_name\"] = details.workflowName;\n  }\n  return metadata;\n}\nfunction resolveTaskToolUseId(taskIdToToolUseId, message) {\n  const messageToolUseId = typeof message.tool_use_id === \"string\" ? message.tool_use_id : void 0;\n  if (messageToolUseId && typeof message.task_id === \"string\") {\n    taskIdToToolUseId.set(message.task_id, messageToolUseId);\n  }\n  if (messageToolUseId) {\n    return messageToolUseId;\n  }\n  if (typeof message.task_id === \"string\") {\n    return taskIdToToolUseId.get(message.task_id);\n  }\n  return void 0;\n}\nfunction seedTaskToolUseIdMapping(taskIdToToolUseId, message) {\n  if (typeof message.task_id === \"string\" && typeof message.tool_use_id === \"string\") {\n    taskIdToToolUseId.set(message.task_id, message.tool_use_id);\n  }\n}\nfunction tokenCount(value) {\n  return typeof value === \"number\" && Number.isFinite(value) && Number.isInteger(value) && value >= 0 ? value : void 0;\n}\nvar USAGE_TOKEN_KEYS = [\n  \"input_tokens\",\n  \"output_tokens\",\n  \"cache_read_input_tokens\",\n  \"cache_creation_input_tokens\"\n];\nfunction copyUsage(usage) {\n  if (!usage || typeof usage !== \"object\") {\n    return void 0;\n  }\n  const copy = {};\n  for (const key of USAGE_TOKEN_KEYS) {\n    const value = tokenCount(Reflect.get(usage, key));\n    if (value !== void 0) {\n      copy[key] = value;\n    }\n  }\n  const cacheCreation = Reflect.get(usage, \"cache_creation\");\n  if (cacheCreation && typeof cacheCreation === \"object\") {\n    const cacheCreationCopy = {};\n    for (const key of [\n      \"ephemeral_5m_input_tokens\",\n      \"ephemeral_1h_input_tokens\"\n    ]) {\n      const value = tokenCount(Reflect.get(cacheCreation, key));\n      if (value !== void 0) {\n        cacheCreationCopy[key] = value;\n      }\n    }\n    if (Object.keys(cacheCreationCopy).length > 0) {\n      copy.cache_creation = cacheCreationCopy;\n    }\n  }\n  return Object.keys(copy).length > 0 ? copy : void 0;\n}\nfunction modelUsageTotals(usage) {\n  return {\n    input_tokens: usage.inputTokens,\n    output_tokens: usage.outputTokens,\n    cache_read_input_tokens: usage.cacheReadInputTokens,\n    cache_creation_input_tokens: usage.cacheCreationInputTokens\n  };\n}\nfunction sumUsageTotals(usages) {\n  const totals = {\n    input_tokens: 0,\n    output_tokens: 0,\n    cache_read_input_tokens: 0,\n    cache_creation_input_tokens: 0\n  };\n  for (const usage of usages) {\n    for (const key of USAGE_TOKEN_KEYS) {\n      totals[key] += usage[key];\n    }\n  }\n  return totals;\n}\nfunction usageTotals(usage) {\n  const cacheCreation = usage.cache_creation;\n  return {\n    input_tokens: usage.input_tokens ?? 0,\n    output_tokens: usage.output_tokens ?? 0,\n    cache_read_input_tokens: usage.cache_read_input_tokens ?? 0,\n    cache_creation_input_tokens: Math.max(\n      usage.cache_creation_input_tokens ?? 0,\n      (cacheCreation?.ephemeral_5m_input_tokens ?? 0) + (cacheCreation?.ephemeral_1h_input_tokens ?? 0)\n    )\n  };\n}\nfunction mergeUsage(base, override) {\n  if (!base || !override) {\n    return override ?? base;\n  }\n  const cacheCreation = base.cache_creation || override.cache_creation ? { ...base.cache_creation, ...override.cache_creation } : void 0;\n  return {\n    ...base,\n    ...override,\n    ...cacheCreation && { cache_creation: cacheCreation }\n  };\n}\nfunction baseModelName(model) {\n  return model.replace(/^(?:[a-z]+\\.)?anthropic\\./, \"\").replace(/\\[.*\\]$/, \"\").replace(/-v\\d+(?::\\d+)?$/, \"\").replace(/[-@](?:\\d{8}|latest)$/, \"\").replace(/-0$/, \"\");\n}\nvar RELATIVE_TOKEN_PRICES = {\n  input_tokens: 1,\n  output_tokens: 5,\n  cache_read_input_tokens: 0.1,\n  cache_creation_input_tokens: 1.25\n};\nfunction unloggedUsageMetrics(modelUsage, loggedLlmUsageByModel) {\n  const remainder = (total2, logged) => {\n    const unlogged2 = { ...total2 };\n    for (const key of USAGE_TOKEN_KEYS) {\n      unlogged2[key] = Math.max(0, total2[key] - (logged?.[key] ?? 0));\n    }\n    return unlogged2;\n  };\n  const relativeCost = (usage) => USAGE_TOKEN_KEYS.reduce(\n    (cost, key) => cost + usage[key] * RELATIVE_TOKEN_PRICES[key],\n    0\n  );\n  const usageByModel = /* @__PURE__ */ new Map();\n  let totalCost = 0;\n  for (const [model, usage] of Object.entries(modelUsage)) {\n    const baseModel = baseModelName(model);\n    const total2 = modelUsageTotals(usage);\n    const existing = usageByModel.get(baseModel);\n    if (existing) {\n      existing.costUSD += usage.costUSD;\n      for (const key of USAGE_TOKEN_KEYS) {\n        existing.total[key] += total2[key];\n      }\n    } else {\n      usageByModel.set(baseModel, { costUSD: usage.costUSD, total: total2 });\n    }\n    totalCost += usage.costUSD;\n  }\n  const total = sumUsageTotals(\n    [...usageByModel.values()].map((usage) => usage.total)\n  );\n  const unlogged = remainder(\n    total,\n    sumUsageTotals([...loggedLlmUsageByModel.values()])\n  );\n  const metrics = {};\n  for (const [key, value] of Object.entries(extractUsage(unlogged, true))) {\n    if (value > 0) {\n      metrics[key] = value;\n    }\n  }\n  const costShares = [...loggedLlmUsageByModel.keys()].every(\n    (model) => model !== void 0 && usageByModel.has(model)\n  ) ? [...usageByModel].map(([model, usage]) => ({\n    ...usage,\n    unlogged: remainder(usage.total, loggedLlmUsageByModel.get(model))\n  })) : [{ costUSD: totalCost, total, unlogged }];\n  let unloggedCost = 0;\n  for (const share of costShares) {\n    const totalRelativeCost = relativeCost(share.total);\n    if (totalRelativeCost > 0) {\n      unloggedCost += share.costUSD * relativeCost(share.unlogged) / totalRelativeCost;\n    }\n  }\n  if (unloggedCost > 0) {\n    metrics.estimated_cost = unloggedCost;\n  }\n  return metrics;\n}\nfunction extractUsage(usage, includeOutput) {\n  const metrics = {};\n  if (!usage) {\n    return {};\n  }\n  const inputTokens = getNumberProperty(usage, \"input_tokens\");\n  if (inputTokens !== void 0) {\n    metrics.prompt_tokens = inputTokens;\n  }\n  if (includeOutput) {\n    const outputTokens = getNumberProperty(usage, \"output_tokens\");\n    if (outputTokens !== void 0) {\n      metrics.completion_tokens = outputTokens;\n    }\n  }\n  const cacheReadTokens = getNumberProperty(usage, \"cache_read_input_tokens\") || 0;\n  const cacheCreationTokens = getNumberProperty(usage, \"cache_creation_input_tokens\") || 0;\n  Object.assign(\n    metrics,\n    extractAnthropicCacheTokens(cacheReadTokens, cacheCreationTokens)\n  );\n  const cacheCreation5mTokens = getNumberProperty(\n    usage.cache_creation,\n    \"ephemeral_5m_input_tokens\"\n  );\n  const cacheCreation1hTokens = getNumberProperty(\n    usage.cache_creation,\n    \"ephemeral_1h_input_tokens\"\n  );\n  if (cacheCreation5mTokens !== void 0) {\n    metrics.prompt_cache_creation_5m_tokens = cacheCreation5mTokens;\n  }\n  if (cacheCreation1hTokens !== void 0) {\n    metrics.prompt_cache_creation_1h_tokens = cacheCreation1hTokens;\n  }\n  if (Object.keys(metrics).length === 0) {\n    return {};\n  }\n  const finalized = finalizeAnthropicTokens(metrics);\n  if (metrics.completion_tokens === void 0) {\n    delete finalized.tokens;\n  }\n  return toNumericMetrics(finalized);\n}\nfunction buildLLMInput(promptMessages, conversationHistory) {\n  const inputParts = [...promptMessages, ...conversationHistory];\n  return inputParts.length > 0 ? inputParts : void 0;\n}\nfunction conversationMessageFromSDKMessage(message) {\n  const role = message.message?.role;\n  const content = message.message?.content;\n  if (role && content !== void 0) {\n    return { content, role };\n  }\n  return void 0;\n}\nfunction messageContentHasBlockType(message, blockType) {\n  const content = message.message?.content;\n  return Array.isArray(content) && content.some(\n    (block) => typeof block === \"object\" && block !== null && \"type\" in block && block.type === blockType\n  );\n}\nfunction buildRootPromptMessages(prompt, capturedPromptMessages) {\n  if (typeof prompt === \"string\") {\n    return [{ content: prompt, role: \"user\" }];\n  }\n  if (!capturedPromptMessages || capturedPromptMessages.length === 0) {\n    return [];\n  }\n  return capturedPromptMessages.map(conversationMessageFromSDKMessage).filter(\n    (message) => message !== void 0\n  );\n}\nfunction formatCapturedMessages(messages) {\n  return messages.length > 0 ? messages : [];\n}\nasync function createLLMSpanForMessages(messages, promptMessages, conversationHistory, options, startTime, parentSpan, usage, hasFinalOutputUsage, existingSpan) {\n  if (messages.length === 0) {\n    return void 0;\n  }\n  const lastMessage = messages[messages.length - 1];\n  if (lastMessage.type !== \"assistant\") {\n    return void 0;\n  }\n  const model = lastMessage.message?.model || options.model;\n  const metrics = options.includePartialMessages ? extractUsage(usage, hasFinalOutputUsage) : {};\n  const input = buildLLMInput(promptMessages, conversationHistory);\n  const outputs = messages.map(\n    (m) => m.message?.content && m.message?.role ? { content: m.message.content, role: m.message.role } : void 0\n  ).filter(\n    (c) => c !== void 0\n  );\n  const span = existingSpan ?? startSpan(\n    withSpanInstrumentationName(\n      {\n        name: \"anthropic.messages.create\",\n        parent: parentSpan,\n        spanAttributes: {\n          type: \"llm\" /* LLM */\n        },\n        startTime\n      },\n      INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK\n    )\n  );\n  span.log({\n    input,\n    metadata: { ...model && { model }, provider: \"anthropic\" },\n    ...Object.keys(metrics).length > 0 ? { metrics } : {},\n    output: outputs\n  });\n  const spanExport = await span.export();\n  await span.end();\n  const finalMessage = lastMessage.message?.content && lastMessage.message?.role ? { content: lastMessage.message.content, role: lastMessage.message.role } : void 0;\n  return {\n    finalMessage,\n    spanExport\n  };\n}\nfunction getMcpServerMetadata(serverName, mcpServers) {\n  if (!serverName || !mcpServers) {\n    return {};\n  }\n  const serverConfig = mcpServers[serverName];\n  if (!serverConfig) {\n    return {};\n  }\n  const metadata = {};\n  if (serverConfig.type) {\n    metadata[\"mcp.type\"] = serverConfig.type;\n  } else if (typeof serverConfig === \"object\" && \"transport\" in serverConfig) {\n    metadata[\"mcp.type\"] = \"sdk\";\n  }\n  if (serverConfig.url) {\n    metadata[\"mcp.url\"] = serverConfig.url;\n  }\n  if (serverConfig.command) {\n    metadata[\"mcp.command\"] = serverConfig.command;\n    if (serverConfig.args) {\n      metadata[\"mcp.args\"] = serverConfig.args.join(\" \");\n    }\n  }\n  return metadata;\n}\nfunction parseToolName(rawToolName) {\n  const mcpMatch = rawToolName.match(/^mcp__([^_]+)__(.+)$/);\n  if (mcpMatch) {\n    const [, mcpServer, toolName] = mcpMatch;\n    return {\n      displayName: `tool: ${mcpServer}/${toolName}`,\n      mcpServer,\n      rawToolName,\n      toolName\n    };\n  }\n  return {\n    displayName: `tool: ${rawToolName}`,\n    rawToolName,\n    toolName: rawToolName\n  };\n}\nfunction isLocalToolUse(rawToolName, mcpServers) {\n  const parsed = parseToolName(rawToolName);\n  if (!parsed.mcpServer || !mcpServers) {\n    return false;\n  }\n  const serverConfig = mcpServers[parsed.mcpServer];\n  if (!serverConfig || typeof serverConfig !== \"object\") {\n    return false;\n  }\n  return serverConfig.type === \"sdk\" || \"transport\" in serverConfig;\n}\nfunction prepareLocalToolHandlersInMcpServers(mcpServers) {\n  const localToolHookNames = /* @__PURE__ */ new Set();\n  if (!mcpServers) {\n    return {\n      hasLocalToolHandlers: false,\n      localToolHookNames\n    };\n  }\n  let hasLocalToolHandlers = false;\n  for (const [serverName, serverConfig] of Object.entries(mcpServers)) {\n    const toolNames = collectLocalMcpServerToolHookNames(\n      serverName,\n      serverConfig\n    );\n    for (const toolName of toolNames) {\n      localToolHookNames.add(toolName);\n    }\n    if (toolNames.size > 0) {\n      hasLocalToolHandlers = true;\n    }\n    if (wrapLocalMcpServerToolHandlers(serverName, serverConfig)) {\n      hasLocalToolHandlers = true;\n    }\n  }\n  return { hasLocalToolHandlers, localToolHookNames };\n}\nfunction createToolTracingHooks(resolveParentSpan, taskIdToToolUseId, toolUseToParent, activeToolSpans, mcpServers, localToolHookNames, skipLocalToolHooks, subAgentDetailsByToolUseId, subAgentSpans, endedSubAgentSpans) {\n  const preToolUse = async (input, toolUseID) => {\n    if (input.hook_event_name !== \"PreToolUse\" || !toolUseID) {\n      return {};\n    }\n    if (!toolUseToParent.has(toolUseID) && input.agent_id) {\n      const parentToolUseId = taskIdToToolUseId.get(input.agent_id);\n      if (parentToolUseId) {\n        toolUseToParent.set(toolUseID, parentToolUseId);\n      }\n    }\n    if (skipLocalToolHooks && (isLocalToolUse(input.tool_name, mcpServers) || localToolHookNames.has(input.tool_name))) {\n      registerClaudeLocalToolParentResolver(toolUseID, resolveParentSpan);\n      return {};\n    }\n    const parsed = parseToolName(input.tool_name);\n    const toolSpan = startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: input.tool_input,\n            metadata: {\n              \"claude_agent_sdk.cwd\": input.cwd,\n              \"claude_agent_sdk.raw_tool_name\": parsed.rawToolName,\n              \"claude_agent_sdk.session_id\": input.session_id,\n              \"gen_ai.tool.call.id\": toolUseID,\n              \"gen_ai.tool.name\": parsed.toolName,\n              ...parsed.mcpServer && { \"mcp.server\": parsed.mcpServer },\n              ...getMcpServerMetadata(parsed.mcpServer, mcpServers)\n            }\n          },\n          name: parsed.displayName,\n          parent: await resolveParentSpan(toolUseID, {\n            agentId: input.agent_id\n          }),\n          spanAttributes: { type: \"tool\" /* TOOL */ }\n        },\n        INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK\n      )\n    );\n    activeToolSpans.set(toolUseID, toolSpan);\n    return {};\n  };\n  const postToolUse = async (input, toolUseID) => {\n    if (input.hook_event_name !== \"PostToolUse\" || !toolUseID) {\n      return {};\n    }\n    if (skipLocalToolHooks && (isLocalToolUse(input.tool_name, mcpServers) || localToolHookNames.has(input.tool_name))) {\n      return {};\n    }\n    const subAgentSpan = subAgentSpans.get(toolUseID);\n    const toolSpan = activeToolSpans.get(toolUseID);\n    if (subAgentSpan) {\n      if (endedSubAgentSpans.has(toolUseID)) {\n        return {};\n      }\n      try {\n        const response = input.tool_response;\n        const metadata = {\n          ...subAgentDetailsToMetadata(\n            subAgentDetailsByToolUseId.get(toolUseID)\n          )\n        };\n        if (response?.status) {\n          metadata[\"claude_agent_sdk.status\"] = response.status;\n        }\n        if (response?.totalDurationMs) {\n          metadata[\"claude_agent_sdk.duration_ms\"] = response.totalDurationMs;\n        }\n        if (response?.totalToolUseCount !== void 0) {\n          metadata[\"claude_agent_sdk.tool_use_count\"] = response.totalToolUseCount;\n        }\n        subAgentSpan.log({\n          metadata,\n          output: response?.content\n        });\n      } finally {\n        subAgentSpan.end();\n        endedSubAgentSpans.add(toolUseID);\n      }\n      if (toolSpan) {\n        try {\n          toolSpan.log({ output: input.tool_response });\n        } finally {\n          toolSpan.end();\n          activeToolSpans.delete(toolUseID);\n        }\n      }\n      return {};\n    }\n    if (!toolSpan) {\n      return {};\n    }\n    try {\n      toolSpan.log({ output: input.tool_response });\n    } finally {\n      toolSpan.end();\n      activeToolSpans.delete(toolUseID);\n    }\n    return {};\n  };\n  const postToolUseFailure = async (input, toolUseID) => {\n    if (input.hook_event_name !== \"PostToolUseFailure\" || !toolUseID) {\n      return {};\n    }\n    if (skipLocalToolHooks && (isLocalToolUse(input.tool_name, mcpServers) || localToolHookNames.has(input.tool_name))) {\n      return {};\n    }\n    const subAgentSpan = subAgentSpans.get(toolUseID);\n    const toolSpan = activeToolSpans.get(toolUseID);\n    if (subAgentSpan) {\n      if (endedSubAgentSpans.has(toolUseID)) {\n        return {};\n      }\n      try {\n        subAgentSpan.log({\n          error: input.error,\n          metadata: subAgentDetailsToMetadata(\n            subAgentDetailsByToolUseId.get(toolUseID)\n          )\n        });\n      } finally {\n        subAgentSpan.end();\n        endedSubAgentSpans.add(toolUseID);\n      }\n      if (toolSpan) {\n        const parsed2 = parseToolName(input.tool_name);\n        try {\n          toolSpan.log({\n            error: input.error,\n            metadata: {\n              \"claude_agent_sdk.is_interrupt\": input.is_interrupt,\n              \"claude_agent_sdk.session_id\": input.session_id,\n              \"claude_agent_sdk.raw_tool_name\": parsed2.rawToolName,\n              \"gen_ai.tool.call.id\": toolUseID,\n              \"gen_ai.tool.name\": parsed2.toolName,\n              ...parsed2.mcpServer && { \"mcp.server\": parsed2.mcpServer }\n            }\n          });\n        } finally {\n          toolSpan.end();\n          activeToolSpans.delete(toolUseID);\n        }\n      }\n      return {};\n    }\n    if (!toolSpan) {\n      return {};\n    }\n    const parsed = parseToolName(input.tool_name);\n    try {\n      toolSpan.log({\n        error: input.error,\n        metadata: {\n          \"claude_agent_sdk.is_interrupt\": input.is_interrupt,\n          \"claude_agent_sdk.session_id\": input.session_id,\n          \"gen_ai.tool.call.id\": toolUseID,\n          \"gen_ai.tool.name\": parsed.toolName,\n          ...parsed.mcpServer && { \"mcp.server\": parsed.mcpServer }\n        }\n      });\n    } finally {\n      toolSpan.end();\n      activeToolSpans.delete(toolUseID);\n    }\n    return {};\n  };\n  const subagentStart = async (input, toolUseID) => {\n    if (input.hook_event_name !== \"SubagentStart\" || !toolUseID) {\n      return {};\n    }\n    const details = upsertSubAgentDetails(\n      subAgentDetailsByToolUseId,\n      toolUseID,\n      {\n        agentId: input.agent_id,\n        agentType: input.agent_type,\n        toolUseId: toolUseID\n      }\n    );\n    const subAgentSpan = subAgentSpans.get(toolUseID);\n    if (subAgentSpan && !endedSubAgentSpans.has(toolUseID)) {\n      subAgentSpan.log({\n        metadata: subAgentDetailsToMetadata(details)\n      });\n    }\n    return {};\n  };\n  const subagentStop = async (input, toolUseID) => {\n    if (input.hook_event_name !== \"SubagentStop\" || !toolUseID) {\n      return {};\n    }\n    const details = upsertSubAgentDetails(\n      subAgentDetailsByToolUseId,\n      toolUseID,\n      {\n        agentId: input.agent_id,\n        agentType: input.agent_type,\n        toolUseId: toolUseID\n      }\n    );\n    const subAgentSpan = subAgentSpans.get(toolUseID);\n    if (!subAgentSpan || endedSubAgentSpans.has(toolUseID)) {\n      return {};\n    }\n    const metadata = {\n      ...subAgentDetailsToMetadata(details),\n      \"claude_agent_sdk.stop_hook_active\": input.stop_hook_active\n    };\n    try {\n      subAgentSpan.log({\n        metadata,\n        output: input.last_assistant_message\n      });\n    } finally {\n      subAgentSpan.end();\n      endedSubAgentSpans.add(toolUseID);\n    }\n    return {};\n  };\n  return {\n    postToolUse,\n    postToolUseFailure,\n    preToolUse,\n    subagentStart,\n    subagentStop\n  };\n}\nfunction injectTracingHooks(options, resolveParentSpan, taskIdToToolUseId, toolUseToParent, activeToolSpans, localToolHookNames, skipLocalToolHooks, subAgentDetailsByToolUseId, subAgentSpans, endedSubAgentSpans) {\n  const {\n    preToolUse,\n    postToolUse,\n    postToolUseFailure,\n    subagentStart,\n    subagentStop\n  } = createToolTracingHooks(\n    resolveParentSpan,\n    taskIdToToolUseId,\n    toolUseToParent,\n    activeToolSpans,\n    options.mcpServers,\n    localToolHookNames,\n    skipLocalToolHooks,\n    subAgentDetailsByToolUseId,\n    subAgentSpans,\n    endedSubAgentSpans\n  );\n  const existingHooks = options.hooks ?? {};\n  return {\n    ...options,\n    hooks: {\n      ...existingHooks,\n      PostToolUse: [\n        ...existingHooks.PostToolUse ?? [],\n        { hooks: [postToolUse] }\n      ],\n      PostToolUseFailure: [\n        ...existingHooks.PostToolUseFailure ?? [],\n        {\n          hooks: [postToolUseFailure]\n        }\n      ],\n      PreToolUse: [\n        ...existingHooks.PreToolUse ?? [],\n        { hooks: [preToolUse] }\n      ],\n      SubagentStart: [\n        ...existingHooks.SubagentStart ?? [],\n        {\n          hooks: [subagentStart]\n        }\n      ],\n      SubagentStop: [\n        ...existingHooks.SubagentStop ?? [],\n        {\n          hooks: [subagentStop]\n        }\n      ]\n    }\n  };\n}\nfunction setSubAgentPromptMessages(state, parentToolUseId, promptMessages, source) {\n  if (promptMessages.length === 0) {\n    return;\n  }\n  const parentKey = llmParentKey(parentToolUseId);\n  const sourcePriority = SUB_AGENT_PROMPT_SOURCE_PRIORITY[source];\n  const currentPriority = state.promptSourcePriorityByParentKey.get(parentKey) ?? -1;\n  if (sourcePriority > currentPriority) {\n    state.promptMessagesByParentKey.set(parentKey, promptMessages);\n    state.promptSourcePriorityByParentKey.set(parentKey, sourcePriority);\n  }\n}\nfunction getConversationHistory(state, parentKey) {\n  let conversationHistory = state.conversationHistoryByParentKey.get(parentKey);\n  if (!conversationHistory) {\n    conversationHistory = [];\n    state.conversationHistoryByParentKey.set(parentKey, conversationHistory);\n  }\n  return conversationHistory;\n}\nasync function finalizeCurrentMessageGroup(state) {\n  if (state.currentMessages.length === 0) {\n    return;\n  }\n  const parentToolUseId = state.currentMessages[0]?.parent_tool_use_id ?? null;\n  const parentKey = llmParentKey(parentToolUseId);\n  const conversationHistory = getConversationHistory(state, parentKey);\n  const promptMessages = parentToolUseId ? state.promptMessagesByParentKey.get(parentKey) ?? [] : buildRootPromptMessages(\n    state.originalPrompt,\n    state.capturedPromptMessages\n  );\n  let parentSpan = await state.span.export();\n  if (parentToolUseId) {\n    const subAgentSpan = state.subAgentSpans.get(parentToolUseId);\n    if (subAgentSpan) {\n      parentSpan = await subAgentSpan.export();\n    }\n  }\n  const existingLlmSpan = state.activeLlmSpansByParentToolUse.get(parentKey);\n  const lastMessage = state.currentMessages[state.currentMessages.length - 1];\n  const messageId = lastMessage?.message?.id;\n  const usage = state.options.includePartialMessages ? mergeUsage(\n    copyUsage(lastMessage?.message?.usage),\n    messageId ? state.usageByMessageId.get(messageId) : void 0\n  ) : void 0;\n  const hasFinalOutputUsage = messageId !== void 0 && state.finalOutputUsageMessageIds.has(messageId);\n  const llmSpanResult = await createLLMSpanForMessages(\n    state.currentMessages,\n    promptMessages,\n    conversationHistory,\n    state.options,\n    state.currentMessageStartTime,\n    parentSpan,\n    usage,\n    hasFinalOutputUsage,\n    existingLlmSpan\n  );\n  if (llmSpanResult && usage) {\n    const callUsage = usageTotals(usage);\n    if (!hasFinalOutputUsage) {\n      callUsage.output_tokens = 0;\n    }\n    const responseModel = lastMessage.message?.model || state.options.model;\n    const model = responseModel ? baseModelName(responseModel) : void 0;\n    const loggedUsage = state.loggedLlmUsageByModel.get(model);\n    if (loggedUsage) {\n      for (const key of USAGE_TOKEN_KEYS) {\n        loggedUsage[key] += callUsage[key];\n      }\n    } else {\n      state.loggedLlmUsageByModel.set(model, callUsage);\n    }\n  }\n  if (llmSpanResult) {\n    if (parentToolUseId) {\n      state.latestLlmParentBySubAgentToolUse.set(\n        parentToolUseId,\n        llmSpanResult.spanExport\n      );\n    } else {\n      state.latestRootLlmParentRef.value = llmSpanResult.spanExport;\n    }\n    if (llmSpanResult.finalMessage) {\n      conversationHistory.push(llmSpanResult.finalMessage);\n      state.finalResults.push(llmSpanResult.finalMessage);\n    }\n  }\n  state.activeLlmSpansByParentToolUse.delete(parentKey);\n  if (messageId) {\n    state.usageByMessageId.delete(messageId);\n    state.finalOutputUsageMessageIds.delete(messageId);\n    for (const [\n      parent,\n      activeMessageId\n    ] of state.activePartialMessageIdByParentKey) {\n      if (activeMessageId === messageId) {\n        state.activePartialMessageIdByParentKey.delete(parent);\n      }\n    }\n  }\n  state.currentMessages.length = 0;\n}\nfunction maybeTrackToolUseContext(state, message) {\n  seedTaskToolUseIdMapping(state.taskIdToToolUseId, message);\n  if (message.type !== \"assistant\" || !Array.isArray(message.message?.content)) {\n    return;\n  }\n  const parentToolUseId = message.parent_tool_use_id ?? null;\n  for (const block of message.message.content) {\n    if (typeof block !== \"object\" || block === null || !(\"type\" in block) || block.type !== \"tool_use\" || !(\"id\" in block) || typeof block.id !== \"string\") {\n      continue;\n    }\n    state.toolUseToParent.set(block.id, parentToolUseId);\n    if (typeof block.name === \"string\" && isSubAgentDelegationToolName(block.name) && typeof block.input === \"object\" && block.input !== null) {\n      upsertSubAgentDetails(state.subAgentDetailsByToolUseId, block.id, {\n        agentType: getStringProperty(block.input, \"subagent_type\"),\n        description: getStringProperty(block.input, \"description\"),\n        toolUseId: block.id\n      });\n      const prompt = getStringProperty(block.input, \"prompt\");\n      if (prompt) {\n        setSubAgentPromptMessages(\n          state,\n          block.id,\n          [{ content: prompt, role: \"user\" }],\n          \"delegation\"\n        );\n      }\n    }\n  }\n}\nasync function maybeStartSubAgentSpan(state, message) {\n  if (!(\"parent_tool_use_id\" in message)) {\n    return;\n  }\n  const parentToolUseId = message.parent_tool_use_id;\n  if (!parentToolUseId) {\n    return;\n  }\n  await ensureSubAgentSpan(\n    state.subAgentDetailsByToolUseId,\n    state.span,\n    state.activeToolSpans,\n    state.subAgentSpans,\n    parentToolUseId\n  );\n}\nasync function ensureSubAgentSpan(subAgentDetailsByToolUseId, rootSpan, activeToolSpans, subAgentSpans, parentToolUseId) {\n  const existingSpan = subAgentSpans.get(parentToolUseId);\n  if (existingSpan) {\n    return existingSpan;\n  }\n  const details = subAgentDetailsByToolUseId.get(parentToolUseId);\n  const spanName = formatSubAgentSpanName(details);\n  const parentToolSpan = activeToolSpans.get(parentToolUseId);\n  const parentSpan = parentToolSpan ? await parentToolSpan.export() : await rootSpan.export();\n  const subAgentSpan = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          metadata: subAgentDetailsToMetadata(details)\n        },\n        name: spanName,\n        parent: parentSpan,\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK\n    )\n  );\n  subAgentSpans.set(parentToolUseId, subAgentSpan);\n  return subAgentSpan;\n}\nasync function ensureActiveLlmSpanForParentToolUse(rootSpan, activeLlmSpansByParentToolUse, subAgentDetailsByToolUseId, activeToolSpans, subAgentSpans, parentToolUseId, startTime) {\n  const parentKey = llmParentKey(parentToolUseId);\n  const existingLlmSpan = activeLlmSpansByParentToolUse.get(parentKey);\n  if (existingLlmSpan) {\n    return existingLlmSpan;\n  }\n  let llmParentSpan = await rootSpan.export();\n  if (parentToolUseId) {\n    const subAgentSpan = await ensureSubAgentSpan(\n      subAgentDetailsByToolUseId,\n      rootSpan,\n      activeToolSpans,\n      subAgentSpans,\n      parentToolUseId\n    );\n    llmParentSpan = await subAgentSpan.export();\n  }\n  const racedLlmSpan = activeLlmSpansByParentToolUse.get(parentKey);\n  if (racedLlmSpan) {\n    return racedLlmSpan;\n  }\n  const llmSpan = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: \"anthropic.messages.create\",\n        parent: llmParentSpan,\n        spanAttributes: {\n          type: \"llm\" /* LLM */\n        },\n        startTime\n      },\n      INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK\n    )\n  );\n  activeLlmSpansByParentToolUse.set(parentKey, llmSpan);\n  return llmSpan;\n}\nasync function maybeHandleTaskLifecycleMessage(state, message) {\n  if (message.type !== \"system\") {\n    return false;\n  }\n  if (message.subtype !== \"task_started\" && message.subtype !== \"task_progress\" && message.subtype !== \"task_notification\") {\n    return false;\n  }\n  const toolUseId = resolveTaskToolUseId(state.taskIdToToolUseId, message);\n  if (!toolUseId) {\n    return true;\n  }\n  const details = upsertSubAgentDetails(\n    state.subAgentDetailsByToolUseId,\n    toolUseId,\n    {\n      description: getStringProperty(message, \"description\"),\n      taskId: getStringProperty(message, \"task_id\"),\n      taskType: getStringProperty(message, \"task_type\"),\n      toolUseId,\n      workflowName: getStringProperty(message, \"workflow_name\")\n    }\n  );\n  const subAgentSpan = await ensureSubAgentSpan(\n    state.subAgentDetailsByToolUseId,\n    state.span,\n    state.activeToolSpans,\n    state.subAgentSpans,\n    toolUseId\n  );\n  if (state.endedSubAgentSpans.has(toolUseId)) {\n    return true;\n  }\n  const usage = message.usage;\n  const usageTotalTokens = getNumberProperty(usage, \"total_tokens\");\n  const usageToolUses = getNumberProperty(usage, \"tool_uses\");\n  const usageDurationMs = getNumberProperty(usage, \"duration_ms\");\n  const metadata = {\n    ...subAgentDetailsToMetadata(details),\n    \"claude_agent_sdk.tool_use_id\": toolUseId,\n    ...usageTotalTokens !== void 0 && {\n      \"claude_agent_sdk.total_tokens\": usageTotalTokens\n    },\n    ...usageToolUses !== void 0 && {\n      \"claude_agent_sdk.tool_use_count\": usageToolUses\n    },\n    ...usageDurationMs !== void 0 && {\n      \"claude_agent_sdk.duration_ms\": usageDurationMs\n    }\n  };\n  if (message.subtype === \"task_started\") {\n    const prompt = getStringProperty(message, \"prompt\");\n    if (prompt) {\n      setSubAgentPromptMessages(\n        state,\n        toolUseId,\n        [{ content: prompt, role: \"user\" }],\n        \"lifecycle\"\n      );\n    }\n    subAgentSpan.log({\n      input: prompt,\n      metadata\n    });\n    return true;\n  }\n  const summary = getStringProperty(message, \"summary\");\n  if (summary) {\n    metadata[\"claude_agent_sdk.summary\"] = summary;\n  }\n  if (message.subtype === \"task_progress\") {\n    const lastToolName = getStringProperty(message, \"last_tool_name\");\n    if (lastToolName) {\n      metadata[\"claude_agent_sdk.last_tool_name\"] = lastToolName;\n    }\n    subAgentSpan.log({\n      metadata,\n      output: summary\n    });\n    return true;\n  }\n  const status = getStringProperty(message, \"status\");\n  const outputFile = getStringProperty(message, \"output_file\");\n  if (status) {\n    metadata[\"claude_agent_sdk.task_status\"] = status;\n  }\n  if (outputFile) {\n    metadata[\"claude_agent_sdk.output_file\"] = outputFile;\n  }\n  const output = summary || outputFile ? {\n    ...summary && { summary },\n    ...outputFile && { output_file: outputFile }\n  } : void 0;\n  try {\n    subAgentSpan.log({\n      metadata,\n      output\n    });\n  } finally {\n    subAgentSpan.end();\n    state.endedSubAgentSpans.add(toolUseId);\n  }\n  return true;\n}\nfunction handlePartialUsageMessage(state, message) {\n  if (message.type !== \"stream_event\") {\n    return false;\n  }\n  const event = message.event;\n  if (!event || typeof event !== \"object\") {\n    return true;\n  }\n  const parentKey = llmParentKey(message.parent_tool_use_id ?? null);\n  if (event.type === \"message_start\") {\n    const messageId2 = event.message?.id;\n    const usage = copyUsage(event.message?.usage);\n    if (messageId2) {\n      state.activePartialMessageIdByParentKey.set(parentKey, messageId2);\n      if (usage) {\n        state.usageByMessageId.set(messageId2, usage);\n      }\n    }\n    return true;\n  }\n  const messageId = state.activePartialMessageIdByParentKey.get(parentKey);\n  if (!messageId) {\n    return true;\n  }\n  if (event.type === \"message_delta\") {\n    const update = copyUsage(event.usage);\n    if (update) {\n      const usage = state.usageByMessageId.get(messageId) ?? {};\n      Object.assign(usage, update);\n      state.usageByMessageId.set(messageId, usage);\n      if (update.output_tokens !== void 0) {\n        state.finalOutputUsageMessageIds.add(messageId);\n      }\n    }\n  } else if (event.type === \"message_stop\") {\n    state.activePartialMessageIdByParentKey.delete(parentKey);\n  }\n  return true;\n}\nasync function handleStreamMessage(state, message) {\n  if (handlePartialUsageMessage(state, message)) {\n    return;\n  }\n  maybeTrackToolUseContext(state, message);\n  if (await maybeHandleTaskLifecycleMessage(state, message)) {\n    return;\n  }\n  await maybeStartSubAgentSpan(state, message);\n  const messageParentToolUseId = message.parent_tool_use_id;\n  if (messageParentToolUseId && message.type === \"user\") {\n    const conversationMessage = conversationMessageFromSDKMessage(message);\n    if (conversationMessage?.role === \"user\") {\n      await finalizeCurrentMessageGroup(state);\n      const parentKey = llmParentKey(messageParentToolUseId);\n      const conversationHistory = getConversationHistory(state, parentKey);\n      const currentPromptSourcePriority = state.promptSourcePriorityByParentKey.get(parentKey) ?? -1;\n      const canUseAsInitialSidechainPrompt = conversationHistory.length === 0 && currentPromptSourcePriority < SUB_AGENT_PROMPT_SOURCE_PRIORITY.sidechain && !messageContentHasBlockType(message, \"tool_result\");\n      if (!canUseAsInitialSidechainPrompt) {\n        conversationHistory.push(conversationMessage);\n        return;\n      }\n      setSubAgentPromptMessages(\n        state,\n        messageParentToolUseId,\n        [conversationMessage],\n        \"sidechain\"\n      );\n      return;\n    }\n  }\n  const messageId = message.message?.id;\n  if (messageId && messageId !== state.currentMessageId) {\n    await finalizeCurrentMessageGroup(state);\n    state.currentMessageId = messageId;\n    state.currentMessageStartTime = getCurrentUnixTimestamp();\n  }\n  if (message.type === \"assistant\" && message.message?.usage) {\n    const parentToolUseId = message.parent_tool_use_id ?? null;\n    await ensureActiveLlmSpanForParentToolUse(\n      state.span,\n      state.activeLlmSpansByParentToolUse,\n      state.subAgentDetailsByToolUseId,\n      state.activeToolSpans,\n      state.subAgentSpans,\n      parentToolUseId,\n      state.currentMessageStartTime\n    );\n    state.currentMessages.push(message);\n  }\n  if (message.type !== \"result\") {\n    return;\n  }\n  await finalizeCurrentMessageGroup(state);\n  const metadata = {};\n  if (message.num_turns !== void 0) {\n    metadata.num_turns = message.num_turns;\n  }\n  if (message.session_id !== void 0) {\n    metadata.session_id = message.session_id;\n  }\n  const resumesSession = (state.options.resume !== void 0 || state.options.continue === true) && !state.options.forkSession;\n  const modelUsage = resumesSession ? void 0 : message.modelUsage;\n  const totalCost = resumesSession ? void 0 : message.total_cost_usd;\n  if (totalCost !== void 0) {\n    metadata.total_cost_usd = totalCost;\n  }\n  let metrics = {};\n  if (!state.options.includePartialMessages) {\n    const modelUsages = Object.values(modelUsage ?? {}).map(modelUsageTotals);\n    metrics = extractUsage(\n      modelUsages.length > 0 ? sumUsageTotals(modelUsages) : copyUsage(message.usage),\n      true\n    );\n    if (totalCost !== void 0) {\n      metrics.estimated_cost = totalCost;\n    }\n  } else if (modelUsage) {\n    metrics = unloggedUsageMetrics(modelUsage, state.loggedLlmUsageByModel);\n  }\n  if (Object.keys(metadata).length > 0 || Object.keys(metrics).length > 0) {\n    state.span.log({\n      ...Object.keys(metadata).length > 0 ? { metadata } : {},\n      ...Object.keys(metrics).length > 0 ? { metrics } : {}\n    });\n  }\n}\nasync function finalizeQuerySpan(state) {\n  try {\n    await finalizeCurrentMessageGroup(state);\n    state.span.log({\n      output: state.finalResults.length > 0 ? state.finalResults[state.finalResults.length - 1] : void 0\n    });\n    if (state.capturedPromptMessages) {\n      if (state.promptStarted()) {\n        await state.promptDone;\n      }\n      if (state.capturedPromptMessages.length > 0) {\n        state.span.log({\n          input: formatCapturedMessages(state.capturedPromptMessages)\n        });\n      }\n    }\n  } finally {\n    for (const llmSpan of state.activeLlmSpansByParentToolUse.values()) {\n      llmSpan.end();\n    }\n    state.activeLlmSpansByParentToolUse.clear();\n    state.activePartialMessageIdByParentKey.clear();\n    state.finalOutputUsageMessageIds.clear();\n    state.usageByMessageId.clear();\n    for (const toolSpan of state.activeToolSpans.values()) {\n      toolSpan.end();\n    }\n    state.activeToolSpans.clear();\n    for (const [id, subAgentSpan] of state.subAgentSpans) {\n      if (!state.endedSubAgentSpans.has(id)) {\n        subAgentSpan.end();\n      }\n    }\n    state.subAgentSpans.clear();\n    state.span.end();\n  }\n}\nvar ClaudeAgentSDKPlugin = class extends BasePlugin {\n  onEnable() {\n    this.interceptQuery();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n  }\n  interceptQuery() {\n    const startQuery = (params) => {\n      const originalPrompt = params.prompt;\n      const options = params.options ?? {};\n      const promptIsAsyncIterable = isAsyncIterable(originalPrompt);\n      let promptStarted = false;\n      let capturedPromptMessages;\n      let resolvePromptDone;\n      const promptDone = new Promise((resolve) => {\n        resolvePromptDone = resolve;\n      });\n      if (promptIsAsyncIterable) {\n        capturedPromptMessages = [];\n        const promptStream = originalPrompt;\n        params.prompt = (async function* () {\n          promptStarted = true;\n          try {\n            for await (const message of promptStream) {\n              capturedPromptMessages.push(message);\n              yield message;\n            }\n          } finally {\n            resolvePromptDone?.();\n          }\n        })();\n      }\n      const span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: \"Claude Agent\",\n            spanAttributes: {\n              type: \"task\" /* TASK */\n            }\n          },\n          INSTRUMENTATION_NAMES.CLAUDE_AGENT_SDK\n        )\n      );\n      const startTime = getCurrentUnixTimestamp();\n      try {\n        span.log({\n          input: typeof originalPrompt === \"string\" ? originalPrompt : promptIsAsyncIterable ? void 0 : originalPrompt !== void 0 ? String(originalPrompt) : void 0,\n          metadata: filterSerializableOptions(options)\n        });\n      } catch (error) {\n        console.error(\"Error extracting input for Claude Agent SDK:\", error);\n      }\n      const activeToolSpans = /* @__PURE__ */ new Map();\n      const activeLlmSpansByParentToolUse = /* @__PURE__ */ new Map();\n      const conversationHistoryByParentKey = /* @__PURE__ */ new Map();\n      const subAgentSpans = /* @__PURE__ */ new Map();\n      const endedSubAgentSpans = /* @__PURE__ */ new Set();\n      const toolUseToParent = /* @__PURE__ */ new Map();\n      const latestLlmParentBySubAgentToolUse = /* @__PURE__ */ new Map();\n      const latestRootLlmParentRef = {\n        value: void 0\n      };\n      const subAgentDetailsByToolUseId = /* @__PURE__ */ new Map();\n      const taskIdToToolUseId = /* @__PURE__ */ new Map();\n      const promptMessagesByParentKey = /* @__PURE__ */ new Map();\n      const promptSourcePriorityByParentKey = /* @__PURE__ */ new Map();\n      const { hasLocalToolHandlers, localToolHookNames } = prepareLocalToolHandlersInMcpServers(options.mcpServers);\n      const skipLocalToolHooks = options[CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION] === true || hasLocalToolHandlers;\n      const resolveToolUseParentSpan = async (toolUseID, context) => {\n        const trackedParentToolUseId = toolUseToParent.get(toolUseID);\n        const parentToolUseId = trackedParentToolUseId ?? (context?.agentId ? taskIdToToolUseId.get(context.agentId) ?? null : null);\n        const parentKey = llmParentKey(parentToolUseId);\n        const activeLlmSpan = activeLlmSpansByParentToolUse.get(parentKey);\n        const latestLlmParent = parentToolUseId ? latestLlmParentBySubAgentToolUse.get(parentToolUseId) : latestRootLlmParentRef.value;\n        if (!activeLlmSpan && !latestLlmParent) {\n          await ensureActiveLlmSpanForParentToolUse(\n            span,\n            activeLlmSpansByParentToolUse,\n            subAgentDetailsByToolUseId,\n            activeToolSpans,\n            subAgentSpans,\n            parentToolUseId,\n            getCurrentUnixTimestamp()\n          );\n        }\n        if (parentToolUseId) {\n          const subAgentSpan = await ensureSubAgentSpan(\n            subAgentDetailsByToolUseId,\n            span,\n            activeToolSpans,\n            subAgentSpans,\n            parentToolUseId\n          );\n          return subAgentSpan.export();\n        }\n        return span.export();\n      };\n      const optionsWithHooks = injectTracingHooks(\n        options,\n        resolveToolUseParentSpan,\n        taskIdToToolUseId,\n        toolUseToParent,\n        activeToolSpans,\n        localToolHookNames,\n        skipLocalToolHooks,\n        subAgentDetailsByToolUseId,\n        subAgentSpans,\n        endedSubAgentSpans\n      );\n      params.options = optionsWithHooks;\n      return {\n        activeLlmSpansByParentToolUse,\n        activePartialMessageIdByParentKey: /* @__PURE__ */ new Map(),\n        activeToolSpans,\n        conversationHistoryByParentKey,\n        capturedPromptMessages,\n        currentMessageId: void 0,\n        currentMessageStartTime: startTime,\n        currentMessages: [],\n        endedSubAgentSpans,\n        finalOutputUsageMessageIds: /* @__PURE__ */ new Set(),\n        finalResults: [],\n        loggedLlmUsageByModel: /* @__PURE__ */ new Map(),\n        options: optionsWithHooks,\n        originalPrompt,\n        processing: Promise.resolve(),\n        promptDone,\n        promptMessagesByParentKey,\n        promptStarted: () => promptStarted,\n        promptSourcePriorityByParentKey,\n        span,\n        subAgentDetailsByToolUseId,\n        subAgentSpans,\n        taskIdToToolUseId,\n        latestLlmParentBySubAgentToolUse,\n        latestRootLlmParentRef,\n        toolUseToParent,\n        usageByMessageId: /* @__PURE__ */ new Map(),\n        localToolParentResolver: resolveToolUseParentSpan\n      };\n    };\n    const finishQuery = (state, result) => {\n      if (isAsyncIterable(result)) {\n        patchStreamIfNeeded(result, {\n          aroundNext: (callback) => runWithClaudeLocalToolContext(\n            callback,\n            state.localToolParentResolver\n          ),\n          onChunk: (message) => {\n            maybeTrackToolUseContext(state, message);\n            state.processing = state.processing.then(() => handleStreamMessage(state, message)).catch((error) => {\n              console.error(\n                \"Error processing Claude Agent SDK stream chunk:\",\n                error\n              );\n            });\n          },\n          onComplete: () => state.processing.then(() => finalizeQuerySpan(state)),\n          onError: (error) => state.processing.then(() => {\n            state.span.log({ error: error.message });\n          }).then(() => finalizeQuerySpan(state))\n        });\n        return;\n      }\n      try {\n        state.span.log({ output: result });\n      } catch (error) {\n        console.error(\"Error extracting output for Claude Agent SDK:\", error);\n      } finally {\n        state.span.end();\n      }\n    };\n    this.unsubscribers.push(\n      claudeAgentSDKChannels.query.intercept((target, thisArg, args) => {\n        let state;\n        try {\n          args[0] ??= {};\n          state = startQuery(args[0]);\n        } catch (error) {\n          debugLogger.error(\n            \"Error starting Claude Agent SDK instrumentation:\",\n            error\n          );\n        }\n        const invokeTarget = () => Reflect.apply(target, thisArg, args);\n        try {\n          const result = state ? runWithClaudeLocalToolContext(\n            invokeTarget,\n            state.localToolParentResolver\n          ) : invokeTarget();\n          if (state) {\n            try {\n              finishQuery(state, result);\n            } catch (error) {\n              debugLogger.error(\n                \"Error finalizing Claude Agent SDK instrumentation:\",\n                error\n              );\n            }\n          }\n          return result;\n        } catch (error) {\n          if (state) {\n            try {\n              state.span.log({\n                error: error instanceof Error ? error.message : String(error)\n              });\n              state.span.end();\n            } catch (instrumentationError) {\n              debugLogger.error(\n                \"Error handling Claude Agent SDK instrumentation failure:\",\n                instrumentationError\n              );\n            }\n          }\n          throw error;\n        }\n      })\n    );\n  }\n};\n\n// src/instrumentation/plugins/cloudflare-think-channels.ts\nvar cloudflareThinkChannels = defineChannels(\n  \"@cloudflare/think\",\n  {\n    runInferenceLoop: channel({\n      channelName: \"Think.runInferenceLoop\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.CLOUDFLARE_THINK }\n);\n\n// src/instrumentation/plugins/cloudflare-think-plugin.ts\nvar THINK_STATE_ID = /* @__PURE__ */ Symbol.for(\"braintrust.cloudflare-think.state-id\");\nvar CloudflareThinkPlugin = class extends BasePlugin {\n  statesBySpanId = /* @__PURE__ */ new Map();\n  onEnable() {\n    this.subscribeToThinkRuns();\n    this.subscribeToAISDKStreamTextSync();\n    this.subscribeToAISDKStreamTextAsync();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n    for (const state of this.statesBySpanId.values()) {\n      this.finishState(state);\n    }\n    this.statesBySpanId.clear();\n  }\n  subscribeToThinkRuns() {\n    const channel2 = cloudflareThinkChannels.runInferenceLoop.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const state = _internalGetGlobalState();\n    const contextManager = state?.contextManager;\n    const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n    const ensureState2 = (event) => {\n      if (isAutoInstrumentationSuppressed()) {\n        return void 0;\n      }\n      const existing = states.get(event);\n      if (existing) {\n        return existing;\n      }\n      const span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: \"Think.runTurn\",\n            spanAttributes: { type: \"task\" /* TASK */ }\n          },\n          INSTRUMENTATION_NAMES.CLOUDFLARE_THINK\n        )\n      );\n      const runState = {\n        aiResultPatched: false,\n        fallbackInput: extractFallbackInput(event.self?.messages),\n        finalized: false,\n        inputLogged: false,\n        span,\n        startTime: getCurrentUnixTimestamp()\n      };\n      const metadata = {\n        braintrust: {\n          integration_name: \"cloudflare-think\",\n          sdk_language: \"typescript\"\n        }\n      };\n      if (typeof event.moduleVersion === \"string\") {\n        metadata[\"cloudflare_think.version\"] = event.moduleVersion;\n      }\n      span.log({ metadata });\n      states.set(event, runState);\n      if (span.spanId) {\n        this.statesBySpanId.set(span.spanId, runState);\n      }\n      registerCloudflareThinkSpan(span);\n      return runState;\n    };\n    if (contextManager && currentSpanStore && channel2.start) {\n      channel2.start.bindStore(currentSpanStore, (event) => {\n        const runState = ensureState2(event);\n        return runState ? contextManager.wrapSpanForStore(runState.span) : currentSpanStore.getStore();\n      });\n      this.unsubscribers.push(\n        () => channel2.start?.unbindStore(currentSpanStore)\n      );\n    }\n    const handlers = {\n      start: (event) => {\n        ensureState2(event);\n      },\n      asyncEnd: (event) => {\n        const runState = states.get(event);\n        states.delete(event);\n        if (!runState || runState.finalized || runState.aiResultPatched) {\n          return;\n        }\n        this.finishState(runState, void 0, event.result);\n      },\n      error: (event) => {\n        const runState = states.get(event);\n        states.delete(event);\n        if (runState) {\n          this.finishState(runState, event.error);\n        }\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => channel2.unsubscribe(handlers));\n  }\n  subscribeToAISDKStreamTextSync() {\n    const channel2 = aiSDKChannels.streamTextSync.tracingChannel();\n    const handlers = {\n      start: (event) => {\n        this.startAISDKStream(event);\n      },\n      end: (event) => {\n        this.endAISDKStream(event);\n      },\n      error: (event) => {\n        this.errorAISDKStream(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => channel2.unsubscribe(handlers));\n  }\n  subscribeToAISDKStreamTextAsync() {\n    const channel2 = aiSDKChannels.streamText.tracingChannel();\n    const handlers = {\n      start: (event) => {\n        this.startAISDKStream(event);\n      },\n      asyncEnd: (event) => {\n        this.endAISDKStream(event);\n      },\n      error: (event) => {\n        this.errorAISDKStream(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => channel2.unsubscribe(handlers));\n  }\n  startAISDKStream(event) {\n    const runState = this.currentState();\n    if (!runState || runState.finalized) {\n      return;\n    }\n    try {\n      const prepared = prepareAISDKAgentCallInput(\n        event.arguments[0],\n        event,\n        runState.span\n      );\n      runState.span.log({\n        input: extractThinkTaskInput(prepared.input),\n        metadata: {\n          ...prepared.metadata,\n          braintrust: {\n            integration_name: \"cloudflare-think\",\n            sdk_language: \"typescript\"\n          }\n        }\n      });\n      runState.inputLogged = true;\n      runState.aiEvent = event;\n      Reflect.set(event, THINK_STATE_ID, runState.span.spanId);\n    } catch (error) {\n      debugLogger.error(\n        \"Error preparing @cloudflare/think AI SDK tracing:\",\n        error\n      );\n    }\n  }\n  endAISDKStream(event) {\n    const runState = this.stateForAISDKEvent(event);\n    if (!runState || runState.finalized) {\n      return;\n    }\n    const patched = patchAISDKStreamingResult({\n      defaultDenyOutputPaths: DEFAULT_DENY_OUTPUT_PATHS,\n      endEvent: event,\n      forceTopLevelMetrics: true,\n      onComplete: () => this.releaseState(runState),\n      result: event.result,\n      span: runState.span,\n      startTime: runState.startTime,\n      transformOutput: extractThinkTaskOutput\n    });\n    runState.aiResultPatched = patched;\n    if (!patched) {\n      this.finishState(runState, void 0, event.result);\n    }\n  }\n  errorAISDKStream(event) {\n    const runState = this.stateForAISDKEvent(event);\n    if (runState) {\n      this.finishState(runState, event.error);\n    }\n  }\n  currentState() {\n    const parentIds = _internalGetGlobalState()?.contextManager.getParentSpanIds()?.spanParents ?? [];\n    for (const parentId of parentIds) {\n      const state = this.statesBySpanId.get(parentId);\n      if (state) {\n        return state;\n      }\n    }\n    return void 0;\n  }\n  stateForAISDKEvent(event) {\n    const spanId = Reflect.get(event, THINK_STATE_ID);\n    return typeof spanId === \"string\" ? this.statesBySpanId.get(spanId) : void 0;\n  }\n  finishState(state, error, output) {\n    if (state.finalized) {\n      return;\n    }\n    state.finalized = true;\n    try {\n      if (!state.inputLogged && state.fallbackInput !== void 0) {\n        state.span.log({ input: state.fallbackInput });\n      }\n      if (error !== void 0) {\n        state.span.log({ error });\n      } else if (output !== void 0) {\n        state.span.log({ output: extractThinkTaskOutput(output) });\n      }\n      finalizeAISDKChildTracing(state.aiEvent);\n      state.span.end();\n    } finally {\n      this.releaseState(state);\n    }\n  }\n  releaseState(state) {\n    state.finalized = true;\n    unregisterCloudflareThinkSpan(state.span);\n    if (state.span.spanId) {\n      this.statesBySpanId.delete(state.span.spanId);\n    }\n  }\n};\nfunction extractFallbackInput(messages) {\n  if (!Array.isArray(messages) || messages.length === 0) {\n    return void 0;\n  }\n  let latestUserIndex = -1;\n  for (let index = messages.length - 1; index >= 0; index--) {\n    if (messages[index]?.role === \"user\") {\n      latestUserIndex = index;\n      break;\n    }\n  }\n  const selected = latestUserIndex >= 0 ? messages.slice(latestUserIndex) : [];\n  return selected.map((message) => ({\n    role: message.role,\n    content: message.content ?? message.parts\n  }));\n}\nfunction extractThinkTaskOutput(output) {\n  if (!isObject(output)) {\n    return output;\n  }\n  if (typeof output.text === \"string\") {\n    return { role: \"assistant\", content: output.text };\n  }\n  if (output.object !== void 0) {\n    return output.object;\n  }\n  return output;\n}\nfunction extractThinkTaskInput(input) {\n  if (!isObject(input)) {\n    return input;\n  }\n  const system = input.instructions ?? input.system;\n  if (Array.isArray(input.messages)) {\n    return system === void 0 ? input.messages : [{ role: \"system\", content: system }, ...input.messages];\n  }\n  if (Array.isArray(input.prompt)) {\n    return system === void 0 ? input.prompt : [{ role: \"system\", content: system }, ...input.prompt];\n  }\n  if (typeof input.prompt === \"string\") {\n    const messages = [{ role: \"user\", content: input.prompt }];\n    return system === void 0 ? messages : [{ role: \"system\", content: system }, ...messages];\n  }\n  return input;\n}\n\n// src/instrumentation/plugins/cursor-sdk-channels.ts\nvar cursorSDKChannels = defineChannels(\n  \"@cursor/sdk\",\n  {\n    create: channel({\n      channelName: \"Agent.create\",\n      kind: \"async\"\n    }),\n    resume: channel({\n      channelName: \"Agent.resume\",\n      kind: \"async\"\n    }),\n    prompt: channel({\n      channelName: \"Agent.prompt\",\n      kind: \"async\"\n    }),\n    send: channel({\n      channelName: \"agent.send\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.CURSOR_SDK }\n);\n\n// src/instrumentation/plugins/cursor-sdk-plugin.ts\nvar PATCHED_AGENT = /* @__PURE__ */ Symbol.for(\"braintrust.cursor-sdk.auto-patched-agent\");\nvar PATCHED_RUN = /* @__PURE__ */ Symbol.for(\"braintrust.cursor-sdk.patched-run\");\nvar WRAPPED_AGENT = /* @__PURE__ */ Symbol.for(\"braintrust.cursor-sdk.wrapped-agent\");\nvar CursorSDKPlugin = class extends BasePlugin {\n  promptDepth = 0;\n  onEnable() {\n    this.subscribeToAgentFactories();\n    this.subscribeToPrompt();\n    this.subscribeToSend();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n    this.promptDepth = 0;\n  }\n  subscribeToAgentFactories() {\n    this.subscribeToAgentFactory(cursorSDKChannels.create);\n    this.subscribeToAgentFactory(cursorSDKChannels.resume);\n  }\n  subscribeToAgentFactory(channel2) {\n    const tracingChannel = channel2.tracingChannel();\n    const handlers = {\n      asyncEnd: (event) => {\n        patchCursorAgentInPlace(event.result);\n      },\n      error: () => {\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToPrompt() {\n    const channel2 = cursorSDKChannels.prompt.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        this.promptDepth += 1;\n        const message = event.arguments[0];\n        const options = event.arguments[1];\n        const metadata = {\n          ...extractAgentOptionsMetadata(options),\n          \"cursor_sdk.operation\": \"Agent.prompt\",\n          provider: \"cursor\",\n          ...event.moduleVersion ? { \"cursor_sdk.version\": event.moduleVersion } : {}\n        };\n        const span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name: \"Cursor Agent\",\n              spanAttributes: { type: \"task\" /* TASK */ }\n            },\n            INSTRUMENTATION_NAMES.CURSOR_SDK\n          )\n        );\n        const startTime = getCurrentUnixTimestamp();\n        safeLog2(span, {\n          input: sanitizeUserMessage(message),\n          metadata\n        });\n        states.set(event, { metadata, span, startTime });\n      },\n      asyncEnd: (event) => {\n        this.promptDepth = Math.max(0, this.promptDepth - 1);\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        try {\n          safeLog2(state.span, {\n            metadata: {\n              ...state.metadata,\n              ...extractRunResultMetadata(event.result)\n            },\n            metrics: buildDurationMetrics2(state.startTime),\n            output: event.result?.result ?? event.result\n          });\n        } finally {\n          state.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        this.promptDepth = Math.max(0, this.promptDepth - 1);\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        safeLog2(state.span, { error: event.error.message });\n        state.span.end();\n        states.delete(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n  subscribeToSend() {\n    const channel2 = cursorSDKChannels.send.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        if (this.promptDepth > 0) {\n          return;\n        }\n        const message = event.arguments[0];\n        const sendOptions = event.arguments[1];\n        const agent = event.agent;\n        const metadata = {\n          ...extractSendMetadata(sendOptions),\n          ...agent ? extractAgentMetadata(agent) : {},\n          \"cursor_sdk.operation\": \"agent.send\",\n          provider: \"cursor\",\n          ...event.moduleVersion ? { \"cursor_sdk.version\": event.moduleVersion } : {}\n        };\n        const span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name: \"Cursor Agent\",\n              spanAttributes: { type: \"task\" /* TASK */ }\n            },\n            INSTRUMENTATION_NAMES.CURSOR_SDK\n          )\n        );\n        const startTime = getCurrentUnixTimestamp();\n        safeLog2(span, {\n          input: sanitizeUserMessage(message),\n          metadata\n        });\n        const state = {\n          activeToolSpans: /* @__PURE__ */ new Map(),\n          agent,\n          conversationText: [],\n          deltaText: [],\n          finalized: false,\n          input: message,\n          metadata,\n          metrics: {},\n          span,\n          startTime,\n          streamMessages: [],\n          streamText: [],\n          stepText: [],\n          taskText: []\n        };\n        if (hasCursorCallbacks(sendOptions)) {\n          event.arguments[1] = wrapSendOptionsCallbacks(sendOptions, state);\n        }\n        states.set(event, state);\n      },\n      asyncEnd: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        if (!event.result) {\n          return;\n        }\n        state.run = event.result;\n        state.metadata = {\n          ...state.metadata,\n          ...extractRunMetadata(event.result)\n        };\n        patchCursorRun(event.result, state);\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        safeLog2(state.span, { error: event.error.message });\n        endOpenToolSpans(state, event.error.message);\n        state.span.end();\n        state.finalized = true;\n        states.delete(event);\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      channel2.unsubscribe(handlers);\n    });\n  }\n};\nfunction patchCursorAgentInPlace(agent) {\n  if (!agent || typeof agent !== \"object\") {\n    return;\n  }\n  const agentRecord = agent;\n  if (agentRecord[PATCHED_AGENT] || agentRecord[WRAPPED_AGENT] || typeof agentRecord.send !== \"function\") {\n    return;\n  }\n  const originalSend = agentRecord.send.bind(agentRecord);\n  try {\n    Object.defineProperty(agentRecord, PATCHED_AGENT, {\n      configurable: false,\n      enumerable: false,\n      value: true\n    });\n    Object.defineProperty(agentRecord, \"send\", {\n      configurable: true,\n      value(message, options) {\n        const args = [message, options];\n        return cursorSDKChannels.send.tracePromise(\n          () => originalSend(...args),\n          {\n            agent: agentRecord,\n            arguments: args,\n            operation: \"send\"\n          }\n        );\n      },\n      writable: true\n    });\n  } catch {\n  }\n}\nfunction wrapSendOptionsCallbacks(options, state) {\n  const originalOnDelta = options.onDelta;\n  const originalOnStep = options.onStep;\n  return {\n    ...options,\n    async onDelta(args) {\n      try {\n        await handleInteractionUpdate(state, args.update);\n      } catch (error) {\n        logInstrumentationError3(\"Cursor SDK onDelta\", error);\n      }\n      if (originalOnDelta) {\n        return originalOnDelta(args);\n      }\n    },\n    async onStep(args) {\n      try {\n        handleStepUpdate(state, args.step);\n      } catch (error) {\n        logInstrumentationError3(\"Cursor SDK onStep\", error);\n      }\n      if (originalOnStep) {\n        return originalOnStep(args);\n      }\n    }\n  };\n}\nfunction hasCursorCallbacks(options) {\n  return !!options && (typeof options.onDelta === \"function\" || typeof options.onStep === \"function\");\n}\nfunction patchCursorRun(run, state) {\n  if (!run || typeof run !== \"object\") {\n    return;\n  }\n  const runRecord = run;\n  if (runRecord[PATCHED_RUN]) {\n    return;\n  }\n  try {\n    Object.defineProperty(runRecord, PATCHED_RUN, {\n      configurable: false,\n      enumerable: false,\n      value: true\n    });\n    if (typeof runRecord.stream === \"function\") {\n      const originalStream = runRecord.stream.bind(runRecord);\n      Object.defineProperty(runRecord, \"stream\", {\n        configurable: true,\n        value() {\n          const stream = originalStream();\n          return patchCursorStream(stream, state);\n        },\n        writable: true\n      });\n    }\n    if (typeof runRecord.wait === \"function\") {\n      const originalWait = runRecord.wait.bind(runRecord);\n      Object.defineProperty(runRecord, \"wait\", {\n        configurable: true,\n        async value() {\n          try {\n            const result = await originalWait();\n            state.lastResult = result;\n            await finalizeCursorRun(state, { result });\n            return result;\n          } catch (error) {\n            await finalizeCursorRun(state, { error });\n            throw error;\n          }\n        },\n        writable: true\n      });\n    }\n    if (typeof runRecord.conversation === \"function\") {\n      const originalConversation = runRecord.conversation.bind(runRecord);\n      Object.defineProperty(runRecord, \"conversation\", {\n        configurable: true,\n        async value() {\n          try {\n            const conversation = await originalConversation();\n            await handleConversation(state, conversation);\n            await finalizeCursorRun(state);\n            return conversation;\n          } catch (error) {\n            await finalizeCursorRun(state, { error });\n            throw error;\n          }\n        },\n        writable: true\n      });\n    }\n  } catch {\n    void finalizeCursorRun(state, { output: run });\n  }\n}\nasync function* patchCursorStream(stream, state) {\n  try {\n    for await (const message of stream) {\n      try {\n        await handleStreamMessage2(state, message);\n      } catch (error) {\n        logInstrumentationError3(\"Cursor SDK stream\", error);\n      }\n      yield message;\n    }\n    await finalizeCursorRun(state);\n  } catch (error) {\n    await finalizeCursorRun(state, { error });\n    throw error;\n  }\n}\nasync function handleInteractionUpdate(state, update) {\n  switch (update.type) {\n    case \"text-delta\":\n      if (typeof update.text === \"string\") {\n        state.deltaText.push(update.text);\n      }\n      return;\n    case \"token-delta\":\n      if (typeof update.tokens === \"number\") {\n        state.metrics[\"cursor_sdk.delta_tokens\"] = (state.metrics[\"cursor_sdk.delta_tokens\"] ?? 0) + update.tokens;\n      }\n      return;\n    case \"tool-call-started\":\n    case \"partial-tool-call\":\n    case \"tool-call-completed\":\n      await handleToolUpdate(\n        state,\n        update\n      );\n      return;\n    case \"turn-ended\":\n      addUsageMetrics(\n        state.metrics,\n        update.usage\n      );\n      return;\n    case \"summary\":\n      if (typeof update.summary === \"string\") {\n        state.taskText.push(update.summary);\n      }\n      return;\n    case \"step-completed\":\n      if (typeof update.stepDurationMs === \"number\") {\n        state.metrics[\"cursor_sdk.step_duration_ms\"] = (state.metrics[\"cursor_sdk.step_duration_ms\"] ?? 0) + update.stepDurationMs;\n      }\n      state.metrics[\"cursor_sdk.steps\"] = (state.metrics[\"cursor_sdk.steps\"] ?? 0) + 1;\n      return;\n    default:\n      return;\n  }\n}\nasync function handleToolUpdate(state, update) {\n  const callId = update.callId;\n  if (!callId) {\n    return;\n  }\n  const toolCall = update.toolCall;\n  const name = extractToolName(toolCall);\n  const args = extractToolArgs(toolCall);\n  const result = extractToolResult(toolCall);\n  if (update.type === \"tool-call-started\" || update.type === \"partial-tool-call\") {\n    if (!state.activeToolSpans.has(callId)) {\n      state.activeToolSpans.set(\n        callId,\n        await startToolSpan2(state, {\n          args,\n          callId,\n          name,\n          status: \"running\",\n          toolCall\n        })\n      );\n    }\n    return;\n  }\n  const toolState = state.activeToolSpans.get(callId) ?? await startToolSpan2(state, {\n    args,\n    callId,\n    name,\n    status: \"completed\",\n    toolCall\n  });\n  finishToolSpan(toolState, {\n    error: toolCall?.status === \"error\" ? toLoggedError(result) : void 0,\n    metadata: {\n      \"cursor_sdk.tool.status\": toolCall?.status ?? \"completed\"\n    },\n    output: result\n  });\n  state.activeToolSpans.delete(callId);\n}\nasync function handleStreamMessage2(state, message) {\n  state.streamMessages.push(message);\n  if (message.type === \"system\") {\n    const systemMessage = message;\n    state.metadata = {\n      ...state.metadata,\n      ...extractModelMetadata(systemMessage.model),\n      ...systemMessage.agent_id ? { \"cursor_sdk.agent_id\": systemMessage.agent_id } : {},\n      ...systemMessage.run_id ? { \"cursor_sdk.run_id\": systemMessage.run_id } : {},\n      ...systemMessage.tools ? { \"cursor_sdk.tools\": systemMessage.tools } : {}\n    };\n    return;\n  }\n  if (message.type === \"assistant\") {\n    const assistantMessage = message;\n    for (const block of assistantMessage.message?.content ?? []) {\n      if (block?.type === \"text\" && typeof block.text === \"string\") {\n        state.streamText.push(block.text);\n      } else if (block?.type === \"tool_use\" && block.id) {\n        state.activeToolSpans.set(\n          block.id,\n          await startToolSpan2(state, {\n            args: block.input,\n            callId: block.id,\n            name: block.name,\n            status: \"running\"\n          })\n        );\n      }\n    }\n    return;\n  }\n  if (message.type === \"tool_call\") {\n    await handleToolMessage(\n      state,\n      message\n    );\n    return;\n  }\n  if (message.type === \"task\" && typeof message.text === \"string\") {\n    state.taskText.push(message.text);\n    return;\n  }\n  if (message.type === \"status\" && message.status) {\n    state.metadata[\"cursor_sdk.status\"] = message.status;\n  }\n}\nasync function handleToolMessage(state, message) {\n  const callId = message.call_id;\n  if (!callId) {\n    return;\n  }\n  if (message.status === \"running\") {\n    if (!state.activeToolSpans.has(callId)) {\n      state.activeToolSpans.set(\n        callId,\n        await startToolSpan2(state, {\n          args: message.args,\n          callId,\n          name: message.name,\n          status: message.status,\n          truncated: message.truncated\n        })\n      );\n    }\n    return;\n  }\n  const toolState = state.activeToolSpans.get(callId) ?? await startToolSpan2(state, {\n    args: message.args,\n    callId,\n    name: message.name,\n    status: message.status,\n    truncated: message.truncated\n  });\n  finishToolSpan(toolState, {\n    error: message.status === \"error\" ? toLoggedError(message.result) : void 0,\n    metadata: {\n      \"cursor_sdk.tool.status\": message.status\n    },\n    output: message.result\n  });\n  state.activeToolSpans.delete(callId);\n}\nasync function handleConversation(state, turns) {\n  state.conversationOutput = turns;\n  for (const turn of turns) {\n    if (turn.type === \"agentConversationTurn\") {\n      for (const step of turn.turn?.steps ?? []) {\n        await handleConversationStep(state, step);\n      }\n    } else if (turn.type === \"shellConversationTurn\") {\n      const command = turn.turn?.shellCommand?.command;\n      if (command) {\n        const callId = `shell:${state.activeToolSpans.size}:${command}`;\n        const toolState = await startToolSpan2(state, {\n          args: turn.turn?.shellCommand,\n          callId,\n          name: \"shell\",\n          status: \"completed\"\n        });\n        finishToolSpan(toolState, {\n          metadata: { \"cursor_sdk.tool.status\": \"completed\" },\n          output: turn.turn?.shellOutput\n        });\n      }\n    }\n  }\n}\nasync function handleConversationStep(state, step) {\n  if (step.type === \"assistantMessage\" && typeof step.message?.text === \"string\") {\n    state.conversationText.push(step.message.text);\n    return;\n  }\n  if (step.type !== \"toolCall\") {\n    return;\n  }\n  const toolCall = step.message;\n  const callId = typeof toolCall?.callId === \"string\" ? toolCall.callId : `conversation-tool:${state.activeToolSpans.size}`;\n  const toolState = await startToolSpan2(state, {\n    args: extractToolArgs(toolCall),\n    callId,\n    name: extractToolName(toolCall),\n    status: toolCall?.status,\n    toolCall\n  });\n  finishToolSpan(toolState, {\n    error: toolCall?.status === \"error\" ? toLoggedError(toolCall.result) : void 0,\n    metadata: {\n      \"cursor_sdk.tool.status\": toolCall?.status ?? \"completed\"\n    },\n    output: extractToolResult(toolCall)\n  });\n}\nfunction handleStepUpdate(state, step) {\n  state.metrics[\"cursor_sdk.steps\"] = (state.metrics[\"cursor_sdk.steps\"] ?? 0) + 1;\n  if (step.type) {\n    const stepTypes = state.metadata[\"cursor_sdk.step_types\"];\n    if (Array.isArray(stepTypes)) {\n      if (!stepTypes.includes(step.type)) {\n        stepTypes.push(step.type);\n      }\n    } else {\n      state.metadata[\"cursor_sdk.step_types\"] = [step.type];\n    }\n  }\n  if (step.type === \"assistantMessage\" && typeof step.message?.text === \"string\") {\n    state.stepText.push(step.message.text);\n  }\n}\nasync function startToolSpan2(state, args) {\n  const name = args.name || \"unknown\";\n  const metadata = {\n    \"cursor_sdk.tool.status\": args.status,\n    \"gen_ai.tool.call.id\": args.callId,\n    \"gen_ai.tool.name\": name\n  };\n  if (args.truncated?.args !== void 0) {\n    metadata[\"cursor_sdk.tool.args_truncated\"] = args.truncated.args;\n  }\n  if (args.truncated?.result !== void 0) {\n    metadata[\"cursor_sdk.tool.result_truncated\"] = args.truncated.result;\n  }\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          input: args.args,\n          metadata\n        },\n        name: `tool: ${name}`,\n        parent: await state.span.export(),\n        spanAttributes: { type: \"tool\" /* TOOL */ }\n      },\n      INSTRUMENTATION_NAMES.CURSOR_SDK\n    )\n  );\n  let subAgentSpan;\n  if (isSubAgentToolName(name)) {\n    subAgentSpan = startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: args.args,\n            metadata: {\n              \"cursor_sdk.subagent.tool_call_id\": args.callId,\n              \"gen_ai.tool.name\": name\n            }\n          },\n          name: formatSubAgentSpanName2(args.toolCall, args.args),\n          parent: await span.export(),\n          spanAttributes: { type: \"task\" /* TASK */ }\n        },\n        INSTRUMENTATION_NAMES.CURSOR_SDK\n      )\n    );\n  }\n  return { span, subAgentSpan };\n}\nfunction finishToolSpan(toolState, result) {\n  try {\n    if (result.error) {\n      safeLog2(toolState.span, {\n        error: result.error,\n        metadata: result.metadata,\n        output: result.output\n      });\n      if (toolState.subAgentSpan) {\n        safeLog2(toolState.subAgentSpan, {\n          error: result.error,\n          metadata: result.metadata,\n          output: result.output\n        });\n      }\n    } else {\n      safeLog2(toolState.span, {\n        metadata: result.metadata,\n        output: result.output\n      });\n      if (toolState.subAgentSpan) {\n        safeLog2(toolState.subAgentSpan, {\n          metadata: result.metadata,\n          output: result.output\n        });\n      }\n    }\n  } finally {\n    toolState.subAgentSpan?.end();\n    toolState.span.end();\n  }\n}\nasync function finalizeCursorRun(state, params = {}) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  const error = params.error;\n  const result = params.result ?? state.lastResult;\n  const output = params.output ?? result?.result ?? state.run?.result ?? (state.conversationText.length > 0 ? state.conversationText.join(\"\\n\") : void 0) ?? state.conversationOutput ?? (state.streamText.length > 0 ? state.streamText.join(\"\") : void 0) ?? (state.deltaText.length > 0 ? state.deltaText.join(\"\") : void 0) ?? (state.stepText.length > 0 ? state.stepText.join(\"\\n\") : void 0) ?? (state.taskText.length > 0 ? state.taskText.join(\"\\n\") : void 0);\n  try {\n    const metadata = {\n      ...state.metadata,\n      ...state.run ? extractRunMetadata(state.run) : {},\n      ...result ? extractRunResultMetadata(result) : {}\n    };\n    if (error) {\n      safeLog2(state.span, {\n        error: toLoggedError(error),\n        metadata,\n        metrics: {\n          ...cleanMetrics2(state.metrics),\n          ...buildDurationMetrics2(state.startTime)\n        },\n        output\n      });\n    } else {\n      safeLog2(state.span, {\n        metadata,\n        metrics: {\n          ...cleanMetrics2(state.metrics),\n          ...buildDurationMetrics2(state.startTime)\n        },\n        output\n      });\n    }\n  } finally {\n    endOpenToolSpans(state);\n    state.span.end();\n  }\n}\nfunction endOpenToolSpans(state, error) {\n  for (const [, toolState] of state.activeToolSpans) {\n    finishToolSpan(toolState, { error });\n  }\n  state.activeToolSpans.clear();\n}\nfunction sanitizeUserMessage(message) {\n  if (typeof message === \"string\" || message === void 0) {\n    return message;\n  }\n  return {\n    ...message,\n    images: message.images?.map((image) => {\n      const imageRecord = image;\n      return {\n        ...typeof imageRecord.url === \"string\" ? { url: imageRecord.url } : {},\n        ...typeof imageRecord.mimeType === \"string\" ? { mimeType: imageRecord.mimeType } : {},\n        ...image.dimension ? { dimension: image.dimension } : {},\n        hasData: typeof imageRecord.data === \"string\"\n      };\n    })\n  };\n}\nfunction extractAgentOptionsMetadata(options) {\n  if (!options) {\n    return {};\n  }\n  return {\n    ...extractModelMetadata(options.model),\n    ...options.agentId ? { \"cursor_sdk.agent_id\": options.agentId } : {},\n    ...options.name ? { \"cursor_sdk.agent_name\": options.name } : {},\n    ...options.local ? {\n      \"cursor_sdk.runtime\": \"local\",\n      \"cursor_sdk.local.cwd\": Array.isArray(options.local.cwd) ? options.local.cwd.join(\",\") : options.local.cwd\n    } : {},\n    ...options.cloud ? {\n      \"cursor_sdk.runtime\": \"cloud\",\n      \"cursor_sdk.cloud.auto_create_pr\": options.cloud.autoCreatePR,\n      \"cursor_sdk.cloud.env_type\": options.cloud.env?.type,\n      \"cursor_sdk.cloud.env_name\": options.cloud.env?.name,\n      \"cursor_sdk.cloud.repos\": options.cloud.repos?.map((repo) => repo.url).filter((url) => typeof url === \"string\")\n    } : {}\n  };\n}\nfunction extractSendMetadata(options) {\n  if (!options) {\n    return {};\n  }\n  return {\n    ...extractModelMetadata(options.model),\n    ...options.local?.force !== void 0 ? { \"cursor_sdk.local.force\": options.local.force } : {}\n  };\n}\nfunction extractAgentMetadata(agent) {\n  return {\n    ...agent.agentId ? { \"cursor_sdk.agent_id\": agent.agentId } : {},\n    ...extractModelMetadata(agent.model)\n  };\n}\nfunction extractRunMetadata(run) {\n  if (!run) {\n    return {};\n  }\n  return {\n    ...run.id ? { \"cursor_sdk.run_id\": run.id } : {},\n    ...run.agentId ? { \"cursor_sdk.agent_id\": run.agentId } : {},\n    ...run.status ? { \"cursor_sdk.status\": run.status } : {},\n    ...run.durationMs !== void 0 ? { \"cursor_sdk.duration_ms\": run.durationMs } : {},\n    ...extractModelMetadata(run.model),\n    ...extractGitMetadata(run.git)\n  };\n}\nfunction extractRunResultMetadata(result) {\n  if (!result) {\n    return {};\n  }\n  return {\n    ...result.id ? { \"cursor_sdk.run_id\": result.id } : {},\n    ...result.status ? { \"cursor_sdk.status\": result.status } : {},\n    ...result.durationMs !== void 0 ? { \"cursor_sdk.duration_ms\": result.durationMs } : {},\n    ...extractModelMetadata(result.model),\n    ...extractGitMetadata(result.git)\n  };\n}\nfunction extractGitMetadata(git) {\n  const branches = git?.branches;\n  if (!branches || branches.length === 0) {\n    return {};\n  }\n  return {\n    \"cursor_sdk.git.branches\": branches.map((branch) => ({\n      branch: branch.branch,\n      prUrl: branch.prUrl,\n      repoUrl: branch.repoUrl\n    }))\n  };\n}\nfunction extractModelMetadata(model) {\n  if (!model?.id) {\n    return {};\n  }\n  return {\n    model: model.id,\n    \"cursor_sdk.model\": model.id,\n    ...model.params ? { \"cursor_sdk.model.params\": model.params } : {}\n  };\n}\nfunction addUsageMetrics(metrics, usage) {\n  if (!usage) {\n    return;\n  }\n  if (usage.inputTokens !== void 0) {\n    metrics.prompt_tokens = (metrics.prompt_tokens ?? 0) + usage.inputTokens;\n  }\n  if (usage.outputTokens !== void 0) {\n    metrics.completion_tokens = (metrics.completion_tokens ?? 0) + usage.outputTokens;\n  }\n  if (usage.cacheReadTokens !== void 0) {\n    metrics.prompt_cached_tokens = (metrics.prompt_cached_tokens ?? 0) + usage.cacheReadTokens;\n  }\n  if (usage.cacheWriteTokens !== void 0) {\n    metrics.prompt_cache_creation_tokens = (metrics.prompt_cache_creation_tokens ?? 0) + usage.cacheWriteTokens;\n  }\n  metrics.tokens = (metrics.prompt_tokens ?? 0) + (metrics.completion_tokens ?? 0) + (metrics.prompt_cached_tokens ?? 0) + (metrics.prompt_cache_creation_tokens ?? 0);\n}\nfunction buildDurationMetrics2(startTime) {\n  const end = getCurrentUnixTimestamp();\n  return {\n    duration: end - startTime,\n    end,\n    start: startTime\n  };\n}\nfunction extractToolName(toolCall) {\n  if (!toolCall) {\n    return \"unknown\";\n  }\n  if (typeof toolCall.name === \"string\") {\n    return toolCall.name;\n  }\n  if (typeof toolCall.type === \"string\") {\n    return toolCall.type;\n  }\n  return \"unknown\";\n}\nfunction extractToolArgs(toolCall) {\n  return toolCall && \"args\" in toolCall ? toolCall.args : void 0;\n}\nfunction extractToolResult(toolCall) {\n  return toolCall && \"result\" in toolCall ? toolCall.result : void 0;\n}\nfunction isSubAgentToolName(name) {\n  return name === \"Agent\" || name === \"Task\" || name === \"task\";\n}\nfunction formatSubAgentSpanName2(toolCall, args) {\n  const details = toolCall ?? args;\n  const description = getString(details, \"description\") ?? getString(details, \"subagent_type\") ?? getString(details, \"type\") ?? getString(details, \"name\");\n  return description ? `Agent: ${description}` : \"Agent: sub-agent\";\n}\nfunction getString(obj, key) {\n  const value = obj?.[key];\n  return typeof value === \"string\" ? value : void 0;\n}\nfunction safeLog2(span, event) {\n  try {\n    span.log(event);\n  } catch (error) {\n    logInstrumentationError3(\"Cursor SDK span log\", error);\n  }\n}\nfunction logInstrumentationError3(context, error) {\n  debugLogger.error(`Error processing ${context}:`, error);\n}\nfunction cleanMetrics2(metrics) {\n  const cleaned = {};\n  for (const [key, value] of Object.entries(metrics)) {\n    if (value !== void 0 && Number.isFinite(value)) {\n      cleaned[key] = value;\n    }\n  }\n  return cleaned;\n}\n\n// src/instrumentation/plugins/openai-agents-channels.ts\nvar openAIAgentsCoreChannels = defineChannels(\n  \"@openai/agents-core\",\n  {\n    onTraceStart: channel({\n      channelName: \"tracing.processor.onTraceStart\",\n      kind: \"async\"\n    }),\n    onTraceEnd: channel({\n      channelName: \"tracing.processor.onTraceEnd\",\n      kind: \"async\"\n    }),\n    onSpanStart: channel({\n      channelName: \"tracing.processor.onSpanStart\",\n      kind: \"async\"\n    }),\n    onSpanEnd: channel({\n      channelName: \"tracing.processor.onSpanEnd\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.OPENAI_AGENTS }\n);\n\n// src/instrumentation/plugins/openai-agents-trace-processor.ts\nfunction isSpanData(spanData, type) {\n  return spanData.type === type;\n}\nfunction spanTypeFromAgents(span) {\n  const spanType = span.spanData.type;\n  if (spanType === \"function\" || spanType === \"guardrail\" || spanType === \"mcp_tools\") {\n    return \"tool\" /* TOOL */;\n  }\n  if (spanType === \"generation\" || spanType === \"response\" || spanType === \"transcription\" || spanType === \"speech\") {\n    return \"llm\" /* LLM */;\n  }\n  return \"task\" /* TASK */;\n}\nfunction spanNameFromAgents(span) {\n  const spanData = span.spanData;\n  if (\"name\" in spanData && spanData.name) {\n    return spanData.name;\n  }\n  switch (spanData.type) {\n    case \"generation\":\n      return \"Generation\";\n    case \"response\":\n      return \"Response\";\n    case \"handoff\":\n      return \"Handoff\";\n    case \"mcp_tools\":\n      return isSpanData(spanData, \"mcp_tools\") && spanData.server ? `List Tools (${spanData.server})` : \"MCP List Tools\";\n    case \"transcription\":\n      return \"Transcription\";\n    case \"speech\":\n      return \"Speech\";\n    case \"speech_group\":\n      return \"Speech Group\";\n    default:\n      return \"Unknown\";\n  }\n}\nfunction getTimeElapsed(end, start) {\n  if (!start || !end) {\n    return void 0;\n  }\n  const startTime = new Date(start).getTime();\n  const endTime = new Date(end).getTime();\n  if (Number.isNaN(startTime) || Number.isNaN(endTime)) {\n    return void 0;\n  }\n  return (endTime - startTime) / 1e3;\n}\nfunction getNumberProperty2(obj, key) {\n  if (!isObject(obj) || !(key in obj)) {\n    return void 0;\n  }\n  const value = obj[key];\n  return typeof value === \"number\" ? value : void 0;\n}\nfunction parseUsageMetrics(usage) {\n  const metrics = {};\n  if (!isObject(usage)) {\n    return metrics;\n  }\n  const promptTokens = getNumberProperty2(usage, \"prompt_tokens\") ?? getNumberProperty2(usage, \"input_tokens\") ?? getNumberProperty2(usage, \"promptTokens\") ?? getNumberProperty2(usage, \"inputTokens\");\n  const completionTokens = getNumberProperty2(usage, \"completion_tokens\") ?? getNumberProperty2(usage, \"output_tokens\") ?? getNumberProperty2(usage, \"completionTokens\") ?? getNumberProperty2(usage, \"outputTokens\");\n  const totalTokens = getNumberProperty2(usage, \"total_tokens\") ?? getNumberProperty2(usage, \"totalTokens\");\n  if (promptTokens !== void 0) {\n    metrics.prompt_tokens = promptTokens;\n  }\n  if (completionTokens !== void 0) {\n    metrics.completion_tokens = completionTokens;\n  }\n  if (totalTokens !== void 0) {\n    metrics.tokens = totalTokens;\n  } else if (promptTokens !== void 0 && completionTokens !== void 0) {\n    metrics.tokens = promptTokens + completionTokens;\n  }\n  const inputDetails = usage.input_tokens_details;\n  const cachedTokens = getNumberProperty2(inputDetails, \"cached_tokens\");\n  const cacheWriteTokens = getNumberProperty2(\n    inputDetails,\n    \"cache_write_tokens\"\n  );\n  if (cachedTokens !== void 0) {\n    metrics.prompt_cached_tokens = cachedTokens;\n  }\n  if (cacheWriteTokens !== void 0) {\n    metrics.prompt_cache_creation_tokens = cacheWriteTokens;\n  }\n  return metrics;\n}\nvar OpenAIAgentsTraceProcessor = class _OpenAIAgentsTraceProcessor {\n  static DEFAULT_MAX_TRACES = 1e4;\n  logger;\n  maxTraces;\n  traceSpans = /* @__PURE__ */ new Map();\n  traceOrder = [];\n  _traceSpans = this.traceSpans;\n  constructor(options = {}) {\n    this.logger = options.logger;\n    this.maxTraces = options.maxTraces ?? _OpenAIAgentsTraceProcessor.DEFAULT_MAX_TRACES;\n  }\n  evictOldestTrace() {\n    const oldestTraceId = this.traceOrder.shift();\n    if (oldestTraceId) {\n      this.traceSpans.delete(oldestTraceId);\n    }\n  }\n  onTraceStart(trace) {\n    if (!trace?.traceId) {\n      return Promise.resolve();\n    }\n    if (this.traceOrder.length >= this.maxTraces) {\n      this.evictOldestTrace();\n    }\n    const current = currentSpan();\n    const spanArgs = withSpanInstrumentationName(\n      {\n        name: trace.name,\n        type: \"task\" /* TASK */\n      },\n      INSTRUMENTATION_NAMES.OPENAI_AGENTS\n    );\n    const span = current && current !== NOOP_SPAN ? current.startSpan(spanArgs) : this.logger ? this.logger.startSpan(spanArgs) : startSpan(\n      withSpanInstrumentationName(\n        spanArgs,\n        INSTRUMENTATION_NAMES.OPENAI_AGENTS\n      )\n    );\n    span.log({\n      input: \"Agent workflow started\",\n      metadata: {\n        group_id: trace.groupId,\n        ...trace.metadata || {}\n      }\n    });\n    this.traceSpans.set(trace.traceId, {\n      rootSpan: span,\n      childSpans: /* @__PURE__ */ new Map(),\n      metadata: {\n        firstInput: null,\n        lastOutput: null\n      }\n    });\n    this.traceOrder.push(trace.traceId);\n    return Promise.resolve();\n  }\n  async onTraceEnd(trace) {\n    const traceData = this.traceSpans.get(trace?.traceId);\n    if (!traceData) {\n      return;\n    }\n    try {\n      traceData.rootSpan.log({\n        input: traceData.metadata.firstInput,\n        output: traceData.metadata.lastOutput\n      });\n      traceData.rootSpan.end();\n      await traceData.rootSpan.flush();\n    } finally {\n      this.traceSpans.delete(trace.traceId);\n      const orderIndex = this.traceOrder.indexOf(trace.traceId);\n      if (orderIndex > -1) {\n        this.traceOrder.splice(orderIndex, 1);\n      }\n    }\n  }\n  onSpanStart(span) {\n    if (!span?.spanId || !span.traceId) {\n      return Promise.resolve();\n    }\n    const traceData = this.traceSpans.get(span.traceId);\n    if (!traceData) {\n      return Promise.resolve();\n    }\n    const parentSpan = span.parentId ? traceData.childSpans.get(span.parentId) : traceData.rootSpan;\n    if (!parentSpan) {\n      return Promise.resolve();\n    }\n    const childSpan = parentSpan.startSpan(\n      withSpanInstrumentationName(\n        {\n          name: spanNameFromAgents(span),\n          type: spanTypeFromAgents(span)\n        },\n        INSTRUMENTATION_NAMES.OPENAI_AGENTS\n      )\n    );\n    traceData.childSpans.set(span.spanId, childSpan);\n    return Promise.resolve();\n  }\n  onSpanEnd(span) {\n    if (!span?.spanId || !span.traceId) {\n      return Promise.resolve();\n    }\n    const traceData = this.traceSpans.get(span.traceId);\n    if (!traceData) {\n      return Promise.resolve();\n    }\n    const braintrustSpan = traceData.childSpans.get(span.spanId);\n    if (!braintrustSpan) {\n      return Promise.resolve();\n    }\n    const logData = this.extractLogData(span);\n    braintrustSpan.log({\n      error: span.error,\n      ...logData\n    });\n    braintrustSpan.end();\n    traceData.childSpans.delete(span.spanId);\n    const input = logData.input;\n    const output = logData.output;\n    if (traceData.metadata.firstInput === null && input != null) {\n      traceData.metadata.firstInput = input;\n    }\n    if (output != null) {\n      traceData.metadata.lastOutput = output;\n    }\n    return Promise.resolve();\n  }\n  async shutdown() {\n    if (this.logger && typeof this.logger.flush === \"function\") {\n      await this.logger.flush();\n    }\n  }\n  async forceFlush() {\n    if (this.logger && typeof this.logger.flush === \"function\") {\n      await this.logger.flush();\n    }\n  }\n  extractLogData(span) {\n    const spanData = span.spanData;\n    switch (spanData.type) {\n      case \"agent\":\n        return this.extractAgentLogData(spanData);\n      case \"response\":\n        return this.extractResponseLogData(spanData, span);\n      case \"function\":\n        return this.extractFunctionLogData(spanData);\n      case \"handoff\":\n        return this.extractHandoffLogData(spanData);\n      case \"guardrail\":\n        return this.extractGuardrailLogData(spanData);\n      case \"generation\":\n        return this.extractGenerationLogData(spanData, span);\n      case \"custom\":\n        return this.extractCustomLogData(spanData);\n      case \"mcp_tools\":\n        return this.extractMCPListToolsLogData(spanData);\n      case \"transcription\":\n        return this.extractTranscriptionLogData(spanData);\n      case \"speech\":\n        return this.extractSpeechLogData(spanData);\n      case \"speech_group\":\n        return this.extractSpeechGroupLogData(spanData);\n      default:\n        return {};\n    }\n  }\n  extractAgentLogData(spanData) {\n    return {\n      metadata: {\n        tools: spanData.tools,\n        handoffs: spanData.handoffs,\n        output_type: spanData.output_type\n      }\n    };\n  }\n  extractResponseLogData(spanData, span) {\n    const response = spanData._response;\n    const output = isObject(response) ? response.output : void 0;\n    const usage = isObject(response) ? response.usage : void 0;\n    const metrics = {\n      ...this.extractTimingMetrics(span),\n      ...parseUsageMetrics(usage)\n    };\n    return {\n      input: spanData._input,\n      output,\n      metadata: isObject(response) ? this.omitKeys(response, [\"output\", \"usage\"]) : {},\n      metrics\n    };\n  }\n  extractFunctionLogData(spanData) {\n    return {\n      input: spanData.input,\n      output: spanData.output\n    };\n  }\n  extractHandoffLogData(spanData) {\n    return {\n      metadata: {\n        from_agent: spanData.from_agent,\n        to_agent: spanData.to_agent\n      }\n    };\n  }\n  extractGuardrailLogData(spanData) {\n    return {\n      metadata: {\n        triggered: spanData.triggered\n      }\n    };\n  }\n  extractGenerationLogData(spanData, span) {\n    return {\n      input: spanData.input,\n      output: spanData.output,\n      metadata: {\n        model: spanData.model,\n        model_config: spanData.model_config\n      },\n      metrics: {\n        ...this.extractTimingMetrics(span),\n        ...parseUsageMetrics(spanData.usage)\n      }\n    };\n  }\n  extractCustomLogData(spanData) {\n    return spanData.data || {};\n  }\n  extractMCPListToolsLogData(spanData) {\n    return {\n      output: spanData.result,\n      metadata: {\n        server: spanData.server\n      }\n    };\n  }\n  extractTranscriptionLogData(spanData) {\n    return {\n      input: spanData.input,\n      output: spanData.output,\n      metadata: {\n        model: spanData.model,\n        model_config: spanData.model_config\n      }\n    };\n  }\n  extractSpeechLogData(spanData) {\n    return {\n      input: spanData.input,\n      output: spanData.output,\n      metadata: {\n        model: spanData.model,\n        model_config: spanData.model_config\n      }\n    };\n  }\n  extractSpeechGroupLogData(spanData) {\n    return {\n      input: spanData.input\n    };\n  }\n  extractTimingMetrics(span) {\n    const timeToFirstToken = getTimeElapsed(\n      span.endedAt ?? void 0,\n      span.startedAt ?? void 0\n    );\n    return timeToFirstToken === void 0 ? {} : { time_to_first_token: timeToFirstToken };\n  }\n  omitKeys(value, keys) {\n    const result = {};\n    for (const [key, fieldValue] of Object.entries(value)) {\n      if (!keys.includes(key)) {\n        result[key] = fieldValue;\n      }\n    }\n    return result;\n  }\n};\n\n// src/instrumentation/plugins/openai-agents-plugin.ts\nfunction firstArgument(args) {\n  if (Array.isArray(args)) {\n    return args[0];\n  }\n  if (isObject(args) && \"length\" in args && typeof args.length === \"number\" && Number.isInteger(args.length) && args.length >= 0) {\n    return Array.from(args)[0];\n  }\n  return void 0;\n}\nfunction isOpenAIAgentsTrace(value) {\n  return isObject(value) && value.type === \"trace\" && typeof value.traceId === \"string\";\n}\nfunction isOpenAIAgentsSpan(value) {\n  return isObject(value) && value.type === \"trace.span\" && typeof value.traceId === \"string\" && typeof value.spanId === \"string\";\n}\nvar OpenAIAgentsPlugin = class extends BasePlugin {\n  processor = new OpenAIAgentsTraceProcessor();\n  onEnable() {\n    this.subscribeToTraceLifecycle();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n    void this.processor.shutdown();\n  }\n  subscribeToTraceLifecycle() {\n    const traceStartChannel = openAIAgentsCoreChannels.onTraceStart.tracingChannel();\n    const traceStartHandlers = {\n      start: (event) => {\n        const trace = firstArgument(event.arguments);\n        if (isOpenAIAgentsTrace(trace)) {\n          void this.processor.onTraceStart(trace);\n        }\n      }\n    };\n    traceStartChannel.subscribe(traceStartHandlers);\n    this.unsubscribers.push(\n      () => traceStartChannel.unsubscribe(traceStartHandlers)\n    );\n    const traceEndChannel = openAIAgentsCoreChannels.onTraceEnd.tracingChannel();\n    const traceEndHandlers = {\n      start: (event) => {\n        const trace = firstArgument(event.arguments);\n        if (isOpenAIAgentsTrace(trace)) {\n          void this.processor.onTraceEnd(trace);\n        }\n      }\n    };\n    traceEndChannel.subscribe(traceEndHandlers);\n    this.unsubscribers.push(\n      () => traceEndChannel.unsubscribe(traceEndHandlers)\n    );\n    const spanStartChannel = openAIAgentsCoreChannels.onSpanStart.tracingChannel();\n    const spanStartHandlers = {\n      start: (event) => {\n        const span = firstArgument(event.arguments);\n        if (isOpenAIAgentsSpan(span)) {\n          void this.processor.onSpanStart(span);\n        }\n      }\n    };\n    spanStartChannel.subscribe(spanStartHandlers);\n    this.unsubscribers.push(\n      () => spanStartChannel.unsubscribe(spanStartHandlers)\n    );\n    const spanEndChannel = openAIAgentsCoreChannels.onSpanEnd.tracingChannel();\n    const spanEndHandlers = {\n      start: (event) => {\n        const span = firstArgument(event.arguments);\n        if (isOpenAIAgentsSpan(span)) {\n          void this.processor.onSpanEnd(span);\n        }\n      }\n    };\n    spanEndChannel.subscribe(spanEndHandlers);\n    this.unsubscribers.push(() => spanEndChannel.unsubscribe(spanEndHandlers));\n  }\n};\n\n// src/instrumentation/plugins/google-generative-ai-channels.ts\nvar googleGenerativeAIChannels = defineChannels(\n  \"@google/generative-ai\",\n  {\n    generateContent: channel({ channelName: \"GenerativeModel.generateContent\", kind: \"async\" }),\n    generateContentStream: channel({ channelName: \"GenerativeModel.generateContentStream\", kind: \"async\" }),\n    embedContent: channel({ channelName: \"GenerativeModel.embedContent\", kind: \"async\" }),\n    batchEmbedContents: channel({ channelName: \"GenerativeModel.batchEmbedContents\", kind: \"async\" }),\n    sendMessage: channel({ channelName: \"ChatSession.sendMessage\", kind: \"async\" }),\n    sendMessageStream: channel({ channelName: \"ChatSession.sendMessageStream\", kind: \"async\" })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GOOGLE_GENERATIVE_AI }\n);\n\n// src/instrumentation/plugins/google-generative-ai-plugin.ts\nvar GENERATION_CONFIG_KEYS = [\n  \"temperature\",\n  \"topP\",\n  \"topK\",\n  \"candidateCount\",\n  \"maxOutputTokens\",\n  \"stopSequences\",\n  \"responseMimeType\",\n  \"responseSchema\",\n  \"presencePenalty\",\n  \"frequencyPenalty\",\n  \"responseLogprobs\",\n  \"logprobs\",\n  \"thinkingConfig\"\n];\nvar GoogleGenerativeAIPlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      interceptCall(\n        googleGenerativeAIChannels.generateContent,\n        \"generateContent\"\n      ),\n      interceptCall(\n        googleGenerativeAIChannels.generateContentStream,\n        \"generateContentStream\"\n      ),\n      interceptCall(googleGenerativeAIChannels.sendMessage, \"sendMessage\"),\n      interceptCall(\n        googleGenerativeAIChannels.sendMessageStream,\n        \"sendMessageStream\"\n      ),\n      interceptCall(googleGenerativeAIChannels.embedContent, \"embedContent\"),\n      interceptCall(\n        googleGenerativeAIChannels.batchEmbedContents,\n        \"batchEmbedContents\"\n      )\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction interceptCall(channel2, operation) {\n  return channel2.intercept((target, thisArg, args) => {\n    const invokeTarget = () => Reflect.apply(target, thisArg, args);\n    if (isAutoInstrumentationSuppressed()) return invokeTarget();\n    const self = thisArg;\n    const chat = operation.startsWith(\"sendMessage\");\n    const embedding = operation === \"embedContent\" || operation === \"batchEmbedContents\";\n    const start = getCurrentUnixTimestamp();\n    let span;\n    try {\n      span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: embedding ? operation === \"embedContent\" ? \"embed_content\" : \"batch_embed_contents\" : \"generate_content\",\n            spanAttributes: { type: \"llm\" /* LLM */ },\n            event: extractInput(self, args[0], operation)\n          },\n          INSTRUMENTATION_NAMES.GOOGLE_GENERATIVE_AI\n        )\n      );\n    } catch (error) {\n      debugLogger.error(\"Error starting Google Generative AI span:\", error);\n      return invokeTarget();\n    }\n    let ended = false;\n    const finish = (log3) => {\n      if (ended) return;\n      ended = true;\n      try {\n        log3();\n      } catch (error) {\n        debugLogger.error(\"Error logging Google Generative AI span:\", error);\n      }\n      try {\n        span.end();\n      } catch (error) {\n        debugLogger.error(\"Error ending Google Generative AI span:\", error);\n      }\n    };\n    if (chat) {\n      try {\n        void self._sendPromise.then(\n          () => {\n            try {\n              span.log(extractInput(self, args[0], operation));\n            } catch (error) {\n              debugLogger.error(\"Error capturing Google chat history:\", error);\n            }\n          },\n          () => {\n          }\n        );\n      } catch (error) {\n        debugLogger.error(\"Error observing Google chat history:\", error);\n      }\n    }\n    let result;\n    try {\n      result = withCurrent(\n        span,\n        () => runWithAutoInstrumentationSuppressed(invokeTarget)\n      );\n    } catch (error) {\n      finish(() => span.log({ error }));\n      throw error;\n    }\n    void Promise.resolve(result).then(\n      (value) => {\n        try {\n          if (\"stream\" in value) {\n            let firstToken = false;\n            const partial = { candidates: [] };\n            const candidates = /* @__PURE__ */ new Map();\n            patchStreamIfNeeded(value.stream, {\n              aroundNext: (callback) => withCurrent(span, callback),\n              onChunk: (chunk) => {\n                for (const candidate of chunk.candidates ?? []) {\n                  const index = candidate.index ?? 0;\n                  const previous = candidates.get(index);\n                  const parts = [...previous?.content?.parts ?? []];\n                  for (const part of candidate.content?.parts ?? []) {\n                    const last = parts[parts.length - 1];\n                    if (part.text !== void 0 && last?.text !== void 0) {\n                      parts[parts.length - 1] = {\n                        ...last,\n                        text: last.text + part.text\n                      };\n                    } else parts.push(part);\n                  }\n                  candidates.set(index, {\n                    ...previous,\n                    ...candidate,\n                    content: {\n                      role: candidate.content?.role ?? previous?.content?.role ?? \"model\",\n                      parts\n                    }\n                  });\n                }\n                partial.candidates = Array.from(candidates.values());\n                if (chunk.usageMetadata)\n                  partial.usageMetadata = chunk.usageMetadata;\n                if (!firstToken && chunk.candidates?.some(\n                  (candidate) => candidate.content?.parts.some(\n                    (part) => part.text !== void 0 ? part.text.length > 0 : Object.keys(part).length > 0\n                  )\n                )) {\n                  firstToken = true;\n                  span.log({\n                    metrics: {\n                      time_to_first_token: getCurrentUnixTimestamp() - start\n                    }\n                  });\n                }\n              },\n              onComplete: () => {\n              },\n              onError: (error) => finish(() => {\n                logResponse(span, partial);\n                span.log({ error });\n              }),\n              onCancel: () => finish(() => logResponse(span, partial))\n            });\n            void value.response.then(\n              (response) => finish(() => logResponse(span, response)),\n              (error) => finish(() => {\n                logResponse(span, partial);\n                span.log({ error });\n              })\n            );\n          } else if (\"response\" in value) {\n            finish(() => logResponse(span, value.response));\n          } else {\n            const metrics = {};\n            const promptTokens = value.usageMetadata?.promptTokenCount;\n            if (typeof promptTokens === \"number\" && Number.isFinite(promptTokens) && promptTokens >= 0) {\n              metrics.prompt_tokens = promptTokens;\n              metrics.tokens = promptTokens;\n            }\n            for (const detail of value.usageMetadata?.promptTokenDetails ?? []) {\n              if (detail.modality === \"AUDIO\" && typeof detail.tokenCount === \"number\" && Number.isFinite(detail.tokenCount) && detail.tokenCount >= 0) {\n                metrics.prompt_audio_tokens = (metrics.prompt_audio_tokens ?? 0) + detail.tokenCount;\n              }\n            }\n            finish(\n              () => span.log({\n                metrics,\n                output: {\n                  count: value.embeddings?.length ?? (value.embedding ? 1 : 0)\n                }\n              })\n            );\n          }\n        } catch (error) {\n          debugLogger.error(\n            \"Error observing Google Generative AI result:\",\n            error\n          );\n          finish(() => {\n          });\n        }\n      },\n      (error) => finish(() => span.log({ error }))\n    );\n    return result;\n  });\n}\nfunction normalizeContent(message) {\n  const parts = (typeof message === \"string\" ? [message] : message).map(\n    (part) => typeof part === \"string\" ? { text: part } : part\n  );\n  return {\n    role: parts.some((part) => part.functionResponse) ? \"function\" : \"user\",\n    parts\n  };\n}\nfunction extractInput(self, request, operation) {\n  const model = self.model.replace(/^models\\//, \"\");\n  if (operation === \"embedContent\" || operation === \"batchEmbedContents\") {\n    const requests = operation === \"batchEmbedContents\" ? request.requests : [\n      typeof request === \"string\" || Array.isArray(request) ? { content: normalizeContent(request) } : request\n    ];\n    const dimensions = requests[0]?.outputDimensionality;\n    return {\n      input: {\n        inputs: convertAttachments(requests).map((item) => ({\n          content: item.content.parts.length === 1 && item.content.parts[0].text !== void 0 ? item.content.parts[0].text : item.content.parts.map((part) => {\n            if (part.text !== void 0)\n              return { type: \"text\", text: part.text };\n            const mimeType = part.inlineData?.mimeType ?? part.fileData?.mimeType;\n            const data = part.inlineData ? typeof part.inlineData.data === \"string\" ? `data:${mimeType};base64,${part.inlineData.data}` : part.inlineData.data : part.fileData?.fileUri;\n            return mimeType?.startsWith(\"image/\") ? { type: \"image_url\", image_url: { url: data } } : { type: \"file\", file: { file_data: data } };\n          })\n        })),\n        ...dimensions !== void 0 && requests.every((item) => item.outputDimensionality === dimensions) ? { output_dimensions: dimensions } : {}\n      },\n      metadata: { model, provider: \"google\" }\n    };\n  }\n  const chat = operation.startsWith(\"sendMessage\");\n  const config = chat ? self.params ?? {} : self;\n  const params = typeof request === \"string\" || Array.isArray(request) ? { contents: [normalizeContent(request)] } : request;\n  const system = params.systemInstruction ?? config.systemInstruction;\n  const systemContent = typeof system === \"string\" ? { role: \"system\", parts: [{ text: system }] } : system && \"parts\" in system ? { ...system, role: \"system\" } : system ? { role: \"system\", parts: [system] } : void 0;\n  const contents = [\n    ...systemContent ? [systemContent] : [],\n    ...chat ? self._history : [],\n    ...params.contents\n  ];\n  const metadata = { model, provider: \"google\" };\n  const generation = params.generationConfig ?? config.generationConfig;\n  for (const key of GENERATION_CONFIG_KEYS) {\n    if (generation && Object.hasOwn(generation, key))\n      metadata[key] = generation[key];\n  }\n  for (const key of [\"tools\", \"toolConfig\", \"safetySettings\"]) {\n    const value = params[key] ?? config[key];\n    if (value !== void 0) metadata[key] = value;\n  }\n  const cached = params.cachedContent ?? config.cachedContent;\n  if (cached)\n    metadata.cachedContent = typeof cached === \"string\" ? cached : cached.name;\n  return { input: convertAttachments({ model, contents }), metadata };\n}\nfunction convertAttachments(value) {\n  const convert = (node) => {\n    if (Array.isArray(node)) return node.map(convert);\n    if (!isObject(node)) return node;\n    if (isObject(node.inlineData)) {\n      const { data, mimeType } = node.inlineData;\n      const processed = processInputAttachments({\n        type: \"file\",\n        file: { file_data: `data:${mimeType};base64,${data}` }\n      });\n      if (typeof processed.file.file_data === \"string\")\n        throw new Error(\"Unable to convert Google inline data\");\n      return {\n        ...node,\n        inlineData: { ...node.inlineData, data: processed.file.file_data }\n      };\n    }\n    return Object.fromEntries(\n      Object.entries(node).map(([key, item]) => [key, convert(item)])\n    );\n  };\n  try {\n    return convert(value);\n  } catch (error) {\n    debugLogger.error(\n      \"Error converting Google Generative AI attachments:\",\n      error\n    );\n    return value;\n  }\n}\nfunction logResponse(span, response) {\n  const usage = response.usageMetadata;\n  const metrics = {};\n  if (usage) {\n    if (usage.promptTokenCount !== void 0)\n      metrics.prompt_tokens = usage.promptTokenCount;\n    if (usage.candidatesTokenCount !== void 0 || usage.thoughtsTokenCount !== void 0)\n      metrics.completion_tokens = (usage.candidatesTokenCount ?? 0) + (usage.thoughtsTokenCount ?? 0);\n    if (usage.totalTokenCount !== void 0)\n      metrics.tokens = usage.totalTokenCount;\n    if (usage.cachedContentTokenCount !== void 0)\n      metrics.prompt_cached_tokens = usage.cachedContentTokenCount;\n    if (usage.thoughtsTokenCount !== void 0)\n      metrics.completion_reasoning_tokens = usage.thoughtsTokenCount;\n  }\n  span.log({\n    output: convertAttachments({\n      candidates: response.candidates,\n      promptFeedback: response.promptFeedback\n    }),\n    metrics,\n    ...response.modelVersion ? { metadata: { model: response.modelVersion } } : {}\n  });\n}\n\n// src/instrumentation/plugins/google-genai-channels.ts\nvar googleGenAIChannels = defineChannels(\n  \"@google/genai\",\n  {\n    generateContent: channel({\n      channelName: \"models.generateContent\",\n      kind: \"async\"\n    }),\n    generateContentStream: channel({\n      channelName: \"models.generateContentStream\",\n      kind: \"async\"\n    }),\n    embedContent: channel({\n      channelName: \"models.embedContent\",\n      kind: \"async\"\n    }),\n    generateImages: channel({\n      channelName: \"models.generateImages\",\n      kind: \"async\"\n    }),\n    editImage: channel({\n      channelName: \"models.editImage\",\n      kind: \"async\"\n    }),\n    generateVideos: channel({\n      channelName: \"models.generateVideos\",\n      kind: \"async\"\n    }),\n    httpResponseJson: channel({\n      channelName: \"httpResponse.json\",\n      kind: \"async\"\n    }),\n    interactionsCreate: channel({\n      channelName: \"interactions.create\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GOOGLE_GENAI }\n);\n\n// src/instrumentation/plugins/google-genai-plugin.ts\nvar GOOGLE_GENAI_INTERNAL_CONTEXT = {\n  caller_filename: \"<node-internal>\",\n  caller_functionname: \"<node-internal>\",\n  caller_lineno: 0\n};\nfunction createWrapperParityEvent(args) {\n  return {\n    context: GOOGLE_GENAI_INTERNAL_CONTEXT,\n    input: args.input,\n    metadata: args.metadata\n  };\n}\nvar GoogleGenAIPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToGoogleGenAIChannels();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToGoogleGenAIChannels() {\n    this.subscribeToGenerateContentChannel();\n    this.subscribeToGenerateContentStreamChannel();\n    this.subscribeToEmbedContentChannel();\n    this.subscribeToInteractionsCreateChannel();\n    this.subscribeToGenerateImagesChannel();\n    this.subscribeToEditImageChannel();\n    this.subscribeToGenerateVideosChannel();\n  }\n  subscribeToGenerateContentChannel() {\n    const tracingChannel = googleGenAIChannels.generateContent.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const unbindCurrentSpanStore = bindCurrentSpanStoreToStart2(\n      tracingChannel,\n      states,\n      (event) => {\n        const params = event.arguments[0];\n        const input = serializeGenerateContentInput(params);\n        const metadata = extractGenerateContentMetadata(params);\n        const span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name: \"generate_content\",\n              spanAttributes: {\n                type: \"llm\" /* LLM */\n              },\n              event: createWrapperParityEvent({ input, metadata })\n            },\n            INSTRUMENTATION_NAMES.GOOGLE_GENAI\n          )\n        );\n        return {\n          span,\n          startTime: getCurrentUnixTimestamp()\n        };\n      }\n    );\n    const handlers = {\n      start: (event) => {\n        ensureSpanState(states, event, () => {\n          const params = event.arguments[0];\n          const input = serializeGenerateContentInput(params);\n          const metadata = extractGenerateContentMetadata(params);\n          const span = startSpan(\n            withSpanInstrumentationName(\n              {\n                name: \"generate_content\",\n                spanAttributes: {\n                  type: \"llm\" /* LLM */\n                },\n                event: createWrapperParityEvent({ input, metadata })\n              },\n              INSTRUMENTATION_NAMES.GOOGLE_GENAI\n            )\n          );\n          return {\n            span,\n            startTime: getCurrentUnixTimestamp()\n          };\n        });\n      },\n      asyncEnd: (event) => {\n        const spanState = states.get(event);\n        if (!spanState) {\n          return;\n        }\n        try {\n          const responseMetadata = extractResponseMetadata(event.result);\n          spanState.span.log({\n            ...responseMetadata ? { metadata: responseMetadata } : {},\n            metrics: cleanMetrics3(\n              extractGenerateContentMetrics(\n                event.result,\n                spanState.startTime\n              )\n            ),\n            output: serializeGenerateContentOutput(event.result)\n          });\n        } finally {\n          spanState.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        logErrorAndEndSpan(states, event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToGenerateContentStreamChannel() {\n    const tracingChannel = googleGenAIChannels.generateContentStream.tracingChannel();\n    const handlers = {\n      start: (event) => {\n        const streamEvent = event;\n        const params = event.arguments[0];\n        streamEvent.googleGenAIInput = serializeGenerateContentInput(params);\n        streamEvent.googleGenAIMetadata = extractGenerateContentMetadata(params);\n        streamEvent.googleGenAIStartTime = getCurrentUnixTimestamp();\n      },\n      asyncEnd: (event) => {\n        const streamEvent = event;\n        patchGoogleGenAIStreamingResult({\n          input: streamEvent.googleGenAIInput,\n          metadata: streamEvent.googleGenAIMetadata,\n          startTime: streamEvent.googleGenAIStartTime,\n          result: streamEvent.result\n        });\n      },\n      error: () => {\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToEmbedContentChannel() {\n    const tracingChannel = googleGenAIChannels.embedContent.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const embeddingSpans = /* @__PURE__ */ new WeakSet();\n    this.unsubscribers.push(\n      googleGenAIChannels.httpResponseJson.intercept(\n        (target, thisArg, args) => {\n          const span = currentSpan();\n          const result = Reflect.apply(target, thisArg, args);\n          if (embeddingSpans.has(span)) {\n            void Promise.resolve(result).then(\n              (response) => {\n                try {\n                  const metrics = cleanMetrics3(\n                    extractEmbedContentMetrics(response)\n                  );\n                  if (embeddingSpans.has(span) && Object.keys(metrics).length > 0) {\n                    span.log({ metrics });\n                  }\n                } catch (error) {\n                  debugLogger.error(\n                    \"Error reading Google GenAI embedding usage:\",\n                    error\n                  );\n                }\n              },\n              () => {\n              }\n              // The embedding channel handles the original rejection.\n            );\n          }\n          return result;\n        }\n      )\n    );\n    const unbindCurrentSpanStore = bindCurrentSpanStoreToStart2(\n      tracingChannel,\n      states,\n      (event) => {\n        const params = event.arguments[0];\n        const input = serializeEmbedContentInput(params);\n        const metadata = { provider: \"google\", model: params.model };\n        const span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name: \"embed_content\",\n              spanAttributes: {\n                type: \"llm\" /* LLM */\n              },\n              event: createWrapperParityEvent({ input, metadata })\n            },\n            INSTRUMENTATION_NAMES.GOOGLE_GENAI\n          )\n        );\n        embeddingSpans.add(span);\n        return {\n          span,\n          startTime: getCurrentUnixTimestamp()\n        };\n      }\n    );\n    const handlers = {\n      start: (event) => {\n        ensureSpanState(states, event, () => {\n          const params = event.arguments[0];\n          const input = serializeEmbedContentInput(params);\n          const metadata = { provider: \"google\", model: params.model };\n          const span = startSpan(\n            withSpanInstrumentationName(\n              {\n                name: \"embed_content\",\n                spanAttributes: {\n                  type: \"llm\" /* LLM */\n                },\n                event: createWrapperParityEvent({ input, metadata })\n              },\n              INSTRUMENTATION_NAMES.GOOGLE_GENAI\n            )\n          );\n          embeddingSpans.add(span);\n          return {\n            span,\n            startTime: getCurrentUnixTimestamp()\n          };\n        });\n      },\n      asyncEnd: (event) => {\n        const spanState = states.get(event);\n        if (!spanState) {\n          return;\n        }\n        try {\n          spanState.span.log({\n            output: summarizeEmbedContentOutput(event.result),\n            metrics: cleanMetrics3(\n              extractEmbedContentMetrics(event.result, spanState.startTime)\n            )\n          });\n        } finally {\n          embeddingSpans.delete(spanState.span);\n          spanState.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        const spanState = states.get(event);\n        if (!spanState) return;\n        try {\n          spanState.span.log({ error: event.error, output: { count: 0 } });\n        } finally {\n          embeddingSpans.delete(spanState.span);\n          spanState.span.end();\n          states.delete(event);\n        }\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToInteractionsCreateChannel() {\n    this.unsubscribers.push(\n      traceStreamingChannel(\n        googleGenAIChannels.interactionsCreate,\n        {\n          name: ([params]) => isVideoInteractionCreate(params) ? \"generate_video\" : \"create_interaction\",\n          shouldTrace: ([params]) => !isBackgroundInteractionCreate(params),\n          type: \"llm\" /* LLM */,\n          extractInput: ([params]) => ({\n            input: isVideoInteractionCreate(params) ? serializeVideoInteractionInput(params) : serializeInteractionInput(params),\n            metadata: isVideoInteractionCreate(params) ? { model: params.model, provider: \"google\" } : extractInteractionMetadata(params)\n          }),\n          extractOutput: (result, event) => isVideoInteractionCreate(event?.arguments?.[0]) || getInteractionVideoOutput(result).length > 0 ? serializeVideoInteractionOutput(result) : serializeInteractionValue(result),\n          extractMetadata: (result) => extractInteractionResponseMetadata(result),\n          extractMetrics: (result, startTime) => cleanMetrics3(extractInteractionMetrics(result, startTime)),\n          aggregateChunks: (chunks, _result, _event, startTime) => aggregateInteractionEvents(chunks, startTime)\n        }\n      )\n    );\n  }\n  subscribeToGenerateImagesChannel() {\n    this.unsubscribers.push(\n      interceptGoogleGenAIMediaCall(\n        googleGenAIChannels.generateImages,\n        \"generate_images\",\n        serializeGenerateImagesInput,\n        serializeGenerateImagesOutput\n      )\n    );\n  }\n  subscribeToEditImageChannel() {\n    this.unsubscribers.push(\n      interceptGoogleGenAIMediaCall(\n        googleGenAIChannels.editImage,\n        \"edit_image\",\n        serializeEditImageInput,\n        serializeGenerateImagesOutput\n      )\n    );\n  }\n  subscribeToGenerateVideosChannel() {\n    this.unsubscribers.push(\n      interceptGoogleGenAIMediaCall(\n        googleGenAIChannels.generateVideos,\n        \"generate_videos\",\n        serializeGenerateVideosInput,\n        serializeGenerateVideosOutput\n      )\n    );\n  }\n};\nfunction interceptGoogleGenAIMediaCall(channel2, name, serializeInput, serializeOutput) {\n  return channel2.intercept((target, thisArg, args) => {\n    const invoke2 = () => Reflect.apply(target, thisArg, args);\n    if (isAutoInstrumentationSuppressed()) {\n      return invoke2();\n    }\n    const [params] = args;\n    let span;\n    try {\n      span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name,\n            spanAttributes: { type: \"llm\" /* LLM */ },\n            event: createWrapperParityEvent({\n              input: serializeInput(params),\n              metadata: { model: params.model, provider: \"google\" }\n            })\n          },\n          INSTRUMENTATION_NAMES.GOOGLE_GENAI\n        )\n      );\n    } catch (error) {\n      debugLogger.error(`Error starting Google GenAI ${name} span:`, error);\n      return invoke2();\n    }\n    let ended = false;\n    const finish = (error) => {\n      if (ended) {\n        return;\n      }\n      ended = true;\n      try {\n        if (error !== void 0) {\n          span.log({ error });\n        }\n        span.end();\n      } catch (loggingError) {\n        debugLogger.error(\n          `Error ending Google GenAI ${name} span:`,\n          loggingError\n        );\n      }\n    };\n    let result;\n    try {\n      result = withCurrent(\n        span,\n        () => runWithAutoInstrumentationSuppressed(invoke2)\n      );\n    } catch (error) {\n      finish(error);\n      throw error;\n    }\n    try {\n      void Promise.resolve(result).then((response) => {\n        try {\n          span.log({ output: serializeOutput(response, params) });\n        } catch (error) {\n          debugLogger.error(\n            `Error capturing Google GenAI ${name} output:`,\n            error\n          );\n        } finally {\n          finish();\n        }\n      }, finish);\n    } catch (error) {\n      debugLogger.error(`Error observing Google GenAI ${name} result:`, error);\n      finish();\n    }\n    return result;\n  });\n}\nfunction isBackgroundInteractionCreate(params) {\n  return tryToDict(params)?.background === true;\n}\nfunction ensureSpanState(states, event, create) {\n  const existing = states.get(event);\n  if (existing) {\n    return existing;\n  }\n  const created = create();\n  states.set(event, created);\n  return created;\n}\nfunction bindCurrentSpanStoreToStart2(tracingChannel, states, create) {\n  const state = _internalGetGlobalState();\n  const contextManager = state?.contextManager;\n  const startChannel = tracingChannel.start;\n  const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n  if (!startChannel?.bindStore || !currentSpanStore) {\n    return void 0;\n  }\n  startChannel.bindStore(currentSpanStore, (event) => {\n    const span = ensureSpanState(\n      states,\n      event,\n      () => create(event)\n    ).span;\n    return contextManager.wrapSpanForStore(span);\n  });\n  return () => {\n    startChannel.unbindStore?.(currentSpanStore);\n  };\n}\nfunction logErrorAndEndSpan(states, event) {\n  const spanState = states.get(event);\n  if (!spanState) {\n    return;\n  }\n  spanState.span.log({\n    error: event.error.message\n  });\n  spanState.span.end();\n  states.delete(event);\n}\nfunction patchGoogleGenAIStreamingResult(args) {\n  const { input, metadata, result, startTime } = args;\n  if (!input || !metadata || !result || typeof result !== \"object\" || typeof result.next !== \"function\") {\n    return false;\n  }\n  const chunks = [];\n  let firstTokenTime = null;\n  let finalized = false;\n  let span = null;\n  const requestStartTime = startTime ?? getCurrentUnixTimestamp();\n  const ensureSpan = () => {\n    if (!span) {\n      span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: \"generate_content_stream\",\n            spanAttributes: {\n              type: \"llm\" /* LLM */\n            },\n            event: {\n              input,\n              metadata\n            }\n          },\n          INSTRUMENTATION_NAMES.GOOGLE_GENAI\n        )\n      );\n    }\n    return span;\n  };\n  const finalize = (options) => {\n    if (finalized || !span) {\n      return;\n    }\n    finalized = true;\n    if (options.result) {\n      const { end, ...metricsWithoutEnd } = options.result.metrics;\n      const responseMetadata = extractResponseMetadata(\n        options.result.aggregated\n      );\n      span.log({\n        ...responseMetadata ? { metadata: responseMetadata } : {},\n        metrics: cleanMetrics3(metricsWithoutEnd),\n        output: options.result.aggregated\n      });\n      span.end(typeof end === \"number\" ? { endTime: end } : void 0);\n      return;\n    }\n    if (options.error !== void 0) {\n      span.log({\n        error: options.error instanceof Error ? options.error.message : String(options.error)\n      });\n    }\n    span.end();\n  };\n  const patchIterator = (iterator) => {\n    if (typeof iterator !== \"object\" || iterator === null || \"__braintrustGoogleGenAIPatched\" in iterator) {\n      return iterator;\n    }\n    const iteratorRecord = iterator;\n    const originalNext = typeof iteratorRecord.next === \"function\" ? iteratorRecord.next.bind(iterator) : void 0;\n    const originalReturn = typeof iteratorRecord.return === \"function\" ? iteratorRecord.return.bind(iterator) : void 0;\n    const originalThrow = typeof iteratorRecord.throw === \"function\" ? iteratorRecord.throw.bind(iterator) : void 0;\n    const asyncIteratorMethod = iteratorRecord[Symbol.asyncIterator];\n    const originalAsyncIterator = typeof asyncIteratorMethod === \"function\" ? asyncIteratorMethod.bind(iterator) : void 0;\n    Object.defineProperty(iteratorRecord, \"__braintrustGoogleGenAIPatched\", {\n      configurable: true,\n      enumerable: false,\n      value: true,\n      writable: false\n    });\n    if (originalNext) {\n      iteratorRecord.next = async (...nextArgs) => {\n        ensureSpan();\n        try {\n          const nextResult = await originalNext(\n            ...nextArgs\n          );\n          if (!nextResult.done && nextResult.value) {\n            if (firstTokenTime === null) {\n              firstTokenTime = getCurrentUnixTimestamp();\n            }\n            chunks.push(nextResult.value);\n          }\n          if (nextResult.done) {\n            finalize({\n              result: aggregateGenerateContentChunks(\n                chunks,\n                requestStartTime,\n                firstTokenTime\n              )\n            });\n          }\n          return nextResult;\n        } catch (error) {\n          finalize({ error });\n          throw error;\n        }\n      };\n    }\n    if (originalReturn) {\n      iteratorRecord.return = async (...returnArgs) => {\n        ensureSpan();\n        try {\n          return await originalReturn(\n            ...returnArgs\n          );\n        } finally {\n          if (chunks.length > 0) {\n            finalize({\n              result: aggregateGenerateContentChunks(\n                chunks,\n                requestStartTime,\n                firstTokenTime\n              )\n            });\n          } else {\n            finalize({});\n          }\n        }\n      };\n    }\n    if (originalThrow) {\n      iteratorRecord.throw = async (...throwArgs) => {\n        ensureSpan();\n        try {\n          return await originalThrow(\n            ...throwArgs\n          );\n        } catch (error) {\n          finalize({ error });\n          throw error;\n        }\n      };\n    }\n    iteratorRecord[Symbol.asyncIterator] = () => {\n      const asyncIterator = originalAsyncIterator ? originalAsyncIterator() : iterator;\n      return patchIterator(asyncIterator);\n    };\n    return iterator;\n  };\n  patchIterator(result);\n  return true;\n}\nfunction serializeGenerateContentInput(params) {\n  const input = {\n    model: params.model,\n    contents: serializeContentCollection(params.contents)\n  };\n  const config = params.config ? tryToDict(params.config) : null;\n  if (config) {\n    const filteredConfig = {};\n    Object.keys(config).forEach((key) => {\n      if (key !== \"tools\") {\n        filteredConfig[key] = config[key];\n      }\n    });\n    input.config = filteredConfig;\n  }\n  return input;\n}\nfunction serializeGenerateContentOutput(response) {\n  if (!response?.candidates) {\n    return response;\n  }\n  return {\n    ...response,\n    candidates: response.candidates.map((candidate) => ({\n      ...candidate,\n      ...candidate.content?.parts ? {\n        content: {\n          ...candidate.content,\n          parts: candidate.content.parts.map((part) => serializePart(part))\n        }\n      } : {}\n    }))\n  };\n}\nfunction serializeGenerateImagesInput(params) {\n  const parameters = {};\n  const config = params.config;\n  if (config?.numberOfImages !== void 0) {\n    parameters.n = config.numberOfImages;\n  }\n  if (config?.imageSize !== void 0) {\n    parameters.size = config.imageSize;\n  }\n  if (config?.aspectRatio !== void 0) {\n    parameters.aspect_ratio = config.aspectRatio;\n  }\n  if (config?.seed !== void 0) {\n    parameters.seed = config.seed;\n  }\n  if (config?.outputMimeType !== void 0) {\n    parameters.output_format = config.outputMimeType;\n  }\n  return {\n    operation: \"generate\",\n    prompt: params.prompt,\n    ...Object.keys(parameters).length > 0 ? { parameters } : {}\n  };\n}\nfunction serializeGenerateImagesOutput(response, params) {\n  const content = [];\n  for (const [index, generatedImage] of (response.generatedImages ?? []).entries()) {\n    const image = generatedImage?.image;\n    if (!image) {\n      continue;\n    }\n    const imagePart = serializeGoogleGenAIImage(\n      image,\n      `generated-image-${index + 1}`,\n      params.config?.outputMimeType\n    );\n    if (!imagePart) {\n      continue;\n    }\n    content.push({\n      ...imagePart,\n      ...generatedImage.enhancedPrompt ? { revised_prompt: generatedImage.enhancedPrompt } : {}\n    });\n  }\n  return { content };\n}\nfunction serializeEditImageInput(params) {\n  const parameters = {};\n  const config = params.config;\n  if (config?.numberOfImages !== void 0) {\n    parameters.n = config.numberOfImages;\n  }\n  if (config?.aspectRatio !== void 0) {\n    parameters.aspect_ratio = config.aspectRatio;\n  }\n  if (config?.outputCompressionQuality !== void 0) {\n    parameters.quality = config.outputCompressionQuality;\n  }\n  if (config?.seed !== void 0) {\n    parameters.seed = config.seed;\n  }\n  if (config?.outputMimeType !== void 0) {\n    parameters.output_format = config.outputMimeType;\n  }\n  const content = params.referenceImages.flatMap((reference, index) => {\n    if (!reference.referenceImage) {\n      return [];\n    }\n    const purpose = reference.referenceType?.toUpperCase().includes(\"MASK\") ? \"mask\" : \"reference\";\n    const image = serializeGoogleGenAIImage(\n      reference.referenceImage,\n      `${purpose}-image-${index + 1}`,\n      void 0,\n      purpose\n    );\n    return image ? [image] : [];\n  });\n  return {\n    operation: \"edit\",\n    prompt: params.prompt,\n    ...content.length > 0 ? { content } : {},\n    ...Object.keys(parameters).length > 0 ? { parameters } : {}\n  };\n}\nfunction serializeGenerateVideosInput(params) {\n  const parameters = {};\n  const config = params.config;\n  if (config?.durationSeconds !== void 0) {\n    parameters.duration = config.durationSeconds;\n  }\n  if (config?.resolution !== void 0) {\n    parameters.size = config.resolution;\n  }\n  if (config?.aspectRatio !== void 0) {\n    parameters.aspect_ratio = config.aspectRatio;\n  }\n  if (config?.seed !== void 0) {\n    parameters.seed = config.seed;\n  }\n  const content = [];\n  const sourceImage = params.image ?? params.source?.image;\n  if (sourceImage) {\n    const image = serializeGoogleGenAIImage(\n      sourceImage,\n      \"input-image\",\n      void 0,\n      \"input\"\n    );\n    if (image) {\n      content.push(image);\n    }\n  }\n  const sourceVideo = params.video ?? params.source?.video;\n  if (sourceVideo) {\n    const video = serializeGoogleGenAIVideo(sourceVideo, \"input-video\");\n    if (video) {\n      content.push(video);\n    }\n  }\n  if (config?.lastFrame) {\n    const image = serializeGoogleGenAIImage(\n      config.lastFrame,\n      \"last-frame\",\n      void 0,\n      \"reference\"\n    );\n    if (image) {\n      content.push(image);\n    }\n  }\n  for (const [index, reference] of (config?.referenceImages ?? []).entries()) {\n    if (!reference.image) {\n      continue;\n    }\n    const image = serializeGoogleGenAIImage(\n      reference.image,\n      `reference-image-${index + 1}`,\n      void 0,\n      \"reference\"\n    );\n    if (image) {\n      content.push(image);\n    }\n  }\n  if (config?.mask?.image) {\n    const image = serializeGoogleGenAIImage(\n      config.mask.image,\n      \"mask-image\",\n      void 0,\n      \"mask\"\n    );\n    if (image) {\n      content.push(image);\n    }\n  }\n  return {\n    operation: \"generate\",\n    ...params.prompt ?? params.source?.prompt ? { prompt: params.prompt ?? params.source?.prompt } : {},\n    ...content.length > 0 ? { content } : {},\n    ...Object.keys(parameters).length > 0 ? { parameters } : {}\n  };\n}\nfunction serializeGenerateVideosOutput(operation) {\n  return {\n    content: (operation.response?.generatedVideos ?? []).flatMap(\n      (generatedVideo, index) => {\n        const video = generatedVideo.video ? serializeGoogleGenAIVideo(\n          generatedVideo.video,\n          `generated-video-${index + 1}`\n        ) : void 0;\n        return video ? [video] : [];\n      }\n    )\n  };\n}\nfunction serializeGoogleGenAIImage(image, filenameStem, fallbackMimeType, purpose) {\n  const mimeType = image.mimeType ?? fallbackMimeType ?? \"image/png\";\n  const filename = `${filenameStem}.${getExtensionFromMediaType(mimeType)}`;\n  const media = image.gcsUri ?? (image.imageBytes ? createAttachmentFromInlineData(image.imageBytes, mimeType, filename) : void 0);\n  if (!media) {\n    return void 0;\n  }\n  return {\n    type: \"image_url\",\n    image_url: { url: media },\n    ...purpose ? { purpose } : {}\n  };\n}\nfunction serializeGoogleGenAIVideo(video, filenameStem) {\n  const mimeType = video.mimeType ?? \"video/mp4\";\n  const filename = `${filenameStem}.${getExtensionFromMediaType(mimeType)}`;\n  const media = video.uri ?? (video.videoBytes ? createAttachmentFromInlineData(video.videoBytes, mimeType, filename) : void 0);\n  return media ? { type: \"file\", file: { filename, file_data: media } } : void 0;\n}\nfunction serializeEmbedContentInput(params) {\n  let contents = Array.isArray(params.contents) ? params.contents : [params.contents];\n  if (params.model.includes(\"gemini-embedding-2\") && contents.length > 0 && contents.every(\n    (content) => typeof content === \"string\" || !Array.isArray(content) && !(\"parts\" in content)\n  )) {\n    contents = [contents];\n  }\n  const input = {\n    inputs: contents.map((content) => {\n      const parts = typeof content === \"string\" ? [content] : Array.isArray(content) ? content : \"parts\" in content ? content.parts : [content];\n      const normalized = parts.flatMap((part) => {\n        if (typeof part === \"string\") return [{ type: \"text\", text: part }];\n        if (part.text !== void 0) return [{ type: \"text\", text: part.text }];\n        const media = part.inlineData ?? part.fileData;\n        if (!media) return [];\n        const data = \"data\" in media ? `data:${media.mimeType};base64,${typeof media.data === \"string\" ? media.data : uint8ArrayToBase64(media.data)}` : media.fileUri;\n        return media.mimeType?.startsWith(\"image/\") ? [{ type: \"image_url\", image_url: { url: data } }] : [\n          {\n            type: \"file\",\n            file: {\n              file_data: data,\n              ...\"displayName\" in media && media.displayName ? { filename: media.displayName } : {}\n            }\n          }\n        ];\n      });\n      return {\n        content: normalized.length === 1 && normalized[0].type === \"text\" ? normalized[0].text : normalized\n      };\n    }),\n    ...params.config?.outputDimensionality !== void 0 ? { output_dimensions: params.config.outputDimensionality } : {}\n  };\n  try {\n    const processed = processInputAttachments(input);\n    const hasInlineMedia = processed.inputs.some(\n      ({ content }) => Array.isArray(content) && content.some((part) => {\n        const data = part.type === \"image_url\" ? part.image_url.url : part.type === \"file\" ? part.file.file_data : void 0;\n        return typeof data === \"string\" && data.startsWith(\"data:\");\n      })\n    );\n    return hasInlineMedia ? input : processed;\n  } catch (error) {\n    debugLogger.error(\n      \"Error processing Google GenAI embedding attachments:\",\n      error\n    );\n    return input;\n  }\n}\nfunction serializeInteractionInput(params) {\n  const input = {\n    input: serializeInteractionValue(params.input)\n  };\n  for (const key of [\n    \"model\",\n    \"agent\",\n    \"agent_config\",\n    \"api_version\",\n    \"background\",\n    \"environment\",\n    \"generation_config\",\n    \"previous_interaction_id\",\n    \"response_format\",\n    \"response_mime_type\",\n    \"response_modalities\",\n    \"service_tier\",\n    \"store\",\n    \"stream\",\n    \"system_instruction\",\n    \"webhook_config\"\n  ]) {\n    const value = params[key];\n    if (value !== void 0) {\n      input[key] = serializeInteractionValue(value);\n    }\n  }\n  return input;\n}\nfunction extractInteractionMetadata(params) {\n  const metadata = { provider: \"google\" };\n  for (const key of [\n    \"model\",\n    \"agent\",\n    \"agent_config\",\n    \"generation_config\",\n    \"system_instruction\",\n    \"response_format\",\n    \"response_mime_type\",\n    \"response_modalities\",\n    \"service_tier\"\n  ]) {\n    const value = params[key];\n    if (value !== void 0) {\n      metadata[key] = serializeInteractionValue(value);\n    }\n  }\n  if (Array.isArray(params.tools)) {\n    metadata.tools = params.tools.map(\n      (tool) => serializeInteractionValue(tool)\n    );\n  }\n  return metadata;\n}\nfunction serializeContentCollection(contents) {\n  if (contents === null || contents === void 0) {\n    return null;\n  }\n  if (Array.isArray(contents)) {\n    return contents.map((item) => serializeContentItem(item));\n  }\n  return serializeContentItem(contents);\n}\nfunction serializeContentItem(item) {\n  if (typeof item === \"object\" && item !== null) {\n    if (item.parts && Array.isArray(item.parts)) {\n      return {\n        ...item,\n        parts: item.parts.map((part) => serializePart(part))\n      };\n    }\n    return item;\n  }\n  if (typeof item === \"string\") {\n    return { text: item };\n  }\n  return item;\n}\nfunction serializePart(part) {\n  if (!part || typeof part !== \"object\") {\n    return part;\n  }\n  if (part.inlineData && part.inlineData.data) {\n    const { data, mimeType } = part.inlineData;\n    const attachment = createAttachmentFromInlineData(data, mimeType);\n    if (attachment) {\n      return mimeType.startsWith(\"image/\") ? { image_url: { url: attachment } } : {\n        file: {\n          file_data: attachment,\n          filename: attachment.reference.filename\n        }\n      };\n    }\n  }\n  return part;\n}\nfunction isVideoInteractionCreate(params) {\n  const paramsDict = tryToDict(params);\n  if (!paramsDict) {\n    return false;\n  }\n  const responseFormat = tryToDict(paramsDict.response_format);\n  return responseFormat?.type === \"video\" || typeof paramsDict.model === \"string\" && paramsDict.model.startsWith(\"gemini-omni-\");\n}\nfunction serializeVideoInteractionInput(params) {\n  const prompt = [];\n  const content = [];\n  const collect = (value) => {\n    if (typeof value === \"string\") {\n      prompt.push(value);\n      return;\n    }\n    if (Array.isArray(value)) {\n      value.forEach(collect);\n      return;\n    }\n    const item = tryToDict(value);\n    if (!item) {\n      return;\n    }\n    if (item.type === \"text\" && typeof item.text === \"string\") {\n      prompt.push(item.text);\n      return;\n    }\n    if (Array.isArray(item.content)) {\n      collect(item.content);\n      return;\n    }\n    const mimeType = typeof item.mime_type === \"string\" ? item.mime_type : typeof item.mimeType === \"string\" ? item.mimeType : item.type === \"video\" ? \"video/mp4\" : void 0;\n    const attachment = mimeType && item.data !== void 0 ? createAttachmentFromInlineData(\n      item.data,\n      mimeType,\n      typeof item.name === \"string\" ? item.name : void 0\n    ) : null;\n    const media = attachment ?? (typeof item.uri === \"string\" ? item.uri : null);\n    if (!media || !mimeType) {\n      return;\n    }\n    if (mimeType.startsWith(\"image/\")) {\n      content.push({ type: \"image_url\", image_url: { url: media } });\n    } else {\n      content.push({\n        type: \"file\",\n        file: {\n          filename: typeof item.name === \"string\" ? item.name : `file.${getExtensionFromMediaType(mimeType)}`,\n          file_data: media\n        }\n      });\n    }\n  };\n  collect(params.input);\n  const responseFormat = tryToDict(params.response_format);\n  const generationConfig = tryToDict(params.generation_config);\n  const videoConfig = tryToDict(\n    generationConfig?.video_config ?? generationConfig?.videoConfig\n  );\n  const parameters = {};\n  const aspectRatio = responseFormat?.aspect_ratio ?? responseFormat?.aspectRatio;\n  const size = responseFormat?.resolution;\n  const seed = videoConfig?.seed ?? generationConfig?.seed;\n  const outputFormat = responseFormat?.mime_type ?? responseFormat?.mimeType ?? params.response_mime_type;\n  if (aspectRatio !== void 0) parameters.aspect_ratio = aspectRatio;\n  if (size !== void 0) parameters.size = size;\n  if (seed !== void 0) parameters.seed = seed;\n  if (outputFormat !== void 0) parameters.output_format = outputFormat;\n  return {\n    operation: \"generate\",\n    ...prompt.length > 0 ? { prompt: prompt.join(\"\\n\") } : {},\n    ...content.length > 0 ? { content } : {},\n    ...Object.keys(parameters).length > 0 ? { parameters } : {}\n  };\n}\nfunction getInteractionVideoOutput(response) {\n  const responseDict = tryToDict(response);\n  if (!responseDict) {\n    return [];\n  }\n  const directOutput = tryToDict(responseDict.output_video);\n  if (directOutput) {\n    return [directOutput];\n  }\n  if (!Array.isArray(responseDict.steps)) {\n    return [];\n  }\n  return responseDict.steps.flatMap((step) => {\n    const stepDict = tryToDict(step);\n    const stepContent = Array.isArray(stepDict?.content) ? stepDict.content : stepDict?.content ? [stepDict.content] : [];\n    return stepContent.flatMap((part) => {\n      const partDict = tryToDict(part);\n      return partDict?.type === \"video\" ? [partDict] : [];\n    });\n  });\n}\nfunction serializeVideoInteractionOutput(response) {\n  return {\n    content: getInteractionVideoOutput(response).flatMap((video, index) => {\n      const mimeType = typeof video.mime_type === \"string\" ? video.mime_type : typeof video.mimeType === \"string\" ? video.mimeType : \"video/mp4\";\n      const filename = typeof video.name === \"string\" ? video.name : `generated-video-${index + 1}.${getExtensionFromMediaType(mimeType)}`;\n      const attachment = video.data !== void 0 ? createAttachmentFromInlineData(video.data, mimeType, filename) : null;\n      const media = attachment ?? (typeof video.uri === \"string\" ? video.uri : null);\n      return media ? [{ type: \"file\", file: { filename, file_data: media } }] : [];\n    })\n  };\n}\nfunction serializeInteractionValue(value, seen = /* @__PURE__ */ new WeakSet()) {\n  if (value === null || value === void 0 || typeof value !== \"object\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => serializeInteractionValue(item, seen));\n  }\n  const dict = tryToDict(value);\n  if (dict === null || dict === void 0 || typeof dict !== \"object\") {\n    return dict;\n  }\n  if (Array.isArray(dict)) {\n    return dict.map((item) => serializeInteractionValue(item, seen));\n  }\n  if (seen.has(dict)) {\n    return \"[Circular]\";\n  }\n  seen.add(dict);\n  try {\n    const serialized = {};\n    const mimeType = \"mime_type\" in dict && typeof dict.mime_type === \"string\" ? dict.mime_type : \"mimeType\" in dict && typeof dict.mimeType === \"string\" ? dict.mimeType : void 0;\n    const attachment = mimeType && \"data\" in dict && dict.data !== void 0 ? createAttachmentFromInlineData(dict.data, mimeType) : null;\n    for (const [key, entry] of Object.entries(dict)) {\n      if (key === \"data\" && attachment) {\n        serialized[key] = attachment;\n      } else {\n        serialized[key] = serializeInteractionValue(entry, seen);\n      }\n    }\n    return serialized;\n  } finally {\n    seen.delete(dict);\n  }\n}\nfunction createAttachmentFromInlineData(data, mimeType, filename = `file.${mimeType ? getExtensionFromMediaType(mimeType) : \"bin\"}`) {\n  if (!(data instanceof Uint8Array || typeof Buffer !== \"undefined\" && Buffer.isBuffer(data) || typeof data === \"string\")) {\n    return null;\n  }\n  const buffer = typeof data === \"string\" ? typeof Buffer !== \"undefined\" ? Buffer.from(data, \"base64\") : new Uint8Array(\n    atob(data).split(\"\").map((c) => c.charCodeAt(0))\n  ) : typeof Buffer !== \"undefined\" ? Buffer.from(data) : new Uint8Array(data);\n  const arrayBuffer = buffer instanceof Uint8Array ? buffer.buffer.slice(\n    buffer.byteOffset,\n    buffer.byteOffset + buffer.byteLength\n  ) : buffer;\n  return new Attachment({\n    data: arrayBuffer,\n    filename,\n    contentType: mimeType || \"application/octet-stream\"\n  });\n}\nfunction serializeGenerateContentTools(params) {\n  const config = params.config ? tryToDict(params.config) : null;\n  const tools = config?.tools;\n  if (!Array.isArray(tools)) {\n    return null;\n  }\n  try {\n    const serializedTools = [];\n    for (const tool of tools) {\n      const toolDict = tryToDict(tool);\n      if (toolDict) {\n        serializedTools.push(toolDict);\n      }\n    }\n    return serializedTools.length > 0 ? serializedTools : null;\n  } catch {\n    return null;\n  }\n}\nfunction extractGenerateContentMetadata(params) {\n  const metadata = {};\n  if (params.model) {\n    metadata.model = params.model;\n  }\n  if (params.config) {\n    const config = tryToDict(params.config);\n    if (config) {\n      Object.keys(config).forEach((key) => {\n        if (key !== \"tools\") {\n          metadata[key] = config[key];\n        }\n      });\n    }\n  }\n  const tools = serializeGenerateContentTools(params);\n  if (tools) {\n    metadata.tools = tools;\n  }\n  return metadata;\n}\nfunction extractGenerateContentMetrics(response, startTime) {\n  const metrics = {};\n  if (startTime !== void 0) {\n    const end = getCurrentUnixTimestamp();\n    metrics.start = startTime;\n    metrics.end = end;\n    metrics.duration = end - startTime;\n  }\n  if (response?.usageMetadata) {\n    populateUsageMetrics(metrics, response.usageMetadata);\n  }\n  return metrics;\n}\nfunction extractEmbedContentMetrics(response, startTime) {\n  const metrics = {};\n  if (startTime !== void 0) {\n    const end = getCurrentUnixTimestamp();\n    metrics.start = startTime;\n    metrics.end = end;\n  }\n  const embeddingTokenCount = extractEmbedPromptTokenCount(response);\n  if (embeddingTokenCount !== void 0) {\n    metrics.prompt_tokens = embeddingTokenCount;\n  }\n  const totalTokens = response?.usageMetadata?.totalTokenCount ?? embeddingTokenCount;\n  if (totalTokens !== void 0) {\n    metrics.tokens = totalTokens;\n  }\n  const audioTokens = (response?.usageMetadata?.promptTokenDetails ?? response?.usageMetadata?.promptTokensDetails)?.filter(\n    (detail) => detail.modality === \"AUDIO\" && detail.tokenCount !== void 0\n  );\n  if (audioTokens?.length) {\n    metrics.prompt_audio_tokens = audioTokens.reduce(\n      (sum, detail) => sum + (detail.tokenCount ?? 0),\n      0\n    );\n  }\n  return metrics;\n}\nfunction extractInteractionMetrics(response, startTime) {\n  const metrics = {};\n  if (startTime !== void 0) {\n    const end = getCurrentUnixTimestamp();\n    metrics.start = startTime;\n    metrics.end = end;\n    metrics.duration = end - startTime;\n  }\n  if (response?.usage) {\n    populateInteractionUsageMetrics(metrics, response.usage);\n  }\n  return metrics;\n}\nfunction extractInteractionResponseMetadata(response) {\n  const responseDict = tryToDict(response);\n  if (!responseDict) {\n    return void 0;\n  }\n  const metadata = {};\n  if (typeof responseDict.id === \"string\") {\n    metadata.interaction_id = responseDict.id;\n  }\n  if (typeof responseDict.status === \"string\") {\n    metadata.status = responseDict.status;\n  }\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nfunction extractEmbedPromptTokenCount(response) {\n  if (!response) {\n    return void 0;\n  }\n  const usagePromptTokens = response.usageMetadata?.promptTokenCount;\n  if (typeof usagePromptTokens === \"number\" && Number.isFinite(usagePromptTokens)) {\n    return usagePromptTokens;\n  }\n  const embeddings = Array.isArray(response.embeddings) ? response.embeddings : response.embedding ? [response.embedding] : [];\n  if (embeddings.length === 0) {\n    return void 0;\n  }\n  let total = 0;\n  for (const embedding of embeddings) {\n    const embeddingStats = tryToDict(tryToDict(embedding)?.statistics);\n    const tokenCount2 = embeddingStats?.tokenCount;\n    if (typeof tokenCount2 === \"number\" && Number.isFinite(tokenCount2)) {\n      total += tokenCount2;\n    } else {\n      return void 0;\n    }\n  }\n  return total;\n}\nfunction summarizeEmbedContentOutput(response) {\n  return {\n    count: Array.isArray(response?.embeddings) ? response.embeddings.length : response?.embedding ? 1 : 0\n  };\n}\nfunction populateUsageMetrics(metrics, usage) {\n  if (usage.promptTokenCount !== void 0 || usage.toolUsePromptTokenCount !== void 0) {\n    metrics.prompt_tokens = (usage.promptTokenCount ?? 0) + (usage.toolUsePromptTokenCount ?? 0);\n  }\n  if (usage.candidatesTokenCount !== void 0 || usage.thoughtsTokenCount !== void 0) {\n    metrics.completion_tokens = (usage.candidatesTokenCount ?? 0) + (usage.thoughtsTokenCount ?? 0);\n  }\n  if (usage.totalTokenCount !== void 0) {\n    metrics.tokens = usage.totalTokenCount;\n  }\n  if (usage.cachedContentTokenCount !== void 0) {\n    metrics.prompt_cached_tokens = usage.cachedContentTokenCount;\n  }\n  if (usage.thoughtsTokenCount !== void 0) {\n    metrics.completion_reasoning_tokens = usage.thoughtsTokenCount;\n  }\n  for (const detail of usage.promptTokensDetails ?? []) {\n    if (detail.modality === \"AUDIO\" && detail.tokenCount !== void 0) {\n      metrics.prompt_audio_tokens = (metrics.prompt_audio_tokens ?? 0) + detail.tokenCount;\n    }\n  }\n  for (const detail of usage.candidatesTokensDetails ?? []) {\n    if (detail.modality === \"AUDIO\" && detail.tokenCount !== void 0) {\n      metrics.completion_audio_tokens = (metrics.completion_audio_tokens ?? 0) + detail.tokenCount;\n    }\n    if (detail.modality === \"IMAGE\" && detail.tokenCount !== void 0) {\n      metrics.completion_image_tokens = (metrics.completion_image_tokens ?? 0) + detail.tokenCount;\n    }\n  }\n}\nfunction populateInteractionUsageMetrics(metrics, usage) {\n  if (typeof usage.total_input_tokens === \"number\") {\n    metrics.prompt_tokens = usage.total_input_tokens;\n  }\n  if (typeof usage.total_output_tokens === \"number\") {\n    metrics.completion_tokens = usage.total_output_tokens + (typeof usage.total_thought_tokens === \"number\" ? usage.total_thought_tokens : 0);\n  }\n  if (typeof usage.total_tokens === \"number\") {\n    metrics.tokens = usage.total_tokens;\n  }\n  if (typeof usage.total_cached_tokens === \"number\") {\n    metrics.prompt_cached_tokens = usage.total_cached_tokens;\n  }\n  if (typeof usage.total_thought_tokens === \"number\") {\n    metrics.completion_reasoning_tokens = usage.total_thought_tokens;\n  }\n  for (const detail of Array.isArray(usage.input_tokens_by_modality) ? usage.input_tokens_by_modality : []) {\n    if (typeof detail?.modality === \"string\" && detail.modality.toLowerCase() === \"audio\" && typeof detail.tokens === \"number\") {\n      metrics.prompt_audio_tokens = (metrics.prompt_audio_tokens ?? 0) + detail.tokens;\n    }\n  }\n  for (const detail of Array.isArray(usage.output_tokens_by_modality) ? usage.output_tokens_by_modality : []) {\n    if (typeof detail?.modality !== \"string\" || typeof detail.tokens !== \"number\") {\n      continue;\n    }\n    switch (detail.modality.toLowerCase()) {\n      case \"audio\":\n        metrics.completion_audio_tokens = (metrics.completion_audio_tokens ?? 0) + detail.tokens;\n        break;\n      case \"image\":\n        metrics.completion_image_tokens = (metrics.completion_image_tokens ?? 0) + detail.tokens;\n        break;\n    }\n  }\n}\nfunction aggregateGenerateContentChunks(chunks, startTime, firstTokenTime) {\n  const end = getCurrentUnixTimestamp();\n  const metrics = {\n    start: startTime,\n    end,\n    duration: end - startTime\n  };\n  if (firstTokenTime !== null) {\n    metrics.time_to_first_token = firstTokenTime - startTime;\n  }\n  if (chunks.length === 0) {\n    return { aggregated: {}, metrics };\n  }\n  let text = \"\";\n  let thoughtText = \"\";\n  const otherParts = [];\n  let groundingMetadata = void 0;\n  let usageMetadata = null;\n  let lastResponse = null;\n  for (const chunk of chunks) {\n    lastResponse = chunk;\n    if (chunk.usageMetadata) {\n      usageMetadata = chunk.usageMetadata;\n    }\n    if (chunk.groundingMetadata !== void 0) {\n      groundingMetadata = chunk.groundingMetadata;\n    }\n    if (chunk.candidates && Array.isArray(chunk.candidates)) {\n      for (const candidate of chunk.candidates) {\n        if (candidate.content?.parts) {\n          for (const part of candidate.content.parts) {\n            if (part.text !== void 0) {\n              if (part.thought) {\n                thoughtText += part.text;\n              } else {\n                text += part.text;\n              }\n            } else if (part.functionCall) {\n              otherParts.push({ functionCall: part.functionCall });\n            } else if (part.codeExecutionResult) {\n              otherParts.push({\n                codeExecutionResult: part.codeExecutionResult\n              });\n            } else if (part.executableCode) {\n              otherParts.push({ executableCode: part.executableCode });\n            } else if (part.inlineData || part.fileData) {\n              const serializedPart = tryToDict(serializePart(part));\n              if (serializedPart) {\n                otherParts.push(serializedPart);\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  const aggregated = {};\n  const parts = [];\n  if (thoughtText) {\n    parts.push({ text: thoughtText, thought: true });\n  }\n  if (text) {\n    parts.push({ text });\n  }\n  parts.push(...otherParts);\n  if (parts.length > 0 && lastResponse?.candidates) {\n    const candidates = [];\n    for (const candidate of lastResponse.candidates) {\n      const candidateDict = {\n        content: {\n          parts,\n          role: \"model\"\n        }\n      };\n      if (candidate.finishReason !== void 0) {\n        candidateDict.finishReason = candidate.finishReason;\n      }\n      if (candidate.groundingMetadata !== void 0) {\n        candidateDict.groundingMetadata = candidate.groundingMetadata;\n        if (groundingMetadata === void 0) {\n          groundingMetadata = candidate.groundingMetadata;\n        }\n      }\n      if (candidate.safetyRatings) {\n        candidateDict.safetyRatings = candidate.safetyRatings;\n      }\n      candidates.push(candidateDict);\n    }\n    aggregated.candidates = candidates;\n  }\n  if (usageMetadata) {\n    aggregated.usageMetadata = usageMetadata;\n    populateUsageMetrics(metrics, usageMetadata);\n  }\n  if (groundingMetadata !== void 0) {\n    aggregated.groundingMetadata = groundingMetadata;\n  }\n  if (text) {\n    aggregated.text = text;\n  }\n  return { aggregated, metrics };\n}\nfunction aggregateInteractionEvents(chunks, startTime) {\n  const end = getCurrentUnixTimestamp();\n  const metrics = {};\n  if (startTime !== void 0) {\n    metrics.start = startTime;\n    metrics.end = end;\n    metrics.duration = end - startTime;\n  }\n  let latestInteraction;\n  let latestUsage;\n  let status;\n  let outputText = \"\";\n  const steps = /* @__PURE__ */ new Map();\n  for (const chunk of chunks) {\n    const event = tryToDict(chunk);\n    if (!event) {\n      continue;\n    }\n    const usage = extractInteractionUsageFromEvent(event);\n    if (usage) {\n      latestUsage = usage;\n    }\n    const interaction = tryToDict(event.interaction);\n    if (interaction) {\n      latestInteraction = serializeInteractionValue(interaction);\n      if (typeof interaction.status === \"string\") {\n        status = interaction.status;\n      }\n    }\n    if (typeof event.status === \"string\") {\n      status = event.status;\n    }\n    const index = typeof event.index === \"number\" ? event.index : void 0;\n    if (index === void 0) {\n      continue;\n    }\n    if (event.event_type === \"step.start\") {\n      const compact = compactInteractionStep(event.step);\n      compact.index = index;\n      steps.set(index, compact);\n      continue;\n    }\n    if (event.event_type === \"step.delta\") {\n      const step = steps.get(index) ?? { index };\n      const textDelta = applyInteractionDelta(step, event.delta);\n      if (textDelta) {\n        outputText += textDelta;\n      }\n      steps.set(index, step);\n    }\n  }\n  if (latestUsage) {\n    populateInteractionUsageMetrics(metrics, latestUsage);\n  }\n  const output = latestInteraction ? { ...latestInteraction } : {};\n  if (status) {\n    output.status = status;\n  }\n  if (outputText) {\n    output.output_text = outputText;\n  }\n  if (latestUsage) {\n    output.usage = serializeInteractionValue(latestUsage);\n  }\n  const compactSteps = Array.from(steps.values()).sort(\n    (left, right) => Number(left.index ?? 0) - Number(right.index ?? 0)\n  );\n  if (compactSteps.length > 0) {\n    output.steps = compactSteps;\n  }\n  const metadata = {};\n  if (typeof output.id === \"string\") {\n    metadata.interaction_id = output.id;\n  }\n  if (typeof output.status === \"string\") {\n    metadata.status = output.status;\n  }\n  return {\n    output,\n    metrics: cleanMetrics3(metrics),\n    ...Object.keys(metadata).length > 0 ? { metadata } : {}\n  };\n}\nfunction extractInteractionUsageFromEvent(event) {\n  const metadata = tryToDict(event.metadata);\n  const metadataUsage = tryToDict(metadata?.usage);\n  if (metadataUsage) {\n    return metadataUsage;\n  }\n  const metadataTotalUsage = tryToDict(metadata?.total_usage);\n  if (metadataTotalUsage) {\n    return metadataTotalUsage;\n  }\n  const interaction = tryToDict(event.interaction);\n  const interactionUsage = tryToDict(interaction?.usage);\n  return interactionUsage ? interactionUsage : void 0;\n}\nfunction compactInteractionStep(step) {\n  const stepDict = tryToDict(step);\n  if (!stepDict) {\n    return {};\n  }\n  const compact = {};\n  for (const key of [\n    \"type\",\n    \"content\",\n    \"name\",\n    \"server_name\",\n    \"arguments\",\n    \"result\",\n    \"is_error\"\n  ]) {\n    if (stepDict[key] !== void 0) {\n      compact[key] = serializeInteractionValue(stepDict[key]);\n    }\n  }\n  return Object.keys(compact).length > 0 ? compact : serializeInteractionValue(stepDict);\n}\nfunction applyInteractionDelta(step, delta) {\n  const deltaDict = tryToDict(delta);\n  if (!deltaDict) {\n    return void 0;\n  }\n  const deltaType = deltaDict.type;\n  if (typeof deltaType === \"string\" && typeof step.type !== \"string\") {\n    step.type = deltaType === \"text\" ? \"model_output\" : deltaType;\n  }\n  if (deltaType === \"text\" && typeof deltaDict.text === \"string\") {\n    step.text = `${typeof step.text === \"string\" ? step.text : \"\"}${deltaDict.text}`;\n    return deltaDict.text;\n  }\n  if (deltaType === \"arguments_delta\" && typeof deltaDict.arguments === \"string\") {\n    step.arguments = `${typeof step.arguments === \"string\" ? step.arguments : \"\"}${deltaDict.arguments}`;\n    return void 0;\n  }\n  const deltas = Array.isArray(step.deltas) ? step.deltas : [];\n  deltas.push(serializeInteractionValue(deltaDict));\n  step.deltas = deltas;\n  return void 0;\n}\nfunction cleanMetrics3(metrics) {\n  const cleaned = {};\n  for (const [key, value] of Object.entries(metrics)) {\n    if (value !== null && value !== void 0) {\n      cleaned[key] = value;\n    }\n  }\n  return cleaned;\n}\nfunction extractResponseMetadata(response) {\n  const responseDict = tryToDict(response);\n  if (!responseDict) {\n    return void 0;\n  }\n  const metadata = {};\n  const responseGroundingMetadata = responseDict.groundingMetadata;\n  const candidateGroundingMetadata = [];\n  if (Array.isArray(responseDict.candidates)) {\n    for (const candidate of responseDict.candidates) {\n      const candidateDict = tryToDict(candidate);\n      if (candidateDict?.groundingMetadata !== void 0) {\n        candidateGroundingMetadata.push(candidateDict.groundingMetadata);\n      }\n    }\n  }\n  if (responseGroundingMetadata !== void 0) {\n    metadata.groundingMetadata = responseGroundingMetadata;\n  } else if (candidateGroundingMetadata.length === 1) {\n    [metadata.groundingMetadata] = candidateGroundingMetadata;\n  } else if (candidateGroundingMetadata.length > 1) {\n    metadata.groundingMetadata = candidateGroundingMetadata;\n  }\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nfunction tryToDict(obj) {\n  if (obj === null || obj === void 0) {\n    return null;\n  }\n  if (typeof obj === \"object\") {\n    if (\"toJSON\" in obj && // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    typeof obj.toJSON === \"function\") {\n      return obj.toJSON();\n    }\n    return obj;\n  }\n  return null;\n}\n\n// src/instrumentation/plugins/huggingface-channels.ts\nvar huggingFaceChannels = defineChannels(\n  \"@huggingface/inference\",\n  {\n    chatCompletion: channel({\n      channelName: \"chatCompletion\",\n      kind: \"async\"\n    }),\n    chatCompletionStream: channel({\n      channelName: \"chatCompletionStream\",\n      kind: \"sync-stream\"\n    }),\n    textGeneration: channel({\n      channelName: \"textGeneration\",\n      kind: \"async\"\n    }),\n    textGenerationStream: channel({\n      channelName: \"textGenerationStream\",\n      kind: \"sync-stream\"\n    }),\n    featureExtraction: channel({\n      channelName: \"featureExtraction\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.HUGGINGFACE }\n);\n\n// src/instrumentation/plugins/huggingface-plugin.ts\nvar REQUEST_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"dimensions\",\n  \"encoding_format\",\n  \"endpointUrl\",\n  \"max_tokens\",\n  \"model\",\n  \"provider\",\n  \"seed\",\n  \"stop\",\n  \"stream\",\n  \"temperature\",\n  \"tool_choice\",\n  \"tools\",\n  \"top_p\"\n]);\nvar RESPONSE_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"created\",\n  \"id\",\n  \"model\",\n  \"object\"\n]);\nvar HuggingFacePlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      traceAsyncChannel(huggingFaceChannels.chatCompletion, {\n        name: \"huggingface.chat_completion\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractChatInputWithMetadata,\n        extractOutput: (result) => result?.choices,\n        extractMetadata: (result) => extractResponseMetadata2(result),\n        extractMetrics: (result) => parseMetricsFromUsage(result?.usage)\n      }),\n      traceSyncStreamChannel(huggingFaceChannels.chatCompletionStream, {\n        name: \"huggingface.chat_completion_stream\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractChatInputWithMetadata,\n        patchResult: ({ result, span, startTime }) => patchChatCompletionStream({\n          result,\n          span,\n          startTime\n        })\n      }),\n      traceAsyncChannel(huggingFaceChannels.textGeneration, {\n        name: \"huggingface.text_generation\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractTextGenerationInputWithMetadata,\n        extractOutput: (result) => isObject(result) ? { generated_text: result.generated_text } : result,\n        extractMetadata: extractTextGenerationMetadata,\n        extractMetrics: (result) => extractTextGenerationMetrics(result?.details ?? null)\n      }),\n      traceSyncStreamChannel(huggingFaceChannels.textGenerationStream, {\n        name: \"huggingface.text_generation_stream\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractTextGenerationInputWithMetadata,\n        patchResult: ({ result, span, startTime }) => patchTextGenerationStream({\n          result,\n          span,\n          startTime\n        })\n      }),\n      traceAsyncChannel(huggingFaceChannels.featureExtraction, {\n        name: \"huggingface.feature_extraction\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractFeatureExtractionInputWithMetadata,\n        extractOutput: summarizeFeatureExtractionOutput,\n        extractMetrics: () => ({})\n      })\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction addProviderMetadata(metadata) {\n  return {\n    ...metadata,\n    provider: metadata.provider ?? \"huggingface\"\n  };\n}\nfunction normalizeArgs(args) {\n  if (Array.isArray(args)) {\n    return args;\n  }\n  if (isArrayLike(args)) {\n    return Array.from(args);\n  }\n  return [args];\n}\nfunction isArrayLike(value) {\n  return isObject(value) && \"length\" in value && typeof value.length === \"number\" && Number.isInteger(value.length) && value.length >= 0;\n}\nfunction getFirstObjectArg(args) {\n  const firstObjectArg = normalizeArgs(args).find((arg) => isObject(arg));\n  return isObject(firstObjectArg) ? firstObjectArg : void 0;\n}\nfunction pickRequestMetadata(params) {\n  if (!params) {\n    return addProviderMetadata({});\n  }\n  const metadata = {};\n  for (const key of REQUEST_METADATA_ALLOWLIST) {\n    const value = params[key];\n    if (value !== void 0) {\n      metadata[key] = value;\n    }\n  }\n  if (isObject(params.parameters)) {\n    metadata.parameters = params.parameters;\n  }\n  return addProviderMetadata(metadata);\n}\nfunction extractChatInputWithMetadata(args) {\n  const params = getFirstObjectArg(args);\n  const { messages, ...rawMetadata } = params ?? {};\n  return {\n    input: messages,\n    metadata: pickRequestMetadata(rawMetadata)\n  };\n}\nfunction extractTextGenerationInputWithMetadata(args) {\n  const params = getFirstObjectArg(args);\n  const { inputs, ...rawMetadata } = params ?? {};\n  return {\n    input: inputs,\n    metadata: pickRequestMetadata(rawMetadata)\n  };\n}\nfunction extractFeatureExtractionInputWithMetadata(args) {\n  const params = getFirstObjectArg(args);\n  const { inputs, ...rawMetadata } = params ?? {};\n  return {\n    input: inputs,\n    metadata: pickRequestMetadata(rawMetadata)\n  };\n}\nfunction extractResponseMetadata2(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const metadata = {};\n  for (const key of RESPONSE_METADATA_ALLOWLIST) {\n    const value = result[key];\n    if (value !== void 0) {\n      metadata[key] = value;\n    }\n  }\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nfunction extractTextGenerationMetrics(details) {\n  if (!isObject(details)) {\n    return {};\n  }\n  const promptTokens = Array.isArray(details.prefill) ? details.prefill.length : void 0;\n  const completionTokens = typeof details.generated_tokens === \"number\" ? details.generated_tokens : Array.isArray(details.tokens) ? details.tokens.length : void 0;\n  const metrics = {};\n  if (promptTokens !== void 0) {\n    metrics.prompt_tokens = promptTokens;\n  }\n  if (completionTokens !== void 0) {\n    metrics.completion_tokens = completionTokens;\n  }\n  if (promptTokens !== void 0 || completionTokens !== void 0) {\n    metrics.tokens = (promptTokens ?? 0) + (completionTokens ?? 0);\n  }\n  return metrics;\n}\nfunction extractTextGenerationMetadata(result) {\n  if (!isObject(result?.details)) {\n    return void 0;\n  }\n  return typeof result.details.finish_reason === \"string\" ? {\n    finish_reason: result.details.finish_reason\n  } : void 0;\n}\nfunction summarizeFeatureExtractionOutput(result) {\n  if (!Array.isArray(result)) {\n    return void 0;\n  }\n  const first = result[0];\n  if (typeof first === \"number\") {\n    return { embedding_length: result.length };\n  }\n  if (Array.isArray(first) && first.every((value) => typeof value === \"number\")) {\n    return {\n      embedding_count: result.length,\n      embedding_length: first.length\n    };\n  }\n  if (Array.isArray(first) && first.length > 0 && Array.isArray(first[0]) && first[0].every((value) => typeof value === \"number\")) {\n    return {\n      embedding_batch_count: result.length,\n      embedding_count: first.length,\n      embedding_length: first[0].length\n    };\n  }\n  return void 0;\n}\nfunction patchChatCompletionStream(args) {\n  const { result, span, startTime } = args;\n  if (!result || !isAsyncIterable(result)) {\n    return false;\n  }\n  let firstChunkTime;\n  patchStreamIfNeeded(result, {\n    onChunk: () => {\n      if (firstChunkTime === void 0) {\n        firstChunkTime = getCurrentUnixTimestamp();\n      }\n    },\n    onComplete: (chunks) => {\n      const lastChunk = chunks.at(-1);\n      const responseMetadata = extractResponseMetadata2(lastChunk);\n      const metrics = {\n        ...parseMetricsFromUsage(lastChunk?.usage),\n        ...firstChunkTime !== void 0 ? { time_to_first_token: firstChunkTime - startTime } : {}\n      };\n      span.log({\n        output: aggregateChatCompletionChunks2(chunks),\n        ...responseMetadata ? { metadata: responseMetadata } : {},\n        metrics\n      });\n      span.end();\n    },\n    onError: (error) => {\n      span.log({\n        error: error.message\n      });\n      span.end();\n    }\n  });\n  return true;\n}\nfunction patchTextGenerationStream(args) {\n  const { result, span, startTime } = args;\n  if (!result || !isAsyncIterable(result)) {\n    return false;\n  }\n  let firstChunkTime;\n  patchStreamIfNeeded(result, {\n    onChunk: () => {\n      if (firstChunkTime === void 0) {\n        firstChunkTime = getCurrentUnixTimestamp();\n      }\n    },\n    onComplete: (chunks) => {\n      const lastChunk = chunks.at(-1);\n      const streamMetadata = extractTextGenerationStreamMetadata(chunks);\n      span.log({\n        output: aggregateTextGenerationStreamChunks(chunks),\n        ...streamMetadata ? { metadata: streamMetadata } : {},\n        metrics: {\n          ...extractTextGenerationMetrics(lastChunk?.details ?? null),\n          ...parseMetricsFromUsage(lastChunk?.usage),\n          ...firstChunkTime !== void 0 ? { time_to_first_token: firstChunkTime - startTime } : {}\n        }\n      });\n      span.end();\n    },\n    onError: (error) => {\n      span.log({\n        error: error.message\n      });\n      span.end();\n    }\n  });\n  return true;\n}\nfunction aggregateChatCompletionChunks2(chunks) {\n  if (chunks.length === 0) {\n    return void 0;\n  }\n  const aggregatedChoices = /* @__PURE__ */ new Map();\n  for (const chunk of chunks) {\n    for (const choice of chunk.choices ?? []) {\n      const index = typeof choice.index === \"number\" ? choice.index : 0;\n      const existing = aggregatedChoices.get(index) ?? {\n        content: \"\",\n        toolCallsByIndex: /* @__PURE__ */ new Map()\n      };\n      const delta = isObject(choice.delta) ? choice.delta : void 0;\n      const message = isObject(choice.message) ? choice.message : void 0;\n      if (typeof delta?.content === \"string\") {\n        existing.content += delta.content;\n      } else if (typeof message?.content === \"string\") {\n        existing.content = message.content;\n      }\n      if (typeof delta?.role === \"string\") {\n        existing.role = delta.role;\n      } else if (typeof message?.role === \"string\") {\n        existing.role = message.role;\n      }\n      if (choice.finish_reason !== void 0) {\n        existing.finish_reason = choice.finish_reason;\n      }\n      const toolCallDeltas = getChatToolCallDeltas(delta) ?? getChatToolCallDeltas(message);\n      if (toolCallDeltas) {\n        mergeChatToolCallDeltas(existing.toolCallsByIndex, toolCallDeltas);\n      }\n      aggregatedChoices.set(index, existing);\n    }\n  }\n  return {\n    choices: [...aggregatedChoices.entries()].map(([index, choice]) => ({\n      index,\n      message: {\n        content: choice.content,\n        role: choice.role ?? \"assistant\",\n        ...choice.toolCallsByIndex.size > 0 ? {\n          tool_calls: [...choice.toolCallsByIndex.entries()].sort(([leftIndex], [rightIndex]) => leftIndex - rightIndex).map(([, toolCall]) => toolCall)\n        } : {}\n      },\n      ...choice.finish_reason !== void 0 ? { finish_reason: choice.finish_reason } : {}\n    }))\n  };\n}\nfunction getChatToolCallDeltas(value) {\n  if (!Array.isArray(value?.tool_calls)) {\n    return void 0;\n  }\n  const toolCalls2 = value.tool_calls.filter((toolCall) => isObject(toolCall));\n  return toolCalls2.length > 0 ? toolCalls2 : void 0;\n}\nfunction mergeChatToolCallDeltas(toolCallsByIndex, toolCallDeltas) {\n  for (const toolDelta of toolCallDeltas) {\n    const toolIndex = typeof toolDelta.index === \"number\" && toolDelta.index >= 0 ? toolDelta.index : 0;\n    const existing = toolCallsByIndex.get(toolIndex);\n    if (!existing) {\n      toolCallsByIndex.set(toolIndex, createChatToolCall(toolDelta));\n      continue;\n    }\n    mergeChatToolCall(existing, toolDelta);\n  }\n}\nfunction createChatToolCall(toolDelta) {\n  const toolFunction = isObject(toolDelta.function) ? toolDelta.function : {};\n  const toolCallFunction = {\n    arguments: typeof toolFunction.arguments === \"string\" ? toolFunction.arguments : \"\"\n  };\n  if (typeof toolFunction.name === \"string\") {\n    toolCallFunction.name = toolFunction.name;\n  }\n  const toolCall = {\n    function: toolCallFunction\n  };\n  if (typeof toolDelta.id === \"string\") {\n    toolCall.id = toolDelta.id;\n  }\n  if (typeof toolDelta.type === \"string\") {\n    toolCall.type = toolDelta.type;\n  }\n  return toolCall;\n}\nfunction mergeChatToolCall(existing, toolDelta) {\n  const currentFunction = isObject(existing.function) ? existing.function : {};\n  const deltaFunction = isObject(toolDelta.function) ? toolDelta.function : {};\n  const currentArguments = typeof currentFunction.arguments === \"string\" ? currentFunction.arguments : \"\";\n  const deltaArguments = typeof deltaFunction.arguments === \"string\" ? deltaFunction.arguments : \"\";\n  if (typeof toolDelta.id === \"string\" && typeof existing.id !== \"string\") {\n    existing.id = toolDelta.id;\n  }\n  if (typeof toolDelta.type === \"string\" && typeof existing.type !== \"string\") {\n    existing.type = toolDelta.type;\n  }\n  const nextFunction = {\n    ...currentFunction,\n    arguments: `${currentArguments}${deltaArguments}`\n  };\n  if (typeof deltaFunction.name === \"string\" && typeof currentFunction.name !== \"string\") {\n    nextFunction.name = deltaFunction.name;\n  }\n  existing.function = nextFunction;\n}\nfunction aggregateTextGenerationStreamChunks(chunks) {\n  if (chunks.length === 0) {\n    return void 0;\n  }\n  let generatedText = \"\";\n  let finishReason;\n  for (const chunk of chunks) {\n    if (typeof chunk.generated_text === \"string\") {\n      generatedText = chunk.generated_text;\n    } else if (typeof chunk.token?.text === \"string\" && !chunk.token.special) {\n      generatedText += chunk.token.text;\n    } else if (Array.isArray(chunk.choices)) {\n      for (const choice of chunk.choices) {\n        if (typeof choice.text === \"string\") {\n          generatedText += choice.text;\n        }\n        if (choice.finish_reason !== void 0) {\n          finishReason = choice.finish_reason;\n        }\n      }\n    }\n    if (isObject(chunk.details) && typeof chunk.details.finish_reason === \"string\") {\n      finishReason = chunk.details.finish_reason;\n    }\n  }\n  return {\n    generated_text: generatedText,\n    ...finishReason !== void 0 ? { finish_reason: finishReason } : {}\n  };\n}\nfunction extractTextGenerationStreamMetadata(chunks) {\n  for (let index = chunks.length - 1; index >= 0; index--) {\n    const chunk = chunks[index];\n    if (isObject(chunk?.details) && typeof chunk.details.finish_reason === \"string\") {\n      return {\n        finish_reason: chunk.details.finish_reason\n      };\n    }\n    if (!Array.isArray(chunk?.choices)) {\n      continue;\n    }\n    for (let choiceIndex = chunk.choices.length - 1; choiceIndex >= 0; choiceIndex--) {\n      const choice = chunk.choices[choiceIndex];\n      if (choice?.finish_reason !== void 0) {\n        return { finish_reason: choice.finish_reason };\n      }\n    }\n  }\n  return void 0;\n}\n\n// src/instrumentation/plugins/huggingface-transformers-channels.ts\nvar SUPPORTED_TASKS = /* @__PURE__ */ new Set([\n  \"text-generation\",\n  \"text2text-generation\",\n  \"summarization\",\n  \"feature-extraction\",\n  \"question-answering\"\n]);\nvar pipelineInfo = /* @__PURE__ */ new WeakMap();\nfunction isSupportedHuggingFaceTransformersTask(task) {\n  return typeof task === \"string\" && SUPPORTED_TASKS.has(task);\n}\nfunction registerHuggingFaceTransformersPipeline(pipeline, task, model) {\n  if (typeof task !== \"string\") {\n    return;\n  }\n  const info = { task };\n  if (typeof model === \"string\") {\n    info.model = model;\n  }\n  pipelineInfo.set(pipeline, info);\n}\nfunction getHuggingFaceTransformersPipelineInfo(pipeline) {\n  return pipeline ? pipelineInfo.get(pipeline) : void 0;\n}\nvar huggingFaceTransformersChannels = defineChannels(\n  \"@huggingface/transformers\",\n  {\n    pipeline: channel({\n      channelName: \"pipeline\",\n      kind: \"async\"\n    }),\n    pipelineCall: channel({\n      channelName: \"pipeline.call\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.HUGGINGFACE }\n);\n\n// src/instrumentation/plugins/huggingface-transformers-plugin.ts\nvar REQUEST_METADATA_KEYS = [\n  \"temperature\",\n  \"top_p\",\n  \"max_tokens\",\n  \"stop\"\n];\nvar HuggingFaceTransformersPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToPipelineFactory();\n    this.unsubscribers.push(\n      traceAsyncChannel(huggingFaceTransformersChannels.pipelineCall, {\n        name: (_args, event) => {\n          const task = getTask(event);\n          const operation = task?.replaceAll(\"-\", \"_\") ?? \"unknown\";\n          return `huggingface.transformers.${operation}`;\n        },\n        type: \"llm\" /* LLM */,\n        shouldTrace: (_args, event) => isSupportedHuggingFaceTransformersTask(\n          getTask(event)\n        ),\n        extractInput: (args, event) => ({\n          input: extractInput2(\n            getTask(event),\n            args\n          ),\n          metadata: extractMetadata(\n            event,\n            args\n          )\n        }),\n        extractOutput: (result, event) => extractOutput(\n          getTask(event),\n          result\n        ),\n        extractMetrics: () => ({})\n      })\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToPipelineFactory() {\n    const channel2 = huggingFaceTransformersChannels.pipeline.tracingChannel();\n    const handlers = {\n      asyncEnd: (event) => {\n        if (typeof event.result !== \"function\") {\n          return;\n        }\n        registerHuggingFaceTransformersPipeline(\n          event.result,\n          event.arguments?.[0],\n          event.arguments?.[1]\n        );\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => channel2.unsubscribe(handlers));\n  }\n};\nfunction getTask(event) {\n  const self = event.self;\n  const registeredTask = getHuggingFaceTransformersPipelineInfo(self)?.task;\n  if (registeredTask !== void 0) {\n    return registeredTask;\n  }\n  if (typeof self?.task === \"string\") {\n    return self.task;\n  }\n  return void 0;\n}\nfunction extractMetadata(event, args) {\n  const metadata = {\n    provider: \"huggingface\"\n  };\n  const registeredModel = getHuggingFaceTransformersPipelineInfo(\n    event.self\n  )?.model;\n  const model = registeredModel ?? modelIdentifier(event.self);\n  if (model) {\n    metadata.model = model;\n  }\n  const task = getTask(event);\n  const options = task === \"question-answering\" ? args[2] : args[1];\n  if (isObject(options)) {\n    for (const key of REQUEST_METADATA_KEYS) {\n      if (options[key] !== void 0) {\n        metadata[key] = options[key];\n      }\n    }\n  }\n  return metadata;\n}\nfunction modelIdentifier(pipeline) {\n  const model = pipeline?.model;\n  if (!isObject(model)) {\n    return void 0;\n  }\n  const config = isObject(model.config) ? model.config : void 0;\n  for (const value of [\n    config?._name_or_path,\n    config?.name_or_path,\n    config?.model_id,\n    config?.modelId,\n    model.name\n  ]) {\n    if (typeof value === \"string\" && value.length > 0) {\n      return value;\n    }\n  }\n  return void 0;\n}\nfunction extractInput2(task, args) {\n  switch (task) {\n    case \"feature-extraction\":\n      return args[0];\n    case \"question-answering\": {\n      const question = args[0];\n      const context = args[1];\n      if (Array.isArray(question) && Array.isArray(context) && question.every((value) => typeof value === \"string\") && context.every((value) => typeof value === \"string\")) {\n        return question.map((value, index) => [\n          {\n            role: \"user\",\n            content: `Context:\n${context[index] ?? \"\"}\n\nQuestion:\n${value}`\n          }\n        ]);\n      }\n      if (typeof question === \"string\" && typeof context === \"string\") {\n        return [\n          {\n            role: \"user\",\n            content: `Context:\n${context}\n\nQuestion:\n${question}`\n          }\n        ];\n      }\n      return { context, question };\n    }\n  }\n  const input = args[0];\n  if (task === \"text-generation\" && isChat(input)) {\n    return input;\n  }\n  if (task === \"text-generation\" && Array.isArray(input) && input.every(isChat)) {\n    return input;\n  }\n  if (typeof input === \"string\") {\n    return [{ role: \"user\", content: input }];\n  }\n  if (Array.isArray(input) && input.every((value) => typeof value === \"string\")) {\n    return input.map((value) => [\n      {\n        role: \"user\",\n        content: value\n      }\n    ]);\n  }\n  return input;\n}\nfunction isChat(value) {\n  return Array.isArray(value) && value.length > 0 && value.every(\n    (message) => isObject(message) && typeof message.role === \"string\" && \"content\" in message\n  );\n}\nfunction extractOutput(task, result) {\n  switch (task) {\n    case \"feature-extraction\":\n      return summarizeEmbedding(result);\n    case \"question-answering\":\n      return choicesFromAnswers(result);\n    default:\n      return choicesFromGenerations(result);\n  }\n}\nfunction summarizeEmbedding(result) {\n  if (!isObject(result) || !Array.isArray(result.dims)) {\n    return void 0;\n  }\n  const { dims } = result;\n  if (dims.length === 0 || !dims.every((dimension) => typeof dimension === \"number\")) {\n    return void 0;\n  }\n  if (dims.length === 1) {\n    return { embedding_length: dims[0] };\n  }\n  if (dims.length === 2) {\n    return {\n      embedding_count: dims[0],\n      embedding_length: dims[1]\n    };\n  }\n  return {\n    embedding_batch_count: dims[0],\n    embedding_count: dims[1],\n    embedding_length: dims.at(-1) ?? 0\n  };\n}\nfunction choicesFromAnswers(result) {\n  const answers = Array.isArray(result) ? result.flat() : [result];\n  const choices = answers.flatMap((answer, index) => {\n    if (!isObject(answer) || typeof answer.answer !== \"string\") {\n      return [];\n    }\n    return [\n      {\n        index,\n        finish_reason: \"stop\",\n        message: {\n          role: \"assistant\",\n          content: answer.answer\n        }\n      }\n    ];\n  });\n  return choices.length > 0 ? choices : void 0;\n}\nfunction choicesFromGenerations(result) {\n  const generations = Array.isArray(result) ? result.flat() : [result];\n  const choices = generations.flatMap((generation, index) => {\n    if (!isObject(generation)) {\n      return [];\n    }\n    const generated = generation.generated_text ?? generation.summary_text;\n    let content;\n    if (typeof generated === \"string\") {\n      content = generated;\n    } else if (isChat(generated)) {\n      content = generated.at(-1)?.content;\n    }\n    if (typeof content !== \"string\") {\n      return [];\n    }\n    return [\n      {\n        index,\n        finish_reason: \"stop\",\n        message: {\n          role: \"assistant\",\n          content\n        }\n      }\n    ];\n  });\n  return choices.length > 0 ? choices : void 0;\n}\n\n// src/instrumentation/plugins/openrouter-agent-channels.ts\nvar openRouterAgentChannels = defineChannels(\n  \"@openrouter/agent\",\n  {\n    callModel: channel({\n      channelName: \"callModel\",\n      kind: \"sync-stream\"\n    }),\n    callModelTurn: channel({\n      channelName: \"callModel.turn\",\n      kind: \"async\"\n    }),\n    toolExecute: channel({\n      channelName: \"tool.execute\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.OPENROUTER_AGENT }\n);\n\n// src/instrumentation/plugins/openrouter-agent-plugin.ts\nvar OpenRouterAgentPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToOpenRouterAgentChannels();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToOpenRouterAgentChannels() {\n    this.unsubscribers.push(\n      traceSyncStreamChannel(openRouterAgentChannels.callModel, {\n        name: \"openrouter.callModel\",\n        type: \"task\" /* TASK */,\n        extractInput: (args) => {\n          const request = getOpenRouterCallModelRequestArg(args);\n          return {\n            input: request ? extractOpenRouterCallModelInput(request) : void 0,\n            metadata: request ? extractOpenRouterCallModelMetadata(request) : { provider: \"openrouter\" }\n          };\n        },\n        patchResult: ({ endEvent, result, span }) => {\n          return patchOpenRouterCallModelResult({\n            request: getOpenRouterCallModelRequestArg(endEvent.arguments),\n            result,\n            span\n          });\n        }\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openRouterAgentChannels.callModelTurn, {\n        name: \"openrouter.beta.responses.send\",\n        type: \"llm\" /* LLM */,\n        extractInput: (args, event) => {\n          const request = getOpenRouterCallModelRequestArg(args);\n          const metadata = request ? extractOpenRouterCallModelMetadata(request) : { provider: \"openrouter\" };\n          if (isObject(metadata) && \"tools\" in metadata) {\n            delete metadata.tools;\n          }\n          return {\n            input: request ? extractOpenRouterCallModelInput(request) : void 0,\n            metadata: {\n              ...metadata,\n              step: event.step,\n              step_type: event.stepType\n            }\n          };\n        },\n        extractOutput: (result) => extractOpenRouterResponseOutput(result),\n        extractMetadata: (result, event) => {\n          if (!isObject(result)) {\n            return {\n              step: event?.step,\n              step_type: event?.stepType\n            };\n          }\n          return {\n            ...extractOpenRouterResponseMetadata(result) || {},\n            ...event?.step !== void 0 ? { step: event.step } : {},\n            ...event?.stepType ? { step_type: event.stepType } : {}\n          };\n        },\n        extractMetrics: (result) => isObject(result) ? parseOpenRouterMetricsFromUsage(result.usage) : {}\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openRouterAgentChannels.toolExecute, {\n        name: \"openrouter.tool\",\n        type: \"tool\" /* TOOL */,\n        extractInput: (args, event) => ({\n          input: args[0],\n          metadata: {\n            provider: \"openrouter\",\n            tool_name: event.toolName,\n            ...event.toolCallId ? { tool_call_id: event.toolCallId } : {}\n          }\n        }),\n        extractOutput: (result) => result,\n        extractMetrics: () => ({}),\n        aggregateChunks: (chunks) => ({\n          output: chunks.length > 0 ? chunks[chunks.length - 1] : void 0,\n          metrics: {}\n        })\n      })\n    );\n    const callModelChannel = openRouterAgentChannels.callModel.tracingChannel();\n    const callModelHandlers = {\n      start: (event) => {\n        const request = getOpenRouterCallModelRequestArg(event.arguments);\n        if (!request) {\n          return;\n        }\n        patchOpenRouterCallModelRequestTools(request);\n      }\n    };\n    callModelChannel.subscribe(callModelHandlers);\n    this.unsubscribers.push(() => {\n      callModelChannel.unsubscribe(callModelHandlers);\n    });\n  }\n};\nfunction normalizeArgs2(args) {\n  if (Array.isArray(args)) {\n    return args;\n  }\n  if (isArrayLike2(args)) {\n    return Array.from(args);\n  }\n  return [args];\n}\nfunction isArrayLike2(value) {\n  return isObject(value) && \"length\" in value && typeof value.length === \"number\" && Number.isInteger(value.length) && value.length >= 0;\n}\nfunction getOpenRouterCallModelRequestArg(args) {\n  const normalizedArgs = normalizeArgs2(args);\n  const keyedRequestArg = normalizedArgs.find(\n    (arg) => isObject(arg) && (\"input\" in arg || \"model\" in arg || \"tools\" in arg)\n  );\n  if (isObject(keyedRequestArg)) {\n    return keyedRequestArg;\n  }\n  const firstObjectArg = normalizedArgs.find((arg) => isObject(arg));\n  return isObject(firstObjectArg) ? firstObjectArg : void 0;\n}\nvar TOKEN_NAME_MAP2 = {\n  promptTokens: \"prompt_tokens\",\n  inputTokens: \"prompt_tokens\",\n  completionTokens: \"completion_tokens\",\n  outputTokens: \"completion_tokens\",\n  totalTokens: \"tokens\",\n  prompt_tokens: \"prompt_tokens\",\n  input_tokens: \"prompt_tokens\",\n  completion_tokens: \"completion_tokens\",\n  output_tokens: \"completion_tokens\",\n  total_tokens: \"tokens\"\n};\nvar TOKEN_DETAIL_PREFIX_MAP = {\n  promptTokensDetails: \"prompt\",\n  inputTokensDetails: \"prompt\",\n  completionTokensDetails: \"completion\",\n  outputTokensDetails: \"completion\",\n  costDetails: \"cost\",\n  prompt_tokens_details: \"prompt\",\n  input_tokens_details: \"prompt\",\n  completion_tokens_details: \"completion\",\n  output_tokens_details: \"completion\",\n  cost_details: \"cost\"\n};\nfunction camelToSnake(value) {\n  return value.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);\n}\nfunction parseOpenRouterMetricsFromUsage(usage) {\n  if (!isObject(usage)) {\n    return {};\n  }\n  const metrics = {};\n  for (const [name, value] of Object.entries(usage)) {\n    if (typeof value === \"number\") {\n      metrics[TOKEN_NAME_MAP2[name] || camelToSnake(name)] = value;\n      continue;\n    }\n    if (!isObject(value)) {\n      continue;\n    }\n    const prefix = TOKEN_DETAIL_PREFIX_MAP[name];\n    if (!prefix) {\n      continue;\n    }\n    for (const [nestedName, nestedValue] of Object.entries(value)) {\n      if (typeof nestedValue !== \"number\") {\n        continue;\n      }\n      metrics[`${prefix}_${camelToSnake(nestedName)}`] = nestedValue;\n    }\n  }\n  return metrics;\n}\nfunction extractOpenRouterUsageMetadata(usage) {\n  if (!isObject(usage)) {\n    return void 0;\n  }\n  const metadata = {};\n  if (typeof usage.isByok === \"boolean\") {\n    metadata.is_byok = usage.isByok;\n  } else if (typeof usage.is_byok === \"boolean\") {\n    metadata.is_byok = usage.is_byok;\n  }\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nvar OMITTED_OPENROUTER_KEYS = /* @__PURE__ */ new Set([\n  \"execute\",\n  \"render\",\n  \"nextTurnParams\",\n  \"requireApproval\"\n]);\nfunction parseOpenRouterModelString(model) {\n  if (typeof model !== \"string\") {\n    return { model };\n  }\n  const slashIndex = model.indexOf(\"/\");\n  if (slashIndex > 0 && slashIndex < model.length - 1) {\n    return {\n      provider: model.substring(0, slashIndex),\n      model: model.substring(slashIndex + 1)\n    };\n  }\n  return { model };\n}\nfunction isZodSchema3(value) {\n  return value != null && typeof value === \"object\" && \"_def\" in value && typeof value._def === \"object\";\n}\nfunction serializeZodSchema3(schema) {\n  try {\n    return zodToJsonSchema(schema);\n  } catch {\n    return {\n      type: \"object\",\n      description: \"Zod schema (conversion failed)\"\n    };\n  }\n}\nfunction serializeOpenRouterTool(tool) {\n  if (!isObject(tool)) {\n    return tool;\n  }\n  const serialized = {};\n  for (const [key, value] of Object.entries(tool)) {\n    if (OMITTED_OPENROUTER_KEYS.has(key)) {\n      continue;\n    }\n    if (key === \"function\" && isObject(value)) {\n      serialized.function = sanitizeOpenRouterLoggedValue(value);\n      continue;\n    }\n    serialized[key] = sanitizeOpenRouterLoggedValue(value);\n  }\n  return serialized;\n}\nfunction serializeOpenRouterToolsForLogging(tools) {\n  if (!Array.isArray(tools)) {\n    return void 0;\n  }\n  return tools.map((tool) => serializeOpenRouterTool(tool));\n}\nfunction sanitizeOpenRouterLoggedValue(value) {\n  if (isZodSchema3(value)) {\n    return serializeZodSchema3(value);\n  }\n  if (typeof value === \"function\") {\n    return \"[Function]\";\n  }\n  if (Array.isArray(value)) {\n    return value.map((entry) => sanitizeOpenRouterLoggedValue(entry));\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  const sanitized = {};\n  for (const [key, entry] of Object.entries(value)) {\n    if (OMITTED_OPENROUTER_KEYS.has(key)) {\n      continue;\n    }\n    if (key === \"tools\" && Array.isArray(entry)) {\n      sanitized.tools = serializeOpenRouterToolsForLogging(entry);\n      continue;\n    }\n    sanitized[key] = sanitizeOpenRouterLoggedValue(entry);\n  }\n  return sanitized;\n}\nfunction buildOpenRouterMetadata(metadata, httpReferer, appTitle, appCategories, xTitle) {\n  const sanitized = sanitizeOpenRouterLoggedValue(metadata);\n  const metadataRecord = isObject(sanitized) ? sanitized : {};\n  const { model, provider: providerRouting, ...rest } = metadataRecord;\n  const normalizedModel = parseOpenRouterModelString(model);\n  return {\n    ...rest,\n    ...normalizedModel.model !== void 0 ? { model: normalizedModel.model } : {},\n    ...providerRouting !== void 0 ? { providerRouting } : {},\n    ...httpReferer !== void 0 ? { httpReferer } : {},\n    ...appTitle !== void 0 ? { appTitle } : {},\n    ...appCategories !== void 0 ? { appCategories } : {},\n    ...xTitle !== void 0 ? { xTitle } : {},\n    provider: normalizedModel.provider || \"openrouter\"\n  };\n}\nfunction extractOpenRouterCallModelInput(request) {\n  return isObject(request) && \"input\" in request ? sanitizeOpenRouterLoggedValue(request.input) : void 0;\n}\nfunction extractOpenRouterCallModelMetadata(request) {\n  if (!isObject(request)) {\n    return { provider: \"openrouter\" };\n  }\n  const { input: _input, ...metadata } = request;\n  return buildOpenRouterMetadata(\n    metadata,\n    void 0,\n    void 0,\n    void 0,\n    void 0\n  );\n}\nfunction extractOpenRouterResponseMetadata(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const { output: _output, data: _data, usage, ...metadata } = result;\n  const sanitized = sanitizeOpenRouterLoggedValue(metadata);\n  const metadataRecord = isObject(sanitized) ? sanitized : {};\n  const { model, provider, ...rest } = metadataRecord;\n  const normalizedModel = parseOpenRouterModelString(model);\n  const normalizedProvider = (typeof provider === \"string\" ? provider : void 0) || normalizedModel.provider;\n  const usageMetadata = extractOpenRouterUsageMetadata(usage);\n  const combined = {\n    ...rest,\n    ...normalizedModel.model !== void 0 ? { model: normalizedModel.model } : {},\n    ...usageMetadata || {},\n    ...normalizedProvider !== void 0 ? { provider: normalizedProvider } : {}\n  };\n  return Object.keys(combined).length > 0 ? combined : void 0;\n}\nfunction extractOpenRouterResponseOutput(response, fallbackOutput) {\n  if (isObject(response) && \"output\" in response && response.output !== void 0) {\n    return sanitizeOpenRouterLoggedValue(response.output);\n  }\n  if (fallbackOutput !== void 0) {\n    return sanitizeOpenRouterLoggedValue(fallbackOutput);\n  }\n  return void 0;\n}\nvar OPENROUTER_WRAPPED_TOOL = /* @__PURE__ */ Symbol(\"braintrust.openrouter.wrappedTool\");\nfunction patchOpenRouterCallModelRequestTools(request) {\n  if (!Array.isArray(request.tools) || request.tools.length === 0) {\n    return void 0;\n  }\n  const originalTools = request.tools;\n  const wrappedTools = originalTools.map((tool) => wrapOpenRouterTool(tool));\n  const didPatch = wrappedTools.some(\n    (tool, index) => tool !== originalTools[index]\n  );\n  if (!didPatch) {\n    return void 0;\n  }\n  request.tools = wrappedTools;\n  return () => {\n    request.tools = originalTools;\n  };\n}\nfunction wrapOpenRouterTool(tool) {\n  if (isWrappedTool(tool) || !tool.function || typeof tool.function !== \"object\" || typeof tool.function.execute !== \"function\") {\n    return tool;\n  }\n  const toolName = tool.function.name || \"tool\";\n  const originalExecute = tool.function.execute;\n  const wrappedTool = {\n    ...tool,\n    function: {\n      ...tool.function,\n      execute(...args) {\n        return traceToolExecution({\n          args,\n          execute: () => Reflect.apply(originalExecute, this, args),\n          toolCallId: getToolCallId(args[1]),\n          toolName\n        });\n      }\n    }\n  };\n  Object.defineProperty(wrappedTool, OPENROUTER_WRAPPED_TOOL, {\n    value: true,\n    enumerable: false,\n    configurable: false\n  });\n  return wrappedTool;\n}\nfunction isWrappedTool(tool) {\n  return Boolean(tool[OPENROUTER_WRAPPED_TOOL]);\n}\nfunction traceToolExecution(args) {\n  const tracingChannel = openRouterAgentChannels.toolExecute.tracingChannel();\n  const input = args.args.length > 0 ? args.args[0] : void 0;\n  const event = {\n    arguments: [input],\n    span_info: {\n      name: args.toolName\n    },\n    toolCallId: args.toolCallId,\n    toolName: args.toolName\n  };\n  tracingChannel.start.publish(event);\n  try {\n    const result = args.execute();\n    return publishToolResult(tracingChannel, event, result);\n  } catch (error) {\n    event.error = normalizeError(error);\n    tracingChannel.error.publish(event);\n    throw error;\n  }\n}\nfunction publishToolResult(tracingChannel, event, result) {\n  if (isPromiseLike(result)) {\n    return result.then(\n      (resolved) => {\n        event.result = resolved;\n        tracingChannel.asyncEnd.publish(event);\n        return resolved;\n      },\n      (error) => {\n        event.error = normalizeError(error);\n        tracingChannel.error.publish(event);\n        throw error;\n      }\n    );\n  }\n  event.result = result;\n  tracingChannel.asyncEnd.publish(event);\n  return result;\n}\nfunction getToolCallId(context) {\n  const toolContext = context;\n  return typeof toolContext?.toolCall?.id === \"string\" ? toolContext.toolCall.id : void 0;\n}\nvar OPENROUTER_WRAPPED_CALL_MODEL_RESULT = /* @__PURE__ */ Symbol(\n  \"braintrust.openrouter.wrappedCallModelResult\"\n);\nvar OPENROUTER_CALL_MODEL_STREAM_METHODS = [\n  \"getFullResponsesStream\",\n  \"getItemsStream\",\n  \"getNewMessagesStream\",\n  \"getReasoningStream\",\n  \"getTextStream\",\n  \"getToolCallsStream\",\n  \"getToolStream\"\n];\nvar OPENROUTER_CALL_MODEL_CONTEXT_METHODS = [\n  \"cancel\",\n  \"getPendingToolCalls\",\n  \"getState\",\n  \"getToolCalls\",\n  \"requiresApproval\"\n];\nfunction patchOpenRouterCallModelResult(args) {\n  const { request, result, span } = args;\n  if (!isObject(result) || isWrappedCallModelResult(result)) {\n    return false;\n  }\n  const resultLike = result;\n  const hasInstrumentableMethod = typeof resultLike.getResponse === \"function\" || typeof resultLike.getText === \"function\" || OPENROUTER_CALL_MODEL_STREAM_METHODS.some(\n    (methodName) => typeof resultLike[methodName] === \"function\"\n  );\n  if (!hasInstrumentableMethod) {\n    return false;\n  }\n  Object.defineProperty(resultLike, OPENROUTER_WRAPPED_CALL_MODEL_RESULT, {\n    value: true,\n    enumerable: false,\n    configurable: false\n  });\n  const originalGetResponse = typeof resultLike.getResponse === \"function\" ? resultLike.getResponse.bind(resultLike) : void 0;\n  const originalGetInitialResponse = typeof resultLike.getInitialResponse === \"function\" ? resultLike.getInitialResponse.bind(resultLike) : void 0;\n  const originalMakeFollowupRequest = typeof resultLike.makeFollowupRequest === \"function\" ? resultLike.makeFollowupRequest.bind(resultLike) : void 0;\n  let ended = false;\n  let tracedTurnCount = 0;\n  const endSpanWithResult = async (response, fallbackOutput) => {\n    if (ended) {\n      return;\n    }\n    ended = true;\n    const finalResponse = getFinalOpenRouterCallModelResponse(\n      resultLike,\n      response\n    );\n    if (finalResponse) {\n      const rounds = getOpenRouterCallModelRounds(resultLike);\n      const metadata = extractOpenRouterCallModelResultMetadata(\n        finalResponse,\n        rounds.length + 1\n      );\n      const metrics = tracedTurnCount === 0 ? aggregateOpenRouterCallModelMetrics(rounds, finalResponse) : void 0;\n      span.log({\n        output: extractOpenRouterResponseOutput(finalResponse, fallbackOutput),\n        ...metadata ? { metadata } : {},\n        // Child turn spans already carry per-response usage. Duplicating those\n        // metrics on the parent makes trace-level token/cost totals double count.\n        ...metrics && Object.keys(metrics).length > 0 ? { metrics } : {}\n      });\n      span.end();\n      return;\n    }\n    if (fallbackOutput !== void 0) {\n      span.log({\n        output: fallbackOutput\n      });\n    }\n    span.end();\n  };\n  const endSpanWithError = (error) => {\n    if (ended) {\n      return;\n    }\n    ended = true;\n    span.log({ error: toLoggedError(error) });\n    span.end();\n  };\n  const finalizeFromResponse = async (fallbackOutput) => {\n    if (!originalGetResponse) {\n      await endSpanWithResult(void 0, fallbackOutput);\n      return;\n    }\n    try {\n      await endSpanWithResult(await originalGetResponse(), fallbackOutput);\n    } catch {\n      await endSpanWithResult(void 0, fallbackOutput);\n    }\n  };\n  if (originalGetResponse) {\n    resultLike.getResponse = async (...args2) => {\n      return await withCurrent(span, async () => {\n        try {\n          const response = await originalGetResponse(...args2);\n          await endSpanWithResult(response);\n          return response;\n        } catch (error) {\n          endSpanWithError(error);\n          throw error;\n        }\n      });\n    };\n  }\n  if (typeof resultLike.getText === \"function\") {\n    const originalGetText = resultLike.getText.bind(resultLike);\n    resultLike.getText = async (...args2) => {\n      return await withCurrent(span, async () => {\n        try {\n          const text = await originalGetText(...args2);\n          await finalizeFromResponse(text);\n          return text;\n        } catch (error) {\n          endSpanWithError(error);\n          throw error;\n        }\n      });\n    };\n  }\n  for (const methodName of OPENROUTER_CALL_MODEL_CONTEXT_METHODS) {\n    if (typeof resultLike[methodName] !== \"function\") {\n      continue;\n    }\n    const originalMethod = resultLike[methodName];\n    resultLike[methodName] = async (...args2) => {\n      return await withCurrent(span, async () => {\n        return await originalMethod.apply(resultLike, args2);\n      });\n    };\n  }\n  for (const methodName of OPENROUTER_CALL_MODEL_STREAM_METHODS) {\n    if (typeof resultLike[methodName] !== \"function\") {\n      continue;\n    }\n    const originalMethod = resultLike[methodName];\n    resultLike[methodName] = (...args2) => {\n      const stream = withCurrent(\n        span,\n        () => originalMethod.apply(resultLike, args2)\n      );\n      if (!isAsyncIterable3(stream)) {\n        return stream;\n      }\n      return wrapAsyncIterableWithSpan({\n        finalize: finalizeFromResponse,\n        iteratorFactory: () => stream[Symbol.asyncIterator](),\n        onError: endSpanWithError,\n        span\n      });\n    };\n  }\n  if (originalGetInitialResponse) {\n    let initialTurnTraced = false;\n    resultLike.getInitialResponse = async (...args2) => {\n      if (initialTurnTraced) {\n        return await withCurrent(span, async () => {\n          return await originalGetInitialResponse(...args2);\n        });\n      }\n      initialTurnTraced = true;\n      const step = tracedTurnCount + 1;\n      const stepType = tracedTurnCount === 0 ? \"initial\" : \"continue\";\n      const response = await traceOpenRouterCallModelTurn({\n        fn: async () => {\n          const nextResponse = await originalGetInitialResponse(...args2);\n          tracedTurnCount++;\n          return nextResponse;\n        },\n        parentSpan: span,\n        request: getOpenRouterResolvedRequest(resultLike, request),\n        step,\n        stepType\n      });\n      return response;\n    };\n  }\n  if (originalMakeFollowupRequest) {\n    resultLike.makeFollowupRequest = async (...args2) => {\n      const currentResponse = args2[0];\n      const toolResults = Array.isArray(args2[1]) ? args2[1] : [];\n      const step = tracedTurnCount + 1;\n      const response = await traceOpenRouterCallModelTurn({\n        fn: async () => {\n          const nextResponse = await originalMakeFollowupRequest(...args2);\n          tracedTurnCount++;\n          return nextResponse;\n        },\n        parentSpan: span,\n        request: buildOpenRouterFollowupRequest(\n          getOpenRouterResolvedRequest(resultLike, request),\n          currentResponse,\n          toolResults\n        ),\n        step,\n        stepType: \"continue\"\n      });\n      return response;\n    };\n  }\n  return true;\n}\nasync function traceOpenRouterCallModelTurn(args) {\n  const context = {\n    arguments: [args.request],\n    step: args.step,\n    stepType: args.stepType\n  };\n  return await withCurrent(\n    args.parentSpan,\n    () => openRouterAgentChannels.callModelTurn.tracePromise(args.fn, context)\n  );\n}\nfunction isWrappedCallModelResult(value) {\n  return Boolean(\n    isObject(value) && value[OPENROUTER_WRAPPED_CALL_MODEL_RESULT]\n  );\n}\nfunction extractOpenRouterCallModelResultMetadata(response, turnCount) {\n  const combined = {\n    ...extractOpenRouterResponseMetadata(response) || {},\n    ...turnCount !== void 0 ? { turn_count: turnCount } : {}\n  };\n  return Object.keys(combined).length > 0 ? combined : void 0;\n}\nfunction getFinalOpenRouterCallModelResponse(result, response) {\n  if (isObject(response)) {\n    return response;\n  }\n  return isObject(result.finalResponse) ? result.finalResponse : void 0;\n}\nfunction getOpenRouterCallModelRounds(result) {\n  if (!Array.isArray(result.allToolExecutionRounds)) {\n    return [];\n  }\n  return result.allToolExecutionRounds.filter((round) => isObject(round)).map((round) => ({\n    response: isObject(round.response) ? round.response : void 0,\n    round: typeof round.round === \"number\" ? round.round : void 0,\n    toolResults: Array.isArray(round.toolResults) ? round.toolResults : []\n  })).filter((round) => round.response !== void 0);\n}\nfunction aggregateOpenRouterCallModelMetrics(rounds, finalResponse) {\n  const metrics = {};\n  const responses = [\n    ...rounds.map((round) => round.response).filter(isObject),\n    finalResponse\n  ];\n  for (const response of responses) {\n    const responseMetrics = parseOpenRouterMetricsFromUsage(response.usage);\n    for (const [name, value] of Object.entries(responseMetrics)) {\n      metrics[name] = (metrics[name] || 0) + value;\n    }\n  }\n  return metrics;\n}\nfunction buildNextOpenRouterCallModelInput(currentInput, response, toolResults) {\n  const normalizedInput = Array.isArray(currentInput) ? [...currentInput] : currentInput === void 0 ? [] : [currentInput];\n  const responseOutput = Array.isArray(response.output) ? response.output : response.output === void 0 ? [] : [response.output];\n  return [...normalizedInput, ...responseOutput, ...toolResults].map(\n    (entry) => sanitizeOpenRouterLoggedValue(entry)\n  );\n}\nfunction getOpenRouterResolvedRequest(result, request) {\n  if (isObject(result.resolvedRequest)) {\n    return result.resolvedRequest;\n  }\n  return request;\n}\nfunction buildOpenRouterFollowupRequest(request, currentResponse, toolResults) {\n  if (!request) {\n    return void 0;\n  }\n  return {\n    ...request,\n    input: buildNextOpenRouterCallModelInput(\n      extractOpenRouterCallModelInput(request),\n      isObject(currentResponse) ? currentResponse : {},\n      toolResults\n    ),\n    stream: false\n  };\n}\nfunction wrapAsyncIterableWithSpan(args) {\n  return {\n    [Symbol.asyncIterator]() {\n      const iterator = args.iteratorFactory();\n      return {\n        next(value) {\n          return withCurrent(\n            args.span,\n            () => value === void 0 ? iterator.next() : iterator.next(value)\n          ).then(\n            async (result) => {\n              if (result.done) {\n                await args.finalize();\n              }\n              return result;\n            },\n            (error) => {\n              args.onError(error);\n              throw error;\n            }\n          );\n        },\n        return(value) {\n          if (typeof iterator.return !== \"function\") {\n            return args.finalize().then(() => ({\n              done: true,\n              value\n            }));\n          }\n          return withCurrent(args.span, () => iterator.return(value)).then(\n            async (result) => {\n              await args.finalize();\n              return result;\n            },\n            (error) => {\n              args.onError(error);\n              throw error;\n            }\n          );\n        },\n        throw(error) {\n          args.onError(error);\n          if (typeof iterator.throw !== \"function\") {\n            return Promise.reject(error);\n          }\n          return withCurrent(args.span, () => iterator.throw(error));\n        },\n        [Symbol.asyncIterator]() {\n          return this;\n        }\n      };\n    }\n  };\n}\nfunction isAsyncIterable3(value) {\n  return !!value && (typeof value === \"object\" || typeof value === \"function\") && Symbol.asyncIterator in value && typeof value[Symbol.asyncIterator] === \"function\";\n}\nfunction normalizeError(error) {\n  return error instanceof Error ? error : new Error(String(error));\n}\n\n// src/instrumentation/plugins/openrouter-channels.ts\nvar openRouterChannels = defineChannels(\n  \"@openrouter/sdk\",\n  {\n    chatSend: channel({\n      channelName: \"chat.send\",\n      kind: \"async\"\n    }),\n    embeddingsGenerate: channel({\n      channelName: \"embeddings.generate\",\n      kind: \"async\"\n    }),\n    rerankRerank: channel({\n      channelName: \"rerank.rerank\",\n      kind: \"async\"\n    }),\n    betaResponsesSend: channel({\n      channelName: \"beta.responses.send\",\n      kind: \"async\"\n    }),\n    callModel: channel({\n      channelName: \"callModel\",\n      kind: \"sync-stream\"\n    }),\n    callModelTurn: channel({\n      channelName: \"callModel.turn\",\n      kind: \"async\"\n    }),\n    toolExecute: channel({\n      channelName: \"tool.execute\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.OPENROUTER }\n);\n\n// src/instrumentation/plugins/openrouter-plugin.ts\nvar OpenRouterPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToOpenRouterChannels();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToOpenRouterChannels() {\n    this.unsubscribers.push(\n      traceStreamingChannel(openRouterChannels.chatSend, {\n        name: \"openrouter.chat.send\",\n        type: \"llm\" /* LLM */,\n        extractInput: (args) => {\n          const request = getOpenRouterRequestArg(args);\n          const chatGenerationParams = isObject(request?.chatGenerationParams) ? request.chatGenerationParams : {};\n          const httpReferer = request?.httpReferer;\n          const xTitle = request?.xTitle;\n          const { messages, ...metadata } = chatGenerationParams;\n          return {\n            input: messages,\n            metadata: buildOpenRouterMetadata2(metadata, httpReferer, xTitle)\n          };\n        },\n        extractOutput: (result) => {\n          return isObject(result) ? result.choices : void 0;\n        },\n        extractMetrics: (result, startTime) => {\n          const metrics = parseOpenRouterMetricsFromUsage2(result?.usage);\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateOpenRouterChatChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openRouterChannels.embeddingsGenerate, {\n        name: \"openrouter.embeddings.generate\",\n        type: \"llm\" /* LLM */,\n        extractInput: (args) => {\n          const request = getOpenRouterRequestArg(args);\n          const requestBody = isObject(request?.requestBody) ? request.requestBody : {};\n          const httpReferer = request?.httpReferer;\n          const xTitle = request?.xTitle;\n          const { input, ...metadata } = requestBody;\n          return {\n            input,\n            metadata: buildOpenRouterEmbeddingMetadata(\n              metadata,\n              httpReferer,\n              xTitle\n            )\n          };\n        },\n        extractOutput: (result) => {\n          if (!isObject(result)) {\n            return void 0;\n          }\n          const embedding = result.data?.[0]?.embedding;\n          return Array.isArray(embedding) ? { embedding_length: embedding.length } : void 0;\n        },\n        extractMetadata: (result) => {\n          if (!isObject(result)) {\n            return void 0;\n          }\n          return extractOpenRouterResponseMetadata2(result);\n        },\n        extractMetrics: (result) => {\n          return isObject(result) ? parseOpenRouterMetricsFromUsage2(result.usage) : {};\n        }\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openRouterChannels.rerankRerank, {\n        name: \"openrouter.rerank.rerank\",\n        type: \"llm\" /* LLM */,\n        extractInput: (args) => {\n          const request = getOpenRouterRequestArg(args);\n          const requestBody = isObject(request?.requestBody) ? request.requestBody : {};\n          const httpReferer = request?.httpReferer;\n          const xTitle = request?.xTitle ?? request?.appTitle;\n          const { documents, query, ...metadata } = requestBody;\n          return {\n            input: {\n              documents,\n              query\n            },\n            metadata: buildOpenRouterRerankMetadata(\n              metadata,\n              documents,\n              httpReferer,\n              xTitle\n            )\n          };\n        },\n        extractOutput: (result) => extractOpenRouterRerankOutput(result),\n        extractMetadata: (result) => extractOpenRouterResponseMetadata2(result),\n        extractMetrics: (result) => isObject(result) ? parseOpenRouterMetricsFromUsage2(result.usage) : {}\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openRouterChannels.betaResponsesSend, {\n        name: \"openrouter.beta.responses.send\",\n        type: \"llm\" /* LLM */,\n        extractInput: (args) => {\n          const request = getOpenRouterRequestArg(args);\n          const openResponsesRequest = isObject(request?.openResponsesRequest) ? request.openResponsesRequest : {};\n          const httpReferer = request?.httpReferer;\n          const xTitle = request?.xTitle;\n          const { input, ...metadata } = openResponsesRequest;\n          return {\n            input,\n            metadata: buildOpenRouterMetadata2(metadata, httpReferer, xTitle)\n          };\n        },\n        extractOutput: (result) => extractOpenRouterResponseOutput2(result),\n        extractMetadata: (result) => extractOpenRouterResponseMetadata2(result),\n        extractMetrics: (result, startTime) => {\n          const metrics = parseOpenRouterMetricsFromUsage2(result?.usage);\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateOpenRouterResponseStreamEvents\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(openRouterChannels.callModel, {\n        name: \"openrouter.callModel\",\n        type: \"task\" /* TASK */,\n        extractInput: (args) => {\n          const request = getOpenRouterCallModelRequestArg2(args);\n          return {\n            input: request ? extractOpenRouterCallModelInput2(request) : void 0,\n            metadata: request ? extractOpenRouterCallModelMetadata2(request) : { provider: \"openrouter\" }\n          };\n        },\n        patchResult: ({ endEvent, result, span }) => {\n          return patchOpenRouterCallModelResult2({\n            request: getOpenRouterCallModelRequestArg2(endEvent.arguments),\n            result,\n            span\n          });\n        }\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(openRouterChannels.callModelTurn, {\n        name: \"openrouter.beta.responses.send\",\n        type: \"llm\" /* LLM */,\n        extractInput: (args, event) => {\n          const request = getOpenRouterCallModelRequestArg2(args);\n          const metadata = request ? extractOpenRouterCallModelMetadata2(request) : { provider: \"openrouter\" };\n          if (isObject(metadata) && \"tools\" in metadata) {\n            delete metadata.tools;\n          }\n          return {\n            input: request ? extractOpenRouterCallModelInput2(request) : void 0,\n            metadata: {\n              ...metadata,\n              step: event.step,\n              step_type: event.stepType\n            }\n          };\n        },\n        extractOutput: (result) => extractOpenRouterResponseOutput2(result),\n        extractMetadata: (result, event) => {\n          if (!isObject(result)) {\n            return {\n              step: event?.step,\n              step_type: event?.stepType\n            };\n          }\n          return {\n            ...extractOpenRouterResponseMetadata2(result) || {},\n            ...event?.step !== void 0 ? { step: event.step } : {},\n            ...event?.stepType ? { step_type: event.stepType } : {}\n          };\n        },\n        extractMetrics: (result) => isObject(result) ? parseOpenRouterMetricsFromUsage2(result.usage) : {}\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(openRouterChannels.toolExecute, {\n        name: \"openrouter.tool\",\n        type: \"tool\" /* TOOL */,\n        extractInput: (args, event) => ({\n          input: args[0],\n          metadata: {\n            provider: \"openrouter\",\n            tool_name: event.toolName,\n            ...event.toolCallId ? { tool_call_id: event.toolCallId } : {}\n          }\n        }),\n        extractOutput: (result) => result,\n        extractMetrics: () => ({}),\n        aggregateChunks: (chunks) => ({\n          output: chunks.length > 0 ? chunks[chunks.length - 1] : void 0,\n          metrics: {}\n        })\n      })\n    );\n    const callModelChannel = openRouterChannels.callModel.tracingChannel();\n    const callModelHandlers = {\n      start: (event) => {\n        const request = getOpenRouterCallModelRequestArg2(event.arguments);\n        if (!request) {\n          return;\n        }\n        patchOpenRouterCallModelRequestTools2(request);\n      }\n    };\n    callModelChannel.subscribe(callModelHandlers);\n    this.unsubscribers.push(() => {\n      callModelChannel.unsubscribe(callModelHandlers);\n    });\n  }\n};\nfunction normalizeArgs3(args) {\n  if (Array.isArray(args)) {\n    return args;\n  }\n  if (isArrayLike3(args)) {\n    return Array.from(args);\n  }\n  return [args];\n}\nfunction isArrayLike3(value) {\n  return isObject(value) && \"length\" in value && typeof value.length === \"number\" && Number.isInteger(value.length) && value.length >= 0;\n}\nfunction getOpenRouterRequestArg(args) {\n  const normalizedArgs = normalizeArgs3(args);\n  const keyedCandidate = normalizedArgs.find(\n    (arg) => isObject(arg) && (\"chatGenerationParams\" in arg || \"requestBody\" in arg || \"openResponsesRequest\" in arg)\n  );\n  if (isObject(keyedCandidate)) {\n    return keyedCandidate;\n  }\n  const firstObjectArg = normalizedArgs.find((arg) => isObject(arg));\n  return isObject(firstObjectArg) ? firstObjectArg : void 0;\n}\nfunction getOpenRouterCallModelRequestArg2(args) {\n  const firstObjectArg = normalizeArgs3(args).find((arg) => isObject(arg));\n  return isObject(firstObjectArg) ? firstObjectArg : void 0;\n}\nvar TOKEN_NAME_MAP3 = {\n  promptTokens: \"prompt_tokens\",\n  inputTokens: \"prompt_tokens\",\n  completionTokens: \"completion_tokens\",\n  outputTokens: \"completion_tokens\",\n  totalTokens: \"tokens\",\n  prompt_tokens: \"prompt_tokens\",\n  input_tokens: \"prompt_tokens\",\n  completion_tokens: \"completion_tokens\",\n  output_tokens: \"completion_tokens\",\n  total_tokens: \"tokens\"\n};\nvar TOKEN_DETAIL_PREFIX_MAP2 = {\n  promptTokensDetails: \"prompt\",\n  inputTokensDetails: \"prompt\",\n  completionTokensDetails: \"completion\",\n  outputTokensDetails: \"completion\",\n  costDetails: \"cost\",\n  prompt_tokens_details: \"prompt\",\n  input_tokens_details: \"prompt\",\n  completion_tokens_details: \"completion\",\n  output_tokens_details: \"completion\",\n  cost_details: \"cost\"\n};\nfunction camelToSnake2(value) {\n  return value.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);\n}\nfunction parseOpenRouterMetricsFromUsage2(usage) {\n  if (!isObject(usage)) {\n    return {};\n  }\n  const metrics = {};\n  for (const [name, value] of Object.entries(usage)) {\n    if (typeof value === \"number\") {\n      metrics[TOKEN_NAME_MAP3[name] || camelToSnake2(name)] = value;\n      continue;\n    }\n    if (!isObject(value)) {\n      continue;\n    }\n    const prefix = TOKEN_DETAIL_PREFIX_MAP2[name];\n    if (!prefix) {\n      continue;\n    }\n    for (const [nestedName, nestedValue] of Object.entries(value)) {\n      if (typeof nestedValue !== \"number\") {\n        continue;\n      }\n      metrics[`${prefix}_${camelToSnake2(nestedName)}`] = nestedValue;\n    }\n  }\n  return metrics;\n}\nfunction extractOpenRouterUsageMetadata2(usage) {\n  if (!isObject(usage)) {\n    return void 0;\n  }\n  const metadata = {};\n  if (typeof usage.isByok === \"boolean\") {\n    metadata.is_byok = usage.isByok;\n  } else if (typeof usage.is_byok === \"boolean\") {\n    metadata.is_byok = usage.is_byok;\n  }\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nvar OMITTED_OPENROUTER_KEYS2 = /* @__PURE__ */ new Set([\n  \"execute\",\n  \"render\",\n  \"nextTurnParams\",\n  \"requireApproval\"\n]);\nfunction parseOpenRouterModelString2(model) {\n  if (typeof model !== \"string\") {\n    return { model };\n  }\n  const slashIndex = model.indexOf(\"/\");\n  if (slashIndex > 0 && slashIndex < model.length - 1) {\n    return {\n      provider: model.substring(0, slashIndex),\n      model: model.substring(slashIndex + 1)\n    };\n  }\n  return { model };\n}\nfunction isZodSchema4(value) {\n  return value != null && typeof value === \"object\" && \"_def\" in value && typeof value._def === \"object\";\n}\nfunction serializeZodSchema4(schema) {\n  try {\n    return zodToJsonSchema(schema);\n  } catch {\n    return {\n      type: \"object\",\n      description: \"Zod schema (conversion failed)\"\n    };\n  }\n}\nfunction serializeOpenRouterTool2(tool) {\n  if (!isObject(tool)) {\n    return tool;\n  }\n  const serialized = {};\n  for (const [key, value] of Object.entries(tool)) {\n    if (OMITTED_OPENROUTER_KEYS2.has(key)) {\n      continue;\n    }\n    if (key === \"function\" && isObject(value)) {\n      serialized.function = sanitizeOpenRouterLoggedValue2(value);\n      continue;\n    }\n    serialized[key] = sanitizeOpenRouterLoggedValue2(value);\n  }\n  return serialized;\n}\nfunction serializeOpenRouterToolsForLogging2(tools) {\n  if (!Array.isArray(tools)) {\n    return void 0;\n  }\n  return tools.map((tool) => serializeOpenRouterTool2(tool));\n}\nfunction sanitizeOpenRouterLoggedValue2(value) {\n  if (isZodSchema4(value)) {\n    return serializeZodSchema4(value);\n  }\n  if (typeof value === \"function\") {\n    return \"[Function]\";\n  }\n  if (Array.isArray(value)) {\n    return value.map((entry) => sanitizeOpenRouterLoggedValue2(entry));\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  const sanitized = {};\n  for (const [key, entry] of Object.entries(value)) {\n    if (OMITTED_OPENROUTER_KEYS2.has(key)) {\n      continue;\n    }\n    if (key === \"tools\" && Array.isArray(entry)) {\n      sanitized.tools = serializeOpenRouterToolsForLogging2(entry);\n      continue;\n    }\n    sanitized[key] = sanitizeOpenRouterLoggedValue2(entry);\n  }\n  return sanitized;\n}\nfunction buildOpenRouterMetadata2(metadata, httpReferer, xTitle) {\n  const sanitized = sanitizeOpenRouterLoggedValue2(metadata);\n  const metadataRecord = isObject(sanitized) ? sanitized : {};\n  const { model, provider: providerRouting, ...rest } = metadataRecord;\n  const normalizedModel = parseOpenRouterModelString2(model);\n  return {\n    ...rest,\n    ...normalizedModel.model !== void 0 ? { model: normalizedModel.model } : {},\n    ...providerRouting !== void 0 ? { providerRouting } : {},\n    ...httpReferer !== void 0 ? { httpReferer } : {},\n    ...xTitle !== void 0 ? { xTitle } : {},\n    provider: normalizedModel.provider || \"openrouter\"\n  };\n}\nfunction buildOpenRouterEmbeddingMetadata(metadata, httpReferer, xTitle) {\n  const normalized = buildOpenRouterMetadata2(metadata, httpReferer, xTitle);\n  return typeof normalized.model === \"string\" ? {\n    ...normalized,\n    embedding_model: normalized.model\n  } : normalized;\n}\nfunction buildOpenRouterRerankMetadata(metadata, documents, httpReferer, xTitle) {\n  const normalized = buildOpenRouterMetadata2(metadata, httpReferer, xTitle);\n  return {\n    ...normalized,\n    ...Array.isArray(documents) ? { document_count: documents.length } : {}\n  };\n}\nfunction extractOpenRouterCallModelInput2(request) {\n  return isObject(request) && \"input\" in request ? sanitizeOpenRouterLoggedValue2(request.input) : void 0;\n}\nfunction extractOpenRouterCallModelMetadata2(request) {\n  if (!isObject(request)) {\n    return { provider: \"openrouter\" };\n  }\n  const { input: _input, ...metadata } = request;\n  return buildOpenRouterMetadata2(metadata, void 0, void 0);\n}\nfunction extractOpenRouterResponseMetadata2(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const { output: _output, data: _data, usage, ...metadata } = result;\n  const sanitized = sanitizeOpenRouterLoggedValue2(metadata);\n  const metadataRecord = isObject(sanitized) ? sanitized : {};\n  const { model, provider, ...rest } = metadataRecord;\n  const normalizedModel = parseOpenRouterModelString2(model);\n  const normalizedProvider = (typeof provider === \"string\" ? provider.toLowerCase() : void 0) || normalizedModel.provider;\n  const usageMetadata = extractOpenRouterUsageMetadata2(usage);\n  const combined = {\n    ...rest,\n    ...normalizedModel.model !== void 0 ? { model: normalizedModel.model } : {},\n    ...usageMetadata || {},\n    ...normalizedProvider !== void 0 ? { provider: normalizedProvider } : {}\n  };\n  return Object.keys(combined).length > 0 ? combined : void 0;\n}\nfunction extractOpenRouterResponseOutput2(response, fallbackOutput) {\n  if (isObject(response) && \"output\" in response && response.output !== void 0) {\n    return sanitizeOpenRouterLoggedValue2(response.output);\n  }\n  if (fallbackOutput !== void 0) {\n    return sanitizeOpenRouterLoggedValue2(fallbackOutput);\n  }\n  return void 0;\n}\nfunction extractOpenRouterRerankOutput(result) {\n  if (!isObject(result) || !Array.isArray(result.results)) {\n    return void 0;\n  }\n  return result.results.slice(0, 100).map((item) => ({\n    index: isObject(item) && typeof item.index === \"number\" ? item.index : void 0,\n    relevance_score: isObject(item) && typeof item.relevanceScore === \"number\" ? item.relevanceScore : isObject(item) && typeof item.relevance_score === \"number\" ? item.relevance_score : void 0\n  }));\n}\nvar OPENROUTER_WRAPPED_TOOL2 = /* @__PURE__ */ Symbol(\"braintrust.openrouter.wrappedTool\");\nfunction patchOpenRouterCallModelRequestTools2(request) {\n  if (!Array.isArray(request.tools) || request.tools.length === 0) {\n    return void 0;\n  }\n  const originalTools = request.tools;\n  const wrappedTools = originalTools.map((tool) => wrapOpenRouterTool2(tool));\n  const didPatch = wrappedTools.some(\n    (tool, index) => tool !== originalTools[index]\n  );\n  if (!didPatch) {\n    return void 0;\n  }\n  request.tools = wrappedTools;\n  return () => {\n    request.tools = originalTools;\n  };\n}\nfunction wrapOpenRouterTool2(tool) {\n  if (isWrappedTool2(tool) || !tool.function || typeof tool.function !== \"object\" || typeof tool.function.execute !== \"function\") {\n    return tool;\n  }\n  const toolName = tool.function.name || \"tool\";\n  const originalExecute = tool.function.execute;\n  const wrappedTool = {\n    ...tool,\n    function: {\n      ...tool.function,\n      execute(...args) {\n        return traceToolExecution2({\n          args,\n          execute: () => Reflect.apply(originalExecute, this, args),\n          toolCallId: getToolCallId2(args[1]),\n          toolName\n        });\n      }\n    }\n  };\n  Object.defineProperty(wrappedTool, OPENROUTER_WRAPPED_TOOL2, {\n    value: true,\n    enumerable: false,\n    configurable: false\n  });\n  return wrappedTool;\n}\nfunction isWrappedTool2(tool) {\n  return Boolean(tool[OPENROUTER_WRAPPED_TOOL2]);\n}\nfunction traceToolExecution2(args) {\n  const tracingChannel = openRouterChannels.toolExecute.tracingChannel();\n  const input = args.args.length > 0 ? args.args[0] : void 0;\n  const event = {\n    arguments: [input],\n    span_info: {\n      name: args.toolName\n    },\n    toolCallId: args.toolCallId,\n    toolName: args.toolName\n  };\n  tracingChannel.start.publish(event);\n  try {\n    const result = args.execute();\n    return publishToolResult2(tracingChannel, event, result);\n  } catch (error) {\n    event.error = normalizeError2(error);\n    tracingChannel.error.publish(event);\n    throw error;\n  }\n}\nfunction publishToolResult2(tracingChannel, event, result) {\n  if (isPromiseLike(result)) {\n    return result.then(\n      (resolved) => {\n        event.result = resolved;\n        tracingChannel.asyncEnd.publish(event);\n        return resolved;\n      },\n      (error) => {\n        event.error = normalizeError2(error);\n        tracingChannel.error.publish(event);\n        throw error;\n      }\n    );\n  }\n  event.result = result;\n  tracingChannel.asyncEnd.publish(event);\n  return result;\n}\nfunction getToolCallId2(context) {\n  const toolContext = context;\n  return typeof toolContext?.toolCall?.id === \"string\" ? toolContext.toolCall.id : void 0;\n}\nfunction aggregateOpenRouterChatChunks(chunks) {\n  let role;\n  let content = \"\";\n  let reasoning = \"\";\n  let hasReasoning = false;\n  let reasoningContent = \"\";\n  let hasReasoningContent = false;\n  let reasoningDetails;\n  let toolCalls2;\n  let finishReason;\n  let metrics = {};\n  for (const chunk of chunks) {\n    metrics = {\n      ...metrics,\n      ...parseOpenRouterMetricsFromUsage2(chunk?.usage)\n    };\n    const choice = chunk?.choices?.[0];\n    const delta = choice?.delta;\n    if (!delta) {\n      if (choice?.finish_reason !== void 0) {\n        finishReason = choice.finish_reason;\n      }\n      continue;\n    }\n    if (!role && delta.role) {\n      role = delta.role;\n    }\n    if (typeof delta.content === \"string\") {\n      content += delta.content;\n    }\n    if (typeof delta.reasoning === \"string\") {\n      reasoning += delta.reasoning;\n      hasReasoning = true;\n    }\n    if (typeof delta.reasoning_content === \"string\") {\n      reasoning += delta.reasoning_content;\n      reasoningContent += delta.reasoning_content;\n      hasReasoningContent = true;\n    }\n    if (Array.isArray(delta.reasoning_details)) {\n      reasoningDetails = [\n        ...reasoningDetails || [],\n        ...delta.reasoning_details\n      ];\n    }\n    const choiceFinishReason = choice?.finishReason ?? choice?.finish_reason ?? void 0;\n    const deltaFinishReason = delta.finishReason ?? delta.finish_reason ?? void 0;\n    if (choiceFinishReason !== void 0) {\n      finishReason = choiceFinishReason;\n    } else if (deltaFinishReason !== void 0) {\n      finishReason = deltaFinishReason;\n    }\n    const toolCallDeltas = Array.isArray(delta.toolCalls) ? delta.toolCalls : Array.isArray(delta.tool_calls) ? delta.tool_calls : void 0;\n    if (!toolCallDeltas) {\n      continue;\n    }\n    for (const toolDelta of toolCallDeltas) {\n      if (!toolDelta?.function) {\n        continue;\n      }\n      const toolIndex = toolDelta.index ?? 0;\n      const existingToolCall = toolCalls2?.[toolIndex];\n      if (!existingToolCall || toolDelta.id && existingToolCall.id !== void 0 && existingToolCall.id !== toolDelta.id) {\n        const nextToolCalls = [...toolCalls2 || []];\n        nextToolCalls[toolIndex] = {\n          index: toolIndex,\n          id: toolDelta.id,\n          type: toolDelta.type,\n          function: {\n            name: toolDelta.function.name,\n            arguments: toolDelta.function.arguments || \"\"\n          }\n        };\n        toolCalls2 = nextToolCalls;\n        continue;\n      }\n      const current = existingToolCall;\n      if (toolDelta.id && !current.id) {\n        current.id = toolDelta.id;\n      }\n      if (toolDelta.type && !current.type) {\n        current.type = toolDelta.type;\n      }\n      if (toolDelta.function.name && !current.function.name) {\n        current.function.name = toolDelta.function.name;\n      }\n      current.function.arguments += toolDelta.function.arguments || \"\";\n    }\n  }\n  return {\n    output: [\n      {\n        index: 0,\n        message: {\n          role,\n          content: content || void 0,\n          ...hasReasoning || hasReasoningContent ? { reasoning } : {},\n          ...hasReasoningContent ? { reasoning_content: reasoningContent } : {},\n          ...reasoningDetails ? { reasoning_details: reasoningDetails } : {},\n          ...toolCalls2 ? { tool_calls: toolCalls2 } : {}\n        },\n        logprobs: null,\n        finish_reason: finishReason\n      }\n    ],\n    metrics\n  };\n}\nfunction aggregateOpenRouterResponseStreamEvents(chunks) {\n  let finalResponse;\n  for (const chunk of chunks) {\n    const response = chunk?.response;\n    if (!response) {\n      continue;\n    }\n    if (chunk.type === \"response.completed\" || chunk.type === \"response.incomplete\" || chunk.type === \"response.failed\") {\n      finalResponse = response;\n    }\n  }\n  if (!finalResponse) {\n    return {\n      output: void 0,\n      metrics: {}\n    };\n  }\n  return {\n    output: extractOpenRouterResponseOutput2(finalResponse),\n    metrics: parseOpenRouterMetricsFromUsage2(finalResponse.usage),\n    ...extractOpenRouterResponseMetadata2(finalResponse) ? { metadata: extractOpenRouterResponseMetadata2(finalResponse) } : {}\n  };\n}\nvar OPENROUTER_WRAPPED_CALL_MODEL_RESULT2 = /* @__PURE__ */ Symbol(\n  \"braintrust.openrouter.wrappedCallModelResult\"\n);\nvar OPENROUTER_CALL_MODEL_STREAM_METHODS2 = [\n  \"getFullResponsesStream\",\n  \"getItemsStream\",\n  \"getNewMessagesStream\",\n  \"getReasoningStream\",\n  \"getTextStream\",\n  \"getToolCallsStream\",\n  \"getToolStream\"\n];\nvar OPENROUTER_CALL_MODEL_CONTEXT_METHODS2 = [\n  \"cancel\",\n  \"getPendingToolCalls\",\n  \"getState\",\n  \"getToolCalls\",\n  \"requiresApproval\"\n];\nfunction patchOpenRouterCallModelResult2(args) {\n  const { request, result, span } = args;\n  if (!isObject(result) || isWrappedCallModelResult2(result)) {\n    return false;\n  }\n  const resultLike = result;\n  const hasInstrumentableMethod = typeof resultLike.getResponse === \"function\" || typeof resultLike.getText === \"function\" || OPENROUTER_CALL_MODEL_STREAM_METHODS2.some(\n    (methodName) => typeof resultLike[methodName] === \"function\"\n  );\n  if (!hasInstrumentableMethod) {\n    return false;\n  }\n  Object.defineProperty(resultLike, OPENROUTER_WRAPPED_CALL_MODEL_RESULT2, {\n    value: true,\n    enumerable: false,\n    configurable: false\n  });\n  const originalGetResponse = typeof resultLike.getResponse === \"function\" ? resultLike.getResponse.bind(resultLike) : void 0;\n  const originalGetInitialResponse = typeof resultLike.getInitialResponse === \"function\" ? resultLike.getInitialResponse.bind(resultLike) : void 0;\n  const originalMakeFollowupRequest = typeof resultLike.makeFollowupRequest === \"function\" ? resultLike.makeFollowupRequest.bind(resultLike) : void 0;\n  let ended = false;\n  let tracedTurnCount = 0;\n  const endSpanWithResult = async (response, fallbackOutput) => {\n    if (ended) {\n      return;\n    }\n    ended = true;\n    const finalResponse = getFinalOpenRouterCallModelResponse2(\n      resultLike,\n      response\n    );\n    if (finalResponse) {\n      const rounds = getOpenRouterCallModelRounds2(resultLike);\n      const metadata = extractOpenRouterCallModelResultMetadata2(\n        finalResponse,\n        rounds.length + 1\n      );\n      const metrics = tracedTurnCount === 0 ? aggregateOpenRouterCallModelMetrics2(rounds, finalResponse) : void 0;\n      span.log({\n        output: extractOpenRouterResponseOutput2(finalResponse, fallbackOutput),\n        ...metadata ? { metadata } : {},\n        // Child turn spans already carry per-response usage. Duplicating those\n        // metrics on the parent makes trace-level token/cost totals double count.\n        ...metrics && Object.keys(metrics).length > 0 ? { metrics } : {}\n      });\n      span.end();\n      return;\n    }\n    if (fallbackOutput !== void 0) {\n      span.log({\n        output: fallbackOutput\n      });\n    }\n    span.end();\n  };\n  const endSpanWithError = (error) => {\n    if (ended) {\n      return;\n    }\n    ended = true;\n    span.log({ error: toLoggedError(error) });\n    span.end();\n  };\n  const finalizeFromResponse = async (fallbackOutput) => {\n    if (!originalGetResponse) {\n      await endSpanWithResult(void 0, fallbackOutput);\n      return;\n    }\n    try {\n      await endSpanWithResult(await originalGetResponse(), fallbackOutput);\n    } catch {\n      await endSpanWithResult(void 0, fallbackOutput);\n    }\n  };\n  if (originalGetResponse) {\n    resultLike.getResponse = async (...args2) => {\n      return await withCurrent(span, async () => {\n        try {\n          const response = await originalGetResponse(...args2);\n          await endSpanWithResult(response);\n          return response;\n        } catch (error) {\n          endSpanWithError(error);\n          throw error;\n        }\n      });\n    };\n  }\n  if (typeof resultLike.getText === \"function\") {\n    const originalGetText = resultLike.getText.bind(resultLike);\n    resultLike.getText = async (...args2) => {\n      return await withCurrent(span, async () => {\n        try {\n          const text = await originalGetText(...args2);\n          await finalizeFromResponse(text);\n          return text;\n        } catch (error) {\n          endSpanWithError(error);\n          throw error;\n        }\n      });\n    };\n  }\n  for (const methodName of OPENROUTER_CALL_MODEL_CONTEXT_METHODS2) {\n    if (typeof resultLike[methodName] !== \"function\") {\n      continue;\n    }\n    const originalMethod = resultLike[methodName];\n    resultLike[methodName] = async (...args2) => {\n      return await withCurrent(span, async () => {\n        return await originalMethod.apply(resultLike, args2);\n      });\n    };\n  }\n  for (const methodName of OPENROUTER_CALL_MODEL_STREAM_METHODS2) {\n    if (typeof resultLike[methodName] !== \"function\") {\n      continue;\n    }\n    const originalMethod = resultLike[methodName];\n    resultLike[methodName] = (...args2) => {\n      const stream = withCurrent(\n        span,\n        () => originalMethod.apply(resultLike, args2)\n      );\n      if (!isAsyncIterable4(stream)) {\n        return stream;\n      }\n      return wrapAsyncIterableWithSpan2({\n        finalize: finalizeFromResponse,\n        iteratorFactory: () => stream[Symbol.asyncIterator](),\n        onError: endSpanWithError,\n        span\n      });\n    };\n  }\n  if (originalGetInitialResponse) {\n    let initialTurnTraced = false;\n    resultLike.getInitialResponse = async (...args2) => {\n      if (initialTurnTraced) {\n        return await withCurrent(span, async () => {\n          return await originalGetInitialResponse(...args2);\n        });\n      }\n      initialTurnTraced = true;\n      const step = tracedTurnCount + 1;\n      const stepType = tracedTurnCount === 0 ? \"initial\" : \"continue\";\n      const response = await traceOpenRouterCallModelTurn2({\n        fn: async () => {\n          const nextResponse = await originalGetInitialResponse(...args2);\n          tracedTurnCount++;\n          return nextResponse;\n        },\n        parentSpan: span,\n        request: getOpenRouterResolvedRequest2(resultLike, request),\n        step,\n        stepType\n      });\n      return response;\n    };\n  }\n  if (originalMakeFollowupRequest) {\n    resultLike.makeFollowupRequest = async (...args2) => {\n      const currentResponse = args2[0];\n      const toolResults = Array.isArray(args2[1]) ? args2[1] : [];\n      const step = tracedTurnCount + 1;\n      const response = await traceOpenRouterCallModelTurn2({\n        fn: async () => {\n          const nextResponse = await originalMakeFollowupRequest(...args2);\n          tracedTurnCount++;\n          return nextResponse;\n        },\n        parentSpan: span,\n        request: buildOpenRouterFollowupRequest2(\n          getOpenRouterResolvedRequest2(resultLike, request),\n          currentResponse,\n          toolResults\n        ),\n        step,\n        stepType: \"continue\"\n      });\n      return response;\n    };\n  }\n  return true;\n}\nasync function traceOpenRouterCallModelTurn2(args) {\n  const context = {\n    arguments: [args.request],\n    step: args.step,\n    stepType: args.stepType\n  };\n  return await withCurrent(\n    args.parentSpan,\n    () => openRouterChannels.callModelTurn.tracePromise(args.fn, context)\n  );\n}\nfunction isWrappedCallModelResult2(value) {\n  return Boolean(\n    isObject(value) && value[OPENROUTER_WRAPPED_CALL_MODEL_RESULT2]\n  );\n}\nfunction extractOpenRouterCallModelResultMetadata2(response, turnCount) {\n  const combined = {\n    ...extractOpenRouterResponseMetadata2(response) || {},\n    ...turnCount !== void 0 ? { turn_count: turnCount } : {}\n  };\n  return Object.keys(combined).length > 0 ? combined : void 0;\n}\nfunction getFinalOpenRouterCallModelResponse2(result, response) {\n  if (isObject(response)) {\n    return response;\n  }\n  return isObject(result.finalResponse) ? result.finalResponse : void 0;\n}\nfunction getOpenRouterCallModelRounds2(result) {\n  if (!Array.isArray(result.allToolExecutionRounds)) {\n    return [];\n  }\n  return result.allToolExecutionRounds.filter((round) => isObject(round)).map((round) => ({\n    response: isObject(round.response) ? round.response : void 0,\n    round: typeof round.round === \"number\" ? round.round : void 0,\n    toolResults: Array.isArray(round.toolResults) ? round.toolResults : []\n  })).filter((round) => round.response !== void 0);\n}\nfunction aggregateOpenRouterCallModelMetrics2(rounds, finalResponse) {\n  const metrics = {};\n  const responses = [\n    ...rounds.map((round) => round.response).filter(isObject),\n    finalResponse\n  ];\n  for (const response of responses) {\n    const responseMetrics = parseOpenRouterMetricsFromUsage2(response.usage);\n    for (const [name, value] of Object.entries(responseMetrics)) {\n      metrics[name] = (metrics[name] || 0) + value;\n    }\n  }\n  return metrics;\n}\nfunction buildNextOpenRouterCallModelInput2(currentInput, response, toolResults) {\n  const normalizedInput = Array.isArray(currentInput) ? [...currentInput] : currentInput === void 0 ? [] : [currentInput];\n  const responseOutput = Array.isArray(response.output) ? response.output : response.output === void 0 ? [] : [response.output];\n  return [...normalizedInput, ...responseOutput, ...toolResults].map(\n    (entry) => sanitizeOpenRouterLoggedValue2(entry)\n  );\n}\nfunction getOpenRouterResolvedRequest2(result, request) {\n  if (isObject(result.resolvedRequest)) {\n    return result.resolvedRequest;\n  }\n  return request;\n}\nfunction buildOpenRouterFollowupRequest2(request, currentResponse, toolResults) {\n  if (!request) {\n    return void 0;\n  }\n  return {\n    ...request,\n    input: buildNextOpenRouterCallModelInput2(\n      extractOpenRouterCallModelInput2(request),\n      isObject(currentResponse) ? currentResponse : {},\n      toolResults\n    ),\n    stream: false\n  };\n}\nfunction wrapAsyncIterableWithSpan2(args) {\n  return {\n    [Symbol.asyncIterator]() {\n      const iterator = args.iteratorFactory();\n      return {\n        next(value) {\n          return withCurrent(\n            args.span,\n            () => value === void 0 ? iterator.next() : iterator.next(value)\n          ).then(\n            async (result) => {\n              if (result.done) {\n                await args.finalize();\n              }\n              return result;\n            },\n            (error) => {\n              args.onError(error);\n              throw error;\n            }\n          );\n        },\n        return(value) {\n          if (typeof iterator.return !== \"function\") {\n            return args.finalize().then(() => ({\n              done: true,\n              value\n            }));\n          }\n          return withCurrent(args.span, () => iterator.return(value)).then(\n            async (result) => {\n              await args.finalize();\n              return result;\n            },\n            (error) => {\n              args.onError(error);\n              throw error;\n            }\n          );\n        },\n        throw(error) {\n          args.onError(error);\n          if (typeof iterator.throw !== \"function\") {\n            return Promise.reject(error);\n          }\n          return withCurrent(args.span, () => iterator.throw(error));\n        },\n        [Symbol.asyncIterator]() {\n          return this;\n        }\n      };\n    }\n  };\n}\nfunction isAsyncIterable4(value) {\n  return !!value && (typeof value === \"object\" || typeof value === \"function\") && Symbol.asyncIterator in value && typeof value[Symbol.asyncIterator] === \"function\";\n}\nfunction normalizeError2(error) {\n  return error instanceof Error ? error : new Error(String(error));\n}\n\n// src/instrumentation/plugins/mistral-channels.ts\nvar mistralChannels = defineChannels(\n  \"@mistralai/mistralai\",\n  {\n    chatComplete: channel({\n      channelName: \"chat.complete\",\n      kind: \"async\"\n    }),\n    chatStream: channel({\n      channelName: \"chat.stream\",\n      kind: \"async\"\n    }),\n    embeddingsCreate: channel({\n      channelName: \"embeddings.create\",\n      kind: \"async\"\n    }),\n    classifiersModerate: channel({\n      channelName: \"classifiers.moderate\",\n      kind: \"async\"\n    }),\n    classifiersModerateChat: channel({\n      channelName: \"classifiers.moderateChat\",\n      kind: \"async\"\n    }),\n    classifiersClassify: channel({\n      channelName: \"classifiers.classify\",\n      kind: \"async\"\n    }),\n    classifiersClassifyChat: channel({\n      channelName: \"classifiers.classifyChat\",\n      kind: \"async\"\n    }),\n    fimComplete: channel({\n      channelName: \"fim.complete\",\n      kind: \"async\"\n    }),\n    fimStream: channel({\n      channelName: \"fim.stream\",\n      kind: \"async\"\n    }),\n    agentsComplete: channel({\n      channelName: \"agents.complete\",\n      kind: \"async\"\n    }),\n    agentsStream: channel({\n      channelName: \"agents.stream\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.MISTRAL }\n);\n\n// src/instrumentation/plugins/mistral-plugin.ts\nvar MistralPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToMistralChannels();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToMistralChannels() {\n    this.unsubscribers.push(\n      traceStreamingChannel(mistralChannels.chatComplete, {\n        name: \"mistral.chat.complete\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractMessagesInputWithMetadata,\n        extractOutput: (result) => {\n          return result?.choices;\n        },\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result, startTime) => extractMistralMetrics(result?.usage, startTime)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(mistralChannels.chatStream, {\n        name: \"mistral.chat.stream\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractMessagesInputWithMetadata,\n        extractOutput: extractMistralStreamOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result, startTime) => extractMistralStreamingMetrics(result, startTime),\n        aggregateChunks: aggregateMistralStreamChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(mistralChannels.embeddingsCreate, {\n        name: \"mistral.embeddings.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractEmbeddingInputWithMetadata,\n        extractOutput: (result) => {\n          const embedding = result?.data?.[0]?.embedding;\n          return Array.isArray(embedding) ? { embedding_length: embedding.length } : void 0;\n        },\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result) => parseMistralMetricsFromUsage(result?.usage)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(mistralChannels.classifiersModerate, {\n        name: \"mistral.classifiers.moderate\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractClassifierInputWithMetadata,\n        extractOutput: extractClassifierOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result) => parseMistralMetricsFromUsage(result?.usage)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(mistralChannels.classifiersModerateChat, {\n        name: \"mistral.classifiers.moderateChat\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractClassifierInputWithMetadata,\n        extractOutput: extractClassifierOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result) => parseMistralMetricsFromUsage(result?.usage)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(mistralChannels.classifiersClassify, {\n        name: \"mistral.classifiers.classify\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractClassifierInputWithMetadata,\n        extractOutput: extractClassifierOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result) => parseMistralMetricsFromUsage(result?.usage)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(mistralChannels.classifiersClassifyChat, {\n        name: \"mistral.classifiers.classifyChat\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractClassifierInputWithMetadata,\n        extractOutput: extractClassifierOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result) => parseMistralMetricsFromUsage(result?.usage)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(mistralChannels.fimComplete, {\n        name: \"mistral.fim.complete\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractPromptInputWithMetadata,\n        extractOutput: (result) => {\n          return result?.choices;\n        },\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result, startTime) => extractMistralMetrics(result?.usage, startTime)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(mistralChannels.fimStream, {\n        name: \"mistral.fim.stream\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractPromptInputWithMetadata,\n        extractOutput: extractMistralStreamOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result, startTime) => extractMistralStreamingMetrics(result, startTime),\n        aggregateChunks: aggregateMistralStreamChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(mistralChannels.agentsComplete, {\n        name: \"mistral.agents.complete\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractMessagesInputWithMetadata,\n        extractOutput: (result) => {\n          return result?.choices;\n        },\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result, startTime) => extractMistralMetrics(result?.usage, startTime)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(mistralChannels.agentsStream, {\n        name: \"mistral.agents.stream\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractMessagesInputWithMetadata,\n        extractOutput: extractMistralStreamOutput,\n        extractMetadata: (result) => extractMistralResponseMetadata(result),\n        extractMetrics: (result, startTime) => extractMistralStreamingMetrics(result, startTime),\n        aggregateChunks: aggregateMistralStreamChunks\n      })\n    );\n  }\n};\nvar TOKEN_NAME_MAP4 = {\n  promptTokens: \"prompt_tokens\",\n  inputTokens: \"prompt_tokens\",\n  completionTokens: \"completion_tokens\",\n  outputTokens: \"completion_tokens\",\n  totalTokens: \"tokens\",\n  prompt_tokens: \"prompt_tokens\",\n  input_tokens: \"prompt_tokens\",\n  completion_tokens: \"completion_tokens\",\n  output_tokens: \"completion_tokens\",\n  total_tokens: \"tokens\",\n  promptAudioSeconds: \"prompt_audio_seconds\",\n  prompt_audio_seconds: \"prompt_audio_seconds\"\n};\nvar TOKEN_DETAIL_PREFIX_MAP3 = {\n  promptTokensDetails: \"prompt\",\n  inputTokensDetails: \"prompt\",\n  completionTokensDetails: \"completion\",\n  outputTokensDetails: \"completion\",\n  prompt_tokens_details: \"prompt\",\n  input_tokens_details: \"prompt\",\n  completion_tokens_details: \"completion\",\n  output_tokens_details: \"completion\"\n};\nvar MISTRAL_REQUEST_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"agentId\",\n  \"agent_id\",\n  \"encodingFormat\",\n  \"encoding_format\",\n  \"frequencyPenalty\",\n  \"frequency_penalty\",\n  \"maxTokens\",\n  \"max_tokens\",\n  \"model\",\n  \"n\",\n  \"presencePenalty\",\n  \"presence_penalty\",\n  \"randomSeed\",\n  \"random_seed\",\n  \"reasoningEffort\",\n  \"reasoning_effort\",\n  \"responseFormat\",\n  \"response_format\",\n  \"safePrompt\",\n  \"safe_prompt\",\n  \"stream\",\n  \"stop\",\n  \"temperature\",\n  \"toolChoice\",\n  \"tool_choice\",\n  \"topP\",\n  \"top_p\"\n]);\nvar MISTRAL_RESPONSE_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"agentId\",\n  \"agent_id\",\n  \"created\",\n  \"id\",\n  \"model\",\n  \"object\"\n]);\nfunction camelToSnake3(value) {\n  return value.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);\n}\nfunction normalizeArgs4(args) {\n  if (Array.isArray(args)) {\n    return args;\n  }\n  if (isArrayLike4(args)) {\n    return Array.from(args);\n  }\n  return [args];\n}\nfunction isArrayLike4(value) {\n  return isObject(value) && \"length\" in value && typeof value.length === \"number\" && Number.isInteger(value.length) && value.length >= 0;\n}\nfunction getMistralRequestArg(args) {\n  const firstObjectArg = normalizeArgs4(args).find((arg) => isObject(arg));\n  return isObject(firstObjectArg) ? firstObjectArg : void 0;\n}\nfunction addMistralProviderMetadata(metadata) {\n  return {\n    ...metadata,\n    provider: \"mistral\"\n  };\n}\nfunction pickAllowedMetadata(metadata, allowlist) {\n  if (!metadata) {\n    return {};\n  }\n  const picked = {};\n  for (const key of allowlist) {\n    const value = metadata[key];\n    if (value !== void 0) {\n      picked[key] = value;\n    }\n  }\n  return picked;\n}\nfunction extractMistralRequestMetadata(metadata) {\n  return pickAllowedMetadata(metadata, MISTRAL_REQUEST_METADATA_ALLOWLIST);\n}\nfunction isMistralChatCompletionChunk(value) {\n  return isObject(value);\n}\nfunction isMistralChunkChoice(value) {\n  return isObject(value);\n}\nfunction extractMessagesInputWithMetadata(args) {\n  const params = getMistralRequestArg(args);\n  const { messages, ...rawMetadata } = params || {};\n  return {\n    input: processInputAttachments(messages),\n    metadata: addMistralProviderMetadata(\n      extractMistralRequestMetadata(rawMetadata)\n    )\n  };\n}\nfunction extractEmbeddingInputWithMetadata(args) {\n  const params = getMistralRequestArg(args);\n  const { inputs, ...rawMetadata } = params || {};\n  return {\n    input: inputs,\n    metadata: addMistralProviderMetadata(\n      extractMistralRequestMetadata(rawMetadata)\n    )\n  };\n}\nfunction extractClassifierInputWithMetadata(args) {\n  const params = getMistralRequestArg(args);\n  const { input, inputs, ...rawMetadata } = params || {};\n  return {\n    input: processInputAttachments(inputs ?? input),\n    metadata: addMistralProviderMetadata(\n      extractMistralRequestMetadata(rawMetadata)\n    )\n  };\n}\nfunction extractPromptInputWithMetadata(args) {\n  const params = getMistralRequestArg(args);\n  const { prompt, ...rawMetadata } = params || {};\n  return {\n    input: prompt,\n    metadata: addMistralProviderMetadata(\n      extractMistralRequestMetadata(rawMetadata)\n    )\n  };\n}\nfunction extractMistralResponseMetadata(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const { choices: _choices, usage: _usage, data: _data, ...metadata } = result;\n  const picked = pickAllowedMetadata(\n    metadata,\n    MISTRAL_RESPONSE_METADATA_ALLOWLIST\n  );\n  return Object.keys(picked).length > 0 ? picked : void 0;\n}\nfunction extractMistralMetrics(usage, startTime) {\n  const metrics = parseMistralMetricsFromUsage(usage);\n  if (startTime) {\n    metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n  }\n  return metrics;\n}\nfunction extractMistralStreamOutput(result) {\n  return isObject(result) ? result.choices : void 0;\n}\nfunction extractClassifierOutput(result) {\n  return isObject(result) ? result.results : void 0;\n}\nfunction extractMistralStreamingMetrics(result, startTime) {\n  const metrics = isObject(result) ? parseMistralMetricsFromUsage(result.usage) : {};\n  if (startTime) {\n    metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n  }\n  return metrics;\n}\nfunction extractDeltaText(content) {\n  if (typeof content === \"string\") {\n    return content;\n  }\n  if (!Array.isArray(content)) {\n    return void 0;\n  }\n  const textParts = content.map((part) => {\n    if (!isObject(part) || part.type !== \"text\") {\n      return \"\";\n    }\n    return typeof part.text === \"string\" ? part.text : \"\";\n  }).filter((part) => part.length > 0);\n  return textParts.length > 0 ? textParts.join(\"\") : void 0;\n}\nfunction normalizeMistralTextContentPart(part) {\n  if (!isObject(part) || part.type !== \"text\" || typeof part.text !== \"string\") {\n    return void 0;\n  }\n  return {\n    type: \"text\",\n    text: part.text\n  };\n}\nfunction normalizeMistralThinkingContentPart(part) {\n  if (!isObject(part) || part.type !== \"thinking\") {\n    return void 0;\n  }\n  const thinking = Array.isArray(part.thinking) ? part.thinking.map((thinkingPart) => normalizeMistralTextContentPart(thinkingPart)).filter(\n    (thinkingPart) => thinkingPart !== void 0 && typeof thinkingPart.text === \"string\"\n  ) : [];\n  return {\n    type: \"thinking\",\n    thinking\n  };\n}\nfunction normalizeMistralContentParts(content) {\n  if (!Array.isArray(content)) {\n    return [];\n  }\n  return content.map((part) => {\n    return normalizeMistralTextContentPart(part) || normalizeMistralThinkingContentPart(part);\n  }).filter((part) => part !== void 0);\n}\nfunction mergeMistralTextSegments(left, right) {\n  const merged = left.map((part) => ({ ...part }));\n  for (const part of right) {\n    const lastPart = merged[merged.length - 1];\n    if (lastPart && lastPart.type === \"text\" && typeof lastPart.text === \"string\" && typeof part.text === \"string\") {\n      lastPart.text += part.text;\n      continue;\n    }\n    merged.push({ ...part });\n  }\n  return merged;\n}\nfunction mergeMistralContentParts(left, right) {\n  const merged = [...(left || []).map((part) => structuredClone(part))];\n  for (const part of right) {\n    const lastPart = merged[merged.length - 1];\n    if (part.type === \"text\" && lastPart?.type === \"text\" && typeof lastPart.text === \"string\" && typeof part.text === \"string\") {\n      lastPart.text += part.text;\n      continue;\n    }\n    if (part.type === \"thinking\" && lastPart?.type === \"thinking\" && Array.isArray(lastPart.thinking) && Array.isArray(part.thinking)) {\n      lastPart.thinking = mergeMistralTextSegments(\n        lastPart.thinking,\n        part.thinking\n      );\n      continue;\n    }\n    merged.push(structuredClone(part));\n  }\n  return merged;\n}\nfunction appendMistralContent(accumulator, content) {\n  if (typeof content === \"string\") {\n    if (accumulator.contentParts) {\n      accumulator.contentParts = mergeMistralContentParts(\n        accumulator.contentParts,\n        [{ type: \"text\", text: content }]\n      );\n      return;\n    }\n    accumulator.content = `${accumulator.content || \"\"}${content}`;\n    return;\n  }\n  const normalizedContentParts = normalizeMistralContentParts(content);\n  if (normalizedContentParts.length === 0) {\n    return;\n  }\n  const hasStructuredContent = normalizedContentParts.some(\n    (part) => part.type !== \"text\"\n  );\n  if (!accumulator.contentParts && !hasStructuredContent) {\n    const text = extractDeltaText(content);\n    if (text) {\n      accumulator.content = `${accumulator.content || \"\"}${text}`;\n    }\n    return;\n  }\n  accumulator.contentParts = mergeMistralContentParts(\n    accumulator.contentParts || (accumulator.content ? [{ type: \"text\", text: accumulator.content }] : []),\n    normalizedContentParts\n  );\n  delete accumulator.content;\n}\nfunction getDeltaToolCalls(delta) {\n  const toolCalls2 = Array.isArray(delta.toolCalls) && delta.toolCalls || Array.isArray(delta.tool_calls) && delta.tool_calls || [];\n  return toolCalls2.filter((toolCall) => isObject(toolCall));\n}\nfunction getToolCallIndex(toolCall) {\n  return typeof toolCall.index === \"number\" && toolCall.index >= 0 ? toolCall.index : void 0;\n}\nfunction createMergedToolCallDelta(delta) {\n  return {\n    ...delta,\n    function: {\n      ...delta.function,\n      arguments: typeof delta.function?.arguments === \"string\" ? delta.function.arguments : \"\"\n    }\n  };\n}\nfunction mergeToolCallDeltaPair(current, delta) {\n  const currentArguments = typeof current.function?.arguments === \"string\" ? current.function.arguments : \"\";\n  const deltaArguments = typeof delta.function?.arguments === \"string\" ? delta.function.arguments : \"\";\n  return {\n    ...current,\n    ...delta,\n    function: {\n      ...current.function || {},\n      ...delta.function || {},\n      arguments: `${currentArguments}${deltaArguments}`\n    }\n  };\n}\nfunction mergeToolCallDeltas(toolCalls2, deltas) {\n  if (deltas.length === 0) {\n    return toolCalls2;\n  }\n  const merged = toolCalls2 ? [...toolCalls2] : [];\n  const indexToPosition = /* @__PURE__ */ new Map();\n  const idToPosition = /* @__PURE__ */ new Map();\n  for (const [position, toolCall] of merged.entries()) {\n    const index = getToolCallIndex(toolCall);\n    if (index !== void 0 && !indexToPosition.has(index)) {\n      indexToPosition.set(index, position);\n    }\n    if (typeof toolCall.id === \"string\" && !idToPosition.has(toolCall.id)) {\n      idToPosition.set(toolCall.id, position);\n    }\n  }\n  for (const delta of deltas) {\n    const deltaIndex = getToolCallIndex(delta);\n    const existingByIndex = deltaIndex !== void 0 ? indexToPosition.get(deltaIndex) : void 0;\n    const existingById = typeof delta.id === \"string\" ? idToPosition.get(delta.id) : void 0;\n    const existingPosition = existingByIndex ?? existingById;\n    if (existingPosition === void 0) {\n      const newToolCall = createMergedToolCallDelta(delta);\n      merged.push(newToolCall);\n      const newPosition = merged.length - 1;\n      const newIndex = getToolCallIndex(newToolCall);\n      if (newIndex !== void 0 && !indexToPosition.has(newIndex)) {\n        indexToPosition.set(newIndex, newPosition);\n      }\n      if (typeof newToolCall.id === \"string\" && !idToPosition.has(newToolCall.id)) {\n        idToPosition.set(newToolCall.id, newPosition);\n      }\n      continue;\n    }\n    const mergedToolCall = mergeToolCallDeltaPair(\n      merged[existingPosition],\n      delta\n    );\n    merged[existingPosition] = mergedToolCall;\n    const mergedIndex = getToolCallIndex(mergedToolCall);\n    if (mergedIndex !== void 0 && !indexToPosition.has(mergedIndex)) {\n      indexToPosition.set(mergedIndex, existingPosition);\n    }\n    if (typeof mergedToolCall.id === \"string\" && !idToPosition.has(mergedToolCall.id)) {\n      idToPosition.set(mergedToolCall.id, existingPosition);\n    }\n  }\n  return merged.length > 0 ? merged : void 0;\n}\nfunction getChoiceFinishReason(choice) {\n  if (typeof choice.finishReason === \"string\" || choice.finishReason === null) {\n    return choice.finishReason;\n  }\n  if (typeof choice.finish_reason === \"string\" || choice.finish_reason === null) {\n    return choice.finish_reason;\n  }\n  return void 0;\n}\nfunction parseMistralMetricsFromUsage(usage) {\n  if (!isObject(usage)) {\n    return {};\n  }\n  const metrics = {};\n  for (const [name, value] of Object.entries(usage)) {\n    if (typeof value === \"number\") {\n      metrics[TOKEN_NAME_MAP4[name] || camelToSnake3(name)] = value;\n      continue;\n    }\n    if (!isObject(value)) {\n      continue;\n    }\n    const prefix = TOKEN_DETAIL_PREFIX_MAP3[name];\n    if (!prefix) {\n      continue;\n    }\n    for (const [nestedName, nestedValue] of Object.entries(value)) {\n      if (typeof nestedValue !== \"number\") {\n        continue;\n      }\n      metrics[`${prefix}_${camelToSnake3(nestedName)}`] = nestedValue;\n    }\n  }\n  return metrics;\n}\nfunction aggregateMistralStreamChunks(chunks) {\n  const choiceAccumulators = /* @__PURE__ */ new Map();\n  const indexToAccumulatorKey = /* @__PURE__ */ new Map();\n  const positionToAccumulatorKey = /* @__PURE__ */ new Map();\n  let nextAccumulatorOrder = 0;\n  let metrics = {};\n  let metadata;\n  for (const event of chunks) {\n    const chunk = isMistralChatCompletionChunk(event?.data) ? event.data : void 0;\n    if (!chunk) {\n      continue;\n    }\n    if (isObject(chunk.usage)) {\n      metrics = {\n        ...metrics,\n        ...parseMistralMetricsFromUsage(chunk.usage)\n      };\n    }\n    const chunkMetadata = extractMistralResponseMetadata(chunk);\n    if (chunkMetadata) {\n      metadata = { ...metadata || {}, ...chunkMetadata };\n    }\n    for (const [choicePosition, rawChoice] of (chunk.choices || []).entries()) {\n      if (!isMistralChunkChoice(rawChoice)) {\n        continue;\n      }\n      const choice = rawChoice;\n      const choiceIndex = typeof choice.index === \"number\" && choice.index >= 0 ? choice.index : void 0;\n      let accumulatorKey = choiceIndex !== void 0 ? indexToAccumulatorKey.get(choiceIndex) : void 0;\n      if (!accumulatorKey) {\n        accumulatorKey = positionToAccumulatorKey.get(choicePosition);\n      }\n      if (!accumulatorKey) {\n        const initialIndex = choiceIndex ?? choicePosition;\n        const keyPrefix = choiceIndex !== void 0 ? \"index\" : \"position\";\n        accumulatorKey = `${keyPrefix}:${initialIndex}`;\n        choiceAccumulators.set(accumulatorKey, {\n          index: initialIndex,\n          order: nextAccumulatorOrder++\n        });\n      }\n      const accumulator = choiceAccumulators.get(accumulatorKey);\n      if (!accumulator) {\n        continue;\n      }\n      if (choiceIndex !== void 0) {\n        accumulator.index = choiceIndex;\n        indexToAccumulatorKey.set(choiceIndex, accumulatorKey);\n      }\n      positionToAccumulatorKey.set(choicePosition, accumulatorKey);\n      const delta = isObject(choice.delta) ? choice.delta : void 0;\n      if (delta) {\n        if (!accumulator.role && typeof delta.role === \"string\") {\n          accumulator.role = delta.role;\n        }\n        appendMistralContent(accumulator, delta.content);\n        accumulator.toolCalls = mergeToolCallDeltas(\n          accumulator.toolCalls,\n          getDeltaToolCalls(delta)\n        );\n      }\n      const choiceFinishReason = getChoiceFinishReason(choice);\n      if (choiceFinishReason !== void 0) {\n        accumulator.finishReason = choiceFinishReason;\n      }\n    }\n  }\n  const output = Array.from(choiceAccumulators.values()).sort(\n    (left, right) => left.index === right.index ? left.order - right.order : left.index - right.index\n  ).map((choice) => ({\n    index: choice.index,\n    message: {\n      ...choice.role ? { role: choice.role } : {},\n      content: choice.contentParts ?? choice.content ?? null,\n      ...choice.toolCalls ? { toolCalls: choice.toolCalls } : {}\n    },\n    ...choice.finishReason !== void 0 ? { finishReason: choice.finishReason } : {}\n  }));\n  return {\n    output,\n    metrics,\n    ...metadata ? { metadata } : {}\n  };\n}\n\n// src/instrumentation/plugins/langgraph-sdk-channels.ts\nvar langGraphSDKChannels = defineChannels(\n  \"@langchain/langgraph-sdk\",\n  {\n    wait: channel({\n      channelName: \"runs.wait\",\n      kind: \"async\"\n    }),\n    stream: channel({\n      channelName: \"runs.stream\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.LANGGRAPH_SDK }\n);\n\n// src/instrumentation/plugins/langgraph-sdk-plugin.ts\nvar LangGraphSDKPlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      langGraphSDKChannels.wait.intercept(\n        (target, self, args) => instrumentRun(\"wait\", args, () => Reflect.apply(target, self, args))\n      ),\n      langGraphSDKChannels.stream.intercept(\n        (target, self, args) => instrumentRun(\"stream\", args, () => Reflect.apply(target, self, args))\n      )\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction normalizeMessage(value) {\n  if (!isObject(value)) return value;\n  const role = value.role ?? (value.type === \"human\" ? \"user\" : value.type === \"ai\" || value.type === \"AIMessageChunk\" ? \"assistant\" : value.type === \"system\" || value.type === \"tool\" || value.type === \"function\" ? value.type : void 0);\n  if (typeof role !== \"string\") return value;\n  const message = {\n    role,\n    content: value.content ?? \"\"\n  };\n  for (const key of [\"name\", \"tool_call_id\", \"refusal\"]) {\n    if (value[key] !== void 0) message[key] = value[key];\n  }\n  const additional = isObject(value.additional_kwargs) ? value.additional_kwargs : {};\n  const toolCalls2 = Array.isArray(value.tool_calls) && value.tool_calls.length ? value.tool_calls : additional.tool_calls;\n  if (Array.isArray(toolCalls2) && toolCalls2.length > 0) {\n    message.tool_calls = toolCalls2.map((call) => {\n      if (!isObject(call)) return call;\n      if (isObject(call.function)) return call;\n      return {\n        id: call.id,\n        type: \"function\",\n        function: {\n          name: call.name,\n          arguments: typeof call.args === \"string\" ? call.args : JSON.stringify(call.args ?? {})\n        }\n      };\n    });\n  }\n  if (Array.isArray(value.invalid_tool_calls) && value.invalid_tool_calls.length > 0)\n    message.invalid_tool_calls = value.invalid_tool_calls;\n  if (message.refusal === void 0 && additional.refusal !== void 0)\n    message.refusal = additional.refusal;\n  return message;\n}\nfunction normalizeRunError(value) {\n  let name;\n  let message;\n  if (value instanceof Error) {\n    name = value.name;\n    message = value.message;\n  } else if (isObject(value) && typeof value.error === \"string\" && typeof value.message === \"string\") {\n    name = value.error;\n    message = value.message;\n  } else {\n    return value;\n  }\n  for (let depth = 0; depth < 3; depth++) {\n    try {\n      const nested = JSON.parse(\n        message.startsWith(`${name}: `) ? message.slice(name.length + 2) : message\n      );\n      if (!isObject(nested) || typeof nested.error !== \"string\" || typeof nested.message !== \"string\")\n        break;\n      name = nested.error;\n      message = nested.message;\n    } catch {\n      break;\n    }\n  }\n  if (value instanceof Error && name === value.name && message === value.message)\n    return value;\n  return Object.assign(new Error(message), { name });\n}\nfunction normalizeState(value) {\n  if (!isObject(value)) return value;\n  return Object.fromEntries(\n    Object.entries(value).map(([key, field]) => {\n      if (key === \"messages\" && Array.isArray(field))\n        return [key, field.map(normalizeMessage)];\n      if (key === \"__error__\") {\n        const error = normalizeRunError(field);\n        if (error instanceof Error)\n          return [key, { error: error.name, message: error.message }];\n      }\n      return [key, field];\n    })\n  );\n}\nfunction normalizeRunOutput(value, input) {\n  if (!isObject(value)) return value;\n  if (Array.isArray(value.messages)) {\n    if (value.__interrupt__ !== void 0 || value.__error__ !== void 0)\n      return void 0;\n    const inputMessages = isObject(input) && Array.isArray(input.messages) ? input.messages : [];\n    let inputPrefixLength = 0;\n    while (inputPrefixLength < inputMessages.length) {\n      const previous = inputMessages[inputPrefixLength];\n      const message = value.messages[inputPrefixLength];\n      if (isObject(previous) && isObject(message) && previous.id !== void 0 && message.id !== void 0 && previous.id !== message.id || JSON.stringify(normalizeMessage(previous)) !== JSON.stringify(normalizeMessage(message)))\n        break;\n      inputPrefixLength++;\n    }\n    for (let index = value.messages.length - 1; index >= inputPrefixLength; index--) {\n      const message = value.messages[index];\n      const normalized = normalizeMessage(message);\n      if (!isObject(normalized)) continue;\n      if (normalized.role === \"user\") return void 0;\n      if (normalized.role !== \"assistant\") continue;\n      if (inputMessages.some((previous) => {\n        if (!isObject(previous) || !isObject(message)) return false;\n        return previous.id !== void 0 && previous.id === message.id && JSON.stringify(normalizeMessage(previous)) === JSON.stringify(normalized);\n      }))\n        continue;\n      return normalized;\n    }\n    return void 0;\n  }\n  const result = Object.fromEntries(\n    Object.entries(value).filter(\n      ([key]) => key !== \"__interrupt__\" && key !== \"__error__\"\n    )\n  );\n  return !Object.keys(result).length && (value.__interrupt__ !== void 0 || value.__error__ !== void 0) ? void 0 : result;\n}\nfunction instrumentRun(operation, [threadId, assistantId, options], invoke2) {\n  if (isAutoInstrumentationSuppressed()) return invoke2();\n  const start = getCurrentUnixTimestamp();\n  let span;\n  try {\n    const metadata = {\n      \"langgraph.thread_id\": threadId,\n      \"langgraph.assistant_id\": assistantId\n    };\n    for (const key of [\n      \"streamMode\",\n      \"streamSubgraphs\",\n      \"interruptBefore\",\n      \"interruptAfter\",\n      \"multitaskStrategy\",\n      \"durability\"\n    ]) {\n      if (options?.[key] !== void 0) metadata[key] = options[key];\n    }\n    span = startSpan(\n      withSpanInstrumentationName(\n        {\n          name: `langgraph.runs.${operation}`,\n          spanAttributes: { type: \"task\" /* TASK */ },\n          event: {\n            input: options?.command === void 0 ? normalizeState(options?.input) : {\n              input: normalizeState(options.input),\n              command: options.command\n            },\n            metadata\n          }\n        },\n        INSTRUMENTATION_NAMES.LANGGRAPH_SDK\n      )\n    );\n  } catch (error) {\n    debugLogger.error(\"Error starting LangGraph SDK span:\", error);\n    return invoke2();\n  }\n  let ended = false;\n  let output;\n  let streamError;\n  let firstToken;\n  const updates = [];\n  const usageByMessage = /* @__PURE__ */ new Map();\n  const captureUsage = (id, usage) => {\n    if (!isObject(usage)) return;\n    const metrics = {};\n    for (const [source, destination] of [\n      [\"input_tokens\", \"prompt_tokens\"],\n      [\"output_tokens\", \"completion_tokens\"],\n      [\"total_tokens\", \"tokens\"]\n    ]) {\n      const value = usage[source];\n      if (typeof value === \"number\" && Number.isFinite(value) && value >= 0)\n        metrics[destination] = value;\n    }\n    if (metrics.tokens === void 0 && metrics.prompt_tokens !== void 0 && metrics.completion_tokens !== void 0)\n      metrics.tokens = metrics.prompt_tokens + metrics.completion_tokens;\n    usageByMessage.set(id, { ...usageByMessage.get(id), ...metrics });\n  };\n  const messages = /* @__PURE__ */ new Map();\n  const messageSnapshots = /* @__PURE__ */ new Map();\n  const finish = (error) => {\n    if (ended) return;\n    ended = true;\n    try {\n      const metrics = {};\n      for (const usage of usageByMessage.values()) {\n        for (const [key, value] of Object.entries(usage))\n          metrics[key] = (metrics[key] ?? 0) + value;\n      }\n      if (firstToken !== void 0)\n        metrics.time_to_first_token = firstToken - start;\n      const finalMessages = [\n        ...new Map([...messages, ...messageSnapshots]).values()\n      ];\n      let loggedOutput = normalizeRunOutput(output, options?.input);\n      if (loggedOutput === void 0 && finalMessages.length)\n        loggedOutput = normalizeRunOutput(\n          { messages: finalMessages },\n          void 0\n        );\n      if (output === void 0 && !finalMessages.length && updates.length) {\n        const results = updates.map((update) => normalizeRunOutput(update, options?.input)).filter((update) => update !== void 0);\n        if (results.length) loggedOutput = { updates: results };\n      }\n      const interrupted = [output, ...updates].find(\n        (state) => isObject(state) && state.__interrupt__ !== void 0\n      );\n      span.log({\n        ...loggedOutput !== void 0 ? { output: loggedOutput } : {},\n        ...isObject(interrupted) ? { metadata: { \"langgraph.interrupts\": interrupted.__interrupt__ } } : {},\n        ...error !== void 0 || streamError !== void 0 ? { error: normalizeRunError(error ?? streamError) } : {},\n        metrics\n      });\n    } catch (error2) {\n      debugLogger.error(\"Error logging LangGraph SDK span:\", error2);\n    }\n    try {\n      span.end();\n    } catch (error2) {\n      debugLogger.error(\"Error ending LangGraph SDK span:\", error2);\n    }\n  };\n  const observeMessages = (value, streaming) => {\n    if (!isObject(value) || !Array.isArray(value.messages)) return;\n    const inputMessages = isObject(options?.input) && Array.isArray(options.input.messages) ? options.input.messages : [];\n    for (const message of value.messages) {\n      if (!isObject(message) || message.type !== \"ai\" && message.role !== \"assistant\")\n        continue;\n      if (message.id !== void 0 && inputMessages.some(\n        (input) => isObject(input) && input.id === message.id\n      ))\n        continue;\n      captureUsage(\n        typeof message.id === \"string\" ? message.id : \"message\",\n        message.usage_metadata\n      );\n      if (streaming && (typeof message.content === \"string\" ? message.content.length > 0 : Array.isArray(message.content) && message.content.some(\n        (part) => isObject(part) && typeof part.text === \"string\" && part.text.length > 0\n      )))\n        firstToken ??= getCurrentUnixTimestamp();\n    }\n  };\n  const onChunk = ({ event, data }) => {\n    if (ended) return;\n    if (event === \"metadata\" && isObject(data)) {\n      if (typeof data.run_id === \"string\")\n        span.log({ metadata: { \"langgraph.run_id\": data.run_id } });\n    } else if (event === \"error\") {\n      streamError = normalizeRunError(data);\n    } else if (event === \"values\") {\n      output = data;\n      observeMessages(data, true);\n    } else if (event === \"updates\") {\n      if (isObject(data)) {\n        const stateUpdates = [];\n        for (const [node, update] of Object.entries(data)) {\n          observeMessages(update, true);\n          if (isObject(update) && Array.isArray(update.messages)) {\n            for (const message of update.messages) {\n              if (isObject(message))\n                messageSnapshots.set(\n                  typeof message.id === \"string\" ? message.id : `update-${messageSnapshots.size}`,\n                  message\n                );\n            }\n            const state = Object.fromEntries(\n              Object.entries(update).filter(([key]) => key !== \"messages\")\n            );\n            if (Object.keys(state).length) stateUpdates.push([node, state]);\n          } else {\n            stateUpdates.push([node, update]);\n          }\n        }\n        if (stateUpdates.length) updates.push(Object.fromEntries(stateUpdates));\n      } else {\n        updates.push(data);\n      }\n    } else if ((event === \"messages\" || event === \"messages/partial\" || event === \"messages/complete\") && Array.isArray(data)) {\n      const parts = event === \"messages\" ? [data[0]] : data;\n      for (const part of parts) {\n        if (!isObject(part)) continue;\n        const id = typeof part.id === \"string\" ? part.id : \"message\";\n        captureUsage(id, part.usage_metadata);\n        const previous = messages.get(id);\n        messages.set(\n          id,\n          event === \"messages\" && previous && typeof part.content === \"string\" && typeof previous.content === \"string\" ? { ...part, content: previous.content + part.content } : part\n        );\n        if (typeof part.content === \"string\" && part.content.length > 0)\n          firstToken ??= getCurrentUnixTimestamp();\n      }\n    }\n  };\n  let result;\n  try {\n    result = withCurrent(\n      span,\n      () => runWithAutoInstrumentationSuppressed(invoke2)\n    );\n  } catch (error) {\n    finish(error);\n    throw error;\n  }\n  if (operation === \"stream\") {\n    try {\n      patchStreamIfNeeded(result, {\n        shouldCollect: (chunk) => {\n          try {\n            onChunk(chunk);\n          } catch (error) {\n            debugLogger.error(\n              \"Error processing LangGraph stream event:\",\n              error\n            );\n          }\n          return false;\n        },\n        aroundNext: (next) => withCurrent(span, () => runWithAutoInstrumentationSuppressed(next)),\n        onComplete: () => finish(),\n        onCancel: () => finish(),\n        onError: (error) => finish(error)\n      });\n    } catch (error) {\n      debugLogger.error(\"Error observing LangGraph stream:\", error);\n      finish();\n    }\n  } else {\n    void Promise.resolve(result).then(\n      (value) => {\n        try {\n          output = value;\n          observeMessages(value, false);\n          if (isObject(value) && isObject(value.__error__))\n            streamError = normalizeRunError(value.__error__);\n          finish();\n        } catch (error) {\n          finish(error);\n        }\n      },\n      (error) => finish(error)\n    );\n  }\n  return result;\n}\n\n// src/instrumentation/plugins/ollama-channels.ts\nvar ollamaChannels = defineChannels(\n  \"ollama\",\n  {\n    chat: channel({\n      channelName: \"chat\",\n      kind: \"async\"\n    }),\n    generate: channel({\n      channelName: \"generate\",\n      kind: \"async\"\n    }),\n    embed: channel({\n      channelName: \"embed\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.OLLAMA }\n);\n\n// src/instrumentation/plugins/ollama-plugin.ts\nvar OllamaPlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      traceStreamingChannel(ollamaChannels.chat, {\n        name: \"ollama.chat\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractOllamaChatInput,\n        extractOutput: (result, event) => extractOllamaChatOutput(\n          result,\n          countOllamaToolCalls(event?.arguments?.[0]?.messages)\n        ),\n        extractMetadata: extractOllamaResponseMetadata,\n        extractMetrics: extractOllamaMetrics,\n        aggregateChunks: aggregateOllamaChatChunks\n      }),\n      traceStreamingChannel(ollamaChannels.generate, {\n        name: \"ollama.generate\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractOllamaGenerateInput,\n        extractOutput: extractOllamaGenerateOutput,\n        extractMetadata: extractOllamaResponseMetadata,\n        extractMetrics: extractOllamaMetrics,\n        aggregateChunks: aggregateOllamaGenerateChunks\n      }),\n      traceAsyncChannel(ollamaChannels.embed, {\n        name: \"ollama.embed\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractOllamaEmbedInput,\n        extractOutput: extractOllamaEmbedOutput,\n        extractMetadata: extractOllamaResponseMetadata,\n        extractMetrics: extractOllamaMetrics\n      })\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction isNonNegativeNumber(value) {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\nfunction normalizeFinishReason(response, hasToolCalls = false) {\n  if (hasToolCalls) {\n    return \"tool_calls\";\n  }\n  return response?.done_reason || \"stop\";\n}\nfunction stringifyArguments(value) {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  try {\n    return JSON.stringify(value ?? {});\n  } catch {\n    return String(value);\n  }\n}\nfunction syntheticToolCallId(name, index) {\n  const normalizedName = name.replace(/[^a-zA-Z0-9_-]/g, \"_\") || \"tool\";\n  return `ollama_call_${normalizedName}_${index}`;\n}\nfunction normalizeToolCall(toolCall, index) {\n  const name = toolCall.function?.name;\n  if (typeof name !== \"string\" || name.length === 0) {\n    return void 0;\n  }\n  return {\n    id: typeof toolCall.id === \"string\" && toolCall.id.length > 0 ? toolCall.id : syntheticToolCallId(name, index),\n    type: \"function\",\n    function: {\n      name,\n      arguments: stringifyArguments(toolCall.function?.arguments)\n    }\n  };\n}\nfunction normalizeToolCalls(toolCalls2, syntheticIdOffset = 0) {\n  if (!Array.isArray(toolCalls2)) {\n    return [];\n  }\n  return toolCalls2.flatMap((toolCall, index) => {\n    const normalized = normalizeToolCall(toolCall, syntheticIdOffset + index);\n    return normalized ? [normalized] : [];\n  });\n}\nfunction countOllamaToolCalls(messages) {\n  if (!Array.isArray(messages)) {\n    return 0;\n  }\n  return messages.reduce(\n    (count, message) => count + (isObject(message) && Array.isArray(message.tool_calls) ? message.tool_calls.length : 0),\n    0\n  );\n}\nfunction imageBytes(value) {\n  if (value instanceof Uint8Array) {\n    return value;\n  }\n  if (value instanceof ArrayBuffer) {\n    return new Uint8Array(value);\n  }\n  if (typeof value !== \"string\" || value.startsWith(\"data:\")) {\n    return void 0;\n  }\n  try {\n    const decoded = atob(value.slice(0, 24));\n    return Uint8Array.from(decoded, (character) => character.charCodeAt(0));\n  } catch {\n    return void 0;\n  }\n}\nfunction inferImageMediaType(value) {\n  if (typeof value === \"string\") {\n    const dataUrlType = value.match(/^data:(image\\/[^;]+);base64,/i)?.[1];\n    if (dataUrlType) {\n      return dataUrlType;\n    }\n  }\n  const bytes = imageBytes(value);\n  if (!bytes) {\n    return void 0;\n  }\n  if (bytes[0] === 137 && bytes[1] === 80 && bytes[2] === 78 && bytes[3] === 71) {\n    return \"image/png\";\n  }\n  if (bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255) {\n    return \"image/jpeg\";\n  }\n  const signature = String.fromCharCode(...bytes.slice(0, 12));\n  if (signature.startsWith(\"GIF87a\") || signature.startsWith(\"GIF89a\")) {\n    return \"image/gif\";\n  }\n  if (signature.startsWith(\"RIFF\") && signature.slice(8, 12) === \"WEBP\") {\n    return \"image/webp\";\n  }\n  return void 0;\n}\nfunction normalizeTextAndImages(content, images) {\n  if (!images || images.length === 0) {\n    return { content };\n  }\n  const imageParts = [];\n  const unrecognizedImages = [];\n  for (const image of images) {\n    let localImagePath;\n    let localPathMediaType;\n    if (typeof image === \"string\" && !/^data:/i.test(image) && !/^https?:\\/\\//i.test(image)) {\n      const extension = image.match(/\\.([a-z0-9]+)$/i)?.[1]?.toLowerCase();\n      const extensionMediaType = {\n        png: \"image/png\",\n        jpg: \"image/jpeg\",\n        jpeg: \"image/jpeg\",\n        gif: \"image/gif\",\n        webp: \"image/webp\"\n      }[extension ?? \"\"];\n      if (extensionMediaType && isomorph_default.statSync) {\n        try {\n          if (isomorph_default.statSync(image).isFile()) {\n            localImagePath = image;\n            localPathMediaType = extensionMediaType;\n          }\n        } catch {\n        }\n      }\n    }\n    const mediaType = localPathMediaType ?? inferImageMediaType(image);\n    if (!mediaType) {\n      unrecognizedImages.push(image);\n      continue;\n    }\n    const processedImage = localImagePath ? new Attachment({\n      data: localImagePath,\n      filename: localImagePath.split(/[\\\\/]/).at(-1) ?? \"image\",\n      contentType: mediaType\n    }) : processInputAttachments({\n      type: \"image\",\n      image,\n      mediaType\n    }).image;\n    imageParts.push({\n      type: \"image_url\",\n      image_url: { url: processedImage }\n    });\n  }\n  return {\n    content: imageParts.length > 0 ? [...content ? [{ type: \"text\", text: content }] : [], ...imageParts] : content,\n    ...unrecognizedImages.length > 0 ? { unrecognizedImages } : {}\n  };\n}\nfunction normalizeMessage2(message, toolCallId, syntheticToolCallIdOffset = 0) {\n  if (typeof message.role !== \"string\") {\n    return void 0;\n  }\n  const toolCalls2 = normalizeToolCalls(\n    message.tool_calls,\n    syntheticToolCallIdOffset\n  );\n  if (message.role === \"tool\") {\n    const toolName = typeof message.tool_name === \"string\" && message.tool_name.length > 0 ? message.tool_name : \"tool\";\n    return {\n      role: \"tool\",\n      tool_call_id: toolCallId ?? syntheticToolCallId(toolName, 0),\n      content: typeof message.content === \"string\" ? message.content : \"\"\n    };\n  }\n  const normalizedContent = normalizeTextAndImages(\n    typeof message.content === \"string\" ? message.content || (toolCalls2.length > 0 ? null : \"\") : toolCalls2.length > 0 ? null : \"\",\n    message.images\n  );\n  return {\n    role: message.role,\n    content: normalizedContent.content,\n    ...typeof message.thinking === \"string\" && message.thinking.length > 0 ? { reasoning: message.thinking } : {},\n    ...toolCalls2.length > 0 ? { tool_calls: toolCalls2 } : {},\n    ...normalizedContent.unrecognizedImages ? { images: normalizedContent.unrecognizedImages } : {}\n  };\n}\nfunction normalizeMessages(messages) {\n  if (!Array.isArray(messages)) {\n    return [];\n  }\n  const pendingToolCallIds = /* @__PURE__ */ new Map();\n  let syntheticToolCallIdOffset = 0;\n  return messages.flatMap((message) => {\n    if (!isObject(message)) {\n      return [];\n    }\n    const ollamaMessage = message;\n    let toolCallId;\n    if (ollamaMessage.role === \"tool\") {\n      const toolName = ollamaMessage.tool_name;\n      if (typeof toolName === \"string\") {\n        toolCallId = pendingToolCallIds.get(toolName)?.shift();\n      }\n    }\n    const normalized = normalizeMessage2(\n      ollamaMessage,\n      toolCallId,\n      syntheticToolCallIdOffset\n    );\n    if (Array.isArray(ollamaMessage.tool_calls)) {\n      syntheticToolCallIdOffset += ollamaMessage.tool_calls.length;\n    }\n    if (ollamaMessage.role === \"assistant\" && normalized) {\n      const toolCalls2 = Array.isArray(normalized.tool_calls) ? normalized.tool_calls : [];\n      for (const toolCall of toolCalls2) {\n        if (!isObject(toolCall) || !isObject(toolCall.function)) {\n          continue;\n        }\n        const name = toolCall.function.name;\n        const id = toolCall.id;\n        if (typeof name === \"string\" && typeof id === \"string\") {\n          const ids = pendingToolCallIds.get(name) ?? [];\n          ids.push(id);\n          pendingToolCallIds.set(name, ids);\n        }\n      }\n    }\n    return normalized ? [normalized] : [];\n  });\n}\nfunction normalizeToolDefinition(tool) {\n  const fn = tool.function;\n  if (!fn || typeof fn.name !== \"string\" || fn.name.length === 0) {\n    return void 0;\n  }\n  return {\n    type: \"function\",\n    function: {\n      name: fn.name,\n      ...typeof fn.description === \"string\" ? { description: fn.description } : {},\n      ...isObject(fn.parameters) ? { parameters: fn.parameters } : {}\n    }\n  };\n}\nfunction extractToolsMetadata(tools) {\n  if (!Array.isArray(tools)) {\n    return {};\n  }\n  const normalized = tools.flatMap((tool) => {\n    if (!isObject(tool)) {\n      return [];\n    }\n    const definition = normalizeToolDefinition(tool);\n    return definition ? [definition] : [];\n  });\n  return normalized.length > 0 ? { tools: normalized } : {};\n}\nfunction extractOptionsMetadata(options) {\n  if (!isObject(options)) {\n    return {};\n  }\n  const metadata = {};\n  const mappings = [\n    [\"temperature\", \"temperature\"],\n    [\"top_p\", \"top_p\"],\n    [\"num_predict\", \"max_tokens\"],\n    [\"frequency_penalty\", \"frequency_penalty\"],\n    [\"presence_penalty\", \"presence_penalty\"],\n    [\"stop\", \"stop\"]\n  ];\n  for (const [source, target] of mappings) {\n    if (options[source] !== void 0) {\n      metadata[target] = options[source];\n    }\n  }\n  return metadata;\n}\nfunction extractRequestMetadata(request) {\n  return {\n    provider: \"ollama\",\n    ...typeof request?.model === \"string\" ? { model: request.model } : {},\n    ...extractOptionsMetadata(request?.options),\n    ...request?.format !== void 0 ? { response_format: request.format } : {}\n  };\n}\nfunction extractOllamaChatInput([request]) {\n  return {\n    input: normalizeMessages(request.messages),\n    metadata: {\n      ...extractRequestMetadata(request),\n      ...extractToolsMetadata(request.tools)\n    }\n  };\n}\nfunction extractOllamaGenerateInput([request]) {\n  const normalizedPrompt = normalizeTextAndImages(\n    typeof request.prompt === \"string\" ? request.prompt : \"\",\n    Array.isArray(request.images) ? request.images : void 0\n  );\n  const input = [\n    ...typeof request.system === \"string\" ? [{ role: \"system\", content: request.system }] : [],\n    {\n      role: \"user\",\n      content: normalizedPrompt.content,\n      ...typeof request.suffix === \"string\" ? { suffix: request.suffix } : {},\n      ...normalizedPrompt.unrecognizedImages ? { images: normalizedPrompt.unrecognizedImages } : {}\n    }\n  ];\n  return {\n    input,\n    metadata: extractRequestMetadata(request)\n  };\n}\nfunction extractOllamaEmbedInput([request]) {\n  return {\n    input: request.input,\n    metadata: extractRequestMetadata(request)\n  };\n}\nfunction extractOllamaChatOutput(result, syntheticToolCallIdOffset = 0) {\n  if (!isObject(result) || !isObject(result.message)) {\n    return void 0;\n  }\n  const message = normalizeMessage2(\n    result.message,\n    void 0,\n    syntheticToolCallIdOffset\n  );\n  if (!message) {\n    return void 0;\n  }\n  const toolCalls2 = Array.isArray(message.tool_calls) ? message.tool_calls : [];\n  return [\n    {\n      index: 0,\n      finish_reason: normalizeFinishReason(result, toolCalls2.length > 0),\n      message\n    }\n  ];\n}\nfunction extractOllamaGenerateOutput(result) {\n  if (!isObject(result) || typeof result.response !== \"string\") {\n    return void 0;\n  }\n  return [\n    {\n      index: 0,\n      finish_reason: normalizeFinishReason(result),\n      message: {\n        role: \"assistant\",\n        content: result.response,\n        ...typeof result.thinking === \"string\" && result.thinking.length > 0 ? { reasoning: result.thinking } : {}\n      }\n    }\n  ];\n}\nfunction extractOllamaEmbedOutput(result) {\n  const embedding = Array.isArray(result?.embeddings) ? result.embeddings[0] : void 0;\n  return Array.isArray(embedding) ? { embedding_length: embedding.length } : void 0;\n}\nfunction extractOllamaResponseMetadata(result) {\n  return typeof result?.model === \"string\" ? { model: result.model } : void 0;\n}\nfunction extractOllamaMetrics(result) {\n  const metrics = {};\n  const promptTokens = result?.prompt_eval_count;\n  const completionTokens = result?.eval_count;\n  if (isNonNegativeNumber(promptTokens)) {\n    metrics.prompt_tokens = promptTokens;\n  }\n  if (isNonNegativeNumber(completionTokens)) {\n    metrics.completion_tokens = completionTokens;\n  }\n  if (isNonNegativeNumber(promptTokens) || isNonNegativeNumber(completionTokens)) {\n    metrics.tokens = (isNonNegativeNumber(promptTokens) ? promptTokens : 0) + (isNonNegativeNumber(completionTokens) ? completionTokens : 0);\n  }\n  return metrics;\n}\nfunction aggregateOllamaChatChunks(chunks, _result, event, _startTime) {\n  const last = chunks.at(-1);\n  const message = {\n    role: \"assistant\",\n    content: chunks.map((chunk) => chunk.message?.content ?? \"\").join(\"\"),\n    thinking: chunks.map((chunk) => chunk.message?.thinking ?? \"\").join(\"\"),\n    tool_calls: chunks.flatMap((chunk) => chunk.message?.tool_calls ?? [])\n  };\n  const response = {\n    ...last,\n    message\n  };\n  return {\n    output: extractOllamaChatOutput(\n      response,\n      countOllamaToolCalls(event?.arguments?.[0]?.messages)\n    ),\n    metrics: extractOllamaMetrics(last ?? {}),\n    metadata: extractOllamaResponseMetadata(last ?? {})\n  };\n}\nfunction aggregateOllamaGenerateChunks(chunks, _result, _event, _startTime) {\n  const last = chunks.at(-1);\n  const response = {\n    ...last,\n    response: chunks.map((chunk) => chunk.response ?? \"\").join(\"\"),\n    thinking: chunks.map((chunk) => chunk.thinking ?? \"\").join(\"\")\n  };\n  return {\n    output: extractOllamaGenerateOutput(response),\n    metrics: extractOllamaMetrics(last ?? {}),\n    metadata: extractOllamaResponseMetadata(last ?? {})\n  };\n}\n\n// src/instrumentation/plugins/google-adk-channels.ts\nvar googleADKChannels = defineChannels(\n  \"@google/adk\",\n  {\n    runnerRunAsync: channel({\n      channelName: \"runner.runAsync\",\n      kind: \"sync-stream\"\n    }),\n    agentRunAsync: channel({\n      channelName: \"agent.runAsync\",\n      kind: \"sync-stream\"\n    }),\n    toolRunAsync: channel({\n      channelName: \"tool.runAsync\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GOOGLE_ADK }\n);\n\n// src/instrumentation/plugins/google-adk-plugin.ts\nvar GoogleADKPlugin = class extends BasePlugin {\n  activeRunnerSpans = /* @__PURE__ */ new Map();\n  activeAgentSpans = /* @__PURE__ */ new Map();\n  onEnable() {\n    this.subscribeToRunnerRunAsync();\n    this.subscribeToAgentRunAsync();\n    this.subscribeToToolRunAsync();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n    this.activeRunnerSpans.clear();\n    this.activeAgentSpans.clear();\n  }\n  subscribeToRunnerRunAsync() {\n    const tracingChannel = googleADKChannels.runnerRunAsync.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const createState = (event) => {\n      const params = event.arguments[0] ?? {};\n      const contextKey = extractRunnerContextKey(params);\n      const span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: \"Google ADK Runner\",\n            spanAttributes: {\n              type: \"task\" /* TASK */\n            }\n          },\n          INSTRUMENTATION_NAMES.GOOGLE_ADK\n        )\n      );\n      const startTime = getCurrentUnixTimestamp();\n      try {\n        const metadata = extractRunnerMetadata(params);\n        span.log({\n          input: extractRunnerInput(params),\n          metadata\n        });\n      } catch {\n      }\n      if (contextKey) {\n        this.activeRunnerSpans.set(contextKey, span);\n      }\n      return { span, startTime, events: [], contextKey };\n    };\n    const unbindCurrentSpanStore = bindCurrentSpanStoreToStart3(\n      tracingChannel,\n      states,\n      createState\n    );\n    const handlers = {\n      start: (event) => {\n        ensureState(states, event, () => createState(event));\n      },\n      end: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        const result = event.result;\n        if (isAsyncIterable(result)) {\n          bindAsyncIterableToCurrentSpan(result, state.span);\n          patchStreamIfNeeded(result, {\n            onChunk: (adkEvent) => {\n              state.events.push(adkEvent);\n            },\n            onComplete: () => {\n              finalizeRunnerSpan(state, this.activeRunnerSpans);\n              states.delete(event);\n            },\n            onError: (error) => {\n              cleanupActiveRunnerSpan(state, this.activeRunnerSpans);\n              state.span.log({ error: error.message });\n              state.span.end();\n              states.delete(event);\n            }\n          });\n          return;\n        }\n        try {\n          state.span.log({ output: result });\n        } finally {\n          cleanupActiveRunnerSpan(state, this.activeRunnerSpans);\n          state.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        cleanupActiveRunnerSpan(state, this.activeRunnerSpans);\n        state.span.log({ error: event.error.message });\n        state.span.end();\n        states.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToAgentRunAsync() {\n    const tracingChannel = googleADKChannels.agentRunAsync.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const createState = (event) => {\n      const parentContext = event.arguments[0];\n      const agent = event.self;\n      const agentName = extractAgentName(agent, parentContext);\n      const runnerParentSpan = findRunnerParentSpan(\n        parentContext,\n        this.activeRunnerSpans\n      );\n      const contextKey = extractInvocationContextKey(parentContext);\n      const span = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: agentName ? `Agent: ${agentName}` : \"Google ADK Agent\",\n            spanAttributes: {\n              type: \"task\" /* TASK */\n            },\n            ...runnerParentSpan ? {\n              parentSpanIds: {\n                spanId: runnerParentSpan.spanId,\n                rootSpanId: runnerParentSpan.rootSpanId\n              }\n            } : {}\n          },\n          INSTRUMENTATION_NAMES.GOOGLE_ADK\n        )\n      );\n      const startTime = getCurrentUnixTimestamp();\n      try {\n        const metadata = {\n          provider: \"google-adk\"\n        };\n        if (agentName) {\n          metadata[\"google_adk.agent_name\"] = agentName;\n        }\n        const modelName2 = extractModelName(agent, parentContext);\n        if (modelName2) {\n          metadata.model = modelName2;\n        }\n        span.log({ metadata });\n      } catch {\n      }\n      if (contextKey && agentName) {\n        this.activeAgentSpans.set(agentContextKey(contextKey, agentName), span);\n      }\n      return { span, startTime, events: [], contextKey, name: agentName };\n    };\n    const unbindCurrentSpanStore = bindCurrentSpanStoreToStart3(\n      tracingChannel,\n      states,\n      createState\n    );\n    const handlers = {\n      start: (event) => {\n        ensureState(states, event, () => createState(event));\n      },\n      end: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        const result = event.result;\n        if (isAsyncIterable(result)) {\n          bindAsyncIterableToCurrentSpan(result, state.span);\n          patchStreamIfNeeded(result, {\n            onChunk: (adkEvent) => {\n              state.events.push(adkEvent);\n            },\n            onComplete: () => {\n              finalizeAgentSpan(state, this.activeAgentSpans);\n              states.delete(event);\n            },\n            onError: (error) => {\n              cleanupActiveAgentSpan(state, this.activeAgentSpans);\n              state.span.log({ error: error.message });\n              state.span.end();\n              states.delete(event);\n            }\n          });\n          return;\n        }\n        try {\n          state.span.log({ output: result });\n        } finally {\n          cleanupActiveAgentSpan(state, this.activeAgentSpans);\n          state.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        cleanupActiveAgentSpan(state, this.activeAgentSpans);\n        state.span.log({ error: event.error.message });\n        state.span.end();\n        states.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToToolRunAsync() {\n    const tracingChannel = googleADKChannels.toolRunAsync.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        const req = event.arguments[0] ?? {};\n        const tool = event.self;\n        const toolName = extractToolName2(req, tool);\n        const parentSpan = findToolParentSpan(\n          req,\n          this.activeAgentSpans,\n          this.activeRunnerSpans\n        );\n        const createSpan = () => startSpan(\n          withSpanInstrumentationName(\n            {\n              name: toolName ? `tool: ${toolName}` : \"Google ADK Tool\",\n              spanAttributes: {\n                type: \"tool\" /* TOOL */\n              },\n              event: {\n                input: req.args,\n                metadata: {\n                  provider: \"google-adk\",\n                  ...toolName && { \"google_adk.tool_name\": toolName },\n                  ...extractToolCallId(req) && {\n                    \"google_adk.tool_call_id\": extractToolCallId(req)\n                  }\n                }\n              }\n            },\n            INSTRUMENTATION_NAMES.GOOGLE_ADK\n          )\n        );\n        const span = parentSpan ? withCurrent(parentSpan, () => createSpan()) : createSpan();\n        const startTime = getCurrentUnixTimestamp();\n        states.set(event, { span, startTime });\n      },\n      asyncEnd: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        try {\n          const metrics = {};\n          const end = getCurrentUnixTimestamp();\n          metrics.start = state.startTime;\n          metrics.end = end;\n          metrics.duration = end - state.startTime;\n          state.span.log({\n            output: event.result,\n            metrics: cleanMetrics4(metrics)\n          });\n        } finally {\n          state.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        state.span.log({ error: event.error.message });\n        state.span.end();\n        states.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n};\nfunction ensureState(states, event, create) {\n  const existing = states.get(event);\n  if (existing) {\n    return existing;\n  }\n  const created = create();\n  states.set(event, created);\n  return created;\n}\nfunction bindAsyncIterableToCurrentSpan(stream, span) {\n  if (!isAsyncIterable(stream)) {\n    return stream;\n  }\n  if (Object.isFrozen(stream) || Object.isSealed(stream)) {\n    return stream;\n  }\n  if (\"next\" in stream && typeof stream.next === \"function\") {\n    if (\"__braintrust_current_span_bound\" in stream) {\n      return stream;\n    }\n    try {\n      const iterator = stream;\n      const originalNext = iterator.next.bind(iterator);\n      iterator.next = (...args) => withCurrent(span, () => originalNext(...args));\n      if (typeof iterator.return === \"function\") {\n        const originalReturn = iterator.return.bind(iterator);\n        iterator.return = (...args) => withCurrent(span, () => originalReturn(...args));\n      }\n      if (typeof iterator.throw === \"function\") {\n        const originalThrow = iterator.throw.bind(iterator);\n        iterator.throw = (...args) => withCurrent(span, () => originalThrow(...args));\n      }\n      Object.defineProperty(stream, \"__braintrust_current_span_bound\", {\n        value: true\n      });\n      return stream;\n    } catch {\n      return stream;\n    }\n  }\n  const originalIteratorFn = stream[Symbol.asyncIterator];\n  if (\"__braintrust_current_span_bound\" in originalIteratorFn && originalIteratorFn.__braintrust_current_span_bound) {\n    return stream;\n  }\n  try {\n    const patchedIteratorFn = function() {\n      const iterator = originalIteratorFn.call(this);\n      const originalNext = iterator.next.bind(iterator);\n      iterator.next = (...args) => withCurrent(span, () => originalNext(...args));\n      if (typeof iterator.return === \"function\") {\n        const originalReturn = iterator.return.bind(iterator);\n        iterator.return = (...args) => withCurrent(span, () => originalReturn(...args));\n      }\n      if (typeof iterator.throw === \"function\") {\n        const originalThrow = iterator.throw.bind(iterator);\n        iterator.throw = (...args) => withCurrent(span, () => originalThrow(...args));\n      }\n      return iterator;\n    };\n    Object.defineProperty(\n      patchedIteratorFn,\n      \"__braintrust_current_span_bound\",\n      {\n        value: true\n      }\n    );\n    stream[Symbol.asyncIterator] = patchedIteratorFn;\n  } catch {\n    return stream;\n  }\n  return stream;\n}\nfunction bindCurrentSpanStoreToStart3(tracingChannel, states, create) {\n  const state = _internalGetGlobalState();\n  const contextManager = state?.contextManager;\n  const startChannel = tracingChannel.start;\n  const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n  if (!startChannel?.bindStore || !currentSpanStore) {\n    return void 0;\n  }\n  startChannel.bindStore(currentSpanStore, (event) => {\n    const span = ensureState(\n      states,\n      event,\n      () => create(event)\n    ).span;\n    return contextManager.wrapSpanForStore(span);\n  });\n  return () => {\n    startChannel.unbindStore?.(currentSpanStore);\n  };\n}\nfunction extractRunnerContextKey(paramsOrContext) {\n  const directUserId = \"userId\" in paramsOrContext ? paramsOrContext.userId : void 0;\n  const directSessionId = \"sessionId\" in paramsOrContext ? paramsOrContext.sessionId : void 0;\n  if (typeof directUserId === \"string\" && typeof directSessionId === \"string\") {\n    return `${directUserId}:${directSessionId}`;\n  }\n  const invocationContext = paramsOrContext;\n  return extractInvocationContextKey(invocationContext);\n}\nfunction extractInvocationContextKey(parentContext) {\n  const session = parentContext?.session;\n  const userId = session?.userId;\n  const sessionId = session?.id;\n  if (typeof userId !== \"string\" || typeof sessionId !== \"string\") {\n    return void 0;\n  }\n  return `${userId}:${sessionId}`;\n}\nfunction findRunnerParentSpan(parentContext, activeRunnerSpans) {\n  const contextKey = extractInvocationContextKey(parentContext);\n  return contextKey ? activeRunnerSpans.get(contextKey) : void 0;\n}\nfunction cleanupActiveRunnerSpan(state, activeRunnerSpans) {\n  if (state.contextKey) {\n    activeRunnerSpans.delete(state.contextKey);\n  }\n}\nfunction agentContextKey(contextKey, agentName) {\n  return `${contextKey}:${agentName}`;\n}\nfunction cleanupActiveAgentSpan(state, activeAgentSpans) {\n  if (state.contextKey && state.name) {\n    activeAgentSpans.delete(agentContextKey(state.contextKey, state.name));\n  }\n}\nfunction extractRunnerInput(paramsOrContext) {\n  const content = \"newMessage\" in paramsOrContext ? paramsOrContext.newMessage : paramsOrContext.userContent;\n  if (!content || typeof content !== \"object\") {\n    return void 0;\n  }\n  const normalizedContent = content;\n  if (normalizedContent.parts && Array.isArray(normalizedContent.parts)) {\n    const textParts = normalizedContent.parts.filter((p) => p.text !== void 0).map((p) => p.text);\n    if (textParts.length > 0) {\n      return {\n        messages: [\n          {\n            role: normalizedContent.role ?? \"user\",\n            content: textParts.join(\"\")\n          }\n        ]\n      };\n    }\n  }\n  return { messages: [normalizedContent] };\n}\nfunction extractRunnerMetadata(paramsOrContext) {\n  const metadata = {\n    provider: \"google-adk\"\n  };\n  const directUserId = \"userId\" in paramsOrContext ? paramsOrContext.userId : void 0;\n  const directSessionId = \"sessionId\" in paramsOrContext ? paramsOrContext.sessionId : void 0;\n  if (typeof directUserId === \"string\") {\n    metadata[\"google_adk.user_id\"] = directUserId;\n  }\n  if (typeof directSessionId === \"string\") {\n    metadata[\"google_adk.session_id\"] = directSessionId;\n  }\n  const session = \"session\" in paramsOrContext ? paramsOrContext.session : void 0;\n  if (metadata[\"google_adk.user_id\"] === void 0 && typeof session?.userId === \"string\") {\n    metadata[\"google_adk.user_id\"] = session.userId;\n  }\n  if (metadata[\"google_adk.session_id\"] === void 0 && typeof session?.id === \"string\") {\n    metadata[\"google_adk.session_id\"] = session.id;\n  }\n  return metadata;\n}\nfunction extractAgentName(agent, parentContext) {\n  if (typeof agent?.name === \"string\" && agent.name.length > 0) {\n    return agent.name;\n  }\n  if (!parentContext) {\n    return void 0;\n  }\n  const contextAgent = parentContext.agent;\n  return typeof contextAgent?.name === \"string\" && contextAgent.name.length > 0 ? contextAgent.name : void 0;\n}\nfunction extractModelName(agent, parentContext) {\n  const modelAgent = agent ?? parentContext?.agent;\n  if (!modelAgent?.model) {\n    return;\n  }\n  if (typeof modelAgent.model === \"string\") {\n    return modelAgent.model;\n  }\n  if (typeof modelAgent.model === \"object\" && \"model\" in modelAgent.model) {\n    return modelAgent.model.model;\n  }\n  return void 0;\n}\nfunction extractToolCallId(req) {\n  const toolContext = req.toolContext;\n  return toolContext?.functionCallId;\n}\nfunction extractToolName2(req, tool) {\n  if (typeof tool?.name === \"string\" && tool.name.length > 0) {\n    return tool.name;\n  }\n  const toolContext = req.toolContext;\n  const invocationContext = toolContext?.invocationContext;\n  const invocationTool = invocationContext?.tool;\n  const toolName = invocationTool?.name;\n  return typeof toolName === \"string\" && toolName.length > 0 ? toolName : void 0;\n}\nfunction extractToolAgentName(req) {\n  const toolContext = req.toolContext;\n  const directName = toolContext?.agentName;\n  if (typeof directName === \"string\" && directName.length > 0) {\n    return directName;\n  }\n  const invocationContext = toolContext?.invocationContext;\n  return extractAgentName(void 0, invocationContext);\n}\nfunction findToolParentSpan(req, activeAgentSpans, activeRunnerSpans) {\n  const toolContext = req.toolContext;\n  const invocationContext = toolContext?.invocationContext;\n  const contextKey = extractInvocationContextKey(invocationContext);\n  const agentName = extractToolAgentName(req);\n  if (contextKey && agentName) {\n    const agentSpan = activeAgentSpans.get(\n      agentContextKey(contextKey, agentName)\n    );\n    if (agentSpan) {\n      return agentSpan;\n    }\n  }\n  return contextKey ? activeRunnerSpans.get(contextKey) : void 0;\n}\nfunction finalizeRunnerSpan(state, activeRunnerSpans) {\n  try {\n    const lastEvent = getLastNonPartialEvent(state.events);\n    const metrics = {};\n    const end = getCurrentUnixTimestamp();\n    metrics.start = state.startTime;\n    metrics.end = end;\n    metrics.duration = end - state.startTime;\n    const usage = aggregateUsageFromEvents(state.events);\n    if (usage) {\n      populateUsageMetrics2(metrics, usage);\n    }\n    state.span.log({\n      output: lastEvent ? extractEventOutput(lastEvent) : void 0,\n      metrics: cleanMetrics4(metrics)\n    });\n  } finally {\n    cleanupActiveRunnerSpan(state, activeRunnerSpans);\n    state.span.end();\n  }\n}\nfunction finalizeAgentSpan(state, activeAgentSpans) {\n  try {\n    const lastEvent = getLastNonPartialEvent(state.events);\n    const metrics = {};\n    const end = getCurrentUnixTimestamp();\n    metrics.start = state.startTime;\n    metrics.end = end;\n    metrics.duration = end - state.startTime;\n    state.span.log({\n      output: lastEvent ? extractEventOutput(lastEvent) : void 0,\n      metrics: cleanMetrics4(metrics)\n    });\n  } finally {\n    cleanupActiveAgentSpan(state, activeAgentSpans);\n    state.span.end();\n  }\n}\nfunction getLastNonPartialEvent(events) {\n  for (let i = events.length - 1; i >= 0; i--) {\n    if (!events[i].partial) {\n      return events[i];\n    }\n  }\n  return events.length > 0 ? events[events.length - 1] : void 0;\n}\nfunction extractEventOutput(event) {\n  if (!event.content) {\n    return void 0;\n  }\n  const output = {};\n  if (event.content.role) {\n    output.role = event.content.role;\n  }\n  if (event.content.parts && Array.isArray(event.content.parts)) {\n    const textParts = event.content.parts.filter((p) => p.text !== void 0 && !p.thought).map((p) => p.text);\n    const thoughtParts = event.content.parts.filter((p) => p.text !== void 0 && p.thought).map((p) => p.text);\n    const functionCalls = event.content.parts.filter((p) => p.functionCall).map((p) => p.functionCall);\n    if (textParts.length > 0) {\n      output.content = textParts.join(\"\");\n    }\n    if (thoughtParts.length > 0) {\n      output.thought = thoughtParts.join(\"\");\n    }\n    if (functionCalls.length > 0) {\n      output.functionCalls = functionCalls;\n    }\n  }\n  if (event.author) {\n    output.author = event.author;\n  }\n  return Object.keys(output).length > 0 ? output : void 0;\n}\nfunction aggregateUsageFromEvents(events) {\n  let hasUsage = false;\n  const aggregated = {};\n  for (const event of events) {\n    if (!event.usageMetadata) {\n      continue;\n    }\n    hasUsage = true;\n    const usage = event.usageMetadata;\n    if (usage.promptTokenCount !== void 0) {\n      aggregated.promptTokenCount = (aggregated.promptTokenCount ?? 0) + usage.promptTokenCount;\n    }\n    if (usage.candidatesTokenCount !== void 0) {\n      aggregated.candidatesTokenCount = (aggregated.candidatesTokenCount ?? 0) + usage.candidatesTokenCount;\n    }\n    if (usage.totalTokenCount !== void 0) {\n      aggregated.totalTokenCount = (aggregated.totalTokenCount ?? 0) + usage.totalTokenCount;\n    }\n    if (usage.cachedContentTokenCount !== void 0) {\n      aggregated.cachedContentTokenCount = (aggregated.cachedContentTokenCount ?? 0) + usage.cachedContentTokenCount;\n    }\n    if (usage.thoughtsTokenCount !== void 0) {\n      aggregated.thoughtsTokenCount = (aggregated.thoughtsTokenCount ?? 0) + usage.thoughtsTokenCount;\n    }\n    if (usage.toolUsePromptTokenCount !== void 0) {\n      aggregated.toolUsePromptTokenCount = (aggregated.toolUsePromptTokenCount ?? 0) + usage.toolUsePromptTokenCount;\n    }\n    for (const detailsField of [\n      \"promptTokensDetails\",\n      \"cacheTokensDetails\",\n      \"candidatesTokensDetails\",\n      \"toolUsePromptTokensDetails\"\n    ]) {\n      const details = usage[detailsField];\n      if (details !== void 0) {\n        aggregated[detailsField] = [\n          ...aggregated[detailsField] ?? [],\n          ...details\n        ];\n      }\n    }\n  }\n  return hasUsage ? aggregated : void 0;\n}\nfunction populateUsageMetrics2(metrics, usage) {\n  if (usage.promptTokenCount !== void 0 || usage.toolUsePromptTokenCount !== void 0) {\n    metrics.prompt_tokens = (usage.promptTokenCount ?? 0) + (usage.toolUsePromptTokenCount ?? 0);\n  }\n  if (usage.candidatesTokenCount !== void 0 || usage.thoughtsTokenCount !== void 0) {\n    metrics.completion_tokens = (usage.candidatesTokenCount ?? 0) + (usage.thoughtsTokenCount ?? 0);\n  }\n  if (usage.totalTokenCount !== void 0) {\n    metrics.tokens = usage.totalTokenCount;\n  }\n  if (usage.cachedContentTokenCount !== void 0) {\n    metrics.prompt_cached_tokens = usage.cachedContentTokenCount;\n  }\n  if (usage.thoughtsTokenCount !== void 0) {\n    metrics.completion_reasoning_tokens = usage.thoughtsTokenCount;\n  }\n  for (const detail of usage.promptTokensDetails ?? []) {\n    if (detail.modality === \"AUDIO\" && detail.tokenCount !== void 0) {\n      metrics.prompt_audio_tokens = (metrics.prompt_audio_tokens ?? 0) + detail.tokenCount;\n    }\n  }\n  for (const detail of usage.candidatesTokensDetails ?? []) {\n    if (detail.modality === \"AUDIO\" && detail.tokenCount !== void 0) {\n      metrics.completion_audio_tokens = (metrics.completion_audio_tokens ?? 0) + detail.tokenCount;\n    }\n    if (detail.modality === \"IMAGE\" && detail.tokenCount !== void 0) {\n      metrics.completion_image_tokens = (metrics.completion_image_tokens ?? 0) + detail.tokenCount;\n    }\n  }\n}\nfunction cleanMetrics4(metrics) {\n  const cleaned = {};\n  for (const [key, value] of Object.entries(metrics)) {\n    if (value !== null && value !== void 0) {\n      cleaned[key] = value;\n    }\n  }\n  return cleaned;\n}\n\n// src/instrumentation/plugins/cohere-channels.ts\nvar cohereChannels = defineChannels(\n  \"cohere-ai\",\n  {\n    chat: channel({\n      channelName: \"chat\",\n      kind: \"async\"\n    }),\n    chatStream: channel({\n      channelName: \"chatStream\",\n      kind: \"async\"\n    }),\n    embed: channel({\n      channelName: \"embed\",\n      kind: \"async\"\n    }),\n    rerank: channel({\n      channelName: \"rerank\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.COHERE }\n);\n\n// src/instrumentation/plugins/cohere-plugin.ts\nvar CoherePlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToCohereChannels();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToCohereChannels() {\n    this.unsubscribers.push(\n      traceStreamingChannel(cohereChannels.chat, {\n        name: \"cohere.chat\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractChatInputWithMetadata2,\n        extractOutput: (result) => extractCohereChatOutput(result),\n        extractMetadata: (result) => extractCohereResponseMetadata(result),\n        extractMetrics: (result, startTime) => {\n          const metrics = parseCohereMetricsFromUsage(result);\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        }\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(cohereChannels.chatStream, {\n        name: \"cohere.chatStream\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractChatInputWithMetadata2,\n        extractOutput: () => void 0,\n        extractMetadata: () => void 0,\n        extractMetrics: () => ({}),\n        aggregateChunks: aggregateCohereChatStreamChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(cohereChannels.embed, {\n        name: \"cohere.embed\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractEmbedInputWithMetadata,\n        extractOutput: extractCohereEmbeddingOutput,\n        extractMetadata: (result) => extractCohereResponseMetadata(result),\n        extractMetrics: (result) => parseCohereMetricsFromUsage(result)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(cohereChannels.rerank, {\n        name: \"cohere.rerank\",\n        type: \"llm\" /* LLM */,\n        extractInput: extractRerankInputWithMetadata,\n        extractOutput: (result) => {\n          if (!isObject(result) || !Array.isArray(result.results)) {\n            return void 0;\n          }\n          return result.results.slice(0, 100).map((item) => ({\n            index: isObject(item) ? item.index : void 0,\n            relevance_score: isObject(item) ? (typeof item.relevanceScore === \"number\" ? item.relevanceScore : item.relevance_score) ?? null : null\n          }));\n        },\n        extractMetadata: (result) => extractCohereResponseMetadata(result),\n        extractMetrics: (result) => parseCohereMetricsFromUsage(result)\n      })\n    );\n  }\n};\nvar CHAT_REQUEST_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"conversationId\",\n  \"conversation_id\",\n  \"frequencyPenalty\",\n  \"frequency_penalty\",\n  \"k\",\n  \"maxInputTokens\",\n  \"max_input_tokens\",\n  \"maxTokens\",\n  \"max_tokens\",\n  \"model\",\n  \"p\",\n  \"preamble\",\n  \"presencePenalty\",\n  \"presence_penalty\",\n  \"priority\",\n  \"promptTruncation\",\n  \"prompt_truncation\",\n  \"rawPrompting\",\n  \"raw_prompting\",\n  \"responseFormat\",\n  \"response_format\",\n  \"safetyMode\",\n  \"safety_mode\",\n  \"searchQueriesOnly\",\n  \"search_queries_only\",\n  \"seed\",\n  \"stopSequences\",\n  \"stop_sequences\",\n  \"strictTools\",\n  \"strict_tools\",\n  \"temperature\",\n  \"thinking\",\n  \"thinkingTokenBudget\",\n  \"thinkingType\",\n  \"thinking_token_budget\",\n  \"thinking_type\",\n  \"toolChoice\",\n  \"tool_choice\"\n]);\nvar EMBED_REQUEST_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"embeddingTypes\",\n  \"embedding_types\",\n  \"inputType\",\n  \"input_type\",\n  \"maxTokens\",\n  \"max_tokens\",\n  \"model\",\n  \"outputDimension\",\n  \"output_dimension\",\n  \"priority\",\n  \"truncate\"\n]);\nvar RERANK_REQUEST_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"maxChunksPerDoc\",\n  \"max_chunks_per_doc\",\n  \"maxTokensPerDoc\",\n  \"max_tokens_per_doc\",\n  \"model\",\n  \"priority\",\n  \"rankFields\",\n  \"rank_fields\",\n  \"returnDocuments\",\n  \"return_documents\",\n  \"topN\",\n  \"top_n\"\n]);\nvar RESPONSE_METADATA_ALLOWLIST2 = /* @__PURE__ */ new Set([\n  \"finishReason\",\n  \"finish_reason\",\n  \"generationId\",\n  \"generation_id\",\n  \"id\",\n  \"responseId\",\n  \"responseType\",\n  \"response_id\",\n  \"response_type\"\n]);\nfunction normalizeArgs5(args) {\n  if (Array.isArray(args)) {\n    return args;\n  }\n  if (isArrayLike5(args)) {\n    return Array.from(args);\n  }\n  return [args];\n}\nfunction isArrayLike5(value) {\n  return isObject(value) && \"length\" in value && typeof value.length === \"number\" && Number.isInteger(value.length) && value.length >= 0;\n}\nfunction getRequestArg(args) {\n  const firstObjectArg = normalizeArgs5(args).find((arg) => isObject(arg));\n  return isObject(firstObjectArg) ? firstObjectArg : void 0;\n}\nfunction addCohereProviderMetadata(metadata) {\n  return {\n    ...metadata,\n    provider: \"cohere\"\n  };\n}\nfunction pickAllowedMetadata2(metadata, allowlist) {\n  if (!metadata) {\n    return {};\n  }\n  const picked = {};\n  for (const key of allowlist) {\n    const value = metadata[key];\n    if (value !== void 0) {\n      picked[key] = value;\n    }\n  }\n  return picked;\n}\nfunction extractChatInputWithMetadata2(args) {\n  const request = getRequestArg(args);\n  const { message, messages, ...rawMetadata } = request || {};\n  return {\n    input: processInputAttachments(messages ?? message),\n    metadata: addCohereProviderMetadata(\n      pickAllowedMetadata2(rawMetadata, CHAT_REQUEST_METADATA_ALLOWLIST)\n    )\n  };\n}\nfunction extractEmbedInputWithMetadata(args) {\n  const request = getRequestArg(args);\n  const { inputs, texts, images, ...rawMetadata } = request || {};\n  return {\n    input: inputs ?? texts ?? images,\n    metadata: addCohereProviderMetadata(\n      pickAllowedMetadata2(rawMetadata, EMBED_REQUEST_METADATA_ALLOWLIST)\n    )\n  };\n}\nfunction extractRerankInputWithMetadata(args) {\n  const request = getRequestArg(args);\n  const { query, documents, ...rawMetadata } = request || {};\n  return {\n    input: {\n      documents,\n      query\n    },\n    metadata: addCohereProviderMetadata({\n      ...pickAllowedMetadata2(rawMetadata, RERANK_REQUEST_METADATA_ALLOWLIST),\n      ...Array.isArray(documents) ? { document_count: documents.length } : {}\n    })\n  };\n}\nfunction extractCohereResponseMetadata(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const responseMetadata = pickAllowedMetadata2(\n    result,\n    RESPONSE_METADATA_ALLOWLIST2\n  );\n  const meta = isObject(result.meta) ? result.meta : void 0;\n  const apiVersion = isObject(meta?.apiVersion) && typeof meta.apiVersion.version === \"string\" && meta.apiVersion.version || isObject(meta?.api_version) && typeof meta.api_version.version === \"string\" && meta.api_version.version;\n  const metadata = {\n    ...responseMetadata,\n    ...apiVersion ? { api_version: apiVersion } : {}\n  };\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nfunction extractCohereChatOutput(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  if (isObject(result.message)) {\n    return result.message;\n  }\n  if (typeof result.text !== \"string\") {\n    return void 0;\n  }\n  const toolCalls2 = Array.isArray(result.toolCalls) ? result.toolCalls : Array.isArray(result.tool_calls) ? result.tool_calls : void 0;\n  if (toolCalls2 && toolCalls2.length > 0) {\n    return {\n      content: result.text,\n      role: \"assistant\",\n      toolCalls: toolCalls2\n    };\n  }\n  return result.text;\n}\nfunction extractCohereEmbeddingOutput(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const embeddingLength = getFirstEmbeddingLength(result.embeddings);\n  if (embeddingLength === void 0) {\n    return void 0;\n  }\n  return {\n    embedding_length: embeddingLength\n  };\n}\nfunction getFirstEmbeddingLength(value) {\n  if (Array.isArray(value) && Array.isArray(value[0])) {\n    return value[0].length;\n  }\n  if (!isObject(value)) {\n    return void 0;\n  }\n  for (const key of Object.keys(value)) {\n    const entry = value[key];\n    if (Array.isArray(entry) && Array.isArray(entry[0])) {\n      return entry[0].length;\n    }\n  }\n  return void 0;\n}\nfunction setMetricIfNumber(metrics, key, value) {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    metrics[key] = value;\n  }\n}\nfunction mergeUsageMetrics(metrics, usage) {\n  if (!isObject(usage)) {\n    return metrics;\n  }\n  const source = usage;\n  setMetricIfNumber(\n    metrics,\n    \"prompt_tokens\",\n    source.inputTokens ?? source.input_tokens\n  );\n  setMetricIfNumber(\n    metrics,\n    \"completion_tokens\",\n    source.outputTokens ?? source.output_tokens\n  );\n  setMetricIfNumber(\n    metrics,\n    \"tokens\",\n    source.totalTokens ?? source.total_tokens\n  );\n  setMetricIfNumber(\n    metrics,\n    \"prompt_cached_tokens\",\n    source.cachedTokens ?? source.cached_tokens\n  );\n  const tokenContainer = isObject(source.tokens) ? source.tokens : void 0;\n  if (tokenContainer) {\n    setMetricIfNumber(\n      metrics,\n      \"prompt_tokens\",\n      tokenContainer.inputTokens ?? tokenContainer.input_tokens\n    );\n    setMetricIfNumber(\n      metrics,\n      \"completion_tokens\",\n      tokenContainer.outputTokens ?? tokenContainer.output_tokens\n    );\n    setMetricIfNumber(\n      metrics,\n      \"tokens\",\n      tokenContainer.totalTokens ?? tokenContainer.total_tokens\n    );\n    setMetricIfNumber(\n      metrics,\n      \"reasoning_tokens\",\n      tokenContainer.reasoningTokens ?? tokenContainer.reasoning_tokens ?? tokenContainer.thinkingTokens ?? tokenContainer.thinking_tokens\n    );\n  }\n  const billedUnits = (isObject(source.billedUnits) ? source.billedUnits : void 0) || (isObject(source.billed_units) ? source.billed_units : void 0);\n  if (billedUnits) {\n    setMetricIfNumber(\n      metrics,\n      \"prompt_tokens\",\n      billedUnits.inputTokens ?? billedUnits.input_tokens\n    );\n    setMetricIfNumber(\n      metrics,\n      \"completion_tokens\",\n      billedUnits.outputTokens ?? billedUnits.output_tokens\n    );\n    setMetricIfNumber(\n      metrics,\n      \"search_units\",\n      billedUnits.searchUnits ?? billedUnits.search_units\n    );\n    setMetricIfNumber(metrics, \"classifications\", billedUnits.classifications);\n    setMetricIfNumber(metrics, \"images\", billedUnits.images);\n    setMetricIfNumber(\n      metrics,\n      \"image_tokens\",\n      billedUnits.imageTokens ?? billedUnits.image_tokens\n    );\n  }\n  return metrics;\n}\nfunction parseCohereMetricsFromUsage(source) {\n  if (!isObject(source)) {\n    return {};\n  }\n  const metrics = {};\n  mergeUsageMetrics(metrics, source);\n  if (\"usage\" in source) {\n    mergeUsageMetrics(metrics, source.usage);\n  }\n  if (\"meta\" in source) {\n    mergeUsageMetrics(metrics, source.meta);\n  }\n  if (metrics.tokens === void 0 && typeof metrics.prompt_tokens === \"number\" && typeof metrics.completion_tokens === \"number\") {\n    metrics.tokens = metrics.prompt_tokens + metrics.completion_tokens;\n  }\n  return metrics;\n}\nfunction toToolCallArray(value) {\n  if (Array.isArray(value)) {\n    return value.filter((item) => isObject(item));\n  }\n  return isObject(value) ? [value] : [];\n}\nfunction getToolCallIndex2(toolCall, fallbackIndex) {\n  return typeof toolCall.index === \"number\" && Number.isInteger(toolCall.index) ? toolCall.index : fallbackIndex;\n}\nfunction appendToolCallDelta(existing, incoming) {\n  const currentArguments = isObject(existing?.function) && typeof existing.function.arguments === \"string\" ? existing.function.arguments : \"\";\n  const incomingArguments = isObject(incoming.function) && typeof incoming.function.arguments === \"string\" ? incoming.function.arguments : \"\";\n  return {\n    ...existing,\n    ...incoming,\n    function: {\n      ...isObject(existing?.function) ? existing.function : {},\n      ...isObject(incoming.function) ? incoming.function : {},\n      ...incomingArguments ? { arguments: `${currentArguments}${incomingArguments}` } : {}\n    }\n  };\n}\nfunction extractV8DeltaText(chunk) {\n  if (!isObject(chunk.delta) || !isObject(chunk.delta.message)) {\n    return void 0;\n  }\n  const content = chunk.delta.message.content;\n  if (typeof content === \"string\") {\n    return content;\n  }\n  if (isObject(content) && typeof content.text === \"string\") {\n    return content.text;\n  }\n  return void 0;\n}\nfunction getV8ContentIndex(chunk) {\n  return typeof chunk.index === \"number\" ? chunk.index : 0;\n}\nfunction toContentBlockType(value) {\n  return value === \"text\" || value === \"thinking\" ? value : void 0;\n}\nfunction getOrCreateContentBlock(contentBlocksByIndex, contentBlockOrder, index) {\n  if (!contentBlockOrder.includes(index)) {\n    contentBlockOrder.push(index);\n  }\n  if (!(index in contentBlocksByIndex)) {\n    contentBlocksByIndex[index] = {\n      text: \"\",\n      thinking: \"\"\n    };\n  }\n  return contentBlocksByIndex[index];\n}\nfunction appendV8ContentBlock(contentBlocksByIndex, contentBlockOrder, index, content) {\n  if (typeof content === \"string\") {\n    const block2 = getOrCreateContentBlock(\n      contentBlocksByIndex,\n      contentBlockOrder,\n      index\n    );\n    block2.type ??= \"text\";\n    block2.text += content;\n    return;\n  }\n  if (!isObject(content)) {\n    return;\n  }\n  const block = getOrCreateContentBlock(\n    contentBlocksByIndex,\n    contentBlockOrder,\n    index\n  );\n  const contentType = toContentBlockType(content.type);\n  if (contentType) {\n    block.type = contentType;\n  }\n  if (typeof content.text === \"string\") {\n    block.type ??= \"text\";\n    block.text += content.text;\n  }\n  if (typeof content.thinking === \"string\") {\n    block.type ??= \"thinking\";\n    block.thinking += content.thinking;\n  }\n}\nfunction serializeAggregatedContentBlocks(contentBlocksByIndex, contentBlockOrder) {\n  return contentBlockOrder.sort((left, right) => left - right).flatMap((index) => {\n    const block = contentBlocksByIndex[index];\n    if (!block) {\n      return [];\n    }\n    if (block.type === \"thinking\" && block.thinking.length > 0) {\n      return [{ type: \"thinking\", thinking: block.thinking }];\n    }\n    if (block.text.length > 0) {\n      return [{ type: \"text\", text: block.text }];\n    }\n    if (block.thinking.length > 0) {\n      return [{ type: \"thinking\", thinking: block.thinking }];\n    }\n    return [];\n  });\n}\nfunction hasThinkingContent(contentBlocks) {\n  return contentBlocks.some((block) => block.type === \"thinking\");\n}\nfunction aggregateCohereChatStreamChunks(chunks) {\n  const textDeltas = [];\n  const contentBlocksByIndex = {};\n  const contentBlockOrder = [];\n  const toolCallsByIndex = {};\n  const toolCallOrder = [];\n  let terminalResponse;\n  let role;\n  let finishReason;\n  let toolPlan = \"\";\n  let metadata = {};\n  let metrics = {};\n  for (const chunk of chunks) {\n    if (!isObject(chunk)) {\n      continue;\n    }\n    const eventType = typeof chunk.eventType === \"string\" ? chunk.eventType : typeof chunk.event_type === \"string\" ? chunk.event_type : typeof chunk.type === \"string\" ? chunk.type : void 0;\n    if (eventType === \"text-generation\" && typeof chunk.text === \"string\") {\n      textDeltas.push(chunk.text);\n      continue;\n    }\n    if (eventType === \"tool-calls-generation\") {\n      const generatedToolCalls = toToolCallArray(\n        Array.isArray(chunk.toolCalls) ? chunk.toolCalls : chunk.tool_calls\n      );\n      for (const [index, toolCall] of generatedToolCalls.entries()) {\n        const normalizedIndex = getToolCallIndex2(toolCall, index);\n        if (!toolCallOrder.includes(normalizedIndex)) {\n          toolCallOrder.push(normalizedIndex);\n        }\n        toolCallsByIndex[normalizedIndex] = {\n          ...toolCallsByIndex[normalizedIndex],\n          ...toolCall\n        };\n      }\n      if (typeof chunk.text === \"string\") {\n        textDeltas.push(chunk.text);\n      }\n      continue;\n    }\n    if (eventType === \"stream-end\" && isObject(chunk.response)) {\n      terminalResponse = chunk.response;\n      metrics = {\n        ...metrics,\n        ...parseCohereMetricsFromUsage(chunk.response)\n      };\n      metadata = {\n        ...metadata,\n        ...extractCohereResponseMetadata(chunk.response) || {}\n      };\n      const responseFinishReason = typeof chunk.response.finishReason === \"string\" ? chunk.response.finishReason : typeof chunk.response.finish_reason === \"string\" ? chunk.response.finish_reason : void 0;\n      finishReason = responseFinishReason ?? finishReason;\n      continue;\n    }\n    if (eventType === \"message-start\") {\n      if (typeof chunk.id === \"string\") {\n        metadata.id = chunk.id;\n      }\n      if (isObject(chunk.delta) && isObject(chunk.delta.message)) {\n        const messageRole = chunk.delta.message.role;\n        if (typeof messageRole === \"string\") {\n          role = messageRole;\n        }\n      }\n      continue;\n    }\n    if (eventType === \"content-delta\") {\n      appendV8ContentBlock(\n        contentBlocksByIndex,\n        contentBlockOrder,\n        getV8ContentIndex(chunk),\n        isObject(chunk.delta) && isObject(chunk.delta.message) ? chunk.delta.message.content : void 0\n      );\n      const text = extractV8DeltaText(chunk);\n      if (text) {\n        textDeltas.push(text);\n      }\n      continue;\n    }\n    if (eventType === \"content-start\") {\n      appendV8ContentBlock(\n        contentBlocksByIndex,\n        contentBlockOrder,\n        getV8ContentIndex(chunk),\n        isObject(chunk.delta) && isObject(chunk.delta.message) ? chunk.delta.message.content : void 0\n      );\n      continue;\n    }\n    if (eventType === \"tool-plan-delta\") {\n      if (isObject(chunk.delta) && isObject(chunk.delta.message)) {\n        const deltaToolPlan = typeof chunk.delta.message.toolPlan === \"string\" ? chunk.delta.message.toolPlan : typeof chunk.delta.message.tool_plan === \"string\" ? chunk.delta.message.tool_plan : void 0;\n        if (deltaToolPlan) {\n          toolPlan += deltaToolPlan;\n        }\n      }\n      continue;\n    }\n    if (eventType === \"tool-call-start\") {\n      const toolCalls2 = isObject(chunk.delta) && isObject(chunk.delta.message) ? toToolCallArray(\n        Array.isArray(chunk.delta.message.toolCalls) ? chunk.delta.message.toolCalls : chunk.delta.message.toolCalls ?? chunk.delta.message.tool_calls\n      ) : [];\n      for (const [index, toolCall] of toolCalls2.entries()) {\n        const normalizedIndex = getToolCallIndex2(\n          toolCall,\n          typeof chunk.index === \"number\" ? chunk.index : index\n        );\n        if (!toolCallOrder.includes(normalizedIndex)) {\n          toolCallOrder.push(normalizedIndex);\n        }\n        toolCallsByIndex[normalizedIndex] = {\n          ...toolCallsByIndex[normalizedIndex],\n          ...toolCall\n        };\n      }\n      continue;\n    }\n    if (eventType === \"tool-call-delta\") {\n      const toolCallDelta = isObject(chunk.delta) && isObject(chunk.delta.message) ? toToolCallArray(\n        chunk.delta.message.toolCalls ?? chunk.delta.message.tool_calls\n      ) : [];\n      if (toolCallDelta.length > 0) {\n        const delta = toolCallDelta[0];\n        const normalizedIndex = getToolCallIndex2(delta, chunk.index ?? 0);\n        if (!toolCallOrder.includes(normalizedIndex)) {\n          toolCallOrder.push(normalizedIndex);\n        }\n        toolCallsByIndex[normalizedIndex] = appendToolCallDelta(\n          toolCallsByIndex[normalizedIndex],\n          delta\n        );\n      }\n      continue;\n    }\n    if (eventType === \"message-end\" && isObject(chunk.delta)) {\n      const delta = chunk.delta;\n      if (typeof delta.finishReason === \"string\") {\n        finishReason = delta.finishReason;\n      } else if (typeof delta.finish_reason === \"string\") {\n        finishReason = delta.finish_reason;\n      }\n      if (delta.error !== void 0) {\n        metadata.error = delta.error;\n      }\n      metrics = {\n        ...metrics,\n        ...parseCohereMetricsFromUsage(delta.usage)\n      };\n    }\n  }\n  const mergedToolCalls = toolCallOrder.sort((left, right) => left - right).map((index) => toolCallsByIndex[index]).filter((toolCall) => isObject(toolCall));\n  const aggregatedContentBlocks = serializeAggregatedContentBlocks(\n    contentBlocksByIndex,\n    contentBlockOrder\n  );\n  let output = extractCohereChatOutput(terminalResponse);\n  if (output === void 0) {\n    const mergedText = textDeltas.join(\"\");\n    const shouldUseStructuredContent = hasThinkingContent(aggregatedContentBlocks) || toolPlan.length > 0;\n    if (shouldUseStructuredContent) {\n      output = {\n        ...role ? { role } : {},\n        ...aggregatedContentBlocks.length > 0 ? { content: aggregatedContentBlocks } : {},\n        ...toolPlan.length > 0 ? { toolPlan } : {},\n        ...mergedToolCalls.length > 0 ? { toolCalls: mergedToolCalls } : {}\n      };\n    } else if (mergedToolCalls.length > 0 || role || mergedText.length > 0 || aggregatedContentBlocks.length > 0) {\n      const textContent = mergedText.length > 0 ? mergedText : aggregatedContentBlocks[0]?.type === \"text\" ? aggregatedContentBlocks[0].text : void 0;\n      output = {\n        ...role ? { role } : {},\n        ...textContent ? { content: textContent } : {},\n        ...mergedToolCalls.length > 0 ? { toolCalls: mergedToolCalls } : {}\n      };\n    }\n  }\n  if (finishReason) {\n    metadata = {\n      ...metadata,\n      finish_reason: finishReason\n    };\n  }\n  return {\n    metadata,\n    metrics,\n    output\n  };\n}\n\n// src/instrumentation/plugins/groq-channels.ts\nvar groqChannels = defineChannels(\n  \"groq-sdk\",\n  {\n    chatCompletionsCreate: channel({\n      channelName: \"chat.completions.create\",\n      kind: \"async\"\n    }),\n    embeddingsCreate: channel({\n      channelName: \"embeddings.create\",\n      kind: \"async\"\n    }),\n    audioSpeechCreate: channel({\n      channelName: \"audio.speech.create\",\n      kind: \"async\"\n    }),\n    audioTranscriptionsCreate: channel({\n      channelName: \"audio.transcriptions.create\",\n      kind: \"async\"\n    }),\n    audioTranslationsCreate: channel({\n      channelName: \"audio.translations.create\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GROQ }\n);\n\n// src/instrumentation/plugins/groq-plugin.ts\nvar GroqPlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      traceStreamingChannel(groqChannels.chatCompletionsCreate, {\n        name: \"groq.chat.completions.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => {\n          const { messages, ...metadata } = params;\n          return {\n            input: processInputAttachments(messages),\n            metadata: { ...metadata, provider: \"groq\" }\n          };\n        },\n        extractOutput: (result) => result?.choices,\n        extractMetrics: (result, startTime) => {\n          const metrics = parseGroqMetrics(result);\n          if (startTime) {\n            metrics.time_to_first_token = getCurrentUnixTimestamp() - startTime;\n          }\n          return metrics;\n        },\n        aggregateChunks: aggregateGroqChatCompletionChunks\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(groqChannels.embeddingsCreate, {\n        name: \"groq.embeddings.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => {\n          const { input, ...metadata } = params;\n          return {\n            input,\n            metadata: { ...metadata, provider: \"groq\" }\n          };\n        },\n        extractOutput: (result) => {\n          const embedding = result?.data?.[0]?.embedding;\n          return Array.isArray(embedding) ? { embedding_length: embedding.length } : void 0;\n        },\n        extractMetrics: (result) => parseGroqMetrics(result)\n      })\n    );\n    this.unsubscribers.push(\n      traceStreamingChannel(groqChannels.audioSpeechCreate, {\n        name: \"groq.audio.speech.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params]) => ({\n          input: {\n            operation: \"speech\",\n            prompt: params.input,\n            parameters: {\n              voice: params.voice,\n              format: params.response_format,\n              speed: params.speed\n            }\n          },\n          metadata: { model: params.model, provider: \"groq\" }\n        }),\n        extractOutput: () => ({ content: [] }),\n        extractMetrics: () => ({}),\n        patchResult: ({ endEvent, result, span, startTime }) => captureGroqSpeechResponse(\n          result,\n          endEvent.arguments[0],\n          span,\n          startTime\n        )\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(groqChannels.audioTranscriptionsCreate, {\n        name: \"groq.audio.transcriptions.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params], _event, span) => extractGroqAudioInput(params, \"transcribe\", span),\n        extractOutput: extractGroqAudioTextOutput,\n        extractMetrics: (result) => parseGroqMetricsObject(result)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(groqChannels.audioTranslationsCreate, {\n        name: \"groq.audio.translations.create\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([params], _event, span) => extractGroqAudioInput(params, \"translate\", span),\n        extractOutput: extractGroqAudioTextOutput,\n        extractMetrics: (result) => parseGroqMetricsObject(result)\n      })\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction extractGroqAudioInput(params, operation, span) {\n  const source = params.file ?? params.url;\n  const filePart = groqAudioFilePart(source);\n  const input = {\n    operation,\n    ...params.prompt !== void 0 ? { prompt: params.prompt } : {},\n    content: filePart ? [filePart] : [],\n    parameters: {\n      ...params.language !== void 0 ? { language: params.language } : {},\n      ...params.response_format !== void 0 ? { format: params.response_format } : {},\n      ...\"timestamp_granularities\" in params && params.timestamp_granularities !== void 0 ? { timestamp_granularities: params.timestamp_granularities } : {}\n    }\n  };\n  if (!filePart) observeGroqAudioInput(source, input, span);\n  return {\n    input,\n    metadata: { model: params.model, provider: \"groq\" }\n  };\n}\nfunction groqAudioFilePart(source) {\n  if (source === void 0 || source === null) return void 0;\n  if (typeof source === \"string\") {\n    if (source.startsWith(\"data:\")) {\n      const contentType2 = source.match(/^data:([^;,]+)/)?.[1];\n      const blob = contentType2 ? convertDataToBlob(source, contentType2) : null;\n      if (contentType2 && blob) {\n        const filename3 = `audio.${getExtensionFromMediaType(contentType2)}`;\n        return {\n          type: \"file\",\n          file: {\n            filename: filename3,\n            file_data: new Attachment({ data: blob, filename: filename3, contentType: contentType2 })\n          }\n        };\n      }\n    }\n    const filename2 = filenameFromPath(source) ?? \"audio\";\n    return {\n      type: \"file\",\n      file: { filename: filename2, file_data: source }\n    };\n  }\n  if (!isObject(source)) return void 0;\n  const filename = typeof source.name === \"string\" && source.name ? filenameFromPath(source.name) : typeof source.path === \"string\" && source.path ? filenameFromPath(source.path) : void 0;\n  const contentType = typeof source.type === \"string\" && source.type ? source.type : audioContentTypeFromFilename(filename);\n  const data = source instanceof Blob ? source : void 0;\n  if (!contentType || data === void 0) return void 0;\n  const resolvedFilename = filename ?? `audio.${getExtensionFromMediaType(contentType)}`;\n  return {\n    type: \"file\",\n    file: {\n      filename: resolvedFilename,\n      file_data: new Attachment({\n        data,\n        filename: resolvedFilename,\n        contentType\n      })\n    }\n  };\n}\nfunction observeGroqAudioInput(source, input, span) {\n  if (!isObject(source)) return;\n  const body = isObject(source.body) ? source.body : isAsyncIterable(source) ? source : void 0;\n  if (!body) return;\n  const contentType = responseHeader(source, \"content-type\")?.split(\";\", 1)[0]?.trim() || (typeof source.type === \"string\" && source.type ? source.type : audioContentTypeFromFilename(filenameForAudioSource(source)));\n  if (!contentType) return;\n  const filename = filenameFromContentDisposition(\n    responseHeader(source, \"content-disposition\")\n  ) ?? filenameForAudioSource(source) ?? `audio.${getExtensionFromMediaType(contentType)}`;\n  const chunks = [];\n  let finished = false;\n  const observer = {\n    onChunk(chunk) {\n      if (!finished && chunk.byteLength > 0) chunks.push(new Uint8Array(chunk));\n    },\n    onComplete() {\n      if (finished) return;\n      finished = true;\n      const data = concatUint8Arrays(...chunks);\n      chunks.length = 0;\n      if (data.byteLength === 0) return;\n      span.log({\n        input: {\n          ...input,\n          content: [\n            {\n              type: \"file\",\n              file: {\n                filename,\n                byte_size: data.byteLength,\n                file_data: new Attachment({\n                  data: data.buffer,\n                  filename,\n                  contentType\n                })\n              }\n            }\n          ]\n        }\n      });\n    },\n    onCancel() {\n      finished = true;\n      chunks.length = 0;\n    },\n    aroundRead: (next) => withCurrent(span, next),\n    debugLabel: \"Groq input audio\"\n  };\n  if (body === source) observeByteStream(body, observer);\n  else observeResponseBytes(source, observer);\n}\nfunction filenameForAudioSource(source) {\n  if (typeof source.name === \"string\" && source.name)\n    return filenameFromPath(source.name);\n  if (typeof source.path === \"string\" && source.path)\n    return filenameFromPath(source.path);\n  if (typeof source.url === \"string\" && source.url)\n    return filenameFromPath(source.url);\n  return void 0;\n}\nfunction responseHeader(response, name) {\n  if (!isObject(response.headers) || typeof response.headers.get !== \"function\")\n    return void 0;\n  try {\n    const value = Reflect.apply(response.headers.get, response.headers, [name]);\n    return typeof value === \"string\" ? value : void 0;\n  } catch {\n    return void 0;\n  }\n}\nfunction filenameFromContentDisposition(value) {\n  const match = value?.match(/filename=\"([^\"]+)\"|filename=([^;]+)/i);\n  return match?.[1] ?? match?.[2]?.trim();\n}\nfunction filenameFromPath(value) {\n  const withoutQuery = value.split(/[?#]/, 1)[0];\n  return withoutQuery.split(/[\\\\/]/).pop() || void 0;\n}\nfunction audioContentTypeFromFilename(filename) {\n  const extension = filename?.split(\".\").pop()?.toLowerCase();\n  return extension ? {\n    flac: \"audio/flac\",\n    m4a: \"audio/mp4\",\n    mp3: \"audio/mpeg\",\n    mp4: \"audio/mp4\",\n    mpeg: \"audio/mpeg\",\n    mpga: \"audio/mpeg\",\n    ogg: \"audio/ogg\",\n    wav: \"audio/wav\",\n    webm: \"audio/webm\"\n  }[extension] : void 0;\n}\nfunction extractGroqAudioTextOutput(result) {\n  if (typeof result === \"string\") {\n    return { content: [{ type: \"text\", text: result }] };\n  }\n  const annotations = {\n    ...typeof result?.language === \"string\" ? { language: result.language } : {},\n    ...typeof result?.duration === \"number\" ? { duration: result.duration } : {},\n    ...Array.isArray(result?.segments) ? { segments: result.segments } : {},\n    ...Array.isArray(result?.words) ? { words: result.words } : {}\n  };\n  return {\n    content: typeof result?.text === \"string\" ? [{ type: \"text\", text: result.text }] : [],\n    ...Object.keys(annotations).length > 0 ? { annotations } : {}\n  };\n}\nfunction parseGroqMetricsObject(result) {\n  return isObject(result) ? parseGroqMetrics(result) : {};\n}\nfunction captureGroqSpeechResponse(response, request, span, startTime) {\n  if (!isObject(response)) return false;\n  const headerContentType = responseHeader(response, \"content-type\")?.split(\n    \";\",\n    1\n  )[0];\n  const contentType = headerContentType?.startsWith(\"audio/\") ? headerContentType : audioContentTypeFromFormat(request.response_format ?? \"wav\");\n  if (!contentType) return false;\n  const filename = filenameFromContentDisposition(\n    responseHeader(response, \"content-disposition\")\n  ) ?? `speech.${getExtensionFromMediaType(contentType)}`;\n  const chunks = [];\n  let finished = false;\n  let started = false;\n  let spanEnded = false;\n  const endSpan = () => {\n    if (spanEnded) return;\n    spanEnded = true;\n    try {\n      span.end();\n    } catch (error) {\n      debugLogger.error(\"Error ending Groq speech span\", error);\n    }\n  };\n  let firstChunk = true;\n  const onChunk = (chunk) => {\n    if (finished || chunk.byteLength === 0) return;\n    if (firstChunk) {\n      span.log({\n        metrics: {\n          time_to_first_token: getCurrentUnixTimestamp() - startTime\n        }\n      });\n      firstChunk = false;\n    }\n    chunks.push(new Uint8Array(chunk));\n  };\n  const complete = () => {\n    if (finished) return;\n    finished = true;\n    const data = concatUint8Arrays(...chunks);\n    chunks.length = 0;\n    try {\n      span.log({\n        output: {\n          content: data.byteLength > 0 ? [\n            {\n              type: \"file\",\n              file: {\n                filename,\n                byte_size: data.byteLength,\n                file_data: new Attachment({\n                  data: data.buffer,\n                  filename,\n                  contentType\n                })\n              }\n            }\n          ] : []\n        }\n      });\n    } finally {\n      endSpan();\n    }\n  };\n  const cancel = (error) => {\n    if (finished) return;\n    finished = true;\n    chunks.length = 0;\n    try {\n      if (error !== void 0) span.log({ error });\n    } finally {\n      endSpan();\n    }\n  };\n  const patched = observeResponseBytes(response, {\n    onChunk,\n    onComplete: complete,\n    onCancel: cancel,\n    onStart: () => {\n      started = true;\n    },\n    aroundRead: (next) => withCurrent(span, next),\n    debugLabel: \"Groq speech audio\"\n  });\n  if (patched)\n    queueMicrotask(() => {\n      if (!started) {\n        try {\n          span.log({ output: { content: [] } });\n        } catch (error) {\n          debugLogger.error(\"Error logging unread Groq speech response\", error);\n        } finally {\n          endSpan();\n        }\n      }\n    });\n  return patched;\n}\nfunction observeResponseBytes(response, options) {\n  const onStart = options.onStart;\n  const safely = (callback) => {\n    try {\n      callback();\n    } catch (error) {\n      debugLogger.error(`Error observing ${options.debugLabel}`, error);\n    }\n  };\n  const safeOptions = {\n    ...options,\n    onStart: onStart ? () => {\n      safely(onStart);\n    } : void 0,\n    onChunk: (chunk) => safely(() => options.onChunk(chunk)),\n    onComplete: () => safely(options.onComplete),\n    onCancel: (error) => safely(() => options.onCancel(error))\n  };\n  let patched = false;\n  if (isObject(response.body)) {\n    observeByteStream(response.body, safeOptions);\n    patched = true;\n  }\n  patched = patchResponseBytesMethod(response, \"arrayBuffer\", safeOptions) || patched;\n  patched = patchResponseBytesMethod(response, \"bytes\", safeOptions) || patched;\n  patched = patchResponseBlobMethod(response, safeOptions) || patched;\n  for (const method of [\"formData\", \"json\", \"text\"])\n    patched = patchResponseCompletionMethod(response, method, safeOptions) || patched;\n  patched = patchResponseCloneMethod(response, safeOptions) || patched;\n  return patched;\n}\nfunction patchResponseBytesMethod(response, method, options) {\n  const responseRecord = response;\n  const original = responseRecord[method];\n  if (!Object.isExtensible(response) || typeof original !== \"function\")\n    return false;\n  responseRecord[method] = function(...args) {\n    options.onStart?.();\n    let result;\n    try {\n      result = Reflect.apply(original, this, args);\n    } catch (error) {\n      options.onCancel(error);\n      throw error;\n    }\n    void Promise.resolve(result).then((value) => {\n      if (value instanceof ArrayBuffer) options.onChunk(new Uint8Array(value));\n      else if (value instanceof Uint8Array) options.onChunk(value);\n      options.onComplete();\n    }, options.onCancel);\n    return result;\n  };\n  return true;\n}\nfunction patchResponseBlobMethod(response, options) {\n  const responseRecord = response;\n  const original = responseRecord.blob;\n  if (!Object.isExtensible(response) || typeof original !== \"function\")\n    return false;\n  responseRecord.blob = function(...args) {\n    options.onStart?.();\n    let result;\n    try {\n      result = Reflect.apply(original, this, args);\n    } catch (error) {\n      options.onCancel(error);\n      throw error;\n    }\n    void Promise.resolve(result).then((value) => {\n      if (!(value instanceof Blob)) {\n        options.onComplete();\n        return;\n      }\n      void value.arrayBuffer().then((bytes) => {\n        options.onChunk(new Uint8Array(bytes));\n        options.onComplete();\n      }, options.onCancel);\n    }, options.onCancel);\n    return result;\n  };\n  return true;\n}\nfunction patchResponseCompletionMethod(response, method, options) {\n  const responseRecord = response;\n  const original = responseRecord[method];\n  if (!Object.isExtensible(response) || typeof original !== \"function\")\n    return false;\n  responseRecord[method] = function(...args) {\n    options.onStart?.();\n    let result;\n    try {\n      result = Reflect.apply(original, this, args);\n    } catch (error) {\n      options.onCancel(error);\n      throw error;\n    }\n    void Promise.resolve(result).then(\n      () => options.onCancel(),\n      options.onCancel\n    );\n    return result;\n  };\n  return true;\n}\nfunction patchResponseCloneMethod(response, options) {\n  const responseRecord = response;\n  const original = responseRecord.clone;\n  if (!Object.isExtensible(response) || typeof original !== \"function\")\n    return false;\n  responseRecord.clone = function(...args) {\n    const clone = Reflect.apply(original, this, args);\n    if (isObject(clone)) observeResponseBytes(clone, options);\n    return clone;\n  };\n  return true;\n}\nfunction audioContentTypeFromFormat(format) {\n  return {\n    flac: \"audio/flac\",\n    mp3: \"audio/mpeg\",\n    mulaw: \"audio/basic\",\n    ogg: \"audio/ogg\",\n    wav: \"audio/wav\"\n  }[format.toLowerCase()];\n}\nfunction parseGroqMetrics(result) {\n  const metrics = parseMetricsFromUsage(result?.usage);\n  const xGroq = result?.x_groq;\n  if (!xGroq || typeof xGroq !== \"object\") {\n    return metrics;\n  }\n  const extraUsage = \"usage\" in xGroq ? xGroq.usage : void 0;\n  if (!extraUsage || typeof extraUsage !== \"object\") {\n    return metrics;\n  }\n  const dramCachedTokens = extraUsage[\"dram_cached_tokens\"];\n  const sramCachedTokens = extraUsage[\"sram_cached_tokens\"];\n  return {\n    ...metrics,\n    ...typeof dramCachedTokens === \"number\" ? { dram_cached_tokens: dramCachedTokens } : {},\n    ...typeof sramCachedTokens === \"number\" ? { sram_cached_tokens: sramCachedTokens } : {}\n  };\n}\nfunction aggregateGroqChatCompletionChunks(chunks, streamResult, endEvent) {\n  const aggregated = aggregateChatCompletionChunks(\n    chunks,\n    streamResult,\n    endEvent\n  );\n  const reasoning = aggregateGroqReasoning(chunks);\n  if (reasoning !== void 0) {\n    const message = aggregated.output[0]?.message;\n    if (message) {\n      message.reasoning = reasoning;\n    }\n  }\n  return {\n    metrics: aggregated.metrics,\n    output: aggregated.output\n  };\n}\nfunction aggregateGroqReasoning(chunks) {\n  let reasoning = \"\";\n  for (const chunk of chunks) {\n    const delta = chunk.choices?.[0]?.delta;\n    const deltaReasoning = delta?.reasoning;\n    if (typeof deltaReasoning === \"string\") {\n      reasoning += deltaReasoning;\n    }\n  }\n  return reasoning.length > 0 ? reasoning : void 0;\n}\n\n// src/instrumentation/plugins/bedrock-runtime-channels.ts\nvar clientSendChannel = channel({\n  channelName: \"client.send\",\n  kind: \"async\"\n});\nvar bedrockRuntimeChannels = defineChannels(\n  \"aws-bedrock-runtime\",\n  {\n    clientSend: clientSendChannel\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.BEDROCK_RUNTIME }\n);\nvar smithyCoreChannels = defineChannels(\n  \"@smithy/core\",\n  {\n    clientSend: clientSendChannel\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.BEDROCK_RUNTIME }\n);\nvar smithyClientChannels = defineChannels(\n  \"@smithy/smithy-client\",\n  {\n    clientSend: clientSendChannel\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.BEDROCK_RUNTIME }\n);\n\n// src/instrumentation/plugins/bedrock-runtime-common.ts\nvar BEDROCK_RUNTIME_COMMAND_OPERATIONS = {\n  ConverseCommand: \"converse\",\n  ConverseStreamCommand: \"converseStream\",\n  InvokeModelCommand: \"invokeModel\",\n  InvokeModelWithBidirectionalStreamCommand: \"invokeModelWithBidirectionalStream\",\n  InvokeModelWithResponseStreamCommand: \"invokeModelWithResponseStream\"\n};\nfunction getBedrockRuntimeCommandName(command) {\n  if (!isObject(command) || !isObject(command.constructor)) {\n    return void 0;\n  }\n  const input = command.input;\n  if (!isObject(input) || typeof input.modelId !== \"string\") {\n    return void 0;\n  }\n  const commandName = command.constructor.name;\n  return isBedrockRuntimeCommandName(commandName) ? commandName : void 0;\n}\nfunction getBedrockRuntimeOperation(command) {\n  const commandName = getBedrockRuntimeCommandName(command);\n  return commandName ? BEDROCK_RUNTIME_COMMAND_OPERATIONS[commandName] : void 0;\n}\nfunction getBedrockRuntimeCommandInput(command) {\n  return isObject(command) ? command.input : void 0;\n}\nfunction buildBedrockRuntimeSpanInfo(command) {\n  const commandName = getBedrockRuntimeCommandName(command);\n  const operation = getBedrockRuntimeOperation(command);\n  return {\n    name: operation ? `bedrock.${operation}` : \"bedrock.client.send\",\n    metadata: {\n      ...commandName ? { command: commandName } : {},\n      ...operation ? { operation } : {}\n    }\n  };\n}\nfunction isBedrockRuntimeCommandName(commandName) {\n  return commandName === \"ConverseCommand\" || commandName === \"ConverseStreamCommand\" || commandName === \"InvokeModelCommand\" || commandName === \"InvokeModelWithBidirectionalStreamCommand\" || commandName === \"InvokeModelWithResponseStreamCommand\";\n}\n\n// src/instrumentation/plugins/bedrock-runtime-plugin.ts\nvar BedrockRuntimePlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      ...[\n        bedrockRuntimeChannels.clientSend,\n        smithyCoreChannels.clientSend,\n        smithyClientChannels.clientSend\n      ].map((channel2) => traceBedrockRuntimeClientSendChannel(channel2))\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction traceBedrockRuntimeClientSendChannel(channel2) {\n  return traceStreamingChannel(channel2, {\n    name: ([command]) => buildBedrockRuntimeSpanInfo(command).name,\n    shouldTrace: ([command, optionsOrCb, cb]) => getBedrockRuntimeOperation(command) !== void 0 && typeof optionsOrCb !== \"function\" && typeof cb !== \"function\",\n    type: \"llm\" /* LLM */,\n    extractInput: ([command]) => extractBedrockRuntimeInput(command),\n    extractOutput: (result, endEvent) => extractBedrockRuntimeOutput(endEvent?.arguments?.[0], result),\n    extractMetadata: (result, endEvent) => extractBedrockRuntimeResponseMetadata(endEvent?.arguments?.[0], result),\n    extractMetrics: (result) => extractBedrockRuntimeResponseMetrics(result),\n    patchResult: ({ endEvent, result, span, startTime }) => patchBedrockRuntimeStreamingResult({\n      command: endEvent.arguments?.[0],\n      result,\n      span,\n      startTime\n    })\n  });\n}\nfunction extractBedrockRuntimeInput(command) {\n  const operation = getBedrockRuntimeOperation(command);\n  const commandName = getBedrockRuntimeCommandName(command);\n  const request = getBedrockRuntimeCommandInput(command);\n  const metadata = {\n    provider: \"aws-bedrock\",\n    ...commandName ? { command: commandName } : {},\n    ...operation ? { operation } : {},\n    ...extractBedrockRuntimeRequestMetadata(request)\n  };\n  if (operation === \"converse\" || operation === \"converseStream\") {\n    const converseRequest = isObject(request) ? request : void 0;\n    return {\n      input: sanitizeBedrockValue({\n        messages: converseRequest?.messages,\n        system: converseRequest?.system\n      }),\n      metadata\n    };\n  }\n  if (operation === \"invokeModel\" || operation === \"invokeModelWithBidirectionalStream\" || operation === \"invokeModelWithResponseStream\") {\n    const invokeRequest = isObject(request) ? request : void 0;\n    return {\n      input: parseJsonBody(invokeRequest?.body) ?? summarizeBody(invokeRequest?.body),\n      metadata\n    };\n  }\n  return {\n    input: sanitizeBedrockValue(request),\n    metadata\n  };\n}\nfunction extractBedrockRuntimeRequestMetadata(request) {\n  if (!isObject(request)) {\n    return {};\n  }\n  const metadata = {};\n  for (const key of [\n    \"modelId\",\n    \"contentType\",\n    \"accept\",\n    \"trace\",\n    \"guardrailIdentifier\",\n    \"guardrailVersion\",\n    \"performanceConfig\",\n    \"performanceConfigLatency\",\n    \"serviceTier\"\n  ]) {\n    const value = request[key];\n    if (value !== void 0) {\n      metadata[key === \"modelId\" ? \"model\" : key] = value;\n    }\n  }\n  if (isObject(request.inferenceConfig)) {\n    Object.assign(metadata, sanitizeBedrockValue(request.inferenceConfig));\n  }\n  return metadata;\n}\nfunction extractBedrockRuntimeOutput(command, result) {\n  const operation = getBedrockRuntimeOperation(command);\n  if (operation === \"converse\") {\n    return sanitizeBedrockValue(\n      result?.output?.message\n    );\n  }\n  if (operation === \"invokeModel\") {\n    const response = isObject(result) ? result : void 0;\n    return parseJsonBody(response?.body) ?? summarizeBody(response?.body);\n  }\n  return sanitizeBedrockValue(result);\n}\nfunction extractBedrockRuntimeResponseMetadata(command, result) {\n  const operation = getBedrockRuntimeOperation(command);\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const metadata = {};\n  for (const key of [\n    \"stopReason\",\n    \"contentType\",\n    \"performanceConfig\",\n    \"performanceConfigLatency\",\n    \"serviceTier\"\n  ]) {\n    const value = result[key];\n    if (value !== void 0) {\n      metadata[key] = value;\n    }\n  }\n  if (operation === \"converse\" && result.additionalModelResponseFields !== void 0) {\n    metadata.additionalModelResponseFields = sanitizeBedrockValue(\n      result.additionalModelResponseFields\n    );\n  }\n  return Object.keys(metadata).length > 0 ? metadata : void 0;\n}\nfunction extractBedrockRuntimeResponseMetrics(result) {\n  if (!isObject(result)) {\n    return {};\n  }\n  const parsedBody = parseJsonBody(result.body);\n  if (isObject(parsedBody)) {\n    const metadata = isObject(parsedBody.metadata) ? parsedBody.metadata : void 0;\n    const metrics = parseBedrockRuntimeMetrics(\n      parsedBody.usage ?? metadata?.usage,\n      parsedBody.metrics ?? metadata?.metrics\n    );\n    if (Object.keys(metrics).length > 0) {\n      return metrics;\n    }\n  }\n  return parseBedrockRuntimeMetrics(result.usage, result.metrics);\n}\nfunction parseBedrockRuntimeMetrics(usage, responseMetrics) {\n  const metrics = {};\n  const usageRecord = isObject(usage) ? usage : {};\n  const promptTokens = firstNumber3(\n    usageRecord.inputTokens,\n    usageRecord.inputTokenCount,\n    usageRecord.input_tokens,\n    usageRecord.prompt_tokens\n  );\n  if (promptTokens !== void 0) {\n    metrics.prompt_tokens = promptTokens;\n  }\n  const completionTokens = firstNumber3(\n    usageRecord.outputTokens,\n    usageRecord.outputTokenCount,\n    usageRecord.output_tokens,\n    usageRecord.completion_tokens\n  );\n  if (completionTokens !== void 0) {\n    metrics.completion_tokens = completionTokens;\n  }\n  const totalTokens = firstNumber3(\n    usageRecord.totalTokens,\n    usageRecord.totalTokenCount,\n    usageRecord.total_tokens,\n    usageRecord.tokens\n  );\n  if (totalTokens !== void 0) {\n    metrics.tokens = totalTokens;\n  }\n  const cacheReadInputTokens = firstNumber3(\n    usageRecord.cacheReadInputTokens,\n    usageRecord.cacheReadInputTokenCount,\n    usageRecord.cache_read_input_tokens,\n    usageRecord.prompt_cached_tokens\n  );\n  if (cacheReadInputTokens !== void 0) {\n    metrics.prompt_cached_tokens = cacheReadInputTokens;\n  }\n  const cacheWriteInputTokens = firstNumber3(\n    usageRecord.cacheWriteInputTokens,\n    usageRecord.cacheWriteInputTokenCount,\n    usageRecord.cache_write_input_tokens,\n    usageRecord.cache_creation_input_tokens,\n    usageRecord.prompt_cache_creation_tokens\n  );\n  if (cacheWriteInputTokens !== void 0) {\n    metrics.prompt_cache_creation_tokens = cacheWriteInputTokens;\n  }\n  if (metrics.tokens === void 0) {\n    const tokenParts = [\n      promptTokens,\n      completionTokens,\n      cacheReadInputTokens,\n      cacheWriteInputTokens\n    ].filter((value) => value !== void 0);\n    if (tokenParts.length > 0) {\n      metrics.tokens = tokenParts.reduce((total, value) => total + value, 0);\n    }\n  }\n  if (isObject(responseMetrics) && typeof responseMetrics.latencyMs === \"number\") {\n    metrics.latency_ms = responseMetrics.latencyMs;\n  }\n  return metrics;\n}\nfunction firstNumber3(...values) {\n  return values.find((value) => typeof value === \"number\");\n}\nfunction patchBedrockRuntimeStreamingResult(args) {\n  const operation = getBedrockRuntimeOperation(args.command);\n  if (!isObject(args.result)) {\n    return false;\n  }\n  if (operation === \"converseStream\" && isAsyncIterable(args.result.stream)) {\n    patchConverseStream(\n      args.result.stream,\n      args.span,\n      args.startTime\n    );\n    return true;\n  }\n  if ((operation === \"invokeModelWithBidirectionalStream\" || operation === \"invokeModelWithResponseStream\") && isAsyncIterable(args.result.body)) {\n    patchInvokeModelResponseStream(\n      args.result.body,\n      args.span,\n      args.startTime\n    );\n    return true;\n  }\n  return false;\n}\nfunction patchConverseStream(stream, span, startTime) {\n  let firstChunkTime;\n  patchStreamIfNeeded(stream, {\n    onChunk: (chunk) => {\n      if (firstChunkTime === void 0 && isObject(chunk.contentBlockDelta)) {\n        firstChunkTime = getCurrentUnixTimestamp();\n      }\n    },\n    onComplete: (chunks) => {\n      const aggregated = aggregateBedrockConverseStreamChunks(chunks);\n      const metrics = { ...aggregated.metrics };\n      if (firstChunkTime !== void 0) {\n        metrics.time_to_first_token = firstChunkTime - startTime;\n      }\n      logBedrockStreamAggregation(span, aggregated, metrics);\n      span.end();\n    },\n    onError: (error) => {\n      span.log({ error: error.message });\n      span.end();\n    }\n  });\n}\nfunction patchInvokeModelResponseStream(stream, span, startTime) {\n  let firstChunkTime;\n  patchStreamIfNeeded(stream, {\n    onChunk: (chunk) => {\n      if (firstChunkTime === void 0 && isObject(chunk.chunk)) {\n        firstChunkTime = getCurrentUnixTimestamp();\n      }\n    },\n    onComplete: (chunks) => {\n      const aggregated = aggregateInvokeModelResponseStreamChunks(chunks);\n      const metrics = { ...aggregated.metrics };\n      if (firstChunkTime !== void 0) {\n        metrics.time_to_first_token = firstChunkTime - startTime;\n      }\n      logBedrockStreamAggregation(span, aggregated, metrics);\n      span.end();\n    },\n    onError: (error) => {\n      span.log({ error: error.message });\n      span.end();\n    }\n  });\n}\nvar BEDROCK_STREAM_EXCEPTION_KEYS = [\n  \"internalServerException\",\n  \"modelStreamErrorException\",\n  \"validationException\",\n  \"throttlingException\",\n  \"modelTimeoutException\",\n  \"serviceUnavailableException\"\n];\nfunction aggregateBedrockConverseStreamChunks(chunks) {\n  let role;\n  let stopReason;\n  let usage;\n  let responseMetrics;\n  const contentByIndex = /* @__PURE__ */ new Map();\n  const metadata = {};\n  for (const chunk of chunks) {\n    const exception = extractBedrockStreamException(chunk);\n    if (exception) {\n      return exception;\n    }\n    if (typeof chunk.messageStart?.role === \"string\") {\n      role = chunk.messageStart.role;\n    }\n    const startIndex = chunk.contentBlockStart?.contentBlockIndex;\n    if (typeof startIndex === \"number\") {\n      contentByIndex.set(startIndex, {\n        ...contentByIndex.get(startIndex) ?? {},\n        ...sanitizeRecord(chunk.contentBlockStart?.start)\n      });\n    }\n    const deltaIndex = chunk.contentBlockDelta?.contentBlockIndex;\n    const delta = chunk.contentBlockDelta?.delta;\n    if (typeof deltaIndex === \"number\" && isObject(delta)) {\n      const existing = contentByIndex.get(deltaIndex) ?? {};\n      contentByIndex.set(deltaIndex, mergeContentBlockDelta(existing, delta));\n    }\n    if (typeof chunk.messageStop?.stopReason === \"string\") {\n      stopReason = chunk.messageStop.stopReason;\n    }\n    if (chunk.messageStop?.additionalModelResponseFields !== void 0) {\n      metadata.additionalModelResponseFields = sanitizeBedrockValue(\n        chunk.messageStop.additionalModelResponseFields\n      );\n    }\n    if (chunk.metadata?.usage !== void 0) {\n      usage = chunk.metadata.usage;\n    }\n    if (chunk.metadata?.metrics !== void 0) {\n      responseMetrics = chunk.metadata.metrics;\n    }\n    if (chunk.metadata?.performanceConfig !== void 0) {\n      metadata.performanceConfig = sanitizeBedrockValue(\n        chunk.metadata.performanceConfig\n      );\n    }\n    if (chunk.metadata?.serviceTier !== void 0) {\n      metadata.serviceTier = chunk.metadata.serviceTier;\n    }\n  }\n  if (stopReason !== void 0) {\n    metadata.stopReason = stopReason;\n  }\n  const content = [...contentByIndex.entries()].sort(([left], [right]) => left - right).map(([, value]) => value).filter((value) => Object.keys(value).length > 0);\n  return {\n    output: {\n      role,\n      content\n    },\n    metrics: parseBedrockRuntimeMetrics(usage, responseMetrics),\n    ...Object.keys(metadata).length > 0 ? { metadata } : {}\n  };\n}\nfunction aggregateInvokeModelResponseStreamChunks(chunks) {\n  for (const chunk of chunks) {\n    const exception = extractBedrockStreamException(chunk);\n    if (exception) {\n      return exception;\n    }\n  }\n  const parsedChunks = chunks.map((chunk) => parseJsonBody(chunk.chunk?.bytes)).filter((chunk) => chunk !== void 0);\n  const jsonLikeChunks = parsedChunks.filter(isObject);\n  const text = parsedChunks.map(extractTextFromJsonLike).join(\"\");\n  const lastMetadataChunk = jsonLikeChunks.slice().reverse().find((chunk) => isObject(chunk.metadata));\n  const metadata = isObject(lastMetadataChunk?.metadata) ? sanitizeRecord(lastMetadataChunk.metadata) : void 0;\n  let usage;\n  for (const chunk of jsonLikeChunks) {\n    const message = chunk.message;\n    for (const candidate of [\n      isObject(chunk.usage) ? chunk.usage : void 0,\n      isObject(message) && isObject(message.usage) ? message.usage : void 0\n    ]) {\n      if (candidate !== void 0) {\n        usage = {\n          ...usage,\n          ...sanitizeRecord(candidate)\n        };\n      }\n    }\n  }\n  return {\n    output: text.length > 0 ? { text } : {\n      chunk_count: chunks.length,\n      chunks: sanitizeBedrockValue(\n        (jsonLikeChunks.length > 0 ? jsonLikeChunks : chunks).slice(\n          0,\n          20\n        )\n      )\n    },\n    metrics: parseBedrockRuntimeMetrics(\n      usage ?? (isObject(metadata) ? metadata.usage : void 0),\n      isObject(metadata) ? metadata.metrics : void 0\n    ),\n    ...metadata ? { metadata } : {}\n  };\n}\nfunction logBedrockStreamAggregation(span, aggregated, metrics) {\n  span.log(\n    aggregated.error !== void 0 ? {\n      error: aggregated.error,\n      ...aggregated.metadata ? { metadata: aggregated.metadata } : {},\n      metrics\n    } : {\n      output: aggregated.output,\n      ...aggregated.metadata ? { metadata: aggregated.metadata } : {},\n      metrics\n    }\n  );\n}\nfunction extractBedrockStreamException(chunk) {\n  if (!isObject(chunk)) {\n    return void 0;\n  }\n  for (const [key, value] of Object.entries(chunk)) {\n    if (!isBedrockStreamExceptionKey(key) || !isObject(value)) {\n      continue;\n    }\n    const name = typeof value.name === \"string\" ? value.name : key;\n    const message = typeof value.message === \"string\" ? value.message : typeof value.originalMessage === \"string\" ? value.originalMessage : void 0;\n    const metadata = {\n      exception: key\n    };\n    if (typeof value.name === \"string\") {\n      metadata.exceptionName = value.name;\n    }\n    if (typeof value.$fault === \"string\") {\n      metadata.fault = value.$fault;\n    }\n    if (typeof value.originalMessage === \"string\") {\n      metadata.originalMessage = value.originalMessage;\n    }\n    if (typeof value.originalStatusCode === \"number\") {\n      metadata.originalStatusCode = value.originalStatusCode;\n    }\n    return {\n      error: message ? `${name}: ${message}` : name,\n      metadata,\n      metrics: {}\n    };\n  }\n  return void 0;\n}\nfunction isBedrockStreamExceptionKey(key) {\n  return BEDROCK_STREAM_EXCEPTION_KEYS.some((candidate) => candidate === key);\n}\nfunction mergeContentBlockDelta(existing, delta) {\n  const next = { ...existing };\n  if (typeof delta.text === \"string\") {\n    next.text = `${typeof next.text === \"string\" ? next.text : \"\"}${delta.text}`;\n  }\n  if (isObject(delta.reasoningContent)) {\n    const existingReasoning = isObject(next.reasoningContent) ? next.reasoningContent : {};\n    next.reasoningContent = {\n      ...existingReasoning,\n      ...sanitizeRecord(delta.reasoningContent),\n      ...typeof delta.reasoningContent.text === \"string\" ? {\n        text: `${typeof existingReasoning.text === \"string\" ? existingReasoning.text : \"\"}${delta.reasoningContent.text}`\n      } : {}\n    };\n  }\n  if (isObject(delta.toolUse)) {\n    const existingToolUse = isObject(next.toolUse) ? next.toolUse : {};\n    next.toolUse = {\n      ...existingToolUse,\n      ...sanitizeRecord(delta.toolUse),\n      ...typeof delta.toolUse.input === \"string\" ? {\n        input: `${typeof existingToolUse.input === \"string\" ? existingToolUse.input : \"\"}${delta.toolUse.input}`\n      } : {}\n    };\n  }\n  for (const [key, value] of Object.entries(delta)) {\n    if (key !== \"text\" && key !== \"reasoningContent\" && key !== \"toolUse\" && isSafeBedrockObjectKey(key)) {\n      next[key] = sanitizeBedrockValue(value);\n    }\n  }\n  return next;\n}\nfunction parseJsonBody(body) {\n  const text = decodeBodyToString(body);\n  if (text === void 0 || text.length === 0) {\n    return void 0;\n  }\n  try {\n    return sanitizeBedrockValue(JSON.parse(text));\n  } catch {\n    return void 0;\n  }\n}\nfunction summarizeBody(body) {\n  if (body === void 0 || body === null) {\n    return void 0;\n  }\n  const text = decodeBodyToString(body);\n  if (text !== void 0) {\n    return text.length > 2e3 ? `${text.slice(0, 2e3)}...` : text;\n  }\n  return sanitizeBedrockValue(body);\n}\nfunction decodeBodyToString(body) {\n  if (typeof body === \"string\") {\n    return body;\n  }\n  if (body instanceof Uint8Array) {\n    return new TextDecoder().decode(body);\n  }\n  if (body instanceof ArrayBuffer) {\n    return new TextDecoder().decode(new Uint8Array(body));\n  }\n  return void 0;\n}\nfunction sanitizeRecord(value) {\n  return isObject(value) ? sanitizeBedrockValue(value) : {};\n}\nfunction sanitizeBedrockValue(value, depth = 0) {\n  if (value === void 0 || value === null) {\n    return value;\n  }\n  if (typeof value !== \"object\") {\n    return value;\n  }\n  if (value instanceof Uint8Array) {\n    return { byte_length: value.byteLength };\n  }\n  if (value instanceof ArrayBuffer) {\n    return { byte_length: value.byteLength };\n  }\n  if (Array.isArray(value)) {\n    return depth > 20 ? \"[MaxDepth]\" : value.map((item) => sanitizeBedrockValue(item, depth + 1));\n  }\n  if (!isObject(value)) {\n    return String(value);\n  }\n  if (depth > 20) {\n    return \"[MaxDepth]\";\n  }\n  const output = {};\n  for (const [key, nested] of Object.entries(value)) {\n    if (!isSafeBedrockObjectKey(key)) {\n      continue;\n    }\n    output[key] = sanitizeBedrockValue(nested, depth + 1);\n  }\n  return output;\n}\nfunction isSafeBedrockObjectKey(key) {\n  return key !== \"__proto__\" && key !== \"constructor\" && key !== \"prototype\";\n}\nfunction extractTextFromJsonLike(value) {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map(extractTextFromJsonLike).join(\"\");\n  }\n  if (!isObject(value)) {\n    return \"\";\n  }\n  const contentBlockDelta = value.contentBlockDelta;\n  if (isObject(contentBlockDelta)) {\n    return extractTextFromJsonLike(contentBlockDelta.delta);\n  }\n  if (isObject(value.delta)) {\n    return extractTextFromJsonLike(value.delta);\n  }\n  if (typeof value.text === \"string\") {\n    return value.text;\n  }\n  if (typeof value.outputText === \"string\") {\n    return value.outputText;\n  }\n  if (typeof value.completion === \"string\") {\n    return value.completion;\n  }\n  if (typeof value.generation === \"string\") {\n    return value.generation;\n  }\n  if (Array.isArray(value.content)) {\n    return value.content.map(extractTextFromJsonLike).join(\"\");\n  }\n  if (Array.isArray(value.output)) {\n    return value.output.map(extractTextFromJsonLike).join(\"\");\n  }\n  if (Array.isArray(value.outputs)) {\n    return value.outputs.map(extractTextFromJsonLike).join(\"\");\n  }\n  return \"\";\n}\n\n// src/instrumentation/plugins/genkit-channels.ts\nvar genkitChannels = defineChannels(\n  \"@genkit-ai/ai\",\n  {\n    generate: channel({\n      channelName: \"generate\",\n      kind: \"async\"\n    }),\n    generateStream: channel({\n      channelName: \"generateStream\",\n      kind: \"sync-stream\"\n    }),\n    embed: channel({\n      channelName: \"embed\",\n      kind: \"async\"\n    }),\n    embedMany: channel({\n      channelName: \"embedMany\",\n      kind: \"async\"\n    }),\n    actionRun: channel({\n      channelName: \"action.run\",\n      kind: \"async\"\n    }),\n    actionStream: channel({\n      channelName: \"action.stream\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GENKIT }\n);\nvar genkitCoreChannels = defineChannels(\n  \"@genkit-ai/core\",\n  {\n    actionSpan: channel({\n      channelName: \"action.span\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GENKIT }\n);\n\n// src/instrumentation/plugins/genkit-plugin.ts\nvar GenkitPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToGenkitChannels();\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n  subscribeToGenkitChannels() {\n    this.unsubscribers.push(\n      traceAsyncChannel(genkitChannels.generate, {\n        name: \"genkit.generate\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([input]) => extractGenerateInput(input),\n        extractOutput: extractGenerateOutput,\n        extractMetadata: (result, event) => extractGenerateResponseMetadata(result, event?.arguments?.[0]),\n        extractMetrics: (result) => parseGenkitUsageMetrics(result?.usage)\n      })\n    );\n    this.unsubscribers.push(\n      traceSyncStreamChannel(genkitChannels.generateStream, {\n        name: \"genkit.generateStream\",\n        type: \"llm\" /* LLM */,\n        extractInput: ([input]) => extractGenerateInput(input),\n        patchResult: ({ result, span, startTime }) => patchGenerateStreamResult(result, span, startTime)\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(genkitChannels.embed, {\n        name: \"genkit.embed\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params]) => extractEmbedInput(params),\n        extractOutput: (result) => summarizeEmbeddingResult(result),\n        extractMetadata: (_result, event) => extractEmbedMetadata(event?.arguments?.[0]),\n        extractMetrics: () => ({})\n      })\n    );\n    this.unsubscribers.push(\n      traceAsyncChannel(genkitChannels.embedMany, {\n        name: \"genkit.embedMany\",\n        type: \"function\" /* FUNCTION */,\n        extractInput: ([params]) => extractEmbedManyInput(params),\n        extractOutput: summarizeEmbeddingResult,\n        extractMetadata: (_result, event) => extractEmbedMetadata(event?.arguments?.[0]),\n        extractMetrics: () => ({})\n      })\n    );\n    this.subscribeToActionRun();\n    this.subscribeToActionSpan();\n    this.subscribeToActionStream();\n  }\n  subscribeToActionRun() {\n    const tracingChannel = genkitChannels.actionRun.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const unbindCurrentSpanStore = bindActionCurrentSpanStoreToStart(\n      tracingChannel,\n      states,\n      (event) => startActionRunSpan(event)\n    );\n    const handlers = {\n      start: (event) => {\n        ensureActionSpanState(\n          states,\n          event,\n          () => startActionRunSpan(event)\n        );\n      },\n      asyncEnd: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        try {\n          state.span.log({\n            output: extractActionOutput(event.result),\n            metrics: durationMetrics(state.startTime)\n          });\n        } finally {\n          state.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        state.span.log({ error: event.error.message });\n        state.span.end();\n        states.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToActionSpan() {\n    const tracingChannel = genkitCoreChannels.actionSpan.tracingChannel();\n    const states = /* @__PURE__ */ new WeakMap();\n    const unbindCurrentSpanStore = bindActionCurrentSpanStoreToStart(\n      tracingChannel,\n      states,\n      (event) => startActionSpan(event)\n    );\n    const handlers = {\n      start: (event) => {\n        ensureActionSpanState(\n          states,\n          event,\n          () => startActionSpan(event)\n        );\n      },\n      asyncEnd: (event) => {\n        const state = states.get(event);\n        if (!state) {\n          return;\n        }\n        try {\n          state.span.log({\n            input: extractActionSpanInput(event.arguments),\n            output: extractActionOutput(event.result),\n            metrics: durationMetrics(state.startTime)\n          });\n        } finally {\n          state.span.end();\n          states.delete(event);\n        }\n      },\n      error: (event) => {\n        const state = states.get(event);\n        if (!state || !event.error) {\n          return;\n        }\n        state.span.log({ error: event.error.message });\n        state.span.end();\n        states.delete(event);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToActionStream() {\n    this.unsubscribers.push(\n      traceSyncStreamChannel(genkitChannels.actionStream, {\n        name: \"genkit.action.stream\",\n        type: \"task\" /* TASK */,\n        extractInput: ([input], event) => ({\n          input,\n          metadata: actionMetadataForLog(extractActionMetadata(event.self))\n        }),\n        patchResult: ({ result, span, startTime }) => patchActionStreamResult(result, span, startTime)\n      })\n    );\n  }\n};\nfunction startActionRunSpan(event) {\n  const metadata = extractActionMetadata(event.self);\n  const runStepName = !metadata && typeof event.arguments[0] === \"string\" ? event.arguments[0] : void 0;\n  return startActionSpanState({\n    input: runStepName ? event.arguments[1] : event.arguments[0],\n    metadata,\n    runStepName\n  });\n}\nfunction startActionSpan(event) {\n  const metadata = extractActionSpanMetadata(event.arguments);\n  if (!metadata) {\n    return void 0;\n  }\n  return startActionSpanState({\n    input: extractActionSpanInput(event.arguments),\n    metadata\n  });\n}\nfunction startActionSpanState(args) {\n  if (!shouldTraceAction(args.metadata, args.runStepName)) {\n    return void 0;\n  }\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: actionSpanName(args.metadata, args.runStepName),\n        spanAttributes: {\n          type: actionSpanType(args.metadata)\n        }\n      },\n      INSTRUMENTATION_NAMES.GENKIT\n    )\n  );\n  const startTime = getCurrentUnixTimestamp();\n  span.log({\n    input: args.input,\n    metadata: actionMetadataForLog(args.metadata, args.runStepName)\n  });\n  return { span, startTime };\n}\nfunction ensureActionSpanState(states, event, create) {\n  const existing = states.get(event);\n  if (existing) {\n    return existing;\n  }\n  const created = create();\n  if (created) {\n    states.set(event, created);\n  }\n  return created;\n}\nfunction bindActionCurrentSpanStoreToStart(tracingChannel, states, create) {\n  const state = _internalGetGlobalState();\n  const contextManager = state?.contextManager;\n  const startChannel = tracingChannel.start;\n  const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n  if (!startChannel?.bindStore || !currentSpanStore) {\n    return void 0;\n  }\n  startChannel.bindStore(currentSpanStore, (event) => {\n    const state2 = ensureActionSpanState(\n      states,\n      event,\n      () => create(event)\n    );\n    return state2 ? contextManager.wrapSpanForStore(state2.span) : currentSpanStore.getStore();\n  });\n  return () => {\n    startChannel.unbindStore?.(currentSpanStore);\n  };\n}\nfunction normalizeInput(input) {\n  if (typeof input === \"string\" || Array.isArray(input)) {\n    return { prompt: input };\n  }\n  return input;\n}\nfunction extractGenerateInput(input) {\n  const normalized = normalizeInput(input);\n  if (!isObject(normalized)) {\n    return {\n      input: void 0,\n      metadata: genkitProviderMetadata()\n    };\n  }\n  const options = normalized;\n  return {\n    input: processInputAttachments(\n      options.prompt ?? options.messages ?? options.system\n    ),\n    metadata: {\n      ...genkitProviderMetadata(),\n      ...pickDefined({\n        model: modelName(options.model),\n        temperature: configValue(options.config, \"temperature\"),\n        maxOutputTokens: configValue(options.config, \"maxOutputTokens\"),\n        max_output_tokens: configValue(options.config, \"max_output_tokens\")\n      })\n    }\n  };\n}\nfunction extractGenerateOutput(result) {\n  if (!isObject(result)) {\n    return result;\n  }\n  return pickDefined({\n    text: safeGet(result, \"text\"),\n    output: safeGet(result, \"output\"),\n    message: safeGet(result, \"message\"),\n    finishReason: safeGet(result, \"finishReason\"),\n    finishMessage: safeGet(result, \"finishMessage\")\n  });\n}\nfunction extractGenerateResponseMetadata(result, input) {\n  const normalized = input ? normalizeInput(input) : void 0;\n  const request = isObject(result?.request) ? result?.request : isObject(normalized) ? normalized : void 0;\n  return {\n    ...genkitProviderMetadata(),\n    ...pickDefined({\n      model: modelName(result?.model ?? request?.model),\n      finishReason: result?.finishReason,\n      finishMessage: result?.finishMessage\n    })\n  };\n}\nfunction extractEmbedInput(params) {\n  return {\n    input: processInputAttachments(params?.content),\n    metadata: extractEmbedMetadata(params)\n  };\n}\nfunction extractEmbedManyInput(params) {\n  return {\n    input: processInputAttachments(params?.content),\n    metadata: extractEmbedMetadata(params)\n  };\n}\nfunction extractEmbedMetadata(params) {\n  return {\n    ...genkitProviderMetadata(),\n    ...pickDefined({\n      model: modelName(params?.embedder)\n    })\n  };\n}\nfunction summarizeEmbeddingResult(result) {\n  if (Array.isArray(result)) {\n    return {\n      embedding_count: result.length,\n      dimensions: Array.isArray(result[0]) || Array.isArray(result[0]?.embedding) ? result[0].length || result[0]?.embedding?.length : void 0\n    };\n  }\n  if (isObject(result) && Array.isArray(result.embeddings)) {\n    return {\n      embedding_count: result.embeddings.length,\n      dimensions: Array.isArray(result.embeddings[0]) ? result.embeddings[0].length : void 0\n    };\n  }\n  return result;\n}\nfunction patchGenerateStreamResult(result, span, startTime) {\n  if (!isObject(result) || !isAsyncIterable(result.stream)) {\n    return false;\n  }\n  let firstChunkTime;\n  const finishSpan = createDeferredSpanFinalizer(span);\n  patchStreamIfNeeded(result.stream, {\n    onChunk: () => {\n      if (firstChunkTime === void 0) {\n        firstChunkTime = getCurrentUnixTimestamp();\n      }\n    },\n    onComplete: (chunks) => {\n      finishSpan(async () => {\n        const streamedText = chunks.map((chunk) => safeGet(chunk, \"text\")).join(\"\");\n        const response = await result.response;\n        const metrics = parseGenkitUsageMetrics(response?.usage);\n        if (firstChunkTime !== void 0) {\n          metrics.time_to_first_token = firstChunkTime - startTime;\n        }\n        span.log({\n          output: {\n            ...extractGenerateOutput(response),\n            streamedText\n          },\n          metadata: extractGenerateResponseMetadata(response, void 0),\n          metrics\n        });\n      });\n    },\n    onError: (error) => {\n      finishSpan(() => {\n        span.log({ error: error.message });\n      });\n    }\n  });\n  return true;\n}\nfunction patchActionStreamResult(result, span, startTime) {\n  if (!isObject(result) || !isAsyncIterable(result.stream)) {\n    return false;\n  }\n  const finishSpan = createDeferredSpanFinalizer(span);\n  patchStreamIfNeeded(result.stream, {\n    onComplete: (chunks) => {\n      finishSpan(async () => {\n        span.log({\n          output: {\n            chunks,\n            result: await result.output\n          },\n          metrics: durationMetrics(startTime)\n        });\n      });\n    },\n    onError: (error) => {\n      finishSpan(() => {\n        span.log({ error: error.message });\n      });\n    }\n  });\n  return true;\n}\nfunction createDeferredSpanFinalizer(span) {\n  let finished = false;\n  return (callback) => {\n    if (finished) {\n      return;\n    }\n    finished = true;\n    void (async () => {\n      try {\n        await callback();\n      } catch (error) {\n        span.log({ error: toLoggedError(error) });\n      } finally {\n        span.end();\n      }\n    })();\n  };\n}\nfunction parseGenkitUsageMetrics(usage) {\n  if (!isObject(usage)) {\n    return {};\n  }\n  return pickNumberMetrics({\n    tokens: usage.totalTokens,\n    prompt_tokens: usage.inputTokens,\n    completion_tokens: usage.outputTokens,\n    cached_tokens: usage.cachedContentTokens,\n    reasoning_tokens: usage.thoughtsTokens\n  });\n}\nfunction durationMetrics(startTime) {\n  const end = getCurrentUnixTimestamp();\n  return {\n    start: startTime,\n    end,\n    duration: end - startTime\n  };\n}\nfunction extractActionMetadata(self) {\n  if (!isObject(self) || !isObject(self.__action)) {\n    return void 0;\n  }\n  return self.__action;\n}\nfunction extractActionSpanMetadata(args) {\n  const options = extractRunInNewSpanOptions(args);\n  const labels = isObject(options?.labels) ? options.labels : void 0;\n  const metadata = isObject(options?.metadata) ? options.metadata : void 0;\n  const actionType = stringValue2(labels?.[\"genkit:metadata:subtype\"]);\n  const name = stringValue2(metadata?.name);\n  if (!actionType || !name) {\n    return void 0;\n  }\n  return {\n    actionType,\n    key: stringValue2(labels?.[\"genkit:key\"]),\n    name\n  };\n}\nfunction extractActionSpanInput(args) {\n  const options = extractRunInNewSpanOptions(args);\n  if (!isObject(options?.metadata)) {\n    return void 0;\n  }\n  return options.metadata.input;\n}\nfunction extractRunInNewSpanOptions(args) {\n  const options = args.length === 3 ? args[1] : args[0];\n  return isObject(options) ? options : void 0;\n}\nfunction shouldTraceAction(metadata, runStepName) {\n  if (runStepName) {\n    return true;\n  }\n  switch (metadata?.actionType) {\n    case \"model\":\n    case \"background-model\":\n    case \"embedder\":\n      return false;\n    default:\n      return Boolean(metadata);\n  }\n}\nfunction actionSpanName(metadata, runStepName) {\n  const actionType = metadata?.actionType;\n  const name = metadata?.name;\n  if (actionType && name) {\n    return `genkit.${actionType}: ${name}`;\n  }\n  if (name) {\n    return `genkit.action: ${name}`;\n  }\n  if (runStepName) {\n    return `genkit.run: ${runStepName}`;\n  }\n  return \"genkit.action\";\n}\nfunction actionSpanType(metadata) {\n  switch (metadata?.actionType) {\n    case \"tool\":\n    case \"tool.v2\":\n      return \"tool\" /* TOOL */;\n    case \"model\":\n    case \"embedder\":\n      return \"llm\" /* LLM */;\n    default:\n      return \"task\" /* TASK */;\n  }\n}\nfunction actionMetadataForLog(metadata, runStepName) {\n  return {\n    ...genkitProviderMetadata(),\n    ...pickDefined({\n      \"genkit.action_type\": metadata?.actionType,\n      \"genkit.action_name\": metadata?.name,\n      \"genkit.action_key\": metadata?.key,\n      \"genkit.run_name\": runStepName\n    })\n  };\n}\nfunction extractActionOutput(result) {\n  if (isObject(result) && \"result\" in result) {\n    return result.result;\n  }\n  return result;\n}\nfunction genkitProviderMetadata() {\n  return { provider: \"genkit\" };\n}\nfunction safeGet(value, key) {\n  if (!isObject(value)) {\n    return void 0;\n  }\n  try {\n    return value[key];\n  } catch {\n    return void 0;\n  }\n}\nfunction configValue(config, key) {\n  return isObject(config) ? config[key] : void 0;\n}\nfunction modelName(model) {\n  if (typeof model === \"string\") {\n    return model;\n  }\n  if (isObject(model)) {\n    const name = model.name ?? model.model;\n    return typeof name === \"string\" ? name : void 0;\n  }\n  return void 0;\n}\nfunction pickDefined(values) {\n  return Object.fromEntries(\n    Object.entries(values).filter(([, value]) => value !== void 0)\n  );\n}\nfunction pickNumberMetrics(values) {\n  return Object.fromEntries(\n    Object.entries(values).filter((entry) => {\n      const value = entry[1];\n      return typeof value === \"number\" && Number.isFinite(value);\n    })\n  );\n}\nfunction stringValue2(value) {\n  return typeof value === \"string\" ? value : void 0;\n}\n\n// src/instrumentation/plugins/github-copilot-channels.ts\nvar gitHubCopilotChannels = defineChannels(\n  \"@github/copilot-sdk\",\n  {\n    createSession: channel({\n      channelName: \"client.createSession\",\n      kind: \"async\"\n    }),\n    resumeSession: channel({\n      channelName: \"client.resumeSession\",\n      kind: \"async\"\n    }),\n    sendAndWait: channel({\n      channelName: \"session.sendAndWait\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.GITHUB_COPILOT }\n);\n\n// src/instrumentation/plugins/github-copilot-plugin.ts\nvar ROOT_AGENT_KEY = \"__root__\";\nfunction agentKey(agentId) {\n  return agentId ?? ROOT_AGENT_KEY;\n}\nfunction getStringProperty2(obj, key) {\n  if (!obj || typeof obj !== \"object\" || !(key in obj)) {\n    return void 0;\n  }\n  const value = Reflect.get(obj, key);\n  return typeof value === \"string\" ? value : void 0;\n}\nfunction extractMetricsFromUsage(usage) {\n  const rawMetrics = {\n    prompt_tokens: usage.inputTokens,\n    completion_tokens: usage.outputTokens,\n    ...extractAnthropicCacheTokens(\n      usage.cacheReadTokens,\n      usage.cacheWriteTokens\n    )\n  };\n  if (usage.reasoningTokens !== void 0) {\n    rawMetrics.completion_reasoning_tokens = usage.reasoningTokens;\n    rawMetrics.reasoning_tokens = usage.reasoningTokens;\n  }\n  const metrics = finalizeAnthropicTokens(rawMetrics);\n  const metadata = {\n    model: usage.model\n  };\n  if (usage.cost !== void 0) {\n    metadata[\"github_copilot.cost\"] = usage.cost;\n  }\n  if (usage.duration !== void 0) {\n    metadata[\"github_copilot.duration_ms\"] = usage.duration;\n  }\n  if (usage.ttftMs !== void 0) {\n    metadata[\"github_copilot.time_to_first_token_ms\"] = usage.ttftMs;\n  }\n  if (usage.interTokenLatencyMs !== void 0) {\n    metadata[\"github_copilot.intertoken_latency_ms\"] = usage.interTokenLatencyMs;\n  }\n  if (usage.apiCallId !== void 0) {\n    metadata[\"github_copilot.api_call_id\"] = usage.apiCallId;\n  }\n  if (usage.providerCallId !== void 0) {\n    metadata[\"github_copilot.provider_call_id\"] = usage.providerCallId;\n  }\n  if (usage.interactionId !== void 0) {\n    metadata[\"github_copilot.interaction_id\"] = usage.interactionId;\n  }\n  if (usage.initiator !== void 0) {\n    metadata[\"github_copilot.initiator\"] = usage.initiator;\n  }\n  if (usage.reasoningEffort !== void 0) {\n    metadata[\"github_copilot.reasoning_effort\"] = usage.reasoningEffort;\n  }\n  if (usage.copilotUsage !== void 0) {\n    metadata[\"github_copilot.copilot_usage\"] = usage.copilotUsage;\n  }\n  if (usage.quotaSnapshots !== void 0) {\n    metadata[\"github_copilot.quota_snapshots\"] = usage.quotaSnapshots;\n  }\n  return { metadata, metrics };\n}\nfunction makeSpanWithId(span) {\n  return { span, id: span.export() };\n}\nasync function getParentIdForAgent(state, agentId) {\n  if (agentId) {\n    const toolCallId = state.agentIdToToolCallId.get(agentId);\n    if (toolCallId) {\n      const subAgent = state.subAgents.get(toolCallId);\n      if (subAgent) {\n        return subAgent.id;\n      }\n    }\n  }\n  return state.session.id;\n}\nasync function getToolParentId(state, agentId) {\n  const turn = state.activeTurns.get(agentKey(agentId));\n  return turn ? turn.id : state.session.id;\n}\nasync function handleTurnStart(state, agentId) {\n  const key = agentKey(agentId);\n  if (state.activeTurns.has(key)) {\n    return;\n  }\n  const parentId = await getParentIdForAgent(state, agentId);\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: \"Copilot Turn\",\n        parent: parentId,\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.GITHUB_COPILOT\n    )\n  );\n  const pendingUserMessage = state.pendingUserMessages.get(key);\n  if (pendingUserMessage) {\n    span.log({ input: pendingUserMessage });\n    state.pendingUserMessages.delete(key);\n  }\n  state.activeTurns.set(key, makeSpanWithId(span));\n}\nfunction handleTurnEnd(state, agentId) {\n  const key = agentKey(agentId);\n  const turn = state.activeTurns.get(key);\n  if (!turn) {\n    return;\n  }\n  turn.span.end();\n  state.activeTurns.delete(key);\n  state.currentMessageContent.delete(key);\n}\nfunction handleAssistantMessage(state, agentId, content) {\n  state.currentMessageContent.set(agentKey(agentId), content);\n  const turn = state.activeTurns.get(agentKey(agentId));\n  if (turn) {\n    turn.span.log({ output: content });\n  }\n}\nasync function handleUsage(state, agentId, usage) {\n  const key = agentKey(agentId);\n  const turn = state.activeTurns.get(key);\n  const parentId = turn ? await turn.id : await state.session.id;\n  const content = state.currentMessageContent.get(key);\n  const { metrics, metadata } = extractMetricsFromUsage(usage);\n  const llmSpan = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: \"github.copilot.llm\",\n        parent: parentId,\n        spanAttributes: { type: \"llm\" /* LLM */ }\n      },\n      INSTRUMENTATION_NAMES.GITHUB_COPILOT\n    )\n  );\n  llmSpan.log({\n    output: content ?? void 0,\n    metadata,\n    metrics\n  });\n  llmSpan.end();\n  state.currentMessageContent.delete(key);\n  state.totalInputTokens += usage.inputTokens ?? 0;\n  state.totalOutputTokens += usage.outputTokens ?? 0;\n}\nfunction handleUserMessage(state, agentId, content) {\n  const key = agentKey(agentId);\n  const turn = state.activeTurns.get(key);\n  if (turn) {\n    turn.span.log({ input: content });\n  } else {\n    state.pendingUserMessages.set(key, content);\n  }\n}\nasync function handleToolStart(state, agentId, toolCallId, toolName, args, mcpServerName) {\n  if (state.activeTools.has(toolCallId)) {\n    return;\n  }\n  const parentId = await getToolParentId(state, agentId);\n  const displayName = mcpServerName ? `tool: ${mcpServerName}/${toolName}` : `tool: ${toolName}`;\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: displayName,\n        parent: parentId,\n        spanAttributes: { type: \"tool\" /* TOOL */ }\n      },\n      INSTRUMENTATION_NAMES.GITHUB_COPILOT\n    )\n  );\n  const metadata = {\n    \"gen_ai.tool.name\": toolName,\n    \"gen_ai.tool.call.id\": toolCallId\n  };\n  if (mcpServerName) {\n    metadata[\"mcp.server\"] = mcpServerName;\n  }\n  span.log({ input: args, metadata });\n  state.activeTools.set(toolCallId, makeSpanWithId(span));\n}\nfunction handleToolComplete(state, toolCallId, success, result, error) {\n  const tool = state.activeTools.get(toolCallId);\n  if (!tool) {\n    return;\n  }\n  try {\n    if (!success && error) {\n      tool.span.log({ error: error.message ?? \"tool execution failed\" });\n    } else {\n      tool.span.log({ output: result });\n    }\n  } finally {\n    tool.span.end();\n    state.activeTools.delete(toolCallId);\n  }\n}\nasync function handleSubagentStarted(state, agentId, toolCallId, agentDisplayName, agentDescription) {\n  if (state.subAgents.has(toolCallId)) {\n    return;\n  }\n  if (agentId) {\n    state.agentIdToToolCallId.set(agentId, toolCallId);\n  }\n  const tool = state.activeTools.get(toolCallId);\n  const parentId = tool ? await tool.id : await state.session.id;\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        name: `Agent: ${agentDisplayName}`,\n        parent: parentId,\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.GITHUB_COPILOT\n    )\n  );\n  span.log({\n    metadata: {\n      \"github_copilot.agent_name\": agentDisplayName,\n      \"github_copilot.agent_description\": agentDescription\n    }\n  });\n  state.subAgents.set(toolCallId, makeSpanWithId(span));\n}\nfunction handleSubagentCompleted(state, toolCallId, model, totalTokens, totalToolCalls, durationMs) {\n  const subAgent = state.subAgents.get(toolCallId);\n  if (!subAgent) {\n    return;\n  }\n  try {\n    const metadata = {};\n    if (model !== void 0) {\n      metadata[\"github_copilot.agent_model\"] = model;\n    }\n    if (totalTokens !== void 0) {\n      metadata[\"github_copilot.agent_total_tokens\"] = totalTokens;\n    }\n    if (totalToolCalls !== void 0) {\n      metadata[\"github_copilot.agent_tool_calls\"] = totalToolCalls;\n    }\n    if (durationMs !== void 0) {\n      metadata[\"github_copilot.agent_duration_ms\"] = durationMs;\n    }\n    subAgent.span.log({ metadata });\n  } finally {\n    subAgent.span.end();\n    state.subAgents.delete(toolCallId);\n  }\n}\nfunction handleSubagentFailed(state, toolCallId, error) {\n  const subAgent = state.subAgents.get(toolCallId);\n  if (!subAgent) {\n    return;\n  }\n  try {\n    subAgent.span.log({ error });\n  } finally {\n    subAgent.span.end();\n    state.subAgents.delete(toolCallId);\n  }\n}\nfunction handleSessionEnd(state, reason, error) {\n  try {\n    for (const tool of state.activeTools.values()) {\n      tool.span.end();\n    }\n    state.activeTools.clear();\n    for (const subAgent of state.subAgents.values()) {\n      subAgent.span.end();\n    }\n    state.subAgents.clear();\n    for (const turn of state.activeTurns.values()) {\n      turn.span.end();\n    }\n    state.activeTurns.clear();\n    state.agentIdToToolCallId.clear();\n    const sessionMetadata = {\n      \"github_copilot.end_reason\": reason\n    };\n    if (state.totalInputTokens > 0 || state.totalOutputTokens > 0) {\n      sessionMetadata[\"github_copilot.total_input_tokens\"] = state.totalInputTokens;\n      sessionMetadata[\"github_copilot.total_output_tokens\"] = state.totalOutputTokens;\n    }\n    if (error) {\n      state.session.span.log({ error, metadata: sessionMetadata });\n    } else {\n      state.session.span.log({ metadata: sessionMetadata });\n    }\n  } finally {\n    state.session.span.end();\n  }\n}\nasync function dispatchEvent(state, event) {\n  switch (event.type) {\n    case \"user.message\": {\n      const content = getStringProperty2(event.data, \"content\");\n      if (content !== void 0) {\n        handleUserMessage(state, event.agentId, content);\n      }\n      break;\n    }\n    case \"assistant.turn_start\": {\n      await handleTurnStart(state, event.agentId);\n      break;\n    }\n    case \"assistant.message\": {\n      const content = getStringProperty2(event.data, \"content\");\n      if (content !== void 0) {\n        handleAssistantMessage(state, event.agentId, content);\n      }\n      break;\n    }\n    case \"assistant.usage\": {\n      const usage = event.data;\n      if (usage && typeof usage === \"object\" && typeof usage.model === \"string\") {\n        await handleUsage(state, event.agentId, usage);\n      }\n      break;\n    }\n    case \"assistant.turn_end\": {\n      handleTurnEnd(state, event.agentId);\n      break;\n    }\n    case \"tool.execution_start\": {\n      const d = event.data;\n      if (d && typeof d.toolCallId === \"string\" && typeof d.toolName === \"string\") {\n        await handleToolStart(\n          state,\n          event.agentId,\n          d.toolCallId,\n          d.toolName,\n          d.arguments,\n          d.mcpServerName\n        );\n      }\n      break;\n    }\n    case \"tool.execution_complete\": {\n      const d = event.data;\n      if (d && typeof d.toolCallId === \"string\") {\n        handleToolComplete(\n          state,\n          d.toolCallId,\n          d.success ?? false,\n          d.result,\n          d.error\n        );\n      }\n      break;\n    }\n    case \"subagent.started\": {\n      const d = event.data;\n      if (d && typeof d.toolCallId === \"string\") {\n        await handleSubagentStarted(\n          state,\n          event.agentId,\n          d.toolCallId,\n          d.agentDisplayName ?? \"sub-agent\",\n          d.agentDescription ?? \"\"\n        );\n      }\n      break;\n    }\n    case \"subagent.completed\": {\n      const d = event.data;\n      if (d && typeof d.toolCallId === \"string\") {\n        handleSubagentCompleted(\n          state,\n          d.toolCallId,\n          d.model,\n          d.totalTokens,\n          d.totalToolCalls,\n          d.durationMs\n        );\n      }\n      break;\n    }\n    case \"subagent.failed\": {\n      const d = event.data;\n      if (d && typeof d.toolCallId === \"string\") {\n        handleSubagentFailed(\n          state,\n          d.toolCallId,\n          d.error ?? \"sub-agent failed\"\n        );\n      }\n      break;\n    }\n    case \"session.usage_info\": {\n      const d = event.data;\n      if (d && typeof d.currentTokens === \"number\") {\n        state.session.span.log({\n          metadata: {\n            \"github_copilot.context_window.limit\": d.tokenLimit,\n            \"github_copilot.context_window.current\": d.currentTokens,\n            \"github_copilot.context_window.messages\": d.messagesLength\n          }\n        });\n      }\n      break;\n    }\n  }\n}\nfunction injectTracingHooks2(config, state) {\n  const existingHooks = config.hooks ?? {};\n  const onSessionEnd = async (input, invocation) => {\n    try {\n      await existingHooks.onSessionEnd?.(input, invocation);\n    } finally {\n      handleSessionEnd(state, input.reason, input.error);\n      state.unsubscribeEvents?.();\n    }\n  };\n  config.hooks = {\n    ...existingHooks,\n    onSessionEnd\n  };\n}\nfunction attachSessionEventListener(session, state) {\n  const handler = (event) => {\n    state.processing = state.processing.then(() => dispatchEvent(state, event)).catch((err) => {\n      console.error(\n        \"[Braintrust] Error processing GitHub Copilot SDK event:\",\n        err\n      );\n    });\n  };\n  state.unsubscribeEvents = session.on(\n    handler\n  );\n}\nfunction isGitHubCopilotSession(value) {\n  return value !== null && typeof value === \"object\" && typeof value.on === \"function\";\n}\nfunction makeSessionHandlers(sessionStates, configArgIndex, includeProviderMetadata) {\n  return {\n    start: (event) => {\n      const config = event.arguments[configArgIndex];\n      if (!config || typeof config !== \"object\") {\n        return;\n      }\n      const sessionSpan = startSpan(\n        withSpanInstrumentationName(\n          {\n            name: \"Copilot Session\",\n            spanAttributes: { type: \"task\" /* TASK */ }\n          },\n          INSTRUMENTATION_NAMES.GITHUB_COPILOT\n        )\n      );\n      const metadata = {};\n      if (config.model) {\n        metadata[\"github_copilot.model\"] = config.model;\n      }\n      if (includeProviderMetadata && config.provider?.type) {\n        metadata[\"github_copilot.provider_type\"] = config.provider.type;\n      }\n      if (Object.keys(metadata).length > 0) {\n        sessionSpan.log({ metadata });\n      }\n      const state = {\n        session: makeSpanWithId(sessionSpan),\n        activeTurns: /* @__PURE__ */ new Map(),\n        pendingUserMessages: /* @__PURE__ */ new Map(),\n        currentMessageContent: /* @__PURE__ */ new Map(),\n        activeTools: /* @__PURE__ */ new Map(),\n        subAgents: /* @__PURE__ */ new Map(),\n        agentIdToToolCallId: /* @__PURE__ */ new Map(),\n        processing: Promise.resolve(),\n        totalInputTokens: 0,\n        totalOutputTokens: 0\n      };\n      injectTracingHooks2(config, state);\n      sessionStates.set(event, state);\n    },\n    asyncEnd: (event) => {\n      const state = sessionStates.get(event);\n      if (!state) {\n        return;\n      }\n      const session = event.result;\n      if (isGitHubCopilotSession(session)) {\n        attachSessionEventListener(session, state);\n      } else {\n        state.session.span.end();\n      }\n      sessionStates.delete(event);\n    },\n    error: (event) => {\n      const state = sessionStates.get(event);\n      if (!state || !event.error) {\n        return;\n      }\n      state.session.span.log({ error: event.error.message });\n      state.session.span.end();\n      sessionStates.delete(event);\n    }\n  };\n}\nvar GitHubCopilotPlugin = class extends BasePlugin {\n  onEnable() {\n    this.subscribeToSessionChannels();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n  }\n  subscribeToSessionChannels() {\n    const createChannel = gitHubCopilotChannels.createSession.tracingChannel();\n    const resumeChannel = gitHubCopilotChannels.resumeSession.tracingChannel();\n    const sessionStates = /* @__PURE__ */ new WeakMap();\n    const createHandlers = makeSessionHandlers(\n      sessionStates,\n      0,\n      // config is arg 0 of createSession(config)\n      true\n      // include provider metadata\n    );\n    const resumeHandlers = makeSessionHandlers(\n      sessionStates,\n      1,\n      // config is arg 1 of resumeSession(sessionId, config)\n      false\n      // resumeSession config has no provider field\n    );\n    createChannel.subscribe(createHandlers);\n    resumeChannel.subscribe(resumeHandlers);\n    this.unsubscribers.push(\n      () => createChannel.unsubscribe(createHandlers),\n      () => resumeChannel.unsubscribe(resumeHandlers)\n    );\n  }\n};\n\n// src/instrumentation/plugins/flue-channels.ts\nvar flueChannels = defineChannels(\n  \"@flue/runtime\",\n  {\n    createContext: channel({\n      channelName: \"createFlueContext\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.FLUE }\n);\n\n// src/instrumentation/plugins/flue-plugin.ts\nvar FLUE_AUTO_STATE = /* @__PURE__ */ Symbol.for(\"braintrust.flue.auto-state\");\nvar FLUE_INSTRUMENTATION_KEY = /* @__PURE__ */ Symbol.for(\"braintrust.flue.instrumentation\");\nvar FLUE_OBSERVE_BRIDGE = /* @__PURE__ */ Symbol.for(\"braintrust.flue.observe-bridge\");\nfunction observeFlue(event, ctx) {\n  getObserveBridge().handle(event, ctx);\n}\nvar interceptFlueExecution = (operation, ctx, next) => getObserveBridge().intercept(operation, ctx, next);\nfunction braintrustFlueInstrumentation() {\n  return {\n    dispose() {\n    },\n    interceptor: interceptFlueExecution,\n    key: FLUE_INSTRUMENTATION_KEY,\n    observe: observeFlue\n  };\n}\nvar braintrustFlueObserver = Object.assign(\n  observeFlue,\n  braintrustFlueInstrumentation()\n);\nvar FluePlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(enableFlueAutoInstrumentation());\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n  }\n};\nfunction enableFlueAutoInstrumentation() {\n  const state = getAutoState();\n  state.refCount += 1;\n  if (!state.createContextHandlers) {\n    const createContextChannel = flueChannels.createContext.tracingChannel();\n    const handlers = {\n      end: (event) => {\n        subscribeToFlueContext(event.result, state);\n      }\n    };\n    createContextChannel.subscribe(handlers);\n    state.createContextChannel = createContextChannel;\n    state.createContextHandlers = handlers;\n  }\n  let released = false;\n  return () => {\n    if (released) {\n      return;\n    }\n    released = true;\n    releaseAutoState(state);\n  };\n}\nfunction getAutoState() {\n  const existing = Reflect.get(globalThis, FLUE_AUTO_STATE);\n  if (isAutoState(existing)) {\n    return existing;\n  }\n  const state = {\n    contexts: /* @__PURE__ */ new WeakSet(),\n    refCount: 0\n  };\n  Reflect.set(globalThis, FLUE_AUTO_STATE, state);\n  return state;\n}\nfunction getObserveBridge() {\n  const existing = Reflect.get(globalThis, FLUE_OBSERVE_BRIDGE);\n  if (isFlueObserveBridge(existing)) {\n    return existing;\n  }\n  const bridge = new FlueObserveBridge();\n  Reflect.set(globalThis, FLUE_OBSERVE_BRIDGE, bridge);\n  return bridge;\n}\nfunction isFlueObserveBridge(value) {\n  return isObjectLike(value) && typeof Reflect.get(value, \"handle\") === \"function\" && typeof Reflect.get(value, \"reset\") === \"function\";\n}\nfunction isAutoState(value) {\n  return isObjectLike(value) && Reflect.get(value, \"contexts\") instanceof WeakSet && typeof Reflect.get(value, \"refCount\") === \"number\";\n}\nfunction releaseAutoState(state) {\n  state.refCount -= 1;\n  if (state.refCount > 0) {\n    return;\n  }\n  try {\n    if (state.createContextChannel && state.createContextHandlers) {\n      state.createContextChannel.unsubscribe(state.createContextHandlers);\n    }\n  } finally {\n    Reflect.deleteProperty(globalThis, FLUE_AUTO_STATE);\n  }\n}\nfunction subscribeToFlueContext(value, state) {\n  if (!isObservableFlueContext(value) || state.contexts.has(value)) {\n    return;\n  }\n  const ctx = flueContextFromUnknown(value);\n  let released = false;\n  let unsubscribe;\n  const release = () => {\n    if (released) {\n      return;\n    }\n    released = true;\n    try {\n      unsubscribe?.();\n    } catch (error) {\n      logInstrumentationError4(\"Flue context unsubscribe\", error);\n    }\n  };\n  try {\n    unsubscribe = value.subscribeEvent((event) => {\n      if (state.refCount <= 0) {\n        release();\n        return;\n      }\n      braintrustFlueObserver(event, ctx);\n      if (isAutoContextTerminalEvent(event, ctx)) {\n        release();\n      }\n    });\n    state.contexts.add(value);\n  } catch (error) {\n    logInstrumentationError4(\"Flue context subscription\", error);\n  }\n}\nfunction isAutoContextTerminalEvent(event, ctx) {\n  if (!isObjectLike(event)) {\n    return false;\n  }\n  const type = Reflect.get(event, \"type\");\n  if (type === \"run_end\") {\n    return true;\n  }\n  if (type !== \"operation\") {\n    return false;\n  }\n  return !ctx?.runId && typeof Reflect.get(event, \"runId\") !== \"string\";\n}\nfunction isObservableFlueContext(value) {\n  return isObjectLike(value) && typeof Reflect.get(value, \"subscribeEvent\") === \"function\";\n}\nfunction isFlueEvent(event) {\n  const type = Reflect.get(event, \"type\");\n  return type === \"run_start\" || type === \"run_resume\" || type === \"run_end\" || type === \"operation_start\" || type === \"operation\" || type === \"turn_request\" || type === \"turn\" || type === \"tool_start\" || type === \"tool_call\" || type === \"tool\" || type === \"task_start\" || type === \"task\" || type === \"compaction_start\" || type === \"compaction\";\n}\nfunction flueContextFromUnknown(ctx) {\n  if (!isObjectLike(ctx)) {\n    return void 0;\n  }\n  const id = Reflect.get(ctx, \"id\");\n  const runId = Reflect.get(ctx, \"runId\");\n  return {\n    ...typeof id === \"string\" ? { id } : {},\n    ...typeof runId === \"string\" ? { runId } : {}\n  };\n}\nfunction isObjectLike(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nvar FlueObserveBridge = class {\n  compactionsByKey = /* @__PURE__ */ new Map();\n  operationsById = /* @__PURE__ */ new Map();\n  runsById = /* @__PURE__ */ new Map();\n  seenEvents = /* @__PURE__ */ new WeakSet();\n  tasksById = /* @__PURE__ */ new Map();\n  toolsByKey = /* @__PURE__ */ new Map();\n  turnsByKey = /* @__PURE__ */ new Map();\n  handle(event, ctx) {\n    if (!isObjectLike(event) || !isFlueEvent(event)) {\n      return;\n    }\n    if (this.seenEvents.has(event)) {\n      return;\n    }\n    this.seenEvents.add(event);\n    try {\n      this.handleEvent(event, flueContextFromUnknown(ctx));\n    } catch (error) {\n      logInstrumentationError4(\"Flue observe\", error);\n    }\n  }\n  reset() {\n    this.compactionsByKey.clear();\n    this.operationsById.clear();\n    this.runsById.clear();\n    this.seenEvents = /* @__PURE__ */ new WeakSet();\n    this.tasksById.clear();\n    this.toolsByKey.clear();\n    this.turnsByKey.clear();\n  }\n  intercept(operation, executionContext, next) {\n    let span;\n    try {\n      span = this.spanForExecutionOperation(operation, executionContext);\n    } catch (error) {\n      logInstrumentationError4(\"Flue execution interceptor\", error);\n    }\n    return span ? runWithCurrentSpanStore(span, next) : next();\n  }\n  spanForExecutionOperation(operation, executionContext) {\n    switch (operation.type) {\n      case \"workflow\":\n        return this.ensureWorkflowSpanForExecution(operation, executionContext);\n      case \"agent\":\n        return this.operationsById.get(operation.operationId)?.span;\n      case \"model\":\n        return this.turnsByKey.get(operation.turnId)?.span;\n      case \"tool\":\n        return this.spanForToolExecution(operation, executionContext);\n      case \"task\":\n        return this.tasksById.get(operation.taskId)?.span;\n      default:\n        return void 0;\n    }\n  }\n  ensureWorkflowSpanForExecution(operation, executionContext) {\n    const existing = this.runsById.get(operation.runId);\n    if (existing) {\n      return existing.span;\n    }\n    const ctx = flueContextFromUnknown(executionContext.eventContext) ?? flueContextFromUnknown({\n      id: operation.workflowName,\n      runId: operation.runId\n    });\n    if (operation.phase === \"resume\") {\n      this.handleRunResume(\n        {\n          eventIndex: 0,\n          runId: operation.runId,\n          startedAt: operation.startedAt,\n          timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n          type: \"run_resume\",\n          v: 3,\n          workflowName: operation.workflowName\n        },\n        ctx\n      );\n    } else {\n      this.handleRunStart(\n        {\n          eventIndex: 0,\n          input: void 0,\n          runId: operation.runId,\n          startedAt: operation.startedAt,\n          timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n          type: \"run_start\",\n          v: 3,\n          workflowName: operation.workflowName\n        },\n        ctx\n      );\n    }\n    return this.runsById.get(operation.runId)?.span;\n  }\n  spanForToolExecution(operation, executionContext) {\n    const contextual = this.toolsByKey.get(\n      toolKey({ ...executionContext, toolCallId: operation.toolCallId })\n    );\n    if (contextual) {\n      return contextual.span;\n    }\n    let fallback2;\n    for (const state of this.toolsByKey.values()) {\n      if (state.metadata[\"flue.tool_call_id\"] !== operation.toolCallId) {\n        continue;\n      }\n      if (state.metadata[\"flue.tool_name\"] === operation.toolName) {\n        return state.span;\n      }\n      fallback2 ??= state.span;\n    }\n    return fallback2;\n  }\n  handleEvent(event, ctx) {\n    switch (event.type) {\n      case \"run_start\":\n        this.handleRunStart(event, ctx);\n        return;\n      case \"run_resume\":\n        this.handleRunResume(event, ctx);\n        return;\n      case \"run_end\":\n        this.handleRunEnd(event);\n        return;\n      case \"operation_start\":\n        this.handleOperationStart(event);\n        return;\n      case \"operation\":\n        this.handleOperation(event);\n        return;\n      case \"turn_request\":\n        this.handleTurnRequest(event);\n        return;\n      case \"turn\":\n        this.handleTurn(event);\n        return;\n      case \"tool_start\":\n        this.handleToolStart(event);\n        return;\n      case \"tool_call\":\n      case \"tool\":\n        this.handleToolCall(event);\n        return;\n      case \"task_start\":\n        this.handleTaskStart(event);\n        return;\n      case \"task\":\n        this.handleTask(event);\n        return;\n      case \"compaction_start\":\n        this.handleCompactionStart(event);\n        return;\n      case \"compaction\":\n        this.handleCompaction(event);\n        return;\n      default:\n        return;\n    }\n  }\n  handleRunStart(event, ctx) {\n    if (!event.runId) {\n      return;\n    }\n    const workflowName = event.workflowName ?? event.owner?.workflowName ?? (typeof ctx?.id === \"string\" ? ctx.id : \"unknown\");\n    const input = flueRunInput(event);\n    const metadata = {\n      ...extractPayloadMetadata(input),\n      ...extractEventMetadata(event, ctx),\n      ...workflowName ? { \"flue.workflow_name\": workflowName } : {},\n      provider: \"flue\"\n    };\n    const existing = this.runsById.get(event.runId);\n    if (existing) {\n      existing.metadata = metadata;\n      safeLog3(existing.span, { input, metadata });\n      return;\n    }\n    const span = startSpan(\n      withSpanInstrumentationName(\n        {\n          name: `workflow:${workflowName}`,\n          spanAttributes: { type: \"task\" /* TASK */ },\n          startTime: eventTime(event.startedAt ?? event.timestamp),\n          event: {\n            input,\n            metadata\n          }\n        },\n        INSTRUMENTATION_NAMES.FLUE\n      )\n    );\n    this.runsById.set(event.runId, { metadata, span });\n  }\n  handleRunResume(event, ctx) {\n    if (!event.runId) {\n      return;\n    }\n    const workflowName = event.workflowName ?? (typeof ctx?.id === \"string\" ? ctx.id : \"unknown\");\n    const metadata = {\n      ...extractEventMetadata(event, ctx),\n      ...workflowName ? { \"flue.workflow_name\": workflowName } : {},\n      \"flue.workflow_phase\": \"resume\",\n      provider: \"flue\"\n    };\n    const existing = this.runsById.get(event.runId);\n    if (existing) {\n      existing.metadata = metadata;\n      safeLog3(existing.span, { metadata });\n      return;\n    }\n    const span = startSpan(\n      withSpanInstrumentationName(\n        {\n          name: `workflow:${workflowName}`,\n          spanAttributes: { type: \"task\" /* TASK */ },\n          startTime: eventTime(event.startedAt ?? event.timestamp),\n          event: { metadata }\n        },\n        INSTRUMENTATION_NAMES.FLUE\n      )\n    );\n    this.runsById.set(event.runId, { metadata, span });\n  }\n  handleRunEnd(event) {\n    const state = this.runsById.get(event.runId);\n    this.finishPendingSpansForRun(event);\n    if (state) {\n      safeLog3(state.span, {\n        ...event.isError ? { error: toLoggedError(event.error) } : {},\n        metadata: {\n          ...extractEventMetadata(event),\n          ...event.isError !== void 0 ? { \"flue.is_error\": event.isError } : {}\n        },\n        metrics: durationMetrics2(event.durationMs),\n        output: event.result\n      });\n      safeEnd(state.span, eventTime(event.timestamp));\n      this.runsById.delete(event.runId);\n    }\n    void flush().catch((error) => {\n      logInstrumentationError4(\"Flue flush\", error);\n    });\n  }\n  handleOperationStart(event) {\n    if (!event.operationId || !isInstrumentedOperation(event.operationKind)) {\n      return;\n    }\n    const metadata = {\n      ...event.runId ? this.runsById.get(event.runId)?.metadata : {},\n      ...extractEventMetadata(event),\n      \"flue.operation\": event.operationKind,\n      provider: \"flue\"\n    };\n    const parent = this.parentSpanForEvent(event);\n    const args = {\n      name: `flue.${event.operationKind}`,\n      spanAttributes: { type: \"task\" /* TASK */ },\n      startTime: eventTime(event.timestamp),\n      event: { metadata }\n    };\n    const runSpan = event.runId ? this.runsById.get(event.runId)?.span : void 0;\n    const span = event.operationKind === \"prompt\" && (!parent || parent === runSpan) ? startFlueRootSpan(args) : startFlueSpan(parent, args);\n    this.operationsById.set(event.operationId, { metadata, span });\n  }\n  handleOperation(event) {\n    if (!isInstrumentedOperation(event.operationKind)) {\n      return;\n    }\n    const state = this.operationsById.get(event.operationId) ?? this.startSyntheticOperation(event);\n    const output = operationOutput(event) ?? outputFromAgentTurn(state.latestAgentOutput);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.isError !== void 0 ? { \"flue.is_error\": event.isError } : {},\n      ...event.usage ? { \"flue.usage\": event.usage } : {}\n    };\n    const input = flueOperationInput(event);\n    if (!state.loggedInput && input !== void 0) {\n      safeLog3(state.span, { input });\n      state.loggedInput = true;\n    }\n    this.finishPendingChildrenForOperation(event, output);\n    safeLog3(state.span, {\n      ...event.isError ? { error: toLoggedError(event.errorInfo ?? event.error) } : {},\n      metadata,\n      metrics: durationMetrics2(event.durationMs),\n      output\n    });\n    safeEnd(state.span, eventTime(event.timestamp));\n    this.operationsById.delete(event.operationId);\n  }\n  handleTurnRequest(event) {\n    const key = turnKey(event);\n    if (!key) {\n      return;\n    }\n    const input = flueTurnRequestInput(event);\n    const operation = event.operationId ? this.operationsById.get(event.operationId) : void 0;\n    const turnInput = prepareFlueTurnInput(event, input, operation);\n    const model = flueTurnRequestModel(event);\n    const provider = flueTurnRequestProvider(event);\n    const api = flueTurnRequestApi(event);\n    const reasoning = flueTurnRequestReasoning(event);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...api ? { \"flue.api\": api } : {},\n      ...model ? { model, \"flue.model\": model } : {},\n      ...provider ? { provider } : { provider: \"flue\" },\n      ...provider ? { \"flue.provider\": provider } : {},\n      ...event.purpose ? { \"flue.turn_purpose\": event.purpose } : {},\n      ...reasoning ? { reasoning } : {}\n    };\n    const parent = this.parentSpanForTurn(event);\n    const span = startFlueSpan(parent, {\n      name: \"flue.turn\",\n      spanAttributes: { type: \"llm\" /* LLM */ },\n      startTime: eventTime(event.timestamp),\n      event: {\n        input: turnInput.messages,\n        metadata: { ...metadata, ...turnInput.metadata }\n      }\n    });\n    this.logOperationInput(\n      event.operationId,\n      latestUserMessageInput(input?.messages)\n    );\n    this.turnsByKey.set(key, { metadata, span });\n  }\n  handleTurn(event) {\n    const key = turnKey(event);\n    if (!key) {\n      return;\n    }\n    const state = this.turnsByKey.get(key) ?? this.startSyntheticTurn(event);\n    const model = flueTurnModel(event);\n    const provider = flueTurnProvider(event);\n    const api = flueTurnApi(event);\n    const stopReason = flueTurnStopReason(event);\n    const usage = flueTurnUsage(event);\n    const output = flueTurnOutput(event);\n    const error = flueTurnError(event);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...api ? { \"flue.api\": api } : {},\n      ...model ? { model, \"flue.model\": model } : {},\n      ...provider ? { provider } : {},\n      ...provider ? { \"flue.provider\": provider } : {},\n      ...event.purpose ? { \"flue.turn_purpose\": event.purpose } : {},\n      ...stopReason ? { \"flue.stop_reason\": stopReason } : {},\n      ...event.isError !== void 0 ? { \"flue.is_error\": event.isError } : {}\n    };\n    safeLog3(state.span, {\n      ...event.isError ? { error: toLoggedError(error) } : {},\n      metadata,\n      metrics: {\n        ...durationMetrics2(event.durationMs),\n        ...metricsFromUsage(usage)\n      },\n      output\n    });\n    if (event.purpose === \"agent\" && event.operationId) {\n      const operation = this.operationsById.get(event.operationId);\n      if (operation) {\n        operation.latestAgentOutput = output;\n      }\n    }\n    safeEnd(state.span, eventTime(event.timestamp));\n    this.turnsByKey.delete(key);\n  }\n  handleToolStart(event) {\n    if (!event.toolCallId) {\n      return;\n    }\n    const input = flueToolInput(event);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.toolName ? { \"flue.tool_name\": event.toolName } : {},\n      \"flue.tool_call_id\": event.toolCallId,\n      provider: \"flue\"\n    };\n    const parent = this.parentSpanForTool(event);\n    const span = startFlueSpan(parent, {\n      name: `tool:${event.toolName ?? \"unknown\"}`,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      startTime: eventTime(event.timestamp),\n      event: {\n        input,\n        metadata\n      }\n    });\n    this.toolsByKey.set(toolKey(event), { metadata, span });\n  }\n  handleToolCall(event) {\n    if (!event.toolCallId) {\n      return;\n    }\n    const key = toolKey(event);\n    const state = this.toolsByKey.get(key) ?? this.startSyntheticTool(event);\n    const output = flueToolOutput(event);\n    const error = flueToolError(event);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.toolName ? { \"flue.tool_name\": event.toolName } : {},\n      \"flue.tool_call_id\": event.toolCallId,\n      ...event.isError !== void 0 ? { \"flue.is_error\": event.isError } : {}\n    };\n    safeLog3(state.span, {\n      ...event.isError ? { error: toLoggedError(error) } : {},\n      metadata,\n      metrics: durationMetrics2(event.durationMs),\n      output\n    });\n    safeEnd(state.span, eventTime(event.timestamp));\n    this.toolsByKey.delete(key);\n  }\n  handleTaskStart(event) {\n    if (!event.taskId) {\n      return;\n    }\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.agent ? { \"flue.agent\": event.agent } : {},\n      ...event.cwd ? { \"flue.cwd\": event.cwd } : {},\n      \"flue.task_id\": event.taskId,\n      provider: \"flue\"\n    };\n    const parent = this.parentSpanForEvent(event);\n    const span = startFlueSpan(parent, {\n      name: event.agent ? `task:${event.agent}` : \"flue.task\",\n      spanAttributes: { type: \"task\" /* TASK */ },\n      startTime: eventTime(event.timestamp),\n      event: {\n        input: event.prompt,\n        metadata\n      }\n    });\n    this.tasksById.set(event.taskId, { metadata, span });\n  }\n  handleTask(event) {\n    const state = this.tasksById.get(event.taskId);\n    if (!state) {\n      return;\n    }\n    safeLog3(state.span, {\n      ...event.isError ? { error: toLoggedError(event.errorInfo ?? event.result) } : {},\n      metadata: {\n        ...extractEventMetadata(event),\n        ...event.agent ? { \"flue.agent\": event.agent } : {},\n        ...event.isError !== void 0 ? { \"flue.is_error\": event.isError } : {}\n      },\n      metrics: durationMetrics2(event.durationMs),\n      output: event.result\n    });\n    safeEnd(state.span, eventTime(event.timestamp));\n    this.tasksById.delete(event.taskId);\n  }\n  handleCompactionStart(event) {\n    const key = compactionKey(event);\n    const input = {\n      ...event.estimatedTokens !== void 0 ? { estimatedTokens: event.estimatedTokens } : {},\n      ...event.reason ? { reason: event.reason } : {}\n    };\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.reason ? { \"flue.compaction_reason\": event.reason } : {},\n      provider: \"flue\"\n    };\n    const parent = this.parentSpanForEvent(event);\n    const span = startFlueSpan(parent, {\n      name: `compaction:${event.reason ?? \"unknown\"}`,\n      spanAttributes: { type: \"task\" /* TASK */ },\n      startTime: eventTime(event.timestamp),\n      event: {\n        input,\n        metadata\n      }\n    });\n    this.logOperationInput(event.operationId, input);\n    this.compactionsByKey.set(key, { metadata, span });\n  }\n  handleCompaction(event) {\n    const key = compactionKey(event);\n    const state = this.compactionsByKey.get(key) ?? this.startSyntheticCompaction(event);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.usage ? { \"flue.usage\": event.usage } : {}\n    };\n    safeLog3(state.span, {\n      ...event.isError ? { error: toLoggedError(event.errorInfo ?? event.error) } : {},\n      metadata,\n      metrics: {\n        ...durationMetrics2(event.durationMs),\n        ...typeof event.messagesBefore === \"number\" ? { messages_before: event.messagesBefore } : {},\n        ...typeof event.messagesAfter === \"number\" ? { messages_after: event.messagesAfter } : {}\n      },\n      output: {\n        messagesAfter: event.messagesAfter,\n        messagesBefore: event.messagesBefore\n      }\n    });\n    safeEnd(state.span, eventTime(event.timestamp));\n    this.compactionsByKey.delete(key);\n  }\n  parentSpanForTurn(event) {\n    if (event.purpose === \"compaction\" || event.purpose === \"compaction_prefix\") {\n      const compaction = this.compactionsByKey.get(compactionKey(event));\n      if (compaction) {\n        return compaction.span;\n      }\n    }\n    return this.parentSpanForEvent(event);\n  }\n  parentSpanForEvent(event) {\n    const turn = turnKey(event);\n    if (turn) {\n      const turnState = this.turnsByKey.get(turn);\n      if (turnState) {\n        return turnState.span;\n      }\n    }\n    if (event.taskId) {\n      const task = this.tasksById.get(event.taskId);\n      if (task) {\n        return task.span;\n      }\n    }\n    if (event.operationId) {\n      const operation = this.operationsById.get(event.operationId);\n      if (operation) {\n        return operation.span;\n      }\n    }\n    if (event.runId) {\n      return this.runsById.get(event.runId)?.span;\n    }\n    return void 0;\n  }\n  parentSpanForTool(event) {\n    if (event.taskId) {\n      const task = this.tasksById.get(event.taskId);\n      if (task) {\n        return task.span;\n      }\n    }\n    if (event.operationId) {\n      const operation = this.operationsById.get(event.operationId);\n      if (operation) {\n        return operation.span;\n      }\n    }\n    if (event.runId) {\n      return this.runsById.get(event.runId)?.span;\n    }\n    return void 0;\n  }\n  logOperationInput(operationId, input) {\n    if (!operationId || input === void 0) {\n      return;\n    }\n    const operation = this.operationsById.get(operationId);\n    if (!operation || operation.loggedInput) {\n      return;\n    }\n    safeLog3(operation.span, { input });\n    operation.loggedInput = true;\n  }\n  startSyntheticOperation(event) {\n    const metadata = {\n      ...event.runId ? this.runsById.get(event.runId)?.metadata : {},\n      ...extractEventMetadata(event),\n      \"flue.operation\": event.operationKind,\n      provider: \"flue\"\n    };\n    const args = {\n      name: `flue.${event.operationKind}`,\n      spanAttributes: { type: \"task\" /* TASK */ },\n      startTime: eventTime(event.timestamp),\n      event: { metadata }\n    };\n    const parent = this.parentSpanForEvent(event);\n    const runSpan = event.runId ? this.runsById.get(event.runId)?.span : void 0;\n    const span = event.operationKind === \"prompt\" && (!parent || parent === runSpan) ? startFlueRootSpan(args) : startFlueSpan(parent, args);\n    return { metadata, span };\n  }\n  startSyntheticTurn(event) {\n    const model = flueTurnModel(event);\n    const provider = flueTurnProvider(event);\n    const api = flueTurnApi(event);\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...api ? { \"flue.api\": api } : {},\n      ...model ? { model, \"flue.model\": model } : {},\n      ...provider ? { provider } : { provider: \"flue\" },\n      ...provider ? { \"flue.provider\": provider } : {},\n      ...event.purpose ? { \"flue.turn_purpose\": event.purpose } : {}\n    };\n    const span = startFlueSpan(this.parentSpanForEvent(event), {\n      name: \"flue.turn\",\n      spanAttributes: { type: \"llm\" /* LLM */ },\n      startTime: eventTime(event.timestamp),\n      event: { metadata }\n    });\n    return { metadata, span };\n  }\n  startSyntheticTool(event) {\n    const metadata = {\n      ...extractEventMetadata(event),\n      ...event.toolName ? { \"flue.tool_name\": event.toolName } : {},\n      \"flue.tool_call_id\": event.toolCallId,\n      provider: \"flue\"\n    };\n    const span = startFlueSpan(this.parentSpanForTool(event), {\n      name: `tool:${event.toolName ?? \"unknown\"}`,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      startTime: eventTime(event.timestamp),\n      event: { metadata }\n    });\n    return { metadata, span };\n  }\n  startSyntheticCompaction(event) {\n    const metadata = {\n      ...extractEventMetadata(event),\n      provider: \"flue\"\n    };\n    const span = startFlueSpan(this.parentSpanForEvent(event), {\n      name: \"compaction:unknown\",\n      spanAttributes: { type: \"task\" /* TASK */ },\n      startTime: eventTime(event.timestamp),\n      event: { metadata }\n    });\n    return { metadata, span };\n  }\n  finishPendingChildrenForOperation(event, operationOutput2) {\n    const endTime = eventTime(event.timestamp);\n    const usage = event.usage ?? usageFromOperationResult(event.result);\n    const turnEntries = [...this.turnsByKey].filter(\n      ([, state]) => stateMatchesOperation(state, event.operationId)\n    );\n    turnEntries.forEach(([key, state], index) => {\n      const shouldLogOperationOutput = (event.operationKind === \"prompt\" || event.operationKind === \"skill\") && index === turnEntries.length - 1 && operationOutput2 !== void 0;\n      safeLog3(state.span, {\n        metrics: metricsFromUsage(usage),\n        ...shouldLogOperationOutput ? { output: operationOutput2 } : {}\n      });\n      safeEnd(state.span, endTime);\n      this.turnsByKey.delete(key);\n    });\n    for (const [key, state] of this.toolsByKey) {\n      if (!stateMatchesOperation(state, event.operationId)) {\n        continue;\n      }\n      safeEnd(state.span, endTime);\n      this.toolsByKey.delete(key);\n    }\n    for (const [key, state] of this.tasksById) {\n      if (!stateMatchesOperation(state, event.operationId)) {\n        continue;\n      }\n      safeEnd(state.span, endTime);\n      this.tasksById.delete(key);\n    }\n    for (const [key, state] of this.compactionsByKey) {\n      if (!stateMatchesOperation(state, event.operationId)) {\n        continue;\n      }\n      safeLog3(state.span, {\n        metrics: durationMetrics2(event.durationMs),\n        output: { completed: true }\n      });\n      safeEnd(state.span, eventTime(event.timestamp));\n      this.compactionsByKey.delete(key);\n    }\n  }\n  finishPendingSpansForRun(event) {\n    const endTime = eventTime(event.timestamp);\n    for (const [key, state] of this.toolsByKey) {\n      if (!stateMatchesRun(state, event.runId)) {\n        continue;\n      }\n      safeEnd(state.span, endTime);\n      this.toolsByKey.delete(key);\n    }\n    for (const [key, state] of this.turnsByKey) {\n      if (!stateMatchesRun(state, event.runId)) {\n        continue;\n      }\n      safeEnd(state.span, endTime);\n      this.turnsByKey.delete(key);\n    }\n    for (const [key, state] of this.tasksById) {\n      if (!stateMatchesRun(state, event.runId)) {\n        continue;\n      }\n      safeEnd(state.span, endTime);\n      this.tasksById.delete(key);\n    }\n    for (const [key, state] of this.compactionsByKey) {\n      if (!stateMatchesRun(state, event.runId)) {\n        continue;\n      }\n      safeLog3(state.span, { output: { completed: true } });\n      safeEnd(state.span, endTime);\n      this.compactionsByKey.delete(key);\n    }\n    for (const [key, state] of this.operationsById) {\n      if (!stateMatchesRun(state, event.runId)) {\n        continue;\n      }\n      if (state.metadata[\"flue.operation\"] === \"compact\") {\n        safeLog3(state.span, { output: { completed: true } });\n      }\n      safeEnd(state.span, endTime);\n      this.operationsById.delete(key);\n    }\n  }\n};\nfunction isInstrumentedOperation(operation) {\n  return operation === \"prompt\" || operation === \"skill\" || operation === \"compact\";\n}\nfunction extractEventMetadata(event, ctx) {\n  return {\n    ...event.runId ? { \"flue.run_id\": event.runId } : {},\n    ...event.instanceId ? { \"flue.instance_id\": event.instanceId } : {},\n    ...event.submissionId ? { \"flue.submission_id\": event.submissionId } : {},\n    ...event.dispatchId ? { \"flue.dispatch_id\": event.dispatchId } : {},\n    ...event.agentName ? { \"flue.agent_name\": event.agentName } : {},\n    ...event.conversationId ? { \"flue.conversation_id\": event.conversationId } : {},\n    ...typeof event.eventIndex === \"number\" ? { \"flue.event_index\": event.eventIndex } : {},\n    ...event.session ? { \"flue.session\": event.session } : {},\n    ...event.parentSession ? { \"flue.parent_session\": event.parentSession } : {},\n    ...event.harness ? { \"flue.harness\": event.harness } : {},\n    ...event.taskId ? { \"flue.task_id\": event.taskId } : {},\n    ...event.operationId ? { \"flue.operation_id\": event.operationId } : {},\n    ...event.turnId ? { \"flue.turn_id\": event.turnId } : {},\n    ...typeof ctx?.id === \"string\" ? { \"flue.context_id\": ctx.id } : {},\n    ...typeof ctx?.runId === \"string\" ? { \"flue.context_run_id\": ctx.runId } : {}\n  };\n}\nfunction extractPayloadMetadata(payload) {\n  if (!isObjectLike(payload)) {\n    return {};\n  }\n  const metadata = Reflect.get(payload, \"metadata\");\n  if (!isObjectLike(metadata)) {\n    return {};\n  }\n  return Object.fromEntries(Object.entries(metadata));\n}\nfunction flueRunInput(event) {\n  return event.input !== void 0 ? event.input : event.payload;\n}\nfunction flueTurnRequestInput(event) {\n  return event.request?.input ?? event.input;\n}\nfunction prepareFlueTurnInput(event, input, operation) {\n  const messages = input?.messages;\n  const tracksUserTurn = event.purpose === \"agent\" && operation?.metadata[\"flue.operation\"] === \"prompt\" && Array.isArray(messages);\n  if (!tracksUserTurn) {\n    return {\n      messages,\n      metadata: {\n        ...input?.systemPrompt ? { \"flue.system_prompt\": input.systemPrompt } : {},\n        ...input?.tools ? { tools: input.tools } : {}\n      }\n    };\n  }\n  const previous = operation.turnInputState;\n  const previousMessageCount = previous?.messageCount ?? 0;\n  const boundaryFingerprint = messages.length > 0 ? fingerprintJsonValue(messages[messages.length - 1]) : void 0;\n  const continuesPreviousInput = previous !== void 0 && messages.length >= previousMessageCount && (previousMessageCount === 0 || previous.boundaryFingerprint !== void 0 && previous.boundaryFingerprint === fingerprintJsonValue(messages[previousMessageCount - 1]));\n  const inputMode = previous === void 0 ? \"full\" : continuesPreviousInput ? \"delta\" : \"reset\";\n  const systemPromptFingerprint = fingerprintJsonValue(input?.systemPrompt);\n  const toolsFingerprint = fingerprintJsonValue(input?.tools);\n  operation.turnInputState = {\n    ...boundaryFingerprint !== void 0 ? { boundaryFingerprint } : {},\n    messageCount: messages.length,\n    ...systemPromptFingerprint !== void 0 ? { systemPromptFingerprint } : {},\n    ...toolsFingerprint !== void 0 ? { toolsFingerprint } : {}\n  };\n  return {\n    messages: continuesPreviousInput ? messages.slice(previousMessageCount) : messages,\n    metadata: {\n      \"flue.input_mode\": inputMode,\n      ...continuesPreviousInput ? { \"flue.input_message_offset\": previousMessageCount } : {},\n      ...input?.systemPrompt && (!continuesPreviousInput || systemPromptFingerprint !== previous?.systemPromptFingerprint) ? { \"flue.system_prompt\": input.systemPrompt } : {},\n      ...input?.tools && (!continuesPreviousInput || toolsFingerprint !== previous?.toolsFingerprint) ? { tools: input.tools } : {}\n    }\n  };\n}\nfunction fingerprintJsonValue(value) {\n  try {\n    const serialized = JSON.stringify(value);\n    if (serialized === void 0) {\n      return void 0;\n    }\n    let hash = 2166136261;\n    for (let i = 0; i < serialized.length; i++) {\n      hash = Math.imul(hash ^ serialized.charCodeAt(i), 16777619);\n    }\n    return `${serialized.length}:${hash >>> 0}`;\n  } catch {\n    return void 0;\n  }\n}\nfunction latestUserMessageInput(messages) {\n  if (!messages) {\n    return void 0;\n  }\n  for (let i = messages.length - 1; i >= 0; i--) {\n    const message = messages[i];\n    if (isObjectLike(message) && Reflect.get(message, \"role\") === \"user\") {\n      return [message];\n    }\n  }\n  return void 0;\n}\nfunction flueOperationInput(event) {\n  return typeof event.agentInput?.text === \"string\" ? [{ content: event.agentInput.text, role: \"user\" }] : void 0;\n}\nfunction flueTurnRequestModel(event) {\n  return event.request?.requestedModel ?? event.request?.model ?? event.model;\n}\nfunction flueTurnRequestProvider(event) {\n  return event.request?.providerName ?? event.provider ?? event.request?.providerId;\n}\nfunction flueTurnRequestApi(event) {\n  return event.request?.api ?? event.api;\n}\nfunction flueTurnRequestReasoning(event) {\n  return event.request?.reasoningLevel ?? event.request?.reasoning ?? event.reasoning;\n}\nfunction flueTurnModel(event) {\n  return event.response?.responseModel ?? event.request?.requestedModel ?? event.request?.model ?? event.model;\n}\nfunction flueTurnProvider(event) {\n  return event.request?.providerName ?? event.provider ?? event.request?.providerId;\n}\nfunction flueTurnApi(event) {\n  return event.request?.api ?? event.api;\n}\nfunction flueTurnUsage(event) {\n  return event.response?.usage ?? event.usage;\n}\nfunction flueTurnOutput(event) {\n  return event.response?.output ?? event.output;\n}\nfunction flueTurnStopReason(event) {\n  return event.response?.finishReason ?? event.response?.stopReason ?? event.stopReason;\n}\nfunction flueTurnError(event) {\n  return event.response?.error ?? event.response?.errorInfo?.message ?? event.error;\n}\nfunction flueToolInput(event) {\n  if (event.args !== void 0) {\n    return event.args;\n  }\n  if (event.arguments !== void 0) {\n    return event.arguments;\n  }\n  return event.input;\n}\nfunction flueToolOutput(event) {\n  if (Object.hasOwn(event, \"effectiveResult\")) {\n    return event.effectiveResult;\n  }\n  return event.output !== void 0 ? event.output : event.result;\n}\nfunction flueToolError(event) {\n  return event.error ?? event.errorInfo?.message ?? flueToolOutput(event);\n}\nfunction operationOutput(event) {\n  if (event.operationKind === \"prompt\" || event.operationKind === \"skill\") {\n    return outputFromAgentInvocation(event.agentOutput) ?? llmResultFromOperationResult(event.result);\n  }\n  return event.result ?? (event.operationKind === \"compact\" ? { completed: true } : void 0);\n}\nfunction outputFromAgentInvocation(output) {\n  if (output?.type === \"text\") {\n    return output.text;\n  }\n  if (output?.type === \"data\") {\n    return output.data;\n  }\n  return void 0;\n}\nfunction outputFromAgentTurn(output) {\n  if (!isObjectLike(output)) {\n    return output;\n  }\n  const content = Reflect.get(output, \"content\");\n  if (!Array.isArray(content)) {\n    return output;\n  }\n  const text = content.flatMap((part) => {\n    if (!isObjectLike(part) || Reflect.get(part, \"type\") !== \"text\") {\n      return [];\n    }\n    const value = Reflect.get(part, \"text\");\n    return typeof value === \"string\" ? [value] : [];\n  });\n  return text.length > 0 ? text.join(\"\") : output;\n}\nfunction llmResultFromOperationResult(result) {\n  if (!isObjectLike(result)) {\n    return result;\n  }\n  const text = Reflect.get(result, \"text\");\n  return text === void 0 ? result : text;\n}\nfunction usageFromOperationResult(result) {\n  if (!isObjectLike(result)) {\n    return void 0;\n  }\n  return Reflect.get(result, \"usage\");\n}\nfunction metricsFromUsage(usage) {\n  if (!isObjectLike(usage)) {\n    return {};\n  }\n  const cacheRead = Reflect.get(usage, \"cacheRead\");\n  const cacheWrite = Reflect.get(usage, \"cacheWrite\");\n  const cost = Reflect.get(usage, \"cost\");\n  const input = Reflect.get(usage, \"input\");\n  const output = Reflect.get(usage, \"output\");\n  const totalTokens = Reflect.get(usage, \"totalTokens\");\n  const totalCost = isObjectLike(cost) ? Reflect.get(cost, \"total\") : void 0;\n  return {\n    ...typeof input === \"number\" ? { prompt_tokens: input } : {},\n    ...typeof output === \"number\" ? { completion_tokens: output } : {},\n    ...typeof cacheRead === \"number\" ? { prompt_cached_tokens: cacheRead } : {},\n    ...typeof cacheWrite === \"number\" ? { prompt_cache_creation_tokens: cacheWrite } : {},\n    ...typeof totalTokens === \"number\" ? { tokens: totalTokens } : {},\n    ...typeof totalCost === \"number\" ? { estimated_cost: totalCost } : {}\n  };\n}\nfunction durationMetrics2(durationMs) {\n  return typeof durationMs === \"number\" ? { duration_ms: durationMs } : {};\n}\nfunction eventTime(value) {\n  if (typeof value !== \"string\") {\n    return void 0;\n  }\n  const timestamp = Date.parse(value);\n  return Number.isFinite(timestamp) ? timestamp / 1e3 : void 0;\n}\nfunction turnKey(event) {\n  return event.turnId;\n}\nfunction toolKey(event) {\n  return `${event.turnId ?? event.operationId ?? event.taskId ?? event.runId ?? \"unknown\"}:${event.toolCallId ?? \"unknown\"}`;\n}\nfunction compactionKey(event) {\n  return [\n    event.instanceId ?? \"\",\n    event.runId ?? \"\",\n    event.session ?? \"\",\n    event.operationId ?? \"\",\n    event.taskId ?? \"\"\n  ].join(\":\");\n}\nfunction stateMatchesOperation(state, operationId) {\n  return state.metadata[\"flue.operation_id\"] === operationId;\n}\nfunction stateMatchesRun(state, runId) {\n  return state.metadata[\"flue.run_id\"] === runId;\n}\nfunction startFlueSpan(parent, args) {\n  return parent ? withCurrent(\n    parent,\n    () => startSpan(\n      withSpanInstrumentationName(args, INSTRUMENTATION_NAMES.FLUE)\n    )\n  ) : startSpan(\n    withSpanInstrumentationName(args, INSTRUMENTATION_NAMES.FLUE)\n  );\n}\nfunction startFlueRootSpan(args) {\n  const state = _internalGetGlobalState();\n  const spanId = state.idGenerator.getSpanId();\n  const rootSpanId = state.idGenerator.shareRootSpanId() ? spanId : state.idGenerator.getTraceId();\n  return withCurrent(\n    NOOP_SPAN,\n    () => startSpan({\n      ...withSpanInstrumentationName(args, INSTRUMENTATION_NAMES.FLUE),\n      parentSpanIds: { parentSpanIds: [], rootSpanId },\n      spanId,\n      state\n    }),\n    state\n  );\n}\nfunction runWithCurrentSpanStore(span, next) {\n  const state = _internalGetGlobalState();\n  const contextManager = state?.contextManager;\n  const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n  if (contextManager && typeof currentSpanStore?.run === \"function\") {\n    return currentSpanStore.run(contextManager.wrapSpanForStore(span), next);\n  }\n  return withCurrent(span, () => next());\n}\nfunction safeLog3(span, event) {\n  try {\n    span.log(event);\n  } catch (error) {\n    logInstrumentationError4(\"Flue span log\", error);\n  }\n}\nfunction safeEnd(span, endTime) {\n  try {\n    span.end(endTime === void 0 ? void 0 : { endTime });\n  } catch (error) {\n    logInstrumentationError4(\"Flue span end\", error);\n  }\n}\nfunction logInstrumentationError4(label, error) {\n  debugLogger.debug(`Error in ${label} instrumentation:`, error);\n}\n\n// src/wrappers/langchain/callback-handler.ts\nvar BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME = \"BraintrustCallbackHandler\";\nvar BraintrustLangChainCallbackHandler = class {\n  name = BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME;\n  spans = /* @__PURE__ */ new Map();\n  skippedRuns = /* @__PURE__ */ new Set();\n  parent;\n  rootRunId;\n  options;\n  startTimes = /* @__PURE__ */ new Map();\n  firstTokenTimes = /* @__PURE__ */ new Map();\n  ttftMs = /* @__PURE__ */ new Map();\n  constructor(options) {\n    this.parent = options?.parent;\n    this.options = {\n      debug: options?.debug ?? false,\n      excludeMetadataProps: options?.excludeMetadataProps ?? /^(l[sc]_|langgraph_|__pregel_|checkpoint_ns)/,\n      logger: options?.logger\n    };\n  }\n  startSpan({\n    runId,\n    parentRunId,\n    ...args\n  }) {\n    if (this.spans.has(runId)) {\n      return;\n    }\n    if (!parentRunId) {\n      this.rootRunId = runId;\n    }\n    const tags = args.event?.tags;\n    const spanAttributes = args.spanAttributes || {};\n    spanAttributes.type = args.type || spanAttributes.type || \"task\";\n    args.type = spanAttributes.type;\n    const currentParent = (typeof this.parent === \"function\" ? this.parent() : this.parent) ?? currentSpan();\n    let parentSpan;\n    if (parentRunId && this.spans.has(parentRunId)) {\n      parentSpan = this.spans.get(parentRunId);\n    } else if (!Object.is(currentParent, NOOP_SPAN)) {\n      parentSpan = currentParent;\n    } else if (this.options.logger) {\n      parentSpan = this.options.logger;\n    } else {\n      parentSpan = { startSpan };\n    }\n    args.event = {\n      ...args.event,\n      tags: void 0,\n      metadata: {\n        ...tags ? { tags } : {},\n        ...args.event?.metadata,\n        braintrust: {\n          integration_name: \"langchain-js\",\n          sdk_language: \"javascript\"\n        },\n        run_id: runId,\n        parent_run_id: parentRunId,\n        ...this.options.debug ? { runId, parentRunId } : {}\n      }\n    };\n    const spanArgs = withSpanInstrumentationName(\n      args,\n      INSTRUMENTATION_NAMES.LANGCHAIN\n    );\n    let span = parentSpan.startSpan(spanArgs);\n    if (!Object.is(this.options.logger, NOOP_SPAN) && Object.is(span, NOOP_SPAN)) {\n      span = initLogger().startSpan(spanArgs);\n    }\n    this.spans.set(runId, span);\n  }\n  endSpan({\n    runId,\n    parentRunId,\n    tags,\n    metadata,\n    ...args\n  }) {\n    if (!this.spans.has(runId)) {\n      return;\n    }\n    if (this.skippedRuns.has(runId)) {\n      this.skippedRuns.delete(runId);\n      return;\n    }\n    const span = this.spans.get(runId);\n    this.spans.delete(runId);\n    if (runId === this.rootRunId) {\n      this.rootRunId = void 0;\n    }\n    span.log({ ...args, metadata: { tags, ...metadata } });\n    span.end();\n  }\n  async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, runName) {\n    this.startSpan({\n      runId,\n      parentRunId,\n      name: runName ?? getSerializedName(llm) ?? \"LLM\",\n      type: \"llm\",\n      event: {\n        input: prompts,\n        tags,\n        metadata: {\n          serialized: llm,\n          name: runName,\n          metadata,\n          ...extraParams,\n          model: getModelNameFromInvocation(extraParams)\n        }\n      }\n    });\n  }\n  async handleLLMError(err, runId, parentRunId, tags) {\n    this.endSpan({ runId, parentRunId, error: err, tags });\n  }\n  async handleLLMEnd(output, runId, parentRunId, tags) {\n    const metrics = getMetricsFromResponse(output);\n    const modelName2 = getModelNameFromResponse(output);\n    const ttft = this.ttftMs.get(runId);\n    if (ttft !== void 0) {\n      metrics.time_to_first_token = ttft;\n    }\n    this.startTimes.delete(runId);\n    this.firstTokenTimes.delete(runId);\n    this.ttftMs.delete(runId);\n    this.endSpan({\n      runId,\n      parentRunId,\n      output,\n      metrics,\n      tags,\n      metadata: modelName2 !== void 0 ? { model: modelName2 } : void 0\n    });\n  }\n  async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, runName) {\n    this.startTimes.set(runId, Date.now());\n    this.firstTokenTimes.delete(runId);\n    this.ttftMs.delete(runId);\n    this.startSpan({\n      runId,\n      parentRunId,\n      name: runName ?? getSerializedName(llm) ?? \"Chat Model\",\n      type: \"llm\",\n      event: {\n        input: messages,\n        tags,\n        metadata: {\n          serialized: llm,\n          name: runName,\n          metadata,\n          ...extraParams,\n          model: getModelNameFromInvocation(extraParams)\n        }\n      }\n    });\n  }\n  async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, runName) {\n    if (tags?.includes(\"langsmith:hidden\")) {\n      this.skippedRuns.add(runId);\n      return;\n    }\n    this.startSpan({\n      runId,\n      parentRunId,\n      name: runName ?? getSerializedName(chain) ?? \"Chain\",\n      event: {\n        input: inputs,\n        tags,\n        metadata: {\n          serialized: chain,\n          name: runName,\n          metadata,\n          run_type: runType\n        }\n      }\n    });\n  }\n  async handleChainError(err, runId, parentRunId, tags, kwargs) {\n    this.endSpan({ runId, parentRunId, error: err, tags, metadata: kwargs });\n  }\n  async handleChainEnd(outputs, runId, parentRunId, tags, kwargs) {\n    this.endSpan({\n      runId,\n      parentRunId,\n      tags,\n      output: outputs,\n      metadata: { ...kwargs }\n    });\n  }\n  async handleToolStart(tool, input, runId, parentRunId, tags, metadata, runName) {\n    this.startSpan({\n      runId,\n      parentRunId,\n      name: runName ?? getSerializedName(tool) ?? \"Tool\",\n      type: \"llm\",\n      event: {\n        input: safeJsonParse(input),\n        tags,\n        metadata: {\n          metadata,\n          serialized: tool,\n          input_str: input,\n          input: safeJsonParse(input),\n          name: runName\n        }\n      }\n    });\n  }\n  async handleToolError(err, runId, parentRunId, tags) {\n    this.endSpan({ runId, parentRunId, error: err, tags });\n  }\n  async handleToolEnd(output, runId, parentRunId, tags) {\n    this.endSpan({ runId, parentRunId, output, tags });\n  }\n  async handleAgentAction(action, runId, parentRunId, tags) {\n    this.startSpan({\n      runId,\n      parentRunId,\n      type: \"llm\",\n      name: typeof action.tool === \"string\" ? action.tool : \"Agent\",\n      event: {\n        input: action,\n        tags\n      }\n    });\n  }\n  async handleAgentEnd(action, runId, parentRunId, tags) {\n    this.endSpan({ runId, parentRunId, output: action, tags });\n  }\n  async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {\n    this.startSpan({\n      runId,\n      parentRunId,\n      name: name ?? getSerializedName(retriever) ?? \"Retriever\",\n      type: \"function\",\n      event: {\n        input: query,\n        tags,\n        metadata: {\n          serialized: retriever,\n          metadata,\n          name\n        }\n      }\n    });\n  }\n  async handleRetrieverEnd(documents, runId, parentRunId, tags) {\n    this.endSpan({ runId, parentRunId, output: documents, tags });\n  }\n  async handleRetrieverError(err, runId, parentRunId, tags) {\n    this.endSpan({ runId, parentRunId, error: err, tags });\n  }\n  async handleLLMNewToken(_token, _idx, runId, _parentRunId, _tags) {\n    if (!this.firstTokenTimes.has(runId)) {\n      const now2 = Date.now();\n      this.firstTokenTimes.set(runId, now2);\n      const start = this.startTimes.get(runId);\n      if (start !== void 0) {\n        this.ttftMs.set(runId, (now2 - start) / 1e3);\n      }\n    }\n  }\n};\nfunction getSerializedName(serialized) {\n  if (typeof serialized.name === \"string\") {\n    return serialized.name;\n  }\n  const lastIdPart = serialized.id?.at(-1);\n  return typeof lastIdPart === \"string\" ? lastIdPart : void 0;\n}\nfunction cleanObject(obj) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([, value]) => {\n      if (typeof value !== \"number\") {\n        return false;\n      }\n      return Number.isFinite(value);\n    })\n  );\n}\nfunction normalizeTokenMetrics(obj) {\n  const metrics = cleanObject(obj);\n  if (metrics.total_tokens !== void 0) {\n    metrics.tokens = metrics.total_tokens;\n  } else if (metrics.prompt_tokens !== void 0 && metrics.completion_tokens !== void 0) {\n    metrics.tokens = metrics.prompt_tokens + metrics.completion_tokens;\n  }\n  delete metrics.total_tokens;\n  return metrics;\n}\nfunction walkGenerations(response) {\n  const result = [];\n  const generations = response.generations || [];\n  for (const batch of generations) {\n    if (Array.isArray(batch)) {\n      for (const generation of batch) {\n        if (isRecord(generation)) {\n          result.push(generation);\n        }\n      }\n    } else if (isRecord(batch)) {\n      result.push(batch);\n    }\n  }\n  return result;\n}\nfunction getModelNameFromInvocation(extraParams) {\n  const params = extraParams?.invocation_params;\n  if (!isRecord(params)) {\n    return void 0;\n  }\n  const modelName2 = params.model ?? params.model_name;\n  return typeof modelName2 === \"string\" ? modelName2 : void 0;\n}\nfunction getModelNameFromResponse(response) {\n  for (const generation of walkGenerations(response)) {\n    const message = generation.message;\n    if (!isRecord(message)) {\n      continue;\n    }\n    for (const metadata of [\n      message.response_metadata,\n      message.additional_kwargs\n    ]) {\n      if (!isRecord(metadata)) {\n        continue;\n      }\n      const modelName3 = metadata.model_name ?? metadata.model;\n      if (typeof modelName3 === \"string\") {\n        return modelName3;\n      }\n    }\n  }\n  const llmOutput = response.llmOutput || {};\n  const modelName2 = llmOutput.model_name ?? llmOutput.model;\n  return typeof modelName2 === \"string\" ? modelName2 : void 0;\n}\nfunction getMetricsFromResponse(response) {\n  for (const generation of walkGenerations(response)) {\n    const message = generation.message;\n    if (!isRecord(message)) {\n      continue;\n    }\n    const usageMetadata = message.usage_metadata;\n    if (!isRecord(usageMetadata)) {\n      continue;\n    }\n    const inputTokenDetails = isRecord(usageMetadata.input_token_details) ? usageMetadata.input_token_details : {};\n    const outputTokenDetails = usageMetadata.output_token_details;\n    return normalizeTokenMetrics({\n      total_tokens: usageMetadata.total_tokens,\n      prompt_tokens: usageMetadata.input_tokens,\n      completion_tokens: usageMetadata.output_tokens,\n      // Prefer TTL-specific cache writes over the aggregate when available.\n      prompt_cache_creation_tokens: inputTokenDetails.ephemeral_5m_input_tokens == null && inputTokenDetails.ephemeral_1h_input_tokens == null ? inputTokenDetails.cache_creation : void 0,\n      prompt_cache_creation_5m_tokens: inputTokenDetails.ephemeral_5m_input_tokens,\n      prompt_cache_creation_1h_tokens: inputTokenDetails.ephemeral_1h_input_tokens,\n      prompt_cached_tokens: inputTokenDetails.cache_read,\n      completion_reasoning_tokens: isRecord(outputTokenDetails) ? outputTokenDetails.reasoning : void 0\n    });\n  }\n  const llmOutput = response.llmOutput || {};\n  const tokenUsage = isRecord(llmOutput.tokenUsage) ? llmOutput.tokenUsage : isRecord(llmOutput.estimatedTokens) ? llmOutput.estimatedTokens : {};\n  return normalizeTokenMetrics({\n    total_tokens: tokenUsage.totalTokens,\n    prompt_tokens: tokenUsage.promptTokens,\n    completion_tokens: tokenUsage.completionTokens\n  });\n}\nfunction safeJsonParse(input) {\n  try {\n    return JSON.parse(input);\n  } catch {\n    return input;\n  }\n}\nfunction isRecord(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// src/instrumentation/plugins/langchain-channels.ts\nvar langChainChannels = defineChannels(\n  \"@langchain/core\",\n  {\n    configure: channel({\n      channelName: \"CallbackManager.configure\",\n      kind: \"sync-stream\"\n    }),\n    configureSync: channel({\n      channelName: \"CallbackManager._configureSync\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.LANGCHAIN }\n);\n\n// src/instrumentation/plugins/langchain-plugin.ts\nvar LangChainPlugin = class extends BasePlugin {\n  injectedManagers = /* @__PURE__ */ new WeakSet();\n  onEnable() {\n    this.subscribeToConfigure(langChainChannels.configure);\n    this.subscribeToConfigure(langChainChannels.configureSync);\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n    this.injectedManagers = /* @__PURE__ */ new WeakSet();\n  }\n  subscribeToConfigure(channel2) {\n    const tracingChannel = channel2.tracingChannel();\n    const handlers = {\n      start: (event) => {\n        injectHandlerIntoArguments(event.arguments);\n      },\n      end: (event) => {\n        this.injectHandler(event.result);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  injectHandler(result) {\n    if (!isCallbackManager(result)) {\n      return;\n    }\n    if (this.injectedManagers.has(result) || hasBraintrustHandler(result)) {\n      return;\n    }\n    try {\n      result.addHandler(new BraintrustLangChainCallbackHandler(), true);\n      this.injectedManagers.add(result);\n    } catch {\n    }\n  }\n};\nfunction isCallbackManager(value) {\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  const maybeManager = value;\n  return typeof maybeManager.addHandler === \"function\";\n}\nfunction hasBraintrustHandler(manager) {\n  return manager.handlers?.some((handler) => {\n    if (typeof handler !== \"object\" || handler === null) {\n      return false;\n    }\n    const name = Reflect.get(handler, \"name\");\n    return name === BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME;\n  }) ?? false;\n}\nfunction injectHandlerIntoArguments(args) {\n  if (!isWritableArgumentsObject(args)) {\n    return;\n  }\n  const inheritedHandlers = Reflect.get(args, \"0\");\n  const handler = new BraintrustLangChainCallbackHandler();\n  if (inheritedHandlers === void 0 || inheritedHandlers === null) {\n    Reflect.set(args, \"0\", [handler]);\n    return;\n  }\n  if (Array.isArray(inheritedHandlers)) {\n    if (!inheritedHandlers.some(isBraintrustHandler)) {\n      inheritedHandlers.push(handler);\n    }\n  }\n}\nfunction isWritableArgumentsObject(args) {\n  return typeof args === \"object\" && args !== null;\n}\nfunction isBraintrustHandler(handler) {\n  if (typeof handler !== \"object\" || handler === null) {\n    return false;\n  }\n  return Reflect.get(handler, \"name\") === BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME;\n}\n\n// src/instrumentation/plugins/langsmith-channels.ts\nvar langSmithChannels = defineChannels(\n  \"langsmith\",\n  {\n    createRun: channel({\n      channelName: \"Client.createRun\",\n      kind: \"async\"\n    }),\n    updateRun: channel({\n      channelName: \"Client.updateRun\",\n      kind: \"async\"\n    }),\n    batchIngestRuns: channel({\n      channelName: \"Client.batchIngestRuns\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.LANGSMITH }\n);\n\n// src/instrumentation/plugins/langsmith-plugin.ts\nvar MAX_COMPLETED_RUNS = 1e4;\nvar BLOCKED_METADATA_KEYS = /* @__PURE__ */ new Set([\n  \"__proto__\",\n  \"constructor\",\n  \"prototype\",\n  \"usage_metadata\"\n]);\nvar BLOCKED_METADATA_PREFIXES = [\"__pregel_\", \"langgraph_\", \"lc_\"];\nvar LLM_SETTING_KEYS = [\n  \"temperature\",\n  \"top_p\",\n  \"max_tokens\",\n  \"frequency_penalty\",\n  \"presence_penalty\",\n  \"stop\",\n  \"response_format\"\n];\nvar LangSmithPlugin = class extends BasePlugin {\n  activeRuns = /* @__PURE__ */ new Map();\n  completedRuns = new LRUCache({\n    max: MAX_COMPLETED_RUNS\n  });\n  skipLangChainRuns;\n  constructor(options = {}) {\n    super();\n    this.skipLangChainRuns = options.skipLangChainRuns ?? true;\n  }\n  onEnable() {\n    const createChannel = langSmithChannels.createRun.tracingChannel();\n    const createHandlers = {\n      start: (event) => {\n        this.containLifecycleFailure(\"createRun\", () => {\n          this.processCreate(event.arguments[0]);\n        });\n      }\n    };\n    createChannel.subscribe(createHandlers);\n    this.unsubscribers.push(() => createChannel.unsubscribe(createHandlers));\n    const updateChannel = langSmithChannels.updateRun.tracingChannel();\n    const updateHandlers = {\n      start: (event) => {\n        this.containLifecycleFailure(\"updateRun\", () => {\n          this.processUpdate(event.arguments[0], event.arguments[1]);\n        });\n      }\n    };\n    updateChannel.subscribe(updateHandlers);\n    this.unsubscribers.push(() => updateChannel.unsubscribe(updateHandlers));\n    const batchChannel = langSmithChannels.batchIngestRuns.tracingChannel();\n    const batchHandlers = {\n      start: (event) => {\n        this.containLifecycleFailure(\"batchIngestRuns\", () => {\n          this.processBatch(event.arguments[0]);\n        });\n      }\n    };\n    batchChannel.subscribe(batchHandlers);\n    this.unsubscribers.push(() => batchChannel.unsubscribe(batchHandlers));\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n    for (const { span } of this.activeRuns.values()) {\n      span.end();\n    }\n    this.activeRuns.clear();\n    this.completedRuns.clear();\n  }\n  processBatch(batch) {\n    if (!isRecord2(batch)) {\n      return;\n    }\n    const creates = ownValue(batch, \"runCreates\");\n    if (Array.isArray(creates)) {\n      const parentFirst = [...creates].sort((left, right) => {\n        const leftId = stringValue3(ownValue(left, \"id\"));\n        const rightId = stringValue3(ownValue(right, \"id\"));\n        const leftParent = stringValue3(ownValue(left, \"parent_run_id\"));\n        const rightParent = stringValue3(ownValue(right, \"parent_run_id\"));\n        if (leftParent && leftParent === rightId) {\n          return 1;\n        }\n        if (rightParent && rightParent === leftId) {\n          return -1;\n        }\n        return dottedOrderDepth(left) - dottedOrderDepth(right);\n      });\n      for (const run of parentFirst) {\n        this.containLifecycleFailure(\"batchIngestRuns create\", () => {\n          this.processCreate(run);\n        });\n      }\n    }\n    const updates = ownValue(batch, \"runUpdates\");\n    if (Array.isArray(updates)) {\n      for (const run of updates) {\n        this.containLifecycleFailure(\"batchIngestRuns update\", () => {\n          this.processUpdate(stringValue3(ownValue(run, \"id\")) ?? \"\", run);\n        });\n      }\n    }\n  }\n  processCreate(run) {\n    const id = stringValue3(ownValue(run, \"id\"));\n    if (!id || this.completedRuns.get(id)) {\n      return;\n    }\n    if (this.shouldSkipLangChainRun(run)) {\n      this.completedRuns.set(id, true);\n      return;\n    }\n    const active = this.activeRuns.get(id);\n    if (active) {\n      const previous = active.run;\n      active.run = mergeRuns(previous, run);\n      this.logRun(\n        active.span,\n        active.run,\n        previous,\n        timestampSeconds(ownValue(active.run, \"end_time\")) !== void 0 || errorMessage(ownValue(active.run, \"error\")) !== void 0\n      );\n      this.endIfComplete(id, active, active.run);\n      return;\n    }\n    const span = this.startRunSpan(id, run);\n    const activeRun = { run, span };\n    this.activeRuns.set(id, activeRun);\n    this.logRun(\n      span,\n      run,\n      void 0,\n      timestampSeconds(ownValue(run, \"end_time\")) !== void 0 || errorMessage(ownValue(run, \"error\")) !== void 0\n    );\n    this.endIfComplete(id, activeRun, run);\n  }\n  processUpdate(explicitId, run) {\n    const id = stringValue3(explicitId) ?? stringValue3(ownValue(run, \"id\"));\n    if (!id || this.completedRuns.get(id)) {\n      return;\n    }\n    if (this.shouldSkipLangChainRun(run)) {\n      const active2 = this.activeRuns.get(id);\n      active2?.span.end();\n      this.activeRuns.delete(id);\n      this.completedRuns.set(id, true);\n      return;\n    }\n    let active = this.activeRuns.get(id);\n    if (!active) {\n      const span = this.startRunSpan(id, run);\n      active = { run, span };\n      this.activeRuns.set(id, active);\n    }\n    const previous = active.run;\n    active.run = mergeRuns(previous, run);\n    this.logRun(active.span, active.run, previous, true);\n    this.endIfComplete(id, active, active.run);\n  }\n  startRunSpan(id, run) {\n    const traceId = stringValue3(ownValue(run, \"trace_id\")) ?? id;\n    const parentId = stringValue3(ownValue(run, \"parent_run_id\")) ?? stringValue3(ownValue(ownValue(run, \"parent_run\"), \"id\"));\n    const startTime = timestampSeconds(ownValue(run, \"start_time\"));\n    return startSpan(\n      withSpanInstrumentationName(\n        {\n          name: stringValue3(ownValue(run, \"name\")) ?? \"LangSmith run\",\n          spanId: id,\n          parentSpanIds: {\n            parentSpanIds: parentId ? [parentId] : [],\n            rootSpanId: traceId\n          },\n          spanAttributes: {\n            type: mapRunType(ownValue(run, \"run_type\"))\n          },\n          ...startTime === void 0 ? {} : { startTime },\n          event: { id }\n        },\n        INSTRUMENTATION_NAMES.LANGSMITH\n      )\n    );\n  }\n  logRun(span, run, previous, includeOutput) {\n    const inputs = preferOwnValue(run, previous, \"inputs\");\n    const outputs = preferOwnValue(run, previous, \"outputs\");\n    const error = errorMessage(preferOwnValue(run, previous, \"error\"));\n    const metadata = extractMetadata2(run, previous);\n    const tags = extractTags(preferOwnValue(run, previous, \"tags\"));\n    const metrics = extractMetrics(run, previous);\n    span.log({\n      ...inputs === void 0 ? {} : { input: sanitizeLoggedValue(inputs) },\n      ...includeOutput && outputs !== void 0 ? { output: sanitizeLoggedValue(outputs) } : {},\n      ...error === void 0 ? {} : { error },\n      ...metadata === void 0 ? {} : { metadata },\n      ...tags === void 0 ? {} : { tags },\n      ...Object.keys(metrics).length === 0 ? {} : { metrics }\n    });\n  }\n  endIfComplete(id, active, run) {\n    const endTime = timestampSeconds(ownValue(run, \"end_time\"));\n    if (endTime === void 0 && errorMessage(ownValue(run, \"error\")) === void 0) {\n      return;\n    }\n    active.span.end(endTime === void 0 ? void 0 : { endTime });\n    this.activeRuns.delete(id);\n    this.completedRuns.set(id, true);\n  }\n  shouldSkipLangChainRun(run) {\n    if (!this.skipLangChainRuns) {\n      return false;\n    }\n    const serialized = ownValue(run, \"serialized\");\n    return isRecord2(serialized) && ownValue(serialized, \"lc\") === 1;\n  }\n  containLifecycleFailure(operation, fn) {\n    try {\n      fn();\n    } catch (error) {\n      debugLogger.error(\n        `Failed to process LangSmith ${operation} instrumentation:`,\n        error\n      );\n    }\n  }\n};\nfunction ownValue(value, key) {\n  if (!isRecord2(value)) {\n    return void 0;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(value, key);\n  return descriptor && \"value\" in descriptor ? descriptor.value : void 0;\n}\nfunction preferOwnValue(current, previous, key) {\n  const currentDescriptor = isRecord2(current) ? Object.getOwnPropertyDescriptor(current, key) : void 0;\n  if (currentDescriptor && \"value\" in currentDescriptor) {\n    return currentDescriptor.value;\n  }\n  return ownValue(previous, key);\n}\nfunction mergeRuns(previous, current) {\n  const entries = /* @__PURE__ */ new Map();\n  for (const value of [previous, current]) {\n    if (!isRecord2(value)) {\n      continue;\n    }\n    for (const [key, descriptor] of Object.entries(\n      Object.getOwnPropertyDescriptors(value)\n    )) {\n      if (descriptor.enumerable && \"value\" in descriptor) {\n        entries.set(key, descriptor.value);\n      }\n    }\n  }\n  return Object.fromEntries(entries);\n}\nfunction isRecord2(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction stringValue3(value) {\n  return typeof value === \"string\" && value.length > 0 ? value : void 0;\n}\nfunction timestampSeconds(value) {\n  if (value instanceof Date) {\n    const timestamp = value.getTime();\n    return Number.isFinite(timestamp) ? timestamp / 1e3 : void 0;\n  }\n  if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n    return value > 1e10 ? value / 1e3 : value;\n  }\n  if (typeof value === \"string\") {\n    const timestamp = Date.parse(value);\n    return Number.isFinite(timestamp) ? timestamp / 1e3 : void 0;\n  }\n  return void 0;\n}\nfunction dottedOrderDepth(run) {\n  const dottedOrder = stringValue3(ownValue(run, \"dotted_order\"));\n  return dottedOrder ? dottedOrder.split(\".\").length : Number.MAX_SAFE_INTEGER;\n}\nfunction mapRunType(runType) {\n  switch (runType) {\n    case \"llm\":\n    case \"embedding\":\n      return \"llm\" /* LLM */;\n    case \"tool\":\n    case \"retriever\":\n      return \"tool\" /* TOOL */;\n    default:\n      return \"task\" /* TASK */;\n  }\n}\nfunction extractMetadata2(run, previous) {\n  const extra = preferOwnValue(run, previous, \"extra\");\n  const rawMetadata = ownValue(extra, \"metadata\");\n  if (!isRecord2(rawMetadata)) {\n    return void 0;\n  }\n  const metadata = {};\n  for (const [key, descriptor] of Object.entries(\n    Object.getOwnPropertyDescriptors(rawMetadata)\n  )) {\n    if (!(\"value\" in descriptor) || !descriptor.enumerable || BLOCKED_METADATA_KEYS.has(key) || BLOCKED_METADATA_PREFIXES.some((prefix) => key.startsWith(prefix)) || key.startsWith(\"ls_\") && key !== \"ls_provider\" && key !== \"ls_model_name\" && !LLM_SETTING_KEYS.some((setting) => key === `ls_${setting}`)) {\n      continue;\n    }\n    const normalizedKey = key === \"ls_provider\" ? \"provider\" : key === \"ls_model_name\" ? \"model\" : key.startsWith(\"ls_\") ? key.slice(3) : key;\n    const sanitized = sanitizeLoggedValue(descriptor.value);\n    if (sanitized !== void 0) {\n      metadata[normalizedKey] = sanitized;\n    }\n  }\n  return Object.keys(metadata).length === 0 ? void 0 : metadata;\n}\nfunction extractTags(value) {\n  if (!Array.isArray(value)) {\n    return void 0;\n  }\n  const tags = value.filter(\n    (tag) => typeof tag === \"string\" && tag.length > 0\n  );\n  return tags.length > 0 ? tags : void 0;\n}\nfunction extractMetrics(run, previous) {\n  const outputs = preferOwnValue(run, previous, \"outputs\");\n  const extra = preferOwnValue(run, previous, \"extra\");\n  const metadata = ownValue(extra, \"metadata\");\n  const usage = ownValue(outputs, \"usage_metadata\") ?? ownValue(metadata, \"usage_metadata\");\n  const metrics = {};\n  assignFirstMetric(metrics, \"prompt_tokens\", usage, [\n    \"input_tokens\",\n    \"prompt_tokens\"\n  ]);\n  assignFirstMetric(metrics, \"completion_tokens\", usage, [\n    \"output_tokens\",\n    \"completion_tokens\"\n  ]);\n  assignFirstMetric(metrics, \"tokens\", usage, [\"total_tokens\", \"tokens\"]);\n  const inputTokenDetails = ownValue(usage, \"input_token_details\");\n  assignFirstMetric(metrics, \"prompt_cached_tokens\", inputTokenDetails, [\n    \"cache_read\",\n    \"cached_tokens\"\n  ]);\n  if (metrics.prompt_cached_tokens === void 0) {\n    assignFirstMetric(metrics, \"prompt_cached_tokens\", usage, [\n      \"cache_read_input_tokens\",\n      \"prompt_cached_tokens\"\n    ]);\n  }\n  assignFirstMetric(\n    metrics,\n    \"prompt_cache_creation_tokens\",\n    inputTokenDetails,\n    [\"cache_creation\"]\n  );\n  if (metrics.prompt_cache_creation_tokens === void 0) {\n    assignFirstMetric(metrics, \"prompt_cache_creation_tokens\", usage, [\n      \"cache_creation_input_tokens\",\n      \"prompt_cache_creation_tokens\"\n    ]);\n  }\n  if (metrics.tokens === void 0 && (metrics.prompt_tokens !== void 0 || metrics.completion_tokens !== void 0)) {\n    metrics.tokens = (metrics.prompt_tokens ?? 0) + (metrics.completion_tokens ?? 0);\n  }\n  const startTime = timestampSeconds(\n    preferOwnValue(run, previous, \"start_time\")\n  );\n  const events = preferOwnValue(run, previous, \"events\");\n  if (startTime !== void 0 && Array.isArray(events)) {\n    for (const event of events) {\n      if (ownValue(event, \"name\") !== \"new_token\") {\n        continue;\n      }\n      const eventTime3 = timestampSeconds(ownValue(event, \"time\"));\n      if (eventTime3 !== void 0 && eventTime3 >= startTime) {\n        metrics.time_to_first_token = eventTime3 - startTime;\n      }\n      break;\n    }\n  }\n  return metrics;\n}\nfunction assignFirstMetric(metrics, target, source, keys) {\n  for (const key of keys) {\n    const value = ownValue(source, key);\n    if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n      metrics[target] = value;\n      return;\n    }\n  }\n}\nfunction errorMessage(value) {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (value instanceof Error) {\n    return value.message;\n  }\n  return void 0;\n}\nfunction sanitizeLoggedValue(value, seen = /* @__PURE__ */ new WeakSet(), depth = 0) {\n  if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? value : void 0;\n  }\n  if (value instanceof Date) {\n    return Number.isFinite(value.getTime()) ? value.toISOString() : void 0;\n  }\n  if (typeof value !== \"object\" || depth >= 20) {\n    return void 0;\n  }\n  if (seen.has(value)) {\n    return \"[Circular]\";\n  }\n  seen.add(value);\n  if (Array.isArray(value)) {\n    return value.map((item) => sanitizeLoggedValue(item, seen, depth + 1));\n  }\n  const entries = [];\n  for (const [key, descriptor] of Object.entries(\n    Object.getOwnPropertyDescriptors(value)\n  )) {\n    if (!descriptor.enumerable || !(\"value\" in descriptor) || BLOCKED_METADATA_KEYS.has(key)) {\n      continue;\n    }\n    entries.push([key, sanitizeLoggedValue(descriptor.value, seen, depth + 1)]);\n  }\n  return Object.fromEntries(entries);\n}\n\n// src/instrumentation/plugins/pi-coding-agent-channels.ts\nvar piCodingAgentChannels = defineChannels(\n  \"@earendil-works/pi-coding-agent\",\n  {\n    prompt: channel({\n      channelName: \"AgentSession.prompt\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.PI_CODING_AGENT }\n);\n\n// src/instrumentation/plugins/pi-coding-agent-plugin.ts\nvar piAgentPatchStates = /* @__PURE__ */ new WeakMap();\nvar piAgentEventSubscriptions = /* @__PURE__ */ new WeakSet();\nvar PI_TOOL_EXECUTE_WRAPPED = /* @__PURE__ */ Symbol.for(\n  \"braintrust.pi_coding_agent.tool_execute_wrapped\"\n);\nvar piPromptContextStore;\nvar PiCodingAgentPlugin = class extends BasePlugin {\n  activePromptStates = /* @__PURE__ */ new Set();\n  onEnable() {\n    this.interceptPrompt();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n    for (const state of [...this.activePromptStates]) {\n      finishPiPromptRun(state);\n    }\n  }\n  interceptPrompt() {\n    this.unsubscribers.push(\n      piCodingAgentChannels.prompt.intercept(\n        (target, thisArg, args, additional) => {\n          const invokeTarget = () => Reflect.apply(target, thisArg, args);\n          let state;\n          try {\n            state = startPiPromptRun(\n              {\n                ...additional,\n                arguments: args,\n                self: thisArg\n              },\n              (finalizedState) => {\n                this.activePromptStates.delete(finalizedState);\n              }\n            );\n          } catch (error) {\n            logInstrumentationError5(\"Pi Coding Agent prompt start\", error);\n          }\n          if (!state) {\n            return runWithAutoInstrumentationSuppressed(invokeTarget);\n          }\n          this.activePromptStates.add(state);\n          return promptContextStore().run(\n            state,\n            () => runWithAutoInstrumentationSuppressed(() => {\n              let result;\n              try {\n                result = invokeTarget();\n              } catch (error) {\n                finishPiPromptRun(state, error);\n                throw error;\n              }\n              return Promise.resolve(result).then(\n                (value) => {\n                  finishPiPromptCall(state);\n                  return value;\n                },\n                (error) => {\n                  finishPiPromptRun(state, error);\n                  throw error;\n                }\n              );\n            })\n          );\n        }\n      )\n    );\n  }\n};\nfunction finishPiPromptCall(state) {\n  state.promptCallEnded = true;\n  if (state.deferCompletionUntilTurnEnd && !state.turnEnded) {\n    return;\n  }\n  finishPiPromptRun(state);\n}\nfunction startPiPromptRun(event, onFinalize) {\n  const session = extractSession(event);\n  const agent = session?.agent;\n  if (!session || !isPiAgent(agent)) {\n    return void 0;\n  }\n  installPiAgentInstrumentation(agent);\n  wrapPiToolExecutors(agent.state?.tools);\n  const metadata = {\n    ...extractSessionMetadata(session),\n    ...extractPromptOptionsMetadata(event.arguments[1]),\n    \"pi_coding_agent.operation\": \"AgentSession.prompt\",\n    provider: session.model?.provider ?? agent.state?.model?.provider ?? \"pi\",\n    ...session.model?.id || agent.state?.model?.id ? { model: session.model?.id ?? agent.state?.model?.id } : {},\n    ...event.moduleVersion ? { \"pi_coding_agent.version\": event.moduleVersion } : {}\n  };\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          input: extractPromptInput(event.arguments[0], event.arguments[1]),\n          metadata\n        },\n        name: \"AgentSession.prompt\",\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.PI_CODING_AGENT\n    )\n  );\n  const options = event.arguments[1];\n  const state = {\n    activeLlmSpans: /* @__PURE__ */ new Set(),\n    activeToolSpans: /* @__PURE__ */ new Map(),\n    agent,\n    collectedLlmUsageMetrics: false,\n    deferCompletionUntilTurnEnd: options?.streamingBehavior === \"followUp\" || options?.streamingBehavior === \"steer\",\n    finalized: false,\n    metadata,\n    metrics: {},\n    onFinalize,\n    promptCallEnded: false,\n    span,\n    startTime: getCurrentUnixTimestamp(),\n    turnEnded: false\n  };\n  return state;\n}\nfunction extractSession(event) {\n  const candidate = event.session ?? event.self;\n  return isObject(candidate) && typeof candidate.prompt === \"function\" ? candidate : void 0;\n}\nfunction isPiAgent(value) {\n  return isObject(value) && (typeof value.streamFunction === \"function\" || typeof value.streamFn === \"function\") && typeof value.subscribe === \"function\";\n}\nfunction promptContextStore() {\n  piPromptContextStore ??= isomorph_default.newAsyncLocalStorage();\n  return piPromptContextStore;\n}\nfunction currentPiPromptState() {\n  return promptContextStore().getStore();\n}\nfunction installPiAgentInstrumentation(agent) {\n  const property = typeof agent.streamFunction === \"function\" ? \"streamFunction\" : \"streamFn\";\n  const streamFunction = agent[property];\n  const existing = piAgentPatchStates.get(agent);\n  if (streamFunction && (!existing || existing.property !== property || streamFunction !== existing.wrappedStreamFunction)) {\n    const patchState = {\n      originalStreamFunction: streamFunction,\n      property,\n      wrappedStreamFunction: streamFunction\n    };\n    patchState.wrappedStreamFunction = makeInstrumentedStreamFunction(\n      agent,\n      patchState.originalStreamFunction,\n      property\n    );\n    agent[property] = patchState.wrappedStreamFunction;\n    piAgentPatchStates.set(agent, patchState);\n  }\n  if (piAgentEventSubscriptions.has(agent)) {\n    return;\n  }\n  try {\n    agent.subscribe(async (event) => {\n      const state = currentPiPromptState();\n      if (!state || state.agent !== agent || state.finalized) {\n        return;\n      }\n      try {\n        await runWithAutoInstrumentationSuppressed(\n          () => handlePiAgentEvent(state, event)\n        );\n      } catch (error) {\n        logInstrumentationError5(\"Pi Coding Agent event\", error);\n      }\n    });\n    piAgentEventSubscriptions.add(agent);\n  } catch (error) {\n    logInstrumentationError5(\"Pi Coding Agent event subscription\", error);\n  }\n}\nfunction makeInstrumentedStreamFunction(agent, originalStreamFunction, property) {\n  return async function instrumentedPiStreamFunction(model, context, options) {\n    const invokeOriginal = () => Reflect.apply(originalStreamFunction, this, [model, context, options]);\n    const state = currentPiPromptState();\n    if (!state || state.agent !== agent || state.finalized) {\n      return invokeOriginal();\n    }\n    wrapPiToolExecutors(context.tools);\n    const llmState = await startPiLlmSpan(\n      state,\n      model,\n      context,\n      property,\n      options\n    );\n    try {\n      const stream = await runWithAutoInstrumentationSuppressed(invokeOriginal);\n      return patchAssistantMessageStream(stream, state, llmState);\n    } catch (error) {\n      finishPiLlmSpan(state, llmState, void 0, error);\n      throw error;\n    }\n  };\n}\nfunction wrapPiToolExecutors(tools) {\n  if (!tools) {\n    return;\n  }\n  for (const tool of tools) {\n    try {\n      const execute = tool.execute;\n      if (typeof execute !== \"function\" || execute[PI_TOOL_EXECUTE_WRAPPED]) {\n        continue;\n      }\n      const wrappedExecute = function(...args) {\n        const invokeOriginal = () => runWithAutoInstrumentationAllowed(\n          () => Reflect.apply(execute, this, args)\n        );\n        const state = currentPiPromptState();\n        const toolCallId = args[0];\n        const toolState = !state?.finalized && typeof toolCallId === \"string\" ? state?.activeToolSpans.get(toolCallId) : void 0;\n        return toolState ? withCurrent(toolState.span, invokeOriginal) : invokeOriginal();\n      };\n      Object.defineProperty(wrappedExecute, PI_TOOL_EXECUTE_WRAPPED, {\n        configurable: false,\n        enumerable: false,\n        value: true,\n        writable: false\n      });\n      tool.execute = wrappedExecute;\n    } catch (error) {\n      logInstrumentationError5(\"Pi Coding Agent tool wrapping\", error);\n    }\n  }\n}\nasync function startPiLlmSpan(state, model, context, property, options) {\n  const metadata = {\n    ...extractModelMetadata2(model),\n    ...extractStreamOptionsMetadata(options),\n    ...extractToolMetadata(context.tools),\n    \"pi_coding_agent.operation\": `agent.${property}`\n  };\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          input: processInputAttachments(normalizePiContextInput(context)),\n          metadata\n        },\n        name: getLlmSpanName(model),\n        parent: await state.span.export(),\n        spanAttributes: { type: \"llm\" /* LLM */ }\n      },\n      INSTRUMENTATION_NAMES.PI_CODING_AGENT\n    )\n  );\n  const llmState = {\n    finalized: false,\n    metadata,\n    metrics: {},\n    span,\n    startTime: getCurrentUnixTimestamp()\n  };\n  state.activeLlmSpans.add(llmState);\n  return llmState;\n}\nfunction patchAssistantMessageStream(stream, promptState, llmState) {\n  if (!isObject(stream)) {\n    return stream;\n  }\n  const streamRecord = stream;\n  const originalResult = stream.result;\n  if (typeof originalResult === \"function\") {\n    streamRecord.result = function patchedPiResult() {\n      return Promise.resolve(Reflect.apply(originalResult, this, [])).then(\n        (message) => {\n          finishPiLlmSpan(promptState, llmState, message);\n          return message;\n        },\n        (error) => {\n          finishPiLlmSpan(promptState, llmState, void 0, error);\n          throw error;\n        }\n      );\n    };\n  }\n  const originalIterator = stream[Symbol.asyncIterator];\n  if (typeof originalIterator === \"function\") {\n    streamRecord[Symbol.asyncIterator] = function patchedPiIterator() {\n      const iterator = Reflect.apply(\n        originalIterator,\n        this,\n        []\n      );\n      return {\n        async next() {\n          try {\n            const result = await iterator.next();\n            if (result.done) {\n              finishPiLlmSpan(promptState, llmState);\n              return result;\n            }\n            recordPiAssistantMessageEvent(promptState, llmState, result.value);\n            return result;\n          } catch (error) {\n            finishPiLlmSpan(promptState, llmState, void 0, error);\n            if (typeof iterator.return === \"function\") {\n              try {\n                await iterator.return();\n              } catch (cleanupError) {\n                logInstrumentationError5(\n                  \"Pi Coding Agent stream cleanup\",\n                  cleanupError\n                );\n              }\n            }\n            throw error;\n          }\n        },\n        async return(value) {\n          try {\n            if (typeof iterator.return === \"function\") {\n              return await iterator.return(value);\n            }\n            return {\n              done: true,\n              value\n            };\n          } catch (error) {\n            finishPiLlmSpan(promptState, llmState, void 0, error);\n            throw error;\n          } finally {\n            finishPiLlmSpan(promptState, llmState);\n          }\n        },\n        async throw(error) {\n          try {\n            if (typeof iterator.throw === \"function\") {\n              return await iterator.throw(error);\n            }\n            throw error;\n          } catch (thrownError) {\n            finishPiLlmSpan(promptState, llmState, void 0, thrownError);\n            throw thrownError;\n          }\n        },\n        [Symbol.asyncIterator]() {\n          return this;\n        }\n      };\n    };\n  }\n  return stream;\n}\nfunction recordPiAssistantMessageEvent(promptState, llmState, event) {\n  recordFirstTokenMetric(llmState, event);\n  const message = \"message\" in event ? event.message : void 0;\n  const errorMessage3 = \"error\" in event ? event.error : void 0;\n  if (event.type === \"done\" && isPiAssistantMessage(message)) {\n    finishPiLlmSpan(promptState, llmState, message);\n  } else if (event.type === \"error\" && isPiAssistantMessage(errorMessage3)) {\n    finishPiLlmSpan(promptState, llmState, errorMessage3);\n  }\n}\nfunction recordFirstTokenMetric(state, event) {\n  if (state.metrics.time_to_first_token !== void 0 || event.type === \"start\") {\n    return;\n  }\n  state.metrics.time_to_first_token = getCurrentUnixTimestamp() - state.startTime;\n}\nasync function handlePiAgentEvent(state, event) {\n  if (state.finalized) {\n    return;\n  }\n  switch (event.type) {\n    case \"message_end\":\n      if (isPiAssistantMessage(event.message)) {\n        state.output = extractAssistantOutput(event.message);\n      }\n      return;\n    case \"turn_end\":\n      state.turnEnded = true;\n      if (isPiAssistantMessage(event.message)) {\n        state.output = extractAssistantOutput(event.message);\n        if (!state.collectedLlmUsageMetrics) {\n          addMetrics(state.metrics, extractUsageMetrics2(event.message.usage));\n        }\n      }\n      if (state.promptCallEnded && state.deferCompletionUntilTurnEnd) {\n        finishPiPromptRun(state);\n      }\n      return;\n    case \"tool_execution_start\":\n      await startPiToolSpan(state, event);\n      return;\n    case \"tool_execution_end\":\n      finishPiToolSpan(state, event);\n      return;\n    default:\n      return;\n  }\n}\nasync function startPiToolSpan(state, event) {\n  if (!event.toolCallId || state.activeToolSpans.has(event.toolCallId)) {\n    return;\n  }\n  const metadata = {\n    \"gen_ai.tool.call.id\": event.toolCallId,\n    \"gen_ai.tool.name\": event.toolName,\n    \"pi_coding_agent.tool.name\": event.toolName\n  };\n  const span = startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          input: event.args,\n          metadata\n        },\n        name: event.toolName || \"tool\",\n        parent: await state.span.export(),\n        spanAttributes: { type: \"tool\" /* TOOL */ }\n      },\n      INSTRUMENTATION_NAMES.PI_CODING_AGENT\n    )\n  );\n  state.activeToolSpans.set(event.toolCallId, { span });\n}\nfunction finishPiToolSpan(state, event) {\n  const toolState = state.activeToolSpans.get(event.toolCallId);\n  if (!toolState) {\n    return;\n  }\n  state.activeToolSpans.delete(event.toolCallId);\n  const metadata = {\n    \"gen_ai.tool.call.id\": event.toolCallId,\n    \"gen_ai.tool.name\": event.toolName,\n    \"pi_coding_agent.tool.name\": event.toolName,\n    \"pi_coding_agent.tool.is_error\": event.isError\n  };\n  try {\n    safeLog4(toolState.span, {\n      ...event.isError ? { error: toLoggedError(event.result) } : {},\n      metadata,\n      output: event.result\n    });\n  } finally {\n    toolState.span.end();\n  }\n}\nfunction finishPiPromptRun(state, error) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  state.onFinalize?.(state);\n  finishOpenLlmSpans(state, error);\n  finishOpenToolSpans(state, error);\n  const metadata = {\n    ...state.metadata,\n    ...extractModelMetadata2(state.agent.state?.model)\n  };\n  try {\n    safeLog4(state.span, {\n      ...error ? { error: toLoggedError(error) } : {},\n      metadata,\n      metrics: {\n        ...cleanMetrics5(state.metrics),\n        ...buildDurationMetrics3(state.startTime)\n      },\n      output: state.output\n    });\n  } finally {\n    try {\n      state.span.end();\n    } catch (endError) {\n      logInstrumentationError5(\"Pi Coding Agent prompt end\", endError);\n    }\n  }\n}\nfunction finishOpenLlmSpans(state, error) {\n  for (const llmState of [...state.activeLlmSpans]) {\n    finishPiLlmSpan(state, llmState, void 0, error);\n  }\n}\nfunction finishPiLlmSpan(promptState, llmState, message, error) {\n  if (llmState.finalized) {\n    return;\n  }\n  llmState.finalized = true;\n  promptState.activeLlmSpans.delete(llmState);\n  const messageError = message?.stopReason === \"error\" && message.errorMessage;\n  const metrics = {\n    ...extractUsageMetrics2(message?.usage),\n    ...cleanMetrics5(llmState.metrics),\n    ...buildDurationMetrics3(llmState.startTime)\n  };\n  const usageMetrics2 = extractUsageMetrics2(message?.usage);\n  if (Object.keys(usageMetrics2).length > 0) {\n    promptState.collectedLlmUsageMetrics = true;\n    addMetrics(promptState.metrics, usageMetrics2);\n  }\n  try {\n    safeLog4(llmState.span, {\n      ...error || messageError ? { error: toLoggedError(error ?? messageError) } : {},\n      metadata: {\n        ...llmState.metadata,\n        ...message ? extractAssistantMetadata(message) : {}\n      },\n      metrics,\n      ...message ? { output: extractAssistantOutput(message) } : {}\n    });\n  } finally {\n    llmState.span.end();\n  }\n}\nfunction finishOpenToolSpans(state, error) {\n  for (const [, toolState] of state.activeToolSpans) {\n    safeLog4(toolState.span, {\n      error: error ? toLoggedError(error) : \"Pi tool did not complete\"\n    });\n    toolState.span.end();\n  }\n  state.activeToolSpans.clear();\n}\nfunction normalizePiContextInput(context) {\n  const messages = context.messages.flatMap(\n    (message) => normalizePiMessage(message)\n  );\n  if (context.systemPrompt) {\n    return [{ role: \"system\", content: context.systemPrompt }, ...messages];\n  }\n  return messages;\n}\nfunction normalizePiMessage(message) {\n  if (isPiUserMessage(message)) {\n    return [\n      {\n        role: \"user\",\n        content: normalizeUserContent(message.content)\n      }\n    ];\n  }\n  if (isPiAssistantMessage(message)) {\n    return [normalizeAssistantMessage(message)];\n  }\n  if (isPiToolResultMessage(message)) {\n    return [normalizeToolResultMessage(message)];\n  }\n  return [];\n}\nfunction normalizeAssistantMessage(message) {\n  const text = message.content.flatMap((part) => part.type === \"text\" ? [part.text] : []).join(\"\");\n  const thinking = message.content.flatMap(\n    (part) => part.type === \"thinking\" && !part.redacted ? [part.thinking] : []\n  ).join(\"\");\n  const toolCalls2 = message.content.flatMap(\n    (part) => part.type === \"toolCall\" ? [normalizeToolCall2(part)] : []\n  );\n  return {\n    role: \"assistant\",\n    content: text || (toolCalls2.length > 0 ? null : \"\"),\n    ...thinking ? { reasoning: thinking } : {},\n    ...toolCalls2.length > 0 ? { tool_calls: toolCalls2 } : {}\n  };\n}\nfunction normalizeToolResultMessage(message) {\n  return {\n    role: \"tool\",\n    tool_call_id: message.toolCallId,\n    content: normalizeUserContent(message.content)\n  };\n}\nfunction normalizeUserContent(content) {\n  if (typeof content === \"string\") {\n    return content;\n  }\n  return content.map((part) => {\n    if (part.type === \"text\") {\n      return { type: \"text\", text: part.text };\n    }\n    if (part.type === \"image\") {\n      return {\n        type: \"image_url\",\n        image_url: {\n          url: `data:${part.mimeType};base64,${part.data}`\n        }\n      };\n    }\n    return part;\n  });\n}\nfunction normalizeToolCall2(toolCall) {\n  return {\n    id: toolCall.id,\n    type: \"function\",\n    function: {\n      name: toolCall.name,\n      arguments: stringifyArguments2(toolCall.arguments)\n    }\n  };\n}\nfunction extractAssistantOutput(message) {\n  return processInputAttachments([\n    {\n      finish_reason: normalizeStopReason(message.stopReason),\n      index: 0,\n      message: normalizeAssistantMessage(message)\n    }\n  ]);\n}\nfunction isPiUserMessage(message) {\n  return message.role === \"user\" && \"content\" in message;\n}\nfunction isPiAssistantMessage(message) {\n  return isObject(message) && message.role === \"assistant\" && Array.isArray(message.content);\n}\nfunction isPiToolResultMessage(message) {\n  return message.role === \"toolResult\" && Array.isArray(message.content);\n}\nfunction normalizeStopReason(reason) {\n  switch (reason) {\n    case \"toolUse\":\n      return \"tool_calls\";\n    case \"length\":\n    case \"stop\":\n      return reason;\n    default:\n      return reason ?? \"stop\";\n  }\n}\nfunction extractPromptInput(text, options) {\n  const images = options?.images;\n  if (!images || images.length === 0) {\n    return text;\n  }\n  return processInputAttachments([\n    {\n      role: \"user\",\n      content: [\n        { type: \"text\", text: text ?? \"\" },\n        ...images.map((image) => ({\n          type: \"image_url\",\n          image_url: {\n            url: `data:${image.mimeType};base64,${image.data}`\n          }\n        }))\n      ]\n    }\n  ]);\n}\nfunction extractToolMetadata(tools) {\n  if (!tools || tools.length === 0) {\n    return {};\n  }\n  return {\n    tools: tools.map((tool) => ({\n      type: \"function\",\n      function: {\n        name: tool.name,\n        ...tool.description ? { description: tool.description } : {},\n        ...tool.parameters ? { parameters: tool.parameters } : {}\n      }\n    }))\n  };\n}\nfunction extractModelMetadata2(model) {\n  if (!model) {\n    return {};\n  }\n  return {\n    ...model.provider ? { provider: model.provider } : {},\n    ...model.id ? { model: model.id, \"pi_coding_agent.model\": model.id } : {},\n    ...model.api ? { \"pi_coding_agent.api\": model.api } : {},\n    ...model.name ? { \"pi_coding_agent.model_name\": model.name } : {}\n  };\n}\nfunction extractAssistantMetadata(message) {\n  return {\n    ...message.provider ? { provider: message.provider } : {},\n    ...message.responseModel || message.model ? { model: message.responseModel ?? message.model } : {},\n    ...message.api ? { \"pi_coding_agent.api\": message.api } : {},\n    ...message.model ? { \"pi_coding_agent.model\": message.model } : {},\n    ...message.responseModel ? { \"pi_coding_agent.response_model\": message.responseModel } : {},\n    ...message.responseId ? { \"pi_coding_agent.response_id\": message.responseId } : {},\n    ...message.stopReason ? { \"pi_coding_agent.stop_reason\": message.stopReason } : {}\n  };\n}\nfunction extractSessionMetadata(session) {\n  return {\n    ...extractModelMetadata2(session.model),\n    ...session.sessionId ? { \"pi_coding_agent.session_id\": session.sessionId } : {},\n    ...session.sessionName ? { \"pi_coding_agent.session_name\": session.sessionName } : {},\n    ...session.thinkingLevel ? { \"pi_coding_agent.thinking_level\": session.thinkingLevel } : {},\n    ...typeof session.getActiveToolNames === \"function\" ? { \"pi_coding_agent.active_tools\": session.getActiveToolNames() } : {}\n  };\n}\nfunction extractPromptOptionsMetadata(options) {\n  if (!options) {\n    return {};\n  }\n  return {\n    ...options.source ? { \"pi_coding_agent.source\": options.source } : {},\n    ...options.streamingBehavior ? { \"pi_coding_agent.streaming_behavior\": options.streamingBehavior } : {},\n    ...options.expandPromptTemplates !== void 0 ? {\n      \"pi_coding_agent.expand_prompt_templates\": options.expandPromptTemplates\n    } : {}\n  };\n}\nfunction extractStreamOptionsMetadata(options) {\n  if (!options) {\n    return {};\n  }\n  return {\n    ...options.temperature !== void 0 ? { temperature: options.temperature } : {},\n    ...options.maxTokens !== void 0 ? { max_tokens: options.maxTokens } : {},\n    ...options.reasoning ? { \"pi_coding_agent.reasoning\": options.reasoning } : {},\n    ...options.transport ? { \"pi_coding_agent.transport\": options.transport } : {},\n    ...options.cacheRetention ? { \"pi_coding_agent.cache_retention\": options.cacheRetention } : {},\n    ...options.sessionId ? { \"pi_coding_agent.session_id\": options.sessionId } : {},\n    ...options.timeoutMs !== void 0 ? { \"pi_coding_agent.timeout_ms\": options.timeoutMs } : {},\n    ...options.maxRetries !== void 0 ? { \"pi_coding_agent.max_retries\": options.maxRetries } : {},\n    ...options.maxRetryDelayMs !== void 0 ? { \"pi_coding_agent.max_retry_delay_ms\": options.maxRetryDelayMs } : {},\n    ...options.metadata ? { \"pi_coding_agent.metadata\": options.metadata } : {}\n  };\n}\nfunction getLlmSpanName(model) {\n  switch (model.api) {\n    case \"anthropic-messages\":\n      return \"anthropic.messages.create\";\n    case \"openai-completions\":\n      return \"Chat Completion\";\n    case \"openai-responses\":\n    case \"azure-openai-responses\":\n    case \"openai-codex-responses\":\n      return \"openai.responses.create\";\n    case \"google-generative-ai\":\n    case \"google-vertex\":\n      return \"generate_content\";\n    case \"mistral-conversations\":\n      return \"mistral.chat.stream\";\n    case \"bedrock-converse-stream\":\n      return \"bedrock.converse_stream\";\n    default:\n      return \"pi_ai.streamSimple\";\n  }\n}\nfunction extractUsageMetrics2(usage) {\n  if (!usage) {\n    return {};\n  }\n  return cleanMetrics5({\n    completion_tokens: usage.output,\n    prompt_cache_creation_tokens: usage.cacheWrite,\n    prompt_cached_tokens: usage.cacheRead,\n    prompt_tokens: usage.input,\n    tokens: usage.totalTokens ?? usage.tokens\n  });\n}\nfunction addMetrics(target, source) {\n  for (const [key, value] of Object.entries(source)) {\n    target[key] = (target[key] ?? 0) + value;\n  }\n}\nfunction buildDurationMetrics3(startTime) {\n  const end = getCurrentUnixTimestamp();\n  return {\n    duration: end - startTime,\n    end,\n    start: startTime\n  };\n}\nfunction cleanMetrics5(metrics) {\n  const cleaned = {};\n  for (const [key, value] of Object.entries(metrics)) {\n    if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n      cleaned[key] = value;\n    }\n  }\n  return cleaned;\n}\nfunction stringifyArguments2(value) {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return stringifyUnknown(value);\n  }\n}\nfunction stringifyUnknown(value) {\n  if (value instanceof Error) {\n    return value.message;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n}\nfunction safeLog4(span, event) {\n  try {\n    span.log(event);\n  } catch (error) {\n    logInstrumentationError5(\"Pi Coding Agent span log\", error);\n  }\n}\nfunction logInstrumentationError5(context, error) {\n  debugLogger.debug(`${context}:`, error);\n}\n\n// src/instrumentation/plugins/strands-agent-sdk-channels.ts\nvar strandsAgentSDKChannels = defineChannels(\n  \"@strands-agents/sdk\",\n  {\n    agentStream: channel({\n      channelName: \"Agent.stream\",\n      kind: \"sync-stream\"\n    }),\n    graphStream: channel({\n      channelName: \"Graph.stream\",\n      kind: \"sync-stream\"\n    }),\n    swarmStream: channel({\n      channelName: \"Swarm.stream\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK }\n);\n\n// src/instrumentation/plugins/strands-agent-sdk-plugin.ts\nvar MAX_STRANDS_STRING_ATTACHMENT_CACHE_ENTRIES = 32;\nvar StrandsAgentSDKPlugin = class extends BasePlugin {\n  activeChildParents = /* @__PURE__ */ new WeakMap();\n  onEnable() {\n    this.interceptAgentStream();\n    this.interceptMultiAgentStream(\n      strandsAgentSDKChannels.graphStream,\n      \"Graph.stream\"\n    );\n    this.interceptMultiAgentStream(\n      strandsAgentSDKChannels.swarmStream,\n      \"Swarm.stream\"\n    );\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n  }\n  interceptAgentStream() {\n    this.unsubscribers.push(\n      strandsAgentSDKChannels.agentStream.intercept(\n        (target, thisArg, args, additional) => instrumentStrandsStreamInvocation({\n          finalize: finalizeAgentStream,\n          handleChunk: handleAgentStreamEvent,\n          invoke: () => Reflect.apply(target, thisArg, args),\n          name: \"Strands Agent SDK\",\n          start: () => startAgentStream(\n            args[0],\n            extractAgent(additional.agent, thisArg),\n            this.activeChildParents\n          )\n        })\n      )\n    );\n  }\n  interceptMultiAgentStream(channel2, operation) {\n    this.unsubscribers.push(\n      channel2.intercept(\n        (target, thisArg, args, additional) => instrumentStrandsStreamInvocation({\n          finalize: (state, error, output) => finalizeMultiAgentStream(\n            state,\n            this.activeChildParents,\n            error,\n            output\n          ),\n          handleChunk: (state, chunk) => handleMultiAgentStreamEvent(state, chunk, this.activeChildParents),\n          invoke: () => Reflect.apply(target, thisArg, args),\n          name: \"Strands multi-agent\",\n          start: () => startMultiAgentStream(\n            args[0],\n            extractOrchestrator(additional.orchestrator, thisArg),\n            operation,\n            this.activeChildParents\n          )\n        })\n      )\n    );\n  }\n};\nfunction instrumentStrandsStreamInvocation(options) {\n  let state;\n  try {\n    state = options.start();\n  } catch (error) {\n    debugLogger.error(`Error starting ${options.name} instrumentation:`, error);\n  }\n  let result;\n  try {\n    result = runWithAutoInstrumentationSuppressed(options.invoke);\n  } catch (error) {\n    if (state) {\n      try {\n        options.finalize(state, error);\n      } catch (instrumentationError) {\n        debugLogger.error(\n          `Error handling ${options.name} instrumentation failure:`,\n          instrumentationError\n        );\n      }\n    }\n    throw error;\n  }\n  if (state) {\n    try {\n      if (isAsyncIterable(result)) {\n        patchStreamIfNeeded(result, {\n          aroundNext: (callback) => runWithAutoInstrumentationSuppressed(callback),\n          onChunk: (chunk) => options.handleChunk(state, chunk),\n          onComplete: () => options.finalize(state),\n          onError: (error) => options.finalize(state, error)\n        });\n      } else {\n        options.finalize(state, void 0, result);\n      }\n    } catch (error) {\n      debugLogger.error(\n        `Error finalizing ${options.name} instrumentation:`,\n        error\n      );\n    }\n  }\n  return result;\n}\nfunction startAgentStream(input, agent, activeChildParents) {\n  const model = agent?.model;\n  const metadata = {\n    ...extractAgentMetadata2(agent),\n    ...extractModelMetadata3(model),\n    \"strands.operation\": \"Agent.stream\",\n    provider: extractProvider(model)\n  };\n  const parentSpan = agent ? getOnlyChildParent(activeChildParents, agent) : void 0;\n  const attachmentCache = createStrandsAttachmentCache();\n  const processedInput = processStrandsInputAttachments(input, attachmentCache);\n  const span = parentSpan ? withCurrent(\n    parentSpan,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: processedInput,\n            metadata\n          },\n          name: formatAgentSpanName(agent),\n          spanAttributes: { type: \"task\" /* TASK */ }\n        },\n        INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n      )\n    )\n  ) : startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          input: processedInput,\n          metadata\n        },\n        name: formatAgentSpanName(agent),\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n    )\n  );\n  return {\n    activeTools: /* @__PURE__ */ new Map(),\n    attachmentCache,\n    finalized: false,\n    metadata,\n    span,\n    startTime: getCurrentUnixTimestamp()\n  };\n}\nfunction startMultiAgentStream(input, orchestrator, operation, activeChildParents) {\n  const metadata = {\n    \"strands.operation\": operation,\n    provider: \"strands\",\n    ...orchestrator?.id ? { \"strands.orchestrator.id\": orchestrator.id } : {}\n  };\n  const parentSpan = orchestrator ? getOnlyChildParent(activeChildParents, orchestrator) : void 0;\n  const processedInput = processStrandsInputAttachments(input);\n  const span = parentSpan ? withCurrent(\n    parentSpan,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: processedInput,\n            metadata\n          },\n          name: operation === \"Graph.stream\" ? \"Strands Graph\" : \"Strands Swarm\",\n          spanAttributes: { type: \"task\" /* TASK */ }\n        },\n        INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n      )\n    )\n  ) : startSpan(\n    withSpanInstrumentationName(\n      {\n        event: {\n          input: processedInput,\n          metadata\n        },\n        name: operation === \"Graph.stream\" ? \"Strands Graph\" : \"Strands Swarm\",\n        spanAttributes: { type: \"task\" /* TASK */ }\n      },\n      INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n    )\n  );\n  return {\n    activeNodes: /* @__PURE__ */ new Map(),\n    finalized: false,\n    handoffs: [],\n    metadata,\n    operation,\n    orchestrator,\n    span,\n    startTime: getCurrentUnixTimestamp()\n  };\n}\nfunction handleAgentStreamEvent(state, event) {\n  try {\n    switch (event.type) {\n      case \"beforeModelCallEvent\":\n        startModelSpan(state, event);\n        break;\n      case \"modelStreamUpdateEvent\":\n        collectModelStreamMetadata(state, event);\n        break;\n      case \"afterModelCallEvent\":\n        finalizeModelSpan(state, event);\n        break;\n      case \"beforeToolCallEvent\":\n        startToolSpan3(state, event);\n        break;\n      case \"afterToolCallEvent\":\n        finalizeToolSpan(state, event);\n        break;\n      case \"toolResultEvent\":\n        finalizeToolSpanFromResult(state, event.result);\n        break;\n      case \"agentResultEvent\":\n        safeLog5(state.span, {\n          metadata: {\n            ...state.metadata,\n            ...extractAgentResultMetadata(event.result)\n          },\n          metrics: {\n            ...buildDurationMetrics4(state.startTime),\n            ...parseUsage(event.result?.metrics?.accumulatedUsage)\n          },\n          output: extractAgentResultOutput(event.result)\n        });\n        break;\n      default:\n        break;\n    }\n  } catch (error) {\n    logInstrumentationError6(\"Strands Agent SDK event\", error);\n  }\n}\nfunction handleMultiAgentStreamEvent(state, event, activeChildParents) {\n  try {\n    switch (event.type) {\n      case \"beforeNodeCallEvent\":\n        startNodeSpan(state, event, activeChildParents);\n        break;\n      case \"nodeResultEvent\":\n        logNodeResult(state, event);\n        break;\n      case \"afterNodeCallEvent\":\n        finalizeNodeSpan(state, event, activeChildParents);\n        break;\n      case \"multiAgentHandoffEvent\":\n        collectHandoff(state, event);\n        break;\n      case \"multiAgentResultEvent\":\n        safeLog5(state.span, {\n          metadata: {\n            ...state.metadata,\n            ...state.handoffs.length > 0 ? { \"strands.handoffs\": state.handoffs } : {},\n            ...extractMultiAgentResultMetadata(event.result)\n          },\n          metrics: {\n            ...buildDurationMetrics4(state.startTime),\n            ...parseUsage(event.result?.usage)\n          },\n          output: extractMultiAgentResultOutput(event.result)\n        });\n        break;\n      default:\n        break;\n    }\n  } catch (error) {\n    logInstrumentationError6(\"Strands Agent SDK multi-agent event\", error);\n  }\n}\nfunction buildModelSpanInput(event, attachmentCache) {\n  const systemPrompt = typeof event.agent?.systemPrompt === \"string\" && event.agent.systemPrompt.length > 0 ? event.agent.systemPrompt : void 0;\n  const processedMessages = Array.isArray(event.agent?.messages) ? processStrandsInputAttachments(event.agent.messages, attachmentCache) : void 0;\n  if (!systemPrompt) {\n    return processedMessages;\n  }\n  const systemMessage = { role: \"system\", content: systemPrompt };\n  return Array.isArray(processedMessages) ? [systemMessage, ...processedMessages] : [systemMessage];\n}\nfunction startModelSpan(state, event) {\n  if (state.activeModel) {\n    finalizeModelSpan(state);\n  }\n  const model = event.model ?? event.agent?.model;\n  const metadata = {\n    ...extractModelMetadata3(model),\n    \"strands.operation\": \"model.stream\",\n    ...typeof event.projectedInputTokens === \"number\" ? { \"strands.projected_input_tokens\": event.projectedInputTokens } : {},\n    provider: extractProvider(model)\n  };\n  const span = withCurrent(\n    state.span,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: buildModelSpanInput(event, state.attachmentCache),\n            metadata\n          },\n          name: formatModelSpanName(model),\n          spanAttributes: { type: \"llm\" /* LLM */ }\n        },\n        INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n      )\n    )\n  );\n  state.activeModel = {\n    metadata,\n    metrics: typeof event.projectedInputTokens === \"number\" ? { prompt_tokens: event.projectedInputTokens } : {},\n    span,\n    startTime: getCurrentUnixTimestamp()\n  };\n}\nfunction collectModelStreamMetadata(state, event) {\n  if (!state.activeModel || event.event?.type !== \"modelMetadataEvent\") {\n    return;\n  }\n  Object.assign(state.activeModel.metrics, parseUsage(event.event.usage));\n  Object.assign(\n    state.activeModel.metrics,\n    parseModelMetrics(event.event.metrics)\n  );\n}\nfunction finalizeModelSpan(state, event) {\n  const modelState = state.activeModel;\n  if (!modelState) {\n    return;\n  }\n  state.activeModel = void 0;\n  const metadata = {\n    ...modelState.metadata,\n    ...event?.attemptCount ? { \"strands.model.attempt\": event.attemptCount } : {},\n    ...event?.stopData?.stopReason ? { \"strands.stop_reason\": event.stopData.stopReason } : {}\n  };\n  const metrics = {\n    ...buildDurationMetrics4(modelState.startTime),\n    ...modelState.metrics\n  };\n  safeLog5(modelState.span, {\n    ...event?.error ? { error: toLoggedError(event.error) } : {},\n    metadata,\n    metrics: cleanMetrics6(metrics),\n    output: event?.stopData?.message\n  });\n  modelState.span.end();\n}\nfunction startToolSpan3(state, event) {\n  const toolUse = event.toolUse;\n  const key = toolKey2(toolUse);\n  if (state.activeTools.has(key)) {\n    finalizeToolSpanState(state.activeTools.get(key));\n    state.activeTools.delete(key);\n  }\n  const name = extractToolName3(toolUse, event.tool);\n  const span = withCurrent(\n    state.span,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: toolUse?.input,\n            metadata: {\n              \"gen_ai.tool.call.id\": toolUse?.toolUseId,\n              \"gen_ai.tool.name\": name,\n              \"strands.operation\": \"tool.call\",\n              \"strands.tool.name\": name,\n              provider: \"strands\"\n            }\n          },\n          name: `tool: ${name}`,\n          spanAttributes: { type: \"tool\" /* TOOL */ }\n        },\n        INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n      )\n    )\n  );\n  state.activeTools.set(key, {\n    span,\n    startTime: getCurrentUnixTimestamp(),\n    toolUse\n  });\n}\nfunction finalizeToolSpan(state, event) {\n  const key = toolKey2(event.toolUse);\n  const toolState = state.activeTools.get(key);\n  if (!toolState) {\n    return;\n  }\n  state.activeTools.delete(key);\n  finalizeToolSpanState(toolState, {\n    error: event.error,\n    result: event.result,\n    toolUse: event.toolUse\n  });\n}\nfunction finalizeToolSpanFromResult(state, result) {\n  if (!isObject(result)) {\n    return;\n  }\n  const toolUseId = result.toolUseId;\n  if (typeof toolUseId !== \"string\") {\n    return;\n  }\n  const toolState = state.activeTools.get(toolUseId);\n  if (!toolState) {\n    return;\n  }\n  state.activeTools.delete(toolUseId);\n  finalizeToolSpanState(toolState, { result });\n}\nfunction finalizeToolSpanState(toolState, data = {}) {\n  if (!toolState) {\n    return;\n  }\n  const result = data.result;\n  safeLog5(toolState.span, {\n    ...data.error ? { error: toLoggedError(data.error) } : {},\n    metadata: {\n      ...data.toolUse?.toolUseId ?? toolState.toolUse?.toolUseId ? {\n        \"gen_ai.tool.call.id\": data.toolUse?.toolUseId ?? toolState.toolUse?.toolUseId\n      } : {},\n      ...extractToolName3(data.toolUse ?? toolState.toolUse) ? {\n        \"gen_ai.tool.name\": extractToolName3(\n          data.toolUse ?? toolState.toolUse\n        )\n      } : {},\n      ...isObject(result) && typeof result.status === \"string\" ? { \"strands.tool.status\": result.status } : {}\n    },\n    metrics: buildDurationMetrics4(toolState.startTime),\n    output: result\n  });\n  toolState.span.end();\n}\nfunction startNodeSpan(state, event, activeChildParents) {\n  const nodeId = event.nodeId ?? \"unknown\";\n  const node = findNode(event.orchestrator ?? state.orchestrator, nodeId);\n  const child = extractNodeChild(node);\n  const metadata = {\n    \"strands.node.id\": nodeId,\n    ...node?.type ? { \"strands.node.type\": node.type } : {},\n    \"strands.operation\": \"node.call\",\n    provider: \"strands\"\n  };\n  const span = withCurrent(\n    state.span,\n    () => startSpan(\n      withSpanInstrumentationName(\n        {\n          event: { metadata },\n          name: `node: ${nodeId}`,\n          spanAttributes: { type: \"task\" /* TASK */ }\n        },\n        INSTRUMENTATION_NAMES.STRANDS_AGENT_SDK\n      )\n    )\n  );\n  const nodeState = {\n    ...child ? { child } : {},\n    span,\n    startTime: getCurrentUnixTimestamp()\n  };\n  state.activeNodes.set(nodeId, nodeState);\n  if (child) {\n    pushChildParent(activeChildParents, child, span);\n  }\n}\nfunction logNodeResult(state, event) {\n  const nodeId = event.nodeId ?? event.result?.nodeId ?? \"unknown\";\n  const nodeState = state.activeNodes.get(nodeId);\n  if (!nodeState) {\n    return;\n  }\n  safeLog5(nodeState.span, {\n    ...event.result?.error ? { error: toLoggedError(event.result.error) } : {},\n    metadata: {\n      ...event.nodeType ? { \"strands.node.type\": event.nodeType } : {},\n      ...event.result?.status ? { \"strands.node.status\": event.result.status } : {}\n    },\n    metrics: {\n      ...buildDurationMetrics4(nodeState.startTime),\n      ...typeof event.result?.duration === \"number\" ? { \"strands.node.duration_ms\": event.result.duration } : {},\n      ...parseUsage(event.result?.usage)\n    },\n    output: extractNodeResultOutput(event.result)\n  });\n}\nfunction finalizeNodeSpan(state, event, activeChildParents) {\n  const nodeId = event.nodeId ?? \"unknown\";\n  const nodeState = state.activeNodes.get(nodeId);\n  if (!nodeState) {\n    return;\n  }\n  state.activeNodes.delete(nodeId);\n  if (event.error) {\n    safeLog5(nodeState.span, { error: toLoggedError(event.error) });\n  }\n  nodeState.span.end();\n  if (nodeState.child) {\n    popChildParent(activeChildParents, nodeState.child, nodeState.span);\n  }\n}\nfunction collectHandoff(state, event) {\n  state.handoffs.push({\n    ...event.source ? { source: event.source } : {},\n    ...Array.isArray(event.targets) ? { targets: event.targets } : {}\n  });\n}\nfunction finalizeAgentStream(state, error, output) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  finalizeModelSpan(state);\n  for (const toolState of state.activeTools.values()) {\n    finalizeToolSpanState(toolState);\n  }\n  state.activeTools.clear();\n  safeLog5(state.span, {\n    ...error ? { error: toLoggedError(error) } : {},\n    metrics: buildDurationMetrics4(state.startTime),\n    ...output !== void 0 ? { output } : {}\n  });\n  state.span.end();\n  state.attachmentCache.strings.clear();\n}\nfunction finalizeMultiAgentStream(state, activeChildParents, error, output) {\n  if (state.finalized) {\n    return;\n  }\n  state.finalized = true;\n  for (const nodeState of state.activeNodes.values()) {\n    if (nodeState.child) {\n      popChildParent(activeChildParents, nodeState.child, nodeState.span);\n    }\n    nodeState.span.end();\n  }\n  state.activeNodes.clear();\n  safeLog5(state.span, {\n    ...error ? { error: toLoggedError(error) } : {},\n    metrics: buildDurationMetrics4(state.startTime),\n    ...output !== void 0 ? { output } : {}\n  });\n  state.span.end();\n}\nfunction extractAgent(agent, self) {\n  const candidate = agent ?? self;\n  return isObject(candidate) && typeof candidate.stream === \"function\" ? candidate : void 0;\n}\nfunction extractOrchestrator(orchestrator, self) {\n  const candidate = orchestrator ?? self;\n  return isObject(candidate) && typeof candidate.stream === \"function\" ? candidate : void 0;\n}\nfunction extractAgentMetadata2(agent) {\n  return {\n    ...agent?.id ? { \"strands.agent.id\": agent.id } : {},\n    ...agent?.name ? { \"strands.agent.name\": agent.name } : {},\n    ...agent?.description ? { \"strands.agent.description\": agent.description } : {}\n  };\n}\nfunction extractModelMetadata3(model) {\n  const config = getModelConfig(model);\n  const modelName2 = extractModelName2(model);\n  return {\n    ...modelName2 ? { model: modelName2 } : {},\n    ...config?.api ? { \"strands.model.api\": config.api } : {},\n    ...model?.stateful !== void 0 ? { \"strands.model.stateful\": model.stateful } : {}\n  };\n}\nfunction extractAgentResultMetadata(result) {\n  return {\n    ...result?.stopReason ? { \"strands.stop_reason\": result.stopReason } : {},\n    ...typeof result?.metrics?.latestContextSize === \"number\" ? { \"strands.context_size\": result.metrics.latestContextSize } : {},\n    ...typeof result?.metrics?.projectedContextSize === \"number\" ? {\n      \"strands.projected_context_size\": result.metrics.projectedContextSize\n    } : {}\n  };\n}\nfunction extractMultiAgentResultMetadata(result) {\n  return {\n    ...result?.status ? { \"strands.status\": result.status } : {},\n    ...typeof result?.duration === \"number\" ? { \"strands.duration_ms\": result.duration } : {}\n  };\n}\nfunction extractProvider(model) {\n  const config = getModelConfig(model);\n  if (typeof config?.provider === \"string\") {\n    return config.provider;\n  }\n  const constructorName = getConstructorName(model).toLowerCase();\n  if (constructorName.includes(\"openai\")) {\n    return \"openai\";\n  }\n  if (constructorName.includes(\"anthropic\")) {\n    return \"anthropic\";\n  }\n  if (constructorName.includes(\"bedrock\")) {\n    return \"bedrock\";\n  }\n  if (constructorName.includes(\"google\")) {\n    return \"google\";\n  }\n  if (constructorName.includes(\"vercel\")) {\n    return \"vercel\";\n  }\n  return \"strands\";\n}\nfunction extractModelName2(model) {\n  const config = getModelConfig(model);\n  if (typeof model?.modelId === \"string\") {\n    return model.modelId;\n  }\n  if (typeof config?.modelId === \"string\") {\n    return config.modelId;\n  }\n  if (typeof config?.model === \"string\") {\n    return config.model;\n  }\n  return void 0;\n}\nfunction getModelConfig(model) {\n  if (!model || typeof model.getConfig !== \"function\") {\n    return void 0;\n  }\n  try {\n    return model.getConfig();\n  } catch (error) {\n    logInstrumentationError6(\"Strands Agent SDK model config\", error);\n    return void 0;\n  }\n}\nfunction formatAgentSpanName(agent) {\n  return agent?.name ? `Agent: ${agent.name}` : \"Strands Agent\";\n}\nfunction formatModelSpanName(model) {\n  const modelName2 = extractModelName2(model);\n  return modelName2 ? `Strands model: ${modelName2}` : \"Strands model\";\n}\nfunction extractAgentResultOutput(result) {\n  if (!result) {\n    return void 0;\n  }\n  if (result.structuredOutput !== void 0) {\n    return result.structuredOutput;\n  }\n  if (result.lastMessage) {\n    return result.lastMessage;\n  }\n  return result;\n}\nfunction extractMultiAgentResultOutput(result) {\n  if (!result) {\n    return void 0;\n  }\n  if (Array.isArray(result.content)) {\n    return normalizeContentBlocks(result.content);\n  }\n  return result;\n}\nfunction extractNodeResultOutput(result) {\n  if (!result) {\n    return void 0;\n  }\n  if (result.structuredOutput !== void 0) {\n    return result.structuredOutput;\n  }\n  if (Array.isArray(result.content)) {\n    return normalizeContentBlocks(result.content);\n  }\n  return result;\n}\nvar STRANDS_MEDIA_TYPES = {\n  png: \"image/png\",\n  jpg: \"image/jpeg\",\n  jpeg: \"image/jpeg\",\n  gif: \"image/gif\",\n  webp: \"image/webp\",\n  mkv: \"video/x-matroska\",\n  mov: \"video/quicktime\",\n  mp4: \"video/mp4\",\n  webm: \"video/webm\",\n  flv: \"video/x-flv\",\n  mpeg: \"video/mpeg\",\n  mpg: \"video/mpeg\",\n  wmv: \"video/x-ms-wmv\",\n  \"3gp\": \"video/3gpp\",\n  pdf: \"application/pdf\",\n  csv: \"text/csv\",\n  doc: \"application/msword\",\n  docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n  xls: \"application/vnd.ms-excel\",\n  xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n  html: \"text/html\",\n  txt: \"text/plain\",\n  md: \"text/markdown\",\n  json: \"application/json\",\n  xml: \"application/xml\"\n};\nfunction createStrandsAttachmentCache() {\n  return {\n    objects: /* @__PURE__ */ new WeakMap(),\n    strings: new LRUCache({\n      max: MAX_STRANDS_STRING_ATTACHMENT_CACHE_ENTRIES\n    })\n  };\n}\nfunction processStrandsInputAttachments(input, cache = createStrandsAttachmentCache()) {\n  try {\n    return processStrandsInputNode(input, cache);\n  } catch (error) {\n    logInstrumentationError6(\"Strands Agent SDK input attachments\", error);\n    return input;\n  }\n}\nfunction processStrandsInputNode(value, cache) {\n  if (value instanceof BaseAttachment) {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((child) => processStrandsInputNode(child, cache));\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  const directMedia = processDirectStrandsMediaBlock(value, cache);\n  if (directMedia !== void 0) {\n    return directMedia;\n  }\n  const wrappedMedia = processWrappedStrandsMediaBlock(value, cache);\n  if (wrappedMedia !== void 0) {\n    return wrappedMedia;\n  }\n  if (value.type === \"message\" && Array.isArray(value.content)) {\n    return {\n      role: value.role,\n      content: value.content.map(\n        (child) => processStrandsInputNode(child, cache)\n      ),\n      ...value.metadata !== void 0 ? { metadata: value.metadata } : {}\n    };\n  }\n  if (typeof value.toJSON === \"function\") {\n    return processStrandsInputNode(value.toJSON(), cache);\n  }\n  return Object.fromEntries(\n    Object.entries(value).map(([key, child]) => [\n      key,\n      processStrandsInputNode(child, cache)\n    ])\n  );\n}\nfunction processDirectStrandsMediaBlock(block, cache) {\n  if (!isStrandsMediaBlock(block)) {\n    return void 0;\n  }\n  const mediaKey = block.type === \"imageBlock\" ? \"image\" : block.type === \"videoBlock\" ? \"video\" : \"document\";\n  return createStrandsMediaAttachment(mediaKey, block, cache);\n}\nfunction isStrandsMediaBlock(block) {\n  return (block.type === \"imageBlock\" || block.type === \"videoBlock\" || block.type === \"documentBlock\") && typeof block.format === \"string\" && isObject(block.source);\n}\nfunction processWrappedStrandsMediaBlock(block, cache) {\n  for (const mediaKey of [\"image\", \"video\", \"document\"]) {\n    const media = block[mediaKey];\n    if (!Object.hasOwn(block, mediaKey) || !isObject(media)) {\n      continue;\n    }\n    const processed = createStrandsMediaAttachment(mediaKey, media, cache);\n    if (processed !== void 0) {\n      return processed;\n    }\n  }\n  return void 0;\n}\nfunction createStrandsMediaAttachment(mediaKey, media, cache) {\n  const format = media.format;\n  const source = media.source;\n  if (typeof format !== \"string\" || !isObject(source) || !Object.hasOwn(source, \"bytes\")) {\n    return void 0;\n  }\n  const contentType = STRANDS_MEDIA_TYPES[format.toLowerCase()];\n  if (!contentType) {\n    return void 0;\n  }\n  const filename = mediaKey === \"document\" && typeof media.name === \"string\" && media.name.length > 0 ? media.name : `${mediaKey}.${format.toLowerCase()}`;\n  const attachment = getOrCreateStrandsAttachment(\n    source.bytes,\n    filename,\n    contentType,\n    cache\n  );\n  if (!attachment) {\n    return void 0;\n  }\n  const { type: _type, ...serializedMedia } = media;\n  const { type: _sourceType, ...serializedSource } = source;\n  return {\n    [mediaKey]: {\n      ...serializedMedia,\n      source: {\n        ...serializedSource,\n        bytes: attachment\n      }\n    }\n  };\n}\nfunction getOrCreateStrandsAttachment(data, filename, contentType, cache) {\n  const key = `${contentType}\\0${filename}`;\n  const attachments = typeof data === \"string\" ? cache.strings.get(data) : isObject(data) ? cache.objects.get(data) : void 0;\n  const cached = attachments?.get(key);\n  if (cached) {\n    return cached;\n  }\n  const blob = convertDataToBlob(data, contentType);\n  if (!blob) {\n    return void 0;\n  }\n  const attachment = new Attachment({\n    data: blob,\n    filename,\n    contentType\n  });\n  const updatedAttachments = attachments ?? /* @__PURE__ */ new Map();\n  updatedAttachments.set(key, attachment);\n  if (typeof data === \"string\") {\n    cache.strings.set(data, updatedAttachments);\n  } else if (isObject(data)) {\n    cache.objects.set(data, updatedAttachments);\n  }\n  return attachment;\n}\nfunction normalizeContentBlocks(blocks) {\n  const text = blocks.map((block) => typeof block.text === \"string\" ? block.text : void 0).filter((part) => Boolean(part)).join(\"\");\n  return text.length > 0 ? text : blocks;\n}\nfunction parseUsage(usage) {\n  const metrics = {};\n  assignMetric(metrics, \"prompt_tokens\", usage?.inputTokens);\n  assignMetric(metrics, \"completion_tokens\", usage?.outputTokens);\n  assignMetric(metrics, \"tokens\", usage?.totalTokens);\n  assignMetric(metrics, \"prompt_cached_tokens\", usage?.cacheReadInputTokens);\n  assignMetric(\n    metrics,\n    \"prompt_cache_creation_tokens\",\n    usage?.cacheWriteInputTokens\n  );\n  return metrics;\n}\nfunction parseModelMetrics(metrics) {\n  const parsed = {};\n  assignMetric(parsed, \"strands.latency_ms\", metrics?.latencyMs);\n  assignMetric(\n    parsed,\n    \"strands.time_to_first_byte_ms\",\n    metrics?.timeToFirstByteMs\n  );\n  return parsed;\n}\nfunction assignMetric(metrics, key, value) {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    metrics[key] = value;\n  }\n}\nfunction buildDurationMetrics4(startTime) {\n  const end = getCurrentUnixTimestamp();\n  return {\n    duration: end - startTime,\n    end,\n    start: startTime\n  };\n}\nfunction cleanMetrics6(metrics) {\n  const cleaned = {};\n  for (const [key, value] of Object.entries(metrics)) {\n    if (Number.isFinite(value)) {\n      cleaned[key] = value;\n    }\n  }\n  return cleaned;\n}\nfunction extractToolName3(toolUse, tool) {\n  return toolUse?.name ?? tool?.name ?? \"unknown\";\n}\nfunction toolKey2(toolUse) {\n  return toolUse?.toolUseId ?? toolUse?.name ?? \"unknown\";\n}\nfunction findNode(orchestrator, nodeId) {\n  try {\n    return orchestrator?.nodes?.get(nodeId);\n  } catch {\n    return void 0;\n  }\n}\nfunction extractNodeChild(node) {\n  const child = node?.agent ?? node?.orchestrator;\n  return isObject(child) ? child : void 0;\n}\nfunction pushChildParent(activeChildParents, child, span) {\n  const parents = activeChildParents.get(child) ?? /* @__PURE__ */ new Set();\n  parents.add(span);\n  activeChildParents.set(child, parents);\n}\nfunction popChildParent(activeChildParents, child, span) {\n  const parents = activeChildParents.get(child);\n  if (!parents) {\n    return;\n  }\n  parents.delete(span);\n  if (parents.size === 0) {\n    activeChildParents.delete(child);\n  }\n}\nfunction getOnlyChildParent(activeChildParents, child) {\n  const parents = activeChildParents.get(child);\n  if (!parents || parents.size !== 1) {\n    return void 0;\n  }\n  return parents.values().next().value;\n}\nfunction getConstructorName(value) {\n  if (!isObject(value)) {\n    return \"\";\n  }\n  const constructor = value.constructor;\n  return typeof constructor === \"function\" && typeof constructor.name === \"string\" ? constructor.name : \"\";\n}\nfunction safeLog5(span, event) {\n  try {\n    span.log(event);\n  } catch (error) {\n    logInstrumentationError6(\"Strands Agent SDK span log\", error);\n  }\n}\nfunction logInstrumentationError6(context, error) {\n  debugLogger.debug(`${context}:`, error);\n}\n\n// src/instrumentation/plugins/elevenlabs-channels.ts\nvar elevenLabsChannels = defineChannels(\n  \"@elevenlabs/elevenlabs-js\",\n  {\n    convert: channel({\n      channelName: \"textToSpeech.convert\",\n      kind: \"async\"\n    }),\n    stream: channel({\n      channelName: \"textToSpeech.stream\",\n      kind: \"async\"\n    }),\n    convertWithTimestamps: channel({ channelName: \"textToSpeech.convertWithTimestamps\", kind: \"async\" }),\n    streamWithTimestamps: channel({ channelName: \"textToSpeech.streamWithTimestamps\", kind: \"async\" }),\n    transcribe: channel({ channelName: \"speechToText.convert\", kind: \"async\" })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.ELEVENLABS }\n);\n\n// src/instrumentation/plugins/elevenlabs-plugin.ts\nvar ElevenLabsPlugin = class extends BasePlugin {\n  onEnable() {\n    for (const method of [\n      \"convert\",\n      \"stream\",\n      \"convertWithTimestamps\",\n      \"streamWithTimestamps\"\n    ]) {\n      this.unsubscribers.push(\n        interceptCall2(\n          elevenLabsChannels[method],\n          `elevenlabs.textToSpeech.${method}`,\n          ([voice, request]) => ({\n            input: {\n              operation: \"speech\",\n              prompt: request.text,\n              parameters: {\n                voice,\n                format: request.outputFormat,\n                language: request.languageCode,\n                speed: request.voiceSettings?.speed\n              }\n            },\n            metadata: {\n              provider: \"elevenlabs\",\n              model: request.modelId ?? \"eleven_multilingual_v2\"\n            }\n          }),\n          (value, args, span, finish, headers, started) => captureSpeech(\n            value,\n            args[1],\n            method,\n            span,\n            finish,\n            started,\n            headers\n          )\n        )\n      );\n    }\n    this.unsubscribers.push(\n      interceptCall2(\n        elevenLabsChannels.transcribe,\n        \"elevenlabs.speechToText.convert\",\n        ([request]) => {\n          if (request.webhook) return void 0;\n          const file = request.file;\n          const filename = typeof File !== \"undefined\" && file instanceof File ? file.name : \"audio\";\n          const contentType = file instanceof Blob ? file.type || \"application/octet-stream\" : \"application/octet-stream\";\n          const blob = file instanceof Blob ? file : file instanceof Uint8Array ? new Blob([new Uint8Array(file)], { type: contentType }) : file instanceof ArrayBuffer ? new Blob([file.slice(0)], { type: contentType }) : void 0;\n          const fileData = blob ? new Attachment({ data: blob, filename, contentType }) : request.cloudStorageUrl;\n          return {\n            input: {\n              operation: \"transcribe\",\n              content: fileData ? [{ type: \"file\", file: { filename, file_data: fileData } }] : [],\n              parameters: {\n                language: request.languageCode,\n                timestamp_granularities: request.timestampsGranularity\n              }\n            },\n            metadata: { provider: \"elevenlabs\", model: request.modelId }\n          };\n        },\n        (value, _args, span, finish) => {\n          const result = value;\n          const transcripts = result.transcripts ?? [result];\n          span.log({\n            output: {\n              content: transcripts.flatMap(\n                (transcript) => typeof transcript.text === \"string\" ? [{ type: \"text\", text: transcript.text }] : []\n              ),\n              annotations: {\n                language: result.languageCode,\n                words: result.words ?? (result.transcripts ? result.transcripts.flatMap(\n                  (transcript) => transcript.words ?? []\n                ) : void 0)\n              }\n            }\n          });\n          finish();\n        },\n        ([request], span) => {\n          const file = request.file;\n          if (!isAsyncIterable(file)) return;\n          const chunks = [];\n          const filename = isObject(file) && typeof file.path === \"string\" ? file.path.split(/[\\\\/]/).pop() || \"audio\" : \"audio\";\n          observeByteStream(file, {\n            onChunk: (chunk) => chunks.push(new Uint8Array(chunk)),\n            onComplete: () => {\n              const contentType = \"application/octet-stream\";\n              const data = new Blob(chunks, {\n                type: contentType\n              });\n              chunks.length = 0;\n              span.log({\n                input: {\n                  content: [\n                    {\n                      type: \"file\",\n                      file: {\n                        filename,\n                        file_data: new Attachment({\n                          data,\n                          filename,\n                          contentType\n                        })\n                      }\n                    }\n                  ]\n                }\n              });\n            },\n            onCancel: () => {\n              chunks.length = 0;\n            },\n            aroundRead: (next) => withCurrent(span, next),\n            debugLabel: \"ElevenLabs audio\"\n          });\n        }\n      )\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction interceptCall2(channel2, name, input, output, beforeInvoke) {\n  return channel2.intercept((target, self, args) => {\n    const invoke2 = () => Reflect.apply(target, self, args);\n    if (isAutoInstrumentationSuppressed()) return invoke2();\n    const started = Date.now() / 1e3;\n    let span;\n    try {\n      const event = input(args);\n      if (event !== void 0)\n        span = startSpan(\n          withSpanInstrumentationName(\n            {\n              name,\n              spanAttributes: { type: \"llm\" /* LLM */ },\n              event\n            },\n            INSTRUMENTATION_NAMES.ELEVENLABS\n          )\n        );\n    } catch (error) {\n      debugLogger.error(\"Error starting ElevenLabs span\", error);\n      return invoke2();\n    }\n    if (!span) return invoke2();\n    const activeSpan = span;\n    let ended = false;\n    const finish = (error) => {\n      if (ended) return;\n      ended = true;\n      try {\n        if (error !== void 0) activeSpan.log({ error });\n        activeSpan.end();\n      } catch (loggingError) {\n        debugLogger.error(\"Error ending ElevenLabs span\", loggingError);\n      }\n    };\n    try {\n      beforeInvoke?.(args, span);\n    } catch (error) {\n      debugLogger.error(\"Error observing ElevenLabs input\", error);\n    }\n    let result;\n    try {\n      result = withCurrent(\n        span,\n        () => runWithAutoInstrumentationSuppressed(invoke2)\n      );\n    } catch (error) {\n      finish(error);\n      throw error;\n    }\n    const capture = (value, headers) => {\n      try {\n        output(value, args, span, finish, headers, started);\n      } catch (error) {\n        debugLogger.error(\"Error capturing ElevenLabs output\", error);\n        finish();\n      }\n    };\n    try {\n      if (isObject(result) && typeof result.withRawResponse === \"function\") {\n        void result.withRawResponse().then(\n          ({\n            data,\n            rawResponse\n          }) => capture(data, rawResponse?.headers),\n          finish\n        );\n      } else {\n        void Promise.resolve(result).then((value) => capture(value), finish);\n      }\n    } catch (error) {\n      debugLogger.error(\"Error observing ElevenLabs result\", error);\n      finish();\n    }\n    return result;\n  });\n}\nfunction captureSpeech(value, request, method, span, finish, started, headers) {\n  const format = request.outputFormat ?? \"mp3_44100_128\";\n  const formatType = format.startsWith(\"mp3_\") ? \"audio/mpeg\" : format.startsWith(\"pcm_\") ? \"audio/pcm\" : format.startsWith(\"opus_\") ? \"audio/ogg\" : format.startsWith(\"ulaw_\") ? \"audio/basic\" : format.startsWith(\"alaw_\") ? \"audio/x-alaw\" : void 0;\n  const headerType = headers?.get(\"content-type\")?.split(\";\")[0];\n  const contentType = headerType?.startsWith(\"audio/\") ? headerType : formatType;\n  const disposition = headers?.get(\"content-disposition\");\n  const headerFilename = disposition?.match(\n    /filename=\"([^\"]+)\"|filename=([^;]+)/i\n  );\n  const filename = headerFilename?.[1] ?? headerFilename?.[2]?.trim() ?? `speech.${contentType ? getExtensionFromMediaType(contentType) : \"bin\"}`;\n  const chunks = [];\n  const alignments = [];\n  let bytes = 0;\n  let first = true;\n  let stopped = false;\n  const observe = (chunk) => {\n    if (stopped || chunk.byteLength === 0) return;\n    if (first && method.startsWith(\"stream\")) {\n      span.log({\n        metrics: { time_to_first_token: Date.now() / 1e3 - started }\n      });\n    }\n    first = false;\n    chunks.push(new Uint8Array(chunk));\n    bytes += chunk.byteLength;\n  };\n  const complete = () => {\n    if (stopped) return;\n    stopped = true;\n    try {\n      const content = [];\n      if (contentType && bytes) {\n        const data = new Uint8Array(bytes);\n        let offset = 0;\n        for (const chunk of chunks) {\n          data.set(chunk, offset);\n          offset += chunk.length;\n        }\n        content.push({\n          type: \"file\",\n          file: {\n            filename,\n            byte_size: bytes,\n            file_data: new Attachment({\n              data: new Blob([data], { type: contentType }),\n              filename,\n              contentType\n            })\n          }\n        });\n      }\n      span.log({\n        output: {\n          content,\n          ...alignments.length ? { annotations: alignments } : {}\n        }\n      });\n    } finally {\n      chunks.length = 0;\n      finish();\n    }\n  };\n  const cancel = (error) => {\n    stopped = true;\n    chunks.length = 0;\n    finish(error);\n  };\n  const timestampChunk = (chunk) => {\n    const binary = atob(chunk.audioBase64);\n    observe(Uint8Array.from(binary, (character) => character.charCodeAt(0)));\n    if (chunk.alignment || chunk.normalizedAlignment)\n      alignments.push({\n        alignment: chunk.alignment,\n        normalized_alignment: chunk.normalizedAlignment\n      });\n  };\n  if (method === \"convertWithTimestamps\") {\n    timestampChunk(value);\n    complete();\n  } else if (method === \"streamWithTimestamps\") {\n    patchStreamIfNeeded(value, {\n      shouldCollect: (chunk) => {\n        try {\n          timestampChunk(chunk);\n        } catch (error) {\n          debugLogger.error(\"Error collecting ElevenLabs timestamps\", error);\n          cancel();\n        }\n        return false;\n      },\n      onComplete: complete,\n      onCancel: () => cancel(),\n      onError: cancel,\n      aroundNext: (next) => withCurrent(span, next)\n    });\n  } else {\n    observeByteStream(value, {\n      onChunk: observe,\n      onComplete: complete,\n      onCancel: cancel,\n      aroundRead: (next) => withCurrent(span, next),\n      debugLabel: \"ElevenLabs audio\"\n    });\n  }\n}\n\n// src/instrumentation/plugins/voyageai-channels.ts\nvar voyageAIChannels = defineChannels(\n  \"voyageai\",\n  {\n    embed: channel({\n      channelName: \"embed\",\n      kind: \"async\"\n    }),\n    multimodalEmbed: channel({\n      channelName: \"multimodalEmbed\",\n      kind: \"async\"\n    }),\n    rerank: channel({\n      channelName: \"rerank\",\n      kind: \"async\"\n    }),\n    contextualizedEmbed: channel({\n      channelName: \"contextualizedEmbed\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.VOYAGEAI }\n);\n\n// src/instrumentation/plugins/voyageai-plugin.ts\nvar RERANK_METADATA_ALLOWLIST = /* @__PURE__ */ new Set([\n  \"model\",\n  \"returnDocuments\",\n  \"topK\",\n  \"truncation\"\n]);\nvar VoyageAIPlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      interceptVoyageAICall(\n        voyageAIChannels.embed,\n        \"voyageai.embed\",\n        extractTextEmbeddingInput,\n        summarizeEmbeddingOutput,\n        extractEmbeddingUsageMetrics\n      ),\n      interceptVoyageAICall(\n        voyageAIChannels.multimodalEmbed,\n        \"voyageai.multimodalEmbed\",\n        extractMultimodalEmbeddingInput,\n        summarizeEmbeddingOutput,\n        extractEmbeddingUsageMetrics\n      ),\n      interceptVoyageAICall(\n        voyageAIChannels.rerank,\n        \"voyageai.rerank\",\n        extractRerankInput,\n        summarizeRerankOutput\n      ),\n      interceptVoyageAICall(\n        voyageAIChannels.contextualizedEmbed,\n        \"voyageai.contextualizedEmbed\",\n        extractContextualizedEmbeddingInput,\n        summarizeContextualizedEmbeddingOutput,\n        extractEmbeddingUsageMetrics\n      )\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction interceptVoyageAICall(channel2, name, extractInput4, extractOutput2, extractMetrics3 = extractUsageMetrics3) {\n  return channel2.intercept((target, thisArg, args) => {\n    const invokeTarget = () => Reflect.apply(target, thisArg, args);\n    if (isAutoInstrumentationSuppressed()) {\n      return invokeTarget();\n    }\n    let span;\n    try {\n      const { input, metadata } = extractInput4(args);\n      span = startSpan(\n        withSpanInstrumentationName(\n          {\n            event: { input, metadata },\n            name,\n            spanAttributes: { type: \"llm\" /* LLM */ }\n          },\n          INSTRUMENTATION_NAMES.VOYAGEAI\n        )\n      );\n    } catch (error) {\n      debugLogger.error(`Error starting span for ${name}:`, error);\n      return invokeTarget();\n    }\n    let result;\n    try {\n      result = withCurrent(\n        span,\n        () => runWithAutoInstrumentationSuppressed(invokeTarget)\n      );\n    } catch (error) {\n      finishVoyageAISpan(span, name, () => span.log({ error }));\n      throw error;\n    }\n    void Promise.resolve(result).then(\n      (value) => finishVoyageAISpan(span, name, () => {\n        const metadata = extractResponseMetadata3(value);\n        span.log({\n          output: extractOutput2(value),\n          ...metadata ? { metadata } : {},\n          metrics: extractMetrics3(value)\n        });\n      }),\n      (error) => finishVoyageAISpan(span, name, () => span.log({ error }))\n    );\n    return result;\n  });\n}\nfunction finishVoyageAISpan(span, name, log3) {\n  try {\n    log3();\n  } catch (error) {\n    debugLogger.error(`Error logging span for ${name}:`, error);\n  }\n  try {\n    span.end();\n  } catch (error) {\n    debugLogger.error(`Error ending span for ${name}:`, error);\n  }\n}\nfunction getRequestArg2(args) {\n  if (Array.isArray(args)) {\n    return isObject(args[0]) ? args[0] : void 0;\n  }\n  if (!isObject(args)) {\n    return void 0;\n  }\n  const firstArg = Reflect.get(args, \"0\");\n  return isObject(firstArg) ? firstArg : void 0;\n}\nfunction pickMetadata(request, allowlist) {\n  const metadata = {};\n  if (request) {\n    for (const key of allowlist) {\n      if (!Object.hasOwn(request, key)) {\n        continue;\n      }\n      const value = request[key];\n      if (value !== void 0) {\n        metadata[key] = value;\n      }\n    }\n  }\n  return {\n    ...metadata,\n    provider: \"voyage\"\n  };\n}\nfunction buildEmbeddingInput(inputs, request) {\n  const outputDimensions = request?.outputDimension;\n  return {\n    inputs,\n    ...typeof outputDimensions === \"number\" && Number.isFinite(outputDimensions) ? { output_dimensions: outputDimensions } : {}\n  };\n}\nfunction embeddingMetadata(request) {\n  return {\n    ...typeof request?.model === \"string\" ? { model: request.model } : {},\n    provider: \"voyage\"\n  };\n}\nfunction extractTextEmbeddingInput(args) {\n  const request = getRequestArg2(args);\n  const rawInput = request?.input;\n  const values = Array.isArray(rawInput) ? rawInput : [rawInput];\n  return {\n    input: buildEmbeddingInput(\n      values.flatMap(\n        (value) => typeof value === \"string\" ? [{ content: value }] : []\n      ),\n      request\n    ),\n    metadata: embeddingMetadata(request)\n  };\n}\nfunction extractContextualizedEmbeddingInput(args) {\n  const request = getRequestArg2(args);\n  const rawInputs = request?.inputs;\n  const values = Array.isArray(rawInputs) ? rawInputs.flatMap((value) => Array.isArray(value) ? value : [value]) : [];\n  return {\n    input: buildEmbeddingInput(\n      values.flatMap(\n        (value) => typeof value === \"string\" ? [{ content: value }] : []\n      ),\n      request\n    ),\n    metadata: embeddingMetadata(request)\n  };\n}\nfunction extractMultimodalEmbeddingInput(args) {\n  const request = getRequestArg2(args);\n  const rawInputs = request?.inputs;\n  const inputs = Array.isArray(rawInputs) ? rawInputs.map((rawInput) => {\n    const rawContent = isObject(rawInput) ? rawInput.content : void 0;\n    return {\n      content: Array.isArray(rawContent) ? rawContent.flatMap(normalizeMultimodalContentPart) : []\n    };\n  }) : [];\n  const input = buildEmbeddingInput(inputs, request);\n  const processedInput = processInputAttachments(input);\n  return {\n    input: hasInlineEmbeddingMedia(processedInput) ? input : processedInput,\n    metadata: embeddingMetadata(request)\n  };\n}\nfunction normalizeMultimodalContentPart(part) {\n  if (!isObject(part) || typeof part.type !== \"string\") {\n    return [];\n  }\n  if (part.type === \"text\") {\n    return typeof part.text === \"string\" ? [{ type: \"text\", text: part.text }] : [];\n  }\n  const camelCaseField = {\n    image_base64: \"imageBase64\",\n    image_url: \"imageUrl\",\n    video_base64: \"videoBase64\",\n    video_url: \"videoUrl\"\n  };\n  const field = camelCaseField[part.type];\n  if (!field) {\n    return [];\n  }\n  const data = typeof part[field] === \"string\" ? part[field] : part[part.type];\n  if (typeof data !== \"string\") {\n    return [];\n  }\n  return part.type.startsWith(\"image_\") ? [{ type: \"image_url\", image_url: { url: data } }] : [{ type: \"file\", file: { file_data: data } }];\n}\nfunction hasInlineEmbeddingMedia(input) {\n  return input.inputs.some(\n    ({ content }) => Array.isArray(content) ? content.some((part) => {\n      const value = part.type === \"image_url\" ? part.image_url.url : part.type === \"file\" ? part.file.file_data : void 0;\n      return typeof value === \"string\" && value.startsWith(\"data:\");\n    }) : false\n  );\n}\nfunction extractRerankInput(args) {\n  const request = getRequestArg2(args);\n  const documents = request?.documents;\n  return {\n    input: {\n      documents,\n      query: request?.query\n    },\n    metadata: {\n      ...pickMetadata(request, RERANK_METADATA_ALLOWLIST),\n      ...Array.isArray(documents) ? { document_count: documents.length } : {}\n    }\n  };\n}\nfunction extractResponseMetadata3(result) {\n  if (!isObject(result)) {\n    return void 0;\n  }\n  const rawResponse = isObject(result.rawResponse) ? result.rawResponse : void 0;\n  const model = typeof result.model === \"string\" ? result.model : typeof rawResponse?.model === \"string\" ? rawResponse.model : void 0;\n  return model ? { model } : void 0;\n}\nfunction summarizeEmbeddingOutput(result) {\n  return {\n    count: isObject(result) && Array.isArray(result.data) ? result.data.length : 0\n  };\n}\nfunction summarizeRerankOutput(result) {\n  if (!isObject(result) || !Array.isArray(result.data)) {\n    return void 0;\n  }\n  return result.data.slice(0, 100).map((item) => ({\n    index: isObject(item) ? item.index : void 0,\n    relevance_score: isObject(item) ? (typeof item.relevanceScore === \"number\" ? item.relevanceScore : item.relevance_score) ?? null : null\n  }));\n}\nfunction summarizeContextualizedEmbeddingOutput(result) {\n  if (!isObject(result)) {\n    return { count: 0 };\n  }\n  if (Array.isArray(result.results)) {\n    return {\n      count: result.results.reduce(\n        (count, item) => count + (isObject(item) && Array.isArray(item.embeddings) ? item.embeddings.length : 0),\n        0\n      )\n    };\n  }\n  if (!Array.isArray(result.data)) {\n    return { count: 0 };\n  }\n  return {\n    count: result.data.reduce(\n      (count, item) => count + (isObject(item) && Array.isArray(item.data) ? item.data.length : 0),\n      0\n    )\n  };\n}\nfunction extractEmbeddingUsageMetrics(result) {\n  const metrics = extractUsageMetrics3(result);\n  return typeof metrics.tokens === \"number\" ? { prompt_tokens: metrics.tokens, tokens: metrics.tokens } : {};\n}\nfunction extractUsageMetrics3(result) {\n  if (!isObject(result)) {\n    return {};\n  }\n  const rawResponse = isObject(result.rawResponse) ? result.rawResponse : void 0;\n  const usage = isObject(result.usage) ? result.usage : isObject(rawResponse?.usage) ? rawResponse.usage : void 0;\n  const tokens = typeof result.totalTokens === \"number\" ? result.totalTokens : usage?.totalTokens ?? usage?.total_tokens;\n  return typeof tokens === \"number\" && Number.isFinite(tokens) && tokens >= 0 ? { tokens } : {};\n}\n\n// src/instrumentation/plugins/typesafe-channels.ts\nvar typeSafeChannels = defineChannels(\n  \"@typesafe-ai/sdk\",\n  {\n    systemOne: channel({\n      channelName: \"systemOne\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.TYPESAFE }\n);\n\n// src/instrumentation/plugins/typesafe-plugin.ts\nvar TypeSafePlugin = class extends BasePlugin {\n  onEnable() {\n    this.unsubscribers.push(\n      typeSafeChannels.systemOne.intercept(\n        (target, thisArg, args) => interceptSystemOne(target, thisArg, args)\n      )\n    );\n  }\n  onDisable() {\n    this.unsubscribers = unsubscribeAll(this.unsubscribers);\n  }\n};\nfunction interceptSystemOne(target, thisArg, args) {\n  const invokeTarget = () => Reflect.apply(target, thisArg, args);\n  if (isAutoInstrumentationSuppressed()) {\n    return invokeTarget();\n  }\n  let span;\n  try {\n    const request = args[0];\n    const model = typeof request?.model === \"string\" ? request.model : isObject(thisArg) && typeof thisArg.defaultModel === \"string\" ? thisArg.defaultModel : void 0;\n    span = startSpan(\n      withSpanInstrumentationName(\n        {\n          event: {\n            input: {\n              state: request?.state,\n              questions: addIds(request?.questions)\n            },\n            metadata: {\n              ...model ? { model } : {},\n              provider: \"typesafe\"\n            }\n          },\n          name: \"typesafe.systemOne\",\n          spanAttributes: { type: \"question\" }\n        },\n        INSTRUMENTATION_NAMES.TYPESAFE\n      )\n    );\n  } catch (error) {\n    debugLogger.error(\"Error starting span for typesafe.systemOne:\", error);\n    return invokeTarget();\n  }\n  let result;\n  try {\n    result = withCurrent(\n      span,\n      () => runWithAutoInstrumentationSuppressed(invokeTarget)\n    );\n  } catch (error) {\n    span.log({ error });\n    span.end();\n    throw error;\n  }\n  if (!isTypeSafeAPIPromise(result)) {\n    const finished = Promise.resolve(result).then(\n      (value) => finishSuccessfulSpan(span, value),\n      (error) => {\n        span.log({ error });\n        span.end();\n      }\n    );\n    void finished;\n    return result;\n  }\n  const originalAsResponse = result.asResponse.bind(result);\n  const captureFinished = originalAsResponse().then(\n    async (response) => {\n      try {\n        const value = await response.clone().json();\n        if (!isObject(value)) {\n          throw new TypeError(\"Expected TypeSafe to return a JSON object\");\n        }\n        finishSuccessfulSpan(span, value);\n      } catch (error) {\n        debugLogger.error(\n          \"Error reading response for typesafe.systemOne:\",\n          error\n        );\n        span.end();\n      }\n    },\n    (error) => {\n      span.log({ error });\n      span.end();\n    }\n  );\n  preserveTypeSafePromise(result, captureFinished);\n  return result;\n}\nfunction isTypeSafeAPIPromise(value) {\n  return (typeof value === \"object\" || typeof value === \"function\") && value !== null && typeof Reflect.get(value, \"asResponse\") === \"function\" && typeof Reflect.get(value, \"withResponse\") === \"function\" && typeof Reflect.get(value, \"map\") === \"function\";\n}\nfunction preserveTypeSafePromise(apiPromise, captureFinished) {\n  try {\n    const originalThen = apiPromise.then.bind(apiPromise);\n    const originalAsResponse = apiPromise.asResponse.bind(apiPromise);\n    const originalWithResponse = apiPromise.withResponse.bind(apiPromise);\n    const originalMap = apiPromise.map.bind(apiPromise);\n    const waitForCapture = async (value) => {\n      await captureFinished;\n      return value;\n    };\n    const then = (onfulfilled, onrejected) => originalThen(\n      async (value) => {\n        await captureFinished;\n        if (onfulfilled) {\n          return onfulfilled(value);\n        }\n        return value;\n      },\n      async (error) => {\n        await captureFinished;\n        if (onrejected) {\n          return onrejected(error);\n        }\n        throw error;\n      }\n    );\n    Object.defineProperties(apiPromise, {\n      asResponse: {\n        configurable: true,\n        value: () => originalAsResponse().then(waitForCapture)\n      },\n      catch: {\n        configurable: true,\n        value: (onrejected) => then(void 0, onrejected)\n      },\n      finally: {\n        configurable: true,\n        value: (onfinally) => then(\n          async (value) => {\n            await onfinally?.();\n            return value;\n          },\n          async (error) => {\n            await onfinally?.();\n            throw error;\n          }\n        )\n      },\n      map: {\n        configurable: true,\n        value: (fn) => {\n          const mapped = originalMap(fn);\n          preserveTypeSafePromise(mapped, captureFinished);\n          return mapped;\n        }\n      },\n      then: { configurable: true, value: then },\n      withResponse: {\n        configurable: true,\n        value: () => originalWithResponse().then(waitForCapture)\n      }\n    });\n  } catch (error) {\n    debugLogger.error(\"Error preserving TypeSafe APIPromise helpers:\", error);\n  }\n}\nfunction finishSuccessfulSpan(span, result) {\n  const metrics = extractMetrics2(result);\n  span.log({\n    output: isObject(result) && result.answers !== void 0 ? { answers: addIds(result.answers) } : void 0,\n    ...isObject(result) && typeof result.model === \"string\" ? { metadata: { model: result.model } } : {},\n    ...Object.keys(metrics).length > 0 ? { metrics } : {}\n  });\n  span.end();\n}\nfunction addIds(value) {\n  if (!isObject(value)) {\n    return value;\n  }\n  return Object.entries(value).map(\n    ([id, entry]) => isObject(entry) ? { ...entry, id } : { id, value: entry }\n  );\n}\nfunction extractMetrics2(result) {\n  const usage = isObject(result) && isObject(result.usage) ? result.usage : {};\n  const promptTokens = validTokenCount(usage.input_tokens);\n  const completionTokens = validTokenCount(usage.output_tokens);\n  return {\n    ...promptTokens !== void 0 ? { prompt_tokens: promptTokens } : {},\n    ...completionTokens !== void 0 ? { completion_tokens: completionTokens } : {},\n    ...promptTokens !== void 0 && completionTokens !== void 0 ? { tokens: promptTokens + completionTokens } : {}\n  };\n}\nfunction validTokenCount(value) {\n  return typeof value === \"number\" && Number.isInteger(value) && value >= 0 ? value : void 0;\n}\n\n// src/instrumentation/plugins/cloudflare-ai-chat-channels.ts\nvar cloudflareAIChatChannels = defineChannels(\n  \"@cloudflare/ai-chat\",\n  {\n    runExclusiveChatTurn: channel({\n      channelName: \"AIChatAgent._runExclusiveChatTurn\",\n      kind: \"async\"\n    }),\n    onChatResponse: channel({\n      channelName: \"AIChatAgent.onChatResponse\",\n      kind: \"sync-stream\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.CLOUDFLARE_AI_CHAT }\n);\n\n// src/instrumentation/plugins/cloudflare-ai-chat-instrumentation.ts\nvar wrappedTurnRunners = /* @__PURE__ */ new WeakSet();\nvar wrappedResponseHooks = /* @__PURE__ */ new WeakSet();\nfunction instrumentCloudflareAIChatAgent(agent) {\n  try {\n    const original = Reflect.get(agent, \"_runExclusiveChatTurn\");\n    if (typeof original !== \"function\" || wrappedTurnRunners.has(original)) {\n      return agent;\n    }\n    const wrapped = async function(...args) {\n      return cloudflareAIChatChannels.runExclusiveChatTurn.tracePromise(\n        () => Reflect.apply(original, this, args),\n        {\n          arguments: args,\n          self: this\n        }\n      );\n    };\n    wrappedTurnRunners.add(wrapped);\n    defineWrappedMethod(agent, \"_runExclusiveChatTurn\", original, wrapped);\n  } catch (error) {\n    debugLogger.debug(\"Failed to wrap @cloudflare/ai-chat turn runner:\", error);\n  }\n  return agent;\n}\nfunction instrumentCloudflareAIChatResponseHook(agent) {\n  try {\n    const original = Reflect.get(agent, \"onChatResponse\");\n    if (typeof original !== \"function\" || wrappedResponseHooks.has(original)) {\n      return;\n    }\n    const wrapped = function(result) {\n      const args = [result];\n      return cloudflareAIChatChannels.onChatResponse.traceSync(\n        () => Reflect.apply(original, this, args),\n        {\n          arguments: args,\n          self: this\n        }\n      );\n    };\n    wrappedResponseHooks.add(wrapped);\n    defineWrappedMethod(agent, \"onChatResponse\", original, wrapped);\n  } catch (error) {\n    debugLogger.debug(\n      \"Failed to wrap @cloudflare/ai-chat response hook:\",\n      error\n    );\n  }\n}\nfunction defineWrappedMethod(target, property, original, wrapped) {\n  const ownDescriptor = Object.getOwnPropertyDescriptor(target, property);\n  Object.defineProperty(target, property, {\n    configurable: ownDescriptor?.configurable ?? true,\n    enumerable: ownDescriptor?.enumerable ?? false,\n    value: wrapped,\n    writable: ownDescriptor && \"writable\" in ownDescriptor ? ownDescriptor.writable : true\n  });\n  try {\n    Object.defineProperty(wrapped, \"name\", {\n      configurable: true,\n      value: original.name\n    });\n  } catch {\n  }\n}\n\n// src/instrumentation/plugins/cloudflare-ai-chat-plugin.ts\nvar BLOCKED_KEYS = /* @__PURE__ */ new Set([\"__proto__\", \"constructor\", \"prototype\"]);\nvar RESPONSE_STATE_RETENTION_MS = 6e4;\nvar CloudflareAIChatPlugin = class extends BasePlugin {\n  activeStates = /* @__PURE__ */ new Set();\n  activeTurns = /* @__PURE__ */ new WeakMap();\n  eventStates = /* @__PURE__ */ new WeakMap();\n  onEnable() {\n    this.subscribeToResponseHook();\n    this.subscribeToTurnRunner();\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n    for (const state of this.activeStates) {\n      this.cleanupState(state);\n    }\n    this.activeStates.clear();\n  }\n  subscribeToTurnRunner() {\n    const tracingChannel = cloudflareAIChatChannels.runExclusiveChatTurn.tracingChannel();\n    const unbindCurrentSpanStore = this.bindCurrentSpanStore(tracingChannel);\n    const handlers = {\n      start: (event) => {\n        this.ensureEventState(event);\n      },\n      asyncEnd: (event) => {\n        this.finishEvent(event);\n      },\n      error: (event) => {\n        this.finishEvent(event, event.error);\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => {\n      unbindCurrentSpanStore?.();\n      tracingChannel.unsubscribe(handlers);\n    });\n  }\n  subscribeToResponseHook() {\n    const tracingChannel = cloudflareAIChatChannels.onChatResponse.tracingChannel();\n    const handlers = {\n      start: (event) => {\n        let state;\n        try {\n          const agent = asObject(event.self);\n          const result = event.arguments[0];\n          state = agent ? this.findResponseState(\n            agent,\n            stringValue4(ownValue2(result, \"requestId\"))\n          ) : void 0;\n          if (!state) {\n            return;\n          }\n          state.responseObserved = true;\n          const output = serializeMessage(ownValue2(result, \"message\"));\n          const status = stringValue4(ownValue2(result, \"status\"));\n          const error = ownValue2(result, \"error\");\n          const input = ownValue2(result, \"continuation\") === true ? state.input : serializeMessages(readProperty(agent, \"messages\"))?.filter(\n            (message) => typeof output?.id !== \"string\" || message.id !== output.id\n          );\n          state.span.log({\n            ...input !== void 0 ? { input } : {},\n            ...output !== void 0 ? { output } : {},\n            ...status === \"error\" && error !== void 0 ? { error } : {}\n          });\n        } catch (error) {\n          debugLogger.debug(\n            \"Failed to process @cloudflare/ai-chat response hook:\",\n            error\n          );\n        } finally {\n          if (state?.settled) {\n            this.cleanupState(state);\n          }\n        }\n      }\n    };\n    tracingChannel.subscribe(handlers);\n    this.unsubscribers.push(() => tracingChannel.unsubscribe(handlers));\n  }\n  bindCurrentSpanStore(tracingChannel) {\n    const globalState = _internalGetGlobalState();\n    const contextManager = globalState?.contextManager;\n    const startChannel = tracingChannel.start;\n    const currentSpanStore = contextManager ? contextManager[BRAINTRUST_CURRENT_SPAN_STORE] : void 0;\n    if (!startChannel || !currentSpanStore || !contextManager) {\n      return void 0;\n    }\n    startChannel.bindStore(currentSpanStore, (event) => {\n      const state = this.ensureEventState(event);\n      return state ? contextManager.wrapSpanForStore(state.span) : currentSpanStore.getStore();\n    });\n    return () => startChannel.unbindStore(currentSpanStore);\n  }\n  ensureEventState(event) {\n    const eventKey = event;\n    const known = this.eventStates.get(eventKey);\n    if (known) {\n      return known;\n    }\n    try {\n      const agent = asObject(event.self);\n      const requestId = stringValue4(event.arguments[0]);\n      const key = requestId ?? /* @__PURE__ */ Symbol(\"cloudflare-ai-chat-turn\");\n      const activeForAgent = agent ? this.getActiveTurns(agent) : void 0;\n      const existing = activeForAgent?.get(key);\n      const state = existing && !existing.settled ? existing : this.createTurnState(agent, key);\n      if (existing && !existing.settled) {\n        state.depth += 1;\n      }\n      this.eventStates.set(eventKey, state);\n      this.bindTurnCallback(event, agent, state);\n      if (agent) {\n        instrumentCloudflareAIChatResponseHook(agent);\n      }\n      return state;\n    } catch (error) {\n      debugLogger.debug(\n        \"Failed to start @cloudflare/ai-chat instrumentation:\",\n        error\n      );\n      return void 0;\n    }\n  }\n  createTurnState(agent, key) {\n    const span = startSpan(\n      withSpanInstrumentationName(\n        {\n          name: \"AIChatAgent.onChatMessage\",\n          spanAttributes: { type: \"task\" /* TASK */ }\n        },\n        INSTRUMENTATION_NAMES.CLOUDFLARE_AI_CHAT\n      )\n    );\n    const state = {\n      agent,\n      depth: 1,\n      ended: false,\n      key,\n      responseObserved: false,\n      settled: false,\n      span\n    };\n    this.activeStates.add(state);\n    if (agent) {\n      this.getActiveTurns(agent).set(key, state);\n    }\n    return state;\n  }\n  bindTurnCallback(event, agent, state) {\n    const callback = event.arguments[1];\n    if (typeof callback !== \"function\") {\n      return;\n    }\n    try {\n      event.arguments[1] = function(...args) {\n        return withCurrent(state.span, () => {\n          try {\n            const input = serializeMessages(readProperty(agent, \"messages\"));\n            if (input !== void 0 && state.input === void 0) {\n              state.input = input;\n              state.span.log({ input });\n            }\n          } catch (error) {\n            debugLogger.debug(\n              \"Failed to capture @cloudflare/ai-chat messages:\",\n              error\n            );\n          }\n          return Reflect.apply(callback, this, args);\n        });\n      };\n    } catch (error) {\n      debugLogger.debug(\n        \"Failed to bind @cloudflare/ai-chat turn callback context:\",\n        error\n      );\n    }\n  }\n  finishEvent(event, error) {\n    const eventKey = event;\n    const state = this.eventStates.get(eventKey);\n    if (!state || state.ended) {\n      return;\n    }\n    this.eventStates.delete(eventKey);\n    if (error !== void 0 && state.pendingError === void 0) {\n      state.pendingError = error;\n    }\n    state.depth -= 1;\n    if (state.depth === 0) {\n      state.settled = true;\n      this.endState(state);\n      if (state.responseObserved || error !== void 0) {\n        this.cleanupState(state);\n      } else {\n        state.cleanupTimer = setTimeout(\n          () => this.cleanupState(state),\n          RESPONSE_STATE_RETENTION_MS\n        );\n        if (typeof state.cleanupTimer === \"object\" && state.cleanupTimer !== null && \"unref\" in state.cleanupTimer && typeof state.cleanupTimer.unref === \"function\") {\n          state.cleanupTimer.unref();\n        }\n      }\n    }\n  }\n  endState(state) {\n    if (state.ended) {\n      return;\n    }\n    state.ended = true;\n    try {\n      if (state.pendingError !== void 0) {\n        state.span.log({ error: state.pendingError });\n      }\n    } finally {\n      state.span.end();\n    }\n  }\n  cleanupState(state) {\n    if (state.cleanupTimer !== void 0) {\n      clearTimeout(state.cleanupTimer);\n      state.cleanupTimer = void 0;\n    }\n    try {\n      this.endState(state);\n    } finally {\n      this.activeStates.delete(state);\n      if (state.agent) {\n        const activeForAgent = this.activeTurns.get(state.agent);\n        if (activeForAgent?.get(state.key) === state) {\n          activeForAgent.delete(state.key);\n        }\n      }\n    }\n  }\n  getActiveTurns(agent) {\n    let turns = this.activeTurns.get(agent);\n    if (!turns) {\n      turns = /* @__PURE__ */ new Map();\n      this.activeTurns.set(agent, turns);\n    }\n    return turns;\n  }\n  findResponseState(agent, requestId) {\n    const turns = this.activeTurns.get(agent);\n    if (!turns) {\n      return void 0;\n    }\n    if (requestId !== void 0) {\n      return turns.get(requestId);\n    }\n    const active = [...turns.values()];\n    return active.length === 1 ? active[0] : void 0;\n  }\n};\nfunction asObject(value) {\n  return value !== null && (typeof value === \"object\" || typeof value === \"function\") ? value : void 0;\n}\nfunction readProperty(value, key) {\n  const object = asObject(value);\n  return object ? Reflect.get(object, key) : void 0;\n}\nfunction ownValue2(value, key) {\n  const object = asObject(value);\n  if (!object) {\n    return void 0;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(object, key);\n  return descriptor && \"value\" in descriptor ? descriptor.value : void 0;\n}\nfunction stringValue4(value) {\n  return typeof value === \"string\" ? value : void 0;\n}\nfunction serializeMessages(value) {\n  if (!Array.isArray(value)) {\n    return void 0;\n  }\n  return value.flatMap((message) => {\n    const serialized = serializeMessage(message);\n    return serialized === void 0 ? [] : [serialized];\n  });\n}\nfunction serializeMessage(value) {\n  const message = asObject(value);\n  if (!message) {\n    return void 0;\n  }\n  const serialized = [];\n  const id = ownValue2(message, \"id\");\n  const role = ownValue2(message, \"role\");\n  const parts = ownValue2(message, \"parts\");\n  if (typeof id === \"string\") {\n    serialized.push([\"id\", id]);\n  }\n  if (typeof role === \"string\") {\n    serialized.push([\"role\", role]);\n  }\n  const sanitizedParts = sanitizeLoggedValue2(parts);\n  if (sanitizedParts !== void 0) {\n    serialized.push([\"parts\", sanitizedParts]);\n  }\n  return serialized.length > 0 ? Object.fromEntries(serialized) : void 0;\n}\nfunction sanitizeLoggedValue2(value, seen = /* @__PURE__ */ new WeakSet(), depth = 0) {\n  if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? value : void 0;\n  }\n  const object = asObject(value);\n  if (!object || depth >= 20 || typeof value === \"function\") {\n    return void 0;\n  }\n  if (seen.has(object)) {\n    return \"[Circular]\";\n  }\n  seen.add(object);\n  if (Array.isArray(value)) {\n    return value.map((entry) => sanitizeLoggedValue2(entry, seen, depth + 1));\n  }\n  const entries = [];\n  for (const [key, descriptor] of Object.entries(\n    Object.getOwnPropertyDescriptors(object)\n  )) {\n    if (BLOCKED_KEYS.has(key) || !descriptor.enumerable || !(\"value\" in descriptor)) {\n      continue;\n    }\n    const sanitized = sanitizeLoggedValue2(descriptor.value, seen, depth + 1);\n    if (sanitized !== void 0) {\n      entries.push([key, sanitized]);\n    }\n  }\n  return Object.fromEntries(entries);\n}\n\n// src/instrumentation/plugins/cloudflare-agents-channels.ts\nvar cloudflareAgentsChannels = defineChannels(\n  \"agents\",\n  {\n    runAgentTool: channel({\n      channelName: \"Agent.runAgentTool\",\n      kind: \"async\"\n    })\n  },\n  { instrumentationName: INSTRUMENTATION_NAMES.CLOUDFLARE_AGENTS }\n);\n\n// src/instrumentation/plugins/cloudflare-agents-plugin.ts\nvar CLOUDFLARE_WORKERS_CONTEXT = {\n  span_origin: {\n    environment: { type: \"server\", name: \"cloudflare_workers\" }\n  }\n};\nvar CloudflareAgentsPlugin = class extends BasePlugin {\n  onEnable() {\n    const channel2 = cloudflareAgentsChannels.runAgentTool.tracingChannel();\n    const spans = /* @__PURE__ */ new WeakMap();\n    const handlers = {\n      start: (event) => {\n        try {\n          const agentClass = event.arguments[0];\n          const options = event.arguments[1];\n          if (ownValue3(options, \"detached\")) {\n            return;\n          }\n          const name = ownValue3(agentClass, \"name\");\n          if (typeof name !== \"string\" || name.length === 0) {\n            debugLogger.warn(\n              \"Skipping Cloudflare Agents runAgentTool span because the child agent class has no name.\"\n            );\n            return;\n          }\n          const span = _internalStartSpanWithContext(\n            withSpanInstrumentationName(\n              {\n                name,\n                spanAttributes: { type: \"tool\" /* TOOL */ },\n                event: {\n                  input: ownValue3(options, \"input\")\n                }\n              },\n              INSTRUMENTATION_NAMES.CLOUDFLARE_AGENTS\n            ),\n            CLOUDFLARE_WORKERS_CONTEXT\n          );\n          spans.set(event, span);\n        } catch (error) {\n          logInstrumentationError7(\"start\", error);\n        }\n      },\n      asyncEnd: (event) => {\n        const span = spans.get(event);\n        if (!span) {\n          return;\n        }\n        spans.delete(event);\n        try {\n          const status = ownValue3(event.result, \"status\");\n          if (status === \"completed\") {\n            span.log({ output: ownValue3(event.result, \"output\") });\n          } else {\n            const error = ownValue3(event.result, \"error\");\n            if (typeof error === \"string\") {\n              span.log({ error });\n            }\n          }\n        } catch (error) {\n          logInstrumentationError7(\"completion\", error);\n        } finally {\n          safelyEndSpan(span);\n        }\n      },\n      error: (event) => {\n        const span = spans.get(event);\n        if (!span) {\n          return;\n        }\n        spans.delete(event);\n        try {\n          span.log({ error: event.error });\n        } catch (error) {\n          logInstrumentationError7(\"rejection\", error);\n        } finally {\n          safelyEndSpan(span);\n        }\n      }\n    };\n    channel2.subscribe(handlers);\n    this.unsubscribers.push(() => channel2.unsubscribe(handlers));\n  }\n  onDisable() {\n    for (const unsubscribe of this.unsubscribers) {\n      unsubscribe();\n    }\n    this.unsubscribers = [];\n  }\n};\nfunction ownValue3(value, key) {\n  if (!isObjectLike2(value)) {\n    return void 0;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(value, key);\n  return descriptor && \"value\" in descriptor ? descriptor.value : void 0;\n}\nfunction isObjectLike2(value) {\n  return typeof value === \"object\" && value !== null || typeof value === \"function\";\n}\nfunction safelyEndSpan(span) {\n  try {\n    span.end();\n  } catch (error) {\n    logInstrumentationError7(\"span end\", error);\n  }\n}\nfunction logInstrumentationError7(operation, error) {\n  debugLogger.error(\n    `Failed to process Cloudflare Agents ${operation} instrumentation:`,\n    error\n  );\n}\n\n// src/instrumentation/braintrust-plugin.ts\nvar BraintrustPlugin = class extends BasePlugin {\n  config;\n  openaiPlugin = null;\n  openAICodexPlugin = null;\n  anthropicPlugin = null;\n  aiSDKPlugin = null;\n  claudeAgentSDKPlugin = null;\n  cloudflareThinkPlugin = null;\n  cursorSDKPlugin = null;\n  openAIAgentsPlugin = null;\n  googleGenerativeAIPlugin = null;\n  googleGenAIPlugin = null;\n  huggingFacePlugin = null;\n  huggingFaceTransformersPlugin = null;\n  openRouterPlugin = null;\n  openRouterAgentPlugin = null;\n  mistralPlugin = null;\n  langGraphSDKPlugin = null;\n  ollamaPlugin = null;\n  googleADKPlugin = null;\n  coherePlugin = null;\n  groqPlugin = null;\n  bedrockRuntimePlugin = null;\n  genkitPlugin = null;\n  gitHubCopilotPlugin = null;\n  fluePlugin = null;\n  langChainPlugin = null;\n  langSmithPlugin = null;\n  piCodingAgentPlugin = null;\n  strandsAgentSDKPlugin = null;\n  elevenLabsPlugin = null;\n  voyageAIPlugin = null;\n  typeSafePlugin = null;\n  cloudflareAIChatPlugin = null;\n  cloudflareAgentsPlugin = null;\n  constructor(config = {}) {\n    super();\n    this.config = config;\n  }\n  onEnable() {\n    const integrations = this.config.integrations ?? {};\n    if (integrations.openai !== false) {\n      this.openaiPlugin = new OpenAIPlugin();\n      this.openaiPlugin.enable();\n    }\n    if (integrations.openaiCodexSDK !== false) {\n      this.openAICodexPlugin = new OpenAICodexPlugin();\n      this.openAICodexPlugin.enable();\n    }\n    if (integrations.anthropic !== false) {\n      this.anthropicPlugin = new AnthropicPlugin();\n      this.anthropicPlugin.enable();\n    }\n    if (integrations.aisdk !== false && integrations.vercel !== false) {\n      this.aiSDKPlugin = new AISDKPlugin();\n      this.aiSDKPlugin.enable();\n    }\n    if (integrations.claudeAgentSDK !== false) {\n      this.claudeAgentSDKPlugin = new ClaudeAgentSDKPlugin();\n      this.claudeAgentSDKPlugin.enable();\n    }\n    if (integrations.cloudflareThink !== false) {\n      this.cloudflareThinkPlugin = new CloudflareThinkPlugin();\n      this.cloudflareThinkPlugin.enable();\n    }\n    if (integrations.cursorSDK !== false && integrations.cursor !== false) {\n      this.cursorSDKPlugin = new CursorSDKPlugin();\n      this.cursorSDKPlugin.enable();\n    }\n    if (integrations.openAIAgents !== false) {\n      this.openAIAgentsPlugin = new OpenAIAgentsPlugin();\n      this.openAIAgentsPlugin.enable();\n    }\n    if (integrations.googleGenerativeAI !== false) {\n      this.googleGenerativeAIPlugin = new GoogleGenerativeAIPlugin();\n      this.googleGenerativeAIPlugin.enable();\n    }\n    if (integrations.googleGenAI !== false && integrations.google !== false) {\n      this.googleGenAIPlugin = new GoogleGenAIPlugin();\n      this.googleGenAIPlugin.enable();\n    }\n    if (integrations.huggingface !== false) {\n      this.huggingFacePlugin = new HuggingFacePlugin();\n      this.huggingFacePlugin.enable();\n      this.huggingFaceTransformersPlugin = new HuggingFaceTransformersPlugin();\n      this.huggingFaceTransformersPlugin.enable();\n    }\n    if (integrations.openrouter !== false) {\n      this.openRouterPlugin = new OpenRouterPlugin();\n      this.openRouterPlugin.enable();\n    }\n    if (integrations.openrouterAgent !== false) {\n      this.openRouterAgentPlugin = new OpenRouterAgentPlugin();\n      this.openRouterAgentPlugin.enable();\n    }\n    if (integrations.mistral !== false) {\n      this.mistralPlugin = new MistralPlugin();\n      this.mistralPlugin.enable();\n    }\n    if (integrations.langgraphSDK !== false) {\n      this.langGraphSDKPlugin = new LangGraphSDKPlugin();\n      this.langGraphSDKPlugin.enable();\n    }\n    if (integrations.ollama !== false) {\n      this.ollamaPlugin = new OllamaPlugin();\n      this.ollamaPlugin.enable();\n    }\n    if (integrations.googleADK !== false) {\n      this.googleADKPlugin = new GoogleADKPlugin();\n      this.googleADKPlugin.enable();\n    }\n    if (integrations.cohere !== false) {\n      this.coherePlugin = new CoherePlugin();\n      this.coherePlugin.enable();\n    }\n    if (integrations.elevenlabs !== false) {\n      this.elevenLabsPlugin = new ElevenLabsPlugin();\n      this.elevenLabsPlugin.enable();\n    }\n    if (integrations.voyageai !== false) {\n      this.voyageAIPlugin = new VoyageAIPlugin();\n      this.voyageAIPlugin.enable();\n    }\n    if (integrations.typesafe !== false) {\n      this.typeSafePlugin = new TypeSafePlugin();\n      this.typeSafePlugin.enable();\n    }\n    if (integrations.groq !== false) {\n      this.groqPlugin = new GroqPlugin();\n      this.groqPlugin.enable();\n    }\n    if (integrations.bedrock !== false && integrations.awsBedrock !== false && integrations.awsBedrockRuntime !== false) {\n      this.bedrockRuntimePlugin = new BedrockRuntimePlugin();\n      this.bedrockRuntimePlugin.enable();\n    }\n    if (integrations.genkit !== false) {\n      this.genkitPlugin = new GenkitPlugin();\n      this.genkitPlugin.enable();\n    }\n    if (integrations.gitHubCopilot !== false) {\n      this.gitHubCopilotPlugin = new GitHubCopilotPlugin();\n      this.gitHubCopilotPlugin.enable();\n    }\n    if (integrations.piCodingAgent !== false) {\n      this.piCodingAgentPlugin = new PiCodingAgentPlugin();\n      this.piCodingAgentPlugin.enable();\n    }\n    if (integrations.strandsAgentSDK !== false) {\n      this.strandsAgentSDKPlugin = new StrandsAgentSDKPlugin();\n      this.strandsAgentSDKPlugin.enable();\n    }\n    if (integrations.cloudflareAIChat !== false) {\n      this.cloudflareAIChatPlugin = new CloudflareAIChatPlugin();\n      this.cloudflareAIChatPlugin.enable();\n    }\n    if (integrations.cloudflareAgents !== false) {\n      this.cloudflareAgentsPlugin = new CloudflareAgentsPlugin();\n      this.cloudflareAgentsPlugin.enable();\n    }\n    if (integrations.flue !== false) {\n      this.fluePlugin = new FluePlugin();\n      this.fluePlugin.enable();\n    }\n    if (integrations.langchain !== false && integrations.langgraph !== false) {\n      this.langChainPlugin = new LangChainPlugin();\n      this.langChainPlugin.enable();\n    }\n    if (integrations.langsmith !== false) {\n      this.langSmithPlugin = new LangSmithPlugin({\n        skipLangChainRuns: integrations.langchain !== false\n      });\n      this.langSmithPlugin.enable();\n    }\n  }\n  onDisable() {\n    if (this.openaiPlugin) {\n      this.openaiPlugin.disable();\n      this.openaiPlugin = null;\n    }\n    if (this.openAICodexPlugin) {\n      this.openAICodexPlugin.disable();\n      this.openAICodexPlugin = null;\n    }\n    if (this.anthropicPlugin) {\n      this.anthropicPlugin.disable();\n      this.anthropicPlugin = null;\n    }\n    if (this.aiSDKPlugin) {\n      this.aiSDKPlugin.disable();\n      this.aiSDKPlugin = null;\n    }\n    if (this.claudeAgentSDKPlugin) {\n      this.claudeAgentSDKPlugin.disable();\n      this.claudeAgentSDKPlugin = null;\n    }\n    if (this.cloudflareThinkPlugin) {\n      this.cloudflareThinkPlugin.disable();\n      this.cloudflareThinkPlugin = null;\n    }\n    if (this.cursorSDKPlugin) {\n      this.cursorSDKPlugin.disable();\n      this.cursorSDKPlugin = null;\n    }\n    if (this.openAIAgentsPlugin) {\n      this.openAIAgentsPlugin.disable();\n      this.openAIAgentsPlugin = null;\n    }\n    if (this.googleGenerativeAIPlugin) {\n      this.googleGenerativeAIPlugin.disable();\n      this.googleGenerativeAIPlugin = null;\n    }\n    if (this.googleGenAIPlugin) {\n      this.googleGenAIPlugin.disable();\n      this.googleGenAIPlugin = null;\n    }\n    if (this.huggingFacePlugin) {\n      this.huggingFacePlugin.disable();\n      this.huggingFacePlugin = null;\n    }\n    if (this.huggingFaceTransformersPlugin) {\n      this.huggingFaceTransformersPlugin.disable();\n      this.huggingFaceTransformersPlugin = null;\n    }\n    if (this.openRouterPlugin) {\n      this.openRouterPlugin.disable();\n      this.openRouterPlugin = null;\n    }\n    if (this.openRouterAgentPlugin) {\n      this.openRouterAgentPlugin.disable();\n      this.openRouterAgentPlugin = null;\n    }\n    if (this.mistralPlugin) {\n      this.mistralPlugin.disable();\n      this.mistralPlugin = null;\n    }\n    if (this.langGraphSDKPlugin) {\n      this.langGraphSDKPlugin.disable();\n      this.langGraphSDKPlugin = null;\n    }\n    if (this.ollamaPlugin) {\n      this.ollamaPlugin.disable();\n      this.ollamaPlugin = null;\n    }\n    if (this.googleADKPlugin) {\n      this.googleADKPlugin.disable();\n      this.googleADKPlugin = null;\n    }\n    if (this.coherePlugin) {\n      this.coherePlugin.disable();\n      this.coherePlugin = null;\n    }\n    if (this.elevenLabsPlugin) {\n      this.elevenLabsPlugin.disable();\n      this.elevenLabsPlugin = null;\n    }\n    if (this.voyageAIPlugin) {\n      this.voyageAIPlugin.disable();\n      this.voyageAIPlugin = null;\n    }\n    if (this.typeSafePlugin) {\n      this.typeSafePlugin.disable();\n      this.typeSafePlugin = null;\n    }\n    if (this.groqPlugin) {\n      this.groqPlugin.disable();\n      this.groqPlugin = null;\n    }\n    if (this.bedrockRuntimePlugin) {\n      this.bedrockRuntimePlugin.disable();\n      this.bedrockRuntimePlugin = null;\n    }\n    if (this.genkitPlugin) {\n      this.genkitPlugin.disable();\n      this.genkitPlugin = null;\n    }\n    if (this.gitHubCopilotPlugin) {\n      this.gitHubCopilotPlugin.disable();\n      this.gitHubCopilotPlugin = null;\n    }\n    if (this.piCodingAgentPlugin) {\n      this.piCodingAgentPlugin.disable();\n      this.piCodingAgentPlugin = null;\n    }\n    if (this.strandsAgentSDKPlugin) {\n      this.strandsAgentSDKPlugin.disable();\n      this.strandsAgentSDKPlugin = null;\n    }\n    if (this.cloudflareAIChatPlugin) {\n      this.cloudflareAIChatPlugin.disable();\n      this.cloudflareAIChatPlugin = null;\n    }\n    if (this.cloudflareAgentsPlugin) {\n      this.cloudflareAgentsPlugin.disable();\n      this.cloudflareAgentsPlugin = null;\n    }\n    if (this.fluePlugin) {\n      this.fluePlugin.disable();\n      this.fluePlugin = null;\n    }\n    if (this.langChainPlugin) {\n      this.langChainPlugin.disable();\n      this.langChainPlugin = null;\n    }\n    if (this.langSmithPlugin) {\n      this.langSmithPlugin.disable();\n      this.langSmithPlugin = null;\n    }\n  }\n};\n\n// src/instrumentation/config.ts\nvar envIntegrationAliases = {\n  openai: \"openai\",\n  \"openai-codex\": \"openaiCodexSDK\",\n  \"openai-codex-sdk\": \"openaiCodexSDK\",\n  openaicodexsdk: \"openaiCodexSDK\",\n  codex: \"openaiCodexSDK\",\n  \"codex-sdk\": \"openaiCodexSDK\",\n  \"pi-coding-agent\": \"piCodingAgent\",\n  \"pi-coding-agent-sdk\": \"piCodingAgent\",\n  picodingagent: \"piCodingAgent\",\n  picodingagentsdk: \"piCodingAgent\",\n  \"@earendil-works/pi-coding-agent\": \"piCodingAgent\",\n  strandsAgentSDK: \"strandsAgentSDK\",\n  strandsagentsdk: \"strandsAgentSDK\",\n  \"strands-agent-sdk\": \"strandsAgentSDK\",\n  \"@strands-agents/sdk\": \"strandsAgentSDK\",\n  agents: \"cloudflareAgents\",\n  \"cloudflare-agents\": \"cloudflareAgents\",\n  cloudflareagents: \"cloudflareAgents\",\n  anthropic: \"anthropic\",\n  aisdk: \"aisdk\",\n  \"ai-sdk\": \"aisdk\",\n  \"vercel-ai\": \"aisdk\",\n  vercel: \"vercel\",\n  claudeagentsdk: \"claudeAgentSDK\",\n  \"claude-agent-sdk\": \"claudeAgentSDK\",\n  cloudflareaichat: \"cloudflareAIChat\",\n  \"cloudflare-ai-chat\": \"cloudflareAIChat\",\n  \"@cloudflare/ai-chat\": \"cloudflareAIChat\",\n  cloudflarethink: \"cloudflareThink\",\n  cursor: \"cursor\",\n  \"cursor-sdk\": \"cursorSDK\",\n  cursorsdk: \"cursorSDK\",\n  flue: \"flue\",\n  \"flue-runtime\": \"flue\",\n  mastra: \"mastra\",\n  \"openai-agents\": \"openAIAgents\",\n  openaiagents: \"openAIAgents\",\n  \"openai-agents-core\": \"openAIAgents\",\n  openaiagentscore: \"openAIAgents\",\n  google: \"google\",\n  \"google-generative-ai\": \"googleGenerativeAI\",\n  googlegenerativeai: \"googleGenerativeAI\",\n  \"google-genai\": \"googleGenAI\",\n  googlegenai: \"googleGenAI\",\n  huggingface: \"huggingface\",\n  \"@huggingface/transformers\": \"huggingface\",\n  transformers: \"huggingface\",\n  openrouter: \"openrouter\",\n  openrouteragent: \"openrouterAgent\",\n  \"openrouter-agent\": \"openrouterAgent\",\n  mistral: \"mistral\",\n  ollama: \"ollama\",\n  googleadk: \"googleADK\",\n  \"google-adk\": \"googleADK\",\n  cohere: \"cohere\",\n  groq: \"groq\",\n  \"groq-sdk\": \"groq\",\n  bedrock: \"bedrock\",\n  \"aws-bedrock\": \"awsBedrock\",\n  awsbedrock: \"awsBedrock\",\n  \"aws-bedrock-runtime\": \"awsBedrockRuntime\",\n  awsbedrockruntime: \"awsBedrockRuntime\",\n  \"@aws-sdk/client-bedrock-runtime\": \"awsBedrockRuntime\",\n  genkit: \"genkit\",\n  \"firebase-genkit\": \"genkit\",\n  githubcopilot: \"gitHubCopilot\",\n  \"github-copilot\": \"gitHubCopilot\",\n  \"copilot-sdk\": \"gitHubCopilot\",\n  langchain: \"langchain\",\n  \"langchain-js\": \"langchain\",\n  \"@langchain\": \"langchain\",\n  langgraph: \"langgraph\",\n  langgraphsdk: \"langgraphSDK\",\n  \"langgraph-sdk\": \"langgraphSDK\",\n  \"@langchain/langgraph-sdk\": \"langgraphSDK\",\n  langsmith: \"langsmith\",\n  voyage: \"voyageai\",\n  \"voyage-ai\": \"voyageai\",\n  voyageai: \"voyageai\",\n  typesafe: \"typesafe\",\n  \"typesafe-ai\": \"typesafe\",\n  \"@typesafe-ai/sdk\": \"typesafe\",\n  elevenlabs: \"elevenlabs\",\n  \"@elevenlabs/elevenlabs-js\": \"elevenlabs\"\n};\nfunction getDefaultInstrumentationIntegrations() {\n  return {\n    openai: true,\n    openaiCodexSDK: true,\n    anthropic: true,\n    vercel: true,\n    aisdk: true,\n    google: true,\n    googleGenAI: true,\n    googleGenerativeAI: true,\n    googleADK: true,\n    huggingface: true,\n    claudeAgentSDK: true,\n    cloudflareAIChat: true,\n    cloudflareThink: true,\n    cursor: true,\n    cursorSDK: true,\n    flue: true,\n    mastra: true,\n    openAIAgents: true,\n    openrouter: true,\n    openrouterAgent: true,\n    mistral: true,\n    ollama: true,\n    cohere: true,\n    groq: true,\n    bedrock: true,\n    awsBedrock: true,\n    awsBedrockRuntime: true,\n    genkit: true,\n    gitHubCopilot: true,\n    langchain: true,\n    langgraph: true,\n    langgraphSDK: true,\n    langsmith: true,\n    voyageai: true,\n    typesafe: true,\n    elevenlabs: true,\n    piCodingAgent: true,\n    strandsAgentSDK: true,\n    cloudflareAgents: true\n  };\n}\nfunction readDisabledInstrumentationEnvConfig(disabledList) {\n  const integrations = {};\n  if (disabledList) {\n    for (const value of disabledList.split(\",\")) {\n      const rawSdk = value.trim();\n      const sdk = rawSdk.toLowerCase();\n      if (sdk.length > 0) {\n        integrations[envIntegrationAliases[rawSdk] ?? envIntegrationAliases[sdk] ?? sdk] = false;\n      }\n    }\n  }\n  return { integrations };\n}\n\n// src/instrumentation/registry.ts\nvar REGISTRY_STATE_KEY = /* @__PURE__ */ Symbol.for(\n  `braintrust.registry.global-hooks.v${GLOBAL_INSTRUMENTATION_HOOKS_PROTOCOL_VERSION}`\n);\nfunction getSharedState() {\n  const state = globalThis[/* @__PURE__ */ Symbol.for(\"braintrust-state\")];\n  return state && typeof state === \"object\" ? state : void 0;\n}\nvar PluginRegistry = class {\n  braintrustPlugin = null;\n  config = {};\n  enabled = false;\n  /**\n   * Configure which integrations should be enabled.\n   * This must be called before any SDK imports to take effect.\n   */\n  configure(config) {\n    if (this.enabled) {\n      console.warn(\n        \"Braintrust: Cannot configure instrumentation after it has been enabled. Call configureInstrumentation() before importing any AI SDKs.\"\n      );\n      return;\n    }\n    if (\"spanCustomizers\" in config) {\n      setSpanCustomizers(config.spanCustomizers);\n    }\n    this.config = { ...this.config, ...config };\n  }\n  /**\n   * Enable all configured plugins.\n   * Called automatically when the library is loaded.\n   */\n  enable() {\n    if (this.enabled) {\n      return;\n    }\n    const sharedState = getSharedState();\n    if (sharedState) {\n      if (sharedState[REGISTRY_STATE_KEY] !== void 0) {\n        return;\n      }\n      sharedState[REGISTRY_STATE_KEY] = this;\n    }\n    this.enabled = true;\n    const envConfig = this.readEnvConfig();\n    const finalConfig = {\n      integrations: {\n        ...this.getDefaultConfig(),\n        ...this.config.integrations,\n        ...envConfig.integrations\n      }\n    };\n    this.braintrustPlugin = new BraintrustPlugin(finalConfig);\n    this.braintrustPlugin.enable();\n  }\n  /**\n   * Disable all plugins.\n   * Primarily used for testing.\n   */\n  disable() {\n    if (!this.enabled) {\n      return;\n    }\n    this.enabled = false;\n    const sharedState = getSharedState();\n    if (sharedState && sharedState[REGISTRY_STATE_KEY] === this) {\n      delete sharedState[REGISTRY_STATE_KEY];\n    }\n    if (this.braintrustPlugin) {\n      this.braintrustPlugin.disable();\n      this.braintrustPlugin = null;\n    }\n  }\n  /**\n   * Check if instrumentation is enabled.\n   */\n  isEnabled() {\n    return this.enabled;\n  }\n  /**\n   * Get default configuration (all integrations enabled).\n   */\n  getDefaultConfig() {\n    return getDefaultInstrumentationIntegrations();\n  }\n  /**\n   * Read configuration from environment variables.\n   * Supports: BRAINTRUST_DISABLE_INSTRUMENTATION=openai,anthropic,...\n   */\n  readEnvConfig() {\n    return readDisabledInstrumentationEnvConfig(\n      isomorph_default.getEnv(\"BRAINTRUST_DISABLE_INSTRUMENTATION\")\n    );\n  }\n};\nvar registry = new PluginRegistry();\nfunction configureInstrumentation(config) {\n  registry.configure(config);\n}\n\n// src/browser/config.ts\nvar browserConfigured = false;\nfunction configureBrowser() {\n  if (browserConfigured) {\n    return;\n  }\n  isomorph_default.buildType = \"browser\";\n  try {\n    if (typeof AsyncLocalStorage !== \"undefined\") {\n      isomorph_default.newAsyncLocalStorage = () => new AsyncLocalStorage();\n    }\n  } catch {\n  }\n  isomorph_default.getEnv = (name) => {\n    if (typeof process === \"undefined\" || typeof process.env === \"undefined\") {\n      return void 0;\n    }\n    return process.env[name];\n  };\n  isomorph_default.getBraintrustApiKey = async () => {\n    const value = isomorph_default.getEnv(\"BRAINTRUST_API_KEY\");\n    return value?.trim() ? value : void 0;\n  };\n  isomorph_default.hash = (data) => {\n    let hash = 0;\n    for (let i = 0; i < data.length; i++) {\n      const char = data.charCodeAt(i);\n      hash = (hash << 5) - hash + char;\n      hash = hash & hash;\n    }\n    const hashHex = (hash >>> 0).toString(16).padStart(8, \"0\");\n    return hashHex.repeat(8).substring(0, 64);\n  };\n  _internalSetInitialState();\n  registry.enable();\n  browserConfigured = true;\n}\n\n// src/exports.ts\nvar exports_exports = {};\n__export(exports_exports, {\n  Attachment: () => Attachment,\n  AttachmentReference: () => AttachmentReference,\n  BAGGAGE_HEADER: () => BAGGAGE_HEADER,\n  BRAINTRUST_CURRENT_SPAN_STORE: () => BRAINTRUST_CURRENT_SPAN_STORE,\n  BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME: () => BRAINTRUST_LANGCHAIN_CALLBACK_HANDLER_NAME,\n  BRAINTRUST_PARENT_KEY: () => BRAINTRUST_PARENT_KEY,\n  BaseAttachment: () => BaseAttachment,\n  BaseExperiment: () => BaseExperiment,\n  BraintrustLangChainCallbackHandler: () => BraintrustLangChainCallbackHandler,\n  BraintrustMiddleware: () => BraintrustMiddleware,\n  BraintrustObservabilityExporter: () => BraintrustObservabilityExporter,\n  BraintrustState: () => BraintrustState,\n  BraintrustStream: () => BraintrustStream,\n  CachedSpanFetcher: () => CachedSpanFetcher,\n  CodeFunction: () => CodeFunction,\n  CodePrompt: () => CodePrompt,\n  ContextManager: () => ContextManager,\n  DEFAULT_FETCH_BATCH_SIZE: () => DEFAULT_FETCH_BATCH_SIZE,\n  DEFAULT_MAX_REQUEST_SIZE: () => DEFAULT_MAX_REQUEST_SIZE,\n  Dataset: () => Dataset2,\n  DatasetPipeline: () => DatasetPipeline,\n  ERR_PERMALINK: () => ERR_PERMALINK,\n  Eval: () => Eval,\n  EvalResultWithSummary: () => EvalResultWithSummary,\n  Experiment: () => Experiment2,\n  ExternalAttachment: () => ExternalAttachment,\n  FailedHTTPResponse: () => FailedHTTPResponse,\n  IDGenerator: () => IDGenerator,\n  JSONAttachment: () => JSONAttachment,\n  LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,\n  LOGS3_OVERFLOW_REFERENCE_TYPE: () => LOGS3_OVERFLOW_REFERENCE_TYPE,\n  LazyValue: () => LazyValue,\n  LocalTrace: () => LocalTrace,\n  Logger: () => Logger,\n  LoginInvalidOrgError: () => LoginInvalidOrgError,\n  NOOP_SPAN: () => NOOP_SPAN,\n  NOOP_SPAN_PERMALINK: () => NOOP_SPAN_PERMALINK,\n  NoopSpan: () => NoopSpan,\n  OTELIDGenerator: () => OTELIDGenerator,\n  ObjectFetcher: () => ObjectFetcher,\n  Project: () => Project2,\n  ProjectNameIdMap: () => ProjectNameIdMap,\n  Prompt: () => Prompt2,\n  PromptBuilder: () => PromptBuilder,\n  ReadonlyAttachment: () => ReadonlyAttachment,\n  ReadonlyExperiment: () => ReadonlyExperiment,\n  Reporter: () => Reporter,\n  ScorerBuilder: () => ScorerBuilder,\n  SpanFetcher: () => SpanFetcher,\n  SpanImpl: () => SpanImpl,\n  TRACEPARENT_HEADER: () => TRACEPARENT_HEADER,\n  TRACESTATE_HEADER: () => TRACESTATE_HEADER,\n  TestBackgroundLogger: () => TestBackgroundLogger,\n  ToolBuilder: () => ToolBuilder,\n  UUIDGenerator: () => UUIDGenerator,\n  WorkflowBatchScorer: () => WorkflowBatchScorer,\n  WorkflowBatchTask: () => WorkflowBatchTask,\n  WorkflowEvalMemoryStore: () => WorkflowEvalMemoryStore,\n  WorkflowEvalRedisStore: () => WorkflowEvalRedisStore,\n  WorkflowScorer: () => WorkflowScorer,\n  WorkflowTask: () => WorkflowTask,\n  X_CACHED_HEADER: () => X_CACHED_HEADER,\n  _exportsForTestingOnly: () => _exportsForTestingOnly,\n  _internalGetGlobalState: () => _internalGetGlobalState,\n  _internalIso: () => isomorph_default,\n  _internalSetInitialState: () => _internalSetInitialState,\n  addAzureBlobHeaders: () => addAzureBlobHeaders,\n  agentAssertionScorer: () => agentAssertionScorer,\n  braintrustAISDKTelemetry: () => braintrustAISDKTelemetry,\n  braintrustEveHook: () => braintrustEveHook,\n  braintrustEveInstrumentation: () => braintrustEveInstrumentation,\n  braintrustFlueInstrumentation: () => braintrustFlueInstrumentation,\n  braintrustFlueObserver: () => braintrustFlueObserver,\n  braintrustStreamChunkSchema: () => braintrustStreamChunkSchema,\n  buildLocalSummary: () => buildLocalSummary,\n  collectAnthropicSession: () => collectAnthropicSession,\n  completeOpenAIBatchTrace: () => completeOpenAIBatchTrace,\n  configureInstrumentation: () => configureInstrumentation,\n  constructLogs3OverflowRequest: () => constructLogs3OverflowRequest,\n  createFinalValuePassThroughStream: () => createFinalValuePassThroughStream,\n  currentExperiment: () => currentExperiment,\n  currentLogger: () => currentLogger,\n  currentSpan: () => currentSpan,\n  deepCopyEvent: () => deepCopyEvent,\n  defaultErrorScoreHandler: () => defaultErrorScoreHandler,\n  defineWorkflowEval: () => defineWorkflowEval,\n  deserializePlainStringAsJSON: () => deserializePlainStringAsJSON,\n  devNullWritableStream: () => devNullWritableStream,\n  evaluatorDefinitionSchema: () => evaluatorDefinitionSchema,\n  evaluatorDefinitionsSchema: () => evaluatorDefinitionsSchema,\n  extractTraceContextFromHeaders: () => extractTraceContextFromHeaders,\n  failOpenAIAgentsTrace: () => failOpenAIAgentsTrace,\n  flush: () => flush,\n  getContextManager: () => getContextManager,\n  getIdGenerator: () => getIdGenerator,\n  getPromptVersions: () => getPromptVersions,\n  getSpanParentObject: () => getSpanParentObject,\n  getTemplateRenderer: () => getTemplateRenderer,\n  graph: () => graph_framework_exports,\n  init: () => init,\n  initDataset: () => initDataset,\n  initExperiment: () => initExperiment,\n  initFunction: () => initFunction,\n  initLogger: () => initLogger,\n  initNodeTestSuite: () => initNodeTestSuite,\n  injectTraceContext: () => injectTraceContext,\n  invoke: () => invoke,\n  isTemplateFormat: () => isTemplateFormat,\n  loadParameters: () => loadParameters,\n  loadPrompt: () => loadPrompt,\n  log: () => log,\n  logError: () => logError,\n  login: () => login,\n  loginToState: () => loginToState,\n  logs3OverflowUploadSchema: () => logs3OverflowUploadSchema,\n  newId: () => newId,\n  openaiBatchesRetrieveTraced: () => openaiBatchesRetrieveTraced,\n  openaiFilesCreateTraced: () => openaiFilesCreateTraced,\n  parseCachedHeader: () => parseCachedHeader,\n  parseTemplateFormat: () => parseTemplateFormat,\n  permalink: () => permalink,\n  pickLogs3OverflowObjectIds: () => pickLogs3OverflowObjectIds,\n  projects: () => projects,\n  promptContentsSchema: () => promptContentsSchema,\n  promptDefinitionSchema: () => promptDefinitionSchema,\n  promptDefinitionToPromptData: () => promptDefinitionToPromptData,\n  promptDefinitionWithToolsSchema: () => promptDefinitionWithToolsSchema,\n  registerOtelFlush: () => registerOtelFlush,\n  registerSandbox: () => registerSandbox,\n  registerTemplatePlugin: () => registerTemplatePlugin,\n  renderMessage: () => renderMessage,\n  renderPromptParams: () => renderPromptParams,\n  renderTemplateContent: () => renderTemplateContent,\n  reportFailures: () => reportFailures,\n  runEvaluator: () => runEvaluator,\n  setFetch: () => setFetch,\n  setMaskingFunction: () => setMaskingFunction,\n  spanComponentsToObjectId: () => spanComponentsToObjectId,\n  startOpenAIAgentsTrace: () => startOpenAIAgentsTrace,\n  startSpan: () => startSpan,\n  summarize: () => summarize,\n  templateRegistry: () => templateRegistry,\n  toolFunctionDefinitionSchema: () => ToolFunctionDefinition,\n  traceable: () => traceable,\n  traced: () => traced,\n  updateOpenAIAgentsTrace: () => updateOpenAIAgentsTrace,\n  updateSpan: () => updateSpan,\n  uploadLogs3OverflowPayload: () => uploadLogs3OverflowPayload,\n  utf8ByteLength: () => utf8ByteLength2,\n  withCurrent: () => withCurrent,\n  withDataset: () => withDataset,\n  withExperiment: () => withExperiment,\n  withLogger: () => withLogger,\n  withParent: () => withParent,\n  wrapAISDK: () => wrapAISDK,\n  wrapAISDKModel: () => wrapAISDKModel,\n  wrapAgentClass: () => wrapAgentClass,\n  wrapAnthropic: () => wrapAnthropic,\n  wrapBedrockRuntime: () => wrapBedrockRuntime,\n  wrapClaudeAgentSDK: () => wrapClaudeAgentSDK,\n  wrapCloudflareAIChat: () => wrapCloudflareAIChat,\n  wrapCloudflareAgent: () => wrapCloudflareAgent,\n  wrapCloudflareThink: () => wrapCloudflareThink,\n  wrapCohere: () => wrapCohere,\n  wrapCopilotClient: () => wrapCopilotClient,\n  wrapCursorSDK: () => wrapCursorSDK,\n  wrapElevenLabs: () => wrapElevenLabs,\n  wrapGenkit: () => wrapGenkit,\n  wrapGoogleADK: () => wrapGoogleADK,\n  wrapGoogleGenAI: () => wrapGoogleGenAI,\n  wrapGoogleGenerativeAI: () => wrapGoogleGenerativeAI,\n  wrapGroq: () => wrapGroq,\n  wrapHuggingFace: () => wrapHuggingFace,\n  wrapHuggingFaceTransformers: () => wrapHuggingFaceTransformers,\n  wrapLangGraphSDK: () => wrapLangGraphSDK,\n  wrapLangSmithClient: () => wrapLangSmithClient,\n  wrapLangSmithRunTrees: () => wrapLangSmithRunTrees,\n  wrapLangSmithTraceable: () => wrapLangSmithTraceable,\n  wrapMastraAgent: () => wrapMastraAgent,\n  wrapMistral: () => wrapMistral,\n  wrapOllama: () => wrapOllama,\n  wrapOpenAI: () => wrapOpenAI,\n  wrapOpenAICodexSDK: () => wrapOpenAICodexSDK,\n  wrapOpenAIv4: () => wrapOpenAIv4,\n  wrapOpenRouter: () => wrapOpenRouter,\n  wrapOpenRouterAgent: () => wrapOpenRouterAgent,\n  wrapPiCodingAgentSDK: () => wrapPiCodingAgentSDK,\n  wrapStrandsAgentSDK: () => wrapStrandsAgentSDK,\n  wrapTraced: () => wrapTraced,\n  wrapTypeSafe: () => wrapTypeSafe,\n  wrapVitest: () => wrapVitest,\n  wrapVoyageAI: () => wrapVoyageAI\n});\n\n// src/sandbox.ts\nvar import_v39 = require(\"zod/v3\");\nvar SANDBOX_GROUP_NAME_METADATA_KEY = \"_bt_sandbox_group_name\";\nasync function registerSandbox(options) {\n  const state = options.state ?? _internalGetGlobalState();\n  await state.login({\n    apiKey: options.apiKey,\n    appUrl: options.appUrl,\n    orgName: options.orgName\n  });\n  const projectResponse = await state.appConn().post_json(\"api/project/register\", {\n    project_name: options.project,\n    org_id: state.orgId\n  });\n  const projectId = projectResponse.project.id;\n  if (!state.orgName) {\n    throw new Error(\"Organization name is required to register sandbox evals\");\n  }\n  const runtimeContext = {\n    runtime: \"node\",\n    version: process.version.slice(1)\n  };\n  const listResponse = await state.proxyConn().post(\n    \"function/sandbox-list\",\n    {\n      sandbox_spec: {\n        provider: options.sandbox.provider,\n        snapshot_ref: options.sandbox.snapshotRef\n      },\n      runtime_context: runtimeContext,\n      entrypoints: options.entrypoints,\n      project_id: projectId\n    },\n    {\n      headers: {\n        \"x-bt-org-name\": state.orgName\n      }\n    }\n  );\n  const evaluatorDefinitions = import_v39.z.record(import_v39.z.unknown()).parse(await listResponse.json());\n  const functions = [];\n  for (const [evalName, evaluatorDefinition] of Object.entries(\n    evaluatorDefinitions\n  )) {\n    const functionName = evalName;\n    const functionSlug = slugify(evalName, { lower: true, strict: true });\n    const functionDef = {\n      project_id: projectId,\n      org_name: state.orgName,\n      name: functionName,\n      slug: functionSlug,\n      function_type: \"sandbox\",\n      function_data: {\n        type: \"code\",\n        data: {\n          type: \"bundle\",\n          runtime_context: runtimeContext,\n          location: {\n            type: \"sandbox\",\n            sandbox_spec: {\n              provider: options.sandbox.provider,\n              snapshot_ref: options.sandbox.snapshotRef\n            },\n            entrypoints: options.entrypoints,\n            eval_name: evalName,\n            evaluator_definition: evaluatorDefinition\n          },\n          bundle_id: null,\n          preview: null\n        }\n      },\n      metadata: {\n        ...options.metadata ?? {},\n        [SANDBOX_GROUP_NAME_METADATA_KEY]: options.name\n      },\n      if_exists: options.ifExists ?? \"replace\"\n    };\n    if (options.description !== void 0) {\n      functionDef.description = options.description;\n    }\n    const response = await state.apiConn().post_json(\"v1/function\", functionDef);\n    functions.push({\n      evalName,\n      id: response.id,\n      name: response.name,\n      slug: response.slug\n    });\n  }\n  return {\n    projectId,\n    functions\n  };\n}\n\n// src/wrappers/openai-promise-utils.ts\nfunction splitSpanInfo(allParams) {\n  const { span_info, ...params } = allParams;\n  return {\n    params,\n    span_info\n  };\n}\nfunction createChannelContext(_channel, params, span_info) {\n  return {\n    arguments: (\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      [params]\n    ),\n    span_info\n  };\n}\nasync function tracePromiseWithResponse(channel2, traceContext, apiPromise) {\n  let enhancedResponse;\n  const tracePromise = (\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    channel2.tracePromise\n  );\n  const data = await tracePromise(async () => {\n    enhancedResponse = await apiPromise.withResponse();\n    traceContext.response = enhancedResponse.response;\n    return enhancedResponse.data;\n  }, traceContext);\n  if (!enhancedResponse) {\n    throw new Error(\"Expected withResponse() to provide response\");\n  }\n  return {\n    data,\n    response: enhancedResponse.response,\n    request_id: enhancedResponse.request_id\n  };\n}\nasync function tracePromiseAsResponse(channel2, traceContext, apiPromise) {\n  const tracePromise = (\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    channel2.tracePromise\n  );\n  let response;\n  await tracePromise(async () => {\n    response = await apiPromise.asResponse();\n    traceContext.response = response;\n    return void 0;\n  }, traceContext);\n  if (!response) {\n    throw new Error(\"Expected asResponse() to provide response\");\n  }\n  return response;\n}\nfunction createLazyAPIPromise(ensureExecuted, ensureResponse, getAPIPromise) {\n  let firstConsumption;\n  let enhancedResponsePromise;\n  let dataPromise;\n  let responsePromise;\n  const withResponse = () => {\n    firstConsumption ??= \"data\";\n    enhancedResponsePromise ??= firstConsumption === \"data\" ? ensureExecuted() : getAPIPromise().withResponse();\n    return enhancedResponsePromise;\n  };\n  const asResponse = () => {\n    firstConsumption ??= \"response\";\n    responsePromise ??= firstConsumption === \"response\" ? ensureResponse() : getAPIPromise().asResponse();\n    return responsePromise;\n  };\n  return new Proxy({}, {\n    get(target, prop, receiver) {\n      if (prop === \"withResponse\") {\n        return withResponse;\n      }\n      if (prop === \"asResponse\") {\n        return asResponse;\n      }\n      if (prop === \"then\" || prop === \"catch\" || prop === \"finally\" || prop in Promise.prototype) {\n        dataPromise ??= withResponse().then((result) => result.data);\n        const value = Reflect.get(dataPromise, prop, receiver);\n        return typeof value === \"function\" ? value.bind(dataPromise) : value;\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\n\n// src/openai-batch.ts\nfunction read3(value, key) {\n  if (value === null || typeof value !== \"object\" && typeof value !== \"function\") {\n    return void 0;\n  }\n  try {\n    return Reflect.get(value, key);\n  } catch {\n    return void 0;\n  }\n}\nfunction isAsyncIterable5(value) {\n  return typeof read3(value, Symbol.asyncIterator) === \"function\";\n}\nfunction teeAsyncIterable(source) {\n  const iterator = source[Symbol.asyncIterator]();\n  const stream = new ReadableStream({\n    async pull(controller) {\n      try {\n        const result = await iterator.next();\n        if (result.done) {\n          controller.close();\n          return;\n        }\n        if (!(result.value instanceof Uint8Array)) {\n          throw new TypeError(\n            \"OpenAI upload streams must yield Uint8Array chunks\"\n          );\n        }\n        controller.enqueue(result.value);\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    async cancel(reason) {\n      await iterator.return?.(reason);\n    }\n  });\n  const [uploadStream, trace] = stream.tee();\n  const upload = {\n    async *[Symbol.asyncIterator]() {\n      const reader = uploadStream.getReader();\n      try {\n        while (true) {\n          const result = await reader.read();\n          if (result.done) {\n            return;\n          }\n          yield result.value;\n        }\n      } finally {\n        reader.releaseLock();\n      }\n    }\n  };\n  const path = read3(source, \"path\");\n  if (typeof path === \"string\") {\n    Object.defineProperty(upload, \"path\", { value: path });\n  }\n  return { upload, trace: new Response(trace) };\n}\nfunction teeUpload(upload) {\n  if (upload instanceof Blob) {\n    return { upload, trace: new Response(upload) };\n  }\n  if (upload instanceof Response) {\n    return { upload, trace: upload.clone() };\n  }\n  if (isAsyncIterable5(upload)) {\n    return teeAsyncIterable(upload);\n  }\n  return void 0;\n}\nfunction openaiFilesCreateTraced(files) {\n  return (params, options) => {\n    const parent = getSpanParentObject();\n    const purpose = read3(params, \"purpose\");\n    const file = read3(params, \"file\");\n    if (purpose !== \"batch\") {\n      return files.create(params, options);\n    }\n    let branches;\n    try {\n      branches = teeUpload(file);\n    } catch {\n      return files.create(params, options);\n    }\n    if (!branches) {\n      return files.create(params, options);\n    }\n    const tracedParams = {\n      ...Object(params),\n      file: branches.upload\n    };\n    const apiPromise = files.create(tracedParams, options);\n    let enhancedResponse;\n    const tracedResponse = openAIChannels.filesCreateTraced.invoke(\n      async () => {\n        enhancedResponse = await apiPromise.withResponse();\n        return enhancedResponse.data;\n      },\n      files,\n      [{ params, inputFileContent: branches.trace, parent }],\n      {}\n    ).then((data) => {\n      if (!enhancedResponse) {\n        throw new Error(\n          \"Expected OpenAI withResponse() to provide a response\"\n        );\n      }\n      return { ...enhancedResponse, data };\n    });\n    return createLazyAPIPromise(\n      () => tracedResponse,\n      () => tracedResponse.then(({ response }) => response),\n      () => apiPromise\n    );\n  };\n}\nfunction openaiBatchesRetrieveTraced(batches) {\n  return (batchId, options) => {\n    const apiPromise = batches.retrieve(batchId, options);\n    let enhancedResponse;\n    const tracedResponse = openAIChannels.batchesRetrieveTraced.invoke(\n      async () => {\n        enhancedResponse = await apiPromise.withResponse();\n        return enhancedResponse.data;\n      },\n      batches,\n      [{ batchId }],\n      {}\n    ).then((data) => {\n      if (!enhancedResponse) {\n        throw new Error(\n          \"Expected OpenAI withResponse() to provide a response\"\n        );\n      }\n      return { ...enhancedResponse, data };\n    });\n    return createLazyAPIPromise(\n      () => tracedResponse,\n      () => tracedResponse.then(({ response }) => response),\n      () => apiPromise\n    );\n  };\n}\nasync function completeOpenAIBatchTrace(args) {\n  const inputFileContent = Promise.resolve(args.inputFileContent);\n  const outputFileContent = args.outputFileContent === void 0 ? void 0 : Promise.resolve(args.outputFileContent);\n  const errorFileContent = args.errorFileContent === void 0 ? void 0 : Promise.resolve(args.errorFileContent);\n  void inputFileContent.catch(() => void 0);\n  void outputFileContent?.catch(() => void 0);\n  void errorFileContent?.catch(() => void 0);\n  await openAIChannels.batchesCompleteTrace.invoke(\n    async () => void 0,\n    void 0,\n    [\n      {\n        ...args,\n        inputFileContent,\n        outputFileContent,\n        errorFileContent\n      }\n    ],\n    {}\n  );\n}\n\n// src/openai-agents-api.ts\nfunction isRecord3(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction validateStartArgs(value) {\n  if (!isRecord3(value)) {\n    throw new TypeError(\n      \"startOpenAIAgentsTrace expected an OpenAI Agents parameters object\"\n    );\n  }\n  const agent = value.agent;\n  if (agent !== void 0 && agent !== null && !isRecord3(agent)) {\n    throw new TypeError(\n      \"startOpenAIAgentsTrace expected agent to be an object or null\"\n    );\n  }\n  if (isRecord3(agent) && (agent.id !== void 0 && typeof agent.id !== \"string\" || agent.model !== void 0 && typeof agent.model !== \"string\" || agent.name !== void 0 && agent.name !== null && typeof agent.name !== \"string\")) {\n    throw new TypeError(\n      \"startOpenAIAgentsTrace received invalid agent identity fields\"\n    );\n  }\n  if (value.agent_id !== void 0 && typeof value.agent_id !== \"string\") {\n    throw new TypeError(\n      \"startOpenAIAgentsTrace expected agent_id to be a string\"\n    );\n  }\n  if (value.metadata !== void 0 && value.metadata !== null && !isRecord3(value.metadata)) {\n    throw new TypeError(\n      \"startOpenAIAgentsTrace expected metadata to be an object or null\"\n    );\n  }\n  return value;\n}\nfunction validateEvent(event) {\n  if (!isRecord3(event) || typeof event.type !== \"string\" || event.type.length === 0) {\n    throw new TypeError(\n      \"updateOpenAIAgentsTrace expected an OpenAI Agents event object\"\n    );\n  }\n  return event;\n}\nfunction createTraceState() {\n  const parent = _internalExportParentSynchronously(getSpanParentObject());\n  if (!parent) {\n    return null;\n  }\n  const parentComponents = SpanComponentsV4.fromStr(parent);\n  const rowId = newId();\n  const useLegacyIds = resolveUseLegacyUuidIds();\n  const spanId = useLegacyIds ? newId() : newId().replaceAll(\"-\", \"\").slice(0, 16);\n  const rootSpanId = useLegacyIds ? spanId : newId().replaceAll(\"-\", \"\");\n  const root = new SpanComponentsV4({\n    object_type: parentComponents.data.object_type,\n    ...parentComponents.data.object_id ? { object_id: parentComponents.data.object_id } : {\n      compute_object_metadata_args: parentComponents.data.compute_object_metadata_args ?? {}\n    },\n    propagated_event: parentComponents.data.propagated_event,\n    root_span_id: rootSpanId,\n    row_id: rowId,\n    span_id: spanId\n  }).toStr();\n  return {\n    callItems: {},\n    ended: false,\n    eventIds: [],\n    openTools: {},\n    root,\n    rootKey: spanId,\n    rootParent: parent,\n    startTime: getCurrentUnixTimestamp(),\n    subagents: {},\n    turnSubagents: {},\n    version: 1\n  };\n}\nfunction startOpenAIAgentsTrace(args) {\n  const validatedArgs = validateStartArgs(args);\n  const state = createTraceState();\n  if (!state) {\n    return null;\n  }\n  try {\n    void openAIChannels.agentsTraceStart.invoke(\n      async () => state,\n      void 0,\n      [{ args: validatedArgs, state }],\n      {}\n    ).catch((error) => {\n      debugLogger.debug(\n        \"OpenAI Agents API instrumentation could not start:\",\n        error\n      );\n    });\n  } catch (error) {\n    debugLogger.debug(\n      \"OpenAI Agents API instrumentation could not start:\",\n      error\n    );\n  }\n  return state;\n}\nasync function updateOpenAIAgentsTrace(token, event) {\n  const state = token;\n  const validatedEvent = validateEvent(event);\n  try {\n    return await openAIChannels.agentsTraceCapture.invoke(\n      async () => state,\n      void 0,\n      [{ state, event: validatedEvent }],\n      {}\n    );\n  } catch (error) {\n    debugLogger.debug(\n      \"OpenAI Agents API instrumentation could not update:\",\n      error\n    );\n    return token;\n  }\n}\nasync function failOpenAIAgentsTrace(token, error) {\n  const state = token;\n  try {\n    return await openAIChannels.agentsTraceFail.invoke(\n      async () => state,\n      void 0,\n      [{ state, error }],\n      {}\n    );\n  } catch (instrumentationError) {\n    debugLogger.debug(\n      \"OpenAI Agents API instrumentation could not record failure:\",\n      instrumentationError\n    );\n    return token;\n  }\n}\n\n// src/functions/invoke.ts\nasync function invoke(args) {\n  const {\n    orgName,\n    apiKey,\n    appUrl,\n    forceLogin,\n    fetch: fetch2,\n    input,\n    messages,\n    parent: parentArg,\n    metadata,\n    tags,\n    state: stateArg,\n    stream,\n    mode,\n    schema,\n    strict,\n    overrides,\n    projectId,\n    ...functionIdArgs\n  } = args;\n  const state = stateArg ?? _internalGetGlobalState();\n  await state.login({\n    orgName,\n    apiKey,\n    appUrl,\n    forceLogin,\n    fetch: fetch2\n  });\n  const parent = parentArg ? typeof parentArg === \"string\" ? parentArg : await parentArg.export() : await getSpanParentObject().export();\n  const functionId = FunctionId.safeParse({\n    function_id: functionIdArgs.function_id,\n    project_name: functionIdArgs.projectName,\n    slug: functionIdArgs.slug,\n    global_function: functionIdArgs.globalFunction,\n    function_type: functionIdArgs.functionType,\n    prompt_session_id: functionIdArgs.promptSessionId,\n    prompt_session_function_id: functionIdArgs.promptSessionFunctionId,\n    version: functionIdArgs.version\n  });\n  if (!functionId.success) {\n    throw new Error(\n      `Invalid function ID arguments: ${functionId.error.message}`\n    );\n  }\n  const request = {\n    ...functionId.data,\n    input,\n    messages,\n    parent,\n    metadata,\n    tags,\n    stream,\n    mode,\n    strict,\n    overrides\n  };\n  const headers = {\n    Accept: stream ? \"text/event-stream\" : \"application/json\"\n  };\n  if (projectId) {\n    headers[\"x-bt-project-id\"] = projectId;\n  }\n  if (orgName) {\n    headers[\"x-bt-org-name\"] = orgName;\n  }\n  const resp = await state.proxyConn().post(`function/invoke`, request, {\n    headers\n  });\n  if (stream) {\n    if (!resp.body) {\n      throw new Error(\"Received empty stream body\");\n    }\n    return new BraintrustStream(resp.body);\n  } else {\n    const data = await resp.json();\n    return schema ? schema.parse(data) : data;\n  }\n}\nfunction initFunction({\n  projectName,\n  slug,\n  version,\n  state\n}) {\n  const s = state ?? _internalGetGlobalState();\n  s?.spanCache?.disable();\n  const f = async (input) => {\n    return await invoke({\n      projectName,\n      slug,\n      version,\n      input\n    });\n  };\n  Object.defineProperty(f, \"name\", {\n    value: `initFunction-${projectName}-${slug}-${version ?? \"latest\"}`\n  });\n  return f;\n}\n\n// src/wrappers/oai_responses.ts\nfunction responsesProxy(openai) {\n  if (!openai.responses) {\n    return openai;\n  }\n  return new Proxy(openai.responses, {\n    get(target, name, receiver) {\n      if (name === \"create\" && typeof target.create === \"function\") {\n        return wrapResponsesAsync(\n          target.create.bind(target),\n          openAIChannels.responsesCreate\n        );\n      } else if (name === \"stream\" && typeof target.stream === \"function\") {\n        return wrapResponsesSyncStream(\n          target.stream.bind(target),\n          openAIChannels.responsesStream\n        );\n      } else if (name === \"parse\" && typeof target.parse === \"function\") {\n        return wrapResponsesAsync(\n          target.parse.bind(target),\n          openAIChannels.responsesParse\n        );\n      } else if (name === \"compact\" && typeof target.compact === \"function\") {\n        return wrapResponsesAsync(\n          target.compact.bind(target),\n          openAIChannels.responsesCompact\n        );\n      }\n      return Reflect.get(target, name, receiver);\n    }\n  });\n}\nfunction wrapResponsesAsync(target, channel2) {\n  return (allParams, options) => {\n    const { span_info, params } = splitSpanInfo(allParams);\n    let executionPromise = null;\n    let apiPromise = null;\n    const getAPIPromise = () => {\n      apiPromise ??= target(params, options);\n      return apiPromise;\n    };\n    const ensureExecuted = () => {\n      if (!executionPromise) {\n        executionPromise = (async () => {\n          const traceContext = createChannelContext(channel2, params, span_info);\n          return tracePromiseWithResponse(\n            channel2,\n            traceContext,\n            getAPIPromise()\n          );\n        })();\n      }\n      return executionPromise;\n    };\n    return createLazyAPIPromise(\n      ensureExecuted,\n      () => tracePromiseAsResponse(\n        channel2,\n        createChannelContext(channel2, params, span_info),\n        getAPIPromise()\n      ),\n      getAPIPromise\n    );\n  };\n}\nfunction wrapResponsesSyncStream(target, channel2) {\n  return (allParams, options) => {\n    const { span_info, params } = splitSpanInfo(allParams);\n    return channel2.traceSync(() => target(params, options), {\n      arguments: [params],\n      span_info\n    });\n  };\n}\n\n// src/wrappers/oai.ts\nfunction wrapOpenAI(openai) {\n  const oai = openai;\n  if (oai && typeof oai === \"object\" && \"chat\" in oai && typeof oai.chat === \"object\" && oai.chat && \"completions\" in oai.chat && typeof oai.chat.completions === \"object\" && oai.chat.completions && \"create\" in oai.chat.completions) {\n    const typedOpenAI = oai;\n    return wrapOpenAIv4(typedOpenAI);\n  } else {\n    console.warn(\"Unsupported OpenAI library (potentially v3). Not wrapping.\");\n    return openai;\n  }\n}\nglobalThis.__inherited_braintrust_wrap_openai = wrapOpenAI;\nfunction wrapOpenAIv4(openai) {\n  const typedOpenai = openai;\n  const privateMethodWorkaroundCache = /* @__PURE__ */ new WeakMap();\n  const completionProxy = new Proxy(typedOpenai.chat.completions, {\n    get(target, name, receiver) {\n      const baseVal = Reflect.get(target, name, receiver);\n      if (name === \"create\") {\n        return wrapChatCompletion(baseVal.bind(target));\n      } else if (name === \"parse\") {\n        return wrapBetaChatCompletionParse(baseVal.bind(target));\n      } else if (name === \"stream\") {\n        return wrapBetaChatCompletionStream(baseVal.bind(target));\n      }\n      return baseVal;\n    }\n  });\n  const chatProxy3 = new Proxy(typedOpenai.chat, {\n    get(target, name, receiver) {\n      if (name === \"completions\") {\n        return completionProxy;\n      }\n      return Reflect.get(target, name, receiver);\n    }\n  });\n  const embeddingProxy = createEndpointProxy(typedOpenai.embeddings, wrapEmbeddings);\n  const moderationProxy = createEndpointProxy(typedOpenai.moderations, wrapModerations);\n  let betaProxy3;\n  if (typedOpenai.beta?.chat?.completions?.stream) {\n    const betaChatCompletionProxy = new Proxy(\n      typedOpenai?.beta?.chat.completions,\n      {\n        get(target, name, receiver) {\n          const baseVal = Reflect.get(target, name, receiver);\n          if (name === \"parse\") {\n            return wrapBetaChatCompletionParse(baseVal.bind(target));\n          } else if (name === \"stream\") {\n            return wrapBetaChatCompletionStream(baseVal.bind(target));\n          }\n          return baseVal;\n        }\n      }\n    );\n    const betaChatProxy = new Proxy(typedOpenai.beta.chat, {\n      get(target, name, receiver) {\n        if (name === \"completions\") {\n          return betaChatCompletionProxy;\n        }\n        return Reflect.get(target, name, receiver);\n      }\n    });\n    betaProxy3 = new Proxy(typedOpenai.beta, {\n      get(target, name, receiver) {\n        if (name === \"chat\") {\n          return betaChatProxy;\n        }\n        return Reflect.get(target, name, receiver);\n      }\n    });\n  }\n  const mediaProxy = (resource, channels) => new Proxy(resource, {\n    get(target, key) {\n      const value = Reflect.get(target, key, target);\n      const channel2 = typeof key === \"string\" && Object.hasOwn(channels, key) ? channels[key] : void 0;\n      if (channel2 && typeof value === \"function\")\n        return (allParams, options) => {\n          const { span_info, params } = splitSpanInfo(allParams);\n          return channel2.invoke(value, target, [params, options], {\n            span_info\n          });\n        };\n      return typeof value === \"function\" ? value.bind(target) : value;\n    }\n  });\n  const imagesProxy = typedOpenai.images && mediaProxy(typedOpenai.images, {\n    generate: openAIChannels.imagesGenerate,\n    edit: openAIChannels.imagesEdit,\n    createVariation: openAIChannels.imagesCreateVariation\n  });\n  const audioProxy = typedOpenai.audio && new Proxy(typedOpenai.audio, {\n    get(target, key) {\n      if (key === \"speech\")\n        return mediaProxy(target.speech, {\n          create: openAIChannels.audioSpeechCreate\n        });\n      if (key === \"transcriptions\")\n        return mediaProxy(target.transcriptions, {\n          create: openAIChannels.audioTranscriptionsCreate\n        });\n      if (key === \"translations\")\n        return mediaProxy(target.translations, {\n          create: openAIChannels.audioTranslationsCreate\n        });\n      return Reflect.get(target, key, target);\n    }\n  });\n  const topLevelProxy = new Proxy(typedOpenai, {\n    get(target, name) {\n      switch (name) {\n        case \"images\":\n          return imagesProxy;\n        case \"audio\":\n          return audioProxy;\n        case \"chat\":\n          return chatProxy3;\n        case \"embeddings\":\n          return embeddingProxy;\n        case \"moderations\":\n          return moderationProxy;\n        case \"responses\":\n          return responsesProxy(typedOpenai);\n      }\n      if (name === \"beta\" && betaProxy3) {\n        return betaProxy3;\n      }\n      const value = Reflect.get(target, name, target);\n      if (typeof value !== \"function\") {\n        return value;\n      }\n      const cachedValue = privateMethodWorkaroundCache.get(value);\n      if (cachedValue) {\n        return cachedValue;\n      }\n      const thisBoundValue = function(...args) {\n        const thisArg = this === topLevelProxy ? target : this;\n        const output = Reflect.apply(value, thisArg, args);\n        return output === target ? topLevelProxy : output;\n      };\n      privateMethodWorkaroundCache.set(value, thisBoundValue);\n      return thisBoundValue;\n    }\n  });\n  return topLevelProxy;\n}\nfunction wrapBetaChatCompletionParse(completion) {\n  return async (allParams) => {\n    const { span_info, params } = splitSpanInfo(\n      allParams\n    );\n    return openAIChannels.betaChatCompletionsParse.tracePromise(\n      async () => await completion(params),\n      { arguments: [params], span_info }\n    );\n  };\n}\nfunction wrapBetaChatCompletionStream(completion) {\n  return (allParams) => {\n    const { span_info, params } = splitSpanInfo(\n      allParams\n    );\n    return openAIChannels.betaChatCompletionsStream.traceSync(\n      () => completion(params),\n      { arguments: [params], span_info }\n    );\n  };\n}\nfunction wrapChatCompletion(completion) {\n  return (allParams, options) => {\n    const { span_info, params } = splitSpanInfo(\n      allParams\n    );\n    let executionPromise = null;\n    let apiPromise = null;\n    const getAPIPromise = () => {\n      apiPromise ??= completion(params, options);\n      return apiPromise;\n    };\n    const ensureExecuted = () => {\n      if (!executionPromise) {\n        executionPromise = (async () => {\n          const traceContext = createChannelContext(\n            openAIChannels.chatCompletionsCreate,\n            params,\n            span_info\n          );\n          if (params.stream) {\n            const completionPromise = (\n              // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n              getAPIPromise()\n            );\n            const { data: data2, response: response2, request_id: request_id2 } = await tracePromiseWithResponse(\n              openAIChannels.chatCompletionsCreate,\n              traceContext,\n              completionPromise\n            );\n            return { data: data2, response: response2, request_id: request_id2 };\n          }\n          const completionResponse = (\n            // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n            getAPIPromise()\n          );\n          const { data, response, request_id } = await tracePromiseWithResponse(\n            openAIChannels.chatCompletionsCreate,\n            traceContext,\n            completionResponse\n          );\n          return { data, response, request_id };\n        })();\n      }\n      return executionPromise;\n    };\n    return createLazyAPIPromise(\n      ensureExecuted,\n      () => tracePromiseAsResponse(\n        openAIChannels.chatCompletionsCreate,\n        createChannelContext(\n          openAIChannels.chatCompletionsCreate,\n          params,\n          span_info\n        ),\n        getAPIPromise()\n      ),\n      getAPIPromise\n    );\n  };\n}\nfunction createEndpointProxy(target, wrapperFn) {\n  return new Proxy(target, {\n    get(target2, name, receiver) {\n      const baseVal = Reflect.get(target2, name, receiver);\n      if (name === \"create\") {\n        return wrapperFn(baseVal.bind(target2));\n      }\n      return baseVal;\n    }\n  });\n}\nfunction wrapApiCreateWithChannel(create, channel2) {\n  return (allParams, options) => {\n    const { span_info, params } = splitSpanInfo(allParams);\n    let executionPromise = null;\n    let apiPromise = null;\n    const getAPIPromise = () => {\n      apiPromise ??= create(params, options);\n      return apiPromise;\n    };\n    const ensureExecuted = () => {\n      if (!executionPromise) {\n        executionPromise = (async () => {\n          const traceContext = createChannelContext(channel2, params, span_info);\n          return tracePromiseWithResponse(\n            channel2,\n            traceContext,\n            getAPIPromise()\n          );\n        })();\n      }\n      return executionPromise;\n    };\n    return createLazyAPIPromise(\n      ensureExecuted,\n      () => tracePromiseAsResponse(\n        channel2,\n        createChannelContext(channel2, params, span_info),\n        getAPIPromise()\n      ),\n      getAPIPromise\n    );\n  };\n}\nvar wrapEmbeddings = (create) => wrapApiCreateWithChannel(create, openAIChannels.embeddingsCreate);\nvar wrapModerations = (create) => wrapApiCreateWithChannel(create, openAIChannels.moderationsCreate);\n\n// src/wrappers/ai-sdk/ai-sdk.ts\nfunction isModuleNamespace(obj) {\n  if (!obj || typeof obj !== \"object\") {\n    return false;\n  }\n  if (obj.constructor?.name === \"Module\") {\n    return true;\n  }\n  try {\n    const keys = Object.keys(obj);\n    if (keys.length === 0) return false;\n    const firstKey = keys[0];\n    const descriptor = Object.getOwnPropertyDescriptor(obj, firstKey);\n    return descriptor ? !descriptor.configurable && !descriptor.writable : false;\n  } catch {\n    return false;\n  }\n}\nfunction wrapAISDK(aiSDK, options = {}) {\n  if (!aiSDK || typeof aiSDK !== \"object\") {\n    return aiSDK;\n  }\n  if (isSupportedLanguageModel(aiSDK)) {\n    return wrapLanguageModel(aiSDK, options);\n  }\n  const typedAISDK = aiSDK;\n  const target = isModuleNamespace(aiSDK) ? Object.setPrototypeOf({}, aiSDK) : aiSDK;\n  return new Proxy(target, {\n    get(target2, prop, receiver) {\n      const original = Reflect.get(target2, prop, receiver);\n      switch (prop) {\n        case \"experimental_evaluate\": {\n          const evaluate = typedAISDK.experimental_evaluate;\n          return typeof evaluate === \"function\" ? function(allParams) {\n            const { span_info, ...params } = allParams;\n            return aiSDKChannels.evaluate.invoke(evaluate, this, [params], {\n              denyOutputPaths: options.denyOutputPaths,\n              span_info\n            });\n          } : original;\n        }\n        case \"generateText\":\n          return wrapGenerateText(typedAISDK.generateText, options, typedAISDK);\n        case \"generateImage\":\n        case \"experimental_generateImage\":\n          return typeof original === \"function\" ? wrapGenerateImage(\n            original,\n            options,\n            typedAISDK\n          ) : original;\n        case \"streamText\":\n          return wrapStreamText(typedAISDK.streamText, options, typedAISDK);\n        case \"generateObject\":\n          return wrapGenerateObject(\n            typedAISDK.generateObject,\n            options,\n            typedAISDK\n          );\n        case \"streamObject\":\n          return wrapStreamObject(typedAISDK.streamObject, options, typedAISDK);\n        case \"embed\":\n          return wrapEmbed(typedAISDK.embed, options, typedAISDK);\n        case \"embedMany\":\n          return wrapEmbedMany(typedAISDK.embedMany, options, typedAISDK);\n        case \"rerank\":\n          return typedAISDK.rerank ? wrapRerank(typedAISDK.rerank, options, typedAISDK) : typedAISDK.rerank;\n        case \"Agent\":\n        case \"Experimental_Agent\":\n        case \"ToolLoopAgent\":\n        case \"WorkflowAgent\":\n          return original ? wrapAgentClass(original, options) : original;\n      }\n      return original;\n    }\n  });\n}\nfunction isSupportedLanguageModel(value) {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const model = value;\n  return [\"v2\", \"v3\", \"v4\"].includes(model.specificationVersion ?? \"\") && typeof model.doGenerate === \"function\";\n}\nfunction wrapLanguageModel(model, options) {\n  if (model[BRAINTRUST_WRAPPED_AI_SDK_MODEL]) {\n    return model;\n  }\n  const wrapped = Object.create(\n    Object.getPrototypeOf(model),\n    Object.getOwnPropertyDescriptors(model)\n  );\n  Object.defineProperty(wrapped, BRAINTRUST_WRAPPED_AI_SDK_MODEL, {\n    configurable: false,\n    enumerable: false,\n    value: true\n  });\n  const doGenerate = model.doGenerate;\n  wrapped.doGenerate = (params) => aiSDKChannels.modelGenerate.invoke(doGenerate, model, [params], {\n    model,\n    ...options.denyOutputPaths ? { denyOutputPaths: options.denyOutputPaths } : {}\n  });\n  if (typeof model.doStream === \"function\") {\n    const doStream = model.doStream;\n    wrapped.doStream = (params) => aiSDKChannels.modelStream.invoke(doStream, model, [params], {\n      model,\n      ...options.denyOutputPaths ? { denyOutputPaths: options.denyOutputPaths } : {}\n    });\n  }\n  return wrapped;\n}\nfunction isHarnessAgentInstance(instance) {\n  try {\n    const visited = /* @__PURE__ */ new Set();\n    let prototype = Object.getPrototypeOf(instance);\n    while (prototype !== null && !visited.has(prototype)) {\n      visited.add(prototype);\n      const constructor = Object.getOwnPropertyDescriptor(\n        prototype,\n        \"constructor\"\n      )?.value;\n      const constructorName = typeof constructor === \"function\" ? Object.getOwnPropertyDescriptor(constructor, \"name\")?.value : void 0;\n      if (constructorName === \"HarnessAgent\") {\n        return true;\n      }\n      prototype = Object.getPrototypeOf(prototype);\n    }\n  } catch {\n  }\n  return false;\n}\nvar wrapAgentClass = (AgentClass, options = {}) => {\n  const typedAgentClass = AgentClass;\n  return new Proxy(typedAgentClass, {\n    construct(target, args, newTarget) {\n      const instance = Reflect.construct(\n        target,\n        args,\n        newTarget\n      );\n      const harnessAgent = isHarnessAgentInstance(instance) ? instance : null;\n      return new Proxy(instance, {\n        get(instanceTarget, prop, instanceReceiver) {\n          const original = Reflect.get(instanceTarget, prop, instanceTarget);\n          if (harnessAgent && typeof original === \"function\") {\n            switch (prop) {\n              case \"createSession\":\n                return wrapHarnessAgentCreateSession(\n                  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n                  original,\n                  harnessAgent\n                );\n              case \"generate\":\n                return wrapHarnessAgentGenerate(\n                  original,\n                  harnessAgent,\n                  harnessAgentChannels.generate,\n                  \"HarnessAgent.generate\",\n                  options\n                );\n              case \"stream\":\n                return wrapHarnessAgentStream(\n                  original,\n                  harnessAgent,\n                  harnessAgentChannels.stream,\n                  \"HarnessAgent.stream\",\n                  options\n                );\n              case \"continueGenerate\":\n                return wrapHarnessAgentGenerate(\n                  original,\n                  harnessAgent,\n                  harnessAgentChannels.continueGenerate,\n                  \"HarnessAgent.continueGenerate\",\n                  options\n                );\n              case \"continueStream\":\n                return wrapHarnessAgentStream(\n                  original,\n                  harnessAgent,\n                  harnessAgentChannels.continueStream,\n                  \"HarnessAgent.continueStream\",\n                  options\n                );\n            }\n          }\n          if (prop === \"generate\" && typeof original === \"function\" && instanceTarget.constructor.name !== \"WorkflowAgent\") {\n            return wrapAgentGenerate(original, instanceTarget, options);\n          }\n          if (prop === \"stream\" && typeof original === \"function\") {\n            return wrapAgentStream(original, instanceTarget, options);\n          }\n          if (typeof original === \"function\") {\n            return original.bind(instanceTarget);\n          }\n          return original;\n        }\n      });\n    }\n  });\n};\nvar wrapHarnessAgentCreateSession = (createSession, instance) => {\n  const wrapper = function(params) {\n    return harnessAgentChannels.createSession.tracePromise(\n      () => params === void 0 ? createSession.call(instance) : createSession.call(instance, params),\n      createAISDKChannelContext(params ?? {}, { self: instance })\n    );\n  };\n  Object.defineProperty(wrapper, \"name\", {\n    value: \"HarnessAgent.createSession\",\n    writable: false\n  });\n  return wrapper;\n};\nvar wrapHarnessAgentGenerate = (generate, instance, channel2, name, options) => makeGenerateTextWrapper(\n  channel2,\n  name,\n  generate.bind(instance),\n  {\n    self: instance,\n    spanType: \"task\" /* TASK */\n  },\n  options\n);\nvar wrapHarnessAgentStream = (stream, instance, channel2, name, options) => makeStreamWrapper(\n  channel2,\n  name,\n  stream.bind(instance),\n  {\n    self: instance,\n    spanType: \"task\" /* TASK */\n  },\n  options\n);\nvar wrapAgentGenerate = (generate, instance, options = {}) => {\n  const defaultName = `${instance.constructor.name}.generate`;\n  return async (params) => makeGenerateTextWrapper(\n    generateChannelForAgent(instance.constructor.name),\n    defaultName,\n    generate.bind(instance),\n    {\n      self: instance,\n      spanType: \"function\" /* FUNCTION */\n    },\n    options\n  )({ ...instance.settings, ...params });\n};\nfunction generateChannelForAgent(agentName) {\n  if (agentName === \"ToolLoopAgent\") {\n    return aiSDKChannels.toolLoopAgentGenerate;\n  }\n  return aiSDKChannels.agentGenerate;\n}\nvar wrapAgentStream = (stream, instance, options = {}) => {\n  const defaultName = `${instance.constructor.name}.stream`;\n  return (params) => {\n    const workflowAgent = instance.constructor.name === \"WorkflowAgent\";\n    if (workflowAgent && currentWorkflowAgentWrapperSpan()) {\n      const { span_info: _spanInfo, ...cleanParams } = params;\n      return stream.call(instance, { ...instance.settings, ...cleanParams });\n    }\n    const trace = () => makeStreamWrapper(\n      streamChannelForAgent(instance.constructor.name),\n      defaultName,\n      stream.bind(instance),\n      {\n        self: instance,\n        spanType: \"function\" /* FUNCTION */\n      },\n      options\n    )({ ...instance.settings, ...params });\n    return trace();\n  };\n};\nfunction streamChannelForAgent(agentName) {\n  if (agentName === \"ToolLoopAgent\") {\n    return aiSDKChannels.toolLoopAgentStream;\n  }\n  if (agentName === \"WorkflowAgent\") {\n    return aiSDKChannels.workflowAgentStream;\n  }\n  return aiSDKChannels.agentStream;\n}\nvar makeGenerateTextWrapper = (channel2, name, generateText, contextOptions = {}, options = {}) => {\n  const wrapper = async function(allParams) {\n    const { span_info, ...params } = allParams;\n    const tracedParams = { ...params };\n    return channel2.tracePromise(\n      () => generateText(tracedParams),\n      createAISDKChannelContext(tracedParams, {\n        aiSDK: contextOptions.aiSDK,\n        denyOutputPaths: options.denyOutputPaths,\n        self: contextOptions.self,\n        span_info: mergeSpanInfo(span_info, {\n          name,\n          spanType: contextOptions.spanType\n        })\n      })\n    );\n  };\n  Object.defineProperty(wrapper, \"name\", { value: name, writable: false });\n  return wrapper;\n};\nvar wrapGenerateText = (generateText, options = {}, aiSDK) => {\n  return makeGenerateTextWrapper(\n    aiSDKChannels.generateText,\n    \"generateText\",\n    generateText,\n    { aiSDK },\n    options\n  );\n};\nvar wrapGenerateObject = (generateObject, options = {}, aiSDK) => {\n  return makeGenerateTextWrapper(\n    aiSDKChannels.generateObject,\n    \"generateObject\",\n    generateObject,\n    { aiSDK },\n    options\n  );\n};\nvar wrapGenerateImage = (generateImage, options = {}, aiSDK) => {\n  return makeGenerateImageWrapper(generateImage, { aiSDK }, options);\n};\nvar makeGenerateImageWrapper = (generateImage, contextOptions = {}, options = {}) => {\n  const wrapper = async function(allParams) {\n    const { span_info, ...params } = allParams;\n    const tracedParams = { ...params };\n    return aiSDKChannels.generateImage.tracePromise(\n      () => generateImage(tracedParams),\n      createAISDKChannelContext(tracedParams, {\n        aiSDK: contextOptions.aiSDK,\n        denyOutputPaths: options.denyOutputPaths,\n        self: contextOptions.self,\n        span_info: mergeSpanInfo(span_info, {\n          name: \"generateImage\",\n          spanType: contextOptions.spanType\n        })\n      })\n    );\n  };\n  Object.defineProperty(wrapper, \"name\", {\n    value: \"generateImage\",\n    writable: false\n  });\n  return wrapper;\n};\nvar makeEmbedWrapper = (channel2, name, embed, contextOptions = {}, options = {}) => {\n  const wrapper = async function(allParams) {\n    const { span_info, ...params } = allParams;\n    const tracedParams = { ...params };\n    return channel2.tracePromise(\n      () => embed(tracedParams),\n      createAISDKChannelContext(tracedParams, {\n        aiSDK: contextOptions.aiSDK,\n        denyOutputPaths: options.denyOutputPaths,\n        self: contextOptions.self,\n        span_info: mergeSpanInfo(span_info, {\n          name,\n          spanType: contextOptions.spanType\n        })\n      })\n    );\n  };\n  Object.defineProperty(wrapper, \"name\", { value: name, writable: false });\n  return wrapper;\n};\nvar wrapEmbed = (embed, options = {}, aiSDK) => {\n  return makeEmbedWrapper(\n    aiSDKChannels.embed,\n    \"embed\",\n    embed,\n    { aiSDK },\n    options\n  );\n};\nvar wrapEmbedMany = (embedMany, options = {}, aiSDK) => {\n  return makeEmbedWrapper(\n    aiSDKChannels.embedMany,\n    \"embedMany\",\n    embedMany,\n    { aiSDK },\n    options\n  );\n};\nvar makeRerankWrapper = (rerank, contextOptions = {}, options = {}) => {\n  const wrapper = async function(allParams) {\n    const { span_info, ...params } = allParams;\n    const tracedParams = { ...params };\n    return aiSDKChannels.rerank.tracePromise(\n      () => rerank(tracedParams),\n      createAISDKChannelContext(tracedParams, {\n        aiSDK: contextOptions.aiSDK,\n        denyOutputPaths: options.denyOutputPaths,\n        self: contextOptions.self,\n        span_info: mergeSpanInfo(span_info, {\n          name: \"rerank\",\n          spanType: contextOptions.spanType\n        })\n      })\n    );\n  };\n  Object.defineProperty(wrapper, \"name\", { value: \"rerank\", writable: false });\n  return wrapper;\n};\nvar wrapRerank = (rerank, options = {}, aiSDK) => {\n  return makeRerankWrapper(rerank, { aiSDK }, options);\n};\nvar makeStreamWrapper = (channel2, name, streamText, contextOptions = {}, options = {}) => {\n  const wrapper = function(allParams) {\n    const { span_info, ...params } = allParams;\n    const tracedParams = { ...params };\n    const context = createAISDKChannelContext(tracedParams, {\n      aiSDK: contextOptions.aiSDK,\n      denyOutputPaths: options.denyOutputPaths,\n      self: contextOptions.self,\n      span_info: mergeSpanInfo(span_info, {\n        name,\n        spanType: contextOptions.spanType\n      })\n    });\n    return channel2.tracePromise(() => streamText(tracedParams), context);\n  };\n  Object.defineProperty(wrapper, \"name\", { value: name, writable: false });\n  return wrapper;\n};\nvar wrapStreamText = (streamText, options = {}, aiSDK) => {\n  return makeStreamWrapper(\n    aiSDKChannels.streamText,\n    \"streamText\",\n    streamText,\n    { aiSDK },\n    options\n  );\n};\nvar wrapStreamObject = (streamObject, options = {}, aiSDK) => {\n  return makeStreamWrapper(\n    aiSDKChannels.streamObject,\n    \"streamObject\",\n    streamObject,\n    { aiSDK },\n    options\n  );\n};\nfunction mergeSpanInfo(spanInfo, defaults) {\n  if (defaults.name === void 0 && defaults.spanType === void 0 && spanInfo === void 0) {\n    return void 0;\n  }\n  return {\n    ...spanInfo,\n    ...spanInfo?.name ? {} : defaults.name ? { name: defaults.name } : {},\n    ...defaults.spanType !== void 0 || spanInfo?.spanAttributes ? {\n      spanAttributes: {\n        ...defaults.spanType !== void 0 ? { type: defaults.spanType } : {},\n        ...spanInfo?.spanAttributes ?? {}\n      }\n    } : {}\n  };\n}\nfunction createAISDKChannelContext(params, context = {}) {\n  return {\n    arguments: [params],\n    ...context.aiSDK ? { aiSDK: context.aiSDK } : {},\n    ...context.denyOutputPaths ? { denyOutputPaths: context.denyOutputPaths } : {},\n    ...context.self !== void 0 ? { self: context.self } : {},\n    ...context.span_info ? { span_info: context.span_info } : {}\n  };\n}\n\n// src/wrappers/ai-sdk/deprecated/wrapAISDKModel.ts\nfunction wrapAISDKModel(model) {\n  const m = model;\n  if (m?.specificationVersion === \"v1\" && typeof m?.provider === \"string\" && typeof m?.modelId === \"string\") {\n    return new BraintrustLanguageModelWrapper(m);\n  } else {\n    console.warn(\"Unsupported AI SDK model. Not wrapping.\");\n    return model;\n  }\n}\nvar BraintrustLanguageModelWrapper = class {\n  constructor(model) {\n    this.model = model;\n    if (typeof this.model.supportsUrl === \"function\") {\n      this.supportsUrl = (url) => this.model.supportsUrl(url);\n    }\n  }\n  model;\n  supportsUrl;\n  get specificationVersion() {\n    return this.model.specificationVersion;\n  }\n  get provider() {\n    return this.model.provider;\n  }\n  get modelId() {\n    return this.model.modelId;\n  }\n  get defaultObjectGenerationMode() {\n    return this.model.defaultObjectGenerationMode;\n  }\n  get supportsImageUrls() {\n    return this.model.supportsImageUrls;\n  }\n  get supportsStructuredOutputs() {\n    return this.model.supportsStructuredOutputs;\n  }\n  // For the first cut, do not support custom span_info arguments. We can\n  // propagate those via async local storage\n  async doGenerate(options) {\n    const span = startSpan(\n      withSpanInstrumentationName(\n        {\n          name: \"Chat Completion\",\n          spanAttributes: {\n            type: \"llm\"\n          }\n        },\n        INSTRUMENTATION_NAMES.AI_SDK\n      )\n    );\n    const { prompt, mode, ...rest } = options;\n    const startTime = getCurrentUnixTimestamp();\n    try {\n      const ret = await this.model.doGenerate(options);\n      span.log({\n        input: postProcessPrompt(prompt),\n        metadata: {\n          model: this.modelId,\n          ...rest,\n          ...\"tools\" in mode && mode.tools ? { tools: convertTools(mode.tools) } : \"tool\" in mode && mode.tool ? { tools: convertTools([mode.tool]) } : {}\n        },\n        output: postProcessOutput(ret.text, ret.toolCalls, ret.finishReason),\n        metrics: {\n          time_to_first_token: getCurrentUnixTimestamp() - startTime,\n          tokens: !isEmpty2(ret.usage) ? ret.usage.promptTokens + ret.usage.completionTokens : void 0,\n          prompt_tokens: ret.usage?.promptTokens,\n          completion_tokens: ret.usage?.completionTokens,\n          cached: parseCachedHeader(\n            ret.rawResponse?.headers?.[X_CACHED_HEADER] ?? ret.rawResponse?.headers?.[LEGACY_CACHED_HEADER]\n          )\n        }\n      });\n      return ret;\n    } finally {\n      span.end();\n    }\n  }\n  async doStream(options) {\n    const { prompt, mode, ...rest } = options;\n    const startTime = getCurrentUnixTimestamp();\n    const span = startSpan(\n      withSpanInstrumentationName(\n        {\n          name: \"Chat Completion\",\n          spanAttributes: {\n            type: \"llm\"\n          }\n        },\n        INSTRUMENTATION_NAMES.AI_SDK\n      )\n    );\n    span.log({\n      input: postProcessPrompt(prompt),\n      metadata: {\n        model: this.modelId,\n        ...rest,\n        ...\"tools\" in mode && mode.tools ? { tools: convertTools(mode.tools) } : \"tool\" in mode && mode.tool ? { tools: convertTools([mode.tool]) } : {}\n      }\n    });\n    let ended = false;\n    const end = () => {\n      if (!ended) {\n        span.end();\n        ended = true;\n      }\n    };\n    try {\n      const ret = await this.model.doStream(options);\n      let time_to_first_token = void 0;\n      let usage = void 0;\n      let fullText = void 0;\n      const toolCalls2 = {};\n      let finishReason = void 0;\n      return {\n        ...ret,\n        stream: ret.stream.pipeThrough(\n          new TransformStream({\n            transform(chunk, controller) {\n              if (time_to_first_token === void 0) {\n                time_to_first_token = getCurrentUnixTimestamp() - startTime;\n                span.log({ metrics: { time_to_first_token } });\n              }\n              switch (chunk.type) {\n                case \"text-delta\":\n                  if (fullText === void 0) {\n                    fullText = \"\";\n                  }\n                  fullText += chunk.textDelta;\n                  break;\n                case \"tool-call\":\n                  toolCalls2[chunk.toolCallId] = {\n                    toolCallType: chunk.toolCallType,\n                    toolCallId: chunk.toolCallId,\n                    toolName: chunk.toolName,\n                    args: chunk.args\n                  };\n                  break;\n                case \"tool-call-delta\":\n                  if (toolCalls2[chunk.toolCallId] === void 0) {\n                    toolCalls2[chunk.toolCallId] = {\n                      toolCallType: chunk.toolCallType,\n                      toolCallId: chunk.toolCallId,\n                      toolName: chunk.toolName,\n                      args: \"\"\n                    };\n                  }\n                  toolCalls2[chunk.toolCallId].args += chunk.argsTextDelta;\n                  break;\n                case \"finish\":\n                  usage = chunk.usage;\n                  finishReason = chunk.finishReason;\n                  break;\n              }\n              controller.enqueue(chunk);\n            },\n            async flush(controller) {\n              span.log({\n                output: postProcessOutput(\n                  fullText,\n                  Object.keys(toolCalls2).length > 0 ? Object.values(toolCalls2) : void 0,\n                  finishReason\n                ),\n                metrics: {\n                  time_to_first_token,\n                  tokens: !isEmpty2(usage) ? usage.promptTokens + usage.completionTokens : void 0,\n                  prompt_tokens: usage?.promptTokens,\n                  completion_tokens: usage?.completionTokens,\n                  cached: parseCachedHeader(\n                    ret.rawResponse?.headers?.[X_CACHED_HEADER] ?? ret.rawResponse?.headers?.[LEGACY_CACHED_HEADER]\n                  )\n                }\n              });\n              end();\n              controller.terminate();\n            }\n          })\n        )\n      };\n    } finally {\n      end();\n    }\n  }\n};\nfunction convertTools(tools) {\n  return tools.map((tool) => {\n    const { type: _, ...rest } = tool;\n    return {\n      type: tool.type,\n      function: rest\n    };\n  });\n}\nfunction postProcessPrompt(prompt) {\n  return prompt.flatMap((message) => {\n    switch (message.role) {\n      case \"system\":\n        return [\n          {\n            role: \"system\",\n            content: message.content\n          }\n        ];\n      case \"assistant\":\n        const textPart = message.content.find(\n          (part) => part.type === \"text\"\n        );\n        const toolCallParts = message.content.filter(\n          (part) => part.type === \"tool-call\"\n        );\n        return [\n          {\n            role: \"assistant\",\n            content: textPart?.text,\n            ...toolCallParts.length > 0 ? {\n              tool_calls: toolCallParts.map((part) => ({\n                id: part.toolCallId,\n                function: {\n                  name: part.toolName,\n                  arguments: JSON.stringify(part.args)\n                },\n                type: \"function\"\n              }))\n            } : {}\n          }\n        ];\n      case \"user\":\n        return [\n          {\n            role: \"user\",\n            content: message.content.map((part) => {\n              switch (part.type) {\n                case \"text\":\n                  return {\n                    type: \"text\",\n                    text: part.text,\n                    ...part.providerMetadata ? { providerMetadata: part.providerMetadata } : {}\n                  };\n                case \"image\":\n                  return {\n                    type: \"image_url\",\n                    image_url: {\n                      url: part.image.toString(),\n                      ...part.providerMetadata ? { providerMetadata: part.providerMetadata } : {}\n                    }\n                  };\n                default:\n                  return part;\n              }\n            })\n          }\n        ];\n      case \"tool\":\n        return message.content.map((part) => ({\n          role: \"tool\",\n          tool_call_id: part.toolCallId,\n          content: JSON.stringify(part.result)\n        }));\n    }\n  });\n}\nfunction postProcessOutput(text, toolCalls2, finishReason) {\n  return [\n    {\n      index: 0,\n      message: {\n        role: \"assistant\",\n        content: text ?? \"\",\n        ...toolCalls2 && toolCalls2.length > 0 ? {\n          tool_calls: toolCalls2.map((toolCall) => ({\n            id: toolCall.toolCallId,\n            function: {\n              name: toolCall.toolName,\n              arguments: toolCall.args\n            },\n            type: \"function\"\n          }))\n        } : {}\n      },\n      finish_reason: finishReason\n    }\n  ];\n}\n\n// src/wrappers/ai-sdk/deprecated/BraintrustMiddleware.ts\nfunction detectProviderFromResult(result) {\n  if (!result?.providerMetadata) {\n    return void 0;\n  }\n  const keys = Object.keys(result.providerMetadata);\n  return keys?.at(0);\n}\nfunction extractModelFromResult(result) {\n  if (result?.response?.modelId) {\n    return result.response.modelId;\n  }\n  if (result?.request?.body?.model) {\n    return result.request.body.model;\n  }\n  return void 0;\n}\nfunction camelToSnake4(str) {\n  return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\nfunction extractModelParameters(params, excludeKeys) {\n  const modelParams = {};\n  for (const [key, value] of Object.entries(params)) {\n    if (value !== void 0 && !excludeKeys.has(key)) {\n      const snakeKey = camelToSnake4(key);\n      modelParams[snakeKey] = value;\n    }\n  }\n  return modelParams;\n}\nfunction normalizeFinishReason2(reason) {\n  if (typeof reason !== \"string\") return void 0;\n  return reason.replace(/-/g, \"_\");\n}\nfunction buildAssistantOutputWithToolCalls(result, toolCalls2) {\n  return [\n    {\n      index: 0,\n      logprobs: null,\n      finish_reason: normalizeFinishReason2(result?.finishReason) ?? (toolCalls2.length ? \"tool_calls\" : void 0),\n      message: {\n        role: \"assistant\",\n        tool_calls: toolCalls2.length > 0 ? toolCalls2 : void 0\n      }\n    }\n  ];\n}\nfunction extractToolCallsFromSteps(steps) {\n  const toolCalls2 = [];\n  if (!Array.isArray(steps)) return toolCalls2;\n  let idx = 0;\n  for (const step of steps) {\n    const blocks = step?.content;\n    if (!Array.isArray(blocks)) continue;\n    for (const block of blocks) {\n      if (block && typeof block === \"object\" && block.type === \"tool-call\") {\n        toolCalls2.push({\n          id: block.toolCallId,\n          type: \"function\",\n          index: idx++,\n          function: {\n            name: block.toolName,\n            arguments: typeof block.input === \"string\" ? block.input : JSON.stringify(block.input ?? {})\n          }\n        });\n      }\n    }\n  }\n  return toolCalls2;\n}\nfunction extractToolCallsFromBlocks(blocks) {\n  if (!Array.isArray(blocks)) return [];\n  return extractToolCallsFromSteps([{ content: blocks }]);\n}\nfunction extractInput3(params) {\n  return params?.prompt ?? params?.messages ?? params?.system;\n}\nvar V2_EXCLUDE_KEYS = /* @__PURE__ */ new Set([\n  \"prompt\",\n  // Already captured as input\n  \"system\",\n  // Already captured as input\n  \"messages\",\n  // Already captured as input\n  \"model\",\n  // Already captured in metadata.model\n  \"providerOptions\"\n  // Internal AI SDK configuration\n]);\nfunction BraintrustMiddleware(config = {}) {\n  return {\n    wrapGenerate: async ({\n      doGenerate,\n      params,\n      model: modelFromWrapGenerate\n    }) => {\n      const rawInput = extractInput3(params);\n      const processedInput = processInputAttachments(rawInput);\n      const spanArgs = {\n        name: config.spanInfo?.name || \"ai-sdk.doGenerate\",\n        spanAttributes: {\n          type: \"llm\" /* LLM */,\n          ...config.spanInfo?.spanAttributes || {}\n        },\n        event: {\n          input: processedInput,\n          metadata: {\n            ...extractModelParameters(params, V2_EXCLUDE_KEYS),\n            ...config.spanInfo?.metadata || {}\n          }\n        }\n      };\n      const span = startSpan(\n        withSpanInstrumentationName(spanArgs, INSTRUMENTATION_NAMES.AI_SDK)\n      );\n      try {\n        const result = await doGenerate();\n        const metadata = {};\n        const provider = detectProviderFromResult(result);\n        if (provider !== void 0) {\n          metadata.provider = provider;\n        }\n        if (result.finishReason !== void 0) {\n          metadata.finish_reason = result.finishReason;\n        }\n        const model = extractModelFromResult(result);\n        if (model !== void 0) {\n          metadata.model = model;\n        } else if (modelFromWrapGenerate) {\n          const modelId = modelFromWrapGenerate.modelId;\n          if (modelId) {\n            metadata.model = modelId;\n          }\n        }\n        let toolCalls2 = extractToolCallsFromSteps(result?.steps);\n        if (!toolCalls2 || toolCalls2.length === 0) {\n          toolCalls2 = extractToolCallsFromBlocks(result?.content);\n        }\n        span.log({\n          output: toolCalls2.length > 0 ? buildAssistantOutputWithToolCalls(result, toolCalls2) : result?.content,\n          metadata,\n          metrics: extractTokenMetrics({\n            usage: result.usage,\n            providerMetadata: result.providerMetadata\n          })\n        });\n        return result;\n      } catch (error) {\n        span.log({\n          error: error instanceof Error ? error.message : String(error)\n        });\n        throw error;\n      } finally {\n        span.end();\n      }\n    },\n    wrapStream: async ({ doStream, params }) => {\n      const rawInput = extractInput3(params);\n      const processedInput = processInputAttachments(rawInput);\n      const spanArgs = {\n        name: config.spanInfo?.name || \"ai-sdk.doStream\",\n        spanAttributes: {\n          type: \"llm\" /* LLM */,\n          ...config.spanInfo?.spanAttributes || {}\n        },\n        event: {\n          input: processedInput,\n          metadata: {\n            ...extractModelParameters(params, V2_EXCLUDE_KEYS),\n            ...config.spanInfo?.metadata || {}\n          }\n        }\n      };\n      const span = startSpan(\n        withSpanInstrumentationName(spanArgs, INSTRUMENTATION_NAMES.AI_SDK)\n      );\n      try {\n        const { stream, ...rest } = await doStream();\n        const textChunks = [];\n        const toolBlocks = [];\n        let finalUsage = {};\n        let finalFinishReason = void 0;\n        let providerMetadata = {};\n        const transformStream = new TransformStream({\n          transform(chunk, controller) {\n            try {\n              if (chunk.type === \"text-delta\" && chunk.delta) {\n                textChunks.push(chunk.delta);\n              }\n              if (chunk.type === \"tool-call\" || chunk.type === \"tool-result\") {\n                toolBlocks.push(chunk);\n              }\n              if (chunk.type === \"finish\") {\n                finalFinishReason = chunk.finishReason;\n                finalUsage = chunk.usage || {};\n                providerMetadata = chunk.providerMetadata || {};\n              }\n              controller.enqueue(chunk);\n            } catch (error) {\n              span.log({\n                error: error instanceof Error ? error.message : String(error)\n              });\n              span.end();\n              controller.error(error);\n            }\n          },\n          flush() {\n            try {\n              const generatedText = textChunks.join(\"\");\n              let output = generatedText ? [{ type: \"text\", text: generatedText }] : [];\n              const resultForDetection = {\n                providerMetadata,\n                response: rest.response,\n                ...rest,\n                finishReason: finalFinishReason\n              };\n              const metadata = {};\n              const provider = detectProviderFromResult(resultForDetection);\n              if (provider !== void 0) {\n                metadata.provider = provider;\n              }\n              if (finalFinishReason !== void 0) {\n                metadata.finish_reason = finalFinishReason;\n              }\n              const model = extractModelFromResult(resultForDetection);\n              if (model !== void 0) {\n                metadata.model = model;\n              }\n              if (toolBlocks.length > 0) {\n                const toolCalls2 = extractToolCallsFromSteps([\n                  { content: toolBlocks }\n                ]);\n                if (toolCalls2.length > 0) {\n                  output = buildAssistantOutputWithToolCalls(\n                    resultForDetection,\n                    toolCalls2\n                  );\n                }\n              }\n              span.log({\n                output,\n                metadata,\n                metrics: extractTokenMetrics({\n                  usage: finalUsage,\n                  providerMetadata\n                })\n              });\n              span.end();\n            } catch (error) {\n              span.log({\n                error: error instanceof Error ? error.message : String(error)\n              });\n              span.end();\n              throw error;\n            }\n          }\n        });\n        return {\n          stream: stream.pipeThrough(transformStream),\n          ...rest\n        };\n      } catch (error) {\n        span.log({\n          error: error instanceof Error ? error.message : String(error)\n        });\n        span.end();\n        throw error;\n      }\n    }\n  };\n}\n\n// src/instrumentation/plugins/eve-plugin.ts\nvar EVE_TRACE_STATE_KEY = \"braintrust.eve.tracing\";\nvar MAX_EVE_CACHE_ENTRIES = 1e4;\nvar MAX_STORED_LLM_INPUTS = 100;\nvar MAX_STORED_REASONING_BLOCKS = 100;\nvar MAX_STORED_SPAN_REFERENCES = 1e4;\nvar MAX_STORED_STEP_STARTS = 1e4;\nvar EVE_HANDLED_EVENT_TYPES = /* @__PURE__ */ new Set([\n  \"action.result\",\n  \"actions.requested\",\n  \"message.completed\",\n  \"message.received\",\n  \"reasoning.completed\",\n  \"result.completed\",\n  \"session.completed\",\n  \"session.failed\",\n  \"session.started\",\n  \"step.completed\",\n  \"step.failed\",\n  \"step.started\",\n  \"subagent.called\",\n  \"subagent.completed\",\n  \"turn.completed\",\n  \"turn.failed\",\n  \"turn.started\"\n]);\nfunction braintrustEveHook(options) {\n  if (!options || typeof options.defineState !== \"function\") {\n    throw new TypeError(\n      \"braintrustEveHook requires Eve's defineState function\"\n    );\n  }\n  const state = options.defineState(EVE_TRACE_STATE_KEY, emptyEveTraceState);\n  const bridge = new EveBridge(state);\n  return {\n    events: {\n      \"*\": async (event, ctx) => {\n        await bridge.handle(event, ctx, options.metadata);\n      }\n    }\n  };\n}\nfunction createLegacyEveInstrumentation(options) {\n  if (!options || typeof options.defineState !== \"function\") {\n    throw new TypeError(\n      \"braintrustEveInstrumentation requires Eve's defineState function\"\n    );\n  }\n  const state = options.defineState(EVE_TRACE_STATE_KEY, emptyEveTraceState);\n  return {\n    events: {\n      \"step.started\": (input) => {\n        try {\n          if (!isEveInstrumentationStepStartedEventInput(input)) {\n            debugLogger.warn(\n              \"Ignoring malformed Eve instrumentation step.started event\"\n            );\n            return void 0;\n          }\n          captureEveModelInput(state, input);\n        } catch (error) {\n          debugLogger.warn(\"Error in Eve LLM input capture:\", error);\n        }\n        return void 0;\n      }\n    },\n    recordInputs: false,\n    recordOutputs: false,\n    setup: options.setup\n  };\n}\nfunction isEveHandleMessageStreamEvent(event) {\n  if (!isObject(event) || typeof event[\"type\"] !== \"string\") {\n    return false;\n  }\n  const type = event[\"type\"];\n  if (type === \"session.completed\") {\n    return true;\n  }\n  if (!isObject(event[\"data\"])) {\n    return false;\n  }\n  const data = event[\"data\"];\n  if (type === \"session.started\") {\n    return true;\n  }\n  if (type === \"session.failed\") {\n    return typeof data[\"sessionId\"] === \"string\" && typeof data[\"code\"] === \"string\" && typeof data[\"message\"] === \"string\";\n  }\n  if (type === \"session.waiting\") {\n    return data[\"wait\"] === \"next-user-message\";\n  }\n  if (typeof data[\"turnId\"] !== \"string\" || typeof data[\"sequence\"] !== \"number\" || !Number.isFinite(data[\"sequence\"])) {\n    return false;\n  }\n  if (type === \"turn.started\" || type === \"turn.completed\" || type === \"subagent.called\" || type === \"subagent.completed\") {\n    if (type === \"subagent.called\") {\n      return typeof data[\"callId\"] === \"string\" && typeof data[\"childSessionId\"] === \"string\" && typeof data[\"name\"] === \"string\";\n    }\n    if (type === \"subagent.completed\") {\n      return typeof data[\"callId\"] === \"string\" && typeof data[\"subagentName\"] === \"string\";\n    }\n    return true;\n  }\n  if (type === \"turn.failed\") {\n    return typeof data[\"code\"] === \"string\" && typeof data[\"message\"] === \"string\";\n  }\n  if (type === \"message.received\") {\n    return typeof data[\"message\"] === \"string\";\n  }\n  if (typeof data[\"stepIndex\"] !== \"number\" || !Number.isFinite(data[\"stepIndex\"]) || data[\"stepIndex\"] < 0) {\n    return false;\n  }\n  switch (type) {\n    case \"step.started\":\n      return true;\n    case \"message.completed\":\n      return typeof data[\"finishReason\"] === \"string\" && (typeof data[\"message\"] === \"string\" || data[\"message\"] === null);\n    case \"reasoning.completed\":\n      return typeof data[\"reasoning\"] === \"string\";\n    case \"result.completed\":\n      return true;\n    case \"step.completed\":\n      return typeof data[\"finishReason\"] === \"string\";\n    case \"step.failed\":\n      return typeof data[\"code\"] === \"string\" && typeof data[\"message\"] === \"string\";\n    case \"actions.requested\":\n      return Array.isArray(data[\"actions\"]);\n    case \"action.result\":\n      return isObject(data[\"result\"]) && (data[\"status\"] === \"completed\" || data[\"status\"] === \"failed\" || data[\"status\"] === \"rejected\");\n    default:\n      return false;\n  }\n}\nfunction isEveInstrumentationStepStartedEventInput(input) {\n  if (!isObject(input)) {\n    return false;\n  }\n  const modelInput = input[\"modelInput\"];\n  const session = input[\"session\"];\n  const step = input[\"step\"];\n  const turn = input[\"turn\"];\n  return isObject(modelInput) && Array.isArray(modelInput[\"messages\"]) && isObject(session) && typeof session[\"id\"] === \"string\" && isObject(step) && typeof step[\"index\"] === \"number\" && Number.isFinite(step[\"index\"]) && step[\"index\"] >= 0 && isObject(turn) && typeof turn[\"id\"] === \"string\" && typeof turn[\"sequence\"] === \"number\" && Number.isFinite(turn[\"sequence\"]);\n}\nvar ResumedEveSpan = class {\n  constructor(reference) {\n    this.reference = reference;\n    this.endTime = reference.endTime;\n  }\n  reference;\n  endTime;\n  get rootSpanId() {\n    return this.reference.rootSpanId;\n  }\n  get spanId() {\n    return this.reference.spanId;\n  }\n  log(event) {\n    const metrics = {\n      ...this.reference.startEvent?.metrics,\n      ...this.endTime === void 0 ? {} : { end: this.endTime },\n      ...event.metrics\n    };\n    updateSpan({\n      exported: this.reference.exported,\n      ...this.reference.startEvent,\n      ...event,\n      ...Object.keys(metrics).length > 0 ? { metrics } : {}\n    });\n  }\n  end(args) {\n    if (this.endTime === void 0) {\n      this.endTime = args?.endTime ?? getCurrentUnixTimestamp();\n      this.log({ metrics: { end: this.endTime } });\n    }\n    return this.endTime;\n  }\n};\nvar EveBridge = class {\n  constructor(state) {\n    this.state = state;\n  }\n  state;\n  eventQueuesBySession = /* @__PURE__ */ new Map();\n  completedToolKeys = new LRUCache({\n    max: MAX_EVE_CACHE_ENTRIES\n  });\n  toolsByCallKey = new LRUCache({\n    max: MAX_EVE_CACHE_ENTRIES\n  });\n  turnsByKey = new LRUCache({\n    max: MAX_EVE_CACHE_ENTRIES\n  });\n  async startEveSpan(args) {\n    const rowId = args?.event?.id;\n    const reference = typeof rowId === \"string\" && readEveTraceState(this.state).spanReferences.find(\n      (candidate) => candidate.rowId === rowId\n    );\n    if (reference) {\n      return new ResumedEveSpan(reference);\n    }\n    const startTime = args?.startTime ?? getCurrentUnixTimestamp();\n    const parentSpanIds = args?.parentSpanIds;\n    const startEvent = {\n      created: (/* @__PURE__ */ new Date()).toISOString(),\n      metrics: { start: startTime },\n      span_attributes: {\n        ...args?.name ? { name: args.name } : {},\n        ...args?.type ? { type: args.type } : {},\n        ...args?.spanAttributes\n      },\n      span_parents: parentSpanIds ? \"spanId\" in parentSpanIds ? [parentSpanIds.spanId] : parentSpanIds.parentSpanIds : []\n    };\n    const span = withCurrent(\n      NOOP_SPAN,\n      () => _internalStartSpanWithInitialMerge(\n        withSpanInstrumentationName(\n          { ...args, startTime },\n          INSTRUMENTATION_NAMES.EVE\n        )\n      )\n    );\n    if (typeof rowId !== \"string\") {\n      return span;\n    }\n    try {\n      const exported = await span.export();\n      const reference2 = {\n        exported,\n        rootSpanId: span.rootSpanId,\n        rowId,\n        spanId: span.spanId,\n        startEvent\n      };\n      this.state.update((current) => {\n        const normalized = normalizeEveTraceState(current);\n        return normalized.spanReferences.some(\n          (candidate) => candidate.rowId === rowId\n        ) ? normalized : {\n          ...normalized,\n          spanReferences: [...normalized.spanReferences, reference2].slice(\n            -MAX_STORED_SPAN_REFERENCES\n          )\n        };\n      });\n    } catch (error) {\n      debugLogger.warn(\"Error exporting Eve span for resumption:\", error);\n    }\n    return span;\n  }\n  async startEveChildSpan(parent, args) {\n    return await this.startEveSpan({\n      ...args,\n      parentSpanIds: {\n        rootSpanId: parent.rootSpanId,\n        spanId: parent.spanId\n      }\n    });\n  }\n  stepOrdinal(event) {\n    let ordinal = 0;\n    this.state.update((current) => {\n      const state = normalizeEveTraceState(current);\n      const previous = state.stepStarts.filter(\n        (entry) => entry.turnId === event.data.turnId && entry.stepIndex === event.data.stepIndex\n      ).at(-1);\n      if (previous?.open) {\n        ordinal = previous.ordinal;\n        return state;\n      }\n      ordinal = state.stepStarts.filter(\n        (entry) => entry.turnId === event.data.turnId\n      ).length;\n      return {\n        ...state,\n        stepStarts: [\n          ...state.stepStarts,\n          {\n            open: true,\n            ordinal,\n            stepIndex: event.data.stepIndex,\n            turnId: event.data.turnId\n          }\n        ].slice(-MAX_STORED_STEP_STARTS)\n      };\n    });\n    return ordinal;\n  }\n  markStepEnded(turnId, stepIndex) {\n    this.state.update((current) => {\n      const state = normalizeEveTraceState(current);\n      let index = -1;\n      for (let i = state.stepStarts.length - 1; i >= 0; i--) {\n        const entry = state.stepStarts[i];\n        if (entry?.turnId === turnId && entry.stepIndex === stepIndex) {\n          index = i;\n          break;\n        }\n      }\n      if (index < 0 || !state.stepStarts[index]?.open) {\n        return state;\n      }\n      return {\n        ...state,\n        stepStarts: state.stepStarts.map(\n          (entry, entryIndex) => entryIndex === index ? { ...entry, open: false } : entry\n        )\n      };\n    });\n  }\n  async handle(event, ctx, hookMetadata) {\n    try {\n      await this.handleUnchecked(event, ctx, hookMetadata);\n    } catch (error) {\n      debugLogger.warn(\"Error in Eve hook instrumentation:\", error);\n    }\n  }\n  async handleUnchecked(event, ctx, hookMetadata) {\n    if (!isEveHandleMessageStreamEvent(event)) {\n      if (isObject(event) && typeof event[\"type\"] === \"string\" && EVE_HANDLED_EVENT_TYPES.has(event[\"type\"])) {\n        debugLogger.warn(`Ignoring malformed Eve hook ${event[\"type\"]} event`);\n      }\n      return;\n    }\n    const run = async () => {\n      try {\n        if (!await this.handleEvent(event, ctx, hookMetadata)) {\n          return;\n        }\n        if (event.type === \"session.failed\") {\n          const sessionId2 = event.data.sessionId || sessionIdFromContext(ctx);\n          await this.flushInstrumentation();\n          if (sessionId2) {\n            this.cleanupSession(sessionId2);\n          }\n        } else if (event.type === \"session.completed\") {\n          const sessionId2 = sessionIdFromContext(ctx);\n          await this.flushInstrumentation();\n          if (sessionId2) {\n            this.cleanupSession(sessionId2);\n          }\n        }\n      } catch (error) {\n        debugLogger.warn(\"Error in Eve hook instrumentation:\", error);\n      }\n    };\n    const sessionId = event.type === \"session.failed\" ? event.data.sessionId || sessionIdFromContext(ctx) : sessionIdFromContext(ctx);\n    if (!sessionId) {\n      await run();\n      return;\n    }\n    const previous = this.eventQueuesBySession.get(sessionId);\n    const queued = previous ? previous.then(run) : run();\n    this.eventQueuesBySession.set(sessionId, queued);\n    try {\n      await queued;\n    } finally {\n      if (this.eventQueuesBySession.get(sessionId) === queued) {\n        this.eventQueuesBySession.delete(sessionId);\n      }\n    }\n  }\n  async handleEvent(event, ctx, hookMetadata) {\n    switch (event.type) {\n      case \"session.started\":\n        this.handleSessionStarted(event, ctx, hookMetadata);\n        return true;\n      case \"turn.started\":\n        await this.handleTurnStarted(event, ctx, hookMetadata);\n        return true;\n      case \"message.received\":\n        await this.handleMessageReceived(event, ctx, hookMetadata);\n        return true;\n      case \"step.started\":\n        await this.handleStepStarted(event, ctx, hookMetadata);\n        return true;\n      case \"reasoning.completed\":\n        this.handleReasoningCompleted(event, ctx);\n        return true;\n      case \"message.completed\":\n        this.handleMessageCompleted(event, ctx);\n        return true;\n      case \"result.completed\":\n        this.handleResultCompleted(event, ctx);\n        return true;\n      case \"actions.requested\":\n        await this.handleActionsRequested(event, ctx, hookMetadata);\n        return true;\n      case \"action.result\":\n        await this.handleActionResult(event, ctx, hookMetadata);\n        return true;\n      case \"subagent.called\":\n        await this.handleSubagentCalled(event, ctx, hookMetadata);\n        return true;\n      case \"subagent.completed\":\n        await this.handleSubagentCompleted(event, ctx, hookMetadata);\n        return true;\n      case \"step.completed\":\n        this.handleStepCompleted(event, ctx);\n        return true;\n      case \"step.failed\":\n        this.handleStepFailed(event, ctx);\n        return true;\n      case \"turn.completed\":\n        this.handleTurnCompleted(event, ctx);\n        return true;\n      case \"turn.failed\":\n        this.handleTurnFailed(event, ctx);\n        return true;\n      case \"session.failed\":\n        this.handleSessionFailed(event, ctx);\n        return true;\n      case \"session.completed\":\n        this.handleSessionCompleted(event, ctx);\n        return true;\n      default:\n        return false;\n    }\n  }\n  handleSessionStarted(event, ctx, hookMetadata) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const metadata = {\n      ...hookMetadata ?? {},\n      ...modelMetadataFromRuntime(event.data.runtime)\n    };\n    this.state.update((current) => {\n      const normalized = normalizeEveTraceState(current);\n      return {\n        ...normalized,\n        metadata: { ...normalized.metadata, ...metadata }\n      };\n    });\n    for (const [key, turn] of this.turnsByKey) {\n      if (!key.startsWith(`${sessionId}:`)) {\n        continue;\n      }\n      turn.metadata = { ...turn.metadata, ...metadata };\n      turn.span.log({ metadata: turn.metadata });\n      for (const step of turn.stepsByIndex.values()) {\n        step.metadata = { ...step.metadata, ...metadata };\n        step.span.log({ metadata: step.metadata });\n      }\n    }\n  }\n  async handleTurnStarted(event, ctx, hookMetadata) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const key = turnKey2(sessionId, event.data.turnId);\n    const metadata = {\n      ...readEveTraceState(this.state).metadata,\n      ...hookMetadata ?? {},\n      \"eve.session_id\": sessionId\n    };\n    const existing = this.turnsByKey.get(key);\n    if (existing) {\n      existing.metadata = { ...existing.metadata, ...metadata };\n      existing.span.log({ metadata: existing.metadata });\n      return;\n    }\n    const span = await this.startTurnSpan(sessionId, event, ctx, metadata);\n    span.log({ metadata });\n    this.turnsByKey.set(key, {\n      key,\n      metadata,\n      metrics: {},\n      sessionId,\n      span,\n      stepsByIndex: /* @__PURE__ */ new Map(),\n      turnId: event.data.turnId\n    });\n  }\n  async handleMessageReceived(event, ctx, hookMetadata) {\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    if (!turn) {\n      return;\n    }\n    const input = [{ content: event.data.message, role: \"user\" }];\n    turn.span.log({ input });\n  }\n  async handleStepStarted(event, ctx, hookMetadata) {\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    const sessionId = sessionIdFromContext(ctx);\n    if (!turn || !sessionId) {\n      return;\n    }\n    const existing = turn.stepsByIndex.get(event.data.stepIndex);\n    if (existing) {\n      existing.span.log({\n        ...existing.input !== void 0 ? { input: existing.input } : {},\n        metadata: existing.metadata,\n        metrics: existing.metrics,\n        output: existing.output\n      });\n      const endTime = eventTime2(event);\n      existing.span.end(endTime === void 0 ? void 0 : { endTime });\n      this.markStepEnded(event.data.turnId, event.data.stepIndex);\n      clearStoredEveReasoning(\n        this.state,\n        sessionId,\n        event.data.turnId,\n        event.data.stepIndex\n      );\n    }\n    const stepOrdinal = this.stepOrdinal(event);\n    const metadata = { ...turn.metadata };\n    const input = consumeCapturedEveModelInput(\n      this.state,\n      sessionId,\n      event.data.turnId,\n      event.data.stepIndex\n    );\n    const reasoning = readStoredEveReasoning(\n      this.state,\n      sessionId,\n      event.data.turnId,\n      event.data.stepIndex\n    );\n    const output = mergeEveReasoning(void 0, reasoning);\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"step\",\n      sessionId,\n      event.data.turnId,\n      String(stepOrdinal)\n    );\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        ...input !== void 0 ? { input } : {},\n        metadata\n      },\n      name: \"eve.step\",\n      spanAttributes: { type: \"llm\" /* LLM */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({\n      ...input !== void 0 ? { input } : {},\n      metadata\n    });\n    turn.stepsByIndex.set(event.data.stepIndex, {\n      ...input !== void 0 ? { input } : {},\n      metadata,\n      metrics: {},\n      ...output !== void 0 ? { output } : {},\n      reasoning,\n      span\n    });\n  }\n  handleReasoningCompleted(event, ctx) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const reasoning = storeEveReasoning(this.state, sessionId, event);\n    const step = this.stepForEvent(event, ctx);\n    if (step) {\n      step.reasoning = reasoning;\n      step.output = mergeEveReasoning(step.output, reasoning);\n    }\n  }\n  handleMessageCompleted(event, ctx) {\n    const step = this.stepForEvent(event, ctx);\n    if (!step) {\n      return;\n    }\n    const existingMessage = eveOutputMessage(step.output);\n    const existingToolCalls = isObject(existingMessage) ? existingMessage.tool_calls : void 0;\n    step.output = mergeEveReasoning(\n      [\n        {\n          finish_reason: normalizedFinishReason(event.data.finishReason),\n          index: 0,\n          message: {\n            content: event.data.message,\n            role: \"assistant\",\n            ...Array.isArray(existingToolCalls) ? { tool_calls: existingToolCalls } : {}\n          }\n        }\n      ],\n      step.reasoning\n    );\n    const turn = this.turnForEvent(event, ctx);\n    if (turn && event.data.finishReason !== \"tool-calls\") {\n      turn.output = event.data.message;\n    }\n  }\n  handleResultCompleted(event, ctx) {\n    const step = this.stepForEvent(event, ctx);\n    if (step) {\n      step.output = mergeEveReasoning(\n        [\n          {\n            finish_reason: \"stop\",\n            index: 0,\n            message: {\n              content: event.data.result,\n              role: \"assistant\"\n            }\n          }\n        ],\n        step.reasoning\n      );\n    }\n    const turn = this.turnForEvent(event, ctx);\n    if (turn) {\n      turn.output = event.data.result;\n    }\n  }\n  async handleActionsRequested(event, ctx, hookMetadata) {\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    const sessionId = sessionIdFromContext(ctx);\n    if (!turn || !sessionId) {\n      return;\n    }\n    const traceActions = event.data.actions.filter(isTraceableActionRequest);\n    if (traceActions.length === 0) {\n      return;\n    }\n    for (const action of traceActions) {\n      if (isToolCallAction(action)) {\n        await this.startRequestedTool(event, turn, sessionId, action);\n      } else if (isLocalSubagentCallAction(action)) {\n        await this.startRequestedSubagent(event, turn, sessionId, action);\n      }\n    }\n    const step = turn.stepsByIndex.get(event.data.stepIndex);\n    if (!step) {\n      return;\n    }\n    const toolCallsById = /* @__PURE__ */ new Map();\n    if (Array.isArray(step.output) && isObject(step.output[0])) {\n      const message = step.output[0][\"message\"];\n      if (isObject(message) && Array.isArray(message[\"tool_calls\"])) {\n        for (const toolCall of message[\"tool_calls\"]) {\n          if (isObject(toolCall) && typeof toolCall[\"id\"] === \"string\") {\n            toolCallsById.set(toolCall[\"id\"], toolCall);\n          }\n        }\n      }\n    }\n    for (const action of traceActions) {\n      const name = action.kind === \"tool-call\" ? action.toolName : action.subagentName ?? action.name ?? \"agent\";\n      let args = \"null\";\n      try {\n        args = JSON.stringify(action.input) ?? \"null\";\n      } catch {\n      }\n      toolCallsById.set(action.callId, {\n        function: {\n          arguments: args,\n          name\n        },\n        id: action.callId,\n        type: \"function\"\n      });\n    }\n    step.output = mergeEveReasoning(\n      [\n        {\n          finish_reason: \"tool_calls\",\n          index: 0,\n          message: {\n            content: null,\n            role: \"assistant\",\n            tool_calls: [...toolCallsById.values()]\n          }\n        }\n      ],\n      step.reasoning\n    );\n  }\n  async handleActionResult(event, ctx, hookMetadata) {\n    if (isToolResult(event.data.result)) {\n      await this.handleToolResult(event, ctx, event.data.result, hookMetadata);\n      return;\n    }\n    if (isSubagentResult(event.data.result)) {\n      await this.handleSubagentResult(\n        event,\n        ctx,\n        event.data.result,\n        hookMetadata\n      );\n    }\n  }\n  async handleToolResult(event, ctx, result, hookMetadata) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const key = toolKey3(sessionId, result.callId);\n    if (this.completedToolKeys.has(key)) {\n      return;\n    }\n    const tool = this.toolsByCallKey.get(key) ?? await this.startSyntheticTool(event, ctx, result, hookMetadata);\n    if (!tool) {\n      return;\n    }\n    const failed = event.data.status === \"failed\" || result.isError === true || event.data.error !== void 0;\n    tool.span.log({\n      ...failed ? {\n        error: actionResultError(event.data.error, result.output)\n      } : {},\n      metadata: tool.metadata,\n      output: result.output\n    });\n    const endTime = eventTime2(event);\n    tool.span.end(endTime === void 0 ? void 0 : { endTime });\n    this.toolsByCallKey.delete(key);\n    this.completedToolKeys.set(key, true);\n  }\n  async handleSubagentCalled(event, ctx, hookMetadata) {\n    if (event.data.remote?.url) {\n      return;\n    }\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    const sessionId = sessionIdFromContext(ctx);\n    if (!turn || !sessionId) {\n      return;\n    }\n    const key = toolKey3(sessionId, event.data.callId);\n    const metadata = toolMetadataFromTurn(turn);\n    const existing = this.toolsByCallKey.get(key);\n    if (existing) {\n      existing.metadata = { ...existing.metadata, ...metadata };\n      existing.span.log({ metadata: existing.metadata });\n      return;\n    }\n    if (this.completedToolKeys.has(key)) {\n      return;\n    }\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"subagent\",\n      sessionId,\n      event.data.callId\n    );\n    const pending = this.toolsByCallKey.get(key);\n    if (pending || this.completedToolKeys.has(key)) {\n      if (pending) {\n        pending.metadata = { ...pending.metadata, ...metadata };\n        pending.span.log({ metadata: pending.metadata });\n      }\n      return;\n    }\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        metadata\n      },\n      name: event.data.toolName ?? event.data.name,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({ metadata });\n    this.toolsByCallKey.set(key, {\n      metadata,\n      span,\n      turnKey: turnKey2(sessionId, event.data.turnId)\n    });\n  }\n  async handleSubagentCompleted(event, ctx, hookMetadata) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const key = toolKey3(sessionId, event.data.callId);\n    if (this.completedToolKeys.has(key)) {\n      return;\n    }\n    const subagent = this.toolsByCallKey.get(key) ?? await this.startSyntheticSubagent(event, ctx, hookMetadata);\n    if (!subagent) {\n      return;\n    }\n    subagent.span.log({\n      ...event.data.status === \"failed\" ? {\n        error: actionResultError(event.data.error, event.data.output)\n      } : {},\n      metadata: subagent.metadata,\n      ...event.data.output !== void 0 ? { output: event.data.output } : {}\n    });\n    const endTime = eventTime2(event);\n    const recordedEndTime = subagent.span.end(\n      endTime === void 0 ? void 0 : { endTime }\n    );\n    this.state.update((current) => {\n      const normalized = normalizeEveTraceState(current);\n      return {\n        ...normalized,\n        spanReferences: normalized.spanReferences.map(\n          (reference) => reference.spanId === subagent.span.spanId ? { ...reference, endTime: recordedEndTime } : reference\n        )\n      };\n    });\n  }\n  async handleSubagentResult(event, ctx, result, hookMetadata) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const key = toolKey3(sessionId, result.callId);\n    if (this.completedToolKeys.has(key)) {\n      return;\n    }\n    const subagent = this.toolsByCallKey.get(key) ?? await this.startSyntheticSubagentResult(\n      event,\n      ctx,\n      result,\n      hookMetadata\n    );\n    if (!subagent) {\n      return;\n    }\n    const isError = event.data.status === \"failed\" || result.isError === true || event.data.error !== void 0;\n    subagent.span.log({\n      ...isError ? {\n        error: actionResultError(event.data.error, result.output)\n      } : {},\n      metadata: subagent.metadata,\n      output: result.output\n    });\n    const endTime = eventTime2(event);\n    subagent.span.end(endTime === void 0 ? void 0 : { endTime });\n    this.toolsByCallKey.delete(key);\n    this.completedToolKeys.set(key, true);\n  }\n  handleStepCompleted(event, ctx) {\n    const step = this.stepForEvent(event, ctx);\n    if (!step) {\n      return;\n    }\n    const usage = event.data.usage;\n    const inputTokens = typeof usage?.inputTokens === \"number\" && Number.isFinite(usage.inputTokens) && usage.inputTokens >= 0 ? usage.inputTokens : void 0;\n    const outputTokens = typeof usage?.outputTokens === \"number\" && Number.isFinite(usage.outputTokens) && usage.outputTokens >= 0 ? usage.outputTokens : void 0;\n    const cacheReadTokens = typeof usage?.cacheReadTokens === \"number\" && Number.isFinite(usage.cacheReadTokens) && usage.cacheReadTokens >= 0 ? usage.cacheReadTokens : void 0;\n    const cacheWriteTokens = typeof usage?.cacheWriteTokens === \"number\" && Number.isFinite(usage.cacheWriteTokens) && usage.cacheWriteTokens >= 0 ? usage.cacheWriteTokens : void 0;\n    const costUsd = typeof usage?.costUsd === \"number\" && Number.isFinite(usage.costUsd) && usage.costUsd >= 0 ? usage.costUsd : void 0;\n    const total = inputTokens !== void 0 && outputTokens !== void 0 ? inputTokens + outputTokens : void 0;\n    const metrics = {\n      ...inputTokens !== void 0 ? { prompt_tokens: inputTokens } : {},\n      ...outputTokens !== void 0 ? { completion_tokens: outputTokens } : {},\n      ...total !== void 0 ? { tokens: total } : {},\n      ...cacheReadTokens !== void 0 ? { prompt_cached_tokens: cacheReadTokens } : {},\n      ...cacheWriteTokens !== void 0 ? { prompt_cache_creation_tokens: cacheWriteTokens } : {},\n      ...costUsd !== void 0 ? { estimated_cost: costUsd } : {}\n    };\n    step.metrics = { ...step.metrics, ...metrics };\n    const sessionId = sessionIdFromContext(ctx);\n    if (Array.isArray(step.output) && isObject(step.output[0])) {\n      const finishReason = step.output[0].finish_reason;\n      if (typeof finishReason !== \"string\") {\n        step.output[0].finish_reason = normalizedFinishReason(\n          event.data.finishReason\n        );\n      }\n    }\n    step.span.log({\n      ...step.input !== void 0 ? { input: step.input } : {},\n      metadata: step.metadata,\n      metrics,\n      output: step.output\n    });\n    const endTime = eventTime2(event);\n    step.span.end(endTime === void 0 ? void 0 : { endTime });\n    const turn = this.turnForEvent(event, ctx);\n    if (turn) {\n      for (const [key, value] of Object.entries(metrics)) {\n        turn.metrics[key] = (turn.metrics[key] ?? 0) + value;\n      }\n      turn.stepsByIndex.delete(event.data.stepIndex);\n    }\n    this.markStepEnded(event.data.turnId, event.data.stepIndex);\n    if (sessionId) {\n      clearStoredEveReasoning(\n        this.state,\n        sessionId,\n        event.data.turnId,\n        event.data.stepIndex\n      );\n    }\n  }\n  handleStepFailed(event, ctx) {\n    const step = this.stepForEvent(event, ctx);\n    if (step) {\n      step.span.log({\n        error: errorFromMessage(\n          event.data.message,\n          event.data.code,\n          event.data.details\n        )\n      });\n      const endTime = eventTime2(event);\n      step.span.end(endTime === void 0 ? void 0 : { endTime });\n    }\n    const turn = this.turnForEvent(event, ctx);\n    turn?.stepsByIndex.delete(event.data.stepIndex);\n    this.markStepEnded(event.data.turnId, event.data.stepIndex);\n    const sessionId = sessionIdFromContext(ctx);\n    if (sessionId) {\n      clearStoredEveReasoning(\n        this.state,\n        sessionId,\n        event.data.turnId,\n        event.data.stepIndex\n      );\n    }\n  }\n  handleTurnCompleted(event, ctx) {\n    const turn = this.turnForEvent(event, ctx);\n    if (!turn) {\n      return;\n    }\n    this.finalizeTurn(turn, {\n      endTime: eventTime2(event)\n    });\n  }\n  handleTurnFailed(event, ctx) {\n    const turn = this.turnForEvent(event, ctx);\n    if (!turn) {\n      return;\n    }\n    this.finalizeTurn(turn, {\n      endTime: eventTime2(event),\n      error: errorFromMessage(\n        event.data.message,\n        event.data.code,\n        event.data.details\n      )\n    });\n  }\n  handleSessionFailed(event, ctx) {\n    const sessionId = event.data.sessionId || sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    const error = errorFromMessage(\n      event.data.message,\n      event.data.code,\n      event.data.details\n    );\n    for (const [key, turn] of this.turnsByKey) {\n      if (!key.startsWith(`${sessionId}:`)) {\n        continue;\n      }\n      this.finalizeTurn(turn, {\n        endTime: eventTime2(event),\n        error\n      });\n    }\n    for (const [key, tool] of this.toolsByCallKey) {\n      if (key.startsWith(`${sessionId}:`)) {\n        const endTime = eventTime2(event);\n        if (!tool.endedByTurn) {\n          tool.span.log({ metadata: tool.metadata });\n          tool.span.end(endTime === void 0 ? void 0 : { endTime });\n          tool.endedByTurn = true;\n        }\n      }\n    }\n  }\n  handleSessionCompleted(event, ctx) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return;\n    }\n    for (const [key, turn] of this.turnsByKey) {\n      if (!key.startsWith(`${sessionId}:`)) {\n        continue;\n      }\n      this.finalizeTurn(turn, {\n        endTime: eventTime2(event)\n      });\n    }\n    for (const [key, tool] of this.toolsByCallKey) {\n      if (key.startsWith(`${sessionId}:`) && !tool.endedByTurn) {\n        const endTime = eventTime2(event);\n        tool.span.log({ metadata: tool.metadata });\n        tool.span.end(endTime === void 0 ? void 0 : { endTime });\n        tool.endedByTurn = true;\n      }\n    }\n  }\n  async ensureTurn(event, ctx, hookMetadata) {\n    const sessionId = sessionIdFromContext(ctx);\n    if (!sessionId) {\n      return void 0;\n    }\n    const key = turnKey2(sessionId, event.data.turnId);\n    const existing = this.turnsByKey.get(key);\n    if (existing) {\n      return existing;\n    }\n    const metadata = {\n      ...readEveTraceState(this.state).metadata,\n      ...hookMetadata ?? {},\n      \"eve.session_id\": sessionId\n    };\n    const span = await this.startTurnSpan(sessionId, event, ctx, metadata);\n    span.log({ metadata });\n    const state = {\n      key,\n      metadata,\n      metrics: {},\n      sessionId,\n      span,\n      stepsByIndex: /* @__PURE__ */ new Map(),\n      turnId: event.data.turnId\n    };\n    this.turnsByKey.set(key, state);\n    return state;\n  }\n  async startRequestedTool(event, turn, sessionId, action) {\n    const key = toolKey3(sessionId, action.callId);\n    if (this.toolsByCallKey.has(key) || this.completedToolKeys.has(key)) {\n      return;\n    }\n    const metadata = toolMetadataFromTurn(turn);\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"tool\",\n      sessionId,\n      event.data.turnId,\n      action.callId\n    );\n    if (this.toolsByCallKey.has(key) || this.completedToolKeys.has(key)) {\n      return;\n    }\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        input: action.input,\n        metadata\n      },\n      name: action.toolName,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({ input: action.input, metadata });\n    this.toolsByCallKey.set(key, {\n      metadata,\n      span,\n      turnKey: turnKey2(sessionId, event.data.turnId)\n    });\n  }\n  async startRequestedSubagent(event, turn, sessionId, action) {\n    const key = toolKey3(sessionId, action.callId);\n    if (this.toolsByCallKey.has(key) || this.completedToolKeys.has(key)) {\n      return;\n    }\n    const name = action.subagentName ?? action.name ?? \"agent\";\n    const metadata = toolMetadataFromTurn(turn);\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"subagent\",\n      sessionId,\n      action.callId\n    );\n    if (this.toolsByCallKey.has(key) || this.completedToolKeys.has(key)) {\n      return;\n    }\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        input: action.input,\n        metadata\n      },\n      name,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({ input: action.input, metadata });\n    this.toolsByCallKey.set(key, {\n      metadata,\n      span,\n      turnKey: turnKey2(sessionId, event.data.turnId)\n    });\n  }\n  async startSyntheticTool(event, ctx, result, hookMetadata) {\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    const sessionId = sessionIdFromContext(ctx);\n    if (!turn || !sessionId) {\n      return void 0;\n    }\n    const metadata = toolMetadataFromTurn(turn);\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"tool\",\n      sessionId,\n      event.data.turnId,\n      result.callId\n    );\n    const existing = this.toolsByCallKey.get(toolKey3(sessionId, result.callId));\n    if (existing) {\n      return existing;\n    }\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        metadata\n      },\n      name: result.toolName,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({ metadata });\n    const state = {\n      metadata,\n      span,\n      turnKey: turnKey2(sessionId, event.data.turnId)\n    };\n    this.toolsByCallKey.set(toolKey3(sessionId, result.callId), state);\n    return state;\n  }\n  async startSyntheticSubagent(event, ctx, hookMetadata) {\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    const sessionId = sessionIdFromContext(ctx);\n    if (!turn || !sessionId) {\n      return void 0;\n    }\n    const metadata = toolMetadataFromTurn(turn);\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"subagent\",\n      sessionId,\n      event.data.callId\n    );\n    const existing = this.toolsByCallKey.get(\n      toolKey3(sessionId, event.data.callId)\n    );\n    if (existing) {\n      return existing;\n    }\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        metadata\n      },\n      name: event.data.subagentName,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({ metadata });\n    const state = {\n      metadata,\n      span,\n      turnKey: turnKey2(sessionId, event.data.turnId)\n    };\n    this.toolsByCallKey.set(toolKey3(sessionId, event.data.callId), state);\n    return state;\n  }\n  async startSyntheticSubagentResult(event, ctx, result, hookMetadata) {\n    const turn = await this.ensureTurn(event, ctx, hookMetadata);\n    const sessionId = sessionIdFromContext(ctx);\n    if (!turn || !sessionId) {\n      return void 0;\n    }\n    const metadata = toolMetadataFromTurn(turn);\n    const { rowId: eventId, spanId } = await generateEveIds(\n      \"subagent\",\n      sessionId,\n      result.callId\n    );\n    const existing = this.toolsByCallKey.get(toolKey3(sessionId, result.callId));\n    if (existing) {\n      return existing;\n    }\n    const span = await this.startEveChildSpan(turn.span, {\n      event: {\n        id: eventId,\n        metadata\n      },\n      name: result.subagentName,\n      spanAttributes: { type: \"tool\" /* TOOL */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n    span.log({ metadata });\n    const state = {\n      metadata,\n      span,\n      turnKey: turnKey2(sessionId, event.data.turnId)\n    };\n    this.toolsByCallKey.set(toolKey3(sessionId, result.callId), state);\n    return state;\n  }\n  async startTurnSpan(sessionId, event, ctx, metadata) {\n    const session = isObject(ctx) ? ctx[\"session\"] : void 0;\n    const parent = isObject(session) ? session[\"parent\"] : void 0;\n    const parentTurn = isObject(parent) ? parent[\"turn\"] : void 0;\n    const parentLineage = isObject(parent) && typeof parent[\"callId\"] === \"string\" && typeof parent[\"sessionId\"] === \"string\" && isObject(parentTurn) && typeof parentTurn[\"id\"] === \"string\" ? {\n      callId: parent[\"callId\"],\n      sessionId: parent[\"sessionId\"],\n      turnId: parentTurn[\"id\"]\n    } : void 0;\n    const [{ rowId: eventId, spanId }, rootSpanId, parentSpanId] = await Promise.all([\n      generateEveIds(\"turn\", sessionId, event.data.turnId),\n      deterministicEveId(\n        \"eve:root\",\n        parentLineage?.sessionId ?? sessionId,\n        parentLineage?.turnId ?? event.data.turnId\n      ),\n      parentLineage ? deterministicEveId(\n        \"eve:subagent\",\n        parentLineage.sessionId,\n        parentLineage.callId\n      ) : Promise.resolve(void 0)\n    ]);\n    return await this.startEveSpan({\n      event: {\n        id: eventId,\n        metadata\n      },\n      name: \"eve.turn\",\n      parentSpanIds: parentSpanId ? { rootSpanId, spanId: parentSpanId } : { parentSpanIds: [], rootSpanId },\n      spanAttributes: { type: \"task\" /* TASK */ },\n      spanId,\n      startTime: eventTime2(event)\n    });\n  }\n  turnForEvent(event, ctx) {\n    const sessionId = sessionIdFromContext(ctx);\n    return sessionId ? this.turnsByKey.get(turnKey2(sessionId, event.data.turnId)) : void 0;\n  }\n  stepForEvent(event, ctx) {\n    return this.turnForEvent(event, ctx)?.stepsByIndex.get(\n      event.data.stepIndex\n    );\n  }\n  finalizeTurn(turn, args) {\n    const { endTime } = args;\n    for (const step of turn.stepsByIndex.values()) {\n      step.span.log({\n        ...step.input !== void 0 ? { input: step.input } : {},\n        metadata: step.metadata,\n        metrics: step.metrics,\n        output: step.output\n      });\n      step.span.end(endTime === void 0 ? void 0 : { endTime });\n    }\n    turn.stepsByIndex.clear();\n    for (const tool of this.toolsByCallKey.values()) {\n      if (tool.turnKey !== turn.key) {\n        continue;\n      }\n      if (tool.endedByTurn) {\n        continue;\n      }\n      tool.span.log({ metadata: tool.metadata });\n      tool.span.end(endTime === void 0 ? void 0 : { endTime });\n      tool.endedByTurn = true;\n    }\n    if (args.error) {\n      turn.span.log({ error: args.error });\n    } else {\n      turn.span.log({\n        metadata: turn.metadata,\n        metrics: turn.metrics,\n        output: turn.output\n      });\n    }\n    turn.span.end(endTime === void 0 ? void 0 : { endTime });\n    this.turnsByKey.delete(turn.key);\n    this.state.update((current) => {\n      const normalized = normalizeEveTraceState(current);\n      return {\n        ...normalized,\n        reasoningBlocks: normalized.reasoningBlocks.filter(\n          (entry) => !entry.key.startsWith(`${turn.sessionId}\\0${turn.turnId}\\0`)\n        ),\n        stepStarts: normalized.stepStarts.filter(\n          (entry) => entry.turnId !== turn.turnId\n        )\n      };\n    });\n  }\n  cleanupSession(sessionId) {\n    const keyPrefix = `${sessionId}:`;\n    for (const key of this.turnsByKey.keys()) {\n      if (key.startsWith(keyPrefix)) {\n        this.turnsByKey.delete(key);\n      }\n    }\n    for (const key of this.toolsByCallKey.keys()) {\n      if (key.startsWith(keyPrefix)) {\n        this.toolsByCallKey.delete(key);\n      }\n    }\n    for (const key of this.completedToolKeys.keys()) {\n      if (key.startsWith(keyPrefix)) {\n        this.completedToolKeys.delete(key);\n      }\n    }\n    this.state.update(() => emptyEveTraceState());\n  }\n  async flushInstrumentation() {\n    try {\n      await flush();\n      return true;\n    } catch (error) {\n      debugLogger.warn(\"Error in Eve flush instrumentation:\", error);\n      return false;\n    }\n  }\n};\nfunction emptyEveTraceState() {\n  return {\n    llmInputs: [],\n    metadata: {},\n    reasoningBlocks: [],\n    spanReferences: [],\n    stepStarts: []\n  };\n}\nfunction normalizeEveTraceState(state) {\n  if (!isObject(state)) {\n    return emptyEveTraceState();\n  }\n  const metadata = isObject(state[\"metadata\"]) ? state[\"metadata\"] : {};\n  const spanReferences = Array.isArray(state[\"spanReferences\"]) ? state[\"spanReferences\"].flatMap((entry) => {\n    if (!isObject(entry)) {\n      return [];\n    }\n    const exported = entry[\"exported\"];\n    const endTime = entry[\"endTime\"];\n    const rootSpanId = entry[\"rootSpanId\"];\n    const rowId = entry[\"rowId\"];\n    const spanId = entry[\"spanId\"];\n    const startEvent = entry[\"startEvent\"];\n    const startEventCreated = isObject(startEvent) ? startEvent[\"created\"] : void 0;\n    const startEventMetrics = isObject(startEvent) ? startEvent[\"metrics\"] : void 0;\n    const startEventSpanAttributes = isObject(startEvent) ? startEvent[\"span_attributes\"] : void 0;\n    const startEventSpanParents = isObject(startEvent) ? startEvent[\"span_parents\"] : void 0;\n    const normalizedStartEvent = typeof startEventCreated === \"string\" && isObject(startEventMetrics) && typeof startEventMetrics[\"start\"] === \"number\" && Number.isFinite(startEventMetrics[\"start\"]) && isObject(startEventSpanAttributes) && Array.isArray(startEventSpanParents) && startEventSpanParents.every(\n      (parent) => typeof parent === \"string\"\n    ) ? {\n      created: startEventCreated,\n      metrics: { start: startEventMetrics[\"start\"] },\n      span_attributes: { ...startEventSpanAttributes },\n      span_parents: [...startEventSpanParents]\n    } : void 0;\n    return typeof exported === \"string\" && typeof rootSpanId === \"string\" && typeof rowId === \"string\" && typeof spanId === \"string\" ? [\n      {\n        ...typeof endTime === \"number\" && Number.isFinite(endTime) ? { endTime } : {},\n        exported,\n        rootSpanId,\n        rowId,\n        spanId,\n        ...normalizedStartEvent ? { startEvent: normalizedStartEvent } : {}\n      }\n    ] : [];\n  }).slice(-MAX_STORED_SPAN_REFERENCES) : [];\n  const llmInputs = Array.isArray(state[\"llmInputs\"]) ? state[\"llmInputs\"].flatMap((entry) => {\n    if (!isObject(entry)) {\n      return [];\n    }\n    const key = entry[\"key\"];\n    const input = entry[\"input\"];\n    return typeof key === \"string\" && isCapturedModelInput(input) ? [{ input, key }] : [];\n  }).slice(-MAX_STORED_LLM_INPUTS) : [];\n  const reasoningBlocks = Array.isArray(state[\"reasoningBlocks\"]) ? state[\"reasoningBlocks\"].flatMap((entry) => {\n    if (!isObject(entry)) {\n      return [];\n    }\n    const content = entry[\"content\"];\n    const eventAt = entry[\"eventAt\"];\n    const key = entry[\"key\"];\n    return typeof content === \"string\" && (eventAt === void 0 || typeof eventAt === \"string\") && typeof key === \"string\" ? [\n      {\n        content,\n        ...typeof eventAt === \"string\" ? { eventAt } : {},\n        key\n      }\n    ] : [];\n  }).slice(-MAX_STORED_REASONING_BLOCKS) : [];\n  const stepStarts = Array.isArray(state[\"stepStarts\"]) ? state[\"stepStarts\"].flatMap((entry) => {\n    if (!isObject(entry)) {\n      return [];\n    }\n    const ordinal = entry[\"ordinal\"];\n    const open = entry[\"open\"];\n    const stepIndex = entry[\"stepIndex\"];\n    const turnId = entry[\"turnId\"];\n    return typeof ordinal === \"number\" && Number.isInteger(ordinal) && ordinal >= 0 && typeof open === \"boolean\" && typeof stepIndex === \"number\" && Number.isInteger(stepIndex) && typeof turnId === \"string\" ? [{ open, ordinal, stepIndex, turnId }] : [];\n  }).slice(-MAX_STORED_STEP_STARTS) : [];\n  return {\n    llmInputs,\n    metadata: { ...metadata },\n    reasoningBlocks,\n    spanReferences,\n    stepStarts\n  };\n}\nfunction readEveTraceState(state) {\n  try {\n    return normalizeEveTraceState(state.get());\n  } catch {\n    return emptyEveTraceState();\n  }\n}\nfunction storeEveReasoning(state, sessionId, event) {\n  const eventAt = event.meta?.at;\n  const key = llmInputKey(sessionId, event.data.turnId, event.data.stepIndex);\n  let stored = [];\n  state.update((current) => {\n    const normalized = normalizeEveTraceState(current);\n    const alreadyStored = normalized.reasoningBlocks.some(\n      (entry) => entry.content === event.data.reasoning && entry.eventAt === eventAt && entry.key === key\n    );\n    const reasoningBlocks = alreadyStored ? normalized.reasoningBlocks : [\n      ...normalized.reasoningBlocks,\n      {\n        content: event.data.reasoning,\n        ...eventAt ? { eventAt } : {},\n        key\n      }\n    ].slice(-MAX_STORED_REASONING_BLOCKS);\n    stored = reasoningBlocks.flatMap(\n      (entry) => entry.key === key ? [\n        {\n          content: entry.content,\n          ...entry.eventAt ? { eventAt: entry.eventAt } : {}\n        }\n      ] : []\n    );\n    return alreadyStored ? normalized : { ...normalized, reasoningBlocks };\n  });\n  return stored;\n}\nfunction readStoredEveReasoning(state, sessionId, turnId, stepIndex) {\n  const key = llmInputKey(sessionId, turnId, stepIndex);\n  return readEveTraceState(state).reasoningBlocks.flatMap(\n    (entry) => entry.key === key ? [\n      {\n        content: entry.content,\n        ...entry.eventAt ? { eventAt: entry.eventAt } : {}\n      }\n    ] : []\n  );\n}\nfunction clearStoredEveReasoning(state, sessionId, turnId, stepIndex) {\n  const key = llmInputKey(sessionId, turnId, stepIndex);\n  state.update((current) => {\n    const normalized = normalizeEveTraceState(current);\n    return {\n      ...normalized,\n      reasoningBlocks: normalized.reasoningBlocks.filter(\n        (entry) => entry.key !== key\n      )\n    };\n  });\n}\nfunction eveOutputMessage(output) {\n  return Array.isArray(output) && isObject(output[0]) ? output[0][\"message\"] : void 0;\n}\nfunction mergeEveReasoning(output, reasoning) {\n  if (reasoning.length === 0) {\n    return output;\n  }\n  const choice = Array.isArray(output) && isObject(output[0]) ? output[0] : {};\n  const message = isObject(choice[\"message\"]) ? choice[\"message\"] : {};\n  return [\n    {\n      ...choice,\n      index: typeof choice[\"index\"] === \"number\" ? choice[\"index\"] : 0,\n      message: {\n        ...message,\n        content: \"content\" in message ? message[\"content\"] : null,\n        reasoning: reasoning.map((block) => ({ content: block.content })),\n        role: typeof message[\"role\"] === \"string\" ? message[\"role\"] : \"assistant\"\n      }\n    }\n  ];\n}\nfunction captureEveModelInput(state, input) {\n  const sessionId = input.session.id;\n  const turnId = input.turn.id;\n  const stepIndex = input.step.index;\n  const captured = capturedModelInput(input.modelInput);\n  if (!captured) {\n    return;\n  }\n  const key = llmInputKey(sessionId, turnId, stepIndex);\n  state.update((current) => {\n    const normalized = normalizeEveTraceState(current);\n    const llmInputs = [...normalized.llmInputs, { input: captured, key }];\n    return {\n      ...normalized,\n      llmInputs: llmInputs.slice(-MAX_STORED_LLM_INPUTS)\n    };\n  });\n}\nfunction consumeCapturedEveModelInput(state, sessionId, turnId, stepIndex) {\n  try {\n    const key = llmInputKey(sessionId, turnId, stepIndex);\n    let input;\n    state.update((current) => {\n      const normalized = normalizeEveTraceState(current);\n      const index = normalized.llmInputs.findIndex(\n        (candidate) => candidate.key === key\n      );\n      if (index < 0) {\n        return normalized;\n      }\n      input = normalized.llmInputs[index]?.input;\n      return {\n        ...normalized,\n        llmInputs: normalized.llmInputs.filter(\n          (_, candidateIndex) => candidateIndex !== index\n        )\n      };\n    });\n    return input;\n  } catch (error) {\n    debugLogger.warn(\"Error in Eve LLM input consumption:\", error);\n    return void 0;\n  }\n}\nfunction capturedModelInput(modelInput) {\n  try {\n    if (!isObject(modelInput) || !Array.isArray(modelInput[\"messages\"])) {\n      return void 0;\n    }\n    const value = [];\n    const instructions = modelInput[\"instructions\"];\n    if (typeof instructions === \"string\") {\n      value.push({ content: instructions, role: \"system\" });\n    } else if (Array.isArray(instructions)) {\n      for (const instruction of instructions) {\n        const captured = capturedEveModelMessage(instruction);\n        if (captured?.role === \"system\") {\n          value.push(captured);\n        }\n      }\n    } else {\n      const captured = capturedEveModelMessage(instructions);\n      if (captured?.role === \"system\") {\n        value.push(captured);\n      }\n    }\n    for (const message of modelInput[\"messages\"]) {\n      const captured = capturedEveModelMessage(message);\n      if (captured) {\n        value.push(captured);\n      }\n    }\n    const cloned = JSON.parse(JSON.stringify(value));\n    if (!Array.isArray(cloned)) {\n      return void 0;\n    }\n    return cloned;\n  } catch {\n    return void 0;\n  }\n}\nfunction capturedEveModelMessage(message) {\n  if (!isObject(message)) {\n    return void 0;\n  }\n  const role = message[\"role\"];\n  if (role !== \"system\" && role !== \"user\" && role !== \"assistant\" && role !== \"tool\") {\n    return void 0;\n  }\n  const content = message[\"content\"];\n  if (typeof content === \"string\") {\n    return { content, role };\n  }\n  if (!Array.isArray(content)) {\n    return void 0;\n  }\n  const capturedContent = [];\n  for (const part of content) {\n    const captured = capturedEveModelContentPart(part);\n    if (captured) {\n      capturedContent.push(captured);\n    }\n  }\n  return { content: capturedContent, role };\n}\nfunction capturedEveModelContentPart(part) {\n  if (!isObject(part) || typeof part[\"type\"] !== \"string\") {\n    return void 0;\n  }\n  switch (part[\"type\"]) {\n    case \"text\":\n    case \"reasoning\": {\n      const text = part[\"text\"];\n      return typeof text === \"string\" ? { text, type: part[\"type\"] } : void 0;\n    }\n    case \"image\":\n      if (!Object.hasOwn(part, \"image\")) {\n        return void 0;\n      }\n      return {\n        image: part[\"image\"],\n        ...typeof part[\"mediaType\"] === \"string\" ? { mediaType: part[\"mediaType\"] } : {},\n        type: \"image\"\n      };\n    case \"file\":\n    case \"reasoning-file\": {\n      if (!Object.hasOwn(part, \"data\") || typeof part[\"mediaType\"] !== \"string\") {\n        return void 0;\n      }\n      return {\n        data: part[\"data\"],\n        ...part[\"type\"] === \"file\" && typeof part[\"filename\"] === \"string\" ? { filename: part[\"filename\"] } : {},\n        mediaType: part[\"mediaType\"],\n        type: part[\"type\"]\n      };\n    }\n    case \"custom\":\n      return {\n        ...typeof part[\"kind\"] === \"string\" ? { kind: part[\"kind\"] } : {},\n        type: \"custom\"\n      };\n    case \"tool-call\": {\n      if (typeof part[\"toolCallId\"] !== \"string\" || typeof part[\"toolName\"] !== \"string\") {\n        return void 0;\n      }\n      return {\n        input: part[\"input\"],\n        ...typeof part[\"providerExecuted\"] === \"boolean\" ? { providerExecuted: part[\"providerExecuted\"] } : {},\n        toolCallId: part[\"toolCallId\"],\n        toolName: part[\"toolName\"],\n        type: \"tool-call\"\n      };\n    }\n    case \"tool-result\": {\n      const output = part[\"output\"];\n      if (typeof part[\"toolCallId\"] !== \"string\" || typeof part[\"toolName\"] !== \"string\" || !isObject(output) || typeof output[\"type\"] !== \"string\") {\n        return void 0;\n      }\n      let capturedOutput;\n      switch (output[\"type\"]) {\n        case \"text\":\n        case \"error-text\": {\n          if (typeof output[\"value\"] !== \"string\") {\n            return void 0;\n          }\n          capturedOutput = {\n            type: output[\"type\"],\n            value: output[\"value\"]\n          };\n          break;\n        }\n        case \"json\":\n        case \"error-json\":\n          capturedOutput = {\n            type: output[\"type\"],\n            value: output[\"value\"]\n          };\n          break;\n        case \"execution-denied\":\n          capturedOutput = {\n            ...typeof output[\"reason\"] === \"string\" ? { reason: output[\"reason\"] } : {},\n            type: \"execution-denied\"\n          };\n          break;\n        case \"content\": {\n          if (!Array.isArray(output[\"value\"])) {\n            return void 0;\n          }\n          const value = [];\n          for (const outputPart of output[\"value\"]) {\n            const captured = capturedEveModelContentPart(outputPart);\n            if (captured) {\n              value.push(captured);\n            }\n          }\n          capturedOutput = {\n            type: \"content\",\n            value\n          };\n          break;\n        }\n        default:\n          return void 0;\n      }\n      return {\n        output: capturedOutput,\n        toolCallId: part[\"toolCallId\"],\n        toolName: part[\"toolName\"],\n        type: \"tool-result\"\n      };\n    }\n    case \"tool-approval-request\": {\n      if (typeof part[\"approvalId\"] !== \"string\" || typeof part[\"toolCallId\"] !== \"string\") {\n        return void 0;\n      }\n      return {\n        approvalId: part[\"approvalId\"],\n        ...typeof part[\"isAutomatic\"] === \"boolean\" ? { isAutomatic: part[\"isAutomatic\"] } : {},\n        ...typeof part[\"signature\"] === \"string\" ? { signature: part[\"signature\"] } : {},\n        toolCallId: part[\"toolCallId\"],\n        type: \"tool-approval-request\"\n      };\n    }\n    case \"tool-approval-response\": {\n      if (typeof part[\"approvalId\"] !== \"string\" || typeof part[\"approved\"] !== \"boolean\") {\n        return void 0;\n      }\n      return {\n        approvalId: part[\"approvalId\"],\n        approved: part[\"approved\"],\n        ...typeof part[\"providerExecuted\"] === \"boolean\" ? { providerExecuted: part[\"providerExecuted\"] } : {},\n        ...typeof part[\"reason\"] === \"string\" ? { reason: part[\"reason\"] } : {},\n        type: \"tool-approval-response\"\n      };\n    }\n    case \"file-data\":\n    case \"image-data\": {\n      if (typeof part[\"data\"] !== \"string\" || typeof part[\"mediaType\"] !== \"string\") {\n        return void 0;\n      }\n      return {\n        data: part[\"data\"],\n        ...part[\"type\"] === \"file-data\" && typeof part[\"filename\"] === \"string\" ? { filename: part[\"filename\"] } : {},\n        mediaType: part[\"mediaType\"],\n        type: part[\"type\"]\n      };\n    }\n    case \"file-url\":\n    case \"image-url\": {\n      if (typeof part[\"url\"] !== \"string\") {\n        return void 0;\n      }\n      return {\n        ...part[\"type\"] === \"file-url\" && typeof part[\"mediaType\"] === \"string\" ? { mediaType: part[\"mediaType\"] } : {},\n        type: part[\"type\"],\n        url: part[\"url\"]\n      };\n    }\n    case \"file-id\":\n    case \"image-file-id\": {\n      const fileId = part[\"fileId\"];\n      if (typeof fileId !== \"string\" && !isObject(fileId)) {\n        return void 0;\n      }\n      return { fileId, type: part[\"type\"] };\n    }\n    case \"file-reference\":\n    case \"image-file-reference\": {\n      if (!isObject(part[\"providerReference\"])) {\n        return void 0;\n      }\n      return {\n        providerReference: part[\"providerReference\"],\n        type: part[\"type\"]\n      };\n    }\n    default:\n      return void 0;\n  }\n}\nfunction isCapturedModelInput(input) {\n  return Array.isArray(input) && input.every(\n    (message) => isObject(message) && (message[\"role\"] === \"system\" || message[\"role\"] === \"user\" || message[\"role\"] === \"assistant\" || message[\"role\"] === \"tool\") && (typeof message[\"content\"] === \"string\" || Array.isArray(message[\"content\"]) && message[\"content\"].every(isObject))\n  );\n}\nfunction llmInputKey(sessionId, turnId, stepIndex) {\n  return `${sessionId}\\0${turnId}\\0${stepIndex}`;\n}\nfunction modelMetadataFromRuntime(runtime) {\n  if (!isObject(runtime)) {\n    return {};\n  }\n  const modelId = runtime[\"modelId\"];\n  return typeof modelId === \"string\" && !modelId.trim().startsWith(\"dynamic:\") ? modelMetadataFromModelId(modelId) : {};\n}\nfunction modelMetadataFromModelId(modelId) {\n  const normalized = modelId.trim();\n  if (!normalized) {\n    return {};\n  }\n  const slashIndex = normalized.indexOf(\"/\");\n  if (slashIndex > 0 && slashIndex < normalized.length - 1) {\n    return {\n      model: normalized.slice(slashIndex + 1),\n      provider: normalized.slice(0, slashIndex)\n    };\n  }\n  return {\n    model: normalized\n  };\n}\nfunction sessionIdFromContext(ctx) {\n  if (!isObject(ctx)) {\n    return void 0;\n  }\n  const session = ctx[\"session\"];\n  if (!isObject(session)) {\n    return void 0;\n  }\n  const id = session[\"id\"];\n  return typeof id === \"string\" ? id : void 0;\n}\nfunction toolMetadataFromTurn(turn) {\n  const { model: _model, provider: _provider, ...metadata } = turn.metadata;\n  return metadata;\n}\nfunction isToolCallAction(action) {\n  return isObject(action) && action[\"kind\"] === \"tool-call\" && typeof action[\"callId\"] === \"string\" && typeof action[\"toolName\"] === \"string\" && isObject(action[\"input\"]);\n}\nfunction isLocalSubagentCallAction(action) {\n  return isObject(action) && action[\"kind\"] === \"subagent-call\" && typeof action[\"callId\"] === \"string\" && isObject(action[\"input\"]);\n}\nfunction isTraceableActionRequest(action) {\n  return isToolCallAction(action) || isLocalSubagentCallAction(action);\n}\nfunction isToolResult(result) {\n  return isObject(result) && result[\"kind\"] === \"tool-result\" && typeof result[\"callId\"] === \"string\" && typeof result[\"toolName\"] === \"string\";\n}\nfunction isSubagentResult(result) {\n  return isObject(result) && result[\"kind\"] === \"subagent-result\" && typeof result[\"callId\"] === \"string\" && typeof result[\"subagentName\"] === \"string\";\n}\nfunction normalizedFinishReason(finishReason) {\n  switch (finishReason) {\n    case \"content-filter\":\n      return \"content_filter\";\n    case \"tool-calls\":\n      return \"tool_calls\";\n    default:\n      return finishReason;\n  }\n}\nfunction errorFromMessage(message, code, details) {\n  const error = new Error(`${code}: ${message}`);\n  if (details !== void 0) {\n    error.cause = details;\n  }\n  return error;\n}\nfunction actionResultError(error, output) {\n  if (error) {\n    return errorFromMessage(error.message, error.code);\n  }\n  const result = new Error(\"Eve action failed\");\n  if (output !== void 0) {\n    result.cause = output;\n  }\n  return result;\n}\nfunction eventTime2(event) {\n  if (!event.meta?.at) {\n    return void 0;\n  }\n  const timestamp = Date.parse(event.meta.at);\n  return Number.isFinite(timestamp) ? timestamp / 1e3 : void 0;\n}\nfunction turnKey2(sessionId, turnId) {\n  return `${sessionId}:${turnId}`;\n}\nfunction toolKey3(sessionId, callId) {\n  return `${sessionId}:${callId}`;\n}\nasync function generateEveIds(kind, ...parts) {\n  const [rowId, spanId] = await Promise.all([\n    deterministicEveId(`eve:row:${kind}`, ...parts),\n    deterministicEveId(`eve:${kind}`, ...parts)\n  ]);\n  return { rowId, spanId };\n}\nasync function deterministicEveId(...parts) {\n  const data = new TextEncoder().encode(\n    parts.map((part) => `${part.length}:${part}`).join(\"\\0\")\n  );\n  const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", data);\n  const bytes = Array.from(new Uint8Array(digest, 0, 16));\n  const hex = bytes.map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n// src/instrumentation/plugins/eve-provider.ts\nvar MAX_EVE_PROVIDER_CACHE_ENTRIES = 1e4;\nfunction createEveInstrumentationProvider(options = {}) {\n  const bridge = new EveProviderBridge(options.metadata);\n  return {\n    tracePolicy: () => ({\n      emit: true,\n      recordInputs: true,\n      recordOutputs: true\n    }),\n    events: {\n      \"action.completed\": providerHandler(\n        \"action.completed\",\n        bridge.handleActionTerminal.bind(bridge)\n      ),\n      \"action.failed\": providerHandler(\n        \"action.failed\",\n        bridge.handleActionTerminal.bind(bridge)\n      ),\n      \"action.started\": providerHandler(\n        \"action.started\",\n        bridge.handleActionStarted.bind(bridge)\n      ),\n      \"model.call.completed\": providerHandler(\n        \"model.call.completed\",\n        bridge.handleModelTerminal.bind(bridge)\n      ),\n      \"model.call.failed\": providerHandler(\n        \"model.call.failed\",\n        bridge.handleModelTerminal.bind(bridge)\n      ),\n      \"model.call.started\": providerHandler(\n        \"model.call.started\",\n        bridge.handleModelStarted.bind(bridge)\n      ),\n      \"step.attempt.completed\": providerHandler(\n        \"step.attempt.completed\",\n        (event) => bridge.handleStepAttemptTerminal(event)\n      ),\n      \"step.attempt.failed\": providerHandler(\n        \"step.attempt.failed\",\n        (event) => bridge.handleStepAttemptTerminal(event)\n      ),\n      \"turn.cancelled\": providerHandler(\n        \"turn.cancelled\",\n        bridge.handleTurnTerminal.bind(bridge)\n      ),\n      \"turn.completed\": providerHandler(\n        \"turn.completed\",\n        bridge.handleTurnTerminal.bind(bridge)\n      ),\n      \"turn.failed\": providerHandler(\n        \"turn.failed\",\n        bridge.handleTurnTerminal.bind(bridge)\n      ),\n      \"turn.started\": providerHandler(\n        \"turn.started\",\n        bridge.handleTurnStarted.bind(bridge)\n      )\n    },\n    flush,\n    setup: options.setup\n  };\n}\nvar EveProviderBridge = class {\n  constructor(metadata) {\n    this.metadata = metadata;\n  }\n  metadata;\n  activeActions = /* @__PURE__ */ new Map();\n  activeModels = /* @__PURE__ */ new Map();\n  modelsByAttempt = /* @__PURE__ */ new Map();\n  settledOperations = new LRUCache({\n    max: MAX_EVE_PROVIDER_CACHE_ENTRIES\n  });\n  turns = new LRUCache({\n    max: MAX_EVE_PROVIDER_CACHE_ENTRIES\n  });\n  async handleTurnStarted(event, context) {\n    await this.contain(\"turn start\", async () => {\n      if (this.settledOperations.has(event.idempotencyKey)) {\n        context.state.set({ skip: true });\n        return;\n      }\n      const { rowId, spanId } = await generateEveIds(\n        \"turn\",\n        event.idempotencyKey\n      );\n      const key = turnKey3(event.sessionId, event.turnId);\n      const stored = storedSpan(context);\n      if (stored && \"exported\" in stored && stored.rootSpanId) {\n        this.turns.set(key, { rootSpanId: stored.rootSpanId, spanId });\n        return;\n      }\n      let rootSpanId = spanId;\n      let parentSpanId;\n      if (event.parentLineage) {\n        const parentTurnKey = turnKey3(\n          event.parentLineage.sessionId,\n          event.parentLineage.turnId\n        );\n        const parentTurn = this.turns.get(parentTurnKey);\n        rootSpanId = parentTurn?.rootSpanId ?? // Eve propagates the root session through every nested subagent. Use\n        // it instead of the immediate parent session when no ancestor ran\n        // in-process.\n        (await generateEveIds(\n          \"turn\",\n          turnIdempotencyKey(\n            event.rootSessionId,\n            event.parentLineage.turnId\n          )\n        )).spanId;\n        parentSpanId = (await generateEveIds(\n          \"tool\",\n          actionIdempotencyKey(\n            event.parentLineage.sessionId,\n            event.parentLineage.turnId,\n            event.parentLineage.callId\n          )\n        )).spanId;\n      } else if (event.parentTraceContext) {\n        rootSpanId = event.parentTraceContext.traceId;\n        parentSpanId = event.parentTraceContext.spanId;\n      }\n      const metadata = this.spanMetadata(event.sessionId);\n      const span = await this.startSpan(\n        context,\n        {\n          event: { id: rowId, metadata },\n          name: \"eve.turn\",\n          parentSpanIds: parentSpanId ? { rootSpanId, spanId: parentSpanId } : { parentSpanIds: [], rootSpanId },\n          spanAttributes: { type: \"task\" /* TASK */ },\n          spanId\n        },\n        rootSpanId\n      );\n      span?.log({ metadata });\n      this.turns.set(key, {\n        rootSpanId,\n        span,\n        spanId\n      });\n    });\n  }\n  async handleTurnTerminal(event, context) {\n    await this.contain(\"turn terminal\", async () => {\n      if (this.settledOperations.has(event.idempotencyKey)) {\n        context.state.set(void 0);\n        return;\n      }\n      const error = event.type === \"turn.failed\" ? event.error : void 0;\n      this.drainActionsForTurn(event.sessionId, event.turnId, error);\n      const stored = storedSpan(context);\n      if (stored && \"exported\" in stored) {\n        updateSpan({\n          exported: stored.exported,\n          ...error !== void 0 ? { error } : {},\n          metrics: { end: Date.now() / 1e3 }\n        });\n      }\n      this.settledOperations.set(event.idempotencyKey, true);\n      context.state.set(void 0);\n      this.turns.delete(turnKey3(event.sessionId, event.turnId));\n    });\n  }\n  async handleModelStarted(event, context) {\n    await this.contain(\"model start\", async () => {\n      if (this.settledOperations.has(event.idempotencyKey)) {\n        context.state.set({ skip: true });\n        return;\n      }\n      const parent = await this.parentForScope(event.scope);\n      const { rowId, spanId } = await generateEveIds(\n        \"step\",\n        event.idempotencyKey\n      );\n      const input = event.input ? capturedModelInput(event.input) : void 0;\n      const metadata = {\n        ...this.spanMetadata(event.scope.sessionId),\n        model: event.model.modelId,\n        provider: event.model.provider\n      };\n      const span = await this.startSpan(context, {\n        event: {\n          id: rowId,\n          ...input !== void 0 ? { input } : {},\n          metadata\n        },\n        name: \"eve.step\",\n        parentSpanIds: parent,\n        spanAttributes: { type: \"llm\" /* LLM */ },\n        spanId\n      });\n      if (!span) return;\n      span.log({ ...input !== void 0 ? { input } : {}, metadata });\n      const turn = this.turns.get(\n        turnKey3(event.scope.sessionId, event.scope.turnId)\n      );\n      if (turn?.span && !turn.inputRecorded && input) {\n        turn.inputRecorded = true;\n        let start = input.length;\n        while (start > 0 && input[start - 1]?.role === \"user\") start--;\n        if (start < input.length) turn.span.log({ input: input.slice(start) });\n      }\n      this.activeModels.set(event.idempotencyKey, {\n        span,\n        turnKey: turnKey3(event.scope.sessionId, event.scope.turnId)\n      });\n      const keys = this.modelsByAttempt.get(event.scope.attemptId) ?? /* @__PURE__ */ new Set();\n      keys.add(event.idempotencyKey);\n      this.modelsByAttempt.set(event.scope.attemptId, keys);\n    });\n  }\n  async handleModelTerminal(event, context) {\n    await this.contain(\"model terminal\", async () => {\n      if (this.settledOperations.has(event.idempotencyKey)) {\n        context.state.set(void 0);\n        return;\n      }\n      const output = event.type === \"model.call.completed\" ? modelOutput(event) : void 0;\n      const reply = output?.[0]?.message.content;\n      if (reply && event.type === \"model.call.completed\" && event.finishReason !== \"tool-calls\") {\n        this.turns.get(turnKey3(event.scope.sessionId, event.scope.turnId))?.span?.log({ output: reply });\n      }\n      const active = this.activeModels.get(event.idempotencyKey);\n      if (active) {\n        const span = active.span;\n        if (event.type === \"model.call.failed\") {\n          if (event.error !== void 0) span.log({ error: event.error });\n        } else {\n          span.log({\n            metrics: usageMetrics(event.usage),\n            output\n          });\n        }\n        span.end();\n      } else {\n        const stored = storedSpan(context);\n        if (stored && \"exported\" in stored) {\n          updateSpan({\n            exported: stored.exported,\n            ...event.type === \"model.call.failed\" ? event.error !== void 0 ? { error: event.error } : {} : { output },\n            metrics: {\n              ...event.type === \"model.call.completed\" ? usageMetrics(event.usage) : {},\n              end: Date.now() / 1e3\n            }\n          });\n        }\n      }\n      this.settledOperations.set(event.idempotencyKey, true);\n      this.forgetModel(event.scope.attemptId, event.idempotencyKey);\n      context.state.set(void 0);\n    });\n  }\n  async handleActionStarted(event, context) {\n    await this.contain(\"action start\", async () => {\n      if (event.kind === \"load-skill\" || this.settledOperations.has(event.idempotencyKey)) {\n        context.state.set({ skip: true });\n        return;\n      }\n      const parent = await this.parentForScope(event.scope);\n      const { rowId, spanId } = await generateEveIds(\n        \"tool\",\n        event.idempotencyKey\n      );\n      const metadata = {\n        ...this.spanMetadata(event.scope.sessionId),\n        \"eve.action_kind\": event.kind\n      };\n      const span = await this.startSpan(context, {\n        event: {\n          id: rowId,\n          ...event.input !== void 0 ? { input: event.input } : {},\n          metadata\n        },\n        name: event.name,\n        parentSpanIds: parent,\n        spanAttributes: { type: \"tool\" /* TOOL */ },\n        spanId\n      });\n      if (!span) return;\n      span.log({\n        ...event.input !== void 0 ? { input: event.input } : {},\n        metadata\n      });\n      this.activeActions.set(event.idempotencyKey, {\n        span,\n        turnKey: turnKey3(event.scope.sessionId, event.scope.turnId)\n      });\n    });\n  }\n  async handleActionTerminal(event, context) {\n    await this.contain(\"action terminal\", async () => {\n      if (this.settledOperations.has(event.idempotencyKey)) {\n        context.state.set(void 0);\n        return;\n      }\n      const stored = storedSpan(context);\n      if (stored?.skip) {\n        context.state.set(void 0);\n        return;\n      }\n      const active = this.activeActions.get(event.idempotencyKey);\n      const end = finiteTimestamp(event.acceptedAtMs) ?? Date.now();\n      if (active) {\n        const span = active.span;\n        if (event.type === \"action.failed\") {\n          span.log({\n            error: event.error ?? new Error(event.errorCode ?? `Eve action ${event.outcome}`)\n          });\n        } else if (event.output.type === \"error\") {\n          span.log({\n            error: event.output.error ?? new Error(\"Eve action returned an error\")\n          });\n        } else {\n          span.log({ output: event.output.output });\n        }\n        span.end({ endTime: end / 1e3 });\n      } else {\n        const stored2 = storedSpan(context);\n        if (stored2 && \"exported\" in stored2) {\n          updateSpan({\n            exported: stored2.exported,\n            ...event.type === \"action.failed\" ? {\n              error: event.error ?? new Error(event.errorCode ?? `Eve action ${event.outcome}`)\n            } : event.output.type === \"error\" ? {\n              error: event.output.error ?? new Error(\"Eve action returned an error\")\n            } : { output: event.output.output },\n            metrics: { end: end / 1e3 }\n          });\n        }\n      }\n      this.settledOperations.set(event.idempotencyKey, true);\n      this.activeActions.delete(event.idempotencyKey);\n      context.state.set(void 0);\n    });\n  }\n  handleStepAttemptTerminal(event) {\n    void this.contain(\"step attempt terminal\", () => {\n      const keys = this.modelsByAttempt.get(event.scope.attemptId);\n      if (!keys) return;\n      for (const key of keys) {\n        const active = this.activeModels.get(key);\n        if (!active) continue;\n        if (event.type === \"step.attempt.failed\" && event.error !== void 0) {\n          active.span.log({ error: event.error });\n        }\n        active.span.end();\n        this.activeModels.delete(key);\n      }\n      this.modelsByAttempt.delete(event.scope.attemptId);\n    });\n  }\n  async parentForScope(scope) {\n    const key = turnKey3(scope.sessionId, scope.turnId);\n    const known = this.turns.get(key);\n    if (known) {\n      return { rootSpanId: known.rootSpanId, spanId: known.spanId };\n    }\n    const [{ spanId }, { spanId: rootSpanId }] = await Promise.all([\n      generateEveIds(\"turn\", turnIdempotencyKey(scope.sessionId, scope.turnId)),\n      generateEveIds(\n        \"turn\",\n        turnIdempotencyKey(\n          scope.rootSessionId ?? scope.sessionId,\n          scope.turnId\n        )\n      )\n    ]);\n    return { rootSpanId, spanId };\n  }\n  async startSpan(context, args, rootSpanId) {\n    const span = withCurrent(\n      NOOP_SPAN,\n      () => _internalStartSpanWithInitialMerge(\n        withSpanInstrumentationName(args ?? {}, INSTRUMENTATION_NAMES.EVE)\n      )\n    );\n    try {\n      context.state.set({\n        exported: await span.export(),\n        ...rootSpanId ? { rootSpanId } : {}\n      });\n    } catch (error) {\n      debugLogger.warn(\"Error exporting Eve provider span:\", error);\n    }\n    return span;\n  }\n  drainActionsForTurn(sessionId, turnId, error) {\n    const key = turnKey3(sessionId, turnId);\n    for (const [idempotencyKey, active] of this.activeActions) {\n      if (active.turnKey !== key) continue;\n      if (error !== void 0) active.span.log({ error });\n      active.span.end();\n      this.activeActions.delete(idempotencyKey);\n    }\n  }\n  forgetModel(attemptId, idempotencyKey) {\n    this.activeModels.delete(idempotencyKey);\n    const keys = this.modelsByAttempt.get(attemptId);\n    keys?.delete(idempotencyKey);\n    if (keys?.size === 0) this.modelsByAttempt.delete(attemptId);\n  }\n  spanMetadata(sessionId) {\n    return {\n      ...this.metadata ?? {},\n      \"eve.session_id\": sessionId\n    };\n  }\n  async contain(operation, fn) {\n    try {\n      await fn();\n    } catch (error) {\n      debugLogger.warn(`Error in Eve provider ${operation}:`, error);\n    }\n  }\n};\nfunction storedSpan(context) {\n  const value = context.state.get();\n  if (!isObject(value)) return void 0;\n  if (value[\"skip\"] === true) return { skip: true };\n  return typeof value[\"exported\"] === \"string\" ? {\n    exported: value[\"exported\"],\n    ...typeof value[\"rootSpanId\"] === \"string\" && value[\"rootSpanId\"].length > 0 ? { rootSpanId: value[\"rootSpanId\"] } : {}\n  } : void 0;\n}\nfunction modelOutput(event) {\n  const content = event.content ?? [];\n  let text = \"\";\n  const reasoning = [];\n  const toolCalls2 = [];\n  for (const part of content) {\n    if (!isObject(part)) {\n      continue;\n    }\n    if (part[\"type\"] === \"text\" && typeof part[\"text\"] === \"string\") {\n      text += part[\"text\"];\n    } else if (part[\"type\"] === \"reasoning\" && typeof part[\"text\"] === \"string\" && part[\"text\"].trim().length > 0) {\n      reasoning.push({ content: part[\"text\"] });\n    } else if (part[\"type\"] === \"tool-call\" && typeof part[\"toolName\"] === \"string\" && typeof part[\"callId\"] === \"string\") {\n      toolCalls2.push({\n        function: {\n          arguments: safeJsonStringify(part[\"input\"]),\n          name: part[\"toolName\"]\n        },\n        id: part[\"callId\"],\n        type: \"function\"\n      });\n    }\n  }\n  return [\n    {\n      finish_reason: normalizeFinishReason3(event.finishReason),\n      index: 0,\n      message: {\n        content: text || null,\n        ...reasoning.length > 0 ? { reasoning } : {},\n        role: \"assistant\",\n        ...toolCalls2.length > 0 ? { tool_calls: toolCalls2 } : {}\n      }\n    }\n  ];\n}\nfunction usageMetrics(usage) {\n  const promptTokens = nonNegativeNumber(usage?.inputTokens);\n  const completionTokens = nonNegativeNumber(usage?.outputTokens);\n  const cachedTokens = nonNegativeNumber(\n    usage?.inputTokenDetails?.cacheReadTokens\n  );\n  const cacheCreationTokens = nonNegativeNumber(\n    usage?.inputTokenDetails?.cacheWriteTokens\n  );\n  return {\n    ...promptTokens !== void 0 ? { prompt_tokens: promptTokens } : {},\n    ...completionTokens !== void 0 ? { completion_tokens: completionTokens } : {},\n    ...promptTokens !== void 0 && completionTokens !== void 0 ? { tokens: promptTokens + completionTokens } : {},\n    ...cachedTokens !== void 0 ? { prompt_cached_tokens: cachedTokens } : {},\n    ...cacheCreationTokens !== void 0 ? { prompt_cache_creation_tokens: cacheCreationTokens } : {}\n  };\n}\nfunction nonNegativeNumber(value) {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : void 0;\n}\nfunction finiteTimestamp(value) {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : void 0;\n}\nfunction normalizeFinishReason3(value) {\n  if (value === \"content-filter\") return \"content_filter\";\n  if (value === \"tool-calls\") return \"tool_calls\";\n  return value;\n}\nfunction safeJsonStringify(value) {\n  try {\n    return JSON.stringify(value) ?? \"null\";\n  } catch {\n    return \"null\";\n  }\n}\nfunction turnKey3(sessionId, turnId) {\n  return `${sessionId}:${turnId}`;\n}\nfunction turnIdempotencyKey(sessionId, turnId) {\n  return `turn:${sessionId}:${turnId}`;\n}\nfunction actionIdempotencyKey(sessionId, turnId, callId) {\n  return `action:${sessionId}:${turnId}:${callId}`;\n}\nfunction providerHandler(type, handler) {\n  return async (event, context) => {\n    try {\n      if (!isEveProviderEvent(event, type) || !isEveProviderContext(context)) {\n        debugLogger.warn(`Ignoring malformed Eve provider ${type} event`);\n        return;\n      }\n      await handler(event, context);\n    } catch (error) {\n      debugLogger.warn(`Error in Eve provider ${type}:`, error);\n    }\n  };\n}\nfunction isEveProviderEvent(event, type) {\n  if (!isObject(event) || event[\"type\"] !== type || typeof event[\"idempotencyKey\"] !== \"string\" || event[\"idempotencyKey\"].length === 0) {\n    return false;\n  }\n  if (type === \"turn.started\") {\n    const parentLineage = event[\"parentLineage\"];\n    const parentTraceContext = event[\"parentTraceContext\"];\n    return typeof event[\"rootSessionId\"] === \"string\" && typeof event[\"sessionId\"] === \"string\" && typeof event[\"turnId\"] === \"string\" && typeof event[\"sequence\"] === \"number\" && Number.isFinite(event[\"sequence\"]) && (parentLineage === void 0 || isEveProviderParentLineage(parentLineage)) && (parentTraceContext === void 0 || isEveProviderTraceContext(parentTraceContext));\n  }\n  if (type === \"turn.cancelled\" || type === \"turn.completed\" || type === \"turn.failed\") {\n    return typeof event[\"sessionId\"] === \"string\" && typeof event[\"turnId\"] === \"string\";\n  }\n  if (!isEveProviderScope(event[\"scope\"])) {\n    return false;\n  }\n  if (type === \"model.call.started\") {\n    const model = event[\"model\"];\n    return isObject(model) && typeof model[\"modelId\"] === \"string\" && typeof model[\"provider\"] === \"string\";\n  }\n  if (type === \"model.call.completed\") {\n    return typeof event[\"finishReason\"] === \"string\" && isObject(event[\"usage\"]) && (event[\"content\"] === void 0 || Array.isArray(event[\"content\"]));\n  }\n  if (type === \"model.call.failed\") {\n    return true;\n  }\n  if (type === \"action.started\") {\n    return typeof event[\"callId\"] === \"string\" && typeof event[\"name\"] === \"string\" && (event[\"kind\"] === \"load-skill\" || event[\"kind\"] === \"remote-agent-call\" || event[\"kind\"] === \"subagent-call\" || event[\"kind\"] === \"tool-call\");\n  }\n  if (type === \"action.completed\") {\n    const output = event[\"output\"];\n    return event[\"outcome\"] === \"completed\" && isObject(output) && (output[\"type\"] === \"result\" || output[\"type\"] === \"error\");\n  }\n  if (type === \"action.failed\") {\n    return event[\"outcome\"] === \"abandoned\" || event[\"outcome\"] === \"cancelled\" || event[\"outcome\"] === \"failed\" || event[\"outcome\"] === \"rejected\";\n  }\n  return type === \"step.attempt.completed\" || type === \"step.attempt.failed\";\n}\nfunction isEveProviderContext(value) {\n  if (!isObject(value) || !isObject(value[\"state\"])) {\n    return false;\n  }\n  return typeof value[\"state\"][\"get\"] === \"function\" && typeof value[\"state\"][\"set\"] === \"function\";\n}\nfunction isEveProviderScope(value) {\n  return isObject(value) && typeof value[\"attemptId\"] === \"string\" && typeof value[\"attemptIndex\"] === \"number\" && Number.isFinite(value[\"attemptIndex\"]) && typeof value[\"sessionId\"] === \"string\" && typeof value[\"stepIndex\"] === \"number\" && Number.isFinite(value[\"stepIndex\"]) && typeof value[\"turnId\"] === \"string\" && (value[\"rootSessionId\"] === void 0 || typeof value[\"rootSessionId\"] === \"string\");\n}\nfunction isEveProviderParentLineage(value) {\n  return isObject(value) && typeof value[\"callId\"] === \"string\" && typeof value[\"sessionId\"] === \"string\" && typeof value[\"turnId\"] === \"string\";\n}\nfunction isEveProviderTraceContext(value) {\n  return isObject(value) && typeof value[\"spanId\"] === \"string\" && value[\"spanId\"].length > 0 && typeof value[\"traceId\"] === \"string\" && value[\"traceId\"].length > 0;\n}\n\n// src/instrumentation/plugins/eve-instrumentation.ts\nvar EVE_INSTRUMENTATION_PROVIDER = /* @__PURE__ */ Symbol.for(\"eve.instrumentation.provider\");\nfunction braintrustEveInstrumentation(options) {\n  if (!options || typeof options !== \"object\") {\n    throw new TypeError(\n      \"braintrustEveInstrumentation requires an options object\"\n    );\n  }\n  if (\"defineState\" in options) {\n    return {\n      ...createLegacyEveInstrumentation(options),\n      [EVE_INSTRUMENTATION_PROVIDER]: true\n    };\n  }\n  return Object.assign(\n    /* @__PURE__ */ Object.create({ capture: \"content\" }),\n    createEveInstrumentationProvider(options),\n    { [EVE_INSTRUMENTATION_PROVIDER]: true }\n  );\n}\n\n// src/typed-instrumentation-helpers.ts\nvar TypedApplyProxy = Proxy;\n\n// src/wrappers/anthropic.ts\nfunction wrapAnthropic(anthropic) {\n  const au = anthropic;\n  if (au && typeof au === \"object\" && \"messages\" in au && typeof au.messages === \"object\" && au.messages && \"create\" in au.messages) {\n    return anthropicProxy(au);\n  }\n  console.warn(\"Unsupported Anthropic library. Not wrapping.\");\n  return anthropic;\n}\nfunction anthropicProxy(anthropic) {\n  const proxy = new Proxy(anthropic, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"beta\":\n          return target.beta ? betaProxy(target.beta, proxy) : target.beta;\n        case \"messages\":\n          return messagesProxy(target.messages);\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n  return proxy;\n}\nfunction betaProxy(beta, anthropic) {\n  return new Proxy(beta, {\n    get(target, prop, receiver) {\n      if (prop === \"messages\") {\n        return betaMessagesProxy(target.messages, anthropic);\n      }\n      if (prop === \"sessions\") {\n        return target.sessions ? betaSessionsProxy(target.sessions) : target.sessions;\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction betaSessionsProxy(sessions) {\n  return new Proxy(sessions, {\n    get(target, prop, receiver) {\n      if (prop === \"events\") {\n        return betaSessionEventsProxy(target.events);\n      }\n      if (prop === \"threads\") {\n        return target.threads ? betaSessionThreadsProxy(target.threads) : target.threads;\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction betaSessionEventsProxy(events) {\n  return new Proxy(events, {\n    get(target, prop, receiver) {\n      if (prop === \"stream\") {\n        return new TypedApplyProxy(target.stream, {\n          apply(stream, thisArg, argArray) {\n            return anthropicChannels.betaSessionsEventsStream.tracePromise(\n              () => Reflect.apply(stream, thisArg, argArray),\n              { arguments: argArray }\n            );\n          }\n        });\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction betaSessionThreadsProxy(threads) {\n  return new Proxy(threads, {\n    get(target, prop, receiver) {\n      if (prop === \"events\") {\n        return betaSessionThreadEventsProxy(target.events);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction betaSessionThreadEventsProxy(events) {\n  return new Proxy(events, {\n    get(target, prop, receiver) {\n      if (prop === \"stream\") {\n        return new TypedApplyProxy(target.stream, {\n          apply(stream, thisArg, argArray) {\n            return anthropicChannels.betaSessionsThreadsEventsStream.tracePromise(\n              () => Reflect.apply(stream, thisArg, argArray),\n              { arguments: argArray }\n            );\n          }\n        });\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction messagesProxy(messages) {\n  return new Proxy(messages, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return createProxy(target.create, anthropicChannels.messagesCreate);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction betaMessagesProxy(messages, anthropic) {\n  return new Proxy(messages, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return createProxy(target.create, anthropicChannels.betaMessagesCreate);\n      }\n      if (prop === \"toolRunner\") {\n        if (typeof target.toolRunner !== \"function\") {\n          return Reflect.get(target, prop, receiver);\n        }\n        return toolRunnerProxy(\n          target.toolRunner,\n          anthropic,\n          anthropicChannels.betaMessagesToolRunner\n        );\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction createProxy(create, channel2) {\n  return new TypedApplyProxy(create, {\n    apply(target, thisArg, argArray) {\n      return channel2.tracePromise(\n        () => Reflect.apply(target, thisArg, argArray),\n        {\n          arguments: argArray\n        }\n      );\n    }\n  });\n}\nfunction toolRunnerProxy(toolRunner, anthropic, channel2) {\n  return new TypedApplyProxy(toolRunner, {\n    apply(target, thisArg, argArray) {\n      const invocationTarget = thisArg && typeof thisArg === \"object\" ? new Proxy(thisArg, {\n        get(currentTarget, prop, receiver) {\n          if (prop === \"_client\") {\n            return anthropic;\n          }\n          return Reflect.get(currentTarget, prop, receiver);\n        }\n      }) : { _client: anthropic };\n      return channel2.traceSync(\n        () => Reflect.apply(target, invocationTarget, argArray),\n        {\n          arguments: argArray\n        }\n      );\n    }\n  });\n}\n\n// src/wrappers/mastra.ts\nvar MASTRA_BRAINTRUST_EXPORTER_NAME = \"braintrust\";\nvar SPAN_TYPE_MAP = {\n  agent_run: \"task\" /* TASK */,\n  model_generation: \"llm\" /* LLM */,\n  model_step: \"llm\" /* LLM */,\n  model_chunk: \"llm\" /* LLM */,\n  tool_call: \"tool\" /* TOOL */,\n  mcp_tool_call: \"tool\" /* TOOL */,\n  workflow_run: \"task\" /* TASK */,\n  workflow_step: \"function\" /* FUNCTION */,\n  workflow_conditional: \"function\" /* FUNCTION */,\n  workflow_conditional_eval: \"function\" /* FUNCTION */,\n  workflow_parallel: \"function\" /* FUNCTION */,\n  workflow_loop: \"function\" /* FUNCTION */,\n  workflow_sleep: \"function\" /* FUNCTION */,\n  workflow_wait_event: \"function\" /* FUNCTION */,\n  memory_operation: \"function\" /* FUNCTION */,\n  workspace_action: \"function\" /* FUNCTION */,\n  rag_ingestion: \"task\" /* TASK */,\n  rag_embedding: \"llm\" /* LLM */,\n  rag_vector_operation: \"function\" /* FUNCTION */,\n  rag_action: \"function\" /* FUNCTION */,\n  graph_action: \"function\" /* FUNCTION */,\n  scorer_run: \"score\" /* SCORE */,\n  scorer_step: \"score\" /* SCORE */,\n  processor_run: \"function\" /* FUNCTION */,\n  generic: \"function\" /* FUNCTION */\n};\nfunction spanTypeFor(mastraType) {\n  return SPAN_TYPE_MAP[mastraType] ?? \"function\" /* FUNCTION */;\n}\nfunction epochSeconds(value) {\n  if (value === void 0) return void 0;\n  const ms = value instanceof Date ? value.getTime() : typeof value === \"number\" ? value : Date.parse(value);\n  return Number.isFinite(ms) ? ms / 1e3 : void 0;\n}\nfunction modelMetrics(attributes) {\n  if (!isObject(attributes)) return void 0;\n  const usage = isObject(attributes.usage) ? attributes.usage : void 0;\n  if (!usage) return void 0;\n  const out = {};\n  if (typeof usage.inputTokens === \"number\")\n    out.prompt_tokens = usage.inputTokens;\n  if (typeof usage.outputTokens === \"number\")\n    out.completion_tokens = usage.outputTokens;\n  if (typeof usage.inputTokens === \"number\" && typeof usage.outputTokens === \"number\") {\n    out.tokens = usage.inputTokens + usage.outputTokens;\n  }\n  const inputDetails = isObject(usage.inputDetails) ? usage.inputDetails : void 0;\n  const outputDetails = isObject(usage.outputDetails) ? usage.outputDetails : void 0;\n  if (inputDetails && typeof inputDetails.cacheRead === \"number\") {\n    out.prompt_cached_tokens = inputDetails.cacheRead;\n  }\n  if (inputDetails && typeof inputDetails.cacheWrite === \"number\") {\n    out.prompt_cache_creation_tokens = inputDetails.cacheWrite;\n  }\n  if (outputDetails && typeof outputDetails.reasoning === \"number\") {\n    out.completion_reasoning_tokens = outputDetails.reasoning;\n  }\n  return Object.keys(out).length > 0 ? out : void 0;\n}\nfunction timeToFirstTokenSeconds(attributes, spanStartSeconds) {\n  if (!isObject(attributes)) return void 0;\n  if (spanStartSeconds === void 0) return void 0;\n  const raw = attributes.completionStartTime;\n  const completionStart = raw instanceof Date || typeof raw === \"string\" || typeof raw === \"number\" ? epochSeconds(raw) : void 0;\n  if (completionStart === void 0) return void 0;\n  const ttft = completionStart - spanStartSeconds;\n  return Number.isFinite(ttft) && ttft >= 0 ? ttft : void 0;\n}\nfunction buildMetadata(exported) {\n  const out = {};\n  if (exported.entityId !== void 0) out.entity_id = exported.entityId;\n  if (exported.entityName !== void 0) out.entity_name = exported.entityName;\n  if (exported.entityType !== void 0) out.entity_type = exported.entityType;\n  if (exported.metadata && isObject(exported.metadata)) {\n    Object.assign(out, exported.metadata);\n  }\n  if (exported.attributes && isObject(exported.attributes)) {\n    for (const [key, value] of Object.entries(exported.attributes)) {\n      if (key === \"usage\") continue;\n      if (value !== void 0) out[key] = value;\n    }\n  }\n  if (exported.tags && exported.tags.length > 0) {\n    out.tags = exported.tags;\n  }\n  if (exported.requestContext && isObject(exported.requestContext)) {\n    out.request_context = exported.requestContext;\n  }\n  return out;\n}\nvar BraintrustObservabilityExporter = class {\n  name = MASTRA_BRAINTRUST_EXPORTER_NAME;\n  spans = /* @__PURE__ */ new Map();\n  // Captured at the first SPAN_STARTED event. Mastra's observability bus may\n  // dispatch later events outside the user's AsyncLocalStorage context, where\n  // `currentSpan()` returns NOOP_SPAN — which would make our `startSpan()`\n  // calls go to a no-op logger and silently drop. Anchoring on the parent\n  // we observe while still in-context keeps the whole Mastra subtree under\n  // the user's traced scenario.\n  capturedParent;\n  constructor() {\n    _internalSetInitialState();\n  }\n  async exportTracingEvent(event) {\n    const exported = event.exportedSpan;\n    if (exported.isInternal === true) return;\n    try {\n      switch (event.type) {\n        case \"span_started\":\n          this.onStart(exported);\n          break;\n        case \"span_updated\":\n          this.onUpdate(exported);\n          break;\n        case \"span_ended\":\n          this.onEnd(exported);\n          break;\n      }\n    } catch (err) {\n      logExporterError(err);\n    }\n  }\n  async flush() {\n    const state = _internalGetGlobalState();\n    if (state) {\n      await state.bgLogger().flush();\n    }\n  }\n  async shutdown() {\n    await this.flush();\n    this.spans.clear();\n  }\n  onStart(exported) {\n    if (this.spans.has(exported.id)) return;\n    const args = withSpanInstrumentationName(\n      {\n        name: exported.name,\n        spanAttributes: { type: spanTypeFor(exported.type) },\n        startTime: epochSeconds(exported.startTime),\n        // Use the Mastra span id as the Braintrust row id so that\n        // `logFeedback({ id: <mastra span id> })` (and Mastra's score events)\n        // attach to the right row. Without this, `SpanImpl` auto-generates a\n        // row id (`this._id = eventId ?? idGenerator.getSpanId()`) that no\n        // external caller could know.\n        event: { id: exported.id }\n      },\n      INSTRUMENTATION_NAMES.MASTRA\n    );\n    const parentRecord = exported.parentSpanId ? this.spans.get(exported.parentSpanId) : void 0;\n    if (!this.capturedParent) {\n      const probe = currentSpan();\n      if (probe && probe.spanId) {\n        this.capturedParent = probe;\n      }\n    }\n    const span = parentRecord ? parentRecord.span.startSpan(args) : this.capturedParent ? this.capturedParent.startSpan(args) : startSpan(args);\n    const record = { span, hasLoggedInput: false };\n    this.logPayload(record, exported);\n    this.spans.set(exported.id, record);\n    if (exported.isEvent === true) {\n      span.end({ endTime: args.startTime });\n      this.spans.delete(exported.id);\n    }\n  }\n  onUpdate(exported) {\n    const record = this.spans.get(exported.id);\n    if (!record) return;\n    this.logPayload(record, exported);\n  }\n  onEnd(exported) {\n    const record = this.spans.get(exported.id);\n    if (!record) return;\n    this.logPayload(record, exported);\n    if (exported.errorInfo) {\n      record.span.log({\n        error: exported.errorInfo.message || exported.errorInfo.name || \"Unknown Mastra error\"\n      });\n    }\n    record.span.end({ endTime: epochSeconds(exported.endTime) });\n    this.spans.delete(exported.id);\n  }\n  logPayload(record, exported) {\n    const event = {};\n    if (exported.input !== void 0) {\n      event.input = exported.input;\n      record.hasLoggedInput = true;\n    }\n    if (exported.output !== void 0) {\n      event.output = exported.output;\n    }\n    const metadata = buildMetadata(exported);\n    if (Object.keys(metadata).length > 0) {\n      event.metadata = metadata;\n    }\n    const metrics = modelMetrics(exported.attributes);\n    const ttft = timeToFirstTokenSeconds(\n      exported.attributes,\n      epochSeconds(exported.startTime)\n    );\n    if (metrics || ttft !== void 0) {\n      event.metrics = {\n        ...metrics ?? {},\n        ...ttft !== void 0 ? { time_to_first_token: ttft } : {}\n      };\n    }\n    if (Object.keys(event).length > 0) {\n      record.span.log(event);\n    }\n  }\n};\nfunction logExporterError(err) {\n  debugLogger.warn(\"Mastra exporter failure:\", err);\n}\nfunction wrapMastraAgent(agent, _options) {\n  return agent;\n}\n\n// src/wrappers/claude-agent-sdk/claude-agent-sdk.ts\nfunction wrapClaudeAgentSDK(sdk) {\n  const s = sdk;\n  if (s && typeof s === \"object\" && \"query\" in s && typeof s.query === \"function\") {\n    return claudeAgentSDKProxy(s);\n  }\n  console.warn(\"Unsupported Claude Agent SDK. Not wrapping.\");\n  return sdk;\n}\nfunction wrapClaudeAgentQuery(queryFn, defaultThis) {\n  const proxy = new Proxy(queryFn, {\n    apply(target, thisArg, argArray) {\n      const params = argArray[0] ?? {};\n      const wrappedParams = {\n        ...params,\n        options: {\n          ...params.options ?? {},\n          [CLAUDE_AGENT_SDK_SKIP_LOCAL_TOOL_HOOKS_OPTION]: true\n        }\n      };\n      const invocationTarget = thisArg === proxy || thisArg === void 0 ? defaultThis ?? thisArg : thisArg;\n      return claudeAgentSDKChannels.query.invoke(\n        target,\n        invocationTarget,\n        [wrappedParams],\n        {}\n      );\n    }\n  });\n  return proxy;\n}\nfunction wrapClaudeAgentTool(toolFn, localToolMetadataByTool, defaultThis) {\n  const proxy = new Proxy(toolFn, {\n    apply(target, thisArg, argArray) {\n      const invocationTarget = thisArg === proxy || thisArg === void 0 ? defaultThis ?? thisArg : thisArg;\n      const wrappedArgs = [...argArray];\n      const toolName = wrappedArgs[0];\n      let handlerIndex = -1;\n      for (let i = wrappedArgs.length - 1; i >= 0; i -= 1) {\n        if (typeof wrappedArgs[i] === \"function\") {\n          handlerIndex = i;\n          break;\n        }\n      }\n      if (typeof toolName !== \"string\" || handlerIndex === -1) {\n        return Reflect.apply(target, invocationTarget, wrappedArgs);\n      }\n      const localToolMetadata = { toolName };\n      const originalHandler = wrappedArgs[handlerIndex];\n      wrappedArgs[handlerIndex] = wrapLocalClaudeToolHandler(\n        originalHandler,\n        () => localToolMetadata\n      );\n      const wrappedTool = Reflect.apply(target, invocationTarget, wrappedArgs);\n      if (wrappedTool && typeof wrappedTool === \"object\") {\n        localToolMetadataByTool.set(wrappedTool, localToolMetadata);\n      }\n      return wrappedTool;\n    }\n  });\n  return proxy;\n}\nfunction wrapCreateSdkMcpServer(createSdkMcpServerFn, localToolMetadataByTool, defaultThis) {\n  const proxy = new Proxy(createSdkMcpServerFn, {\n    apply(target, thisArg, argArray) {\n      const invocationTarget = thisArg === proxy || thisArg === void 0 ? defaultThis ?? thisArg : thisArg;\n      const config = argArray[0];\n      const serverName = config?.name;\n      if (typeof serverName === \"string\" && Array.isArray(config?.tools)) {\n        for (const tool of config.tools) {\n          if (!tool || typeof tool !== \"object\") {\n            continue;\n          }\n          const metadata = localToolMetadataByTool.get(tool);\n          if (metadata) {\n            metadata.serverName = serverName;\n          }\n        }\n      }\n      return Reflect.apply(target, invocationTarget, argArray);\n    }\n  });\n  return proxy;\n}\nfunction claudeAgentSDKProxy(sdk) {\n  const cache = /* @__PURE__ */ new Map();\n  const localToolMetadataByTool = /* @__PURE__ */ new WeakMap();\n  return new Proxy(sdk, {\n    get(target, prop, receiver) {\n      if (cache.has(prop)) {\n        return cache.get(prop);\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"query\" && typeof value === \"function\") {\n        const wrappedQuery = wrapClaudeAgentQuery(target.query, target);\n        cache.set(prop, wrappedQuery);\n        return wrappedQuery;\n      }\n      if (prop === \"tool\" && typeof value === \"function\") {\n        const wrappedTool = wrapClaudeAgentTool(\n          target.tool,\n          localToolMetadataByTool,\n          target\n        );\n        cache.set(prop, wrappedTool);\n        return wrappedTool;\n      }\n      if (prop === \"createSdkMcpServer\" && typeof value === \"function\") {\n        const wrappedCreateSdkMcpServer = wrapCreateSdkMcpServer(\n          value,\n          localToolMetadataByTool,\n          target\n        );\n        cache.set(prop, wrappedCreateSdkMcpServer);\n        return wrappedCreateSdkMcpServer;\n      }\n      if (typeof value === \"function\") {\n        const bound = value.bind(target);\n        cache.set(prop, bound);\n        return bound;\n      }\n      return value;\n    }\n  });\n}\n\n// src/wrappers/cloudflare-think.ts\nvar WRAPPED_THINK = /* @__PURE__ */ Symbol.for(\"braintrust.cloudflare-think.wrapped\");\nfunction wrapCloudflareThink(sdk) {\n  if (!sdk || typeof sdk !== \"object\") {\n    return sdk;\n  }\n  const thinkModule = sdk;\n  if (typeof thinkModule.Think !== \"function\") {\n    return sdk;\n  }\n  patchThinkClass(thinkModule.Think);\n  return sdk;\n}\nfunction patchThinkClass(Think) {\n  const prototype = Think.prototype;\n  if (!prototype || prototype[WRAPPED_THINK]) {\n    return;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(\n    prototype,\n    \"_runInferenceLoop\"\n  );\n  if (!descriptor || typeof descriptor.value !== \"function\") {\n    return;\n  }\n  const original = descriptor.value;\n  Object.defineProperty(prototype, \"_runInferenceLoop\", {\n    ...descriptor,\n    value: function wrappedCloudflareThinkRunInferenceLoop(input) {\n      const args = [input];\n      return cloudflareThinkChannels.runInferenceLoop.tracePromise(\n        () => Reflect.apply(original, this, args),\n        {\n          arguments: args,\n          self: this\n        }\n      );\n    }\n  });\n  Object.defineProperty(prototype, WRAPPED_THINK, {\n    configurable: false,\n    enumerable: false,\n    value: true\n  });\n}\n\n// src/wrappers/openai-codex.ts\nvar WRAPPED_CLIENT = /* @__PURE__ */ Symbol.for(\"braintrust.openai-codex.wrapped-client\");\nvar WRAPPED_THREAD = /* @__PURE__ */ Symbol.for(\"braintrust.openai-codex.wrapped-thread\");\nfunction wrapOpenAICodexSDK(sdk) {\n  if (!sdk || typeof sdk !== \"object\") {\n    return sdk;\n  }\n  const maybeSDK = sdk;\n  if (hasCodexClientShape(maybeSDK)) {\n    return wrapCodexClient(maybeSDK);\n  }\n  if (!maybeSDK.Codex || typeof maybeSDK.Codex !== \"function\") {\n    console.warn(\"Unsupported OpenAI Codex SDK. Not wrapping.\");\n    return sdk;\n  }\n  const target = isModuleNamespace2(sdk) ? Object.setPrototypeOf({}, sdk) : sdk;\n  return new Proxy(target, {\n    get(target2, prop, receiver) {\n      const value = Reflect.get(target2, prop, receiver);\n      if (prop === \"Codex\" && typeof value === \"function\") {\n        return wrapCodexClass(value);\n      }\n      if (typeof value === \"function\") {\n        return value.bind(target2);\n      }\n      return value;\n    }\n  });\n}\nfunction hasCodexClientShape(value) {\n  return typeof value.startThread === \"function\" && typeof value.resumeThread === \"function\";\n}\nfunction isModuleNamespace2(obj) {\n  if (!obj || typeof obj !== \"object\") {\n    return false;\n  }\n  if (obj.constructor?.name === \"Module\") {\n    return true;\n  }\n  const keys = Object.keys(obj);\n  if (keys.length === 0) {\n    return false;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(obj, keys[0]);\n  return descriptor ? !descriptor.configurable && !descriptor.writable : false;\n}\nfunction wrapCodexClass(Codex) {\n  return new Proxy(Codex, {\n    construct(target, args, newTarget) {\n      return wrapCodexClient(Reflect.construct(target, args, newTarget));\n    },\n    get(target, prop, receiver) {\n      const value = Reflect.get(target, prop, receiver);\n      if (typeof value === \"function\") {\n        return value.bind(target);\n      }\n      return value;\n    }\n  });\n}\nfunction wrapCodexClient(client) {\n  if (!client || typeof client !== \"object\") {\n    return client;\n  }\n  if (client[WRAPPED_CLIENT]) {\n    return client;\n  }\n  return new Proxy(client, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_CLIENT) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"startThread\" && typeof value === \"function\") {\n        return function(options) {\n          return wrapCodexThread(Reflect.apply(value, target, [options]));\n        };\n      }\n      if (prop === \"resumeThread\" && typeof value === \"function\") {\n        return function(id, options) {\n          return wrapCodexThread(Reflect.apply(value, target, [id, options]));\n        };\n      }\n      if (typeof value === \"function\") {\n        return value.bind(target);\n      }\n      return value;\n    }\n  });\n}\nfunction wrapCodexThread(thread) {\n  if (!thread || typeof thread !== \"object\") {\n    return thread;\n  }\n  if (thread[WRAPPED_THREAD]) {\n    return thread;\n  }\n  return new Proxy(thread, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_THREAD) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"run\" && typeof value === \"function\") {\n        return function(input, turnOptions) {\n          const args = [input, turnOptions];\n          return openAICodexChannels.run.tracePromise(\n            () => Reflect.apply(value, target, args),\n            {\n              arguments: args,\n              operation: \"run\",\n              thread: target\n            }\n          );\n        };\n      }\n      if (prop === \"runStreamed\" && typeof value === \"function\") {\n        return function(input, turnOptions) {\n          const args = [input, turnOptions];\n          return openAICodexChannels.runStreamed.tracePromise(\n            () => Reflect.apply(value, target, args),\n            {\n              arguments: args,\n              operation: \"runStreamed\",\n              thread: target\n            }\n          );\n        };\n      }\n      if (typeof value === \"function\") {\n        return value.bind(target);\n      }\n      return value;\n    }\n  });\n}\n\n// src/wrappers/cursor-sdk.ts\nvar WRAPPED_AGENT2 = /* @__PURE__ */ Symbol.for(\"braintrust.cursor-sdk.wrapped-agent\");\nfunction wrapCursorSDK(sdk) {\n  if (!sdk || typeof sdk !== \"object\") {\n    return sdk;\n  }\n  const maybeSDK = sdk;\n  if (!maybeSDK.Agent || typeof maybeSDK.Agent !== \"function\") {\n    console.warn(\"Unsupported Cursor SDK. Not wrapping.\");\n    return sdk;\n  }\n  const target = isModuleNamespace3(sdk) ? Object.setPrototypeOf({}, sdk) : sdk;\n  return new Proxy(target, {\n    get(target2, prop, receiver) {\n      const value = Reflect.get(target2, prop, receiver);\n      if (prop === \"Agent\" && typeof value === \"function\") {\n        return wrapCursorAgentClass(value);\n      }\n      if (typeof value === \"function\") {\n        return value.bind(target2);\n      }\n      return value;\n    }\n  });\n}\nfunction isModuleNamespace3(obj) {\n  if (!obj || typeof obj !== \"object\") {\n    return false;\n  }\n  if (obj.constructor?.name === \"Module\") {\n    return true;\n  }\n  const keys = Object.keys(obj);\n  if (keys.length === 0) {\n    return false;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(obj, keys[0]);\n  return descriptor ? !descriptor.configurable && !descriptor.writable : false;\n}\nfunction wrapCursorAgentClass(Agent2) {\n  const cache = /* @__PURE__ */ new Map();\n  return new Proxy(Agent2, {\n    get(target, prop, receiver) {\n      if (cache.has(prop)) {\n        return cache.get(prop);\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"create\" && typeof value === \"function\") {\n        const wrapped = async function(options) {\n          const args = [options];\n          return cursorSDKChannels.create.tracePromise(\n            async () => wrapCursorAgent(await Reflect.apply(value, target, args)),\n            { arguments: args }\n          );\n        };\n        cache.set(prop, wrapped);\n        return wrapped;\n      }\n      if (prop === \"resume\" && typeof value === \"function\") {\n        const wrapped = async function(agentId, options) {\n          const args = [agentId, options];\n          return cursorSDKChannels.resume.tracePromise(\n            async () => wrapCursorAgent(await Reflect.apply(value, target, args)),\n            { arguments: args }\n          );\n        };\n        cache.set(prop, wrapped);\n        return wrapped;\n      }\n      if (prop === \"prompt\" && typeof value === \"function\") {\n        const wrapped = async function(message, options) {\n          const args = [message, options];\n          return cursorSDKChannels.prompt.tracePromise(\n            () => Reflect.apply(value, target, args),\n            { arguments: args }\n          );\n        };\n        cache.set(prop, wrapped);\n        return wrapped;\n      }\n      if (typeof value === \"function\") {\n        const bound = value.bind(target);\n        cache.set(prop, bound);\n        return bound;\n      }\n      return value;\n    }\n  });\n}\nfunction wrapCursorAgent(agent) {\n  if (!agent || typeof agent !== \"object\") {\n    return agent;\n  }\n  if (agent[WRAPPED_AGENT2]) {\n    return agent;\n  }\n  const proxy = new Proxy(agent, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_AGENT2) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"send\" && typeof value === \"function\") {\n        return function(message, options) {\n          const args = [message, options];\n          return cursorSDKChannels.send.tracePromise(\n            () => Reflect.apply(value, target, args),\n            {\n              agent: target,\n              arguments: args,\n              operation: \"send\"\n            }\n          );\n        };\n      }\n      if (typeof value === \"function\") {\n        return value.bind(target);\n      }\n      return value;\n    }\n  });\n  return proxy;\n}\n\n// src/wrappers/pi-coding-agent.ts\nvar WRAPPED_PROMPT = /* @__PURE__ */ Symbol.for(\"braintrust.pi-coding-agent.wrapped-prompt\");\nfunction wrapPiCodingAgentSDK(sdk) {\n  if (!sdk || typeof sdk !== \"object\") {\n    return sdk;\n  }\n  const maybeSDK = sdk;\n  if (!maybeSDK.AgentSession || typeof maybeSDK.AgentSession !== \"function\") {\n    console.warn(\"Unsupported Pi Coding Agent SDK. Not wrapping.\");\n    return sdk;\n  }\n  patchAgentSessionClass(\n    maybeSDK.AgentSession\n  );\n  return sdk;\n}\nfunction patchAgentSessionClass(AgentSession) {\n  const prototype = AgentSession.prototype;\n  if (!prototype || prototype[WRAPPED_PROMPT]) {\n    return;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(prototype, \"prompt\");\n  if (!descriptor || typeof descriptor.value !== \"function\") {\n    console.warn(\"Unsupported Pi Coding Agent SDK. Not wrapping.\");\n    return;\n  }\n  const originalPrompt = descriptor.value;\n  Object.defineProperty(prototype, \"prompt\", {\n    ...descriptor,\n    value: function wrappedPiCodingAgentPrompt(text, options) {\n      const args = [text, options];\n      return piCodingAgentChannels.prompt.invoke(originalPrompt, this, args, {\n        session: this\n      });\n    }\n  });\n  Object.defineProperty(prototype, WRAPPED_PROMPT, {\n    configurable: false,\n    enumerable: false,\n    value: true\n  });\n}\n\n// src/wrappers/cloudflare-agent.ts\nvar WRAPPED_RUN_AGENT_TOOL = /* @__PURE__ */ Symbol.for(\n  \"braintrust.cloudflare-agents.wrapped-run-agent-tool\"\n);\nfunction wrapCloudflareAgent(Agent2) {\n  if (typeof Agent2 !== \"function\") {\n    warnUnsupportedAgent();\n    return Agent2;\n  }\n  const prototypeDescriptor = Object.getOwnPropertyDescriptor(\n    Agent2,\n    \"prototype\"\n  );\n  const prototype = prototypeDescriptor && \"value\" in prototypeDescriptor ? prototypeDescriptor.value : void 0;\n  if (!isObjectLike3(prototype)) {\n    warnUnsupportedAgent();\n    return Agent2;\n  }\n  if (ownValue4(prototype, WRAPPED_RUN_AGENT_TOOL) === true) {\n    return Agent2;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(prototype, \"runAgentTool\");\n  if (!descriptor || typeof descriptor.value !== \"function\") {\n    warnUnsupportedAgent();\n    return Agent2;\n  }\n  const originalRunAgentTool = descriptor.value;\n  Object.defineProperty(prototype, \"runAgentTool\", {\n    ...descriptor,\n    value: function wrappedRunAgentTool(...args) {\n      const options = args[1];\n      if (ownValue4(options, \"detached\")) {\n        return Reflect.apply(originalRunAgentTool, this, args);\n      }\n      return cloudflareAgentsChannels.runAgentTool.tracePromise(\n        () => Reflect.apply(originalRunAgentTool, this, args),\n        { arguments: args, self: this }\n      );\n    }\n  });\n  Object.defineProperty(prototype, WRAPPED_RUN_AGENT_TOOL, {\n    configurable: false,\n    enumerable: false,\n    value: true\n  });\n  return Agent2;\n}\nfunction ownValue4(value, key) {\n  if (!isObjectLike3(value)) {\n    return void 0;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(value, key);\n  return descriptor && \"value\" in descriptor ? descriptor.value : void 0;\n}\nfunction isObjectLike3(value) {\n  return typeof value === \"object\" && value !== null || typeof value === \"function\";\n}\nfunction warnUnsupportedAgent() {\n  debugLogger.warn(\"Unsupported Cloudflare Agents Agent class. Not wrapping.\");\n}\n\n// src/wrappers/strands-agent-sdk.ts\nvar WRAPPED_CLASS = /* @__PURE__ */ Symbol.for(\"braintrust.strands-agent-sdk.wrapped-class\");\nvar WRAPPED_INSTANCE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.strands-agent-sdk.wrapped-instance\"\n);\nfunction wrapStrandsAgentSDK(sdk) {\n  if (!sdk || typeof sdk !== \"object\") {\n    return sdk;\n  }\n  const maybeSDK = sdk;\n  if (typeof maybeSDK.Agent !== \"function\" && typeof maybeSDK.Graph !== \"function\" && typeof maybeSDK.Swarm !== \"function\") {\n    console.warn(\"Unsupported Strands Agent SDK. Not wrapping.\");\n    return sdk;\n  }\n  const target = isModuleNamespace4(sdk) ? Object.setPrototypeOf({}, sdk) : sdk;\n  return new Proxy(target, {\n    get(target2, prop, receiver) {\n      const value = Reflect.get(target2, prop, receiver);\n      if (prop === \"Agent\" && typeof value === \"function\") {\n        return wrapAgentClass2(value);\n      }\n      if (prop === \"Graph\" && typeof value === \"function\") {\n        return wrapMultiAgentClass(\n          value,\n          \"graph\"\n        );\n      }\n      if (prop === \"Swarm\" && typeof value === \"function\") {\n        return wrapMultiAgentClass(\n          value,\n          \"swarm\"\n        );\n      }\n      return value;\n    }\n  });\n}\nfunction isModuleNamespace4(obj) {\n  if (!obj || typeof obj !== \"object\") {\n    return false;\n  }\n  if (obj.constructor?.name === \"Module\") {\n    return true;\n  }\n  const keys = Object.keys(obj);\n  if (keys.length === 0) {\n    return false;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(obj, keys[0]);\n  return descriptor ? !descriptor.configurable && !descriptor.writable : false;\n}\nfunction wrapAgentClass2(AgentClass) {\n  if (AgentClass[WRAPPED_CLASS]) {\n    return AgentClass;\n  }\n  return new Proxy(AgentClass, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_CLASS) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    },\n    construct(target, args, newTarget) {\n      const instance = Reflect.construct(target, args, newTarget);\n      return wrapAgentInstance(instance);\n    }\n  });\n}\nfunction wrapMultiAgentClass(MultiAgentClass, kind) {\n  if (MultiAgentClass[WRAPPED_CLASS]) {\n    return MultiAgentClass;\n  }\n  return new Proxy(MultiAgentClass, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_CLASS) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    },\n    construct(target, args, newTarget) {\n      const instance = Reflect.construct(target, args, newTarget);\n      return wrapMultiAgentInstance(instance, kind);\n    }\n  });\n}\nfunction wrapAgentInstance(agent) {\n  if (!agent || typeof agent !== \"object\") {\n    return agent;\n  }\n  if (agent[WRAPPED_INSTANCE]) {\n    return agent;\n  }\n  const proxy = new Proxy(agent, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_INSTANCE) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"stream\" && typeof value === \"function\") {\n        return function(args, options) {\n          const callArgs = [args, options];\n          return strandsAgentSDKChannels.agentStream.invoke(\n            value,\n            target,\n            callArgs,\n            { agent: proxy }\n          );\n        };\n      }\n      if (prop === \"invoke\" && typeof value === \"function\") {\n        return async function(args, options) {\n          return consumeAsyncGenerator(proxy.stream(args, options));\n        };\n      }\n      return typeof value === \"function\" ? value.bind(target) : value;\n    }\n  });\n  return proxy;\n}\nfunction wrapMultiAgentInstance(orchestrator, kind) {\n  if (!orchestrator || typeof orchestrator !== \"object\") {\n    return orchestrator;\n  }\n  if (orchestrator[WRAPPED_INSTANCE]) {\n    return orchestrator;\n  }\n  const proxy = new Proxy(orchestrator, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_INSTANCE) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"stream\" && typeof value === \"function\") {\n        return function(input, options) {\n          const callArgs = [input, options];\n          const channel2 = kind === \"graph\" ? strandsAgentSDKChannels.graphStream : strandsAgentSDKChannels.swarmStream;\n          return channel2.invoke(\n            value,\n            target,\n            callArgs,\n            {\n              orchestrator: proxy\n            }\n          );\n        };\n      }\n      if (prop === \"invoke\" && typeof value === \"function\") {\n        return async function(input, options) {\n          return consumeAsyncGenerator(proxy.stream(input, options));\n        };\n      }\n      return typeof value === \"function\" ? value.bind(target) : value;\n    }\n  });\n  return proxy;\n}\nasync function consumeAsyncGenerator(generator) {\n  let result = await generator.next();\n  while (!result.done) {\n    result = await generator.next();\n  }\n  return result.value;\n}\n\n// src/wrappers/cloudflare-ai-chat.ts\nvar wrappedClasses = /* @__PURE__ */ new WeakMap();\nfunction wrapCloudflareAIChat(module2) {\n  if (!module2 || typeof module2 !== \"object\") {\n    return module2;\n  }\n  const candidate = module2;\n  let AIChatAgent;\n  try {\n    AIChatAgent = Reflect.get(candidate, \"AIChatAgent\");\n  } catch (error) {\n    debugLogger.debug(\"Failed to inspect @cloudflare/ai-chat module:\", error);\n    return module2;\n  }\n  if (typeof AIChatAgent !== \"function\") {\n    debugLogger.warn(\n      \"Unsupported @cloudflare/ai-chat module. AIChatAgent was not found; not wrapping.\"\n    );\n    return module2;\n  }\n  const target = isModuleNamespace5(module2) ? Object.setPrototypeOf({}, module2) : candidate;\n  return new Proxy(target, {\n    get(target2, property, receiver) {\n      const value = Reflect.get(target2, property, receiver);\n      if (property === \"AIChatAgent\" && typeof value === \"function\") {\n        return wrapAIChatAgentClass(\n          value\n        );\n      }\n      return value;\n    }\n  });\n}\nfunction wrapAIChatAgentClass(AgentClass) {\n  const cached = wrappedClasses.get(AgentClass);\n  if (cached) {\n    return cached;\n  }\n  const wrapped = new Proxy(AgentClass, {\n    get(target, property) {\n      const value = Reflect.get(target, property, target);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    },\n    construct(target, args, newTarget) {\n      const instance = Reflect.construct(\n        target,\n        args,\n        newTarget\n      );\n      return instrumentCloudflareAIChatAgent(instance);\n    }\n  });\n  wrappedClasses.set(AgentClass, wrapped);\n  wrappedClasses.set(wrapped, wrapped);\n  return wrapped;\n}\nfunction isModuleNamespace5(value) {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  try {\n    if (Reflect.get(value, Symbol.toStringTag) === \"Module\") {\n      return true;\n    }\n    const keys = Object.keys(value);\n    if (keys.length === 0) {\n      return false;\n    }\n    const descriptor = Object.getOwnPropertyDescriptor(value, keys[0]);\n    return descriptor ? !descriptor.configurable && !descriptor.writable : false;\n  } catch {\n    return false;\n  }\n}\n\n// src/wrappers/google-generative-ai.ts\nfunction wrapGoogleGenerativeAI(client) {\n  if (!isObject(client) || typeof client.getGenerativeModel !== \"function\")\n    return client;\n  return wrapClient(client);\n}\nvar proxies = /* @__PURE__ */ new WeakMap();\nfunction wrapClient(client) {\n  const cached = proxies.get(client);\n  if (cached) return cached;\n  const proxy = new Proxy(client, {\n    get(target, prop, receiver) {\n      const value = Reflect.get(target, prop, receiver);\n      if (typeof value !== \"function\") return value;\n      if (prop === \"getGenerativeModel\" || prop === \"getGenerativeModelFromCachedContent\" || prop === \"startChat\") {\n        return (...args) => wrapClient(Reflect.apply(value, target, args));\n      }\n      switch (prop) {\n        case \"generateContent\":\n          return (...args) => googleGenerativeAIChannels.generateContent.invoke(\n            value,\n            target,\n            args,\n            {}\n          );\n        case \"generateContentStream\":\n          return (...args) => googleGenerativeAIChannels.generateContentStream.invoke(\n            value,\n            target,\n            args,\n            {}\n          );\n        case \"embedContent\":\n          return (...args) => googleGenerativeAIChannels.embedContent.invoke(\n            value,\n            target,\n            args,\n            {}\n          );\n        case \"batchEmbedContents\":\n          return (...args) => googleGenerativeAIChannels.batchEmbedContents.invoke(\n            value,\n            target,\n            args,\n            {}\n          );\n        case \"sendMessage\":\n          return (...args) => googleGenerativeAIChannels.sendMessage.invoke(\n            value,\n            target,\n            args,\n            {}\n          );\n        case \"sendMessageStream\":\n          return (...args) => googleGenerativeAIChannels.sendMessageStream.invoke(\n            value,\n            target,\n            args,\n            {}\n          );\n      }\n      return value.bind(target);\n    }\n  });\n  proxies.set(client, proxy);\n  proxies.set(proxy, proxy);\n  return proxy;\n}\n\n// src/wrappers/google-genai.ts\nvar patchedHttpResponses = /* @__PURE__ */ new WeakSet();\nfunction wrapGoogleGenAI(googleGenAI) {\n  if (!googleGenAI || typeof googleGenAI !== \"object\") {\n    console.warn(\"Invalid Google GenAI module. Not wrapping.\");\n    return googleGenAI;\n  }\n  if (!(\"GoogleGenAI\" in googleGenAI)) {\n    console.warn(\n      \"GoogleGenAI class not found in module. Not wrapping. Make sure you're passing the module itself (import * as googleGenAI from '@google/genai').\"\n    );\n    return googleGenAI;\n  }\n  const httpResponse = googleGenAI.HttpResponse;\n  if (typeof httpResponse === \"function\" && isObject(httpResponse.prototype) && typeof httpResponse.prototype.json === \"function\" && !patchedHttpResponses.has(httpResponse.prototype)) {\n    const prototype = httpResponse.prototype;\n    const originalJson = prototype.json;\n    if (Reflect.set(prototype, \"json\", function() {\n      return googleGenAIChannels.httpResponseJson.invoke(\n        originalJson,\n        this,\n        [],\n        {}\n      );\n    })) {\n      patchedHttpResponses.add(prototype);\n    }\n  }\n  return new Proxy(googleGenAI, {\n    get(target, prop, receiver) {\n      if (prop === \"GoogleGenAI\") {\n        const OriginalGoogleGenAI = Reflect.get(\n          target,\n          prop,\n          receiver\n        );\n        return wrapGoogleGenAIClass(OriginalGoogleGenAI);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapGoogleGenAIClass(OriginalGoogleGenAI) {\n  return new Proxy(OriginalGoogleGenAI, {\n    construct(target, args) {\n      const instance = Reflect.construct(target, args);\n      return wrapGoogleGenAIInstance(instance);\n    }\n  });\n}\nfunction wrapGoogleGenAIInstance(instance) {\n  const wrappedModels = wrapModels(instance.models);\n  let originalInteractions;\n  let wrappedInteractions;\n  patchGoogleGenAIChats(instance, wrappedModels);\n  return new Proxy(instance, {\n    get(target, prop, receiver) {\n      if (prop === \"models\") {\n        return wrappedModels;\n      }\n      if (prop === \"interactions\") {\n        const interactions = Reflect.get(target, prop, receiver);\n        if (!isObject(interactions) || typeof interactions.create !== \"function\") {\n          return interactions;\n        }\n        if (interactions !== originalInteractions) {\n          originalInteractions = interactions;\n          wrappedInteractions = wrapInteractions(interactions);\n        }\n        return wrappedInteractions;\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction patchGoogleGenAIChats(instance, wrappedModels) {\n  if (!isObject(instance.chats) || !(\"modelsModule\" in instance.chats)) {\n    return;\n  }\n  Reflect.set(instance.chats, \"modelsModule\", wrappedModels);\n}\nfunction wrapModels(models) {\n  return new Proxy(models, {\n    get(target, prop, receiver) {\n      if (prop === \"generateContent\") {\n        return wrapGenerateContent(target.generateContent.bind(target));\n      } else if (prop === \"generateContentStream\") {\n        return wrapGenerateContentStream(\n          target.generateContentStream.bind(target)\n        );\n      } else if (prop === \"embedContent\") {\n        return wrapEmbedContent(target.embedContent.bind(target));\n      } else if (prop === \"generateImages\") {\n        return wrapGenerateImages(target.generateImages.bind(target));\n      } else if (prop === \"editImage\") {\n        return wrapEditImage(target.editImage.bind(target));\n      } else if (prop === \"generateVideos\") {\n        return wrapGenerateVideos(target.generateVideos.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapEditImage(original) {\n  return function(params) {\n    return googleGenAIChannels.editImage.invoke(\n      original,\n      void 0,\n      [params],\n      {}\n    );\n  };\n}\nfunction wrapGenerateVideos(original) {\n  return function(params) {\n    return googleGenAIChannels.generateVideos.invoke(\n      original,\n      void 0,\n      [params],\n      {}\n    );\n  };\n}\nfunction wrapGenerateImages(original) {\n  return function(params) {\n    return googleGenAIChannels.generateImages.invoke(\n      original,\n      void 0,\n      [params],\n      {}\n    );\n  };\n}\nfunction wrapInteractions(interactions) {\n  return new Proxy(interactions, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapInteractionCreate(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapGenerateContent(original) {\n  return function(params) {\n    return googleGenAIChannels.generateContent.tracePromise(\n      () => original(params),\n      { arguments: [params] }\n    );\n  };\n}\nfunction wrapGenerateContentStream(original) {\n  return function(params) {\n    return googleGenAIChannels.generateContentStream.tracePromise(\n      () => original(params),\n      { arguments: [params] }\n    );\n  };\n}\nfunction wrapEmbedContent(original) {\n  return function(params) {\n    return googleGenAIChannels.embedContent.tracePromise(\n      () => original(params),\n      { arguments: [params] }\n    );\n  };\n}\nfunction wrapInteractionCreate(original) {\n  return function(params, options) {\n    if (params.background === true) {\n      return options === void 0 ? original(params) : original(params, options);\n    }\n    const traceContext = options === void 0 ? { arguments: [params] } : { arguments: [params, options] };\n    return googleGenAIChannels.interactionsCreate.tracePromise(\n      () => options === void 0 ? original(params) : original(params, options),\n      traceContext\n    );\n  };\n}\n\n// src/wrappers/google-adk.ts\nfunction wrapGoogleADK(adkModule) {\n  if (!adkModule || typeof adkModule !== \"object\") {\n    console.warn(\"Invalid Google ADK module. Not wrapping.\");\n    return adkModule;\n  }\n  if (!(\"Runner\" in adkModule) && !(\"LlmAgent\" in adkModule)) {\n    console.warn(\n      \"Runner or LlmAgent class not found in module. Not wrapping. Make sure you're passing the module itself (import * as adk from '@google/adk').\"\n    );\n    return adkModule;\n  }\n  return new Proxy(adkModule, {\n    get(target, prop, receiver) {\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"Runner\" && typeof value === \"function\") {\n        return wrapRunnerClass(value);\n      }\n      if (prop === \"InMemoryRunner\" && typeof value === \"function\") {\n        return wrapRunnerClass(\n          value\n        );\n      }\n      if ((prop === \"LlmAgent\" || prop === \"Agent\" || prop === \"SequentialAgent\" || prop === \"ParallelAgent\" || prop === \"LoopAgent\") && typeof value === \"function\") {\n        return wrapAgentClass3(value);\n      }\n      if (prop === \"FunctionTool\" && typeof value === \"function\") {\n        return wrapToolClass(value);\n      }\n      return value;\n    }\n  });\n}\nfunction wrapRunnerClass(RunnerClass) {\n  return new Proxy(RunnerClass, {\n    construct(target, args) {\n      const instance = Reflect.construct(target, args);\n      return wrapRunnerInstance(instance);\n    }\n  });\n}\nfunction wrapRunnerInstance(runner) {\n  return new Proxy(runner, {\n    get(target, prop, receiver) {\n      if (prop === \"runAsync\") {\n        return wrapRunnerRunAsync(target);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapRunnerRunAsync(runner) {\n  const original = runner.runAsync.bind(runner);\n  return function(params) {\n    return googleADKChannels.runnerRunAsync.traceSync(() => original(params), {\n      arguments: [params],\n      self: runner\n    });\n  };\n}\nfunction wrapAgentClass3(AgentClass) {\n  return new Proxy(AgentClass, {\n    construct(target, args) {\n      const instance = Reflect.construct(target, args);\n      return wrapAgentInstance2(instance);\n    }\n  });\n}\nfunction wrapAgentInstance2(agent) {\n  return new Proxy(agent, {\n    get(target, prop, receiver) {\n      if (prop === \"runAsync\") {\n        return wrapAgentRunAsync(target);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapAgentRunAsync(agent) {\n  const original = agent.runAsync.bind(agent);\n  return function(parentContext) {\n    return googleADKChannels.agentRunAsync.traceSync(\n      () => original(parentContext),\n      { arguments: [parentContext], self: agent }\n    );\n  };\n}\nfunction wrapToolClass(ToolClass) {\n  return new Proxy(ToolClass, {\n    construct(target, args) {\n      const instance = Reflect.construct(target, args);\n      return wrapToolInstance(instance);\n    }\n  });\n}\nfunction wrapToolInstance(tool) {\n  return new Proxy(tool, {\n    get(target, prop, receiver) {\n      if (prop === \"runAsync\") {\n        return wrapToolRunAsync(target);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapToolRunAsync(tool) {\n  const original = tool.runAsync.bind(tool);\n  return function(req) {\n    return googleADKChannels.toolRunAsync.tracePromise(() => original(req), {\n      arguments: [req],\n      self: tool\n    });\n  };\n}\n\n// src/wrappers/genkit.ts\nvar WRAPPED_GENKIT = /* @__PURE__ */ Symbol.for(\"braintrust.genkit.wrapped\");\nvar PATCHED_GENKIT_REGISTRY = /* @__PURE__ */ Symbol.for(\n  \"braintrust.genkit.registry.patched\"\n);\nvar PATCHED_GENKIT_REGISTRY_CONSTRUCTOR = /* @__PURE__ */ Symbol.for(\n  \"braintrust.genkit.registry.constructor.patched\"\n);\nvar wrappedGenkitActions = /* @__PURE__ */ new WeakMap();\nfunction wrapGenkit(genkit) {\n  if (isGenkitInstance(genkit)) {\n    return wrapGenkitInstance(genkit);\n  }\n  if (isGenkitModule(genkit)) {\n    return wrapGenkitModule(genkit);\n  }\n  console.warn(\"Unsupported Genkit object. Not wrapping.\");\n  return genkit;\n}\nfunction isRecord4(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction isPropertyBag(value) {\n  return isRecord4(value) || typeof value === \"function\";\n}\nfunction hasFunction(value, methodName) {\n  return isPropertyBag(value) && methodName in value && typeof value[methodName] === \"function\";\n}\nfunction isGenkitInstance(value) {\n  return isRecord4(value) && (hasFunction(value, \"generate\") || hasFunction(value, \"generateStream\") || hasFunction(value, \"defineFlow\") || hasFunction(value, \"defineTool\"));\n}\nfunction isGenkitModule(value) {\n  return hasFunction(value, \"genkit\");\n}\nfunction wrapGenkitModule(module2) {\n  return new Proxy(module2, {\n    get(target, prop, receiver) {\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"genkit\" && typeof value === \"function\") {\n        const factory = value;\n        return (...args) => wrapGenkit(factory(...args));\n      }\n      return value;\n    }\n  });\n}\nfunction wrapGenkitInstance(instance) {\n  if (hasWrappedFlag(instance)) {\n    return instance;\n  }\n  patchGenkitRegistry(instance);\n  const proxy = new Proxy(instance, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case WRAPPED_GENKIT:\n          return true;\n        case \"generate\":\n          return typeof target.generate === \"function\" ? wrapGenerate(target.generate.bind(target)) : target.generate;\n        case \"generateStream\":\n          return typeof target.generateStream === \"function\" ? wrapGenerateStream(target.generateStream.bind(target)) : target.generateStream;\n        case \"embed\":\n          return typeof target.embed === \"function\" ? wrapEmbed2(target.embed.bind(target)) : target.embed;\n        case \"embedMany\":\n          return typeof target.embedMany === \"function\" ? wrapEmbedMany2(target.embedMany.bind(target)) : target.embedMany;\n        case \"run\":\n          return typeof target.run === \"function\" ? wrapRun(target.run.bind(target)) : target.run;\n        case \"defineFlow\":\n          return typeof target.defineFlow === \"function\" ? (...args) => wrapGenkitAction(target.defineFlow(...args)) : target.defineFlow;\n        case \"defineTool\":\n          return typeof target.defineTool === \"function\" ? (...args) => wrapGenkitAction(target.defineTool(...args)) : target.defineTool;\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n  return proxy;\n}\nfunction patchGenkitRegistry(instance) {\n  const registry2 = instance.registry;\n  patchGenkitRegistryLookup(registry2);\n  patchGenkitRegistryConstructor(registry2);\n}\nfunction patchGenkitRegistryLookup(registry2) {\n  if (!isRecord4(registry2) || hasRegistryPatchedFlag(registry2) || !hasFunction(registry2, \"lookupAction\")) {\n    return;\n  }\n  const originalLookupAction = registry2.lookupAction;\n  if (typeof originalLookupAction !== \"function\") {\n    return;\n  }\n  try {\n    Object.defineProperty(registry2, \"lookupAction\", {\n      configurable: true,\n      value: (...args) => {\n        const result = originalLookupAction.apply(registry2, args);\n        if (isPromiseLike2(result)) {\n          return result.then((action) => wrapGenkitAction(action));\n        }\n        return wrapGenkitAction(result);\n      },\n      writable: true\n    });\n    Object.defineProperty(registry2, PATCHED_GENKIT_REGISTRY, {\n      value: true\n    });\n  } catch {\n  }\n}\nfunction patchGenkitRegistryConstructor(registry2) {\n  if (!isRecord4(registry2)) {\n    return;\n  }\n  const constructor = registry2.constructor;\n  if (!isPropertyBag(constructor) || hasRegistryConstructorPatchedFlag(constructor) || !hasFunction(constructor, \"withParent\")) {\n    return;\n  }\n  const originalWithParent = constructor.withParent;\n  if (typeof originalWithParent !== \"function\") {\n    return;\n  }\n  try {\n    Object.defineProperty(constructor, \"withParent\", {\n      configurable: true,\n      value: (...args) => {\n        const childRegistry = originalWithParent.apply(constructor, args);\n        if (args.some((arg) => isRecord4(arg) && hasRegistryPatchedFlag(arg))) {\n          patchGenkitRegistryLookup(childRegistry);\n          patchGenkitRegistryConstructor(childRegistry);\n        }\n        return childRegistry;\n      },\n      writable: true\n    });\n    Object.defineProperty(constructor, PATCHED_GENKIT_REGISTRY_CONSTRUCTOR, {\n      value: true\n    });\n  } catch {\n  }\n}\nfunction wrapGenerate(generate) {\n  return (input) => genkitChannels.generate.tracePromise(() => generate(input), {\n    arguments: [input]\n  });\n}\nfunction wrapGenerateStream(generateStream) {\n  return (input) => genkitChannels.generateStream.traceSync(() => generateStream(input), {\n    arguments: [input]\n  });\n}\nfunction wrapEmbed2(embed) {\n  return (params) => genkitChannels.embed.tracePromise(() => embed(params), {\n    arguments: [params]\n  });\n}\nfunction wrapEmbedMany2(embedMany) {\n  return (params) => genkitChannels.embedMany.tracePromise(() => embedMany(params), {\n    arguments: [params]\n  });\n}\nfunction wrapRun(run) {\n  return (name, inputOrFn, maybeFn) => genkitChannels.actionRun.tracePromise(() => run(name, inputOrFn, maybeFn), {\n    arguments: [name, inputOrFn, maybeFn]\n  });\n}\nfunction wrapGenkitAction(action) {\n  if (!isGenkitAction(action) || hasWrappedFlag(action)) {\n    return action;\n  }\n  const existing = wrappedGenkitActions.get(action);\n  if (existing) {\n    return existing;\n  }\n  const proxy = new Proxy(action, {\n    apply(target, thisArg, argArray) {\n      return traceActionRun(\n        target,\n        () => Reflect.apply(target, thisArg, argArray)\n      )(argArray[0], argArray[1]);\n    },\n    get(target, prop, receiver) {\n      switch (prop) {\n        case WRAPPED_GENKIT:\n          return true;\n        case \"run\":\n          return typeof target.run === \"function\" ? traceActionRun(target, target.run.bind(target)) : target.run;\n        case \"stream\":\n          return typeof target.stream === \"function\" ? traceActionStream(target, target.stream.bind(target)) : target.stream;\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n  wrappedGenkitActions.set(action, proxy);\n  return proxy;\n}\nfunction isGenkitAction(value) {\n  return typeof value === \"function\" && \"__action\" in value;\n}\nfunction traceActionRun(action, run) {\n  return (input, options) => genkitChannels.actionRun.tracePromise(() => run(input, options), {\n    arguments: [input, options],\n    self: action\n  });\n}\nfunction traceActionStream(action, stream) {\n  return (input, options) => genkitChannels.actionStream.traceSync(() => stream(input, options), {\n    arguments: [input, options],\n    self: action\n  });\n}\nfunction hasWrappedFlag(value) {\n  return Boolean(value[WRAPPED_GENKIT]);\n}\nfunction hasRegistryPatchedFlag(value) {\n  return Boolean(\n    value[PATCHED_GENKIT_REGISTRY]\n  );\n}\nfunction hasRegistryConstructorPatchedFlag(value) {\n  return Boolean(\n    value[PATCHED_GENKIT_REGISTRY_CONSTRUCTOR]\n  );\n}\nfunction isPromiseLike2(value) {\n  return isRecord4(value) && \"then\" in value && typeof value.then === \"function\";\n}\n\n// src/wrappers/huggingface.ts\nvar HUGGINGFACE_CONSTRUCTOR_KEYS = [\n  \"InferenceClient\",\n  \"InferenceClientEndpoint\",\n  \"HfInference\",\n  \"HfInferenceEndpoint\"\n];\nvar HUGGINGFACE_CONSTRUCTOR_KEY_SET = new Set(\n  HUGGINGFACE_CONSTRUCTOR_KEYS\n);\nfunction wrapHuggingFace(huggingFace) {\n  if (isSupportedHuggingFaceModule(huggingFace)) {\n    return moduleProxy(huggingFace);\n  }\n  if (isSupportedHuggingFaceClient(huggingFace)) {\n    return clientProxy(huggingFace);\n  }\n  console.warn(\"Unsupported HuggingFace Inference SDK. Not wrapping.\");\n  return huggingFace;\n}\nfunction isHuggingFaceConstructorKey(value) {\n  return HUGGINGFACE_CONSTRUCTOR_KEY_SET.has(value);\n}\nfunction hasFunction2(value, methodName) {\n  return isObject(value) && methodName in value && typeof value[methodName] === \"function\";\n}\nfunction isSupportedHuggingFaceModule(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  return HUGGINGFACE_CONSTRUCTOR_KEYS.some(\n    (key) => key in value && typeof value[key] === \"function\"\n  ) || isSupportedHuggingFaceClient(value);\n}\nfunction isSupportedHuggingFaceClient(value) {\n  return hasFunction2(value, \"chatCompletion\") && hasFunction2(value, \"chatCompletionStream\") && hasFunction2(value, \"textGeneration\") && hasFunction2(value, \"textGenerationStream\") && hasFunction2(value, \"featureExtraction\");\n}\nfunction moduleProxy(module2) {\n  const shadowTarget = Object.create(module2);\n  return new Proxy(shadowTarget, {\n    get(target, prop, receiver) {\n      if (typeof prop === \"string\" && isHuggingFaceConstructorKey(prop)) {\n        const value = Reflect.get(module2, prop, receiver);\n        return typeof value === \"function\" ? wrapClientConstructor(value) : value;\n      }\n      switch (prop) {\n        case \"chatCompletion\":\n          return target.chatCompletion ? wrapChatCompletion2(target.chatCompletion.bind(target)) : target.chatCompletion;\n        case \"chatCompletionStream\":\n          return target.chatCompletionStream ? wrapChatCompletionStream(target.chatCompletionStream.bind(target)) : target.chatCompletionStream;\n        case \"textGeneration\":\n          return target.textGeneration ? wrapTextGeneration(target.textGeneration.bind(target)) : target.textGeneration;\n        case \"textGenerationStream\":\n          return target.textGenerationStream ? wrapTextGenerationStream(target.textGenerationStream.bind(target)) : target.textGenerationStream;\n        case \"featureExtraction\":\n          return target.featureExtraction ? wrapFeatureExtraction(target.featureExtraction.bind(target)) : target.featureExtraction;\n        default:\n          return Reflect.get(module2, prop, receiver);\n      }\n    }\n  });\n}\nfunction wrapClientConstructor(constructor) {\n  return new Proxy(constructor, {\n    construct(target, args) {\n      const instance = Reflect.construct(target, args);\n      return clientProxy(instance);\n    }\n  });\n}\nfunction clientProxy(client) {\n  return clientProxyWithContext(client);\n}\nfunction clientProxyWithContext(client, endpointUrl) {\n  const shadowTarget = Object.create(client);\n  return new Proxy(shadowTarget, {\n    get(_target, prop, receiver) {\n      switch (prop) {\n        case \"chatCompletion\":\n          return wrapChatCompletion2(\n            client.chatCompletion.bind(client),\n            endpointUrl\n          );\n        case \"chatCompletionStream\":\n          return wrapChatCompletionStream(\n            client.chatCompletionStream.bind(client),\n            endpointUrl\n          );\n        case \"textGeneration\":\n          return wrapTextGeneration(\n            client.textGeneration.bind(client),\n            endpointUrl\n          );\n        case \"textGenerationStream\":\n          return wrapTextGenerationStream(\n            client.textGenerationStream.bind(client),\n            endpointUrl\n          );\n        case \"featureExtraction\":\n          return wrapFeatureExtraction(\n            client.featureExtraction.bind(client),\n            endpointUrl\n          );\n        case \"endpoint\":\n          if (!client.endpoint) {\n            return client.endpoint;\n          }\n          {\n            const endpoint = client.endpoint.bind(client);\n            return (nextEndpointUrl) => clientProxyWithContext(\n              endpoint(nextEndpointUrl),\n              nextEndpointUrl\n            );\n          }\n        default:\n          return Reflect.get(client, prop, receiver);\n      }\n    }\n  });\n}\nfunction withEndpointUrl(params, endpointUrl) {\n  if (!endpointUrl || params.endpointUrl !== void 0) {\n    return params;\n  }\n  return {\n    ...params,\n    endpointUrl\n  };\n}\nfunction wrapChatCompletion2(original, endpointUrl) {\n  return (params, options) => {\n    const traceParams = withEndpointUrl(params, endpointUrl);\n    const context = {\n      arguments: [traceParams]\n    };\n    return huggingFaceChannels.chatCompletion.tracePromise(\n      () => original(params, options),\n      context\n    );\n  };\n}\nfunction wrapChatCompletionStream(original, endpointUrl) {\n  return (params, options) => huggingFaceChannels.chatCompletionStream.traceSync(\n    () => original(params, options),\n    {\n      arguments: [withEndpointUrl(params, endpointUrl)]\n    }\n  );\n}\nfunction wrapTextGeneration(original, endpointUrl) {\n  return (params, options) => {\n    const traceParams = withEndpointUrl(params, endpointUrl);\n    const context = {\n      arguments: [traceParams]\n    };\n    return huggingFaceChannels.textGeneration.tracePromise(\n      () => original(params, options),\n      context\n    );\n  };\n}\nfunction wrapTextGenerationStream(original, endpointUrl) {\n  return (params, options) => huggingFaceChannels.textGenerationStream.traceSync(\n    () => original(params, options),\n    {\n      arguments: [withEndpointUrl(params, endpointUrl)]\n    }\n  );\n}\nfunction wrapFeatureExtraction(original, endpointUrl) {\n  return (params, options) => {\n    const traceParams = withEndpointUrl(params, endpointUrl);\n    const context = {\n      arguments: [traceParams]\n    };\n    return huggingFaceChannels.featureExtraction.tracePromise(\n      () => original(params, options),\n      context\n    );\n  };\n}\n\n// src/wrappers/huggingface-transformers.ts\nvar PIPELINE_CONSTRUCTOR_KEYS = /* @__PURE__ */ new Set([\n  \"TextGenerationPipeline\",\n  \"Text2TextGenerationPipeline\",\n  \"SummarizationPipeline\",\n  \"FeatureExtractionPipeline\",\n  \"QuestionAnsweringPipeline\"\n]);\nvar wrappedValues = /* @__PURE__ */ new WeakMap();\nfunction wrapHuggingFaceTransformers(transformers) {\n  const pipelineTask = transformers?.task;\n  if (typeof transformers === \"function\" && isSupportedHuggingFaceTransformersTask(pipelineTask)) {\n    return wrapPipeline(transformers);\n  }\n  if (!isSupportedModule(transformers)) {\n    return transformers;\n  }\n  const existing = wrappedValues.get(transformers);\n  if (existing) {\n    return existing;\n  }\n  const proxy = new Proxy(Object.create(transformers), {\n    get(_target, property, receiver) {\n      const value = Reflect.get(transformers, property, receiver);\n      if (property === \"pipeline\" && typeof value === \"function\") {\n        return wrapPipelineFactory(value);\n      }\n      if (typeof property === \"string\" && PIPELINE_CONSTRUCTOR_KEYS.has(property) && typeof value === \"function\") {\n        return wrapPipelineConstructor(\n          value\n        );\n      }\n      return value;\n    }\n  });\n  wrappedValues.set(transformers, proxy);\n  wrappedValues.set(proxy, proxy);\n  return proxy;\n}\nfunction isSupportedModule(value) {\n  if (value === null || typeof value !== \"object\" && typeof value !== \"function\") {\n    return false;\n  }\n  if (typeof Reflect.get(value, \"pipeline\") === \"function\") {\n    return true;\n  }\n  for (const key of PIPELINE_CONSTRUCTOR_KEYS) {\n    if (typeof Reflect.get(value, key) === \"function\") {\n      return true;\n    }\n  }\n  return false;\n}\nfunction wrapPipelineFactory(factory) {\n  const existing = wrappedValues.get(factory);\n  if (existing) {\n    return existing;\n  }\n  const wrapped = function(...args) {\n    const [task] = args;\n    const context = {\n      arguments: args\n    };\n    return huggingFaceTransformersChannels.pipeline.tracePromise(() => Reflect.apply(factory, this, args), context).then((pipeline) => {\n      if (isSupportedHuggingFaceTransformersTask(pipeline.task ?? task)) {\n        return wrapPipeline(pipeline);\n      }\n      return pipeline;\n    });\n  };\n  wrappedValues.set(factory, wrapped);\n  wrappedValues.set(wrapped, wrapped);\n  return wrapped;\n}\nfunction wrapPipelineConstructor(constructor) {\n  const existing = wrappedValues.get(constructor);\n  if (existing) {\n    return existing;\n  }\n  const proxy = new Proxy(constructor, {\n    construct(target, args, newTarget) {\n      const pipeline = Reflect.construct(target, args, newTarget);\n      if (isSupportedHuggingFaceTransformersTask(pipeline.task)) {\n        return wrapPipeline(pipeline);\n      }\n      return pipeline;\n    }\n  });\n  wrappedValues.set(constructor, proxy);\n  wrappedValues.set(proxy, proxy);\n  return proxy;\n}\nfunction wrapPipeline(pipeline) {\n  const existing = wrappedValues.get(pipeline);\n  if (existing) {\n    return existing;\n  }\n  const proxy = new Proxy(pipeline, {\n    apply(target, thisArg, args) {\n      const context = {\n        arguments: args,\n        self: target\n      };\n      return huggingFaceTransformersChannels.pipelineCall.tracePromise(\n        () => Reflect.apply(target, thisArg, args),\n        context\n      );\n    }\n  });\n  wrappedValues.set(pipeline, proxy);\n  wrappedValues.set(proxy, proxy);\n  return proxy;\n}\n\n// src/wrappers/openrouter-agent.ts\nfunction wrapOpenRouterAgent(agent) {\n  const candidate = agent;\n  if (candidate && typeof candidate === \"object\" && \"callModel\" in candidate && typeof candidate.callModel === \"function\") {\n    return openRouterAgentProxy(candidate);\n  }\n  console.warn(\"Unsupported OpenRouter Agent library. Not wrapping.\");\n  return agent;\n}\nfunction openRouterAgentProxy(agent) {\n  const cache = /* @__PURE__ */ new Map();\n  return new Proxy(agent, {\n    get(target, prop, receiver) {\n      if (cache.has(prop)) {\n        return cache.get(prop);\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (prop === \"callModel\" && typeof value === \"function\") {\n        const wrapped = wrapCallModel(\n          value,\n          target\n        );\n        cache.set(prop, wrapped);\n        return wrapped;\n      }\n      if (typeof value === \"function\") {\n        const bound = value.bind(target);\n        cache.set(prop, bound);\n        return bound;\n      }\n      return value;\n    }\n  });\n}\nfunction wrapCallModel(callModelFn, defaultThis) {\n  return new Proxy(callModelFn, {\n    apply(target, thisArg, argArray) {\n      const request = cloneCallModelRequest(argArray[0]);\n      const options = argArray[1];\n      const invocationTarget = thisArg === void 0 ? defaultThis ?? thisArg : thisArg;\n      return openRouterAgentChannels.callModel.traceSync(\n        () => Reflect.apply(target, invocationTarget, [request, options]),\n        {\n          arguments: [request]\n        }\n      );\n    }\n  });\n}\nfunction cloneCallModelRequest(request) {\n  if (!request || typeof request !== \"object\") {\n    return request;\n  }\n  return { ...request };\n}\n\n// src/wrappers/openrouter.ts\nfunction wrapOpenRouter(openrouter) {\n  const or = openrouter;\n  if (or && typeof or === \"object\" && (\"chat\" in or && typeof or.chat === \"object\" && or.chat && \"send\" in or.chat && \"embeddings\" in or && typeof or.embeddings === \"object\" && or.embeddings && \"generate\" in or.embeddings || \"rerank\" in or && typeof or.rerank === \"object\" && or.rerank && \"rerank\" in or.rerank || \"callModel\" in or && typeof or.callModel === \"function\")) {\n    return openRouterProxy(or);\n  }\n  console.warn(\"Unsupported OpenRouter library. Not wrapping.\");\n  return openrouter;\n}\nfunction openRouterProxy(openrouter) {\n  return new Proxy(openrouter, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"chat\":\n          return target.chat ? chatProxy(target.chat) : target.chat;\n        case \"embeddings\":\n          return target.embeddings ? embeddingsProxy(target.embeddings) : target.embeddings;\n        case \"rerank\":\n          return target.rerank ? rerankProxy(target.rerank) : target.rerank;\n        case \"beta\":\n          return target.beta ? betaProxy2(target.beta) : target.beta;\n        case \"callModel\":\n          return typeof target.callModel === \"function\" ? wrapCallModel2(target.callModel.bind(target)) : target.callModel;\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n}\nfunction betaProxy2(beta) {\n  return new Proxy(beta, {\n    get(target, prop, receiver) {\n      if (prop === \"responses\") {\n        return target.responses ? responsesProxy2(target.responses) : void 0;\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction chatProxy(chat) {\n  return new Proxy(chat, {\n    get(target, prop, receiver) {\n      if (prop === \"send\") {\n        return wrapChatSend(target.send.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction embeddingsProxy(embeddings) {\n  return new Proxy(embeddings, {\n    get(target, prop, receiver) {\n      if (prop === \"generate\") {\n        return wrapEmbeddingsGenerate(target.generate.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction responsesProxy2(responses) {\n  return new Proxy(responses, {\n    get(target, prop, receiver) {\n      if (prop === \"send\") {\n        return wrapResponsesSend(target.send.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction rerankProxy(rerank) {\n  return new Proxy(rerank, {\n    get(target, prop, receiver) {\n      if (prop === \"rerank\") {\n        return wrapRerank2(target.rerank.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapChatSend(send) {\n  return (request, options) => openRouterChannels.chatSend.tracePromise(() => send(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapEmbeddingsGenerate(generate) {\n  return (request, options) => openRouterChannels.embeddingsGenerate.tracePromise(\n    () => generate(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapResponsesSend(send) {\n  return (request, options) => openRouterChannels.betaResponsesSend.tracePromise(\n    () => send(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapRerank2(rerank) {\n  return (request, options) => openRouterChannels.rerankRerank.tracePromise(\n    () => rerank(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapCallModel2(callModel) {\n  return (request, options) => {\n    const tracedRequest = { ...request };\n    return openRouterChannels.callModel.traceSync(\n      () => callModel(tracedRequest, options),\n      {\n        arguments: [tracedRequest]\n      }\n    );\n  };\n}\n\n// src/wrappers/mistral.ts\nfunction wrapMistral(mistral) {\n  if (isSupportedMistralClient(mistral)) {\n    return mistralProxy(mistral);\n  }\n  console.warn(\"Unsupported Mistral library. Not wrapping.\");\n  return mistral;\n}\nfunction isRecord5(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction hasFunction3(value, methodName) {\n  return isRecord5(value) && methodName in value && typeof value[methodName] === \"function\";\n}\nfunction isSupportedMistralClient(value) {\n  if (!isRecord5(value)) {\n    return false;\n  }\n  return value.chat !== void 0 && hasChat(value.chat) || value.embeddings !== void 0 && hasEmbeddings(value.embeddings) || value.fim !== void 0 && hasFim(value.fim) || value.agents !== void 0 && hasAgents(value.agents) || value.classifiers !== void 0 && hasClassifiers(value.classifiers);\n}\nfunction hasChat(value) {\n  return hasFunction3(value, \"complete\") && hasFunction3(value, \"stream\");\n}\nfunction hasEmbeddings(value) {\n  return hasFunction3(value, \"create\");\n}\nfunction hasFim(value) {\n  return hasFunction3(value, \"complete\") && hasFunction3(value, \"stream\");\n}\nfunction hasAgents(value) {\n  return hasFunction3(value, \"complete\") && hasFunction3(value, \"stream\");\n}\nfunction hasClassifiers(value) {\n  return hasFunction3(value, \"moderate\") && hasFunction3(value, \"moderateChat\");\n}\nfunction mistralProxy(mistral) {\n  return new Proxy(mistral, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"chat\":\n          return target.chat ? chatProxy2(target.chat) : target.chat;\n        case \"fim\":\n          return target.fim ? fimProxy(target.fim) : target.fim;\n        case \"agents\":\n          return target.agents ? agentsProxy(target.agents) : target.agents;\n        case \"embeddings\":\n          return target.embeddings ? embeddingsProxy2(target.embeddings) : target.embeddings;\n        case \"classifiers\":\n          return target.classifiers ? classifiersProxy(target.classifiers) : target.classifiers;\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n}\nfunction chatProxy2(chat) {\n  return new Proxy(chat, {\n    get(target, prop, receiver) {\n      if (prop === \"complete\") {\n        return wrapChatComplete(target.complete.bind(target));\n      }\n      if (prop === \"stream\") {\n        return wrapChatStream(target.stream.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction embeddingsProxy2(embeddings) {\n  return new Proxy(embeddings, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapEmbeddingsCreate(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction fimProxy(fim) {\n  return new Proxy(fim, {\n    get(target, prop, receiver) {\n      if (prop === \"complete\") {\n        return wrapFimComplete(target.complete.bind(target));\n      }\n      if (prop === \"stream\") {\n        return wrapFimStream(target.stream.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction agentsProxy(agents) {\n  return new Proxy(agents, {\n    get(target, prop, receiver) {\n      if (prop === \"complete\") {\n        return wrapAgentsComplete(target.complete.bind(target));\n      }\n      if (prop === \"stream\") {\n        return wrapAgentsStream(target.stream.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction classifiersProxy(classifiers) {\n  return new Proxy(classifiers, {\n    get(target, prop, receiver) {\n      if (prop === \"moderate\") {\n        return wrapClassifiersModerate(target.moderate.bind(target));\n      }\n      if (prop === \"moderateChat\") {\n        return wrapClassifiersModerateChat(target.moderateChat.bind(target));\n      }\n      if (prop === \"classify\" && target.classify) {\n        return wrapClassifiersClassify(target.classify.bind(target));\n      }\n      if (prop === \"classifyChat\" && target.classifyChat) {\n        return wrapClassifiersClassifyChat(target.classifyChat.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction wrapChatComplete(complete) {\n  return (request, options) => mistralChannels.chatComplete.tracePromise(\n    () => complete(request, options),\n    {\n      arguments: [request]\n    }\n  );\n}\nfunction wrapChatStream(stream) {\n  return (request, options) => mistralChannels.chatStream.tracePromise(() => stream(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapEmbeddingsCreate(create) {\n  return (request, options) => mistralChannels.embeddingsCreate.tracePromise(\n    () => create(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapClassifiersModerate(moderate) {\n  return (request, options) => mistralChannels.classifiersModerate.tracePromise(\n    () => moderate(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapClassifiersModerateChat(moderateChat) {\n  return (request, options) => mistralChannels.classifiersModerateChat.tracePromise(\n    () => moderateChat(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapClassifiersClassify(classify) {\n  return (request, options) => mistralChannels.classifiersClassify.tracePromise(\n    () => classify(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapClassifiersClassifyChat(classifyChat) {\n  return (request, options) => mistralChannels.classifiersClassifyChat.tracePromise(\n    () => classifyChat(request, options),\n    { arguments: [request] }\n  );\n}\nfunction wrapFimComplete(complete) {\n  return (request, options) => mistralChannels.fimComplete.tracePromise(() => complete(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapFimStream(stream) {\n  return (request, options) => mistralChannels.fimStream.tracePromise(() => stream(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapAgentsComplete(complete) {\n  return (request, options) => mistralChannels.agentsComplete.tracePromise(\n    () => complete(request, options),\n    {\n      arguments: [request]\n    }\n  );\n}\nfunction wrapAgentsStream(stream) {\n  return (request, options) => mistralChannels.agentsStream.tracePromise(() => stream(request, options), {\n    arguments: [request]\n  });\n}\n\n// src/wrappers/langgraph-sdk.ts\nvar clients = /* @__PURE__ */ new WeakMap();\nfunction wrapLangGraphSDK(client) {\n  const runsClient = isObject(client) ? client.runs : void 0;\n  if (!isObject(client) || !isObject(runsClient) || ![\"wait\", \"stream\"].every((key) => typeof runsClient[key] === \"function\")) {\n    debugLogger.warn(\"Unsupported LangGraph SDK client. Not wrapping.\");\n    return client;\n  }\n  const sdk = client;\n  const cached = clients.get(sdk);\n  if (cached) return cached;\n  const runs = new Proxy(sdk.runs, {\n    get(target, key) {\n      switch (key) {\n        case \"wait\":\n          return (...args) => langGraphSDKChannels.wait.invoke(target.wait, target, args, {});\n        case \"stream\":\n          return (...args) => langGraphSDKChannels.stream.invoke(target.stream, target, args, {});\n        default:\n          const value = Reflect.get(target, key, target);\n          return typeof value === \"function\" ? value.bind(target) : value;\n      }\n    }\n  });\n  const wrapped = new Proxy(sdk, {\n    get(target, key) {\n      if (key === \"runs\") return runs;\n      const value = Reflect.get(target, key, target);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    }\n  });\n  clients.set(sdk, wrapped);\n  clients.set(wrapped, wrapped);\n  return wrapped;\n}\n\n// src/wrappers/ollama.ts\nfunction wrapOllama(ollama) {\n  if (isSupportedOllamaClient(ollama)) {\n    return ollamaProxy(ollama);\n  }\n  debugLogger.warn(\"Unsupported Ollama library. Not wrapping.\");\n  return ollama;\n}\nvar ollamaProxyCache = /* @__PURE__ */ new WeakMap();\nfunction isSupportedOllamaClient(value) {\n  return isObject(value) && [\"chat\", \"generate\", \"embed\"].some(\n    (name) => typeof value[name] === \"function\"\n  );\n}\nfunction ollamaProxy(ollama) {\n  const cached = ollamaProxyCache.get(ollama);\n  if (cached) {\n    return cached;\n  }\n  let chatSource;\n  let wrappedChat;\n  let generateSource;\n  let wrappedGenerate;\n  let embedSource;\n  let wrappedEmbed;\n  const proxy = new Proxy(ollama, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"chat\": {\n          const source = target.chat;\n          if (source !== chatSource) {\n            chatSource = source;\n            wrappedChat = typeof source === \"function\" ? wrapChat(source.bind(target)) : source;\n          }\n          return wrappedChat;\n        }\n        case \"generate\": {\n          const source = target.generate;\n          if (source !== generateSource) {\n            generateSource = source;\n            wrappedGenerate = typeof source === \"function\" ? wrapGenerate2(source.bind(target)) : source;\n          }\n          return wrappedGenerate;\n        }\n        case \"embed\": {\n          const source = target.embed;\n          if (source !== embedSource) {\n            embedSource = source;\n            wrappedEmbed = typeof source === \"function\" ? wrapEmbed3(source.bind(target)) : source;\n          }\n          return wrappedEmbed;\n        }\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n  ollamaProxyCache.set(ollama, proxy);\n  ollamaProxyCache.set(proxy, proxy);\n  return proxy;\n}\nfunction wrapChat(chat) {\n  return (request) => ollamaChannels.chat.tracePromise(() => chat(request), {\n    arguments: [request]\n  });\n}\nfunction wrapGenerate2(generate) {\n  return (request) => ollamaChannels.generate.tracePromise(() => generate(request), {\n    arguments: [request]\n  });\n}\nfunction wrapEmbed3(embed) {\n  return (request) => ollamaChannels.embed.tracePromise(() => embed(request), {\n    arguments: [request]\n  });\n}\n\n// src/wrappers/cohere.ts\nfunction wrapCohere(cohere) {\n  if (isSupportedCohereClient(cohere)) {\n    return cohereProxy(cohere);\n  }\n  console.warn(\"Unsupported Cohere library. Not wrapping.\");\n  return cohere;\n}\nvar cohereProxyCache = /* @__PURE__ */ new WeakMap();\nfunction isRecord6(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction hasFunction4(value, methodName) {\n  return isRecord6(value) && methodName in value && typeof value[methodName] === \"function\";\n}\nfunction isSupportedCohereClient(value) {\n  if (!isRecord6(value)) {\n    return false;\n  }\n  return hasFunction4(value, \"chat\") || hasFunction4(value, \"chatStream\") || hasFunction4(value, \"embed\") || hasFunction4(value, \"rerank\");\n}\nfunction cohereProxy(cohere) {\n  const cached = cohereProxyCache.get(cohere);\n  if (cached) {\n    return cached;\n  }\n  const proxy = new Proxy(cohere, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"chat\":\n          return typeof target.chat === \"function\" ? wrapChat2(target.chat.bind(target)) : target.chat;\n        case \"chatStream\":\n          return typeof target.chatStream === \"function\" ? wrapChatStream2(target.chatStream.bind(target)) : target.chatStream;\n        case \"embed\":\n          return typeof target.embed === \"function\" ? wrapEmbed4(target.embed.bind(target)) : target.embed;\n        case \"rerank\":\n          return typeof target.rerank === \"function\" ? wrapRerank3(target.rerank.bind(target)) : target.rerank;\n        default: {\n          const value = Reflect.get(target, prop, receiver);\n          return isSupportedCohereClient(value) ? cohereProxy(value) : value;\n        }\n      }\n    }\n  });\n  cohereProxyCache.set(cohere, proxy);\n  return proxy;\n}\nfunction wrapChat2(chat) {\n  return (request, options) => cohereChannels.chat.tracePromise(() => chat(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapChatStream2(chatStream) {\n  return (request, options) => cohereChannels.chatStream.tracePromise(() => chatStream(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapEmbed4(embed) {\n  return (request, options) => cohereChannels.embed.tracePromise(() => embed(request, options), {\n    arguments: [request]\n  });\n}\nfunction wrapRerank3(rerank) {\n  return (request, options) => cohereChannels.rerank.tracePromise(() => rerank(request, options), {\n    arguments: [request]\n  });\n}\n\n// src/wrappers/voyageai.ts\nfunction wrapVoyageAI(client) {\n  if (!isSupportedVoyageAIClient(client)) {\n    console.warn(\"Unsupported Voyage AI library. Not wrapping.\");\n    return client;\n  }\n  return voyageAIProxy(client);\n}\nvar voyageAIProxyCache = /* @__PURE__ */ new WeakMap();\nfunction isObject3(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction hasFunction5(value, name) {\n  return typeof Reflect.get(value, name) === \"function\";\n}\nfunction isSupportedVoyageAIClient(value) {\n  if (!isObject3(value)) {\n    return false;\n  }\n  return hasFunction5(value, \"embed\") || hasFunction5(value, \"multimodalEmbed\") || hasFunction5(value, \"rerank\") || hasFunction5(value, \"contextualizedEmbed\");\n}\nfunction voyageAIProxy(client) {\n  const cached = voyageAIProxyCache.get(client);\n  if (cached) {\n    return cached;\n  }\n  const proxy = new Proxy(client, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"embed\":\n          if (typeof target.embed !== \"function\") {\n            return target.embed;\n          }\n          return (request, options) => voyageAIChannels.embed.invoke(\n            target.embed,\n            target,\n            [request, options],\n            {}\n          );\n        case \"multimodalEmbed\":\n          if (typeof target.multimodalEmbed !== \"function\") {\n            return target.multimodalEmbed;\n          }\n          return (request, options) => voyageAIChannels.multimodalEmbed.invoke(\n            target.multimodalEmbed,\n            target,\n            [request, options],\n            {}\n          );\n        case \"rerank\":\n          if (typeof target.rerank !== \"function\") {\n            return target.rerank;\n          }\n          return (request, options) => voyageAIChannels.rerank.invoke(\n            target.rerank,\n            target,\n            [request, options],\n            {}\n          );\n        case \"contextualizedEmbed\":\n          if (typeof target.contextualizedEmbed !== \"function\") {\n            return target.contextualizedEmbed;\n          }\n          return (request, options) => voyageAIChannels.contextualizedEmbed.invoke(\n            target.contextualizedEmbed,\n            target,\n            [request, options],\n            {}\n          );\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n  voyageAIProxyCache.set(client, proxy);\n  return proxy;\n}\n\n// src/wrappers/typesafe.ts\nfunction wrapTypeSafe(client) {\n  if (!isSupportedTypeSafeClient(client)) {\n    console.warn(\"Unsupported TypeSafe AI library. Not wrapping.\");\n    return client;\n  }\n  const cached = typeSafeProxyCache.get(client);\n  if (cached) {\n    return cached;\n  }\n  const proxy = new Proxy(client, {\n    get(target, prop, receiver) {\n      if (prop !== \"systemOne\") {\n        return Reflect.get(target, prop, receiver);\n      }\n      return (request, options) => typeSafeChannels.systemOne.invoke(\n        target.systemOne,\n        target,\n        [request, options],\n        {}\n      );\n    }\n  });\n  typeSafeProxyCache.set(client, proxy);\n  return proxy;\n}\nvar typeSafeProxyCache = /* @__PURE__ */ new WeakMap();\nfunction isSupportedTypeSafeClient(value) {\n  return (typeof value === \"object\" || typeof value === \"function\") && value !== null && typeof Reflect.get(value, \"systemOne\") === \"function\";\n}\n\n// src/wrappers/groq.ts\nfunction wrapGroq(groq) {\n  if (isSupportedGroqClient(groq)) {\n    return groqProxy(groq);\n  }\n  console.warn(\"Unsupported Groq library. Not wrapping.\");\n  return groq;\n}\nfunction isRecord7(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction hasFunction6(value, methodName) {\n  return isRecord7(value) && methodName in value && typeof value[methodName] === \"function\";\n}\nfunction hasChat2(value) {\n  return isRecord7(value) && isRecord7(value.completions) && hasFunction6(value.completions, \"create\");\n}\nfunction hasEmbeddings2(value) {\n  return hasFunction6(value, \"create\");\n}\nfunction hasAudio(value) {\n  return isRecord7(value) && (value.speech !== void 0 && hasFunction6(value.speech, \"create\") || value.transcriptions !== void 0 && hasFunction6(value.transcriptions, \"create\") || value.translations !== void 0 && hasFunction6(value.translations, \"create\"));\n}\nfunction isSupportedGroqClient(value) {\n  return isRecord7(value) && (value.audio !== void 0 && hasAudio(value.audio) || value.chat !== void 0 && hasChat2(value.chat) || value.embeddings !== void 0 && hasEmbeddings2(value.embeddings));\n}\nfunction groqProxy(groq) {\n  const privateMethodWorkaroundCache = /* @__PURE__ */ new WeakMap();\n  const completionProxy = groq.chat?.completions ? new Proxy(groq.chat.completions, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapChatCompletionsCreate(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  }) : void 0;\n  const chatProxy3 = groq.chat ? new Proxy(groq.chat, {\n    get(target, prop, receiver) {\n      if (prop === \"completions\") {\n        return completionProxy ?? target.completions;\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  }) : void 0;\n  const embeddingsProxy3 = groq.embeddings ? new Proxy(groq.embeddings, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapEmbeddingsCreate2(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  }) : void 0;\n  const speechProxy = groq.audio?.speech ? new Proxy(groq.audio.speech, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapAudioSpeechCreate(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  }) : void 0;\n  const transcriptionsProxy = groq.audio?.transcriptions ? new Proxy(groq.audio.transcriptions, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapAudioTranscriptionsCreate(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  }) : void 0;\n  const translationsProxy = groq.audio?.translations ? new Proxy(groq.audio.translations, {\n    get(target, prop, receiver) {\n      if (prop === \"create\") {\n        return wrapAudioTranslationsCreate(target.create.bind(target));\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  }) : void 0;\n  const audioProxy = groq.audio ? new Proxy(groq.audio, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"speech\":\n          return speechProxy ?? target.speech;\n        case \"transcriptions\":\n          return transcriptionsProxy ?? target.transcriptions;\n        case \"translations\":\n          return translationsProxy ?? target.translations;\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  }) : void 0;\n  const topLevelProxy = new Proxy(groq, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"audio\":\n          return audioProxy ?? target.audio;\n        case \"chat\":\n          return chatProxy3 ?? target.chat;\n        case \"embeddings\":\n          return embeddingsProxy3 ?? target.embeddings;\n      }\n      const value = Reflect.get(target, prop, target);\n      if (typeof value !== \"function\") {\n        return value;\n      }\n      const cachedValue = privateMethodWorkaroundCache.get(value);\n      if (cachedValue) {\n        return cachedValue;\n      }\n      const thisBoundValue = function(...args) {\n        const thisArg = this === topLevelProxy ? target : this;\n        const output = Reflect.apply(value, thisArg, args);\n        return output === target ? topLevelProxy : output;\n      };\n      privateMethodWorkaroundCache.set(value, thisBoundValue);\n      return thisBoundValue;\n    }\n  });\n  return topLevelProxy;\n}\nfunction wrapChatCompletionsCreate(create) {\n  return (request, options) => groqChannels.chatCompletionsCreate.tracePromise(\n    () => create(request, options),\n    { arguments: [request, options] }\n  );\n}\nfunction wrapEmbeddingsCreate2(create) {\n  return (request, options) => groqChannels.embeddingsCreate.tracePromise(() => create(request, options), {\n    arguments: [request, options]\n  });\n}\nfunction wrapAudioSpeechCreate(create) {\n  return (request, options) => groqChannels.audioSpeechCreate.tracePromise(\n    () => create(request, options),\n    { arguments: [request, options] }\n  );\n}\nfunction wrapAudioTranscriptionsCreate(create) {\n  return (request, options) => groqChannels.audioTranscriptionsCreate.tracePromise(\n    () => create(request, options),\n    { arguments: [request, options] }\n  );\n}\nfunction wrapAudioTranslationsCreate(create) {\n  return (request, options) => groqChannels.audioTranslationsCreate.tracePromise(\n    () => create(request, options),\n    { arguments: [request, options] }\n  );\n}\n\n// src/wrappers/bedrock-runtime.ts\nfunction wrapBedrockRuntime(client) {\n  if (isSupportedBedrockRuntimeClient(client)) {\n    return bedrockRuntimeProxy(client);\n  }\n  console.warn(\"Unsupported Bedrock Runtime library. Not wrapping.\");\n  return client;\n}\nvar bedrockRuntimeProxyCache = /* @__PURE__ */ new WeakMap();\nvar BEDROCK_RUNTIME_OPERATION_METHODS = /* @__PURE__ */ new Set([\n  \"converse\",\n  \"converseStream\",\n  \"invokeModel\",\n  \"invokeModelWithBidirectionalStream\",\n  \"invokeModelWithResponseStream\"\n]);\nfunction isRecord8(value) {\n  return typeof value === \"object\" && value !== null;\n}\nfunction isSupportedBedrockRuntimeClient(value) {\n  return isRecord8(value) && typeof value.send === \"function\";\n}\nfunction bedrockRuntimeProxy(client) {\n  const cached = bedrockRuntimeProxyCache.get(client);\n  if (cached) {\n    return cached;\n  }\n  const privateMethodWorkaroundCache = /* @__PURE__ */ new WeakMap();\n  const operationMethodCache = /* @__PURE__ */ new WeakMap();\n  const proxy = new Proxy(client, {\n    get(target, prop, receiver) {\n      if (prop === \"send\") {\n        return wrapSend(target.send.bind(target));\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (typeof value !== \"function\") {\n        return value;\n      }\n      if (typeof prop === \"string\" && BEDROCK_RUNTIME_OPERATION_METHODS.has(prop)) {\n        const cachedValue2 = operationMethodCache.get(value);\n        if (cachedValue2) {\n          return cachedValue2;\n        }\n        const thisBoundValue2 = function(...args) {\n          const thisArg = this === proxy ? proxy : this;\n          const output = Reflect.apply(value, thisArg, args);\n          return output === target ? proxy : output;\n        };\n        operationMethodCache.set(value, thisBoundValue2);\n        return thisBoundValue2;\n      }\n      const cachedValue = privateMethodWorkaroundCache.get(value);\n      if (cachedValue) {\n        return cachedValue;\n      }\n      const thisBoundValue = function(...args) {\n        const thisArg = this === proxy ? target : this;\n        const output = Reflect.apply(value, thisArg, args);\n        return output === target ? proxy : output;\n      };\n      privateMethodWorkaroundCache.set(value, thisBoundValue);\n      return thisBoundValue;\n    }\n  });\n  bedrockRuntimeProxyCache.set(client, proxy);\n  return proxy;\n}\nfunction wrapSend(send) {\n  return (command, optionsOrCb, cb) => {\n    if (getBedrockRuntimeOperation(command) === void 0 || typeof optionsOrCb === \"function\" || typeof cb === \"function\") {\n      return send(command, optionsOrCb, cb);\n    }\n    return bedrockRuntimeChannels.clientSend.tracePromise(\n      () => runWithAutoInstrumentationSuppressed(\n        () => send(command, optionsOrCb)\n      ),\n      {\n        arguments: [command, optionsOrCb],\n        span_info: buildBedrockRuntimeSpanInfo(command)\n      }\n    );\n  };\n}\n\n// src/wrappers/github-copilot.ts\nfunction isGitHubCopilotClient(value) {\n  return value !== null && typeof value === \"object\" && typeof value.createSession === \"function\" && typeof value.resumeSession === \"function\";\n}\nfunction wrapCopilotClient(client) {\n  if (!isGitHubCopilotClient(client)) {\n    console.warn(\n      \"[Braintrust] wrapCopilotClient: argument does not look like a CopilotClient. Not wrapping.\"\n    );\n    return client;\n  }\n  return copilotClientProxy(client);\n}\nfunction copilotClientProxy(client) {\n  const privateMethodCache = /* @__PURE__ */ new WeakMap();\n  const proxy = new Proxy(client, {\n    get(target, prop, receiver) {\n      if (prop === \"createSession\") {\n        return wrappedCreateSession(target);\n      }\n      if (prop === \"resumeSession\") {\n        return wrappedResumeSession(target);\n      }\n      const value = Reflect.get(target, prop, target);\n      if (typeof value !== \"function\") {\n        return value;\n      }\n      const cached = privateMethodCache.get(value);\n      if (cached) {\n        return cached;\n      }\n      const bound = function(...args) {\n        const thisArg = this === proxy ? target : this;\n        const result = Reflect.apply(value, thisArg, args);\n        return result === target ? proxy : result;\n      };\n      privateMethodCache.set(value, bound);\n      return bound;\n    }\n  });\n  return proxy;\n}\nfunction wrappedCreateSession(client) {\n  return (config) => gitHubCopilotChannels.createSession.tracePromise(\n    () => client.createSession(config),\n    { arguments: [config] }\n  );\n}\nfunction wrappedResumeSession(client) {\n  return (sessionId, config) => gitHubCopilotChannels.resumeSession.tracePromise(\n    () => client.resumeSession(sessionId, config),\n    { arguments: [sessionId, config] }\n  );\n}\n\n// src/wrappers/langsmith.ts\nvar WRAPPED_CLIENT_CLASS = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-client-class\"\n);\nvar WRAPPED_CLIENT_INSTANCE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-client-instance\"\n);\nvar WRAPPED_CLIENT_NAMESPACE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-client-namespace\"\n);\nvar WRAPPED_RUN_TREE_CLASS = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-run-tree-class\"\n);\nvar WRAPPED_RUN_TREE_INSTANCE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-run-tree-instance\"\n);\nvar WRAPPED_RUN_TREES_NAMESPACE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-run-trees-namespace\"\n);\nvar WRAPPED_TRACEABLE = /* @__PURE__ */ Symbol.for(\"braintrust.langsmith.wrapped-traceable\");\nvar WRAPPED_TRACEABLE_NAMESPACE = /* @__PURE__ */ Symbol.for(\n  \"braintrust.langsmith.wrapped-traceable-namespace\"\n);\nfunction wrapLangSmithTraceable(namespace) {\n  return wrapNamespaceExport(\n    namespace,\n    \"traceable\",\n    WRAPPED_TRACEABLE_NAMESPACE,\n    (value) => wrapTraceable(value)\n  );\n}\nfunction wrapLangSmithRunTrees(namespace) {\n  return wrapNamespaceExport(\n    namespace,\n    \"RunTree\",\n    WRAPPED_RUN_TREES_NAMESPACE,\n    (value) => wrapRunTreeClass(value)\n  );\n}\nfunction wrapLangSmithClient(namespace) {\n  return wrapNamespaceExport(\n    namespace,\n    \"Client\",\n    WRAPPED_CLIENT_NAMESPACE,\n    (value) => wrapClientClass(value)\n  );\n}\nfunction wrapNamespaceExport(namespace, exportName, marker, wrap2) {\n  if (!namespace || typeof namespace !== \"object\") {\n    return namespace;\n  }\n  const candidate = namespace;\n  if (candidate[marker] === true) {\n    return namespace;\n  }\n  if (typeof candidate[exportName] !== \"function\") {\n    console.warn(\n      `Unsupported LangSmith ${exportName} namespace. Not wrapping.`\n    );\n    return namespace;\n  }\n  const target = isModuleNamespace6(namespace) ? Object.setPrototypeOf({}, namespace) : candidate;\n  const moduleNamespace = target !== candidate;\n  let wrappedExport;\n  return new Proxy(target, {\n    get(target2, prop, receiver) {\n      if (prop === marker) {\n        return true;\n      }\n      const value = Reflect.get(target2, prop, receiver);\n      if (prop !== exportName || typeof value !== \"function\") {\n        return value;\n      }\n      wrappedExport ??= wrap2(value);\n      return wrappedExport;\n    },\n    getOwnPropertyDescriptor(target2, prop) {\n      const descriptor = Reflect.getOwnPropertyDescriptor(target2, prop);\n      if (descriptor || !moduleNamespace) {\n        return descriptor;\n      }\n      const namespaceDescriptor = Reflect.getOwnPropertyDescriptor(\n        candidate,\n        prop\n      );\n      return namespaceDescriptor ? { ...namespaceDescriptor, configurable: true } : void 0;\n    },\n    has(target2, prop) {\n      return Reflect.has(target2, prop) || moduleNamespace && prop in candidate;\n    },\n    ownKeys(target2) {\n      return moduleNamespace ? Reflect.ownKeys(candidate) : Reflect.ownKeys(target2);\n    }\n  });\n}\nfunction isModuleNamespace6(value) {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  if (value.constructor?.name === \"Module\") {\n    return true;\n  }\n  const firstKey = Object.keys(value)[0];\n  if (!firstKey) {\n    return false;\n  }\n  const descriptor = Object.getOwnPropertyDescriptor(value, firstKey);\n  return descriptor ? !descriptor.configurable && !descriptor.writable : false;\n}\nfunction wrapTraceable(traceable2) {\n  if (traceable2[WRAPPED_TRACEABLE]) {\n    return traceable2;\n  }\n  return new Proxy(traceable2, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_TRACEABLE) {\n        return true;\n      }\n      return Reflect.get(target, prop, receiver);\n    },\n    apply(target, thisArg, argArray) {\n      const [fn, rawConfig] = argArray;\n      const config = rawConfig && typeof rawConfig === \"object\" ? rawConfig : void 0;\n      const originalOnEnd = config?.on_end;\n      const wrappedConfig = {\n        ...config,\n        on_end(runTree) {\n          publishRunUpdate(runTree);\n          if (originalOnEnd) {\n            Reflect.apply(originalOnEnd, config, [runTree]);\n          }\n        }\n      };\n      return Reflect.apply(target, thisArg, [fn, wrappedConfig]);\n    }\n  });\n}\nfunction wrapRunTreeClass(RunTree) {\n  if (RunTree[WRAPPED_RUN_TREE_CLASS]) {\n    return RunTree;\n  }\n  return new Proxy(RunTree, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_RUN_TREE_CLASS) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    },\n    construct(target, args, newTarget) {\n      return wrapRunTreeInstance(Reflect.construct(target, args, newTarget));\n    }\n  });\n}\nfunction wrapRunTreeInstance(runTree) {\n  if (runTree[WRAPPED_RUN_TREE_INSTANCE]) {\n    return runTree;\n  }\n  return new Proxy(runTree, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_RUN_TREE_INSTANCE) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (typeof value !== \"function\") {\n        return value;\n      }\n      let wrapped;\n      if (prop === \"createChild\") {\n        wrapped = (...args) => wrapRunTreeInstance(Reflect.apply(value, target, args));\n      } else if (prop === \"postRun\") {\n        const method = value;\n        wrapped = (...args) => langSmithChannels.createRun.tracePromise(\n          () => Reflect.apply(method, target, args),\n          { arguments: [target] }\n        );\n      } else if (prop === \"patchRun\") {\n        const method = value;\n        wrapped = (...args) => langSmithChannels.updateRun.tracePromise(\n          () => Reflect.apply(method, target, args),\n          {\n            arguments: [\n              typeof target.id === \"string\" ? target.id : \"\",\n              target\n            ]\n          }\n        );\n      } else {\n        wrapped = value.bind(target);\n      }\n      return wrapped;\n    }\n  });\n}\nfunction wrapClientClass(Client) {\n  if (Client[WRAPPED_CLIENT_CLASS]) {\n    return Client;\n  }\n  return new Proxy(Client, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_CLIENT_CLASS) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      return typeof value === \"function\" ? value.bind(target) : value;\n    },\n    construct(target, args, newTarget) {\n      return wrapClientInstance(Reflect.construct(target, args, newTarget));\n    }\n  });\n}\nfunction wrapClientInstance(client) {\n  if (client[WRAPPED_CLIENT_INSTANCE]) {\n    return client;\n  }\n  return new Proxy(client, {\n    get(target, prop, receiver) {\n      if (prop === WRAPPED_CLIENT_INSTANCE) {\n        return true;\n      }\n      const value = Reflect.get(target, prop, receiver);\n      if (typeof value !== \"function\") {\n        return value;\n      }\n      let wrapped;\n      if (prop === \"createRun\") {\n        const method = value;\n        wrapped = (...args) => langSmithChannels.createRun.tracePromise(\n          () => Reflect.apply(method, target, args),\n          { arguments: args }\n        );\n      } else if (prop === \"updateRun\") {\n        const method = value;\n        wrapped = (...args) => langSmithChannels.updateRun.tracePromise(\n          () => Reflect.apply(method, target, args),\n          { arguments: args }\n        );\n      } else if (prop === \"batchIngestRuns\") {\n        const method = value;\n        wrapped = (...args) => langSmithChannels.batchIngestRuns.tracePromise(\n          () => Reflect.apply(method, target, args),\n          { arguments: args }\n        );\n      } else {\n        wrapped = value.bind(target);\n      }\n      return wrapped;\n    }\n  });\n}\nfunction publishRunUpdate(runTree) {\n  if (!runTree || typeof runTree.id !== \"string\" || !runTree.id) {\n    return;\n  }\n  try {\n    void langSmithChannels.updateRun.tracePromise(() => Promise.resolve(void 0), {\n      arguments: [runTree.id, runTree]\n    }).catch((error) => {\n      debugLogger.error(\"LangSmith traceable instrumentation failed:\", error);\n    });\n  } catch (error) {\n    debugLogger.error(\"LangSmith traceable instrumentation failed:\", error);\n  }\n}\n\n// src/wrappers/vitest/context-manager.ts\nvar VitestContextManager = class {\n  /**\n   * AsyncLocalStorage for experiment context isolation.\n   * Each async execution flow (test, concurrent test, worker thread) gets its own context.\n   */\n  contextStorage;\n  constructor() {\n    this.contextStorage = isomorph_default.newAsyncLocalStorage();\n  }\n  getCurrentContext() {\n    return this.contextStorage.getStore();\n  }\n  runInContext(context, callback) {\n    return this.contextStorage.run(context, callback);\n  }\n  createChildContext(dataset, experiment) {\n    const parent = this.getCurrentContext();\n    return {\n      dataset,\n      experiment,\n      datasetExamples: /* @__PURE__ */ new Map(),\n      parent,\n      flushResolved: true,\n      passed: 0,\n      failed: 0\n    };\n  }\n};\nvar _contextManager;\nfunction getVitestContextManager() {\n  if (!_contextManager) {\n    _contextManager = new VitestContextManager();\n  }\n  return _contextManager;\n}\n\n// src/wrappers/shared/format.ts\nfunction formatExperimentSummary(summary) {\n  const lines = [];\n  lines.push(\"\\n\\u250C\\u2500 Braintrust Experiment Summary \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2510\");\n  lines.push(`\\u2502 Experiment: ${summary.experimentName}`);\n  if (Object.keys(summary.scores).length > 0) {\n    lines.push(\"\\u2502\");\n    lines.push(\"\\u2502 Scores:\");\n    for (const [name, score] of Object.entries(summary.scores)) {\n      const percent = (score.score * 100).toFixed(2);\n      lines.push(`\\u2502   ${name}: ${percent}%`);\n    }\n  }\n  if (summary.metrics && Object.keys(summary.metrics).length > 0) {\n    lines.push(\"\\u2502\");\n    lines.push(\"\\u2502 Metrics:\");\n    for (const [name, metric] of Object.entries(summary.metrics)) {\n      const value = Number.isInteger(metric.metric) ? metric.metric.toFixed(0) : metric.metric.toFixed(2);\n      const formatted = metric.unit === \"$\" ? `${metric.unit}${value}` : `${value}${metric.unit}`;\n      lines.push(`\\u2502   ${name}: ${formatted}`);\n    }\n  }\n  if (summary.experimentUrl) {\n    lines.push(\"\\u2502\");\n    lines.push(`\\u2502 View results: ${summary.experimentUrl}`);\n  }\n  lines.push(\"\\u2514\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2518\\n\");\n  return lines.join(\"\\n\");\n}\n\n// src/wrappers/shared/flush.ts\nasync function summarizeAndFlush(experiment, options) {\n  const shouldDisplay = options.displaySummary ?? true;\n  if (!shouldDisplay) {\n    await experiment.flush();\n    return;\n  }\n  const summary = await experiment.summarize();\n  console.log(formatExperimentSummary(summary));\n}\n\n// src/wrappers/vitest/flush-manager.ts\nvar FlushCoordinator = class {\n  activeFlushes = /* @__PURE__ */ new Map();\n  async coordinateFlush(context, config) {\n    if (!context) return;\n    const experimentId = await context.experiment.id;\n    if (this.activeFlushes.has(experimentId)) {\n      return this.activeFlushes.get(experimentId);\n    }\n    const flushPromise = summarizeAndFlush(context.experiment, {\n      displaySummary: config.displaySummary\n    });\n    this.activeFlushes.set(experimentId, flushPromise);\n    try {\n      await flushPromise;\n    } finally {\n      this.activeFlushes.delete(experimentId);\n    }\n  }\n};\nvar flushCoordinator = new FlushCoordinator();\nasync function flushExperimentWithSync(context, config) {\n  return flushCoordinator.coordinateFlush(context, config);\n}\n\n// src/wrappers/shared/scorers.ts\nasync function runScorers(args) {\n  const { scorers, output, expected, input, metadata, span } = args;\n  const scorerArgs2 = {\n    output,\n    expected,\n    input,\n    metadata: metadata || {}\n  };\n  await Promise.all(\n    scorers.map(async (scorer) => {\n      try {\n        const result = await scorer(scorerArgs2);\n        const scores = normalizeScores(result);\n        if (scores.length > 0) {\n          const accScores = {};\n          let accMetadata = {};\n          for (const score of scores) {\n            accScores[score.name] = score.score;\n            if (score.metadata && Object.keys(score.metadata).length > 0) {\n              accMetadata = { ...accMetadata, ...score.metadata };\n            }\n          }\n          span.log({\n            scores: accScores,\n            ...Object.keys(accMetadata).length > 0 ? { metadata: accMetadata } : {}\n          });\n        }\n      } catch (scorerError) {\n        console.warn(\"Braintrust: Scorer failed:\", scorerError);\n        const errorStr = scorerError instanceof Error ? `${scorerError.message}\n\n${scorerError.stack || \"\"}` : String(scorerError);\n        span.log({ metadata: { scorer_error: errorStr } });\n      }\n    })\n  );\n}\nfunction isScore(val) {\n  return \"name\" in val && \"score\" in val;\n}\nfunction normalizeScores(result) {\n  if (result === null || result === void 0) {\n    return [];\n  }\n  if (typeof result === \"number\") {\n    return [{ name: \"score\", score: result }];\n  }\n  if (Array.isArray(result)) {\n    return result.filter(\n      (s) => s !== null && s !== void 0 && typeof s === \"object\" && isScore(s)\n    );\n  }\n  if (typeof result === \"object\" && result !== null && \"score\" in result) {\n    return [{ ...result, name: result.name ?? \"score\" }];\n  }\n  return [];\n}\n\n// src/wrappers/shared/traced-eval.ts\nasync function runTracedEval(args) {\n  return args.experiment.traced(\n    async (span) => {\n      let testResult;\n      let testError;\n      try {\n        testResult = await args.fn();\n      } catch (error) {\n        testError = error;\n      }\n      if (args.scorers && args.scorers.length > 0) {\n        await runScorers({\n          scorers: args.scorers,\n          output: testResult,\n          expected: args.expected,\n          input: args.input,\n          metadata: args.metadata,\n          span\n        });\n      }\n      if (testError) {\n        span.log({ scores: { pass: 0 } });\n        logError(span, testError);\n        throw testError;\n      }\n      span.log({\n        scores: { pass: 1 },\n        ...testResult !== void 0 ? { output: testResult } : {}\n      });\n      return testResult;\n    },\n    {\n      name: args.spanName,\n      spanAttributes: {\n        type: \"task\" /* TASK */\n      },\n      event: {\n        input: args.input,\n        expected: args.expected,\n        metadata: args.metadata,\n        tags: args.tags\n      }\n    }\n  );\n}\n\n// src/wrappers/vitest/wrapper.ts\nfunction getExperimentContext() {\n  return getVitestContextManager().getCurrentContext() ?? null;\n}\nfunction wrapTest(originalTest, config) {\n  const wrapBare = (testFn) => {\n    const wrapped = function(name, configOrFn, maybeFn) {\n      const isEnhanced = typeof configOrFn !== \"function\";\n      const testConfig = isEnhanced ? configOrFn : void 0;\n      if (isEnhanced && testConfig?.data && Array.isArray(testConfig.data)) {\n        const dataRecords = testConfig.data;\n        const testFn2 = maybeFn;\n        if (!testFn2) {\n          throw new Error(\n            \"Braintrust: test function required when using data array\"\n          );\n        }\n        dataRecords.forEach((record, index) => {\n          const mergedConfig = {\n            ...testConfig,\n            input: record.input,\n            expected: record.expected,\n            metadata: { ...testConfig.metadata, ...record.metadata },\n            tags: [...testConfig.tags || [], ...record.tags || []],\n            data: void 0\n          };\n          wrappedTest(`${name} [${index}]`, mergedConfig, testFn2);\n        });\n        return;\n      }\n      let vitestOptions;\n      if (testConfig) {\n        const {\n          input: _input,\n          expected: _expected,\n          metadata: _metadata,\n          tags: _tags,\n          scorers: _scorers,\n          data: _data,\n          ...rest\n        } = testConfig;\n        vitestOptions = rest;\n      }\n      const hasVitestOptions = vitestOptions && Object.keys(vitestOptions).length > 0;\n      const registrationContext = getExperimentContext();\n      const testImplementation = async (vitestContext) => {\n        const experimentContext = getExperimentContext() ?? registrationContext;\n        const experiment = experimentContext?.experiment;\n        if (config.onProgress) {\n          config.onProgress({ type: \"test_start\", testName: name });\n        }\n        const startTime = performance.now();\n        let passed = false;\n        try {\n          if (!experiment) {\n            if (testConfig && maybeFn) {\n              const params = {\n                input: testConfig.input,\n                expected: testConfig.expected,\n                metadata: testConfig.metadata\n              };\n              const context = {\n                ...vitestContext,\n                ...params\n              };\n              const result2 = await maybeFn(context);\n              passed = true;\n              return result2;\n            } else if (typeof configOrFn === \"function\") {\n              const result2 = await configOrFn(vitestContext);\n              passed = true;\n              return result2;\n            }\n            passed = true;\n            return;\n          }\n          const result = await runTracedEval({\n            experiment,\n            spanName: name,\n            input: testConfig?.input,\n            expected: testConfig?.expected,\n            metadata: testConfig?.metadata,\n            tags: testConfig?.tags,\n            scorers: testConfig?.scorers,\n            fn: async () => {\n              if (testConfig && maybeFn) {\n                const params = {\n                  input: testConfig.input,\n                  expected: testConfig.expected,\n                  metadata: testConfig.metadata\n                };\n                const context = {\n                  ...vitestContext,\n                  ...params\n                };\n                return await maybeFn(context);\n              } else if (typeof configOrFn === \"function\") {\n                return await configOrFn(vitestContext);\n              }\n            }\n          });\n          passed = true;\n          return result;\n        } catch (error) {\n          passed = false;\n          throw error;\n        } finally {\n          const duration = performance.now() - startTime;\n          if (experimentContext) {\n            if (passed) {\n              experimentContext.passed = (experimentContext.passed ?? 0) + 1;\n            } else {\n              experimentContext.failed = (experimentContext.failed ?? 0) + 1;\n            }\n          }\n          if (config.onProgress) {\n            config.onProgress({\n              type: \"test_complete\",\n              testName: name,\n              passed,\n              duration\n            });\n          }\n        }\n      };\n      return testFn(\n        name,\n        hasVitestOptions ? vitestOptions : void 0,\n        testImplementation\n      );\n    };\n    return wrapped;\n  };\n  const wrappedTest = wrapBare(originalTest);\n  wrappedTest.skip = wrapBare(originalTest.skip);\n  wrappedTest.only = wrapBare(originalTest.only);\n  wrappedTest.concurrent = wrapBare(originalTest.concurrent);\n  if (originalTest.todo) wrappedTest.todo = originalTest.todo;\n  if (originalTest.each) wrappedTest.each = originalTest.each;\n  return wrappedTest;\n}\nfunction wrapDescribe(originalDescribe, config, afterAll) {\n  const wrapBare = (describeFn) => {\n    const wrapped = function(suiteName, factory) {\n      return describeFn(suiteName, () => {\n        const contextManager = getVitestContextManager();\n        let context = null;\n        const getOrCreateContext = () => {\n          if (!context) {\n            const experimentName = `${suiteName}-${(/* @__PURE__ */ new Date()).toISOString()}`;\n            const experiment = config.projectId ? initExperiment({\n              projectId: config.projectId,\n              experiment: experimentName\n            }) : initExperiment(config.projectName || suiteName, {\n              experiment: experimentName\n            });\n            context = contextManager.createChildContext(void 0, experiment);\n          }\n          return context;\n        };\n        const lazyContext = {\n          get dataset() {\n            return getOrCreateContext().dataset;\n          },\n          get experiment() {\n            return getOrCreateContext().experiment;\n          },\n          get datasetExamples() {\n            return getOrCreateContext().datasetExamples;\n          },\n          get parent() {\n            return getOrCreateContext().parent;\n          },\n          get flushPromise() {\n            return getOrCreateContext().flushPromise;\n          },\n          set flushPromise(value) {\n            if (context) context.flushPromise = value;\n          },\n          get flushResolved() {\n            return getOrCreateContext().flushResolved;\n          },\n          set flushResolved(value) {\n            if (context) context.flushResolved = value;\n          }\n        };\n        if (config.onProgress) {\n          config.onProgress({ type: \"suite_start\", suiteName });\n        }\n        contextManager.runInContext(lazyContext, factory);\n        if (afterAll) {\n          afterAll(async () => {\n            await flushExperimentWithSync(context, config);\n            if (config.onProgress) {\n              config.onProgress({\n                type: \"suite_complete\",\n                suiteName,\n                passed: context?.passed ?? 0,\n                failed: context?.failed ?? 0\n              });\n            }\n          });\n        }\n      });\n    };\n    return wrapped;\n  };\n  const wrappedDescribe = wrapBare(originalDescribe);\n  wrappedDescribe.skip = wrapBare(originalDescribe.skip);\n  wrappedDescribe.only = wrapBare(originalDescribe.only);\n  wrappedDescribe.concurrent = wrapBare(originalDescribe.concurrent);\n  if (originalDescribe.todo) wrappedDescribe.todo = originalDescribe.todo;\n  if (originalDescribe.each)\n    wrappedDescribe.each = originalDescribe.each;\n  return wrappedDescribe;\n}\n\n// src/wrappers/vitest/expect-wrapper.ts\nfunction proxyAssertion(assertion, value, key, span) {\n  return new Proxy(assertion, {\n    get(target, prop, receiver) {\n      const original = Reflect.get(target, prop, receiver);\n      if (typeof original === \"function\") {\n        return function(...args) {\n          let result;\n          try {\n            result = original.apply(target, args);\n          } catch (err) {\n            span.log({ output: { [key]: value }, scores: { [key]: 0 } });\n            throw err;\n          }\n          if (result !== null && typeof result === \"object\" && \"then\" in result && typeof Reflect.get(result, \"then\") === \"function\") {\n            return Promise.resolve(result).then(\n              (v) => {\n                span.log({ output: { [key]: value }, scores: { [key]: 1 } });\n                return v;\n              },\n              (err) => {\n                span.log({ output: { [key]: value }, scores: { [key]: 0 } });\n                throw err;\n              }\n            );\n          }\n          span.log({ output: { [key]: value }, scores: { [key]: 1 } });\n          return result;\n        };\n      }\n      if (original !== null && typeof original === \"object\") {\n        return proxyAssertion(original, value, key, span);\n      }\n      return original;\n    }\n  });\n}\nfunction wrapExpect(originalExpect) {\n  const wrapped = function(value, message) {\n    if (message === void 0) {\n      return originalExpect(value);\n    }\n    const assertion = originalExpect(value, message);\n    const span = currentSpan();\n    if (!span) {\n      return assertion;\n    }\n    if (assertion === null || typeof assertion !== \"object\") return assertion;\n    return proxyAssertion(assertion, value, message, span);\n  };\n  return Object.assign(wrapped, originalExpect);\n}\n\n// src/wrappers/shared/logging.ts\nfunction logOutputs(outputs) {\n  currentSpan().log({ output: outputs });\n}\nfunction logFeedback(feedback) {\n  currentSpan().log({\n    scores: { [feedback.name]: feedback.score },\n    metadata: feedback.metadata\n  });\n}\nfunction getCurrentSpan() {\n  return currentSpan();\n}\n\n// src/wrappers/vitest/index.ts\nfunction wrapVitest(vitestMethods, config = {}) {\n  if (!vitestMethods.test) {\n    throw new Error(\n      \"Braintrust: vitestMethods.test is required. Please pass in the test function from vitest.\"\n    );\n  }\n  if (!vitestMethods.describe) {\n    throw new Error(\n      \"Braintrust: vitestMethods.describe is required. Please pass in the describe function from vitest.\"\n    );\n  }\n  if (!vitestMethods.expect) {\n    throw new Error(\n      \"Braintrust: vitestMethods.expect is required. Please pass in the expect function from vitest.\"\n    );\n  }\n  const wrappedTest = wrapTest(vitestMethods.test, config);\n  const wrappedDescribe = wrapDescribe(\n    vitestMethods.describe,\n    config,\n    vitestMethods.afterAll\n  );\n  return {\n    test: wrappedTest,\n    it: wrappedTest,\n    expect: wrapExpect(vitestMethods.expect),\n    describe: wrappedDescribe,\n    beforeAll: vitestMethods.beforeAll || (() => {\n    }),\n    afterAll: vitestMethods.afterAll || (() => {\n    }),\n    beforeEach: vitestMethods.beforeEach,\n    afterEach: vitestMethods.afterEach,\n    logOutputs,\n    logFeedback,\n    getCurrentSpan,\n    flushExperiment: async (options) => {\n      const ctx = getExperimentContext();\n      if (!ctx) {\n        console.warn(\n          \"Braintrust: No experiment context found. Make sure you're using bt.describe() and calling flushExperiment() within an afterAll() hook.\"\n        );\n        return;\n      }\n      await summarizeAndFlush(ctx.experiment, {\n        displaySummary: options?.displaySummary ?? config.displaySummary\n      });\n    }\n  };\n}\n\n// src/wrappers/node-test/suite.ts\nfunction initNodeTestSuite(config) {\n  let experiment;\n  const getOrCreateExperiment = () => {\n    if (experiment) {\n      return experiment;\n    }\n    const experimentName = config.experimentName || `${config.projectName}-${(/* @__PURE__ */ new Date()).toISOString()}`;\n    experiment = initExperiment(config.projectName, {\n      experiment: experimentName\n    });\n    return experiment;\n  };\n  function evalFunc(evalConfig, fn) {\n    return async (t) => {\n      const exp = getOrCreateExperiment();\n      const spanName = evalConfig.name ?? t.name ?? \"unnamed test\";\n      if (config.onProgress) {\n        config.onProgress({ type: \"test_start\", testName: spanName });\n      }\n      const startTime = performance.now();\n      let passed = false;\n      try {\n        await runTracedEval({\n          experiment: exp,\n          spanName,\n          input: evalConfig.input,\n          expected: evalConfig.expected,\n          metadata: evalConfig.metadata,\n          tags: evalConfig.tags,\n          scorers: evalConfig.scorers,\n          fn: () => fn({\n            input: evalConfig.input,\n            expected: evalConfig.expected,\n            metadata: evalConfig.metadata\n          })\n        });\n        passed = true;\n      } catch (error) {\n        passed = false;\n        throw error;\n      } finally {\n        if (config.onProgress) {\n          config.onProgress({\n            type: \"test_complete\",\n            testName: spanName,\n            passed,\n            duration: performance.now() - startTime\n          });\n        }\n      }\n    };\n  }\n  async function flush2() {\n    if (!experiment) {\n      return;\n    }\n    await summarizeAndFlush(experiment, {\n      displaySummary: config.displaySummary\n    });\n    experiment = void 0;\n  }\n  const suite = {\n    eval: evalFunc,\n    flush: flush2\n  };\n  if (config.after) {\n    config.after(() => suite.flush());\n  }\n  return suite;\n}\n\n// src/graph-framework.ts\nvar graph_framework_exports = {};\n__export(graph_framework_exports, {\n  AggregatorNode: () => AggregatorNode,\n  GateNode: () => GateNode,\n  GraphBuilder: () => GraphBuilder,\n  InputNode: () => InputNode,\n  LiteralNode: () => LiteralNode,\n  OutputNode: () => OutputNode,\n  PromptNode: () => PromptNode,\n  PromptTemplateNode: () => PromptTemplateNode,\n  createGraph: () => createGraph,\n  default: () => graph_framework_default,\n  escapePath: () => escapePath,\n  unescapePath: () => unescapePath\n});\nvar GraphBuilder = class {\n  nodes = /* @__PURE__ */ new Map();\n  edges = {};\n  nodeLikeNodes = /* @__PURE__ */ new Map();\n  // Maps node-like objects, like prompts, to their nodes\n  // Special nodes\n  IN;\n  OUT;\n  constructor() {\n    this.IN = this.createInputNode();\n    this.OUT = this.createOutputNode();\n  }\n  // Create the final GraphData object\n  async build(context) {\n    const nodes = await Promise.all(\n      Array.from(this.nodes.values()).map(async (node) => [\n        node.id,\n        await node.build(context)\n      ])\n    );\n    return {\n      type: \"graph\",\n      nodes: Object.fromEntries(nodes),\n      // XXX Need to resolve the lazy nodes\n      edges: this.edges\n    };\n  }\n  addEdge({\n    source,\n    sourceVar,\n    target,\n    targetVar,\n    expr,\n    purpose\n  }) {\n    const [sourceNode, sourcePath] = this.resolveNode(source);\n    if (sourcePath.length > 0) {\n      throw new Error(\"Source path must be empty\");\n    }\n    const [targetNode, targetPath] = this.resolveNode(target);\n    if (targetPath.length > 0) {\n      throw new Error(\"Target path must be empty\");\n    }\n    const id = this.generateId();\n    sourceVar = sourceVar ?? \"output\";\n    targetVar = targetVar ?? (purpose === \"data\" ? \"input\" : this.generateId(\"control\"));\n    for (const edge of Object.values(this.edges)) {\n      if (edge.target.node === targetNode.id && edge.target.variable === targetVar) {\n        throw new Error(\n          `Variable name ${targetVar} already set on ${targetNode.id}`\n        );\n      }\n    }\n    this.edges[id] = {\n      source: { node: sourceNode.id, variable: sourceVar },\n      target: { node: targetNode.id, variable: targetVar },\n      purpose\n    };\n  }\n  resolveNode(node) {\n    if (node instanceof Prompt2) {\n      const cached = this.nodeLikeNodes.get(node);\n      if (cached) {\n        return [cached, []];\n      }\n      const promptNode = this.createPromptNode(node);\n      this.nodeLikeNodes.set(node, promptNode);\n      return [promptNode, []];\n    } else if (isProxyVariable(node)) {\n      return proxyVariableToNode(node);\n    } else {\n      return [node, []];\n    }\n  }\n  // Create a literal node\n  literal(value) {\n    const preview = (typeof value === \"string\" ? value : JSON.stringify(value)).slice(0, 16);\n    const id = this.generateId(`literal-${preview}`);\n    const literalNode = new LiteralNode(this, id, value);\n    this.nodes.set(id, literalNode);\n    return literalNode;\n  }\n  gate(options) {\n    const id = this.generateId(\"gate\");\n    const gateNode = new GateNode(this, id, options.condition);\n    this.nodes.set(id, gateNode);\n    return gateNode;\n  }\n  aggregator() {\n    const id = this.generateId(\"aggregator\");\n    const aggregatorNode = new AggregatorNode(this, id);\n    this.nodes.set(id, aggregatorNode);\n    return aggregatorNode;\n  }\n  promptTemplate(options) {\n    const id = this.generateId(\"prompt-template\");\n    const promptTemplateNode = new PromptTemplateNode(this, id, options.prompt);\n    this.nodes.set(id, promptTemplateNode);\n    return promptTemplateNode;\n  }\n  // public call(node: NodeLike, input: CallArgs): Node {\n  //   const [resolvedNode, path] = this.resolveNode(node);\n  //   if (resolvedNode instanceof SingleInputNode) {\n  //     return resolvedNode.call(input, path);\n  //   } else {\n  //     throw new Error(\"Node must be a SingleInputNode\");\n  //   }\n  // }\n  // Helper to generate node IDs\n  generateId(name) {\n    const uuid4 = newId();\n    if (name) {\n      return `${name}-${uuid4.slice(0, 8)}`;\n    } else {\n      return uuid4;\n    }\n  }\n  // Create an input node\n  createInputNode() {\n    const id = this.generateId(\"input\");\n    const inputNode = new InputNode(this, id);\n    this.nodes.set(id, inputNode);\n    return inputNode;\n  }\n  // Create an output node\n  createOutputNode() {\n    const id = this.generateId(\"output\");\n    const outputNode = new OutputNode(this, id);\n    this.nodes.set(id, outputNode);\n    return outputNode;\n  }\n  // Create a prompt node from a CodePrompt\n  createPromptNode(prompt) {\n    const id = this.generateId(`prompt-${prompt.slug}`);\n    const promptNode = new PromptNode(this, id, prompt);\n    this.nodes.set(id, promptNode);\n    return promptNode;\n  }\n};\nfunction isProxyVariable(node) {\n  return typeof node === \"object\" && node !== null && \"__type\" in node && // @ts-ignore\n  node.__type === \"proxy-variable\";\n}\nfunction proxyVariableToNode(proxy) {\n  return [proxy.__node, proxy.__path];\n}\nvar BaseNode = class {\n  constructor(graph, id) {\n    this.graph = graph;\n    this.id = id;\n  }\n  graph;\n  id;\n  __type = \"node\";\n  dependencies = [];\n  addDependency(dependency) {\n    this.dependencies.push(dependency);\n  }\n};\nvar InputNode = class extends BaseNode {\n  constructor(graph, id) {\n    super(graph, id);\n  }\n  async build(context) {\n    return {\n      type: \"input\",\n      description: \"Input to the graph\"\n    };\n  }\n};\nvar OutputNode = class extends BaseNode {\n  constructor(graph, id) {\n    super(graph, id);\n  }\n  async build(context) {\n    return {\n      type: \"output\",\n      description: \"Output of the graph\"\n    };\n  }\n};\nvar PromptNode = class extends BaseNode {\n  constructor(graph, id, prompt) {\n    super(graph, id);\n    this.prompt = prompt;\n  }\n  prompt;\n  async build(context) {\n    return {\n      type: \"function\",\n      function: await context.getFunctionId(this.prompt)\n    };\n  }\n};\nvar GateNode = class extends BaseNode {\n  constructor(graph, id, condition) {\n    super(graph, id);\n    this.condition = condition;\n  }\n  condition;\n  async build(context) {\n    return {\n      type: \"gate\",\n      description: \"Conditional gate\",\n      condition: this.condition\n    };\n  }\n};\nvar AggregatorNode = class extends BaseNode {\n  constructor(graph, id) {\n    super(graph, id);\n  }\n  async build(context) {\n    return {\n      type: \"aggregator\",\n      description: \"Aggregator\"\n    };\n  }\n};\nvar PromptTemplateNode = class extends BaseNode {\n  constructor(graph, id, prompt) {\n    super(graph, id);\n    this.prompt = prompt;\n  }\n  prompt;\n  async build(context) {\n    return {\n      type: \"prompt_template\",\n      prompt: this.prompt\n    };\n  }\n};\nvar LiteralNode = class extends BaseNode {\n  constructor(graph, id, value) {\n    super(graph, id);\n    this.value = value;\n  }\n  value;\n  async build(context) {\n    return {\n      type: \"literal\",\n      value: this.value\n    };\n  }\n};\nfunction createGraph() {\n  const graphBuilder = new GraphBuilder();\n  return graphBuilder;\n}\nfunction escapePath(parts) {\n  if (parts.length === 0) {\n    return void 0;\n  }\n  return parts.map((part) => {\n    if (/[^\\w-]/.test(part)) {\n      const escaped = part.replace(/[\"\\\\]/g, \"\\\\$&\");\n      return `\"${escaped}\"`;\n    }\n    return part;\n  }).join(\".\");\n}\nfunction unescapePath(path) {\n  const regex = /\"((?:\\\\[\"\\\\]|[^\"\\\\])*)\"|([^\\.]+)/g;\n  const matches = path.match(regex);\n  return matches ? matches.map((match) => {\n    if (match.startsWith('\"')) {\n      return match.slice(1, -1).replace(/\\\\([\"\\\\])/g, \"$1\");\n    }\n    return match;\n  }) : [];\n}\nvar graph_framework_default = { createGraph };\n\n// ../node_modules/.pnpm/async@3.2.5/node_modules/async/dist/async.mjs\nfunction initialParams(fn) {\n  return function(...args) {\n    var callback = args.pop();\n    return fn.call(this, args, callback);\n  };\n}\nvar hasQueueMicrotask = typeof queueMicrotask === \"function\" && queueMicrotask;\nvar hasSetImmediate = typeof setImmediate === \"function\" && setImmediate;\nvar hasNextTick = typeof process === \"object\" && typeof process.nextTick === \"function\";\nfunction fallback(fn) {\n  setTimeout(fn, 0);\n}\nfunction wrap(defer) {\n  return (fn, ...args) => defer(() => fn(...args));\n}\nvar _defer$1;\nif (hasQueueMicrotask) {\n  _defer$1 = queueMicrotask;\n} else if (hasSetImmediate) {\n  _defer$1 = setImmediate;\n} else if (hasNextTick) {\n  _defer$1 = process.nextTick;\n} else {\n  _defer$1 = fallback;\n}\nvar setImmediate$1 = wrap(_defer$1);\nfunction asyncify(func) {\n  if (isAsync(func)) {\n    return function(...args) {\n      const callback = args.pop();\n      const promise = func.apply(this, args);\n      return handlePromise(promise, callback);\n    };\n  }\n  return initialParams(function(args, callback) {\n    var result;\n    try {\n      result = func.apply(this, args);\n    } catch (e) {\n      return callback(e);\n    }\n    if (result && typeof result.then === \"function\") {\n      return handlePromise(result, callback);\n    } else {\n      callback(null, result);\n    }\n  });\n}\nfunction handlePromise(promise, callback) {\n  return promise.then((value) => {\n    invokeCallback(callback, null, value);\n  }, (err) => {\n    invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err));\n  });\n}\nfunction invokeCallback(callback, error, value) {\n  try {\n    callback(error, value);\n  } catch (err) {\n    setImmediate$1((e) => {\n      throw e;\n    }, err);\n  }\n}\nfunction isAsync(fn) {\n  return fn[Symbol.toStringTag] === \"AsyncFunction\";\n}\nfunction isAsyncGenerator2(fn) {\n  return fn[Symbol.toStringTag] === \"AsyncGenerator\";\n}\nfunction isAsyncIterable6(obj) {\n  return typeof obj[Symbol.asyncIterator] === \"function\";\n}\nfunction wrapAsync(asyncFn) {\n  if (typeof asyncFn !== \"function\") throw new Error(\"expected a function\");\n  return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n}\nfunction awaitify(asyncFn, arity) {\n  if (!arity) arity = asyncFn.length;\n  if (!arity) throw new Error(\"arity is undefined\");\n  function awaitable(...args) {\n    if (typeof args[arity - 1] === \"function\") {\n      return asyncFn.apply(this, args);\n    }\n    return new Promise((resolve, reject2) => {\n      args[arity - 1] = (err, ...cbArgs) => {\n        if (err) return reject2(err);\n        resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]);\n      };\n      asyncFn.apply(this, args);\n    });\n  }\n  return awaitable;\n}\nfunction applyEach$1(eachfn) {\n  return function applyEach2(fns, ...callArgs) {\n    const go = awaitify(function(callback) {\n      var that = this;\n      return eachfn(fns, (fn, cb) => {\n        wrapAsync(fn).apply(that, callArgs.concat(cb));\n      }, callback);\n    });\n    return go;\n  };\n}\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n  arr = arr || [];\n  var results = [];\n  var counter = 0;\n  var _iteratee = wrapAsync(iteratee);\n  return eachfn(arr, (value, _, iterCb) => {\n    var index = counter++;\n    _iteratee(value, (err, v) => {\n      results[index] = v;\n      iterCb(err);\n    });\n  }, (err) => {\n    callback(err, results);\n  });\n}\nfunction isArrayLike6(value) {\n  return value && typeof value.length === \"number\" && value.length >= 0 && value.length % 1 === 0;\n}\nvar breakLoop = {};\nvar breakLoop$1 = breakLoop;\nfunction once(fn) {\n  function wrapper(...args) {\n    if (fn === null) return;\n    var callFn = fn;\n    fn = null;\n    callFn.apply(this, args);\n  }\n  Object.assign(wrapper, fn);\n  return wrapper;\n}\nfunction getIterator(coll) {\n  return coll[Symbol.iterator] && coll[Symbol.iterator]();\n}\nfunction createArrayIterator(coll) {\n  var i = -1;\n  var len = coll.length;\n  return function next() {\n    return ++i < len ? { value: coll[i], key: i } : null;\n  };\n}\nfunction createES2015Iterator(iterator) {\n  var i = -1;\n  return function next() {\n    var item = iterator.next();\n    if (item.done)\n      return null;\n    i++;\n    return { value: item.value, key: i };\n  };\n}\nfunction createObjectIterator(obj) {\n  var okeys = obj ? Object.keys(obj) : [];\n  var i = -1;\n  var len = okeys.length;\n  return function next() {\n    var key = okeys[++i];\n    if (key === \"__proto__\") {\n      return next();\n    }\n    return i < len ? { value: obj[key], key } : null;\n  };\n}\nfunction createIterator(coll) {\n  if (isArrayLike6(coll)) {\n    return createArrayIterator(coll);\n  }\n  var iterator = getIterator(coll);\n  return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\nfunction onlyOnce(fn) {\n  return function(...args) {\n    if (fn === null) throw new Error(\"Callback was already called.\");\n    var callFn = fn;\n    fn = null;\n    callFn.apply(this, args);\n  };\n}\nfunction asyncEachOfLimit(generator, limit, iteratee, callback) {\n  let done = false;\n  let canceled = false;\n  let awaiting = false;\n  let running = 0;\n  let idx = 0;\n  function replenish() {\n    if (running >= limit || awaiting || done) return;\n    awaiting = true;\n    generator.next().then(({ value, done: iterDone }) => {\n      if (canceled || done) return;\n      awaiting = false;\n      if (iterDone) {\n        done = true;\n        if (running <= 0) {\n          callback(null);\n        }\n        return;\n      }\n      running++;\n      iteratee(value, idx, iterateeCallback);\n      idx++;\n      replenish();\n    }).catch(handleError);\n  }\n  function iterateeCallback(err, result) {\n    running -= 1;\n    if (canceled) return;\n    if (err) return handleError(err);\n    if (err === false) {\n      done = true;\n      canceled = true;\n      return;\n    }\n    if (result === breakLoop$1 || done && running <= 0) {\n      done = true;\n      return callback(null);\n    }\n    replenish();\n  }\n  function handleError(err) {\n    if (canceled) return;\n    awaiting = false;\n    done = true;\n    callback(err);\n  }\n  replenish();\n}\nvar eachOfLimit$2 = (limit) => {\n  return (obj, iteratee, callback) => {\n    callback = once(callback);\n    if (limit <= 0) {\n      throw new RangeError(\"concurrency limit cannot be less than 1\");\n    }\n    if (!obj) {\n      return callback(null);\n    }\n    if (isAsyncGenerator2(obj)) {\n      return asyncEachOfLimit(obj, limit, iteratee, callback);\n    }\n    if (isAsyncIterable6(obj)) {\n      return asyncEachOfLimit(obj[Symbol.asyncIterator](), limit, iteratee, callback);\n    }\n    var nextElem = createIterator(obj);\n    var done = false;\n    var canceled = false;\n    var running = 0;\n    var looping = false;\n    function iterateeCallback(err, value) {\n      if (canceled) return;\n      running -= 1;\n      if (err) {\n        done = true;\n        callback(err);\n      } else if (err === false) {\n        done = true;\n        canceled = true;\n      } else if (value === breakLoop$1 || done && running <= 0) {\n        done = true;\n        return callback(null);\n      } else if (!looping) {\n        replenish();\n      }\n    }\n    function replenish() {\n      looping = true;\n      while (running < limit && !done) {\n        var elem = nextElem();\n        if (elem === null) {\n          done = true;\n          if (running <= 0) {\n            callback(null);\n          }\n          return;\n        }\n        running += 1;\n        iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n      }\n      looping = false;\n    }\n    replenish();\n  };\n};\nfunction eachOfLimit(coll, limit, iteratee, callback) {\n  return eachOfLimit$2(limit)(coll, wrapAsync(iteratee), callback);\n}\nvar eachOfLimit$1 = awaitify(eachOfLimit, 4);\nfunction eachOfArrayLike(coll, iteratee, callback) {\n  callback = once(callback);\n  var index = 0, completed = 0, { length } = coll, canceled = false;\n  if (length === 0) {\n    callback(null);\n  }\n  function iteratorCallback(err, value) {\n    if (err === false) {\n      canceled = true;\n    }\n    if (canceled === true) return;\n    if (err) {\n      callback(err);\n    } else if (++completed === length || value === breakLoop$1) {\n      callback(null);\n    }\n  }\n  for (; index < length; index++) {\n    iteratee(coll[index], index, onlyOnce(iteratorCallback));\n  }\n}\nfunction eachOfGeneric(coll, iteratee, callback) {\n  return eachOfLimit$1(coll, Infinity, iteratee, callback);\n}\nfunction eachOf(coll, iteratee, callback) {\n  var eachOfImplementation = isArrayLike6(coll) ? eachOfArrayLike : eachOfGeneric;\n  return eachOfImplementation(coll, wrapAsync(iteratee), callback);\n}\nvar eachOf$1 = awaitify(eachOf, 3);\nfunction map(coll, iteratee, callback) {\n  return _asyncMap(eachOf$1, coll, iteratee, callback);\n}\nvar map$1 = awaitify(map, 3);\nvar applyEach = applyEach$1(map$1);\nfunction eachOfSeries(coll, iteratee, callback) {\n  return eachOfLimit$1(coll, 1, iteratee, callback);\n}\nvar eachOfSeries$1 = awaitify(eachOfSeries, 3);\nfunction mapSeries(coll, iteratee, callback) {\n  return _asyncMap(eachOfSeries$1, coll, iteratee, callback);\n}\nvar mapSeries$1 = awaitify(mapSeries, 3);\nvar applyEachSeries = applyEach$1(mapSeries$1);\nvar DLL = class {\n  constructor() {\n    this.head = this.tail = null;\n    this.length = 0;\n  }\n  removeLink(node) {\n    if (node.prev) node.prev.next = node.next;\n    else this.head = node.next;\n    if (node.next) node.next.prev = node.prev;\n    else this.tail = node.prev;\n    node.prev = node.next = null;\n    this.length -= 1;\n    return node;\n  }\n  empty() {\n    while (this.head) this.shift();\n    return this;\n  }\n  insertAfter(node, newNode) {\n    newNode.prev = node;\n    newNode.next = node.next;\n    if (node.next) node.next.prev = newNode;\n    else this.tail = newNode;\n    node.next = newNode;\n    this.length += 1;\n  }\n  insertBefore(node, newNode) {\n    newNode.prev = node.prev;\n    newNode.next = node;\n    if (node.prev) node.prev.next = newNode;\n    else this.head = newNode;\n    node.prev = newNode;\n    this.length += 1;\n  }\n  unshift(node) {\n    if (this.head) this.insertBefore(this.head, node);\n    else setInitial(this, node);\n  }\n  push(node) {\n    if (this.tail) this.insertAfter(this.tail, node);\n    else setInitial(this, node);\n  }\n  shift() {\n    return this.head && this.removeLink(this.head);\n  }\n  pop() {\n    return this.tail && this.removeLink(this.tail);\n  }\n  toArray() {\n    return [...this];\n  }\n  *[Symbol.iterator]() {\n    var cur = this.head;\n    while (cur) {\n      yield cur.data;\n      cur = cur.next;\n    }\n  }\n  remove(testFn) {\n    var curr = this.head;\n    while (curr) {\n      var { next } = curr;\n      if (testFn(curr)) {\n        this.removeLink(curr);\n      }\n      curr = next;\n    }\n    return this;\n  }\n};\nfunction setInitial(dll, node) {\n  dll.length = 1;\n  dll.head = dll.tail = node;\n}\nfunction queue$1(worker, concurrency, payload) {\n  if (concurrency == null) {\n    concurrency = 1;\n  } else if (concurrency === 0) {\n    throw new RangeError(\"Concurrency must not be zero\");\n  }\n  var _worker = wrapAsync(worker);\n  var numRunning = 0;\n  var workersList = [];\n  const events = {\n    error: [],\n    drain: [],\n    saturated: [],\n    unsaturated: [],\n    empty: []\n  };\n  function on(event, handler) {\n    events[event].push(handler);\n  }\n  function once2(event, handler) {\n    const handleAndRemove = (...args) => {\n      off(event, handleAndRemove);\n      handler(...args);\n    };\n    events[event].push(handleAndRemove);\n  }\n  function off(event, handler) {\n    if (!event) return Object.keys(events).forEach((ev) => events[ev] = []);\n    if (!handler) return events[event] = [];\n    events[event] = events[event].filter((ev) => ev !== handler);\n  }\n  function trigger(event, ...args) {\n    events[event].forEach((handler) => handler(...args));\n  }\n  var processingScheduled = false;\n  function _insert(data, insertAtFront, rejectOnError, callback) {\n    if (callback != null && typeof callback !== \"function\") {\n      throw new Error(\"task callback must be a function\");\n    }\n    q.started = true;\n    var res, rej;\n    function promiseCallback(err, ...args) {\n      if (err) return rejectOnError ? rej(err) : res();\n      if (args.length <= 1) return res(args[0]);\n      res(args);\n    }\n    var item = q._createTaskItem(\n      data,\n      rejectOnError ? promiseCallback : callback || promiseCallback\n    );\n    if (insertAtFront) {\n      q._tasks.unshift(item);\n    } else {\n      q._tasks.push(item);\n    }\n    if (!processingScheduled) {\n      processingScheduled = true;\n      setImmediate$1(() => {\n        processingScheduled = false;\n        q.process();\n      });\n    }\n    if (rejectOnError || !callback) {\n      return new Promise((resolve, reject2) => {\n        res = resolve;\n        rej = reject2;\n      });\n    }\n  }\n  function _createCB(tasks) {\n    return function(err, ...args) {\n      numRunning -= 1;\n      for (var i = 0, l = tasks.length; i < l; i++) {\n        var task = tasks[i];\n        var index = workersList.indexOf(task);\n        if (index === 0) {\n          workersList.shift();\n        } else if (index > 0) {\n          workersList.splice(index, 1);\n        }\n        task.callback(err, ...args);\n        if (err != null) {\n          trigger(\"error\", err, task.data);\n        }\n      }\n      if (numRunning <= q.concurrency - q.buffer) {\n        trigger(\"unsaturated\");\n      }\n      if (q.idle()) {\n        trigger(\"drain\");\n      }\n      q.process();\n    };\n  }\n  function _maybeDrain(data) {\n    if (data.length === 0 && q.idle()) {\n      setImmediate$1(() => trigger(\"drain\"));\n      return true;\n    }\n    return false;\n  }\n  const eventMethod = (name) => (handler) => {\n    if (!handler) {\n      return new Promise((resolve, reject2) => {\n        once2(name, (err, data) => {\n          if (err) return reject2(err);\n          resolve(data);\n        });\n      });\n    }\n    off(name);\n    on(name, handler);\n  };\n  var isProcessing = false;\n  var q = {\n    _tasks: new DLL(),\n    _createTaskItem(data, callback) {\n      return {\n        data,\n        callback\n      };\n    },\n    *[Symbol.iterator]() {\n      yield* q._tasks[Symbol.iterator]();\n    },\n    concurrency,\n    payload,\n    buffer: concurrency / 4,\n    started: false,\n    paused: false,\n    push(data, callback) {\n      if (Array.isArray(data)) {\n        if (_maybeDrain(data)) return;\n        return data.map((datum) => _insert(datum, false, false, callback));\n      }\n      return _insert(data, false, false, callback);\n    },\n    pushAsync(data, callback) {\n      if (Array.isArray(data)) {\n        if (_maybeDrain(data)) return;\n        return data.map((datum) => _insert(datum, false, true, callback));\n      }\n      return _insert(data, false, true, callback);\n    },\n    kill() {\n      off();\n      q._tasks.empty();\n    },\n    unshift(data, callback) {\n      if (Array.isArray(data)) {\n        if (_maybeDrain(data)) return;\n        return data.map((datum) => _insert(datum, true, false, callback));\n      }\n      return _insert(data, true, false, callback);\n    },\n    unshiftAsync(data, callback) {\n      if (Array.isArray(data)) {\n        if (_maybeDrain(data)) return;\n        return data.map((datum) => _insert(datum, true, true, callback));\n      }\n      return _insert(data, true, true, callback);\n    },\n    remove(testFn) {\n      q._tasks.remove(testFn);\n    },\n    process() {\n      if (isProcessing) {\n        return;\n      }\n      isProcessing = true;\n      while (!q.paused && numRunning < q.concurrency && q._tasks.length) {\n        var tasks = [], data = [];\n        var l = q._tasks.length;\n        if (q.payload) l = Math.min(l, q.payload);\n        for (var i = 0; i < l; i++) {\n          var node = q._tasks.shift();\n          tasks.push(node);\n          workersList.push(node);\n          data.push(node.data);\n        }\n        numRunning += 1;\n        if (q._tasks.length === 0) {\n          trigger(\"empty\");\n        }\n        if (numRunning === q.concurrency) {\n          trigger(\"saturated\");\n        }\n        var cb = onlyOnce(_createCB(tasks));\n        _worker(data, cb);\n      }\n      isProcessing = false;\n    },\n    length() {\n      return q._tasks.length;\n    },\n    running() {\n      return numRunning;\n    },\n    workersList() {\n      return workersList;\n    },\n    idle() {\n      return q._tasks.length + numRunning === 0;\n    },\n    pause() {\n      q.paused = true;\n    },\n    resume() {\n      if (q.paused === false) {\n        return;\n      }\n      q.paused = false;\n      setImmediate$1(q.process);\n    }\n  };\n  Object.defineProperties(q, {\n    saturated: {\n      writable: false,\n      value: eventMethod(\"saturated\")\n    },\n    unsaturated: {\n      writable: false,\n      value: eventMethod(\"unsaturated\")\n    },\n    empty: {\n      writable: false,\n      value: eventMethod(\"empty\")\n    },\n    drain: {\n      writable: false,\n      value: eventMethod(\"drain\")\n    },\n    error: {\n      writable: false,\n      value: eventMethod(\"error\")\n    }\n  });\n  return q;\n}\nfunction reduce(coll, memo, iteratee, callback) {\n  callback = once(callback);\n  var _iteratee = wrapAsync(iteratee);\n  return eachOfSeries$1(coll, (x, i, iterCb) => {\n    _iteratee(memo, x, (err, v) => {\n      memo = v;\n      iterCb(err);\n    });\n  }, (err) => callback(err, memo));\n}\nvar reduce$1 = awaitify(reduce, 4);\nfunction mapLimit(coll, limit, iteratee, callback) {\n  return _asyncMap(eachOfLimit$2(limit), coll, iteratee, callback);\n}\nvar mapLimit$1 = awaitify(mapLimit, 4);\nfunction concatLimit(coll, limit, iteratee, callback) {\n  var _iteratee = wrapAsync(iteratee);\n  return mapLimit$1(coll, limit, (val, iterCb) => {\n    _iteratee(val, (err, ...args) => {\n      if (err) return iterCb(err);\n      return iterCb(err, args);\n    });\n  }, (err, mapResults) => {\n    var result = [];\n    for (var i = 0; i < mapResults.length; i++) {\n      if (mapResults[i]) {\n        result = result.concat(...mapResults[i]);\n      }\n    }\n    return callback(err, result);\n  });\n}\nvar concatLimit$1 = awaitify(concatLimit, 4);\nfunction concat(coll, iteratee, callback) {\n  return concatLimit$1(coll, Infinity, iteratee, callback);\n}\nvar concat$1 = awaitify(concat, 3);\nfunction concatSeries(coll, iteratee, callback) {\n  return concatLimit$1(coll, 1, iteratee, callback);\n}\nvar concatSeries$1 = awaitify(concatSeries, 3);\nfunction _createTester(check, getResult) {\n  return (eachfn, arr, _iteratee, cb) => {\n    var testPassed = false;\n    var testResult;\n    const iteratee = wrapAsync(_iteratee);\n    eachfn(arr, (value, _, callback) => {\n      iteratee(value, (err, result) => {\n        if (err || err === false) return callback(err);\n        if (check(result) && !testResult) {\n          testPassed = true;\n          testResult = getResult(true, value);\n          return callback(null, breakLoop$1);\n        }\n        callback();\n      });\n    }, (err) => {\n      if (err) return cb(err);\n      cb(null, testPassed ? testResult : getResult(false));\n    });\n  };\n}\nfunction detect(coll, iteratee, callback) {\n  return _createTester((bool) => bool, (res, item) => item)(eachOf$1, coll, iteratee, callback);\n}\nvar detect$1 = awaitify(detect, 3);\nfunction detectLimit(coll, limit, iteratee, callback) {\n  return _createTester((bool) => bool, (res, item) => item)(eachOfLimit$2(limit), coll, iteratee, callback);\n}\nvar detectLimit$1 = awaitify(detectLimit, 4);\nfunction detectSeries(coll, iteratee, callback) {\n  return _createTester((bool) => bool, (res, item) => item)(eachOfLimit$2(1), coll, iteratee, callback);\n}\nvar detectSeries$1 = awaitify(detectSeries, 3);\nfunction consoleFunc(name) {\n  return (fn, ...args) => wrapAsync(fn)(...args, (err, ...resultArgs) => {\n    if (typeof console === \"object\") {\n      if (err) {\n        if (console.error) {\n          console.error(err);\n        }\n      } else if (console[name]) {\n        resultArgs.forEach((x) => console[name](x));\n      }\n    }\n  });\n}\nvar dir = consoleFunc(\"dir\");\nfunction doWhilst(iteratee, test, callback) {\n  callback = onlyOnce(callback);\n  var _fn = wrapAsync(iteratee);\n  var _test = wrapAsync(test);\n  var results;\n  function next(err, ...args) {\n    if (err) return callback(err);\n    if (err === false) return;\n    results = args;\n    _test(...args, check);\n  }\n  function check(err, truth) {\n    if (err) return callback(err);\n    if (err === false) return;\n    if (!truth) return callback(null, ...results);\n    _fn(next);\n  }\n  return check(null, true);\n}\nvar doWhilst$1 = awaitify(doWhilst, 3);\nfunction _withoutIndex(iteratee) {\n  return (value, index, callback) => iteratee(value, callback);\n}\nfunction eachLimit$2(coll, iteratee, callback) {\n  return eachOf$1(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\nvar each = awaitify(eachLimit$2, 3);\nfunction eachLimit(coll, limit, iteratee, callback) {\n  return eachOfLimit$2(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\nvar eachLimit$1 = awaitify(eachLimit, 4);\nfunction eachSeries(coll, iteratee, callback) {\n  return eachLimit$1(coll, 1, iteratee, callback);\n}\nvar eachSeries$1 = awaitify(eachSeries, 3);\nfunction ensureAsync(fn) {\n  if (isAsync(fn)) return fn;\n  return function(...args) {\n    var callback = args.pop();\n    var sync = true;\n    args.push((...innerArgs) => {\n      if (sync) {\n        setImmediate$1(() => callback(...innerArgs));\n      } else {\n        callback(...innerArgs);\n      }\n    });\n    fn.apply(this, args);\n    sync = false;\n  };\n}\nfunction every(coll, iteratee, callback) {\n  return _createTester((bool) => !bool, (res) => !res)(eachOf$1, coll, iteratee, callback);\n}\nvar every$1 = awaitify(every, 3);\nfunction everyLimit(coll, limit, iteratee, callback) {\n  return _createTester((bool) => !bool, (res) => !res)(eachOfLimit$2(limit), coll, iteratee, callback);\n}\nvar everyLimit$1 = awaitify(everyLimit, 4);\nfunction everySeries(coll, iteratee, callback) {\n  return _createTester((bool) => !bool, (res) => !res)(eachOfSeries$1, coll, iteratee, callback);\n}\nvar everySeries$1 = awaitify(everySeries, 3);\nfunction filterArray(eachfn, arr, iteratee, callback) {\n  var truthValues = new Array(arr.length);\n  eachfn(arr, (x, index, iterCb) => {\n    iteratee(x, (err, v) => {\n      truthValues[index] = !!v;\n      iterCb(err);\n    });\n  }, (err) => {\n    if (err) return callback(err);\n    var results = [];\n    for (var i = 0; i < arr.length; i++) {\n      if (truthValues[i]) results.push(arr[i]);\n    }\n    callback(null, results);\n  });\n}\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n  var results = [];\n  eachfn(coll, (x, index, iterCb) => {\n    iteratee(x, (err, v) => {\n      if (err) return iterCb(err);\n      if (v) {\n        results.push({ index, value: x });\n      }\n      iterCb(err);\n    });\n  }, (err) => {\n    if (err) return callback(err);\n    callback(null, results.sort((a, b) => a.index - b.index).map((v) => v.value));\n  });\n}\nfunction _filter(eachfn, coll, iteratee, callback) {\n  var filter2 = isArrayLike6(coll) ? filterArray : filterGeneric;\n  return filter2(eachfn, coll, wrapAsync(iteratee), callback);\n}\nfunction filter(coll, iteratee, callback) {\n  return _filter(eachOf$1, coll, iteratee, callback);\n}\nvar filter$1 = awaitify(filter, 3);\nfunction filterLimit(coll, limit, iteratee, callback) {\n  return _filter(eachOfLimit$2(limit), coll, iteratee, callback);\n}\nvar filterLimit$1 = awaitify(filterLimit, 4);\nfunction filterSeries(coll, iteratee, callback) {\n  return _filter(eachOfSeries$1, coll, iteratee, callback);\n}\nvar filterSeries$1 = awaitify(filterSeries, 3);\nfunction forever(fn, errback) {\n  var done = onlyOnce(errback);\n  var task = wrapAsync(ensureAsync(fn));\n  function next(err) {\n    if (err) return done(err);\n    if (err === false) return;\n    task(next);\n  }\n  return next();\n}\nvar forever$1 = awaitify(forever, 2);\nfunction groupByLimit(coll, limit, iteratee, callback) {\n  var _iteratee = wrapAsync(iteratee);\n  return mapLimit$1(coll, limit, (val, iterCb) => {\n    _iteratee(val, (err, key) => {\n      if (err) return iterCb(err);\n      return iterCb(err, { key, val });\n    });\n  }, (err, mapResults) => {\n    var result = {};\n    var { hasOwnProperty } = Object.prototype;\n    for (var i = 0; i < mapResults.length; i++) {\n      if (mapResults[i]) {\n        var { key } = mapResults[i];\n        var { val } = mapResults[i];\n        if (hasOwnProperty.call(result, key)) {\n          result[key].push(val);\n        } else {\n          result[key] = [val];\n        }\n      }\n    }\n    return callback(err, result);\n  });\n}\nvar groupByLimit$1 = awaitify(groupByLimit, 4);\nvar log2 = consoleFunc(\"log\");\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n  callback = once(callback);\n  var newObj = {};\n  var _iteratee = wrapAsync(iteratee);\n  return eachOfLimit$2(limit)(obj, (val, key, next) => {\n    _iteratee(val, key, (err, result) => {\n      if (err) return next(err);\n      newObj[key] = result;\n      next(err);\n    });\n  }, (err) => callback(err, newObj));\n}\nvar mapValuesLimit$1 = awaitify(mapValuesLimit, 4);\nvar _defer;\nif (hasNextTick) {\n  _defer = process.nextTick;\n} else if (hasSetImmediate) {\n  _defer = setImmediate;\n} else {\n  _defer = fallback;\n}\nvar nextTick = wrap(_defer);\nvar _parallel = awaitify((eachfn, tasks, callback) => {\n  var results = isArrayLike6(tasks) ? [] : {};\n  eachfn(tasks, (task, key, taskCb) => {\n    wrapAsync(task)((err, ...result) => {\n      if (result.length < 2) {\n        [result] = result;\n      }\n      results[key] = result;\n      taskCb(err);\n    });\n  }, (err) => callback(err, results));\n}, 3);\nfunction queue(worker, concurrency) {\n  var _worker = wrapAsync(worker);\n  return queue$1((items, cb) => {\n    _worker(items[0], cb);\n  }, concurrency, 1);\n}\nfunction race(tasks, callback) {\n  callback = once(callback);\n  if (!Array.isArray(tasks)) return callback(new TypeError(\"First argument to race must be an array of functions\"));\n  if (!tasks.length) return callback();\n  for (var i = 0, l = tasks.length; i < l; i++) {\n    wrapAsync(tasks[i])(callback);\n  }\n}\nvar race$1 = awaitify(race, 2);\nfunction reject$2(eachfn, arr, _iteratee, callback) {\n  const iteratee = wrapAsync(_iteratee);\n  return _filter(eachfn, arr, (value, cb) => {\n    iteratee(value, (err, v) => {\n      cb(err, !v);\n    });\n  }, callback);\n}\nfunction reject(coll, iteratee, callback) {\n  return reject$2(eachOf$1, coll, iteratee, callback);\n}\nvar reject$1 = awaitify(reject, 3);\nfunction rejectLimit(coll, limit, iteratee, callback) {\n  return reject$2(eachOfLimit$2(limit), coll, iteratee, callback);\n}\nvar rejectLimit$1 = awaitify(rejectLimit, 4);\nfunction rejectSeries(coll, iteratee, callback) {\n  return reject$2(eachOfSeries$1, coll, iteratee, callback);\n}\nvar rejectSeries$1 = awaitify(rejectSeries, 3);\nfunction some(coll, iteratee, callback) {\n  return _createTester(Boolean, (res) => res)(eachOf$1, coll, iteratee, callback);\n}\nvar some$1 = awaitify(some, 3);\nfunction someLimit(coll, limit, iteratee, callback) {\n  return _createTester(Boolean, (res) => res)(eachOfLimit$2(limit), coll, iteratee, callback);\n}\nvar someLimit$1 = awaitify(someLimit, 4);\nfunction someSeries(coll, iteratee, callback) {\n  return _createTester(Boolean, (res) => res)(eachOfSeries$1, coll, iteratee, callback);\n}\nvar someSeries$1 = awaitify(someSeries, 3);\nfunction sortBy(coll, iteratee, callback) {\n  var _iteratee = wrapAsync(iteratee);\n  return map$1(coll, (x, iterCb) => {\n    _iteratee(x, (err, criteria) => {\n      if (err) return iterCb(err);\n      iterCb(err, { value: x, criteria });\n    });\n  }, (err, results) => {\n    if (err) return callback(err);\n    callback(null, results.sort(comparator).map((v) => v.value));\n  });\n  function comparator(left, right) {\n    var a = left.criteria, b = right.criteria;\n    return a < b ? -1 : a > b ? 1 : 0;\n  }\n}\nvar sortBy$1 = awaitify(sortBy, 3);\nfunction tryEach(tasks, callback) {\n  var error = null;\n  var result;\n  return eachSeries$1(tasks, (task, taskCb) => {\n    wrapAsync(task)((err, ...args) => {\n      if (err === false) return taskCb(err);\n      if (args.length < 2) {\n        [result] = args;\n      } else {\n        result = args;\n      }\n      error = err;\n      taskCb(err ? null : {});\n    });\n  }, () => callback(error, result));\n}\nvar tryEach$1 = awaitify(tryEach);\nfunction whilst(test, iteratee, callback) {\n  callback = onlyOnce(callback);\n  var _fn = wrapAsync(iteratee);\n  var _test = wrapAsync(test);\n  var results = [];\n  function next(err, ...rest) {\n    if (err) return callback(err);\n    results = rest;\n    if (err === false) return;\n    _test(check);\n  }\n  function check(err, truth) {\n    if (err) return callback(err);\n    if (err === false) return;\n    if (!truth) return callback(null, ...results);\n    _fn(next);\n  }\n  return _test(check);\n}\nvar whilst$1 = awaitify(whilst, 3);\nfunction waterfall(tasks, callback) {\n  callback = once(callback);\n  if (!Array.isArray(tasks)) return callback(new Error(\"First argument to waterfall must be an array of functions\"));\n  if (!tasks.length) return callback();\n  var taskIndex = 0;\n  function nextTask(args) {\n    var task = wrapAsync(tasks[taskIndex++]);\n    task(...args, onlyOnce(next));\n  }\n  function next(err, ...args) {\n    if (err === false) return;\n    if (err || taskIndex === tasks.length) {\n      return callback(err, ...args);\n    }\n    nextTask(args);\n  }\n  nextTask([]);\n}\nvar waterfall$1 = awaitify(waterfall);\n\n// src/framework.ts\nvar import_uuid3 = require(\"uuid\");\n\n// src/trace.ts\nvar spanFilterFields = /* @__PURE__ */ new Set([\n  \"spanType\",\n  \"name\",\n  \"hasError\",\n  \"metadata\",\n  \"duration\"\n]);\nfunction isRecord9(value) {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\nfunction validateMetadataValue(value, ancestors) {\n  if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n    return;\n  }\n  if (typeof value === \"number\") {\n    if (Number.isFinite(value)) {\n      return;\n    }\n    throw new Error(\"filters.metadata numbers must be finite\");\n  }\n  if (typeof value !== \"object\" || value === null) {\n    throw new Error(\"filters.metadata values must be JSON-serializable\");\n  }\n  if (!Array.isArray(value) && !isRecord9(value)) {\n    throw new Error(\"filters.metadata values must be JSON-serializable\");\n  }\n  if (ancestors.has(value)) {\n    throw new Error(\"filters.metadata must not contain cycles\");\n  }\n  ancestors.add(value);\n  if (Array.isArray(value)) {\n    for (let index = 0; index < value.length; index++) {\n      validateMetadataValue(value[index], ancestors);\n    }\n  } else {\n    if (Object.getOwnPropertySymbols(value).length > 0) {\n      throw new Error(\"filters.metadata keys must be strings\");\n    }\n    for (const nested of Object.values(value)) {\n      validateMetadataValue(nested, ancestors);\n    }\n  }\n  ancestors.delete(value);\n}\nfunction compileMetadataLeaves(metadata, path = [], ancestors = /* @__PURE__ */ new WeakSet()) {\n  if (Object.getOwnPropertySymbols(metadata).length > 0) {\n    throw new Error(\"filters.metadata keys must be strings\");\n  }\n  if (ancestors.has(metadata)) {\n    throw new Error(\"filters.metadata must not contain cycles\");\n  }\n  ancestors.add(metadata);\n  const leaves = [];\n  for (const [key, value] of Object.entries(metadata)) {\n    const childPath = [...path, key];\n    if (isRecord9(value)) {\n      leaves.push(...compileMetadataLeaves(value, childPath, ancestors));\n    } else {\n      validateMetadataValue(value, ancestors);\n      leaves.push([childPath, value]);\n    }\n  }\n  ancestors.delete(metadata);\n  return leaves;\n}\nfunction normalizeSpanFilters(filters, spanType) {\n  if (filters != null && !isRecord9(filters)) {\n    throw new Error(\"filters must be an object\");\n  }\n  const values = { ...filters ?? {} };\n  if (spanType !== void 0) {\n    if (!Array.isArray(spanType) || !spanType.every((item) => typeof item === \"string\")) {\n      throw new Error(\"spanType must be an array of strings\");\n    }\n    if (Object.hasOwn(values, \"spanType\")) {\n      throw new Error(\n        \"spanType cannot be provided both directly and in filters\"\n      );\n    }\n    if (spanType.length > 0) {\n      values.spanType = spanType;\n    }\n  }\n  if (Object.keys(values).some((field) => !spanFilterFields.has(field))) {\n    throw new Error(\"Unsupported span filter fields\");\n  }\n  for (const field of [\"spanType\", \"name\"]) {\n    if (Object.hasOwn(values, field)) {\n      const items = values[field];\n      if (!Array.isArray(items) || !items.every((item) => typeof item === \"string\")) {\n        throw new Error(`filters.${field} must be an array of strings`);\n      }\n    }\n  }\n  if (Object.hasOwn(values, \"hasError\") && typeof values.hasError !== \"boolean\") {\n    throw new Error(\"filters.hasError must be a boolean\");\n  }\n  let compiledMetadataLeaves = [];\n  if (Object.hasOwn(values, \"metadata\")) {\n    if (!isRecord9(values.metadata)) {\n      throw new Error(\"filters.metadata must be an object\");\n    }\n    compiledMetadataLeaves = compileMetadataLeaves(values.metadata);\n  }\n  if (Object.hasOwn(values, \"duration\")) {\n    if (!isRecord9(values.duration) || Object.keys(values.duration).some(\n      (bound) => bound !== \"min\" && bound !== \"max\"\n    )) {\n      throw new Error(\"filters.duration must contain only min and/or max\");\n    }\n    if (Object.values(values.duration).some(\n      (bound) => typeof bound !== \"number\" || !Number.isFinite(bound)\n    )) {\n      throw new Error(\"filters.duration bounds must be finite numbers\");\n    }\n  }\n  const normalized = {};\n  if (Array.isArray(values.spanType)) {\n    normalized.spanType = values.spanType;\n  }\n  if (Array.isArray(values.name)) {\n    normalized.name = values.name;\n  }\n  if (typeof values.hasError === \"boolean\") {\n    normalized.hasError = values.hasError;\n  }\n  if (isRecord9(values.metadata)) {\n    normalized.metadata = values.metadata;\n  }\n  if (isRecord9(values.duration)) {\n    normalized.duration = {};\n    if (typeof values.duration.min === \"number\") {\n      normalized.duration.min = values.duration.min;\n    }\n    if (typeof values.duration.max === \"number\") {\n      normalized.duration.max = values.duration.max;\n    }\n  }\n  return { filters: normalized, metadataLeaves: compiledMetadataLeaves };\n}\nfunction metadataEqual(actual, expected) {\n  if (expected === null) {\n    return actual === null || actual === void 0;\n  }\n  if (Array.isArray(expected)) {\n    return Array.isArray(actual) && actual.length === expected.length && expected.every((value, index) => metadataEqual(actual[index], value));\n  }\n  if (isRecord9(expected)) {\n    if (!isRecord9(actual)) {\n      return false;\n    }\n    const expectedKeys = Object.keys(expected);\n    const actualKeys = Object.keys(actual);\n    return actualKeys.length === expectedKeys.length && expectedKeys.every(\n      (key) => Object.hasOwn(actual, key) && metadataEqual(actual[key], expected[key])\n    );\n  }\n  return actual === expected;\n}\nfunction matchesSpanFilters(span, compiledFilters) {\n  const { filters, metadataLeaves } = compiledFilters;\n  if (filters.spanType !== void 0 && !filters.spanType.includes(span.span_attributes?.type ?? \"\")) {\n    return false;\n  }\n  if (filters.name !== void 0 && !filters.name.includes(span.span_attributes?.name ?? \"\")) {\n    return false;\n  }\n  if (filters.hasError !== void 0 && (span.error !== null && span.error !== void 0) !== filters.hasError) {\n    return false;\n  }\n  for (const [path, expected] of metadataLeaves) {\n    let actual = span.metadata;\n    for (const key of path) {\n      actual = isRecord9(actual) && Object.hasOwn(actual, key) ? actual[key] : void 0;\n    }\n    if (!metadataEqual(actual, expected)) {\n      return false;\n    }\n  }\n  if (filters.duration && Object.keys(filters.duration).length > 0) {\n    const metrics = span.metrics;\n    const start = isRecord9(metrics) ? metrics.start : void 0;\n    const end = isRecord9(metrics) ? metrics.end : void 0;\n    if (typeof start !== \"number\" || !Number.isFinite(start) || typeof end !== \"number\" || !Number.isFinite(end)) {\n      return false;\n    }\n    const elapsed = end - start;\n    if (filters.duration.min !== void 0 && elapsed < filters.duration.min) {\n      return false;\n    }\n    if (filters.duration.max !== void 0 && elapsed > filters.duration.max) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction btqlComparison(op, name, value) {\n  return {\n    op,\n    left: { op: \"ident\", name },\n    right: { op: \"literal\", value }\n  };\n}\nfunction btqlNullCheck(op, name) {\n  return { op, expr: { op: \"ident\", name } };\n}\nfunction spanFilterClauses(compiledFilters) {\n  const { filters, metadataLeaves } = compiledFilters;\n  const children = [];\n  for (const [field, attribute] of [\n    [\"spanType\", \"type\"],\n    [\"name\", \"name\"]\n  ]) {\n    const values = filters[field];\n    if (values !== void 0) {\n      children.push(\n        values.length > 0 ? btqlComparison(\"in\", [\"span_attributes\", attribute], values) : { op: \"literal\", value: false }\n      );\n    }\n  }\n  if (filters.hasError !== void 0) {\n    children.push(\n      btqlNullCheck(filters.hasError ? \"isnotnull\" : \"isnull\", [\"error\"])\n    );\n  }\n  for (const [path, value] of metadataLeaves) {\n    const name = [\"metadata\", ...path];\n    children.push(\n      value === null ? btqlNullCheck(\"isnull\", name) : btqlComparison(\"eq\", name, value)\n    );\n  }\n  const elapsed = {\n    op: \"sub\",\n    left: { op: \"ident\", name: [\"metrics\", \"end\"] },\n    right: { op: \"ident\", name: [\"metrics\", \"start\"] }\n  };\n  if (filters.duration?.min !== void 0) {\n    children.push({\n      op: \"ge\",\n      left: elapsed,\n      right: { op: \"literal\", value: filters.duration.min }\n    });\n  }\n  if (filters.duration?.max !== void 0) {\n    children.push({\n      op: \"le\",\n      left: elapsed,\n      right: { op: \"literal\", value: filters.duration.max }\n    });\n  }\n  return children;\n}\nvar SpanFetcher = class _SpanFetcher extends ObjectFetcher {\n  constructor(objectType, _objectId, rootSpanId, _state, spanTypeFilter, includeScorers = false, brainstoreRealtime = true, filters) {\n    const normalizedFilters = normalizeSpanFilters(filters, spanTypeFilter);\n    const filterExpr = _SpanFetcher.buildFilter(\n      rootSpanId,\n      normalizedFilters,\n      includeScorers\n    );\n    super(\n      objectType,\n      void 0,\n      void 0,\n      {\n        filter: filterExpr\n      },\n      brainstoreRealtime\n    );\n    this._objectId = _objectId;\n    this.rootSpanId = rootSpanId;\n    this._state = _state;\n    this.spanTypeFilter = spanTypeFilter;\n  }\n  _objectId;\n  rootSpanId;\n  _state;\n  spanTypeFilter;\n  static buildFilter(rootSpanId, filters, includeScorers = false) {\n    const purpose = [\"span_attributes\", \"purpose\"];\n    const children = [\n      btqlComparison(\"eq\", [\"root_span_id\"], rootSpanId)\n    ];\n    if (!includeScorers) {\n      children.push({\n        op: \"or\",\n        children: [\n          btqlNullCheck(\"isnull\", purpose),\n          btqlComparison(\"ne\", purpose, \"scorer\")\n        ]\n      });\n    }\n    children.push(...spanFilterClauses(filters));\n    return { op: \"and\", children };\n  }\n  get id() {\n    return Promise.resolve(this._objectId);\n  }\n  async getState() {\n    return this._state;\n  }\n};\nvar CachedSpanFetcher = class {\n  spanCache = /* @__PURE__ */ new Map();\n  allFetched = false;\n  fetchFn;\n  constructor(objectTypeOrFetchFn, objectId, rootSpanId, getState, brainstoreRealtime = true) {\n    if (typeof objectTypeOrFetchFn === \"function\") {\n      this.fetchFn = async (filters) => (await objectTypeOrFetchFn(filters.filters.spanType)).filter(\n        (span) => matchesSpanFilters(span, filters)\n      );\n    } else {\n      const objectType = objectTypeOrFetchFn;\n      this.fetchFn = async (filters, includeScorers) => {\n        const state = await getState();\n        const fetcher = new SpanFetcher(\n          objectType,\n          objectId,\n          rootSpanId,\n          state,\n          void 0,\n          includeScorers,\n          brainstoreRealtime,\n          filters.filters\n        );\n        let spans = (await fetcher.fetchedData()).map(\n          (row) => ({ ...row })\n        );\n        if (filters.filters.metadata !== void 0) {\n          spans = spans.filter((span) => matchesSpanFilters(span, filters));\n        }\n        return spans;\n      };\n    }\n  }\n  async getSpans({\n    spanType: requestedSpanType,\n    filters,\n    includeScorers = false\n  } = {}) {\n    const normalizedFilters = normalizeSpanFilters(filters, requestedSpanType);\n    const spanType = normalizedFilters.filters.spanType;\n    const hasAdvancedFilters = Object.keys(normalizedFilters.filters).some(\n      (field) => field !== \"spanType\"\n    );\n    if (spanType?.length === 0) {\n      return [];\n    }\n    if (includeScorers) {\n      return this.fetchFn(normalizedFilters, true);\n    }\n    if (this.allFetched) {\n      const spans = this.getFromCache(spanType);\n      return hasAdvancedFilters ? spans.filter((span) => matchesSpanFilters(span, normalizedFilters)) : spans;\n    }\n    if (hasAdvancedFilters && spanType && spanType.every((type) => this.spanCache.has(type))) {\n      return this.getFromCache(spanType).filter(\n        (span) => matchesSpanFilters(span, normalizedFilters)\n      );\n    }\n    if (hasAdvancedFilters) {\n      return this.fetchFn(normalizedFilters, false);\n    }\n    if (!spanType) {\n      this.spanCache.clear();\n      await this.fetchSpans(void 0);\n      if (this.spanCache.size > 0) {\n        this.allFetched = true;\n      }\n      return this.getFromCache(void 0);\n    }\n    const missingTypes = spanType.filter((type) => !this.spanCache.has(type));\n    if (missingTypes.length > 0) {\n      await this.fetchSpans(missingTypes);\n    }\n    return this.getFromCache(spanType);\n  }\n  async fetchSpans(spanType) {\n    const spans = await this.fetchFn(\n      normalizeSpanFilters(spanType ? { spanType } : void 0),\n      false\n    );\n    for (const span of spans) {\n      const type = span.span_attributes?.type ?? \"\";\n      const existing = this.spanCache.get(type) ?? [];\n      existing.push(span);\n      this.spanCache.set(type, existing);\n    }\n  }\n  getFromCache(spanType) {\n    if (!spanType || spanType.length === 0) {\n      return Array.from(this.spanCache.values()).flat();\n    }\n    const result = [];\n    for (const type of spanType) {\n      const spans = this.spanCache.get(type);\n      if (spans) result.push(...spans);\n    }\n    return result;\n  }\n};\nvar LocalTrace = class {\n  objectType;\n  objectId;\n  rootSpanId;\n  ensureSpansFlushed;\n  state;\n  spansFlushed = false;\n  spansFlushPromise = null;\n  cachedFetcher;\n  threadCache = /* @__PURE__ */ new Map();\n  constructor({\n    objectType,\n    objectId,\n    rootSpanId,\n    ensureSpansFlushed,\n    state\n  }) {\n    this.objectType = objectType;\n    this.objectId = objectId;\n    this.rootSpanId = rootSpanId;\n    this.ensureSpansFlushed = ensureSpansFlushed;\n    this.state = state;\n    this.cachedFetcher = new CachedSpanFetcher(\n      objectType,\n      objectId,\n      rootSpanId,\n      async () => {\n        await this.ensureSpansReady();\n        await state.login({});\n        return state;\n      }\n    );\n  }\n  getConfiguration() {\n    return {\n      object_type: this.objectType,\n      object_id: this.objectId,\n      root_span_id: this.rootSpanId\n    };\n  }\n  /**\n   * Custom JSON serialization - returns trace_ref format so LocalTrace\n   * can be safely passed through JSON.stringify() (e.g., in invoke()).\n   */\n  toJSON() {\n    return {\n      trace_ref: {\n        object_type: this.objectType,\n        object_id: this.objectId,\n        root_span_id: this.rootSpanId\n      }\n    };\n  }\n  /**\n   * Fetch all rows for this root span from its parent object (experiment or project logs).\n   * First checks the local span cache for recently logged spans, then falls\n   * back to CachedSpanFetcher which handles BTQL fetching and caching.\n   */\n  async getSpans({\n    spanType,\n    filters,\n    includeScorers = false\n  } = {}) {\n    const normalizedFilters = normalizeSpanFilters(filters, spanType);\n    const cachedSpans = this.state.spanCache.getByRootSpanId(this.rootSpanId);\n    if (cachedSpans && cachedSpans.length > 0) {\n      return cachedSpans.filter(\n        (span) => (includeScorers || span.span_attributes?.purpose !== \"scorer\") && matchesSpanFilters({ ...span }, normalizedFilters)\n      ).map((span) => ({ ...span }));\n    }\n    return this.cachedFetcher.getSpans({\n      filters: normalizedFilters.filters,\n      includeScorers\n    });\n  }\n  /**\n   * Get the thread (preprocessed messages) for this trace.\n   * Calls the API with the project_default preprocessor (which falls back to \"thread\").\n   */\n  async getThread(options) {\n    const cacheKey = options?.preprocessor ?? \"project_default\";\n    if (!this.threadCache.has(cacheKey)) {\n      const promise = this.fetchThread(options);\n      this.threadCache.set(cacheKey, promise);\n    }\n    return this.threadCache.get(cacheKey);\n  }\n  async fetchThread(options) {\n    await this.ensureSpansReady();\n    await this.state.login({});\n    const result = await invoke({\n      globalFunction: options?.preprocessor ?? \"project_default\",\n      functionType: \"preprocessor\",\n      input: {\n        trace_ref: {\n          object_type: this.objectType,\n          object_id: this.objectId,\n          root_span_id: this.rootSpanId\n        }\n      },\n      mode: \"json\",\n      state: this.state\n    });\n    return Array.isArray(result) ? result : [];\n  }\n  async ensureSpansReady() {\n    if (this.spansFlushed || !this.ensureSpansFlushed) {\n      return;\n    }\n    if (!this.spansFlushPromise) {\n      this.spansFlushPromise = this.ensureSpansFlushed().then(\n        () => {\n          this.spansFlushed = true;\n        },\n        (err) => {\n          this.spansFlushPromise = null;\n          throw err;\n        }\n      );\n    }\n    await this.spansFlushPromise;\n  }\n};\n\n// src/reporters/progress.ts\nvar SimpleProgressReporter = class {\n  start(name, _total) {\n    console.log(`Running evaluator ${name}`);\n  }\n  stop() {\n  }\n  increment(_name) {\n  }\n  setTotal(_name, _total) {\n  }\n};\n\n// src/eval-parameters.ts\nvar import_v311 = require(\"zod/v3\");\nvar z43 = __toESM(require(\"zod/v4\"));\nvar import_ajv = __toESM(require(\"ajv\"));\n\n// src/prompt-schemas.ts\nvar import_v310 = require(\"zod/v3\");\nvar promptContentsSchema = import_v310.z.union([\n  import_v310.z.object({\n    prompt: import_v310.z.string()\n  }),\n  import_v310.z.object({\n    messages: import_v310.z.array(ChatCompletionMessageParam)\n  })\n]);\nvar promptDefinitionSchema = promptContentsSchema.and(\n  import_v310.z.object({\n    model: import_v310.z.string(),\n    params: ModelParams.optional(),\n    templateFormat: import_v310.z.enum([\"mustache\", \"nunjucks\", \"none\"]).optional(),\n    environments: import_v310.z.array(import_v310.z.string()).optional()\n  })\n);\nvar promptDefinitionWithToolsSchema = promptDefinitionSchema.and(\n  import_v310.z.object({\n    tools: import_v310.z.array(ToolFunctionDefinition).optional()\n  })\n);\nfunction promptDefinitionToPromptData(promptDefinition, rawTools) {\n  const promptBlock = \"messages\" in promptDefinition ? {\n    type: \"chat\",\n    messages: promptDefinition.messages,\n    tools: rawTools && rawTools.length > 0 ? JSON.stringify(rawTools) : void 0\n  } : {\n    type: \"completion\",\n    content: promptDefinition.prompt\n  };\n  return {\n    prompt: promptBlock,\n    options: {\n      model: promptDefinition.model,\n      params: promptDefinition.params\n    },\n    ...promptDefinition.templateFormat ? { template_format: promptDefinition.templateFormat } : {}\n  };\n}\n\n// src/eval-parameters.ts\nvar evalParametersSchema = import_v311.z.record(\n  import_v311.z.string(),\n  import_v311.z.union([\n    import_v311.z.object({\n      type: import_v311.z.literal(\"prompt\"),\n      default: promptDefinitionWithToolsSchema.optional(),\n      description: import_v311.z.string().optional()\n    }),\n    import_v311.z.object({\n      type: import_v311.z.literal(\"model\"),\n      default: import_v311.z.string().optional(),\n      description: import_v311.z.string().optional()\n    }),\n    import_v311.z.instanceof(import_v311.z.ZodType),\n    import_v311.z.instanceof(z43.ZodType)\n  ])\n);\nasync function validateParameters(parameters, parameterSchema) {\n  let resolvedSchema = parameterSchema;\n  if (resolvedSchema instanceof Promise) {\n    resolvedSchema = await resolvedSchema;\n  }\n  if (resolvedSchema === void 0 || resolvedSchema === null) {\n    return parameters;\n  }\n  if (RemoteEvalParameters.isParameters(resolvedSchema)) {\n    const mergedParameters = parameters && Object.keys(parameters).length > 0 ? {\n      ...resolvedSchema.data,\n      ...parameters\n    } : resolvedSchema.data;\n    return validateParametersWithJsonSchema(\n      mergedParameters,\n      resolvedSchema.schema\n    );\n  }\n  return validateParametersWithZod(\n    parameters,\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    resolvedSchema\n  );\n}\nfunction validateParametersWithZod(parameters, parameterSchema) {\n  return Object.fromEntries(\n    Object.entries(parameterSchema).map(([name, schema]) => {\n      const value = parameters[name];\n      try {\n        if (\"type\" in schema && schema.type === \"prompt\") {\n          const promptData = value ? PromptData.parse(value) : schema.default ? promptDefinitionToPromptData(\n            schema.default,\n            schema.default.tools\n          ) : void 0;\n          if (!promptData) {\n            throw new Error(`Parameter '${name}' is required`);\n          }\n          return [name, Prompt2.fromPromptData(name, promptData)];\n        } else if (\"type\" in schema && schema.type === \"model\") {\n          const model = value ?? schema.default;\n          if (model === void 0) {\n            throw new Error(`Parameter '${name}' is required`);\n          }\n          if (typeof model !== \"string\") {\n            throw new Error(\n              `Parameter '${name}' must be a string model identifier`\n            );\n          }\n          return [name, model];\n        } else {\n          return [name, schema.parse(value)];\n        }\n      } catch (e) {\n        console.error(\"Error validating parameter\", name, e);\n        throw Error(\n          `Invalid parameter '${name}': ${e instanceof Error ? e.message : String(e)}`\n        );\n      }\n    })\n  );\n}\nfunction validateParametersWithJsonSchema(parameters, schema) {\n  const ajv = new import_ajv.default({ coerceTypes: true, useDefaults: true, strict: false });\n  const validate = ajv.compile(schema);\n  if (!validate(parameters)) {\n    const errorMessages = validate.errors?.map((err) => {\n      const path = err.instancePath || \"root\";\n      return `${path}: ${err.message}`;\n    }).join(\", \");\n    throw Error(`Invalid parameters: ${errorMessages}`);\n  }\n  return rehydrateRemoteParameters(parameters, schema);\n}\nfunction rehydrateRemoteParameters(parameters, schema) {\n  const schemaProperties = schema.properties;\n  if (typeof schemaProperties !== \"object\" || schemaProperties === null) {\n    return parameters;\n  }\n  return Object.fromEntries(\n    Object.entries(parameters).map(([name, value]) => {\n      const propertySchema = Reflect.get(schemaProperties, name);\n      if (typeof propertySchema !== \"object\" || propertySchema === null) {\n        return [name, value];\n      }\n      if (Reflect.get(propertySchema, \"x-bt-type\") === \"prompt\") {\n        return [\n          name,\n          Prompt2.fromPromptData(name, PromptData.parse(value))\n        ];\n      }\n      return [name, value];\n    })\n  );\n}\n\n// src/framework.ts\nfunction BaseExperiment(options = {}) {\n  return { _type: \"BaseExperiment\", ...options };\n}\nvar EvalResultWithSummary = class {\n  constructor(summary, results) {\n    this.summary = summary;\n    this.results = results;\n  }\n  summary;\n  results;\n  /**\n   * @deprecated Use `summary` instead.\n   */\n  toString() {\n    return JSON.stringify(this.summary);\n  }\n  [/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    return `EvalResultWithSummary(summary=\"...\", results=[...])`;\n  }\n  toJSON() {\n    return {\n      summary: this.summary,\n      results: this.results\n    };\n  }\n};\nasync function getPersistedBaseExperimentId(experiment) {\n  try {\n    return await experiment._getBaseExperimentId();\n  } catch {\n    return void 0;\n  }\n}\nfunction makeEvalName(projectName, experimentName) {\n  let out = projectName;\n  if (experimentName) {\n    out += ` [experimentName=${experimentName}]`;\n  }\n  return out;\n}\nfunction initExperiment2(state, options = {}) {\n  return init({\n    state,\n    ...options,\n    setCurrent: false\n  });\n}\nasync function getExperimentParametersRef(parameters) {\n  if (!parameters) {\n    return void 0;\n  }\n  const resolvedParameters = parameters instanceof Promise ? await parameters : parameters;\n  if (!RemoteEvalParameters.isParameters(resolvedParameters)) {\n    return void 0;\n  }\n  if (resolvedParameters.id === void 0) {\n    return void 0;\n  }\n  return {\n    id: resolvedParameters.id,\n    version: resolvedParameters.version\n  };\n}\nasync function _internalInitEvaluatorExperiment(projectName, evaluator, data, options = {}) {\n  if (options.disabled) return null;\n  const { baseExperiment } = callEvaluatorData(data);\n  const parameters = await getExperimentParametersRef(evaluator.parameters);\n  return initExperiment2(evaluator.state, {\n    ...evaluator.projectId ? { projectId: evaluator.projectId } : { project: projectName },\n    experiment: options.experimentName ?? evaluator.experimentName,\n    description: evaluator.description,\n    metadata: evaluator.metadata,\n    tags: evaluator.tags,\n    isPublic: evaluator.isPublic,\n    update: options.update ?? evaluator.update,\n    baseExperiment: evaluator.baseExperimentName ?? baseExperiment,\n    baseExperimentId: evaluator.baseExperimentId,\n    gitMetadataSettings: evaluator.gitMetadataSettings,\n    repoInfo: evaluator.repoInfo,\n    dataset: Dataset2.isDataset(data) ? data : void 0,\n    parameters\n  });\n}\nfunction callEvaluatorData(data) {\n  const dataResult = typeof data === \"function\" ? data() : data;\n  let baseExperiment = void 0;\n  if (\"_type\" in dataResult && dataResult._type === \"BaseExperiment\") {\n    baseExperiment = dataResult.name;\n  }\n  return {\n    data: dataResult,\n    baseExperiment\n  };\n}\nfunction isAsyncIterable7(value) {\n  return typeof value === \"object\" && value !== null && Symbol.asyncIterator in value && typeof value[Symbol.asyncIterator] === \"function\";\n}\nfunction isIterable(value) {\n  return typeof value === \"object\" && value !== null && Symbol.iterator in value && typeof value[Symbol.iterator] === \"function\";\n}\nasync function _internalResolveEvaluatorData(evaluator, experiment) {\n  if (typeof evaluator.data === \"string\") {\n    throw new Error(\"Unimplemented: string data paths\");\n  }\n  let dataResult = typeof evaluator.data === \"function\" ? evaluator.data() : evaluator.data;\n  if (\"_type\" in dataResult) {\n    if (dataResult._type !== \"BaseExperiment\") {\n      throw new Error(\"Invalid _type\");\n    }\n    if (!experiment) {\n      throw new Error(\n        \"Cannot use BaseExperiment() without connecting to Braintrust (you most likely set --no-send-logs)\"\n      );\n    }\n    let name = dataResult.name;\n    if (isEmpty2(name)) {\n      const baseExperiment = await experiment.fetchBaseExperiment();\n      if (!baseExperiment) {\n        throw new Error(\"BaseExperiment() failed to fetch base experiment\");\n      }\n      name = baseExperiment.name;\n    }\n    dataResult = initExperiment2(evaluator.state, {\n      ...evaluator.projectId ? { projectId: evaluator.projectId } : { project: evaluator.projectName },\n      experiment: name,\n      open: true\n    }).asDataset();\n  }\n  const resolvedDataResult = dataResult instanceof Promise ? await dataResult : dataResult;\n  if (isAsyncIterable7(resolvedDataResult)) {\n    return resolvedDataResult;\n  }\n  if (Array.isArray(resolvedDataResult) || isIterable(resolvedDataResult)) {\n    const iterable = resolvedDataResult;\n    return (async function* () {\n      for (const datum of iterable) yield datum;\n    })();\n  }\n  throw new Error(\n    \"Evaluator data must be an array, iterable, or async iterable\"\n  );\n}\nglobalThis._evals = {\n  functions: [],\n  prompts: [],\n  parameters: [],\n  evaluators: {},\n  reporters: {}\n};\nfunction _initializeSpanContext() {\n  globalThis._spanContext = { currentSpan, withCurrent, startSpan, NOOP_SPAN };\n}\nasync function Eval(name, evaluator, reporterOrOpts) {\n  const options = isEmpty2(reporterOrOpts) ? {} : typeof reporterOrOpts === \"string\" ? { reporter: reporterOrOpts } : \"name\" in reporterOrOpts ? { reporter: reporterOrOpts } : reporterOrOpts;\n  let evalName = makeEvalName(name, evaluator.experimentName);\n  if (globalThis._evals.evaluators[evalName]) {\n    evalName = `${evalName}_${Object.keys(_evals).length}`;\n  }\n  if (globalThis._lazy_load) {\n    globalThis._evals.evaluators[evalName] = {\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      evaluator: {\n        evalName,\n        projectName: name,\n        ...evaluator\n      },\n      reporter: options.reporter\n    };\n    _initializeSpanContext();\n    return new EvalResultWithSummary(\n      {\n        scores: {},\n        metrics: {},\n        projectName: \"\",\n        experimentName: \"\"\n      },\n      []\n    );\n  }\n  const progressReporter = options.progress ?? new SimpleProgressReporter();\n  const shouldCollectResults = options.returnResults ?? true;\n  if (typeof options.reporter === \"string\") {\n    throw new Error(\n      \"Must specify a reporter object, not a name. Can only specify reporter names when running 'braintrust eval'\"\n    );\n  }\n  const resolvedReporter = options.reporter || defaultReporter;\n  try {\n    const { data } = callEvaluatorData(evaluator.data);\n    const experiment = await _internalInitEvaluatorExperiment(\n      name,\n      evaluator,\n      data,\n      { disabled: Boolean(options.parent || options.noSendLogs) }\n    );\n    if (experiment) {\n      await experiment._waitForId();\n    }\n    if (experiment && options.onStart) {\n      const summary = await experiment.summarize({ summarizeScores: false });\n      options.onStart(summary);\n    }\n    try {\n      const evalDef = {\n        evalName,\n        projectName: name,\n        ...evaluator,\n        data\n      };\n      const enableCache = options.enableCache ?? true;\n      let ret;\n      if (options.parent) {\n        ret = await withParent(\n          options.parent,\n          () => runEvaluator(\n            null,\n            evalDef,\n            progressReporter,\n            [],\n            options.stream,\n            options.parameters,\n            shouldCollectResults,\n            enableCache\n          ),\n          evaluator.state\n        );\n      } else {\n        ret = await runEvaluator(\n          experiment,\n          evalDef,\n          progressReporter,\n          [],\n          options.stream,\n          options.parameters,\n          shouldCollectResults,\n          enableCache\n        );\n      }\n      progressReporter.stop();\n      resolvedReporter.reportEval(evalDef, ret, {\n        verbose: true,\n        jsonl: false\n      });\n      return ret;\n    } finally {\n      if (experiment) {\n        await experiment.flush().catch(console.error);\n      } else if (options.parent) {\n        await flush({ state: evaluator.state }).catch(console.error);\n      }\n    }\n  } finally {\n    progressReporter.stop();\n  }\n}\nfunction Reporter(name, reporter) {\n  const ret = { name, ...reporter };\n  if (_evals.reporters[name]) {\n    throw new Error(`Reporter ${name} already exists`);\n  }\n  if (globalThis._lazy_load) {\n    _evals.reporters[name] = ret;\n  }\n  return ret;\n}\nfunction serializeJSONWithPlainString(v) {\n  if (typeof v === \"string\") {\n    return v;\n  } else {\n    return JSON.stringify(v);\n  }\n}\nfunction evaluateFilter(object, filter2) {\n  const { path, pattern } = filter2;\n  const key = path.reduce(\n    (acc, p) => typeof acc === \"object\" && acc !== null ? (\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      acc[p]\n    ) : void 0,\n    object\n  );\n  if (key === void 0) {\n    return false;\n  }\n  return pattern.test(serializeJSONWithPlainString(key));\n}\nfunction scorerName(scorer, scorer_idx) {\n  return scorer.name || `scorer_${scorer_idx}`;\n}\nfunction classifierName(classifier, classifier_idx) {\n  return classifier.name || `classifier_${classifier_idx}`;\n}\nasync function _internalRunEvaluatorTask(task, datum, trialIndex, parameters, span, reportProgress = () => void 0, signal = new AbortController().signal) {\n  const metadata = {\n    ...\"metadata\" in datum ? datum.metadata : {}\n  };\n  const hooks = {\n    meta(value) {\n      Object.assign(metadata, value);\n    },\n    metadata,\n    expected: \"expected\" in datum ? datum.expected : void 0,\n    span,\n    parameters,\n    reportProgress,\n    trialIndex,\n    tags: [...datum.tags ?? []],\n    signal\n  };\n  const output = await task(datum.input, hooks);\n  span.log({ output });\n  return {\n    output,\n    metadata: hooks.metadata,\n    tags: hooks.tags ?? []\n  };\n}\nfunction buildSpanMetadata(results) {\n  return results.length === 1 ? results[0].metadata : Object.fromEntries(\n    results.map((result) => [result.name, result.metadata])\n  );\n}\nfunction buildSpanScores(results) {\n  const scoresRecord = Object.fromEntries(\n    results.map((result) => [result.name, result.score])\n  );\n  return { resultMetadata: buildSpanMetadata(results), scoresRecord };\n}\nfunction _internalPrepareEvaluatorScore(scoreValue, name) {\n  if (scoreValue === null) return { results: null };\n  if (Array.isArray(scoreValue)) {\n    const names = /* @__PURE__ */ new Set();\n    for (const score of scoreValue) {\n      if (!(typeof score === \"object\" && !isEmpty2(score))) {\n        throw new Error(\n          `When returning an array of scores, each score must be a non-empty object. Got: ${JSON.stringify(score)}`\n        );\n      }\n      if (typeof score.name !== \"string\") {\n        throw new Error(\n          `When returning an array of scores, each score must have a name. Got: ${JSON.stringify(score)}`\n        );\n      }\n      if (names.has(score.name)) {\n        throw new Error(`Duplicate score name '${score.name}' in score array`);\n      }\n      names.add(score.name);\n    }\n  }\n  let results;\n  if (Array.isArray(scoreValue)) {\n    results = scoreValue;\n  } else if (typeof scoreValue === \"object\" && !isEmpty2(scoreValue)) {\n    results = [{ ...scoreValue, name: scoreValue.name ?? name }];\n  } else {\n    results = [{ name, score: scoreValue }];\n  }\n  const { resultMetadata, scoresRecord } = buildSpanScores(results);\n  const fields = (score) => {\n    const { metadata: _metadata, name: _name, ...rest } = score;\n    return rest;\n  };\n  return {\n    results,\n    output: results.length === 1 ? fields(results[0]) : Object.fromEntries(\n      results.map((score) => [score.name ?? name, fields(score)])\n    ),\n    metadata: resultMetadata,\n    scores: scoresRecord\n  };\n}\nasync function runInScorerSpan(rootSpan, spanName, spanType, propagatedEvent, eventInput, fn) {\n  try {\n    const value = await rootSpan.traced(fn, {\n      name: spanName,\n      spanAttributes: { type: spanType, purpose: \"scorer\" },\n      propagatedEvent,\n      event: { input: eventInput }\n    });\n    return { kind: \"score\", value };\n  } catch (e) {\n    return { kind: \"error\", value: e };\n  }\n}\nfunction collectScoringResults(runResults, names, onResult) {\n  const failing = [];\n  runResults.forEach((r, i) => {\n    if (r.kind === \"score\") {\n      (r.value ?? []).forEach(onResult);\n    } else {\n      failing.push({ name: names[i], error: r.value });\n    }\n  });\n  return failing;\n}\nfunction validateClassificationResult(value, scorerName2) {\n  if (!(typeof value === \"object\" && value !== null && !isEmpty2(value))) {\n    throw new Error(\n      `When returning structured classifier results, each classification must be a non-empty object. Got: ${JSON.stringify(value)}`\n    );\n  }\n  if (!(\"name\" in value) || typeof value.name !== \"string\" || !value.name) {\n    const classification = value;\n    classification.name = scorerName2;\n    return classification;\n  }\n  return value;\n}\nfunction toClassificationItem(c) {\n  return {\n    id: c.id,\n    label: c.label ?? c.id,\n    ...c.metadata !== void 0 ? { metadata: c.metadata } : {}\n  };\n}\nfunction _internalPrepareEvaluatorClassification(value, name) {\n  if (value === null) return { results: null };\n  const results = (Array.isArray(value) ? value : [value]).map(\n    (result) => validateClassificationResult(result, name)\n  );\n  const classifications = /* @__PURE__ */ Object.create(null);\n  for (const result of results) {\n    (classifications[result.name] ??= []).push(toClassificationItem(result));\n  }\n  return {\n    results,\n    output: results.length === 1 ? toClassificationItem(results[0]) : Object.fromEntries(\n      results.map((result) => [\n        result.name,\n        toClassificationItem(result)\n      ])\n    ),\n    metadata: buildSpanMetadata(results),\n    classifications\n  };\n}\nfunction logScoringFailures(kind, failures, metadata, rootSpan, state) {\n  if (!failures.length) return [];\n  const errorMap = Object.fromEntries(\n    failures.map(({ name, error }) => [\n      name,\n      error instanceof Error ? error.stack : `${error}`\n    ])\n  );\n  metadata[`${kind}_errors`] = errorMap;\n  rootSpan.log({ metadata: { [`${kind}_errors`]: errorMap } });\n  debugLogger.forState(state).warn(\n    `Found exceptions for the following ${kind}s: ${Object.keys(errorMap).join(\", \")}`,\n    failures.map((f) => f.error)\n  );\n  return Object.keys(errorMap);\n}\nasync function runEvaluator(experiment, evaluator, progressReporter, filters, stream, parameters, collectResults = true, enableCache = true) {\n  if (!evaluator.scores && !evaluator.classifiers) {\n    throw new Error(\n      \"Evaluator must include at least one of `scores` or `classifiers`\"\n    );\n  }\n  return await runEvaluatorInternal(\n    experiment,\n    evaluator,\n    progressReporter,\n    filters,\n    stream,\n    parameters,\n    collectResults,\n    enableCache\n  );\n}\nvar defaultErrorScoreHandler = ({\n  rootSpan,\n  data: _,\n  unhandledScores\n}) => {\n  const scores = Object.fromEntries(unhandledScores.map((s) => [s, 0]));\n  rootSpan.log({ scores });\n  return scores;\n};\nasync function runEvaluatorInternal(experiment, evaluator, progressReporter, filters, stream, parameters, collectResults, enableCache) {\n  if (enableCache) {\n    (evaluator.state ?? _internalGetGlobalState())?.spanCache?.start();\n  }\n  try {\n    parameters = await validateParameters(\n      parameters ?? {},\n      evaluator.parameters\n    );\n    const dataIterable = await _internalResolveEvaluatorData(\n      evaluator,\n      experiment\n    );\n    progressReporter.start(evaluator.evalName, 0);\n    const experimentIdPromise = experiment ? (async () => {\n      try {\n        return await experiment.id;\n      } catch {\n        return void 0;\n      }\n    })() : void 0;\n    const collectedResults = [];\n    const localScoreAccumulator = experiment ? null : {};\n    const abortController = new AbortController();\n    const abortSignal = abortController.signal;\n    let scheduledTrials = 0;\n    const q = queue(\n      async ({\n        datum,\n        trialIndex\n      }) => {\n        if (abortSignal.aborted) {\n          return;\n        }\n        const eventDataset = experiment ? experiment.dataset : Dataset2.isDataset(evaluator.data) ? evaluator.data : void 0;\n        const inlineDatasetOrigin = eventDataset && datum.id && datum._xact_id ? {\n          object_type: \"dataset\",\n          object_id: await eventDataset.id,\n          id: datum.id,\n          created: datum.created,\n          _xact_id: datum._xact_id\n        } : void 0;\n        const parsedDatumOrigin = ObjectReference.safeParse(datum.origin);\n        const origin = inlineDatasetOrigin ?? (parsedDatumOrigin?.success ? parsedDatumOrigin.data : void 0);\n        const upsertId = datum.upsert_id && trialIndex > 0 ? (0, import_uuid3.v5)(\n          `braintrust:eval:${datum.upsert_id}:trial:${trialIndex}`,\n          import_uuid3.v5.URL\n        ) : datum.upsert_id;\n        const baseEvent = {\n          name: \"eval\",\n          spanAttributes: {\n            type: \"eval\" /* EVAL */\n          },\n          event: {\n            input: datum.input,\n            expected: \"expected\" in datum ? datum.expected : void 0,\n            tags: datum.tags,\n            origin,\n            ...upsertId ? { id: upsertId } : {}\n          }\n        };\n        const callback = async (rootSpan) => {\n          const state = evaluator.state ?? _internalGetGlobalState();\n          const ensureSpansFlushed = async () => {\n            if (experiment) {\n              await flush({ state: experiment.loggingState });\n            } else if (state) {\n              await flush({ state });\n            } else {\n              await flush();\n            }\n            if (state) {\n              await state.flushOtel();\n            }\n          };\n          const parentStr = state.currentParent.getStore();\n          const parentComponents = typeof parentStr === \"string\" ? SpanComponentsV4.fromStr(parentStr) : null;\n          const trace = state ? new LocalTrace({\n            objectType: parentComponents ? spanObjectTypeV3ToTypedString(\n              parentComponents.data.object_type\n            ) : \"experiment\",\n            objectId: parentComponents?.data.object_id ?? (experimentIdPromise ? await experimentIdPromise ?? \"\" : \"\"),\n            rootSpanId: rootSpan.rootSpanId,\n            ensureSpansFlushed,\n            state\n          }) : void 0;\n          let metadata = {};\n          const expected = \"expected\" in datum ? datum.expected : void 0;\n          let output = void 0;\n          let error = void 0;\n          let tags = [];\n          const scores = /* @__PURE__ */ Object.create(null);\n          const classifications = /* @__PURE__ */ Object.create(null);\n          const scorerNames = (evaluator.scores ?? []).map(scorerName);\n          const classifierNames = (evaluator.classifiers ?? []).map(\n            classifierName\n          );\n          let unhandledScores = scorerNames;\n          try {\n            const taskResult = await rootSpan.traced(\n              (span) => _internalRunEvaluatorTask(\n                evaluator.task,\n                datum,\n                trialIndex,\n                parameters ?? {},\n                span,\n                (event) => {\n                  stream?.({\n                    ...event,\n                    id: rootSpan.id,\n                    origin: baseEvent.event?.origin,\n                    name: evaluator.evalName,\n                    object_type: \"task\"\n                  });\n                },\n                abortSignal\n              ),\n              {\n                name: \"task\",\n                spanAttributes: { type: \"task\" /* TASK */ },\n                event: { input: datum.input }\n              }\n            );\n            output = taskResult.output;\n            metadata = taskResult.metadata;\n            tags = taskResult.tags;\n            if (tags.length) {\n              rootSpan.log({ output, metadata, expected, tags });\n            } else {\n              rootSpan.log({ output, metadata, expected });\n            }\n            if (evaluator.flushBeforeScoring) {\n              await rootSpan.flush();\n            }\n            const scoringArgs = {\n              id: datum.id,\n              input: datum.input,\n              expected: \"expected\" in datum ? datum.expected : void 0,\n              metadata,\n              output,\n              tags,\n              trace\n            };\n            const { trace: _trace, ...scoringArgsForLogging } = scoringArgs;\n            const propagatedEvent = makeScorerPropagatedEvent(\n              await rootSpan.export()\n            );\n            const [scoreResults, classificationResults] = await Promise.all([\n              Promise.all(\n                (evaluator.scores ?? []).map(\n                  (score, score_idx) => runInScorerSpan(\n                    rootSpan,\n                    scorerNames[score_idx],\n                    \"score\" /* SCORE */,\n                    propagatedEvent,\n                    scoringArgsForLogging,\n                    async (span) => {\n                      const scoreValue = await Promise.resolve(\n                        score(scoringArgs)\n                      );\n                      const prepared = _internalPrepareEvaluatorScore(\n                        scoreValue,\n                        scorerNames[score_idx]\n                      );\n                      if (prepared.results === null) return null;\n                      span.log({\n                        output: prepared.output,\n                        metadata: prepared.metadata,\n                        scores: prepared.scores\n                      });\n                      return prepared.results;\n                    }\n                  )\n                )\n              ),\n              Promise.all(\n                (evaluator.classifiers ?? []).map(\n                  (classifier, idx) => runInScorerSpan(\n                    rootSpan,\n                    classifierNames[idx],\n                    \"classifier\" /* CLASSIFIER */,\n                    propagatedEvent,\n                    scoringArgsForLogging,\n                    async (span) => {\n                      const classifierValue = await Promise.resolve(\n                        classifier(scoringArgs)\n                      );\n                      const prepared = _internalPrepareEvaluatorClassification(\n                        classifierValue,\n                        classifierNames[idx]\n                      );\n                      if (prepared.results === null) return null;\n                      span.log({\n                        output: prepared.output,\n                        metadata: prepared.metadata\n                      });\n                      return prepared.results;\n                    }\n                  )\n                )\n              )\n            ]);\n            const failingScorers = collectScoringResults(\n              scoreResults,\n              scorerNames,\n              (result) => {\n                scores[result.name] = result.score;\n              }\n            );\n            const failingClassifiers = collectScoringResults(\n              classificationResults,\n              classifierNames,\n              (result) => {\n                const item = toClassificationItem(result);\n                if (!classifications[result.name]) {\n                  classifications[result.name] = [];\n                }\n                classifications[result.name].push(item);\n              }\n            );\n            if (Object.keys(classifications).length > 0) {\n              rootSpan.log({ classifications });\n            }\n            const failedScorerNames = logScoringFailures(\n              \"scorer\",\n              failingScorers,\n              metadata,\n              rootSpan,\n              evaluator.state\n            );\n            unhandledScores = failedScorerNames.length ? failedScorerNames : null;\n            logScoringFailures(\n              \"classifier\",\n              failingClassifiers,\n              metadata,\n              rootSpan,\n              evaluator.state\n            );\n          } catch (e) {\n            logError(rootSpan, e);\n            error = e;\n          } finally {\n            progressReporter.increment(evaluator.evalName);\n          }\n          const mergedScores = {\n            ...evaluator.errorScoreHandler && unhandledScores ? evaluator.errorScoreHandler({\n              rootSpan,\n              data: datum,\n              unhandledScores\n            }) : void 0,\n            ...scores\n          };\n          if (localScoreAccumulator) {\n            accumulateScores(localScoreAccumulator, mergedScores);\n          }\n          if (collectResults) {\n            const baseResult = {\n              input: datum.input,\n              ...\"expected\" in datum ? { expected: datum.expected } : {},\n              output,\n              tags: tags.length ? tags : void 0,\n              metadata,\n              error,\n              origin: baseEvent.event?.origin\n            };\n            collectedResults.push({\n              ...baseResult,\n              scores: mergedScores,\n              ...Object.keys(classifications).length > 0 ? { classifications } : {}\n            });\n          }\n        };\n        if (!experiment) {\n          return await traced(callback, {\n            ...baseEvent,\n            state: evaluator.state\n          });\n        } else {\n          const result = await experiment.traced(callback, baseEvent);\n          const bgLogger = experiment.loggingState.bgLogger();\n          if (evaluator.maxConcurrency !== void 0 && bgLogger.pendingFlushBytes() >= bgLogger.flushBackpressureBytes()) {\n            await experiment.flush();\n          }\n          return result;\n        }\n      },\n      Math.max(evaluator.maxConcurrency ?? Number.MAX_SAFE_INTEGER, 1)\n    );\n    const abortOnSignal = () => abortController.abort(new InternalAbortError(\"Evaluator aborted\"));\n    if (evaluator.signal?.aborted) {\n      abortOnSignal();\n    } else {\n      evaluator.signal?.addEventListener(\"abort\", abortOnSignal, {\n        once: true\n      });\n    }\n    let timeoutId;\n    if (evaluator.timeout !== void 0) {\n      const abortOnTimeout = () => abortController.abort(new InternalAbortError(\"Evaluator timed out\"));\n      if (evaluator.timeout <= 0) {\n        abortOnTimeout();\n      } else {\n        timeoutId = setTimeout(abortOnTimeout, evaluator.timeout);\n      }\n    }\n    const queueErrors = [];\n    const enqueuePromise = (async () => {\n      if (abortSignal.aborted) {\n        return;\n      }\n      for await (const datum of dataIterable) {\n        if (abortSignal.aborted) {\n          break;\n        }\n        if (!filters.every((f) => evaluateFilter(datum, f))) {\n          continue;\n        }\n        const trialCount = datum.trialCount ?? evaluator.trialCount ?? 1;\n        for (let trialIndex = 0; trialIndex < trialCount; trialIndex++) {\n          if (abortSignal.aborted) {\n            break;\n          }\n          scheduledTrials++;\n          progressReporter.setTotal?.(evaluator.evalName, scheduledTrials);\n          q.pushAsync({ datum, trialIndex }).catch((e) => {\n            if (queueErrors.length < 5) {\n              queueErrors.push(e);\n            }\n          });\n        }\n      }\n    })();\n    try {\n      try {\n        await enqueuePromise;\n      } catch (e) {\n        if (!abortSignal.aborted) {\n          throw e;\n        }\n        queueErrors.push(e);\n      }\n      if (!q.idle()) {\n        await q.drain();\n      }\n      if (abortSignal.aborted) {\n        const reason = abortSignal.reason;\n        if (isomorph_default.getEnv(\"BRAINTRUST_VERBOSE\")) {\n          debugLogger.forState(evaluator.state).warn(\"Evaluator cancelled:\", reason.message);\n        }\n        throw queueErrors.length > 0 ? new AggregateError([reason, ...queueErrors], reason.message) : reason;\n      }\n      if (queueErrors.length > 0) {\n        throw new AggregateError(\n          queueErrors,\n          `Encountered ${queueErrors.length} unhandled task errors`\n        );\n      }\n    } catch (e) {\n      q.kill();\n      throw e;\n    } finally {\n      clearTimeout(timeoutId);\n      evaluator.signal?.removeEventListener(\"abort\", abortOnSignal);\n      if (!collectResults) {\n        collectedResults.length = 0;\n      }\n    }\n    const comparisonExperimentId = experiment ? evaluator.baseExperimentId ?? await getPersistedBaseExperimentId(experiment) : void 0;\n    const summary = experiment ? await experiment.summarize({\n      summarizeScores: evaluator.summarizeScores,\n      ...comparisonExperimentId !== void 0 ? { comparisonExperimentId } : {}\n    }) : buildLocalSummary(\n      evaluator,\n      collectResults ? collectedResults : [],\n      localScoreAccumulator ?? void 0\n    );\n    return new EvalResultWithSummary(\n      summary,\n      collectResults ? collectedResults : []\n    );\n  } finally {\n    if (enableCache) {\n      const spanCache = (evaluator.state ?? _internalGetGlobalState())?.spanCache;\n      spanCache?.dispose();\n      spanCache?.stop();\n    }\n  }\n}\nvar warning = (text) => `Warning: ${text}`;\nfunction logError2(e, verbose) {\n  if (!verbose) {\n    console.error(`${e}`);\n  } else {\n    console.error(e);\n  }\n}\nfunction accumulateScores(accumulator, scores) {\n  if (!scores) {\n    return;\n  }\n  for (const [name, score] of Object.entries(scores)) {\n    if (score === null || score === void 0) {\n      continue;\n    }\n    const existing = accumulator[name] ?? { total: 0, count: 0 };\n    accumulator[name] = {\n      total: existing.total + score,\n      count: existing.count + 1\n    };\n  }\n}\nfunction ensureScoreAccumulator(results) {\n  const accumulator = /* @__PURE__ */ Object.create(null);\n  for (const result of results) {\n    accumulateScores(accumulator, result.scores);\n  }\n  return accumulator;\n}\nfunction buildLocalSummary(evaluator, results, precomputedScores) {\n  const scoresByName = precomputedScores ?? ensureScoreAccumulator(results);\n  return {\n    projectName: evaluator.projectName,\n    experimentName: evaluator.evalName,\n    scores: Object.fromEntries(\n      Object.entries(scoresByName).map(([name, { total, count }]) => [\n        name,\n        {\n          name,\n          score: count === 0 ? 0 : total / count,\n          improvements: 0,\n          regressions: 0\n        }\n      ])\n    )\n  };\n}\nfunction reportFailures(evaluator, failingResults, { verbose, jsonl }) {\n  if (failingResults.length > 0) {\n    console.error(\n      warning(\n        `Evaluator ${evaluator.evalName} failed with ${failingResults.length} error${failingResults.length === 1 ? \"\" : \"s\"}. This evaluation (\"${evaluator.evalName}\") will not be fully logged.`\n      )\n    );\n    if (jsonl) {\n      console.log(\n        JSON.stringify({\n          evaluatorName: evaluator.evalName,\n          errors: failingResults.map(\n            (r) => `${r.error instanceof Error ? r.error.stack : r.error}`\n          )\n        })\n      );\n    } else {\n      for (const result of failingResults) {\n        logError2(result.error, verbose);\n      }\n    }\n    if (!verbose && !jsonl) {\n      console.error(\n        warning(\n          \"Use --debug-logging debug to see full stack traces and troubleshooting details.\"\n        )\n      );\n    }\n  }\n}\nvar defaultReporter = {\n  name: \"Braintrust default reporter\",\n  async reportEval(evaluator, result, { verbose, jsonl }) {\n    const { results, summary } = result;\n    const failingResults = results.filter(\n      (r) => r.error !== void 0\n    );\n    if (failingResults.length > 0) {\n      reportFailures(evaluator, failingResults, { verbose, jsonl });\n    }\n    if (jsonl) {\n      isomorph_default.writeln(JSON.stringify(summary));\n    } else {\n      isomorph_default.writeln(\"Experiment summary\");\n      isomorph_default.writeln(\"==================\");\n      if (summary.comparisonExperimentName) {\n        isomorph_default.writeln(\n          `${summary.comparisonExperimentName} (baseline) <- ${summary.experimentName} (comparison)`\n        );\n        isomorph_default.writeln(\"\");\n      }\n      const hasScores = Object.keys(summary.scores).length > 0;\n      const hasMetrics = Object.keys(summary.metrics ?? {}).length > 0;\n      const hasComparison = !!summary.comparisonExperimentName;\n      if (hasScores || hasMetrics) {\n        if (hasComparison) {\n          isomorph_default.writeln(\n            \"Name                Value      Change     Improvements Regressions\"\n          );\n          isomorph_default.writeln(\n            \"----------------------------------------------------------------\"\n          );\n        }\n        for (const score of Object.values(summary.scores)) {\n          const scorePercent = (score.score * 100).toFixed(2);\n          const scoreValue = `${scorePercent}%`;\n          if (hasComparison) {\n            let diffString = \"-\";\n            if (!isEmpty2(score.diff)) {\n              const diffPercent = (score.diff * 100).toFixed(2);\n              const diffSign = score.diff > 0 ? \"+\" : \"\";\n              diffString = `${diffSign}${diffPercent}%`;\n            }\n            const improvements = score.improvements > 0 ? score.improvements.toString() : \"-\";\n            const regressions = score.regressions > 0 ? score.regressions.toString() : \"-\";\n            isomorph_default.writeln(\n              `${score.name.padEnd(18)} ${scoreValue.padStart(10)} ${diffString.padStart(10)} ${improvements.padStart(12)} ${regressions.padStart(11)}`\n            );\n          } else {\n            isomorph_default.writeln(`${score.name.padEnd(20)} ${scoreValue.padStart(15)}`);\n          }\n        }\n        for (const metric of Object.values(summary.metrics ?? {})) {\n          const fractionDigits = Number.isInteger(metric.metric) ? 0 : 2;\n          const formattedValue = metric.metric.toFixed(fractionDigits);\n          const metricValue = metric.unit === \"$\" ? `${metric.unit}${formattedValue}` : `${formattedValue}${metric.unit}`;\n          if (hasComparison) {\n            let diffString = \"-\";\n            if (!isEmpty2(metric.diff)) {\n              const diffPercent = (metric.diff * 100).toFixed(2);\n              const diffSign = metric.diff > 0 ? \"+\" : \"\";\n              diffString = `${diffSign}${diffPercent}%`;\n            }\n            const improvements = metric.improvements > 0 ? metric.improvements.toString() : \"-\";\n            const regressions = metric.regressions > 0 ? metric.regressions.toString() : \"-\";\n            isomorph_default.writeln(\n              `${metric.name.padEnd(18)} ${metricValue.padStart(10)} ${diffString.padStart(10)} ${improvements.padStart(12)} ${regressions.padStart(11)}`\n            );\n          } else {\n            isomorph_default.writeln(\n              `${metric.name.padEnd(20)} ${metricValue.padStart(15)}`\n            );\n          }\n        }\n      }\n      if (summary.experimentUrl) {\n        isomorph_default.writeln(\"\");\n        isomorph_default.writeln(`View results for ${summary.experimentName}`);\n        isomorph_default.writeln(`See results at ${summary.experimentUrl}`);\n      }\n    }\n    isomorph_default.writeln(\"\");\n    return failingResults.length === 0;\n  },\n  async reportRun(evalReports) {\n    return evalReports.every((r) => r);\n  }\n};\n\n// src/workflow-eval.ts\nvar encoder = new TextEncoder();\nvar decoder = new TextDecoder();\nvar WORKFLOW_TASK_KIND = \"braintrust.workflow.task\";\nvar WORKFLOW_SCORER_KIND = \"braintrust.workflow.scorer\";\nvar WorkflowEvalMemoryStore = class {\n  values = /* @__PURE__ */ new Map();\n  sets = /* @__PURE__ */ new Map();\n  async read(key) {\n    return this.values.get(key)?.slice();\n  }\n  async write(key, value) {\n    this.values.set(key, value.slice());\n  }\n  async getOrSet(key, value) {\n    const existing = this.values.get(key);\n    if (existing) return { value: existing.slice(), created: false };\n    this.values.set(key, value.slice());\n    return { value: value.slice(), created: true };\n  }\n  async addToSet(key, member) {\n    let members = this.sets.get(key);\n    if (!members) this.sets.set(key, members = /* @__PURE__ */ new Set());\n    members.add(member);\n  }\n  async getSetSize(key) {\n    return this.sets.get(key)?.size ?? 0;\n  }\n};\nvar WorkflowEvalRedisStore = class {\n  client;\n  keyPrefix;\n  ttlMs;\n  constructor(options) {\n    this.client = options.client;\n    this.keyPrefix = options.keyPrefix ?? \"braintrust-eval:\";\n    this.ttlMs = options.ttlMs ?? 1e3 * 60 * 60 * 24 * 7;\n    if (!Number.isInteger(this.ttlMs) || this.ttlMs < 1) {\n      throw new Error(\n        \"WorkflowEvalRedisStore ttlMs must be a positive integer\"\n      );\n    }\n  }\n  async read(key) {\n    const value = await this.client.get(`${this.keyPrefix}${key}`);\n    if (value == null) return void 0;\n    if (typeof value !== \"string\") {\n      throw new Error(\"WorkflowEvalRedisStore expected GET to return a string\");\n    }\n    return base64ToUint8Array(value);\n  }\n  async write(key, value) {\n    const client = this.client;\n    const set = client.set;\n    const redisKey = `${this.keyPrefix}${key}`;\n    const encoded = uint8ArrayToBase64(value);\n    if (typeof client.defineCommand === \"function\") {\n      await set.call(client, redisKey, encoded, \"PX\", this.ttlMs);\n    } else if (typeof client.sendCommand === \"function\") {\n      await set.call(client, redisKey, encoded, { PX: this.ttlMs });\n    } else if (typeof client.createScript === \"function\") {\n      await set.call(client, redisKey, encoded, { px: this.ttlMs });\n    } else {\n      throw new Error(\n        \"WorkflowEvalRedisStore requires a node-redis, ioredis, or @upstash/redis client\"\n      );\n    }\n  }\n  async getOrSet(key, value) {\n    const redisKey = `${this.keyPrefix}${key}`;\n    const encoded = uint8ArrayToBase64(value);\n    const client = this.client;\n    const set = client.set;\n    let setOptions;\n    if (typeof client.defineCommand === \"function\") {\n      setOptions = [\"PX\", this.ttlMs, \"NX\", \"GET\"];\n    } else if (typeof client.sendCommand === \"function\") {\n      setOptions = [{ PX: this.ttlMs, NX: true, GET: true }];\n    } else if (typeof client.createScript === \"function\") {\n      setOptions = [{ px: this.ttlMs, nx: true, get: true }];\n    } else {\n      throw new Error(\n        \"WorkflowEvalRedisStore getOrSet requires a node-redis, ioredis, or @upstash/redis client\"\n      );\n    }\n    const existing = await set.call(client, redisKey, encoded, ...setOptions);\n    if (existing === null) return { value: value.slice(), created: true };\n    if (typeof existing !== \"string\") {\n      throw new Error(\n        \"WorkflowEvalRedisStore expected atomic SET to return a string or null\"\n      );\n    }\n    return { value: base64ToUint8Array(existing), created: false };\n  }\n  async addToSet(key, member) {\n    await this.evalSet(\n      \"redis.call('SADD', KEYS[1], ARGV[1]); redis.call('PEXPIRE', KEYS[1], ARGV[2]); return 1\",\n      key,\n      [member, String(this.ttlMs)]\n    );\n  }\n  async getSetSize(key) {\n    return this.evalSet(\"return redis.call('SCARD', KEYS[1])\", key, []);\n  }\n  async evalSet(script, key, args) {\n    const client = this.client;\n    const redisKey = `${this.keyPrefix}${key}`;\n    const result = typeof client.defineCommand === \"function\" ? await client.eval(script, 1, redisKey, ...args) : typeof client.sendCommand === \"function\" ? await client.eval(script, { keys: [redisKey], arguments: args }) : await client.eval(script, [redisKey], args);\n    if (typeof result !== \"number\") {\n      throw new Error(\n        \"WorkflowEvalRedisStore expected EVAL to return a number\"\n      );\n    }\n    return result;\n  }\n};\nvar WorkflowTask = class {\n  constructor(processor) {\n    this.processor = processor;\n  }\n  processor;\n  kind = WORKFLOW_TASK_KIND;\n};\nvar WorkflowScorer = class {\n  constructor(processor) {\n    this.processor = processor;\n    this.name = processor.name;\n  }\n  processor;\n  kind = WORKFLOW_SCORER_KIND;\n  name;\n};\nvar WorkflowBatchTask = class {\n  constructor(processor) {\n    this.processor = processor;\n    validateBatchingOptions(processor.batching);\n  }\n  processor;\n  kind = WORKFLOW_TASK_KIND;\n};\nvar WorkflowBatchScorer = class {\n  constructor(processor) {\n    this.processor = processor;\n    validateBatchingOptions(processor.batching);\n    this.name = processor.name;\n  }\n  processor;\n  kind = WORKFLOW_SCORER_KIND;\n  name;\n};\nfunction validateBatchingOptions({\n  maxSize,\n  maxWaitMs\n}) {\n  if (!Number.isInteger(maxSize) || maxSize < 1) {\n    throw new Error(\"batching.maxSize must be a positive integer\");\n  }\n  if (maxWaitMs !== void 0 && !(maxWaitMs >= 0)) {\n    throw new Error(\"batching.maxWaitMs must be a non-negative number\");\n  }\n}\nfunction defineWorkflowEval(projectName, evaluator) {\n  if (evaluator.maxConcurrency !== void 0 && (!Number.isInteger(evaluator.maxConcurrency) || evaluator.maxConcurrency < 1)) {\n    throw new Error(\"maxConcurrency must be a positive integer\");\n  }\n  const definition = {\n    projectName,\n    evalName: evaluator.experimentName ?? projectName,\n    evaluator\n  };\n  return {\n    start: (options = {}) => startWorkflowEval(definition, options),\n    status: (options) => getWorkflowEvalStatus(definition, options),\n    poll: (options) => pollWorkflowEval(definition, options),\n    processSubmissionResult: (result) => processWorkflowSubmissionResult(definition, result)\n  };\n}\nasync function startWorkflowEval(definition, options) {\n  const store = definition.evaluator.store;\n  const runId = newId();\n  const key = runKey(definition.projectName, definition.evalName, runId);\n  const { data } = callEvaluatorData(definition.evaluator.data);\n  const parameters = await validateParameters(\n    options.parameters ?? {},\n    definition.evaluator.parameters\n  );\n  const experimentName = definition.evaluator.experimentName ?? `${definition.evalName}-${runId}`;\n  const experiment = await _internalInitEvaluatorExperiment(\n    definition.projectName,\n    { ...definition.evaluator, data },\n    data,\n    {\n      disabled: options.noSendLogs ?? false,\n      experimentName,\n      update: true\n    }\n  );\n  if (!isWorkflowTask(definition.evaluator.task) && !(definition.evaluator.scores ?? []).some(isWorkflowScorer)) {\n    const result = await runEvaluator(\n      experiment,\n      {\n        ...definition.evaluator,\n        projectName: definition.projectName,\n        evalName: definition.evalName,\n        data\n      },\n      {\n        start: () => void 0,\n        stop: () => void 0,\n        increment: () => void 0\n      },\n      [],\n      void 0,\n      parameters,\n      true,\n      true\n    );\n    const state2 = {\n      runId,\n      experimentName,\n      noSendLogs: options.noSendLogs ?? false,\n      parameters: assertJsonValue(parameters, \"eval parameters\"),\n      status: \"completed\",\n      summary: result.summary,\n      caseCount: 0,\n      cases: [],\n      submissions: []\n    };\n    await experiment?.flush();\n    await writeRunRecord(store, key, state2);\n    return currentStatus(definition, state2);\n  }\n  const cases = await materializeCases(definition, data, experiment);\n  const state = {\n    runId,\n    experimentName,\n    noSendLogs: options.noSendLogs ?? false,\n    parameters: assertJsonValue(parameters, \"eval parameters\"),\n    status: \"running\",\n    caseCount: cases.length,\n    cases,\n    submissions: []\n  };\n  await writeJson(\n    store,\n    `${key}/case-ids`,\n    cases.map(({ id }) => id)\n  );\n  await writeCaseBaseRecords(store, key, state.cases);\n  await writeRunRecord(store, key, state);\n  return advanceWorkflowEval(definition, state, store, key, experiment);\n}\nasync function getWorkflowEvalStatus(definition, options) {\n  const store = definition.evaluator.store;\n  const key = runKey(\n    definition.projectName,\n    definition.evalName,\n    options.runId\n  );\n  const state = await readJson(store, key);\n  if (!state) throw new Error(`Workflow eval run ${options.runId} is missing`);\n  return currentStatus(definition, state);\n}\nasync function processWorkflowSubmissionResult(definition, result) {\n  if (!result.submissionId && !result.externalId) {\n    throw new Error(\"Submission results require submissionId or externalId\");\n  }\n  const store = definition.evaluator.store;\n  if (!result.runId && !result.externalId) {\n    throw new Error(\"Submission results with a submissionId require runId\");\n  }\n  const runId = result.runId ?? await readJson(\n    store,\n    externalRunKey(definition, result.externalId)\n  );\n  if (runId === null) {\n    throw new Error(\n      `externalId ${result.externalId} matches several runs; pass runId`\n    );\n  }\n  if (!runId) throw new Error(\"No submission matches this result\");\n  const key = runKey(definition.projectName, definition.evalName, runId);\n  const run = await readJson(store, key);\n  if (!run) throw new Error(`Workflow eval run ${runId} is missing`);\n  const externalSubmissionId = result.externalId ? await readJson(\n    store,\n    `${key}/external/${encodedKeyPart(result.externalId)}`\n  ) : void 0;\n  if (result.submissionId && externalSubmissionId && result.submissionId !== externalSubmissionId) {\n    throw new Error(\n      \"submissionId and externalId identify different submissions\"\n    );\n  }\n  const submissionId = result.submissionId ?? externalSubmissionId;\n  const submission = submissionId ? await readJson(\n    store,\n    submissionRecordKey(key, submissionId)\n  ) : void 0;\n  if (!submission) throw new Error(\"No submission matches this result\");\n  if (result.externalId && submission.externalId !== result.externalId) {\n    throw new Error(\n      \"submissionId and externalId identify different submissions\"\n    );\n  }\n  if (run.status === \"completed\") return currentStatus(definition, run);\n  if (submission.status === \"failed\") {\n    throw new Error(\n      `Submission ${submission.id} failed to submit; poll() retries it`\n    );\n  }\n  const state = await readRunState(\n    definition,\n    store,\n    key,\n    submission.itemIds\n  );\n  if (submission.status !== \"complete\") {\n    await collectSubmission(definition, state, store, key, submission);\n    submission.status = \"complete\";\n  }\n  await writeSubmissionRecords(store, key, [submission]);\n  return advanceWorkflowEval(\n    definition,\n    await readRunState(definition, store, key, submission.itemIds),\n    store,\n    key\n  );\n}\nasync function pollWorkflowEval(definition, options) {\n  const store = definition.evaluator.store;\n  const key = runKey(\n    definition.projectName,\n    definition.evalName,\n    options.runId\n  );\n  const state = await readRunState(definition, store, key);\n  if (!state) throw new Error(`Workflow eval run ${options.runId} is missing`);\n  const casesById = new Map(state.cases.map((record) => [record.id, record]));\n  const submissions = state.submissions.filter((submission) => {\n    if (submission.status !== \"submitted\") {\n      return submission.status === \"failed\";\n    }\n    return processorForStage(definition, submission.kind, submission.scorerName).completion.mode === \"poll\";\n  });\n  const workers = queue(async (submission) => {\n    if (submission.status === \"failed\") {\n      const claimed = await claimAction(\n        store,\n        key,\n        \"submission-retry\",\n        submission.id,\n        String(submission.attempts)\n      );\n      if (!claimed) return;\n      await submitAndRecord(\n        definition,\n        state,\n        store,\n        key,\n        submission,\n        submission.itemIds.map((id) => casesById.get(id))\n      );\n      return;\n    }\n    const completion = processorForStage(\n      definition,\n      submission.kind,\n      submission.scorerName\n    ).completion;\n    if (completion.mode !== \"poll\") return;\n    const result = await completion.poll(submission.submissionData, {\n      runId: state.runId,\n      submissionId: submission.id\n    });\n    if (result.status === \"failed\") throw asError(result.error);\n    if (result.status === \"complete\") {\n      await collectSubmission(definition, state, store, key, submission);\n      submission.status = \"complete\";\n      await writeSubmissionRecords(store, key, [submission]);\n    }\n  }, definition.evaluator.maxConcurrency ?? 10);\n  const results = await Promise.allSettled(\n    submissions.map((submission) => workers.pushAsync(submission))\n  );\n  let status;\n  const errors = results.flatMap(\n    (result) => result.status === \"rejected\" ? [asError(result.reason)] : []\n  );\n  try {\n    status = await advanceWorkflowEval(\n      definition,\n      await readRunState(definition, store, key),\n      store,\n      key\n    );\n  } catch (error) {\n    errors.push(asError(error));\n  }\n  if (errors.length === 1) throw errors[0];\n  if (errors.length > 1)\n    throw new AggregateError(errors, \"Workflow submission callbacks failed\");\n  return status;\n}\nasync function openWorkflowExperiment(definition, state) {\n  const data = [];\n  return await _internalInitEvaluatorExperiment(\n    definition.projectName,\n    { ...definition.evaluator, data },\n    data,\n    {\n      disabled: state.noSendLogs,\n      experimentName: state.experimentName,\n      update: true\n    }\n  );\n}\nasync function advanceWorkflowEval(definition, state, store, key, existingExperiment) {\n  if (state.status === \"completed\") return currentStatus(definition, state);\n  const experiment = existingExperiment === void 0 ? await openWorkflowExperiment(definition, state) : existingExperiment;\n  const caseIds = state.cases.map(({ id }) => id);\n  await runTaskStage(definition, state, store, key, experiment);\n  await logCompletedTasks(definition, state, store, key, experiment);\n  state = await readRunState(definition, store, key, caseIds) ?? state;\n  const scorers = resolveScorers(definition.evaluator.scores ?? []);\n  const batchScoreStages = batchStageKeys(definition).filter(\n    (stage) => stage !== stageKey(\"task\")\n  );\n  if (batchScoreStages.length > 0) {\n    await Promise.all(\n      state.cases.map(async (record) => {\n        if (!record.taskLogged) return;\n        await store.addToSet(`${key}/progress/tasks`, record.id);\n        if (record.taskError !== void 0) return;\n        await Promise.all(\n          batchScoreStages.map(\n            (stage) => store.addToSet(`${batchProgressKey(key, stage)}/ready`, record.id)\n          )\n        );\n      })\n    );\n  }\n  await runScoreStages(definition, state, store, key, experiment);\n  state = await readRunState(definition, store, key, caseIds) ?? state;\n  const classifierNames = (definition.evaluator.classifiers ?? []).map(\n    classifierName\n  );\n  const isCaseDone = (record) => {\n    if (!record.taskComplete || !record.taskLogged) return false;\n    if (record.taskError !== void 0) return true;\n    return scorers.every(\n      ({ name }) => hasScoreOutcome(record, name) && Object.hasOwn(record.loggedScores, name)\n    ) && classifierNames.every(\n      (name) => Object.hasOwn(record.loggedClassifications, name)\n    );\n  };\n  await Promise.all(\n    state.cases.map(async (record) => {\n      if (isCaseDone(record)) {\n        await store.addToSet(`${key}/progress/cases`, record.id);\n      }\n    })\n  );\n  if (await store.getSetSize(`${key}/progress/cases`) !== state.caseCount) {\n    return currentStatus(definition, state);\n  }\n  if (!await claimAction(store, key, \"finish\")) {\n    const latest = await readJson(store, key);\n    return currentStatus(definition, latest ?? state);\n  }\n  state = await readRunState(definition, store, key);\n  state.summary = await finishExperiment(definition, state, experiment);\n  state.status = \"completed\";\n  await writeRunRecord(store, key, state);\n  return currentStatus(definition, state);\n}\nasync function currentStatus(definition, state) {\n  if (state.status === \"completed\") {\n    if (!state.summary) {\n      throw new Error(`Workflow eval run ${state.runId} has no saved summary`);\n    }\n    return {\n      status: \"completed\",\n      runId: state.runId,\n      pending: { poll: 0, webhook: 0 },\n      summary: state.summary\n    };\n  }\n  const key = runKey(definition.projectName, definition.evalName, state.runId);\n  const store = definition.evaluator.store;\n  const pending = { poll: 0, webhook: 0 };\n  await Promise.all(\n    [\"poll\", \"webhook\"].map(async (mode) => {\n      const completed = await store.getSetSize(\n        `${key}/progress/${mode}/complete`\n      );\n      const submitted = await store.getSetSize(\n        `${key}/progress/${mode}/submitted`\n      );\n      pending[mode] = submitted - completed;\n    })\n  );\n  return { status: \"waiting\", runId: state.runId, pending };\n}\nasync function startCaseRoot(definition, state, record, experiment) {\n  if (!experiment) return NOOP_SPAN;\n  const datum = record.datum;\n  return _internalStartSpanWithInitialMerge({\n    ...definition.evaluator.state ? { state: definition.evaluator.state } : {},\n    parent: await experiment.export(),\n    name: \"eval\",\n    spanId: deterministicId(`${state.runId}:${record.id}:span`),\n    spanAttributes: { type: \"eval\" /* EVAL */ },\n    event: {\n      id: deterministicId(`${state.runId}:${record.id}:row`),\n      input: datum.input,\n      expected: \"expected\" in datum ? datum.expected : void 0,\n      tags: datum.tags,\n      origin: datum.origin\n    }\n  });\n}\nasync function logTaskResult(definition, state, record, experiment, task) {\n  const datum = record.datum;\n  const root = await startCaseRoot(definition, state, record, experiment);\n  try {\n    if (task) {\n      const result = await root.traced(\n        (span) => _internalRunEvaluatorTask(\n          task,\n          datum,\n          record.trialIndex,\n          state.parameters,\n          span\n        ),\n        {\n          name: \"task\",\n          spanId: deterministicId(`${state.runId}:${record.id}:task`),\n          spanAttributes: { type: \"task\" /* TASK */ },\n          event: { input: datum.input }\n        }\n      );\n      record.output = assertJsonValue(\n        result.output,\n        `task output for ${record.caseId}`\n      );\n      record.metadata = assertJsonValue(result.metadata, \"task metadata\");\n      record.tags = result.tags;\n      record.taskComplete = true;\n    } else {\n      await root.traced(\n        (span) => {\n          if (record.taskError === void 0) {\n            span.log({ output: record.output });\n          } else {\n            logError(span, record.taskError);\n          }\n        },\n        {\n          name: \"task\",\n          spanId: deterministicId(`${state.runId}:${record.id}:task`),\n          spanAttributes: { type: \"task\" /* TASK */ },\n          event: { input: datum.input }\n        }\n      );\n      if (record.taskError !== void 0) {\n        logError(root, record.taskError);\n      }\n    }\n    root.log({\n      output: record.output,\n      expected: \"expected\" in datum ? datum.expected : void 0,\n      metadata: {\n        ...record.metadata,\n        workflow_eval: {\n          run_id: state.runId,\n          case_id: record.caseId,\n          trial_index: record.trialIndex,\n          batch_submission_id: record.batchSubmissions[stageKey(\"task\")]\n        }\n      },\n      tags: record.tags\n    });\n    record.rootSpan = await root.export();\n    record.taskLogged = true;\n  } catch (error) {\n    logError(root, error);\n    throw error;\n  } finally {\n    root.end();\n  }\n}\nasync function logCompletedTasks(definition, state, store, key, experiment) {\n  const changed = [];\n  for (const record of state.cases) {\n    if (!record.taskComplete || record.taskLogged) continue;\n    if (!await claimAction(store, key, \"task-log\", record.id)) continue;\n    await logTaskResult(definition, state, record, experiment);\n    changed.push(record);\n  }\n  if (changed.length > 0) {\n    await experiment?.flush();\n    await writeCaseRecords(store, key, changed);\n  }\n}\nasync function runTaskStage(definition, state, store, key, experiment) {\n  if (isWorkflowTask(definition.evaluator.task)) {\n    await ensureSubmissions(definition, state, store, key, \"task\");\n    return;\n  }\n  const task = definition.evaluator.task;\n  const changed = [];\n  for (const record of state.cases) {\n    if (record.taskComplete) continue;\n    if (!await claimAction(store, key, \"task\", record.id)) continue;\n    await logTaskResult(definition, state, record, experiment, task);\n    changed.push(record);\n  }\n  if (changed.length > 0) {\n    await experiment?.flush();\n    await writeCaseRecords(store, key, changed);\n  }\n}\nasync function runScoreStages(definition, state, store, key, experiment) {\n  const scorers = resolveScorers(definition.evaluator.scores ?? []);\n  const changed = /* @__PURE__ */ new Map();\n  const persistChangedCases = async () => {\n    if (changed.size === 0) return;\n    await experiment?.flush();\n    await writeCaseRecords(store, key, [...changed.values()]);\n    changed.clear();\n  };\n  for (const { name, scorer } of scorers) {\n    if (isWorkflowScorer(scorer)) {\n      for (const record of state.cases) {\n        if (!isScorable(record)) continue;\n        if (hasScoreOutcome(record, name) && !Object.hasOwn(record.loggedScores, name)) {\n          if (!await claimAction(store, key, \"score-log\", record.id, name)) {\n            continue;\n          }\n          await evaluateAndLogScore(\n            definition,\n            state,\n            record,\n            name,\n            experiment\n          );\n          changed.set(record.id, record);\n        }\n      }\n      await persistChangedCases();\n      await ensureSubmissions(definition, state, store, key, \"score\", name);\n      continue;\n    }\n    for (const record of state.cases) {\n      if (!isScorable(record)) continue;\n      if (Object.hasOwn(record.loggedScores, name)) continue;\n      if (!await claimAction(store, key, \"score\", record.id, name)) continue;\n      await evaluateAndLogScore(\n        definition,\n        state,\n        record,\n        name,\n        experiment,\n        scorer\n      );\n      changed.set(record.id, record);\n    }\n  }\n  for (const [index, classifier] of (definition.evaluator.classifiers ?? []).entries()) {\n    const name = classifierName(classifier, index);\n    for (const record of state.cases) {\n      if (!isScorable(record)) continue;\n      if (Object.hasOwn(record.loggedClassifications, name)) continue;\n      if (!await claimAction(store, key, \"classification\", record.id, name)) {\n        continue;\n      }\n      await evaluateAndLogClassification(\n        definition,\n        state,\n        record,\n        name,\n        classifier,\n        experiment\n      );\n      changed.set(record.id, record);\n    }\n  }\n  await persistChangedCases();\n}\nfunction isScorable(record) {\n  return record.taskComplete && record.taskLogged && record.taskError === void 0;\n}\nfunction hasScoreOutcome(record, scorerName2) {\n  return Object.hasOwn(record.scores, scorerName2) || Object.hasOwn(record.scoreErrors, scorerName2);\n}\nfunction scorerArgs(record) {\n  const datum = record.datum;\n  return {\n    ...datum,\n    metadata: record.metadata,\n    tags: record.tags,\n    output: record.output\n  };\n}\nfunction resumeCaseRoot(definition, record, experiment) {\n  if (!experiment) return NOOP_SPAN;\n  if (!record.rootSpan) {\n    throw new Error(`Workflow eval case ${record.caseId} has no root span`);\n  }\n  return _internalResumeSpan({\n    exported: record.rootSpan,\n    state: definition.evaluator.state\n  });\n}\nasync function evaluateAndLogScore(definition, state, record, name, experiment, scorer) {\n  const root = resumeCaseRoot(definition, record, experiment);\n  const error = scorer ? void 0 : record.scoreErrors[name];\n  try {\n    const rootExport = await root.export();\n    const prepared = await root.traced(\n      async (span) => {\n        if (error !== void 0) {\n          logError(span, error);\n          return void 0;\n        }\n        const value = scorer ? await scorer(scorerArgs(record)) : record.scores[name];\n        if (scorer) {\n          record.scores[name] = assertJsonValue(value, `scorer ${name} output`);\n        }\n        const result = _internalPrepareEvaluatorScore(value, name);\n        if (result.results !== null) {\n          span.log({\n            output: result.output,\n            metadata: result.metadata,\n            scores: result.scores\n          });\n        }\n        return result;\n      },\n      {\n        name,\n        spanId: deterministicId(`${state.runId}:${record.id}:score:${name}`),\n        spanAttributes: {\n          type: \"score\" /* SCORE */,\n          purpose: \"scorer\"\n        },\n        propagatedEvent: makeScorerPropagatedEvent(rootExport || void 0),\n        event: { input: scorerArgs(record) }\n      }\n    );\n    if (error !== void 0) {\n      root.log({ metadata: { scorer_errors: { [name]: error } } });\n    } else if (prepared?.scores) {\n      root.log({ scores: prepared.scores });\n    }\n    record.loggedScores[name] = true;\n  } catch (error2) {\n    logError(root, error2);\n    throw error2;\n  } finally {\n    root.end();\n  }\n}\nasync function evaluateAndLogClassification(definition, state, record, name, classifier, experiment) {\n  const root = resumeCaseRoot(definition, record, experiment);\n  try {\n    const rootExport = await root.export();\n    const prepared = await root.traced(\n      async (span) => {\n        const value = await classifier(scorerArgs(record));\n        record.classifications[name] = assertJsonValue(\n          value,\n          `classifier ${name} output`\n        );\n        const result = _internalPrepareEvaluatorClassification(value, name);\n        if (result.results !== null) {\n          span.log({ output: result.output, metadata: result.metadata });\n        }\n        return result;\n      },\n      {\n        name,\n        spanId: deterministicId(\n          `${state.runId}:${record.id}:classification:${name}`\n        ),\n        spanAttributes: {\n          type: \"classifier\" /* CLASSIFIER */,\n          purpose: \"scorer\"\n        },\n        propagatedEvent: makeScorerPropagatedEvent(rootExport || void 0),\n        event: { input: scorerArgs(record) }\n      }\n    );\n    if (prepared.classifications) {\n      root.log({ classifications: prepared.classifications });\n    }\n    record.loggedClassifications[name] = true;\n  } catch (error) {\n    logError(root, error);\n    throw error;\n  } finally {\n    root.end();\n  }\n}\nasync function ensureSubmissions(definition, state, store, key, kind, scorerName2) {\n  const processor = processorForStage(definition, kind, scorerName2);\n  if (\"batching\" in processor) {\n    await ensureBatchSubmissions(\n      definition,\n      state,\n      store,\n      key,\n      kind,\n      scorerName2,\n      processor\n    );\n    return;\n  }\n  const plans = plannedSubmissions(\n    definition,\n    state.runId,\n    state.cases.map(({ id }) => id)\n  );\n  const casesById = new Map(state.cases.map((record) => [record.id, record]));\n  const existingIds = new Set(state.submissions.map(({ id }) => id));\n  await runWithConcurrency(definition, plans, async (plan) => {\n    if (plan.kind !== kind || plan.scorerName !== scorerName2) return;\n    if (existingIds.has(plan.id)) return;\n    const record = casesById.get(plan.itemId);\n    const ready = kind === \"task\" ? !record.taskComplete : isScorable(record) && !Object.hasOwn(record.scores, scorerName2);\n    if (!ready) return;\n    const claim = await store.getOrSet(\n      claimRecordKey(key, \"submission\", plan.id),\n      encoder.encode(plan.id)\n    );\n    if (!claim.created) return;\n    await submitAndRecord(\n      definition,\n      state,\n      store,\n      key,\n      { id: plan.id, kind, scorerName: scorerName2, itemIds: [record.id], attempts: 0 },\n      [record]\n    );\n  });\n}\nasync function ensureBatchSubmissions(definition, state, store, key, kind, scorerName2, processor) {\n  const { maxSize, maxWaitMs } = processor.batching;\n  const stage = stageKey(kind, scorerName2);\n  const progressKey = batchProgressKey(key, stage);\n  const [ready, claimed, tasksDone] = await Promise.all([\n    kind === \"task\" ? state.caseCount : store.getSetSize(`${progressKey}/ready`),\n    store.getSetSize(`${progressKey}/claimed`),\n    kind === \"task\" ? state.caseCount : store.getSetSize(`${key}/progress/tasks`)\n  ]);\n  const waiting = ready - claimed;\n  if (waiting <= 0) return;\n  let submitPartial = tasksDone === state.caseCount;\n  if (!submitPartial && waiting < maxSize) {\n    if (maxWaitMs === void 0) return;\n    const window = await store.getOrSet(\n      `${progressKey}/window/${claimed}`,\n      encoder.encode(String(Date.now()))\n    );\n    if (Date.now() - Number(decoder.decode(window.value)) < maxWaitMs) return;\n    submitPartial = true;\n  }\n  const run = state.cases.length === state.caseCount ? state : await readRunState(definition, store, key);\n  const candidates = run.cases.filter((record) => {\n    if (Object.hasOwn(record.batchSubmissions, stage)) return false;\n    if (kind === \"task\") return !record.taskComplete;\n    return isScorable(record) && !hasScoreOutcome(record, scorerName2);\n  });\n  if (candidates.length < waiting) {\n    await Promise.all(\n      run.cases.filter((record) => Object.hasOwn(record.batchSubmissions, stage)).map((record) => store.addToSet(`${progressKey}/claimed`, record.id))\n    );\n  }\n  const batches = [];\n  for (let index = 0; index < candidates.length; index += maxSize) {\n    const batch = candidates.slice(index, index + maxSize);\n    if (batch.length < maxSize && !submitPartial) break;\n    batches.push(batch);\n  }\n  await runWithConcurrency(definition, batches, async (batch) => {\n    const submissionId = newId();\n    const claims = await Promise.all(\n      batch.map(\n        (record) => store.getOrSet(\n          caseRecordKey(key, record.id, \"batch\", stage),\n          encoder.encode(JSON.stringify(submissionId))\n        )\n      )\n    );\n    const members = batch.filter((_, index) => claims[index].created);\n    if (members.length === 0) return;\n    await Promise.all(\n      members.map(\n        (record) => store.addToSet(`${progressKey}/claimed`, record.id)\n      )\n    );\n    for (const record of members) record.batchSubmissions[stage] = submissionId;\n    await submitAndRecord(\n      definition,\n      run,\n      store,\n      key,\n      {\n        id: submissionId,\n        kind,\n        scorerName: scorerName2,\n        itemIds: members.map(({ id }) => id),\n        attempts: 0\n      },\n      members\n    );\n  });\n}\nasync function submitAndRecord(definition, state, store, key, submission, records) {\n  const processor = processorForStage(\n    definition,\n    submission.kind,\n    submission.scorerName\n  );\n  const items = records.map(\n    (record) => submission.kind === \"task\" ? taskSubmissionItem(record, state.parameters) : scorerSubmissionItem(record)\n  );\n  const context = { runId: state.runId, submissionId: submission.id };\n  const attempt = {\n    ...submission,\n    attempts: submission.attempts + 1,\n    completionMode: processor.completion.mode\n  };\n  let submitted;\n  try {\n    submitted = await (\"batching\" in processor ? processor.submit(\n      // Positional IDs are unique within the batch and valid for every provider.\n      items.map((item, index) => ({ ...item, customId: `item-${index}` })),\n      context\n    ) : processor.submit(items[0], context));\n  } catch (error) {\n    await writeSubmissionRecords(store, key, [\n      { ...attempt, submissionData: null, status: \"failed\" }\n    ]);\n    throw error;\n  }\n  const submissionData = assertJsonValue(\n    submitted,\n    `submission data for submission ${submission.id}`\n  );\n  const externalId = processor.completion.mode === \"webhook\" ? processor.completion.getExternalId(submissionData, context) : void 0;\n  if (externalId !== void 0 && !externalId.trim()) {\n    throw new Error(`Submission ${submission.id} produced an empty externalId`);\n  }\n  if (externalId !== void 0) {\n    const locator = await store.getOrSet(\n      externalRunKey(definition, externalId),\n      encoder.encode(JSON.stringify(state.runId))\n    );\n    if (JSON.parse(decoder.decode(locator.value)) !== state.runId) {\n      await writeJson(store, externalRunKey(definition, externalId), null);\n    }\n  }\n  await writeSubmissionRecords(store, key, [\n    { ...attempt, submissionData, externalId, status: \"submitted\" }\n  ]);\n}\nasync function runWithConcurrency(definition, values, worker) {\n  const workers = queue(\n    async (index) => worker(values[index]),\n    definition.evaluator.maxConcurrency ?? 10\n  );\n  const results = await Promise.allSettled(\n    values.map((_, index) => workers.pushAsync(index))\n  );\n  const errors = results.flatMap(\n    (result) => result.status === \"rejected\" ? [asError(result.reason)] : []\n  );\n  if (errors.length === 1) throw errors[0];\n  if (errors.length > 1)\n    throw new AggregateError(errors, \"Workflow submissions failed\");\n}\nasync function collectSubmission(definition, state, store, key, submission) {\n  const processor = processorForStage(\n    definition,\n    submission.kind,\n    submission.scorerName\n  );\n  const context = { runId: state.runId, submissionId: submission.id };\n  const casesById = new Map(state.cases.map((record) => [record.id, record]));\n  if (!(\"batching\" in processor)) {\n    const record = casesById.get(submission.itemIds[0]);\n    applySubmissionOutcome(submission, record, {\n      result: await processor.collect(submission.submissionData, context)\n    });\n    await writeCaseRecords(store, key, [record]);\n    return;\n  }\n  const customIds = new Set(\n    submission.itemIds.map((_, index) => `item-${index}`)\n  );\n  const pending = /* @__PURE__ */ new Map();\n  for (const [index, itemId] of submission.itemIds.entries()) {\n    const record = casesById.get(itemId);\n    const complete = submission.kind === \"task\" ? record.taskComplete : hasScoreOutcome(record, submission.scorerName);\n    if (!complete) pending.set(`item-${index}`, record);\n  }\n  const seen = /* @__PURE__ */ new Set();\n  let changed = [];\n  for await (const entry of await processor.collect(\n    submission.submissionData,\n    context\n  )) {\n    const customId = entry.customId;\n    if (!customIds.has(customId)) {\n      throw new Error(\n        `collect for submission ${submission.id} returned unknown customId ${customId}`\n      );\n    }\n    if (seen.has(customId)) {\n      throw new Error(\n        `collect for submission ${submission.id} returned customId ${customId} more than once`\n      );\n    }\n    seen.add(customId);\n    const record = pending.get(customId);\n    if (!record) continue;\n    if (\"error\" in entry) {\n      applySubmissionOutcome(submission, record, {\n        error: errorMessage2(entry.error)\n      });\n    } else {\n      applySubmissionOutcome(submission, record, { result: entry.result });\n    }\n    changed.push(record);\n    if (changed.length >= 100) {\n      await writeCaseRecords(store, key, changed);\n      changed = [];\n    }\n  }\n  for (const [customId, record] of pending) {\n    if (seen.has(customId)) continue;\n    applySubmissionOutcome(submission, record, {\n      error: `Batch submission ${submission.id} returned no result for ${customId}`\n    });\n    changed.push(record);\n  }\n  await writeCaseRecords(store, key, changed);\n}\nfunction applySubmissionOutcome(submission, record, outcome) {\n  if (\"error\" in outcome) {\n    if (submission.kind === \"task\") {\n      record.taskError = outcome.error;\n      record.taskComplete = true;\n    } else {\n      record.scoreErrors[submission.scorerName] = outcome.error;\n    }\n    return;\n  }\n  const result = outcome.result;\n  if (typeof result !== \"object\" || result === null || Array.isArray(result)) {\n    throw new Error(\n      `collect for submission ${submission.id} must return a result object`\n    );\n  }\n  if (submission.kind === \"task\") {\n    const { output, metadata, tags } = result;\n    record.output = assertJsonValue(\n      output,\n      `task output for item ${record.id}`\n    );\n    if (metadata !== void 0) {\n      record.metadata = assertJsonValue(\n        { ...record.metadata, ...metadata },\n        `metadata for ${record.id}`\n      );\n    }\n    if (tags !== void 0) record.tags = tags;\n    record.taskComplete = true;\n  } else {\n    record.scores[submission.scorerName] = assertJsonValue(\n      result.score,\n      `score output for item ${record.id}`\n    );\n  }\n}\nfunction processorForStage(definition, kind, scorerName2) {\n  if (kind === \"task\") {\n    if (!isWorkflowTask(definition.evaluator.task)) {\n      throw new Error(\"Definition no longer contains the submission task\");\n    }\n    return definition.evaluator.task.processor;\n  }\n  const scorer = resolveScorers(definition.evaluator.scores ?? []).find(\n    ({ name }) => name === scorerName2\n  )?.scorer;\n  if (!isWorkflowScorer(scorer)) {\n    throw new Error(`Definition no longer contains scorer ${scorerName2}`);\n  }\n  return scorer.processor;\n}\nasync function materializeCases(definition, data, experiment) {\n  const evaluator = definition.evaluator;\n  const iterable = await _internalResolveEvaluatorData(\n    {\n      data,\n      projectName: definition.projectName,\n      projectId: evaluator.projectId,\n      state: evaluator.state\n    },\n    experiment\n  );\n  const records = [];\n  const seen = /* @__PURE__ */ new Set();\n  for await (const datum of iterable) {\n    const caseId = datum.id ?? datum.upsert_id ?? (evaluator.caseId ? await evaluator.caseId(datum) : void 0);\n    if (!caseId) {\n      throw new Error(\n        \"Every workflow eval case requires id, upsert_id, or caseId\"\n      );\n    }\n    if (seen.has(caseId))\n      throw new Error(`Duplicate workflow eval case id: ${caseId}`);\n    seen.add(caseId);\n    const trialCount = datum.trialCount ?? evaluator.trialCount ?? 1;\n    if (!Number.isInteger(trialCount) || trialCount < 1) {\n      throw new Error(`Invalid trialCount for workflow eval case ${caseId}`);\n    }\n    for (let trialIndex = 0; trialIndex < trialCount; trialIndex++) {\n      records.push({\n        id: `${caseId}:trial:${trialIndex}`,\n        caseId,\n        trialIndex,\n        datum: assertJsonValue(datum, `case ${caseId}`),\n        metadata: assertJsonValue(\n          \"metadata\" in datum ? datum.metadata : {},\n          `metadata for ${caseId}`\n        ),\n        tags: datum.tags,\n        taskComplete: false,\n        taskLogged: false,\n        scores: /* @__PURE__ */ Object.create(null),\n        scoreErrors: /* @__PURE__ */ Object.create(null),\n        loggedScores: /* @__PURE__ */ Object.create(null),\n        classifications: /* @__PURE__ */ Object.create(null),\n        loggedClassifications: /* @__PURE__ */ Object.create(null),\n        batchSubmissions: /* @__PURE__ */ Object.create(null)\n      });\n    }\n  }\n  return records;\n}\nfunction taskSubmissionItem(record, parameters) {\n  const datum = record.datum;\n  return {\n    id: record.id,\n    input: datum.input,\n    expected: \"expected\" in datum ? datum.expected : void 0,\n    metadata: record.metadata,\n    tags: record.tags,\n    parameters,\n    trialIndex: record.trialIndex\n  };\n}\nfunction scorerSubmissionItem(record) {\n  const datum = record.datum;\n  return {\n    id: record.id,\n    input: datum.input,\n    output: record.output,\n    expected: \"expected\" in datum ? datum.expected : void 0,\n    metadata: record.metadata,\n    tags: record.tags,\n    trialIndex: record.trialIndex\n  };\n}\nasync function finishExperiment(definition, state, experiment) {\n  const scorerNames = resolveScorers(definition.evaluator.scores ?? []).map(\n    ({ name }) => name\n  );\n  const results = state.cases.map((record) => {\n    const datum = record.datum;\n    const scores = Object.fromEntries(\n      scorerNames.flatMap(\n        (name) => !Object.hasOwn(record.scores, name) ? [] : Object.entries(\n          _internalPrepareEvaluatorScore(\n            record.scores[name],\n            name\n          ).scores ?? {}\n        )\n      )\n    );\n    const classifications = Object.fromEntries(\n      Object.entries(record.classifications).flatMap(\n        ([name, value]) => Object.entries(\n          _internalPrepareEvaluatorClassification(value, name).classifications ?? {}\n        )\n      )\n    );\n    return {\n      ...datum,\n      output: record.output,\n      metadata: record.metadata,\n      tags: record.tags,\n      scores,\n      error: record.taskError,\n      ...Object.keys(classifications).length > 0 ? { classifications } : {}\n    };\n  });\n  if (!experiment) {\n    return buildLocalSummary(\n      {\n        ...definition.evaluator,\n        projectName: definition.projectName,\n        evalName: state.experimentName\n      },\n      results\n    );\n  }\n  await experiment.flush();\n  let comparisonExperimentId = definition.evaluator.baseExperimentId;\n  if (!comparisonExperimentId) {\n    try {\n      comparisonExperimentId = await experiment._getBaseExperimentId();\n    } catch {\n      comparisonExperimentId = void 0;\n    }\n  }\n  return await experiment.summarize({\n    summarizeScores: definition.evaluator.summarizeScores,\n    ...comparisonExperimentId ? { comparisonExperimentId } : {}\n  });\n}\nfunction resolveScorers(scorers) {\n  return scorers.map((scorer, index) => ({\n    name: isWorkflowScorer(scorer) ? scorer.name : scorer.name || `scorer_${index}`,\n    scorer\n  }));\n}\nfunction runKey(projectName, evalName, runId) {\n  return `workflow-eval/v1/runs/${contentVersion(encoder.encode(`${projectName}\\0${evalName}\\0${runId}`))}`;\n}\nfunction externalRunKey(definition, externalId) {\n  const evalKey = contentVersion(\n    encoder.encode(`${definition.projectName}\\0${definition.evalName}`)\n  );\n  return `workflow-eval/v1/evals/${evalKey}/external/${encodedKeyPart(externalId)}`;\n}\nfunction stageKey(kind, scorerName2) {\n  return kind === \"task\" ? \"task\" : `score:${scorerName2}`;\n}\nfunction batchProgressKey(key, stage) {\n  return `${key}/progress/batch/${encodedKeyPart(stage)}`;\n}\nfunction batchStageKeys(definition) {\n  const stages = [];\n  const task = definition.evaluator.task;\n  if (isWorkflowTask(task) && \"batching\" in task.processor) {\n    stages.push(stageKey(\"task\"));\n  }\n  for (const { name, scorer } of resolveScorers(\n    definition.evaluator.scores ?? []\n  )) {\n    if (isWorkflowScorer(scorer) && \"batching\" in scorer.processor) {\n      stages.push(stageKey(\"score\", name));\n    }\n  }\n  return stages;\n}\nfunction encodedKeyPart(value) {\n  return uint8ArrayToBase64(encoder.encode(value)).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/, \"\");\n}\nfunction caseRecordKey(key, caseId, kind, ...names) {\n  const suffix = names.map(encodedKeyPart).join(\"/\");\n  return `${key}/cases/${encodedKeyPart(caseId)}/${kind}${suffix ? `/${suffix}` : \"\"}`;\n}\nfunction submissionRecordKey(key, submissionId) {\n  return `${key}/submissions/${encodedKeyPart(submissionId)}`;\n}\nfunction claimRecordKey(key, kind, ...parts) {\n  const identity = stableStringify([kind, parts]);\n  return `${key}/claims/${contentVersion(encoder.encode(identity))}`;\n}\nasync function claimAction(store, key, kind, ...parts) {\n  return (await store.getOrSet(\n    claimRecordKey(key, kind, ...parts),\n    encoder.encode(\"claimed\")\n  )).created;\n}\nfunction plannedSubmissions(definition, runId, caseIds) {\n  const stages = [];\n  const task = definition.evaluator.task;\n  if (isWorkflowTask(task) && !(\"batching\" in task.processor)) {\n    stages.push({ kind: \"task\" });\n  }\n  for (const { name, scorer } of resolveScorers(\n    definition.evaluator.scores ?? []\n  )) {\n    if (isWorkflowScorer(scorer) && !(\"batching\" in scorer.processor)) {\n      stages.push({ kind: \"score\", scorerName: name });\n    }\n  }\n  const plans = [];\n  for (const { kind, scorerName: scorerName2 } of stages) {\n    for (const itemId of caseIds) {\n      plans.push({\n        id: deterministicId(stableStringify([runId, kind, scorerName2, itemId])),\n        kind,\n        scorerName: scorerName2,\n        itemId\n      });\n    }\n  }\n  return plans;\n}\nasync function readCaseRecord(definition, store, key, id, batchStages) {\n  const scorers = resolveScorers(definition.evaluator.scores ?? []);\n  const classifiers = (definition.evaluator.classifiers ?? []).map(\n    classifierName\n  );\n  const [\n    base,\n    task,\n    taskLog,\n    scoreValues,\n    scoreErrorValues,\n    scoreLogValues,\n    classificationValues,\n    classificationLogValues,\n    batchValues\n  ] = await Promise.all([\n    readJson(store, caseRecordKey(key, id, \"base\")),\n    readJson(store, caseRecordKey(key, id, \"task\")),\n    readJson(store, caseRecordKey(key, id, \"task-log\")),\n    Promise.all(\n      scorers.map(async ({ name }) => ({\n        name,\n        value: await readJson(\n          store,\n          caseRecordKey(key, id, \"score\", name)\n        )\n      }))\n    ),\n    // Only batch scorers record per-item failures.\n    Promise.all(\n      scorers.filter(({ name }) => batchStages.includes(stageKey(\"score\", name))).map(async ({ name }) => ({\n        name,\n        value: await readJson(\n          store,\n          caseRecordKey(key, id, \"score-error\", name)\n        )\n      }))\n    ),\n    Promise.all(\n      scorers.map(async ({ name }) => ({\n        name,\n        value: await readJson(\n          store,\n          caseRecordKey(key, id, \"score-log\", name)\n        )\n      }))\n    ),\n    Promise.all(\n      classifiers.map(async (name) => ({\n        name,\n        value: await readJson(\n          store,\n          caseRecordKey(key, id, \"classification\", name)\n        )\n      }))\n    ),\n    Promise.all(\n      classifiers.map(async (name) => ({\n        name,\n        value: await readJson(\n          store,\n          caseRecordKey(key, id, \"classification-log\", name)\n        )\n      }))\n    ),\n    Promise.all(\n      batchStages.map(async (stage) => ({\n        stage,\n        value: await readJson(\n          store,\n          caseRecordKey(key, id, \"batch\", stage)\n        )\n      }))\n    )\n  ]);\n  if (!base) throw new Error(`Workflow eval case ${id} is missing`);\n  const scores = /* @__PURE__ */ Object.create(null);\n  for (const { name, value } of scoreValues) {\n    if (value !== void 0) scores[name] = value;\n  }\n  const scoreErrors = /* @__PURE__ */ Object.create(null);\n  for (const { name, value } of scoreErrorValues) {\n    if (value !== void 0) scoreErrors[name] = value;\n  }\n  const loggedScores = /* @__PURE__ */ Object.create(null);\n  for (const { name, value } of scoreLogValues) {\n    if (value) loggedScores[name] = true;\n  }\n  const classifications = /* @__PURE__ */ Object.create(null);\n  for (const { name, value } of classificationValues) {\n    if (value !== void 0) classifications[name] = value;\n  }\n  const loggedClassifications = /* @__PURE__ */ Object.create(null);\n  for (const { name, value } of classificationLogValues) {\n    if (value) loggedClassifications[name] = true;\n  }\n  const batchSubmissions = /* @__PURE__ */ Object.create(null);\n  for (const { stage, value } of batchValues) {\n    if (value !== void 0) batchSubmissions[stage] = value;\n  }\n  return {\n    ...base,\n    metadata: task?.metadata ?? base.metadata,\n    tags: task ? task.tags : base.tags,\n    taskComplete: task !== void 0,\n    taskLogged: taskLog !== void 0,\n    output: task?.output,\n    taskError: task?.error,\n    rootSpan: taskLog?.rootSpan,\n    scores,\n    scoreErrors,\n    loggedScores,\n    classifications,\n    loggedClassifications,\n    batchSubmissions\n  };\n}\nasync function readRunState(definition, store, key, caseIds) {\n  const record = await readJson(store, key);\n  if (!record) return void 0;\n  const selectedIds = caseIds ?? (record.caseCount === 0 ? [] : await readJson(store, `${key}/case-ids`));\n  if (!selectedIds)\n    throw new Error(`Workflow eval run ${record.runId} has no case index`);\n  const plans = plannedSubmissions(definition, record.runId, selectedIds);\n  const batchStages = batchStageKeys(definition);\n  const [cases, submissionRecords] = await Promise.all([\n    Promise.all(\n      selectedIds.map(\n        (id) => readCaseRecord(definition, store, key, id, batchStages)\n      )\n    ),\n    Promise.all(\n      plans.map(async ({ id }) => {\n        return readJson(\n          store,\n          submissionRecordKey(key, id)\n        );\n      })\n    )\n  ]);\n  const batchIds = new Set(\n    cases.flatMap(({ batchSubmissions }) => Object.values(batchSubmissions))\n  );\n  const batchRecords = await Promise.all(\n    [...batchIds].map(\n      (id) => readJson(store, submissionRecordKey(key, id))\n    )\n  );\n  const submissions = [...submissionRecords, ...batchRecords].filter(\n    (value) => value !== void 0\n  );\n  return { ...record, cases, submissions };\n}\nasync function writeRunRecord(store, key, state) {\n  const { cases: _cases, submissions: _submissions, ...record } = state;\n  await writeJson(store, key, record);\n}\nasync function writeCaseBaseRecords(store, key, records) {\n  await Promise.all(\n    records.map(\n      ({ id, caseId, trialIndex, datum, metadata, tags }) => writeJson(store, caseRecordKey(key, id, \"base\"), {\n        id,\n        caseId,\n        trialIndex,\n        datum,\n        metadata,\n        tags\n      })\n    )\n  );\n}\nasync function writeCaseRecords(store, key, records) {\n  const writes = [];\n  for (const record of records) {\n    if (record.taskComplete) {\n      writes.push(\n        writeJson(store, caseRecordKey(key, record.id, \"task\"), {\n          output: record.output,\n          metadata: record.metadata,\n          tags: record.tags,\n          taskComplete: true,\n          error: record.taskError\n        })\n      );\n    }\n    if (record.taskLogged) {\n      writes.push(\n        writeJson(store, caseRecordKey(key, record.id, \"task-log\"), {\n          rootSpan: record.rootSpan,\n          taskLogged: true\n        })\n      );\n    }\n    for (const [name, value] of Object.entries(record.scores)) {\n      writes.push(\n        writeJson(store, caseRecordKey(key, record.id, \"score\", name), value)\n      );\n    }\n    for (const [name, error] of Object.entries(record.scoreErrors)) {\n      writes.push(\n        writeJson(\n          store,\n          caseRecordKey(key, record.id, \"score-error\", name),\n          error\n        )\n      );\n    }\n    for (const name of Object.keys(record.loggedScores)) {\n      writes.push(\n        writeJson(\n          store,\n          caseRecordKey(key, record.id, \"score-log\", name),\n          true\n        )\n      );\n    }\n    for (const [name, value] of Object.entries(record.classifications)) {\n      writes.push(\n        writeJson(\n          store,\n          caseRecordKey(key, record.id, \"classification\", name),\n          value\n        )\n      );\n    }\n    for (const name of Object.keys(record.loggedClassifications)) {\n      writes.push(\n        writeJson(\n          store,\n          caseRecordKey(key, record.id, \"classification-log\", name),\n          true\n        )\n      );\n    }\n  }\n  await Promise.all(writes);\n}\nasync function writeSubmissionRecords(store, key, records) {\n  await Promise.all(\n    records.map(async (record) => {\n      if (record.externalId !== void 0) {\n        const locator = await store.getOrSet(\n          `${key}/external/${encodedKeyPart(record.externalId)}`,\n          encoder.encode(JSON.stringify(record.id))\n        );\n        if (JSON.parse(decoder.decode(locator.value)) !== record.id) {\n          throw new Error(`Duplicate externalId: ${record.externalId}`);\n        }\n      }\n      const progressKey = `${key}/progress/${record.completionMode}`;\n      await store.addToSet(`${progressKey}/submitted`, record.id);\n      if (record.status === \"complete\") {\n        await store.addToSet(`${progressKey}/complete`, record.id);\n      }\n      await writeJson(store, submissionRecordKey(key, record.id), record);\n    })\n  );\n}\nfunction deterministicId(value) {\n  const hex = contentVersion(encoder.encode(value)).padEnd(32, \"0\").slice(0, 32);\n  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-5${hex.slice(13, 16)}-a${hex.slice(17, 20)}-${hex.slice(20, 32)}`;\n}\nfunction contentVersion(value) {\n  if (isomorph_default.hash) return isomorph_default.hash(decoder.decode(value));\n  let hash = 2166136261;\n  for (const byte of value) {\n    hash ^= byte;\n    hash = Math.imul(hash, 16777619);\n  }\n  return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\nasync function readJson(store, key) {\n  const value = await store.read(key);\n  return value ? JSON.parse(decoder.decode(value)) : void 0;\n}\nasync function writeJson(store, key, value) {\n  await store.write(key, encoder.encode(stableStringify(value)));\n}\nfunction stableStringify(value) {\n  return JSON.stringify(value, (_key, nested) => {\n    if (nested && typeof nested === \"object\" && !Array.isArray(nested)) {\n      return Object.fromEntries(\n        Object.entries(nested).sort(\n          ([left], [right]) => left.localeCompare(right)\n        )\n      );\n    }\n    return nested;\n  });\n}\nfunction assertJsonValue(value, label) {\n  try {\n    const serialized = JSON.stringify(value);\n    if (serialized === void 0)\n      throw new Error(\"value serializes to undefined\");\n    return JSON.parse(serialized);\n  } catch (error) {\n    throw new Error(`${label} must be JSON serializable`, { cause: error });\n  }\n}\nfunction isWorkflowTask(value) {\n  return typeof value === \"object\" && value !== null && \"kind\" in value && value.kind === WORKFLOW_TASK_KIND;\n}\nfunction isWorkflowScorer(value) {\n  return typeof value === \"object\" && value !== null && \"kind\" in value && value.kind === WORKFLOW_SCORER_KIND;\n}\nfunction errorMessage2(error) {\n  if (error instanceof Error) return error.message;\n  if (typeof error === \"string\") return error;\n  return JSON.stringify(error) ?? String(error);\n}\nfunction asError(error) {\n  return error instanceof Error ? error : new Error(String(error));\n}\n\n// src/agent-assertions.ts\nfunction agentAssertionScorer(callback, options = {}) {\n  return async (args) => {\n    const { trace: _trace, ...callbackArgs } = args;\n    const callbackMetadata = callbackArgs.metadata ?? {};\n    const assertions = await callback({\n      ...callbackArgs,\n      metadata: callbackMetadata,\n      assert: agentAssertionHelpers\n    });\n    const resources = {};\n    if (assertions.some((assertion) => assertion.requiresTrace)) {\n      resources.spans = await args.trace?.getSpans({ spanType: [\"tool\"] });\n    }\n    const results = await Promise.all(\n      assertions.map(async (assertion) => {\n        const result = await assertion.evaluate(resources);\n        return {\n          name: assertion.name,\n          passed: result.passed,\n          failure: result.failure\n        };\n      })\n    );\n    const passed = results.filter((result) => result.passed).length;\n    const total = results.length;\n    const failed = results.filter((result) => !result.passed).map(\n      (result) => `${result.name}: ${result.failure ?? \"assertion did not pass\"}`\n    );\n    return {\n      name: options.name ?? \"assertions\",\n      score: total === 0 ? 1 : passed / total,\n      metadata: {\n        assertions: results.map(({ name, passed: passed2 }) => ({ name, passed: passed2 })),\n        failed\n      }\n    };\n  };\n}\nvar agentAssertionHelpers = {\n  equals: (actual, expected, name = \"equals\") => ({\n    name,\n    evaluate: () => {\n      const passed = deepEqual(actual, expected);\n      return {\n        passed,\n        failure: passed ? void 0 : `expected ${formatValue(actual)} to equal ${formatValue(expected)}`\n      };\n    }\n  }),\n  notEquals: (actual, expected, name = \"not equals\") => ({\n    name,\n    evaluate: () => {\n      const passed = !deepEqual(actual, expected);\n      return {\n        passed,\n        failure: passed ? void 0 : `expected ${formatValue(actual)} not to equal ${formatValue(expected)}`\n      };\n    }\n  }),\n  contains: (value, expected, name = \"contains\") => ({\n    name,\n    evaluate: () => {\n      const searchedValue = typeof value === \"string\" ? value : formatValue(value);\n      const passed = expected instanceof RegExp ? testRegex(expected, value) : searchedValue.includes(expected);\n      return {\n        passed,\n        failure: passed ? void 0 : `expected ${formatValue(value)} to contain ${formatValue(expected)}`\n      };\n    }\n  }),\n  matches: (value, schema, name = \"matches schema\") => ({\n    name,\n    evaluate: async () => {\n      const result = await validateSchema(schema, value);\n      return {\n        passed: result.passed,\n        failure: result.passed ? void 0 : `expected value to match schema: ${result.message}`\n      };\n    }\n  }),\n  calledTool: (toolName, options = {}, name = `called tool ${toolName}`) => ({\n    name,\n    requiresTrace: true,\n    evaluate: ({ spans }) => {\n      const calls = matchingToolCalls(spans ?? [], toolName, options);\n      const passed = options.times === void 0 ? calls.length > 0 : calls.length === options.times;\n      return {\n        passed,\n        failure: passed ? void 0 : options.times === void 0 ? `expected tool \"${toolName}\" to be called; found ${calls.length} matching call${calls.length === 1 ? \"\" : \"s\"}` : `expected tool \"${toolName}\" to be called ${options.times} time${options.times === 1 ? \"\" : \"s\"}; found ${calls.length} matching call${calls.length === 1 ? \"\" : \"s\"}`\n      };\n    }\n  }),\n  notCalledTool: (toolName, name = `did not call tool ${toolName}`) => ({\n    name,\n    requiresTrace: true,\n    evaluate: ({ spans }) => {\n      const calls = toolCalls(spans ?? []).filter(\n        (span) => getToolName(span) === toolName\n      );\n      const passed = calls.length === 0;\n      return {\n        passed,\n        failure: passed ? void 0 : `expected tool \"${toolName}\" not to be called; found ${calls.length} call${calls.length === 1 ? \"\" : \"s\"}`\n      };\n    }\n  }),\n  toolOrder: (toolNames, name = \"tool order\") => ({\n    name,\n    requiresTrace: true,\n    evaluate: ({ spans }) => {\n      const observed = toolCalls(spans ?? []).map(getToolName).filter((toolName) => toolName !== void 0);\n      let fromIndex = 0;\n      const passed = toolNames.every((toolName) => {\n        const index = observed.indexOf(toolName, fromIndex);\n        if (index === -1) return false;\n        fromIndex = index + 1;\n        return true;\n      });\n      return {\n        passed,\n        failure: passed ? void 0 : `expected tool order ${toolNames.join(\" -> \")}; observed ${observed.join(\" -> \") || \"no tools\"}`\n      };\n    }\n  }),\n  usedNoTools: (name = \"used no tools\") => ({\n    name,\n    requiresTrace: true,\n    evaluate: ({ spans }) => {\n      const calls = toolCalls(spans ?? []);\n      const passed = calls.length === 0;\n      return {\n        passed,\n        failure: passed ? void 0 : `expected no tool calls; found ${calls.length}`\n      };\n    }\n  }),\n  maxToolCalls: (max, name = `at most ${max} tool calls`) => ({\n    name,\n    requiresTrace: true,\n    evaluate: ({ spans }) => {\n      const calls = toolCalls(spans ?? []);\n      const passed = calls.length <= max;\n      return {\n        passed,\n        failure: passed ? void 0 : `expected at most ${max} tool call${max === 1 ? \"\" : \"s\"}; found ${calls.length}`\n      };\n    }\n  })\n};\nasync function validateSchema(schema, value) {\n  try {\n    if (\"safeParse\" in schema) {\n      const result2 = schema.safeParse(value);\n      return result2.success ? { passed: true, message: \"\" } : { passed: false, message: formatSchemaError(result2.error) };\n    }\n    if (\"parse\" in schema) {\n      schema.parse(value);\n      return { passed: true, message: \"\" };\n    }\n    const result = await schema[\"~standard\"].validate(value);\n    if (typeof result === \"object\" && result !== null && \"issues\" in result && Array.isArray(result.issues) && result.issues.length > 0) {\n      return { passed: false, message: formatValue(result.issues) };\n    }\n    return { passed: true, message: \"\" };\n  } catch (e) {\n    return { passed: false, message: formatSchemaError(e) };\n  }\n}\nfunction toolCalls(spans) {\n  return spans.filter((span) => span.span_attributes?.type === \"tool\");\n}\nfunction matchingToolCalls(spans, toolName, options) {\n  return toolCalls(spans).filter((span) => {\n    if (getToolName(span) !== toolName) return false;\n    if (Object.prototype.hasOwnProperty.call(options, \"input\") && !matchesValue(span.input, options.input)) {\n      return false;\n    }\n    if (Object.prototype.hasOwnProperty.call(options, \"output\") && !matchesValue(span.output, options.output)) {\n      return false;\n    }\n    if (options.isError !== void 0 && Boolean(span.error) !== options.isError) {\n      return false;\n    }\n    return true;\n  });\n}\nfunction getToolName(span) {\n  const spanName = [span.span_attributes?.name, span.name].map(normalizeToolName).find((value) => value !== void 0);\n  if (spanName?.includes(\"/\")) {\n    return spanName;\n  }\n  const metadataName = [\n    span.metadata?.tool_name,\n    span.metadata?.[\"gen_ai.tool.name\"]\n  ].map(normalizeToolName).find((value) => value !== void 0);\n  const mcpServer = [\n    span.metadata?.[\"mcp.server\"],\n    span.metadata?.[\"openai_codex.mcp.server\"]\n  ].find((value) => typeof value === \"string\" && value !== \"\");\n  if (metadataName && mcpServer) {\n    return `${mcpServer}/${metadataName}`;\n  }\n  return metadataName ?? spanName;\n}\nfunction normalizeToolName(value) {\n  if (typeof value !== \"string\" || value === \"\") {\n    return void 0;\n  }\n  return value.startsWith(\"tool:\") ? value.slice(\"tool:\".length).trim() : value;\n}\nfunction matchesValue(actual, matcher) {\n  if (matcher instanceof RegExp) {\n    return testRegex(matcher, actual);\n  }\n  if (typeof matcher === \"function\") {\n    return matcher(actual);\n  }\n  if (Array.isArray(matcher)) {\n    return Array.isArray(actual) && actual.length === matcher.length && matcher.every((value, index) => matchesValue(actual[index], value));\n  }\n  if (isPlainObject(matcher) && isPlainObject(actual)) {\n    return Object.entries(matcher).every(\n      ([key, value]) => Object.prototype.hasOwnProperty.call(actual, key) && matchesValue(actual[key], value)\n    );\n  }\n  return deepEqual(actual, matcher);\n}\nfunction testRegex(matcher, value) {\n  matcher.lastIndex = 0;\n  return matcher.test(typeof value === \"string\" ? value : formatValue(value));\n}\nfunction deepEqual(left, right) {\n  if (Object.is(left, right)) return true;\n  if (Array.isArray(left) && Array.isArray(right)) {\n    return left.length === right.length && left.every((item, index) => deepEqual(item, right[index]));\n  }\n  if (isPlainObject(left) && isPlainObject(right)) {\n    const leftKeys = Object.keys(left);\n    const rightKeys = Object.keys(right);\n    return leftKeys.length === rightKeys.length && leftKeys.every(\n      (key) => Object.prototype.hasOwnProperty.call(right, key) && deepEqual(left[key], right[key])\n    );\n  }\n  return false;\n}\nfunction isPlainObject(value) {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;\n}\nfunction formatSchemaError(error) {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  return formatValue(error);\n}\nfunction formatValue(value) {\n  if (value instanceof RegExp) {\n    return value.toString();\n  }\n  if (typeof value === \"string\") {\n    return JSON.stringify(value);\n  }\n  try {\n    const serialized = JSON.stringify(value);\n    if (serialized !== void 0 && !hasUndefinedJsonValue(value)) {\n      return serialized;\n    }\n    return formatValueWithUndefined(value, /* @__PURE__ */ new Set());\n  } catch {\n    return String(value);\n  }\n}\nfunction hasUndefinedJsonValue(value, seen = /* @__PURE__ */ new Set()) {\n  if (value === void 0) {\n    return true;\n  }\n  if (typeof value !== \"object\" || value === null) {\n    return false;\n  }\n  if (seen.has(value)) {\n    return false;\n  }\n  seen.add(value);\n  if (Array.isArray(value)) {\n    return Array.from({ length: value.length }).some(\n      (_, index) => hasUndefinedJsonValue(value[index], seen)\n    );\n  }\n  return Object.keys(value).some(\n    (key) => hasUndefinedJsonValue(value[key], seen)\n  );\n}\nfunction formatValueWithUndefined(value, seen) {\n  if (value === void 0) {\n    return \"undefined\";\n  }\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"string\") {\n    return JSON.stringify(value);\n  }\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    return JSON.stringify(value);\n  }\n  if (typeof value === \"bigint\" || typeof value === \"function\") {\n    return String(value);\n  }\n  if (typeof value === \"symbol\") {\n    return String(value);\n  }\n  if (value instanceof RegExp) {\n    return value.toString();\n  }\n  if (typeof value !== \"object\") {\n    return String(value);\n  }\n  if (seen.has(value)) {\n    return '\"[Circular]\"';\n  }\n  seen.add(value);\n  if (typeof value.toJSON === \"function\") {\n    const jsonValue = value.toJSON();\n    seen.delete(value);\n    return formatValueWithUndefined(jsonValue, seen);\n  }\n  if (Array.isArray(value)) {\n    const formatted2 = Array.from(\n      { length: value.length },\n      (_, index) => formatValueWithUndefined(value[index], seen)\n    );\n    seen.delete(value);\n    return `[${formatted2.join(\",\")}]`;\n  }\n  const formatted = Object.keys(value).map(\n    (key) => `${JSON.stringify(key)}:${formatValueWithUndefined(\n      value[key],\n      seen\n    )}`\n  );\n  seen.delete(value);\n  return `{${formatted.join(\",\")}}`;\n}\n\n// src/dataset-pipeline.ts\nfunction DatasetPipeline(definition) {\n  if (!globalThis.__braintrust_dataset_pipelines) {\n    globalThis.__braintrust_dataset_pipelines = [];\n  }\n  const storedDefinition = {\n    name: definition.name,\n    source: {\n      projectId: definition.source.projectId,\n      projectName: definition.source.projectName,\n      orgName: definition.source.orgName,\n      filter: definition.source.filter,\n      scope: definition.source.scope ?? \"span\"\n    },\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions, @typescript-eslint/no-explicit-any\n    transform: definition.transform,\n    target: {\n      projectId: definition.target.projectId,\n      projectName: definition.target.projectName,\n      orgName: definition.target.orgName,\n      datasetName: definition.target.datasetName,\n      description: definition.target.description,\n      metadata: definition.target.metadata\n    }\n  };\n  globalThis.__braintrust_dataset_pipelines.push(storedDefinition);\n}\n\n// src/framework2.ts\nvar import_v312 = require(\"zod/v3\");\nvar currentFilename = typeof __filename !== \"undefined\" ? __filename : \"unknown\";\nvar ProjectBuilder = class {\n  create(opts) {\n    return new Project2(opts);\n  }\n};\nvar projects = new ProjectBuilder();\nvar Project2 = class {\n  name;\n  id;\n  projectGroupName;\n  tools;\n  prompts;\n  parameters;\n  scorers;\n  classifiers;\n  _publishableCodeFunctions = [];\n  _publishablePrompts = [];\n  _publishableParameters = [];\n  constructor(args) {\n    _initializeSpanContext();\n    this.name = \"name\" in args ? args.name : void 0;\n    this.id = \"id\" in args ? args.id : void 0;\n    this.projectGroupName = \"name\" in args ? args.projectGroupName : void 0;\n    this.tools = new ToolBuilder(this);\n    this.prompts = new PromptBuilder(this);\n    this.parameters = new ParametersBuilder(this);\n    this.scorers = new ScorerBuilder(this);\n    this.classifiers = new ClassifierBuilder(this);\n  }\n  addPrompt(prompt) {\n    this._publishablePrompts.push(prompt);\n    if (globalThis._lazy_load) {\n      globalThis._evals.prompts.push(prompt);\n    }\n  }\n  addParameters(parameters) {\n    this._publishableParameters.push(parameters);\n    if (globalThis._lazy_load) {\n      if (globalThis._evals.parameters == null)\n        globalThis._evals.parameters = [];\n      globalThis._evals.parameters.push(parameters);\n    }\n  }\n  addCodeFunction(fn) {\n    this._publishableCodeFunctions.push(fn);\n    if (globalThis._lazy_load) {\n      globalThis._evals.functions.push(fn);\n    }\n  }\n  async publish() {\n    if (globalThis._lazy_load) {\n      console.warn(\"publish() is a no-op when running `braintrust push`.\");\n      return;\n    }\n    await login();\n    const projectMap = new ProjectNameIdMap();\n    const functionDefinitions = [];\n    if (this._publishableCodeFunctions.length > 0) {\n      console.warn(\n        \"Code functions cannot be published directly. Use `braintrust push` instead.\"\n      );\n    }\n    if (this._publishablePrompts.length > 0) {\n      for (const prompt of this._publishablePrompts) {\n        const functionDefinition = await prompt.toFunctionDefinition(projectMap);\n        functionDefinitions.push(functionDefinition);\n      }\n    }\n    await _internalGetGlobalState().apiConn().post_json(\"insert-functions\", {\n      functions: functionDefinitions\n    });\n  }\n};\nvar ToolBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\n  project;\n  taskCounter = 0;\n  // This type definition is just a catch all so that the implementation can be\n  // less specific than the two more specific declarations above.\n  create(opts) {\n    this.taskCounter++;\n    opts = opts ?? {};\n    const { handler, name, slug, parameters, returns, ...rest } = opts;\n    let resolvedName = name ?? handler.name;\n    if (resolvedName.trim().length === 0) {\n      resolvedName = `Tool ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`;\n    }\n    const tool = new CodeFunction(this.project, {\n      handler,\n      name: resolvedName,\n      slug: slug ?? slugify(resolvedName, { lower: true, strict: true }),\n      type: \"tool\",\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions\n      parameters,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions\n      returns,\n      ...rest\n    });\n    this.project.addCodeFunction(tool);\n    return tool;\n  }\n};\nvar ScorerBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\n  project;\n  taskCounter = 0;\n  create(opts) {\n    this.taskCounter++;\n    let resolvedName = opts.name;\n    if (!resolvedName && \"handler\" in opts) {\n      resolvedName = opts.handler.name;\n    }\n    if (!resolvedName || resolvedName.trim().length === 0) {\n      resolvedName = `Scorer ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`;\n    }\n    const slug = opts.slug ?? slugify(resolvedName, { lower: true, strict: true });\n    if (\"handler\" in opts) {\n      const scorer = new CodeFunction(this.project, {\n        ...opts,\n        name: resolvedName,\n        slug,\n        type: \"scorer\"\n      });\n      this.project.addCodeFunction(scorer);\n    } else {\n      const promptBlock = \"messages\" in opts ? {\n        type: \"chat\",\n        messages: opts.messages\n      } : {\n        type: \"completion\",\n        content: opts.prompt\n      };\n      const promptData = {\n        prompt: promptBlock,\n        options: {\n          model: opts.model,\n          params: opts.params\n        },\n        parser: {\n          type: \"llm_classifier\",\n          use_cot: opts.useCot,\n          choice_scores: opts.choiceScores\n        },\n        ...opts.templateFormat ? { template_format: opts.templateFormat } : {}\n      };\n      const codePrompt = new CodePrompt(\n        this.project,\n        promptData,\n        [],\n        {\n          ...opts,\n          name: resolvedName,\n          slug\n        },\n        \"scorer\"\n      );\n      this.project.addPrompt(codePrompt);\n    }\n  }\n};\nvar ClassifierBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\n  project;\n  taskCounter = 0;\n  create(opts) {\n    this.taskCounter++;\n    let resolvedName = opts.name ?? opts.handler.name;\n    if (!resolvedName || resolvedName.trim().length === 0) {\n      resolvedName = `Classifier ${isomorph_default.basename(currentFilename)} ${this.taskCounter}`;\n    }\n    const slug = opts.slug ?? slugify(resolvedName, { lower: true, strict: true });\n    const classifier = new CodeFunction(this.project, {\n      ...opts,\n      name: resolvedName,\n      slug,\n      type: \"classifier\"\n    });\n    this.project.addCodeFunction(classifier);\n    return classifier;\n  }\n};\nvar CodeFunction = class {\n  constructor(project, opts) {\n    this.project = project;\n    this.handler = opts.handler;\n    this.name = opts.name;\n    this.slug = opts.slug;\n    this.description = opts.description;\n    this.type = opts.type;\n    this.ifExists = opts.ifExists;\n    this.tags = opts.tags;\n    this.metadata = opts.metadata;\n    this.parameters = opts.parameters;\n    this.returns = opts.returns;\n    if (this.returns && !this.parameters) {\n      throw new Error(\"parameters are required if return type is defined\");\n    }\n  }\n  project;\n  handler;\n  name;\n  slug;\n  type;\n  description;\n  parameters;\n  returns;\n  ifExists;\n  tags;\n  metadata;\n  key() {\n    return JSON.stringify([\n      this.project.id ?? \"\",\n      this.project.name ?? \"\",\n      this.slug\n    ]);\n  }\n};\nvar CodePrompt = class {\n  project;\n  name;\n  slug;\n  prompt;\n  ifExists;\n  description;\n  id;\n  functionType;\n  toolFunctions;\n  tags;\n  metadata;\n  environmentSlugs;\n  constructor(project, prompt, toolFunctions, opts, functionType) {\n    this.project = project;\n    this.name = opts.name;\n    this.slug = opts.slug;\n    this.prompt = prompt;\n    this.toolFunctions = toolFunctions;\n    this.ifExists = opts.ifExists;\n    this.description = opts.description;\n    this.id = opts.id;\n    this.functionType = functionType;\n    this.tags = opts.tags;\n    this.metadata = opts.metadata;\n    this.environmentSlugs = opts.environments;\n  }\n  async toFunctionDefinition(projectNameToId) {\n    const prompt_data = {\n      ...this.prompt\n    };\n    if (this.toolFunctions.length > 0) {\n      const resolvableToolFunctions = await Promise.all(\n        this.toolFunctions.map(async (fn) => {\n          if (\"slug\" in fn) {\n            return {\n              type: \"slug\",\n              project_id: await projectNameToId.resolve(fn.project),\n              slug: fn.slug\n            };\n          } else {\n            return fn;\n          }\n        })\n      );\n      prompt_data.tool_functions = // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      resolvableToolFunctions;\n    }\n    return {\n      project_id: await projectNameToId.resolve(this.project),\n      name: this.name,\n      slug: this.slug,\n      description: this.description ?? \"\",\n      function_data: {\n        type: \"prompt\"\n      },\n      function_type: this.functionType,\n      prompt_data,\n      if_exists: this.ifExists,\n      tags: this.tags,\n      metadata: this.metadata,\n      environments: this.environmentSlugs && this.environmentSlugs.length > 0 ? this.environmentSlugs.map((slug) => ({ slug })) : void 0\n    };\n  }\n};\nvar PromptBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\n  project;\n  create(opts) {\n    const toolFunctions = [];\n    const rawTools = [];\n    for (const tool of opts.tools ?? []) {\n      if (tool instanceof CodeFunction) {\n        toolFunctions.push(tool);\n      } else if (\"type\" in tool && !(\"function\" in tool)) {\n        toolFunctions.push(tool);\n      } else {\n        rawTools.push(tool);\n      }\n    }\n    const slug = opts.slug ?? slugify(opts.name, { lower: true, strict: true });\n    const promptData = promptDefinitionToPromptData(opts, rawTools);\n    const promptRow = {\n      id: opts.id,\n      _xact_id: opts.version ? loadPrettyXact(opts.version) : void 0,\n      name: opts.name,\n      slug,\n      prompt_data: promptData,\n      tags: opts.tags,\n      ...this.project.id !== void 0 ? { project_id: this.project.id } : {}\n    };\n    const prompt = new Prompt2(\n      promptRow,\n      {},\n      // It doesn't make sense to specify defaults here.\n      opts.noTrace ?? false\n    );\n    const codePrompt = new CodePrompt(this.project, promptData, toolFunctions, {\n      ...opts,\n      slug\n    });\n    this.project.addPrompt(codePrompt);\n    return prompt;\n  }\n};\nvar CodeParameters = class {\n  project;\n  name;\n  slug;\n  description;\n  schema;\n  ifExists;\n  metadata;\n  constructor(project, opts) {\n    this.project = project;\n    this.name = opts.name;\n    this.slug = opts.slug;\n    this.description = opts.description;\n    this.schema = opts.schema;\n    this.ifExists = opts.ifExists;\n    this.metadata = opts.metadata;\n  }\n  async toFunctionDefinition(projectNameToId) {\n    const schema = serializeEvalParameterstoParametersSchema(this.schema);\n    return {\n      project_id: await projectNameToId.resolve(this.project),\n      name: this.name,\n      slug: this.slug,\n      description: this.description ?? \"\",\n      function_type: \"parameters\",\n      function_data: {\n        type: \"parameters\",\n        data: getDefaultDataFromParametersSchema(schema),\n        __schema: schema\n      },\n      if_exists: this.ifExists,\n      metadata: this.metadata\n    };\n  }\n};\nvar ParametersBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\n  project;\n  create(opts) {\n    const slug = opts.slug ?? slugify(opts.name, { lower: true, strict: true });\n    const codeParameters = new CodeParameters(this.project, {\n      name: opts.name,\n      slug,\n      description: opts.description,\n      schema: opts.schema,\n      ifExists: opts.ifExists,\n      metadata: opts.metadata\n    });\n    this.project.addParameters(codeParameters);\n    return opts.schema;\n  }\n};\nfunction serializeEvalParameterstoParametersSchema(parameters) {\n  const properties = {};\n  const required = [];\n  for (const [name, value] of Object.entries(parameters)) {\n    if (\"type\" in value && value.type === \"prompt\") {\n      const defaultPromptData = value.default ? promptDefinitionToPromptData(value.default) : void 0;\n      properties[name] = {\n        type: \"object\",\n        \"x-bt-type\": \"prompt\",\n        ...value.description ? { description: value.description } : {},\n        ...defaultPromptData ? { default: defaultPromptData } : {}\n      };\n      if (!defaultPromptData) {\n        required.push(name);\n      }\n    } else if (\"type\" in value && value.type === \"model\") {\n      properties[name] = {\n        type: \"string\",\n        \"x-bt-type\": \"model\",\n        ...value.description ? { description: value.description } : {},\n        ...\"default\" in value ? { default: value.default } : {}\n      };\n      if (!(\"default\" in value)) {\n        required.push(name);\n      }\n    } else {\n      const jsonSchema = zodToJsonSchema(value);\n      properties[name] = jsonSchema;\n      if (!(\"default\" in jsonSchema)) {\n        required.push(name);\n      }\n    }\n  }\n  return {\n    type: \"object\",\n    properties,\n    ...required.length > 0 ? { required } : {},\n    additionalProperties: true\n  };\n}\nfunction getDefaultDataFromParametersSchema(schema) {\n  return Object.fromEntries(\n    Object.entries(schema.properties).flatMap(([name, value]) => {\n      if (!(\"default\" in value)) {\n        return [];\n      }\n      return [[name, value.default]];\n    })\n  );\n}\nvar ProjectNameIdMap = class {\n  nameToId = {};\n  idToName = {};\n  async getId(projectName, projectGroupName) {\n    if (!(projectName in this.nameToId)) {\n      const response = await _internalGetGlobalState().appConn().post_json(\"api/project/register\", {\n        project_name: projectName,\n        ...projectGroupName ? { project_group_name: projectGroupName } : {}\n      });\n      const result = import_v312.z.object({\n        project: Project\n      }).parse(response);\n      const projectId = result.project.id;\n      this.nameToId[projectName] = projectId;\n      this.idToName[projectId] = projectName;\n    }\n    return this.nameToId[projectName];\n  }\n  async getName(projectId) {\n    if (!(projectId in this.idToName)) {\n      const response = await _internalGetGlobalState().appConn().post_json(\"api/project/get\", {\n        id: projectId\n      });\n      const result = import_v312.z.array(Project).nonempty().parse(response);\n      const projectName = result[0].name;\n      this.idToName[projectId] = projectName;\n      this.nameToId[projectName] = projectId;\n    }\n    return this.idToName[projectId];\n  }\n  async resolve(project) {\n    if (project.id) {\n      return project.id;\n    }\n    return this.getId(project.name, project.projectGroupName);\n  }\n};\n\n// dev/types.ts\nvar import_v313 = require(\"zod/v3\");\nvar evalBodySchema = import_v313.z.object({\n  name: import_v313.z.string(),\n  parameters: import_v313.z.record(import_v313.z.string(), import_v313.z.unknown()).nullish(),\n  data: RunEval.shape.data,\n  scores: import_v313.z.array(\n    import_v313.z.object({\n      function_id: FunctionId,\n      name: import_v313.z.string()\n    })\n  ).nullish(),\n  experiment_name: import_v313.z.string().nullish(),\n  project_id: import_v313.z.string().nullish(),\n  parent: InvokeParent.optional(),\n  stream: import_v313.z.boolean().optional()\n});\nvar staticParametersSchema = import_v313.z.record(\n  import_v313.z.string(),\n  import_v313.z.union([\n    import_v313.z.object({\n      type: import_v313.z.literal(\"prompt\"),\n      default: PromptData.optional(),\n      description: import_v313.z.string().optional()\n    }),\n    import_v313.z.object({\n      type: import_v313.z.literal(\"model\"),\n      default: import_v313.z.string().optional(),\n      description: import_v313.z.string().optional()\n    }),\n    import_v313.z.object({\n      type: import_v313.z.literal(\"data\"),\n      schema: import_v313.z.record(import_v313.z.unknown()),\n      default: import_v313.z.unknown().optional(),\n      description: import_v313.z.string().optional()\n    })\n  ])\n);\nvar parametersSchema = import_v313.z.object({\n  type: import_v313.z.literal(\"object\"),\n  properties: import_v313.z.record(import_v313.z.string(), import_v313.z.record(import_v313.z.unknown())),\n  required: import_v313.z.array(import_v313.z.string()).optional(),\n  additionalProperties: import_v313.z.boolean().optional()\n});\nvar parametersSourceSchema = import_v313.z.object({\n  parametersId: import_v313.z.string().optional(),\n  slug: import_v313.z.string(),\n  name: import_v313.z.string(),\n  projectId: import_v313.z.string().optional(),\n  version: import_v313.z.string().optional()\n});\nvar parametersContainerSchema = import_v313.z.object({\n  type: import_v313.z.literal(\"braintrust.parameters\"),\n  schema: parametersSchema,\n  source: parametersSourceSchema\n});\nvar staticParametersContainerSchema = import_v313.z.object({\n  type: import_v313.z.literal(\"braintrust.staticParameters\"),\n  schema: staticParametersSchema,\n  source: import_v313.z.null().nullish()\n});\nvar serializedParametersContainerSchema = import_v313.z.union([\n  parametersContainerSchema,\n  staticParametersContainerSchema,\n  // keeping this type here since old versions of the SDK will still pass the unwrapped schema and we need to handle this in the app\n  staticParametersSchema\n]);\nvar evaluatorDefinitionSchema = import_v313.z.object({\n  parameters: serializedParametersContainerSchema.nullish(),\n  scores: import_v313.z.array(import_v313.z.object({ name: import_v313.z.string() })).optional(),\n  classifiers: import_v313.z.array(import_v313.z.object({ name: import_v313.z.string() })).optional()\n});\nvar evaluatorDefinitionsSchema = import_v313.z.record(\n  import_v313.z.string(),\n  evaluatorDefinitionSchema\n);\n\n// src/wrappers/elevenlabs.ts\nvar clients2 = /* @__PURE__ */ new WeakMap();\nfunction wrapElevenLabs(client) {\n  if (!isObject(client) || !isObject(client.textToSpeech) || typeof client.textToSpeech.convert !== \"function\") {\n    debugLogger.warn(\"Unsupported ElevenLabs client. Not wrapping.\");\n    return client;\n  }\n  const cached = clients2.get(client);\n  if (cached) return cached;\n  const sdk = client;\n  const speech = new Proxy(sdk.textToSpeech, {\n    get(target, prop, receiver) {\n      switch (prop) {\n        case \"convert\":\n        case \"stream\":\n          return (...args) => elevenLabsChannels[prop].invoke(target[prop], target, args, {});\n        case \"convertWithTimestamps\":\n          return (...args) => elevenLabsChannels.convertWithTimestamps.invoke(\n            target.convertWithTimestamps,\n            target,\n            args,\n            {}\n          );\n        case \"streamWithTimestamps\":\n          return (...args) => elevenLabsChannels.streamWithTimestamps.invoke(\n            target.streamWithTimestamps,\n            target,\n            args,\n            {}\n          );\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    }\n  });\n  const transcription = new Proxy(sdk.speechToText, {\n    get(target, prop, receiver) {\n      if (prop === \"convert\")\n        return (request, options) => elevenLabsChannels.transcribe.invoke(\n          target.convert,\n          target,\n          [request, options],\n          {}\n        );\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n  const proxy = new Proxy(sdk, {\n    get(target, prop, receiver) {\n      if (prop === \"textToSpeech\") return speech;\n      if (prop === \"speechToText\") return transcription;\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n  clients2.set(client, proxy);\n  clients2.set(proxy, proxy);\n  return proxy;\n}\n\n// src/browser/index.ts\nconfigureBrowser();\n"]}