@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
137 lines (122 loc) • 3.54 kB
text/typescript
/**
* 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);
}