UNPKG

adk-typescript

Version:

TypeScript port of Google's Agent Development Kit (ADK)

142 lines (141 loc) 5.52 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.LogLevel = void 0; exports.logToStderr = logToStderr; exports.logToTmpFolder = logToTmpFolder; const fs = __importStar(require("fs")); const os = __importStar(require("os")); const path = __importStar(require("path")); const winston = __importStar(require("winston")); /** * Format string for logs */ const LOGGING_FORMAT = '%(asctime)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s'; /** * Log levels enum */ var LogLevel; (function (LogLevel) { LogLevel["ERROR"] = "error"; LogLevel["WARN"] = "warn"; LogLevel["INFO"] = "info"; LogLevel["VERBOSE"] = "verbose"; LogLevel["DEBUG"] = "debug"; LogLevel["SILLY"] = "silly"; })(LogLevel || (exports.LogLevel = LogLevel = {})); /** * Configure logging to stderr * * @param level The log level (default: info) * @returns The configured logger */ function logToStderr(level = LogLevel.INFO) { const logger = winston.createLogger({ level: level, format: winston.format.combine(winston.format.timestamp(), winston.format.printf(info => `${info.timestamp} - ${info.level} - ${info.filename || 'unknown'}:${info.lineno || '?'} - ${info.message}`)), transports: [ new winston.transports.Console() ] }); return logger; } /** * Configure logging to a temporary folder * * @param level The log level (default: info) * @param subFolder Subfolder name in the temp directory (default: agents_log) * @param logFilePrefix Prefix for log file names (default: agent) * @param logFileTimestamp Timestamp for the log file name (default: current time in YYYYMMdd_HHmmss format) * @returns The log file path and configured logger */ function logToTmpFolder(level = LogLevel.INFO, subFolder = 'agents_log', logFilePrefix = 'agent', logFileTimestamp = getTimestamp()) { // Create the log directory in the system temp folder const logDir = path.join(os.tmpdir(), subFolder); const logFilename = `${logFilePrefix}.${logFileTimestamp}.log`; const logFilePath = path.join(logDir, logFilename); // Ensure the log directory exists if (!fs.existsSync(logDir)) { fs.mkdirSync(logDir, { recursive: true }); } // Create the logger const logger = winston.createLogger({ level: level, format: winston.format.combine(winston.format.timestamp(), winston.format.printf(info => `${info.timestamp} - ${info.level} - ${info.filename || 'unknown'}:${info.lineno || '?'} - ${info.message}`)), transports: [ new winston.transports.File({ filename: logFilePath }) ] }); console.log(`Log setup complete: ${logFilePath}`); // Create a symbolic link to the latest log file const latestLogLink = path.join(logDir, `${logFilePrefix}.latest.log`); try { // Remove existing symlink if it exists if (fs.existsSync(latestLogLink)) { fs.unlinkSync(latestLogLink); } // Create new symlink if (process.platform === 'win32') { // On Windows, we need admin rights for symlinks, so just copy the file instead fs.copyFileSync(logFilePath, latestLogLink); } else { // On Unix systems, create a proper symlink fs.symlinkSync(logFilePath, latestLogLink); } console.log(`To access latest log: tail -F ${latestLogLink}`); } catch (error) { console.warn(`Could not create link to latest log: ${error}`); } return { logFilePath, logger }; } /** * Get current timestamp in YYYYMMdd_HHmmss format * * @returns Formatted timestamp */ function getTimestamp() { const now = new Date(); const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); const day = String(now.getDate()).padStart(2, '0'); const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); return `${year}${month}${day}_${hours}${minutes}${seconds}`; }