@every-env/cli
Version:
Multi-agent orchestrator for AI-powered development workflows
81 lines • 2.65 kB
JavaScript
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