/** * im_transcripts — IM audit / chat_history keyword search (ADR 0009 D4). */ import type { ImTranscriptRecord, ImTranscriptWriteInput } from './agent-db-models.js'; export interface ImTranscriptQuery { platform: string; endpointId: string; sceneId: string; } export interface ImTranscriptSearchHit { time: number; body: string; senderName?: string; direction: ImTranscriptRecord['direction']; } export interface ImTranscriptSearchResult { messages: ImTranscriptSearchHit[]; } export interface ImTranscriptStoreConfig { searchMaxAgeMs?: number; searchLimit?: number; } /** DB / 内存实现的统一契约 */ export interface ImTranscriptStore { record(input: ImTranscriptWriteInput): Promise; search(query: ImTranscriptQuery, keyword: string, limit?: number): Promise; listRecent(query: ImTranscriptQuery, limit?: number): Promise; } /** DB / 内存实现的统一契约 */ export interface ImTranscriptStore { record(input: ImTranscriptWriteInput): Promise; search(query: ImTranscriptQuery, keyword: string, limit?: number): Promise; listRecent(query: ImTranscriptQuery, limit?: number): Promise; } type WhereResult = PromiseLike | { orderBy(field: string, dir: 'ASC' | 'DESC'): { limit(n: number): PromiseLike; }; }; interface DbModel { select(...fields: string[]): { where(condition: Record): WhereResult; }; create(data: Record): Promise; } export declare class DatabaseImTranscriptStore implements ImTranscriptStore { private readonly model; private readonly config; constructor(model: DbModel, config?: ImTranscriptStoreConfig); record(input: ImTranscriptWriteInput): Promise; /** Keyword search on body only (Grill #1 / #17). */ search(query: ImTranscriptQuery, keyword: string, limit?: number): Promise; listRecent(query: ImTranscriptQuery, limit?: number): Promise; } export declare class MemoryImTranscriptStore implements ImTranscriptStore { private rows; private seq; private readonly searchMaxAgeMs; private readonly searchLimit; constructor(config?: ImTranscriptStoreConfig); record(input: ImTranscriptWriteInput): Promise; getAll(): ImTranscriptRecord[]; search(query: ImTranscriptQuery, keyword: string, limit?: number): Promise; listRecent(query: ImTranscriptQuery, limit?: number): Promise; } export {}; //# sourceMappingURL=im-transcript-store.d.ts.map