{"version":3,"sources":["../src/event-source.ts","../src/message.ts","../src/tracing/tracer.ts","../src/tracing/registry.ts","../src/tracing/index.ts","../src/message-processing.ts","../src/model.drivers/base.ts","../src/model.drivers/openai-compatible.ts","../src/model.drivers/openai.ts","../src/model.drivers/anthropic.ts","../src/model.drivers/gemini.ts","../src/model.drivers/cerebras.ts","../node_modules/retry/lib/retry_operation.js","../node_modules/retry/lib/retry.js","../node_modules/retry/index.js","../node_modules/p-retry/index.js","../node_modules/eventemitter3/index.js","../node_modules/p-finally/index.js","../node_modules/p-timeout/index.js","../node_modules/p-queue/dist/lower-bound.js","../node_modules/p-queue/dist/priority-queue.js","../node_modules/p-queue/dist/index.js","../node_modules/langsmith/dist/singletons/fetch.cjs","../node_modules/langsmith/dist/utils/async_caller.cjs","../node_modules/langsmith/dist/utils/messages.cjs","../node_modules/langsmith/dist/utils/_uuid.cjs","../node_modules/langsmith/dist/utils/warn.cjs","../node_modules/semver/internal/constants.js","../node_modules/semver/internal/debug.js","../node_modules/semver/internal/re.js","../node_modules/semver/internal/parse-options.js","../node_modules/semver/internal/identifiers.js","../node_modules/semver/classes/semver.js","../node_modules/semver/functions/parse.js","../node_modules/semver/functions/valid.js","../node_modules/semver/functions/clean.js","../node_modules/semver/functions/inc.js","../node_modules/semver/functions/diff.js","../node_modules/semver/functions/major.js","../node_modules/semver/functions/minor.js","../node_modules/semver/functions/patch.js","../node_modules/semver/functions/prerelease.js","../node_modules/semver/functions/compare.js","../node_modules/semver/functions/rcompare.js","../node_modules/semver/functions/compare-loose.js","../node_modules/semver/functions/compare-build.js","../node_modules/semver/functions/sort.js","../node_modules/semver/functions/rsort.js","../node_modules/semver/functions/gt.js","../node_modules/semver/functions/lt.js","../node_modules/semver/functions/eq.js","../node_modules/semver/functions/neq.js","../node_modules/semver/functions/gte.js","../node_modules/semver/functions/lte.js","../node_modules/semver/functions/cmp.js","../node_modules/semver/functions/coerce.js","../node_modules/semver/internal/lrucache.js","../node_modules/semver/classes/range.js","../node_modules/semver/classes/comparator.js","../node_modules/semver/functions/satisfies.js","../node_modules/semver/ranges/to-comparators.js","../node_modules/semver/ranges/max-satisfying.js","../node_modules/semver/ranges/min-satisfying.js","../node_modules/semver/ranges/min-version.js","../node_modules/semver/ranges/valid.js","../node_modules/semver/ranges/outside.js","../node_modules/semver/ranges/gtr.js","../node_modules/semver/ranges/ltr.js","../node_modules/semver/ranges/intersects.js","../node_modules/semver/ranges/simplify.js","../node_modules/semver/ranges/subset.js","../node_modules/semver/index.js","../node_modules/langsmith/dist/utils/prompts.cjs","../node_modules/langsmith/dist/utils/error.cjs","../node_modules/langsmith/dist/utils/fast-safe-stringify/index.cjs","../node_modules/langsmith/dist/client.cjs","../node_modules/langsmith/dist/index.cjs","../node_modules/langsmith/dist/utils/env.cjs","../node_modules/langsmith/dist/env.cjs","../node_modules/langsmith/dist/singletons/constants.cjs","../node_modules/langsmith/dist/run_trees.cjs","../node_modules/langsmith/dist/singletons/traceable.cjs","../node_modules/langsmith/dist/utils/asserts.cjs","../node_modules/langsmith/dist/traceable.cjs","../node_modules/langsmith/traceable.cjs","../node_modules/ms/index.js","../node_modules/debug/src/common.js","../node_modules/debug/src/browser.js","../node_modules/has-flag/index.js","../node_modules/supports-color/index.js","../node_modules/debug/src/node.js","../node_modules/debug/src/index.js","../node_modules/@kwsites/file-exists/src/index.ts","../node_modules/@kwsites/file-exists/index.ts","../node_modules/@kwsites/promise-deferred/src/index.ts","../node_modules/simple-git/src/lib/args/pathspec.ts","../node_modules/simple-git/src/lib/errors/git-error.ts","../node_modules/simple-git/src/lib/errors/git-response-error.ts","../node_modules/simple-git/src/lib/errors/task-configuration-error.ts","../node_modules/simple-git/src/lib/utils/util.ts","../node_modules/simple-git/src/lib/utils/argument-filters.ts","../node_modules/simple-git/src/lib/utils/exit-codes.ts","../node_modules/simple-git/src/lib/utils/git-output-streams.ts","../node_modules/simple-git/src/lib/utils/line-parser.ts","../node_modules/simple-git/src/lib/utils/simple-git-options.ts","../node_modules/simple-git/src/lib/utils/task-options.ts","../node_modules/simple-git/src/lib/utils/task-parser.ts","../node_modules/simple-git/src/lib/utils/index.ts","../node_modules/simple-git/src/lib/tasks/check-is-repo.ts","../node_modules/simple-git/src/lib/responses/CleanSummary.ts","../node_modules/simple-git/src/lib/tasks/task.ts","../node_modules/simple-git/src/lib/tasks/clean.ts","../node_modules/simple-git/src/lib/responses/ConfigList.ts","../node_modules/simple-git/src/lib/tasks/config.ts","../node_modules/simple-git/src/lib/tasks/diff-name-status.ts","../node_modules/simple-git/src/lib/tasks/grep.ts","../node_modules/simple-git/src/lib/tasks/reset.ts","../node_modules/simple-git/src/lib/git-logger.ts","../node_modules/simple-git/src/lib/runners/tasks-pending-queue.ts","../node_modules/simple-git/src/lib/runners/git-executor-chain.ts","../node_modules/simple-git/src/lib/runners/git-executor.ts","../node_modules/simple-git/src/lib/task-callback.ts","../node_modules/simple-git/src/lib/tasks/change-working-directory.ts","../node_modules/simple-git/src/lib/tasks/checkout.ts","../node_modules/simple-git/src/lib/tasks/count-objects.ts","../node_modules/simple-git/src/lib/parsers/parse-commit.ts","../node_modules/simple-git/src/lib/tasks/commit.ts","../node_modules/simple-git/src/lib/tasks/first-commit.ts","../node_modules/simple-git/src/lib/tasks/hash-object.ts","../node_modules/simple-git/src/lib/responses/InitSummary.ts","../node_modules/simple-git/src/lib/tasks/init.ts","../node_modules/simple-git/src/lib/args/log-format.ts","../node_modules/simple-git/src/lib/responses/DiffSummary.ts","../node_modules/simple-git/src/lib/parsers/parse-diff-summary.ts","../node_modules/simple-git/src/lib/parsers/parse-list-log-summary.ts","../node_modules/simple-git/src/lib/tasks/diff.ts","../node_modules/simple-git/src/lib/tasks/log.ts","../node_modules/simple-git/src/lib/responses/MergeSummary.ts","../node_modules/simple-git/src/lib/responses/PullSummary.ts","../node_modules/simple-git/src/lib/parsers/parse-remote-objects.ts","../node_modules/simple-git/src/lib/parsers/parse-remote-messages.ts","../node_modules/simple-git/src/lib/parsers/parse-pull.ts","../node_modules/simple-git/src/lib/parsers/parse-merge.ts","../node_modules/simple-git/src/lib/tasks/merge.ts","../node_modules/simple-git/src/lib/parsers/parse-push.ts","../node_modules/simple-git/src/lib/tasks/push.ts","../node_modules/simple-git/src/lib/tasks/show.ts","../node_modules/simple-git/src/lib/responses/FileStatusSummary.ts","../node_modules/simple-git/src/lib/responses/StatusSummary.ts","../node_modules/simple-git/src/lib/tasks/status.ts","../node_modules/simple-git/src/lib/tasks/version.ts","../node_modules/simple-git/src/lib/simple-git-api.ts","../node_modules/simple-git/src/lib/runners/scheduler.ts","../node_modules/simple-git/src/lib/tasks/apply-patch.ts","../node_modules/simple-git/src/lib/responses/BranchDeleteSummary.ts","../node_modules/simple-git/src/lib/parsers/parse-branch-delete.ts","../node_modules/simple-git/src/lib/responses/BranchSummary.ts","../node_modules/simple-git/src/lib/parsers/parse-branch.ts","../node_modules/simple-git/src/lib/tasks/branch.ts","../node_modules/simple-git/src/lib/responses/CheckIgnore.ts","../node_modules/simple-git/src/lib/tasks/check-ignore.ts","../node_modules/simple-git/src/lib/tasks/clone.ts","../node_modules/simple-git/src/lib/parsers/parse-fetch.ts","../node_modules/simple-git/src/lib/tasks/fetch.ts","../node_modules/simple-git/src/lib/parsers/parse-move.ts","../node_modules/simple-git/src/lib/tasks/move.ts","../node_modules/simple-git/src/lib/tasks/pull.ts","../node_modules/simple-git/src/lib/responses/GetRemoteSummary.ts","../node_modules/simple-git/src/lib/tasks/remote.ts","../node_modules/simple-git/src/lib/tasks/stash-list.ts","../node_modules/simple-git/src/lib/tasks/sub-module.ts","../node_modules/simple-git/src/lib/responses/TagList.ts","../node_modules/simple-git/src/lib/tasks/tag.ts","../node_modules/simple-git/src/git.js","../node_modules/simple-git/src/lib/api.ts","../node_modules/simple-git/src/lib/errors/git-construct-error.ts","../node_modules/simple-git/src/lib/errors/git-plugin-error.ts","../node_modules/simple-git/src/lib/plugins/abort-plugin.ts","../node_modules/simple-git/src/lib/plugins/block-unsafe-operations-plugin.ts","../node_modules/simple-git/src/lib/plugins/command-config-prefixing-plugin.ts","../node_modules/simple-git/src/lib/plugins/completion-detection.plugin.ts","../node_modules/simple-git/src/lib/plugins/custom-binary.plugin.ts","../node_modules/simple-git/src/lib/plugins/error-detection.plugin.ts","../node_modules/simple-git/src/lib/plugins/plugin-store.ts","../node_modules/simple-git/src/lib/plugins/progress-monitor-plugin.ts","../node_modules/simple-git/src/lib/plugins/spawn-options-plugin.ts","../node_modules/simple-git/src/lib/plugins/timout-plugin.ts","../node_modules/simple-git/src/lib/plugins/suffix-paths.plugin.ts","../node_modules/simple-git/src/lib/git-factory.ts","../node_modules/simple-git/src/lib/runners/promise-wrapped.ts","../node_modules/simple-git/src/esm.mjs","../node_modules/@braintrust/core/dist/index.mjs","../node_modules/@asteasolutions/zod-to-openapi/dist/lib/zod-is-type.js","../node_modules/@asteasolutions/zod-to-openapi/dist/zod-extensions.js","../node_modules/@asteasolutions/zod-to-openapi/dist/lib/object-set.js","../node_modules/@asteasolutions/zod-to-openapi/dist/lib/lodash.js","../node_modules/@asteasolutions/zod-to-openapi/dist/openapi-metadata.js","../node_modules/@asteasolutions/zod-to-openapi/dist/openapi-registry.js","../node_modules/@asteasolutions/zod-to-openapi/dist/errors.js","../node_modules/@asteasolutions/zod-to-openapi/dist/lib/enum-info.js","../node_modules/@asteasolutions/zod-to-openapi/dist/openapi-generator.js","../node_modules/@asteasolutions/zod-to-openapi/dist/v3.0/specifics.js","../node_modules/@asteasolutions/zod-to-openapi/dist/v3.0/openapi-generator.js","../node_modules/@asteasolutions/zod-to-openapi/dist/v3.1/specifics.js","../node_modules/@asteasolutions/zod-to-openapi/dist/v3.1/openapi-generator.js","../node_modules/@asteasolutions/zod-to-openapi/dist/index.js","../node_modules/@braintrust/core/typespecs/dist/index.mjs","../node_modules/@vercel/functions/headers.js","../node_modules/@vercel/functions/get-env.js","../node_modules/@vercel/functions/get-context.js","../node_modules/@vercel/functions/wait-until.js","../node_modules/@vercel/functions/middleware.js","../node_modules/@vercel/functions/index.js","../node_modules/mustache/mustache.mjs","../node_modules/eventsource-parser/src/parse.ts","../node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/ansi-styles/index.js","../node_modules/chalk/source/util.js","../node_modules/chalk/source/templates.js","../node_modules/chalk/source/index.js","../node_modules/pluralize/pluralize.js","../node_modules/cli-progress/lib/eta.js","../node_modules/cli-progress/lib/terminal.js","../node_modules/ansi-regex/index.js","../node_modules/strip-ansi/index.js","../node_modules/is-fullwidth-code-point/index.js","../node_modules/emoji-regex/index.js","../node_modules/string-width/index.js","../node_modules/cli-progress/lib/format-value.js","../node_modules/cli-progress/lib/format-bar.js","../node_modules/cli-progress/lib/format-time.js","../node_modules/cli-progress/lib/formatter.js","../node_modules/cli-progress/lib/options.js","../node_modules/cli-progress/lib/generic-bar.js","../node_modules/cli-progress/lib/single-bar.js","../node_modules/cli-progress/lib/multi-bar.js","../node_modules/cli-progress/presets/legacy.js","../node_modules/cli-progress/presets/shades-classic.js","../node_modules/cli-progress/presets/shades-grey.js","../node_modules/cli-progress/presets/rect.js","../node_modules/cli-progress/presets/index.js","../node_modules/cli-progress/cli-progress.js","../node_modules/slugify/slugify.js","../node_modules/braintrust/dist/index.mjs","../src/index.ts","../src/tool.ts","../src/events.ts","../src/agent.ts","../src/decorators.ts","../src/thread.ts","../src/agent.tool.ts","../src/evaluator.ts","../src/solo.ts","../src/gig.ts","../src/piece.ts","../src/evaluators/three-keyed-lock.ts","../src/evaluators/agent-tool.evaluator.ts","../src/model.drivers/index.ts","../src/model.drivers/cohere.ts","../src/model.drivers/xai.ts","../src/model.drivers/bedrock.ts","../src/model.drivers/huggingface.ts","../src/model.drivers/groq.ts","../src/tracing/api.ts","../src/tracing/adapters/index.ts","../src/tracing/adapters/langsmith.ts","../src/tracing/adapters/braintrust.ts"],"sourcesContent":["import { EventEmitter2 } from \"eventemitter2\";\n\n/**\n * Abstract base class for all event-emitting classes\n * Provides event forwarding functionality and type-safe event emission\n */\nexport abstract class EventSource extends EventEmitter2 implements EventSourceInterface {\n  constructor() {\n    super({\n      wildcard: true,\n    });\n  }\n\n  /**\n   * Forward all events from a source EventEmitter2 instance\n   * Preserves the original event name and merges any additional context\n   */\n  protected forwardEvents(source: EventSourceInterface, context: Record<string, any> = {}): void {\n    const self = this;\n    source.on(\"**\", function (data) {\n      // @ts-ignore - event property is available in the wildcard listener context\n      const eventName = this.event as string;\n      // Forward the event with the same name and add context\n      self.emit(eventName, { ...data, ...context });\n    });\n  }\n\n  protected debug(message: string, data?: any) {\n    if (process.env.NODE_ENV === \"development\") {\n      console.log(message);\n      if (data) {\n        console.dir(data, { depth: null });\n      }\n    }\n  }\n\n  protected error(...args: any[]) {\n    if (process.env.NODE_ENV === \"development\") {\n      console.error(...args);\n    }\n  }\n}\n\nexport interface EventSourceInterface {\n  on(event: string, listener: (...args: any[]) => void): any;\n}\n","/**\n * Implement a class that represents a message in the thread.\n * - content - the content of the message\n * - json - the json content of the message (if any) - support a number of ways of finding it\n * - role - the role of the message (user, assistant, tool)\n * - toolCalls - the tool calls that were made in the message\n * - toolResults - the results of the tool calls\n * - attachments - array of attachments (documents, images, videos)\n * - cache: boolean - whether the message is cached\n */\nexport type MessageRole = \"system\" | \"user\" | \"assistant\" | \"tool\";\n\nexport type AttachmentType = \"document\" | \"image\" | \"video\";\n\nexport type DocumentFormat =\n  | \"pdf\"\n  | \"csv\"\n  | \"doc\"\n  | \"docx\"\n  | \"xls\"\n  | \"xlsx\"\n  | \"html\"\n  | \"txt\"\n  | \"md\";\nexport type ImageFormat = \"png\" | \"jpeg\" | \"gif\" | \"webp\";\nexport type VideoFormat =\n  | \"mkv\"\n  | \"mov\"\n  | \"mp4\"\n  | \"webm\"\n  | \"flv\"\n  | \"mpeg\"\n  | \"mpg\"\n  | \"wmv\"\n  | \"three_gp\";\n\nexport interface AttachmentSource {\n  bytes?: Uint8Array;\n  uri?: string;\n  bucketOwner?: string;\n}\n\nexport interface BaseAttachment {\n  type: AttachmentType;\n  source: AttachmentSource;\n}\n\nexport interface DocumentAttachment extends BaseAttachment {\n  type: \"document\";\n  format: DocumentFormat;\n  name: string;\n}\n\nexport interface ImageAttachment extends BaseAttachment {\n  type: \"image\";\n  format: ImageFormat;\n}\n\nexport interface VideoAttachment extends BaseAttachment {\n  type: \"video\";\n  format: VideoFormat;\n}\n\nexport type Attachment = DocumentAttachment | ImageAttachment | VideoAttachment;\n\nexport interface ToolCall {\n  name: string;\n  toolUseId: string;\n  arguments: Record<string, any>;\n}\n\nexport interface Reasoning {\n  text: string;\n  type: \"text\";\n  signature: string;\n}\n\nexport interface ToolResult {\n  name: string;\n  toolUseId: string;\n  result: any;\n  error?: string;\n}\n\nexport class Message {\n  private _content?: string;\n  private _role: MessageRole;\n  private _reasoning: Reasoning[];\n  private _toolCalls: ToolCall[];\n  private _toolResults: ToolResult[];\n  private _attachments: Attachment[];\n  private _cache: boolean;\n\n  constructor({\n    content,\n    role = \"user\",\n    toolCalls = [],\n    toolResults = [],\n    attachments = [],\n    reasoning = [],\n    cache = false,\n  }: {\n    content?: string | undefined;\n    role?: MessageRole;\n    reasoning?: Reasoning[];\n    toolCalls?: ToolCall[];\n    toolResults?: ToolResult[];\n    attachments?: Attachment[];\n    cache?: boolean;\n  }) {\n    this._content = content;\n    this._role = role;\n    this._toolCalls = toolCalls;\n    this._reasoning = reasoning;\n    this._toolResults = toolResults;\n    this._attachments = attachments;\n    this._cache = cache;\n  }\n\n  get content(): string | undefined {\n    return this._content;\n  }\n\n  get role(): MessageRole {\n    return this._role;\n  }\n\n  get toolCalls(): ToolCall[] {\n    return this._toolCalls;\n  }\n\n  get toolResults(): ToolResult[] {\n    return this._toolResults;\n  }\n\n  get attachments(): Attachment[] {\n    return this._attachments;\n  }\n\n  get cache(): boolean {\n    return this._cache;\n  }\n\n  get reasoning(): Reasoning[] {\n    return this._reasoning;\n  }\n\n  isToolResponse(): boolean {\n    return this._toolResults.length > 0;\n  }\n\n  isAssistantMessage(): boolean {\n    return this._role === \"assistant\";\n  }\n\n  isUserMessage(): boolean {\n    return this._role === \"user\";\n  }\n\n  isSystemMessage(): boolean {\n    return this._role === \"system\";\n  }\n\n  isToolCall(): boolean {\n    // Add debug logging\n    // console.debug(\n    //   `[DEBUG] isToolCall check: ${this._role} has ${this._toolCalls.length} tool calls`,\n    // );\n    // if (this._toolCalls.length > 0) {\n    //   console.debug(`[DEBUG] Tool calls found:`, JSON.stringify(this._toolCalls, null, 2));\n    // }\n    return this._toolCalls.length > 0;\n  }\n\n  /**\n   * Get attachments of a specific type\n   */\n  public getAttachmentsByType<T extends Attachment>(type: AttachmentType): T[] {\n    return this._attachments.filter((a) => a.type === type) as T[];\n  }\n\n  /**\n   * Add an attachment to the message\n   */\n  public addAttachment(attachment: Attachment): void {\n    this._attachments.push(attachment);\n  }\n\n  /**\n   * Remove an attachment from the message\n   */\n  public removeAttachment(index: number): void {\n    if (index >= 0 && index < this._attachments.length) {\n      this._attachments.splice(index, 1);\n    }\n  }\n\n  /**\n   * Attempts to parse and return JSON content from the message\n   * Supports multiple formats:\n   * 1. Direct JSON string\n   * 2. JSON within markdown code blocks\n   * 3. JSON within specific delimiters\n   */\n  get json(): any | null {\n    try {\n      // Try direct JSON parse\n      if (this._content) {\n        return JSON.parse(this._content);\n      }\n    } catch {\n      try {\n        // Try extracting from markdown code blocks\n        if (this._content) {\n          const codeBlockMatch = this._content.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/);\n          if (codeBlockMatch?.[1]) {\n            return JSON.parse(codeBlockMatch[1]);\n          }\n        }\n      } catch {\n        try {\n          // Try extracting from specific delimiters\n          if (this._content) {\n            const jsonMatch = this._content.match(/\\{[\\s\\S]*\\}/);\n            if (jsonMatch) {\n              return JSON.parse(jsonMatch[0]);\n            }\n          }\n        } catch {\n          // If all parsing attempts fail, return null\n          return null;\n        }\n      }\n    }\n    return null;\n  }\n}\n","/**\n * Interface for tracing function executions in Improv\n */\nexport interface Tracer {\n  /**\n   * Trace a function execution\n   * @param fn The function to trace\n   * @param metadata Metadata about the trace\n   * @returns The wrapped function that will be traced\n   */\n  traceable<T extends (...args: any[]) => any>(fn: T, metadata: TraceMetadata): T;\n}\n\n/**\n * Metadata for a trace\n */\nexport interface TraceMetadata {\n  /** The name of the trace */\n  name: string;\n  /** The type of run (e.g., \"tool\", \"llm\", \"agent\") */\n  run_type?: string;\n  /** Any additional metadata */\n  [key: string]: unknown;\n}\n\n/**\n * A tracer that does nothing\n */\nexport class NullTracer implements Tracer {\n  traceable<T extends (...args: any[]) => any>(fn: T, _metadata: TraceMetadata): T {\n    // Simply returns the original function without any tracing\n    return fn;\n  }\n}\n\n// The default tracer does nothing\nexport const defaultTracer = new NullTracer();\n","import { type Tracer, defaultTracer } from \"./tracer\";\n\n/**\n * Registry for managing tracers in the system\n */\nexport class TracerRegistry {\n  private static instance: TracerRegistry;\n  private tracers: Map<string, Tracer> = new Map();\n  private activeTracer = \"null\";\n\n  private constructor() {\n    // Register the default null tracer\n    this.register(\"null\", defaultTracer);\n  }\n\n  /**\n   * Get the singleton instance of the registry\n   */\n  public static getInstance(): TracerRegistry {\n    if (!TracerRegistry.instance) {\n      TracerRegistry.instance = new TracerRegistry();\n    }\n    return TracerRegistry.instance;\n  }\n\n  /**\n   * Register a tracer with the registry\n   * @param name Name of the tracer\n   * @param tracer The tracer implementation\n   */\n  public register(name: string, tracer: Tracer): void {\n    this.tracers.set(name, tracer);\n  }\n\n  /**\n   * Set the active tracer by name\n   * @param name Name of the tracer to activate\n   * @throws Error if the tracer doesn't exist\n   */\n  public setActiveTracer(name: string): void {\n    if (!this.tracers.has(name)) {\n      throw new Error(`Tracer '${name}' is not registered`);\n    }\n    this.activeTracer = name;\n  }\n\n  /**\n   * Get the currently active tracer\n   */\n  public getActiveTracer(): Tracer {\n    return this.tracers.get(this.activeTracer) || defaultTracer;\n  }\n\n  /**\n   * Check if tracing is enabled (i.e., active tracer is not the null tracer)\n   */\n  public isTracingEnabled(): boolean {\n    return this.activeTracer !== \"null\";\n  }\n}\n\n// Export a convenience function to get the active tracer\nexport function getTracer(): Tracer {\n  return TracerRegistry.getInstance().getActiveTracer();\n}\n\n// Export a convenience function to check if tracing is enabled\nexport function isTracingEnabled(): boolean {\n  return TracerRegistry.getInstance().isTracingEnabled();\n}\n","import { TracerRegistry, getTracer, isTracingEnabled } from \"./registry\";\nimport { NullTracer, type TraceMetadata, type Tracer, defaultTracer } from \"./tracer\";\n\n/**\n * Make a function traceable using the currently active tracer\n *\n * @param fn The function to trace\n * @param metadata Metadata about the trace\n * @returns The traced function\n */\nexport function traceable<T extends (...args: any[]) => any>(fn: T, metadata: TraceMetadata): T {\n  // Only trace if tracing is enabled\n  if (!isTracingEnabled()) {\n    return fn;\n  }\n\n  // Get the active tracer and trace the function\n  return getTracer().traceable(fn, metadata);\n}\n\n// Export everything from the tracer module\nexport { NullTracer, defaultTracer, TracerRegistry, getTracer, isTracingEnabled };\nexport type { Tracer, TraceMetadata };\n","/**\n * Core types and interfaces for the universal message processing pipeline\n * This provides a generic, provider-agnostic way to process conversations\n * for any AI provider while handling validation, auto-repair, and formatting.\n */\n\nimport type { Message } from \"./message\";\n\n/**\n * Context for message processing operations\n * Generic enough for any application's needs\n */\nexport interface MessageProcessingContext {\n  /** Maximum number of messages to include (triggers truncation) */\n  maxMessages?: number;\n\n  /** Strategy for truncating messages when maxMessages is exceeded */\n  truncationStrategy?: \"oldest\" | \"newest\" | \"smart\";\n\n  /** Whether to preserve system messages during processing */\n  preserveSystemMessages?: boolean;\n\n  /** Allow conversations with incomplete tool call/result pairs */\n  allowPartialConversations?: boolean;\n\n  /** Enable automatic repair of common conversation issues */\n  enableAutoRepair?: boolean;\n\n  /** Validation level - affects error tolerance */\n  validationLevel?: \"strict\" | \"moderate\" | \"lenient\";\n\n  /** Only validate without applying repairs or formatting */\n  validateOnly?: boolean;\n\n  /** Abort signal for canceling processing */\n  abortSignal?: AbortSignal;\n\n  /** Extensible metadata for application-specific context */\n  metadata?: Record<string, unknown>;\n}\n\n/**\n * Validation error with structured information\n */\nexport interface ValidationError {\n  /** Error type for categorization */\n  type: string;\n\n  /** Human-readable error message */\n  message: string;\n\n  /** Message index where error occurred (if applicable) */\n  index?: number;\n\n  /** Severity level */\n  severity: \"error\" | \"warning\";\n\n  /** Suggested repair action (if available) */\n  suggestedFix?: string;\n\n  /** Additional context */\n  context?: Record<string, unknown>;\n}\n\n/**\n * Validation warning (non-blocking issues)\n */\nexport interface ValidationWarning extends Omit<ValidationError, \"severity\"> {\n  severity: \"warning\";\n}\n\n/**\n * Result of conversation validation and repair\n */\nexport interface ConversationValidationResult {\n  /** Whether the conversation is valid */\n  isValid: boolean;\n\n  /** Processed/repaired messages */\n  messages: any[];\n\n  /** Validation errors found */\n  errors: ValidationError[];\n\n  /** Non-blocking warnings */\n  warnings: ValidationWarning[];\n\n  /** List of repairs that were applied */\n  repairsApplied: string[];\n}\n\n/**\n * Comprehensive result of message processing\n */\nexport interface ProcessedMessageResult {\n  /** Provider-ready formatted messages */\n  messages: any[];\n\n  /** Processing metadata */\n  processing: {\n    /** Original message count */\n    originalCount: number;\n\n    /** Final processed message count */\n    processedCount: number;\n\n    /** Whether messages were truncated */\n    truncated: boolean;\n\n    /** List of repairs that were applied */\n    repairsApplied: string[];\n\n    /** Processing time in milliseconds */\n    processingTimeMs: number;\n\n    /** Provider that processed the messages */\n    provider: string;\n  };\n\n  /** Validation results */\n  validation: {\n    /** Whether all validation passed */\n    isValid: boolean;\n\n    /** Validation errors (blocking issues) */\n    errors: ValidationError[];\n\n    /** Validation warnings (non-blocking issues) */\n    warnings: ValidationWarning[];\n  };\n}\n\n/**\n * Core interface for message processing\n * Any driver that can process messages should implement this\n */\nexport interface MessageProcessor {\n  /**\n   * Process raw messages into provider-ready format\n   * This is the main entry point for message processing\n   *\n   * @param messages - Raw Improv messages to process\n   * @param context - Processing context and options\n   * @returns Promise resolving to processed message result\n   */\n  processMessages(\n    messages: Message[],\n    context?: MessageProcessingContext,\n  ): Promise<ProcessedMessageResult>;\n}\n\n/**\n * Custom error class for message validation failures\n */\nexport class MessageValidationError extends Error {\n  constructor(\n    message: string,\n    public validationErrors: ValidationError[],\n    public processingContext?: MessageProcessingContext,\n  ) {\n    super(message);\n    this.name = \"MessageValidationError\";\n  }\n}\n\n/**\n * Custom error class for message processing failures\n */\nexport class MessageProcessingError extends Error {\n  constructor(\n    message: string,\n    public originalError?: Error,\n    public processingContext?: MessageProcessingContext,\n  ) {\n    super(message);\n    this.name = \"MessageProcessingError\";\n  }\n}\n\n/**\n * Create a validation error with consistent structure\n */\nexport function createValidationError(\n  type: string,\n  message: string,\n  options: {\n    index?: number;\n    severity?: \"error\" | \"warning\";\n    suggestedFix?: string;\n    context?: Record<string, unknown>;\n  } = {},\n): ValidationError {\n  return {\n    type,\n    message,\n    severity: options.severity || \"error\",\n    index: options.index,\n    suggestedFix: options.suggestedFix,\n    context: options.context,\n  };\n}\n\n/**\n * Create a validation warning with consistent structure\n */\nexport function createValidationWarning(\n  type: string,\n  message: string,\n  options: {\n    index?: number;\n    suggestedFix?: string;\n    context?: Record<string, unknown>;\n  } = {},\n): ValidationWarning {\n  return {\n    type,\n    message,\n    severity: \"warning\",\n    index: options.index,\n    suggestedFix: options.suggestedFix,\n    context: options.context,\n  };\n}\n\n/**\n * Check if content is empty or whitespace-only\n */\nexport function isEmptyContent(content: any): boolean {\n  if (content === null || content === undefined) return true;\n  if (typeof content === \"string\") return content.trim() === \"\";\n  if (Array.isArray(content)) return content.length === 0;\n  return false;\n}\n\n/**\n * Get a safe string representation of content for logging\n */\nexport function safeStringify(obj: any, maxLength = 200): string {\n  try {\n    const str = JSON.stringify(obj);\n    return str.length > maxLength ? `${str.substring(0, maxLength)}...` : str;\n  } catch {\n    return \"[Unable to stringify]\";\n  }\n}\n\n/**\n * Default processing context with sensible defaults\n */\nexport const DEFAULT_PROCESSING_CONTEXT: Required<\n  Omit<MessageProcessingContext, \"abortSignal\" | \"metadata\">\n> = {\n  maxMessages: 100,\n  truncationStrategy: \"smart\",\n  preserveSystemMessages: true,\n  allowPartialConversations: false,\n  enableAutoRepair: true,\n  validationLevel: \"moderate\",\n  validateOnly: false,\n};\n","import { EventSource } from \"../event-source\";\nimport type { Message } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  MessageProcessor,\n  ProcessedMessageResult,\n} from \"../message-processing\";\nimport {\n  DEFAULT_PROCESSING_CONTEXT,\n  MessageProcessingError,\n  MessageValidationError,\n} from \"../message-processing\";\nimport type { Thread, ThreadDriver } from \"../thread\";\n\n/**\n * Abstract base class for model drivers.\n * Implements common functionality and defines the interface for model-specific implementations.\n * Now includes universal message processing capabilities.\n */\nexport abstract class BaseModelDriver\n  extends EventSource\n  implements ThreadDriver, MessageProcessor\n{\n  /**\n   * Check if the abort signal has been triggered and throw an error if so\n   */\n  protected checkAbortSignal(abortSignal?: AbortSignal): void {\n    if (abortSignal?.aborted) {\n      throw new Error(\"Thread execution aborted\");\n    }\n  }\n\n  /**\n   * Execute an async operation with abort signal checking before and after\n   */\n  protected async withAbortCheck<T>(\n    abortSignal: AbortSignal | undefined,\n    operation: () => Promise<T>,\n  ): Promise<T> {\n    this.checkAbortSignal(abortSignal);\n    const result = await operation();\n    this.checkAbortSignal(abortSignal);\n    return result;\n  }\n\n  /**\n   * Wrap an async generator with abort signal checking on each iteration\n   */\n  protected async *wrapStreamWithAbort<T>(\n    abortSignal: AbortSignal | undefined,\n    stream: AsyncGenerator<T>,\n  ): AsyncGenerator<T> {\n    try {\n      for await (const chunk of stream) {\n        this.checkAbortSignal(abortSignal);\n        yield chunk;\n      }\n    } finally {\n      this.checkAbortSignal(abortSignal);\n    }\n  }\n\n  // ==================== MESSAGE PROCESSING INTERFACE ====================\n\n  /**\n   * Process raw messages into provider-ready format with validation and auto-repair\n   * This is the main entry point for the universal message processing pipeline\n   */\n  async processMessages(\n    messages: Message[],\n    context: MessageProcessingContext = {},\n  ): Promise<ProcessedMessageResult> {\n    const startTime = Date.now();\n    const finalContext = { ...DEFAULT_PROCESSING_CONTEXT, ...context };\n\n    try {\n      // Check for abort signal\n      this.checkAbortSignal(finalContext.abortSignal);\n\n      // 1. Generic input validation\n      this.validateInputMessages(messages);\n\n      // 2. Generic preprocessing (truncation, filtering, etc.)\n      const preprocessResult = await this.preprocessMessages(messages, finalContext);\n\n      // Check for abort signal after preprocessing\n      this.checkAbortSignal(finalContext.abortSignal);\n\n      // 3. Provider-specific formatting\n      if (finalContext.validateOnly) {\n        // Skip formatting if we're only validating\n        return this.createProcessingResult(\n          messages,\n          preprocessResult,\n          { isValid: true, messages, errors: [], warnings: [], repairsApplied: [] },\n          startTime,\n          finalContext,\n        );\n      }\n\n      const formattedMessages = await this.formatMessagesForProvider(preprocessResult.messages);\n\n      // Check for abort signal after formatting\n      this.checkAbortSignal(finalContext.abortSignal);\n\n      // 4. Provider-specific validation & auto-repair\n      const validationResult = await this.validateConversation(formattedMessages, finalContext);\n\n      // 5. Final validation check\n      if (!validationResult.isValid && finalContext.validationLevel === \"strict\") {\n        throw new MessageValidationError(\n          `Message validation failed with ${validationResult.errors.length} errors`,\n          validationResult.errors,\n          finalContext,\n        );\n      }\n\n      return this.createProcessingResult(\n        formattedMessages,\n        preprocessResult,\n        validationResult,\n        startTime,\n        finalContext,\n      );\n    } catch (error) {\n      this.error(\"Message processing failed\", {\n        error,\n        messageCount: messages.length,\n        provider: this.constructor.name,\n      });\n\n      if (error instanceof MessageValidationError) {\n        throw error;\n      }\n\n      throw new MessageProcessingError(\n        `Message processing failed: ${(error as Error).message}`,\n        error as Error,\n        finalContext,\n      );\n    }\n  }\n\n  /**\n   * Generic input validation - common checks across all providers\n   */\n  protected validateInputMessages(messages: Message[]): void {\n    if (!messages || messages.length === 0) {\n      throw new Error(\"Cannot process empty message array\");\n    }\n\n    // Check for basic message integrity\n    for (const [index, message] of messages.entries()) {\n      if (!message.role) {\n        throw new Error(`Message at index ${index} missing role`);\n      }\n      if (![\"system\", \"user\", \"assistant\", \"tool\"].includes(message.role)) {\n        throw new Error(`Message at index ${index} has invalid role: ${message.role}`);\n      }\n    }\n  }\n\n  /**\n   * Generic preprocessing - useful for ANY application\n   */\n  protected async preprocessMessages(\n    messages: Message[],\n    context: MessageProcessingContext,\n  ): Promise<{ messages: Message[]; truncated: boolean }> {\n    let processedMessages = [...messages];\n    let truncated = false;\n\n    // Generic truncation logic\n    if (context.maxMessages && processedMessages.length > context.maxMessages) {\n      const originalLength = processedMessages.length;\n\n      switch (context.truncationStrategy) {\n        case \"oldest\":\n          processedMessages = processedMessages.slice(-context.maxMessages);\n          break;\n        case \"newest\":\n          processedMessages = processedMessages.slice(0, context.maxMessages);\n          break;\n        case \"smart\":\n        default:\n          processedMessages = this.smartTruncate(processedMessages, context.maxMessages, context);\n          break;\n      }\n\n      truncated = processedMessages.length < originalLength;\n\n      if (truncated) {\n        this.emit(\"warn\", \"Messages truncated\", {\n          original: originalLength,\n          final: processedMessages.length,\n          strategy: context.truncationStrategy,\n        });\n      }\n    }\n\n    return { messages: processedMessages, truncated };\n  }\n\n  /**\n   * Smart truncation - preserves conversation integrity\n   */\n  protected smartTruncate(\n    messages: Message[],\n    maxMessages: number,\n    context: MessageProcessingContext,\n  ): Message[] {\n    if (messages.length <= maxMessages) return messages;\n\n    // Always preserve system messages if requested\n    let systemMessages: Message[] = [];\n    let conversationMessages = messages;\n\n    if (context.preserveSystemMessages) {\n      systemMessages = messages.filter((m) => m.role === \"system\");\n      conversationMessages = messages.filter((m) => m.role !== \"system\");\n    }\n\n    // Calculate available slots for conversation\n    const availableSlots = maxMessages - systemMessages.length;\n    if (availableSlots <= 0) {\n      // If system messages exceed limit, just take the most recent ones\n      return systemMessages.slice(-maxMessages);\n    }\n\n    // Take most recent conversation messages\n    const recentConversation = conversationMessages.slice(-availableSlots);\n\n    return [...systemMessages, ...recentConversation];\n  }\n\n  /**\n   * Create processing result with consistent structure\n   */\n  protected createProcessingResult(\n    _finalMessages: any[],\n    preprocessResult: { messages: Message[]; truncated: boolean },\n    validationResult: ConversationValidationResult,\n    startTime: number,\n    _context: MessageProcessingContext,\n  ): ProcessedMessageResult {\n    return {\n      messages: validationResult.messages,\n      processing: {\n        originalCount: preprocessResult.messages.length,\n        processedCount: validationResult.messages.length,\n        truncated: preprocessResult.truncated,\n        repairsApplied: validationResult.repairsApplied,\n        processingTimeMs: Date.now() - startTime,\n        provider: this.constructor.name,\n      },\n      validation: {\n        isValid: validationResult.isValid,\n        errors: validationResult.errors,\n        warnings: validationResult.warnings,\n      },\n    };\n  }\n\n  // ==================== ABSTRACT METHODS FOR PROVIDERS ====================\n\n  /**\n   * Abstract method for provider-specific message formatting\n   * Each driver implements this with their API format\n   */\n  protected abstract formatMessagesForProvider(messages: Message[]): any[] | Promise<any[]>;\n\n  /**\n   * Abstract method for provider-specific validation and auto-repair\n   * Each driver implements conversation validation logic\n   */\n  protected abstract validateConversation(\n    formattedMessages: any[],\n    context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult>;\n\n  // ==================== ENHANCED THREAD METHODS ====================\n\n  /**\n   * Enhanced sendThread that uses message processing\n   */\n  async sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    // Use message processing for validation and formatting\n    const processingResult = await this.processMessages(thread.all(), {\n      enableAutoRepair: true,\n      abortSignal,\n    });\n\n    // Log any warnings from auto-repair\n    if (processingResult.validation.warnings.length > 0) {\n      this.emit(\"warn\", \"Message processing applied repairs\", {\n        warnings: processingResult.validation.warnings.map((w) => w.message),\n        provider: processingResult.processing.provider,\n        repairsCount: processingResult.processing.repairsApplied.length,\n      });\n    }\n\n    // Continue with sending the processed messages\n    return this.sendProcessedMessages(thread, processingResult, abortSignal);\n  }\n\n  /**\n   * Enhanced streamThread that uses message processing\n   */\n  async *streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Use message processing for validation and formatting\n    const processingResult = await this.processMessages(thread.all(), {\n      enableAutoRepair: true,\n      abortSignal,\n    });\n\n    // Log any warnings from auto-repair\n    if (processingResult.validation.warnings.length > 0) {\n      this.emit(\"warn\", \"Message processing applied repairs during streaming\", {\n        warnings: processingResult.validation.warnings.map((w) => w.message),\n        provider: processingResult.processing.provider,\n        repairsCount: processingResult.processing.repairsApplied.length,\n      });\n    }\n\n    // Continue with streaming the processed messages\n    return yield* this.streamProcessedMessages(thread, processingResult, abortSignal);\n  }\n\n  /**\n   * Abstract method for sending processed messages\n   * Replaces the original sendThread implementation\n   */\n  protected abstract sendProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread>;\n\n  /**\n   * Abstract method for streaming processed messages\n   * Replaces the original streamThread implementation\n   */\n  protected abstract streamProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread>;\n}\n","/**\n * Base class for OpenAI-compatible API providers\n * Provides shared functionality for providers that use OpenAI's API format\n */\n\nimport { nanoid } from \"nanoid\";\nimport OpenAI from \"openai\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport { createValidationError, createValidationWarning } from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport type { Tool } from \"../tool\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\nconst JSON_SCHEMA_URL = \"http://json-schema.org/draft-07/schema#\";\n\n/**\n * Schema for structured output (OpenAI format)\n */\nexport interface OpenAICompatibleResponseSchema {\n  type: \"string\" | \"integer\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n  format?: string;\n  description?: string;\n  nullable?: boolean;\n  enum?: string[];\n  maxItems?: string;\n  minItems?: string;\n  properties?: Record<string, OpenAICompatibleResponseSchema>;\n  required?: string[];\n  propertyOrdering?: string[];\n  items?: OpenAICompatibleResponseSchema;\n}\n\n/**\n * Base configuration for OpenAI-compatible providers\n */\nexport interface OpenAICompatibleConfig {\n  /**\n   * API Key for the provider\n   */\n  apiKey?: string;\n\n  /**\n   * Base URL for the provider's API\n   */\n  baseUrl: string;\n\n  /**\n   * Model to use\n   */\n  model?: string;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Whether to enable tracing\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Schema for structured output\n   */\n  responseSchema?: OpenAICompatibleResponseSchema;\n\n  /**\n   * Provider name for tracing and logging\n   */\n  providerName?: string;\n}\n\n/**\n * Abstract base class for OpenAI-compatible API providers\n */\nexport abstract class OpenAICompatibleDriver extends BaseModelDriver {\n  /**\n   * OpenAI-compatible API Client\n   */\n  protected client: OpenAI;\n\n  /**\n   * Model to use\n   */\n  protected model: string;\n\n  /**\n   * Temperature for response generation\n   */\n  protected temperature: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  protected maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   */\n  protected cache: boolean;\n\n  /**\n   * Schema for structured output\n   */\n  protected responseSchema?: OpenAICompatibleResponseSchema;\n\n  /**\n   * Provider name for tracing and logging\n   */\n  protected providerName: string;\n\n  /**\n   * Create a new OpenAI-compatible driver\n   * @param config Configuration options\n   */\n  constructor(config: OpenAICompatibleConfig) {\n    super();\n\n    // Validate required configuration\n    if (!config.baseUrl) {\n      throw new Error(\"Base URL is required for OpenAI-compatible providers\");\n    }\n\n    // Get API key from config or environment\n    const apiKey = config.apiKey || this.getDefaultApiKey();\n    if (!apiKey) {\n      throw new Error(`API key is required. Set it in config or environment variable.`);\n    }\n\n    // Create the OpenAI client with custom base URL\n    const baseClient = new OpenAI({\n      apiKey,\n      baseURL: config.baseUrl,\n    });\n\n    // Set up tracing if enabled\n    if (config.trace) {\n      this.client = new Proxy(baseClient, {\n        get: (target, prop, receiver) => {\n          const value = Reflect.get(target, prop, receiver);\n\n          if (prop === \"chat\") {\n            return new Proxy(value, {\n              get: (chatTarget, chatProp, chatReceiver) => {\n                const chatValue = Reflect.get(chatTarget, chatProp, chatReceiver);\n\n                if (chatProp === \"completions\") {\n                  return new Proxy(chatValue, {\n                    get: (completionsTarget, completionsProp, completionsReceiver) => {\n                      const completionsValue = Reflect.get(\n                        completionsTarget,\n                        completionsProp,\n                        completionsReceiver,\n                      );\n\n                      if (completionsProp === \"create\" && typeof completionsValue === \"function\") {\n                        return traceable(completionsValue.bind(completionsTarget), {\n                          run_type: \"llm\",\n                          name: this.providerName,\n                          extractor: (params: any, result: any) => {\n                            // For streaming responses, we can't easily get metrics, so just return the input\n                            if (params.stream) {\n                              return {\n                                model: params.model,\n                                input: {\n                                  messages: params.messages,\n                                  temperature: params.temperature,\n                                  max_tokens: params.max_tokens,\n                                  tools: params.tools ? params.tools.length : 0,\n                                },\n                                streaming: true,\n                              };\n                            }\n\n                            // For non-streaming, include response data\n                            return {\n                              model: params.model,\n                              input: {\n                                messages: params.messages,\n                                temperature: params.temperature,\n                                max_tokens: params.max_tokens,\n                                tools: params.tools ? params.tools.length : 0,\n                              },\n                              output: result.choices?.[0]?.message,\n                              metrics: result.usage\n                                ? {\n                                    prompt_tokens: result.usage.prompt_tokens,\n                                    completion_tokens: result.usage.completion_tokens,\n                                    total_tokens: result.usage.total_tokens,\n                                  }\n                                : undefined,\n                              finish_reason: result.choices?.[0]?.finish_reason,\n                            };\n                          },\n                          metadata: config.traceMetadata || {},\n                        });\n                      }\n\n                      return completionsValue;\n                    },\n                  });\n                }\n\n                return chatValue;\n              },\n            });\n          }\n\n          return value;\n        },\n      });\n    } else {\n      this.client = baseClient;\n    }\n\n    // Set configuration options\n    this.model = config.model || this.getDefaultModel();\n    this.temperature = config.temperature ?? 0.7;\n    this.maxTokens = config.maxTokens;\n    this.cache = config.cache ?? false;\n    this.responseSchema = config.responseSchema;\n    this.providerName = config.providerName || \"openai-compatible\";\n  }\n\n  /**\n   * Get the default API key from environment variables\n   * Subclasses should override this to specify their env var\n   */\n  protected abstract getDefaultApiKey(): string | undefined;\n\n  /**\n   * Get the default model for this provider\n   * Subclasses should override this to specify their default model\n   */\n  protected abstract getDefaultModel(): string;\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for the specific provider\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(\n    messages: Message[],\n  ): OpenAI.Chat.ChatCompletionMessageParam[] {\n    const formattedMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [];\n\n    for (const message of messages) {\n      if (message.role === \"user\") {\n        const content: OpenAI.Chat.ChatCompletionContentPart[] = [];\n\n        // Add text content\n        if (message.content) {\n          content.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add image attachments\n        if (message.attachments) {\n          for (const attachment of message.attachments) {\n            if (attachment.type === \"image\" && attachment.source.uri) {\n              content.push({\n                type: \"image_url\",\n                image_url: {\n                  url: attachment.source.uri,\n                  detail: \"auto\",\n                },\n              });\n            }\n          }\n        }\n\n        formattedMessages.push({\n          role: \"user\",\n          content:\n            content.length === 1 && content[0]?.type === \"text\"\n              ? (content[0] as OpenAI.Chat.ChatCompletionContentPartText).text\n              : content,\n        });\n      } else if (message.role === \"assistant\") {\n        const assistantMessage: OpenAI.Chat.ChatCompletionAssistantMessageParam = {\n          role: \"assistant\",\n          content: message.content || \"\",\n        };\n\n        if (message.toolCalls && message.toolCalls.length > 0) {\n          assistantMessage.tool_calls = message.toolCalls.map((toolCall) => ({\n            id: toolCall.toolUseId || nanoid(),\n            type: \"function\",\n            function: {\n              name: toolCall.name,\n              arguments: JSON.stringify(toolCall.arguments),\n            },\n          }));\n        }\n\n        formattedMessages.push(assistantMessage);\n      } else if (message.toolResults && message.toolResults.length > 0) {\n        // Handle tool results (these are created from user messages with toolResults)\n        // First add the user message if it has content\n        if (message.content) {\n          formattedMessages.push({\n            role: \"user\",\n            content: message.content,\n          });\n        }\n\n        // Then add each tool result as a separate message\n        for (const toolResult of message.toolResults) {\n          formattedMessages.push({\n            role: \"tool\",\n            tool_call_id: toolResult.toolUseId,\n            content: JSON.stringify(toolResult.result),\n          });\n        }\n      } else if (message.role === \"system\") {\n        formattedMessages.push({\n          role: \"system\",\n          content: message.content || \"\",\n        });\n      }\n    }\n\n    return formattedMessages;\n  }\n\n  /**\n   * Validate conversation and apply auto-repairs for OpenAI-compatible APIs\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: OpenAI.Chat.ChatCompletionMessageParam[],\n    context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n    let processedMessages = [...formattedMessages];\n\n    // 1. Validate message structure and content\n    for (let i = 0; i < processedMessages.length; i++) {\n      const message = processedMessages[i];\n      if (!message) continue;\n\n      // Check for empty content in user/assistant messages\n      if (message.role === \"user\" || message.role === \"assistant\") {\n        const hasContent =\n          message.role === \"user\"\n            ? message.content &&\n              (typeof message.content === \"string\"\n                ? message.content.trim()\n                : message.content.length > 0)\n            : message.content;\n\n        if (!hasContent && !(message as any).tool_calls) {\n          if (context.enableAutoRepair) {\n            // Auto-repair: Add minimal content\n            if (typeof message.content === \"string\") {\n              message.content =\n                message.content?.trim() || (message.role === \"user\" ? \"Continue\" : \"\");\n            }\n            repairsApplied.push(\n              `Added minimal content to empty ${message.role} message at index ${i}`,\n            );\n            warnings.push(\n              createValidationWarning(\n                \"empty_content_repaired\",\n                `Empty ${message.role} message was given minimal content`,\n                { index: i, suggestedFix: \"Provide meaningful content for messages\" },\n              ),\n            );\n          } else {\n            errors.push(\n              createValidationError(\"empty_content\", `${message.role} message has empty content`, {\n                index: i,\n                severity: \"error\",\n              }),\n            );\n          }\n        }\n      }\n\n      // Check for orphaned tool results\n      if (message && message.role === \"tool\") {\n        const toolMessage = message as OpenAI.Chat.ChatCompletionToolMessageParam;\n        if (!toolMessage.tool_call_id) {\n          errors.push(\n            createValidationError(\"missing_tool_call_id\", \"Tool message missing tool_call_id\", {\n              index: i,\n              severity: \"error\",\n            }),\n          );\n        }\n      }\n    }\n\n    // 2. Validate conversation flow (tool call/result pairs)\n    if (!context.allowPartialConversations) {\n      const toolCallStack: Array<{ id: string; index: number; name: string }> = [];\n\n      for (let i = 0; i < processedMessages.length; i++) {\n        const message = processedMessages[i];\n        if (!message) continue;\n\n        // Track tool calls\n        if (message.role === \"assistant\" && (message as any).tool_calls) {\n          const assistantMessage = message as OpenAI.Chat.ChatCompletionAssistantMessageParam;\n          for (const toolCall of assistantMessage.tool_calls || []) {\n            toolCallStack.push({\n              id: toolCall.id,\n              index: i,\n              name: toolCall.function.name,\n            });\n          }\n        }\n\n        // Match tool results with calls\n        if (message && message.role === \"tool\") {\n          const toolMessage = message as OpenAI.Chat.ChatCompletionToolMessageParam;\n          const callIndex = toolCallStack.findIndex((call) => call.id === toolMessage.tool_call_id);\n\n          if (callIndex >= 0) {\n            toolCallStack.splice(callIndex, 1); // Remove matched call\n          } else {\n            warnings.push(\n              createValidationWarning(\n                \"orphaned_tool_result\",\n                `Tool result without matching call: ${toolMessage.tool_call_id}`,\n                { index: i },\n              ),\n            );\n          }\n        }\n      }\n\n      // Check for unmatched tool calls\n      for (const unmatchedCall of toolCallStack) {\n        if (context.enableAutoRepair) {\n          // Auto-repair: Add placeholder tool results\n          processedMessages.push({\n            role: \"tool\",\n            tool_call_id: unmatchedCall.id,\n            content: JSON.stringify({\n              error: \"Tool result not provided\",\n              tool_name: unmatchedCall.name,\n            }),\n          });\n          repairsApplied.push(\n            `Added placeholder result for unmatched tool call ${unmatchedCall.name}`,\n          );\n          warnings.push(\n            createValidationWarning(\n              \"unmatched_tool_call_repaired\",\n              `Added placeholder result for tool call: ${unmatchedCall.name}`,\n              { index: unmatchedCall.index },\n            ),\n          );\n        } else {\n          errors.push(\n            createValidationError(\n              \"unmatched_tool_call\",\n              `Tool call without result: ${unmatchedCall.name}`,\n              { index: unmatchedCall.index, severity: \"error\" },\n            ),\n          );\n        }\n      }\n    }\n\n    // 3. Provider-specific validations can be added by subclasses\n    const additionalValidation = await this.performAdditionalValidation(processedMessages, context);\n    errors.push(...additionalValidation.errors);\n    warnings.push(...additionalValidation.warnings);\n    repairsApplied.push(...additionalValidation.repairsApplied);\n    if (additionalValidation.messages) {\n      processedMessages = additionalValidation.messages;\n    }\n\n    return {\n      isValid: errors.length === 0,\n      messages: processedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Hook for subclasses to add provider-specific validation\n   * Override this method to add custom validation logic\n   */\n  protected async performAdditionalValidation(\n    _messages: any[],\n    _context: MessageProcessingContext,\n  ): Promise<{\n    messages?: any[];\n    errors: ValidationError[];\n    warnings: ValidationWarning[];\n    repairsApplied: string[];\n  }> {\n    return {\n      errors: [],\n      warnings: [],\n      repairsApplied: [],\n    };\n  }\n\n  // ==================== UPDATED THREAD METHODS ====================\n\n  /**\n   * Send processed messages to the provider API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    // Use the processed messages from the processing pipeline\n    const messages = processingResult.messages as OpenAI.Chat.ChatCompletionMessageParam[];\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (typeof msg.content === \"string\" ? msg.content.length : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    try {\n      // Create parameters for the API call\n      const params: OpenAI.Chat.ChatCompletionCreateParams = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n      };\n\n      // Add max tokens if specified\n      if (this.maxTokens) {\n        params.max_tokens = this.maxTokens;\n      }\n\n      // Add structured output if specified\n      if (this.responseSchema) {\n        params.response_format = {\n          type: \"json_schema\",\n          json_schema: {\n            name: \"response\",\n            schema: this.responseSchema as unknown as Record<string, unknown>,\n            strict: true,\n          },\n        } as any;\n      }\n\n      // Add tools if the thread has any\n      const tools = thread.getTools();\n      if (tools && tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n        params.tool_choice = \"auto\";\n      }\n\n      // Make the API call\n      const response = await this.client.chat.completions.create(params);\n\n      // Get the last choice from the response\n      const lastChoice = response.choices[0];\n      if (!lastChoice) {\n        throw new Error(`No response from ${this.providerName} API`);\n      }\n\n      const choice = lastChoice.message;\n      if (!choice) {\n        throw new Error(`Empty response from ${this.providerName} API`);\n      }\n\n      // Create a new message from the response\n      const message = new Message({\n        role: \"assistant\",\n        content: choice.content || \"\",\n        toolCalls: this.parseToolCalls(choice.tool_calls),\n        cache: this.cache,\n      });\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Log usage metrics if available\n      if (response.usage) {\n        // Debug usage metrics\n      }\n\n      return thread;\n    } catch (error) {\n      this.error(`Error calling ${this.providerName} API`, { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Stream processed messages to the provider API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    // Use the processed messages from the processing pipeline\n    const messages = processingResult.messages as OpenAI.Chat.ChatCompletionMessageParam[];\n\n    try {\n      // Create parameters for the API call\n      const params: OpenAI.Chat.ChatCompletionCreateParams = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n        stream: true,\n      };\n\n      // Add max tokens if specified\n      if (this.maxTokens) {\n        params.max_tokens = this.maxTokens;\n      }\n\n      // Add structured output if specified\n      if (this.responseSchema) {\n        params.response_format = {\n          type: \"json_schema\",\n          json_schema: {\n            name: \"response\",\n            schema: this.responseSchema as unknown as Record<string, unknown>,\n            strict: true,\n          },\n        } as any;\n      }\n\n      // Add tools if the thread has any\n      const tools = thread.getTools();\n      if (tools && tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n        params.tool_choice = \"auto\";\n      }\n\n      // Create a new message to add to the thread\n      const message = new Message({\n        role: \"assistant\",\n        content: \"\",\n        cache: this.cache,\n      });\n\n      // Make the streaming API call\n      const stream = await this.client.chat.completions.create(params);\n\n      // Create a streaming content generator\n      const streamContent = this.createStreamGenerator(stream, message, abortSignal);\n\n      // Yield the stream\n      yield { stream: streamContent, message };\n\n      // Add the message to the thread\n      thread.push(message);\n\n      return thread;\n    } catch (error) {\n      this.error(`Error streaming from ${this.providerName} API`, { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create a streaming generator for processing the response\n   */\n  private async *createStreamGenerator(\n    stream: AsyncIterable<OpenAI.Chat.Completions.ChatCompletionChunk>,\n    message: Message,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<string, void> {\n    let content = \"\";\n    let currentToolCalls: OpenAI.Chat.ChatCompletionMessageToolCall[] = [];\n    let toolCallsStarted = false;\n\n    try {\n      for await (const chunk of this.wrapStreamWithAbort(abortSignal, stream as any)) {\n        const delta = (chunk as OpenAI.Chat.Completions.ChatCompletionChunk).choices[0]?.delta;\n        if (!delta) continue;\n\n        // Handle content updates\n        if (delta.content) {\n          content += delta.content;\n          // Update message content through proper method\n          Object.defineProperty(message, \"content\", {\n            value: content,\n            writable: true,\n            enumerable: true,\n            configurable: true,\n          });\n\n          // Yield the content chunk\n          yield delta.content;\n        }\n\n        // Handle tool calls\n        if (delta.tool_calls) {\n          if (!toolCallsStarted) {\n            // First tool call chunk\n            toolCallsStarted = true;\n            currentToolCalls = delta.tool_calls.map((call: any) => ({ ...call }));\n          } else {\n            // Subsequent tool call chunks - need to merge them\n            for (const toolCall of delta.tool_calls) {\n              const existingCall = currentToolCalls.find((c: any) => c.index === toolCall.index);\n\n              if (existingCall) {\n                // Update function content if provided\n                if (toolCall.function) {\n                  if (!existingCall.function) {\n                    existingCall.function = { name: \"\", arguments: \"\" };\n                  }\n\n                  if (toolCall.function.name && !existingCall.function.name) {\n                    existingCall.function.name = toolCall.function.name;\n                  }\n\n                  if (toolCall.function.arguments) {\n                    existingCall.function.arguments =\n                      (existingCall.function.arguments || \"\") + toolCall.function.arguments;\n                  }\n                }\n              } else {\n                // New tool call - ensure it has required properties\n                currentToolCalls.push({\n                  ...toolCall,\n                  id: toolCall.id || `tool_${Date.now()}_${toolCall.index}`,\n                  type: \"function\",\n                  function: {\n                    name: toolCall.function?.name || \"\",\n                    arguments: toolCall.function?.arguments || \"\",\n                  },\n                } as OpenAI.Chat.ChatCompletionMessageToolCall);\n              }\n            }\n          }\n        }\n      }\n\n      // Process final tool calls if any\n      if (currentToolCalls.length > 0) {\n        const parsedToolCalls = this.parseToolCalls(currentToolCalls);\n\n        // Create a new message with the tool calls\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: message.content || \"\",\n          toolCalls: parsedToolCalls,\n          cache: this.cache,\n        });\n\n        // Copy the updated message properties\n        Object.assign(message, updatedMessage);\n      }\n    } catch (error) {\n      this.error(`Error processing ${this.providerName} stream`, { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Legacy method for backward compatibility\n   * @deprecated Use formatMessagesForProvider instead\n   */\n  protected formatMessagesForAPI(thread: Thread): OpenAI.Chat.ChatCompletionMessageParam[] {\n    return this.formatMessagesForProvider(thread.all());\n  }\n\n  /**\n   * Create tool definitions for the API\n   */\n  protected createToolDefinitions(tools: Tool[]): OpenAI.Chat.ChatCompletionTool[] {\n    return tools.map((tool) => ({\n      type: \"function\",\n      function: {\n        name: tool.getName(),\n        description: tool.getDescription(),\n        parameters: {\n          ...zodToJsonSchema(tool.getParameters()),\n          $schema: JSON_SCHEMA_URL,\n        },\n      },\n    }));\n  }\n\n  /**\n   * Parse tool calls from the API response\n   */\n  protected parseToolCalls(\n    toolCalls?: OpenAI.Chat.ChatCompletionMessageToolCall[],\n  ): ToolCall[] | undefined {\n    if (!toolCalls || toolCalls.length === 0) {\n      return undefined;\n    }\n\n    return toolCalls.map((toolCall) => {\n      if (toolCall.type === \"function\" && toolCall.function.name) {\n        try {\n          const args = JSON.parse(toolCall.function.arguments || \"{}\");\n          return {\n            toolUseId: toolCall.id,\n            name: toolCall.function.name,\n            arguments: args,\n          };\n        } catch (error) {\n          this.error(\"Error parsing tool call arguments\", {\n            toolCall,\n            error,\n          });\n\n          return {\n            toolUseId: toolCall.id,\n            name: toolCall.function.name,\n            arguments: {},\n          };\n        }\n      }\n\n      return {\n        toolUseId: toolCall.id || nanoid(),\n        name: toolCall.function?.name || \"unknown\",\n        arguments: {},\n      };\n    });\n  }\n}\n","/**\n * Implement a class that represents an OpenAI client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\nimport { OpenAICompatibleDriver } from \"./openai-compatible\";\n\n/**\n * Available OpenAI models\n */\nexport type OpenAIModel =\n  | \"gpt-4o\"\n  | \"gpt-4o-mini\"\n  | \"gpt-4\"\n  | \"gpt-4-turbo\"\n  | \"gpt-3.5-turbo\"\n  | \"gpt-4-vision-preview\"\n  | \"gpt-4.1\";\n\n/**\n * Configuration options for the OpenAI driver\n */\n/**\n * Schema for structured output\n */\nexport interface OpenAIResponseSchema {\n  type: \"string\" | \"integer\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n  format?: string;\n  description?: string;\n  nullable?: boolean;\n  enum?: string[];\n  maxItems?: string;\n  minItems?: string;\n  properties?: Record<string, OpenAIResponseSchema>;\n  required?: string[];\n  propertyOrdering?: string[];\n  items?: OpenAIResponseSchema;\n}\n\nexport interface OpenAIConfig {\n  /**\n   * OpenAI API Key\n   */\n  apiKey?: string;\n\n  /**\n   * Model to use\n   * @default \"gpt-4o\"\n   */\n  model?: OpenAIModel;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Whether to enable tracing\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Schema for structured output\n   */\n  responseSchema?: OpenAIResponseSchema;\n}\n\n/**\n * Represents an OpenAI client and provides tools for converting messages to/from the LLM\n */\nexport class OpenAIThreadDriver extends OpenAICompatibleDriver {\n  /**\n   * Returns a list of available OpenAI models\n   */\n  static getAvailableModels(): OpenAIModel[] {\n    return [\n      \"gpt-4o\",\n      \"gpt-4o-mini\",\n      \"gpt-4\",\n      \"gpt-4-turbo\",\n      \"gpt-3.5-turbo\",\n      \"gpt-4-vision-preview\",\n      \"gpt-4.1\",\n    ];\n  }\n\n  /**\n   * Create a new OpenAI driver\n   * @param config Configuration options\n   */\n  constructor(config: OpenAIConfig = {}) {\n    super({\n      ...config,\n      baseUrl: \"https://api.openai.com/v1\",\n      providerName: \"openai\",\n    });\n\n    // The base class handles most of the initialization now\n  }\n\n  /**\n   * Get the default API key from OPENAI_API_KEY environment variable\n   */\n  protected getDefaultApiKey(): string | undefined {\n    return process.env.OPENAI_API_KEY;\n  }\n\n  /**\n   * Get the default model for OpenAI (GPT-4o)\n   */\n  protected getDefaultModel(): string {\n    return \"gpt-4o\";\n  }\n\n  // All other methods are inherited from OpenAICompatibleDriver\n}\n","/**\n * Implement a class that represents an Anthropic client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\n// Use require if module not found error\nconst Anthropic = require(\"@anthropic-ai/sdk\").default;\nimport { nanoid } from \"nanoid\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport { createValidationError, createValidationWarning } from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport type { Tool } from \"../tool\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\n\n/**\n * Schema for structured output\n */\nexport interface AnthropicResponseSchema {\n  type: \"string\" | \"integer\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n  format?: string;\n  description?: string;\n  nullable?: boolean;\n  enum?: string[];\n  maxItems?: string;\n  minItems?: string;\n  properties?: Record<string, AnthropicResponseSchema>;\n  required?: string[];\n  propertyOrdering?: string[];\n  items?: AnthropicResponseSchema;\n}\n\n/**\n * Available Anthropic models\n */\nexport type AnthropicModel =\n  // Claude 3 models\n  | \"claude-3-opus-20240229\"\n  | \"claude-3-sonnet-20240229\"\n  | \"claude-3-haiku-20240307\"\n  | \"claude-3-5-sonnet-20240620\"\n  | \"claude-3-5-sonnet-20241022\" // Claude 3.5 Sonnet v2\n  | \"claude-3-7-sonnet-20250219\"\n  // Claude Opus 4\n  | \"claude-opus-4-20250514\"\n  // Claude 2 models\n  | \"claude-2.0\"\n  | \"claude-2.1\"\n  // Tagged versions\n  | \"claude-3-opus-20240229-v1:0\"\n  | \"claude-3-sonnet-20240229-v1:0\"\n  | \"claude-3-haiku-20240307-v1:0\";\n\n/**\n * Configuration options for the Anthropic driver\n */\nexport interface AnthropicConfig {\n  /**\n   * Anthropic API Key\n   */\n  apiKey?: string;\n\n  /**\n   * Model to use\n   * @default \"claude-3-5-sonnet-20240620\"\n   */\n  model?: AnthropicModel;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Enable tracing for this driver\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Tools to use\n   */\n  tools?: Tool[];\n\n  /**\n   * Tool choice mode\n   * \"auto\": Let the model decide when to use tools\n   * \"any\": Always try to use a tool\n   * \"none\": Never use tools\n   * @default \"auto\"\n   */\n  toolChoice?: \"auto\" | \"any\" | \"none\";\n\n  /**\n   * Schema for structured output\n   */\n  responseSchema?: AnthropicResponseSchema;\n}\n\n// Define simplified types for Anthropic SDK components we use\ninterface AnthropicClient {\n  messages: {\n    create: (params: any) => Promise<any>;\n  };\n}\n\ninterface AnthropicContentBlockSource {\n  type: string;\n  media_type: string;\n  data: string;\n}\n\ninterface AnthropicContentBlock {\n  type: string;\n  text?: string;\n  source?: AnthropicContentBlockSource;\n  tool_use_id?: string;\n  content?: string;\n}\n\n/**\n * Represents an Anthropic client and provides tools for converting messages to/from the LLM\n */\nexport class AnthropicThreadDriver extends BaseModelDriver {\n  /**\n   * Anthropic API Client\n   */\n  private client: AnthropicClient;\n\n  /**\n   * Anthropic model to use\n   */\n  private model: AnthropicModel | string;\n\n  /**\n   * Temperature for response generation\n   */\n  private temperature: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  private maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   */\n  private cache: boolean;\n\n  /**\n   * Tool choice mode\n   */\n  private toolChoice?: \"auto\" | \"any\" | \"none\";\n\n  /**\n   * Schema for structured output\n   */\n  private responseSchema?: AnthropicResponseSchema;\n\n  /**\n   * Returns a list of available Anthropic models\n   */\n  static getAvailableModels(): AnthropicModel[] {\n    return [\n      // Claude 3 models\n      \"claude-3-opus-20240229\",\n      \"claude-3-sonnet-20240229\",\n      \"claude-3-haiku-20240307\",\n      \"claude-3-5-sonnet-20240620\",\n      \"claude-3-7-sonnet-20250219\",\n      // Claude 2 models\n      \"claude-2.0\",\n      \"claude-2.1\",\n      // Tagged versions\n      \"claude-3-opus-20240229-v1:0\",\n      \"claude-3-sonnet-20240229-v1:0\",\n      \"claude-3-haiku-20240307-v1:0\",\n    ];\n  }\n\n  /**\n   * Create a new Anthropic driver\n   * @param config Configuration options\n   */\n  constructor(config?: AnthropicConfig) {\n    super();\n\n    // Get API Key from config or environment variable\n    const apiKey = config?.apiKey || process.env.ANTHROPIC_API_KEY;\n    if (!apiKey) {\n      throw new Error(\n        \"Anthropic API Key must be provided in config or as ANTHROPIC_API_KEY environment variable\",\n      );\n    }\n\n    // Create a base client with retries disabled to prevent multiple validation runs\n    const baseClient = new Anthropic({\n      apiKey,\n      // This is needed because we're in a Node.js environment, in a server context\n      dangerouslyAllowBrowser: false,\n      // Disable retries to prevent multiple validation calls on the same broken messages\n      maxRetries: 0,\n    });\n\n    // Only wrap with tracing if trace is enabled (default to false)\n    if (config?.trace ?? false) {\n      // Create a proxy around the Anthropic client to intercept API calls\n      this.client = new Proxy(baseClient, {\n        get: (target, prop, receiver) => {\n          const value = Reflect.get(target, prop, receiver);\n\n          // Handle nested properties (messages.create)\n          if (prop === \"messages\" && value && typeof value === \"object\") {\n            return new Proxy(value, {\n              get: (messagesTarget, messagesProp, messagesReceiver) => {\n                const messagesValue = Reflect.get(messagesTarget, messagesProp, messagesReceiver);\n\n                // Wrap the create method with tracing\n                if (messagesProp === \"create\" && typeof messagesValue === \"function\") {\n                  return traceable(messagesValue.bind(messagesTarget), {\n                    run_type: \"llm\",\n                    name: \"anthropic\",\n                    ...config?.traceMetadata,\n                    aggregator: (args: any[], result: any) => {\n                      // Extract relevant data for tracing\n                      const params = args[0] || {};\n\n                      // For streaming responses, we just log the input\n                      if (params.stream) {\n                        return {\n                          model: params.model,\n                          input: {\n                            messages: params.messages,\n                            temperature: params.temperature,\n                            max_tokens: params.max_tokens,\n                            tools: params.tools ? params.tools.length : 0,\n                          },\n                          streaming: true,\n                        };\n                      }\n\n                      // For non-streaming, include response data\n                      return {\n                        model: params.model,\n                        input: {\n                          messages: params.messages,\n                          temperature: params.temperature,\n                          max_tokens: params.max_tokens,\n                          tools: params.tools ? params.tools.length : 0,\n                        },\n                        output: result.content,\n                        metrics: result.usage\n                          ? {\n                              prompt_tokens: result.usage.input_tokens,\n                              completion_tokens: result.usage.output_tokens,\n                              total_tokens: result.usage.input_tokens + result.usage.output_tokens,\n                            }\n                          : undefined,\n                        finish_reason: result.stop_reason,\n                      };\n                    },\n                  });\n                }\n\n                return messagesValue;\n              },\n            });\n          }\n\n          return value;\n        },\n      });\n    } else {\n      this.client = baseClient;\n    }\n\n    // Set configuration options\n    this.model = config?.model || \"claude-3-5-sonnet-20240620\";\n    this.temperature = config?.temperature ?? 0.7;\n    // Always set a default maxTokens if not provided\n    this.maxTokens = config?.maxTokens ?? 1024;\n    this.cache = config?.cache ?? false;\n    this.toolChoice = config?.toolChoice;\n    this.responseSchema = config?.responseSchema;\n  }\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for Anthropic API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    // Anthropic has a different format where system messages are handled separately\n    // This method returns the message array, and systemMessage is handled in the legacy method\n    const formattedMessages: any[] = [];\n\n    for (const message of messages) {\n      // Skip system messages - they're handled separately in Anthropic\n      if (message.role === \"system\") {\n        continue;\n      }\n\n      // Handle user messages with attachments\n      if (message.role === \"user\") {\n        const contentBlocks: any[] = [];\n\n        // Add text content\n        if (message.content) {\n          contentBlocks.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add image attachments\n        if (message.attachments) {\n          for (const attachment of message.attachments) {\n            if (attachment.type === \"image\" && attachment.source.uri) {\n              // Check if it's a data URI or regular URL\n              if (attachment.source.uri.startsWith(\"data:\")) {\n                const [header, base64Data] = attachment.source.uri.split(\",\");\n                const mediaType = header?.match(/data:([^;]+)/)?.[1] || \"image/jpeg\";\n\n                contentBlocks.push({\n                  type: \"image\",\n                  source: {\n                    type: \"base64\",\n                    media_type: mediaType,\n                    data: base64Data,\n                  },\n                });\n              } else {\n                // For regular URLs, we'd need to fetch and convert to base64\n                // This is simplified - in production you might want to handle this\n                contentBlocks.push({\n                  type: \"text\",\n                  text: `[Image: ${attachment.source.uri}]`,\n                });\n              }\n            }\n          }\n        }\n\n        formattedMessages.push({\n          role: \"user\",\n          content:\n            contentBlocks.length === 1 && contentBlocks[0].type === \"text\"\n              ? contentBlocks[0].text\n              : contentBlocks,\n        });\n      } else if (message.role === \"assistant\") {\n        // Handle assistant messages with tool calls\n        const content: any[] = [];\n\n        if (message.content) {\n          content.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add tool calls\n        if (message.toolCalls && message.toolCalls.length > 0) {\n          for (const toolCall of message.toolCalls) {\n            content.push({\n              type: \"tool_use\",\n              id: toolCall.toolUseId,\n              name: toolCall.name,\n              input: toolCall.arguments,\n            });\n          }\n        }\n\n        formattedMessages.push({\n          role: \"assistant\",\n          content: content.length === 1 && content[0].type === \"text\" ? content[0].text : content,\n        });\n      } else if (message.toolResults && message.toolResults.length > 0) {\n        // Handle tool results\n        const content: any[] = [];\n\n        if (message.content) {\n          content.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add tool results\n        for (const toolResult of message.toolResults) {\n          content.push({\n            type: \"tool_result\",\n            tool_use_id: toolResult.toolUseId,\n            content:\n              typeof toolResult.result === \"string\"\n                ? toolResult.result\n                : JSON.stringify(toolResult.result),\n            is_error: !!toolResult.error,\n          });\n        }\n\n        formattedMessages.push({\n          role: \"user\",\n          content,\n        });\n      }\n    }\n\n    return formattedMessages;\n  }\n\n  /**\n   * Validate conversation and apply auto-repairs for Anthropic API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    // DEBUG: Track validation calls to understand multiple invocations\n    console.log(\"🔍 [Validation Entry] validateConversation called:\", {\n      inputMessageCount: formattedMessages.length,\n      callStack: new Error().stack\n        ?.split(\"\\n\")\n        .slice(1, 4)\n        .map((line) => line.trim()),\n      timestamp: Date.now(),\n    });\n\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n    const processedMessages = [...formattedMessages];\n\n    // 1. Anthropic-specific validations\n    for (let i = 0; i < processedMessages.length; i++) {\n      const message = processedMessages[i];\n\n      // Check for empty content\n      if (\n        !message.content ||\n        (Array.isArray(message.content) && message.content.length === 0) ||\n        (typeof message.content === \"string\" && message.content.trim() === \"\")\n      ) {\n        if (context.enableAutoRepair) {\n          if (typeof message.content === \"string\") {\n            message.content = message.role === \"user\" ? \"Continue\" : \"I understand.\";\n          } else {\n            message.content = [\n              {\n                type: \"text\",\n                text: message.role === \"user\" ? \"Continue\" : \"I understand.\",\n              },\n            ];\n          }\n          repairsApplied.push(\n            `Added minimal content to empty ${message.role} message at index ${i}`,\n          );\n          warnings.push(\n            createValidationWarning(\n              \"anthropic_empty_content_repaired\",\n              `Empty ${message.role} message was given minimal content`,\n              { index: i },\n            ),\n          );\n        } else {\n          errors.push(\n            createValidationError(\n              \"anthropic_empty_content\",\n              `${message.role} message has empty content`,\n              { index: i, severity: \"error\" },\n            ),\n          );\n        }\n      }\n\n      // Validate alternating user/assistant pattern (Anthropic requirement)\n      if (i > 0) {\n        const prevMessage = processedMessages[i - 1];\n        if (message.role === prevMessage.role) {\n          if (context.enableAutoRepair && message.role === \"user\" && prevMessage.role === \"user\") {\n            // Auto-repair: Merge consecutive user messages\n            const prevContent = Array.isArray(prevMessage.content)\n              ? prevMessage.content\n              : [{ type: \"text\", text: prevMessage.content }];\n            const currContent = Array.isArray(message.content)\n              ? message.content\n              : [{ type: \"text\", text: message.content }];\n\n            prevMessage.content = [...prevContent, ...currContent];\n            processedMessages.splice(i, 1); // Remove current message\n            i--; // Adjust index\n\n            repairsApplied.push(`Merged consecutive user messages at index ${i}`);\n            warnings.push(\n              createValidationWarning(\n                \"anthropic_consecutive_user_merged\",\n                \"Consecutive user messages were merged\",\n                { index: i },\n              ),\n            );\n          } else {\n            warnings.push(\n              createValidationWarning(\n                \"anthropic_consecutive_roles\",\n                `Consecutive ${message.role} messages - Anthropic prefers alternating user/assistant pattern`,\n                { index: i },\n              ),\n            );\n          }\n        }\n      }\n    }\n\n    // 2. Check tool use/result pairing\n    if (!context.allowPartialConversations) {\n      const toolUseStack: Array<{ id: string; index: number; name: string }> = [];\n\n      // Debug logging for tool validation\n      console.log(\"🔧 [Anthropic Auto-Repair] Starting tool validation\", {\n        messageCount: processedMessages.length,\n        enableAutoRepair: context.enableAutoRepair,\n        allowPartialConversations: context.allowPartialConversations,\n        callStack: new Error().stack?.split(\"\\n\")[2]?.trim(),\n      });\n\n      for (let i = 0; i < processedMessages.length; i++) {\n        const message = processedMessages[i];\n\n        // Track tool uses in assistant messages\n        if (message.role === \"assistant\" && Array.isArray(message.content)) {\n          for (const content of message.content) {\n            if (content.type === \"tool_use\") {\n              console.log(\"🔍 [Tool Detection] Found tool_use:\", {\n                id: content.id,\n                name: content.name,\n                messageIndex: i,\n                isTargetId: content.id === \"toolu_01QMSMDpsmNUtaQraFQhTd41\",\n              });\n              toolUseStack.push({\n                id: content.id,\n                index: i,\n                name: content.name,\n              });\n            }\n          }\n        }\n\n        // Match tool results\n        if (message.role === \"user\" && Array.isArray(message.content)) {\n          for (const content of message.content) {\n            if (content.type === \"tool_result\") {\n              console.log(\"🔍 [Tool Matching] Found tool_result:\", {\n                toolUseId: content.tool_use_id,\n                messageIndex: i,\n                isTargetId: content.tool_use_id === \"toolu_01QMSMDpsmNUtaQraFQhTd41\",\n              });\n              const callIndex = toolUseStack.findIndex((call) => call.id === content.tool_use_id);\n              if (callIndex >= 0) {\n                console.log(\"✅ [Tool Matching] Matched tool_result with tool_use:\", {\n                  toolUseId: content.tool_use_id,\n                  removedFromStack: true,\n                });\n                toolUseStack.splice(callIndex, 1);\n              } else {\n                console.log(\"❌ [Tool Matching] Orphaned tool_result (no matching tool_use):\", {\n                  toolUseId: content.tool_use_id,\n                });\n                warnings.push(\n                  createValidationWarning(\n                    \"anthropic_orphaned_tool_result\",\n                    `Tool result without matching use: ${content.tool_use_id}`,\n                    { index: i },\n                  ),\n                );\n              }\n            }\n          }\n        }\n      }\n\n      // Handle unmatched tool uses\n      console.log(\"🔧 [Auto-Repair] Tool validation complete:\", {\n        unmatchedToolUses: toolUseStack.length,\n        toolUseIds: toolUseStack.map((t) => t.id),\n        hasTargetId: toolUseStack.some((t) => t.id === \"toolu_01QMSMDpsmNUtaQraFQhTd41\"),\n        autoRepairEnabled: context.enableAutoRepair,\n      });\n\n      for (const unmatchedUse of toolUseStack) {\n        console.log(\"🚨 [Orphaned Tool] Processing unmatched tool_use:\", {\n          id: unmatchedUse.id,\n          name: unmatchedUse.name,\n          index: unmatchedUse.index,\n          isTargetId: unmatchedUse.id === \"toolu_01QMSMDpsmNUtaQraFQhTd41\",\n          willAutoRepair: context.enableAutoRepair,\n        });\n\n        if (context.enableAutoRepair) {\n          // Add placeholder tool result - append naturally to preserve conversation flow\n          const toolResultMessage = {\n            role: \"user\",\n            content: [\n              {\n                type: \"tool_result\",\n                tool_use_id: unmatchedUse.id,\n                content: JSON.stringify({\n                  error: \"Tool result not provided\",\n                  tool_name: unmatchedUse.name,\n                }),\n                is_error: true,\n              },\n            ],\n          };\n          processedMessages.push(toolResultMessage);\n          repairsApplied.push(\n            `Added placeholder result for unmatched tool use ${unmatchedUse.name}`,\n          );\n          warnings.push(\n            createValidationWarning(\n              \"anthropic_unmatched_tool_use_repaired\",\n              `Added placeholder result for tool use: ${unmatchedUse.name}`,\n              { index: unmatchedUse.index },\n            ),\n          );\n\n          console.log(\"✅ [Auto-Repair] Added placeholder tool_result for:\", {\n            toolUseId: unmatchedUse.id,\n            toolName: unmatchedUse.name,\n            placeholderContent: JSON.stringify({\n              error: \"Tool result not provided\",\n              tool_name: unmatchedUse.name,\n            }),\n          });\n        } else {\n          console.log(\"❌ [Auto-Repair] Auto-repair disabled, adding error:\", {\n            toolUseId: unmatchedUse.id,\n            toolName: unmatchedUse.name,\n          });\n          errors.push(\n            createValidationError(\n              \"anthropic_unmatched_tool_use\",\n              `Tool use without result: ${unmatchedUse.name}`,\n              { index: unmatchedUse.index, severity: \"error\" },\n            ),\n          );\n        }\n      }\n    }\n\n    console.log(\"🔧 [Auto-Repair] Validation complete, returning:\", {\n      isValid: errors.length === 0,\n      finalMessageCount: processedMessages.length,\n      repairsAppliedCount: repairsApplied.length,\n      hasPlaceholderResults: processedMessages.some(\n        (m) =>\n          Array.isArray(m.content) &&\n          m.content.some((c: any) => c.type === \"tool_result\" && c.is_error),\n      ),\n    });\n\n    return {\n      isValid: errors.length === 0,\n      messages: processedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Check if Anthropic response is effectively empty (model was overwhelmed)\n   */\n  private isEmptyResponse(response: any): boolean {\n    const contentCount = Array.isArray(response.content) ? response.content.length : 1;\n    const outputTokens = response.usage?.output_tokens || 0;\n    \n    return contentCount === 0 || outputTokens < 10;\n  }\n\n  /**\n   * Count error placeholders in messages\n   */\n  private countErrorPlaceholders(messages: any[]): number {\n    return messages.reduce((count, message) => {\n      if (Array.isArray(message.content)) {\n        return count + message.content.filter((c: any) => c.type === \"tool_result\" && c.is_error).length;\n      }\n      return count;\n    }, 0);\n  }\n\n  /**\n   * Truncate conversation with many error placeholders to prevent overwhelming Anthropic.\n   * When auto-repair adds many placeholder tool_results, the model gets confused by too much\n   * error context and returns empty responses. This keeps only recent relevant messages.\n   */\n  private truncateConversationWithErrors(messages: any[]): any[] {\n    const errorCount = messages.reduce((count, message) => {\n      if (Array.isArray(message.content)) {\n        return count + message.content.filter((c: any) => c.type === \"tool_result\" && c.is_error).length;\n      }\n      return count;\n    }, 0);\n\n    console.log(\"🔧 [Conversation Truncation] Analyzing conversation:\", {\n      totalMessages: messages.length,\n      errorPlaceholders: errorCount,\n      shouldTruncate: errorCount > 10 || messages.length > 50\n    });\n\n    // If we have many errors or too many messages, truncate aggressively\n    if (errorCount > 10 || messages.length > 50) {\n      // Keep system messages and find a safe truncation point that doesn't break tool pairs\n      const systemMessages = messages.filter(m => m.role === \"system\");\n      const nonSystemMessages = messages.filter(m => m.role !== \"system\");\n      \n      // Find a safe truncation point by looking for complete conversation blocks\n      // Start from the end and work backwards, ensuring we don't break tool_use/tool_result pairs\n      let truncationIndex = Math.max(0, nonSystemMessages.length - 20);\n      \n      // Adjust truncation point to avoid starting with a tool_result without its tool_use\n      while (truncationIndex > 0 && this.messageStartsWithOrphanedToolResult(nonSystemMessages, truncationIndex)) {\n        truncationIndex--;\n      }\n      \n      const recentMessages = nonSystemMessages.slice(truncationIndex);\n      const truncatedMessages = [...systemMessages, ...recentMessages];\n      \n      console.log(\"✂️ [Conversation Truncation] Truncated conversation:\", {\n        originalCount: messages.length,\n        truncatedCount: truncatedMessages.length,\n        systemMessagesKept: systemMessages.length,\n        recentMessagesKept: recentMessages.length,\n        errorsRemoved: errorCount - truncatedMessages.reduce((count, message) => {\n          if (Array.isArray(message.content)) {\n            return count + message.content.filter((c: any) => c.type === \"tool_result\" && c.is_error).length;\n          }\n          return count;\n        }, 0)\n      });\n\n      return truncatedMessages;\n    }\n\n    return messages;\n  }\n\n  /**\n   * Sort messages by conversation flow to ensure proper ordering for Anthropic API.\n   * This is critical when auto-repair has added placeholder tool_results that need to\n   * appear in proper sequence relative to their corresponding tool_use messages.\n   */\n  private sortMessagesByConversationFlow(messages: any[]): any[] {\n    // Create a map to track tool_use to tool_result relationships\n    const toolUseToResultMap = new Map<string, any>();\n    const toolResultToUseMap = new Map<string, any>();\n    const sortedMessages: any[] = [];\n\n    // First pass: identify tool_use and tool_result pairs\n    for (let i = 0; i < messages.length; i++) {\n      const message = messages[i];\n      \n      if (Array.isArray(message.content)) {\n        for (const content of message.content) {\n          if (content.type === \"tool_use\") {\n            toolUseToResultMap.set(content.id, { message, messageIndex: i, content });\n          } else if (content.type === \"tool_result\") {\n            toolResultToUseMap.set(content.tool_use_id, { message, messageIndex: i, content });\n          }\n        }\n      }\n    }\n\n    // Second pass: build sorted message array with proper tool pairing\n    const processedIndices = new Set<number>();\n\n    for (let i = 0; i < messages.length; i++) {\n      if (processedIndices.has(i)) continue;\n\n      const message = messages[i];\n      sortedMessages.push(message);\n      processedIndices.add(i);\n\n      // If this message contains tool_use, try to place its tool_result immediately after\n      if (Array.isArray(message.content)) {\n        for (const content of message.content) {\n          if (content.type === \"tool_use\") {\n            const resultInfo = toolResultToUseMap.get(content.id);\n            if (resultInfo && !processedIndices.has(resultInfo.messageIndex)) {\n              // Place the tool_result message immediately after the tool_use message\n              sortedMessages.push(resultInfo.message);\n              processedIndices.add(resultInfo.messageIndex);\n              \n              console.log(\"🔄 [Message Sorting] Reordered tool_result to follow tool_use:\", {\n                toolUseId: content.id,\n                originalToolUseIndex: i,\n                originalToolResultIndex: resultInfo.messageIndex,\n                newToolResultPosition: sortedMessages.length - 1\n              });\n            }\n          }\n        }\n      }\n    }\n\n    console.log(\"🔄 [Message Sorting] Sorting complete:\", {\n      originalLength: messages.length,\n      sortedLength: sortedMessages.length,\n      reorderedCount: sortedMessages.length - processedIndices.size\n    });\n\n    return sortedMessages;\n  }\n\n  /**\n   * Helper method to extract system message from original messages\n   * This is needed because Anthropic handles system messages separately\n   */\n  private extractSystemMessage(messages: Message[]): string | undefined {\n    const systemMessages = messages.filter((m) => m.role === \"system\");\n    if (systemMessages.length === 0) return undefined;\n\n    // Combine multiple system messages if present\n    return systemMessages\n      .map((m) => m.content)\n      .filter(Boolean)\n      .join(\"\\n\\n\");\n  }\n\n  // ==================== UPDATED THREAD METHODS ====================\n\n  /**\n   * Send processed messages to Anthropic API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    console.log(\"🔄 [sendProcessedMessages] Starting method...\", {\n      messageCount: processingResult.messages.length,\n      isValid: processingResult.validation.isValid,\n      hasAbortSignal: !!abortSignal\n    });\n\n    // Use the processed messages and extract system message\n    let messages = processingResult.messages;\n    const systemMessage = this.extractSystemMessage(thread.all());\n\n    // Sort messages to ensure proper chronological order\n    // This is especially important when auto-repair has added placeholder tool_results\n    // Messages should be in conversation flow order for Anthropic API\n    messages = this.sortMessagesByConversationFlow(messages);\n\n    // Store original messages for potential retry\n    const originalMessages = [...messages];\n\n    // DEBUG: Log final API call details to track the disconnect\n    console.log(\"🚨 [Final API Call] About to send to Anthropic API:\", {\n      totalMessages: messages.length,\n      hasPlaceholderResults: messages.some(\n        (m: any) =>\n          Array.isArray(m.content) &&\n          m.content.some((c: any) => c.type === \"tool_result\" && c.is_error),\n      ),\n      toolUseIds: messages\n        .filter((m: any) => m.role === \"assistant\" && Array.isArray(m.content))\n        .flatMap((m: any) =>\n          m.content.filter((c: any) => c.type === \"tool_use\").map((c: any) => c.id),\n        ),\n      toolResultIds: messages\n        .filter((m: any) => m.role === \"user\" && Array.isArray(m.content))\n        .flatMap((m: any) =>\n          m.content.filter((c: any) => c.type === \"tool_result\").map((c: any) => c.tool_use_id),\n        ),\n      repairsApplied: processingResult.processing.repairsApplied,\n      isValid: processingResult.validation.isValid,\n      callStack: new Error().stack?.split(\"\\n\")[2]?.trim(),\n    });\n\n    // DEBUG: Deep inspection of message structure around the problematic tool use\n    const problematicToolId = \"toolu_01QMSMDpsmNUtaQraFQhTd41\";\n    console.log(\"🔍 [Deep Analysis] Searching for problematic tool and its result:\", {\n      searchingFor: problematicToolId,\n      totalMessages: messages.length,\n    });\n\n    let toolUseFound = false;\n    let toolResultFound = false;\n    let toolUseMessageIndex = -1;\n    let toolResultMessageIndex = -1;\n\n    messages.forEach((msg: any, msgIndex: number) => {\n      if (Array.isArray(msg.content)) {\n        msg.content.forEach((content: any, contentIndex: number) => {\n          if (content.type === \"tool_use\" && content.id === problematicToolId) {\n            toolUseFound = true;\n            toolUseMessageIndex = msgIndex;\n            console.log(\"🎯 [Tool Use Found] Located problematic tool_use:\", {\n              messageIndex: msgIndex,\n              contentIndex: contentIndex,\n              role: msg.role,\n              toolId: content.id,\n              toolName: content.name,\n              fullMessage: {\n                role: msg.role,\n                content: msg.content.map((c: any) => ({\n                  type: c.type,\n                  id: c.id || c.tool_use_id,\n                  name: c.name,\n                  error: c.is_error,\n                })),\n              },\n            });\n          }\n          if (content.type === \"tool_result\" && content.tool_use_id === problematicToolId) {\n            toolResultFound = true;\n            toolResultMessageIndex = msgIndex;\n            console.log(\"🎯 [Tool Result Found] Located corresponding tool_result:\", {\n              messageIndex: msgIndex,\n              contentIndex: contentIndex,\n              role: msg.role,\n              toolUseId: content.tool_use_id,\n              isError: content.is_error,\n              contentPreview:\n                typeof content.content === \"string\"\n                  ? content.content.substring(0, 100)\n                  : JSON.stringify(content.content).substring(0, 100),\n              fullMessage: {\n                role: msg.role,\n                content: msg.content.map((c: any) => ({\n                  type: c.type,\n                  id: c.id || c.tool_use_id,\n                  name: c.name,\n                  error: c.is_error,\n                })),\n              },\n            });\n          }\n        });\n      }\n    });\n\n    console.log(\"🔍 [Tool Pairing Analysis] Summary:\", {\n      toolUseFound,\n      toolResultFound,\n      toolUseMessageIndex,\n      toolResultMessageIndex,\n      isProperlySeparated: toolResultFound && toolResultMessageIndex > toolUseMessageIndex,\n      messageGap: toolResultFound ? toolResultMessageIndex - toolUseMessageIndex : \"N/A\",\n    });\n\n    // Also log the exact message sequence around the problem area\n    if (toolUseFound) {\n      const startIndex = Math.max(0, toolUseMessageIndex - 2);\n      const endIndex = Math.min(messages.length, toolUseMessageIndex + 5);\n      console.log(\"🔍 [Context Messages] Messages around problematic tool use:\", {\n        startIndex,\n        endIndex,\n        contextMessages: messages\n          .slice(startIndex, endIndex)\n          .map((msg: any, relativeIndex: number) => ({\n            absoluteIndex: startIndex + relativeIndex,\n            role: msg.role,\n            contentSummary: Array.isArray(msg.content)\n              ? msg.content.map((c: any) => ({\n                  type: c.type,\n                  id: c.id || c.tool_use_id,\n                  name: c.name,\n                  isError: c.is_error,\n                }))\n              : typeof msg.content === \"string\"\n                ? `\"${msg.content.substring(0, 50)}...\"`\n                : \"unknown\",\n          })),\n      });\n    }\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) =>\n        sum +\n        (Array.isArray(msg.content)\n          ? msg.content.reduce(\n              (s: number, c: AnthropicContentBlock) =>\n                s + (typeof c.text === \"string\" ? c.text.length : 0),\n              0,\n            )\n          : typeof msg.content === \"string\"\n            ? msg.content.length\n            : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    try {\n      // Check if execution has been aborted\n      this.checkAbortSignal(abortSignal);\n\n      // Create parameters for the API call\n      const params: any = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n        max_tokens: this.maxTokens,\n      };\n\n      // Add system message if specified\n      if (systemMessage) {\n        params.system = systemMessage;\n      }\n\n      // Add tools if there are any in the thread\n      const tools = thread.getTools();\n      if (tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n\n        // Format tool_choice as an object instead of a string\n        if (this.toolChoice === \"any\") {\n          params.tool_choice = { type: \"any\" };\n        } else if (this.toolChoice === \"none\") {\n          params.tool_choice = { type: \"none\" };\n        } else {\n          params.tool_choice = { type: \"auto\" };\n        }\n      }\n\n      // Add structured output using tool use if responseSchema is defined\n      if (this.responseSchema && (!tools || tools.length === 0)) {\n        // Create a synthetic tool for structured output\n        params.tools = [\n          {\n            name: \"structured_response\",\n            description: \"Return a structured response following the specified schema\",\n            input_schema: this.responseSchema,\n          },\n        ];\n        params.tool_choice = { type: \"tool\", name: \"structured_response\" };\n      }\n\n      // Check abort signal before making API call\n      this.checkAbortSignal(abortSignal);\n\n      // Make the API call\n      console.log(\"🔄 [API Call] Making request to Anthropic...\", {\n        model: params.model,\n        messageCount: params.messages.length,\n        hasTools: !!params.tools,\n        toolCount: params.tools?.length || 0\n      });\n      \n      let response = await this.client.messages.create(params);\n      \n      console.log(\"✅ [API Response] Received response from Anthropic:\", {\n        contentType: Array.isArray(response.content) ? 'array' : typeof response.content,\n        contentCount: Array.isArray(response.content) ? response.content.length : 1,\n        usage: response.usage,\n        stopReason: response.stop_reason\n      });\n\n      // Check for empty response that might indicate model was overwhelmed\n      const isEmpty = this.isEmptyResponse(response);\n      const hasErrors = this.countErrorPlaceholders(originalMessages);\n\n      if (isEmpty && hasErrors > 10) {\n        console.log(\"🔄 [Retry Strategy] Empty response with many errors, retrying with truncated conversation:\", {\n          originalMessages: originalMessages.length,\n          errorPlaceholders: hasErrors,\n          outputTokens: response.usage?.output_tokens || 0\n        });\n\n        // Retry with truncated conversation\n        const truncatedMessages = this.truncateConversationWithErrors(originalMessages);\n        const retryParams = { ...params, messages: truncatedMessages };\n        \n        response = await this.client.messages.create(retryParams);\n        \n        console.log(\"✅ [Retry Response] Received retry response from Anthropic:\", {\n          contentType: Array.isArray(response.content) ? 'array' : typeof response.content,\n          contentCount: Array.isArray(response.content) ? response.content.length : 1,\n          usage: response.usage,\n          stopReason: response.stop_reason,\n          wasRetry: true\n        });\n      }\n\n      // Parse structured output if we used the synthetic tool\n      let content = Array.isArray(response.content)\n        ? response.content.map((block: any) => block.text).join(\"\")\n        : response.content;\n\n      let toolCalls = this.parseToolCalls(response);\n\n      // If we used structured output, extract the JSON from the tool call\n      if (this.responseSchema && toolCalls && toolCalls.length > 0) {\n        const structuredCall = toolCalls.find((call) => call.name === \"structured_response\");\n        if (structuredCall) {\n          // Convert the structured response to JSON string\n          content = JSON.stringify(structuredCall.arguments);\n          // Remove the synthetic tool call from the list\n          toolCalls = toolCalls.filter((call) => call.name !== \"structured_response\");\n          if (toolCalls.length === 0) {\n            toolCalls = undefined;\n          }\n        }\n      }\n\n      // Create a new message from the response\n      const message = new Message({\n        role: \"assistant\",\n        content,\n        toolCalls,\n        cache: this.cache,\n      });\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Log and store usage metrics if available\n      if (response.usage) {\n        const tokenUsage = {\n          inputTokens: response.usage.input_tokens,\n          outputTokens: response.usage.output_tokens,\n          totalTokens: response.usage.input_tokens + response.usage.output_tokens,\n        };\n\n        // Store token usage in the thread\n        thread.updateTokenUsage(tokenUsage);\n\n        this.debug(\"Anthropic API usage metrics\", tokenUsage);\n      }\n\n      console.log(\"✅ [sendProcessedMessages] Successfully created message and updated thread\", {\n        messageContent: content?.length ? `${content.substring(0, 100)}...` : 'empty',\n        hasToolCalls: !!toolCalls && toolCalls.length > 0,\n        toolCallCount: toolCalls?.length || 0,\n        tokenUsage: response.usage\n      });\n\n      return thread;\n    } catch (error) {\n      console.error(\"❌ [sendProcessedMessages] Error occurred:\", {\n        error: error instanceof Error ? error.message : String(error),\n        errorType: error?.constructor?.name,\n        stack: error instanceof Error ? error.stack : undefined\n      });\n      this.error(\"Error sending message to Anthropic API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Stream processed messages to Anthropic API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    this.debug(\"Streaming message to Anthropic API\", { model: this.model });\n\n    // Use the processed messages and extract system message\n    let messages = processingResult.messages;\n    const systemMessage = this.extractSystemMessage(thread.all());\n\n    // Sort messages to ensure proper chronological order\n    // This is especially important when auto-repair has added placeholder tool_results\n    // Messages should be in conversation flow order for Anthropic API\n    messages = this.sortMessagesByConversationFlow(messages);\n\n    // DEBUG: Log final streaming API call details\n    console.log(\"🚨 [Final Stream Call] About to stream to Anthropic API:\", {\n      totalMessages: messages.length,\n      hasPlaceholderResults: messages.some(\n        (m: any) =>\n          Array.isArray(m.content) &&\n          m.content.some((c: any) => c.type === \"tool_result\" && c.is_error),\n      ),\n      repairsApplied: processingResult.processing.repairsApplied,\n      isValid: processingResult.validation.isValid,\n    });\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) =>\n        sum +\n        (Array.isArray(msg.content)\n          ? msg.content.reduce(\n              (s: number, c: AnthropicContentBlock) =>\n                s + (typeof c.text === \"string\" ? c.text.length : 0),\n              0,\n            )\n          : typeof msg.content === \"string\"\n            ? msg.content.length\n            : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    try {\n      // Check if execution has been aborted\n      this.checkAbortSignal(abortSignal);\n\n      // Create parameters for the API call\n      const params: any = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n        stream: true,\n        max_tokens: this.maxTokens,\n      };\n\n      // Add system message if specified\n      if (systemMessage) {\n        params.system = systemMessage;\n      }\n\n      // Add tools if there are any in the thread\n      const tools = thread.getTools();\n      if (tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n\n        // Format tool_choice as an object instead of a string\n        if (this.toolChoice === \"any\") {\n          params.tool_choice = { type: \"any\" };\n        } else if (this.toolChoice === \"none\") {\n          params.tool_choice = { type: \"none\" };\n        } else {\n          params.tool_choice = { type: \"auto\" };\n        }\n      }\n\n      // Add structured output using tool use if responseSchema is defined\n      if (this.responseSchema && (!tools || tools.length === 0)) {\n        // Create a synthetic tool for structured output\n        params.tools = [\n          {\n            name: \"structured_response\",\n            description: \"Return a structured response following the specified schema\",\n            input_schema: this.responseSchema,\n          },\n        ];\n        params.tool_choice = { type: \"tool\", name: \"structured_response\" };\n      }\n\n      // Check abort signal before making API call\n      this.checkAbortSignal(abortSignal);\n\n      // Create a new message to add to the thread\n      const message = new Message({\n        role: \"assistant\",\n        content: \"\",\n        cache: this.cache,\n      });\n\n      // Make the streaming API call\n      const stream = await this.client.messages.create(params);\n\n      // Create a streaming content generator\n      const streamContent = this.createStreamGenerator(stream, message);\n\n      // Yield the stream\n      yield { stream: streamContent, message };\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Return the updated thread\n      return thread;\n    } catch (error) {\n      this.error(\"Error streaming message to Anthropic API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create a stream generator that handles updates to the message\n   */\n  private async *createStreamGenerator(\n    stream: AsyncIterable<any>,\n    message: Message,\n  ): AsyncGenerator<string, void> {\n    let toolCallsStarted = false;\n    const currentToolCalls: any[] = [];\n    let contentAccumulated = \"\";\n\n    try {\n      for await (const chunk of stream) {\n        // Handle content delta events\n        if (chunk.type === \"content_block_delta\") {\n          const delta = chunk.delta?.text || \"\";\n\n          // Update accumulated content\n          contentAccumulated += delta;\n\n          // Update the message content\n          Object.assign(\n            message,\n            new Message({\n              role: \"assistant\",\n              content: contentAccumulated,\n              toolCalls: message.toolCalls,\n              cache: message.cache,\n            }),\n          );\n\n          yield delta;\n        }\n\n        // Handle tool use events\n        if (chunk.type === \"tool_use\") {\n          if (!toolCallsStarted) {\n            toolCallsStarted = true;\n            currentToolCalls.push({\n              id: chunk.id,\n              name: chunk.name,\n              input: chunk.input,\n            });\n          }\n        }\n      }\n\n      // Process the tool calls after the stream completes\n      if (currentToolCalls.length > 0) {\n        let parsedToolCalls = currentToolCalls.map((call) => ({\n          toolUseId: call.id,\n          name: call.name,\n          arguments: call.input,\n        }));\n\n        // If we used structured output, extract the JSON from the tool call\n        if (this.responseSchema && parsedToolCalls.length > 0) {\n          const structuredCall = parsedToolCalls.find(\n            (call) => call.name === \"structured_response\",\n          );\n          if (structuredCall) {\n            // Convert the structured response to JSON string\n            contentAccumulated = JSON.stringify(structuredCall.arguments);\n            // Remove the synthetic tool call from the list\n            parsedToolCalls = parsedToolCalls.filter((call) => call.name !== \"structured_response\");\n            if (parsedToolCalls.length === 0) {\n              parsedToolCalls = undefined as any;\n            }\n          }\n        }\n\n        // Create a new message with the tool calls\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: contentAccumulated,\n          toolCalls: parsedToolCalls,\n          cache: message.cache,\n        });\n\n        // Copy the updated message properties\n        Object.assign(message, updatedMessage);\n      }\n    } catch (error) {\n      this.error(\"Error processing Anthropic stream\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create tool definitions for the Anthropic API\n   */\n  private createToolDefinitions(tools: Tool[]): any[] {\n    return tools.map((tool) => ({\n      name: tool.getName(),\n      description: tool.getDescription(),\n      input_schema: zodToJsonSchema(tool.getParameters()),\n    }));\n  }\n\n  /**\n   * Parse tool calls from the Anthropic API response\n   */\n  private parseToolCalls(response: any): ToolCall[] | undefined {\n    if (!response.content || !Array.isArray(response.content)) {\n      return undefined;\n    }\n\n    const toolCalls: ToolCall[] = [];\n\n    for (const block of response.content) {\n      if (block.type === \"tool_use\") {\n        try {\n          const toolCall = {\n            toolUseId: block.id || nanoid(),\n            name: block.name,\n            arguments: block.input || {},\n          };\n          toolCalls.push(toolCall);\n        } catch (error) {\n          this.error(\"Error parsing tool call arguments\", {\n            error,\n            block,\n          });\n        }\n      }\n    }\n\n    return toolCalls.length > 0 ? toolCalls : undefined;\n  }\n\n  /**\n   * Check if a message at a given index starts with tool_result blocks that don't have\n   * corresponding tool_use blocks in preceding messages. This prevents truncating\n   * conversations at points that would leave orphaned tool_result messages.\n   */\n  private messageStartsWithOrphanedToolResult(messages: any[], startIndex: number): boolean {\n    const message = messages[startIndex];\n    if (!message || !Array.isArray(message.content)) {\n      return false;\n    }\n\n    // Check if this message contains tool_result blocks\n    const toolResultIds = new Set<string>();\n    message.content.forEach((content: any) => {\n      if (content.type === \"tool_result\" && content.tool_use_id) {\n        toolResultIds.add(content.tool_use_id);\n      }\n    });\n\n    if (toolResultIds.size === 0) {\n      return false; // No tool_result blocks in this message\n    }\n\n    // Check if corresponding tool_use blocks exist in preceding messages (from startIndex onwards)\n    const toolUseIds = new Set<string>();\n    for (let i = startIndex; i < messages.length; i++) {\n      const msg = messages[i];\n      if (Array.isArray(msg.content)) {\n        msg.content.forEach((content: any) => {\n          if (content.type === \"tool_use\" && content.id) {\n            toolUseIds.add(content.id);\n          }\n        });\n      }\n    }\n\n    // Check if any tool_result IDs don't have corresponding tool_use IDs\n    for (const toolResultId of toolResultIds) {\n      if (!toolUseIds.has(toolResultId)) {\n        console.log(\"🚫 [Safe Truncation] Found orphaned tool_result at index\", startIndex, \":\", {\n          orphanedId: toolResultId,\n          availableToolUseIds: Array.from(toolUseIds),\n          messageRole: message.role,\n          contentTypes: message.content.map((c: any) => c.type)\n        });\n        return true; // Found an orphaned tool_result\n      }\n    }\n\n    return false; // All tool_result blocks have corresponding tool_use blocks\n  }\n}\n","/**\n * Implement a class that represents a Google Gemini AI client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\nimport { type GenerateContentResponse, GoogleGenAI } from \"@google/genai\";\nimport { nanoid } from \"nanoid\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, type MessageRole, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n// MessageProcessingUtils imported but not used - keeping for future implementation\n// import { MessageProcessingUtils } from \"../message-processing\";\n\n// Re-export Type for use in other files\nexport { Type } from \"@google/genai\";\n\n/**\n * Available Gemini model options\n */\nexport type GeminiModel =\n  // Gemini 2.5 models\n  | \"gemini-2.5-flash\"\n  | \"gemini-2.5-pro-exp-03-25\"\n\n  // Gemini 2.0 models\n  | \"gemini-2.0-flash-lite\"\n  | \"gemini-2.0-flash-thinking-exp-01-21\"\n\n  // Gemini 1.5 models\n  | \"gemini-1.5-flash\"\n  | \"gemini-1.5-pro\"\n\n  // Gemini 1.0 models\n  | \"gemini-1.0-pro\";\n\n/**\n * Schema for structured output\n */\nexport interface GeminiResponseSchema {\n  type: \"string\" | \"integer\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n  format?: string;\n  description?: string;\n  nullable?: boolean;\n  enum?: string[];\n  maxItems?: string;\n  minItems?: string;\n  properties?: Record<string, GeminiResponseSchema>;\n  required?: string[];\n  propertyOrdering?: string[];\n  items?: GeminiResponseSchema;\n}\n\nconst DEFAULT_MODEL: GeminiModel = \"gemini-2.5-flash\";\nconst MAX_PROMPT_CHARACTERS = 320_000;\n\ninterface GeminiConfig {\n  model?: GeminiModel | string;\n  temperature?: number;\n  maxTokens?: number;\n  apiKey?: string;\n  cache?: boolean;\n  /**\n   * Whether to enable tracing\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Schema for structured output\n   */\n  responseSchema?: GeminiResponseSchema;\n}\n\nexport class GeminiThreadDriver extends BaseModelDriver {\n  private readonly genAI: GoogleGenAI;\n  private readonly model: GeminiModel | string;\n  private readonly temperature: number;\n  private readonly maxTokens: number;\n  private readonly cache: boolean;\n  private readonly responseSchema?: GeminiResponseSchema;\n\n  /**\n   * Get list of available model names for easy reference\n   */\n  public static getAvailableModels(): GeminiModel[] {\n    return [\n      // Gemini 2.5 models\n      \"gemini-2.5-flash\",\n      \"gemini-2.5-pro-exp-03-25\",\n\n      // Gemini 2.0 models\n      \"gemini-2.0-flash-lite\",\n      \"gemini-2.0-flash-thinking-exp-01-21\",\n\n      // Gemini 1.5 models\n      \"gemini-1.5-flash\",\n      \"gemini-1.5-pro\",\n\n      // Gemini 1.0 models\n      \"gemini-1.0-pro\",\n    ];\n  }\n\n  constructor(config: GeminiConfig = {}) {\n    super();\n\n    // Check for required API key if not provided in config\n    const apiKey = config.apiKey || process.env.GOOGLE_API_KEY;\n\n    if (!apiKey) {\n      throw new Error(\n        \"Google API Key must be provided in config or as GOOGLE_API_KEY environment variable\",\n      );\n    }\n\n    // Create a base client\n    const baseClient = new GoogleGenAI({ apiKey });\n\n    // Only wrap with tracing if trace is enabled (default to false)\n    if (config.trace ?? false) {\n      // Create a proxy around the Google GenAI client to intercept API calls\n      this.genAI = new Proxy(baseClient, {\n        get: (target, prop, receiver) => {\n          const value = Reflect.get(target, prop, receiver);\n\n          // Handle nested properties (models.generateContent)\n          if (prop === \"models\" && value && typeof value === \"object\") {\n            return new Proxy(value, {\n              get: (modelsTarget, modelsProp, modelsReceiver) => {\n                const modelsValue = Reflect.get(modelsTarget, modelsProp, modelsReceiver);\n\n                // Wrap the generateContent method with tracing\n                if (modelsProp === \"generateContent\" && typeof modelsValue === \"function\") {\n                  return traceable(modelsValue.bind(modelsTarget), {\n                    run_type: \"llm\",\n                    name: \"gemini\",\n                    ...config.traceMetadata,\n                    aggregator: (args: any[], result: any) => {\n                      // Extract relevant data for tracing\n                      const params = args[0] || {};\n\n                      // Return metrics and data\n                      return {\n                        model: params.model,\n                        input: {\n                          contents: params.contents,\n                          temperature: params.generationConfig?.temperature,\n                          max_tokens: params.generationConfig?.maxOutputTokens,\n                          tools: params.tools ? params.tools.functionDeclarations?.length || 0 : 0,\n                        },\n                        output: result.candidates?.[0]?.content,\n                        metrics: result.usageMetadata\n                          ? {\n                              prompt_tokens: result.usageMetadata.promptTokenCount,\n                              completion_tokens: result.usageMetadata.candidatesTokenCount,\n                              total_tokens:\n                                (result.usageMetadata.promptTokenCount || 0) +\n                                (result.usageMetadata.candidatesTokenCount || 0),\n                            }\n                          : undefined,\n                        finish_reason: result.candidates?.[0]?.finishReason,\n                      };\n                    },\n                  });\n                }\n\n                // Wrap the generateContentStream method with tracing\n                if (modelsProp === \"generateContentStream\" && typeof modelsValue === \"function\") {\n                  return traceable(modelsValue.bind(modelsTarget), {\n                    run_type: \"llm\",\n                    name: \"gemini\",\n                    ...config.traceMetadata,\n                    aggregator: (args: any[], _result: any) => {\n                      // Extract relevant data for tracing\n                      const params = args[0] || {};\n\n                      // For streaming responses, we only log the input\n                      return {\n                        model: params.model,\n                        input: {\n                          contents: params.contents,\n                          temperature: params.generationConfig?.temperature,\n                          max_tokens: params.generationConfig?.maxOutputTokens,\n                          tools: params.tools ? params.tools.functionDeclarations?.length || 0 : 0,\n                        },\n                        streaming: true,\n                      };\n                    },\n                  });\n                }\n\n                return modelsValue;\n              },\n            });\n          }\n\n          return value;\n        },\n      });\n    } else {\n      this.genAI = baseClient;\n    }\n\n    this.model = config.model || DEFAULT_MODEL;\n    this.temperature = config.temperature || 0.7;\n    this.maxTokens = config.maxTokens || 4096;\n    this.cache = config.cache || false;\n    this.responseSchema = config.responseSchema;\n  }\n\n  /**\n   * Convert messages to Gemini API format\n   */\n  private convertMessagesToGeminiFormat(messages: Message[]): {\n    contents: any[];\n    system?: string;\n  } {\n    const contents: any[] = [];\n    let system: string | undefined;\n\n    messages.forEach((message) => {\n      // Handle system messages separately\n      if (message.role === \"system\") {\n        system = message.content || \"\";\n        return;\n      }\n\n      // Skip tool messages, as they're represented as tool responses\n      if (message.role === \"tool\") {\n        return;\n      }\n\n      const parts: any[] = [];\n\n      // Add text content if present\n      if (message.content) {\n        parts.push({\n          text: message.content,\n        });\n      }\n\n      // Add attachment content if present\n      if (message.attachments && message.attachments.length > 0) {\n        for (const attachment of message.attachments) {\n          if (attachment.type === \"image\" && attachment.source.uri) {\n            parts.push({\n              inlineData: {\n                mimeType: `image/${attachment.format}`,\n                data: attachment.source.uri,\n              },\n            });\n          }\n          // Other attachment types can be handled here\n        }\n      }\n\n      // Map roles from our system to Gemini API\n      const role = message.role === \"assistant\" ? \"model\" : \"user\";\n\n      // Handle tool calls for the assistant\n      if (message.toolCalls && message.toolCalls.length > 0 && role === \"model\") {\n        for (const toolCall of message.toolCalls) {\n          parts.push({\n            functionCall: {\n              name: toolCall.name,\n              args: toolCall.arguments,\n            },\n          });\n        }\n      }\n\n      // Handle tool results for the user\n      if (message.toolResults && message.toolResults.length > 0 && role === \"user\") {\n        for (const toolResult of message.toolResults) {\n          parts.push({\n            functionResponse: {\n              name: toolResult.name,\n              response: {\n                name: toolResult.name,\n                content: toolResult.result,\n              },\n            },\n          });\n        }\n      }\n\n      // Only add the message if it has parts\n      if (parts.length > 0) {\n        contents.push({\n          role,\n          parts,\n        });\n      }\n    });\n\n    return {\n      contents,\n      system,\n    };\n  }\n\n  /**\n   * Parse tool calls from the Gemini API response\n   */\n  private parseToolCalls(parts: any[]): ToolCall[] {\n    const toolCalls: ToolCall[] = [];\n\n    if (parts) {\n      for (const part of parts) {\n        if (part.functionCall && typeof part.functionCall.name === \"string\") {\n          toolCalls.push({\n            name: part.functionCall.name,\n            toolUseId: nanoid(15),\n            arguments: part.functionCall.args || {},\n          });\n        }\n      }\n    }\n\n    return toolCalls;\n  }\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for Gemini API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    // For now, just return the messages as-is since Gemini formatting is complex\n    // This will need proper implementation based on Gemini's requirements\n    return messages.map((m) => ({\n      role: m.role === \"assistant\" ? \"model\" : \"user\",\n      content: m.content || \"\",\n      // Additional Gemini-specific formatting would go here\n    }));\n  }\n\n  /**\n   * Validate conversation and apply auto-repairs for Gemini API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    _context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    // Basic validation for Gemini\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n\n    // Add basic Gemini validations here\n    return {\n      isValid: errors.length === 0,\n      messages: formattedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Send processed messages to Gemini API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    // Delegate to the existing sendThread implementation for now\n    return this.sendThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Stream processed messages to Gemini API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Delegate to the existing streamThread implementation for now\n    return yield* this.streamThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Send the thread state to the LLM and process the response\n   */\n  public override async sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    // Use the new message processing pipeline\n    return super.sendThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy send thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async sendThreadLegacy(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    const messages = thread.all();\n    if (messages.length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    const totalContent = messages.map((m) => m.content || \"\").join(\"\\n\");\n    if (totalContent.length > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\"The thread content is too long\");\n    }\n\n    try {\n      const { contents, system } = this.convertMessagesToGeminiFormat(messages);\n\n      const tools = thread.getTools();\n      const functionDeclarations = tools.length > 0 ? this.createToolConfig(tools) : undefined;\n\n      // Create the configuration object with proper typing\n      const generateContentConfig: any = {\n        contents,\n        generationConfig: {\n          temperature: this.temperature,\n          maxOutputTokens: this.maxTokens,\n          topP: 0.95,\n        },\n        safetySettings: [\n          {\n            category: \"HARM_CATEGORY_HARASSMENT\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n          {\n            category: \"HARM_CATEGORY_HATE_SPEECH\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n          {\n            category: \"HARM_CATEGORY_SEXUALLY_EXPLICIT\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n          {\n            category: \"HARM_CATEGORY_DANGEROUS_CONTENT\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n        ],\n      };\n\n      // Add tools and tool config if present\n      if (functionDeclarations) {\n        generateContentConfig.tools = {\n          functionDeclarations,\n        };\n        generateContentConfig.toolConfig = {\n          toolChoice: thread.toolChoice === \"any\" ? \"any\" : \"auto\",\n        };\n      }\n\n      // Add structured output configuration if responseSchema is defined\n      if (this.responseSchema) {\n        generateContentConfig.responseMimeType = \"application/json\";\n        generateContentConfig.responseSchema = this.responseSchema;\n      }\n\n      // Use the models property to generate content\n      const contentParams: any = {\n        model: this.model,\n        ...generateContentConfig,\n      };\n\n      // Add system parameter directly to the params object\n      if (system) {\n        contentParams.system = system!;\n      }\n\n      const result = await this.genAI.models.generateContent(contentParams);\n\n      if (!result.candidates || result.candidates.length === 0) {\n        throw new Error(\"No response received from Gemini API\");\n      }\n\n      const candidate = result.candidates[0];\n      if (!candidate || !candidate.content) {\n        throw new Error(\"Invalid candidate response from Gemini API\");\n      }\n\n      const content = candidate.content;\n\n      // Get the text content\n      let responseText = \"\";\n      if (content.parts) {\n        for (const part of content.parts) {\n          if (part.text) {\n            responseText += part.text;\n          }\n        }\n      }\n\n      // Get tool calls\n      const toolCalls = this.parseToolCalls(content.parts || []);\n\n      const responseMessage = new Message({\n        content: responseText,\n        role: \"assistant\" as MessageRole,\n        toolCalls: toolCalls,\n        cache: this.cache,\n      });\n\n      thread.push(responseMessage);\n\n      // Log usage metrics if available\n      if (result.usageMetadata) {\n        const inputTokens = result.usageMetadata.promptTokenCount || 0;\n        const outputTokens = result.usageMetadata.candidatesTokenCount || 0;\n\n        this.debug(\"Gemini API usage metrics\", {\n          inputTokens,\n          outputTokens,\n          totalTokens: inputTokens + outputTokens,\n        });\n      }\n\n      return thread;\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n      this.error(`Failed to send thread: ${errorMessage} (thread length: ${thread.all().length})`);\n      throw error;\n    }\n  }\n\n  /**\n   * Create tool config for Gemini API\n   */\n  private createToolConfig(tools: any[]): any[] {\n    return tools.map((tool) => ({\n      name: tool.getName(),\n      description: tool.getDescription(),\n      parameters: zodToJsonSchema(tool.getParameters()),\n    }));\n  }\n\n  /**\n   * Stream the thread state to the LLM and process the response chunk by chunk\n   */\n  public override async *streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Use the new message processing pipeline\n    return yield* super.streamThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy stream thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async *streamThreadLegacy(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    const messages = thread.all();\n    if (messages.length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    const totalContent = messages.map((m) => m.content || \"\").join(\"\\n\");\n    if (totalContent.length > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\"The thread content is too long\");\n    }\n\n    try {\n      const { contents, system } = this.convertMessagesToGeminiFormat(messages);\n\n      const tools = thread.getTools();\n      const functionDeclarations = tools.length > 0 ? this.createToolConfig(tools) : undefined;\n\n      const initialMessage = new Message({\n        content: \"\",\n        role: \"assistant\",\n        toolCalls: [],\n        cache: this.cache,\n      });\n\n      // Create the configuration object with proper typing\n      const generateContentConfig: any = {\n        contents,\n        generationConfig: {\n          temperature: this.temperature,\n          maxOutputTokens: this.maxTokens,\n          topP: 0.95,\n        },\n        safetySettings: [\n          {\n            category: \"HARM_CATEGORY_HARASSMENT\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n          {\n            category: \"HARM_CATEGORY_HATE_SPEECH\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n          {\n            category: \"HARM_CATEGORY_SEXUALLY_EXPLICIT\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n          {\n            category: \"HARM_CATEGORY_DANGEROUS_CONTENT\",\n            threshold: \"BLOCK_ONLY_HIGH\",\n          },\n        ],\n      };\n\n      // Add tools and tool config if present\n      if (functionDeclarations) {\n        generateContentConfig.tools = {\n          functionDeclarations,\n        };\n        generateContentConfig.toolConfig = {\n          toolChoice: thread.toolChoice === \"any\" ? \"any\" : \"auto\",\n        };\n      }\n\n      // Add structured output configuration if responseSchema is defined\n      // Note: Structured output may not work well with streaming\n      if (this.responseSchema) {\n        generateContentConfig.responseMimeType = \"application/json\";\n        generateContentConfig.responseSchema = this.responseSchema;\n      }\n\n      // Use the models property to generate content\n      const contentParams: any = {\n        model: this.model,\n        ...generateContentConfig,\n      };\n\n      // Add system parameter directly to the params object\n      if (system) {\n        contentParams.system = system!;\n      }\n\n      const streamingResponse = await this.genAI.models.generateContentStream(contentParams);\n\n      const stream = this.createStreamProcessor(streamingResponse, initialMessage);\n      yield { stream, message: initialMessage };\n\n      thread.push(initialMessage);\n      return thread;\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n      this.error(\n        `Failed to stream thread: ${errorMessage} (thread length: ${thread.all().length})`,\n      );\n      throw error;\n    }\n  }\n\n  /**\n   * Create a stream processor for handling Gemini API streaming responses\n   */\n  private async *createStreamProcessor(\n    streamingResponse: AsyncGenerator<GenerateContentResponse>,\n    initialMessage: Message,\n  ): AsyncGenerator<string, void> {\n    let accumulatedText = \"\";\n    const toolCalls: ToolCall[] = [];\n\n    for await (const chunk of streamingResponse) {\n      // Check if there's content in the result\n      if (!chunk.candidates?.[0]?.content?.parts) continue;\n\n      const parts = chunk.candidates[0].content.parts || [];\n\n      // Process text chunks\n      for (const part of parts) {\n        if (part.text) {\n          const newText = part.text;\n\n          // Only yield if there's new text\n          if (newText && !accumulatedText.endsWith(newText)) {\n            accumulatedText += newText;\n\n            // Update the message content\n            (initialMessage as any)._content = accumulatedText;\n\n            yield newText;\n          }\n        }\n\n        // Store function calls (tool calls) for later processing\n        if (part.functionCall && typeof part.functionCall.name === \"string\") {\n          toolCalls.push({\n            name: part.functionCall.name,\n            toolUseId: nanoid(15),\n            arguments: part.functionCall.args || {},\n          });\n\n          // Update tool calls in the message\n          (initialMessage as any)._toolCalls = toolCalls;\n        }\n      }\n    }\n  }\n}\n","/**\n * Implement a class that represents a Cerebras AI client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\nimport Cerebras from \"@cerebras/cerebras_cloud_sdk\";\nimport { nanoid } from \"nanoid\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport { createValidationError, createValidationWarning } from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport type { Tool } from \"../tool\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\n\n/**\n * Schema for structured output\n */\nexport interface CerebrasResponseSchema {\n  type: \"string\" | \"integer\" | \"number\" | \"boolean\" | \"array\" | \"object\";\n  format?: string;\n  description?: string;\n  nullable?: boolean;\n  enum?: string[];\n  maxItems?: string;\n  minItems?: string;\n  properties?: Record<string, CerebrasResponseSchema>;\n  required?: string[];\n  propertyOrdering?: string[];\n  items?: CerebrasResponseSchema;\n  additionalProperties?: boolean;\n  anyOf?: CerebrasResponseSchema[];\n}\n\n/**\n * Available Cerebras models\n */\nexport type CerebrasModel =\n  | \"llama-4-scout-17b-16e-instruct\" // Llama 4 Scout (109B parameters)\n  | \"llama3.1-8b\" // Llama 3.1 8B (8B parameters)\n  | \"llama-3.3-70b\" // Llama 3.3 70B (70B parameters)\n  | \"deepSeek-r1-distill-llama-70B\" // DeepSeek R1 Distill Llama 70B\n  | \"qwen-3-32b\"; // Qwen 3 32B\n\n/**\n * Configuration options for the Cerebras driver\n */\nexport interface CerebrasConfig {\n  /**\n   * Cerebras API Key\n   */\n  apiKey?: string;\n\n  /**\n   * Model to use\n   * @default \"llama3.1-8b\"\n   */\n  model?: CerebrasModel | string;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Enable tracing for this driver\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Disable parallel tool calls\n   * Some Cerebras models don't support parallel tool calls\n   * @default false\n   */\n  disableParallelToolCalls?: boolean;\n\n  /**\n   * Schema for structured output\n   */\n  responseSchema?: CerebrasResponseSchema;\n}\n\n/**\n * Response types for Cerebras API\n */\ninterface CerebrasToolCall {\n  id: string;\n  type: \"function\";\n  function: {\n    name: string;\n    arguments: string;\n  };\n  index?: number;\n}\n\ninterface CerebrasMessage {\n  role: string;\n  content: string;\n  tool_calls?: CerebrasToolCall[];\n}\n\ninterface CerebrasChoice {\n  message: CerebrasMessage;\n  index: number;\n  finish_reason: string;\n}\n\ninterface CerebrasStreamingChoice {\n  delta: {\n    content?: string;\n    tool_calls?: CerebrasToolCall[];\n  };\n  index: number;\n  finish_reason?: string;\n}\n\ninterface CerebrasUsage {\n  prompt_tokens: number;\n  completion_tokens: number;\n  total_tokens: number;\n}\n\ninterface CerebrasResponse {\n  id: string;\n  object: string;\n  created: number;\n  model: string;\n  choices: CerebrasChoice[];\n  usage: CerebrasUsage;\n}\n\ninterface CerebrasStreamingResponse {\n  id: string;\n  object: string;\n  created: number;\n  model: string;\n  choices: CerebrasStreamingChoice[];\n}\n\n/**\n * Represents a Cerebras AI client and provides tools for converting messages to/from the LLM\n */\nexport class CerebrasThreadDriver extends BaseModelDriver {\n  /**\n   * Cerebras API Client\n   */\n  private client: Cerebras;\n\n  /**\n   * Cerebras model to use\n   */\n  private model: CerebrasModel | string;\n\n  /**\n   * Temperature for response generation\n   */\n  private temperature: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  private maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   */\n  private cache: boolean;\n\n  /**\n   * Whether parallel tool calls are disabled\n   */\n  private disableParallelToolCalls: boolean;\n\n  /**\n   * Schema for structured output\n   */\n  private responseSchema?: CerebrasResponseSchema;\n\n  /**\n   * Returns a list of available Cerebras models\n   */\n  static getAvailableModels(): CerebrasModel[] {\n    return [\n      \"llama-4-scout-17b-16e-instruct\",\n      \"llama3.1-8b\",\n      \"llama-3.3-70b\",\n      \"deepSeek-r1-distill-llama-70B\",\n      \"qwen-3-32b\",\n      // Note: \"Llama 4 Maverick\" will be added when available\n    ];\n  }\n\n  /**\n   * Create a new Cerebras driver\n   * @param config Configuration options\n   */\n  constructor(config: CerebrasConfig = {}) {\n    super();\n\n    // Get API Key from config or environment variable\n    const apiKey = config.apiKey || process.env.CEREBRAS_API_KEY;\n    if (!apiKey) {\n      throw new Error(\n        \"Cerebras API Key must be provided in config or as CEREBRAS_API_KEY environment variable\",\n      );\n    }\n\n    // Create base client\n    const baseClient = new Cerebras({\n      apiKey,\n    });\n\n    // Only wrap with tracing if trace is enabled\n    if (config.trace ?? false) {\n      // Create a proxy around the Cerebras client to intercept API calls\n      this.client = new Proxy(baseClient, {\n        get: (target, prop, receiver) => {\n          const value = Reflect.get(target, prop, receiver);\n\n          // Handle nested properties for chat completions\n          if (prop === \"chat\" && value && typeof value === \"object\") {\n            return new Proxy(value, {\n              get: (chatTarget, chatProp, chatReceiver) => {\n                const chatValue = Reflect.get(chatTarget, chatProp, chatReceiver);\n\n                // Handle completions property\n                if (chatProp === \"completions\" && chatValue && typeof chatValue === \"object\") {\n                  return new Proxy(chatValue, {\n                    get: (completionsTarget, completionsProp, completionsReceiver) => {\n                      const completionsValue = Reflect.get(\n                        completionsTarget,\n                        completionsProp,\n                        completionsReceiver,\n                      );\n\n                      // Wrap the create method with tracing\n                      if (completionsProp === \"create\" && typeof completionsValue === \"function\") {\n                        return traceable(completionsValue.bind(completionsTarget), {\n                          run_type: \"llm\",\n                          name: \"cerebras\",\n                          ...config.traceMetadata,\n                          aggregator: (args: any[], result: any) => {\n                            // Extract the request parameters\n                            const params = args[0] || {};\n\n                            // For streaming responses\n                            if (params.stream) {\n                              return {\n                                model: params.model,\n                                input: {\n                                  messages: params.messages,\n                                  temperature: params.temperature,\n                                  max_tokens: params.max_tokens,\n                                  tools: params.tools ? params.tools.length : 0,\n                                },\n                                streaming: true,\n                              };\n                            }\n\n                            // For standard responses\n                            return {\n                              model: params.model,\n                              input: {\n                                messages: params.messages,\n                                temperature: params.temperature,\n                                max_tokens: params.max_tokens,\n                                tools: params.tools ? params.tools.length : 0,\n                              },\n                              output: result.choices?.[0]?.message?.content,\n                              metrics: result.usage\n                                ? {\n                                    prompt_tokens: result.usage.prompt_tokens,\n                                    completion_tokens: result.usage.completion_tokens,\n                                    total_tokens: result.usage.total_tokens,\n                                  }\n                                : undefined,\n                              finish_reason: result.choices?.[0]?.finish_reason,\n                            };\n                          },\n                        });\n                      }\n\n                      return completionsValue;\n                    },\n                  });\n                }\n\n                return chatValue;\n              },\n            });\n          }\n\n          return value;\n        },\n      });\n    } else {\n      this.client = baseClient;\n    }\n\n    // Set configuration options\n    this.model = config.model || \"llama3.1-8b\";\n    this.temperature = config.temperature ?? 0.7;\n    this.maxTokens = config.maxTokens;\n    this.cache = config.cache ?? false;\n    this.disableParallelToolCalls = config.disableParallelToolCalls ?? false;\n    this.responseSchema = config.responseSchema;\n  }\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for Cerebras API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    const formattedMessages: any[] = [];\n\n    for (const message of messages) {\n      // Process attachments if they exist\n      if (message.attachments && message.attachments.length > 0) {\n        const contentParts: any[] = [];\n\n        // Add text content if it exists\n        if (message.content) {\n          contentParts.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add each attachment\n        for (const attachment of message.attachments) {\n          if (attachment.type === \"image\" && attachment.source.uri) {\n            contentParts.push({\n              type: \"image_url\",\n              image_url: {\n                url: attachment.source.uri,\n                detail: \"auto\",\n              },\n            });\n          }\n        }\n\n        // Cerebras has similar typing requirements as OpenAI for different roles\n        if (message.role === \"user\") {\n          formattedMessages.push({\n            role: \"user\",\n            content: contentParts,\n          });\n        } else if (message.role === \"assistant\") {\n          formattedMessages.push({\n            role: \"assistant\",\n            content: contentParts,\n          });\n        } else if (message.role === \"system\") {\n          formattedMessages.push({\n            role: \"system\",\n            content: contentParts,\n          });\n        }\n        continue;\n      }\n\n      // Handle tool results (these are created from user messages with toolResults)\n      if (message.toolResults && message.toolResults.length > 0) {\n        // First add the user message if it has content\n        if (message.content) {\n          formattedMessages.push({\n            role: \"user\",\n            content: message.content,\n          });\n        }\n\n        // Then add each tool result as a separate message\n        for (const toolResult of message.toolResults) {\n          formattedMessages.push({\n            role: \"tool\",\n            tool_call_id: toolResult.toolUseId,\n            content: JSON.stringify(toolResult.result),\n          });\n        }\n        continue;\n      }\n\n      // Handle tool calls in assistant messages\n      if (message.role === \"assistant\" && message.toolCalls && message.toolCalls.length > 0) {\n        const toolCalls = message.toolCalls.map((call) => ({\n          id: call.toolUseId,\n          type: \"function\" as const,\n          function: {\n            name: call.name,\n            arguments: JSON.stringify(call.arguments),\n          },\n        }));\n\n        formattedMessages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n          tool_calls: toolCalls,\n        });\n        continue;\n      }\n\n      // Default case for simple messages\n      if (message.role === \"user\") {\n        formattedMessages.push({\n          role: \"user\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"assistant\") {\n        formattedMessages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"system\") {\n        formattedMessages.push({\n          role: \"system\",\n          content: message.content || \"\",\n        });\n      }\n    }\n\n    return formattedMessages;\n  }\n\n  /**\n   * Validate conversation and apply auto-repairs for Cerebras API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n    const processedMessages = [...formattedMessages];\n\n    // 1. Basic Cerebras API validations\n    for (let i = 0; i < processedMessages.length; i++) {\n      const message = processedMessages[i];\n\n      // Cerebras requires content for all message types\n      if (!message.content && !message.tool_calls) {\n        if (context.enableAutoRepair) {\n          message.content = message.role === \"user\" ? \"Continue\" : \"\";\n          repairsApplied.push(\n            `Added minimal content to empty ${message.role} message at index ${i}`,\n          );\n          warnings.push(\n            createValidationWarning(\n              \"cerebras_empty_content_repaired\",\n              `Empty ${message.role} message was given minimal content`,\n              { index: i },\n            ),\n          );\n        } else {\n          errors.push(\n            createValidationError(\n              \"cerebras_empty_content\",\n              `${message.role} message has empty content`,\n              { index: i, severity: \"error\" },\n            ),\n          );\n        }\n      }\n\n      // Check for tool message validation\n      if (message.role === \"tool\" && !message.tool_call_id) {\n        errors.push(\n          createValidationError(\n            \"cerebras_missing_tool_call_id\",\n            \"Tool message missing tool_call_id\",\n            { index: i, severity: \"error\" },\n          ),\n        );\n      }\n    }\n\n    // 2. Check tool call/result pairing\n    if (!context.allowPartialConversations) {\n      const toolCallStack: Array<{ id: string; index: number; name: string }> = [];\n\n      for (let i = 0; i < processedMessages.length; i++) {\n        const message = processedMessages[i];\n\n        // Track tool calls\n        if (message.role === \"assistant\" && message.tool_calls) {\n          for (const toolCall of message.tool_calls) {\n            toolCallStack.push({\n              id: toolCall.id,\n              index: i,\n              name: toolCall.function.name,\n            });\n          }\n        }\n\n        // Match tool results\n        if (message.role === \"tool\") {\n          const callIndex = toolCallStack.findIndex((call) => call.id === message.tool_call_id);\n          if (callIndex >= 0) {\n            toolCallStack.splice(callIndex, 1);\n          } else {\n            warnings.push(\n              createValidationWarning(\n                \"cerebras_orphaned_tool_result\",\n                `Tool result without matching call: ${message.tool_call_id}`,\n                { index: i },\n              ),\n            );\n          }\n        }\n      }\n\n      // Handle unmatched tool calls\n      for (const unmatchedCall of toolCallStack) {\n        if (context.enableAutoRepair) {\n          processedMessages.push({\n            role: \"tool\",\n            tool_call_id: unmatchedCall.id,\n            content: JSON.stringify({\n              error: \"Tool result not provided\",\n              tool_name: unmatchedCall.name,\n            }),\n          });\n          repairsApplied.push(\n            `Added placeholder result for unmatched tool call ${unmatchedCall.name}`,\n          );\n          warnings.push(\n            createValidationWarning(\n              \"cerebras_unmatched_tool_call_repaired\",\n              `Added placeholder result for tool call: ${unmatchedCall.name}`,\n              { index: unmatchedCall.index },\n            ),\n          );\n        } else {\n          errors.push(\n            createValidationError(\n              \"cerebras_unmatched_tool_call\",\n              `Tool call without result: ${unmatchedCall.name}`,\n              { index: unmatchedCall.index, severity: \"error\" },\n            ),\n          );\n        }\n      }\n    }\n\n    // 3. Check for Cerebras-specific model limitations\n    const availableModels = CerebrasThreadDriver.getAvailableModels();\n    if (!availableModels.includes(this.model as CerebrasModel)) {\n      warnings.push(\n        createValidationWarning(\"cerebras_unknown_model\", `Unknown Cerebras model: ${this.model}`, {\n          context: { availableModels },\n        }),\n      );\n    }\n\n    return {\n      isValid: errors.length === 0,\n      messages: processedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  // ==================== UPDATED THREAD METHODS ====================\n\n  /**\n   * Send processed messages to Cerebras API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    // this.debug(\"Sending message to Cerebras API\", { model: this.model });\n\n    // Use the processed messages from the processing pipeline\n    const messages = processingResult.messages;\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (typeof msg.content === \"string\" ? msg.content.length : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    try {\n      // Create parameters for the API call\n      const params: any = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n      };\n\n      // Add max tokens if specified\n      if (this.maxTokens) {\n        params.max_tokens = this.maxTokens;\n      }\n\n      // Add structured output if responseSchema is defined\n      if (this.responseSchema) {\n        console.log(\"🔍 [Cerebras Debug] Original responseSchema:\", JSON.stringify(this.responseSchema, null, 2));\n        \n        // Clean the response schema for Cerebras API compatibility\n        const cleanedSchema = this.cleanResponseSchemaForCerebras(this.responseSchema);\n        \n        console.log(\"🔍 [Cerebras Debug] Cleaned schema:\", JSON.stringify(cleanedSchema, null, 2));\n        \n        // Final validation - ensure schema is valid for Cerebras\n        if (this.validateSchemaForCerebras(cleanedSchema)) {\n          try {\n            params.response_format = {\n              type: \"json_schema\",\n              json_schema: {\n                name: \"response\",\n                strict: true,\n                schema: cleanedSchema,\n              },\n            };\n            \n            console.log(\"🔍 [Cerebras Debug] Final response_format:\", JSON.stringify(params.response_format, null, 2));\n          } catch (error) {\n            console.log(\"🚫 [Cerebras Debug] Error creating response_format:\", error);\n          }\n        } else {\n          // Schema validation failed, skip structured output for this request\n          console.log(\"🚫 [Cerebras Debug] Schema validation failed, skipping response_format\");\n        }\n      }\n\n      // Add tools if there are any in the thread\n      const tools = thread.getTools();\n      if (tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n\n        // Handle tool choice based on parallel tool call setting\n        if (this.disableParallelToolCalls) {\n          params.parallel_tool_calls = false; // Forces model to use exactly one tool\n          params.tool_choice = \"auto\";\n        } else {\n          params.tool_choice = \"auto\"; // Default behavior\n        }\n      }\n\n      // Declare response variable outside try block so it's accessible in the outer scope\n      let response: CerebrasResponse | undefined;\n\n      try {\n        // Make the API call\n        response = (await this.client.chat.completions.create(params)) as CerebrasResponse;\n\n        // Get the last choice from the response\n        const lastChoice = response.choices[0];\n        if (!lastChoice) {\n          throw new Error(\"No response from Cerebras API\");\n        }\n\n        const choice = lastChoice.message;\n        if (!choice) {\n          throw new Error(\"Empty response from Cerebras API\");\n        }\n\n        // Handle structured output response\n        let content = choice.content || \"\";\n        \n        console.log(\"🔍 [Cerebras Debug] Raw response content:\", content);\n        \n        // If we used structured output, validate and potentially repair the response\n        if (this.responseSchema && content) {\n          try {\n            const parsed = JSON.parse(content);\n            console.log(\"🔍 [Cerebras Debug] Parsed response:\", JSON.stringify(parsed, null, 2));\n            \n            // If it's missing required fields, add defaults based on common schemas\n            if (parsed && typeof parsed === 'object') {\n              const schemaProperties = this.responseSchema.properties || {};\n              \n              // Add missing shouldUpdate field if not present (common field in many schemas)\n              if ('shouldUpdate' in schemaProperties && !('shouldUpdate' in parsed)) {\n                parsed.shouldUpdate = false;\n                console.log(\"🔧 [Cerebras Debug] Added missing shouldUpdate field\");\n              }\n              \n              // Ensure opportunities array exists if schema expects it\n              if ('opportunities' in schemaProperties && !('opportunities' in parsed)) {\n                parsed.opportunities = [];\n                console.log(\"🔧 [Cerebras Debug] Added missing opportunities array\");\n              }\n              \n              content = JSON.stringify(parsed);\n            }\n          } catch (error) {\n            // If parsing fails, keep original content\n            console.log(\"🔍 [Cerebras Debug] Failed to parse response:\", error);\n          }\n        }\n\n        // Create a new message from the response\n        const message = new Message({\n          role: \"assistant\",\n          content,\n          toolCalls:\n            this.parseToolCalls(choice.tool_calls) ||\n            this.parseEmbeddedToolCalls(content),\n          cache: this.cache,\n        });\n\n        // Add the message to the thread\n        thread.push(message);\n      } catch (error: any) {\n        // Check if this is a tool call error with failed_generation information\n        if (\n          error?.error?.code === \"tool_use_failed\" &&\n          error?.error?.failed_generation &&\n          tools &&\n          tools.length > 0\n        ) {\n          this.debug(\"Handling tool call error with failed_generation\", {\n            failed_generation: error.error.failed_generation,\n          });\n\n          try {\n            // Parse the failed_generation field which contains the tool call info\n            const failedGeneration = JSON.parse(error.error.failed_generation);\n\n            // Check if the failed generation has the expected format\n            if (\n              failedGeneration.name &&\n              (failedGeneration.parameters || failedGeneration.arguments)\n            ) {\n              const toolName = failedGeneration.name;\n              const toolArgs = failedGeneration.parameters || failedGeneration.arguments;\n\n              // Find the matching tool\n              const matchingTool = tools.find((t) => t.getName() === toolName);\n\n              if (matchingTool) {\n                // Instead of creating a tool call message that would trigger automatic execution,\n                // we'll manually execute the tool and create a message with both the tool call and result\n\n                // Generate a unique tool use ID\n                const toolUseId = nanoid();\n\n                try {\n                  // Execute the tool directly\n                  this.debug(`Manually executing tool ${toolName}`, toolArgs);\n                  // Create a tool call object\n                  const toolCall = {\n                    toolUseId,\n                    name: toolName,\n                    arguments: toolArgs,\n                  };\n                  const toolResult = await matchingTool.executeTool(toolArgs, toolCall);\n\n                  // Extract the result from the toolResult object\n                  const result = toolResult.success ? toolResult.result : null;\n\n                  // Create a descriptive content based on the tool and result\n                  let content = `I'll help with that using the ${toolName} tool.\\n\\n`;\n\n                  // Generic result formatting for all tools\n                  if (result !== null) {\n                    // Format differently based on result type\n                    if (typeof result === \"object\") {\n                      content += `Here's the result: ${JSON.stringify(result, null, 2)}`;\n                    } else {\n                      content += `The result is: ${result}`;\n                    }\n                  } else if (toolResult.error) {\n                    content += `There was an error executing the tool: ${toolResult.error}`;\n                  }\n\n                  // Create first message that would normally come from the assistant\n                  const assistantMessage = new Message({\n                    role: \"assistant\",\n                    content: `I'll help with that using the ${toolName} tool.`,\n                    toolCalls: [\n                      {\n                        toolUseId,\n                        name: toolName,\n                        arguments: toolArgs,\n                      },\n                    ],\n                    cache: this.cache,\n                  });\n\n                  // Create second message that would normally come from the user with tool results\n                  const toolResultMessage = new Message({\n                    role: \"user\",\n                    content: \"\",\n                    toolResults: [\n                      {\n                        toolUseId,\n                        name: toolName,\n                        result: result,\n                      },\n                    ],\n                    cache: this.cache,\n                  });\n\n                  // Create final assistant message with the formatted result\n                  const finalMessage = new Message({\n                    role: \"assistant\",\n                    content,\n                    cache: this.cache,\n                  });\n\n                  // Add the sequence of messages to the thread\n                  thread.push(assistantMessage);\n                  thread.push(toolResultMessage);\n                  thread.push(finalMessage);\n\n                  this.debug(\"Successfully executed tool and created result message\");\n\n                  // Log usage metrics if available\n                  if (error.error.usage) {\n                    const usage = error.error.usage;\n                    this.debug(\"Cerebras API usage metrics\", {\n                      inputTokens: usage.prompt_tokens,\n                      outputTokens: usage.completion_tokens || 0,\n                      totalTokens: usage.total_tokens || usage.prompt_tokens,\n                    });\n                  }\n\n                  return thread;\n                } catch (toolError) {\n                  this.error(`Error executing tool ${toolName}`, { toolError, toolArgs });\n                  throw toolError;\n                }\n              }\n            }\n          } catch (parsingError) {\n            this.error(\"Error parsing failed_generation\", {\n              parsingError,\n              failed_generation: error.error.failed_generation,\n            });\n            // Re-throw the original error if we can't parse the failed_generation\n            throw error;\n          }\n        }\n\n        // If we couldn't handle the error, re-throw it\n        throw error;\n      }\n\n      // Log usage metrics if available\n      if (response?.usage) {\n        const usage = response.usage as {\n          prompt_tokens: number;\n          completion_tokens: number;\n          total_tokens: number;\n        };\n\n        this.debug(\"Cerebras API usage metrics\", {\n          inputTokens: usage.prompt_tokens,\n          outputTokens: usage.completion_tokens,\n          totalTokens: usage.total_tokens,\n        });\n      }\n\n      return thread;\n    } catch (error) {\n      this.error(\"Error sending message to Cerebras API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Stream processed messages to Cerebras API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    this.debug(\"Streaming message to Cerebras API\", { model: this.model });\n\n    // Use the processed messages from the processing pipeline\n    const messages = processingResult.messages;\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (typeof msg.content === \"string\" ? msg.content.length : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    try {\n      // Create parameters for the API call\n      const params: any = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n        stream: true,\n      };\n\n      // Add max tokens if specified\n      if (this.maxTokens) {\n        params.max_tokens = this.maxTokens;\n      }\n\n      // Add structured output if responseSchema is defined\n      if (this.responseSchema) {\n        // Clean the response schema for Cerebras API compatibility\n        const cleanedSchema = this.cleanResponseSchemaForCerebras(this.responseSchema);\n        \n        // Final validation - ensure schema is valid for Cerebras\n        if (this.validateSchemaForCerebras(cleanedSchema)) {\n          params.response_format = {\n            type: \"json_schema\",\n            json_schema: {\n              name: \"response\",\n              strict: true,\n              schema: cleanedSchema,\n            },\n          };\n        } else {\n          // Schema validation failed, skip structured output for this request\n          this.debug(\"Schema validation failed, skipping response_format for Cerebras streaming compatibility\");\n        }\n      }\n\n      // Add tools if there are any in the thread\n      const tools = thread.getTools?.() || [];\n      if (tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n\n        // Handle tool choice based on parallel tool call setting\n        if (this.disableParallelToolCalls) {\n          params.parallel_tool_calls = false; // Forces model to use exactly one tool\n        } else {\n          params.tool_choice = \"auto\"; // Default behavior\n        }\n      }\n\n      // Create a new message to add to the thread\n      const message = new Message({\n        role: \"assistant\",\n        content: \"\",\n        cache: this.cache,\n      });\n\n      // Make the streaming API call\n      const streamResponse = await this.client.chat.completions.create({\n        ...params,\n        stream: true,\n      });\n\n      // Convert the response to a proper AsyncIterable\n      const stream = this.createAsyncIterableFromResponse(streamResponse);\n\n      // Create a streaming content generator\n      const streamContent = this.createStreamGenerator(stream, message);\n\n      // Yield the stream\n      yield { stream: streamContent, message };\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Return the updated thread\n      return thread;\n    } catch (error) {\n      this.error(\"Error streaming message to Cerebras API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create a stream generator that handles updates to the message\n   */\n  private async *createStreamGenerator(\n    stream: AsyncIterable<CerebrasStreamingResponse>,\n    message: Message,\n  ): AsyncGenerator<string, void> {\n    let toolCallsStarted = false;\n    let currentToolCalls: any[] = [];\n\n    try {\n      for await (const chunk of stream) {\n        const delta = chunk.choices[0]?.delta;\n\n        if (!delta) continue;\n\n        // Handle content updates\n        if (delta.content) {\n          // Create a new message with updated content\n          const updatedMessage = new Message({\n            role: \"assistant\",\n            content: (message.content || \"\") + delta.content,\n            toolCalls: message.toolCalls,\n            cache: this.cache,\n          });\n\n          // Copy the updated message properties\n          Object.assign(message, updatedMessage);\n\n          yield delta.content;\n        }\n\n        // Handle tool call updates\n        if (delta.tool_calls) {\n          if (!toolCallsStarted) {\n            // First tool call chunk\n            toolCallsStarted = true;\n            currentToolCalls = delta.tool_calls.map((call: any) => ({ ...call }));\n          } else {\n            // Subsequent tool call chunks - need to merge them\n            for (const toolCall of delta.tool_calls) {\n              const existingCall = currentToolCalls.find((c: any) => c.index === toolCall.index);\n\n              if (existingCall) {\n                // Update function content if provided\n                if (toolCall.function) {\n                  if (!existingCall.function) {\n                    existingCall.function = {};\n                  }\n\n                  if (toolCall.function.name && !existingCall.function.name) {\n                    existingCall.function.name = toolCall.function.name;\n                  }\n\n                  // Handle arguments field\n                  if (toolCall.function.arguments) {\n                    existingCall.function.arguments =\n                      (existingCall.function.arguments || \"\") + toolCall.function.arguments;\n                  }\n                  // Handle parameters field (if API is using that instead)\n                  else {\n                    // Use type assertion to safely access any potential parameters field\n                    const func = toolCall.function as any;\n                    if (func.parameters) {\n                      // Convert parameters to arguments field format\n                      const parameters =\n                        typeof func.parameters === \"string\"\n                          ? func.parameters\n                          : JSON.stringify(func.parameters);\n\n                      existingCall.function.arguments =\n                        (existingCall.function.arguments || \"\") + parameters;\n                    }\n                  }\n                }\n              } else {\n                // New tool call\n                currentToolCalls.push({ ...toolCall });\n              }\n            }\n          }\n        }\n      }\n\n      // Process the tool calls after the stream completes\n      if (currentToolCalls.length > 0) {\n        const parsedToolCalls = this.parseToolCalls(currentToolCalls);\n\n        // Create a new message with the tool calls\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: message.content || \"\",\n          toolCalls: parsedToolCalls,\n          cache: this.cache,\n        });\n\n        // Copy the updated message properties\n        Object.assign(message, updatedMessage);\n      } else {\n        // If no tool calls were found directly, check for embedded ones in content\n        const embeddedToolCalls = this.parseEmbeddedToolCalls(message.content || \"\");\n        if (embeddedToolCalls) {\n          // Update message with the embedded tool calls we found\n          const updatedMessage = new Message({\n            role: \"assistant\",\n            content: message.content || \"\",\n            toolCalls: embeddedToolCalls,\n            cache: this.cache,\n          });\n\n          // Copy the updated message properties\n          Object.assign(message, updatedMessage);\n        }\n      }\n    } catch (error) {\n      this.error(\"Error processing Cerebras stream\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create tool definitions for the Cerebras API\n   */\n  private createToolDefinitions(tools: Tool[]): any[] {\n    return tools.map((tool) => {\n      // Get the JSON schema and cast to any to access properties and required fields\n      const schema = zodToJsonSchema(tool.getParameters()) as any;\n\n      // Filter out unsupported schema fields for Cerebras\n      const cleanedProperties = this.cleanSchemaForCerebras(schema.properties || {});\n\n      return {\n        type: \"function\",\n        function: {\n          name: tool.getName(),\n          description: tool.getDescription(),\n          // Cerebras API has slightly different format expectations\n          parameters: {\n            type: \"object\",\n            properties: cleanedProperties,\n            required: schema.required || [],\n          },\n        },\n      };\n    });\n  }\n\n  /**\n   * Remove unsupported JSON schema fields for Cerebras API\n   * Cerebras doesn't support: minimum, maximum, and other advanced constraints\n   */\n  private cleanSchemaForCerebras(properties: Record<string, any>): Record<string, any> {\n    const cleaned: Record<string, any> = {};\n    \n    // List of unsupported fields to filter out\n    const unsupportedFields = new Set([\n      'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum',\n      'multipleOf', 'pattern', 'format', 'minLength', 'maxLength',\n      'minItems', 'maxItems', 'uniqueItems'\n    ]);\n    \n    for (const [key, value] of Object.entries(properties)) {\n      if (value && typeof value === 'object') {\n        const cleanedValue: Record<string, any> = {};\n        \n        // Copy only supported fields\n        for (const [propKey, propValue] of Object.entries(value)) {\n          if (!unsupportedFields.has(propKey)) {\n            cleanedValue[propKey] = propValue;\n          }\n        }\n        \n        // Recursively clean nested properties\n        if (cleanedValue.properties) {\n          cleanedValue.properties = this.cleanSchemaForCerebras(cleanedValue.properties);\n        }\n        \n        // Clean array items if present\n        if (cleanedValue.items && typeof cleanedValue.items === 'object') {\n          cleanedValue.items = this.cleanSchemaForCerebras({ temp: cleanedValue.items }).temp;\n        }\n        \n        cleaned[key] = cleanedValue;\n      } else {\n        cleaned[key] = value;\n      }\n    }\n    \n    return cleaned;\n  }\n\n  /**\n   * Clean response schema for Cerebras API compatibility\n   * Based on official Cerebras documentation requirements\n   */\n  private cleanResponseSchemaForCerebras(schema: CerebrasResponseSchema): CerebrasResponseSchema {\n    // Remove unsupported fields and clean recursively\n    const cleaned = this.removeUnsupportedFields(schema);\n    \n    // Handle anyOf with null types - convert to optional fields\n    if (cleaned.anyOf) {\n      const hasNullType = cleaned.anyOf.some((subSchema: any) => subSchema.type === \"null\");\n      const nonNullSchemas = cleaned.anyOf.filter((subSchema: any) => subSchema.type !== \"null\");\n      \n      if (hasNullType && nonNullSchemas.length === 1) {\n        // Replace anyOf with single schema (make field optional by not including in required)\n        return this.cleanResponseSchemaForCerebras(nonNullSchemas[0] as CerebrasResponseSchema);\n      } else if (nonNullSchemas.length > 1) {\n        // Keep anyOf but remove null types\n        cleaned.anyOf = nonNullSchemas.map((subSchema: any) => \n          this.cleanResponseSchemaForCerebras(subSchema as CerebrasResponseSchema)\n        );\n      } else if (hasNullType && nonNullSchemas.length === 0) {\n        // Only null type, convert to optional string\n        return { type: \"string\", description: \"Optional field\" };\n      }\n    }\n    \n    // Handle object schemas - ensure they follow Cerebras requirements\n    if (cleaned.type === \"object\") {\n      cleaned.additionalProperties = false;\n      \n      if (cleaned.properties) {\n        const cleanedProperties: Record<string, CerebrasResponseSchema> = {};\n        const originalRequired = cleaned.required || [];\n        \n        for (const [key, value] of Object.entries(cleaned.properties)) {\n          const cleanedValue = this.cleanResponseSchemaForCerebras(value as CerebrasResponseSchema);\n          cleanedProperties[key] = cleanedValue;\n        }\n        cleaned.properties = cleanedProperties;\n        \n        // Be more conservative with required fields - only keep truly required ones\n        const validRequiredFields = originalRequired.filter((field: string) => {\n          const fieldSchema = cleanedProperties[field];\n          // Only keep as required if field exists and doesn't allow null\n          return fieldSchema && !this.hasNullInAnyOf(schema.properties?.[field]);\n        });\n        \n        // If no required fields, make the first property required (Cerebras requirement)\n        if (validRequiredFields.length === 0 && Object.keys(cleanedProperties).length > 0) {\n          const firstProperty = Object.keys(cleanedProperties)[0];\n          cleaned.required = [firstProperty];\n        } else {\n          cleaned.required = validRequiredFields;\n        }\n      }\n      else if (!cleaned.anyOf) {\n        // No properties and no anyOf - create minimal valid schema\n        cleaned.properties = {\n          result: { type: \"string\", description: \"Response content\" }\n        };\n        cleaned.required = [\"result\"];\n      }\n    }\n    \n    // Handle array schemas\n    if (cleaned.type === \"array\" && cleaned.items) {\n      cleaned.items = this.cleanResponseSchemaForCerebras(cleaned.items);\n    }\n    \n    return cleaned;\n  }\n\n  /**\n   * Remove unsupported fields recursively\n   */\n  private removeUnsupportedFields(schema: any): any {\n    if (!schema || typeof schema !== 'object') return schema;\n    \n    const unsupportedFields = ['minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', \n                              'multipleOf', 'pattern', 'format', 'minLength', 'maxLength',\n                              'minItems', 'maxItems', 'uniqueItems', 'nullable', 'default', '$schema'];\n    \n    const cleaned: any = {};\n    \n    for (const [key, value] of Object.entries(schema)) {\n      if (!unsupportedFields.includes(key)) {\n        if (key === 'properties' && value && typeof value === 'object') {\n          cleaned[key] = {};\n          for (const [propKey, propValue] of Object.entries(value)) {\n            cleaned[key][propKey] = this.removeUnsupportedFields(propValue);\n          }\n        } else if (key === 'items' && value) {\n          cleaned[key] = this.removeUnsupportedFields(value);\n        } else if (key === 'anyOf' && Array.isArray(value)) {\n          cleaned[key] = value.map(item => this.removeUnsupportedFields(item));\n        } else {\n          cleaned[key] = value;\n        }\n      }\n    }\n    \n    return cleaned;\n  }\n\n  /**\n   * Check if a schema has null in anyOf\n   */\n  private hasNullInAnyOf(schema: any): boolean {\n    if (!schema || !schema.anyOf) return false;\n    return schema.anyOf.some((subSchema: any) => subSchema.type === \"null\");\n  }\n\n  /**\n   * Validate that a schema meets Cerebras API requirements\n   */\n  private validateSchemaForCerebras(schema: CerebrasResponseSchema): boolean {\n    try {\n      // Check if object types have properties or anyOf\n      if (schema.type === \"object\") {\n        if (!schema.properties && !schema.anyOf) {\n          console.log(\"🚫 [Schema Validation] Object schema missing properties and anyOf\");\n          return false;\n        }\n        \n        // If has properties, validate them\n        if (schema.properties) {\n          // Check that at least one field is marked as required\n          if (!schema.required || schema.required.length === 0) {\n            console.log(\"🚫 [Schema Validation] Object schema has no required fields\");\n            return false;\n          }\n          \n          // Recursively validate nested properties\n          for (const [key, value] of Object.entries(schema.properties)) {\n            if (!this.validateSchemaForCerebras(value)) {\n              console.log(`🚫 [Schema Validation] Invalid nested property: ${key}`);\n              return false;\n            }\n          }\n        }\n        \n        // Recursively validate anyOf schemas\n        if (schema.anyOf) {\n          for (const subSchema of schema.anyOf) {\n            if (!this.validateSchemaForCerebras(subSchema)) {\n              console.log(\"🚫 [Schema Validation] Invalid anyOf subschema\");\n              return false;\n            }\n          }\n        }\n      }\n      \n      // Validate array items\n      if (schema.type === \"array\" && schema.items) {\n        if (!this.validateSchemaForCerebras(schema.items)) {\n          console.log(\"🚫 [Schema Validation] Invalid array items schema\");\n          return false;\n        }\n      }\n      \n      // Check for unsupported fields\n      const unsupportedFields = ['minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum', \n                                'multipleOf', 'pattern', 'format', 'minLength', 'maxLength',\n                                'minItems', 'maxItems', 'uniqueItems', 'nullable', 'default'];\n      \n      for (const field of unsupportedFields) {\n        if (field in schema) {\n          console.log(`🚫 [Schema Validation] Unsupported field found: ${field}`);\n          return false;\n        }\n      }\n      \n      return true;\n    } catch (error) {\n      console.log(\"🚫 [Schema Validation] Error during validation:\", error);\n      return false;\n    }\n  }\n\n  /**\n   * Parse tool calls from the Cerebras API response\n   */\n  private parseToolCalls(toolCalls?: any[]): ToolCall[] | undefined {\n    if (!toolCalls || toolCalls.length === 0) {\n      return undefined;\n    }\n\n    return toolCalls.map((toolCall) => {\n      if (toolCall.type === \"function\" && toolCall.function.name) {\n        try {\n          let args = {};\n\n          // Handle various argument formats that Cerebras might return\n          if (toolCall.function.arguments) {\n            if (typeof toolCall.function.arguments === \"string\") {\n              // Try to parse JSON string\n              args = JSON.parse(toolCall.function.arguments);\n            } else if (typeof toolCall.function.arguments === \"object\") {\n              // Already an object\n              args = toolCall.function.arguments;\n            }\n          }\n\n          // Handle if the model might be returning in 'parameters' format\n          // instead of 'arguments' (based on the error we're seeing)\n          else if (toolCall.function.parameters) {\n            if (typeof toolCall.function.parameters === \"string\") {\n              args = JSON.parse(toolCall.function.parameters);\n            } else if (typeof toolCall.function.parameters === \"object\") {\n              args = toolCall.function.parameters;\n            }\n          }\n\n          return {\n            toolUseId: toolCall.id || nanoid(),\n            name: toolCall.function.name,\n            arguments: args,\n          };\n        } catch (error) {\n          this.error(\"Error parsing tool call arguments\", {\n            error,\n            toolCall,\n          });\n          return {\n            toolUseId: toolCall.id || nanoid(),\n            name: toolCall.function.name,\n            arguments: {},\n          };\n        }\n      }\n\n      this.error(\"Unknown tool call type\", { toolCall });\n      return {\n        toolUseId: toolCall.id || nanoid(),\n        name: toolCall.function?.name || \"unknown\",\n        arguments: {},\n      };\n    });\n  }\n\n  /**\n   * Convert a Cerebras streaming response to an AsyncIterable\n   */\n  private createAsyncIterableFromResponse(response: any): AsyncIterable<CerebrasStreamingResponse> {\n    // If response is already an AsyncIterable, return it\n    if (response[Symbol.asyncIterator]) {\n      return response as AsyncIterable<CerebrasStreamingResponse>;\n    }\n\n    // Otherwise, create an AsyncIterable that yields the response\n    return {\n      [Symbol.asyncIterator]: async function* () {\n        // If streaming is not properly supported, yield a synthetic response\n        yield {\n          id: typeof response.id === \"string\" ? response.id : \"stream-response\",\n          object: \"chat.completion.chunk\",\n          created: Date.now(),\n          model: typeof response.model === \"string\" ? response.model : \"unknown\",\n          choices: [\n            {\n              delta: {\n                content:\n                  typeof response.choices?.[0]?.message?.content === \"string\"\n                    ? response.choices[0].message.content\n                    : \"\",\n              },\n              index: 0,\n              finish_reason: \"stop\",\n            },\n          ],\n        } as CerebrasStreamingResponse;\n      },\n    };\n  }\n\n  /**\n   * Parse message content for embedded JSON tool calls\n   * This handles cases where the model returns tool calls as JSON directly in the message content\n   *\n   * @param content The message content to parse\n   * @returns ToolCall[] array if tool calls were found, undefined otherwise\n   */\n  private parseEmbeddedToolCalls(content: string): ToolCall[] | undefined {\n    if (!content) return undefined;\n\n    // Try to extract JSON patterns from the content\n    const toolCalls: ToolCall[] = [];\n\n    try {\n      // Look for complete JSON objects in the content using regex\n      const jsonRegex = /{(?:[^{}]|(?:{[^{}]*}))*}/g;\n      const matches = content.match(jsonRegex);\n\n      if (matches && matches.length > 0) {\n        for (const match of matches) {\n          try {\n            const parsed = JSON.parse(match);\n\n            // Check if this looks like a tool call (has name and parameters fields)\n            if (\n              parsed &&\n              typeof parsed === \"object\" &&\n              (parsed.name || parsed.function?.name) &&\n              (parsed.parameters || parsed.function?.parameters)\n            ) {\n              // Format as internal ToolCall\n              const toolCall: ToolCall = {\n                toolUseId: nanoid(),\n                name: parsed.name || parsed.function?.name,\n                arguments: parsed.parameters || parsed.function?.parameters || {},\n              };\n\n              toolCalls.push(toolCall);\n              this.debug(`Found embedded tool call for ${toolCall.name}`, toolCall);\n            }\n          } catch (parseError) {\n            // Skip invalid JSON - continue is implicit in for loop\n          }\n        }\n      }\n\n      return toolCalls.length > 0 ? toolCalls : undefined;\n    } catch (error) {\n      this.error(\"Error parsing embedded tool calls\", { error, content });\n      return undefined;\n    }\n  }\n}\n","function RetryOperation(timeouts, options) {\n  // Compatibility for the old (timeouts, retryForever) signature\n  if (typeof options === 'boolean') {\n    options = { forever: options };\n  }\n\n  this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n  this._timeouts = timeouts;\n  this._options = options || {};\n  this._maxRetryTime = options && options.maxRetryTime || Infinity;\n  this._fn = null;\n  this._errors = [];\n  this._attempts = 1;\n  this._operationTimeout = null;\n  this._operationTimeoutCb = null;\n  this._timeout = null;\n  this._operationStart = null;\n  this._timer = null;\n\n  if (this._options.forever) {\n    this._cachedTimeouts = this._timeouts.slice(0);\n  }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n  this._attempts = 1;\n  this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n  if (this._timer) {\n    clearTimeout(this._timer);\n  }\n\n  this._timeouts       = [];\n  this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n  if (this._timeout) {\n    clearTimeout(this._timeout);\n  }\n\n  if (!err) {\n    return false;\n  }\n  var currentTime = new Date().getTime();\n  if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n    this._errors.push(err);\n    this._errors.unshift(new Error('RetryOperation timeout occurred'));\n    return false;\n  }\n\n  this._errors.push(err);\n\n  var timeout = this._timeouts.shift();\n  if (timeout === undefined) {\n    if (this._cachedTimeouts) {\n      // retry forever, only keep last error\n      this._errors.splice(0, this._errors.length - 1);\n      timeout = this._cachedTimeouts.slice(-1);\n    } else {\n      return false;\n    }\n  }\n\n  var self = this;\n  this._timer = setTimeout(function() {\n    self._attempts++;\n\n    if (self._operationTimeoutCb) {\n      self._timeout = setTimeout(function() {\n        self._operationTimeoutCb(self._attempts);\n      }, self._operationTimeout);\n\n      if (self._options.unref) {\n          self._timeout.unref();\n      }\n    }\n\n    self._fn(self._attempts);\n  }, timeout);\n\n  if (this._options.unref) {\n      this._timer.unref();\n  }\n\n  return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n  this._fn = fn;\n\n  if (timeoutOps) {\n    if (timeoutOps.timeout) {\n      this._operationTimeout = timeoutOps.timeout;\n    }\n    if (timeoutOps.cb) {\n      this._operationTimeoutCb = timeoutOps.cb;\n    }\n  }\n\n  var self = this;\n  if (this._operationTimeoutCb) {\n    this._timeout = setTimeout(function() {\n      self._operationTimeoutCb();\n    }, self._operationTimeout);\n  }\n\n  this._operationStart = new Date().getTime();\n\n  this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n  console.log('Using RetryOperation.try() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n  console.log('Using RetryOperation.start() is deprecated');\n  this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n  return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n  return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n  if (this._errors.length === 0) {\n    return null;\n  }\n\n  var counts = {};\n  var mainError = null;\n  var mainErrorCount = 0;\n\n  for (var i = 0; i < this._errors.length; i++) {\n    var error = this._errors[i];\n    var message = error.message;\n    var count = (counts[message] || 0) + 1;\n\n    counts[message] = count;\n\n    if (count >= mainErrorCount) {\n      mainError = error;\n      mainErrorCount = count;\n    }\n  }\n\n  return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n  var timeouts = exports.timeouts(options);\n  return new RetryOperation(timeouts, {\n      forever: options && (options.forever || options.retries === Infinity),\n      unref: options && options.unref,\n      maxRetryTime: options && options.maxRetryTime\n  });\n};\n\nexports.timeouts = function(options) {\n  if (options instanceof Array) {\n    return [].concat(options);\n  }\n\n  var opts = {\n    retries: 10,\n    factor: 2,\n    minTimeout: 1 * 1000,\n    maxTimeout: Infinity,\n    randomize: false\n  };\n  for (var key in options) {\n    opts[key] = options[key];\n  }\n\n  if (opts.minTimeout > opts.maxTimeout) {\n    throw new Error('minTimeout is greater than maxTimeout');\n  }\n\n  var timeouts = [];\n  for (var i = 0; i < opts.retries; i++) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  if (options && options.forever && !timeouts.length) {\n    timeouts.push(this.createTimeout(i, opts));\n  }\n\n  // sort the array numerically ascending\n  timeouts.sort(function(a,b) {\n    return a - b;\n  });\n\n  return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n  var random = (opts.randomize)\n    ? (Math.random() + 1)\n    : 1;\n\n  var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n  timeout = Math.min(timeout, opts.maxTimeout);\n\n  return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n  if (options instanceof Array) {\n    methods = options;\n    options = null;\n  }\n\n  if (!methods) {\n    methods = [];\n    for (var key in obj) {\n      if (typeof obj[key] === 'function') {\n        methods.push(key);\n      }\n    }\n  }\n\n  for (var i = 0; i < methods.length; i++) {\n    var method   = methods[i];\n    var original = obj[method];\n\n    obj[method] = function retryWrapper(original) {\n      var op       = exports.operation(options);\n      var args     = Array.prototype.slice.call(arguments, 1);\n      var callback = args.pop();\n\n      args.push(function(err) {\n        if (op.retry(err)) {\n          return;\n        }\n        if (err) {\n          arguments[0] = op.mainError();\n        }\n        callback.apply(this, arguments);\n      });\n\n      op.attempt(function() {\n        original.apply(obj, args);\n      });\n    }.bind(obj, original);\n    obj[method].options = options;\n  }\n};\n","module.exports = require('./lib/retry');","'use strict';\nconst retry = require('retry');\n\nconst networkErrorMsgs = [\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari\n\t'Network request failed' // `cross-fetch`\n];\n\nclass AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nconst isNetworkError = errorMessage => networkErrorMsgs.includes(errorMessage);\n\nconst pRetry = (input, options) => new Promise((resolve, reject) => {\n\toptions = {\n\t\tonFailedAttempt: () => {},\n\t\tretries: 10,\n\t\t...options\n\t};\n\n\tconst operation = retry.operation(options);\n\n\toperation.attempt(async attemptNumber => {\n\t\ttry {\n\t\t\tresolve(await input(attemptNumber));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\treject(new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error instanceof AbortError) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error.originalError);\n\t\t\t} else if (error instanceof TypeError && !isNetworkError(error.message)) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\treject(operation.mainError());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n\nmodule.exports = pRetry;\n// TODO: remove this in the next major version\nmodule.exports.default = pRetry;\n\nmodule.exports.AbortError = AbortError;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","'use strict';\nmodule.exports = (promise, onFinally) => {\n\tonFinally = onFinally || (() => {});\n\n\treturn promise.then(\n\t\tval => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => val),\n\t\terr => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => {\n\t\t\tthrow err;\n\t\t})\n\t);\n};\n","'use strict';\n\nconst pFinally = require('p-finally');\n\nclass TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\nconst pTimeout = (promise, milliseconds, fallback) => new Promise((resolve, reject) => {\n\tif (typeof milliseconds !== 'number' || milliseconds < 0) {\n\t\tthrow new TypeError('Expected `milliseconds` to be a positive number');\n\t}\n\n\tif (milliseconds === Infinity) {\n\t\tresolve(promise);\n\t\treturn;\n\t}\n\n\tconst timer = setTimeout(() => {\n\t\tif (typeof fallback === 'function') {\n\t\t\ttry {\n\t\t\t\tresolve(fallback());\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\tif (typeof promise.cancel === 'function') {\n\t\t\tpromise.cancel();\n\t\t}\n\n\t\treject(timeoutError);\n\t}, milliseconds);\n\n\t// TODO: Use native `finally` keyword when targeting Node.js 10\n\tpFinally(\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tpromise.then(resolve, reject),\n\t\t() => {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t);\n});\n\nmodule.exports = pTimeout;\n// TODO: Remove this for the next major release\nmodule.exports.default = pTimeout;\n\nmodule.exports.TimeoutError = TimeoutError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nfunction lowerBound(array, value, comparator) {\n    let first = 0;\n    let count = array.length;\n    while (count > 0) {\n        const step = (count / 2) | 0;\n        let it = first + step;\n        if (comparator(array[it], value) <= 0) {\n            first = ++it;\n            count -= step + 1;\n        }\n        else {\n            count = step;\n        }\n    }\n    return first;\n}\nexports.default = lowerBound;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst lower_bound_1 = require(\"./lower-bound\");\nclass PriorityQueue {\n    constructor() {\n        this._queue = [];\n    }\n    enqueue(run, options) {\n        options = Object.assign({ priority: 0 }, options);\n        const element = {\n            priority: options.priority,\n            run\n        };\n        if (this.size && this._queue[this.size - 1].priority >= options.priority) {\n            this._queue.push(element);\n            return;\n        }\n        const index = lower_bound_1.default(this._queue, element, (a, b) => b.priority - a.priority);\n        this._queue.splice(index, 0, element);\n    }\n    dequeue() {\n        const item = this._queue.shift();\n        return item === null || item === void 0 ? void 0 : item.run;\n    }\n    filter(options) {\n        return this._queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n    }\n    get size() {\n        return this._queue.length;\n    }\n}\nexports.default = PriorityQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EventEmitter = require(\"eventemitter3\");\nconst p_timeout_1 = require(\"p-timeout\");\nconst priority_queue_1 = require(\"./priority-queue\");\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst empty = () => { };\nconst timeoutError = new p_timeout_1.TimeoutError();\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super();\n        this._intervalCount = 0;\n        this._intervalEnd = 0;\n        this._pendingCount = 0;\n        this._resolveEmpty = empty;\n        this._resolveIdle = empty;\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        options = Object.assign({ carryoverConcurrencyCount: false, intervalCap: Infinity, interval: 0, concurrency: Infinity, autoStart: true, queueClass: priority_queue_1.default }, options);\n        if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n            throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n        }\n        if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n            throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n        }\n        this._carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n        this._isIntervalIgnored = options.intervalCap === Infinity || options.interval === 0;\n        this._intervalCap = options.intervalCap;\n        this._interval = options.interval;\n        this._queue = new options.queueClass();\n        this._queueClass = options.queueClass;\n        this.concurrency = options.concurrency;\n        this._timeout = options.timeout;\n        this._throwOnTimeout = options.throwOnTimeout === true;\n        this._isPaused = options.autoStart === false;\n    }\n    get _doesIntervalAllowAnother() {\n        return this._isIntervalIgnored || this._intervalCount < this._intervalCap;\n    }\n    get _doesConcurrentAllowAnother() {\n        return this._pendingCount < this._concurrency;\n    }\n    _next() {\n        this._pendingCount--;\n        this._tryToStartAnother();\n        this.emit('next');\n    }\n    _resolvePromises() {\n        this._resolveEmpty();\n        this._resolveEmpty = empty;\n        if (this._pendingCount === 0) {\n            this._resolveIdle();\n            this._resolveIdle = empty;\n            this.emit('idle');\n        }\n    }\n    _onResumeInterval() {\n        this._onInterval();\n        this._initializeIntervalIfNeeded();\n        this._timeoutId = undefined;\n    }\n    _isIntervalPaused() {\n        const now = Date.now();\n        if (this._intervalId === undefined) {\n            const delay = this._intervalEnd - now;\n            if (delay < 0) {\n                // Act as the interval was done\n                // We don't need to resume it here because it will be resumed on line 160\n                this._intervalCount = (this._carryoverConcurrencyCount) ? this._pendingCount : 0;\n            }\n            else {\n                // Act as the interval is pending\n                if (this._timeoutId === undefined) {\n                    this._timeoutId = setTimeout(() => {\n                        this._onResumeInterval();\n                    }, delay);\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n    _tryToStartAnother() {\n        if (this._queue.size === 0) {\n            // We can clear the interval (\"pause\")\n            // Because we can redo it later (\"resume\")\n            if (this._intervalId) {\n                clearInterval(this._intervalId);\n            }\n            this._intervalId = undefined;\n            this._resolvePromises();\n            return false;\n        }\n        if (!this._isPaused) {\n            const canInitializeInterval = !this._isIntervalPaused();\n            if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) {\n                const job = this._queue.dequeue();\n                if (!job) {\n                    return false;\n                }\n                this.emit('active');\n                job();\n                if (canInitializeInterval) {\n                    this._initializeIntervalIfNeeded();\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n    _initializeIntervalIfNeeded() {\n        if (this._isIntervalIgnored || this._intervalId !== undefined) {\n            return;\n        }\n        this._intervalId = setInterval(() => {\n            this._onInterval();\n        }, this._interval);\n        this._intervalEnd = Date.now() + this._interval;\n    }\n    _onInterval() {\n        if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) {\n            clearInterval(this._intervalId);\n            this._intervalId = undefined;\n        }\n        this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0;\n        this._processQueue();\n    }\n    /**\n    Executes all queued functions until it reaches the limit.\n    */\n    _processQueue() {\n        // eslint-disable-next-line no-empty\n        while (this._tryToStartAnother()) { }\n    }\n    get concurrency() {\n        return this._concurrency;\n    }\n    set concurrency(newConcurrency) {\n        if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n            throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n        }\n        this._concurrency = newConcurrency;\n        this._processQueue();\n    }\n    /**\n    Adds a sync or async task to the queue. Always returns a promise.\n    */\n    async add(fn, options = {}) {\n        return new Promise((resolve, reject) => {\n            const run = async () => {\n                this._pendingCount++;\n                this._intervalCount++;\n                try {\n                    const operation = (this._timeout === undefined && options.timeout === undefined) ? fn() : p_timeout_1.default(Promise.resolve(fn()), (options.timeout === undefined ? this._timeout : options.timeout), () => {\n                        if (options.throwOnTimeout === undefined ? this._throwOnTimeout : options.throwOnTimeout) {\n                            reject(timeoutError);\n                        }\n                        return undefined;\n                    });\n                    resolve(await operation);\n                }\n                catch (error) {\n                    reject(error);\n                }\n                this._next();\n            };\n            this._queue.enqueue(run, options);\n            this._tryToStartAnother();\n            this.emit('add');\n        });\n    }\n    /**\n    Same as `.add()`, but accepts an array of sync or async functions.\n\n    @returns A promise that resolves when all functions are resolved.\n    */\n    async addAll(functions, options) {\n        return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n    }\n    /**\n    Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n    */\n    start() {\n        if (!this._isPaused) {\n            return this;\n        }\n        this._isPaused = false;\n        this._processQueue();\n        return this;\n    }\n    /**\n    Put queue execution on hold.\n    */\n    pause() {\n        this._isPaused = true;\n    }\n    /**\n    Clear the queue.\n    */\n    clear() {\n        this._queue = new this._queueClass();\n    }\n    /**\n    Can be called multiple times. Useful if you for example add additional items at a later time.\n\n    @returns A promise that settles when the queue becomes empty.\n    */\n    async onEmpty() {\n        // Instantly resolve if the queue is empty\n        if (this._queue.size === 0) {\n            return;\n        }\n        return new Promise(resolve => {\n            const existingResolve = this._resolveEmpty;\n            this._resolveEmpty = () => {\n                existingResolve();\n                resolve();\n            };\n        });\n    }\n    /**\n    The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n    @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n    */\n    async onIdle() {\n        // Instantly resolve if none pending and if nothing else is queued\n        if (this._pendingCount === 0 && this._queue.size === 0) {\n            return;\n        }\n        return new Promise(resolve => {\n            const existingResolve = this._resolveIdle;\n            this._resolveIdle = () => {\n                existingResolve();\n                resolve();\n            };\n        });\n    }\n    /**\n    Size of the queue.\n    */\n    get size() {\n        return this._queue.size;\n    }\n    /**\n    Size of the queue, filtered by the given options.\n\n    For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n    */\n    sizeBy(options) {\n        // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n        return this._queue.filter(options).length;\n    }\n    /**\n    Number of pending promises.\n    */\n    get pending() {\n        return this._pendingCount;\n    }\n    /**\n    Whether the queue is currently paused.\n    */\n    get isPaused() {\n        return this._isPaused;\n    }\n    get timeout() {\n        return this._timeout;\n    }\n    /**\n    Set the timeout for future operations.\n    */\n    set timeout(milliseconds) {\n        this._timeout = milliseconds;\n    }\n}\nexports.default = PQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._getFetchImplementation = exports.overrideFetchImplementation = void 0;\n// Wrap the default fetch call due to issues with illegal invocations\n// in some environments:\n// https://stackoverflow.com/questions/69876859/why-does-bind-fix-failed-to-execute-fetch-on-window-illegal-invocation-err\n// @ts-expect-error Broad typing to support a range of fetch implementations\nconst DEFAULT_FETCH_IMPLEMENTATION = (...args) => fetch(...args);\nconst LANGSMITH_FETCH_IMPLEMENTATION_KEY = Symbol.for(\"ls:fetch_implementation\");\n/**\n * Overrides the fetch implementation used for LangSmith calls.\n * You should use this if you need to use an implementation of fetch\n * other than the default global (e.g. for dealing with proxies).\n * @param fetch The new fetch functino to use.\n */\nconst overrideFetchImplementation = (fetch) => {\n    globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY] = fetch;\n};\nexports.overrideFetchImplementation = overrideFetchImplementation;\n/**\n * @internal\n */\nconst _getFetchImplementation = () => {\n    return (globalThis[LANGSMITH_FETCH_IMPLEMENTATION_KEY] ??\n        DEFAULT_FETCH_IMPLEMENTATION);\n};\nexports._getFetchImplementation = _getFetchImplementation;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AsyncCaller = void 0;\nconst p_retry_1 = __importDefault(require(\"p-retry\"));\nconst p_queue_1 = __importDefault(require(\"p-queue\"));\nconst fetch_js_1 = require(\"../singletons/fetch.cjs\");\nconst STATUS_NO_RETRY = [\n    400, // Bad Request\n    401, // Unauthorized\n    403, // Forbidden\n    404, // Not Found\n    405, // Method Not Allowed\n    406, // Not Acceptable\n    407, // Proxy Authentication Required\n    408, // Request Timeout\n];\nconst STATUS_IGNORE = [\n    409, // Conflict\n];\n/**\n * A class that can be used to make async calls with concurrency and retry logic.\n *\n * This is useful for making calls to any kind of \"expensive\" external resource,\n * be it because it's rate-limited, subject to network issues, etc.\n *\n * Concurrent calls are limited by the `maxConcurrency` parameter, which defaults\n * to `Infinity`. This means that by default, all calls will be made in parallel.\n *\n * Retries are limited by the `maxRetries` parameter, which defaults to 6. This\n * means that by default, each call will be retried up to 6 times, with an\n * exponential backoff between each attempt.\n */\nclass AsyncCaller {\n    constructor(params) {\n        Object.defineProperty(this, \"maxConcurrency\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"maxRetries\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"queue\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"onFailedResponseHook\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.maxConcurrency = params.maxConcurrency ?? Infinity;\n        this.maxRetries = params.maxRetries ?? 6;\n        if (\"default\" in p_queue_1.default) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.queue = new p_queue_1.default.default({\n                concurrency: this.maxConcurrency,\n            });\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.queue = new p_queue_1.default({ concurrency: this.maxConcurrency });\n        }\n        this.onFailedResponseHook = params?.onFailedResponseHook;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    call(callable, ...args) {\n        const onFailedResponseHook = this.onFailedResponseHook;\n        return this.queue.add(() => (0, p_retry_1.default)(() => callable(...args).catch((error) => {\n            // eslint-disable-next-line no-instanceof/no-instanceof\n            if (error instanceof Error) {\n                throw error;\n            }\n            else {\n                throw new Error(error);\n            }\n        }), {\n            async onFailedAttempt(error) {\n                if (error.message.startsWith(\"Cancel\") ||\n                    error.message.startsWith(\"TimeoutError\") ||\n                    error.message.startsWith(\"AbortError\")) {\n                    throw error;\n                }\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                if (error?.code === \"ECONNABORTED\") {\n                    throw error;\n                }\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                const response = error?.response;\n                const status = response?.status;\n                if (status) {\n                    if (STATUS_NO_RETRY.includes(+status)) {\n                        throw error;\n                    }\n                    else if (STATUS_IGNORE.includes(+status)) {\n                        return;\n                    }\n                    if (onFailedResponseHook) {\n                        await onFailedResponseHook(response);\n                    }\n                }\n            },\n            // If needed we can change some of the defaults here,\n            // but they're quite sensible.\n            retries: this.maxRetries,\n            randomize: true,\n        }), { throwOnTimeout: true });\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    callWithOptions(options, callable, ...args) {\n        // Note this doesn't cancel the underlying request,\n        // when available prefer to use the signal option of the underlying call\n        if (options.signal) {\n            return Promise.race([\n                this.call(callable, ...args),\n                new Promise((_, reject) => {\n                    options.signal?.addEventListener(\"abort\", () => {\n                        reject(new Error(\"AbortError\"));\n                    });\n                }),\n            ]);\n        }\n        return this.call(callable, ...args);\n    }\n    fetch(...args) {\n        return this.call(() => (0, fetch_js_1._getFetchImplementation)()(...args).then((res) => res.ok ? res : Promise.reject(res)));\n    }\n}\nexports.AsyncCaller = AsyncCaller;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isLangChainMessage = isLangChainMessage;\nexports.convertLangChainMessageToExample = convertLangChainMessageToExample;\nfunction isLangChainMessage(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nmessage) {\n    return typeof message?._getType === \"function\";\n}\nfunction convertLangChainMessageToExample(message) {\n    const converted = {\n        type: message._getType(),\n        data: { content: message.content },\n    };\n    // Check for presence of keys in additional_kwargs\n    if (message?.additional_kwargs &&\n        Object.keys(message.additional_kwargs).length > 0) {\n        converted.data.additional_kwargs = { ...message.additional_kwargs };\n    }\n    return converted;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assertUuid = assertUuid;\nconst uuid = __importStar(require(\"uuid\"));\nfunction assertUuid(str, which) {\n    if (!uuid.validate(str)) {\n        const msg = which !== undefined\n            ? `Invalid UUID for ${which}: ${str}`\n            : `Invalid UUID: ${str}`;\n        throw new Error(msg);\n    }\n    return str;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.warnOnce = warnOnce;\nconst warnedMessages = {};\nfunction warnOnce(message) {\n    if (!warnedMessages[message]) {\n        console.warn(message);\n        warnedMessages[message] = true;\n    }\n}\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","const debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","const {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, safeSrc: src, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    return (\n      compareIdentifiers(this.major, other.major) ||\n      compareIdentifiers(this.minor, other.minor) ||\n      compareIdentifiers(this.patch, other.patch)\n    )\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const r = new RegExp(`^${this.options.loose ? src[t.PRERELEASELOOSE] : src[t.PRERELEASE]}$`)\n        const match = `-${identifier}`.match(r)\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","const SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","const parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // If the main part has no difference\n    if (lowVersion.compareMain(highVersion) === 0) {\n      if (lowVersion.minor && !lowVersion.patch) {\n        return 'minor'\n      }\n      return 'patch'\n    }\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are preleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","class LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n","const SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isVersionGreaterOrEqual = isVersionGreaterOrEqual;\nexports.parsePromptIdentifier = parsePromptIdentifier;\nconst semver_1 = require(\"semver\");\nfunction isVersionGreaterOrEqual(current_version, target_version) {\n    const current = (0, semver_1.parse)(current_version);\n    const target = (0, semver_1.parse)(target_version);\n    if (!current || !target) {\n        throw new Error(\"Invalid version format.\");\n    }\n    return current.compare(target) >= 0;\n}\nfunction parsePromptIdentifier(identifier) {\n    if (!identifier ||\n        identifier.split(\"/\").length > 2 ||\n        identifier.startsWith(\"/\") ||\n        identifier.endsWith(\"/\") ||\n        identifier.split(\":\").length > 2) {\n        throw new Error(`Invalid identifier format: ${identifier}`);\n    }\n    const [ownerNamePart, commitPart] = identifier.split(\":\");\n    const commit = commitPart || \"latest\";\n    if (ownerNamePart.includes(\"/\")) {\n        const [owner, name] = ownerNamePart.split(\"/\", 2);\n        if (!owner || !name) {\n            throw new Error(`Invalid identifier format: ${identifier}`);\n        }\n        return [owner, name, commit];\n    }\n    else {\n        if (!ownerNamePart) {\n            throw new Error(`Invalid identifier format: ${identifier}`);\n        }\n        return [\"-\", ownerNamePart, commit];\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LangSmithConflictError = void 0;\nexports.printErrorStackTrace = printErrorStackTrace;\nexports.raiseForStatus = raiseForStatus;\nfunction getErrorStackTrace(e) {\n    if (typeof e !== \"object\" || e == null)\n        return undefined;\n    if (!(\"stack\" in e) || typeof e.stack !== \"string\")\n        return undefined;\n    let stack = e.stack;\n    const prevLine = `${e}`;\n    if (stack.startsWith(prevLine)) {\n        stack = stack.slice(prevLine.length);\n    }\n    if (stack.startsWith(\"\\n\")) {\n        stack = stack.slice(1);\n    }\n    return stack;\n}\nfunction printErrorStackTrace(e) {\n    const stack = getErrorStackTrace(e);\n    if (stack == null)\n        return;\n    console.error(stack);\n}\n/**\n * LangSmithConflictError\n *\n * Represents an error that occurs when there's a conflict during an operation,\n * typically corresponding to HTTP 409 status code responses.\n *\n * This error is thrown when an attempt to create or modify a resource conflicts\n * with the current state of the resource on the server. Common scenarios include:\n * - Attempting to create a resource that already exists\n * - Trying to update a resource that has been modified by another process\n * - Violating a uniqueness constraint in the data\n *\n * @extends Error\n *\n * @example\n * try {\n *   await createProject(\"existingProject\");\n * } catch (error) {\n *   if (error instanceof ConflictError) {\n *     console.log(\"A conflict occurred:\", error.message);\n *     // Handle the conflict, e.g., by suggesting a different project name\n *   } else {\n *     // Handle other types of errors\n *   }\n * }\n *\n * @property {string} name - Always set to 'ConflictError' for easy identification\n * @property {string} message - Detailed error message including server response\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/409\n */\nclass LangSmithConflictError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = \"LangSmithConflictError\";\n    }\n}\nexports.LangSmithConflictError = LangSmithConflictError;\n/**\n * Throws an appropriate error based on the response status and body.\n *\n * @param response - The fetch Response object\n * @param context - Additional context to include in the error message (e.g., operation being performed)\n * @throws {LangSmithConflictError} When the response status is 409\n * @throws {Error} For all other non-ok responses\n */\nasync function raiseForStatus(response, context, consume) {\n    // consume the response body to release the connection\n    // https://undici.nodejs.org/#/?id=garbage-collection\n    let errorBody;\n    if (response.ok) {\n        if (consume) {\n            errorBody = await response.text();\n        }\n        return;\n    }\n    errorBody = await response.text();\n    const fullMessage = `Failed to ${context}. Received status [${response.status}]: ${response.statusText}. Server response: ${errorBody}`;\n    if (response.status === 409) {\n        throw new LangSmithConflictError(fullMessage);\n    }\n    throw new Error(fullMessage);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serialize = serialize;\n/* eslint-disable */\n// @ts-nocheck\nvar LIMIT_REPLACE_NODE = \"[...]\";\nvar CIRCULAR_REPLACE_NODE = { result: \"[Circular]\" };\nvar arr = [];\nvar replacerStack = [];\nconst encoder = new TextEncoder();\nfunction defaultOptions() {\n    return {\n        depthLimit: Number.MAX_SAFE_INTEGER,\n        edgesLimit: Number.MAX_SAFE_INTEGER,\n    };\n}\nfunction encodeString(str) {\n    return encoder.encode(str);\n}\n// Regular stringify\nfunction serialize(obj, replacer, spacer, options) {\n    try {\n        const str = JSON.stringify(obj, replacer, spacer);\n        return encodeString(str);\n    }\n    catch (e) {\n        // Fall back to more complex stringify if circular reference\n        if (!e.message?.includes(\"Converting circular structure to JSON\")) {\n            console.warn(\"[WARNING]: LangSmith received unserializable value.\");\n            return encodeString(\"[Unserializable]\");\n        }\n        console.warn(\"[WARNING]: LangSmith received circular JSON. This will decrease tracer performance.\");\n        if (typeof options === \"undefined\") {\n            options = defaultOptions();\n        }\n        decirc(obj, \"\", 0, [], undefined, 0, options);\n        let res;\n        try {\n            if (replacerStack.length === 0) {\n                res = JSON.stringify(obj, replacer, spacer);\n            }\n            else {\n                res = JSON.stringify(obj, replaceGetterValues(replacer), spacer);\n            }\n        }\n        catch (_) {\n            return encodeString(\"[unable to serialize, circular reference is too complex to analyze]\");\n        }\n        finally {\n            while (arr.length !== 0) {\n                const part = arr.pop();\n                if (part.length === 4) {\n                    Object.defineProperty(part[0], part[1], part[3]);\n                }\n                else {\n                    part[0][part[1]] = part[2];\n                }\n            }\n        }\n        return encodeString(res);\n    }\n}\nfunction setReplace(replace, val, k, parent) {\n    var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k);\n    if (propertyDescriptor.get !== undefined) {\n        if (propertyDescriptor.configurable) {\n            Object.defineProperty(parent, k, { value: replace });\n            arr.push([parent, k, val, propertyDescriptor]);\n        }\n        else {\n            replacerStack.push([val, k, replace]);\n        }\n    }\n    else {\n        parent[k] = replace;\n        arr.push([parent, k, val]);\n    }\n}\nfunction decirc(val, k, edgeIndex, stack, parent, depth, options) {\n    depth += 1;\n    var i;\n    if (typeof val === \"object\" && val !== null) {\n        for (i = 0; i < stack.length; i++) {\n            if (stack[i] === val) {\n                setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);\n                return;\n            }\n        }\n        if (typeof options.depthLimit !== \"undefined\" &&\n            depth > options.depthLimit) {\n            setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n            return;\n        }\n        if (typeof options.edgesLimit !== \"undefined\" &&\n            edgeIndex + 1 > options.edgesLimit) {\n            setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n            return;\n        }\n        stack.push(val);\n        // Optimize for Arrays. Big arrays could kill the performance otherwise!\n        if (Array.isArray(val)) {\n            for (i = 0; i < val.length; i++) {\n                decirc(val[i], i, i, stack, val, depth, options);\n            }\n        }\n        else {\n            var keys = Object.keys(val);\n            for (i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                decirc(val[key], key, i, stack, val, depth, options);\n            }\n        }\n        stack.pop();\n    }\n}\n// Stable-stringify\nfunction compareFunction(a, b) {\n    if (a < b) {\n        return -1;\n    }\n    if (a > b) {\n        return 1;\n    }\n    return 0;\n}\nfunction deterministicStringify(obj, replacer, spacer, options) {\n    if (typeof options === \"undefined\") {\n        options = defaultOptions();\n    }\n    var tmp = deterministicDecirc(obj, \"\", 0, [], undefined, 0, options) || obj;\n    var res;\n    try {\n        if (replacerStack.length === 0) {\n            res = JSON.stringify(tmp, replacer, spacer);\n        }\n        else {\n            res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer);\n        }\n    }\n    catch (_) {\n        return JSON.stringify(\"[unable to serialize, circular reference is too complex to analyze]\");\n    }\n    finally {\n        // Ensure that we restore the object as it was.\n        while (arr.length !== 0) {\n            var part = arr.pop();\n            if (part.length === 4) {\n                Object.defineProperty(part[0], part[1], part[3]);\n            }\n            else {\n                part[0][part[1]] = part[2];\n            }\n        }\n    }\n    return res;\n}\nfunction deterministicDecirc(val, k, edgeIndex, stack, parent, depth, options) {\n    depth += 1;\n    var i;\n    if (typeof val === \"object\" && val !== null) {\n        for (i = 0; i < stack.length; i++) {\n            if (stack[i] === val) {\n                setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);\n                return;\n            }\n        }\n        try {\n            if (typeof val.toJSON === \"function\") {\n                return;\n            }\n        }\n        catch (_) {\n            return;\n        }\n        if (typeof options.depthLimit !== \"undefined\" &&\n            depth > options.depthLimit) {\n            setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n            return;\n        }\n        if (typeof options.edgesLimit !== \"undefined\" &&\n            edgeIndex + 1 > options.edgesLimit) {\n            setReplace(LIMIT_REPLACE_NODE, val, k, parent);\n            return;\n        }\n        stack.push(val);\n        // Optimize for Arrays. Big arrays could kill the performance otherwise!\n        if (Array.isArray(val)) {\n            for (i = 0; i < val.length; i++) {\n                deterministicDecirc(val[i], i, i, stack, val, depth, options);\n            }\n        }\n        else {\n            // Create a temporary object in the required way\n            var tmp = {};\n            var keys = Object.keys(val).sort(compareFunction);\n            for (i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                deterministicDecirc(val[key], key, i, stack, val, depth, options);\n                tmp[key] = val[key];\n            }\n            if (typeof parent !== \"undefined\") {\n                arr.push([parent, k, val]);\n                parent[k] = tmp;\n            }\n            else {\n                return tmp;\n            }\n        }\n        stack.pop();\n    }\n}\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues(replacer) {\n    replacer =\n        typeof replacer !== \"undefined\"\n            ? replacer\n            : function (k, v) {\n                return v;\n            };\n    return function (key, val) {\n        if (replacerStack.length > 0) {\n            for (var i = 0; i < replacerStack.length; i++) {\n                var part = replacerStack[i];\n                if (part[1] === key && part[0] === val) {\n                    val = part[2];\n                    replacerStack.splice(i, 1);\n                    break;\n                }\n            }\n        }\n        return replacer.call(this, key, val);\n    };\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Client = exports.DEFAULT_BATCH_SIZE_LIMIT_BYTES = exports.AutoBatchQueue = void 0;\nexports.mergeRuntimeEnvIntoRunCreate = mergeRuntimeEnvIntoRunCreate;\nconst uuid = __importStar(require(\"uuid\"));\nconst async_caller_js_1 = require(\"./utils/async_caller.cjs\");\nconst messages_js_1 = require(\"./utils/messages.cjs\");\nconst env_js_1 = require(\"./utils/env.cjs\");\nconst index_js_1 = require(\"./index.cjs\");\nconst _uuid_js_1 = require(\"./utils/_uuid.cjs\");\nconst warn_js_1 = require(\"./utils/warn.cjs\");\nconst prompts_js_1 = require(\"./utils/prompts.cjs\");\nconst error_js_1 = require(\"./utils/error.cjs\");\nconst fetch_js_1 = require(\"./singletons/fetch.cjs\");\nconst index_js_2 = require(\"./utils/fast-safe-stringify/index.cjs\");\nfunction mergeRuntimeEnvIntoRunCreate(run) {\n    const runtimeEnv = (0, env_js_1.getRuntimeEnvironment)();\n    const envVars = (0, env_js_1.getLangChainEnvVarsMetadata)();\n    const extra = run.extra ?? {};\n    const metadata = extra.metadata;\n    run.extra = {\n        ...extra,\n        runtime: {\n            ...runtimeEnv,\n            ...extra?.runtime,\n        },\n        metadata: {\n            ...envVars,\n            ...(envVars.revision_id || run.revision_id\n                ? { revision_id: run.revision_id ?? envVars.revision_id }\n                : {}),\n            ...metadata,\n        },\n    };\n    return run;\n}\nconst getTracingSamplingRate = (configRate) => {\n    const samplingRateStr = configRate?.toString() ??\n        (0, env_js_1.getLangSmithEnvironmentVariable)(\"TRACING_SAMPLING_RATE\");\n    if (samplingRateStr === undefined) {\n        return undefined;\n    }\n    const samplingRate = parseFloat(samplingRateStr);\n    if (samplingRate < 0 || samplingRate > 1) {\n        throw new Error(`LANGSMITH_TRACING_SAMPLING_RATE must be between 0 and 1 if set. Got: ${samplingRate}`);\n    }\n    return samplingRate;\n};\n// utility functions\nconst isLocalhost = (url) => {\n    const strippedUrl = url.replace(\"http://\", \"\").replace(\"https://\", \"\");\n    const hostname = strippedUrl.split(\"/\")[0].split(\":\")[0];\n    return (hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname === \"::1\");\n};\nasync function toArray(iterable) {\n    const result = [];\n    for await (const item of iterable) {\n        result.push(item);\n    }\n    return result;\n}\nfunction trimQuotes(str) {\n    if (str === undefined) {\n        return undefined;\n    }\n    return str\n        .trim()\n        .replace(/^\"(.*)\"$/, \"$1\")\n        .replace(/^'(.*)'$/, \"$1\");\n}\nconst handle429 = async (response) => {\n    if (response?.status === 429) {\n        const retryAfter = parseInt(response.headers.get(\"retry-after\") ?? \"30\", 10) * 1000;\n        if (retryAfter > 0) {\n            await new Promise((resolve) => setTimeout(resolve, retryAfter));\n            // Return directly after calling this check\n            return true;\n        }\n    }\n    // Fall back to existing status checks\n    return false;\n};\nfunction _formatFeedbackScore(score) {\n    if (typeof score === \"number\") {\n        // Truncate at 4 decimal places\n        return Number(score.toFixed(4));\n    }\n    return score;\n}\nclass AutoBatchQueue {\n    constructor() {\n        Object.defineProperty(this, \"items\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: []\n        });\n        Object.defineProperty(this, \"sizeBytes\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 0\n        });\n    }\n    peek() {\n        return this.items[0];\n    }\n    push(item) {\n        let itemPromiseResolve;\n        const itemPromise = new Promise((resolve) => {\n            // Setting itemPromiseResolve is synchronous with promise creation:\n            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise\n            itemPromiseResolve = resolve;\n        });\n        const size = (0, index_js_2.serialize)(item.item).length;\n        this.items.push({\n            action: item.action,\n            payload: item.item,\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            itemPromiseResolve: itemPromiseResolve,\n            itemPromise,\n            size,\n        });\n        this.sizeBytes += size;\n        return itemPromise;\n    }\n    pop(upToSizeBytes) {\n        if (upToSizeBytes < 1) {\n            throw new Error(\"Number of bytes to pop off may not be less than 1.\");\n        }\n        const popped = [];\n        let poppedSizeBytes = 0;\n        // Pop items until we reach or exceed the size limit\n        while (poppedSizeBytes + (this.peek()?.size ?? 0) < upToSizeBytes &&\n            this.items.length > 0) {\n            const item = this.items.shift();\n            if (item) {\n                popped.push(item);\n                poppedSizeBytes += item.size;\n                this.sizeBytes -= item.size;\n            }\n        }\n        // If there is an item on the queue we were unable to pop,\n        // just return it as a single batch.\n        if (popped.length === 0 && this.items.length > 0) {\n            const item = this.items.shift();\n            popped.push(item);\n            poppedSizeBytes += item.size;\n            this.sizeBytes -= item.size;\n        }\n        return [\n            popped.map((it) => ({ action: it.action, item: it.payload })),\n            () => popped.forEach((it) => it.itemPromiseResolve()),\n        ];\n    }\n}\nexports.AutoBatchQueue = AutoBatchQueue;\n// 20 MB\nexports.DEFAULT_BATCH_SIZE_LIMIT_BYTES = 20_971_520;\nconst SERVER_INFO_REQUEST_TIMEOUT = 2500;\nclass Client {\n    constructor(config = {}) {\n        Object.defineProperty(this, \"apiKey\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"apiUrl\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"webUrl\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"caller\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"batchIngestCaller\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"timeout_ms\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"_tenantId\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: null\n        });\n        Object.defineProperty(this, \"hideInputs\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"hideOutputs\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"tracingSampleRate\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"filteredPostUuids\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new Set()\n        });\n        Object.defineProperty(this, \"autoBatchTracing\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: true\n        });\n        Object.defineProperty(this, \"autoBatchQueue\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: new AutoBatchQueue()\n        });\n        Object.defineProperty(this, \"autoBatchTimeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"autoBatchAggregationDelayMs\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 250\n        });\n        Object.defineProperty(this, \"batchSizeBytesLimit\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"fetchOptions\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"settings\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"blockOnRootRunFinalization\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: (0, env_js_1.getEnvironmentVariable)(\"LANGSMITH_TRACING_BACKGROUND\") === \"false\"\n        });\n        Object.defineProperty(this, \"traceBatchConcurrency\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: 5\n        });\n        Object.defineProperty(this, \"_serverInfo\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Object.defineProperty(this, \"_getServerInfoPromise\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"manualFlushMode\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: false\n        });\n        const defaultConfig = Client.getDefaultClientConfig();\n        this.tracingSampleRate = getTracingSamplingRate(config.tracingSamplingRate);\n        this.apiUrl = trimQuotes(config.apiUrl ?? defaultConfig.apiUrl) ?? \"\";\n        if (this.apiUrl.endsWith(\"/\")) {\n            this.apiUrl = this.apiUrl.slice(0, -1);\n        }\n        this.apiKey = trimQuotes(config.apiKey ?? defaultConfig.apiKey);\n        this.webUrl = trimQuotes(config.webUrl ?? defaultConfig.webUrl);\n        if (this.webUrl?.endsWith(\"/\")) {\n            this.webUrl = this.webUrl.slice(0, -1);\n        }\n        this.timeout_ms = config.timeout_ms ?? 90_000;\n        this.caller = new async_caller_js_1.AsyncCaller(config.callerOptions ?? {});\n        this.traceBatchConcurrency =\n            config.traceBatchConcurrency ?? this.traceBatchConcurrency;\n        if (this.traceBatchConcurrency < 1) {\n            throw new Error(\"Trace batch concurrency must be positive.\");\n        }\n        this.batchIngestCaller = new async_caller_js_1.AsyncCaller({\n            maxRetries: 2,\n            maxConcurrency: this.traceBatchConcurrency,\n            ...(config.callerOptions ?? {}),\n            onFailedResponseHook: handle429,\n        });\n        this.hideInputs =\n            config.hideInputs ?? config.anonymizer ?? defaultConfig.hideInputs;\n        this.hideOutputs =\n            config.hideOutputs ?? config.anonymizer ?? defaultConfig.hideOutputs;\n        this.autoBatchTracing = config.autoBatchTracing ?? this.autoBatchTracing;\n        this.blockOnRootRunFinalization =\n            config.blockOnRootRunFinalization ?? this.blockOnRootRunFinalization;\n        this.batchSizeBytesLimit = config.batchSizeBytesLimit;\n        this.fetchOptions = config.fetchOptions || {};\n        this.manualFlushMode = config.manualFlushMode ?? this.manualFlushMode;\n    }\n    static getDefaultClientConfig() {\n        const apiKey = (0, env_js_1.getLangSmithEnvironmentVariable)(\"API_KEY\");\n        const apiUrl = (0, env_js_1.getLangSmithEnvironmentVariable)(\"ENDPOINT\") ??\n            \"https://api.smith.langchain.com\";\n        const hideInputs = (0, env_js_1.getLangSmithEnvironmentVariable)(\"HIDE_INPUTS\") === \"true\";\n        const hideOutputs = (0, env_js_1.getLangSmithEnvironmentVariable)(\"HIDE_OUTPUTS\") === \"true\";\n        return {\n            apiUrl: apiUrl,\n            apiKey: apiKey,\n            webUrl: undefined,\n            hideInputs: hideInputs,\n            hideOutputs: hideOutputs,\n        };\n    }\n    getHostUrl() {\n        if (this.webUrl) {\n            return this.webUrl;\n        }\n        else if (isLocalhost(this.apiUrl)) {\n            this.webUrl = \"http://localhost:3000\";\n            return this.webUrl;\n        }\n        else if (this.apiUrl.endsWith(\"/api/v1\")) {\n            this.webUrl = this.apiUrl.replace(\"/api/v1\", \"\");\n            return this.webUrl;\n        }\n        else if (this.apiUrl.includes(\"/api\") &&\n            !this.apiUrl.split(\".\", 1)[0].endsWith(\"api\")) {\n            this.webUrl = this.apiUrl.replace(\"/api\", \"\");\n            return this.webUrl;\n        }\n        else if (this.apiUrl.split(\".\", 1)[0].includes(\"dev\")) {\n            this.webUrl = \"https://dev.smith.langchain.com\";\n            return this.webUrl;\n        }\n        else if (this.apiUrl.split(\".\", 1)[0].includes(\"eu\")) {\n            this.webUrl = \"https://eu.smith.langchain.com\";\n            return this.webUrl;\n        }\n        else if (this.apiUrl.split(\".\", 1)[0].includes(\"beta\")) {\n            this.webUrl = \"https://beta.smith.langchain.com\";\n            return this.webUrl;\n        }\n        else {\n            this.webUrl = \"https://smith.langchain.com\";\n            return this.webUrl;\n        }\n    }\n    get headers() {\n        const headers = {\n            \"User-Agent\": `langsmith-js/${index_js_1.__version__}`,\n        };\n        if (this.apiKey) {\n            headers[\"x-api-key\"] = `${this.apiKey}`;\n        }\n        return headers;\n    }\n    processInputs(inputs) {\n        if (this.hideInputs === false) {\n            return inputs;\n        }\n        if (this.hideInputs === true) {\n            return {};\n        }\n        if (typeof this.hideInputs === \"function\") {\n            return this.hideInputs(inputs);\n        }\n        return inputs;\n    }\n    processOutputs(outputs) {\n        if (this.hideOutputs === false) {\n            return outputs;\n        }\n        if (this.hideOutputs === true) {\n            return {};\n        }\n        if (typeof this.hideOutputs === \"function\") {\n            return this.hideOutputs(outputs);\n        }\n        return outputs;\n    }\n    prepareRunCreateOrUpdateInputs(run) {\n        const runParams = { ...run };\n        if (runParams.inputs !== undefined) {\n            runParams.inputs = this.processInputs(runParams.inputs);\n        }\n        if (runParams.outputs !== undefined) {\n            runParams.outputs = this.processOutputs(runParams.outputs);\n        }\n        return runParams;\n    }\n    async _getResponse(path, queryParams) {\n        const paramsString = queryParams?.toString() ?? \"\";\n        const url = `${this.apiUrl}${path}?${paramsString}`;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), url, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, `Failed to fetch ${path}`);\n        return response;\n    }\n    async _get(path, queryParams) {\n        const response = await this._getResponse(path, queryParams);\n        return response.json();\n    }\n    async *_getPaginated(path, queryParams = new URLSearchParams(), transform) {\n        let offset = Number(queryParams.get(\"offset\")) || 0;\n        const limit = Number(queryParams.get(\"limit\")) || 100;\n        while (true) {\n            queryParams.set(\"offset\", String(offset));\n            queryParams.set(\"limit\", String(limit));\n            const url = `${this.apiUrl}${path}?${queryParams}`;\n            const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), url, {\n                method: \"GET\",\n                headers: this.headers,\n                signal: AbortSignal.timeout(this.timeout_ms),\n                ...this.fetchOptions,\n            });\n            await (0, error_js_1.raiseForStatus)(response, `Failed to fetch ${path}`);\n            const items = transform\n                ? transform(await response.json())\n                : await response.json();\n            if (items.length === 0) {\n                break;\n            }\n            yield items;\n            if (items.length < limit) {\n                break;\n            }\n            offset += items.length;\n        }\n    }\n    async *_getCursorPaginatedList(path, body = null, requestMethod = \"POST\", dataKey = \"runs\") {\n        const bodyParams = body ? { ...body } : {};\n        while (true) {\n            const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}${path}`, {\n                method: requestMethod,\n                headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n                signal: AbortSignal.timeout(this.timeout_ms),\n                ...this.fetchOptions,\n                body: JSON.stringify(bodyParams),\n            });\n            const responseBody = await response.json();\n            if (!responseBody) {\n                break;\n            }\n            if (!responseBody[dataKey]) {\n                break;\n            }\n            yield responseBody[dataKey];\n            const cursors = responseBody.cursors;\n            if (!cursors) {\n                break;\n            }\n            if (!cursors.next) {\n                break;\n            }\n            bodyParams.cursor = cursors.next;\n        }\n    }\n    // Allows mocking for tests\n    _shouldSample() {\n        if (this.tracingSampleRate === undefined) {\n            return true;\n        }\n        return Math.random() < this.tracingSampleRate;\n    }\n    _filterForSampling(runs, patch = false) {\n        if (this.tracingSampleRate === undefined) {\n            return runs;\n        }\n        if (patch) {\n            const sampled = [];\n            for (const run of runs) {\n                if (!this.filteredPostUuids.has(run.id)) {\n                    sampled.push(run);\n                }\n                else {\n                    this.filteredPostUuids.delete(run.id);\n                }\n            }\n            return sampled;\n        }\n        else {\n            // For new runs, sample at trace level to maintain consistency\n            const sampled = [];\n            for (const run of runs) {\n                const traceId = run.trace_id ?? run.id;\n                // If we've already made a decision about this trace, follow it\n                if (this.filteredPostUuids.has(traceId)) {\n                    continue;\n                }\n                // For new traces, apply sampling\n                if (run.id === traceId) {\n                    if (this._shouldSample()) {\n                        sampled.push(run);\n                    }\n                    else {\n                        this.filteredPostUuids.add(traceId);\n                    }\n                }\n                else {\n                    // Child runs follow their trace's sampling decision\n                    sampled.push(run);\n                }\n            }\n            return sampled;\n        }\n    }\n    async _getBatchSizeLimitBytes() {\n        const serverInfo = await this._ensureServerInfo();\n        return (this.batchSizeBytesLimit ??\n            serverInfo.batch_ingest_config?.size_limit_bytes ??\n            exports.DEFAULT_BATCH_SIZE_LIMIT_BYTES);\n    }\n    async _getMultiPartSupport() {\n        const serverInfo = await this._ensureServerInfo();\n        return (serverInfo.instance_flags?.dataset_examples_multipart_enabled ?? false);\n    }\n    drainAutoBatchQueue(batchSizeLimit) {\n        const promises = [];\n        while (this.autoBatchQueue.items.length > 0) {\n            const [batch, done] = this.autoBatchQueue.pop(batchSizeLimit);\n            if (!batch.length) {\n                done();\n                break;\n            }\n            const batchPromise = this._processBatch(batch, done).catch(console.error);\n            promises.push(batchPromise);\n        }\n        return Promise.all(promises);\n    }\n    async _processBatch(batch, done) {\n        if (!batch.length) {\n            done();\n            return;\n        }\n        try {\n            const ingestParams = {\n                runCreates: batch\n                    .filter((item) => item.action === \"create\")\n                    .map((item) => item.item),\n                runUpdates: batch\n                    .filter((item) => item.action === \"update\")\n                    .map((item) => item.item),\n            };\n            const serverInfo = await this._ensureServerInfo();\n            if (serverInfo?.batch_ingest_config?.use_multipart_endpoint) {\n                await this.multipartIngestRuns(ingestParams);\n            }\n            else {\n                await this.batchIngestRuns(ingestParams);\n            }\n        }\n        finally {\n            done();\n        }\n    }\n    async processRunOperation(item) {\n        clearTimeout(this.autoBatchTimeout);\n        this.autoBatchTimeout = undefined;\n        if (item.action === \"create\") {\n            item.item = mergeRuntimeEnvIntoRunCreate(item.item);\n        }\n        const itemPromise = this.autoBatchQueue.push(item);\n        if (this.manualFlushMode) {\n            // Rely on manual flushing in serverless environments\n            return itemPromise;\n        }\n        const sizeLimitBytes = await this._getBatchSizeLimitBytes();\n        if (this.autoBatchQueue.sizeBytes > sizeLimitBytes) {\n            void this.drainAutoBatchQueue(sizeLimitBytes);\n        }\n        if (this.autoBatchQueue.items.length > 0) {\n            this.autoBatchTimeout = setTimeout(() => {\n                this.autoBatchTimeout = undefined;\n                void this.drainAutoBatchQueue(sizeLimitBytes);\n            }, this.autoBatchAggregationDelayMs);\n        }\n        return itemPromise;\n    }\n    async _getServerInfo() {\n        const response = await (0, fetch_js_1._getFetchImplementation)()(`${this.apiUrl}/info`, {\n            method: \"GET\",\n            headers: { Accept: \"application/json\" },\n            signal: AbortSignal.timeout(SERVER_INFO_REQUEST_TIMEOUT),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"get server info\");\n        return response.json();\n    }\n    async _ensureServerInfo() {\n        if (this._getServerInfoPromise === undefined) {\n            this._getServerInfoPromise = (async () => {\n                if (this._serverInfo === undefined) {\n                    try {\n                        this._serverInfo = await this._getServerInfo();\n                    }\n                    catch (e) {\n                        console.warn(`[WARNING]: LangSmith failed to fetch info on supported operations. Falling back to batch operations and default limits.`);\n                    }\n                }\n                return this._serverInfo ?? {};\n            })();\n        }\n        return this._getServerInfoPromise.then((serverInfo) => {\n            if (this._serverInfo === undefined) {\n                this._getServerInfoPromise = undefined;\n            }\n            return serverInfo;\n        });\n    }\n    async _getSettings() {\n        if (!this.settings) {\n            this.settings = this._get(\"/settings\");\n        }\n        return await this.settings;\n    }\n    /**\n     * Flushes current queued traces.\n     */\n    async flush() {\n        const sizeLimitBytes = await this._getBatchSizeLimitBytes();\n        await this.drainAutoBatchQueue(sizeLimitBytes);\n    }\n    async createRun(run) {\n        if (!this._filterForSampling([run]).length) {\n            return;\n        }\n        const headers = { ...this.headers, \"Content-Type\": \"application/json\" };\n        const session_name = run.project_name;\n        delete run.project_name;\n        const runCreate = this.prepareRunCreateOrUpdateInputs({\n            session_name,\n            ...run,\n            start_time: run.start_time ?? Date.now(),\n        });\n        if (this.autoBatchTracing &&\n            runCreate.trace_id !== undefined &&\n            runCreate.dotted_order !== undefined) {\n            void this.processRunOperation({\n                action: \"create\",\n                item: runCreate,\n            }).catch(console.error);\n            return;\n        }\n        const mergedRunCreateParam = mergeRuntimeEnvIntoRunCreate(runCreate);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs`, {\n            method: \"POST\",\n            headers,\n            body: (0, index_js_2.serialize)(mergedRunCreateParam),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create run\", true);\n    }\n    /**\n     * Batch ingest/upsert multiple runs in the Langsmith system.\n     * @param runs\n     */\n    async batchIngestRuns({ runCreates, runUpdates, }) {\n        if (runCreates === undefined && runUpdates === undefined) {\n            return;\n        }\n        let preparedCreateParams = runCreates?.map((create) => this.prepareRunCreateOrUpdateInputs(create)) ?? [];\n        let preparedUpdateParams = runUpdates?.map((update) => this.prepareRunCreateOrUpdateInputs(update)) ?? [];\n        if (preparedCreateParams.length > 0 && preparedUpdateParams.length > 0) {\n            const createById = preparedCreateParams.reduce((params, run) => {\n                if (!run.id) {\n                    return params;\n                }\n                params[run.id] = run;\n                return params;\n            }, {});\n            const standaloneUpdates = [];\n            for (const updateParam of preparedUpdateParams) {\n                if (updateParam.id !== undefined && createById[updateParam.id]) {\n                    createById[updateParam.id] = {\n                        ...createById[updateParam.id],\n                        ...updateParam,\n                    };\n                }\n                else {\n                    standaloneUpdates.push(updateParam);\n                }\n            }\n            preparedCreateParams = Object.values(createById);\n            preparedUpdateParams = standaloneUpdates;\n        }\n        const rawBatch = {\n            post: preparedCreateParams,\n            patch: preparedUpdateParams,\n        };\n        if (!rawBatch.post.length && !rawBatch.patch.length) {\n            return;\n        }\n        const batchChunks = {\n            post: [],\n            patch: [],\n        };\n        for (const k of [\"post\", \"patch\"]) {\n            const key = k;\n            const batchItems = rawBatch[key].reverse();\n            let batchItem = batchItems.pop();\n            while (batchItem !== undefined) {\n                // Type is wrong but this is a deprecated code path anyway\n                batchChunks[key].push(batchItem);\n                batchItem = batchItems.pop();\n            }\n        }\n        if (batchChunks.post.length > 0 || batchChunks.patch.length > 0) {\n            await this._postBatchIngestRuns((0, index_js_2.serialize)(batchChunks));\n        }\n    }\n    async _postBatchIngestRuns(body) {\n        const headers = {\n            ...this.headers,\n            \"Content-Type\": \"application/json\",\n            Accept: \"application/json\",\n        };\n        const response = await this.batchIngestCaller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/batch`, {\n            method: \"POST\",\n            headers,\n            body: body,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"batch create run\", true);\n    }\n    /**\n     * Batch ingest/upsert multiple runs in the Langsmith system.\n     * @param runs\n     */\n    async multipartIngestRuns({ runCreates, runUpdates, }) {\n        if (runCreates === undefined && runUpdates === undefined) {\n            return;\n        }\n        // transform and convert to dicts\n        const allAttachments = {};\n        let preparedCreateParams = [];\n        for (const create of runCreates ?? []) {\n            const preparedCreate = this.prepareRunCreateOrUpdateInputs(create);\n            if (preparedCreate.id !== undefined &&\n                preparedCreate.attachments !== undefined) {\n                allAttachments[preparedCreate.id] = preparedCreate.attachments;\n            }\n            delete preparedCreate.attachments;\n            preparedCreateParams.push(preparedCreate);\n        }\n        let preparedUpdateParams = [];\n        for (const update of runUpdates ?? []) {\n            preparedUpdateParams.push(this.prepareRunCreateOrUpdateInputs(update));\n        }\n        // require trace_id and dotted_order\n        const invalidRunCreate = preparedCreateParams.find((runCreate) => {\n            return (runCreate.trace_id === undefined || runCreate.dotted_order === undefined);\n        });\n        if (invalidRunCreate !== undefined) {\n            throw new Error(`Multipart ingest requires \"trace_id\" and \"dotted_order\" to be set when creating a run`);\n        }\n        const invalidRunUpdate = preparedUpdateParams.find((runUpdate) => {\n            return (runUpdate.trace_id === undefined || runUpdate.dotted_order === undefined);\n        });\n        if (invalidRunUpdate !== undefined) {\n            throw new Error(`Multipart ingest requires \"trace_id\" and \"dotted_order\" to be set when updating a run`);\n        }\n        // combine post and patch dicts where possible\n        if (preparedCreateParams.length > 0 && preparedUpdateParams.length > 0) {\n            const createById = preparedCreateParams.reduce((params, run) => {\n                if (!run.id) {\n                    return params;\n                }\n                params[run.id] = run;\n                return params;\n            }, {});\n            const standaloneUpdates = [];\n            for (const updateParam of preparedUpdateParams) {\n                if (updateParam.id !== undefined && createById[updateParam.id]) {\n                    createById[updateParam.id] = {\n                        ...createById[updateParam.id],\n                        ...updateParam,\n                    };\n                }\n                else {\n                    standaloneUpdates.push(updateParam);\n                }\n            }\n            preparedCreateParams = Object.values(createById);\n            preparedUpdateParams = standaloneUpdates;\n        }\n        if (preparedCreateParams.length === 0 &&\n            preparedUpdateParams.length === 0) {\n            return;\n        }\n        // send the runs in multipart requests\n        const accumulatedContext = [];\n        const accumulatedParts = [];\n        for (const [method, payloads] of [\n            [\"post\", preparedCreateParams],\n            [\"patch\", preparedUpdateParams],\n        ]) {\n            for (const originalPayload of payloads) {\n                // collect fields to be sent as separate parts\n                const { inputs, outputs, events, attachments, ...payload } = originalPayload;\n                const fields = { inputs, outputs, events };\n                // encode the main run payload\n                const stringifiedPayload = (0, index_js_2.serialize)(payload);\n                accumulatedParts.push({\n                    name: `${method}.${payload.id}`,\n                    payload: new Blob([stringifiedPayload], {\n                        type: `application/json; length=${stringifiedPayload.length}`, // encoding=gzip\n                    }),\n                });\n                // encode the fields we collected\n                for (const [key, value] of Object.entries(fields)) {\n                    if (value === undefined) {\n                        continue;\n                    }\n                    const stringifiedValue = (0, index_js_2.serialize)(value);\n                    accumulatedParts.push({\n                        name: `${method}.${payload.id}.${key}`,\n                        payload: new Blob([stringifiedValue], {\n                            type: `application/json; length=${stringifiedValue.length}`,\n                        }),\n                    });\n                }\n                // encode the attachments\n                if (payload.id !== undefined) {\n                    const attachments = allAttachments[payload.id];\n                    if (attachments) {\n                        delete allAttachments[payload.id];\n                        for (const [name, attachment] of Object.entries(attachments)) {\n                            let contentType;\n                            let content;\n                            if (Array.isArray(attachment)) {\n                                [contentType, content] = attachment;\n                            }\n                            else {\n                                contentType = attachment.mimeType;\n                                content = attachment.data;\n                            }\n                            // Validate that the attachment name doesn't contain a '.'\n                            if (name.includes(\".\")) {\n                                console.warn(`Skipping attachment '${name}' for run ${payload.id}: Invalid attachment name. ` +\n                                    `Attachment names must not contain periods ('.'). Please rename the attachment and try again.`);\n                                continue;\n                            }\n                            accumulatedParts.push({\n                                name: `attachment.${payload.id}.${name}`,\n                                payload: new Blob([content], {\n                                    type: `${contentType}; length=${content.byteLength}`,\n                                }),\n                            });\n                        }\n                    }\n                }\n                // compute context\n                accumulatedContext.push(`trace=${payload.trace_id},id=${payload.id}`);\n            }\n        }\n        await this._sendMultipartRequest(accumulatedParts, accumulatedContext.join(\"; \"));\n    }\n    async _sendMultipartRequest(parts, context) {\n        try {\n            // Create multipart form data manually using Blobs\n            const boundary = \"----LangSmithFormBoundary\" + Math.random().toString(36).slice(2);\n            const chunks = [];\n            for (const part of parts) {\n                // Add field boundary\n                chunks.push(new Blob([`--${boundary}\\r\\n`]));\n                chunks.push(new Blob([\n                    `Content-Disposition: form-data; name=\"${part.name}\"\\r\\n`,\n                    `Content-Type: ${part.payload.type}\\r\\n\\r\\n`,\n                ]));\n                chunks.push(part.payload);\n                chunks.push(new Blob([\"\\r\\n\"]));\n            }\n            // Add final boundary\n            chunks.push(new Blob([`--${boundary}--\\r\\n`]));\n            // Combine all chunks into a single Blob\n            const body = new Blob(chunks);\n            // Convert Blob to ArrayBuffer for compatibility\n            const arrayBuffer = await body.arrayBuffer();\n            const res = await this.batchIngestCaller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/multipart`, {\n                method: \"POST\",\n                headers: {\n                    ...this.headers,\n                    \"Content-Type\": `multipart/form-data; boundary=${boundary}`,\n                },\n                body: arrayBuffer,\n                signal: AbortSignal.timeout(this.timeout_ms),\n                ...this.fetchOptions,\n            });\n            await (0, error_js_1.raiseForStatus)(res, \"ingest multipart runs\", true);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        }\n        catch (e) {\n            console.warn(`${e.message.trim()}\\n\\nContext: ${context}`);\n        }\n    }\n    async updateRun(runId, run) {\n        (0, _uuid_js_1.assertUuid)(runId);\n        if (run.inputs) {\n            run.inputs = this.processInputs(run.inputs);\n        }\n        if (run.outputs) {\n            run.outputs = this.processOutputs(run.outputs);\n        }\n        // TODO: Untangle types\n        const data = { ...run, id: runId };\n        if (!this._filterForSampling([data], true).length) {\n            return;\n        }\n        if (this.autoBatchTracing &&\n            data.trace_id !== undefined &&\n            data.dotted_order !== undefined) {\n            if (run.end_time !== undefined &&\n                data.parent_run_id === undefined &&\n                this.blockOnRootRunFinalization &&\n                !this.manualFlushMode) {\n                // Trigger batches as soon as a root trace ends and wait to ensure trace finishes\n                // in serverless environments.\n                await this.processRunOperation({ action: \"update\", item: data }).catch(console.error);\n                return;\n            }\n            else {\n                void this.processRunOperation({ action: \"update\", item: data }).catch(console.error);\n            }\n            return;\n        }\n        const headers = { ...this.headers, \"Content-Type\": \"application/json\" };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/${runId}`, {\n            method: \"PATCH\",\n            headers,\n            body: (0, index_js_2.serialize)(run),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update run\", true);\n    }\n    async readRun(runId, { loadChildRuns } = { loadChildRuns: false }) {\n        (0, _uuid_js_1.assertUuid)(runId);\n        let run = await this._get(`/runs/${runId}`);\n        if (loadChildRuns && run.child_run_ids) {\n            run = await this._loadChildRuns(run);\n        }\n        return run;\n    }\n    async getRunUrl({ runId, run, projectOpts, }) {\n        if (run !== undefined) {\n            let sessionId;\n            if (run.session_id) {\n                sessionId = run.session_id;\n            }\n            else if (projectOpts?.projectName) {\n                sessionId = (await this.readProject({ projectName: projectOpts?.projectName })).id;\n            }\n            else if (projectOpts?.projectId) {\n                sessionId = projectOpts?.projectId;\n            }\n            else {\n                const project = await this.readProject({\n                    projectName: (0, env_js_1.getLangSmithEnvironmentVariable)(\"PROJECT\") || \"default\",\n                });\n                sessionId = project.id;\n            }\n            const tenantId = await this._getTenantId();\n            return `${this.getHostUrl()}/o/${tenantId}/projects/p/${sessionId}/r/${run.id}?poll=true`;\n        }\n        else if (runId !== undefined) {\n            const run_ = await this.readRun(runId);\n            if (!run_.app_path) {\n                throw new Error(`Run ${runId} has no app_path`);\n            }\n            const baseUrl = this.getHostUrl();\n            return `${baseUrl}${run_.app_path}`;\n        }\n        else {\n            throw new Error(\"Must provide either runId or run\");\n        }\n    }\n    async _loadChildRuns(run) {\n        const childRuns = await toArray(this.listRuns({ id: run.child_run_ids }));\n        const treemap = {};\n        const runs = {};\n        // TODO: make dotted order required when the migration finishes\n        childRuns.sort((a, b) => (a?.dotted_order ?? \"\").localeCompare(b?.dotted_order ?? \"\"));\n        for (const childRun of childRuns) {\n            if (childRun.parent_run_id === null ||\n                childRun.parent_run_id === undefined) {\n                throw new Error(`Child run ${childRun.id} has no parent`);\n            }\n            if (!(childRun.parent_run_id in treemap)) {\n                treemap[childRun.parent_run_id] = [];\n            }\n            treemap[childRun.parent_run_id].push(childRun);\n            runs[childRun.id] = childRun;\n        }\n        run.child_runs = treemap[run.id] || [];\n        for (const runId in treemap) {\n            if (runId !== run.id) {\n                runs[runId].child_runs = treemap[runId];\n            }\n        }\n        return run;\n    }\n    /**\n     * List runs from the LangSmith server.\n     * @param projectId - The ID of the project to filter by.\n     * @param projectName - The name of the project to filter by.\n     * @param parentRunId - The ID of the parent run to filter by.\n     * @param traceId - The ID of the trace to filter by.\n     * @param referenceExampleId - The ID of the reference example to filter by.\n     * @param startTime - The start time to filter by.\n     * @param isRoot - Indicates whether to only return root runs.\n     * @param runType - The run type to filter by.\n     * @param error - Indicates whether to filter by error runs.\n     * @param id - The ID of the run to filter by.\n     * @param query - The query string to filter by.\n     * @param filter - The filter string to apply to the run spans.\n     * @param traceFilter - The filter string to apply on the root run of the trace.\n     * @param treeFilter - The filter string to apply on other runs in the trace.\n     * @param limit - The maximum number of runs to retrieve.\n     * @returns {AsyncIterable<Run>} - The runs.\n     *\n     * @example\n     * // List all runs in a project\n     * const projectRuns = client.listRuns({ projectName: \"<your_project>\" });\n     *\n     * @example\n     * // List LLM and Chat runs in the last 24 hours\n     * const todaysLLMRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   start_time: new Date(Date.now() - 24 * 60 * 60 * 1000),\n     *   run_type: \"llm\",\n     * });\n     *\n     * @example\n     * // List traces in a project\n     * const rootRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   execution_order: 1,\n     * });\n     *\n     * @example\n     * // List runs without errors\n     * const correctRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   error: false,\n     * });\n     *\n     * @example\n     * // List runs by run ID\n     * const runIds = [\n     *   \"a36092d2-4ad5-4fb4-9c0d-0dba9a2ed836\",\n     *   \"9398e6be-964f-4aa4-8ae9-ad78cd4b7074\",\n     * ];\n     * const selectedRuns = client.listRuns({ run_ids: runIds });\n     *\n     * @example\n     * // List all \"chain\" type runs that took more than 10 seconds and had `total_tokens` greater than 5000\n     * const chainRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   filter: 'and(eq(run_type, \"chain\"), gt(latency, 10), gt(total_tokens, 5000))',\n     * });\n     *\n     * @example\n     * // List all runs called \"extractor\" whose root of the trace was assigned feedback \"user_score\" score of 1\n     * const goodExtractorRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   filter: 'eq(name, \"extractor\")',\n     *   traceFilter: 'and(eq(feedback_key, \"user_score\"), eq(feedback_score, 1))',\n     * });\n     *\n     * @example\n     * // List all runs that started after a specific timestamp and either have \"error\" not equal to null or a \"Correctness\" feedback score equal to 0\n     * const complexRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   filter: 'and(gt(start_time, \"2023-07-15T12:34:56Z\"), or(neq(error, null), and(eq(feedback_key, \"Correctness\"), eq(feedback_score, 0.0))))',\n     * });\n     *\n     * @example\n     * // List all runs where `tags` include \"experimental\" or \"beta\" and `latency` is greater than 2 seconds\n     * const taggedRuns = client.listRuns({\n     *   projectName: \"<your_project>\",\n     *   filter: 'and(or(has(tags, \"experimental\"), has(tags, \"beta\")), gt(latency, 2))',\n     * });\n     */\n    async *listRuns(props) {\n        const { projectId, projectName, parentRunId, traceId, referenceExampleId, startTime, executionOrder, isRoot, runType, error, id, query, filter, traceFilter, treeFilter, limit, select, } = props;\n        let projectIds = [];\n        if (projectId) {\n            projectIds = Array.isArray(projectId) ? projectId : [projectId];\n        }\n        if (projectName) {\n            const projectNames = Array.isArray(projectName)\n                ? projectName\n                : [projectName];\n            const projectIds_ = await Promise.all(projectNames.map((name) => this.readProject({ projectName: name }).then((project) => project.id)));\n            projectIds.push(...projectIds_);\n        }\n        const default_select = [\n            \"app_path\",\n            \"child_run_ids\",\n            \"completion_cost\",\n            \"completion_tokens\",\n            \"dotted_order\",\n            \"end_time\",\n            \"error\",\n            \"events\",\n            \"extra\",\n            \"feedback_stats\",\n            \"first_token_time\",\n            \"id\",\n            \"inputs\",\n            \"name\",\n            \"outputs\",\n            \"parent_run_id\",\n            \"parent_run_ids\",\n            \"prompt_cost\",\n            \"prompt_tokens\",\n            \"reference_example_id\",\n            \"run_type\",\n            \"session_id\",\n            \"start_time\",\n            \"status\",\n            \"tags\",\n            \"total_cost\",\n            \"total_tokens\",\n            \"trace_id\",\n        ];\n        const body = {\n            session: projectIds.length ? projectIds : null,\n            run_type: runType,\n            reference_example: referenceExampleId,\n            query,\n            filter,\n            trace_filter: traceFilter,\n            tree_filter: treeFilter,\n            execution_order: executionOrder,\n            parent_run: parentRunId,\n            start_time: startTime ? startTime.toISOString() : null,\n            error,\n            id,\n            limit,\n            trace: traceId,\n            select: select ? select : default_select,\n            is_root: isRoot,\n        };\n        let runsYielded = 0;\n        for await (const runs of this._getCursorPaginatedList(\"/runs/query\", body)) {\n            if (limit) {\n                if (runsYielded >= limit) {\n                    break;\n                }\n                if (runs.length + runsYielded > limit) {\n                    const newRuns = runs.slice(0, limit - runsYielded);\n                    yield* newRuns;\n                    break;\n                }\n                runsYielded += runs.length;\n                yield* runs;\n            }\n            else {\n                yield* runs;\n            }\n        }\n    }\n    async getRunStats({ id, trace, parentRun, runType, projectNames, projectIds, referenceExampleIds, startTime, endTime, error, query, filter, traceFilter, treeFilter, isRoot, dataSourceType, }) {\n        let projectIds_ = projectIds || [];\n        if (projectNames) {\n            projectIds_ = [\n                ...(projectIds || []),\n                ...(await Promise.all(projectNames.map((name) => this.readProject({ projectName: name }).then((project) => project.id)))),\n            ];\n        }\n        const payload = {\n            id,\n            trace,\n            parent_run: parentRun,\n            run_type: runType,\n            session: projectIds_,\n            reference_example: referenceExampleIds,\n            start_time: startTime,\n            end_time: endTime,\n            error,\n            query,\n            filter,\n            trace_filter: traceFilter,\n            tree_filter: treeFilter,\n            is_root: isRoot,\n            data_source_type: dataSourceType,\n        };\n        // Remove undefined values from the payload\n        const filteredPayload = Object.fromEntries(Object.entries(payload).filter(([_, value]) => value !== undefined));\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/stats`, {\n            method: \"POST\",\n            headers: this.headers,\n            body: JSON.stringify(filteredPayload),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const result = await response.json();\n        return result;\n    }\n    async shareRun(runId, { shareId } = {}) {\n        const data = {\n            run_id: runId,\n            share_token: shareId || uuid.v4(),\n        };\n        (0, _uuid_js_1.assertUuid)(runId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/${runId}/share`, {\n            method: \"PUT\",\n            headers: this.headers,\n            body: JSON.stringify(data),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const result = await response.json();\n        if (result === null || !(\"share_token\" in result)) {\n            throw new Error(\"Invalid response from server\");\n        }\n        return `${this.getHostUrl()}/public/${result[\"share_token\"]}/r`;\n    }\n    async unshareRun(runId) {\n        (0, _uuid_js_1.assertUuid)(runId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/${runId}/share`, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"unshare run\", true);\n    }\n    async readRunSharedLink(runId) {\n        (0, _uuid_js_1.assertUuid)(runId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/runs/${runId}/share`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const result = await response.json();\n        if (result === null || !(\"share_token\" in result)) {\n            return undefined;\n        }\n        return `${this.getHostUrl()}/public/${result[\"share_token\"]}/r`;\n    }\n    async listSharedRuns(shareToken, { runIds, } = {}) {\n        const queryParams = new URLSearchParams({\n            share_token: shareToken,\n        });\n        if (runIds !== undefined) {\n            for (const runId of runIds) {\n                queryParams.append(\"id\", runId);\n            }\n        }\n        (0, _uuid_js_1.assertUuid)(shareToken);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/public/${shareToken}/runs${queryParams}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const runs = await response.json();\n        return runs;\n    }\n    async readDatasetSharedSchema(datasetId, datasetName) {\n        if (!datasetId && !datasetName) {\n            throw new Error(\"Either datasetId or datasetName must be given\");\n        }\n        if (!datasetId) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId = dataset.id;\n        }\n        (0, _uuid_js_1.assertUuid)(datasetId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${datasetId}/share`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const shareSchema = await response.json();\n        shareSchema.url = `${this.getHostUrl()}/public/${shareSchema.share_token}/d`;\n        return shareSchema;\n    }\n    async shareDataset(datasetId, datasetName) {\n        if (!datasetId && !datasetName) {\n            throw new Error(\"Either datasetId or datasetName must be given\");\n        }\n        if (!datasetId) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId = dataset.id;\n        }\n        const data = {\n            dataset_id: datasetId,\n        };\n        (0, _uuid_js_1.assertUuid)(datasetId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${datasetId}/share`, {\n            method: \"PUT\",\n            headers: this.headers,\n            body: JSON.stringify(data),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const shareSchema = await response.json();\n        shareSchema.url = `${this.getHostUrl()}/public/${shareSchema.share_token}/d`;\n        return shareSchema;\n    }\n    async unshareDataset(datasetId) {\n        (0, _uuid_js_1.assertUuid)(datasetId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${datasetId}/share`, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"unshare dataset\", true);\n    }\n    async readSharedDataset(shareToken) {\n        (0, _uuid_js_1.assertUuid)(shareToken);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/public/${shareToken}/datasets`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const dataset = await response.json();\n        return dataset;\n    }\n    /**\n     * Get shared examples.\n     *\n     * @param {string} shareToken The share token to get examples for. A share token is the UUID (or LangSmith URL, including UUID) generated when explicitly marking an example as public.\n     * @param {Object} [options] Additional options for listing the examples.\n     * @param {string[] | undefined} [options.exampleIds] A list of example IDs to filter by.\n     * @returns {Promise<Example[]>} The shared examples.\n     */\n    async listSharedExamples(shareToken, options) {\n        const params = {};\n        if (options?.exampleIds) {\n            params.id = options.exampleIds;\n        }\n        const urlParams = new URLSearchParams();\n        Object.entries(params).forEach(([key, value]) => {\n            if (Array.isArray(value)) {\n                value.forEach((v) => urlParams.append(key, v));\n            }\n            else {\n                urlParams.append(key, value);\n            }\n        });\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/public/${shareToken}/examples?${urlParams.toString()}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const result = await response.json();\n        if (!response.ok) {\n            if (\"detail\" in result) {\n                throw new Error(`Failed to list shared examples.\\nStatus: ${response.status}\\nMessage: ${result.detail.join(\"\\n\")}`);\n            }\n            throw new Error(`Failed to list shared examples: ${response.status} ${response.statusText}`);\n        }\n        return result.map((example) => ({\n            ...example,\n            _hostUrl: this.getHostUrl(),\n        }));\n    }\n    async createProject({ projectName, description = null, metadata = null, upsert = false, projectExtra = null, referenceDatasetId = null, }) {\n        const upsert_ = upsert ? `?upsert=true` : \"\";\n        const endpoint = `${this.apiUrl}/sessions${upsert_}`;\n        const extra = projectExtra || {};\n        if (metadata) {\n            extra[\"metadata\"] = metadata;\n        }\n        const body = {\n            name: projectName,\n            extra,\n            description,\n        };\n        if (referenceDatasetId !== null) {\n            body[\"reference_dataset_id\"] = referenceDatasetId;\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), endpoint, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(body),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create project\");\n        const result = await response.json();\n        return result;\n    }\n    async updateProject(projectId, { name = null, description = null, metadata = null, projectExtra = null, endTime = null, }) {\n        const endpoint = `${this.apiUrl}/sessions/${projectId}`;\n        let extra = projectExtra;\n        if (metadata) {\n            extra = { ...(extra || {}), metadata };\n        }\n        const body = {\n            name,\n            extra,\n            description,\n            end_time: endTime ? new Date(endTime).toISOString() : null,\n        };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), endpoint, {\n            method: \"PATCH\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(body),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update project\");\n        const result = await response.json();\n        return result;\n    }\n    async hasProject({ projectId, projectName, }) {\n        // TODO: Add a head request\n        let path = \"/sessions\";\n        const params = new URLSearchParams();\n        if (projectId !== undefined && projectName !== undefined) {\n            throw new Error(\"Must provide either projectName or projectId, not both\");\n        }\n        else if (projectId !== undefined) {\n            (0, _uuid_js_1.assertUuid)(projectId);\n            path += `/${projectId}`;\n        }\n        else if (projectName !== undefined) {\n            params.append(\"name\", projectName);\n        }\n        else {\n            throw new Error(\"Must provide projectName or projectId\");\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}${path}?${params}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        // consume the response body to release the connection\n        // https://undici.nodejs.org/#/?id=garbage-collection\n        try {\n            const result = await response.json();\n            if (!response.ok) {\n                return false;\n            }\n            // If it's OK and we're querying by name, need to check the list is not empty\n            if (Array.isArray(result)) {\n                return result.length > 0;\n            }\n            // projectId querying\n            return true;\n        }\n        catch (e) {\n            return false;\n        }\n    }\n    async readProject({ projectId, projectName, includeStats, }) {\n        let path = \"/sessions\";\n        const params = new URLSearchParams();\n        if (projectId !== undefined && projectName !== undefined) {\n            throw new Error(\"Must provide either projectName or projectId, not both\");\n        }\n        else if (projectId !== undefined) {\n            (0, _uuid_js_1.assertUuid)(projectId);\n            path += `/${projectId}`;\n        }\n        else if (projectName !== undefined) {\n            params.append(\"name\", projectName);\n        }\n        else {\n            throw new Error(\"Must provide projectName or projectId\");\n        }\n        if (includeStats !== undefined) {\n            params.append(\"include_stats\", includeStats.toString());\n        }\n        const response = await this._get(path, params);\n        let result;\n        if (Array.isArray(response)) {\n            if (response.length === 0) {\n                throw new Error(`Project[id=${projectId}, name=${projectName}] not found`);\n            }\n            result = response[0];\n        }\n        else {\n            result = response;\n        }\n        return result;\n    }\n    async getProjectUrl({ projectId, projectName, }) {\n        if (projectId === undefined && projectName === undefined) {\n            throw new Error(\"Must provide either projectName or projectId\");\n        }\n        const project = await this.readProject({ projectId, projectName });\n        const tenantId = await this._getTenantId();\n        return `${this.getHostUrl()}/o/${tenantId}/projects/p/${project.id}`;\n    }\n    async getDatasetUrl({ datasetId, datasetName, }) {\n        if (datasetId === undefined && datasetName === undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        const dataset = await this.readDataset({ datasetId, datasetName });\n        const tenantId = await this._getTenantId();\n        return `${this.getHostUrl()}/o/${tenantId}/datasets/${dataset.id}`;\n    }\n    async _getTenantId() {\n        if (this._tenantId !== null) {\n            return this._tenantId;\n        }\n        const queryParams = new URLSearchParams({ limit: \"1\" });\n        for await (const projects of this._getPaginated(\"/sessions\", queryParams)) {\n            this._tenantId = projects[0].tenant_id;\n            return projects[0].tenant_id;\n        }\n        throw new Error(\"No projects found to resolve tenant.\");\n    }\n    async *listProjects({ projectIds, name, nameContains, referenceDatasetId, referenceDatasetName, referenceFree, metadata, } = {}) {\n        const params = new URLSearchParams();\n        if (projectIds !== undefined) {\n            for (const projectId of projectIds) {\n                params.append(\"id\", projectId);\n            }\n        }\n        if (name !== undefined) {\n            params.append(\"name\", name);\n        }\n        if (nameContains !== undefined) {\n            params.append(\"name_contains\", nameContains);\n        }\n        if (referenceDatasetId !== undefined) {\n            params.append(\"reference_dataset\", referenceDatasetId);\n        }\n        else if (referenceDatasetName !== undefined) {\n            const dataset = await this.readDataset({\n                datasetName: referenceDatasetName,\n            });\n            params.append(\"reference_dataset\", dataset.id);\n        }\n        if (referenceFree !== undefined) {\n            params.append(\"reference_free\", referenceFree.toString());\n        }\n        if (metadata !== undefined) {\n            params.append(\"metadata\", JSON.stringify(metadata));\n        }\n        for await (const projects of this._getPaginated(\"/sessions\", params)) {\n            yield* projects;\n        }\n    }\n    async deleteProject({ projectId, projectName, }) {\n        let projectId_;\n        if (projectId === undefined && projectName === undefined) {\n            throw new Error(\"Must provide projectName or projectId\");\n        }\n        else if (projectId !== undefined && projectName !== undefined) {\n            throw new Error(\"Must provide either projectName or projectId, not both\");\n        }\n        else if (projectId === undefined) {\n            projectId_ = (await this.readProject({ projectName })).id;\n        }\n        else {\n            projectId_ = projectId;\n        }\n        (0, _uuid_js_1.assertUuid)(projectId_);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/sessions/${projectId_}`, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, `delete session ${projectId_} (${projectName})`, true);\n    }\n    async uploadCsv({ csvFile, fileName, inputKeys, outputKeys, description, dataType, name, }) {\n        const url = `${this.apiUrl}/datasets/upload`;\n        const formData = new FormData();\n        formData.append(\"file\", csvFile, fileName);\n        inputKeys.forEach((key) => {\n            formData.append(\"input_keys\", key);\n        });\n        outputKeys.forEach((key) => {\n            formData.append(\"output_keys\", key);\n        });\n        if (description) {\n            formData.append(\"description\", description);\n        }\n        if (dataType) {\n            formData.append(\"data_type\", dataType);\n        }\n        if (name) {\n            formData.append(\"name\", name);\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), url, {\n            method: \"POST\",\n            headers: this.headers,\n            body: formData,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"upload CSV\");\n        const result = await response.json();\n        return result;\n    }\n    async createDataset(name, { description, dataType, inputsSchema, outputsSchema, metadata, } = {}) {\n        const body = {\n            name,\n            description,\n            extra: metadata ? { metadata } : undefined,\n        };\n        if (dataType) {\n            body.data_type = dataType;\n        }\n        if (inputsSchema) {\n            body.inputs_schema_definition = inputsSchema;\n        }\n        if (outputsSchema) {\n            body.outputs_schema_definition = outputsSchema;\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(body),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create dataset\");\n        const result = await response.json();\n        return result;\n    }\n    async readDataset({ datasetId, datasetName, }) {\n        let path = \"/datasets\";\n        // limit to 1 result\n        const params = new URLSearchParams({ limit: \"1\" });\n        if (datasetId !== undefined && datasetName !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId !== undefined) {\n            (0, _uuid_js_1.assertUuid)(datasetId);\n            path += `/${datasetId}`;\n        }\n        else if (datasetName !== undefined) {\n            params.append(\"name\", datasetName);\n        }\n        else {\n            throw new Error(\"Must provide datasetName or datasetId\");\n        }\n        const response = await this._get(path, params);\n        let result;\n        if (Array.isArray(response)) {\n            if (response.length === 0) {\n                throw new Error(`Dataset[id=${datasetId}, name=${datasetName}] not found`);\n            }\n            result = response[0];\n        }\n        else {\n            result = response;\n        }\n        return result;\n    }\n    async hasDataset({ datasetId, datasetName, }) {\n        try {\n            await this.readDataset({ datasetId, datasetName });\n            return true;\n        }\n        catch (e) {\n            if (\n            // eslint-disable-next-line no-instanceof/no-instanceof\n            e instanceof Error &&\n                e.message.toLocaleLowerCase().includes(\"not found\")) {\n                return false;\n            }\n            throw e;\n        }\n    }\n    async diffDatasetVersions({ datasetId, datasetName, fromVersion, toVersion, }) {\n        let datasetId_ = datasetId;\n        if (datasetId_ === undefined && datasetName === undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        else if (datasetId_ !== undefined && datasetName !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId_ === undefined) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId_ = dataset.id;\n        }\n        const urlParams = new URLSearchParams({\n            from_version: typeof fromVersion === \"string\"\n                ? fromVersion\n                : fromVersion.toISOString(),\n            to_version: typeof toVersion === \"string\" ? toVersion : toVersion.toISOString(),\n        });\n        const response = await this._get(`/datasets/${datasetId_}/versions/diff`, urlParams);\n        return response;\n    }\n    async readDatasetOpenaiFinetuning({ datasetId, datasetName, }) {\n        const path = \"/datasets\";\n        if (datasetId !== undefined) {\n            // do nothing\n        }\n        else if (datasetName !== undefined) {\n            datasetId = (await this.readDataset({ datasetName })).id;\n        }\n        else {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        const response = await this._getResponse(`${path}/${datasetId}/openai_ft`);\n        const datasetText = await response.text();\n        const dataset = datasetText\n            .trim()\n            .split(\"\\n\")\n            .map((line) => JSON.parse(line));\n        return dataset;\n    }\n    async *listDatasets({ limit = 100, offset = 0, datasetIds, datasetName, datasetNameContains, metadata, } = {}) {\n        const path = \"/datasets\";\n        const params = new URLSearchParams({\n            limit: limit.toString(),\n            offset: offset.toString(),\n        });\n        if (datasetIds !== undefined) {\n            for (const id_ of datasetIds) {\n                params.append(\"id\", id_);\n            }\n        }\n        if (datasetName !== undefined) {\n            params.append(\"name\", datasetName);\n        }\n        if (datasetNameContains !== undefined) {\n            params.append(\"name_contains\", datasetNameContains);\n        }\n        if (metadata !== undefined) {\n            params.append(\"metadata\", JSON.stringify(metadata));\n        }\n        for await (const datasets of this._getPaginated(path, params)) {\n            yield* datasets;\n        }\n    }\n    /**\n     * Update a dataset\n     * @param props The dataset details to update\n     * @returns The updated dataset\n     */\n    async updateDataset(props) {\n        const { datasetId, datasetName, ...update } = props;\n        if (!datasetId && !datasetName) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        const _datasetId = datasetId ?? (await this.readDataset({ datasetName })).id;\n        (0, _uuid_js_1.assertUuid)(_datasetId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${_datasetId}`, {\n            method: \"PATCH\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(update),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update dataset\");\n        return (await response.json());\n    }\n    /**\n     * Updates a tag on a dataset.\n     *\n     * If the tag is already assigned to a different version of this dataset,\n     * the tag will be moved to the new version. The as_of parameter is used to\n     * determine which version of the dataset to apply the new tags to.\n     *\n     * It must be an exact version of the dataset to succeed. You can\n     * use the \"readDatasetVersion\" method to find the exact version\n     * to apply the tags to.\n     * @param params.datasetId The ID of the dataset to update. Must be provided if \"datasetName\" is not provided.\n     * @param params.datasetName The name of the dataset to update. Must be provided if \"datasetId\" is not provided.\n     * @param params.asOf The timestamp of the dataset to apply the new tags to.\n     * @param params.tag The new tag to apply to the dataset.\n     */\n    async updateDatasetTag(props) {\n        const { datasetId, datasetName, asOf, tag } = props;\n        if (!datasetId && !datasetName) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        const _datasetId = datasetId ?? (await this.readDataset({ datasetName })).id;\n        (0, _uuid_js_1.assertUuid)(_datasetId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${_datasetId}/tags`, {\n            method: \"PUT\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({\n                as_of: typeof asOf === \"string\" ? asOf : asOf.toISOString(),\n                tag,\n            }),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update dataset tags\");\n    }\n    async deleteDataset({ datasetId, datasetName, }) {\n        let path = \"/datasets\";\n        let datasetId_ = datasetId;\n        if (datasetId !== undefined && datasetName !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetName !== undefined) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId_ = dataset.id;\n        }\n        if (datasetId_ !== undefined) {\n            (0, _uuid_js_1.assertUuid)(datasetId_);\n            path += `/${datasetId_}`;\n        }\n        else {\n            throw new Error(\"Must provide datasetName or datasetId\");\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), this.apiUrl + path, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, `delete ${path}`);\n        await response.json();\n    }\n    async indexDataset({ datasetId, datasetName, tag, }) {\n        let datasetId_ = datasetId;\n        if (!datasetId_ && !datasetName) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        else if (datasetId_ && datasetName) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (!datasetId_) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId_ = dataset.id;\n        }\n        (0, _uuid_js_1.assertUuid)(datasetId_);\n        const data = {\n            tag: tag,\n        };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${datasetId_}/index`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(data),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"index dataset\");\n        await response.json();\n    }\n    /**\n     * Lets you run a similarity search query on a dataset.\n     *\n     * Requires the dataset to be indexed. Please see the `indexDataset` method to set up indexing.\n     *\n     * @param inputs      The input on which to run the similarity search. Must have the\n     *                    same schema as the dataset.\n     *\n     * @param datasetId   The dataset to search for similar examples.\n     *\n     * @param limit       The maximum number of examples to return. Will return the top `limit` most\n     *                    similar examples in order of most similar to least similar. If no similar\n     *                    examples are found, random examples will be returned.\n     *\n     * @param filter      A filter string to apply to the search. Only examples will be returned that\n     *                    match the filter string. Some examples of filters\n     *\n     *                    - eq(metadata.mykey, \"value\")\n     *                    - and(neq(metadata.my.nested.key, \"value\"), neq(metadata.mykey, \"value\"))\n     *                    - or(eq(metadata.mykey, \"value\"), eq(metadata.mykey, \"othervalue\"))\n     *\n     * @returns           A list of similar examples.\n     *\n     *\n     * @example\n     * dataset_id = \"123e4567-e89b-12d3-a456-426614174000\"\n     * inputs = {\"text\": \"How many people live in Berlin?\"}\n     * limit = 5\n     * examples = await client.similarExamples(inputs, dataset_id, limit)\n     */\n    async similarExamples(inputs, datasetId, limit, { filter, } = {}) {\n        const data = {\n            limit: limit,\n            inputs: inputs,\n        };\n        if (filter !== undefined) {\n            data[\"filter\"] = filter;\n        }\n        (0, _uuid_js_1.assertUuid)(datasetId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${datasetId}/search`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(data),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"fetch similar examples\");\n        const result = await response.json();\n        return result[\"examples\"];\n    }\n    async createExample(inputsOrUpdate, outputs, options) {\n        if (isExampleCreate(inputsOrUpdate)) {\n            if (outputs !== undefined || options !== undefined) {\n                throw new Error(\"Cannot provide outputs or options when using ExampleCreate object\");\n            }\n        }\n        let datasetId_ = outputs ? options?.datasetId : inputsOrUpdate.dataset_id;\n        const datasetName_ = outputs\n            ? options?.datasetName\n            : inputsOrUpdate.dataset_name;\n        if (datasetId_ === undefined && datasetName_ === undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        else if (datasetId_ !== undefined && datasetName_ !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId_ === undefined) {\n            const dataset = await this.readDataset({ datasetName: datasetName_ });\n            datasetId_ = dataset.id;\n        }\n        const createdAt_ = (outputs ? options?.createdAt : inputsOrUpdate.created_at) || new Date();\n        let data;\n        if (!isExampleCreate(inputsOrUpdate)) {\n            data = {\n                inputs: inputsOrUpdate,\n                outputs,\n                created_at: createdAt_?.toISOString(),\n                id: options?.exampleId,\n                metadata: options?.metadata,\n                split: options?.split,\n                source_run_id: options?.sourceRunId,\n                use_source_run_io: options?.useSourceRunIO,\n                use_source_run_attachments: options?.useSourceRunAttachments,\n                attachments: options?.attachments,\n            };\n        }\n        else {\n            data = inputsOrUpdate;\n        }\n        const response = await this._uploadExamplesMultipart(datasetId_, [data]);\n        const example = await this.readExample(response.example_ids?.[0] ?? uuid.v4());\n        return example;\n    }\n    async createExamples(propsOrUploads) {\n        if (Array.isArray(propsOrUploads)) {\n            if (propsOrUploads.length === 0) {\n                return [];\n            }\n            const uploads = propsOrUploads;\n            let datasetId_ = uploads[0].dataset_id;\n            const datasetName_ = uploads[0].dataset_name;\n            if (datasetId_ === undefined && datasetName_ === undefined) {\n                throw new Error(\"Must provide either datasetName or datasetId\");\n            }\n            else if (datasetId_ !== undefined && datasetName_ !== undefined) {\n                throw new Error(\"Must provide either datasetName or datasetId, not both\");\n            }\n            else if (datasetId_ === undefined) {\n                const dataset = await this.readDataset({ datasetName: datasetName_ });\n                datasetId_ = dataset.id;\n            }\n            const response = await this._uploadExamplesMultipart(datasetId_, uploads);\n            const examples = await Promise.all(response.example_ids.map((id) => this.readExample(id)));\n            return examples;\n        }\n        const { inputs, outputs, metadata, splits, sourceRunIds, useSourceRunIOs, useSourceRunAttachments, attachments, exampleIds, datasetId, datasetName, } = propsOrUploads;\n        if (inputs === undefined) {\n            throw new Error(\"Must provide inputs when using legacy parameters\");\n        }\n        let datasetId_ = datasetId;\n        const datasetName_ = datasetName;\n        if (datasetId_ === undefined && datasetName_ === undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId\");\n        }\n        else if (datasetId_ !== undefined && datasetName_ !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId_ === undefined) {\n            const dataset = await this.readDataset({ datasetName: datasetName_ });\n            datasetId_ = dataset.id;\n        }\n        const formattedExamples = inputs.map((input, idx) => {\n            return {\n                dataset_id: datasetId_,\n                inputs: input,\n                outputs: outputs?.[idx],\n                metadata: metadata?.[idx],\n                split: splits?.[idx],\n                id: exampleIds?.[idx],\n                attachments: attachments?.[idx],\n                source_run_id: sourceRunIds?.[idx],\n                use_source_run_io: useSourceRunIOs?.[idx],\n                use_source_run_attachments: useSourceRunAttachments?.[idx],\n            };\n        });\n        const response = await this._uploadExamplesMultipart(datasetId_, formattedExamples);\n        const examples = await Promise.all(response.example_ids.map((id) => this.readExample(id)));\n        return examples;\n    }\n    async createLLMExample(input, generation, options) {\n        return this.createExample({ input }, { output: generation }, options);\n    }\n    async createChatExample(input, generations, options) {\n        const finalInput = input.map((message) => {\n            if ((0, messages_js_1.isLangChainMessage)(message)) {\n                return (0, messages_js_1.convertLangChainMessageToExample)(message);\n            }\n            return message;\n        });\n        const finalOutput = (0, messages_js_1.isLangChainMessage)(generations)\n            ? (0, messages_js_1.convertLangChainMessageToExample)(generations)\n            : generations;\n        return this.createExample({ input: finalInput }, { output: finalOutput }, options);\n    }\n    async readExample(exampleId) {\n        (0, _uuid_js_1.assertUuid)(exampleId);\n        const path = `/examples/${exampleId}`;\n        const rawExample = await this._get(path);\n        const { attachment_urls, ...rest } = rawExample;\n        const example = rest;\n        if (attachment_urls) {\n            example.attachments = Object.entries(attachment_urls).reduce((acc, [key, value]) => {\n                acc[key.slice(\"attachment.\".length)] = {\n                    presigned_url: value.presigned_url,\n                    mime_type: value.mime_type,\n                };\n                return acc;\n            }, {});\n        }\n        return example;\n    }\n    async *listExamples({ datasetId, datasetName, exampleIds, asOf, splits, inlineS3Urls, metadata, limit, offset, filter, includeAttachments, } = {}) {\n        let datasetId_;\n        if (datasetId !== undefined && datasetName !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId !== undefined) {\n            datasetId_ = datasetId;\n        }\n        else if (datasetName !== undefined) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId_ = dataset.id;\n        }\n        else {\n            throw new Error(\"Must provide a datasetName or datasetId\");\n        }\n        const params = new URLSearchParams({ dataset: datasetId_ });\n        const dataset_version = asOf\n            ? typeof asOf === \"string\"\n                ? asOf\n                : asOf?.toISOString()\n            : undefined;\n        if (dataset_version) {\n            params.append(\"as_of\", dataset_version);\n        }\n        const inlineS3Urls_ = inlineS3Urls ?? true;\n        params.append(\"inline_s3_urls\", inlineS3Urls_.toString());\n        if (exampleIds !== undefined) {\n            for (const id_ of exampleIds) {\n                params.append(\"id\", id_);\n            }\n        }\n        if (splits !== undefined) {\n            for (const split of splits) {\n                params.append(\"splits\", split);\n            }\n        }\n        if (metadata !== undefined) {\n            const serializedMetadata = JSON.stringify(metadata);\n            params.append(\"metadata\", serializedMetadata);\n        }\n        if (limit !== undefined) {\n            params.append(\"limit\", limit.toString());\n        }\n        if (offset !== undefined) {\n            params.append(\"offset\", offset.toString());\n        }\n        if (filter !== undefined) {\n            params.append(\"filter\", filter);\n        }\n        if (includeAttachments === true) {\n            [\"attachment_urls\", \"outputs\", \"metadata\"].forEach((field) => params.append(\"select\", field));\n        }\n        let i = 0;\n        for await (const rawExamples of this._getPaginated(\"/examples\", params)) {\n            for (const rawExample of rawExamples) {\n                const { attachment_urls, ...rest } = rawExample;\n                const example = rest;\n                if (attachment_urls) {\n                    example.attachments = Object.entries(attachment_urls).reduce((acc, [key, value]) => {\n                        acc[key.slice(\"attachment.\".length)] = {\n                            presigned_url: value.presigned_url,\n                            mime_type: value.mime_type || undefined,\n                        };\n                        return acc;\n                    }, {});\n                }\n                yield example;\n                i++;\n            }\n            if (limit !== undefined && i >= limit) {\n                break;\n            }\n        }\n    }\n    async deleteExample(exampleId) {\n        (0, _uuid_js_1.assertUuid)(exampleId);\n        const path = `/examples/${exampleId}`;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), this.apiUrl + path, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, `delete ${path}`);\n        await response.json();\n    }\n    async updateExample(exampleIdOrUpdate, update) {\n        let exampleId;\n        if (update) {\n            exampleId = exampleIdOrUpdate;\n        }\n        else {\n            exampleId = exampleIdOrUpdate.id;\n        }\n        (0, _uuid_js_1.assertUuid)(exampleId);\n        let updateToUse;\n        if (update) {\n            updateToUse = { id: exampleId, ...update };\n        }\n        else {\n            updateToUse = exampleIdOrUpdate;\n        }\n        let datasetId;\n        if (updateToUse.dataset_id !== undefined) {\n            datasetId = updateToUse.dataset_id;\n        }\n        else {\n            const example = await this.readExample(exampleId);\n            datasetId = example.dataset_id;\n        }\n        return this._updateExamplesMultipart(datasetId, [updateToUse]);\n    }\n    async updateExamples(update) {\n        // We will naively get dataset id from first example and assume it works for all\n        let datasetId;\n        if (update[0].dataset_id === undefined) {\n            const example = await this.readExample(update[0].id);\n            datasetId = example.dataset_id;\n        }\n        else {\n            datasetId = update[0].dataset_id;\n        }\n        return this._updateExamplesMultipart(datasetId, update);\n    }\n    /**\n     * Get dataset version by closest date or exact tag.\n     *\n     * Use this to resolve the nearest version to a given timestamp or for a given tag.\n     *\n     * @param options The options for getting the dataset version\n     * @param options.datasetId The ID of the dataset\n     * @param options.datasetName The name of the dataset\n     * @param options.asOf The timestamp of the dataset to retrieve\n     * @param options.tag The tag of the dataset to retrieve\n     * @returns The dataset version\n     */\n    async readDatasetVersion({ datasetId, datasetName, asOf, tag, }) {\n        let resolvedDatasetId;\n        if (!datasetId) {\n            const dataset = await this.readDataset({ datasetName });\n            resolvedDatasetId = dataset.id;\n        }\n        else {\n            resolvedDatasetId = datasetId;\n        }\n        (0, _uuid_js_1.assertUuid)(resolvedDatasetId);\n        if ((asOf && tag) || (!asOf && !tag)) {\n            throw new Error(\"Exactly one of asOf and tag must be specified.\");\n        }\n        const params = new URLSearchParams();\n        if (asOf !== undefined) {\n            params.append(\"as_of\", typeof asOf === \"string\" ? asOf : asOf.toISOString());\n        }\n        if (tag !== undefined) {\n            params.append(\"tag\", tag);\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${resolvedDatasetId}/version?${params.toString()}`, {\n            method: \"GET\",\n            headers: { ...this.headers },\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"read dataset version\");\n        return await response.json();\n    }\n    async listDatasetSplits({ datasetId, datasetName, asOf, }) {\n        let datasetId_;\n        if (datasetId === undefined && datasetName === undefined) {\n            throw new Error(\"Must provide dataset name or ID\");\n        }\n        else if (datasetId !== undefined && datasetName !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId === undefined) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId_ = dataset.id;\n        }\n        else {\n            datasetId_ = datasetId;\n        }\n        (0, _uuid_js_1.assertUuid)(datasetId_);\n        const params = new URLSearchParams();\n        const dataset_version = asOf\n            ? typeof asOf === \"string\"\n                ? asOf\n                : asOf?.toISOString()\n            : undefined;\n        if (dataset_version) {\n            params.append(\"as_of\", dataset_version);\n        }\n        const response = await this._get(`/datasets/${datasetId_}/splits`, params);\n        return response;\n    }\n    async updateDatasetSplits({ datasetId, datasetName, splitName, exampleIds, remove = false, }) {\n        let datasetId_;\n        if (datasetId === undefined && datasetName === undefined) {\n            throw new Error(\"Must provide dataset name or ID\");\n        }\n        else if (datasetId !== undefined && datasetName !== undefined) {\n            throw new Error(\"Must provide either datasetName or datasetId, not both\");\n        }\n        else if (datasetId === undefined) {\n            const dataset = await this.readDataset({ datasetName });\n            datasetId_ = dataset.id;\n        }\n        else {\n            datasetId_ = datasetId;\n        }\n        (0, _uuid_js_1.assertUuid)(datasetId_);\n        const data = {\n            split_name: splitName,\n            examples: exampleIds.map((id) => {\n                (0, _uuid_js_1.assertUuid)(id);\n                return id;\n            }),\n            remove,\n        };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/${datasetId_}/splits`, {\n            method: \"PUT\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(data),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update dataset splits\", true);\n    }\n    /**\n     * @deprecated This method is deprecated and will be removed in future LangSmith versions, use `evaluate` from `langsmith/evaluation` instead.\n     */\n    async evaluateRun(run, evaluator, { sourceInfo, loadChildRuns, referenceExample, } = { loadChildRuns: false }) {\n        (0, warn_js_1.warnOnce)(\"This method is deprecated and will be removed in future LangSmith versions, use `evaluate` from `langsmith/evaluation` instead.\");\n        let run_;\n        if (typeof run === \"string\") {\n            run_ = await this.readRun(run, { loadChildRuns });\n        }\n        else if (typeof run === \"object\" && \"id\" in run) {\n            run_ = run;\n        }\n        else {\n            throw new Error(`Invalid run type: ${typeof run}`);\n        }\n        if (run_.reference_example_id !== null &&\n            run_.reference_example_id !== undefined) {\n            referenceExample = await this.readExample(run_.reference_example_id);\n        }\n        const feedbackResult = await evaluator.evaluateRun(run_, referenceExample);\n        const [_, feedbacks] = await this._logEvaluationFeedback(feedbackResult, run_, sourceInfo);\n        return feedbacks[0];\n    }\n    async createFeedback(runId, key, { score, value, correction, comment, sourceInfo, feedbackSourceType = \"api\", sourceRunId, feedbackId, feedbackConfig, projectId, comparativeExperimentId, }) {\n        if (!runId && !projectId) {\n            throw new Error(\"One of runId or projectId must be provided\");\n        }\n        if (runId && projectId) {\n            throw new Error(\"Only one of runId or projectId can be provided\");\n        }\n        const feedback_source = {\n            type: feedbackSourceType ?? \"api\",\n            metadata: sourceInfo ?? {},\n        };\n        if (sourceRunId !== undefined &&\n            feedback_source?.metadata !== undefined &&\n            !feedback_source.metadata[\"__run\"]) {\n            feedback_source.metadata[\"__run\"] = { run_id: sourceRunId };\n        }\n        if (feedback_source?.metadata !== undefined &&\n            feedback_source.metadata[\"__run\"]?.run_id !== undefined) {\n            (0, _uuid_js_1.assertUuid)(feedback_source.metadata[\"__run\"].run_id);\n        }\n        const feedback = {\n            id: feedbackId ?? uuid.v4(),\n            run_id: runId,\n            key,\n            score: _formatFeedbackScore(score),\n            value,\n            correction,\n            comment,\n            feedback_source: feedback_source,\n            comparative_experiment_id: comparativeExperimentId,\n            feedbackConfig,\n            session_id: projectId,\n        };\n        const url = `${this.apiUrl}/feedback`;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), url, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(feedback),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create feedback\", true);\n        return feedback;\n    }\n    async updateFeedback(feedbackId, { score, value, correction, comment, }) {\n        const feedbackUpdate = {};\n        if (score !== undefined && score !== null) {\n            feedbackUpdate[\"score\"] = _formatFeedbackScore(score);\n        }\n        if (value !== undefined && value !== null) {\n            feedbackUpdate[\"value\"] = value;\n        }\n        if (correction !== undefined && correction !== null) {\n            feedbackUpdate[\"correction\"] = correction;\n        }\n        if (comment !== undefined && comment !== null) {\n            feedbackUpdate[\"comment\"] = comment;\n        }\n        (0, _uuid_js_1.assertUuid)(feedbackId);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/feedback/${feedbackId}`, {\n            method: \"PATCH\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(feedbackUpdate),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update feedback\", true);\n    }\n    async readFeedback(feedbackId) {\n        (0, _uuid_js_1.assertUuid)(feedbackId);\n        const path = `/feedback/${feedbackId}`;\n        const response = await this._get(path);\n        return response;\n    }\n    async deleteFeedback(feedbackId) {\n        (0, _uuid_js_1.assertUuid)(feedbackId);\n        const path = `/feedback/${feedbackId}`;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), this.apiUrl + path, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, `delete ${path}`);\n        await response.json();\n    }\n    async *listFeedback({ runIds, feedbackKeys, feedbackSourceTypes, } = {}) {\n        const queryParams = new URLSearchParams();\n        if (runIds) {\n            queryParams.append(\"run\", runIds.join(\",\"));\n        }\n        if (feedbackKeys) {\n            for (const key of feedbackKeys) {\n                queryParams.append(\"key\", key);\n            }\n        }\n        if (feedbackSourceTypes) {\n            for (const type of feedbackSourceTypes) {\n                queryParams.append(\"source\", type);\n            }\n        }\n        for await (const feedbacks of this._getPaginated(\"/feedback\", queryParams)) {\n            yield* feedbacks;\n        }\n    }\n    /**\n     * Creates a presigned feedback token and URL.\n     *\n     * The token can be used to authorize feedback metrics without\n     * needing an API key. This is useful for giving browser-based\n     * applications the ability to submit feedback without needing\n     * to expose an API key.\n     *\n     * @param runId The ID of the run.\n     * @param feedbackKey The feedback key.\n     * @param options Additional options for the token.\n     * @param options.expiration The expiration time for the token.\n     *\n     * @returns A promise that resolves to a FeedbackIngestToken.\n     */\n    async createPresignedFeedbackToken(runId, feedbackKey, { expiration, feedbackConfig, } = {}) {\n        const body = {\n            run_id: runId,\n            feedback_key: feedbackKey,\n            feedback_config: feedbackConfig,\n        };\n        if (expiration) {\n            if (typeof expiration === \"string\") {\n                body[\"expires_at\"] = expiration;\n            }\n            else if (expiration?.hours || expiration?.minutes || expiration?.days) {\n                body[\"expires_in\"] = expiration;\n            }\n        }\n        else {\n            body[\"expires_in\"] = {\n                hours: 3,\n            };\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/feedback/tokens`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(body),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const result = await response.json();\n        return result;\n    }\n    async createComparativeExperiment({ name, experimentIds, referenceDatasetId, createdAt, description, metadata, id, }) {\n        if (experimentIds.length === 0) {\n            throw new Error(\"At least one experiment is required\");\n        }\n        if (!referenceDatasetId) {\n            referenceDatasetId = (await this.readProject({\n                projectId: experimentIds[0],\n            })).reference_dataset_id;\n        }\n        if (!referenceDatasetId == null) {\n            throw new Error(\"A reference dataset is required\");\n        }\n        const body = {\n            id,\n            name,\n            experiment_ids: experimentIds,\n            reference_dataset_id: referenceDatasetId,\n            description,\n            created_at: (createdAt ?? new Date())?.toISOString(),\n            extra: {},\n        };\n        if (metadata)\n            body.extra[\"metadata\"] = metadata;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/datasets/comparative`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(body),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        return await response.json();\n    }\n    /**\n     * Retrieves a list of presigned feedback tokens for a given run ID.\n     * @param runId The ID of the run.\n     * @returns An async iterable of FeedbackIngestToken objects.\n     */\n    async *listPresignedFeedbackTokens(runId) {\n        (0, _uuid_js_1.assertUuid)(runId);\n        const params = new URLSearchParams({ run_id: runId });\n        for await (const tokens of this._getPaginated(\"/feedback/tokens\", params)) {\n            yield* tokens;\n        }\n    }\n    _selectEvalResults(results) {\n        let results_;\n        if (\"results\" in results) {\n            results_ = results.results;\n        }\n        else if (Array.isArray(results)) {\n            results_ = results;\n        }\n        else {\n            results_ = [results];\n        }\n        return results_;\n    }\n    async _logEvaluationFeedback(evaluatorResponse, run, sourceInfo) {\n        const evalResults = this._selectEvalResults(evaluatorResponse);\n        const feedbacks = [];\n        for (const res of evalResults) {\n            let sourceInfo_ = sourceInfo || {};\n            if (res.evaluatorInfo) {\n                sourceInfo_ = { ...res.evaluatorInfo, ...sourceInfo_ };\n            }\n            let runId_ = null;\n            if (res.targetRunId) {\n                runId_ = res.targetRunId;\n            }\n            else if (run) {\n                runId_ = run.id;\n            }\n            feedbacks.push(await this.createFeedback(runId_, res.key, {\n                score: res.score,\n                value: res.value,\n                comment: res.comment,\n                correction: res.correction,\n                sourceInfo: sourceInfo_,\n                sourceRunId: res.sourceRunId,\n                feedbackConfig: res.feedbackConfig,\n                feedbackSourceType: \"model\",\n            }));\n        }\n        return [evalResults, feedbacks];\n    }\n    async logEvaluationFeedback(evaluatorResponse, run, sourceInfo) {\n        const [results] = await this._logEvaluationFeedback(evaluatorResponse, run, sourceInfo);\n        return results;\n    }\n    /**\n     * API for managing annotation queues\n     */\n    /**\n     * List the annotation queues on the LangSmith API.\n     * @param options - The options for listing annotation queues\n     * @param options.queueIds - The IDs of the queues to filter by\n     * @param options.name - The name of the queue to filter by\n     * @param options.nameContains - The substring that the queue name should contain\n     * @param options.limit - The maximum number of queues to return\n     * @returns An iterator of AnnotationQueue objects\n     */\n    async *listAnnotationQueues(options = {}) {\n        const { queueIds, name, nameContains, limit } = options;\n        const params = new URLSearchParams();\n        if (queueIds) {\n            queueIds.forEach((id, i) => {\n                (0, _uuid_js_1.assertUuid)(id, `queueIds[${i}]`);\n                params.append(\"ids\", id);\n            });\n        }\n        if (name)\n            params.append(\"name\", name);\n        if (nameContains)\n            params.append(\"name_contains\", nameContains);\n        params.append(\"limit\", (limit !== undefined ? Math.min(limit, 100) : 100).toString());\n        let count = 0;\n        for await (const queues of this._getPaginated(\"/annotation-queues\", params)) {\n            yield* queues;\n            count++;\n            if (limit !== undefined && count >= limit)\n                break;\n        }\n    }\n    /**\n     * Create an annotation queue on the LangSmith API.\n     * @param options - The options for creating an annotation queue\n     * @param options.name - The name of the annotation queue\n     * @param options.description - The description of the annotation queue\n     * @param options.queueId - The ID of the annotation queue\n     * @returns The created AnnotationQueue object\n     */\n    async createAnnotationQueue(options) {\n        const { name, description, queueId } = options;\n        const body = {\n            name,\n            description,\n            id: queueId || uuid.v4(),\n        };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/annotation-queues`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(Object.fromEntries(Object.entries(body).filter(([_, v]) => v !== undefined))),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create annotation queue\");\n        const data = await response.json();\n        return data;\n    }\n    /**\n     * Read an annotation queue with the specified queue ID.\n     * @param queueId - The ID of the annotation queue to read\n     * @returns The AnnotationQueue object\n     */\n    async readAnnotationQueue(queueId) {\n        // TODO: Replace when actual endpoint is added\n        const queueIteratorResult = await this.listAnnotationQueues({\n            queueIds: [queueId],\n        }).next();\n        if (queueIteratorResult.done) {\n            throw new Error(`Annotation queue with ID ${queueId} not found`);\n        }\n        return queueIteratorResult.value;\n    }\n    /**\n     * Update an annotation queue with the specified queue ID.\n     * @param queueId - The ID of the annotation queue to update\n     * @param options - The options for updating the annotation queue\n     * @param options.name - The new name for the annotation queue\n     * @param options.description - The new description for the annotation queue\n     */\n    async updateAnnotationQueue(queueId, options) {\n        const { name, description } = options;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, \"queueId\")}`, {\n            method: \"PATCH\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify({ name, description }),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update annotation queue\");\n    }\n    /**\n     * Delete an annotation queue with the specified queue ID.\n     * @param queueId - The ID of the annotation queue to delete\n     */\n    async deleteAnnotationQueue(queueId) {\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, \"queueId\")}`, {\n            method: \"DELETE\",\n            headers: { ...this.headers, Accept: \"application/json\" },\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"delete annotation queue\");\n    }\n    /**\n     * Add runs to an annotation queue with the specified queue ID.\n     * @param queueId - The ID of the annotation queue\n     * @param runIds - The IDs of the runs to be added to the annotation queue\n     */\n    async addRunsToAnnotationQueue(queueId, runIds) {\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, \"queueId\")}/runs`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(runIds.map((id, i) => (0, _uuid_js_1.assertUuid)(id, `runIds[${i}]`).toString())),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"add runs to annotation queue\");\n    }\n    /**\n     * Get a run from an annotation queue at the specified index.\n     * @param queueId - The ID of the annotation queue\n     * @param index - The index of the run to retrieve\n     * @returns A Promise that resolves to a RunWithAnnotationQueueInfo object\n     * @throws {Error} If the run is not found at the given index or for other API-related errors\n     */\n    async getRunFromAnnotationQueue(queueId, index) {\n        const baseUrl = `/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, \"queueId\")}/run`;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}${baseUrl}/${index}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"get run from annotation queue\");\n        return await response.json();\n    }\n    /**\n     * Delete a run from an an annotation queue.\n     * @param queueId - The ID of the annotation queue to delete the run from\n     * @param queueRunId - The ID of the run to delete from the annotation queue\n     */\n    async deleteRunFromAnnotationQueue(queueId, queueRunId) {\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, \"queueId\")}/runs/${(0, _uuid_js_1.assertUuid)(queueRunId, \"queueRunId\")}`, {\n            method: \"DELETE\",\n            headers: { ...this.headers, Accept: \"application/json\" },\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"delete run from annotation queue\");\n    }\n    /**\n     * Get the size of an annotation queue.\n     * @param queueId - The ID of the annotation queue\n     */\n    async getSizeFromAnnotationQueue(queueId) {\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/annotation-queues/${(0, _uuid_js_1.assertUuid)(queueId, \"queueId\")}/size`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"get size from annotation queue\");\n        return await response.json();\n    }\n    async _currentTenantIsOwner(owner) {\n        const settings = await this._getSettings();\n        return owner == \"-\" || settings.tenant_handle === owner;\n    }\n    async _ownerConflictError(action, owner) {\n        const settings = await this._getSettings();\n        return new Error(`Cannot ${action} for another tenant.\\n\n      Current tenant: ${settings.tenant_handle}\\n\n      Requested tenant: ${owner}`);\n    }\n    async _getLatestCommitHash(promptOwnerAndName) {\n        const res = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/commits/${promptOwnerAndName}/?limit=${1}&offset=${0}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        const json = await res.json();\n        if (!res.ok) {\n            const detail = typeof json.detail === \"string\"\n                ? json.detail\n                : JSON.stringify(json.detail);\n            const error = new Error(`Error ${res.status}: ${res.statusText}\\n${detail}`);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            error.statusCode = res.status;\n            throw error;\n        }\n        if (json.commits.length === 0) {\n            return undefined;\n        }\n        return json.commits[0].commit_hash;\n    }\n    async _likeOrUnlikePrompt(promptIdentifier, like) {\n        const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/likes/${owner}/${promptName}`, {\n            method: \"POST\",\n            body: JSON.stringify({ like: like }),\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, `${like ? \"like\" : \"unlike\"} prompt`);\n        return await response.json();\n    }\n    async _getPromptUrl(promptIdentifier) {\n        const [owner, promptName, commitHash] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        if (!(await this._currentTenantIsOwner(owner))) {\n            if (commitHash !== \"latest\") {\n                return `${this.getHostUrl()}/hub/${owner}/${promptName}/${commitHash.substring(0, 8)}`;\n            }\n            else {\n                return `${this.getHostUrl()}/hub/${owner}/${promptName}`;\n            }\n        }\n        else {\n            const settings = await this._getSettings();\n            if (commitHash !== \"latest\") {\n                return `${this.getHostUrl()}/prompts/${promptName}/${commitHash.substring(0, 8)}?organizationId=${settings.id}`;\n            }\n            else {\n                return `${this.getHostUrl()}/prompts/${promptName}?organizationId=${settings.id}`;\n            }\n        }\n    }\n    async promptExists(promptIdentifier) {\n        const prompt = await this.getPrompt(promptIdentifier);\n        return !!prompt;\n    }\n    async likePrompt(promptIdentifier) {\n        return this._likeOrUnlikePrompt(promptIdentifier, true);\n    }\n    async unlikePrompt(promptIdentifier) {\n        return this._likeOrUnlikePrompt(promptIdentifier, false);\n    }\n    async *listCommits(promptOwnerAndName) {\n        for await (const commits of this._getPaginated(`/commits/${promptOwnerAndName}/`, new URLSearchParams(), (res) => res.commits)) {\n            yield* commits;\n        }\n    }\n    async *listPrompts(options) {\n        const params = new URLSearchParams();\n        params.append(\"sort_field\", options?.sortField ?? \"updated_at\");\n        params.append(\"sort_direction\", \"desc\");\n        params.append(\"is_archived\", (!!options?.isArchived).toString());\n        if (options?.isPublic !== undefined) {\n            params.append(\"is_public\", options.isPublic.toString());\n        }\n        if (options?.query) {\n            params.append(\"query\", options.query);\n        }\n        for await (const prompts of this._getPaginated(\"/repos\", params, (res) => res.repos)) {\n            yield* prompts;\n        }\n    }\n    async getPrompt(promptIdentifier) {\n        const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/repos/${owner}/${promptName}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        if (response.status === 404) {\n            return null;\n        }\n        await (0, error_js_1.raiseForStatus)(response, \"get prompt\");\n        const result = await response.json();\n        if (result.repo) {\n            return result.repo;\n        }\n        else {\n            return null;\n        }\n    }\n    async createPrompt(promptIdentifier, options) {\n        const settings = await this._getSettings();\n        if (options?.isPublic && !settings.tenant_handle) {\n            throw new Error(`Cannot create a public prompt without first\\n\n        creating a LangChain Hub handle. \n        You can add a handle by creating a public prompt at:\\n\n        https://smith.langchain.com/prompts`);\n        }\n        const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        if (!(await this._currentTenantIsOwner(owner))) {\n            throw await this._ownerConflictError(\"create a prompt\", owner);\n        }\n        const data = {\n            repo_handle: promptName,\n            ...(options?.description && { description: options.description }),\n            ...(options?.readme && { readme: options.readme }),\n            ...(options?.tags && { tags: options.tags }),\n            is_public: !!options?.isPublic,\n        };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/repos/`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(data),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create prompt\");\n        const { repo } = await response.json();\n        return repo;\n    }\n    async createCommit(promptIdentifier, object, options) {\n        if (!(await this.promptExists(promptIdentifier))) {\n            throw new Error(\"Prompt does not exist, you must create it first.\");\n        }\n        const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        const resolvedParentCommitHash = options?.parentCommitHash === \"latest\" || !options?.parentCommitHash\n            ? await this._getLatestCommitHash(`${owner}/${promptName}`)\n            : options?.parentCommitHash;\n        const payload = {\n            manifest: JSON.parse(JSON.stringify(object)),\n            parent_commit: resolvedParentCommitHash,\n        };\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/commits/${owner}/${promptName}`, {\n            method: \"POST\",\n            headers: { ...this.headers, \"Content-Type\": \"application/json\" },\n            body: JSON.stringify(payload),\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"create commit\");\n        const result = await response.json();\n        return this._getPromptUrl(`${owner}/${promptName}${result.commit_hash ? `:${result.commit_hash}` : \"\"}`);\n    }\n    /**\n     * Update examples with attachments using multipart form data.\n     * @param updates List of ExampleUpdateWithAttachments objects to upsert\n     * @returns Promise with the update response\n     */\n    async updateExamplesMultipart(datasetId, updates = []) {\n        return this._updateExamplesMultipart(datasetId, updates);\n    }\n    async _updateExamplesMultipart(datasetId, updates = []) {\n        if (!(await this._getMultiPartSupport())) {\n            throw new Error(\"Your LangSmith version does not allow using the multipart examples endpoint, please update to the latest version.\");\n        }\n        const formData = new FormData();\n        for (const example of updates) {\n            const exampleId = example.id;\n            // Prepare the main example body\n            const exampleBody = {\n                ...(example.metadata && { metadata: example.metadata }),\n                ...(example.split && { split: example.split }),\n            };\n            // Add main example data\n            const stringifiedExample = (0, index_js_2.serialize)(exampleBody);\n            const exampleBlob = new Blob([stringifiedExample], {\n                type: \"application/json\",\n            });\n            formData.append(exampleId, exampleBlob);\n            // Add inputs if present\n            if (example.inputs) {\n                const stringifiedInputs = (0, index_js_2.serialize)(example.inputs);\n                const inputsBlob = new Blob([stringifiedInputs], {\n                    type: \"application/json\",\n                });\n                formData.append(`${exampleId}.inputs`, inputsBlob);\n            }\n            // Add outputs if present\n            if (example.outputs) {\n                const stringifiedOutputs = (0, index_js_2.serialize)(example.outputs);\n                const outputsBlob = new Blob([stringifiedOutputs], {\n                    type: \"application/json\",\n                });\n                formData.append(`${exampleId}.outputs`, outputsBlob);\n            }\n            // Add attachments if present\n            if (example.attachments) {\n                for (const [name, attachment] of Object.entries(example.attachments)) {\n                    let mimeType;\n                    let data;\n                    if (Array.isArray(attachment)) {\n                        [mimeType, data] = attachment;\n                    }\n                    else {\n                        mimeType = attachment.mimeType;\n                        data = attachment.data;\n                    }\n                    const attachmentBlob = new Blob([data], {\n                        type: `${mimeType}; length=${data.byteLength}`,\n                    });\n                    formData.append(`${exampleId}.attachment.${name}`, attachmentBlob);\n                }\n            }\n            if (example.attachments_operations) {\n                const stringifiedAttachmentsOperations = (0, index_js_2.serialize)(example.attachments_operations);\n                const attachmentsOperationsBlob = new Blob([stringifiedAttachmentsOperations], {\n                    type: \"application/json\",\n                });\n                formData.append(`${exampleId}.attachments_operations`, attachmentsOperationsBlob);\n            }\n        }\n        const datasetIdToUse = datasetId ?? updates[0]?.dataset_id;\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/v1/platform/datasets/${datasetIdToUse}/examples`, {\n            method: \"PATCH\",\n            headers: this.headers,\n            body: formData,\n        });\n        const result = await response.json();\n        return result;\n    }\n    /**\n     * Upload examples with attachments using multipart form data.\n     * @param uploads List of ExampleUploadWithAttachments objects to upload\n     * @returns Promise with the upload response\n     * @deprecated This method is deprecated and will be removed in future LangSmith versions, please use `createExamples` instead\n     */\n    async uploadExamplesMultipart(datasetId, uploads = []) {\n        return this._uploadExamplesMultipart(datasetId, uploads);\n    }\n    async _uploadExamplesMultipart(datasetId, uploads = []) {\n        if (!(await this._getMultiPartSupport())) {\n            throw new Error(\"Your LangSmith version does not allow using the multipart examples endpoint, please update to the latest version.\");\n        }\n        const formData = new FormData();\n        for (const example of uploads) {\n            const exampleId = (example.id ?? uuid.v4()).toString();\n            // Prepare the main example body\n            const exampleBody = {\n                created_at: example.created_at,\n                ...(example.metadata && { metadata: example.metadata }),\n                ...(example.split && { split: example.split }),\n                ...(example.source_run_id && { source_run_id: example.source_run_id }),\n                ...(example.use_source_run_io && {\n                    use_source_run_io: example.use_source_run_io,\n                }),\n                ...(example.use_source_run_attachments && {\n                    use_source_run_attachments: example.use_source_run_attachments,\n                }),\n            };\n            // Add main example data\n            const stringifiedExample = (0, index_js_2.serialize)(exampleBody);\n            const exampleBlob = new Blob([stringifiedExample], {\n                type: \"application/json\",\n            });\n            formData.append(exampleId, exampleBlob);\n            // Add inputs if present\n            if (example.inputs) {\n                const stringifiedInputs = (0, index_js_2.serialize)(example.inputs);\n                const inputsBlob = new Blob([stringifiedInputs], {\n                    type: \"application/json\",\n                });\n                formData.append(`${exampleId}.inputs`, inputsBlob);\n            }\n            // Add outputs if present\n            if (example.outputs) {\n                const stringifiedOutputs = (0, index_js_2.serialize)(example.outputs);\n                const outputsBlob = new Blob([stringifiedOutputs], {\n                    type: \"application/json\",\n                });\n                formData.append(`${exampleId}.outputs`, outputsBlob);\n            }\n            // Add attachments if present\n            if (example.attachments) {\n                for (const [name, attachment] of Object.entries(example.attachments)) {\n                    let mimeType;\n                    let data;\n                    if (Array.isArray(attachment)) {\n                        [mimeType, data] = attachment;\n                    }\n                    else {\n                        mimeType = attachment.mimeType;\n                        data = attachment.data;\n                    }\n                    const attachmentBlob = new Blob([data], {\n                        type: `${mimeType}; length=${data.byteLength}`,\n                    });\n                    formData.append(`${exampleId}.attachment.${name}`, attachmentBlob);\n                }\n            }\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/v1/platform/datasets/${datasetId}/examples`, {\n            method: \"POST\",\n            headers: this.headers,\n            body: formData,\n        });\n        const result = await response.json();\n        return result;\n    }\n    async updatePrompt(promptIdentifier, options) {\n        if (!(await this.promptExists(promptIdentifier))) {\n            throw new Error(\"Prompt does not exist, you must create it first.\");\n        }\n        const [owner, promptName] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        if (!(await this._currentTenantIsOwner(owner))) {\n            throw await this._ownerConflictError(\"update a prompt\", owner);\n        }\n        const payload = {};\n        if (options?.description !== undefined)\n            payload.description = options.description;\n        if (options?.readme !== undefined)\n            payload.readme = options.readme;\n        if (options?.tags !== undefined)\n            payload.tags = options.tags;\n        if (options?.isPublic !== undefined)\n            payload.is_public = options.isPublic;\n        if (options?.isArchived !== undefined)\n            payload.is_archived = options.isArchived;\n        // Check if payload is empty\n        if (Object.keys(payload).length === 0) {\n            throw new Error(\"No valid update options provided\");\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/repos/${owner}/${promptName}`, {\n            method: \"PATCH\",\n            body: JSON.stringify(payload),\n            headers: {\n                ...this.headers,\n                \"Content-Type\": \"application/json\",\n            },\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"update prompt\");\n        return response.json();\n    }\n    async deletePrompt(promptIdentifier) {\n        if (!(await this.promptExists(promptIdentifier))) {\n            throw new Error(\"Prompt does not exist, you must create it first.\");\n        }\n        const [owner, promptName, _] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        if (!(await this._currentTenantIsOwner(owner))) {\n            throw await this._ownerConflictError(\"delete a prompt\", owner);\n        }\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/repos/${owner}/${promptName}`, {\n            method: \"DELETE\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        return await response.json();\n    }\n    async pullPromptCommit(promptIdentifier, options) {\n        const [owner, promptName, commitHash] = (0, prompts_js_1.parsePromptIdentifier)(promptIdentifier);\n        const response = await this.caller.call((0, fetch_js_1._getFetchImplementation)(), `${this.apiUrl}/commits/${owner}/${promptName}/${commitHash}${options?.includeModel ? \"?include_model=true\" : \"\"}`, {\n            method: \"GET\",\n            headers: this.headers,\n            signal: AbortSignal.timeout(this.timeout_ms),\n            ...this.fetchOptions,\n        });\n        await (0, error_js_1.raiseForStatus)(response, \"pull prompt commit\");\n        const result = await response.json();\n        return {\n            owner,\n            repo: promptName,\n            commit_hash: result.commit_hash,\n            manifest: result.manifest,\n            examples: result.examples,\n        };\n    }\n    /**\n     * This method should not be used directly, use `import { pull } from \"langchain/hub\"` instead.\n     * Using this method directly returns the JSON string of the prompt rather than a LangChain object.\n     * @private\n     */\n    async _pullPrompt(promptIdentifier, options) {\n        const promptObject = await this.pullPromptCommit(promptIdentifier, {\n            includeModel: options?.includeModel,\n        });\n        const prompt = JSON.stringify(promptObject.manifest);\n        return prompt;\n    }\n    async pushPrompt(promptIdentifier, options) {\n        // Create or update prompt metadata\n        if (await this.promptExists(promptIdentifier)) {\n            if (options && Object.keys(options).some((key) => key !== \"object\")) {\n                await this.updatePrompt(promptIdentifier, {\n                    description: options?.description,\n                    readme: options?.readme,\n                    tags: options?.tags,\n                    isPublic: options?.isPublic,\n                });\n            }\n        }\n        else {\n            await this.createPrompt(promptIdentifier, {\n                description: options?.description,\n                readme: options?.readme,\n                tags: options?.tags,\n                isPublic: options?.isPublic,\n            });\n        }\n        if (!options?.object) {\n            return await this._getPromptUrl(promptIdentifier);\n        }\n        // Create a commit with the new manifest\n        const url = await this.createCommit(promptIdentifier, options?.object, {\n            parentCommitHash: options?.parentCommitHash,\n        });\n        return url;\n    }\n    /**\n     * Clone a public dataset to your own langsmith tenant.\n     * This operation is idempotent. If you already have a dataset with the given name,\n     * this function will do nothing.\n  \n     * @param {string} tokenOrUrl The token of the public dataset to clone.\n     * @param {Object} [options] Additional options for cloning the dataset.\n     * @param {string} [options.sourceApiUrl] The URL of the langsmith server where the data is hosted. Defaults to the API URL of your current client.\n     * @param {string} [options.datasetName] The name of the dataset to create in your tenant. Defaults to the name of the public dataset.\n     * @returns {Promise<void>}\n     */\n    async clonePublicDataset(tokenOrUrl, options = {}) {\n        const { sourceApiUrl = this.apiUrl, datasetName } = options;\n        const [parsedApiUrl, tokenUuid] = this.parseTokenOrUrl(tokenOrUrl, sourceApiUrl);\n        const sourceClient = new Client({\n            apiUrl: parsedApiUrl,\n            // Placeholder API key not needed anymore in most cases, but\n            // some private deployments may have API key-based rate limiting\n            // that would cause this to fail if we provide no value.\n            apiKey: \"placeholder\",\n        });\n        const ds = await sourceClient.readSharedDataset(tokenUuid);\n        const finalDatasetName = datasetName || ds.name;\n        try {\n            if (await this.hasDataset({ datasetId: finalDatasetName })) {\n                console.log(`Dataset ${finalDatasetName} already exists in your tenant. Skipping.`);\n                return;\n            }\n        }\n        catch (_) {\n            // `.hasDataset` will throw an error if the dataset does not exist.\n            // no-op in that case\n        }\n        // Fetch examples first, then create the dataset\n        const examples = await sourceClient.listSharedExamples(tokenUuid);\n        const dataset = await this.createDataset(finalDatasetName, {\n            description: ds.description,\n            dataType: ds.data_type || \"kv\",\n            inputsSchema: ds.inputs_schema_definition ?? undefined,\n            outputsSchema: ds.outputs_schema_definition ?? undefined,\n        });\n        try {\n            await this.createExamples({\n                inputs: examples.map((e) => e.inputs),\n                outputs: examples.flatMap((e) => (e.outputs ? [e.outputs] : [])),\n                datasetId: dataset.id,\n            });\n        }\n        catch (e) {\n            console.error(`An error occurred while creating dataset ${finalDatasetName}. ` +\n                \"You should delete it manually.\");\n            throw e;\n        }\n    }\n    parseTokenOrUrl(urlOrToken, apiUrl, numParts = 2, kind = \"dataset\") {\n        // Try parsing as UUID\n        try {\n            (0, _uuid_js_1.assertUuid)(urlOrToken); // Will throw if it's not a UUID.\n            return [apiUrl, urlOrToken];\n        }\n        catch (_) {\n            // no-op if it's not a uuid\n        }\n        // Parse as URL\n        try {\n            const parsedUrl = new URL(urlOrToken);\n            const pathParts = parsedUrl.pathname\n                .split(\"/\")\n                .filter((part) => part !== \"\");\n            if (pathParts.length >= numParts) {\n                const tokenUuid = pathParts[pathParts.length - numParts];\n                return [apiUrl, tokenUuid];\n            }\n            else {\n                throw new Error(`Invalid public ${kind} URL: ${urlOrToken}`);\n            }\n        }\n        catch (error) {\n            throw new Error(`Invalid public ${kind} URL or token: ${urlOrToken}`);\n        }\n    }\n    /**\n     * Awaits all pending trace batches. Useful for environments where\n     * you need to be sure that all tracing requests finish before execution ends,\n     * such as serverless environments.\n     *\n     * @example\n     * ```\n     * import { Client } from \"langsmith\";\n     *\n     * const client = new Client();\n     *\n     * try {\n     *   // Tracing happens here\n     *   ...\n     * } finally {\n     *   await client.awaitPendingTraceBatches();\n     * }\n     * ```\n     *\n     * @returns A promise that resolves once all currently pending traces have sent.\n     */\n    awaitPendingTraceBatches() {\n        if (this.manualFlushMode) {\n            console.warn(\"[WARNING]: When tracing in manual flush mode, you must call `await client.flush()` manually to submit trace batches.\");\n            return Promise.resolve();\n        }\n        return Promise.all([\n            ...this.autoBatchQueue.items.map(({ itemPromise }) => itemPromise),\n            this.batchIngestCaller.queue.onIdle(),\n        ]);\n    }\n}\nexports.Client = Client;\nfunction isExampleCreate(input) {\n    return \"dataset_id\" in input || \"dataset_name\" in input;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.__version__ = exports.overrideFetchImplementation = exports.RunTree = exports.Client = void 0;\nvar client_js_1 = require(\"./client.cjs\");\nObject.defineProperty(exports, \"Client\", { enumerable: true, get: function () { return client_js_1.Client; } });\nvar run_trees_js_1 = require(\"./run_trees.cjs\");\nObject.defineProperty(exports, \"RunTree\", { enumerable: true, get: function () { return run_trees_js_1.RunTree; } });\nvar fetch_js_1 = require(\"./singletons/fetch.cjs\");\nObject.defineProperty(exports, \"overrideFetchImplementation\", { enumerable: true, get: function () { return fetch_js_1.overrideFetchImplementation; } });\n// Update using yarn bump-version\nexports.__version__ = \"0.3.15\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEnv = exports.isNode = exports.isDeno = exports.isJsDom = exports.isWebWorker = exports.isBrowser = void 0;\nexports.getRuntimeEnvironment = getRuntimeEnvironment;\nexports.getLangChainEnvVars = getLangChainEnvVars;\nexports.getLangChainEnvVarsMetadata = getLangChainEnvVarsMetadata;\nexports.getEnvironmentVariables = getEnvironmentVariables;\nexports.getEnvironmentVariable = getEnvironmentVariable;\nexports.getLangSmithEnvironmentVariable = getLangSmithEnvironmentVariable;\nexports.setEnvironmentVariable = setEnvironmentVariable;\nexports.getShas = getShas;\n// Inlined from https://github.com/flexdinesh/browser-or-node\nconst index_js_1 = require(\"../index.cjs\");\nlet globalEnv;\nconst isBrowser = () => typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\nexports.isBrowser = isBrowser;\nconst isWebWorker = () => typeof globalThis === \"object\" &&\n    globalThis.constructor &&\n    globalThis.constructor.name === \"DedicatedWorkerGlobalScope\";\nexports.isWebWorker = isWebWorker;\nconst isJsDom = () => (typeof window !== \"undefined\" && window.name === \"nodejs\") ||\n    (typeof navigator !== \"undefined\" &&\n        (navigator.userAgent.includes(\"Node.js\") ||\n            navigator.userAgent.includes(\"jsdom\")));\nexports.isJsDom = isJsDom;\n// Supabase Edge Function provides a `Deno` global object\n// without `version` property\nconst isDeno = () => typeof Deno !== \"undefined\";\nexports.isDeno = isDeno;\n// Mark not-as-node if in Supabase Edge Function\nconst isNode = () => typeof process !== \"undefined\" &&\n    typeof process.versions !== \"undefined\" &&\n    typeof process.versions.node !== \"undefined\" &&\n    !(0, exports.isDeno)();\nexports.isNode = isNode;\nconst getEnv = () => {\n    if (globalEnv) {\n        return globalEnv;\n    }\n    if ((0, exports.isBrowser)()) {\n        globalEnv = \"browser\";\n    }\n    else if ((0, exports.isNode)()) {\n        globalEnv = \"node\";\n    }\n    else if ((0, exports.isWebWorker)()) {\n        globalEnv = \"webworker\";\n    }\n    else if ((0, exports.isJsDom)()) {\n        globalEnv = \"jsdom\";\n    }\n    else if ((0, exports.isDeno)()) {\n        globalEnv = \"deno\";\n    }\n    else {\n        globalEnv = \"other\";\n    }\n    return globalEnv;\n};\nexports.getEnv = getEnv;\nlet runtimeEnvironment;\nfunction getRuntimeEnvironment() {\n    if (runtimeEnvironment === undefined) {\n        const env = (0, exports.getEnv)();\n        const releaseEnv = getShas();\n        runtimeEnvironment = {\n            library: \"langsmith\",\n            runtime: env,\n            sdk: \"langsmith-js\",\n            sdk_version: index_js_1.__version__,\n            ...releaseEnv,\n        };\n    }\n    return runtimeEnvironment;\n}\n/**\n * Retrieves the LangChain-specific environment variables from the current runtime environment.\n * Sensitive keys (containing the word \"key\", \"token\", or \"secret\") have their values redacted for security.\n *\n * @returns {Record<string, string>}\n *  - A record of LangChain-specific environment variables.\n */\nfunction getLangChainEnvVars() {\n    const allEnvVars = getEnvironmentVariables() || {};\n    const envVars = {};\n    for (const [key, value] of Object.entries(allEnvVars)) {\n        if (key.startsWith(\"LANGCHAIN_\") && typeof value === \"string\") {\n            envVars[key] = value;\n        }\n    }\n    for (const key in envVars) {\n        if ((key.toLowerCase().includes(\"key\") ||\n            key.toLowerCase().includes(\"secret\") ||\n            key.toLowerCase().includes(\"token\")) &&\n            typeof envVars[key] === \"string\") {\n            const value = envVars[key];\n            envVars[key] =\n                value.slice(0, 2) + \"*\".repeat(value.length - 4) + value.slice(-2);\n        }\n    }\n    return envVars;\n}\n/**\n * Retrieves the LangChain-specific metadata from the current runtime environment.\n *\n * @returns {Record<string, string>}\n *  - A record of LangChain-specific metadata environment variables.\n */\nfunction getLangChainEnvVarsMetadata() {\n    const allEnvVars = getEnvironmentVariables() || {};\n    const envVars = {};\n    const excluded = [\n        \"LANGCHAIN_API_KEY\",\n        \"LANGCHAIN_ENDPOINT\",\n        \"LANGCHAIN_TRACING_V2\",\n        \"LANGCHAIN_PROJECT\",\n        \"LANGCHAIN_SESSION\",\n        \"LANGSMITH_API_KEY\",\n        \"LANGSMITH_ENDPOINT\",\n        \"LANGSMITH_TRACING_V2\",\n        \"LANGSMITH_PROJECT\",\n        \"LANGSMITH_SESSION\",\n    ];\n    for (const [key, value] of Object.entries(allEnvVars)) {\n        if ((key.startsWith(\"LANGCHAIN_\") || key.startsWith(\"LANGSMITH_\")) &&\n            typeof value === \"string\" &&\n            !excluded.includes(key) &&\n            !key.toLowerCase().includes(\"key\") &&\n            !key.toLowerCase().includes(\"secret\") &&\n            !key.toLowerCase().includes(\"token\")) {\n            if (key === \"LANGCHAIN_REVISION_ID\") {\n                envVars[\"revision_id\"] = value;\n            }\n            else {\n                envVars[key] = value;\n            }\n        }\n    }\n    return envVars;\n}\n/**\n * Retrieves the environment variables from the current runtime environment.\n *\n * This function is designed to operate in a variety of JS environments,\n * including Node.js, Deno, browsers, etc.\n *\n * @returns {Record<string, string> | undefined}\n *  - A record of environment variables if available.\n *  - `undefined` if the environment does not support or allows access to environment variables.\n */\nfunction getEnvironmentVariables() {\n    try {\n        // Check for Node.js environment\n        // eslint-disable-next-line no-process-env\n        if (typeof process !== \"undefined\" && process.env) {\n            // eslint-disable-next-line no-process-env\n            return Object.entries(process.env).reduce((acc, [key, value]) => {\n                acc[key] = String(value);\n                return acc;\n            }, {});\n        }\n        // For browsers and other environments, we may not have direct access to env variables\n        // Return undefined or any other fallback as required.\n        return undefined;\n    }\n    catch (e) {\n        // Catch any errors that might occur while trying to access environment variables\n        return undefined;\n    }\n}\nfunction getEnvironmentVariable(name) {\n    // Certain Deno setups will throw an error if you try to access environment variables\n    // https://github.com/hwchase17/langchainjs/issues/1412\n    try {\n        return typeof process !== \"undefined\"\n            ? // eslint-disable-next-line no-process-env\n                process.env?.[name]\n            : undefined;\n    }\n    catch (e) {\n        return undefined;\n    }\n}\nfunction getLangSmithEnvironmentVariable(name) {\n    return (getEnvironmentVariable(`LANGSMITH_${name}`) ||\n        getEnvironmentVariable(`LANGCHAIN_${name}`));\n}\nfunction setEnvironmentVariable(name, value) {\n    if (typeof process !== \"undefined\") {\n        // eslint-disable-next-line no-process-env\n        process.env[name] = value;\n    }\n}\nlet cachedCommitSHAs;\n/**\n * Get the Git commit SHA from common environment variables\n * used by different CI/CD platforms.\n * @returns {string | undefined} The Git commit SHA or undefined if not found.\n */\nfunction getShas() {\n    if (cachedCommitSHAs !== undefined) {\n        return cachedCommitSHAs;\n    }\n    const common_release_envs = [\n        \"VERCEL_GIT_COMMIT_SHA\",\n        \"NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA\",\n        \"COMMIT_REF\",\n        \"RENDER_GIT_COMMIT\",\n        \"CI_COMMIT_SHA\",\n        \"CIRCLE_SHA1\",\n        \"CF_PAGES_COMMIT_SHA\",\n        \"REACT_APP_GIT_SHA\",\n        \"SOURCE_VERSION\",\n        \"GITHUB_SHA\",\n        \"TRAVIS_COMMIT\",\n        \"GIT_COMMIT\",\n        \"BUILD_VCS_NUMBER\",\n        \"bamboo_planRepository_revision\",\n        \"Build.SourceVersion\",\n        \"BITBUCKET_COMMIT\",\n        \"DRONE_COMMIT_SHA\",\n        \"SEMAPHORE_GIT_SHA\",\n        \"BUILDKITE_COMMIT\",\n    ];\n    const shas = {};\n    for (const env of common_release_envs) {\n        const envVar = getEnvironmentVariable(env);\n        if (envVar !== undefined) {\n            shas[env] = envVar;\n        }\n    }\n    cachedCommitSHAs = shas;\n    return shas;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isTracingEnabled = void 0;\nconst env_js_1 = require(\"./utils/env.cjs\");\nconst isTracingEnabled = (tracingEnabled) => {\n    if (tracingEnabled !== undefined) {\n        return tracingEnabled;\n    }\n    const envVars = [\"TRACING_V2\", \"TRACING\"];\n    return !!envVars.find((envVar) => (0, env_js_1.getLangSmithEnvironmentVariable)(envVar) === \"true\");\n};\nexports.isTracingEnabled = isTracingEnabled;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._LC_CONTEXT_VARIABLES_KEY = void 0;\nexports._LC_CONTEXT_VARIABLES_KEY = Symbol.for(\"lc:context_variables\");\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RunTree = void 0;\nexports.convertToDottedOrderFormat = convertToDottedOrderFormat;\nexports.isRunTree = isRunTree;\nexports.isRunnableConfigLike = isRunnableConfigLike;\nconst uuid = __importStar(require(\"uuid\"));\nconst env_js_1 = require(\"./utils/env.cjs\");\nconst client_js_1 = require(\"./client.cjs\");\nconst env_js_2 = require(\"./env.cjs\");\nconst warn_js_1 = require(\"./utils/warn.cjs\");\nconst constants_js_1 = require(\"./singletons/constants.cjs\");\nfunction stripNonAlphanumeric(input) {\n    return input.replace(/[-:.]/g, \"\");\n}\nfunction convertToDottedOrderFormat(epoch, runId, executionOrder = 1) {\n    // Date only has millisecond precision, so we use the microseconds to break\n    // possible ties, avoiding incorrect run order\n    const paddedOrder = executionOrder.toFixed(0).slice(0, 3).padStart(3, \"0\");\n    return (stripNonAlphanumeric(`${new Date(epoch).toISOString().slice(0, -1)}${paddedOrder}Z`) + runId);\n}\n/**\n * Baggage header information\n */\nclass Baggage {\n    constructor(metadata, tags) {\n        Object.defineProperty(this, \"metadata\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"tags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        this.metadata = metadata;\n        this.tags = tags;\n    }\n    static fromHeader(value) {\n        const items = value.split(\",\");\n        let metadata = {};\n        let tags = [];\n        for (const item of items) {\n            const [key, uriValue] = item.split(\"=\");\n            const value = decodeURIComponent(uriValue);\n            if (key === \"langsmith-metadata\") {\n                metadata = JSON.parse(value);\n            }\n            else if (key === \"langsmith-tags\") {\n                tags = value.split(\",\");\n            }\n        }\n        return new Baggage(metadata, tags);\n    }\n    toHeader() {\n        const items = [];\n        if (this.metadata && Object.keys(this.metadata).length > 0) {\n            items.push(`langsmith-metadata=${encodeURIComponent(JSON.stringify(this.metadata))}`);\n        }\n        if (this.tags && this.tags.length > 0) {\n            items.push(`langsmith-tags=${encodeURIComponent(this.tags.join(\",\"))}`);\n        }\n        return items.join(\",\");\n    }\n}\nclass RunTree {\n    constructor(originalConfig) {\n        Object.defineProperty(this, \"id\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"name\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"run_type\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"project_name\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"parent_run\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"child_runs\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"start_time\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"end_time\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"extra\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"tags\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"error\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"serialized\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"inputs\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"outputs\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"reference_example_id\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"client\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"events\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"trace_id\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"dotted_order\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"tracingEnabled\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"execution_order\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, \"child_execution_order\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        /**\n         * Attachments associated with the run.\n         * Each entry is a tuple of [mime_type, bytes]\n         */\n        Object.defineProperty(this, \"attachments\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // If you pass in a run tree directly, return a shallow clone\n        if (isRunTree(originalConfig)) {\n            Object.assign(this, { ...originalConfig });\n            return;\n        }\n        const defaultConfig = RunTree.getDefaultConfig();\n        const { metadata, ...config } = originalConfig;\n        const client = config.client ?? RunTree.getSharedClient();\n        const dedupedMetadata = {\n            ...metadata,\n            ...config?.extra?.metadata,\n        };\n        config.extra = { ...config.extra, metadata: dedupedMetadata };\n        Object.assign(this, { ...defaultConfig, ...config, client });\n        if (!this.trace_id) {\n            if (this.parent_run) {\n                this.trace_id = this.parent_run.trace_id ?? this.id;\n            }\n            else {\n                this.trace_id = this.id;\n            }\n        }\n        this.execution_order ??= 1;\n        this.child_execution_order ??= 1;\n        if (!this.dotted_order) {\n            const currentDottedOrder = convertToDottedOrderFormat(this.start_time, this.id, this.execution_order);\n            if (this.parent_run) {\n                this.dotted_order =\n                    this.parent_run.dotted_order + \".\" + currentDottedOrder;\n            }\n            else {\n                this.dotted_order = currentDottedOrder;\n            }\n        }\n    }\n    static getDefaultConfig() {\n        return {\n            id: uuid.v4(),\n            run_type: \"chain\",\n            project_name: (0, env_js_1.getLangSmithEnvironmentVariable)(\"PROJECT\") ??\n                (0, env_js_1.getEnvironmentVariable)(\"LANGCHAIN_SESSION\") ?? // TODO: Deprecate\n                \"default\",\n            child_runs: [],\n            api_url: (0, env_js_1.getEnvironmentVariable)(\"LANGCHAIN_ENDPOINT\") ?? \"http://localhost:1984\",\n            api_key: (0, env_js_1.getEnvironmentVariable)(\"LANGCHAIN_API_KEY\"),\n            caller_options: {},\n            start_time: Date.now(),\n            serialized: {},\n            inputs: {},\n            extra: {},\n        };\n    }\n    static getSharedClient() {\n        if (!RunTree.sharedClient) {\n            RunTree.sharedClient = new client_js_1.Client();\n        }\n        return RunTree.sharedClient;\n    }\n    createChild(config) {\n        const child_execution_order = this.child_execution_order + 1;\n        const child = new RunTree({\n            ...config,\n            parent_run: this,\n            project_name: this.project_name,\n            client: this.client,\n            tracingEnabled: this.tracingEnabled,\n            execution_order: child_execution_order,\n            child_execution_order: child_execution_order,\n        });\n        // Copy context vars over into the new run tree.\n        if (constants_js_1._LC_CONTEXT_VARIABLES_KEY in this) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            child[constants_js_1._LC_CONTEXT_VARIABLES_KEY] =\n                this[constants_js_1._LC_CONTEXT_VARIABLES_KEY];\n        }\n        const LC_CHILD = Symbol.for(\"lc:child_config\");\n        const presentConfig = config.extra?.[LC_CHILD] ??\n            this.extra[LC_CHILD];\n        // tracing for LangChain is defined by the _parentRunId and runMap of the tracer\n        if (isRunnableConfigLike(presentConfig)) {\n            const newConfig = { ...presentConfig };\n            const callbacks = isCallbackManagerLike(newConfig.callbacks)\n                ? newConfig.callbacks.copy?.()\n                : undefined;\n            if (callbacks) {\n                // update the parent run id\n                Object.assign(callbacks, { _parentRunId: child.id });\n                // only populate if we're in a newer LC.JS version\n                callbacks.handlers\n                    ?.find(isLangChainTracerLike)\n                    ?.updateFromRunTree?.(child);\n                newConfig.callbacks = callbacks;\n            }\n            child.extra[LC_CHILD] = newConfig;\n        }\n        // propagate child_execution_order upwards\n        const visited = new Set();\n        let current = this;\n        while (current != null && !visited.has(current.id)) {\n            visited.add(current.id);\n            current.child_execution_order = Math.max(current.child_execution_order, child_execution_order);\n            current = current.parent_run;\n        }\n        this.child_runs.push(child);\n        return child;\n    }\n    async end(outputs, error, endTime = Date.now(), metadata) {\n        this.outputs = this.outputs ?? outputs;\n        this.error = this.error ?? error;\n        this.end_time = this.end_time ?? endTime;\n        if (metadata && Object.keys(metadata).length > 0) {\n            this.extra = this.extra\n                ? { ...this.extra, metadata: { ...this.extra.metadata, ...metadata } }\n                : { metadata };\n        }\n    }\n    _convertToCreate(run, runtimeEnv, excludeChildRuns = true) {\n        const runExtra = run.extra ?? {};\n        if (!runExtra.runtime) {\n            runExtra.runtime = {};\n        }\n        if (runtimeEnv) {\n            for (const [k, v] of Object.entries(runtimeEnv)) {\n                if (!runExtra.runtime[k]) {\n                    runExtra.runtime[k] = v;\n                }\n            }\n        }\n        let child_runs;\n        let parent_run_id;\n        if (!excludeChildRuns) {\n            child_runs = run.child_runs.map((child_run) => this._convertToCreate(child_run, runtimeEnv, excludeChildRuns));\n            parent_run_id = undefined;\n        }\n        else {\n            parent_run_id = run.parent_run?.id;\n            child_runs = [];\n        }\n        const persistedRun = {\n            id: run.id,\n            name: run.name,\n            start_time: run.start_time,\n            end_time: run.end_time,\n            run_type: run.run_type,\n            reference_example_id: run.reference_example_id,\n            extra: runExtra,\n            serialized: run.serialized,\n            error: run.error,\n            inputs: run.inputs,\n            outputs: run.outputs,\n            session_name: run.project_name,\n            child_runs: child_runs,\n            parent_run_id: parent_run_id,\n            trace_id: run.trace_id,\n            dotted_order: run.dotted_order,\n            tags: run.tags,\n            attachments: run.attachments,\n        };\n        return persistedRun;\n    }\n    async postRun(excludeChildRuns = true) {\n        try {\n            const runtimeEnv = (0, env_js_1.getRuntimeEnvironment)();\n            const runCreate = await this._convertToCreate(this, runtimeEnv, true);\n            await this.client.createRun(runCreate);\n            if (!excludeChildRuns) {\n                (0, warn_js_1.warnOnce)(\"Posting with excludeChildRuns=false is deprecated and will be removed in a future version.\");\n                for (const childRun of this.child_runs) {\n                    await childRun.postRun(false);\n                }\n            }\n        }\n        catch (error) {\n            console.error(`Error in postRun for run ${this.id}:`, error);\n        }\n    }\n    async patchRun() {\n        try {\n            const runUpdate = {\n                end_time: this.end_time,\n                error: this.error,\n                inputs: this.inputs,\n                outputs: this.outputs,\n                parent_run_id: this.parent_run?.id,\n                reference_example_id: this.reference_example_id,\n                extra: this.extra,\n                events: this.events,\n                dotted_order: this.dotted_order,\n                trace_id: this.trace_id,\n                tags: this.tags,\n                attachments: this.attachments,\n            };\n            await this.client.updateRun(this.id, runUpdate);\n        }\n        catch (error) {\n            console.error(`Error in patchRun for run ${this.id}`, error);\n        }\n    }\n    toJSON() {\n        return this._convertToCreate(this, undefined, false);\n    }\n    /**\n     * Add an event to the run tree.\n     * @param event - A single event or string to add\n     */\n    addEvent(event) {\n        if (!this.events) {\n            this.events = [];\n        }\n        if (typeof event === \"string\") {\n            this.events.push({\n                name: \"event\",\n                time: new Date().toISOString(),\n                message: event,\n            });\n        }\n        else {\n            this.events.push({\n                ...event,\n                time: event.time ?? new Date().toISOString(),\n            });\n        }\n    }\n    static fromRunnableConfig(parentConfig, props) {\n        // We only handle the callback manager case for now\n        const callbackManager = parentConfig?.callbacks;\n        let parentRun;\n        let projectName;\n        let client;\n        let tracingEnabled = (0, env_js_2.isTracingEnabled)();\n        if (callbackManager) {\n            const parentRunId = callbackManager?.getParentRunId?.() ?? \"\";\n            const langChainTracer = callbackManager?.handlers?.find((handler) => handler?.name == \"langchain_tracer\");\n            parentRun = langChainTracer?.getRun?.(parentRunId);\n            projectName = langChainTracer?.projectName;\n            client = langChainTracer?.client;\n            tracingEnabled = tracingEnabled || !!langChainTracer;\n        }\n        if (!parentRun) {\n            return new RunTree({\n                ...props,\n                client,\n                tracingEnabled,\n                project_name: projectName,\n            });\n        }\n        const parentRunTree = new RunTree({\n            name: parentRun.name,\n            id: parentRun.id,\n            trace_id: parentRun.trace_id,\n            dotted_order: parentRun.dotted_order,\n            client,\n            tracingEnabled,\n            project_name: projectName,\n            tags: [\n                ...new Set((parentRun?.tags ?? []).concat(parentConfig?.tags ?? [])),\n            ],\n            extra: {\n                metadata: {\n                    ...parentRun?.extra?.metadata,\n                    ...parentConfig?.metadata,\n                },\n            },\n        });\n        return parentRunTree.createChild(props);\n    }\n    static fromDottedOrder(dottedOrder) {\n        return this.fromHeaders({ \"langsmith-trace\": dottedOrder });\n    }\n    static fromHeaders(headers, inheritArgs) {\n        const rawHeaders = \"get\" in headers && typeof headers.get === \"function\"\n            ? {\n                \"langsmith-trace\": headers.get(\"langsmith-trace\"),\n                baggage: headers.get(\"baggage\"),\n            }\n            : headers;\n        const headerTrace = rawHeaders[\"langsmith-trace\"];\n        if (!headerTrace || typeof headerTrace !== \"string\")\n            return undefined;\n        const parentDottedOrder = headerTrace.trim();\n        const parsedDottedOrder = parentDottedOrder.split(\".\").map((part) => {\n            const [strTime, uuid] = part.split(\"Z\");\n            return { strTime, time: Date.parse(strTime + \"Z\"), uuid };\n        });\n        const traceId = parsedDottedOrder[0].uuid;\n        const config = {\n            ...inheritArgs,\n            name: inheritArgs?.[\"name\"] ?? \"parent\",\n            run_type: inheritArgs?.[\"run_type\"] ?? \"chain\",\n            start_time: inheritArgs?.[\"start_time\"] ?? Date.now(),\n            id: parsedDottedOrder.at(-1)?.uuid,\n            trace_id: traceId,\n            dotted_order: parentDottedOrder,\n        };\n        if (rawHeaders[\"baggage\"] && typeof rawHeaders[\"baggage\"] === \"string\") {\n            const baggage = Baggage.fromHeader(rawHeaders[\"baggage\"]);\n            config.metadata = baggage.metadata;\n            config.tags = baggage.tags;\n        }\n        return new RunTree(config);\n    }\n    toHeaders(headers) {\n        const result = {\n            \"langsmith-trace\": this.dotted_order,\n            baggage: new Baggage(this.extra?.metadata, this.tags).toHeader(),\n        };\n        if (headers) {\n            for (const [key, value] of Object.entries(result)) {\n                headers.set(key, value);\n            }\n        }\n        return result;\n    }\n}\nexports.RunTree = RunTree;\nObject.defineProperty(RunTree, \"sharedClient\", {\n    enumerable: true,\n    configurable: true,\n    writable: true,\n    value: null\n});\nfunction isRunTree(x) {\n    return (x !== undefined &&\n        typeof x.createChild === \"function\" &&\n        typeof x.postRun === \"function\");\n}\nfunction isLangChainTracerLike(x) {\n    return (typeof x === \"object\" &&\n        x != null &&\n        typeof x.name === \"string\" &&\n        x.name === \"langchain_tracer\");\n}\nfunction containsLangChainTracerLike(x) {\n    return (Array.isArray(x) && x.some((callback) => isLangChainTracerLike(callback)));\n}\nfunction isCallbackManagerLike(x) {\n    return (typeof x === \"object\" &&\n        x != null &&\n        Array.isArray(x.handlers));\n}\nfunction isRunnableConfigLike(x) {\n    // Check that it's an object with a callbacks arg\n    // that has either a CallbackManagerLike object with a langchain tracer within it\n    // or an array with a LangChainTracerLike object within it\n    return (x !== undefined &&\n        typeof x.callbacks === \"object\" &&\n        // Callback manager with a langchain tracer\n        (containsLangChainTracerLike(x.callbacks?.handlers) ||\n            // Or it's an array with a LangChainTracerLike object within it\n            containsLangChainTracerLike(x.callbacks)));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ROOT = exports.getCurrentRunTree = exports.AsyncLocalStorageProviderSingleton = void 0;\nexports.withRunTree = withRunTree;\nexports.isTraceableFunction = isTraceableFunction;\nconst run_trees_js_1 = require(\"../run_trees.cjs\");\nclass MockAsyncLocalStorage {\n    getStore() {\n        return undefined;\n    }\n    run(_, callback) {\n        return callback();\n    }\n}\nconst TRACING_ALS_KEY = Symbol.for(\"ls:tracing_async_local_storage\");\nconst mockAsyncLocalStorage = new MockAsyncLocalStorage();\nclass AsyncLocalStorageProvider {\n    getInstance() {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return globalThis[TRACING_ALS_KEY] ?? mockAsyncLocalStorage;\n    }\n    initializeGlobalInstance(instance) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (globalThis[TRACING_ALS_KEY] === undefined) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            globalThis[TRACING_ALS_KEY] = instance;\n        }\n    }\n}\nexports.AsyncLocalStorageProviderSingleton = new AsyncLocalStorageProvider();\n/**\n * Return the current run tree from within a traceable-wrapped function.\n * Will throw an error if called outside of a traceable function.\n *\n * @returns The run tree for the given context.\n */\nconst getCurrentRunTree = () => {\n    const runTree = exports.AsyncLocalStorageProviderSingleton.getInstance().getStore();\n    if (!(0, run_trees_js_1.isRunTree)(runTree)) {\n        throw new Error([\n            \"Could not get the current run tree.\",\n            \"\",\n            \"Please make sure you are calling this method within a traceable function and that tracing is enabled.\",\n        ].join(\"\\n\"));\n    }\n    return runTree;\n};\nexports.getCurrentRunTree = getCurrentRunTree;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withRunTree(runTree, fn) {\n    const storage = exports.AsyncLocalStorageProviderSingleton.getInstance();\n    return new Promise((resolve, reject) => {\n        storage.run(runTree, () => void Promise.resolve(fn()).then(resolve).catch(reject));\n    });\n}\nexports.ROOT = Symbol.for(\"langsmith:traceable:root\");\nfunction isTraceableFunction(x\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n    return typeof x === \"function\" && \"langsmith:traceable\" in x;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isReadableStream = exports.isThenable = exports.isGenerator = exports.isIteratorLike = exports.isAsyncIterable = void 0;\nexports.isPromiseMethod = isPromiseMethod;\nexports.isKVMap = isKVMap;\nfunction isPromiseMethod(x) {\n    if (x === \"then\" || x === \"catch\" || x === \"finally\") {\n        return true;\n    }\n    return false;\n}\nfunction isKVMap(x) {\n    if (typeof x !== \"object\" || x == null) {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(x);\n    return ((prototype === null ||\n        prototype === Object.prototype ||\n        Object.getPrototypeOf(prototype) === null) &&\n        !(Symbol.toStringTag in x) &&\n        !(Symbol.iterator in x));\n}\nconst isAsyncIterable = (x) => x != null &&\n    typeof x === \"object\" &&\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    typeof x[Symbol.asyncIterator] === \"function\";\nexports.isAsyncIterable = isAsyncIterable;\nconst isIteratorLike = (x) => x != null &&\n    typeof x === \"object\" &&\n    \"next\" in x &&\n    typeof x.next === \"function\";\nexports.isIteratorLike = isIteratorLike;\nconst GeneratorFunction = function* () { }.constructor;\nconst isGenerator = (x) => \n// eslint-disable-next-line no-instanceof/no-instanceof\nx != null && typeof x === \"function\" && x instanceof GeneratorFunction;\nexports.isGenerator = isGenerator;\nconst isThenable = (x) => x != null &&\n    typeof x === \"object\" &&\n    \"then\" in x &&\n    typeof x.then === \"function\";\nexports.isThenable = isThenable;\nconst isReadableStream = (x) => x != null &&\n    typeof x === \"object\" &&\n    \"getReader\" in x &&\n    typeof x.getReader === \"function\";\nexports.isReadableStream = isReadableStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ROOT = exports.withRunTree = exports.isTraceableFunction = exports.getCurrentRunTree = void 0;\nexports.traceable = traceable;\nconst node_async_hooks_1 = require(\"node:async_hooks\");\nconst run_trees_js_1 = require(\"./run_trees.cjs\");\nconst env_js_1 = require(\"./env.cjs\");\nconst traceable_js_1 = require(\"./singletons/traceable.cjs\");\nconst constants_js_1 = require(\"./singletons/constants.cjs\");\nconst asserts_js_1 = require(\"./utils/asserts.cjs\");\ntraceable_js_1.AsyncLocalStorageProviderSingleton.initializeGlobalInstance(new node_async_hooks_1.AsyncLocalStorage());\nconst runInputsToMap = (rawInputs) => {\n    const firstInput = rawInputs[0];\n    let inputs;\n    if (firstInput == null) {\n        inputs = {};\n    }\n    else if (rawInputs.length > 1) {\n        inputs = { args: rawInputs };\n    }\n    else if ((0, asserts_js_1.isKVMap)(firstInput)) {\n        inputs = firstInput;\n    }\n    else {\n        inputs = { input: firstInput };\n    }\n    return inputs;\n};\nconst handleRunInputs = (inputs, processInputs) => {\n    try {\n        return processInputs(inputs);\n    }\n    catch (e) {\n        console.error(\"Error occurred during processInputs. Sending raw inputs:\", e);\n        return inputs;\n    }\n};\nconst handleRunOutputs = (rawOutputs, processOutputs) => {\n    let outputs;\n    if ((0, asserts_js_1.isKVMap)(rawOutputs)) {\n        outputs = rawOutputs;\n    }\n    else {\n        outputs = { outputs: rawOutputs };\n    }\n    try {\n        return processOutputs(outputs);\n    }\n    catch (e) {\n        console.error(\"Error occurred during processOutputs. Sending raw outputs:\", e);\n        return outputs;\n    }\n};\nconst handleRunAttachments = (rawInputs, extractAttachments) => {\n    if (!extractAttachments) {\n        return [undefined, rawInputs];\n    }\n    try {\n        const [attachments, remainingArgs] = extractAttachments(...rawInputs);\n        return [attachments, remainingArgs];\n    }\n    catch (e) {\n        console.error(\"Error occurred during extractAttachments:\", e);\n        return [undefined, rawInputs];\n    }\n};\nconst getTracingRunTree = (runTree, inputs, getInvocationParams, processInputs, extractAttachments) => {\n    if (!(0, env_js_1.isTracingEnabled)(runTree.tracingEnabled)) {\n        return undefined;\n    }\n    const [attached, args] = handleRunAttachments(inputs, extractAttachments);\n    runTree.attachments = attached;\n    runTree.inputs = handleRunInputs(args, processInputs);\n    const invocationParams = getInvocationParams?.(...inputs);\n    if (invocationParams != null) {\n        runTree.extra ??= {};\n        runTree.extra.metadata = {\n            ...invocationParams,\n            ...runTree.extra.metadata,\n        };\n    }\n    return runTree;\n};\n// idea: store the state of the promise outside\n// but only when the promise is \"consumed\"\nconst getSerializablePromise = (arg) => {\n    const proxyState = { current: undefined };\n    const promiseProxy = new Proxy(arg, {\n        get(target, prop, receiver) {\n            if (prop === \"then\") {\n                const boundThen = arg[prop].bind(arg);\n                return (resolve, reject = (x) => {\n                    throw x;\n                }) => {\n                    return boundThen((value) => {\n                        proxyState.current = [\"resolve\", value];\n                        return resolve(value);\n                    }, (error) => {\n                        proxyState.current = [\"reject\", error];\n                        return reject(error);\n                    });\n                };\n            }\n            if (prop === \"catch\") {\n                const boundCatch = arg[prop].bind(arg);\n                return (reject) => {\n                    return boundCatch((error) => {\n                        proxyState.current = [\"reject\", error];\n                        return reject(error);\n                    });\n                };\n            }\n            if (prop === \"toJSON\") {\n                return () => {\n                    if (!proxyState.current)\n                        return undefined;\n                    const [type, value] = proxyState.current ?? [];\n                    if (type === \"resolve\")\n                        return value;\n                    return { error: value };\n                };\n            }\n            return Reflect.get(target, prop, receiver);\n        },\n    });\n    return promiseProxy;\n};\nconst convertSerializableArg = (arg) => {\n    if ((0, asserts_js_1.isReadableStream)(arg)) {\n        const proxyState = [];\n        const transform = new TransformStream({\n            start: () => void 0,\n            transform: (chunk, controller) => {\n                proxyState.push(chunk);\n                controller.enqueue(chunk);\n            },\n            flush: () => void 0,\n        });\n        const pipeThrough = arg.pipeThrough(transform);\n        Object.assign(pipeThrough, { toJSON: () => proxyState });\n        return pipeThrough;\n    }\n    if ((0, asserts_js_1.isAsyncIterable)(arg)) {\n        const proxyState = { current: [] };\n        return new Proxy(arg, {\n            get(target, prop, receiver) {\n                if (prop === Symbol.asyncIterator) {\n                    return () => {\n                        const boundIterator = arg[Symbol.asyncIterator].bind(arg);\n                        const iterator = boundIterator();\n                        return new Proxy(iterator, {\n                            get(target, prop, receiver) {\n                                if (prop === \"next\" || prop === \"return\" || prop === \"throw\") {\n                                    const bound = iterator.next.bind(iterator);\n                                    return (...args) => {\n                                        // @ts-expect-error TS cannot infer the argument types for the bound function\n                                        const wrapped = getSerializablePromise(bound(...args));\n                                        proxyState.current.push(wrapped);\n                                        return wrapped;\n                                    };\n                                }\n                                if (prop === \"return\" || prop === \"throw\") {\n                                    return iterator.next.bind(iterator);\n                                }\n                                return Reflect.get(target, prop, receiver);\n                            },\n                        });\n                    };\n                }\n                if (prop === \"toJSON\") {\n                    return () => {\n                        const onlyNexts = proxyState.current;\n                        const serialized = onlyNexts.map((next) => next.toJSON());\n                        const chunks = serialized.reduce((memo, next) => {\n                            if (next?.value)\n                                memo.push(next.value);\n                            return memo;\n                        }, []);\n                        return chunks;\n                    };\n                }\n                return Reflect.get(target, prop, receiver);\n            },\n        });\n    }\n    if (!Array.isArray(arg) && (0, asserts_js_1.isIteratorLike)(arg)) {\n        const proxyState = [];\n        return new Proxy(arg, {\n            get(target, prop, receiver) {\n                if (prop === \"next\" || prop === \"return\" || prop === \"throw\") {\n                    const bound = arg[prop]?.bind(arg);\n                    return (...args) => {\n                        const next = bound?.(...args);\n                        if (next != null)\n                            proxyState.push(next);\n                        return next;\n                    };\n                }\n                if (prop === \"toJSON\") {\n                    return () => {\n                        const chunks = proxyState.reduce((memo, next) => {\n                            if (next.value)\n                                memo.push(next.value);\n                            return memo;\n                        }, []);\n                        return chunks;\n                    };\n                }\n                return Reflect.get(target, prop, receiver);\n            },\n        });\n    }\n    if ((0, asserts_js_1.isThenable)(arg)) {\n        return getSerializablePromise(arg);\n    }\n    return arg;\n};\n/**\n * Higher-order function that takes function as input and returns a\n * \"TraceableFunction\" - a wrapped version of the input that\n * automatically handles tracing. If the returned traceable function calls any\n * traceable functions, those are automatically traced as well.\n *\n * The returned TraceableFunction can accept a run tree or run tree config as\n * its first argument. If omitted, it will default to the caller's run tree,\n * or will be treated as a root run.\n *\n * @param wrappedFunc Targeted function to be traced\n * @param config Additional metadata such as name, tags or providing\n *     a custom LangSmith client instance\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction traceable(wrappedFunc, config) {\n    const { aggregator, argsConfigPath, __finalTracedIteratorKey, processInputs, processOutputs, extractAttachments, ...runTreeConfig } = config ?? {};\n    const processInputsFn = processInputs ?? ((x) => x);\n    const processOutputsFn = processOutputs ?? ((x) => x);\n    const extractAttachmentsFn = extractAttachments ?? ((...x) => [undefined, runInputsToMap(x)]);\n    const traceableFunc = (...args) => {\n        let ensuredConfig;\n        try {\n            let runtimeConfig;\n            if (argsConfigPath) {\n                const [index, path] = argsConfigPath;\n                if (index === args.length - 1 && !path) {\n                    runtimeConfig = args.pop();\n                }\n                else if (index <= args.length &&\n                    typeof args[index] === \"object\" &&\n                    args[index] !== null) {\n                    if (path) {\n                        const { [path]: extracted, ...rest } = args[index];\n                        runtimeConfig = extracted;\n                        args[index] = rest;\n                    }\n                    else {\n                        runtimeConfig = args[index];\n                        args.splice(index, 1);\n                    }\n                }\n            }\n            ensuredConfig = {\n                name: wrappedFunc.name || \"<lambda>\",\n                ...runTreeConfig,\n                ...runtimeConfig,\n                tags: [\n                    ...new Set([\n                        ...(runTreeConfig?.tags ?? []),\n                        ...(runtimeConfig?.tags ?? []),\n                    ]),\n                ],\n                metadata: {\n                    ...runTreeConfig?.metadata,\n                    ...runtimeConfig?.metadata,\n                },\n            };\n        }\n        catch (err) {\n            console.warn(`Failed to extract runtime config from args for ${runTreeConfig?.name ?? wrappedFunc.name}`, err);\n            ensuredConfig = {\n                name: wrappedFunc.name || \"<lambda>\",\n                ...runTreeConfig,\n            };\n        }\n        const asyncLocalStorage = traceable_js_1.AsyncLocalStorageProviderSingleton.getInstance();\n        // TODO: deal with possible nested promises and async iterables\n        const processedArgs = args;\n        for (let i = 0; i < processedArgs.length; i++) {\n            processedArgs[i] = convertSerializableArg(processedArgs[i]);\n        }\n        const [currentRunTree, rawInputs] = (() => {\n            const [firstArg, ...restArgs] = processedArgs;\n            // used for handoff between LangChain.JS and traceable functions\n            if ((0, run_trees_js_1.isRunnableConfigLike)(firstArg)) {\n                return [\n                    getTracingRunTree(run_trees_js_1.RunTree.fromRunnableConfig(firstArg, ensuredConfig), restArgs, config?.getInvocationParams, processInputsFn, extractAttachmentsFn),\n                    restArgs,\n                ];\n            }\n            // deprecated: legacy CallbackManagerRunTree used in runOnDataset\n            // override ALS and do not pass-through the run tree\n            if ((0, run_trees_js_1.isRunTree)(firstArg) &&\n                \"callbackManager\" in firstArg &&\n                firstArg.callbackManager != null) {\n                return [firstArg, restArgs];\n            }\n            // when ALS is unreliable, users can manually\n            // pass in the run tree\n            if (firstArg === traceable_js_1.ROOT || (0, run_trees_js_1.isRunTree)(firstArg)) {\n                const currentRunTree = getTracingRunTree(firstArg === traceable_js_1.ROOT\n                    ? new run_trees_js_1.RunTree(ensuredConfig)\n                    : firstArg.createChild(ensuredConfig), restArgs, config?.getInvocationParams, processInputsFn, extractAttachmentsFn);\n                return [currentRunTree, [currentRunTree, ...restArgs]];\n            }\n            // Node.JS uses AsyncLocalStorage (ALS) and AsyncResource\n            // to allow storing context\n            const prevRunFromStore = asyncLocalStorage.getStore();\n            if ((0, run_trees_js_1.isRunTree)(prevRunFromStore)) {\n                return [\n                    getTracingRunTree(prevRunFromStore.createChild(ensuredConfig), processedArgs, config?.getInvocationParams, processInputsFn, extractAttachmentsFn),\n                    processedArgs,\n                ];\n            }\n            const currentRunTree = getTracingRunTree(new run_trees_js_1.RunTree(ensuredConfig), processedArgs, config?.getInvocationParams, processInputsFn, extractAttachmentsFn);\n            // If a context var is set by LangChain outside of a traceable,\n            // it will be an object with a single property and we should copy\n            // context vars over into the new run tree.\n            if (prevRunFromStore !== undefined &&\n                constants_js_1._LC_CONTEXT_VARIABLES_KEY in prevRunFromStore) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                currentRunTree[constants_js_1._LC_CONTEXT_VARIABLES_KEY] =\n                    prevRunFromStore[constants_js_1._LC_CONTEXT_VARIABLES_KEY];\n            }\n            return [currentRunTree, processedArgs];\n        })();\n        return asyncLocalStorage.run(currentRunTree, () => {\n            const postRunPromise = currentRunTree?.postRun();\n            async function handleChunks(chunks) {\n                if (aggregator !== undefined) {\n                    try {\n                        return await aggregator(chunks);\n                    }\n                    catch (e) {\n                        console.error(`[ERROR]: LangSmith aggregation failed: `, e);\n                    }\n                }\n                return chunks;\n            }\n            function tapReadableStreamForTracing(stream, snapshot) {\n                const reader = stream.getReader();\n                let finished = false;\n                const chunks = [];\n                const tappedStream = new ReadableStream({\n                    async start(controller) {\n                        // eslint-disable-next-line no-constant-condition\n                        while (true) {\n                            const result = await (snapshot\n                                ? snapshot(() => reader.read())\n                                : reader.read());\n                            if (result.done) {\n                                finished = true;\n                                await currentRunTree?.end(handleRunOutputs(await handleChunks(chunks), processOutputsFn));\n                                await handleEnd();\n                                controller.close();\n                                break;\n                            }\n                            chunks.push(result.value);\n                            // Add new_token event for streaming LLM runs\n                            if (currentRunTree && currentRunTree.run_type === \"llm\") {\n                                currentRunTree.addEvent({\n                                    name: \"new_token\",\n                                    kwargs: { token: result.value },\n                                });\n                            }\n                            controller.enqueue(result.value);\n                        }\n                    },\n                    async cancel(reason) {\n                        if (!finished)\n                            await currentRunTree?.end(undefined, \"Cancelled\");\n                        await currentRunTree?.end(handleRunOutputs(await handleChunks(chunks), processOutputsFn));\n                        await handleEnd();\n                        return reader.cancel(reason);\n                    },\n                });\n                return tappedStream;\n            }\n            async function* wrapAsyncIteratorForTracing(iterator, snapshot) {\n                let finished = false;\n                const chunks = [];\n                try {\n                    while (true) {\n                        const { value, done } = await (snapshot\n                            ? snapshot(() => iterator.next())\n                            : iterator.next());\n                        if (done) {\n                            finished = true;\n                            break;\n                        }\n                        chunks.push(value);\n                        // Add new_token event for streaming LLM runs\n                        if (currentRunTree && currentRunTree.run_type === \"llm\") {\n                            currentRunTree.addEvent({\n                                name: \"new_token\",\n                                kwargs: { token: value },\n                            });\n                        }\n                        yield value;\n                    }\n                }\n                catch (e) {\n                    await currentRunTree?.end(undefined, String(e));\n                    throw e;\n                }\n                finally {\n                    if (!finished)\n                        await currentRunTree?.end(undefined, \"Cancelled\");\n                    await currentRunTree?.end(handleRunOutputs(await handleChunks(chunks), processOutputsFn));\n                    await handleEnd();\n                }\n            }\n            function wrapAsyncGeneratorForTracing(iterable, snapshot) {\n                if ((0, asserts_js_1.isReadableStream)(iterable)) {\n                    return tapReadableStreamForTracing(iterable, snapshot);\n                }\n                const iterator = iterable[Symbol.asyncIterator]();\n                const wrappedIterator = wrapAsyncIteratorForTracing(iterator, snapshot);\n                iterable[Symbol.asyncIterator] = () => wrappedIterator;\n                return iterable;\n            }\n            async function handleEnd() {\n                const onEnd = config?.on_end;\n                if (onEnd) {\n                    if (!currentRunTree) {\n                        console.warn(\"Can not call 'on_end' if currentRunTree is undefined\");\n                    }\n                    else {\n                        onEnd(currentRunTree);\n                    }\n                }\n                await postRunPromise;\n                await currentRunTree?.patchRun();\n            }\n            function gatherAll(iterator) {\n                const chunks = [];\n                // eslint-disable-next-line no-constant-condition\n                while (true) {\n                    const next = iterator.next();\n                    chunks.push(next);\n                    if (next.done)\n                        break;\n                }\n                return chunks;\n            }\n            let returnValue;\n            try {\n                returnValue = wrappedFunc(...rawInputs);\n            }\n            catch (err) {\n                returnValue = Promise.reject(err);\n            }\n            if ((0, asserts_js_1.isAsyncIterable)(returnValue)) {\n                const snapshot = node_async_hooks_1.AsyncLocalStorage.snapshot();\n                return wrapAsyncGeneratorForTracing(returnValue, snapshot);\n            }\n            if (!Array.isArray(returnValue) &&\n                typeof returnValue === \"object\" &&\n                returnValue != null &&\n                __finalTracedIteratorKey !== undefined &&\n                (0, asserts_js_1.isAsyncIterable)(returnValue[__finalTracedIteratorKey])) {\n                const snapshot = node_async_hooks_1.AsyncLocalStorage.snapshot();\n                return {\n                    ...returnValue,\n                    [__finalTracedIteratorKey]: wrapAsyncGeneratorForTracing(returnValue[__finalTracedIteratorKey], snapshot),\n                };\n            }\n            const tracedPromise = new Promise((resolve, reject) => {\n                Promise.resolve(returnValue)\n                    .then(async (rawOutput) => {\n                    if ((0, asserts_js_1.isAsyncIterable)(rawOutput)) {\n                        const snapshot = node_async_hooks_1.AsyncLocalStorage.snapshot();\n                        return resolve(wrapAsyncGeneratorForTracing(rawOutput, snapshot));\n                    }\n                    if (!Array.isArray(rawOutput) &&\n                        typeof rawOutput === \"object\" &&\n                        rawOutput != null &&\n                        __finalTracedIteratorKey !== undefined &&\n                        (0, asserts_js_1.isAsyncIterable)(rawOutput[__finalTracedIteratorKey])) {\n                        const snapshot = node_async_hooks_1.AsyncLocalStorage.snapshot();\n                        return {\n                            ...rawOutput,\n                            [__finalTracedIteratorKey]: wrapAsyncGeneratorForTracing(rawOutput[__finalTracedIteratorKey], snapshot),\n                        };\n                    }\n                    if ((0, asserts_js_1.isGenerator)(wrappedFunc) && (0, asserts_js_1.isIteratorLike)(rawOutput)) {\n                        const chunks = gatherAll(rawOutput);\n                        try {\n                            await currentRunTree?.end(handleRunOutputs(await handleChunks(chunks.reduce((memo, { value, done }) => {\n                                if (!done || typeof value !== \"undefined\") {\n                                    memo.push(value);\n                                }\n                                return memo;\n                            }, [])), processOutputsFn));\n                            await handleEnd();\n                        }\n                        catch (e) {\n                            console.error(\"Error occurred during handleEnd:\", e);\n                        }\n                        return (function* () {\n                            for (const ret of chunks) {\n                                if (ret.done)\n                                    return ret.value;\n                                yield ret.value;\n                            }\n                        })();\n                    }\n                    try {\n                        await currentRunTree?.end(handleRunOutputs(rawOutput, processOutputsFn));\n                        await handleEnd();\n                    }\n                    finally {\n                        // eslint-disable-next-line no-unsafe-finally\n                        return rawOutput;\n                    }\n                }, async (error) => {\n                    await currentRunTree?.end(undefined, String(error));\n                    await handleEnd();\n                    throw error;\n                })\n                    .then(resolve, reject);\n            });\n            if (typeof returnValue !== \"object\" || returnValue === null) {\n                return tracedPromise;\n            }\n            return new Proxy(returnValue, {\n                get(target, prop, receiver) {\n                    if ((0, asserts_js_1.isPromiseMethod)(prop)) {\n                        return tracedPromise[prop].bind(tracedPromise);\n                    }\n                    return Reflect.get(target, prop, receiver);\n                },\n            });\n        });\n    };\n    Object.defineProperty(traceableFunc, \"langsmith:traceable\", {\n        value: runTreeConfig,\n    });\n    return traceableFunc;\n}\nvar traceable_js_2 = require(\"./singletons/traceable.cjs\");\nObject.defineProperty(exports, \"getCurrentRunTree\", { enumerable: true, get: function () { return traceable_js_2.getCurrentRunTree; } });\nObject.defineProperty(exports, \"isTraceableFunction\", { enumerable: true, get: function () { return traceable_js_2.isTraceableFunction; } });\nObject.defineProperty(exports, \"withRunTree\", { enumerable: true, get: function () { return traceable_js_2.withRunTree; } });\nObject.defineProperty(exports, \"ROOT\", { enumerable: true, get: function () { return traceable_js_2.ROOT; } });\n","module.exports = require('./dist/traceable.cjs');","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n",null,null,null,"const cache = new WeakMap<String, string[]>();\n\nexport function pathspec(...paths: string[]) {\n   const key = new String(paths);\n   cache.set(key, paths);\n\n   return key as string;\n}\n\nexport function isPathSpec(path: string | unknown): path is string {\n   return path instanceof String && cache.has(path);\n}\n\nexport function toPaths(pathSpec: string): string[] {\n   return cache.get(pathSpec) || [];\n}\n","import type { SimpleGitTask } from '../types';\n\n/**\n * The `GitError` is thrown when the underlying `git` process throws a\n * fatal exception (eg an `ENOENT` exception when attempting to use a\n * non-writable directory as the root for your repo), and acts as the\n * base class for more specific errors thrown by the parsing of the\n * git response or errors in the configuration of the task about to\n * be run.\n *\n * When an exception is thrown, pending tasks in the same instance will\n * not be executed. The recommended way to run a series of tasks that\n * can independently fail without needing to prevent future tasks from\n * running is to catch them individually:\n *\n * ```typescript\n import { gitP, SimpleGit, GitError, PullResult } from 'simple-git';\n\n function catchTask (e: GitError) {\n   return e.\n }\n\n const git = gitP(repoWorkingDir);\n const pulled: PullResult | GitError = await git.pull().catch(catchTask);\n const pushed: string | GitError = await git.pushTags().catch(catchTask);\n ```\n */\nexport class GitError extends Error {\n   constructor(\n      public task?: SimpleGitTask<any>,\n      message?: string\n   ) {\n      super(message);\n      Object.setPrototypeOf(this, new.target.prototype);\n   }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `GitResponseError` is the wrapper for a parsed response that is treated as\n * a fatal error, for example attempting a `merge` can leave the repo in a corrupted\n * state when there are conflicts so the task will reject rather than resolve.\n *\n * For example, catching the merge conflict exception:\n *\n * ```typescript\n import { gitP, SimpleGit, GitResponseError, MergeSummary } from 'simple-git';\n\n const git = gitP(repoRoot);\n const mergeOptions: string[] = ['--no-ff', 'other-branch'];\n const mergeSummary: MergeSummary = await git.merge(mergeOptions)\n      .catch((e: GitResponseError<MergeSummary>) => e.git);\n\n if (mergeSummary.failed) {\n   // deal with the error\n }\n ```\n */\nexport class GitResponseError<T = any> extends GitError {\n   constructor(\n      /**\n       * `.git` access the parsed response that is treated as being an error\n       */\n      public readonly git: T,\n      message?: string\n   ) {\n      super(undefined, message || String(git));\n   }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `TaskConfigurationError` is thrown when a command was incorrectly\n * configured. An error of this kind means that no attempt was made to\n * run your command through the underlying `git` binary.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class TaskConfigurationError extends GitError {\n   constructor(message?: string) {\n      super(undefined, message);\n   }\n}\n","import { exists, FOLDER } from '@kwsites/file-exists';\nimport { Maybe } from '../types';\n\nexport const NULL = '\\0';\n\nexport const NOOP: (...args: any[]) => void = () => {};\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function asFunction<T extends () => any>(source: T | any): T {\n   return typeof source === 'function' ? source : NOOP;\n}\n\n/**\n * Determines whether the supplied argument is both a function, and is not\n * the `NOOP` function.\n */\nexport function isUserFunction<T extends Function>(source: T | any): source is T {\n   return typeof source === 'function' && source !== NOOP;\n}\n\nexport function splitOn(input: string, char: string): [string, string] {\n   const index = input.indexOf(char);\n   if (index <= 0) {\n      return [input, ''];\n   }\n\n   return [input.substr(0, index), input.substr(index + 1)];\n}\n\nexport function first<T extends any[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function first<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function first(input: any[] | IArguments, offset = 0): Maybe<unknown> {\n   return isArrayLike(input) && input.length > offset ? input[offset] : undefined;\n}\n\nexport function last<T extends any[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function last<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function last<T>(input: T, offset?: number): Maybe<unknown>;\nexport function last(input: unknown, offset = 0) {\n   if (isArrayLike(input) && input.length > offset) {\n      return input[input.length - 1 - offset];\n   }\n}\n\ntype ArrayLike<T = any> = T[] | IArguments | { [index: number]: T; length: number };\n\nfunction isArrayLike(input: any): input is ArrayLike {\n   return !!(input && typeof input.length === 'number');\n}\n\nexport function toLinesWithContent(input = '', trimmed = true, separator = '\\n'): string[] {\n   return input.split(separator).reduce((output, line) => {\n      const lineContent = trimmed ? line.trim() : line;\n      if (lineContent) {\n         output.push(lineContent);\n      }\n      return output;\n   }, [] as string[]);\n}\n\ntype LineWithContentCallback<T = void> = (line: string) => T;\n\nexport function forEachLineWithContent<T>(\n   input: string,\n   callback: LineWithContentCallback<T>\n): T[] {\n   return toLinesWithContent(input, true).map((line) => callback(line));\n}\n\nexport function folderExists(path: string): boolean {\n   return exists(path, FOLDER);\n}\n\n/**\n * Adds `item` into the `target` `Array` or `Set` when it is not already present and returns the `item`.\n */\nexport function append<T>(target: T[] | Set<T>, item: T): typeof item {\n   if (Array.isArray(target)) {\n      if (!target.includes(item)) {\n         target.push(item);\n      }\n   } else {\n      target.add(item);\n   }\n   return item;\n}\n\n/**\n * Adds `item` into the `target` `Array` when it is not already present and returns the `target`.\n */\nexport function including<T>(target: T[], item: T): typeof target {\n   if (Array.isArray(target) && !target.includes(item)) {\n      target.push(item);\n   }\n\n   return target;\n}\n\nexport function remove<T>(target: Set<T> | T[], item: T): T {\n   if (Array.isArray(target)) {\n      const index = target.indexOf(item);\n      if (index >= 0) {\n         target.splice(index, 1);\n      }\n   } else {\n      target.delete(item);\n   }\n   return item;\n}\n\nexport const objectToString = Object.prototype.toString.call.bind(Object.prototype.toString) as (\n   input: any\n) => string;\n\nexport function asArray<T>(source: T | T[]): T[] {\n   return Array.isArray(source) ? source : [source];\n}\n\nexport function asCamelCase(str: string) {\n   return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n      return chr.toUpperCase();\n   });\n}\n\nexport function asStringArray<T>(source: T | T[]): string[] {\n   return asArray(source).map(String);\n}\n\nexport function asNumber(source: string | null | undefined, onNaN = 0) {\n   if (source == null) {\n      return onNaN;\n   }\n\n   const num = parseInt(source, 10);\n   return isNaN(num) ? onNaN : num;\n}\n\nexport function prefixedArray<T>(input: T[], prefix: T): T[] {\n   const output: T[] = [];\n   for (let i = 0, max = input.length; i < max; i++) {\n      output.push(prefix, input[i]);\n   }\n   return output;\n}\n\nexport function bufferToString(input: Buffer | Buffer[]): string {\n   return (Array.isArray(input) ? Buffer.concat(input) : input).toString('utf-8');\n}\n\n/**\n * Get a new object from a source object with only the listed properties.\n */\nexport function pick(source: Record<string, any>, properties: string[]) {\n   return Object.assign(\n      {},\n      ...properties.map((property) => (property in source ? { [property]: source[property] } : {}))\n   );\n}\n\nexport function delay(duration = 0): Promise<void> {\n   return new Promise((done) => setTimeout(done, duration));\n}\n\nexport function orVoid<T>(input: T | false) {\n   if (input === false) {\n      return undefined;\n   }\n   return input;\n}\n","import { Maybe, Options, Primitives } from '../types';\nimport { objectToString } from './util';\nimport { isPathSpec } from '../args/pathspec';\n\nexport interface ArgumentFilterPredicate<T> {\n   (input: any): input is T;\n}\n\nexport function filterType<T, K>(\n   input: K,\n   filter: ArgumentFilterPredicate<T>\n): K extends T ? T : undefined;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def: T): T;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def?: T): Maybe<T> {\n   if (filter(input)) {\n      return input;\n   }\n   return arguments.length > 2 ? def : undefined;\n}\n\nexport const filterArray: ArgumentFilterPredicate<Array<any>> = (input): input is Array<any> => {\n   return Array.isArray(input);\n};\n\nexport function filterPrimitives(\n   input: unknown,\n   omit?: Array<'boolean' | 'string' | 'number'>\n): input is Primitives {\n   const type = isPathSpec(input) ? 'string' : typeof input;\n\n   return (\n      /number|string|boolean/.test(type) &&\n      (!omit || !omit.includes(type as 'boolean' | 'string' | 'number'))\n   );\n}\n\nexport const filterString: ArgumentFilterPredicate<string> = (input): input is string => {\n   return typeof input === 'string';\n};\n\nexport const filterStringArray: ArgumentFilterPredicate<string[]> = (input): input is string[] => {\n   return Array.isArray(input) && input.every(filterString);\n};\n\nexport const filterStringOrStringArray: ArgumentFilterPredicate<string | string[]> = (\n   input\n): input is string | string[] => {\n   return filterString(input) || (Array.isArray(input) && input.every(filterString));\n};\n\nexport function filterPlainObject<T extends Options>(input: T | unknown): input is T;\nexport function filterPlainObject<T extends Object>(input: T | unknown): input is T {\n   return !!input && objectToString(input) === '[object Object]';\n}\n\nexport function filterFunction(input: unknown): input is Function {\n   return typeof input === 'function';\n}\n\nexport const filterHasLength: ArgumentFilterPredicate<{ length: number }> = (\n   input\n): input is { length: number } => {\n   if (input == null || 'number|boolean|function'.includes(typeof input)) {\n      return false;\n   }\n   return Array.isArray(input) || typeof input === 'string' || typeof input.length === 'number';\n};\n","/**\n * Known process exit codes used by the task parsers to determine whether an error\n * was one they can automatically handle\n */\nexport enum ExitCodes {\n   SUCCESS,\n   ERROR,\n   NOT_FOUND = -2,\n   UNCLEAN = 128,\n}\n","import { TaskResponseFormat } from '../types';\n\nexport class GitOutputStreams<T extends TaskResponseFormat = Buffer> {\n   constructor(\n      public readonly stdOut: T,\n      public readonly stdErr: T\n   ) {}\n\n   asStrings(): GitOutputStreams<string> {\n      return new GitOutputStreams(this.stdOut.toString('utf8'), this.stdErr.toString('utf8'));\n   }\n}\n","export class LineParser<T> {\n   protected matches: string[] = [];\n\n   private _regExp: RegExp[];\n\n   constructor(\n      regExp: RegExp | RegExp[],\n      useMatches?: (target: T, match: string[]) => boolean | void\n   ) {\n      this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n      if (useMatches) {\n         this.useMatches = useMatches;\n      }\n   }\n\n   parse = (line: (offset: number) => string | undefined, target: T): boolean => {\n      this.resetMatches();\n\n      if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n         return false;\n      }\n\n      return this.useMatches(target, this.prepareMatches()) !== false;\n   };\n\n   // @ts-ignore\n   protected useMatches(target: T, match: string[]): boolean | void {\n      throw new Error(`LineParser:useMatches not implemented`);\n   }\n\n   protected resetMatches() {\n      this.matches.length = 0;\n   }\n\n   protected prepareMatches() {\n      return this.matches;\n   }\n\n   protected addMatch(reg: RegExp, index: number, line?: string) {\n      const matched = line && reg.exec(line);\n      if (matched) {\n         this.pushMatch(index, matched);\n      }\n\n      return !!matched;\n   }\n\n   protected pushMatch(_index: number, matched: string[]) {\n      this.matches.push(...matched.slice(1));\n   }\n}\n\nexport class RemoteLineParser<T> extends LineParser<T> {\n   protected addMatch(reg: RegExp, index: number, line?: string): boolean {\n      return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n   }\n\n   protected pushMatch(index: number, matched: string[]) {\n      if (index > 0 || matched.length > 1) {\n         super.pushMatch(index, matched);\n      }\n   }\n}\n","import { SimpleGitOptions } from '../types';\n\nconst defaultOptions: Omit<SimpleGitOptions, 'baseDir'> = {\n   binary: 'git',\n   maxConcurrentProcesses: 5,\n   config: [],\n   trimmed: false,\n};\n\nexport function createInstanceConfig(\n   ...options: Array<Partial<SimpleGitOptions> | undefined>\n): SimpleGitOptions {\n   const baseDir = process.cwd();\n   const config: SimpleGitOptions = Object.assign(\n      { baseDir, ...defaultOptions },\n      ...options.filter((o) => typeof o === 'object' && o)\n   );\n\n   config.baseDir = config.baseDir || baseDir;\n   config.trimmed = config.trimmed === true;\n\n   return config;\n}\n","import {\n   filterArray,\n   filterFunction,\n   filterPlainObject,\n   filterPrimitives,\n   filterType,\n} from './argument-filters';\nimport { asFunction, isUserFunction, last } from './util';\nimport { Maybe, Options, OptionsValues } from '../types';\nimport { isPathSpec } from '../args/pathspec';\n\nexport function appendTaskOptions<T extends Options = Options>(\n   options: Maybe<T>,\n   commands: string[] = []\n): string[] {\n   if (!filterPlainObject<Options>(options)) {\n      return commands;\n   }\n\n   return Object.keys(options).reduce((commands: string[], key: string) => {\n      const value: OptionsValues = options[key];\n\n      if (isPathSpec(value)) {\n         commands.push(value);\n      } else if (filterPrimitives(value, ['boolean'])) {\n         commands.push(key + '=' + value);\n      } else {\n         commands.push(key);\n      }\n\n      return commands;\n   }, commands);\n}\n\nexport function getTrailingOptions(\n   args: IArguments,\n   initialPrimitive = 0,\n   objectOnly = false\n): string[] {\n   const command: string[] = [];\n\n   for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n      if ('string|number'.includes(typeof args[i])) {\n         command.push(String(args[i]));\n      }\n   }\n\n   appendTaskOptions(trailingOptionsArgument(args), command);\n   if (!objectOnly) {\n      command.push(...trailingArrayArgument(args));\n   }\n\n   return command;\n}\n\nfunction trailingArrayArgument(args: IArguments) {\n   const hasTrailingCallback = typeof last(args) === 'function';\n   return filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []);\n}\n\n/**\n * Given any number of arguments, returns the trailing options argument, ignoring a trailing function argument\n * if there is one. When not found, the return value is null.\n */\nexport function trailingOptionsArgument(args: IArguments): Maybe<Options> {\n   const hasTrailingCallback = filterFunction(last(args));\n   return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function trailingFunctionArgument(\n   args: unknown[] | IArguments | unknown,\n   includeNoop = true\n): Maybe<(...args: any[]) => unknown> {\n   const callback = asFunction(last(args));\n   return includeNoop || isUserFunction(callback) ? callback : undefined;\n}\n","import type { MaybeArray, TaskParser, TaskResponseFormat } from '../types';\nimport { GitOutputStreams } from './git-output-streams';\nimport { LineParser } from './line-parser';\nimport { asArray, toLinesWithContent } from './util';\n\nexport function callTaskParser<INPUT extends TaskResponseFormat, RESPONSE>(\n   parser: TaskParser<INPUT, RESPONSE>,\n   streams: GitOutputStreams<INPUT>\n) {\n   return parser(streams.stdOut, streams.stdErr);\n}\n\nexport function parseStringResponse<T>(\n   result: T,\n   parsers: LineParser<T>[],\n   texts: MaybeArray<string>,\n   trim = true\n): T {\n   asArray(texts).forEach((text) => {\n      for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n         const line = (offset = 0) => {\n            if (i + offset >= max) {\n               return;\n            }\n            return lines[i + offset];\n         };\n\n         parsers.some(({ parse }) => parse(line, result));\n      }\n   });\n\n   return result;\n}\n","export * from './argument-filters';\nexport * from './exit-codes';\nexport * from './git-output-streams';\nexport * from './line-parser';\nexport * from './simple-git-options';\nexport * from './task-options';\nexport * from './task-parser';\nexport * from './util';\n","import { ExitCodes } from '../utils';\nimport { Maybe, StringTask } from '../types';\n\nexport enum CheckRepoActions {\n   BARE = 'bare',\n   IN_TREE = 'tree',\n   IS_REPO_ROOT = 'root',\n}\n\nconst onError: StringTask<boolean>['onError'] = ({ exitCode }, error, done, fail) => {\n   if (exitCode === ExitCodes.UNCLEAN && isNotRepoMessage(error)) {\n      return done(Buffer.from('false'));\n   }\n\n   fail(error);\n};\n\nconst parser: StringTask<boolean>['parser'] = (text) => {\n   return text.trim() === 'true';\n};\n\nexport function checkIsRepoTask(action: Maybe<CheckRepoActions>): StringTask<boolean> {\n   switch (action) {\n      case CheckRepoActions.BARE:\n         return checkIsBareRepoTask();\n      case CheckRepoActions.IS_REPO_ROOT:\n         return checkIsRepoRootTask();\n   }\n\n   const commands = ['rev-parse', '--is-inside-work-tree'];\n\n   return {\n      commands,\n      format: 'utf-8',\n      onError,\n      parser,\n   };\n}\n\nexport function checkIsRepoRootTask(): StringTask<boolean> {\n   const commands = ['rev-parse', '--git-dir'];\n\n   return {\n      commands,\n      format: 'utf-8',\n      onError,\n      parser(path) {\n         return /^\\.(git)?$/.test(path.trim());\n      },\n   };\n}\n\nexport function checkIsBareRepoTask(): StringTask<boolean> {\n   const commands = ['rev-parse', '--is-bare-repository'];\n\n   return {\n      commands,\n      format: 'utf-8',\n      onError,\n      parser,\n   };\n}\n\nfunction isNotRepoMessage(error: Error): boolean {\n   return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\n","import { CleanSummary } from '../../../typings';\nimport { toLinesWithContent } from '../utils';\n\nexport class CleanResponse implements CleanSummary {\n   public paths: string[] = [];\n   public files: string[] = [];\n   public folders: string[] = [];\n\n   constructor(public readonly dryRun: boolean) {}\n}\n\nconst removalRegexp = /^[a-z]+\\s*/i;\nconst dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\nconst isFolderRegexp = /\\/$/;\n\nexport function cleanSummaryParser(dryRun: boolean, text: string): CleanSummary {\n   const summary = new CleanResponse(dryRun);\n   const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n\n   toLinesWithContent(text).forEach((line) => {\n      const removed = line.replace(regexp, '');\n\n      summary.paths.push(removed);\n      (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n   });\n\n   return summary;\n}\n","import { TaskConfigurationError } from '../errors/task-configuration-error';\nimport type { BufferTask, EmptyTaskParser, SimpleGitTask, StringTask } from '../types';\n\nexport const EMPTY_COMMANDS: [] = [];\n\nexport type EmptyTask = {\n   commands: typeof EMPTY_COMMANDS;\n   format: 'empty';\n   parser: EmptyTaskParser;\n   onError?: undefined;\n};\n\nexport function adhocExecTask(parser: EmptyTaskParser): EmptyTask {\n   return {\n      commands: EMPTY_COMMANDS,\n      format: 'empty',\n      parser,\n   };\n}\n\nexport function configurationErrorTask(error: Error | string): EmptyTask {\n   return {\n      commands: EMPTY_COMMANDS,\n      format: 'empty',\n      parser() {\n         throw typeof error === 'string' ? new TaskConfigurationError(error) : error;\n      },\n   };\n}\n\nexport function straightThroughStringTask(commands: string[], trimmed = false): StringTask<string> {\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text) {\n         return trimmed ? String(text).trim() : text;\n      },\n   };\n}\n\nexport function straightThroughBufferTask(commands: string[]): BufferTask<any> {\n   return {\n      commands,\n      format: 'buffer',\n      parser(buffer) {\n         return buffer;\n      },\n   };\n}\n\nexport function isBufferTask<R>(task: SimpleGitTask<R>): task is BufferTask<R> {\n   return task.format === 'buffer';\n}\n\nexport function isEmptyTask<R>(task: SimpleGitTask<R>): task is EmptyTask {\n   return task.format === 'empty' || !task.commands.length;\n}\n","import { CleanSummary } from '../../../typings';\nimport { cleanSummaryParser } from '../responses/CleanSummary';\nimport { Maybe, StringTask } from '../types';\nimport { asStringArray } from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport const CONFIG_ERROR_INTERACTIVE_MODE = 'Git clean interactive mode is not supported';\nexport const CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\nexport const CONFIG_ERROR_UNKNOWN_OPTION = 'Git clean unknown option found in: ';\n\n/**\n * All supported option switches available for use in a `git.clean` operation\n */\nexport enum CleanOptions {\n   DRY_RUN = 'n',\n   FORCE = 'f',\n   IGNORED_INCLUDED = 'x',\n   IGNORED_ONLY = 'X',\n   EXCLUDING = 'e',\n   QUIET = 'q',\n   RECURSIVE = 'd',\n}\n\n/**\n * The two modes `git.clean` can run in - one of these must be supplied in order\n * for the command to not throw a `TaskConfigurationError`\n */\nexport type CleanMode = CleanOptions.FORCE | CleanOptions.DRY_RUN;\n\nconst CleanOptionValues: Set<string> = new Set([\n   'i',\n   ...asStringArray(Object.values(CleanOptions as any)),\n]);\n\nexport function cleanWithOptionsTask(mode: CleanMode | string, customArgs: string[]) {\n   const { cleanMode, options, valid } = getCleanOptions(mode);\n\n   if (!cleanMode) {\n      return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n   }\n\n   if (!valid.options) {\n      return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n   }\n\n   options.push(...customArgs);\n\n   if (options.some(isInteractiveMode)) {\n      return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n   }\n\n   return cleanTask(cleanMode, options);\n}\n\nexport function cleanTask(mode: CleanMode, customArgs: string[]): StringTask<CleanSummary> {\n   const commands: string[] = ['clean', `-${mode}`, ...customArgs];\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string): CleanSummary {\n         return cleanSummaryParser(mode === CleanOptions.DRY_RUN, text);\n      },\n   };\n}\n\nexport function isCleanOptionsArray(input: string[]): input is CleanOptions[] {\n   return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\n\nfunction getCleanOptions(input: string) {\n   let cleanMode: Maybe<CleanMode>;\n   let options: string[] = [];\n   let valid = { cleanMode: false, options: true };\n\n   input\n      .replace(/[^a-z]i/g, '')\n      .split('')\n      .forEach((char) => {\n         if (isCleanMode(char)) {\n            cleanMode = char;\n            valid.cleanMode = true;\n         } else {\n            valid.options = valid.options && isKnownOption((options[options.length] = `-${char}`));\n         }\n      });\n\n   return {\n      cleanMode,\n      options,\n      valid,\n   };\n}\n\nfunction isCleanMode(cleanMode?: string): cleanMode is CleanMode {\n   return cleanMode === CleanOptions.FORCE || cleanMode === CleanOptions.DRY_RUN;\n}\n\nfunction isKnownOption(option: string): boolean {\n   return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\n\nfunction isInteractiveMode(option: string): boolean {\n   if (/^-[^\\-]/.test(option)) {\n      return option.indexOf('i') > 0;\n   }\n\n   return option === '--interactive';\n}\n","import { ConfigGetResult, ConfigListSummary, ConfigValues } from '../../../typings';\nimport { last, splitOn } from '../utils';\n\nexport class ConfigList implements ConfigListSummary {\n   public files: string[] = [];\n   public values: { [fileName: string]: ConfigValues } = Object.create(null);\n\n   private _all: ConfigValues | undefined;\n\n   public get all(): ConfigValues {\n      if (!this._all) {\n         this._all = this.files.reduce((all: ConfigValues, file: string) => {\n            return Object.assign(all, this.values[file]);\n         }, {});\n      }\n\n      return this._all;\n   }\n\n   public addFile(file: string): ConfigValues {\n      if (!(file in this.values)) {\n         const latest = last(this.files);\n         this.values[file] = latest ? Object.create(this.values[latest]) : {};\n\n         this.files.push(file);\n      }\n\n      return this.values[file];\n   }\n\n   public addValue(file: string, key: string, value: string) {\n      const values = this.addFile(file);\n\n      if (!values.hasOwnProperty(key)) {\n         values[key] = value;\n      } else if (Array.isArray(values[key])) {\n         (values[key] as string[]).push(value);\n      } else {\n         values[key] = [values[key] as string, value];\n      }\n\n      this._all = undefined;\n   }\n}\n\nexport function configListParser(text: string): ConfigList {\n   const config = new ConfigList();\n\n   for (const item of configParser(text)) {\n      config.addValue(item.file, String(item.key), item.value);\n   }\n\n   return config;\n}\n\nexport function configGetParser(text: string, key: string): ConfigGetResult {\n   let value: string | null = null;\n   const values: string[] = [];\n   const scopes: Map<string, string[]> = new Map();\n\n   for (const item of configParser(text, key)) {\n      if (item.key !== key) {\n         continue;\n      }\n\n      values.push((value = item.value));\n\n      if (!scopes.has(item.file)) {\n         scopes.set(item.file, []);\n      }\n\n      scopes.get(item.file)!.push(value);\n   }\n\n   return {\n      key,\n      paths: Array.from(scopes.keys()),\n      scopes,\n      value,\n      values,\n   };\n}\n\nfunction configFilePath(filePath: string): string {\n   return filePath.replace(/^(file):/, '');\n}\n\nfunction* configParser(text: string, requestedKey: string | null = null) {\n   const lines = text.split('\\0');\n\n   for (let i = 0, max = lines.length - 1; i < max; ) {\n      const file = configFilePath(lines[i++]);\n\n      let value = lines[i++];\n      let key = requestedKey;\n\n      if (value.includes('\\n')) {\n         const line = splitOn(value, '\\n');\n         key = line[0];\n         value = line[1];\n      }\n\n      yield { file, key, value };\n   }\n}\n","import type { ConfigGetResult, ConfigListSummary, SimpleGit } from '../../../typings';\nimport { configGetParser, configListParser } from '../responses/ConfigList';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { trailingFunctionArgument } from '../utils';\n\nexport enum GitConfigScope {\n   system = 'system',\n   global = 'global',\n   local = 'local',\n   worktree = 'worktree',\n}\n\nfunction asConfigScope<T extends GitConfigScope | undefined>(\n   scope: GitConfigScope | unknown,\n   fallback: T\n): GitConfigScope | T {\n   if (typeof scope === 'string' && GitConfigScope.hasOwnProperty(scope)) {\n      return scope as GitConfigScope;\n   }\n   return fallback;\n}\n\nfunction addConfigTask(\n   key: string,\n   value: string,\n   append: boolean,\n   scope: GitConfigScope\n): StringTask<string> {\n   const commands: string[] = ['config', `--${scope}`];\n\n   if (append) {\n      commands.push('--add');\n   }\n\n   commands.push(key, value);\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string): string {\n         return text;\n      },\n   };\n}\n\nfunction getConfigTask(key: string, scope?: GitConfigScope): StringTask<ConfigGetResult> {\n   const commands: string[] = ['config', '--null', '--show-origin', '--get-all', key];\n\n   if (scope) {\n      commands.splice(1, 0, `--${scope}`);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text) {\n         return configGetParser(text, key);\n      },\n   };\n}\n\nfunction listConfigTask(scope?: GitConfigScope): StringTask<ConfigListSummary> {\n   const commands = ['config', '--list', '--show-origin', '--null'];\n\n   if (scope) {\n      commands.push(`--${scope}`);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string) {\n         return configListParser(text);\n      },\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'addConfig' | 'getConfig' | 'listConfig'> {\n   return {\n      addConfig(this: SimpleGitApi, key: string, value: string, ...rest: unknown[]) {\n         return this._runTask(\n            addConfigTask(\n               key,\n               value,\n               rest[0] === true,\n               asConfigScope(rest[1], GitConfigScope.local)\n            ),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      getConfig(this: SimpleGitApi, key: string, scope?: GitConfigScope) {\n         return this._runTask(\n            getConfigTask(key, asConfigScope(scope, undefined)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      listConfig(this: SimpleGitApi, ...rest: unknown[]) {\n         return this._runTask(\n            listConfigTask(asConfigScope(rest[0], undefined)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","export enum DiffNameStatus {\n   ADDED = 'A',\n   COPIED = 'C',\n   DELETED = 'D',\n   MODIFIED = 'M',\n   RENAMED = 'R',\n   CHANGED = 'T',\n   UNMERGED = 'U',\n   UNKNOWN = 'X',\n   BROKEN = 'B',\n}\n\nconst diffNameStatus = new Set(Object.values(DiffNameStatus));\n\nexport function isDiffNameStatus(input: string): input is DiffNameStatus {\n   return diffNameStatus.has(input as DiffNameStatus);\n}\n","import { GrepResult, SimpleGit } from '../../../typings';\nimport { SimpleGitApi } from '../simple-git-api';\nimport {\n   asNumber,\n   forEachLineWithContent,\n   getTrailingOptions,\n   NULL,\n   prefixedArray,\n   trailingFunctionArgument,\n} from '../utils';\n\nimport { configurationErrorTask } from './task';\n\nconst disallowedOptions = ['-h'];\n\nconst Query = Symbol('grepQuery');\n\nexport interface GitGrepQuery extends Iterable<string> {\n   /** Adds one or more terms to be grouped as an \"and\" to any other terms */\n   and(...and: string[]): this;\n\n   /** Adds one or more search terms - git.grep will \"or\" this to other terms */\n   param(...param: string[]): this;\n}\n\nclass GrepQuery implements GitGrepQuery {\n   private [Query]: string[] = [];\n\n   *[Symbol.iterator]() {\n      for (const query of this[Query]) {\n         yield query;\n      }\n   }\n\n   and(...and: string[]) {\n      and.length && this[Query].push('--and', '(', ...prefixedArray(and, '-e'), ')');\n      return this;\n   }\n\n   param(...param: string[]) {\n      this[Query].push(...prefixedArray(param, '-e'));\n      return this;\n   }\n}\n\n/**\n * Creates a new builder for a `git.grep` query with optional params\n */\nexport function grepQueryBuilder(...params: string[]): GitGrepQuery {\n   return new GrepQuery().param(...params);\n}\n\nfunction parseGrep(grep: string): GrepResult {\n   const paths: GrepResult['paths'] = new Set<string>();\n   const results: GrepResult['results'] = {};\n\n   forEachLineWithContent(grep, (input) => {\n      const [path, line, preview] = input.split(NULL);\n      paths.add(path);\n      (results[path] = results[path] || []).push({\n         line: asNumber(line),\n         path,\n         preview,\n      });\n   });\n\n   return {\n      paths,\n      results,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'grep'> {\n   return {\n      grep(this: SimpleGitApi, searchTerm: string | GitGrepQuery) {\n         const then = trailingFunctionArgument(arguments);\n         const options = getTrailingOptions(arguments);\n\n         for (const option of disallowedOptions) {\n            if (options.includes(option)) {\n               return this._runTask(\n                  configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n                  then\n               );\n            }\n         }\n\n         if (typeof searchTerm === 'string') {\n            searchTerm = grepQueryBuilder().param(searchTerm);\n         }\n\n         const commands = ['grep', '--null', '-n', '--full-name', ...options, ...searchTerm];\n\n         return this._runTask(\n            {\n               commands,\n               format: 'utf-8',\n               parser(stdOut) {\n                  return parseGrep(stdOut);\n               },\n            },\n            then\n         );\n      },\n   };\n}\n","import { straightThroughStringTask } from './task';\nimport { Maybe, OptionFlags, Options } from '../types';\n\nexport enum ResetMode {\n   MIXED = 'mixed',\n   SOFT = 'soft',\n   HARD = 'hard',\n   MERGE = 'merge',\n   KEEP = 'keep',\n}\n\nconst ResetModes = Array.from(Object.values(ResetMode));\n\nexport type ResetOptions = Options &\n   OptionFlags<'-q' | '--quiet' | '--no-quiet' | '--pathspec-from-nul'> &\n   OptionFlags<'--pathspec-from-file', string>;\n\nexport function resetTask(mode: Maybe<ResetMode>, customArgs: string[]) {\n   const commands: string[] = ['reset'];\n   if (isValidResetMode(mode)) {\n      commands.push(`--${mode}`);\n   }\n   commands.push(...customArgs);\n\n   return straightThroughStringTask(commands);\n}\n\nexport function getResetMode(mode: ResetMode | any): Maybe<ResetMode> {\n   if (isValidResetMode(mode)) {\n      return mode;\n   }\n\n   switch (typeof mode) {\n      case 'string':\n      case 'undefined':\n         return ResetMode.SOFT;\n   }\n\n   return;\n}\n\nfunction isValidResetMode(mode: ResetMode | any): mode is ResetMode {\n   return ResetModes.includes(mode);\n}\n","import debug, { Debugger } from 'debug';\nimport {\n   append,\n   filterHasLength,\n   filterString,\n   filterType,\n   NOOP,\n   objectToString,\n   remove,\n} from './utils';\nimport { Maybe } from './types';\n\ndebug.formatters.L = (value: any) => String(filterHasLength(value) ? value.length : '-');\ndebug.formatters.B = (value: Buffer) => {\n   if (Buffer.isBuffer(value)) {\n      return value.toString('utf8');\n   }\n   return objectToString(value);\n};\n\ntype OutputLoggingHandler = (message: string, ...args: any[]) => void;\n\nfunction createLog() {\n   return debug('simple-git');\n}\n\nexport interface OutputLogger extends OutputLoggingHandler {\n   readonly label: string;\n\n   info: OutputLoggingHandler;\n   step(nextStep?: string): OutputLogger;\n   sibling(name: string): OutputLogger;\n}\n\nfunction prefixedLogger(\n   to: Debugger,\n   prefix: string,\n   forward?: OutputLoggingHandler\n): OutputLoggingHandler {\n   if (!prefix || !String(prefix).replace(/\\s*/, '')) {\n      return !forward\n         ? to\n         : (message, ...args) => {\n              to(message, ...args);\n              forward(message, ...args);\n           };\n   }\n\n   return (message, ...args) => {\n      to(`%s ${message}`, prefix, ...args);\n      if (forward) {\n         forward(message, ...args);\n      }\n   };\n}\n\nfunction childLoggerName(\n   name: Maybe<string>,\n   childDebugger: Maybe<Debugger>,\n   { namespace: parentNamespace }: Debugger\n): string {\n   if (typeof name === 'string') {\n      return name;\n   }\n   const childNamespace = (childDebugger && childDebugger.namespace) || '';\n\n   if (childNamespace.startsWith(parentNamespace)) {\n      return childNamespace.substr(parentNamespace.length + 1);\n   }\n\n   return childNamespace || parentNamespace;\n}\n\nexport function createLogger(\n   label: string,\n   verbose?: string | Debugger,\n   initialStep?: string,\n   infoDebugger = createLog()\n): OutputLogger {\n   const labelPrefix = (label && `[${label}]`) || '';\n\n   const spawned: OutputLogger[] = [];\n   const debugDebugger: Maybe<Debugger> =\n      typeof verbose === 'string' ? infoDebugger.extend(verbose) : verbose;\n   const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n\n   return step(initialStep);\n\n   function sibling(name: string, initial?: string) {\n      return append(\n         spawned,\n         createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n      );\n   }\n\n   function step(phase?: string) {\n      const stepPrefix = (phase && `[${phase}]`) || '';\n      const debug = (debugDebugger && prefixedLogger(debugDebugger, stepPrefix)) || NOOP;\n      const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug);\n\n      return Object.assign(debugDebugger ? debug : info, {\n         label,\n         sibling,\n         info,\n         step,\n      });\n   }\n}\n\n/**\n * The `GitLogger` is used by the main `SimpleGit` runner to handle logging\n * any warnings or errors.\n */\nexport class GitLogger {\n   public error: OutputLoggingHandler;\n\n   public warn: OutputLoggingHandler;\n\n   constructor(private _out: Debugger = createLog()) {\n      this.error = prefixedLogger(_out, '[ERROR]');\n      this.warn = prefixedLogger(_out, '[WARN]');\n   }\n\n   silent(silence = false) {\n      if (silence !== this._out.enabled) {\n         return;\n      }\n\n      const { namespace } = this._out;\n      const env = (process.env.DEBUG || '').split(',').filter((s) => !!s);\n      const hasOn = env.includes(namespace);\n      const hasOff = env.includes(`-${namespace}`);\n\n      // enabling the log\n      if (!silence) {\n         if (hasOff) {\n            remove(env, `-${namespace}`);\n         } else {\n            env.push(namespace);\n         }\n      } else {\n         if (hasOn) {\n            remove(env, namespace);\n         } else {\n            env.push(`-${namespace}`);\n         }\n      }\n\n      debug.enable(env.join(','));\n   }\n}\n","import { SimpleGitTask } from '../types';\nimport { GitError } from '../errors/git-error';\nimport { createLogger, OutputLogger } from '../git-logger';\n\ntype AnySimpleGitTask = SimpleGitTask<any>;\n\ntype TaskInProgress = {\n   name: string;\n   logger: OutputLogger;\n   task: AnySimpleGitTask;\n};\n\nexport class TasksPendingQueue {\n   private _queue: Map<AnySimpleGitTask, TaskInProgress> = new Map();\n\n   constructor(private logLabel = 'GitExecutor') {}\n\n   private withProgress(task: AnySimpleGitTask) {\n      return this._queue.get(task);\n   }\n\n   private createProgress(task: AnySimpleGitTask): TaskInProgress {\n      const name = TasksPendingQueue.getName(task.commands[0]);\n      const logger = createLogger(this.logLabel, name);\n\n      return {\n         task,\n         logger,\n         name,\n      };\n   }\n\n   push(task: AnySimpleGitTask): TaskInProgress {\n      const progress = this.createProgress(task);\n      progress.logger('Adding task to the queue, commands = %o', task.commands);\n\n      this._queue.set(task, progress);\n\n      return progress;\n   }\n\n   fatal(err: GitError) {\n      for (const [task, { logger }] of Array.from(this._queue.entries())) {\n         if (task === err.task) {\n            logger.info(`Failed %o`, err);\n            logger(\n               `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n            );\n         } else {\n            logger.info(\n               `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n               err.message\n            );\n         }\n\n         this.complete(task);\n      }\n\n      if (this._queue.size !== 0) {\n         throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n      }\n   }\n\n   complete(task: AnySimpleGitTask) {\n      const progress = this.withProgress(task);\n      if (progress) {\n         this._queue.delete(task);\n      }\n   }\n\n   attempt(task: AnySimpleGitTask): TaskInProgress {\n      const progress = this.withProgress(task);\n      if (!progress) {\n         throw new GitError(undefined, 'TasksPendingQueue: attempt called for an unknown task');\n      }\n      progress.logger('Starting task');\n\n      return progress;\n   }\n\n   static getName(name = 'empty') {\n      return `task:${name}:${++TasksPendingQueue.counter}`;\n   }\n\n   private static counter = 0;\n}\n","import { spawn, SpawnOptions } from 'child_process';\nimport { GitError } from '../errors/git-error';\nimport { OutputLogger } from '../git-logger';\nimport { PluginStore } from '../plugins';\nimport { EmptyTask, isBufferTask, isEmptyTask } from '../tasks/task';\nimport {\n   GitExecutorResult,\n   Maybe,\n   outputHandler,\n   RunnableTask,\n   SimpleGitExecutor,\n   SimpleGitTask,\n} from '../types';\nimport { callTaskParser, first, GitOutputStreams, objectToString } from '../utils';\nimport { Scheduler } from './scheduler';\nimport { TasksPendingQueue } from './tasks-pending-queue';\n\nexport class GitExecutorChain implements SimpleGitExecutor {\n   private _chain: Promise<any> = Promise.resolve();\n   private _queue = new TasksPendingQueue();\n   private _cwd: string | undefined;\n\n   public get cwd() {\n      return this._cwd || this._executor.cwd;\n   }\n\n   public set cwd(cwd: string) {\n      this._cwd = cwd;\n   }\n\n   public get env() {\n      return this._executor.env;\n   }\n\n   public get outputHandler() {\n      return this._executor.outputHandler;\n   }\n\n   constructor(\n      private _executor: SimpleGitExecutor,\n      private _scheduler: Scheduler,\n      private _plugins: PluginStore\n   ) {}\n\n   public chain() {\n      return this;\n   }\n\n   public push<R>(task: SimpleGitTask<R>): Promise<R> {\n      this._queue.push(task);\n\n      return (this._chain = this._chain.then(() => this.attemptTask(task)));\n   }\n\n   private async attemptTask<R>(task: SimpleGitTask<R>): Promise<void | R> {\n      const onScheduleComplete = await this._scheduler.next();\n      const onQueueComplete = () => this._queue.complete(task);\n\n      try {\n         const { logger } = this._queue.attempt(task);\n         return (await (isEmptyTask(task)\n            ? this.attemptEmptyTask(task, logger)\n            : this.attemptRemoteTask(task, logger))) as R;\n      } catch (e) {\n         throw this.onFatalException(task, e as Error);\n      } finally {\n         onQueueComplete();\n         onScheduleComplete();\n      }\n   }\n\n   private onFatalException<R>(task: SimpleGitTask<R>, e: Error) {\n      const gitError =\n         e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n\n      this._chain = Promise.resolve();\n      this._queue.fatal(gitError);\n\n      return gitError;\n   }\n\n   private async attemptRemoteTask<R>(task: RunnableTask<R>, logger: OutputLogger) {\n      const binary = this._plugins.exec('spawn.binary', '', pluginContext(task, task.commands));\n      const args = this._plugins.exec(\n         'spawn.args',\n         [...task.commands],\n         pluginContext(task, task.commands)\n      );\n\n      const raw = await this.gitResponse(\n         task,\n         binary,\n         args,\n         this.outputHandler,\n         logger.step('SPAWN')\n      );\n      const outputStreams = await this.handleTaskData(task, args, raw, logger.step('HANDLE'));\n\n      logger(`passing response to task's parser as a %s`, task.format);\n\n      if (isBufferTask(task)) {\n         return callTaskParser(task.parser, outputStreams);\n      }\n\n      return callTaskParser(task.parser, outputStreams.asStrings());\n   }\n\n   private async attemptEmptyTask(task: EmptyTask, logger: OutputLogger) {\n      logger(`empty task bypassing child process to call to task's parser`);\n      return task.parser(this);\n   }\n\n   private handleTaskData<R>(\n      task: SimpleGitTask<R>,\n      args: string[],\n      result: GitExecutorResult,\n      logger: OutputLogger\n   ): Promise<GitOutputStreams> {\n      const { exitCode, rejection, stdOut, stdErr } = result;\n\n      return new Promise((done, fail) => {\n         logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n\n         const { error } = this._plugins.exec(\n            'task.error',\n            { error: rejection },\n            {\n               ...pluginContext(task, args),\n               ...result,\n            }\n         );\n\n         if (error && task.onError) {\n            logger.info(`exitCode=%s handling with custom error handler`);\n\n            return task.onError(\n               result,\n               error,\n               (newStdOut) => {\n                  logger.info(`custom error handler treated as success`);\n                  logger(`custom error returned a %s`, objectToString(newStdOut));\n\n                  done(\n                     new GitOutputStreams(\n                        Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n                        Buffer.concat(stdErr)\n                     )\n                  );\n               },\n               fail\n            );\n         }\n\n         if (error) {\n            logger.info(\n               `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n               exitCode,\n               stdErr.length,\n               rejection\n            );\n            return fail(error);\n         }\n\n         logger.info(`retrieving task output complete`);\n         done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n      });\n   }\n\n   private async gitResponse<R>(\n      task: SimpleGitTask<R>,\n      command: string,\n      args: string[],\n      outputHandler: Maybe<outputHandler>,\n      logger: OutputLogger\n   ): Promise<GitExecutorResult> {\n      const outputLogger = logger.sibling('output');\n      const spawnOptions: SpawnOptions = this._plugins.exec(\n         'spawn.options',\n         {\n            cwd: this.cwd,\n            env: this.env,\n            windowsHide: true,\n         },\n         pluginContext(task, task.commands)\n      );\n\n      return new Promise((done) => {\n         const stdOut: Buffer[] = [];\n         const stdErr: Buffer[] = [];\n\n         logger.info(`%s %o`, command, args);\n         logger('%O', spawnOptions);\n\n         let rejection = this._beforeSpawn(task, args);\n         if (rejection) {\n            return done({\n               stdOut,\n               stdErr,\n               exitCode: 9901,\n               rejection,\n            });\n         }\n\n         this._plugins.exec('spawn.before', undefined, {\n            ...pluginContext(task, args),\n            kill(reason) {\n               rejection = reason || rejection;\n            },\n         });\n\n         const spawned = spawn(command, args, spawnOptions);\n\n         spawned.stdout!.on(\n            'data',\n            onDataReceived(stdOut, 'stdOut', logger, outputLogger.step('stdOut'))\n         );\n         spawned.stderr!.on(\n            'data',\n            onDataReceived(stdErr, 'stdErr', logger, outputLogger.step('stdErr'))\n         );\n\n         spawned.on('error', onErrorReceived(stdErr, logger));\n\n         if (outputHandler) {\n            logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n            outputHandler(command, spawned.stdout!, spawned.stderr!, [...args]);\n         }\n\n         this._plugins.exec('spawn.after', undefined, {\n            ...pluginContext(task, args),\n            spawned,\n            close(exitCode: number, reason?: Error) {\n               done({\n                  stdOut,\n                  stdErr,\n                  exitCode,\n                  rejection: rejection || reason,\n               });\n            },\n            kill(reason: Error) {\n               if (spawned.killed) {\n                  return;\n               }\n\n               rejection = reason;\n               spawned.kill('SIGINT');\n            },\n         });\n      });\n   }\n\n   private _beforeSpawn<R>(task: SimpleGitTask<R>, args: string[]) {\n      let rejection: Maybe<Error>;\n      this._plugins.exec('spawn.before', undefined, {\n         ...pluginContext(task, args),\n         kill(reason) {\n            rejection = reason || rejection;\n         },\n      });\n\n      return rejection;\n   }\n}\n\nfunction pluginContext<R>(task: SimpleGitTask<R>, commands: string[]) {\n   return {\n      method: first(task.commands) || '',\n      commands,\n   };\n}\n\nfunction onErrorReceived(target: Buffer[], logger: OutputLogger) {\n   return (err: Error) => {\n      logger(`[ERROR] child process exception %o`, err);\n      target.push(Buffer.from(String(err.stack), 'ascii'));\n   };\n}\n\nfunction onDataReceived(\n   target: Buffer[],\n   name: string,\n   logger: OutputLogger,\n   output: OutputLogger\n) {\n   return (buffer: Buffer) => {\n      logger(`%s received %L bytes`, name, buffer);\n      output(`%B`, buffer);\n      target.push(buffer);\n   };\n}\n","import type { PluginStore } from '../plugins';\nimport type { GitExecutorEnv, outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types';\n\nimport { GitExecutorChain } from './git-executor-chain';\nimport { Scheduler } from './scheduler';\n\nexport class GitExecutor implements SimpleGitExecutor {\n   private _chain = new GitExecutorChain(this, this._scheduler, this._plugins);\n\n   public env: GitExecutorEnv;\n   public outputHandler?: outputHandler;\n\n   constructor(\n      public cwd: string,\n      private _scheduler: Scheduler,\n      private _plugins: PluginStore\n   ) {}\n\n   chain(): SimpleGitExecutor {\n      return new GitExecutorChain(this, this._scheduler, this._plugins);\n   }\n\n   push<R>(task: SimpleGitTask<R>): Promise<R> {\n      return this._chain.push(task);\n   }\n}\n","import { GitError } from './errors/git-error';\nimport { GitResponseError } from './errors/git-response-error';\nimport { SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport { NOOP } from './utils';\n\nexport function taskCallback<R>(\n   task: SimpleGitTask<R>,\n   response: Promise<R>,\n   callback: SimpleGitTaskCallback<R> = NOOP\n) {\n   const onSuccess = (data: R) => {\n      callback(null, data);\n   };\n\n   const onError = (err: GitError | GitResponseError) => {\n      if (err?.task === task) {\n         callback(\n            err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err,\n            undefined as any\n         );\n      }\n   };\n\n   response.then(onSuccess, onError);\n}\n\nfunction addDeprecationNoticeToError(err: GitResponseError) {\n   let log = (name: string) => {\n      console.warn(\n         `simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`\n      );\n      log = NOOP;\n   };\n\n   return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {}));\n\n   function descriptorReducer(all: PropertyDescriptorMap, name: string): typeof all {\n      if (name in err) {\n         return all;\n      }\n\n      all[name] = {\n         enumerable: false,\n         configurable: false,\n         get() {\n            log(name);\n            return err.git[name];\n         },\n      };\n\n      return all;\n   }\n}\n","import { folderExists } from '../utils';\nimport { SimpleGitExecutor } from '../types';\nimport { adhocExecTask } from './task';\n\nexport function changeWorkingDirectoryTask(directory: string, root?: SimpleGitExecutor) {\n   return adhocExecTask((instance: SimpleGitExecutor) => {\n      if (!folderExists(directory)) {\n         throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n      }\n\n      return ((root || instance).cwd = directory);\n   });\n}\n","import type { SimpleGit } from '../../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, remove, trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nfunction checkoutTask(args: string[]) {\n   const commands = ['checkout', ...args];\n   if (commands[1] === '-b' && commands.includes('-B')) {\n      commands[1] = remove(commands, '-B');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport default function (): Pick<SimpleGit, 'checkout' | 'checkoutBranch' | 'checkoutLocalBranch'> {\n   return {\n      checkout(this: SimpleGitApi) {\n         return this._runTask(\n            checkoutTask(getTrailingOptions(arguments, 1)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      checkoutBranch(this: SimpleGitApi, branchName, startPoint) {\n         return this._runTask(\n            checkoutTask(['-b', branchName, startPoint, ...getTrailingOptions(arguments)]),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      checkoutLocalBranch(this: SimpleGitApi, branchName) {\n         return this._runTask(\n            checkoutTask(['-b', branchName, ...getTrailingOptions(arguments)]),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import type { SimpleGitApi } from '../simple-git-api';\nimport type { SimpleGit } from '../../../typings';\nimport { asCamelCase, asNumber, LineParser, parseStringResponse } from '../utils';\n\nexport interface CountObjectsResult {\n   count: number;\n   size: number;\n   inPack: number;\n   packs: number;\n   sizePack: number;\n   prunePackable: number;\n   garbage: number;\n   sizeGarbage: number;\n}\n\nfunction countObjectsResponse(): CountObjectsResult {\n   return {\n      count: 0,\n      garbage: 0,\n      inPack: 0,\n      packs: 0,\n      prunePackable: 0,\n      size: 0,\n      sizeGarbage: 0,\n      sizePack: 0,\n   };\n}\n\nconst parser: LineParser<CountObjectsResult> = new LineParser(\n   /([a-z-]+): (\\d+)$/,\n   (result, [key, value]) => {\n      const property = asCamelCase(key);\n      if (result.hasOwnProperty(property)) {\n         result[property as keyof typeof result] = asNumber(value);\n      }\n   }\n);\n\nexport default function (): Pick<SimpleGit, 'countObjects'> {\n   return {\n      countObjects(this: SimpleGitApi) {\n         return this._runTask({\n            commands: ['count-objects', '--verbose'],\n            format: 'utf-8',\n            parser(stdOut: string) {\n               return parseStringResponse(countObjectsResponse(), [parser], stdOut);\n            },\n         });\n      },\n   };\n}\n","import { CommitResult } from '../../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<CommitResult>[] = [\n   new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n      result.branch = branch;\n      result.commit = commit;\n      result.root = !!root;\n   }),\n   new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n      const parts = author.split('<');\n      const email = parts.pop();\n\n      if (!email || !email.includes('@')) {\n         return;\n      }\n\n      result.author = {\n         email: email.substr(0, email.length - 1),\n         name: parts.join('<').trim(),\n      };\n   }),\n   new LineParser(\n      /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n      (result, [changes, insertions, deletions]) => {\n         result.summary.changes = parseInt(changes, 10) || 0;\n         result.summary.insertions = parseInt(insertions, 10) || 0;\n         result.summary.deletions = parseInt(deletions, 10) || 0;\n      }\n   ),\n   new LineParser(\n      /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n      (result, [changes, lines, direction]) => {\n         result.summary.changes = parseInt(changes, 10) || 0;\n         const count = parseInt(lines, 10) || 0;\n         if (direction === '-') {\n            result.summary.deletions = count;\n         } else if (direction === '+') {\n            result.summary.insertions = count;\n         }\n      }\n   ),\n];\n\nexport function parseCommitResult(stdOut: string): CommitResult {\n   const result: CommitResult = {\n      author: null,\n      branch: '',\n      commit: '',\n      root: false,\n      summary: {\n         changes: 0,\n         insertions: 0,\n         deletions: 0,\n      },\n   };\n   return parseStringResponse(result, parsers, stdOut);\n}\n","import type { CommitResult, SimpleGit } from '../../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { parseCommitResult } from '../parsers/parse-commit';\nimport {\n   asArray,\n   filterArray,\n   filterStringOrStringArray,\n   filterType,\n   getTrailingOptions,\n   prefixedArray,\n   trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport function commitTask(\n   message: string[],\n   files: string[],\n   customArgs: string[]\n): StringTask<CommitResult> {\n   const commands: string[] = [\n      '-c',\n      'core.abbrev=40',\n      'commit',\n      ...prefixedArray(message, '-m'),\n      ...files,\n      ...customArgs,\n   ];\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser: parseCommitResult,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'commit'> {\n   return {\n      commit(this: SimpleGitApi, message: string | string[], ...rest: unknown[]) {\n         const next = trailingFunctionArgument(arguments);\n         const task =\n            rejectDeprecatedSignatures(message) ||\n            commitTask(\n               asArray(message),\n               asArray(filterType(rest[0], filterStringOrStringArray, [])),\n               [...filterType(rest[1], filterArray, []), ...getTrailingOptions(arguments, 0, true)]\n            );\n\n         return this._runTask(task, next);\n      },\n   };\n\n   function rejectDeprecatedSignatures(message?: unknown) {\n      return (\n         !filterStringOrStringArray(message) &&\n         configurationErrorTask(\n            `git.commit: requires the commit message to be supplied as a string/string[]`\n         )\n      );\n   }\n}\n","import { Response, SimpleGit } from '../../../typings';\nimport { SimpleGitApi } from '../simple-git-api';\nimport { trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'firstCommit'> {\n   return {\n      firstCommit(this: SimpleGitApi): Response<string> {\n         return this._runTask(\n            straightThroughStringTask(['rev-list', '--max-parents=0', 'HEAD'], true),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import { straightThroughStringTask } from './task';\nimport { StringTask } from '../types';\n\n/**\n * Task used by `git.hashObject`\n */\nexport function hashObjectTask(filePath: string, write: boolean): StringTask<string> {\n   const commands = ['hash-object', filePath];\n   if (write) {\n      commands.push('-w');\n   }\n\n   return straightThroughStringTask(commands, true);\n}\n","import { InitResult } from '../../../typings';\n\nexport class InitSummary implements InitResult {\n   constructor(\n      public readonly bare: boolean,\n      public readonly path: string,\n      public readonly existing: boolean,\n      public readonly gitDir: string\n   ) {}\n}\n\nconst initResponseRegex = /^Init.+ repository in (.+)$/;\nconst reInitResponseRegex = /^Rein.+ in (.+)$/;\n\nexport function parseInit(bare: boolean, path: string, text: string) {\n   const response = String(text).trim();\n   let result;\n\n   if ((result = initResponseRegex.exec(response))) {\n      return new InitSummary(bare, path, false, result[1]);\n   }\n\n   if ((result = reInitResponseRegex.exec(response))) {\n      return new InitSummary(bare, path, true, result[1]);\n   }\n\n   let gitDir = '';\n   const tokens = response.split(' ');\n   while (tokens.length) {\n      const token = tokens.shift();\n      if (token === 'in') {\n         gitDir = tokens.join(' ');\n         break;\n      }\n   }\n\n   return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\n","import { InitResult } from '../../../typings';\nimport { parseInit } from '../responses/InitSummary';\nimport { StringTask } from '../types';\n\nconst bareCommand = '--bare';\n\nfunction hasBareCommand(command: string[]) {\n   return command.includes(bareCommand);\n}\n\nexport function initTask(bare = false, path: string, customArgs: string[]): StringTask<InitResult> {\n   const commands = ['init', ...customArgs];\n   if (bare && !hasBareCommand(commands)) {\n      commands.splice(1, 0, bareCommand);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string): InitResult {\n         return parseInit(commands.includes('--bare'), path, text);\n      },\n   };\n}\n","export enum LogFormat {\n   NONE = '',\n   STAT = '--stat',\n   NUM_STAT = '--numstat',\n   NAME_ONLY = '--name-only',\n   NAME_STATUS = '--name-status',\n}\n\nconst logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n\nexport function logFormatFromCommand(customArgs: string[]) {\n   for (let i = 0; i < customArgs.length; i++) {\n      const format = logFormatRegex.exec(customArgs[i]);\n      if (format) {\n         return `--${format[1]}` as LogFormat;\n      }\n   }\n\n   return LogFormat.NONE;\n}\n\nexport function isLogFormat(customArg: string | unknown) {\n   return logFormatRegex.test(customArg as string);\n}\n","import { DiffResult, DiffResultBinaryFile, DiffResultTextFile } from '../../../typings';\n\n/***\n * The DiffSummary is returned as a response to getting `git().status()`\n */\nexport class DiffSummary implements DiffResult {\n   changed = 0;\n   deletions = 0;\n   insertions = 0;\n\n   files: Array<DiffResultTextFile | DiffResultBinaryFile> = [];\n}\n","import { DiffResult } from '../../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { DiffSummary } from '../responses/DiffSummary';\nimport { isDiffNameStatus } from '../tasks/diff-name-status';\nimport { asNumber, LineParser, orVoid, parseStringResponse } from '../utils';\n\nconst statParser = [\n   new LineParser<DiffResult>(\n      /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n      (result, [file, changes, alterations = '']) => {\n         result.files.push({\n            file: file.trim(),\n            changes: asNumber(changes),\n            insertions: alterations.replace(/[^+]/g, '').length,\n            deletions: alterations.replace(/[^-]/g, '').length,\n            binary: false,\n         });\n      }\n   ),\n   new LineParser<DiffResult>(\n      /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n      (result, [file, before, after]) => {\n         result.files.push({\n            file: file.trim(),\n            before: asNumber(before),\n            after: asNumber(after),\n            binary: true,\n         });\n      }\n   ),\n   new LineParser<DiffResult>(\n      /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n      (result, [changed, summary]) => {\n         const inserted = /(\\d+) i/.exec(summary);\n         const deleted = /(\\d+) d/.exec(summary);\n\n         result.changed = asNumber(changed);\n         result.insertions = asNumber(inserted?.[1]);\n         result.deletions = asNumber(deleted?.[1]);\n      }\n   ),\n];\n\nconst numStatParser = [\n   new LineParser<DiffResult>(\n      /(\\d+)\\t(\\d+)\\t(.+)$/,\n      (result, [changesInsert, changesDelete, file]) => {\n         const insertions = asNumber(changesInsert);\n         const deletions = asNumber(changesDelete);\n\n         result.changed++;\n         result.insertions += insertions;\n         result.deletions += deletions;\n\n         result.files.push({\n            file,\n            changes: insertions + deletions,\n            insertions,\n            deletions,\n            binary: false,\n         });\n      }\n   ),\n   new LineParser<DiffResult>(/-\\t-\\t(.+)$/, (result, [file]) => {\n      result.changed++;\n\n      result.files.push({\n         file,\n         after: 0,\n         before: 0,\n         binary: true,\n      });\n   }),\n];\n\nconst nameOnlyParser = [\n   new LineParser<DiffResult>(/(.+)$/, (result, [file]) => {\n      result.changed++;\n      result.files.push({\n         file,\n         changes: 0,\n         insertions: 0,\n         deletions: 0,\n         binary: false,\n      });\n   }),\n];\n\nconst nameStatusParser = [\n   new LineParser<DiffResult>(\n      /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n      (result, [status, similarity, from, _to, to]) => {\n         result.changed++;\n         result.files.push({\n            file: to ?? from,\n            changes: 0,\n            insertions: 0,\n            deletions: 0,\n            binary: false,\n            status: orVoid(isDiffNameStatus(status) && status),\n            from: orVoid(!!to && from !== to && from),\n            similarity: asNumber(similarity),\n         });\n      }\n   ),\n];\n\nconst diffSummaryParsers: Record<LogFormat, LineParser<DiffResult>[]> = {\n   [LogFormat.NONE]: statParser,\n   [LogFormat.STAT]: statParser,\n   [LogFormat.NUM_STAT]: numStatParser,\n   [LogFormat.NAME_STATUS]: nameStatusParser,\n   [LogFormat.NAME_ONLY]: nameOnlyParser,\n};\n\nexport function getDiffParser(format = LogFormat.NONE) {\n   const parser = diffSummaryParsers[format];\n\n   return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut, false);\n}\n","import { ListLogLine, LogResult } from '../../../typings';\nimport { toLinesWithContent } from '../utils';\nimport { getDiffParser } from './parse-diff-summary';\nimport { LogFormat } from '../args/log-format';\n\nexport const START_BOUNDARY = 'òòòòòò ';\n\nexport const COMMIT_BOUNDARY = ' òò';\n\nexport const SPLITTER = ' ò ';\n\nconst defaultFieldNames = ['hash', 'date', 'message', 'refs', 'author_name', 'author_email'];\n\nfunction lineBuilder(tokens: string[], fields: string[]): any {\n   return fields.reduce(\n      (line, field, index) => {\n         line[field] = tokens[index] || '';\n         return line;\n      },\n      Object.create({ diff: null }) as any\n   );\n}\n\nexport function createListLogSummaryParser<T = any>(\n   splitter = SPLITTER,\n   fields = defaultFieldNames,\n   logFormat = LogFormat.NONE\n) {\n   const parseDiffResult = getDiffParser(logFormat);\n\n   return function (stdOut: string): LogResult<T> {\n      const all: ReadonlyArray<T & ListLogLine> = toLinesWithContent(\n         stdOut.trim(),\n         false,\n         START_BOUNDARY\n      ).map(function (item) {\n         const lineDetail = item.split(COMMIT_BOUNDARY);\n         const listLogLine: T & ListLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n\n         if (lineDetail.length > 1 && !!lineDetail[1].trim()) {\n            listLogLine.diff = parseDiffResult(lineDetail[1]);\n         }\n\n         return listLogLine;\n      });\n\n      return {\n         all,\n         latest: (all.length && all[0]) || null,\n         total: all.length,\n      };\n   };\n}\n","import { StringTask } from '../types';\nimport { DiffResult } from '../../../typings';\nimport { isLogFormat, LogFormat, logFormatFromCommand } from '../args/log-format';\nimport { getDiffParser } from '../parsers/parse-diff-summary';\nimport { configurationErrorTask, EmptyTask } from './task';\n\nexport function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> | EmptyTask {\n   let logFormat = logFormatFromCommand(customArgs);\n\n   const commands = ['diff'];\n\n   if (logFormat === LogFormat.NONE) {\n      logFormat = LogFormat.STAT;\n      commands.push('--stat=4096');\n   }\n\n   commands.push(...customArgs);\n\n   return (\n      validateLogFormatConfig(commands) || {\n         commands,\n         format: 'utf-8',\n         parser: getDiffParser(logFormat),\n      }\n   );\n}\n\nexport function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void {\n   const flags = customArgs.filter(isLogFormat);\n\n   if (flags.length > 1) {\n      return configurationErrorTask(\n         `Summary flags are mutually exclusive - pick one of ${flags.join(',')}`\n      );\n   }\n\n   if (flags.length && customArgs.includes('-z')) {\n      return configurationErrorTask(\n         `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n      );\n   }\n}\n","import type { Options, StringTask } from '../types';\nimport type { LogResult, SimpleGit } from '../../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { pathspec } from '../args/pathspec';\nimport {\n   COMMIT_BOUNDARY,\n   createListLogSummaryParser,\n   SPLITTER,\n   START_BOUNDARY,\n} from '../parsers/parse-list-log-summary';\nimport {\n   appendTaskOptions,\n   filterArray,\n   filterPrimitives,\n   filterString,\n   filterType,\n   trailingFunctionArgument,\n   trailingOptionsArgument,\n} from '../utils';\nimport { SimpleGitApi } from '../simple-git-api';\nimport { configurationErrorTask } from './task';\nimport { validateLogFormatConfig } from './diff';\n\nenum excludeOptions {\n   '--pretty',\n   'max-count',\n   'maxCount',\n   'n',\n   'file',\n   'format',\n   'from',\n   'to',\n   'splitter',\n   'symmetric',\n   'mailMap',\n   'multiLine',\n   'strictDate',\n}\n\nexport interface DefaultLogFields {\n   hash: string;\n   date: string;\n   message: string;\n   refs: string;\n   body: string;\n   author_name: string;\n   author_email: string;\n}\n\nexport type LogOptions<T = DefaultLogFields> = {\n   file?: string;\n   format?: T;\n   from?: string;\n   mailMap?: boolean;\n   maxCount?: number;\n   multiLine?: boolean;\n   splitter?: string;\n   strictDate?: boolean;\n   symmetric?: boolean;\n   to?: string;\n};\n\ninterface ParsedLogOptions {\n   fields: string[];\n   splitter: string;\n   commands: string[];\n}\n\nfunction prettyFormat(\n   format: Record<string, string | unknown>,\n   splitter: string\n): [string[], string] {\n   const fields: string[] = [];\n   const formatStr: string[] = [];\n\n   Object.keys(format).forEach((field) => {\n      fields.push(field);\n      formatStr.push(String(format[field]));\n   });\n\n   return [fields, formatStr.join(splitter)];\n}\n\nfunction userOptions<T extends Options>(input: T): Options {\n   return Object.keys(input).reduce((out, key) => {\n      if (!(key in excludeOptions)) {\n         out[key] = input[key];\n      }\n      return out;\n   }, {} as Options);\n}\n\nexport function parseLogOptions<T extends Options>(\n   opt: Options | LogOptions<T> = {},\n   customArgs: string[] = []\n): ParsedLogOptions {\n   const splitter = filterType(opt.splitter, filterString, SPLITTER);\n   const format =\n      !filterPrimitives(opt.format) && opt.format\n         ? opt.format\n         : {\n              hash: '%H',\n              date: opt.strictDate === false ? '%ai' : '%aI',\n              message: '%s',\n              refs: '%D',\n              body: opt.multiLine ? '%B' : '%b',\n              author_name: opt.mailMap !== false ? '%aN' : '%an',\n              author_email: opt.mailMap !== false ? '%aE' : '%ae',\n           };\n\n   const [fields, formatStr] = prettyFormat(format, splitter);\n\n   const suffix: string[] = [];\n   const command: string[] = [\n      `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n      ...customArgs,\n   ];\n\n   const maxCount: number | undefined = (opt as any).n || (opt as any)['max-count'] || opt.maxCount;\n   if (maxCount) {\n      command.push(`--max-count=${maxCount}`);\n   }\n\n   if (opt.from || opt.to) {\n      const rangeOperator = opt.symmetric !== false ? '...' : '..';\n      suffix.push(`${opt.from || ''}${rangeOperator}${opt.to || ''}`);\n   }\n\n   if (filterString(opt.file)) {\n      command.push('--follow', pathspec(opt.file));\n   }\n\n   appendTaskOptions(userOptions(opt as Options), command);\n\n   return {\n      fields,\n      splitter,\n      commands: [...command, ...suffix],\n   };\n}\n\nexport function logTask<T>(\n   splitter: string,\n   fields: string[],\n   customArgs: string[]\n): StringTask<LogResult<T>> {\n   const parser = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n\n   return {\n      commands: ['log', ...customArgs],\n      format: 'utf-8',\n      parser,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'log'> {\n   return {\n      log<T extends Options>(this: SimpleGitApi, ...rest: unknown[]) {\n         const next = trailingFunctionArgument(arguments);\n         const options = parseLogOptions<T>(\n            trailingOptionsArgument(arguments),\n            filterType(arguments[0], filterArray)\n         );\n         const task =\n            rejectDeprecatedSignatures(...rest) ||\n            validateLogFormatConfig(options.commands) ||\n            createLogTask(options);\n\n         return this._runTask(task, next);\n      },\n   };\n\n   function createLogTask(options: ParsedLogOptions) {\n      return logTask(options.splitter, options.fields, options.commands);\n   }\n\n   function rejectDeprecatedSignatures(from?: unknown, to?: unknown) {\n      return (\n         filterString(from) &&\n         filterString(to) &&\n         configurationErrorTask(\n            `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n         )\n      );\n   }\n}\n","import {\n   MergeConflict,\n   MergeConflictDeletion,\n   MergeDetail,\n   MergeResultStatus,\n} from '../../../typings';\n\nexport class MergeSummaryConflict implements MergeConflict {\n   constructor(\n      public readonly reason: string,\n      public readonly file: string | null = null,\n      public readonly meta?: MergeConflictDeletion\n   ) {}\n\n   toString() {\n      return `${this.file}:${this.reason}`;\n   }\n}\n\nexport class MergeSummaryDetail implements MergeDetail {\n   public conflicts: MergeConflict[] = [];\n   public merges: string[] = [];\n   public result: MergeResultStatus = 'success';\n\n   get failed() {\n      return this.conflicts.length > 0;\n   }\n\n   get reason() {\n      return this.result;\n   }\n\n   toString() {\n      if (this.conflicts.length) {\n         return `CONFLICTS: ${this.conflicts.join(', ')}`;\n      }\n\n      return 'OK';\n   }\n}\n","import {\n   PullDetailFileChanges,\n   PullDetailSummary,\n   PullFailedResult,\n   PullResult,\n} from '../../../typings';\n\nexport class PullSummary implements PullResult {\n   public remoteMessages = {\n      all: [],\n   };\n   public created = [];\n   public deleted: string[] = [];\n   public files: string[] = [];\n   public deletions: PullDetailFileChanges = {};\n   public insertions: PullDetailFileChanges = {};\n   public summary: PullDetailSummary = {\n      changes: 0,\n      deletions: 0,\n      insertions: 0,\n   };\n}\n\nexport class PullFailedSummary implements PullFailedResult {\n   remote = '';\n   hash = {\n      local: '',\n      remote: '',\n   };\n   branch = {\n      local: '',\n      remote: '',\n   };\n   message = '';\n\n   toString() {\n      return this.message;\n   }\n}\n","import {\n   RemoteMessageResult,\n   RemoteMessages,\n   RemoteMessagesObjectEnumeration,\n} from '../../../typings';\nimport { asNumber, RemoteLineParser } from '../utils';\n\nfunction objectEnumerationResult<T extends RemoteMessages = RemoteMessages>(\n   remoteMessages: T\n): RemoteMessagesObjectEnumeration {\n   return (remoteMessages.objects = remoteMessages.objects || {\n      compressing: 0,\n      counting: 0,\n      enumerating: 0,\n      packReused: 0,\n      reused: { count: 0, delta: 0 },\n      total: { count: 0, delta: 0 },\n   });\n}\n\nfunction asObjectCount(source: string) {\n   const count = /^\\s*(\\d+)/.exec(source);\n   const delta = /delta (\\d+)/i.exec(source);\n\n   return {\n      count: asNumber((count && count[1]) || '0'),\n      delta: asNumber((delta && delta[1]) || '0'),\n   };\n}\n\nexport const remoteMessagesObjectParsers: RemoteLineParser<RemoteMessageResult<RemoteMessages>>[] =\n   [\n      new RemoteLineParser(\n         /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n         (result, [action, count]) => {\n            const key = action.toLowerCase();\n            const enumeration = objectEnumerationResult(result.remoteMessages);\n\n            Object.assign(enumeration, { [key]: asNumber(count) });\n         }\n      ),\n      new RemoteLineParser(\n         /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n         (result, [action, count]) => {\n            const key = action.toLowerCase();\n            const enumeration = objectEnumerationResult(result.remoteMessages);\n\n            Object.assign(enumeration, { [key]: asNumber(count) });\n         }\n      ),\n      new RemoteLineParser(\n         /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n         (result, [total, reused, packReused]) => {\n            const objects = objectEnumerationResult(result.remoteMessages);\n            objects.total = asObjectCount(total);\n            objects.reused = asObjectCount(reused);\n            objects.packReused = asNumber(packReused);\n         }\n      ),\n   ];\n","import { PushResultRemoteMessages, RemoteMessageResult, RemoteMessages } from '../../../typings';\nimport { asNumber, parseStringResponse, RemoteLineParser } from '../utils';\nimport { remoteMessagesObjectParsers } from './parse-remote-objects';\n\nconst parsers: RemoteLineParser<RemoteMessageResult<PushResultRemoteMessages | RemoteMessages>>[] =\n   [\n      new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n         result.remoteMessages.all.push(text.trim());\n         return false;\n      }),\n      ...remoteMessagesObjectParsers,\n      new RemoteLineParser(\n         [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n         (result, [pullRequestUrl]) => {\n            (result.remoteMessages as PushResultRemoteMessages).pullRequestUrl = pullRequestUrl;\n         }\n      ),\n      new RemoteLineParser(\n         [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n         (result, [count, summary, url]) => {\n            (result.remoteMessages as PushResultRemoteMessages).vulnerabilities = {\n               count: asNumber(count),\n               summary,\n               url,\n            };\n         }\n      ),\n   ];\n\nexport function parseRemoteMessages<T extends RemoteMessages = RemoteMessages>(\n   _stdOut: string,\n   stdErr: string\n): RemoteMessageResult {\n   return parseStringResponse({ remoteMessages: new RemoteMessageSummary() as T }, parsers, stdErr);\n}\n\nexport class RemoteMessageSummary implements RemoteMessages {\n   public readonly all: string[] = [];\n}\n","import { PullDetail, PullFailedResult, PullResult, RemoteMessages } from '../../../typings';\nimport { PullFailedSummary, PullSummary } from '../responses/PullSummary';\nimport { TaskParser } from '../types';\nimport { append, LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nconst FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\nconst SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\nconst ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n\nconst parsers: LineParser<PullResult>[] = [\n   new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n      result.files.push(file);\n\n      if (insertions) {\n         result.insertions[file] = insertions.length;\n      }\n\n      if (deletions) {\n         result.deletions[file] = deletions.length;\n      }\n   }),\n   new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n      if (insertions !== undefined || deletions !== undefined) {\n         result.summary.changes = +changes || 0;\n         result.summary.insertions = +insertions || 0;\n         result.summary.deletions = +deletions || 0;\n         return true;\n      }\n      return false;\n   }),\n   new LineParser(ACTION_REGEX, (result, [action, file]) => {\n      append(result.files, file);\n      append(action === 'create' ? result.created : result.deleted, file);\n   }),\n];\n\nconst errorParsers: LineParser<PullFailedResult>[] = [\n   new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n   new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n   new LineParser(\n      /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n      (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n         result.branch.local = branchLocal;\n         result.hash.local = hashLocal;\n         result.branch.remote = branchRemote;\n         result.hash.remote = hashRemote;\n      }\n   ),\n];\n\nexport const parsePullDetail: TaskParser<string, PullDetail> = (stdOut, stdErr) => {\n   return parseStringResponse(new PullSummary(), parsers, [stdOut, stdErr]);\n};\n\nexport const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr) => {\n   return Object.assign(\n      new PullSummary(),\n      parsePullDetail(stdOut, stdErr),\n      parseRemoteMessages<RemoteMessages>(stdOut, stdErr)\n   );\n};\n\nexport function parsePullErrorResult(stdOut: string, stdErr: string) {\n   const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n\n   return pullError.message && pullError;\n}\n","import { MergeDetail, MergeResult } from '../../../typings';\nimport { MergeSummaryConflict, MergeSummaryDetail } from '../responses/MergeSummary';\nimport { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parsePullResult } from './parse-pull';\n\nconst parsers: LineParser<MergeDetail>[] = [\n   new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n      summary.merges.push(autoMerge);\n   }),\n   new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n      summary.conflicts.push(new MergeSummaryConflict(reason, file));\n   }),\n   new LineParser(\n      /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n      (summary, [reason, file, deleteRef]) => {\n         summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n      }\n   ),\n   new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n      summary.conflicts.push(new MergeSummaryConflict(reason, null));\n   }),\n   new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n      summary.result = result;\n   }),\n];\n\n/**\n * Parse the complete response from `git.merge`\n */\nexport const parseMergeResult: TaskParser<string, MergeResult> = (stdOut, stdErr) => {\n   return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n};\n\n/**\n * Parse the merge specific detail (ie: not the content also available in the pull detail) from `git.mnerge`\n * @param stdOut\n */\nexport const parseMergeDetail: TaskParser<string, MergeDetail> = (stdOut) => {\n   return parseStringResponse(new MergeSummaryDetail(), parsers, stdOut);\n};\n","import { MergeResult } from '../../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseMergeResult } from '../parsers/parse-merge';\nimport { StringTask } from '../types';\nimport { configurationErrorTask, EmptyTask } from './task';\n\nexport function mergeTask(customArgs: string[]): EmptyTask | StringTask<MergeResult> {\n   if (!customArgs.length) {\n      return configurationErrorTask('Git.merge requires at least one option');\n   }\n\n   return {\n      commands: ['merge', ...customArgs],\n      format: 'utf-8',\n      parser(stdOut, stdErr): MergeResult {\n         const merge = parseMergeResult(stdOut, stdErr);\n         if (merge.failed) {\n            throw new GitResponseError(merge);\n         }\n\n         return merge;\n      },\n   };\n}\n","import {\n   PushDetail,\n   PushResult,\n   PushResultPushedItem,\n   PushResultRemoteMessages,\n} from '../../../typings';\nimport { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nfunction pushResultPushedItem(local: string, remote: string, status: string): PushResultPushedItem {\n   const deleted = status.includes('deleted');\n   const tag = status.includes('tag') || /^refs\\/tags/.test(local);\n   const alreadyUpdated = !status.includes('new');\n\n   return {\n      deleted,\n      tag,\n      branch: !tag,\n      new: !alreadyUpdated,\n      alreadyUpdated,\n      local,\n      remote,\n   };\n}\n\nconst parsers: LineParser<PushDetail>[] = [\n   new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n      result.repo = repo;\n   }),\n   new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n      result.ref = {\n         ...(result.ref || {}),\n         local,\n      };\n   }),\n   new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n      result.pushed.push(pushResultPushedItem(local, remote, type));\n   }),\n   new LineParser(\n      /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n      (result, [local, remote, remoteName]) => {\n         result.branch = {\n            ...(result.branch || {}),\n            local,\n            remote,\n            remoteName,\n         };\n      }\n   ),\n   new LineParser(\n      /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n      (result, [local, remote, from, to]) => {\n         result.update = {\n            head: {\n               local,\n               remote,\n            },\n            hash: {\n               from,\n               to,\n            },\n         };\n      }\n   ),\n];\n\nexport const parsePushResult: TaskParser<string, PushResult> = (stdOut, stdErr) => {\n   const pushDetail = parsePushDetail(stdOut, stdErr);\n   const responseDetail = parseRemoteMessages<PushResultRemoteMessages>(stdOut, stdErr);\n\n   return {\n      ...pushDetail,\n      ...responseDetail,\n   };\n};\n\nexport const parsePushDetail: TaskParser<string, PushDetail> = (stdOut, stdErr) => {\n   return parseStringResponse({ pushed: [] }, parsers, [stdOut, stdErr]);\n};\n","import { PushResult } from '../../../typings';\nimport { parsePushResult as parser } from '../parsers/parse-push';\nimport { StringTask } from '../types';\nimport { append, remove } from '../utils';\n\ntype PushRef = { remote?: string; branch?: string };\n\nexport function pushTagsTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n   append(customArgs, '--tags');\n   return pushTask(ref, customArgs);\n}\n\nexport function pushTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n   const commands = ['push', ...customArgs];\n   if (ref.branch) {\n      commands.splice(1, 0, ref.branch);\n   }\n   if (ref.remote) {\n      commands.splice(1, 0, ref.remote);\n   }\n\n   remove(commands, '-v');\n   append(commands, '--verbose');\n   append(commands, '--porcelain');\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser,\n   };\n}\n","import { SimpleGit } from '../../../typings';\nimport { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, trailingFunctionArgument } from '../utils';\nimport { straightThroughBufferTask, straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'showBuffer' | 'show'> {\n   return {\n      showBuffer(this: SimpleGitApi) {\n         const commands = ['show', ...getTrailingOptions(arguments, 1)];\n         if (!commands.includes('--binary')) {\n            commands.splice(1, 0, '--binary');\n         }\n\n         return this._runTask(\n            straightThroughBufferTask(commands),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      show(this: SimpleGitApi) {\n         const commands = ['show', ...getTrailingOptions(arguments, 1)];\n         return this._runTask(\n            straightThroughStringTask(commands),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import { FileStatusResult } from '../../../typings';\n\nexport const fromPathRegex = /^(.+)\\0(.+)$/;\n\nexport class FileStatusSummary implements FileStatusResult {\n   public readonly from: string | undefined;\n\n   constructor(\n      public path: string,\n      public index: string,\n      public working_dir: string\n   ) {\n      if (index === 'R' || working_dir === 'R') {\n         const detail = fromPathRegex.exec(path) || [null, path, path];\n         this.from = detail[2] || '';\n         this.path = detail[1] || '';\n      }\n   }\n}\n","import { StatusResult } from '../../../typings';\nimport { append, NULL } from '../utils';\nimport { FileStatusSummary } from './FileStatusSummary';\n\ntype StatusLineParser = (result: StatusResult, file: string) => void;\n\nexport class StatusSummary implements StatusResult {\n   public not_added = [];\n   public conflicted = [];\n   public created = [];\n   public deleted = [];\n   public ignored = undefined;\n   public modified = [];\n   public renamed = [];\n   public files = [];\n   public staged = [];\n   public ahead = 0;\n   public behind = 0;\n   public current = null;\n   public tracking = null;\n   public detached = false;\n\n   public isClean = () => {\n      return !this.files.length;\n   };\n}\n\nenum PorcelainFileStatus {\n   ADDED = 'A',\n   DELETED = 'D',\n   MODIFIED = 'M',\n   RENAMED = 'R',\n   COPIED = 'C',\n   UNMERGED = 'U',\n   UNTRACKED = '?',\n   IGNORED = '!',\n   NONE = ' ',\n}\n\nfunction renamedFile(line: string) {\n   const [to, from] = line.split(NULL);\n\n   return {\n      from: from || to,\n      to,\n   };\n}\n\nfunction parser(\n   indexX: PorcelainFileStatus,\n   indexY: PorcelainFileStatus,\n   handler: StatusLineParser\n): [string, StatusLineParser] {\n   return [`${indexX}${indexY}`, handler];\n}\n\nfunction conflicts(indexX: PorcelainFileStatus, ...indexY: PorcelainFileStatus[]) {\n   return indexY.map((y) => parser(indexX, y, (result, file) => append(result.conflicted, file)));\n}\n\nconst parsers: Map<string, StatusLineParser> = new Map([\n   parser(PorcelainFileStatus.NONE, PorcelainFileStatus.ADDED, (result, file) =>\n      append(result.created, file)\n   ),\n   parser(PorcelainFileStatus.NONE, PorcelainFileStatus.DELETED, (result, file) =>\n      append(result.deleted, file)\n   ),\n   parser(PorcelainFileStatus.NONE, PorcelainFileStatus.MODIFIED, (result, file) =>\n      append(result.modified, file)\n   ),\n\n   parser(\n      PorcelainFileStatus.ADDED,\n      PorcelainFileStatus.NONE,\n      (result, file) => append(result.created, file) && append(result.staged, file)\n   ),\n   parser(\n      PorcelainFileStatus.ADDED,\n      PorcelainFileStatus.MODIFIED,\n      (result, file) =>\n         append(result.created, file) &&\n         append(result.staged, file) &&\n         append(result.modified, file)\n   ),\n\n   parser(\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.NONE,\n      (result, file) => append(result.deleted, file) && append(result.staged, file)\n   ),\n\n   parser(\n      PorcelainFileStatus.MODIFIED,\n      PorcelainFileStatus.NONE,\n      (result, file) => append(result.modified, file) && append(result.staged, file)\n   ),\n   parser(\n      PorcelainFileStatus.MODIFIED,\n      PorcelainFileStatus.MODIFIED,\n      (result, file) => append(result.modified, file) && append(result.staged, file)\n   ),\n\n   parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.NONE, (result, file) => {\n      append(result.renamed, renamedFile(file));\n   }),\n   parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.MODIFIED, (result, file) => {\n      const renamed = renamedFile(file);\n      append(result.renamed, renamed);\n      append(result.modified, renamed.to);\n   }),\n   parser(PorcelainFileStatus.IGNORED, PorcelainFileStatus.IGNORED, (_result, _file) => {\n      append((_result.ignored = _result.ignored || []), _file);\n   }),\n\n   parser(PorcelainFileStatus.UNTRACKED, PorcelainFileStatus.UNTRACKED, (result, file) =>\n      append(result.not_added, file)\n   ),\n\n   ...conflicts(PorcelainFileStatus.ADDED, PorcelainFileStatus.ADDED, PorcelainFileStatus.UNMERGED),\n   ...conflicts(\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.UNMERGED\n   ),\n   ...conflicts(\n      PorcelainFileStatus.UNMERGED,\n      PorcelainFileStatus.ADDED,\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.UNMERGED\n   ),\n\n   [\n      '##',\n      (result, line) => {\n         const aheadReg = /ahead (\\d+)/;\n         const behindReg = /behind (\\d+)/;\n         const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n         const trackingReg = /\\.{3}(\\S*)/;\n         const onEmptyBranchReg = /\\son\\s([\\S]+)$/;\n         let regexResult;\n\n         regexResult = aheadReg.exec(line);\n         result.ahead = (regexResult && +regexResult[1]) || 0;\n\n         regexResult = behindReg.exec(line);\n         result.behind = (regexResult && +regexResult[1]) || 0;\n\n         regexResult = currentReg.exec(line);\n         result.current = regexResult && regexResult[1];\n\n         regexResult = trackingReg.exec(line);\n         result.tracking = regexResult && regexResult[1];\n\n         regexResult = onEmptyBranchReg.exec(line);\n         result.current = (regexResult && regexResult[1]) || result.current;\n\n         result.detached = /\\(no branch\\)/.test(line);\n      },\n   ],\n]);\n\nexport const parseStatusSummary = function (text: string): StatusResult {\n   const lines = text.split(NULL);\n   const status = new StatusSummary();\n\n   for (let i = 0, l = lines.length; i < l; ) {\n      let line = lines[i++].trim();\n\n      if (!line) {\n         continue;\n      }\n\n      if (line.charAt(0) === PorcelainFileStatus.RENAMED) {\n         line += NULL + (lines[i++] || '');\n      }\n\n      splitLine(status, line);\n   }\n\n   return status;\n};\n\nfunction splitLine(result: StatusResult, lineStr: string) {\n   const trimmed = lineStr.trim();\n   switch (' ') {\n      case trimmed.charAt(2):\n         return data(trimmed.charAt(0), trimmed.charAt(1), trimmed.substr(3));\n      case trimmed.charAt(1):\n         return data(PorcelainFileStatus.NONE, trimmed.charAt(0), trimmed.substr(2));\n      default:\n         return;\n   }\n\n   function data(index: string, workingDir: string, path: string) {\n      const raw = `${index}${workingDir}`;\n      const handler = parsers.get(raw);\n\n      if (handler) {\n         handler(result, path);\n      }\n\n      if (raw !== '##' && raw !== '!!') {\n         result.files.push(new FileStatusSummary(path, index, workingDir));\n      }\n   }\n}\n","import { StatusResult } from '../../../typings';\nimport { parseStatusSummary } from '../responses/StatusSummary';\nimport { StringTask } from '../types';\n\nconst ignoredOptions = ['--null', '-z'];\n\nexport function statusTask(customArgs: string[]): StringTask<StatusResult> {\n   const commands = [\n      'status',\n      '--porcelain',\n      '-b',\n      '-u',\n      '--null',\n      ...customArgs.filter((arg) => !ignoredOptions.includes(arg)),\n   ];\n\n   return {\n      format: 'utf-8',\n      commands,\n      parser(text: string) {\n         return parseStatusSummary(text);\n      },\n   };\n}\n","import type { SimpleGitApi } from '../simple-git-api';\nimport type { SimpleGit } from '../../../typings';\nimport { asNumber, ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nexport interface VersionResult {\n   major: number;\n   minor: number;\n   patch: number | string;\n   agent: string;\n   installed: boolean;\n}\n\nconst NOT_INSTALLED = 'installed=false';\n\nfunction versionResponse(\n   major = 0,\n   minor = 0,\n   patch: string | number = 0,\n   agent = '',\n   installed = true\n): VersionResult {\n   return Object.defineProperty(\n      {\n         major,\n         minor,\n         patch,\n         agent,\n         installed,\n      },\n      'toString',\n      {\n         value() {\n            return `${this.major}.${this.minor}.${this.patch}`;\n         },\n         configurable: false,\n         enumerable: false,\n      }\n   );\n}\n\nfunction notInstalledResponse() {\n   return versionResponse(0, 0, 0, '', false);\n}\n\nexport default function (): Pick<SimpleGit, 'version'> {\n   return {\n      version(this: SimpleGitApi) {\n         return this._runTask({\n            commands: ['--version'],\n            format: 'utf-8',\n            parser: versionParser,\n            onError(result, error, done, fail) {\n               if (result.exitCode === ExitCodes.NOT_FOUND) {\n                  return done(Buffer.from(NOT_INSTALLED));\n               }\n\n               fail(error);\n            },\n         });\n      },\n   };\n}\n\nconst parsers: LineParser<VersionResult>[] = [\n   new LineParser(\n      /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n      (result, [major, minor, patch, agent = '']) => {\n         Object.assign(\n            result,\n            versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n         );\n      }\n   ),\n   new LineParser(\n      /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n      (result, [major, minor, patch, agent = '']) => {\n         Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n      }\n   ),\n];\n\nfunction versionParser(stdOut: string) {\n   if (stdOut === NOT_INSTALLED) {\n      return notInstalledResponse();\n   }\n\n   return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers, stdOut);\n}\n","import { SimpleGitBase } from '../../typings';\nimport { taskCallback } from './task-callback';\nimport { changeWorkingDirectoryTask } from './tasks/change-working-directory';\nimport checkout from './tasks/checkout';\nimport countObjects from './tasks/count-objects';\nimport commit from './tasks/commit';\nimport config from './tasks/config';\nimport firstCommit from './tasks/first-commit';\nimport grep from './tasks/grep';\nimport { hashObjectTask } from './tasks/hash-object';\nimport { initTask } from './tasks/init';\nimport log from './tasks/log';\nimport { mergeTask } from './tasks/merge';\nimport { pushTask } from './tasks/push';\nimport show from './tasks/show';\nimport { statusTask } from './tasks/status';\nimport { configurationErrorTask, straightThroughStringTask } from './tasks/task';\nimport version from './tasks/version';\nimport { outputHandler, SimpleGitExecutor, SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport {\n   asArray,\n   filterString,\n   filterType,\n   getTrailingOptions,\n   trailingFunctionArgument,\n} from './utils';\n\nexport class SimpleGitApi implements SimpleGitBase {\n   constructor(private _executor: SimpleGitExecutor) {}\n\n   protected _runTask<T>(task: SimpleGitTask<T>, then?: SimpleGitTaskCallback<T>) {\n      const chain = this._executor.chain();\n      const promise = chain.push(task);\n\n      if (then) {\n         taskCallback(task, promise, then);\n      }\n\n      return Object.create(this, {\n         then: { value: promise.then.bind(promise) },\n         catch: { value: promise.catch.bind(promise) },\n         _executor: { value: chain },\n      });\n   }\n\n   add(files: string | string[]) {\n      return this._runTask(\n         straightThroughStringTask(['add', ...asArray(files)]),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   cwd(directory: string | { path: string; root?: boolean }) {\n      const next = trailingFunctionArgument(arguments);\n\n      if (typeof directory === 'string') {\n         return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n      }\n\n      if (typeof directory?.path === 'string') {\n         return this._runTask(\n            changeWorkingDirectoryTask(\n               directory.path,\n               (directory.root && this._executor) || undefined\n            ),\n            next\n         );\n      }\n\n      return this._runTask(\n         configurationErrorTask('Git.cwd: workingDirectory must be supplied as a string'),\n         next\n      );\n   }\n\n   hashObject(path: string, write: boolean | unknown) {\n      return this._runTask(\n         hashObjectTask(path, write === true),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   init(bare?: boolean | unknown) {\n      return this._runTask(\n         initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   merge() {\n      return this._runTask(\n         mergeTask(getTrailingOptions(arguments)),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   mergeFromTo(remote: string, branch: string) {\n      if (!(filterString(remote) && filterString(branch))) {\n         return this._runTask(\n            configurationErrorTask(\n               `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n            )\n         );\n      }\n\n      return this._runTask(\n         mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n         trailingFunctionArgument(arguments, false)\n      );\n   }\n\n   outputHandler(handler: outputHandler) {\n      this._executor.outputHandler = handler;\n      return this;\n   }\n\n   push() {\n      const task = pushTask(\n         {\n            remote: filterType(arguments[0], filterString),\n            branch: filterType(arguments[1], filterString),\n         },\n         getTrailingOptions(arguments)\n      );\n\n      return this._runTask(task, trailingFunctionArgument(arguments));\n   }\n\n   stash() {\n      return this._runTask(\n         straightThroughStringTask(['stash', ...getTrailingOptions(arguments)]),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   status() {\n      return this._runTask(\n         statusTask(getTrailingOptions(arguments)),\n         trailingFunctionArgument(arguments)\n      );\n   }\n}\n\nObject.assign(\n   SimpleGitApi.prototype,\n   checkout(),\n   commit(),\n   config(),\n   countObjects(),\n   firstCommit(),\n   grep(),\n   log(),\n   show(),\n   version()\n);\n","import { append, remove } from '../utils';\nimport { createDeferred, DeferredPromise } from '@kwsites/promise-deferred';\nimport { createLogger } from '../git-logger';\n\ntype ScheduleCompleteCallback = () => void;\ntype ScheduledTask = Pick<DeferredPromise<ScheduleCompleteCallback>, 'promise' | 'done'> & {\n   id: number;\n};\n\nconst createScheduledTask: () => ScheduledTask = (() => {\n   let id = 0;\n   return () => {\n      id++;\n      const { promise, done } = createDeferred<ScheduleCompleteCallback>();\n\n      return {\n         promise,\n         done,\n         id,\n      };\n   };\n})();\n\nexport class Scheduler {\n   private logger = createLogger('', 'scheduler');\n   private pending: ScheduledTask[] = [];\n   private running: ScheduledTask[] = [];\n\n   constructor(private concurrency = 2) {\n      this.logger(`Constructed, concurrency=%s`, concurrency);\n   }\n\n   private schedule() {\n      if (!this.pending.length || this.running.length >= this.concurrency) {\n         this.logger(\n            `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n            this.pending.length,\n            this.running.length,\n            this.concurrency\n         );\n         return;\n      }\n\n      const task = append(this.running, this.pending.shift()!);\n      this.logger(`Attempting id=%s`, task.id);\n      task.done(() => {\n         this.logger(`Completing id=`, task.id);\n         remove(this.running, task);\n         this.schedule();\n      });\n   }\n\n   next(): Promise<ScheduleCompleteCallback> {\n      const { promise, id } = append(this.pending, createScheduledTask());\n      this.logger(`Scheduling id=%s`, id);\n\n      this.schedule();\n\n      return promise;\n   }\n}\n","import { straightThroughStringTask } from './task';\nimport { OptionFlags, Options, StringTask } from '../types';\n\nexport type ApplyOptions = Options &\n   OptionFlags<\n      | '--stat'\n      | '--numstat'\n      | '--summary'\n      | '--check'\n      | '--index'\n      | '--intent-to-add'\n      | '--3way'\n      | '--apply'\n      | '--no-add'\n      | '-R'\n      | '--reverse'\n      | '--allow-binary-replacement'\n      | '--binary'\n      | '--reject'\n      | '-z'\n      | '--inaccurate-eof'\n      | '--recount'\n      | '--cached'\n      | '--ignore-space-change'\n      | '--ignore-whitespace'\n      | '--verbose'\n      | '--unsafe-paths'\n   > &\n   OptionFlags<'--whitespace', 'nowarn' | 'warn' | 'fix' | 'error' | 'error-all'> &\n   OptionFlags<'--build-fake-ancestor' | '--exclude' | '--include' | '--directory', string> &\n   OptionFlags<'-p' | '-C', number>;\n\nexport function applyPatchTask(patches: string[], customArgs: string[]): StringTask<string> {\n   return straightThroughStringTask(['apply', ...customArgs, ...patches]);\n}\n","import {\n   BranchMultiDeleteResult,\n   BranchSingleDeleteFailure,\n   BranchSingleDeleteResult,\n   BranchSingleDeleteSuccess,\n} from '../../../typings';\n\nexport class BranchDeletionBatch implements BranchMultiDeleteResult {\n   all: BranchSingleDeleteResult[] = [];\n   branches: { [branchName: string]: BranchSingleDeleteResult } = {};\n   errors: BranchSingleDeleteResult[] = [];\n\n   get success(): boolean {\n      return !this.errors.length;\n   }\n}\n\nexport function branchDeletionSuccess(branch: string, hash: string): BranchSingleDeleteSuccess {\n   return {\n      branch,\n      hash,\n      success: true,\n   };\n}\n\nexport function branchDeletionFailure(branch: string): BranchSingleDeleteFailure {\n   return {\n      branch,\n      hash: null,\n      success: false,\n   };\n}\n\nexport function isSingleBranchDeleteFailure(\n   test: BranchSingleDeleteResult\n): test is BranchSingleDeleteSuccess {\n   return test.success;\n}\n","import { BranchMultiDeleteResult } from '../../../typings';\nimport {\n   BranchDeletionBatch,\n   branchDeletionFailure,\n   branchDeletionSuccess,\n} from '../responses/BranchDeleteSummary';\nimport { TaskParser } from '../types';\nimport { ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nconst deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\nconst deleteErrorRegex = /^error[^']+'([^']+)'/m;\n\nconst parsers: LineParser<BranchMultiDeleteResult>[] = [\n   new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n      const deletion = branchDeletionSuccess(branch, hash);\n\n      result.all.push(deletion);\n      result.branches[branch] = deletion;\n   }),\n   new LineParser(deleteErrorRegex, (result, [branch]) => {\n      const deletion = branchDeletionFailure(branch);\n\n      result.errors.push(deletion);\n      result.all.push(deletion);\n      result.branches[branch] = deletion;\n   }),\n];\n\nexport const parseBranchDeletions: TaskParser<string, BranchMultiDeleteResult> = (\n   stdOut,\n   stdErr\n) => {\n   return parseStringResponse(new BranchDeletionBatch(), parsers, [stdOut, stdErr]);\n};\n\nexport function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean {\n   return processExitCode === ExitCodes.ERROR && deleteErrorRegex.test(data);\n}\n","import type { BranchSummary, BranchSummaryBranch } from '../../../typings';\n\nexport enum BranchStatusIdentifier {\n   CURRENT = '*',\n   LINKED = '+',\n}\n\nexport class BranchSummaryResult implements BranchSummary {\n   public all: string[] = [];\n   public branches: { [p: string]: BranchSummaryBranch } = {};\n   public current: string = '';\n   public detached: boolean = false;\n\n   push(\n      status: BranchStatusIdentifier | unknown,\n      detached: boolean,\n      name: string,\n      commit: string,\n      label: string\n   ) {\n      if (status === BranchStatusIdentifier.CURRENT) {\n         this.detached = detached;\n         this.current = name;\n      }\n\n      this.all.push(name);\n      this.branches[name] = {\n         current: status === BranchStatusIdentifier.CURRENT,\n         linkedWorkTree: status === BranchStatusIdentifier.LINKED,\n         name,\n         commit,\n         label,\n      };\n   }\n}\n","import type { BranchSummary } from '../../../typings';\nimport { BranchSummaryResult } from '../responses/BranchSummary';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<BranchSummaryResult>[] = [\n   new LineParser(\n      /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n      (result, [current, name, commit, label]) => {\n         result.push(branchStatus(current), true, name, commit, label);\n      }\n   ),\n   new LineParser(\n      /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n      (result, [current, name, commit, label]) => {\n         result.push(branchStatus(current), false, name, commit, label);\n      }\n   ),\n];\n\nfunction branchStatus(input?: string) {\n   return input ? input.charAt(0) : '';\n}\n\nexport function parseBranchSummary(stdOut: string): BranchSummary {\n   return parseStringResponse(new BranchSummaryResult(), parsers, stdOut);\n}\n","import { BranchMultiDeleteResult, BranchSingleDeleteResult, BranchSummary } from '../../../typings';\nimport { StringTask } from '../types';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { hasBranchDeletionError, parseBranchDeletions } from '../parsers/parse-branch-delete';\nimport { parseBranchSummary } from '../parsers/parse-branch';\nimport { bufferToString } from '../utils';\n\nexport function containsDeleteBranchCommand(commands: string[]) {\n   const deleteCommands = ['-d', '-D', '--delete'];\n   return commands.some((command) => deleteCommands.includes(command));\n}\n\nexport function branchTask(\n   customArgs: string[]\n): StringTask<BranchSummary | BranchSingleDeleteResult> {\n   const isDelete = containsDeleteBranchCommand(customArgs);\n   const commands = ['branch', ...customArgs];\n\n   if (commands.length === 1) {\n      commands.push('-a');\n   }\n\n   if (!commands.includes('-v')) {\n      commands.splice(1, 0, '-v');\n   }\n\n   return {\n      format: 'utf-8',\n      commands,\n      parser(stdOut, stdErr) {\n         if (isDelete) {\n            return parseBranchDeletions(stdOut, stdErr).all[0];\n         }\n\n         return parseBranchSummary(stdOut);\n      },\n   };\n}\n\nexport function branchLocalTask(): StringTask<BranchSummary> {\n   const parser = parseBranchSummary;\n\n   return {\n      format: 'utf-8',\n      commands: ['branch', '-v'],\n      parser,\n   };\n}\n\nexport function deleteBranchesTask(\n   branches: string[],\n   forceDelete = false\n): StringTask<BranchMultiDeleteResult> {\n   return {\n      format: 'utf-8',\n      commands: ['branch', '-v', forceDelete ? '-D' : '-d', ...branches],\n      parser(stdOut, stdErr) {\n         return parseBranchDeletions(stdOut, stdErr);\n      },\n      onError({ exitCode, stdOut }, error, done, fail) {\n         if (!hasBranchDeletionError(String(error), exitCode)) {\n            return fail(error);\n         }\n\n         done(stdOut);\n      },\n   };\n}\n\nexport function deleteBranchTask(\n   branch: string,\n   forceDelete = false\n): StringTask<BranchSingleDeleteResult> {\n   const task: StringTask<BranchSingleDeleteResult> = {\n      format: 'utf-8',\n      commands: ['branch', '-v', forceDelete ? '-D' : '-d', branch],\n      parser(stdOut, stdErr) {\n         return parseBranchDeletions(stdOut, stdErr).branches[branch]!;\n      },\n      onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n         if (!hasBranchDeletionError(String(error), exitCode)) {\n            return fail(error);\n         }\n\n         throw new GitResponseError(\n            task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n            String(error)\n         );\n      },\n   };\n\n   return task;\n}\n","/**\n * Parser for the `check-ignore` command - returns each file as a string array\n */\nexport const parseCheckIgnore = (text: string): string[] => {\n   return text\n      .split(/\\n/g)\n      .map((line) => line.trim())\n      .filter((file) => !!file);\n};\n","import { StringTask } from '../types';\nimport { parseCheckIgnore } from '../responses/CheckIgnore';\n\nexport function checkIgnoreTask(paths: string[]): StringTask<string[]> {\n   return {\n      commands: ['check-ignore', ...paths],\n      format: 'utf-8',\n      parser: parseCheckIgnore,\n   };\n}\n","import { configurationErrorTask, EmptyTask, straightThroughStringTask } from './task';\nimport { OptionFlags, Options, StringTask } from '../types';\nimport { append, filterString } from '../utils';\n\nexport type CloneOptions = Options &\n   OptionFlags<\n      | '--bare'\n      | '--dissociate'\n      | '--mirror'\n      | '--no-checkout'\n      | '--no-remote-submodules'\n      | '--no-shallow-submodules'\n      | '--no-single-branch'\n      | '--no-tags'\n      | '--remote-submodules'\n      | '--single-branch'\n      | '--shallow-submodules'\n      | '--verbose'\n   > &\n   OptionFlags<'--depth' | '-j' | '--jobs', number> &\n   OptionFlags<\n      | '--branch'\n      | '--origin'\n      | '--recurse-submodules'\n      | '--separate-git-dir'\n      | '--shallow-exclude'\n      | '--shallow-since'\n      | '--template',\n      string\n   >;\n\nfunction disallowedCommand(command: string) {\n   return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function cloneTask(\n   repo: string | undefined,\n   directory: string | undefined,\n   customArgs: string[]\n): StringTask<string> | EmptyTask {\n   const commands = ['clone', ...customArgs];\n\n   filterString(repo) && commands.push(repo);\n   filterString(directory) && commands.push(directory);\n\n   const banned = commands.find(disallowedCommand);\n   if (banned) {\n      return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function cloneMirrorTask(\n   repo: string | undefined,\n   directory: string | undefined,\n   customArgs: string[]\n) {\n   append(customArgs, '--mirror');\n\n   return cloneTask(repo, directory, customArgs);\n}\n","import { FetchResult } from '../../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<FetchResult>[] = [\n   new LineParser(/From (.+)$/, (result, [remote]) => {\n      result.remote = remote;\n   }),\n   new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n      result.branches.push({\n         name,\n         tracking,\n      });\n   }),\n   new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n      result.tags.push({\n         name,\n         tracking,\n      });\n   }),\n   new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n      result.deleted.push({\n         tracking,\n      });\n   }),\n   new LineParser(\n      /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n      (result, [from, to, name, tracking]) => {\n         result.updated.push({\n            name,\n            tracking,\n            to,\n            from,\n         });\n      }\n   ),\n];\n\nexport function parseFetchResult(stdOut: string, stdErr: string): FetchResult {\n   const result: FetchResult = {\n      raw: stdOut,\n      remote: null,\n      branches: [],\n      tags: [],\n      updated: [],\n      deleted: [],\n   };\n   return parseStringResponse(result, parsers, [stdOut, stdErr]);\n}\n","import { FetchResult } from '../../../typings';\nimport { parseFetchResult } from '../parsers/parse-fetch';\nimport { StringTask } from '../types';\n\nimport { configurationErrorTask, EmptyTask } from './task';\n\nfunction disallowedCommand(command: string) {\n   return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function fetchTask(\n   remote: string,\n   branch: string,\n   customArgs: string[]\n): StringTask<FetchResult> | EmptyTask {\n   const commands = ['fetch', ...customArgs];\n   if (remote && branch) {\n      commands.push(remote, branch);\n   }\n\n   const banned = commands.find(disallowedCommand);\n   if (banned) {\n      return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser: parseFetchResult,\n   };\n}\n","import { MoveResult } from '../../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<MoveResult>[] = [\n   new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n      result.moves.push({ from, to });\n   }),\n];\n\nexport function parseMoveResult(stdOut: string): MoveResult {\n   return parseStringResponse({ moves: [] }, parsers, stdOut);\n}\n","import { MoveResult } from '../../../typings';\nimport { parseMoveResult } from '../parsers/parse-move';\nimport { StringTask } from '../types';\nimport { asArray } from '../utils';\n\nexport function moveTask(from: string | string[], to: string): StringTask<MoveResult> {\n   return {\n      commands: ['mv', '-v', ...asArray(from), to],\n      format: 'utf-8',\n      parser: parseMoveResult,\n   };\n}\n","import { PullResult } from '../../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parsePullErrorResult, parsePullResult } from '../parsers/parse-pull';\nimport { Maybe, StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function pullTask(\n   remote: Maybe<string>,\n   branch: Maybe<string>,\n   customArgs: string[]\n): StringTask<PullResult> {\n   const commands: string[] = ['pull', ...customArgs];\n   if (remote && branch) {\n      commands.splice(1, 0, remote, branch);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(stdOut, stdErr): PullResult {\n         return parsePullResult(stdOut, stdErr);\n      },\n      onError(result, _error, _done, fail) {\n         const pullError = parsePullErrorResult(\n            bufferToString(result.stdOut),\n            bufferToString(result.stdErr)\n         );\n         if (pullError) {\n            return fail(new GitResponseError(pullError));\n         }\n\n         fail(_error);\n      },\n   };\n}\n","import { forEachLineWithContent } from '../utils';\n\nexport interface RemoteWithoutRefs {\n   name: string;\n}\n\nexport interface RemoteWithRefs extends RemoteWithoutRefs {\n   refs: {\n      fetch: string;\n      push: string;\n   };\n}\n\nexport function parseGetRemotes(text: string): RemoteWithoutRefs[] {\n   const remotes: { [name: string]: RemoteWithoutRefs } = {};\n\n   forEach(text, ([name]) => (remotes[name] = { name }));\n\n   return Object.values(remotes);\n}\n\nexport function parseGetRemotesVerbose(text: string): RemoteWithRefs[] {\n   const remotes: { [name: string]: RemoteWithRefs } = {};\n\n   forEach(text, ([name, url, purpose]) => {\n      if (!remotes.hasOwnProperty(name)) {\n         remotes[name] = {\n            name: name,\n            refs: { fetch: '', push: '' },\n         };\n      }\n\n      if (purpose && url) {\n         remotes[name].refs[purpose.replace(/[^a-z]/g, '') as keyof RemoteWithRefs['refs']] = url;\n      }\n   });\n\n   return Object.values(remotes);\n}\n\nfunction forEach(text: string, handler: (line: string[]) => void) {\n   forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\n","import { parseGetRemotes, parseGetRemotesVerbose } from '../responses/GetRemoteSummary';\nimport { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addRemoteTask(\n   remoteName: string,\n   remoteRepo: string,\n   customArgs: string[]\n): StringTask<string> {\n   return straightThroughStringTask(['remote', 'add', ...customArgs, remoteName, remoteRepo]);\n}\n\nexport function getRemotesTask(verbose: boolean): StringTask<any> {\n   const commands = ['remote'];\n   if (verbose) {\n      commands.push('-v');\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser: verbose ? parseGetRemotesVerbose : parseGetRemotes,\n   };\n}\n\nexport function listRemotesTask(customArgs: string[]): StringTask<string> {\n   const commands = [...customArgs];\n   if (commands[0] !== 'ls-remote') {\n      commands.unshift('ls-remote');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function remoteTask(customArgs: string[]): StringTask<string> {\n   const commands = [...customArgs];\n   if (commands[0] !== 'remote') {\n      commands.unshift('remote');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function removeRemoteTask(remoteName: string) {\n   return straightThroughStringTask(['remote', 'remove', remoteName]);\n}\n","import { LogOptions, LogResult } from '../../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { createListLogSummaryParser } from '../parsers/parse-list-log-summary';\nimport type { StringTask } from '../types';\nimport { validateLogFormatConfig } from './diff';\nimport { parseLogOptions } from './log';\nimport type { EmptyTask } from './task';\n\nexport function stashListTask(\n   opt: LogOptions = {},\n   customArgs: string[]\n): EmptyTask | StringTask<LogResult> {\n   const options = parseLogOptions<any>(opt);\n   const commands = ['stash', 'list', ...options.commands, ...customArgs];\n   const parser = createListLogSummaryParser(\n      options.splitter,\n      options.fields,\n      logFormatFromCommand(commands)\n   );\n\n   return (\n      validateLogFormatConfig(commands) || {\n         commands,\n         format: 'utf-8',\n         parser,\n      }\n   );\n}\n","import { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addSubModuleTask(repo: string, path: string): StringTask<string> {\n   return subModuleTask(['add', repo, path]);\n}\n\nexport function initSubModuleTask(customArgs: string[]): StringTask<string> {\n   return subModuleTask(['init', ...customArgs]);\n}\n\nexport function subModuleTask(customArgs: string[]): StringTask<string> {\n   const commands = [...customArgs];\n   if (commands[0] !== 'submodule') {\n      commands.unshift('submodule');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function updateSubModuleTask(customArgs: string[]): StringTask<string> {\n   return subModuleTask(['update', ...customArgs]);\n}\n","import { TagResult } from '../../../typings';\n\nexport class TagList implements TagResult {\n   constructor(\n      public readonly all: string[],\n      public readonly latest: string | undefined\n   ) {}\n}\n\nexport const parseTagList = function (data: string, customSort = false) {\n   const tags = data.split('\\n').map(trimmed).filter(Boolean);\n\n   if (!customSort) {\n      tags.sort(function (tagA, tagB) {\n         const partsA = tagA.split('.');\n         const partsB = tagB.split('.');\n\n         if (partsA.length === 1 || partsB.length === 1) {\n            return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n         }\n\n         for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n            const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n\n            if (diff) {\n               return diff;\n            }\n         }\n\n         return 0;\n      });\n   }\n\n   const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf('.') >= 0);\n\n   return new TagList(tags, latest);\n};\n\nfunction singleSorted(a: number, b: number): number {\n   const aIsNum = isNaN(a);\n   const bIsNum = isNaN(b);\n\n   if (aIsNum !== bIsNum) {\n      return aIsNum ? 1 : -1;\n   }\n\n   return aIsNum ? sorted(a, b) : 0;\n}\n\nfunction sorted(a: number, b: number) {\n   return a === b ? 0 : a > b ? 1 : -1;\n}\n\nfunction trimmed(input: string) {\n   return input.trim();\n}\n\nfunction toNumber(input: string | undefined) {\n   if (typeof input === 'string') {\n      return parseInt(input.replace(/^\\D+/g, ''), 10) || 0;\n   }\n\n   return 0;\n}\n","import { TagResult } from '../../../typings';\nimport { parseTagList } from '../responses/TagList';\nimport { StringTask } from '../types';\n\n/**\n * Task used by `git.tags`\n */\nexport function tagListTask(customArgs: string[] = []): StringTask<TagResult> {\n   const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n\n   return {\n      format: 'utf-8',\n      commands: ['tag', '-l', ...customArgs],\n      parser(text: string) {\n         return parseTagList(text, hasCustomSort);\n      },\n   };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addTagTask(name: string): StringTask<{ name: string }> {\n   return {\n      format: 'utf-8',\n      commands: ['tag', name],\n      parser() {\n         return { name };\n      },\n   };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addAnnotatedTagTask(\n   name: string,\n   tagMessage: string\n): StringTask<{ name: string }> {\n   return {\n      format: 'utf-8',\n      commands: ['tag', '-a', '-m', tagMessage, name],\n      parser() {\n         return { name };\n      },\n   };\n}\n","const { GitExecutor } = require('./lib/runners/git-executor');\nconst { SimpleGitApi } = require('./lib/simple-git-api');\n\nconst { Scheduler } = require('./lib/runners/scheduler');\nconst { configurationErrorTask } = require('./lib/tasks/task');\nconst {\n   asArray,\n   filterArray,\n   filterPrimitives,\n   filterString,\n   filterStringOrStringArray,\n   filterType,\n   getTrailingOptions,\n   trailingFunctionArgument,\n   trailingOptionsArgument,\n} = require('./lib/utils');\nconst { applyPatchTask } = require('./lib/tasks/apply-patch');\nconst {\n   branchTask,\n   branchLocalTask,\n   deleteBranchesTask,\n   deleteBranchTask,\n} = require('./lib/tasks/branch');\nconst { checkIgnoreTask } = require('./lib/tasks/check-ignore');\nconst { checkIsRepoTask } = require('./lib/tasks/check-is-repo');\nconst { cloneTask, cloneMirrorTask } = require('./lib/tasks/clone');\nconst { cleanWithOptionsTask, isCleanOptionsArray } = require('./lib/tasks/clean');\nconst { diffSummaryTask } = require('./lib/tasks/diff');\nconst { fetchTask } = require('./lib/tasks/fetch');\nconst { moveTask } = require('./lib/tasks/move');\nconst { pullTask } = require('./lib/tasks/pull');\nconst { pushTagsTask } = require('./lib/tasks/push');\nconst {\n   addRemoteTask,\n   getRemotesTask,\n   listRemotesTask,\n   remoteTask,\n   removeRemoteTask,\n} = require('./lib/tasks/remote');\nconst { getResetMode, resetTask } = require('./lib/tasks/reset');\nconst { stashListTask } = require('./lib/tasks/stash-list');\nconst {\n   addSubModuleTask,\n   initSubModuleTask,\n   subModuleTask,\n   updateSubModuleTask,\n} = require('./lib/tasks/sub-module');\nconst { addAnnotatedTagTask, addTagTask, tagListTask } = require('./lib/tasks/tag');\nconst { straightThroughBufferTask, straightThroughStringTask } = require('./lib/tasks/task');\n\nfunction Git(options, plugins) {\n   this._plugins = plugins;\n   this._executor = new GitExecutor(\n      options.baseDir,\n      new Scheduler(options.maxConcurrentProcesses),\n      plugins\n   );\n\n   this._trimmed = options.trimmed;\n}\n\n(Git.prototype = Object.create(SimpleGitApi.prototype)).constructor = Git;\n\n/**\n * Sets the path to a custom git binary, should either be `git` when there is an installation of git available on\n * the system path, or a fully qualified path to the executable.\n */\nGit.prototype.customBinary = function (command) {\n   this._plugins.reconfigure('binary', command);\n   return this;\n};\n\n/**\n * Sets an environment variable for the spawned child process, either supply both a name and value as strings or\n * a single object to entirely replace the current environment variables.\n *\n * @param {string|Object} name\n * @param {string} [value]\n * @returns {Git}\n */\nGit.prototype.env = function (name, value) {\n   if (arguments.length === 1 && typeof name === 'object') {\n      this._executor.env = name;\n   } else {\n      (this._executor.env = this._executor.env || {})[name] = value;\n   }\n\n   return this;\n};\n\n/**\n * List the stash(s) of the local repo\n */\nGit.prototype.stashList = function (options) {\n   return this._runTask(\n      stashListTask(\n         trailingOptionsArgument(arguments) || {},\n         (filterArray(options) && options) || []\n      ),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nfunction createCloneTask(api, task, repoPath, localPath) {\n   if (typeof repoPath !== 'string') {\n      return configurationErrorTask(`git.${api}() requires a string 'repoPath'`);\n   }\n\n   return task(repoPath, filterType(localPath, filterString), getTrailingOptions(arguments));\n}\n\n/**\n * Clone a git repo\n */\nGit.prototype.clone = function () {\n   return this._runTask(\n      createCloneTask('clone', cloneTask, ...arguments),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Mirror a git repo\n */\nGit.prototype.mirror = function () {\n   return this._runTask(\n      createCloneTask('mirror', cloneMirrorTask, ...arguments),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Moves one or more files to a new destination.\n *\n * @see https://git-scm.com/docs/git-mv\n *\n * @param {string|string[]} from\n * @param {string} to\n */\nGit.prototype.mv = function (from, to) {\n   return this._runTask(moveTask(from, to), trailingFunctionArgument(arguments));\n};\n\n/**\n * Internally uses pull and tags to get the list of tags then checks out the latest tag.\n *\n * @param {Function} [then]\n */\nGit.prototype.checkoutLatestTag = function (then) {\n   var git = this;\n   return this.pull(function () {\n      git.tags(function (err, tags) {\n         git.checkout(tags.latest, then);\n      });\n   });\n};\n\n/**\n * Pull the updated contents of the current repo\n */\nGit.prototype.pull = function (remote, branch, options, then) {\n   return this._runTask(\n      pullTask(\n         filterType(remote, filterString),\n         filterType(branch, filterString),\n         getTrailingOptions(arguments)\n      ),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Fetch the updated contents of the current repo.\n *\n * @example\n *   .fetch('upstream', 'master') // fetches from master on remote named upstream\n *   .fetch(function () {}) // runs fetch against default remote and branch and calls function\n *\n * @param {string} [remote]\n * @param {string} [branch]\n */\nGit.prototype.fetch = function (remote, branch) {\n   return this._runTask(\n      fetchTask(\n         filterType(remote, filterString),\n         filterType(branch, filterString),\n         getTrailingOptions(arguments)\n      ),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Disables/enables the use of the console for printing warnings and errors, by default messages are not shown in\n * a production environment.\n *\n * @param {boolean} silence\n * @returns {Git}\n */\nGit.prototype.silent = function (silence) {\n   console.warn(\n      'simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3'\n   );\n   return this;\n};\n\n/**\n * List all tags. When using git 2.7.0 or above, include an options object with `\"--sort\": \"property-name\"` to\n * sort the tags by that property instead of using the default semantic versioning sort.\n *\n * Note, supplying this option when it is not supported by your Git version will cause the operation to fail.\n *\n * @param {Object} [options]\n * @param {Function} [then]\n */\nGit.prototype.tags = function (options, then) {\n   return this._runTask(\n      tagListTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Rebases the current working copy. Options can be supplied either as an array of string parameters\n * to be sent to the `git rebase` command, or a standard options object.\n */\nGit.prototype.rebase = function () {\n   return this._runTask(\n      straightThroughStringTask(['rebase', ...getTrailingOptions(arguments)]),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Reset a repo\n */\nGit.prototype.reset = function (mode) {\n   return this._runTask(\n      resetTask(getResetMode(mode), getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Revert one or more commits in the local working copy\n */\nGit.prototype.revert = function (commit) {\n   const next = trailingFunctionArgument(arguments);\n\n   if (typeof commit !== 'string') {\n      return this._runTask(configurationErrorTask('Commit must be a string'), next);\n   }\n\n   return this._runTask(\n      straightThroughStringTask(['revert', ...getTrailingOptions(arguments, 0, true), commit]),\n      next\n   );\n};\n\n/**\n * Add a lightweight tag to the head of the current branch\n */\nGit.prototype.addTag = function (name) {\n   const task =\n      typeof name === 'string'\n         ? addTagTask(name)\n         : configurationErrorTask('Git.addTag requires a tag name');\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Add an annotated tag to the head of the current branch\n */\nGit.prototype.addAnnotatedTag = function (tagName, tagMessage) {\n   return this._runTask(\n      addAnnotatedTagTask(tagName, tagMessage),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Delete a local branch\n */\nGit.prototype.deleteLocalBranch = function (branchName, forceDelete, then) {\n   return this._runTask(\n      deleteBranchTask(branchName, typeof forceDelete === 'boolean' ? forceDelete : false),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Delete one or more local branches\n */\nGit.prototype.deleteLocalBranches = function (branchNames, forceDelete, then) {\n   return this._runTask(\n      deleteBranchesTask(branchNames, typeof forceDelete === 'boolean' ? forceDelete : false),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * List all branches\n *\n * @param {Object | string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.branch = function (options, then) {\n   return this._runTask(\n      branchTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Return list of local branches\n *\n * @param {Function} [then]\n */\nGit.prototype.branchLocal = function (then) {\n   return this._runTask(branchLocalTask(), trailingFunctionArgument(arguments));\n};\n\n/**\n * Executes any command against the git binary.\n */\nGit.prototype.raw = function (commands) {\n   const createRestCommands = !Array.isArray(commands);\n   const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n\n   for (let i = 0; i < command.length && createRestCommands; i++) {\n      if (!filterPrimitives(command[i])) {\n         command.splice(i, command.length - i);\n         break;\n      }\n   }\n\n   command.push(...getTrailingOptions(arguments, 0, true));\n\n   var next = trailingFunctionArgument(arguments);\n\n   if (!command.length) {\n      return this._runTask(\n         configurationErrorTask('Raw: must supply one or more command to execute'),\n         next\n      );\n   }\n\n   return this._runTask(straightThroughStringTask(command, this._trimmed), next);\n};\n\nGit.prototype.submoduleAdd = function (repo, path, then) {\n   return this._runTask(addSubModuleTask(repo, path), trailingFunctionArgument(arguments));\n};\n\nGit.prototype.submoduleUpdate = function (args, then) {\n   return this._runTask(\n      updateSubModuleTask(getTrailingOptions(arguments, true)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.submoduleInit = function (args, then) {\n   return this._runTask(\n      initSubModuleTask(getTrailingOptions(arguments, true)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.subModule = function (options, then) {\n   return this._runTask(\n      subModuleTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.listRemote = function () {\n   return this._runTask(\n      listRemotesTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Adds a remote to the list of remotes.\n */\nGit.prototype.addRemote = function (remoteName, remoteRepo, then) {\n   return this._runTask(\n      addRemoteTask(remoteName, remoteRepo, getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Removes an entry by name from the list of remotes.\n */\nGit.prototype.removeRemote = function (remoteName, then) {\n   return this._runTask(removeRemoteTask(remoteName), trailingFunctionArgument(arguments));\n};\n\n/**\n * Gets the currently available remotes, setting the optional verbose argument to true includes additional\n * detail on the remotes themselves.\n */\nGit.prototype.getRemotes = function (verbose, then) {\n   return this._runTask(getRemotesTask(verbose === true), trailingFunctionArgument(arguments));\n};\n\n/**\n * Call any `git remote` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.remote = function (options, then) {\n   return this._runTask(\n      remoteTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Call any `git tag` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.tag = function (options, then) {\n   const command = getTrailingOptions(arguments);\n\n   if (command[0] !== 'tag') {\n      command.unshift('tag');\n   }\n\n   return this._runTask(straightThroughStringTask(command), trailingFunctionArgument(arguments));\n};\n\n/**\n * Updates repository server info\n *\n * @param {Function} [then]\n */\nGit.prototype.updateServerInfo = function (then) {\n   return this._runTask(\n      straightThroughStringTask(['update-server-info']),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Pushes the current tag changes to a remote which can be either a URL or named remote. When not specified uses the\n * default configured remote spec.\n *\n * @param {string} [remote]\n * @param {Function} [then]\n */\nGit.prototype.pushTags = function (remote, then) {\n   const task = pushTagsTask(\n      { remote: filterType(remote, filterString) },\n      getTrailingOptions(arguments)\n   );\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Removes the named files from source control.\n */\nGit.prototype.rm = function (files) {\n   return this._runTask(\n      straightThroughStringTask(['rm', '-f', ...asArray(files)]),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Removes the named files from source control but keeps them on disk rather than deleting them entirely. To\n * completely remove the files, use `rm`.\n *\n * @param {string|string[]} files\n */\nGit.prototype.rmKeepLocal = function (files) {\n   return this._runTask(\n      straightThroughStringTask(['rm', '--cached', ...asArray(files)]),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Returns a list of objects in a tree based on commit hash. Passing in an object hash returns the object's content,\n * size, and type.\n *\n * Passing \"-p\" will instruct cat-file to determine the object type, and display its formatted contents.\n *\n * @param {string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.catFile = function (options, then) {\n   return this._catFile('utf-8', arguments);\n};\n\nGit.prototype.binaryCatFile = function () {\n   return this._catFile('buffer', arguments);\n};\n\nGit.prototype._catFile = function (format, args) {\n   var handler = trailingFunctionArgument(args);\n   var command = ['cat-file'];\n   var options = args[0];\n\n   if (typeof options === 'string') {\n      return this._runTask(\n         configurationErrorTask('Git.catFile: options must be supplied as an array of strings'),\n         handler\n      );\n   }\n\n   if (Array.isArray(options)) {\n      command.push.apply(command, options);\n   }\n\n   const task =\n      format === 'buffer' ? straightThroughBufferTask(command) : straightThroughStringTask(command);\n\n   return this._runTask(task, handler);\n};\n\nGit.prototype.diff = function (options, then) {\n   const task = filterString(options)\n      ? configurationErrorTask(\n           'git.diff: supplying options as a single string is no longer supported, switch to an array of strings'\n        )\n      : straightThroughStringTask(['diff', ...getTrailingOptions(arguments)]);\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.diffSummary = function () {\n   return this._runTask(\n      diffSummaryTask(getTrailingOptions(arguments, 1)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.applyPatch = function (patches) {\n   const task = !filterStringOrStringArray(patches)\n      ? configurationErrorTask(\n           `git.applyPatch requires one or more string patches as the first argument`\n        )\n      : applyPatchTask(asArray(patches), getTrailingOptions([].slice.call(arguments, 1)));\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.revparse = function () {\n   const commands = ['rev-parse', ...getTrailingOptions(arguments, true)];\n   return this._runTask(\n      straightThroughStringTask(commands, true),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n */\nGit.prototype.clean = function (mode, options, then) {\n   const usingCleanOptionsArray = isCleanOptionsArray(mode);\n   const cleanMode =\n      (usingCleanOptionsArray && mode.join('')) || filterType(mode, filterString) || '';\n   const customArgs = getTrailingOptions([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n\n   return this._runTask(\n      cleanWithOptionsTask(cleanMode, customArgs),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.exec = function (then) {\n   const task = {\n      commands: [],\n      format: 'utf-8',\n      parser() {\n         if (typeof then === 'function') {\n            then();\n         }\n      },\n   };\n\n   return this._runTask(task);\n};\n\n/**\n * Clears the queue of pending commands and returns the wrapper instance for chaining.\n *\n * @returns {Git}\n */\nGit.prototype.clearQueue = function () {\n   // TODO:\n   // this._executor.clear();\n   return this;\n};\n\n/**\n * Check if a pathname or pathnames are excluded by .gitignore\n *\n * @param {string|string[]} pathnames\n * @param {Function} [then]\n */\nGit.prototype.checkIgnore = function (pathnames, then) {\n   return this._runTask(\n      checkIgnoreTask(asArray(filterType(pathnames, filterStringOrStringArray, []))),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.checkIsRepo = function (checkType, then) {\n   return this._runTask(\n      checkIsRepoTask(filterType(checkType, filterString)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nmodule.exports = Git;\n","import { pathspec } from './args/pathspec';\nimport { GitConstructError } from './errors/git-construct-error';\nimport { GitError } from './errors/git-error';\nimport { GitPluginError } from './errors/git-plugin-error';\nimport { GitResponseError } from './errors/git-response-error';\nimport { TaskConfigurationError } from './errors/task-configuration-error';\nimport { CheckRepoActions } from './tasks/check-is-repo';\nimport { CleanOptions } from './tasks/clean';\nimport { GitConfigScope } from './tasks/config';\nimport { DiffNameStatus } from './tasks/diff-name-status';\nimport { grepQueryBuilder } from './tasks/grep';\nimport { ResetMode } from './tasks/reset';\n\nexport {\n   CheckRepoActions,\n   CleanOptions,\n   DiffNameStatus,\n   GitConfigScope,\n   GitConstructError,\n   GitError,\n   GitPluginError,\n   GitResponseError,\n   ResetMode,\n   TaskConfigurationError,\n   grepQueryBuilder,\n   pathspec,\n};\n","import { GitError } from './git-error';\nimport { SimpleGitOptions } from '../types';\n\n/**\n * The `GitConstructError` is thrown when an error occurs in the constructor\n * of the `simple-git` instance itself. Most commonly as a result of using\n * a `baseDir` option that points to a folder that either does not exist,\n * or cannot be read by the user the node script is running as.\n *\n * Check the `.message` property for more detail including the properties\n * passed to the constructor.\n */\nexport class GitConstructError extends GitError {\n   constructor(\n      public readonly config: SimpleGitOptions,\n      message: string\n   ) {\n      super(undefined, message);\n   }\n}\n","import { SimpleGitOptions, SimpleGitTask } from '../types';\nimport { GitError } from './git-error';\n\nexport class GitPluginError extends GitError {\n   constructor(\n      public task?: SimpleGitTask<any>,\n      public readonly plugin?: keyof SimpleGitOptions,\n      message?: string\n   ) {\n      super(task, message);\n      Object.setPrototypeOf(this, new.target.prototype);\n   }\n}\n","import { SimpleGitOptions } from '../types';\nimport { SimpleGitPlugin } from './simple-git-plugin';\nimport { GitPluginError } from '../errors/git-plugin-error';\n\nexport function abortPlugin(signal: SimpleGitOptions['abort']) {\n   if (!signal) {\n      return;\n   }\n\n   const onSpawnAfter: SimpleGitPlugin<'spawn.after'> = {\n      type: 'spawn.after',\n      action(_data, context) {\n         function kill() {\n            context.kill(new GitPluginError(undefined, 'abort', 'Abort signal received'));\n         }\n\n         signal.addEventListener('abort', kill);\n\n         context.spawned.on('close', () => signal.removeEventListener('abort', kill));\n      },\n   };\n\n   const onSpawnBefore: SimpleGitPlugin<'spawn.before'> = {\n      type: 'spawn.before',\n      action(_data, context) {\n         if (signal.aborted) {\n            context.kill(new GitPluginError(undefined, 'abort', 'Abort already signaled'));\n         }\n      },\n   };\n\n   return [onSpawnBefore, onSpawnAfter];\n}\n","import type { SimpleGitPlugin } from './simple-git-plugin';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitPluginConfig } from '../types';\n\nfunction isConfigSwitch(arg: string | unknown) {\n   return typeof arg === 'string' && arg.trim().toLowerCase() === '-c';\n}\n\nfunction preventProtocolOverride(arg: string, next: string) {\n   if (!isConfigSwitch(arg)) {\n      return;\n   }\n\n   if (!/^\\s*protocol(.[a-z]+)?.allow/.test(next)) {\n      return;\n   }\n\n   throw new GitPluginError(\n      undefined,\n      'unsafe',\n      'Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol'\n   );\n}\n\nfunction preventUploadPack(arg: string, method: string) {\n   if (/^\\s*--(upload|receive)-pack/.test(arg)) {\n      throw new GitPluginError(\n         undefined,\n         'unsafe',\n         `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`\n      );\n   }\n\n   if (method === 'clone' && /^\\s*-u\\b/.test(arg)) {\n      throw new GitPluginError(\n         undefined,\n         'unsafe',\n         `Use of clone with option -u is not permitted without enabling allowUnsafePack`\n      );\n   }\n\n   if (method === 'push' && /^\\s*--exec\\b/.test(arg)) {\n      throw new GitPluginError(\n         undefined,\n         'unsafe',\n         `Use of push with option --exec is not permitted without enabling allowUnsafePack`\n      );\n   }\n}\n\nexport function blockUnsafeOperationsPlugin({\n   allowUnsafeProtocolOverride = false,\n   allowUnsafePack = false,\n}: SimpleGitPluginConfig['unsafe'] = {}): SimpleGitPlugin<'spawn.args'> {\n   return {\n      type: 'spawn.args',\n      action(args, context) {\n         args.forEach((current, index) => {\n            const next = index < args.length ? args[index + 1] : '';\n\n            allowUnsafeProtocolOverride || preventProtocolOverride(current, next);\n            allowUnsafePack || preventUploadPack(current, context.method);\n         });\n\n         return args;\n      },\n   };\n}\n","import { prefixedArray } from '../utils';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function commandConfigPrefixingPlugin(\n   configuration: string[]\n): SimpleGitPlugin<'spawn.args'> {\n   const prefix = prefixedArray(configuration, '-c');\n\n   return {\n      type: 'spawn.args',\n      action(data) {\n         return [...prefix, ...data];\n      },\n   };\n}\n","import { deferred, DeferredPromise } from '@kwsites/promise-deferred';\nimport { SimpleGitPluginConfig } from '../types';\nimport { delay } from '../utils';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nconst never = deferred().promise;\n\nexport function completionDetectionPlugin({\n   onClose = true,\n   onExit = 50,\n}: SimpleGitPluginConfig['completion'] = {}): SimpleGitPlugin<'spawn.after'> {\n   function createEvents() {\n      let exitCode = -1;\n      const events = {\n         close: deferred(),\n         closeTimeout: deferred(),\n         exit: deferred(),\n         exitTimeout: deferred(),\n      };\n\n      const result = Promise.race([\n         onClose === false ? never : events.closeTimeout.promise,\n         onExit === false ? never : events.exitTimeout.promise,\n      ]);\n\n      configureTimeout(onClose, events.close, events.closeTimeout);\n      configureTimeout(onExit, events.exit, events.exitTimeout);\n\n      return {\n         close(code: number) {\n            exitCode = code;\n            events.close.done();\n         },\n         exit(code: number) {\n            exitCode = code;\n            events.exit.done();\n         },\n         get exitCode() {\n            return exitCode;\n         },\n         result,\n      };\n   }\n\n   function configureTimeout(\n      flag: boolean | number,\n      event: DeferredPromise<void>,\n      timeout: DeferredPromise<void>\n   ) {\n      if (flag === false) {\n         return;\n      }\n\n      (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n   }\n\n   return {\n      type: 'spawn.after',\n      async action(_data, { spawned, close }) {\n         const events = createEvents();\n\n         let deferClose = true;\n         let quickClose = () => void (deferClose = false);\n\n         spawned.stdout?.on('data', quickClose);\n         spawned.stderr?.on('data', quickClose);\n         spawned.on('error', quickClose);\n\n         spawned.on('close', (code: number) => events.close(code));\n         spawned.on('exit', (code: number) => events.exit(code));\n\n         try {\n            await events.result;\n            if (deferClose) {\n               await delay(50);\n            }\n            close(events.exitCode);\n         } catch (err) {\n            close(events.exitCode, err as Error);\n         }\n      },\n   };\n}\n","import type { SimpleGitOptions } from '../types';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport { asArray } from '../utils';\nimport { PluginStore } from './plugin-store';\n\nconst WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nconst WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\n\nfunction isBadArgument(arg: string) {\n   return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_-]+)$/i.test(arg);\n}\n\nfunction toBinaryConfig(\n   input: string[],\n   allowUnsafe: boolean\n): { binary: string; prefix?: string } {\n   if (input.length < 1 || input.length > 2) {\n      throw new GitPluginError(undefined, 'binary', WRONG_NUMBER_ERR);\n   }\n\n   const isBad = input.some(isBadArgument);\n   if (isBad) {\n      if (allowUnsafe) {\n         console.warn(WRONG_CHARS_ERR);\n      } else {\n         throw new GitPluginError(undefined, 'binary', WRONG_CHARS_ERR);\n      }\n   }\n\n   const [binary, prefix] = input;\n   return {\n      binary,\n      prefix,\n   };\n}\n\nexport function customBinaryPlugin(\n   plugins: PluginStore,\n   input: SimpleGitOptions['binary'] = ['git'],\n   allowUnsafe = false\n) {\n   let config = toBinaryConfig(asArray(input), allowUnsafe);\n\n   plugins.on('binary', (input) => {\n      config = toBinaryConfig(asArray(input), allowUnsafe);\n   });\n\n   plugins.append('spawn.binary', () => {\n      return config.binary;\n   });\n\n   plugins.append('spawn.args', (data) => {\n      return config.prefix ? [config.prefix, ...data] : data;\n   });\n}\n","import { GitError } from '../errors/git-error';\nimport { GitExecutorResult, SimpleGitPluginConfig } from '../types';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\ntype TaskResult = Omit<GitExecutorResult, 'rejection'>;\n\nfunction isTaskError(result: TaskResult) {\n   return !!(result.exitCode && result.stdErr.length);\n}\n\nfunction getErrorMessage(result: TaskResult) {\n   return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\n\nexport function errorDetectionHandler(\n   overwrite = false,\n   isError = isTaskError,\n   errorMessage: (result: TaskResult) => Buffer | Error = getErrorMessage\n) {\n   return (error: Buffer | Error | undefined, result: TaskResult) => {\n      if ((!overwrite && error) || !isError(result)) {\n         return error;\n      }\n\n      return errorMessage(result);\n   };\n}\n\nexport function errorDetectionPlugin(\n   config: SimpleGitPluginConfig['errors']\n): SimpleGitPlugin<'task.error'> {\n   return {\n      type: 'task.error',\n      action(data, context) {\n         const error = config(data.error, {\n            stdErr: context.stdErr,\n            stdOut: context.stdOut,\n            exitCode: context.exitCode,\n         });\n\n         if (Buffer.isBuffer(error)) {\n            return { error: new GitError(undefined, error.toString('utf-8')) };\n         }\n\n         return {\n            error,\n         };\n      },\n   };\n}\n","import { EventEmitter } from 'node:events';\n\nimport type {\n   SimpleGitPlugin,\n   SimpleGitPluginType,\n   SimpleGitPluginTypes,\n} from './simple-git-plugin';\nimport { append, asArray } from '../utils';\nimport type { SimpleGitPluginConfig } from '../types';\n\nexport class PluginStore {\n   private plugins: Set<SimpleGitPlugin<SimpleGitPluginType>> = new Set();\n   private events = new EventEmitter();\n\n   on<K extends keyof SimpleGitPluginConfig>(\n      type: K,\n      listener: (data: SimpleGitPluginConfig[K]) => void\n   ) {\n      this.events.on(type, listener);\n   }\n\n   reconfigure<K extends keyof SimpleGitPluginConfig>(type: K, data: SimpleGitPluginConfig[K]) {\n      this.events.emit(type, data);\n   }\n\n   public append<T extends SimpleGitPluginType>(type: T, action: SimpleGitPlugin<T>['action']) {\n      const plugin = append(this.plugins, { type, action });\n\n      return () => this.plugins.delete(plugin);\n   }\n\n   public add<T extends SimpleGitPluginType>(\n      plugin: void | SimpleGitPlugin<T> | SimpleGitPlugin<T>[]\n   ) {\n      const plugins: SimpleGitPlugin<T>[] = [];\n\n      asArray(plugin).forEach((plugin) => plugin && this.plugins.add(append(plugins, plugin)));\n\n      return () => {\n         plugins.forEach((plugin) => this.plugins.delete(plugin));\n      };\n   }\n\n   public exec<T extends SimpleGitPluginType>(\n      type: T,\n      data: SimpleGitPluginTypes[T]['data'],\n      context: SimpleGitPluginTypes[T]['context']\n   ): typeof data {\n      let output = data;\n      const contextual = Object.freeze(Object.create(context));\n\n      for (const plugin of this.plugins) {\n         if (plugin.type === type) {\n            output = plugin.action(output, contextual);\n         }\n      }\n\n      return output;\n   }\n}\n","import { SimpleGitOptions } from '../types';\nimport { asNumber, including } from '../utils';\n\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function progressMonitorPlugin(progress: Exclude<SimpleGitOptions['progress'], void>) {\n   const progressCommand = '--progress';\n   const progressMethods = ['checkout', 'clone', 'fetch', 'pull', 'push'];\n\n   const onProgress: SimpleGitPlugin<'spawn.after'> = {\n      type: 'spawn.after',\n      action(_data, context) {\n         if (!context.commands.includes(progressCommand)) {\n            return;\n         }\n\n         context.spawned.stderr?.on('data', (chunk: Buffer) => {\n            const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString('utf8'));\n            if (!message) {\n               return;\n            }\n\n            progress({\n               method: context.method,\n               stage: progressEventStage(message[1]),\n               progress: asNumber(message[2]),\n               processed: asNumber(message[3]),\n               total: asNumber(message[4]),\n            });\n         });\n      },\n   };\n\n   const onArgs: SimpleGitPlugin<'spawn.args'> = {\n      type: 'spawn.args',\n      action(args, context) {\n         if (!progressMethods.includes(context.method)) {\n            return args;\n         }\n\n         return including(args, progressCommand);\n      },\n   };\n\n   return [onArgs, onProgress];\n}\n\nfunction progressEventStage(input: string) {\n   return String(input.toLowerCase().split(' ', 1)) || 'unknown';\n}\n","import { SpawnOptions } from 'child_process';\nimport { pick } from '../utils';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function spawnOptionsPlugin(\n   spawnOptions: Partial<SpawnOptions>\n): SimpleGitPlugin<'spawn.options'> {\n   const options = pick(spawnOptions, ['uid', 'gid']);\n\n   return {\n      type: 'spawn.options',\n      action(data) {\n         return { ...options, ...data };\n      },\n   };\n}\n","import type { SimpleGitPlugin } from './simple-git-plugin';\n\nimport type { SimpleGitOptions } from '../types';\nimport { GitPluginError } from '../errors/git-plugin-error';\n\nexport function timeoutPlugin({\n   block,\n   stdErr = true,\n   stdOut = true,\n}: Exclude<SimpleGitOptions['timeout'], undefined>): SimpleGitPlugin<'spawn.after'> | void {\n   if (block > 0) {\n      return {\n         type: 'spawn.after',\n         action(_data, context) {\n            let timeout: NodeJS.Timeout;\n\n            function wait() {\n               timeout && clearTimeout(timeout);\n               timeout = setTimeout(kill, block);\n            }\n\n            function stop() {\n               context.spawned.stdout?.off('data', wait);\n               context.spawned.stderr?.off('data', wait);\n               context.spawned.off('exit', stop);\n               context.spawned.off('close', stop);\n               timeout && clearTimeout(timeout);\n            }\n\n            function kill() {\n               stop();\n               context.kill(new GitPluginError(undefined, 'timeout', `block timeout reached`));\n            }\n\n            stdOut && context.spawned.stdout?.on('data', wait);\n            stdErr && context.spawned.stderr?.on('data', wait);\n            context.spawned.on('exit', stop);\n            context.spawned.on('close', stop);\n\n            wait();\n         },\n      };\n   }\n}\n","import { SimpleGitPlugin } from './simple-git-plugin';\nimport { isPathSpec, toPaths } from '../args/pathspec';\n\nexport function suffixPathsPlugin(): SimpleGitPlugin<'spawn.args'> {\n   return {\n      type: 'spawn.args',\n      action(data) {\n         const prefix: string[] = [];\n         let suffix: undefined | string[];\n         function append(args: string[]) {\n            (suffix = suffix || []).push(...args);\n         }\n\n         for (let i = 0; i < data.length; i++) {\n            const param = data[i];\n\n            if (isPathSpec(param)) {\n               append(toPaths(param));\n               continue;\n            }\n\n            if (param === '--') {\n               append(\n                  data.slice(i + 1).flatMap((item) => (isPathSpec(item) && toPaths(item)) || item)\n               );\n               break;\n            }\n\n            prefix.push(param);\n         }\n\n         return !suffix ? prefix : [...prefix, '--', ...suffix.map(String)];\n      },\n   };\n}\n","import { SimpleGitFactory } from '../../typings';\n\nimport * as api from './api';\nimport {\n   abortPlugin,\n   blockUnsafeOperationsPlugin,\n   commandConfigPrefixingPlugin,\n   completionDetectionPlugin,\n   customBinaryPlugin,\n   errorDetectionHandler,\n   errorDetectionPlugin,\n   PluginStore,\n   progressMonitorPlugin,\n   spawnOptionsPlugin,\n   timeoutPlugin,\n} from './plugins';\nimport { suffixPathsPlugin } from './plugins/suffix-paths.plugin';\nimport { createInstanceConfig, folderExists } from './utils';\nimport { SimpleGitOptions } from './types';\n\nconst Git = require('../git');\n\n/**\n * Adds the necessary properties to the supplied object to enable it for use as\n * the default export of a module.\n *\n * Eg: `module.exports = esModuleFactory({ something () {} })`\n */\nexport function esModuleFactory<T>(defaultExport: T) {\n   return Object.defineProperties(defaultExport, {\n      __esModule: { value: true },\n      default: { value: defaultExport },\n   }) as T & { __esModule: true; default: T };\n}\n\nexport function gitExportFactory(factory: SimpleGitFactory) {\n   return Object.assign(factory.bind(null), api);\n}\n\nexport function gitInstanceFactory(\n   baseDir?: string | Partial<SimpleGitOptions>,\n   options?: Partial<SimpleGitOptions>\n) {\n   const plugins = new PluginStore();\n   const config = createInstanceConfig(\n      (baseDir && (typeof baseDir === 'string' ? { baseDir } : baseDir)) || {},\n      options\n   );\n\n   if (!folderExists(config.baseDir)) {\n      throw new api.GitConstructError(\n         config,\n         `Cannot use simple-git on a directory that does not exist`\n      );\n   }\n\n   if (Array.isArray(config.config)) {\n      plugins.add(commandConfigPrefixingPlugin(config.config));\n   }\n\n   plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n   plugins.add(suffixPathsPlugin());\n   plugins.add(completionDetectionPlugin(config.completion));\n   config.abort && plugins.add(abortPlugin(config.abort));\n   config.progress && plugins.add(progressMonitorPlugin(config.progress));\n   config.timeout && plugins.add(timeoutPlugin(config.timeout));\n   config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n\n   plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n   config.errors && plugins.add(errorDetectionPlugin(config.errors));\n\n   customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n\n   return new Git(config, plugins);\n}\n","import { SimpleGit, SimpleGitOptions } from '../../../typings';\n\nimport { GitResponseError } from '../errors/git-response-error';\nimport { gitInstanceFactory } from '../git-factory';\nimport { SimpleGitTaskCallback } from '../types';\n\nconst functionNamesBuilderApi = ['customBinary', 'env', 'outputHandler', 'silent'];\n\nconst functionNamesPromiseApi = [\n   'add',\n   'addAnnotatedTag',\n   'addConfig',\n   'addRemote',\n   'addTag',\n   'applyPatch',\n   'binaryCatFile',\n   'branch',\n   'branchLocal',\n   'catFile',\n   'checkIgnore',\n   'checkIsRepo',\n   'checkout',\n   'checkoutBranch',\n   'checkoutLatestTag',\n   'checkoutLocalBranch',\n   'clean',\n   'clone',\n   'commit',\n   'cwd',\n   'deleteLocalBranch',\n   'deleteLocalBranches',\n   'diff',\n   'diffSummary',\n   'exec',\n   'fetch',\n   'getRemotes',\n   'init',\n   'listConfig',\n   'listRemote',\n   'log',\n   'merge',\n   'mergeFromTo',\n   'mirror',\n   'mv',\n   'pull',\n   'push',\n   'pushTags',\n   'raw',\n   'rebase',\n   'remote',\n   'removeRemote',\n   'reset',\n   'revert',\n   'revparse',\n   'rm',\n   'rmKeepLocal',\n   'show',\n   'stash',\n   'stashList',\n   'status',\n   'subModule',\n   'submoduleAdd',\n   'submoduleInit',\n   'submoduleUpdate',\n   'tag',\n   'tags',\n   'updateServerInfo',\n];\n\nexport function gitP(\n   ...args: [] | [string] | [Partial<SimpleGitOptions>] | [string, Partial<SimpleGitOptions>]\n): SimpleGit {\n   let git: any;\n\n   let chain = Promise.resolve();\n\n   try {\n      git = gitInstanceFactory(...args);\n   } catch (e) {\n      chain = Promise.reject(e);\n   }\n\n   function builderReturn() {\n      return promiseApi;\n   }\n\n   function chainReturn() {\n      return chain;\n   }\n\n   const promiseApi = [...functionNamesBuilderApi, ...functionNamesPromiseApi].reduce(\n      (api: any, name: string) => {\n         const isAsync = functionNamesPromiseApi.includes(name);\n\n         const valid = isAsync ? asyncWrapper(name, git) : syncWrapper(name, git, api);\n         const alternative = isAsync ? chainReturn : builderReturn;\n\n         Object.defineProperty(api, name, {\n            enumerable: false,\n            configurable: false,\n            value: git ? valid : alternative,\n         });\n\n         return api;\n      },\n      {}\n   );\n\n   return promiseApi as SimpleGit;\n\n   function asyncWrapper(fn: string, git: any): (...args: any[]) => Promise<any> {\n      return function (...args: any[]) {\n         if (typeof args[args.length] === 'function') {\n            throw new TypeError(\n               'Promise interface requires that handlers are not supplied inline, ' +\n                  'trailing function not allowed in call to ' +\n                  fn\n            );\n         }\n\n         return chain.then(function () {\n            return new Promise(function (resolve, reject) {\n               const callback: SimpleGitTaskCallback = (err: Error | null, result?: any) => {\n                  if (err) {\n                     return reject(toError(err));\n                  }\n\n                  resolve(result);\n               };\n               args.push(callback);\n\n               git[fn].apply(git, args);\n            });\n         });\n      };\n   }\n\n   function syncWrapper(fn: string, git: any, api: SimpleGit) {\n      return (...args: any[]) => {\n         git[fn](...args);\n\n         return api;\n      };\n   }\n}\n\nfunction toError(error: Error | string | any): Error {\n   if (error instanceof Error) {\n      return error;\n   }\n\n   if (typeof error === 'string') {\n      return new Error(error);\n   }\n\n   return new GitResponseError(error);\n}\n","import { gitInstanceFactory } from './lib/git-factory';\n\nexport { gitP } from './lib/runners/promise-wrapped';\nexport * from './lib/api';\n\nexport const simpleGit = gitInstanceFactory;\n\nexport default gitInstanceFactory;\n","// src/db_fields.ts\nvar TRANSACTION_ID_FIELD = \"_xact_id\";\nvar OBJECT_DELETE_FIELD = \"_object_delete\";\nvar CREATED_FIELD = \"created\";\nvar ID_FIELD = \"id\";\nvar IS_MERGE_FIELD = \"_is_merge\";\nvar MERGE_PATHS_FIELD = \"_merge_paths\";\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 ASYNC_SCORING_CONTROL_FIELD = \"_async_scoring_control\";\nvar SKIP_ASYNC_SCORING_FIELD = \"_skip_async_scoring\";\n\n// src/http_headers.ts\nvar BT_FOUND_EXISTING_HEADER = \"x-bt-found-existing\";\nvar BT_CURSOR_HEADER = \"x-bt-cursor\";\nvar BT_IMPERSONATE_USER = \"x-bt-impersonate-user\";\nvar BT_PARENT = \"x-bt-parent\";\n\n// src/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 isEmpty(a) {\n  return a === void 0 || a === null;\n}\nfunction notEmpty(a) {\n  if (!isEmpty(a)) {\n    return a;\n  } else {\n    throw new Error(`Unexpected empty value ${a}`);\n  }\n}\nfunction isNumber(a) {\n  return typeof a === \"number\" || typeof a === \"bigint\";\n}\n\n// src/object_util.ts\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    const fullPath = path.concat([k]);\n    const fullPathSerialized = JSON.stringify(fullPath);\n    const mergeIntoV = recordFind(mergeInto, k);\n    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      mergeInto[k] = mergeFromV;\n    }\n  });\n  return mergeInto;\n}\nfunction mergeDicts(mergeInto, mergeFrom) {\n  return mergeDictsWithPaths({ mergeInto, mergeFrom, mergePaths: [] });\n}\nfunction forEachMissingKey({\n  lhs,\n  rhs,\n  fn\n}) {\n  function helper(lhs2, rhs2, path) {\n    if (lhs2 instanceof Object) {\n      if (!(rhs2 instanceof Object)) {\n        return;\n      }\n      const lhsRec = lhs2;\n      const rhsRec = rhs2;\n      for (const [k, v] of Object.entries(rhsRec)) {\n        if (!(k in lhsRec)) {\n          fn({ lhs: lhsRec, k, v, path });\n        } else {\n          helper(lhsRec[k], rhsRec[k], [...path, k]);\n        }\n      }\n    }\n  }\n  helper(lhs, rhs, []);\n}\nfunction mapAt(m, k) {\n  const ret = m.get(k);\n  if (ret === void 0) {\n    throw new Error(`Map does not contain key ${k}`);\n  }\n  return ret;\n}\nfunction mapSetDefault(m, k, _default) {\n  const ret = m.get(k);\n  if (ret === void 0) {\n    m.set(k, _default);\n    return _default;\n  } else {\n    return ret;\n  }\n}\nfunction mapSetNotPresent(m, k, v) {\n  if (m.has(k)) {\n    throw new Error(`Map already contains key ${k}`);\n  }\n  return m.set(k, v);\n}\nfunction recordFind(m, k) {\n  return m[k];\n}\nfunction recordAt(m, k) {\n  const ret = recordFind(m, k);\n  if (ret === void 0) {\n    throw new Error(`Record does not contain key ${String(k)}`);\n  }\n  return ret;\n}\nfunction recordSetDefault(m, k, _default) {\n  const ret = recordFind(m, k);\n  if (ret === void 0) {\n    m[k] = _default;\n    return _default;\n  } else {\n    return ret;\n  }\n}\nfunction getRecordKeys(obj) {\n  return Object.keys(obj);\n}\n\n// src/graph_util.ts\nfunction depthFirstSearch(args) {\n  var _a;\n  const { graph, firstVisitF, lastVisitF } = args;\n  for (const vs of graph.values()) {\n    for (const v of vs.values()) {\n      if (!graph.has(v)) {\n        throw new Error(`Outgoing vertex ${v} must be a key in the graph`);\n      }\n    }\n  }\n  const firstVisitedVertices = /* @__PURE__ */ new Set();\n  const visitationOrder = (_a = args.visitationOrder) != null ? _a : [...graph.keys()];\n  const events = visitationOrder.map((vertex) => ({ eventType: \"first\", vertex, extras: {} })).reverse();\n  while (events.length) {\n    const { eventType, vertex, extras } = events.pop();\n    if (eventType === \"last\") {\n      lastVisitF == null ? void 0 : lastVisitF(vertex);\n      continue;\n    }\n    if (firstVisitedVertices.has(vertex)) {\n      continue;\n    }\n    firstVisitedVertices.add(vertex);\n    firstVisitF == null ? void 0 : firstVisitF(vertex, { parentVertex: extras.parentVertex });\n    events.push({ eventType: \"last\", vertex, extras: {} });\n    mapAt(graph, vertex).forEach((child) => {\n      events.push({\n        eventType: \"first\",\n        vertex: child,\n        extras: { parentVertex: vertex }\n      });\n    });\n  }\n}\nfunction undirectedConnectedComponents(graph) {\n  const directedGraph = new Map(\n    [...graph.vertices].map((v) => [v, /* @__PURE__ */ new Set()])\n  );\n  for (const [i, j] of graph.edges) {\n    mapAt(directedGraph, i).add(j);\n    mapAt(directedGraph, j).add(i);\n  }\n  let labelCounter = 0;\n  const vertexLabels = /* @__PURE__ */ new Map();\n  const firstVisitF = (vertex, args) => {\n    const label = (args == null ? void 0 : args.parentVertex) !== void 0 ? mapAt(vertexLabels, args == null ? void 0 : args.parentVertex) : labelCounter++;\n    vertexLabels.set(vertex, label);\n  };\n  depthFirstSearch({ graph: directedGraph, firstVisitF });\n  const output = Array.from({ length: labelCounter }).map(() => []);\n  for (const [vertex, label] of vertexLabels.entries()) {\n    output[label].push(vertex);\n  }\n  return output;\n}\nfunction topologicalSort(graph, visitationOrder) {\n  const reverseOrdering = [];\n  const lastVisitF = (vertex) => {\n    reverseOrdering.push(vertex);\n  };\n  depthFirstSearch({ graph, lastVisitF, visitationOrder });\n  return reverseOrdering.reverse();\n}\n\n// src/merge_row_batch.ts\nfunction generateMergedRowKey(row, useParentIdForId) {\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      (useParentIdForId != null ? useParentIdForId : false) ? PARENT_ID_FIELD : \"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  const merged = [...rowGroups.values()];\n  const rowToLabel = new Map(\n    merged.map((r, i) => [generateMergedRowKey(r), i])\n  );\n  const graph = new Map(\n    Array.from({ length: merged.length }).map((_, i) => [i, /* @__PURE__ */ new Set()])\n  );\n  merged.forEach((r, i) => {\n    const parentId = r[PARENT_ID_FIELD];\n    if (!parentId) {\n      return;\n    }\n    const parentRowKey = generateMergedRowKey(\n      r,\n      true\n      /* useParentIdForId */\n    );\n    const parentLabel = rowToLabel.get(parentRowKey);\n    if (parentLabel !== void 0) {\n      mapAt(graph, parentLabel).add(i);\n    }\n  });\n  const connectedComponents = undirectedConnectedComponents({\n    vertices: new Set(graph.keys()),\n    edges: new Set(\n      [...graph.entries()].flatMap(\n        ([k, vs]) => [...vs].map((v) => {\n          const ret = [k, v];\n          return ret;\n        })\n      )\n    )\n  });\n  const buckets = connectedComponents.map(\n    (cc) => topologicalSort(\n      graph,\n      cc\n      /* visitationOrder */\n    )\n  );\n  return buckets.map((bucket) => bucket.map((i) => merged[i]));\n}\nfunction batchItems(args) {\n  var _a, _b;\n  let { items } = args;\n  const batchMaxNumItems = (_a = args.batchMaxNumItems) != null ? _a : Number.POSITIVE_INFINITY;\n  const batchMaxNumBytes = (_b = args.batchMaxNumBytes) != null ? _b : Number.POSITIVE_INFINITY;\n  const output = [];\n  let nextItems = [];\n  let batchSet = [];\n  let batch = [];\n  let batchLen = 0;\n  function addToBatch(item) {\n    batch.push(item);\n    batchLen += item.length;\n  }\n  function flushBatch() {\n    batchSet.push(batch);\n    batch = [];\n    batchLen = 0;\n  }\n  while (items.length) {\n    for (const bucket of items) {\n      let i = 0;\n      for (const item of bucket) {\n        if (batch.length === 0 || item.length + batchLen < batchMaxNumBytes && batch.length < batchMaxNumItems) {\n          addToBatch(item);\n        } else if (i === 0) {\n          flushBatch();\n          addToBatch(item);\n        } else {\n          break;\n        }\n        ++i;\n      }\n      if (i < bucket.length) {\n        nextItems.push(bucket.slice(i));\n      }\n      if (batchLen >= batchMaxNumBytes || batch.length > batchMaxNumItems) {\n        flushBatch();\n      }\n    }\n    if (batch.length) {\n      flushBatch();\n    }\n    if (batchSet.length) {\n      output.push(batchSet);\n      batchSet = [];\n    }\n    items = nextItems;\n    nextItems = [];\n  }\n  return output;\n}\n\n// src/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}\nfunction makeLegacyEvent(e) {\n  if (!(\"dataset_id\" in e) || !(\"expected\" in e)) {\n    return e;\n  }\n  const event = {\n    ...e,\n    output: e.expected\n  };\n  delete event.expected;\n  if (MERGE_PATHS_FIELD in event) {\n    for (const path of event[MERGE_PATHS_FIELD] || []) {\n      if (path.length > 0 && path[0] === \"expected\") {\n        path[0] = \"output\";\n      }\n    }\n  }\n  return event;\n}\n\n// src/json_util.ts\nfunction deterministicReplacer(_key, value) {\n  return value instanceof Object && !(value instanceof Array) ? Object.keys(value).sort().reduce((sorted, key) => {\n    sorted[key] = value[key];\n    return sorted;\n  }, {}) : value;\n}\nfunction constructJsonArray(items) {\n  return `[${items.join(\",\")}]`;\n}\n\n// src/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 capitalize(s, sep) {\n  const items = sep ? s.split(sep) : [s];\n  return items.map((s2) => s2 ? s2.charAt(0).toUpperCase() + s2.slice(1) : s2).join(sep || \"\");\n}\nfunction lowercase(s, sep) {\n  const items = sep ? s.split(sep) : [s];\n  return items.map((s2) => s2 ? s2.charAt(0).toLowerCase() + s2.slice(1) : s2).join(sep || \"\");\n}\nfunction snakeToCamelCase(s) {\n  return s.split(\"_\").map((s2) => capitalize(s2)).join(\"\");\n}\nfunction snakeToTitleCase(s) {\n  return capitalize(s, \"_\").replace(\"_\", \" \");\n}\nfunction camelToSnakeCase(s) {\n  return s.replace(/([A-Z])/g, (m) => \"_\" + m.toLowerCase()).replace(/^_/, \"\");\n}\n\n// src/span_identifier_v1.ts\nimport * as uuid from \"uuid\";\nimport { z } from \"zod\";\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 = z.nativeEnum(SpanObjectTypeV1);\nvar SpanRowIdsV1 = class {\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  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    var _a;\n    return {\n      objectType: this.objectType,\n      objectId: this.objectId,\n      rowIds: (_a = this.rowIds) == null ? void 0 : _a.toObject()\n    };\n  }\n};\n\n// src/span_identifier_v2.ts\nimport * as uuid2 from \"uuid\";\nimport { z as z2 } from \"zod\";\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 = z2.nativeEnum(SpanObjectTypeV2);\nvar SpanRowIdsV2 = class {\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  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    var _a;\n    return {\n      objectType: this.objectType,\n      objectId: this.objectId,\n      computeObjectMetadataArgs: this.computeObjectMetadataArgs,\n      rowIds: (_a = this.rowIds) == null ? void 0 : _a.toObject()\n    };\n  }\n};\n\n// src/span_identifier_v3.ts\nimport * as uuid3 from \"uuid\";\nimport { z as z3 } from \"zod\";\nfunction tryMakeUuid3(s) {\n  try {\n    const ret = uuid3.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: 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 = z3.nativeEnum(SpanObjectTypeV3);\nfunction spanObjectTypeV3ToString(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}\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 = z3.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 = z3.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/core/js/src/object.ts.\n  propagated_event: z3.record(z3.unknown()).nullish()\n}).and(\n  z3.union([\n    // Must provide one or the other.\n    z3.object({\n      object_id: z3.string().nullish(),\n      compute_object_metadata_args: z3.optional(z3.null())\n    }),\n    z3.object({\n      object_id: z3.optional(z3.null()),\n      compute_object_metadata_args: z3.record(z3.unknown())\n    })\n  ])\n).and(\n  z3.union([\n    // Either all of these must be provided or none.\n    z3.object({\n      row_id: z3.string(),\n      span_id: z3.string(),\n      root_span_id: z3.string()\n    }),\n    z3.object({\n      row_id: z3.optional(z3.null()),\n      span_id: z3.optional(z3.null()),\n      root_span_id: z3.optional(z3.null())\n    })\n  ])\n);\nvar SpanComponentsV3 = class _SpanComponentsV3 {\n  constructor(data) {\n    this.data = data;\n  }\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      Buffer.from([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(Buffer.concat([Buffer.from([fieldId]), ret.bytes]));\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(Buffer.from([uuidEntries.length]));\n    allBuffers.push(...uuidEntries);\n    if (Object.keys(jsonObj).length > 0) {\n      allBuffers.push(Buffer.from(JSON.stringify(jsonObj), \"utf-8\"));\n    }\n    return Buffer.concat(allBuffers).toString(\"base64\");\n  }\n  static fromStr(s) {\n    try {\n      const rawBytes = Buffer.from(s, \"base64\");\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            rawBytes.subarray(byteOffset).toString(\"utf-8\")\n          );\n          Object.assign(jsonObj, remainingJsonObj);\n        }\n      }\n      return _SpanComponentsV3.fromJsonObj(jsonObj);\n    } catch (e) {\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        const _ = this.data.object_type;\n        throw new Error(\"Impossible\");\n    }\n  }\n  static fromJsonObj(jsonObj) {\n    return new _SpanComponentsV3(spanComponentsV3Schema.parse(jsonObj));\n  }\n};\n\n// src/span_types.ts\nvar spanTypeAttributeValues = [\n  \"llm\",\n  \"score\",\n  \"function\",\n  \"eval\",\n  \"task\",\n  \"tool\"\n];\nvar SpanTypeAttribute = /* @__PURE__ */ ((SpanTypeAttribute2) => {\n  SpanTypeAttribute2[\"LLM\"] = \"llm\";\n  SpanTypeAttribute2[\"SCORE\"] = \"score\";\n  SpanTypeAttribute2[\"FUNCTION\"] = \"function\";\n  SpanTypeAttribute2[\"EVAL\"] = \"eval\";\n  SpanTypeAttribute2[\"TASK\"] = \"task\";\n  SpanTypeAttribute2[\"TOOL\"] = \"tool\";\n  return SpanTypeAttribute2;\n})(SpanTypeAttribute || {});\nvar spanPurposeAttributeValues = [\"scorer\"];\n\n// src/git_fields.ts\nfunction mergeGitMetadataSettings(s1, s2) {\n  var _a;\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 = ((_a = s1.fields) != null ? _a : []).filter((f) => {\n    var _a2;\n    return ((_a2 = s2.fields) != null ? _a2 : []).includes(f);\n  });\n  const collect = fields.length > 0 ? \"some\" : \"none\";\n  return { collect, fields };\n}\n\n// src/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// src/zod_util.ts\nimport { z as z4 } from \"zod\";\nvar ExtraFieldsError = class extends Error {\n  constructor(key, path) {\n    super(\n      `Extraneous key ${JSON.stringify(key)} at path ${JSON.stringify(path)}`\n    );\n    this.key = key;\n    this.path = path;\n  }\n};\nfunction parseNoStrip(schema, input) {\n  const output = schema.parse(input);\n  forEachMissingKey({\n    lhs: output,\n    rhs: input,\n    fn: ({ k, path }) => {\n      throw new ExtraFieldsError(k, path);\n    }\n  });\n  return output;\n}\nfunction objectNullish(object) {\n  return new z4.ZodObject({\n    ...object._def,\n    shape: () => Object.fromEntries(\n      Object.entries(object.shape).map(([k, v]) => [k, v.nullish()])\n    )\n  });\n}\nexport {\n  ASYNC_SCORING_CONTROL_FIELD,\n  AUDIT_METADATA_FIELD,\n  AUDIT_SOURCE_FIELD,\n  BT_CURSOR_HEADER,\n  BT_FOUND_EXISTING_HEADER,\n  BT_IMPERSONATE_USER,\n  BT_PARENT,\n  CREATED_FIELD,\n  DEFAULT_IS_LEGACY_DATASET,\n  ExtraFieldsError,\n  ID_FIELD,\n  IS_MERGE_FIELD,\n  MERGE_PATHS_FIELD,\n  OBJECT_DELETE_FIELD,\n  PARENT_ID_FIELD,\n  SKIP_ASYNC_SCORING_FIELD,\n  SpanComponentsV1,\n  SpanComponentsV2,\n  SpanComponentsV3,\n  SpanObjectTypeV1,\n  SpanObjectTypeV2,\n  SpanObjectTypeV3,\n  SpanRowIdsV1,\n  SpanRowIdsV2,\n  SpanTypeAttribute,\n  TRANSACTION_ID_FIELD,\n  VALID_SOURCES,\n  _urljoin,\n  batchItems,\n  camelToSnakeCase,\n  capitalize,\n  constructJsonArray,\n  deterministicReplacer,\n  ensureDatasetRecord,\n  ensureLegacyDatasetRecord,\n  ensureNewDatasetRecord,\n  forEachMissingKey,\n  getRecordKeys,\n  isArray,\n  isEmpty,\n  isNumber,\n  isObject,\n  isObjectOrArray,\n  loadPrettyXact,\n  lowercase,\n  makeLegacyEvent,\n  mapAt,\n  mapSetDefault,\n  mapSetNotPresent,\n  mergeDicts,\n  mergeDictsWithPaths,\n  mergeGitMetadataSettings,\n  mergeRowBatch,\n  notEmpty,\n  objectNullish,\n  parseNoStrip,\n  prettifyXact,\n  recordAt,\n  recordFind,\n  recordSetDefault,\n  snakeToCamelCase,\n  snakeToTitleCase,\n  spanComponentsV3Schema,\n  spanObjectTypeV3EnumSchema,\n  spanObjectTypeV3ToString,\n  spanPurposeAttributeValues,\n  spanTypeAttributeValues\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAnyZodType = exports.isZodType = void 0;\nfunction isZodType(schema, typeName) {\n    var _a;\n    return ((_a = schema === null || schema === void 0 ? void 0 : schema._def) === null || _a === void 0 ? void 0 : _a.typeName) === typeName;\n}\nexports.isZodType = isZodType;\nfunction isAnyZodType(schema) {\n    return '_def' in schema;\n}\nexports.isAnyZodType = isAnyZodType;\n","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendZodWithOpenApi = void 0;\nconst zod_is_type_1 = require(\"./lib/zod-is-type\");\nfunction preserveMetadataFromModifier(zod, modifier) {\n    const zodModifier = zod.ZodType.prototype[modifier];\n    zod.ZodType.prototype[modifier] = function (...args) {\n        const result = zodModifier.apply(this, args);\n        result._def.openapi = this._def.openapi;\n        return result;\n    };\n}\nfunction extendZodWithOpenApi(zod) {\n    if (typeof zod.ZodType.prototype.openapi !== 'undefined') {\n        // This zod instance is already extended with the required methods,\n        // doing it again will just result in multiple wrapper methods for\n        // `optional` and `nullable`\n        return;\n    }\n    zod.ZodType.prototype.openapi = function (refOrOpenapi, metadata) {\n        var _a, _b, _c, _d, _e, _f;\n        const openapi = typeof refOrOpenapi === 'string' ? metadata : refOrOpenapi;\n        const _g = openapi !== null && openapi !== void 0 ? openapi : {}, { param } = _g, restOfOpenApi = __rest(_g, [\"param\"]);\n        const _internal = Object.assign(Object.assign({}, (_a = this._def.openapi) === null || _a === void 0 ? void 0 : _a._internal), (typeof refOrOpenapi === 'string'\n            ? { refId: refOrOpenapi }\n            : undefined));\n        const resultMetadata = Object.assign(Object.assign(Object.assign({}, (_b = this._def.openapi) === null || _b === void 0 ? void 0 : _b.metadata), restOfOpenApi), (((_d = (_c = this._def.openapi) === null || _c === void 0 ? void 0 : _c.metadata) === null || _d === void 0 ? void 0 : _d.param) || param\n            ? {\n                param: Object.assign(Object.assign({}, (_f = (_e = this._def.openapi) === null || _e === void 0 ? void 0 : _e.metadata) === null || _f === void 0 ? void 0 : _f.param), param),\n            }\n            : undefined));\n        const result = new this.constructor(Object.assign(Object.assign({}, this._def), { openapi: Object.assign(Object.assign({}, (Object.keys(_internal).length > 0 ? { _internal } : undefined)), (Object.keys(resultMetadata).length > 0\n                ? { metadata: resultMetadata }\n                : undefined)) }));\n        if ((0, zod_is_type_1.isZodType)(this, 'ZodObject')) {\n            const originalExtend = this.extend;\n            result.extend = function (...args) {\n                var _a, _b, _c, _d, _e, _f;\n                const extendedResult = originalExtend.apply(this, args);\n                extendedResult._def.openapi = {\n                    _internal: {\n                        extendedFrom: ((_b = (_a = this._def.openapi) === null || _a === void 0 ? void 0 : _a._internal) === null || _b === void 0 ? void 0 : _b.refId)\n                            ? { refId: (_d = (_c = this._def.openapi) === null || _c === void 0 ? void 0 : _c._internal) === null || _d === void 0 ? void 0 : _d.refId, schema: this }\n                            : (_e = this._def.openapi) === null || _e === void 0 ? void 0 : _e._internal.extendedFrom,\n                    },\n                    metadata: (_f = extendedResult._def.openapi) === null || _f === void 0 ? void 0 : _f.metadata,\n                };\n                return extendedResult;\n            };\n        }\n        return result;\n    };\n    preserveMetadataFromModifier(zod, 'optional');\n    preserveMetadataFromModifier(zod, 'nullable');\n    preserveMetadataFromModifier(zod, 'default');\n    preserveMetadataFromModifier(zod, 'transform');\n    preserveMetadataFromModifier(zod, 'refine');\n    const zodDeepPartial = zod.ZodObject.prototype.deepPartial;\n    zod.ZodObject.prototype.deepPartial = function () {\n        const initialShape = this._def.shape();\n        const result = zodDeepPartial.apply(this);\n        const resultShape = result._def.shape();\n        Object.entries(resultShape).forEach(([key, value]) => {\n            var _a, _b;\n            value._def.openapi = (_b = (_a = initialShape[key]) === null || _a === void 0 ? void 0 : _a._def) === null || _b === void 0 ? void 0 : _b.openapi;\n        });\n        result._def.openapi = undefined;\n        return result;\n    };\n    const zodPick = zod.ZodObject.prototype.pick;\n    zod.ZodObject.prototype.pick = function (...args) {\n        const result = zodPick.apply(this, args);\n        result._def.openapi = undefined;\n        return result;\n    };\n    const zodOmit = zod.ZodObject.prototype.omit;\n    zod.ZodObject.prototype.omit = function (...args) {\n        const result = zodOmit.apply(this, args);\n        result._def.openapi = undefined;\n        return result;\n    };\n}\nexports.extendZodWithOpenApi = extendZodWithOpenApi;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ObjectSet = exports.isEqual = void 0;\nfunction isEqual(x, y) {\n    if (x === null || x === undefined || y === null || y === undefined) {\n        return x === y;\n    }\n    if (x === y || x.valueOf() === y.valueOf()) {\n        return true;\n    }\n    if (Array.isArray(x)) {\n        if (!Array.isArray(y)) {\n            return false;\n        }\n        if (x.length !== y.length) {\n            return false;\n        }\n    }\n    // if they are strictly equal, they both need to be object at least\n    if (!(x instanceof Object) || !(y instanceof Object)) {\n        return false;\n    }\n    // recursive object equality check\n    const keysX = Object.keys(x);\n    return (Object.keys(y).every(keyY => keysX.indexOf(keyY) !== -1) &&\n        keysX.every(key => isEqual(x[key], y[key])));\n}\nexports.isEqual = isEqual;\nclass ObjectSet {\n    constructor() {\n        this.buckets = new Map();\n    }\n    put(value) {\n        const hashCode = this.hashCodeOf(value);\n        const itemsByCode = this.buckets.get(hashCode);\n        if (!itemsByCode) {\n            this.buckets.set(hashCode, [value]);\n            return;\n        }\n        const alreadyHasItem = itemsByCode.some(_ => isEqual(_, value));\n        if (!alreadyHasItem) {\n            itemsByCode.push(value);\n        }\n    }\n    contains(value) {\n        const hashCode = this.hashCodeOf(value);\n        const itemsByCode = this.buckets.get(hashCode);\n        if (!itemsByCode) {\n            return false;\n        }\n        return itemsByCode.some(_ => isEqual(_, value));\n    }\n    values() {\n        return [...this.buckets.values()].flat();\n    }\n    stats() {\n        let totalBuckets = 0;\n        let totalValues = 0;\n        let collisions = 0;\n        for (const bucket of this.buckets.values()) {\n            totalBuckets += 1;\n            totalValues += bucket.length;\n            if (bucket.length > 1) {\n                collisions += 1;\n            }\n        }\n        const hashEffectiveness = totalBuckets / totalValues;\n        return { totalBuckets, collisions, totalValues, hashEffectiveness };\n    }\n    hashCodeOf(object) {\n        let hashCode = 0;\n        if (Array.isArray(object)) {\n            for (let i = 0; i < object.length; i++) {\n                hashCode ^= this.hashCodeOf(object[i]) * i;\n            }\n            return hashCode;\n        }\n        if (typeof object === 'string') {\n            for (let i = 0; i < object.length; i++) {\n                hashCode ^= object.charCodeAt(i) * i;\n            }\n            return hashCode;\n        }\n        if (typeof object === 'number') {\n            return object;\n        }\n        if (typeof object === 'object') {\n            for (const [key, value] of Object.entries(object)) {\n                hashCode ^= this.hashCodeOf(key) + this.hashCodeOf(value !== null && value !== void 0 ? value : '');\n            }\n        }\n        return hashCode;\n    }\n}\nexports.ObjectSet = ObjectSet;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isString = exports.uniq = exports.objectEquals = exports.compact = exports.omitBy = exports.omit = exports.mapValues = exports.isNil = exports.isUndefined = void 0;\nconst object_set_1 = require(\"./object-set\");\nfunction isUndefined(value) {\n    return value === undefined;\n}\nexports.isUndefined = isUndefined;\nfunction isNil(value) {\n    return value === null || value === undefined;\n}\nexports.isNil = isNil;\nfunction mapValues(object, mapper) {\n    const result = {};\n    Object.entries(object).forEach(([key, value]) => {\n        result[key] = mapper(value);\n    });\n    return result;\n}\nexports.mapValues = mapValues;\nfunction omit(object, keys) {\n    const result = {};\n    Object.entries(object).forEach(([key, value]) => {\n        if (!keys.some(keyToOmit => keyToOmit === key)) {\n            result[key] = value;\n        }\n    });\n    return result;\n}\nexports.omit = omit;\nfunction omitBy(object, predicate) {\n    const result = {};\n    Object.entries(object).forEach(([key, value]) => {\n        if (!predicate(value, key)) {\n            result[key] = value;\n        }\n    });\n    return result;\n}\nexports.omitBy = omitBy;\nfunction compact(arr) {\n    return arr.filter((elem) => !isNil(elem));\n}\nexports.compact = compact;\nexports.objectEquals = object_set_1.isEqual;\nfunction uniq(values) {\n    const set = new object_set_1.ObjectSet();\n    values.forEach(value => set.put(value));\n    return [...set.values()];\n}\nexports.uniq = uniq;\nfunction isString(val) {\n    return typeof val === 'string';\n}\nexports.isString = isString;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getOpenApiMetadata = void 0;\nconst lodash_1 = require(\"./lib/lodash\");\nfunction getOpenApiMetadata(zodSchema) {\n    var _a, _b;\n    return (0, lodash_1.omitBy)((_b = (_a = zodSchema._def.openapi) === null || _a === void 0 ? void 0 : _a.metadata) !== null && _b !== void 0 ? _b : {}, lodash_1.isNil);\n}\nexports.getOpenApiMetadata = getOpenApiMetadata;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPIRegistry = void 0;\nclass OpenAPIRegistry {\n    constructor(parents) {\n        this.parents = parents;\n        this._definitions = [];\n    }\n    get definitions() {\n        var _a, _b;\n        const parentDefinitions = (_b = (_a = this.parents) === null || _a === void 0 ? void 0 : _a.flatMap(par => par.definitions)) !== null && _b !== void 0 ? _b : [];\n        return [...parentDefinitions, ...this._definitions];\n    }\n    /**\n     * Registers a new component schema under /components/schemas/${name}\n     */\n    register(refId, zodSchema) {\n        const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n        this._definitions.push({ type: 'schema', schema: schemaWithRefId });\n        return schemaWithRefId;\n    }\n    /**\n     * Registers a new parameter schema under /components/parameters/${name}\n     */\n    registerParameter(refId, zodSchema) {\n        var _a, _b, _c;\n        const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n        const currentMetadata = (_a = schemaWithRefId._def.openapi) === null || _a === void 0 ? void 0 : _a.metadata;\n        const schemaWithMetadata = schemaWithRefId.openapi(Object.assign(Object.assign({}, currentMetadata), { param: Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), { name: (_c = (_b = currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : refId }) }));\n        this._definitions.push({\n            type: 'parameter',\n            schema: schemaWithMetadata,\n        });\n        return schemaWithMetadata;\n    }\n    /**\n     * Registers a new path that would be generated under paths:\n     */\n    registerPath(route) {\n        this._definitions.push({\n            type: 'route',\n            route,\n        });\n    }\n    /**\n     * Registers a new webhook that would be generated under webhooks:\n     */\n    registerWebhook(webhook) {\n        this._definitions.push({\n            type: 'webhook',\n            webhook,\n        });\n    }\n    /**\n     * Registers a raw OpenAPI component. Use this if you have a simple object instead of a Zod schema.\n     *\n     * @param type The component type, e.g. `schemas`, `responses`, `securitySchemes`, etc.\n     * @param name The name of the object, it is the key under the component\n     *             type in the resulting OpenAPI document\n     * @param component The actual object to put there\n     */\n    registerComponent(type, name, component) {\n        this._definitions.push({\n            type: 'component',\n            componentType: type,\n            name,\n            component,\n        });\n        return {\n            name,\n            ref: { $ref: `#/components/${type}/${name}` },\n        };\n    }\n    schemaWithRefId(refId, zodSchema) {\n        return zodSchema.openapi(refId);\n    }\n}\nexports.OpenAPIRegistry = OpenAPIRegistry;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UnknownZodTypeError = exports.MissingParameterDataError = exports.ConflictError = exports.ZodToOpenAPIError = void 0;\nclass ZodToOpenAPIError {\n    constructor(message) {\n        this.message = message;\n    }\n}\nexports.ZodToOpenAPIError = ZodToOpenAPIError;\nclass ConflictError extends ZodToOpenAPIError {\n    constructor(message, data) {\n        super(message);\n        this.data = data;\n    }\n}\nexports.ConflictError = ConflictError;\nclass MissingParameterDataError extends ZodToOpenAPIError {\n    constructor(data) {\n        super(`Missing parameter data, please specify \\`${data.missingField}\\` and other OpenAPI parameter props using the \\`param\\` field of \\`ZodSchema.openapi\\``);\n        this.data = data;\n    }\n}\nexports.MissingParameterDataError = MissingParameterDataError;\nclass UnknownZodTypeError extends ZodToOpenAPIError {\n    constructor(data) {\n        super(`Unknown zod object type, please specify \\`type\\` and other OpenAPI props using \\`ZodSchema.openapi\\`.`);\n        this.data = data;\n    }\n}\nexports.UnknownZodTypeError = UnknownZodTypeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enumInfo = void 0;\n/**\n * Numeric enums have a reverse mapping https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n * whereas string ones don't.\n *\n * This function checks if an enum is fully numeric - i.e all values are numbers or not.\n * And filters out only the actual enum values when a reverse mapping is apparent.\n */\nfunction enumInfo(enumObject) {\n    const keysExceptReverseMappings = Object.keys(enumObject).filter(key => typeof enumObject[enumObject[key]] !== 'number');\n    const values = keysExceptReverseMappings.map(key => enumObject[key]);\n    const numericCount = values.filter(_ => typeof _ === 'number').length;\n    const type = numericCount === 0\n        ? 'string'\n        : numericCount === values.length\n            ? 'numeric'\n            : 'mixed';\n    return { values, type };\n}\nexports.enumInfo = enumInfo;\n","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenAPIGenerator = void 0;\nconst errors_1 = require(\"./errors\");\nconst enum_info_1 = require(\"./lib/enum-info\");\nconst lodash_1 = require(\"./lib/lodash\");\nconst zod_is_type_1 = require(\"./lib/zod-is-type\");\n// List of Open API Versions. Please make sure these are in ascending order\nconst openApiVersions = ['3.0.0', '3.0.1', '3.0.2', '3.0.3', '3.1.0'];\nclass OpenAPIGenerator {\n    constructor(definitions, versionSpecifics) {\n        this.definitions = definitions;\n        this.versionSpecifics = versionSpecifics;\n        this.schemaRefs = {};\n        this.paramRefs = {};\n        this.pathRefs = {};\n        this.rawComponents = [];\n        this.sortDefinitions();\n    }\n    generateDocumentData() {\n        this.definitions.forEach(definition => this.generateSingle(definition));\n        return {\n            components: this.buildComponents(),\n            paths: this.pathRefs,\n        };\n    }\n    generateComponents() {\n        this.definitions.forEach(definition => this.generateSingle(definition));\n        return {\n            components: this.buildComponents(),\n        };\n    }\n    buildComponents() {\n        var _a, _b;\n        const rawComponents = {};\n        this.rawComponents.forEach(({ componentType, name, component }) => {\n            var _a;\n            (_a = rawComponents[componentType]) !== null && _a !== void 0 ? _a : (rawComponents[componentType] = {});\n            rawComponents[componentType][name] = component;\n        });\n        return Object.assign(Object.assign({}, rawComponents), { schemas: Object.assign(Object.assign({}, ((_a = rawComponents.schemas) !== null && _a !== void 0 ? _a : {})), this.schemaRefs), parameters: Object.assign(Object.assign({}, ((_b = rawComponents.parameters) !== null && _b !== void 0 ? _b : {})), this.paramRefs) });\n    }\n    sortDefinitions() {\n        const generationOrder = [\n            'schema',\n            'parameter',\n            'component',\n            'route',\n        ];\n        this.definitions.sort((left, right) => {\n            // No type means \"plain zod schema\" => it comes as highest priority based on the array above\n            if (!('type' in left)) {\n                if (!('type' in right)) {\n                    return 0;\n                }\n                return -1;\n            }\n            if (!('type' in right)) {\n                return 1;\n            }\n            const leftIndex = generationOrder.findIndex(type => type === left.type);\n            const rightIndex = generationOrder.findIndex(type => type === right.type);\n            return leftIndex - rightIndex;\n        });\n    }\n    generateSingle(definition) {\n        if (!('type' in definition)) {\n            this.generateSchema(definition);\n            return;\n        }\n        switch (definition.type) {\n            case 'parameter':\n                this.generateParameterDefinition(definition.schema);\n                return;\n            case 'schema':\n                this.generateSchema(definition.schema);\n                return;\n            case 'route':\n                this.generateSingleRoute(definition.route);\n                return;\n            case 'component':\n                this.rawComponents.push(definition);\n                return;\n        }\n    }\n    generateParameterDefinition(zodSchema) {\n        const refId = this.getRefId(zodSchema);\n        const result = this.generateParameter(zodSchema);\n        if (refId) {\n            this.paramRefs[refId] = result;\n        }\n        return result;\n    }\n    getParameterRef(schemaMetadata, external) {\n        var _a, _b, _c, _d, _e;\n        const parameterMetadata = (_a = schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n        const existingRef = ((_b = schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata._internal) === null || _b === void 0 ? void 0 : _b.refId)\n            ? this.paramRefs[(_c = schemaMetadata._internal) === null || _c === void 0 ? void 0 : _c.refId]\n            : undefined;\n        if (!((_d = schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata._internal) === null || _d === void 0 ? void 0 : _d.refId) || !existingRef) {\n            return undefined;\n        }\n        if ((parameterMetadata && existingRef.in !== parameterMetadata.in) ||\n            ((external === null || external === void 0 ? void 0 : external.in) && existingRef.in !== external.in)) {\n            throw new errors_1.ConflictError(`Conflicting location for parameter ${existingRef.name}`, {\n                key: 'in',\n                values: (0, lodash_1.compact)([\n                    existingRef.in,\n                    external === null || external === void 0 ? void 0 : external.in,\n                    parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in,\n                ]),\n            });\n        }\n        if ((parameterMetadata && existingRef.name !== parameterMetadata.name) ||\n            ((external === null || external === void 0 ? void 0 : external.name) && existingRef.name !== (external === null || external === void 0 ? void 0 : external.name))) {\n            throw new errors_1.ConflictError(`Conflicting names for parameter`, {\n                key: 'name',\n                values: (0, lodash_1.compact)([\n                    existingRef.name,\n                    external === null || external === void 0 ? void 0 : external.name,\n                    parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.name,\n                ]),\n            });\n        }\n        return {\n            $ref: `#/components/parameters/${(_e = schemaMetadata._internal) === null || _e === void 0 ? void 0 : _e.refId}`,\n        };\n    }\n    generateInlineParameters(zodSchema, location) {\n        var _a;\n        const metadata = this.getMetadata(zodSchema);\n        const parameterMetadata = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n        const referencedSchema = this.getParameterRef(metadata, { in: location });\n        if (referencedSchema) {\n            return [referencedSchema];\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodObject')) {\n            const propTypes = zodSchema._def.shape();\n            const parameters = Object.entries(propTypes).map(([key, schema]) => {\n                var _a, _b;\n                const innerMetadata = this.getMetadata(schema);\n                const referencedSchema = this.getParameterRef(innerMetadata, {\n                    in: location,\n                    name: key,\n                });\n                if (referencedSchema) {\n                    return referencedSchema;\n                }\n                const innerParameterMetadata = (_a = innerMetadata === null || innerMetadata === void 0 ? void 0 : innerMetadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n                if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.name) &&\n                    innerParameterMetadata.name !== key) {\n                    throw new errors_1.ConflictError(`Conflicting names for parameter`, {\n                        key: 'name',\n                        values: [key, innerParameterMetadata.name],\n                    });\n                }\n                if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.in) &&\n                    innerParameterMetadata.in !== location) {\n                    throw new errors_1.ConflictError(`Conflicting location for parameter ${(_b = innerParameterMetadata.name) !== null && _b !== void 0 ? _b : key}`, {\n                        key: 'in',\n                        values: [location, innerParameterMetadata.in],\n                    });\n                }\n                return this.generateParameter(schema.openapi({ param: { name: key, in: location } }));\n            });\n            return parameters;\n        }\n        if ((parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in) && parameterMetadata.in !== location) {\n            throw new errors_1.ConflictError(`Conflicting location for parameter ${parameterMetadata.name}`, {\n                key: 'in',\n                values: [location, parameterMetadata.in],\n            });\n        }\n        return [\n            this.generateParameter(zodSchema.openapi({ param: { in: location } })),\n        ];\n    }\n    generateSimpleParameter(zodSchema) {\n        var _a;\n        const metadata = this.getParamMetadata(zodSchema);\n        const paramMetadata = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n        const required = !this.isOptionalSchema(zodSchema) && !zodSchema.isNullable();\n        const schema = this.generateSchemaWithRef(zodSchema);\n        return Object.assign({ schema,\n            required }, (paramMetadata ? this.buildParameterMetadata(paramMetadata) : {}));\n    }\n    generateParameter(zodSchema) {\n        var _a;\n        const metadata = this.getMetadata(zodSchema);\n        const paramMetadata = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n        const paramName = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.name;\n        const paramLocation = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.in;\n        if (!paramName) {\n            throw new errors_1.MissingParameterDataError({ missingField: 'name' });\n        }\n        if (!paramLocation) {\n            throw new errors_1.MissingParameterDataError({\n                missingField: 'in',\n                paramName,\n            });\n        }\n        const baseParameter = this.generateSimpleParameter(zodSchema);\n        return Object.assign(Object.assign({}, baseParameter), { in: paramLocation, name: paramName });\n    }\n    generateSchemaWithMetadata(zodSchema) {\n        var _a;\n        const innerSchema = this.unwrapChained(zodSchema);\n        const metadata = this.getMetadata(zodSchema);\n        const defaultValue = this.getDefaultValue(zodSchema);\n        const result = ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.type)\n            ? { type: metadata === null || metadata === void 0 ? void 0 : metadata.metadata.type }\n            : this.toOpenAPISchema(innerSchema, zodSchema.isNullable(), defaultValue);\n        return (metadata === null || metadata === void 0 ? void 0 : metadata.metadata)\n            ? this.applySchemaMetadata(result, metadata.metadata)\n            : (0, lodash_1.omitBy)(result, lodash_1.isNil);\n    }\n    /**\n     * Generates an OpenAPI SchemaObject or a ReferenceObject with all the provided metadata applied\n     */\n    generateSimpleSchema(zodSchema) {\n        var _a;\n        const metadata = this.getMetadata(zodSchema);\n        const refId = this.getRefId(zodSchema);\n        if (!refId || !this.schemaRefs[refId]) {\n            return this.generateSchemaWithMetadata(zodSchema);\n        }\n        const schemaRef = this.schemaRefs[refId];\n        const referenceObject = {\n            $ref: this.generateSchemaRef(refId),\n        };\n        // Metadata provided from .openapi() that is new to what we had already registered\n        const newMetadata = (0, lodash_1.omitBy)(this.buildSchemaMetadata((_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) !== null && _a !== void 0 ? _a : {}), (value, key) => value === undefined || (0, lodash_1.objectEquals)(value, schemaRef[key]));\n        // Do not calculate schema metadata overrides if type is provided in .openapi\n        // https://github.com/asteasolutions/zod-to-openapi/pull/52/files/8ff707fe06e222bc573ed46cf654af8ee0b0786d#r996430801\n        if (newMetadata.type) {\n            return {\n                allOf: [referenceObject, newMetadata],\n            };\n        }\n        // New metadata from ZodSchema properties.\n        const newSchemaMetadata = (0, lodash_1.omitBy)(this.constructReferencedOpenAPISchema(zodSchema), (value, key) => value === undefined || (0, lodash_1.objectEquals)(value, schemaRef[key]));\n        const appliedMetadata = this.applySchemaMetadata(newSchemaMetadata, newMetadata);\n        if (Object.keys(appliedMetadata).length > 0) {\n            return {\n                allOf: [referenceObject, appliedMetadata],\n            };\n        }\n        return referenceObject;\n    }\n    /**\n     * Generates a whole OpenApi schema and saves it into\n     * schemaRefs if a `refId` is provided.\n     */\n    generateSchema(zodSchema) {\n        const refId = this.getRefId(zodSchema);\n        const result = this.generateSimpleSchema(zodSchema);\n        if (refId && this.schemaRefs[refId] === undefined) {\n            this.schemaRefs[refId] = result;\n        }\n        return result;\n    }\n    /**\n     * Same as `generateSchema` but if the new schema is added into the\n     * referenced schemas, it would return a ReferenceObject and not the\n     * whole result.\n     *\n     * Should be used for nested objects, arrays, etc.\n     */\n    generateSchemaWithRef(zodSchema) {\n        const refId = this.getRefId(zodSchema);\n        const result = this.generateSimpleSchema(zodSchema);\n        if (refId && this.schemaRefs[refId] === undefined) {\n            this.schemaRefs[refId] = result;\n            return { $ref: this.generateSchemaRef(refId) };\n        }\n        return result;\n    }\n    generateSchemaRef(refId) {\n        return `#/components/schemas/${refId}`;\n    }\n    getRequestBody(requestBody) {\n        if (!requestBody) {\n            return;\n        }\n        const { content } = requestBody, rest = __rest(requestBody, [\"content\"]);\n        const requestBodyContent = this.getBodyContent(content);\n        return Object.assign(Object.assign({}, rest), { content: requestBodyContent });\n    }\n    getParameters(request) {\n        if (!request) {\n            return [];\n        }\n        const { query, params, headers, cookies } = request;\n        const queryParameters = this.enhanceMissingParametersError(() => (query ? this.generateInlineParameters(query, 'query') : []), { location: 'query' });\n        const pathParameters = this.enhanceMissingParametersError(() => (params ? this.generateInlineParameters(params, 'path') : []), { location: 'path' });\n        const cookieParameters = this.enhanceMissingParametersError(() => (cookies ? this.generateInlineParameters(cookies, 'cookie') : []), { location: 'cookie' });\n        const headerParameters = this.enhanceMissingParametersError(() => headers\n            ? (0, zod_is_type_1.isZodType)(headers, 'ZodObject')\n                ? this.generateInlineParameters(headers, 'header')\n                : headers.flatMap(header => this.generateInlineParameters(header, 'header'))\n            : [], { location: 'header' });\n        return [\n            ...pathParameters,\n            ...queryParameters,\n            ...headerParameters,\n            ...cookieParameters,\n        ];\n    }\n    generatePath(route) {\n        const { method, path, request, responses } = route, pathItemConfig = __rest(route, [\"method\", \"path\", \"request\", \"responses\"]);\n        const generatedResponses = (0, lodash_1.mapValues)(responses, response => {\n            return this.getResponse(response);\n        });\n        const parameters = this.enhanceMissingParametersError(() => this.getParameters(request), { route: `${method} ${path}` });\n        const requestBody = this.getRequestBody(request === null || request === void 0 ? void 0 : request.body);\n        const routeDoc = {\n            [method]: Object.assign(Object.assign(Object.assign(Object.assign({}, pathItemConfig), (parameters.length > 0\n                ? {\n                    parameters: [...(pathItemConfig.parameters || []), ...parameters],\n                }\n                : {})), (requestBody ? { requestBody } : {})), { responses: generatedResponses }),\n        };\n        return routeDoc;\n    }\n    generateSingleRoute(route) {\n        const routeDoc = this.generatePath(route);\n        this.pathRefs[route.path] = Object.assign(Object.assign({}, this.pathRefs[route.path]), routeDoc);\n        return routeDoc;\n    }\n    getResponse(_a) {\n        var { content, headers } = _a, rest = __rest(_a, [\"content\", \"headers\"]);\n        const responseContent = content\n            ? { content: this.getBodyContent(content) }\n            : {};\n        if (!headers) {\n            return Object.assign(Object.assign({}, rest), responseContent);\n        }\n        const responseHeaders = (0, zod_is_type_1.isZodType)(headers, 'ZodObject')\n            ? this.getResponseHeaders(headers)\n            : // This is input data so it is okay to cast in the common generator\n                // since this is the user's responsibility to keep it correct\n                headers;\n        return Object.assign(Object.assign(Object.assign({}, rest), { headers: responseHeaders }), responseContent);\n    }\n    getResponseHeaders(headers) {\n        const schemaShape = headers._def.shape();\n        const responseHeaders = (0, lodash_1.mapValues)(schemaShape, _ => this.generateSimpleParameter(_));\n        return responseHeaders;\n    }\n    getBodyContent(content) {\n        return (0, lodash_1.mapValues)(content, config => {\n            if (!config || !(0, zod_is_type_1.isAnyZodType)(config.schema)) {\n                return config;\n            }\n            const { schema: configSchema } = config, rest = __rest(config, [\"schema\"]);\n            const schema = this.generateSchemaWithRef(configSchema);\n            return Object.assign({ schema }, rest);\n        });\n    }\n    getZodStringCheck(zodString, kind) {\n        return zodString._def.checks.find((check) => {\n            return check.kind === kind;\n        });\n    }\n    /**\n     * Attempts to map Zod strings to known formats\n     * https://json-schema.org/understanding-json-schema/reference/string.html#built-in-formats\n     */\n    mapStringFormat(zodString) {\n        if (zodString.isUUID) {\n            return 'uuid';\n        }\n        if (zodString.isEmail) {\n            return 'email';\n        }\n        if (zodString.isURL) {\n            return 'uri';\n        }\n        if (zodString.isDatetime) {\n            return 'date-time';\n        }\n        return undefined;\n    }\n    mapDiscriminator(zodObjects, discriminator) {\n        // All schemas must be registered to use a discriminator\n        if (zodObjects.some(obj => this.getRefId(obj) === undefined)) {\n            return undefined;\n        }\n        const mapping = {};\n        zodObjects.forEach(obj => {\n            var _a;\n            const refId = this.getRefId(obj); // type-checked earlier\n            const value = (_a = obj.shape) === null || _a === void 0 ? void 0 : _a[discriminator];\n            if ((0, zod_is_type_1.isZodType)(value, 'ZodEnum')) {\n                value._def.values.forEach((enumValue) => {\n                    mapping[enumValue] = this.generateSchemaRef(refId);\n                });\n                return;\n            }\n            const literalValue = value === null || value === void 0 ? void 0 : value._def.value;\n            // This should never happen because Zod checks the disciminator type but to keep the types happy\n            if (typeof literalValue !== 'string') {\n                throw new Error(`Discriminator ${discriminator} could not be found in one of the values of a discriminated union`);\n            }\n            mapping[literalValue] = this.generateSchemaRef(refId);\n        });\n        return {\n            propertyName: discriminator,\n            mapping,\n        };\n    }\n    mapNullableOfArray(objects, isNullable) {\n        return this.versionSpecifics.mapNullableOfArray(objects, isNullable);\n    }\n    mapNullableType(type, isNullable) {\n        return this.versionSpecifics.mapNullableType(type, isNullable);\n    }\n    getNumberChecks(checks) {\n        return this.versionSpecifics.getNumberChecks(checks);\n    }\n    constructReferencedOpenAPISchema(zodSchema) {\n        var _a;\n        const metadata = this.getMetadata(zodSchema);\n        const innerSchema = this.unwrapChained(zodSchema);\n        const defaultValue = this.getDefaultValue(zodSchema);\n        const isNullableSchema = zodSchema.isNullable();\n        if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.type) {\n            return this.mapNullableType(metadata.metadata.type, isNullableSchema);\n        }\n        return this.toOpenAPISchema(innerSchema, isNullableSchema, defaultValue);\n    }\n    toOpenAPISchema(zodSchema, isNullable, defaultValue) {\n        var _a, _b, _c, _d, _e;\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodNull')) {\n            return this.versionSpecifics.nullType;\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodString')) {\n            const regexCheck = this.getZodStringCheck(zodSchema, 'regex');\n            const length = (_a = this.getZodStringCheck(zodSchema, 'length')) === null || _a === void 0 ? void 0 : _a.value;\n            const maxLength = Number.isFinite(zodSchema.minLength)\n                ? (_b = zodSchema.minLength) !== null && _b !== void 0 ? _b : undefined\n                : undefined;\n            const minLength = Number.isFinite(zodSchema.maxLength)\n                ? (_c = zodSchema.maxLength) !== null && _c !== void 0 ? _c : undefined\n                : undefined;\n            return Object.assign(Object.assign({}, this.mapNullableType('string', isNullable)), { \n                // FIXME: https://github.com/colinhacks/zod/commit/d78047e9f44596a96d637abb0ce209cd2732d88c\n                minLength: length !== null && length !== void 0 ? length : maxLength, maxLength: length !== null && length !== void 0 ? length : minLength, format: this.mapStringFormat(zodSchema), pattern: regexCheck === null || regexCheck === void 0 ? void 0 : regexCheck.regex.source, default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodNumber')) {\n            return Object.assign(Object.assign(Object.assign({}, this.mapNullableType(zodSchema.isInt ? 'integer' : 'number', isNullable)), this.getNumberChecks(zodSchema._def.checks)), { default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodBigInt')) {\n            return Object.assign(Object.assign(Object.assign({}, this.mapNullableType('integer', isNullable)), this.getNumberChecks(zodSchema._def.checks)), { format: 'int64', default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodBoolean')) {\n            return Object.assign(Object.assign({}, this.mapNullableType('boolean', isNullable)), { default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodEffects')) {\n            const innerSchema = zodSchema._def.schema;\n            // Here we want to register any underlying schemas, however we do not want to\n            // reference it, hence why `generateSchema` is used instead of `generateSchemaWithRef`\n            return this.generateSchema(innerSchema);\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodLiteral')) {\n            return Object.assign(Object.assign({}, this.mapNullableType(typeof zodSchema._def.value, isNullable)), { enum: [zodSchema._def.value], default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodEnum')) {\n            // ZodEnum only accepts strings\n            return Object.assign(Object.assign({}, this.mapNullableType('string', isNullable)), { enum: zodSchema._def.values, default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodNativeEnum')) {\n            const { type, values } = (0, enum_info_1.enumInfo)(zodSchema._def.values);\n            if (type === 'mixed') {\n                // enum Test {\n                //   A = 42,\n                //   B = 'test',\n                // }\n                //\n                // const result = z.nativeEnum(Test).parse('42');\n                //\n                // This is an error, so we can't just say it's a 'string'\n                throw new errors_1.ZodToOpenAPIError('Enum has mixed string and number values, please specify the OpenAPI type manually');\n            }\n            return Object.assign(Object.assign({}, this.mapNullableType(type === 'numeric' ? 'integer' : 'string', isNullable)), { enum: values, default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodObject')) {\n            return this.toOpenAPIObjectSchema(zodSchema, isNullable, defaultValue);\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodArray')) {\n            const itemType = zodSchema._def.type;\n            return Object.assign(Object.assign({}, this.mapNullableType('array', isNullable)), { items: this.generateSchemaWithRef(itemType), minItems: (_d = zodSchema._def.minLength) === null || _d === void 0 ? void 0 : _d.value, maxItems: (_e = zodSchema._def.maxLength) === null || _e === void 0 ? void 0 : _e.value, default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodTuple')) {\n            const { items } = zodSchema._def;\n            const tupleLength = items.length;\n            const schemas = items.map(schema => this.generateSchemaWithRef(schema));\n            const uniqueSchemas = (0, lodash_1.uniq)(schemas);\n            if (uniqueSchemas.length === 1) {\n                return {\n                    type: 'array',\n                    items: uniqueSchemas[0],\n                    minItems: tupleLength,\n                    maxItems: tupleLength,\n                };\n            }\n            return Object.assign(Object.assign({}, this.mapNullableType('array', isNullable)), { items: {\n                    anyOf: uniqueSchemas,\n                }, minItems: tupleLength, maxItems: tupleLength });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodUnion')) {\n            const options = this.flattenUnionTypes(zodSchema);\n            const schemas = options.map(schema => {\n                // If any of the underlying schemas of a union is .nullable then the whole union\n                // would be nullable. `mapNullableOfArray` would place it where it belongs.\n                // Therefor we are stripping the additional nullables from the inner schemas\n                // See https://github.com/asteasolutions/zod-to-openapi/issues/149\n                const optionToGenerate = this.unwrapNullable(schema);\n                return this.generateSchemaWithRef(optionToGenerate);\n            });\n            return {\n                anyOf: this.mapNullableOfArray(schemas, isNullable),\n                default: defaultValue,\n            };\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodDiscriminatedUnion')) {\n            const options = [...zodSchema.options.values()];\n            const optionSchema = options.map(schema => this.generateSchemaWithRef(schema));\n            if (isNullable) {\n                return {\n                    oneOf: this.mapNullableOfArray(optionSchema, isNullable),\n                    default: defaultValue,\n                };\n            }\n            return {\n                oneOf: optionSchema,\n                discriminator: this.mapDiscriminator(options, zodSchema.discriminator),\n                default: defaultValue,\n            };\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodIntersection')) {\n            const subtypes = this.flattenIntersectionTypes(zodSchema);\n            const allOfSchema = {\n                allOf: subtypes.map(schema => this.generateSchemaWithRef(schema)),\n            };\n            if (isNullable) {\n                return {\n                    anyOf: this.mapNullableOfArray([allOfSchema], isNullable),\n                    default: defaultValue,\n                };\n            }\n            return Object.assign(Object.assign({}, allOfSchema), { default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodRecord')) {\n            const propertiesType = zodSchema._def.valueType;\n            const keyType = zodSchema._def.keyType;\n            const propertiesSchema = this.generateSchemaWithRef(propertiesType);\n            if ((0, zod_is_type_1.isZodType)(keyType, 'ZodEnum') ||\n                (0, zod_is_type_1.isZodType)(keyType, 'ZodNativeEnum')) {\n                // Native enums have their keys as both number and strings however the number is an\n                // internal representation and the string is the access point for a documentation\n                const keys = Object.values(keyType.enum).filter(lodash_1.isString);\n                const properties = keys.reduce((acc, curr) => (Object.assign(Object.assign({}, acc), { [curr]: propertiesSchema })), {});\n                return Object.assign(Object.assign({}, this.mapNullableType('object', isNullable)), { properties, default: defaultValue });\n            }\n            return Object.assign(Object.assign({}, this.mapNullableType('object', isNullable)), { additionalProperties: propertiesSchema, default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodUnknown') || (0, zod_is_type_1.isZodType)(zodSchema, 'ZodAny')) {\n            return this.mapNullableType(undefined, isNullable);\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodDate')) {\n            return Object.assign(Object.assign({}, this.mapNullableType('string', isNullable)), { default: defaultValue });\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodPipeline')) {\n            return this.toOpenAPISchema(zodSchema._def.in, isNullable, defaultValue);\n        }\n        const refId = this.getRefId(zodSchema);\n        throw new errors_1.UnknownZodTypeError({\n            currentSchema: zodSchema._def,\n            schemaName: refId,\n        });\n    }\n    isOptionalSchema(zodSchema) {\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodEffects')) {\n            return this.isOptionalSchema(zodSchema._def.schema);\n        }\n        return zodSchema.isOptional();\n    }\n    getDefaultValue(zodSchema) {\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodOptional') ||\n            (0, zod_is_type_1.isZodType)(zodSchema, 'ZodNullable')) {\n            return this.getDefaultValue(zodSchema.unwrap());\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodEffects')) {\n            return this.getDefaultValue(zodSchema._def.schema);\n        }\n        if ((0, zod_is_type_1.isZodType)(zodSchema, 'ZodDefault')) {\n            return zodSchema._def.defaultValue();\n        }\n        return undefined;\n    }\n    requiredKeysOf(objectSchema) {\n        return Object.entries(objectSchema._def.shape())\n            .filter(([_key, type]) => !this.isOptionalSchema(type))\n            .map(([key, _type]) => key);\n    }\n    toOpenAPIObjectSchema(zodSchema, isNullable, defaultValue) {\n        var _a;\n        const extendedFrom = (_a = this.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.extendedFrom;\n        const required = this.requiredKeysOf(zodSchema);\n        const properties = (0, lodash_1.mapValues)(zodSchema._def.shape(), _ => this.generateSchemaWithRef(_));\n        if (!extendedFrom) {\n            return Object.assign(Object.assign(Object.assign(Object.assign({}, this.mapNullableType('object', isNullable)), { default: defaultValue, properties }), (required.length > 0 ? { required } : {})), this.generateAdditionalProperties(zodSchema));\n        }\n        const parent = extendedFrom.schema;\n        // We want to generate the parent schema so that it can be referenced down the line\n        this.generateSchema(parent);\n        const keysRequiredByParent = this.requiredKeysOf(parent);\n        const propsOfParent = (0, lodash_1.mapValues)(parent === null || parent === void 0 ? void 0 : parent._def.shape(), _ => this.generateSchemaWithRef(_));\n        const propertiesToAdd = Object.fromEntries(Object.entries(properties).filter(([key, type]) => {\n            return !(0, lodash_1.objectEquals)(propsOfParent[key], type);\n        }));\n        const additionallyRequired = required.filter(prop => !keysRequiredByParent.includes(prop));\n        const objectData = Object.assign(Object.assign(Object.assign(Object.assign({}, this.mapNullableType('object', isNullable)), { default: defaultValue, properties: propertiesToAdd }), (additionallyRequired.length > 0\n            ? { required: additionallyRequired }\n            : {})), this.generateAdditionalProperties(zodSchema));\n        return {\n            allOf: [\n                { $ref: `#/components/schemas/${extendedFrom.refId}` },\n                objectData,\n            ],\n        };\n    }\n    generateAdditionalProperties(zodSchema) {\n        const unknownKeysOption = zodSchema._def.unknownKeys;\n        const catchallSchema = zodSchema._def.catchall;\n        if ((0, zod_is_type_1.isZodType)(catchallSchema, 'ZodNever')) {\n            if (unknownKeysOption === 'strict') {\n                return { additionalProperties: false };\n            }\n            return {};\n        }\n        return { additionalProperties: this.generateSchemaWithRef(catchallSchema) };\n    }\n    flattenUnionTypes(schema) {\n        if (!(0, zod_is_type_1.isZodType)(schema, 'ZodUnion')) {\n            return [schema];\n        }\n        const options = schema._def.options;\n        return options.flatMap(option => this.flattenUnionTypes(option));\n    }\n    flattenIntersectionTypes(schema) {\n        if (!(0, zod_is_type_1.isZodType)(schema, 'ZodIntersection')) {\n            return [schema];\n        }\n        const leftSubTypes = this.flattenIntersectionTypes(schema._def.left);\n        const rightSubTypes = this.flattenIntersectionTypes(schema._def.right);\n        return [...leftSubTypes, ...rightSubTypes];\n    }\n    unwrapNullable(schema) {\n        if ((0, zod_is_type_1.isZodType)(schema, 'ZodNullable')) {\n            return this.unwrapNullable(schema.unwrap());\n        }\n        return schema;\n    }\n    unwrapChained(schema) {\n        if ((0, zod_is_type_1.isZodType)(schema, 'ZodOptional') ||\n            (0, zod_is_type_1.isZodType)(schema, 'ZodNullable') ||\n            (0, zod_is_type_1.isZodType)(schema, 'ZodBranded')) {\n            return this.unwrapChained(schema.unwrap());\n        }\n        if ((0, zod_is_type_1.isZodType)(schema, 'ZodDefault') || (0, zod_is_type_1.isZodType)(schema, 'ZodReadonly')) {\n            return this.unwrapChained(schema._def.innerType);\n        }\n        if ((0, zod_is_type_1.isZodType)(schema, 'ZodEffects')) {\n            return this.unwrapChained(schema._def.schema);\n        }\n        return schema;\n    }\n    /**\n     * A method that omits all custom keys added to the regular OpenAPI\n     * metadata properties\n     */\n    buildSchemaMetadata(metadata) {\n        return (0, lodash_1.omitBy)((0, lodash_1.omit)(metadata, ['param']), lodash_1.isNil);\n    }\n    buildParameterMetadata(metadata) {\n        return (0, lodash_1.omitBy)(metadata, lodash_1.isNil);\n    }\n    getParamMetadata(zodSchema) {\n        var _a;\n        const innerSchema = this.unwrapChained(zodSchema);\n        const metadata = zodSchema._def.openapi\n            ? zodSchema._def.openapi\n            : innerSchema._def.openapi;\n        /**\n         * Every zod schema can receive a `description` by using the .describe method.\n         * That description should be used when generating an OpenApi schema.\n         * The `??` bellow makes sure we can handle both:\n         * - schema.describe('Test').optional()\n         * - schema.optional().describe('Test')\n         */\n        const zodDescription = (_a = zodSchema.description) !== null && _a !== void 0 ? _a : innerSchema.description;\n        return {\n            _internal: metadata === null || metadata === void 0 ? void 0 : metadata._internal,\n            metadata: Object.assign(Object.assign({}, metadata === null || metadata === void 0 ? void 0 : metadata.metadata), { \n                // A description provided from .openapi() should be taken with higher precedence\n                param: Object.assign({ description: zodDescription }, metadata === null || metadata === void 0 ? void 0 : metadata.metadata.param) }),\n        };\n    }\n    getMetadata(zodSchema) {\n        var _a;\n        const innerSchema = this.unwrapChained(zodSchema);\n        const metadata = zodSchema._def.openapi\n            ? zodSchema._def.openapi\n            : innerSchema._def.openapi;\n        /**\n         * Every zod schema can receive a `description` by using the .describe method.\n         * That description should be used when generating an OpenApi schema.\n         * The `??` bellow makes sure we can handle both:\n         * - schema.describe('Test').optional()\n         * - schema.optional().describe('Test')\n         */\n        const zodDescription = (_a = zodSchema.description) !== null && _a !== void 0 ? _a : innerSchema.description;\n        // A description provided from .openapi() should be taken with higher precedence\n        return {\n            _internal: metadata === null || metadata === void 0 ? void 0 : metadata._internal,\n            metadata: Object.assign({ description: zodDescription }, metadata === null || metadata === void 0 ? void 0 : metadata.metadata),\n        };\n    }\n    getInternalMetadata(zodSchema) {\n        const innerSchema = this.unwrapChained(zodSchema);\n        const openapi = zodSchema._def.openapi\n            ? zodSchema._def.openapi\n            : innerSchema._def.openapi;\n        return openapi === null || openapi === void 0 ? void 0 : openapi._internal;\n    }\n    getRefId(zodSchema) {\n        var _a;\n        return (_a = this.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.refId;\n    }\n    applySchemaMetadata(initialData, metadata) {\n        return (0, lodash_1.omitBy)(Object.assign(Object.assign({}, initialData), this.buildSchemaMetadata(metadata)), lodash_1.isNil);\n    }\n    enhanceMissingParametersError(action, paramsToAdd) {\n        try {\n            return action();\n        }\n        catch (error) {\n            if (error instanceof errors_1.MissingParameterDataError) {\n                throw new errors_1.MissingParameterDataError(Object.assign(Object.assign({}, error.data), paramsToAdd));\n            }\n            throw error;\n        }\n    }\n}\nexports.OpenAPIGenerator = OpenAPIGenerator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenApiGeneratorV30Specifics = void 0;\nclass OpenApiGeneratorV30Specifics {\n    get nullType() {\n        return { nullable: true };\n    }\n    mapNullableOfArray(objects, isNullable) {\n        if (isNullable) {\n            return [...objects, this.nullType];\n        }\n        return objects;\n    }\n    mapNullableType(type, isNullable) {\n        return Object.assign(Object.assign({}, (type ? { type } : undefined)), (isNullable ? this.nullType : undefined));\n    }\n    getNumberChecks(checks) {\n        return Object.assign({}, ...checks.map(check => {\n            switch (check.kind) {\n                case 'min':\n                    return check.inclusive\n                        ? { minimum: Number(check.value) }\n                        : { minimum: Number(check.value), exclusiveMinimum: true };\n                case 'max':\n                    return check.inclusive\n                        ? { maximum: Number(check.value) }\n                        : { maximum: Number(check.value), exclusiveMaximum: true };\n                default:\n                    return {};\n            }\n        }));\n    }\n}\nexports.OpenApiGeneratorV30Specifics = OpenApiGeneratorV30Specifics;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenApiGeneratorV3 = void 0;\nconst openapi_generator_1 = require(\"../openapi-generator\");\nconst specifics_1 = require(\"./specifics\");\nclass OpenApiGeneratorV3 {\n    constructor(definitions) {\n        const specifics = new specifics_1.OpenApiGeneratorV30Specifics();\n        this.generator = new openapi_generator_1.OpenAPIGenerator(definitions, specifics);\n    }\n    generateDocument(config) {\n        const baseData = this.generator.generateDocumentData();\n        return Object.assign(Object.assign({}, config), baseData);\n    }\n    generateComponents() {\n        return this.generator.generateComponents();\n    }\n}\nexports.OpenApiGeneratorV3 = OpenApiGeneratorV3;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenApiGeneratorV31Specifics = void 0;\nclass OpenApiGeneratorV31Specifics {\n    get nullType() {\n        return { type: 'null' };\n    }\n    mapNullableOfArray(objects, isNullable) {\n        if (isNullable) {\n            return [...objects, this.nullType];\n        }\n        return objects;\n    }\n    mapNullableType(type, isNullable) {\n        if (!type) {\n            // 'null' is considered a type in Open API 3.1.0 => not providing a type includes null\n            return {};\n        }\n        // Open API 3.1.0 made the `nullable` key invalid and instead you use type arrays\n        if (isNullable) {\n            return {\n                type: Array.isArray(type) ? [...type, 'null'] : [type, 'null'],\n            };\n        }\n        return {\n            type,\n        };\n    }\n    getNumberChecks(checks) {\n        return Object.assign({}, ...checks.map(check => {\n            switch (check.kind) {\n                case 'min':\n                    return check.inclusive\n                        ? { minimum: Number(check.value) }\n                        : { exclusiveMinimum: Number(check.value) };\n                case 'max':\n                    return check.inclusive\n                        ? { maximum: Number(check.value) }\n                        : { exclusiveMaximum: Number(check.value) };\n                default:\n                    return {};\n            }\n        }));\n    }\n}\nexports.OpenApiGeneratorV31Specifics = OpenApiGeneratorV31Specifics;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenApiGeneratorV31 = void 0;\nconst openapi_generator_1 = require(\"../openapi-generator\");\nconst specifics_1 = require(\"./specifics\");\nfunction isWebhookDefinition(definition) {\n    return 'type' in definition && definition.type === 'webhook';\n}\nclass OpenApiGeneratorV31 {\n    constructor(definitions) {\n        this.definitions = definitions;\n        this.webhookRefs = {};\n        const specifics = new specifics_1.OpenApiGeneratorV31Specifics();\n        this.generator = new openapi_generator_1.OpenAPIGenerator(this.definitions, specifics);\n    }\n    generateDocument(config) {\n        const baseDocument = this.generator.generateDocumentData();\n        this.definitions\n            .filter(isWebhookDefinition)\n            .forEach(definition => this.generateSingleWebhook(definition.webhook));\n        return Object.assign(Object.assign(Object.assign({}, config), baseDocument), { webhooks: this.webhookRefs });\n    }\n    generateComponents() {\n        return this.generator.generateComponents();\n    }\n    generateSingleWebhook(route) {\n        const routeDoc = this.generator.generatePath(route);\n        this.webhookRefs[route.path] = Object.assign(Object.assign({}, this.webhookRefs[route.path]), routeDoc);\n        return routeDoc;\n    }\n}\nexports.OpenApiGeneratorV31 = OpenApiGeneratorV31;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpenApiGeneratorV31 = exports.OpenApiGeneratorV3 = exports.OpenAPIRegistry = exports.extendZodWithOpenApi = void 0;\nvar zod_extensions_1 = require(\"./zod-extensions\");\nObject.defineProperty(exports, \"extendZodWithOpenApi\", { enumerable: true, get: function () { return zod_extensions_1.extendZodWithOpenApi; } });\n__exportStar(require(\"./openapi-metadata\"), exports);\nvar openapi_registry_1 = require(\"./openapi-registry\");\nObject.defineProperty(exports, \"OpenAPIRegistry\", { enumerable: true, get: function () { return openapi_registry_1.OpenAPIRegistry; } });\nvar openapi_generator_1 = require(\"./v3.0/openapi-generator\");\nObject.defineProperty(exports, \"OpenApiGeneratorV3\", { enumerable: true, get: function () { return openapi_generator_1.OpenApiGeneratorV3; } });\nvar openapi_generator_2 = require(\"./v3.1/openapi-generator\");\nObject.defineProperty(exports, \"OpenApiGeneratorV31\", { enumerable: true, get: function () { return openapi_generator_2.OpenApiGeneratorV31; } });\n","// typespecs/api_types.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi9 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z12 } from \"zod\";\n\n// typespecs/app_types.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi8 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z11 } from \"zod\";\n\n// src/zod_util.ts\nimport { z } from \"zod\";\nfunction objectNullish(object) {\n  return new z.ZodObject({\n    ...object._def,\n    shape: () => Object.fromEntries(\n      Object.entries(object.shape).map(([k, v]) => [k, v.nullish()])\n    )\n  });\n}\n\n// typespecs/common_types.ts\nimport { z as z2 } from \"zod\";\nimport { extendZodWithOpenApi } from \"@asteasolutions/zod-to-openapi\";\nextendZodWithOpenApi(z2);\nvar literalSchema = z2.union([\n  z2.string().openapi({ title: \"string\" }),\n  z2.number().openapi({ title: \"number\" }),\n  z2.boolean().openapi({ title: \"boolean\" }),\n  z2.null().openapi({ title: \"null\" })\n]);\nvar jsonSchema = z2.lazy(\n  () => z2.union([\n    literalSchema,\n    z2.array(jsonSchema).openapi({ title: \"array\" }),\n    z2.record(jsonSchema).openapi({ title: \"object\" })\n  ])\n);\nvar datetimeStringSchema = z2.string().transform((x, ctx) => {\n  const d = new Date(x);\n  if (isNaN(d.getTime())) {\n    ctx.addIssue({\n      code: z2.ZodIssueCode.invalid_string,\n      validation: \"datetime\",\n      message: \"Invalid datetime\"\n    });\n    return z2.NEVER;\n  }\n  return d.toISOString();\n}).openapi({ format: \"date-time\" });\nvar objectTypes = z2.enum([\n  \"project\",\n  \"experiment\",\n  \"dataset\",\n  \"prompt\",\n  \"prompt_session\",\n  \"role\",\n  \"group\",\n  \"acl\",\n  \"user\",\n  \"project_score\",\n  \"project_tag\",\n  \"span_iframe\",\n  \"function\",\n  \"view\",\n  \"organization\",\n  \"api_key\",\n  \"ai_secret\",\n  \"env_var\"\n]);\nvar objectTypesWithEvent = z2.enum([\n  \"project\",\n  \"experiment\",\n  \"dataset\",\n  \"prompt\",\n  \"function\",\n  \"prompt_session\"\n]);\nvar eventObjectType = objectTypesWithEvent.exclude([\"project\"]).or(z2.enum([\"project_logs\"]));\nfunction getEventObjectType(objectType) {\n  return objectType === \"project\" ? \"project_logs\" : objectType;\n}\nfunction getEventObjectDescription(objectType) {\n  return getEventObjectType(objectType).replace(\"_\", \" \");\n}\nfunction getObjectArticle(objectType) {\n  return [\n    \"acl\",\n    \"api_key\",\n    \"experiment\",\n    \"organization\",\n    \"ai_secret\",\n    \"env_var\"\n  ].includes(objectType) ? \"an\" : \"a\";\n}\nvar objectReferenceSchema = z2.object({\n  object_type: eventObjectType.describe(\n    \"Type of the object the event is originating from.\"\n  ),\n  object_id: z2.string().uuid().describe(\"ID of the object the event is originating from.\"),\n  id: z2.string().describe(\"ID of the original event.\"),\n  _xact_id: z2.string().describe(\"Transaction ID of the original event.\"),\n  created: z2.string().nullish().describe(\n    \"Created timestamp of the original event. Used to help sort in the UI\"\n  )\n}).describe(\"Reference to the original object and event this was copied from.\").openapi(\"ObjectReference\");\n\n// typespecs/custom_types.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi2 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z3 } from \"zod\";\nextendZodWithOpenApi2(z3);\nvar modeSchema = z3.enum([\"default\", \"stainless\"]);\nvar _a;\nvar mode = modeSchema.parse(\n  typeof process === \"undefined\" ? \"default\" : ((_a = process == null ? void 0 : process.env) == null ? void 0 : _a.BRAINTRUST_TYPESPECS_MODE) || \"default\"\n);\nvar modeToTypes = {\n  default: {\n    unknown: z3.unknown(),\n    literalTrue: z3.literal(true),\n    literalFalse: z3.literal(false)\n  },\n  stainless: {\n    // Stainless requires schemas which are completely permissive to be\n    // tagged.\n    unknown: z3.unknown().openapi({ [\"x-stainless-any\"]: true }),\n    // Stainless does not support boolean literals in all SDKs.\n    literalTrue: z3.boolean(),\n    literalFalse: z3.boolean()\n  }\n};\nvar customTypes = modeToTypes[mode];\nvar customTypesMode = mode;\n\n// typespecs/prompt.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi5 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z7 } from \"zod\";\n\n// typespecs/openai/messages.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi3 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z4 } from \"zod\";\nextendZodWithOpenApi3(z4);\nvar messageRoleSchema = z4.enum([\"system\", \"user\", \"assistant\", \"function\", \"tool\", \"model\"]).openapi(\"MessageRole\");\nvar chatCompletionSystemMessageParamSchema = z4.object({\n  content: z4.string().default(\"\"),\n  role: z4.literal(\"system\"),\n  name: z4.string().optional()\n});\nvar chatCompletionContentPartTextSchema = z4.object({\n  text: z4.string().default(\"\"),\n  type: z4.literal(\"text\")\n}).openapi(\"ChatCompletionContentPartText\");\nvar imageURLSchema = z4.object({\n  url: z4.string(),\n  detail: z4.union([\n    z4.literal(\"auto\").openapi({ title: \"auto\" }),\n    z4.literal(\"low\").openapi({ title: \"low\" }),\n    z4.literal(\"high\").openapi({ title: \"high\" })\n  ]).optional()\n});\nvar chatCompletionContentPartImageSchema = z4.object({\n  image_url: imageURLSchema,\n  type: z4.literal(\"image_url\")\n}).openapi(\"ChatCompletionContentPartImage\");\nvar chatCompletionContentPartSchema = z4.union([\n  chatCompletionContentPartTextSchema.openapi({ title: \"text\" }),\n  chatCompletionContentPartImageSchema.openapi({ title: \"image_url\" })\n]).openapi(\"ChatCompletionContentPart\");\nvar chatCompletionContentSchema = z4.union([\n  z4.string().default(\"\").openapi({ title: \"text\" }),\n  z4.array(\n    chatCompletionContentPartSchema.openapi({\n      title: \"chat_completion_content_part\"\n    })\n  ).openapi({ title: \"array\" })\n]).openapi(\"ChatCompletionContent\");\nvar chatCompletionUserMessageParamSchema = z4.object({\n  content: chatCompletionContentSchema,\n  role: z4.literal(\"user\"),\n  name: z4.string().optional()\n});\nvar functionCallSchema = z4.object({\n  arguments: z4.string(),\n  name: z4.string()\n});\nvar functionSchema = z4.object({\n  arguments: z4.string(),\n  name: z4.string()\n});\nvar chatCompletionToolMessageParamSchema = z4.object({\n  content: z4.string().default(\"\"),\n  role: z4.literal(\"tool\"),\n  tool_call_id: z4.string().default(\"\")\n});\nvar chatCompletionFunctionMessageParamSchema = z4.object({\n  content: z4.string().default(\"\"),\n  name: z4.string(),\n  role: z4.literal(\"function\")\n});\nvar chatCompletionMessageToolCallSchema = z4.object({\n  id: z4.string(),\n  function: functionSchema,\n  type: z4.literal(\"function\")\n}).openapi(\"ChatCompletionMessageToolCall\");\nvar chatCompletionAssistantMessageParamSchema = z4.object({\n  role: z4.literal(\"assistant\"),\n  content: z4.string().nullish(),\n  // NOTE: It's important to keep these optional, rather than nullish, to stay\n  // inline with the OpenAI SDK's type definition.\n  function_call: functionCallSchema.nullish().transform((x) => x != null ? x : void 0),\n  name: z4.string().nullish().transform((x) => x != null ? x : void 0),\n  tool_calls: z4.array(chatCompletionMessageToolCallSchema).nullish().transform((x) => x != null ? x : void 0)\n});\nvar chatCompletionFallbackMessageParamSchema = z4.object({\n  role: messageRoleSchema.exclude([\n    \"system\",\n    \"user\",\n    \"assistant\",\n    \"tool\",\n    \"function\"\n  ]),\n  content: z4.string().nullish()\n});\nvar chatCompletionOpenAIMessageParamSchema = z4.union([\n  chatCompletionSystemMessageParamSchema.openapi({ title: \"system\" }),\n  chatCompletionUserMessageParamSchema.openapi({ title: \"user\" }),\n  chatCompletionAssistantMessageParamSchema.openapi({ title: \"assistant\" }),\n  chatCompletionToolMessageParamSchema.openapi({ title: \"tool\" }),\n  chatCompletionFunctionMessageParamSchema.openapi({ title: \"function\" })\n]);\nvar chatCompletionMessageParamSchema = z4.union([\n  chatCompletionOpenAIMessageParamSchema.openapi({ title: \"openai\" }),\n  chatCompletionFallbackMessageParamSchema.openapi({ title: \"fallback\" })\n]).openapi(\"ChatCompletionMessageParam\");\n\n// typespecs/function_id.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi4 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z5 } from \"zod\";\nextendZodWithOpenApi4(z5);\nvar savedFunctionIdSchema = z5.union([\n  z5.object({\n    type: z5.literal(\"function\"),\n    id: z5.string()\n  }).openapi({ title: \"function\" }),\n  z5.object({\n    type: z5.literal(\"global\"),\n    name: z5.string()\n  }).openapi({ title: \"global\" })\n]).openapi(\"SavedFunctionId\");\nvar extendedSavedFunctionIdSchema = savedFunctionIdSchema.or(\n  z5.object({\n    type: z5.literal(\"slug\"),\n    project_id: z5.string(),\n    slug: z5.string()\n  })\n);\n\n// typespecs/openai/tools.ts\nimport { z as z6 } from \"zod\";\nvar functionParametersSchema = z6.record(customTypes.unknown);\nvar functionDefinitionSchema = z6.object({\n  name: z6.string(),\n  description: z6.string().optional(),\n  parameters: functionParametersSchema.optional()\n});\nvar chatCompletionToolSchema = z6.object({\n  function: functionDefinitionSchema,\n  type: z6.literal(\"function\")\n});\nvar toolsSchema = z6.array(chatCompletionToolSchema);\n\n// typespecs/prompt.ts\nextendZodWithOpenApi5(z7);\nvar promptBlockDataSchema = z7.union([\n  z7.object({\n    type: z7.literal(\"completion\"),\n    content: z7.string()\n  }).openapi({ title: \"completion\" }),\n  z7.object({\n    type: z7.literal(\"chat\"),\n    messages: z7.array(chatCompletionMessageParamSchema),\n    tools: z7.string().optional()\n  }).openapi({ title: \"chat\" })\n]);\nvar braintrustModelParamsSchema = z7.object({\n  use_cache: z7.boolean().optional()\n});\nvar BRAINTRUST_PARAMS = Object.keys(braintrustModelParamsSchema.shape);\nvar responseFormatJsonSchemaSchema = z7.object({\n  name: z7.string(),\n  description: z7.string().optional(),\n  schema: z7.union([\n    z7.record(customTypes.unknown).openapi({ title: \"object\" }),\n    z7.string().openapi({ title: \"string\" })\n  ]).optional(),\n  strict: z7.boolean().nullish()\n});\nvar responseFormatSchema = z7.union([\n  z7.object({ type: z7.literal(\"json_object\") }).openapi({ title: \"json_object\" }),\n  z7.object({\n    type: z7.literal(\"json_schema\"),\n    json_schema: responseFormatJsonSchemaSchema\n  }).openapi({ title: \"json_schema\" }),\n  z7.object({ type: z7.literal(\"text\") }).openapi({ title: \"text\" })\n]);\nvar openAIModelParamsSchema = z7.object({\n  temperature: z7.number().optional(),\n  top_p: z7.number().optional(),\n  max_tokens: z7.number().optional(),\n  max_completion_tokens: z7.number().optional().describe(\"The successor to max_tokens\"),\n  frequency_penalty: z7.number().optional(),\n  presence_penalty: z7.number().optional(),\n  response_format: responseFormatSchema.nullish(),\n  tool_choice: z7.union([\n    z7.literal(\"auto\").openapi({ title: \"auto\" }),\n    z7.literal(\"none\").openapi({ title: \"none\" }),\n    z7.literal(\"required\").openapi({ title: \"required\" }),\n    z7.object({\n      type: z7.literal(\"function\"),\n      function: z7.object({ name: z7.string() })\n    }).openapi({ title: \"function\" })\n  ]).optional(),\n  function_call: z7.union([\n    z7.literal(\"auto\").openapi({ title: \"auto\" }),\n    z7.literal(\"none\").openapi({ title: \"none\" }),\n    z7.object({\n      name: z7.string()\n    }).openapi({ title: \"function\" })\n  ]).optional(),\n  n: z7.number().optional(),\n  stop: z7.array(z7.string()).optional(),\n  reasoning_effort: z7.enum([\"low\", \"medium\", \"high\"]).optional()\n});\nvar anthropicModelParamsSchema = z7.object({\n  max_tokens: z7.number(),\n  temperature: z7.number(),\n  top_p: z7.number().optional(),\n  top_k: z7.number().optional(),\n  stop_sequences: z7.array(z7.string()).optional(),\n  max_tokens_to_sample: z7.number().optional().describe(\"This is a legacy parameter that should not be used.\")\n}).openapi(\"AntrhopicModelParams\");\nvar googleModelParamsSchema = z7.object({\n  temperature: z7.number().optional(),\n  maxOutputTokens: z7.number().optional(),\n  topP: z7.number().optional(),\n  topK: z7.number().optional()\n}).openapi(\"GoogleModelParams\");\nvar windowAIModelParamsSchema = z7.object({\n  temperature: z7.number().optional(),\n  topK: z7.number().optional()\n}).openapi(\"WindowAIModelParams\");\nvar jsCompletionParamsSchema = z7.object({}).openapi(\"JsCompletionParams\");\nvar modelParamsSchema = z7.union([\n  braintrustModelParamsSchema.merge(openAIModelParamsSchema).passthrough().openapi({ title: \"OpenAIModelParams\" }),\n  braintrustModelParamsSchema.merge(anthropicModelParamsSchema).passthrough().openapi({ title: \"AnthropicModelParams\" }),\n  braintrustModelParamsSchema.merge(googleModelParamsSchema).passthrough().openapi({ title: \"GoogleModelParams\" }),\n  braintrustModelParamsSchema.merge(windowAIModelParamsSchema).passthrough().openapi({ title: \"WindowAIModelParams\" }),\n  braintrustModelParamsSchema.merge(jsCompletionParamsSchema).passthrough().openapi({ title: \"JsCompletionParams\" })\n]).openapi(\"ModelParams\");\nvar _anyModelParamsSchema = openAIModelParamsSchema.merge(anthropicModelParamsSchema).merge(googleModelParamsSchema).merge(braintrustModelParamsSchema);\nvar promptOptionsSchema = z7.object({\n  model: z7.string().optional(),\n  params: modelParamsSchema.optional(),\n  position: z7.string().optional()\n}).openapi(\"PromptOptions\");\nvar promptParserSchema = z7.object({\n  type: z7.literal(\"llm_classifier\"),\n  use_cot: z7.boolean(),\n  choice_scores: z7.record(z7.number().min(0).max(1))\n});\nvar promptDataSchema = z7.object({\n  prompt: promptBlockDataSchema.nullish(),\n  options: promptOptionsSchema.nullish(),\n  // This should be a union once we support multiple parser types\n  parser: promptParserSchema.nullish(),\n  tool_functions: z7.array(savedFunctionIdSchema).nullish(),\n  origin: z7.object({\n    prompt_id: z7.string().optional(),\n    project_id: z7.string().optional(),\n    prompt_version: z7.string().optional()\n  }).nullish()\n}).openapi(\"PromptData\");\nvar strictPromptDataSchema = promptDataSchema.extend({\n  parser: promptParserSchema.extend({\n    choice_scores: promptParserSchema.shape.choice_scores.refine(\n      (r) => Object.keys(r).length > 0,\n      \"choice_scores must be nonempty\"\n    )\n  }).nullish()\n});\n\n// typespecs/view.ts\nimport { z as z8 } from \"zod\";\nvar viewTypeEnum = z8.enum([\n  \"projects\",\n  \"experiments\",\n  \"experiment\",\n  \"playgrounds\",\n  \"playground\",\n  \"datasets\",\n  \"dataset\",\n  \"prompts\",\n  \"tools\",\n  \"scorers\",\n  \"logs\"\n]).describe(\"Type of table that the view corresponds to.\");\nvar viewDataSearchSchema = z8.object({\n  filter: z8.array(customTypes.unknown).nullish(),\n  tag: z8.array(customTypes.unknown).nullish(),\n  match: z8.array(customTypes.unknown).nullish(),\n  sort: z8.array(customTypes.unknown).nullish()\n}).strip().openapi(\"ViewDataSearch\");\nvar viewDataSchema = z8.object({\n  search: viewDataSearchSchema.nullish()\n}).strip().openapi(\"ViewData\");\nvar viewOptionsSchema = z8.object({\n  columnVisibility: z8.record(z8.boolean()).nullish(),\n  columnOrder: z8.array(z8.string()).nullish(),\n  columnSizing: z8.record(z8.number()).nullish(),\n  grouping: z8.string().nullish(),\n  rowHeight: z8.string().nullish(),\n  layout: z8.string().nullish()\n}).strip().openapi(\"ViewOptions\");\n\n// typespecs/functions.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi7 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z10 } from \"zod\";\n\n// typespecs/git_types.ts\nimport { extendZodWithOpenApi as extendZodWithOpenApi6 } from \"@asteasolutions/zod-to-openapi\";\nimport { z as z9 } from \"zod\";\nextendZodWithOpenApi6(z9);\nvar repoInfoSchema = z9.object({\n  commit: z9.string().nullish().describe(\"SHA of most recent commit\"),\n  branch: z9.string().nullish().describe(\"Name of the branch the most recent commit belongs to\"),\n  tag: z9.string().nullish().describe(\"Name of the tag on the most recent commit\"),\n  dirty: z9.boolean().nullish().describe(\n    \"Whether or not the repo had uncommitted changes when snapshotted\"\n  ),\n  author_name: z9.string().nullish().describe(\"Name of the author of the most recent commit\"),\n  author_email: z9.string().nullish().describe(\"Email of the author of the most recent commit\"),\n  commit_message: z9.string().nullish().describe(\"Most recent commit message\"),\n  commit_time: z9.string().nullish().describe(\"Time of the most recent commit\"),\n  git_diff: z9.string().nullish().describe(\n    \"If the repo was dirty when run, this includes the diff between the current state of the repo and the most recent commit.\"\n  )\n}).describe(\n  \"Metadata about the state of the repo when the experiment was created\"\n).openapi(\"RepoInfo\");\nvar gitFieldsSchema = repoInfoSchema.keyof();\nvar collectMetadataEnum = z9.enum([\"all\", \"none\", \"some\"]);\nvar gitMetadataSettingsSchema = z9.strictObject({\n  collect: collectMetadataEnum,\n  fields: z9.array(gitFieldsSchema).optional()\n});\n\n// typespecs/functions.ts\nextendZodWithOpenApi7(z10);\nvar validRuntimesEnum = z10.enum([\"node\", \"python\"]);\nvar functionTypeEnum = z10.enum([\"llm\", \"scorer\", \"task\", \"tool\"]);\nvar runtimeContextSchema = z10.object({\n  runtime: validRuntimesEnum,\n  version: z10.string()\n});\nvar functionIdSchema = z10.union([\n  z10.object({\n    function_id: z10.string().describe(\"The ID of the function\"),\n    version: z10.string().optional().describe(\"The version of the function\")\n  }).describe(\"Function id\").openapi({ title: \"function_id\" }),\n  z10.object({\n    project_name: z10.string().describe(\"The name of the project containing the function\"),\n    slug: z10.string().describe(\"The slug of the function\"),\n    version: z10.string().optional().describe(\"The version of the function\")\n  }).describe(\"Project name and slug\").openapi({ title: \"project_slug\" }),\n  z10.object({\n    global_function: z10.string().describe(\n      \"The name of the global function. Currently, the global namespace includes the functions in autoevals\"\n    )\n  }).describe(\"Global function name\").openapi({ title: \"global_function\" }),\n  z10.object({\n    prompt_session_id: z10.string().describe(\"The ID of the prompt session\"),\n    prompt_session_function_id: z10.string().describe(\"The ID of the function in the prompt session\"),\n    version: z10.string().optional().describe(\"The version of the function\")\n  }).describe(\"Prompt session id\").openapi({ title: \"prompt_session_id\" }),\n  z10.object({\n    inline_context: runtimeContextSchema,\n    code: z10.string().describe(\"The inline code to execute\"),\n    name: z10.string().nullish().describe(\"The name of the inline code function\")\n  }).describe(\"Inline code function\").openapi({ title: \"inline_code\" }),\n  z10.object({\n    inline_prompt: promptDataSchema,\n    name: z10.string().nullish().describe(\"The name of the inline prompt\")\n  }).describe(\"Inline prompt definition\").openapi({ title: \"inline_prompt\" })\n]).describe(\"Options for identifying a function\").openapi(\"FunctionId\");\nvar useFunctionSchema = functionIdSchema;\nvar streamingModeEnum = z10.enum([\"auto\", \"parallel\"]);\nvar invokeParent = z10.union([\n  z10.object({\n    object_type: z10.enum([\"project_logs\", \"experiment\", \"playground_logs\"]),\n    object_id: z10.string().describe(\"The id of the container object you are logging to\"),\n    row_ids: z10.object({\n      id: z10.string().describe(\"The id of the row\"),\n      span_id: z10.string().describe(\"The span_id of the row\"),\n      root_span_id: z10.string().describe(\"The root_span_id of the row\")\n    }).nullish().describe(\"Identifiers for the row to to log a subspan under\"),\n    propagated_event: z10.record(customTypes.unknown).nullish().describe(\n      \"Include these properties in every span created under this parent\"\n    )\n  }).describe(\"Span parent properties\").openapi({ title: \"span_parent_struct\" }),\n  z10.string().optional().describe(\n    \"The parent's span identifier, created by calling `.export()` on a span\"\n  )\n]);\nvar invokeFunctionNonIdArgsSchema = z10.object({\n  input: customTypes.unknown.optional().describe(\n    \"Argument to the function, which can be any JSON serializable value\"\n  ),\n  expected: customTypes.unknown.optional().describe(\"The expected output of the function\"),\n  metadata: z10.record(z10.string(), z10.unknown()).nullish().describe(\"Any relevant metadata\"),\n  messages: z10.array(chatCompletionMessageParamSchema).optional().describe(\n    \"If the function is an LLM, additional messages to pass along to it\"\n  ),\n  parent: invokeParent.describe(\"Options for tracing the function call\"),\n  stream: z10.boolean().nullish().describe(\n    \"Whether to stream the response. If true, results will be returned in the Braintrust SSE format.\"\n  ),\n  mode: streamingModeEnum.nullish().describe(\"The mode format of the returned value (defaults to 'auto')\")\n});\nvar invokeFunctionSchema = functionIdSchema.and(invokeFunctionNonIdArgsSchema).openapi(\"InvokeFunction\");\nvar invokeApiSchema = invokeFunctionNonIdArgsSchema.merge(\n  z10.object({\n    version: z10.string().optional().describe(\"The version of the function\")\n  })\n).describe(\"The request to invoke a function\").openapi(\"InvokeApi\");\nvar runEvalSchema = z10.object({\n  project_id: z10.string().describe(\"Unique identifier for the project to run the eval in\"),\n  data: z10.union([\n    z10.object({\n      dataset_id: z10.string(),\n      _internal_btql: z10.record(z10.string(), z10.unknown()).nullish()\n    }).describe(\"Dataset id\").openapi({ title: \"dataset_id\" }),\n    z10.object({\n      project_name: z10.string(),\n      dataset_name: z10.string(),\n      _internal_btql: z10.record(z10.string(), z10.unknown()).nullish()\n    }).describe(\"Project and dataset name\").openapi({ title: \"project_dataset_name\" }),\n    z10.object({\n      data: z10.array(z10.unknown())\n      // TODO: More specific schema for these?\n    }).describe(\"Dataset rows\").openapi({ title: \"dataset_rows\" })\n  ]).describe(\"The dataset to use\"),\n  task: functionIdSchema.describe(\"The function to evaluate\"),\n  scores: z10.array(functionIdSchema).describe(\"The functions to score the eval on\"),\n  experiment_name: z10.string().optional().describe(\n    \"An optional name for the experiment created by this eval. If it conflicts with an existing experiment, it will be suffixed with a unique identifier.\"\n  ),\n  metadata: z10.record(customTypes.unknown).optional().describe(\n    \"Optional experiment-level metadata to store about the evaluation. You can later use this to slice & dice across experiments.\"\n  ),\n  parent: invokeParent.describe(\"Options for tracing the evaluation\"),\n  stream: z10.boolean().optional().describe(\n    \"Whether to stream the results of the eval. If true, the request will return two events: one to indicate the experiment has started, and another upon completion. If false, the request will return the evaluation's summary upon completion.\"\n  ),\n  trial_count: z10.number().nullish().describe(\n    \"The number of times to run the evaluator per input. This is useful for evaluating applications that have non-deterministic behavior and gives you both a stronger aggregate measure and a sense of the variance in the results.\"\n  ),\n  is_public: z10.boolean().nullish().describe(\"Whether the experiment should be public. Defaults to false.\"),\n  timeout: z10.number().nullish().describe(\n    \"The maximum duration, in milliseconds, to run the evaluation. Defaults to undefined, in which case there is no timeout.\"\n  ),\n  max_concurrency: z10.number().nullish().describe(\n    \"The maximum number of tasks/scorers that will be run concurrently. Defaults to undefined, in which case there is no max concurrency.\"\n  ),\n  base_experiment_name: z10.string().nullish().describe(\n    \"An optional experiment name to use as a base. If specified, the new experiment will be summarized and compared to this experiment.\"\n  ),\n  base_experiment_id: z10.string().nullish().describe(\n    \"An optional experiment id to use as a base. If specified, the new experiment will be summarized and compared to this experiment.\"\n  ),\n  git_metadata_settings: gitMetadataSettingsSchema.nullish().describe(\n    \"Optional settings for collecting git metadata. By default, will collect all git metadata fields allowed in org-level settings.\"\n  ),\n  repo_info: repoInfoSchema.nullish().describe(\n    \"Optionally explicitly specify the git metadata for this experiment. This takes precedence over `gitMetadataSettings` if specified.\"\n  )\n}).openapi(\"RunEval\");\nvar baseSSEEventSchema = z10.object({\n  id: z10.string().optional(),\n  data: z10.string()\n});\nvar sseTextEventSchema = baseSSEEventSchema.merge(\n  z10.object({\n    event: z10.literal(\"text_delta\")\n  })\n);\nvar sseDataEventSchema = baseSSEEventSchema.merge(\n  z10.object({\n    event: z10.literal(\"json_delta\")\n  })\n);\nvar sseErrorEventSchema = baseSSEEventSchema.merge(\n  z10.object({\n    event: z10.literal(\"error\")\n  })\n);\nvar sseProgressEventSchema = baseSSEEventSchema.merge(\n  z10.object({\n    event: z10.literal(\"progress\")\n  })\n);\nvar sseConsoleEventSchema = baseSSEEventSchema.merge(\n  z10.object({\n    event: z10.literal(\"console\")\n  })\n);\nvar sseStartEventSchema = baseSSEEventSchema.omit({ data: true }).merge(\n  z10.object({\n    event: z10.literal(\"start\"),\n    data: z10.literal(\"\")\n  })\n);\nvar sseDoneEventSchema = baseSSEEventSchema.omit({ data: true }).merge(\n  z10.object({\n    event: z10.literal(\"done\"),\n    data: z10.literal(\"\")\n  })\n);\nvar sseMetaEventSchema = baseSSEEventSchema.merge(\n  z10.object({\n    event: z10.literal(\"meta\")\n  })\n);\nvar functionObjectTypeEnum = z10.enum([\"prompt\", \"tool\", \"scorer\", \"task\"]).openapi(\"FunctionObjectType\");\nvar functionFormatEnum = z10.enum([\"llm\", \"code\", \"global\"]).openapi(\"FunctionFormat\");\nvar functionOutputTypeEnum = z10.enum([\"completion\", \"score\", \"any\"]).openapi(\"FunctionOutputType\");\nvar sseProgressEventDataSchema = z10.object({\n  id: z10.string().describe(\"The id of the span this event is for\"),\n  object_type: functionObjectTypeEnum,\n  origin: objectReferenceSchema.nullish().describe(\"The origin of the event\"),\n  format: functionFormatEnum,\n  output_type: functionOutputTypeEnum,\n  name: z10.string(),\n  event: z10.enum([\n    \"text_delta\",\n    \"json_delta\",\n    \"error\",\n    \"console\",\n    \"start\",\n    \"done\",\n    \"progress\"\n  ]),\n  data: z10.string()\n  // This is the text_delta or json_delta\n}).openapi(\"SSEProgressEventData\");\nvar sseConsoleEventDataSchema = z10.object({\n  stream: z10.enum([\"stderr\", \"stdout\"]),\n  message: z10.string()\n});\nvar sseMetaEventDataSchema = z10.object({\n  stop_token: z10.string().describe(\"The token to stop the run\")\n}).openapi(\"SSEMetaEventData\");\nvar callEventSchema = z10.union([\n  sseTextEventSchema.openapi({ title: \"text_delta\" }),\n  sseDataEventSchema.openapi({ title: \"json_delta\" }),\n  sseProgressEventSchema.openapi({ title: \"progress\" }),\n  sseErrorEventSchema.openapi({ title: \"error\" }),\n  sseConsoleEventSchema.openapi({ title: \"console\" }),\n  sseStartEventSchema.openapi({ title: \"start\" }),\n  sseDoneEventSchema.openapi({ title: \"done\" })\n]).openapi(\"CallEvent\");\nvar scoreSchema = z10.union([\n  z10.object({\n    name: z10.string(),\n    score: z10.number().min(0).max(1).nullable().default(null),\n    // Sometimes we get an empty value over the wire\n    metadata: z10.record(customTypes.unknown).optional().transform((data) => data != null ? data : void 0)\n  }),\n  z10.number().min(0).max(1),\n  z10.boolean().transform((b) => b ? 1 : 0),\n  z10.null()\n]).openapi(\"ScorerScore\");\nvar ifExistsEnum = z10.enum([\"error\", \"ignore\", \"replace\"]);\nvar DEFAULT_IF_EXISTS = \"error\";\nvar toolFunctionDefinitionSchema = z10.object({\n  type: z10.literal(\"function\"),\n  function: z10.object({\n    name: z10.string(),\n    description: z10.string().optional(),\n    parameters: z10.record(z10.unknown()).optional(),\n    strict: z10.boolean().optional()\n  })\n});\nvar stopFunctionSchema = z10.object({\n  stop_token: z10.string().describe(\"The token to stop the run\")\n}).openapi(\"StopFunction\");\n\n// typespecs/app_types.ts\nextendZodWithOpenApi8(z11);\nfunction generateBaseTableSchema(objectName, opts) {\n  let nameDescription = `Name of the ${objectName}`;\n  if (opts == null ? void 0 : opts.uniqueName) {\n    nameDescription += `. Within a project, ${objectName} names are unique`;\n  }\n  return z11.object({\n    id: z11.string().uuid().describe(`Unique identifier for the ${objectName}`),\n    project_id: z11.string().uuid().describe(\n      `Unique identifier for the project that the ${objectName} belongs under`\n    ),\n    name: z11.string().describe(nameDescription),\n    description: z11.string().nullish().describe(`Textual description of the ${objectName}`),\n    created: datetimeStringSchema.nullish().describe(`Date of ${objectName} creation`),\n    deleted_at: datetimeStringSchema.nullish().describe(\n      `Date of ${objectName} deletion, or null if the ${objectName} is still active`\n    ),\n    updated_at: datetimeStringSchema.nullish().describe(`Date of last ${objectName} update`),\n    user_id: z11.string().uuid().nullish().describe(`Identifies the user who created the ${objectName}`),\n    metadata: z11.record(customTypes.unknown).nullish().describe(`User-controlled metadata about the ${objectName}`)\n  });\n}\nvar aclObjectTypeEnum = z11.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]).describe(\"The object type that the ACL applies to\").openapi(\"AclObjectType\");\nvar userBaseSchema = generateBaseTableSchema(\"user\");\nvar userSchema = z11.object({\n  id: userBaseSchema.shape.id,\n  given_name: z11.string().nullish().describe(\"Given name of the user\"),\n  family_name: z11.string().nullish().describe(\"Family name of the user\"),\n  email: z11.string().nullish().describe(\"The user's email\"),\n  avatar_url: z11.string().nullish().describe(\"URL of the user's Avatar image\"),\n  created: userBaseSchema.shape.created\n}).openapi(\"User\");\nvar organizationBaseSchema = generateBaseTableSchema(\"organization\");\nvar organizationSchema = z11.object({\n  id: organizationBaseSchema.shape.id,\n  name: organizationBaseSchema.shape.name,\n  api_url: z11.string().nullish(),\n  is_universal_api: z11.boolean().nullish(),\n  proxy_url: z11.string().nullish(),\n  realtime_url: z11.string().nullish(),\n  created: organizationBaseSchema.shape.created\n}).openapi(\"Organization\");\nvar maxOverWindowSchema = z11.object({\n  window_size_days: z11.number().int().positive(),\n  max_value: z11.number().nonnegative()\n}).openapi(\"MaxOverWindow\");\nvar resourcesSchema = z11.object({\n  org_id: organizationSchema.shape.id,\n  forbid_toggle_experiment_public_to_private: z11.boolean().nullish(),\n  num_private_experiment_row_actions: maxOverWindowSchema.nullish(),\n  forbid_insert_datasets: z11.boolean().nullish(),\n  forbid_insert_prompt_sessions: z11.boolean().nullish(),\n  forbid_access_sql_explorer: z11.boolean().nullish(),\n  num_production_log_row_actions: maxOverWindowSchema.nullish(),\n  num_dataset_row_actions: maxOverWindowSchema.nullish()\n}).openapi(\"Resources\");\nvar memberSchema = z11.object({\n  org_id: organizationSchema.shape.id,\n  user_id: userSchema.shape.id\n}).openapi(\"Member\");\nvar aiSecretBaseSchema = generateBaseTableSchema(\"AI secret\");\nvar aiSecretSchema = z11.object({\n  id: aiSecretBaseSchema.shape.id,\n  created: aiSecretBaseSchema.shape.created,\n  updated_at: aiSecretBaseSchema.shape.updated_at,\n  org_id: organizationSchema.shape.id,\n  name: aiSecretBaseSchema.shape.name,\n  type: z11.string().nullish(),\n  metadata: z11.record(customTypes.unknown).nullish(),\n  preview_secret: z11.string().nullish()\n}).openapi(\"AISecret\");\nvar envVarObjectTypeEnum = z11.enum([\"organization\", \"project\", \"function\"]).describe(\"The type of the object the environment variable is scoped for\");\nvar envVarBaseSchema = generateBaseTableSchema(\"environment variable\");\nvar envVarSchema = z11.object({\n  id: envVarBaseSchema.shape.id,\n  object_type: envVarObjectTypeEnum,\n  object_id: z11.string().uuid().describe(\"The id of the object the environment variable is scoped for\"),\n  name: z11.string().describe(\"The name of the environment variable\"),\n  created: envVarBaseSchema.shape.created,\n  used: datetimeStringSchema.nullish().describe(`Date the environment variable was last used`)\n}).openapi(\"EnvVar\");\nvar customColumnBaseSchema = generateBaseTableSchema(\"custom columns\");\nvar customColumnSchema = z11.object({\n  id: customColumnBaseSchema.shape.id,\n  object_type: aclObjectTypeEnum,\n  object_id: z11.string().uuid().describe(\"The id of the object the custom column is scoped for\"),\n  subtype: aclObjectTypeEnum.nullable(),\n  name: z11.string().describe(\"The name of the custom column\"),\n  expr: z11.string().describe(\n    \"The expression used to extract the value for the custom column\"\n  ),\n  created: customColumnBaseSchema.shape.created\n}).openapi(\"CustomColumn\");\nvar apiKeyBaseSchema = generateBaseTableSchema(\"api key\");\nvar apiKeySchema = z11.object({\n  id: apiKeyBaseSchema.shape.id,\n  created: apiKeyBaseSchema.shape.created,\n  name: apiKeyBaseSchema.shape.name,\n  preview_name: z11.string(),\n  user_id: userSchema.shape.id.nullish(),\n  org_id: organizationSchema.shape.id.nullish()\n}).openapi(\"ApiKey\");\nvar spanFieldOrderItem = z11.object({\n  object_type: z11.string(),\n  column_id: z11.string(),\n  position: z11.string(),\n  layout: z11.literal(\"full\").or(z11.literal(\"two_column\")).nullish()\n});\nvar projectSettingsSchema = z11.object({\n  comparison_key: z11.string().nullish().describe(\"The key used to join two experiments (defaults to `input`)\"),\n  baseline_experiment_id: z11.string().uuid().nullish().describe(\n    \"The id of the experiment to use as the default baseline for comparisons\"\n  ),\n  spanFieldOrder: z11.array(spanFieldOrderItem).nullish().describe(\"The order of the fields to display in the trace view\")\n}).openapi(\"ProjectSettings\");\nvar projectBaseSchema = generateBaseTableSchema(\"project\");\nvar projectSchema = z11.object({\n  id: projectBaseSchema.shape.id,\n  org_id: z11.string().uuid().describe(\n    \"Unique id for the organization that the project belongs under\"\n  ),\n  name: projectBaseSchema.shape.name,\n  created: projectBaseSchema.shape.created,\n  deleted_at: projectBaseSchema.shape.deleted_at,\n  user_id: projectBaseSchema.shape.user_id,\n  settings: projectSettingsSchema.nullish()\n}).openapi(\"Project\");\nvar datasetBaseSchema = generateBaseTableSchema(\"dataset\", {\n  uniqueName: true\n});\nvar datasetSchema = z11.object({\n  id: datasetBaseSchema.shape.id,\n  project_id: datasetBaseSchema.shape.project_id,\n  name: datasetBaseSchema.shape.name,\n  description: datasetBaseSchema.shape.description,\n  created: datasetBaseSchema.shape.created,\n  deleted_at: datasetBaseSchema.shape.deleted_at,\n  user_id: datasetBaseSchema.shape.user_id,\n  metadata: datasetBaseSchema.shape.metadata\n}).openapi(\"Dataset\");\nvar promptLogIdLiteralSchema = z11.literal(\"p\").describe(\"A literal 'p' which identifies the object as a project prompt\");\nvar playgroundLogsLogIdLiteralSchema = z11.literal(\"x\").describe(\"A literal 'x' which identifies the object as a playground log\");\nvar promptBaseSchema = generateBaseTableSchema(\"prompt\");\nvar promptSchemaObject = z11.object({\n  id: promptBaseSchema.shape.id,\n  // This has to be copy/pasted because zod blows up when there are circular dependencies\n  _xact_id: z11.string().describe(\n    `The transaction id of an event is unique to the network operation that processed the event insertion. Transaction ids are monotonically increasing over time and can be used to retrieve a versioned snapshot of the prompt (see the \\`version\\` parameter)`\n  ),\n  project_id: promptBaseSchema.shape.project_id,\n  log_id: promptLogIdLiteralSchema,\n  org_id: organizationSchema.shape.id,\n  name: promptBaseSchema.shape.name,\n  slug: z11.string().describe(\"Unique identifier for the prompt\"),\n  description: promptBaseSchema.shape.description,\n  created: promptBaseSchema.shape.created,\n  prompt_data: promptDataSchema.nullish().describe(\"The prompt, model, and its parameters\"),\n  tags: z11.array(z11.string()).nullish().describe(\"A list of tags for the prompt\"),\n  metadata: promptBaseSchema.shape.metadata,\n  // An empty (unspecified) function_type is equivalent to \"task\".\n  function_type: functionTypeEnum.nullish()\n});\nvar promptSchema = promptSchemaObject.openapi(\"Prompt\");\nvar codeBundleSchema = z11.object({\n  runtime_context: runtimeContextSchema,\n  location: z11.union([\n    z11.object({\n      type: z11.literal(\"experiment\"),\n      eval_name: z11.string(),\n      position: z11.union([\n        z11.object({ type: z11.literal(\"task\") }),\n        z11.object({\n          type: z11.literal(\"scorer\"),\n          index: z11.number().int().nonnegative()\n        }).openapi({ title: \"scorer\" })\n      ])\n    }).openapi({ title: \"experiment\" }),\n    z11.object({\n      type: z11.literal(\"function\"),\n      index: z11.number().int().nonnegative()\n    }).openapi({ title: \"function\" })\n  ]),\n  bundle_id: z11.string(),\n  preview: z11.string().nullish().describe(\"A preview of the code\")\n}).openapi(\"CodeBundle\");\nvar functionDataSchema = z11.union([\n  z11.object({\n    type: z11.literal(\"prompt\")\n    // For backwards compatibility reasons, the prompt definition is hoisted out and stored\n    // in the outer object\n  }).openapi({ title: \"prompt\" }),\n  z11.object({\n    type: z11.literal(\"code\"),\n    data: z11.union([\n      z11.object({\n        type: z11.literal(\"bundle\")\n      }).and(codeBundleSchema).openapi({ title: \"bundle\" }),\n      z11.object({\n        type: z11.literal(\"inline\"),\n        runtime_context: runtimeContextSchema,\n        code: z11.string()\n      }).openapi({ title: \"inline\" })\n    ])\n  }).openapi({ title: \"code\" }),\n  z11.object({\n    type: z11.literal(\"global\"),\n    name: z11.string()\n  }).openapi({ title: \"global\" })\n]).openapi(\"FunctionData\");\nvar functionSchema2 = promptSchemaObject.merge(\n  z11.object({\n    function_data: functionDataSchema,\n    origin: z11.object({\n      object_type: aclObjectTypeEnum,\n      object_id: z11.string().uuid().describe(\"Id of the object the function is originating from\"),\n      internal: z11.boolean().nullish().describe(\n        \"The function exists for internal purposes and should not be displayed in the list of functions.\"\n      )\n    }).nullish(),\n    function_schema: z11.object({\n      parameters: customTypes.unknown,\n      returns: customTypes.unknown.optional()\n    }).nullish().describe(\"JSON schema for the function's parameters and return type\")\n  })\n).openapi(\"Function\");\nvar experimentBaseSchema = generateBaseTableSchema(\"experiment\", {\n  uniqueName: true\n});\nvar experimentSchema = z11.object({\n  id: experimentBaseSchema.shape.id,\n  project_id: experimentBaseSchema.shape.project_id,\n  name: experimentBaseSchema.shape.name,\n  description: experimentBaseSchema.shape.description,\n  created: experimentBaseSchema.shape.created,\n  repo_info: repoInfoSchema.nullish(),\n  commit: z11.string().nullish().describe(\"Commit, taken directly from `repo_info.commit`\"),\n  base_exp_id: z11.string().uuid().nullish().describe(\n    \"Id of default base experiment to compare against when viewing this experiment\"\n  ),\n  deleted_at: experimentBaseSchema.shape.deleted_at,\n  dataset_id: z11.string().uuid().nullish().describe(\n    \"Identifier of the linked dataset, or null if the experiment is not linked to a dataset\"\n  ),\n  dataset_version: z11.string().nullish().describe(\n    \"Version number of the linked dataset the experiment was run against. This can be used to reproduce the experiment after the dataset has been modified.\"\n  ),\n  public: z11.boolean().describe(\n    \"Whether or not the experiment is public. Public experiments can be viewed by anybody inside or outside the organization\"\n  ),\n  user_id: experimentBaseSchema.shape.user_id,\n  metadata: experimentBaseSchema.shape.metadata\n}).openapi(\"Experiment\");\nvar promptSessionBaseSchema = generateBaseTableSchema(\"promptSession\", {\n  uniqueName: true\n});\nvar promptSessionSchema = z11.object({\n  id: promptSessionBaseSchema.shape.id,\n  name: promptSessionBaseSchema.shape.name,\n  description: promptSessionBaseSchema.shape.description,\n  created: promptSessionBaseSchema.shape.created,\n  deleted_at: promptSessionBaseSchema.shape.deleted_at,\n  user_id: promptSessionBaseSchema.shape.user_id,\n  project_id: promptSessionBaseSchema.shape.project_id,\n  org_id: organizationSchema.shape.id.nullish().describe(\n    \"This field is deprecated and will be removed in a future revision\"\n  )\n}).openapi(\"PromptSession\");\nvar permissionEnum = z11.enum([\n  \"create\",\n  \"read\",\n  \"update\",\n  \"delete\",\n  \"create_acls\",\n  \"read_acls\",\n  \"update_acls\",\n  \"delete_acls\"\n]).describe(\n  [\n    \"Each permission permits a certain type of operation on an object in the system\",\n    \"Permissions can be assigned to to objects on an individual basis, or grouped into roles\"\n  ].join(\"\\n\\n\")\n).openapi(\"Permission\");\nvar roleBaseSchema = generateBaseTableSchema(\"role\");\nvar roleSchema = z11.object({\n  id: roleBaseSchema.shape.id,\n  org_id: z11.string().uuid().nullish().describe(\n    [\n      \"Unique id for the organization that the role belongs under\",\n      \"A null org_id indicates a system role, which may be assigned to anybody and inherited by any other role, but cannot be edited.\",\n      \"It is forbidden to change the org after creating a role\"\n    ].join(\"\\n\\n\")\n  ),\n  user_id: roleBaseSchema.shape.user_id,\n  created: roleBaseSchema.shape.created,\n  name: roleBaseSchema.shape.name,\n  description: roleBaseSchema.shape.description,\n  deleted_at: roleBaseSchema.shape.deleted_at,\n  member_permissions: z11.array(\n    z11.object({\n      permission: permissionEnum,\n      restrict_object_type: aclObjectTypeEnum.nullish()\n    })\n  ).nullish().describe(\n    \"(permission, restrict_object_type) tuples which belong to this role\"\n  ),\n  member_roles: z11.array(z11.string().uuid()).nullish().describe(\n    [\n      \"Ids of the roles this role inherits from\",\n      \"An inheriting role has all the permissions contained in its member roles, as well as all of their inherited permissions\"\n    ].join(\"\\n\\n\")\n  )\n}).describe(\n  [\n    \"A role is a collection of permissions which can be granted as part of an ACL\",\n    \"Roles can consist of individual permissions, as well as a set of roles they inherit from\"\n  ].join(\"\\n\\n\")\n).openapi(\"Role\");\nvar groupBaseSchema = generateBaseTableSchema(\"group\");\nvar groupSchema = z11.object({\n  id: groupBaseSchema.shape.id,\n  org_id: z11.string().uuid().describe(\n    [\n      \"Unique id for the organization that the group belongs under\",\n      \"It is forbidden to change the org after creating a group\"\n    ].join(\"\\n\\n\")\n  ),\n  user_id: groupBaseSchema.shape.user_id,\n  created: groupBaseSchema.shape.created,\n  name: groupBaseSchema.shape.name,\n  description: groupBaseSchema.shape.description,\n  deleted_at: groupBaseSchema.shape.deleted_at,\n  member_users: z11.array(z11.string().uuid()).nullish().describe(\"Ids of users which belong to this group\"),\n  member_groups: z11.array(z11.string().uuid()).nullish().describe(\n    [\n      \"Ids of the groups this group inherits from\",\n      \"An inheriting group has all the users contained in its member groups, as well as all of their inherited users\"\n    ].join(\"\\n\\n\")\n  )\n}).describe(\n  [\n    \"A group is a collection of users which can be assigned an ACL\",\n    \"Groups can consist of individual users, as well as a set of groups they inherit from\"\n  ].join(\"\\n\\n\")\n).openapi(\"Group\");\nvar projectScoreTypeEnum = z11.enum([\n  \"slider\",\n  \"categorical\",\n  \"weighted\",\n  \"minimum\",\n  \"maximum\",\n  \"online\",\n  \"free-form\"\n]).describe(\"The type of the configured score\").openapi(\"ProjectScoreType\");\nvar projectScoreCategory = z11.object({\n  name: z11.string().describe(\"Name of the category\"),\n  value: z11.number().describe(\n    \"Numerical value of the category. Must be between 0 and 1, inclusive\"\n  )\n}).describe(\"For categorical-type project scores, defines a single category\").openapi(\"ProjectScoreCategory\");\nvar onlineScoreConfigSchema = z11.object({\n  sampling_rate: z11.number().min(0).max(1).describe(\"The sampling rate for online scoring\"),\n  scorers: z11.array(savedFunctionIdSchema).describe(\"The list of scorers to use for online scoring\"),\n  apply_to_root_span: z11.boolean().nullish().describe(\n    \"Whether to trigger online scoring on the root span of each trace\"\n  ),\n  apply_to_span_names: z11.string().array().nullish().describe(\"Trigger online scoring on any spans with a name in this list\")\n}).refine((val) => {\n  var _a2;\n  return val.apply_to_root_span || ((_a2 = val.apply_to_span_names) == null ? void 0 : _a2.length);\n}, {\n  message: \"Online scoring rule does not apply to any rows\"\n}).openapi(\"OnlineScoreConfig\");\nvar projectScoreBaseSchema = generateBaseTableSchema(\"project score\");\nvar projectScoreSchema = z11.object({\n  id: projectScoreBaseSchema.shape.id,\n  project_id: projectScoreBaseSchema.shape.project_id,\n  user_id: projectScoreBaseSchema.shape.user_id.unwrap().unwrap(),\n  created: projectScoreBaseSchema.shape.created,\n  name: projectScoreBaseSchema.shape.name,\n  description: projectScoreBaseSchema.shape.description,\n  score_type: projectScoreTypeEnum,\n  categories: z11.union([\n    projectScoreCategory.array().describe(\n      \"For categorical-type project scores, the list of all categories\"\n    ).openapi({ title: \"categorical\" }),\n    z11.record(z11.number()).describe(\n      \"For weighted-type project scores, the weights of each score\"\n    ).openapi({ title: \"weighted\" }),\n    z11.array(z11.string()).describe(\n      \"For minimum-type project scores, the list of included scores\"\n    ).openapi({ title: \"minimum\" })\n  ]).nullish().openapi(\"ProjectScoreCategories\"),\n  config: z11.object({\n    multi_select: z11.boolean().nullish(),\n    destination: z11.string().nullish(),\n    online: onlineScoreConfigSchema.nullish()\n  }).nullish().openapi(\"ProjectScoreConfig\"),\n  position: z11.string().nullish().describe(\n    \"An optional LexoRank-based string that sets the sort position for the score in the UI\"\n  )\n}).describe(\n  \"A project score is a user-configured score, which can be manually-labeled through the UI\"\n).openapi(\"ProjectScore\");\nvar projectTagBaseSchema = generateBaseTableSchema(\"project tag\");\nvar projectTagSchema = z11.object({\n  id: projectTagBaseSchema.shape.id,\n  project_id: projectTagBaseSchema.shape.project_id,\n  user_id: projectTagBaseSchema.shape.user_id.unwrap().unwrap(),\n  created: projectTagBaseSchema.shape.created,\n  name: projectTagBaseSchema.shape.name,\n  description: projectTagBaseSchema.shape.description,\n  color: z11.string().nullish().describe(\"Color of the tag for the UI\")\n}).describe(\n  \"A project tag is a user-configured tag for tracking and filtering your experiments, logs, and other data\"\n).openapi(\"ProjectTag\");\nvar spanIframeBaseSchema = generateBaseTableSchema(\"span iframe\");\nvar spanIframeSchema = z11.object({\n  id: spanIframeBaseSchema.shape.id,\n  project_id: spanIframeBaseSchema.shape.project_id,\n  user_id: spanIframeBaseSchema.shape.user_id,\n  created: spanIframeBaseSchema.shape.created,\n  deleted_at: spanIframeBaseSchema.shape.deleted_at,\n  name: spanIframeBaseSchema.shape.name,\n  description: spanIframeBaseSchema.shape.description,\n  url: z11.string().describe(\"URL to embed the project viewer in an iframe\"),\n  post_message: z11.boolean().nullish().describe(\n    \"Whether to post messages to the iframe containing the span's data. This is useful when you want to render more data than fits in the URL.\"\n  )\n}).openapi(\"SpanIFrame\");\nvar viewBaseSchema = generateBaseTableSchema(\"view\");\nvar viewSchema = z11.object({\n  id: viewBaseSchema.shape.id,\n  object_type: aclObjectTypeEnum,\n  object_id: z11.string().uuid().describe(\"The id of the object the view applies to\"),\n  view_type: viewTypeEnum,\n  name: viewBaseSchema.shape.name,\n  created: viewBaseSchema.shape.created,\n  view_data: viewDataSchema.nullish().describe(\"The view definition\"),\n  options: viewOptionsSchema.nullish().describe(\"Options for the view in the app\"),\n  user_id: viewBaseSchema.shape.user_id,\n  deleted_at: roleBaseSchema.shape.deleted_at\n}).openapi(\"View\");\nvar aclBaseSchema = generateBaseTableSchema(\"acl\");\nvar aclSchema = z11.object({\n  id: aclBaseSchema.shape.id,\n  object_type: aclObjectTypeEnum,\n  object_id: z11.string().uuid().describe(\"The id of the object the ACL applies to\"),\n  user_id: z11.string().uuid().nullish().describe(\n    \"Id of the user the ACL applies to. Exactly one of `user_id` and `group_id` will be provided\"\n  ),\n  group_id: z11.string().uuid().nullish().describe(\n    \"Id of the group the ACL applies to. Exactly one of `user_id` and `group_id` will be provided\"\n  ),\n  permission: permissionEnum.nullish().describe(\n    \"Permission the ACL grants. Exactly one of `permission` and `role_id` will be provided\"\n  ),\n  restrict_object_type: aclObjectTypeEnum.nullish().describe(\n    \"When setting a permission directly, optionally restricts the permission grant to just the specified object type. Cannot be set alongside a `role_id`.\"\n  ),\n  role_id: z11.string().uuid().nullish().describe(\n    \"Id of the role the ACL grants. Exactly one of `permission` and `role_id` will be provided\"\n  ),\n  _object_org_id: z11.string().uuid().describe(\"The organization the ACL's referred object belongs to\"),\n  created: aclBaseSchema.shape.created\n}).describe(\n  [\n    \"An ACL grants a certain permission or role to a certain user or group on an object.\",\n    \"ACLs are inherited across the object hierarchy. So for example, if a user has read permissions on a project, they will also have read permissions on any experiment, dataset, etc. created within that project.\",\n    \"To restrict a grant to a particular sub-object, you may specify `restrict_object_type` in the ACL, as part of a direct permission grant or as part of a role.\"\n  ].join(\"\\n\\n\")\n).openapi(\"Acl\");\nvar appLimitParamSchema = z11.coerce.number().int().nonnegative().describe(\"Limit the number of objects to return\").openapi(\"AppLimit\");\nfunction generateBaseTableOpSchema(objectName) {\n  return z11.object({\n    org_name: z11.string().nullish().describe(\n      `For nearly all users, this parameter should be unnecessary. But in the rare case that your API key belongs to multiple organizations, you may specify the name of the organization the ${objectName} belongs in.`\n    )\n  });\n}\nvar startingAfterSchema = z11.string().uuid().describe(\n  [\n    \"Pagination cursor id.\",\n    \"For example, if the final item in the last page you fetched had an id of `foo`, pass `starting_after=foo` to fetch the next page. Note: you may only pass one of `starting_after` and `ending_before`\"\n  ].join(\"\\n\\n\")\n).openapi(\"StartingAfter\");\nvar endingBeforeSchema = z11.string().uuid().describe(\n  [\n    \"Pagination cursor id.\",\n    \"For example, if the initial item in the last page you fetched had an id of `foo`, pass `ending_before=foo` to fetch the previous page. Note: you may only pass one of `starting_after` and `ending_before`\"\n  ].join(\"\\n\\n\")\n).openapi(\"EndingBefore\");\nfunction makeObjectIdsFilterSchema(objectName) {\n  const item = z11.string().uuid();\n  return z11.union([item, item.array()]).describe(\n    `Filter search results to a particular set of ${objectName} IDs. To specify a list of IDs, include the query param multiple times`\n  ).openapi(`${objectName}IdsFilter`);\n}\nfunction makeNonempty(s) {\n  var _a2;\n  return ((_a2 = s.minLength) != null ? _a2 : 0) > 0 ? s : s.min(1);\n}\nvar createProjectBaseSchema = generateBaseTableOpSchema(\"project\");\nvar createProjectSchema = z11.object({\n  name: makeNonempty(projectSchema.shape.name),\n  org_name: createProjectBaseSchema.shape.org_name\n}).openapi(\"CreateProject\");\nvar patchProjectSchema = z11.object({\n  name: projectSchema.shape.name.nullish(),\n  settings: projectSchema.shape.settings.describe(\n    \"Project settings. Patch operations replace all settings, so make sure you include all settings you want to keep.\"\n  ).nullish()\n}).openapi(\"PatchProject\");\nvar createExperimentSchema = z11.object({\n  project_id: experimentSchema.shape.project_id,\n  name: makeNonempty(experimentSchema.shape.name).nullish(),\n  description: experimentSchema.shape.description,\n  repo_info: experimentSchema.shape.repo_info,\n  base_exp_id: experimentSchema.shape.base_exp_id,\n  dataset_id: experimentSchema.shape.dataset_id,\n  dataset_version: experimentSchema.shape.dataset_version,\n  public: experimentSchema.shape.public.nullish(),\n  metadata: experimentSchema.shape.metadata,\n  ensure_new: z11.boolean().nullish().describe(\n    \"Normally, creating an experiment with the same name as an existing experiment will return the existing one un-modified. But if `ensure_new` is true, registration will generate a new experiment with a unique name in case of a conflict.\"\n  )\n}).openapi(\"CreateExperiment\");\nvar patchExperimentSchema = createExperimentSchema.omit({ project_id: true, ensure_new: true }).extend({ name: experimentSchema.shape.name.nullish() }).openapi(\"PatchExperiment\");\nvar createDatasetSchema = z11.object({\n  project_id: datasetSchema.shape.project_id,\n  name: makeNonempty(datasetSchema.shape.name),\n  description: datasetSchema.shape.description,\n  metadata: datasetSchema.shape.metadata\n}).openapi(\"CreateDataset\");\nvar patchDatasetSchema = z11.object({\n  name: datasetSchema.shape.name.nullish(),\n  description: datasetSchema.shape.description,\n  metadata: datasetSchema.shape.metadata\n}).openapi(\"PatchDataset\");\nvar createPromptSchema = promptSchema.omit({\n  id: true,\n  _xact_id: true,\n  org_id: true,\n  log_id: true,\n  created: true,\n  metadata: true\n}).extend({\n  name: makeNonempty(promptSchema.shape.name),\n  slug: makeNonempty(promptSchema.shape.slug)\n}).openapi(\"CreatePrompt\");\nvar createFunctionSchema = functionSchema2.omit({\n  id: true,\n  _xact_id: true,\n  org_id: true,\n  log_id: true,\n  created: true,\n  metadata: true\n}).extend({\n  name: makeNonempty(promptSchema.shape.name),\n  slug: makeNonempty(promptSchema.shape.slug)\n}).openapi(\"CreateFunction\");\nvar patchPromptSchema = z11.object({\n  name: promptSchema.shape.name.nullish(),\n  slug: promptSchema.shape.slug.nullish(),\n  description: promptSchema.shape.description.nullish(),\n  prompt_data: promptSchema.shape.prompt_data.nullish(),\n  tags: promptSchema.shape.tags.nullish()\n}).openapi(\"PatchPrompt\");\nvar patchFunctionSchema = z11.object({\n  name: functionSchema2.shape.name.nullish(),\n  description: functionSchema2.shape.description.nullish(),\n  prompt_data: functionSchema2.shape.prompt_data.nullish(),\n  function_data: functionSchema2.shape.function_data.nullish().openapi(\"FunctionDataNullish\"),\n  tags: functionSchema2.shape.tags.nullish()\n}).openapi(\"PatchFunction\");\nvar createRoleBaseSchema = generateBaseTableOpSchema(\"role\");\nvar createRoleSchema = z11.object({\n  name: makeNonempty(roleSchema.shape.name),\n  description: roleSchema.shape.description,\n  member_permissions: roleSchema.shape.member_permissions,\n  member_roles: roleSchema.shape.member_roles,\n  org_name: createRoleBaseSchema.shape.org_name\n}).openapi(\"CreateRole\");\nvar patchRoleSchema = createRoleSchema.omit({\n  name: true,\n  org_name: true,\n  member_permissions: true,\n  member_roles: true\n}).merge(\n  z11.object({\n    name: createRoleSchema.shape.name.nullish(),\n    add_member_permissions: roleSchema.shape.member_permissions.nullish().describe(\"A list of permissions to add to the role\"),\n    remove_member_permissions: roleSchema.shape.member_permissions.nullish().describe(\"A list of permissions to remove from the role\"),\n    add_member_roles: roleSchema.shape.member_roles.nullish().describe(\n      \"A list of role IDs to add to the role's inheriting-from set\"\n    ),\n    remove_member_roles: roleSchema.shape.member_roles.nullish().describe(\n      \"A list of role IDs to remove from the role's inheriting-from set\"\n    )\n  })\n).openapi(\"PatchRole\");\nvar createGroupBaseSchema = generateBaseTableOpSchema(\"group\");\nvar createGroupSchema = z11.object({\n  name: makeNonempty(groupSchema.shape.name),\n  description: groupSchema.shape.description,\n  member_users: groupSchema.shape.member_users,\n  member_groups: groupSchema.shape.member_groups,\n  org_name: createGroupBaseSchema.shape.org_name\n}).openapi(\"CreateGroup\");\nvar patchGroupSchema = createGroupSchema.omit({ name: true, org_name: true, member_users: true, member_groups: true }).merge(\n  z11.object({\n    name: createGroupSchema.shape.name.nullish(),\n    add_member_users: groupSchema.shape.member_users.nullish().describe(\"A list of user IDs to add to the group\"),\n    remove_member_users: groupSchema.shape.member_users.nullish().describe(\"A list of user IDs to remove from the group\"),\n    add_member_groups: groupSchema.shape.member_groups.nullish().describe(\n      \"A list of group IDs to add to the group's inheriting-from set\"\n    ),\n    remove_member_groups: groupSchema.shape.member_groups.nullish().describe(\n      \"A list of group IDs to remove from the group's inheriting-from set\"\n    )\n  })\n).openapi(\"PatchGroup\");\nvar aclItemSchema = aclSchema.omit({\n  id: true,\n  created: true,\n  _object_org_id: true\n}).openapi(\"AclItem\");\nvar aclBatchUpdateRequestSchema = z11.object({\n  add_acls: aclItemSchema.array().nullish(),\n  remove_acls: aclItemSchema.array().nullish()\n}).openapi(\"AclBatchUpdateRequest\");\nvar aclBatchUpdateResponseSchema = z11.object({\n  added_acls: aclSchema.array(),\n  removed_acls: aclSchema.array()\n}).openapi(\"AclBatchUpdateResponse\");\nvar createProjectScoreSchema = projectScoreSchema.pick({\n  project_id: true,\n  name: true,\n  description: true,\n  score_type: true,\n  categories: true,\n  config: true\n}).openapi(\"CreateProjectScore\");\nvar patchProjectScoreSchema = objectNullish(createProjectScoreSchema).omit({ project_id: true }).openapi(\"PatchProjectScore\");\nvar createProjectTagSchema = z11.object({\n  project_id: projectTagSchema.shape.project_id,\n  name: projectTagSchema.shape.name,\n  description: projectTagSchema.shape.description,\n  color: projectTagSchema.shape.color\n}).openapi(\"CreateProjectTag\");\nvar patchProjectTagSchema = z11.object({\n  name: projectTagSchema.shape.name.nullish(),\n  description: projectTagSchema.shape.description,\n  color: projectTagSchema.shape.color\n}).openapi(\"PatchProjectTag\");\nvar createSpanIframeSchema = spanIframeSchema.omit({\n  id: true,\n  created: true,\n  deleted_at: true,\n  user_id: true\n}).openapi(\"CreateSpanIFrame\");\nvar patchSpanIframeSchema = z11.object({\n  name: spanIframeSchema.shape.name.nullish(),\n  url: spanIframeSchema.shape.url.nullish(),\n  post_message: spanIframeSchema.shape.post_message.nullish(),\n  description: spanIframeSchema.shape.description.nullish()\n}).openapi(\"PatchSpanIFrame\");\nvar createViewSchema = viewSchema.omit({\n  id: true,\n  created: true\n}).openapi(\"CreateView\");\nvar patchViewSchema = z11.object({\n  object_type: viewSchema.shape.object_type,\n  object_id: viewSchema.shape.object_id,\n  view_type: viewSchema.shape.view_type.nullish(),\n  name: viewSchema.shape.name.nullish(),\n  view_data: viewSchema.shape.view_data,\n  options: viewSchema.shape.options,\n  user_id: viewSchema.shape.user_id\n}).openapi(\"PatchView\");\nvar deleteViewSchema = z11.object({\n  object_type: viewSchema.shape.object_type,\n  object_id: viewSchema.shape.object_id\n}).openapi(\"DeleteView\");\nvar patchOrganizationSchema = z11.object({\n  name: organizationSchema.shape.name.nullish(),\n  api_url: organizationSchema.shape.api_url.nullish(),\n  is_universal_api: organizationSchema.shape.is_universal_api.nullish(),\n  proxy_url: organizationSchema.shape.proxy_url.nullish(),\n  realtime_url: organizationSchema.shape.realtime_url.nullish()\n}).openapi(\"PatchOrganization\");\nvar createApiKeyBaseSchema = generateBaseTableOpSchema(\"API key\");\nvar createApiKeySchema = z11.object({\n  name: z11.string().describe(\"Name of the api key. Does not have to be unique\"),\n  org_name: createApiKeyBaseSchema.shape.org_name\n});\nvar createApiKeyOutputSchema = apiKeySchema.merge(\n  z11.object({\n    key: z11.string().describe(\"The raw API key. It will only be exposed this one time\")\n  })\n).openapi(\"CreateApiKeyOutput\");\nvar organizationMembersSchema = z11.object({\n  members: userSchema.pick({ id: true, email: true }).array()\n}).openapi(\"OrganizationMembers\");\nvar patchOrganizationMembersSchema = z11.object({\n  invite_users: z11.object({\n    ids: userSchema.shape.id.array().nullish().describe(\"Ids of existing users to invite\"),\n    emails: userSchema.shape.email.unwrap().unwrap().array().nullish().describe(\"Emails of users to invite\"),\n    send_invite_emails: z11.boolean().nullish().describe(\n      \"If true, send invite emails to the users who wore actually added\"\n    ),\n    group_ids: groupSchema.shape.id.array().nullish().describe(\n      \"Optional list of group ids to add newly-invited users to.\"\n    ),\n    group_names: groupSchema.shape.name.array().nullish().describe(\n      \"Optional list of group names to add newly-invited users to.\"\n    ),\n    group_id: groupSchema.shape.id.nullish().describe(\"Singular form of group_ids\"),\n    group_name: groupSchema.shape.name.nullish().describe(\"Singular form of group_names\")\n  }).nullish().describe(\"Users to invite to the organization\"),\n  remove_users: z11.object({\n    ids: userSchema.shape.id.array().nullish().describe(\"Ids of users to remove\"),\n    emails: userSchema.shape.email.unwrap().unwrap().array().nullish().describe(\"Emails of users to remove\")\n  }).nullish().describe(\"Users to remove from the organization\"),\n  org_name: z11.string().nullish().describe(\n    `For nearly all users, this parameter should be unnecessary. But in the rare case that your API key belongs to multiple organizations, or in case you want to explicitly assert the organization you are modifying, you may specify the name of the organization.`\n  ),\n  org_id: z11.string().nullish().describe(\n    `For nearly all users, this parameter should be unnecessary. But in the rare case that your API key belongs to multiple organizations, or in case you want to explicitly assert the organization you are modifying, you may specify the id of the organization.`\n  )\n}).openapi(\"PatchOrganizationMembers\");\nvar patchOrganizationMembersOutputSchema = z11.object({\n  status: z11.literal(\"success\"),\n  org_id: z11.string().describe(\"The id of the org that was modified.\"),\n  send_email_error: z11.string().nullish().describe(\n    \"If invite emails failed to send for some reason, the patch operation will still complete, but we will return an error message here\"\n  )\n}).openapi(\"PatchOrganizationMembersOutput\");\nvar createAISecretBaseSchema = generateBaseTableOpSchema(\"AI Secret\");\nvar createAISecretSchema = z11.object({\n  name: aiSecretSchema.shape.name,\n  type: aiSecretSchema.shape.type,\n  metadata: aiSecretSchema.shape.metadata,\n  secret: z11.string().nullish().describe(\n    \"Secret value. If omitted in a PUT request, the existing secret value will be left intact, not replaced with null.\"\n  ),\n  org_name: createAISecretBaseSchema.shape.org_name\n}).openapi(\"CreateAISecret\");\nvar deleteAISecretSchema = z11.object({\n  name: aiSecretSchema.shape.name,\n  org_name: createAISecretBaseSchema.shape.org_name\n}).openapi(\"DeleteAISecret\");\nvar patchAISecretSchema = z11.object({\n  name: aiSecretSchema.shape.name.nullish(),\n  type: aiSecretSchema.shape.type,\n  metadata: aiSecretSchema.shape.metadata,\n  secret: z11.string().nullish()\n}).openapi(\"PatchAISecret\");\nvar createEnvVarSchema = envVarSchema.pick({ object_type: true, object_id: true, name: true }).extend({\n  value: z11.string().nullish().describe(\n    \"The value of the environment variable. Will be encrypted at rest.\"\n  )\n});\nvar patchEnvVarSchema = envVarSchema.pick({ name: true }).extend({\n  value: z11.string().nullish().describe(\n    \"The value of the environment variable. Will be encrypted at rest.\"\n  )\n});\nvar apiSpecObjectSchemas = {\n  experiment: {\n    object: experimentSchema,\n    create: createExperimentSchema,\n    patch_id: patchExperimentSchema\n  },\n  dataset: {\n    object: datasetSchema,\n    create: createDatasetSchema,\n    patch_id: patchDatasetSchema\n  },\n  project: {\n    object: projectSchema,\n    create: createProjectSchema,\n    patch_id: patchProjectSchema\n  },\n  prompt: {\n    object: promptSchema,\n    create: createPromptSchema,\n    patch_id: patchPromptSchema\n  },\n  function: {\n    object: functionSchema2,\n    create: createFunctionSchema,\n    patch_id: patchFunctionSchema\n  },\n  role: {\n    object: roleSchema,\n    create: createRoleSchema,\n    patch_id: patchRoleSchema\n  },\n  group: {\n    object: groupSchema,\n    create: createGroupSchema,\n    patch_id: patchGroupSchema\n  },\n  acl: {\n    object: aclSchema,\n    create: aclItemSchema,\n    delete: aclItemSchema\n  },\n  user: {\n    object: userSchema\n  },\n  prompt_session: {},\n  project_score: {\n    object: projectScoreSchema,\n    create: createProjectScoreSchema,\n    patch_id: patchProjectScoreSchema\n  },\n  project_tag: {\n    object: projectTagSchema,\n    create: createProjectTagSchema,\n    patch_id: patchProjectTagSchema\n  },\n  span_iframe: {\n    object: spanIframeSchema,\n    create: createSpanIframeSchema,\n    patch_id: patchSpanIframeSchema\n  },\n  view: {\n    object: viewSchema,\n    delete_id: deleteViewSchema,\n    create: createViewSchema,\n    patch_id: patchViewSchema\n  },\n  organization: {\n    object: organizationSchema,\n    patch_id: patchOrganizationSchema\n  },\n  api_key: {\n    object: apiKeySchema,\n    create: createApiKeySchema\n  },\n  ai_secret: {\n    object: aiSecretSchema,\n    create: createAISecretSchema,\n    delete: deleteAISecretSchema,\n    patch_id: patchAISecretSchema\n  },\n  env_var: {\n    object: envVarSchema,\n    create: createEnvVarSchema,\n    patch_id: patchEnvVarSchema\n  }\n};\n\n// src/string_util.ts\nfunction capitalize(s, sep) {\n  const items = sep ? s.split(sep) : [s];\n  return items.map((s2) => s2 ? s2.charAt(0).toUpperCase() + s2.slice(1) : s2).join(sep || \"\");\n}\n\n// src/db_fields.ts\nvar TRANSACTION_ID_FIELD = \"_xact_id\";\nvar OBJECT_DELETE_FIELD = \"_object_delete\";\nvar IS_MERGE_FIELD = \"_is_merge\";\nvar MERGE_PATHS_FIELD = \"_merge_paths\";\nvar VALID_SOURCES = [\"app\", \"api\", \"external\"];\n\n// src/span_types.ts\nvar spanTypeAttributeValues = [\n  \"llm\",\n  \"score\",\n  \"function\",\n  \"eval\",\n  \"task\",\n  \"tool\"\n];\n\n// typespecs/api_types.ts\nextendZodWithOpenApi9(z12);\nvar auditSourcesSchema = z12.enum(VALID_SOURCES);\nvar spanTypeSchema = z12.enum(spanTypeAttributeValues).openapi(\"SpanType\");\nvar spanAttributesSchema = z12.object({\n  name: z12.string().nullish().describe(\"Name of the span, for display purposes only\"),\n  type: spanTypeSchema.nullish().describe(\"Type of the span, for display purposes only\")\n}).catchall(customTypes.unknown).describe(\n  \"Human-identifying attributes of the span, such as name, type, etc.\"\n).openapi(\"SpanAttributes\");\nfunction generateBaseEventOpSchema(objectType) {\n  const eventDescription = getEventObjectDescription(objectType);\n  return z12.object({\n    id: z12.string().describe(\n      `A unique identifier for the ${eventDescription} event. If you don't provide one, BrainTrust will generate one for you`\n    ),\n    [TRANSACTION_ID_FIELD]: z12.string().describe(\n      `The transaction id of an event is unique to the network operation that processed the event insertion. Transaction ids are monotonically increasing over time and can be used to retrieve a versioned snapshot of the ${eventDescription} (see the \\`version\\` parameter)`\n    ),\n    created: datetimeStringSchema.describe(\n      `The timestamp the ${eventDescription} event was created`\n    ),\n    input: customTypes.unknown,\n    output: customTypes.unknown,\n    expected: customTypes.unknown,\n    error: customTypes.unknown.describe(\"The error that occurred, if any.\"),\n    tags: z12.array(z12.string()).nullish().describe(\"A list of tags to log\"),\n    scores: z12.record(z12.number().min(0).max(1).nullish()).nullish(),\n    metadata: z12.object({\n      model: z12.string().nullish().describe(\"The model used for this example\")\n    }).catchall(customTypes.unknown).nullish().describe(\n      \"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    ),\n    metrics: z12.object({\n      start: z12.number().nullish().describe(\n        `A unix timestamp recording when the section of code which produced the ${eventDescription} event started`\n      ),\n      end: z12.number().nullish().describe(\n        `A unix timestamp recording when the section of code which produced the ${eventDescription} event finished`\n      ),\n      prompt_tokens: z12.number().int().nullish().describe(\n        `The number of tokens in the prompt used to generate the ${eventDescription} event (only set if this is an LLM span)`\n      ),\n      completion_tokens: z12.number().int().nullish().describe(\n        `The number of tokens in the completion generated by the model (only set if this is an LLM span)`\n      ),\n      tokens: z12.number().int().nullish().describe(\n        `The total number of tokens in the input and output of the ${eventDescription} event.`\n      ),\n      // Legacy non-numerical metrics.\n      caller_functionname: customTypes.unknown.describe(\n        \"This metric is deprecated\"\n      ),\n      caller_filename: customTypes.unknown.describe(\n        \"This metric is deprecated\"\n      ),\n      caller_lineno: customTypes.unknown.describe(\n        \"This metric is deprecated\"\n      )\n    }).catchall(z12.number()).nullish().describe(\n      `Metrics are numerical measurements tracking the execution of the code that produced the ${eventDescription} event. Use \"start\" and \"end\" to track the time span over which the ${eventDescription} event was produced`\n    ),\n    context: z12.object({\n      caller_functionname: z12.string().nullish().describe(\n        `The function in code which created the ${eventDescription} event`\n      ),\n      caller_filename: z12.string().nullish().describe(\n        `Name of the file in code where the ${eventDescription} event was created`\n      ),\n      caller_lineno: z12.number().int().nullish().describe(\n        `Line of code where the ${eventDescription} event was created`\n      )\n    }).catchall(customTypes.unknown).nullish().describe(\n      `Context is additional information about the code that produced the ${eventDescription} event. It is essentially the textual counterpart to \\`metrics\\`. Use the \\`caller_*\\` attributes to track the location in code which produced the ${eventDescription} event`\n    ),\n    span_id: z12.string().describe(\n      `A unique identifier used to link different ${eventDescription} events together as part of a full trace. See the [tracing guide](https://www.braintrust.dev/docs/guides/tracing) for full details on tracing`\n    ),\n    span_parents: z12.string().array().nullish().describe(\n      `An array of the parent \\`span_ids\\` of this ${eventDescription} event. This should be empty for the root span of a trace, and should most often contain just one parent element for subspans`\n    ),\n    root_span_id: z12.string().describe(\n      `A unique identifier for the trace this ${eventDescription} event belongs to`\n    ),\n    span_attributes: spanAttributesSchema.nullish(),\n    origin: objectReferenceSchema.nullish().describe(\"Indicates the event was copied from another object.\"),\n    [OBJECT_DELETE_FIELD]: z12.boolean().nullish().describe(\n      `Pass \\`${OBJECT_DELETE_FIELD}=true\\` to mark the ${eventDescription} event deleted. Deleted events will not show up in subsequent fetches for this ${eventDescription}`\n    ),\n    is_root: z12.boolean().nullish().describe(`Whether this span is a root span`)\n  });\n}\nfunction generateBaseEventFeedbackSchema(objectType) {\n  const eventObjectType2 = getEventObjectType(objectType);\n  const eventDescription = getEventObjectDescription(objectType);\n  return z12.object({\n    id: z12.string().describe(\n      `The id of the ${eventDescription} event to log feedback for. This is the row \\`id\\` returned by \\`POST /v1/${eventObjectType2}/{${objectType}_id}/insert\\``\n    ),\n    scores: z12.record(z12.number().min(0).max(1).nullish()).nullish().describe(\n      `A dictionary of numeric values (between 0 and 1) to log. These scores will be merged into the existing scores for the ${eventDescription} event`\n    ),\n    expected: customTypes.unknown.describe(\n      \"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    ),\n    tags: z12.array(z12.string()).nullish().describe(\"A list of tags to log\"),\n    comment: z12.string().nullish().describe(\n      `An optional comment string to log about the ${eventDescription} event`\n    ),\n    metadata: z12.record(customTypes.unknown).nullish().describe(\n      \"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    ),\n    source: auditSourcesSchema.nullish().describe(\n      'The source of the feedback. Must be one of \"external\" (default), \"app\", or \"api\"'\n    )\n  });\n}\nvar fetchLimitParamSchema = z12.coerce.number().int().nonnegative().describe(\n  [\n    \"limit the number of traces fetched\",\n    `Fetch queries may be paginated if the total result size is expected to be large (e.g. project_logs which accumulate over a long time). Note that fetch queries only support pagination in descending time order (from latest to earliest \\`${TRANSACTION_ID_FIELD}\\`. Furthermore, later pages may return rows which showed up in earlier pages, except with an earlier \\`${TRANSACTION_ID_FIELD}\\`. This happens because pagination occurs over the whole version history of the event log. You will most likely want to exclude any such duplicate, outdated rows (by \\`id\\`) from your combined result set.`,\n    `The \\`limit\\` parameter controls the number of full traces to return. So you may end up with more individual rows than the specified limit if you are fetching events containing traces.`\n  ].join(\"\\n\\n\")\n).openapi(\"FetchLimit\");\nvar fetchPaginationCursorDescription = [\n  \"DEPRECATION NOTICE: The manually-constructed pagination cursor is deprecated in favor of the explicit 'cursor' returned by object fetch requests. Please prefer the 'cursor' argument going forwards.\",\n  \"Together, `max_xact_id` and `max_root_span_id` form a pagination cursor\",\n  `Since a paginated fetch query returns results in order from latest to earliest, the cursor for the next page can be found as the row with the minimum (earliest) value of the tuple \\`(${TRANSACTION_ID_FIELD}, root_span_id)\\`. See the documentation of \\`limit\\` for an overview of paginating fetch queries.`\n].join(\"\\n\\n\");\nvar maxXactIdSchema = z12.string().describe(fetchPaginationCursorDescription).openapi(\"MaxXactId\");\nvar maxRootSpanIdSchema = z12.string().describe(fetchPaginationCursorDescription).openapi(\"MaxRootSpanId\");\nvar fetchPaginationCursorSchema = z12.string().describe(\n  [\n    \"An opaque string to be used as a cursor for the next page of results, in order from latest to earliest.\",\n    \"The string can be obtained directly from the `cursor` property of the previous fetch query\"\n  ].join(\"\\n\\n\")\n).openapi(\"FetchPaginationCursor\");\nvar versionSchema = z12.string().describe(\n  [\n    \"Retrieve a snapshot of events from a past time\",\n    \"The version id is essentially a filter on the latest event transaction id. You can use the `max_xact_id` returned by a past fetch as the version to reproduce that exact fetch.\"\n  ].join(\"\\n\\n\")\n).openapi(\"Version\");\nvar fetchEventsRequestSchema = z12.object({\n  limit: fetchLimitParamSchema.nullish(),\n  cursor: fetchPaginationCursorSchema.nullish(),\n  max_xact_id: maxXactIdSchema.nullish(),\n  max_root_span_id: maxRootSpanIdSchema.nullish(),\n  version: versionSchema.nullish()\n}).openapi(\"FetchEventsRequest\");\nfunction makeFetchEventsResponseSchema(objectType, eventSchema) {\n  const eventName = capitalize(getEventObjectType(objectType), \"_\").replace(\n    \"_\",\n    \"\"\n  );\n  return z12.object({\n    events: eventSchema.array().describe(\"A list of fetched events\"),\n    cursor: z12.string().nullish().describe(\n      [\n        \"Pagination cursor\",\n        \"Pass this string directly as the `cursor` param to your next fetch request to get the next page of results. Not provided if the returned result set is empty.\"\n      ].join(\"\\n\\n\")\n    )\n  }).openapi(`Fetch${eventName}EventsResponse`);\n}\nvar experimentEventBaseSchema = generateBaseEventOpSchema(\"experiment\");\nvar experimentEventSchema = z12.object({\n  id: experimentEventBaseSchema.shape.id,\n  [TRANSACTION_ID_FIELD]: experimentEventBaseSchema.shape[TRANSACTION_ID_FIELD],\n  created: experimentEventBaseSchema.shape.created,\n  project_id: experimentSchema.shape.project_id,\n  experiment_id: experimentSchema.shape.id,\n  input: experimentEventBaseSchema.shape.input.describe(\n    \"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  ),\n  output: experimentEventBaseSchema.shape.output.describe(\n    \"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  ),\n  expected: experimentEventBaseSchema.shape.expected.describe(\n    \"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  ),\n  error: experimentEventBaseSchema.shape.error,\n  scores: experimentEventBaseSchema.shape.scores.describe(\n    \"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  ),\n  metadata: experimentEventBaseSchema.shape.metadata,\n  tags: experimentEventBaseSchema.shape.tags,\n  metrics: experimentEventBaseSchema.shape.metrics,\n  context: experimentEventBaseSchema.shape.context,\n  span_id: experimentEventBaseSchema.shape.span_id,\n  span_parents: experimentEventBaseSchema.shape.span_parents,\n  root_span_id: experimentEventBaseSchema.shape.root_span_id,\n  span_attributes: experimentEventBaseSchema.shape.span_attributes,\n  is_root: experimentEventBaseSchema.shape.is_root,\n  origin: experimentEventBaseSchema.shape.origin\n}).openapi(\"ExperimentEvent\");\nvar datasetEventBaseSchema = generateBaseEventOpSchema(\"dataset\");\nvar datasetEventSchema = z12.object({\n  id: datasetEventBaseSchema.shape.id,\n  [TRANSACTION_ID_FIELD]: datasetEventBaseSchema.shape[TRANSACTION_ID_FIELD],\n  created: datasetEventBaseSchema.shape.created,\n  project_id: datasetSchema.shape.project_id,\n  dataset_id: datasetSchema.shape.id,\n  input: datasetEventBaseSchema.shape.input.describe(\n    \"The argument that uniquely define an input case (an arbitrary, JSON serializable object)\"\n  ),\n  expected: datasetEventBaseSchema.shape.expected.describe(\n    \"The output of your application, including post-processing (an arbitrary, JSON serializable object)\"\n  ),\n  metadata: datasetEventBaseSchema.shape.metadata,\n  tags: datasetEventBaseSchema.shape.tags,\n  span_id: datasetEventBaseSchema.shape.span_id,\n  root_span_id: datasetEventBaseSchema.shape.root_span_id,\n  is_root: datasetEventBaseSchema.shape.is_root,\n  origin: datasetEventBaseSchema.shape.origin\n}).openapi(\"DatasetEvent\");\nvar promptSessionEventBaseSchema = generateBaseEventOpSchema(\"prompt_session\");\nvar promptSessionEventSchema = z12.object({\n  id: promptSessionEventBaseSchema.shape.id,\n  [TRANSACTION_ID_FIELD]: promptSessionEventBaseSchema.shape[TRANSACTION_ID_FIELD],\n  created: promptSessionEventBaseSchema.shape.created,\n  project_id: promptSchema.shape.project_id,\n  prompt_session_id: promptSchema.shape.id,\n  prompt_session_data: customTypes.unknown.describe(\n    \"Data about the prompt session\"\n  ),\n  prompt_data: customTypes.unknown.describe(\"Data about the prompt\"),\n  function_data: customTypes.unknown.describe(\"Data about the function\"),\n  object_data: customTypes.unknown.describe(\"Data about the mapped data\"),\n  completion: customTypes.unknown.describe(\"Data about the completion\"),\n  tags: promptSessionEventBaseSchema.shape.tags\n}).openapi(\"PromptSessionEvent\");\nvar projectLogsEventBaseSchema = generateBaseEventOpSchema(\"project\");\nvar projectLogsLogIdLiteralSchema = z12.literal(\"g\").describe(\"A literal 'g' which identifies the log as a project log\");\nvar projectLogsEventSchema = z12.object({\n  id: projectLogsEventBaseSchema.shape.id,\n  [TRANSACTION_ID_FIELD]: projectLogsEventBaseSchema.shape[TRANSACTION_ID_FIELD],\n  created: projectLogsEventBaseSchema.shape.created,\n  org_id: projectSchema.shape.org_id,\n  project_id: projectSchema.shape.id,\n  log_id: projectLogsLogIdLiteralSchema,\n  input: projectLogsEventBaseSchema.shape.input.describe(\n    \"The arguments that uniquely define a user input (an arbitrary, JSON serializable object).\"\n  ),\n  output: projectLogsEventBaseSchema.shape.output.describe(\n    \"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  ),\n  expected: projectLogsEventBaseSchema.shape.expected.describe(\n    \"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  ),\n  error: projectLogsEventBaseSchema.shape.error,\n  scores: projectLogsEventBaseSchema.shape.scores.describe(\n    \"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  ),\n  metadata: projectLogsEventBaseSchema.shape.metadata,\n  tags: projectLogsEventBaseSchema.shape.tags,\n  metrics: projectLogsEventBaseSchema.shape.metrics,\n  context: projectLogsEventBaseSchema.shape.context,\n  span_id: projectLogsEventBaseSchema.shape.span_id,\n  span_parents: projectLogsEventBaseSchema.shape.span_parents,\n  root_span_id: projectLogsEventBaseSchema.shape.root_span_id,\n  is_root: projectLogsEventBaseSchema.shape.is_root,\n  span_attributes: projectLogsEventBaseSchema.shape.span_attributes,\n  origin: projectLogsEventBaseSchema.shape.origin\n}).openapi(\"ProjectLogsEvent\");\nvar spanIdsDescription = [\n  \"Use `span_id`, `root_span_id`, and `span_parents` instead of `_parent_id`, which is now deprecated. The span_id is a unique identifier describing the row's place in the a trace, and the root_span_id is a unique identifier for the whole trace. See the [guide](https://www.braintrust.dev/docs/guides/tracing) for full details.\",\n  'For example, say we have logged a row `{\"id\": \"abc\", \"span_id\": \"span0\", \"root_span_id\": \"root_span0\", \"input\": \"foo\", \"output\": \"bar\", \"expected\": \"boo\", \"scores\": {\"correctness\": 0.33}}`. We can create a sub-span of the parent row by logging `{\"id\": \"llm_call\", \"span_id\": \"span1\", \"root_span_id\": \"root_span0\", \"span_parents\": [\"span0\"], \"input\": {\"prompt\": \"What comes after foo?\"}, \"output\": \"bar\", \"metrics\": {\"tokens\": 1}}`. In the webapp, only the root span row `\"abc\"` will show up in the summary view. You can view the full trace hierarchy (in this case, the `\"llm_call\"` row) by clicking on the \"abc\" row.',\n  \"If the row is being merged into an existing row, this field will be ignored.\"\n].join(\"\\n\\n\");\nvar insertSystemControlFieldsSchema = z12.object({\n  [IS_MERGE_FIELD]: z12.boolean().nullish().describe(\n    [\n      \"The `_is_merge` field controls how the row is merged with any existing row with the same id in the DB. By default (or when set to `false`), the existing row is completely replaced by the new row. When set to `true`, the new row is deep-merged into the existing row, if one is found. If no existing row is found, the new row is inserted as is.\",\n      'For example, say there is an existing row in the DB `{\"id\": \"foo\", \"input\": {\"a\": 5, \"b\": 10}}`. If we merge a new row as `{\"_is_merge\": true, \"id\": \"foo\", \"input\": {\"b\": 11, \"c\": 20}}`, the new row will be `{\"id\": \"foo\", \"input\": {\"a\": 5, \"b\": 11, \"c\": 20}}`. If we replace the new row as `{\"id\": \"foo\", \"input\": {\"b\": 11, \"c\": 20}}`, the new row will be `{\"id\": \"foo\", \"input\": {\"b\": 11, \"c\": 20}}`'\n    ].join(\"\\n\\n\")\n  ),\n  [MERGE_PATHS_FIELD]: z12.string().array().array().nullish().describe(\n    [\n      \"The `_merge_paths` field allows controlling the depth of the merge, when `_is_merge=true`. `_merge_paths` is a list of paths, where each path is a list of field names. The deep merge will not descend below any of the specified merge paths.\",\n      'For example, say there is an existing row in the DB `{\"id\": \"foo\", \"input\": {\"a\": {\"b\": 10}, \"c\": {\"d\": 20}}, \"output\": {\"a\": 20}}`. If we merge a new row as `{\"_is_merge\": true, \"_merge_paths\": [[\"input\", \"a\"], [\"output\"]], \"input\": {\"a\": {\"q\": 30}, \"c\": {\"e\": 30}, \"bar\": \"baz\"}, \"output\": {\"d\": 40}}`, the new row will be `{\"id\": \"foo\": \"input\": {\"a\": {\"q\": 30}, \"c\": {\"d\": 20, \"e\": 30}, \"bar\": \"baz\"}, \"output\": {\"d\": 40}}`. In this case, due to the merge paths, we have replaced `input.a` and `output`, but have still deep-merged `input` and `input.c`.'\n    ].join(\"\\n\\n\")\n  ),\n  _parent_id: z12.string().nullish().describe(\n    [\n      \"DEPRECATED: The `_parent_id` field is deprecated and should not be used. Support for `_parent_id` will be dropped in a future version of Braintrust. Log `span_id`, `root_span_id`, and `span_parents` explicitly instead.\",\n      \"Use the `_parent_id` field to create this row as a subspan of an existing row. Tracking hierarchical relationships are important for tracing (see the [guide](https://www.braintrust.dev/docs/guides/tracing) for full details).\",\n      'For example, say we have logged a row `{\"id\": \"abc\", \"input\": \"foo\", \"output\": \"bar\", \"expected\": \"boo\", \"scores\": {\"correctness\": 0.33}}`. We can create a sub-span of the parent row by logging `{\"_parent_id\": \"abc\", \"id\": \"llm_call\", \"input\": {\"prompt\": \"What comes after foo?\"}, \"output\": \"bar\", \"metrics\": {\"tokens\": 1}}`. In the webapp, only the root span row `\"abc\"` will show up in the summary view. You can view the full trace hierarchy (in this case, the `\"llm_call\"` row) by clicking on the \"abc\" row.',\n      \"If the row is being merged into an existing row, this field will be ignored.\"\n    ].join(\"\\n\\n\")\n  ),\n  span_id: z12.string().nullish().describe(spanIdsDescription),\n  root_span_id: z12.string().nullish().describe(spanIdsDescription),\n  span_parents: z12.string().array().nullish().describe(spanIdsDescription)\n});\nfunction makeInsertEventSchemas(objectType, insertSchema) {\n  const eventDescription = getEventObjectDescription(objectType);\n  const article = getObjectArticle(objectType);\n  const eventSchemaName = capitalize(\n    getEventObjectType(objectType),\n    \"_\"\n  ).replace(\"_\", \"\");\n  const eventSchema = insertSchema.merge(insertSystemControlFieldsSchema).describe(`${capitalize(article)} ${eventDescription} event`).openapi(`Insert${eventSchemaName}Event`);\n  const requestSchema = z12.object({\n    events: eventSchema.array().describe(`A list of ${eventDescription} events to insert`)\n  }).openapi(`Insert${eventSchemaName}EventRequest`);\n  return { eventSchema, requestSchema };\n}\nvar insertEventsResponseSchema = z12.object({\n  row_ids: z12.string().array().describe(\n    \"The ids of all rows that were inserted, aligning one-to-one with the rows provided as input\"\n  )\n}).openapi(\"InsertEventsResponse\");\nvar feedbackResponseSchema = z12.object({\n  status: z12.literal(\"success\")\n}).openapi(\"FeedbackResponseSchema\");\nvar insertExperimentEventBaseSchema = objectNullish(\n  experimentEventSchema.pick({\n    input: true,\n    output: true,\n    expected: true,\n    error: true,\n    scores: true,\n    metadata: true,\n    tags: true,\n    metrics: true,\n    context: true,\n    span_attributes: true,\n    id: true,\n    created: true,\n    origin: true\n  }).extend({\n    [OBJECT_DELETE_FIELD]: experimentEventBaseSchema.shape[OBJECT_DELETE_FIELD]\n  })\n);\nvar {\n  eventSchema: insertExperimentEventSchema,\n  requestSchema: insertExperimentEventsRequestSchema\n} = makeInsertEventSchemas(\"experiment\", insertExperimentEventBaseSchema);\nvar insertDatasetEventBaseSchema = objectNullish(\n  datasetEventSchema.pick({\n    input: true,\n    expected: true,\n    metadata: true,\n    tags: true,\n    id: true,\n    created: true,\n    origin: true\n  }).extend({\n    [OBJECT_DELETE_FIELD]: datasetEventBaseSchema.shape[OBJECT_DELETE_FIELD]\n  })\n);\nvar {\n  eventSchema: insertDatasetEventSchema,\n  requestSchema: insertDatasetEventsRequestSchema\n} = makeInsertEventSchemas(\"dataset\", insertDatasetEventBaseSchema);\nvar insertProjectLogsEventBaseSchema = objectNullish(\n  projectLogsEventSchema.pick({\n    input: true,\n    output: true,\n    expected: true,\n    error: true,\n    scores: true,\n    metadata: true,\n    tags: true,\n    metrics: true,\n    context: true,\n    span_attributes: true,\n    id: true,\n    created: true,\n    origin: true\n  }).extend({\n    [OBJECT_DELETE_FIELD]: projectLogsEventBaseSchema.shape[OBJECT_DELETE_FIELD]\n  })\n);\nvar {\n  eventSchema: insertProjectLogsEventSchema,\n  requestSchema: insertProjectLogsEventsRequestSchema\n} = makeInsertEventSchemas(\"project\", insertProjectLogsEventBaseSchema);\nfunction makeFeedbackRequestSchema(objectType, feedbackSchema) {\n  const eventDescription = getEventObjectDescription(objectType);\n  const eventSchemaName = capitalize(\n    getEventObjectType(objectType),\n    \"_\"\n  ).replace(\"_\", \"\");\n  return z12.object({\n    feedback: feedbackSchema.array().describe(`A list of ${eventDescription} feedback items`)\n  }).openapi(`Feedback${eventSchemaName}EventRequest`);\n}\nvar feedbackExperimentRequestBaseSchema = generateBaseEventFeedbackSchema(\"experiment\");\nvar feedbackExperimentItemSchema = feedbackExperimentRequestBaseSchema.pick({\n  id: true,\n  scores: true,\n  expected: true,\n  comment: true,\n  metadata: true,\n  source: true,\n  tags: true\n}).openapi(\"FeedbackExperimentItem\");\nvar feedbackExperimentRequestSchema = makeFeedbackRequestSchema(\n  \"experiment\",\n  feedbackExperimentItemSchema\n);\nvar feedbackDatasetRequestBaseSchema = generateBaseEventFeedbackSchema(\"dataset\");\nvar feedbackDatasetItemSchema = feedbackDatasetRequestBaseSchema.pick({\n  id: true,\n  comment: true,\n  metadata: true,\n  source: true,\n  tags: true\n}).openapi(\"FeedbackDatasetItem\");\nvar feedbackDatasetRequestSchema = makeFeedbackRequestSchema(\n  \"dataset\",\n  feedbackDatasetItemSchema\n);\nvar feedbackProjectLogsRequestBaseSchema = generateBaseEventFeedbackSchema(\"project\");\nvar feedbackProjectLogsItemSchema = feedbackProjectLogsRequestBaseSchema.pick({\n  id: true,\n  scores: true,\n  expected: true,\n  comment: true,\n  metadata: true,\n  source: true,\n  tags: true\n}).openapi(\"FeedbackProjectLogsItem\");\nvar feedbackProjectLogsRequestSchema = makeFeedbackRequestSchema(\n  \"project\",\n  feedbackProjectLogsItemSchema\n);\nvar apiSpecEventObjectSchemas = {\n  experiment: {\n    event: experimentEventSchema,\n    fetchResponse: makeFetchEventsResponseSchema(\n      \"experiment\",\n      experimentEventSchema\n    ),\n    insertEvent: insertExperimentEventSchema,\n    insertRequest: insertExperimentEventsRequestSchema,\n    feedbackItem: feedbackExperimentItemSchema,\n    feedbackRequest: feedbackExperimentRequestSchema\n  },\n  dataset: {\n    event: datasetEventSchema,\n    fetchResponse: makeFetchEventsResponseSchema(\"dataset\", datasetEventSchema),\n    insertEvent: insertDatasetEventSchema,\n    insertRequest: insertDatasetEventsRequestSchema,\n    feedbackItem: feedbackDatasetItemSchema,\n    feedbackRequest: feedbackDatasetRequestSchema\n  },\n  project_logs: {\n    event: projectLogsEventSchema,\n    fetchResponse: makeFetchEventsResponseSchema(\n      \"project\",\n      projectLogsEventSchema\n    ),\n    insertEvent: insertProjectLogsEventSchema,\n    insertRequest: insertProjectLogsEventsRequestSchema,\n    feedbackItem: feedbackProjectLogsItemSchema,\n    feedbackRequest: feedbackProjectLogsRequestSchema\n  },\n  prompt: {\n    event: promptSchema\n  },\n  function: {\n    event: functionSchema2\n  },\n  prompt_session: {}\n};\nfunction makeCrossObjectIndividualRequestSchema(objectType) {\n  const eventObjectType2 = getEventObjectType(objectType);\n  const eventDescription = getEventObjectDescription(objectType);\n  const eventObjectSchema = apiSpecEventObjectSchemas[eventObjectType2];\n  const insertObject = z12.object({\n    ...eventObjectSchema.insertEvent ? {\n      events: eventObjectSchema.insertEvent.array().nullish().describe(`A list of ${eventDescription} events to insert`)\n    } : {},\n    ...eventObjectSchema.feedbackItem ? {\n      feedback: eventObjectSchema.feedbackItem.array().nullish().describe(`A list of ${eventDescription} feedback items`)\n    } : {}\n  });\n  return z12.record(z12.string().uuid(), insertObject).nullish().describe(\n    `A mapping from ${objectType} id to a set of log events and feedback items to insert`\n  );\n}\nfunction makeCrossObjectIndividualResponseSchema(objectType) {\n  return z12.record(z12.string().uuid(), insertEventsResponseSchema).nullish().describe(\n    `A mapping from ${objectType} id to row ids for inserted \\`events\\``\n  );\n}\nvar crossObjectInsertRequestSchema = z12.object({\n  experiment: makeCrossObjectIndividualRequestSchema(\"experiment\"),\n  dataset: makeCrossObjectIndividualRequestSchema(\"dataset\"),\n  project_logs: makeCrossObjectIndividualRequestSchema(\"project\")\n}).openapi(\"CrossObjectInsertRequest\");\nvar crossObjectInsertResponseSchema = z12.object({\n  experiment: makeCrossObjectIndividualResponseSchema(\"experiment\"),\n  dataset: makeCrossObjectIndividualResponseSchema(\"dataset\"),\n  project_logs: makeCrossObjectIndividualResponseSchema(\"project\")\n}).openapi(\"CrossObjectInsertResponse\");\nvar summarizeScoresParamSchema = z12.coerce.boolean().describe(\n  \"Whether to summarize the scores and metrics. If false (or omitted), only the metadata will be returned.\"\n);\nvar comparisonExperimentIdParamSchema = z12.string().uuid().describe(\n  \"The experiment to compare against, if summarizing scores and metrics. If omitted, will fall back to the `base_exp_id` stored in the experiment metadata, and then to the most recent experiment run in the same project. Must pass `summarize_scores=true` for this id to be used\"\n);\nvar summarizeDataParamSchema = z12.coerce.boolean().describe(\n  \"Whether to summarize the data. If false (or omitted), only the metadata will be returned.\"\n);\nvar summarizeExperimentResponseSchema = z12.object({\n  project_name: z12.string().describe(\"Name of the project that the experiment belongs to\"),\n  experiment_name: z12.string().describe(\"Name of the experiment\"),\n  project_url: z12.string().url().describe(\"URL to the project's page in the Braintrust app\"),\n  experiment_url: z12.string().url().describe(\"URL to the experiment's page in the Braintrust app\"),\n  comparison_experiment_name: z12.string().nullish().describe(\"The experiment which scores are baselined against\"),\n  scores: z12.record(\n    z12.object({\n      name: z12.string().describe(\"Name of the score\"),\n      score: z12.number().min(0).max(1).describe(\"Average score across all examples\"),\n      diff: z12.number().min(-1).max(1).optional().describe(\n        \"Difference in score between the current and comparison experiment\"\n      ),\n      improvements: z12.number().int().min(0).describe(\"Number of improvements in the score\"),\n      regressions: z12.number().int().min(0).describe(\"Number of regressions in the score\")\n    }).describe(\"Summary of a score's performance\").openapi(\"ScoreSummary\")\n  ).nullish().describe(\"Summary of the experiment's scores\"),\n  metrics: z12.record(\n    z12.object({\n      name: z12.string().describe(\"Name of the metric\"),\n      metric: z12.number().describe(\"Average metric across all examples\"),\n      unit: z12.string().describe(\"Unit label for the metric\"),\n      diff: z12.number().optional().describe(\n        \"Difference in metric between the current and comparison experiment\"\n      ),\n      improvements: z12.number().int().min(0).describe(\"Number of improvements in the metric\"),\n      regressions: z12.number().int().min(0).describe(\"Number of regressions in the metric\")\n    }).describe(\"Summary of a metric's performance\").openapi(\"MetricSummary\")\n  ).nullish().describe(\"Summary of the experiment's metrics\")\n}).describe(\"Summary of an experiment\").openapi(\"SummarizeExperimentResponse\");\nvar summarizeDatasetResponseSchema = z12.object({\n  project_name: z12.string().describe(\"Name of the project that the dataset belongs to\"),\n  dataset_name: z12.string().describe(\"Name of the dataset\"),\n  project_url: z12.string().url().describe(\"URL to the project's page in the Braintrust app\"),\n  dataset_url: z12.string().url().describe(\"URL to the dataset's page in the Braintrust app\"),\n  data_summary: z12.object({\n    total_records: z12.number().int().min(0).describe(\"Total number of records in the dataset\")\n  }).nullish().describe(\"Summary of a dataset's data\").openapi(\"DataSummary\")\n}).describe(\"Summary of a dataset\").openapi(\"SummarizeDatasetResponse\");\nvar objectTypeSummarizeResponseSchemas = {\n  experiment: summarizeExperimentResponseSchema,\n  dataset: summarizeDatasetResponseSchema\n};\nvar asyncScoringStateSchema = z12.union([\n  z12.object({\n    status: z12.literal(\"enabled\"),\n    token: z12.string(),\n    function_ids: z12.array(functionIdSchema).nonempty()\n  }),\n  // Explicitly disabled.\n  z12.object({\n    status: z12.literal(\"disabled\")\n  }),\n  // Inactive but may be selected later.\n  z12.null()\n]).openapi(\"AsyncScoringState\");\nvar asyncScoringControlSchema = z12.discriminatedUnion(\"kind\", [\n  z12.object({\n    kind: z12.literal(\"score_update\"),\n    token: z12.string()\n  }),\n  z12.object({\n    kind: z12.literal(\"state_override\"),\n    state: asyncScoringStateSchema\n  }),\n  z12.object({\n    kind: z12.literal(\"state_force_reselect\")\n  })\n]).openapi(\"AsyncScoringControl\");\n\n// typespecs/attachment-reference.ts\nimport { z as z13 } from \"zod\";\nvar BRAINTRUST_ATTACHMENT = \"braintrust_attachment\";\nvar EXTERNAL_ATTACHMENT = \"external_attachment\";\nvar braintrustAttachmentReferenceSchema = z13.object({\n  type: z13.literal(BRAINTRUST_ATTACHMENT).describe(\"An identifier to help disambiguate parsing.\"),\n  filename: z13.string().min(1).describe(\n    \"Human-readable filename for user interfaces. Not related to attachment storage.\"\n  ),\n  content_type: z13.string().min(1).describe(\"MIME type of this file.\"),\n  key: z13.string().min(1).describe(\"Key in the object store bucket for this attachment.\")\n}).openapi(\"BraintrustAttachmentReference\");\nvar externalAttachmentReferenceSchema = z13.object({\n  type: z13.literal(EXTERNAL_ATTACHMENT).describe(\"An identifier to help disambiguate parsing.\"),\n  filename: z13.string().min(1).describe(\n    \"Human-readable filename for user interfaces. Not related to attachment storage.\"\n  ),\n  content_type: z13.string().min(1).describe(\"MIME type of this file.\"),\n  url: z13.string().min(1).describe(\n    \"Fully qualified URL to the object in the external object store.\"\n  )\n}).openapi(\"ExternalAttachmentReference\");\nvar attachmentReferenceSchema = z13.discriminatedUnion(\"type\", [\n  braintrustAttachmentReferenceSchema,\n  externalAttachmentReferenceSchema\n]).openapi(\"AttachmentReference\");\nvar uploadStatusSchema = z13.enum([\"uploading\", \"done\", \"error\"]).openapi(\"UploadStatus\");\nvar attachmentStatusSchema = z13.object({\n  upload_status: uploadStatusSchema,\n  error_message: z13.string().nullish().transform((x) => x || void 0).describe(\"Describes the error encountered while uploading.\")\n}).openapi(\"AttachmentStatus\");\nexport {\n  BRAINTRUST_ATTACHMENT,\n  BRAINTRUST_PARAMS,\n  DEFAULT_IF_EXISTS,\n  EXTERNAL_ATTACHMENT,\n  aclBatchUpdateRequestSchema,\n  aclBatchUpdateResponseSchema,\n  aclItemSchema,\n  aclObjectTypeEnum,\n  aclSchema,\n  aiSecretSchema,\n  apiKeySchema,\n  apiSpecEventObjectSchemas,\n  apiSpecObjectSchemas,\n  appLimitParamSchema,\n  asyncScoringControlSchema,\n  asyncScoringStateSchema,\n  attachmentReferenceSchema,\n  attachmentStatusSchema,\n  baseSSEEventSchema,\n  braintrustAttachmentReferenceSchema,\n  callEventSchema,\n  chatCompletionContentPartImageSchema,\n  chatCompletionContentPartSchema,\n  chatCompletionContentPartTextSchema,\n  chatCompletionMessageParamSchema,\n  chatCompletionMessageToolCallSchema,\n  codeBundleSchema,\n  comparisonExperimentIdParamSchema,\n  createAISecretSchema,\n  createApiKeyOutputSchema,\n  createApiKeySchema,\n  createDatasetSchema,\n  createEnvVarSchema,\n  createExperimentSchema,\n  createFunctionSchema,\n  createGroupSchema,\n  createProjectSchema,\n  createProjectScoreSchema,\n  createProjectTagSchema,\n  createPromptSchema,\n  createSpanIframeSchema,\n  createViewSchema,\n  crossObjectInsertRequestSchema,\n  crossObjectInsertResponseSchema,\n  customColumnSchema,\n  customTypes,\n  customTypesMode,\n  datasetEventSchema,\n  datasetSchema,\n  datetimeStringSchema,\n  deleteAISecretSchema,\n  endingBeforeSchema,\n  envVarObjectTypeEnum,\n  envVarSchema,\n  eventObjectType,\n  experimentEventSchema,\n  experimentSchema,\n  extendedSavedFunctionIdSchema,\n  externalAttachmentReferenceSchema,\n  feedbackResponseSchema,\n  fetchEventsRequestSchema,\n  fetchLimitParamSchema,\n  fetchPaginationCursorSchema,\n  functionDataSchema,\n  functionFormatEnum,\n  functionIdSchema,\n  functionObjectTypeEnum,\n  functionOutputTypeEnum,\n  functionSchema2 as functionSchema,\n  functionTypeEnum,\n  getEventObjectDescription,\n  getEventObjectType,\n  getObjectArticle,\n  gitFieldsSchema,\n  gitMetadataSettingsSchema,\n  groupSchema,\n  ifExistsEnum,\n  insertEventsResponseSchema,\n  invokeApiSchema,\n  invokeFunctionNonIdArgsSchema,\n  invokeFunctionSchema,\n  invokeParent,\n  jsonSchema,\n  literalSchema,\n  makeObjectIdsFilterSchema,\n  maxOverWindowSchema,\n  maxRootSpanIdSchema,\n  maxXactIdSchema,\n  memberSchema,\n  messageRoleSchema,\n  modelParamsSchema,\n  objectReferenceSchema,\n  objectTypeSummarizeResponseSchemas,\n  objectTypes,\n  objectTypesWithEvent,\n  onlineScoreConfigSchema,\n  organizationMembersSchema,\n  organizationSchema,\n  patchAISecretSchema,\n  patchDatasetSchema,\n  patchEnvVarSchema,\n  patchExperimentSchema,\n  patchGroupSchema,\n  patchOrganizationMembersOutputSchema,\n  patchOrganizationMembersSchema,\n  patchOrganizationSchema,\n  patchProjectSchema,\n  patchProjectScoreSchema,\n  patchProjectTagSchema,\n  patchPromptSchema,\n  patchRoleSchema,\n  patchSpanIframeSchema,\n  patchViewSchema,\n  permissionEnum,\n  playgroundLogsLogIdLiteralSchema,\n  projectLogsEventSchema,\n  projectLogsLogIdLiteralSchema,\n  projectSchema,\n  projectScoreCategory,\n  projectScoreSchema,\n  projectScoreTypeEnum,\n  projectSettingsSchema,\n  projectTagSchema,\n  promptBaseSchema,\n  promptBlockDataSchema,\n  promptDataSchema,\n  promptLogIdLiteralSchema,\n  promptOptionsSchema,\n  promptSchema,\n  promptSessionEventSchema,\n  promptSessionSchema,\n  repoInfoSchema,\n  resourcesSchema,\n  responseFormatJsonSchemaSchema,\n  responseFormatSchema,\n  roleSchema,\n  runEvalSchema,\n  runtimeContextSchema,\n  savedFunctionIdSchema,\n  scoreSchema,\n  spanAttributesSchema,\n  spanFieldOrderItem,\n  spanIframeBaseSchema,\n  spanIframeSchema,\n  spanTypeSchema,\n  sseConsoleEventDataSchema,\n  sseConsoleEventSchema,\n  sseDataEventSchema,\n  sseDoneEventSchema,\n  sseErrorEventSchema,\n  sseMetaEventDataSchema,\n  sseMetaEventSchema,\n  sseProgressEventDataSchema,\n  sseProgressEventSchema,\n  sseStartEventSchema,\n  sseTextEventSchema,\n  startingAfterSchema,\n  stopFunctionSchema,\n  streamingModeEnum,\n  strictPromptDataSchema,\n  summarizeDataParamSchema,\n  summarizeScoresParamSchema,\n  toolFunctionDefinitionSchema,\n  toolsSchema,\n  uploadStatusSchema,\n  useFunctionSchema,\n  userSchema,\n  validRuntimesEnum,\n  versionSchema,\n  viewDataSchema,\n  viewDataSearchSchema,\n  viewOptionsSchema,\n  viewSchema,\n  viewTypeEnum\n};\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar headers_exports = {};\n__export(headers_exports, {\n  CITY_HEADER_NAME: () => CITY_HEADER_NAME,\n  COUNTRY_HEADER_NAME: () => COUNTRY_HEADER_NAME,\n  EMOJI_FLAG_UNICODE_STARTING_POSITION: () => EMOJI_FLAG_UNICODE_STARTING_POSITION,\n  IP_HEADER_NAME: () => IP_HEADER_NAME,\n  LATITUDE_HEADER_NAME: () => LATITUDE_HEADER_NAME,\n  LONGITUDE_HEADER_NAME: () => LONGITUDE_HEADER_NAME,\n  POSTAL_CODE_HEADER_NAME: () => POSTAL_CODE_HEADER_NAME,\n  REGION_HEADER_NAME: () => REGION_HEADER_NAME,\n  REQUEST_ID_HEADER_NAME: () => REQUEST_ID_HEADER_NAME,\n  geolocation: () => geolocation,\n  ipAddress: () => ipAddress\n});\nmodule.exports = __toCommonJS(headers_exports);\nconst CITY_HEADER_NAME = \"x-vercel-ip-city\";\nconst COUNTRY_HEADER_NAME = \"x-vercel-ip-country\";\nconst IP_HEADER_NAME = \"x-real-ip\";\nconst LATITUDE_HEADER_NAME = \"x-vercel-ip-latitude\";\nconst LONGITUDE_HEADER_NAME = \"x-vercel-ip-longitude\";\nconst REGION_HEADER_NAME = \"x-vercel-ip-country-region\";\nconst POSTAL_CODE_HEADER_NAME = \"x-vercel-ip-postal-code\";\nconst REQUEST_ID_HEADER_NAME = \"x-vercel-id\";\nconst EMOJI_FLAG_UNICODE_STARTING_POSITION = 127397;\nfunction getHeader(headers, key) {\n  return headers.get(key) ?? void 0;\n}\nfunction getHeaderWithDecode(request, key) {\n  const header = getHeader(request.headers, key);\n  return header ? decodeURIComponent(header) : void 0;\n}\nfunction getFlag(countryCode) {\n  const regex = new RegExp(\"^[A-Z]{2}$\").test(countryCode);\n  if (!countryCode || !regex)\n    return void 0;\n  return String.fromCodePoint(\n    ...countryCode.split(\"\").map((char) => EMOJI_FLAG_UNICODE_STARTING_POSITION + char.charCodeAt(0))\n  );\n}\nfunction ipAddress(input) {\n  const headers = \"headers\" in input ? input.headers : input;\n  return getHeader(headers, IP_HEADER_NAME);\n}\nfunction getRegionFromRequestId(requestId) {\n  if (!requestId) {\n    return \"dev1\";\n  }\n  return requestId.split(\":\")[0];\n}\nfunction geolocation(request) {\n  return {\n    // city name may be encoded to support multi-byte characters\n    city: getHeaderWithDecode(request, CITY_HEADER_NAME),\n    country: getHeader(request.headers, COUNTRY_HEADER_NAME),\n    flag: getFlag(getHeader(request.headers, COUNTRY_HEADER_NAME)),\n    countryRegion: getHeader(request.headers, REGION_HEADER_NAME),\n    region: getRegionFromRequestId(\n      getHeader(request.headers, REQUEST_ID_HEADER_NAME)\n    ),\n    latitude: getHeader(request.headers, LATITUDE_HEADER_NAME),\n    longitude: getHeader(request.headers, LONGITUDE_HEADER_NAME),\n    postalCode: getHeader(request.headers, POSTAL_CODE_HEADER_NAME)\n  };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  CITY_HEADER_NAME,\n  COUNTRY_HEADER_NAME,\n  EMOJI_FLAG_UNICODE_STARTING_POSITION,\n  IP_HEADER_NAME,\n  LATITUDE_HEADER_NAME,\n  LONGITUDE_HEADER_NAME,\n  POSTAL_CODE_HEADER_NAME,\n  REGION_HEADER_NAME,\n  REQUEST_ID_HEADER_NAME,\n  geolocation,\n  ipAddress\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar get_env_exports = {};\n__export(get_env_exports, {\n  getEnv: () => getEnv\n});\nmodule.exports = __toCommonJS(get_env_exports);\nconst getEnv = (env = process.env) => ({\n  /**\n   * An indicator to show that System Environment Variables have been exposed to your project's Deployments.\n   * @example \"1\"\n   */\n  VERCEL: get(env, \"VERCEL\"),\n  /**\n   * An indicator that the code is running in a Continuous Integration environment.\n   * @example \"1\"\n   */\n  CI: get(env, \"CI\"),\n  /**\n   * The Environment that the app is deployed and running on.\n   * @example \"production\"\n   */\n  VERCEL_ENV: get(env, \"VERCEL_ENV\"),\n  /**\n   * The domain name of the generated deployment URL. The value does not include the protocol scheme https://.\n   * NOTE: This Variable cannot be used in conjunction with Standard Deployment Protection.\n   * @example \"*.vercel.app\"\n   */\n  VERCEL_URL: get(env, \"VERCEL_URL\"),\n  /**\n   * The domain name of the generated Git branch URL. The value does not include the protocol scheme https://.\n   * @example \"*-git-*.vercel.app\"\n   */\n  VERCEL_BRANCH_URL: get(env, \"VERCEL_BRANCH_URL\"),\n  /**\n   * A production domain name of the project. This is useful to reliably generate links that point to production such as OG-image URLs.\n   * The value does not include the protocol scheme https://.\n   * @example \"myproject.vercel.app\"\n   */\n  VERCEL_PROJECT_PRODUCTION_URL: get(env, \"VERCEL_PROJECT_PRODUCTION_URL\"),\n  /**\n   * The ID of the Region where the app is running.\n   *\n   * Possible values:\n   * - arn1 (Stockholm, Sweden)\n   * - bom1 (Mumbai, India)\n   * - cdg1 (Paris, France)\n   * - cle1 (Cleveland, USA)\n   * - cpt1 (Cape Town, South Africa)\n   * - dub1 (Dublin, Ireland)\n   * - fra1 (Frankfurt, Germany)\n   * - gru1 (São Paulo, Brazil)\n   * - hkg1 (Hong Kong)\n   * - hnd1 (Tokyo, Japan)\n   * - iad1 (Washington, D.C., USA)\n   * - icn1 (Seoul, South Korea)\n   * - kix1 (Osaka, Japan)\n   * - lhr1 (London, United Kingdom)\n   * - pdx1 (Portland, USA)\n   * - sfo1 (San Francisco, USA)\n   * - sin1 (Singapore)\n   * - syd1 (Sydney, Australia)\n   * - dev1 (Development Region)\n   *\n   * @example \"iad1\"\n   */\n  VERCEL_REGION: get(env, \"VERCEL_REGION\"),\n  /**\n   * The unique identifier for the deployment, which can be used to implement Skew Protection.\n   * @example \"dpl_7Gw5ZMBpQA8h9GF832KGp7nwbuh3\"\n   */\n  VERCEL_DEPLOYMENT_ID: get(env, \"VERCEL_DEPLOYMENT_ID\"),\n  /**\n   * When Skew Protection is enabled in Project Settings, this value is set to 1.\n   * @example \"1\"\n   */\n  VERCEL_SKEW_PROTECTION_ENABLED: get(env, \"VERCEL_SKEW_PROTECTION_ENABLED\"),\n  /**\n   * The Protection Bypass for Automation value, if the secret has been generated in the project's Deployment Protection settings.\n   */\n  VERCEL_AUTOMATION_BYPASS_SECRET: get(env, \"VERCEL_AUTOMATION_BYPASS_SECRET\"),\n  /**\n   * The Git Provider the deployment is triggered from.\n   * @example \"github\"\n   */\n  VERCEL_GIT_PROVIDER: get(env, \"VERCEL_GIT_PROVIDER\"),\n  /**\n   * The origin repository the deployment is triggered from.\n   * @example \"my-site\"\n   */\n  VERCEL_GIT_REPO_SLUG: get(env, \"VERCEL_GIT_REPO_SLUG\"),\n  /**\n   * The account that owns the repository the deployment is triggered from.\n   * @example \"acme\"\n   */\n  VERCEL_GIT_REPO_OWNER: get(env, \"VERCEL_GIT_REPO_OWNER\"),\n  /**\n   * The ID of the repository the deployment is triggered from.\n   * @example \"117716146\"\n   */\n  VERCEL_GIT_REPO_ID: get(env, \"VERCEL_GIT_REPO_ID\"),\n  /**\n   * The git branch of the commit the deployment was triggered by.\n   * @example \"improve-about-page\"\n   */\n  VERCEL_GIT_COMMIT_REF: get(env, \"VERCEL_GIT_COMMIT_REF\"),\n  /**\n   * The git SHA of the commit the deployment was triggered by.\n   * @example \"fa1eade47b73733d6312d5abfad33ce9e4068081\"\n   */\n  VERCEL_GIT_COMMIT_SHA: get(env, \"VERCEL_GIT_COMMIT_SHA\"),\n  /**\n   * The message attached to the commit the deployment was triggered by.\n   * @example \"Update about page\"\n   */\n  VERCEL_GIT_COMMIT_MESSAGE: get(env, \"VERCEL_GIT_COMMIT_MESSAGE\"),\n  /**\n   * The username attached to the author of the commit that the project was deployed by.\n   * @example \"johndoe\"\n   */\n  VERCEL_GIT_COMMIT_AUTHOR_LOGIN: get(env, \"VERCEL_GIT_COMMIT_AUTHOR_LOGIN\"),\n  /**\n   * The name attached to the author of the commit that the project was deployed by.\n   * @example \"John Doe\"\n   */\n  VERCEL_GIT_COMMIT_AUTHOR_NAME: get(env, \"VERCEL_GIT_COMMIT_AUTHOR_NAME\"),\n  /**\n   * The git SHA of the last successful deployment for the project and branch.\n   * NOTE: This Variable is only exposed when an Ignored Build Step is provided.\n   * @example \"fa1eade47b73733d6312d5abfad33ce9e4068080\"\n   */\n  VERCEL_GIT_PREVIOUS_SHA: get(env, \"VERCEL_GIT_PREVIOUS_SHA\"),\n  /**\n   * The pull request id the deployment was triggered by. If a deployment is created on a branch before a pull request is made, this value will be an empty string.\n   * @example \"23\"\n   */\n  VERCEL_GIT_PULL_REQUEST_ID: get(env, \"VERCEL_GIT_PULL_REQUEST_ID\")\n});\nconst get = (env, key) => {\n  const value = env[key];\n  return value === \"\" ? void 0 : value;\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  getEnv\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar get_context_exports = {};\n__export(get_context_exports, {\n  SYMBOL_FOR_REQ_CONTEXT: () => SYMBOL_FOR_REQ_CONTEXT,\n  getContext: () => getContext\n});\nmodule.exports = __toCommonJS(get_context_exports);\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for(\"@vercel/request-context\");\nfunction getContext() {\n  const fromSymbol = globalThis;\n  return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  SYMBOL_FOR_REQ_CONTEXT,\n  getContext\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar wait_until_exports = {};\n__export(wait_until_exports, {\n  waitUntil: () => waitUntil\n});\nmodule.exports = __toCommonJS(wait_until_exports);\nvar import_get_context = require(\"./get-context\");\nconst waitUntil = (promise) => {\n  if (promise === null || typeof promise !== \"object\" || typeof promise.then !== \"function\") {\n    throw new TypeError(\n      `waitUntil can only be called with a Promise, got ${typeof promise}`\n    );\n  }\n  return (0, import_get_context.getContext)().waitUntil?.(promise);\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  waitUntil\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar middleware_exports = {};\n__export(middleware_exports, {\n  next: () => next,\n  rewrite: () => rewrite\n});\nmodule.exports = __toCommonJS(middleware_exports);\nfunction handleMiddlewareField(init, headers) {\n  if (init?.request?.headers) {\n    if (!(init.request.headers instanceof Headers)) {\n      throw new Error(\"request.headers must be an instance of Headers\");\n    }\n    const keys = [];\n    for (const [key, value] of init.request.headers) {\n      headers.set(\"x-middleware-request-\" + key, value);\n      keys.push(key);\n    }\n    headers.set(\"x-middleware-override-headers\", keys.join(\",\"));\n  }\n}\nfunction rewrite(destination, init) {\n  const headers = new Headers(init?.headers ?? {});\n  headers.set(\"x-middleware-rewrite\", String(destination));\n  handleMiddlewareField(init, headers);\n  return new Response(null, {\n    ...init,\n    headers\n  });\n}\nfunction next(init) {\n  const headers = new Headers(init?.headers ?? {});\n  headers.set(\"x-middleware-next\", \"1\");\n  handleMiddlewareField(init, headers);\n  return new Response(null, {\n    ...init,\n    headers\n  });\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  next,\n  rewrite\n});\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n  geolocation: () => import_headers.geolocation,\n  getEnv: () => import_get_env.getEnv,\n  ipAddress: () => import_headers.ipAddress,\n  next: () => import_middleware.next,\n  rewrite: () => import_middleware.rewrite,\n  waitUntil: () => import_wait_until.waitUntil\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_headers = require(\"./headers\");\nvar import_get_env = require(\"./get-env\");\nvar import_wait_until = require(\"./wait-until\");\nvar import_middleware = require(\"./middleware\");\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  geolocation,\n  getEnv,\n  ipAddress,\n  next,\n  rewrite,\n  waitUntil\n});\n","/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\nvar objectToString = Object.prototype.toString;\nvar isArray = Array.isArray || function isArrayPolyfill (object) {\n  return objectToString.call(object) === '[object Array]';\n};\n\nfunction isFunction (object) {\n  return typeof object === 'function';\n}\n\n/**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\nfunction typeStr (obj) {\n  return isArray(obj) ? 'array' : typeof obj;\n}\n\nfunction escapeRegExp (string) {\n  return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\nfunction hasProperty (obj, propName) {\n  return obj != null && typeof obj === 'object' && (propName in obj);\n}\n\n/**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\nfunction primitiveHasOwnProperty (primitive, propName) {\n  return (\n    primitive != null\n    && typeof primitive !== 'object'\n    && primitive.hasOwnProperty\n    && primitive.hasOwnProperty(propName)\n  );\n}\n\n// Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n// See https://github.com/janl/mustache.js/issues/189\nvar regExpTest = RegExp.prototype.test;\nfunction testRegExp (re, string) {\n  return regExpTest.call(re, string);\n}\n\nvar nonSpaceRe = /\\S/;\nfunction isWhitespace (string) {\n  return !testRegExp(nonSpaceRe, string);\n}\n\nvar entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;',\n  '`': '&#x60;',\n  '=': '&#x3D;'\n};\n\nfunction escapeHtml (string) {\n  return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n    return entityMap[s];\n  });\n}\n\nvar whiteRe = /\\s*/;\nvar spaceRe = /\\s+/;\nvar equalsRe = /\\s*=/;\nvar curlyRe = /\\s*\\}/;\nvar tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n/**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\nfunction parseTemplate (template, tags) {\n  if (!template)\n    return [];\n  var lineHasNonSpace = false;\n  var sections = [];     // Stack to hold section tokens\n  var tokens = [];       // Buffer to hold the tokens\n  var spaces = [];       // Indices of whitespace tokens on the current line\n  var hasTag = false;    // Is there a {{tag}} on the current line?\n  var nonSpace = false;  // Is there a non-space char on the current line?\n  var indentation = '';  // Tracks indentation for tags that use it\n  var tagIndex = 0;      // Stores a count of number of tags encountered on a line\n\n  // Strips all whitespace tokens array for the current line\n  // if there was a {{#tag}} on it and otherwise only space.\n  function stripSpace () {\n    if (hasTag && !nonSpace) {\n      while (spaces.length)\n        delete tokens[spaces.pop()];\n    } else {\n      spaces = [];\n    }\n\n    hasTag = false;\n    nonSpace = false;\n  }\n\n  var openingTagRe, closingTagRe, closingCurlyRe;\n  function compileTags (tagsToCompile) {\n    if (typeof tagsToCompile === 'string')\n      tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n    if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n      throw new Error('Invalid tags: ' + tagsToCompile);\n\n    openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n    closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n    closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n  }\n\n  compileTags(tags || mustache.tags);\n\n  var scanner = new Scanner(template);\n\n  var start, type, value, chr, token, openSection;\n  while (!scanner.eos()) {\n    start = scanner.pos;\n\n    // Match any text between tags.\n    value = scanner.scanUntil(openingTagRe);\n\n    if (value) {\n      for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n        chr = value.charAt(i);\n\n        if (isWhitespace(chr)) {\n          spaces.push(tokens.length);\n          indentation += chr;\n        } else {\n          nonSpace = true;\n          lineHasNonSpace = true;\n          indentation += ' ';\n        }\n\n        tokens.push([ 'text', chr, start, start + 1 ]);\n        start += 1;\n\n        // Check for whitespace on the current line.\n        if (chr === '\\n') {\n          stripSpace();\n          indentation = '';\n          tagIndex = 0;\n          lineHasNonSpace = false;\n        }\n      }\n    }\n\n    // Match the opening tag.\n    if (!scanner.scan(openingTagRe))\n      break;\n\n    hasTag = true;\n\n    // Get the tag type.\n    type = scanner.scan(tagRe) || 'name';\n    scanner.scan(whiteRe);\n\n    // Get the tag value.\n    if (type === '=') {\n      value = scanner.scanUntil(equalsRe);\n      scanner.scan(equalsRe);\n      scanner.scanUntil(closingTagRe);\n    } else if (type === '{') {\n      value = scanner.scanUntil(closingCurlyRe);\n      scanner.scan(curlyRe);\n      scanner.scanUntil(closingTagRe);\n      type = '&';\n    } else {\n      value = scanner.scanUntil(closingTagRe);\n    }\n\n    // Match the closing tag.\n    if (!scanner.scan(closingTagRe))\n      throw new Error('Unclosed tag at ' + scanner.pos);\n\n    if (type == '>') {\n      token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n    } else {\n      token = [ type, value, start, scanner.pos ];\n    }\n    tagIndex++;\n    tokens.push(token);\n\n    if (type === '#' || type === '^') {\n      sections.push(token);\n    } else if (type === '/') {\n      // Check section nesting.\n      openSection = sections.pop();\n\n      if (!openSection)\n        throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n      if (openSection[1] !== value)\n        throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n    } else if (type === 'name' || type === '{' || type === '&') {\n      nonSpace = true;\n    } else if (type === '=') {\n      // Set the tags for the next time around.\n      compileTags(value);\n    }\n  }\n\n  stripSpace();\n\n  // Make sure there are no open sections when we're done.\n  openSection = sections.pop();\n\n  if (openSection)\n    throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n  return nestTokens(squashTokens(tokens));\n}\n\n/**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\nfunction squashTokens (tokens) {\n  var squashedTokens = [];\n\n  var token, lastToken;\n  for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n    token = tokens[i];\n\n    if (token) {\n      if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n        lastToken[1] += token[1];\n        lastToken[3] = token[3];\n      } else {\n        squashedTokens.push(token);\n        lastToken = token;\n      }\n    }\n  }\n\n  return squashedTokens;\n}\n\n/**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\nfunction nestTokens (tokens) {\n  var nestedTokens = [];\n  var collector = nestedTokens;\n  var sections = [];\n\n  var token, section;\n  for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n    token = tokens[i];\n\n    switch (token[0]) {\n      case '#':\n      case '^':\n        collector.push(token);\n        sections.push(token);\n        collector = token[4] = [];\n        break;\n      case '/':\n        section = sections.pop();\n        section[5] = token[2];\n        collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n        break;\n      default:\n        collector.push(token);\n    }\n  }\n\n  return nestedTokens;\n}\n\n/**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\nfunction Scanner (string) {\n  this.string = string;\n  this.tail = string;\n  this.pos = 0;\n}\n\n/**\n * Returns `true` if the tail is empty (end of string).\n */\nScanner.prototype.eos = function eos () {\n  return this.tail === '';\n};\n\n/**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\nScanner.prototype.scan = function scan (re) {\n  var match = this.tail.match(re);\n\n  if (!match || match.index !== 0)\n    return '';\n\n  var string = match[0];\n\n  this.tail = this.tail.substring(string.length);\n  this.pos += string.length;\n\n  return string;\n};\n\n/**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\nScanner.prototype.scanUntil = function scanUntil (re) {\n  var index = this.tail.search(re), match;\n\n  switch (index) {\n    case -1:\n      match = this.tail;\n      this.tail = '';\n      break;\n    case 0:\n      match = '';\n      break;\n    default:\n      match = this.tail.substring(0, index);\n      this.tail = this.tail.substring(index);\n  }\n\n  this.pos += match.length;\n\n  return match;\n};\n\n/**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\nfunction Context (view, parentContext) {\n  this.view = view;\n  this.cache = { '.': this.view };\n  this.parent = parentContext;\n}\n\n/**\n * Creates a new context using the given view with this context\n * as the parent.\n */\nContext.prototype.push = function push (view) {\n  return new Context(view, this);\n};\n\n/**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\nContext.prototype.lookup = function lookup (name) {\n  var cache = this.cache;\n\n  var value;\n  if (cache.hasOwnProperty(name)) {\n    value = cache[name];\n  } else {\n    var context = this, intermediateValue, names, index, lookupHit = false;\n\n    while (context) {\n      if (name.indexOf('.') > 0) {\n        intermediateValue = context.view;\n        names = name.split('.');\n        index = 0;\n\n        /**\n         * Using the dot notion path in `name`, we descend through the\n         * nested objects.\n         *\n         * To be certain that the lookup has been successful, we have to\n         * check if the last object in the path actually has the property\n         * we are looking for. We store the result in `lookupHit`.\n         *\n         * This is specially necessary for when the value has been set to\n         * `undefined` and we want to avoid looking up parent contexts.\n         *\n         * In the case where dot notation is used, we consider the lookup\n         * to be successful even if the last \"object\" in the path is\n         * not actually an object but a primitive (e.g., a string, or an\n         * integer), because it is sometimes useful to access a property\n         * of an autoboxed primitive, such as the length of a string.\n         **/\n        while (intermediateValue != null && index < names.length) {\n          if (index === names.length - 1)\n            lookupHit = (\n              hasProperty(intermediateValue, names[index])\n              || primitiveHasOwnProperty(intermediateValue, names[index])\n            );\n\n          intermediateValue = intermediateValue[names[index++]];\n        }\n      } else {\n        intermediateValue = context.view[name];\n\n        /**\n         * Only checking against `hasProperty`, which always returns `false` if\n         * `context.view` is not an object. Deliberately omitting the check\n         * against `primitiveHasOwnProperty` if dot notation is not used.\n         *\n         * Consider this example:\n         * ```\n         * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n         * ```\n         *\n         * If we were to check also against `primitiveHasOwnProperty`, as we do\n         * in the dot notation case, then render call would return:\n         *\n         * \"The length of a football field is 9.\"\n         *\n         * rather than the expected:\n         *\n         * \"The length of a football field is 100 yards.\"\n         **/\n        lookupHit = hasProperty(context.view, name);\n      }\n\n      if (lookupHit) {\n        value = intermediateValue;\n        break;\n      }\n\n      context = context.parent;\n    }\n\n    cache[name] = value;\n  }\n\n  if (isFunction(value))\n    value = value.call(this.view);\n\n  return value;\n};\n\n/**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\nfunction Writer () {\n  this.templateCache = {\n    _cache: {},\n    set: function set (key, value) {\n      this._cache[key] = value;\n    },\n    get: function get (key) {\n      return this._cache[key];\n    },\n    clear: function clear () {\n      this._cache = {};\n    }\n  };\n}\n\n/**\n * Clears all cached templates in this writer.\n */\nWriter.prototype.clearCache = function clearCache () {\n  if (typeof this.templateCache !== 'undefined') {\n    this.templateCache.clear();\n  }\n};\n\n/**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted,  and returns the array of tokens\n * that is generated from the parse.\n */\nWriter.prototype.parse = function parse (template, tags) {\n  var cache = this.templateCache;\n  var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n  var isCacheEnabled = typeof cache !== 'undefined';\n  var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n  if (tokens == undefined) {\n    tokens = parseTemplate(template, tags);\n    isCacheEnabled && cache.set(cacheKey, tokens);\n  }\n  return tokens;\n};\n\n/**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\nWriter.prototype.render = function render (template, view, partials, config) {\n  var tags = this.getConfigTags(config);\n  var tokens = this.parse(template, tags);\n  var context = (view instanceof Context) ? view : new Context(view, undefined);\n  return this.renderTokens(tokens, context, partials, template, config);\n};\n\n/**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\nWriter.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n  var buffer = '';\n\n  var token, symbol, value;\n  for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n    value = undefined;\n    token = tokens[i];\n    symbol = token[0];\n\n    if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n    else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n    else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n    else if (symbol === '&') value = this.unescapedValue(token, context);\n    else if (symbol === 'name') value = this.escapedValue(token, context, config);\n    else if (symbol === 'text') value = this.rawValue(token);\n\n    if (value !== undefined)\n      buffer += value;\n  }\n\n  return buffer;\n};\n\nWriter.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n  var self = this;\n  var buffer = '';\n  var value = context.lookup(token[1]);\n\n  // This function is used to render an arbitrary template\n  // in the current context by higher-order sections.\n  function subRender (template) {\n    return self.render(template, context, partials, config);\n  }\n\n  if (!value) return;\n\n  if (isArray(value)) {\n    for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n      buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n    }\n  } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n    buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n  } else if (isFunction(value)) {\n    if (typeof originalTemplate !== 'string')\n      throw new Error('Cannot use higher-order sections without the original template');\n\n    // Extract the portion of the original template that the section contains.\n    value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n    if (value != null)\n      buffer += value;\n  } else {\n    buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n  }\n  return buffer;\n};\n\nWriter.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n  var value = context.lookup(token[1]);\n\n  // Use JavaScript's definition of falsy. Include empty arrays.\n  // See https://github.com/janl/mustache.js/issues/186\n  if (!value || (isArray(value) && value.length === 0))\n    return this.renderTokens(token[4], context, partials, originalTemplate, config);\n};\n\nWriter.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n  var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n  var partialByNl = partial.split('\\n');\n  for (var i = 0; i < partialByNl.length; i++) {\n    if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n      partialByNl[i] = filteredIndentation + partialByNl[i];\n    }\n  }\n  return partialByNl.join('\\n');\n};\n\nWriter.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n  if (!partials) return;\n  var tags = this.getConfigTags(config);\n\n  var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n  if (value != null) {\n    var lineHasNonSpace = token[6];\n    var tagIndex = token[5];\n    var indentation = token[4];\n    var indentedValue = value;\n    if (tagIndex == 0 && indentation) {\n      indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n    }\n    var tokens = this.parse(indentedValue, tags);\n    return this.renderTokens(tokens, context, partials, indentedValue, config);\n  }\n};\n\nWriter.prototype.unescapedValue = function unescapedValue (token, context) {\n  var value = context.lookup(token[1]);\n  if (value != null)\n    return value;\n};\n\nWriter.prototype.escapedValue = function escapedValue (token, context, config) {\n  var escape = this.getConfigEscape(config) || mustache.escape;\n  var value = context.lookup(token[1]);\n  if (value != null)\n    return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n};\n\nWriter.prototype.rawValue = function rawValue (token) {\n  return token[1];\n};\n\nWriter.prototype.getConfigTags = function getConfigTags (config) {\n  if (isArray(config)) {\n    return config;\n  }\n  else if (config && typeof config === 'object') {\n    return config.tags;\n  }\n  else {\n    return undefined;\n  }\n};\n\nWriter.prototype.getConfigEscape = function getConfigEscape (config) {\n  if (config && typeof config === 'object' && !isArray(config)) {\n    return config.escape;\n  }\n  else {\n    return undefined;\n  }\n};\n\nvar mustache = {\n  name: 'mustache.js',\n  version: '4.2.0',\n  tags: [ '{{', '}}' ],\n  clearCache: undefined,\n  escape: undefined,\n  parse: undefined,\n  render: undefined,\n  Scanner: undefined,\n  Context: undefined,\n  Writer: undefined,\n  /**\n   * Allows a user to override the default caching strategy, by providing an\n   * object with set, get and clear methods. This can also be used to disable\n   * the cache by setting it to the literal `undefined`.\n   */\n  set templateCache (cache) {\n    defaultWriter.templateCache = cache;\n  },\n  /**\n   * Gets the default or overridden caching object from the default writer.\n   */\n  get templateCache () {\n    return defaultWriter.templateCache;\n  }\n};\n\n// All high-level mustache.* functions use this writer.\nvar defaultWriter = new Writer();\n\n/**\n * Clears all cached templates in the default writer.\n */\nmustache.clearCache = function clearCache () {\n  return defaultWriter.clearCache();\n};\n\n/**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\nmustache.parse = function parse (template, tags) {\n  return defaultWriter.parse(template, tags);\n};\n\n/**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\nmustache.render = function render (template, view, partials, config) {\n  if (typeof template !== 'string') {\n    throw new TypeError('Invalid template! Template should be a \"string\" ' +\n                        'but \"' + typeStr(template) + '\" was given as the first ' +\n                        'argument for mustache#render(template, view, partials)');\n  }\n\n  return defaultWriter.render(template, view, partials, config);\n};\n\n// Export the escaping function so that the user may override it.\n// See https://github.com/janl/mustache.js/issues/244\nmustache.escape = escapeHtml;\n\n// Export these mainly for testing, but also for advanced usage.\nmustache.Scanner = Scanner;\nmustache.Context = Context;\nmustache.Writer = Writer;\n\nexport default mustache;\n","/**\n * EventSource/Server-Sent Events parser\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html\n *\n * Based on code from the {@link https://github.com/EventSource/eventsource | EventSource module},\n * which is licensed under the MIT license. And copyrighted the EventSource GitHub organisation.\n */\nimport type {EventSourceParseCallback, EventSourceParser} from './types.js'\n\n/**\n * Creates a new EventSource parser.\n *\n * @param onParse - Callback to invoke when a new event is parsed, or a new reconnection interval\n *                  has been sent from the server\n *\n * @returns A new EventSource parser, with `parse` and `reset` methods.\n * @public\n */\nexport function createParser(onParse: EventSourceParseCallback): EventSourceParser {\n  // Processing state\n  let isFirstChunk: boolean\n  let buffer: string\n  let startingPosition: number\n  let startingFieldLength: number\n\n  // Event state\n  let eventId: string | undefined\n  let eventName: string | undefined\n  let data: string\n\n  reset()\n  return {feed, reset}\n\n  function reset(): void {\n    isFirstChunk = true\n    buffer = ''\n    startingPosition = 0\n    startingFieldLength = -1\n\n    eventId = undefined\n    eventName = undefined\n    data = ''\n  }\n\n  function feed(chunk: string): void {\n    buffer = buffer ? buffer + chunk : chunk\n\n    // Strip any UTF8 byte order mark (BOM) at the start of the stream.\n    // Note that we do not strip any non - UTF8 BOM, as eventsource streams are\n    // always decoded as UTF8 as per the specification.\n    if (isFirstChunk && hasBom(buffer)) {\n      buffer = buffer.slice(BOM.length)\n    }\n\n    isFirstChunk = false\n\n    // Set up chunk-specific processing state\n    const length = buffer.length\n    let position = 0\n    let discardTrailingNewline = false\n\n    // Read the current buffer byte by byte\n    while (position < length) {\n      // EventSource allows for carriage return + line feed, which means we\n      // need to ignore a linefeed character if the previous character was a\n      // carriage return\n      // @todo refactor to reduce nesting, consider checking previous byte?\n      // @todo but consider multiple chunks etc\n      if (discardTrailingNewline) {\n        if (buffer[position] === '\\n') {\n          ++position\n        }\n        discardTrailingNewline = false\n      }\n\n      let lineLength = -1\n      let fieldLength = startingFieldLength\n      let character: string\n\n      for (let index = startingPosition; lineLength < 0 && index < length; ++index) {\n        character = buffer[index]\n        if (character === ':' && fieldLength < 0) {\n          fieldLength = index - position\n        } else if (character === '\\r') {\n          discardTrailingNewline = true\n          lineLength = index - position\n        } else if (character === '\\n') {\n          lineLength = index - position\n        }\n      }\n\n      if (lineLength < 0) {\n        startingPosition = length - position\n        startingFieldLength = fieldLength\n        break\n      } else {\n        startingPosition = 0\n        startingFieldLength = -1\n      }\n\n      parseEventStreamLine(buffer, position, fieldLength, lineLength)\n\n      position += lineLength + 1\n    }\n\n    if (position === length) {\n      // If we consumed the entire buffer to read the event, reset the buffer\n      buffer = ''\n    } else if (position > 0) {\n      // If there are bytes left to process, set the buffer to the unprocessed\n      // portion of the buffer only\n      buffer = buffer.slice(position)\n    }\n  }\n\n  function parseEventStreamLine(\n    lineBuffer: string,\n    index: number,\n    fieldLength: number,\n    lineLength: number,\n  ) {\n    if (lineLength === 0) {\n      // We reached the last line of this event\n      if (data.length > 0) {\n        onParse({\n          type: 'event',\n          id: eventId,\n          event: eventName || undefined,\n          data: data.slice(0, -1), // remove trailing newline\n        })\n\n        data = ''\n        eventId = undefined\n      }\n      eventName = undefined\n      return\n    }\n\n    const noValue = fieldLength < 0\n    const field = lineBuffer.slice(index, index + (noValue ? lineLength : fieldLength))\n    let step = 0\n\n    if (noValue) {\n      step = lineLength\n    } else if (lineBuffer[index + fieldLength + 1] === ' ') {\n      step = fieldLength + 2\n    } else {\n      step = fieldLength + 1\n    }\n\n    const position = index + step\n    const valueLength = lineLength - step\n    const value = lineBuffer.slice(position, position + valueLength).toString()\n\n    if (field === 'data') {\n      data += value ? `${value}\\n` : '\\n'\n    } else if (field === 'event') {\n      eventName = value\n    } else if (field === 'id' && !value.includes('\\u0000')) {\n      eventId = value\n    } else if (field === 'retry') {\n      const retry = parseInt(value, 10)\n      if (!Number.isNaN(retry)) {\n        onParse({type: 'reconnect-interval', value: retry})\n      }\n    }\n  }\n}\n\nconst BOM = [239, 187, 191]\n\nfunction hasBom(buffer: string) {\n  return BOM.every((charCode: number, index: number) => buffer.charCodeAt(index) === charCode)\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v;  g = n;  b = wh; break;\n\t\tcase 1: r = n;  g = v;  b = wh; break;\n\t\tcase 2: r = wh; g = v;  b = n; break;\n\t\tcase 3: r = wh; g = n;  b = v; break;\n\t\tcase 4: r = n;  g = wh; b = v; break;\n\t\tcase 5: r = v;  g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","/* global define */\n\n(function (root, pluralize) {\n  /* istanbul ignore else */\n  if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n    // Node.\n    module.exports = pluralize();\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD, registers as an anonymous module.\n    define(function () {\n      return pluralize();\n    });\n  } else {\n    // Browser global.\n    root.pluralize = pluralize();\n  }\n})(this, function () {\n  // Rule storage - pluralize and singularize need to be run sequentially,\n  // while other rules can be optimized using an object for instant lookups.\n  var pluralRules = [];\n  var singularRules = [];\n  var uncountables = {};\n  var irregularPlurals = {};\n  var irregularSingles = {};\n\n  /**\n   * Sanitize a pluralization rule to a usable regular expression.\n   *\n   * @param  {(RegExp|string)} rule\n   * @return {RegExp}\n   */\n  function sanitizeRule (rule) {\n    if (typeof rule === 'string') {\n      return new RegExp('^' + rule + '$', 'i');\n    }\n\n    return rule;\n  }\n\n  /**\n   * Pass in a word token to produce a function that can replicate the case on\n   * another word.\n   *\n   * @param  {string}   word\n   * @param  {string}   token\n   * @return {Function}\n   */\n  function restoreCase (word, token) {\n    // Tokens are an exact match.\n    if (word === token) return token;\n\n    // Lower cased words. E.g. \"hello\".\n    if (word === word.toLowerCase()) return token.toLowerCase();\n\n    // Upper cased words. E.g. \"WHISKY\".\n    if (word === word.toUpperCase()) return token.toUpperCase();\n\n    // Title cased words. E.g. \"Title\".\n    if (word[0] === word[0].toUpperCase()) {\n      return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n    }\n\n    // Lower cased words. E.g. \"test\".\n    return token.toLowerCase();\n  }\n\n  /**\n   * Interpolate a regexp string.\n   *\n   * @param  {string} str\n   * @param  {Array}  args\n   * @return {string}\n   */\n  function interpolate (str, args) {\n    return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n      return args[index] || '';\n    });\n  }\n\n  /**\n   * Replace a word using a rule.\n   *\n   * @param  {string} word\n   * @param  {Array}  rule\n   * @return {string}\n   */\n  function replace (word, rule) {\n    return word.replace(rule[0], function (match, index) {\n      var result = interpolate(rule[1], arguments);\n\n      if (match === '') {\n        return restoreCase(word[index - 1], result);\n      }\n\n      return restoreCase(match, result);\n    });\n  }\n\n  /**\n   * Sanitize a word by passing in the word and sanitization rules.\n   *\n   * @param  {string}   token\n   * @param  {string}   word\n   * @param  {Array}    rules\n   * @return {string}\n   */\n  function sanitizeWord (token, word, rules) {\n    // Empty string or doesn't need fixing.\n    if (!token.length || uncountables.hasOwnProperty(token)) {\n      return word;\n    }\n\n    var len = rules.length;\n\n    // Iterate over the sanitization rules and use the first one to match.\n    while (len--) {\n      var rule = rules[len];\n\n      if (rule[0].test(word)) return replace(word, rule);\n    }\n\n    return word;\n  }\n\n  /**\n   * Replace a word with the updated word.\n   *\n   * @param  {Object}   replaceMap\n   * @param  {Object}   keepMap\n   * @param  {Array}    rules\n   * @return {Function}\n   */\n  function replaceWord (replaceMap, keepMap, rules) {\n    return function (word) {\n      // Get the correct token and case restoration functions.\n      var token = word.toLowerCase();\n\n      // Check against the keep object map.\n      if (keepMap.hasOwnProperty(token)) {\n        return restoreCase(word, token);\n      }\n\n      // Check against the replacement map for a direct word replacement.\n      if (replaceMap.hasOwnProperty(token)) {\n        return restoreCase(word, replaceMap[token]);\n      }\n\n      // Run all the rules against the word.\n      return sanitizeWord(token, word, rules);\n    };\n  }\n\n  /**\n   * Check if a word is part of the map.\n   */\n  function checkWord (replaceMap, keepMap, rules, bool) {\n    return function (word) {\n      var token = word.toLowerCase();\n\n      if (keepMap.hasOwnProperty(token)) return true;\n      if (replaceMap.hasOwnProperty(token)) return false;\n\n      return sanitizeWord(token, token, rules) === token;\n    };\n  }\n\n  /**\n   * Pluralize or singularize a word based on the passed in count.\n   *\n   * @param  {string}  word      The word to pluralize\n   * @param  {number}  count     How many of the word exist\n   * @param  {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n   * @return {string}\n   */\n  function pluralize (word, count, inclusive) {\n    var pluralized = count === 1\n      ? pluralize.singular(word) : pluralize.plural(word);\n\n    return (inclusive ? count + ' ' : '') + pluralized;\n  }\n\n  /**\n   * Pluralize a word.\n   *\n   * @type {Function}\n   */\n  pluralize.plural = replaceWord(\n    irregularSingles, irregularPlurals, pluralRules\n  );\n\n  /**\n   * Check if a word is plural.\n   *\n   * @type {Function}\n   */\n  pluralize.isPlural = checkWord(\n    irregularSingles, irregularPlurals, pluralRules\n  );\n\n  /**\n   * Singularize a word.\n   *\n   * @type {Function}\n   */\n  pluralize.singular = replaceWord(\n    irregularPlurals, irregularSingles, singularRules\n  );\n\n  /**\n   * Check if a word is singular.\n   *\n   * @type {Function}\n   */\n  pluralize.isSingular = checkWord(\n    irregularPlurals, irregularSingles, singularRules\n  );\n\n  /**\n   * Add a pluralization rule to the collection.\n   *\n   * @param {(string|RegExp)} rule\n   * @param {string}          replacement\n   */\n  pluralize.addPluralRule = function (rule, replacement) {\n    pluralRules.push([sanitizeRule(rule), replacement]);\n  };\n\n  /**\n   * Add a singularization rule to the collection.\n   *\n   * @param {(string|RegExp)} rule\n   * @param {string}          replacement\n   */\n  pluralize.addSingularRule = function (rule, replacement) {\n    singularRules.push([sanitizeRule(rule), replacement]);\n  };\n\n  /**\n   * Add an uncountable word rule.\n   *\n   * @param {(string|RegExp)} word\n   */\n  pluralize.addUncountableRule = function (word) {\n    if (typeof word === 'string') {\n      uncountables[word.toLowerCase()] = true;\n      return;\n    }\n\n    // Set singular and plural references for the word.\n    pluralize.addPluralRule(word, '$0');\n    pluralize.addSingularRule(word, '$0');\n  };\n\n  /**\n   * Add an irregular word definition.\n   *\n   * @param {string} single\n   * @param {string} plural\n   */\n  pluralize.addIrregularRule = function (single, plural) {\n    plural = plural.toLowerCase();\n    single = single.toLowerCase();\n\n    irregularSingles[single] = plural;\n    irregularPlurals[plural] = single;\n  };\n\n  /**\n   * Irregular rules.\n   */\n  [\n    // Pronouns.\n    ['I', 'we'],\n    ['me', 'us'],\n    ['he', 'they'],\n    ['she', 'they'],\n    ['them', 'them'],\n    ['myself', 'ourselves'],\n    ['yourself', 'yourselves'],\n    ['itself', 'themselves'],\n    ['herself', 'themselves'],\n    ['himself', 'themselves'],\n    ['themself', 'themselves'],\n    ['is', 'are'],\n    ['was', 'were'],\n    ['has', 'have'],\n    ['this', 'these'],\n    ['that', 'those'],\n    // Words ending in with a consonant and `o`.\n    ['echo', 'echoes'],\n    ['dingo', 'dingoes'],\n    ['volcano', 'volcanoes'],\n    ['tornado', 'tornadoes'],\n    ['torpedo', 'torpedoes'],\n    // Ends with `us`.\n    ['genus', 'genera'],\n    ['viscus', 'viscera'],\n    // Ends with `ma`.\n    ['stigma', 'stigmata'],\n    ['stoma', 'stomata'],\n    ['dogma', 'dogmata'],\n    ['lemma', 'lemmata'],\n    ['schema', 'schemata'],\n    ['anathema', 'anathemata'],\n    // Other irregular rules.\n    ['ox', 'oxen'],\n    ['axe', 'axes'],\n    ['die', 'dice'],\n    ['yes', 'yeses'],\n    ['foot', 'feet'],\n    ['eave', 'eaves'],\n    ['goose', 'geese'],\n    ['tooth', 'teeth'],\n    ['quiz', 'quizzes'],\n    ['human', 'humans'],\n    ['proof', 'proofs'],\n    ['carve', 'carves'],\n    ['valve', 'valves'],\n    ['looey', 'looies'],\n    ['thief', 'thieves'],\n    ['groove', 'grooves'],\n    ['pickaxe', 'pickaxes'],\n    ['passerby', 'passersby']\n  ].forEach(function (rule) {\n    return pluralize.addIrregularRule(rule[0], rule[1]);\n  });\n\n  /**\n   * Pluralization rules.\n   */\n  [\n    [/s?$/i, 's'],\n    [/[^\\u0000-\\u007F]$/i, '$0'],\n    [/([^aeiou]ese)$/i, '$1'],\n    [/(ax|test)is$/i, '$1es'],\n    [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n    [/(e[mn]u)s?$/i, '$1s'],\n    [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n    [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n    [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n    [/(seraph|cherub)(?:im)?$/i, '$1im'],\n    [/(her|at|gr)o$/i, '$1oes'],\n    [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n    [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n    [/sis$/i, 'ses'],\n    [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n    [/([^aeiouy]|qu)y$/i, '$1ies'],\n    [/([^ch][ieo][ln])ey$/i, '$1ies'],\n    [/(x|ch|ss|sh|zz)$/i, '$1es'],\n    [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n    [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n    [/(pe)(?:rson|ople)$/i, '$1ople'],\n    [/(child)(?:ren)?$/i, '$1ren'],\n    [/eaux$/i, '$0'],\n    [/m[ae]n$/i, 'men'],\n    ['thou', 'you']\n  ].forEach(function (rule) {\n    return pluralize.addPluralRule(rule[0], rule[1]);\n  });\n\n  /**\n   * Singularization rules.\n   */\n  [\n    [/s$/i, ''],\n    [/(ss)$/i, '$1'],\n    [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n    [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n    [/ies$/i, 'y'],\n    [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n    [/\\b(mon|smil)ies$/i, '$1ey'],\n    [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n    [/(seraph|cherub)im$/i, '$1'],\n    [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n    [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n    [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n    [/(test)(?:is|es)$/i, '$1is'],\n    [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n    [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n    [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n    [/(alumn|alg|vertebr)ae$/i, '$1a'],\n    [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n    [/(matr|append)ices$/i, '$1ix'],\n    [/(pe)(rson|ople)$/i, '$1rson'],\n    [/(child)ren$/i, '$1'],\n    [/(eau)x?$/i, '$1'],\n    [/men$/i, 'man']\n  ].forEach(function (rule) {\n    return pluralize.addSingularRule(rule[0], rule[1]);\n  });\n\n  /**\n   * Uncountable rules.\n   */\n  [\n    // Singular words with no plurals.\n    'adulthood',\n    'advice',\n    'agenda',\n    'aid',\n    'aircraft',\n    'alcohol',\n    'ammo',\n    'analytics',\n    'anime',\n    'athletics',\n    'audio',\n    'bison',\n    'blood',\n    'bream',\n    'buffalo',\n    'butter',\n    'carp',\n    'cash',\n    'chassis',\n    'chess',\n    'clothing',\n    'cod',\n    'commerce',\n    'cooperation',\n    'corps',\n    'debris',\n    'diabetes',\n    'digestion',\n    'elk',\n    'energy',\n    'equipment',\n    'excretion',\n    'expertise',\n    'firmware',\n    'flounder',\n    'fun',\n    'gallows',\n    'garbage',\n    'graffiti',\n    'hardware',\n    'headquarters',\n    'health',\n    'herpes',\n    'highjinks',\n    'homework',\n    'housework',\n    'information',\n    'jeans',\n    'justice',\n    'kudos',\n    'labour',\n    'literature',\n    'machinery',\n    'mackerel',\n    'mail',\n    'media',\n    'mews',\n    'moose',\n    'music',\n    'mud',\n    'manga',\n    'news',\n    'only',\n    'personnel',\n    'pike',\n    'plankton',\n    'pliers',\n    'police',\n    'pollution',\n    'premises',\n    'rain',\n    'research',\n    'rice',\n    'salmon',\n    'scissors',\n    'series',\n    'sewage',\n    'shambles',\n    'shrimp',\n    'software',\n    'species',\n    'staff',\n    'swine',\n    'tennis',\n    'traffic',\n    'transportation',\n    'trout',\n    'tuna',\n    'wealth',\n    'welfare',\n    'whiting',\n    'wildebeest',\n    'wildlife',\n    'you',\n    /pok[eé]mon$/i,\n    // Regexes.\n    /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n    /deer$/i, // \"deer\", \"reindeer\"\n    /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n    /measles$/i,\n    /o[iu]s$/i, // \"carnivorous\"\n    /pox$/i, // \"chickpox\", \"smallpox\"\n    /sheep$/i\n  ].forEach(pluralize.addUncountableRule);\n\n  return pluralize;\n});\n","\n// ETA calculation\nclass ETA{\n\n    constructor(length, initTime, initValue){\n        // size of eta buffer\n        this.etaBufferLength = length || 100;\n\n        // eta buffer with initial values\n        this.valueBuffer = [initValue];\n        this.timeBuffer = [initTime];\n\n        // eta time value\n        this.eta = '0';\n    }\n\n    // add new values to calculation buffer\n    update(time, value, total){\n        this.valueBuffer.push(value);\n        this.timeBuffer.push(time);\n\n        // trigger recalculation\n        this.calculate(total-value);\n    }\n\n    // fetch estimated time\n    getTime(){\n        return this.eta;\n    }\n\n    // eta calculation - request number of remaining events\n    calculate(remaining){\n        // get number of samples in eta buffer\n        const currentBufferSize = this.valueBuffer.length;\n        const buffer = Math.min(this.etaBufferLength, currentBufferSize);\n\n        const v_diff = this.valueBuffer[currentBufferSize - 1] - this.valueBuffer[currentBufferSize - buffer];\n        const t_diff = this.timeBuffer[currentBufferSize - 1] - this.timeBuffer[currentBufferSize - buffer];\n\n        // get progress per ms\n        const vt_rate = v_diff/t_diff;\n\n        // strip past elements\n        this.valueBuffer = this.valueBuffer.slice(-this.etaBufferLength);\n        this.timeBuffer  = this.timeBuffer.slice(-this.etaBufferLength);\n\n        // eq: vt_rate *x = total\n        const eta = Math.ceil(remaining/vt_rate/1000);\n\n        // check values\n        if (isNaN(eta)){\n            this.eta = 'NULL';\n\n        // +/- Infinity --- NaN already handled\n        }else if (!isFinite(eta)){\n            this.eta = 'INF';\n\n        // > 10M s ? - set upper display limit ~115days (1e7/60/60/24)\n        }else if (eta > 1e7){\n            this.eta = 'INF';\n\n        // negative ?\n        }else if (eta < 0){\n            this.eta = 0;\n\n        }else{\n            // assign\n            this.eta = eta;\n        }\n    }\n}\n\nmodule.exports = ETA;","const _readline = require('readline');\n\n// low-level terminal interactions\nclass Terminal{\n\n    constructor(outputStream){\n        this.stream = outputStream;\n\n        // default: line wrapping enabled\n        this.linewrap = true;\n\n        // current, relative y position\n        this.dy = 0;\n    }\n\n    // save cursor position + settings\n    cursorSave(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // save position\n        this.stream.write('\\x1B7');\n    }\n\n    // restore last cursor position + settings\n    cursorRestore(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // restore cursor\n        this.stream.write('\\x1B8');\n    }\n\n    // show/hide cursor\n    cursor(enabled){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        if (enabled){\n            this.stream.write('\\x1B[?25h');\n        }else{\n            this.stream.write('\\x1B[?25l');\n        }\n    }\n\n    // change cursor positionn\n    cursorTo(x=null, y=null){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // move cursor absolute\n        _readline.cursorTo(this.stream, x, y);\n    }\n\n    // change relative cursor position\n    cursorRelative(dx=null, dy=null){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // store current position\n        this.dy = this.dy + dy;\n        \n        // move cursor relative\n        _readline.moveCursor(this.stream, dx, dy);\n    }\n\n    // relative reset\n    cursorRelativeReset(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // move cursor to initial line\n        _readline.moveCursor(this.stream, 0, -this.dy);\n\n        // first char\n        _readline.cursorTo(this.stream, 0, null);\n\n        // reset counter\n        this.dy = 0;\n    }\n\n    // clear to the right from cursor\n    clearRight(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        _readline.clearLine(this.stream, 1);\n    }\n\n    // clear the full line\n    clearLine(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        _readline.clearLine(this.stream, 0);\n    }\n\n    // clear everyting beyond the current line\n    clearBottom(){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        _readline.clearScreenDown(this.stream);\n    }\n\n    // add new line; increment counter\n    newline(){\n        this.stream.write('\\n');\n        this.dy++;\n    }\n\n    // write content to output stream\n    // @TODO use string-width to strip length\n    write(s, rawWrite=false){\n        // line wrapping enabled ? trim output\n        // this is just a fallback mechanism in case user enabled line-wrapping via options or set it to auto\n        if (this.linewrap === true && rawWrite === false){\n            this.stream.write(s.substr(0, this.getWidth()));\n\n        // standard behaviour with disabled linewrapping\n        }else{\n            this.stream.write(s);\n        }\n    }\n\n    // control line wrapping\n    lineWrapping(enabled){\n        if (!this.stream.isTTY){\n            return;\n        }\n\n        // store state\n        this.linewrap = enabled;\n        if (enabled){\n            this.stream.write('\\x1B[?7h');\n        }else{\n            this.stream.write('\\x1B[?7l');\n        }\n    }\n\n    // tty environment ?\n    isTTY(){\n        return (this.stream.isTTY === true);\n    }\n\n    // get terminal width\n    getWidth(){\n        // set max width to 80 in tty-mode and 200 in notty-mode\n        return this.stream.columns || (this.stream.isTTY ? 80 : 200);\n    }\n}\n\nmodule.exports = Terminal;\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n","\"use strict\";\n\nmodule.exports = function () {\n  // https://mths.be/emoji\n  return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), '  ');\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n","// default value format (apply autopadding)\n\n// format valueset\nmodule.exports = function formatValue(v, options, type){\n    // no autopadding ? passthrough\n    if (options.autopadding !== true){\n        return v;\n    }\n\n    // padding\n    function autopadding(value, length){\n        return (options.autopaddingChar + value).slice(-length);\n    }\n\n    switch (type){\n        case 'percentage':\n            return autopadding(v, 3);\n\n        default:\n            return v;\n    }\n}","// format bar\nmodule.exports = function formatBar(progress, options){\n    // calculate barsize\n    const completeSize = Math.round(progress*options.barsize);\n    const incompleteSize = options.barsize-completeSize;\n\n   // generate bar string by stripping the pre-rendered strings\n   return   options.barCompleteString.substr(0, completeSize) +\n            options.barGlue +\n            options.barIncompleteString.substr(0, incompleteSize);\n}","// default time format\n\n// format a number of seconds into hours and minutes as appropriate\nmodule.exports = function formatTime(t, options, roundToMultipleOf){\n    function round(input) {\n        if (roundToMultipleOf) {\n            return roundToMultipleOf * Math.round(input / roundToMultipleOf);\n        } else {\n            return input\n        }\n    }\n\n    // leading zero padding\n    function autopadding(v){\n        return (options.autopaddingChar + v).slice(-2);\n    }\n\n    // > 1h ?\n    if (t > 3600) {\n        return autopadding(Math.floor(t / 3600)) + 'h' + autopadding(round((t % 3600) / 60)) + 'm';\n\n    // > 60s ?\n    } else if (t > 60) {\n        return autopadding(Math.floor(t / 60)) + 'm' + autopadding(round((t % 60))) + 's';\n\n    // > 10s ?\n    } else if (t > 10) {\n        return autopadding(round(t)) + 's';\n\n    // default: don't apply round to multiple\n    }else{\n        return autopadding(t) + 's';\n    }\n}","const _stringWidth = require('string-width');\nconst _defaultFormatValue = require('./format-value');\nconst _defaultFormatBar = require('./format-bar');\nconst _defaultFormatTime = require('./format-time');\n\n// generic formatter\nmodule.exports = function defaultFormatter(options, params, payload){\n\n    // copy format string\n    let s = options.format;\n\n    // custom time format set ?\n    const formatTime = options.formatTime || _defaultFormatTime;\n    \n    // custom value format set ?\n    const formatValue = options.formatValue || _defaultFormatValue;\n\n    // custom bar format set ?\n    const formatBar = options.formatBar || _defaultFormatBar;\n\n    // calculate progress in percent\n    const percentage =  Math.floor(params.progress*100) + '';\n\n    // bar stopped and stopTime set ?\n    const stopTime = params.stopTime || Date.now();\n\n    // calculate elapsed time\n    const elapsedTime = Math.round((stopTime - params.startTime)/1000);\n\n    // merges data from payload and calculated\n    const context = Object.assign({}, payload, {\n        bar:                    formatBar(params.progress, options),\n\n        percentage:             formatValue(percentage, options, 'percentage'),\n        total:                  formatValue(params.total, options, 'total'),\n        value:                  formatValue(params.value, options, 'value'),\n\n        eta:                    formatValue(params.eta, options, 'eta'),\n        eta_formatted:          formatTime(params.eta, options, 5),\n        \n        duration:               formatValue(elapsedTime, options, 'duration'),\n        duration_formatted:     formatTime(elapsedTime, options, 1)\n    });\n\n    // assign placeholder tokens\n    s = s.replace(/\\{(\\w+)\\}/g, function(match, key){\n        // key exists within payload/context\n        if (typeof context[key] !== 'undefined') {\n            return context[key];\n        }\n\n        // no changes to unknown values\n        return match;\n    });\n\n    // calculate available whitespace (2 characters margin of error)\n    const fullMargin = Math.max(0, params.maxWidth - _stringWidth(s) -2);\n    const halfMargin = Math.floor(fullMargin / 2);\n\n    // distribute available whitespace according to position\n    switch (options.align) {\n\n        // fill start-of-line with whitespaces\n        case 'right':\n            s = (fullMargin > 0) ? ' '.repeat(fullMargin) + s : s;\n            break;\n\n        // distribute whitespaces to left+right\n        case 'center':\n            s = (halfMargin > 0) ? ' '.repeat(halfMargin) + s : s;\n            break;\n\n        // default: left align, no additional whitespaces\n        case 'left':\n        default:\n            break;\n    }\n\n    return s;\n}\n","// utility to merge defaults\nfunction mergeOption(v, defaultValue){\n    if (typeof v === 'undefined' || v === null){\n        return defaultValue;\n    }else{\n        return v;\n    }\n}\n\nmodule.exports = {\n    // set global options\n    parse: function parse(rawOptions, preset){\n\n        // options storage\n        const options = {};\n\n        // merge preset\n        const opt = Object.assign({}, preset, rawOptions);\n\n        // the max update rate in fps (redraw will only triggered on value change)\n        options.throttleTime = 1000 / (mergeOption(opt.fps, 10));\n\n        // the output stream to write on\n        options.stream = mergeOption(opt.stream, process.stderr);\n\n        // external terminal provided ?\n        options.terminal = mergeOption(opt.terminal, null);\n\n        // clear on finish ?\n        options.clearOnComplete = mergeOption(opt.clearOnComplete, false);\n\n        // stop on finish ?\n        options.stopOnComplete = mergeOption(opt.stopOnComplete, false);\n\n        // size of the progressbar in chars\n        options.barsize = mergeOption(opt.barsize, 40);\n\n        // position of the progress bar - 'left' (default), 'right' or 'center'\n        options.align = mergeOption(opt.align, 'left');\n\n        // hide the cursor ?\n        options.hideCursor = mergeOption(opt.hideCursor, false);\n\n        // disable linewrapping ?\n        options.linewrap = mergeOption(opt.linewrap, false);\n\n        // glue sequence (control chars) between bar elements ?\n        options.barGlue = mergeOption(opt.barGlue, '');\n\n        // bar chars\n        options.barCompleteChar = mergeOption(opt.barCompleteChar, '=');\n        options.barIncompleteChar = mergeOption(opt.barIncompleteChar, '-');\n\n        // the bar format\n        options.format = mergeOption(opt.format, 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}');\n\n        // external time-format provided ?\n        options.formatTime = mergeOption(opt.formatTime, null);\n\n        // external value-format provided ?\n        options.formatValue = mergeOption(opt.formatValue, null);\n\n        // external bar-format provided ?\n        options.formatBar = mergeOption(opt.formatBar, null);\n\n        // the number of results to average ETA over\n        options.etaBufferLength = mergeOption(opt.etaBuffer, 10);\n\n        // automatic eta updates based on fps\n        options.etaAsynchronousUpdate = mergeOption(opt.etaAsynchronousUpdate, false);\n\n        // progress calculation relative to start value ? default start at 0\n        options.progressCalculationRelative = mergeOption(opt.progressCalculationRelative, false);\n\n        // allow synchronous updates ?\n        options.synchronousUpdate = mergeOption(opt.synchronousUpdate, true);\n\n        // notty mode\n        options.noTTYOutput = mergeOption(opt.noTTYOutput, false);\n\n        // schedule - 2s\n        options.notTTYSchedule = mergeOption(opt.notTTYSchedule, 2000);\n        \n        // emptyOnZero - false\n        options.emptyOnZero = mergeOption(opt.emptyOnZero, false);\n\n        // force bar redraw even if progress did not change\n        options.forceRedraw = mergeOption(opt.forceRedraw, false);\n\n        // automated padding to fixed width ?\n        options.autopadding = mergeOption(opt.autopadding, false);\n\n        // stop bar on SIGINT/SIGTERM to restore cursor settings ?\n        options.gracefulExit = mergeOption(opt.gracefulExit, false);\n\n        return options;\n    },\n\n    // derived options: instance specific, has to be created for every bar element\n    assignDerivedOptions: function assignDerivedOptions(options){\n        // pre-render bar strings (performance)\n        options.barCompleteString = options.barCompleteChar.repeat(options.barsize + 1);\n        options.barIncompleteString = options.barIncompleteChar.repeat(options.barsize + 1);\n\n        // autopadding character - empty in case autopadding is disabled\n        options.autopaddingChar = options.autopadding ? mergeOption(options.autopaddingChar, '   ') : '';\n\n        return options;\n    }\n};","const _ETA = require('./eta');\nconst _Terminal = require('./terminal');\nconst _formatter = require('./formatter');\nconst _options = require('./options');\nconst _EventEmitter = require('events');\n\n// Progress-Bar constructor\nmodule.exports = class GenericBar extends _EventEmitter{\n\n    constructor(options){\n        super();\n\n        // store options and assign derived ones (instance specific)\n        this.options = _options.assignDerivedOptions(options);\n\n        // store terminal instance\n        this.terminal = (this.options.terminal) ? this.options.terminal : new _Terminal(this.options.stream);\n\n        // the current bar value\n        this.value = 0;\n\n        // bar start value (used for progress calculation)\n        this.startValue = 0;\n\n        // the end value of the bar\n        this.total = 100;\n\n        // last drawn string - only render on change!\n        this.lastDrawnString = null;\n\n        // start time (used for eta calculation)\n        this.startTime = null;\n\n        // stop time (used for duration calculation)\n        this.stopTime = null;\n\n        // last update time\n        this.lastRedraw = Date.now();\n\n        // default eta calculator (will be re-create on start)\n        this.eta = new _ETA(this.options.etaBufferLength, 0, 0);\n\n        // payload data\n        this.payload = {};\n\n        // progress bar active ?\n        this.isActive = false;\n\n        // use default formatter or custom one ?\n        this.formatter = (typeof this.options.format === 'function') ? this.options.format : _formatter;\n    }\n\n    // internal render function\n    render(forceRendering=false){\n\n        // formatter params\n        const params = {\n            progress: this.getProgress(),\n            eta: this.eta.getTime(),\n            startTime: this.startTime,\n            stopTime: this.stopTime,\n            total: this.total,\n            value: this.value,\n            maxWidth: this.terminal.getWidth()\n        };\n\n        // automatic eta update ? (long running processes)\n        if (this.options.etaAsynchronousUpdate){\n            this.updateETA();\n        }\n\n        // format string\n        const s = this.formatter(this.options, params, this.payload);\n\n        const forceRedraw = forceRendering || this.options.forceRedraw\n            // force redraw in notty-mode!\n            || (this.options.noTTYOutput && !this.terminal.isTTY());\n\n        // string changed ? only trigger redraw on change!\n        if (forceRedraw || this.lastDrawnString != s){\n            // trigger event\n            this.emit('redraw-pre');\n\n            // set cursor to start of line\n            this.terminal.cursorTo(0, null);\n\n            // write output\n            this.terminal.write(s);\n\n            // clear to the right from cursor\n            this.terminal.clearRight();\n\n            // store string\n            this.lastDrawnString = s;\n\n            // set last redraw time\n            this.lastRedraw = Date.now();\n\n            // trigger event\n            this.emit('redraw-post');\n        }\n    }\n\n    // start the progress bar\n    start(total, startValue, payload){\n        // set initial values\n        this.value = startValue || 0;\n        this.total = (typeof total !== 'undefined' && total >= 0) ? total : 100;\n\n        // set start value for progress calculation\n        this.startValue = (startValue || 0);\n\n        // store payload (optional)\n        this.payload = payload || {};\n\n        // store start time for duration+eta calculation\n        this.startTime = Date.now();\n\n        // reset stop time for 're-start' scenario (used for duration calculation)\n        this.stopTime = null;\n\n        // reset string line buffer (redraw detection)\n        this.lastDrawnString = '';\n\n        // initialize eta buffer\n        this.eta = new _ETA(this.options.etaBufferLength, this.startTime, this.value);\n\n        // set flag\n        this.isActive = true;\n\n        // start event\n        this.emit('start', total, startValue);\n    }\n\n    // stop the bar\n    stop(){\n        // set flag\n        this.isActive = false;\n        \n        // store stop timestamp to get total duration\n        this.stopTime = Date.now();\n\n        // stop event\n        this.emit('stop', this.total, this.value);\n    }\n\n    // update the bar value\n    // update(value, payload)\n    // update(payload)\n    update(arg0, arg1 = {}){\n        // value set ?\n        // update(value, [payload]);\n        if (typeof arg0 === 'number') {\n            // update value\n            this.value = arg0;\n\n            // add new value; recalculate eta\n            this.eta.update(Date.now(), arg0, this.total);\n        }\n\n        // extract payload\n        // update(value, payload)\n        // update(payload)\n        const payloadData = ((typeof arg0 === 'object') ? arg0 : arg1) || {};\n\n        // update event (before stop() is called)\n        this.emit('update', this.total, this.value);\n\n        // merge payload\n        for (const key in payloadData){\n            this.payload[key] = payloadData[key];\n        }\n\n        // limit reached ? autostop set ?\n        if (this.value >= this.getTotal() && this.options.stopOnComplete) {\n            this.stop();\n        }\n    }\n\n    // calculate the actual progress value\n    getProgress(){\n        // calculate the normalized current progress\n        let progress = (this.value/this.total);\n\n        // use relative progress calculation ? range between startValue and total is then used as 100%\n        // startValue (offset) is ignored for calculations\n        if (this.options.progressCalculationRelative){\n            progress = (this.value-this.startValue)/(this.total-this.startValue);\n        }\n\n        // handle NaN Errors caused by total=0. Set to complete in this case\n        if (isNaN(progress)){\n            progress = (this.options && this.options.emptyOnZero) ? 0.0 : 1.0;\n        }\n\n        // limiter\n        progress = Math.min(Math.max(progress, 0.0), 1.0);\n\n        return progress;\n    }\n\n    // update the bar value\n    // increment(delta, payload)\n    // increment(payload)\n    increment(arg0 = 1, arg1 = {}){\n        // increment([payload]) => step=1\n        // handle the use case when `step` is omitted but payload is passed\n        if (typeof arg0 === 'object') {\n            this.update(this.value + 1, arg0);\n        \n        // increment([step=1], [payload={}])\n        }else{\n            this.update(this.value + arg0, arg1);\n        }\n    }\n\n    // get the total (limit) value\n    getTotal(){\n        return this.total;\n    }\n\n    // set the total (limit) value\n    setTotal(total){\n        if (typeof total !== 'undefined' && total >= 0){\n            this.total = total;\n        }\n    }\n\n    // force eta calculation update (long running processes)\n    updateETA(){\n        // add new value; recalculate eta\n        this.eta.update(Date.now(), this.value, this.total);\n    }\n}\n","const _GenericBar = require('./generic-bar');\nconst _options = require('./options');\n\n// Progress-Bar constructor\nmodule.exports = class SingleBar extends _GenericBar{\n\n    constructor(options, preset){\n        super(_options.parse(options, preset));\n\n        // the update timer\n        this.timer = null;\n\n        // disable synchronous updates in notty mode\n        if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n            this.options.synchronousUpdate = false;\n        }\n\n        // update interval\n        this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);\n\n        // callback used for gracefulExit\n        this.sigintCallback = null;\n    }\n\n    // internal render function\n    render(){\n        // stop timer\n        if (this.timer){\n            clearTimeout(this.timer);\n            this.timer = null;\n        }\n\n        // run internal rendering\n        super.render();\n\n        // add new line in notty mode!\n        if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n            this.terminal.newline();\n        }\n\n        // next update\n        this.timer = setTimeout(this.render.bind(this), this.schedulingRate);\n    }\n\n    update(current, payload){\n        // timer inactive ?\n        if (!this.timer) {\n            return;\n        }\n\n        super.update(current, payload);\n\n        // trigger synchronous update ?\n        // check for throttle time \n        if (this.options.synchronousUpdate && (this.lastRedraw + this.options.throttleTime*2) < Date.now()){\n            // force update\n            this.render();\n        }\n    }\n\n    // start the progress bar\n    start(total, startValue, payload){\n        // progress updates are only visible in TTY mode!\n        if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){\n            return;\n        }\n\n        // add handler to restore cursor settings (stop the bar) on SIGINT/SIGTERM ?\n        if (this.sigintCallback === null && this.options.gracefulExit){\n            this.sigintCallback = this.stop.bind(this);\n            process.once('SIGINT', this.sigintCallback);\n            process.once('SIGTERM', this.sigintCallback);\n        }\n\n        // save current cursor settings\n        this.terminal.cursorSave();\n\n        // hide the cursor ?\n        if (this.options.hideCursor === true){\n            this.terminal.cursor(false);\n        }\n\n        // disable line wrapping ?\n        if (this.options.linewrap === false){\n            this.terminal.lineWrapping(false);\n        }\n\n        // initialize bar\n        super.start(total, startValue, payload);\n\n        // redraw on start!\n        this.render();\n    }\n\n    // stop the bar\n    stop(){\n        // timer inactive ?\n        if (!this.timer) {\n            return;\n        }\n        \n        // remove sigint listener\n        if (this.sigintCallback){\n            process.removeListener('SIGINT', this.sigintCallback);\n            process.removeListener('SIGTERM', this.sigintCallback);\n            this.sigintCallback = null;\n        }\n\n        // trigger final rendering\n        this.render();\n\n        // restore state\n        super.stop();\n\n        // stop timer\n        clearTimeout(this.timer);\n        this.timer = null;\n\n        // cursor hidden ?\n        if (this.options.hideCursor === true){\n            this.terminal.cursor(true);\n        }\n\n        // re-enable line wrapping ?\n        if (this.options.linewrap === false){\n            this.terminal.lineWrapping(true);\n        }\n\n        // restore cursor on complete (position + settings)\n        this.terminal.cursorRestore();\n\n        // clear line on complete ?\n        if (this.options.clearOnComplete){\n            this.terminal.cursorTo(0, null);\n            this.terminal.clearLine();\n        }else{\n            // new line on complete\n            this.terminal.newline();\n        }\n    }\n}","const _Terminal = require('./terminal');\nconst _BarElement = require('./generic-bar');\nconst _options = require('./options');\nconst _EventEmitter = require('events');\n\n// Progress-Bar constructor\nmodule.exports = class MultiBar extends _EventEmitter{\n\n    constructor(options, preset){\n        super();\n\n        // list of bars\n        this.bars = [];\n\n        // parse+store options\n        this.options = _options.parse(options, preset);\n\n        // disable synchronous updates\n        this.options.synchronousUpdate = false;\n\n        // store terminal instance\n        this.terminal = (this.options.terminal) ? this.options.terminal : new _Terminal(this.options.stream);\n\n        // the update timer\n        this.timer = null;\n\n        // progress bar active ?\n        this.isActive = false;\n\n        // update interval\n        this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);\n\n        // logging output buffer\n        this.loggingBuffer = [];\n\n        // callback used for gracefulExit\n        this.sigintCallback = null;\n    }\n\n    // add a new bar to the stack\n    create(total, startValue, payload, barOptions={}){\n        // create new bar element and merge global options + overrides\n        // use the same global terminal instance for all instances\n        const bar = new _BarElement(Object.assign(\n            {}, \n\n            // global options\n            this.options, \n\n            // terminal instance\n            {\n                terminal: this.terminal\n            },\n\n            // overrides\n            barOptions,\n        ));\n\n        // store bar\n        this.bars.push(bar);\n\n        // progress updates are only visible in TTY mode!\n        if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){\n            return bar;\n        }\n\n        // add handler to restore cursor settings (stop the bar) on SIGINT/SIGTERM ?\n        if (this.sigintCallback === null && this.options.gracefulExit){\n            this.sigintCallback = this.stop.bind(this);\n            process.once('SIGINT', this.sigintCallback);\n            process.once('SIGTERM', this.sigintCallback);\n        }\n        \n        // multiprogress already active ?\n        if (!this.isActive){\n            // hide the cursor ?\n            if (this.options.hideCursor === true){\n                this.terminal.cursor(false);\n            }\n\n            // disable line wrapping ?\n            if (this.options.linewrap === false){\n                this.terminal.lineWrapping(false);\n            }\n    \n            // initialize update timer\n            this.timer = setTimeout(this.update.bind(this), this.schedulingRate);\n        }\n\n        // set flag\n        this.isActive = true;\n\n        // start progress bar\n        bar.start(total, startValue, payload);\n\n        // trigger event\n        this.emit('start');\n\n        // return new instance\n        return bar;\n    }\n\n    // remove a bar from the stack\n    remove(bar){\n        // find element\n        const index = this.bars.indexOf(bar);\n\n        // element found ?\n        if (index < 0){\n            return false;\n        }\n\n        // remove element\n        this.bars.splice(index, 1);\n\n        // force update\n        this.update();\n\n        // clear bottom\n        this.terminal.newline();\n        this.terminal.clearBottom();\n\n        return true;\n    }\n\n    // internal update routine\n    update(){\n        // stop timer\n        if (this.timer){\n            clearTimeout(this.timer);\n            this.timer = null;\n        }\n\n        // trigger event\n        this.emit('update-pre');\n        \n        // reset cursor\n        this.terminal.cursorRelativeReset();\n\n        // trigger event\n        this.emit('redraw-pre');\n\n        // content within logging buffer ?\n        if (this.loggingBuffer.length > 0){\n            this.terminal.clearLine();\n\n            // flush logging buffer and write content to terminal\n            while (this.loggingBuffer.length > 0){\n                this.terminal.write(this.loggingBuffer.shift(), true);\n            }\n        }\n\n        // update each bar\n        for (let i=0; i< this.bars.length; i++){\n            // add new line ?\n            if (i > 0){\n                this.terminal.newline();\n            }\n\n            // render\n            this.bars[i].render();\n        }\n\n        // trigger event\n        this.emit('redraw-post');\n\n        // add new line in notty mode!\n        if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n            this.terminal.newline();\n            this.terminal.newline();\n        }\n\n        // next update\n        this.timer = setTimeout(this.update.bind(this), this.schedulingRate);\n\n        // trigger event\n        this.emit('update-post');\n\n        // stop if stopOnComplete and all bars stopped\n        if (this.options.stopOnComplete && !this.bars.find(bar => bar.isActive)) {\n            this.stop();\n        }\n    }\n\n    stop(){\n\n        // stop timer\n        clearTimeout(this.timer);\n        this.timer = null;\n\n        // remove sigint listener\n        if (this.sigintCallback){\n            process.removeListener('SIGINT', this.sigintCallback);\n            process.removeListener('SIGTERM', this.sigintCallback);\n            this.sigintCallback = null;\n        }\n\n        // set flag\n        this.isActive = false;\n\n        // cursor hidden ?\n        if (this.options.hideCursor === true){\n            this.terminal.cursor(true);\n        }\n\n        // re-enable line wrpaping ?\n        if (this.options.linewrap === false){\n            this.terminal.lineWrapping(true);\n        }\n\n        // reset cursor\n        this.terminal.cursorRelativeReset();\n\n        // trigger event\n        this.emit('stop-pre-clear');\n\n        // clear line on complete ?\n        if (this.options.clearOnComplete){\n            // clear all bars\n            this.terminal.clearBottom();\n            \n        // or show final progress ?\n        }else{\n            // update each bar\n            for (let i=0; i< this.bars.length; i++){\n                // add new line ?\n                if (i > 0){\n                    this.terminal.newline();\n                }\n\n                // trigger final rendering\n                this.bars[i].render();\n\n                // stop\n                this.bars[i].stop();\n            }\n\n            // new line on complete\n            this.terminal.newline();\n        }\n\n        // trigger event\n        this.emit('stop');\n    }\n\n    log(s){\n        // push content into logging buffer\n        this.loggingBuffer.push(s);\n    }\n}\n","// cli-progress legacy style as of 1.x\nmodule.exports = {\n    format: 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '=',\n    barIncompleteChar: '-'\n};","// cli-progress legacy style as of 1.x\nmodule.exports = {\n    format: ' {bar} {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '\\u2588',\n    barIncompleteChar: '\\u2591'\n};","\n// cli-progress legacy style as of 1.x\nmodule.exports = {\n    format: ' \\u001b[90m{bar}\\u001b[0m {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '\\u2588',\n    barIncompleteChar: '\\u2591'\n};","module.exports = {\n    format: ' {bar}\\u25A0 {percentage}% | ETA: {eta}s | {value}/{total}',\n    barCompleteChar: '\\u25A0',\n    barIncompleteChar: ' '\n};","const _legacy = require('./legacy');\nconst _shades_classic = require('./shades-classic');\nconst _shades_grey = require('./shades-grey');\nconst _rect = require('./rect');\n\nmodule.exports = {\n    legacy: _legacy,\n    shades_classic: _shades_classic,\n    shades_grey: _shades_grey,\n    rect: _rect\n};","const _SingleBar = require('./lib/single-bar');\nconst _MultiBar = require('./lib/multi-bar');\nconst _Presets = require('./presets/index');\nconst _Formatter = require('./lib/formatter');\nconst _defaultFormatValue = require('./lib/format-value');\nconst _defaultFormatBar = require('./lib/format-bar');\nconst _defaultFormatTime = require('./lib/format-time');\n\n// sub-module access\nmodule.exports = {\n    Bar: _SingleBar,\n    SingleBar: _SingleBar,\n    MultiBar: _MultiBar,\n    Presets: _Presets,\n    Format: {\n        Formatter: _Formatter,\n        BarFormat: _defaultFormatBar,\n        ValueFormat: _defaultFormatValue,\n        TimeFormat: _defaultFormatTime\n    }\n};","\n;(function (name, root, factory) {\n  if (typeof exports === 'object') {\n    module.exports = factory()\n    module.exports['default'] = factory()\n  }\n  /* istanbul ignore next */\n  else if (typeof define === 'function' && define.amd) {\n    define(factory)\n  }\n  else {\n    root[name] = factory()\n  }\n}('slugify', this, function () {\n  var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ō\":\"O\",\"ō\":\"o\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"Ə\":\"E\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"ǈ\":\"LJ\",\"ǉ\":\"lj\",\"ǋ\":\"NJ\",\"ǌ\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"ə\":\"e\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"ѝ\":\"u\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"Ғ\":\"GH\",\"ғ\":\"gh\",\"Қ\":\"KH\",\"қ\":\"kh\",\"Ң\":\"NG\",\"ң\":\"ng\",\"Ү\":\"UE\",\"ү\":\"ue\",\"Ұ\":\"U\",\"ұ\":\"u\",\"Һ\":\"H\",\"һ\":\"h\",\"Ә\":\"AE\",\"ә\":\"ae\",\"Ө\":\"OE\",\"ө\":\"oe\",\"Ա\":\"A\",\"Բ\":\"B\",\"Գ\":\"G\",\"Դ\":\"D\",\"Ե\":\"E\",\"Զ\":\"Z\",\"Է\":\"E\\'\",\"Ը\":\"Y\\'\",\"Թ\":\"T\\'\",\"Ժ\":\"JH\",\"Ի\":\"I\",\"Լ\":\"L\",\"Խ\":\"X\",\"Ծ\":\"C\\'\",\"Կ\":\"K\",\"Հ\":\"H\",\"Ձ\":\"D\\'\",\"Ղ\":\"GH\",\"Ճ\":\"TW\",\"Մ\":\"M\",\"Յ\":\"Y\",\"Ն\":\"N\",\"Շ\":\"SH\",\"Չ\":\"CH\",\"Պ\":\"P\",\"Ջ\":\"J\",\"Ռ\":\"R\\'\",\"Ս\":\"S\",\"Վ\":\"V\",\"Տ\":\"T\",\"Ր\":\"R\",\"Ց\":\"C\",\"Փ\":\"P\\'\",\"Ք\":\"Q\\'\",\"Օ\":\"O\\'\\'\",\"Ֆ\":\"F\",\"և\":\"EV\",\"ء\":\"a\",\"آ\":\"aa\",\"أ\":\"a\",\"ؤ\":\"u\",\"إ\":\"i\",\"ئ\":\"e\",\"ا\":\"a\",\"ب\":\"b\",\"ة\":\"h\",\"ت\":\"t\",\"ث\":\"th\",\"ج\":\"j\",\"ح\":\"h\",\"خ\":\"kh\",\"د\":\"d\",\"ذ\":\"th\",\"ر\":\"r\",\"ز\":\"z\",\"س\":\"s\",\"ش\":\"sh\",\"ص\":\"s\",\"ض\":\"dh\",\"ط\":\"t\",\"ظ\":\"z\",\"ع\":\"a\",\"غ\":\"gh\",\"ف\":\"f\",\"ق\":\"q\",\"ك\":\"k\",\"ل\":\"l\",\"م\":\"m\",\"ن\":\"n\",\"ه\":\"h\",\"و\":\"w\",\"ى\":\"a\",\"ي\":\"y\",\"ً\":\"an\",\"ٌ\":\"on\",\"ٍ\":\"en\",\"َ\":\"a\",\"ُ\":\"u\",\"ِ\":\"e\",\"ْ\":\"\",\"٠\":\"0\",\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"پ\":\"p\",\"چ\":\"ch\",\"ژ\":\"zh\",\"ک\":\"k\",\"گ\":\"g\",\"ی\":\"y\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"Ṣ\":\"S\",\"ṣ\":\"s\",\"Ẁ\":\"W\",\"ẁ\":\"w\",\"Ẃ\":\"W\",\"ẃ\":\"w\",\"Ẅ\":\"W\",\"ẅ\":\"w\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"–\":\"-\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"„\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₸\":\"kazakhstani tenge\",\"₹\":\"indian rupee\",\"₺\":\"turkish lira\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\",\"ﻵ\":\"laa\",\"ﻷ\":\"laa\",\"ﻹ\":\"lai\",\"ﻻ\":\"la\"}')\n  var locales = JSON.parse('{\"bg\":{\"Й\":\"Y\",\"Ц\":\"Ts\",\"Щ\":\"Sht\",\"Ъ\":\"A\",\"Ь\":\"Y\",\"й\":\"y\",\"ц\":\"ts\",\"щ\":\"sht\",\"ъ\":\"a\",\"ь\":\"y\"},\"de\":{\"Ä\":\"AE\",\"ä\":\"ae\",\"Ö\":\"OE\",\"ö\":\"oe\",\"Ü\":\"UE\",\"ü\":\"ue\",\"ß\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"∑\":\"summe\",\"∞\":\"unendlich\",\"♥\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"¢\":\"centavos\",\"£\":\"libras\",\"¤\":\"moneda\",\"₣\":\"francos\",\"∑\":\"suma\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"¢\":\"centime\",\"£\":\"livre\",\"¤\":\"devise\",\"₣\":\"franc\",\"∑\":\"somme\",\"∞\":\"infini\",\"♥\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"¢\":\"centavo\",\"∑\":\"soma\",\"£\":\"libra\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"uk\":{\"И\":\"Y\",\"и\":\"y\",\"Й\":\"Y\",\"й\":\"y\",\"Ц\":\"Ts\",\"ц\":\"ts\",\"Х\":\"Kh\",\"х\":\"kh\",\"Щ\":\"Shch\",\"щ\":\"shch\",\"Г\":\"H\",\"г\":\"h\"},\"vi\":{\"Đ\":\"D\",\"đ\":\"d\"},\"da\":{\"Ø\":\"OE\",\"ø\":\"oe\",\"Å\":\"AA\",\"å\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"større end\"},\"nb\":{\"&\":\"og\",\"Å\":\"AA\",\"Æ\":\"AE\",\"Ø\":\"OE\",\"å\":\"aa\",\"æ\":\"ae\",\"ø\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"Å\":\"AA\",\"Ä\":\"AE\",\"Ö\":\"OE\",\"å\":\"aa\",\"ä\":\"ae\",\"ö\":\"oe\"}}')\n\n  function replace (string, options) {\n    if (typeof string !== 'string') {\n      throw new Error('slugify: string argument expected')\n    }\n\n    options = (typeof options === 'string')\n      ? {replacement: options}\n      : options || {}\n\n    var locale = locales[options.locale] || {}\n\n    var replacement = options.replacement === undefined ? '-' : options.replacement\n\n    var trim = options.trim === undefined ? true : options.trim\n\n    var slug = string.normalize().split('')\n      // replace characters based on charMap\n      .reduce(function (result, ch) {\n        var appendChar = locale[ch];\n        if (appendChar === undefined) appendChar = charMap[ch];\n        if (appendChar === undefined) appendChar = ch;\n        if (appendChar === replacement) appendChar = ' ';\n        return result + appendChar\n          // remove not allowed characters\n          .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n      }, '');\n\n    if (options.strict) {\n      slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n    }\n\n    if (trim) {\n      slug = slug.trim()\n    }\n\n    // Replace spaces with replacement character, treating multiple consecutive\n    // spaces as a single space.\n    slug = slug.replace(/\\s+/g, replacement);\n\n    if (options.lower) {\n      slug = slug.toLowerCase()\n    }\n\n    return slug\n  }\n\n  replace.extend = function (customMap) {\n    Object.assign(charMap, customMap)\n  }\n\n  return replace\n}))\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/node.ts\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport * as os from \"node:os\";\n\n// src/isomorph.ts\nvar DefaultAsyncLocalStorage = class {\n  constructor() {\n  }\n  enterWith(_) {\n  }\n  run(_, callback) {\n    return callback();\n  }\n  getStore() {\n    return void 0;\n  }\n};\nvar iso = {\n  getRepoInfo: async (_settings) => void 0,\n  getPastNAncestors: async () => [],\n  getEnv: (_name) => void 0,\n  getCallerLocation: () => void 0,\n  newAsyncLocalStorage: () => new DefaultAsyncLocalStorage(),\n  processOn: (_0, _1) => {\n  }\n};\nvar isomorph_default = iso;\n\n// src/gitutil.ts\nimport { simpleGit } from \"simple-git\";\nvar COMMON_BASE_BRANCHES = [\"main\", \"master\", \"develop\"];\nasync function currentRepo() {\n  try {\n    const git = simpleGit();\n    if (await git.checkIsRepo()) {\n      return git;\n    } else {\n      return null;\n    }\n  } catch (e) {\n    return null;\n  }\n}\nvar _baseBranch = null;\nasync function getBaseBranch(remote = void 0) {\n  if (_baseBranch === null) {\n    const git = await currentRepo();\n    if (git === null) {\n      throw new Error(\"Not in a git repo\");\n    }\n    const remoteName = remote ?? (await git.getRemotes())[0]?.name;\n    if (!remoteName) {\n      throw new Error(\"No remote found\");\n    }\n    let branch = null;\n    const repoBranches = new Set((await git.branchLocal()).all);\n    const matchingBaseBranches = COMMON_BASE_BRANCHES.filter(\n      (b) => repoBranches.has(b)\n    );\n    if (matchingBaseBranches.length === 1) {\n      branch = matchingBaseBranches[0];\n    } else {\n      try {\n        const remoteInfo = await git.remote([\"show\", remoteName]);\n        if (!remoteInfo) {\n          throw new Error(`Could not find remote ${remoteName}`);\n        }\n        const match = remoteInfo.match(/\\s*HEAD branch:\\s*(.*)$/m);\n        if (!match) {\n          throw new Error(`Could not find HEAD branch in remote ${remoteName}`);\n        }\n        branch = match[1];\n      } catch {\n        branch = \"main\";\n      }\n    }\n    _baseBranch = { remote: remoteName, branch };\n  }\n  return _baseBranch;\n}\nasync function getBaseBranchAncestor(remote = void 0) {\n  const git = await currentRepo();\n  if (git === null) {\n    throw new Error(\"Not in a git repo\");\n  }\n  const { remote: remoteName, branch: baseBranch } = await getBaseBranch(remote);\n  const isDirty = (await git.diffSummary()).files.length > 0;\n  const head = isDirty ? \"HEAD\" : \"HEAD^\";\n  try {\n    const ancestor = await git.raw([\n      \"merge-base\",\n      head,\n      `${remoteName}/${baseBranch}`\n    ]);\n    return ancestor.trim();\n  } catch (e) {\n    return void 0;\n  }\n}\nasync function getPastNAncestors(n = 10, remote = void 0) {\n  const git = await currentRepo();\n  if (git === null) {\n    return [];\n  }\n  let ancestor = void 0;\n  try {\n    ancestor = await getBaseBranchAncestor(remote);\n  } catch (e) {\n    console.warn(\n      \"Skipping git metadata. This is likely because the repository has not been published to a remote yet.\",\n      `${e}`\n    );\n  }\n  if (!ancestor) {\n    return [];\n  }\n  const commits = await git.log({ from: ancestor, to: \"HEAD\" });\n  return commits.all.map((c) => c.hash);\n}\nasync function attempt(fn) {\n  try {\n    return await fn();\n  } catch (e) {\n    return void 0;\n  }\n}\nfunction truncateToByteLimit(s, byteLimit = 65536) {\n  const encoded = new TextEncoder().encode(s);\n  if (encoded.length <= byteLimit) {\n    return s;\n  }\n  const truncated = encoded.subarray(0, byteLimit);\n  return new TextDecoder().decode(truncated);\n}\nasync function getRepoInfo(settings) {\n  if (settings && settings.collect === \"none\") {\n    return void 0;\n  }\n  const repo = await repoInfo();\n  if (!repo || !settings || settings.collect === \"all\") {\n    return repo;\n  }\n  let sanitized = {};\n  settings.fields?.forEach((field) => {\n    sanitized = { ...sanitized, [field]: repo[field] };\n  });\n  return sanitized;\n}\nasync function repoInfo() {\n  const git = await currentRepo();\n  if (git === null) {\n    return void 0;\n  }\n  let commit = void 0;\n  let commit_message = void 0;\n  let commit_time = void 0;\n  let author_name = void 0;\n  let author_email = void 0;\n  let tag = void 0;\n  let branch = void 0;\n  let git_diff = void 0;\n  const dirty = (await git.diffSummary()).files.length > 0;\n  commit = await attempt(async () => await git.revparse([\"HEAD\"]));\n  commit_message = await attempt(\n    async () => (await git.raw([\"log\", \"-1\", \"--pretty=%B\"])).trim()\n  );\n  commit_time = await attempt(\n    async () => (await git.raw([\"log\", \"-1\", \"--pretty=%cI\"])).trim()\n  );\n  author_name = await attempt(\n    async () => (await git.raw([\"log\", \"-1\", \"--pretty=%aN\"])).trim()\n  );\n  author_email = await attempt(\n    async () => (await git.raw([\"log\", \"-1\", \"--pretty=%aE\"])).trim()\n  );\n  tag = await attempt(\n    async () => (await git.raw([\"describe\", \"--tags\", \"--exact-match\", \"--always\"])).trim()\n  );\n  branch = await attempt(\n    async () => (await git.raw([\"rev-parse\", \"--abbrev-ref\", \"HEAD\"])).trim()\n  );\n  if (dirty) {\n    git_diff = await attempt(\n      async () => truncateToByteLimit(await git.raw([\"--no-ext-diff\", \"diff\", \"HEAD\"]))\n    );\n  }\n  return {\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}\n\n// src/stackutil.ts\nfunction getStackTrace() {\n  const trace = new Error().stack;\n  if (typeof trace !== \"string\") {\n    return [];\n  }\n  const traceLines = trace.split(\"\\n\");\n  const out = [];\n  const stackFrameRegex = /at(.*)\\((.*):(\\d+):(\\d+)\\)/;\n  for (const traceLine of traceLines.slice(1)) {\n    const matches = traceLine.match(stackFrameRegex);\n    if (matches === null || matches.length !== 5) {\n      continue;\n    }\n    const entry = {\n      functionName: matches[1].trim(),\n      fileName: matches[2],\n      lineNo: parseInt(matches[3])\n    };\n    if (!isNaN(entry.lineNo)) {\n      out.push(entry);\n    }\n  }\n  return out;\n}\nfunction getCallerLocation() {\n  let thisDir = void 0;\n  const entries = getStackTrace();\n  for (const frame of entries) {\n    if (thisDir === void 0) {\n      thisDir = isomorph_default.pathDirname?.(frame.fileName);\n    }\n    if (isomorph_default.pathDirname?.(frame.fileName) !== thisDir) {\n      return {\n        caller_functionname: frame.functionName,\n        caller_filename: frame.fileName,\n        caller_lineno: frame.lineNo\n      };\n    }\n  }\n  return void 0;\n}\n\n// src/logger.ts\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n  _urljoin,\n  AUDIT_METADATA_FIELD,\n  AUDIT_SOURCE_FIELD,\n  batchItems,\n  constructJsonArray,\n  DEFAULT_IS_LEGACY_DATASET,\n  ensureDatasetRecord,\n  IS_MERGE_FIELD,\n  makeLegacyEvent,\n  mergeDicts,\n  mergeGitMetadataSettings,\n  mergeRowBatch,\n  SpanComponentsV3,\n  SpanObjectTypeV3,\n  spanObjectTypeV3ToString,\n  SpanTypeAttribute,\n  TRANSACTION_ID_FIELD,\n  VALID_SOURCES,\n  isArray,\n  isObject\n} from \"@braintrust/core\";\nimport {\n  attachmentReferenceSchema,\n  responseFormatJsonSchemaSchema,\n  attachmentStatusSchema,\n  BRAINTRUST_ATTACHMENT,\n  BRAINTRUST_PARAMS,\n  gitMetadataSettingsSchema,\n  promptDataSchema,\n  promptSchema,\n  toolsSchema,\n  EXTERNAL_ATTACHMENT\n} from \"@braintrust/core/typespecs\";\nimport { waitUntil } from \"@vercel/functions\";\nimport Mustache from \"mustache\";\nimport { z as z2, ZodError } from \"zod\";\n\n// src/functions/stream.ts\nimport {\n  callEventSchema,\n  sseConsoleEventDataSchema,\n  sseProgressEventDataSchema\n} from \"@braintrust/core/typespecs\";\nimport {\n  createParser\n} from \"eventsource-parser\";\nimport { z } from \"zod\";\nvar braintrustStreamChunkSchema = z.union([\n  z.object({\n    type: z.literal(\"text_delta\"),\n    data: z.string()\n  }),\n  z.object({\n    type: z.literal(\"json_delta\"),\n    data: z.string()\n  }),\n  z.object({\n    type: z.literal(\"error\"),\n    data: z.string()\n  }),\n  z.object({\n    type: z.literal(\"console\"),\n    data: sseConsoleEventDataSchema\n  }),\n  z.object({\n    type: z.literal(\"progress\"),\n    data: sseProgressEventDataSchema\n  }),\n  z.object({\n    type: z.literal(\"start\"),\n    data: z.string()\n  }),\n  z.object({\n    type: z.literal(\"done\"),\n    data: z.string()\n  })\n]);\nvar BraintrustStream = class _BraintrustStream {\n  stream;\n  memoizedFinalValue;\n  constructor(baseStream) {\n    this.stream = baseStream.pipeThrough(btStreamParser());\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);\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(error2) {\n        reader.releaseLock();\n        throw error2;\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)).pipeTo(devNullWritableStream());\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 \"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: sseProgressEventDataSchema.parse(JSON.parse(event.data))\n        };\n      case \"console\":\n        return {\n          type: \"console\",\n          data: sseConsoleEventDataSchema.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};\nfunction btStreamParser() {\n  const decoder = new TextDecoder();\n  let parser;\n  return new TransformStream({\n    async start(controller) {\n      parser = createParser((event) => {\n        if (event.type === \"reconnect-interval\") {\n          return;\n        }\n        const parsed = callEventSchema.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(decoder.decode(chunk));\n      } else if (typeof chunk === \"string\") {\n        parser.feed(chunk);\n      } else {\n        controller.enqueue(chunk);\n      }\n    },\n    async flush(controller) {\n      controller.terminate();\n    }\n  });\n}\nfunction createFinalValuePassThroughStream(onFinal, onError) {\n  const decoder = new TextDecoder();\n  const textChunks = [];\n  const jsonChunks = [];\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(decoder.decode(chunk));\n        controller.enqueue({\n          type: \"text_delta\",\n          data: decoder.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 \"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            throw new Error(`Unknown chunk type ${_type}`);\n        }\n        controller.enqueue(chunk);\n      } else {\n        throw new Error(`Unknown chunk type ${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 {\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.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  /**\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  }\n  /**\n   * Gets the file path for a cache entry.\n   * @param key - The cache key to get the path for.\n   * @returns The full filesystem path for the cache entry.\n   */\n  getEntryPath(key) {\n    return isomorph_default.pathJoin(this.dir, key);\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   * @throws If there is an error reading from the disk cache (except for file not found).\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      throw e;\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    await isomorph_default.mkdir(this.dir, { recursive: true });\n    const filePath = this.getEntryPath(key);\n    const data = await isomorph_default.gzip(JSON.stringify(value));\n    await isomorph_default.writeFile(filePath, data);\n    if (this.max) {\n      const entries = await isomorph_default.readdir(this.dir);\n      if (entries.length > this.max) {\n        await this.evictOldest(entries);\n      }\n    }\n  }\n  /**\n   * Evicts the oldest entries from the cache until it is under the maximum size.\n   * @param entries - List of all cache entry filenames.\n   */\n  async evictOldest(entries) {\n    const stats = await Promise.all(\n      entries.map(async (entry) => {\n        const stat2 = await isomorph_default.stat(this.getEntryPath(entry));\n        return {\n          name: entry,\n          mtime: stat2.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(\n      toRemove.map((stat2) => isomorph_default.unlink(this.getEntryPath(stat2.name)))\n    );\n  }\n};\n\n// src/prompt-cache/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 value = this.cache.get(key);\n    if (value === void 0) {\n      return void 0;\n    }\n    this.cache.delete(key);\n    this.cache.set(key, value);\n    return value;\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 all items from the cache.\n   */\n  clear() {\n    this.cache.clear();\n  }\n};\n\n// src/prompt-cache/prompt-cache.ts\nfunction createCacheKey(key) {\n  const prefix = key.projectId ?? key.projectName;\n  if (!prefix) {\n    throw new Error(\"Either projectId or projectName must be provided\");\n  }\n  return `${prefix}:${key.slug}:${key.version}`;\n}\nvar PromptCache = class {\n  memoryCache;\n  diskCache;\n  constructor(options) {\n    this.memoryCache = options.memoryCache;\n    this.diskCache = options.diskCache;\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);\n    const memoryPrompt = this.memoryCache.get(cacheKey);\n    if (memoryPrompt !== void 0) {\n      return memoryPrompt;\n    }\n    if (this.diskCache) {\n      const diskPrompt = await this.diskCache.get(cacheKey);\n      if (!diskPrompt) {\n        return void 0;\n      }\n      this.memoryCache.set(cacheKey, diskPrompt);\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);\n    this.memoryCache.set(cacheKey, value);\n    if (this.diskCache) {\n      await this.diskCache.set(cacheKey, value);\n    }\n  }\n};\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 isEmpty(a) {\n  return a === void 0 || a === null;\n}\nvar LazyValue = 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    this.value = {\n      computedState: \"in_progress\",\n      val: this.callable().then((x) => {\n        this.value.computedState = \"succeeded\";\n        return x;\n      })\n    };\n    return this.value.val;\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};\n\n// src/logger.ts\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  startSpan(_1) {\n    return this;\n  }\n  end(args) {\n    return args?.endTime ?? getCurrentUnixTimestamp();\n  }\n  async export() {\n    return \"\";\n  }\n  async permalink() {\n    return NOOP_SPAN_PERMALINK;\n  }\n  async flush() {\n  }\n  close(args) {\n    return this.end(args);\n  }\n  setAttributes(_args) {\n  }\n};\nvar NOOP_SPAN = new NoopSpan();\nvar NOOP_SPAN_PERMALINK = \"https://braintrust.dev/noop-span\";\nvar loginSchema = z2.strictObject({\n  appUrl: z2.string(),\n  appPublicUrl: z2.string(),\n  orgName: z2.string(),\n  apiUrl: z2.string(),\n  proxyUrl: z2.string(),\n  loginToken: z2.string(),\n  orgId: z2.string().nullish(),\n  gitMetadataSettings: gitMetadataSettingsSchema.nullish()\n});\nvar stateNonce = 0;\nvar BraintrustState = class _BraintrustState {\n  constructor(loginParams) {\n    this.loginParams = loginParams;\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 BackgroundLogger(new LazyValue(defaultGetLogConn), loginParams)\n    );\n    this.resetLoginInfo();\n    const memoryCache = new LRUCache({\n      max: Number(isomorph_default.getEnv(\"BRAINTRUST_PROMPT_CACHE_MEMORY_MAX\")) ?? 1 << 10\n    });\n    const diskCache = canUseDiskCache() ? new DiskCache({\n      cacheDir: isomorph_default.getEnv(\"BRAINTRUST_PROMPT_CACHE_DIR\") ?? `${isomorph_default.getEnv(\"HOME\") ?? isomorph_default.homedir()}/.braintrust/prompt_cache`,\n      max: Number(isomorph_default.getEnv(\"BRAINTRUST_PROMPT_CACHE_DISK_MAX\")) ?? 1 << 20\n    }) : void 0;\n    this.promptCache = new PromptCache({ memoryCache, diskCache });\n  }\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  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  fetch = globalThis.fetch;\n  _appConn = null;\n  _apiConn = null;\n  _proxyConn = null;\n  promptCache;\n  resetLoginInfo() {\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  }\n  copyLoginInfo(other) {\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._appConn = other._appConn;\n    this._apiConn = other._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    };\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.errors}`\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.loginReplaceApiConn(state.apiConn());\n    return state;\n  }\n  setFetch(fetch2) {\n    this.loginParams.fetch = fetch2;\n    this.fetch = fetch2;\n    this._apiConn?.setFetch(fetch2);\n    this._appConn?.setFetch(fetch2);\n  }\n  async login(loginParams) {\n    if (this.apiUrl && !loginParams.forceLogin) {\n      return;\n    }\n    const newState = await loginToState({\n      ...this.loginParams,\n      ...Object.fromEntries(\n        Object.entries(loginParams).filter(([k, v]) => !isEmpty(v))\n      )\n    });\n    this.copyLoginInfo(newState);\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(this.proxyUrl, this.fetch);\n    }\n    return this._proxyConn;\n  }\n  bgLogger() {\n    return this._bgLogger.get();\n  }\n  // Should only be called by the login function.\n  loginReplaceApiConn(apiConn) {\n    this._bgLogger.get().internalReplaceApiConn(apiConn);\n  }\n};\nvar _globalState;\nfunction _internalSetInitialState() {\n  if (_globalState) {\n    throw new Error(\"Cannot set initial state more than once\");\n  }\n  _globalState = globalThis.__inherited_braintrust_state || new BraintrustState({\n    /*empty login options*/\n  });\n}\nvar _internalGetGlobalState = () => _globalState;\nvar FailedHTTPResponse = class extends Error {\n  status;\n  text;\n  data;\n  constructor(status, text, data = null) {\n    super(`${status}: ${text}`);\n    this.status = status;\n    this.text = text;\n    this.data = data;\n  }\n};\nasync function checkResponse(resp) {\n  if (resp.ok) {\n    return resp;\n  } else {\n    throw new FailedHTTPResponse(\n      resp.status,\n      resp.statusText,\n      await resp.text()\n    );\n  }\n}\nvar HTTPConnection = class _HTTPConnection {\n  base_url;\n  token;\n  headers;\n  fetch;\n  constructor(base_url, fetch2) {\n    this.base_url = base_url;\n    this.token = null;\n    this.headers = {};\n    this._reset();\n    this.fetch = fetch2;\n  }\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 (e) {\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(path3, params = void 0, config) {\n    const { headers, ...rest } = config || {};\n    const url = new URL(_urljoin(this.base_url, path3));\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    return await checkResponse(\n      // Using toString() here makes it work with isomorphic fetch\n      await this_fetch(url.toString(), {\n        headers: {\n          Accept: \"application/json\",\n          ...this_headers,\n          ...headers\n        },\n        keepalive: true,\n        ...rest\n      })\n    );\n  }\n  async post(path3, params, config) {\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    return await checkResponse(\n      await this_fetch(_urljoin(this_base_url, path3), {\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    );\n  }\n  async get_json(object_type, args = void 0, retries = 0) {\n    const tries = retries + 1;\n    for (let i = 0; i < tries; i++) {\n      try {\n        const resp = await this.get(`${object_type}`, args);\n        return await resp.json();\n      } catch (e) {\n        if (i < tries - 1) {\n          console.log(\n            `Retrying API request ${object_type} ${JSON.stringify(args)} ${e.status} ${e.text}`\n          );\n          continue;\n        }\n        throw e;\n      }\n    }\n  }\n  async post_json(object_type, args = void 0) {\n    const resp = await this.post(`${object_type}`, args, {\n      headers: { \"Content-Type\": \"application/json\" }\n    });\n    return await resp.json();\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 } = z2.object({\n          signedUrl: z2.string().url(),\n          headers: z2.record(z2.string())\n        }).parse(await metadataResponse.json()));\n      } catch (error2) {\n        if (error2 instanceof ZodError) {\n          const errorStr = JSON.stringify(error2.flatten());\n          throw new Error(`Invalid response from API server: ${errorStr}`);\n        }\n        throw error2;\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      } catch (error2) {\n        if (error2 instanceof FailedHTTPResponse) {\n          throw new Error(\n            `Failed to upload attachment to object store: ${error2.status} ${error2.text} ${error2.data}`\n          );\n        }\n        throw error2;\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 (error2) {\n        status.upload_status = \"error\";\n        status.error_message = error2 instanceof Error ? error2.message : JSON.stringify(error2);\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      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      const readFile2 = isomorph_default.readFile;\n      if (!readFile2) {\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 readFile2(data)]));\n    } else {\n      return new LazyValue(async () => new Blob([data]));\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 = z2.object({\n  downloadUrl: z2.string(),\n  status: attachmentStatusSchema\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   * 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    let 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 error2 = await objResponse.text();\n        throw new Error(`Couldn't download attachment: ${error2}`);\n      }\n      return await objResponse.blob();\n    };\n    return new LazyValue(download);\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 (isEmpty(scores) && isEmpty(expected) && isEmpty(tags) && isEmpty(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  let { metadata, ...updateEvent } = deepCopyEvent(validatedEvent);\n  updateEvent = Object.fromEntries(\n    Object.entries(updateEvent).filter(([_, v]) => !isEmpty(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 (!isEmpty(comment)) {\n    const record = new LazyValue(async () => {\n      return {\n        id: uuidv4(),\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  event\n}) {\n  const updateEvent = deepCopyEvent(\n    validateAndSanitizeExperimentLogPartialArgs({\n      id,\n      ...event\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(async () => ({\n    id,\n    ...updateEvent,\n    ...await parentIds(),\n    [IS_MERGE_FIELD]: true\n  }));\n  state.bgLogger().log([record]);\n}\nfunction updateSpan({\n  exported,\n  state,\n  ...event\n}) {\n  const resolvedState = state ?? _globalState;\n  const components = SpanComponentsV3.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    event\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 SpanObjectTypeV3.EXPERIMENT:\n      throw new Error(\n        \"Impossible: computeObjectMetadataArgs not supported for experiments\"\n      );\n    case SpanObjectTypeV3.PLAYGROUND_LOGS:\n      throw new Error(\n        \"Impossible: computeObjectMetadataArgs not supported for prompt sessions\"\n      );\n    case SpanObjectTypeV3.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}\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(\n        \"Must either provide orgName explicitly or be logged in to a specific org\"\n      );\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(\"Must either provide appUrl explicitly or be logged in\");\n    }\n    return state.appUrl;\n  };\n  const components = SpanComponentsV3.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}\nfunction startSpanParentArgs(args) {\n  let argParentObjectId = void 0;\n  let argParentSpanIds = void 0;\n  let argPropagatedEvent = void 0;\n  if (args.parent) {\n    if (args.parentSpanIds) {\n      throw new Error(\"Cannot specify both parent and parentSpanIds\");\n    }\n    const parentComponents = SpanComponentsV3.fromStr(args.parent);\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    const parentComponentsObjectIdLambda = spanComponentsToObjectIdLambda(\n      args.state,\n      parentComponents\n    );\n    const computeParentObjectId = async () => {\n      const parentComponentsObjectId = await parentComponentsObjectIdLambda();\n      if (await args.parentObjectId.get() !== parentComponentsObjectId) {\n        throw new Error(\n          `Mismatch between expected span parent object id ${await args.parentObjectId.get()} and provided id ${parentComponentsObjectId}`\n        );\n      }\n      return await args.parentObjectId.get();\n    };\n    argParentObjectId = new LazyValue(computeParentObjectId);\n    if (parentComponents.data.row_id) {\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  } else {\n    argParentObjectId = args.parentObjectId;\n    argParentSpanIds = args.parentSpanIds;\n    argPropagatedEvent = args.propagatedEvent;\n  }\n  return {\n    parentObjectType: args.parentObjectType,\n    parentObjectId: argParentObjectId,\n    parentComputeObjectMetadataArgs: args.parentComputeObjectMetadataArgs,\n    parentSpanIds: argParentSpanIds,\n    propagatedEvent: argPropagatedEvent\n  };\n}\nvar Logger = class {\n  state;\n  lazyMetadata;\n  _asyncFlush;\n  computeMetadataArgs;\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.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  parentObjectType() {\n    return SpanObjectTypeV3.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      state: this.state,\n      ...args,\n      ...startSpanParentArgs({\n        state: this.state,\n        parent: args?.parent,\n        parentObjectType: this.parentObjectType(),\n        parentObjectId: this.lazyId,\n        parentComputeObjectMetadataArgs: this.computeMetadataArgs,\n        parentSpanIds: void 0,\n        propagatedEvent: args?.propagatedEvent\n      }),\n      defaultRootType: SpanTypeAttribute.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, ...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      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 SpanComponentsV3({\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};\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}\nfunction constructLogs3Data(items) {\n  return `{\"rows\": ${constructJsonArray(items)}, \"api_version\": 2}`;\n}\nfunction now() {\n  return (/* @__PURE__ */ new Date()).getTime();\n}\nvar BackgroundLogger = class _BackgroundLogger {\n  apiConn;\n  items = [];\n  activeFlush = Promise.resolve();\n  activeFlushResolved = true;\n  activeFlushError = void 0;\n  onFlushError;\n  syncFlush = false;\n  // 6 MB for the AWS lambda gateway (from our own testing).\n  maxRequestSize = 6 * 1024 * 1024;\n  defaultBatchSize = 100;\n  numTries = 3;\n  queueDropExceedingMaxsize = void 0;\n  queueDropLoggingPeriod = 60;\n  failedPublishPayloadsDir = void 0;\n  allPublishPayloadsDir = void 0;\n  queueDropLoggingState = {\n    numDropped: 0,\n    lastLoggedTimestamp: 0\n  };\n  constructor(apiConn, opts) {\n    opts = opts ?? {};\n    this.apiConn = apiConn;\n    const syncFlushEnv = Number(isomorph_default.getEnv(\"BRAINTRUST_SYNC_FLUSH\"));\n    if (!isNaN(syncFlushEnv)) {\n      this.syncFlush = Boolean(syncFlushEnv);\n    }\n    const defaultBatchSizeEnv = Number(\n      isomorph_default.getEnv(\"BRAINTRUST_DEFAULT_BATCH_SIZE\")\n    );\n    if (!isNaN(defaultBatchSizeEnv)) {\n      this.defaultBatchSize = defaultBatchSizeEnv;\n    }\n    const maxRequestSizeEnv = Number(isomorph_default.getEnv(\"BRAINTRUST_MAX_REQUEST_SIZE\"));\n    if (!isNaN(maxRequestSizeEnv)) {\n      this.maxRequestSize = maxRequestSizeEnv;\n    }\n    const numTriesEnv = Number(isomorph_default.getEnv(\"BRAINTRUST_NUM_RETRIES\"));\n    if (!isNaN(numTriesEnv)) {\n      this.numTries = numTriesEnv + 1;\n    }\n    const queueDropExceedingMaxsizeEnv = Number(\n      isomorph_default.getEnv(\"BRAINTRUST_QUEUE_DROP_EXCEEDING_MAXSIZE\")\n    );\n    if (!isNaN(queueDropExceedingMaxsizeEnv)) {\n      this.queueDropExceedingMaxsize = queueDropExceedingMaxsizeEnv;\n    }\n    const queueDropLoggingPeriodEnv = Number(\n      isomorph_default.getEnv(\"BRAINTRUST_QUEUE_DROP_LOGGING_PERIOD\")\n    );\n    if (!isNaN(queueDropLoggingPeriodEnv)) {\n      this.queueDropLoggingPeriod = queueDropLoggingPeriodEnv;\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  log(items) {\n    const [addedItems, droppedItems] = (() => {\n      if (this.queueDropExceedingMaxsize === void 0) {\n        return [items, []];\n      }\n      const numElementsToAdd = Math.min(\n        Math.max(this.queueDropExceedingMaxsize - this.items.length, 0),\n        items.length\n      );\n      return [items.slice(0, numElementsToAdd), items.slice(numElementsToAdd)];\n    })();\n    this.items.push(...addedItems);\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);\n      }\n    }\n  }\n  async flush() {\n    if (this.syncFlush) {\n      this.triggerActiveFlush();\n    }\n    await this.activeFlush;\n    if (this.activeFlushError) {\n      const err = this.activeFlushError;\n      this.activeFlushError = void 0;\n      if (this.syncFlush) {\n        throw err;\n      }\n    }\n  }\n  async flushOnce(args) {\n    const batchSize = args?.batchSize ?? this.defaultBatchSize;\n    const wrappedItems = this.items;\n    this.items = [];\n    const [allItems, attachments] = await this.unwrapLazyValues(wrappedItems);\n    if (allItems.length === 0) {\n      return;\n    }\n    const allItemsStr = allItems.map(\n      (bucket) => bucket.map((item) => JSON.stringify(item))\n    );\n    const batchSets = batchItems({\n      items: allItemsStr,\n      batchMaxNumItems: batchSize,\n      batchMaxNumBytes: this.maxRequestSize / 2\n    });\n    for (const batchSet of batchSets) {\n      const postPromises = batchSet.map(\n        (batch) => (async () => {\n          try {\n            await this.submitLogsRequest(batch);\n            return { type: \"success\" };\n          } catch (e) {\n            return { type: \"error\", value: e };\n          }\n        })()\n      );\n      const results = await Promise.all(postPromises);\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    }\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 (error2) {\n        attachmentErrors.push(error2);\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    if (this.items.length > 0) {\n      await this.flushOnce(args);\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()));\n        const attachments = [];\n        items.forEach((item) => extractAttachments(item, attachments));\n        return [mergeRowBatch(items), 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        console.warn(errmsg);\n        if (!isRetrying) {\n          console.warn(\n            `Failed to construct log records to flush after ${this.numTries} attempts. Dropping batch`\n          );\n          throw e;\n        } else {\n          console.warn(e);\n          await new Promise((resolve) => setTimeout(resolve, 100));\n        }\n      }\n    }\n    throw new Error(\"Impossible\");\n  }\n  async submitLogsRequest(items) {\n    const conn = await this.apiConn.get();\n    const dataStr = constructLogs3Data(items);\n    if (this.allPublishPayloadsDir) {\n      await _BackgroundLogger.writePayloadToDir({\n        payloadDir: this.allPublishPayloadsDir,\n        payload: dataStr\n      });\n    }\n    for (let i = 0; i < this.numTries; i++) {\n      const startTime = now();\n      let error2 = void 0;\n      try {\n        await conn.post_json(\"logs3\", dataStr);\n      } catch {\n        try {\n          const legacyDataS = constructJsonArray(\n            items.map((r) => JSON.stringify(makeLegacyEvent(JSON.parse(r))))\n          );\n          await conn.post_json(\"logs\", legacyDataS);\n        } catch (e) {\n          error2 = e;\n        }\n      }\n      if (error2 === void 0) {\n        return;\n      }\n      const isRetrying = i + 1 < this.numTries;\n      const retryingText = isRetrying ? \"\" : \" Retrying\";\n      const errorText = (() => {\n        if (error2 instanceof FailedHTTPResponse) {\n          return `${error2.status} (${error2.text}): ${error2.data}`;\n        } else {\n          return `${error2}`;\n        }\n      })();\n      const errMsg = `log request failed. Elapsed time: ${(now() - startTime) / 1e3} seconds. Payload size: ${dataStr.length}.${retryingText}\nError: ${errorText}`;\n      if (!isRetrying && this.failedPublishPayloadsDir) {\n        await _BackgroundLogger.writePayloadToDir({\n          payloadDir: this.failedPublishPayloadsDir,\n          payload: dataStr\n        });\n        this.logFailedPayloadsDir();\n      }\n      if (!isRetrying) {\n        console.warn(\n          `log request failed after ${this.numTries} retries. Dropping batch`\n        );\n        throw new Error(errMsg);\n      } else {\n        console.warn(errMsg);\n        if (isRetrying) {\n          await new Promise((resolve) => setTimeout(resolve, 100));\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      console.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) => JSON.stringify(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 _BackgroundLogger.writePayloadToDir({ payloadDir, payload });\n      }\n    } catch (e) {\n      console.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      console.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()}_${uuidv4().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      console.error(\n        `Failed to write failed payload to output file ${payloadFile}:\n`,\n        e\n      );\n    }\n  }\n  triggerActiveFlush() {\n    if (this.activeFlushResolved) {\n      this.activeFlushResolved = false;\n      this.activeFlushError = void 0;\n      this.activeFlush = (async () => {\n        try {\n          await this.flushOnce();\n        } catch (err) {\n          if (err instanceof AggregateError) {\n            for (const e of err.errors) {\n              this.onFlushError?.(e);\n            }\n          } else {\n            this.onFlushError?.(err);\n          }\n          this.activeFlushError = err;\n        } finally {\n          this.activeFlushResolved = true;\n        }\n      })();\n      waitUntil(this.activeFlush);\n    }\n  }\n  logFailedPayloadsDir() {\n    console.warn(`Logging failed payloads to ${this.failedPublishPayloadsDir}`);\n  }\n  // Should only be called by BraintrustState.\n  internalReplaceApiConn(apiConn) {\n    this.apiConn = new LazyValue(async () => apiConn);\n  }\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    baseExperiment,\n    isPublic,\n    open,\n    update,\n    appUrl,\n    apiKey,\n    orgName,\n    forceLogin,\n    fetch: fetch2,\n    metadata,\n    gitMetadataSettings,\n    projectId,\n    baseExperimentId,\n    repoInfo: repoInfo2,\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  if (open) {\n    if (isEmpty(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 (repoInfo2) {\n          return repoInfo2;\n        }\n        let mergedGitMetadataSettings = {\n          ...state.gitMetadataSettings || {\n            collect: \"all\"\n          }\n        };\n        if (gitMetadataSettings) {\n          mergedGitMetadataSettings = mergeGitMetadataSettings(\n            mergedGitMetadataSettings,\n            gitMetadataSettings\n          );\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        args[\"dataset_id\"] = await dataset.id;\n        args[\"dataset_version\"] = await dataset.version();\n      }\n      if (isPublic !== void 0) {\n        args[\"public\"] = isPublic;\n      }\n      if (metadata) {\n        args[\"metadata\"] = metadata;\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            console.warn(\n              `Base experiment ${args[\"base_experiment\"]} not found.`\n            );\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 Experiment(state, lazyMetadata, dataset);\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  console.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  console.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}\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    description,\n    version,\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  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      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  return new Dataset(\n    stateArg ?? _globalState,\n    lazyMetadata,\n    version,\n    legacy,\n    _internal_btql\n  );\n}\nfunction withDataset(project, callback, options = {}) {\n  console.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}) {\n  await state.login({});\n  const org_id = state.orgId;\n  if (isEmpty(project_id)) {\n    const response = await state.appConn().post_json(\"api/project/register\", {\n      project_name: project_name || GLOBAL_PROJECT,\n      org_id\n    });\n    return {\n      org_id,\n      project: {\n        id: response.project.id,\n        name: response.project.name,\n        fullInfo: response.project\n      }\n    };\n  } else if (isEmpty(project_name)) {\n    const response = await state.appConn().get_json(\"api/project\", {\n      id: project_id\n    });\n    return {\n      org_id,\n      project: {\n        id: project_id,\n        name: response.name,\n        fullInfo: response.project\n      }\n    };\n  } else {\n    return {\n      org_id,\n      project: { id: project_id, name: project_name, fullInfo: {} }\n    };\n  }\n}\nfunction initLogger(options = {}) {\n  const {\n    projectName,\n    projectId,\n    asyncFlush: asyncFlushArg,\n    appUrl,\n    apiKey,\n    orgName,\n    forceLogin,\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  };\n  const state = stateArg ?? _globalState;\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  });\n  if (options.setCurrent ?? true) {\n    state.currentLogger = ret;\n  }\n  return ret;\n}\nasync function loadPrompt({\n  projectName,\n  projectId,\n  slug,\n  version,\n  defaults,\n  noTrace = false,\n  appUrl,\n  apiKey,\n  orgName,\n  fetch: fetch2,\n  forceLogin,\n  state: stateArg\n}) {\n  if (isEmpty(projectName) && isEmpty(projectId)) {\n    throw new Error(\"Must specify either projectName or projectId\");\n  }\n  if (isEmpty(slug)) {\n    throw new Error(\"Must specify slug\");\n  }\n  const state = stateArg ?? _globalState;\n  let response;\n  try {\n    await state.login({\n      orgName,\n      apiKey,\n      appUrl,\n      fetch: fetch2,\n      forceLogin\n    });\n    response = await state.apiConn().get_json(\"v1/prompt\", {\n      project_name: projectName,\n      project_id: projectId,\n      slug,\n      version\n    });\n  } catch (e) {\n    console.warn(\"Failed to load prompt, attempting to fall back to cache:\", e);\n    const prompt2 = await state.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 ${[projectName ?? projectId]} (not found on server or in local cache): ${e}`\n      );\n    }\n    return prompt2;\n  }\n  if (!(\"objects\" in response) || response.objects.length === 0) {\n    throw new Error(\n      `Prompt ${slug} not found in ${[projectName ?? projectId]}`\n    );\n  } else if (response.objects.length > 1) {\n    throw new Error(\n      `Multiple prompts found with slug ${slug} in project ${projectName ?? projectId}. This should never happen.`\n    );\n  }\n  const metadata = promptSchema.parse(response[\"objects\"][0]);\n  const prompt = new Prompt(metadata, defaults || {}, noTrace);\n  try {\n    await state.promptCache.set(\n      { slug, projectId, projectName, version: version ?? \"latest\" },\n      prompt\n    );\n  } catch (e) {\n    console.warn(\"Failed to set prompt in cache:\", e);\n  }\n  return prompt;\n}\nasync function login(options = {}) {\n  const { forceLogin = false } = options || {};\n  if (_globalState.loggedIn && !forceLogin) {\n    let checkUpdatedParam2 = function(varname, arg, orig) {\n      if (!isEmpty(arg) && !isEmpty(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, _globalState.appUrl);\n    checkUpdatedParam2(\n      \"apiKey\",\n      options.apiKey ? HTTPConnection.sanitize_token(options.apiKey) : void 0,\n      _globalState.loginToken\n    );\n    checkUpdatedParam2(\"orgName\", options.orgName, _globalState.orgName);\n    return _globalState;\n  }\n  await _globalState.login(options);\n  globalThis.__inherited_braintrust_state = _globalState;\n  return _globalState;\n}\nasync function loginToState(options = {}) {\n  const {\n    appUrl = isomorph_default.getEnv(\"BRAINTRUST_APP_URL\") || \"https://www.braintrust.dev\",\n    apiKey = isomorph_default.getEnv(\"BRAINTRUST_API_KEY\"),\n    orgName = isomorph_default.getEnv(\"BRAINTRUST_ORG_NAME\"),\n    fetch: fetch2 = globalThis.fetch\n  } = options || {};\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 !== void 0) {\n    const resp = await checkResponse(\n      await fetch2(_urljoin(state.appUrl, `/api/apikey/login`), {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${apiKey}`\n        }\n      })\n    );\n    const info = await resp.json();\n    _check_org_info(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  } else {\n    throw new Error(\n      \"Please specify an api key (e.g. by setting BRAINTRUST_API_KEY).\"\n    );\n  }\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  return state;\n}\nfunction log(event) {\n  console.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  console.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.currentSpan.getStore() ?? NOOP_SPAN;\n}\nfunction getSpanParentObject(options) {\n  const state = options?.state ?? _globalState;\n  const parentSpan = currentSpan({ state });\n  if (!Object.is(parentSpan, NOOP_SPAN)) {\n    return parentSpan;\n  }\n  const experiment = currentExperiment();\n  if (experiment) {\n    return experiment;\n  }\n  const logger = currentLogger(options);\n  if (logger) {\n    return logger;\n  }\n  return NOOP_SPAN;\n}\nfunction logError(span, error2) {\n  let errorMessage = \"<error>\";\n  let stackTrace = \"\";\n  if (error2 instanceof Error) {\n    errorMessage = error2.message;\n    stackTrace = error2.stack || \"\";\n  } else {\n    errorMessage = String(error2);\n  }\n  span.log({ error: `${errorMessage}\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 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  if (args?.asyncFlush) {\n    return (...fnArgs) => traced((span) => {\n      if (!hasExplicitInput) {\n        span.log({ input: fnArgs });\n      }\n      const output = fn(...fnArgs);\n      if (!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 (!hasExplicitInput) {\n        span.log({ input: fnArgs });\n      }\n      const outputResult = fn(...fnArgs);\n      const output = await outputResult;\n      if (!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}\nasync function flush(options) {\n  const state = options?.state ?? _globalState;\n  return await state.bgLogger().flush();\n}\nfunction setFetch(fetch2) {\n  _globalState.setFetch(fetch2);\n}\nfunction startSpanAndIsLogger(args) {\n  const state = args?.state ?? _globalState;\n  const parentStr = args?.parent ?? state.currentParent.getStore();\n  const components = parentStr ? SpanComponentsV3.fromStr(parentStr) : void 0;\n  if (components) {\n    const parentSpanIds = components.data.row_id ? {\n      spanId: components.data.span_id,\n      rootSpanId: components.data.root_span_id\n    } : void 0;\n    const span = new SpanImpl({\n      state,\n      ...args,\n      parentObjectType: components.data.object_type,\n      parentObjectId: new LazyValue(\n        spanComponentsToObjectIdLambda(state, components)\n      ),\n      parentComputeObjectMetadataArgs: components.data.compute_object_metadata_args ?? void 0,\n      parentSpanIds,\n      propagatedEvent: args?.propagatedEvent ?? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      (components.data.propagated_event ?? void 0)\n    });\n    return {\n      span,\n      isSyncFlushLogger: components.data.object_type === SpanObjectTypeV3.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 parentObject = getSpanParentObject({\n      asyncFlush: args?.asyncFlush\n    });\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  return (state ?? _globalState).currentSpan.run(span, () => callback(span));\n}\nfunction withParent(parent, callback, state = void 0) {\n  return (state ?? _globalState).currentParent.run(parent, () => callback());\n}\nfunction _check_org_info(state, org_info, org_name) {\n  if (org_info.length === 0) {\n    throw new Error(\"This user is not part of any organizations.\");\n  }\n  for (const org of org_info) {\n    if (org_name === void 0 || org.name === org_name) {\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      break;\n    }\n  }\n  if (state.orgId === void 0) {\n    throw new Error(\n      `Organization ${org_name} not found. Must be one of ${org_info.map((x) => x.name).join(\", \")}`\n    );\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  }\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 (let [name, score] of Object.entries(event.scores)) {\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 IDENTIFIER = \"_bt_internal_saved_attachment\";\n  const savedAttachmentSchema = z2.strictObject({ [IDENTIFIER]: z2.number() });\n  const serialized = JSON.stringify(event, (_k, v) => {\n    if (v instanceof SpanImpl || v instanceof NoopSpan) {\n      return `<span>`;\n    } else if (v instanceof Experiment) {\n      return `<experiment>`;\n    } else if (v instanceof Dataset) {\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 { [IDENTIFIER]: idx - 1 };\n    } else if (v instanceof ReadonlyAttachment) {\n      return v.reference;\n    }\n    return v;\n  });\n  const x = JSON.parse(serialized, (_k, v) => {\n    const parsedAttachment = savedAttachmentSchema.safeParse(v);\n    if (parsedAttachment.success) {\n      return attachments[parsedAttachment.data[IDENTIFIER]];\n    }\n    return v;\n  });\n  return x;\n}\nfunction extractAttachments(event, attachments) {\n  for (const [key, value] of Object.entries(event)) {\n    if (value instanceof BaseAttachment) {\n      attachments.push(value);\n      event[key] = value.reference;\n      continue;\n    }\n    if (!(value instanceof Object)) {\n      continue;\n    }\n    extractAttachments(value, attachments);\n  }\n}\nfunction enrichAttachments(event) {\n  for (const [key, value] of Object.entries(event)) {\n    const parsedValue = attachmentReferenceSchema.safeParse(value);\n    if (parsedValue.success) {\n      event[key] = new ReadonlyAttachment(parsedValue.data);\n      continue;\n    }\n    if (!(value instanceof Object)) {\n      continue;\n    }\n    enrichAttachments(value);\n  }\n  return event;\n}\nfunction validateAndSanitizeExperimentLogFullArgs(event, hasDataset) {\n  if (\"input\" in event && !isEmpty(event.input) && \"inputs\" in event && !isEmpty(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 (isEmpty(event.output)) {\n    throw new Error(\"output must be specified\");\n  }\n  if (isEmpty(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 ObjectFetcher = class {\n  constructor(objectType, pinnedVersion, mutateRecord, _internal_btql) {\n    this.objectType = objectType;\n    this.pinnedVersion = pinnedVersion;\n    this.mutateRecord = mutateRecord;\n    this._internal_btql = _internal_btql;\n  }\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  async *fetch() {\n    const records = await this.fetchedData();\n    for (const record of records) {\n      yield record;\n    }\n  }\n  [Symbol.asyncIterator]() {\n    return this.fetch();\n  }\n  async fetchedData() {\n    if (this._fetchedData === void 0) {\n      const state = await this.getState();\n      let data = null;\n      if (this._internal_btql) {\n        const resp = await state.apiConn().post(\n          `btql`,\n          {\n            query: {\n              ...this._internal_btql,\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: await this.id\n                  }\n                ]\n              }\n            }\n          },\n          { headers: { \"Accept-Encoding\": \"gzip\" } }\n        );\n        data = (await resp.json()).data;\n      } else {\n        const resp = await state.apiConn().get(\n          `v1/${this.objectType}/${await this.id}/fetch`,\n          {\n            version: this.pinnedVersion\n          },\n          { headers: { \"Accept-Encoding\": \"gzip\" } }\n        );\n        data = (await resp.json()).events;\n      }\n      this._fetchedData = this.mutateRecord ? data?.map(this.mutateRecord) : data;\n    }\n    return this._fetchedData || [];\n  }\n  clearCache() {\n    this._fetchedData = void 0;\n  }\n  async version() {\n    if (this.pinnedVersion !== void 0) {\n      return this.pinnedVersion;\n    } else {\n      const fetchedData = await this.fetchedData();\n      let maxVersion = void 0;\n      for (const record of fetchedData) {\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 Experiment = 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, enrichAttachments);\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 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  parentObjectType() {\n    return SpanObjectTypeV3.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      state: this.state,\n      ...args,\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: SpanTypeAttribute.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    let { summarizeScores = true, comparisonExperimentId = void 0 } = options || {};\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      }\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    }\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\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, ...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      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 SpanComponentsV3({\n      object_type: this.parentObjectType(),\n      object_id: await this.id\n    }).toStr();\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    console.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, enrichAttachments);\n    this.state = state;\n    this.lazyMetadata = lazyMetadata;\n  }\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  async getState() {\n    await this.lazyMetadata.get();\n    return this.state;\n  }\n  async *asDataset() {\n    const records = this.fetch();\n    for await (const record of records) {\n      if (record.root_span_id !== record.span_id) {\n        continue;\n      }\n      const { output, expected: expectedRecord } = record;\n      const expected = expectedRecord ?? output;\n      if (isEmpty(expected)) {\n        yield {\n          input: record.input,\n          tags: record.tags\n        };\n      } else {\n        yield {\n          input: record.input,\n          expected,\n          tags: record.tags\n        };\n      }\n    }\n  }\n};\nvar executionCounter = 0;\nfunction newId() {\n  return uuidv4();\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  kind = \"span\";\n  constructor(args) {\n    this.state = args.state;\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: { ...callerLocation },\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 ?? uuidv4();\n    this._spanId = uuidv4();\n    if (args.parentSpanIds) {\n      this._rootSpanId = args.parentSpanIds.rootSpanId;\n      this._spanParents = [args.parentSpanIds.spanId];\n    } else {\n      this._rootSpanId = this._spanId;\n      this._spanParents = void 0;\n    }\n    this.isMerge = false;\n    this.logInternal({ event, internalData });\n    this.isMerge = true;\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  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 (partialRecord.metrics?.end) {\n      this.loggedEndTime = partialRecord.metrics?.end;\n    }\n    if ((partialRecord.tags ?? []).length > 0 && this._spanParents?.length) {\n      throw new Error(\"Tags can only be logged to the root span\");\n    }\n    const computeRecord = async () => ({\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    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      })\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    return new SpanComponentsV3({\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  async permalink() {\n    return await permalink(await this.export(), {\n      state: this.state\n    });\n  }\n  async flush() {\n    return await this.state.bgLogger().flush();\n  }\n  close(args) {\n    return this.end(args);\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 Dataset = class extends ObjectFetcher {\n  constructor(state, lazyMetadata, pinnedVersion, legacy, _internal_btql) {\n    const isLegacyDataset = legacy ?? DEFAULT_IS_LEGACY_DATASET;\n    if (isLegacyDataset) {\n      console.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) => ensureDatasetRecord(enrichAttachments(r), isLegacyDataset),\n      _internal_btql\n    );\n    this.state = state;\n    this.lazyMetadata = lazyMetadata;\n  }\n  lazyMetadata;\n  __braintrust_dataset_marker = true;\n  newRecords = 0;\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  async getState() {\n    await this.lazyMetadata.get();\n    return this.state;\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    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        ...!!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.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  }) {\n    this.validateEvent({ metadata, expected, output, tags });\n    const rowId = id || uuidv4();\n    const args = this.createArgs(\n      deepCopyEvent({\n        id: rowId,\n        input,\n        expected,\n        metadata,\n        tags,\n        output,\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  /**\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 = z2.object({\n        total_records: z2.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    console.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 renderMessage(render, message) {\n  return {\n    ...message,\n    ...\"content\" in message ? {\n      content: isEmpty(message.content) ? void 0 : typeof message.content === \"string\" ? render(message.content) : message.content.map((c) => {\n        switch (c.type) {\n          case \"text\":\n            return { ...c, text: render(c.text) };\n          case \"image_url\":\n            return {\n              ...c,\n              image_url: {\n                ...c.image_url,\n                url: render(c.image_url.url)\n              }\n            };\n          default:\n            const _exhaustiveCheck = c;\n            return _exhaustiveCheck;\n        }\n      })\n    } : {},\n    ...\"tool_calls\" in message ? {\n      tool_calls: isEmpty(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) {\n  if (typeof obj === \"string\") {\n    return Mustache.render(obj, args, void 0, {\n      escape: (value) => {\n        if (typeof value === \"string\") {\n          return value;\n        } else {\n          return JSON.stringify(value);\n        }\n      }\n    });\n  } else if (isArray(obj)) {\n    return obj.map((item) => renderTemplatedObject(item, args));\n  } else if (isObject(obj)) {\n    return Object.fromEntries(\n      Object.entries(obj).map(([key, value]) => [\n        key,\n        renderTemplatedObject(value, args)\n      ])\n    );\n  }\n  return obj;\n}\nfunction renderPromptParams(params, args) {\n  const schemaParsed = z2.object({\n    response_format: z2.object({\n      type: z2.literal(\"json_schema\"),\n      json_schema: responseFormatJsonSchemaSchema.omit({ schema: true }).extend({\n        schema: z2.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    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 Prompt = class {\n  constructor(metadata, defaults, noTrace) {\n    this.metadata = metadata;\n    this.defaults = defaults;\n    this.noTrace = noTrace;\n  }\n  parsedPromptData;\n  hasParsedPromptData = false;\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  /**\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    });\n  }\n  runBuild(buildArgs, options) {\n    const { flavor } = options;\n    const params = {\n      ...this.defaults,\n      ...Object.fromEntries(\n        Object.entries(this.options.params || {}).filter(\n          ([k, _v]) => !BRAINTRUST_PARAMS.includes(k)\n        )\n      ),\n      ...!isEmpty(this.options.model) ? {\n        model: this.options.model\n      } : {}\n    };\n    if (!(\"model\" in params) || isEmpty(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 = z2.record(z2.unknown()).safeParse(buildArgs);\n    const variables = {\n      input: buildArgs,\n      ...dictArgParsed.success ? dictArgParsed.data : {}\n    };\n    if (flavor === \"chat\") {\n      if (prompt.type !== \"chat\") {\n        throw new Error(\n          \"Prompt is a completion prompt. Use buildCompletion() instead\"\n        );\n      }\n      const render = (template) => Mustache.render(template, variables, void 0, {\n        escape: (v) => typeof v === \"string\" ? v : JSON.stringify(v)\n      });\n      const messages = [\n        ...(prompt.messages || []).map((m) => renderMessage(render, m)),\n        ...options.messages ?? []\n      ];\n      return {\n        ...renderPromptParams(params, variables),\n        ...spanInfo,\n        messages,\n        ...prompt.tools?.trim() ? {\n          tools: toolsSchema.parse(\n            JSON.parse(Mustache.render(prompt.tools, variables))\n          )\n        } : void 0\n      };\n    } else if (flavor === \"completion\") {\n      if (prompt.type !== \"completion\") {\n        throw new Error(`Prompt is a chat prompt. Use flavor: 'chat' instead`);\n      }\n      if (options.messages) {\n        throw new Error(\n          \"extra messages are not supported for completion prompts\"\n        );\n      }\n      return {\n        ...renderPromptParams(params, variables),\n        ...spanInfo,\n        prompt: Mustache.render(prompt.content, variables)\n      };\n    } else {\n      throw new Error(\"never!\");\n    }\n  }\n  getParsedPromptData() {\n    if (!this.hasParsedPromptData) {\n      this.parsedPromptData = promptDataSchema.parse(this.metadata.prompt_data);\n      this.hasParsedPromptData = true;\n    }\n    return this.parsedPromptData;\n  }\n};\nvar _exportsForTestingOnly = { extractAttachments, deepCopyEvent };\n\n// src/node.ts\nimport { promisify } from \"util\";\nimport * as zlib from \"zlib\";\nfunction configureNode() {\n  isomorph_default.getRepoInfo = getRepoInfo;\n  isomorph_default.getPastNAncestors = getPastNAncestors;\n  isomorph_default.getEnv = (name) => process.env[name];\n  isomorph_default.getCallerLocation = getCallerLocation;\n  isomorph_default.newAsyncLocalStorage = () => new AsyncLocalStorage();\n  isomorph_default.processOn = (event, handler) => {\n    process.on(event, handler);\n  };\n  isomorph_default.pathJoin = path.join;\n  isomorph_default.pathDirname = path.dirname;\n  isomorph_default.mkdir = fs.mkdir;\n  isomorph_default.writeFile = fs.writeFile;\n  isomorph_default.readFile = fs.readFile;\n  isomorph_default.readdir = fs.readdir;\n  isomorph_default.stat = fs.stat;\n  isomorph_default.utimes = fs.utimes;\n  isomorph_default.unlink = fs.unlink;\n  isomorph_default.homedir = os.homedir;\n  isomorph_default.gzip = promisify(zlib.gzip);\n  isomorph_default.gunzip = promisify(zlib.gunzip);\n  _internalSetInitialState();\n}\n\n// src/exports-node.ts\nvar exports_node_exports = {};\n__export(exports_node_exports, {\n  Attachment: () => Attachment,\n  BaseAttachment: () => BaseAttachment,\n  BaseExperiment: () => BaseExperiment,\n  BraintrustState: () => BraintrustState,\n  BraintrustStream: () => BraintrustStream,\n  CodeFunction: () => CodeFunction,\n  CodePrompt: () => CodePrompt,\n  Dataset: () => Dataset,\n  Eval: () => Eval,\n  Experiment: () => Experiment,\n  ExternalAttachment: () => ExternalAttachment,\n  FailedHTTPResponse: () => FailedHTTPResponse,\n  LEGACY_CACHED_HEADER: () => LEGACY_CACHED_HEADER,\n  LazyValue: () => LazyValue,\n  Logger: () => Logger,\n  NOOP_SPAN: () => NOOP_SPAN,\n  NOOP_SPAN_PERMALINK: () => NOOP_SPAN_PERMALINK,\n  NoopSpan: () => NoopSpan,\n  Project: () => Project,\n  Prompt: () => Prompt,\n  PromptBuilder: () => PromptBuilder,\n  ReadonlyAttachment: () => ReadonlyAttachment,\n  ReadonlyExperiment: () => ReadonlyExperiment,\n  Reporter: () => Reporter,\n  ScorerBuilder: () => ScorerBuilder,\n  SpanImpl: () => SpanImpl,\n  ToolBuilder: () => ToolBuilder,\n  X_CACHED_HEADER: () => X_CACHED_HEADER,\n  _exportsForTestingOnly: () => _exportsForTestingOnly,\n  _internalGetGlobalState: () => _internalGetGlobalState,\n  _internalSetInitialState: () => _internalSetInitialState,\n  braintrustStreamChunkSchema: () => braintrustStreamChunkSchema,\n  buildLocalSummary: () => buildLocalSummary,\n  createFinalValuePassThroughStream: () => createFinalValuePassThroughStream,\n  currentExperiment: () => currentExperiment,\n  currentLogger: () => currentLogger,\n  currentSpan: () => currentSpan,\n  defaultErrorScoreHandler: () => defaultErrorScoreHandler,\n  deserializePlainStringAsJSON: () => deserializePlainStringAsJSON,\n  devNullWritableStream: () => devNullWritableStream,\n  flush: () => flush,\n  getSpanParentObject: () => getSpanParentObject,\n  init: () => init,\n  initDataset: () => initDataset,\n  initExperiment: () => initExperiment,\n  initFunction: () => initFunction,\n  initLogger: () => initLogger,\n  invoke: () => invoke,\n  loadPrompt: () => loadPrompt,\n  log: () => log,\n  logError: () => logError,\n  login: () => login,\n  loginToState: () => loginToState,\n  newId: () => newId,\n  parseCachedHeader: () => parseCachedHeader,\n  permalink: () => permalink,\n  projects: () => projects,\n  renderMessage: () => renderMessage,\n  renderPromptParams: () => renderPromptParams,\n  reportFailures: () => reportFailures,\n  runEvaluator: () => runEvaluator,\n  setFetch: () => setFetch,\n  spanComponentsToObjectId: () => spanComponentsToObjectId,\n  startSpan: () => startSpan,\n  summarize: () => summarize,\n  toolFunctionDefinitionSchema: () => toolFunctionDefinitionSchema,\n  traceable: () => traceable,\n  traced: () => traced,\n  updateSpan: () => updateSpan,\n  withCurrent: () => withCurrent,\n  withDataset: () => withDataset,\n  withExperiment: () => withExperiment,\n  withLogger: () => withLogger,\n  withParent: () => withParent,\n  wrapAISDKModel: () => wrapAISDKModel,\n  wrapOpenAI: () => wrapOpenAI,\n  wrapOpenAIv4: () => wrapOpenAIv4,\n  wrapTraced: () => wrapTraced\n});\n\n// src/functions/invoke.ts\nimport {\n  functionIdSchema\n} from \"@braintrust/core/typespecs\";\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    state: stateArg,\n    stream,\n    mode,\n    schema,\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 = functionIdSchema.safeParse({\n    project_name: functionIdArgs.projectName,\n    slug: functionIdArgs.slug,\n    global_function: functionIdArgs.globalFunction,\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    stream,\n    mode\n  };\n  const resp = await state.proxyConn().post(`function/invoke`, request, {\n    headers: {\n      Accept: stream ? \"text/event-stream\" : \"application/json\"\n    }\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}) {\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/framework.ts\nimport { SpanTypeAttribute as SpanTypeAttribute2, mergeDicts as mergeDicts2 } from \"@braintrust/core\";\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, error2, value) {\n  try {\n    callback(error2, 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 isAsyncGenerator(fn) {\n  return fn[Symbol.toStringTag] === \"AsyncGenerator\";\n}\nfunction isAsyncIterable(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 isArrayLike(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 (isArrayLike(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 (isAsyncGenerator(obj)) {\n      return asyncEachOfLimit(obj, limit, iteratee, callback);\n    }\n    if (isAsyncIterable(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 = isArrayLike(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 PROMISE_SYMBOL = Symbol(\"promiseCallback\");\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 = isArrayLike(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 = isArrayLike(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 error2 = 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      error2 = err;\n      taskCb(err ? null : {});\n    });\n  }, () => callback(error2, 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\nimport chalk from \"chalk\";\nimport pluralize from \"pluralize\";\n\n// src/progress.ts\nimport * as cliProgress from \"cli-progress\";\nvar MAX_NAME_LENGTH = 40;\nfunction fitNameToSpaces(name, length) {\n  const padded = name.padEnd(length);\n  if (padded.length <= length) {\n    return padded;\n  }\n  return padded.substring(0, length - 3) + \"...\";\n}\nvar BarProgressReporter = class {\n  multiBar;\n  bars = {};\n  constructor() {\n    this.multiBar = new cliProgress.MultiBar(\n      {\n        clearOnComplete: false,\n        format: \" {bar} | {evaluator} | {percentage}% | {value}/{total} datapoints\",\n        autopadding: true\n      },\n      cliProgress.Presets.shades_grey\n    );\n  }\n  start(name, total) {\n    const bar = this.multiBar.create(total, 0);\n    this.bars[name] = bar;\n  }\n  stop() {\n    this.multiBar.stop();\n  }\n  increment(name) {\n    this.bars[name].increment({\n      evaluator: fitNameToSpaces(name, MAX_NAME_LENGTH)\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  toString() {\n    return formatExperimentSummary(this.summary);\n  }\n  [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};\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}\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}\nglobalThis._evals = {\n  functions: [],\n  prompts: [],\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 = isEmpty(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 BarProgressReporter();\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, baseExperiment: defaultBaseExperiment } = callEvaluatorData(\n      evaluator.data\n    );\n    const experiment = options.parent ? null : initExperiment2(evaluator.state, {\n      ...evaluator.projectId ? { projectId: evaluator.projectId } : { project: name },\n      experiment: evaluator.experimentName,\n      metadata: evaluator.metadata,\n      isPublic: evaluator.isPublic,\n      update: evaluator.update,\n      baseExperiment: evaluator.baseExperimentName ?? defaultBaseExperiment,\n      baseExperimentId: evaluator.baseExperimentId,\n      gitMetadataSettings: evaluator.gitMetadataSettings,\n      repoInfo: evaluator.repoInfo,\n      dataset: Dataset.isDataset(data) ? data : void 0\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      let ret;\n      if (options.parent) {\n        ret = await withParent(\n          options.parent,\n          () => runEvaluator(null, evalDef, progressReporter, [], options.stream),\n          evaluator.state\n        );\n      } else {\n        ret = await runEvaluator(\n          experiment,\n          evalDef,\n          progressReporter,\n          [],\n          options.stream\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        experiment.flush().catch(console.error);\n      } else if (options.parent) {\n        flush().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: path3, pattern } = filter2;\n  const key = path3.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}\nasync function runEvaluator(experiment, evaluator, progressReporter, filters, stream) {\n  return await runEvaluatorInternal(\n    experiment,\n    evaluator,\n    progressReporter,\n    filters,\n    stream\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) {\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 (isEmpty(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  let data = [];\n  if (dataResult instanceof Promise) {\n    data = await dataResult;\n  } else if (Symbol.asyncIterator in dataResult) {\n    data = [];\n    for await (const d of dataResult) {\n      data.push(d);\n    }\n  } else {\n    data = dataResult;\n  }\n  data = data.filter((d) => filters.every((f) => evaluateFilter(d, f))).flatMap(\n    (datum) => [...Array(evaluator.trialCount ?? 1).keys()].map(() => datum)\n  );\n  progressReporter.start(evaluator.evalName, data.length);\n  const results = [];\n  const q = queue(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    async (datum) => {\n      const eventDataset = experiment ? experiment.dataset : Dataset.isDataset(evaluator.data) ? evaluator.data : void 0;\n      const baseEvent = {\n        name: \"eval\",\n        spanAttributes: {\n          type: SpanTypeAttribute2.EVAL\n        },\n        event: {\n          input: datum.input,\n          expected: \"expected\" in datum ? datum.expected : void 0,\n          tags: datum.tags,\n          origin: 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          ...datum.upsert_id ? { id: datum.upsert_id } : {}\n        }\n      };\n      const callback = async (rootSpan) => {\n        let metadata = {\n          ...\"metadata\" in datum ? datum.metadata : {}\n        };\n        const expected = \"expected\" in datum ? datum.expected : void 0;\n        let output = void 0;\n        let error2 = void 0;\n        const scores = {};\n        const scorerNames = evaluator.scores.map(scorerName);\n        let unhandledScores = scorerNames;\n        try {\n          const meta = (o) => metadata = { ...metadata, ...o };\n          await rootSpan.traced(\n            async (span) => {\n              const outputResult = evaluator.task(datum.input, {\n                meta,\n                metadata,\n                expected,\n                span,\n                reportProgress: (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              });\n              if (outputResult instanceof Promise) {\n                output = await outputResult;\n              } else {\n                output = outputResult;\n              }\n              span.log({ output });\n            },\n            {\n              name: \"task\",\n              spanAttributes: { type: SpanTypeAttribute2.TASK },\n              event: { input: datum.input }\n            }\n          );\n          rootSpan.log({ output, metadata, expected });\n          const scoringArgs = {\n            input: datum.input,\n            expected: \"expected\" in datum ? datum.expected : void 0,\n            metadata,\n            output\n          };\n          const scoreResults = await Promise.all(\n            evaluator.scores.map(async (score, score_idx) => {\n              try {\n                const results2 = await rootSpan.traced(\n                  async (span) => {\n                    const scoreResult = score(scoringArgs);\n                    const scoreValue = scoreResult instanceof Promise ? await scoreResult : scoreResult;\n                    if (scoreValue === null) {\n                      return null;\n                    }\n                    if (Array.isArray(scoreValue)) {\n                      for (const s of scoreValue) {\n                        if (!(typeof s === \"object\" && !isEmpty(s))) {\n                          throw new Error(\n                            `When returning an array of scores, each score must be a non-empty object. Got: ${JSON.stringify(\n                              s\n                            )}`\n                          );\n                        }\n                      }\n                    }\n                    const results3 = Array.isArray(scoreValue) ? scoreValue : typeof scoreValue === \"object\" && !isEmpty(scoreValue) ? [scoreValue] : [\n                      {\n                        name: scorerNames[score_idx],\n                        score: scoreValue\n                      }\n                    ];\n                    const getOtherFields = (s) => {\n                      const { metadata: _metadata, name: _name, ...rest } = s;\n                      return rest;\n                    };\n                    const resultMetadata = results3.length === 1 ? results3[0].metadata : results3.reduce(\n                      (prev, s) => mergeDicts2(prev, {\n                        [s.name]: s.metadata\n                      }),\n                      {}\n                    );\n                    const resultOutput = results3.length === 1 ? getOtherFields(results3[0]) : results3.reduce(\n                      (prev, s) => mergeDicts2(prev, { [s.name]: getOtherFields(s) }),\n                      {}\n                    );\n                    const scores2 = results3.reduce(\n                      (prev, s) => mergeDicts2(prev, { [s.name]: s.score }),\n                      {}\n                    );\n                    span.log({\n                      output: resultOutput,\n                      metadata: resultMetadata,\n                      scores: scores2\n                    });\n                    return results3;\n                  },\n                  {\n                    name: scorerNames[score_idx],\n                    spanAttributes: {\n                      type: SpanTypeAttribute2.SCORE\n                    },\n                    event: { input: scoringArgs }\n                  }\n                );\n                return { kind: \"score\", value: results2 };\n              } catch (e) {\n                return { kind: \"error\", value: e };\n              }\n            })\n          );\n          const failingScorersAndResults = [];\n          scoreResults.forEach((results2, i) => {\n            const name = scorerNames[i];\n            if (results2.kind === \"score\") {\n              (results2.value || []).forEach((result) => {\n                scores[result.name] = result.score;\n              });\n            } else {\n              failingScorersAndResults.push({ name, error: results2.value });\n            }\n          });\n          unhandledScores = null;\n          if (failingScorersAndResults.length) {\n            const scorerErrors = Object.fromEntries(\n              failingScorersAndResults.map(({ name, error: error3 }) => [\n                name,\n                error3 instanceof Error ? error3.stack : `${error3}`\n              ])\n            );\n            metadata[\"scorer_errors\"] = scorerErrors;\n            rootSpan.log({\n              metadata: { scorer_errors: scorerErrors }\n            });\n            const names = Object.keys(scorerErrors).join(\", \");\n            const errors = failingScorersAndResults.map((item) => item.error);\n            unhandledScores = Object.keys(scorerErrors);\n            console.warn(\n              `Found exceptions for the following scorers: ${names}`,\n              errors\n            );\n          }\n        } catch (e) {\n          logError(rootSpan, e);\n          error2 = e;\n        } finally {\n          progressReporter.increment(evaluator.evalName);\n        }\n        results.push({\n          input: datum.input,\n          ...\"expected\" in datum ? { expected: datum.expected } : {},\n          output,\n          tags: datum.tags,\n          metadata,\n          scores: {\n            ...evaluator.errorScoreHandler && unhandledScores ? evaluator.errorScoreHandler({\n              rootSpan,\n              data: datum,\n              unhandledScores\n            }) : void 0,\n            ...scores\n          },\n          error: error2\n        });\n      };\n      if (!experiment) {\n        return await traced(callback, {\n          ...baseEvent,\n          state: evaluator.state\n        });\n      } else {\n        return await experiment.traced(callback, baseEvent);\n      }\n    },\n    Math.max(evaluator.maxConcurrency ?? data.length, 1)\n  );\n  q.push(data);\n  const cancel = async () => {\n    await new Promise((_, reject2) => {\n      if (evaluator.timeout) {\n        setTimeout(() => {\n          reject2(new InternalAbortError(\"Evaluator timed out\"));\n        }, evaluator.timeout);\n      }\n      if (evaluator.signal) {\n        evaluator.signal.addEventListener(\"abort\", () => {\n          reject2(new InternalAbortError(\"Evaluator aborted\"));\n        });\n      }\n    });\n  };\n  try {\n    await Promise.race([q.drain(), cancel()]);\n  } catch (e) {\n    if (e instanceof InternalAbortError) {\n      q.kill();\n    }\n    throw e;\n  }\n  const summary = experiment ? await experiment.summarize() : buildLocalSummary(evaluator, results);\n  return new EvalResultWithSummary(summary, results);\n}\nvar error = chalk.bold.red;\nvar warning = chalk.hex(\"#FFA500\");\nfunction logError2(e, verbose) {\n  if (!verbose) {\n    console.error(`${e}`);\n  } else {\n    console.error(e);\n  }\n}\nfunction buildLocalSummary(evaluator, results) {\n  const scoresByName = {};\n  for (const result of results) {\n    for (const [name, score] of Object.entries(result.scores)) {\n      const { total, count } = scoresByName[name] || { total: 0, count: 0 };\n      if (score === null) {\n        continue;\n      }\n      scoresByName[name] = { total: total + score, count: count + 1 };\n    }\n  }\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: 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 ${pluralize(\n          \"error\",\n          failingResults.length,\n          true\n        )}. 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(warning(\"Add --verbose to see full stack traces.\"));\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    process.stdout.write(\n      jsonl ? JSON.stringify(summary) : formatExperimentSummary(summary)\n    );\n    process.stdout.write(\"\\n\");\n    return failingResults.length === 0;\n  },\n  async reportRun(evalReports) {\n    return evalReports.every((r) => r);\n  }\n};\nfunction formatExperimentSummary(summary) {\n  let comparisonLine = \"\";\n  if (summary.comparisonExperimentName) {\n    comparisonLine = `${summary.experimentName} compared to ${summary.comparisonExperimentName}:\n`;\n  }\n  const longestScoreName = Math.max(\n    ...Object.values(summary.scores).map((score) => score.name.length)\n  );\n  const longestMetricName = Math.max(\n    ...Object.values(summary.metrics ?? {}).map((metric) => metric.name.length)\n  );\n  return `\n=========================SUMMARY=========================\n${comparisonLine}` + Object.values(summary.scores).map((score) => formatScoreSummary(score, longestScoreName)).join(\"\\n\") + (Object.keys(summary.scores).length ? \"\\n\\n\" : \"\") + Object.values(summary.metrics ?? {}).map((metric) => formatMetricSummary(metric, longestMetricName)).join(\"\\n\") + (Object.keys(summary.metrics ?? {}).length ? \"\\n\\n\" : \"\") + (summary.experimentUrl ? `See results for ${summary.experimentName} at ${summary.experimentUrl}` : \"\");\n}\nfunction formatScoreSummary(summary, longestScoreName) {\n  const diffString = isEmpty(summary.diff) ? \"\" : ` (${summary.diff > 0 ? \"+\" : \"\"}${(summary.diff * 100).toFixed(2)}%)`;\n  const scoreName = `'${summary.name}'`.padEnd(longestScoreName + 2);\n  return `${(summary.score * 100).toFixed(\n    2\n  )}%${diffString} ${scoreName} score\t(${summary.improvements} improvements, ${summary.regressions} regressions)`;\n}\nfunction formatMetricSummary(summary, longestMetricName) {\n  const fractionDigits = Number.isInteger(summary.metric) ? 0 : 2;\n  const metricName = `'${summary.name}'`.padEnd(longestMetricName + 2);\n  return `${summary.metric.toFixed(fractionDigits)}${summary.unit} ${metricName}\t(${summary.improvements} improvements, ${summary.regressions} regressions)`;\n}\n\n// src/framework2.ts\nimport path2 from \"path\";\nimport slugifyLib from \"slugify\";\nimport {\n  toolFunctionDefinitionSchema\n} from \"@braintrust/core/typespecs\";\nvar ProjectBuilder = class {\n  create(opts) {\n    return new Project(opts);\n  }\n};\nvar projects = new ProjectBuilder();\nvar Project = class {\n  name;\n  id;\n  tools;\n  prompts;\n  scorers;\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.tools = new ToolBuilder(this);\n    this.prompts = new PromptBuilder(this);\n    this.scorers = new ScorerBuilder(this);\n  }\n};\nvar ToolBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\n  taskCounter = 0;\n  create(opts) {\n    this.taskCounter++;\n    opts = opts ?? {};\n    const { handler, name, slug, ...rest } = opts;\n    let resolvedName = name ?? handler.name;\n    if (resolvedName.trim().length === 0) {\n      resolvedName = `Tool ${path2.basename(__filename)} ${this.taskCounter}`;\n    }\n    const tool = new CodeFunction(\n      this.project,\n      {\n        handler,\n        name: resolvedName,\n        slug: slug ?? slugifyLib(resolvedName, { lower: true, strict: true }),\n        type: \"tool\",\n        ...rest\n      }\n    );\n    if (globalThis._lazy_load) {\n      globalThis._evals.functions.push(\n        tool\n      );\n    }\n    return tool;\n  }\n};\nvar ScorerBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\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 ${path2.basename(__filename)} ${this.taskCounter}`;\n    }\n    const slug = opts.slug ?? slugifyLib(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      if (globalThis._lazy_load) {\n        globalThis._evals.functions.push(\n          scorer\n        );\n      }\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      };\n      const codePrompt = new CodePrompt(\n        this.project,\n        promptData,\n        [],\n        {\n          ...opts,\n          name: resolvedName,\n          slug\n        },\n        \"scorer\"\n      );\n      if (globalThis._lazy_load) {\n        globalThis._evals.prompts.push(codePrompt);\n      }\n    }\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.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  handler;\n  name;\n  slug;\n  type;\n  description;\n  parameters;\n  returns;\n  ifExists;\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  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  }\n};\nvar PromptBuilder = class {\n  constructor(project) {\n    this.project = project;\n  }\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 promptBlock = \"messages\" in opts ? {\n      type: \"chat\",\n      messages: opts.messages,\n      tools: rawTools && rawTools.length > 0 ? JSON.stringify(rawTools) : void 0\n    } : {\n      type: \"completion\",\n      content: opts.prompt\n    };\n    const slug = opts.slug ?? slugifyLib(opts.name, { lower: true, strict: true });\n    const promptData = {\n      prompt: promptBlock,\n      options: {\n        model: opts.model,\n        params: opts.params\n      }\n    };\n    const promptRow = {\n      id: opts.id,\n      _xact_id: opts.version,\n      name: opts.name,\n      slug,\n      prompt_data: promptData\n    };\n    const prompt = new Prompt(\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    if (globalThis._lazy_load) {\n      globalThis._evals.prompts.push(codePrompt);\n    }\n    return prompt;\n  }\n};\n\n// src/wrappers/oai.ts\nimport { SpanTypeAttribute as SpanTypeAttribute3 } from \"@braintrust/core\";\nimport { mergeDicts as mergeDicts3 } from \"@braintrust/core\";\nfunction wrapOpenAI(openai) {\n  if (openai?.chat?.completions?.create) {\n    return wrapOpenAIv4(openai);\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 completionProxy = createEndpointProxy(\n    openai.chat.completions,\n    wrapChatCompletion\n  );\n  const chatProxy = new Proxy(openai.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(openai.embeddings, wrapEmbeddings);\n  const moderationProxy = createEndpointProxy(openai.moderations, wrapModerations);\n  let betaProxy;\n  if (openai.beta?.chat?.completions?.stream) {\n    const betaChatCompletionProxy = new Proxy(openai?.beta?.chat.completions, {\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    const betaChatProxy = new Proxy(openai.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    betaProxy = new Proxy(openai.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  return new Proxy(openai, {\n    get(target, name, receiver) {\n      if (name === \"chat\") {\n        return chatProxy;\n      }\n      if (name === \"embeddings\") {\n        return embeddingProxy;\n      }\n      if (name === \"moderations\") {\n        return moderationProxy;\n      }\n      if (name === \"beta\" && betaProxy) {\n        return betaProxy;\n      }\n      return Reflect.get(target, name, receiver);\n    }\n  });\n}\nfunction logCompletionResponse(startTime, response, span) {\n  span.log({\n    output: response.choices,\n    metrics: {\n      time_to_first_token: getCurrentUnixTimestamp() - startTime,\n      tokens: response.usage?.total_tokens,\n      prompt_tokens: response.usage?.prompt_tokens,\n      completion_tokens: response.usage?.completion_tokens\n    }\n  });\n}\nfunction wrapBetaChatCompletionParse(completion) {\n  return async (allParams) => {\n    const { span_info: _, ...params } = allParams;\n    const span = startSpan(\n      mergeDicts3(\n        {\n          name: \"Chat Completion\",\n          spanAttributes: {\n            type: SpanTypeAttribute3.LLM\n          }\n        },\n        parseChatCompletionParams(allParams)\n      )\n    );\n    const startTime = getCurrentUnixTimestamp();\n    const ret = await completion(params);\n    try {\n      logCompletionResponse(startTime, ret, span);\n      return ret;\n    } finally {\n      span.end();\n    }\n  };\n}\nfunction wrapBetaChatCompletionStream(completion) {\n  return (allParams) => {\n    const { span_info: _, ...params } = allParams;\n    const span = startSpan(\n      mergeDicts3(\n        {\n          name: \"Chat Completion\",\n          spanAttributes: {\n            type: SpanTypeAttribute3.LLM\n          }\n        },\n        parseChatCompletionParams(allParams)\n      )\n    );\n    const startTime = getCurrentUnixTimestamp();\n    const ret = completion(params);\n    let first = true;\n    ret.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    ret.on(\"chatCompletion\", (completion2) => {\n      span.log({\n        output: completion2.choices\n      });\n    });\n    ret.on(\"end\", () => {\n      span.end();\n    });\n    return ret;\n  };\n}\nvar LEGACY_CACHED_HEADER = \"x-cached\";\nvar X_CACHED_HEADER = \"x-bt-cached\";\nfunction parseCachedHeader(value) {\n  return isEmpty(value) ? void 0 : [\"true\", \"hit\"].includes(value.toLowerCase()) ? 1 : 0;\n}\nfunction logHeaders(response, span) {\n  const cachedHeader = response.headers.get(X_CACHED_HEADER);\n  if (isEmpty(cachedHeader)) {\n    const legacyCacheHeader = response.headers.get(LEGACY_CACHED_HEADER);\n    if (!isEmpty(legacyCacheHeader)) {\n      span.log({\n        metrics: {\n          cached: parseCachedHeader(legacyCacheHeader)\n        }\n      });\n    }\n  } else {\n    span.log({\n      metrics: {\n        cached: parseCachedHeader(cachedHeader)\n      }\n    });\n  }\n}\nfunction wrapChatCompletion(completion) {\n  return async (allParams, options) => {\n    const { span_info: _, ...params } = allParams;\n    const span = startSpan(\n      mergeDicts3(\n        {\n          name: \"Chat Completion\",\n          spanAttributes: {\n            type: SpanTypeAttribute3.LLM\n          }\n        },\n        parseChatCompletionParams(allParams)\n      )\n    );\n    const startTime = getCurrentUnixTimestamp();\n    if (params.stream) {\n      const { data: ret, response } = await completion(\n        // We could get rid of this type coercion if we could somehow enforce\n        // that `P extends ChatParams` BUT does not have the property\n        // `span_info`.\n        params,\n        options\n      ).withResponse();\n      logHeaders(response, span);\n      const wrapperStream = new WrapperStream(span, startTime, ret.iterator());\n      ret.iterator = () => wrapperStream[Symbol.asyncIterator]();\n      return ret;\n    } else {\n      try {\n        const { data: ret, response } = await completion(\n          params,\n          options\n        ).withResponse();\n        logHeaders(response, span);\n        const { messages, ...rest } = params;\n        span.log({\n          input: messages,\n          metadata: {\n            ...rest\n          }\n        });\n        logCompletionResponse(startTime, ret, span);\n        return ret;\n      } finally {\n        span.end();\n      }\n    }\n  };\n}\nfunction parseBaseParams(allParams, inputField) {\n  const { span_info, ...params } = allParams;\n  const { metadata: spanInfoMetadata, ...spanInfoRest } = span_info ?? {};\n  let ret = {\n    ...spanInfoRest,\n    event: {\n      metadata: spanInfoMetadata\n    }\n  };\n  const input = params[inputField];\n  const paramsRest = { ...params };\n  delete paramsRest[inputField];\n  return mergeDicts3(ret, { event: { input, metadata: paramsRest } });\n}\nfunction createApiWrapper(name, create, processResponse, parseParams) {\n  return async (allParams, options) => {\n    const { span_info: _, ...params } = allParams;\n    return traced(\n      async (span) => {\n        const { data: result, response } = await create(\n          params,\n          options\n        ).withResponse();\n        logHeaders(response, span);\n        processResponse(result, span);\n        return result;\n      },\n      mergeDicts3(\n        {\n          name,\n          spanAttributes: {\n            type: SpanTypeAttribute3.LLM\n          }\n        },\n        parseParams(allParams)\n      )\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 parseChatCompletionParams(params) {\n  return parseBaseParams(params, \"messages\");\n}\nfunction processEmbeddingResponse(result, span) {\n  span.log({\n    output: { embedding_length: result.data[0].embedding.length },\n    metrics: {\n      tokens: result.usage?.total_tokens,\n      prompt_tokens: result.usage?.prompt_tokens\n    }\n  });\n}\nfunction processModerationResponse(result, span) {\n  span.log({\n    output: result.results\n  });\n}\nvar wrapEmbeddings = (create) => createApiWrapper(\n  \"Embedding\",\n  create,\n  processEmbeddingResponse,\n  (params) => parseBaseParams(params, \"input\")\n);\nvar wrapModerations = (create) => createApiWrapper(\n  \"Moderation\",\n  create,\n  processModerationResponse,\n  (params) => parseBaseParams(params, \"input\")\n);\nfunction postprocessStreamingResults(allResults) {\n  let role = void 0;\n  let content = void 0;\n  let tool_calls = void 0;\n  let finish_reason = void 0;\n  let metrics = {};\n  for (const result of allResults) {\n    if (result.usage) {\n      metrics = {\n        ...metrics,\n        tokens: result.usage.total_tokens,\n        prompt_tokens: result.usage.prompt_tokens,\n        completion_tokens: result.usage.completion_tokens\n      };\n    }\n    const delta = result.choices?.[0]?.delta;\n    if (!delta) {\n      continue;\n    }\n    if (!role && delta.role) {\n      role = delta.role;\n    }\n    if (delta.finish_reason) {\n      finish_reason = delta.finish_reason;\n    }\n    if (delta.content) {\n      content = (content || \"\") + delta.content;\n    }\n    if (delta.tool_calls) {\n      if (!tool_calls) {\n        tool_calls = [\n          {\n            id: delta.tool_calls[0].id,\n            type: delta.tool_calls[0].type,\n            function: delta.tool_calls[0].function\n          }\n        ];\n      } else {\n        tool_calls[0].function.arguments += delta.tool_calls[0].function.arguments;\n      }\n    }\n  }\n  return {\n    metrics,\n    output: [\n      {\n        index: 0,\n        message: {\n          role,\n          content,\n          tool_calls\n        },\n        logprobs: null,\n        finish_reason\n      }\n    ]\n  };\n}\nvar WrapperStream = class {\n  span;\n  iter;\n  startTime;\n  constructor(span, startTime, iter) {\n    this.span = span;\n    this.iter = iter;\n    this.startTime = startTime;\n  }\n  async *[Symbol.asyncIterator]() {\n    let first = true;\n    let allResults = [];\n    try {\n      for await (const item of this.iter) {\n        if (first) {\n          const now2 = getCurrentUnixTimestamp();\n          this.span.log({\n            metrics: {\n              time_to_first_token: now2 - this.startTime\n            }\n          });\n          first = false;\n        }\n        allResults.push(item);\n        yield item;\n      }\n      this.span.log({\n        ...postprocessStreamingResults(allResults)\n      });\n    } finally {\n      this.span.end();\n    }\n  }\n};\n\n// src/wrappers/ai-sdk.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  }\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  get supportsUrl() {\n    return this.model.supportsUrl;\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      name: \"Chat Completion\",\n      spanAttributes: {\n        type: \"llm\"\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: !isEmpty(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      name: \"Chat Completion\",\n      spanAttributes: {\n        type: \"llm\"\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 toolCalls = {};\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                  toolCalls[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 (toolCalls[chunk.toolCallId] === void 0) {\n                    toolCalls[chunk.toolCallId] = {\n                      toolCallType: chunk.toolCallType,\n                      toolCallId: chunk.toolCallId,\n                      toolName: chunk.toolName,\n                      args: \"\"\n                    };\n                  }\n                  toolCalls[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(toolCalls).length > 0 ? Object.values(toolCalls) : void 0,\n                  finishReason\n                ),\n                metrics: {\n                  time_to_first_token: getCurrentUnixTimestamp() - startTime,\n                  tokens: !isEmpty(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 = (\n          // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n          message.content.filter(\n            (part) => part.type === \"tool-call\"\n          )\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, toolCalls, finishReason) {\n  return {\n    index: 0,\n    message: {\n      role: \"assistant\",\n      content: text ?? (toolCalls ? toolCalls.length === 1 && toolCalls[0].toolName === \"json\" ? toolCalls[0].args : JSON.stringify(toolCalls) : \"\")\n    },\n    finish_reason: finishReason\n  };\n}\n\n// src/index.ts\nconfigureNode();\nvar index_default = exports_node_exports;\nexport {\n  Attachment,\n  BaseAttachment,\n  BaseExperiment,\n  BraintrustState,\n  BraintrustStream,\n  CodeFunction,\n  CodePrompt,\n  Dataset,\n  Eval,\n  Experiment,\n  ExternalAttachment,\n  FailedHTTPResponse,\n  LEGACY_CACHED_HEADER,\n  LazyValue,\n  Logger,\n  NOOP_SPAN,\n  NOOP_SPAN_PERMALINK,\n  NoopSpan,\n  Project,\n  Prompt,\n  PromptBuilder,\n  ReadonlyAttachment,\n  ReadonlyExperiment,\n  Reporter,\n  ScorerBuilder,\n  SpanImpl,\n  ToolBuilder,\n  X_CACHED_HEADER,\n  _exportsForTestingOnly,\n  _internalGetGlobalState,\n  _internalSetInitialState,\n  braintrustStreamChunkSchema,\n  buildLocalSummary,\n  createFinalValuePassThroughStream,\n  currentExperiment,\n  currentLogger,\n  currentSpan,\n  index_default as default,\n  defaultErrorScoreHandler,\n  deserializePlainStringAsJSON,\n  devNullWritableStream,\n  flush,\n  getSpanParentObject,\n  init,\n  initDataset,\n  initExperiment,\n  initFunction,\n  initLogger,\n  invoke,\n  loadPrompt,\n  log,\n  logError,\n  login,\n  loginToState,\n  newId,\n  parseCachedHeader,\n  permalink,\n  projects,\n  renderMessage,\n  renderPromptParams,\n  reportFailures,\n  runEvaluator,\n  setFetch,\n  spanComponentsToObjectId,\n  startSpan,\n  summarize,\n  toolFunctionDefinitionSchema,\n  traceable,\n  traced,\n  updateSpan,\n  withCurrent,\n  withDataset,\n  withExperiment,\n  withLogger,\n  withParent,\n  wrapAISDKModel,\n  wrapOpenAI,\n  wrapOpenAIv4,\n  wrapTraced\n};\n","// Export core functionality\nexport * from \"./tool\";\nexport * from \"./agent\";\nexport * from \"./agent.tool\";\nexport * from \"./thread\";\nexport * from \"./message\";\nexport * from \"./event-source\";\nexport * from \"./evaluator\";\nexport * from \"./decorators\";\n\n// Export Solo - simple interface for one-off LLM calls\nexport * from \"./solo\";\n\n// Export Gig - jazz performance orchestration\nexport * from \"./gig\";\n\n// Export Piece - reusable workflow components\nexport * from \"./piece\";\n\n// Removed deprecated type aliases - use GigOptions, Groove, and GigResults directly\n\n// evaluators\nexport * from \"./evaluators\";\n\n// Export model drivers\nexport * from \"./model.drivers\";\n\n// Export tracing API\nexport { initTracing, registerTracer } from \"./tracing/api\";\nexport type { TracingConfig } from \"./tracing/api\";\nexport type { Tracer, TraceMetadata } from \"./tracing\";\n\n// Optional adapters\nexport * as tracingAdapters from \"./tracing/adapters\";\n\n// Export events registry\nexport * from \"./events\";\n","/**\n * Implement a class that represents a tool.\n * - name - the name of the tool\n * - description - the description of the tool\n * - parameters - the parameters of the tool\n * - execute(): Promise<any> - the function that executes the tool\n * - setFollowUp() - add a follow-up message to the tool call\n * - toMessages(): Message[] - convert the tool to a list of messages include tool response messages and any follow-up messages\n */\n\nimport { nanoid } from \"nanoid\";\nimport type { z } from \"zod\";\nimport { EventSource, type EventSourceInterface } from \"./event-source\";\nimport { TOOL_EVENTS } from \"./events\";\nimport { Message, type ToolCall } from \"./message\";\nimport { traceable } from \"./tracing\";\n\nexport interface ToolParameter {\n  name: string;\n  type: \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\";\n  description: string;\n  required?: boolean;\n}\n\nexport interface ToolCallResult {\n  success: boolean;\n  result: any;\n  toolCall: ToolCall;\n  error?: string;\n}\n\nexport interface ToolInterface extends EventSourceInterface {\n  name: string;\n  description: string;\n  parameters: z.ZodTypeAny;\n  executeTool: (args: any, toolCall: ToolCall) => Promise<any>;\n}\n\nexport function makeToolFromInterface(t: ToolInterface): Tool {\n  if (t instanceof Tool) {\n    return t;\n  }\n\n  return new Tool({\n    name: t.name,\n    description: t.description,\n    parameters: t.parameters,\n    executeFn: async (args: Record<string, any>, toolCall: ToolCall) =>\n      await t.executeTool(args, toolCall),\n  });\n}\n\ninterface ToolOptions {\n  name: string;\n  description: string;\n  parameters: z.ZodTypeAny;\n  followUpMessage?: string;\n  executeFn: (args: Record<string, any>, toolCall: ToolCall) => Promise<any>;\n  id?: string;\n  trace?: boolean;\n  traceMetadata?: Record<string, unknown>;\n}\n\nexport class Tool extends EventSource implements ToolInterface {\n  public readonly id: string;\n  public followUpMessage?: string;\n  public name: string;\n  public description: string;\n  public parameters: z.ZodTypeAny;\n  private readonly executeFn: (args: Record<string, any>, toolCall: ToolCall) => Promise<any>;\n  private readonly trace: boolean;\n  private readonly traceMetadata?: Record<string, unknown>;\n\n  constructor(options: ToolOptions) {\n    super();\n    this.id = options.id ?? `tool_${nanoid(15)}`;\n    this.name = options.name;\n    this.description = options.description;\n    this.parameters = options.parameters;\n    this.followUpMessage = options.followUpMessage;\n    this.executeFn = options.executeFn;\n    this.trace = options.trace ?? false;\n    this.traceMetadata = options.traceMetadata;\n  }\n\n  /**\n   * Get the name of the tool\n   */\n  public getName(): string {\n    return this.name;\n  }\n\n  /**\n   * Get the description of the tool\n   */\n  public getDescription(): string {\n    return this.description;\n  }\n\n  /**\n   * Get the parameters of the tool\n   */\n  public getParameters(): z.ZodTypeAny {\n    return this.parameters;\n  }\n\n  /**\n   * Execute the tool with the given arguments\n   */\n  public async executeTool(args: any, toolCall: ToolCall): Promise<ToolCallResult> {\n    this.emit(TOOL_EVENTS.STARTED, {\n      tool: this,\n      name: this.name,\n      args,\n    });\n\n    try {\n      this.parameters.parse(args);\n\n      // If tracing is enabled, wrap the execution function with traceable\n      const result = await this.executeWithTracing(args, toolCall);\n\n      this.emit(TOOL_EVENTS.COMPLETED, {\n        tool: this,\n        name: this.name,\n        args,\n        result,\n      });\n\n      return {\n        success: true,\n        result,\n        toolCall,\n      };\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\n      this.emit(TOOL_EVENTS.FAILED, {\n        tool: this,\n        name: this.name,\n        args,\n        toolCall,\n        error: errorMessage,\n      });\n\n      return {\n        success: false,\n        result: null,\n        toolCall,\n        error: errorMessage,\n      };\n    }\n  }\n\n  /**\n   * Execute the tool with tracing if enabled\n   * @param args Tool arguments\n   * @param toolCall The tool call object\n   * @returns Result of the tool execution\n   */\n  private async executeWithTracing(args: any, toolCall: ToolCall): Promise<any> {\n    if (!this.trace) {\n      return this.executeFn(args, toolCall);\n    }\n\n    // Create a formatted input object for better tracing display\n    const formattedInput = this.formatToolInput(args);\n\n    // Execute with tracing\n    return traceable(\n      async () => {\n        const result = await this.executeFn(args, toolCall);\n        return result;\n      },\n      {\n        name: this.name,\n        run_type: \"tool\",\n        input: formattedInput,\n        // Include tool call ID and other metadata\n        tool_call_id: toolCall.toolUseId,\n        tool_description: this.description,\n        ...this.traceMetadata,\n      },\n    )();\n  }\n\n  /**\n   * Format tool inputs for better tracing display\n   * @param args Raw tool arguments\n   * @returns Formatted input object\n   */\n  private formatToolInput(args: Record<string, any>): Record<string, any> {\n    // Basic input object with the raw parameters\n    const input: Record<string, any> = {\n      parameters: args,\n    };\n\n    // Try to create a human-readable description based on the tool type\n    if (this.name.toLowerCase().includes(\"calculator\") && args.operation) {\n      // For calculator tools\n      input.operation_type = args.operation;\n\n      // Create a readable expression\n      if (typeof args.a !== \"undefined\" && typeof args.b !== \"undefined\") {\n        input.expression = `${args.a} ${args.operation} ${args.b}`;\n      }\n    } else if (this.name.toLowerCase().includes(\"search\") && args.query) {\n      // For search tools\n      input.search_query = args.query;\n    } else if (this.name.toLowerCase().includes(\"weather\") && args.location) {\n      // For weather tools\n      input.location = args.location;\n    }\n\n    // Try to add a summary field for any tool\n    try {\n      let summary = `${this.name}(`;\n      const paramStrings = Object.entries(args).map(([key, value]) => {\n        if (typeof value === \"string\") {\n          return `${key}: \"${value}\"`;\n        }\n        return `${key}: ${value}`;\n      });\n      summary += paramStrings.join(\", \");\n      summary += \")\";\n      input.summary = summary;\n    } catch (e) {\n      // Ignore errors in summary generation\n    }\n\n    return input;\n  }\n\n  /**\n   * Set a follow-up message to be included after the tool response\n   */\n  public setFollowUp(message: string): void {\n    this.followUpMessage = message;\n    this.emit(TOOL_EVENTS.FOLLOWUP_ADDED, {\n      tool: this,\n      message,\n    });\n  }\n\n  /**\n   * Convert the tool to a list of messages including tool response messages\n   * and any follow-up messages\n   */\n  public toMessages(result: ToolCallResult): Message[] {\n    const messages: Message[] = [\n      new Message({\n        role: \"tool\",\n        content: this.followUpMessage || undefined,\n        toolResults: [\n          {\n            name: this.name,\n            result: result.result,\n            toolUseId: result.toolCall.toolUseId,\n            error: result.error,\n          },\n        ],\n      }),\n    ];\n\n    this.emit(TOOL_EVENTS.MESSAGES_GENERATED, {\n      tool: this,\n      messages,\n    });\n\n    return messages;\n  }\n}\n","/**\n * Central registry of all event names used throughout the Improv library\n *\n * Naming Conventions:\n * - Use hyphens for multi-word actions: `message-added`, `max-steps-reached`\n * - Use past tense for completed actions: `started`, `completed`, `failed`\n * - Use nouns for state events: `response`, `error`\n * - Use dots for hierarchical namespacing: `tool.execution.started`\n * - Keep names concise but descriptive\n */\n\n// Message Events - Managing individual messages\nexport const MESSAGE_EVENTS = {\n  ADDED: \"message.added\",\n  REMOVED: \"message.removed\",\n  SENT: \"message.sent\",\n  RECEIVED: \"message.received\",\n  CLEARED: \"messages.cleared\",\n} as const;\n\n// Thread Events - Managing conversation threads\nexport const THREAD_EVENTS = {\n  MAX_STEPS_REACHED: \"thread.max-steps-reached\",\n  ERROR_OCCURRED: \"thread.error-occurred\",\n  TOOL_ADDED: \"thread.tool-added\",\n  INCOMPLETE_RESPONSE: \"thread.incomplete-response\",\n} as const;\n\n// Agent Events - Managing AI agents\nexport const AGENT_EVENTS = {\n  TOOL_ADDED: \"agent.tool-added\",\n  THREAD_CREATED: \"agent.thread-created\",\n  THREAD_CLOSED: \"agent.thread-closed\",\n  KNOWLEDGE_ADDED: \"agent.knowledge-added\",\n  INSTRUCTION_ADDED: \"agent.instruction-added\",\n} as const;\n\n// Tool Events - Tool execution lifecycle\nexport const TOOL_EVENTS = {\n  STARTED: \"tool.started\",\n  COMPLETED: \"tool.completed\",\n  FAILED: \"tool.failed\",\n  FOLLOWUP_ADDED: \"tool.followup-added\",\n  MESSAGES_GENERATED: \"tool.messages-generated\",\n} as const;\n\n// Gig Events - Workflow orchestration\nexport const GIG_EVENTS = {\n  PERFORMANCE_COMPLETED: \"gig.performance-completed\",\n  PERFORMANCE_FAILED: \"gig.performance-failed\",\n} as const;\n\n// Piece Events - Individual workflow pieces\nexport const PIECE_EVENTS = {\n  EXECUTION_COMPLETED: \"piece.execution-completed\",\n  EXECUTION_FAILED: \"piece.execution-failed\",\n  EXECUTION_SKIPPED: \"piece.execution-skipped\",\n  EXECUTION_STARTED: \"piece.execution-started\",\n  RETRY_ATTEMPTED: \"piece.retry-attempted\",\n} as const;\n\n// Debug Events\nexport const DEBUG_EVENTS = {\n  DEBUG: \"debug\",\n} as const;\n\n// All events combined for easy access\nexport const EVENTS = {\n  MESSAGE: MESSAGE_EVENTS,\n  THREAD: THREAD_EVENTS,\n  AGENT: AGENT_EVENTS,\n  TOOL: TOOL_EVENTS,\n  GIG: GIG_EVENTS,\n  PIECE: PIECE_EVENTS,\n  DEBUG: DEBUG_EVENTS,\n} as const;\n\n// Type definitions for event payloads\nexport interface MessageEventPayloads {\n  [MESSAGE_EVENTS.ADDED]: { thread: any; message: any };\n  [MESSAGE_EVENTS.REMOVED]: { thread: any; message: any };\n  [MESSAGE_EVENTS.CLEARED]: { thread: any; removedMessages: any[] };\n  [MESSAGE_EVENTS.SENT]: { thread: any; message?: any };\n  [MESSAGE_EVENTS.RECEIVED]: { thread: any; message: any };\n}\n\nexport interface ThreadEventPayloads {\n  [THREAD_EVENTS.MAX_STEPS_REACHED]: { thread: any; steps: number };\n  [THREAD_EVENTS.ERROR_OCCURRED]: { thread: any; error: Error };\n  [THREAD_EVENTS.TOOL_ADDED]: { thread: any; tool: any };\n  [THREAD_EVENTS.INCOMPLETE_RESPONSE]: { thread: any; message: any };\n}\n\nexport interface AgentEventPayloads {\n  [AGENT_EVENTS.TOOL_ADDED]: { agent: any; tool: any };\n  [AGENT_EVENTS.THREAD_CREATED]: { agent: any; thread: any };\n  [AGENT_EVENTS.THREAD_CLOSED]: { agent: any; thread: any };\n  [AGENT_EVENTS.KNOWLEDGE_ADDED]: { agent: any; knowledge: any };\n  [AGENT_EVENTS.INSTRUCTION_ADDED]: { agent: any; instruction: any };\n}\n\nexport interface ToolEventPayloads {\n  [TOOL_EVENTS.STARTED]: { tool: any; name: string; args: any };\n  [TOOL_EVENTS.COMPLETED]: { tool: any; name: string; args: any; result: any };\n  [TOOL_EVENTS.FAILED]: {\n    tool: any;\n    name: string;\n    args: any;\n    toolCall: any;\n    error: string;\n  };\n  [TOOL_EVENTS.FOLLOWUP_ADDED]: { tool: any; message: string };\n  [TOOL_EVENTS.MESSAGES_GENERATED]: { tool: any; messages: any[] };\n}\n\nexport interface GigEventPayloads {\n  [GIG_EVENTS.PERFORMANCE_COMPLETED]: { gig: any; results: any };\n  [GIG_EVENTS.PERFORMANCE_FAILED]: { gig: any; error: Error; results: any };\n}\n\nexport interface PieceEventPayloads {\n  [PIECE_EVENTS.EXECUTION_COMPLETED]: { gig: any; piece: string; recording: any };\n  [PIECE_EVENTS.EXECUTION_FAILED]: { gig: any; piece: string; error: Error };\n  [PIECE_EVENTS.EXECUTION_SKIPPED]: { gig: any; piece: string };\n  [PIECE_EVENTS.EXECUTION_STARTED]: { gig: any; piece: string };\n  [PIECE_EVENTS.RETRY_ATTEMPTED]: { gig: any; piece: string; attempt: number; error: Error };\n}\n\nexport interface DebugEventPayloads {\n  [DEBUG_EVENTS.DEBUG]: { message: string; data?: any };\n}\n\n// Union type for all event payloads - makes it easy for users to type their event handlers\nexport type EventPayloads =\n  | MessageEventPayloads\n  | ThreadEventPayloads\n  | AgentEventPayloads\n  | ToolEventPayloads\n  | GigEventPayloads\n  | PieceEventPayloads\n  | DebugEventPayloads;\n\n// Helper type to get event payload by event name\nexport type EventPayload<T extends string> = T extends keyof MessageEventPayloads\n  ? MessageEventPayloads[T]\n  : T extends keyof ThreadEventPayloads\n    ? ThreadEventPayloads[T]\n    : T extends keyof AgentEventPayloads\n      ? AgentEventPayloads[T]\n      : T extends keyof ToolEventPayloads\n        ? ToolEventPayloads[T]\n        : T extends keyof GigEventPayloads\n          ? GigEventPayloads[T]\n          : T extends keyof PieceEventPayloads\n            ? PieceEventPayloads[T]\n            : T extends keyof DebugEventPayloads\n              ? DebugEventPayloads[T]\n              : never;\n","/**\n * AI Agent, capable of running many threads in parallel, self-reflection, and evaluation.\n * - knowledge (array of facts)\n * - instructions (array of instructions)\n * - memory (array of serialized threads)\n * - system prompt\n * - tools\n * - evaluator(s)\n * - driver(s)\n */\n\nimport { z } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { getToolMethods } from \"./decorators\";\nimport type { Evaluator } from \"./evaluator\";\nimport { EventSource } from \"./event-source\";\nimport { AGENT_EVENTS } from \"./events\";\nimport { Message } from \"./message\";\nimport { Thread, type ThreadDriver } from \"./thread\";\nimport { type Tool, type ToolInterface, makeToolFromInterface } from \"./tool\";\nimport { traceable } from \"./tracing\";\n\nexport interface AgentKnowledge {\n  fact: string;\n  source?: string;\n  timestamp?: Date;\n}\n\nexport interface AgentInstruction {\n  instruction: string;\n  priority: number;\n  context?: string;\n}\n\nexport interface AgentMemory {\n  threadId: string;\n  messages: Message[];\n  timestamp: Date;\n  metadata?: Record<string, any>;\n}\n\nexport interface AgentThreadResponse<TOutput = any> {\n  /**\n   * The parsed output (if schema provided) or raw content\n   */\n  output: TOutput;\n\n  /**\n   * Raw response content from the LLM\n   */\n  rawContent: string;\n\n  /**\n   * The thread that generated the response\n   */\n  thread: Thread;\n\n  /**\n   * Parse errors if output schema validation failed\n   */\n  parseError?: z.ZodError;\n}\n\nexport interface RetryConfig {\n  /**\n   * Maximum number of retry attempts per driver\n   * @default 3\n   */\n  maxAttempts: number;\n\n  /**\n   * Delay between retries in milliseconds\n   * @default 1000\n   */\n  delay: number;\n\n  /**\n   * Whether to exponentially increase delay\n   * @default true\n   */\n  exponentialBackoff: boolean;\n}\n\nexport interface AgentOptions {\n  onComplete?: (agent: Agent) => Promise<void>;\n  knowledge?: AgentKnowledge[];\n  instructions?: AgentInstruction[];\n  memory?: AgentMemory[];\n  systemPrompt?: string;\n  tools?: ToolInterface[];\n  driver: ThreadDriver;\n  evaluators?: Evaluator[];\n  trace?: boolean;\n  traceMetadata?: Record<string, unknown>;\n  name?: string;\n\n  /**\n   * Fallback drivers to use if primary fails\n   * (same as Solo)\n   */\n  fallbackDrivers?: ThreadDriver[];\n\n  /**\n   * Retry configuration for handling failures\n   */\n  retry?: Partial<RetryConfig>;\n\n  /**\n   * Callback when switching to fallback driver\n   */\n  onFallback?: (error: Error, driverIndex: number) => void;\n}\n\nexport class Agent extends EventSource {\n  public name?: string;\n  public knowledge: AgentKnowledge[];\n  public instructions: AgentInstruction[];\n  public memory: AgentMemory[];\n  public systemPrompt: string;\n  public tools: Tool[];\n  public driver: ThreadDriver;\n  public activeThreads: Map<string, Thread>;\n  public evaluators: Evaluator[];\n  private readonly trace: boolean;\n  private readonly traceMetadata?: Record<string, unknown>;\n  private readonly fallbackDrivers: ThreadDriver[];\n  private readonly retry: RetryConfig;\n  private readonly onFallback?: (error: Error, driverIndex: number) => void;\n\n  constructor({\n    knowledge = [],\n    instructions = [],\n    memory = [],\n    systemPrompt = \"\",\n    tools = [],\n    driver,\n    evaluators = [],\n    trace = false,\n    traceMetadata,\n    fallbackDrivers = [],\n    retry,\n    onFallback,\n    name,\n  }: AgentOptions) {\n    super();\n    this.name = name;\n    this.knowledge = knowledge;\n    this.instructions = instructions.sort((a, b) => b.priority - a.priority);\n    this.memory = memory;\n    this.systemPrompt = systemPrompt;\n    this.tools = [...tools.map(makeToolFromInterface), ...this.getDecoratedTools()];\n    this.driver = driver;\n    this.activeThreads = new Map();\n    this.evaluators = evaluators;\n    this.trace = trace;\n    this.traceMetadata = traceMetadata;\n    this.fallbackDrivers = fallbackDrivers;\n    this.onFallback = onFallback;\n\n    // Set retry defaults (same as Solo)\n    this.retry = {\n      maxAttempts: retry?.maxAttempts ?? 3,\n      delay: retry?.delay ?? 1000,\n      exponentialBackoff: retry?.exponentialBackoff ?? true,\n    };\n\n    this.tools.forEach((tool) => {\n      this.forwardEvents(tool, { agent: this });\n    });\n  }\n\n  /**\n   * Get tools defined using decorators on the agent class\n   */\n  private getDecoratedTools(): Tool[] {\n    return getToolMethods(this).map(makeToolFromInterface);\n  }\n\n  /**\n   * Add a new tool to the agent\n   * @param tool The tool interface to add\n   * @returns The created Tool instance\n   */\n  public addTool(tool: ToolInterface): Tool {\n    const newTool = makeToolFromInterface(tool);\n    this.tools.push(newTool);\n    this.forwardEvents(newTool, { agent: this });\n    this.emit(AGENT_EVENTS.TOOL_ADDED, { agent: this, tool: newTool });\n    return newTool;\n  }\n\n  /**\n   * Ask a question and get a structured response\n   * @param prompt The prompt to send\n   * @param outputSchema The schema to validate the response against\n   * @param options Additional options for the request\n   * @returns Promise resolving to the structured response\n   */\n  public async ask<TOutput>(\n    prompt: string,\n    outputSchema: z.ZodSchema<TOutput>,\n    options?: {\n      systemPrompt?: string;\n      responseFormat?: \"json\" | \"text\";\n    },\n  ): Promise<AgentThreadResponse<TOutput>> {\n    return new Promise((resolve, reject) => {\n      const thread = this.createThread({\n        prompt,\n        systemPrompt: options?.systemPrompt,\n        outputSchema,\n        responseFormat: options?.responseFormat || \"json\",\n        onStructuredResponse: async (response) => {\n          resolve(response);\n        },\n      });\n\n      // Send the message and handle errors\n      thread.send().catch(reject);\n    });\n  }\n\n  /**\n   * Execute the agent with a prompt\n   */\n  executeAgent(prompt: string): void {\n    const thread = this.createThread({\n      prompt,\n    });\n    const evaluators = [...this.evaluators];\n    const completedEvaluators: Evaluator[] = [];\n    let currentEvaluator: Evaluator | undefined;\n\n    const handleEvaluators = () => {\n      // run evaluators\n      for (const evaluator of evaluators) {\n        if (completedEvaluators.includes(evaluator)) {\n          continue;\n        }\n        // ignore activity when an evaluator is already running\n        if (currentEvaluator) {\n          continue;\n        }\n        currentEvaluator = evaluator;\n        currentEvaluator({\n          thread,\n          agent: this,\n          complete: () => {\n            completedEvaluators.push(evaluator);\n            currentEvaluator = undefined;\n\n            // handle next evaluator\n            handleEvaluators();\n          },\n        });\n        break;\n      }\n\n      // done with evaluation, should not leave an orphaned event listener\n      if (!currentEvaluator) {\n        thread.off(\"thread.response\", handleEvaluators);\n      }\n    };\n\n    thread.on(\"thread.response\", handleEvaluators);\n  }\n\n  /**\n   * Create a new thread with optional messages or prompt\n   */\n  public createThread<TOutput = any>(props: {\n    messages?: Message[];\n    prompt?: string;\n    systemPrompt?: string;\n    onResponse?: (message: Message) => Promise<void>;\n    outputSchema?: z.ZodSchema<TOutput>;\n    responseFormat?: \"json\" | \"text\";\n    maxSteps?: number;\n    onStructuredResponse?: (response: AgentThreadResponse<TOutput>) => Promise<void>;\n    abortSignal?: AbortSignal;\n  }): Thread {\n    let threadMessages: Message[] = [];\n\n    if (props.messages) {\n      threadMessages = props.messages;\n    } else {\n      if (!props.prompt || props.prompt.trim() === \"\") {\n        throw new Error(\"Either messages or a non-empty prompt must be provided\");\n      }\n\n      const systemMessage = new Message({\n        role: \"system\",\n        cache: true,\n        content: this.buildSystemPrompt(\n          props.systemPrompt,\n          props.outputSchema,\n          props.responseFormat,\n        ),\n      });\n\n      const promptMessage = new Message({\n        role: \"user\",\n        cache: true,\n        content: props.prompt,\n      });\n\n      threadMessages = [systemMessage, promptMessage];\n    }\n\n    // Configure driver for structured output if needed\n    let configuredDriver = this.driver;\n    if (props.outputSchema && props.responseFormat === \"json\") {\n      configuredDriver = this.configureDriverForStructuredOutput(this.driver, props.outputSchema);\n    }\n\n    const thread = new Thread({\n      messages: threadMessages,\n      tools: this.tools,\n      toolChoice: \"auto\",\n      driver: configuredDriver,\n      fallbackDrivers: this.fallbackDrivers,\n      retry: this.retry,\n      onFallback: this.onFallback,\n      maxSteps: props.maxSteps,\n      abortSignal: props.abortSignal,\n    });\n\n    if (props.onResponse) {\n      thread.onResponse(props.onResponse);\n    }\n\n    // Add structured output response handling\n    if (props.outputSchema && props.onStructuredResponse) {\n      const { outputSchema, onStructuredResponse } = props;\n      thread.onResponse(async (message: Message) => {\n        if (message.role === \"assistant\" && message.content) {\n          const response = this.parseStructuredResponse(\n            message.content,\n            outputSchema,\n            props.responseFormat || \"json\",\n            thread,\n          );\n          await onStructuredResponse(response);\n        }\n      });\n    }\n\n    this.activeThreads.set(thread.id, thread);\n\n    // Forward thread events with agent context\n    this.forwardEvents(thread, { agent: this });\n\n    this.emit(AGENT_EVENTS.THREAD_CREATED, { agent: this, thread });\n\n    return thread;\n  }\n\n  /**\n   * Get an active thread by its ID\n   */\n  public getThread(threadId: string): Thread | undefined {\n    return this.activeThreads.get(threadId);\n  }\n\n  /**\n   * Get all active threads\n   */\n  public getActiveThreads(): Map<string, Thread> {\n    return new Map(this.activeThreads);\n  }\n\n  /**\n   * Close a thread and store its messages in memory\n   */\n  public closeThread(threadId: string): void {\n    const thread = this.activeThreads.get(threadId);\n    if (thread) {\n      this.memory.push({\n        threadId,\n        messages: thread.all(),\n        timestamp: new Date(),\n      });\n      this.activeThreads.delete(threadId);\n      this.emit(AGENT_EVENTS.THREAD_CLOSED, { agent: this, thread });\n    }\n  }\n\n  /**\n   * Add a new piece of knowledge to the agent\n   */\n  public addKnowledge(knowledge: AgentKnowledge): void {\n    this.knowledge.push({\n      ...knowledge,\n      timestamp: knowledge.timestamp || new Date(),\n    });\n    this.emit(AGENT_EVENTS.KNOWLEDGE_ADDED, { agent: this, knowledge });\n  }\n\n  /**\n   * Add a new instruction to the agent\n   */\n  public addInstruction(instruction: AgentInstruction): void {\n    this.instructions.push(instruction);\n    this.instructions.sort((a, b) => b.priority - a.priority);\n    this.emit(AGENT_EVENTS.INSTRUCTION_ADDED, { agent: this, instruction });\n  }\n\n  /**\n   * Get all tools available to the agent\n   */\n  public getTools(): Tool[] {\n    return [...this.tools];\n  }\n\n  /**\n   * Get all knowledge available to the agent\n   */\n  public getKnowledge(): AgentKnowledge[] {\n    return [...this.knowledge];\n  }\n\n  /**\n   * Get all instructions available to the agent\n   */\n  public getInstructions(): AgentInstruction[] {\n    return [...this.instructions];\n  }\n\n  /**\n   * Get all memory entries available to the agent\n   */\n  public getMemory(): AgentMemory[] {\n    return [...this.memory];\n  }\n\n  public setSystemPrompt(systemPrompt: string): void {\n    this.systemPrompt = systemPrompt;\n  }\n\n  /**\n   * Build the system prompt combining knowledge, instructions, and base prompt\n   */\n  private buildSystemPrompt<TOutput>(\n    systemPrompt?: string,\n    outputSchema?: z.ZodSchema<TOutput>,\n    responseFormat?: \"json\" | \"text\",\n  ): string {\n    const parts: string[] = [systemPrompt || this.systemPrompt];\n\n    if (this.knowledge.length > 0) {\n      parts.push(\"\\n# KNOWLEDGE:\");\n      this.knowledge.forEach((k) => parts.push(`- ${k.fact}`));\n    }\n\n    if (this.instructions.length > 0) {\n      parts.push(\"\\n# INSTRUCTIONS:\");\n      this.instructions.forEach((i) => parts.push(`${i.priority}. ${i.instruction}`));\n    }\n\n    // Add schema hint if structured output is requested\n    if (outputSchema && responseFormat === \"json\") {\n      const jsonSchema = zodToJsonSchema(outputSchema) as any;\n      let schemaHint: string;\n\n      if (jsonSchema.type !== \"object\") {\n        // For non-object schemas, explain the wrapper\n        schemaHint = `\\n\\nRespond with valid JSON in this format:\\n{ \"value\": ${this.getSchemaDescription(outputSchema)} }`;\n      } else {\n        schemaHint = `\\n\\nRespond with valid JSON that matches this structure:\\n${this.getSchemaDescription(outputSchema)}`;\n      }\n\n      parts.push(schemaHint);\n    }\n\n    return parts.join(\"\\n\");\n  }\n\n  /**\n   * Execute a task with tracing enabled\n   * @param name The name of the trace\n   * @param task The task to execute\n   * @param metadata Additional metadata for tracing (e.g. runId, tags)\n   */\n  protected async executeTask<T>(\n    name: string,\n    task: () => Promise<T>,\n    metadata?: Record<string, unknown>,\n  ): Promise<T> {\n    return this.trace\n      ? traceable(task, {\n          name,\n          ...this.traceMetadata,\n          ...metadata,\n        })()\n      : task();\n  }\n\n  /**\n   * Configure a driver to use structured output if supported\n   */\n  private configureDriverForStructuredOutput<TOutput>(\n    driver: ThreadDriver,\n    outputSchema: z.ZodSchema<TOutput>,\n  ): ThreadDriver {\n    // Convert Zod schema to JSON Schema format\n    const jsonSchema = zodToJsonSchema(outputSchema) as any;\n\n    // For OpenAI, the schema must be an object at the root level\n    // If it's not an object, wrap it\n    let structuredSchema: any;\n    if (jsonSchema.type !== \"object\") {\n      // Wrap non-object schemas in an object with a 'value' property\n      structuredSchema = {\n        type: \"object\",\n        properties: {\n          value: jsonSchema,\n        },\n        required: [\"value\"],\n        additionalProperties: false,\n      };\n    } else {\n      // Use the schema as-is for object types\n      structuredSchema = {\n        type: jsonSchema.type || \"object\",\n        properties: jsonSchema.properties || {},\n        required: jsonSchema.required || [],\n        additionalProperties: jsonSchema.additionalProperties ?? false,\n        ...(jsonSchema.items && { items: jsonSchema.items }),\n        ...(jsonSchema.enum && { enum: jsonSchema.enum }),\n        ...(jsonSchema.format && { format: jsonSchema.format }),\n        ...(jsonSchema.description && { description: jsonSchema.description }),\n      };\n    }\n\n    // Check if the driver supports structured output configuration\n    const driverConstructor = driver.constructor;\n    const driverName = driverConstructor.name;\n\n    // Import the driver classes dynamically to avoid circular dependencies\n    if (driverName === \"OpenAIThreadDriver\") {\n      const { OpenAIThreadDriver } = require(\"./model.drivers/openai\");\n      if (driver instanceof OpenAIThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.OPENAI_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new OpenAIThreadDriver(config);\n      }\n    }\n\n    if (driverName === \"AnthropicThreadDriver\") {\n      const { AnthropicThreadDriver } = require(\"./model.drivers/anthropic\");\n      if (driver instanceof AnthropicThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.ANTHROPIC_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new AnthropicThreadDriver(config);\n      }\n    }\n\n    if (driverName === \"GeminiThreadDriver\") {\n      const { GeminiThreadDriver } = require(\"./model.drivers/gemini\");\n      if (driver instanceof GeminiThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.GOOGLE_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new GeminiThreadDriver(config);\n      }\n    }\n\n    if (driverName === \"CerebrasThreadDriver\") {\n      const { CerebrasThreadDriver } = require(\"./model.drivers/cerebras\");\n      if (driver instanceof CerebrasThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.CEREBRAS_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new CerebrasThreadDriver(config);\n      }\n    }\n\n    // For drivers that don't support native structured output,\n    // return the original driver\n    return driver;\n  }\n\n  /**\n   * Parse a structured response from the LLM\n   */\n  private parseStructuredResponse<TOutput>(\n    content: string,\n    outputSchema: z.ZodSchema<TOutput>,\n    responseFormat: \"json\" | \"text\",\n    thread: Thread,\n  ): AgentThreadResponse<TOutput> {\n    try {\n      let parsed = responseFormat === \"json\" ? JSON.parse(content) : content;\n\n      // Check if we need to unwrap the value (for non-object schemas with OpenAI)\n      const jsonSchema = zodToJsonSchema(outputSchema) as any;\n      if (\n        jsonSchema.type !== \"object\" &&\n        parsed &&\n        typeof parsed === \"object\" &&\n        \"value\" in parsed\n      ) {\n        parsed = parsed.value;\n      }\n\n      const output = outputSchema.parse(parsed);\n\n      return {\n        output,\n        rawContent: content,\n        thread,\n      };\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        // Include parse error but still return raw content\n        return {\n          output: content as TOutput,\n          rawContent: content,\n          thread,\n          parseError: error,\n        };\n      }\n\n      if (error instanceof SyntaxError && responseFormat === \"json\") {\n        // JSON parse error - return with parse error\n        return {\n          output: content as TOutput,\n          rawContent: content,\n          thread,\n          parseError: new z.ZodError([\n            {\n              code: z.ZodIssueCode.custom,\n              message: `Invalid JSON: ${error.message}`,\n              path: [],\n            },\n          ]),\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  /**\n   * Get a human-readable description of a schema for prompt hints\n   */\n  private getSchemaDescription<TOutput>(schema: z.ZodSchema<TOutput>): string {\n    // For simple schemas, return a basic description\n    if (schema instanceof z.ZodEnum) {\n      const values = schema.options;\n      return `One of: ${values.map((v: any) => `\"${v}\"`).join(\", \")}`;\n    }\n\n    if (schema instanceof z.ZodObject) {\n      const shape = schema.shape;\n      const props = Object.entries(shape).map(([key, value]) => {\n        return `  \"${key}\": ${this.getZodTypeDescription(value as z.ZodTypeAny)}`;\n      });\n      return `{\\n${props.join(\",\\n\")}\\n}`;\n    }\n\n    return \"Valid JSON matching the expected schema\";\n  }\n\n  /**\n   * Get a description of a Zod type\n   */\n  private getZodTypeDescription(schema: z.ZodTypeAny): string {\n    if (schema instanceof z.ZodString) return \"string\";\n    if (schema instanceof z.ZodNumber) return \"number\";\n    if (schema instanceof z.ZodBoolean) return \"boolean\";\n    if (schema instanceof z.ZodArray) return \"array\";\n    if (schema instanceof z.ZodObject) return \"object\";\n    if (schema instanceof z.ZodEnum) {\n      const values = schema.options;\n      return values.map((v: any) => `\"${v}\"`).join(\" | \");\n    }\n    return \"any\";\n  }\n}\n","import \"reflect-metadata\";\nimport { z } from \"zod\";\nimport type { ToolInterface } from \"./tool\";\n\ninterface ToolMetadata {\n  name?: string;\n  description: string;\n  parameters: z.ZodTypeAny;\n}\n\nconst toolMetadataKey = Symbol(\"toolMetadata\");\n\n/**\n * Decorator to mark a method as a tool with a name\n * Optional - if not provided, the method name will be used\n */\nexport const ToolName =\n  (name: string) => (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => {\n    const metadata: Partial<ToolMetadata> =\n      Reflect.getMetadata(toolMetadataKey, target, propertyKey) || {};\n\n    Reflect.defineMetadata(toolMetadataKey, { ...metadata, name }, target, propertyKey);\n  };\n\n/**\n * Decorator to add a description to a tool method\n */\nexport const ToolDescription =\n  (description: string) => (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => {\n    const metadata: Partial<ToolMetadata> =\n      Reflect.getMetadata(toolMetadataKey, target, propertyKey) || {};\n\n    Reflect.defineMetadata(toolMetadataKey, { ...metadata, description }, target, propertyKey);\n  };\n\n/**\n * Decorator to define a parameter for a tool method\n * @param name Parameter name\n * @param description Parameter description\n * @param type Zod schema for parameter validation\n */\nexport const ToolParam =\n  (name: string, description: string, type: z.ZodTypeAny) =>\n  (target: any, propertyKey: string, _parameterIndex: number) => {\n    const metadata: Partial<ToolMetadata> =\n      Reflect.getMetadata(toolMetadataKey, target, propertyKey) || {};\n\n    const parameters = metadata.parameters || z.object({});\n    const updatedParameters = z.object({\n      ...((parameters as z.ZodObject<any>).shape || {}),\n      [name]: type.describe(description),\n    });\n\n    Reflect.defineMetadata(\n      toolMetadataKey,\n      { ...metadata, parameters: updatedParameters },\n      target,\n      propertyKey,\n    );\n  };\n\n/**\n * Get all tool methods from a class instance\n */\nexport const getToolMethods = (instance: any): ToolInterface[] => {\n  const prototype = Object.getPrototypeOf(instance);\n  const propertyNames = Object.getOwnPropertyNames(prototype);\n\n  return propertyNames\n    .map((propertyName) => {\n      const metadata: ToolMetadata | undefined = Reflect.getMetadata(\n        toolMetadataKey,\n        prototype,\n        propertyName,\n      );\n\n      if (!metadata || !metadata.description || !metadata.parameters) {\n        return null;\n      }\n\n      const method = prototype[propertyName];\n\n      return {\n        name: metadata.name || propertyName,\n        description: metadata.description,\n        parameters: metadata.parameters,\n        executeTool: method.bind(instance),\n      };\n    })\n    .filter((tool): tool is ToolInterface => tool !== null);\n};\n","/**\n * Implement a class that tracks a thread of messages between the user and the assistant.\n * - constructor({messages: Message[], tools: Tool[], driver: BedrockThreadDriver}) - initialize the thread with a list of messages and tools\n * - push() - add a message to the thread\n * - shift() - remove the oldest message from the thread\n * - pop() - remove the newest message from the thread\n * - last() - get the oldest message from the thread\n * - size() - get the number of messages in the thread\n * - clear(filter?: (message: Message) => boolean) - remove all messages from the thread\n * - all() - get all messages from the thread\n * - handle(message: Message) - handle a message from the LLM\n *   - includes tool calling or triggering events\n * - send(message?: Message) - send a message or the current thread state to the LLM\n * - fork() - create a new thread with the same history and tools\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { EventSource } from \"./event-source\";\nimport { MESSAGE_EVENTS, THREAD_EVENTS } from \"./events\";\nimport type { ToolCall } from \"./message\";\nimport { Message } from \"./message\";\nimport { Tool, type ToolInterface, makeToolFromInterface } from \"./tool\";\n\nexport interface TokenUsage {\n  inputTokens: number;\n  outputTokens: number;\n  totalTokens: number;\n}\n\nexport interface ThreadDriver {\n  sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread>;\n  streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread>;\n}\n\nexport interface ThreadOptions {\n  messages?: Message[];\n  tools?: ToolInterface[];\n  toolChoice?: \"auto\" | \"any\";\n  driver: ThreadDriver;\n  maxSteps?: number;\n  fallbackDrivers?: ThreadDriver[];\n  retry?: {\n    maxAttempts?: number;\n    delay?: number;\n    exponentialBackoff?: boolean;\n  };\n  onFallback?: (error: Error, driverIndex: number) => void;\n  abortSignal?: AbortSignal;\n}\n\nexport class Thread extends EventSource {\n  private messages: Message[];\n  private readonly tools: Tool[];\n  public readonly toolChoice: \"auto\" | \"any\";\n  private readonly driver: ThreadDriver;\n  private readonly maxSteps: number;\n  private currentSteps: number;\n  private responseHandlers: ((message: Message) => Promise<void>)[];\n  public readonly id: string;\n  private readonly fallbackDrivers: ThreadDriver[];\n  private readonly retry: Required<NonNullable<ThreadOptions[\"retry\"]>>;\n  private readonly onFallback?: (error: Error, driverIndex: number) => void;\n  private tokenUsage: TokenUsage;\n  private readonly abortSignal?: AbortSignal;\n\n  constructor(options: ThreadOptions) {\n    super();\n    this.messages = options.messages || [];\n    this.tools = (options.tools || []).map(makeToolFromInterface);\n    this.driver = options.driver;\n    this.maxSteps = options.maxSteps || 30;\n    this.currentSteps = 0;\n    this.responseHandlers = [];\n    this.toolChoice = options.toolChoice || \"auto\";\n    this.id = this.generateThreadId();\n    this.fallbackDrivers = options.fallbackDrivers || [];\n    this.onFallback = options.onFallback;\n    this.tokenUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n    this.abortSignal = options.abortSignal;\n\n    // Set retry defaults (same as Solo)\n    this.retry = {\n      maxAttempts: options.retry?.maxAttempts ?? 3,\n      delay: options.retry?.delay ?? 1000,\n      exponentialBackoff: options.retry?.exponentialBackoff ?? true,\n    };\n\n    // Forward events from all tools with thread context\n    this.tools.forEach((tool) => this.forwardEvents(tool, { thread: this }));\n\n    // Validate thread on construction\n    this.validateThread();\n  }\n\n  /**\n   * Register a handler to be called when an assistant message without tool calls is received\n   */\n  public onResponse(handler: (message: Message) => Promise<void>): void {\n    this.responseHandlers.push(handler);\n  }\n\n  /**\n   * Execute all registered response handlers\n   */\n  private async executeResponseHandlers(message: Message): Promise<void> {\n    for (const handler of this.responseHandlers) {\n      await handler(message);\n    }\n  }\n\n  /**\n   * Add a message to the thread\n   */\n  public push(message: Message): void {\n    this.messages.push(message);\n    this.emit(MESSAGE_EVENTS.ADDED, { thread: this, message });\n  }\n\n  /**\n   * Remove the most recent message from the thread\n   */\n  public pop(): Message | undefined {\n    const message = this.messages.pop();\n    if (message) {\n      this.emit(MESSAGE_EVENTS.REMOVED, { thread: this, message });\n    }\n    return message;\n  }\n\n  /**\n   * Remove the oldest message from the thread\n   */\n  public shift(): Message | undefined {\n    const message = this.messages.shift();\n    if (message) {\n      this.emit(MESSAGE_EVENTS.REMOVED, { thread: this, message });\n    }\n    return message;\n  }\n\n  /**\n   * Get the most recent message from the thread\n   */\n  public last(): Message | undefined {\n    return this.messages[this.messages.length - 1];\n  }\n\n  /**\n   * Get the number of messages in the thread\n   */\n  public size(): number {\n    return this.messages.length;\n  }\n\n  /**\n   * Get the current token usage for the thread\n   */\n  public getTokenUsage(): TokenUsage {\n    return { ...this.tokenUsage };\n  }\n\n  /**\n   * Update token usage (internal method for drivers)\n   */\n  public updateTokenUsage(usage: Partial<TokenUsage>): void {\n    if (usage.inputTokens !== undefined) {\n      this.tokenUsage.inputTokens += usage.inputTokens;\n    }\n    if (usage.outputTokens !== undefined) {\n      this.tokenUsage.outputTokens += usage.outputTokens;\n    }\n    if (usage.totalTokens !== undefined) {\n      this.tokenUsage.totalTokens += usage.totalTokens;\n    } else {\n      // Calculate total if not provided\n      this.tokenUsage.totalTokens = this.tokenUsage.inputTokens + this.tokenUsage.outputTokens;\n    }\n  }\n\n  /**\n   * Remove all messages from the thread that match the filter\n   * If no filter is provided, remove all messages\n   */\n  public clear(filter?: (message: Message) => boolean): void {\n    const removedMessages = filter ? this.messages.filter(filter) : [...this.messages];\n    if (filter) {\n      this.messages = this.messages.filter((message) => !filter(message));\n    } else {\n      this.messages = [];\n    }\n    this.emit(MESSAGE_EVENTS.CLEARED, { thread: this, removedMessages });\n  }\n\n  /**\n   * Get all messages from the thread\n   */\n  public all(): Message[] {\n    return [...this.messages];\n  }\n\n  /**\n   * Check if the thread has reached its maximum number of steps\n   * @returns true if max steps reached, false otherwise\n   */\n  private checkMaxSteps(): boolean {\n    this.currentSteps++;\n    if (this.currentSteps >= this.maxSteps) {\n      this.debug(\"MAX STEPS REACHED\");\n      this.emit(THREAD_EVENTS.MAX_STEPS_REACHED, {\n        thread: this,\n        steps: this.currentSteps,\n      });\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Execute a tool call and return its result messages\n   * @param toolCall The tool call to execute\n   * @param tool The tool to execute with\n   */\n  private async executeToolCall(toolCall: ToolCall, tool: Tool): Promise<Message[]> {\n    // Check abort signal before executing individual tool\n    if (this.abortSignal?.aborted) {\n      throw new Error(\"Thread execution aborted\");\n    }\n\n    console.debug(\n      `[DEBUG] Executing tool call: ${tool.getName()}, args:`,\n      JSON.stringify(toolCall.arguments, null, 2),\n    );\n\n    try {\n      const result = await tool.executeTool(toolCall.arguments, toolCall);\n\n      // Check abort signal after tool execution completes\n      if (this.abortSignal?.aborted) {\n        throw new Error(\"Thread execution aborted\");\n      }\n\n      return tool.toMessages(result);\n    } catch (error) {\n      console.error(`[DEBUG] Tool execution failed: ${tool.getName()}`, error);\n\n      // Create error result to ensure tool_result block is always created\n      const errorResult = {\n        success: false,\n        result: null,\n        error: error instanceof Error ? error.message : String(error),\n        toolCall: toolCall,\n      };\n\n      return tool.toMessages(errorResult);\n    }\n  }\n\n  /**\n   * Process a message containing tool calls\n   * @param message The message containing tool calls\n   */\n  private async processToolCalls(message: Message): Promise<void> {\n    // Check if execution has been aborted before processing tool calls\n    if (this.abortSignal?.aborted) {\n      throw new Error(\"Thread execution aborted\");\n    }\n\n    const tools = this.getTools();\n\n    // Execute all tool calls in parallel\n    const toolExecutionPromises = message.toolCalls.map(async (toolCall) => {\n      // Check abort signal before each tool execution\n      if (this.abortSignal?.aborted) {\n        throw new Error(\"Thread execution aborted\");\n      }\n      const tool = tools.find((t) => t.getName() === toolCall.name);\n      if (tool) {\n        return await this.executeToolCall(toolCall, tool);\n      }\n      console.warn(`[Thread] Tool not found: ${toolCall.name}`);\n\n      // Create error result for missing tool to ensure tool_result block is always created\n      const errorResult = {\n        success: false,\n        result: null,\n        error: `Tool not found: ${toolCall.name}. Available tools: ${tools.map((t) => t.getName()).join(\", \")}`,\n        toolCall: toolCall,\n      };\n\n      // Create a dummy tool to generate the error message\n      const dummyTool = new Tool({\n        name: toolCall.name,\n        description: `Missing tool: ${toolCall.name}`,\n        parameters: z.object({}),\n        executeFn: async () => errorResult,\n      });\n\n      console.log(`[Thread] Created error result for missing tool: ${toolCall.name}`);\n      return dummyTool.toMessages(errorResult);\n    });\n\n    // Wait for all tool executions to complete\n    const allToolResults = await Promise.all(toolExecutionPromises);\n\n    // Combine all tool results into a single message for parallel execution\n    const allMessages = allToolResults.flat();\n\n    if (allMessages.length > 0) {\n      // Extract all tool results from individual messages\n      const combinedToolResults: any[] = [];\n      let followUpMessage: string | undefined;\n\n      for (const msg of allMessages) {\n        if (msg.toolResults) {\n          combinedToolResults.push(...msg.toolResults);\n        }\n        // Keep the last follow-up message if any\n        if (msg.content) {\n          followUpMessage = msg.content;\n        }\n      }\n\n      // Create a single message with all tool results\n      const combinedMessage = new Message({\n        role: \"tool\",\n        content: followUpMessage,\n        toolResults: combinedToolResults,\n      });\n\n      this.push(combinedMessage);\n    }\n\n    // Check if execution has been aborted before sending tool results back\n    if (this.abortSignal?.aborted) {\n      throw new Error(\"Thread execution aborted\");\n    }\n\n    // Send all results together in a single API call\n    await this.send(undefined, true);\n  }\n\n  /**\n   * Process an assistant message without tool calls\n   * @param message The assistant message to process\n   */\n  private async processAssistantMessage(message: Message): Promise<void> {\n    await this.executeResponseHandlers(message);\n    this.emit(MESSAGE_EVENTS.RECEIVED, { thread: this, message });\n  }\n\n  /**\n   * Handle a message from the LLM\n   * This includes processing tool calls and triggering events\n   */\n  public async processLastMessage(): Promise<Thread> {\n    // Check if execution has been aborted before processing\n    if (this.abortSignal?.aborted) {\n      return this.handleAbortedExecution();\n    }\n\n    const lastMessage = this.last();\n    if (!lastMessage) return this;\n\n    // this.debug(\"HANDLING RESPONSE\", lastMessage);\n    if (lastMessage.isToolCall()) {\n      await this.processToolCalls(lastMessage);\n    } else if (lastMessage.isAssistantMessage()) {\n      // Check for incomplete responses (empty tool calls with promises of action)\n      if (this.isIncompleteResponse(lastMessage)) {\n        this.emit(THREAD_EVENTS.INCOMPLETE_RESPONSE, { thread: this, message: lastMessage });\n        // Log warning about incomplete response\n        console.warn(\n          \"[Thread] Detected incomplete response - assistant promised action but included no tool calls\",\n        );\n      }\n      await this.processAssistantMessage(lastMessage);\n    }\n\n    return this;\n  }\n\n  /**\n   * Handle aborted execution by cleaning up any orphaned tool_use blocks\n   */\n  private handleAbortedExecution(): Thread {\n    const lastMessage = this.last();\n    if (!lastMessage) return this;\n\n    // If the last message has tool calls without results, create error results\n    if (lastMessage.isToolCall() && lastMessage.toolCalls && lastMessage.toolCalls.length > 0) {\n      // Create error tool results for all pending tool calls\n      const errorToolResults = lastMessage.toolCalls.map((toolCall) => ({\n        name: toolCall.name,\n        toolUseId: toolCall.toolUseId,\n        result: null,\n        error: \"Tool execution was aborted by user\",\n      }));\n\n      // Create a tool result message\n      const errorMessage = new Message({\n        role: \"tool\",\n        content: \"Tool execution was aborted by user\",\n        toolResults: errorToolResults,\n      });\n\n      this.push(errorMessage);\n    }\n\n    throw new Error(\"Thread execution aborted\");\n  }\n\n  /**\n   * Send a message or the current thread state to the LLM\n   */\n  public async send(message?: Message, toolResponse = false): Promise<this> {\n    // Check if execution has been aborted\n    if (this.abortSignal?.aborted) {\n      throw new Error(\"Thread execution aborted\");\n    }\n\n    if (message) {\n      this.push(message);\n    }\n    // Only reset steps on explicit message sends, not tool-triggered sends\n    if (!toolResponse) {\n      this.currentSteps = 0;\n    }\n\n    this.validateThread();\n\n    // this.debug(\"SENDING MESSAGE\", this.last());\n\n    // Try drivers with fallback logic\n    const drivers = [this.driver, ...this.fallbackDrivers];\n    let lastError: Error | undefined;\n    let driverIndex = 0;\n\n    for (const driver of drivers) {\n      let retryAttempts = 0;\n\n      while (retryAttempts < this.retry.maxAttempts) {\n        try {\n          // Check abort signal before each retry attempt\n          if (this.abortSignal?.aborted) {\n            throw new Error(\"Thread execution aborted\");\n          }\n\n          // Check max steps before sending to LLM (only for tool-triggered sends)\n          if (toolResponse && this.checkMaxSteps()) {\n            // Don't return early if we have pending tool results that need to be sent\n            const lastMessage = this.last();\n            if (lastMessage?.role === \"tool\" && lastMessage.toolResults) {\n              this.debug(\"Max steps reached but sending tool results to complete conversation\");\n              // Allow this final send to complete the tool call cycle\n            } else {\n              return this;\n            }\n          }\n\n          await driver.sendThread(this, this.abortSignal);\n          this.emit(MESSAGE_EVENTS.SENT, { thread: this, message });\n          await this.processLastMessage();\n          return this;\n        } catch (error) {\n          lastError = error as Error;\n          retryAttempts++;\n\n          if (retryAttempts < this.retry.maxAttempts) {\n            const delay = this.calculateDelay(retryAttempts);\n            await this.sleep(delay);\n          }\n        }\n      }\n\n      // If we're moving to a fallback driver, call the callback\n      if (driverIndex < drivers.length - 1 && this.onFallback && lastError) {\n        this.onFallback(lastError, driverIndex + 1);\n      }\n\n      driverIndex++;\n    }\n\n    throw lastError || new Error(\"All drivers and retries exhausted\");\n  }\n\n  /**\n   * Check if an assistant message appears incomplete\n   * (promises action but has no tool calls)\n   */\n  private isIncompleteResponse(message: Message): boolean {\n    if (!message.isAssistantMessage() || !message.content) {\n      return false;\n    }\n\n    const content = message.content.toLowerCase();\n    const incompletePatterns = [\n      \"i will\",\n      \"i'll\",\n      \"let me\",\n      \"i need to\",\n      \"first, i\",\n      \"next, i\",\n      \"now i will\",\n      \"now i'll\",\n      \"i am going to\",\n      \"i'm going to\",\n      \"i can\",\n      \"i should\",\n      \"i would\",\n      \"i must\",\n      \"let's\",\n    ];\n\n    // Check if message indicates future action\n    const promisesAction = incompletePatterns.some((pattern) => content.includes(pattern));\n\n    // Check if it has empty tool calls array (not null/undefined, but empty)\n    const hasEmptyToolCalls = Array.isArray(message.toolCalls) && message.toolCalls.length === 0;\n\n    return promisesAction && hasEmptyToolCalls;\n  }\n\n  /**\n   * Wraps a stream with completion handling\n   */\n  private async *wrapStream(stream: AsyncGenerator<string, void>, onComplete: () => Promise<void>) {\n    try {\n      yield* stream;\n    } finally {\n      await onComplete();\n    }\n  }\n\n  /**\n   * Stream a message or the current thread state to the LLM\n   */\n  public async stream(\n    message?: Message,\n    toolResponse = false,\n  ): Promise<AsyncGenerator<string, void>> {\n    // Check if execution has been aborted\n    if (this.abortSignal?.aborted) {\n      throw new Error(\"Thread execution aborted\");\n    }\n\n    if (message) {\n      this.push(message);\n    }\n    // Only reset steps on explicit message sends, not tool-triggered sends\n    if (!toolResponse) {\n      this.currentSteps = 0;\n    }\n\n    this.validateThread();\n\n    this.debug(\"STREAMING MESSAGE\", this.last());\n\n    // Try drivers with fallback logic\n    const drivers = [this.driver, ...this.fallbackDrivers];\n    let lastError: Error | undefined;\n    let driverIndex = 0;\n\n    for (const driver of drivers) {\n      let retryAttempts = 0;\n\n      while (retryAttempts < this.retry.maxAttempts) {\n        try {\n          // Check abort signal before each retry attempt\n          if (this.abortSignal?.aborted) {\n            throw new Error(\"Thread execution aborted\");\n          }\n\n          const response = driver.streamThread(this, this.abortSignal);\n          const firstYield = await response.next();\n\n          if (\n            !firstYield.value ||\n            !(\"stream\" in firstYield.value) ||\n            !(\"message\" in firstYield.value)\n          ) {\n            throw new Error(\"Invalid response received from driver\");\n          }\n\n          const { stream, message: initialMessage } = firstYield.value;\n\n          // Remove any existing assistant message\n          if (this.last()?.role === \"assistant\") {\n            this.pop();\n          }\n          this.push(initialMessage);\n\n          return this.wrapStream(stream, () => this.streamComplete(response));\n        } catch (error) {\n          lastError = error as Error;\n          retryAttempts++;\n\n          if (retryAttempts < this.retry.maxAttempts) {\n            const delay = this.calculateDelay(retryAttempts);\n            await this.sleep(delay);\n          }\n        }\n      }\n\n      // If we're moving to a fallback driver, call the callback\n      if (driverIndex < drivers.length - 1 && this.onFallback && lastError) {\n        this.onFallback(lastError, driverIndex + 1);\n      }\n\n      driverIndex++;\n    }\n\n    throw lastError || new Error(\"All drivers and retries exhausted\");\n  }\n\n  /**\n   * Handle the completion of a stream\n   */\n  private async streamComplete(\n    streamResponse: AsyncGenerator<\n      { stream: AsyncGenerator<string, void>; message: Message },\n      Thread\n    >,\n  ) {\n    try {\n      const result = await streamResponse.next();\n      if (result.value && result.value instanceof Thread) {\n        this.emit(MESSAGE_EVENTS.SENT, { thread: this, message: this.last() });\n        await this.processLastMessage();\n      }\n    } catch (error) {\n      this.emit(THREAD_EVENTS.ERROR_OCCURRED, { thread: this, error });\n    }\n  }\n\n  /**\n   * Validates that the thread has a user message as the first non-system message\n   * @throws Error if validation fails\n   */\n  private validateThread(): void {\n    const nonSystemMessages = this.messages.filter((message) => !message.isSystemMessage());\n\n    if (nonSystemMessages.length === 0) {\n      throw new Error(\"Thread must contain at least one non-system message\");\n    }\n\n    const firstNonSystemMessage = nonSystemMessages[0];\n\n    if (!firstNonSystemMessage?.isUserMessage()) {\n      throw new Error(\"First non-system message in thread must be a user message\");\n    }\n  }\n\n  /**\n   * Get all available tools in the thread\n   */\n  public getTools(): Tool[] {\n    return [...this.tools];\n  }\n\n  /**\n   * Add a new tool to the thread\n   * @param tool The tool to add\n   * @returns The tool that was added\n   */\n  public addTool(tool: Tool | ToolInterface): Tool {\n    const newTool = tool instanceof Tool ? tool : makeToolFromInterface(tool);\n    this.tools.push(newTool);\n    this.forwardEvents(newTool, { thread: this });\n    this.emit(THREAD_EVENTS.TOOL_ADDED, { thread: this, tool: newTool });\n    return newTool;\n  }\n\n  /**\n   * Generate a unique thread ID using UUID v4\n   */\n  private generateThreadId(): string {\n    return randomUUID();\n  }\n\n  /**\n   * Create a new thread with the same message history and tools\n   */\n  public fork(): Thread {\n    return new Thread({\n      messages: [...this.messages],\n      tools: [...this.tools],\n      driver: this.driver,\n      fallbackDrivers: this.fallbackDrivers,\n      retry: this.retry,\n      onFallback: this.onFallback,\n      maxSteps: this.maxSteps,\n      toolChoice: this.toolChoice,\n    });\n  }\n\n  /**\n   * Calculate delay for retry attempts\n   */\n  private calculateDelay(attempt: number): number {\n    if (!this.retry.exponentialBackoff) {\n      return this.retry.delay;\n    }\n\n    return this.retry.delay * 2 ** (attempt - 1);\n  }\n\n  /**\n   * Sleep for a specified amount of time\n   */\n  private sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n}\n","import type { z } from \"zod\";\nimport { Agent } from \"./agent\";\nimport type { ToolCall } from \"./message\";\nimport type { ToolInterface } from \"./tool\";\n\nexport abstract class AgentTool extends Agent implements ToolInterface {\n  public abstract override readonly name: string;\n  public abstract readonly description: string;\n  public abstract readonly parameters: z.ZodTypeAny;\n\n  public abstract executeTool(args: any, toolCall: ToolCall): Promise<any>;\n}\n","import type { Agent } from \"./agent\";\nimport type { Thread } from \"./thread\";\n\n/**\n * An evaluator will run after an agent completes. It has the ability to request that the agent\n * continue working, reset the agent, or invoke other agents.\n *\n * Evaluators are triggered on the first non-tool-call message.\n * Evaluators can be chained, but each evaluator must be resolved first.\n * Evaluators may continue the thread, but if so, must not resolve a promise until they do.\n * Evaluators cannot be triggered twice on the same thread.\n *\n *\n * Evaluators must resolve before the agent will resolve.\n */\n// export class Evaluator extends EventSource {\n//   public readonly thread: Thread;\n//   protected _onComplete: (result: boolean) => void;\n//   protected readonly evaluatorFn?: EvaluatorFn;\n\n//   constructor({ thread, onComplete, evaluatorFn }: EvaluatorProps) {\n//     super();\n//     this.thread = thread;\n//     this._onComplete = onComplete;\n//     this.evaluatorFn = evaluatorFn;\n//     this.forwardEvents(thread);\n//   }\n\n//   evaluate(onComplete?: (result: boolean) => void): void {\n//     if (onComplete) {\n//       this._onComplete = onComplete;\n//     }\n//     if (this.evaluatorFn) {\n//       this.evaluatorFn(\n//         {\n//           thread: this.thread,\n//           evaluator: this,\n//         },\n//         (result: boolean) => {\n//           this.complete(result);\n//         }\n//       );\n//     } else {\n//       throw new Error(\"Evaluator function not provided\");\n//     }\n//   }\n\n//   protected complete(result: boolean) {\n//     this._onComplete?.(result);\n//   }\n// }\n\nexport function makeEvaluator(fn: Evaluator): Evaluator {\n  return fn;\n}\n\nexport type Evaluator = (props: {\n  thread: Thread;\n  agent: Agent;\n  complete: (result: boolean) => void;\n}) => (() => void) | undefined;\n","/**\n * Solo - Simple interface for one-off LLM calls with structured output support\n *\n * Use Solo when you need:\n * - Classification tasks\n * - Data extraction with specific schemas\n * - Simple transformations (text → structured data)\n * - Retry/fallback for reliability\n *\n * Use Agent when you need:\n * - Tool calling and execution\n * - Multi-step workflows\n * - Complex reasoning with loops\n * - Conversation management\n */\n\nimport { z } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message } from \"./message\";\nimport { Thread, type ThreadDriver } from \"./thread\";\n\nexport interface SoloOptions<TOutput = string> {\n  /**\n   * The model driver to use for LLM calls\n   */\n  driver: ThreadDriver;\n\n  /**\n   * System prompt to use for the conversation\n   */\n  systemPrompt?: string;\n\n  /**\n   * Optional Zod schema for structured output\n   * When provided, the response will be parsed and validated\n   */\n  outputSchema?: z.ZodSchema<TOutput>;\n\n  /**\n   * Retry configuration for handling failures\n   */\n  retry?: {\n    /**\n     * Maximum number of retry attempts\n     * @default 3\n     */\n    maxAttempts?: number;\n\n    /**\n     * Delay between retries in milliseconds\n     * @default 1000\n     */\n    delay?: number;\n\n    /**\n     * Whether to exponentially increase delay\n     * @default true\n     */\n    exponentialBackoff?: boolean;\n  };\n\n  /**\n   * Fallback drivers to use if primary fails\n   */\n  fallbackDrivers?: ThreadDriver[];\n\n  /**\n   * Callback when switching to fallback driver\n   */\n  onFallback?: (error: Error, driverIndex: number) => void;\n\n  /**\n   * Temperature override for more consistent outputs\n   */\n  temperature?: number;\n\n  /**\n   * Response format hint for the model\n   */\n  responseFormat?: \"json\" | \"text\";\n}\n\nexport interface SoloResponse<TOutput = string> {\n  /**\n   * The parsed output (if schema provided) or raw content\n   */\n  output: TOutput;\n\n  /**\n   * Raw response content from the LLM\n   */\n  rawContent: string;\n\n  /**\n   * All messages in the conversation\n   */\n  messages: Message[];\n\n  /**\n   * Which driver was used (primary or fallback index)\n   */\n  driverUsed: \"primary\" | number;\n\n  /**\n   * Number of retry attempts made\n   */\n  retryAttempts: number;\n\n  /**\n   * Parse errors if output schema validation failed\n   */\n  parseError?: z.ZodError;\n}\n\n/**\n * Solo class for one-off LLM calls with structured output\n *\n * @example\n * ```typescript\n * // Simple classification\n * const classifier = new Solo({\n *   driver: new OpenAIThreadDriver({ apiKey: 'key' }),\n *   systemPrompt: 'Classify the sentiment of the text',\n *   outputSchema: z.enum(['positive', 'negative', 'neutral'])\n * });\n *\n * const result = await classifier.ask('I love this product!');\n * console.log(result.output); // 'positive'\n * ```\n *\n * @example\n * ```typescript\n * // Structured extraction\n * const extractor = new Solo({\n *   driver: new OpenAIThreadDriver({ apiKey: 'key' }),\n *   outputSchema: z.object({\n *     name: z.string(),\n *     age: z.number(),\n *     interests: z.array(z.string())\n *   })\n * });\n *\n * const result = await extractor.ask('John is 25 and likes coding and hiking');\n * console.log(result.output); // { name: 'John', age: 25, interests: ['coding', 'hiking'] }\n * ```\n */\nexport class Solo<TOutput = string> {\n  private readonly driver: ThreadDriver;\n  private readonly systemPrompt?: string;\n  private readonly outputSchema?: z.ZodSchema<TOutput>;\n  private readonly retry: Required<NonNullable<SoloOptions[\"retry\"]>>;\n  private readonly fallbackDrivers: ThreadDriver[];\n  private readonly responseFormat?: \"json\" | \"text\";\n  private readonly onFallback?: (error: Error, driverIndex: number) => void;\n\n  constructor(options: SoloOptions<TOutput>) {\n    this.driver = options.driver;\n    this.systemPrompt = options.systemPrompt;\n    this.outputSchema = options.outputSchema;\n    this.fallbackDrivers = options.fallbackDrivers || [];\n    this.responseFormat = options.responseFormat || (options.outputSchema ? \"json\" : \"text\");\n    this.onFallback = options.onFallback;\n\n    // Set retry defaults\n    this.retry = {\n      maxAttempts: options.retry?.maxAttempts ?? 3,\n      delay: options.retry?.delay ?? 1000,\n      exponentialBackoff: options.retry?.exponentialBackoff ?? true,\n    };\n  }\n\n  /**\n   * Make a one-off LLM call with automatic parsing and validation\n   * @param prompt The prompt to send to the LLM\n   * @param options Optional overrides for this specific call\n   * @returns Promise resolving to the structured response\n   */\n  async ask(\n    prompt: string,\n    options?: {\n      systemPrompt?: string;\n      temperature?: number;\n      parseOnly?: boolean; // Skip schema validation\n    },\n  ): Promise<SoloResponse<TOutput>> {\n    const drivers = [this.driver, ...this.fallbackDrivers];\n    let lastError: Error | undefined;\n    let driverIndex = 0;\n\n    for (const driver of drivers) {\n      let retryAttempts = 0;\n\n      while (retryAttempts < this.retry.maxAttempts) {\n        try {\n          const response = await this.executeCall(\n            driver,\n            prompt,\n            options?.systemPrompt || this.systemPrompt,\n          );\n\n          return {\n            ...response,\n            driverUsed: driverIndex === 0 ? \"primary\" : driverIndex,\n            retryAttempts,\n          };\n        } catch (error) {\n          lastError = error as Error;\n          retryAttempts++;\n\n          if (retryAttempts < this.retry.maxAttempts) {\n            const delay = this.calculateDelay(retryAttempts);\n            await this.sleep(delay);\n          }\n        }\n      }\n\n      // If we're moving to a fallback driver, call the callback\n      if (driverIndex < drivers.length - 1 && this.onFallback) {\n        this.onFallback(lastError!, driverIndex + 1);\n      }\n\n      driverIndex++;\n    }\n\n    throw lastError || new Error(\"All drivers and retries exhausted\");\n  }\n\n  /**\n   * Make a streaming LLM call (note: structured output not supported in streaming)\n   * @param prompt The prompt to send\n   * @returns AsyncGenerator yielding response chunks\n   */\n  async *stream(\n    prompt: string,\n    options?: {\n      systemPrompt?: string;\n      temperature?: number;\n    },\n  ): AsyncGenerator<string, SoloResponse<string>> {\n    const messages = this.buildMessages(prompt, options?.systemPrompt || this.systemPrompt);\n\n    const thread = new Thread({\n      messages,\n      driver: this.driver,\n    });\n\n    const stream = await thread.stream();\n\n    let fullContent = \"\";\n    for await (const chunk of stream) {\n      fullContent += chunk;\n      yield chunk;\n    }\n\n    return {\n      output: fullContent,\n      rawContent: fullContent,\n      messages: thread.all(),\n      driverUsed: \"primary\",\n      retryAttempts: 0,\n    } as SoloResponse<string>;\n  }\n\n  /**\n   * Parse a raw LLM response using the configured schema\n   * Useful for testing or manual parsing\n   */\n  parse(content: string): TOutput | undefined {\n    if (!this.outputSchema) {\n      return content as TOutput;\n    }\n\n    try {\n      const parsed = this.responseFormat === \"json\" ? JSON.parse(content) : content;\n\n      return this.outputSchema.parse(parsed);\n    } catch (error) {\n      return undefined;\n    }\n  }\n\n  private async executeCall(\n    driver: ThreadDriver,\n    prompt: string,\n    systemPrompt?: string,\n  ): Promise<Omit<SoloResponse<TOutput>, \"driverUsed\" | \"retryAttempts\">> {\n    const messages = this.buildMessages(prompt, systemPrompt);\n\n    // Create a driver with structured output support if needed\n    const configuredDriver = this.configureDriverForStructuredOutput(driver);\n\n    // Build thread with driver-specific options\n    const thread = new Thread({\n      messages,\n      driver: configuredDriver,\n    });\n\n    await thread.send();\n\n    const lastMessage = thread.last();\n    const rawContent = lastMessage?.content || \"\";\n\n    // Handle structured output\n    if (this.outputSchema) {\n      try {\n        const parsed = this.responseFormat === \"json\" ? JSON.parse(rawContent) : rawContent;\n\n        const output = this.outputSchema.parse(parsed);\n\n        return {\n          output,\n          rawContent,\n          messages: thread.all(),\n        };\n      } catch (error) {\n        if (error instanceof z.ZodError) {\n          // Include parse error but still return raw content\n          return {\n            output: rawContent as TOutput,\n            rawContent,\n            messages: thread.all(),\n            parseError: error,\n          };\n        } else if (error instanceof SyntaxError && this.responseFormat === \"json\") {\n          // JSON parse error - return with parse error\n          return {\n            output: rawContent as TOutput,\n            rawContent,\n            messages: thread.all(),\n            parseError: new z.ZodError([\n              {\n                code: z.ZodIssueCode.custom,\n                message: `Invalid JSON: ${error.message}`,\n                path: [],\n              },\n            ]),\n          };\n        }\n        throw error;\n      }\n    }\n\n    return {\n      output: rawContent as TOutput,\n      rawContent,\n      messages: thread.all(),\n    };\n  }\n\n  private buildMessages(prompt: string, systemPrompt?: string): Message[] {\n    const messages: Message[] = [];\n\n    // Build system prompt with format hints if needed\n    let finalSystemPrompt = systemPrompt || \"\";\n\n    if (this.outputSchema && this.responseFormat === \"json\") {\n      const schemaHint = `\\n\\nRespond with valid JSON that matches this structure:\\n${this.getSchemaDescription()}`;\n      finalSystemPrompt = finalSystemPrompt\n        ? `${finalSystemPrompt}${schemaHint}`\n        : `You are a helpful assistant that provides structured responses.${schemaHint}`;\n    }\n\n    if (finalSystemPrompt) {\n      messages.push(\n        new Message({\n          role: \"system\",\n          content: finalSystemPrompt,\n          cache: true,\n        }),\n      );\n    }\n\n    messages.push(\n      new Message({\n        role: \"user\",\n        content: prompt,\n        cache: true,\n      }),\n    );\n\n    return messages;\n  }\n\n  private getSchemaDescription(): string {\n    if (!this.outputSchema) return \"\";\n\n    // For simple schemas, return a basic description\n    if (this.outputSchema instanceof z.ZodEnum) {\n      const values = this.outputSchema.options;\n      return `One of: ${values.map((v: any) => `\"${v}\"`).join(\", \")}`;\n    }\n\n    if (this.outputSchema instanceof z.ZodObject) {\n      const shape = this.outputSchema.shape;\n      const props = Object.entries(shape).map(([key, value]) => {\n        return `  \"${key}\": ${this.getZodTypeDescription(value as z.ZodTypeAny)}`;\n      });\n      return `{\\n${props.join(\",\\n\")}\\n}`;\n    }\n\n    return \"Valid JSON matching the expected schema\";\n  }\n\n  private getZodTypeDescription(schema: z.ZodTypeAny): string {\n    if (schema instanceof z.ZodString) return \"string\";\n    if (schema instanceof z.ZodNumber) return \"number\";\n    if (schema instanceof z.ZodBoolean) return \"boolean\";\n    if (schema instanceof z.ZodArray) return \"array\";\n    if (schema instanceof z.ZodObject) return \"object\";\n    if (schema instanceof z.ZodEnum) {\n      const values = schema.options;\n      return values.map((v: any) => `\"${v}\"`).join(\" | \");\n    }\n    return \"any\";\n  }\n\n  private calculateDelay(attempt: number): number {\n    if (!this.retry.exponentialBackoff) {\n      return this.retry.delay;\n    }\n\n    return this.retry.delay * Math.pow(2, attempt - 1);\n  }\n\n  private sleep(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  /**\n   * Configure a driver to use structured output if supported\n   */\n  private configureDriverForStructuredOutput(driver: ThreadDriver): ThreadDriver {\n    if (!this.outputSchema || this.responseFormat !== \"json\") {\n      return driver;\n    }\n\n    // Convert Zod schema to JSON Schema format\n    const jsonSchema = zodToJsonSchema(this.outputSchema) as any;\n\n    // Create a structured output schema compatible with all drivers\n    // Use the full JSON schema to preserve all properties including anyOf, nested structures, etc.\n    const structuredSchema = {\n      ...jsonSchema,\n      // Ensure basic required fields are present\n      type: jsonSchema.type || \"object\",\n      additionalProperties: jsonSchema.additionalProperties ?? false,\n    };\n\n    // Check if the driver supports structured output configuration\n    const driverConstructor = driver.constructor;\n    const driverName = driverConstructor.name;\n\n    // Import the driver classes dynamically to avoid circular dependencies\n    if (driverName === \"OpenAIThreadDriver\") {\n      const { OpenAIThreadDriver } = require(\"./model.drivers/openai\");\n      if (driver instanceof OpenAIThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.OPENAI_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new OpenAIThreadDriver(config);\n      }\n    } else if (driverName === \"AnthropicThreadDriver\") {\n      const { AnthropicThreadDriver } = require(\"./model.drivers/anthropic\");\n      if (driver instanceof AnthropicThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.ANTHROPIC_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new AnthropicThreadDriver(config);\n      }\n    } else if (driverName === \"GeminiThreadDriver\") {\n      const { GeminiThreadDriver } = require(\"./model.drivers/gemini\");\n      if (driver instanceof GeminiThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.GOOGLE_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new GeminiThreadDriver(config);\n      }\n    } else if (driverName === \"CerebrasThreadDriver\") {\n      const { CerebrasThreadDriver } = require(\"./model.drivers/cerebras\");\n      if (driver instanceof CerebrasThreadDriver) {\n        // Create a new instance with structured output\n        const config = {\n          apiKey: process.env.CEREBRAS_API_KEY,\n          model: (driver as any).model,\n          temperature: (driver as any).temperature,\n          maxTokens: (driver as any).maxTokens,\n          cache: (driver as any).cache,\n          responseSchema: structuredSchema,\n        };\n        return new CerebrasThreadDriver(config);\n      }\n    }\n\n    // For drivers that don't support native structured output,\n    // return the original driver (schema hints will be added to prompts)\n    return driver;\n  }\n}\n\n/**\n * Convenience function for quick classification tasks\n * @param prompt The text to classify\n * @param categories Array of possible categories\n * @param driver The model driver to use\n * @param systemPrompt Optional system prompt for context\n * @returns Promise resolving to the selected category\n *\n * @example\n * ```typescript\n * const sentiment = await classify(\n *   \"I love this product!\",\n *   ['positive', 'negative', 'neutral'],\n *   driver\n * );\n * console.log(sentiment); // 'positive'\n * ```\n */\nexport async function classify<T extends string>(\n  prompt: string,\n  categories: readonly T[],\n  driver: ThreadDriver,\n  systemPrompt?: string,\n): Promise<T> {\n  const solo = new Solo({\n    driver,\n    systemPrompt:\n      systemPrompt || `Classify the input into one of these categories: ${categories.join(\", \")}`,\n    outputSchema: z.enum(categories as [T, ...T[]]),\n    responseFormat: \"json\",\n  });\n\n  const response = await solo.ask(prompt);\n  return response.output;\n}\n\n/**\n * Convenience function for structured data extraction\n * @param prompt The text to extract data from\n * @param schema Zod schema defining the expected structure\n * @param driver The model driver to use\n * @param systemPrompt Optional system prompt for context\n * @returns Promise resolving to the extracted data\n *\n * @example\n * ```typescript\n * const PersonSchema = z.object({\n *   name: z.string(),\n *   age: z.number(),\n *   email: z.string().email().optional()\n * });\n *\n * const person = await extract(\n *   \"John Doe is 30 years old and his email is john@example.com\",\n *   PersonSchema,\n *   driver\n * );\n * console.log(person); // { name: 'John Doe', age: 30, email: 'john@example.com' }\n * ```\n */\nexport async function extract<T>(\n  prompt: string,\n  schema: z.ZodSchema<T>,\n  driver: ThreadDriver,\n  systemPrompt?: string,\n): Promise<T> {\n  const solo = new Solo({\n    driver,\n    systemPrompt: systemPrompt || \"Extract structured data from the input text.\",\n    outputSchema: schema,\n    responseFormat: \"json\",\n  });\n\n  const response = await solo.ask(prompt);\n  return response.output;\n}\n","/**\n * Gig - A jazz performance where musicians play together\n *\n * In jazz, a gig is fluid and improvisational:\n * - Musicians can play solo or together\n * - The setlist evolves during performance\n * - Players respond to each other and the audience\n * - Every performance is unique\n *\n * The Gig's \"driver\" provides the default driver for all pieces,\n * but individual pieces can override with their own drivers\n * for specialized tasks or fallback scenarios.\n */\n\nimport type { z } from \"zod\";\nimport { Agent } from \"./agent\";\nimport { EventSource } from \"./event-source\";\nimport { GIG_EVENTS, PIECE_EVENTS } from \"./events\";\nimport type { PieceDefinition } from \"./piece\";\nimport { Solo } from \"./solo\";\nimport type { ThreadDriver } from \"./thread\";\nimport type { Tool } from \"./tool\";\n\n// The vibe/context that flows through the performance\nexport interface Groove {\n  // Recordings from previous performances\n  recordings: Map<string, any>;\n\n  // The current vibe\n  vibe: Map<string, any>;\n\n  // Recall a previous performance\n  recall<T = any>(piece: string): T | undefined;\n\n  // Recall multiple performances\n  recallAll<T = any>(...pieces: string[]): Record<string, T>;\n\n  // Set the vibe\n  setVibe(key: string, value: any): void;\n\n  // Feel the vibe\n  feelVibe<T = any>(key: string): T | undefined;\n}\n\n// Configuration for a piece in the setlist\nexport interface Piece {\n  // What to play\n  play: ((groove: Groove) => any) | ((groove: Groove) => Promise<any>);\n\n  // Optional configuration - all options flat for elegance\n  with?: {\n    // Solo-specific options (used when no tools are present)\n    outputSchema?: z.ZodSchema<any>;\n    responseFormat?: \"json\" | \"text\";\n    temperature?: number;\n    systemPrompt?: string;\n\n    // Agent-specific options (used when tools are present)\n    tools?: Tool[];\n    instructions?: Array<{ instruction: string; priority: number }>;\n\n    // Common options (work for both Solo and Agent)\n    driver?: ThreadDriver;\n    fallbackDrivers?: ThreadDriver[];\n    retry?: {\n      maxAttempts?: number;\n      delay?: number;\n      exponentialBackoff?: boolean;\n    };\n    onFallback?: (error: Error, driverIndex: number) => void;\n\n    // Workflow options\n    after?: string | string[];\n    when?: (groove: Groove) => boolean | Promise<boolean>;\n    onError?: \"stop\" | \"continue\" | \"retry\";\n    retries?: number;\n  };\n}\n\n// Gig configuration\nexport interface GigOptions {\n  label: string; // Name of the gig\n  driver: ThreadDriver; // The AI model\n\n  // Fallback configuration (passed to all pieces)\n  fallbackDrivers?: ThreadDriver[];\n  retry?: {\n    maxAttempts?: number;\n    delay?: number;\n    exponentialBackoff?: boolean;\n  };\n  onFallback?: (error: Error, driverIndex: number) => void;\n\n  // Callbacks\n  onProgress?: (piece: string, groove: Groove) => void;\n  onError?: (error: Error, piece: string) => void;\n\n  // Time limit for the whole gig\n  timeLimit?: number;\n}\n\n// Results from the gig\nexport interface GigResults {\n  success: boolean;\n  recordings: Map<string, any>;\n  errors: Map<string, Error>;\n  vibe: Map<string, any>;\n  duration: number;\n  performed: string[];\n  skipped: string[];\n  failed: string[];\n}\n\n/**\n * Gig - Orchestrate a jazz performance\n *\n * @example\n * ```typescript\n * const gig = new Gig({\n *   label: \"Customer Service Club\",\n *   driver: driver // Default driver for all pieces\n * });\n *\n * // Add pieces to the setlist - freeform style\n * gig\n *   .add(\"classify\", groove =>\n *     `Classify this: ${groove.feelVibe(\"request\")}`, {\n *     solo: {\n *       outputSchema: z.enum([\"urgent\", \"normal\", \"low\"])\n *     },\n *     driver: fastDriver // Override with faster model\n *   })\n *   .add(\"process\", groove =>\n *     `Handle ${groove.recall(\"classify\")} priority request`, {\n *     tools: [databaseTool, emailTool],\n *     after: \"classify\"\n *     // Uses default driver\n *   })\n *   .add(\"search\", async groove => {\n *     // Custom async performance\n *     const category = groove.recall(\"classify\");\n *     return await searchKnowledgeBase(category);\n *   }, {\n *     after: \"classify\"\n *   })\n *   .add(\"respond\", groove => {\n *     const results = groove.recallAll(\"process\", \"search\");\n *     return `Generate response using: ${JSON.stringify(results)}`;\n *   }, {\n *     after: [\"process\", \"search\"],\n *     driver: creativeDriver // Override for creative response\n *   });\n *\n * const results = await gig.perform({ request: \"Password reset\" });\n * ```\n */\nexport class Gig extends EventSource {\n  private label: string;\n  private driver: ThreadDriver;\n  private pieces = new Map<string, Piece>();\n  private options: Omit<GigOptions, \"label\" | \"driver\">;\n  private dependencies = new Map<string, Set<string>>();\n  private pieceOrder: string[] = [];\n  private parallelGroups = new Map<string, Set<string>>();\n  private lastPieceName: string | null = null;\n  private lastParallelGroup: Set<string> | null = null;\n\n  constructor(options: GigOptions) {\n    super();\n    this.label = options.label;\n    this.driver = options.driver;\n    this.options = {\n      fallbackDrivers: options.fallbackDrivers,\n      retry: options.retry,\n      onFallback: options.onFallback,\n      onProgress: options.onProgress,\n      onError: options.onError,\n      timeLimit: options.timeLimit,\n    };\n  }\n\n  /**\n   * Add a piece to the setlist (runs sequentially by default)\n   *\n   * The beauty of jazz is its flexibility - a piece can be:\n   * - A simple string prompt (becomes a solo)\n   * - A function returning a prompt (dynamic solo)\n   * - An async function (custom performance)\n   * - Anything that uses tools (becomes ensemble playing)\n   *\n   * @example\n   * // Pattern 1: Explicit format\n   * gig.add(\"classify\", () => \"Classify this\", { outputSchema: schema })\n   *\n   * // Pattern 2: Object format\n   * gig.add(\"classify\", classifyPiece)\n   *\n   * // Pattern 3: Self-contained piece\n   * gig.add(classifyPiece)\n   */\n  add(\n    nameOrPiece: string | PieceDefinition,\n    playOrPiece?: Piece[\"play\"] | string | PieceDefinition,\n    config?: Piece[\"with\"],\n  ): this {\n    // Handle different overload patterns\n    let name: string;\n    let play: Piece[\"play\"] | string;\n    let pieceConfig: Piece[\"with\"] | undefined;\n\n    if (typeof nameOrPiece === \"string\") {\n      name = nameOrPiece;\n\n      if (typeof playOrPiece === \"function\" || typeof playOrPiece === \"string\") {\n        // Pattern 1: add(name, play, config)\n        play = playOrPiece;\n        pieceConfig = config;\n      } else if (playOrPiece && typeof playOrPiece === \"object\" && \"play\" in playOrPiece) {\n        // Pattern 2: add(name, pieceDefinition)\n        play = playOrPiece.play;\n        pieceConfig = playOrPiece.config;\n      } else {\n        throw new Error(\"Invalid arguments to add()\");\n      }\n    } else {\n      // Pattern 3: add(pieceDefinition)\n      if (!nameOrPiece.name) {\n        throw new Error(\"Piece must have a name when using add(piece) pattern\");\n      }\n      name = nameOrPiece.name;\n      play = nameOrPiece.play;\n      pieceConfig = nameOrPiece.config;\n    }\n    // If play is a string, wrap it in a function\n    const playFn = typeof play === \"string\" ? () => play : play;\n\n    this.pieces.set(name, { play: playFn, with: pieceConfig });\n    this.pieceOrder.push(name);\n\n    // Update dependencies\n    const deps = new Set<string>();\n\n    // If 'after' is specified, use it\n    if (pieceConfig?.after) {\n      const afterList = Array.isArray(pieceConfig.after) ? pieceConfig.after : [pieceConfig.after];\n      afterList.forEach((dep) => deps.add(dep));\n    } else if (!this.isInCurrentParallelGroup(name)) {\n      // For sequential pieces, depend on previous piece(s)\n      if (this.lastParallelGroup) {\n        // Depend on all pieces from the last parallel group\n        this.lastParallelGroup.forEach((dep) => deps.add(dep));\n      } else if (this.lastPieceName) {\n        // Depend on the last sequential piece\n        deps.add(this.lastPieceName);\n      }\n    }\n\n    this.dependencies.set(name, deps);\n\n    // Update tracking for next piece\n    if (!this.isInCurrentParallelGroup(name)) {\n      this.lastPieceName = name;\n      this.lastParallelGroup = null;\n    }\n\n    // Validate no cycles\n    this.validateNoCycles();\n\n    return this;\n  }\n\n  /**\n   * Add pieces that run in parallel\n   *\n   * @example\n   * gig\n   *   .add(\"setup\", \"Prepare the data\")\n   *   .parallel([\n   *     [\"analyze_sentiment\", \"Analyze sentiment\"],\n   *     [\"extract_entities\", \"Extract entities\"],\n   *     [\"classify_intent\", \"Classify intent\"]\n   *   ])\n   *   .add(\"summarize\", \"Combine all analyses\")\n   */\n  parallel(pieces: Array<[string, Piece[\"play\"] | string, Piece[\"with\"]?]>): this {\n    if (pieces.length === 0) return this;\n\n    // Create a group for these parallel pieces\n    const groupPieces = new Set<string>();\n\n    // Add all pieces in the group\n    pieces.forEach(([name, play, config]) => {\n      groupPieces.add(name);\n      this.parallelGroups.set(name, groupPieces);\n\n      // Add the piece - it will check if it's in a parallel group\n      this.add(name, play, config);\n    });\n\n    // Track this parallel group so next sequential piece depends on all of them\n    this.lastParallelGroup = groupPieces;\n    this.lastPieceName = null;\n\n    return this;\n  }\n\n  private isInCurrentParallelGroup(pieceName: string): boolean {\n    return this.parallelGroups.has(pieceName);\n  }\n\n  /**\n   * Add multiple pieces at once\n   */\n  setlist(pieces: Record<string, Piece[\"play\"] | Piece>): this {\n    for (const [name, pieceOrPlay] of Object.entries(pieces)) {\n      if (typeof pieceOrPlay === \"function\" || typeof pieceOrPlay === \"string\") {\n        this.add(name, pieceOrPlay);\n      } else {\n        this.add(name, pieceOrPlay.play, pieceOrPlay.with);\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Perform the gig\n   */\n  async perform(initialVibe?: Record<string, any>): Promise<GigResults> {\n    const startTime = Date.now();\n    const groove = this.createGroove(initialVibe);\n    const results: GigResults = {\n      success: true,\n      recordings: groove.recordings,\n      errors: new Map(),\n      vibe: groove.vibe,\n      duration: 0,\n      performed: [],\n      skipped: [],\n      failed: [],\n    };\n\n    try {\n      // Apply time limit if specified\n      const performancePromise = this.performGig(groove, results);\n\n      if (this.options.timeLimit) {\n        await Promise.race([performancePromise, this.timeout(this.options.timeLimit)]);\n      } else {\n        await performancePromise;\n      }\n\n      results.duration = Date.now() - startTime;\n      this.emit(GIG_EVENTS.PERFORMANCE_COMPLETED, { gig: this, results });\n    } catch (error) {\n      results.success = false;\n      results.duration = Date.now() - startTime;\n\n      this.emit(GIG_EVENTS.PERFORMANCE_FAILED, {\n        gig: this,\n        error: error as Error,\n        results,\n      });\n    }\n\n    return results;\n  }\n\n  private async performGig(groove: Groove, results: GigResults): Promise<void> {\n    const performed = new Set<string>();\n    const performing = new Set<string>();\n\n    while (true) {\n      const ready = this.getReadyPieces(performed);\n      if (ready.length === 0 && performing.size === 0) break;\n\n      // Perform ready pieces (usually just one due to sequential default)\n      const performances = ready.map(async (pieceName) => {\n        performing.add(pieceName);\n\n        try {\n          const wasSkipped = await this.performPiece(pieceName, groove);\n          performed.add(pieceName);\n\n          if (!wasSkipped) {\n            results.performed.push(pieceName);\n          } else {\n            results.skipped.push(pieceName);\n          }\n\n          if (this.options.onProgress) {\n            this.options.onProgress(pieceName, groove);\n          }\n\n          this.emit(PIECE_EVENTS.EXECUTION_COMPLETED, {\n            gig: this,\n            piece: pieceName,\n            recording: groove.recall(pieceName),\n          });\n        } catch (error) {\n          const piece = this.pieces.get(pieceName)!;\n          const errorHandling = piece.with?.onError || \"stop\";\n\n          results.failed.push(pieceName);\n          results.errors.set(pieceName, error as Error);\n\n          this.emit(PIECE_EVENTS.EXECUTION_FAILED, {\n            gig: this,\n            piece: pieceName,\n            error: error as Error,\n          });\n\n          if (this.options.onError) {\n            this.options.onError(error as Error, pieceName);\n          }\n\n          if (errorHandling === \"stop\") {\n            throw error;\n          }\n        } finally {\n          performing.delete(pieceName);\n        }\n      });\n\n      // Wait for all ready pieces to complete before checking for more\n      if (performances.length > 0) {\n        await Promise.all(performances);\n      }\n    }\n  }\n\n  private async performPiece(pieceName: string, groove: Groove): Promise<boolean> {\n    const piece = this.pieces.get(pieceName);\n    if (!piece) {\n      throw new Error(`Piece \"${pieceName}\" not found in setlist`);\n    }\n\n    // Check condition\n    if (piece.with?.when) {\n      const shouldPlay = await piece.with.when(groove);\n      if (!shouldPlay) {\n        this.emit(PIECE_EVENTS.EXECUTION_SKIPPED, { gig: this, piece: pieceName });\n        return true;\n      }\n    }\n\n    this.emit(PIECE_EVENTS.EXECUTION_STARTED, { gig: this, piece: pieceName });\n\n    // Handle retries\n    const maxAttempts = (piece.with?.retries || 0) + 1;\n    let lastError: Error | undefined;\n\n    for (let attempt = 0; attempt < maxAttempts; attempt++) {\n      try {\n        const result = await this.playPiece(piece, groove);\n        groove.recordings.set(pieceName, result);\n        return false;\n      } catch (error) {\n        lastError = error as Error;\n\n        if (attempt < maxAttempts - 1) {\n          this.emit(PIECE_EVENTS.RETRY_ATTEMPTED, {\n            gig: this,\n            piece: pieceName,\n            attempt: attempt + 1,\n            error: lastError,\n          });\n\n          // Exponential backoff\n          await this.rest(Math.pow(2, attempt) * 1000);\n        }\n      }\n    }\n\n    throw lastError;\n  }\n\n  private async playPiece(piece: Piece, groove: Groove): Promise<any> {\n    const playResult = await piece.play(groove);\n\n    // If it's just a string, treat it as a prompt\n    if (typeof playResult === \"string\") {\n      // Use piece-specific driver or default to gig's driver\n      const driver = piece.with?.driver || this.driver;\n\n      // Check if we have tools - use Agent (player with instruments)\n      if (piece.with?.tools && piece.with.tools.length > 0) {\n        const player = new Agent({\n          driver,\n          tools: piece.with.tools,\n          instructions: piece.with.instructions,\n          // Use piece-level fallback config if provided, otherwise use gig's defaults\n          fallbackDrivers: piece.with.fallbackDrivers || this.options.fallbackDrivers,\n          retry: piece.with.retry || this.options.retry,\n          onFallback: piece.with.onFallback || this.options.onFallback,\n        });\n\n        const thread = player.createThread({ prompt: playResult });\n        await thread.send();\n\n        return thread.last()?.content || \"\";\n      }\n\n      // Otherwise it's a solo\n      const solo = new Solo({\n        driver,\n        outputSchema: piece.with?.outputSchema,\n        responseFormat: piece.with?.responseFormat,\n        temperature: piece.with?.temperature,\n        systemPrompt: piece.with?.systemPrompt,\n        fallbackDrivers: piece.with?.fallbackDrivers || this.options.fallbackDrivers,\n        retry: piece.with?.retry || this.options.retry,\n        onFallback: piece.with?.onFallback || this.options.onFallback,\n      });\n\n      const response = await solo.ask(playResult);\n      return response.output;\n    }\n\n    // For non-string results, return as-is\n    return playResult;\n  }\n\n  private getReadyPieces(performed: Set<string>): string[] {\n    const ready: string[] = [];\n\n    // Check pieces in the order they were added\n    for (const piece of this.pieceOrder) {\n      if (performed.has(piece)) continue;\n\n      const deps = this.dependencies.get(piece) || new Set();\n      if (Array.from(deps).every((dep) => performed.has(dep))) {\n        ready.push(piece);\n\n        // If this piece is not in a parallel group, return just this one\n        // (sequential execution)\n        if (!this.parallelGroups.has(piece)) {\n          return ready;\n        }\n\n        // If it's in a parallel group, continue to find all pieces in the same group\n        const group = this.parallelGroups.get(piece)!;\n        for (const groupPiece of group) {\n          if (groupPiece !== piece && !performed.has(groupPiece) && !ready.includes(groupPiece)) {\n            const groupDeps = this.dependencies.get(groupPiece) || new Set();\n            if (Array.from(groupDeps).every((dep) => performed.has(dep))) {\n              ready.push(groupPiece);\n            }\n          }\n        }\n\n        // Return all ready pieces from this parallel group\n        return ready;\n      }\n    }\n\n    return ready;\n  }\n\n  private validateNoCycles(): void {\n    const visited = new Set<string>();\n\n    for (const piece of this.pieces.keys()) {\n      const recursionStack = new Set<string>();\n      if (!visited.has(piece) && this.hasCycle(piece, visited, recursionStack)) {\n        throw new Error(`Circular dependency detected in setlist`);\n      }\n    }\n  }\n\n  private hasCycle(piece: string, visited: Set<string>, recursionStack: Set<string>): boolean {\n    visited.add(piece);\n    recursionStack.add(piece);\n\n    const deps = this.dependencies.get(piece) || new Set();\n    for (const dep of deps) {\n      if (!visited.has(dep)) {\n        if (this.hasCycle(dep, visited, recursionStack)) {\n          return true;\n        }\n      } else if (recursionStack.has(dep)) {\n        return true;\n      }\n    }\n\n    recursionStack.delete(piece);\n    return false;\n  }\n\n  private createGroove(vibe?: Record<string, any>): Groove {\n    const recordings = new Map<string, any>();\n    const vibeMap = new Map<string, any>(Object.entries(vibe || {}));\n\n    return {\n      recordings,\n      vibe: vibeMap,\n\n      recall<T = any>(piece: string): T | undefined {\n        return recordings.get(piece) as T;\n      },\n\n      recallAll<T = any>(...pieces: string[]): Record<string, T> {\n        const output: Record<string, T> = {};\n        for (const piece of pieces) {\n          const recording = recordings.get(piece);\n          if (recording !== undefined) {\n            output[piece] = recording as T;\n          }\n        }\n        return output;\n      },\n\n      setVibe(key: string, value: any): void {\n        vibeMap.set(key, value);\n      },\n\n      feelVibe<T = any>(key: string): T | undefined {\n        return vibeMap.get(key) as T;\n      },\n    };\n  }\n\n  private rest(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  private timeout(ms: number): Promise<never> {\n    return new Promise((_, reject) => {\n      setTimeout(() => reject(new Error(`Gig timeout after ${ms}ms`)), ms);\n    });\n  }\n\n  /**\n   * Get a visualization of the setlist\n   */\n  getSetlist(): string {\n    const lines: string[] = [`🎵 ${this.label}`, `📋 ${this.pieces.size} pieces`, \"\"];\n\n    for (const [name, piece] of this.pieces) {\n      const deps = piece.with?.after;\n      const depStr = deps ? ` (after: ${Array.isArray(deps) ? deps.join(\", \") : deps})` : \"\";\n\n      const type = piece.with?.tools ? \"ensemble\" : \"solo\";\n      lines.push(`- ${name} [${type}]${depStr}`);\n    }\n\n    return lines.join(\"\\n\");\n  }\n}\n","import type { z } from \"zod\";\nimport { Agent } from \"./agent\";\nimport type { Groove } from \"./gig\";\nimport { Solo } from \"./solo\";\nimport type { ThreadDriver } from \"./thread\";\nimport type { Tool } from \"./tool\";\n\n/**\n * Base type for a reusable Gig piece\n */\nexport interface PieceDefinition<TOutput = any> {\n  /**\n   * The name of the piece (used in groove.recall)\n   */\n  name: string;\n\n  /**\n   * The function that generates the prompt or executes custom logic\n   */\n  play: ((groove: Groove) => string | Promise<any>) | string;\n\n  /**\n   * Configuration for the piece\n   */\n  config?: {\n    // Solo options\n    outputSchema?: z.ZodSchema<TOutput>;\n    responseFormat?: \"json\" | \"text\";\n    temperature?: number;\n    systemPrompt?: string;\n\n    // Agent options\n    tools?: Tool[];\n    instructions?: Array<{ instruction: string; priority: number }>;\n\n    // Common options\n    driver?: ThreadDriver;\n    fallbackDrivers?: ThreadDriver[];\n    retry?: {\n      maxAttempts?: number;\n      delay?: number;\n      exponentialBackoff?: boolean;\n    };\n    onFallback?: (error: Error, driverIndex: number) => void;\n\n    // Workflow options\n    after?: string | string[];\n    when?: (groove: Groove) => boolean | Promise<boolean>;\n    onError?: \"stop\" | \"continue\" | \"retry\";\n    retries?: number;\n  };\n\n  /**\n   * Metadata about the piece\n   */\n  meta?: {\n    version?: string;\n    description?: string;\n    author?: string;\n    tags?: string[];\n  };\n}\n\n/**\n * Helper to create a Solo instance from a piece definition\n */\nexport function createSoloFromPiece<TOutput = any>(\n  piece: PieceDefinition<TOutput>,\n  driver: ThreadDriver,\n): Solo<TOutput> {\n  if (!piece.config?.outputSchema && !piece.config?.responseFormat) {\n    throw new Error(`Piece \"${piece.name}\" doesn't have Solo configuration`);\n  }\n\n  return new Solo<TOutput>({\n    driver,\n    outputSchema: piece.config.outputSchema,\n    responseFormat: piece.config.responseFormat,\n    temperature: piece.config.temperature,\n    systemPrompt: piece.config.systemPrompt,\n    fallbackDrivers: piece.config.fallbackDrivers,\n    retry: piece.config.retry,\n    onFallback: piece.config.onFallback,\n  });\n}\n\n/**\n * Helper to create an Agent instance from a piece definition\n */\nexport function createAgentFromPiece(piece: PieceDefinition, driver: ThreadDriver): Agent {\n  if (!piece.config?.tools || piece.config.tools.length === 0) {\n    throw new Error(`Piece \"${piece.name}\" doesn't have Agent configuration`);\n  }\n\n  return new Agent({\n    driver,\n    tools: piece.config.tools,\n    instructions: piece.config.instructions,\n    systemPrompt: piece.config.systemPrompt,\n    fallbackDrivers: piece.config.fallbackDrivers,\n    retry: piece.config.retry,\n    onFallback: piece.config.onFallback,\n  });\n}\n","import { makeEvaluator } from \"../evaluator\";\nimport { Message } from \"../message\";\n\ntype ThreeKeyedLockEvaluatorProps = {\n  evalPrompt?: string;\n  exitPrompt?: string;\n};\n\nexport const threeKeyedLockEvaluator = ({\n  evalPrompt = \"Are there other items to process? If not, say 'done'\",\n  exitPrompt = \"Please provide a final summary of all actions taken.\",\n}: ThreeKeyedLockEvaluatorProps) =>\n  makeEvaluator(({ thread, complete }) => {\n    let isEvaluatingTools = true;\n    let nextMessageIsSummary = false;\n\n    const onTool = () => {\n      nextMessageIsSummary = false;\n      isEvaluatingTools = true;\n    };\n\n    const onResponse = () => {\n      // handle the first non-tool response\n      if (isEvaluatingTools) {\n        isEvaluatingTools = false;\n        nextMessageIsSummary = false;\n        thread.send(\n          new Message({\n            content: evalPrompt,\n          }),\n        );\n        return false;\n      }\n      if (!nextMessageIsSummary) {\n        nextMessageIsSummary = true;\n        thread.send(\n          new Message({\n            content: exitPrompt,\n          }),\n        );\n        return false;\n      }\n      cleanup();\n      complete(true);\n      return true;\n    };\n\n    // handle subsequent responses\n    thread.on(\"thread.response\", onResponse);\n\n    // re-enter tool running mode, event subscribers will be destroyed when evaluator is done\n    thread.on(\"tool.execution.started\", onTool);\n\n    // Cleanup function that will be called when the evaluator is done\n    const cleanup = () => {\n      thread.off(\"tool.execution.started\", onTool);\n      thread.off(\"thread.response\", onResponse);\n    };\n\n    // the first time this is called, it will be with the first response, so let's trigger it\n    onResponse();\n\n    // Return cleanup function\n    return cleanup;\n  });\n","import { z } from \"zod\";\nimport type { Agent } from \"../agent\";\nimport { makeEvaluator } from \"../evaluator\";\nimport { Tool } from \"../tool\";\n\ntype AgentToolEvaluatorProps = {\n  agent: Agent;\n  toolName: string;\n  description: string;\n  promptTemplate?: string;\n  parameters?: z.ZodTypeAny;\n  followUpMessage?: string;\n};\n\n/**\n * Creates an evaluator that allows one agent to use another agent as a tool.\n * This is useful for delegating specific tasks to specialized agents.\n *\n * @param props Configuration for the agent tool evaluator\n * @returns An evaluator function that integrates an agent as a tool\n */\nexport const agentToolEvaluator = ({\n  agent,\n  toolName,\n  description,\n  promptTemplate = \"{{input}}\",\n  parameters,\n  followUpMessage,\n}: AgentToolEvaluatorProps) =>\n  makeEvaluator(({ thread, complete }) => {\n    // Create a tool that wraps the agent\n    const agentTool = new Tool({\n      name: toolName,\n      description: description,\n      parameters:\n        parameters ||\n        z.object({\n          input: z.string().describe(\"The input to send to the agent\"),\n        }),\n      followUpMessage,\n      executeFn: async (args, _toolCall) => {\n        // Format the input using the template if needed\n        let prompt = \"\";\n\n        if (\"input\" in args && typeof args.input === \"string\") {\n          // Simple string input\n          prompt = promptTemplate.replace(\"{{input}}\", args.input);\n        } else {\n          // For more complex parameter schemas, serialize args to JSON and include in prompt\n          prompt = promptTemplate.replace(\"{{input}}\", JSON.stringify(args, null, 2));\n        }\n\n        // Create a new thread with the specialized agent\n        const agentThread = agent.createThread({\n          prompt,\n        });\n\n        try {\n          // Send the thread and wait for the response\n          const response = await agentThread.send();\n\n          // Get the last message from the thread\n          const lastMessage = response.last();\n\n          // Add this agent thread to the parent agent's memory\n          agent.closeThread(agentThread.id);\n\n          // Return the response content\n          return lastMessage?.content || \"No response from agent\";\n        } catch (error) {\n          console.error(`Error executing agent tool ${toolName}:`, error);\n          return `Error executing agent: ${error instanceof Error ? error.message : String(error)}`;\n        }\n      },\n    });\n\n    // Add the agent tool to the thread\n    thread.addTool(agentTool);\n\n    // No immediate action needed, just set up the tool\n    // The evaluator will be complete when the parent thread is done\n    complete(true);\n\n    // No cleanup needed\n    return undefined;\n  });\n","/**\n * Model drivers for connecting to different LLM providers.\n * @packageDocumentation\n */\n\nexport * from \"./gemini\";\nexport * from \"./cohere\";\nexport * from \"./openai\";\nexport * from \"./openai-compatible\";\nexport * from \"./xai\";\nexport * from \"./bedrock\";\nexport * from \"./cerebras\";\nexport * from \"./huggingface\";\nexport * from \"./groq\";\nexport * from \"./anthropic\";\n","/**\n * Implement a class that represents a Cohere AI client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\nimport { CohereClient } from \"cohere-ai\";\nimport { nanoid } from \"nanoid\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { Message, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport type { Tool } from \"../tool\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\n\n/**\n * Available Cohere models\n */\nexport type CohereModel =\n  | \"command-a-03-2025\"\n  | \"command-r7b-12-2024\"\n  | \"command-r-plus-08-2024\"\n  | \"command-r-plus-04-2024\"\n  | \"command-r-plus\"\n  | \"command-r-08-2024\"\n  | \"command-r-03-2024\"\n  | \"command-r\"\n  | \"command\"\n  | \"command-light\"\n  | \"command-light-nightly\";\n\n/**\n * Configuration options for the Cohere driver\n */\nexport interface CohereConfig {\n  /**\n   * Cohere API Key\n   */\n  apiKey?: string;\n\n  /**\n   * Model to use\n   * @default \"command-r-plus\"\n   */\n  model?: CohereModel;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Enable tracing for this driver\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n}\n\n/**\n * Cohere API token counting\n */\ninterface TokenCounting {\n  inputTokens: number;\n  outputTokens: number;\n  totalTokens: number;\n}\n\n/**\n * Represents a Cohere AI client and provides tools for converting messages to/from the LLM\n */\nexport class CohereThreadDriver extends BaseModelDriver {\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for Cohere API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    // Basic Cohere formatting - needs proper implementation\n    return messages.map((m) => ({\n      role: m.role === \"assistant\" ? \"CHATBOT\" : \"USER\",\n      message: m.content || \"\",\n    }));\n  }\n\n  /**\n   * Validate conversation for Cohere API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    _context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n\n    return {\n      isValid: errors.length === 0,\n      messages: formattedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Send processed messages to Cohere API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    return this.sendThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Stream processed messages to Cohere API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    return yield* this.streamThreadLegacy(thread, abortSignal);\n  }\n  /**\n   * Cohere API Client\n   */\n  private client: CohereClient;\n\n  /**\n   * Cohere model to use\n   */\n  private model: CohereModel | string;\n\n  /**\n   * Temperature for response generation\n   */\n  private temperature: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  private maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   */\n  private cache: boolean;\n\n  /**\n   * Returns a list of available Cohere models\n   */\n  static getAvailableModels(): CohereModel[] {\n    return [\n      \"command-a-03-2025\",\n      \"command-r7b-12-2024\",\n      \"command-r-plus-08-2024\",\n      \"command-r-plus-04-2024\",\n      \"command-r-plus\",\n      \"command-r-08-2024\",\n      \"command-r-03-2024\",\n      \"command-r\",\n      \"command\",\n      \"command-light\",\n      \"command-light-nightly\",\n    ];\n  }\n\n  /**\n   * Create a new Cohere driver\n   * @param config Configuration options\n   */\n  constructor(config?: CohereConfig) {\n    super();\n\n    // Get API Key from config or environment variable\n    const apiKey = config?.apiKey || process.env.COHERE_API_KEY;\n    if (!apiKey) {\n      throw new Error(\n        \"Cohere API Key must be provided in config or as COHERE_API_KEY environment variable\",\n      );\n    }\n\n    // Create base client\n    const baseClient = new CohereClient({ token: apiKey });\n\n    // Only wrap with tracing if trace is enabled\n    if (config?.trace ?? false) {\n      // Create a proxy around the Cohere client to intercept API calls\n      this.client = new Proxy(baseClient, {\n        get: (target, prop, receiver) => {\n          const value = Reflect.get(target, prop, receiver);\n          console.log(`[CohereTracer] Intercepted call to ${String(prop)} with value:`, value);\n          // Check if the property is a method we want to trace\n          if ((prop === \"chat\" || prop === \"chatStream\") && typeof value === \"function\") {\n            // Import traceable directly to avoid circular dependencies\n            const { traceable } = require(\"../tracing\");\n\n            return traceable(value.bind(target), {\n              run_type: \"llm\",\n              name: \"cohere\",\n              ...config?.traceMetadata,\n              aggregator: (args: any[], result: any) => {\n                // Extract the request parameters\n                const params = args[0] || {};\n\n                // For streaming responses (chatStream)\n                if (prop === \"chatStream\") {\n                  return {\n                    model: params.model,\n                    input: {\n                      message: params.message,\n                      chat_history: params.chat_history,\n                      temperature: params.temperature,\n                      max_tokens: params.max_tokens,\n                      tools: params.tools ? params.tools.length : 0,\n                    },\n                    streaming: true,\n                  };\n                }\n\n                // For standard chat responses\n                return {\n                  model: params.model,\n                  input: {\n                    message: params.message,\n                    chat_history: params.chat_history,\n                    temperature: params.temperature,\n                    max_tokens: params.max_tokens,\n                    tools: params.tools ? params.tools.length : 0,\n                  },\n                  output: result.text,\n                  metrics: result.meta?.billing_tokens\n                    ? {\n                        prompt_tokens: result.meta.billing_tokens.input_tokens,\n                        completion_tokens: result.meta.billing_tokens.output_tokens,\n                        total_tokens:\n                          result.meta.billing_tokens.input_tokens +\n                          result.meta.billing_tokens.output_tokens,\n                      }\n                    : undefined,\n                  tool_calls: result.tool_calls?.length,\n                };\n              },\n            });\n          }\n\n          return value;\n        },\n      });\n    } else {\n      this.client = baseClient;\n    }\n\n    // Set configuration options\n    this.model = config?.model || \"command-r-plus\";\n    this.temperature = config?.temperature ?? 0.7;\n    this.maxTokens = config?.maxTokens;\n    this.cache = config?.cache ?? false;\n  }\n\n  /**\n   * Send a thread to the LLM and get a response\n   * @param thread Thread to send\n   * @returns Updated thread with LLM response\n   */\n  public override async sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    return super.sendThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy send thread implementation\n   */\n  private async sendThreadLegacy(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    // Validate thread\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    // Calculate total content length to prevent exceeding limits\n    const totalContent = thread\n      .all()\n      .map((m) => m.content || \"\")\n      .join(\"\\n\");\n    if (totalContent.length > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content (${totalContent.length} characters) exceeds the maximum allowed (${MAX_PROMPT_CHARACTERS})`,\n      );\n    }\n\n    try {\n      const { messages, system } = this.convertMessagesToCohereFormat(thread);\n\n      if (messages.length === 0) {\n        throw new Error(\"No valid messages to send\");\n      }\n\n      // Create a safe last message\n      const lastMessage = messages[messages.length - 1];\n      if (!lastMessage) {\n        throw new Error(\"Failed to extract last message\");\n      }\n\n      // Define chat options with tool definitions if tools are provided\n      const chatOptions: any = {\n        message: lastMessage.message,\n        chat_history: messages.length > 1 ? messages.slice(0, -1) : [],\n        model: this.model,\n        temperature: this.temperature,\n      };\n\n      // Add optional parameters\n      if (system) {\n        chatOptions.preamble = system;\n      }\n\n      if (this.maxTokens) {\n        chatOptions.max_tokens = this.maxTokens;\n      }\n\n      // Add tools if provided\n      const tools = thread.getTools?.() || [];\n      if (tools.length > 0) {\n        chatOptions.tools = this.createToolDefinitions(tools);\n      }\n\n      // Send request to Cohere API\n      const response = await this.client.chat(chatOptions);\n\n      // Log debug information about token usage if available\n      if (response.meta && \"billing_tokens\" in response.meta) {\n        const billingTokens = response.meta.billing_tokens as any;\n        const tokens: TokenCounting = {\n          inputTokens: billingTokens.input_tokens,\n          outputTokens: billingTokens.output_tokens,\n          totalTokens: billingTokens.input_tokens + billingTokens.output_tokens,\n        };\n\n        this.debug(\"Cohere API usage metrics\", tokens);\n      }\n\n      // Create the assistant message from the response\n      const message = new Message({\n        role: \"assistant\",\n        content: response.text,\n        toolCalls: this.parseToolCalls(response),\n        cache: this.cache,\n      });\n\n      // Add the message to the thread\n      thread.push(message);\n\n      return thread;\n    } catch (error) {\n      this.error(error);\n      throw error;\n    }\n  }\n\n  /**\n   * Stream a thread to the LLM and get a streaming response\n   * @param thread Thread to send\n   * @returns AsyncGenerator yielding the stream and updated thread\n   */\n  public override async *streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    return yield* super.streamThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy stream thread implementation\n   */\n  private async *streamThreadLegacy(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Validate thread\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    // Calculate total content length to prevent exceeding limits\n    const totalContent = thread\n      .all()\n      .map((m) => m.content || \"\")\n      .join(\"\\n\");\n    if (totalContent.length > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content (${totalContent.length} characters) exceeds the maximum allowed (${MAX_PROMPT_CHARACTERS})`,\n      );\n    }\n\n    try {\n      const { messages, system } = this.convertMessagesToCohereFormat(thread);\n\n      if (messages.length === 0) {\n        throw new Error(\"No valid messages to send\");\n      }\n\n      // Create a safe last message\n      const lastMessage = messages[messages.length - 1];\n      if (!lastMessage) {\n        throw new Error(\"Failed to extract last message\");\n      }\n\n      // Define chat options with tool definitions if tools are provided\n      const chatOptions: any = {\n        message: lastMessage.message,\n        chat_history: messages.length > 1 ? messages.slice(0, -1) : [],\n        model: this.model,\n        temperature: this.temperature,\n      };\n\n      // Add optional parameters\n      if (system) {\n        chatOptions.preamble = system;\n      }\n\n      if (this.maxTokens) {\n        chatOptions.max_tokens = this.maxTokens;\n      }\n\n      // Add tools if provided\n      const tools = thread.getTools?.() || [];\n      if (tools.length > 0) {\n        chatOptions.tools = this.createToolDefinitions(tools);\n      }\n\n      // Create response message\n      const message = new Message({\n        role: \"assistant\",\n        content: \"\",\n        cache: this.cache,\n      });\n\n      // Stream generator to yield content chunks\n      const stream = this.createStreamGenerator(thread, chatOptions, message);\n\n      // First yield the stream and message\n      yield { stream, message };\n\n      // Add message to thread\n      thread.push(message);\n\n      // Then yield the final thread\n      return thread;\n    } catch (error) {\n      this.error(error);\n      throw error;\n    }\n  }\n\n  /**\n   * Create a stream generator for handling streaming responses\n   */\n  private createStreamGenerator(\n    thread: Thread,\n    chatOptions: any,\n    message: Message,\n  ): AsyncGenerator<string, void> {\n    return async function* (this: CohereThreadDriver) {\n      try {\n        // Initiate the streaming chat\n        const streamingResponse = await this.client.chatStream(chatOptions);\n\n        // Accumulate content for the message\n        let accumulatedContent = \"\";\n        const toolCalls: any[] = [];\n\n        // Process each chunk from the stream\n        for await (const chunk of streamingResponse) {\n          // If the chunk has text, yield it and update the message\n          if (chunk.eventType === \"text-generation\") {\n            const textChunk = chunk.text || \"\";\n            accumulatedContent += textChunk;\n\n            // Create new message instead of modifying the existing one\n            const updatedMessage = new Message({\n              role: \"assistant\",\n              content: accumulatedContent,\n              cache: message.cache,\n            });\n\n            // Replace message in thread (reference should be updated by caller)\n            const index = thread.all().indexOf(message);\n            if (index >= 0) {\n              thread.all()[index] = updatedMessage;\n            }\n\n            yield textChunk;\n          }\n\n          // If the chunk contains tool-call events (checking exact event type)\n          if (\n            chunk.eventType === \"tool-calls-generation\" ||\n            chunk.eventType === \"tool-calls-chunk\"\n          ) {\n            // Safely handle tools property with type checking\n            const anyChunk = chunk as any; // Cast to any to bypass type checking\n            if (anyChunk.tools && Array.isArray(anyChunk.tools)) {\n              toolCalls.push(anyChunk.tools);\n            }\n          }\n\n          // Update token metrics if available\n          if (\n            chunk.eventType === \"stream-end\" &&\n            chunk.response?.meta &&\n            \"billing_tokens\" in chunk.response.meta\n          ) {\n            const billingTokens = chunk.response.meta.billing_tokens as any;\n            const tokens: TokenCounting = {\n              inputTokens: billingTokens.input_tokens,\n              outputTokens: billingTokens.output_tokens,\n              totalTokens: billingTokens.input_tokens + billingTokens.output_tokens,\n            };\n\n            this.debug(\"Cohere API usage metrics\", tokens);\n          }\n        }\n\n        // Process tool calls if any were returned\n        if (toolCalls.length > 0) {\n          // Format tool calls for the message\n          const formattedToolCalls = toolCalls.flatMap((toolCall) => {\n            return toolCall.map((tool: any) => ({\n              name: tool.name,\n              toolUseId: nanoid(),\n              arguments: JSON.parse(tool.input || \"{}\"),\n            }));\n          });\n\n          // Create final message with both content and tool calls\n          const finalMessage = new Message({\n            role: \"assistant\",\n            content: accumulatedContent,\n            toolCalls: formattedToolCalls,\n            cache: message.cache,\n          });\n\n          // Replace message in thread\n          const index = thread.all().indexOf(message);\n          if (index >= 0) {\n            thread.all()[index] = finalMessage;\n          }\n        }\n      } catch (error) {\n        this.error(error);\n        throw error;\n      }\n    }.bind(this)();\n  }\n\n  /**\n   * Convert a thread's messages to Cohere's API format\n   * @param thread Thread to convert\n   * @returns Object containing messages array and optional system message\n   */\n  private convertMessagesToCohereFormat(thread: Thread): {\n    messages: { role: string; message: string }[];\n    system?: string;\n  } {\n    const threadMessages = thread.all();\n    const formattedMessages: { role: string; message: string }[] = [];\n    let systemMessage: string | undefined;\n\n    // Process each message in the thread\n    for (const threadMsg of threadMessages) {\n      // Skip undefined content\n      if (threadMsg.content === undefined) {\n        continue;\n      }\n\n      // Handle system message (Cohere uses preamble for system messages)\n      if (threadMsg.role === \"system\") {\n        systemMessage = threadMsg.content;\n        continue;\n      }\n\n      // Determine message role\n      let role: string;\n      if (threadMsg.role === \"user\") {\n        role = \"USER\";\n      } else if (threadMsg.role === \"assistant\") {\n        role = \"CHATBOT\";\n      } else {\n        // Skip unknown roles\n        continue;\n      }\n\n      // Create message content, merging tool results if present\n      let message = threadMsg.content;\n\n      // Add tool results content if present\n      if (threadMsg.toolResults && threadMsg.toolResults.length > 0) {\n        const resultContent = threadMsg.toolResults\n          .map((result) => {\n            return `Tool result for ${result.name}:\\n${JSON.stringify(result.result)}`;\n          })\n          .join(\"\\n\\n\");\n\n        message = message ? `${message}\\n\\n${resultContent}` : resultContent;\n      }\n\n      formattedMessages.push({ role, message });\n    }\n\n    return { messages: formattedMessages, system: systemMessage };\n  }\n\n  /**\n   * Create tool definitions from thread tools\n   * @param tools Tools to convert\n   * @returns Array of tool definitions for Cohere API\n   */\n  private createToolDefinitions(tools: Tool[]): any[] {\n    if (!tools || tools.length === 0) {\n      return [];\n    }\n\n    return tools.map((tool) => {\n      // Get schema as object\n      const schema = zodToJsonSchema(tool.getParameters());\n\n      // Cast schema to any to safely access properties\n      const schemaObj: any = schema;\n      const parameters = schemaObj.properties || {};\n\n      return {\n        name: tool.getName(),\n        description: tool.getDescription(),\n        parameter_definitions: parameters,\n      };\n    });\n  }\n\n  /**\n   * Parse tool calls from Cohere API response\n   * @param response Cohere API response\n   * @returns Array of tool calls if present\n   */\n  private parseToolCalls(response: any): ToolCall[] | undefined {\n    // Check if the response has tool calls\n    if (!response.tool_calls || response.tool_calls.length === 0) {\n      return undefined;\n    }\n\n    // Map tool calls to the internal format\n    return response.tool_calls.map((toolCall: any) => {\n      let args = {};\n\n      // Safely parse parameters\n      if (toolCall.parameters) {\n        try {\n          // Handle if parameters is already an object\n          if (typeof toolCall.parameters === \"object\") {\n            args = toolCall.parameters;\n          } else {\n            // Try to parse if it's a string\n            args = JSON.parse(toolCall.parameters);\n          }\n        } catch (e) {\n          this.error(`Failed to parse tool call parameters: ${e}`);\n          // Return empty object on error\n          args = {};\n        }\n      }\n\n      return {\n        name: toolCall.name,\n        toolUseId: nanoid(),\n        arguments: args,\n      };\n    });\n  }\n}\n","/**\n * xAI Grok API driver implementation\n * Uses OpenAI-compatible API format with xAI-specific models and endpoints\n */\n\nimport type OpenAI from \"openai\";\nimport type { Message } from \"../message\";\nimport type {\n  MessageProcessingContext,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport { createValidationError, createValidationWarning } from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport {\n  type OpenAICompatibleConfig,\n  OpenAICompatibleDriver,\n  type OpenAICompatibleResponseSchema,\n} from \"./openai-compatible\";\n\n/**\n * Available xAI Grok models\n */\nexport type XaiModel = \"grok-4-0709\" | \"grok-beta\" | \"grok-3\" | \"grok-3-mini\";\n\n/**\n * Configuration options for the xAI driver\n */\nexport interface XaiConfig extends Omit<OpenAICompatibleConfig, \"baseUrl\" | \"providerName\"> {\n  /**\n   * xAI API Key (can also be set via XAI_API_KEY environment variable)\n   */\n  apiKey?: string;\n\n  /**\n   * Grok model to use\n   * @default \"grok-4-0709\"\n   */\n  model?: XaiModel;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Whether to enable tracing\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Schema for structured output\n   */\n  responseSchema?: OpenAICompatibleResponseSchema;\n}\n\n/**\n * xAI Grok API driver\n * Provides access to Grok models through xAI's OpenAI-compatible API\n */\nexport class XaiThreadDriver extends OpenAICompatibleDriver {\n  /**\n   * Returns a list of available xAI Grok models\n   */\n  static getAvailableModels(): XaiModel[] {\n    return [\"grok-4-0709\", \"grok-beta\", \"grok-3\", \"grok-3-mini\"];\n  }\n\n  /**\n   * Create a new xAI Grok driver\n   * @param config Configuration options\n   */\n  constructor(config: XaiConfig = {}) {\n    super({\n      ...config,\n      baseUrl: \"https://api.x.ai/v1\",\n      providerName: \"xai\",\n      model: config.model || \"grok-4-0709\",\n    });\n  }\n\n  /**\n   * Get the default API key from XAI_API_KEY environment variable\n   */\n  protected getDefaultApiKey(): string | undefined {\n    return process.env.XAI_API_KEY;\n  }\n\n  /**\n   * Get the default model for xAI (Grok-4)\n   */\n  protected getDefaultModel(): string {\n    return \"grok-4-0709\";\n  }\n\n  /**\n   * Get rate limit information for xAI API\n   * xAI has more restrictive rate limits than OpenAI:\n   * - 1 request per second\n   * - 60-1200 requests per hour (depending on model)\n   */\n  static getRateLimits() {\n    return {\n      requestsPerSecond: 1,\n      requestsPerHour: {\n        \"grok-4-0709\": 60,\n        \"grok-beta\": 60,\n        \"grok-3\": 1200,\n        \"grok-3-mini\": 1200,\n      },\n    };\n  }\n\n  /**\n   * Get pricing information for xAI models\n   * Pricing in USD per 1M tokens\n   */\n  static getPricing() {\n    return {\n      \"grok-4-0709\": {\n        input: 3.0, // $3.00 per 1M input tokens\n        output: 15.0, // $15.00 per 1M output tokens\n        cached: 0.75, // $0.75 per 1M cached input tokens\n      },\n      \"grok-beta\": {\n        input: 3.0,\n        output: 15.0,\n        cached: 0.75,\n      },\n      \"grok-3\": {\n        input: 1.5, // Assuming lower pricing for Grok-3\n        output: 7.5,\n        cached: 0.375,\n      },\n      \"grok-3-mini\": {\n        input: 0.5, // Assuming much lower pricing for mini model\n        output: 2.5,\n        cached: 0.125,\n      },\n    };\n  }\n\n  /**\n   * Check if the current model supports vision/image inputs\n   */\n  supportsVision(): boolean {\n    // Grok-4 and Grok-beta support vision, others may not\n    const visionModels: XaiModel[] = [\"grok-4-0709\", \"grok-beta\"];\n    return visionModels.includes(this.model as XaiModel);\n  }\n\n  /**\n   * Check if the current model supports structured outputs\n   */\n  supportsStructuredOutput(): boolean {\n    // All Grok models should support structured outputs via OpenAI-compatible API\n    return true;\n  }\n\n  /**\n   * Check if the current model supports function calling\n   */\n  supportsFunctionCalling(): boolean {\n    // All Grok models support function calling\n    return true;\n  }\n\n  /**\n   * Get model-specific capabilities and limitations\n   */\n  getModelInfo(): {\n    model: string;\n    supportsVision: boolean;\n    supportsStructuredOutput: boolean;\n    supportsFunctionCalling: boolean;\n    maxTokens: number;\n    contextWindow: number;\n  } {\n    const modelCapabilities = {\n      \"grok-4-0709\": {\n        maxTokens: 8192,\n        contextWindow: 128000,\n        supportsVision: true,\n      },\n      \"grok-beta\": {\n        maxTokens: 8192,\n        contextWindow: 128000,\n        supportsVision: true,\n      },\n      \"grok-3\": {\n        maxTokens: 8192,\n        contextWindow: 128000,\n        supportsVision: false,\n      },\n      \"grok-3-mini\": {\n        maxTokens: 4096,\n        contextWindow: 32000,\n        supportsVision: false,\n      },\n    };\n\n    const capabilities =\n      modelCapabilities[this.model as XaiModel] || modelCapabilities[\"grok-4-0709\"];\n\n    return {\n      model: this.model,\n      supportsVision: capabilities.supportsVision,\n      supportsStructuredOutput: this.supportsStructuredOutput(),\n      supportsFunctionCalling: this.supportsFunctionCalling(),\n      maxTokens: capabilities.maxTokens,\n      contextWindow: capabilities.contextWindow,\n    };\n  }\n\n  /**\n   * Format messages for the XAI API with specific validations\n   * Overrides the base implementation to ensure XAI API requirements are met\n   */\n  protected override formatMessagesForProvider(\n    messages: Message[],\n  ): OpenAI.Chat.ChatCompletionMessageParam[] {\n    const formattedMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [];\n\n    for (const message of messages) {\n      if (message.role === \"user\") {\n        const content: OpenAI.Chat.ChatCompletionContentPart[] = [];\n\n        // Add text content - ensure we have some content\n        if (message.content && message.content.trim()) {\n          content.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add image attachments\n        if (message.attachments) {\n          for (const attachment of message.attachments) {\n            if (attachment.type === \"image\" && attachment.source.uri) {\n              content.push({\n                type: \"image_url\",\n                image_url: {\n                  url: attachment.source.uri,\n                  detail: \"auto\",\n                },\n              });\n            }\n          }\n        }\n\n        // XAI requires at least one content element for user messages\n        if (content.length === 0) {\n          // Provide a minimal text content if nothing else is available\n          content.push({\n            type: \"text\",\n            text: \" \", // Single space as minimal content\n          });\n        }\n\n        formattedMessages.push({\n          role: \"user\",\n          content:\n            content.length === 1 && content[0]?.type === \"text\"\n              ? (content[0] as OpenAI.Chat.ChatCompletionContentPartText).text\n              : content,\n        });\n      } else if (message.role === \"assistant\") {\n        const assistantMessage: OpenAI.Chat.ChatCompletionAssistantMessageParam = {\n          role: \"assistant\",\n          // XAI requires non-null content for assistant messages, even with tool calls\n          content: message.content || null,\n        };\n\n        if (message.toolCalls && message.toolCalls.length > 0) {\n          assistantMessage.tool_calls = message.toolCalls.map((toolCall) => ({\n            id: toolCall.toolUseId,\n            type: \"function\",\n            function: {\n              name: toolCall.name,\n              arguments: JSON.stringify(toolCall.arguments),\n            },\n          }));\n        }\n\n        formattedMessages.push(assistantMessage);\n      } else if (message.toolResults && message.toolResults.length > 0) {\n        // Handle tool results (these are created from user messages with toolResults)\n        // First add the user message if it has content\n        if (message.content && message.content.trim()) {\n          formattedMessages.push({\n            role: \"user\",\n            content: message.content,\n          });\n        }\n\n        // Then add each tool result as a separate message with XAI validation\n        for (const toolResult of message.toolResults) {\n          const toolResultContent = toolResult.error\n            ? JSON.stringify({ error: toolResult.error })\n            : JSON.stringify(toolResult.result);\n\n          // Ensure content is not empty for XAI API\n          const finalContent =\n            toolResultContent && toolResultContent.trim() !== '\"\"' && toolResultContent !== \"null\"\n              ? toolResultContent\n              : JSON.stringify({ result: \"Tool execution completed\" });\n\n          formattedMessages.push({\n            role: \"tool\",\n            tool_call_id: toolResult.toolUseId,\n            content: finalContent,\n          });\n        }\n      } else if (message.role === \"system\") {\n        formattedMessages.push({\n          role: \"system\",\n          content: message.content || \"\",\n        });\n      }\n    }\n\n    return formattedMessages;\n  }\n\n  /**\n   * XAI-specific validation and auto-repair\n   * Override the base implementation to add XAI-specific requirements\n   */\n  protected override async performAdditionalValidation(\n    messages: OpenAI.Chat.ChatCompletionMessageParam[],\n    context: MessageProcessingContext,\n  ): Promise<{\n    messages?: OpenAI.Chat.ChatCompletionMessageParam[];\n    errors: ValidationError[];\n    warnings: ValidationWarning[];\n    repairsApplied: string[];\n  }> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n    const processedMessages = [...messages];\n\n    // XAI-specific validations\n    for (let i = 0; i < processedMessages.length; i++) {\n      const message = processedMessages[i];\n      if (!message) continue;\n\n      // 1. XAI requires non-empty content for user messages (even with attachments)\n      if (message.role === \"user\") {\n        const hasTextContent =\n          typeof message.content === \"string\"\n            ? message.content.trim().length > 0\n            : Array.isArray(message.content) &&\n              message.content.some((part) => part.type === \"text\" && (part as any).text?.trim());\n\n        if (!hasTextContent) {\n          if (context.enableAutoRepair) {\n            // Auto-repair: Ensure user messages have text content\n            if (typeof message.content === \"string\") {\n              message.content = message.content.trim() || \" \"; // Single space as minimal content\n            } else if (Array.isArray(message.content)) {\n              const hasText = message.content.some((part) => part.type === \"text\");\n              if (!hasText) {\n                message.content.unshift({\n                  type: \"text\",\n                  text: \" \", // Single space as minimal content\n                });\n              }\n            }\n            repairsApplied.push(`Added minimal text content to user message at index ${i}`);\n            warnings.push(\n              createValidationWarning(\n                \"xai_empty_user_content_repaired\",\n                \"XAI requires non-empty text content for user messages\",\n                { index: i, suggestedFix: \"Provide meaningful text content for user messages\" },\n              ),\n            );\n          } else {\n            errors.push(\n              createValidationError(\n                \"xai_empty_user_content\",\n                \"XAI API requires non-empty text content for user messages\",\n                { index: i, severity: \"error\" },\n              ),\n            );\n          }\n        }\n      }\n\n      // 2. XAI requires proper content format for assistant messages\n      if (message && message.role === \"assistant\") {\n        const assistantMessage = message as OpenAI.Chat.ChatCompletionAssistantMessageParam;\n\n        // XAI requires content to be non-null (can be empty string, but not null/undefined)\n        if (assistantMessage.content === null || assistantMessage.content === undefined) {\n          if (context.enableAutoRepair) {\n            assistantMessage.content = assistantMessage.tool_calls ? null : \"\"; // null is OK with tool calls\n            repairsApplied.push(`Fixed null content for assistant message at index ${i}`);\n          } else {\n            warnings.push(\n              createValidationWarning(\n                \"xai_null_assistant_content\",\n                \"Assistant message has null/undefined content\",\n                { index: i },\n              ),\n            );\n          }\n        }\n      }\n\n      // 3. XAI-specific tool result validation (ensure non-empty, non-null content)\n      if (message && message.role === \"tool\") {\n        const toolMessage = message as OpenAI.Chat.ChatCompletionToolMessageParam;\n        const isEmpty =\n          !toolMessage.content ||\n          (typeof toolMessage.content === \"string\" && toolMessage.content.trim() === \"\") ||\n          toolMessage.content === \"null\" ||\n          toolMessage.content === '\"\"';\n\n        if (isEmpty && context.enableAutoRepair) {\n          // Auto-repair: Provide meaningful tool result content\n          toolMessage.content = JSON.stringify({\n            result: \"Tool execution completed\",\n            tool_call_id: toolMessage.tool_call_id,\n          });\n          repairsApplied.push(`Added default content to empty tool result at index ${i}`);\n          warnings.push(\n            createValidationWarning(\n              \"xai_empty_tool_result_repaired\",\n              \"Empty tool result was given default content for XAI compatibility\",\n              { index: i },\n            ),\n          );\n        } else if (isEmpty) {\n          errors.push(\n            createValidationError(\n              \"xai_empty_tool_result\",\n              \"XAI API requires non-empty content for tool result messages\",\n              { index: i, severity: \"error\" },\n            ),\n          );\n        }\n      }\n    }\n\n    // 4. Check for XAI model-specific limitations\n    const modelInfo = this.getModelInfo();\n\n    // Vision model validation\n    if (!modelInfo.supportsVision) {\n      for (let i = 0; i < processedMessages.length; i++) {\n        const message = processedMessages[i];\n        if (message && message.role === \"user\" && Array.isArray(message.content)) {\n          const hasImages = message.content.some((part) => part.type === \"image_url\");\n          if (hasImages) {\n            if (context.enableAutoRepair) {\n              // Auto-repair: Remove images for non-vision models\n              message.content = message.content.filter((part) => part.type !== \"image_url\") as any;\n              repairsApplied.push(`Removed image attachments for non-vision model ${this.model}`);\n              warnings.push(\n                createValidationWarning(\n                  \"xai_images_removed_non_vision\",\n                  `Images removed - ${this.model} does not support vision`,\n                  { index: i },\n                ),\n              );\n            } else {\n              errors.push(\n                createValidationError(\n                  \"xai_unsupported_vision\",\n                  `Model ${this.model} does not support vision inputs`,\n                  { index: i, severity: \"error\" },\n                ),\n              );\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      messages: processedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Legacy method for backward compatibility\n   * @deprecated Use formatMessagesForProvider instead\n   */\n  protected override formatMessagesForAPI(\n    thread: Thread,\n  ): OpenAI.Chat.ChatCompletionMessageParam[] {\n    return this.formatMessagesForProvider(thread.all());\n  }\n}\n","/**\n * Implement a class that represents a Bedrock client and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n */\n\nimport {\n  type Message as BedrockMessage,\n  BedrockRuntimeClient,\n  type ContentBlock,\n  ConverseCommand,\n  type ConverseCommandInput,\n  type ConverseResponse,\n  type DocumentBlock,\n  type ImageBlock,\n  InvokeModelWithResponseStreamCommand,\n  type SystemContentBlock,\n  type ToolResultBlock,\n  type ToolUseBlock,\n  type VideoBlock,\n} from \"@aws-sdk/client-bedrock-runtime\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { type Attachment, Message, type MessageRole, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\nconst DEFAULT_MODEL = \"anthropic.claude-3-haiku-20240307-v1:0\";\nconst MAX_PROMPT_CHARACTERS = 320_000;\nconst CACHE_POINT_ENABLED = false;\n\n/**\n * Available Bedrock model options\n */\nexport type BedrockModel =\n  // Anthropic Claude Models\n  | \"anthropic.claude-3-haiku-20240307-v1:0\"\n  | \"anthropic.claude-3-sonnet-20240229-v1:0\"\n  | \"anthropic.claude-3-opus-20240229-v1:0\"\n  | \"anthropic.claude-instant-v1\"\n  | \"anthropic.claude-v2\"\n  | \"anthropic.claude-v2:1\"\n\n  // Amazon Titan Models\n  | \"amazon.titan-text-lite-v1\"\n  | \"amazon.titan-text-express-v1\"\n  | \"amazon.titan-text-premier-v1\"\n  | \"amazon.titan-embed-text-v1\"\n  | \"amazon.titan-embed-image-v1\"\n  | \"amazon.titan-image-generator-v1\"\n\n  // AI21 Labs Models\n  | \"ai21.j2-mid-v1\"\n  | \"ai21.j2-ultra-v1\"\n  | \"ai21.jamba-instruct-v1:0\"\n\n  // Cohere Models\n  | \"cohere.command-text-v14\"\n  | \"cohere.command-light-text-v14\"\n  | \"cohere.embed-english-v3\"\n  | \"cohere.embed-multilingual-v3\"\n\n  // Meta Models\n  | \"meta.llama2-13b-chat-v1\"\n  | \"meta.llama2-70b-chat-v1\"\n  | \"meta.llama3-8b-instruct-v1:0\"\n  | \"meta.llama3-70b-instruct-v1:0\"\n\n  // Stability AI Models\n  | \"stability.stable-diffusion-xl-v1\"\n  | \"stability.stable-diffusion-xl-v0\"\n\n  // Other models or custom model IDs\n  | string;\n\nexport interface BedrockConfig {\n  model?: BedrockModel;\n  temperature?: number;\n  maxTokens?: number;\n  cache?: boolean;\n  client?: BedrockRuntimeClient;\n  trace?: boolean;\n  traceMetadata?: Record<string, unknown>;\n  reasoning_config?: Record<string, any>;\n}\n\nexport class BedrockThreadDriver extends BaseModelDriver {\n  private readonly decoder = new TextDecoder();\n  private readonly client: BedrockRuntimeClient;\n  private readonly cache: boolean;\n  private readonly model: BedrockModel;\n  private readonly temperature: number;\n  private readonly maxTokens: number;\n  private readonly reasoning_config?: Record<string, any>;\n\n  constructor(config: BedrockConfig = {}) {\n    super();\n    if (\n      !config.client &&\n      (!process.env[\"AWS_ACCESS_KEY_ID\"] ||\n        !process.env[\"AWS_SECRET_ACCESS_KEY\"] ||\n        !process.env[\"AWS_REGION\"])\n    ) {\n      throw new Error(\n        \"AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_REGION environment variables must be set\",\n      );\n    }\n\n    let baseClient: BedrockRuntimeClient;\n\n    if (config.client) {\n      baseClient = config.client;\n    } else {\n      const accessKeyId = process.env[\"AWS_ACCESS_KEY_ID\"];\n      const secretAccessKey = process.env[\"AWS_SECRET_ACCESS_KEY\"];\n      const region = process.env[\"AWS_REGION\"];\n\n      if (!accessKeyId || !secretAccessKey || !region) {\n        throw new Error(\"AWS credentials not properly configured\");\n      }\n\n      baseClient = new BedrockRuntimeClient({\n        region,\n        credentials: {\n          accessKeyId,\n          secretAccessKey,\n        },\n      });\n    }\n\n    // Only wrap with tracing if trace is enabled (default to false)\n    if (config.trace ?? false) {\n      this.client = new Proxy(baseClient, {\n        get: (target: BedrockRuntimeClient, prop: string | symbol, receiver) => {\n          const originalValue = target[prop as keyof typeof target];\n\n          if (prop === \"send\" && typeof originalValue === \"function\") {\n            return traceable(originalValue.bind(target), {\n              run_type: \"llm\",\n              name: \"bedrock\",\n              ...config.traceMetadata,\n              aggregator: (args: any[]) => {\n                const command = args[0] as ConverseCommand;\n                const response = args[1] as ConverseResponse;\n                return {\n                  model: this.model,\n                  input: {\n                    messages: command.input.messages,\n                    system: command.input.system,\n                    inferenceConfig: command.input.inferenceConfig,\n                  },\n                  content: response.output?.message?.content,\n                  metrics: response.metrics,\n                  stopReason: response.stopReason,\n                };\n              },\n            });\n          }\n\n          return Reflect.get(target, prop, receiver);\n        },\n      }) as BedrockRuntimeClient;\n    } else {\n      this.client = baseClient;\n    }\n\n    this.model = config.model || DEFAULT_MODEL;\n    this.temperature = config.temperature || 0.7;\n    this.maxTokens = config.maxTokens || 4096;\n    this.cache = config.cache || false;\n    this.reasoning_config = config.reasoning_config;\n  }\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for Bedrock API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    // Use existing conversion logic\n    return this.convertMessagesToBedrockFormat(messages).messages;\n  }\n\n  /**\n   * Validate conversation for Bedrock API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    _context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n\n    // Basic Bedrock validation\n    return {\n      isValid: errors.length === 0,\n      messages: formattedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Send processed messages to Bedrock API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    return this.sendThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Stream processed messages to Bedrock API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    return yield* this.streamThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Convert attachments to Bedrock content blocks\n   */\n  private convertAttachmentsToContentBlocks(attachments: Attachment[]): ContentBlock[] {\n    return attachments.map((attachment): ContentBlock => {\n      switch (attachment.type) {\n        case \"image\":\n          return {\n            image: {\n              format: attachment.format,\n              source: attachment.source,\n            } as ImageBlock,\n          };\n        case \"document\":\n          return {\n            document: {\n              format: attachment.format,\n              name: attachment.name,\n              source: attachment.source,\n            } as DocumentBlock,\n          };\n        case \"video\":\n          return {\n            video: {\n              format: attachment.format,\n              source: attachment.source,\n            } as VideoBlock,\n          };\n      }\n    });\n  }\n\n  /**\n   * Convert thread messages to Bedrock format, separating system messages\n   */\n  private convertMessagesToBedrockFormat(messages: Message[]): {\n    messages: BedrockMessage[];\n    system: SystemContentBlock[];\n  } {\n    const systemMessages: SystemContentBlock[] = [];\n    const conversationMessages: BedrockMessage[] = [];\n\n    // Find the last non-system message and system message with cache true\n    const lastCacheMessage = messages.find((message) => message.cache && message.role !== \"system\");\n    const lastSystemCacheMessage = messages.find(\n      (message) => message.cache && message.role === \"system\",\n    );\n\n    messages.forEach((message) => {\n      if (message.role === \"system\") {\n        systemMessages.push({\n          text: message.content || \"\",\n        });\n        if (message === lastSystemCacheMessage && CACHE_POINT_ENABLED) {\n          systemMessages.push({\n            cachePoint: {\n              type: \"default\",\n            },\n          } as any);\n        }\n        return;\n      }\n\n      const contentBlocks: ContentBlock[] = [];\n\n      if (message.content && !message.toolResults?.length) {\n        contentBlocks.push({ text: message.content });\n      }\n\n      // Add tool calls if present\n      if (message.toolCalls?.length > 0) {\n        contentBlocks.push(\n          ...message.toolCalls.map(\n            (call): ContentBlock => ({\n              toolUse: {\n                toolUseId: call.toolUseId,\n                name: call.name,\n                input: call.arguments,\n              } as ToolUseBlock,\n            }),\n          ),\n        );\n      }\n\n      // Add tool results if present\n      if (message.toolResults?.length > 0) {\n        contentBlocks.push(\n          ...message.toolResults.map(\n            (result): ContentBlock => ({\n              toolResult: {\n                toolUseId: result.toolUseId,\n                content: [\n                  {\n                    text: JSON.stringify(result.result || result.error),\n                  },\n                ],\n                status: result.error ? \"error\" : \"success\",\n              } as ToolResultBlock,\n            }),\n          ),\n        );\n\n        if (message.content) {\n          contentBlocks.push({ text: message.content });\n        }\n      }\n\n      // Add attachment content blocks if present\n      if (message.attachments.length > 0) {\n        contentBlocks.push(...this.convertAttachmentsToContentBlocks(message.attachments));\n      }\n\n      // Add cache point if this is the last cache message\n      if (message === lastCacheMessage && CACHE_POINT_ENABLED) {\n        contentBlocks.push({\n          cachePoint: {\n            type: \"default\",\n          },\n        } as any);\n      }\n\n      conversationMessages.push({\n        role: message.role === \"tool\" ? \"user\" : message.role,\n        content: contentBlocks,\n      });\n    });\n\n    return {\n      messages: conversationMessages,\n      system: systemMessages,\n    };\n  }\n\n  /**\n   * Parse tool calls from the LLM response content blocks\n   */\n  private parseToolCalls(content: ContentBlock[]): ToolCall[] {\n    return content.reduce<ToolCall[]>((acc, block) => {\n      if (\n        \"toolUse\" in block &&\n        block.toolUse &&\n        typeof block.toolUse.name === \"string\" &&\n        block.toolUse.input &&\n        block.toolUse.toolUseId\n      ) {\n        try {\n          acc.push({\n            name: block.toolUse.name,\n            toolUseId: block.toolUse.toolUseId,\n            arguments: block.toolUse.input as Record<string, any>,\n          });\n        } catch (error) {\n          console.error(`Failed to parse tool call input: ${block.toolUse.input}`);\n        }\n      }\n      return acc;\n    }, []);\n  }\n\n  /**\n   * Send the thread state to the LLM and process the response\n   */\n  public override async sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    // Use the new message processing pipeline\n    return super.sendThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy send thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async sendThreadLegacy(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    const messages = thread.all();\n    if (messages.length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    const totalContent = messages.map((m) => m.content).join(\"\\n\");\n    if (totalContent.length > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\"The thread content is too long\");\n    }\n\n    try {\n      const { messages: bedrockMessages, system } = this.convertMessagesToBedrockFormat(messages);\n\n      const tools = thread.getTools();\n\n      const toolConfig = tools.map((tool) => ({\n        toolSpec: {\n          name: tool.getName(),\n          description: tool.getDescription(),\n          inputSchema: {\n            json: zodToJsonSchema(tool.getParameters()),\n          },\n        },\n      })) as any[]; // Type assertion to resolve AWS SDK type mismatch\n\n      const input: ConverseCommandInput = {\n        modelId: this.model,\n        messages: bedrockMessages,\n        system,\n        inferenceConfig: {\n          maxTokens: this.maxTokens,\n          temperature: this.temperature,\n        },\n        ...(this.reasoning_config\n          ? {\n              additionalModelRequestFields: {\n                reasoning_config: this.reasoning_config,\n              },\n            }\n          : {}),\n        ...(tools.length > 0\n          ? {\n              toolConfig: {\n                tools: toolConfig,\n                ...(thread.toolChoice === \"any\" ? { toolChoice: { any: {} } } : {}),\n                ...(thread.toolChoice === \"auto\" ? { toolChoice: { auto: {} } } : {}),\n              },\n            }\n          : {}),\n      };\n\n      const command = new ConverseCommand(input);\n      const response = (await this.client.send(command)) as ConverseResponse;\n\n      if (!response.output?.message?.content) {\n        throw new Error(\"No response received from Bedrock\");\n      }\n\n      const responseContent = response.output.message.content;\n      const responseText = responseContent\n        .filter((c) => \"text\" in c && c.text)\n        .map((c) => c.text)\n        .join(\"\\n\");\n      const reasoning = responseContent\n        .filter((c) => \"reasoningContent\" in c)\n        .map((c: any) => c?.reasoningContent?.reasoningText);\n\n      const responseMessage = new Message({\n        content: responseText,\n        reasoning,\n        role: \"assistant\" as MessageRole,\n        toolCalls: this.parseToolCalls(responseContent),\n        cache: this.cache,\n      });\n\n      thread.push(responseMessage);\n\n      // Log usage metrics if available\n      if (response.usage) {\n        this.debug(\"Bedrock usage metrics\", {\n          inputTokens: response.usage.inputTokens,\n          outputTokens: response.usage.outputTokens,\n          totalTokens: response.usage.totalTokens,\n        });\n      }\n\n      return thread;\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n      this.error(`Failed to send thread: ${errorMessage} (thread length: ${thread.all().length})`);\n      throw error;\n    }\n  }\n\n  /**\n   * Stream the thread state to the LLM and process the response chunk by chunk\n   */\n  public override async *streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Use the new message processing pipeline\n    return yield* super.streamThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy stream thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async *streamThreadLegacy(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    this.validateThread(thread);\n    this.checkAbortSignal(abortSignal);\n\n    try {\n      const { formattedMessages, systemMessage } = this.formatMessagesForStreaming(thread.all());\n      const input = this.createStreamingInput(formattedMessages, systemMessage);\n\n      this.debug(\"Streaming request:\", JSON.parse(input.body));\n\n      const command = new InvokeModelWithResponseStreamCommand(input);\n      const response = await this.client.send(command);\n\n      if (!response.body) {\n        throw new Error(\"No response stream received from Bedrock\");\n      }\n\n      const initialMessage = new Message({\n        content: \"\",\n        role: \"assistant\",\n        toolCalls: [],\n        cache: this.cache,\n      });\n\n      const stream = this.createStreamProcessor(response.body, initialMessage);\n      yield { stream, message: initialMessage };\n\n      thread.push(initialMessage);\n      return thread;\n    } catch (error) {\n      const errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n      this.error(\n        `Failed to stream thread: ${errorMessage} (thread length: ${thread.all().length})`,\n      );\n      throw error;\n    }\n  }\n\n  /**\n   * Validate thread content length and emptiness\n   */\n  private validateThread(thread: Thread): void {\n    const messages = thread.all();\n    if (messages.length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    const totalContent = messages.map((m) => m.content).join(\"\\n\");\n    if (totalContent.length > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\"The thread content is too long\");\n    }\n  }\n\n  /**\n   * Format messages for streaming request\n   */\n  private formatMessagesForStreaming(messages: Message[]): {\n    formattedMessages: { role: string; content: { type: string; text: string }[] }[];\n    systemMessage: string | undefined;\n  } {\n    const formattedMessages = messages\n      .filter((msg) => msg.role !== \"system\")\n      .map((msg) => ({\n        role: msg.role === \"tool\" ? \"user\" : msg.role,\n        content: msg.content ? [{ type: \"text\", text: msg.content }] : [],\n      }));\n\n    const systemMessage = messages.find((msg) => msg.role === \"system\")?.content;\n\n    return { formattedMessages, systemMessage };\n  }\n\n  /**\n   * Create streaming request input\n   */\n  private createStreamingInput(formattedMessages: any[], systemMessage?: string) {\n    return {\n      modelId: this.model,\n      contentType: \"application/json\",\n      accept: \"application/json\",\n      body: JSON.stringify({\n        anthropic_version: \"bedrock-2023-05-31\",\n        messages: formattedMessages,\n        ...(systemMessage ? { system: systemMessage } : {}),\n        max_tokens: this.maxTokens,\n        temperature: this.temperature,\n      }),\n    };\n  }\n\n  /**\n   * Process a single chunk from the Bedrock stream\n   */\n  private processStreamChunk(\n    chunk: { chunk?: { bytes?: Uint8Array } },\n    accumulatedText: string,\n    currentMessage: Message,\n  ): { newText: string | null; updatedMessage: Message } {\n    if (!chunk.chunk?.bytes) {\n      return { newText: null, updatedMessage: currentMessage };\n    }\n\n    try {\n      const decodedChunk = this.decoder.decode(chunk.chunk.bytes);\n      const parsed = JSON.parse(decodedChunk);\n\n      if (!parsed.delta?.text) {\n        return { newText: null, updatedMessage: currentMessage };\n      }\n\n      const newText = parsed.delta.text;\n      if (accumulatedText.endsWith(newText)) {\n        return { newText: null, updatedMessage: currentMessage };\n      }\n\n      const updatedMessage = new Message({\n        content: accumulatedText + newText,\n        role: \"assistant\",\n        toolCalls: [],\n        cache: this.cache,\n      });\n\n      return { newText, updatedMessage };\n    } catch (e) {\n      return { newText: null, updatedMessage: currentMessage };\n    }\n  }\n\n  /**\n   * Create a stream processor for handling Bedrock response chunks\n   */\n  private async *createStreamProcessor(\n    responseBody: AsyncIterable<{ chunk?: { bytes?: Uint8Array } }>,\n    initialMessage: Message,\n  ): AsyncGenerator<string, void> {\n    let accumulatedText = \"\";\n    let currentMessage = initialMessage;\n\n    for await (const chunk of responseBody) {\n      const { newText, updatedMessage } = this.processStreamChunk(\n        chunk,\n        accumulatedText,\n        currentMessage,\n      );\n\n      if (newText) {\n        accumulatedText += newText;\n        currentMessage = updatedMessage;\n        yield newText;\n      }\n    }\n  }\n}\n","/**\n * Implement a class that represents a Hugging Face Inference client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\nimport { InferenceClient, type TextGenerationStreamOutput } from \"@huggingface/inference\";\nimport { Message } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\n\n/**\n * Available Hugging Face models for text generation\n * These are just examples of popular models - there are thousands available\n */\nexport type HuggingFaceModel =\n  | \"meta-llama/Llama-3.1-8B-Instruct\"\n  | \"meta-llama/Llama-3.1-70B-Instruct\"\n  | \"mistralai/Mistral-7B-Instruct-v0.3\"\n  | \"mistralai/Mixtral-8x7B-Instruct-v0.1\"\n  | \"tiiuae/falcon-7b-instruct\"\n  | \"google/flan-t5-xxl\";\n\n/**\n * Configuration options for the Hugging Face driver\n */\nexport interface HuggingFaceConfig {\n  /**\n   * Hugging Face API Token\n   */\n  apiToken?: string;\n\n  /**\n   * Model to use\n   * @default \"meta-llama/Llama-3.1-8B-Instruct\"\n   */\n  model?: HuggingFaceModel | string;\n\n  /**\n   * Custom endpoint URL (if using a custom deployed endpoint)\n   */\n  endpointUrl?: string;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Enable tracing for this driver\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Provider to use\n   * @default \"cerebras\"\n   */\n  provider?: string;\n}\n\n/**\n * Represents a Hugging Face Inference client and provides tools for converting messages to/from the LLM\n */\nexport class HuggingFaceThreadDriver extends BaseModelDriver {\n  /**\n   * Hugging Face Inference Client\n   */\n  private client: InferenceClient;\n\n  /**\n   * Custom endpoint client if provided\n   */\n  private endpointClient?: any; // Using any to avoid type issues with the endpoint client\n\n  /**\n   * Model to use\n   */\n  private model: string;\n\n  /**\n   * Temperature for response generation\n   */\n  private temperature: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  private maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   */\n  private cache: boolean;\n\n  /**\n   * Traced version of textGeneration\n   */\n  private textGenerationWithTracing: (params: any) => Promise<any>;\n\n  /**\n   * Traced version of textGenerationStream\n   */\n  private textGenerationStreamWithTracing: (params: any) => Promise<any>;\n\n  /**\n   * Traced version of endpoint textGeneration\n   */\n  private endpointTextGenerationWithTracing?: (params: any) => Promise<any>;\n\n  /**\n   * Traced version of endpoint textGenerationStream\n   */\n  private endpointTextGenerationStreamWithTracing?: (params: any) => Promise<any>;\n\n  /**\n   * Store provider if specified\n   */\n  private provider: string;\n\n  /**\n   * Private methods for chat completion with tracing\n   */\n  private chatCompletionWithTracing: (params: any) => Promise<any>;\n  private chatCompletionStreamWithTracing: (params: any) => Promise<any>;\n  private endpointChatCompletionWithTracing?: (params: any) => Promise<any>;\n  private endpointChatCompletionStreamWithTracing?: (params: any) => Promise<any>;\n\n  /**\n   * Returns a list of example Hugging Face models\n   */\n  static getExampleModels(): HuggingFaceModel[] {\n    return [\n      \"meta-llama/Llama-3.1-8B-Instruct\",\n      \"meta-llama/Llama-3.1-70B-Instruct\",\n      \"mistralai/Mistral-7B-Instruct-v0.3\",\n      \"mistralai/Mixtral-8x7B-Instruct-v0.1\",\n      \"tiiuae/falcon-7b-instruct\",\n      \"google/flan-t5-xxl\",\n    ];\n  }\n\n  /**\n   * Create a new Hugging Face driver\n   * @param config Configuration options\n   */\n  constructor(config: HuggingFaceConfig = {}) {\n    super();\n\n    // Get API Key from config or environment variable\n    const apiToken = config.apiToken || process.env.HUGGINGFACE_API_TOKEN;\n    if (!apiToken) {\n      throw new Error(\n        \"Hugging Face API Token must be provided in config or as HUGGINGFACE_API_TOKEN environment variable\",\n      );\n    }\n\n    // Create base client\n    this.client = new InferenceClient(apiToken);\n\n    // Store provider if specified\n    this.provider = config.provider || \"cerebras\";\n\n    // Set configuration options\n    this.model = config.model || \"meta-llama/Llama-3.1-8B-Instruct\";\n    this.temperature = config.temperature ?? 0.7;\n    this.maxTokens = config.maxTokens;\n    this.cache = config.cache ?? false;\n\n    // Initialize tracing methods with no-op functions that just call the original methods\n    this.textGenerationWithTracing = async (params: any) => this.client.textGeneration(params);\n    this.textGenerationStreamWithTracing = async (params: any) =>\n      this.client.textGenerationStream(params);\n    this.chatCompletionWithTracing = async (params: any) => this.client.chatCompletion(params);\n    this.chatCompletionStreamWithTracing = async (params: any) =>\n      this.client.chatCompletionStream(params);\n\n    // Add tracing if enabled\n    if (config.trace ?? false) {\n      this.setupTracing(config.traceMetadata);\n    }\n\n    // Create endpoint client if URL is provided\n    if (config.endpointUrl) {\n      this.endpointClient = this.client.endpoint(config.endpointUrl);\n    }\n  }\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for HuggingFace API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    // Basic HuggingFace formatting - most models expect simple text\n    return messages.map((m) => ({\n      role: m.role,\n      content: m.content || \"\",\n    }));\n  }\n\n  /**\n   * Validate conversation for HuggingFace API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    _context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n\n    // Basic HuggingFace validation\n    return {\n      isValid: errors.length === 0,\n      messages: formattedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Send processed messages to HuggingFace API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    return this.sendThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Stream processed messages to HuggingFace API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    return yield* this.streamThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Setup tracing for the Hugging Face client\n   */\n  private setupTracing(traceMetadata?: Record<string, unknown>): void {\n    // Instead of overriding methods directly, we'll create wrapper methods\n    // that we'll use instead of calling the client methods directly\n\n    // Create wrapped versions of the methods that include tracing\n    this.textGenerationWithTracing = (params: any) => {\n      return traceable(\n        async (params: any) => {\n          return await this.client.textGeneration(params);\n        },\n        {\n          run_type: \"llm\",\n          name: \"huggingface\",\n          ...traceMetadata,\n          aggregator: (args: any[], result: any) => {\n            const params = args[0] || {};\n            return {\n              model: params.model,\n              input: {\n                inputs: params.inputs,\n                parameters: params.parameters,\n              },\n              output: result.generated_text,\n              finish_reason: \"stop\",\n            };\n          },\n        },\n      )(params);\n    };\n\n    this.textGenerationStreamWithTracing = (params: any) => {\n      return traceable(\n        async (params: any) => {\n          return await this.client.textGenerationStream(params);\n        },\n        {\n          run_type: \"llm\",\n          name: \"huggingface_stream\",\n          ...traceMetadata,\n          aggregator: (args: any[]) => {\n            const params = args[0] || {};\n            return {\n              model: params.model,\n              input: {\n                inputs: params.inputs,\n                parameters: params.parameters,\n              },\n              streaming: true,\n            };\n          },\n        },\n      )(params);\n    };\n\n    // Add traced versions of chat completion methods\n    this.chatCompletionWithTracing = (params: any) => {\n      return traceable(\n        async (params: any) => {\n          return await this.client.chatCompletion(params);\n        },\n        {\n          run_type: \"llm\",\n          name: \"huggingface_chat\",\n          ...traceMetadata,\n          aggregator: (args: any[], result: any) => {\n            const params = args[0] || {};\n            return {\n              model: params.model,\n              provider: params.provider,\n              input: {\n                messages: params.messages,\n                max_tokens: params.max_tokens,\n                temperature: params.temperature,\n              },\n              output: result.choices?.[0]?.message?.content,\n              finish_reason: result.choices?.[0]?.finish_reason || \"stop\",\n            };\n          },\n        },\n      )(params);\n    };\n\n    this.chatCompletionStreamWithTracing = (params: any) => {\n      return traceable(\n        async (params: any) => {\n          return await this.client.chatCompletionStream(params);\n        },\n        {\n          run_type: \"llm\",\n          name: \"huggingface_chat_stream\",\n          ...traceMetadata,\n          aggregator: (args: any[]) => {\n            const params = args[0] || {};\n            return {\n              model: params.model,\n              provider: params.provider,\n              input: {\n                messages: params.messages,\n                max_tokens: params.max_tokens,\n                temperature: params.temperature,\n              },\n              streaming: true,\n            };\n          },\n        },\n      )(params);\n    };\n\n    // If endpoint client exists, do the same for it\n    if (this.endpointClient) {\n      this.endpointTextGenerationWithTracing = (params: any) => {\n        return traceable(\n          async (params: any) => {\n            return await this.endpointClient.textGeneration(params);\n          },\n          {\n            run_type: \"llm\",\n            name: \"huggingface_endpoint\",\n            ...traceMetadata,\n            aggregator: (args: any[], result: any) => {\n              const params = args[0] || {};\n              return {\n                endpoint: \"custom\",\n                input: {\n                  inputs: params.inputs,\n                  parameters: params.parameters,\n                },\n                output: result?.generated_text,\n                finish_reason: \"stop\",\n              };\n            },\n          },\n        )(params);\n      };\n\n      this.endpointTextGenerationStreamWithTracing = (params: any) => {\n        return traceable(\n          async (params: any) => {\n            return await this.endpointClient.textGenerationStream(params);\n          },\n          {\n            run_type: \"llm\",\n            name: \"huggingface_endpoint_stream\",\n            ...traceMetadata,\n            aggregator: (args: any[]) => {\n              const params = args[0] || {};\n              return {\n                endpoint: \"custom\",\n                input: {\n                  inputs: params.inputs,\n                  parameters: params.parameters,\n                },\n                streaming: true,\n              };\n            },\n          },\n        )(params);\n      };\n\n      // Add endpoint chat completion methods with tracing\n      this.endpointChatCompletionWithTracing = (params: any) => {\n        return traceable(\n          async (params: any) => {\n            return await this.endpointClient.chatCompletion(params);\n          },\n          {\n            run_type: \"llm\",\n            name: \"huggingface_endpoint_chat\",\n            ...traceMetadata,\n            aggregator: (args: any[], result: any) => {\n              const params = args[0] || {};\n              return {\n                endpoint: \"custom\",\n                provider: params.provider,\n                input: {\n                  messages: params.messages,\n                  max_tokens: params.max_tokens,\n                  temperature: params.temperature,\n                },\n                output: result.choices?.[0]?.message?.content,\n                finish_reason: result.choices?.[0]?.finish_reason || \"stop\",\n              };\n            },\n          },\n        )(params);\n      };\n\n      this.endpointChatCompletionStreamWithTracing = (params: any) => {\n        return traceable(\n          async (params: any) => {\n            return await this.endpointClient.chatCompletionStream(params);\n          },\n          {\n            run_type: \"llm\",\n            name: \"huggingface_endpoint_chat_stream\",\n            ...traceMetadata,\n            aggregator: (args: any[]) => {\n              const params = args[0] || {};\n              return {\n                endpoint: \"custom\",\n                provider: params.provider,\n                input: {\n                  messages: params.messages,\n                  max_tokens: params.max_tokens,\n                  temperature: params.temperature,\n                },\n                streaming: true,\n              };\n            },\n          },\n        )(params);\n      };\n    }\n  }\n\n  /**\n   * Send a thread to the LLM and get a response\n   * @param thread Thread to send\n   * @returns Updated thread with LLM response\n   */\n  override async sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    // Use the new message processing pipeline\n    return super.sendThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy send thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async sendThreadLegacy(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    this.debug(\"Sending message to Hugging Face API\", {\n      model: this.model,\n      provider: this.provider,\n    });\n\n    try {\n      let response;\n\n      // Check if we're using the Cerebras provider which requires chatCompletion\n      if (this.provider === \"cerebras\") {\n        // Format messages for chat completion API\n        const messages = this.formatMessagesForChatAPI(thread);\n\n        // Create parameters for the chat completion API call\n        const params: any = {\n          model: this.model,\n          messages,\n          temperature: this.temperature,\n          provider: this.provider,\n          tool_choice: \"auto\",\n          parallel_tool_calls: false,\n        };\n\n        // Add max tokens if specified\n        if (this.maxTokens) {\n          params.max_tokens = this.maxTokens;\n        }\n\n        // Use either the endpoint client or the main client with tracing if enabled\n        if (this.endpointClient && this.endpointChatCompletionWithTracing) {\n          response = await this.endpointChatCompletionWithTracing(params);\n        } else if (this.chatCompletionWithTracing) {\n          response = await this.chatCompletionWithTracing(params);\n        } else {\n          // Fall back to normal client if tracing is not set up\n          const clientToUse = this.endpointClient || this.client;\n          response = await clientToUse.chatCompletion(params);\n        }\n\n        // Get the response content\n        const responseContent = response.choices?.[0]?.message?.content || \"\";\n\n        console.log(\"RESPONSE from LLM:\", responseContent);\n\n        // Create a new message from the response\n        const message = new Message({\n          role: \"assistant\",\n          content: responseContent,\n          cache: this.cache,\n        });\n\n        // Look for tool calls in the response for models that don't natively support tool calling\n        console.log(\"Checking for tool calls in response...\");\n        const toolCalls = this.parseToolCallsFromText(responseContent);\n        console.log(\"Tool calls found:\", toolCalls ? toolCalls.length : 0);\n\n        if (toolCalls && toolCalls.length > 0) {\n          // Display each tool call\n          toolCalls.forEach((call, index) => {\n            console.log(`Tool call ${index + 1}:`, call);\n          });\n\n          // Create a new message with the tool calls\n          const updatedMessage = new Message({\n            role: \"assistant\",\n            content: responseContent,\n            toolCalls: toolCalls.map((call) => ({\n              toolUseId: `tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`,\n              name: call.name,\n              arguments: call.arguments,\n            })),\n            cache: this.cache,\n          });\n\n          // Replace the message\n          Object.assign(message, updatedMessage);\n\n          // Add the message to the thread\n          thread.push(message);\n\n          // Manually trigger the processToolCalls method\n          console.log(\"Executing tool calls now...\");\n          await this.executeToolCalls(thread, toolCalls);\n        } else {\n          // Add the message to the thread\n          thread.push(message);\n        }\n      } else {\n        // For other providers, use text generation\n        // Format the conversation for the model\n        const prompt = this.formatMessagesForAPI(thread);\n\n        // Check for potential token issues\n        if (prompt.length > MAX_PROMPT_CHARACTERS) {\n          throw new Error(\n            `The thread content is too long (${prompt.length} characters). Try a shorter conversation.`,\n          );\n        }\n\n        // Create parameters for the API call\n        const params: any = {\n          model: this.model,\n          inputs: prompt,\n          parameters: {\n            temperature: this.temperature,\n            return_full_text: false,\n          },\n          provider: this.provider,\n        };\n\n        // Add max tokens if specified\n        if (this.maxTokens) {\n          params.parameters.max_new_tokens = this.maxTokens;\n        }\n\n        // Use either the endpoint client or the main client with tracing if enabled\n        if (this.endpointClient && this.endpointTextGenerationWithTracing) {\n          response = await this.endpointTextGenerationWithTracing(params);\n        } else if (this.textGenerationWithTracing) {\n          response = await this.textGenerationWithTracing(params);\n        } else {\n          // Fall back to normal client if tracing is not set up\n          const clientToUse = this.endpointClient || this.client;\n          response = await clientToUse.textGeneration(params);\n        }\n\n        // Create a new message from the response\n        const message = new Message({\n          role: \"assistant\",\n          content: response.generated_text,\n          cache: this.cache,\n        });\n\n        // Look for tool calls in the response\n        const toolCalls = this.parseToolCallsFromText(response.generated_text);\n        if (toolCalls && toolCalls.length > 0) {\n          // Create a new message with the tool calls\n          const updatedMessage = new Message({\n            role: \"assistant\",\n            content: response.generated_text,\n            toolCalls: toolCalls.map((call) => ({\n              toolUseId: `tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`,\n              name: call.name,\n              arguments: call.arguments,\n            })),\n            cache: this.cache,\n          });\n\n          // Replace the message\n          Object.assign(message, updatedMessage);\n\n          // Add the message to the thread\n          thread.push(message);\n\n          // Manually trigger the processToolCalls method\n          await this.executeToolCalls(thread, toolCalls);\n        } else {\n          // Add the message to the thread\n          thread.push(message);\n        }\n      }\n\n      return thread;\n    } catch (error) {\n      this.error(\"Error sending message to Hugging Face API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Execute tool calls for the Hugging Face driver\n   * This is needed because the standard isToolCall check isn't detecting our tool calls\n   */\n  private async executeToolCalls(\n    thread: Thread,\n    toolCalls: { name: string; arguments: any }[],\n  ): Promise<void> {\n    const tools = thread.getTools();\n\n    console.log(\n      \"Found tools:\",\n      tools.map((t) => t.getName()),\n    );\n    console.log(\n      \"Tool calls to execute:\",\n      toolCalls.map((tc) => tc.name),\n    );\n\n    for (const toolCall of toolCalls) {\n      const tool = tools.find((t) => t.getName() === toolCall.name);\n      if (tool) {\n        try {\n          // Process parameters - convert string numbers to actual numbers if needed\n          const processedArgs = { ...toolCall.arguments };\n\n          // For calculator tool, convert a and b parameters to numbers\n          if (toolCall.name === \"calculator\") {\n            if (\"a\" in processedArgs && typeof processedArgs.a === \"string\") {\n              processedArgs.a = Number(processedArgs.a);\n            }\n            if (\"b\" in processedArgs && typeof processedArgs.b === \"string\") {\n              processedArgs.b = Number(processedArgs.b);\n            }\n          }\n\n          console.log(`[${toolCall.name}] Executing with args:`, processedArgs);\n\n          // Execute the tool\n          const toolUseId = `tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`;\n          const result = await tool.executeTool(processedArgs, {\n            ...toolCall,\n            toolUseId,\n            arguments: processedArgs,\n          });\n\n          console.log(`[${toolCall.name}] Result:`, result);\n\n          // Create a tool result message\n          const userMessage = new Message({\n            role: \"user\",\n            content: \"\",\n            toolResults: [\n              {\n                toolUseId,\n                name: toolCall.name,\n                result: result.success ? result.result : null,\n                error: result.error,\n              },\n            ],\n            cache: false,\n          });\n\n          // Add the message to the thread\n          thread.push(userMessage);\n\n          // Generate a response from the model with the tool result\n          await this.sendThread(thread);\n        } catch (e) {\n          console.error(`Error executing tool ${toolCall.name}:`, e);\n          this.error(`Error executing tool ${toolCall.name}`, e);\n        }\n      } else {\n        console.log(`No tool found with name: ${toolCall.name}`);\n      }\n    }\n  }\n\n  /**\n   * Stream a thread to the LLM and get a streaming response\n   * @param thread Thread to send\n   * @returns AsyncGenerator yielding the stream and updated thread\n   */\n  override async *streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Use the new message processing pipeline\n    return yield* super.streamThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy stream thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async *streamThreadLegacy(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    this.debug(\"Streaming message to Hugging Face API\", {\n      model: this.model,\n      provider: this.provider,\n    });\n\n    try {\n      // Create a new message to add to the thread\n      const message = new Message({\n        role: \"assistant\",\n        content: \"\",\n        cache: this.cache,\n      });\n\n      let streamResponse;\n\n      // Check if we're using the Cerebras provider which requires chatCompletionStream\n      if (this.provider === \"cerebras\") {\n        // Format messages for chat completion API\n        const messages = this.formatMessagesForChatAPI(thread);\n\n        // Create parameters for the chat completion API call\n        const params: any = {\n          model: this.model,\n          messages,\n          temperature: this.temperature,\n          provider: this.provider,\n        };\n\n        // Add max tokens if specified\n        if (this.maxTokens) {\n          params.max_tokens = this.maxTokens;\n        }\n\n        // Use either the endpoint client or the main client with tracing if enabled\n        if (this.endpointClient && this.endpointChatCompletionStreamWithTracing) {\n          streamResponse = await this.endpointChatCompletionStreamWithTracing(params);\n        } else if (this.chatCompletionStreamWithTracing) {\n          streamResponse = await this.chatCompletionStreamWithTracing(params);\n        } else {\n          // Fall back to normal client if tracing is not set up\n          const clientToUse = this.endpointClient || this.client;\n          streamResponse = await clientToUse.chatCompletionStream(params);\n        }\n\n        // Create a streaming content generator for chat completion\n        const streamContent = this.createChatStreamGenerator(streamResponse, message);\n\n        // Yield the stream\n        yield { stream: streamContent, message };\n      } else {\n        // For other providers, use text generation stream\n        // Format the conversation for the model\n        const prompt = this.formatMessagesForAPI(thread);\n\n        // Check for potential token issues\n        if (prompt.length > MAX_PROMPT_CHARACTERS) {\n          throw new Error(\n            `The thread content is too long (${prompt.length} characters). Try a shorter conversation.`,\n          );\n        }\n\n        // Create parameters for the API call\n        const params: any = {\n          model: this.model,\n          inputs: prompt,\n          parameters: {\n            temperature: this.temperature,\n            return_full_text: false,\n          },\n          provider: this.provider,\n        };\n\n        // Add max tokens if specified\n        if (this.maxTokens) {\n          params.parameters.max_new_tokens = this.maxTokens;\n        }\n\n        // Use either the endpoint client or the main client with tracing if enabled\n        if (this.endpointClient && this.endpointTextGenerationStreamWithTracing) {\n          streamResponse = await this.endpointTextGenerationStreamWithTracing(params);\n        } else if (this.textGenerationStreamWithTracing) {\n          streamResponse = await this.textGenerationStreamWithTracing(params);\n        } else {\n          // Fall back to normal client if tracing is not set up\n          const clientToUse = this.endpointClient || this.client;\n          streamResponse = await clientToUse.textGenerationStream(params);\n        }\n\n        // Create a streaming content generator\n        const streamContent = this.createStreamGenerator(streamResponse, message);\n\n        // Yield the stream\n        yield { stream: streamContent, message };\n      }\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Return the updated thread\n      return thread;\n    } catch (error) {\n      this.error(\"Error streaming message to Hugging Face API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Format messages from the Thread object for the Hugging Face API\n   * @param thread Thread to format\n   * @returns Formatted prompt string\n   */\n  private formatMessagesForAPI(thread: Thread): string {\n    let systemPrompt = \"\";\n    const messages: string[] = [];\n\n    // Process each message in the thread\n    for (const message of thread.all()) {\n      if (message.role === \"system\") {\n        // Capture system prompt separately\n        systemPrompt = message.content || \"\";\n      } else if (message.role === \"user\") {\n        messages.push(`Human: ${message.content || \"\"}`);\n      } else if (message.role === \"assistant\") {\n        messages.push(`Assistant: ${message.content || \"\"}`);\n      }\n      console.log(\"formatMessagesForAPI\", { message });\n      // Include tool results in the conversation\n      if (message.toolResults && message.toolResults.length > 0) {\n        for (const toolResult of message.toolResults) {\n          const resultStr =\n            typeof toolResult.result === \"object\"\n              ? JSON.stringify(toolResult.result, null, 2)\n              : String(toolResult.result);\n\n          messages.push(`Tool (${toolResult.name}): ${resultStr}`);\n        }\n      }\n    }\n\n    // Create the complete prompt with system message if available\n    let fullPrompt = \"\";\n    if (systemPrompt) {\n      fullPrompt += `System: ${systemPrompt}\\n\\n`;\n    }\n\n    // Add all the messages\n    fullPrompt += messages.join(\"\\n\");\n\n    // Add a final line to prompt the assistant's response\n    fullPrompt += \"\\nAssistant:\";\n\n    return fullPrompt;\n  }\n\n  /**\n   * Format messages from the Thread object for the Chat API format\n   * @param thread Thread to format\n   * @returns Array of messages in chat completion format\n   */\n  private formatMessagesForChatAPI(thread: Thread): any[] {\n    const formattedMessages: any[] = [];\n    let systemMessage = null;\n\n    // Get tools from the thread\n    const tools = thread.getTools();\n\n    // Process each message in the thread\n    for (const message of thread.all()) {\n      if (message.role === \"system\") {\n        // Store system message to add at the beginning\n        let systemContent = message.content || \"\";\n\n        // For models that don't natively support tool calling,\n        // append tool descriptions to the system message\n        if (tools.length > 0) {\n          systemContent += \"\\n\\nYou have access to the following tools:\\n\";\n          tools.forEach((tool) => {\n            systemContent += `\\n- ${tool.getName()}: ${tool.getDescription()}\\n`;\n\n            // Add parameter info with proper parameter names based on the actual tool schema\n            try {\n              // Get the schema from the tool's parameters\n              const schema = tool.getParameters();\n              if (schema) {\n                systemContent += \"  Parameters:\\n\";\n\n                // Try to extract parameter info from the schema\n                try {\n                  // Access the underlying schema definition\n                  const schemaObj = (schema as any)._def?.shape || {};\n\n                  // Extract each parameter's information\n                  Object.entries(schemaObj).forEach(([paramName, paramDef]) => {\n                    // Try to get description from the parameter definition\n                    const description = (paramDef as any)._def?.description || \"\";\n                    systemContent += `  - ${paramName}: ${description}\\n`;\n                  });\n                } catch (e) {\n                  // If we can't extract parameter details, just list parameters\n                  systemContent += `  Parameters: ${Object.keys((schema as any)._def?.shape || {}).join(\", \")}\\n`;\n                }\n              }\n            } catch (e) {\n              // Fall back to basic description if error\n              systemContent += `  (See tool documentation for parameters)\\n`;\n            }\n          });\n\n          // Give clear instructions on the EXACT format to use\n          systemContent += \"\\nTo use a tool, you MUST respond using EXACTLY this format:\\n\";\n          systemContent +=\n            '```json\\n{\"tool\": \"tool_name\", \"parameters\": {\"parameter1\": \"value1\", \"parameter2\": \"value2\", ...}}\\n```\\n';\n          systemContent +=\n            \"\\nMake sure to use the exact parameter names as specified in the tool description.\\n\";\n          systemContent +=\n            \"For example, if the calculator tool has parameters 'operation', 'a', and 'b', use those exact names.\\n\";\n        }\n\n        systemMessage = {\n          role: \"system\",\n          content: systemContent,\n        };\n      } else if (message.role === \"user\") {\n        formattedMessages.push({\n          role: \"user\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"assistant\") {\n        formattedMessages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n        });\n      }\n\n      console.log(\"formatMessagesForChatAPI\", { message });\n      console.dir(message, { depth: null });\n\n      // For tool results, attach them to a user message\n      if (message.toolResults && message.toolResults.length > 0) {\n        const toolResultContent = message.toolResults\n          .map((result) => {\n            const resultStr =\n              typeof result.result === \"object\"\n                ? JSON.stringify(result.result, null, 2)\n                : String(result.result);\n            return `Tool (${result.name}) result:\\n${resultStr}`;\n          })\n          .join(\"\\n\\n\");\n\n        formattedMessages.push({\n          role: \"user\",\n          content: `${toolResultContent}`,\n        });\n      }\n    }\n\n    // Add system message at the beginning if present\n    if (systemMessage) {\n      formattedMessages.unshift(systemMessage);\n    }\n\n    return formattedMessages;\n  }\n\n  /**\n   * Parse tool calls from text\n   */\n  private parseToolCallsFromText(\n    text: string,\n  ): { name: string; arguments: Record<string, unknown> }[] | null {\n    console.log(\"Parsing tool calls from text:\", text);\n\n    // First try to find JSON in markdown code blocks\n    const codeBlockPattern = /```json\\s*({[\\s\\S]*?})\\s*```/g;\n    let codeMatch;\n    const toolCalls: { name: string; arguments: Record<string, unknown> }[] = [];\n\n    while ((codeMatch = codeBlockPattern.exec(text)) !== null) {\n      console.log(\"Found code block match:\", codeMatch[0]);\n      try {\n        // Ensure the capture group exists\n        if (codeMatch[1]) {\n          // Parse the JSON from the code block\n          const jsonObj = JSON.parse(codeMatch[1]);\n\n          // Check if this looks like a tool call\n          if (jsonObj.tool && jsonObj.parameters) {\n            console.log(`Found tool call for \"${jsonObj.tool}\":`, jsonObj.parameters);\n            toolCalls.push({\n              name: jsonObj.tool,\n              arguments: jsonObj.parameters as Record<string, unknown>,\n            });\n          }\n        }\n      } catch (e) {\n        console.error(\n          \"Error parsing JSON from code block:\",\n          e instanceof Error ? e.message : String(e),\n        );\n      }\n    }\n\n    // If we found any tool calls in code blocks, return them\n    if (toolCalls.length > 0) {\n      console.log(\"Found tool calls in code blocks:\", toolCalls);\n      return toolCalls;\n    }\n\n    // Try to find function calls in the text using regex\n    // Look for patterns like: {\"name\": \"calculator\", \"arguments\": {\"a\": 5, \"b\": 3, \"operation\": \"add\"}}\n    // or {\"function\": \"calculator\", \"parameters\": {\"a\": 5, \"b\": 3, \"operation\": \"add\"}}\n\n    // Second attempt: Look for tool calls in JSON format\n    const jsonPattern =\n      /\\{(?:\"name\"|\"function\"):\\s*\"([^\"]+)\",\\s*(?:\"arguments\"|\"parameters\"):\\s*(\\{[^}]+\\})\\}/g;\n    let match;\n\n    while ((match = jsonPattern.exec(text)) !== null) {\n      console.log(\"Found JSON pattern match:\", match[0]);\n      // Ensure name is not undefined before proceeding\n      if (match[1] && match[2]) {\n        const name = match[1];\n        try {\n          // The second capture group is the arguments JSON\n          const argsString = match[2];\n          console.log(`Parsing arguments for tool \"${name}\":`, argsString);\n          const args = JSON.parse(argsString) as Record<string, unknown>;\n          toolCalls.push({ name, arguments: args });\n        } catch (e) {\n          console.error(\n            `Error parsing arguments for tool \"${name}\":`,\n            e instanceof Error ? e.message : String(e),\n          );\n        }\n      }\n    }\n\n    // If we found any tool calls using the JSON pattern, return them\n    if (toolCalls.length > 0) {\n      console.log(\"Found tool calls using JSON pattern:\", toolCalls);\n      return toolCalls;\n    }\n\n    // Third attempt: Try to find a JSON block in the text that might contain tool calls\n    const fullJsonPattern = /\\{[\\s\\S]*\\}/g;\n    const jsonMatches = text.match(fullJsonPattern);\n\n    if (jsonMatches) {\n      console.log(\"Found potential JSON blocks:\", jsonMatches.length);\n\n      for (const jsonText of jsonMatches) {\n        try {\n          console.log(\"Attempting to parse JSON block:\", jsonText);\n          const parsed = JSON.parse(jsonText);\n\n          // Check if this is a tool call\n          if (parsed.name && (parsed.arguments || parsed.parameters)) {\n            console.log(\"Found tool call in JSON block:\", parsed);\n            const args = parsed.arguments || parsed.parameters;\n            toolCalls.push({ name: parsed.name, arguments: args as Record<string, unknown> });\n          } else if (parsed.function && (parsed.arguments || parsed.parameters)) {\n            console.log(\"Found tool call with 'function' key:\", parsed);\n            const args = parsed.arguments || parsed.parameters;\n            toolCalls.push({ name: parsed.function, arguments: args as Record<string, unknown> });\n          } else if (parsed.tool && parsed.parameters) {\n            console.log(\"Found tool call with 'tool' key:\", parsed);\n            toolCalls.push({\n              name: parsed.tool,\n              arguments: parsed.parameters as Record<string, unknown>,\n            });\n          }\n        } catch (e) {\n          console.log(\"Failed to parse JSON block:\", e instanceof Error ? e.message : String(e));\n        }\n      }\n\n      if (toolCalls.length > 0) {\n        console.log(\"Found tool calls using JSON block parsing:\", toolCalls);\n        return toolCalls;\n      }\n    } else {\n      console.log(\"No JSON blocks found in the text\");\n    }\n\n    // If we haven't found any tool calls yet, try a more lenient approach\n    console.log(\"No tool calls found with standard patterns, trying more lenient approach\");\n\n    // Return null if no tool calls were found\n    return null;\n  }\n\n  /**\n   * Create a stream generator that handles updates to the message\n   */\n  private async *createStreamGenerator(\n    stream: AsyncIterable<TextGenerationStreamOutput>,\n    message: Message,\n  ): AsyncGenerator<string, void> {\n    let accumulatedText = \"\";\n\n    try {\n      for await (const chunk of stream) {\n        const tokenText = chunk.token.text;\n\n        // Update accumulated text\n        accumulatedText += tokenText;\n\n        // Update the message content\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: accumulatedText,\n          cache: message.cache,\n        });\n\n        // Copy properties to the original message\n        Object.assign(message, updatedMessage);\n\n        // Yield the token text\n        yield tokenText;\n      }\n\n      // After streaming completes, check for potential tool calls in the response\n      // This ensures we don't try to parse incomplete JSON during streaming\n      this.debug(\"Stream complete, checking for tool calls\", { content: accumulatedText });\n\n      const toolCalls = this.parseToolCallsFromText(accumulatedText);\n      if (toolCalls && toolCalls.length > 0) {\n        this.debug(\"Found tool calls in stream response\", { toolCalls });\n\n        // Create a new message with the tool calls\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: accumulatedText,\n          toolCalls: toolCalls.map((call) => ({\n            toolUseId: `tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`,\n            name: call.name,\n            arguments: call.arguments,\n          })),\n          cache: message.cache,\n        });\n\n        // Replace the message\n        Object.assign(message, updatedMessage);\n      }\n    } catch (error) {\n      this.error(\"Error processing Hugging Face stream\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Create a stream generator that handles updates to the message for chat completion\n   */\n  private async *createChatStreamGenerator(\n    stream: AsyncIterable<TextGenerationStreamOutput>,\n    message: Message,\n  ): AsyncGenerator<string, void> {\n    let accumulatedText = \"\";\n\n    try {\n      for await (const chunk of stream) {\n        const tokenText = chunk.token.text;\n\n        // Update accumulated text\n        accumulatedText += tokenText;\n\n        // Update the message content\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: accumulatedText,\n          cache: message.cache,\n        });\n\n        // Copy properties to the original message\n        Object.assign(message, updatedMessage);\n\n        // Yield the token text\n        yield tokenText;\n      }\n\n      // After streaming completes, check for potential tool calls in the response\n      // This ensures we don't try to parse incomplete JSON during streaming\n      this.debug(\"Stream complete, checking for tool calls\", { content: accumulatedText });\n\n      const toolCalls = this.parseToolCallsFromText(accumulatedText);\n      if (toolCalls && toolCalls.length > 0) {\n        this.debug(\"Found tool calls in stream response\", { toolCalls });\n\n        // Create a new message with the tool calls\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: accumulatedText,\n          toolCalls: toolCalls.map((call) => ({\n            toolUseId: `tool-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`,\n            name: call.name,\n            arguments: call.arguments,\n          })),\n          cache: message.cache,\n        });\n\n        // Replace the message\n        Object.assign(message, updatedMessage);\n      }\n    } catch (error) {\n      this.error(\"Error processing Hugging Face chat stream\", { error });\n      throw error;\n    }\n  }\n}\n","/**\n * Implement a class that represents a Groq client\n * and provides a set of tools for converting messages to and from the LLM.\n * - sendThread(thread: Thread): Thread - send a message to the LLM\n * - streamThread(thread: Thread): AsyncGenerator<string, Thread> - stream a message to the LLM\n */\n\nimport Groq from \"groq-sdk\";\nimport { nanoid } from \"nanoid\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, type ToolCall } from \"../message\";\nimport type {\n  ConversationValidationResult,\n  MessageProcessingContext,\n  ProcessedMessageResult,\n  ValidationError,\n  ValidationWarning,\n} from \"../message-processing\";\nimport type { Thread } from \"../thread\";\nimport type { Tool } from \"../tool\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\nconst JSON_SCHEMA_URL = \"http://json-schema.org/draft-07/schema#\";\n\n/**\n * Available Groq models\n */\nexport type GroqModel =\n  | \"llama3-8b-8192\"\n  | \"llama3-70b-8192\"\n  | \"llama3-8b\"\n  | \"llama3-70b\"\n  | \"mixtral-8x7b-32768\"\n  | \"gemma-7b-it\"\n  | \"gemma2-9b-it\";\n\n/**\n * Configuration options for the Groq driver\n */\nexport interface GroqConfig {\n  /**\n   * Groq API Key\n   */\n  apiKey?: string;\n\n  /**\n   * Model to use\n   * @default \"llama3-8b-8192\"\n   */\n  model?: GroqModel | string;\n\n  /**\n   * Temperature for response generation\n   * @default 0.7\n   */\n  temperature?: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   * @default false\n   */\n  cache?: boolean;\n\n  /**\n   * Whether to enable tracing\n   * @default false\n   */\n  trace?: boolean;\n\n  /**\n   * Additional metadata for tracing\n   */\n  traceMetadata?: Record<string, unknown>;\n\n  /**\n   * Disable parallel tool calls\n   * Some models don't support parallel tool calls\n   * @default true\n   */\n  disableParallelToolCalls?: boolean;\n}\n\n/**\n * Represents a Groq client and provides tools for converting messages to/from the LLM\n */\nexport class GroqThreadDriver extends BaseModelDriver {\n  /**\n   * Groq API Client\n   */\n  private client: Groq;\n\n  /**\n   * Groq model to use\n   */\n  private model: GroqModel | string;\n\n  /**\n   * Temperature for response generation\n   */\n  private temperature: number;\n\n  /**\n   * Maximum number of tokens to generate\n   */\n  private maxTokens?: number;\n\n  /**\n   * Whether to cache responses\n   */\n  private cache: boolean;\n\n  /**\n   * Whether to disable parallel tool calls\n   */\n  private disableParallelToolCalls: boolean;\n\n  /**\n   * Returns a list of available Groq models\n   */\n  static getAvailableModels(): GroqModel[] {\n    return [\n      \"llama3-8b-8192\",\n      \"llama3-70b-8192\",\n      \"llama3-8b\",\n      \"llama3-70b\",\n      \"mixtral-8x7b-32768\",\n      \"gemma-7b-it\",\n      \"gemma2-9b-it\",\n    ];\n  }\n\n  /**\n   * Create a new Groq driver\n   * @param config Configuration options\n   */\n  constructor(config: GroqConfig = {}) {\n    super();\n\n    // Get API Key from config or environment variable\n    const apiKey = config.apiKey || process.env.GROQ_API_KEY;\n    if (!apiKey) {\n      throw new Error(\n        \"Groq API Key must be provided in config or as GROQ_API_KEY environment variable\",\n      );\n    }\n\n    // Create a base client\n    const baseClient = new Groq({\n      apiKey,\n    });\n\n    // Only wrap with tracing if trace is enabled (default to false)\n    if (config.trace ?? false) {\n      // Create a proxy around the Groq client to intercept API calls\n      this.client = new Proxy(baseClient, {\n        get: (target, prop, receiver) => {\n          const value = Reflect.get(target, prop, receiver);\n\n          // Handle nested properties (chat.completions.create)\n          if (prop === \"chat\" && value && typeof value === \"object\") {\n            return new Proxy(value, {\n              get: (chatTarget, chatProp, chatReceiver) => {\n                const chatValue = Reflect.get(chatTarget, chatProp, chatReceiver);\n\n                // Handle completions property\n                if (chatProp === \"completions\" && chatValue && typeof chatValue === \"object\") {\n                  return new Proxy(chatValue, {\n                    get: (completionsTarget, completionsProp, completionsReceiver) => {\n                      const completionsValue = Reflect.get(\n                        completionsTarget,\n                        completionsProp,\n                        completionsReceiver,\n                      );\n\n                      // Wrap the create method with tracing\n                      if (completionsProp === \"create\" && typeof completionsValue === \"function\") {\n                        return traceable(completionsValue.bind(completionsTarget), {\n                          run_type: \"llm\",\n                          name: \"groq\",\n                          ...config.traceMetadata,\n                          aggregator: (args: any[], result: any) => {\n                            // Extract relevant data for tracing\n                            const params = args[0] || {};\n\n                            // For streaming responses, we can't easily get metrics, so just return the input\n                            if (params.stream) {\n                              return {\n                                model: params.model,\n                                input: {\n                                  messages: params.messages,\n                                  temperature: params.temperature,\n                                  max_tokens: params.max_tokens,\n                                  tools: params.tools ? params.tools.length : 0,\n                                },\n                                streaming: true,\n                              };\n                            }\n\n                            // For non-streaming, include response data\n                            return {\n                              model: params.model,\n                              input: {\n                                messages: params.messages,\n                                temperature: params.temperature,\n                                max_tokens: params.max_tokens,\n                                tools: params.tools ? params.tools.length : 0,\n                              },\n                              output: result.choices?.[0]?.message,\n                              metrics: result.usage\n                                ? {\n                                    prompt_tokens: result.usage.prompt_tokens,\n                                    completion_tokens: result.usage.completion_tokens,\n                                    total_tokens: result.usage.total_tokens,\n                                  }\n                                : undefined,\n                              finish_reason: result.choices?.[0]?.finish_reason,\n                            };\n                          },\n                        });\n                      }\n\n                      return completionsValue;\n                    },\n                  });\n                }\n\n                return chatValue;\n              },\n            });\n          }\n\n          return value;\n        },\n      });\n    } else {\n      this.client = baseClient;\n    }\n\n    this.getModels();\n\n    // Set configuration options\n    this.model = config.model || \"llama3-8b-8192\";\n    this.temperature = config.temperature ?? 0.7;\n    this.maxTokens = config.maxTokens;\n    this.cache = config.cache ?? false;\n    this.disableParallelToolCalls = config.disableParallelToolCalls ?? true;\n  }\n\n  // ==================== MESSAGE PROCESSING IMPLEMENTATION ====================\n\n  /**\n   * Format messages for Groq API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected formatMessagesForProvider(messages: Message[]): any[] {\n    const formattedMessages: any[] = [];\n\n    for (const message of messages) {\n      // Process attachments if they exist\n      if (message.attachments && message.attachments.length > 0) {\n        const contentParts: any[] = [];\n\n        // Add text content if it exists\n        if (message.content) {\n          contentParts.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add each attachment\n        for (const attachment of message.attachments) {\n          if (attachment.type === \"image\" && attachment.source.uri) {\n            contentParts.push({\n              type: \"image_url\",\n              image_url: {\n                url: attachment.source.uri,\n                detail: \"auto\",\n              },\n            });\n          }\n        }\n\n        // Groq has similar typing requirements as OpenAI for different roles\n        if (message.role === \"user\") {\n          formattedMessages.push({\n            role: \"user\",\n            content: contentParts,\n          });\n        } else if (message.role === \"assistant\") {\n          formattedMessages.push({\n            role: \"assistant\",\n            content: contentParts,\n          });\n        } else if (message.role === \"system\") {\n          formattedMessages.push({\n            role: \"system\",\n            content: contentParts,\n          });\n        }\n        continue;\n      }\n\n      // Handle tool results (these are created from user messages with toolResults)\n      if (message.toolResults && message.toolResults.length > 0) {\n        // First add the user message if it has content\n        if (message.content) {\n          formattedMessages.push({\n            role: \"user\",\n            content: message.content,\n          });\n        }\n\n        // Then add each tool result as a separate message\n        for (const toolResult of message.toolResults) {\n          const resultContent =\n            typeof toolResult.result === \"object\"\n              ? JSON.stringify(toolResult.result)\n              : String(toolResult.result);\n\n          formattedMessages.push({\n            role: \"tool\",\n            tool_call_id: toolResult.toolUseId,\n            content: resultContent,\n          });\n        }\n        continue;\n      }\n\n      // Handle tool calls in assistant messages\n      if (message.role === \"assistant\" && message.toolCalls && message.toolCalls.length > 0) {\n        const toolCalls = message.toolCalls.map((call) => ({\n          id: call.toolUseId,\n          type: \"function\" as const,\n          function: {\n            name: call.name,\n            arguments: JSON.stringify(call.arguments),\n          },\n        }));\n\n        formattedMessages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n          tool_calls: toolCalls,\n        });\n        continue;\n      }\n\n      // Default case for simple messages\n      if (message.role === \"user\") {\n        formattedMessages.push({\n          role: \"user\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"assistant\") {\n        formattedMessages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"system\") {\n        formattedMessages.push({\n          role: \"system\",\n          content: message.content || \"\",\n        });\n      }\n    }\n\n    return formattedMessages;\n  }\n\n  /**\n   * Validate conversation for Groq API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async validateConversation(\n    formattedMessages: any[],\n    _context: MessageProcessingContext,\n  ): Promise<ConversationValidationResult> {\n    const errors: ValidationError[] = [];\n    const warnings: ValidationWarning[] = [];\n    const repairsApplied: string[] = [];\n\n    // Check for potential token issues\n    const totalCharacters = formattedMessages.reduce(\n      (sum, msg) => sum + (typeof msg.content === \"string\" ? msg.content.length : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      errors.push({\n        type: \"token_limit_exceeded\",\n        message: `The thread content is too long (${totalCharacters} characters). Maximum allowed is ${MAX_PROMPT_CHARACTERS}.`,\n        severity: \"error\" as const,\n        context: { totalCharacters, maxAllowed: MAX_PROMPT_CHARACTERS },\n      });\n    }\n\n    // Basic Groq validation\n    return {\n      isValid: errors.length === 0,\n      messages: formattedMessages,\n      errors,\n      warnings,\n      repairsApplied,\n    };\n  }\n\n  /**\n   * Send processed messages to Groq API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async sendProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): Promise<Thread> {\n    return this.sendThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Stream processed messages to Groq API\n   * Implementation of the abstract method from BaseModelDriver\n   */\n  protected async *streamProcessedMessages(\n    thread: Thread,\n    _processingResult: ProcessedMessageResult,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    return yield* this.streamThreadLegacy(thread, abortSignal);\n  }\n\n  /**\n   * Send a thread to the LLM and get a response\n   * @param thread Thread to send\n   * @returns Updated thread with LLM response\n   */\n  override async sendThread(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    // Use the new message processing pipeline\n    return super.sendThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy send thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async sendThreadLegacy(thread: Thread, abortSignal?: AbortSignal): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    // this.debug(\"Sending message to Groq API\", { model: this.model });\n\n    // Format messages for Groq API\n    const messages = this.formatMessagesForAPI(thread);\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (typeof msg.content === \"string\" ? msg.content.length : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    try {\n      // Create parameters for the API call\n      const params: any = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n      };\n\n      // Add max tokens if specified\n      if (this.maxTokens) {\n        params.max_tokens = this.maxTokens;\n      }\n\n      // Add tools if there are any in the thread\n      const tools = thread.getTools();\n      if (tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n        params.tool_choice = \"auto\";\n\n        // Disable parallel tool calls if specified\n        if (this.disableParallelToolCalls) {\n          params.parallel_tool_calls = false;\n        }\n      }\n\n      // Make the API call\n      const response = await this.client.chat.completions.create(params);\n\n      // Get the last choice from the response\n      const lastChoice = response.choices[0];\n      if (!lastChoice) {\n        throw new Error(\"No response from Groq API\");\n      }\n\n      const choice = lastChoice.message;\n      if (!choice) {\n        throw new Error(\"Empty response from Groq API\");\n      }\n\n      // Create a new message from the response\n      const message = new Message({\n        role: \"assistant\",\n        content: choice.content || \"\",\n        toolCalls: this.parseToolCalls(choice.tool_calls),\n        cache: this.cache,\n      });\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Log usage metrics if available\n      if (response.usage) {\n        this.debug(\"Groq API usage metrics\", {\n          inputTokens: response.usage.prompt_tokens,\n          outputTokens: response.usage.completion_tokens,\n          totalTokens: response.usage.total_tokens,\n        });\n      }\n\n      return thread;\n    } catch (error: any) {\n      // Check if this is a tool call error with failed_generation information\n      if (error?.error?.code === \"tool_use_failed\" && error?.error?.failed_generation) {\n        this.debug(\"Handling tool call error with failed_generation\", {\n          failed_generation: error.error.failed_generation,\n        });\n\n        try {\n          // Try to extract the tool calls from the failed generation\n          const toolCalls = this.parseFailedGenerationToolCalls(error.error.failed_generation);\n          if (toolCalls && toolCalls.length > 0) {\n            // Create an assistant message with the tool calls\n            const assistantMessage = new Message({\n              role: \"assistant\",\n              content: \"I'll help you calculate that.\",\n              toolCalls: toolCalls,\n              cache: this.cache,\n            });\n\n            // Add the message to the thread\n            thread.push(assistantMessage);\n\n            // For each tool call, create and execute the tool\n            const tools = thread.getTools();\n            for (const toolCall of toolCalls) {\n              const tool = tools.find((t) => t.getName() === toolCall.name);\n              if (tool) {\n                // Execute the tool\n                const result = await tool.executeTool(toolCall.arguments, toolCall);\n\n                // Create a user message with the tool result\n                const userMessage = new Message({\n                  role: \"user\",\n                  content: \"\",\n                  toolResults: [\n                    {\n                      toolUseId: toolCall.toolUseId,\n                      name: toolCall.name,\n                      result: result.result,\n                      error: result.error,\n                    },\n                  ],\n                  cache: this.cache,\n                });\n\n                // Add the message to the thread\n                thread.push(userMessage);\n              }\n            }\n\n            // Create a final message to summarize the results\n            // Call ourselves recursively to generate a summary\n            // But first check if we have both tool results in the thread\n            const toolResults = thread\n              .all()\n              .filter((msg) => msg.toolResults && msg.toolResults.length > 0)\n              .flatMap((msg) => msg.toolResults || []);\n\n            if (toolResults.length === toolCalls.length) {\n              // We have all the tool results, generate a summary\n              const summaryMessage = new Message({\n                role: \"user\",\n                content: \"Please provide the final answer based on the calculator results.\",\n                cache: this.cache,\n              });\n\n              thread.push(summaryMessage);\n\n              // Call the LLM again to get the summary\n              return this.sendThread(thread);\n            }\n\n            return thread;\n          }\n        } catch (parseError) {\n          this.error(\"Error parsing failed_generation\", { parseError, originalError: error });\n        }\n      }\n\n      this.error(\"Error sending message to Groq API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Stream a thread to the LLM and get a streaming response\n   * @param thread Thread to send\n   * @returns AsyncGenerator yielding the stream and updated thread\n   */\n  override async *streamThread(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    // Use the new message processing pipeline\n    return yield* super.streamThread(thread, abortSignal);\n  }\n\n  /**\n   * Legacy stream thread implementation\n   * @deprecated Will be removed once message processing is fully integrated\n   */\n  private async *streamThreadLegacy(\n    thread: Thread,\n    abortSignal?: AbortSignal,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    // Check if execution has been aborted\n    this.checkAbortSignal(abortSignal);\n\n    this.debug(\"Streaming message to Groq API\", { model: this.model });\n\n    // Format messages for Groq API\n    const messages = this.formatMessagesForAPI(thread);\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (typeof msg.content === \"string\" ? msg.content.length : 0),\n      0,\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(\n        `The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`,\n      );\n    }\n\n    // Create a new message to add to the thread\n    const message = new Message({\n      role: \"assistant\",\n      content: \"\",\n      cache: this.cache,\n    });\n\n    try {\n      // Create parameters for the API call\n      const params: any = {\n        model: this.model,\n        messages,\n        temperature: this.temperature,\n        stream: true,\n      };\n\n      // Add max tokens if specified\n      if (this.maxTokens) {\n        params.max_tokens = this.maxTokens;\n      }\n\n      // Add tools if there are any in the thread\n      const tools = thread.getTools();\n      if (tools.length > 0) {\n        params.tools = this.createToolDefinitions(tools);\n        params.tool_choice = \"auto\";\n\n        // Disable parallel tool calls if specified\n        if (this.disableParallelToolCalls) {\n          params.parallel_tool_calls = false;\n        }\n      }\n\n      // Create a simple async generator for collecting content\n      const contentGenerator = async function* (\n        this: GroqThreadDriver,\n      ): AsyncGenerator<string, void> {\n        try {\n          // Make the streaming API call\n          // Note: Type assertion to any is needed because the Groq SDK types don't match reality\n          const response: any = await this.client.chat.completions.create(params);\n\n          // Handle streaming or direct response\n          if (response && response[Symbol.asyncIterator]) {\n            // It's a proper async iterator, proceed with streaming\n            for await (const chunk of response) {\n              const delta = chunk.choices && chunk.choices[0]?.delta;\n              if (delta && delta.content) {\n                // Update message content\n                const updatedMessage = new Message({\n                  role: \"assistant\",\n                  content: (message.content || \"\") + delta.content,\n                  cache: message.cache,\n                });\n                Object.assign(message, updatedMessage);\n\n                yield delta.content;\n              }\n            }\n          } else if (response && response.choices && response.choices[0]?.message) {\n            // It's a regular completion response, not a stream\n            const content = response.choices[0].message.content || \"\";\n\n            // Update message content\n            const updatedMessage = new Message({\n              role: \"assistant\",\n              content: content,\n              cache: message.cache,\n            });\n            Object.assign(message, updatedMessage);\n\n            yield content;\n          }\n        } catch (error: any) {\n          // Check if this is a tool call error with failed_generation\n          if (error?.error?.code === \"tool_use_failed\" && error?.error?.failed_generation) {\n            this.debug(\"Caught tool use failed error in streaming\", { error });\n\n            try {\n              const toolCalls = this.parseFailedGenerationToolCalls(error.error.failed_generation);\n              if (toolCalls && toolCalls.length > 0) {\n                // Update message with tool calls\n                const content = \"I'll help you with that calculation.\";\n                const updatedMessage = new Message({\n                  role: \"assistant\",\n                  content: content,\n                  toolCalls,\n                  cache: message.cache,\n                });\n                Object.assign(message, updatedMessage);\n\n                yield content;\n              }\n            } catch (parseError) {\n              this.error(\"Error parsing failed_generation\", {\n                parseError,\n                originalError: error,\n              });\n            }\n          } else {\n            this.error(\"Error during streaming\", { error });\n            throw error;\n          }\n        }\n      }.bind(this);\n\n      // Yield the stream and message\n      yield { stream: contentGenerator(), message };\n\n      // Add the message to the thread\n      thread.push(message);\n\n      // Return the updated thread\n      return thread;\n    } catch (error: any) {\n      this.error(\"Error preparing streaming message to Groq API\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Parse failed generation tool calls from error response\n   */\n  private parseFailedGenerationToolCalls(failedGeneration: string): ToolCall[] | null {\n    try {\n      // First, extract the JSON from the failed_generation which may be wrapped in tags\n      const jsonMatch = /<tool-use>([\\s\\S]*?)<\\/tool-use>/.exec(failedGeneration);\n\n      let jsonString: string;\n      if (jsonMatch && jsonMatch[1]) {\n        jsonString = jsonMatch[1].trim();\n      } else {\n        // If no tags, try to parse the whole string\n        jsonString = failedGeneration.trim();\n      }\n\n      // Parse the JSON\n      const parsed = JSON.parse(jsonString);\n\n      // Look for tool_calls in the parsed object\n      if (parsed.tool_calls && Array.isArray(parsed.tool_calls)) {\n        return parsed.tool_calls\n          .map((call: any) => {\n            // Get parameters from either parameters or function.parameters\n            const params = call.parameters || (call.function && call.function.parameters) || {};\n\n            // Get name from either name or function.name\n            const name = call.function?.name || call.name;\n\n            if (!name) {\n              this.error(\"Missing tool name in failed generation\", { call });\n              return null;\n            }\n\n            return {\n              toolUseId: call.id || nanoid(),\n              name,\n              arguments: params,\n            };\n          })\n          .filter(Boolean);\n      }\n\n      return null;\n    } catch (error) {\n      this.error(\"Error parsing failed generation\", { error, failedGeneration });\n      return null;\n    }\n  }\n\n  /**\n   * Format messages from the Thread object to the Groq API format\n   */\n  private formatMessagesForAPI(thread: Thread): any[] {\n    const messages: any[] = [];\n\n    for (const message of thread.all()) {\n      // Process attachments if they exist\n      if (message.attachments && message.attachments.length > 0) {\n        const contentParts: any[] = [];\n\n        // Add text content if it exists\n        if (message.content) {\n          contentParts.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n\n        // Add each attachment\n        for (const attachment of message.attachments) {\n          if (attachment.type === \"image\" && attachment.source.uri) {\n            contentParts.push({\n              type: \"image_url\",\n              image_url: {\n                url: attachment.source.uri,\n                detail: \"auto\",\n              },\n            });\n          }\n        }\n\n        // Groq has similar typing requirements as OpenAI for different roles\n        if (message.role === \"user\") {\n          messages.push({\n            role: \"user\",\n            content: contentParts,\n          });\n        } else if (message.role === \"assistant\") {\n          messages.push({\n            role: \"assistant\",\n            content: contentParts,\n          });\n        } else if (message.role === \"system\") {\n          messages.push({\n            role: \"system\",\n            content: contentParts,\n          });\n        }\n        continue;\n      }\n\n      // Handle tool results (these are created from user messages with toolResults)\n      if (message.toolResults && message.toolResults.length > 0) {\n        // First add the user message if it has content\n        if (message.content) {\n          messages.push({\n            role: \"user\",\n            content: message.content,\n          });\n        }\n\n        // Then add each tool result as a separate message\n        for (const toolResult of message.toolResults) {\n          const resultContent =\n            typeof toolResult.result === \"object\"\n              ? JSON.stringify(toolResult.result)\n              : String(toolResult.result);\n\n          messages.push({\n            role: \"tool\",\n            tool_call_id: toolResult.toolUseId,\n            content: resultContent,\n          });\n        }\n        continue;\n      }\n\n      // Handle tool calls in assistant messages\n      if (message.role === \"assistant\" && message.toolCalls && message.toolCalls.length > 0) {\n        const toolCalls = message.toolCalls.map((call) => ({\n          id: call.toolUseId,\n          type: \"function\" as const,\n          function: {\n            name: call.name,\n            arguments: JSON.stringify(call.arguments),\n          },\n        }));\n\n        messages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n          tool_calls: toolCalls,\n        });\n        continue;\n      }\n\n      // Default case for simple messages\n      if (message.role === \"user\") {\n        messages.push({\n          role: \"user\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"assistant\") {\n        messages.push({\n          role: \"assistant\",\n          content: message.content || \"\",\n        });\n      } else if (message.role === \"system\") {\n        messages.push({\n          role: \"system\",\n          content: message.content || \"\",\n        });\n      }\n    }\n\n    return messages;\n  }\n\n  /**\n   * Create tool definitions for the Groq API\n   */\n  private createToolDefinitions(tools: Tool[]): any[] {\n    return tools.map((tool) => ({\n      type: \"function\",\n      function: {\n        name: tool.getName(),\n        description: tool.getDescription(),\n        parameters: {\n          ...zodToJsonSchema(tool.getParameters()),\n          $schema: JSON_SCHEMA_URL,\n        },\n      },\n    }));\n  }\n\n  /**\n   * Parse tool calls from the Groq API response\n   */\n  private parseToolCalls(toolCalls?: any[]): ToolCall[] | undefined {\n    if (!toolCalls || toolCalls.length === 0) {\n      return undefined;\n    }\n\n    return toolCalls.map((toolCall) => {\n      if (toolCall.type === \"function\" && toolCall.function.name) {\n        try {\n          const args = JSON.parse(toolCall.function.arguments || \"{}\");\n          return {\n            toolUseId: toolCall.id,\n            name: toolCall.function.name,\n            arguments: args,\n          };\n        } catch (error) {\n          this.error(\"Error parsing tool call arguments\", {\n            error,\n            toolCall,\n          });\n          return {\n            toolUseId: toolCall.id,\n            name: toolCall.function.name,\n            arguments: {},\n          };\n        }\n      }\n\n      this.error(\"Unknown tool call type\", { toolCall });\n      return {\n        toolUseId: toolCall.id || nanoid(),\n        name: toolCall.function?.name || \"unknown\",\n        arguments: {},\n      };\n    });\n  }\n\n  async getModels() {\n    try {\n      const models = await this.client.models.list();\n      return models.data.map((model: any) => model.id);\n    } catch (error) {\n      this.error(\"Error getting models\", { error });\n      return [];\n    }\n  }\n}\n","import { TracerRegistry } from \"./registry\";\nimport type { Tracer } from \"./tracer\";\n\n/**\n * Configuration for tracing\n */\nexport interface TracingConfig {\n  /**\n   * Whether tracing is enabled\n   */\n  enabled: boolean;\n\n  /**\n   * Name of the tracer to use (must be registered first)\n   */\n  tracer?: string;\n\n  /**\n   * Global metadata to include with all traces\n   */\n  metadata?: Record<string, unknown>;\n}\n\n/**\n * Initialize tracing with the specified configuration\n *\n * @param config Tracing configuration\n */\nexport function initTracing(config: TracingConfig): void {\n  const registry = TracerRegistry.getInstance();\n\n  if (config.enabled && config.tracer) {\n    try {\n      registry.setActiveTracer(config.tracer);\n    } catch (error) {\n      console.warn(`Failed to set tracer '${config.tracer}'. Using null tracer instead.`);\n    }\n  }\n}\n\n/**\n * Register a custom tracer with the system\n *\n * @param name Name of the tracer\n * @param tracer The tracer implementation\n */\nexport function registerTracer(name: string, tracer: Tracer): void {\n  const registry = TracerRegistry.getInstance();\n  registry.register(name, tracer);\n}\n","// Re-export all adapters\nexport { LangSmithTracer, registerLangSmithTracer } from \"./langsmith\";\nexport { BraintrustTracer, registerBraintrustTracer } from \"./braintrust\";\n\n// You could add more adapters here in the future, such as:\n// export { OpenTelemetryTracer } from \"./opentelemetry\";\n// export { DatadogTracer } from \"./datadog\";\n// etc.\n","import type { TraceMetadata, Tracer } from \"../tracer\";\n\n/**\n * LangSmith tracer adapter\n *\n * This adapter requires the langsmith package to be installed by the user.\n * It's not included as a direct dependency of the library.\n */\nexport class LangSmithTracer implements Tracer {\n  /**\n   * Create a traceable function using LangSmith\n   *\n   * @param fn The function to trace\n   * @param metadata Metadata about the trace\n   * @returns The traced function\n   */\n  traceable<T extends (...args: any[]) => any>(fn: T, metadata: TraceMetadata): T {\n    try {\n      // Dynamic import to avoid requiring langsmith as a direct dependency\n      // Users need to install langsmith themselves to use this adapter\n      const langsmithModule = require(\"langsmith/traceable\");\n\n      // We'll use the traceable function from langsmith if available\n      if (typeof langsmithModule.traceable === \"function\") {\n        return langsmithModule.traceable(fn, metadata);\n      }\n\n      // Fallback to the original function if langsmith/traceable is not available\n      return fn;\n    } catch (error) {\n      // If langsmith is not installed, return the original function\n      console.warn(\"LangSmith not found. Install it with: npm install langsmith\");\n      return fn;\n    }\n  }\n}\n\n/**\n * Helper function to register the LangSmith tracer with the tracing registry\n *\n * @returns true if successfully registered, false otherwise\n */\nexport function registerLangSmithTracer(): boolean {\n  try {\n    // First, ensure langsmith is installed\n    require.resolve(\"langsmith\");\n\n    // Import the registry dynamically to avoid circular dependencies\n    const { TracerRegistry } = require(\"../registry\");\n    const registry = TracerRegistry.getInstance();\n\n    // Register the LangSmith tracer\n    registry.register(\"langsmith\", new LangSmithTracer());\n\n    return true;\n  } catch (error) {\n    console.warn(\"Failed to register LangSmith tracer. Make sure langsmith is installed.\");\n    return false;\n  }\n}\n","import type { TraceMetadata, Tracer } from \"../tracer\";\n\n/**\n * Braintrust tracer adapter\n *\n * This adapter requires the braintrust package to be installed by the user.\n * It's not included as a direct dependency of the library.\n */\nexport class BraintrustTracer implements Tracer {\n  private readonly options: Record<string, unknown>;\n  private readonly braintrustLib: typeof import(\"braintrust\") | null;\n\n  /**\n   * Create a new BraintrustTracer\n   *\n   * @param options Optional configuration options to pass to Braintrust\n   */\n  constructor(options: Record<string, unknown> = {}) {\n    this.options = options;\n\n    // Try to load Braintrust module\n    try {\n      this.braintrustLib = require(\"braintrust\");\n    } catch (error) {\n      console.warn(\"[BraintrustTracer] Could not load braintrust module:\", error);\n      this.braintrustLib = null;\n      return;\n    }\n\n    // Try to initialize Braintrust if not already done\n    try {\n      // Only initialize if API key is available\n      const apiKey = this.options.apiKey || process.env.BRAINTRUST_API_KEY;\n      if (apiKey && this.braintrustLib && typeof this.braintrustLib.initLogger === \"function\") {\n        this.braintrustLib.initLogger({\n          apiKey: apiKey as string,\n          projectName: (options.projectName as string) || \"default\",\n          ...this.options,\n        });\n      }\n    } catch (error) {\n      console.warn(\"[BraintrustTracer] Failed to initialize logger:\", error);\n    }\n  }\n\n  /**\n   * Format tracing options for Braintrust\n   *\n   * @param metadata The trace metadata\n   * @param runType The type of run (function, tool, llm)\n   * @returns Properly formatted options for Braintrust\n   */\n  private formatOptions(metadata: TraceMetadata, runType = \"function\"): Record<string, any> {\n    // Remove name from base options since it's used separately\n    const { name, apiKey, ...otherMetadata } = metadata;\n\n    // Base options\n    const options = {\n      type: runType,\n      name: name,\n      ...otherMetadata,\n    };\n\n    return options;\n  }\n\n  /**\n   * Create a traceable function using Braintrust\n   *\n   * @param fn The function to trace\n   * @param metadata Metadata about the trace\n   * @returns The traced function\n   */\n  traceable<T extends (...args: any[]) => any>(fn: T, metadata: TraceMetadata): T {\n    if (!this.braintrustLib) {\n      return fn;\n    }\n\n    try {\n      // Check if we have the appropriate wrapper functions\n      if (this.braintrustLib && typeof this.braintrustLib.wrapTraced === \"function\") {\n        // Get the run type, defaulting to \"function\"\n        const runType = metadata.run_type || \"function\";\n\n        // Format options for Braintrust\n        const options = this.formatOptions(metadata, runType);\n\n        // For tools, we need to make sure we handle input/output specifically\n        if (runType === \"tool\") {\n          return (async (...args: any[]) => {\n            try {\n              const result = await fn(...args);\n              if (!this.braintrustLib) return result;\n              const currentSpan = this.braintrustLib.currentSpan;\n              // Create a wrapped function that properly logs to Braintrust\n              const tracedFn = this.braintrustLib.wrapTraced(\n                // We need to name the function for Braintrust to properly name the span\n                Object.defineProperty(\n                  async function namedToolFunction(_args: any) {\n                    currentSpan().log({\n                      metadata: {\n                        ...options,\n                      },\n                    });\n                    return result;\n                  },\n                  \"name\",\n                  { ...args },\n                ),\n                options,\n              );\n              const tracedParams = {\n                input: metadata.input || args[0] || {},\n                output: result,\n                metadata: {\n                  tool_name: metadata.name,\n                  ...metadata,\n                },\n              };\n\n              return tracedFn(tracedParams.input);\n            } catch (error) {\n              console.error(`[BraintrustTracer] Error in tool '${metadata.name}':`, error);\n              throw error;\n            }\n          }) as unknown as T;\n        }\n\n        // For LLM calls, handle input/output differently\n        if (runType === \"llm\") {\n          // Use the provided aggregator if available\n          if (metadata.aggregator) {\n            // Wrap the function using wrapTraced\n            if (!this.braintrustLib) return fn;\n            const currentSpan = this.braintrustLib.currentSpan;\n            const wrappedFn = this.braintrustLib.wrapTraced(\n              // We need to name the function for Braintrust to properly name the span\n              Object.defineProperty(\n                function wrappedLLMFunction(...args: any[]) {\n                  currentSpan().log({\n                    metadata: {\n                      ...options,\n                    },\n                  });\n                  return fn(...args);\n                },\n                \"name\",\n                { value: metadata.name || \"anonymous_llm\" },\n              ),\n              options,\n            );\n\n            return wrappedFn as T;\n          }\n        }\n\n        // Default case for other function types\n        // Use a wrapper function that properly logs metadata using currentSpan().log()\n        const braintrustLib = this.braintrustLib;\n        const wrappedFn = this.braintrustLib.wrapTraced(\n          // We need to name the function for Braintrust to properly name the span\n          Object.defineProperty(\n            async function wrappedFunction(...args: any[]) {\n              if (!braintrustLib) return await fn(...args);\n              const currentSpan = braintrustLib.currentSpan();\n              \n              // Log input and metadata immediately when the function starts\n              if (currentSpan) {\n                // Extract input from metadata or use function args\n                const inputData = options.input || args[0] || args;\n                \n                // Log input separately\n                currentSpan.log({\n                  input: inputData\n                });\n                \n                // Log metadata separately\n                const { input, ...metadataWithoutInput } = options;\n                currentSpan.log({\n                  metadata: {\n                    ...metadataWithoutInput,\n                  }\n                });\n              }\n              \n              // Execute the original function\n              const result = await fn(...args);\n              \n              return result;\n            },\n            \"name\",\n            { value: metadata.name || \"anonymous_function\" },\n          ),\n          {\n            name: metadata.name || \"anonymous_function\",\n            type: \"function\",\n          },\n        );\n\n        return wrappedFn as T;\n      }\n\n      // Fallback to traced if wrapTraced is not available\n      if (this.braintrustLib && typeof this.braintrustLib.traced === \"function\") {\n        // Based on the Braintrust docs, traced should be used like this:\n        return (async (...args: any[]) => {\n          if (!this.braintrustLib) return await fn(...args);\n          return await this.braintrustLib.traced(() => {\n            return (async () => {\n              try {\n                // Call the original function\n                const result = await fn(...args);\n\n                return result;\n              } catch (error) {\n                console.error(`[BraintrustTracer] Error in trace for '${metadata.name}':`, error);\n                throw error;\n              }\n            })();\n          });\n        }) as unknown as T;\n      }\n\n      // Fallback to the original function if no tracing method is available\n      console.warn(\"[BraintrustTracer] No compatible tracing method found in braintrust module\");\n      return fn;\n    } catch (error) {\n      console.warn(\"[BraintrustTracer] Error setting up tracing:\", error);\n      return fn;\n    }\n  }\n}\n\n/**\n * Helper function to register the Braintrust tracer with the tracing registry\n *\n * @param options Optional configuration options to pass to Braintrust\n * @returns true if successfully registered, false otherwise\n */\nexport function registerBraintrustTracer(options: Record<string, unknown> = {}): boolean {\n  try {\n    // First, ensure braintrust is installed\n    require.resolve(\"braintrust\");\n\n    // Add API key from environment if not specified in options\n    const apiKey = options.apiKey || process.env.BRAINTRUST_API_KEY;\n    if (!apiKey) {\n      console.warn(\n        \"[BraintrustTracer] API key not found. Set BRAINTRUST_API_KEY environment variable or pass apiKey in options\",\n      );\n    }\n\n    // Import the registry dynamically to avoid circular dependencies\n    const { TracerRegistry } = require(\"../registry\");\n    const registry = TracerRegistry.getInstance();\n\n    // Register the Braintrust tracer with API key included\n    registry.register(\n      \"braintrust\",\n      new BraintrustTracer({\n        apiKey: apiKey,\n        ...options,\n      }),\n    );\n\n    return true;\n  } catch (error) {\n    console.warn(\n      \"[BraintrustTracer] Failed to register tracer. Make sure braintrust is installed:\",\n      error,\n    );\n    return false;\n  }\n}\n"],"mappings":"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","names":["EventSource","EventEmitter2","constructor","wildcard","forwardEvents","source","context","self","on","data","eventName","event","emit","debug","message","process","env","NODE_ENV","console","log","dir","depth","error","args","Message","_content","_role","_reasoning","_toolCalls","_toolResults","_attachments","_cache","constructor","content","role","toolCalls","toolResults","attachments","reasoning","cache","isToolResponse","length","isAssistantMessage","isUserMessage","isSystemMessage","isToolCall","getAttachmentsByType","type","filter","a","addAttachment","attachment","push","removeAttachment","index","splice","json","JSON","parse","codeBlockMatch","match","jsonMatch","NullTracer","defaultTracer","traceable","fn","_metadata","getTracer","TracerRegistry","getInstance","getActiveTracer","isTracingEnabled","instance","tracers","Map","activeTracer","register","defaultTracer","name","tracer","set","setActiveTracer","has","Error","get","traceable","fn","metadata","isTracingEnabled","getTracer","createValidationError","type","message","options","severity","index","suggestedFix","context","createValidationWarning","MessageValidationError","MessageProcessingError","DEFAULT_PROCESSING_CONTEXT","Error","constructor","validationErrors","processingContext","name","originalError","maxMessages","truncationStrategy","preserveSystemMessages","allowPartialConversations","enableAutoRepair","validationLevel","validateOnly","BaseModelDriver","EventSource","checkAbortSignal","abortSignal","aborted","Error","withAbortCheck","operation","result","wrapStreamWithAbort","stream","chunk","processMessages","messages","context","startTime","Date","now","finalContext","DEFAULT_PROCESSING_CONTEXT","validateInputMessages","preprocessResult","preprocessMessages","validateOnly","createProcessingResult","isValid","errors","warnings","repairsApplied","formattedMessages","formatMessagesForProvider","validationResult","validateConversation","validationLevel","MessageValidationError","length","error","messageCount","provider","constructor","name","MessageProcessingError","message","index","entries","role","includes","processedMessages","truncated","maxMessages","originalLength","truncationStrategy","slice","smartTruncate","emit","original","final","strategy","systemMessages","conversationMessages","preserveSystemMessages","filter","m","availableSlots","recentConversation","_finalMessages","_context","processing","originalCount","processedCount","processingTimeMs","validation","sendThread","thread","processingResult","all","enableAutoRepair","map","w","repairsCount","sendProcessedMessages","streamThread","streamProcessedMessages","import_nanoid","MAX_PROMPT_CHARACTERS","JSON_SCHEMA_URL","OpenAICompatibleDriver","BaseModelDriver","client","model","temperature","maxTokens","cache","responseSchema","providerName","constructor","config","baseUrl","Error","apiKey","getDefaultApiKey","baseClient","OpenAI","baseURL","trace","Proxy","get","target","prop","receiver","value","Reflect","chatTarget","chatProp","chatReceiver","chatValue","completionsTarget","completionsProp","completionsReceiver","completionsValue","traceable","bind","run_type","name","extractor","params","result","stream","input","messages","max_tokens","tools","length","streaming","output","choices","message","metrics","usage","prompt_tokens","completion_tokens","total_tokens","undefined","finish_reason","metadata","traceMetadata","getDefaultModel","formatMessagesForProvider","formattedMessages","role","content","push","type","text","attachments","attachment","source","uri","image_url","url","detail","assistantMessage","toolCalls","tool_calls","map","toolCall","id","toolUseId","nanoid","function","arguments","JSON","stringify","toolResults","toolResult","tool_call_id","validateConversation","context","errors","warnings","repairsApplied","processedMessages","i","hasContent","trim","enableAutoRepair","createValidationWarning","index","suggestedFix","createValidationError","severity","toolMessage","allowPartialConversations","toolCallStack","callIndex","findIndex","call","splice","unmatchedCall","error","tool_name","additionalValidation","performAdditionalValidation","isValid","_messages","_context","sendProcessedMessages","thread","processingResult","abortSignal","checkAbortSignal","totalCharacters","reduce","sum","msg","response_format","json_schema","schema","strict","getTools","createToolDefinitions","tool_choice","response","chat","completions","create","lastChoice","choice","Message","parseToolCalls","streamProcessedMessages","streamContent","createStreamGenerator","currentToolCalls","toolCallsStarted","chunk","wrapStreamWithAbort","delta","Object","defineProperty","writable","enumerable","configurable","existingCall","find","c","Date","now","parsedToolCalls","updatedMessage","assign","formatMessagesForAPI","all","tool","getName","description","getDescription","parameters","zodToJsonSchema","getParameters","$schema","args","parse","OpenAIThreadDriver","OpenAICompatibleDriver","getAvailableModels","constructor","config","baseUrl","providerName","getDefaultApiKey","process","env","OPENAI_API_KEY","getDefaultModel","import_nanoid","import_zod_to_json_schema","Anthropic","MAX_PROMPT_CHARACTERS","AnthropicThreadDriver","require","default","BaseModelDriver","client","model","temperature","maxTokens","cache","toolChoice","responseSchema","getAvailableModels","constructor","config","apiKey","process","env","ANTHROPIC_API_KEY","Error","baseClient","dangerouslyAllowBrowser","maxRetries","trace","Proxy","get","target","prop","receiver","value","Reflect","messagesTarget","messagesProp","messagesReceiver","messagesValue","traceable","bind","run_type","name","traceMetadata","aggregator","args","result","params","stream","input","messages","max_tokens","tools","length","streaming","output","content","metrics","usage","prompt_tokens","input_tokens","completion_tokens","output_tokens","total_tokens","undefined","finish_reason","stop_reason","formatMessagesForProvider","formattedMessages","message","role","contentBlocks","push","type","text","attachments","attachment","source","uri","startsWith","header","base64Data","split","mediaType","match","media_type","data","toolCalls","toolCall","id","toolUseId","arguments","toolResults","toolResult","tool_use_id","JSON","stringify","is_error","error","validateConversation","context","console","log","inputMessageCount","callStack","stack","slice","map","line","trim","timestamp","Date","now","errors","warnings","repairsApplied","processedMessages","i","Array","isArray","enableAutoRepair","createValidationWarning","index","createValidationError","severity","prevMessage","prevContent","currContent","splice","allowPartialConversations","toolUseStack","messageCount","messageIndex","isTargetId","callIndex","findIndex","call","removedFromStack","unmatchedToolUses","toolUseIds","t","hasTargetId","some","autoRepairEnabled","unmatchedUse","willAutoRepair","toolResultMessage","tool_name","toolName","placeholderContent","isValid","finalMessageCount","repairsAppliedCount","hasPlaceholderResults","m","c","isEmptyResponse","response","contentCount","outputTokens","countErrorPlaceholders","reduce","count","filter","truncateConversationWithErrors","errorCount","totalMessages","errorPlaceholders","shouldTruncate","systemMessages","nonSystemMessages","truncationIndex","Math","max","messageStartsWithOrphanedToolResult","recentMessages","truncatedMessages","originalCount","truncatedCount","systemMessagesKept","recentMessagesKept","errorsRemoved","sortMessagesByConversationFlow","toolUseToResultMap","Map","toolResultToUseMap","sortedMessages","set","processedIndices","Set","has","add","resultInfo","originalToolUseIndex","originalToolResultIndex","newToolResultPosition","originalLength","sortedLength","reorderedCount","size","extractSystemMessage","Boolean","join","sendProcessedMessages","thread","processingResult","abortSignal","validation","hasAbortSignal","systemMessage","all","originalMessages","flatMap","toolResultIds","processing","problematicToolId","searchingFor","toolUseFound","toolResultFound","toolUseMessageIndex","toolResultMessageIndex","forEach","msg","msgIndex","contentIndex","toolId","fullMessage","isError","contentPreview","substring","isProperlySeparated","messageGap","startIndex","endIndex","min","contextMessages","relativeIndex","absoluteIndex","contentSummary","totalCharacters","sum","s","checkAbortSignal","system","getTools","createToolDefinitions","tool_choice","description","input_schema","hasTools","toolCount","create","contentType","stopReason","isEmpty","hasErrors","retryParams","wasRetry","block","parseToolCalls","structuredCall","find","Message","tokenUsage","inputTokens","totalTokens","updateTokenUsage","debug","messageContent","hasToolCalls","toolCallCount","String","errorType","streamProcessedMessages","streamContent","createStreamGenerator","toolCallsStarted","currentToolCalls","contentAccumulated","chunk","delta","Object","assign","parsedToolCalls","updatedMessage","tool","getName","getDescription","zodToJsonSchema","getParameters","nanoid","toolResultId","orphanedId","availableToolUseIds","from","messageRole","contentTypes","import_nanoid","import_zod_to_json_schema","import_genai","DEFAULT_MODEL","MAX_PROMPT_CHARACTERS","GeminiThreadDriver","BaseModelDriver","genAI","model","temperature","maxTokens","cache","responseSchema","getAvailableModels","constructor","config","apiKey","process","env","GOOGLE_API_KEY","Error","baseClient","GoogleGenAI","trace","Proxy","get","target","prop","receiver","value","Reflect","modelsTarget","modelsProp","modelsReceiver","modelsValue","traceable","bind","run_type","name","traceMetadata","aggregator","args","result","params","input","contents","generationConfig","max_tokens","maxOutputTokens","tools","functionDeclarations","length","output","candidates","content","metrics","usageMetadata","prompt_tokens","promptTokenCount","completion_tokens","candidatesTokenCount","total_tokens","undefined","finish_reason","finishReason","_result","streaming","convertMessagesToGeminiFormat","messages","system","forEach","message","role","parts","push","text","attachments","attachment","type","source","uri","inlineData","mimeType","format","data","toolCalls","toolCall","functionCall","arguments","toolResults","toolResult","functionResponse","response","parseToolCalls","part","toolUseId","nanoid","formatMessagesForProvider","map","m","validateConversation","formattedMessages","_context","errors","warnings","repairsApplied","isValid","sendProcessedMessages","thread","_processingResult","abortSignal","sendThreadLegacy","streamProcessedMessages","streamThreadLegacy","sendThread","all","checkAbortSignal","totalContent","join","getTools","createToolConfig","generateContentConfig","topP","safetySettings","category","threshold","toolConfig","toolChoice","responseMimeType","contentParams","models","generateContent","candidate","responseText","responseMessage","Message","inputTokens","outputTokens","debug","totalTokens","error","errorMessage","tool","getName","description","getDescription","parameters","zodToJsonSchema","getParameters","streamThread","initialMessage","streamingResponse","generateContentStream","stream","createStreamProcessor","accumulatedText","chunk","newText","endsWith","_content","_toolCalls","import_nanoid","import_zod_to_json_schema","MAX_PROMPT_CHARACTERS","CerebrasThreadDriver","BaseModelDriver","client","model","temperature","maxTokens","cache","disableParallelToolCalls","responseSchema","getAvailableModels","constructor","config","apiKey","process","env","CEREBRAS_API_KEY","Error","baseClient","Cerebras","trace","Proxy","get","target","prop","receiver","value","Reflect","chatTarget","chatProp","chatReceiver","chatValue","completionsTarget","completionsProp","completionsReceiver","completionsValue","traceable","bind","run_type","name","traceMetadata","aggregator","args","result","params","stream","input","messages","max_tokens","tools","length","streaming","output","choices","message","content","metrics","usage","prompt_tokens","completion_tokens","total_tokens","undefined","finish_reason","formatMessagesForProvider","formattedMessages","attachments","contentParts","push","type","text","attachment","source","uri","image_url","url","detail","role","toolResults","toolResult","tool_call_id","toolUseId","JSON","stringify","toolCalls","map","call","id","function","arguments","tool_calls","validateConversation","context","errors","warnings","repairsApplied","processedMessages","i","enableAutoRepair","createValidationWarning","index","createValidationError","severity","allowPartialConversations","toolCallStack","toolCall","callIndex","findIndex","splice","unmatchedCall","error","tool_name","availableModels","includes","isValid","sendProcessedMessages","thread","processingResult","abortSignal","checkAbortSignal","totalCharacters","reduce","sum","msg","console","log","cleanedSchema","cleanResponseSchemaForCerebras","validateSchemaForCerebras","response_format","json_schema","strict","schema","getTools","createToolDefinitions","parallel_tool_calls","tool_choice","response","chat","completions","create","lastChoice","choice","parsed","parse","schemaProperties","properties","shouldUpdate","opportunities","Message","parseToolCalls","parseEmbeddedToolCalls","code","failed_generation","debug","failedGeneration","parameters","toolName","toolArgs","matchingTool","find","t","getName","nanoid","executeTool","success","assistantMessage","toolResultMessage","finalMessage","inputTokens","outputTokens","totalTokens","toolError","parsingError","streamProcessedMessages","streamResponse","createAsyncIterableFromResponse","streamContent","createStreamGenerator","toolCallsStarted","currentToolCalls","chunk","delta","updatedMessage","Object","assign","existingCall","c","func","parsedToolCalls","embeddedToolCalls","tool","zodToJsonSchema","getParameters","cleanedProperties","cleanSchemaForCerebras","description","getDescription","required","cleaned","unsupportedFields","Set","key","entries","cleanedValue","propKey","propValue","has","items","temp","removeUnsupportedFields","anyOf","hasNullType","some","subSchema","nonNullSchemas","filter","additionalProperties","originalRequired","validRequiredFields","field","fieldSchema","hasNullInAnyOf","keys","firstProperty","Array","isArray","item","Symbol","asyncIterator","object","created","Date","now","jsonRegex","matches","match","parseError","exports","module","RetryOperation","timeouts","options","forever","_originalTimeouts","JSON","parse","stringify","_timeouts","_options","_maxRetryTime","maxRetryTime","Infinity","_fn","_errors","_attempts","_operationTimeout","_operationTimeoutCb","_timeout","_operationStart","_timer","_cachedTimeouts","slice","prototype","reset","stop","clearTimeout","retry","err","currentTime","Date","getTime","push","unshift","Error","timeout","shift","undefined","splice","length","self","setTimeout","unref","attempt","fn","timeoutOps","cb","try","console","log","start","errors","attempts","mainError","counts","mainErrorCount","i","error","message","count","exports","RetryOperation","require","operation","options","timeouts","forever","retries","Infinity","unref","maxRetryTime","Array","concat","opts","factor","minTimeout","maxTimeout","randomize","key","Error","i","push","createTimeout","length","sort","a","b","attempt","random","Math","timeout","round","max","pow","min","wrap","obj","methods","method","original","retryWrapper","op","args","prototype","slice","call","arguments","callback","pop","err","retry","mainError","apply","bind","module","exports","require","exports","module","retry","require","networkErrorMsgs","AbortError","Error","constructor","message","originalError","stack","name","decorateErrorWithCounts","error","attemptNumber","options","retriesLeft","retries","isNetworkError","errorMessage","includes","pRetry","input","Promise","resolve","reject","onFailedAttempt","operation","attempt","TypeError","stop","mainError","default","exports","module","has","Object","prototype","hasOwnProperty","prefix","Events","create","__proto__","EE","fn","context","once","addListener","emitter","event","TypeError","listener","evt","_events","_eventsCount","push","clearEvent","EventEmitter","eventNames","names","events","name","call","slice","getOwnPropertySymbols","concat","listeners","handlers","i","l","length","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","len","arguments","args","removeListener","undefined","apply","j","on","removeAllListeners","off","prefixed","exports","module","promise","onFinally","then","val","Promise","resolve","err","exports","module","pFinally","require","TimeoutError","Error","constructor","message","name","pTimeout","promise","milliseconds","fallback","Promise","resolve","reject","TypeError","Infinity","timer","setTimeout","error","timeoutError","cancel","then","clearTimeout","default","exports","Object","defineProperty","value","lowerBound","array","comparator","first","count","length","step","it","default","exports","Object","defineProperty","value","lower_bound_1","require","PriorityQueue","constructor","_queue","enqueue","run","options","assign","priority","element","size","push","index","default","a","b","splice","dequeue","item","shift","filter","map","length","exports","Object","defineProperty","value","EventEmitter","require","p_timeout_1","priority_queue_1","empty","timeoutError","TimeoutError","PQueue","constructor","options","_a","_b","_c","_d","_intervalCount","_intervalEnd","_pendingCount","_resolveEmpty","_resolveIdle","assign","carryoverConcurrencyCount","intervalCap","Infinity","interval","concurrency","autoStart","queueClass","default","TypeError","toString","undefined","Number","isFinite","_carryoverConcurrencyCount","_isIntervalIgnored","_intervalCap","_interval","_queue","_queueClass","_timeout","timeout","_throwOnTimeout","throwOnTimeout","_isPaused","_doesIntervalAllowAnother","_doesConcurrentAllowAnother","_concurrency","_next","_tryToStartAnother","emit","_resolvePromises","_onResumeInterval","_onInterval","_initializeIntervalIfNeeded","_timeoutId","_isIntervalPaused","now","Date","_intervalId","delay","setTimeout","size","clearInterval","canInitializeInterval","job","dequeue","setInterval","_processQueue","newConcurrency","add","fn","Promise","resolve","reject","run","operation","error","enqueue","addAll","functions","all","map","function_","start","pause","clear","onEmpty","existingResolve","onIdle","sizeBy","filter","length","pending","isPaused","milliseconds","exports","fetch","exports","error","reject","exports","exports","o","uuid","exports","exports","module","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","Number","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","exports","module","debug","process","env","NODE_DEBUG","test","args","console","error","exports","module","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","MAX_LENGTH","require","debug","re","safeRe","src","safeSrc","t","R","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRegex","value","token","max","split","join","createToken","name","isGlobal","safe","index","RegExp","undefined","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","exports","module","looseOption","Object","freeze","loose","emptyOpts","parseOptions","options","exports","module","numeric","compareIdentifiers","a","b","anum","test","bnum","rcompareIdentifiers","exports","module","debug","require","MAX_LENGTH","MAX_SAFE_INTEGER","safeRe","re","safeSrc","src","t","parseOptions","compareIdentifiers","SemVer","constructor","version","options","loose","includePrerelease","TypeError","length","m","trim","match","LOOSE","FULL","raw","major","minor","patch","prerelease","split","map","id","test","num","build","format","join","toString","compare","other","compareMain","comparePre","i","a","b","undefined","compareBuild","inc","release","identifier","identifierBase","startsWith","Error","r","RegExp","PRERELEASELOOSE","PRERELEASE","base","Number","push","isNaN","exports","module","SemVer","require","parse","version","options","throwErrors","er","exports","module","parse","require","valid","version","options","v","exports","module","parse","require","clean","version","options","s","trim","replace","exports","module","SemVer","require","inc","version","release","options","identifier","identifierBase","undefined","er","exports","module","parse","require","diff","version1","version2","v1","v2","comparison","compare","v1Higher","highVersion","lowVersion","highHasPre","prerelease","length","lowHasPre","patch","minor","compareMain","prefix","major","exports","module","SemVer","require","major","a","loose","exports","module","SemVer","require","minor","a","loose","exports","module","SemVer","require","patch","a","loose","exports","module","parse","require","prerelease","version","options","parsed","length","exports","module","SemVer","require","compare","a","b","loose","exports","module","compare","require","rcompare","a","b","loose","exports","module","compare","require","compareLoose","a","b","exports","module","SemVer","require","compareBuild","a","b","loose","versionA","versionB","compare","exports","module","compareBuild","require","sort","list","loose","a","b","exports","module","compareBuild","require","rsort","list","loose","sort","a","b","exports","module","compare","require","gt","a","b","loose","exports","module","compare","require","lt","a","b","loose","exports","module","compare","require","eq","a","b","loose","exports","module","compare","require","neq","a","b","loose","exports","module","compare","require","gte","a","b","loose","exports","module","compare","require","lte","a","b","loose","exports","module","eq","require","neq","gt","gte","lt","lte","cmp","a","op","b","loose","version","TypeError","exports","module","SemVer","require","parse","safeRe","re","t","coerce","version","options","String","match","rtl","includePrerelease","COERCEFULL","COERCE","coerceRtlRegex","COERCERTLFULL","COERCERTL","next","exec","index","length","lastIndex","major","minor","patch","prerelease","build","exports","module","LRUCache","constructor","max","map","Map","get","key","value","undefined","delete","set","deleted","size","firstKey","keys","next","exports","module","SPACE_CHARACTERS","Range","constructor","range","options","parseOptions","loose","includePrerelease","raw","Comparator","value","set","formatted","undefined","trim","replace","split","map","r","parseRange","filter","c","length","TypeError","first","isNullSet","isAny","i","comps","k","toString","format","memoOpts","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","memoKey","cached","cache","get","hr","re","t","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","debug","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","comp","parseComparator","join","replaceGTE0","match","COMPARATORLOOSE","rangeMap","Map","comparators","size","has","delete","result","values","intersects","some","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","test","version","SemVer","er","testSet","LRU","require","safeRe","remainingComparators","slice","testComparator","pop","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","id","toLowerCase","replaceTilde","TILDELOOSE","TILDE","_","M","m","p","pr","ret","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","from","fM","fm","fp","fpr","fb","to","tM","tm","tp","tpr","prerelease","semver","ANY","allowed","major","minor","patch","exports","module","ANY","Symbol","Comparator","constructor","comp","options","parseOptions","loose","value","trim","split","join","debug","parse","semver","operator","version","r","re","t","COMPARATORLOOSE","COMPARATOR","m","match","TypeError","undefined","SemVer","toString","test","er","cmp","intersects","Range","includePrerelease","startsWith","includes","require","safeRe","exports","module","Range","require","satisfies","version","range","options","er","test","exports","module","Range","require","toComparators","range","options","set","map","comp","c","value","join","trim","split","exports","module","SemVer","require","Range","maxSatisfying","versions","range","options","max","maxSV","rangeObj","er","forEach","v","test","compare","exports","module","SemVer","require","Range","minSatisfying","versions","range","options","min","minSV","rangeObj","er","forEach","v","test","compare","exports","module","SemVer","require","Range","gt","minVersion","range","loose","minver","test","i","set","length","comparators","setMin","forEach","comparator","compver","semver","version","operator","prerelease","patch","push","raw","format","Error","require_valid","exports","module","Range","require","validRange","range","options","er","exports","module","SemVer","require","Comparator","ANY","Range","satisfies","gt","lt","lte","gte","outside","version","range","hilo","options","gtfn","ltefn","ltfn","comp","ecomp","TypeError","i","set","length","comparators","high","low","forEach","comparator","semver","operator","exports","module","outside","require","gtr","version","range","options","exports","module","outside","require","ltr","version","range","options","exports","module","Range","require","intersects","r1","r2","options","exports","module","satisfies","require","compare","versions","range","options","set","first","prev","v","sort","a","b","version","included","push","ranges","min","max","simplified","join","original","raw","String","length","exports","module","Range","require","Comparator","ANY","satisfies","compare","subset","sub","dom","options","sawNonNull","OUTER","simpleSub","set","simpleDom","isSub","simpleSubset","minimumVersionWithPreRelease","minimumVersion","length","semver","includePrerelease","eqSet","Set","gt","lt","c","operator","higherGT","lowerLT","add","size","gtltComp","eq","String","higher","lower","hasDomLT","hasDomGT","needDomLTPre","prerelease","needDomGTPre","major","minor","patch","a","b","comp","require_semver","exports","module","internalRe","require","constants","SemVer","identifiers","parse","valid","clean","inc","diff","major","minor","patch","prerelease","compare","rcompare","compareLoose","compareBuild","sort","rsort","gt","lt","eq","neq","gte","lte","cmp","coerce","Comparator","Range","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","intersects","simplifyRange","subset","re","src","tokens","t","SEMVER_SPEC_VERSION","RELEASE_TYPES","compareIdentifiers","rcompareIdentifiers","exports","exports","exports","defaultOptions","exports","o","uuid","path","batchItems","attachments","error","filter","projects","datasetId_","datasetName_","response","examples","remove","require_dist","exports","exports","getEnv","require_env","exports","isTracingEnabled","require_constants","exports","exports","o","uuid","value","error","exports","reject","exports","isAsyncIterable","require_traceable","exports","traceable","extractAttachments","reject","error","target","prop","receiver","next","path","currentRunTree","require_traceable","exports","module","exports","module","s","m","h","d","w","y","val","options","type","length","parse","isFinite","long","fmtLong","fmtShort","Error","JSON","stringify","str","String","match","exec","n","parseFloat","toLowerCase","undefined","ms","msAbs","Math","abs","round","plural","name","isPlural","exports","module","setup","env","createDebug","debug","default","coerce","disable","enable","enabled","humanize","require","destroy","Object","keys","forEach","key","names","skips","formatters","selectColor","namespace","hash","i","length","charCodeAt","colors","Math","abs","prevTime","enableOverride","namespacesCache","enabledCache","args","self","curr","Number","Date","ms","diff","prev","unshift","index","replace","match","format","formatter","val","call","splice","formatArgs","logFn","log","apply","useColors","color","extend","defineProperty","enumerable","configurable","get","namespaces","set","v","init","delimiter","newDebug","save","split","trim","filter","Boolean","ns","push","slice","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","map","join","name","skip","Error","stack","message","console","warn","load","exports","module","formatArgs","save","load","useColors","storage","localstorage","destroy","warned","console","warn","colors","window","process","type","__nwjs","navigator","userAgent","toLowerCase","match","m","document","documentElement","style","WebkitAppearance","firebug","exception","table","parseInt","args","namespace","humanize","diff","c","color","splice","index","lastC","replace","log","debug","namespaces","setItem","removeItem","error","r","getItem","env","DEBUG","localStorage","require","formatters","j","v","JSON","stringify","message","exports","module","flag","argv","process","prefix","startsWith","length","position","indexOf","terminatorPosition","exports","module","os","require","tty","hasFlag","env","process","forceColor","FORCE_COLOR","length","Math","min","parseInt","translateLevel","level","hasBasic","has256","has16m","supportsColor","haveStream","streamIsTTY","undefined","TERM","platform","osRelease","release","split","Number","some","sign","CI_NAME","test","TEAMCITY_VERSION","COLORTERM","version","TERM_PROGRAM_VERSION","TERM_PROGRAM","getSupportLevel","stream","isTTY","stdout","isatty","stderr","exports","module","tty","require","util","init","log","formatArgs","save","load","useColors","destroy","deprecate","colors","supportsColor","stderr","level","error","inspectOpts","Object","keys","process","env","filter","key","test","reduce","obj","prop","substring","toLowerCase","replace","_","k","toUpperCase","val","Number","Boolean","isatty","fd","args","namespace","name","c","color","colorCode","prefix","split","join","push","humanize","diff","getDate","hideDate","Date","toISOString","write","formatWithOptions","namespaces","DEBUG","debug","i","length","formatters","o","v","inspect","map","str","trim","O","exports","module","process","type","browser","__nwjs","require","log","path","stat","exists","exports","__export","deferred","error","exports","path","trimmed","filter","commands","parser","parsers","parse","error","mode","fallback","append","debug","onError","log","next","disallowedCommand","_a","input","_b","import_promise_deferred","__esm","ExitCodes","__export","CheckRepoActions","CleanOptions","GitConfigScope","DiffNameStatus","ResetMode","excludeOptions","__commonJS","exports","module","GitExecutor","__toCommonJS","SimpleGitApi","Scheduler","configurationErrorTask","asArray","filterArray","filterPrimitives","filterString","filterStringOrStringArray","filterType","getTrailingOptions","trailingFunctionArgument","trailingOptionsArgument","applyPatchTask","branchTask","branchLocalTask","deleteBranchesTask","deleteBranchTask","checkIgnoreTask","checkIsRepoTask","cloneTask","cloneMirrorTask","cleanWithOptionsTask","isCleanOptionsArray","diffSummaryTask","fetchTask","moveTask","pullTask","pushTagsTask","addRemoteTask","getRemotesTask","listRemotesTask","remoteTask","removeRemoteTask","getResetMode","resetTask","stashListTask","addSubModuleTask","initSubModuleTask","subModuleTask","updateSubModuleTask","addAnnotatedTagTask","addTagTask","tagListTask","straightThroughBufferTask","straightThroughStringTask","Git","plugin","path","_a","_a2","import_zod","z2","z3","exports","Object","defineProperty","value","isAnyZodType","isZodType","schema","typeName","_a","_def","exports","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","defineProperty","value","extendZodWithOpenApi","zod_is_type_1","require","preserveMetadataFromModifier","zod","modifier","zodModifier","ZodType","args","result","apply","_def","openapi","refOrOpenapi","metadata","_a","_b","_c","_d","_e","_f","_g","param","restOfOpenApi","_internal","assign","refId","undefined","resultMetadata","constructor","keys","isZodType","originalExtend","extend","extendedResult","extendedFrom","schema","zodDeepPartial","ZodObject","deepPartial","initialShape","shape","resultShape","entries","forEach","key","zodPick","pick","zodOmit","omit","exports","Object","defineProperty","value","ObjectSet","isEqual","x","y","undefined","valueOf","Array","isArray","length","keysX","keys","every","keyY","indexOf","key","constructor","buckets","Map","put","hashCode","hashCodeOf","itemsByCode","get","set","alreadyHasItem","some","_","push","contains","values","flat","stats","totalBuckets","totalValues","collisions","bucket","hashEffectiveness","object","i","charCodeAt","entries","exports","Object","defineProperty","value","isString","uniq","objectEquals","compact","omitBy","omit","mapValues","isNil","isUndefined","object_set_1","require","undefined","object","mapper","result","entries","forEach","key","keys","some","keyToOmit","predicate","arr","filter","elem","isEqual","values","set","ObjectSet","put","val","exports","Object","defineProperty","value","getOpenApiMetadata","lodash_1","require","zodSchema","_a","_b","omitBy","_def","openapi","metadata","isNil","exports","Object","defineProperty","value","OpenAPIRegistry","constructor","parents","_definitions","definitions","_a","_b","parentDefinitions","flatMap","par","register","refId","zodSchema","schemaWithRefId","push","type","schema","registerParameter","_c","currentMetadata","_def","openapi","metadata","schemaWithMetadata","assign","param","name","registerPath","route","registerWebhook","webhook","registerComponent","component","componentType","ref","$ref","exports","Object","defineProperty","value","UnknownZodTypeError","MissingParameterDataError","ConflictError","ZodToOpenAPIError","constructor","message","data","missingField","exports","Object","defineProperty","value","enumInfo","enumObject","keysExceptReverseMappings","keys","filter","key","values","map","numericCount","_","length","type","exports","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","defineProperty","value","OpenAPIGenerator","errors_1","require","enum_info_1","lodash_1","zod_is_type_1","constructor","definitions","versionSpecifics","schemaRefs","paramRefs","pathRefs","rawComponents","sortDefinitions","generateDocumentData","forEach","definition","generateSingle","components","buildComponents","paths","generateComponents","_a","_b","componentType","name","component","assign","schemas","parameters","generationOrder","sort","left","right","leftIndex","findIndex","type","rightIndex","generateSchema","generateParameterDefinition","schema","generateSingleRoute","route","push","zodSchema","refId","getRefId","result","generateParameter","getParameterRef","schemaMetadata","external","_c","_d","_e","parameterMetadata","metadata","param","existingRef","_internal","undefined","in","ConflictError","key","values","compact","$ref","generateInlineParameters","location","getMetadata","referencedSchema","isZodType","propTypes","_def","shape","entries","map","innerMetadata","innerParameterMetadata","openapi","generateSimpleParameter","getParamMetadata","paramMetadata","required","isOptionalSchema","isNullable","generateSchemaWithRef","buildParameterMetadata","paramName","paramLocation","MissingParameterDataError","missingField","baseParameter","generateSchemaWithMetadata","innerSchema","unwrapChained","defaultValue","getDefaultValue","toOpenAPISchema","applySchemaMetadata","omitBy","isNil","generateSimpleSchema","schemaRef","referenceObject","generateSchemaRef","newMetadata","buildSchemaMetadata","objectEquals","allOf","newSchemaMetadata","constructReferencedOpenAPISchema","appliedMetadata","keys","getRequestBody","requestBody","content","rest","requestBodyContent","getBodyContent","getParameters","request","query","params","headers","cookies","queryParameters","enhanceMissingParametersError","pathParameters","cookieParameters","headerParameters","flatMap","header","generatePath","method","path","responses","pathItemConfig","generatedResponses","mapValues","response","getResponse","body","routeDoc","responseContent","responseHeaders","getResponseHeaders","schemaShape","_","config","isAnyZodType","configSchema","getZodStringCheck","zodString","kind","checks","find","check","mapStringFormat","isUUID","isEmail","isURL","isDatetime","mapDiscriminator","zodObjects","discriminator","some","obj","mapping","enumValue","literalValue","Error","propertyName","mapNullableOfArray","objects","mapNullableType","getNumberChecks","isNullableSchema","nullType","regexCheck","maxLength","Number","isFinite","minLength","format","pattern","regex","source","default","isInt","enum","enumInfo","ZodToOpenAPIError","toOpenAPIObjectSchema","itemType","items","minItems","maxItems","tupleLength","uniqueSchemas","uniq","anyOf","options","flattenUnionTypes","optionToGenerate","unwrapNullable","optionSchema","oneOf","subtypes","flattenIntersectionTypes","allOfSchema","propertiesType","valueType","keyType","propertiesSchema","filter","isString","properties","reduce","acc","curr","additionalProperties","UnknownZodTypeError","currentSchema","schemaName","isOptional","unwrap","requiredKeysOf","objectSchema","_key","_type","extendedFrom","getInternalMetadata","generateAdditionalProperties","parent","keysRequiredByParent","propsOfParent","propertiesToAdd","fromEntries","additionallyRequired","prop","includes","objectData","unknownKeysOption","unknownKeys","catchallSchema","catchall","option","leftSubTypes","rightSubTypes","innerType","omit","zodDescription","description","initialData","action","paramsToAdd","error","data","exports","Object","defineProperty","value","OpenApiGeneratorV30Specifics","nullType","nullable","mapNullableOfArray","objects","isNullable","mapNullableType","type","assign","undefined","getNumberChecks","checks","map","check","kind","inclusive","minimum","Number","exclusiveMinimum","maximum","exclusiveMaximum","require_openapi_generator","exports","Object","defineProperty","value","OpenApiGeneratorV3","openapi_generator_1","require","specifics_1","constructor","definitions","specifics","OpenApiGeneratorV30Specifics","generator","OpenAPIGenerator","generateDocument","config","baseData","generateDocumentData","assign","generateComponents","require_specifics","exports","Object","defineProperty","value","OpenApiGeneratorV31Specifics","nullType","type","mapNullableOfArray","objects","isNullable","mapNullableType","Array","isArray","getNumberChecks","checks","assign","map","check","kind","inclusive","minimum","Number","exclusiveMinimum","maximum","exclusiveMaximum","require_openapi_generator","exports","Object","defineProperty","value","OpenApiGeneratorV31","openapi_generator_1","require","specifics_1","isWebhookDefinition","definition","type","constructor","definitions","webhookRefs","specifics","OpenApiGeneratorV31Specifics","generator","OpenAPIGenerator","generateDocument","config","baseDocument","generateDocumentData","filter","forEach","generateSingleWebhook","webhook","assign","webhooks","generateComponents","route","routeDoc","generatePath","path","require_dist","exports","__createBinding","Object","create","o","m","k","k2","undefined","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","defineProperty","__exportStar","p","prototype","hasOwnProperty","call","value","OpenApiGeneratorV31","OpenApiGeneratorV3","OpenAPIRegistry","extendZodWithOpenApi","zod_extensions_1","require","openapi_registry_1","openapi_generator_1","openapi_generator_2","z11","_a2","z12","TRANSACTION_ID_FIELD","import_zod","import_zod_to_openapi","_a","IS_MERGE_FIELD","MERGE_PATHS_FIELD","VALID_SOURCES","init_dist","z2","extendZodWithOpenApi2","z3","extendZodWithOpenApi3","z4","extendZodWithOpenApi4","z5","z6","extendZodWithOpenApi5","z7","z8","extendZodWithOpenApi6","z9","extendZodWithOpenApi7","z10","extendZodWithOpenApi8","extendZodWithOpenApi9","z13","exports","module","__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","headers_exports","CITY_HEADER_NAME","COUNTRY_HEADER_NAME","EMOJI_FLAG_UNICODE_STARTING_POSITION","IP_HEADER_NAME","LATITUDE_HEADER_NAME","LONGITUDE_HEADER_NAME","POSTAL_CODE_HEADER_NAME","REGION_HEADER_NAME","REQUEST_ID_HEADER_NAME","geolocation","ipAddress","getHeader","headers","getHeaderWithDecode","request","header","decodeURIComponent","getFlag","countryCode","regex","RegExp","test","String","fromCodePoint","split","map","char","charCodeAt","input","getRegionFromRequestId","requestId","city","country","flag","countryRegion","region","latitude","longitude","postalCode","exports","module","__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","get_env_exports","getEnv","env","process","VERCEL","CI","VERCEL_ENV","VERCEL_URL","VERCEL_BRANCH_URL","VERCEL_PROJECT_PRODUCTION_URL","VERCEL_REGION","VERCEL_DEPLOYMENT_ID","VERCEL_SKEW_PROTECTION_ENABLED","VERCEL_AUTOMATION_BYPASS_SECRET","VERCEL_GIT_PROVIDER","VERCEL_GIT_REPO_SLUG","VERCEL_GIT_REPO_OWNER","VERCEL_GIT_REPO_ID","VERCEL_GIT_COMMIT_REF","VERCEL_GIT_COMMIT_SHA","VERCEL_GIT_COMMIT_MESSAGE","VERCEL_GIT_COMMIT_AUTHOR_LOGIN","VERCEL_GIT_COMMIT_AUTHOR_NAME","VERCEL_GIT_PREVIOUS_SHA","VERCEL_GIT_PULL_REQUEST_ID","exports","module","__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","get_context_exports","SYMBOL_FOR_REQ_CONTEXT","getContext","Symbol","for","fromSymbol","globalThis","exports","module","__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","wait_until_exports","waitUntil","import_get_context","require","promise","then","TypeError","getContext","exports","module","__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","middleware_exports","next","rewrite","handleMiddlewareField","init","headers","request","Headers","Error","keys","set","push","join","destination","String","Response","exports","module","__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","src_exports","geolocation","import_headers","getEnv","import_get_env","ipAddress","next","import_middleware","rewrite","waitUntil","import_wait_until","require","isArray","objectToString","cache","parse","clearCache","render","createParser","onParse","isFirstChunk","buffer","startingPosition","startingFieldLength","eventId","eventName","data","reset","feed","chunk","hasBom","slice","BOM","length","position","discardTrailingNewline","lineLength","fieldLength","character","index","parseEventStreamLine","lineBuffer","type","id","event","noValue","field","step","valueLength","value","toString","concat","includes","retry","parseInt","Number","isNaN","every","charCode","charCodeAt","init_dist","exports","module","exports","module","cssKeywords","require","reverseKeywords","key","Object","keys","convert","rgb","channels","labels","hsl","hsv","hwb","cmyk","xyz","lab","lch","hex","keyword","ansi16","ansi256","hcg","apple","gray","model","Error","length","defineProperty","value","r","g","b","min","Math","max","delta","h","s","l","rdif","gdif","bdif","v","diff","diffc","c","w","k","m","y","comparativeDistance","x","reversed","currentClosestDistance","Infinity","currentClosestKeyword","distance","z","a","t2","t3","val","t1","i","smin","lmin","sv","hi","floor","f","p","q","t","vmin","sl","wh","bl","ratio","n","y2","x2","z2","hr","atan2","PI","sqrt","cos","sin","args","saturation","round","ansi","color","mult","rem","integer","string","toString","toUpperCase","substring","match","colorString","split","map","char","join","parseInt","chroma","grayscale","hue","pure","mg","exports","module","conversions","require","buildGraph","graph","models","Object","keys","len","length","i","distance","parent","deriveBFS","fromModel","queue","current","pop","adjacents","adjacent","node","unshift","link","from","to","args","wrapConversion","toModel","path","fn","cur","conversion","exports","module","conversions","require","route","convert","models","Object","keys","wrapRaw","fn","wrappedFn","args","arg0","undefined","length","conversion","wrapRounded","result","len","i","Math","round","forEach","fromModel","defineProperty","value","channels","labels","routes","routeModels","toModel","raw","exports","module","wrapAnsi16","fn","offset","args","code","wrapAnsi256","wrapAnsi16m","rgb","ansi2ansi","n","rgb2rgb","r","g","b","setLazyProperty","object","property","get","Object","defineProperty","value","enumerable","configurable","colorConvert","makeDynamicStyles","wrap","targetSpace","identity","isBackground","undefined","require","styles","sourceSpace","suite","entries","name","assembleStyles","codes","Map","modifier","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","color","black","red","green","yellow","blue","magenta","cyan","white","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgColor","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","gray","bgGray","grey","bgGrey","groupName","group","styleName","style","open","close","set","exports","module","stringReplaceAll","string","substring","replacer","index","indexOf","substringLength","length","endIndex","returnValue","substr","stringEncaseCRLFWithFirstIndex","prefix","postfix","gotCR","exports","module","TEMPLATE_REGEX","STYLE_REGEX","STRING_REGEX","ESCAPE_REGEX","ESCAPES","Map","unescape","c","u","bracket","length","String","fromCharCode","parseInt","slice","fromCodePoint","get","parseArguments","name","arguments_","results","chunks","trim","split","matches","chunk","number","Number","isNaN","push","match","replace","m","escape","character","Error","parseStyle","style","lastIndex","exec","args","concat","buildStyle","chalk","styles","enabled","layer","inverse","current","styleName","Object","entries","Array","isArray","temporary","escapeCharacter","close","string","join","pop","errMessage","exports","module","ansiStyles","require","stdout","stdoutColor","stderr","stderrColor","stringReplaceAll","stringEncaseCRLFWithFirstIndex","isArray","Array","levelMapping","styles","Object","create","applyOptions","object","options","level","Number","isInteger","Error","colorLevel","undefined","ChalkClass","constructor","chalkFactory","chalk","template","arguments_","chalkTag","setPrototypeOf","Chalk","prototype","Instance","styleName","style","entries","get","builder","createBuilder","createStyler","open","close","_styler","_isEmpty","defineProperty","value","visible","usedModels","model","styler","color","bgModel","toUpperCase","slice","bgColor","proto","defineProperties","enumerable","_generator","set","parent","openAll","closeAll","self","raw","applyStyle","length","join","string","indexOf","lfIndex","strings","firstString","parts","i","push","String","replace","supportsColor","exports","module","root","pluralize","require","define","amd","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","RegExp","restoreCase","word","token","toLowerCase","toUpperCase","charAt","substr","interpolate","str","args","replace","match","index","result","arguments","sanitizeWord","rules","length","hasOwnProperty","len","test","replaceWord","replaceMap","keepMap","checkWord","bool","count","inclusive","pluralized","singular","plural","isPlural","isSingular","addPluralRule","replacement","push","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","exports","module","ETA","constructor","length","initTime","initValue","etaBufferLength","valueBuffer","timeBuffer","eta","update","time","value","total","push","calculate","getTime","remaining","currentBufferSize","buffer","Math","min","v_diff","t_diff","vt_rate","slice","ceil","isNaN","isFinite","exports","module","_readline","require","Terminal","constructor","outputStream","stream","linewrap","dy","cursorSave","isTTY","write","cursorRestore","cursor","enabled","cursorTo","x","y","cursorRelative","dx","moveCursor","cursorRelativeReset","clearRight","clearLine","clearBottom","clearScreenDown","newline","s","rawWrite","substr","getWidth","lineWrapping","columns","exports","module","onlyFirst","pattern","join","RegExp","undefined","exports","module","ansiRegex","require","string","replace","exports","module","isFullwidthCodePoint","codePoint","Number","isNaN","default","exports","module","exports","module","stripAnsi","require","isFullwidthCodePoint","emojiRegex","stringWidth","string","length","replace","width","i","code","codePointAt","default","exports","module","formatValue","v","options","type","autopadding","value","length","autopaddingChar","slice","exports","module","formatBar","progress","options","completeSize","Math","round","barsize","incompleteSize","barCompleteString","substr","barGlue","barIncompleteString","exports","module","formatTime","t","options","roundToMultipleOf","round","input","Math","autopadding","v","autopaddingChar","slice","floor","exports","module","_stringWidth","require","_defaultFormatValue","_defaultFormatBar","_defaultFormatTime","defaultFormatter","options","params","payload","s","format","formatTime","formatValue","formatBar","percentage","Math","floor","progress","stopTime","Date","now","elapsedTime","round","startTime","context","Object","assign","bar","total","value","eta","eta_formatted","duration","duration_formatted","replace","match","key","fullMargin","max","maxWidth","halfMargin","align","repeat","exports","module","mergeOption","v","defaultValue","parse","rawOptions","preset","options","opt","Object","assign","throttleTime","fps","stream","process","stderr","terminal","clearOnComplete","stopOnComplete","barsize","align","hideCursor","linewrap","barGlue","barCompleteChar","barIncompleteChar","format","formatTime","formatValue","formatBar","etaBufferLength","etaBuffer","etaAsynchronousUpdate","progressCalculationRelative","synchronousUpdate","noTTYOutput","notTTYSchedule","emptyOnZero","forceRedraw","autopadding","gracefulExit","assignDerivedOptions","barCompleteString","repeat","barIncompleteString","autopaddingChar","exports","module","_ETA","require","_Terminal","_formatter","_options","_EventEmitter","GenericBar","constructor","options","assignDerivedOptions","terminal","stream","value","startValue","total","lastDrawnString","startTime","stopTime","lastRedraw","Date","now","eta","etaBufferLength","payload","isActive","formatter","format","render","forceRendering","params","progress","getProgress","getTime","maxWidth","getWidth","etaAsynchronousUpdate","updateETA","s","forceRedraw","noTTYOutput","isTTY","emit","cursorTo","write","clearRight","start","stop","update","arg0","arg1","payloadData","key","getTotal","stopOnComplete","progressCalculationRelative","isNaN","emptyOnZero","Math","min","max","increment","setTotal","exports","module","_GenericBar","require","_options","SingleBar","constructor","options","preset","parse","timer","noTTYOutput","terminal","isTTY","synchronousUpdate","schedulingRate","throttleTime","notTTYSchedule","sigintCallback","render","clearTimeout","newline","setTimeout","bind","update","current","payload","lastRedraw","Date","now","start","total","startValue","gracefulExit","stop","process","once","cursorSave","hideCursor","cursor","linewrap","lineWrapping","removeListener","cursorRestore","clearOnComplete","cursorTo","clearLine","exports","module","_Terminal","require","_BarElement","_options","_EventEmitter","MultiBar","constructor","options","preset","bars","parse","synchronousUpdate","terminal","stream","timer","isActive","schedulingRate","isTTY","throttleTime","notTTYSchedule","loggingBuffer","sigintCallback","create","total","startValue","payload","barOptions","bar","Object","assign","push","noTTYOutput","gracefulExit","stop","bind","process","once","hideCursor","cursor","linewrap","lineWrapping","setTimeout","update","start","emit","remove","index","indexOf","splice","newline","clearBottom","clearTimeout","cursorRelativeReset","length","clearLine","write","shift","i","render","stopOnComplete","find","removeListener","clearOnComplete","log","s","exports","module","format","barCompleteChar","barIncompleteChar","exports","module","format","barCompleteChar","barIncompleteChar","exports","module","format","barCompleteChar","barIncompleteChar","module","exports","format","barCompleteChar","barIncompleteChar","exports","module","_legacy","require","_shades_classic","_shades_grey","_rect","legacy","shades_classic","shades_grey","rect","exports","module","_SingleBar","require","_MultiBar","_Presets","_Formatter","_defaultFormatValue","_defaultFormatBar","_defaultFormatTime","Bar","SingleBar","MultiBar","Presets","Format","Formatter","BarFormat","ValueFormat","TimeFormat","name","root","factory","exports","module","define","amd","charMap","JSON","parse","locales","replace","string","options","Error","replacement","locale","undefined","trim","slug","normalize","split","reduce","result","ch","appendChar","remove","strict","lower","toLowerCase","extend","customMap","Object","assign","traceable","parser","onError","uuidv4","z2","render","mode","isArrayLike","next","filterArray","pluralize","first","import_zod","__defProp","__export","init_dist","chalk","path2","slugifyLib","MESSAGE_EVENTS","ADDED","REMOVED","SENT","RECEIVED","CLEARED","THREAD_EVENTS","MAX_STEPS_REACHED","ERROR_OCCURRED","TOOL_ADDED","INCOMPLETE_RESPONSE","AGENT_EVENTS","THREAD_CREATED","THREAD_CLOSED","KNOWLEDGE_ADDED","INSTRUCTION_ADDED","TOOL_EVENTS","STARTED","COMPLETED","FAILED","FOLLOWUP_ADDED","MESSAGES_GENERATED","GIG_EVENTS","PERFORMANCE_COMPLETED","PERFORMANCE_FAILED","PIECE_EVENTS","EXECUTION_COMPLETED","EXECUTION_FAILED","EXECUTION_SKIPPED","EXECUTION_STARTED","RETRY_ATTEMPTED","DEBUG_EVENTS","DEBUG","EVENTS","MESSAGE","THREAD","AGENT","TOOL","GIG","PIECE","makeToolFromInterface","t","Tool","name","description","parameters","executeFn","args","toolCall","executeTool","EventSource","id","followUpMessage","trace","traceMetadata","constructor","options","nanoid","getName","getDescription","getParameters","emit","TOOL_EVENTS","STARTED","tool","parse","result","executeWithTracing","COMPLETED","success","error","errorMessage","Error","message","FAILED","formattedInput","formatToolInput","traceable","run_type","input","tool_call_id","toolUseId","tool_description","toLowerCase","includes","operation","operation_type","a","b","expression","query","search_query","location","summary","paramStrings","Object","entries","map","key","value","join","e","setFollowUp","FOLLOWUP_ADDED","toMessages","messages","Message","role","content","undefined","toolResults","MESSAGES_GENERATED","import_zod","import_zod_to_json_schema","toolMetadataKey","Symbol","ToolName","name","target","propertyKey","_descriptor","metadata","Reflect","getMetadata","defineMetadata","ToolDescription","description","ToolParam","type","_parameterIndex","parameters","z","object","updatedParameters","shape","describe","getToolMethods","instance","prototype","Object","getPrototypeOf","propertyNames","getOwnPropertyNames","map","propertyName","method","executeTool","bind","filter","tool","import_zod","Thread","EventSource","messages","tools","toolChoice","driver","maxSteps","currentSteps","responseHandlers","id","fallbackDrivers","retry","onFallback","tokenUsage","abortSignal","constructor","options","map","makeToolFromInterface","generateThreadId","inputTokens","outputTokens","totalTokens","maxAttempts","delay","exponentialBackoff","forEach","tool","forwardEvents","thread","validateThread","onResponse","handler","push","executeResponseHandlers","message","emit","MESSAGE_EVENTS","ADDED","pop","REMOVED","shift","last","length","size","getTokenUsage","updateTokenUsage","usage","undefined","clear","filter","removedMessages","CLEARED","all","checkMaxSteps","debug","THREAD_EVENTS","MAX_STEPS_REACHED","steps","executeToolCall","toolCall","aborted","Error","console","getName","JSON","stringify","arguments","result","executeTool","toMessages","error","errorResult","success","String","processToolCalls","getTools","toolExecutionPromises","toolCalls","find","t","name","warn","join","dummyTool","Tool","description","parameters","z","object","executeFn","log","allToolResults","Promise","allMessages","flat","combinedToolResults","followUpMessage","msg","toolResults","content","combinedMessage","Message","role","send","processAssistantMessage","RECEIVED","processLastMessage","handleAbortedExecution","lastMessage","isToolCall","isAssistantMessage","isIncompleteResponse","INCOMPLETE_RESPONSE","errorToolResults","toolUseId","errorMessage","toolResponse","drivers","lastError","driverIndex","retryAttempts","sendThread","SENT","calculateDelay","sleep","toLowerCase","incompletePatterns","promisesAction","some","pattern","includes","hasEmptyToolCalls","Array","isArray","wrapStream","stream","onComplete","response","streamThread","firstYield","next","value","initialMessage","streamComplete","streamResponse","ERROR_OCCURRED","nonSystemMessages","isSystemMessage","firstNonSystemMessage","isUserMessage","addTool","newTool","TOOL_ADDED","randomUUID","fork","attempt","ms","resolve","setTimeout","Agent","EventSource","name","knowledge","instructions","memory","systemPrompt","tools","driver","activeThreads","evaluators","trace","traceMetadata","fallbackDrivers","retry","onFallback","constructor","sort","a","b","priority","map","makeToolFromInterface","getDecoratedTools","Map","maxAttempts","delay","exponentialBackoff","forEach","tool","forwardEvents","agent","getToolMethods","addTool","newTool","push","emit","AGENT_EVENTS","TOOL_ADDED","ask","prompt","outputSchema","options","Promise","resolve","reject","thread","createThread","responseFormat","onStructuredResponse","response","send","catch","executeAgent","completedEvaluators","currentEvaluator","handleEvaluators","evaluator","includes","complete","undefined","off","on","props","threadMessages","messages","trim","Error","systemMessage","Message","role","cache","content","buildSystemPrompt","promptMessage","configuredDriver","configureDriverForStructuredOutput","Thread","toolChoice","maxSteps","abortSignal","onResponse","message","parseStructuredResponse","set","id","THREAD_CREATED","getThread","threadId","get","getActiveThreads","closeThread","all","timestamp","Date","delete","THREAD_CLOSED","addKnowledge","KNOWLEDGE_ADDED","addInstruction","instruction","INSTRUCTION_ADDED","getTools","getKnowledge","getInstructions","getMemory","setSystemPrompt","parts","length","k","fact","i","jsonSchema","zodToJsonSchema","schemaHint","type","getSchemaDescription","join","executeTask","task","metadata","traceable","structuredSchema","properties","value","required","additionalProperties","items","enum","format","description","driverConstructor","driverName","OpenAIThreadDriver","require","config","apiKey","process","env","OPENAI_API_KEY","model","temperature","maxTokens","responseSchema","AnthropicThreadDriver","ANTHROPIC_API_KEY","GeminiThreadDriver","GOOGLE_API_KEY","CerebrasThreadDriver","CEREBRAS_API_KEY","parsed","JSON","parse","output","rawContent","error","z","ZodError","parseError","SyntaxError","code","ZodIssueCode","custom","path","schema","ZodEnum","values","v","ZodObject","shape","Object","entries","key","getZodTypeDescription","ZodString","ZodNumber","ZodBoolean","ZodArray","AgentTool","Agent","makeEvaluator","fn","import_zod","import_zod_to_json_schema","Solo","driver","systemPrompt","outputSchema","retry","fallbackDrivers","responseFormat","onFallback","constructor","options","maxAttempts","delay","exponentialBackoff","ask","prompt","drivers","lastError","driverIndex","retryAttempts","response","executeCall","driverUsed","error","calculateDelay","sleep","length","Error","stream","messages","buildMessages","thread","Thread","fullContent","chunk","output","rawContent","all","parse","content","parsed","JSON","undefined","configuredDriver","configureDriverForStructuredOutput","send","lastMessage","last","z","ZodError","parseError","SyntaxError","code","ZodIssueCode","custom","message","path","finalSystemPrompt","schemaHint","getSchemaDescription","push","Message","role","cache","ZodEnum","values","map","v","join","ZodObject","shape","props","Object","entries","key","value","getZodTypeDescription","schema","ZodString","ZodNumber","ZodBoolean","ZodArray","attempt","Math","pow","ms","Promise","resolve","setTimeout","jsonSchema","zodToJsonSchema","structuredSchema","type","additionalProperties","driverConstructor","driverName","name","OpenAIThreadDriver","require","config","apiKey","process","env","OPENAI_API_KEY","model","temperature","maxTokens","responseSchema","AnthropicThreadDriver","ANTHROPIC_API_KEY","GeminiThreadDriver","GOOGLE_API_KEY","CerebrasThreadDriver","CEREBRAS_API_KEY","classify","categories","solo","enum","extract","Gig","EventSource","label","driver","pieces","Map","options","dependencies","pieceOrder","parallelGroups","lastPieceName","lastParallelGroup","constructor","fallbackDrivers","retry","onFallback","onProgress","onError","timeLimit","add","nameOrPiece","playOrPiece","config","name","play","pieceConfig","Error","playFn","set","with","push","deps","Set","after","afterList","Array","isArray","forEach","dep","isInCurrentParallelGroup","validateNoCycles","parallel","length","groupPieces","pieceName","has","setlist","pieceOrPlay","Object","entries","perform","initialVibe","startTime","Date","now","groove","createGroove","results","success","recordings","errors","vibe","duration","performed","skipped","failed","performancePromise","performGig","Promise","race","timeout","emit","GIG_EVENTS","PERFORMANCE_COMPLETED","gig","error","PERFORMANCE_FAILED","performing","ready","getReadyPieces","size","performances","map","wasSkipped","performPiece","PIECE_EVENTS","EXECUTION_COMPLETED","piece","recording","recall","get","errorHandling","EXECUTION_FAILED","delete","all","when","shouldPlay","EXECUTION_SKIPPED","EXECUTION_STARTED","maxAttempts","retries","lastError","attempt","result","playPiece","RETRY_ATTEMPTED","rest","Math","pow","playResult","tools","player","Agent","instructions","thread","createThread","prompt","send","last","content","solo","Solo","outputSchema","responseFormat","temperature","systemPrompt","response","ask","output","from","every","group","groupPiece","includes","groupDeps","visited","keys","recursionStack","hasCycle","vibeMap","recallAll","undefined","setVibe","key","value","feelVibe","ms","resolve","setTimeout","_","reject","getSetlist","lines","depStr","join","type","createSoloFromPiece","piece","driver","config","outputSchema","responseFormat","Error","name","Solo","temperature","systemPrompt","fallbackDrivers","retry","onFallback","createAgentFromPiece","tools","length","Agent","instructions","threeKeyedLockEvaluator","evalPrompt","exitPrompt","makeEvaluator","thread","complete","isEvaluatingTools","nextMessageIsSummary","onTool","onResponse","send","Message","content","cleanup","on","off","import_zod","agentToolEvaluator","agent","toolName","description","promptTemplate","parameters","followUpMessage","makeEvaluator","thread","complete","agentTool","Tool","name","z","object","input","string","describe","executeFn","args","_toolCall","prompt","replace","JSON","stringify","agentThread","createThread","response","send","lastMessage","last","closeThread","id","content","error","console","Error","message","String","addTool","undefined","import_nanoid","import_zod_to_json_schema","MAX_PROMPT_CHARACTERS","CohereThreadDriver","BaseModelDriver","formatMessagesForProvider","messages","map","m","role","message","content","validateConversation","formattedMessages","_context","errors","warnings","repairsApplied","isValid","length","sendProcessedMessages","thread","_processingResult","abortSignal","sendThreadLegacy","streamProcessedMessages","streamThreadLegacy","client","model","temperature","maxTokens","cache","getAvailableModels","constructor","config","apiKey","process","env","COHERE_API_KEY","Error","baseClient","CohereClient","token","trace","Proxy","get","target","prop","receiver","value","Reflect","console","log","String","traceable","require","bind","run_type","name","traceMetadata","aggregator","args","result","params","input","chat_history","max_tokens","tools","streaming","output","text","metrics","meta","billing_tokens","prompt_tokens","input_tokens","completion_tokens","output_tokens","total_tokens","undefined","tool_calls","sendThread","all","checkAbortSignal","totalContent","join","system","convertMessagesToCohereFormat","lastMessage","chatOptions","slice","preamble","getTools","createToolDefinitions","response","chat","billingTokens","tokens","inputTokens","outputTokens","totalTokens","debug","Message","toolCalls","parseToolCalls","push","error","streamThread","stream","createStreamGenerator","streamingResponse","chatStream","accumulatedContent","chunk","eventType","textChunk","updatedMessage","index","indexOf","anyChunk","Array","isArray","formattedToolCalls","flatMap","toolCall","tool","toolUseId","nanoid","arguments","JSON","parse","finalMessage","threadMessages","systemMessage","threadMsg","toolResults","resultContent","stringify","schema","zodToJsonSchema","getParameters","schemaObj","parameters","properties","getName","description","getDescription","parameter_definitions","e","XaiThreadDriver","OpenAICompatibleDriver","getAvailableModels","constructor","config","baseUrl","providerName","model","getDefaultApiKey","process","env","XAI_API_KEY","getDefaultModel","getRateLimits","requestsPerSecond","requestsPerHour","getPricing","input","output","cached","supportsVision","visionModels","includes","supportsStructuredOutput","supportsFunctionCalling","getModelInfo","modelCapabilities","maxTokens","contextWindow","capabilities","formatMessagesForProvider","messages","formattedMessages","message","role","content","trim","push","type","text","attachments","attachment","source","uri","image_url","url","detail","length","assistantMessage","toolCalls","tool_calls","map","toolCall","id","toolUseId","function","name","arguments","JSON","stringify","toolResults","toolResult","toolResultContent","error","result","finalContent","tool_call_id","performAdditionalValidation","context","errors","warnings","repairsApplied","processedMessages","i","hasTextContent","Array","isArray","some","part","enableAutoRepair","hasText","unshift","createValidationWarning","index","suggestedFix","createValidationError","severity","undefined","toolMessage","isEmpty","modelInfo","hasImages","filter","formatMessagesForAPI","thread","all","import_zod_to_json_schema","DEFAULT_MODEL","MAX_PROMPT_CHARACTERS","CACHE_POINT_ENABLED","BedrockThreadDriver","BaseModelDriver","decoder","TextDecoder","client","cache","model","temperature","maxTokens","reasoning_config","constructor","config","process","env","Error","baseClient","accessKeyId","secretAccessKey","region","BedrockRuntimeClient","credentials","trace","Proxy","get","target","prop","receiver","originalValue","traceable","bind","run_type","name","traceMetadata","aggregator","args","command","response","input","messages","system","inferenceConfig","content","output","message","metrics","stopReason","Reflect","formatMessagesForProvider","convertMessagesToBedrockFormat","validateConversation","formattedMessages","_context","errors","warnings","repairsApplied","isValid","length","sendProcessedMessages","thread","_processingResult","abortSignal","sendThreadLegacy","streamProcessedMessages","streamThreadLegacy","convertAttachmentsToContentBlocks","attachments","map","attachment","type","image","format","source","document","video","systemMessages","conversationMessages","lastCacheMessage","find","role","lastSystemCacheMessage","forEach","push","text","cachePoint","contentBlocks","toolResults","toolCalls","call","toolUse","toolUseId","arguments","result","toolResult","JSON","stringify","error","status","parseToolCalls","reduce","acc","block","console","sendThread","all","checkAbortSignal","totalContent","m","join","bedrockMessages","tools","getTools","toolConfig","tool","toolSpec","getName","description","getDescription","inputSchema","json","zodToJsonSchema","getParameters","modelId","additionalModelRequestFields","toolChoice","any","auto","ConverseCommand","send","responseContent","responseText","filter","c","reasoning","reasoningContent","reasoningText","responseMessage","Message","usage","debug","inputTokens","outputTokens","totalTokens","errorMessage","streamThread","validateThread","systemMessage","formatMessagesForStreaming","createStreamingInput","parse","body","InvokeModelWithResponseStreamCommand","initialMessage","stream","createStreamProcessor","msg","contentType","accept","anthropic_version","max_tokens","processStreamChunk","chunk","accumulatedText","currentMessage","bytes","newText","updatedMessage","decodedChunk","decode","parsed","delta","endsWith","e","responseBody","MAX_PROMPT_CHARACTERS","HuggingFaceThreadDriver","BaseModelDriver","client","endpointClient","model","temperature","maxTokens","cache","textGenerationWithTracing","textGenerationStreamWithTracing","endpointTextGenerationWithTracing","endpointTextGenerationStreamWithTracing","provider","chatCompletionWithTracing","chatCompletionStreamWithTracing","endpointChatCompletionWithTracing","endpointChatCompletionStreamWithTracing","getExampleModels","constructor","config","apiToken","process","env","HUGGINGFACE_API_TOKEN","Error","InferenceClient","params","textGeneration","textGenerationStream","chatCompletion","chatCompletionStream","trace","setupTracing","traceMetadata","endpointUrl","endpoint","formatMessagesForProvider","messages","map","m","role","content","validateConversation","formattedMessages","_context","errors","warnings","repairsApplied","isValid","length","sendProcessedMessages","thread","_processingResult","abortSignal","sendThreadLegacy","streamProcessedMessages","streamThreadLegacy","traceable","run_type","name","aggregator","args","result","input","inputs","parameters","output","generated_text","finish_reason","streaming","max_tokens","choices","message","sendThread","all","checkAbortSignal","debug","response","formatMessagesForChatAPI","tool_choice","parallel_tool_calls","clientToUse","responseContent","console","log","Message","toolCalls","parseToolCallsFromText","forEach","call","index","updatedMessage","toolUseId","Date","now","Math","random","toString","substring","arguments","Object","assign","push","executeToolCalls","prompt","formatMessagesForAPI","return_full_text","max_new_tokens","error","tools","getTools","t","getName","tc","toolCall","tool","find","processedArgs","a","Number","b","executeTool","userMessage","toolResults","success","e","streamThread","streamResponse","streamContent","createChatStreamGenerator","stream","createStreamGenerator","systemPrompt","toolResult","resultStr","JSON","stringify","String","fullPrompt","join","systemMessage","systemContent","getDescription","schema","getParameters","schemaObj","_def","shape","entries","paramName","paramDef","description","keys","dir","depth","toolResultContent","unshift","text","codeBlockPattern","codeMatch","exec","jsonObj","parse","jsonPattern","match","argsString","fullJsonPattern","jsonMatches","jsonText","parsed","function","accumulatedText","chunk","tokenText","token","import_nanoid","import_zod_to_json_schema","MAX_PROMPT_CHARACTERS","JSON_SCHEMA_URL","GroqThreadDriver","BaseModelDriver","client","model","temperature","maxTokens","cache","disableParallelToolCalls","getAvailableModels","constructor","config","apiKey","process","env","GROQ_API_KEY","Error","baseClient","Groq","trace","Proxy","get","target","prop","receiver","value","Reflect","chatTarget","chatProp","chatReceiver","chatValue","completionsTarget","completionsProp","completionsReceiver","completionsValue","traceable","bind","run_type","name","traceMetadata","aggregator","args","result","params","stream","input","messages","max_tokens","tools","length","streaming","output","choices","message","metrics","usage","prompt_tokens","completion_tokens","total_tokens","undefined","finish_reason","getModels","formatMessagesForProvider","formattedMessages","attachments","contentParts","content","push","type","text","attachment","source","uri","image_url","url","detail","role","toolResults","toolResult","resultContent","JSON","stringify","String","tool_call_id","toolUseId","toolCalls","map","call","id","function","arguments","tool_calls","validateConversation","_context","errors","warnings","repairsApplied","totalCharacters","reduce","sum","msg","severity","context","maxAllowed","isValid","sendProcessedMessages","thread","_processingResult","abortSignal","sendThreadLegacy","streamProcessedMessages","streamThreadLegacy","sendThread","all","checkAbortSignal","formatMessagesForAPI","getTools","createToolDefinitions","tool_choice","parallel_tool_calls","response","chat","completions","create","lastChoice","choice","Message","parseToolCalls","debug","inputTokens","outputTokens","totalTokens","error","code","failed_generation","parseFailedGenerationToolCalls","assistantMessage","toolCall","tool","find","t","getName","executeTool","userMessage","filter","flatMap","summaryMessage","parseError","originalError","streamThread","contentGenerator","Symbol","asyncIterator","chunk","delta","updatedMessage","Object","assign","failedGeneration","jsonMatch","exec","jsonString","trim","parsed","parse","Array","isArray","parameters","nanoid","Boolean","description","getDescription","zodToJsonSchema","getParameters","$schema","models","list","data","initTracing","config","registry","TracerRegistry","getInstance","enabled","tracer","setActiveTracer","error","console","warn","registerTracer","name","register","LangSmithTracer","traceable","fn","metadata","langsmithModule","require","error","console","warn","registerLangSmithTracer","TracerRegistry","registry","getInstance","register","BraintrustTracer","options","braintrustLib","constructor","require","error","console","warn","apiKey","process","env","BRAINTRUST_API_KEY","initLogger","projectName","formatOptions","metadata","runType","name","otherMetadata","type","traceable","fn","wrapTraced","run_type","args","result","currentSpan","tracedFn","Object","defineProperty","namedToolFunction","_args","log","tracedParams","input","output","tool_name","aggregator","wrappedFn","wrappedLLMFunction","value","wrappedFunction","inputData","metadataWithoutInput","traced","registerBraintrustTracer","TracerRegistry","registry","getInstance","register"]}