/** * LSP Custom Request Handlers for VS Code Language Model Tools (PRS-015) * * These handlers respond to custom LSP requests from the VS Code extension * and return serialized model data suitable for Language Model Tools. * * Architecture: * - Extension calls `client.sendRequest('domainlang/validate', params)` * - LSP receives via `connection.onRequest('domainlang/validate', handler)` * - Handler uses SDK `fromServices()` for zero-copy AST access * - Handler returns plain JSON (no circular refs, no class instances) * * @module lsp/tool-handlers */ import type { Connection } from 'vscode-languageserver'; import type { LangiumSharedServices } from 'langium/lsp'; import type { QueryEntityType, QueryFilters } from '../sdk/serializers.js'; /** * Request parameters for domainlang/validate. * No parameters needed - validates entire workspace. */ export interface ValidateParams { /** Optional: filter by file URI */ file?: string; } /** * Response from domainlang/validate. */ export interface ValidateResponse { /** Total number of validation diagnostics */ count: number; /** Validation diagnostics grouped by severity */ diagnostics: { errors: DiagnosticInfo[]; warnings: DiagnosticInfo[]; info: DiagnosticInfo[]; }; } /** * Diagnostic information for validation response. */ export interface DiagnosticInfo { /** File URI */ file: string; /** Line number (1-indexed) */ line: number; /** Column number (1-indexed) */ column: number; /** Diagnostic message */ message: string; /** Severity level */ severity: 'error' | 'warning' | 'info'; /** Optional diagnostic code */ code?: string | number; } /** * Request parameters for domainlang/list. */ export interface ListParams { /** Entity type to query */ type: string; /** Optional filters */ filters?: QueryFilters; } /** * Response from domainlang/list. */ export interface ListResponse { /** Entity type queried */ entityType: QueryEntityType; /** Number of results */ count: number; /** Serialized results */ results: Record[]; /** Error message if the request could not be fulfilled */ error?: string; } /** * Request parameters for domainlang/get. */ export interface GetParams { /** Fully qualified name of element to retrieve */ fqn?: string; /** If true, return model summary instead of single element */ summary?: boolean; } /** * Response from domainlang/get. */ export interface GetResponse { /** Serialized element or model summary */ result: Record | null; } /** * Request parameters for domainlang/explain. */ export interface ExplainParams { /** Fully qualified name of element to explain */ fqn: string; } /** * Response from domainlang/explain. */ export interface ExplainResponse { /** Rich markdown explanation */ explanation: string; } /** * Registers all custom request handlers on the LSP connection. * Call this from main.ts after creating the connection. * * @param connection - LSP connection * @param sharedServices - Langium shared services for workspace access */ export declare function registerToolHandlers(connection: Connection, sharedServices: LangiumSharedServices): void;