import { type Engine, type RoleId, type TrackedRolePolicyGate } from "../domain/role-policy.js"; import { type RuntimeComposition } from "./composition.js"; import { type RuntimeEventBus } from "../events/bus.js"; import { type SessionRegistry } from "../sessions/registry.js"; declare const QUOTA_STORE: unique symbol; declare const FRESH_QUOTA_GATE: unique symbol; declare const EXHAUSTED_QUOTA_GATE: unique symbol; declare const NATIVE_HOOK_QUOTA_WRITER: unique symbol; export type QuotaStatus = "available" | "exhausted" | "unknown"; export type QuotaCertification = "live" | "non-certifying"; export interface QuotaObservation { readonly schema_version: 1; readonly observation_id: string; readonly engine: Engine; readonly role_id: RoleId; readonly session_id: string; readonly status: QuotaStatus; readonly certification: QuotaCertification; readonly observed_at: string; readonly valid_until: string; readonly resume_at: string | null; readonly source_kind: "native-hook" | "manual-probe"; readonly source_sha256: string; readonly source_event_id: string | null; readonly source_session_version: number | null; readonly policy_version: 2; readonly policy_digest: string; } export interface QuotaObservationReference { readonly observation_id: string; readonly sha256: string; readonly file_name: string; } export interface RecordQuotaObservationInput { readonly engine: Engine; readonly roleId: string; readonly sessionId: string; readonly status: QuotaStatus; readonly certification: QuotaCertification; readonly observedAt: string; readonly validUntil: string; readonly resumeAt: string | null; readonly sourceKind: "native-hook" | "manual-probe"; readonly sourceSha256: string; readonly sourceEventId: string | null; readonly sourceSessionVersion: number | null; } export interface FreshQuotaGate { readonly [FRESH_QUOTA_GATE]: true; readonly role_id: RoleId; readonly engine: Engine; readonly session_id: string; readonly checked_at: string; readonly observed_at: string; readonly source_session_version: number; readonly observation: QuotaObservationReference; readonly policy_version: 2; readonly policy_digest: string; } export interface ExhaustedQuotaGate { readonly [EXHAUSTED_QUOTA_GATE]: true; readonly role_id: RoleId; readonly engine: Engine; readonly session_id: string; readonly checked_at: string; readonly observed_at: string; readonly source_session_version: number; readonly resume_at: string; readonly observation: QuotaObservationReference; readonly policy_version: 2; readonly policy_digest: string; } export interface QuotaObservationStore { readonly [QUOTA_STORE]: true; record(input: RecordQuotaObservationInput): Readonly<{ status: "created" | "replayed"; observation: QuotaObservation; ref: QuotaObservationReference; }>; read(reference: QuotaObservationReference): QuotaObservation; list(roleId?: string): readonly QuotaObservation[]; freshGate(input: { reference: QuotaObservationReference; roleId: string; engine: Engine; sessionId: string; sessionVersion: number; checkedAt: string; }): FreshQuotaGate; exhaustedGate(input: { reference: QuotaObservationReference; roleId: string; engine: Engine; sessionId: string; sessionVersion: number; checkedAt: string; }): ExhaustedQuotaGate; latestFreshGate(input: { roleId: string; engine: Engine; sessionId: string; sessionVersion: number; checkedAt: string; }): FreshQuotaGate | undefined; close(): void; } export interface NativeHookQuotaWriter { readonly [NATIVE_HOOK_QUOTA_WRITER]: true; record(input: { eventId: string; processedAt: string; }): ReturnType; } export declare function createQuotaObservationStore(options: { observationsRoot: string; packageRoot: string; policyRoot: string; policyGate: TrackedRolePolicyGate; composition?: RuntimeComposition; }): QuotaObservationStore; export declare function assertQuotaObservationStore(value: unknown): asserts value is QuotaObservationStore; export declare function createNativeHookQuotaWriter(options: { store: QuotaObservationStore; bus: RuntimeEventBus; sessions: SessionRegistry; }): NativeHookQuotaWriter; export declare function assertNativeHookQuotaWriter(value: unknown): asserts value is NativeHookQuotaWriter; export declare function assertFreshQuotaGate(value: unknown): asserts value is FreshQuotaGate; export declare function assertExhaustedQuotaGate(value: unknown): asserts value is ExhaustedQuotaGate; export {};