import type { Message } from "@opencode-ai/sdk"; export type TokenUsage = { readonly cacheRead: number; readonly cacheWrite: number; readonly input: number; readonly output: number; readonly reasoning: number; readonly total: number; }; type ModelLimit = { readonly context: number; readonly source: "experimental.chat.system.transform"; }; type ModelWithContextLimit = { readonly limit?: { readonly context?: unknown; }; }; type TokenMessageEntry = { readonly messageID: string; readonly modelID: string; readonly providerID: string; readonly tokens: TokenUsage; readonly updatedAt: string; }; export type TokenUsageEvidence = { readonly aggregate: TokenUsage; readonly createdAt: string; readonly messages: readonly TokenMessageEntry[]; readonly modelID: string; readonly modelLimit: number | null; readonly modelLimitSource: ModelLimit["source"] | null; readonly modelLimitUnavailableReason: string | null; readonly privacyClass: "metadata-safe"; readonly providerID: string; readonly ratio: number | null; readonly schemaVersion: "token-usage.1"; readonly sessionID: string; readonly source: "opencode-plugin-event:message.updated"; readonly updatedAt: string; }; export type TokenTelemetryRecordResult = { readonly kind: "ignored"; readonly reason: string; } | { readonly kind: "written"; readonly path: string; readonly payload: TokenUsageEvidence; }; type TokenTelemetryRecorderOptions = { readonly evidenceDir?: string; }; export declare function safeSessionKey(sessionID: string): string; export declare class TokenTelemetryRecorder { private readonly modelLimits; private readonly evidenceDir; constructor(projectDir: string, options?: TokenTelemetryRecorderOptions); rememberModelLimit(sessionID: string | undefined, model: ModelWithContextLimit): void; recordMessage(message: Message, now?: Date): TokenTelemetryRecordResult; } export {};