Files
chatgpt-mcp/src/config/env.js
T
2026-06-15 13:35:31 +01:00

50 lines
2.2 KiB
JavaScript

// Environment variable loading and validation.
export function loadConfig() {
const key = process.env.OPENAI_API_KEY;
if (!key) {
throw new Error('Configuration error: OPENAI_API_KEY is missing.');
}
const parseNum = (name, raw, fallback) => {
if (raw === undefined || raw === '') return fallback;
const n = Number(raw);
if (isNaN(n) || !Number.isFinite(n) || n < 0) {
throw new Error(
`Configuration error: ${name} must be a positive number, got "${raw}".`
);
}
return n;
};
const parseBool = (name, raw, fallback) => {
if (raw === undefined || raw === '') return fallback;
if (raw === 'true') return true;
if (raw === 'false') return false;
throw new Error(
`Configuration error: ${name} must be true or false, got "${raw}".`
);
};
return {
openaiApiKey: key,
openaiModel: process.env.OPENAI_MODEL || 'gpt-5.1',
temperature: parseNum('OPENAI_TEMPERATURE', process.env.OPENAI_TEMPERATURE, 0.2),
maxOutputTokens: parseNum('OPENAI_MAX_OUTPUT_TOKENS', process.env.OPENAI_MAX_OUTPUT_TOKENS, 2000),
logLevel: process.env.CHATGPT_MCP_LOG_LEVEL || 'info',
enableFileContext: parseBool('CHATGPT_MCP_ENABLE_FILE_CONTEXT', process.env.CHATGPT_MCP_ENABLE_FILE_CONTEXT, false),
contextDir: process.env.CHATGPT_MCP_CONTEXT_DIR || './context',
maxInputChars: parseNum('CHATGPT_MCP_MAX_INPUT_CHARS', process.env.CHATGPT_MCP_MAX_INPUT_CHARS, 30000),
maxFileChars: parseNum('CHATGPT_MCP_MAX_FILE_CHARS', process.env.CHATGPT_MCP_MAX_FILE_CHARS, 12000),
maxFiles: parseNum('CHATGPT_MCP_MAX_FILES', process.env.CHATGPT_MCP_MAX_FILES, 5),
maxLogChars: parseNum('CHATGPT_MCP_MAX_LOG_CHARS', process.env.CHATGPT_MCP_MAX_LOG_CHARS, 10000),
redactSecrets: parseBool('CHATGPT_MCP_REDACT_SECRETS', process.env.CHATGPT_MCP_REDACT_SECRETS, true),
chatgptMcpProvider: process.env.CHATGPT_MCP_PROVIDER || 'openai',
ollamaBaseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
ollamaModel: process.env.OLLAMA_MODEL || 'qwen3:latest',
ollamaTemperature: parseNum('OLLAMA_TEMPERATURE', process.env.OLLAMA_TEMPERATURE, 0.2),
ollamaTimeout: parseNum('OLLAMA_TIMEOUT', process.env.OLLAMA_TIMEOUT, 60),
};
}