{"repo": "chen-jin-han/sparkle-ignis2.0", "files": {"src/lib/api-settings.ts": {"73fad3abcf12a33165f0407cb05b1f8dc65c1a7c": {"t": 1785595259.1615267, "n": 2058, "h": "2edb7253a5cfb7a8", "c": "/**\n * API Settings — centralized settings.json reader.\n *\n * Replaces process.env mutation for API configuration.\n * Both chat.ts and providers read from here.\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { MIND_DIR } from './data-dir';\n\ninterface ApiSettings {\n apiKey: string;\n baseUrl: string;\n model: string;\n}\n\nlet cached: ApiSettings | null = null;\nlet loaded = false;\n\nfunction readSettings(): ApiSettings {\n const defaults: ApiSettings = {\n apiKey: '',\n baseUrl: 'https://api.anthropic.com',\n model: 'mimo-v2.5',\n };\n\n try {\n const settingsFile = path.join(MIND_DIR, 'settings.json');\n if (fs.existsSync(settingsFile)) {\n const s = JSON.parse(fs.readFileSync(settingsFile, 'utf-8'));\n return {\n apiKey: s.apiKey || defaults.apiKey,\n baseUrl: s.baseUrl || defaults.baseUrl,\n model: s.model || defaults.model,\n };\n }\n } catch {}\n\n return defaults;\n}\n\n/**\n * Get API settings (cached, lazy-loaded).\n * Call invalidate() after settings.json changes.\n */\nexport function getApiSettings(): ApiSettings {\n if (!loaded || !cached) {\n cached = readSettings();\n loaded = true;\n }\n return cached;\n}\n\n/** Force reload on next getApiSettings() call. */\nexport function invalidateApiSettings(): void {\n loaded = false;\n cached = null;\n}\n\n/**\n * Get API key for provider use.\n * Checks spawnOpts config first, then settings.json, then env vars.\n */\nexport function getApiKey(config?: { apiKey?: string }): string {\n return config?.apiKey || getApiSettings().apiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY || '';\n}\n\n/**\n * Get base URL for provider use.\n */\nexport function getBaseUrl(config?: { baseUrl?: string }): string {\n return config?.baseUrl || getApiSettings().baseUrl || process.env.ANTHROPIC_BASE_URL || 'https://api.anthropic.com';\n}\n\n/**\n * Get model for provider use.\n */\nexport function getModel(config?: { model?: string }): string {\n return config?.model || getApiSettings().model || process.env.ANTHROPIC_MODEL || 'mimo-v2.5';\n}\n"}}}}