import { type SessionCreation, type SessionInputCommand, type SessionMaterializeCommand, type SessionPreparationState } from '@xopcai/gateway-contract'; import type { SessionAgentConfig } from '../../session/config-types.js'; import { insertSessionInput } from './session-input-repository.js'; export declare class SessionCommandError extends Error { readonly code: 'IDEMPOTENCY_CONFLICT' | 'CONVERSATION_EXISTS' | 'SESSION_DELETED' | 'FORBIDDEN' | 'SESSION_CHANGED' | 'CONFIG_CHANGED' | 'NOT_FOUND' | 'BAD_REQUEST' | 'SESSION_BUSY' | 'QUEUE_FULL'; constructor(code: 'IDEMPOTENCY_CONFLICT' | 'CONVERSATION_EXISTS' | 'SESSION_DELETED' | 'FORBIDDEN' | 'SESSION_CHANGED' | 'CONFIG_CHANGED' | 'NOT_FOUND' | 'BAD_REQUEST' | 'SESSION_BUSY' | 'QUEUE_FULL', message: string); } export type SessionInputReceipt = { conversationId: string; clientMessageId: string; principalId: string; requestHash: string; inputId: string | null; transcriptId: string; acceptedAt: number; }; export type SessionPreparation = { conversationId: string; operationId: string; creation: SessionCreation; state: SessionPreparationState; environmentId: string; baseCommit: string | null; revision: number; leaseUntil: number; lastError: string | null; }; export declare function sessionCommandHash(command: SessionInputCommand | SessionMaterializeCommand): string; export declare function isConversationDeleted(conversationId: string): boolean; export declare function getSessionInputReceipt(conversationId: string, clientMessageId: string, principalId: string): SessionInputReceipt | undefined; export declare function matchSessionInputReceipt(conversationId: string, clientMessageId: string, principalId: string, hash: string): SessionInputReceipt | undefined; export declare function getSessionPreparation(conversationId: string): SessionPreparation | undefined; /** Commit the identity, configuration, input and replay receipt together. All preparation happens before entry. */ export declare function acceptSessionCommand(input: { conversationId: string; principalId: string; command: SessionInputCommand | SessionMaterializeCommand; preparedInput?: Omit[0], 'conversationId' | 'id' | 'clientMessageId' | 'expectedTranscriptId'>; config?: SessionAgentConfig; sourceChannel?: 'webchat' | 'tui'; attachProject?: (conversationId: string, projectId: string) => void; }): SessionInputReceipt; export declare function claimSessionPreparation(conversationId: string, now?: number): SessionPreparation | undefined; export declare function finishSessionPreparation(operation: SessionPreparation, error?: string): boolean; export declare function pendingSessionPreparations(): string[]; export declare function retrySessionPreparation(conversationId: string, principalId: string, input: { operationId: string; expectedRevision: number; idempotencyKey: string; }): SessionPreparation;