* 应用环境变量覆盖(环境变量优先级最高,不受热重载影响)
(cfg: AppConfig)
| 123 | * 应用环境变量覆盖(环境变量优先级最高,不受热重载影响) |
| 124 | */ |
| 125 | function applyEnvOverrides(cfg: AppConfig): void { |
| 126 | if (process.env.PORT) cfg.port = parseInt(process.env.PORT); |
| 127 | if (process.env.TIMEOUT) cfg.timeout = parseInt(process.env.TIMEOUT); |
| 128 | if (process.env.PROXY) cfg.proxy = process.env.PROXY; |
| 129 | if (process.env.CURSOR_MODEL) cfg.cursorModel = process.env.CURSOR_MODEL; |
| 130 | if (process.env.MAX_AUTO_CONTINUE !== undefined) cfg.maxAutoContinue = parseInt(process.env.MAX_AUTO_CONTINUE); |
| 131 | if (process.env.MAX_HISTORY_MESSAGES !== undefined) cfg.maxHistoryMessages = parseInt(process.env.MAX_HISTORY_MESSAGES); |
| 132 | if (process.env.MAX_HISTORY_TOKENS !== undefined) cfg.maxHistoryTokens = parseInt(process.env.MAX_HISTORY_TOKENS); |
| 133 | if (process.env.AUTH_TOKEN) { |
| 134 | cfg.authTokens = process.env.AUTH_TOKEN.split(',').map(s => s.trim()).filter(Boolean); |
| 135 | } |
| 136 | // 压缩环境变量覆盖 |
| 137 | if (process.env.COMPRESSION_ENABLED !== undefined) { |
| 138 | if (!cfg.compression) cfg.compression = { enabled: false, level: 1, keepRecent: 10, earlyMsgMaxChars: 4000 }; |
| 139 | cfg.compression.enabled = process.env.COMPRESSION_ENABLED !== 'false' && process.env.COMPRESSION_ENABLED !== '0'; |
| 140 | } |
| 141 | if (process.env.COMPRESSION_LEVEL) { |
| 142 | if (!cfg.compression) cfg.compression = { enabled: false, level: 1, keepRecent: 10, earlyMsgMaxChars: 4000 }; |
| 143 | const lvl = parseInt(process.env.COMPRESSION_LEVEL); |
| 144 | if (lvl >= 1 && lvl <= 3) cfg.compression.level = lvl as 1 | 2 | 3; |
| 145 | } |
| 146 | // Thinking 环境变量覆盖(最高优先级) |
| 147 | if (process.env.THINKING_ENABLED !== undefined) { |
| 148 | cfg.thinking = { |
| 149 | enabled: process.env.THINKING_ENABLED !== 'false' && process.env.THINKING_ENABLED !== '0', |
| 150 | }; |
| 151 | } |
| 152 | // Logging 环境变量覆盖 |
| 153 | if (process.env.LOG_FILE_ENABLED !== undefined) { |
| 154 | if (!cfg.logging) cfg.logging = { file_enabled: false, dir: './logs', max_days: 7, persist_mode: 'summary', db_enabled: false, db_path: './logs/cursor2api.db' }; |
| 155 | cfg.logging.file_enabled = process.env.LOG_FILE_ENABLED === 'true' || process.env.LOG_FILE_ENABLED === '1'; |
| 156 | } |
| 157 | if (process.env.LOG_DIR) { |
| 158 | if (!cfg.logging) cfg.logging = { file_enabled: false, dir: './logs', max_days: 7, persist_mode: 'summary', db_enabled: false, db_path: './logs/cursor2api.db' }; |
| 159 | cfg.logging.dir = process.env.LOG_DIR; |
| 160 | } |
| 161 | if (process.env.LOG_PERSIST_MODE) { |
| 162 | if (!cfg.logging) cfg.logging = { file_enabled: false, dir: './logs', max_days: 7, persist_mode: 'summary', db_enabled: false, db_path: './logs/cursor2api.db' }; |
| 163 | cfg.logging.persist_mode = process.env.LOG_PERSIST_MODE === 'full' |
| 164 | ? 'full' |
| 165 | : process.env.LOG_PERSIST_MODE === 'summary' |
| 166 | ? 'summary' |
| 167 | : 'compact'; |
| 168 | } |
| 169 | if (process.env.LOG_DB_ENABLED !== undefined) { |
| 170 | if (!cfg.logging) cfg.logging = { file_enabled: false, dir: './logs', max_days: 7, persist_mode: 'summary', db_enabled: false, db_path: './logs/cursor2api.db' }; |
| 171 | cfg.logging.db_enabled = process.env.LOG_DB_ENABLED === 'true' || process.env.LOG_DB_ENABLED === '1'; |
| 172 | } |
| 173 | if (process.env.LOG_DB_PATH) { |
| 174 | if (!cfg.logging) cfg.logging = { file_enabled: false, dir: './logs', max_days: 7, persist_mode: 'summary', db_enabled: false, db_path: './logs/cursor2api.db' }; |
| 175 | cfg.logging.db_path = process.env.LOG_DB_PATH; |
| 176 | } |
| 177 | // 工具透传模式环境变量覆盖 |
| 178 | if (process.env.TOOLS_PASSTHROUGH !== undefined) { |
| 179 | if (!cfg.tools) cfg.tools = { schemaMode: 'full', descriptionMaxLength: 0 }; |
| 180 | cfg.tools.passthrough = process.env.TOOLS_PASSTHROUGH === 'true' || process.env.TOOLS_PASSTHROUGH === '1'; |
| 181 | } |
| 182 | // 工具禁用模式环境变量覆盖 |
no test coverage detected