/**
 * Session budget tracking logic.
 *
 * Tracks one explicit cumulative budget for a prompt run. The contract is:
 * - budget activation is explicit
 * - cumulative spent tokens are tracked across the run
 * - runtime annotations are appended onto real tool results
 * - the budget does not drive continuation or stopping behavior
 *
 * Separate hard execution limits are only used for CLI/sub-agent bounds.
 */
export interface ExecutionBudgetLimits {
    maxTokens: number;
    maxTurns: number;
    maxToolUses: number;
}
export type BudgetContinuationEvent = {
    type: 'hard_limit_reached';
    reason: string;
};
export type BudgetContinuationEventListener = (event: BudgetContinuationEvent) => void;
export interface BudgetStatusDetails {
    spentTokens: number;
    allottedTokens: number;
    remainingTokens: number;
    overBudget: boolean;
}
export interface BudgetAnnotation {
    text: string;
    details: BudgetStatusDetails;
}
export declare class SessionBudgetContinuation {
    private _listener;
    private _activeBudgetTokens;
    private _cumulativeTurns;
    private _cumulativeToolUses;
    private _cumulativeTokens;
    private _hardLimitReached;
    private _hardLimitReason;
    get activeBudgetTokens(): number;
    get hasActiveBudget(): boolean;
    get cumulativeTurns(): number;
    get cumulativeToolUses(): number;
    get cumulativeTokens(): number;
    get hardLimitReached(): boolean;
    get hardLimitReason(): string | undefined;
    onEvent(listener: BudgetContinuationEventListener): void;
    private _emit;
    beginPromptRun(budgetTokens?: number): void;
    reset(): void;
    resetAll(): void;
    accumulateTokens(totalTokens: number): void;
    accumulateTurn(): void;
    accumulateToolUse(): void;
    deductExternalTokens(count: number): void;
    buildTurnAnnotation(): BudgetAnnotation | null;
    /**
     * Check whether any explicit hard execution limit has been reached.
     *
     * These are only for bounded execution contexts such as sub-agents.
     * They are intentionally disabled while an explicit budget-tracking run is active.
     */
    checkHardLimits(limits: ExecutionBudgetLimits): boolean;
}
//# sourceMappingURL=session-budget-continuation.d.ts.map