import type { Logger } from '../log/logger.js'; /** * 协议类型:与 proxy/translation 的 InboundType 保持一致 */ export type Protocol = 'anthropic' | 'openai' | 'openai-responses'; /** * 写入上下文:每次请求一条记录 */ export interface UsageRecord { /** 上游供应商名(如 'deepseek') */ provider: string; /** 适配器名(直接 /v1/* 请求则为 null) */ adapter: string | null; /** 客户端请求的模型名(代理端 model 字段) */ model: string; /** 上游实际模型 ID(如 'claude-sonnet-4-20250514') */ upstreamModel: string; /** 上游供应商协议 */ protocol: Protocol; /** 来源标识:'proxy' 或 adapterName */ source: string; /** 总输入 token(已归一化,含缓存) */ inputTokens: number; /** 输出 token */ outputTokens: number; /** 缓存命中 token */ cacheRead: number; /** 缓存创建 token */ cacheCreate: number; } /** * 每日聚合行 */ export interface DailyAggregate { date: string; provider: string; adapter: string; model: string; input_tokens: number; output_tokens: number; cache_read_input_tokens: number; cache_creation_input_tokens: number; request_count: number; } /** * API 响应结构(与原 TokenStats 兼容) */ export interface TokenStats { today: { date: string; input_tokens: number; output_tokens: number; cache_read_input_tokens: number; cache_creation_input_tokens: number; request_count: number; }; history: Array<{ date: string; input_tokens: number; output_tokens: number; cache_read_input_tokens: number; cache_creation_input_tokens: number; request_count: number; }>; byProvider: Record; } /** * 折线图数据点 */ export interface TimelinePoint { date: string; input_tokens: number; output_tokens: number; cache_read_input_tokens: number; cache_creation_input_tokens: number; request_count: number; } /** * 按维度分组的桶 */ export interface UsageBucket { key: string; input_tokens: number; output_tokens: number; cache_read_input_tokens: number; cache_creation_input_tokens: number; request_count: number; } /** * SQLite 持久化的 token 用量存储。 * 双写:每次请求写一条事件 + 更新预聚合表。 * "今日"数据缓存在内存以加速 dashboard 查询。 * * 同时支持 Node.js (`node:sqlite`) 和 Bun (`bun:sqlite`) 两种 runtime。 * Bun 用于 `bun build --compile` 打 macOS App 内嵌后端二进制。 */ export declare class UsageStore { private db; private logger?; /** 内存缓存:date -> provider -> aggregate(仅"今日") */ private todayAgg; private today; /** 预编译语句以加速写入 */ private insertEventStmt; private upsertAggStmt; private dbPath; constructor(dbPath: string, logger?: Logger); private getToday; private loadTodayIntoMemory; private adapterModelKey; /** * 记录一次请求的 token 用量。 * 同步写 SQLite + 更新今日内存缓存。 */ record(rec: UsageRecord): void; /** * 兼容旧 TokenTracker.record() 签名。 * 旧接口不知道 adapter/model,直接归入 provider 级。 */ recordLegacy(providerName: string, inputTokens: number, outputTokens: number, cacheRead?: number, cacheCreate?: number): void; /** * 获取 dashboard 兼容结构:today / history / byProvider */ getStats(): TokenStats; /** * 获取每日折线图数据。 * - startDate + endDate 都给:自定义日期范围(YYYY-MM-DD,含两端) * - 否则:按 days(默认 30)回退,向前推 N 天 * 返回从最早到最近的每日数据点,缺失日期补 0。 */ getTimeline(opts?: { startDate?: string; endDate?: string; days?: number; }): TimelinePoint[]; /** * 按维度分桶查询:provider / adapter / provider model / adapter model。 * 两种模型维度都带所属对象前缀,避免同名模型被错误合并。 * - startDate + endDate 都给:自定义日期范围 * - 否则按 range(默认 'today'):today / 7d / 30d / all */ getBreakdown(dimension: 'provider' | 'adapter' | 'model' | 'adapterModel', opts?: { startDate?: string; endDate?: string; range?: 'today' | '7d' | '30d' | 'all'; }): UsageBucket[]; /** * 清理指定天数前的数据。返回清理的 (events, aggregates) 条数。 */ cleanup(beforeDays: number): { events: number; aggregates: number; }; /** * 清空全部用量数据(事件 + 预聚合 + 今日内存缓存)。不可恢复。 */ clearAll(): { events: number; aggregates: number; }; /** * 获取数据库总条目数(用于管理面板展示) */ stats(): { events: number; aggregates: number; sizeBytes: number; }; /** * 关闭数据库。SIGTERM 时调用,确保 WAL flush 到主文件。 */ close(): void; private formatDate; /** 生成 [startDate, endDate](含两端)的 YYYY-MM-DD 列表,按 ASC。 */ private expandDateRange; private offsetDate; } //# sourceMappingURL=usage-store.d.ts.map