/** * v5.8.0: hook-profiler 数据存储 * * 两张表(schema migration v5 → v6): * - prep_stage_metrics: 端到端 turn 准备阶段耗时(来自 gateway.err.log * [trace:embedded-run] prep stages 行解析)。每行一次 turn。 * - hook_profile: 单 hook handler 调用记录(来自 wrap + log-timeout/log-error 解析)。 * source='wrap' 是 enhance 自家 hook 精确测时;'log-timeout'/'log-error' 是 * 其它 plugin 通过日志间接抓到的异常事件。 * * 设计约束: * - 不写其它 plugin 成功 handler 的耗时(openclaw 不暴露这个事件,无从下手) * - 不替用户改 openclaw.json(红线 #5"诊断不修复") * - 写入失败一律静默(profiler 不能影响主流程) */ import type { Database } from "better-sqlite3"; export declare function migrateV5ToV6(db: Database): void; export interface PrepStageRow { ts: number; run_id: string | null; session_id: string | null; total_ms: number; workspace_sandbox_ms: number; skills_ms: number; core_plugin_tools_ms: number; bootstrap_context_ms: number; bundle_tools_ms: number; system_prompt_ms: number; session_resource_loader_ms: number; agent_session_ms: number; stream_setup_ms: number; raw_line: string; } export declare function insertPrepStage(db: Database, row: PrepStageRow): void; export interface HookProfileRow { ts: number; source: "wrap" | "log-timeout" | "log-error"; hook_event: string; plugin_id: string; module: string | null; duration_ms: number | null; status: "ok" | "timeout" | "error"; err_msg: string | null; } export declare function insertHookProfile(db: Database, row: HookProfileRow): void; export declare function purgeOldHookProfiles(db: Database, retentionDays?: number): { deleted: number; }; export interface PrepStageStats { count: number; total_ms: { p50: number; p95: number; max: number; }; core_plugin_tools_ms: { p50: number; p95: number; }; system_prompt_ms: { p50: number; p95: number; }; bundle_tools_ms: { p50: number; p95: number; }; stream_setup_ms: { p50: number; p95: number; }; session_resource_loader_ms: { p50: number; p95: number; }; bootstrap_context_ms: { p50: number; p95: number; }; } export declare function getPrepStageStats(db: Database, sinceMs: number): PrepStageStats; export interface HookProfileStats { hook_event: string; plugin_id: string; module: string | null; count: number; ok_count: number; p50: number; p95: number; timeout_count: number; error_count: number; } export declare function getHookProfileStats(db: Database, hookEvent: string, sinceMs: number): HookProfileStats[]; export declare function listKnownHookEvents(db: Database, sinceMs: number): string[];