50 lines
2.2 KiB
JavaScript
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),
|
|
};
|
|
}
|