agp-cli
Version:
Agentic Programming Project CLI - Standardized knowledge layer for AI-assisted development
130 lines • 3.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLogger = exports.Logger = exports.logger = void 0;
const chalk_1 = __importDefault(require("chalk"));
const ora_1 = __importDefault(require("ora"));
class Logger {
options;
currentProgress = '';
isProgressActive = false;
constructor(options = {}) {
this.options = options;
}
/**
* Print important messages that should always be visible
*/
info(message) {
this.clearProgress();
console.log(chalk_1.default.blue(message));
}
success(message) {
this.clearProgress();
console.log(chalk_1.default.green(`✓ ${message}`));
}
warning(message) {
this.clearProgress();
console.log(chalk_1.default.yellow(`! ${message}`));
}
error(message) {
this.clearProgress();
console.log(chalk_1.default.red(`✗ ${message}`));
}
/**
* Show inline progress that gets replaced on next update
*/
progress(message) {
if (this.options.silent)
return;
this.clearProgress();
this.currentProgress = `⠋ ${message}...`;
process.stdout.write(chalk_1.default.gray(this.currentProgress));
this.isProgressActive = true;
}
/**
* Complete current progress and show final result
*/
progressDone(message) {
if (this.options.silent)
return;
this.clearProgress();
if (message) {
console.log(chalk_1.default.gray(`✓ ${message}`));
}
this.isProgressActive = false;
}
/**
* Show verbose/debug information (only if verbose mode is enabled)
*/
debug(message) {
if (!this.options.verbose || this.options.silent)
return;
this.clearProgress();
console.log(chalk_1.default.dim(message));
}
/**
* Show step information (slightly less prominent than info)
*/
step(message) {
this.clearProgress();
console.log(chalk_1.default.cyan(`→ ${message}`));
}
/**
* Clear current progress line
*/
clearProgress() {
if (this.isProgressActive && this.currentProgress) {
// Calculate the actual display length (excluding emoji which might be 2 chars)
const displayLength = this.currentProgress.length + 2; // +2 for emoji
process.stdout.write('\r' + ' '.repeat(displayLength) + '\r');
this.isProgressActive = false;
this.currentProgress = '';
}
}
/**
* Start a multi-step operation
*/
startGroup(title) {
this.clearProgress();
console.log(chalk_1.default.bold.blue(`\n${title}`));
}
/**
* End a multi-step operation
*/
endGroup(message) {
this.clearProgress();
if (message) {
console.log(chalk_1.default.bold.green(`${message}\n`));
}
else {
console.log('');
}
}
/**
* Create a spinner-like effect for long operations
*/
async withSpinner(message, operation) {
if (this.options.silent) {
return await operation();
}
const spinner = (0, ora_1.default)(message).start();
try {
const result = await operation();
spinner.succeed(message);
return result;
}
catch (error) {
spinner.fail(message);
throw error;
}
}
}
exports.Logger = Logger;
// Export singleton instance
exports.logger = new Logger();
// Export convenience functions
const createLogger = (options) => new Logger(options);
exports.createLogger = createLogger;
//# sourceMappingURL=logger.js.map