/** * 统一日志实现(控制台 + JSONL 落盘)。 * * 关键点(中文) * - 支持按项目根目录动态绑定日志目录。 * - 结构化字段写入 JSONL,便于后续检索与审计。 */ import type { JsonObject } from "../../types/common/Json.js"; import type { FileSystem } from "../../types/workspace/FileSystem.js"; type LogDetails = { [key: string]: JsonObject[keyof JsonObject] | undefined; }; /** * Unified runtime logger for Downcity. * * Design goals: * - Provide a single logger interface usable by both: * - system/runtime components (server, scheduler, tool executor, etc.) * - agent/LLM execution (LLM request/response logging expects `logger.log(...)`) * - Persist logs as JSONL to `.downcity/logs/.jsonl` (one line per entry). * - Keep console output human-friendly, but make disk logs machine-friendly. * * Notes: * - `log(level, ...)` is async because it may write to disk. * - Convenience methods (`info/warn/...`) are sync and fire-and-forget. * - A small in-memory ring buffer is kept for debugging, but persistence is append-only. */ export interface LogEntry { id: string; timestamp: string; type: "info" | "warn" | "error" | "debug" | "action"; message: string; details?: JsonObject; duration?: number; /** Back-compat: kept for older code that expects a `level` field. */ level?: string; } /** * Logger:项目级日志器。 * * 关键职责(中文) * - 控制台可读输出(开发期) * - JSONL 持久化输出(排障 / 审计) */ export declare class Logger { private logs; private logLevel; private writeChain; private readonly maxInMemoryEntries; private workspace_files; constructor(logLevel?: string); /** * 绑定当前 logger 实例的 project_root。 * * 关键点(中文) * - 每个 Agent / workspace 持有独立 Logger,绑定只影响当前实例。 * - 落盘目录必须在实例初始化后明确指定。 * - 未绑定 project_root 时,只打印到 console,不写入 `.downcity/logs/*`。 */ bind_project_root(project_root: string): void; /** 绑定现有 Workspace FileSystem,避免创建第二套文件入口。 */ bind_workspace(files: FileSystem): void; /** * Generic async logger used by agent / LLM logging. * Accepts `info|warn|error|debug|action` (case-insensitive). */ log(level: string, message: string, details?: LogDetails): Promise; info(message: string, details?: LogDetails): void; warn(message: string, details?: LogDetails): void; error(message: string, details?: LogDetails): void; debug(message: string, details?: LogDetails): void; action(message: string, details?: LogDetails): void; private normalizeType; /** * 写入策略(中文) * - 先写内存与控制台,再串行追加到 JSONL,避免并发写乱序。 */ private emit; private printLog; /** * 落盘算法(中文) * - 日志按自然日分片:`.downcity/logs/YYYY-MM-DD.jsonl`。 * - 每条日志一行 JSON,便于 grep / 流式消费。 */ private saveToFile; private generate_id; save_all_logs(): Promise; get_logs(): LogEntry[]; get_logs_by_type(type: LogEntry["type"]): LogEntry[]; get_recent_logs(count?: number): LogEntry[]; clear_logs(): void; } /** * 创建独立 logger 实例。 * * 说明(中文) * - 每次调用都返回独立实例,避免不同 Agent / workspace 互相覆盖落盘目录。 * - 提供 project_root 时立即绑定日志目录;未提供时仅输出到 console。 */ export declare function get_logger(project_root?: string, log_level?: string): Logger; export {}; //# sourceMappingURL=Logger.d.ts.map