{"version":3,"sources":["../src/providers/pino.ts","../src/formatters.ts","../src/base.ts","../src/buffer.ts","../src/otel/bridge.ts","../src/index.ts"],"sourcesContent":["import pino from \"pino\";\nimport type { LoggerOptions as PinoLoggerOptions } from \"pino\";\nimport pinoPretty from \"pino-pretty\";\nimport { getDefaultLogFormat, getDefaultLogLevel, getDefaultRedactionPaths } from \"../formatters\";\nimport type { LogBuffer, Logger, LoggerOptions } from \"../types\";\nimport type { LoggerProvider, LoggerWithProvider } from \"./interface\";\n\n/**\n * Pino-based logger provider\n */\nexport class PinoLoggerProvider implements LoggerProvider {\n  public name = \"pino\";\n  private customPinoOptions?: PinoLoggerOptions;\n\n  public constructor(\n    _bufferSize?: number, // Kept for backward compatibility but not used anymore\n    _externalLogBuffer?: LogBuffer, // Kept for backward compatibility but not used anymore\n    pinoOptions?: PinoLoggerOptions,\n  ) {\n    this.customPinoOptions = pinoOptions;\n  }\n\n  public createLogger(options?: LoggerOptions): LoggerWithProvider {\n    // If an OpenTelemetry LoggerProvider is already available globally,\n    // initialize the Pino bridge before creating the Pino instance to ensure\n    // instrumentation patches apply to this instance.\n    try {\n      const provider = (globalThis as any).___voltagent_otel_logger_provider;\n      const init = (globalThis as any).___voltagent_init_pino_otel_bridge;\n      if (provider && typeof init === \"function\") {\n        init(provider);\n      }\n    } catch {\n      // Best-effort only\n    }\n\n    const pinoOptions = this.createPinoOptions(options);\n    const format = options?.format || getDefaultLogFormat();\n    const pretty = options?.pretty ?? process.env.NODE_ENV !== \"production\";\n    const shouldUsePretty = format === \"pretty\" && pretty;\n\n    let stream: ReturnType<typeof pinoPretty> | undefined;\n    if (shouldUsePretty) {\n      // Create pretty stream directly (no worker threads)\n      stream = pinoPretty({\n        colorize: true,\n        translateTime: \"yyyy-mm-dd HH:MM:ss.l o\",\n        ignore: \"pid,hostname,env,component\",\n        messageFormat:\n          \"{msg}{if userId} | user={userId}{end}{if conversationId} | conv={conversationId}{end}{if executionId} | exec={executionId}{end}\",\n        errorLikeObjectKeys: [\"err\", \"error\", \"exception\"],\n        errorProps: \"\",\n        singleLine: ![\"debug\", \"trace\"].includes(options?.level || getDefaultLogLevel()),\n        messageKey: \"msg\",\n      });\n    }\n\n    // Pass stream as second parameter to avoid worker threads\n    const pinoInstance = stream ? pino(pinoOptions, stream) : pino(pinoOptions);\n\n    return this.wrapPinoInstance(pinoInstance);\n  }\n\n  private wrapPinoInstance(pinoInstance: any): LoggerWithProvider {\n    // Create our logger that follows OUR interface\n    const logger: Logger & { _pinoInstance?: any } = {\n      trace: (msg: string, context?: object) => {\n        pinoInstance.trace(context || {}, msg);\n      },\n      debug: (msg: string, context?: object) => {\n        pinoInstance.debug(context || {}, msg);\n      },\n      info: (msg: string, context?: object) => {\n        pinoInstance.info(context || {}, msg);\n      },\n      warn: (msg: string, context?: object) => {\n        pinoInstance.warn(context || {}, msg);\n      },\n      error: (msg: string, context?: object) => {\n        pinoInstance.error(context || {}, msg);\n      },\n      fatal: (msg: string, context?: object) => {\n        pinoInstance.fatal(context || {}, msg);\n      },\n      child: (bindings: Record<string, any>) => {\n        const childPino = pinoInstance.child(bindings);\n        return this.wrapPinoInstance(childPino);\n      },\n    };\n\n    // Store reference to pino instance for child logger creation\n    logger._pinoInstance = pinoInstance;\n\n    // Create a proxy object that includes our logger and custom methods\n    const loggerWithProvider = Object.assign(logger, {\n      getProvider: () => this,\n      getBuffer: () => this.getLogBuffer(),\n    }) as LoggerWithProvider;\n\n    return loggerWithProvider;\n  }\n\n  public createChildLogger(\n    parent: Logger & { _pinoInstance?: any },\n    bindings: Record<string, any>,\n    _options?: LoggerOptions,\n  ): Logger {\n    // Use the parent's pino instance if available\n    if (parent._pinoInstance) {\n      const childPino = parent._pinoInstance.child(bindings);\n      return this.wrapPinoInstance(childPino);\n    }\n\n    // Fallback to parent's child method\n    return parent.child(bindings);\n  }\n\n  public getLogBuffer(): LogBuffer {\n    // Buffer management is now handled by OpenTelemetry\n    throw new Error(\n      \"Buffer management has been replaced by OpenTelemetry Logs API. Use observability features instead.\",\n    );\n  }\n\n  public async flush(): Promise<void> {\n    // Pino logs are now handled by OpenTelemetry which manages its own flushing\n    return Promise.resolve();\n  }\n\n  public async close(): Promise<void> {\n    // OpenTelemetry bridge shutdown is handled by VoltAgentObservability\n    return Promise.resolve();\n  }\n\n  /**\n   * Create Pino-specific options from generic logger options\n   */\n  private createPinoOptions(options: LoggerOptions = {}): PinoLoggerOptions {\n    const pinoOptions: PinoLoggerOptions = {\n      level: options.level || getDefaultLogLevel(),\n      name: options.name,\n      redact: {\n        paths: options.redact || getDefaultRedactionPaths(),\n        censor: \"[REDACTED]\",\n      },\n      serializers: {\n        err: pino.stdSerializers.err,\n        error: pino.stdSerializers.err,\n        exception: pino.stdSerializers.err,\n      },\n      formatters: {\n        level: (label) => {\n          return { level: label.toUpperCase() };\n        },\n        bindings: (bindings) => {\n          // Add VoltAgent-specific bindings\n          return {\n            ...bindings,\n            component: \"VoltAgent\",\n            pid: bindings.pid,\n            hostname: bindings.hostname,\n          };\n        },\n      },\n      timestamp: () => {\n        const now = new Date();\n        return `,\"timestamp\":\"${now.toISOString()}\"`;\n      },\n      base: {\n        env: process.env.NODE_ENV || \"development\",\n      },\n    };\n\n    // Note: Pretty formatting is now handled via stream in createLogger method\n    // to avoid worker thread issues in Next.js and other environments\n\n    // Remove VoltAgent-specific options before passing to Pino\n    const {\n      format: _,\n      pretty: __,\n      redact: ___,\n      bufferSize: ____,\n      pinoOptions: _____,\n      ...restOptions\n    } = options;\n\n    // Simple merge - user options override everything\n    return {\n      ...pinoOptions,\n      ...restOptions,\n      ...this.customPinoOptions,\n    };\n  }\n}\n","// Generic formatting utilities for logger providers\n\n/**\n * Get the default log level based on environment\n */\nexport function getDefaultLogLevel(): string {\n  const envLevel = process.env.VOLTAGENT_LOG_LEVEL || process.env.LOG_LEVEL;\n  if (envLevel) {\n    return envLevel.toLowerCase();\n  }\n\n  return process.env.NODE_ENV === \"production\" ? \"error\" : \"info\";\n}\n\n/**\n * Get the default log format based on environment\n */\nexport function getDefaultLogFormat(): \"json\" | \"pretty\" {\n  const envFormat = process.env.VOLTAGENT_LOG_FORMAT;\n  if (envFormat === \"json\" || envFormat === \"pretty\") {\n    return envFormat;\n  }\n\n  return process.env.NODE_ENV === \"production\" ? \"json\" : \"pretty\";\n}\n\n/**\n * Get default redaction paths\n */\nexport function getDefaultRedactionPaths(): string[] {\n  const defaultPaths = [\"password\", \"token\", \"apiKey\", \"secret\", \"authorization\", \"cookie\"];\n  const envRedact = process.env.VOLTAGENT_LOG_REDACT;\n\n  if (envRedact) {\n    const customPaths = envRedact.split(\",\").map((p) => p.trim());\n    return [...new Set([...defaultPaths, ...customPaths])];\n  }\n\n  return defaultPaths;\n}\n","import { PinoLoggerProvider } from \"./providers\";\nimport type { LoggerProvider, LoggerWithProvider } from \"./providers\";\nimport type { LogBuffer, LoggerOptions } from \"./types\";\n\n/**\n * Get (or auto-create if not exists) the global logger provider\n */\nexport function getGlobalLoggerProvider(): LoggerProvider {\n  // @ts-expect-error - globalThis is not typed\n  const globalLoggerProvider = globalThis.___voltagent_logger_provider as\n    | LoggerProvider\n    | undefined;\n\n  if (!globalLoggerProvider) {\n    // @ts-expect-error - globalThis is not typed\n    globalThis.___voltagent_logger_provider = new PinoLoggerProvider();\n  }\n\n  // @ts-expect-error - globalThis is not typed\n  return globalThis.___voltagent_logger_provider as LoggerProvider;\n}\n\n/**\n * Set the global logger provider\n */\nexport function setGlobalLoggerProvider(provider: LoggerProvider): void {\n  // @ts-expect-error - globalThis is not typed\n  globalThis.___voltagent_logger_provider = provider;\n}\n\n/**\n * Get the global log buffer\n */\nexport function getGlobalLogBuffer() {\n  return getGlobalLoggerProvider().getLogBuffer();\n}\n\n/**\n * Extended logger with buffer access (for backward compatibility)\n */\nexport type LoggerWithBuffer = LoggerWithProvider;\n\n/**\n * Create a new Pino logger instance\n * @param options Logger options including pinoOptions\n * @param externalLogBuffer Optional external log buffer to sync logs to (deprecated)\n */\nexport function createPinoLogger(\n  options?: LoggerOptions,\n  _externalLogBuffer?: any, // Deprecated - kept for backward compatibility\n): LoggerWithBuffer {\n  const provider = new PinoLoggerProvider(\n    options?.bufferSize,\n    undefined, // No longer using external buffer\n    options?.pinoOptions,\n  );\n\n  const globalLoggerProvider = getGlobalLoggerProvider();\n  if (!globalLoggerProvider) {\n    setGlobalLoggerProvider(provider);\n  }\n  return provider.createLogger(options);\n}\n\n/**\n * Connect an external log buffer to the existing logger\n * @deprecated Buffer management is now handled by @voltagent/core. This function does nothing.\n */\nexport function connectExternalLogBuffer(\n  _logger: LoggerWithProvider,\n  _externalBuffer: LogBuffer,\n): void {\n  // Deprecated - buffer management is now handled by core package\n  // This function is kept for backward compatibility but does nothing\n}\n","import type { LogBuffer, LogEntry, LogFilter } from \"./types\";\n\n/**\n * In-memory circular buffer for storing recent log entries\n */\nexport class InMemoryLogBuffer implements LogBuffer {\n  private buffer: LogEntry[] = [];\n  private maxSize: number;\n\n  constructor(maxSize = 1000) {\n    this.maxSize = maxSize;\n  }\n\n  add(entry: LogEntry): void {\n    this.buffer.push(entry);\n\n    // Remove oldest entries if buffer exceeds max size\n    if (this.buffer.length > this.maxSize) {\n      this.buffer.shift();\n    }\n  }\n\n  query(filter?: LogFilter): LogEntry[] {\n    if (!filter) {\n      return [...this.buffer];\n    }\n\n    let results = this.buffer;\n\n    // Filter by level\n    if (filter.level) {\n      const levelPriority = this.getLevelPriority(filter.level);\n      results = results.filter((entry) => this.getLevelPriority(entry.level) >= levelPriority);\n    }\n\n    // Filter by agentId\n    if (filter.agentId) {\n      results = results.filter((entry) => entry.agentId === filter.agentId);\n    }\n\n    // Filter by conversationId\n    if (filter.conversationId) {\n      results = results.filter((entry) => entry.conversationId === filter.conversationId);\n    }\n\n    // Filter by workflowId\n    if (filter.workflowId) {\n      results = results.filter((entry) => entry.workflowId === filter.workflowId);\n    }\n\n    // Filter by executionId (also check parentExecutionId for sub-agent logs)\n    if (filter.executionId) {\n      results = results.filter(\n        (entry) =>\n          entry.executionId === filter.executionId ||\n          entry.parentExecutionId === filter.executionId,\n      );\n    }\n\n    // Filter by time range\n    if (filter.since || filter.until) {\n      results = results.filter((entry) => {\n        const entryTime = new Date(entry.timestamp);\n        // Return logs that are after 'since' and before or equal to 'until'\n        if (filter.since && entryTime < filter.since) return false;\n        if (filter.until && entryTime > filter.until) return false;\n        return true;\n      });\n    }\n\n    // Apply limit\n    if (filter.limit && filter.limit > 0) {\n      results = results.slice(-filter.limit);\n    }\n\n    return [...results];\n  }\n\n  clear(): void {\n    this.buffer = [];\n  }\n\n  size(): number {\n    return this.buffer.length;\n  }\n\n  private getLevelPriority(level: string): number {\n    const priorities: Record<string, number> = {\n      trace: 10,\n      debug: 20,\n      info: 30,\n      warn: 40,\n      error: 50,\n      fatal: 60,\n    };\n\n    return priorities[level.toLowerCase()] || 0;\n  }\n}\n","/**\n * OpenTelemetry Bridge for Pino Logger\n *\n * This module bridges Pino logs to OpenTelemetry Logs API using\n * the official @opentelemetry/instrumentation-pino package for\n * automatic trace correlation and structured logging.\n */\n\nimport { logs } from \"@opentelemetry/api-logs\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport { registerInstrumentations } from \"@opentelemetry/instrumentation\";\nimport { PinoInstrumentation } from \"@opentelemetry/instrumentation-pino\";\nimport type { LoggerProvider } from \"@opentelemetry/sdk-logs\";\n\nexport class PinoOpenTelemetryBridge {\n  private instrumentation?: Instrumentation;\n  private initialized = false;\n\n  /**\n   * Initialize the bridge with OpenTelemetry LoggerProvider\n   */\n  initialize(loggerProvider: LoggerProvider): void {\n    if (this.initialized) {\n      return;\n    }\n\n    // Set global logger provider\n    logs.setGlobalLoggerProvider(loggerProvider);\n\n    // Expose a global flag to detect active Pino instrumentation\n    (globalThis as any).___voltagent_pino_instrumentation_active = true;\n\n    // Create and register Pino instrumentation\n    // This will automatically:\n    // 1. Add trace context (traceId, spanId) to all Pino logs\n    // 2. Forward Pino logs to OpenTelemetry LoggerProvider\n    this.instrumentation = new PinoInstrumentation({\n      // The instrumentation will automatically inject trace context\n      // and forward logs to the LoggerProvider\n      enabled: true,\n    });\n\n    // Register the instrumentation\n    registerInstrumentations({\n      instrumentations: [this.instrumentation],\n    });\n\n    this.initialized = true;\n  }\n\n  /**\n   * Check if the bridge is initialized\n   */\n  isInitialized(): boolean {\n    return this.initialized;\n  }\n\n  /**\n   * Get the OpenTelemetry logger for direct usage\n   */\n  getOtelLogger(name: string, version?: string) {\n    return logs.getLogger(name, version);\n  }\n\n  /**\n   * Clean shutdown\n   */\n  async shutdown(): Promise<void> {\n    if (!this.initialized) {\n      return;\n    }\n\n    // Disable instrumentation\n    if (this.instrumentation) {\n      this.instrumentation.disable();\n    }\n\n    // Note: LoggerProvider shutdown is handled by VoltAgentObservability\n    this.initialized = false;\n\n    (globalThis as any).___voltagent_pino_instrumentation_active = undefined;\n  }\n}\n\n// Global singleton instance\nlet globalBridge: PinoOpenTelemetryBridge | null = null;\n\n/**\n * Get or create the global Pino OpenTelemetry bridge\n */\nexport function getPinoOpenTelemetryBridge(): PinoOpenTelemetryBridge {\n  if (!globalBridge) {\n    globalBridge = new PinoOpenTelemetryBridge();\n  }\n  return globalBridge;\n}\n\n/**\n * Initialize the global bridge with a LoggerProvider\n */\nexport function initializePinoOpenTelemetry(loggerProvider: LoggerProvider): void {\n  const bridge = getPinoOpenTelemetryBridge();\n  bridge.initialize(loggerProvider);\n}\n\n/**\n * Check if OpenTelemetry bridge is active\n */\nexport function isOpenTelemetryEnabled(): boolean {\n  const bridge = getPinoOpenTelemetryBridge();\n  return bridge.isInitialized();\n}\n","export {\n  createPinoLogger,\n  getGlobalLogBuffer,\n  getGlobalLoggerProvider,\n  setGlobalLoggerProvider,\n  connectExternalLogBuffer,\n  type LoggerWithBuffer,\n} from \"./base\";\n\nexport { InMemoryLogBuffer } from \"./buffer\";\n\nexport { getDefaultLogLevel, getDefaultLogFormat, getDefaultRedactionPaths } from \"./formatters\";\n\nexport type { Logger, LoggerOptions, LogEntry, LogFilter, LogBuffer } from \"./types\";\n\nexport type { LoggerProvider, LoggerWithProvider } from \"./providers\";\n\nexport { PinoLoggerProvider } from \"./providers\";\n\n// Re-export Pino types for convenience\nexport type { LoggerOptions as PinoLoggerOptions } from \"pino\";\n\n// Export OpenTelemetry bridge\nexport {\n  PinoOpenTelemetryBridge,\n  getPinoOpenTelemetryBridge,\n  initializePinoOpenTelemetry,\n  isOpenTelemetryEnabled,\n} from \"./otel/bridge\";\n\n// Register the bridge initializer function on globalThis for core package to use\n// This allows @voltagent/core to initialize the bridge without importing this package\nimport { initializePinoOpenTelemetry } from \"./otel/bridge\";\n\n// @ts-expect-error - globalThis is not typed for our custom property\nif (!globalThis.___voltagent_init_pino_otel_bridge) {\n  // @ts-expect-error - globalThis is not typed for our custom property\n  globalThis.___voltagent_init_pino_otel_bridge = initializePinoOpenTelemetry;\n}\n"],"mappings":"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","names":[]}