export interface OpenConversationOptions { /** Text to preload into the conversation's composer. */ prompt?: string; /** * Grounding the AGENT needs and the person does not — the app id behind a * remix, the slot a view lives in. It rides the message the composer sends * (so the model reads it) and appears nowhere a person looks: not the * textarea, not the transcript bubble, not "edit last message". * * spec §16 law 3, LEAK 4's follow-up: the remix prefill used to read * "Update my remix (app app_…): " — an id typed at a person — and * removing it took the agent's grounding with it. This is the other half. */ context?: string; /** Open the overlay SCOPED to one app: it is featured on the workspace stage, * so the view being talked about is the view on screen. The pinned app's ✦ * "Edit in chat" is the caller; a docked overlay has no stage and ignores * it. */ appId?: string; /** Send the prompt immediately (default: leave it in the composer). */ send?: boolean; /** Start a fresh conversation instead of resuming the current one. */ newConversation?: boolean; /** Close the overlay when it is already open instead of no-opping — what a * keyboard shortcut wants (a chord toggles, everything else opens). */ toggle?: boolean; /** Close the overlay (a no-op when it is closed) without opening anything — * for a host command menu, so its own navigation never lands behind the * open modal. */ close?: boolean; } type OverlayOpener = (options?: OpenConversationOptions) => void; /** Register a mounted overlay's opener; returns an unsubscribe. */ export declare function registerOverlayOpener(open: OverlayOpener): () => void; /** Open the most-recently-mounted overlay, optionally preloading a prompt. * Returns `false` when no overlay is mounted so callers can fall back. */ export declare function openVendoConversation(options?: OpenConversationOptions): boolean; interface Prefill { prompt: string; send: boolean; /** {@link OpenConversationOptions.context} — never rendered. */ context?: string; } /** Stamped by VendoOverlay around its thread so the composer registers its * prefill consumer under that overlay's scope. Null outside an overlay * (embedded threads/pages) — those never receive overlay-directed prompts. */ export declare const PrefillScopeContext: import("react").Context; /** A composer subscribes on mount. A prompt parked for its scope (or for any * consumer, when scope-less) lands immediately. */ export declare function registerPrefillConsumer(consume: (prefill: Prefill) => void, scope?: symbol | null): () => void; /** Hand a prompt to the target composer, or park it for the one about to * mount. `scope` restricts delivery to one overlay's composer; `defer` skips * live delivery entirely — the newConversation path, where the currently * mounted composer is about to be replaced and must not drain the prompt. */ export declare function deliverPrefill(prefill: Prefill, options?: { scope?: symbol | null; defer?: boolean; }): void; export {};