/** * Narrative beats — the unit of narrative memory. * * A `NarrativeBeat` is a self-contained summary extracted from one or * more messages during a turn. Instead of persisting raw conversation * forever, a narrative pipeline compresses each turn into beats and * recalls them by composing beats back into a coherent story. * * Core properties: * - **Summary**: a single sentence describing what happened. * - **Importance**: 0..1 score the picker uses to prefer salient * beats when the context-token budget is tight. * - **Refs**: ids of the source messages the beat was extracted * from. Lets consumers walk backwards from a recalled beat to * the raw source — the explainability story. * - **Category**: optional free-form tag (e.g. `"identity"`, * `"preference"`, `"fact"`). Extractors / consumers pick their * own taxonomy. * * Beats are persisted via the ordinary `MemoryStore` interface — * `MemoryEntry` slots in unchanged. No storage changes * needed to support narrative memory. */ /** Importance score in the half-open range [0, 1]. */ export type BeatImportance = number; export interface NarrativeBeat { /** One-sentence summary of what happened in this beat. */ readonly summary: string; /** * Importance score in [0, 1]. Picker stages use this to prefer * salient beats when the budget is tight. Default 0.5 (neutral). * Values outside [0, 1] are clamped by `asImportance()`. */ readonly importance: BeatImportance; /** * Ids of the source messages this beat was extracted from. Consumers * answer "why does the agent remember X?" by walking refs backwards * to the raw message text. May be empty for synthesized beats * (e.g., beats produced from prior beats during compaction). */ readonly refs: readonly string[]; /** * Optional free-form category — `"identity"`, `"preference"`, * `"task-status"`, etc. Extractors / consumers pick their own * taxonomy. Useful for filtering recalls by type. */ readonly category?: string; } /** * Clamp a value to the valid [0, 1] importance range. Non-finite * inputs collapse to 0.5 (neutral) so extractors that produce NaN * / ±Infinity don't poison the picker's comparisons. */ export declare function asImportance(value: unknown): BeatImportance; /** * Duck-typed guard — true iff `value` has the shape of a * `NarrativeBeat`. Used by pipelines that handle mixed-payload stores * (raw messages + beats) to route entries correctly. */ export declare function isNarrativeBeat(value: unknown): value is NarrativeBeat; //# sourceMappingURL=types.d.ts.map