UNPKG

@juspay/neurolink

Version:

Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio

279 lines (278 loc) 6.1 kB
/** * Elicitation Protocol Types * * Type definitions for the MCP elicitation protocol that enables * tools to request interactive user input during execution. * * @module mcp/elicitation/types * @since 8.39.0 */ import type { JsonValue, JsonObject } from "./common.js"; /** * Elicitation request types */ export type ElicitationType = "confirmation" | "text" | "select" | "multiselect" | "form" | "file" | "secret"; /** * Base elicitation request */ export type ElicitationRequest = { /** * Unique request identifier */ id: string; /** * Type of elicitation */ type: ElicitationType; /** * Message to display to user */ message: string; /** * Tool requesting the elicitation */ toolName: string; /** * Server ID of the requesting tool */ serverId?: string; /** * Request timeout in milliseconds */ timeout?: number; /** * Whether the request can be skipped */ optional?: boolean; /** * Default value if skipped or timed out */ defaultValue?: JsonValue; /** * Additional context for the request */ context?: JsonObject; }; /** * Confirmation elicitation */ export type ConfirmationElicitation = ElicitationRequest & { type: "confirmation"; /** * Confirm button label */ confirmLabel?: string; /** * Cancel button label */ cancelLabel?: string; }; /** * Text input elicitation */ export type TextElicitation = ElicitationRequest & { type: "text"; /** * Input placeholder */ placeholder?: string; /** * Minimum length */ minLength?: number; /** * Maximum length */ maxLength?: number; /** * Validation regex pattern */ pattern?: string; /** * Whether to allow multiline input */ multiline?: boolean; }; /** * Selection option */ export type SelectOption = { value: string; label: string; description?: string; disabled?: boolean; }; /** * Select elicitation */ export type SelectElicitation = ElicitationRequest & { type: "select"; options: SelectOption[]; }; /** * Multi-select elicitation */ export type MultiSelectElicitation = ElicitationRequest & { type: "multiselect"; options: SelectOption[]; minSelections?: number; maxSelections?: number; }; /** * Form field definition */ export type FormField = { name: string; label: string; type: "text" | "number" | "boolean" | "select" | "date" | "password"; required?: boolean; defaultValue?: JsonValue; options?: SelectOption[]; validation?: { min?: number; max?: number; pattern?: string; message?: string; }; placeholder?: string; description?: string; }; /** * Form elicitation */ export type FormElicitation = ElicitationRequest & { type: "form"; fields: FormField[]; submitLabel?: string; }; /** * File elicitation */ export type FileElicitation = ElicitationRequest & { type: "file"; /** * Accepted file types (MIME types or extensions) */ accept?: string[]; /** * Allow multiple files */ multiple?: boolean; /** * Maximum file size in bytes */ maxSize?: number; }; /** * Secret elicitation */ export type SecretElicitation = ElicitationRequest & { type: "secret"; /** * Hint about what secret is needed */ hint?: string; }; /** * Union of all elicitation types */ export type Elicitation = ConfirmationElicitation | TextElicitation | SelectElicitation | MultiSelectElicitation | FormElicitation | FileElicitation | SecretElicitation; /** * Elicitation response */ export type ElicitationResponse = { /** * Request ID this responds to */ requestId: string; /** * Whether the user provided a response */ responded: boolean; /** * The user's response value */ value?: JsonValue; /** * Whether the request was cancelled */ cancelled?: boolean; /** * Whether the request timed out */ timedOut?: boolean; /** * Error message if response failed */ error?: string; /** * Response timestamp */ timestamp: number; }; /** * Elicitation handler function type */ export type ElicitationHandler = (request: Elicitation) => Promise<ElicitationResponse>; /** * Elicitation manager configuration */ export type ElicitationManagerConfig = { /** * Default timeout for elicitation requests */ defaultTimeout?: number; /** * Whether to allow elicitation (can be disabled for automated environments) */ enabled?: boolean; /** * Handler for processing elicitation requests */ handler?: ElicitationHandler; /** * Fallback behavior when no handler is available */ fallbackBehavior?: "timeout" | "default" | "error"; }; /** * Elicitation context passed to tools */ export type ElicitationContext = { /** * Request user confirmation */ confirm: (message: string, options?: { confirmLabel?: string; cancelLabel?: string; }) => Promise<boolean>; /** * Request text input */ getText: (message: string, options?: { placeholder?: string; defaultValue?: string; }) => Promise<string | undefined>; /** * Request selection */ select: <T extends string>(message: string, options: Array<{ value: T; label: string; }>) => Promise<T | undefined>; /** * Request multiple selections */ multiSelect: <T extends string>(message: string, options: Array<{ value: T; label: string; }>) => Promise<T[] | undefined>; /** * Request form input */ form: <T extends Record<string, unknown>>(message: string, fields: FormField[]) => Promise<T | undefined>; /** * Request raw elicitation */ request: (elicitation: Omit<Elicitation, "id">) => Promise<ElicitationResponse>; };