UNPKG

@essentialai/cogent-bridge

Version:

Cogent Bridge — cross-agent comms for Claude Code, OpenAI Codex and Slack. Codex users: install with `curl -fsSL https://cogent.tools/install.sh | sh`, then start with `cogent-codex` for real-time peer wake.

79 lines • 2.36 kB
import fs from "node:fs"; import path from "node:path"; const LEVELS = { debug: 0, info: 1, warn: 2, error: 3, }; export class Logger { threshold; textStream = null; jsonStream = null; constructor(level, logDir) { this.threshold = LEVELS[level]; if (logDir) { fs.mkdirSync(logDir, { recursive: true }); const now = new Date() .toISOString() .replace(/:/g, "-") .replace(/\.\d{3}Z$/, ""); const textFile = `bridge-${now}.log`; const jsonFile = `bridge-${now}.json.log`; this.textStream = fs.createWriteStream(path.join(logDir, textFile), { flags: "a", }); this.jsonStream = fs.createWriteStream(path.join(logDir, jsonFile), { flags: "a", }); } } log(level, message, data) { if (LEVELS[level] < this.threshold) return; const timestamp = new Date().toISOString(); const humanLine = `${timestamp} [${level.toUpperCase()}] ${message}\n`; try { process.stderr.write(humanLine); } catch { // Ignore EPIPE / broken pipe -- parent process disconnected } this.textStream?.write(humanLine); const entry = { timestamp, level, message }; if (data !== undefined) { entry.data = data; } this.jsonStream?.write(JSON.stringify(entry) + "\n"); } debug(message, data) { this.log("debug", message, data); } info(message, data) { this.log("info", message, data); } warn(message, data) { this.log("warn", message, data); } error(message, data) { this.log("error", message, data); } close() { this.textStream?.end(); this.jsonStream?.end(); } } export function createLogger(level, logDir) { return new Logger(level, logDir); } /** Pre-config logger: stderr-only at info level. Replaced after startup. */ export let logger = new Logger("info"); /** * Initialize the fully-configured logger with file outputs. * Replaces the module-level `logger` export. */ export function initLogger(level, logDir) { logger.close(); logger = new Logger(level, logDir); } //# sourceMappingURL=logger.js.map