import type { OfflineContextPreview, OfflineContextRangeOptions } from './offline-context-contract.js'; /** Chat separates verified points with newlines. Split only for presentation; * the frozen body and preview reference remain unchanged for sharing. */ export declare function offlineContextSummaryLines(summary: string): string[]; /** Browser view contract; Chat remains the timeline owner. */ export interface OfflineContextEvidence { id: string; startAtMillis: number; endAtMillis: number; speaker: string; text: string; soundSource: 'in_person' | 'playback' | 'unknown'; /** Host-issued references, never raw object-store URLs or inferred identities. */ transcriptRef?: string; playbackRef?: string; } export interface OfflineContextMessage { messageRef: string; label: string; excerpt: string; occurredAtMillis: number; } export interface OfflineContextEntry { id: string; revision: string; conversationKey: string; conversationName: string; conversationKind: 'private_chat' | 'group_chat'; startAtMillis: number; endAtMillis: number; title: string; summary: string[]; participants: string[]; reason: string; state: 'suggested' | 'linked' | 'dismissed'; visibility: 'private' | 'shared'; hasSharedSnapshot?: boolean; sourceState: 'available' | 'changed' | 'unavailable'; messages: OfflineContextMessage[]; evidence: OfflineContextEvidence[]; selectedEvidenceIds: string[]; } export type OfflineContextChange = { kind: 'confirm'; } | { kind: 'dismiss'; reason: 'unrelated' | 'playback' | 'remove'; } | { kind: 'restore'; } | { kind: 'withdraw'; } | { kind: 'range'; evidenceIds: string[]; startOffset?: number; endOffset?: number; } | { kind: 'relink'; messageRef: string; } | { kind: 'share'; includeTranscript: boolean; previewRef?: string; }; export interface OfflineContextAction { requestId: string; entryId: string; expectedRevision: string; conversationKey: string; change: OfflineContextChange; } /** An ambiguous write cannot be treated as failure or automatically replayed. */ export type OfflineContextReceipt = { status: 'applied'; } | { status: 'unknown'; } | { status: 'not_applied'; }; export interface OfflineContextActions { rangeOptions?(entry: OfflineContextEntry, signal: AbortSignal): Promise; preview?(entry: OfflineContextEntry, includeTranscript: boolean, signal: AbortSignal): Promise; change(action: OfflineContextAction): Promise; reconcile(action: OfflineContextAction): Promise<'applied' | 'not_applied' | 'pending'>; openMessage(messageRef: string): void | Promise; openTranscript(transcriptRef: string): void | Promise; play(playbackRef: string): void | Promise; } export declare function selectedOfflineEvidence(entry: OfflineContextEntry): OfflineContextEvidence[]; /** Select a continuous speech range; UI never guesses a new source interval. */ export declare function offlineEvidenceRange(entry: OfflineContextEntry, first: string, last: string): string[]; export declare function canShareOfflineContext(entry: OfflineContextEntry): boolean; /** Provisional candidates stay outside the confirmed timeline. Identities are scoped by the caller. */ export declare function confirmedOfflineContexts(entries: readonly OfflineContextEntry[], conversationKey: string): OfflineContextEntry[]; //# sourceMappingURL=offline-context.d.ts.map