import type { Database } from "bun:sqlite"; import type { JsonObject } from "../types/workspace.js"; export type ProjectBudgetScopeType = "project" | "run"; export type ProjectBudgetWindow = "daily" | "monthly" | "lifetime"; export type ProjectBudgetMode = "hard" | "soft"; export interface ProjectBudget { id: string; scope_type: ProjectBudgetScopeType; scope_id: string; window: ProjectBudgetWindow; mode: ProjectBudgetMode; max_usd: number | null; max_input_tokens: number | null; max_output_tokens: number | null; max_total_tokens: number | null; warning_threshold: number | null; reset_at: string | null; metadata: JsonObject; created_at: string; updated_at: string; } export interface CreateProjectBudgetInput { id?: string; scope_type: ProjectBudgetScopeType; scope_id: string; window?: ProjectBudgetWindow; mode?: ProjectBudgetMode; max_usd?: number; max_input_tokens?: number; max_output_tokens?: number; max_total_tokens?: number; warning_threshold?: number; metadata?: JsonObject; } export interface ProjectSpendInput { workspace_id?: string; run_id?: string; provider?: string; model?: string; usd?: number; cost_unknown?: boolean; input_tokens?: number; output_tokens?: number; total_tokens?: number; metadata?: JsonObject; } export interface ProjectBudgetSpend { id: string; workspace_id: string | null; run_id: string | null; provider: string | null; model: string | null; usd: number; input_tokens: number; output_tokens: number; total_tokens: number; metadata: JsonObject; created_at: string; } export interface ProjectBudgetTotals { usd: number; input_tokens: number; output_tokens: number; total_tokens: number; unknown_cost_events: number; } export interface ProjectBudgetStatus { budget: ProjectBudget; spent: ProjectBudgetTotals; remaining: { usd?: number; input_tokens?: number; output_tokens?: number; total_tokens?: number; }; window_start: string | null; exhausted: boolean; exceeded: boolean; warnings: string[]; } export interface ProjectBudgetContext { workspace_id?: string; run_id?: string; budget_id?: string; } export declare class BudgetExceededError extends Error { readonly status = "budget_exceeded"; readonly statuses: ProjectBudgetStatus[]; constructor(statuses: ProjectBudgetStatus[]); } export declare function createProjectBudget(input: CreateProjectBudgetInput, db?: Database): ProjectBudget; export declare function getProjectBudget(id: string, db?: Database): ProjectBudget | null; export declare function listProjectBudgets(filter?: ProjectBudgetContext, db?: Database): ProjectBudget[]; export declare function resetProjectBudget(id: string, db?: Database): ProjectBudget; export declare function recordProjectSpend(input: ProjectSpendInput, db?: Database): ProjectBudgetSpend; export declare function getProjectBudgetStatuses(context?: ProjectBudgetContext, db?: Database): ProjectBudgetStatus[]; export declare function assertProjectBudgets(context?: ProjectBudgetContext, db?: Database): ProjectBudgetStatus[]; export declare function assertProjectBudgetsAfterSpend(context?: ProjectBudgetContext, db?: Database): ProjectBudgetStatus[]; export interface ProjectUsage { input_tokens: number; output_tokens: number; total_tokens: number; } export declare function normalizeProjectUsage(raw: unknown): ProjectUsage; export declare function openRouterCostFromMetadata(providerMetadata: unknown): number | undefined; export declare function modelPricing(model: string): { inputUsdPerMillionTokens: number; outputUsdPerMillionTokens: number; } | undefined; export declare function estimateProjectCostUsd(usage: ProjectUsage, model: string, providerMetadata?: unknown): number | undefined; //# sourceMappingURL=budget.d.ts.map