// src/utils/logging.ts import fs from 'fs'; import util from 'util'; /** * Multi-agent debug gate. Controls chatty graph/handoff/transfer/sequence * trace logs emitted from `MultiAgentGraph` and `Graph`. Off by default so the * package stays quiet when embedded in host apps. Flip to * `DEBUG_MULTIAGENT=true` in the host env to re-enable for testing. * * Exported as functions so runtime toggling via env reload works; the check * is cheap (string equality) and only runs when a log site fires. */ function isMultiAgentDebugEnabled(): boolean { return process.env.DEBUG_MULTIAGENT === 'true'; } // eslint-disable-next-line @typescript-eslint/no-explicit-any export const mlog = (...args: any[]): void => { if (isMultiAgentDebugEnabled()) { console.debug(...args); } }; // eslint-disable-next-line @typescript-eslint/no-explicit-any export const mwarn = (...args: any[]): void => { if (isMultiAgentDebugEnabled()) { console.warn(...args); } }; export function setupLogging(logFileName: string): void { const logFile = fs.createWriteStream(logFileName, { flags: 'a' }); const originalConsoleLog = console.log; const originalConsoleError = console.error; const originalStdoutWrite = process.stdout.write; const originalStderrWrite = process.stderr.write; console.log = function (...args): void { logFile.write(util.format.apply(null, args) + ' '); originalConsoleLog.apply(console, args); }; console.error = function (...args): void { logFile.write(util.format.apply(null, args) + ' '); originalConsoleError.apply(console, args); }; process.stdout.write = function ( buffer: Uint8Array | string, cb?: ((err?: Error) => void) | string, fd?: (err?: Error) => void ): boolean { if (typeof buffer === 'string') { logFile.write(buffer); } else { logFile.write(buffer.toString()); } return originalStdoutWrite.call( process.stdout, buffer, cb as BufferEncoding | undefined, fd ); }; process.stderr.write = function ( buffer: Uint8Array | string, cb?: ((err?: Error) => void) | string, fd?: (err?: Error) => void ): boolean { if (typeof buffer === 'string') { logFile.write(buffer); } else { logFile.write(buffer.toString()); } return originalStderrWrite.call( process.stderr, buffer, cb as BufferEncoding | undefined, fd ); }; }