{"version":3,"sources":["../src/tracing/tracer.ts","../src/tracing/registry.ts","../src/tracing/index.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/event-source.ts","../src/message.ts","../src/decorators.ts","../src/thread.ts","../src/agent.ts","../src/agent.tool.ts","../src/evaluator.ts","../src/evaluators/three-keyed-lock.ts","../src/evaluators/agent-tool.evaluator.ts","../src/model.drivers/gemini.ts","../src/model.drivers/base.ts","../src/model.drivers/cohere.ts","../src/model.drivers/openai.ts","../src/model.drivers/bedrock.ts","../src/model.drivers/cerebras.ts","../src/model.drivers/huggingface.ts","../src/model.drivers/groq.ts","../src/model.drivers/anthropic.ts","../src/tracing/api.ts","../src/tracing/adapters/index.ts","../src/tracing/adapters/langsmith.ts","../src/tracing/adapters/braintrust.ts"],"sourcesContent":["/**\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>(\n    fn: T,\n    metadata: TraceMetadata\n  ): 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(); ","import { 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: string = \"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} ","import { Tracer, TraceMetadata, NullTracer, defaultTracer } from \"./tracer\";\nimport { TracerRegistry, getTracer, isTracingEnabled } from \"./registry\";\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>(\n  fn: T,\n  metadata: TraceMetadata\n): 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 }; ","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// evaluators\nexport * from \"./evaluators\";\n\n// Export model drivers\nexport * from \"./model.drivers\"\n\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 * 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 { Message, type ToolCall } from \"./message\";\nimport { traceable } from \"./tracing\";\n\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.execution.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.execution.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 =\n        error instanceof Error ? error.message : \"Unknown error occurred\";\n\n      this.emit(\"tool.execution.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(async () => {\n      const result = await this.executeFn(args, toolCall);\n      return result;\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   * 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.followup.set\", {\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.messages.generated\", {\n      tool: this,\n      messages,\n    });\n\n    return messages;\n  }\n}\n","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    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(\n            /```(?:json)?\\s*([\\s\\S]*?)\\s*```/\n          );\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","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) =>\n  (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => {\n    const metadata: Partial<ToolMetadata> =\n      Reflect.getMetadata(toolMetadataKey, target, propertyKey) || {};\n\n    Reflect.defineMetadata(\n      toolMetadataKey,\n      { ...metadata, name },\n      target,\n      propertyKey\n    );\n  };\n\n/**\n * Decorator to add a description to a tool method\n */\nexport const ToolDescription =\n  (description: string) =>\n  (target: any, propertyKey: string, _descriptor: PropertyDescriptor) => {\n    const metadata: Partial<ToolMetadata> =\n      Reflect.getMetadata(toolMetadataKey, target, propertyKey) || {};\n\n    Reflect.defineMetadata(\n      toolMetadataKey,\n      { ...metadata, description },\n      target,\n      propertyKey\n    );\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 { EventSource } from \"./event-source\";\nimport type { Message, ToolCall } from \"./message\";\nimport { Tool, type ToolInterface, makeToolFromInterface } from \"./tool\";\n\nexport interface ThreadDriver {\n  sendThread(thread: Thread): Promise<Thread>;\n  streamThread(thread: Thread): AsyncGenerator<{ stream: AsyncGenerator<string, void>, message: Message }, Thread>;\n  parallelToolCalls?: boolean;\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  public readonly parallelToolCalls: boolean;\n\n  constructor({\n    messages = [],\n    tools = [],\n    driver,\n    toolChoice = \"auto\",\n    maxSteps = 30,\n    parallelToolCalls = false,\n  }: {\n    messages?: Message[];\n    tools?: ToolInterface[];\n    toolChoice?: \"auto\" | \"any\";\n    driver: ThreadDriver;\n    maxSteps?: number;\n    parallelToolCalls?: boolean;\n  }) {\n    super();\n    this.messages = messages;\n    this.tools = tools.map(makeToolFromInterface);\n    this.driver = driver;\n    this.maxSteps = maxSteps;\n    this.currentSteps = 0;\n    this.responseHandlers = [];\n    this.toolChoice = toolChoice;\n    this.parallelToolCalls = parallelToolCalls;\n    this.id = this.generateThreadId();\n    // Forward events from all tools with thread context\n    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(\"thread.message-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(\"thread.message-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(\"thread.message-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   * 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\n      ? this.messages.filter(filter)\n      : [...this.messages];\n    if (filter) {\n      this.messages = this.messages.filter((message) => !filter(message));\n    } else {\n      this.messages = [];\n    }\n    this.emit(\"thread.messages-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.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 process its response\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<void> {\n    this.debug(`[DEBUG] Executing tool call: ${tool.getName()}, args:`, JSON.stringify(toolCall.arguments, null, 2));\n    const result = await tool.executeTool(toolCall.arguments, toolCall);\n    this.debug(`[DEBUG] Tool execution result:`, JSON.stringify(result, null, 2));\n    const toolMessages = tool.toMessages(result);\n    toolMessages.forEach((message) => this.push(message));\n    await this.send(undefined, true);\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    const tools = this.getTools();\n    if (this.parallelToolCalls) {\n      // Run all tool calls in parallel\n      const toolCallPromises = message.toolCalls.map((toolCall) => {\n        const tool = tools.find((t) => t.getName() === toolCall.name);\n        if (tool) {\n          return this.executeToolCall(toolCall, tool);\n        }\n        return Promise.resolve(); // Add explicit return for when no tool is found\n      });\n      await Promise.all(toolCallPromises);\n    } else {\n\n      for (const toolCall of message.toolCalls) {\n        const tool = tools.find((t) => t.getName() === toolCall.name);\n        if (tool) {\n          if (this.checkMaxSteps()) {\n            return;\n          }\n          await this.executeToolCall(toolCall, tool);\n        }\n      }\n    }\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(\"thread.response\", { 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    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      await this.processAssistantMessage(lastMessage);\n    }\n\n    return this;\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    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    await this.driver.sendThread(this);\n    this.emit(\"thread.sent\", { thread: this, message });\n    await this.processLastMessage();\n    return this;\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(message?: Message, toolResponse = false): Promise<AsyncGenerator<string, void>> {\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    const response = this.driver.streamThread(this);\n    const firstYield = await response.next();\n    \n    if (!firstYield.value || !('stream' in firstYield.value) || !('message' in firstYield.value)) {\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  }\n\n  /**\n   * Handle the completion of a stream\n   */\n  private async streamComplete(streamResponse: AsyncGenerator<{ stream: AsyncGenerator<string, void>, message: Message }, Thread>) {\n    try {\n      const result = await streamResponse.next();\n      if (result.value && result.value instanceof Thread) {\n        this.emit(\"thread.sent\", { thread: this, message: this.last() });\n        await this.processLastMessage();\n      }\n    } catch (error) {\n      this.emit(\"thread.error\", { 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(\n      (message) => !message.isSystemMessage()\n    );\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(\n        \"First non-system message in thread must be a user message\"\n      );\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.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    });\n  }\n}\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 { getToolMethods } from \"./decorators\";\nimport { EventSource } from \"./event-source\";\nimport { Message } from \"./message\";\nimport { Thread, type ThreadDriver } from \"./thread\";\nimport { type Tool, type ToolInterface, makeToolFromInterface } from \"./tool\";\nimport type { Evaluator } from \"./evaluator\";\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 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}\n\nexport class Agent extends EventSource {\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\n  constructor({\n    knowledge = [],\n    instructions = [],\n    memory = [],\n    systemPrompt = \"\",\n    tools = [],\n    driver,\n    evaluators = [],\n    trace = false,\n    traceMetadata,\n  }: AgentOptions) {\n    super();\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 = [\n      ...tools.map(makeToolFromInterface),\n      ...this.getDecoratedTools(),\n    ];\n    this.driver = driver;\n    this.activeThreads = new Map();\n    this.evaluators = evaluators;\n    this.trace = trace;\n    this.traceMetadata = traceMetadata;\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.tool-added\", { agent: this, tool: newTool });\n    return newTool;\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(props: {\n    messages?: Message[];\n    prompt?: string;\n    systemPrompt?: string;\n    onResponse?: (message: Message) => Promise<void>;\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(props.systemPrompt),\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    const thread = new Thread({\n      messages: threadMessages,\n      tools: this.tools,\n      toolChoice: \"auto\",\n      driver: this.driver,\n    });\n\n    if (props.onResponse) {\n      thread.onResponse(props.onResponse);\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.thread-added\", { 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.thread-removed\", { 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.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.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(systemPrompt?: string): 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) =>\n        parts.push(`${i.priority}. ${i.instruction}`)\n      );\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","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 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","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 { 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: parameters || 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 * 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 { GenerateContentResponse, GoogleGenAI } from \"@google/genai\";\nimport { nanoid } from 'nanoid';\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport {\n  Message,\n  type MessageRole,\n  type ToolCall\n} from \"../message\";\nimport type { Thread } from \"../thread\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\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 Schema {\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, Schema>;\n  required?: string[];\n  propertyOrdering?: string[];\n  items?: Schema;\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?: Schema;\n}\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?: Schema;\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(\"Google API Key must be provided in config or as GOOGLE_API_KEY environment variable\");\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 ? \n                            (params.tools.functionDeclarations?.length || 0) : 0,\n                        },\n                        output: result.candidates?.[0]?.content,\n                        metrics: result.usageMetadata ? {\n                          prompt_tokens: result.usageMetadata.promptTokenCount,\n                          completion_tokens: result.usageMetadata.candidatesTokenCount,\n                          total_tokens: (result.usageMetadata.promptTokenCount || 0) + \n                            (result.usageMetadata.candidatesTokenCount || 0),\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 ? \n                            (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  /**\n   * Send the thread state to the LLM and process the response\n   */\n  public async sendThread(thread: Thread): Promise<Thread> {\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    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 =\n        error instanceof Error ? error.message : \"Unknown error occurred\";\n      this.error(\n        `Failed to send thread: ${errorMessage} (thread length: ${thread.all().length})`\n      );\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 async *streamThread(thread: Thread): 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    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 =\n        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    let 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} ","import { EventSource } from \"../event-source\";\nimport type { Message } from \"../message\";\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 */\nexport abstract class BaseModelDriver extends EventSource implements ThreadDriver {\n  /**\n   * Process and send a thread to the model and return the updated thread\n   */\n  abstract sendThread(thread: Thread): Promise<Thread>;\n\n  /**\n   * Stream a response from the model\n   */\n  abstract streamThread(\n    thread: Thread,\n  ): AsyncGenerator<{ stream: AsyncGenerator<string, void>; message: Message }, Thread>;\n}\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, ToolCall } from \"../message\";\nimport { Thread } from \"../thread\";\nimport { 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  /**\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                    prompt_tokens: result.meta.billing_tokens.input_tokens,\n                    completion_tokens: result.meta.billing_tokens.output_tokens,\n                    total_tokens: result.meta.billing_tokens.input_tokens + result.meta.billing_tokens.output_tokens,\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  async sendThread(thread: Thread): Promise<Thread> {\n    // Validate thread\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    // Calculate total content length to prevent exceeding limits\n    const totalContent = thread.all().map(m => m.content || \"\").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: \n            billingTokens.input_tokens + \n            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  async *streamThread(thread: Thread): AsyncGenerator<\n    { stream: AsyncGenerator<string, void>; message: Message }, Thread\n  > {\n    // Validate thread\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    // Calculate total content length to prevent exceeding limits\n    const totalContent = thread.all().map(m => m.content || \"\").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(\n        thread,\n        chatOptions,\n        message\n      );\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        let 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 (chunk.eventType === \"tool-calls-generation\" || chunk.eventType === \"tool-calls-chunk\") {\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 (chunk.eventType === \"stream-end\" && \n              chunk.response?.meta && \n              'billing_tokens' in chunk.response.meta) {\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: \n                billingTokens.input_tokens + \n                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(\n    thread: Thread\n  ): { messages: { role: string; message: string; }[]; system?: string } {\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 \n          ? `${message}\\n\\n${resultContent}`\n          : 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 * 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 { nanoid } from \"nanoid\";\nimport OpenAI from \"openai\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, ToolCall } from \"../message\";\nimport { Thread } from \"../thread\";\nimport { 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 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\n/**\n * Configuration options for the OpenAI driver\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/**\n * Represents an OpenAI client and provides tools for converting messages to/from the LLM\n */\nexport class OpenAIThreadDriver extends BaseModelDriver {\n  /**\n   * OpenAI API Client\n   */\n  private client: OpenAI;\n\n  /**\n   * OpenAI model to use\n   */\n  private model: OpenAIModel | 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 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    ];\n  }\n\n  /**\n   * Create a new OpenAI driver\n   * @param config Configuration options\n   */\n  constructor(config: OpenAIConfig = {}) {\n    super();\n\n    // Get API Key from config or environment variable\n    const apiKey = config.apiKey || process.env.OPENAI_API_KEY;\n    if (!apiKey) {\n      throw new Error(\n        \"OpenAI API Key must be provided in config or as OPENAI_API_KEY environment variable\"\n      );\n    }\n\n    // Create a base client\n    const baseClient = new OpenAI({\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 OpenAI 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(completionsTarget, completionsProp, completionsReceiver);\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: \"openai\",\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                                prompt_tokens: result.usage.prompt_tokens,\n                                completion_tokens: result.usage.completion_tokens,\n                                total_tokens: result.usage.total_tokens,\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 || \"gpt-4o\";\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  async sendThread(thread: Thread): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    this.debug(\"Sending message to OpenAI API\", { model: this.model });\n\n    // Format messages for OpenAI 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(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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 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\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 OpenAI API\");\n      }\n\n      const choice = lastChoice.message;\n      if (!choice) {\n        throw new Error(\"Empty response from OpenAI 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(\"OpenAI 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) {\n      this.error(\"Error sending message to OpenAI 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  async *streamThread(thread: Thread): AsyncGenerator<\n    { stream: AsyncGenerator<string, void>; message: Message }, Thread\n  > {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    this.debug(\"Streaming message to OpenAI API\", { model: this.model });\n\n    // Format messages for OpenAI 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(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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        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\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);\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 OpenAI 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<OpenAI.Chat.ChatCompletionChunk>,\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 => ({ ...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 => 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                  if (toolCall.function.arguments) {\n                    existingCall.function.arguments = (existingCall.function.arguments || \"\") + \n                      toolCall.function.arguments;\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      }\n    } catch (error) {\n      this.error(\"Error processing OpenAI stream\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Format messages from the Thread object to the OpenAI API format\n   */\n  private formatMessagesForAPI(thread: Thread): OpenAI.Chat.ChatCompletionMessageParam[] {\n    const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [];\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: (OpenAI.Chat.ChatCompletionContentPart)[] = [];\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        // OpenAI has specific typing requirements for different roles\n        if (message.role === \"user\") {\n          messages.push({\n            role: \"user\",\n            content: contentParts as any, // Type cast to bypass strict typing\n          });\n        } else if (message.role === \"assistant\") {\n          messages.push({\n            role: \"assistant\",\n            content: contentParts as any, // Type cast to bypass strict typing\n          });\n        } else if (message.role === \"system\") {\n          messages.push({\n            role: \"system\",\n            content: contentParts as any, // Type cast to bypass strict typing\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          messages.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        messages.push({\n          role: \"assistant\",\n          content: message.content || null,\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 OpenAI API\n   */\n  private 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 OpenAI API response\n   */\n  private parseToolCalls(toolCalls?: OpenAI.Chat.ChatCompletionMessageToolCall[]): 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 * 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  type SystemContentBlock,\n  type ToolResultBlock,\n  type ToolUseBlock,\n  type VideoBlock,\n  InvokeModelWithResponseStreamCommand,\n} from \"@aws-sdk/client-bedrock-runtime\";\nimport { traceable } from \"../tracing\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport {\n  type Attachment,\n  Message,\n  type MessageRole,\n  type ToolCall,\n} from \"../message\";\nimport type { Thread } from \"../thread\";\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  /**\n   * Convert attachments to Bedrock content blocks\n   */\n  private convertAttachmentsToContentBlocks(\n    attachments: Attachment[]\n  ): 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(\n      (message) => message.cache && message.role !== \"system\"\n    );\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(\n          ...this.convertAttachmentsToContentBlocks(message.attachments)\n        );\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(\n            `Failed to parse tool call input: ${block.toolUse.input}`\n          );\n        }\n      }\n      return acc;\n    }, []);\n  }\n\n  /**\n   * Send the thread state to the LLM and process the response\n   */\n  public async sendThread(thread: Thread): Promise<Thread> {\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    try {\n      const { messages: bedrockMessages, system } =\n        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          additionalModelRequestFields: {\n            reasoning_config: this.reasoning_config,\n          }\n        } : {}),\n        ...(tools.length > 0 ? {\n          toolConfig: {\n            tools: toolConfig,\n            ...(thread.toolChoice === \"any\" ? { toolChoice: { any: {} } } : {}),\n            ...(thread.toolChoice === \"auto\" ? { toolChoice: { auto: {} } } : {}),\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 =\n        error instanceof Error ? error.message : \"Unknown error occurred\";\n      this.error(\n        `Failed to send thread: ${errorMessage} (thread length: ${thread.all().length})`\n      );\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 async *streamThread(thread: Thread): AsyncGenerator<{ stream: AsyncGenerator<string, void>, message: Message }, Thread> {\n    this.validateThread(thread);\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 =\n        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 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 { Thread } from \"../thread\";\nimport { Tool } from \"../tool\";\nimport { BaseModelDriver } from \"./base\";\nimport { traceable } from \"../tracing\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\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\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   * Maximum number of tool calls allowed per thread to prevent infinite loops\n   * @default 10\n   */\n  maxTotalToolCalls?: number;\n\n  /**\n   * Optional JSON schema to enforce for the response format.\n   * See: https://inference-docs.cerebras.ai/capabilities/structured-outputs\n   */\n  responseFormatSchema?: Record<string, any>;\n\n  /**\n   * Optional name for the JSON schema provided in responseFormatSchema.\n   * Used if responseFormatSchema is set.\n   * @default \"improv_schema\"\n   */\n  responseFormatName?: string;\n\n  /**\n   * Optional flag to enforce strict adherence to the responseFormatSchema.\n   * Used if responseFormatSchema is set.\n   * @default true\n   */\n  responseFormatStrict?: boolean;\n\n  /**\n   * Whether to run tool calls in parallel\n   * @default false\n   */\n  parallelToolCalls?: boolean;\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   * Track recent tool calls to prevent infinite loops\n   */\n  private recentToolCalls: Array<{\n    name: string;\n    argsHash: string;\n    timestamp: number;\n  }> = [];\n  \n  /**\n   * Timeframe for tracking repeated tool calls (in milliseconds)\n   */\n  private toolCallTimeframe = 60000; // 1 minute\n\n  /**\n   * Maximum number of tool calls allowed per thread to prevent infinite loops\n   */\n  private maxTotalToolCalls = 10;\n  \n  /**\n   * Counter for total number of tool calls processed in the current thread\n   */\n  private totalToolCallsCounter = 0;\n\n  /**\n   * Whether to run tool calls in parallel\n   */\n  public parallelToolCalls: boolean;\n\n  /**\n   * Key-value store to track repeat tool calls by their hash\n   * The key is toolName:argsHash and the value is the count\n   */\n  private toolCallTracker: Record<string, number> = {};\n\n  /**\n   * Optional JSON schema for structured outputs.\n   */\n  private responseFormatSchema?: Record<string, any>;\n\n  /**\n   * Name for the response format schema.\n   */\n  private responseFormatName: string;\n\n  /**\n   * Strictness for the response format schema.\n   */\n  private responseFormatStrict: boolean;\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      // 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(completionsTarget, completionsProp, completionsReceiver);\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                                prompt_tokens: result.usage.prompt_tokens,\n                                completion_tokens: result.usage.completion_tokens,\n                                total_tokens: result.usage.total_tokens,\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.responseFormatSchema = config.responseFormatSchema;\n    this.responseFormatName = config.responseFormatName || \"improv_schema\";\n    this.responseFormatStrict = config.responseFormatStrict ?? true;\n    this.maxTotalToolCalls = config.maxTotalToolCalls ?? 10;\n    this.parallelToolCalls = config.parallelToolCalls ?? false;\n    \n    // Adjust settings for specific models known to have issues\n    this.configureModelSpecificSettings(config);\n    \n    // Log the model being used\n    this.debug(`Using Cerebras model: ${this.model}`);\n  }\n\n  /**\n   * Configure model-specific settings to handle known issues\n   */\n  private configureModelSpecificSettings(config: CerebrasConfig) {\n    // Handle specific models with known issues\n    if (this.model === \"llama-3.3-70b\") {\n      this.debug(\"Applying specific settings for llama-3.3-70b model\");\n      \n      // This model has known issues with tool calls - very strict settings\n      this.disableParallelToolCalls = false; // Force sequential tool calls for this model\n      this.maxTotalToolCalls = config.maxTotalToolCalls ?? 20; // Lower total limit for this model\n      \n      // Change the tool call timeframe to be more strict\n      this.toolCallTimeframe = 30000; // 30 seconds\n    }\n  }\n\n  /**\n   * Try several fallback strategies to handle errors.\n   * This is useful for working around limitations or issues with the Cerebras API.\n   * \n   * @param params Original API parameters\n   * @param apiError Original API error\n   * @returns CerebrasResponse from a successful strategy, or throws if all strategies fail\n   */\n  private async tryFallbackStrategies(params: any, apiError: any): Promise<CerebrasResponse> {\n    // Strategy 1: Try with simplified tool definitions (string types only)\n    try {\n      this.debug(\"Fallback Strategy 1: Simplified tool definitions\", { error: apiError.message });\n      \n      const strategy1Params = JSON.parse(JSON.stringify(params)); // Deep clone\n      \n      // Simplify tool definitions\n      if (strategy1Params.tools) {\n        for (const tool of strategy1Params.tools) {\n          if (tool.function && tool.function.parameters && tool.function.parameters.properties) {\n            // Ensure all property types are 'string'\n            for (const key in tool.function.parameters.properties) {\n              tool.function.parameters.properties[key].type = 'string';\n              \n              // Remove any complex nested structures\n              delete tool.function.parameters.properties[key].properties;\n              delete tool.function.parameters.properties[key].items;\n            }\n          }\n        }\n      }\n      \n      return await this.client.chat.completions.create(strategy1Params) as CerebrasResponse;\n    } catch (error) {\n      const error1 = error as any;\n      this.debug(\"Fallback Strategy 1 failed\", { error: error1.message });\n      \n      // Strategy 2: Try with minimal tool definitions (remove most parameters)\n      try {\n        this.debug(\"Fallback Strategy 2: Minimal tool definitions\", { error: apiError.message });\n        \n        const strategy2Params = JSON.parse(JSON.stringify(params)); // Deep clone\n        \n        // Simplify tool definitions to bare minimum\n        if (strategy2Params.tools) {\n          for (const tool of strategy2Params.tools) {\n            if (tool.function && tool.function.parameters) {\n              // Keep only the type and an empty properties object\n              tool.function.parameters = {\n                type: \"object\",\n                properties: {}\n              };\n            }\n          }\n        }\n        \n        return await this.client.chat.completions.create(strategy2Params) as CerebrasResponse;\n      } catch (error) {\n        const error2 = error as any;\n        this.debug(\"Fallback Strategy 2 failed\", { error: error2.message });\n        \n        // Strategy 3: Try without any tools\n        try {\n          this.debug(\"Fallback Strategy 3: No tools, just content\", { error: apiError.message });\n          \n          const strategy3Params = {\n            model: params.model,\n            temperature: params.temperature,\n            messages: params.messages,\n            // No tools, no tool_choice, no parallel_tool_calls\n          };\n          \n          return await this.client.chat.completions.create(strategy3Params) as CerebrasResponse;\n        } catch (error) {\n          const error3 = error as any;\n          this.debug(\"Fallback Strategy 3 failed\", { error: error3.message });\n          \n          // Strategy 4: Final emergency fallback - use only the last message\n          try {\n            this.debug(\"Fallback Strategy 4: Emergency simplified request\", { error: apiError.message });\n            \n            const lastUserMessage = params.messages.filter((msg: any) => msg.role === 'user').pop();\n            const simplifiedContent = lastUserMessage?.content \n              ? String(lastUserMessage.content).replace(/@\\{\\{\\{.*?\\}\\}\\}/g, \"[FIELD]\") \n              : \"Help me with this request\";\n            \n            // Use 'any' type for strategy4Params to avoid typing issues\n            const strategy4Params: any = {\n              model: params.model,\n              temperature: params.temperature,\n              messages: [\n                {\n                  role: \"system\",\n                  content: \"You are a helpful AI assistant. The user may send you field references like [FIELD] that you should consider as data fields.\"\n                },\n                {\n                  role: \"user\",\n                  content: simplifiedContent\n                }\n              ]\n            };\n            \n            return await this.client.chat.completions.create(strategy4Params) as CerebrasResponse;\n          } catch (error) {\n            const error4 = error as any;\n            this.debug(\"All fallback strategies failed\", { \n              originalError: apiError.message,\n              finalError: error4.message\n            });\n            \n            // If all strategies fail, throw the original error\n            throw apiError;\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Hash the tool call arguments to compare for duplicates\n   */\n  private hashToolCallArgs(args: any): string {\n    try {\n      // Sort keys to ensure consistent order\n      const normalized = typeof args === 'object' && args !== null\n        ? JSON.stringify(args, Object.keys(args).sort())\n        : String(args);\n      \n      // Simple hash function for string\n      let hash = 0;\n      for (let i = 0; i < normalized.length; i++) {\n        const char = normalized.charCodeAt(i);\n        hash = ((hash << 5) - hash) + char;\n        hash = hash & hash; // Convert to 32bit integer\n      }\n      return hash.toString(16);\n    } catch (e) {\n      // If hashing fails, use string representation\n      return String(args);\n    }\n  }\n  \n  /**\n   * Check if a tool call has been made before with the same arguments\n   * Returns true for any repeat calls, allowing only the first occurrence\n   */\n  private isRepeatedToolCall(name: string, args: any): boolean {\n    // Clean up old entries from timestamp-based tracking\n    const now = Date.now();\n    this.recentToolCalls = this.recentToolCalls.filter(call => \n      now - call.timestamp < this.toolCallTimeframe\n    );\n    \n    // Hash the arguments\n    const argsHash = this.hashToolCallArgs(args);\n    \n    // Create a unique key for this tool call\n    const callKey = `${name}:${argsHash}`;\n    \n    // Check if this tool call has been seen before\n    const identicalCallCount = this.toolCallTracker[callKey] || 0;\n    \n    // Also use the timestamp-based tracking as a backup\n    const timestampBasedCalls = this.recentToolCalls.filter(call => \n      call.name === name && call.argsHash === argsHash\n    );\n    \n    // If this is NOT a repeated call, we should still track it for future reference\n    // But we do this AFTER checking to avoid counting the current call in our check\n    if (identicalCallCount === 0 && timestampBasedCalls.length === 0) {\n      // Log the first occurrence\n      this.debug(`First occurrence of tool call for ${name}`, {\n        argsHash,\n        args: typeof args === 'object' ? JSON.stringify(args) : args\n      });\n    } else if (identicalCallCount > 0) {\n      // Log repeated tool detection\n      this.debug(`Detected repeated tool call for ${name}`, {\n        callCount: identicalCallCount,\n        argsHash,\n        args: typeof args === 'object' ? JSON.stringify(args) : args\n      });\n    }\n    \n    // AFTER checking, update the trackers for future checks\n    this.toolCallTracker[callKey] = identicalCallCount + 1;\n    \n    // Add current call to timestamp history\n    this.recentToolCalls.push({\n      name,\n      argsHash,\n      timestamp: now\n    });\n    \n    // Return true only if this is actually a repeat (not the first occurrence)\n    return identicalCallCount > 0 || timestampBasedCalls.length > 0;\n  }\n\n  /**\n   * Simplifies the message history after a tool call to prevent model confusion.\n   * Replaces the original user request and assistant tool call with a summary.\n   */\n  private simplifyMessagesAfterToolCall(messages: any[]): any[] {\n    const simplifiedMessages = [];\n    let foundToolResult = false;\n    \n    // Iterate backwards to find the last tool result message\n    for (let i = messages.length - 1; i >= 0; i--) {\n      if (messages[i].role === 'tool') {\n        foundToolResult = true;\n        // Keep the tool result message\n        simplifiedMessages.unshift(messages[i]);\n        \n        // Find the corresponding assistant message with the tool_calls\n        let assistantMsgIndex = -1;\n        for (let j = i - 1; j >= 0; j--) {\n          if (messages[j].role === 'assistant' && messages[j].tool_calls?.some((tc: any) => tc.id === messages[i].tool_call_id)) {\n            assistantMsgIndex = j;\n            break;\n          }\n        }\n        \n        if (assistantMsgIndex !== -1) {\n          // Create a summary message instead of the original assistant/user requests\n          let toolParams = \"{}\";\n          try {\n            // Try to parse and format the parameters nicely\n            const args = messages[assistantMsgIndex].tool_calls[0].function.arguments;\n            if (typeof args === 'string') {\n              const parsedArgs = JSON.parse(args);\n              toolParams = JSON.stringify(parsedArgs, null, 2);\n            } else {\n              toolParams = JSON.stringify(args, null, 2);\n            }\n          } catch (e) {\n            // If parsing fails, use the raw string\n            toolParams = messages[assistantMsgIndex].tool_calls[0].function.arguments || \"{}\";\n          }\n          \n          simplifiedMessages.unshift({\n            role: 'assistant',\n            content: `I have completed the previous action using the ${messages[assistantMsgIndex].tool_calls[0].function.name} tool with parameters: ${toolParams}`\n          });\n          // Skip the original assistant message and potentially the user message before it\n          i = assistantMsgIndex; \n          if (messages[i-1]?.role === 'user') {\n            i--; // Also skip the user message if it likely triggered the tool call\n          }\n        } else {\n          // If couldn't find assistant message, keep the tool message but log a warning\n          this.debug(\"Could not find matching assistant message for tool result\", { tool_call_id: messages[i].tool_call_id });\n        }\n      } else {\n        // Keep other messages\n        simplifiedMessages.unshift(messages[i]);\n      }\n      \n      // If we processed the tool result, stop simplifying further back\n      if (foundToolResult) break;\n    }\n    \n    // If we didn't find a tool result (shouldn't happen in the intended flow, but safeguard)\n    if (!foundToolResult) {\n        return messages; \n    }\n    \n    // Return the potentially simplified message history\n    // Ensure the system message is always first if present\n    const systemMessage = messages.find(m => m.role === 'system');\n    const finalMessages = simplifiedMessages.filter(m => m.role !== 'system');\n    if (systemMessage) {\n        finalMessages.unshift(systemMessage);\n    }\n\n    return finalMessages;\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  async sendThread(thread: Thread): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    this.debug(\"Sending message to Cerebras API\", { model: this.model });\n\n    // Check if we have a completely new conversation\n    const isNewConversation = thread.all().length <= 1;\n    \n    if (isNewConversation) {\n      // Reset all tracking for new conversations\n      this.debug(\"Starting new conversation, resetting all tracking\");\n      this.recentToolCalls = [];\n      this.totalToolCallsCounter = 0;\n      this.toolCallTracker = {};\n    } else {\n      // Examine if this is a fresh session that should reset counters\n      \n      // Check if there are any completed tool calls in the history\n      let hasCompletedToolCalls = false;\n      \n      for (const msg of thread.all()) {\n        // Check if any message contains tool calls that have been executed\n        if (msg.toolResults && msg.toolResults.length > 0) {\n          hasCompletedToolCalls = true;\n          break;\n        }\n      }\n      \n      if (!hasCompletedToolCalls) {\n        // If no completed tool calls in history, this is effectively a new conversation\n        this.debug(\"No completed tool calls in history, resetting tool counters\");\n        this.totalToolCallsCounter = 0;\n        // We don't reset usedToolNames here because we still want to avoid repeats\n      }\n    }\n    \n    // For safety, examine the existing thread for already executed tool calls\n    // This helps us maintain tracking even when the driver instance persists across multiple API calls\n    if (!isNewConversation) {\n      // Count all existing tool calls in the thread\n      let existingToolCalls = 0;\n      \n      for (const msg of thread.all()) {\n        if (msg.toolCalls && msg.toolCalls.length > 0) {\n          existingToolCalls += msg.toolCalls.length;\n          \n          // Also track each tool call's signature\n          for (const call of msg.toolCalls) {\n            const argsHash = this.hashToolCallArgs(call.arguments);\n            const callKey = `${call.name}:${argsHash}`;\n            this.toolCallTracker[callKey] = (this.toolCallTracker[callKey] || 0) + 1;\n          }\n        }\n      }\n      \n      // Use this to initialize our counter if it's not already set\n      if (this.totalToolCallsCounter < existingToolCalls) {\n        this.totalToolCallsCounter = existingToolCalls;\n        this.debug(\"Updated tool call counter from thread history\", { count: existingToolCalls });\n      }\n      \n      // Log the current state of tool counts\n      this.debug(\"Current tool call counts\", {\n        totalToolCallsCounter: this.totalToolCallsCounter,\n        maxLimit: this.maxTotalToolCalls\n      });\n    }\n\n    // Format messages for Cerebras API\n    let messages = this.formatMessagesForAPI(thread);\n    \n    // Check if the last message is a tool result, indicating we should simplify history\n    const lastMessage = messages[messages.length - 1];\n    if (lastMessage?.role === 'tool') {\n      this.debug(\"Simplifying message history after tool result\");\n      messages = this.simplifyMessagesAfterToolCall(messages);\n    }\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(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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        // Preprocess tools to handle special field references\n        const preprocessedTools = this.preprocessToolDefinitions(tools);\n        params.tools = this.createToolDefinitions(preprocessedTools);\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      } else if (this.responseFormatSchema) {\n        // Only apply response_format if NO tools are being used, as per Cerebras docs\n        params.response_format = {\n          type: \"json_schema\",\n          json_schema: {\n            name: this.responseFormatName,\n            strict: this.responseFormatStrict,\n            schema: this.responseFormatSchema\n          }\n        };\n        this.debug(\"Applying structured response_format\", { name: this.responseFormatName, strict: this.responseFormatStrict });\n      }\n\n      // Log the full request parameters before making the API call\n      this.debug(\"Cerebras API request parameters\", {\n        model: params.model,\n        temperature: params.temperature,\n        max_tokens: params.max_tokens,\n        parallel_tool_calls: params.parallel_tool_calls,\n        tool_choice: params.tool_choice,\n        toolsCount: params.tools ? params.tools.length : 0,\n        messageCount: params.messages.length,\n        // Log a sample of the tool definitions\n        toolsSample: params.tools ? params.tools.slice(0, 1).map((tool: any) => ({\n          type: tool.type,\n          functionName: tool.function?.name,\n          parametersSchema: tool.function?.parameters\n        })) : null,\n        // Log a sample of the messages\n        messagesSample: params.messages.slice(-3).map((msg: any) => ({\n          role: msg.role,\n          contentLength: msg.content ? (typeof msg.content === 'string' ? msg.content.length : JSON.stringify(msg.content).length) : 0,\n          hasToolCalls: !!msg.tool_calls,\n          toolCallCount: msg.tool_calls ? msg.tool_calls.length : 0\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        try {\n          response = await this.client.chat.completions.create(params) as CerebrasResponse;\n        } catch (apiError: any) {\n          // Log all details for debugging\n          this.error(\"Cerebras API error details\", {\n            error: apiError.message,\n            code: apiError.error?.code,\n            statusCode: apiError.statusCode,\n            failed_generation: apiError.error?.failed_generation || 'not available',\n            type: apiError.type,\n            param: apiError.param\n          });\n          \n          try {\n            // Try various fallback strategies\n            response = await this.tryFallbackStrategies(params, apiError);\n            this.debug(\"Fallback strategy succeeded\", { \n              model: response.model, \n              responseType: response.object,\n              choiceCount: response.choices?.length || 0\n            });\n          } catch (fallbackError) {\n            // All fallback strategies failed, re-throw original error\n            throw apiError;\n          }\n        }\n        \n        // Log the raw response for debugging\n        this.debug(\"Cerebras API raw response\", {\n          id: response.id,\n          model: response.model,\n          response: response,\n          firstChoiceContent: response.choices?.[0]?.message?.content,\n          hasTool: !!response.choices?.[0]?.message?.tool_calls,\n          finishReason: response.choices?.[0]?.finish_reason\n        });\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        // Determine tool calls based PRIMARILY on finish_reason and explicit tool_calls\n        let finalToolCalls: ToolCall[] | undefined = undefined;\n\n        if (lastChoice.finish_reason === 'tool_calls' && choice.tool_calls) {\n            // Primary case: Model explicitly signals tool calls\n            finalToolCalls = this.parseToolCalls(choice.tool_calls);\n            this.debug(\"Using explicit tool_calls from API response\", { count: finalToolCalls?.length });\n        } else if (choice.content) {\n            // Fallback: Try to parse embedded tool calls from content,\n            // regardless of finish_reason, but only if no explicit tool_calls were provided.\n            // This handles cases where the model might output a tool call in text\n            // even with finish_reason: \"stop\".\n            const embeddedCalls = this.parseEmbeddedToolCalls(choice.content);\n            if (embeddedCalls && embeddedCalls.length > 0) {\n                finalToolCalls = embeddedCalls;\n                this.debug(\"Using embedded tool_calls parsed from content\", { count: finalToolCalls?.length, finish_reason: lastChoice.finish_reason });\n                // If we found embedded calls, the actual content should be considered empty\n                // choice.content = \"\"; // Let message constructor handle this based on finalToolCalls\n            }\n        }\n\n        // Create a new message from the response\n        const message = new Message({\n          role: \"assistant\",\n          // If we identified tool calls (either explicit or embedded), content should be empty.\n          // Otherwise, use the model's text content.\n          content: finalToolCalls && finalToolCalls.length > 0 ? \"\" : (choice.content || \"\"),\n          toolCalls: finalToolCalls,\n          cache: this.cache,\n        });\n\n        // Check for potential infinite tool call loops\n        if (message.toolCalls && message.toolCalls.length > 0) {\n          // First check if we've exceeded the total tool call limit\n          // Update the counter using our new method that excludes utility tools\n          this.updateToolCallCounter(message.toolCalls);\n          \n          if (this.totalToolCallsCounter > this.maxTotalToolCalls) {\n            this.debug(\"Exceeded maximum total tool calls limit\", {\n              count: this.totalToolCallsCounter,\n              limit: this.maxTotalToolCalls,\n              model: this.model\n            });\n            \n            // Replace with a message explaining the situation\n            const limitMessage = new Message({\n              role: \"assistant\",\n              content: \"I've reached the maximum number of tool calls allowed for this conversation. This suggests there might be a loop in my reasoning. Let me summarize without using more tools.\",\n              cache: this.cache,\n            });\n            \n            // Replace the original message\n            Object.assign(message, limitMessage);\n          } else {\n            // Check each tool call to see if it's a repeat\n            const safeToolCalls = message.toolCalls.filter(toolCall => {\n              const isRepeated = this.isRepeatedToolCall(toolCall.name, toolCall.arguments);\n              if (isRepeated) {\n                this.debug(`Filtering out repeated tool call: ${toolCall.name}`, {\n                  toolUseId: toolCall.toolUseId,\n                  isFirstUse: false\n                });\n              } else {\n                this.debug(`Allowing tool call: ${toolCall.name}`, {\n                  toolUseId: toolCall.toolUseId,\n                  isFirstUse: true\n                });\n              }\n              return !isRepeated;\n            });\n            \n            // If we filtered out any tool calls, replace the message\n            if (safeToolCalls.length < message.toolCalls.length) {\n              this.debug(\"Filtered out repeated tool calls\", {\n                modelName: this.model,\n                originalCount: message.toolCalls.length,\n                filteredCount: safeToolCalls.length,\n                toolNames: message.toolCalls.map(tc => tc.name),\n                safeToolNames: safeToolCalls.map(tc => tc.name)\n              });\n              \n              if (safeToolCalls.length > 0) {\n                // Keep non-repeating tool calls\n                const updatedMessage = new Message({\n                  role: \"assistant\",\n                  content: message.content,\n                  toolCalls: safeToolCalls,\n                  cache: this.cache,\n                });\n                \n                // Replace the original message\n                Object.assign(message, updatedMessage);\n              } else {\n                // If all tool calls were repeating, replace with a text response\n                const noRepeatMessage = new Message({\n                  role: \"assistant\",\n                  content: \"I noticed that I would be calling tools that have already been used. Let's approach this differently without using repeated tools. How else can I help you with your request?\",\n                  cache: this.cache,\n                });\n                \n                // Replace the original message\n                Object.assign(message, noRepeatMessage);\n              }\n            }\n          }\n        }\n\n        // If we found tool calls extracted from content, clear the content to avoid duplication\n        if (!choice.tool_calls && message.toolCalls && message.toolCalls.length > 0) {\n          // Filter out any repeated tool calls from the extracted ones\n          const safeToolCalls = message.toolCalls.filter(toolCall => {\n            const isRepeated = this.isRepeatedToolCall(toolCall.name, toolCall.arguments);\n            if (isRepeated) {\n              this.debug(`Filtering out repeated tool call from content: ${toolCall.name}`, {\n                toolUseId: toolCall.toolUseId,\n                isFirstUse: false\n              });\n            } else {\n              this.debug(`Allowing tool call from content: ${toolCall.name}`, {\n                toolUseId: toolCall.toolUseId,\n                isFirstUse: true\n              });\n            }\n            return !isRepeated;\n          });\n          \n          if (safeToolCalls.length > 0) {\n            // Tool calls were extracted from content and at least some are not repeats,\n            // so create a new message with the safe tool calls\n            const updatedMessage = new Message({\n              role: \"assistant\",\n              content: \"\", // Empty content since the content was actually a tool call\n              toolCalls: safeToolCalls,\n              cache: this.cache,\n            });\n            \n            // Log details of the detected tool calls\n            this.debug(\"Extracted tool calls from message content\", {\n              totalToolCount: message.toolCalls.length,\n              safeToolCount: safeToolCalls.length,\n              toolNames: safeToolCalls.map(t => t.name),\n              originalContentLength: choice.content?.length || 0\n            });\n            \n            // Add the updated message to the thread\n            thread.push(updatedMessage);\n          } else {\n            // All extracted tool calls were repeats, so create a text message instead\n            const noRepeatMessage = new Message({\n              role: \"assistant\",\n              content: \"I was going to use some tools to help with your request, but I noticed they would be repeats of tools already used. Let me help you directly instead.\",\n              cache: this.cache,\n            });\n            \n            // Add the message to the thread\n            thread.push(noRepeatMessage);\n          }\n        } else {\n          // Add the original message to the thread\n          thread.push(message);\n        }\n      } catch (error: any) {\n        // Log all available error details\n        this.error(\"Cerebras API error details\", {\n          error: error.message,\n          code: error.error?.code,\n          statusCode: error.statusCode,\n          failed_generation: error.error?.failed_generation || 'not available',\n          type: error.type,\n          param: error.param,\n          raw: JSON.stringify(error)\n        });\n\n        // Check if this is a tool call error with failed_generation information\n        if (error?.error?.code === 'tool_use_failed' && \n            error?.error?.failed_generation && \n            tools && 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            // It might be a string or already an object\n            let failedGeneration: any;\n            if (typeof error.error.failed_generation === 'string') {\n              try {\n                failedGeneration = JSON.parse(error.error.failed_generation);\n              } catch (e) {\n                // If it's not valid JSON, try to recover by parsing with a regex\n                const nameMatch = /[\"']?name[\"']?\\s*:\\s*[\"']([^\"']+)[\"']/.exec(error.error.failed_generation);\n                const argsMatch = /[\"']?arguments[\"']?\\s*:\\s*[\"']?({[^}]+})[\"']?/.exec(error.error.failed_generation);\n                const paramsMatch = /[\"']?parameters[\"']?\\s*:\\s*[\"']?({[^}]+})[\"']?/.exec(error.error.failed_generation);\n                \n                if (nameMatch && nameMatch[1]) {\n                  failedGeneration = {\n                    name: nameMatch[1],\n                    arguments: argsMatch && argsMatch[1] ? JSON.parse(argsMatch[1]) : {},\n                    parameters: paramsMatch && paramsMatch[1] ? JSON.parse(paramsMatch[1]) : {}\n                  };\n                } else {\n                  throw e; // Can't recover, rethrow\n                }\n              }\n            } else {\n              failedGeneration = error.error.failed_generation;\n            }\n            \n            // Check if the failed generation has the expected format\n            // Look for name and arguments/parameters in multiple possible locations\n            const toolName = failedGeneration.name || \n                            (failedGeneration.function && failedGeneration.function.name);\n            \n            let toolArgs: any = {};\n            \n            // Check for arguments in multiple possible locations\n            if (failedGeneration.arguments) {\n              toolArgs = typeof failedGeneration.arguments === 'string' \n                ? JSON.parse(failedGeneration.arguments) \n                : failedGeneration.arguments;\n            } else if (failedGeneration.parameters) {\n              toolArgs = typeof failedGeneration.parameters === 'string' \n                ? JSON.parse(failedGeneration.parameters) \n                : failedGeneration.parameters;\n            } else if (failedGeneration.function) {\n              if (failedGeneration.function.arguments) {\n                toolArgs = typeof failedGeneration.function.arguments === 'string' \n                  ? JSON.parse(failedGeneration.function.arguments) \n                  : failedGeneration.function.arguments;\n              } else if (failedGeneration.function.parameters) {\n                toolArgs = typeof failedGeneration.function.parameters === 'string' \n                  ? JSON.parse(failedGeneration.function.parameters) \n                  : failedGeneration.function.parameters;\n              }\n            }\n            \n            if (toolName) {\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                      toolUseId,\n                      name: toolName,\n                      arguments: toolArgs\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                      toolUseId,\n                      name: toolName,\n                      result: result\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        // Try to extract failed_generation from error message if not in error.error structure\n        else if (error?.message && error.message.includes('failed_generation') && \n                 tools && tools.length > 0) {\n          this.debug(\"Attempting to extract failed_generation from error message\", { \n            message: error.message \n          });\n          \n          try {\n            // Try to find a JSON object in the error message\n            const jsonMatch = error.message.match(/failed_generation['\":\\s]+({[\\s\\S]*?})(?:\\s|$)/i);\n            if (jsonMatch && jsonMatch[1]) {\n              const failedGeneration = JSON.parse(jsonMatch[1]);\n              \n              // Extract tool name\n              const toolName = failedGeneration.name || \n                              (failedGeneration.function && failedGeneration.function.name);\n              \n              if (toolName) {\n                // Extract arguments\n                let toolArgs: any = {};\n                \n                if (failedGeneration.arguments) {\n                  toolArgs = typeof failedGeneration.arguments === 'string' \n                    ? JSON.parse(failedGeneration.arguments) \n                    : failedGeneration.arguments;\n                } else if (failedGeneration.parameters) {\n                  toolArgs = typeof failedGeneration.parameters === 'string' \n                    ? JSON.parse(failedGeneration.parameters) \n                    : failedGeneration.parameters;\n                } else if (failedGeneration.function) {\n                  if (failedGeneration.function.arguments) {\n                    toolArgs = typeof failedGeneration.function.arguments === 'string' \n                      ? JSON.parse(failedGeneration.function.arguments) \n                      : failedGeneration.function.arguments;\n                  } else if (failedGeneration.function.parameters) {\n                    toolArgs = typeof failedGeneration.function.parameters === 'string' \n                      ? JSON.parse(failedGeneration.function.parameters) \n                      : failedGeneration.function.parameters;\n                  }\n                }\n                \n                // Find the matching tool and attempt to execute it\n                const matchingTool = tools.find(t => t.getName() === toolName);\n                if (matchingTool) {\n                  this.debug(`Found tool ${toolName} from error message, attempting to execute`, toolArgs);\n                  \n                  // Generate a unique tool use ID\n                  const toolUseId = nanoid();\n                  \n                  // Create a tool call object\n                  const toolCall = {\n                    toolUseId,\n                    name: toolName,\n                    arguments: toolArgs\n                  };\n                  \n                  // Execute the tool\n                  const toolResult = await matchingTool.executeTool(toolArgs, toolCall);\n                  \n                  // Create messages and add to thread as in the other error handler\n                  // Extract the result\n                  const result = toolResult.success ? toolResult.result : null;\n                  \n                  // Create content for the final message\n                  let content = `I'll help with that using the ${toolName} tool.\\n\\n`;\n                  \n                  if (result !== null) {\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 and add messages to the thread\n                  const assistantMessage = new Message({\n                    role: \"assistant\",\n                    content: `I'll help with that using the ${toolName} tool.`,\n                    toolCalls: [toolCall],\n                    cache: this.cache,\n                  });\n                  \n                  const toolResultMessage = new Message({\n                    role: \"user\",\n                    content: \"\",\n                    toolResults: [{\n                      toolUseId,\n                      name: toolName,\n                      result: result\n                    }],\n                    cache: this.cache,\n                  });\n                  \n                  const finalMessage = new Message({\n                    role: \"assistant\",\n                    content,\n                    cache: this.cache,\n                  });\n                  \n                  thread.push(assistantMessage);\n                  thread.push(toolResultMessage);\n                  thread.push(finalMessage);\n                  \n                  this.debug(\"Successfully executed tool from error message\");\n                  return thread;\n                }\n              }\n            } else {\n              // Try to extract tool name and args from error message with regex\n              const nameMatch = error.message.match(/name['\"]?\\s*:\\s*['\"]([^'\"]+)['\"]/i);\n              const argumentsMatch = error.message.match(/arguments['\"]?\\s*:\\s*['\"]?({[^}]+})['\"]?/i);\n              \n              if (nameMatch && nameMatch[1]) {\n                const toolName = nameMatch[1];\n                let toolArgs = {};\n                \n                if (argumentsMatch && argumentsMatch[1]) {\n                  try {\n                    toolArgs = JSON.parse(argumentsMatch[1]);\n                  } catch (e) {\n                    this.error(\"Failed to parse arguments from error message\", { \n                      args: argumentsMatch[1], error: e \n                    });\n                  }\n                }\n                \n                const matchingTool = tools.find(t => t.getName() === toolName);\n                if (matchingTool) {\n                  // Execute the tool as in the previous case\n                  // ... similar implementation as above\n                  this.debug(`Found tool ${toolName} from error message regex, attempting to execute`, toolArgs);\n                  \n                  // Generate a unique tool use ID\n                  const toolUseId = nanoid();\n                  \n                  // Create the tool call and execute it (simplified to not duplicate code)\n                  const toolCall = { toolUseId, name: toolName, arguments: toolArgs };\n                  const toolResult = await matchingTool.executeTool(toolArgs, toolCall);\n                  const result = toolResult.success ? toolResult.result : null;\n                  \n                  // Add the appropriate messages to the thread\n                  thread.push(new Message({\n                    role: \"assistant\",\n                    content: `I'll help with that using the ${toolName} tool.`,\n                    toolCalls: [toolCall],\n                    cache: this.cache,\n                  }));\n                  \n                  thread.push(new Message({\n                    role: \"user\",\n                    content: \"\",\n                    toolResults: [{\n                      toolUseId,\n                      name: toolName,\n                      result: result\n                    }],\n                    cache: this.cache,\n                  }));\n                  \n                  let content = `I'll help with that using the ${toolName} tool.\\n\\n`;\n                  if (result !== null) {\n                    content += typeof result === 'object' \n                      ? `Here's the result: ${JSON.stringify(result, null, 2)}` \n                      : `The result is: ${result}`;\n                  } else if (toolResult.error) {\n                    content += `There was an error executing the tool: ${toolResult.error}`;\n                  }\n                  \n                  thread.push(new Message({\n                    role: \"assistant\",\n                    content,\n                    cache: this.cache,\n                  }));\n                  \n                  this.debug(\"Successfully executed tool from error message regex match\");\n                  return thread;\n                }\n              }\n            }\n          } catch (parsingError) {\n            this.error(\"Error extracting failed_generation from error message\", { \n              parsingError, \n              message: error.message \n            });\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 && 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 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  async *streamThread(thread: Thread): AsyncGenerator<\n    { stream: AsyncGenerator<string, void>; message: Message }, Thread\n  > {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    this.debug(\"Streaming message to Cerebras API\", { model: this.model });\n    \n    // Check if we have a completely new conversation\n    const isNewConversation = thread.all().length <= 1;\n    \n    if (isNewConversation) {\n      // Reset all tracking for new streamed conversations\n      this.debug(\"Starting new streamed conversation, resetting all tracking\");\n      this.recentToolCalls = [];\n      this.totalToolCallsCounter = 0;\n      this.toolCallTracker = {};\n    }\n    \n    // For safety, examine the existing thread for already executed tool calls\n    if (!isNewConversation) {\n      // Track all existing tool calls in the thread for streaming\n      let existingToolCalls = 0;\n      \n      for (const msg of thread.all()) {\n        if (msg.toolCalls && msg.toolCalls.length > 0) {\n          existingToolCalls += msg.toolCalls.length;\n          \n          // Also track each tool call's signature\n          for (const call of msg.toolCalls) {\n            const argsHash = this.hashToolCallArgs(call.arguments);\n            const callKey = `${call.name}:${argsHash}`;\n            this.toolCallTracker[callKey] = (this.toolCallTracker[callKey] || 0) + 1;\n          }\n        }\n      }\n      \n      // Use this to initialize our counter if it's not already set\n      if (this.totalToolCallsCounter < existingToolCalls) {\n        this.totalToolCallsCounter = existingToolCalls;\n        this.debug(\"Updated tool call counter for streaming from thread history\", { count: existingToolCalls });\n      }\n      \n      // Log the current state of tool counts\n      this.debug(\"Current tool call counts\", {\n        totalToolCallsCounter: this.totalToolCallsCounter,\n        maxLimit: this.maxTotalToolCalls\n      });\n    }\n\n    // Format messages for Cerebras API\n    let messages = this.formatMessagesForAPI(thread);\n    \n    // Check if the last message is a tool result, indicating we should simplify history\n    const lastMessage = messages[messages.length - 1];\n    if (lastMessage?.role === 'tool') {\n      this.debug(\"Simplifying message history after tool result\");\n      messages = this.simplifyMessagesAfterToolCall(messages);\n    }\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(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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        \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      } else if (this.responseFormatSchema) {\n        // Only apply response_format if NO tools are being used\n        params.response_format = {\n          type: \"json_schema\",\n          json_schema: {\n            name: this.responseFormatName,\n            strict: this.responseFormatStrict,\n            schema: this.responseFormatSchema\n          }\n        };\n        this.debug(\"Applying structured response_format for streaming\", { name: this.responseFormatName, strict: this.responseFormatStrict });\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 = (existingCall.function.arguments || \"\") + \n                      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 = typeof func.parameters === 'string' \n                        ? func.parameters \n                        : JSON.stringify(func.parameters);\n                      \n                      existingCall.function.arguments = (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        // Update total tool call counter for stream\n        if (parsedToolCalls) {\n          this.updateToolCallCounter(parsedToolCalls);\n        }\n        \n        // Check if we've exceeded the total tool call limit\n        if (this.totalToolCallsCounter > this.maxTotalToolCalls) {\n          this.debug(\"Exceeded maximum total tool calls limit in stream\", {\n            count: this.totalToolCallsCounter,\n            limit: this.maxTotalToolCalls,\n            model: this.model\n          });\n          \n          yield \"\\n\\nI've reached the maximum number of tool calls allowed for this conversation. Let me summarize without using more tools.\";\n          \n          // Create a message with no tool calls\n          const updatedMessage = new Message({\n            role: \"assistant\",\n            content: message.content || \"I've reached the maximum number of tool calls allowed. Let me help you directly.\",\n            cache: this.cache,\n          });\n          \n          // Copy the updated message properties\n          Object.assign(message, updatedMessage);\n          return;\n        }\n        \n        // Check for any repeated tool calls - with our updated policy,\n        // we allow the first occurrence but filter out repeated calls\n        let finalToolCalls: ToolCall[] = [];\n        if (parsedToolCalls) {\n          // Check each tool call to see if it's already been used\n          finalToolCalls = parsedToolCalls.filter(toolCall => {\n            const isRepeated = this.isRepeatedToolCall(toolCall.name, toolCall.arguments);\n            if (isRepeated) {\n              this.debug(`Filtering out repeated tool call in stream: ${toolCall.name}`, {\n                toolUseId: toolCall.toolUseId,\n                isFirstUse: false\n              });\n            } else {\n              this.debug(`Allowing tool call in stream: ${toolCall.name}`, {\n                toolUseId: toolCall.toolUseId,\n                isFirstUse: true\n              });\n            }\n            return !isRepeated;\n          });\n          \n          // Log if we found any repeated calls\n          if (finalToolCalls.length < parsedToolCalls.length) {\n            this.debug(\"Filtered out repeated tool calls in stream\", {\n              modelName: this.model,\n              originalCount: parsedToolCalls.length,\n              filteredCount: finalToolCalls.length,\n              toolNames: parsedToolCalls.map(tc => tc.name),\n              allowedTools: finalToolCalls.map(tc => tc.name)\n            });\n            \n            // If all tool calls were filtered out, yield a message explaining why\n            if (finalToolCalls.length === 0) {\n              yield \"\\n\\nI noticed I would be repeating tool calls that were already used. Let me approach this differently without using tools.\";\n              \n              // Just update content, no tool calls\n              const updatedMessage = new Message({\n                role: \"assistant\",\n                content: (message.content || \"\") + \"\\n\\nI noticed I would be repeating tool calls. Let me approach this differently without using tools.\",\n                cache: this.cache,\n              });\n              \n              // Copy the updated message properties\n              Object.assign(message, updatedMessage);\n              return;\n            }\n          }\n        }\n        \n        // Create a new message with the filtered tool calls\n        const updatedMessage = new Message({\n          role: \"assistant\",\n          content: message.content || \"\",\n          toolCalls: finalToolCalls,\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 tool call counter\n          this.updateToolCallCounter(embeddedToolCalls);\n          \n          // Check for loop or limit exceeded\n          if (this.totalToolCallsCounter > this.maxTotalToolCalls) {\n            // Just return a text message, no tool calls\n            const limitMessage = new Message({\n              role: \"assistant\",\n              content: message.content || \"I've reached the maximum number of tool calls allowed. Let me help you directly.\",\n              cache: this.cache,\n            });\n            \n            Object.assign(message, limitMessage);\n            return;\n          }\n          \n          // Filter out any repeated tool calls from the extracted ones\n          const safeToolCalls = embeddedToolCalls.filter(toolCall => {\n            const isRepeated = this.isRepeatedToolCall(toolCall.name, toolCall.arguments);\n            if (isRepeated) {\n              this.debug(`Filtering out repeated embedded tool call: ${toolCall.name}`, {\n                toolUseId: toolCall.toolUseId,\n                isFirstUse: false\n              });\n            } else {\n              this.debug(`Allowing embedded tool call: ${toolCall.name}`, {\n                toolUseId: toolCall.toolUseId,\n                isFirstUse: true\n              });\n            }\n            return !isRepeated;\n          });\n          \n          // Update message based on filtering results\n          if (safeToolCalls.length > 0) {\n            // Some tool calls are safe to use\n            const updatedMessage = new Message({\n              role: \"assistant\",\n              content: \"\", // Empty content since these were embedded\n              toolCalls: safeToolCalls,\n              cache: this.cache,\n            });\n            \n            Object.assign(message, updatedMessage);\n          } else if (embeddedToolCalls.length > 0) {\n            // All embedded tool calls were repeats\n            const alternativeMessage = new Message({\n              role: \"assistant\",\n              content: \"I noticed I would be using repeated tool calls. Let me help you directly instead.\",\n              cache: this.cache,\n            });\n            \n            Object.assign(message, alternativeMessage);\n          }\n        }\n      }\n    } catch (error) {\n      this.error(\"Error processing Cerebras stream\", { error });\n      throw error;\n    }\n  }\n\n  /**\n   * Format messages from the Thread object to the Cerebras API format\n   */\n  private formatMessagesForAPI(thread: Thread): any[] {\n    const messages: any[] = [];\n\n    for (const message of thread.all()) {\n      // First preprocess any content to handle special field references\n      const processedContent = message.content \n        ? this.preprocessFieldReferences(message.content) \n        : message.content;\n      \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 (processedContent) {\n          contentParts.push({\n            type: \"text\",\n            text: processedContent,\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          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 (processedContent) {\n          messages.push({\n            role: \"user\",\n            content: processedContent,\n          });\n        }\n\n        // Then add each tool result as a separate message\n        for (const toolResult of message.toolResults) {\n          let toolResultContent: string;\n          \n          // Ensure proper stringification of tool results\n          if (typeof toolResult.result === 'string') {\n            toolResultContent = toolResult.result;\n          } else {\n            try {\n              toolResultContent = JSON.stringify(toolResult.result);\n            } catch (e) {\n              this.error(\"Error stringifying tool result\", { error: e, result: toolResult.result });\n              toolResultContent = String(toolResult.result);\n            }\n          }\n          \n          messages.push({\n            role: \"tool\",\n            tool_call_id: toolResult.toolUseId,\n            content: toolResultContent,\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          // Ensure arguments is properly stringified\n          let argumentsStr = \"{}\"; // Default to empty object\n          \n          // Workaround for 'arguments' error - always use a valid JSON object\n          try {\n            // Handle different argument types\n            if (typeof call.arguments === 'string') {\n              // Check if it's already valid JSON\n              try {\n                JSON.parse(call.arguments);\n                argumentsStr = call.arguments;\n              } catch (e) {\n                // Not valid JSON, wrap it\n                argumentsStr = JSON.stringify({ value: call.arguments });\n              }\n            } else if (call.arguments && typeof call.arguments === 'object') {\n              // For objects, stringify them safely\n              argumentsStr = JSON.stringify(call.arguments);\n            }\n          } catch (e) {\n            this.error(\"Error processing tool call arguments\", { \n              error: e, \n              name: call.name,\n              args: typeof call.arguments === 'object' ? 'object' : call.arguments\n            });\n          }\n          \n          // Log the tool call for debugging\n          this.debug(`Tool call for ${call.name}`, {\n            name: call.name,\n            argumentsStr,\n          });\n          \n          return {\n            id: call.toolUseId,\n            type: \"function\" as const,\n            function: {\n              name: call.name,\n              arguments: argumentsStr,\n            },\n          };\n        });\n\n        messages.push({\n          role: \"assistant\",\n          content: processedContent || null,\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: processedContent || \"\",\n        });\n      } else if (message.role === \"assistant\") {\n        messages.push({\n          role: \"assistant\",\n          content: processedContent || \"\",\n        });\n      } else if (message.role === \"system\") {\n        messages.push({\n          role: \"system\",\n          content: processedContent || \"\",\n        });\n      }\n    }\n\n    return messages;\n  }\n\n  /**\n   * Create tool definitions for the Cerebras API\n   */\n  private createToolDefinitions(tools: Tool[]): any[] {\n    return tools.map(tool => {\n      const zodParams = tool.getParameters();\n      // Convert Zod schema to JSON schema\n      const jsonSchemaFromZod = zodToJsonSchema(zodParams) as any;\n\n      // Use properties directly from the converted schema.\n      // zodToJsonSchema should handle correct type definitions, including items for arrays.\n      const properties = jsonSchemaFromZod.properties || {};\n      let required = jsonSchemaFromZod.required || [];\n\n      // Filter 'required' to ensure all fields listed actually exist in 'properties'.\n      // This is a good sanity check and ensures robustness.\n      if (Array.isArray(required)) {\n        required = required.filter(\n          (reqField: string) => typeof reqField === 'string' && properties.hasOwnProperty(reqField)\n        );\n      } else {\n        // Ensure 'required' is always an array, even if originally undefined or malformed.\n        required = [];\n      }\n\n      const apiParameters = {\n        type: jsonSchemaFromZod.type || \"object\", // zod-to-json-schema usually sets type: 'object' for z.object()\n        properties: properties, // Use properties directly from zodToJsonSchema output\n        required: required\n        // Other JSON Schema fields like 'description', 'definitions' could be included\n        // if relevant and output by zodToJsonSchema and needed by the API.\n        // For now, focusing on the core: type, properties, required.\n      };\n\n      // Log the final tool parameters being prepared for the API call\n      this.debug(`Tool definition parameters for ${tool.getName()}`, apiParameters);\n\n      return {\n        type: \"function\",\n        function: {\n          name: tool.getName(),\n          strict: true,\n          description: tool.getDescription(), // This is the description of the tool/function itself\n          parameters: apiParameters // This is the JSON schema for the arguments the function expects\n        },\n      };\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 {\n                // Try to parse JSON string\n                args = JSON.parse(toolCall.function.arguments);\n              } catch (e) {\n                // If parsing fails, use the string directly\n                this.debug(\"Failed to parse tool call arguments as JSON\", {\n                  arguments: toolCall.function.arguments,\n                  error: e\n                });\n                args = { value: toolCall.function.arguments };\n              }\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              try {\n                args = JSON.parse(toolCall.function.parameters);\n              } catch (e) {\n                // If parsing fails, use the string directly\n                this.debug(\"Failed to parse tool call parameters as JSON\", {\n                  parameters: toolCall.function.parameters,\n                  error: e\n                });\n                args = { value: toolCall.function.parameters };\n              }\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   * Check if a tool should be excluded from the tool call limit count\n   * Some utility tools like SuggestNextStepsTool are meant to be called multiple times\n   * and shouldn't count toward the limit\n   */\n  private isUtilityTool(toolName: string): boolean {\n    // List of utility tools that shouldn't count toward the limit\n    const utilityTools = ['SuggestNextStepsTool'];\n    return utilityTools.includes(toolName);\n  }\n\n  /**\n   * Update the tool call counter appropriately based on the tools being called\n   * Utility tools don't count toward the limit\n   */\n  private updateToolCallCounter(toolCalls: ToolCall[]): number {\n    // Filter out utility tools that shouldn't count toward the limit\n    const countableToolCalls = toolCalls.filter(call => !this.isUtilityTool(call.name));\n    \n    // Update the counter with only the countable tools\n    this.totalToolCallsCounter += countableToolCalls.length;\n    \n    // Log what's being counted and what's not\n    if (countableToolCalls.length < toolCalls.length) {\n      this.debug(\"Some tools excluded from call limit\", {\n        totalCalls: toolCalls.length,\n        countableCalls: countableToolCalls.length,\n        excludedTools: toolCalls\n          .filter(call => this.isUtilityTool(call.name))\n          .map(call => call.name)\n      });\n    }\n    \n    return this.totalToolCallsCounter;\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            delta: {\n              content: typeof response.choices?.[0]?.message?.content === 'string' \n                ? response.choices[0].message.content \n                : ''\n            },\n            index: 0,\n            finish_reason: 'stop'\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      // Handle escaped JSON that might be present in the content\n      let processedContent = content;\n      \n      // Replace escaped quotes and backslashes to make parsing easier\n      processedContent = processedContent\n        .replace(/\\\\\"/g, '\"')\n        .replace(/\\\\\\\\/g, '\\\\');\n      \n      // First check for direct function call format like \"type\": \"function\", \"name\": \"...\"\n      if (processedContent.includes('\"type\"') && processedContent.includes('\"name\"')) {\n        try {\n          const parsed = JSON.parse(processedContent);\n          \n          // Handle format: {\"type\": \"function\", \"name\": \"ToolName\", \"parameters\": {...}}\n          if (parsed && \n              typeof parsed === 'object' && \n              parsed.type === 'function' && \n              parsed.name) {\n            \n            this.debug(\"Found function-style tool call in content\", parsed);\n            \n            const toolCall: ToolCall = {\n              toolUseId: nanoid(),\n              name: parsed.name,\n              arguments: parsed.parameters || {}\n            };\n            \n            toolCalls.push(toolCall);\n            return toolCalls;\n          }\n        } catch (e) {\n          // Continue to other formats if this fails\n          this.debug(\"Failed to parse function-style tool call\", { \n            error: e, \n            content: processedContent.substring(0, 100) \n          });\n        }\n      }\n      \n      // Next, check if the entire content is valid JSON with name and parameters fields\n      try {\n        const parsed = JSON.parse(processedContent);\n        \n        // If the parsed content is an object with name and parameters fields,\n        // it's likely a tool call embedded directly in the content\n        if (parsed && \n            typeof parsed === 'object' && \n            parsed.name && \n            (parsed.parameters || parsed.arguments)) {\n          \n          this.debug(\"Found direct tool call JSON in message content\", parsed);\n          \n          // Handle parameters that might include escaped JSON\n          let args = parsed.parameters || parsed.arguments || {};\n          \n          // If args is a string that contains JSON, try to parse it\n          if (typeof args === 'string') {\n            try {\n              // Handle special case where parameters might be JSON with escaped sequences\n              // For example: @{{{\\\"type\\\":\\\"field\\\",\\\"name\\\":\\\"Email\\\"...}}}\n              const jsonMatch = args.match(/@\\{\\{\\{(.*?)\\}\\}\\}/);\n              if (jsonMatch && jsonMatch[1]) {\n                // Replace escaped quotes and try to parse\n                const cleanJson = jsonMatch[1].replace(/\\\\\"/g, '\"');\n                try {\n                  args = JSON.parse(cleanJson);\n                } catch (e) {\n                  // Keep as is if we can't parse\n                }\n              } else {\n                // Try to parse the entire string as JSON\n                args = JSON.parse(args);\n              }\n            } catch (e) {\n              // Keep as is if we can't parse\n            }\n          }\n          \n          // Create a tool call from this format\n          const toolCall: ToolCall = {\n            toolUseId: nanoid(),\n            name: parsed.name,\n            arguments: args\n          };\n          \n          toolCalls.push(toolCall);\n          return toolCalls;\n        }\n      } catch (e) {\n        // Not valid JSON, continue with regex-based extraction\n      }\n      \n      // Special case for SuggestNextStepsTool which has a distinct format\n      const suggestToolRegex = /\"name\":\\s*\"SuggestNextStepsTool\"/i;\n      if (suggestToolRegex.test(processedContent)) {\n        try {\n          // Extract parameters if present\n          const paramsMatch = processedContent.match(/\"parameters\":\\s*(\\{[^}]*\\})/);\n          const params = paramsMatch && paramsMatch[1] ? JSON.parse(paramsMatch[1]) : {};\n          \n          const toolCall: ToolCall = {\n            toolUseId: nanoid(),\n            name: \"SuggestNextStepsTool\",\n            arguments: params\n          };\n          \n          this.debug(\"Found SuggestNextStepsTool in content\", toolCall);\n          toolCalls.push(toolCall);\n          return toolCalls;\n        } catch (e) {\n          // If extraction fails, create a minimal tool call\n          const toolCall: ToolCall = {\n            toolUseId: nanoid(),\n            name: \"SuggestNextStepsTool\",\n            arguments: { extra: {} }\n          };\n          \n          this.debug(\"Created minimal SuggestNextStepsTool call\", { error: e });\n          toolCalls.push(toolCall);\n          return toolCalls;\n        }\n      }\n      \n      // Special case for NormalizeTool which is frequently used with field references\n      const normalizeToolRegex = /\"name\":\\s*\"NormalizeTool\"/i;\n      if (normalizeToolRegex.test(processedContent)) {\n        try {\n          // Extract parameters if present\n          const paramsMatch = processedContent.match(/\"parameters\":\\s*(\\{[^}]*\\})/);\n          const rawParams = paramsMatch && paramsMatch[1] ? paramsMatch[1] : \"{}\";\n          \n          // Handle special characters and escape sequences in the raw JSON\n          const cleanParams = rawParams\n            .replace(/\\\\\"/g, '\"') \n            .replace(/\\\\\\\\/g, '\\\\');\n          \n          let params: Record<string, any> = {};\n          try {\n            params = JSON.parse(cleanParams);\n          } catch (e) {\n            // If parsing fails, try to extract individual fields\n            const sourceFieldMatch = rawParams.match(/\"sourceField\"\\s*:\\s*\"([^\"]+)\"/);\n            const formatMatch = rawParams.match(/\"format\"\\s*:\\s*\"([^\"]+)\"/);\n            const summaryMatch = rawParams.match(/\"summary\"\\s*:\\s*\"([^\"]+)\"/);\n            \n            params = {\n              sourceField: sourceFieldMatch && sourceFieldMatch[1] ? sourceFieldMatch[1] : \"\",\n              format: formatMatch && formatMatch[1] ? formatMatch[1] : \"\",\n              summary: summaryMatch && summaryMatch[1] ? summaryMatch[1] : \"Normalize field\"\n            };\n          }\n          \n          // Process any @{{{...}}} field references in parameters\n          for (const key in params) {\n            if (typeof params[key] === 'string' && params[key].includes('@{{{')) {\n              params[key] = this.preprocessFieldReferences(params[key]);\n            }\n          }\n          \n          const toolCall: ToolCall = {\n            toolUseId: nanoid(),\n            name: \"NormalizeTool\",\n            arguments: params\n          };\n          \n          this.debug(\"Found NormalizeTool in content\", toolCall);\n          toolCalls.push(toolCall);\n          return toolCalls;\n        } catch (e) {\n          // If extraction fails, log the error but don't create a minimal call\n          // since NormalizeTool requires specific parameters\n          this.error(\"Failed to parse NormalizeTool call\", { error: e, content: processedContent });\n        }\n      }\n      \n      // If we couldn't parse the entire content as JSON, look for valid JSON objects within it\n      const jsonPattern = /{(?:[^{}]|(?:{[^{}]*}))*}/g;\n      let match;\n      \n      while ((match = jsonPattern.exec(processedContent)) !== null) {\n        try {\n          const jsonStr = match[0];\n          const parsed = JSON.parse(jsonStr);\n          \n          if (parsed && \n              typeof parsed === 'object' && \n              (parsed.name || (parsed.function && parsed.function.name)) && \n              (parsed.parameters || parsed.arguments || \n               (parsed.function && (parsed.function.parameters || parsed.function.arguments)))) {\n            \n            // Determine the tool name\n            const toolName = parsed.name || (parsed.function && parsed.function.name);\n            \n            // Determine the arguments\n            let args = {};\n            if (parsed.parameters) {\n              args = parsed.parameters;\n            } else if (parsed.arguments) {\n              args = parsed.arguments;\n            } else if (parsed.function) {\n              args = parsed.function.parameters || parsed.function.arguments || {};\n            }\n            \n            // If args is a string, try to parse it as JSON\n            if (typeof args === 'string') {\n              try {\n                // Handle special case where parameters might be JSON with escaped sequences\n                const jsonMatch = args.match(/@\\{\\{\\{(.*?)\\}\\}\\}/);\n                if (jsonMatch && jsonMatch[1]) {\n                  // Replace escaped quotes and try to parse\n                  const cleanJson = jsonMatch[1].replace(/\\\\\"/g, '\"');\n                  try {\n                    args = JSON.parse(cleanJson);\n                  } catch (e) {\n                    // Keep as is if we can't parse\n                  }\n                } else {\n                  // Try to parse the entire string as JSON\n                  args = JSON.parse(args);\n                }\n              } catch (e) {\n                // Keep as is if we can't parse\n              }\n            }\n            \n            // Format as internal ToolCall\n            const toolCall: ToolCall = {\n              toolUseId: nanoid(),\n              name: toolName,\n              arguments: args\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\n          continue;\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  /**\n   * Preprocess tool definitions to handle special field references like @{{{...}}}\n   */\n  private preprocessToolDefinitions(tools: Tool[]): Tool[] {\n    // Create a deep copy of the tools to avoid modifying the originals\n    return tools.map(tool => {\n      // For each tool, we want to analyze its parameters and preprocess any special patterns\n      // This is a workaround for the specific format issue with @{{{...}}} in the example\n      \n      // Log the tool for debugging\n      this.debug(`Preprocessing tool ${tool.getName()}`, {\n        name: tool.getName(),\n        description: tool.getDescription(),\n        parameters: tool.getParameters()\n      });\n      \n      // Return the tool as-is for now\n      // We'll handle special patterns in the createToolDefinitions and formatMessagesForAPI methods\n      return tool;\n    });\n  }\n\n  /**\n   * Handle special field references in content\n   */\n  private preprocessFieldReferences(content: string): string {\n    if (!content) return content;\n    \n    // Handle special @{{{...}}} field references\n    // This is a workaround for the specific format in the example\n    try {\n      // Replace @{{{...}}} with a simpler format that's less likely to cause issues\n      return content.replace(/@\\{\\{\\{(.*?)\\}\\}\\}/g, (match, p1) => {\n        try {\n          // Try to parse the JSON inside and simplify it\n          const parsed = JSON.parse(p1.replace(/\\\\\"/g, '\"'));\n          if (parsed && parsed.type === 'field' && parsed.name) {\n            // Replace with a simpler format that references the field name\n            return `[Field:${parsed.name}]`;\n          }\n        } catch (e) {\n          // If parsing fails, just return the field name part if we can extract it\n          const nameMatch = p1.match(/name\\\\?\"?\\s*:\\s*\\\\?\"?([^\\\\\",}]+)/);\n          if (nameMatch && nameMatch[1]) {\n            return `[Field:${nameMatch[1]}]`;\n          }\n        }\n        // If all else fails, return the original match\n        return match;\n      });\n    } catch (e) {\n      this.error(\"Error preprocessing field references\", { error: e, content });\n      return content;\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 { 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) => this.client.textGenerationStream(params);\n    this.chatCompletionWithTracing = async (params: any) => this.client.chatCompletion(params);\n    this.chatCompletionStreamWithTracing = async (params: any) => 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  /**\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  async sendThread(thread: Thread): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    this.debug(\"Sending message to Hugging Face API\", { model: this.model, provider: this.provider });\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(`The thread content is too long (${prompt.length} characters). Try a shorter conversation.`);\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(thread: Thread, toolCalls: { name: string, arguments: any }[]): Promise<void> {\n    const tools = thread.getTools();\n    \n    console.log(\"Found tools:\", tools.map(t => t.getName()));\n    console.log(\"Tool calls to execute:\", toolCalls.map(tc => tc.name));\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              toolUseId,\n              name: toolCall.name,\n              result: result.success ? result.result : null,\n              error: result.error\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  async *streamThread(thread: Thread): AsyncGenerator<\n    { stream: AsyncGenerator<string, void>; message: Message }, Thread\n  > {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    this.debug(\"Streaming message to Hugging Face API\", { model: this.model, provider: this.provider });\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(`The thread content is too long (${prompt.length} characters). Try a shorter conversation.`);\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 = 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 += \"```json\\n{\\\"tool\\\": \\\"tool_name\\\", \\\"parameters\\\": {\\\"parameter1\\\": \\\"value1\\\", \\\"parameter2\\\": \\\"value2\\\", ...}}\\n```\\n\";\n          systemContent += \"\\nMake sure to use the exact parameter names as specified in the tool description.\\n\";\n          systemContent += \"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.map(result => {\n          const resultStr = typeof result.result === 'object' \n            ? JSON.stringify(result.result, null, 2)\n            : String(result.result);\n          return `Tool (${result.name}) result:\\n${resultStr}`;\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(text: string): { 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(\"Error parsing JSON from code block:\", e instanceof Error ? e.message : String(e));\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 = /\\{(?:\"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(`Error parsing arguments for tool \"${name}\":`, e instanceof Error ? e.message : String(e));\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({ name: parsed.tool, arguments: parsed.parameters as Record<string, unknown> });\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 * 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 { nanoid } from \"nanoid\";\nimport Groq from \"groq-sdk\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { Message, ToolCall } from \"../message\";\nimport { Thread } from \"../thread\";\nimport { 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\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\n\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    \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(completionsTarget, completionsProp, completionsReceiver);\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                                prompt_tokens: result.usage.prompt_tokens,\n                                completion_tokens: result.usage.completion_tokens,\n                                total_tokens: result.usage.total_tokens,\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  /**\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  async sendThread(thread: Thread): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\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(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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                    toolUseId: toolCall.toolUseId,\n                    name: toolCall.name,\n                    result: result.result,\n                    error: result.error\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.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  async *streamThread(thread: Thread): AsyncGenerator<\n    { stream: AsyncGenerator<string, void>; message: Message }, Thread\n  > {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\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(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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* (this: GroqThreadDriver): 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.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        }).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 = 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 || null,\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 * 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, ToolCall } from \"../message\";\nimport { Thread } from \"../thread\";\nimport { Tool } from \"../tool\";\nimport { traceable } from \"../tracing\";\nimport { BaseModelDriver } from \"./base\";\n\n// Constants\nconst MAX_PROMPT_CHARACTERS = 100_000;\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-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 * 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// 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\ninterface AnthropicMessageParam {\n  role: string;\n  content: string | AnthropicContentBlock[];\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   * 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\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    });\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                          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                        } : 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  }\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  async sendThread(thread: Thread): Promise<Thread> {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot send an empty thread\");\n    }\n\n    this.debug(\"Sending message to Anthropic API\", { model: this.model });\n\n    // Format messages for Anthropic API\n    const { messages, systemMessage } = this.formatMessagesForAPI(thread);\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (Array.isArray(msg.content) \n        ? msg.content.reduce((s: number, c: AnthropicContentBlock) => s + (typeof c.text === 'string' ? c.text.length : 0), 0)\n        : (typeof msg.content === 'string' ? msg.content.length : 0)),\n      0\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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        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      // Make the API call\n      const response = await this.client.messages.create(params);\n\n      // Create a new message from the response\n      const message = new Message({\n        role: \"assistant\",\n        content: Array.isArray(response.content) \n          ? response.content.map((block: any) => block.text).join('') \n          : response.content,\n        toolCalls: this.parseToolCalls(response),\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(\"Anthropic API usage metrics\", {\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\n      return thread;\n    } catch (error) {\n      this.error(\"Error sending message to Anthropic 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  async *streamThread(thread: Thread): AsyncGenerator<\n    { stream: AsyncGenerator<string, void>; message: Message }, Thread\n  > {\n    if (thread.all().length === 0) {\n      throw new Error(\"Cannot stream an empty thread\");\n    }\n\n    this.debug(\"Streaming message to Anthropic API\", { model: this.model });\n\n    // Format messages for Anthropic API\n    const { messages, systemMessage } = this.formatMessagesForAPI(thread);\n\n    // Check for potential token issues\n    const totalCharacters = messages.reduce(\n      (sum, msg) => sum + (Array.isArray(msg.content) \n        ? msg.content.reduce((s: number, c: AnthropicContentBlock) => s + (typeof c.text === 'string' ? c.text.length : 0), 0)\n        : (typeof msg.content === 'string' ? msg.content.length : 0)),\n      0\n    );\n\n    if (totalCharacters > MAX_PROMPT_CHARACTERS) {\n      throw new Error(`The thread content is too long (${totalCharacters} characters). Try a shorter conversation.`);\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        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      // 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    let 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(message, new Message({\n            role: \"assistant\",\n            content: contentAccumulated,\n            toolCalls: message.toolCalls,\n            cache: message.cache,\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        const parsedToolCalls = currentToolCalls.map(call => ({\n          toolUseId: call.id,\n          name: call.name,\n          arguments: call.input,\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   * Format messages from the Thread object to the Anthropic API format\n   */\n  private formatMessagesForAPI(thread: Thread): { \n    messages: AnthropicMessageParam[]; \n    systemMessage?: string;\n  } {\n    const formattedMessages: AnthropicMessageParam[] = [];\n    let systemMessage: string | undefined;\n\n    // Track tool use IDs to ensure we have tool_use before tool_result\n    const toolUseIds = new Set<string>();\n\n    for (const message of thread.all()) {\n      // Handle system messages separately\n      if (message.role === \"system\") {\n        systemMessage = message.content || \"\";\n        continue;\n      }\n\n      // Track tool calls for assistant messages - must come BEFORE processing tool results\n      if (message.role === \"assistant\" && message.toolCalls && message.toolCalls.length > 0) {\n        // First, add the assistant message with its content\n        const contentBlocks: AnthropicContentBlock[] = [];\n        \n        if (message.content) {\n          contentBlocks.push({\n            type: \"text\",\n            text: message.content,\n          });\n        }\n        \n        formattedMessages.push({\n          role: \"assistant\",\n          content: contentBlocks.length > 0 ? contentBlocks : \"I'll use a tool to help with that.\",\n        });\n        \n        // Then, add tool use blocks\n        for (const toolCall of message.toolCalls) {\n          // Add this tool use ID to our tracking set\n          toolUseIds.add(toolCall.toolUseId);\n          \n          // Create a specific tool use block for Anthropic\n          formattedMessages.push({\n            role: \"assistant\",\n            content: [\n              {\n                type: \"tool_use\",\n                id: toolCall.toolUseId,\n                name: toolCall.name,\n                input: toolCall.arguments,\n              } as any\n            ] as any\n          });\n        }\n        \n        continue;\n      }\n\n      // Handle tool results - but only if we've seen the corresponding tool use\n      if (message.toolResults && message.toolResults.length > 0) {\n        // Filter tool results to only include those with known tool use IDs\n        const validToolResults = message.toolResults.filter(result => \n          toolUseIds.has(result.toolUseId)\n        );\n        \n        if (validToolResults.length > 0) {\n          // Process each tool result individually\n          for (const toolResult of validToolResults) {\n            formattedMessages.push({\n              role: \"user\",\n              content: [\n                {\n                  type: \"tool_result\",\n                  tool_use_id: toolResult.toolUseId,\n                  content: JSON.stringify(toolResult.result || toolResult.error),\n                } as any\n              ] as any\n            });\n          }\n        }\n        \n        // Also add user message text if it exists - as a separate message\n        if (message.content) {\n          formattedMessages.push({\n            role: \"user\",\n            content: message.content,\n          });\n        }\n        continue;\n      }\n\n      // Process attachments if they exist\n      if (message.attachments && message.attachments.length > 0) {\n        const contentParts: AnthropicContentBlock[] = [];\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\",\n              source: {\n                type: \"base64\",\n                media_type: `image/${attachment.format}`,\n                data: attachment.source.uri.replace(/^data:image\\/\\w+;base64,/, ''),\n              }\n            });\n          }\n        }\n        \n        // Add the message with content parts\n        formattedMessages.push({\n          role: message.role === \"user\" ? \"user\" : \"assistant\",\n          content: contentParts,\n        });\n        continue;\n      }\n\n      // Default case for simple messages\n      if (message.role === \"user\" || message.role === \"assistant\") {\n        formattedMessages.push({\n          role: message.role,\n          content: message.content || \"\",\n        });\n      }\n    }\n\n    return { messages: formattedMessages, systemMessage };\n  }\n\n  /**\n   * Create tool definitions for the Anthropic API\n   */\n  private createToolDefinitions(tools: Tool[]): Array<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    // Extract tool calls from response content blocks\n    const toolCalls: ToolCall[] = [];\n    \n    for (const block of response.content) {\n      if (block.type === 'tool_use') {\n        try {\n          toolCalls.push({\n            toolUseId: block.id || nanoid(),\n            name: block.name,\n            arguments: block.input || {},\n          });\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} ","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} ","// 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. ","import { Tracer, TraceMetadata } 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>(\n    fn: T,\n    metadata: TraceMetadata\n  ): 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} ","import { 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: string = \"function\"): Record<string, any> {\n    // Remove name from base options since it's used separately\n    const { name, input, 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>(\n    fn: T,\n    metadata: TraceMetadata\n  ): 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\n              const result = await fn(...args);\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: options\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            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: options\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        const wrappedFn = this.braintrustLib.wrapTraced(\n          // We need to name the function for Braintrust to properly name the span\n          Object.defineProperty(\n            function wrappedFunction(...args: any[]) {\n              return fn(...args);\n            },\n            'name',\n            { value: metadata.name || 'anonymous_function' }\n          ),\n          options\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\n        // Based on the Braintrust docs, traced should be used like this:\n        return (async (...args: any[]) => {\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(\"[BraintrustTracer] API key not found. Set BRAINTRUST_API_KEY environment variable or pass apiKey in options\");\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(\"braintrust\", new BraintrustTracer({\n      apiKey: apiKey,\n      ...options\n    }));\n    \n    return true;\n  } catch (error) {\n    console.warn(\"[BraintrustTracer] Failed to register tracer. Make sure braintrust is installed:\", error);\n    return false;\n  }\n} "],"mappings":"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CtB;UAAC;UAAwB;;QACzB;UAAC;UAAqB;;QACtB;UAAC;UAAiD;;QAClD;UAAC;UAAiC;;QAClC;UAAC;UAAuB;;QACxB;UAAC;UAAqB;;QACtB;UAAC;UAAU;;QACX;UAAC;UAAY;;QACb;UAAC;UAAQ;;QACT0C,QAAQ,SAAU1C,MAAI;AACtB,eAAOV,WAAU6C,cAAcnC,KAAK,CAAA,GAAIA,KAAK,CAAA,CAAE;MACjD,CAAA;AAKA;QACE;UAAC;UAAO;;QACR;UAAC;UAAU;;QACX;UAAC;UAAiE;;QAClE;UAAC;UAAmC;;QACpC;UAAC;UAAS;;QACV;UAAC;UAAwF;;QACzF;UAAC;UAAqB;;QACtB;UAAC;UAAwB;;QACzB;UAAC;UAAuB;;QACxB;UAAC;UAA4F;;QAC7F;UAAC;UAAsE;;QACvE;UAAC;UAAkC;;QACnC;UAAC;UAAqB;;QACtB;UAAC;UAA6F;;QAC9F;UAAC;UAA0G;;QAC3G;UAAC;UAA+F;;QAChG;UAAC;UAA2B;;QAC5B;UAAC;UAAgC;;QACjC;UAAC;UAAuB;;QACxB;UAAC;UAAqB;;QACtB;UAAC;UAAgB;;QACjB;UAAC;UAAa;;QACd;UAAC;UAAS;;QACV0C,QAAQ,SAAU1C,MAAI;AACtB,eAAOV,WAAUgD,gBAAgBtC,KAAK,CAAA,GAAIA,KAAK,CAAA,CAAE;MACnD,CAAA;AAKA;;QAEE;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA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","names":["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","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","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","makeToolFromInterface","t","Tool","name","description","parameters","executeFn","args","toolCall","executeTool","EventSource","id","followUpMessage","trace","traceMetadata","constructor","options","nanoid","getName","getDescription","getParameters","emit","tool","parse","result","executeWithTracing","success","error","errorMessage","Error","message","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","toMessages","messages","Message","role","content","undefined","toolResults","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","Thread","EventSource","messages","tools","toolChoice","driver","maxSteps","currentSteps","responseHandlers","id","parallelToolCalls","constructor","map","makeToolFromInterface","generateThreadId","forEach","tool","forwardEvents","thread","validateThread","onResponse","handler","push","executeResponseHandlers","message","emit","pop","shift","last","length","size","clear","filter","removedMessages","all","checkMaxSteps","debug","steps","executeToolCall","toolCall","getName","JSON","stringify","arguments","result","executeTool","toolMessages","toMessages","send","undefined","processToolCalls","getTools","toolCallPromises","toolCalls","find","t","name","Promise","resolve","processAssistantMessage","processLastMessage","lastMessage","isToolCall","isAssistantMessage","toolResponse","sendThread","wrapStream","stream","onComplete","response","streamThread","firstYield","next","value","Error","initialMessage","role","streamComplete","streamResponse","error","nonSystemMessages","isSystemMessage","firstNonSystemMessage","isUserMessage","addTool","newTool","Tool","randomUUID","fork","Agent","EventSource","knowledge","instructions","memory","systemPrompt","tools","driver","activeThreads","evaluators","trace","traceMetadata","constructor","sort","a","b","priority","map","makeToolFromInterface","getDecoratedTools","Map","forEach","tool","forwardEvents","agent","getToolMethods","addTool","newTool","push","emit","executeAgent","prompt","thread","createThread","completedEvaluators","currentEvaluator","handleEvaluators","evaluator","includes","complete","undefined","off","on","props","threadMessages","messages","trim","Error","systemMessage","Message","role","cache","content","buildSystemPrompt","promptMessage","Thread","toolChoice","onResponse","set","id","getThread","threadId","get","getActiveThreads","closeThread","all","timestamp","Date","delete","addKnowledge","addInstruction","instruction","getTools","getKnowledge","getInstructions","getMemory","setSystemPrompt","parts","length","k","fact","i","join","executeTask","name","task","metadata","traceable","AgentTool","Agent","makeEvaluator","fn","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","BaseModelDriver","EventSource","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","sendThread","thread","all","totalContent","map","m","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","CohereThreadDriver","BaseModelDriver","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","message","chat_history","max_tokens","tools","length","streaming","output","text","metrics","meta","billing_tokens","prompt_tokens","input_tokens","completion_tokens","output_tokens","total_tokens","undefined","tool_calls","sendThread","thread","all","totalContent","map","m","content","join","messages","system","convertMessagesToCohereFormat","lastMessage","chatOptions","slice","preamble","getTools","createToolDefinitions","response","chat","billingTokens","tokens","inputTokens","outputTokens","totalTokens","debug","Message","role","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","formattedMessages","systemMessage","threadMsg","toolResults","resultContent","stringify","schema","zodToJsonSchema","getParameters","schemaObj","parameters","properties","getName","description","getDescription","parameter_definitions","e","import_nanoid","import_zod_to_json_schema","MAX_PROMPT_CHARACTERS","JSON_SCHEMA_URL","OpenAIThreadDriver","BaseModelDriver","client","model","temperature","maxTokens","cache","getAvailableModels","constructor","config","apiKey","process","env","OPENAI_API_KEY","Error","baseClient","OpenAI","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","sendThread","thread","all","debug","formatMessagesForAPI","totalCharacters","reduce","sum","msg","content","getTools","createToolDefinitions","tool_choice","response","chat","completions","create","lastChoice","choice","Message","role","toolCalls","parseToolCalls","tool_calls","push","inputTokens","outputTokens","totalTokens","error","streamThread","streamContent","createStreamGenerator","toolCallsStarted","currentToolCalls","chunk","delta","updatedMessage","Object","assign","map","call","toolCall","existingCall","find","c","index","function","arguments","parsedToolCalls","attachments","contentParts","type","text","attachment","source","uri","image_url","url","detail","toolResults","toolResult","tool_call_id","toolUseId","JSON","stringify","id","tool","getName","description","getDescription","parameters","zodToJsonSchema","getParameters","$schema","parse","nanoid","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","convertAttachmentsToContentBlocks","attachments","map","attachment","type","image","format","source","document","video","convertMessagesToBedrockFormat","systemMessages","conversationMessages","lastCacheMessage","find","role","lastSystemCacheMessage","forEach","push","text","cachePoint","contentBlocks","toolResults","length","toolCalls","call","toolUse","toolUseId","arguments","result","toolResult","JSON","stringify","error","status","parseToolCalls","reduce","acc","block","console","sendThread","thread","all","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","formattedMessages","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","import_nanoid","import_zod_to_json_schema","MAX_PROMPT_CHARACTERS","CerebrasThreadDriver","BaseModelDriver","client","model","temperature","maxTokens","cache","disableParallelToolCalls","recentToolCalls","toolCallTimeframe","maxTotalToolCalls","totalToolCallsCounter","parallelToolCalls","toolCallTracker","responseFormatSchema","responseFormatName","responseFormatStrict","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","configureModelSpecificSettings","debug","tryFallbackStrategies","apiError","error","strategy1Params","JSON","parse","stringify","tool","function","parameters","properties","key","type","items","chat","completions","create","error1","strategy2Params","error2","strategy3Params","error3","lastUserMessage","filter","msg","role","pop","simplifiedContent","String","replace","strategy4Params","error4","originalError","finalError","hashToolCallArgs","normalized","Object","keys","sort","hash","i","char","charCodeAt","toString","e","isRepeatedToolCall","now","Date","call","timestamp","argsHash","callKey","identicalCallCount","timestampBasedCalls","callCount","push","simplifyMessagesAfterToolCall","simplifiedMessages","foundToolResult","unshift","assistantMsgIndex","j","tool_calls","some","tc","id","tool_call_id","toolParams","arguments","parsedArgs","systemMessage","find","m","finalMessages","sendThread","thread","all","isNewConversation","hasCompletedToolCalls","toolResults","existingToolCalls","toolCalls","count","maxLimit","formatMessagesForAPI","lastMessage","totalCharacters","reduce","sum","getTools","preprocessedTools","preprocessToolDefinitions","createToolDefinitions","parallel_tool_calls","tool_choice","response_format","json_schema","strict","schema","toolsCount","messageCount","toolsSample","slice","map","functionName","parametersSchema","messagesSample","contentLength","hasToolCalls","toolCallCount","response","code","statusCode","failed_generation","param","responseType","object","choiceCount","fallbackError","firstChoiceContent","hasTool","finishReason","lastChoice","choice","finalToolCalls","parseToolCalls","embeddedCalls","parseEmbeddedToolCalls","Message","updateToolCallCounter","limit","limitMessage","assign","safeToolCalls","toolCall","isRepeated","toolUseId","isFirstUse","modelName","originalCount","filteredCount","toolNames","safeToolNames","updatedMessage","noRepeatMessage","totalToolCount","safeToolCount","t","originalContentLength","raw","failedGeneration","nameMatch","exec","argsMatch","paramsMatch","toolName","toolArgs","matchingTool","getName","nanoid","toolResult","executeTool","success","assistantMessage","toolResultMessage","finalMessage","inputTokens","outputTokens","totalTokens","toolError","parsingError","includes","jsonMatch","match","argumentsMatch","streamThread","streamResponse","createAsyncIterableFromResponse","streamContent","createStreamGenerator","toolCallsStarted","currentToolCalls","chunk","delta","existingCall","c","index","func","parsedToolCalls","allowedTools","embeddedToolCalls","alternativeMessage","processedContent","preprocessFieldReferences","attachments","contentParts","text","attachment","source","uri","image_url","url","detail","toolResultContent","argumentsStr","zodParams","getParameters","jsonSchemaFromZod","zodToJsonSchema","required","Array","isArray","reqField","hasOwnProperty","apiParameters","description","getDescription","isUtilityTool","utilityTools","countableToolCalls","totalCalls","countableCalls","excludedTools","Symbol","asyncIterator","created","parsed","substring","cleanJson","suggestToolRegex","test","extra","normalizeToolRegex","rawParams","cleanParams","sourceFieldMatch","formatMatch","summaryMatch","sourceField","format","summary","jsonPattern","jsonStr","parseError","p1","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","traceable","run_type","name","aggregator","args","result","input","inputs","parameters","output","generated_text","finish_reason","streaming","messages","max_tokens","choices","message","content","sendThread","thread","all","length","debug","response","formatMessagesForChatAPI","tool_choice","parallel_tool_calls","clientToUse","responseContent","console","log","Message","role","toolCalls","parseToolCallsFromText","forEach","call","index","updatedMessage","map","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","formattedMessages","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","sendThread","thread","all","debug","formatMessagesForAPI","totalCharacters","reduce","sum","msg","content","getTools","createToolDefinitions","tool_choice","parallel_tool_calls","response","chat","completions","create","lastChoice","choice","Message","role","toolCalls","parseToolCalls","tool_calls","push","inputTokens","outputTokens","totalTokens","error","code","failed_generation","parseFailedGenerationToolCalls","assistantMessage","toolCall","tool","find","t","getName","executeTool","arguments","userMessage","toolResults","toolUseId","filter","flatMap","summaryMessage","parseError","originalError","streamThread","contentGenerator","Symbol","asyncIterator","chunk","delta","updatedMessage","Object","assign","failedGeneration","jsonMatch","exec","jsonString","trim","parsed","JSON","parse","Array","isArray","map","call","parameters","function","id","nanoid","Boolean","attachments","contentParts","type","text","attachment","source","uri","image_url","url","detail","toolResult","resultContent","stringify","String","tool_call_id","description","getDescription","zodToJsonSchema","getParameters","$schema","models","list","data","import_nanoid","import_zod_to_json_schema","Anthropic","require","default","MAX_PROMPT_CHARACTERS","AnthropicThreadDriver","BaseModelDriver","client","model","temperature","maxTokens","cache","toolChoice","getAvailableModels","constructor","config","apiKey","process","env","ANTHROPIC_API_KEY","Error","baseClient","dangerouslyAllowBrowser","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","sendThread","thread","all","debug","systemMessage","formatMessagesForAPI","totalCharacters","reduce","sum","msg","Array","isArray","s","c","text","system","getTools","createToolDefinitions","tool_choice","type","response","create","message","Message","role","map","block","join","toolCalls","parseToolCalls","push","inputTokens","outputTokens","totalTokens","error","streamThread","streamContent","createStreamGenerator","toolCallsStarted","currentToolCalls","contentAccumulated","chunk","delta","Object","assign","id","parsedToolCalls","call","toolUseId","arguments","updatedMessage","formattedMessages","toolUseIds","Set","contentBlocks","toolCall","add","toolResults","validToolResults","filter","has","toolResult","tool_use_id","JSON","stringify","attachments","contentParts","attachment","source","uri","media_type","format","data","replace","tool","getName","description","getDescription","input_schema","zodToJsonSchema","getParameters","nanoid","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","input","otherMetadata","type","traceable","fn","wrapTraced","run_type","args","result","currentSpan","tracedFn","Object","defineProperty","namedToolFunction","_args","log","tracedParams","output","tool_name","aggregator","wrappedFn","wrappedLLMFunction","value","wrappedFunction","traced","registerBraintrustTracer","TracerRegistry","registry","getInstance","register"]}