UNPKG

@every-env/cli

Version:

Multi-agent orchestrator for AI-powered development workflows

81 lines 2.65 kB
import chalk from 'chalk'; class Logger { level = 'info'; levels = { debug: 0, info: 1, warn: 2, error: 3, }; isProgressActive = false; debugBuffer = []; setLevel(level) { this.level = level; } setProgressActive(active) { this.isProgressActive = active; // Flush buffer when progress ends if (!active && this.debugBuffer.length > 0) { this.flushDebugBuffer(); } } flushDebugBuffer() { this.debugBuffer.forEach(msg => console.log(msg)); this.debugBuffer = []; } shouldLog(level) { return this.levels[level] >= this.levels[this.level]; } formatMessage(level, message, data) { const timestamp = new Date().toISOString().split('T')[1].split('.')[0]; // HH:MM:SS format const levelLabel = level.toUpperCase().padEnd(5); const prefix = chalk.dim(`[${timestamp}] [${levelLabel}]`); let formatted = `${prefix} ${message}`; if (data !== undefined) { // Format data more compactly for debug output const dataStr = this.level === 'debug' ? JSON.stringify(data, null, 0) : JSON.stringify(data, null, 2); formatted += chalk.dim(` ${dataStr}`); } return formatted; } debug(message, data) { if (this.shouldLog('debug')) { const formatted = chalk.gray(this.formatMessage('debug', message, data)); if (this.isProgressActive) { // Buffer debug messages during progress display this.debugBuffer.push(formatted); } else { // eslint-disable-next-line no-console console.log(formatted); } } } info(message, data) { if (this.shouldLog('info')) { // eslint-disable-next-line no-console console.log(chalk.blue(this.formatMessage('info', message, data))); } } warn(message, data) { if (this.shouldLog('warn')) { console.warn(chalk.yellow(this.formatMessage('warn', message, data))); } } error(message, error) { if (this.shouldLog('error')) { const errorData = error instanceof Error ? { message: error.message, stack: error.stack, } : error; console.error(chalk.red(this.formatMessage('error', message, errorData))); } } } export const logger = new Logger(); export function setLogLevel(level) { logger.setLevel(level); } //# sourceMappingURL=logger.js.map