UNPKG

@agentics.org/sparc2

Version:

SPARC 2.0 - Autonomous Vector Coding Agent + MCP. SPARC 2.0, vectorized AI code analysis, is an intelligent coding agent framework built to automate and streamline software development. It combines secure execution environments, and version control into a

137 lines (122 loc) 3.54 kB
/** * Logger module for SPARC 2.0 * Provides logging functionality with vector store integration for searchable logs */ import { vectorStoreLog } from "./vector/vectorStore.ts"; // Internal property for testing - allows tests to mock the vectorStoreLog function // @ts-ignore: This is used by tests to inject mocks export let _vectorStoreLogImpl = vectorStoreLog; /** * Log level type */ export type LogLevel = "info" | "error" | "debug" | "warn"; /** * Log entry interface */ export interface LogEntry { timestamp: string; level: LogLevel; message: string; metadata: Record<string, unknown>; } /** * Log a message with specified level and optional metadata * @param level Log level (info, error, debug, warn) * @param message Log message * @param metadata Additional metadata to include with the log */ export async function logMessage( level: LogLevel, message: string, metadata: Record<string, unknown> = {}, ): Promise<void> { const logEntry: LogEntry = { timestamp: new Date().toISOString(), level, message, metadata, }; // Output to console with appropriate formatting const formattedMessage = formatLogMessage(logEntry); // Use different console methods based on log level switch (level) { case "error": console.error(formattedMessage); break; case "warn": console.warn(formattedMessage); break; case "debug": console.debug(formattedMessage); break; case "info": default: console.log(formattedMessage); } // Save log to vector store for later search and analysis try { // Use the internal implementation which can be mocked in tests await _vectorStoreLogImpl(logEntry); } catch (error) { // Don't let vector store errors affect the application // Properly handle the unknown error type const errorMessage = error instanceof Error ? error.message : String(error); console.error(`Failed to store log in vector store: ${errorMessage}`); } } /** * Format a log entry for console output * @param entry Log entry to format * @returns Formatted log message */ function formatLogMessage(entry: LogEntry): string { const { timestamp, level, message, metadata } = entry; const metadataStr = Object.keys(metadata).length > 0 ? `\n ${JSON.stringify(metadata, null, 2)}` : ""; return `[${timestamp}] [${level.toUpperCase()}] ${message}${metadataStr}`; } /** * Convenience method for info logs * @param message Log message * @param metadata Additional metadata */ export async function logInfo( message: string, metadata: Record<string, unknown> = {}, ): Promise<void> { return logMessage("info", message, metadata); } /** * Convenience method for error logs * @param message Log message * @param metadata Additional metadata */ export async function logError( message: string, metadata: Record<string, unknown> = {}, ): Promise<void> { return logMessage("error", message, metadata); } /** * Convenience method for debug logs * @param message Log message * @param metadata Additional metadata */ export async function logDebug( message: string, metadata: Record<string, unknown> = {}, ): Promise<void> { return logMessage("debug", message, metadata); } /** * Convenience method for warning logs * @param message Log message * @param metadata Additional metadata */ export async function logWarn( message: string, metadata: Record<string, unknown> = {}, ): Promise<void> { return logMessage("warn", message, metadata); }