import { Badge } from "@executor-js/react/components/badge"; import { CardStack, CardStackContent, CardStackEntry, CardStackEntryActions, CardStackEntryContent, CardStackEntryDescription, CardStackEntryField, CardStackEntryMedia, CardStackEntryTitle, } from "@executor-js/react/components/card-stack"; import { FieldError } from "@executor-js/react/components/field"; import { Input } from "@executor-js/react/components/input"; import { Textarea } from "@executor-js/react/components/textarea"; import { Skeleton } from "@executor-js/react/components/skeleton"; import { IntegrationFavicon } from "@executor-js/react/components/integration-favicon"; import { IOSSpinner } from "@executor-js/react/components/spinner"; import { Button } from "@executor-js/react/components/button"; import { IntegrationIdentityFieldRows, type IntegrationIdentity, } from "@executor-js/react/plugins/integration-identity"; export type McpRemoteIntegrationPreview = { readonly name: string; readonly serverName: string | null; readonly connected: boolean; readonly requiresAuthentication: boolean; readonly requiresOAuth: boolean; readonly toolCount: number | null; }; export function McpRemoteIntegrationFields(props: { readonly url: string; readonly onUrlChange: (url: string) => void; readonly identity: IntegrationIdentity; /** The integration's agent-visible description (prefilled from the server's * `instructions` when the probe connected). */ readonly description?: string; readonly onDescriptionChange?: (value: string) => void; readonly preview: McpRemoteIntegrationPreview | null; readonly probing?: boolean; readonly error?: string | null; readonly onRetry?: () => void; readonly namespaceReadOnly?: boolean; readonly urlDisabled?: boolean; }) { const previewDescription = props.preview ? props.preview.connected ? props.preview.toolCount === null ? null : `${props.preview.toolCount} tool${props.preview.toolCount !== 1 ? "s" : ""} available` : props.preview.requiresOAuth ? "OAuth required to discover tools" : props.preview.requiresAuthentication ? "Authentication required to discover tools" : "Ready to add" : null; if (props.preview) { return ( {props.preview.serverName ?? props.preview.name} {previewDescription ? ( {previewDescription} ) : null} {props.preview.connected ? ( Connected ) : props.preview.requiresOAuth ? ( OAuth required ) : ( Auth required )} {props.onDescriptionChange && (