import { type FileResourceRef, type LatencyMode, type ReasoningEffort } from "@opengeni/sdk"; import type { SessionRealtimeModel } from "@opengeni/sdk/realtime"; import { type ClientOverride } from "../session-context.js"; import { type ComposerState, type InitialComposerDraft } from "./use-composer.js"; /** Browser choices, not server-owned agent configuration or authority. */ export type NewConversationCreateOptions = { resources?: FileResourceRef[] | undefined; model?: string | undefined; reasoningEffort?: ReasoningEffort | undefined; latencyMode?: LatencyMode | undefined; /** Creates an empty session; no synthetic first user message. */ startMode?: "realtime" | undefined; }; export type CreatedConversation = { sessionId: string; /** The accepted first message; empty for voice-first creation. */ initialMessage: string; /** When the person sent it (ISO 8601); pass both as the conversation's `pendingPrompt`. */ sentAt: string; /** Newer unsent content, or the whole untouched draft for voice-first creation. */ draft: InitialComposerDraft; realtimeModel?: SessionRealtimeModel | undefined; }; export type UseNewConversationOptions = ClientOverride & { createSession?: ((initialMessage: string, idempotencyKey: string, options: NewConversationCreateOptions) => Promise) | undefined; onCreated?: ((created: CreatedConversation) => void) | undefined; /** A host may disable creation while its own required state is loading. */ enabled?: boolean | undefined; attachments?: boolean | undefined; modelPicker?: boolean | undefined; realtimeVoice?: boolean | undefined; /** Changes reset this new-chat draft; use for host record/project scope. */ scopeKey?: string | undefined; }; export type NewConversationController = ReturnType; /** Stock new-chat state shared by OpenGeniChat and custom host layouts. */ export declare function useNewConversation(options?: UseNewConversationOptions): { client: import("../index.js").SessionClientLike; workspaceId: string; config: import("./use-client-config-flags.js").ClientConfigFlags; files: import("./use-file-attachments.js").UseFileAttachmentsResult; uploadsEnabled: boolean; available: boolean; showModelPicker: boolean; catalog: import("./use-available-models.js").UseWorkspaceModelCatalogResult; composer: ComposerState; realtimeVoiceEnabled: boolean; error: { cause: unknown; } | null; finishingUploads: boolean; pending: { idempotencyKey: string; realtimeModel: SessionRealtimeModel | undefined; } | null; retry: () => Promise; startRealtime: (model: SessionRealtimeModel) => Promise; };