BMAD-METHOD/.claude/tools/monitoring/trace-logger.mjs

66 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
/**
* Execution Trace Logger
*
* Comprehensive logging system for workflow execution.
* Tracks all agent activities, timings, and outcomes.
*
* @version 2.0.0
* @date 2025-11-13
*/
import fs from 'fs/promises';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const PROJECT_ROOT = path.resolve(__dirname, '../../..');
const CONFIG = {
PATHS: {
TRACES: path.join(PROJECT_ROOT, '.claude/context/history/traces')
}
};
class ExecutionTraceLogger {
constructor(sessionId, workflowName) {
this.sessionId = sessionId;
this.workflowName = workflowName;
this.trace = {
session_id: sessionId,
workflow_name: workflowName,
started_at: new Date().toISOString(),
status: 'in_progress',
execution_log: []
};
}
async log(entry) {
const logEntry = {
timestamp: new Date().toISOString(),
...entry
};
this.trace.execution_log.push(logEntry);
console.log(` 📝 ${entry.action}: ${entry.agent || 'system'} (${entry.status})`);
}
async complete(status = 'completed') {
this.trace.status = status;
this.trace.completed_at = new Date().toISOString();
this.trace.total_duration_ms = Date.now() - new Date(this.trace.started_at).getTime();
await this.save();
}
async save() {
const filePath = path.join(CONFIG.PATHS.TRACES, `${this.sessionId}.json`);
await fs.mkdir(path.dirname(filePath), { recursive: true});
await fs.writeFile(filePath, JSON.stringify(this.trace, null, 2));
return filePath;
}
}
export { ExecutionTraceLogger };