UNPKG

@toolprint/hypertool-mcp

Version:

HyperTool MCP proxy server for routing requests between clients and multiple underlying MCP servers

215 lines • 7.67 kB
/** * Persona Loader Implementation * * This module implements persona loading functionality that parses YAML configs, * loads MCP configurations, and catalogs all assets in persona folders. The loader * orchestrates the parsing, validation, and asset discovery process to create * complete LoadedPersona objects ready for activation. * * @fileoverview Comprehensive persona loading with asset cataloging and validation */ import type { IToolDiscoveryEngine } from "../discovery/types.js"; import { type LoadedPersona, type ValidationResult, type PersonaReference, type PersonaDiscoveryConfig } from "./types.js"; import { PersonaValidator, type ValidationOptions } from "./validator.js"; import { PersonaDiscovery } from "./discovery.js"; /** * Persona loading options */ export interface PersonaLoadOptions { /** Whether to perform full validation during loading */ validateOnLoad?: boolean; /** Whether to load MCP configuration files */ loadMcpConfig?: boolean; /** Whether to catalog all assets in the persona folder */ catalogAssets?: boolean; /** Tool discovery engine for validation */ toolDiscoveryEngine?: IToolDiscoveryEngine; /** Custom validation options */ validationOptions?: ValidationOptions; /** Whether to stop on validation errors */ stopOnValidationError?: boolean; /** Whether to include warnings in validation results */ includeWarnings?: boolean; } /** * Asset cataloging options */ export interface AssetCatalogOptions { /** Maximum directory depth to scan for assets */ maxDepth?: number; /** File extensions to include in asset catalog */ includedExtensions?: string[]; /** File patterns to exclude from asset catalog */ excludePatterns?: string[]; /** Whether to follow symbolic links */ followSymlinks?: boolean; } /** * Persona loading result */ export interface PersonaLoadResult { /** Whether loading was successful */ success: boolean; /** Loaded persona if successful */ persona?: LoadedPersona; /** Loading errors */ errors: string[]; /** Loading warnings */ warnings: string[]; /** Load time in milliseconds */ loadTime: number; } /** * Batch loading result for multiple personas */ export interface BatchLoadResult { /** Successfully loaded personas */ loaded: LoadedPersona[]; /** Failed loading attempts with errors */ failed: Array<{ path: string; errors: string[]; warnings: string[]; }>; /** Total load time in milliseconds */ totalLoadTime: number; /** Load statistics */ stats: { attempted: number; succeeded: number; failed: number; averageLoadTime: number; }; } /** * PersonaLoader class for comprehensive persona loading * * Orchestrates the loading process including YAML parsing, MCP configuration loading, * validation, and asset cataloging. Provides both individual and batch loading * capabilities with comprehensive error handling and performance monitoring. */ export declare class PersonaLoader { private validator; private discovery?; private toolDiscoveryEngine?; constructor(toolDiscoveryEngine?: IToolDiscoveryEngine, discovery?: PersonaDiscovery); /** * Load a persona from a file path * * @param filePath - Path to persona.yaml/yml file or persona directory * @param options - Loading options * @returns Promise resolving to load result */ loadPersona(filePath: string, options?: PersonaLoadOptions): Promise<PersonaLoadResult>; /** * Load a persona from a PersonaReference * * @param reference - Persona reference from discovery * @param options - Loading options * @returns Promise resolving to load result */ loadPersonaFromReference(reference: PersonaReference, options?: PersonaLoadOptions): Promise<PersonaLoadResult>; /** * Load multiple personas from paths * * @param paths - Array of file or directory paths * @param options - Loading options * @returns Promise resolving to batch load result */ loadMultiplePersonas(paths: string[], options?: PersonaLoadOptions): Promise<BatchLoadResult>; /** * Load personas from discovery results * * @param discoveredPersonas - Array of persona references * @param options - Loading options * @returns Promise resolving to batch load result */ loadPersonasFromDiscovery(discoveredPersonas: PersonaReference[], options?: PersonaLoadOptions): Promise<BatchLoadResult>; /** * Discover and load all available personas * * @param discoveryConfig - Discovery configuration * @param loadOptions - Loading options * @returns Promise resolving to batch load result with discovery info */ discoverAndLoadPersonas(discoveryConfig?: PersonaDiscoveryConfig, loadOptions?: PersonaLoadOptions): Promise<BatchLoadResult & { discoveryErrors: string[]; discoveryWarnings: string[]; }>; /** * Validate loaded persona without reloading * * @param persona - Loaded persona to validate * @param options - Validation options * @returns Promise resolving to validation result */ validateLoadedPersona(persona: LoadedPersona, options?: ValidationOptions): Promise<ValidationResult>; /** * Find persona configuration file in directory */ private findPersonaConfigFile; /** * Load MCP configuration from file */ private loadMcpConfigFile; /** * Catalog all assets in persona folder */ private catalogPersonaAssets; /** * Set tool discovery engine for validation */ setToolDiscoveryEngine(engine: IToolDiscoveryEngine): void; /** * Set persona discovery engine */ setDiscoveryEngine(discovery: PersonaDiscovery): void; /** * Get loader statistics */ getLoaderStats(): { hasToolDiscoveryEngine: boolean; hasDiscoveryEngine: boolean; validatorStats: ReturnType<PersonaValidator["getValidationStats"]>; }; } /** * Create a default persona loader instance * * @param toolDiscoveryEngine - Optional tool discovery engine * @param discovery - Optional persona discovery engine * @returns PersonaLoader instance */ export declare function createPersonaLoader(toolDiscoveryEngine?: IToolDiscoveryEngine, discovery?: PersonaDiscovery): PersonaLoader; /** * Quick load function for simple use cases * * @param personaPath - Path to persona file or directory * @param options - Loading options * @returns Promise resolving to load result */ export declare function loadPersona(personaPath: string, options?: PersonaLoadOptions): Promise<PersonaLoadResult>; /** * Batch load function for multiple personas * * @param paths - Array of persona paths * @param options - Loading options * @returns Promise resolving to batch load result */ export declare function loadMultiplePersonas(paths: string[], options?: PersonaLoadOptions): Promise<BatchLoadResult>; /** * Discover and load all available personas * * @param discoveryConfig - Discovery configuration * @param loadOptions - Loading options * @returns Promise resolving to batch load result with discovery info */ export declare function discoverAndLoadAllPersonas(discoveryConfig?: PersonaDiscoveryConfig, loadOptions?: PersonaLoadOptions): Promise<BatchLoadResult & { discoveryErrors: string[]; discoveryWarnings: string[]; }>; /** * Default persona loader instance */ export declare const defaultPersonaLoader: PersonaLoader; //# sourceMappingURL=loader.d.ts.map