import type { ResidentAgendaState } from './agenda.js'; import { type ResidentHistoryReadBudget } from './history-disk.js'; /** @experimental Host-bound historical scope; the upper revision never advances implicitly. */ export interface ResidentHistoryScope { readonly tenantId: string; readonly agentKey: string; readonly pursuitId: string; readonly throughRevision: number; } /** @experimental Revision plus part identifies retained text within one pursuit. */ export interface ResidentHistoryAddress { readonly revision: number; readonly part: number; } /** @experimental Summary or accepted wake input from a settled historical step. */ export interface ResidentHistoryMatch extends ResidentHistoryAddress { readonly step: number; readonly claimId: string; readonly kind: 'wait' | 'complete' | 'blocked'; readonly source: 'summary' | 'wake'; readonly excerpt: string; readonly matchingParts: readonly number[]; } /** @experimental Empty query browses recent steps; cursor is the next inclusive revision. */ export interface ResidentHistorySearchOptions { /** Optional per-call ceiling, 1 byte–8 MiB. Defaults to 8 MiB. */ readonly maxReadBytes?: number; readonly query?: string; readonly cursor?: number; readonly limit?: number; } /** @experimental Counts describe this page, not the whole history. */ export interface ResidentHistorySearchResult { readonly matches: readonly ResidentHistoryMatch[]; readonly nextCursor: number | null; readonly scannedRevisions: number; readonly scannedBytes: number; readonly unavailableRevisions: readonly number[]; readonly incomplete: boolean; } /** @experimental Use the returned nextOffset to continue exact Unicode-safe text. */ export interface ResidentHistoryReadOptions extends ResidentHistoryAddress { readonly offset?: number; /** Optional per-call ceiling, 1 byte–8 MiB. Defaults to 8 MiB. */ readonly maxReadBytes?: number; } /** @experimental A recorded claim remains historical evidence, not proof of current validity. */ export interface ResidentHistoryText extends ResidentHistoryAddress { readonly step: number; readonly claimId: string; readonly kind: 'wait' | 'complete' | 'blocked'; readonly source: 'summary' | 'wake'; readonly receivedAt?: number; readonly text: string; readonly offset: number; readonly totalChars: number; readonly nextOffset: number | null; } /** @experimental Null with unavailable revisions means unreadable evidence, not proven absence. */ export interface ResidentHistoryReadResult { readonly entry: ResidentHistoryText | null; readonly scannedRevisions: number; readonly scannedBytes: number; readonly unavailableRevisions: readonly number[]; } /** @experimental A backend must enforce its bound scope and bounded reads. */ export interface ResidentHistorySource { readonly scope: ResidentHistoryScope; search(options?: ResidentHistorySearchOptions, signal?: AbortSignal): Promise; read(options: ResidentHistoryReadOptions, signal?: AbortSignal): Promise; } type LoadRevision = (revision: number, budget: ResidentHistoryReadBudget) => Promise; /** Internal disk adapter. Other backends may implement ResidentHistorySource directly. */ export declare function createResidentHistorySource(scopeInput: ResidentHistoryScope, identity: { identity: string; objective: string; }, load: LoadRevision): ResidentHistorySource; export {}; //# sourceMappingURL=history.d.ts.map