/**
 * MCP resource snapshots and subscription tracking — local-only, deterministic URIs.
 */
export declare const RESOURCE_SNAPSHOT_VERSION = "todos.resource-snapshot.v1";
export declare const DEFAULT_STALE_MS: number;
export declare const RESOURCE_URIS: readonly ["todos://tasks", "todos://projects", "todos://plans", "todos://agents", "todos://verification"];
export type ResourceUri = (typeof RESOURCE_URIS)[number] | `todos://task/${string}`;
export interface ResourceSnapshot {
    schema_version: typeof RESOURCE_SNAPSHOT_VERSION;
    uri: ResourceUri;
    generated_at: string;
    stale_after: string;
    content: unknown;
    content_hash: string;
}
export interface ResourceSubscription {
    uri: ResourceUri;
    agent_id?: string;
    subscribed_at: string;
    last_notified_at?: string;
}
export declare function buildResourceSnapshot(uri: ResourceUri, staleMs?: number): ResourceSnapshot;
export declare function isSnapshotStale(snapshot: ResourceSnapshot, now?: Date): boolean;
export declare function subscribeResource(uri: ResourceUri, agentId?: string): ResourceSubscription;
export declare function unsubscribeResource(uri: ResourceUri, agentId?: string): boolean;
export declare function listSubscriptions(agentId?: string): ResourceSubscription[];
export declare function getChangedResourcesSince(since: string): {
    uri: ResourceUri;
    changed_count: number;
}[];
export declare function resetSubscriptions(): void;
export declare function resourceDiagnostics(): {
    subscriptions: number;
    uris: readonly string[];
    snapshot_version: string;
};
//# sourceMappingURL=resource-snapshots.d.ts.map