feat: add environment configuration loader

This commit is contained in:
2026-06-09 18:21:33 +01:00
parent d8672377fc
commit d7e9d1122a
6 changed files with 3251 additions and 7 deletions
+43
View File
@@ -1 +1,44 @@
// 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),
};
}