UNPKG

@codervisor/devlog-cli

Version:

Command-line interface for devlog - Extract and stream chat history to devlog server

104 lines (103 loc) 3.35 kB
/** * Configuration management for DevLog CLI * * Handles loading and merging configuration from files, environment variables, * and command line options. */ import { readFile } from 'fs/promises'; import { resolve } from 'path'; import { homedir } from 'os'; import { existsSync } from 'fs'; const DEFAULT_CONFIG = { timeout: 30000, retries: 3, retryDelay: 1000, defaultSource: 'github-copilot', autoLink: true, linkingThreshold: 0.8, }; export async function loadConfig(configPath) { let config = { ...DEFAULT_CONFIG }; // Try to load from default locations const defaultPaths = [ configPath, resolve(homedir(), '.devlog', 'config.json'), resolve(homedir(), '.config', 'devlog', 'config.json'), ].filter(Boolean); for (const path of defaultPaths) { if (existsSync(path)) { try { const fileContent = await readFile(path, 'utf-8'); const fileConfig = JSON.parse(fileContent); config = { ...config, ...fileConfig }; console.log(`📋 Using config from: ${path}`); break; } catch (error) { console.warn(`⚠️ Could not parse config file ${path}:`, error); } } } // Override with environment variables if (process.env.DEVLOG_SERVER) { config.server = process.env.DEVLOG_SERVER; } if (process.env.DEVLOG_WORKSPACE) { config.workspace = process.env.DEVLOG_WORKSPACE; } if (process.env.DEVLOG_TIMEOUT) { config.timeout = parseInt(process.env.DEVLOG_TIMEOUT, 10); } return config; } export function getDefaultConfigPath() { return resolve(homedir(), '.devlog', 'config.json'); } export function getConfigSchema() { return { type: 'object', properties: { server: { type: 'string', description: 'DevLog server URL (e.g., http://localhost:3200)', }, workspace: { type: 'string', description: 'Default workspace ID', }, timeout: { type: 'number', description: 'Request timeout in milliseconds', minimum: 1000, maximum: 300000, }, retries: { type: 'number', description: 'Number of retry attempts for failed requests', minimum: 0, maximum: 10, }, retryDelay: { type: 'number', description: 'Delay between retry attempts in milliseconds', minimum: 100, maximum: 10000, }, defaultSource: { type: 'string', enum: ['github-copilot', 'cursor', 'claude'], description: 'Default chat source to import from', }, autoLink: { type: 'boolean', description: 'Automatically link chat sessions to devlog entries', }, linkingThreshold: { type: 'number', description: 'Confidence threshold for automatic linking (0-1)', minimum: 0, maximum: 1, }, }, }; }