UNPKG

sourcesailor

Version:

A CLI tool for analyzing and documenting codebases

64 lines (63 loc) 2.17 kB
import fs from 'fs'; import os from 'os'; import path from 'path'; export const command = 'setup [apiKey|k] [model|m]'; export const describe = 'Setup OpenAI API Key and default model'; export function builder(yargs) { yargs.option('apiKey', { describe: 'OpenAI API Key', alias: 'k', type: 'string', required: true, demandOption: true }); yargs.option('model', { alias: 'm', describe: 'OpenAI Model', type: 'string', default: 'gpt-3.5-turbo' }); yargs.option('anthropicApiKey', { describe: 'Anthropic API Key', alias: 'n', type: 'string' }); yargs.option('geminiApiKey', { describe: 'Gemini API Key', alias: 'g', type: 'string' }); yargs.option('analysisDir', { alias: 'a', describe: 'Root directory to write the analysis. Default home directory. Use p to use the codebase directory.', type: 'string', default: os.homedir() }); return yargs; } export function handler(argv) { console.log(`Setting up OpenAI API Key: ${argv.apiKey} and default model: ${argv.model}`); const homeDir = os.homedir(); if (!fs.existsSync(path.join(homeDir, '.SourceSailor'))) { fs.mkdirSync(path.join(homeDir, '.SourceSailor')); } const configFile = path.join(homeDir, '.SourceSailor', 'config.json'); const configFileData = fs.readFileSync(configFile, 'utf8'); let configData = {}; try { configData = JSON.parse(configFileData); } catch (error) { console.error('Error parsing config file:', error); } const config = { OPENAI_API_KEY: argv.apiKey || configData.OPENAI_API_KEY, DEFAULT_OPENAI_MODEL: argv.model || configData.DEFAULT_OPENAI_MODEL, ANALYSIS_DIR: argv.analysisDir || configData.ANALYSIS_DIR, ANTHROPIC_API_KEY: argv.anthropicApiKey || configData.ANTHROPIC_API_KEY, GEMINI_API_KEY: argv.geminiApiKey || configData.GEMINI_API_KEY }; fs.writeFileSync(configFile, JSON.stringify(config)); } export const usage = '$0 <cmd> [args]'; // export const aliases = ['h', 'help']