Files
intelligence-terminal/crucix.config.mjs
MrSphay e574ad1c3d
All checks were successful
Codex Template Compliance / template-compliance (pull_request) Successful in 5s
Build / test-and-image (pull_request) Successful in 53s
feat: alert operators on stale data
2026-05-17 13:58:32 +02:00

74 lines
2.9 KiB
JavaScript

// Crucix Configuration — all settings with env var overrides
import "./apis/utils/env.mjs"; // Load .env first
function intEnv(name, fallback) {
const value = parseInt(process.env[name], 10);
return Number.isFinite(value) ? value : fallback;
}
function floatEnv(name, fallback) {
const value = parseFloat(process.env[name]);
return Number.isFinite(value) ? value : fallback;
}
function boolEnv(name, fallback = false) {
const value = process.env[name];
if (value == null || value === '') return fallback;
return ['1', 'true', 'yes', 'on'].includes(String(value).toLowerCase());
}
export default {
port: intEnv('PORT', 3117),
refreshIntervalMinutes: intEnv('REFRESH_INTERVAL_MINUTES', 15),
autoOpenBrowser: boolEnv('AUTO_OPEN_BROWSER', false),
staleDataMaxAgeMinutes: intEnv('STALE_DATA_MAX_AGE_MINUTES', 60),
staleAlertCooldownMinutes: intEnv('STALE_ALERT_COOLDOWN_MINUTES', 60),
dashboardUrl: process.env.DASHBOARD_URL || null,
sweepToken: process.env.SWEEP_TOKEN || null,
terminalActionsEnabled: boolEnv('TERMINAL_ACTIONS_ENABLED', true),
llm: {
provider: process.env.LLM_PROVIDER || null, // anthropic | openai | gemini | codex | openrouter | minimax | mistral | ollama | grok
apiKey: process.env.LLM_API_KEY || null,
model: process.env.LLM_MODEL || null,
baseUrl: process.env.LLM_BASE_URL || process.env.OPENAI_BASE_URL || process.env.OLLAMA_BASE_URL || null,
temperature: floatEnv('LLM_TEMPERATURE', 0.2),
maxTokens: intEnv('LLM_MAX_TOKENS', 2000),
timeoutMs: intEnv('LLM_TIMEOUT_MS', 90000),
openRouterSiteUrl: process.env.OPENROUTER_SITE_URL || 'https://git.wilkensxl.de/MrSphay/intelligence-terminal',
openRouterAppName: process.env.OPENROUTER_APP_NAME || 'Intelligence Terminal',
},
telegram: {
botToken: process.env.TELEGRAM_BOT_TOKEN || null,
chatId: process.env.TELEGRAM_CHAT_ID || null,
botPollingInterval: intEnv('TELEGRAM_POLL_INTERVAL', 5000),
channels: process.env.TELEGRAM_CHANNELS || null, // Comma-separated extra channel IDs
briefVerbosity: process.env.BRIEF_VERBOSITY || 'standard',
},
discord: {
botToken: process.env.DISCORD_BOT_TOKEN || null,
channelId: process.env.DISCORD_CHANNEL_ID || null,
guildId: process.env.DISCORD_GUILD_ID || null, // Server ID (for instant slash command registration)
webhookUrl: process.env.DISCORD_WEBHOOK_URL || null, // Fallback: webhook-only alerts (no bot needed)
},
// Delta engine thresholds — override defaults from lib/delta/engine.mjs
// Set to null to use built-in defaults
delta: {
thresholds: {
numeric: {
// Example overrides (uncomment to customize):
// vix: 3, // more sensitive to VIX moves
// wti: 5, // less sensitive to oil moves
},
count: {
// urgent_posts: 3, // need ±3 urgent posts to flag
// thermal_total: 1000, // need ±1000 thermal detections
},
},
},
};