{"version":3,"sources":["../../../src/utils/logger.ts","../../../src/utils/plugin-loader.ts"],"names":["winston","chalk","require","createRequire"],"mappings":"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","file":"plugin-loader.cjs","sourcesContent":["import winston from 'winston';\nimport chalk from 'chalk';\nimport { IssueError, FileNotFoundError, InvalidFilenameError, InvalidTargetError, FileExistsError, handleError } from '../errors/errors.js';\n\n// Define our custom logger interface\nexport interface CustomLogger extends winston.Logger {\n  success(message: any, ...meta: any[]): winston.Logger;\n  debug(message: any, ...meta: any[]): winston.Logger;\n}\n\nconst { format, createLogger, transports } = winston;\nconst { combine, timestamp, printf } = format;\n\n// Custom format for different log levels\nconst customFormat = printf((info: winston.Logform.TransformableInfo) => {\n  const ts = new Date(info.timestamp?.toString() || Date.now()).toLocaleTimeString();\n  \n  switch (info.level) {\n    case 'error':\n      return `${chalk.gray(ts)} ${chalk.red('✖')} ${chalk.red(info.message)}`;\n    case 'warn':\n      return `${chalk.gray(ts)} ${chalk.yellow('⚠')} ${chalk.yellow(info.message)}`;\n    case 'info':\n      return `${chalk.gray(ts)} ${chalk.blue('ℹ')} ${info.message}`;\n    case 'debug':\n      return `${chalk.gray(ts)} ${chalk.gray('🔍')} ${chalk.gray(info.message)}`;\n    case 'success':\n      return `${chalk.gray(ts)} ${chalk.green('✔')} ${chalk.green(info.message)}`;\n    default:\n      return `${chalk.gray(ts)} ${info.message}`;\n  }\n});\n\n// Create custom success level\nconst customLevels = {\n  levels: {\n    error: 0,\n    warn: 1,\n    info: 2,\n    debug: 3,\n    success: 4\n  },\n  colors: {\n    error: 'red',\n    warn: 'yellow',\n    info: 'blue',\n    debug: 'gray',\n    success: 'green'\n  }\n};\n\n// Create a filter to completely silence debug messages unless explicitly enabled\nconst silenceDebug = format((info) => {\n  if (info.level === 'debug' && !process.env.DEBUG_ENABLED) {\n    return false;\n  }\n  return info;\n});\n\n// Create the logger with silent debug by default\nconst baseLogger = createLogger({\n  levels: customLevels.levels,\n  format: combine(\n    silenceDebug(),\n    timestamp(),\n    customFormat\n  ),\n  transports: [\n    new transports.Console({\n      level: 'info'\n    })\n  ]\n});\n\n// Add success method to match our interface\n(baseLogger as any).success = baseLogger.info;\n\nexport const logger = baseLogger as CustomLogger;\n\n// Add colors to winston\nwinston.addColors(customLevels.colors);\n\n// Function to configure logger based on debug flag\nexport function configureLogger(debug: boolean = false) {\n  process.env.DEBUG_ENABLED = debug ? 'true' : '';\n  const level = debug ? 'debug' : 'info';\n  logger.transports.forEach(transport => {\n    if (transport instanceof winston.transports.Console) {\n      transport.level = level;\n    }\n  });\n}\n\n// Re-export error types for convenience\nexport { IssueError, FileNotFoundError, InvalidFilenameError, InvalidTargetError, FileExistsError, handleError }; ","import { Plugin } from '../services/plugin-service.js';\nimport { LlmailConfig } from './config.js';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\nimport path from 'path';\nimport { logger } from './logger.js';\n\ninterface PluginConfig {\n  name: string;\n  config?: Record<string, any>;\n}\n\n/**\n * Normalize plugin configuration to a consistent format\n */\nfunction normalizePluginConfig(plugins: LlmailConfig['plugins']): PluginConfig[] {\n  if (!plugins) return [];\n\n  if (typeof plugins === 'string') {\n    // Single plugin string\n    return [{ name: plugins }];\n  }\n\n  if (Array.isArray(plugins)) {\n    return plugins.map(plugin => {\n      if (typeof plugin === 'string') {\n        return { name: plugin };\n      }\n      return plugin;\n    });\n  }\n\n  return [];\n}\n\n/**\n * Load a plugin by name\n */\nasync function loadPlugin(name: string): Promise<Plugin> {\n  try {\n    logger.debug(`Loading plugin: ${name}`);\n    // First try dynamic import which works with both real and mocked modules\n    const plugin = await import(name).catch(async (error) => {\n      logger.debug(`Dynamic import failed for ${name}, trying require:`, error);\n      // If dynamic import fails, try require as fallback for CommonJS modules\n      const require = createRequire(import.meta.url);\n      try {\n        const module = require(name);\n        logger.debug(`Required module ${name}:`, module);\n        return module;\n      } catch (requireError) {\n        logger.debug(`Require failed for ${name}:`, requireError);\n        throw requireError;\n      }\n    });\n    \n    logger.debug(`Plugin module loaded: ${name}`, { exports: Object.keys(plugin) });\n    \n    // Handle both default exports and named exports\n    const PluginClass = plugin.default || plugin;\n    logger.debug(`Plugin class found:`, PluginClass);\n    \n    if (typeof PluginClass !== 'function' && !PluginClass.prototype) {\n      logger.debug(`Plugin ${name} exports:`, plugin);\n      throw new Error(`Plugin ${name} must export a class or constructor function`);\n    }\n    \n    const instance = new PluginClass();\n    logger.debug(`Plugin instance created: ${name}`, {\n      commands: instance.registerCommands?.() || [],\n      types: instance.registerTypes?.() || [],\n      activeStates: instance.registerActiveStates?.() || [],\n      inactiveReasons: instance.registerInactiveReasons?.() || []\n    });\n    \n    return instance;\n  } catch (error: any) {\n    logger.error(`Failed to load plugin ${name}:`, error);\n    throw new Error(`Failed to load plugin ${name}: ${error.message}`);\n  }\n}\n\n/**\n * Load and configure plugins from config\n */\nexport async function loadPlugins(config: LlmailConfig): Promise<Plugin[]> {\n  const pluginConfigs = normalizePluginConfig(config.plugins);\n  const plugins: Plugin[] = [];\n\n  logger.debug('Loading plugins from config:', pluginConfigs);\n  for (const pluginConfig of pluginConfigs) {\n    try {\n      const plugin = await loadPlugin(pluginConfig.name);\n      \n      // Apply configuration if provided\n      if (pluginConfig.config && plugin.validateConfig) {\n        const result = plugin.validateConfig(pluginConfig.config);\n        if (!result.valid) {\n          throw new Error(`Invalid config for plugin ${pluginConfig.name}: ${result.errors?.join(', ')}`);\n        }\n      }\n\n      plugins.push(plugin);\n      logger.debug(`Loaded plugin: ${pluginConfig.name}`);\n    } catch (error) {\n      logger.error(`Failed to load plugin ${pluginConfig.name}:`, error);\n      throw error;\n    }\n  }\n\n  return plugins;\n} "]}