/** * v6.5.6: context-watchdog 持久化层 * * 一张表(schema migration v6 → v7): * - ctx_usage: 会话级 token 累加状态。session_key 主键(跨重启不丢)。 * * 设计约束: * - 启动期不全量加载,按 getOrCreate 按需 lazy hydrate * - 节流 flush:dirty 标记 + 每 10s 批量写,避免每个 llm_output 都 IO * - LRU eviction 不删 sqlite row(保留作历史画像,跟 peak_percent 为 P2-12 铺路) * - 写失败一律静默(不能影响 LLM 主流程) */ import type { Database } from "better-sqlite3"; export declare function migrateV6ToV7(db: Database): void; /** * v6.6.0: 给从 v6.5.6 升级来的用户补加 estimated_cost_usd 列 * (初次装 v6.6.0 的用户 CREATE TABLE 已含此列;本函数只对存在 ctx_usage 但缺该列的库 ALTER) */ export declare function migrateV7ToV8(db: Database): void; export interface CtxUsageRow { session_key: string; agent_id: string; total_tokens: number; last_model: string | null; last_model_ctx_max: number; original_model: string | null; last_warned_threshold: number; peak_percent: number; /** v6.6.0:会话累计估算成本(USD),按 model.costInPerM/costOutPerM 在 llm_output 时累加 */ estimated_cost_usd: number; last_updated_at: number; created_at: number; } export declare function loadCtxUsage(db: Database, sessionKey: string): CtxUsageRow | null; export declare function saveCtxUsage(db: Database, row: CtxUsageRow): void; /** 批量持久化(dirty session 一次性写盘)*/ export declare function batchSaveCtxUsage(db: Database, rows: CtxUsageRow[]): void; /** v6.5.6: 清理 N 天前没活动的 session(默认 30 天)*/ export declare function purgeOldCtxUsage(db: Database, retentionDays?: number): { deleted: number; }; /** 取 agent 历史峰值画像(为 P2-12 用,本期暴露给 enhance_ctx_status 工具)*/ export declare function getAgentCtxProfile(db: Database, agentId: string): { sessions: number; avgPeak: number; maxPeak: number; totalCostUSD: number; }; /** v6.6.0: 月度成本估算(按 agentId 或全部)— 不强制预算,仅观察 */ export declare function getMonthlyCostEstimate(db: Database, agentId?: string): { sessions: number; totalCostUSD: number; };