import type { FirstPartyMcpToolName } from "@opengeni/contracts"; import { type ReactElement, type ReactNode } from "react"; import { type SessionToolSelection } from "./pickers.js"; import { type McpServerOption } from "../lib/session-tools.js"; import type { SessionConnectorsMenuProps } from "./session-connectors-menu-body.js"; import { type ComposerAgentCapabilities } from "./composer-capabilities-menu-body.js"; export type Panel = "root" | "capabilities" | "tools" | "repos" | "voice" | "secrets" | "settings" | "runs-on" | "visibility" | "usage-limit"; /** A per-session setting shown as a "+" row with its current value, opening a drill-in. */ export type ComposerSettingPanel = { /** The current value, right-aligned on the row. */ summary: string; disabled?: boolean | undefined; /** * Panel element; receives `leading` (back control) and `presentation` * (inside the dropdown, or in a dialog) via clone. */ panel: ReactElement<{ leading?: ReactNode | undefined; presentation?: "menu" | "dialog" | undefined; }>; }; /** * Shared composer actions at every width; model and voice stay in the bar. */ export type ComposerPlusProps = { connectorActions?: Pick | undefined; onOpenConnectors?: (() => void) | undefined; /** Centered composers need viewport-sized panels rather than trigger-side space. */ expandedPanelPresentation?: "menu" | "dialog" | undefined; /** Anchor below a centered new-chat composer and above a docked composer. */ menuSide?: "top" | "bottom" | undefined; draftChatSettings?: { workspaceId: string; scope: "workspace" | "personal"; value: import("@opengeni/sdk").AgentLearningOverrides; onChange: (value: import("@opengeni/sdk").AgentLearningOverrides) => void; } | undefined; /** * An existing chat: "Chat settings" opens the chat's Agent tab, the one * place for its identity, capabilities and Agent learning. */ chatSettings?: { workspaceId: string; sessionId: string; scope: "workspace" | "personal"; canEdit: boolean; onOpen: () => void; } | undefined; /** * Agent settings are on for this server: "+" shows Capabilities (with the * connectors nested under Workspace connectors) instead of Connectors. */ agentCapabilities?: ComposerAgentCapabilities | undefined; disabled?: boolean | undefined; fileUploadsEnabled: boolean; servers: McpServerOption[]; firstPartyTools: ReadonlyArray<{ id: FirstPartyMcpToolName; name: string; }>; selection: SessionToolSelection; toolsDisabled?: boolean | undefined; toolsSaving?: boolean | undefined; connectorCustomizing?: boolean | undefined; onConnectorCustomizingChange?: ((customizing: boolean) => void) | undefined; onToolSelectionChange: (selection: SessionToolSelection) => void; /** When set, Repositories appears under + and opens a drill-in panel. */ repositories?: { selectedCount: number; disabled?: boolean | undefined; /** Panel element; receives `leading` (back control) via clone. */ panel: ReactElement<{ leading?: ReactNode | undefined; }>; } | undefined; /** Which vaults agents in this chat may use, and the task's own items. */ secrets?: ComposerSettingPanel | undefined; /** Where the chat runs: managed sandbox and environment, or a connected machine. */ runsOn?: ComposerSettingPanel | undefined; /** Who can see the chat, when the organization offers a choice. */ visibility?: ComposerSettingPanel | undefined; /** A new chat's usage limit, when the server offers limits. */ usageLimit?: ComposerSettingPanel | undefined; /** When set, Voice model appears under + (bar keeps a start-only control). */ voiceModel?: { selectedLabel: string; disabled?: boolean | undefined; /** Panel element; receives `leading` (back control) via clone. */ panel: ReactElement<{ leading?: ReactNode | undefined; }>; } | undefined; }; export declare function ComposerMobilePlusPanel(props: ComposerPlusProps & { triggerRef: { current: HTMLButtonElement | null; }; panel: Panel; setPanel: (panel: Panel) => void; setOpen: (open: boolean) => void; dialogOpen: boolean; dialogFocusOwnerRef: { current: boolean; }; }): import("react").JSX.Element; /** The dialog's accessible name for each drill-in (the root is never a dialog). */ export declare const PANEL_DIALOG_TITLE: Record;