import type { AgentExecutionCounter, TokenUsage } from './agent'; import type { AgentDbMessage } from './message'; import type { BuiltTelemetry } from '../telemetry'; export declare const OBSERVATION_LOG_MARKERS: readonly ['critical', 'important', 'info', 'completion']; export type ObservationLogMarker = (typeof OBSERVATION_LOG_MARKERS)[number]; export declare const OBSERVATION_LOG_STATUSES: readonly ['active', 'superseded', 'dropped']; export type ObservationLogStatus = (typeof OBSERVATION_LOG_STATUSES)[number]; export type ObservationLogTaskKind = 'observer' | 'reflector'; export interface ObservationLogScope { observationScopeId: string; } export interface ObservationLogTaskLockHandle extends ObservationLogScope { taskKind: ObservationLogTaskKind; holderId: string; heldUntil: Date; } export interface ObservationLogEntry extends ObservationLogScope { id: string; marker: ObservationLogMarker; text: string; parentId: string | null; tokenCount: number; status: ObservationLogStatus; supersededBy: string | null; createdAt: Date; } export interface NewObservationLogEntry extends ObservationLogScope { marker: ObservationLogMarker; text: string; parentId?: string | null; tokenCount?: number; createdAt?: Date; } export interface ObservationLogReadOptions extends ObservationLogScope { status?: ObservationLogStatus; parentId?: string | null; limit?: number; order?: 'asc' | 'desc'; } export interface ObservationLogMerge { supersedes: string[]; marker: ObservationLogMarker; text: string; parentId?: string | null; tokenCount?: number; createdAt?: Date; } export interface ObservationLogReflection { drop: string[]; merge: ObservationLogMerge[]; } export interface ObservationLogReflectionResult { droppedIds: string[]; supersededIds: string[]; inserted: ObservationLogEntry[]; } export declare function getStoredObservationTokenCount(entry: Pick): number; export interface ObservationLogObserverInput { observationScopeId: string; now: Date; deltaMessages: AgentDbMessage[]; transcript: string; transcriptTokenCount: number; observationLogTail: ObservationLogEntry[]; renderedObservationLogTail: string | null; executionCounter?: AgentExecutionCounter; telemetry?: BuiltTelemetry; } export type ObservationLogObserveFn = (input: ObservationLogObserverInput) => Promise; export interface ObservationLogReflectorInput { observationScopeId: string; now: Date; activeObservationLog: ObservationLogEntry[]; renderedObservationLog: string; tokenCount: number; tokenBudget: number; executionCounter?: AgentExecutionCounter; telemetry?: BuiltTelemetry; } export type ObservationLogReflectFn = (input: ObservationLogReflectorInput) => Promise; export interface MemoryTaskUsageReport { task: ObservationLogTaskKind; model: string; usage: TokenUsage; reportId: string; } export interface BuiltObservationLogStore { appendObservationLogEntries(rows: NewObservationLogEntry[]): Promise; getActiveObservationLog(scope: ObservationLogScope & { limit?: number; order?: 'asc' | 'desc'; }): Promise; getObservationLog(opts: ObservationLogReadOptions): Promise; dropObservationLogEntries(ids: string[]): Promise; supersedeObservationLogEntries(ids: string[], supersededBy: string): Promise; applyObservationLogReflection(scope: ObservationLogScope, reflection: ObservationLogReflection): Promise; } export interface BuiltObservationLogTaskLockStore { acquireObservationLogTaskLock(observationScopeId: string, taskKind: ObservationLogTaskKind, opts: { ttlMs: number; holderId: string; }): Promise; releaseObservationLogTaskLock(handle: ObservationLogTaskLockHandle): Promise; }