UNPKG

summarizely-cli

Version:

YouTube summarizer that respects your existing subscriptions. No API keys required.

189 lines 6.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConfigManager = void 0; exports.getConfig = getConfig; exports.overrideConfig = overrideConfig; exports.resetConfig = resetConfig; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const os_1 = __importDefault(require("os")); const DEFAULT_CONFIG = { providers: { priority: ['claude-cli', 'codex-cli', 'ollama'], timeout: 300000, // 5 minutes defaultModel: { 'ollama': 'qwen2.5:0.5b-instruct', 'claude-cli': undefined, 'codex-cli': undefined } }, batch: { concurrency: 3, retries: 2, retryDelay: 5000 }, output: { dir: 'summaries', format: 'markdown', saveTranscript: true, copyToLatest: true }, cache: { enabled: true, ttl: 7 * 24 * 60 * 60 * 1000, // 7 days dir: path_1.default.join(os_1.default.homedir(), '.summarizely', 'cache') }, transcript: { maxChars: 80000, capEnabled: true }, debug: { enabled: false, verbose: false }, performance: { profiling: false } }; class ConfigManager { constructor() { this.configPath = this.getConfigPath(); this.config = this.loadConfig(); } getConfigPath() { const configDir = path_1.default.join(os_1.default.homedir(), '.summarizely'); if (!fs_1.default.existsSync(configDir)) { fs_1.default.mkdirSync(configDir, { recursive: true }); } return path_1.default.join(configDir, 'config.json'); } loadConfig() { let fileConfig = {}; // Load from file if exists if (fs_1.default.existsSync(this.configPath)) { try { const content = fs_1.default.readFileSync(this.configPath, 'utf8'); fileConfig = JSON.parse(content); } catch (e) { console.error(`Warning: Failed to parse config file: ${e}`); } } // Load from environment variables const envConfig = this.loadEnvConfig(); // Merge configs (priority: env > file > defaults) return this.mergeConfigs(DEFAULT_CONFIG, fileConfig, envConfig); } loadEnvConfig() { const config = {}; // Provider settings if (process.env.SUMMARIZELY_PROVIDER) { config.providers = config.providers || {}; config.providers.priority = [process.env.SUMMARIZELY_PROVIDER]; } if (process.env.SUMMARIZELY_TIMEOUT) { config.providers = config.providers || {}; config.providers.timeout = parseInt(process.env.SUMMARIZELY_TIMEOUT); } // Batch settings if (process.env.SUMMARIZELY_CONCURRENCY) { config.batch = config.batch || {}; config.batch.concurrency = parseInt(process.env.SUMMARIZELY_CONCURRENCY); } // Output settings if (process.env.SUMMARIZELY_OUTPUT_DIR) { config.output = config.output || {}; config.output.dir = process.env.SUMMARIZELY_OUTPUT_DIR; } // Cache settings if (process.env.SUMMARIZELY_CACHE === 'false') { config.cache = config.cache || {}; config.cache.enabled = false; } if (process.env.SUMMARIZELY_CACHE_DIR) { config.cache = config.cache || {}; config.cache.dir = process.env.SUMMARIZELY_CACHE_DIR; } // Transcript settings if (process.env.SUMMARIZELY_MAX_CHARS) { config.transcript = config.transcript || {}; config.transcript.maxChars = parseInt(process.env.SUMMARIZELY_MAX_CHARS); } // Debug settings if (process.env.DEBUG === 'summarizely' || process.env.SUMMARIZELY_DEBUG === 'true') { config.debug = { enabled: true, verbose: false }; } if (process.env.SUMMARIZELY_DEBUG_VERBOSE === 'true') { config.debug = { enabled: true, verbose: true }; } // Performance settings if (process.env.SUMMARIZELY_PROFILE === 'true') { config.performance = { profiling: true }; } return config; } mergeConfigs(...configs) { const result = { ...DEFAULT_CONFIG }; for (const config of configs) { if (!config) continue; // Deep merge for (const key in config) { const configKey = key; if (config[configKey] !== undefined) { if (typeof config[configKey] === 'object' && !Array.isArray(config[configKey])) { result[configKey] = { ...result[configKey], ...config[configKey] }; } else { result[configKey] = config[configKey]; } } } } return result; } get() { return this.config; } override(overrides) { this.config = this.mergeConfigs(this.config, overrides); return this.config; } save() { try { fs_1.default.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2), 'utf8'); } catch (e) { console.error(`Failed to save config: ${e}`); } } reset() { this.config = { ...DEFAULT_CONFIG }; this.save(); } } exports.ConfigManager = ConfigManager; // Singleton instance let configInstance = null; function getConfig() { if (!configInstance) { configInstance = new ConfigManager(); } return configInstance.get(); } function overrideConfig(overrides) { if (!configInstance) { configInstance = new ConfigManager(); } return configInstance.override(overrides); } function resetConfig() { if (!configInstance) { configInstance = new ConfigManager(); } configInstance.reset(); } //# sourceMappingURL=config.js.map