diff --git a/src/core/config-manager.js b/src/core/config-manager.js index cda962d..bac9e53 100644 --- a/src/core/config-manager.js +++ b/src/core/config-manager.js @@ -232,14 +232,14 @@ export async function initializeConfig(args = process.argv.slice(2), configFileP // Initialize logger logger.initialize({ - enabled: CONFIG.LOG_ENABLED, - outputMode: CONFIG.LOG_OUTPUT_MODE, - logLevel: CONFIG.LOG_LEVEL, - logDir: CONFIG.LOG_DIR, - includeRequestId: CONFIG.LOG_INCLUDE_REQUEST_ID, - includeTimestamp: CONFIG.LOG_INCLUDE_TIMESTAMP, - maxFileSize: CONFIG.LOG_MAX_FILE_SIZE, - maxFiles: CONFIG.LOG_MAX_FILES + enabled: CONFIG.LOG_ENABLED ?? true, + outputMode: CONFIG.LOG_OUTPUT_MODE || "all", + logLevel: CONFIG.LOG_LEVEL || "info", + logDir: CONFIG.LOG_DIR || "logs", + includeRequestId: CONFIG.LOG_INCLUDE_REQUEST_ID ?? true, + includeTimestamp: CONFIG.LOG_INCLUDE_TIMESTAMP ?? true, + maxFileSize: CONFIG.LOG_MAX_FILE_SIZE || 10485760, + maxFiles: CONFIG.LOG_MAX_FILES || 10 }); // Cleanup old logs periodically diff --git a/src/core/plugin-manager.js b/src/core/plugin-manager.js index 6f41066..a3b7b72 100644 --- a/src/core/plugin-manager.js +++ b/src/core/plugin-manager.js @@ -64,17 +64,36 @@ class PluginManager { /** * 加载插件配置文件 + * 永远生成默认配置,如果本地文件存在则合并,但不覆盖 enabled 字段 */ async loadConfig() { try { + // 1. 永远生成默认配置 + const defaultConfig = await this.generateDefaultConfig(); + + // 2. 如果本地文件存在,读取并合并 if (existsSync(PLUGINS_CONFIG_FILE)) { const content = await fs.readFile(PLUGINS_CONFIG_FILE, 'utf8'); - this.pluginsConfig = JSON.parse(content); - } else { - // 扫描 plugins 目录生成默认配置 - this.pluginsConfig = await this.generateDefaultConfig(); - await this.saveConfig(); + const localConfig = JSON.parse(content); + + // 3. 合并配置:遍历默认配置中的所有插件 + for (const [pluginName, defaultPluginConfig] of Object.entries(defaultConfig.plugins)) { + const localPluginConfig = localConfig.plugins?.[pluginName]; + + if (localPluginConfig) { + // 本地配置存在,合并但保留本地的 enabled 字段 + defaultConfig.plugins[pluginName] = { + ...defaultPluginConfig, + ...localPluginConfig, + enabled: localPluginConfig.enabled // 保留本地的 enabled 字段 + }; + } + // 如果本地配置不存在该插件,使用默认配置 + } } + + this.pluginsConfig = defaultConfig; + await this.saveConfig(); } catch (error) { logger.error('[PluginManager] Failed to load config:', error.message); this.pluginsConfig = { plugins: {} };