UNPKG

giga-code

Version:

A personal AI CLI assistant powered by Grok for local development.

210 lines 9.08 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadApiKeys = exports.saveExaApiKey = exports.refreshGlobalSharedInfo = void 0; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const os = __importStar(require("os")); function checkShellFiles() { const homeDir = os.homedir(); const shellFiles = [ path.join(homeDir, '.bashrc'), path.join(homeDir, '.zshrc'), path.join(homeDir, '.bash_profile'), path.join(homeDir, '.profile') ]; const keys = {}; const keyPatterns = { xaiApiKey: /export\s+XAI_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, groqApiKey: /export\s+GROQ_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, anthropicApiKey: /export\s+(?:ANTHROPIC_API_KEY|CLAUDE_API_KEY)\s*=\s*['"]?([^'";\s]+)['"]?/, openRouterApiKey: /export\s+OPENROUTER_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, googleApiKey: /export\s+GOOGLE_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, cerebrasApiKey: /export\s+CEREBRAS_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, exaApiKey: /export\s+EXA_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, openaiApiKey: /export\s+OPENAI_API_KEY\s*=\s*['"]?([^'";\s]+)['"]?/, ollamaBaseUrl: /export\s+OLLAMA_BASE_URL\s*=\s*['"]?([^'";\s]+)['"]?/, }; for (const file of shellFiles) { try { if (fs.existsSync(file)) { const content = fs.readFileSync(file, 'utf8'); for (const [keyName, pattern] of Object.entries(keyPatterns)) { if (!keys[keyName]) { const match = content.match(pattern); if (match && match[1]) { keys[keyName] = match[1]; } } } } } catch (error) { // Ignore errors reading shell files } } return keys; } function saveShellKeysToSettings(shellKeys) { try { const homeDir = os.homedir(); const settingsDir = path.join(homeDir, '.giga'); const settingsFile = path.join(settingsDir, 'user-settings.json'); // Load existing settings or create empty object let settings = {}; if (fs.existsSync(settingsFile)) { settings = JSON.parse(fs.readFileSync(settingsFile, 'utf8')); } // Only save shell keys that are not already in settings and are not empty let hasChanges = false; const keyMappings = { xaiApiKey: 'xaiApiKey', groqApiKey: 'groqApiKey', anthropicApiKey: 'anthropicApiKey', openRouterApiKey: 'openRouterApiKey', googleApiKey: 'googleApiKey', cerebrasApiKey: 'cerebrasApiKey', exaApiKey: 'exaApiKey', openaiApiKey: 'openaiApiKey', ollamaBaseUrl: 'ollamaBaseUrl', }; for (const [apiKeyName, settingsKeyName] of Object.entries(keyMappings)) { const shellValue = shellKeys[apiKeyName]; if (shellValue && !settings[settingsKeyName]) { settings[settingsKeyName] = shellValue; hasChanges = true; } } // Handle legacy apiKey field if (shellKeys.xaiApiKey && !settings.apiKey && !settings.xaiApiKey) { settings.apiKey = shellKeys.xaiApiKey; hasChanges = true; } // Save settings file if there were changes if (hasChanges) { fs.writeFileSync(settingsFile, JSON.stringify(settings, null, 2)); // Refresh global shared info after changes try { const now = new Date(); fs.utimesSync(settingsFile, now, now); } catch (refreshError) { // Silently ignore refresh errors } } } catch (error) { // Silently ignore errors to avoid disrupting the application } } function refreshGlobalSharedInfo() { try { const homeDir = os.homedir(); const settingsFile = path.join(homeDir, '.giga', 'user-settings.json'); // If user-settings.json exists, refresh global shared info if (fs.existsSync(settingsFile)) { // Trigger refresh by updating modification time const now = new Date(); fs.utimesSync(settingsFile, now, now); } } catch (error) { // Silently ignore errors } } exports.refreshGlobalSharedInfo = refreshGlobalSharedInfo; function saveExaApiKey(apiKey) { try { const homeDir = os.homedir(); const settingsDir = path.join(homeDir, '.giga'); const settingsFile = path.join(settingsDir, 'user-settings.json'); let settings = {}; if (fs.existsSync(settingsFile)) { settings = JSON.parse(fs.readFileSync(settingsFile, 'utf8')); } settings.exaApiKey = apiKey; fs.writeFileSync(settingsFile, JSON.stringify(settings, null, 2)); refreshGlobalSharedInfo(); } catch (error) { // Silently ignore } } exports.saveExaApiKey = saveExaApiKey; function loadApiKeys() { try { const homeDir = os.homedir(); const settingsFile = path.join(homeDir, '.giga', 'user-settings.json'); // Start with environment variables const envKeys = { xaiApiKey: process.env.XAI_API_KEY, groqApiKey: process.env.GROQ_API_KEY, anthropicApiKey: process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_API_KEY, openRouterApiKey: process.env.OPENROUTER_API_KEY, googleApiKey: process.env.GOOGLE_API_KEY, cerebrasApiKey: process.env.CEREBRAS_API_KEY, exaApiKey: process.env.EXA_API_KEY, openaiApiKey: process.env.OPENAI_API_KEY, ollamaBaseUrl: process.env.OLLAMA_BASE_URL, }; // Check shell files for exported variables const shellKeys = checkShellFiles(); // Save shell keys to settings if they're not already saved saveShellKeysToSettings(shellKeys); // Load settings file let settingsKeys = {}; if (fs.existsSync(settingsFile)) { const settings = JSON.parse(fs.readFileSync(settingsFile, 'utf8')); settingsKeys = { xaiApiKey: settings.apiKey || settings.xaiApiKey, groqApiKey: settings.groqApiKey, anthropicApiKey: settings.anthropicApiKey, openRouterApiKey: settings.openRouterApiKey, googleApiKey: settings.googleApiKey, cerebrasApiKey: settings.cerebrasApiKey, exaApiKey: settings.exaApiKey, openaiApiKey: settings.openaiApiKey, ollamaBaseUrl: settings.ollamaBaseUrl, }; } // Priority: env vars > shell files > settings file return { xaiApiKey: envKeys.xaiApiKey || shellKeys.xaiApiKey || settingsKeys.xaiApiKey, groqApiKey: envKeys.groqApiKey || shellKeys.groqApiKey || settingsKeys.groqApiKey, anthropicApiKey: envKeys.anthropicApiKey || shellKeys.anthropicApiKey || settingsKeys.anthropicApiKey, openRouterApiKey: envKeys.openRouterApiKey || shellKeys.openRouterApiKey || settingsKeys.openRouterApiKey, googleApiKey: envKeys.googleApiKey || shellKeys.googleApiKey || settingsKeys.googleApiKey, cerebrasApiKey: envKeys.cerebrasApiKey || shellKeys.cerebrasApiKey || settingsKeys.cerebrasApiKey, exaApiKey: envKeys.exaApiKey || shellKeys.exaApiKey || settingsKeys.exaApiKey, openaiApiKey: envKeys.openaiApiKey || shellKeys.openaiApiKey || settingsKeys.openaiApiKey, ollamaBaseUrl: envKeys.ollamaBaseUrl || shellKeys.ollamaBaseUrl || settingsKeys.ollamaBaseUrl || 'http://localhost:11434', }; } catch (error) { return {}; } } exports.loadApiKeys = loadApiKeys; //# sourceMappingURL=api-keys.js.map