/** * OperationSchema - Declarative operation definitions for MCP-AQL * * This module provides schema-driven operation definitions that enable: * 1. Declarative operation configuration (no manual switch statements) * 2. Auto-generated parameter validation * 3. Type-safe dispatch to handler methods * 4. Single source of truth for operation metadata * * ARCHITECTURE: * Operations are defined with: * - endpoint: CRUDE endpoint (CREATE, READ, UPDATE, DELETE, EXECUTE) * - handler: Key in HandlerRegistry * - method: Method name on the handler * - params: Parameter definitions with types and mappings * - description: Human-readable description * * The SchemaDispatcher uses these definitions to automatically route * operations to handler methods without manual dispatch code. * * @see Issue #247 - Schema-driven operation definitions */ import type { CRUDEndpoint } from './OperationRouter.js'; /** * Primitive types supported in parameter schemas */ export type ParamType = 'string' | 'number' | 'boolean' | 'object' | 'array' | 'string[]' | 'string | string[]' | 'unknown'; /** * Parameter definition in operation schema */ export interface ParamDef { /** Parameter type for validation */ type: ParamType; /** Whether the parameter is required (default: false) */ required?: boolean; /** Default value if not provided */ default?: unknown; /** Human-readable description */ description?: string; /** Maps input param name to handler arg name (if different) */ mapTo?: string; /** * Alternative sources to check for this parameter value. * Checked in order before falling back to the primary param name. * * Supports dot notation for nested access: * - 'input.elementType' - checks input.elementType * - 'params.type' - checks params.type (same as just checking the param) * * Use case: elementType can come from input.elementType OR params.type * * @example * type: { type: 'string', sources: ['input.elementType', 'params.type'] } */ sources?: string[]; } /** * Return type definition for introspection * @see Issue #254 - Auto-generate introspection from schema */ export interface ReturnTypeDef { /** Return type name (e.g., 'ElementList', 'SearchResult') */ name: string; /** Type kind for categorization */ kind: 'enum' | 'object' | 'scalar' | 'union'; /** Human-readable description of what is returned */ description: string; } /** * Parameter schema - map of parameter names to definitions */ export type ParamSchema = Record; /** * Handler keys - these map to properties in HandlerRegistry */ export type HandlerKey = 'elementCRUD' | 'memoryManager' | 'agentManager' | 'templateRenderer' | 'elementQueryService' | 'collectionHandler' | 'portfolioHandler' | 'authHandler' | 'configHandler' | 'enhancedIndexHandler' | 'personaHandler' | 'syncHandler' | 'buildInfoService' | 'mcpAqlHandler' | 'cacheMemoryBudget'; /** * Complete operation schema definition */ export interface OperationDef { /** CRUDE endpoint this operation belongs to */ endpoint: CRUDEndpoint; /** Handler key in HandlerRegistry */ handler: HandlerKey; /** Method name to call on the handler */ method: string; /** Parameter definitions */ params?: ParamSchema; /** Human-readable description */ description: string; /** Whether the handler is optional (may not be configured) */ optional?: boolean; /** * Custom argument builder for complex cases: * - 'single': Pass params in schema order as positional args (default) * - 'spread': Pass (query, params) - for search-style operations * - 'named': Pass all params as a single named object * - 'namedWithType': Like 'named' but includes resolved 'type' param * - 'typeWithParams': Pass (type, fullParams) for operations needing type + pagination */ argBuilder?: 'single' | 'spread' | 'named' | 'namedWithType' | 'typeWithParams'; /** * Whether this operation needs access to the full OperationInput. * When true, SchemaDispatcher passes the full input for source resolution. * Required for operations that use param sources like 'input.elementType'. */ needsFullInput?: boolean; /** * Automatic parameter name conversion style. * - 'snakeToCamel': Convert snake_case params to camelCase for handler * * When set, all params are automatically converted before being passed * to the handler. Individual param `mapTo` overrides still take precedence. * * @example * // Input: { dry_run: true, max_results: 10 } * // Handler receives: { dryRun: true, maxResults: 10 } */ paramStyle?: 'snakeToCamel'; /** * Capability category for get_capabilities grouping. * Operations are grouped by user-intent categories in the capabilities map. * Operations without a category appear under "Other". * @see Issue #1760 - get_capabilities operation */ category?: string; /** * Return type information for introspection * @see Issue #254 - Auto-generate introspection from schema */ returns?: ReturnTypeDef; /** * Usage examples for introspection * @see Issue #254 - Auto-generate introspection from schema */ examples?: string[]; /** * Normalizer to use for parameter transformation. * * If specified, the normalizer is called before the handler method, * transforming raw input parameters into the format expected by the handler. * * Normalizers are registered in NormalizerRegistry and looked up by name. * * @see Issue #243 - Schema-driven normalizer architecture * * @example * // Use the search params normalizer * normalizer: 'searchParams' */ normalizer?: string; } /** * Complete operation schema - maps operation names to definitions */ export type OperationSchemaMap = Record; /** * Collection operations schema * * These are the first operations migrated to schema-driven dispatch. * Each operation defines: * - Where it lives (endpoint) * - What handler to use * - What method to call * - What parameters it accepts */ export declare const COLLECTION_OPERATIONS: OperationSchemaMap; export declare const AUTH_OPERATIONS: OperationSchemaMap; export declare const ENHANCED_INDEX_OPERATIONS: OperationSchemaMap; export declare const TEMPLATE_OPERATIONS: OperationSchemaMap; export declare const INTROSPECTION_OPERATIONS: OperationSchemaMap; export declare const PERSONA_OPERATIONS: OperationSchemaMap; export declare const CONFIG_OPERATIONS: OperationSchemaMap; /** * Portfolio operations schema - demonstrates paramStyle conversion pattern. * * PATTERN: Automatic Parameter Style Conversion * External APIs often use snake_case naming, while JavaScript handlers * typically use camelCase. The `paramStyle: 'snakeToCamel'` setting * enables automatic conversion without individual `mapTo` definitions. * * This pattern is important for MCP-AQL adapters wrapping external MCP * servers that follow different naming conventions. * * @example * // Input from MCP client: { dry_run: true, max_results: 10 } * // Handler receives: { dryRun: true, maxResults: 10 } */ export declare const PORTFOLIO_OPERATIONS: OperationSchemaMap; /** * ElementCRUD operations schema - demonstrates input normalization pattern. * * PATTERN: Input Normalization * The 'type' parameter can come from two sources: * 1. input.elementType (top-level in OperationInput) * 2. params.type (inside the params object) * * The schema uses `sources` to define this fallback chain, and * `needsFullInput: true` tells SchemaDispatcher to provide full input access. * * This pattern is important for MCP-AQL adapters where external servers * may accept the same parameter in multiple locations. */ export declare const ELEMENT_CRUD_OPERATIONS: OperationSchemaMap; /** * Memory operations schema — introspection-only. * * These operations are dispatched via MCPAQLHandler.dispatchMemory() which * performs memory instance lookup by name. They cannot be routed through * SchemaDispatcher without extracting that pre-processing logic. * * @see Issue #594 - Document all MCP-AQL operations via schema */ export declare const MEMORY_SCHEMAS: OperationSchemaMap; /** * Execution lifecycle operations schema — introspection-only. * * These operations are dispatched via MCPAQLHandler.dispatchExecute() which * performs agent state management, autonomy evaluation, and resilience checks. * They cannot be routed through SchemaDispatcher without extracting that * complex pre-processing logic. * * @see Issue #594 - Document all MCP-AQL operations via schema */ export declare const EXECUTION_SCHEMAS: OperationSchemaMap; /** * Gatekeeper operations schema — introspection-only. * * These operations are dispatched via MCPAQLHandler.dispatchGatekeeper() which * performs session-level confirmation tracking and danger zone verification. * * @see Issue #594 - Document all MCP-AQL operations via schema */ export declare const GATEKEEPER_SCHEMAS: OperationSchemaMap; /** * Logging operations schema — introspection-only. * * Dispatched via MCPAQLHandler.dispatchLogging() with runtime parameter * validation via validateLogQueryParams(). * * @see Issue #594 - Document all MCP-AQL operations via schema */ export declare const LOGGING_SCHEMAS: OperationSchemaMap; /** * Metrics collection query schema — introspection-only. * * Dispatched via MCPAQLHandler.dispatchMetrics() which routes to * MemoryMetricsSink.query(). Follows the same pattern as query_logs. */ export declare const METRICS_SCHEMAS: OperationSchemaMap; /** * Activation lifecycle operations schema — introspection-only. * * These operations are dispatched via MCPAQLHandler.dispatchActivation() which * routes to ElementCRUDHandler activation strategies. They cannot be routed * through SchemaDispatcher without extracting that strategy-based dispatch logic. * * Issue #598: Activation state is now persisted per-session via ActivationStore. * Set DOLLHOUSE_SESSION_ID env var to isolate activation state between sessions. * * @see Issue #594 - Document all MCP-AQL operations via schema * @see Issue #598 - Per-session activation persistence */ export declare const ACTIVATION_SCHEMAS: OperationSchemaMap; /** * Search operations schema — introspection-only. * * These operations are dispatched via MCPAQLHandler.dispatchSearch() which * routes to ElementQueryService methods. They cannot be routed through * SchemaDispatcher without extracting that pre-processing logic. * * @see Issue #595 - Operation documentation coverage gate */ export declare const SEARCH_SCHEMAS: OperationSchemaMap; /** * Schema-driven operations — used by SchemaDispatcher for dispatch. * * Only operations that can be fully dispatched through SchemaDispatcher * belong here. Operations with complex pre-processing (memory lookup, * agent state management, gatekeeper sessions, log validation) are in * INTROSPECTION_ONLY_SCHEMAS instead. */ export declare const SCHEMA_DRIVEN_OPERATIONS: OperationSchemaMap; /** * Introspection-only schemas — metadata for operations dispatched by * legacy methods (dispatchMemory, dispatchExecute, dispatchGatekeeper, * dispatchLogging). These are NOT used for dispatch routing. * * @see Issue #594 - Document all MCP-AQL operations via schema */ /** * Browser operation schemas * @see Issue #774 - open portfolio browser */ export declare const BROWSER_SCHEMAS: OperationSchemaMap; export declare const INTROSPECTION_ONLY_SCHEMAS: OperationSchemaMap; /** * All operation schemas — union of dispatch-driven and introspection-only. * Used by IntrospectionResolver for complete operation documentation. * * @see Issue #594 - Document all MCP-AQL operations via schema */ export declare const ALL_OPERATION_SCHEMAS: OperationSchemaMap; /** * Check if an operation is schema-driven (used for SchemaDispatcher routing) */ export declare function isSchemaOperation(operation: string): boolean; /** * Get schema definition for a schema-driven operation (dispatch routing) */ export declare function getOperationSchema(operation: string): OperationDef | undefined; /** * Check if any operation schema exists (dispatch-driven or introspection-only) */ export declare function hasOperationSchema(operation: string): boolean; /** * Get schema for any operation (dispatch-driven or introspection-only) */ export declare function getAnyOperationSchema(operation: string): OperationDef | undefined; /** * Parameter info format used by IntrospectionResolver * This interface matches what IntrospectionResolver expects */ export interface ParameterInfo { name: string; type: string; required: boolean; description: string; default?: unknown; } /** * Convert ParamSchema to ParameterInfo array for introspection * * @param schema - The ParamSchema from an operation definition * @returns Array of ParameterInfo for IntrospectionResolver */ export declare function schemaToParameterInfo(schema: ParamSchema | undefined): ParameterInfo[]; /** * Get all schema-driven operations with their full definitions * Used by SchemaDispatcher to iterate over dispatchable operations */ export declare function getAllSchemaOperations(): Record; /** * Get all operation schemas (dispatch-driven + introspection-only) * Used by IntrospectionResolver for complete operation documentation */ export declare function getAllOperationSchemas(): Record; //# sourceMappingURL=OperationSchema.d.ts.map