import { z } from "zod"; import type { SessionEventSliceOptions, SessionEventSlicePage } from "@opengeni/db/session-event-slices"; export declare const SESSION_EVENT_VIEW_MAX_BYTES: number; declare const selectionSchema: z.ZodObject<{ sessionId: z.ZodString; view: z.ZodEnum<{ conversation: "conversation"; results: "results"; tools: "tools"; }>; includeArguments: z.ZodBoolean; includeOutput: z.ZodBoolean; callId: z.ZodNullable; direction: z.ZodEnum<{ after: "after"; before: "before"; }>; after: z.ZodNumber; before: z.ZodNullable; }, z.core.$strip>; type Selection = z.infer; export type SessionEventViewInput = { sessionId: string; view?: Selection["view"] | undefined; after?: number | undefined; before?: number | undefined; direction?: Selection["direction"] | undefined; limit?: number | undefined; cursor?: string | undefined; callId?: string | undefined; includeArguments?: boolean | undefined; includeOutput?: boolean | undefined; }; type Item = { sequence: number; turnId?: string; role?: string; text?: string; } & Record; type ReadPage = (options: SessionEventSliceOptions) => Promise; /** A cursor is a bounded selector, never authority. The caller reauthorizes every read. */ export declare function resolveSessionEventView(input: SessionEventViewInput): { selection: { sessionId: string; view: "conversation" | "results" | "tools"; includeArguments: boolean; includeOutput: boolean; callId: string | null; direction: "after" | "before"; after: number; before: number | null; }; continuation: { v: 1 | 2; selection: { sessionId: string; view: "conversation" | "results" | "tools"; includeArguments: boolean; includeOutput: boolean; callId: string | null; direction: "after" | "before"; after: number; before: number | null; }; sequence: number | null; offset: number; } | null; }; /** Read-only projection over the existing RLS/audit query. No command observations. */ export declare function readSessionEventView(input: SessionEventViewInput, read: ReadPage): Promise<{ view: "conversation" | "results" | "tools"; direction: "after" | "before"; events: Item[]; nextAfter: number | null; nextBefore: number | null; hasMore: boolean; nextCursor: string | null; sourceExact: boolean; sourceLoss?: { reason: "structured_value_exceeds_budget"; completeTextAvailable: false; message: string; }; maxBytes: number; }>; export {};