export declare const ANALYTICS_SCHEMA_VERSION: 1; export declare const ANALYTICS_SCHEMA_V1 = "\nCREATE TABLE IF NOT EXISTS analytics_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL) STRICT;\nCREATE TABLE IF NOT EXISTS analytics_events (\n event_id TEXT PRIMARY KEY,\n occurred_at TEXT NOT NULL,\n event_type TEXT NOT NULL,\n payload_json TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS analytics_events_time_idx ON analytics_events(occurred_at,event_type);\nCREATE TABLE IF NOT EXISTS analytics_recommendations (\n recommendation_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n status TEXT NOT NULL,\n payload_json TEXT NOT NULL\n) STRICT;\nCREATE TABLE IF NOT EXISTS analytics_analyst_results (\n analysis_id TEXT PRIMARY KEY,\n recommendation_id TEXT NOT NULL,\n analyzed_at TEXT NOT NULL,\n route_id TEXT NOT NULL,\n input_fingerprint TEXT NOT NULL,\n payload_json TEXT NOT NULL\n) STRICT;\n"; export declare const AnalyticsSchemaV1 = "\nCREATE TABLE IF NOT EXISTS analytics_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL) STRICT;\nCREATE TABLE IF NOT EXISTS analytics_events (\n event_id TEXT PRIMARY KEY,\n occurred_at TEXT NOT NULL,\n event_type TEXT NOT NULL,\n payload_json TEXT NOT NULL\n) STRICT;\nCREATE INDEX IF NOT EXISTS analytics_events_time_idx ON analytics_events(occurred_at,event_type);\nCREATE TABLE IF NOT EXISTS analytics_recommendations (\n recommendation_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n status TEXT NOT NULL,\n payload_json TEXT NOT NULL\n) STRICT;\nCREATE TABLE IF NOT EXISTS analytics_analyst_results (\n analysis_id TEXT PRIMARY KEY,\n recommendation_id TEXT NOT NULL,\n analyzed_at TEXT NOT NULL,\n route_id TEXT NOT NULL,\n input_fingerprint TEXT NOT NULL,\n payload_json TEXT NOT NULL\n) STRICT;\n"; export type AnalyticsClassification = "observed" | "provider_reported" | "pi_runtime_reported" | "configured" | "estimated" | "unavailable" | "unknown"; export type AnalyticsEventType = "run" | "attempt" | "fallback" | "quality" | "route" | "config" | "routing" | "recommendation" | "custom"; export interface AnalyticsTokenUsage { readonly inputTokens?: number; readonly outputTokens?: number; readonly cacheReadTokens?: number; readonly cacheWriteTokens?: number; readonly reasoningTokens?: number; readonly totalTokens?: number; readonly provenance?: AnalyticsClassification; } export interface AnalyticsCost { readonly amountMicros?: number; readonly currency?: string; readonly provenance: AnalyticsClassification; readonly formulaVersion?: string; readonly kind?: "actual" | "equivalent" | "avoided"; readonly billingMode?: "metered_api" | "subscription" | "free" | "unknown"; } export interface AnalyticsRoutingTelemetryV1 { readonly decision: "normal" | "suggest_mission"; readonly localPath: "simple" | "complex" | "ambiguous"; readonly triageCalls: number; readonly fallbackUsed: boolean; readonly reasonCodes: readonly string[]; readonly action?: AnalyticsRoutingAction; readonly failureClass?: string; readonly memory?: AnalyticsRoutingMemoryV1; } export type AnalyticsRoutingAction = "continued" | "run_as_mission" | "run_normally" | "cancelled" | "headless_normal" | "failed" | "auto_mission_explicit" | "auto_mission_learned" | "learned_normal" | "memory_conflict" | "rule_created_explicit" | "rule_created_learned" | "rule_disabled" | "rule_deleted" | "learned_reset" | "full_reset" | "memory_bypassed_complexity"; export interface AnalyticsRoutingMemoryV1 { readonly hit?: boolean; readonly source?: "explicit" | "learned"; readonly action?: "mission" | "normal"; readonly confidence?: number; readonly similarity?: number; readonly conflict?: boolean; } export interface ReferencePricingV1 { readonly currency: string; readonly inputMicrosPerMillion?: number; readonly outputMicrosPerMillion?: number; readonly cacheReadMicrosPerMillion?: number; readonly cacheWriteMicrosPerMillion?: number; readonly label?: string; } export interface ReferenceCostEstimate { readonly equivalent?: AnalyticsCost; readonly avoided?: AnalyticsCost; } export interface AnalyticsEventV1 { readonly eventId: string; readonly occurredAt: string; readonly eventType: AnalyticsEventType; readonly missionId?: string; readonly taskId?: string; readonly runId?: string; readonly attemptId?: string; readonly verificationId?: string; readonly qualityRound?: number; readonly roleId?: string; readonly poolId?: string; readonly routeId?: string; readonly remoteModelId?: string; readonly gatewayId?: string; readonly sourceLabel?: string; readonly resourceClass?: string; readonly resourceId?: string; readonly durationMs?: number; readonly outcome?: string; readonly failureClass?: string; readonly fallbackFromRouteId?: string; readonly fallbackToRouteId?: string; readonly qualityOutcome?: string; readonly firstPass?: boolean; readonly repairRound?: number; readonly tokenUsage?: AnalyticsTokenUsage; readonly cost?: AnalyticsCost; readonly routing?: AnalyticsRoutingTelemetryV1; readonly dimensions?: Readonly>; } export interface AnalyticsRange { readonly from?: string; readonly to?: string; } export interface AnalyticsSummary { readonly from?: string; readonly to?: string; readonly eventCount: number; readonly runs: number; readonly attempts: number; readonly successes: number; readonly failures: number; readonly fallbacks: number; readonly qualityPasses: number; readonly qualityRejects: number; readonly qualityBlocked: number; readonly firstPassSuccesses: number; readonly repairRounds: number; readonly durationMs: number; readonly tokens: { readonly input?: number; readonly output?: number; readonly cacheRead?: number; readonly cacheWrite?: number; readonly reasoning?: number; readonly total?: number; }; readonly unknownTokenAttempts: number; readonly actualCostMicros?: number; readonly estimatedCostMicros?: number; readonly avoidedCostMicros?: number; readonly unknownCostEvents: number; readonly routing?: { readonly decisions: number; readonly normal: number; readonly suggestions: number; readonly triageCalls: number; readonly fallbackCalls: number; readonly failures: number; readonly byReason: Readonly>; readonly memoryHits: number; readonly memoryConflicts: number; readonly autoMissionExplicit: number; readonly autoMissionLearned: number; readonly learnedNormal: number; readonly rulesCreatedExplicit: number; readonly rulesCreatedLearned: number; readonly rulesDisabled: number; readonly rulesDeleted: number; readonly learnedResets: number; readonly fullResets: number; }; readonly byPool: Readonly>; readonly byRoute: Readonly>; readonly byMission?: Readonly>; readonly byRole?: Readonly>; readonly byPoolRoute: Readonly>; readonly fallbackTransitions?: Readonly>; readonly qualityByPool: Readonly>; readonly qualityByRoute: Readonly>; readonly costByCurrency: Readonly>; } export interface AnalyticsRecommendation { readonly recommendationId: string; readonly poolId: string; readonly proposedRouteId: string; readonly baselineRouteId?: string; readonly sampleSize: number; readonly from?: string; readonly to?: string; readonly score: number; readonly formulaVersion: string; readonly evidence: readonly string[]; readonly limitations: readonly string[]; readonly proposedDiff: Readonly>; readonly status: "proposed" | "ignored" | "applied"; } export interface AnalyticsStoreAdapter { readonly enabled: boolean; append(event: AnalyticsEventV1): Promise | boolean; list(range?: AnalyticsRange): readonly AnalyticsEventV1[]; summary(range?: AnalyticsRange): AnalyticsSummary; saveRecommendation(recommendation: AnalyticsRecommendation): Promise | void; listRecommendations(): readonly AnalyticsRecommendation[]; updateRecommendationStatus?(recommendationId: string, status: AnalyticsRecommendation["status"]): boolean; saveAnalystAnalysis?(analysis: import("./analyst.js").AnalystAnalysisRecord): Promise | void; listAnalystAnalyses?(): readonly import("./analyst.js").AnalystAnalysisRecord[]; backup?(destinationPath?: string): Promise; integrityCheck?(): readonly string[]; close?(): void; } export type AnalyticsStore = AnalyticsStoreAdapter; export interface RecommendationPoolManager { getPool(poolId: string): Promise<{ readonly poolId: string; readonly entries: readonly { readonly routeId: string; readonly index: number; }[]; }> | { readonly poolId: string; readonly entries: readonly { readonly routeId: string; readonly index: number; }[]; }; moveRoute(poolId: string, routeId: string, targetIndex: number): Promise | unknown; } export declare class RecommendationApplicationService { private readonly store; private readonly pools; constructor(store: AnalyticsStoreAdapter, pools: RecommendationPoolManager); apply(recommendationId: string): Promise<"applied" | "stale" | "unavailable">; ignore(recommendationId: string): boolean; } export interface AnalyticsSink { record(event: AnalyticsEventV1): Promise | void; } export declare class NoopAnalyticsSink implements AnalyticsSink { record(_event: AnalyticsEventV1): void; } export declare function estimateReferenceCost(usage: AnalyticsTokenUsage, pricing: ReferencePricingV1, billingMode?: "metered_api" | "subscription" | "free" | "unknown"): ReferenceCostEstimate; export declare class SQLiteAnalyticsStore implements AnalyticsStoreAdapter, AnalyticsSink { readonly enabled: boolean; readonly diagnostics: readonly string[]; private db; private readonly databasePath; private closed; constructor(options: { readonly root: string; readonly enabled?: boolean; readonly databasePath?: string; }); record(event: AnalyticsEventV1): void; append(event: AnalyticsEventV1): boolean; list(range?: AnalyticsRange): readonly AnalyticsEventV1[]; summary(range?: AnalyticsRange): AnalyticsSummary; saveRecommendation(recommendation: AnalyticsRecommendation): void; listRecommendations(): readonly AnalyticsRecommendation[]; updateRecommendationStatus(recommendationId: string, status: AnalyticsRecommendation["status"]): boolean; saveAnalystAnalysis(analysis: import("./analyst.js").AnalystAnalysisRecord): void; listAnalystAnalyses(): readonly import("./analyst.js").AnalystAnalysisRecord[]; integrityCheck(): readonly string[]; backup(destinationPath?: string): Promise; static restore(options: { readonly root: string; readonly enabled?: boolean; readonly databasePath?: string; }, backupPath: string): Promise; close(): void; } export declare const backupAnalyticsStore: (store: SQLiteAnalyticsStore, destinationPath?: string) => Promise; export declare const restoreAnalyticsStore: (options: { readonly root: string; readonly enabled?: boolean; readonly databasePath?: string; }, backupPath: string) => Promise; export declare class PersistentAnalyticsSink implements AnalyticsSink { private readonly store; constructor(store: AnalyticsStoreAdapter); record(event: AnalyticsEventV1): void; } export declare class AnalyticsQueryService { private readonly store; constructor(store: AnalyticsStoreAdapter); overview(range?: AnalyticsRange): AnalyticsSummary; events(range?: AnalyticsRange): readonly AnalyticsEventV1[]; recommendations(): readonly AnalyticsRecommendation[]; routePerformance(range?: AnalyticsRange): AnalyticsSummary["byRoute"]; poolPerformance(range?: AnalyticsRange): AnalyticsSummary["byPool"]; missionPerformance(range?: AnalyticsRange): AnalyticsSummary["byMission"]; tokenSummary(range?: AnalyticsRange): AnalyticsSummary["tokens"]; costSummary(range?: AnalyticsRange): { readonly actualCostMicros?: number; readonly estimatedCostMicros?: number; readonly avoidedCostMicros?: number; readonly unknownCostEvents: number; readonly costByCurrency: AnalyticsSummary["costByCurrency"]; }; qualitySummary(range?: AnalyticsRange): Pick; fallbackSummary(range?: AnalyticsRange): { readonly fallbacks: number; readonly fallbackTransitions?: AnalyticsSummary["fallbackTransitions"]; }; routingSummary(range?: AnalyticsRange): AnalyticsSummary["routing"]; } export declare class ScoreEngine { static score(summary: AnalyticsSummary, poolId: string): { readonly poolId: string; readonly qualityScore?: number; readonly valueScore?: number; readonly sampleSize: number; readonly state: "ready" | "insufficient-data"; readonly components: readonly { readonly name: string; readonly rawValue?: number; readonly weight: number; readonly contribution?: number; readonly provenance: AnalyticsClassification; }[]; readonly explanation: readonly string[]; }; } export declare class RecommendationEngine { private readonly minimumSamples; constructor(minimumSamples?: number); generate(summary: AnalyticsSummary, poolId: string, options?: { readonly currentOrder?: readonly string[]; readonly range?: AnalyticsRange; }): AnalyticsRecommendation | undefined; } export declare const summarize: (events: readonly AnalyticsEventV1[], range?: AnalyticsRange) => AnalyticsSummary; export { AnalyticsQueryService as AnalyticsService }; export * from "./analyst.js";