ai-ccesibility 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
4
|
import pino from 'pino';
|
|
@@ -7,7 +8,6 @@ import AxePuppeteer from '@axe-core/puppeteer';
|
|
|
7
8
|
import pa11y from 'pa11y';
|
|
8
9
|
import { ESLint } from 'eslint';
|
|
9
10
|
|
|
10
|
-
// src/server.ts
|
|
11
11
|
var logLevel = process.env["LOG_LEVEL"] ?? "info";
|
|
12
12
|
var baseLogger = pino(
|
|
13
13
|
{
|
|
@@ -2132,7 +2132,7 @@ Note: For Vue source code analysis, use analyze-with-eslint separately.`,
|
|
|
2132
2132
|
// src/server.ts
|
|
2133
2133
|
var server = new McpServer({
|
|
2134
2134
|
name: "AI-ccesibility",
|
|
2135
|
-
version: "0.1.
|
|
2135
|
+
version: "0.1.1"
|
|
2136
2136
|
});
|
|
2137
2137
|
function registerTools() {
|
|
2138
2138
|
analyzeWithAxeTool.register(server);
|
|
@@ -2146,7 +2146,7 @@ function registerTools() {
|
|
|
2146
2146
|
}
|
|
2147
2147
|
async function main() {
|
|
2148
2148
|
logger.info("Starting AI-ccesibility Server", {
|
|
2149
|
-
version: "0.1.
|
|
2149
|
+
version: "0.1.1",
|
|
2150
2150
|
tools: ["analyze-with-axe", "analyze-with-pa11y", "analyze-with-eslint", "analyze-all"]
|
|
2151
2151
|
});
|
|
2152
2152
|
registerTools();
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/logger.ts","../src/tools/base.ts","../src/adapters/base.ts","../src/adapters/axe.ts","../src/types/accessibility.ts","../src/types/tool-inputs.ts","../src/tools/axe.ts","../src/data/wcag-criteria.json","../src/utils/wcag-context.ts","../src/normalizers/base.ts","../src/normalizers/pa11y.ts","../src/adapters/pa11y.ts","../src/tools/pa11y.ts","../src/normalizers/eslint.ts","../src/adapters/eslint.ts","../src/tools/eslint.ts","../src/tools/analyze-all.ts","../src/server.ts"],"names":["z","server","response","sharedAdapter","getAdapter","disposeAdapter","buildAnalysisTarget","buildAnalysisOptions","formatOutput"],"mappings":"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","file":"server.js","sourcesContent":["import pino from 'pino';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface LogContext {\n tool?: string;\n requestId?: string;\n target?: string;\n adapter?: string;\n [key: string]: unknown;\n}\n\nconst logLevel = (process.env['LOG_LEVEL'] as LogLevel) ?? 'info';\n\nconst baseLogger = pino(\n {\n level: logLevel,\n base: {\n service: 'ai-ccesibility',\n version: '0.1.0',\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n formatters: {\n level: (label) => ({ level: label }),\n },\n },\n pino.destination(2)\n);\n\nexport const logger = {\n debug(message: string, context?: LogContext): void {\n baseLogger.debug(context ?? {}, message);\n },\n\n info(message: string, context?: LogContext): void {\n baseLogger.info(context ?? {}, message);\n },\n\n warn(message: string, context?: LogContext): void {\n baseLogger.warn(context ?? {}, message);\n },\n\n error(message: string, context?: LogContext & { error?: Error }): void {\n const { error, ...rest } = context ?? {};\n if (error) {\n baseLogger.error(\n {\n ...rest,\n err: {\n message: error.message,\n name: error.name,\n stack: error.stack,\n },\n },\n message\n );\n } else {\n baseLogger.error(rest, message);\n }\n },\n};\n\nexport function createToolLogger(toolName: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'tool'>): void {\n logger.debug(message, { ...context, tool: toolName });\n },\n\n info(message: string, context?: Omit<LogContext, 'tool'>): void {\n logger.info(message, { ...context, tool: toolName });\n },\n\n warn(message: string, context?: Omit<LogContext, 'tool'>): void {\n logger.warn(message, { ...context, tool: toolName });\n },\n\n error(message: string, context?: Omit<LogContext, 'tool'> & { error?: Error }): void {\n logger.error(message, { ...context, tool: toolName });\n },\n };\n}\n\nexport function createAdapterLogger(adapterName: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'adapter'>): void {\n logger.debug(message, { ...context, adapter: adapterName });\n },\n\n info(message: string, context?: Omit<LogContext, 'adapter'>): void {\n logger.info(message, { ...context, adapter: adapterName });\n },\n\n warn(message: string, context?: Omit<LogContext, 'adapter'>): void {\n logger.warn(message, { ...context, adapter: adapterName });\n },\n\n error(message: string, context?: Omit<LogContext, 'adapter'> & { error?: Error }): void {\n logger.error(message, { ...context, adapter: adapterName });\n },\n };\n}\n\nexport function createRequestLogger(requestId: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'requestId'>): void {\n logger.debug(message, { ...context, requestId });\n },\n\n info(message: string, context?: Omit<LogContext, 'requestId'>): void {\n logger.info(message, { ...context, requestId });\n },\n\n warn(message: string, context?: Omit<LogContext, 'requestId'>): void {\n logger.warn(message, { ...context, requestId });\n },\n\n error(message: string, context?: Omit<LogContext, 'requestId'> & { error?: Error }): void {\n logger.error(message, { ...context, requestId });\n },\n };\n}\n\nexport function generateRequestId(): string {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { createToolLogger, generateRequestId } from '@/utils/logger.js';\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n register(server: McpServer): void;\n}\n\nexport interface ToolResponse {\n content: Array<{\n type: 'text';\n text: string;\n }>;\n isError?: boolean;\n [key: string]: unknown;\n}\n\nexport function createTextResponse(text: string, isError = false): ToolResponse {\n return {\n content: [{ type: 'text', text }],\n isError,\n };\n}\n\nexport function createJsonResponse<T>(data: T, isError = false): ToolResponse {\n return {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n isError,\n };\n}\n\nexport function createErrorResponse(error: unknown): ToolResponse {\n const message = error instanceof Error ? error.message : String(error);\n return createTextResponse(`Error: ${message}`, true);\n}\n\nexport type ToolHandler<TInput> = (\n input: TInput,\n context: ToolExecutionContext\n) => Promise<ToolResponse>;\n\nexport interface ToolExecutionContext {\n requestId: string;\n logger: ReturnType<typeof createToolLogger>;\n}\n\nexport function withToolContext<TInput>(\n toolName: string,\n handler: ToolHandler<TInput>\n): (input: TInput) => Promise<ToolResponse> {\n const toolLogger = createToolLogger(toolName);\n\n return async (input: TInput): Promise<ToolResponse> => {\n const requestId = generateRequestId();\n\n toolLogger.info('Tool execution started', { requestId });\n const startTime = Date.now();\n\n try {\n const result = await handler(input, {\n requestId,\n logger: toolLogger,\n });\n\n const duration = Date.now() - startTime;\n toolLogger.info('Tool execution completed', {\n requestId,\n durationMs: duration,\n isError: result.isError ?? false,\n });\n\n return result;\n } catch (error) {\n const duration = Date.now() - startTime;\n toolLogger.error('Tool execution failed', {\n requestId,\n durationMs: duration,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n\n return createErrorResponse(error);\n }\n };\n}\n","import type { AnalysisTarget, AnalysisOptions, AnalysisResult } from '@/types/index.js';\nimport { createAdapterLogger } from '@/utils/logger.js';\n\nexport interface AdapterConfig {\n timeout?: number;\n maxRetries?: number;\n}\n\nexport interface Adapter {\n readonly name: string;\n readonly version: string;\n\n analyze(target: AnalysisTarget, options?: AnalysisOptions): Promise<AnalysisResult>;\n\n isAvailable(): Promise<boolean>;\n\n dispose(): Promise<void>;\n}\n\nexport abstract class BaseAdapter implements Adapter {\n abstract readonly name: string;\n abstract readonly version: string;\n\n protected config: AdapterConfig;\n protected logger: ReturnType<typeof createAdapterLogger>;\n\n constructor(config: AdapterConfig = {}) {\n this.config = {\n timeout: 30000,\n maxRetries: 1,\n ...config,\n };\n this.logger = createAdapterLogger(this.constructor.name);\n }\n\n abstract analyze(target: AnalysisTarget, options?: AnalysisOptions): Promise<AnalysisResult>;\n\n abstract isAvailable(): Promise<boolean>;\n\n async dispose(): Promise<void> {\n this.logger.debug('Adapter disposed');\n }\n}\n","import type { Browser, Page } from 'puppeteer';\nimport puppeteer from 'puppeteer';\nimport AxePuppeteer from '@axe-core/puppeteer';\nimport type { AxeResults, Result as AxeResult, NodeResult } from 'axe-core';\nimport { BaseAdapter, type AdapterConfig } from './base.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type {\n AnalysisResult,\n AccessibilityIssue,\n Severity,\n WCAGReference,\n WCAGLevel,\n WCAGPrinciple,\n IssueLocation,\n} from '@/types/accessibility.js';\n\nexport interface AxeAdapterConfig extends AdapterConfig {\n headless?: boolean;\n browserArgs?: string[];\n}\n\ninterface WCAGTagInfo {\n criterion: string;\n level: WCAGLevel;\n version: '2.0' | '2.1' | '2.2';\n}\n\nconst SEVERITY_MAP: Record<string, Severity> = {\n critical: 'critical',\n serious: 'serious',\n moderate: 'moderate',\n minor: 'minor',\n};\n\nconst PRINCIPLE_MAP: Record<string, WCAGPrinciple> = {\n '1': 'perceivable',\n '2': 'operable',\n '3': 'understandable',\n '4': 'robust',\n};\n\nexport class AxeAdapter extends BaseAdapter {\n readonly name = 'axe-core';\n readonly version = '4.x';\n\n private browser: Browser | null = null;\n private axeConfig: AxeAdapterConfig;\n\n constructor(config: AxeAdapterConfig = {}) {\n super(config);\n this.axeConfig = {\n headless: true,\n browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'],\n ...config,\n };\n }\n\n async analyze(target: AnalysisTarget, options?: AnalysisOptions): Promise<AnalysisResult> {\n const startTime = Date.now();\n let page: Page | null = null;\n\n try {\n this.logger.info('Starting axe-core analysis', { target: target.value });\n\n await this.ensureBrowser();\n page = await this.browser!.newPage();\n\n if (target.options?.viewport) {\n await page.setViewport(target.options.viewport);\n }\n\n await this.loadTarget(page, target);\n\n const axeBuilder = new AxePuppeteer(page);\n this.configureAxeBuilder(axeBuilder, options);\n\n const results = await axeBuilder.analyze();\n const issues = this.transformResults(results, options);\n\n const duration = Date.now() - startTime;\n this.logger.info('Analysis completed', { issueCount: issues.length, duration });\n\n return this.buildSuccessResult(target.value, issues, results, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.logger.error('Analysis failed', { error: error as Error, target: target.value });\n\n return this.buildErrorResult(target.value, error, duration);\n } finally {\n if (page) {\n await page.close().catch(() => {});\n }\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n await this.ensureBrowser();\n return true;\n } catch {\n return false;\n }\n }\n\n async dispose(): Promise<void> {\n if (this.browser) {\n await this.browser.close();\n this.browser = null;\n this.logger.debug('Browser closed');\n }\n await super.dispose();\n }\n\n private async ensureBrowser(): Promise<void> {\n if (!this.browser || !this.browser.connected) {\n this.logger.debug('Launching browser');\n this.browser = await puppeteer.launch({\n headless: this.axeConfig.headless ?? true,\n args: this.axeConfig.browserArgs ?? ['--no-sandbox', '--disable-setuid-sandbox'],\n });\n }\n }\n\n private async loadTarget(page: Page, target: AnalysisTarget): Promise<void> {\n const timeout = target.options?.timeout ?? this.config.timeout ?? 30000;\n\n switch (target.type) {\n case 'url':\n await page.goto(target.value, {\n waitUntil: 'networkidle2',\n timeout,\n });\n break;\n\n case 'html':\n await page.setContent(target.value, {\n waitUntil: 'networkidle2',\n timeout,\n });\n break;\n\n case 'file':\n await page.goto(`file://${target.value}`, {\n waitUntil: 'networkidle2',\n timeout,\n });\n break;\n }\n\n if (target.options?.waitForSelector) {\n await page.waitForSelector(target.options.waitForSelector, { timeout });\n }\n }\n\n private configureAxeBuilder(builder: AxePuppeteer, options?: AnalysisOptions): void {\n const tags = this.getWcagTags(options?.wcagLevel ?? 'AA');\n builder.withTags(tags);\n\n if (options?.rules && options.rules.length > 0) {\n builder.withRules(options.rules);\n }\n\n if (options?.excludeRules && options.excludeRules.length > 0) {\n builder.disableRules(options.excludeRules);\n }\n }\n\n private getWcagTags(level: 'A' | 'AA' | 'AAA'): string[] {\n const baseTags = ['wcag2a', 'wcag21a', 'wcag22a', 'best-practice'];\n\n if (level === 'AA' || level === 'AAA') {\n baseTags.push('wcag2aa', 'wcag21aa', 'wcag22aa');\n }\n\n if (level === 'AAA') {\n baseTags.push('wcag2aaa', 'wcag21aaa', 'wcag22aaa');\n }\n\n return baseTags;\n }\n\n private transformResults(results: AxeResults, options?: AnalysisOptions): AccessibilityIssue[] {\n const issues: AccessibilityIssue[] = [];\n let issueIndex = 0;\n\n for (const violation of results.violations) {\n for (const node of violation.nodes) {\n issues.push(this.transformViolation(violation, node, issueIndex++));\n }\n }\n\n if (options?.includeWarnings !== false) {\n for (const incomplete of results.incomplete) {\n for (const node of incomplete.nodes) {\n issues.push(this.transformIncomplete(incomplete, node, issueIndex++));\n }\n }\n }\n\n return issues;\n }\n\n private transformViolation(\n violation: AxeResult,\n node: NodeResult,\n index: number\n ): AccessibilityIssue {\n return {\n id: `axe-${index}`,\n ruleId: violation.id,\n tool: 'axe-core',\n severity: SEVERITY_MAP[violation.impact ?? 'moderate'] ?? 'moderate',\n wcag: this.extractWcagReference(violation.tags),\n location: this.extractLocation(node),\n message: violation.help,\n humanContext: violation.description,\n suggestedActions: this.extractSuggestedActions(node),\n affectedUsers: this.inferAffectedUsers(violation),\n confidence: 1,\n rawResult: { violation, node },\n };\n }\n\n private transformIncomplete(\n incomplete: AxeResult,\n node: NodeResult,\n index: number\n ): AccessibilityIssue {\n return {\n id: `axe-incomplete-${index}`,\n ruleId: incomplete.id,\n tool: 'axe-core',\n severity: 'minor',\n wcag: this.extractWcagReference(incomplete.tags),\n location: this.extractLocation(node),\n message: `[Requires review] ${incomplete.help}`,\n humanContext: incomplete.description,\n suggestedActions: this.extractSuggestedActions(node),\n affectedUsers: this.inferAffectedUsers(incomplete),\n confidence: 0.5,\n rawResult: { incomplete, node },\n };\n }\n\n private extractLocation(node: NodeResult): IssueLocation {\n return {\n selector: node.target.join(' '),\n xpath: node.xpath?.join(' '),\n snippet: node.html?.substring(0, 500),\n };\n }\n\n private extractWcagReference(tags: string[]): WCAGReference | undefined {\n const wcagTag = this.parseWcagTags(tags);\n if (!wcagTag) return undefined;\n\n const principle = wcagTag.criterion.charAt(0);\n\n return {\n criterion: wcagTag.criterion,\n level: wcagTag.level,\n principle: PRINCIPLE_MAP[principle] ?? 'perceivable',\n version: wcagTag.version,\n };\n }\n\n private parseWcagTags(tags: string[]): WCAGTagInfo | null {\n const scPattern = /^wcag(\\d{3,})$/;\n const levelPattern = /^wcag2\\d?(a{1,3})$/;\n\n let criterion: string | null = null;\n let level: WCAGLevel = 'A';\n let version: '2.0' | '2.1' | '2.2' = '2.0';\n\n for (const tag of tags) {\n const scMatch = tag.match(scPattern);\n if (scMatch && scMatch[1]) {\n const digits = scMatch[1];\n if (digits.length >= 3) {\n criterion = `${digits[0]}.${digits[1]}.${digits.slice(2)}`;\n }\n }\n\n const levelMatch = tag.match(levelPattern);\n if (levelMatch && levelMatch[1]) {\n const levelStr = levelMatch[1].toUpperCase();\n if (levelStr === 'A' || levelStr === 'AA' || levelStr === 'AAA') {\n level = levelStr;\n }\n }\n\n if (tag.includes('21')) version = '2.1';\n if (tag.includes('22')) version = '2.2';\n }\n\n if (!criterion) return null;\n\n return { criterion, level, version };\n }\n\n private extractSuggestedActions(node: NodeResult): string[] {\n const actions: string[] = [];\n\n for (const check of node.any ?? []) {\n if (check.message) {\n actions.push(check.message);\n }\n }\n\n for (const check of node.all ?? []) {\n if (check.message) {\n actions.push(check.message);\n }\n }\n\n for (const check of node.none ?? []) {\n if (check.message) {\n actions.push(`Avoid: ${check.message}`);\n }\n }\n\n return actions;\n }\n\n private inferAffectedUsers(\n result: AxeResult\n ): Array<\n | 'screen-reader'\n | 'keyboard-only'\n | 'low-vision'\n | 'color-blind'\n | 'cognitive'\n | 'motor-impaired'\n > {\n const users: Set<\n | 'screen-reader'\n | 'keyboard-only'\n | 'low-vision'\n | 'color-blind'\n | 'cognitive'\n | 'motor-impaired'\n > = new Set();\n\n const tags = result.tags.join(' ').toLowerCase();\n const id = result.id.toLowerCase();\n\n if (\n tags.includes('aria') ||\n id.includes('aria') ||\n id.includes('label') ||\n id.includes('alt')\n ) {\n users.add('screen-reader');\n }\n\n if (id.includes('keyboard') || id.includes('focus') || id.includes('tabindex')) {\n users.add('keyboard-only');\n users.add('motor-impaired');\n }\n\n if (id.includes('color') || id.includes('contrast')) {\n users.add('low-vision');\n users.add('color-blind');\n }\n\n if (id.includes('heading') || id.includes('landmark') || id.includes('link')) {\n users.add('screen-reader');\n users.add('cognitive');\n }\n\n if (users.size === 0) {\n users.add('screen-reader');\n }\n\n return Array.from(users);\n }\n\n private buildSuccessResult(\n target: string,\n issues: AccessibilityIssue[],\n axeResults: AxeResults,\n duration: number\n ): AnalysisResult {\n const summary = this.calculateSummary(issues);\n\n return {\n success: true,\n timestamp: new Date().toISOString(),\n duration,\n target,\n tool: 'axe-core',\n issues,\n summary,\n metadata: {\n toolVersion: axeResults.testEngine?.version,\n browserInfo: axeResults.testEnvironment?.userAgent,\n pageTitle: axeResults.url,\n },\n };\n }\n\n private buildErrorResult(target: string, error: unknown, duration: number): AnalysisResult {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n return {\n success: false,\n timestamp: new Date().toISOString(),\n duration,\n target,\n tool: 'axe-core',\n issues: [],\n summary: {\n total: 0,\n bySeverity: { critical: 0, serious: 0, moderate: 0, minor: 0 },\n },\n error: errorMessage,\n };\n }\n\n private calculateSummary(issues: AccessibilityIssue[]): AnalysisResult['summary'] {\n const bySeverity = { critical: 0, serious: 0, moderate: 0, minor: 0 };\n const byPrinciple = { perceivable: 0, operable: 0, understandable: 0, robust: 0 };\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byRule,\n };\n }\n}\n","import { z } from 'zod';\n\nexport const SeveritySchema = z\n .enum(['critical', 'serious', 'moderate', 'minor'])\n .describe(\n 'Impact level: critical (blocks users), serious (significant barrier), moderate (some difficulty), minor (annoyance)'\n );\nexport type Severity = z.infer<typeof SeveritySchema>;\n\nexport const WCAGLevelSchema = z\n .enum(['A', 'AA', 'AAA'])\n .describe('WCAG conformance level: A (minimum), AA (standard), AAA (enhanced)');\nexport type WCAGLevel = z.infer<typeof WCAGLevelSchema>;\n\nexport const WCAGPrincipleSchema = z\n .enum(['perceivable', 'operable', 'understandable', 'robust'])\n .describe(\n 'WCAG principle: perceivable (can sense), operable (can use), understandable (can comprehend), robust (works with assistive tech)'\n );\nexport type WCAGPrinciple = z.infer<typeof WCAGPrincipleSchema>;\n\nexport const ToolSourceSchema = z\n .enum(['axe-core', 'pa11y'])\n .describe('Source tool that detected the issue');\nexport type ToolSource = z.infer<typeof ToolSourceSchema>;\n\nexport const WCAGCriterionSchema = z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+$/, 'Must be in format X.Y.Z (e.g., 1.4.3)')\n .describe('WCAG success criterion number (e.g., 1.4.3 for Contrast)');\nexport type WCAGCriterion = z.infer<typeof WCAGCriterionSchema>;\n\nexport const WCAGReferenceSchema = z\n .object({\n criterion: WCAGCriterionSchema,\n level: WCAGLevelSchema,\n principle: WCAGPrincipleSchema,\n version: z.enum(['2.0', '2.1', '2.2']).optional().describe('WCAG version'),\n title: z.string().optional().describe('Human-readable criterion title'),\n url: z.string().url().optional().describe('Link to WCAG documentation'),\n })\n .describe('Reference to specific WCAG success criterion');\nexport type WCAGReference = z.infer<typeof WCAGReferenceSchema>;\n\nexport const IssueLocationSchema = z\n .object({\n selector: z.string().optional().describe('CSS selector to locate the element'),\n xpath: z.string().optional().describe('XPath to locate the element'),\n file: z.string().optional().describe('Source file path (for static analysis)'),\n line: z.number().int().positive().optional().describe('Line number in source file'),\n column: z.number().int().nonnegative().optional().describe('Column number in source file'),\n snippet: z.string().max(500).optional().describe('HTML snippet of the problematic element'),\n })\n .describe('Location information for the accessibility issue');\nexport type IssueLocation = z.infer<typeof IssueLocationSchema>;\n\nexport const AccessibilityIssueSchema = z\n .object({\n id: z.string().min(1).describe('Unique identifier for this issue instance'),\n ruleId: z.string().min(1).describe('Rule identifier from the source tool'),\n tool: ToolSourceSchema,\n severity: SeveritySchema,\n wcag: WCAGReferenceSchema.optional(),\n location: IssueLocationSchema,\n message: z.string().min(1).describe('Technical description of the issue'),\n humanContext: z.string().optional().describe('User impact explanation for decision-making'),\n suggestedActions: z\n .array(z.string())\n .optional()\n .describe('Possible remediation approaches (not auto-fixes)'),\n affectedUsers: z\n .array(\n z.enum([\n 'screen-reader',\n 'keyboard-only',\n 'low-vision',\n 'color-blind',\n 'cognitive',\n 'motor-impaired',\n ])\n )\n .optional()\n .describe('User groups most affected by this issue'),\n priority: z\n .enum(['critical', 'high', 'medium', 'low'])\n .optional()\n .describe('Remediation priority based on impact'),\n remediationEffort: z\n .enum(['low', 'medium', 'high'])\n .optional()\n .describe('Estimated effort to fix'),\n confidence: z.number().min(0).max(1).optional().describe('Tool confidence score (0-1)'),\n rawResult: z.unknown().optional().describe('Original result from source tool for debugging'),\n })\n .describe('Normalized accessibility issue from any source tool');\nexport type AccessibilityIssue = z.infer<typeof AccessibilityIssueSchema>;\n\nexport const AnalysisSummarySchema = z\n .object({\n total: z.number().int().nonnegative().describe('Total number of issues found'),\n bySeverity: z\n .object({\n critical: z.number().int().nonnegative().default(0),\n serious: z.number().int().nonnegative().default(0),\n moderate: z.number().int().nonnegative().default(0),\n minor: z.number().int().nonnegative().default(0),\n })\n .describe('Issue count by severity level'),\n byPrinciple: z\n .object({\n perceivable: z.number().int().nonnegative().default(0),\n operable: z.number().int().nonnegative().default(0),\n understandable: z.number().int().nonnegative().default(0),\n robust: z.number().int().nonnegative().default(0),\n })\n .optional()\n .describe('Issue count by WCAG principle'),\n byRule: z\n .record(z.string(), z.number().int().nonnegative())\n .optional()\n .describe('Issue count grouped by rule ID'),\n })\n .describe('Summary statistics for the analysis');\nexport type AnalysisSummary = z.infer<typeof AnalysisSummarySchema>;\n\nexport const AnalysisResultSchema = z\n .object({\n success: z.boolean().describe('Whether the analysis completed without errors'),\n timestamp: z.string().datetime().describe('ISO 8601 timestamp of analysis'),\n duration: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .describe('Analysis duration in milliseconds'),\n target: z.string().describe('URL, file path, or identifier of analyzed target'),\n tool: ToolSourceSchema,\n issues: z.array(AccessibilityIssueSchema).describe('List of accessibility issues found'),\n summary: AnalysisSummarySchema,\n metadata: z\n .object({\n toolVersion: z.string().optional(),\n browserInfo: z.string().optional(),\n pageTitle: z.string().optional(),\n })\n .optional()\n .describe('Additional context about the analysis'),\n error: z.string().optional().describe('Error message if analysis failed'),\n })\n .describe('Complete result of an accessibility analysis');\nexport type AnalysisResult = z.infer<typeof AnalysisResultSchema>;\n\nexport const CombinedAnalysisResultSchema = z\n .object({\n success: z.boolean(),\n timestamp: z.string().datetime(),\n duration: z.number().int().nonnegative().optional(),\n target: z.string(),\n toolsUsed: z.array(ToolSourceSchema),\n issues: z.array(AccessibilityIssueSchema),\n summary: AnalysisSummarySchema.extend({\n byTool: z.record(ToolSourceSchema, z.number().int().nonnegative()).optional(),\n }),\n individualResults: z\n .array(AnalysisResultSchema)\n .optional()\n .describe('Results from each tool before merging'),\n error: z.string().optional(),\n })\n .describe('Combined result from multiple accessibility tools');\nexport type CombinedAnalysisResult = z.infer<typeof CombinedAnalysisResultSchema>;\n","import { z } from 'zod';\nimport { WCAGLevelSchema } from './accessibility.js';\n\nconst UrlSchema = z.string().url().describe('URL of the page to analyze');\n\nconst HtmlSchema = z.string().min(1).describe('Raw HTML content to analyze');\n\nconst FilePathSchema = z.string().min(1).describe('Path to the file to analyze');\n\nconst ViewportSchema = z\n .object({\n width: z.number().int().positive().default(1280).describe('Viewport width in pixels'),\n height: z.number().int().positive().default(720).describe('Viewport height in pixels'),\n })\n .describe('Browser viewport dimensions');\n\nconst BrowserOptionsSchema = z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for before analysis'),\n waitForTimeout: z\n .number()\n .int()\n .positive()\n .max(60000)\n .optional()\n .describe('Time to wait in ms before analysis (max 60s)'),\n viewport: ViewportSchema.optional(),\n })\n .describe('Browser behavior options');\n\nexport const AxeToolInputSchema = z\n .object({\n url: UrlSchema.optional(),\n html: HtmlSchema.optional(),\n options: z\n .object({\n wcagLevel: WCAGLevelSchema.default('AA').describe('WCAG conformance level to check'),\n rules: z.array(z.string()).optional().describe('Specific axe rule IDs to run'),\n excludeRules: z.array(z.string()).optional().describe('Axe rule IDs to exclude'),\n includeIncomplete: z\n .boolean()\n .default(false)\n .describe('Include incomplete/needs-review results'),\n selector: z\n .string()\n .optional()\n .describe('CSS selector to scope analysis to specific element'),\n browser: BrowserOptionsSchema.optional(),\n })\n .optional(),\n })\n .refine((data) => data.url !== undefined || data.html !== undefined, {\n message: 'Either url or html must be provided',\n })\n .refine((data) => !(data.url !== undefined && data.html !== undefined), {\n message: 'Provide either url or html, not both',\n })\n .describe('Input for axe-core accessibility analysis');\n\nexport type AxeToolInput = z.infer<typeof AxeToolInputSchema>;\n\nexport const Pa11yToolInputSchema = z\n .object({\n url: UrlSchema.optional(),\n html: HtmlSchema.optional(),\n options: z\n .object({\n standard: z\n .enum(['WCAG2A', 'WCAG2AA', 'WCAG2AAA', 'WCAG21A', 'WCAG21AA', 'WCAG21AAA'])\n .default('WCAG21AA')\n .describe('Accessibility standard to test against'),\n includeWarnings: z.boolean().default(true).describe('Include warnings in results'),\n includeNotices: z.boolean().default(false).describe('Include notices in results'),\n rootElement: z.string().optional().describe('CSS selector for root element to test'),\n hideElements: z\n .string()\n .optional()\n .describe('CSS selector for elements to hide from testing'),\n browser: BrowserOptionsSchema.optional(),\n })\n .optional(),\n })\n .refine((data) => data.url !== undefined || data.html !== undefined, {\n message: 'Either url or html must be provided',\n })\n .refine((data) => !(data.url !== undefined && data.html !== undefined), {\n message: 'Provide either url or html, not both',\n })\n .describe('Input for Pa11y accessibility analysis');\n\nexport type Pa11yToolInput = z.infer<typeof Pa11yToolInputSchema>;\n\nexport const ESLintA11yToolInputSchema = z\n .object({\n files: z.array(FilePathSchema).min(1).optional().describe('Array of file paths to lint'),\n directory: z.string().optional().describe('Directory path to lint recursively'),\n code: z.string().optional().describe('Inline Vue component code to lint'),\n options: z\n .object({\n rules: z\n .record(\n z.string(),\n z.union([z.enum(['off', 'warn', 'error']), z.number().int().min(0).max(2)])\n )\n .optional()\n .describe('Override specific rule configurations'),\n fix: z\n .literal(false)\n .default(false)\n .describe('Fix mode is disabled - MCP only reports issues'),\n })\n .optional(),\n })\n .refine(\n (data) => data.files !== undefined || data.directory !== undefined || data.code !== undefined,\n { message: 'Provide files, directory, or code to lint' }\n )\n .describe('Input for ESLint Vue.js accessibility linting');\n\nexport type ESLintA11yToolInput = z.infer<typeof ESLintA11yToolInputSchema>;\n\nexport const CombinedAnalysisInputSchema = z\n .object({\n url: UrlSchema.optional(),\n html: HtmlSchema.optional(),\n tools: z\n .array(z.enum(['axe-core', 'pa11y']))\n .min(1)\n .default(['axe-core', 'pa11y'])\n .describe('Tools to run for web analysis'),\n options: z\n .object({\n wcagLevel: WCAGLevelSchema.default('AA'),\n deduplicateResults: z\n .boolean()\n .default(true)\n .describe('Merge similar issues from different tools'),\n browser: BrowserOptionsSchema.optional(),\n })\n .optional(),\n })\n .refine(\n (data) => data.url !== undefined || data.html !== undefined,\n { message: 'Provide url or html to analyze' }\n )\n .describe('Input for combined web accessibility analysis (axe-core + Pa11y)');\n\nexport type CombinedAnalysisInput = z.infer<typeof CombinedAnalysisInputSchema>;\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { AxeAdapter } from '@/adapters/axe.js';\nimport { AxeToolInputSchema, type AxeToolInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type { AnalysisResult } from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAdapter: AxeAdapter | null = null;\n\nfunction getAdapter(): AxeAdapter {\n if (!sharedAdapter) {\n sharedAdapter = new AxeAdapter({\n headless: true,\n timeout: 30000,\n });\n }\n return sharedAdapter;\n}\n\nasync function disposeAdapter(): Promise<void> {\n if (sharedAdapter) {\n await sharedAdapter.dispose();\n sharedAdapter = null;\n }\n}\n\nprocess.on('SIGINT', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nprocess.on('SIGTERM', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nfunction buildAnalysisTarget(input: AxeToolInput): AnalysisTarget {\n if (input.url) {\n return {\n type: 'url',\n value: input.url,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n }\n\n return {\n type: 'html',\n value: input.html!,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n}\n\nfunction buildAnalysisOptions(input: AxeToolInput): AnalysisOptions {\n return {\n wcagLevel: input.options?.wcagLevel ?? 'AA',\n rules: input.options?.rules,\n excludeRules: input.options?.excludeRules,\n includeWarnings: input.options?.includeIncomplete ?? false,\n };\n}\n\ninterface AxeToolOutput {\n success: boolean;\n target: string;\n issueCount: number;\n issues: AnalysisResult['issues'];\n summary: AnalysisResult['summary'];\n metadata?: AnalysisResult['metadata'] | undefined;\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(result: AnalysisResult): AxeToolOutput {\n return {\n success: result.success,\n target: result.target,\n issueCount: result.issues.length,\n issues: result.issues,\n summary: result.summary,\n metadata: result.metadata,\n duration: result.duration,\n error: result.error,\n };\n}\n\nconst handleAxeAnalysis = withToolContext<AxeToolInput>(\n 'analyze-with-axe',\n async (input, context): Promise<ToolResponse> => {\n context.logger.debug('Building analysis configuration', {\n hasUrl: !!input.url,\n hasHtml: !!input.html,\n wcagLevel: input.options?.wcagLevel ?? 'AA',\n });\n\n const adapter = getAdapter();\n\n const isAvailable = await adapter.isAvailable();\n if (!isAvailable) {\n return createErrorResponse(\n new Error('Axe adapter is not available. Browser may have failed to launch.')\n );\n }\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n context.logger.info('Starting axe-core analysis', {\n targetType: target.type,\n target: target.type === 'url' ? target.value : '[html content]',\n });\n\n const result = await adapter.analyze(target, options);\n\n if (!result.success) {\n context.logger.warn('Analysis completed with errors', {\n error: result.error,\n });\n }\n\n const output = formatOutput(result);\n return createJsonResponse(output, !result.success);\n }\n);\n\nconst AxeToolMcpInputSchema = z.object({\n url: z.string().url().optional().describe('URL of the page to analyze'),\n html: z.string().min(1).optional().describe('Raw HTML content to analyze'),\n options: z\n .object({\n wcagLevel: z\n .enum(['A', 'AA', 'AAA'])\n .default('AA')\n .describe('WCAG conformance level to check'),\n rules: z.array(z.string()).optional().describe('Specific axe rule IDs to run'),\n excludeRules: z.array(z.string()).optional().describe('Axe rule IDs to exclude'),\n includeIncomplete: z\n .boolean()\n .default(false)\n .describe('Include incomplete/needs-review results'),\n selector: z.string().optional().describe('CSS selector to scope analysis'),\n browser: z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for'),\n waitForTimeout: z.number().int().positive().max(60000).optional(),\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(720),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const analyzeWithAxeTool: ToolDefinition = {\n name: 'analyze-with-axe',\n description: `Analyze a web page or HTML content for accessibility issues using axe-core.\n\nReturns accessibility violations and incomplete checks based on WCAG guidelines.\n\nInput options\n- url: URL of the page to analyze\n- html: Raw HTML content to analyze (alternative to url)\n- options.wcagLevel: WCAG level to check (A, AA, or AAA). Default: AA\n- options.rules: Specific axe rule IDs to run\n- options.excludeRules: Axe rule IDs to exclude\n- options.includeIncomplete: Include needs-review results. Default: false\n- options.browser.waitForSelector: CSS selector to wait for before analysis\n- options.browser.viewport: Browser viewport dimensions\n\nOutput\n- issues: Array of accessibility issues found\n- summary: Issue counts by severity and WCAG principle\n- metadata: Tool version and browser info`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n AxeToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = AxeToolInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handleAxeAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapter as disposeAxeAdapter };\n","{\n \"1.1.1\": {\n \"criterion\": \"1.1.1\",\n \"level\": \"A\",\n \"principle\": \"perceivable\",\n \"title\": \"Contenido no textual\",\n \"description\": \"Todo contenido no textual debe tener una alternativa de texto que cumpla el mismo propósito.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\", \"low-vision\"],\n \"impactDescription\": \"Los usuarios de lectores de pantalla no pueden acceder a la información transmitida por imágenes, iconos o gráficos sin texto alternativo.\",\n \"realWorldExample\": \"Un usuario ciego usando JAWS escuchará \\\"imagen\\\" sin descripción, perdiendo completamente el contexto.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"critical\",\n \"commonSolutions\": [\n \"Añadir atributo alt descriptivo a imágenes\",\n \"Usar aria-label para iconos decorativos con función\",\n \"Marcar imágenes decorativas con alt=\\\"\\\" vacío\",\n \"Proporcionar transcripciones para audio/video\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html\"\n },\n \"1.2.2\": {\n \"criterion\": \"1.2.2\",\n \"level\": \"A\",\n \"principle\": \"perceivable\",\n \"title\": \"Subtítulos (pregrabados)\",\n \"description\": \"Los medios sincronizados pregrabados deben tener subtítulos.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\"],\n \"impactDescription\": \"Usuarios sordos o con problemas de audición no pueden acceder al contenido de audio.\",\n \"realWorldExample\": \"Una persona sorda no puede seguir un tutorial en video sin subtítulos.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"high\",\n \"commonSolutions\": [\n \"Añadir track de subtítulos WebVTT\",\n \"Usar servicios de transcripción automática como punto de partida\",\n \"Revisar y corregir subtítulos generados automáticamente\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/captions-prerecorded.html\"\n },\n \"1.3.1\": {\n \"criterion\": \"1.3.1\",\n \"level\": \"A\",\n \"principle\": \"perceivable\",\n \"title\": \"Información y relaciones\",\n \"description\": \"La información, estructura y relaciones transmitidas visualmente pueden ser determinadas programáticamente.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\", \"cognitive\"],\n \"impactDescription\": \"Sin estructura semántica correcta, los usuarios no pueden navegar eficientemente ni entender las relaciones entre contenidos.\",\n \"realWorldExample\": \"Un usuario con lector de pantalla no puede saltar entre encabezados si se usan divs con estilos en lugar de elementos h1-h6.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"high\",\n \"commonSolutions\": [\n \"Usar elementos HTML semánticos (nav, main, article, aside)\",\n \"Usar headings (h1-h6) en orden jerárquico\",\n \"Asociar labels con inputs correctamente\",\n \"Usar listas (ul, ol) para contenido de lista\",\n \"Usar tablas con th y scope para datos tabulares\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html\"\n },\n \"1.4.3\": {\n \"criterion\": \"1.4.3\",\n \"level\": \"AA\",\n \"principle\": \"perceivable\",\n \"title\": \"Contraste mínimo\",\n \"description\": \"El texto debe tener una relación de contraste de al menos 4.5:1 (3:1 para texto grande).\",\n \"userImpact\": {\n \"affectedUsers\": [\"low-vision\", \"color-blind\"],\n \"impactDescription\": \"Texto con bajo contraste es difícil o imposible de leer para personas con baja visión o daltonismo.\",\n \"realWorldExample\": \"Un usuario con cataratas no puede leer texto gris claro sobre fondo blanco en un formulario.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"high\",\n \"commonSolutions\": [\n \"Ajustar colores para cumplir ratio 4.5:1 mínimo\",\n \"Usar herramientas como WebAIM Contrast Checker\",\n \"Evitar depender solo del color para transmitir información\",\n \"Probar con simuladores de daltonismo\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html\"\n },\n \"2.1.1\": {\n \"criterion\": \"2.1.1\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Teclado\",\n \"description\": \"Toda funcionalidad debe ser operable mediante teclado.\",\n \"userImpact\": {\n \"affectedUsers\": [\"keyboard-only\", \"motor-impaired\", \"screen-reader\"],\n \"impactDescription\": \"Usuarios que no pueden usar mouse quedan completamente bloqueados de funcionalidades solo accesibles con eventos de ratón.\",\n \"realWorldExample\": \"Un usuario con parálisis cerebral no puede usar un dropdown que solo funciona con hover del mouse.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"critical\",\n \"commonSolutions\": [\n \"Añadir manejadores de eventos de teclado (onKeyDown, onKeyPress)\",\n \"Usar elementos interactivos nativos (button, a, input)\",\n \"Asegurar que custom components sean focusables (tabindex)\",\n \"Implementar navegación con Enter/Space en controles personalizados\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/keyboard.html\"\n },\n \"2.4.1\": {\n \"criterion\": \"2.4.1\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Saltar bloques\",\n \"description\": \"Debe existir un mecanismo para saltar bloques de contenido repetidos.\",\n \"userImpact\": {\n \"affectedUsers\": [\"keyboard-only\", \"screen-reader\"],\n \"impactDescription\": \"Usuarios deben tabular por toda la navegación en cada página, perdiendo tiempo y paciencia.\",\n \"realWorldExample\": \"Un usuario ciego debe escuchar 30 links de navegación antes de llegar al contenido principal en cada página.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Añadir link \\\"Saltar al contenido principal\\\" al inicio\",\n \"Usar landmarks ARIA correctamente (main, nav)\",\n \"Implementar skip links visibles al recibir foco\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/bypass-blocks.html\"\n },\n \"2.4.3\": {\n \"criterion\": \"2.4.3\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Orden del foco\",\n \"description\": \"El orden de foco debe ser lógico y predecible.\",\n \"userImpact\": {\n \"affectedUsers\": [\"keyboard-only\", \"screen-reader\", \"cognitive\"],\n \"impactDescription\": \"Orden de foco ilógico confunde a usuarios y dificulta la navegación.\",\n \"realWorldExample\": \"El foco salta de un botón a otro en la esquina opuesta, confundiendo al usuario sobre qué elemento está activo.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Evitar tabindex positivos (> 0)\",\n \"Mantener DOM order que refleje orden visual\",\n \"Usar CSS para reordenar visualmente, no tabindex\",\n \"Probar navegación con Tab manualmente\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/focus-order.html\"\n },\n \"2.4.4\": {\n \"criterion\": \"2.4.4\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Propósito de los enlaces\",\n \"description\": \"El propósito de cada enlace debe poder determinarse por el texto del enlace solo.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\", \"cognitive\"],\n \"impactDescription\": \"Enlaces genéricos como \\\"click aquí\\\" no comunican destino o propósito.\",\n \"realWorldExample\": \"Un usuario con lector de pantalla navegando por lista de enlaces escucha 10 veces \\\"más información\\\" sin contexto.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Usar texto de enlace descriptivo (\\\"Descargar informe anual 2023\\\")\",\n \"Evitar \\\"click aquí\\\", \\\"más información\\\", \\\"leer más\\\"\",\n \"Añadir aria-label con contexto si el texto visible debe ser corto\",\n \"Incluir el contexto en el texto del enlace\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/link-purpose-in-context.html\"\n },\n \"3.2.2\": {\n \"criterion\": \"3.2.2\",\n \"level\": \"A\",\n \"principle\": \"understandable\",\n \"title\": \"Al recibir entradas\",\n \"description\": \"Cambiar el valor de un control no debe causar cambios de contexo inesperados.\",\n \"userImpact\": {\n \"affectedUsers\": [\"cognitive\", \"screen-reader\"],\n \"impactDescription\": \"Cambios automáticos desorientan y pueden causar pérdida de contexto.\",\n \"realWorldExample\": \"Un select que auto-envía el formulario al cambiar sorprende al usuario que quería explorar opciones.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Requerir acción explícita (botón) para enviar\",\n \"Advertir al usuario si habrá cambio automático\",\n \"Usar onChange solo para actualizar UI, no navegación\",\n \"Proporcionar botón \\\"Aplicar\\\" en lugar de auto-submit\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/on-input.html\"\n },\n \"4.1.2\": {\n \"criterion\": \"4.1.2\",\n \"level\": \"A\",\n \"principle\": \"robust\",\n \"title\": \"Nombre, función, valor\",\n \"description\": \"Componentes de interfaz deben exponer nombre, función, estados y propiedades programáticamente.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\"],\n \"impactDescription\": \"Controles personalizados sin semántica ARIA son invisibles o incomprensibles para tecnologías asistivas.\",\n \"realWorldExample\": \"Un checkbox custom hecho con div no anuncia su estado (marcado/desmarcado) al lector de pantalla.\"\n },\n \"remediation\": {\n \"effort\": \"high\",\n \"priority\": \"critical\",\n \"commonSolutions\": [\n \"Usar elementos HTML nativos cuando sea posible\",\n \"Añadir roles ARIA apropiados (role=\\\"button\\\", \\\"checkbox\\\", etc.)\",\n \"Implementar estados ARIA (aria-checked, aria-expanded)\",\n \"Incluir aria-label o aria-labelledby para nombre accesible\",\n \"Seguir patrones de diseño WAI-ARIA\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html\"\n }\n}\n","import type { WCAGLevel, WCAGPrinciple } from '@/types/accessibility.js';\nimport wcagCriteriaData from '@/data/wcag-criteria.json' with { type: 'json' };\n\nexport interface WCAGCriterionInfo {\n criterion: string;\n level: WCAGLevel;\n principle: WCAGPrinciple;\n title: string;\n description: string;\n userImpact: {\n affectedUsers: Array<'screen-reader' | 'keyboard-only' | 'low-vision' | 'color-blind' | 'cognitive' | 'motor-impaired'>;\n impactDescription: string;\n realWorldExample: string;\n };\n remediation: {\n effort: 'low' | 'medium' | 'high';\n priority: 'critical' | 'high' | 'medium' | 'low';\n commonSolutions: string[];\n };\n wcagUrl: string;\n}\n\nexport const WCAG_CRITERIA: Record<string, WCAGCriterionInfo> = wcagCriteriaData as Record<string, WCAGCriterionInfo>;\n\nexport function getWCAGContext(criterion: string): WCAGCriterionInfo | undefined {\n return WCAG_CRITERIA[criterion];\n}\n\nexport function enrichIssueWithContext(\n _issue: { wcag?: { criterion: string } },\n context: WCAGCriterionInfo\n): {\n humanContext: string;\n suggestedActions: string[];\n affectedUsers: Array<'screen-reader' | 'keyboard-only' | 'low-vision' | 'color-blind' | 'cognitive' | 'motor-impaired'>;\n priority: 'critical' | 'high' | 'medium' | 'low';\n remediationEffort: 'low' | 'medium' | 'high';\n} {\n const humanContext = `\n**${context.title} (WCAG ${context.criterion} - Nivel ${context.level})**\n\n${context.description}\n\n**Impacto en usuarios:**\n${context.userImpact.impactDescription}\n\n**Ejemplo real:**\n${context.userImpact.realWorldExample}\n\n**Esfuerzo de corrección:** ${context.remediation.effort}\n**Prioridad:** ${context.remediation.priority}\n `.trim();\n\n return {\n humanContext,\n suggestedActions: context.remediation.commonSolutions,\n affectedUsers: context.userImpact.affectedUsers,\n priority: context.remediation.priority,\n remediationEffort: context.remediation.effort\n };\n}\n","import type { AccessibilityIssue, ToolSource, Severity } from '@/types/index.js';\nimport { getWCAGContext, enrichIssueWithContext } from '@/utils/wcag-context.js';\n\nexport interface NormalizerContext {\n tool: ToolSource;\n targetUrl?: string | undefined;\n targetFile?: string | undefined;\n}\n\nexport interface Normalizer<TRawResult = unknown> {\n normalize(raw: TRawResult, context: NormalizerContext): AccessibilityIssue[];\n}\n\nexport abstract class BaseNormalizer<TRawResult = unknown> implements Normalizer<TRawResult> {\n abstract normalize(raw: TRawResult, context: NormalizerContext): AccessibilityIssue[];\n\n protected generateIssueId(tool: ToolSource, ruleId: string, selector?: string): string {\n const base = `${tool}:${ruleId}`;\n if (selector) {\n const selectorHash = this.hashString(selector).toString(16);\n return `${base}:${selectorHash}`;\n }\n return base;\n }\n\n protected mapImpactToSeverity(impact: string | undefined): Severity {\n const mapping: Record<string, Severity> = {\n critical: 'critical',\n serious: 'serious',\n moderate: 'moderate',\n minor: 'minor',\n };\n return mapping[impact ?? ''] ?? 'moderate';\n }\n\n protected enrichWithHumanContext(issue: Partial<AccessibilityIssue>): Partial<AccessibilityIssue> {\n if (!issue.wcag?.criterion) {\n return issue;\n }\n\n const context = getWCAGContext(issue.wcag.criterion);\n if (!context) {\n return issue;\n }\n\n const enrichment = enrichIssueWithContext(issue as { wcag?: { criterion: string } }, context);\n\n return {\n ...issue,\n humanContext: enrichment.humanContext,\n suggestedActions: enrichment.suggestedActions,\n affectedUsers: enrichment.affectedUsers,\n priority: enrichment.priority,\n remediationEffort: enrichment.remediationEffort\n };\n }\n\n private hashString(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash);\n }\n}\n","import { BaseNormalizer, type NormalizerContext } from './base.js';\nimport type { AccessibilityIssue, WCAGPrinciple, WCAGLevel, Severity } from '@/types/index.js';\n\nexport interface Pa11yIssue {\n code: string;\n type: 'error' | 'warning' | 'notice';\n message: string;\n context: string;\n selector: string;\n typeCode: number;\n runner?: string;\n runnerExtras?: Record<string, unknown>;\n}\n\nconst WCAG_PATTERN = /WCAG2(A{1,3})\\.(Principle\\d)\\.Guideline\\d+_\\d+\\.(\\d+_\\d+_\\d+)/;\n\nexport class Pa11yNormalizer extends BaseNormalizer<Pa11yIssue[]> {\n normalize(issues: Pa11yIssue[], context: NormalizerContext): AccessibilityIssue[] {\n return issues.map((issue) => this.normalizeIssue(issue, context));\n }\n\n private normalizeIssue(issue: Pa11yIssue, context: NormalizerContext): AccessibilityIssue {\n const wcagInfo = this.parseWcagCode(issue.code);\n\n const baseIssue = {\n id: this.generateIssueId('pa11y', issue.code, issue.selector),\n ruleId: issue.code,\n tool: 'pa11y' as const,\n severity: this.mapTypeToSeverity(issue.type),\n wcag: wcagInfo,\n location: {\n selector: issue.selector,\n snippet: issue.context,\n file: context.targetFile\n },\n message: issue.message,\n confidence: issue.type === 'error' ? 1 : 0.8\n };\n\n return this.enrichWithHumanContext(baseIssue) as AccessibilityIssue;\n }\n\n private mapTypeToSeverity(type: 'error' | 'warning' | 'notice'): Severity {\n const mapping: Record<string, Severity> = {\n error: 'serious',\n warning: 'moderate',\n notice: 'minor'\n };\n return mapping[type] ?? 'moderate';\n }\n\n private parseWcagCode(code: string): AccessibilityIssue['wcag'] | undefined {\n const match = WCAG_PATTERN.exec(code);\n if (!match) return undefined;\n\n const [, levelStr, principleStr, criterionRaw] = match;\n if (!levelStr || !principleStr || !criterionRaw) return undefined;\n\n const level = levelStr as WCAGLevel;\n const criterion = criterionRaw.replace(/_/g, '.');\n\n const principleMap: Record<string, WCAGPrinciple> = {\n Principle1: 'perceivable',\n Principle2: 'operable',\n Principle3: 'understandable',\n Principle4: 'robust'\n };\n\n const principle = principleMap[principleStr];\n if (!principle) return undefined;\n\n return {\n criterion,\n level,\n principle,\n version: '2.1'\n };\n }\n}\n\nexport const pa11yNormalizer = new Pa11yNormalizer();\n","import pa11y from 'pa11y';\nimport { BaseAdapter, type AdapterConfig } from './base.js';\nimport { pa11yNormalizer, type Pa11yIssue } from '@/normalizers/pa11y.js';\nimport type {\n AnalysisTarget,\n AnalysisOptions,\n AnalysisResult,\n AnalysisSummary,\n Severity,\n WCAGPrinciple\n} from '@/types/index.js';\n\ntype Pa11yOptions = NonNullable<Parameters<typeof pa11y>[1]>;\n\ninterface Pa11yResults {\n documentTitle: string;\n pageUrl: string;\n issues: Pa11yIssue[];\n}\n\nexport interface Pa11yAdapterConfig extends AdapterConfig {\n chromeLaunchConfig?: {\n executablePath?: string;\n ignoreHTTPSErrors?: boolean;\n };\n}\n\nexport class Pa11yAdapter extends BaseAdapter {\n readonly name = 'pa11y';\n readonly version = '9.0.1';\n\n private adapterConfig: Pa11yAdapterConfig;\n\n constructor(config: Pa11yAdapterConfig = {}) {\n super(config);\n this.adapterConfig = config;\n }\n\n async analyze(\n target: AnalysisTarget,\n options?: AnalysisOptions\n ): Promise<AnalysisResult> {\n const startTime = Date.now();\n const targetValue = target.value;\n\n this.logger.info('Starting Pa11y analysis', { target: targetValue });\n\n try {\n const pa11yOptions = this.buildPa11yOptions(target, options);\n const results = await this.runPa11y(target, pa11yOptions);\n\n const issues = pa11yNormalizer.normalize(results.issues, {\n tool: 'pa11y',\n targetUrl: target.type === 'url' ? targetValue : undefined\n });\n\n const duration = Date.now() - startTime;\n\n this.logger.info('Pa11y analysis completed', {\n target: targetValue,\n issueCount: issues.length,\n durationMs: duration\n });\n\n return {\n success: true,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'pa11y',\n issues,\n summary: this.buildSummary(issues),\n metadata: {\n toolVersion: this.version,\n pageTitle: results.documentTitle\n }\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n this.logger.error('Pa11y analysis failed', {\n target: targetValue,\n error: error instanceof Error ? error : new Error(errorMessage)\n });\n\n return {\n success: false,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'pa11y',\n issues: [],\n summary: this.buildSummary([]),\n error: errorMessage\n };\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n return typeof pa11y === 'function';\n } catch {\n return false;\n }\n }\n\n private buildPa11yOptions(\n target: AnalysisTarget,\n options?: AnalysisOptions\n ): Pa11yOptions {\n const pa11yOpts: Pa11yOptions = {\n timeout: this.config.timeout,\n wait: 0,\n standard: this.mapWcagLevel(options?.wcagLevel ?? 'AA'),\n includeWarnings: options?.includeWarnings ?? true,\n includeNotices: false\n };\n\n if (target.options?.viewport) {\n pa11yOpts.viewport = {\n width: target.options.viewport.width,\n height: target.options.viewport.height\n };\n }\n\n if (target.options?.waitForSelector) {\n pa11yOpts.wait = 1000;\n }\n\n if (target.options?.timeout) {\n pa11yOpts.wait = target.options.timeout;\n }\n\n if (this.adapterConfig.chromeLaunchConfig) {\n pa11yOpts.chromeLaunchConfig = this.adapterConfig.chromeLaunchConfig as Pa11yOptions['chromeLaunchConfig'];\n }\n\n if (options?.rules && options.rules.length > 0) {\n pa11yOpts.rules = options.rules;\n }\n\n if (options?.excludeRules && options.excludeRules.length > 0) {\n pa11yOpts.ignore = options.excludeRules;\n }\n\n return pa11yOpts;\n }\n\n private async runPa11y(\n target: AnalysisTarget,\n options: Pa11yOptions\n ): Promise<Pa11yResults> {\n if (target.type === 'url') {\n return pa11y(target.value, options) as Promise<Pa11yResults>;\n }\n\n if (target.type === 'html') {\n const htmlContent = target.value;\n const dataUrl = `data:text/html;charset=utf-8,${encodeURIComponent(htmlContent)}`;\n return pa11y(dataUrl, options) as Promise<Pa11yResults>;\n }\n\n throw new Error(`Unsupported target type: ${target.type}`);\n }\n\n private mapWcagLevel(level: 'A' | 'AA' | 'AAA'): 'WCAG2A' | 'WCAG2AA' | 'WCAG2AAA' {\n const mapping = {\n A: 'WCAG2A' as const,\n AA: 'WCAG2AA' as const,\n AAA: 'WCAG2AAA' as const\n };\n return mapping[level];\n }\n\n private buildSummary(issues: AnalysisResult['issues']): AnalysisSummary {\n const bySeverity: Record<Severity, number> = {\n critical: 0,\n serious: 0,\n moderate: 0,\n minor: 0\n };\n\n const byPrinciple: Record<WCAGPrinciple, number> = {\n perceivable: 0,\n operable: 0,\n understandable: 0,\n robust: 0\n };\n\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byRule\n };\n }\n}\n\nexport const createPa11yAdapter = (config?: Pa11yAdapterConfig): Pa11yAdapter => {\n return new Pa11yAdapter(config);\n};\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { Pa11yAdapter } from '@/adapters/pa11y.js';\nimport { Pa11yToolInputSchema, type Pa11yToolInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type { AnalysisResult } from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAdapter: Pa11yAdapter | null = null;\n\nfunction getAdapter(): Pa11yAdapter {\n if (!sharedAdapter) {\n sharedAdapter = new Pa11yAdapter({\n timeout: 30000,\n });\n }\n return sharedAdapter;\n}\n\nasync function disposeAdapter(): Promise<void> {\n if (sharedAdapter) {\n await sharedAdapter.dispose();\n sharedAdapter = null;\n }\n}\n\nprocess.on('SIGINT', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nprocess.on('SIGTERM', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nfunction buildAnalysisTarget(input: Pa11yToolInput): AnalysisTarget {\n if (input.url) {\n return {\n type: 'url',\n value: input.url,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n }\n\n return {\n type: 'html',\n value: input.html!,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n}\n\nfunction buildAnalysisOptions(input: Pa11yToolInput): AnalysisOptions {\n const standardMap: Record<string, 'A' | 'AA' | 'AAA'> = {\n 'WCAG2A': 'A',\n 'WCAG2AA': 'AA',\n 'WCAG2AAA': 'AAA',\n 'WCAG21A': 'A',\n 'WCAG21AA': 'AA',\n 'WCAG21AAA': 'AAA'\n };\n\n const wcagLevel = input.options?.standard\n ? standardMap[input.options.standard] ?? 'AA'\n : 'AA';\n\n return {\n wcagLevel,\n includeWarnings: input.options?.includeWarnings ?? true,\n };\n}\n\ninterface Pa11yToolOutput {\n success: boolean;\n target: string;\n issueCount: number;\n issues: AnalysisResult['issues'];\n summary: AnalysisResult['summary'];\n metadata?: AnalysisResult['metadata'] | undefined;\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(result: AnalysisResult): Pa11yToolOutput {\n return {\n success: result.success,\n target: result.target,\n issueCount: result.issues.length,\n issues: result.issues,\n summary: result.summary,\n metadata: result.metadata,\n duration: result.duration,\n error: result.error,\n };\n}\n\nconst handlePa11yAnalysis = withToolContext<Pa11yToolInput>(\n 'analyze-with-pa11y',\n async (input, context): Promise<ToolResponse> => {\n context.logger.debug('Building analysis configuration', {\n hasUrl: !!input.url,\n hasHtml: !!input.html,\n standard: input.options?.standard ?? 'WCAG21AA',\n });\n\n const adapter = getAdapter();\n\n const isAvailable = await adapter.isAvailable();\n if (!isAvailable) {\n return createErrorResponse(\n new Error('Pa11y adapter is not available. Browser may have failed to launch.')\n );\n }\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n context.logger.info('Starting Pa11y analysis', {\n targetType: target.type,\n target: target.type === 'url' ? target.value : '[html content]',\n });\n\n const result = await adapter.analyze(target, options);\n\n if (!result.success) {\n context.logger.warn('Analysis completed with errors', {\n error: result.error,\n });\n }\n\n const output = formatOutput(result);\n return createJsonResponse(output, !result.success);\n }\n);\n\nconst Pa11yToolMcpInputSchema = z.object({\n url: z.string().url().optional().describe('URL of the page to analyze'),\n html: z.string().min(1).optional().describe('Raw HTML content to analyze'),\n options: z\n .object({\n standard: z\n .enum(['WCAG2A', 'WCAG2AA', 'WCAG2AAA', 'WCAG21A', 'WCAG21AA', 'WCAG21AAA'])\n .default('WCAG21AA')\n .describe('Accessibility standard to test against'),\n includeWarnings: z\n .boolean()\n .default(true)\n .describe('Include warnings in results'),\n includeNotices: z\n .boolean()\n .default(false)\n .describe('Include notices in results'),\n rootElement: z.string().optional().describe('CSS selector for root element to test'),\n hideElements: z.string().optional().describe('CSS selector for elements to hide'),\n browser: z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for'),\n waitForTimeout: z.number().int().positive().max(60000).optional(),\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(720),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const analyzeWithPa11yTool: ToolDefinition = {\n name: 'analyze-with-pa11y',\n description: `Analyze a web page or HTML content for accessibility issues using Pa11y.\n\nReturns accessibility violations based on WCAG guidelines.\n\nInput options\n- url: URL of the page to analyze\n- html: Raw HTML content to analyze (alternative to url)\n- options.standard: WCAG standard to test against (WCAG2A, WCAG2AA, WCAG2AAA, WCAG21A, WCAG21AA, WCAG21AAA). Default: WCAG21AA\n- options.includeWarnings: Include warnings in results. Default: true\n- options.includeNotices: Include notices in results. Default: false\n- options.rootElement: CSS selector for root element to test\n- options.hideElements: CSS selector for elements to hide from testing\n- options.browser.waitForSelector: CSS selector to wait for before analysis\n- options.browser.viewport: Browser viewport dimensions\n\nOutput:\n- issues: Array of accessibility issues found\n- summary: Issue counts by severity and WCAG principle\n- metadata: Tool version and page info`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n Pa11yToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = Pa11yToolInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handlePa11yAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapter as disposePa11yAdapter };\n","import { BaseNormalizer, type NormalizerContext } from './base.js';\nimport type { AccessibilityIssue, Severity } from '@/types/index.js';\n\nexport interface ESLintIssue {\n ruleId: string | null;\n severity: 1 | 2;\n message: string;\n line: number;\n column: number;\n endLine?: number | undefined;\n endColumn?: number | undefined;\n nodeType?: string | undefined;\n source?: string | null | undefined;\n}\n\nexport interface ESLintFileResult {\n filePath: string;\n messages: ESLintIssue[];\n errorCount: number;\n warningCount: number;\n}\n\nconst ESLINT_RULE_WCAG_MAP: Record<string, { criterion: string; principle: 'perceivable' | 'operable' | 'understandable' | 'robust' }> = {\n 'vuejs-accessibility/alt-text': { criterion: '1.1.1', principle: 'perceivable' },\n 'vuejs-accessibility/anchor-has-content': { criterion: '2.4.4', principle: 'operable' },\n 'vuejs-accessibility/aria-props': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/aria-role': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/aria-unsupported-elements': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/click-events-have-key-events': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/form-control-has-label': { criterion: '1.3.1', principle: 'perceivable' },\n 'vuejs-accessibility/heading-has-content': { criterion: '1.3.1', principle: 'perceivable' },\n 'vuejs-accessibility/iframe-has-title': { criterion: '2.4.1', principle: 'operable' },\n 'vuejs-accessibility/interactive-supports-focus': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/label-has-for': { criterion: '1.3.1', principle: 'perceivable' },\n 'vuejs-accessibility/media-has-caption': { criterion: '1.2.2', principle: 'perceivable' },\n 'vuejs-accessibility/mouse-events-have-key-events': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/no-access-key': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/no-autofocus': { criterion: '2.4.3', principle: 'operable' },\n 'vuejs-accessibility/no-distracting-elements': { criterion: '2.2.2', principle: 'operable' },\n 'vuejs-accessibility/no-onchange': { criterion: '3.2.2', principle: 'understandable' },\n 'vuejs-accessibility/no-redundant-roles': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/no-static-element-interactions': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/role-has-required-aria-props': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/tabindex-no-positive': { criterion: '2.4.3', principle: 'operable' }\n};\n\nexport class ESLintNormalizer extends BaseNormalizer<ESLintFileResult[]> {\n normalize(results: ESLintFileResult[], context: NormalizerContext): AccessibilityIssue[] {\n const issues: AccessibilityIssue[] = [];\n\n for (const fileResult of results) {\n for (const message of fileResult.messages) {\n if (!message.ruleId) continue;\n\n const issue = this.normalizeIssue(message, fileResult.filePath, context);\n if (issue) {\n issues.push(issue);\n }\n }\n }\n\n return issues;\n }\n\n private normalizeIssue(\n message: ESLintIssue,\n filePath: string,\n _context: NormalizerContext\n ): AccessibilityIssue | null {\n if (!message.ruleId) return null;\n\n const wcagInfo = this.getWcagInfo(message.ruleId);\n\n const baseIssue = {\n id: this.generateIssueId('eslint-vuejs-a11y', message.ruleId, `${filePath}:${message.line}:${message.column}`),\n ruleId: message.ruleId,\n tool: 'eslint-vuejs-a11y' as const,\n severity: this.mapSeverity(message.severity),\n wcag: wcagInfo,\n location: {\n file: filePath,\n line: message.line,\n column: message.column,\n snippet: message.source ?? undefined\n },\n message: message.message,\n confidence: 1\n };\n\n return this.enrichWithHumanContext(baseIssue) as AccessibilityIssue;\n }\n\n private mapSeverity(severity: 1 | 2): Severity {\n return severity === 2 ? 'serious' : 'moderate';\n }\n\n private getWcagInfo(ruleId: string): AccessibilityIssue['wcag'] | undefined {\n const mapping = ESLINT_RULE_WCAG_MAP[ruleId];\n if (!mapping) return undefined;\n\n return {\n criterion: mapping.criterion,\n level: 'A',\n principle: mapping.principle,\n version: '2.1'\n };\n }\n}\n\nexport const eslintNormalizer = new ESLintNormalizer();\n","import { ESLint, type Linter } from 'eslint';\nimport { BaseAdapter, type AdapterConfig } from './base.js';\nimport { eslintNormalizer, type ESLintFileResult, type ESLintIssue } from '@/normalizers/eslint.js';\nimport type {\n AnalysisTarget,\n AnalysisOptions,\n AnalysisResult,\n AnalysisSummary,\n Severity,\n WCAGPrinciple\n} from '@/types/index.js';\n\nexport type ESLintAdapterConfig = AdapterConfig\n\nconst DEFAULT_ESLINT_RULES: Linter.RulesRecord = {\n 'vuejs-accessibility/alt-text': 'error',\n 'vuejs-accessibility/anchor-has-content': 'error',\n 'vuejs-accessibility/aria-props': 'error',\n 'vuejs-accessibility/aria-role': 'error',\n 'vuejs-accessibility/aria-unsupported-elements': 'error',\n 'vuejs-accessibility/click-events-have-key-events': 'error',\n 'vuejs-accessibility/form-control-has-label': 'error',\n 'vuejs-accessibility/heading-has-content': 'error',\n 'vuejs-accessibility/iframe-has-title': 'error',\n 'vuejs-accessibility/interactive-supports-focus': 'error',\n 'vuejs-accessibility/label-has-for': 'error',\n 'vuejs-accessibility/media-has-caption': 'error',\n 'vuejs-accessibility/mouse-events-have-key-events': 'error',\n 'vuejs-accessibility/no-access-key': 'error',\n 'vuejs-accessibility/no-autofocus': 'warn',\n 'vuejs-accessibility/no-distracting-elements': 'error',\n 'vuejs-accessibility/no-onchange': 'warn',\n 'vuejs-accessibility/no-redundant-roles': 'warn',\n 'vuejs-accessibility/no-static-element-interactions': 'error',\n 'vuejs-accessibility/role-has-required-aria-props': 'error',\n 'vuejs-accessibility/tabindex-no-positive': 'error'\n};\n\nexport class ESLintAdapter extends BaseAdapter {\n readonly name = 'eslint-vuejs-a11y';\n readonly version = '2.4.1';\n\n constructor(config: ESLintAdapterConfig = {}) {\n super(config);\n }\n\n async analyze(\n target: AnalysisTarget,\n options?: AnalysisOptions\n ): Promise<AnalysisResult> {\n const startTime = Date.now();\n const targetValue = target.value;\n\n this.logger.info('Starting ESLint a11y analysis', { target: targetValue, type: target.type });\n\n try {\n const eslint = await this.createESLintInstance(options);\n const results = await this.runESLint(eslint, target);\n\n const fileResults: ESLintFileResult[] = results.map((r) => ({\n filePath: r.filePath,\n messages: r.messages.map((m): ESLintIssue => ({\n ruleId: m.ruleId,\n severity: m.severity as 1 | 2,\n message: m.message,\n line: m.line,\n column: m.column,\n endLine: m.endLine,\n endColumn: m.endColumn,\n nodeType: m.nodeType ?? undefined,\n source: r.source\n })),\n errorCount: r.errorCount,\n warningCount: r.warningCount\n }));\n\n const issues = eslintNormalizer.normalize(fileResults, {\n tool: 'eslint-vuejs-a11y'\n });\n\n const duration = Date.now() - startTime;\n\n this.logger.info('ESLint a11y analysis completed', {\n target: targetValue,\n issueCount: issues.length,\n durationMs: duration\n });\n\n return {\n success: true,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'eslint-vuejs-a11y',\n issues,\n summary: this.buildSummary(issues),\n metadata: {\n toolVersion: this.version\n }\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n this.logger.error('ESLint a11y analysis failed', {\n target: targetValue,\n error: error instanceof Error ? error : new Error(errorMessage)\n });\n\n return {\n success: false,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'eslint-vuejs-a11y',\n issues: [],\n summary: this.buildSummary([]),\n error: errorMessage\n };\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n return typeof ESLint === 'function';\n } catch {\n return false;\n }\n }\n\n private async createESLintInstance(options?: AnalysisOptions): Promise<ESLint> {\n const vuePlugin = await import('eslint-plugin-vuejs-accessibility');\n const vueParser = await import('vue-eslint-parser');\n\n const rules = { ...DEFAULT_ESLINT_RULES };\n\n if (options?.rules) {\n for (const rule of options.rules) {\n rules[rule] = 'error';\n }\n }\n\n if (options?.excludeRules) {\n for (const rule of options.excludeRules) {\n rules[rule] = 'off';\n }\n }\n\n const plugin = vuePlugin.default ?? vuePlugin;\n const parser = vueParser.default ?? vueParser;\n\n const baseConfig: Linter.Config[] = [\n {\n files: ['**/*.vue'],\n languageOptions: {\n parser: parser as Linter.Parser,\n parserOptions: {\n ecmaVersion: 'latest',\n sourceType: 'module'\n }\n },\n plugins: {\n 'vuejs-accessibility': plugin as ESLint.Plugin\n },\n rules\n }\n ];\n\n return new ESLint({\n overrideConfigFile: true,\n overrideConfig: baseConfig,\n fix: false\n });\n }\n\n private async runESLint(\n eslint: ESLint,\n target: AnalysisTarget\n ): Promise<ESLint.LintResult[]> {\n if (target.type === 'file') {\n return eslint.lintFiles([target.value]);\n }\n\n if (target.type === 'html') {\n return eslint.lintText(target.value, {\n filePath: 'inline.vue'\n });\n }\n\n throw new Error(`Unsupported target type for ESLint: ${target.type}. Use 'file' or 'html' (for inline Vue code).`);\n }\n\n private buildSummary(issues: AnalysisResult['issues']): AnalysisSummary {\n const bySeverity: Record<Severity, number> = {\n critical: 0,\n serious: 0,\n moderate: 0,\n minor: 0\n };\n\n const byPrinciple: Record<WCAGPrinciple, number> = {\n perceivable: 0,\n operable: 0,\n understandable: 0,\n robust: 0\n };\n\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byRule\n };\n }\n}\n\nexport const createESLintAdapter = (config?: ESLintAdapterConfig): ESLintAdapter => {\n return new ESLintAdapter(config);\n};\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ESLintAdapter } from '@/adapters/eslint.js';\nimport { ESLintA11yToolInputSchema, type ESLintA11yToolInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type { AnalysisResult } from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAdapter: ESLintAdapter | null = null;\n\nfunction getAdapter(): ESLintAdapter {\n if (!sharedAdapter) {\n sharedAdapter = new ESLintAdapter({\n timeout: 30000,\n });\n }\n return sharedAdapter;\n}\n\nasync function disposeAdapter(): Promise<void> {\n if (sharedAdapter) {\n await sharedAdapter.dispose();\n sharedAdapter = null;\n }\n}\n\nprocess.on('SIGINT', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nprocess.on('SIGTERM', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nfunction buildAnalysisTarget(input: ESLintA11yToolInput): AnalysisTarget {\n if (input.files && input.files.length > 0) {\n return {\n type: 'file',\n value: input.files[0]!,\n };\n }\n\n if (input.directory) {\n return {\n type: 'file',\n value: input.directory,\n };\n }\n\n return {\n type: 'html',\n value: input.code!,\n };\n}\n\nfunction buildAnalysisOptions(_input: ESLintA11yToolInput): AnalysisOptions {\n return {\n wcagLevel: 'AA',\n includeWarnings: true,\n };\n}\n\ninterface ESLintToolOutput {\n success: boolean;\n target: string;\n issueCount: number;\n issues: AnalysisResult['issues'];\n summary: AnalysisResult['summary'];\n metadata?: AnalysisResult['metadata'] | undefined;\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(result: AnalysisResult): ESLintToolOutput {\n return {\n success: result.success,\n target: result.target,\n issueCount: result.issues.length,\n issues: result.issues,\n summary: result.summary,\n metadata: result.metadata,\n duration: result.duration,\n error: result.error,\n };\n}\n\nconst handleESLintAnalysis = withToolContext<ESLintA11yToolInput>(\n 'analyze-with-eslint',\n async (input, context): Promise<ToolResponse> => {\n context.logger.debug('Building analysis configuration', {\n hasFiles: !!(input.files && input.files.length > 0),\n hasDirectory: !!input.directory,\n hasCode: !!input.code,\n });\n\n const adapter = getAdapter();\n\n const isAvailable = await adapter.isAvailable();\n if (!isAvailable) {\n return createErrorResponse(\n new Error('ESLint adapter is not available.')\n );\n }\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n context.logger.info('Starting ESLint analysis', {\n targetType: target.type,\n target: target.type === 'file' ? target.value : '[inline code]',\n });\n\n const result = await adapter.analyze(target, options);\n\n if (!result.success) {\n context.logger.warn('Analysis completed with errors', {\n error: result.error,\n });\n }\n\n const output = formatOutput(result);\n return createJsonResponse(output, !result.success);\n }\n);\n\nconst ESLintToolMcpInputSchema = z.object({\n files: z\n .array(z.string())\n .min(1)\n .optional()\n .describe('Array of file paths to lint'),\n directory: z.string().optional().describe('Directory path to lint recursively'),\n code: z.string().optional().describe('Inline Vue component code to lint'),\n options: z\n .object({\n rules: z\n .record(\n z.string(),\n z.union([z.enum(['off', 'warn', 'error']), z.number().int().min(0).max(2)])\n )\n .optional()\n .describe('Override specific rule configurations'),\n fix: z\n .literal(false)\n .default(false)\n .describe('Fix mode is disabled - MCP only reports issues'),\n })\n .optional(),\n});\n\nexport const analyzeWithESLintTool: ToolDefinition = {\n name: 'analyze-with-eslint',\n description: `Analyze Vue.js files for accessibility issues using ESLint with eslint-plugin-vuejs-accessibility.\n\nPerforms static code analysis of Vue components.\n\nInput options:\n- files: Array of file paths to lint (must be .vue files)\n- directory: Directory path to lint recursively\n- code: Inline Vue component code to lint\n- options.rules: Override specific rule configurations (off, warn, error, or 0-2)\n- options.fix: Fix mode (always disabled - MCP only reports issues)\n\nOutput:\n- issues: Array of accessibility issues found\n- summary: Issue counts by severity and WCAG principle\n- metadata: Tool version info`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n ESLintToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = ESLintA11yToolInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handleESLintAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapter as disposeESLintAdapter };\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { AxeAdapter } from '@/adapters/axe.js';\nimport { Pa11yAdapter } from '@/adapters/pa11y.js';\nimport { CombinedAnalysisInputSchema, type CombinedAnalysisInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type {\n AnalysisResult,\n AccessibilityIssue,\n CombinedAnalysisResult,\n ToolSource,\n Severity,\n WCAGPrinciple\n} from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAxeAdapter: AxeAdapter | null = null;\nlet sharedPa11yAdapter: Pa11yAdapter | null = null;\n\nfunction getAxeAdapter(): AxeAdapter {\n if (!sharedAxeAdapter) {\n sharedAxeAdapter = new AxeAdapter({ headless: true, timeout: 30000 });\n }\n return sharedAxeAdapter;\n}\n\nfunction getPa11yAdapter(): Pa11yAdapter {\n if (!sharedPa11yAdapter) {\n sharedPa11yAdapter = new Pa11yAdapter({ timeout: 30000 });\n }\n return sharedPa11yAdapter;\n}\n\nasync function disposeAdapters(): Promise<void> {\n await Promise.all([\n sharedAxeAdapter?.dispose(),\n sharedPa11yAdapter?.dispose()\n ]);\n sharedAxeAdapter = null;\n sharedPa11yAdapter = null;\n}\n\nfunction buildAnalysisTarget(input: CombinedAnalysisInput): AnalysisTarget {\n if (input.url) {\n return {\n type: 'url',\n value: input.url,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n }\n\n return {\n type: 'html',\n value: input.html!,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n}\n\nfunction buildAnalysisOptions(input: CombinedAnalysisInput): AnalysisOptions {\n return {\n wcagLevel: input.options?.wcagLevel ?? 'AA',\n includeWarnings: true,\n };\n}\n\nfunction generateIssueFingerprint(issue: AccessibilityIssue): string {\n const parts = [\n issue.ruleId,\n issue.wcag?.criterion ?? 'no-wcag',\n issue.location.selector ?? issue.location.file ?? 'no-location',\n issue.message.substring(0, 50)\n ];\n return parts.join('|');\n}\n\nfunction deduplicateIssues(issues: AccessibilityIssue[]): AccessibilityIssue[] {\n const seen = new Map<string, AccessibilityIssue>();\n\n for (const issue of issues) {\n const fingerprint = generateIssueFingerprint(issue);\n\n if (!seen.has(fingerprint)) {\n seen.set(fingerprint, issue);\n } else {\n const existing = seen.get(fingerprint)!;\n\n if (issue.severity === 'critical' && existing.severity !== 'critical') {\n seen.set(fingerprint, issue);\n } else if (issue.confidence && existing.confidence && issue.confidence > existing.confidence) {\n seen.set(fingerprint, issue);\n }\n }\n }\n\n return Array.from(seen.values());\n}\n\nfunction groupByWCAG(issues: AccessibilityIssue[]): Record<string, AccessibilityIssue[]> {\n const grouped: Record<string, AccessibilityIssue[]> = {};\n\n for (const issue of issues) {\n const key = issue.wcag?.criterion ?? 'unknown';\n if (!grouped[key]) {\n grouped[key] = [];\n }\n grouped[key]!.push(issue);\n }\n\n return grouped;\n}\n\nfunction buildCombinedSummary(\n issues: AccessibilityIssue[],\n _toolsUsed: ToolSource[]\n): CombinedAnalysisResult['summary'] {\n const bySeverity: Record<Severity, number> = {\n critical: 0,\n serious: 0,\n moderate: 0,\n minor: 0\n };\n\n const byPrinciple: Record<WCAGPrinciple, number> = {\n perceivable: 0,\n operable: 0,\n understandable: 0,\n robust: 0\n };\n\n const byTool: Record<ToolSource, number> = {\n 'axe-core': 0,\n 'pa11y': 0,\n };\n\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byTool[issue.tool]++;\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byTool,\n byRule\n };\n}\n\ninterface CombinedToolOutput {\n success: boolean;\n target: string;\n toolsUsed: ToolSource[];\n issueCount: number;\n deduplicatedCount: number;\n issues: AccessibilityIssue[];\n issuesByWCAG: Record<string, AccessibilityIssue[]>;\n summary: CombinedAnalysisResult['summary'];\n individualResults: AnalysisResult[];\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(\n result: CombinedAnalysisResult,\n deduplicatedCount: number,\n issuesByWCAG: Record<string, AccessibilityIssue[]>\n): CombinedToolOutput {\n return {\n success: result.success,\n target: result.target,\n toolsUsed: result.toolsUsed,\n issueCount: result.issues.length,\n deduplicatedCount,\n issues: result.issues,\n issuesByWCAG,\n summary: result.summary,\n individualResults: result.individualResults ?? [],\n duration: result.duration,\n error: result.error\n };\n}\n\nconst handleCombinedAnalysis = withToolContext<CombinedAnalysisInput>(\n 'analyze-all',\n async (input, context): Promise<ToolResponse> => {\n const startTime = Date.now();\n const toolsToRun = input.tools ?? ['axe-core', 'pa11y'];\n const shouldDeduplicate = input.options?.deduplicateResults ?? true;\n\n context.logger.info('Starting combined web analysis', {\n tools: toolsToRun,\n deduplicate: shouldDeduplicate,\n hasUrl: !!input.url,\n hasHtml: !!input.html\n });\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n const results: AnalysisResult[] = [];\n const errors: string[] = [];\n\n const analysisPromises: Promise<void>[] = [];\n\n if (toolsToRun.includes('axe-core')) {\n analysisPromises.push(\n (async () => {\n try {\n const adapter = getAxeAdapter();\n const result = await adapter.analyze(target, options);\n results.push(result);\n context.logger.debug('Axe analysis completed', { issueCount: result.issues.length });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n errors.push(`Axe: ${msg}`);\n context.logger.error('Axe analysis failed', {\n error: error instanceof Error ? error : new Error(String(error))\n });\n }\n })()\n );\n }\n\n if (toolsToRun.includes('pa11y')) {\n analysisPromises.push(\n (async () => {\n try {\n const adapter = getPa11yAdapter();\n const result = await adapter.analyze(target, options);\n results.push(result);\n context.logger.debug('Pa11y analysis completed', { issueCount: result.issues.length });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n errors.push(`Pa11y: ${msg}`);\n context.logger.error('Pa11y analysis failed', {\n error: error instanceof Error ? error : new Error(String(error))\n });\n }\n })()\n );\n }\n\n await Promise.all(analysisPromises);\n\n const allIssues = results.flatMap(r => r.issues);\n const originalCount = allIssues.length;\n\n const finalIssues = shouldDeduplicate\n ? deduplicateIssues(allIssues)\n : allIssues;\n\n const issuesByWCAG = groupByWCAG(finalIssues);\n const duration = Date.now() - startTime;\n\n context.logger.info('Combined analysis completed', {\n totalIssues: originalCount,\n deduplicatedIssues: finalIssues.length,\n toolsRun: results.length,\n errors: errors.length,\n durationMs: duration\n });\n\n const combinedResult: CombinedAnalysisResult = {\n success: errors.length === 0,\n timestamp: new Date().toISOString(),\n duration,\n target: target.value,\n toolsUsed: results.map(r => r.tool),\n issues: finalIssues,\n summary: buildCombinedSummary(finalIssues, toolsToRun),\n individualResults: results,\n error: errors.length > 0 ? errors.join('; ') : undefined\n };\n\n const output = formatOutput(combinedResult, originalCount, issuesByWCAG);\n return createJsonResponse(output, !combinedResult.success);\n }\n);\n\nconst CombinedToolMcpInputSchema = z.object({\n url: z.string().url().optional().describe('URL of the page to analyze'),\n html: z.string().min(1).optional().describe('Raw HTML content to analyze'),\n tools: z\n .array(z.enum(['axe-core', 'pa11y']))\n .min(1)\n .default(['axe-core', 'pa11y'])\n .describe('Tools to run for web analysis'),\n options: z\n .object({\n wcagLevel: z\n .enum(['A', 'AA', 'AAA'])\n .default('AA')\n .describe('WCAG conformance level'),\n deduplicateResults: z\n .boolean()\n .default(true)\n .describe('Merge similar issues from different tools'),\n browser: z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for'),\n waitForTimeout: z.number().int().positive().max(60000).optional(),\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(720),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const analyzeAllTool: ToolDefinition = {\n name: 'analyze-all',\n description: `Run multiple accessibility analysis tools in parallel and combine results.\n\nExecutes axe-core and Pa11y for web analysis (URL/HTML). Use analyze-with-eslint separately for Vue source code analysis.\n\nInput options:\n- url: URL of the page to analyze (required for web analysis)\n- html: Raw HTML content (alternative to url for web analysis)\n- tools: Array of tools to run ['axe-core', 'pa11y']. Default: ['axe-core', 'pa11y']\n- options.wcagLevel: WCAG level (A, AA, AAA). Default: AA\n- options.deduplicateResults: Merge similar issues from different tools. Default: true\n- options.browser.waitForSelector: CSS selector to wait for\n- options.browser.viewport: Browser viewport dimensions\n\nOutput:\n- issues: Combined and deduplicated accessibility issues\n- issuesByWCAG: Issues grouped by WCAG criterion\n- summary: Aggregated counts by severity, principle, and tool\n- individualResults: Full results from each tool\n- deduplicatedCount: Number of duplicate issues removed\n\nNote: For Vue source code analysis, use analyze-with-eslint separately.`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n CombinedToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = CombinedAnalysisInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handleCombinedAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapters as disposeAnalyzeAllAdapters };\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { logger } from \"@/utils/logger.js\";\nimport {\n analyzeWithAxeTool,\n analyzeWithPa11yTool,\n analyzeWithESLintTool,\n analyzeAllTool,\n disposeAxeAdapter,\n disposePa11yAdapter,\n disposeESLintAdapter,\n disposeAnalyzeAllAdapters\n} from \"@/tools/index.js\";\n\nconst server = new McpServer({\n name: 'AI-ccesibility',\n version: '0.1.0'\n});\n\nfunction registerTools(): void {\n analyzeWithAxeTool.register(server);\n logger.info('Registered tool: analyze-with-axe');\n\n analyzeWithPa11yTool.register(server);\n logger.info('Registered tool: analyze-with-pa11y');\n\n analyzeWithESLintTool.register(server);\n logger.info('Registered tool: analyze-with-eslint');\n\n analyzeAllTool.register(server);\n logger.info('Registered tool: analyze-all');\n}\n\nasync function main(): Promise<void> {\n logger.info('Starting AI-ccesibility Server', {\n version: '0.1.0',\n tools: ['analyze-with-axe', 'analyze-with-pa11y', 'analyze-with-eslint', 'analyze-all']\n });\n\n registerTools();\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n logger.info('AI-ccesibility Server connected and ready');\n}\n\nasync function shutdown(): Promise<void> {\n logger.info('Shutting down AI-ccesibility Server');\n\n await Promise.all([\n disposeAxeAdapter(),\n disposePa11yAdapter(),\n disposeESLintAdapter(),\n disposeAnalyzeAllAdapters()\n ]);\n\n logger.info('All adapters disposed');\n process.exit(0);\n}\n\nprocess.on('SIGINT', shutdown);\nprocess.on('SIGTERM', shutdown);\n\nmain().catch((error: unknown) => {\n logger.error('Failed to start MCP server', {\n error: error instanceof Error ? error : new Error(String(error))\n });\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/logger.ts","../src/tools/base.ts","../src/adapters/base.ts","../src/adapters/axe.ts","../src/types/accessibility.ts","../src/types/tool-inputs.ts","../src/tools/axe.ts","../src/data/wcag-criteria.json","../src/utils/wcag-context.ts","../src/normalizers/base.ts","../src/normalizers/pa11y.ts","../src/adapters/pa11y.ts","../src/tools/pa11y.ts","../src/normalizers/eslint.ts","../src/adapters/eslint.ts","../src/tools/eslint.ts","../src/tools/analyze-all.ts","../src/server.ts"],"names":["z","server","response","sharedAdapter","getAdapter","disposeAdapter","buildAnalysisTarget","buildAnalysisOptions","formatOutput"],"mappings":";;;;;;;;;;AAYA,IAAM,QAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,IAAkB,MAAA;AAE3D,IAAM,UAAA,GAAa,IAAA;AAAA,EACjB;AAAA,IACE,KAAA,EAAO,QAAA;AAAA,IACP,IAAA,EAAM;AAAA,MACJ,OAAA,EAAS,gBAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACX;AAAA,IACA,SAAA,EAAW,KAAK,gBAAA,CAAiB,OAAA;AAAA,IACjC,UAAA,EAAY;AAAA,MACV,KAAA,EAAO,CAAC,KAAA,MAAW,EAAE,OAAO,KAAA,EAAM;AAAA;AACpC,GACF;AAAA,EACA,IAAA,CAAK,YAAY,CAAC;AACpB,CAAA;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,KAAA,CAAM,SAAiB,OAAA,EAA4B;AACjD,IAAA,UAAA,CAAW,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG,OAAO,CAAA;AAAA,EACzC,CAAA;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,UAAA,CAAW,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG,OAAO,CAAA;AAAA,EACxC,CAAA;AAAA,EAEA,IAAA,CAAK,SAAiB,OAAA,EAA4B;AAChD,IAAA,UAAA,CAAW,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG,OAAO,CAAA;AAAA,EACxC,CAAA;AAAA,EAEA,KAAA,CAAM,SAAiB,OAAA,EAAgD;AACrE,IAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAK,GAAI,WAAW,EAAC;AACvC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,UAAA,CAAW,KAAA;AAAA,QACT;AAAA,UACE,GAAG,IAAA;AAAA,UACH,GAAA,EAAK;AAAA,YACH,SAAS,KAAA,CAAM,OAAA;AAAA,YACf,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,OAAO,KAAA,CAAM;AAAA;AACf,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAChC;AAAA,EACF;AACF,CAAA;AAEO,SAAS,iBAAiB,QAAA,EAAkB;AACjD,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,SAAiB,OAAA,EAA0C;AAC/D,MAAA,MAAA,CAAO,MAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAAA,IACtD,CAAA;AAAA,IAEA,IAAA,CAAK,SAAiB,OAAA,EAA0C;AAC9D,MAAA,MAAA,CAAO,KAAK,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,IAAA,CAAK,SAAiB,OAAA,EAA0C;AAC9D,MAAA,MAAA,CAAO,KAAK,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,KAAA,CAAM,SAAiB,OAAA,EAA8D;AACnF,MAAA,MAAA,CAAO,MAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,UAAU,CAAA;AAAA,IACtD;AAAA,GACF;AACF;AAEO,SAAS,oBAAoB,WAAA,EAAqB;AACvD,EAAA,OAAO;AAAA,IACL,KAAA,CAAM,SAAiB,OAAA,EAA6C;AAClE,MAAA,MAAA,CAAO,MAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,aAAa,CAAA;AAAA,IAC5D,CAAA;AAAA,IAEA,IAAA,CAAK,SAAiB,OAAA,EAA6C;AACjE,MAAA,MAAA,CAAO,KAAK,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,aAAa,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,IAAA,CAAK,SAAiB,OAAA,EAA6C;AACjE,MAAA,MAAA,CAAO,KAAK,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,aAAa,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,KAAA,CAAM,SAAiB,OAAA,EAAiE;AACtF,MAAA,MAAA,CAAO,MAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,aAAa,CAAA;AAAA,IAC5D;AAAA,GACF;AACF;AAsBO,SAAS,iBAAA,GAA4B;AAC1C,EAAA,OAAO,OAAO,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACjF;;;AC1GO,SAAS,kBAAA,CAAmB,IAAA,EAAc,OAAA,GAAU,KAAA,EAAqB;AAC9E,EAAA,OAAO;AAAA,IACL,SAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,IAChC;AAAA,GACF;AACF;AAEO,SAAS,kBAAA,CAAsB,IAAA,EAAS,OAAA,GAAU,KAAA,EAAqB;AAC5E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA;AAAA,IAC/D;AAAA,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAA8B;AAChE,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,OAAO,kBAAA,CAAmB,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA;AACrD;AAYO,SAAS,eAAA,CACd,UACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,UAAA,GAAa,iBAAiB,QAAQ,CAAA;AAE5C,EAAA,OAAO,OAAO,KAAA,KAAyC;AACrD,IAAA,MAAM,YAAY,iBAAA,EAAkB;AAEpC,IAAA,UAAA,CAAW,IAAA,CAAK,wBAAA,EAA0B,EAAE,SAAA,EAAW,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,EAAO;AAAA,QAClC,SAAA;AAAA,QACA,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,MAAA,UAAA,CAAW,KAAK,0BAAA,EAA4B;AAAA,QAC1C,SAAA;AAAA,QACA,UAAA,EAAY,QAAA;AAAA,QACZ,OAAA,EAAS,OAAO,OAAA,IAAW;AAAA,OAC5B,CAAA;AAED,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,MAAA,UAAA,CAAW,MAAM,uBAAA,EAAyB;AAAA,QACxC,SAAA;AAAA,QACA,UAAA,EAAY,QAAA;AAAA,QACZ,KAAA,EAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,OAChE,CAAA;AAED,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC;AAAA,EACF,CAAA;AACF;;;ACjEO,IAAe,cAAf,MAA8C;AAAA,EAIzC,MAAA;AAAA,EACA,MAAA;AAAA,EAEV,WAAA,CAAY,MAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,OAAA,EAAS,GAAA;AAAA,MACT,UAAA,EAAY,CAAA;AAAA,MACZ,GAAG;AAAA,KACL;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,mBAAA,CAAoB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAAA,EACzD;AAAA,EAMA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,kBAAkB,CAAA;AAAA,EACtC;AACF,CAAA;;;ACfA,IAAM,YAAA,GAAyC;AAAA,EAC7C,QAAA,EAAU,UAAA;AAAA,EACV,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,aAAA,GAA+C;AAAA,EACnD,GAAA,EAAK,aAAA;AAAA,EACL,GAAA,EAAK,UAAA;AAAA,EACL,GAAA,EAAK,gBAAA;AAAA,EACL,GAAA,EAAK;AACP,CAAA;AAEO,IAAM,UAAA,GAAN,cAAyB,WAAA,CAAY;AAAA,EACjC,IAAA,GAAO,UAAA;AAAA,EACP,OAAA,GAAU,KAAA;AAAA,EAEX,OAAA,GAA0B,IAAA;AAAA,EAC1B,SAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAA2B,EAAC,EAAG;AACzC,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY;AAAA,MACf,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa,CAAC,cAAA,EAAgB,0BAA0B,CAAA;AAAA,MACxD,GAAG;AAAA,KACL;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,CAAQ,MAAA,EAAwB,OAAA,EAAoD;AACxF,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,IAAI,IAAA,GAAoB,IAAA;AAExB,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,4BAAA,EAA8B,EAAE,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAA;AAEvE,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAS,OAAA,EAAQ;AAEnC,MAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAChD;AAEA,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA;AAElC,MAAA,MAAM,UAAA,GAAa,IAAI,YAAA,CAAa,IAAI,CAAA;AACxC,MAAA,IAAA,CAAK,mBAAA,CAAoB,YAAY,OAAO,CAAA;AAE5C,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,OAAA,EAAQ;AACzC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,OAAO,CAAA;AAErD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,oBAAA,EAAsB,EAAE,YAAY,MAAA,CAAO,MAAA,EAAQ,UAAU,CAAA;AAE9E,MAAA,OAAO,KAAK,kBAAA,CAAmB,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAAA,IACxE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,iBAAA,EAAmB,EAAE,OAAuB,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAA;AAEpF,MAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,KAAA,EAAO,OAAO,QAAQ,CAAA;AAAA,IAC5D,CAAA,SAAE;AACA,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,IAAA,CAAK,KAAA,EAAM,CAAE,KAAA,CAAM,MAAM;AAAA,QAAC,CAAC,CAAA;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,GAAgC;AACpC,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AACzB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,gBAAgB,CAAA;AAAA,IACpC;AACA,IAAA,MAAM,MAAM,OAAA,EAAQ;AAAA,EACtB;AAAA,EAEA,MAAc,aAAA,GAA+B;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC5C,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,mBAAmB,CAAA;AACrC,MAAA,IAAA,CAAK,OAAA,GAAU,MAAM,SAAA,CAAU,MAAA,CAAO;AAAA,QACpC,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAA,IAAY,IAAA;AAAA,QACrC,MAAM,IAAA,CAAK,SAAA,CAAU,WAAA,IAAe,CAAC,gBAAgB,0BAA0B;AAAA,OAChF,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,UAAA,CAAW,IAAA,EAAY,MAAA,EAAuC;AAC1E,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK,OAAO,OAAA,IAAW,GAAA;AAElE,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,KAAA;AACH,QAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO;AAAA,UAC5B,SAAA,EAAW,cAAA;AAAA,UACX;AAAA,SACD,CAAA;AACD,QAAA;AAAA,MAEF,KAAK,MAAA;AACH,QAAA,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,EAAO;AAAA,UAClC,SAAA,EAAW,cAAA;AAAA,UACX;AAAA,SACD,CAAA;AACD,QAAA;AAAA,MAEF,KAAK,MAAA;AACH,QAAA,MAAM,IAAA,CAAK,IAAA,CAAK,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI;AAAA,UACxC,SAAA,EAAW,cAAA;AAAA,UACX;AAAA,SACD,CAAA;AACD,QAAA;AAAA;AAGJ,IAAA,IAAI,MAAA,CAAO,SAAS,eAAA,EAAiB;AACnC,MAAA,MAAM,KAAK,eAAA,CAAgB,MAAA,CAAO,QAAQ,eAAA,EAAiB,EAAE,SAAS,CAAA;AAAA,IACxE;AAAA,EACF;AAAA,EAEQ,mBAAA,CAAoB,SAAuB,OAAA,EAAiC;AAClF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,OAAA,EAAS,aAAa,IAAI,CAAA;AACxD,IAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAErB,IAAA,IAAI,OAAA,EAAS,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,OAAA,EAAS,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,SAAS,CAAA,EAAG;AAC5D,MAAA,OAAA,CAAQ,YAAA,CAAa,QAAQ,YAAY,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEQ,YAAY,KAAA,EAAqC;AACvD,IAAA,MAAM,QAAA,GAAW,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW,eAAe,CAAA;AAEjE,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,KAAA,EAAO;AACrC,MAAA,QAAA,CAAS,IAAA,CAAK,SAAA,EAAW,UAAA,EAAY,UAAU,CAAA;AAAA,IACjD;AAEA,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAA,QAAA,CAAS,IAAA,CAAK,UAAA,EAAY,WAAA,EAAa,WAAW,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,gBAAA,CAAiB,SAAqB,OAAA,EAAiD;AAC7F,IAAA,MAAM,SAA+B,EAAC;AACtC,IAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,IAAA,KAAA,MAAW,SAAA,IAAa,QAAQ,UAAA,EAAY;AAC1C,MAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClC,QAAA,MAAA,CAAO,KAAK,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAW,IAAA,EAAM,YAAY,CAAC,CAAA;AAAA,MACpE;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,EAAS,oBAAoB,KAAA,EAAO;AACtC,MAAA,KAAA,MAAW,UAAA,IAAc,QAAQ,UAAA,EAAY;AAC3C,QAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,KAAA,EAAO;AACnC,UAAA,MAAA,CAAO,KAAK,IAAA,CAAK,mBAAA,CAAoB,UAAA,EAAY,IAAA,EAAM,YAAY,CAAC,CAAA;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,kBAAA,CACN,SAAA,EACA,IAAA,EACA,KAAA,EACoB;AACpB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,OAAO,KAAK,CAAA,CAAA;AAAA,MAChB,QAAQ,SAAA,CAAU,EAAA;AAAA,MAClB,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,YAAA,CAAa,SAAA,CAAU,MAAA,IAAU,UAAU,CAAA,IAAK,UAAA;AAAA,MAC1D,IAAA,EAAM,IAAA,CAAK,oBAAA,CAAqB,SAAA,CAAU,IAAI,CAAA;AAAA,MAC9C,QAAA,EAAU,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AAAA,MACnC,SAAS,SAAA,CAAU,IAAA;AAAA,MACnB,cAAc,SAAA,CAAU,WAAA;AAAA,MACxB,gBAAA,EAAkB,IAAA,CAAK,uBAAA,CAAwB,IAAI,CAAA;AAAA,MACnD,aAAA,EAAe,IAAA,CAAK,kBAAA,CAAmB,SAAS,CAAA;AAAA,MAChD,UAAA,EAAY,CAAA;AAAA,MACZ,SAAA,EAAW,EAAE,SAAA,EAAW,IAAA;AAAK,KAC/B;AAAA,EACF;AAAA,EAEQ,mBAAA,CACN,UAAA,EACA,IAAA,EACA,KAAA,EACoB;AACpB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,kBAAkB,KAAK,CAAA,CAAA;AAAA,MAC3B,QAAQ,UAAA,CAAW,EAAA;AAAA,MACnB,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,OAAA;AAAA,MACV,IAAA,EAAM,IAAA,CAAK,oBAAA,CAAqB,UAAA,CAAW,IAAI,CAAA;AAAA,MAC/C,QAAA,EAAU,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AAAA,MACnC,OAAA,EAAS,CAAA,kBAAA,EAAqB,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,MAC7C,cAAc,UAAA,CAAW,WAAA;AAAA,MACzB,gBAAA,EAAkB,IAAA,CAAK,uBAAA,CAAwB,IAAI,CAAA;AAAA,MACnD,aAAA,EAAe,IAAA,CAAK,kBAAA,CAAmB,UAAU,CAAA;AAAA,MACjD,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW,EAAE,UAAA,EAAY,IAAA;AAAK,KAChC;AAAA,EACF;AAAA,EAEQ,gBAAgB,IAAA,EAAiC;AACvD,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,MAC9B,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA;AAAA,MAC3B,OAAA,EAAS,IAAA,CAAK,IAAA,EAAM,SAAA,CAAU,GAAG,GAAG;AAAA,KACtC;AAAA,EACF;AAAA,EAEQ,qBAAqB,IAAA,EAA2C;AACtE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA;AAE5C,IAAA,OAAO;AAAA,MACL,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,SAAA,EAAW,aAAA,CAAc,SAAS,CAAA,IAAK,aAAA;AAAA,MACvC,SAAS,OAAA,CAAQ;AAAA,KACnB;AAAA,EACF;AAAA,EAEQ,cAAc,IAAA,EAAoC;AACxD,IAAA,MAAM,SAAA,GAAY,gBAAA;AAClB,IAAA,MAAM,YAAA,GAAe,oBAAA;AAErB,IAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAA,IAAI,KAAA,GAAmB,GAAA;AACvB,IAAA,IAAI,OAAA,GAAiC,KAAA;AAErC,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AACnC,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,CAAC,CAAA,EAAG;AACzB,QAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,QAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,UAAA,SAAA,GAAY,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,QAC1D;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA;AACzC,MAAA,IAAI,UAAA,IAAc,UAAA,CAAW,CAAC,CAAA,EAAG;AAC/B,QAAA,MAAM,QAAA,GAAW,UAAA,CAAW,CAAC,CAAA,CAAE,WAAA,EAAY;AAC3C,QAAA,IAAI,QAAA,KAAa,GAAA,IAAO,QAAA,KAAa,IAAA,IAAQ,aAAa,KAAA,EAAO;AAC/D,UAAA,KAAA,GAAQ,QAAA;AAAA,QACV;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG,OAAA,GAAU,KAAA;AAClC,MAAA,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,EAAG,OAAA,GAAU,KAAA;AAAA,IACpC;AAEA,IAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAEvB,IAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,OAAA,EAAQ;AAAA,EACrC;AAAA,EAEQ,wBAAwB,IAAA,EAA4B;AAC1D,IAAA,MAAM,UAAoB,EAAC;AAE3B,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,GAAA,IAAO,EAAC,EAAG;AAClC,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,GAAA,IAAO,EAAC,EAAG;AAClC,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG;AACnC,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,mBACN,MAAA,EAQA;AACA,IAAA,MAAM,KAAA,uBAOE,GAAA,EAAI;AAEZ,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAG,EAAE,WAAA,EAAY;AAC/C,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAA,CAAG,WAAA,EAAY;AAEjC,IAAA,IACE,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IACpB,GAAG,QAAA,CAAS,MAAM,CAAA,IAClB,EAAA,CAAG,SAAS,OAAO,CAAA,IACnB,EAAA,CAAG,QAAA,CAAS,KAAK,CAAA,EACjB;AACA,MAAA,KAAA,CAAM,IAAI,eAAe,CAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,EAAA,CAAG,QAAA,CAAS,UAAU,CAAA,IAAK,EAAA,CAAG,QAAA,CAAS,OAAO,CAAA,IAAK,EAAA,CAAG,QAAA,CAAS,UAAU,CAAA,EAAG;AAC9E,MAAA,KAAA,CAAM,IAAI,eAAe,CAAA;AACzB,MAAA,KAAA,CAAM,IAAI,gBAAgB,CAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,GAAG,QAAA,CAAS,OAAO,KAAK,EAAA,CAAG,QAAA,CAAS,UAAU,CAAA,EAAG;AACnD,MAAA,KAAA,CAAM,IAAI,YAAY,CAAA;AACtB,MAAA,KAAA,CAAM,IAAI,aAAa,CAAA;AAAA,IACzB;AAEA,IAAA,IAAI,EAAA,CAAG,QAAA,CAAS,SAAS,CAAA,IAAK,EAAA,CAAG,QAAA,CAAS,UAAU,CAAA,IAAK,EAAA,CAAG,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5E,MAAA,KAAA,CAAM,IAAI,eAAe,CAAA;AACzB,MAAA,KAAA,CAAM,IAAI,WAAW,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,KAAA,CAAM,IAAI,eAAe,CAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EACzB;AAAA,EAEQ,kBAAA,CACN,MAAA,EACA,MAAA,EACA,UAAA,EACA,QAAA,EACgB;AAChB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AAE5C,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,QAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA,EAAM,UAAA;AAAA,MACN,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,WAAA,EAAa,WAAW,UAAA,EAAY,OAAA;AAAA,QACpC,WAAA,EAAa,WAAW,eAAA,EAAiB,SAAA;AAAA,QACzC,WAAW,UAAA,CAAW;AAAA;AACxB,KACF;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,MAAA,EAAgB,KAAA,EAAgB,QAAA,EAAkC;AACzF,IAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAE1E,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,QAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA,EAAM,UAAA;AAAA,MACN,QAAQ,EAAC;AAAA,MACT,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,UAAA,EAAY,EAAE,QAAA,EAAU,CAAA,EAAG,SAAS,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,KAAA,EAAO,CAAA;AAAE,OAC/D;AAAA,MACA,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAA,EAAyD;AAChF,IAAA,MAAM,UAAA,GAAa,EAAE,QAAA,EAAU,CAAA,EAAG,SAAS,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AACpE,IAAA,MAAM,WAAA,GAAc,EAAE,WAAA,EAAa,CAAA,EAAG,UAAU,CAAA,EAAG,cAAA,EAAgB,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE;AAChF,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,UAAA,CAAW,MAAM,QAAQ,CAAA,EAAA;AAEzB,MAAA,IAAI,KAAA,CAAM,MAAM,SAAA,EAAW;AACzB,QAAA,WAAA,CAAY,KAAA,CAAM,KAAK,SAAS,CAAA,EAAA;AAAA,MAClC;AAEA,MAAA,MAAA,CAAO,MAAM,MAAM,CAAA,GAAA,CAAK,OAAO,KAAA,CAAM,MAAM,KAAK,CAAA,IAAK,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO;AAAA,MACL,OAAO,MAAA,CAAO,MAAA;AAAA,MACd,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;ACvbO,IAAM,cAAA,GAAiB,EAC3B,IAAA,CAAK,CAAC,YAAY,SAAA,EAAW,UAAA,EAAY,OAAO,CAAC,CAAA,CACjD,QAAA;AAAA,EACC;AACF,CAAA;AAGK,IAAM,eAAA,GAAkB,CAAA,CAC5B,IAAA,CAAK,CAAC,GAAA,EAAK,MAAM,KAAK,CAAC,CAAA,CACvB,QAAA,CAAS,oEAAoE,CAAA;AAGzE,IAAM,mBAAA,GAAsB,EAChC,IAAA,CAAK,CAAC,eAAe,UAAA,EAAY,gBAAA,EAAkB,QAAQ,CAAC,CAAA,CAC5D,QAAA;AAAA,EACC;AACF,CAAA;AAGK,IAAM,gBAAA,GAAmB,EAC7B,IAAA,CAAK,CAAC,YAAY,OAAO,CAAC,CAAA,CAC1B,QAAA,CAAS,qCAAqC,CAAA;AAG1C,IAAM,mBAAA,GAAsB,EAChC,MAAA,EAAO,CACP,MAAM,iBAAA,EAAmB,uCAAuC,CAAA,CAChE,QAAA,CAAS,0DAA0D,CAAA;AAG/D,IAAM,mBAAA,GAAsB,EAChC,MAAA,CAAO;AAAA,EACN,SAAA,EAAW,mBAAA;AAAA,EACX,KAAA,EAAO,eAAA;AAAA,EACP,SAAA,EAAW,mBAAA;AAAA,EACX,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,KAAA,EAAO,KAAK,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,EACzE,OAAO,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gCAAgC,CAAA;AAAA,EACtE,GAAA,EAAK,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4BAA4B;AACxE,CAAC,CAAA,CACA,SAAS,8CAA8C,CAAA;AAGnD,IAAM,mBAAA,GAAsB,EAChC,MAAA,CAAO;AAAA,EACN,UAAU,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oCAAoC,CAAA;AAAA,EAC7E,OAAO,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACnE,MAAM,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,wCAAwC,CAAA;AAAA,EAC7E,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EAClF,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,WAAA,EAAY,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,EACzF,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,yCAAyC;AAC5F,CAAC,CAAA,CACA,SAAS,kDAAkD,CAAA;AAGvD,IAAM,wBAAA,GAA2B,EACrC,MAAA,CAAO;AAAA,EACN,EAAA,EAAI,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,2CAA2C,CAAA;AAAA,EAC1E,MAAA,EAAQ,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,sCAAsC,CAAA;AAAA,EACzE,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,IAAA,EAAM,oBAAoB,QAAA,EAAS;AAAA,EACnC,QAAA,EAAU,mBAAA;AAAA,EACV,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,oCAAoC,CAAA;AAAA,EACxE,cAAc,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,6CAA6C,CAAA;AAAA,EAC1F,gBAAA,EAAkB,CAAA,CACf,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,EAAS,CACT,QAAA,CAAS,kDAAkD,CAAA;AAAA,EAC9D,eAAe,CAAA,CACZ,KAAA;AAAA,IACC,EAAE,IAAA,CAAK;AAAA,MACL,eAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD;AAAA,GACH,CACC,QAAA,EAAS,CACT,QAAA,CAAS,yCAAyC,CAAA;AAAA,EACrD,QAAA,EAAU,CAAA,CACP,IAAA,CAAK,CAAC,UAAA,EAAY,MAAA,EAAQ,QAAA,EAAU,KAAK,CAAC,CAAA,CAC1C,QAAA,EAAS,CACT,SAAS,sCAAsC,CAAA;AAAA,EAClD,iBAAA,EAAmB,CAAA,CAChB,IAAA,CAAK,CAAC,KAAA,EAAO,QAAA,EAAU,MAAM,CAAC,CAAA,CAC9B,QAAA,EAAS,CACT,QAAA,CAAS,yBAAyB,CAAA;AAAA,EACrC,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,6BAA6B,CAAA;AAAA,EACtF,WAAW,CAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,gDAAgD;AAC7F,CAAC,CAAA,CACA,SAAS,qDAAqD,CAAA;AAG1D,IAAM,qBAAA,GAAwB,EAClC,MAAA,CAAO;AAAA,EACN,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,EAC7E,UAAA,EAAY,EACT,MAAA,CAAO;AAAA,IACN,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,IAClD,OAAA,EAAS,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,IACjD,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,IAClD,KAAA,EAAO,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC;AAAA,GAChD,CAAA,CACA,QAAA,CAAS,+BAA+B,CAAA;AAAA,EAC3C,WAAA,EAAa,EACV,MAAA,CAAO;AAAA,IACN,WAAA,EAAa,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,IACrD,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,IAClD,cAAA,EAAgB,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxD,MAAA,EAAQ,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,CAAC;AAAA,GACjD,CAAA,CACA,QAAA,EAAS,CACT,SAAS,+BAA+B,CAAA;AAAA,EAC3C,QAAQ,CAAA,CACL,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,WAAA,EAAa,EACjD,QAAA,EAAS,CACT,SAAS,gCAAgC;AAC9C,CAAC,CAAA,CACA,SAAS,qCAAqC,CAAA;AAG1C,IAAM,oBAAA,GAAuB,EACjC,MAAA,CAAO;AAAA,EACN,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,SAAS,+CAA+C,CAAA;AAAA,EAC7E,WAAW,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gCAAgC,CAAA;AAAA,EAC1E,QAAA,EAAU,CAAA,CACP,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,WAAA,EAAY,CACZ,QAAA,EAAS,CACT,QAAA,CAAS,mCAAmC,CAAA;AAAA,EAC/C,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kDAAkD,CAAA;AAAA,EAC9E,IAAA,EAAM,gBAAA;AAAA,EACN,QAAQ,CAAA,CAAE,KAAA,CAAM,wBAAwB,CAAA,CAAE,SAAS,oCAAoC,CAAA;AAAA,EACvF,OAAA,EAAS,qBAAA;AAAA,EACT,QAAA,EAAU,EACP,MAAA,CAAO;AAAA,IACN,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACjC,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAChC,CAAA,CACA,QAAA,EAAS,CACT,SAAS,uCAAuC,CAAA;AAAA,EACnD,OAAO,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,kCAAkC;AAC1E,CAAC,CAAA,CACA,SAAS,8CAA8C,CAAA;AAGd,EACzC,MAAA,CAAO;AAAA,EACN,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAU,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EAClD,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,SAAA,EAAW,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACnC,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,wBAAwB,CAAA;AAAA,EACxC,OAAA,EAAS,sBAAsB,MAAA,CAAO;AAAA,IACpC,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,CAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,WAAA,EAAa,CAAA,CAAE,QAAA;AAAS,GAC7E,CAAA;AAAA,EACD,iBAAA,EAAmB,EAChB,KAAA,CAAM,oBAAoB,EAC1B,QAAA,EAAS,CACT,SAAS,uCAAuC,CAAA;AAAA,EACnD,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpB,CAAC,CAAA,CACA,SAAS,mDAAmD;;;ACtK/D,IAAM,YAAYA,CAAAA,CAAE,MAAA,GAAS,GAAA,EAAI,CAAE,SAAS,4BAA4B,CAAA;AAExE,IAAM,UAAA,GAAaA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAE3E,IAAM,cAAA,GAAiBA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAE/E,IAAM,cAAA,GAAiBA,EACpB,MAAA,CAAO;AAAA,EACN,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAI,CAAA,CAAE,QAAA,CAAS,0BAA0B,CAAA;AAAA,EACpF,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,GAAG,CAAA,CAAE,QAAA,CAAS,2BAA2B;AACvF,CAAC,CAAA,CACA,SAAS,6BAA6B,CAAA;AAEzC,IAAM,oBAAA,GAAuBA,EAC1B,MAAA,CAAO;AAAA,EACN,iBAAiBA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0CAA0C,CAAA;AAAA,EAC1F,cAAA,EAAgBA,CAAAA,CACb,MAAA,EAAO,CACP,KAAI,CACJ,QAAA,EAAS,CACT,GAAA,CAAI,GAAK,CAAA,CACT,QAAA,EAAS,CACT,SAAS,8CAA8C,CAAA;AAAA,EAC1D,QAAA,EAAU,eAAe,QAAA;AAC3B,CAAC,CAAA,CACA,SAAS,0BAA0B,CAAA;AAE/B,IAAM,kBAAA,GAAqBA,EAC/B,MAAA,CAAO;AAAA,EACN,GAAA,EAAK,UAAU,QAAA,EAAS;AAAA,EACxB,IAAA,EAAM,WAAW,QAAA,EAAS;AAAA,EAC1B,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,WAAW,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA,CAAE,SAAS,iCAAiC,CAAA;AAAA,IACnF,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,IAC7E,YAAA,EAAcA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,yBAAyB,CAAA;AAAA,IAC/E,iBAAA,EAAmBA,EAChB,OAAA,EAAQ,CACR,QAAQ,KAAK,CAAA,CACb,SAAS,yCAAyC,CAAA;AAAA,IACrD,UAAUA,CAAAA,CACP,MAAA,GACA,QAAA,EAAS,CACT,SAAS,oDAAoD,CAAA;AAAA,IAChE,OAAA,EAAS,qBAAqB,QAAA;AAAS,GACxC,EACA,QAAA;AACL,CAAC,CAAA,CACA,OAAO,CAAC,IAAA,KAAS,KAAK,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW;AAAA,EACnE,OAAA,EAAS;AACX,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,IAAA,KAAS,EAAE,KAAK,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,IAAA,KAAS,MAAA,CAAA,EAAY;AAAA,EACtE,OAAA,EAAS;AACX,CAAC,CAAA,CACA,SAAS,2CAA2C,CAAA;AAIhD,IAAM,oBAAA,GAAuBA,EACjC,MAAA,CAAO;AAAA,EACN,GAAA,EAAK,UAAU,QAAA,EAAS;AAAA,EACxB,IAAA,EAAM,WAAW,QAAA,EAAS;AAAA,EAC1B,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,UAAUA,CAAAA,CACP,IAAA,CAAK,CAAC,QAAA,EAAU,WAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,WAAW,CAAC,CAAA,CAC1E,OAAA,CAAQ,UAAU,CAAA,CAClB,SAAS,wCAAwC,CAAA;AAAA,IACpD,eAAA,EAAiBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA,CAAE,SAAS,6BAA6B,CAAA;AAAA,IACjF,cAAA,EAAgBA,EAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA,CAAE,SAAS,4BAA4B,CAAA;AAAA,IAChF,aAAaA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uCAAuC,CAAA;AAAA,IACnF,cAAcA,CAAAA,CACX,MAAA,GACA,QAAA,EAAS,CACT,SAAS,gDAAgD,CAAA;AAAA,IAC5D,OAAA,EAAS,qBAAqB,QAAA;AAAS,GACxC,EACA,QAAA;AACL,CAAC,CAAA,CACA,OAAO,CAAC,IAAA,KAAS,KAAK,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW;AAAA,EACnE,OAAA,EAAS;AACX,CAAC,CAAA,CACA,MAAA,CAAO,CAAC,IAAA,KAAS,EAAE,KAAK,GAAA,KAAQ,MAAA,IAAa,IAAA,CAAK,IAAA,KAAS,MAAA,CAAA,EAAY;AAAA,EACtE,OAAA,EAAS;AACX,CAAC,CAAA,CACA,SAAS,wCAAwC,CAAA;AAI7C,IAAM,yBAAA,GAA4BA,EACtC,MAAA,CAAO;AAAA,EACN,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EACvF,WAAWA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oCAAoC,CAAA;AAAA,EAC9E,MAAMA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mCAAmC,CAAA;AAAA,EACxE,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,OAAOA,CAAAA,CACJ,MAAA;AAAA,MACCA,EAAE,MAAA,EAAO;AAAA,MACTA,CAAAA,CAAE,MAAM,CAACA,CAAAA,CAAE,KAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAC,CAAA,EAAGA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAC;AAAA,KAC5E,CACC,QAAA,EAAS,CACT,QAAA,CAAS,uCAAuC,CAAA;AAAA,IACnD,GAAA,EAAKA,EACF,OAAA,CAAQ,KAAK,EACb,OAAA,CAAQ,KAAK,CAAA,CACb,QAAA,CAAS,gDAAgD;AAAA,GAC7D,EACA,QAAA;AACL,CAAC,CAAA,CACA,MAAA;AAAA,EACC,CAAC,SAAS,IAAA,CAAK,KAAA,KAAU,UAAa,IAAA,CAAK,SAAA,KAAc,MAAA,IAAa,IAAA,CAAK,IAAA,KAAS,MAAA;AAAA,EACpF,EAAE,SAAS,2CAAA;AACb,CAAA,CACC,SAAS,+CAA+C,CAAA;AAIpD,IAAM,2BAAA,GAA8BA,EACxC,MAAA,CAAO;AAAA,EACN,GAAA,EAAK,UAAU,QAAA,EAAS;AAAA,EACxB,IAAA,EAAM,WAAW,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAOA,EACJ,KAAA,CAAMA,CAAAA,CAAE,KAAK,CAAC,UAAA,EAAY,OAAO,CAAC,CAAC,EACnC,GAAA,CAAI,CAAC,EACL,OAAA,CAAQ,CAAC,YAAY,OAAO,CAAC,CAAA,CAC7B,QAAA,CAAS,+BAA+B,CAAA;AAAA,EAC3C,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,SAAA,EAAW,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA;AAAA,IACvC,kBAAA,EAAoBA,EACjB,OAAA,EAAQ,CACR,QAAQ,IAAI,CAAA,CACZ,SAAS,2CAA2C,CAAA;AAAA,IACvD,OAAA,EAAS,qBAAqB,QAAA;AAAS,GACxC,EACA,QAAA;AACL,CAAC,CAAA,CACA,MAAA;AAAA,EACC,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,KAAQ,MAAA,IAAa,KAAK,IAAA,KAAS,MAAA;AAAA,EAClD,EAAE,SAAS,gCAAA;AACb,CAAA,CACC,SAAS,kEAAkE,CAAA;;;ACnI9E,IAAI,aAAA,GAAmC,IAAA;AAEvC,SAAS,UAAA,GAAyB;AAChC,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,aAAA,GAAgB,IAAI,UAAA,CAAW;AAAA,MAC7B,QAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,OAAO,aAAA;AACT;AAEA,eAAe,cAAA,GAAgC;AAC7C,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,cAAc,OAAA,EAAQ;AAC5B,IAAA,aAAA,GAAgB,IAAA;AAAA,EAClB;AACF;AAEA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,EAAA,cAAA,GAAiB,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,OAAA,CAAQ,EAAA,CAAG,WAAW,MAAM;AAC1B,EAAA,cAAA,GAAiB,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,SAAS,oBAAoB,KAAA,EAAqC;AAChE,EAAA,IAAI,MAAM,GAAA,EAAK;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,OAAO,KAAA,CAAM,GAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,eAAA;AAAA,QACzC,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,cAAA;AAAA,QACjC,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS;AAAA;AACpC,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAO,KAAA,CAAM,IAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,eAAA;AAAA,MACzC,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,cAAA;AAAA,MACjC,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS;AAAA;AACpC,GACF;AACF;AAEA,SAAS,qBAAqB,KAAA,EAAsC;AAClE,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,SAAA,IAAa,IAAA;AAAA,IACvC,KAAA,EAAO,MAAM,OAAA,EAAS,KAAA;AAAA,IACtB,YAAA,EAAc,MAAM,OAAA,EAAS,YAAA;AAAA,IAC7B,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,iBAAA,IAAqB;AAAA,GACvD;AACF;AAaA,SAAS,aAAa,MAAA,EAAuC;AAC3D,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAA,EAAY,OAAO,MAAA,CAAO,MAAA;AAAA,IAC1B,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,OAAO,MAAA,CAAO;AAAA,GAChB;AACF;AAEA,IAAM,iBAAA,GAAoB,eAAA;AAAA,EACxB,kBAAA;AAAA,EACA,OAAO,OAAO,OAAA,KAAmC;AAC/C,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,iCAAA,EAAmC;AAAA,MACtD,MAAA,EAAQ,CAAC,CAAC,KAAA,CAAM,GAAA;AAAA,MAChB,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM,IAAA;AAAA,MACjB,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,SAAA,IAAa;AAAA,KACxC,CAAA;AAED,IAAA,MAAM,UAAU,UAAA,EAAW;AAE3B,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,WAAA,EAAY;AAC9C,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,mBAAA;AAAA,QACL,IAAI,MAAM,kEAAkE;AAAA,OAC9E;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,oBAAoB,KAAK,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,qBAAqB,KAAK,CAAA;AAE1C,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,4BAAA,EAA8B;AAAA,MAChD,YAAY,MAAA,CAAO,IAAA;AAAA,MACnB,MAAA,EAAQ,MAAA,CAAO,IAAA,KAAS,KAAA,GAAQ,OAAO,KAAA,GAAQ;AAAA,KAChD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAEpD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,gCAAA,EAAkC;AAAA,QACpD,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,IAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,EACnD;AACF,CAAA;AAEA,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EACrC,GAAA,EAAKA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EACtE,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EACzE,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,SAAA,EAAWA,CAAAA,CACR,IAAA,CAAK,CAAC,GAAA,EAAK,IAAA,EAAM,KAAK,CAAC,CAAA,CACvB,OAAA,CAAQ,IAAI,CAAA,CACZ,SAAS,iCAAiC,CAAA;AAAA,IAC7C,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,IAC7E,YAAA,EAAcA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,yBAAyB,CAAA;AAAA,IAC/E,iBAAA,EAAmBA,EAChB,OAAA,EAAQ,CACR,QAAQ,KAAK,CAAA,CACb,SAAS,yCAAyC,CAAA;AAAA,IACrD,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gCAAgC,CAAA;AAAA,IACzE,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,MACN,iBAAiBA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B,CAAA;AAAA,MAC1E,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,GAAK,CAAA,CAAE,QAAA,EAAS;AAAA,MAChE,QAAA,EAAUA,EACP,MAAA,CAAO;AAAA,QACN,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC/C,MAAA,EAAQA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,GAAG;AAAA,OAChD,EACA,QAAA;AAAS,KACb,EACA,QAAA;AAAS,GACb,EACA,QAAA;AACL,CAAC,CAAA;AAEM,IAAM,kBAAA,GAAqC;AAAA,EAChD,IAAA,EAAM,kBAAA;AAAA,EACN,WAAA,EAAa,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,yCAAA,CAAA;AAAA,EAmBb,SAASC,OAAAA,EAAyB;AAChC,IAAAA,OAAAA,CAAO,IAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,qBAAA,CAAsB,KAAA;AAAA,MACtB,OAAO,KAAA,KAAuE;AAC5E,QAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,SAAA,CAAU,KAAK,CAAA;AAEtD,QAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,UAAA,MAAM,SAAS,WAAA,CAAY,KAAA,CAAM,OAC9B,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAC9C,KAAK,IAAI,CAAA;AACZ,UAAA,MAAMC,YAAW,mBAAA,CAAoB,IAAI,MAAM,CAAA,eAAA,EAAkB,MAAM,EAAE,CAAC,CAAA;AAC1E,UAAA,OAAO,EAAE,OAAA,EAASA,SAAAA,CAAS,OAAA,EAAQ;AAAA,QACrC;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB,WAAA,CAAY,IAAI,CAAA;AACzD,QAAA,OAAO,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA,EAAQ;AAAA,MACrC;AAAA,KACF;AAAA,EACF;AACF,CAAA;;;ACnNA,IAAA,qBAAA,GAAA;AAAA,EACE,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,aAAA;AAAA,IACb,KAAA,EAAS,sBAAA;AAAA,IACT,WAAA,EAAe,iGAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAA,EAAiB,YAAY,CAAA;AAAA,MAC/C,iBAAA,EAAqB,qJAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAY,UAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,kDAAA;AAAA,QACA,wDAAA;AAAA,QACA,oDAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,aAAA;AAAA,IACb,KAAA,EAAS,6BAAA;AAAA,IACT,WAAA,EAAe,iEAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAe,CAAA;AAAA,MACjC,iBAAA,EAAqB,yFAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAY,MAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,yCAAA;AAAA,QACA,wEAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,aAAA;AAAA,IACb,KAAA,EAAS,6BAAA;AAAA,IACT,WAAA,EAAe,mHAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAA,EAAiB,WAAW,CAAA;AAAA,MAC9C,iBAAA,EAAqB,kIAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAY,MAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,+DAAA;AAAA,QACA,8CAAA;AAAA,QACA,yCAAA;AAAA,QACA,8CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,IAAA;AAAA,IACT,SAAA,EAAa,aAAA;AAAA,IACb,KAAA,EAAS,qBAAA;AAAA,IACT,WAAA,EAAe,6FAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,YAAA,EAAc,aAAa,CAAA;AAAA,MAC7C,iBAAA,EAAqB,2GAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAY,MAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,oDAAA;AAAA,QACA,gDAAA;AAAA,QACA,+DAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,UAAA;AAAA,IACb,KAAA,EAAS,SAAA;AAAA,IACT,WAAA,EAAe,wDAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAA,EAAiB,gBAAA,EAAkB,eAAe,CAAA;AAAA,MACpE,iBAAA,EAAqB,+HAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAY,UAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,qEAAA;AAAA,QACA,wDAAA;AAAA,QACA,2DAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,UAAA;AAAA,IACb,KAAA,EAAS,gBAAA;AAAA,IACT,WAAA,EAAe,uEAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAA,EAAiB,eAAe,CAAA;AAAA,MAClD,iBAAA,EAAqB,mGAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAY,QAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,0DAAA;AAAA,QACA,+CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,UAAA;AAAA,IACb,KAAA,EAAS,gBAAA;AAAA,IACT,WAAA,EAAe,mDAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAA,EAAiB,eAAA,EAAiB,WAAW,CAAA;AAAA,MAC/D,iBAAA,EAAqB,4EAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAY,QAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,iCAAA;AAAA,QACA,6CAAA;AAAA,QACA,kDAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,UAAA;AAAA,IACb,KAAA,EAAS,6BAAA;AAAA,IACT,WAAA,EAAe,sFAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAA,EAAiB,WAAW,CAAA;AAAA,MAC9C,iBAAA,EAAqB,gFAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAY,QAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,mEAAA;AAAA,QACA,gEAAA;AAAA,QACA,sEAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,gBAAA;AAAA,IACb,KAAA,EAAS,qBAAA;AAAA,IACT,WAAA,EAAe,+EAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,WAAA,EAAa,eAAe,CAAA;AAAA,MAC9C,iBAAA,EAAqB,4EAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAY,QAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,wDAAA;AAAA,QACA,sDAAA;AAAA,QACA,yDAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAS,GAAA;AAAA,IACT,SAAA,EAAa,QAAA;AAAA,IACb,KAAA,EAAS,2BAAA;AAAA,IACT,WAAA,EAAe,uGAAA;AAAA,IACf,UAAA,EAAc;AAAA,MACZ,aAAA,EAAiB,CAAC,eAAe,CAAA;AAAA,MACjC,iBAAA,EAAqB,gHAAA;AAAA,MACrB,gBAAA,EAAoB;AAAA,KACtB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,MAAA,EAAU,MAAA;AAAA,MACV,QAAA,EAAY,UAAA;AAAA,MACZ,eAAA,EAAmB;AAAA,QACjB,gDAAA;AAAA,QACA,mEAAA;AAAA,QACA,wDAAA;AAAA,QACA,4DAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,OAAA,EAAW;AAAA;AAEf,CAAA;;;ACjNO,IAAM,aAAA,GAAmD,qBAAA;AAEzD,SAAS,eAAe,SAAA,EAAkD;AAC/E,EAAA,OAAO,cAAc,SAAS,CAAA;AAChC;AAEO,SAAS,sBAAA,CACd,QACA,OAAA,EAOA;AACA,EAAA,MAAM,YAAA,GAAe;AAAA,EAAA,EACnB,QAAQ,KAAK,CAAA,OAAA,EAAU,QAAQ,SAAS,CAAA,SAAA,EAAY,QAAQ,KAAK,CAAA;;AAAA,EAEnE,QAAQ,WAAW;;AAAA;AAAA,EAGnB,OAAA,CAAQ,WAAW,iBAAiB;;AAAA;AAAA,EAGpC,OAAA,CAAQ,WAAW,gBAAgB;;AAAA,+BAAA,EAEP,OAAA,CAAQ,YAAY,MAAM;AAAA,eAAA,EACvC,OAAA,CAAQ,YAAY,QAAQ;AAAA,EAAA,CAAA,CACzC,IAAA,EAAK;AAEP,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,gBAAA,EAAkB,QAAQ,WAAA,CAAY,eAAA;AAAA,IACtC,aAAA,EAAe,QAAQ,UAAA,CAAW,aAAA;AAAA,IAClC,QAAA,EAAU,QAAQ,WAAA,CAAY,QAAA;AAAA,IAC9B,iBAAA,EAAmB,QAAQ,WAAA,CAAY;AAAA,GACzC;AACF;;;AC/CO,IAAe,iBAAf,MAAsF;AAAA,EAGjF,eAAA,CAAgB,IAAA,EAAkB,MAAA,EAAgB,QAAA,EAA2B;AACrF,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,eAAe,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,CAAE,SAAS,EAAE,CAAA;AAC1D,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEU,oBAAoB,MAAA,EAAsC;AAClE,IAAA,MAAM,OAAA,GAAoC;AAAA,MACxC,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AACA,IAAA,OAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,CAAA,IAAK,UAAA;AAAA,EAClC;AAAA,EAEU,uBAAuB,KAAA,EAAiE;AAChG,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAM,SAAA,EAAW;AAC1B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,KAAA,EAA2C,OAAO,CAAA;AAE5F,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,cAAc,UAAA,CAAW,YAAA;AAAA,MACzB,kBAAkB,UAAA,CAAW,gBAAA;AAAA,MAC7B,eAAe,UAAA,CAAW,aAAA;AAAA,MAC1B,UAAU,UAAA,CAAW,QAAA;AAAA,MACrB,mBAAmB,UAAA,CAAW;AAAA,KAChC;AAAA,EACF;AAAA,EAEQ,WAAW,GAAA,EAAqB;AACtC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC7B,MAAA,IAAA,GAAA,CAAQ,IAAA,IAAQ,KAAK,IAAA,GAAO,IAAA;AAC5B,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,EACtB;AACF,CAAA;;;ACpDA,IAAM,YAAA,GAAe,+DAAA;AAEd,IAAM,eAAA,GAAN,cAA8B,cAAA,CAA6B;AAAA,EAChE,SAAA,CAAU,QAAsB,OAAA,EAAkD;AAChF,IAAA,OAAO,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,KAAK,cAAA,CAAe,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,EAClE;AAAA,EAEQ,cAAA,CAAe,OAAmB,OAAA,EAAgD;AACxF,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA;AAE9C,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,IAAI,IAAA,CAAK,eAAA,CAAgB,SAAS,KAAA,CAAM,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,MAC5D,QAAQ,KAAA,CAAM,IAAA;AAAA,MACd,IAAA,EAAM,OAAA;AAAA,MACN,QAAA,EAAU,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAAA,MAC3C,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACR,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,MAAM,OAAA,CAAQ;AAAA,OAChB;AAAA,MACA,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAA,EAAY,KAAA,CAAM,IAAA,KAAS,OAAA,GAAU,CAAA,GAAI;AAAA,KAC3C;AAEA,IAAA,OAAO,IAAA,CAAK,uBAAuB,SAAS,CAAA;AAAA,EAC9C;AAAA,EAEQ,kBAAkB,IAAA,EAAgD;AACxE,IAAA,MAAM,OAAA,GAAoC;AAAA,MACxC,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS,UAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,UAAA;AAAA,EAC1B;AAAA,EAEQ,cAAc,IAAA,EAAsD;AAC1E,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,IAAA,MAAM,GAAG,QAAA,EAAU,YAAA,EAAc,YAAY,CAAA,GAAI,KAAA;AACjD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,YAAA,IAAgB,CAAC,cAAc,OAAO,MAAA;AAExD,IAAA,MAAM,KAAA,GAAQ,QAAA;AACd,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAEhD,IAAA,MAAM,YAAA,GAA8C;AAAA,MAClD,UAAA,EAAY,aAAA;AAAA,MACZ,UAAA,EAAY,UAAA;AAAA,MACZ,UAAA,EAAY,gBAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAEA,IAAA,MAAM,SAAA,GAAY,aAAa,YAAY,CAAA;AAC3C,IAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AAEvB,IAAA,OAAO;AAAA,MACL,SAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACF,CAAA;AAEO,IAAM,eAAA,GAAkB,IAAI,eAAA,EAAgB;;;ACrD5C,IAAM,YAAA,GAAN,cAA2B,WAAA,CAAY;AAAA,EACnC,IAAA,GAAO,OAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EAEX,aAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAA6B,EAAC,EAAG;AAC3C,IAAA,KAAA,CAAM,MAAM,CAAA;AACZ,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AAAA,EACvB;AAAA,EAEA,MAAM,OAAA,CACJ,MAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,cAAc,MAAA,CAAO,KAAA;AAE3B,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,yBAAA,EAA2B,EAAE,MAAA,EAAQ,aAAa,CAAA;AAEnE,IAAA,IAAI;AACF,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,OAAO,CAAA;AAC3D,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,YAAY,CAAA;AAExD,MAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ;AAAA,QACvD,IAAA,EAAM,OAAA;AAAA,QACN,SAAA,EAAW,MAAA,CAAO,IAAA,KAAS,KAAA,GAAQ,WAAA,GAAc,KAAA;AAAA,OAClD,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,0BAAA,EAA4B;AAAA,QAC3C,MAAA,EAAQ,WAAA;AAAA,QACR,YAAY,MAAA,CAAO,MAAA;AAAA,QACnB,UAAA,EAAY;AAAA,OACb,CAAA;AAED,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,QAAA;AAAA,QACA,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,OAAA;AAAA,QACN,MAAA;AAAA,QACA,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAAA,QACjC,QAAA,EAAU;AAAA,UACR,aAAa,IAAA,CAAK,OAAA;AAAA,UAClB,WAAW,OAAA,CAAQ;AAAA;AACrB,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,MAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAE1E,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,uBAAA,EAAyB;AAAA,QACzC,MAAA,EAAQ,WAAA;AAAA,QACR,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,MAAM,YAAY;AAAA,OAC/D,CAAA;AAED,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,QAAA;AAAA,QACA,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,OAAA;AAAA,QACN,QAAQ,EAAC;AAAA,QACT,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,EAAE,CAAA;AAAA,QAC7B,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,GAAgC;AACpC,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,KAAA,KAAU,UAAA;AAAA,IAC1B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,iBAAA,CACN,QACA,OAAA,EACc;AACd,IAAA,MAAM,SAAA,GAA0B;AAAA,MAC9B,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,MACrB,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,aAAa,IAAI,CAAA;AAAA,MACtD,eAAA,EAAiB,SAAS,eAAA,IAAmB,IAAA;AAAA,MAC7C,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,SAAA,CAAU,QAAA,GAAW;AAAA,QACnB,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,KAAA;AAAA,QAC/B,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS;AAAA,OAClC;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,eAAA,EAAiB;AACnC,MAAA,SAAA,CAAU,IAAA,GAAO,GAAA;AAAA,IACnB;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,MAAA,SAAA,CAAU,IAAA,GAAO,OAAO,OAAA,CAAQ,OAAA;AAAA,IAClC;AAEA,IAAA,IAAI,IAAA,CAAK,cAAc,kBAAA,EAAoB;AACzC,MAAA,SAAA,CAAU,kBAAA,GAAqB,KAAK,aAAA,CAAc,kBAAA;AAAA,IACpD;AAEA,IAAA,IAAI,OAAA,EAAS,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC9C,MAAA,SAAA,CAAU,QAAQ,OAAA,CAAQ,KAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,OAAA,EAAS,YAAA,IAAgB,OAAA,CAAQ,YAAA,CAAa,SAAS,CAAA,EAAG;AAC5D,MAAA,SAAA,CAAU,SAAS,OAAA,CAAQ,YAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAc,QAAA,CACZ,MAAA,EACA,OAAA,EACuB;AACvB,IAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,cAAc,MAAA,CAAO,KAAA;AAC3B,MAAA,MAAM,OAAA,GAAU,CAAA,6BAAA,EAAgC,kBAAA,CAAmB,WAAW,CAAC,CAAA,CAAA;AAC/E,MAAA,OAAO,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EAC3D;AAAA,EAEQ,aAAa,KAAA,EAA8D;AACjF,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,CAAA,EAAG,QAAA;AAAA,MACH,EAAA,EAAI,SAAA;AAAA,MACJ,GAAA,EAAK;AAAA,KACP;AACA,IAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,EACtB;AAAA,EAEQ,aAAa,MAAA,EAAmD;AACtE,IAAA,MAAM,UAAA,GAAuC;AAAA,MAC3C,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,CAAA;AAAA,MACT,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,WAAA,GAA6C;AAAA,MACjD,WAAA,EAAa,CAAA;AAAA,MACb,QAAA,EAAU,CAAA;AAAA,MACV,cAAA,EAAgB,CAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,UAAA,CAAW,MAAM,QAAQ,CAAA,EAAA;AAEzB,MAAA,IAAI,KAAA,CAAM,MAAM,SAAA,EAAW;AACzB,QAAA,WAAA,CAAY,KAAA,CAAM,KAAK,SAAS,CAAA,EAAA;AAAA,MAClC;AAEA,MAAA,MAAA,CAAO,MAAM,MAAM,CAAA,GAAA,CAAK,OAAO,KAAA,CAAM,MAAM,KAAK,CAAA,IAAK,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO;AAAA,MACL,OAAO,MAAA,CAAO,MAAA;AAAA,MACd,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;;;ACnMA,IAAIC,cAAAA,GAAqC,IAAA;AAEzC,SAASC,WAAAA,GAA2B;AAClC,EAAA,IAAI,CAACD,cAAAA,EAAe;AAClB,IAAAA,cAAAA,GAAgB,IAAI,YAAA,CAAa;AAAA,MAC/B,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,OAAOA,cAAAA;AACT;AAEA,eAAeE,eAAAA,GAAgC;AAC7C,EAAA,IAAIF,cAAAA,EAAe;AACjB,IAAA,MAAMA,eAAc,OAAA,EAAQ;AAC5B,IAAAA,cAAAA,GAAgB,IAAA;AAAA,EAClB;AACF;AAEA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,EAAAE,iBAAe,CAAE,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,OAAA,CAAQ,EAAA,CAAG,WAAW,MAAM;AAC1B,EAAAA,iBAAe,CAAE,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,SAASC,qBAAoB,KAAA,EAAuC;AAClE,EAAA,IAAI,MAAM,GAAA,EAAK;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,OAAO,KAAA,CAAM,GAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,eAAA;AAAA,QACzC,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,cAAA;AAAA,QACjC,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS;AAAA;AACpC,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAO,KAAA,CAAM,IAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,eAAA;AAAA,MACzC,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,cAAA;AAAA,MACjC,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS;AAAA;AACpC,GACF;AACF;AAEA,SAASC,sBAAqB,KAAA,EAAwC;AACpE,EAAA,MAAM,WAAA,GAAkD;AAAA,IACtD,QAAA,EAAU,GAAA;AAAA,IACV,SAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW,GAAA;AAAA,IACX,UAAA,EAAY,IAAA;AAAA,IACZ,WAAA,EAAa;AAAA,GACf;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,EAAS,QAAA,GAC7B,YAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,IAAA,GACvC,IAAA;AAEJ,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,eAAA,IAAmB;AAAA,GACrD;AACF;AAaA,SAASC,cAAa,MAAA,EAAyC;AAC7D,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAA,EAAY,OAAO,MAAA,CAAO,MAAA;AAAA,IAC1B,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,OAAO,MAAA,CAAO;AAAA,GAChB;AACF;AAEA,IAAM,mBAAA,GAAsB,eAAA;AAAA,EAC1B,oBAAA;AAAA,EACA,OAAO,OAAO,OAAA,KAAmC;AAC/C,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,iCAAA,EAAmC;AAAA,MACtD,MAAA,EAAQ,CAAC,CAAC,KAAA,CAAM,GAAA;AAAA,MAChB,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM,IAAA;AAAA,MACjB,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,QAAA,IAAY;AAAA,KACtC,CAAA;AAED,IAAA,MAAM,UAAUJ,WAAAA,EAAW;AAE3B,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,WAAA,EAAY;AAC9C,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,mBAAA;AAAA,QACL,IAAI,MAAM,oEAAoE;AAAA,OAChF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAASE,qBAAoB,KAAK,CAAA;AACxC,IAAA,MAAM,OAAA,GAAUC,sBAAqB,KAAK,CAAA;AAE1C,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,yBAAA,EAA2B;AAAA,MAC7C,YAAY,MAAA,CAAO,IAAA;AAAA,MACnB,MAAA,EAAQ,MAAA,CAAO,IAAA,KAAS,KAAA,GAAQ,OAAO,KAAA,GAAQ;AAAA,KAChD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAEpD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,gCAAA,EAAkC;AAAA,QACpD,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAASC,cAAa,MAAM,CAAA;AAClC,IAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,EACnD;AACF,CAAA;AAEA,IAAM,uBAAA,GAA0BR,EAAE,MAAA,CAAO;AAAA,EACvC,GAAA,EAAKA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EACtE,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EACzE,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,UAAUA,CAAAA,CACP,IAAA,CAAK,CAAC,QAAA,EAAU,WAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,WAAW,CAAC,CAAA,CAC1E,OAAA,CAAQ,UAAU,CAAA,CAClB,SAAS,wCAAwC,CAAA;AAAA,IACpD,eAAA,EAAiBA,EACd,OAAA,EAAQ,CACR,QAAQ,IAAI,CAAA,CACZ,SAAS,6BAA6B,CAAA;AAAA,IACzC,cAAA,EAAgBA,EACb,OAAA,EAAQ,CACR,QAAQ,KAAK,CAAA,CACb,SAAS,4BAA4B,CAAA;AAAA,IACxC,aAAaA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uCAAuC,CAAA;AAAA,IACnF,cAAcA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mCAAmC,CAAA;AAAA,IAChF,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,MACN,iBAAiBA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B,CAAA;AAAA,MAC1E,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,GAAK,CAAA,CAAE,QAAA,EAAS;AAAA,MAChE,QAAA,EAAUA,EACP,MAAA,CAAO;AAAA,QACN,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC/C,MAAA,EAAQA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,GAAG;AAAA,OAChD,EACA,QAAA;AAAS,KACb,EACA,QAAA;AAAS,GACb,EACA,QAAA;AACL,CAAC,CAAA;AAEM,IAAM,oBAAA,GAAuC;AAAA,EAClD,IAAA,EAAM,oBAAA;AAAA,EACN,WAAA,EAAa,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,sCAAA,CAAA;AAAA,EAoBb,SAASC,OAAAA,EAAyB;AAChC,IAAAA,OAAAA,CAAO,IAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,uBAAA,CAAwB,KAAA;AAAA,MACxB,OAAO,KAAA,KAAuE;AAC5E,QAAA,MAAM,WAAA,GAAc,oBAAA,CAAqB,SAAA,CAAU,KAAK,CAAA;AAExD,QAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,UAAA,MAAM,SAAS,WAAA,CAAY,KAAA,CAAM,OAC9B,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAC9C,KAAK,IAAI,CAAA;AACZ,UAAA,MAAMC,YAAW,mBAAA,CAAoB,IAAI,MAAM,CAAA,eAAA,EAAkB,MAAM,EAAE,CAAC,CAAA;AAC1E,UAAA,OAAO,EAAE,OAAA,EAASA,SAAAA,CAAS,OAAA,EAAQ;AAAA,QACrC;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB,WAAA,CAAY,IAAI,CAAA;AAC3D,QAAA,OAAO,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA,EAAQ;AAAA,MACrC;AAAA,KACF;AAAA,EACF;AACF,CAAA;;;AC3MA,IAAM,oBAAA,GAAmI;AAAA,EACvI,8BAAA,EAAgC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,aAAA,EAAc;AAAA,EAC/E,wCAAA,EAA0C,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EACtF,gCAAA,EAAkC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,QAAA,EAAS;AAAA,EAC5E,+BAAA,EAAiC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,QAAA,EAAS;AAAA,EAC3E,+CAAA,EAAiD,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,QAAA,EAAS;AAAA,EAC3F,kDAAA,EAAoD,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EAChG,4CAAA,EAA8C,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,aAAA,EAAc;AAAA,EAC7F,yCAAA,EAA2C,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,aAAA,EAAc;AAAA,EAC1F,sCAAA,EAAwC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EACpF,gDAAA,EAAkD,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EAC9F,mCAAA,EAAqC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,aAAA,EAAc;AAAA,EACpF,uCAAA,EAAyC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,aAAA,EAAc;AAAA,EACxF,kDAAA,EAAoD,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EAChG,mCAAA,EAAqC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EACjF,kCAAA,EAAoC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EAChF,6CAAA,EAA+C,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA,EAAW;AAAA,EAC3F,iCAAA,EAAmC,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,gBAAA,EAAiB;AAAA,EACrF,wCAAA,EAA0C,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,QAAA,EAAS;AAAA,EACpF,oDAAA,EAAsD,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,QAAA,EAAS;AAAA,EAChG,kDAAA,EAAoD,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,QAAA,EAAS;AAAA,EAC9F,0CAAA,EAA4C,EAAE,SAAA,EAAW,OAAA,EAAS,WAAW,UAAA;AAC/E,CAAA;AAEO,IAAM,gBAAA,GAAN,cAA+B,cAAA,CAAmC;AAAA,EACvE,SAAA,CAAU,SAA6B,OAAA,EAAkD;AACvF,IAAA,MAAM,SAA+B,EAAC;AAEtC,IAAA,KAAA,MAAW,cAAc,OAAA,EAAS;AAChC,MAAA,KAAA,MAAW,OAAA,IAAW,WAAW,QAAA,EAAU;AACzC,QAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,QAAA,MAAM,QAAQ,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,UAAA,CAAW,UAAU,OAAO,CAAA;AACvE,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CACN,OAAA,EACA,QAAA,EACA,QAAA,EAC2B;AAC3B,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAA;AAE5B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAA;AAEhD,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,EAAA,EAAI,IAAA,CAAK,eAAA,CAAgB,mBAAA,EAAqB,QAAQ,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,MAC7G,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,IAAA,EAAM,mBAAA;AAAA,MACN,QAAA,EAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,QAAQ,CAAA;AAAA,MAC3C,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,OAAA,EAAS,QAAQ,MAAA,IAAU;AAAA,OAC7B;AAAA,MACA,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,UAAA,EAAY;AAAA,KACd;AAEA,IAAA,OAAO,IAAA,CAAK,uBAAuB,SAAS,CAAA;AAAA,EAC9C;AAAA,EAEQ,YAAY,QAAA,EAA2B;AAC7C,IAAA,OAAO,QAAA,KAAa,IAAI,SAAA,GAAY,UAAA;AAAA,EACtC;AAAA,EAEQ,YAAY,MAAA,EAAwD;AAC1E,IAAA,MAAM,OAAA,GAAU,qBAAqB,MAAM,CAAA;AAC3C,IAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AAErB,IAAA,OAAO;AAAA,MACL,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,KAAA,EAAO,GAAA;AAAA,MACP,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACF,CAAA;AAEO,IAAM,gBAAA,GAAmB,IAAI,gBAAA,EAAiB;;;AC/FrD,IAAM,oBAAA,GAA2C;AAAA,EAC/C,8BAAA,EAAgC,OAAA;AAAA,EAChC,wCAAA,EAA0C,OAAA;AAAA,EAC1C,gCAAA,EAAkC,OAAA;AAAA,EAClC,+BAAA,EAAiC,OAAA;AAAA,EACjC,+CAAA,EAAiD,OAAA;AAAA,EACjD,kDAAA,EAAoD,OAAA;AAAA,EACpD,4CAAA,EAA8C,OAAA;AAAA,EAC9C,yCAAA,EAA2C,OAAA;AAAA,EAC3C,sCAAA,EAAwC,OAAA;AAAA,EACxC,gDAAA,EAAkD,OAAA;AAAA,EAClD,mCAAA,EAAqC,OAAA;AAAA,EACrC,uCAAA,EAAyC,OAAA;AAAA,EACzC,kDAAA,EAAoD,OAAA;AAAA,EACpD,mCAAA,EAAqC,OAAA;AAAA,EACrC,kCAAA,EAAoC,MAAA;AAAA,EACpC,6CAAA,EAA+C,OAAA;AAAA,EAC/C,iCAAA,EAAmC,MAAA;AAAA,EACnC,wCAAA,EAA0C,MAAA;AAAA,EAC1C,oDAAA,EAAsD,OAAA;AAAA,EACtD,kDAAA,EAAoD,OAAA;AAAA,EACpD,0CAAA,EAA4C;AAC9C,CAAA;AAEO,IAAM,aAAA,GAAN,cAA4B,WAAA,CAAY;AAAA,EACpC,IAAA,GAAO,mBAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EAEnB,WAAA,CAAY,MAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,KAAA,CAAM,MAAM,CAAA;AAAA,EACd;AAAA,EAEA,MAAM,OAAA,CACJ,MAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,cAAc,MAAA,CAAO,KAAA;AAE3B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,+BAAA,EAAiC,EAAE,QAAQ,WAAA,EAAa,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,CAAA;AAE5F,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,oBAAA,CAAqB,OAAO,CAAA;AACtD,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,MAAM,CAAA;AAEnD,MAAA,MAAM,WAAA,GAAkC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QAC1D,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,QAAA,EAAU,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAoB;AAAA,UAC5C,QAAQ,CAAA,CAAE,MAAA;AAAA,UACV,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,SAAS,CAAA,CAAE,OAAA;AAAA,UACX,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,QAAQ,CAAA,CAAE,MAAA;AAAA,UACV,SAAS,CAAA,CAAE,OAAA;AAAA,UACX,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,QAAA,EAAU,EAAE,QAAA,IAAY,KAAA,CAAA;AAAA,UACxB,QAAQ,CAAA,CAAE;AAAA,SACZ,CAAE,CAAA;AAAA,QACF,YAAY,CAAA,CAAE,UAAA;AAAA,QACd,cAAc,CAAA,CAAE;AAAA,OAClB,CAAE,CAAA;AAEF,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,CAAU,WAAA,EAAa;AAAA,QACrD,IAAA,EAAM;AAAA,OACP,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,gCAAA,EAAkC;AAAA,QACjD,MAAA,EAAQ,WAAA;AAAA,QACR,YAAY,MAAA,CAAO,MAAA;AAAA,QACnB,UAAA,EAAY;AAAA,OACb,CAAA;AAED,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,QAAA;AAAA,QACA,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,mBAAA;AAAA,QACN,MAAA;AAAA,QACA,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAAA,QACjC,QAAA,EAAU;AAAA,UACR,aAAa,IAAA,CAAK;AAAA;AACpB,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,MAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAE1E,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,6BAAA,EAA+B;AAAA,QAC/C,MAAA,EAAQ,WAAA;AAAA,QACR,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,MAAM,YAAY;AAAA,OAC/D,CAAA;AAED,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,QAAA;AAAA,QACA,MAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAM,mBAAA;AAAA,QACN,QAAQ,EAAC;AAAA,QACT,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,EAAE,CAAA;AAAA,QAC7B,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,GAAgC;AACpC,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,MAAA,KAAW,UAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,qBAAqB,OAAA,EAA4C;AAC7E,IAAA,MAAM,SAAA,GAAY,MAAM,OAAO,mCAAmC,CAAA;AAClE,IAAA,MAAM,SAAA,GAAY,MAAM,OAAO,mBAAmB,CAAA;AAElD,IAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,oBAAA,EAAqB;AAExC,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,KAAA,EAAO;AAChC,QAAA,KAAA,CAAM,IAAI,CAAA,GAAI,OAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,YAAA,EAAc;AACzB,MAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,YAAA,EAAc;AACvC,QAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,UAAU,OAAA,IAAW,SAAA;AACpC,IAAA,MAAM,MAAA,GAAS,UAAU,OAAA,IAAW,SAAA;AAEpC,IAAA,MAAM,UAAA,GAA8B;AAAA,MAClC;AAAA,QACE,KAAA,EAAO,CAAC,UAAU,CAAA;AAAA,QAClB,eAAA,EAAiB;AAAA,UACf,MAAA;AAAA,UACA,aAAA,EAAe;AAAA,YACb,WAAA,EAAa,QAAA;AAAA,YACb,UAAA,EAAY;AAAA;AACd,SACF;AAAA,QACA,OAAA,EAAS;AAAA,UACP,qBAAA,EAAuB;AAAA,SACzB;AAAA,QACA;AAAA;AACF,KACF;AAEA,IAAA,OAAO,IAAI,MAAA,CAAO;AAAA,MAChB,kBAAA,EAAoB,IAAA;AAAA,MACpB,cAAA,EAAgB,UAAA;AAAA,MAChB,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,SAAA,CACZ,MAAA,EACA,MAAA,EAC8B;AAC9B,IAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,MAAA,OAAO,MAAA,CAAO,SAAA,CAAU,CAAC,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO;AAAA,QACnC,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,MAAA,CAAO,IAAI,CAAA,6CAAA,CAA+C,CAAA;AAAA,EACnH;AAAA,EAEQ,aAAa,MAAA,EAAmD;AACtE,IAAA,MAAM,UAAA,GAAuC;AAAA,MAC3C,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,CAAA;AAAA,MACT,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,WAAA,GAA6C;AAAA,MACjD,WAAA,EAAa,CAAA;AAAA,MACb,QAAA,EAAU,CAAA;AAAA,MACV,cAAA,EAAgB,CAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,UAAA,CAAW,MAAM,QAAQ,CAAA,EAAA;AAEzB,MAAA,IAAI,KAAA,CAAM,MAAM,SAAA,EAAW;AACzB,QAAA,WAAA,CAAY,KAAA,CAAM,KAAK,SAAS,CAAA,EAAA;AAAA,MAClC;AAEA,MAAA,MAAA,CAAO,MAAM,MAAM,CAAA,GAAA,CAAK,OAAO,KAAA,CAAM,MAAM,KAAK,CAAA,IAAK,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO;AAAA,MACL,OAAO,MAAA,CAAO,MAAA;AAAA,MACd,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;;;ACpNA,IAAIC,cAAAA,GAAsC,IAAA;AAE1C,SAASC,WAAAA,GAA4B;AACnC,EAAA,IAAI,CAACD,cAAAA,EAAe;AAClB,IAAAA,cAAAA,GAAgB,IAAI,aAAA,CAAc;AAAA,MAChC,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AACA,EAAA,OAAOA,cAAAA;AACT;AAEA,eAAeE,eAAAA,GAAgC;AAC7C,EAAA,IAAIF,cAAAA,EAAe;AACjB,IAAA,MAAMA,eAAc,OAAA,EAAQ;AAC5B,IAAAA,cAAAA,GAAgB,IAAA;AAAA,EAClB;AACF;AAEA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,EAAAE,iBAAe,CAAE,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,OAAA,CAAQ,EAAA,CAAG,WAAW,MAAM;AAC1B,EAAAA,iBAAe,CAAE,OAAA,CAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,SAASC,qBAAoB,KAAA,EAA4C;AACvE,EAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,EAAG;AACzC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,CAAC;AAAA,KACtB;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEA,SAASC,sBAAqB,MAAA,EAA8C;AAC1E,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,IAAA;AAAA,IACX,eAAA,EAAiB;AAAA,GACnB;AACF;AAaA,SAASC,cAAa,MAAA,EAA0C;AAC9D,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,UAAA,EAAY,OAAO,MAAA,CAAO,MAAA;AAAA,IAC1B,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,OAAO,MAAA,CAAO;AAAA,GAChB;AACF;AAEA,IAAM,oBAAA,GAAuB,eAAA;AAAA,EAC3B,qBAAA;AAAA,EACA,OAAO,OAAO,OAAA,KAAmC;AAC/C,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,iCAAA,EAAmC;AAAA,MACtD,UAAU,CAAC,EAAE,MAAM,KAAA,IAAS,KAAA,CAAM,MAAM,MAAA,GAAS,CAAA,CAAA;AAAA,MACjD,YAAA,EAAc,CAAC,CAAC,KAAA,CAAM,SAAA;AAAA,MACtB,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,UAAUJ,WAAAA,EAAW;AAE3B,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,WAAA,EAAY;AAC9C,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,OAAO,mBAAA;AAAA,QACL,IAAI,MAAM,kCAAkC;AAAA,OAC9C;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAASE,qBAAoB,KAAK,CAAA;AACxC,IAAA,MAAM,OAAA,GAAUC,sBAAqB,KAAK,CAAA;AAE1C,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,0BAAA,EAA4B;AAAA,MAC9C,YAAY,MAAA,CAAO,IAAA;AAAA,MACnB,MAAA,EAAQ,MAAA,CAAO,IAAA,KAAS,MAAA,GAAS,OAAO,KAAA,GAAQ;AAAA,KACjD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAEpD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,gCAAA,EAAkC;AAAA,QACpD,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAASC,cAAa,MAAM,CAAA;AAClC,IAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,CAAC,MAAA,CAAO,OAAO,CAAA;AAAA,EACnD;AACF,CAAA;AAEA,IAAM,wBAAA,GAA2BR,EAAE,MAAA,CAAO;AAAA,EACxC,KAAA,EAAOA,CAAAA,CACJ,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,GAAA,CAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,6BAA6B,CAAA;AAAA,EACzC,WAAWA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,oCAAoC,CAAA;AAAA,EAC9E,MAAMA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mCAAmC,CAAA;AAAA,EACxE,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,OAAOA,CAAAA,CACJ,MAAA;AAAA,MACCA,EAAE,MAAA,EAAO;AAAA,MACTA,CAAAA,CAAE,MAAM,CAACA,CAAAA,CAAE,KAAK,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAC,CAAA,EAAGA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAC;AAAA,KAC5E,CACC,QAAA,EAAS,CACT,QAAA,CAAS,uCAAuC,CAAA;AAAA,IACnD,GAAA,EAAKA,EACF,OAAA,CAAQ,KAAK,EACb,OAAA,CAAQ,KAAK,CAAA,CACb,QAAA,CAAS,gDAAgD;AAAA,GAC7D,EACA,QAAA;AACL,CAAC,CAAA;AAEM,IAAM,qBAAA,GAAwC;AAAA,EACnD,IAAA,EAAM,qBAAA;AAAA,EACN,WAAA,EAAa,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,6BAAA,CAAA;AAAA,EAgBb,SAASC,OAAAA,EAAyB;AAChC,IAAAA,OAAAA,CAAO,IAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,wBAAA,CAAyB,KAAA;AAAA,MACzB,OAAO,KAAA,KAAuE;AAC5E,QAAA,MAAM,WAAA,GAAc,yBAAA,CAA0B,SAAA,CAAU,KAAK,CAAA;AAE7D,QAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,UAAA,MAAM,SAAS,WAAA,CAAY,KAAA,CAAM,OAC9B,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAC9C,KAAK,IAAI,CAAA;AACZ,UAAA,MAAMC,YAAW,mBAAA,CAAoB,IAAI,MAAM,CAAA,eAAA,EAAkB,MAAM,EAAE,CAAC,CAAA;AAC1E,UAAA,OAAO,EAAE,OAAA,EAASA,SAAAA,CAAS,OAAA,EAAQ;AAAA,QACrC;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,oBAAA,CAAqB,WAAA,CAAY,IAAI,CAAA;AAC5D,QAAA,OAAO,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA,EAAQ;AAAA,MACrC;AAAA,KACF;AAAA,EACF;AACF,CAAA;AC7KA,IAAI,gBAAA,GAAsC,IAAA;AAC1C,IAAI,kBAAA,GAA0C,IAAA;AAE9C,SAAS,aAAA,GAA4B;AACnC,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,gBAAA,GAAmB,IAAI,UAAA,CAAW,EAAE,UAAU,IAAA,EAAM,OAAA,EAAS,KAAO,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,gBAAA;AACT;AAEA,SAAS,eAAA,GAAgC;AACvC,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,kBAAA,GAAqB,IAAI,YAAA,CAAa,EAAE,OAAA,EAAS,KAAO,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,kBAAA;AACT;AAEA,eAAe,eAAA,GAAiC;AAC9C,EAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,IAChB,kBAAkB,OAAA,EAAQ;AAAA,IAC1B,oBAAoB,OAAA;AAAQ,GAC7B,CAAA;AACD,EAAA,gBAAA,GAAmB,IAAA;AACnB,EAAA,kBAAA,GAAqB,IAAA;AACvB;AAEA,SAASI,qBAAoB,KAAA,EAA8C;AACzE,EAAA,IAAI,MAAM,GAAA,EAAK;AACb,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,OAAO,KAAA,CAAM,GAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,eAAA;AAAA,QACzC,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,cAAA;AAAA,QACjC,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS;AAAA;AACpC,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAO,KAAA,CAAM,IAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,eAAA;AAAA,MACzC,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,cAAA;AAAA,MACjC,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS;AAAA;AACpC,GACF;AACF;AAEA,SAASC,sBAAqB,KAAA,EAA+C;AAC3E,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,SAAA,IAAa,IAAA;AAAA,IACvC,eAAA,EAAiB;AAAA,GACnB;AACF;AAEA,SAAS,yBAAyB,KAAA,EAAmC;AACnE,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,KAAA,CAAM,MAAA;AAAA,IACN,KAAA,CAAM,MAAM,SAAA,IAAa,SAAA;AAAA,IACzB,KAAA,CAAM,QAAA,CAAS,QAAA,IAAY,KAAA,CAAM,SAAS,IAAA,IAAQ,aAAA;AAAA,IAClD,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,CAAA,EAAG,EAAE;AAAA,GAC/B;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAEA,SAAS,kBAAkB,MAAA,EAAoD;AAC7E,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAgC;AAEjD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,WAAA,GAAc,yBAAyB,KAAK,CAAA;AAElD,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,GAAA,CAAI,aAAa,KAAK,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA;AAErC,MAAA,IAAI,KAAA,CAAM,QAAA,KAAa,UAAA,IAAc,QAAA,CAAS,aAAa,UAAA,EAAY;AACrE,QAAA,IAAA,CAAK,GAAA,CAAI,aAAa,KAAK,CAAA;AAAA,MAC7B,CAAA,MAAA,IAAW,MAAM,UAAA,IAAc,QAAA,CAAS,cAAc,KAAA,CAAM,UAAA,GAAa,SAAS,UAAA,EAAY;AAC5F,QAAA,IAAA,CAAK,GAAA,CAAI,aAAa,KAAK,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAA;AACjC;AAEA,SAAS,YAAY,MAAA,EAAoE;AACvF,EAAA,MAAM,UAAgD,EAAC;AAEvD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,IAAA,EAAM,SAAA,IAAa,SAAA;AACrC,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAG,CAAA,EAAG;AACjB,MAAA,OAAA,CAAQ,GAAG,IAAI,EAAC;AAAA,IAClB;AACA,IAAA,OAAA,CAAQ,GAAG,CAAA,CAAG,IAAA,CAAK,KAAK,CAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,oBAAA,CACP,QACA,UAAA,EACmC;AACnC,EAAA,MAAM,UAAA,GAAuC;AAAA,IAC3C,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU,CAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,MAAM,WAAA,GAA6C;AAAA,IACjD,WAAA,EAAa,CAAA;AAAA,IACb,QAAA,EAAU,CAAA;AAAA,IACV,cAAA,EAAgB,CAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,MAAM,MAAA,GAAqC;AAAA,IACzC,UAAA,EAAY,CAAA;AAAA,IACZ,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,SAAiC,EAAC;AAExC,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,UAAA,CAAW,MAAM,QAAQ,CAAA,EAAA;AAEzB,IAAA,IAAI,KAAA,CAAM,MAAM,SAAA,EAAW;AACzB,MAAA,WAAA,CAAY,KAAA,CAAM,KAAK,SAAS,CAAA,EAAA;AAAA,IAClC;AAEA,IAAA,MAAA,CAAO,MAAM,IAAI,CAAA,EAAA;AACjB,IAAA,MAAA,CAAO,MAAM,MAAM,CAAA,GAAA,CAAK,OAAO,KAAA,CAAM,MAAM,KAAK,CAAA,IAAK,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,MAAA;AAAA,IACd,UAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAgBA,SAASC,aAAAA,CACP,MAAA,EACA,iBAAA,EACA,YAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,UAAA,EAAY,OAAO,MAAA,CAAO,MAAA;AAAA,IAC1B,iBAAA;AAAA,IACA,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,YAAA;AAAA,IACA,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,iBAAA,EAAmB,MAAA,CAAO,iBAAA,IAAqB,EAAC;AAAA,IAChD,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,OAAO,MAAA,CAAO;AAAA,GAChB;AACF;AAEA,IAAM,sBAAA,GAAyB,eAAA;AAAA,EAC7B,aAAA;AAAA,EACA,OAAO,OAAO,OAAA,KAAmC;AAC/C,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,IAAS,CAAC,YAAY,OAAO,CAAA;AACtD,IAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,OAAA,EAAS,kBAAA,IAAsB,IAAA;AAE/D,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,gCAAA,EAAkC;AAAA,MACpD,KAAA,EAAO,UAAA;AAAA,MACP,WAAA,EAAa,iBAAA;AAAA,MACb,MAAA,EAAQ,CAAC,CAAC,KAAA,CAAM,GAAA;AAAA,MAChB,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,MAAA,GAASF,qBAAoB,KAAK,CAAA;AACxC,IAAA,MAAM,OAAA,GAAUC,sBAAqB,KAAK,CAAA;AAE1C,IAAA,MAAM,UAA4B,EAAC;AACnC,IAAA,MAAM,SAAmB,EAAC;AAE1B,IAAA,MAAM,mBAAoC,EAAC;AAE3C,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,UAAU,CAAA,EAAG;AACnC,MAAA,gBAAA,CAAiB,IAAA;AAAA,QAAA,CACd,YAAY;AACX,UAAA,IAAI;AACF,YAAA,MAAM,UAAU,aAAA,EAAc;AAC9B,YAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACpD,YAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,YAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,wBAAA,EAA0B,EAAE,YAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AAAA,UACrF,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,YAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AACzB,YAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,qBAAA,EAAuB;AAAA,cAC1C,KAAA,EAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,aAChE,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAAG,OACL;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,OAAO,CAAA,EAAG;AAChC,MAAA,gBAAA,CAAiB,IAAA;AAAA,QAAA,CACd,YAAY;AACX,UAAA,IAAI;AACF,YAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,YAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACpD,YAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,YAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,0BAAA,EAA4B,EAAE,YAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AAAA,UACvF,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,YAAA,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAA;AAC3B,YAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,uBAAA,EAAyB;AAAA,cAC5C,KAAA,EAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,aAChE,CAAA;AAAA,UACH;AAAA,QACF,CAAA;AAAG,OACL;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAElC,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,CAAQ,CAAA,CAAA,KAAK,EAAE,MAAM,CAAA;AAC/C,IAAA,MAAM,gBAAgB,SAAA,CAAU,MAAA;AAEhC,IAAA,MAAM,WAAA,GAAc,iBAAA,GAChB,iBAAA,CAAkB,SAAS,CAAA,GAC3B,SAAA;AAEJ,IAAA,MAAM,YAAA,GAAe,YAAY,WAAW,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAK,6BAAA,EAA+B;AAAA,MACjD,WAAA,EAAa,aAAA;AAAA,MACb,oBAAoB,WAAA,CAAY,MAAA;AAAA,MAChC,UAAU,OAAA,CAAQ,MAAA;AAAA,MAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,UAAA,EAAY;AAAA,KACb,CAAA;AAED,IAAA,MAAM,cAAA,GAAyC;AAAA,MAC7C,OAAA,EAAS,OAAO,MAAA,KAAW,CAAA;AAAA,MAC3B,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,QAAA;AAAA,MACA,QAAQ,MAAA,CAAO,KAAA;AAAA,MACf,SAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA;AAAA,MAClC,MAAA,EAAQ,WAAA;AAAA,MACR,OAAA,EAAS,oBAAA,CAAqB,WAAA,EAAa,UAAU,CAAA;AAAA,MACrD,iBAAA,EAAmB,OAAA;AAAA,MACnB,OAAO,MAAA,CAAO,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,KAAA;AAAA,KACjD;AAEA,IAAA,MAAM,MAAA,GAASC,aAAAA,CAAa,cAAA,EAAgB,aAAA,EAAe,YAAY,CAAA;AACvE,IAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,CAAC,cAAA,CAAe,OAAO,CAAA;AAAA,EAC3D;AACF,CAAA;AAEA,IAAM,0BAAA,GAA6BR,EAAE,MAAA,CAAO;AAAA,EAC1C,GAAA,EAAKA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4BAA4B,CAAA;AAAA,EACtE,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EACzE,KAAA,EAAOA,EACJ,KAAA,CAAMA,CAAAA,CAAE,KAAK,CAAC,UAAA,EAAY,OAAO,CAAC,CAAC,EACnC,GAAA,CAAI,CAAC,EACL,OAAA,CAAQ,CAAC,YAAY,OAAO,CAAC,CAAA,CAC7B,QAAA,CAAS,+BAA+B,CAAA;AAAA,EAC3C,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,SAAA,EAAWA,CAAAA,CACR,IAAA,CAAK,CAAC,GAAA,EAAK,IAAA,EAAM,KAAK,CAAC,CAAA,CACvB,OAAA,CAAQ,IAAI,CAAA,CACZ,SAAS,wBAAwB,CAAA;AAAA,IACpC,kBAAA,EAAoBA,EACjB,OAAA,EAAQ,CACR,QAAQ,IAAI,CAAA,CACZ,SAAS,2CAA2C,CAAA;AAAA,IACvD,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,MACN,iBAAiBA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B,CAAA;AAAA,MAC1E,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,EAAI,CAAE,QAAA,EAAS,CAAE,GAAA,CAAI,GAAK,CAAA,CAAE,QAAA,EAAS;AAAA,MAChE,QAAA,EAAUA,EACP,MAAA,CAAO;AAAA,QACN,KAAA,EAAOA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC/C,MAAA,EAAQA,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,GAAG;AAAA,OAChD,EACA,QAAA;AAAS,KACb,EACA,QAAA;AAAS,GACb,EACA,QAAA;AACL,CAAC,CAAA;AAEM,IAAM,cAAA,GAAiC;AAAA,EAC5C,IAAA,EAAM,aAAA;AAAA,EACN,WAAA,EAAa,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,uEAAA,CAAA;AAAA,EAsBb,SAASC,OAAAA,EAAyB;AAChC,IAAAA,OAAAA,CAAO,IAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,0BAAA,CAA2B,KAAA;AAAA,MAC3B,OAAO,KAAA,KAAuE;AAC5E,QAAA,MAAM,WAAA,GAAc,2BAAA,CAA4B,SAAA,CAAU,KAAK,CAAA;AAE/D,QAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,UAAA,MAAM,SAAS,WAAA,CAAY,KAAA,CAAM,OAC9B,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAC9C,KAAK,IAAI,CAAA;AACZ,UAAA,MAAMC,YAAW,mBAAA,CAAoB,IAAI,MAAM,CAAA,eAAA,EAAkB,MAAM,EAAE,CAAC,CAAA;AAC1E,UAAA,OAAO,EAAE,OAAA,EAASA,SAAAA,CAAS,OAAA,EAAQ;AAAA,QACrC;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,sBAAA,CAAuB,WAAA,CAAY,IAAI,CAAA;AAC9D,QAAA,OAAO,EAAE,OAAA,EAAS,QAAA,CAAS,OAAA,EAAQ;AAAA,MACrC;AAAA,KACF;AAAA,EACF;AACF,CAAA;;;AC9WA,IAAM,MAAA,GAAS,IAAI,SAAA,CAAU;AAAA,EAC3B,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAC,CAAA;AAED,SAAS,aAAA,GAAsB;AAC7B,EAAA,kBAAA,CAAmB,SAAS,MAAM,CAAA;AAClC,EAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAE/C,EAAA,oBAAA,CAAqB,SAAS,MAAM,CAAA;AACpC,EAAA,MAAA,CAAO,KAAK,qCAAqC,CAAA;AAEjD,EAAA,qBAAA,CAAsB,SAAS,MAAM,CAAA;AACrC,EAAA,MAAA,CAAO,KAAK,sCAAsC,CAAA;AAElD,EAAA,cAAA,CAAe,SAAS,MAAM,CAAA;AAC9B,EAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAC5C;AAEA,eAAe,IAAA,GAAsB;AACnC,EAAA,MAAA,CAAO,KAAK,gCAAA,EAAkC;AAAA,IAC5C,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,CAAC,kBAAA,EAAoB,oBAAA,EAAsB,uBAAuB,aAAa;AAAA,GACvF,CAAA;AAED,EAAA,aAAA,EAAc;AAEd,EAAA,MAAM,SAAA,GAAY,IAAI,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAE9B,EAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AACzD;AAEA,eAAe,QAAA,GAA0B;AACvC,EAAA,MAAA,CAAO,KAAK,qCAAqC,CAAA;AAEjD,EAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,IAChB,cAAA,EAAkB;AAAA,IAClBG,eAAAA,EAAoB;AAAA,IACpBA,eAAAA,EAAqB;AAAA,IACrB,eAAA;AAA0B,GAC3B,CAAA;AAED,EAAA,MAAA,CAAO,KAAK,uBAAuB,CAAA;AACnC,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAEA,OAAA,CAAQ,EAAA,CAAG,UAAU,QAAQ,CAAA;AAC7B,OAAA,CAAQ,EAAA,CAAG,WAAW,QAAQ,CAAA;AAE9B,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,KAAA,KAAmB;AAC/B,EAAA,MAAA,CAAO,MAAM,4BAAA,EAA8B;AAAA,IACzC,KAAA,EAAO,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,GAChE,CAAA;AACD,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA","file":"server.js","sourcesContent":["import pino from 'pino';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface LogContext {\n tool?: string;\n requestId?: string;\n target?: string;\n adapter?: string;\n [key: string]: unknown;\n}\n\nconst logLevel = (process.env['LOG_LEVEL'] as LogLevel) ?? 'info';\n\nconst baseLogger = pino(\n {\n level: logLevel,\n base: {\n service: 'ai-ccesibility',\n version: '0.1.0',\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n formatters: {\n level: (label) => ({ level: label }),\n },\n },\n pino.destination(2)\n);\n\nexport const logger = {\n debug(message: string, context?: LogContext): void {\n baseLogger.debug(context ?? {}, message);\n },\n\n info(message: string, context?: LogContext): void {\n baseLogger.info(context ?? {}, message);\n },\n\n warn(message: string, context?: LogContext): void {\n baseLogger.warn(context ?? {}, message);\n },\n\n error(message: string, context?: LogContext & { error?: Error }): void {\n const { error, ...rest } = context ?? {};\n if (error) {\n baseLogger.error(\n {\n ...rest,\n err: {\n message: error.message,\n name: error.name,\n stack: error.stack,\n },\n },\n message\n );\n } else {\n baseLogger.error(rest, message);\n }\n },\n};\n\nexport function createToolLogger(toolName: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'tool'>): void {\n logger.debug(message, { ...context, tool: toolName });\n },\n\n info(message: string, context?: Omit<LogContext, 'tool'>): void {\n logger.info(message, { ...context, tool: toolName });\n },\n\n warn(message: string, context?: Omit<LogContext, 'tool'>): void {\n logger.warn(message, { ...context, tool: toolName });\n },\n\n error(message: string, context?: Omit<LogContext, 'tool'> & { error?: Error }): void {\n logger.error(message, { ...context, tool: toolName });\n },\n };\n}\n\nexport function createAdapterLogger(adapterName: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'adapter'>): void {\n logger.debug(message, { ...context, adapter: adapterName });\n },\n\n info(message: string, context?: Omit<LogContext, 'adapter'>): void {\n logger.info(message, { ...context, adapter: adapterName });\n },\n\n warn(message: string, context?: Omit<LogContext, 'adapter'>): void {\n logger.warn(message, { ...context, adapter: adapterName });\n },\n\n error(message: string, context?: Omit<LogContext, 'adapter'> & { error?: Error }): void {\n logger.error(message, { ...context, adapter: adapterName });\n },\n };\n}\n\nexport function createRequestLogger(requestId: string) {\n return {\n debug(message: string, context?: Omit<LogContext, 'requestId'>): void {\n logger.debug(message, { ...context, requestId });\n },\n\n info(message: string, context?: Omit<LogContext, 'requestId'>): void {\n logger.info(message, { ...context, requestId });\n },\n\n warn(message: string, context?: Omit<LogContext, 'requestId'>): void {\n logger.warn(message, { ...context, requestId });\n },\n\n error(message: string, context?: Omit<LogContext, 'requestId'> & { error?: Error }): void {\n logger.error(message, { ...context, requestId });\n },\n };\n}\n\nexport function generateRequestId(): string {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { createToolLogger, generateRequestId } from '@/utils/logger.js';\n\nexport interface ToolDefinition {\n name: string;\n description: string;\n register(server: McpServer): void;\n}\n\nexport interface ToolResponse {\n content: Array<{\n type: 'text';\n text: string;\n }>;\n isError?: boolean;\n [key: string]: unknown;\n}\n\nexport function createTextResponse(text: string, isError = false): ToolResponse {\n return {\n content: [{ type: 'text', text }],\n isError,\n };\n}\n\nexport function createJsonResponse<T>(data: T, isError = false): ToolResponse {\n return {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n isError,\n };\n}\n\nexport function createErrorResponse(error: unknown): ToolResponse {\n const message = error instanceof Error ? error.message : String(error);\n return createTextResponse(`Error: ${message}`, true);\n}\n\nexport type ToolHandler<TInput> = (\n input: TInput,\n context: ToolExecutionContext\n) => Promise<ToolResponse>;\n\nexport interface ToolExecutionContext {\n requestId: string;\n logger: ReturnType<typeof createToolLogger>;\n}\n\nexport function withToolContext<TInput>(\n toolName: string,\n handler: ToolHandler<TInput>\n): (input: TInput) => Promise<ToolResponse> {\n const toolLogger = createToolLogger(toolName);\n\n return async (input: TInput): Promise<ToolResponse> => {\n const requestId = generateRequestId();\n\n toolLogger.info('Tool execution started', { requestId });\n const startTime = Date.now();\n\n try {\n const result = await handler(input, {\n requestId,\n logger: toolLogger,\n });\n\n const duration = Date.now() - startTime;\n toolLogger.info('Tool execution completed', {\n requestId,\n durationMs: duration,\n isError: result.isError ?? false,\n });\n\n return result;\n } catch (error) {\n const duration = Date.now() - startTime;\n toolLogger.error('Tool execution failed', {\n requestId,\n durationMs: duration,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n\n return createErrorResponse(error);\n }\n };\n}\n","import type { AnalysisTarget, AnalysisOptions, AnalysisResult } from '@/types/index.js';\nimport { createAdapterLogger } from '@/utils/logger.js';\n\nexport interface AdapterConfig {\n timeout?: number;\n maxRetries?: number;\n}\n\nexport interface Adapter {\n readonly name: string;\n readonly version: string;\n\n analyze(target: AnalysisTarget, options?: AnalysisOptions): Promise<AnalysisResult>;\n\n isAvailable(): Promise<boolean>;\n\n dispose(): Promise<void>;\n}\n\nexport abstract class BaseAdapter implements Adapter {\n abstract readonly name: string;\n abstract readonly version: string;\n\n protected config: AdapterConfig;\n protected logger: ReturnType<typeof createAdapterLogger>;\n\n constructor(config: AdapterConfig = {}) {\n this.config = {\n timeout: 30000,\n maxRetries: 1,\n ...config,\n };\n this.logger = createAdapterLogger(this.constructor.name);\n }\n\n abstract analyze(target: AnalysisTarget, options?: AnalysisOptions): Promise<AnalysisResult>;\n\n abstract isAvailable(): Promise<boolean>;\n\n async dispose(): Promise<void> {\n this.logger.debug('Adapter disposed');\n }\n}\n","import type { Browser, Page } from 'puppeteer';\nimport puppeteer from 'puppeteer';\nimport AxePuppeteer from '@axe-core/puppeteer';\nimport type { AxeResults, Result as AxeResult, NodeResult } from 'axe-core';\nimport { BaseAdapter, type AdapterConfig } from './base.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type {\n AnalysisResult,\n AccessibilityIssue,\n Severity,\n WCAGReference,\n WCAGLevel,\n WCAGPrinciple,\n IssueLocation,\n} from '@/types/accessibility.js';\n\nexport interface AxeAdapterConfig extends AdapterConfig {\n headless?: boolean;\n browserArgs?: string[];\n}\n\ninterface WCAGTagInfo {\n criterion: string;\n level: WCAGLevel;\n version: '2.0' | '2.1' | '2.2';\n}\n\nconst SEVERITY_MAP: Record<string, Severity> = {\n critical: 'critical',\n serious: 'serious',\n moderate: 'moderate',\n minor: 'minor',\n};\n\nconst PRINCIPLE_MAP: Record<string, WCAGPrinciple> = {\n '1': 'perceivable',\n '2': 'operable',\n '3': 'understandable',\n '4': 'robust',\n};\n\nexport class AxeAdapter extends BaseAdapter {\n readonly name = 'axe-core';\n readonly version = '4.x';\n\n private browser: Browser | null = null;\n private axeConfig: AxeAdapterConfig;\n\n constructor(config: AxeAdapterConfig = {}) {\n super(config);\n this.axeConfig = {\n headless: true,\n browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'],\n ...config,\n };\n }\n\n async analyze(target: AnalysisTarget, options?: AnalysisOptions): Promise<AnalysisResult> {\n const startTime = Date.now();\n let page: Page | null = null;\n\n try {\n this.logger.info('Starting axe-core analysis', { target: target.value });\n\n await this.ensureBrowser();\n page = await this.browser!.newPage();\n\n if (target.options?.viewport) {\n await page.setViewport(target.options.viewport);\n }\n\n await this.loadTarget(page, target);\n\n const axeBuilder = new AxePuppeteer(page);\n this.configureAxeBuilder(axeBuilder, options);\n\n const results = await axeBuilder.analyze();\n const issues = this.transformResults(results, options);\n\n const duration = Date.now() - startTime;\n this.logger.info('Analysis completed', { issueCount: issues.length, duration });\n\n return this.buildSuccessResult(target.value, issues, results, duration);\n } catch (error) {\n const duration = Date.now() - startTime;\n this.logger.error('Analysis failed', { error: error as Error, target: target.value });\n\n return this.buildErrorResult(target.value, error, duration);\n } finally {\n if (page) {\n await page.close().catch(() => {});\n }\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n await this.ensureBrowser();\n return true;\n } catch {\n return false;\n }\n }\n\n async dispose(): Promise<void> {\n if (this.browser) {\n await this.browser.close();\n this.browser = null;\n this.logger.debug('Browser closed');\n }\n await super.dispose();\n }\n\n private async ensureBrowser(): Promise<void> {\n if (!this.browser || !this.browser.connected) {\n this.logger.debug('Launching browser');\n this.browser = await puppeteer.launch({\n headless: this.axeConfig.headless ?? true,\n args: this.axeConfig.browserArgs ?? ['--no-sandbox', '--disable-setuid-sandbox'],\n });\n }\n }\n\n private async loadTarget(page: Page, target: AnalysisTarget): Promise<void> {\n const timeout = target.options?.timeout ?? this.config.timeout ?? 30000;\n\n switch (target.type) {\n case 'url':\n await page.goto(target.value, {\n waitUntil: 'networkidle2',\n timeout,\n });\n break;\n\n case 'html':\n await page.setContent(target.value, {\n waitUntil: 'networkidle2',\n timeout,\n });\n break;\n\n case 'file':\n await page.goto(`file://${target.value}`, {\n waitUntil: 'networkidle2',\n timeout,\n });\n break;\n }\n\n if (target.options?.waitForSelector) {\n await page.waitForSelector(target.options.waitForSelector, { timeout });\n }\n }\n\n private configureAxeBuilder(builder: AxePuppeteer, options?: AnalysisOptions): void {\n const tags = this.getWcagTags(options?.wcagLevel ?? 'AA');\n builder.withTags(tags);\n\n if (options?.rules && options.rules.length > 0) {\n builder.withRules(options.rules);\n }\n\n if (options?.excludeRules && options.excludeRules.length > 0) {\n builder.disableRules(options.excludeRules);\n }\n }\n\n private getWcagTags(level: 'A' | 'AA' | 'AAA'): string[] {\n const baseTags = ['wcag2a', 'wcag21a', 'wcag22a', 'best-practice'];\n\n if (level === 'AA' || level === 'AAA') {\n baseTags.push('wcag2aa', 'wcag21aa', 'wcag22aa');\n }\n\n if (level === 'AAA') {\n baseTags.push('wcag2aaa', 'wcag21aaa', 'wcag22aaa');\n }\n\n return baseTags;\n }\n\n private transformResults(results: AxeResults, options?: AnalysisOptions): AccessibilityIssue[] {\n const issues: AccessibilityIssue[] = [];\n let issueIndex = 0;\n\n for (const violation of results.violations) {\n for (const node of violation.nodes) {\n issues.push(this.transformViolation(violation, node, issueIndex++));\n }\n }\n\n if (options?.includeWarnings !== false) {\n for (const incomplete of results.incomplete) {\n for (const node of incomplete.nodes) {\n issues.push(this.transformIncomplete(incomplete, node, issueIndex++));\n }\n }\n }\n\n return issues;\n }\n\n private transformViolation(\n violation: AxeResult,\n node: NodeResult,\n index: number\n ): AccessibilityIssue {\n return {\n id: `axe-${index}`,\n ruleId: violation.id,\n tool: 'axe-core',\n severity: SEVERITY_MAP[violation.impact ?? 'moderate'] ?? 'moderate',\n wcag: this.extractWcagReference(violation.tags),\n location: this.extractLocation(node),\n message: violation.help,\n humanContext: violation.description,\n suggestedActions: this.extractSuggestedActions(node),\n affectedUsers: this.inferAffectedUsers(violation),\n confidence: 1,\n rawResult: { violation, node },\n };\n }\n\n private transformIncomplete(\n incomplete: AxeResult,\n node: NodeResult,\n index: number\n ): AccessibilityIssue {\n return {\n id: `axe-incomplete-${index}`,\n ruleId: incomplete.id,\n tool: 'axe-core',\n severity: 'minor',\n wcag: this.extractWcagReference(incomplete.tags),\n location: this.extractLocation(node),\n message: `[Requires review] ${incomplete.help}`,\n humanContext: incomplete.description,\n suggestedActions: this.extractSuggestedActions(node),\n affectedUsers: this.inferAffectedUsers(incomplete),\n confidence: 0.5,\n rawResult: { incomplete, node },\n };\n }\n\n private extractLocation(node: NodeResult): IssueLocation {\n return {\n selector: node.target.join(' '),\n xpath: node.xpath?.join(' '),\n snippet: node.html?.substring(0, 500),\n };\n }\n\n private extractWcagReference(tags: string[]): WCAGReference | undefined {\n const wcagTag = this.parseWcagTags(tags);\n if (!wcagTag) return undefined;\n\n const principle = wcagTag.criterion.charAt(0);\n\n return {\n criterion: wcagTag.criterion,\n level: wcagTag.level,\n principle: PRINCIPLE_MAP[principle] ?? 'perceivable',\n version: wcagTag.version,\n };\n }\n\n private parseWcagTags(tags: string[]): WCAGTagInfo | null {\n const scPattern = /^wcag(\\d{3,})$/;\n const levelPattern = /^wcag2\\d?(a{1,3})$/;\n\n let criterion: string | null = null;\n let level: WCAGLevel = 'A';\n let version: '2.0' | '2.1' | '2.2' = '2.0';\n\n for (const tag of tags) {\n const scMatch = tag.match(scPattern);\n if (scMatch && scMatch[1]) {\n const digits = scMatch[1];\n if (digits.length >= 3) {\n criterion = `${digits[0]}.${digits[1]}.${digits.slice(2)}`;\n }\n }\n\n const levelMatch = tag.match(levelPattern);\n if (levelMatch && levelMatch[1]) {\n const levelStr = levelMatch[1].toUpperCase();\n if (levelStr === 'A' || levelStr === 'AA' || levelStr === 'AAA') {\n level = levelStr;\n }\n }\n\n if (tag.includes('21')) version = '2.1';\n if (tag.includes('22')) version = '2.2';\n }\n\n if (!criterion) return null;\n\n return { criterion, level, version };\n }\n\n private extractSuggestedActions(node: NodeResult): string[] {\n const actions: string[] = [];\n\n for (const check of node.any ?? []) {\n if (check.message) {\n actions.push(check.message);\n }\n }\n\n for (const check of node.all ?? []) {\n if (check.message) {\n actions.push(check.message);\n }\n }\n\n for (const check of node.none ?? []) {\n if (check.message) {\n actions.push(`Avoid: ${check.message}`);\n }\n }\n\n return actions;\n }\n\n private inferAffectedUsers(\n result: AxeResult\n ): Array<\n | 'screen-reader'\n | 'keyboard-only'\n | 'low-vision'\n | 'color-blind'\n | 'cognitive'\n | 'motor-impaired'\n > {\n const users: Set<\n | 'screen-reader'\n | 'keyboard-only'\n | 'low-vision'\n | 'color-blind'\n | 'cognitive'\n | 'motor-impaired'\n > = new Set();\n\n const tags = result.tags.join(' ').toLowerCase();\n const id = result.id.toLowerCase();\n\n if (\n tags.includes('aria') ||\n id.includes('aria') ||\n id.includes('label') ||\n id.includes('alt')\n ) {\n users.add('screen-reader');\n }\n\n if (id.includes('keyboard') || id.includes('focus') || id.includes('tabindex')) {\n users.add('keyboard-only');\n users.add('motor-impaired');\n }\n\n if (id.includes('color') || id.includes('contrast')) {\n users.add('low-vision');\n users.add('color-blind');\n }\n\n if (id.includes('heading') || id.includes('landmark') || id.includes('link')) {\n users.add('screen-reader');\n users.add('cognitive');\n }\n\n if (users.size === 0) {\n users.add('screen-reader');\n }\n\n return Array.from(users);\n }\n\n private buildSuccessResult(\n target: string,\n issues: AccessibilityIssue[],\n axeResults: AxeResults,\n duration: number\n ): AnalysisResult {\n const summary = this.calculateSummary(issues);\n\n return {\n success: true,\n timestamp: new Date().toISOString(),\n duration,\n target,\n tool: 'axe-core',\n issues,\n summary,\n metadata: {\n toolVersion: axeResults.testEngine?.version,\n browserInfo: axeResults.testEnvironment?.userAgent,\n pageTitle: axeResults.url,\n },\n };\n }\n\n private buildErrorResult(target: string, error: unknown, duration: number): AnalysisResult {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n return {\n success: false,\n timestamp: new Date().toISOString(),\n duration,\n target,\n tool: 'axe-core',\n issues: [],\n summary: {\n total: 0,\n bySeverity: { critical: 0, serious: 0, moderate: 0, minor: 0 },\n },\n error: errorMessage,\n };\n }\n\n private calculateSummary(issues: AccessibilityIssue[]): AnalysisResult['summary'] {\n const bySeverity = { critical: 0, serious: 0, moderate: 0, minor: 0 };\n const byPrinciple = { perceivable: 0, operable: 0, understandable: 0, robust: 0 };\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byRule,\n };\n }\n}\n","import { z } from 'zod';\n\nexport const SeveritySchema = z\n .enum(['critical', 'serious', 'moderate', 'minor'])\n .describe(\n 'Impact level: critical (blocks users), serious (significant barrier), moderate (some difficulty), minor (annoyance)'\n );\nexport type Severity = z.infer<typeof SeveritySchema>;\n\nexport const WCAGLevelSchema = z\n .enum(['A', 'AA', 'AAA'])\n .describe('WCAG conformance level: A (minimum), AA (standard), AAA (enhanced)');\nexport type WCAGLevel = z.infer<typeof WCAGLevelSchema>;\n\nexport const WCAGPrincipleSchema = z\n .enum(['perceivable', 'operable', 'understandable', 'robust'])\n .describe(\n 'WCAG principle: perceivable (can sense), operable (can use), understandable (can comprehend), robust (works with assistive tech)'\n );\nexport type WCAGPrinciple = z.infer<typeof WCAGPrincipleSchema>;\n\nexport const ToolSourceSchema = z\n .enum(['axe-core', 'pa11y'])\n .describe('Source tool that detected the issue');\nexport type ToolSource = z.infer<typeof ToolSourceSchema>;\n\nexport const WCAGCriterionSchema = z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+$/, 'Must be in format X.Y.Z (e.g., 1.4.3)')\n .describe('WCAG success criterion number (e.g., 1.4.3 for Contrast)');\nexport type WCAGCriterion = z.infer<typeof WCAGCriterionSchema>;\n\nexport const WCAGReferenceSchema = z\n .object({\n criterion: WCAGCriterionSchema,\n level: WCAGLevelSchema,\n principle: WCAGPrincipleSchema,\n version: z.enum(['2.0', '2.1', '2.2']).optional().describe('WCAG version'),\n title: z.string().optional().describe('Human-readable criterion title'),\n url: z.string().url().optional().describe('Link to WCAG documentation'),\n })\n .describe('Reference to specific WCAG success criterion');\nexport type WCAGReference = z.infer<typeof WCAGReferenceSchema>;\n\nexport const IssueLocationSchema = z\n .object({\n selector: z.string().optional().describe('CSS selector to locate the element'),\n xpath: z.string().optional().describe('XPath to locate the element'),\n file: z.string().optional().describe('Source file path (for static analysis)'),\n line: z.number().int().positive().optional().describe('Line number in source file'),\n column: z.number().int().nonnegative().optional().describe('Column number in source file'),\n snippet: z.string().max(500).optional().describe('HTML snippet of the problematic element'),\n })\n .describe('Location information for the accessibility issue');\nexport type IssueLocation = z.infer<typeof IssueLocationSchema>;\n\nexport const AccessibilityIssueSchema = z\n .object({\n id: z.string().min(1).describe('Unique identifier for this issue instance'),\n ruleId: z.string().min(1).describe('Rule identifier from the source tool'),\n tool: ToolSourceSchema,\n severity: SeveritySchema,\n wcag: WCAGReferenceSchema.optional(),\n location: IssueLocationSchema,\n message: z.string().min(1).describe('Technical description of the issue'),\n humanContext: z.string().optional().describe('User impact explanation for decision-making'),\n suggestedActions: z\n .array(z.string())\n .optional()\n .describe('Possible remediation approaches (not auto-fixes)'),\n affectedUsers: z\n .array(\n z.enum([\n 'screen-reader',\n 'keyboard-only',\n 'low-vision',\n 'color-blind',\n 'cognitive',\n 'motor-impaired',\n ])\n )\n .optional()\n .describe('User groups most affected by this issue'),\n priority: z\n .enum(['critical', 'high', 'medium', 'low'])\n .optional()\n .describe('Remediation priority based on impact'),\n remediationEffort: z\n .enum(['low', 'medium', 'high'])\n .optional()\n .describe('Estimated effort to fix'),\n confidence: z.number().min(0).max(1).optional().describe('Tool confidence score (0-1)'),\n rawResult: z.unknown().optional().describe('Original result from source tool for debugging'),\n })\n .describe('Normalized accessibility issue from any source tool');\nexport type AccessibilityIssue = z.infer<typeof AccessibilityIssueSchema>;\n\nexport const AnalysisSummarySchema = z\n .object({\n total: z.number().int().nonnegative().describe('Total number of issues found'),\n bySeverity: z\n .object({\n critical: z.number().int().nonnegative().default(0),\n serious: z.number().int().nonnegative().default(0),\n moderate: z.number().int().nonnegative().default(0),\n minor: z.number().int().nonnegative().default(0),\n })\n .describe('Issue count by severity level'),\n byPrinciple: z\n .object({\n perceivable: z.number().int().nonnegative().default(0),\n operable: z.number().int().nonnegative().default(0),\n understandable: z.number().int().nonnegative().default(0),\n robust: z.number().int().nonnegative().default(0),\n })\n .optional()\n .describe('Issue count by WCAG principle'),\n byRule: z\n .record(z.string(), z.number().int().nonnegative())\n .optional()\n .describe('Issue count grouped by rule ID'),\n })\n .describe('Summary statistics for the analysis');\nexport type AnalysisSummary = z.infer<typeof AnalysisSummarySchema>;\n\nexport const AnalysisResultSchema = z\n .object({\n success: z.boolean().describe('Whether the analysis completed without errors'),\n timestamp: z.string().datetime().describe('ISO 8601 timestamp of analysis'),\n duration: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .describe('Analysis duration in milliseconds'),\n target: z.string().describe('URL, file path, or identifier of analyzed target'),\n tool: ToolSourceSchema,\n issues: z.array(AccessibilityIssueSchema).describe('List of accessibility issues found'),\n summary: AnalysisSummarySchema,\n metadata: z\n .object({\n toolVersion: z.string().optional(),\n browserInfo: z.string().optional(),\n pageTitle: z.string().optional(),\n })\n .optional()\n .describe('Additional context about the analysis'),\n error: z.string().optional().describe('Error message if analysis failed'),\n })\n .describe('Complete result of an accessibility analysis');\nexport type AnalysisResult = z.infer<typeof AnalysisResultSchema>;\n\nexport const CombinedAnalysisResultSchema = z\n .object({\n success: z.boolean(),\n timestamp: z.string().datetime(),\n duration: z.number().int().nonnegative().optional(),\n target: z.string(),\n toolsUsed: z.array(ToolSourceSchema),\n issues: z.array(AccessibilityIssueSchema),\n summary: AnalysisSummarySchema.extend({\n byTool: z.record(ToolSourceSchema, z.number().int().nonnegative()).optional(),\n }),\n individualResults: z\n .array(AnalysisResultSchema)\n .optional()\n .describe('Results from each tool before merging'),\n error: z.string().optional(),\n })\n .describe('Combined result from multiple accessibility tools');\nexport type CombinedAnalysisResult = z.infer<typeof CombinedAnalysisResultSchema>;\n","import { z } from 'zod';\nimport { WCAGLevelSchema } from './accessibility.js';\n\nconst UrlSchema = z.string().url().describe('URL of the page to analyze');\n\nconst HtmlSchema = z.string().min(1).describe('Raw HTML content to analyze');\n\nconst FilePathSchema = z.string().min(1).describe('Path to the file to analyze');\n\nconst ViewportSchema = z\n .object({\n width: z.number().int().positive().default(1280).describe('Viewport width in pixels'),\n height: z.number().int().positive().default(720).describe('Viewport height in pixels'),\n })\n .describe('Browser viewport dimensions');\n\nconst BrowserOptionsSchema = z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for before analysis'),\n waitForTimeout: z\n .number()\n .int()\n .positive()\n .max(60000)\n .optional()\n .describe('Time to wait in ms before analysis (max 60s)'),\n viewport: ViewportSchema.optional(),\n })\n .describe('Browser behavior options');\n\nexport const AxeToolInputSchema = z\n .object({\n url: UrlSchema.optional(),\n html: HtmlSchema.optional(),\n options: z\n .object({\n wcagLevel: WCAGLevelSchema.default('AA').describe('WCAG conformance level to check'),\n rules: z.array(z.string()).optional().describe('Specific axe rule IDs to run'),\n excludeRules: z.array(z.string()).optional().describe('Axe rule IDs to exclude'),\n includeIncomplete: z\n .boolean()\n .default(false)\n .describe('Include incomplete/needs-review results'),\n selector: z\n .string()\n .optional()\n .describe('CSS selector to scope analysis to specific element'),\n browser: BrowserOptionsSchema.optional(),\n })\n .optional(),\n })\n .refine((data) => data.url !== undefined || data.html !== undefined, {\n message: 'Either url or html must be provided',\n })\n .refine((data) => !(data.url !== undefined && data.html !== undefined), {\n message: 'Provide either url or html, not both',\n })\n .describe('Input for axe-core accessibility analysis');\n\nexport type AxeToolInput = z.infer<typeof AxeToolInputSchema>;\n\nexport const Pa11yToolInputSchema = z\n .object({\n url: UrlSchema.optional(),\n html: HtmlSchema.optional(),\n options: z\n .object({\n standard: z\n .enum(['WCAG2A', 'WCAG2AA', 'WCAG2AAA', 'WCAG21A', 'WCAG21AA', 'WCAG21AAA'])\n .default('WCAG21AA')\n .describe('Accessibility standard to test against'),\n includeWarnings: z.boolean().default(true).describe('Include warnings in results'),\n includeNotices: z.boolean().default(false).describe('Include notices in results'),\n rootElement: z.string().optional().describe('CSS selector for root element to test'),\n hideElements: z\n .string()\n .optional()\n .describe('CSS selector for elements to hide from testing'),\n browser: BrowserOptionsSchema.optional(),\n })\n .optional(),\n })\n .refine((data) => data.url !== undefined || data.html !== undefined, {\n message: 'Either url or html must be provided',\n })\n .refine((data) => !(data.url !== undefined && data.html !== undefined), {\n message: 'Provide either url or html, not both',\n })\n .describe('Input for Pa11y accessibility analysis');\n\nexport type Pa11yToolInput = z.infer<typeof Pa11yToolInputSchema>;\n\nexport const ESLintA11yToolInputSchema = z\n .object({\n files: z.array(FilePathSchema).min(1).optional().describe('Array of file paths to lint'),\n directory: z.string().optional().describe('Directory path to lint recursively'),\n code: z.string().optional().describe('Inline Vue component code to lint'),\n options: z\n .object({\n rules: z\n .record(\n z.string(),\n z.union([z.enum(['off', 'warn', 'error']), z.number().int().min(0).max(2)])\n )\n .optional()\n .describe('Override specific rule configurations'),\n fix: z\n .literal(false)\n .default(false)\n .describe('Fix mode is disabled - MCP only reports issues'),\n })\n .optional(),\n })\n .refine(\n (data) => data.files !== undefined || data.directory !== undefined || data.code !== undefined,\n { message: 'Provide files, directory, or code to lint' }\n )\n .describe('Input for ESLint Vue.js accessibility linting');\n\nexport type ESLintA11yToolInput = z.infer<typeof ESLintA11yToolInputSchema>;\n\nexport const CombinedAnalysisInputSchema = z\n .object({\n url: UrlSchema.optional(),\n html: HtmlSchema.optional(),\n tools: z\n .array(z.enum(['axe-core', 'pa11y']))\n .min(1)\n .default(['axe-core', 'pa11y'])\n .describe('Tools to run for web analysis'),\n options: z\n .object({\n wcagLevel: WCAGLevelSchema.default('AA'),\n deduplicateResults: z\n .boolean()\n .default(true)\n .describe('Merge similar issues from different tools'),\n browser: BrowserOptionsSchema.optional(),\n })\n .optional(),\n })\n .refine(\n (data) => data.url !== undefined || data.html !== undefined,\n { message: 'Provide url or html to analyze' }\n )\n .describe('Input for combined web accessibility analysis (axe-core + Pa11y)');\n\nexport type CombinedAnalysisInput = z.infer<typeof CombinedAnalysisInputSchema>;\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { AxeAdapter } from '@/adapters/axe.js';\nimport { AxeToolInputSchema, type AxeToolInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type { AnalysisResult } from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAdapter: AxeAdapter | null = null;\n\nfunction getAdapter(): AxeAdapter {\n if (!sharedAdapter) {\n sharedAdapter = new AxeAdapter({\n headless: true,\n timeout: 30000,\n });\n }\n return sharedAdapter;\n}\n\nasync function disposeAdapter(): Promise<void> {\n if (sharedAdapter) {\n await sharedAdapter.dispose();\n sharedAdapter = null;\n }\n}\n\nprocess.on('SIGINT', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nprocess.on('SIGTERM', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nfunction buildAnalysisTarget(input: AxeToolInput): AnalysisTarget {\n if (input.url) {\n return {\n type: 'url',\n value: input.url,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n }\n\n return {\n type: 'html',\n value: input.html!,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n}\n\nfunction buildAnalysisOptions(input: AxeToolInput): AnalysisOptions {\n return {\n wcagLevel: input.options?.wcagLevel ?? 'AA',\n rules: input.options?.rules,\n excludeRules: input.options?.excludeRules,\n includeWarnings: input.options?.includeIncomplete ?? false,\n };\n}\n\ninterface AxeToolOutput {\n success: boolean;\n target: string;\n issueCount: number;\n issues: AnalysisResult['issues'];\n summary: AnalysisResult['summary'];\n metadata?: AnalysisResult['metadata'] | undefined;\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(result: AnalysisResult): AxeToolOutput {\n return {\n success: result.success,\n target: result.target,\n issueCount: result.issues.length,\n issues: result.issues,\n summary: result.summary,\n metadata: result.metadata,\n duration: result.duration,\n error: result.error,\n };\n}\n\nconst handleAxeAnalysis = withToolContext<AxeToolInput>(\n 'analyze-with-axe',\n async (input, context): Promise<ToolResponse> => {\n context.logger.debug('Building analysis configuration', {\n hasUrl: !!input.url,\n hasHtml: !!input.html,\n wcagLevel: input.options?.wcagLevel ?? 'AA',\n });\n\n const adapter = getAdapter();\n\n const isAvailable = await adapter.isAvailable();\n if (!isAvailable) {\n return createErrorResponse(\n new Error('Axe adapter is not available. Browser may have failed to launch.')\n );\n }\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n context.logger.info('Starting axe-core analysis', {\n targetType: target.type,\n target: target.type === 'url' ? target.value : '[html content]',\n });\n\n const result = await adapter.analyze(target, options);\n\n if (!result.success) {\n context.logger.warn('Analysis completed with errors', {\n error: result.error,\n });\n }\n\n const output = formatOutput(result);\n return createJsonResponse(output, !result.success);\n }\n);\n\nconst AxeToolMcpInputSchema = z.object({\n url: z.string().url().optional().describe('URL of the page to analyze'),\n html: z.string().min(1).optional().describe('Raw HTML content to analyze'),\n options: z\n .object({\n wcagLevel: z\n .enum(['A', 'AA', 'AAA'])\n .default('AA')\n .describe('WCAG conformance level to check'),\n rules: z.array(z.string()).optional().describe('Specific axe rule IDs to run'),\n excludeRules: z.array(z.string()).optional().describe('Axe rule IDs to exclude'),\n includeIncomplete: z\n .boolean()\n .default(false)\n .describe('Include incomplete/needs-review results'),\n selector: z.string().optional().describe('CSS selector to scope analysis'),\n browser: z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for'),\n waitForTimeout: z.number().int().positive().max(60000).optional(),\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(720),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const analyzeWithAxeTool: ToolDefinition = {\n name: 'analyze-with-axe',\n description: `Analyze a web page or HTML content for accessibility issues using axe-core.\n\nReturns accessibility violations and incomplete checks based on WCAG guidelines.\n\nInput options\n- url: URL of the page to analyze\n- html: Raw HTML content to analyze (alternative to url)\n- options.wcagLevel: WCAG level to check (A, AA, or AAA). Default: AA\n- options.rules: Specific axe rule IDs to run\n- options.excludeRules: Axe rule IDs to exclude\n- options.includeIncomplete: Include needs-review results. Default: false\n- options.browser.waitForSelector: CSS selector to wait for before analysis\n- options.browser.viewport: Browser viewport dimensions\n\nOutput\n- issues: Array of accessibility issues found\n- summary: Issue counts by severity and WCAG principle\n- metadata: Tool version and browser info`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n AxeToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = AxeToolInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handleAxeAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapter as disposeAxeAdapter };\n","{\n \"1.1.1\": {\n \"criterion\": \"1.1.1\",\n \"level\": \"A\",\n \"principle\": \"perceivable\",\n \"title\": \"Contenido no textual\",\n \"description\": \"Todo contenido no textual debe tener una alternativa de texto que cumpla el mismo propósito.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\", \"low-vision\"],\n \"impactDescription\": \"Los usuarios de lectores de pantalla no pueden acceder a la información transmitida por imágenes, iconos o gráficos sin texto alternativo.\",\n \"realWorldExample\": \"Un usuario ciego usando JAWS escuchará \\\"imagen\\\" sin descripción, perdiendo completamente el contexto.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"critical\",\n \"commonSolutions\": [\n \"Añadir atributo alt descriptivo a imágenes\",\n \"Usar aria-label para iconos decorativos con función\",\n \"Marcar imágenes decorativas con alt=\\\"\\\" vacío\",\n \"Proporcionar transcripciones para audio/video\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html\"\n },\n \"1.2.2\": {\n \"criterion\": \"1.2.2\",\n \"level\": \"A\",\n \"principle\": \"perceivable\",\n \"title\": \"Subtítulos (pregrabados)\",\n \"description\": \"Los medios sincronizados pregrabados deben tener subtítulos.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\"],\n \"impactDescription\": \"Usuarios sordos o con problemas de audición no pueden acceder al contenido de audio.\",\n \"realWorldExample\": \"Una persona sorda no puede seguir un tutorial en video sin subtítulos.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"high\",\n \"commonSolutions\": [\n \"Añadir track de subtítulos WebVTT\",\n \"Usar servicios de transcripción automática como punto de partida\",\n \"Revisar y corregir subtítulos generados automáticamente\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/captions-prerecorded.html\"\n },\n \"1.3.1\": {\n \"criterion\": \"1.3.1\",\n \"level\": \"A\",\n \"principle\": \"perceivable\",\n \"title\": \"Información y relaciones\",\n \"description\": \"La información, estructura y relaciones transmitidas visualmente pueden ser determinadas programáticamente.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\", \"cognitive\"],\n \"impactDescription\": \"Sin estructura semántica correcta, los usuarios no pueden navegar eficientemente ni entender las relaciones entre contenidos.\",\n \"realWorldExample\": \"Un usuario con lector de pantalla no puede saltar entre encabezados si se usan divs con estilos en lugar de elementos h1-h6.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"high\",\n \"commonSolutions\": [\n \"Usar elementos HTML semánticos (nav, main, article, aside)\",\n \"Usar headings (h1-h6) en orden jerárquico\",\n \"Asociar labels con inputs correctamente\",\n \"Usar listas (ul, ol) para contenido de lista\",\n \"Usar tablas con th y scope para datos tabulares\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html\"\n },\n \"1.4.3\": {\n \"criterion\": \"1.4.3\",\n \"level\": \"AA\",\n \"principle\": \"perceivable\",\n \"title\": \"Contraste mínimo\",\n \"description\": \"El texto debe tener una relación de contraste de al menos 4.5:1 (3:1 para texto grande).\",\n \"userImpact\": {\n \"affectedUsers\": [\"low-vision\", \"color-blind\"],\n \"impactDescription\": \"Texto con bajo contraste es difícil o imposible de leer para personas con baja visión o daltonismo.\",\n \"realWorldExample\": \"Un usuario con cataratas no puede leer texto gris claro sobre fondo blanco en un formulario.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"high\",\n \"commonSolutions\": [\n \"Ajustar colores para cumplir ratio 4.5:1 mínimo\",\n \"Usar herramientas como WebAIM Contrast Checker\",\n \"Evitar depender solo del color para transmitir información\",\n \"Probar con simuladores de daltonismo\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html\"\n },\n \"2.1.1\": {\n \"criterion\": \"2.1.1\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Teclado\",\n \"description\": \"Toda funcionalidad debe ser operable mediante teclado.\",\n \"userImpact\": {\n \"affectedUsers\": [\"keyboard-only\", \"motor-impaired\", \"screen-reader\"],\n \"impactDescription\": \"Usuarios que no pueden usar mouse quedan completamente bloqueados de funcionalidades solo accesibles con eventos de ratón.\",\n \"realWorldExample\": \"Un usuario con parálisis cerebral no puede usar un dropdown que solo funciona con hover del mouse.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"critical\",\n \"commonSolutions\": [\n \"Añadir manejadores de eventos de teclado (onKeyDown, onKeyPress)\",\n \"Usar elementos interactivos nativos (button, a, input)\",\n \"Asegurar que custom components sean focusables (tabindex)\",\n \"Implementar navegación con Enter/Space en controles personalizados\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/keyboard.html\"\n },\n \"2.4.1\": {\n \"criterion\": \"2.4.1\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Saltar bloques\",\n \"description\": \"Debe existir un mecanismo para saltar bloques de contenido repetidos.\",\n \"userImpact\": {\n \"affectedUsers\": [\"keyboard-only\", \"screen-reader\"],\n \"impactDescription\": \"Usuarios deben tabular por toda la navegación en cada página, perdiendo tiempo y paciencia.\",\n \"realWorldExample\": \"Un usuario ciego debe escuchar 30 links de navegación antes de llegar al contenido principal en cada página.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Añadir link \\\"Saltar al contenido principal\\\" al inicio\",\n \"Usar landmarks ARIA correctamente (main, nav)\",\n \"Implementar skip links visibles al recibir foco\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/bypass-blocks.html\"\n },\n \"2.4.3\": {\n \"criterion\": \"2.4.3\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Orden del foco\",\n \"description\": \"El orden de foco debe ser lógico y predecible.\",\n \"userImpact\": {\n \"affectedUsers\": [\"keyboard-only\", \"screen-reader\", \"cognitive\"],\n \"impactDescription\": \"Orden de foco ilógico confunde a usuarios y dificulta la navegación.\",\n \"realWorldExample\": \"El foco salta de un botón a otro en la esquina opuesta, confundiendo al usuario sobre qué elemento está activo.\"\n },\n \"remediation\": {\n \"effort\": \"medium\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Evitar tabindex positivos (> 0)\",\n \"Mantener DOM order que refleje orden visual\",\n \"Usar CSS para reordenar visualmente, no tabindex\",\n \"Probar navegación con Tab manualmente\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/focus-order.html\"\n },\n \"2.4.4\": {\n \"criterion\": \"2.4.4\",\n \"level\": \"A\",\n \"principle\": \"operable\",\n \"title\": \"Propósito de los enlaces\",\n \"description\": \"El propósito de cada enlace debe poder determinarse por el texto del enlace solo.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\", \"cognitive\"],\n \"impactDescription\": \"Enlaces genéricos como \\\"click aquí\\\" no comunican destino o propósito.\",\n \"realWorldExample\": \"Un usuario con lector de pantalla navegando por lista de enlaces escucha 10 veces \\\"más información\\\" sin contexto.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Usar texto de enlace descriptivo (\\\"Descargar informe anual 2023\\\")\",\n \"Evitar \\\"click aquí\\\", \\\"más información\\\", \\\"leer más\\\"\",\n \"Añadir aria-label con contexto si el texto visible debe ser corto\",\n \"Incluir el contexto en el texto del enlace\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/link-purpose-in-context.html\"\n },\n \"3.2.2\": {\n \"criterion\": \"3.2.2\",\n \"level\": \"A\",\n \"principle\": \"understandable\",\n \"title\": \"Al recibir entradas\",\n \"description\": \"Cambiar el valor de un control no debe causar cambios de contexo inesperados.\",\n \"userImpact\": {\n \"affectedUsers\": [\"cognitive\", \"screen-reader\"],\n \"impactDescription\": \"Cambios automáticos desorientan y pueden causar pérdida de contexto.\",\n \"realWorldExample\": \"Un select que auto-envía el formulario al cambiar sorprende al usuario que quería explorar opciones.\"\n },\n \"remediation\": {\n \"effort\": \"low\",\n \"priority\": \"medium\",\n \"commonSolutions\": [\n \"Requerir acción explícita (botón) para enviar\",\n \"Advertir al usuario si habrá cambio automático\",\n \"Usar onChange solo para actualizar UI, no navegación\",\n \"Proporcionar botón \\\"Aplicar\\\" en lugar de auto-submit\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/on-input.html\"\n },\n \"4.1.2\": {\n \"criterion\": \"4.1.2\",\n \"level\": \"A\",\n \"principle\": \"robust\",\n \"title\": \"Nombre, función, valor\",\n \"description\": \"Componentes de interfaz deben exponer nombre, función, estados y propiedades programáticamente.\",\n \"userImpact\": {\n \"affectedUsers\": [\"screen-reader\"],\n \"impactDescription\": \"Controles personalizados sin semántica ARIA son invisibles o incomprensibles para tecnologías asistivas.\",\n \"realWorldExample\": \"Un checkbox custom hecho con div no anuncia su estado (marcado/desmarcado) al lector de pantalla.\"\n },\n \"remediation\": {\n \"effort\": \"high\",\n \"priority\": \"critical\",\n \"commonSolutions\": [\n \"Usar elementos HTML nativos cuando sea posible\",\n \"Añadir roles ARIA apropiados (role=\\\"button\\\", \\\"checkbox\\\", etc.)\",\n \"Implementar estados ARIA (aria-checked, aria-expanded)\",\n \"Incluir aria-label o aria-labelledby para nombre accesible\",\n \"Seguir patrones de diseño WAI-ARIA\"\n ]\n },\n \"wcagUrl\": \"https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html\"\n }\n}\n","import type { WCAGLevel, WCAGPrinciple } from '@/types/accessibility.js';\nimport wcagCriteriaData from '@/data/wcag-criteria.json' with { type: 'json' };\n\nexport interface WCAGCriterionInfo {\n criterion: string;\n level: WCAGLevel;\n principle: WCAGPrinciple;\n title: string;\n description: string;\n userImpact: {\n affectedUsers: Array<'screen-reader' | 'keyboard-only' | 'low-vision' | 'color-blind' | 'cognitive' | 'motor-impaired'>;\n impactDescription: string;\n realWorldExample: string;\n };\n remediation: {\n effort: 'low' | 'medium' | 'high';\n priority: 'critical' | 'high' | 'medium' | 'low';\n commonSolutions: string[];\n };\n wcagUrl: string;\n}\n\nexport const WCAG_CRITERIA: Record<string, WCAGCriterionInfo> = wcagCriteriaData as Record<string, WCAGCriterionInfo>;\n\nexport function getWCAGContext(criterion: string): WCAGCriterionInfo | undefined {\n return WCAG_CRITERIA[criterion];\n}\n\nexport function enrichIssueWithContext(\n _issue: { wcag?: { criterion: string } },\n context: WCAGCriterionInfo\n): {\n humanContext: string;\n suggestedActions: string[];\n affectedUsers: Array<'screen-reader' | 'keyboard-only' | 'low-vision' | 'color-blind' | 'cognitive' | 'motor-impaired'>;\n priority: 'critical' | 'high' | 'medium' | 'low';\n remediationEffort: 'low' | 'medium' | 'high';\n} {\n const humanContext = `\n**${context.title} (WCAG ${context.criterion} - Nivel ${context.level})**\n\n${context.description}\n\n**Impacto en usuarios:**\n${context.userImpact.impactDescription}\n\n**Ejemplo real:**\n${context.userImpact.realWorldExample}\n\n**Esfuerzo de corrección:** ${context.remediation.effort}\n**Prioridad:** ${context.remediation.priority}\n `.trim();\n\n return {\n humanContext,\n suggestedActions: context.remediation.commonSolutions,\n affectedUsers: context.userImpact.affectedUsers,\n priority: context.remediation.priority,\n remediationEffort: context.remediation.effort\n };\n}\n","import type { AccessibilityIssue, ToolSource, Severity } from '@/types/index.js';\nimport { getWCAGContext, enrichIssueWithContext } from '@/utils/wcag-context.js';\n\nexport interface NormalizerContext {\n tool: ToolSource;\n targetUrl?: string | undefined;\n targetFile?: string | undefined;\n}\n\nexport interface Normalizer<TRawResult = unknown> {\n normalize(raw: TRawResult, context: NormalizerContext): AccessibilityIssue[];\n}\n\nexport abstract class BaseNormalizer<TRawResult = unknown> implements Normalizer<TRawResult> {\n abstract normalize(raw: TRawResult, context: NormalizerContext): AccessibilityIssue[];\n\n protected generateIssueId(tool: ToolSource, ruleId: string, selector?: string): string {\n const base = `${tool}:${ruleId}`;\n if (selector) {\n const selectorHash = this.hashString(selector).toString(16);\n return `${base}:${selectorHash}`;\n }\n return base;\n }\n\n protected mapImpactToSeverity(impact: string | undefined): Severity {\n const mapping: Record<string, Severity> = {\n critical: 'critical',\n serious: 'serious',\n moderate: 'moderate',\n minor: 'minor',\n };\n return mapping[impact ?? ''] ?? 'moderate';\n }\n\n protected enrichWithHumanContext(issue: Partial<AccessibilityIssue>): Partial<AccessibilityIssue> {\n if (!issue.wcag?.criterion) {\n return issue;\n }\n\n const context = getWCAGContext(issue.wcag.criterion);\n if (!context) {\n return issue;\n }\n\n const enrichment = enrichIssueWithContext(issue as { wcag?: { criterion: string } }, context);\n\n return {\n ...issue,\n humanContext: enrichment.humanContext,\n suggestedActions: enrichment.suggestedActions,\n affectedUsers: enrichment.affectedUsers,\n priority: enrichment.priority,\n remediationEffort: enrichment.remediationEffort\n };\n }\n\n private hashString(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash);\n }\n}\n","import { BaseNormalizer, type NormalizerContext } from './base.js';\nimport type { AccessibilityIssue, WCAGPrinciple, WCAGLevel, Severity } from '@/types/index.js';\n\nexport interface Pa11yIssue {\n code: string;\n type: 'error' | 'warning' | 'notice';\n message: string;\n context: string;\n selector: string;\n typeCode: number;\n runner?: string;\n runnerExtras?: Record<string, unknown>;\n}\n\nconst WCAG_PATTERN = /WCAG2(A{1,3})\\.(Principle\\d)\\.Guideline\\d+_\\d+\\.(\\d+_\\d+_\\d+)/;\n\nexport class Pa11yNormalizer extends BaseNormalizer<Pa11yIssue[]> {\n normalize(issues: Pa11yIssue[], context: NormalizerContext): AccessibilityIssue[] {\n return issues.map((issue) => this.normalizeIssue(issue, context));\n }\n\n private normalizeIssue(issue: Pa11yIssue, context: NormalizerContext): AccessibilityIssue {\n const wcagInfo = this.parseWcagCode(issue.code);\n\n const baseIssue = {\n id: this.generateIssueId('pa11y', issue.code, issue.selector),\n ruleId: issue.code,\n tool: 'pa11y' as const,\n severity: this.mapTypeToSeverity(issue.type),\n wcag: wcagInfo,\n location: {\n selector: issue.selector,\n snippet: issue.context,\n file: context.targetFile\n },\n message: issue.message,\n confidence: issue.type === 'error' ? 1 : 0.8\n };\n\n return this.enrichWithHumanContext(baseIssue) as AccessibilityIssue;\n }\n\n private mapTypeToSeverity(type: 'error' | 'warning' | 'notice'): Severity {\n const mapping: Record<string, Severity> = {\n error: 'serious',\n warning: 'moderate',\n notice: 'minor'\n };\n return mapping[type] ?? 'moderate';\n }\n\n private parseWcagCode(code: string): AccessibilityIssue['wcag'] | undefined {\n const match = WCAG_PATTERN.exec(code);\n if (!match) return undefined;\n\n const [, levelStr, principleStr, criterionRaw] = match;\n if (!levelStr || !principleStr || !criterionRaw) return undefined;\n\n const level = levelStr as WCAGLevel;\n const criterion = criterionRaw.replace(/_/g, '.');\n\n const principleMap: Record<string, WCAGPrinciple> = {\n Principle1: 'perceivable',\n Principle2: 'operable',\n Principle3: 'understandable',\n Principle4: 'robust'\n };\n\n const principle = principleMap[principleStr];\n if (!principle) return undefined;\n\n return {\n criterion,\n level,\n principle,\n version: '2.1'\n };\n }\n}\n\nexport const pa11yNormalizer = new Pa11yNormalizer();\n","import pa11y from 'pa11y';\nimport { BaseAdapter, type AdapterConfig } from './base.js';\nimport { pa11yNormalizer, type Pa11yIssue } from '@/normalizers/pa11y.js';\nimport type {\n AnalysisTarget,\n AnalysisOptions,\n AnalysisResult,\n AnalysisSummary,\n Severity,\n WCAGPrinciple\n} from '@/types/index.js';\n\ntype Pa11yOptions = NonNullable<Parameters<typeof pa11y>[1]>;\n\ninterface Pa11yResults {\n documentTitle: string;\n pageUrl: string;\n issues: Pa11yIssue[];\n}\n\nexport interface Pa11yAdapterConfig extends AdapterConfig {\n chromeLaunchConfig?: {\n executablePath?: string;\n ignoreHTTPSErrors?: boolean;\n };\n}\n\nexport class Pa11yAdapter extends BaseAdapter {\n readonly name = 'pa11y';\n readonly version = '9.0.1';\n\n private adapterConfig: Pa11yAdapterConfig;\n\n constructor(config: Pa11yAdapterConfig = {}) {\n super(config);\n this.adapterConfig = config;\n }\n\n async analyze(\n target: AnalysisTarget,\n options?: AnalysisOptions\n ): Promise<AnalysisResult> {\n const startTime = Date.now();\n const targetValue = target.value;\n\n this.logger.info('Starting Pa11y analysis', { target: targetValue });\n\n try {\n const pa11yOptions = this.buildPa11yOptions(target, options);\n const results = await this.runPa11y(target, pa11yOptions);\n\n const issues = pa11yNormalizer.normalize(results.issues, {\n tool: 'pa11y',\n targetUrl: target.type === 'url' ? targetValue : undefined\n });\n\n const duration = Date.now() - startTime;\n\n this.logger.info('Pa11y analysis completed', {\n target: targetValue,\n issueCount: issues.length,\n durationMs: duration\n });\n\n return {\n success: true,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'pa11y',\n issues,\n summary: this.buildSummary(issues),\n metadata: {\n toolVersion: this.version,\n pageTitle: results.documentTitle\n }\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n this.logger.error('Pa11y analysis failed', {\n target: targetValue,\n error: error instanceof Error ? error : new Error(errorMessage)\n });\n\n return {\n success: false,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'pa11y',\n issues: [],\n summary: this.buildSummary([]),\n error: errorMessage\n };\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n return typeof pa11y === 'function';\n } catch {\n return false;\n }\n }\n\n private buildPa11yOptions(\n target: AnalysisTarget,\n options?: AnalysisOptions\n ): Pa11yOptions {\n const pa11yOpts: Pa11yOptions = {\n timeout: this.config.timeout,\n wait: 0,\n standard: this.mapWcagLevel(options?.wcagLevel ?? 'AA'),\n includeWarnings: options?.includeWarnings ?? true,\n includeNotices: false\n };\n\n if (target.options?.viewport) {\n pa11yOpts.viewport = {\n width: target.options.viewport.width,\n height: target.options.viewport.height\n };\n }\n\n if (target.options?.waitForSelector) {\n pa11yOpts.wait = 1000;\n }\n\n if (target.options?.timeout) {\n pa11yOpts.wait = target.options.timeout;\n }\n\n if (this.adapterConfig.chromeLaunchConfig) {\n pa11yOpts.chromeLaunchConfig = this.adapterConfig.chromeLaunchConfig as Pa11yOptions['chromeLaunchConfig'];\n }\n\n if (options?.rules && options.rules.length > 0) {\n pa11yOpts.rules = options.rules;\n }\n\n if (options?.excludeRules && options.excludeRules.length > 0) {\n pa11yOpts.ignore = options.excludeRules;\n }\n\n return pa11yOpts;\n }\n\n private async runPa11y(\n target: AnalysisTarget,\n options: Pa11yOptions\n ): Promise<Pa11yResults> {\n if (target.type === 'url') {\n return pa11y(target.value, options) as Promise<Pa11yResults>;\n }\n\n if (target.type === 'html') {\n const htmlContent = target.value;\n const dataUrl = `data:text/html;charset=utf-8,${encodeURIComponent(htmlContent)}`;\n return pa11y(dataUrl, options) as Promise<Pa11yResults>;\n }\n\n throw new Error(`Unsupported target type: ${target.type}`);\n }\n\n private mapWcagLevel(level: 'A' | 'AA' | 'AAA'): 'WCAG2A' | 'WCAG2AA' | 'WCAG2AAA' {\n const mapping = {\n A: 'WCAG2A' as const,\n AA: 'WCAG2AA' as const,\n AAA: 'WCAG2AAA' as const\n };\n return mapping[level];\n }\n\n private buildSummary(issues: AnalysisResult['issues']): AnalysisSummary {\n const bySeverity: Record<Severity, number> = {\n critical: 0,\n serious: 0,\n moderate: 0,\n minor: 0\n };\n\n const byPrinciple: Record<WCAGPrinciple, number> = {\n perceivable: 0,\n operable: 0,\n understandable: 0,\n robust: 0\n };\n\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byRule\n };\n }\n}\n\nexport const createPa11yAdapter = (config?: Pa11yAdapterConfig): Pa11yAdapter => {\n return new Pa11yAdapter(config);\n};\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { Pa11yAdapter } from '@/adapters/pa11y.js';\nimport { Pa11yToolInputSchema, type Pa11yToolInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type { AnalysisResult } from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAdapter: Pa11yAdapter | null = null;\n\nfunction getAdapter(): Pa11yAdapter {\n if (!sharedAdapter) {\n sharedAdapter = new Pa11yAdapter({\n timeout: 30000,\n });\n }\n return sharedAdapter;\n}\n\nasync function disposeAdapter(): Promise<void> {\n if (sharedAdapter) {\n await sharedAdapter.dispose();\n sharedAdapter = null;\n }\n}\n\nprocess.on('SIGINT', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nprocess.on('SIGTERM', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nfunction buildAnalysisTarget(input: Pa11yToolInput): AnalysisTarget {\n if (input.url) {\n return {\n type: 'url',\n value: input.url,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n }\n\n return {\n type: 'html',\n value: input.html!,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n}\n\nfunction buildAnalysisOptions(input: Pa11yToolInput): AnalysisOptions {\n const standardMap: Record<string, 'A' | 'AA' | 'AAA'> = {\n 'WCAG2A': 'A',\n 'WCAG2AA': 'AA',\n 'WCAG2AAA': 'AAA',\n 'WCAG21A': 'A',\n 'WCAG21AA': 'AA',\n 'WCAG21AAA': 'AAA'\n };\n\n const wcagLevel = input.options?.standard\n ? standardMap[input.options.standard] ?? 'AA'\n : 'AA';\n\n return {\n wcagLevel,\n includeWarnings: input.options?.includeWarnings ?? true,\n };\n}\n\ninterface Pa11yToolOutput {\n success: boolean;\n target: string;\n issueCount: number;\n issues: AnalysisResult['issues'];\n summary: AnalysisResult['summary'];\n metadata?: AnalysisResult['metadata'] | undefined;\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(result: AnalysisResult): Pa11yToolOutput {\n return {\n success: result.success,\n target: result.target,\n issueCount: result.issues.length,\n issues: result.issues,\n summary: result.summary,\n metadata: result.metadata,\n duration: result.duration,\n error: result.error,\n };\n}\n\nconst handlePa11yAnalysis = withToolContext<Pa11yToolInput>(\n 'analyze-with-pa11y',\n async (input, context): Promise<ToolResponse> => {\n context.logger.debug('Building analysis configuration', {\n hasUrl: !!input.url,\n hasHtml: !!input.html,\n standard: input.options?.standard ?? 'WCAG21AA',\n });\n\n const adapter = getAdapter();\n\n const isAvailable = await adapter.isAvailable();\n if (!isAvailable) {\n return createErrorResponse(\n new Error('Pa11y adapter is not available. Browser may have failed to launch.')\n );\n }\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n context.logger.info('Starting Pa11y analysis', {\n targetType: target.type,\n target: target.type === 'url' ? target.value : '[html content]',\n });\n\n const result = await adapter.analyze(target, options);\n\n if (!result.success) {\n context.logger.warn('Analysis completed with errors', {\n error: result.error,\n });\n }\n\n const output = formatOutput(result);\n return createJsonResponse(output, !result.success);\n }\n);\n\nconst Pa11yToolMcpInputSchema = z.object({\n url: z.string().url().optional().describe('URL of the page to analyze'),\n html: z.string().min(1).optional().describe('Raw HTML content to analyze'),\n options: z\n .object({\n standard: z\n .enum(['WCAG2A', 'WCAG2AA', 'WCAG2AAA', 'WCAG21A', 'WCAG21AA', 'WCAG21AAA'])\n .default('WCAG21AA')\n .describe('Accessibility standard to test against'),\n includeWarnings: z\n .boolean()\n .default(true)\n .describe('Include warnings in results'),\n includeNotices: z\n .boolean()\n .default(false)\n .describe('Include notices in results'),\n rootElement: z.string().optional().describe('CSS selector for root element to test'),\n hideElements: z.string().optional().describe('CSS selector for elements to hide'),\n browser: z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for'),\n waitForTimeout: z.number().int().positive().max(60000).optional(),\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(720),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const analyzeWithPa11yTool: ToolDefinition = {\n name: 'analyze-with-pa11y',\n description: `Analyze a web page or HTML content for accessibility issues using Pa11y.\n\nReturns accessibility violations based on WCAG guidelines.\n\nInput options\n- url: URL of the page to analyze\n- html: Raw HTML content to analyze (alternative to url)\n- options.standard: WCAG standard to test against (WCAG2A, WCAG2AA, WCAG2AAA, WCAG21A, WCAG21AA, WCAG21AAA). Default: WCAG21AA\n- options.includeWarnings: Include warnings in results. Default: true\n- options.includeNotices: Include notices in results. Default: false\n- options.rootElement: CSS selector for root element to test\n- options.hideElements: CSS selector for elements to hide from testing\n- options.browser.waitForSelector: CSS selector to wait for before analysis\n- options.browser.viewport: Browser viewport dimensions\n\nOutput:\n- issues: Array of accessibility issues found\n- summary: Issue counts by severity and WCAG principle\n- metadata: Tool version and page info`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n Pa11yToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = Pa11yToolInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handlePa11yAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapter as disposePa11yAdapter };\n","import { BaseNormalizer, type NormalizerContext } from './base.js';\nimport type { AccessibilityIssue, Severity } from '@/types/index.js';\n\nexport interface ESLintIssue {\n ruleId: string | null;\n severity: 1 | 2;\n message: string;\n line: number;\n column: number;\n endLine?: number | undefined;\n endColumn?: number | undefined;\n nodeType?: string | undefined;\n source?: string | null | undefined;\n}\n\nexport interface ESLintFileResult {\n filePath: string;\n messages: ESLintIssue[];\n errorCount: number;\n warningCount: number;\n}\n\nconst ESLINT_RULE_WCAG_MAP: Record<string, { criterion: string; principle: 'perceivable' | 'operable' | 'understandable' | 'robust' }> = {\n 'vuejs-accessibility/alt-text': { criterion: '1.1.1', principle: 'perceivable' },\n 'vuejs-accessibility/anchor-has-content': { criterion: '2.4.4', principle: 'operable' },\n 'vuejs-accessibility/aria-props': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/aria-role': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/aria-unsupported-elements': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/click-events-have-key-events': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/form-control-has-label': { criterion: '1.3.1', principle: 'perceivable' },\n 'vuejs-accessibility/heading-has-content': { criterion: '1.3.1', principle: 'perceivable' },\n 'vuejs-accessibility/iframe-has-title': { criterion: '2.4.1', principle: 'operable' },\n 'vuejs-accessibility/interactive-supports-focus': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/label-has-for': { criterion: '1.3.1', principle: 'perceivable' },\n 'vuejs-accessibility/media-has-caption': { criterion: '1.2.2', principle: 'perceivable' },\n 'vuejs-accessibility/mouse-events-have-key-events': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/no-access-key': { criterion: '2.1.1', principle: 'operable' },\n 'vuejs-accessibility/no-autofocus': { criterion: '2.4.3', principle: 'operable' },\n 'vuejs-accessibility/no-distracting-elements': { criterion: '2.2.2', principle: 'operable' },\n 'vuejs-accessibility/no-onchange': { criterion: '3.2.2', principle: 'understandable' },\n 'vuejs-accessibility/no-redundant-roles': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/no-static-element-interactions': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/role-has-required-aria-props': { criterion: '4.1.2', principle: 'robust' },\n 'vuejs-accessibility/tabindex-no-positive': { criterion: '2.4.3', principle: 'operable' }\n};\n\nexport class ESLintNormalizer extends BaseNormalizer<ESLintFileResult[]> {\n normalize(results: ESLintFileResult[], context: NormalizerContext): AccessibilityIssue[] {\n const issues: AccessibilityIssue[] = [];\n\n for (const fileResult of results) {\n for (const message of fileResult.messages) {\n if (!message.ruleId) continue;\n\n const issue = this.normalizeIssue(message, fileResult.filePath, context);\n if (issue) {\n issues.push(issue);\n }\n }\n }\n\n return issues;\n }\n\n private normalizeIssue(\n message: ESLintIssue,\n filePath: string,\n _context: NormalizerContext\n ): AccessibilityIssue | null {\n if (!message.ruleId) return null;\n\n const wcagInfo = this.getWcagInfo(message.ruleId);\n\n const baseIssue = {\n id: this.generateIssueId('eslint-vuejs-a11y', message.ruleId, `${filePath}:${message.line}:${message.column}`),\n ruleId: message.ruleId,\n tool: 'eslint-vuejs-a11y' as const,\n severity: this.mapSeverity(message.severity),\n wcag: wcagInfo,\n location: {\n file: filePath,\n line: message.line,\n column: message.column,\n snippet: message.source ?? undefined\n },\n message: message.message,\n confidence: 1\n };\n\n return this.enrichWithHumanContext(baseIssue) as AccessibilityIssue;\n }\n\n private mapSeverity(severity: 1 | 2): Severity {\n return severity === 2 ? 'serious' : 'moderate';\n }\n\n private getWcagInfo(ruleId: string): AccessibilityIssue['wcag'] | undefined {\n const mapping = ESLINT_RULE_WCAG_MAP[ruleId];\n if (!mapping) return undefined;\n\n return {\n criterion: mapping.criterion,\n level: 'A',\n principle: mapping.principle,\n version: '2.1'\n };\n }\n}\n\nexport const eslintNormalizer = new ESLintNormalizer();\n","import { ESLint, type Linter } from 'eslint';\nimport { BaseAdapter, type AdapterConfig } from './base.js';\nimport { eslintNormalizer, type ESLintFileResult, type ESLintIssue } from '@/normalizers/eslint.js';\nimport type {\n AnalysisTarget,\n AnalysisOptions,\n AnalysisResult,\n AnalysisSummary,\n Severity,\n WCAGPrinciple\n} from '@/types/index.js';\n\nexport type ESLintAdapterConfig = AdapterConfig\n\nconst DEFAULT_ESLINT_RULES: Linter.RulesRecord = {\n 'vuejs-accessibility/alt-text': 'error',\n 'vuejs-accessibility/anchor-has-content': 'error',\n 'vuejs-accessibility/aria-props': 'error',\n 'vuejs-accessibility/aria-role': 'error',\n 'vuejs-accessibility/aria-unsupported-elements': 'error',\n 'vuejs-accessibility/click-events-have-key-events': 'error',\n 'vuejs-accessibility/form-control-has-label': 'error',\n 'vuejs-accessibility/heading-has-content': 'error',\n 'vuejs-accessibility/iframe-has-title': 'error',\n 'vuejs-accessibility/interactive-supports-focus': 'error',\n 'vuejs-accessibility/label-has-for': 'error',\n 'vuejs-accessibility/media-has-caption': 'error',\n 'vuejs-accessibility/mouse-events-have-key-events': 'error',\n 'vuejs-accessibility/no-access-key': 'error',\n 'vuejs-accessibility/no-autofocus': 'warn',\n 'vuejs-accessibility/no-distracting-elements': 'error',\n 'vuejs-accessibility/no-onchange': 'warn',\n 'vuejs-accessibility/no-redundant-roles': 'warn',\n 'vuejs-accessibility/no-static-element-interactions': 'error',\n 'vuejs-accessibility/role-has-required-aria-props': 'error',\n 'vuejs-accessibility/tabindex-no-positive': 'error'\n};\n\nexport class ESLintAdapter extends BaseAdapter {\n readonly name = 'eslint-vuejs-a11y';\n readonly version = '2.4.1';\n\n constructor(config: ESLintAdapterConfig = {}) {\n super(config);\n }\n\n async analyze(\n target: AnalysisTarget,\n options?: AnalysisOptions\n ): Promise<AnalysisResult> {\n const startTime = Date.now();\n const targetValue = target.value;\n\n this.logger.info('Starting ESLint a11y analysis', { target: targetValue, type: target.type });\n\n try {\n const eslint = await this.createESLintInstance(options);\n const results = await this.runESLint(eslint, target);\n\n const fileResults: ESLintFileResult[] = results.map((r) => ({\n filePath: r.filePath,\n messages: r.messages.map((m): ESLintIssue => ({\n ruleId: m.ruleId,\n severity: m.severity as 1 | 2,\n message: m.message,\n line: m.line,\n column: m.column,\n endLine: m.endLine,\n endColumn: m.endColumn,\n nodeType: m.nodeType ?? undefined,\n source: r.source\n })),\n errorCount: r.errorCount,\n warningCount: r.warningCount\n }));\n\n const issues = eslintNormalizer.normalize(fileResults, {\n tool: 'eslint-vuejs-a11y'\n });\n\n const duration = Date.now() - startTime;\n\n this.logger.info('ESLint a11y analysis completed', {\n target: targetValue,\n issueCount: issues.length,\n durationMs: duration\n });\n\n return {\n success: true,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'eslint-vuejs-a11y',\n issues,\n summary: this.buildSummary(issues),\n metadata: {\n toolVersion: this.version\n }\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n this.logger.error('ESLint a11y analysis failed', {\n target: targetValue,\n error: error instanceof Error ? error : new Error(errorMessage)\n });\n\n return {\n success: false,\n timestamp: new Date().toISOString(),\n duration,\n target: targetValue,\n tool: 'eslint-vuejs-a11y',\n issues: [],\n summary: this.buildSummary([]),\n error: errorMessage\n };\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n return typeof ESLint === 'function';\n } catch {\n return false;\n }\n }\n\n private async createESLintInstance(options?: AnalysisOptions): Promise<ESLint> {\n const vuePlugin = await import('eslint-plugin-vuejs-accessibility');\n const vueParser = await import('vue-eslint-parser');\n\n const rules = { ...DEFAULT_ESLINT_RULES };\n\n if (options?.rules) {\n for (const rule of options.rules) {\n rules[rule] = 'error';\n }\n }\n\n if (options?.excludeRules) {\n for (const rule of options.excludeRules) {\n rules[rule] = 'off';\n }\n }\n\n const plugin = vuePlugin.default ?? vuePlugin;\n const parser = vueParser.default ?? vueParser;\n\n const baseConfig: Linter.Config[] = [\n {\n files: ['**/*.vue'],\n languageOptions: {\n parser: parser as Linter.Parser,\n parserOptions: {\n ecmaVersion: 'latest',\n sourceType: 'module'\n }\n },\n plugins: {\n 'vuejs-accessibility': plugin as ESLint.Plugin\n },\n rules\n }\n ];\n\n return new ESLint({\n overrideConfigFile: true,\n overrideConfig: baseConfig,\n fix: false\n });\n }\n\n private async runESLint(\n eslint: ESLint,\n target: AnalysisTarget\n ): Promise<ESLint.LintResult[]> {\n if (target.type === 'file') {\n return eslint.lintFiles([target.value]);\n }\n\n if (target.type === 'html') {\n return eslint.lintText(target.value, {\n filePath: 'inline.vue'\n });\n }\n\n throw new Error(`Unsupported target type for ESLint: ${target.type}. Use 'file' or 'html' (for inline Vue code).`);\n }\n\n private buildSummary(issues: AnalysisResult['issues']): AnalysisSummary {\n const bySeverity: Record<Severity, number> = {\n critical: 0,\n serious: 0,\n moderate: 0,\n minor: 0\n };\n\n const byPrinciple: Record<WCAGPrinciple, number> = {\n perceivable: 0,\n operable: 0,\n understandable: 0,\n robust: 0\n };\n\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byRule\n };\n }\n}\n\nexport const createESLintAdapter = (config?: ESLintAdapterConfig): ESLintAdapter => {\n return new ESLintAdapter(config);\n};\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { ESLintAdapter } from '@/adapters/eslint.js';\nimport { ESLintA11yToolInputSchema, type ESLintA11yToolInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type { AnalysisResult } from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAdapter: ESLintAdapter | null = null;\n\nfunction getAdapter(): ESLintAdapter {\n if (!sharedAdapter) {\n sharedAdapter = new ESLintAdapter({\n timeout: 30000,\n });\n }\n return sharedAdapter;\n}\n\nasync function disposeAdapter(): Promise<void> {\n if (sharedAdapter) {\n await sharedAdapter.dispose();\n sharedAdapter = null;\n }\n}\n\nprocess.on('SIGINT', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nprocess.on('SIGTERM', () => {\n disposeAdapter().finally(() => process.exit(0));\n});\n\nfunction buildAnalysisTarget(input: ESLintA11yToolInput): AnalysisTarget {\n if (input.files && input.files.length > 0) {\n return {\n type: 'file',\n value: input.files[0]!,\n };\n }\n\n if (input.directory) {\n return {\n type: 'file',\n value: input.directory,\n };\n }\n\n return {\n type: 'html',\n value: input.code!,\n };\n}\n\nfunction buildAnalysisOptions(_input: ESLintA11yToolInput): AnalysisOptions {\n return {\n wcagLevel: 'AA',\n includeWarnings: true,\n };\n}\n\ninterface ESLintToolOutput {\n success: boolean;\n target: string;\n issueCount: number;\n issues: AnalysisResult['issues'];\n summary: AnalysisResult['summary'];\n metadata?: AnalysisResult['metadata'] | undefined;\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(result: AnalysisResult): ESLintToolOutput {\n return {\n success: result.success,\n target: result.target,\n issueCount: result.issues.length,\n issues: result.issues,\n summary: result.summary,\n metadata: result.metadata,\n duration: result.duration,\n error: result.error,\n };\n}\n\nconst handleESLintAnalysis = withToolContext<ESLintA11yToolInput>(\n 'analyze-with-eslint',\n async (input, context): Promise<ToolResponse> => {\n context.logger.debug('Building analysis configuration', {\n hasFiles: !!(input.files && input.files.length > 0),\n hasDirectory: !!input.directory,\n hasCode: !!input.code,\n });\n\n const adapter = getAdapter();\n\n const isAvailable = await adapter.isAvailable();\n if (!isAvailable) {\n return createErrorResponse(\n new Error('ESLint adapter is not available.')\n );\n }\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n context.logger.info('Starting ESLint analysis', {\n targetType: target.type,\n target: target.type === 'file' ? target.value : '[inline code]',\n });\n\n const result = await adapter.analyze(target, options);\n\n if (!result.success) {\n context.logger.warn('Analysis completed with errors', {\n error: result.error,\n });\n }\n\n const output = formatOutput(result);\n return createJsonResponse(output, !result.success);\n }\n);\n\nconst ESLintToolMcpInputSchema = z.object({\n files: z\n .array(z.string())\n .min(1)\n .optional()\n .describe('Array of file paths to lint'),\n directory: z.string().optional().describe('Directory path to lint recursively'),\n code: z.string().optional().describe('Inline Vue component code to lint'),\n options: z\n .object({\n rules: z\n .record(\n z.string(),\n z.union([z.enum(['off', 'warn', 'error']), z.number().int().min(0).max(2)])\n )\n .optional()\n .describe('Override specific rule configurations'),\n fix: z\n .literal(false)\n .default(false)\n .describe('Fix mode is disabled - MCP only reports issues'),\n })\n .optional(),\n});\n\nexport const analyzeWithESLintTool: ToolDefinition = {\n name: 'analyze-with-eslint',\n description: `Analyze Vue.js files for accessibility issues using ESLint with eslint-plugin-vuejs-accessibility.\n\nPerforms static code analysis of Vue components.\n\nInput options:\n- files: Array of file paths to lint (must be .vue files)\n- directory: Directory path to lint recursively\n- code: Inline Vue component code to lint\n- options.rules: Override specific rule configurations (off, warn, error, or 0-2)\n- options.fix: Fix mode (always disabled - MCP only reports issues)\n\nOutput:\n- issues: Array of accessibility issues found\n- summary: Issue counts by severity and WCAG principle\n- metadata: Tool version info`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n ESLintToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = ESLintA11yToolInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handleESLintAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapter as disposeESLintAdapter };\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { AxeAdapter } from '@/adapters/axe.js';\nimport { Pa11yAdapter } from '@/adapters/pa11y.js';\nimport { CombinedAnalysisInputSchema, type CombinedAnalysisInput } from '@/types/tool-inputs.js';\nimport type { AnalysisTarget, AnalysisOptions } from '@/types/analysis.js';\nimport type {\n AnalysisResult,\n AccessibilityIssue,\n CombinedAnalysisResult,\n ToolSource,\n Severity,\n WCAGPrinciple\n} from '@/types/accessibility.js';\nimport {\n type ToolDefinition,\n type ToolResponse,\n createJsonResponse,\n createErrorResponse,\n withToolContext,\n} from './base.js';\n\nlet sharedAxeAdapter: AxeAdapter | null = null;\nlet sharedPa11yAdapter: Pa11yAdapter | null = null;\n\nfunction getAxeAdapter(): AxeAdapter {\n if (!sharedAxeAdapter) {\n sharedAxeAdapter = new AxeAdapter({ headless: true, timeout: 30000 });\n }\n return sharedAxeAdapter;\n}\n\nfunction getPa11yAdapter(): Pa11yAdapter {\n if (!sharedPa11yAdapter) {\n sharedPa11yAdapter = new Pa11yAdapter({ timeout: 30000 });\n }\n return sharedPa11yAdapter;\n}\n\nasync function disposeAdapters(): Promise<void> {\n await Promise.all([\n sharedAxeAdapter?.dispose(),\n sharedPa11yAdapter?.dispose()\n ]);\n sharedAxeAdapter = null;\n sharedPa11yAdapter = null;\n}\n\nfunction buildAnalysisTarget(input: CombinedAnalysisInput): AnalysisTarget {\n if (input.url) {\n return {\n type: 'url',\n value: input.url,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n }\n\n return {\n type: 'html',\n value: input.html!,\n options: {\n waitForSelector: input.options?.browser?.waitForSelector,\n timeout: input.options?.browser?.waitForTimeout,\n viewport: input.options?.browser?.viewport,\n },\n };\n}\n\nfunction buildAnalysisOptions(input: CombinedAnalysisInput): AnalysisOptions {\n return {\n wcagLevel: input.options?.wcagLevel ?? 'AA',\n includeWarnings: true,\n };\n}\n\nfunction generateIssueFingerprint(issue: AccessibilityIssue): string {\n const parts = [\n issue.ruleId,\n issue.wcag?.criterion ?? 'no-wcag',\n issue.location.selector ?? issue.location.file ?? 'no-location',\n issue.message.substring(0, 50)\n ];\n return parts.join('|');\n}\n\nfunction deduplicateIssues(issues: AccessibilityIssue[]): AccessibilityIssue[] {\n const seen = new Map<string, AccessibilityIssue>();\n\n for (const issue of issues) {\n const fingerprint = generateIssueFingerprint(issue);\n\n if (!seen.has(fingerprint)) {\n seen.set(fingerprint, issue);\n } else {\n const existing = seen.get(fingerprint)!;\n\n if (issue.severity === 'critical' && existing.severity !== 'critical') {\n seen.set(fingerprint, issue);\n } else if (issue.confidence && existing.confidence && issue.confidence > existing.confidence) {\n seen.set(fingerprint, issue);\n }\n }\n }\n\n return Array.from(seen.values());\n}\n\nfunction groupByWCAG(issues: AccessibilityIssue[]): Record<string, AccessibilityIssue[]> {\n const grouped: Record<string, AccessibilityIssue[]> = {};\n\n for (const issue of issues) {\n const key = issue.wcag?.criterion ?? 'unknown';\n if (!grouped[key]) {\n grouped[key] = [];\n }\n grouped[key]!.push(issue);\n }\n\n return grouped;\n}\n\nfunction buildCombinedSummary(\n issues: AccessibilityIssue[],\n _toolsUsed: ToolSource[]\n): CombinedAnalysisResult['summary'] {\n const bySeverity: Record<Severity, number> = {\n critical: 0,\n serious: 0,\n moderate: 0,\n minor: 0\n };\n\n const byPrinciple: Record<WCAGPrinciple, number> = {\n perceivable: 0,\n operable: 0,\n understandable: 0,\n robust: 0\n };\n\n const byTool: Record<ToolSource, number> = {\n 'axe-core': 0,\n 'pa11y': 0,\n };\n\n const byRule: Record<string, number> = {};\n\n for (const issue of issues) {\n bySeverity[issue.severity]++;\n\n if (issue.wcag?.principle) {\n byPrinciple[issue.wcag.principle]++;\n }\n\n byTool[issue.tool]++;\n byRule[issue.ruleId] = (byRule[issue.ruleId] ?? 0) + 1;\n }\n\n return {\n total: issues.length,\n bySeverity,\n byPrinciple,\n byTool,\n byRule\n };\n}\n\ninterface CombinedToolOutput {\n success: boolean;\n target: string;\n toolsUsed: ToolSource[];\n issueCount: number;\n deduplicatedCount: number;\n issues: AccessibilityIssue[];\n issuesByWCAG: Record<string, AccessibilityIssue[]>;\n summary: CombinedAnalysisResult['summary'];\n individualResults: AnalysisResult[];\n duration?: number | undefined;\n error?: string | undefined;\n}\n\nfunction formatOutput(\n result: CombinedAnalysisResult,\n deduplicatedCount: number,\n issuesByWCAG: Record<string, AccessibilityIssue[]>\n): CombinedToolOutput {\n return {\n success: result.success,\n target: result.target,\n toolsUsed: result.toolsUsed,\n issueCount: result.issues.length,\n deduplicatedCount,\n issues: result.issues,\n issuesByWCAG,\n summary: result.summary,\n individualResults: result.individualResults ?? [],\n duration: result.duration,\n error: result.error\n };\n}\n\nconst handleCombinedAnalysis = withToolContext<CombinedAnalysisInput>(\n 'analyze-all',\n async (input, context): Promise<ToolResponse> => {\n const startTime = Date.now();\n const toolsToRun = input.tools ?? ['axe-core', 'pa11y'];\n const shouldDeduplicate = input.options?.deduplicateResults ?? true;\n\n context.logger.info('Starting combined web analysis', {\n tools: toolsToRun,\n deduplicate: shouldDeduplicate,\n hasUrl: !!input.url,\n hasHtml: !!input.html\n });\n\n const target = buildAnalysisTarget(input);\n const options = buildAnalysisOptions(input);\n\n const results: AnalysisResult[] = [];\n const errors: string[] = [];\n\n const analysisPromises: Promise<void>[] = [];\n\n if (toolsToRun.includes('axe-core')) {\n analysisPromises.push(\n (async () => {\n try {\n const adapter = getAxeAdapter();\n const result = await adapter.analyze(target, options);\n results.push(result);\n context.logger.debug('Axe analysis completed', { issueCount: result.issues.length });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n errors.push(`Axe: ${msg}`);\n context.logger.error('Axe analysis failed', {\n error: error instanceof Error ? error : new Error(String(error))\n });\n }\n })()\n );\n }\n\n if (toolsToRun.includes('pa11y')) {\n analysisPromises.push(\n (async () => {\n try {\n const adapter = getPa11yAdapter();\n const result = await adapter.analyze(target, options);\n results.push(result);\n context.logger.debug('Pa11y analysis completed', { issueCount: result.issues.length });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n errors.push(`Pa11y: ${msg}`);\n context.logger.error('Pa11y analysis failed', {\n error: error instanceof Error ? error : new Error(String(error))\n });\n }\n })()\n );\n }\n\n await Promise.all(analysisPromises);\n\n const allIssues = results.flatMap(r => r.issues);\n const originalCount = allIssues.length;\n\n const finalIssues = shouldDeduplicate\n ? deduplicateIssues(allIssues)\n : allIssues;\n\n const issuesByWCAG = groupByWCAG(finalIssues);\n const duration = Date.now() - startTime;\n\n context.logger.info('Combined analysis completed', {\n totalIssues: originalCount,\n deduplicatedIssues: finalIssues.length,\n toolsRun: results.length,\n errors: errors.length,\n durationMs: duration\n });\n\n const combinedResult: CombinedAnalysisResult = {\n success: errors.length === 0,\n timestamp: new Date().toISOString(),\n duration,\n target: target.value,\n toolsUsed: results.map(r => r.tool),\n issues: finalIssues,\n summary: buildCombinedSummary(finalIssues, toolsToRun),\n individualResults: results,\n error: errors.length > 0 ? errors.join('; ') : undefined\n };\n\n const output = formatOutput(combinedResult, originalCount, issuesByWCAG);\n return createJsonResponse(output, !combinedResult.success);\n }\n);\n\nconst CombinedToolMcpInputSchema = z.object({\n url: z.string().url().optional().describe('URL of the page to analyze'),\n html: z.string().min(1).optional().describe('Raw HTML content to analyze'),\n tools: z\n .array(z.enum(['axe-core', 'pa11y']))\n .min(1)\n .default(['axe-core', 'pa11y'])\n .describe('Tools to run for web analysis'),\n options: z\n .object({\n wcagLevel: z\n .enum(['A', 'AA', 'AAA'])\n .default('AA')\n .describe('WCAG conformance level'),\n deduplicateResults: z\n .boolean()\n .default(true)\n .describe('Merge similar issues from different tools'),\n browser: z\n .object({\n waitForSelector: z.string().optional().describe('CSS selector to wait for'),\n waitForTimeout: z.number().int().positive().max(60000).optional(),\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(720),\n })\n .optional(),\n })\n .optional(),\n })\n .optional(),\n});\n\nexport const analyzeAllTool: ToolDefinition = {\n name: 'analyze-all',\n description: `Run multiple accessibility analysis tools in parallel and combine results.\n\nExecutes axe-core and Pa11y for web analysis (URL/HTML). Use analyze-with-eslint separately for Vue source code analysis.\n\nInput options:\n- url: URL of the page to analyze (required for web analysis)\n- html: Raw HTML content (alternative to url for web analysis)\n- tools: Array of tools to run ['axe-core', 'pa11y']. Default: ['axe-core', 'pa11y']\n- options.wcagLevel: WCAG level (A, AA, AAA). Default: AA\n- options.deduplicateResults: Merge similar issues from different tools. Default: true\n- options.browser.waitForSelector: CSS selector to wait for\n- options.browser.viewport: Browser viewport dimensions\n\nOutput:\n- issues: Combined and deduplicated accessibility issues\n- issuesByWCAG: Issues grouped by WCAG criterion\n- summary: Aggregated counts by severity, principle, and tool\n- individualResults: Full results from each tool\n- deduplicatedCount: Number of duplicate issues removed\n\nNote: For Vue source code analysis, use analyze-with-eslint separately.`,\n\n register(server: McpServer): void {\n server.tool(\n this.name,\n this.description,\n CombinedToolMcpInputSchema.shape,\n async (input): Promise<{ content: Array<{ type: 'text'; text: string }> }> => {\n const parseResult = CombinedAnalysisInputSchema.safeParse(input);\n\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => `${e.path.join('.')}: ${e.message}`)\n .join('; ');\n const response = createErrorResponse(new Error(`Invalid input: ${errors}`));\n return { content: response.content };\n }\n\n const response = await handleCombinedAnalysis(parseResult.data);\n return { content: response.content };\n }\n );\n },\n};\n\nexport { disposeAdapters as disposeAnalyzeAllAdapters };\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { logger } from \"@/utils/logger.js\";\nimport {\n analyzeWithAxeTool,\n analyzeWithPa11yTool,\n analyzeWithESLintTool,\n analyzeAllTool,\n disposeAxeAdapter,\n disposePa11yAdapter,\n disposeESLintAdapter,\n disposeAnalyzeAllAdapters\n} from \"@/tools/index.js\";\n\nconst server = new McpServer({\n name: 'AI-ccesibility',\n version: '0.1.1'\n});\n\nfunction registerTools(): void {\n analyzeWithAxeTool.register(server);\n logger.info('Registered tool: analyze-with-axe');\n\n analyzeWithPa11yTool.register(server);\n logger.info('Registered tool: analyze-with-pa11y');\n\n analyzeWithESLintTool.register(server);\n logger.info('Registered tool: analyze-with-eslint');\n\n analyzeAllTool.register(server);\n logger.info('Registered tool: analyze-all');\n}\n\nasync function main(): Promise<void> {\n logger.info('Starting AI-ccesibility Server', {\n version: '0.1.1',\n tools: ['analyze-with-axe', 'analyze-with-pa11y', 'analyze-with-eslint', 'analyze-all']\n });\n\n registerTools();\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n logger.info('AI-ccesibility Server connected and ready');\n}\n\nasync function shutdown(): Promise<void> {\n logger.info('Shutting down AI-ccesibility Server');\n\n await Promise.all([\n disposeAxeAdapter(),\n disposePa11yAdapter(),\n disposeESLintAdapter(),\n disposeAnalyzeAllAdapters()\n ]);\n\n logger.info('All adapters disposed');\n process.exit(0);\n}\n\nprocess.on('SIGINT', shutdown);\nprocess.on('SIGTERM', shutdown);\n\nmain().catch((error: unknown) => {\n logger.error('Failed to start MCP server', {\n error: error instanceof Error ? error : new Error(String(error))\n });\n process.exit(1);\n});\n"]}
|