summarizely-cli
Version:
YouTube summarizer that respects your existing subscriptions. No API keys required.
189 lines • 6.24 kB
JavaScript
;
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