@toolprint/hypertool-mcp
Version:
HyperTool MCP proxy server for routing requests between clients and multiple underlying MCP servers
177 lines • 6.67 kB
TypeScript
/**
* Multi-layer validation for persona configurations
*
* This module implements comprehensive validation for persona configurations including
* schema validation, business rules, tool resolution, and MCP config validation.
* The PersonaValidator class orchestrates multiple validation layers and provides
* detailed error reporting with actionable suggestions.
*
* @fileoverview Persona configuration validation system
*/
import type { IToolDiscoveryEngine } from "../discovery/types.js";
import { type PersonaConfig, type ValidationResult, type PersonaAssets } from "./types.js";
/**
* Validation context for providing additional information during validation
*/
export interface ValidationContext {
/** Path to the persona folder or configuration file */
personaPath: string;
/** Expected persona name from folder structure */
expectedPersonaName?: string;
/** Whether to perform tool resolution validation */
checkToolAvailability?: boolean;
/** Whether to validate MCP config if present */
validateMcpConfig?: boolean;
/** Tool discovery engine for tool resolution validation */
toolDiscoveryEngine?: IToolDiscoveryEngine;
/** Additional persona assets for comprehensive validation */
assets?: PersonaAssets;
}
/**
* Validation options for customizing validation behavior
*/
export interface ValidationOptions {
/** Whether to include warnings in the result (default: true) */
includeWarnings?: boolean;
/** Whether to stop validation on first error (default: false) */
stopOnFirstError?: boolean;
/** Whether to perform tool availability checks (default: true) */
checkToolAvailability?: boolean;
/** Whether to validate MCP config files (default: true) */
validateMcpConfig?: boolean;
/** Custom validation functions for extensibility */
customValidators?: Array<(config: PersonaConfig, context: ValidationContext) => ValidationResult>;
}
/**
* Comprehensive persona configuration validator
*
* Implements a multi-layer validation system that covers:
* 1. YAML syntax and schema validation
* 2. Business rule validation
* 3. Tool resolution validation
* 4. MCP config validation
*/
export declare class PersonaValidator {
private toolDiscoveryEngine?;
constructor(toolDiscoveryEngine?: IToolDiscoveryEngine);
/**
* Validate a persona configuration from parsed data
*
* @param config - Parsed persona configuration
* @param context - Validation context
* @param options - Validation options
* @returns Comprehensive validation result
*/
validatePersonaConfig(config: PersonaConfig, context: ValidationContext, options?: ValidationOptions): Promise<ValidationResult>;
/**
* Validate a persona configuration from a file path
*
* @param filePath - Path to persona.yaml/yml file
* @param options - Validation options
* @returns Comprehensive validation result
*/
validatePersonaFile(filePath: string, options?: ValidationOptions): Promise<ValidationResult>;
/**
* Validate a persona directory (containing persona.yaml/yml)
*
* @param directoryPath - Path to persona directory
* @param options - Validation options
* @returns Comprehensive validation result
*/
validatePersonaDirectory(directoryPath: string, options?: ValidationOptions): Promise<ValidationResult>;
/**
* Validate business rules for persona configuration
*
* @param config - Persona configuration
* @param context - Validation context
* @returns Business rule validation result
*/
private validateBusinessRules;
/**
* Validate tool resolution against discovery engine
*
* @param config - Persona configuration
* @param toolDiscoveryEngine - Tool discovery engine
* @returns Tool resolution validation result
*/
private validateToolResolution;
/**
* Validate MCP configuration file
*
* @param mcpConfigPath - Path to mcp.json file
* @returns MCP config validation result
*/
private validateMcpConfig;
/**
* Find persona configuration file in a directory
*
* @param directoryPath - Directory to search
* @returns Path to config file or null if not found
*/
private findPersonaConfigFile;
/**
* Find MCP config file in a directory
*
* @param directoryPath - Directory to search
* @returns Path to mcp.json file or null if not found
*/
private findMcpConfigFile;
/**
* Check if two names are similar enough to be confusing
*
* @param name1 - First name
* @param name2 - Second name
* @returns True if names are similar
*/
private areNamesSimilar;
/**
* Merge validation results together
*
* @param target - Target validation result to merge into
* @param source - Source validation result to merge from
* @param includeWarnings - Whether to include warnings
*/
private mergeValidationResults;
/**
* Set the tool discovery engine for this validator
*
* @param toolDiscoveryEngine - Tool discovery engine instance
*/
setToolDiscoveryEngine(toolDiscoveryEngine: IToolDiscoveryEngine): void;
/**
* Get validation statistics
*
* @returns Validation statistics
*/
getValidationStats(): {
hasToolDiscoveryEngine: boolean;
supportedFileTypes: readonly string[];
validationLayers: string[];
};
}
/**
* Create a default persona validator instance
*
* @param toolDiscoveryEngine - Optional tool discovery engine
* @returns PersonaValidator instance
*/
export declare function createPersonaValidator(toolDiscoveryEngine?: IToolDiscoveryEngine): PersonaValidator;
/**
* Quick validation function for simple use cases
*
* @param filePath - Path to persona file or directory
* @param toolDiscoveryEngine - Optional tool discovery engine
* @param options - Validation options
* @returns Validation result
*/
export declare function validatePersona(filePath: string, toolDiscoveryEngine?: IToolDiscoveryEngine, options?: ValidationOptions): Promise<ValidationResult>;
/**
* Batch validation for multiple personas
*
* @param paths - Array of file or directory paths
* @param toolDiscoveryEngine - Optional tool discovery engine
* @param options - Validation options
* @returns Map of path to validation result
*/
export declare function validateMultiplePersonas(paths: string[], toolDiscoveryEngine?: IToolDiscoveryEngine, options?: ValidationOptions): Promise<Map<string, ValidationResult>>;
//# sourceMappingURL=validator.d.ts.map