export interface SessionUsageAmounts {
    readonly costUsd?: number;
    readonly inputTokens: number;
    readonly outputTokens: number;
}
export interface SessionRuntimeUsageLimits {
    readonly costUsd?: number;
    readonly inputTokens?: number;
    readonly outputTokens?: number;
}
export type SessionUsageLimitViolation = {
    readonly kind: "input";
    readonly limit: number;
    readonly usedTokens: number;
} | {
    readonly kind: "output";
    readonly limit: number;
    readonly usedTokens: number;
} | {
    readonly kind: "token-cost";
    readonly limitUsd: number;
    readonly usedCostUsd: number;
};
/** Resolves per-axis lifetime ceilings, preferring a previously granted ceiling. */
export declare function resolveRuntimeUsageLimits(input: {
    readonly configured: SessionRuntimeUsageLimits;
    readonly stored?: SessionRuntimeUsageLimits;
}): SessionRuntimeUsageLimits;
/** Grants one full configured window from the current lifetime usage. */
export declare function grantRuntimeUsageLimits(input: {
    readonly configured: SessionRuntimeUsageLimits;
    readonly usage: SessionUsageAmounts;
}): SessionRuntimeUsageLimits;
/** Returns the unspent quota for each capped axis. */
export declare function remainingRuntimeUsageQuota(input: {
    readonly runtime: SessionRuntimeUsageLimits;
    readonly usage: SessionUsageAmounts;
}): {
    readonly costUsd: number | false;
    readonly inputTokens: number | false;
    readonly outputTokens: number | false;
};
/** Returns the first exhausted axis: input tokens, output tokens, then token cost. */
export declare function findRuntimeUsageLimitViolation(input: {
    readonly configured: SessionRuntimeUsageLimits;
    readonly runtime: SessionRuntimeUsageLimits;
    readonly usage: SessionUsageAmounts;
}): SessionUsageLimitViolation | null;
