lynxprompt 2.0.7 → 2.0.8

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/login.ts","../src/config.ts","../src/api.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/list.ts","../src/commands/pull.ts","../src/utils/blueprint-tracker.ts","../src/commands/push.ts","../src/utils/detect.ts","../src/commands/wizard.ts","../src/utils/generator.ts","../../packages/shared/dist/wizard/languages.js","../../packages/shared/dist/wizard/frameworks.js","../../packages/shared/dist/wizard/databases.js","../../packages/shared/dist/wizard/tech-stack.js","../../packages/shared/dist/wizard/project-types.js","../../packages/shared/dist/wizard/repository.js","../../packages/shared/dist/wizard/ai-behavior.js","../../packages/shared/dist/wizard/security.js","../../packages/shared/dist/wizard/code-style.js","../../packages/shared/dist/wizard/testing.js","../../packages/shared/dist/wizard/commands.js","../src/utils/wizard-options.ts","../src/commands/search.ts","../src/commands/status.ts","../src/commands/check.ts","../src/commands/diff.ts","../src/commands/link.ts","../src/commands/analyze.ts","../src/commands/convert.ts","../src/commands/merge.ts","../src/commands/import.ts","../src/commands/hierarchies.ts","../src/commands/config.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { whoamiCommand } from \"./commands/whoami.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { pullCommand } from \"./commands/pull.js\";\nimport { pushCommand } from \"./commands/push.js\";\nimport { wizardCommand } from \"./commands/wizard.js\";\nimport { searchCommand } from \"./commands/search.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { checkCommand } from \"./commands/check.js\";\nimport { diffCommand } from \"./commands/diff.js\";\nimport { linkCommand, unlinkCommand } from \"./commands/link.js\";\nimport { analyzeCommand } from \"./commands/analyze.js\";\nimport { convertCommand } from \"./commands/convert.js\";\nimport { mergeCommand } from \"./commands/merge.js\";\nimport { importCommand } from \"./commands/import.js\";\nimport { hierarchiesCommand } from \"./commands/hierarchies.js\";\nimport { configCommand } from \"./commands/config.js\";\n\n// CLI version injected at build time via tsup.config.ts define option\nconst CLI_VERSION = process.env.CLI_VERSION || \"0.0.0\";\n\nconst program = new Command();\n\nprogram\n .name(\"lynxprompt\")\n .description(\"CLI for LynxPrompt - Generate AI IDE configuration files\")\n .version(CLI_VERSION);\n\n// ============================================\n// Primary Commands (most users need these)\n// ============================================\n\n// Wizard - the main command for most users\nprogram\n .command(\"wizard\")\n .description(\"Generate AI IDE configuration (recommended for most users)\")\n .option(\"-n, --name <name>\", \"Project name\")\n .option(\"-d, --description <description>\", \"Project description\")\n .option(\"-s, --stack <stack>\", \"Tech stack (comma-separated)\")\n .option(\"-f, --format <format>\", \"Output format: agents, cursor, or comma-separated for multiple\")\n .option(\"-p, --platforms <platforms>\", \"Alias for --format (deprecated)\")\n .option(\"--persona <persona>\", \"AI persona (fullstack, backend, frontend, devops, data, security)\")\n .option(\"--boundaries <level>\", \"Boundary preset (conservative, standard, permissive)\")\n .option(\"-y, --yes\", \"Skip prompts, use defaults (generates AGENTS.md)\")\n // New arguments\n .option(\"-o, --output <dir>\", \"Output directory (default: current directory)\")\n .option(\"--repo-url <url>\", \"Analyze remote repository URL (GitHub/GitLab supported)\")\n .option(\"--blueprint\", \"Generate with [[VARIABLE|default]] placeholders for templates\")\n .option(\"--license <type>\", \"License type (mit, apache-2.0, gpl-3.0, etc.)\")\n .option(\"--ci-cd <platform>\", \"CI/CD platform (github_actions, gitlab_ci, jenkins, etc.)\")\n .option(\"--project-type <type>\", \"Project type (work, leisure, opensource, learning)\")\n .option(\"--detect-only\", \"Only detect project info, don't generate files\")\n .option(\"--load-draft <name>\", \"Load a saved wizard draft\")\n .option(\"--save-draft <name>\", \"Save wizard state as a draft (auto-saves at end)\")\n .option(\"--vars <values>\", \"Fill variables: VAR1=value1,VAR2=value2\")\n .action(wizardCommand);\n\n// Check - validation for CI/CD\nprogram\n .command(\"check\")\n .description(\"Validate AI configuration files (for CI/CD)\")\n .option(\"--ci\", \"CI mode - exit codes only (0=pass, 1=fail)\")\n .action(checkCommand);\n\n// Analyze - standalone project analyzer\nprogram\n .command(\"analyze\")\n .description(\"Analyze project configuration without generating files\")\n .option(\"-r, --remote <url>\", \"Analyze a remote repository (GitHub/GitLab)\")\n .option(\"-j, --json\", \"Output as JSON (for scripting)\")\n .action(analyzeCommand);\n\n// Convert - format conversion\nprogram\n .command(\"convert [source] <target>\")\n .description(\"Convert AI config between formats (e.g., AGENTS.md → cursor)\")\n .option(\"-o, --output <file>\", \"Output filename\")\n .option(\"-f, --force\", \"Overwrite existing output file\")\n .action(convertCommand);\n\n// Merge - combine multiple configs\nprogram\n .command(\"merge <files...>\")\n .description(\"Merge multiple AI configuration files into one\")\n .option(\"-o, --output <file>\", \"Output filename (default: merged.md)\")\n .option(\"-s, --strategy <type>\", \"Merge strategy: concat, sections, smart (default: smart)\")\n .option(\"-f, --force\", \"Overwrite existing output file\")\n .option(\"-i, --interactive\", \"Review and select sections to include\")\n .action(mergeCommand);\n\n// Import - scan for existing AGENTS.md files (monorepo support)\nprogram\n .command(\"import [path]\")\n .description(\"Scan and import AGENTS.md files from a repository\")\n .option(\"--dry-run\", \"Preview what would be imported without changes\")\n .option(\"--no-recursive\", \"Don't scan subdirectories\")\n .option(\"--depth <n>\", \"Max directory depth to scan\", \"10\")\n .option(\"--pattern <file>\", \"Custom config filename to look for\")\n .option(\"--link\", \"Link imported files to cloud (requires login)\")\n .option(\"-v, --verbose\", \"Show detailed section information\")\n .option(\"-j, --json\", \"Output as JSON\")\n .action(importCommand);\n\n// Status - show what's configured\nprogram\n .command(\"status\")\n .description(\"Show current AI configuration and tracked blueprints\")\n .action(statusCommand);\n\n// ============================================\n// Blueprint Commands (marketplace integration)\n// ============================================\n\nprogram\n .command(\"pull <id>\")\n .description(\"Download a blueprint (bp_xxx) or entire hierarchy (ha_xxx)\")\n .option(\"-o, --output <path>\", \"Output directory\", \".\")\n .option(\"-y, --yes\", \"Overwrite existing files without prompting\")\n .option(\"--preview\", \"Preview content without downloading\")\n .option(\"--no-track\", \"Don't track the blueprint for future syncs\")\n .action(pullCommand);\n\nprogram\n .command(\"search <query>\")\n .description(\"Search public blueprints in the marketplace\")\n .option(\"-l, --limit <number>\", \"Number of results\", \"20\")\n .action(searchCommand);\n\nprogram\n .command(\"list\")\n .description(\"List your blueprints\")\n .option(\"-l, --limit <number>\", \"Number of results\", \"20\")\n .option(\"-v, --visibility <visibility>\", \"Filter: PRIVATE, TEAM, PUBLIC, or all\")\n .action(listCommand);\n\nprogram\n .command(\"push [file]\")\n .description(\"Push local file to LynxPrompt cloud as a blueprint\")\n .option(\"-n, --name <name>\", \"Blueprint name\")\n .option(\"-d, --description <desc>\", \"Blueprint description\")\n .option(\"-v, --visibility <vis>\", \"Visibility: PRIVATE, TEAM, or PUBLIC\", \"PRIVATE\")\n .option(\"-t, --tags <tags>\", \"Tags (comma-separated)\")\n .option(\"-y, --yes\", \"Skip prompts\")\n .option(\"-f, --force\", \"Force push (overwrite remote changes)\")\n .action(pushCommand);\n\nprogram\n .command(\"hierarchies\")\n .description(\"List your blueprint hierarchies (monorepo groupings)\")\n .option(\"-l, --limit <number>\", \"Number of results\", \"50\")\n .option(\"-j, --json\", \"Output as JSON\")\n .action(hierarchiesCommand);\n\n// Link/Unlink - connect local files to cloud blueprints\nprogram\n .command(\"link [file] [blueprint-id]\")\n .description(\"Link a local file to a cloud blueprint for tracking\")\n .option(\"--list\", \"List all tracked blueprints\")\n .action(linkCommand);\n\nprogram\n .command(\"unlink [file]\")\n .description(\"Disconnect a local file from its cloud blueprint\")\n .action(unlinkCommand);\n\n// Diff - compare local with remote\nprogram\n .command(\"diff [file-or-id]\")\n .description(\"Compare tracked files with their cloud blueprints\")\n .option(\"--local\", \"Compare .lynxprompt/rules/ with exported files\")\n .action(diffCommand);\n\n// ============================================\n// Auth Commands\n// ============================================\n\nprogram\n .command(\"login\")\n .description(\"Authenticate with LynxPrompt (opens browser)\")\n .action(loginCommand);\n\nprogram\n .command(\"logout\")\n .description(\"Log out and remove stored credentials\")\n .action(logoutCommand);\n\nprogram\n .command(\"whoami\")\n .description(\"Show current authenticated user\")\n .action(whoamiCommand);\n\nprogram\n .command(\"config [action] [value]\")\n .description(\"View or change CLI settings (set-url, reset-url, path)\")\n .action(configCommand);\n\n// ============================================\n// Help formatting\n// ============================================\n\nprogram.addHelpText(\n \"beforeAll\",\n `\n${chalk.cyan(\"🐱 LynxPrompt CLI\")} ${chalk.gray(\"(also available as: lynxp)\")}\n${chalk.gray(\"Generate AI IDE configuration files from your terminal\")}\n`\n);\n\nprogram.addHelpText(\n \"after\",\n `\n${chalk.cyan(\"Quick Start:\")}\n ${chalk.white(\"$ lynxp wizard\")} ${chalk.gray(\"Generate config interactively\")}\n ${chalk.white(\"$ lynxp wizard -y\")} ${chalk.gray(\"Generate AGENTS.md with defaults\")}\n ${chalk.white(\"$ lynxp wizard -f cursor\")} ${chalk.gray(\"Generate .cursor/rules/\")}\n ${chalk.white(\"$ lynxp wizard --blueprint\")} ${chalk.gray(\"Generate with [[VAR|default]] placeholders\")}\n\n${chalk.cyan(\"Analysis & Tools:\")}\n ${chalk.white(\"$ lynxp analyze\")} ${chalk.gray(\"Analyze project tech stack\")}\n ${chalk.white(\"$ lynxp analyze -r <url>\")} ${chalk.gray(\"Analyze remote repository\")}\n ${chalk.white(\"$ lynxp import\")} ${chalk.gray(\"Scan repo for AGENTS.md files\")}\n ${chalk.white(\"$ lynxp import --dry-run\")} ${chalk.gray(\"Preview monorepo hierarchy\")}\n ${chalk.white(\"$ lynxp convert AGENTS.md cursor\")} ${chalk.gray(\"Convert to Cursor format\")}\n ${chalk.white(\"$ lynxp merge a.md b.md -o out.md\")} ${chalk.gray(\"Merge multiple configs\")}\n\n${chalk.cyan(\"Marketplace:\")}\n ${chalk.white(\"$ lynxp search nextjs\")} ${chalk.gray(\"Search blueprints\")}\n ${chalk.white(\"$ lynxp pull bp_abc123\")} ${chalk.gray(\"Download and track a blueprint\")}\n ${chalk.white(\"$ lynxp pull ha_xyz789\")} ${chalk.gray(\"Download entire hierarchy\")}\n ${chalk.white(\"$ lynxp push\")} ${chalk.gray(\"Push local file to cloud\")}\n ${chalk.white(\"$ lynxp hierarchies\")} ${chalk.gray(\"List your hierarchies\")}\n ${chalk.white(\"$ lynxp link --list\")} ${chalk.gray(\"Show tracked blueprints\")}\n\n${chalk.cyan(\"Blueprint Tracking:\")}\n ${chalk.white(\"$ lynxp link AGENTS.md bp_xyz\")} ${chalk.gray(\"Link existing file to blueprint\")}\n ${chalk.white(\"$ lynxp unlink AGENTS.md\")} ${chalk.gray(\"Disconnect from cloud\")}\n ${chalk.white(\"$ lynxp diff bp_abc123\")} ${chalk.gray(\"Show changes vs cloud version\")}\n\n${chalk.cyan(\"CI/CD:\")}\n ${chalk.white(\"$ lynxp check --ci\")} ${chalk.gray(\"Validate config (exit code)\")}\n\n${chalk.cyan(\"Configuration:\")}\n ${chalk.white(\"$ lynxp config\")} ${chalk.gray(\"Show current settings\")}\n ${chalk.white(\"$ lynxp config set-url <url>\")} ${chalk.gray(\"Point CLI to a self-hosted instance\")}\n ${chalk.white(\"$ lynxp config reset-url\")} ${chalk.gray(\"Reset to https://api.lynxprompt.com\")}\n ${chalk.white(\"$ lynxp config path\")} ${chalk.gray(\"Show config file location\")}\n\n${chalk.gray(\"Docs: https://lynxprompt.com/docs/cli\")}\n`\n);\n\nprogram.parse();\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { setToken, setUser, isAuthenticated } from \"../config.js\";\n\nexport async function loginCommand(): Promise<void> {\n if (isAuthenticated()) {\n console.log(\n chalk.yellow(\n \"You are already logged in. Use 'lynxprompt logout' first to switch accounts.\"\n )\n );\n return;\n }\n\n const spinner = ora(\"Initializing authentication...\").start();\n\n try {\n // Initialize CLI session\n const session = await api.initCliSession();\n spinner.stop();\n\n console.log();\n console.log(chalk.cyan(\"🔐 Opening browser to authenticate...\"));\n console.log(chalk.gray(` ${session.auth_url}`));\n console.log();\n\n // Try to open the browser\n const openBrowser = await tryOpenBrowser(session.auth_url);\n if (!openBrowser) {\n console.log(\n chalk.yellow(\"Could not open browser automatically. Please open the URL above manually.\")\n );\n }\n\n // Poll for completion\n const pollSpinner = ora(\"Waiting for authentication...\").start();\n \n const maxWaitTime = 5 * 60 * 1000; // 5 minutes\n const pollInterval = 2000; // 2 seconds\n const startTime = Date.now();\n\n while (Date.now() - startTime < maxWaitTime) {\n await sleep(pollInterval);\n\n try {\n const result = await api.pollCliSession(session.session_id);\n\n if (result.status === \"completed\" && result.token && result.user) {\n pollSpinner.succeed(\"Authentication successful!\");\n \n // Store credentials\n setToken(result.token);\n setUser(result.user);\n\n // Show cool welcome message with plan info\n displayWelcome(result.user);\n return;\n }\n\n if (result.status === \"expired\") {\n pollSpinner.fail(\"Authentication session expired. Please try again.\");\n return;\n }\n\n // status === \"pending\", continue polling\n } catch (error) {\n // Ignore polling errors, keep trying\n }\n }\n\n pollSpinner.fail(\"Authentication timed out. Please try again.\");\n } catch (error) {\n spinner.fail(\"Failed to initialize authentication\");\n \n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n if (error.statusCode === 503) {\n console.error(chalk.gray(\"The server may be temporarily unavailable. Please try again later.\"));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n console.error(chalk.gray(\"Make sure you have internet connectivity and try again.\"));\n }\n process.exit(1);\n }\n}\n\nasync function tryOpenBrowser(url: string): Promise<boolean> {\n try {\n // Dynamic import for open package\n const { default: open } = await import(\"open\");\n await open(url);\n return true;\n } catch {\n // If open package is not available or fails, try native commands\n const { exec } = await import(\"child_process\");\n const { promisify } = await import(\"util\");\n const execAsync = promisify(exec);\n\n const platform = process.platform;\n let command: string;\n\n if (platform === \"darwin\") {\n command = `open \"${url}\"`;\n } else if (platform === \"win32\") {\n command = `start \"\" \"${url}\"`;\n } else {\n command = `xdg-open \"${url}\"`;\n }\n\n try {\n await execAsync(command);\n return true;\n } catch {\n return false;\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\ninterface UserInfo {\n id: string;\n email: string;\n name: string | null;\n plan: string;\n}\n\nfunction displayWelcome(user: UserInfo): void {\n const name = user.name || user.email.split(\"@\")[0];\n \n const W = 46;\n const b = chalk.bold;\n const pad = (s: string, len: number) => s + \" \".repeat(Math.max(0, len - s.length));\n \n console.log();\n console.log(b(\"┌\" + \"─\".repeat(W) + \"┐\"));\n console.log(b(\"│\") + \" \".repeat(W) + b(\"│\"));\n console.log(b(\"│\") + pad(\" 🐱 Welcome to LynxPrompt CLI!\", W) + b(\"│\"));\n console.log(b(\"│\") + \" \".repeat(W) + b(\"│\"));\n console.log(b(\"│\") + pad(` User: ${name}`, W) + b(\"│\"));\n console.log(b(\"│\") + \" \".repeat(W) + b(\"│\"));\n console.log(b(\"└\" + \"─\".repeat(W) + \"┘\"));\n console.log();\n \n console.log(chalk.bold(\"📋 Your CLI Capabilities:\"));\n console.log();\n \n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp wizard\") + chalk.gray(\" - Interactive config wizard\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp list\") + chalk.gray(\" - List your blueprints\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp pull <id>\") + chalk.gray(\" - Download blueprints\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp push\") + chalk.gray(\" - Upload blueprints to marketplace\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp link\") + chalk.gray(\" - Link project to blueprint\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp diff\") + chalk.gray(\" - Compare local vs cloud\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp whoami\") + chalk.gray(\" - Show account info\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp logout\") + chalk.gray(\" - Sign out of CLI\"));\n \n console.log();\n console.log(chalk.gray(\"Token stored securely. Run \") + chalk.cyan(\"lynxp --help\") + chalk.gray(\" to see all commands.\"));\n console.log();\n}\n\n\n\n\n","import Conf from \"conf\";\n\ninterface ConfigSchema {\n token?: string;\n apiUrl: string;\n user?: {\n id: string;\n email: string;\n name: string | null;\n plan: string;\n };\n}\n\nconst config = new Conf<ConfigSchema>({\n projectName: \"lynxprompt\",\n schema: {\n token: {\n type: \"string\",\n },\n apiUrl: {\n type: \"string\",\n default: \"https://api.lynxprompt.com\",\n },\n user: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n email: { type: \"string\" },\n name: { type: [\"string\", \"null\"] },\n plan: { type: \"string\" },\n },\n },\n },\n defaults: {\n apiUrl: \"https://api.lynxprompt.com\",\n },\n});\n\nexport function getToken(): string | undefined {\n // Environment variable takes precedence\n const envToken = process.env.LYNXPROMPT_TOKEN;\n if (envToken) {\n return envToken;\n }\n return config.get(\"token\");\n}\n\nexport function setToken(token: string): void {\n config.set(\"token\", token);\n}\n\nexport function clearToken(): void {\n config.delete(\"token\");\n config.delete(\"user\");\n}\n\nexport function getApiUrl(): string {\n // Allow override via environment variable\n const envUrl = process.env.LYNXPROMPT_API_URL;\n if (envUrl) {\n return envUrl;\n }\n return config.get(\"apiUrl\");\n}\n\nexport function setApiUrl(url: string): void {\n config.set(\"apiUrl\", url);\n}\n\nexport function getUser(): ConfigSchema[\"user\"] | undefined {\n return config.get(\"user\");\n}\n\nexport function setUser(user: ConfigSchema[\"user\"]): void {\n config.set(\"user\", user);\n}\n\nexport function isAuthenticated(): boolean {\n return !!getToken();\n}\n\nexport function getConfigPath(): string {\n return config.path;\n}\n\n","import { getToken, getApiUrl } from \"./config.js\";\n\nexport interface ApiError {\n error: string;\n message?: string;\n expired_at?: string;\n}\n\nexport interface Blueprint {\n id: string;\n name: string;\n description: string | null;\n type: string;\n tier: string;\n category: string;\n tags: string[];\n visibility: \"PRIVATE\" | \"TEAM\" | \"PUBLIC\";\n downloads: number;\n favorites: number;\n created_at: string;\n updated_at: string;\n content?: string;\n // Hierarchy fields for monorepo AGENTS.md support\n hierarchy_id?: string | null;\n parent_id?: string | null;\n repository_path?: string | null;\n content_checksum?: string | null;\n}\n\nexport interface Hierarchy {\n id: string;\n name: string;\n description: string | null;\n repository_root: string;\n blueprint_count?: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface HierarchyDetail extends Hierarchy {\n blueprints: Blueprint[];\n tree: BlueprintTreeNode[];\n total_blueprints: number;\n}\n\nexport interface BlueprintTreeNode extends Blueprint {\n children: BlueprintTreeNode[];\n}\n\nexport interface HierarchiesResponse {\n hierarchies: Hierarchy[];\n total: number;\n limit: number;\n offset: number;\n has_more: boolean;\n}\n\nexport interface BlueprintsResponse {\n blueprints: Blueprint[];\n total: number;\n limit: number;\n offset: number;\n has_more: boolean;\n}\n\nexport interface UserResponse {\n user: {\n id: string;\n email: string;\n name: string | null;\n display_name: string | null;\n persona: string | null;\n skill_level: string | null;\n plan: string;\n stats: {\n blueprints_count: number;\n };\n created_at: string;\n };\n}\n\nexport interface CliSessionResponse {\n session_id: string;\n auth_url: string;\n expires_at: string;\n}\n\nexport interface CliPollResponse {\n status: \"pending\" | \"completed\" | \"expired\";\n token?: string;\n user?: {\n id: string;\n email: string;\n name: string | null;\n plan: string;\n };\n}\n\nexport interface SearchResult {\n id: string;\n name: string;\n description: string;\n author: string;\n authorId?: string;\n downloads: number;\n likes: number;\n tags: string[];\n tier: string;\n category: string;\n isOfficial: boolean;\n aiAssisted: boolean;\n}\n\nexport interface SearchResponse {\n templates: SearchResult[];\n popularTags: string[];\n total: number;\n hasMore: boolean;\n}\n\nclass ApiClient {\n private getHeaders(): Record<string, string> {\n const token = getToken();\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n return headers;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const baseUrl = getApiUrl();\n const url = `${baseUrl}${endpoint}`;\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options.headers,\n },\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data as ApiError;\n throw new ApiRequestError(\n error.message || error.error || \"Request failed\",\n response.status,\n error\n );\n }\n\n return data as T;\n }\n\n // Auth endpoints\n async initCliSession(): Promise<CliSessionResponse> {\n return this.request<CliSessionResponse>(\"/api/cli-auth/init\", {\n method: \"POST\",\n });\n }\n\n async pollCliSession(sessionId: string): Promise<CliPollResponse> {\n return this.request<CliPollResponse>(\n `/api/cli-auth/poll?session=${sessionId}`\n );\n }\n\n // User endpoints\n async getUser(): Promise<UserResponse> {\n return this.request<UserResponse>(\"/api/v1/user\");\n }\n\n // Blueprint endpoints\n async listBlueprints(options: {\n limit?: number;\n offset?: number;\n visibility?: string;\n } = {}): Promise<BlueprintsResponse> {\n const params = new URLSearchParams();\n if (options.limit) params.set(\"limit\", options.limit.toString());\n if (options.offset) params.set(\"offset\", options.offset.toString());\n if (options.visibility) params.set(\"visibility\", options.visibility);\n\n const query = params.toString();\n return this.request<BlueprintsResponse>(\n `/api/v1/blueprints${query ? `?${query}` : \"\"}`\n );\n }\n\n async getBlueprint(id: string): Promise<{ blueprint: Blueprint }> {\n // IDs can be:\n // - bp_xxx (standard blueprint IDs)\n // - usr_xxx (legacy prefix, still supported)\n // - plain ID (needs bp_ prefix for v1 API)\n \n // Ensure bp_ prefix for v1 API (supports both bp_ and usr_ on server)\n let apiId = id;\n if (!id.startsWith(\"bp_\") && !id.startsWith(\"usr_\")) {\n apiId = `bp_${id}`;\n }\n return this.request<{ blueprint: Blueprint }>(`/api/v1/blueprints/${apiId}`);\n }\n\n async searchBlueprints(query: string, limit: number = 20): Promise<SearchResponse> {\n const params = new URLSearchParams({\n q: query,\n limit: limit.toString(),\n });\n return this.request<SearchResponse>(`/api/blueprints?${params}`);\n }\n\n async createBlueprint(data: {\n name: string;\n description: string;\n content: string;\n visibility: \"PRIVATE\" | \"TEAM\" | \"PUBLIC\";\n tags?: string[];\n type?: string; // Blueprint type (AGENTS_MD, CURSOR_COMMAND, CLAUDE_COMMAND, etc.)\n // Hierarchy fields for monorepo AGENTS.md support\n hierarchy_id?: string | null;\n parent_id?: string | null;\n repository_path?: string | null;\n }): Promise<{ blueprint: Blueprint }> {\n return this.request<{ blueprint: Blueprint }>(\"/api/v1/blueprints\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n\n async updateBlueprint(\n id: string,\n data: {\n name?: string;\n description?: string;\n content?: string;\n visibility?: \"PRIVATE\" | \"TEAM\" | \"PUBLIC\";\n tags?: string[];\n expected_checksum?: string; // For optimistic locking\n }\n ): Promise<{ blueprint: Blueprint }> {\n const apiId = id.startsWith(\"bp_\") ? id : `bp_${id}`;\n return this.request<{ blueprint: Blueprint }>(`/api/v1/blueprints/${apiId}`, {\n method: \"PUT\",\n body: JSON.stringify(data),\n });\n }\n\n // Hierarchy endpoints\n async listHierarchies(options: {\n limit?: number;\n offset?: number;\n } = {}): Promise<HierarchiesResponse> {\n const params = new URLSearchParams();\n if (options.limit) params.set(\"limit\", options.limit.toString());\n if (options.offset) params.set(\"offset\", options.offset.toString());\n\n const query = params.toString();\n return this.request<HierarchiesResponse>(\n `/api/v1/hierarchies${query ? `?${query}` : \"\"}`\n );\n }\n\n async getHierarchy(id: string): Promise<{ hierarchy: Hierarchy; blueprints: Blueprint[]; tree: BlueprintTreeNode[]; total_blueprints: number }> {\n // Ensure ha_ prefix for hierarchy IDs\n let apiId = id;\n if (!id.startsWith(\"ha_\")) {\n apiId = `ha_${id}`;\n }\n return this.request<{ hierarchy: Hierarchy; blueprints: Blueprint[]; tree: BlueprintTreeNode[]; total_blueprints: number }>(`/api/v1/hierarchies/${apiId}`);\n }\n\n async createHierarchy(data: {\n name: string;\n repository_root: string;\n description?: string;\n }): Promise<{ hierarchy: Hierarchy }> {\n return this.request<{ hierarchy: Hierarchy }>(\"/api/v1/hierarchies\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n\n async deleteHierarchy(id: string): Promise<{ success: boolean; message: string }> {\n const apiId = id.startsWith(\"ha_\") ? id : `ha_${id}`;\n return this.request<{ success: boolean; message: string }>(`/api/v1/hierarchies/${apiId}`, {\n method: \"DELETE\",\n });\n }\n\n // AI endpoints\n async aiEditBlueprint(data: {\n content?: string;\n instruction: string;\n mode: \"blueprint\" | \"wizard\";\n }): Promise<{ content: string; usage?: object }> {\n return this.request<{ content: string; usage?: object }>(\"/api/ai/edit-blueprint\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n\n // User preferences endpoints\n async saveWizardPreferences(data: {\n commands?: Record<string, string | string[]>;\n codeStyle?: {\n naming?: string;\n errorHandling?: string;\n loggingConventions?: string;\n loggingConventionsOther?: string;\n notes?: string;\n };\n boundaries?: {\n always?: string[];\n never?: string[];\n ask?: string[];\n };\n testing?: {\n levels?: string[];\n frameworks?: string[];\n coverage?: number;\n notes?: string;\n };\n }): Promise<{ saved: number }> {\n // Convert structured data to the array format expected by the API\n const preferences: Array<{ category: string; key: string; value: string; isDefault?: boolean }> = [];\n\n // Commands\n if (data.commands) {\n for (const [key, value] of Object.entries(data.commands)) {\n const strValue = Array.isArray(value) ? value.join(\", \") : value;\n if (strValue) {\n preferences.push({ category: \"commands\", key, value: strValue, isDefault: true });\n }\n }\n }\n\n // Code style\n if (data.codeStyle) {\n if (data.codeStyle.naming) {\n preferences.push({ category: \"code_style\", key: \"naming\", value: data.codeStyle.naming, isDefault: true });\n }\n if (data.codeStyle.errorHandling) {\n preferences.push({ category: \"code_style\", key: \"errorHandling\", value: data.codeStyle.errorHandling, isDefault: true });\n }\n if (data.codeStyle.loggingConventions) {\n preferences.push({ category: \"code_style\", key: \"loggingConventions\", value: data.codeStyle.loggingConventions, isDefault: true });\n }\n if (data.codeStyle.loggingConventionsOther) {\n preferences.push({ category: \"code_style\", key: \"loggingConventionsOther\", value: data.codeStyle.loggingConventionsOther, isDefault: true });\n }\n if (data.codeStyle.notes) {\n preferences.push({ category: \"code_style\", key: \"notes\", value: data.codeStyle.notes, isDefault: true });\n }\n }\n\n // Boundaries\n if (data.boundaries) {\n if (data.boundaries.always?.length) {\n preferences.push({ category: \"boundaries\", key: \"always\", value: JSON.stringify(data.boundaries.always), isDefault: true });\n }\n if (data.boundaries.never?.length) {\n preferences.push({ category: \"boundaries\", key: \"never\", value: JSON.stringify(data.boundaries.never), isDefault: true });\n }\n if (data.boundaries.ask?.length) {\n preferences.push({ category: \"boundaries\", key: \"ask\", value: JSON.stringify(data.boundaries.ask), isDefault: true });\n }\n }\n\n // Testing\n if (data.testing) {\n if (data.testing.levels?.length) {\n preferences.push({ category: \"testing\", key: \"levels\", value: JSON.stringify(data.testing.levels), isDefault: true });\n }\n if (data.testing.frameworks?.length) {\n preferences.push({ category: \"testing\", key: \"frameworks\", value: JSON.stringify(data.testing.frameworks), isDefault: true });\n }\n if (data.testing.coverage !== undefined) {\n preferences.push({ category: \"testing\", key: \"coverage\", value: String(data.testing.coverage), isDefault: true });\n }\n if (data.testing.notes) {\n preferences.push({ category: \"testing\", key: \"notes\", value: data.testing.notes, isDefault: true });\n }\n }\n\n if (preferences.length === 0) {\n return { saved: 0 };\n }\n\n return this.request<{ saved: number }>(\"/api/user/wizard-preferences\", {\n method: \"POST\",\n body: JSON.stringify(preferences),\n });\n }\n}\n\nexport class ApiRequestError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public response: ApiError\n ) {\n super(message);\n this.name = \"ApiRequestError\";\n }\n}\n\nexport const api = new ApiClient();\n\n\n","import chalk from \"chalk\";\nimport { clearToken, isAuthenticated, getUser } from \"../config.js\";\n\nexport async function logoutCommand(): Promise<void> {\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You are not currently logged in.\"));\n return;\n }\n\n const user = getUser();\n const email = user?.email || \"unknown\";\n\n clearToken();\n\n console.log(chalk.green(`✓ Logged out from ${chalk.bold(email)}`));\n console.log(chalk.gray(\" Removed stored credentials\"));\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { isAuthenticated, setUser } from \"../config.js\";\n\nexport async function whoamiCommand(): Promise<void> {\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"Not logged in. Run 'lynxprompt login' to authenticate.\"));\n process.exit(1);\n }\n\n const spinner = ora(\"Fetching user info...\").start();\n\n try {\n const { user } = await api.getUser();\n spinner.stop();\n\n // Update cached user info\n setUser({\n id: user.id,\n email: user.email,\n name: user.name,\n plan: user.plan,\n });\n\n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Account\"));\n console.log();\n console.log(` ${chalk.gray(\"Email:\")} ${chalk.bold(user.email)}`);\n if (user.name) {\n console.log(` ${chalk.gray(\"Name:\")} ${user.name}`);\n }\n if (user.display_name) {\n console.log(` ${chalk.gray(\"Display:\")} ${user.display_name}`);\n }\n console.log();\n console.log(` ${chalk.gray(\"Blueprints:\")} ${user.stats.blueprints_count}`);\n console.log(` ${chalk.gray(\"Member since:\")} ${new Date(user.created_at).toLocaleDateString()}`);\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to fetch user info\");\n\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.error(chalk.red(\"Your session has expired. Please run 'lynxprompt login' again.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.red(\"API access error.\"));\n } else {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n }\n}\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError, Blueprint } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\n\ninterface ListOptions {\n limit: string;\n visibility?: string;\n}\n\nexport async function listCommand(options: ListOptions): Promise<void> {\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"Not logged in. Run 'lynxprompt login' to authenticate.\"));\n process.exit(1);\n }\n\n const spinner = ora(\"Fetching your blueprints...\").start();\n\n try {\n const limit = parseInt(options.limit, 10) || 20;\n const { blueprints, total, has_more } = await api.listBlueprints({\n limit,\n visibility: options.visibility,\n });\n\n spinner.stop();\n\n if (blueprints.length === 0) {\n console.log();\n console.log(chalk.yellow(\"No blueprints found.\"));\n console.log(chalk.gray(\"Create your first blueprint at https://lynxprompt.com/blueprints/create\"));\n console.log(chalk.gray(\"Or run 'lynxprompt init' to generate one from the CLI!\"));\n return;\n }\n\n console.log();\n console.log(chalk.cyan(`🐱 Your Blueprints (${total} total)`));\n console.log();\n\n for (const bp of blueprints) {\n printBlueprint(bp);\n }\n\n if (has_more) {\n console.log(chalk.gray(`Showing ${blueprints.length} of ${total}. Use --limit to see more.`));\n }\n } catch (error) {\n spinner.fail(\"Failed to fetch blueprints\");\n handleApiError(error);\n }\n}\n\nfunction printBlueprint(bp: Blueprint): void {\n const visibilityIcon = {\n PRIVATE: \"🔒\",\n TEAM: \"👥\",\n PUBLIC: \"🌐\",\n }[bp.visibility] || \"📄\";\n\n const tierBadge = {\n SHORT: chalk.gray(\"[Short]\"),\n INTERMEDIATE: chalk.blue(\"[Intermediate]\"),\n LONG: chalk.cyan(\"[Long]\"),\n SUPERLONG: chalk.magenta(\"[Super Long]\"),\n }[bp.tier] || \"\";\n\n console.log(` ${visibilityIcon} ${chalk.bold(bp.name)} ${tierBadge}`);\n console.log(` ${chalk.cyan(bp.id)}`);\n if (bp.description) {\n console.log(` ${chalk.gray(truncate(bp.description, 60))}`);\n }\n console.log(` ${chalk.gray(`↓${bp.downloads}`)} ${chalk.gray(`♥${bp.favorites}`)} ${formatTags(bp.tags)}`);\n console.log();\n}\n\nfunction formatTags(tags: string[]): string {\n if (!tags || tags.length === 0) return \"\";\n return tags.slice(0, 3).map((t) => chalk.gray(`#${t}`)).join(\" \");\n}\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + \"...\";\n}\n\nfunction handleApiError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.error(chalk.red(\"Your session has expired. Please run 'lynxprompt login' again.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.red(\"API access error. Please check your account.\"));\n } else {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n\n\n\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\nimport { api, ApiRequestError, Blueprint } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\nimport { writeFile, mkdir, readFile } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { existsSync } from \"fs\";\nimport {\n trackBlueprint,\n findBlueprintByFile,\n type BlueprintSource,\n} from \"../utils/blueprint-tracker.js\";\n\ninterface PullOptions {\n output: string;\n yes?: boolean;\n preview?: boolean;\n track?: boolean; // Track the blueprint for future syncs (default: true)\n}\n\n// Mapping of blueprint types to filenames\nconst TYPE_TO_FILENAME: Record<string, string> = {\n AGENTS_MD: \"AGENTS.md\",\n CURSOR_RULES: \".cursor/rules/project.mdc\",\n COPILOT_INSTRUCTIONS: \".github/copilot-instructions.md\",\n WINDSURF_RULES: \".windsurfrules\",\n ZED_INSTRUCTIONS: \".zed/instructions.md\",\n CLAUDE_MD: \"CLAUDE.md\",\n GENERIC: \"ai-config.md\",\n};\n\n// Determine blueprint source from visibility\nfunction getSourceFromVisibility(visibility: Blueprint[\"visibility\"]): BlueprintSource {\n switch (visibility) {\n case \"PUBLIC\":\n return \"marketplace\";\n case \"TEAM\":\n return \"team\";\n case \"PRIVATE\":\n return \"private\";\n default:\n return \"marketplace\";\n }\n}\n\n/**\n * Check if an ID is a hierarchy ID\n */\nfunction isHierarchyId(id: string): boolean {\n return id.startsWith(\"ha_\");\n}\n\nexport async function pullCommand(\n id: string,\n options: PullOptions\n): Promise<void> {\n // Check authentication - require login for API access\n if (!isAuthenticated()) {\n console.log(\n chalk.yellow(\"Not logged in. Run 'lynxp login' to authenticate.\")\n );\n process.exit(1);\n }\n\n // Check if pulling a hierarchy\n if (isHierarchyId(id)) {\n await pullHierarchy(id, options);\n } else {\n await pullBlueprint(id, options);\n }\n}\n\n/**\n * Pull an entire hierarchy with all its blueprints\n */\nasync function pullHierarchy(\n id: string,\n options: PullOptions\n): Promise<void> {\n const cwd = process.cwd();\n const spinner = ora(`Fetching hierarchy ${chalk.cyan(id)}...`).start();\n\n try {\n const response = await api.getHierarchy(id);\n const { hierarchy, blueprints } = response;\n spinner.stop();\n\n console.log();\n console.log(chalk.cyan(`📁 Hierarchy: ${chalk.bold(hierarchy.name)}`));\n if (hierarchy.description) {\n console.log(chalk.gray(` ${hierarchy.description}`));\n }\n console.log(chalk.gray(` Repository: ${hierarchy.repository_root}`));\n console.log(chalk.gray(` Blueprints: ${blueprints.length}`));\n console.log();\n\n // Preview mode - show hierarchy structure without downloading\n if (options.preview) {\n console.log(chalk.yellow(\"📋 Hierarchy structure:\"));\n console.log();\n \n for (const bp of blueprints) {\n const indent = bp.parent_id ? \" ↳ \" : \" \";\n const path = bp.repository_path || TYPE_TO_FILENAME[bp.type] || \"unknown\";\n console.log(chalk.gray(`${indent}${path}`));\n console.log(chalk.gray(`${indent} └─ ${bp.name} (${bp.id})`));\n }\n \n console.log();\n console.log(chalk.gray(\"Run without --preview to download this hierarchy.\"));\n return;\n }\n\n // Confirm before downloading\n if (!options.yes && blueprints.length > 1) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: `Download ${blueprints.length} blueprints to ${options.output}?`,\n initial: true,\n });\n if (!proceed) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n\n console.log(chalk.cyan(\"📥 Downloading blueprints...\"));\n console.log();\n\n let downloaded = 0;\n let skipped = 0;\n\n for (const bp of blueprints) {\n // Determine output path - use repository_path if available\n const filename = bp.repository_path || TYPE_TO_FILENAME[bp.type] || \"ai-config.md\";\n const outputPath = join(options.output, filename);\n\n // Check if file exists\n if (existsSync(outputPath) && !options.yes) {\n const { overwrite } = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: `File exists: ${filename}. Overwrite?`,\n initial: false,\n });\n if (!overwrite) {\n console.log(chalk.gray(` ⏭ Skipped: ${filename}`));\n skipped++;\n continue;\n }\n }\n\n // Fetch full blueprint content\n const { blueprint } = await api.getBlueprint(bp.id);\n \n if (!blueprint.content) {\n console.log(chalk.yellow(` ⚠ No content: ${filename}`));\n skipped++;\n continue;\n }\n\n // Create directory if needed\n const dir = dirname(outputPath);\n if (dir !== \".\" && dir !== options.output) {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(outputPath, blueprint.content, \"utf-8\");\n\n // Track the blueprint with hierarchy info\n if (options.track !== false) {\n const source = getSourceFromVisibility(blueprint.visibility);\n await trackBlueprint(cwd, {\n id: blueprint.id,\n name: blueprint.name,\n file: filename,\n content: blueprint.content,\n source,\n hierarchyId: id,\n hierarchyName: hierarchy.name,\n repositoryPath: bp.repository_path || undefined,\n });\n }\n\n console.log(chalk.green(` ✓ ${filename}`));\n downloaded++;\n }\n\n console.log();\n console.log(chalk.green(`✅ Downloaded ${downloaded} blueprint(s)`));\n if (skipped > 0) {\n console.log(chalk.gray(` Skipped: ${skipped}`));\n }\n console.log();\n console.log(chalk.gray(\"Tips:\"));\n console.log(chalk.gray(` • Run 'lynxp status' to see tracked blueprints`));\n console.log(chalk.gray(` • Run 'lynxp sync' to push local changes`));\n console.log(chalk.gray(` • Run 'lynxp pull ${id}' again to refresh all files`));\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to pull hierarchy\");\n handleApiError(error);\n }\n}\n\n/**\n * Pull a single blueprint\n */\nasync function pullBlueprint(\n id: string,\n options: PullOptions\n): Promise<void> {\n const cwd = process.cwd();\n const spinner = ora(`Fetching blueprint ${chalk.cyan(id)}...`).start();\n\n try {\n const { blueprint } = await api.getBlueprint(id);\n spinner.stop();\n\n if (!blueprint.content) {\n console.error(chalk.red(\"✗ Blueprint has no content.\"));\n process.exit(1);\n }\n\n const source = getSourceFromVisibility(blueprint.visibility);\n const isMarketplace = source === \"marketplace\";\n\n console.log();\n console.log(chalk.cyan(`🐱 Blueprint: ${chalk.bold(blueprint.name)}`));\n if (blueprint.description) {\n console.log(chalk.gray(` ${blueprint.description}`));\n }\n console.log(chalk.gray(` Type: ${blueprint.type} • Tier: ${blueprint.tier} • Visibility: ${blueprint.visibility}`));\n \n // Show hierarchy info if present\n if (blueprint.hierarchy_id) {\n console.log(chalk.blue(` 📁 Part of hierarchy: ${blueprint.hierarchy_id}`));\n if (blueprint.repository_path) {\n console.log(chalk.gray(` Path in hierarchy: ${blueprint.repository_path}`));\n }\n }\n \n // Show source type info\n if (isMarketplace) {\n console.log(chalk.yellow(` 📦 Marketplace blueprint (read-only - changes won't sync back)`));\n } else if (source === \"team\") {\n console.log(chalk.blue(` 👥 Team blueprint (can sync changes)`));\n } else if (source === \"private\") {\n console.log(chalk.green(` 🔒 Private blueprint (can sync changes)`));\n }\n console.log();\n\n // Preview mode - show content without writing\n if (options.preview) {\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n \n // Show first 50 lines with syntax highlighting hints\n const lines = blueprint.content.split(\"\\n\");\n const previewLines = lines.slice(0, 50);\n \n for (const line of previewLines) {\n if (line.startsWith(\"#\")) {\n console.log(chalk.cyan(line));\n } else if (line.startsWith(\">\")) {\n console.log(chalk.gray(line));\n } else if (line.startsWith(\"- \") || line.startsWith(\"* \")) {\n console.log(chalk.white(line));\n } else if (line.startsWith(\"```\")) {\n console.log(chalk.yellow(line));\n } else {\n console.log(line);\n }\n }\n \n if (lines.length > 50) {\n console.log();\n console.log(chalk.gray(`... ${lines.length - 50} more lines`));\n }\n \n console.log();\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n console.log(chalk.gray(\"Run without --preview to download this blueprint.\"));\n return;\n }\n\n // Determine output filename - use repository_path if available for hierarchy blueprints\n const filename = blueprint.repository_path || TYPE_TO_FILENAME[blueprint.type] || \"ai-config.md\";\n const outputPath = join(options.output, filename);\n\n // Check if file exists and show diff preview\n let localContent: string | null = null;\n if (existsSync(outputPath)) {\n try {\n localContent = await readFile(outputPath, \"utf-8\");\n } catch {\n // Can't read local file\n }\n }\n\n // Check if this file is already tracked\n const existingTracked = await findBlueprintByFile(cwd, filename);\n if (existingTracked && existingTracked.id !== id) {\n console.log(chalk.yellow(`⚠ This file is already linked to a different blueprint: ${existingTracked.id}`));\n if (!options.yes) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Replace the link with the new blueprint?\",\n initial: false,\n });\n if (!proceed) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n }\n\n if (localContent && !options.yes) {\n // Show what will change\n const localLines = localContent.split(\"\\n\").length;\n const remoteLines = blueprint.content.split(\"\\n\").length;\n \n console.log(chalk.yellow(`⚠ File exists: ${outputPath}`));\n console.log(chalk.gray(` Local: ${localLines} lines`));\n console.log(chalk.gray(` Remote: ${remoteLines} lines`));\n console.log();\n\n const response = await prompts({\n type: \"select\",\n name: \"action\",\n message: \"What would you like to do?\",\n choices: [\n { title: \"Overwrite with remote version\", value: \"overwrite\" },\n { title: \"Preview remote content first\", value: \"preview\" },\n { title: \"Cancel\", value: \"cancel\" },\n ],\n });\n\n if (response.action === \"cancel\" || !response.action) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n if (response.action === \"preview\") {\n // Show preview\n console.log();\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n \n const lines = blueprint.content.split(\"\\n\").slice(0, 30);\n for (const line of lines) {\n if (line.startsWith(\"#\")) {\n console.log(chalk.cyan(line));\n } else {\n console.log(line);\n }\n }\n \n if (blueprint.content.split(\"\\n\").length > 30) {\n console.log(chalk.gray(`... ${blueprint.content.split(\"\\n\").length - 30} more lines`));\n }\n \n console.log();\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n\n const confirmResponse = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: \"Download and overwrite local file?\",\n initial: false,\n });\n\n if (!confirmResponse.confirm) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n }\n\n // Create directory if needed\n const dir = dirname(outputPath);\n if (dir !== \".\") {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(outputPath, blueprint.content, \"utf-8\");\n\n // Track the blueprint (default behavior unless --no-track)\n if (options.track !== false) {\n await trackBlueprint(cwd, {\n id: blueprint.id,\n name: blueprint.name,\n file: filename,\n content: blueprint.content,\n source,\n hierarchyId: blueprint.hierarchy_id || undefined,\n repositoryPath: blueprint.repository_path || undefined,\n });\n }\n\n console.log(chalk.green(`✅ Downloaded: ${chalk.bold(outputPath)}`));\n \n // Show tracking info\n if (options.track !== false) {\n console.log(chalk.gray(` Linked to: ${blueprint.id}`));\n if (blueprint.content_checksum) {\n console.log(chalk.gray(` Checksum: ${blueprint.content_checksum}`));\n }\n if (isMarketplace) {\n console.log(chalk.gray(` Updates: Run 'lynxp pull ${id}' to sync updates`));\n } else {\n console.log(chalk.gray(` Sync: Run 'lynxp push ${filename}' to push changes`));\n }\n }\n console.log();\n\n // Show helpful next steps\n const editorHint = getEditorHint(blueprint.type);\n if (editorHint) {\n console.log(chalk.gray(`💡 ${editorHint}`));\n console.log();\n }\n\n // Additional tips\n console.log(chalk.gray(\"Tips:\"));\n console.log(chalk.gray(` • Run 'lynxp status' to see tracked blueprints`));\n console.log(chalk.gray(` • Run 'lynxp diff ${id}' to see changes between local and remote`));\n if (isMarketplace) {\n console.log(chalk.gray(` • Run 'lynxp unlink ${filename}' to disconnect and make editable`));\n }\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to pull blueprint\");\n handleApiError(error);\n }\n}\n\nfunction getEditorHint(type: string): string | null {\n switch (type) {\n case \"CURSOR_RULES\":\n return \"This file will be automatically read by Cursor.\";\n case \"COPILOT_INSTRUCTIONS\":\n return \"This file will be read by GitHub Copilot in VS Code.\";\n case \"AGENTS_MD\":\n return \"This AGENTS.md file works with Claude Code, Cursor, and other AI agents.\";\n case \"WINDSURF_RULES\":\n return \"This file will be automatically read by Windsurf.\";\n case \"ZED_INSTRUCTIONS\":\n return \"This file will be read by Zed's AI assistant.\";\n case \"CLAUDE_MD\":\n return \"This CLAUDE.md file will be read by Claude Code.\";\n default:\n return null;\n }\n}\n\nfunction handleApiError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.error(\n chalk.red(\"✗ Your session has expired. Please run 'lynxp login' again.\")\n );\n } else if (error.statusCode === 403) {\n console.error(\n chalk.red(\"✗ You don't have access to this blueprint or hierarchy.\")\n );\n console.error(\n chalk.gray(\n \" This might be a private resource or you may not have access.\"\n )\n );\n } else if (error.statusCode === 404) {\n console.error(chalk.red(\"✗ Blueprint or hierarchy not found.\"));\n console.error(\n chalk.gray(\n \" Make sure you have the correct ID. Use 'lynxp list' or 'lynxp hierarchies' to see your resources.\"\n )\n );\n } else {\n console.error(chalk.red(`✗ Error: ${error.message}`));\n }\n } else {\n console.error(chalk.red(\"✗ An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n","/**\n * Blueprint Tracker\n * \n * Tracks which blueprints have been pulled from LynxPrompt cloud and their sync status.\n * Enables:\n * - Detecting if a local file came from a cloud blueprint\n * - Syncing updates from upstream blueprints\n * - Prompting users when they try to modify marketplace blueprints\n * - Managing team/private blueprint versions\n * \n * Storage: .lynxprompt/blueprints.yml\n */\n\nimport { readFile, writeFile, mkdir, access } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { createHash } from \"crypto\";\nimport * as yaml from \"yaml\";\n\n// Blueprint source types\nexport type BlueprintSource = \"marketplace\" | \"team\" | \"private\" | \"local\";\n\n// Tracked blueprint metadata\nexport interface TrackedBlueprint {\n id: string; // Blueprint ID (e.g., bp_abc123)\n source: BlueprintSource; // Where the blueprint came from\n file: string; // Local file path relative to project root\n name: string; // Blueprint name for display\n pulledAt: string; // ISO timestamp of last pull\n checksum: string; // SHA-256 of content when pulled (to detect local changes)\n version?: string; // Blueprint version (if available)\n editable: boolean; // Can the user push changes back?\n canPull: boolean; // Can pull updates from upstream?\n // Hierarchy info (optional)\n hierarchyId?: string; // Hierarchy ID (e.g., ha_xyz789)\n hierarchyName?: string; // Hierarchy name for display\n repositoryPath?: string; // Path within hierarchy (e.g., \"packages/core/AGENTS.md\")\n}\n\n// Blueprints file structure\nexport interface BlueprintsConfig {\n version: \"1\";\n blueprints: TrackedBlueprint[];\n}\n\nconst BLUEPRINTS_FILE = \".lynxprompt/blueprints.yml\";\n\n/**\n * Calculate SHA-256 checksum of content\n */\nexport function calculateChecksum(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").substring(0, 16);\n}\n\n/**\n * Load blueprints configuration\n */\nexport async function loadBlueprints(cwd: string): Promise<BlueprintsConfig> {\n const filePath = join(cwd, BLUEPRINTS_FILE);\n \n try {\n await access(filePath);\n const content = await readFile(filePath, \"utf-8\");\n const config = yaml.parse(content) as BlueprintsConfig;\n return config || { version: \"1\", blueprints: [] };\n } catch {\n return { version: \"1\", blueprints: [] };\n }\n}\n\n/**\n * Save blueprints configuration\n */\nexport async function saveBlueprints(cwd: string, config: BlueprintsConfig): Promise<void> {\n const filePath = join(cwd, BLUEPRINTS_FILE);\n const dir = dirname(filePath);\n \n await mkdir(dir, { recursive: true });\n \n const content = yaml.stringify(config, {\n lineWidth: 0,\n singleQuote: false,\n });\n \n await writeFile(filePath, content, \"utf-8\");\n}\n\n/**\n * Track a pulled blueprint\n */\nexport async function trackBlueprint(\n cwd: string,\n blueprint: {\n id: string;\n name: string;\n file: string;\n content: string;\n source: BlueprintSource;\n version?: string;\n hierarchyId?: string;\n hierarchyName?: string;\n repositoryPath?: string;\n }\n): Promise<void> {\n const config = await loadBlueprints(cwd);\n \n // Remove existing entry for same file if exists\n config.blueprints = config.blueprints.filter(b => b.file !== blueprint.file);\n \n // Determine editability based on source\n const editable = blueprint.source !== \"marketplace\";\n const canPull = true; // All tracked blueprints can pull updates\n \n config.blueprints.push({\n id: blueprint.id,\n source: blueprint.source,\n file: blueprint.file,\n name: blueprint.name,\n pulledAt: new Date().toISOString(),\n checksum: calculateChecksum(blueprint.content),\n version: blueprint.version,\n editable,\n canPull,\n hierarchyId: blueprint.hierarchyId,\n hierarchyName: blueprint.hierarchyName,\n repositoryPath: blueprint.repositoryPath,\n });\n \n await saveBlueprints(cwd, config);\n}\n\n/**\n * Find tracked blueprint by file path\n */\nexport async function findBlueprintByFile(cwd: string, file: string): Promise<TrackedBlueprint | null> {\n const config = await loadBlueprints(cwd);\n return config.blueprints.find(b => b.file === file) || null;\n}\n\n/**\n * Find tracked blueprint by ID\n */\nexport async function findBlueprintById(cwd: string, id: string): Promise<TrackedBlueprint | null> {\n const config = await loadBlueprints(cwd);\n return config.blueprints.find(b => b.id === id) || null;\n}\n\n/**\n * Check if local file has been modified since pull\n */\nexport async function hasLocalChanges(cwd: string, tracked: TrackedBlueprint): Promise<boolean> {\n try {\n const filePath = join(cwd, tracked.file);\n const content = await readFile(filePath, \"utf-8\");\n const currentChecksum = calculateChecksum(content);\n return currentChecksum !== tracked.checksum;\n } catch {\n return false;\n }\n}\n\n/**\n * Update checksum after syncing\n */\nexport async function updateChecksum(cwd: string, file: string, content: string): Promise<void> {\n const config = await loadBlueprints(cwd);\n const blueprint = config.blueprints.find(b => b.file === file);\n \n if (blueprint) {\n blueprint.checksum = calculateChecksum(content);\n blueprint.pulledAt = new Date().toISOString();\n await saveBlueprints(cwd, config);\n }\n}\n\n/**\n * Untrack a blueprint (disconnect from cloud)\n */\nexport async function untrackBlueprint(cwd: string, file: string): Promise<boolean> {\n const config = await loadBlueprints(cwd);\n const initialCount = config.blueprints.length;\n config.blueprints = config.blueprints.filter(b => b.file !== file);\n \n if (config.blueprints.length < initialCount) {\n await saveBlueprints(cwd, config);\n return true;\n }\n return false;\n}\n\n/**\n * Link an existing local file to a cloud blueprint\n */\nexport async function linkBlueprint(\n cwd: string,\n file: string,\n blueprintId: string,\n blueprintName: string,\n source: BlueprintSource\n): Promise<void> {\n try {\n const filePath = join(cwd, file);\n const content = await readFile(filePath, \"utf-8\");\n \n await trackBlueprint(cwd, {\n id: blueprintId,\n name: blueprintName,\n file,\n content,\n source,\n });\n } catch (error) {\n throw new Error(`Could not read file ${file} to link`);\n }\n}\n\n/**\n * Get all tracked blueprints\n */\nexport async function getAllTrackedBlueprints(cwd: string): Promise<TrackedBlueprint[]> {\n const config = await loadBlueprints(cwd);\n return config.blueprints;\n}\n\n/**\n * Check sync status of all tracked blueprints\n */\nexport async function checkSyncStatus(cwd: string): Promise<Array<{\n blueprint: TrackedBlueprint;\n localModified: boolean;\n fileExists: boolean;\n}>> {\n const config = await loadBlueprints(cwd);\n const results = [];\n \n for (const blueprint of config.blueprints) {\n const filePath = join(cwd, blueprint.file);\n let fileExists = false;\n let localModified = false;\n \n try {\n await access(filePath);\n fileExists = true;\n localModified = await hasLocalChanges(cwd, blueprint);\n } catch {\n fileExists = false;\n }\n \n results.push({ blueprint, localModified, fileExists });\n }\n \n return results;\n}\n\n\n\n\n\n\n\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { createHash } from \"crypto\";\nimport prompts from \"prompts\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\nimport {\n findBlueprintByFile,\n trackBlueprint,\n updateChecksum,\n loadBlueprints,\n} from \"../utils/blueprint-tracker.js\";\nimport { inferCommandTypeFromPath } from \"../utils/detect.js\";\n\ninterface PushOptions {\n name?: string;\n description?: string;\n visibility?: string;\n tags?: string;\n yes?: boolean;\n force?: boolean;\n}\n\ninterface HierarchyInfo {\n repositoryPath: string | null;\n hierarchyId: string | null;\n parentId: string | null;\n repositoryRoot: string; // Used to create/find hierarchy\n}\n\ninterface DiscoveredFile {\n path: string; // Relative path from cwd\n absolutePath: string;\n isRoot: boolean; // Is this the root AGENTS.md?\n}\n\n/**\n * Scan for AGENTS.md files in current directory and subdirectories\n */\nfunction scanForAgentFiles(cwd: string, maxDepth: number = 5): DiscoveredFile[] {\n const results: DiscoveredFile[] = [];\n \n function scan(dir: string, depth: number) {\n if (depth > maxDepth) return;\n \n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n \n // Skip common non-project directories\n if (entry.isDirectory()) {\n if ([\"node_modules\", \".git\", \"dist\", \"build\", \".next\", \"__pycache__\", \"venv\", \".venv\"].includes(entry.name)) {\n continue;\n }\n scan(fullPath, depth + 1);\n } else if (entry.name === \"AGENTS.md\") {\n const relativePath = path.relative(cwd, fullPath);\n results.push({\n path: relativePath,\n absolutePath: fullPath,\n isRoot: relativePath === \"AGENTS.md\",\n });\n }\n }\n } catch {\n // Ignore directories we can't read\n }\n }\n \n scan(cwd, 0);\n \n // Sort: root first, then alphabetically by path\n results.sort((a, b) => {\n if (a.isRoot && !b.isRoot) return -1;\n if (!a.isRoot && b.isRoot) return 1;\n return a.path.localeCompare(b.path);\n });\n \n return results;\n}\n\n/**\n * Detect hierarchy info for a file being pushed\n * Creates or gets a hierarchy for the repository\n */\nasync function detectHierarchyInfo(cwd: string, file: string): Promise<HierarchyInfo> {\n const repositoryRoot = createRepositoryRoot(cwd);\n const result: HierarchyInfo = {\n repositoryPath: null,\n hierarchyId: null,\n parentId: null,\n repositoryRoot,\n };\n\n try {\n const relativePath = path.relative(cwd, path.resolve(file));\n \n // Check if file is in a subdirectory (potential monorepo child)\n if (relativePath.includes(path.sep) && !relativePath.startsWith(\"..\")) {\n result.repositoryPath = relativePath;\n \n // Check if there's an AGENTS.md at the root that was already pushed\n const rootAgentsMd = path.join(cwd, \"AGENTS.md\");\n if (fs.existsSync(rootAgentsMd) && path.resolve(file) !== rootAgentsMd) {\n const blueprints = await loadBlueprints(cwd);\n const parentBlueprint = blueprints.blueprints.find(\n b => b.file === \"AGENTS.md\"\n );\n if (parentBlueprint) {\n result.parentId = parentBlueprint.id;\n }\n }\n } else if (relativePath === \"AGENTS.md\" || relativePath === path.basename(file)) {\n // Root-level file\n result.repositoryPath = relativePath;\n }\n } catch {\n // Silently fail - hierarchy detection is optional\n }\n\n return result;\n}\n\n/**\n * Ensure a hierarchy exists for the repository and return its ID\n */\nasync function ensureHierarchy(_cwd: string, repositoryRoot: string, name: string): Promise<string | null> {\n try {\n // Try to create or get existing hierarchy\n const response = await api.createHierarchy({\n name,\n repository_root: repositoryRoot,\n });\n return response.hierarchy.id;\n } catch (error) {\n // If it fails, hierarchy feature might not be available\n console.log(chalk.gray(\" Note: Hierarchy creation skipped\"));\n return null;\n }\n}\n\n/**\n * Create a stable repository root identifier from a path\n */\n/**\n * Search user's existing blueprints for one matching the same repository_path and hierarchy\n * Used to deduplicate: if .lynxprompt/ tracking is deleted, we can still find the existing blueprint\n */\nasync function findExistingBlueprintOnServer(\n repositoryPath: string | null,\n hierarchyId: string | null\n): Promise<{ id: string; name: string } | null> {\n if (!repositoryPath) return null;\n\n try {\n // Fetch user's blueprints (paginate to cover all)\n let offset = 0;\n const limit = 50;\n\n while (true) {\n const response = await api.listBlueprints({ limit, offset });\n\n for (const bp of response.blueprints) {\n // Match by repository_path, and if we have a hierarchy, also match hierarchy_id\n if (bp.repository_path === repositoryPath) {\n if (hierarchyId) {\n if (bp.hierarchy_id === hierarchyId) {\n return { id: bp.id, name: bp.name };\n }\n } else {\n // No hierarchy context — match on repository_path alone\n return { id: bp.id, name: bp.name };\n }\n }\n }\n\n if (!response.has_more) break;\n offset += limit;\n }\n } catch {\n // If listing fails, fall through to create new\n }\n\n return null;\n}\n\nfunction createRepositoryRoot(rootPath: string): string {\n // Try to get git remote URL first\n try {\n const gitConfigPath = path.join(rootPath, \".git\", \"config\");\n if (fs.existsSync(gitConfigPath)) {\n const gitConfig = fs.readFileSync(gitConfigPath, \"utf-8\");\n const urlMatch = gitConfig.match(/url = (.+)/);\n if (urlMatch) {\n // Hash the git URL for consistent identification\n return createHash(\"sha256\").update(urlMatch[1].trim()).digest(\"hex\").substring(0, 16);\n }\n }\n } catch {\n // Fall through to path-based hashing\n }\n \n // Fall back to hashing the absolute path\n return createHash(\"sha256\").update(path.resolve(rootPath)).digest(\"hex\").substring(0, 16);\n}\n\nexport async function pushCommand(\n fileArg: string | undefined,\n options: PushOptions\n): Promise<void> {\n const cwd = process.cwd();\n\n // Check authentication\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You need to be logged in to push blueprints.\"));\n console.log(chalk.gray(\"Run 'lynxp login' to authenticate.\"));\n process.exit(1);\n }\n\n // Find the file to push\n const file = fileArg || findDefaultFile();\n if (!file) {\n console.log(chalk.red(\"No AI configuration file found.\"));\n console.log(\n chalk.gray(\"Specify a file or run in a directory with AGENTS.md, CLAUDE.md, etc.\")\n );\n process.exit(1);\n }\n\n if (!fs.existsSync(file)) {\n console.log(chalk.red(`File not found: ${file}`));\n process.exit(1);\n }\n\n const content = fs.readFileSync(file, \"utf-8\");\n const filename = path.basename(file);\n\n // Check if file is already linked to a blueprint\n const linked = await findBlueprintByFile(cwd, file);\n\n if (linked) {\n // Update existing blueprint\n await updateBlueprint(cwd, file, linked.id, content, options, linked.checksum);\n } else {\n // Create new blueprint or link to existing\n await createOrLinkBlueprint(cwd, file, filename, content, options);\n }\n}\n\nasync function updateBlueprint(\n cwd: string,\n file: string,\n blueprintId: string,\n content: string,\n options: PushOptions,\n expectedChecksum?: string\n): Promise<void> {\n console.log(chalk.cyan(`\\n📤 Updating blueprint ${chalk.bold(blueprintId)}...`));\n console.log(chalk.gray(` File: ${file}`));\n\n const spinner = ora(\"Pushing changes...\").start();\n\n try {\n const updateData: { content: string; expected_checksum?: string } = { content };\n \n // Include expected checksum for optimistic locking (unless force)\n if (expectedChecksum && !options.force) {\n updateData.expected_checksum = expectedChecksum;\n }\n\n const result = await api.updateBlueprint(blueprintId, updateData);\n spinner.succeed(\"Blueprint updated!\");\n\n // Update local tracking with new checksum\n await updateChecksum(cwd, file, content);\n\n console.log();\n console.log(chalk.green(`✅ Successfully updated ${chalk.bold(result.blueprint.name)}`));\n console.log(chalk.gray(` ID: ${blueprintId}`));\n if (result.blueprint.content_checksum) {\n console.log(chalk.gray(` Checksum: ${result.blueprint.content_checksum}`));\n }\n console.log(chalk.gray(` View: https://lynxprompt.com/templates/${blueprintId.replace(\"bp_\", \"\")}`));\n } catch (error) {\n spinner.fail(\"Failed to update blueprint\");\n \n // Handle optimistic locking conflict\n if (error instanceof ApiRequestError && error.statusCode === 409) {\n console.log();\n console.log(chalk.yellow(\"⚠ Conflict: The blueprint has been modified since you last pulled it.\"));\n console.log(chalk.gray(\" Someone else may have pushed changes.\"));\n console.log();\n console.log(chalk.gray(\"Options:\"));\n console.log(chalk.gray(\" 1. Run 'lynxp pull \" + blueprintId + \"' to get the latest version\"));\n console.log(chalk.gray(\" 2. Run 'lynxp push --force' to overwrite remote changes\"));\n process.exit(1);\n }\n \n handleError(error);\n }\n}\n\nasync function createOrLinkBlueprint(\n cwd: string,\n file: string,\n filename: string,\n content: string,\n options: PushOptions\n): Promise<void> {\n // Check if pushing AGENTS.md and scan for more AGENTS.md files\n const isAgentsMd = filename === \"AGENTS.md\";\n \n if (isAgentsMd) {\n const discoveredFiles = scanForAgentFiles(cwd);\n \n // If we found multiple AGENTS.md files, offer to create hierarchy\n if (discoveredFiles.length > 1) {\n console.log();\n console.log(chalk.cyan(`📁 Found ${discoveredFiles.length} AGENTS.md files:`));\n console.log();\n for (const f of discoveredFiles) {\n const icon = f.isRoot ? \"📄\" : \" └─\";\n console.log(chalk.gray(` ${icon} ${f.path}`));\n }\n console.log();\n \n let shouldCreateHierarchy = options.yes; // Auto-create if -y flag\n \n if (!options.yes) {\n const { createHierarchy } = await prompts({\n type: \"confirm\",\n name: \"createHierarchy\",\n message: `Create a hierarchy with all ${discoveredFiles.length} AGENTS.md files?`,\n initial: true,\n });\n shouldCreateHierarchy = createHierarchy;\n } else {\n console.log(chalk.cyan(`Auto-creating hierarchy with ${discoveredFiles.length} files...`));\n }\n \n if (shouldCreateHierarchy) {\n await pushHierarchy(cwd, discoveredFiles, options);\n return;\n }\n \n console.log(chalk.gray(\"Proceeding with single file push...\"));\n }\n }\n\n // Infer the blueprint type from the file path\n const inferredType = inferBlueprintType(file);\n const COMMAND_TYPES = [\n \"CURSOR_COMMAND\", \"CLAUDE_COMMAND\", \"WINDSURF_WORKFLOW\", \n \"COPILOT_PROMPT\", \"CONTINUE_PROMPT\", \"OPENCODE_COMMAND\"\n ];\n const isCommandFile = COMMAND_TYPES.includes(inferredType);\n \n // Get friendly name for command type\n const commandNames: Record<string, string> = {\n \"CURSOR_COMMAND\": \"Cursor\",\n \"CLAUDE_COMMAND\": \"Claude Code\",\n \"WINDSURF_WORKFLOW\": \"Windsurf\",\n \"COPILOT_PROMPT\": \"Copilot\",\n \"CONTINUE_PROMPT\": \"Continue\",\n \"OPENCODE_COMMAND\": \"OpenCode\",\n };\n \n console.log(chalk.cyan(\"\\n📤 Push new blueprint\"));\n console.log(chalk.gray(` File: ${file}`));\n if (isCommandFile) {\n console.log(chalk.magenta(` Type: ${commandNames[inferredType] || \"Command\"} Command`));\n } else {\n console.log(chalk.gray(` Type: ${inferredType.replace(/_/g, \" \")}`));\n }\n\n // Ask for details if not provided\n let name = options.name;\n let description = options.description;\n let visibility = options.visibility || \"PRIVATE\";\n let tags = options.tags ? options.tags.split(\",\").map((t) => t.trim()) : [];\n\n if (!options.yes) {\n const responses = await prompts([\n {\n type: name ? null : \"text\",\n name: \"name\",\n message: \"Blueprint name:\",\n initial: filename.replace(/\\.(md|mdc|json|yml|yaml)$/, \"\"),\n validate: (v) => v.length > 0 || \"Name is required\",\n },\n {\n type: description ? null : \"text\",\n name: \"description\",\n message: \"Description:\",\n initial: \"\",\n },\n {\n type: \"select\",\n name: \"visibility\",\n message: \"Visibility:\",\n choices: [\n { title: \"Private (only you)\", value: \"PRIVATE\" },\n { title: \"Team (your team members)\", value: \"TEAM\" },\n { title: \"Public (visible to everyone)\", value: \"PUBLIC\" },\n ],\n initial: 0,\n },\n {\n type: \"text\",\n name: \"tags\",\n message: \"Tags (comma-separated):\",\n initial: \"\",\n },\n ]);\n\n if (!responses.name && !name) {\n console.log(chalk.yellow(\"Push cancelled.\"));\n return;\n }\n\n name = name || responses.name;\n description = description || responses.description || \"\";\n visibility = responses.visibility || visibility;\n tags = responses.tags ? responses.tags.split(\",\").map((t: string) => t.trim()).filter(Boolean) : tags;\n }\n\n if (!name) {\n name = filename.replace(/\\.(md|mdc|json|yml|yaml)$/, \"\");\n }\n\n // Detect hierarchy info for monorepo support\n const hierarchyInfo = await detectHierarchyInfo(cwd, file);\n \n // If we have hierarchy info, ensure a hierarchy exists\n let hierarchyId: string | null = null;\n if (hierarchyInfo.repositoryPath) {\n hierarchyId = await ensureHierarchy(cwd, hierarchyInfo.repositoryRoot, path.basename(cwd));\n }\n \n // Dedup check: look for an existing blueprint on the server with the same repository_path\n const existingBlueprint = await findExistingBlueprintOnServer(\n hierarchyInfo.repositoryPath,\n hierarchyId\n );\n\n if (existingBlueprint) {\n console.log(chalk.yellow(`\\n⚠ Found existing blueprint \"${existingBlueprint.name}\" (${existingBlueprint.id}) with the same path.`));\n console.log(chalk.gray(\" Updating existing blueprint instead of creating a duplicate.\"));\n\n // Re-link locally and update the existing blueprint\n await trackBlueprint(cwd, {\n id: existingBlueprint.id,\n name: existingBlueprint.name,\n file,\n content,\n source: \"private\",\n hierarchyId: hierarchyId || undefined,\n repositoryPath: hierarchyInfo.repositoryPath || undefined,\n });\n\n await updateBlueprint(cwd, file, existingBlueprint.id, content, options);\n return;\n }\n\n const spinner = ora(\"Creating blueprint...\").start();\n\n try {\n const result = await api.createBlueprint({\n name,\n description: description || \"\",\n content,\n visibility: visibility as \"PRIVATE\" | \"TEAM\" | \"PUBLIC\",\n tags,\n type: inferredType, // Include the inferred type (AGENTS_MD, CURSOR_COMMAND, etc.)\n // Include hierarchy info if detected\n hierarchy_id: hierarchyId,\n parent_id: hierarchyInfo.parentId,\n repository_path: hierarchyInfo.repositoryPath,\n });\n\n spinner.succeed(\"Blueprint created!\");\n\n // Track the blueprint locally\n await trackBlueprint(cwd, {\n id: result.blueprint.id,\n name: result.blueprint.name,\n file,\n content,\n source: \"private\",\n hierarchyId: hierarchyId || undefined,\n repositoryPath: hierarchyInfo.repositoryPath || undefined,\n });\n\n console.log();\n const typeDesc = isCommandFile ? `${commandNames[inferredType]} Command` : \"Blueprint\";\n console.log(chalk.green(`✅ Created ${typeDesc} ${chalk.bold(result.blueprint.name)}`));\n console.log(chalk.gray(` ID: ${result.blueprint.id}`));\n console.log(chalk.gray(` Type: ${inferredType}`));\n console.log(chalk.gray(` Visibility: ${visibility}`));\n if (hierarchyInfo.repositoryPath) {\n console.log(chalk.gray(` Path: ${hierarchyInfo.repositoryPath}`));\n }\n if (result.blueprint.hierarchy_id) {\n console.log(chalk.gray(` Hierarchy: ${result.blueprint.hierarchy_id}`));\n }\n if (hierarchyInfo.parentId) {\n console.log(chalk.cyan(` ↳ Linked to parent blueprint: ${hierarchyInfo.parentId}`));\n }\n if (visibility === \"PUBLIC\") {\n console.log(chalk.gray(` View: https://lynxprompt.com/templates/${result.blueprint.id.replace(\"bp_\", \"\")}`));\n }\n console.log();\n console.log(chalk.cyan(\"The file is now linked. Future 'lynxp push' will update this blueprint.\"));\n } catch (error) {\n spinner.fail(\"Failed to create blueprint\");\n handleError(error);\n }\n}\n\n/**\n * Push multiple AGENTS.md files as a hierarchy\n */\nasync function pushHierarchy(\n cwd: string,\n files: DiscoveredFile[],\n options: PushOptions\n): Promise<void> {\n // Get hierarchy name\n let hierarchyName = options.name || path.basename(cwd);\n let visibility = options.visibility || \"PRIVATE\";\n \n if (!options.yes) {\n const responses = await prompts([\n {\n type: \"text\",\n name: \"name\",\n message: \"Hierarchy name:\",\n initial: hierarchyName,\n validate: (v) => v.length > 0 || \"Name is required\",\n },\n {\n type: \"select\",\n name: \"visibility\",\n message: \"Visibility for all blueprints:\",\n choices: [\n { title: \"Private (only you)\", value: \"PRIVATE\" },\n { title: \"Team (your team members)\", value: \"TEAM\" },\n { title: \"Public (visible to everyone)\", value: \"PUBLIC\" },\n ],\n initial: 0,\n },\n ]);\n \n if (!responses.name) {\n console.log(chalk.yellow(\"Push cancelled.\"));\n return;\n }\n \n hierarchyName = responses.name;\n visibility = responses.visibility || visibility;\n }\n \n console.log();\n console.log(chalk.cyan(`📁 Creating hierarchy \"${hierarchyName}\" with ${files.length} files...`));\n console.log();\n \n // Create repository root identifier\n const repositoryRoot = createRepositoryRoot(cwd);\n \n // Create hierarchy first\n let hierarchyId: string;\n try {\n const hierarchyResponse = await api.createHierarchy({\n name: hierarchyName,\n repository_root: repositoryRoot,\n });\n hierarchyId = hierarchyResponse.hierarchy.id;\n console.log(chalk.green(`✓ Created hierarchy: ${hierarchyId}`));\n } catch (error) {\n console.log(chalk.red(\"Failed to create hierarchy\"));\n handleError(error);\n return;\n }\n \n // Upload each file\n let rootBlueprintId: string | null = null;\n let successCount = 0;\n let failCount = 0;\n \n for (const file of files) {\n const spinner = ora(`Uploading ${file.path}...`).start();\n \n try {\n const content = fs.readFileSync(file.absolutePath, \"utf-8\");\n \n // Generate name from path\n let blueprintName: string;\n if (file.isRoot) {\n blueprintName = hierarchyName;\n } else {\n // Use folder name or derive from path\n const dirname = path.dirname(file.path);\n blueprintName = dirname.replace(/[/\\\\]/g, \" / \");\n }\n \n const result = await api.createBlueprint({\n name: blueprintName,\n description: \"\",\n content,\n visibility: visibility as \"PRIVATE\" | \"TEAM\" | \"PUBLIC\",\n tags: [],\n hierarchy_id: hierarchyId,\n parent_id: file.isRoot ? null : rootBlueprintId,\n repository_path: file.path,\n });\n \n // Track root blueprint ID for linking children\n if (file.isRoot) {\n rootBlueprintId = result.blueprint.id;\n }\n \n // Track locally\n await trackBlueprint(cwd, {\n id: result.blueprint.id,\n name: blueprintName,\n file: file.path,\n content,\n source: \"private\",\n hierarchyId,\n hierarchyName,\n repositoryPath: file.path,\n });\n \n spinner.succeed(`${file.path} → ${result.blueprint.id}`);\n successCount++;\n } catch (error) {\n spinner.fail(`${file.path} failed`);\n if (error instanceof ApiRequestError) {\n console.log(chalk.red(` Error: ${error.message}`));\n }\n failCount++;\n }\n }\n \n console.log();\n console.log(chalk.green(`✅ Hierarchy created successfully!`));\n console.log(chalk.gray(` Hierarchy: ${hierarchyId}`));\n console.log(chalk.gray(` Name: ${hierarchyName}`));\n console.log(chalk.gray(` Blueprints: ${successCount} uploaded${failCount > 0 ? `, ${failCount} failed` : \"\"}`));\n console.log();\n console.log(chalk.cyan(\"Tips:\"));\n console.log(chalk.gray(` • Run 'lynxp status' to see all tracked blueprints`));\n console.log(chalk.gray(` • Run 'lynxp pull ${hierarchyId}' to download the entire hierarchy`));\n console.log(chalk.gray(` • Run 'lynxp push' in any subfolder to update individual blueprints`));\n console.log();\n}\n\nfunction findDefaultFile(): string | null {\n const candidates = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursor/rules/project.mdc\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n \"AIDER.md\",\n \"GEMINI.md\",\n \".clinerules\",\n ];\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\n/**\n * Infer blueprint type from file path\n * Returns the appropriate TemplateType for the file\n */\nfunction inferBlueprintType(filePath: string): string {\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n \n // Check if it's a command file first\n const commandInfo = inferCommandTypeFromPath(filePath);\n if (commandInfo) {\n return commandInfo.templateType;\n }\n \n // Infer from file path for rules/config files\n if (normalizedPath.includes(\".cursor/rules/\")) return \"CURSOR_RULES\";\n if (normalizedPath.endsWith(\"CLAUDE.md\")) return \"CLAUDE_MD\";\n if (normalizedPath.endsWith(\".windsurfrules\")) return \"WINDSURF_RULES\";\n if (normalizedPath.endsWith(\".clinerules\")) return \"CLINE_RULES\";\n if (normalizedPath.includes(\".github/copilot-instructions.md\")) return \"COPILOT_INSTRUCTIONS\";\n if (normalizedPath.endsWith(\"GEMINI.md\")) return \"GEMINI_MD\";\n if (normalizedPath.endsWith(\"AIDER.md\")) return \"AGENTS_MD\";\n if (normalizedPath.endsWith(\"AGENTS.md\")) return \"AGENTS_MD\";\n \n // Default to AGENTS_MD for markdown files\n if (normalizedPath.endsWith(\".md\")) return \"AGENTS_MD\";\n \n return \"CUSTOM\";\n}\n\nfunction handleError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n if (error.statusCode === 401) {\n console.error(chalk.gray(\"Your session may have expired. Run 'lynxp login' to re-authenticate.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.gray(\"You don't have permission to modify this blueprint.\"));\n } else if (error.statusCode === 404) {\n console.error(chalk.gray(\"Blueprint not found. It may have been deleted.\"));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n","import { readFile, access, rm, mkdtemp } from \"fs/promises\";\nimport { join } from \"path\";\nimport { tmpdir } from \"os\";\nimport { spawnSync } from \"child_process\";\n\nexport interface DetectedProject {\n name: string | null;\n stack: string[];\n databases: string[]; // Separate field for databases (matches WebUI)\n commands: {\n build?: string;\n test?: string;\n lint?: string;\n dev?: string;\n format?: string;\n };\n // Extended commands - multiple per category with descriptions\n detectedCommands?: {\n test?: { cmd: string; desc?: string }[];\n testCoverage?: { cmd: string; desc?: string }[];\n install?: { cmd: string; desc?: string }[];\n dev?: { cmd: string; desc?: string }[];\n build?: { cmd: string; desc?: string }[];\n lint?: { cmd: string; desc?: string }[];\n format?: { cmd: string; desc?: string }[];\n typecheck?: { cmd: string; desc?: string }[];\n clean?: { cmd: string; desc?: string }[];\n preCommit?: { cmd: string; desc?: string }[];\n additional?: { cmd: string; desc?: string }[];\n };\n packageManager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" | null;\n type: \"monorepo\" | \"library\" | \"application\" | \"unknown\";\n description?: string;\n // New auto-detected fields (aligned with WebUI)\n license?: string;\n repoHost?: string;\n repoUrl?: string;\n cicd?: string;\n hasDocker?: boolean;\n containerRegistry?: string; // ghcr, dockerhub, gcr, ecr, acr, etc.\n testFramework?: string; // vitest, jest, pytest, etc.\n existingFiles?: string[];\n isPublicRepo?: boolean;\n isOpenSource?: boolean; // Based on license type\n projectType?: string; // open_source, internal, etc.\n}\n\n// Framework detection patterns\nconst JS_FRAMEWORK_PATTERNS: Record<string, string[]> = {\n nextjs: [\"next\"],\n react: [\"react\", \"react-dom\"],\n vue: [\"vue\"],\n angular: [\"@angular/core\"],\n svelte: [\"svelte\", \"@sveltejs/kit\"],\n solid: [\"solid-js\"],\n remix: [\"@remix-run/react\"],\n astro: [\"astro\"],\n nuxt: [\"nuxt\"],\n gatsby: [\"gatsby\"],\n};\n\nconst JS_TOOL_PATTERNS: Record<string, string[]> = {\n typescript: [\"typescript\"],\n tailwind: [\"tailwindcss\"],\n prisma: [\"prisma\", \"@prisma/client\"],\n drizzle: [\"drizzle-orm\"],\n express: [\"express\"],\n fastify: [\"fastify\"],\n hono: [\"hono\"],\n elysia: [\"elysia\"],\n trpc: [\"@trpc/server\"],\n graphql: [\"graphql\", \"@apollo/server\"],\n jest: [\"jest\"],\n vitest: [\"vitest\"],\n playwright: [\"@playwright/test\"],\n cypress: [\"cypress\"],\n eslint: [\"eslint\"],\n biome: [\"@biomejs/biome\"],\n prettier: [\"prettier\"],\n vite: [\"vite\"],\n webpack: [\"webpack\"],\n turbo: [\"turbo\"],\n};\n\n/**\n * Detects extended commands from various sources in the repository:\n * - package.json scripts\n * - pyproject.toml (poetry/poe/pdm scripts)\n * - Makefile targets\n * - docker-compose services\n * - Common patterns\n */\nasync function detectExtendedCommands(cwd: string): Promise<DetectedProject[\"detectedCommands\"]> {\n const cmds: NonNullable<DetectedProject[\"detectedCommands\"]> = {\n test: [],\n testCoverage: [],\n install: [],\n dev: [],\n build: [],\n lint: [],\n format: [],\n typecheck: [],\n clean: [],\n preCommit: [],\n additional: [],\n };\n\n // Helper to add command if not duplicate\n const addCmd = (category: keyof typeof cmds, cmd: string, desc?: string) => {\n if (!cmds[category]!.some(c => c.cmd === cmd)) {\n cmds[category]!.push({ cmd, desc });\n }\n };\n\n // ═══════════════════════════════════════════════════════════════\n // 1. Parse package.json scripts\n // ═══════════════════════════════════════════════════════════════\n const packageJsonPath = join(cwd, \"package.json\");\n if (await fileExists(packageJsonPath)) {\n try {\n const content = await readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.scripts) {\n for (const [name, script] of Object.entries(pkg.scripts)) {\n const scriptStr = String(script);\n const fullCmd = `npm run ${name}`;\n \n // Categorize by script name patterns\n if (name.match(/^test$|^test:/i) || scriptStr.includes(\"jest\") || scriptStr.includes(\"vitest\") || scriptStr.includes(\"mocha\")) {\n if (name.includes(\"cov\") || scriptStr.includes(\"--coverage\")) {\n addCmd(\"testCoverage\", fullCmd, `Run ${name}`);\n } else {\n addCmd(\"test\", fullCmd, `Run ${name}`);\n }\n } else if (name.match(/^lint$|^lint:/i) || scriptStr.includes(\"eslint\") || scriptStr.includes(\"biome\")) {\n addCmd(\"lint\", fullCmd, `Run ${name}`);\n } else if (name.match(/^format$|^fmt$|format:/i) || scriptStr.includes(\"prettier\")) {\n addCmd(\"format\", fullCmd, `Run ${name}`);\n } else if (name.match(/^build$|^build:/i) || scriptStr.includes(\"tsc\") || scriptStr.includes(\"webpack\") || scriptStr.includes(\"vite build\")) {\n addCmd(\"build\", fullCmd, `Run ${name}`);\n } else if (name.match(/^dev$|^start$|^serve$/i)) {\n addCmd(\"dev\", fullCmd, `Run ${name}`);\n } else if (name.match(/^typecheck$|^type-check$|^types$|^check:types/i) || scriptStr.includes(\"tsc --noEmit\")) {\n addCmd(\"typecheck\", fullCmd, `Run ${name}`);\n } else if (name.match(/^clean$|^clean:/i) || scriptStr.includes(\"rimraf\") || scriptStr.includes(\"rm -rf\")) {\n addCmd(\"clean\", fullCmd, `Run ${name}`);\n } else if (name.match(/^prepare$|^precommit$|^pre-commit$|^husky/i)) {\n addCmd(\"preCommit\", fullCmd, `Run ${name}`);\n } else if (name === \"install\" || name === \"postinstall\") {\n addCmd(\"install\", fullCmd, `Run ${name}`);\n } else if (![\"publish\", \"prepublish\", \"prepublishOnly\", \"version\", \"postversion\"].includes(name)) {\n // Add other scripts as additional commands\n addCmd(\"additional\", fullCmd, `Run ${name}`);\n }\n }\n }\n } catch {\n // Failed to parse package.json\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 2. Parse pyproject.toml for Python projects\n // ═══════════════════════════════════════════════════════════════\n const pyprojectPath = join(cwd, \"pyproject.toml\");\n if (await fileExists(pyprojectPath)) {\n try {\n const content = await readFile(pyprojectPath, \"utf-8\");\n \n // Detect pytest\n if (content.includes(\"pytest\") || content.includes(\"[tool.pytest\")) {\n addCmd(\"test\", \"python -m pytest tests/ -v --tb=short\", \"Run pytest\");\n addCmd(\"testCoverage\", \"python -m pytest tests/ --cov=src --cov-report=term-missing\", \"Run pytest with coverage\");\n }\n \n // Detect ruff/black for linting/formatting\n if (content.includes(\"ruff\")) {\n addCmd(\"lint\", \"ruff check .\", \"Run ruff linter\");\n addCmd(\"format\", \"ruff format .\", \"Run ruff formatter\");\n }\n if (content.includes(\"black\")) {\n addCmd(\"format\", \"black .\", \"Run black formatter\");\n }\n if (content.includes(\"mypy\")) {\n addCmd(\"typecheck\", \"mypy .\", \"Run mypy type checker\");\n }\n \n // Detect Poetry scripts\n const poetryScriptsMatch = content.match(/\\[tool\\.poetry\\.scripts\\]([\\s\\S]*?)(?=\\n\\[|$)/);\n if (poetryScriptsMatch) {\n const scriptLines = poetryScriptsMatch[1].split(\"\\n\").filter(l => l.includes(\"=\"));\n for (const line of scriptLines) {\n const match = line.match(/(\\w+)\\s*=\\s*\"([^\"]+)\"/);\n if (match) {\n const [, name, entry] = match;\n addCmd(\"additional\", `poetry run ${name}`, entry);\n }\n }\n }\n \n // Detect Poe the Poet tasks\n const poeMatch = content.match(/\\[tool\\.poe\\.tasks\\]([\\s\\S]*?)(?=\\n\\[tool\\.|$)/);\n if (poeMatch) {\n const taskLines = poeMatch[1].split(\"\\n\").filter(l => l.includes(\"=\"));\n for (const line of taskLines) {\n const match = line.match(/(\\w+)\\s*=\\s*\"([^\"]+)\"/);\n if (match) {\n const [, name, cmd] = match;\n // Categorize poe tasks\n if (name.match(/test/i)) {\n addCmd(\"test\", `poe ${name}`, cmd);\n } else if (name.match(/lint/i)) {\n addCmd(\"lint\", `poe ${name}`, cmd);\n } else if (name.match(/format/i)) {\n addCmd(\"format\", `poe ${name}`, cmd);\n } else {\n addCmd(\"additional\", `poe ${name}`, cmd);\n }\n }\n }\n }\n \n // Detect if using FastAPI/uvicorn\n if (content.includes(\"fastapi\") || content.includes(\"uvicorn\")) {\n addCmd(\"dev\", \"uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload\", \"Run FastAPI dev server\");\n }\n \n // Detect requirements install\n if (content.includes(\"[tool.poetry]\")) {\n addCmd(\"install\", \"poetry install\", \"Install dependencies with Poetry\");\n } else if (await fileExists(join(cwd, \"uv.lock\"))) {\n addCmd(\"install\", \"uv sync\", \"Sync dependencies with uv\");\n } else {\n addCmd(\"install\", \"pip install -r requirements.txt\", \"Install dependencies with pip\");\n }\n } catch {\n // Failed to parse pyproject.toml\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 3. Parse requirements.txt for Python projects\n // ═══════════════════════════════════════════════════════════════\n const requirementsPath = join(cwd, \"requirements.txt\");\n if (await fileExists(requirementsPath)) {\n try {\n const content = await readFile(requirementsPath, \"utf-8\");\n if (content.includes(\"pytest\")) {\n addCmd(\"test\", \"python -m pytest tests/ -v\", \"Run pytest\");\n }\n addCmd(\"install\", \"pip install -r requirements.txt\", \"Install dependencies\");\n } catch {\n // ignore\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 4. Parse Makefile targets\n // ═══════════════════════════════════════════════════════════════\n const makefilePath = join(cwd, \"Makefile\");\n if (await fileExists(makefilePath)) {\n try {\n const content = await readFile(makefilePath, \"utf-8\");\n \n // Extract targets (lines starting with word: at the beginning)\n const targetMatches = content.matchAll(/^([a-zA-Z_][a-zA-Z0-9_-]*):\\s*(?:[a-zA-Z0-9_\\- ]*)?$/gm);\n for (const match of targetMatches) {\n const target = match[1];\n const cmd = `make ${target}`;\n \n // Categorize by target name\n if (target.match(/^test$|^tests$/i)) {\n addCmd(\"test\", cmd, `Make ${target}`);\n } else if (target.match(/^test[-_]?cov|^coverage$/i)) {\n addCmd(\"testCoverage\", cmd, `Make ${target}`);\n } else if (target.match(/^lint$/i)) {\n addCmd(\"lint\", cmd, `Make ${target}`);\n } else if (target.match(/^format$|^fmt$/i)) {\n addCmd(\"format\", cmd, `Make ${target}`);\n } else if (target.match(/^build$/i)) {\n addCmd(\"build\", cmd, `Make ${target}`);\n } else if (target.match(/^dev$|^run$|^serve$/i)) {\n addCmd(\"dev\", cmd, `Make ${target}`);\n } else if (target.match(/^typecheck$|^types$/i)) {\n addCmd(\"typecheck\", cmd, `Make ${target}`);\n } else if (target.match(/^clean$/i)) {\n addCmd(\"clean\", cmd, `Make ${target}`);\n } else if (target.match(/^install$|^deps$/i)) {\n addCmd(\"install\", cmd, `Make ${target}`);\n } else if (![\"all\", \"default\", \".PHONY\", \".DEFAULT_GOAL\"].includes(target)) {\n addCmd(\"additional\", cmd, `Make ${target}`);\n }\n }\n } catch {\n // Failed to read Makefile\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 5. Parse docker-compose.yml\n // ═══════════════════════════════════════════════════════════════\n const dockerComposePath = join(cwd, \"docker-compose.yml\");\n const dockerComposeYamlPath = join(cwd, \"docker-compose.yaml\");\n const composePath = await fileExists(dockerComposePath) ? dockerComposePath : \n await fileExists(dockerComposeYamlPath) ? dockerComposeYamlPath : null;\n if (composePath) {\n try {\n const content = await readFile(composePath, \"utf-8\");\n \n // Extract service names (basic YAML parsing)\n const serviceMatches = content.matchAll(/^\\s{2}([a-zA-Z_][a-zA-Z0-9_-]*):\\s*$/gm);\n for (const match of serviceMatches) {\n const service = match[1];\n addCmd(\"additional\", `docker compose up ${service}`, `Run ${service} service`);\n }\n \n // Add common docker-compose commands\n addCmd(\"dev\", \"docker compose up\", \"Start all services\");\n addCmd(\"build\", \"docker compose build\", \"Build all services\");\n addCmd(\"clean\", \"docker compose down -v\", \"Stop and remove volumes\");\n } catch {\n // Failed to read docker-compose.yml\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 6. Detect Dockerfile commands\n // ═══════════════════════════════════════════════════════════════\n const dockerfilePath = join(cwd, \"Dockerfile\");\n if (await fileExists(dockerfilePath)) {\n try {\n const content = await readFile(dockerfilePath, \"utf-8\");\n \n // Extract FROM image name for context\n const fromMatch = content.match(/FROM\\s+([^\\s]+)/);\n const imageName = fromMatch ? fromMatch[1].split(\":\")[0] : \"app\";\n \n addCmd(\"build\", `docker build -t ${imageName} .`, \"Build Docker image\");\n addCmd(\"dev\", `docker run -it --rm ${imageName}`, \"Run Docker container\");\n } catch {\n // ignore\n }\n }\n\n // Check for additional Dockerfiles\n try {\n const dockerViewerPath = join(cwd, \"Dockerfile.viewer\");\n if (await fileExists(dockerViewerPath)) {\n addCmd(\"build\", \"docker build -f Dockerfile.viewer -t app-viewer .\", \"Build viewer Docker image\");\n }\n } catch {\n // ignore\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 7. Detect Cargo.toml for Rust\n // ═══════════════════════════════════════════════════════════════\n const cargoPath = join(cwd, \"Cargo.toml\");\n if (await fileExists(cargoPath)) {\n addCmd(\"build\", \"cargo build\", \"Build Rust project\");\n addCmd(\"build\", \"cargo build --release\", \"Build release\");\n addCmd(\"test\", \"cargo test\", \"Run Rust tests\");\n addCmd(\"lint\", \"cargo clippy\", \"Run Clippy linter\");\n addCmd(\"format\", \"cargo fmt\", \"Format Rust code\");\n addCmd(\"dev\", \"cargo run\", \"Run Rust binary\");\n addCmd(\"clean\", \"cargo clean\", \"Clean build artifacts\");\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 8. Detect go.mod for Go\n // ═══════════════════════════════════════════════════════════════\n const goModPath = join(cwd, \"go.mod\");\n if (await fileExists(goModPath)) {\n addCmd(\"build\", \"go build\", \"Build Go project\");\n addCmd(\"test\", \"go test ./...\", \"Run Go tests\");\n addCmd(\"lint\", \"golangci-lint run\", \"Run golangci-lint\");\n addCmd(\"format\", \"go fmt ./...\", \"Format Go code\");\n addCmd(\"dev\", \"go run .\", \"Run Go binary\");\n addCmd(\"clean\", \"go clean\", \"Clean build cache\");\n addCmd(\"typecheck\", \"go vet ./...\", \"Run go vet\");\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 9. Detect common Python entrypoints\n // ═══════════════════════════════════════════════════════════════\n const srcMainPath = join(cwd, \"src\", \"main.py\");\n const mainPath = join(cwd, \"main.py\");\n const appPath = join(cwd, \"app.py\");\n if (await fileExists(srcMainPath)) {\n addCmd(\"dev\", \"python -m src.main\", \"Run main module\");\n }\n if (await fileExists(mainPath)) {\n addCmd(\"dev\", \"python main.py\", \"Run main.py\");\n }\n if (await fileExists(appPath)) {\n addCmd(\"dev\", \"python app.py\", \"Run app.py\");\n }\n\n // Check for scheduler patterns\n const schedulerPath = join(cwd, \"src\", \"scheduler.py\");\n if (await fileExists(schedulerPath)) {\n addCmd(\"additional\", \"python -m src.scheduler\", \"Run scheduler\");\n }\n\n // Check for setup_auth or similar\n const setupAuthPath = join(cwd, \"src\", \"setup_auth.py\");\n if (await fileExists(setupAuthPath)) {\n addCmd(\"additional\", \"python -m src.setup_auth\", \"Setup authentication\");\n }\n\n // Check for web app patterns\n const webMainPath = join(cwd, \"src\", \"web\", \"main.py\");\n if (await fileExists(webMainPath)) {\n addCmd(\"dev\", \"uvicorn src.web.main:app --host 0.0.0.0 --port 8080\", \"Run web viewer\");\n }\n\n return cmds;\n}\n\nexport async function detectProject(cwd: string): Promise<DetectedProject | null> {\n const detected: DetectedProject = {\n name: null,\n stack: [],\n databases: [],\n commands: {},\n packageManager: null,\n type: \"unknown\",\n };\n\n // Try to detect from package.json (Node.js projects)\n const packageJsonPath = join(cwd, \"package.json\");\n if (await fileExists(packageJsonPath)) {\n try {\n const content = await readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(content);\n \n detected.name = pkg.name || null;\n detected.description = pkg.description;\n \n // Detect if it's a monorepo\n if (pkg.workspaces || await fileExists(join(cwd, \"pnpm-workspace.yaml\"))) {\n detected.type = \"monorepo\";\n } else if (pkg.main || pkg.exports) {\n detected.type = \"library\";\n } else {\n detected.type = \"application\";\n }\n \n // Detect stack from dependencies\n const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n \n // Detect frameworks\n for (const [framework, deps] of Object.entries(JS_FRAMEWORK_PATTERNS)) {\n if (deps.some(dep => allDeps[dep])) {\n detected.stack.push(framework);\n }\n }\n\n // Detect tools\n for (const [tool, deps] of Object.entries(JS_TOOL_PATTERNS)) {\n if (deps.some(dep => allDeps[dep])) {\n detected.stack.push(tool);\n }\n }\n\n // If no framework detected but has main/src, assume vanilla JS/TS\n if (detected.stack.length === 0 || (detected.stack.length === 1 && detected.stack[0] === \"typescript\")) {\n detected.stack.unshift(\"javascript\");\n }\n \n // Detect commands from scripts\n if (pkg.scripts) {\n detected.commands.build = pkg.scripts.build;\n detected.commands.test = pkg.scripts.test;\n detected.commands.lint = pkg.scripts.lint || pkg.scripts[\"lint:check\"];\n detected.commands.dev = pkg.scripts.dev || pkg.scripts.start || pkg.scripts.serve;\n detected.commands.format = pkg.scripts.format || pkg.scripts.prettier;\n }\n\n // Detect package manager from lockfiles\n if (await fileExists(join(cwd, \"pnpm-lock.yaml\"))) {\n detected.packageManager = \"pnpm\";\n } else if (await fileExists(join(cwd, \"yarn.lock\"))) {\n detected.packageManager = \"yarn\";\n } else if (await fileExists(join(cwd, \"bun.lockb\"))) {\n detected.packageManager = \"bun\";\n } else if (await fileExists(join(cwd, \"package-lock.json\"))) {\n detected.packageManager = \"npm\";\n }\n\n // Add package manager prefix to commands if detected\n if (detected.packageManager && detected.packageManager !== \"npm\") {\n const pm = detected.packageManager;\n for (const [key, value] of Object.entries(detected.commands)) {\n if (value && !value.startsWith(pm) && !value.startsWith(\"npx\")) {\n // Commands are already script names, prefix with package manager\n detected.commands[key as keyof typeof detected.commands] = `${pm} run ${value}`;\n }\n }\n } else if (detected.commands) {\n // Prefix with npm run\n for (const [key, value] of Object.entries(detected.commands)) {\n if (value && !value.startsWith(\"npm\") && !value.startsWith(\"npx\")) {\n detected.commands[key as keyof typeof detected.commands] = `npm run ${value}`;\n }\n }\n }\n\n // Fix: commands should be the actual script names for display\n if (pkg.scripts) {\n detected.commands.build = pkg.scripts.build ? \"build\" : undefined;\n detected.commands.test = pkg.scripts.test ? \"test\" : undefined;\n detected.commands.lint = pkg.scripts.lint ? \"lint\" : (pkg.scripts[\"lint:check\"] ? \"lint:check\" : undefined);\n detected.commands.dev = pkg.scripts.dev ? \"dev\" : (pkg.scripts.start ? \"start\" : (pkg.scripts.serve ? \"serve\" : undefined));\n }\n\n return detected;\n } catch {\n // Failed to parse package.json\n }\n }\n\n // Try to detect from pyproject.toml (Python projects)\n const pyprojectPath = join(cwd, \"pyproject.toml\");\n if (await fileExists(pyprojectPath)) {\n try {\n const content = await readFile(pyprojectPath, \"utf-8\");\n \n detected.stack.push(\"python\");\n detected.type = \"application\";\n \n // Extract project name (basic TOML parsing)\n const nameMatch = content.match(/name\\s*=\\s*\"([^\"]+)\"/);\n if (nameMatch) detected.name = nameMatch[1];\n \n // Detect frameworks and tools\n if (content.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.includes(\"django\")) detected.stack.push(\"django\");\n if (content.includes(\"flask\")) detected.stack.push(\"flask\");\n if (content.includes(\"pydantic\")) detected.stack.push(\"pydantic\");\n if (content.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n if (content.includes(\"pytest\")) detected.stack.push(\"pytest\");\n if (content.includes(\"ruff\")) detected.stack.push(\"ruff\");\n if (content.includes(\"mypy\")) detected.stack.push(\"mypy\");\n \n // Common Python commands\n detected.commands.test = \"pytest\";\n detected.commands.lint = \"ruff check .\";\n \n // Check if using poetry or uv\n if (content.includes(\"[tool.poetry]\")) {\n detected.packageManager = \"yarn\"; // Closest analogy\n detected.commands.dev = \"poetry run python -m uvicorn main:app --reload\";\n } else if (await fileExists(join(cwd, \"uv.lock\"))) {\n detected.commands.dev = \"uv run python main.py\";\n }\n \n return detected;\n } catch {\n // Failed to parse pyproject.toml\n }\n }\n\n // Try to detect from requirements.txt (Python projects)\n const requirementsPath = join(cwd, \"requirements.txt\");\n if (await fileExists(requirementsPath)) {\n try {\n const content = await readFile(requirementsPath, \"utf-8\");\n \n detected.stack.push(\"python\");\n detected.type = \"application\";\n \n if (content.toLowerCase().includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.toLowerCase().includes(\"django\")) detected.stack.push(\"django\");\n if (content.toLowerCase().includes(\"flask\")) detected.stack.push(\"flask\");\n \n detected.commands.test = \"pytest\";\n detected.commands.lint = \"ruff check .\";\n \n return detected;\n } catch {\n // Failed to read requirements.txt\n }\n }\n\n // Try to detect from Cargo.toml (Rust projects)\n const cargoPath = join(cwd, \"Cargo.toml\");\n if (await fileExists(cargoPath)) {\n try {\n const content = await readFile(cargoPath, \"utf-8\");\n \n detected.stack.push(\"rust\");\n detected.type = \"application\";\n \n // Extract project name\n const nameMatch = content.match(/name\\s*=\\s*\"([^\"]+)\"/);\n if (nameMatch) detected.name = nameMatch[1];\n \n // Detect common crates\n if (content.includes(\"actix-web\")) detected.stack.push(\"actix\");\n if (content.includes(\"axum\")) detected.stack.push(\"axum\");\n if (content.includes(\"tokio\")) detected.stack.push(\"tokio\");\n if (content.includes(\"serde\")) detected.stack.push(\"serde\");\n if (content.includes(\"sqlx\")) detected.stack.push(\"sqlx\");\n \n detected.commands.build = \"cargo build\";\n detected.commands.test = \"cargo test\";\n detected.commands.lint = \"cargo clippy\";\n detected.commands.dev = \"cargo run\";\n \n return detected;\n } catch {\n // Failed to parse Cargo.toml\n }\n }\n\n // Try to detect from go.mod (Go projects)\n const goModPath = join(cwd, \"go.mod\");\n if (await fileExists(goModPath)) {\n try {\n const content = await readFile(goModPath, \"utf-8\");\n \n detected.stack.push(\"go\");\n detected.type = \"application\";\n \n // Extract module name\n const moduleMatch = content.match(/module\\s+(\\S+)/);\n if (moduleMatch) {\n const parts = moduleMatch[1].split(\"/\");\n detected.name = parts[parts.length - 1];\n }\n \n // Detect common frameworks\n if (content.includes(\"gin-gonic/gin\")) detected.stack.push(\"gin\");\n if (content.includes(\"gofiber/fiber\")) detected.stack.push(\"fiber\");\n if (content.includes(\"labstack/echo\")) detected.stack.push(\"echo\");\n if (content.includes(\"gorm.io/gorm\")) detected.stack.push(\"gorm\");\n \n detected.commands.build = \"go build\";\n detected.commands.test = \"go test ./...\";\n detected.commands.lint = \"golangci-lint run\";\n detected.commands.dev = \"go run .\";\n \n return detected;\n } catch {\n // Failed to parse go.mod\n }\n }\n\n // Try to detect from Makefile\n const makefilePath = join(cwd, \"Makefile\");\n if (await fileExists(makefilePath)) {\n try {\n const content = await readFile(makefilePath, \"utf-8\");\n \n // Extract targets\n if (content.includes(\"build:\")) detected.commands.build = \"make build\";\n if (content.includes(\"test:\")) detected.commands.test = \"make test\";\n if (content.includes(\"lint:\")) detected.commands.lint = \"make lint\";\n if (content.includes(\"dev:\")) detected.commands.dev = \"make dev\";\n if (content.includes(\"run:\")) detected.commands.dev = detected.commands.dev || \"make run\";\n \n if (Object.keys(detected.commands).length > 0) {\n detected.type = \"application\";\n return detected;\n }\n } catch {\n // Failed to read Makefile\n }\n }\n\n // Try to detect from Docker\n if (await fileExists(join(cwd, \"Dockerfile\")) || await fileExists(join(cwd, \"docker-compose.yml\"))) {\n detected.stack.push(\"docker\");\n detected.type = \"application\";\n detected.hasDocker = true;\n }\n\n // ════════════════════════════════════════════════════════════════\n // Additional auto-detection for wizard fields\n // ════════════════════════════════════════════════════════════════\n\n // Detect license from LICENSE file\n const licensePath = join(cwd, \"LICENSE\");\n if (await fileExists(licensePath)) {\n try {\n const licenseContent = await readFile(licensePath, \"utf-8\");\n const lowerContent = licenseContent.toLowerCase();\n \n if (lowerContent.includes(\"mit license\") || lowerContent.includes(\"permission is hereby granted, free of charge\")) {\n detected.license = \"mit\";\n } else if (lowerContent.includes(\"apache license\") && lowerContent.includes(\"version 2.0\")) {\n detected.license = \"apache-2.0\";\n } else if (lowerContent.includes(\"gnu general public license\") && lowerContent.includes(\"version 3\")) {\n detected.license = \"gpl-3.0\";\n } else if (lowerContent.includes(\"gnu lesser general public license\")) {\n detected.license = \"lgpl-3.0\";\n } else if (lowerContent.includes(\"gnu affero general public license\")) {\n detected.license = \"agpl-3.0\";\n } else if (lowerContent.includes(\"bsd 3-clause\") || lowerContent.includes(\"redistribution and use in source and binary forms\")) {\n detected.license = \"bsd-3\";\n } else if (lowerContent.includes(\"mozilla public license\") && lowerContent.includes(\"2.0\")) {\n detected.license = \"mpl-2.0\";\n } else if (lowerContent.includes(\"unlicense\") || lowerContent.includes(\"this is free and unencumbered software\")) {\n detected.license = \"unlicense\";\n }\n } catch {\n // Failed to read LICENSE\n }\n }\n\n // Detect repository info from .git/config\n const gitConfigPath = join(cwd, \".git\", \"config\");\n if (await fileExists(gitConfigPath)) {\n try {\n const gitConfig = await readFile(gitConfigPath, \"utf-8\");\n const urlMatch = gitConfig.match(/url\\s*=\\s*(.+)/);\n if (urlMatch) {\n const repoUrl = urlMatch[1].trim();\n detected.repoUrl = repoUrl;\n \n if (repoUrl.includes(\"github.com\")) {\n detected.repoHost = \"github\";\n } else if (repoUrl.includes(\"gitlab.com\") || repoUrl.includes(\"gitlab\")) {\n detected.repoHost = \"gitlab\";\n } else if (repoUrl.includes(\"bitbucket\")) {\n detected.repoHost = \"bitbucket\";\n } else if (repoUrl.includes(\"gitea\") || repoUrl.includes(\"codeberg\")) {\n detected.repoHost = \"gitea\";\n } else if (repoUrl.includes(\"azure\")) {\n detected.repoHost = \"azure\";\n }\n }\n } catch {\n // Failed to read git config\n }\n }\n\n // Detect CI/CD from workflow files\n if (await fileExists(join(cwd, \".github\", \"workflows\"))) {\n detected.cicd = \"github_actions\";\n } else if (await fileExists(join(cwd, \".gitlab-ci.yml\"))) {\n detected.cicd = \"gitlab_ci\";\n } else if (await fileExists(join(cwd, \"Jenkinsfile\"))) {\n detected.cicd = \"jenkins\";\n } else if (await fileExists(join(cwd, \".circleci\"))) {\n detected.cicd = \"circleci\";\n } else if (await fileExists(join(cwd, \".travis.yml\"))) {\n detected.cicd = \"travis\";\n } else if (await fileExists(join(cwd, \"azure-pipelines.yml\"))) {\n detected.cicd = \"azure_devops\";\n } else if (await fileExists(join(cwd, \"bitbucket-pipelines.yml\"))) {\n detected.cicd = \"bitbucket\";\n } else if (await fileExists(join(cwd, \".drone.yml\"))) {\n detected.cicd = \"drone\";\n }\n\n // Detect existing static files\n detected.existingFiles = [];\n const staticFiles = [\n \".editorconfig\",\n \"CONTRIBUTING.md\",\n \"CODE_OF_CONDUCT.md\", \n \"SECURITY.md\",\n \"ROADMAP.md\",\n \".gitignore\",\n \".github/FUNDING.yml\",\n \"LICENSE\",\n \"README.md\",\n \"ARCHITECTURE.md\",\n \"CHANGELOG.md\",\n ];\n \n for (const file of staticFiles) {\n if (await fileExists(join(cwd, file))) {\n detected.existingFiles.push(file);\n }\n }\n\n // Try to get description from README if not already set\n if (!detected.description) {\n const readmePath = join(cwd, \"README.md\");\n if (await fileExists(readmePath)) {\n try {\n const readme = await readFile(readmePath, \"utf-8\");\n // Get first non-heading, non-empty paragraph\n const lines = readme.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith(\"#\") && !trimmed.startsWith(\"!\") && !trimmed.startsWith(\"[\") && trimmed.length > 20) {\n detected.description = trimmed.substring(0, 200);\n break;\n }\n }\n } catch {\n // Failed to read README\n }\n }\n }\n\n // Detect extended commands from all sources\n detected.detectedCommands = await detectExtendedCommands(cwd);\n\n return detected.stack.length > 0 || detected.name ? detected : null;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect repo host from URL\n */\nexport function detectRepoHost(url: string): string {\n const lower = url.toLowerCase();\n if (lower.includes(\"github.com\") || lower.includes(\"github:\")) return \"github\";\n if (lower.includes(\"gitlab.com\") || lower.includes(\"gitlab\")) return \"gitlab\";\n if (lower.includes(\"bitbucket.org\") || lower.includes(\"bitbucket:\")) return \"bitbucket\";\n if (lower.includes(\"gitea.\") || lower.includes(\"gitea:\") || lower.includes(\"codeberg.org\")) return \"gitea\";\n if (lower.includes(\"azure.com\") || lower.includes(\"visualstudio.com\") || lower.includes(\"dev.azure\")) return \"azure\";\n return \"other\";\n}\n\n/**\n * Parse GitHub URL to owner/repo\n */\nfunction parseGitHubUrl(url: string): { owner: string; repo: string } | null {\n const patterns = [\n /github\\.com[/:]([^/]+)\\/([^/.]+)/,\n /^([^/]+)\\/([^/]+)$/,\n ];\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match) {\n return { owner: match[1], repo: match[2].replace(/\\.git$/, \"\") };\n }\n }\n return null;\n}\n\n/**\n * Parse GitLab URL to project path and host\n */\nfunction parseGitLabUrl(url: string): { path: string; host: string } | null {\n const patterns = [\n /^https?:\\/\\/([^/]+)\\/(.+?)(?:\\.git)?$/,\n /^git@([^:]+):(.+?)(?:\\.git)?$/,\n ];\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match) {\n const host = match[1];\n const path = match[2].replace(/\\.git$/, \"\");\n if (host.includes(\"gitlab\") || url.toLowerCase().includes(\"gitlab\")) {\n return { path, host };\n }\n }\n }\n return null;\n}\n\n/**\n * Detect from GitHub API (faster, no clone needed)\n */\ninterface GitHubRepoInfo {\n name: string;\n description: string | null;\n private: boolean;\n license?: { spdx_id: string } | null;\n}\n\ninterface GitHubFile {\n name: string;\n type: string;\n}\n\ninterface PackageJson {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n}\n\n// Open source license identifiers\nconst OPEN_SOURCE_LICENSES = [\"mit\", \"apache-2.0\", \"gpl-3.0\", \"lgpl-3.0\", \"agpl-3.0\", \"bsd-2-clause\", \"bsd-3-clause\", \"mpl-2.0\", \"unlicense\", \"cc0-1.0\", \"isc\"];\n\n// Static files to detect\nconst STATIC_FILES = [\".editorconfig\", \"CONTRIBUTING.md\", \"CODE_OF_CONDUCT.md\", \"SECURITY.md\", \"ROADMAP.md\", \".gitignore\", \".github/FUNDING.yml\", \"LICENSE\", \"README.md\", \"ARCHITECTURE.md\", \"CHANGELOG.md\"];\n\nasync function detectFromGitHubApi(repoUrl: string): Promise<DetectedProject | null> {\n const parsed = parseGitHubUrl(repoUrl);\n if (!parsed) return null;\n \n const { owner, repo } = parsed;\n \n try {\n // Get repo info\n const repoRes = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!repoRes.ok) return null;\n const repoInfo = await repoRes.json() as GitHubRepoInfo;\n \n if (repoInfo.private) return null;\n \n // Determine if it's open source based on license\n const licenseId = repoInfo.license?.spdx_id?.toLowerCase() || null;\n const isOpenSource = !repoInfo.private && (licenseId ? OPEN_SOURCE_LICENSES.includes(licenseId) : false);\n \n const detected: DetectedProject = {\n name: repoInfo.name,\n description: repoInfo.description ?? undefined,\n stack: [],\n databases: [],\n commands: {},\n packageManager: null,\n type: \"application\",\n repoHost: \"github\",\n repoUrl,\n license: licenseId ?? undefined,\n isPublicRepo: !repoInfo.private,\n isOpenSource,\n projectType: isOpenSource ? \"open_source\" : undefined,\n hasDocker: false,\n existingFiles: [],\n };\n \n // List root files\n const filesRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!filesRes.ok) return detected;\n const files = await filesRes.json() as GitHubFile[];\n const fileNames = new Set(files.map((f) => f.name.toLowerCase()));\n \n // Detect existing static files (root level)\n for (const file of STATIC_FILES) {\n // Skip files in subdirectories - we'll check those separately\n if (file.includes(\"/\")) continue;\n if (files.some((f) => f.name.toLowerCase() === file.toLowerCase())) {\n detected.existingFiles!.push(file);\n }\n }\n \n // Check .github directory for FUNDING.yml and other files\n if (files.some((f) => f.name === \".github\" && f.type === \"dir\")) {\n const ghFilesRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/.github`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (ghFilesRes.ok) {\n const ghFiles = await ghFilesRes.json() as GitHubFile[];\n if (ghFiles.some((f) => f.name.toLowerCase() === \"funding.yml\")) {\n detected.existingFiles!.push(\".github/FUNDING.yml\");\n }\n }\n }\n \n // Check for Docker and detect container registry\n if (fileNames.has(\"dockerfile\") || fileNames.has(\"docker-compose.yml\") || fileNames.has(\"docker-compose.yaml\")) {\n detected.hasDocker = true;\n detected.stack.push(\"docker\");\n \n // Try to detect container registry from docker-compose\n const dockerComposeFile = fileNames.has(\"docker-compose.yml\") ? \"docker-compose.yml\" : fileNames.has(\"docker-compose.yaml\") ? \"docker-compose.yaml\" : null;\n if (dockerComposeFile) {\n const composeRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/${dockerComposeFile}`);\n if (composeRes.ok) {\n try {\n const content = await composeRes.text();\n const lowerContent = content.toLowerCase();\n \n // Detect container registry\n if (content.includes(\"ghcr.io\")) detected.containerRegistry = \"ghcr\";\n else if (content.includes(\"docker.io\") || /image:\\s*[a-z0-9]+\\/[a-z0-9]/.test(content)) detected.containerRegistry = \"dockerhub\";\n else if (content.includes(\"gcr.io\")) detected.containerRegistry = \"gcr\";\n else if (content.includes(\"ecr.\") || content.includes(\".amazonaws.com\")) detected.containerRegistry = \"ecr\";\n else if (content.includes(\"azurecr.io\")) detected.containerRegistry = \"acr\";\n else if (content.includes(\"quay.io\")) detected.containerRegistry = \"quay\";\n else if (content.includes(\"registry.gitlab.com\")) detected.containerRegistry = \"gitlab_registry\";\n \n // Detect databases from docker-compose\n if (lowerContent.includes(\"postgres\")) detected.databases.push(\"postgresql\");\n if (lowerContent.includes(\"mysql\") && !lowerContent.includes(\"mysql-\")) detected.databases.push(\"mysql\");\n if (lowerContent.includes(\"mongo\")) detected.databases.push(\"mongodb\");\n if (lowerContent.includes(\"redis\")) detected.databases.push(\"redis\");\n if (lowerContent.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n if (lowerContent.includes(\"mariadb\")) detected.databases.push(\"mariadb\");\n } catch { /* ignore */ }\n }\n }\n }\n \n // Check for CI/CD\n if (files.some((f) => f.name === \".github\" && f.type === \"dir\")) {\n // Check if .github/workflows exists\n const ghFilesRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/.github`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (ghFilesRes.ok) {\n const ghFiles = await ghFilesRes.json() as GitHubFile[];\n if (ghFiles.some((f) => f.name === \"workflows\")) {\n detected.cicd = \"github_actions\";\n }\n }\n }\n if (fileNames.has(\".gitlab-ci.yml\")) detected.cicd = \"gitlab_ci\";\n if (fileNames.has(\"jenkinsfile\")) detected.cicd = \"jenkins\";\n if (fileNames.has(\".travis.yml\")) detected.cicd = \"travis\";\n if (fileNames.has(\"azure-pipelines.yml\")) detected.cicd = \"azure_devops\";\n \n // Detect from pyproject.toml (Python projects)\n if (fileNames.has(\"pyproject.toml\")) {\n detected.stack.push(\"python\");\n const pyprojectRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/pyproject.toml`);\n if (pyprojectRes.ok) {\n try {\n const content = await pyprojectRes.text();\n const lowerContent = content.toLowerCase();\n if (lowerContent.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (lowerContent.includes(\"django\")) detected.stack.push(\"django\");\n if (lowerContent.includes(\"flask\")) detected.stack.push(\"flask\");\n if (lowerContent.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n if (lowerContent.includes(\"pydantic\")) detected.stack.push(\"pydantic\");\n \n // Detect test framework\n if (lowerContent.includes(\"pytest\")) detected.testFramework = \"pytest\";\n else if (lowerContent.includes(\"unittest\")) detected.testFramework = \"unittest\";\n \n // Detect commands\n detected.commands.test = \"pytest\";\n if (lowerContent.includes(\"ruff\")) detected.commands.lint = \"ruff check .\";\n \n // Detect databases from Python packages\n if (lowerContent.includes(\"asyncpg\") || lowerContent.includes(\"psycopg\")) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (lowerContent.includes(\"aiosqlite\") || lowerContent.includes(\"sqlite\")) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (lowerContent.includes(\"pymongo\") || lowerContent.includes(\"motor\")) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n if (lowerContent.includes(\"redis\") || lowerContent.includes(\"aioredis\")) {\n if (!detected.databases.includes(\"redis\")) detected.databases.push(\"redis\");\n }\n if (lowerContent.includes(\"pymysql\") || lowerContent.includes(\"aiomysql\")) {\n if (!detected.databases.includes(\"mysql\")) detected.databases.push(\"mysql\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect from requirements.txt (Python)\n if (fileNames.has(\"requirements.txt\")) {\n const reqRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/requirements.txt`);\n if (reqRes.ok) {\n try {\n const content = (await reqRes.text()).toLowerCase();\n if (!detected.stack.includes(\"python\")) detected.stack.push(\"python\");\n if (content.includes(\"fastapi\") && !detected.stack.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.includes(\"django\") && !detected.stack.includes(\"django\")) detected.stack.push(\"django\");\n if (content.includes(\"flask\") && !detected.stack.includes(\"flask\")) detected.stack.push(\"flask\");\n if (content.includes(\"sqlalchemy\") && !detected.stack.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n \n // Detect databases from Python packages\n if (content.includes(\"asyncpg\") || content.includes(\"psycopg\")) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (content.includes(\"aiosqlite\") || content.includes(\"sqlite\")) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (content.includes(\"pymongo\") || content.includes(\"motor\")) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect from package.json\n if (fileNames.has(\"package.json\")) {\n const pkgRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/package.json`);\n if (pkgRes.ok) {\n try {\n const pkg = await pkgRes.json() as PackageJson;\n const allDeps: Record<string, string> = { ...pkg.dependencies, ...pkg.devDependencies };\n \n // Frameworks\n if (allDeps[\"next\"]) detected.stack.push(\"nextjs\");\n if (allDeps[\"react\"]) detected.stack.push(\"react\");\n if (allDeps[\"vue\"]) detected.stack.push(\"vue\");\n if (allDeps[\"svelte\"]) detected.stack.push(\"svelte\");\n if (allDeps[\"express\"]) detected.stack.push(\"express\");\n if (allDeps[\"fastify\"]) detected.stack.push(\"fastify\");\n if (allDeps[\"hono\"]) detected.stack.push(\"hono\");\n \n // Tools\n if (allDeps[\"typescript\"]) detected.stack.push(\"typescript\");\n if (allDeps[\"tailwindcss\"]) detected.stack.push(\"tailwind\");\n if (allDeps[\"prisma\"]) detected.stack.push(\"prisma\");\n if (allDeps[\"drizzle-orm\"]) detected.stack.push(\"drizzle\");\n \n // Test frameworks\n if (allDeps[\"vitest\"]) detected.testFramework = \"vitest\";\n else if (allDeps[\"jest\"]) detected.testFramework = \"jest\";\n else if (allDeps[\"@playwright/test\"]) detected.testFramework = \"playwright\";\n else if (allDeps[\"cypress\"]) detected.testFramework = \"cypress\";\n else if (allDeps[\"mocha\"]) detected.testFramework = \"mocha\";\n \n if (detected.stack.length === 0 || (detected.stack.length === 1 && detected.stack[0] === \"typescript\")) {\n detected.stack.unshift(\"javascript\");\n }\n \n if (pkg.scripts) {\n if (pkg.scripts.build) detected.commands.build = \"npm run build\";\n if (pkg.scripts.test) detected.commands.test = \"npm run test\";\n if (pkg.scripts.lint) detected.commands.lint = \"npm run lint\";\n if (pkg.scripts.dev) detected.commands.dev = \"npm run dev\";\n else if (pkg.scripts.start) detected.commands.dev = \"npm run start\";\n }\n \n // Detect databases from Node.js packages\n if (allDeps[\"pg\"] || allDeps[\"postgres\"] || allDeps[\"@neondatabase/serverless\"]) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (allDeps[\"better-sqlite3\"] || allDeps[\"sql.js\"] || allDeps[\"sqlite3\"]) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (allDeps[\"mongodb\"] || allDeps[\"mongoose\"]) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n if (allDeps[\"redis\"] || allDeps[\"ioredis\"]) {\n if (!detected.databases.includes(\"redis\")) detected.databases.push(\"redis\");\n }\n if (allDeps[\"mysql\"] || allDeps[\"mysql2\"]) {\n if (!detected.databases.includes(\"mysql\")) detected.databases.push(\"mysql\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect other languages\n if (fileNames.has(\"cargo.toml\")) {\n detected.stack.push(\"rust\");\n detected.commands.build = \"cargo build\";\n detected.commands.test = \"cargo test\";\n }\n if (fileNames.has(\"go.mod\")) {\n detected.stack.push(\"go\");\n detected.commands.build = \"go build\";\n detected.commands.test = \"go test ./...\";\n }\n \n return detected;\n } catch {\n return null;\n }\n}\n\ninterface GitLabRepoInfo {\n name: string;\n description: string | null;\n visibility: \"public\" | \"private\" | \"internal\";\n license?: { key: string } | null;\n}\n\ninterface GitLabFile {\n name: string;\n type: string;\n}\n\n/**\n * Detect from GitLab API (faster, no clone needed)\n */\nasync function detectFromGitLabApi(repoUrl: string): Promise<DetectedProject | null> {\n const parsed = parseGitLabUrl(repoUrl);\n if (!parsed) return null;\n \n const { path: projectPath, host } = parsed;\n const encodedPath = encodeURIComponent(projectPath);\n \n try {\n // Get repo info\n const repoRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!repoRes.ok) return null;\n const repoInfo = await repoRes.json() as GitLabRepoInfo;\n \n if (repoInfo.visibility === \"private\") return null;\n \n // Determine if it's open source based on license\n const licenseId = repoInfo.license?.key?.toLowerCase() || null;\n const isOpenSource = repoInfo.visibility === \"public\" && (licenseId ? OPEN_SOURCE_LICENSES.includes(licenseId) : false);\n \n const detected: DetectedProject = {\n name: repoInfo.name,\n description: repoInfo.description ?? undefined,\n stack: [],\n databases: [],\n commands: {},\n packageManager: null,\n type: \"application\",\n repoHost: \"gitlab\",\n repoUrl,\n license: licenseId ?? undefined,\n isPublicRepo: repoInfo.visibility === \"public\",\n isOpenSource,\n projectType: isOpenSource ? \"open_source\" : undefined,\n hasDocker: false,\n existingFiles: [],\n };\n \n // List root files\n const filesRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/tree?per_page=100`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!filesRes.ok) return detected;\n const files = await filesRes.json() as GitLabFile[];\n const fileNames = new Set(files.map((f) => f.name.toLowerCase()));\n \n // Detect existing static files\n for (const file of STATIC_FILES) {\n if (files.some((f) => f.name.toLowerCase() === file.toLowerCase())) {\n detected.existingFiles!.push(file);\n }\n }\n \n // CI/CD detection\n if (fileNames.has(\".gitlab-ci.yml\")) detected.cicd = \"gitlab_ci\";\n if (fileNames.has(\"jenkinsfile\")) detected.cicd = \"jenkins\";\n \n // Check for Docker and detect container registry\n if (fileNames.has(\"dockerfile\") || fileNames.has(\"docker-compose.yml\") || fileNames.has(\"docker-compose.yaml\")) {\n detected.hasDocker = true;\n detected.stack.push(\"docker\");\n \n // Try to detect container registry from docker-compose\n const dockerComposeFile = fileNames.has(\"docker-compose.yml\") ? \"docker-compose.yml\" : fileNames.has(\"docker-compose.yaml\") ? \"docker-compose.yaml\" : null;\n if (dockerComposeFile) {\n const composeRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/files/${encodeURIComponent(dockerComposeFile)}/raw?ref=HEAD`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (composeRes.ok) {\n try {\n const content = await composeRes.text();\n const lowerContent = content.toLowerCase();\n \n // Detect container registry\n if (content.includes(\"registry.gitlab.com\")) detected.containerRegistry = \"gitlab_registry\";\n else if (content.includes(\"ghcr.io\")) detected.containerRegistry = \"ghcr\";\n else if (content.includes(\"docker.io\") || /image:\\s*[a-z0-9]+\\/[a-z0-9]/.test(content)) detected.containerRegistry = \"dockerhub\";\n else if (content.includes(\"gcr.io\")) detected.containerRegistry = \"gcr\";\n \n // Detect databases from docker-compose\n if (lowerContent.includes(\"postgres\")) detected.databases.push(\"postgresql\");\n if (lowerContent.includes(\"mysql\") && !lowerContent.includes(\"mysql-\")) detected.databases.push(\"mysql\");\n if (lowerContent.includes(\"mongo\")) detected.databases.push(\"mongodb\");\n if (lowerContent.includes(\"redis\")) detected.databases.push(\"redis\");\n if (lowerContent.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n } catch { /* ignore */ }\n }\n }\n }\n \n // Detect from package.json\n if (fileNames.has(\"package.json\")) {\n const pkgRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/files/package.json/raw?ref=HEAD`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (pkgRes.ok) {\n try {\n const pkg = await pkgRes.json() as PackageJson;\n const allDeps: Record<string, string> = { ...pkg.dependencies, ...pkg.devDependencies };\n \n // Frameworks\n if (allDeps[\"next\"]) detected.stack.push(\"nextjs\");\n if (allDeps[\"react\"]) detected.stack.push(\"react\");\n if (allDeps[\"vue\"]) detected.stack.push(\"vue\");\n if (allDeps[\"svelte\"]) detected.stack.push(\"svelte\");\n if (allDeps[\"express\"]) detected.stack.push(\"express\");\n if (allDeps[\"fastify\"]) detected.stack.push(\"fastify\");\n \n // Tools\n if (allDeps[\"typescript\"]) detected.stack.push(\"typescript\");\n if (allDeps[\"tailwindcss\"]) detected.stack.push(\"tailwind\");\n if (allDeps[\"prisma\"]) detected.stack.push(\"prisma\");\n \n // Test frameworks\n if (allDeps[\"vitest\"]) detected.testFramework = \"vitest\";\n else if (allDeps[\"jest\"]) detected.testFramework = \"jest\";\n else if (allDeps[\"@playwright/test\"]) detected.testFramework = \"playwright\";\n \n if (detected.stack.length === 0 || (detected.stack.length === 1 && detected.stack[0] === \"typescript\")) {\n detected.stack.unshift(\"javascript\");\n }\n \n if (pkg.scripts) {\n if (pkg.scripts.build) detected.commands.build = \"npm run build\";\n if (pkg.scripts.test) detected.commands.test = \"npm run test\";\n if (pkg.scripts.lint) detected.commands.lint = \"npm run lint\";\n if (pkg.scripts.dev) detected.commands.dev = \"npm run dev\";\n }\n \n // Detect databases from Node.js packages\n if (allDeps[\"pg\"] || allDeps[\"postgres\"]) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (allDeps[\"better-sqlite3\"] || allDeps[\"sqlite3\"]) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (allDeps[\"mongodb\"] || allDeps[\"mongoose\"]) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n if (allDeps[\"redis\"] || allDeps[\"ioredis\"]) {\n if (!detected.databases.includes(\"redis\")) detected.databases.push(\"redis\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect from pyproject.toml or requirements.txt (Python)\n if (fileNames.has(\"pyproject.toml\")) {\n detected.stack.push(\"python\");\n const pyRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/files/pyproject.toml/raw?ref=HEAD`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (pyRes.ok) {\n try {\n const content = (await pyRes.text()).toLowerCase();\n if (content.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.includes(\"django\")) detected.stack.push(\"django\");\n if (content.includes(\"flask\")) detected.stack.push(\"flask\");\n if (content.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n if (content.includes(\"pytest\")) detected.testFramework = \"pytest\";\n \n // Detect databases\n if (content.includes(\"asyncpg\") || content.includes(\"psycopg\")) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (content.includes(\"aiosqlite\") || content.includes(\"sqlite\")) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n } catch { /* ignore */ }\n }\n } else if (fileNames.has(\"requirements.txt\")) {\n detected.stack.push(\"python\");\n }\n \n // Detect other languages\n if (fileNames.has(\"cargo.toml\")) {\n detected.stack.push(\"rust\");\n detected.commands.build = \"cargo build\";\n detected.commands.test = \"cargo test\";\n }\n if (fileNames.has(\"go.mod\")) {\n detected.stack.push(\"go\");\n detected.commands.build = \"go build\";\n detected.commands.test = \"go test ./...\";\n }\n \n return detected;\n } catch {\n return null;\n }\n}\n\n/**\n * Validate git URL to prevent command injection\n * Only allows http(s), git, and ssh protocols\n */\nfunction isValidGitUrl(url: string): boolean {\n const trimmed = url.trim();\n // Allow standard git URL formats\n if (trimmed.startsWith(\"https://\") || trimmed.startsWith(\"http://\") ||\n trimmed.startsWith(\"git://\") || trimmed.startsWith(\"git@\") ||\n trimmed.startsWith(\"ssh://\")) {\n // Additional validation: no shell metacharacters\n const dangerousChars = /[;&|`$(){}[\\]<>\\\\'\"!#*?~]/;\n return !dangerousChars.test(trimmed);\n }\n return false;\n}\n\n/**\n * Detect from shallow git clone (fallback for non-GitHub/GitLab hosts)\n */\nasync function detectFromShallowClone(repoUrl: string): Promise<DetectedProject | null> {\n let tempDir: string | null = null;\n \n // Security: Validate URL before passing to git\n if (!isValidGitUrl(repoUrl)) {\n return null;\n }\n \n try {\n tempDir = await mkdtemp(join(tmpdir(), \"lynxprompt-detect-\"));\n \n try {\n // Security: Use spawnSync with array arguments to prevent command injection\n // This passes arguments directly to git without shell interpretation\n const result = spawnSync(\"git\", [\"clone\", \"--depth\", \"1\", \"--quiet\", repoUrl, tempDir], {\n stdio: \"pipe\",\n timeout: 30000,\n });\n \n if (result.status !== 0) {\n return null;\n }\n } catch {\n return null;\n }\n \n const detected = await detectProject(tempDir);\n \n if (detected) {\n detected.repoHost = detectRepoHost(repoUrl);\n detected.repoUrl = repoUrl;\n }\n \n return detected;\n } catch {\n return null;\n } finally {\n if (tempDir) {\n try {\n await rm(tempDir, { recursive: true, force: true });\n } catch { /* ignore */ }\n }\n }\n}\n\n/**\n * Detect project info from a remote Git URL\n * Strategy: Try API first (GitHub/GitLab), fallback to shallow clone\n */\nexport async function detectFromRemoteUrl(repoUrl: string): Promise<DetectedProject | null> {\n const host = detectRepoHost(repoUrl);\n \n // Try API-based detection first (faster)\n if (host === \"github\") {\n const result = await detectFromGitHubApi(repoUrl);\n if (result) return result;\n }\n \n if (host === \"gitlab\") {\n const result = await detectFromGitLabApi(repoUrl);\n if (result) return result;\n }\n \n // Fallback to shallow clone for other hosts or if API fails\n return detectFromShallowClone(repoUrl);\n}\n\n/**\n * Check if a string looks like a Git URL\n */\nexport function isGitUrl(str: string): boolean {\n const patterns = [\n /^https?:\\/\\/[^/]+\\/.*$/,\n /^git@[^:]+:.*$/,\n /^git:\\/\\/.*$/,\n /^ssh:\\/\\/.*$/,\n ];\n return patterns.some(p => p.test(str.trim()));\n}\n\n// ═══════════════════════════════════════════════════════════════\n// AI AGENT COMMAND DETECTION\n// ═══════════════════════════════════════════════════════════════\n\n/**\n * Command file definition for AI IDE slash commands\n */\nexport interface CommandFileInfo {\n /** Full path to the command file */\n path: string;\n /** Filename without extension */\n name: string;\n /** Command type (cursor-command, claude-command, windsurf-workflow, etc.) */\n type: \"cursor-command\" | \"claude-command\" | \"windsurf-workflow\" | \"copilot-prompt\" | \"continue-prompt\" | \"opencode-command\";\n /** Content of the command file */\n content: string;\n /** IDE platform this command belongs to */\n platform: \"cursor\" | \"claude\" | \"windsurf\" | \"copilot\" | \"continue\" | \"opencode\";\n /** Template type for database storage */\n templateType: \"CURSOR_COMMAND\" | \"CLAUDE_COMMAND\" | \"WINDSURF_WORKFLOW\" | \"COPILOT_PROMPT\" | \"CONTINUE_PROMPT\" | \"OPENCODE_COMMAND\";\n}\n\n/**\n * Known command directories for various AI IDEs\n * \n * All commands are markdown files - conversion between formats is just renaming/moving.\n * The content is plain markdown text, no special format required.\n */\nconst COMMAND_DIRECTORIES = [\n { directory: \".cursor/commands\", type: \"cursor-command\" as const, platform: \"cursor\" as const, templateType: \"CURSOR_COMMAND\" as const },\n { directory: \".claude/commands\", type: \"claude-command\" as const, platform: \"claude\" as const, templateType: \"CLAUDE_COMMAND\" as const },\n { directory: \".windsurf/workflows\", type: \"windsurf-workflow\" as const, platform: \"windsurf\" as const, templateType: \"WINDSURF_WORKFLOW\" as const },\n { directory: \".copilot/prompts\", type: \"copilot-prompt\" as const, platform: \"copilot\" as const, templateType: \"COPILOT_PROMPT\" as const },\n { directory: \".continue/prompts\", type: \"continue-prompt\" as const, platform: \"continue\" as const, templateType: \"CONTINUE_PROMPT\" as const },\n { directory: \".opencode/commands\", type: \"opencode-command\" as const, platform: \"opencode\" as const, templateType: \"OPENCODE_COMMAND\" as const },\n];\n\n/**\n * Detect command files in a directory\n * Scans known command directories for AI IDE slash commands\n */\nexport async function detectCommandFiles(cwd: string): Promise<CommandFileInfo[]> {\n const commands: CommandFileInfo[] = [];\n const { readdir, readFile: readFileAsync } = await import(\"fs/promises\");\n \n for (const cmdDir of COMMAND_DIRECTORIES) {\n const dirPath = join(cwd, cmdDir.directory);\n \n try {\n await access(dirPath);\n const entries = await readdir(dirPath, { withFileTypes: true });\n \n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".md\")) {\n const filePath = join(dirPath, entry.name);\n try {\n const content = await readFileAsync(filePath, \"utf-8\");\n const name = entry.name.replace(/\\.md$/, \"\");\n \n commands.push({\n path: filePath,\n name,\n type: cmdDir.type,\n content,\n platform: cmdDir.platform,\n templateType: cmdDir.templateType,\n });\n } catch {\n // Skip files we can't read\n }\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n \n return commands;\n}\n\n/**\n * Detect if a file path is a command file\n */\nexport function isCommandFilePath(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n return COMMAND_DIRECTORIES.some(cmd => normalizedPath.includes(cmd.directory));\n}\n\n/**\n * Infer command type from file path\n */\nexport function inferCommandTypeFromPath(filePath: string): { type: string; platform: string; templateType: string } | null {\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n const match = COMMAND_DIRECTORIES.find(cmd => normalizedPath.includes(cmd.directory));\n \n if (match) {\n return {\n type: match.type,\n platform: match.platform,\n templateType: match.templateType,\n };\n }\n \n return null;\n}\n\n/**\n * Get command directories to scan\n */\nexport function getCommandDirectories(): { directory: string; type: string; platform: string; templateType: string }[] {\n return COMMAND_DIRECTORIES;\n}\n\n/**\n * Convert a command from one IDE format to another\n * Currently both Cursor and Claude Code use markdown, so this is mostly about file placement\n */\nexport function convertCommandFormat(\n content: string,\n _fromType: string,\n toType: string\n): { content: string; directory: string; extension: string } {\n const targetDir = COMMAND_DIRECTORIES.find(d => d.type === toType);\n if (!targetDir) {\n throw new Error(`Unknown command type: ${toType}`);\n }\n \n // Both formats use markdown, so content stays the same\n // Future: if formats diverge, add conversion logic here\n return {\n content,\n directory: targetDir.directory,\n extension: \".md\",\n };\n}\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport ora from \"ora\";\nimport * as readline from \"readline\";\nimport * as os from \"os\";\nimport { writeFile, mkdir, access, readFile } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { detectProject, detectFromRemoteUrl, isGitUrl } from \"../utils/detect.js\";\nimport { generateConfig, GenerateOptions, parseVariablesString } from \"../utils/generator.js\";\nimport { isAuthenticated, getUser } from \"../config.js\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport {\n LANGUAGES as SHARED_LANGUAGES,\n FRAMEWORKS as SHARED_FRAMEWORKS,\n DATABASES as SHARED_DATABASES,\n TEST_FRAMEWORKS as SHARED_TEST_FRAMEWORKS,\n} from \"../utils/wizard-options.js\";\n\n// Draft management - local storage in .lynxprompt/drafts/\nconst DRAFTS_DIR = \".lynxprompt/drafts\";\n\n// CLI version injected at build time via tsup.config.ts\n// Falls back to \"unknown\" if not defined (shouldn't happen in production builds)\nconst CLI_VERSION: string = process.env.CLI_VERSION || \"unknown\";\n\ninterface WizardDraft {\n name: string;\n savedAt: string;\n config: Record<string, unknown>;\n stepReached?: number;\n // Version tracking - added to detect draft/tool version mismatches\n source: \"cli\" | \"web\";\n version: string;\n}\n\nasync function saveDraftLocally(name: string, config: Record<string, unknown>, stepReached?: number): Promise<void> {\n const draftsPath = join(process.cwd(), DRAFTS_DIR);\n await mkdir(draftsPath, { recursive: true });\n \n const draft: WizardDraft = {\n name,\n savedAt: new Date().toISOString(),\n config,\n stepReached,\n source: \"cli\",\n version: CLI_VERSION,\n };\n \n const filename = `${name.replace(/[^a-zA-Z0-9-_]/g, \"_\")}.json`;\n await writeFile(join(draftsPath, filename), JSON.stringify(draft, null, 2), \"utf-8\");\n}\n\nasync function loadDraftLocally(name: string): Promise<WizardDraft | null> {\n try {\n const filename = `${name.replace(/[^a-zA-Z0-9-_]/g, \"_\")}.json`;\n const filepath = join(process.cwd(), DRAFTS_DIR, filename);\n const content = await readFile(filepath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nasync function listLocalDrafts(): Promise<string[]> {\n try {\n const draftsPath = join(process.cwd(), DRAFTS_DIR);\n await access(draftsPath);\n const files = await import(\"fs/promises\").then(fs => fs.readdir(draftsPath));\n return files\n .filter(f => f.endsWith(\".json\"))\n .map(f => f.replace(\".json\", \"\"));\n } catch {\n return [];\n }\n}\n\n// File paths for static files detection\nconst STATIC_FILE_PATHS: Record<string, string> = {\n editorconfig: \".editorconfig\",\n contributing: \"CONTRIBUTING.md\",\n codeOfConduct: \"CODE_OF_CONDUCT.md\",\n security: \"SECURITY.md\",\n roadmap: \"ROADMAP.md\",\n gitignore: \".gitignore\",\n funding: \".github/FUNDING.yml\",\n license: \"LICENSE\",\n readme: \"README.md\",\n architecture: \"ARCHITECTURE.md\",\n changelog: \"CHANGELOG.md\",\n};\n\n// Check if a file exists and read its content\nasync function readExistingFile(filePath: string): Promise<string | null> {\n try {\n await access(filePath);\n const content = await readFile(filePath, \"utf-8\");\n return content;\n } catch {\n return null;\n }\n}\n\n// Multi-line input reader using EOF terminator\nasync function readMultilineInput(prompt: string): Promise<string> {\n console.log(chalk.white(prompt));\n console.log(chalk.gray(\" (Paste your content, then type EOF on a new line and press Enter to finish)\"));\n console.log(chalk.gray(\" (Press Enter twice to skip)\"));\n console.log();\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const lines: string[] = [];\n let emptyLineCount = 0;\n\n rl.on(\"line\", (line) => {\n if (line.trim() === \"EOF\") {\n rl.close();\n resolve(lines.join(\"\\n\"));\n return;\n }\n \n if (line === \"\") {\n emptyLineCount++;\n if (emptyLineCount >= 2 && lines.length === 0) {\n // Two empty lines at start = skip\n rl.close();\n resolve(\"\");\n return;\n }\n } else {\n emptyLineCount = 0;\n }\n \n lines.push(line);\n });\n\n rl.on(\"close\", () => {\n resolve(lines.join(\"\\n\"));\n });\n });\n}\n\ninterface WizardOptions {\n name?: string;\n description?: string;\n stack?: string;\n platforms?: string;\n format?: string;\n persona?: string;\n boundaries?: string;\n preset?: string;\n yes?: boolean;\n // New options\n output?: string;\n repoUrl?: string;\n blueprint?: boolean;\n license?: string;\n ciCd?: string;\n projectType?: string;\n detectOnly?: boolean;\n loadDraft?: string;\n saveDraft?: string;\n vars?: string;\n // Internal: for resuming from a draft\n _resumeFromStep?: number;\n _draftAnswers?: Record<string, unknown>;\n}\n\ninterface WizardStep {\n id: string;\n title: string;\n icon: string;\n}\n\n// All 12 wizard steps — available to all users\nconst WIZARD_STEPS: WizardStep[] = [\n { id: \"format\", title: \"Output Format\", icon: \"📤\" },\n { id: \"project\", title: \"Project Basics\", icon: \"✨\" },\n { id: \"tech\", title: \"Tech Stack\", icon: \"💻\" },\n { id: \"repo\", title: \"Repository Setup\", icon: \"🔀\" },\n { id: \"security\", title: \"Security\", icon: \"🔐\" },\n { id: \"commands\", title: \"Commands\", icon: \"📋\" },\n { id: \"code_style\", title: \"Code Style\", icon: \"🪄\" },\n { id: \"ai\", title: \"AI Behavior\", icon: \"🧠\" },\n { id: \"boundaries\", title: \"Boundaries\", icon: \"🛡️\" },\n { id: \"testing\", title: \"Testing Strategy\", icon: \"🧪\" },\n { id: \"static\", title: \"Static Files\", icon: \"📄\" },\n { id: \"extra\", title: \"Final Details\", icon: \"💬\" },\n];\n\n/**\n * All supported platforms (30+ and growing!)\n * \n * IMPORTANT: Keep in sync with src/lib/platforms.ts (the single source of truth)\n * When adding new platforms, update both files!\n */\nconst ALL_PLATFORMS = [\n // Popular platforms\n { id: \"universal\", name: \"Universal (AGENTS.md)\", file: \"AGENTS.md\", icon: \"🌐\", note: \"Works with Claude Code, Copilot, Aider, and many others\" },\n { id: \"cursor\", name: \"Cursor\", file: \".cursor/rules/\", icon: \"⚡\", note: \"AI-powered code editor with native rules\" },\n { id: \"claude\", name: \"Claude Code\", file: \"CLAUDE.md\", icon: \"🧠\", note: \"Anthropic's agentic coding tool\" },\n { id: \"copilot\", name: \"GitHub Copilot\", file: \".github/copilot-instructions.md\", icon: \"🐙\", note: \"GitHub's AI pair programmer\" },\n { id: \"windsurf\", name: \"Windsurf\", file: \".windsurfrules\", icon: \"🏄\", note: \"Codeium's AI-native IDE\" },\n // AI IDEs\n { id: \"antigravity\", name: \"Antigravity\", file: \"GEMINI.md\", icon: \"💎\", note: \"Google's Gemini-powered IDE\" },\n { id: \"zed\", name: \"Zed\", file: \".zed/instructions.md\", icon: \"⚡\", note: \"High-performance editor with AI\" },\n { id: \"void\", name: \"Void\", file: \".void/config.json\", icon: \"🕳️\", note: \"Open-source Cursor alternative\" },\n { id: \"trae\", name: \"Trae AI\", file: \".trae/rules/\", icon: \"🔷\", note: \"ByteDance's AI IDE\" },\n { id: \"firebase\", name: \"Firebase Studio\", file: \".idx/\", icon: \"🔥\", note: \"Google's cloud IDE\" },\n // Editor extensions\n { id: \"cline\", name: \"Cline\", file: \".clinerules\", icon: \"🔧\", note: \"Autonomous coding agent for VS Code\" },\n { id: \"roocode\", name: \"Roo Code\", file: \".roo/rules/\", icon: \"🦘\", note: \"AI coding assistant for VS Code\" },\n { id: \"continue\", name: \"Continue\", file: \".continue/config.json\", icon: \"➡️\", note: \"Open-source AI autopilot\" },\n { id: \"cody\", name: \"Sourcegraph Cody\", file: \".cody/config.json\", icon: \"🔍\", note: \"Context-aware AI assistant\" },\n { id: \"tabnine\", name: \"Tabnine\", file: \".tabnine.yaml\", icon: \"📝\", note: \"AI code completion\" },\n { id: \"supermaven\", name: \"Supermaven\", file: \".supermaven/config.json\", icon: \"🦸\", note: \"Fast AI code completions\" },\n { id: \"codegpt\", name: \"CodeGPT\", file: \".codegpt/config.json\", icon: \"💬\", note: \"VS Code AI assistant\" },\n { id: \"amazonq\", name: \"Amazon Q\", file: \".amazonq/rules/\", icon: \"📦\", note: \"AWS AI coding companion\" },\n { id: \"augment\", name: \"Augment Code\", file: \".augment/rules/\", icon: \"🔮\", note: \"AI code augmentation\" },\n { id: \"kilocode\", name: \"Kilo Code\", file: \".kilocode/rules/\", icon: \"📊\", note: \"AI code generation\" },\n { id: \"junie\", name: \"Junie\", file: \".junie/guidelines.md\", icon: \"🎯\", note: \"JetBrains AI assistant\" },\n { id: \"kiro\", name: \"Kiro\", file: \".kiro/steering/\", icon: \"🚀\", note: \"AWS spec-driven agent\" },\n // CLI tools\n { id: \"aider\", name: \"Aider\", file: \"AIDER.md\", icon: \"🤖\", note: \"AI pair programming in terminal\" },\n { id: \"goose\", name: \"Goose\", file: \".goosehints\", icon: \"🪿\", note: \"Block's AI coding agent\" },\n { id: \"warp\", name: \"Warp AI\", file: \"WARP.md\", icon: \"🚀\", note: \"AI-powered terminal\" },\n { id: \"gemini-cli\", name: \"Gemini CLI\", file: \"GEMINI.md\", icon: \"💎\", note: \"Google's Gemini in terminal\" },\n { id: \"opencode\", name: \"Open Code\", file: \"opencode.json\", icon: \"🔓\", note: \"Open-source AI coding\" },\n // Other\n { id: \"openhands\", name: \"OpenHands\", file: \".openhands/microagents/repo.md\", icon: \"🤲\", note: \"Open-source AI agent\" },\n { id: \"crush\", name: \"Crush\", file: \"CRUSH.md\", icon: \"💥\", note: \"AI coding assistant\" },\n { id: \"firebender\", name: \"Firebender\", file: \"firebender.json\", icon: \"🔥\", note: \"AI code transformation\" },\n];\n\n\n// Languages, frameworks, and databases imported from shared package (wizard-options.ts)\nconst LANGUAGES = SHARED_LANGUAGES;\nconst FRAMEWORKS = SHARED_FRAMEWORKS;\nconst DATABASES = SHARED_DATABASES;\n\n// Package managers (JS/TS only)\nconst PACKAGE_MANAGERS = [\n { title: \"📦 npm\", value: \"npm\", desc: \"Node Package Manager (default)\" },\n { title: \"🧶 Yarn\", value: \"yarn\", desc: \"Fast, reliable, and secure\" },\n { title: \"📀 pnpm\", value: \"pnpm\", desc: \"Fast, disk space efficient\" },\n { title: \"🥟 Bun\", value: \"bun\", desc: \"All-in-one JS runtime + PM\" },\n];\n\n// JS/TS Runtimes\nconst JS_RUNTIMES = [\n { title: \"🟢 Node.js\", value: \"node\", desc: \"Standard JavaScript runtime\" },\n { title: \"🦕 Deno\", value: \"deno\", desc: \"Secure runtime with TypeScript\" },\n { title: \"🥟 Bun\", value: \"bun\", desc: \"Fast all-in-one JS runtime\" },\n];\n\n// Monorepo tools\nconst MONOREPO_TOOLS = [\n { title: \"📁 None\", value: \"\", desc: \"Single package repository\" },\n { title: \"⚡ Turborepo\", value: \"turborepo\", desc: \"High-performance build system\" },\n { title: \"🔷 Nx\", value: \"nx\", desc: \"Smart, extensible build framework\" },\n { title: \"🐉 Lerna\", value: \"lerna\", desc: \"Multi-package repositories\" },\n { title: \"📀 pnpm Workspaces\", value: \"pnpm_workspaces\", desc: \"Native pnpm monorepo\" },\n { title: \"🧶 Yarn Workspaces\", value: \"yarn_workspaces\", desc: \"Native Yarn monorepo\" },\n { title: \"📦 npm Workspaces\", value: \"npm_workspaces\", desc: \"Native npm monorepo\" },\n];\n\n// ORMs by language\nconst ORM_OPTIONS = [\n { title: \"📝 None / Raw SQL\", value: \"\", langs: [] },\n // JavaScript/TypeScript\n { title: \"🔷 Prisma\", value: \"prisma\", langs: [\"javascript\", \"typescript\"] },\n { title: \"💧 Drizzle\", value: \"drizzle\", langs: [\"javascript\", \"typescript\"] },\n { title: \"🔶 TypeORM\", value: \"typeorm\", langs: [\"javascript\", \"typescript\"] },\n { title: \"📘 Sequelize\", value: \"sequelize\", langs: [\"javascript\", \"typescript\"] },\n { title: \"🔧 Knex.js\", value: \"knex\", langs: [\"javascript\", \"typescript\"] },\n { title: \"🎯 Kysely\", value: \"kysely\", langs: [\"javascript\", \"typescript\"] },\n // Python\n { title: \"🐍 SQLAlchemy\", value: \"sqlalchemy\", langs: [\"python\"] },\n { title: \"🎸 Django ORM\", value: \"django_orm\", langs: [\"python\"] },\n { title: \"🐢 Tortoise ORM\", value: \"tortoise\", langs: [\"python\"] },\n { title: \"⚡ SQLModel\", value: \"sqlmodel\", langs: [\"python\"] },\n // Go\n { title: \"🐹 GORM\", value: \"gorm\", langs: [\"go\"] },\n { title: \"🏗️ Ent\", value: \"ent\", langs: [\"go\"] },\n { title: \"📝 sqlc\", value: \"sqlc\", langs: [\"go\"] },\n // Rust\n { title: \"🦀 Diesel\", value: \"diesel\", langs: [\"rust\"] },\n { title: \"🌊 SeaORM\", value: \"sea-orm\", langs: [\"rust\"] },\n { title: \"📦 SQLx\", value: \"sqlx\", langs: [\"rust\"] },\n // Java/Kotlin\n { title: \"☕ Hibernate\", value: \"hibernate\", langs: [\"java\", \"kotlin\"] },\n { title: \"🎵 jOOQ\", value: \"jooq\", langs: [\"java\", \"kotlin\"] },\n // .NET\n { title: \"🔷 Entity Framework\", value: \"ef_core\", langs: [\"csharp\"] },\n { title: \"⚡ Dapper\", value: \"dapper\", langs: [\"csharp\"] },\n // Ruby\n { title: \"💎 ActiveRecord\", value: \"activerecord\", langs: [\"ruby\"] },\n // PHP\n { title: \"🐘 Eloquent\", value: \"eloquent\", langs: [\"php\"] },\n { title: \"📖 Doctrine\", value: \"doctrine\", langs: [\"php\"] },\n];\n\n// Repository hosts\nconst REPO_HOSTS = [\n { id: \"github\", label: \"GitHub\", icon: \"🐙\" },\n { id: \"gitlab\", label: \"GitLab\", icon: \"🦊\" },\n { id: \"bitbucket\", label: \"Bitbucket\", icon: \"🪣\" },\n { id: \"gitea\", label: \"Gitea\", icon: \"🍵\" },\n { id: \"azure\", label: \"Azure DevOps\", icon: \"☁️\" },\n { id: \"other\", label: \"Other\", icon: \"📦\" },\n];\n\n// Licenses\nconst LICENSES = [\n { id: \"mit\", label: \"MIT\" },\n { id: \"apache-2.0\", label: \"Apache 2.0\" },\n { id: \"gpl-3.0\", label: \"GPL 3.0\" },\n { id: \"lgpl-3.0\", label: \"LGPL 3.0\" },\n { id: \"agpl-3.0\", label: \"AGPL 3.0\" },\n { id: \"bsd-3\", label: \"BSD 3-Clause\" },\n { id: \"mpl-2.0\", label: \"MPL 2.0\" },\n { id: \"unlicense\", label: \"Unlicense\" },\n { id: \"none\", label: \"None / Proprietary\" },\n];\n\n// CI/CD platforms\nconst CICD_OPTIONS = [\n { id: \"github_actions\", label: \"GitHub Actions\", icon: \"🐙\" },\n { id: \"gitlab_ci\", label: \"GitLab CI\", icon: \"🦊\" },\n { id: \"jenkins\", label: \"Jenkins\", icon: \"🔧\" },\n { id: \"circleci\", label: \"CircleCI\", icon: \"⚫\" },\n { id: \"travis\", label: \"Travis CI\", icon: \"🔨\" },\n { id: \"azure_devops\", label: \"Azure DevOps\", icon: \"☁️\" },\n { id: \"bitbucket\", label: \"Bitbucket Pipelines\", icon: \"🪣\" },\n { id: \"teamcity\", label: \"TeamCity\", icon: \"🏢\" },\n { id: \"drone\", label: \"Drone\", icon: \"🚁\" },\n { id: \"buildkite\", label: \"Buildkite\", icon: \"🧱\" },\n { id: \"concourse\", label: \"Concourse\", icon: \"✈️\" },\n { id: \"woodpecker\", label: \"Woodpecker\", icon: \"🐦\" },\n { id: \"argocd\", label: \"ArgoCD\", icon: \"🐙\" },\n { id: \"fluxcd\", label: \"FluxCD\", icon: \"🔄\" },\n { id: \"none\", label: \"None / Manual\", icon: \"🔧\" },\n { id: \"other\", label: \"Other\", icon: \"📦\" },\n];\n\n// Cloud deployment targets\nconst CLOUD_TARGETS = [\n { id: \"vercel\", label: \"Vercel\", icon: \"▲ \" },\n { id: \"netlify\", label: \"Netlify\", icon: \"🌐\" },\n { id: \"cloudflare_pages\", label: \"Cloudflare Pages\", icon: \"🔶\" },\n { id: \"cloudflare_workers\", label: \"Cloudflare Workers\", icon: \"🔶\" },\n { id: \"aws_lambda\", label: \"AWS Lambda\", icon: \"☁️ \" },\n { id: \"aws_ecs\", label: \"AWS ECS\", icon: \"☁️ \" },\n { id: \"aws_ec2\", label: \"AWS EC2\", icon: \"☁️ \" },\n { id: \"gcp_cloudrun\", label: \"GCP Cloud Run\", icon: \"🌈\" },\n { id: \"gcp_appengine\", label: \"GCP App Engine\", icon: \"🌈\" },\n { id: \"azure_appservice\", label: \"Azure App Service\", icon: \"🔷\" },\n { id: \"azure_functions\", label: \"Azure Functions\", icon: \"🔷\" },\n { id: \"railway\", label: \"Railway\", icon: \"🚂\" },\n { id: \"render\", label: \"Render\", icon: \"🎨\" },\n { id: \"fly\", label: \"Fly.io\", icon: \"✈️ \" },\n { id: \"heroku\", label: \"Heroku\", icon: \"🟣\" },\n { id: \"digitalocean_app\", label: \"DigitalOcean App Platform\", icon: \"🔵\" },\n { id: \"deno_deploy\", label: \"Deno Deploy\", icon: \"🦕\" },\n];\n\n// Self-hosted deployment targets\nconst SELF_HOSTED_TARGETS = [\n { id: \"docker\", label: \"Docker\", icon: \"🐳\" },\n { id: \"docker_compose\", label: \"Docker Compose\", icon: \"🐳\" },\n { id: \"kubernetes\", label: \"Kubernetes\", icon: \"☸️ \" },\n { id: \"k3s\", label: \"K3s\", icon: \"☸️ \" },\n { id: \"podman\", label: \"Podman\", icon: \"🦭\" },\n { id: \"bare_metal\", label: \"Bare Metal\", icon: \"🖥️ \" },\n { id: \"vm\", label: \"Virtual Machine\", icon: \"💻\" },\n { id: \"proxmox\", label: \"Proxmox\", icon: \"🔷\" },\n { id: \"unraid\", label: \"Unraid\", icon: \"🟠\" },\n { id: \"truenas\", label: \"TrueNAS\", icon: \"🔵\" },\n { id: \"synology\", label: \"Synology NAS\", icon: \"📁\" },\n { id: \"coolify\", label: \"Coolify\", icon: \"❄️ \" },\n { id: \"dokku\", label: \"Dokku\", icon: \"🐳\" },\n { id: \"caprover\", label: \"CapRover\", icon: \"🚢\" },\n { id: \"portainer\", label: \"Portainer\", icon: \"🐋\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\" },\n];\n\n// Container registries\nconst CONTAINER_REGISTRIES = [\n { id: \"dockerhub\", label: \"Docker Hub\", icon: \"🐳\" },\n { id: \"ghcr\", label: \"GitHub Container Registry\", icon: \"🐙\" },\n { id: \"gcr\", label: \"Google Container Registry\", icon: \"🌈\" },\n { id: \"ecr\", label: \"AWS ECR\", icon: \"☁️\" },\n { id: \"acr\", label: \"Azure Container Registry\", icon: \"🔷\" },\n { id: \"quay\", label: \"Quay.io\", icon: \"🔴\" },\n { id: \"gitlab\", label: \"GitLab Registry\", icon: \"🦊\" },\n { id: \"custom\", label: \"Custom/Self-hosted\", icon: \"🏠\" },\n];\n\n// Common commands by category - expanded to match WebUI\nconst COMMON_COMMANDS = {\n build: [\n // JavaScript/Node\n \"npm run build\", \"pnpm build\", \"yarn build\", \"bun run build\",\n \"next build\", \"vite build\", \"tsc\", \"tsc --noEmit\",\n \"esbuild\", \"rollup -c\", \"webpack\", \"parcel build\",\n // Python\n \"python setup.py build\", \"pip install -e .\", \"poetry build\", \"pdm build\", \"hatch build\",\n // Go\n \"go build\", \"go build ./...\", \"go install\",\n // Rust\n \"cargo build\", \"cargo build --release\",\n // Java/JVM\n \"mvn package\", \"mvn clean install\", \"gradle build\",\n // .NET\n \"dotnet build\", \"dotnet publish\",\n // Ruby\n \"bundle exec rake build\", \"gem build\",\n // PHP\n \"composer install\", \"composer dump-autoload\",\n // Docker\n \"docker build -t app .\", \"docker compose build\",\n // Make\n \"make\", \"make build\", \"make all\",\n ],\n test: [\n // JavaScript/Node\n \"npm test\", \"pnpm test\", \"yarn test\", \"bun test\",\n \"vitest\", \"vitest run\", \"jest\", \"jest --coverage\",\n \"mocha\", \"ava\", \"tap\",\n // E2E\n \"playwright test\", \"cypress run\", \"cypress open\",\n \"puppeteer\", \"selenium\",\n // Python\n \"pytest\", \"pytest --cov\", \"pytest -xvs\",\n \"unittest\", \"nose2\", \"hypothesis\",\n // Go\n \"go test ./...\", \"go test -v ./...\", \"go test -race ./...\",\n // Rust\n \"cargo test\", \"cargo test --release\",\n // Java/JVM\n \"mvn test\", \"gradle test\", \"mvn verify\",\n // .NET\n \"dotnet test\",\n // Ruby\n \"bundle exec rspec\", \"rake test\",\n // PHP\n \"phpunit\", \"pest\",\n // Docker\n \"docker compose run test\",\n ],\n lint: [\n // JavaScript/Node\n \"npm run lint\", \"pnpm lint\", \"eslint .\", \"eslint . --fix\",\n \"prettier --check .\", \"prettier --write .\",\n \"biome check\", \"biome check --apply\",\n // Python\n \"ruff check\", \"ruff check --fix\", \"ruff format\",\n \"black .\", \"black --check .\",\n \"flake8\", \"pylint\", \"mypy .\",\n // Go\n \"golangci-lint run\", \"go fmt ./...\", \"go vet ./...\",\n // Rust\n \"cargo clippy\", \"cargo fmt\", \"cargo fmt --check\",\n // Java\n \"mvn checkstyle:check\", \"gradle spotlessCheck\",\n // Ruby\n \"rubocop\", \"rubocop -a\",\n // PHP\n \"php-cs-fixer fix\", \"phpcs\", \"phpstan analyse\",\n // General\n \"pre-commit run --all-files\",\n ],\n dev: [\n // JavaScript/Node\n \"npm run dev\", \"pnpm dev\", \"yarn dev\", \"bun run dev\",\n \"next dev\", \"vite\", \"vite dev\",\n \"nodemon\", \"ts-node-dev\",\n // Python\n \"uvicorn main:app --reload\", \"flask run\", \"python manage.py runserver\",\n \"gunicorn --reload\", \"hypercorn --reload\",\n // Go\n \"go run .\", \"air\", \"reflex\",\n // Rust\n \"cargo run\", \"cargo watch -x run\",\n // Java\n \"mvn spring-boot:run\", \"gradle bootRun\",\n // .NET\n \"dotnet run\", \"dotnet watch run\",\n // Ruby\n \"rails server\", \"bundle exec rails s\",\n // PHP\n \"php artisan serve\", \"symfony server:start\",\n // Docker\n \"docker compose up\", \"docker compose up -d\",\n ],\n format: [\n // JavaScript/Node\n \"prettier --write .\", \"npm run format\", \"pnpm format\",\n \"biome format --write .\", \"dprint fmt\",\n // Python\n \"black .\", \"ruff format .\", \"isort .\", \"autopep8 --in-place -r .\",\n // Go\n \"go fmt ./...\", \"gofmt -w .\", \"goimports -w .\",\n // Rust\n \"cargo fmt\",\n // Other\n \"shfmt -w .\", \"terraform fmt -recursive\",\n ],\n typecheck: [\n // TypeScript\n \"tsc --noEmit\", \"npm run typecheck\", \"pnpm typecheck\",\n \"vue-tsc --noEmit\", \"tsc -b\",\n // Python\n \"mypy .\", \"pyright\", \"pyre check\",\n // Go\n \"go vet ./...\", \"staticcheck ./...\",\n // Rust\n \"cargo check\",\n ],\n clean: [\n // JavaScript/Node\n \"npm run clean\", \"rm -rf node_modules\", \"rm -rf dist\",\n \"rm -rf .next\", \"rm -rf build\", \"rm -rf coverage\",\n // Python\n \"rm -rf __pycache__\", \"find . -name '*.pyc' -delete\",\n // Go\n \"go clean -cache\", \"go clean -testcache\",\n // Rust\n \"cargo clean\",\n // Docker\n \"docker system prune -af\", \"docker compose down -v\",\n // Make\n \"make clean\",\n ],\n preCommit: [\n // JavaScript\n \"npx husky install\", \"pnpm dlx husky install\", \"lefthook install\",\n \"lint-staged\", \"npx lint-staged\", \"simple-git-hooks\",\n // Python\n \"pre-commit install\", \"pre-commit run --all-files\",\n ],\n additional: [\n // Database\n \"npm run db:push\", \"npm run db:migrate\", \"prisma migrate dev\",\n \"alembic upgrade head\", \"flask db upgrade\",\n \"rails db:migrate\", \"rake db:migrate\",\n // Codegen\n \"npm run codegen\", \"graphql-codegen\", \"prisma generate\",\n // Docs\n \"npm run docs\", \"mkdocs serve\", \"sphinx-build\",\n // Deploy\n \"npm run deploy\", \"vercel\", \"netlify deploy\",\n \"flyctl deploy\", \"railway up\",\n ],\n};\n\n// Naming conventions - \"Follow language conventions\" is the recommended default\nconst NAMING_CONVENTIONS = [\n { id: \"language_default\", label: \"Follow language conventions\", desc: \"Use idiomatic style (recommended)\" },\n { id: \"camelCase\", label: \"camelCase\", desc: \"JavaScript, TypeScript, Java\" },\n { id: \"snake_case\", label: \"snake_case\", desc: \"Python, Ruby, Rust, Go\" },\n { id: \"PascalCase\", label: \"PascalCase\", desc: \"C#, .NET classes\" },\n { id: \"kebab-case\", label: \"kebab-case\", desc: \"CSS, HTML, URLs\" },\n];\n\n// Error handling patterns\nconst ERROR_PATTERNS = [\n { id: \"try_catch\", label: \"try/catch blocks\" },\n { id: \"result_types\", label: \"Result/Either types\" },\n { id: \"error_codes\", label: \"Error codes\" },\n { id: \"exceptions\", label: \"Custom exceptions\" },\n { id: \"other\", label: \"Other\" },\n];\n\n// Logging conventions - matching WebUI\nconst LOGGING_OPTIONS = [\n { id: \"structured_json\", label: \"Structured JSON\" },\n { id: \"console_log\", label: \"Console.log (dev)\" },\n { id: \"log_levels\", label: \"Log Levels (debug/info/warn/error)\" },\n { id: \"pino\", label: \"Pino\" },\n { id: \"winston\", label: \"Winston\" },\n { id: \"bunyan\", label: \"Bunyan\" },\n { id: \"python_logging\", label: \"Python logging\" },\n { id: \"log4j\", label: \"Log4j / SLF4J\" },\n { id: \"serilog\", label: \"Serilog\" },\n { id: \"opentelemetry\", label: \"OpenTelemetry\" },\n { id: \"other\", label: \"Other\" },\n];\n\n// AI Behavior rules - matching WebUI (security moved to dedicated Security step)\nconst AI_BEHAVIOR_RULES = [\n { id: \"always_debug_after_build\", label: \"Always Debug After Building\", description: \"AI should build and run code locally to verify changes work before suggesting them as complete\", recommended: true },\n { id: \"check_logs_after_build\", label: \"Check Logs After Build/Commit\", description: \"AI should review build output, test logs, and error messages to catch issues early\", recommended: true },\n { id: \"run_tests_before_commit\", label: \"Run Tests Before Commit\", description: \"AI must run the test suite and ensure all tests pass before suggesting a commit\", recommended: true },\n { id: \"follow_existing_patterns\", label: \"Follow Existing Patterns\", description: \"AI should study existing code and follow the same naming, structure, and conventions used in the codebase\", recommended: true },\n { id: \"ask_before_large_refactors\", label: \"Ask Before Large Refactors\", description: \"AI should always ask for explicit approval before making significant architectural changes or refactoring multiple files\", recommended: true },\n // Burke Holland-inspired rules\n { id: \"code_for_llms\", label: \"Code for LLMs\", description: \"Optimize code for LLM reasoning: flat/explicit patterns, minimal abstractions, structured logging\" },\n { id: \"self_improving\", label: \"Self-Improving Config\", description: \"AI updates this config file when it learns new project patterns or conventions\" },\n { id: \"verify_work\", label: \"Always Verify Work\", description: \"Run tests, check builds, and confirm changes work before returning control\", recommended: true },\n { id: \"terminal_management\", label: \"Terminal Management\", description: \"Reuse existing terminals and close unused ones\" },\n { id: \"check_docs_first\", label: \"Check Docs First\", description: \"Check documentation via MCP or project docs before assuming knowledge about APIs\" },\n];\n\n// ═══════════════════════════════════════════════════════════════\n// SECURITY OPTIONS (FREE tier - new dedicated section)\n// ═══════════════════════════════════════════════════════════════\n\n// Secrets management strategies\nconst SECRETS_MANAGEMENT_OPTIONS = [\n { id: \"env_vars\", label: \"Environment Variables\", description: \"Use .env files locally, env vars in prod\", recommended: true },\n { id: \"dotenv\", label: \"dotenv / dotenvx\", description: \"Load .env files with dotenv library\" },\n { id: \"vault\", label: \"HashiCorp Vault\", description: \"Enterprise secrets management\" },\n { id: \"aws_secrets\", label: \"AWS Secrets Manager\", description: \"AWS native secrets storage\" },\n { id: \"aws_ssm\", label: \"AWS SSM Parameter Store\", description: \"AWS Systems Manager parameters\" },\n { id: \"gcp_secrets\", label: \"GCP Secret Manager\", description: \"Google Cloud secrets storage\" },\n { id: \"azure_keyvault\", label: \"Azure Key Vault\", description: \"Azure secrets and keys\" },\n { id: \"infisical\", label: \"Infisical\", description: \"Open-source secrets management\" },\n { id: \"doppler\", label: \"Doppler\", description: \"Universal secrets platform\" },\n { id: \"1password\", label: \"1Password Secrets Automation\", description: \"1Password for teams/CI\" },\n { id: \"bitwarden\", label: \"Bitwarden Secrets Manager\", description: \"Bitwarden for secrets\" },\n { id: \"sops\", label: \"SOPS (Mozilla)\", description: \"Encrypted files with KMS\" },\n { id: \"age\", label: \"age encryption\", description: \"Simple file encryption\" },\n { id: \"sealed_secrets\", label: \"Sealed Secrets (K8s)\", description: \"Kubernetes encrypted secrets\" },\n { id: \"external_secrets\", label: \"External Secrets Operator\", description: \"K8s external secrets sync\" },\n { id: \"git_crypt\", label: \"git-crypt\", description: \"Transparent file encryption in git\" },\n { id: \"chamber\", label: \"Chamber\", description: \"AWS SSM-based secrets tool\" },\n { id: \"berglas\", label: \"Berglas\", description: \"GCP secrets CLI tool\" },\n { id: \"other\", label: \"Other\", description: \"Custom secrets management\" },\n];\n\n// Security tooling (scanning, dependency updates, etc.)\nconst SECURITY_TOOLING_OPTIONS = [\n { id: \"dependabot\", label: \"Dependabot\", description: \"GitHub dependency updates\", recommended: true },\n { id: \"renovate\", label: \"Renovate\", description: \"Multi-platform dependency updates\", recommended: true },\n { id: \"snyk\", label: \"Snyk\", description: \"Vulnerability scanning & fixing\" },\n { id: \"sonarqube\", label: \"SonarQube / SonarCloud\", description: \"Code quality & security\" },\n { id: \"codeql\", label: \"CodeQL\", description: \"GitHub semantic code analysis\" },\n { id: \"semgrep\", label: \"Semgrep\", description: \"Static analysis with custom rules\" },\n { id: \"trivy\", label: \"Trivy\", description: \"Container & IaC vulnerability scanner\" },\n { id: \"grype\", label: \"Grype\", description: \"Container image vulnerability scanner\" },\n { id: \"checkov\", label: \"Checkov\", description: \"IaC security scanning\" },\n { id: \"tfsec\", label: \"tfsec\", description: \"Terraform security scanner\" },\n { id: \"kics\", label: \"KICS\", description: \"IaC security scanning\" },\n { id: \"gitleaks\", label: \"Gitleaks\", description: \"Secret detection in git repos\" },\n { id: \"trufflehog\", label: \"TruffleHog\", description: \"Secret scanning in code\" },\n { id: \"detect_secrets\", label: \"detect-secrets (Yelp)\", description: \"Pre-commit secret detection\" },\n { id: \"bandit\", label: \"Bandit\", description: \"Python security linter\" },\n { id: \"brakeman\", label: \"Brakeman\", description: \"Ruby on Rails security scanner\" },\n { id: \"gosec\", label: \"gosec\", description: \"Go security checker\" },\n { id: \"npm_audit\", label: \"npm audit / yarn audit\", description: \"Node.js vulnerability check\" },\n { id: \"pip_audit\", label: \"pip-audit\", description: \"Python dependency audit\" },\n { id: \"safety\", label: \"Safety\", description: \"Python dependency checker\" },\n { id: \"bundler_audit\", label: \"bundler-audit\", description: \"Ruby gem vulnerability checker\" },\n { id: \"owasp_dependency_check\", label: \"OWASP Dependency-Check\", description: \"Known vulnerability detection\" },\n { id: \"ossf_scorecard\", label: \"OSSF Scorecard\", description: \"Open source security metrics\" },\n { id: \"socket\", label: \"Socket.dev\", description: \"Supply chain security\" },\n { id: \"mend\", label: \"Mend (WhiteSource)\", description: \"Open source security platform\" },\n { id: \"fossa\", label: \"FOSSA\", description: \"License & security compliance\" },\n { id: \"other\", label: \"Other\", description: \"Custom security tooling\" },\n];\n\n// Authentication patterns\nconst AUTH_PATTERNS_OPTIONS = [\n { id: \"oauth2\", label: \"OAuth 2.0\", description: \"Standard authorization framework\", recommended: true },\n { id: \"oidc\", label: \"OpenID Connect (OIDC)\", description: \"Identity layer on OAuth 2.0\", recommended: true },\n { id: \"jwt\", label: \"JWT (JSON Web Tokens)\", description: \"Stateless token authentication\" },\n { id: \"session\", label: \"Session-based Auth\", description: \"Server-side session management\" },\n { id: \"api_keys\", label: \"API Keys\", description: \"Simple API authentication\" },\n { id: \"basic_auth\", label: \"Basic Authentication\", description: \"Username/password (HTTPS only)\" },\n { id: \"bearer_token\", label: \"Bearer Tokens\", description: \"Token-based API auth\" },\n { id: \"mfa_totp\", label: \"MFA / TOTP\", description: \"Multi-factor with time-based OTP\" },\n { id: \"passkeys\", label: \"Passkeys / WebAuthn\", description: \"Passwordless authentication\" },\n { id: \"saml\", label: \"SAML 2.0\", description: \"Enterprise SSO protocol\" },\n { id: \"ldap\", label: \"LDAP / Active Directory\", description: \"Directory-based auth\" },\n { id: \"mutual_tls\", label: \"Mutual TLS (mTLS)\", description: \"Certificate-based auth\" },\n { id: \"auth0\", label: \"Auth0\", description: \"Identity platform\" },\n { id: \"clerk\", label: \"Clerk\", description: \"User management platform\" },\n { id: \"firebase_auth\", label: \"Firebase Auth\", description: \"Google auth service\" },\n { id: \"supabase_auth\", label: \"Supabase Auth\", description: \"Supabase auth service\" },\n { id: \"keycloak\", label: \"Keycloak\", description: \"Open source IAM\" },\n { id: \"okta\", label: \"Okta\", description: \"Enterprise identity\" },\n { id: \"cognito\", label: \"AWS Cognito\", description: \"AWS user pools\" },\n { id: \"workos\", label: \"WorkOS\", description: \"Enterprise SSO\" },\n { id: \"other\", label: \"Other\", description: \"Custom auth pattern\" },\n];\n\n// Data handling policies\nconst DATA_HANDLING_OPTIONS = [\n { id: \"encryption_at_rest\", label: \"Encryption at Rest\", description: \"Encrypt stored data\", recommended: true },\n { id: \"encryption_in_transit\", label: \"Encryption in Transit (TLS)\", description: \"HTTPS/TLS for all connections\", recommended: true },\n { id: \"pii_handling\", label: \"PII Data Handling\", description: \"Special handling for personal data\" },\n { id: \"gdpr_compliance\", label: \"GDPR Compliance\", description: \"EU data protection rules\" },\n { id: \"ccpa_compliance\", label: \"CCPA Compliance\", description: \"California privacy law\" },\n { id: \"hipaa_compliance\", label: \"HIPAA Compliance\", description: \"Healthcare data protection\" },\n { id: \"soc2_compliance\", label: \"SOC 2 Compliance\", description: \"Service organization controls\" },\n { id: \"pci_dss\", label: \"PCI-DSS Compliance\", description: \"Payment card data security\" },\n { id: \"data_masking\", label: \"Data Masking / Anonymization\", description: \"Hide sensitive data in logs/exports\" },\n { id: \"data_retention\", label: \"Data Retention Policies\", description: \"Automatic data expiration\" },\n { id: \"audit_logging\", label: \"Audit Logging\", description: \"Track data access and changes\" },\n { id: \"backup_encryption\", label: \"Encrypted Backups\", description: \"Encrypt backup data\" },\n { id: \"key_rotation\", label: \"Key Rotation\", description: \"Regular encryption key updates\" },\n { id: \"zero_trust\", label: \"Zero Trust Architecture\", description: \"Never trust, always verify\" },\n { id: \"least_privilege\", label: \"Least Privilege Access\", description: \"Minimal permissions\" },\n { id: \"rbac\", label: \"RBAC (Role-Based Access)\", description: \"Permission by role\" },\n { id: \"abac\", label: \"ABAC (Attribute-Based Access)\", description: \"Fine-grained access control\" },\n { id: \"data_classification\", label: \"Data Classification\", description: \"Classify data sensitivity levels\" },\n { id: \"dlp\", label: \"DLP (Data Loss Prevention)\", description: \"Prevent data leakage\" },\n { id: \"other\", label: \"Other\", description: \"Custom data handling\" },\n];\n\n// Important files to read - ensure consistent spacing after icons\n// Important files AI should read first (NOT AI config files - those are what we're creating)\n// Matching WebUI wizard options\nconst IMPORTANT_FILES = [\n { id: \"readme\", label: \"README.md\", icon: \"📖\", description: \"Project overview, setup instructions, and documentation\" },\n { id: \"package_json\", label: \"package.json\", icon: \"📦\", description: \"Dependencies, scripts, and project metadata\" },\n { id: \"changelog\", label: \"CHANGELOG.md\", icon: \"📝\", description: \"Version history and release notes\" },\n { id: \"contributing\", label: \"CONTRIBUTING.md\", icon: \"🤝\", description: \"Contribution guidelines and code standards\" },\n { id: \"makefile\", label: \"Makefile\", icon: \"🔧\", description: \"Build commands and automation tasks\" },\n { id: \"dockerfile\", label: \"Dockerfile\", icon: \"🐳\", description: \"Container configuration and build steps\" },\n { id: \"docker_compose\", label: \"docker-compose.yml\", icon: \"🐳\", description: \"Multi-container setup and services\" },\n { id: \"env_example\", label: \".env.example\", icon: \"🔐\", description: \"Environment variables template\" },\n { id: \"openapi\", label: \"openapi.yaml / swagger.json\", icon: \"📡\", description: \"API specification and endpoints\" },\n { id: \"architecture_md\", label: \"ARCHITECTURE.md\", icon: \"🏗️\", description: \"System architecture and design decisions\" },\n { id: \"api_docs\", label: \"API documentation\", icon: \"📚\", description: \"API reference and usage examples\" },\n { id: \"database_schema\", label: \"Database schema / migrations\", icon: \"🗄️\", description: \"Database structure and migration files\" },\n];\n\n// Detailed boundary options\nconst BOUNDARY_OPTIONS = [\n \"Delete files\",\n \"Create new files\",\n \"Rename/move files\",\n \"Rewrite large sections\",\n \"Refactor architecture\",\n \"Change dependencies\",\n \"Modify database schema\",\n \"Update API contracts\",\n \"Touch CI pipelines\",\n \"Modify Docker config\",\n \"Change environment vars\",\n \"Update docs automatically\",\n \"Edit README\",\n \"Handle secrets/credentials\",\n \"Modify auth logic\",\n \"Delete failing tests\",\n \"Skip tests temporarily\",\n];\n\n// Testing frameworks imported from shared package (includes XCTest, Espresso, etc.)\nconst TEST_FRAMEWORKS: string[] = SHARED_TEST_FRAMEWORKS;\n\n// Test levels\nconst TEST_LEVELS = [\n { id: \"smoke\", label: \"Smoke\", desc: \"Quick sanity checks\" },\n { id: \"unit\", label: \"Unit\", desc: \"Individual functions/components\" },\n { id: \"integration\", label: \"Integration\", desc: \"Component interactions\" },\n { id: \"e2e\", label: \"E2E\", desc: \"Full user flows\" },\n];\n\n// Project types\nconst PROJECT_TYPES = [\n { id: \"work\", label: \"Work\", icon: \"💼\", description: \"Professional/enterprise project\" },\n { id: \"leisure\", label: \"Leisure\", icon: \"🎮\", description: \"Personal/hobby project\" },\n { id: \"opensource\", label: \"Open Source\", icon: \"🌍\", description: \"Community-driven project\" },\n { id: \"learning\", label: \"Learning\", icon: \"📚\", description: \"Educational/experimental\" },\n];\n\n// Development environment (OS) - can be multi-select\nconst DEV_OS_OPTIONS = [\n { id: \"macos\", label: \"macOS\", icon: \"🍎\" },\n { id: \"linux\", label: \"Linux\", icon: \"🐧\" },\n { id: \"windows\", label: \"Windows\", icon: \"🪟\" },\n { id: \"wsl\", label: \"WSL\", icon: \"🐧\" },\n { id: \"remote\", label: \"Remote/SSH\", icon: \"☁️\" },\n { id: \"devcontainer\", label: \"Dev Container\", icon: \"📦\" },\n { id: \"codespaces\", label: \"GitHub Codespaces\", icon: \"☁️\" },\n];\n\n// Detect current OS\nfunction detectCurrentOS(): string {\n const platform = os.platform();\n if (platform === \"darwin\") return \"macos\";\n if (platform === \"linux\") return \"linux\";\n if (platform === \"win32\") return \"windows\";\n return \"\";\n}\n\n// Architecture patterns\nconst ARCHITECTURE_PATTERNS = [\n { id: \"monolith\", label: \"Monolith\" },\n { id: \"microservices\", label: \"Microservices\" },\n { id: \"multi_image_docker\", label: \"Multi-Image Docker (shared codebase)\" },\n { id: \"serverless\", label: \"Serverless\" },\n { id: \"mvc\", label: \"MVC\" },\n { id: \"layered\", label: \"Layered/N-tier\" },\n { id: \"event_driven\", label: \"Event-driven\" },\n { id: \"modular\", label: \"Modular monolith\" },\n { id: \"other\", label: \"Other\" },\n];\n\n// Helper to sort choices with selected items first\ninterface Choice {\n title: string;\n value: string;\n selected?: boolean;\n description?: string;\n}\n\nfunction sortSelectedFirst<T extends Choice>(choices: T[]): T[] {\n return [...choices].sort((a, b) => {\n if (a.selected && !b.selected) return -1;\n if (!a.selected && b.selected) return 1;\n return 0;\n });\n}\n\n// AI assistant for text fields\nasync function aiAssist(instruction: string, existingContent?: string): Promise<string | null> {\n const spinner = ora(\"AI is thinking...\").start();\n \n try {\n const response = await api.aiEditBlueprint({\n content: existingContent,\n instruction,\n mode: existingContent ? \"blueprint\" : \"wizard\",\n });\n spinner.succeed(\"AI suggestion ready\");\n return response.content;\n } catch (error) {\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 403) {\n spinner.fail(\"AI editing is not available for your account\");\n } else if (error.statusCode === 429) {\n spinner.fail(\"Rate limit reached. Please wait a moment.\");\n } else {\n spinner.fail(`AI error: ${error.message}`);\n }\n } else {\n spinner.fail(\"Failed to get AI suggestion\");\n }\n return null;\n }\n}\n\n// Box drawing helper\nfunction printBox(lines: string[], color: typeof chalk.cyan = chalk.gray): void {\n const maxLen = Math.max(...lines.map(l => l.replace(/\\x1b\\[[0-9;]*m/g, \"\").length));\n const top = \"┌\" + \"─\".repeat(maxLen + 2) + \"┐\";\n const bottom = \"└\" + \"─\".repeat(maxLen + 2) + \"┘\";\n \n console.log(color(top));\n for (const line of lines) {\n const stripped = line.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n const padding = \" \".repeat(maxLen - stripped.length);\n console.log(color(\"│ \") + line + padding + color(\" │\"));\n }\n console.log(color(bottom));\n}\n\n// Step indicator with progress bar and highlighted current step\nfunction showStep(current: number, step: WizardStep): void {\n const total = WIZARD_STEPS.length;\n\n // Build progress bar with current step highlighted\n let progressBar = \"\";\n for (let i = 1; i <= total; i++) {\n if (i < current) {\n progressBar += chalk.green(\"●\"); // Completed\n } else if (i === current) {\n progressBar += chalk.cyan.bold(\"◉\"); // Current (highlighted)\n } else {\n progressBar += chalk.gray(\"○\"); // Upcoming\n }\n }\n\n console.log();\n console.log(chalk.gray(\" ═\".repeat(30)));\n console.log(` ${progressBar} ${chalk.cyan.bold(`Step ${current}/${total}`)}: ${step.icon} ${chalk.bold(step.title)}`);\n console.log(chalk.gray(\" ═\".repeat(30)));\n console.log();\n}\n\n// Show wizard steps overview\nfunction showWizardOverview(): void {\n console.log(chalk.bold(\" 📋 Wizard Steps Overview:\"));\n console.log();\n\n for (let i = 0; i < WIZARD_STEPS.length; i++) {\n const step = WIZARD_STEPS[i];\n console.log(chalk.green(` ${(i + 1).toString().padStart(2)}. ✓ ${step.icon} ${step.title}`));\n }\n console.log();\n}\n\n// Global wizard state for saving draft on exit\nlet wizardState: {\n inProgress: boolean;\n answers: Record<string, unknown>;\n stepReached: number;\n} = {\n inProgress: false,\n answers: {},\n stepReached: 0,\n};\n\n// Save draft function for SIGINT handler\nasync function saveDraftOnExit(): Promise<void> {\n if (!wizardState.inProgress || Object.keys(wizardState.answers).length === 0) {\n return;\n }\n \n try {\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\").slice(0, 19);\n const draftName = `autosave-${timestamp}`;\n \n console.log();\n console.log(chalk.yellow(` 💾 Saving wizard state to draft: ${draftName}...`));\n \n await saveDraftLocally(draftName, wizardState.answers, wizardState.stepReached);\n \n console.log(chalk.green(` ✓ Draft saved! Resume with: lynxp wizard --load-draft ${draftName}`));\n console.log(chalk.gray(` Saved at step ${wizardState.stepReached}`));\n console.log();\n } catch (err) {\n console.log(chalk.red(` ✗ Could not save draft: ${err instanceof Error ? err.message : \"unknown error\"}`));\n }\n}\n\n// Configure prompts to handle cancellation\nconst promptConfig = {\n onCancel: async () => {\n await saveDraftOnExit();\n console.log(chalk.yellow(\"\\n Cancelled. Run 'lynxp wizard' anytime to restart.\\n\"));\n process.exit(0);\n },\n};\n\n// Register SIGINT handler for Ctrl+C\nprocess.on(\"SIGINT\", async () => {\n await saveDraftOnExit();\n console.log(chalk.yellow(\"\\n Interrupted. Run 'lynxp wizard' anytime to restart.\\n\"));\n process.exit(0);\n});\n\nexport async function wizardCommand(options: WizardOptions): Promise<void> {\n try {\n await runWizardWithDraftProtection(options);\n } catch (error) {\n // On any unexpected error, try to save the draft\n await saveDraftOnExit();\n \n console.error(chalk.red(\"\\n ✗ An unexpected error occurred:\"));\n if (error instanceof Error) {\n console.error(chalk.gray(` ${error.message}`));\n }\n console.log();\n \n if (wizardState.stepReached > 0) {\n console.log(chalk.yellow(\" Your progress has been saved. Resume with the draft command shown above.\"));\n }\n console.log();\n process.exit(1);\n }\n}\n\nasync function runWizardWithDraftProtection(options: WizardOptions): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 🐱 LynxPrompt Wizard\"));\n console.log(chalk.gray(\" Generate AI IDE configuration in seconds\"));\n console.log();\n\n // Handle --load-draft option\n if (options.loadDraft) {\n const draft = await loadDraftLocally(options.loadDraft);\n if (draft) {\n const stepInfo = draft.stepReached ? ` at step ${draft.stepReached}` : \"\";\n const sourceInfo = draft.source ? ` [${draft.source}]` : \"\";\n const versionInfo = draft.version ? ` v${draft.version}` : \"\";\n console.log(chalk.green(` ✓ Loaded draft: ${draft.name}${sourceInfo}${versionInfo} (saved ${new Date(draft.savedAt).toLocaleString()}${stepInfo})`));\n \n // Check for version mismatch warnings\n if (draft.source && draft.source !== \"cli\") {\n console.log(chalk.yellow(` ⚠ This draft was created with the ${draft.source.toUpperCase()}. Some features may differ.`));\n }\n if (draft.version && draft.version !== CLI_VERSION) {\n // Compare major.minor versions for compatibility warning\n const draftMajorMinor = draft.version.split(\".\").slice(0, 2).join(\".\");\n const cliMajorMinor = CLI_VERSION.split(\".\").slice(0, 2).join(\".\");\n if (draftMajorMinor !== cliMajorMinor) {\n console.log(chalk.yellow(` ⚠ Draft was created with v${draft.version}, current CLI is v${CLI_VERSION}. Some options may have changed.`));\n }\n }\n console.log();\n // Store draft answers and resume step for use in interactive wizard\n options._draftAnswers = draft.config;\n options._resumeFromStep = draft.stepReached;\n // Also merge basic options (name, description, etc.)\n if (draft.config.name) options.name = draft.config.name as string;\n if (draft.config.description) options.description = draft.config.description as string;\n } else {\n const availableDrafts = await listLocalDrafts();\n console.log(chalk.red(` ✗ Draft \"${options.loadDraft}\" not found.`));\n if (availableDrafts.length > 0) {\n console.log(chalk.gray(` Available drafts: ${availableDrafts.join(\", \")}`));\n }\n console.log();\n }\n }\n\n // Handle --repo-url for direct remote analysis\n if (options.repoUrl) {\n const spinner = ora(\"Analyzing remote repository...\").start();\n const detected = await detectFromRemoteUrl(options.repoUrl);\n if (detected) {\n spinner.succeed(\"Remote repository analyzed\");\n // Pre-fill options from detected\n if (!options.name && detected.name) options.name = detected.name;\n if (!options.description && detected.description) options.description = detected.description;\n if (!options.stack && detected.stack.length > 0) options.stack = detected.stack.join(\",\");\n if (!options.license && detected.license) options.license = detected.license;\n if (detected.cicd) options.ciCd = detected.cicd;\n } else {\n spinner.fail(\"Could not analyze repository\");\n }\n console.log();\n }\n\n // Handle --detect-only mode\n if (options.detectOnly) {\n const detected = options.repoUrl \n ? await detectFromRemoteUrl(options.repoUrl)\n : await detectProject(process.cwd());\n \n if (detected) {\n console.log(chalk.green.bold(\" 📊 Project Analysis\"));\n console.log();\n console.log(chalk.white(` Name: ${detected.name || \"unknown\"}`));\n if (detected.description) console.log(chalk.gray(` Description: ${detected.description}`));\n console.log(chalk.white(` Type: ${detected.isOpenSource ? \"Open Source\" : detected.type}`));\n console.log(chalk.white(` Stack: ${detected.stack.join(\", \") || \"none detected\"}`));\n if (detected.databases && detected.databases.length > 0) {\n console.log(chalk.white(` Databases: ${detected.databases.join(\", \")}`));\n }\n if (detected.packageManager) console.log(chalk.white(` Package Manager: ${detected.packageManager}`));\n if (detected.repoHost) console.log(chalk.white(` Host: ${detected.repoHost}`));\n if (detected.license) console.log(chalk.white(` License: ${detected.license.toUpperCase()}`));\n if (detected.cicd) console.log(chalk.white(` CI/CD: ${detected.cicd.replace(\"_\", \" \")}`));\n if (detected.hasDocker) {\n const dockerInfo = detected.containerRegistry \n ? `detected (registry: ${detected.containerRegistry})`\n : \"detected\";\n console.log(chalk.white(` Docker: ${dockerInfo}`));\n }\n if (detected.testFramework) console.log(chalk.white(` Test Framework: ${detected.testFramework}`));\n if (detected.existingFiles && detected.existingFiles.length > 0) {\n const filesDisplay = detected.existingFiles.length > 3\n ? `${detected.existingFiles.slice(0, 3).join(\", \")}... (+${detected.existingFiles.length - 3})`\n : detected.existingFiles.join(\", \");\n console.log(chalk.white(` Static files found: ${detected.existingFiles.length} (${filesDisplay})`));\n }\n if (detected.commands) {\n console.log(chalk.white(` Commands:`));\n if (detected.commands.build) console.log(chalk.gray(` build: ${detected.commands.build}`));\n if (detected.commands.test) console.log(chalk.gray(` test: ${detected.commands.test}`));\n if (detected.commands.lint) console.log(chalk.gray(` lint: ${detected.commands.lint}`));\n if (detected.commands.dev) console.log(chalk.gray(` dev: ${detected.commands.dev}`));\n }\n console.log();\n } else {\n console.log(chalk.yellow(\" No project detected.\"));\n console.log();\n }\n return; // Exit without generating\n }\n\n // Blueprint mode hint\n if (options.blueprint) {\n console.log(chalk.magenta(\" 📋 Template Mode: Generating with [[VARIABLE|default]] placeholders\"));\n console.log();\n }\n\n // Check authentication\n const authenticated = isAuthenticated();\n const user = getUser();\n\n if (!authenticated) {\n console.log(chalk.gray(` 👤 Running as guest. ${chalk.cyan(\"lynxp login\")} for cloud sync & sharing.`));\n console.log();\n } else {\n console.log(chalk.green(` ✓ Logged in as ${chalk.bold(user?.name || user?.email)}`));\n console.log();\n }\n\n // Show wizard steps overview\n showWizardOverview();\n \n // Show draft save hint\n console.log(chalk.gray(` 💾 Tip: Type 'save:draftname' anytime to save progress locally`));\n console.log();\n \n // Try to detect from current directory first\n let detected = await detectProject(process.cwd());\n \n // Show local detection results if found\n if (detected) {\n const detectedInfo = [\n chalk.green(\"✓ Local project detected\"),\n ];\n if (detected.name) detectedInfo.push(chalk.gray(` Name: ${detected.name}`));\n if (detected.stack.length > 0) detectedInfo.push(chalk.gray(` Stack: ${detected.stack.join(\", \")}`));\n if (detected.packageManager) detectedInfo.push(chalk.gray(` Package manager: ${detected.packageManager}`));\n \n printBox(detectedInfo, chalk.gray);\n console.log();\n } else {\n console.log(chalk.gray(\" No project detected in current directory.\"));\n console.log();\n }\n \n // Always offer to analyze a repository (available to all users)\n // Skip if --yes flag is used (non-interactive mode)\n const canDetectRemote = !options.yes;\n \n if (canDetectRemote) {\n console.log();\n console.log(chalk.magenta.bold(\" ┌───────────────────────────────────────────────┐\"));\n console.log(chalk.magenta.bold(\" │ ✨ AUTO-DETECT FROM REPOSITORY │\"));\n console.log(chalk.magenta.bold(\" └───────────────────────────────────────────────┘\"));\n console.log(chalk.gray(\" Analyze any local path, GitHub/GitLab URL, or private repo with credentials.\"));\n console.log(chalk.gray(\" We'll detect: languages, frameworks, commands, license, CI/CD, and more!\"));\n console.log();\n \n const remoteResponse = await prompts({\n type: \"confirm\",\n name: \"useRemote\",\n message: detected \n ? chalk.white(\"🔍 Analyze a different repository instead?\")\n : chalk.white(\"🔍 Analyze a repository (local path or URL)?\"),\n initial: false, // Default to No - user must explicitly choose Yes\n }, promptConfig);\n \n if (remoteResponse.useRemote) {\n const urlResponse = await prompts({\n type: \"text\",\n name: \"url\",\n message: chalk.white(\"Enter local path or repository URL:\"),\n hint: chalk.gray(\"/path/to/project or https://github.com/user/repo\"),\n validate: (v) => {\n if (!v || v.trim() === \"\") return \"Please enter a path or URL\";\n // Accept local paths (start with /, ~, or .)\n if (v.startsWith(\"/\") || v.startsWith(\"~\") || v.startsWith(\".\")) return true;\n // Accept git URLs\n if (isGitUrl(v)) return true;\n return \"Please enter a valid local path or Git URL\";\n },\n }, promptConfig);\n \n if (urlResponse.url) {\n const inputPath = urlResponse.url.trim();\n const isLocalPath = inputPath.startsWith(\"/\") || inputPath.startsWith(\"~\") || inputPath.startsWith(\".\");\n \n if (isLocalPath) {\n // Expand ~ to home directory\n const { homedir } = await import(\"os\");\n const resolvedPath = inputPath.startsWith(\"~\") \n ? inputPath.replace(\"~\", homedir())\n : inputPath.startsWith(\".\")\n ? join(process.cwd(), inputPath)\n : inputPath;\n \n const localSpinner = ora(`Analyzing local repository at ${resolvedPath}...`).start();\n const localDetected = await detectProject(resolvedPath);\n \n if (localDetected) {\n detected = localDetected;\n localSpinner.succeed(\"Local repository analyzed\");\n \n // Show local detection results\n const detectedInfo = [\n chalk.green(\"✓ Local project detected\"),\n ];\n if (detected.name) detectedInfo.push(chalk.gray(` Name: ${detected.name}`));\n if (detected.stack.length > 0) detectedInfo.push(chalk.gray(` Stack: ${detected.stack.join(\", \")}`));\n if (detected.packageManager) detectedInfo.push(chalk.gray(` Package manager: ${detected.packageManager}`));\n \n printBox(detectedInfo, chalk.gray);\n console.log();\n } else {\n localSpinner.fail(\"Could not analyze directory (no recognizable project structure)\");\n }\n } else {\n // Remote URL analysis\n const host = inputPath.toLowerCase().includes(\"github\") ? \"GitHub API\" \n : inputPath.toLowerCase().includes(\"gitlab\") ? \"GitLab API\" \n : \"shallow clone\";\n const remoteSpinner = ora(`Analyzing remote repository via ${host}...`).start();\n const remoteDetected = await detectFromRemoteUrl(inputPath);\n \n if (remoteDetected) {\n detected = remoteDetected;\n remoteSpinner.succeed(\"Remote repository analyzed\");\n \n // Show remote detection results (aligned with WebUI output)\n const detectedInfo = [\n chalk.green(\"✓ Remote project detected\"),\n ];\n if (detected.name) detectedInfo.push(chalk.gray(` Name: ${detected.name}`));\n if (detected.isOpenSource) detectedInfo.push(chalk.gray(` Type: Open Source`));\n if (detected.stack.length > 0) detectedInfo.push(chalk.gray(` Stack: ${detected.stack.join(\", \")}`));\n if (detected.databases && detected.databases.length > 0) {\n detectedInfo.push(chalk.gray(` Databases: ${detected.databases.join(\", \")}`));\n }\n if (detected.license) detectedInfo.push(chalk.gray(` License: ${detected.license.toUpperCase()}`));\n if (detected.repoHost) detectedInfo.push(chalk.gray(` Host: ${detected.repoHost}`));\n if (detected.cicd) detectedInfo.push(chalk.gray(` CI/CD: ${detected.cicd.replace(\"_\", \" \")}`));\n if (detected.hasDocker) {\n const dockerInfo = detected.containerRegistry \n ? `detected (registry: ${detected.containerRegistry})`\n : \"detected\";\n detectedInfo.push(chalk.gray(` Docker: ${dockerInfo}`));\n }\n if (detected.existingFiles && detected.existingFiles.length > 0) {\n const filesDisplay = detected.existingFiles.length > 3\n ? `${detected.existingFiles.slice(0, 3).join(\", \")}...`\n : detected.existingFiles.join(\", \");\n detectedInfo.push(chalk.gray(` Static files found: ${detected.existingFiles.length} (${filesDisplay})`));\n }\n if (detected.repoUrl) detectedInfo.push(chalk.gray(` Source: ${detected.repoUrl}`));\n \n printBox(detectedInfo, chalk.gray);\n console.log();\n } else {\n remoteSpinner.fail(\"Could not analyze repository (may be private or inaccessible)\");\n }\n }\n }\n }\n }\n\n let config: GenerateOptions;\n\n // Non-interactive mode with --yes flag\n if (options.yes) {\n let platforms: string[];\n if (options.format) {\n platforms = options.format.split(\",\").map(f => f.trim());\n } else if (options.platforms) {\n platforms = options.platforms.split(\",\").map(p => p.trim());\n } else {\n platforms = [\"agents\"];\n }\n\n config = {\n name: options.name || detected?.name || \"my-project\",\n description: options.description || \"\",\n stack: options.stack?.split(\",\").map(s => s.trim()) || detected?.stack || [],\n platforms,\n persona: options.persona || \"fullstack\",\n boundaries: options.boundaries as \"conservative\" | \"standard\" | \"permissive\" || \"standard\",\n commands: detected?.commands || {},\n useGitWorktrees: true, // Default to true for parallel AI sessions\n };\n\n // Show auto-detected configuration summary (verbose -y mode)\n console.log();\n console.log(chalk.bold(\" 📊 Using auto-detected defaults:\"));\n console.log();\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Name \") + chalk.cyan(config.name));\n if (config.description) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Description \") + chalk.gray(config.description.length > 60 ? config.description.substring(0, 57) + \"...\" : config.description));\n }\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Stack \") + chalk.cyan(config.stack.length > 0 ? config.stack.join(\", \") : \"none detected\"));\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Platforms \") + chalk.cyan(config.platforms.join(\", \")));\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Persona \") + chalk.cyan(config.persona));\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Boundaries \") + chalk.cyan(config.boundaries));\n const cmdEntries = Object.entries(config.commands || {});\n if (cmdEntries.length > 0) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Commands \") + chalk.cyan(cmdEntries.map(([k, v]) => `${k}=${v}`).join(\", \")));\n }\n if (detected?.license) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"License \") + chalk.cyan(detected.license.toUpperCase()));\n }\n if (detected?.repoHost) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Repository \") + chalk.cyan(detected.repoHost));\n }\n if (detected?.cicd) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"CI/CD \") + chalk.cyan(detected.cicd.replace(\"_\", \" \")));\n }\n if (detected?.hasDocker) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Docker \") + chalk.cyan(\"yes\"));\n }\n console.log();\n } else {\n // Interactive mode\n config = await runInteractiveWizard(options, detected);\n }\n\n // Generate and write files\n const spinner = ora(\"Generating configuration...\").start();\n \n try {\n // Add blueprint mode and variables to config\n const variables = options.vars ? parseVariablesString(options.vars) : undefined;\n // Don't pass enableAutoUpdate/blueprintId to generator yet - we'll add curl header after saving\n const finalConfig = {\n ...config,\n blueprintMode: options.blueprint || config.blueprintMode || false,\n variables,\n enableAutoUpdate: false, // Don't generate curl header yet\n };\n \n let files = generateConfig(finalConfig);\n \n // If enableAutoUpdate is true, save blueprint to cloud first\n let savedBlueprintId: string | null = null;\n if (config.enableAutoUpdate && api) {\n spinner.text = \"Saving blueprint to cloud...\";\n try {\n const mainFile = Object.entries(files)[0];\n if (mainFile) {\n const [_fileName, content] = mainFile;\n const response = await api.createBlueprint({\n name: config.name || \"My AI Config\",\n description: config.description || \"Generated with LynxPrompt CLI\",\n content: content,\n visibility: \"PRIVATE\",\n });\n savedBlueprintId = response.blueprint.id;\n \n // Now regenerate with the real blueprint ID to include curl header\n const configWithAutoUpdate = {\n ...finalConfig,\n enableAutoUpdate: true,\n blueprintId: savedBlueprintId,\n };\n files = generateConfig(configWithAutoUpdate);\n \n console.log(chalk.green(` ✓ Blueprint saved: ${savedBlueprintId}`));\n }\n } catch (saveError) {\n spinner.stop();\n console.log(chalk.yellow(\"\\n ⚠️ Could not save blueprint to cloud\"));\n if (saveError instanceof Error) {\n console.log(chalk.gray(` ${saveError.message}`));\n }\n console.log(chalk.gray(\" Continuing without auto-update curl command...\"));\n // Continue without auto-update\n }\n }\n \n spinner.stop();\n\n console.log();\n console.log(chalk.green.bold(\" ✅ Generated:\"));\n console.log();\n \n // Determine output directory\n const outputDir = options.output || process.cwd();\n \n for (const [filename, content] of Object.entries(files)) {\n const outputPath = join(outputDir, filename);\n \n // Check if file exists\n let exists = false;\n try {\n await access(outputPath);\n exists = true;\n } catch {\n // File doesn't exist\n }\n\n // Ask to overwrite if exists and not in --yes mode\n if (exists && !options.yes) {\n const response = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: `${filename} already exists. Overwrite?`,\n initial: false,\n });\n \n if (!response.overwrite) {\n console.log(chalk.yellow(` ⏭️ Skipped: ${filename}`));\n continue;\n }\n }\n\n // Create directory if needed\n const dir = dirname(outputPath);\n if (dir !== \".\") {\n await mkdir(dir, { recursive: true });\n }\n\n await writeFile(outputPath, content, \"utf-8\");\n console.log(` ${chalk.cyan(\"→\")} ${chalk.bold(filename)}`);\n }\n\n console.log();\n \n // Build next steps based on auth status\n const nextStepsLines = [\n chalk.gray(\"Your AI assistant will now follow these instructions.\"),\n \"\",\n chalk.gray(\"Next steps:\"),\n chalk.cyan(\" lynxp check \") + chalk.gray(\"Validate configuration\"),\n ];\n \n if (authenticated) {\n nextStepsLines.push(chalk.cyan(\" lynxp push \") + chalk.gray(\"Upload to cloud\"));\n nextStepsLines.push(chalk.cyan(\" lynxp link \") + chalk.gray(\"Link to a blueprint\"));\n nextStepsLines.push(chalk.cyan(\" lynxp diff \") + chalk.gray(\"Compare with cloud blueprint\"));\n }\n \n nextStepsLines.push(chalk.cyan(\" lynxp status \") + chalk.gray(\"View current setup\"));\n \n printBox(nextStepsLines, chalk.gray);\n console.log();\n \n // Show cloud benefits prominently for non-authenticated users\n if (!authenticated) {\n const W = 60;\n const y = chalk.yellow;\n const g = chalk.green;\n const pad = (s: string, len: number) => s + \" \".repeat(Math.max(0, len - s.length));\n \n console.log(y(\" ╭\" + \"─\".repeat(W) + \"╮\"));\n console.log(y(\" │\") + g(pad(\" 🚀 Unlock LynxPrompt Cloud (FREE)\", W)) + y(\"│\"));\n console.log(y(\" │\") + \" \".repeat(W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Sync configs across all your devices\", W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Save preferences for future wizards\", W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Auto-update configs via lynxp push/pull\", W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Create reusable blueprint templates\", W) + y(\"│\"));\n console.log(y(\" │\") + \" \".repeat(W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" Sign in now: \" + chalk.cyan(\"lynxp login\"), W + 10) + y(\"│\"));\n console.log(y(\" ╰\" + \"─\".repeat(W) + \"╯\"));\n console.log();\n }\n \n // Save draft if requested\n if (options.saveDraft) {\n try {\n await saveDraftLocally(options.saveDraft, config as unknown as Record<string, unknown>);\n console.log(chalk.green(` 💾 Draft saved as \"${options.saveDraft}\"`));\n console.log(chalk.gray(` Load later with: lynxp wizard --load-draft ${options.saveDraft}`));\n console.log();\n } catch (err) {\n console.log(chalk.yellow(` ⚠️ Could not save draft: ${err instanceof Error ? err.message : \"unknown error\"}`));\n }\n }\n\n // Offer to save preferences to profile (logged-in users only)\n if (authenticated && !options.yes) {\n console.log();\n const savePrefsResponse = await prompts({\n type: \"confirm\",\n name: \"savePrefs\",\n message: chalk.white(\"Save these preferences to your profile for next time?\"),\n initial: true,\n });\n\n if (savePrefsResponse.savePrefs) {\n // Retry loop for saving preferences\n let saved = false;\n let attempts = 0;\n const maxAttempts = 3;\n \n while (!saved && attempts < maxAttempts) {\n attempts++;\n const saveSpinner = ora(\"Saving preferences to your profile...\").start();\n try {\n // Save wizard preferences via API\n await api.saveWizardPreferences({\n commands: config.commands,\n codeStyle: {\n naming: config.namingConvention,\n errorHandling: config.errorHandling,\n loggingConventions: config.loggingConventions,\n loggingConventionsOther: config.loggingConventionsOther,\n notes: config.styleNotes,\n },\n boundaries: {\n always: config.boundaryAlways,\n never: config.boundaryNever,\n ask: config.boundaryAsk,\n },\n testing: {\n levels: config.testLevels,\n frameworks: config.testFrameworks,\n coverage: config.coverageTarget,\n notes: config.testNotes,\n },\n });\n saveSpinner.succeed(\"Preferences saved to your profile\");\n saved = true;\n } catch (err) {\n saveSpinner.fail(\"Could not save preferences\");\n let errorType = \"unknown\";\n \n if (err instanceof ApiRequestError) {\n if (err.statusCode === 401) {\n console.log(chalk.yellow(\" Your session may have expired. Try: lynxp login\"));\n break; // Don't retry auth errors\n } else {\n console.log(chalk.gray(` ${err.message} (status: ${err.statusCode})`));\n errorType = \"api\";\n }\n } else if (err instanceof Error) {\n if (err.message.includes(\"fetch failed\") || err.message.includes(\"ENOTFOUND\")) {\n console.log(chalk.yellow(\" Network error. Check your internet connection.\"));\n errorType = \"network\";\n } else {\n console.log(chalk.gray(` ${err.message}`));\n }\n }\n \n // Ask if user wants to retry (for network/api errors)\n if (errorType === \"network\" || errorType === \"api\") {\n if (attempts < maxAttempts) {\n const retryResponse = await prompts({\n type: \"confirm\",\n name: \"retry\",\n message: chalk.white(\"Would you like to retry?\"),\n initial: true,\n });\n \n if (!retryResponse.retry) {\n console.log(chalk.gray(\" Skipping preference save. Your config files are still generated.\"));\n break;\n }\n } else {\n console.log(chalk.gray(` Max retries (${maxAttempts}) reached. Your config files are still generated.`));\n }\n } else {\n break; // Don't retry unknown errors\n }\n }\n }\n }\n }\n \n } catch (error) {\n spinner.fail(\"Failed to generate files\");\n \n // Try to save draft even on generation error\n await saveDraftOnExit();\n \n console.error(chalk.red(\"\\n✗ An error occurred while generating configuration files.\"));\n if (error instanceof Error) {\n console.error(chalk.gray(` ${error.message}`));\n }\n console.error(chalk.gray(\"\\nTry running with --yes flag for default settings.\"));\n \n if (wizardState.stepReached > 0) {\n console.log(chalk.yellow(\"\\n Your wizard progress has been saved to a draft.\"));\n }\n process.exit(1);\n }\n}\n\nasync function runInteractiveWizard(\n options: WizardOptions,\n detected: Awaited<ReturnType<typeof detectProject>> | null\n): Promise<GenerateOptions> {\n // Load answers from draft if resuming\n const answers: Record<string, unknown> = options._draftAnswers ? { ...options._draftAnswers } : {};\n const resumeFromStep = options._resumeFromStep || 0;\n const availableSteps = WIZARD_STEPS;\n let currentStepNum = 0;\n\n // Initialize global state for draft saving on exit\n wizardState.inProgress = true;\n wizardState.answers = answers;\n wizardState.stepReached = resumeFromStep;\n\n // Show resume message if loading from draft\n if (resumeFromStep > 0 && Object.keys(answers).length > 0) {\n console.log(chalk.cyan(` 📋 Resuming from step ${resumeFromStep}...`));\n console.log(chalk.gray(\" Previously saved answers:\"));\n // Show key saved values\n if (answers.name) console.log(chalk.gray(` • Name: ${answers.name}`));\n if (answers.platforms) console.log(chalk.gray(` • Platforms: ${(answers.platforms as string[]).join(\", \")}`));\n if (answers.stack) console.log(chalk.gray(` • Stack: ${(answers.stack as string[]).slice(0, 5).join(\", \")}${(answers.stack as string[]).length > 5 ? \"...\" : \"\"}`));\n console.log();\n console.log(chalk.yellow(\" Steps 1-\" + (resumeFromStep - 1) + \" will use saved values. Continuing from step \" + resumeFromStep + \".\"));\n console.log();\n }\n\n // Helper to get current step info and increment counter\n const getCurrentStep = (stepId: string) => {\n const step = availableSteps.find(s => s.id === stepId);\n if (step) {\n currentStepNum++;\n wizardState.stepReached = currentStepNum;\n return step;\n }\n return null;\n };\n\n // Helper to check if we should skip this step (already completed in draft)\n const shouldSkipStep = (stepNum: number) => {\n return resumeFromStep > 0 && stepNum < resumeFromStep;\n };\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 1: Output Format (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const formatStep = getCurrentStep(\"format\")!;\n \n let platforms: string[];\n \n if (shouldSkipStep(currentStepNum) && answers.platforms) {\n // Use saved answer from draft\n platforms = answers.platforms as string[];\n console.log(chalk.gray(` Step 1 (Output Format): Using saved platforms: ${platforms.join(\", \")}`));\n } else if (options.format) {\n showStep(currentStepNum, formatStep);\n platforms = options.format.split(\",\").map(f => f.trim());\n console.log(chalk.gray(` Using format from flag: ${platforms.join(\", \")}`));\n } else {\n showStep(currentStepNum, formatStep);\n // Multi-select by default - user can select one or more platforms\n console.log(chalk.gray(\" Select the AI editors you want to generate config for:\"));\n console.log(chalk.gray(\" (AGENTS.md is recommended - works with most AI tools)\"));\n console.log(chalk.gray(\" Type to search/filter the list.\"));\n console.log();\n \n const platformResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"platforms\",\n message: chalk.white(\"Select AI editors (type to search):\"),\n choices: ALL_PLATFORMS.map(p => ({ \n title: p.id === \"agents\" \n ? `${p.icon} ${p.name} ${chalk.green.bold(\"★ recommended\")}`\n : `${p.icon} ${p.name}`,\n value: p.id,\n description: chalk.gray(p.note),\n selected: p.id === \"universal\", // Pre-select Universal (AGENTS.md)\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n min: 1,\n instructions: false,\n }, promptConfig);\n \n platforms = platformResponse.platforms || [\"agents\"];\n console.log(chalk.green(` ✓ Selected ${platforms.length} platform${platforms.length === 1 ? \"\" : \"s\"}`));\n }\n answers.platforms = platforms;\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 2: Project Basics (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const projectStep = getCurrentStep(\"project\")!;\n showStep(currentStepNum, projectStep);\n\n const nameResponse = await prompts({\n type: \"text\",\n name: \"name\",\n message: chalk.white(\"Project name:\"),\n initial: options.name || detected?.name || \"my-project\",\n hint: chalk.gray(\"Used in the generated config header\"),\n }, promptConfig);\n answers.name = nameResponse.name || \"my-project\";\n\n const descResponse = await prompts({\n type: \"text\",\n name: \"description\",\n message: chalk.white(\"Brief description:\"),\n initial: options.description || detected?.description || \"\",\n hint: detected?.description \n ? chalk.green(\"(pre-filled from repo About)\")\n : chalk.gray(\"optional - helps AI understand context\"),\n }, promptConfig);\n answers.description = descResponse.description || \"\";\n\n // Project type - pre-select open-source if detected from public repo\n const isDetectedOpenSource = detected?.isPublicRepo === true;\n const projectTypeChoices = [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...PROJECT_TYPES.map(t => ({\n title: (t.id === \"opensource\" && isDetectedOpenSource)\n ? `${t.icon} ${t.label} ${chalk.green(\"(detected)\")}`\n : `${t.icon} ${t.label}`,\n value: t.id,\n description: chalk.gray(t.description),\n })),\n ];\n const defaultProjectTypeIdx = isDetectedOpenSource \n ? projectTypeChoices.findIndex(c => c.value === \"opensource\")\n : 0;\n \n const typeResponse = await prompts({\n type: \"select\",\n name: \"projectType\",\n message: chalk.white(\"Project type:\"),\n choices: projectTypeChoices,\n initial: defaultProjectTypeIdx > 0 ? defaultProjectTypeIdx : 0,\n }, promptConfig);\n answers.projectType = typeResponse.projectType || \"\";\n\n // Development environment(s) - multi-select with current OS pre-selected and labeled\n const currentOS = detectCurrentOS();\n const devOsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"devOS\",\n message: chalk.white(\"Development environment(s) (type to search):\"),\n choices: DEV_OS_OPTIONS.map(o => ({\n title: o.id === currentOS \n ? `${o.icon} ${o.label} ${chalk.green(\"(detected by your current system)\")}`\n : `${o.icon} ${o.label}`,\n value: o.id,\n selected: o.id === currentOS, // Pre-select current OS\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.devOS = devOsResponse.devOS || [];\n\n // Architecture pattern\n const archResponse = await prompts({\n type: \"select\",\n name: \"architecture\",\n message: chalk.white(\"Architecture pattern:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...ARCHITECTURE_PATTERNS.map(a => ({\n title: a.label,\n value: a.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.architecture = archResponse.architecture || \"\";\n \n // If \"other\" selected, ask for custom input\n if (answers.architecture === \"other\") {\n const customArchResponse = await prompts({\n type: \"text\",\n name: \"customArchitecture\",\n message: chalk.white(\"Describe your architecture pattern:\"),\n hint: chalk.gray(\"e.g., CQRS, Hexagonal, Clean Architecture\"),\n }, promptConfig);\n answers.architectureOther = customArchResponse.customArchitecture || \"\";\n }\n\n // Blueprint Template Mode - available for all users\n console.log();\n console.log(chalk.yellow(\" 🧩 Blueprint Template Mode\"));\n console.log(chalk.gray(\" Create a reusable template with [[VARIABLE|default]] placeholders\"));\n console.log(chalk.gray(\" that others can customize when using your blueprint.\"));\n console.log();\n \n const blueprintResponse = await prompts({\n type: \"toggle\",\n name: \"blueprintMode\",\n message: chalk.white(\"Create as Blueprint Template?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.blueprintMode = blueprintResponse.blueprintMode || false;\n \n if (answers.blueprintMode) {\n console.log(chalk.green(\" ✓ Blueprint mode enabled - values will use [[VARIABLE|default]] syntax\"));\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 3: Tech Stack (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const techStep = getCurrentStep(\"tech\")!;\n showStep(currentStepNum, techStep);\n\n // Let AI decide option - default to Yes\n const letAiResponse = await prompts({\n type: \"toggle\",\n name: \"letAiDecide\",\n message: chalk.white(\"Let AI help choose additional technologies?\"),\n initial: true, // Default to Yes\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.letAiDecide = letAiResponse.letAiDecide ?? true;\n\n console.log();\n console.log(chalk.gray(\" Select your tech stack (type to search/filter):\"));\n console.log();\n\n // Show detected stack as hint\n if (detected?.stack && detected.stack.length > 0) {\n console.log(chalk.green(` ✓ Detected in project: ${detected.stack.join(\", \")}`));\n console.log();\n }\n\n // Languages - autocomplete multiselect for searchability\n const languageChoices = sortSelectedFirst(LANGUAGES.map(s => {\n const isDetected = detected?.stack?.includes(s.value);\n return {\n title: isDetected ? `${s.title} ${chalk.green(\"(detected)\")}` : s.title,\n value: s.value,\n selected: isDetected,\n };\n }));\n const languageResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"languages\",\n message: chalk.white(\"Languages (type to search):\"),\n choices: languageChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n const selectedLanguages = languageResponse.languages || [];\n\n // Frameworks - separate selection like WebUI\n const frameworkChoices = sortSelectedFirst(FRAMEWORKS.map(s => {\n const isDetected = detected?.stack?.includes(s.value);\n return {\n title: isDetected ? `${s.title} ${chalk.green(\"(detected)\")}` : s.title,\n value: s.value,\n selected: isDetected,\n };\n }));\n const frameworkResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"frameworks\",\n message: chalk.white(\"Frameworks (type to search):\"),\n choices: frameworkChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n const selectedFrameworks = frameworkResponse.frameworks || [];\n\n // Databases\n const databaseChoices = sortSelectedFirst(DATABASES.map(s => {\n const isDetected = detected?.stack?.includes(s.value);\n return {\n title: isDetected ? `${s.title} ${chalk.green(\"(detected)\")}` : s.title,\n value: s.value,\n selected: isDetected,\n };\n }));\n const databaseResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"databases\",\n message: chalk.white(\"Databases (type to search):\"),\n choices: databaseChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n const selectedDatabases = databaseResponse.databases || [];\n\n // JS/TS specific options\n const hasJsTs = selectedLanguages.includes(\"javascript\") || selectedLanguages.includes(\"typescript\");\n \n if (hasJsTs) {\n console.log();\n console.log(chalk.cyan(\" 📦 JavaScript/TypeScript Options\"));\n console.log();\n \n // Package Manager\n const pmResponse = await prompts({\n type: \"select\",\n name: \"packageManager\",\n message: chalk.white(\"Package manager:\"),\n choices: PACKAGE_MANAGERS.map(pm => ({\n title: `${pm.title} - ${chalk.gray(pm.desc)}`,\n value: pm.value,\n })),\n initial: 0,\n }, promptConfig);\n answers.packageManager = pmResponse.packageManager || \"npm\";\n\n // JS Runtime\n const runtimeResponse = await prompts({\n type: \"select\",\n name: \"jsRuntime\",\n message: chalk.white(\"JavaScript runtime:\"),\n choices: JS_RUNTIMES.map(rt => ({\n title: `${rt.title} - ${chalk.gray(rt.desc)}`,\n value: rt.value,\n })),\n initial: 0,\n }, promptConfig);\n answers.jsRuntime = runtimeResponse.jsRuntime || \"node\";\n\n // Monorepo\n const monoResponse = await prompts({\n type: \"select\",\n name: \"monorepoTool\",\n message: chalk.white(\"Monorepo tool:\"),\n choices: MONOREPO_TOOLS.map(mt => ({\n title: `${mt.title} - ${chalk.gray(mt.desc)}`,\n value: mt.value,\n })),\n initial: 0,\n }, promptConfig);\n answers.monorepoTool = monoResponse.monorepoTool || \"\";\n }\n\n // ORM selection (if databases selected)\n if (selectedDatabases.length > 0) {\n console.log();\n console.log(chalk.cyan(\" 🔗 ORM / Database Library\"));\n console.log();\n \n // Filter ORMs by selected languages\n const relevantOrms = ORM_OPTIONS.filter(orm => \n orm.langs.length === 0 || orm.langs.some(l => selectedLanguages.includes(l))\n );\n \n const ormResponse = await prompts({\n type: \"select\",\n name: \"orm\",\n message: chalk.white(\"ORM / Database library:\"),\n choices: relevantOrms.map(orm => ({ title: orm.title, value: orm.value })),\n initial: 0,\n }, promptConfig);\n answers.orm = ormResponse.orm || \"\";\n }\n\n // Additional libraries (for domain-specific libs not in predefined lists)\n console.log();\n console.log(chalk.cyan(\" 📦 Additional Libraries\"));\n console.log(chalk.gray(\" Add key libraries not listed above (e.g., Telethon, APScheduler, boto3)\"));\n console.log();\n const additionalLibsResponse = await prompts({\n type: \"text\",\n name: \"additionalLibraries\",\n message: chalk.white(\"Additional libraries (comma-separated, optional):\"),\n hint: chalk.gray(\"e.g., Telethon, APScheduler, uvicorn, alembic\"),\n }, promptConfig);\n answers.additionalLibraries = additionalLibsResponse.additionalLibraries || \"\";\n\n // Combine all stack selections\n answers.stack = [...selectedLanguages, ...selectedFrameworks, ...selectedDatabases];\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 4: Repository Setup (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const repoStep = getCurrentStep(\"repo\")!;\n showStep(currentStepNum, repoStep);\n\n // Show detected repository info\n if (detected?.repoHost || detected?.license || detected?.cicd) {\n console.log(chalk.green(\" ✓ Auto-detected from your project:\"));\n if (detected.repoHost) console.log(chalk.gray(` • Repository: ${detected.repoHost}${detected.repoUrl ? ` (${detected.repoUrl})` : \"\"}`));\n if (detected.license) console.log(chalk.gray(` • License: ${detected.license}`));\n if (detected.cicd) console.log(chalk.gray(` • CI/CD: ${detected.cicd}`));\n console.log();\n }\n\n // Find initial index for detected repo host\n const repoHostChoices = [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...REPO_HOSTS.map(h => ({\n title: detected?.repoHost === h.id \n ? `${h.icon} ${h.label} ${chalk.green(\"(detected)\")}`\n : `${h.icon} ${h.label}`,\n value: h.id,\n })),\n ];\n const detectedRepoIndex = detected?.repoHost \n ? repoHostChoices.findIndex(c => c.value === detected.repoHost)\n : 0;\n\n const repoHostResponse = await prompts({\n type: \"select\",\n name: \"repoHost\",\n message: chalk.white(\"Repository host:\"),\n choices: repoHostChoices,\n initial: detectedRepoIndex > 0 ? detectedRepoIndex : 0,\n }, promptConfig);\n answers.repoHost = repoHostResponse.repoHost || \"\";\n\n const visibilityResponse = await prompts({\n type: \"toggle\",\n name: \"isPublic\",\n message: chalk.white(\"Public Repository?\"),\n initial: true, // Default Yes\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Enable if this is an existing public project\"),\n }, promptConfig);\n answers.isPublic = visibilityResponse.isPublic ?? true;\n\n // Find initial index for detected license\n const licenseChoices = [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...LICENSES.map(l => ({\n title: detected?.license === l.id\n ? `${l.label} ${chalk.green(\"(detected)\")}`\n : l.label,\n value: l.id,\n })),\n ];\n const detectedLicenseIndex = detected?.license\n ? licenseChoices.findIndex(c => c.value === detected.license)\n : 0;\n\n const licenseResponse = await prompts({\n type: \"select\",\n name: \"license\",\n message: chalk.white(\"License:\"),\n choices: licenseChoices,\n initial: detectedLicenseIndex > 0 ? detectedLicenseIndex : 1, // Default to MIT (index 1 after Skip)\n }, promptConfig);\n answers.license = licenseResponse.license || \"mit\";\n\n const conventionalResponse = await prompts({\n type: \"toggle\",\n name: \"conventionalCommits\",\n message: chalk.white(\"Use Conventional Commits?\"),\n initial: true, // Default Yes\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.conventionalCommits = conventionalResponse.conventionalCommits ?? true;\n\n const semverResponse = await prompts({\n type: \"toggle\",\n name: \"semver\",\n message: chalk.white(\"Use Semantic Versioning?\"),\n initial: true, // Default Yes\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.semver = semverResponse.semver ?? true;\n\n // Conditional semver options\n if (answers.semver) {\n const tagFormatResponse = await prompts({\n type: \"select\",\n name: \"versionTagFormat\",\n message: chalk.white(\"Version tag format:\"),\n choices: [\n { title: \"v-prefix (v1.0.0)\", value: \"v_prefix\" },\n { title: \"No prefix (1.0.0)\", value: \"no_prefix\" },\n { title: \"Package prefix (@pkg/v1.0.0)\", value: \"package_prefix\" },\n { title: \"Date-based (2024.01.15)\", value: \"date_based\" },\n { title: \"Custom format\", value: \"custom\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.versionTagFormat = tagFormatResponse.versionTagFormat || \"v_prefix\";\n\n const changelogResponse = await prompts({\n type: \"select\",\n name: \"changelogTool\",\n message: chalk.white(\"Changelog management:\"),\n choices: [\n { title: \"Manual - Write CHANGELOG.md by hand\", value: \"manual\" },\n { title: \"Conventional Changelog - Auto-generate from commit messages\", value: \"conventional_changelog\" },\n { title: \"Release Please - Google's automated release management\", value: \"release_please\" },\n { title: \"Semantic Release - Fully automated versioning & publishing\", value: \"semantic_release\" },\n { title: \"Changesets - Monorepo-friendly version management\", value: \"changesets\" },\n { title: \"GitHub Releases - Use GitHub's built-in release notes\", value: \"github_releases\" },\n { title: \"Keep a Changelog - Manual following keepachangelog.com format\", value: \"keep_a_changelog\" },\n { title: \"Other - Custom changelog tooling\", value: \"other\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.changelogTool = changelogResponse.changelogTool || \"manual\";\n }\n\n // Commit signing\n const signingResponse = await prompts({\n type: \"toggle\",\n name: \"commitSigning\",\n message: chalk.white(\"Require commit signing (GPG/SSH)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.commitSigning = signingResponse.commitSigning ?? false;\n\n // Branch strategy\n const branchStrategyResponse = await prompts({\n type: \"select\",\n name: \"branchStrategy\",\n message: chalk.white(\"Branch strategy:\"),\n choices: [\n { title: \"🎮 None (toy project) - No branching, commit directly to main\", value: \"none\" },\n { title: \"🌊 GitHub Flow - Simple: main + feature branches\", value: \"github_flow\" },\n { title: \"🌳 Gitflow - develop, feature, release, hotfix branches\", value: \"gitflow\" },\n { title: \"🚂 Trunk-Based - Short-lived branches, continuous integration\", value: \"trunk_based\" },\n { title: \"🦊 GitLab Flow - Environment branches (staging, production)\", value: \"gitlab_flow\" },\n { title: \"🚀 Release Flow - main + release branches\", value: \"release_flow\" },\n ],\n initial: 1, // Default to GitHub Flow (index 1 after adding \"none\")\n }, promptConfig);\n answers.branchStrategy = branchStrategyResponse.branchStrategy || \"github_flow\";\n\n // Default branch\n const defaultBranchResponse = await prompts({\n type: \"select\",\n name: \"defaultBranch\",\n message: chalk.white(\"Default branch name:\"),\n choices: [\n { title: \"main\", value: \"main\" },\n { title: \"master\", value: \"master\" },\n { title: \"develop\", value: \"develop\" },\n { title: \"trunk\", value: \"trunk\" },\n { title: \"Other (specify)\", value: \"other\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.defaultBranch = defaultBranchResponse.defaultBranch || \"main\";\n\n // If \"other\" is selected, ask for custom branch name\n if (answers.defaultBranch === \"other\") {\n const customBranchResponse = await prompts({\n type: \"text\",\n name: \"defaultBranchOther\",\n message: chalk.white(\"Enter custom branch name:\"),\n hint: chalk.gray(\"e.g., production, release, staging\"),\n validate: (v) => v && v.trim() !== \"\" ? true : \"Branch name is required\",\n }, promptConfig);\n answers.defaultBranchOther = customBranchResponse.defaultBranchOther || \"\";\n }\n\n // Allow direct commits for small fixes\n const allowDirectCommitsResponse = await prompts({\n type: \"toggle\",\n name: \"allowDirectCommits\",\n message: chalk.white(\"Allow direct commits for small fixes?\"),\n initial: answers.branchStrategy === \"none\", // Default yes for toy projects\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Enable for typos, docs, and minor fixes (bypassing PRs)\"),\n }, promptConfig);\n answers.allowDirectCommits = allowDirectCommitsResponse.allowDirectCommits ?? (answers.branchStrategy === \"none\");\n\n // Git Worktrees for parallel AI sessions\n const useGitWorktreesResponse = await prompts({\n type: \"confirm\",\n name: \"useGitWorktrees\",\n message: chalk.white(\"🌲 Do you plan on working with several AI agent sessions in this repository?\"),\n initial: true,\n hint: \"Enable if you use multiple AI agents (Cursor, Claude, Copilot) in parallel. Each task gets its own git worktree to prevent branch conflicts.\",\n }, promptConfig);\n answers.useGitWorktrees = useGitWorktreesResponse.useGitWorktrees ?? true;\n\n // Dependabot/Renovate moved to Security step\n\n // CI/CD Platform - multiselect with detected value pre-selected\n const cicdChoices = CICD_OPTIONS.map(c => ({\n title: detected?.cicd === c.id\n ? `${c.icon} ${c.label} ${chalk.green(\"(detected)\")}`\n : `${c.icon} ${c.label}`,\n value: c.id,\n selected: detected?.cicd === c.id,\n }));\n\n const cicdResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"cicd\",\n message: chalk.white(\"CI/CD Platform(s) (type to search, select all that apply):\"),\n choices: cicdChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.cicd = cicdResponse.cicd || [];\n\n // If \"other\" is selected, ask for custom CI/CD platform name\n if ((answers.cicd as string[]).includes(\"other\")) {\n const customCicdResponse = await prompts({\n type: \"text\",\n name: \"cicdOther\",\n message: chalk.white(\"Enter custom CI/CD platform name:\"),\n hint: chalk.gray(\"e.g., Tekton, Harness, custom scripts\"),\n }, promptConfig);\n answers.cicdOther = customCicdResponse.cicdOther || \"\";\n }\n\n // First ask: cloud, self-hosted, or both\n const deployTypeResponse = await prompts({\n type: \"select\",\n name: \"deployType\",\n message: chalk.white(\"Deployment environment:\"),\n choices: [\n { title: \"☁️ Cloud only - PaaS, serverless, managed services\", value: \"cloud\" },\n { title: \"🏠 Self-hosted only - On-premise, homelab, VPS\", value: \"self_hosted\" },\n { title: \"🔄 Both cloud and self-hosted\", value: \"both\" },\n { title: chalk.gray(\"⏭ Skip\"), value: \"skip\" },\n ],\n initial: 0,\n }, promptConfig);\n const deployType = deployTypeResponse.deployType || \"skip\";\n \n let allDeployTargets: string[] = [];\n \n // Show cloud targets if selected\n if (deployType === \"cloud\" || deployType === \"both\") {\n const cloudChoices = CLOUD_TARGETS.map(t => ({\n title: `${t.icon}${t.label}`,\n value: t.id,\n }));\n const cloudResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"cloudTargets\",\n message: chalk.white(\"Cloud deployment targets (type to search):\"),\n choices: cloudChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n allDeployTargets = [...(cloudResponse.cloudTargets || [])];\n }\n \n // Show self-hosted targets if selected\n if (deployType === \"self_hosted\" || deployType === \"both\") {\n const selfHostedChoices = sortSelectedFirst(SELF_HOSTED_TARGETS.map(t => ({\n title: (t.id === \"docker\" && detected?.hasDocker)\n ? `${t.icon}${t.label} ${chalk.green(\"(detected)\")}`\n : `${t.icon}${t.label}`,\n selected: t.id === \"docker\" && detected?.hasDocker,\n value: t.id,\n })));\n const selfHostedResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"selfHostedTargets\",\n message: chalk.white(\"Self-hosted deployment targets (type to search):\"),\n choices: selfHostedChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n allDeployTargets = [...allDeployTargets, ...(selfHostedResponse.selfHostedTargets || [])];\n }\n \n answers.deploymentTargets = allDeployTargets;\n\n // Container build - default to Yes if Docker/Docker Compose is selected in deployment targets\n const dockerSelected = (answers.deploymentTargets as string[] || []).some(t => \n [\"docker\", \"docker_compose\", \"kubernetes\", \"k3s\", \"podman\"].includes(t)\n ) || detected?.hasDocker;\n const containerResponse = await prompts({\n type: \"toggle\",\n name: \"buildContainer\",\n message: chalk.white(\"Build container images (Docker)?\"),\n initial: dockerSelected, // Default Yes if container platform selected\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.buildContainer = containerResponse.buildContainer ?? dockerSelected;\n\n // Container registry (if building containers)\n if (answers.buildContainer) {\n const registryResponse = await prompts({\n type: \"select\",\n name: \"containerRegistry\",\n message: chalk.white(\"Container registry:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...CONTAINER_REGISTRIES.map(r => ({\n title: `${r.icon} ${r.label}`,\n value: r.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.containerRegistry = registryResponse.containerRegistry || \"\";\n \n // If custom/self-hosted registry selected, ask for URL\n if (answers.containerRegistry === \"custom\") {\n const customRegistryResponse = await prompts({\n type: \"text\",\n name: \"customRegistryUrl\",\n message: chalk.white(\"Container registry URL:\"),\n hint: chalk.gray(\"e.g., registry.example.com:5000\"),\n validate: (v) => v.trim() ? true : \"Please enter a registry URL\",\n }, promptConfig);\n answers.customRegistryUrl = customRegistryResponse.customRegistryUrl || \"\";\n }\n \n // Docker image names\n console.log();\n console.log(chalk.gray(\" 📦 Specify published Docker image names (helps AI understand deployment)\"));\n const dockerImagesResponse = await prompts({\n type: \"text\",\n name: \"dockerImageNames\",\n message: chalk.white(\"Docker image names (comma-separated, optional):\"),\n hint: chalk.gray(\"e.g., myuser/myapp, myuser/myapp-viewer\"),\n }, promptConfig);\n answers.dockerImageNames = dockerImagesResponse.dockerImageNames || \"\";\n }\n\n // Example repository URL\n console.log();\n console.log(chalk.gray(\" 📚 Optionally, point the AI to a well-structured public repository as a reference.\"));\n console.log(chalk.gray(\" The AI will study its code patterns, architecture, and conventions to better assist you.\"));\n const exampleRepoResponse = await prompts({\n type: \"text\",\n name: \"exampleRepoUrl\",\n message: chalk.white(\"Reference repository URL:\"),\n hint: chalk.gray(\"e.g., https://github.com/vercel/next.js\"),\n }, promptConfig);\n answers.exampleRepoUrl = exampleRepoResponse.exampleRepoUrl || \"\";\n\n // External documentation URL\n console.log();\n console.log(chalk.gray(\" 📖 Optionally, link to your team's external documentation for project context.\"));\n console.log(chalk.gray(\" The AI will read these docs to understand your project's domain and conventions.\"));\n const docsUrlResponse = await prompts({\n type: \"text\",\n name: \"documentationUrl\",\n message: chalk.white(\"External docs URL:\"),\n hint: chalk.gray(\"e.g., Confluence, Notion, GitBook, internal wiki\"),\n }, promptConfig);\n answers.documentationUrl = docsUrlResponse.documentationUrl || \"\";\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 5: Security (basic - FREE tier for all users)\n // ═══════════════════════════════════════════════════════════════\n const securityStep = getCurrentStep(\"security\")!;\n showStep(currentStepNum, securityStep);\n\n // 1. Authentication Providers (login methods)\n console.log();\n console.log(chalk.cyan(\" 1️⃣ Authentication Providers\"));\n console.log(chalk.gray(\" Which login methods should your app support?\"));\n console.log();\n\n const authProvidersResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"authProviders\",\n message: chalk.white(\"Auth providers (type to search):\"),\n choices: [\n { title: \"Email/Password\", value: \"email_password\", description: chalk.gray(\"Traditional credentials\") },\n { title: \"Google\", value: \"google\", description: chalk.gray(\"Google OAuth\") },\n { title: \"GitHub\", value: \"github\", description: chalk.gray(\"GitHub OAuth\") },\n { title: \"GitLab\", value: \"gitlab\", description: chalk.gray(\"GitLab OAuth\") },\n { title: \"Microsoft\", value: \"microsoft\", description: chalk.gray(\"Azure AD / Microsoft\") },\n { title: \"Apple\", value: \"apple\", description: chalk.gray(\"Sign in with Apple\") },\n { title: \"Facebook\", value: \"facebook\", description: chalk.gray(\"Facebook Login\") },\n { title: \"Twitter/X\", value: \"twitter\", description: chalk.gray(\"Twitter OAuth\") },\n { title: \"LinkedIn\", value: \"linkedin\", description: chalk.gray(\"LinkedIn OAuth\") },\n { title: \"Discord\", value: \"discord\", description: chalk.gray(\"Discord OAuth\") },\n { title: \"Slack\", value: \"slack\", description: chalk.gray(\"Slack OAuth\") },\n { title: \"Magic Link\", value: \"magic_link\", description: chalk.gray(\"Email magic links\") },\n { title: \"SMS OTP\", value: \"sms_otp\", description: chalk.gray(\"SMS verification codes\") },\n { title: \"Passkeys/WebAuthn\", value: \"passkeys\", description: chalk.gray(\"Passwordless biometric\") },\n { title: \"SAML SSO\", value: \"saml_sso\", description: chalk.gray(\"Enterprise SAML\") },\n { title: \"Generic OIDC\", value: \"oidc_generic\", description: chalk.gray(\"Custom OIDC provider\") },\n { title: \"LDAP/AD\", value: \"ldap\", description: chalk.gray(\"Directory services\") },\n { title: \"Other\", value: \"other\", description: chalk.gray(\"Custom provider\") },\n ],\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.authProviders = authProvidersResponse.authProviders || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.authProviders as string[]).includes(\"other\")) {\n const customAuthProvidersResponse = await prompts({\n type: \"text\",\n name: \"customAuthProviders\",\n message: chalk.white(\"Describe your custom auth provider:\"),\n hint: chalk.gray(\"e.g., custom SSO, proprietary identity provider\"),\n }, promptConfig);\n answers.authProvidersOther = customAuthProvidersResponse.customAuthProviders || \"\";\n }\n\n // 2. Secrets Management\n console.log();\n console.log(chalk.cyan(\" 2️⃣ Secrets Management\"));\n console.log(chalk.gray(\" How do you manage secrets and credentials?\"));\n console.log();\n\n const secretsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"secretsManagement\",\n message: chalk.white(\"Secrets management strategies (type to search):\"),\n choices: SECRETS_MANAGEMENT_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n selected: opt.recommended,\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.secretsManagement = secretsResponse.secretsManagement || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.secretsManagement as string[]).includes(\"other\")) {\n const customSecretsResponse = await prompts({\n type: \"text\",\n name: \"customSecretsManagement\",\n message: chalk.white(\"Describe your secrets management approach:\"),\n hint: chalk.gray(\"e.g., custom KMS integration, proprietary vault\"),\n }, promptConfig);\n answers.secretsManagementOther = customSecretsResponse.customSecretsManagement || \"\";\n }\n\n // 3. Security Tooling (includes Dependabot/Renovate - multi-select, searchable)\n console.log();\n console.log(chalk.cyan(\" 3️⃣ Security Tooling\"));\n console.log(chalk.gray(\" Security scanning, dependency updates, and vulnerability detection.\"));\n console.log();\n \n const securityToolingResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"securityTooling\",\n message: chalk.white(\"Security tools (type to search):\"),\n choices: SECURITY_TOOLING_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n selected: opt.recommended,\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.securityTooling = securityToolingResponse.securityTooling || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.securityTooling as string[]).includes(\"other\")) {\n const customSecurityToolingResponse = await prompts({\n type: \"text\",\n name: \"customSecurityTooling\",\n message: chalk.white(\"Describe your security tooling:\"),\n hint: chalk.gray(\"e.g., custom SAST tool, internal vulnerability scanner\"),\n }, promptConfig);\n answers.securityToolingOther = customSecurityToolingResponse.customSecurityTooling || \"\";\n }\n\n // 4. Authentication Patterns (multi-select, searchable)\n console.log();\n console.log(chalk.cyan(\" 4️⃣ Authentication Patterns\"));\n console.log(chalk.gray(\" How users and services authenticate with your application.\"));\n console.log();\n \n const authPatternsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"authPatterns\",\n message: chalk.white(\"Auth patterns (type to search):\"),\n choices: AUTH_PATTERNS_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.authPatterns = authPatternsResponse.authPatterns || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.authPatterns as string[]).includes(\"other\")) {\n const customAuthResponse = await prompts({\n type: \"text\",\n name: \"customAuthPatterns\",\n message: chalk.white(\"Describe your authentication approach:\"),\n hint: chalk.gray(\"e.g., custom SSO, proprietary auth system\"),\n }, promptConfig);\n answers.authPatternsOther = customAuthResponse.customAuthPatterns || \"\";\n }\n\n // 5. Data Handling (multi-select, searchable)\n console.log();\n console.log(chalk.cyan(\" 5️⃣ Data Handling & Compliance\"));\n console.log(chalk.gray(\" Data protection, encryption, and compliance requirements.\"));\n console.log();\n \n const dataHandlingResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"dataHandling\",\n message: chalk.white(\"Data handling policies (type to search):\"),\n choices: DATA_HANDLING_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n selected: opt.recommended,\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.dataHandling = dataHandlingResponse.dataHandling || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.dataHandling as string[]).includes(\"other\")) {\n const customDataHandlingResponse = await prompts({\n type: \"text\",\n name: \"customDataHandling\",\n message: chalk.white(\"Describe your data handling policies:\"),\n hint: chalk.gray(\"e.g., custom encryption, specific compliance requirements\"),\n }, promptConfig);\n answers.dataHandlingOther = customDataHandlingResponse.customDataHandling || \"\";\n }\n\n // 6. Compliance Standards\n console.log();\n console.log(chalk.cyan(\" 6️⃣ Compliance Standards\"));\n console.log(chalk.gray(\" Regulatory compliance requirements for your application.\"));\n console.log();\n\n const complianceResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"compliance\",\n message: chalk.white(\"Compliance standards (type to search):\"),\n choices: [\n { title: \"GDPR - EU data protection\", value: \"gdpr\" },\n { title: \"CCPA - California privacy\", value: \"ccpa\" },\n { title: \"HIPAA - Healthcare data\", value: \"hipaa\" },\n { title: \"SOC 2 - Service controls\", value: \"soc2\" },\n { title: \"PCI-DSS - Payment card data\", value: \"pci_dss\" },\n { title: \"ISO 27001 - Information security\", value: \"iso27001\" },\n { title: \"FedRAMP - US federal cloud\", value: \"fedramp\" },\n { title: \"Other\", value: \"other\" },\n ],\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.compliance = complianceResponse.compliance || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.compliance as string[]).includes(\"other\")) {\n const customComplianceResponse = await prompts({\n type: \"text\",\n name: \"customCompliance\",\n message: chalk.white(\"Describe your compliance requirements:\"),\n hint: chalk.gray(\"e.g., custom industry regulations, internal policies\"),\n }, promptConfig);\n answers.complianceOther = customComplianceResponse.customCompliance || \"\";\n }\n\n // 7. Analytics & Telemetry\n console.log();\n console.log(chalk.cyan(\" 7️⃣ Analytics & Telemetry\"));\n console.log(chalk.gray(\" Usage analytics and monitoring solutions.\"));\n console.log();\n\n const analyticsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"analytics\",\n message: chalk.white(\"Analytics tools (type to search):\"),\n choices: [\n { title: \"Google Analytics (GA4)\", value: \"google_analytics\" },\n { title: \"Plausible - Privacy-focused\", value: \"plausible\" },\n { title: \"PostHog - Product analytics\", value: \"posthog\" },\n { title: \"Mixpanel - Event analytics\", value: \"mixpanel\" },\n { title: \"Amplitude - Product analytics\", value: \"amplitude\" },\n { title: \"Segment - Data pipeline\", value: \"segment\" },\n { title: \"Umami - Self-hosted analytics\", value: \"umami\" },\n { title: \"Matomo - Self-hosted (Piwik)\", value: \"matomo\" },\n { title: \"No Analytics - Privacy-first approach\", value: \"none\" },\n { title: \"Other\", value: \"other\" },\n ],\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.analytics = analyticsResponse.analytics || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.analytics as string[]).includes(\"other\")) {\n const customAnalyticsResponse = await prompts({\n type: \"text\",\n name: \"customAnalytics\",\n message: chalk.white(\"Describe your analytics solution:\"),\n hint: chalk.gray(\"e.g., custom analytics platform, self-hosted solution\"),\n }, promptConfig);\n answers.analyticsOther = customAnalyticsResponse.customAnalytics || \"\";\n }\n\n // Additional security notes\n const securityNotesResponse = await prompts({\n type: \"text\",\n name: \"securityNotes\",\n message: chalk.white(\"Additional security notes:\"),\n hint: chalk.gray(\"e.g., specific compliance requirements, custom security practices\"),\n }, promptConfig);\n answers.securityNotes = securityNotesResponse.securityNotes || \"\";\n\n // Show security summary\n console.log();\n console.log(chalk.green(\" ✓ Security configuration complete:\"));\n if ((answers.authProviders as string[]).length > 0) {\n console.log(chalk.gray(` • Auth Providers: ${(answers.authProviders as string[]).join(\", \")}`));\n }\n if ((answers.secretsManagement as string[]).length > 0) {\n console.log(chalk.gray(` • Secrets: ${(answers.secretsManagement as string[]).join(\", \")}`));\n }\n if ((answers.securityTooling as string[]).length > 0) {\n console.log(chalk.gray(` • Tooling: ${(answers.securityTooling as string[]).join(\", \")}`));\n }\n if ((answers.authPatterns as string[]).length > 0) {\n console.log(chalk.gray(` • Auth Patterns: ${(answers.authPatterns as string[]).join(\", \")}`));\n }\n if ((answers.dataHandling as string[]).length > 0) {\n console.log(chalk.gray(` • Data: ${(answers.dataHandling as string[]).join(\", \")}`));\n }\n if ((answers.compliance as string[]).length > 0) {\n console.log(chalk.gray(` • Compliance: ${(answers.compliance as string[]).join(\", \")}`));\n }\n if ((answers.analytics as string[]).length > 0) {\n console.log(chalk.gray(` • Analytics: ${(answers.analytics as string[]).join(\", \")}`));\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 6: Commands (intermediate)\n // (was STEP 5 before Security step added)\n // ═══════════════════════════════════════════════════════════════\n {\n const commandsStep = getCurrentStep(\"commands\")!;\n showStep(currentStepNum, commandsStep);\n\n console.log(chalk.gray(\" Select commands for your project. Detected commands are pre-selected.\"));\n console.log();\n \n // Helper to build choices with detected commands first\n const buildCommandChoices = (\n category: \"build\" | \"test\" | \"lint\" | \"dev\" | \"format\" | \"typecheck\" | \"clean\" | \"preCommit\" | \"additional\",\n commonCmds: string[],\n color: (s: string) => string\n ) => {\n const detectedCmds = detected?.detectedCommands?.[category] || [];\n const detectedSet = new Set(detectedCmds.map(d => d.cmd));\n \n // Start with detected commands (pre-selected)\n const choices = detectedCmds.map(d => ({\n title: `${color(d.cmd)} ${chalk.green(\"(detected)\")}${d.desc ? chalk.gray(` - ${d.desc}`) : \"\"}`,\n value: d.cmd,\n selected: true,\n }));\n \n // Add common commands that weren't detected\n for (const cmd of commonCmds) {\n if (!detectedSet.has(cmd)) {\n choices.push({\n title: color(cmd),\n value: cmd,\n selected: false,\n });\n }\n }\n \n return choices;\n };\n \n // Show summary of detected commands\n const detectedCmds = detected?.detectedCommands;\n if (detectedCmds) {\n const totalDetected = Object.values(detectedCmds).reduce((sum, arr) => sum + (arr?.length || 0), 0);\n if (totalDetected > 0) {\n console.log(chalk.green(` ✓ ${totalDetected} commands detected from your project`));\n console.log();\n }\n }\n\n // Build commands - autocomplete for searching\n const buildChoices = buildCommandChoices(\"build\", COMMON_COMMANDS.build, chalk.cyan);\n const buildResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"build\",\n message: chalk.white(\"Build commands (type to search):\"),\n choices: buildChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Test commands - autocomplete for searching\n const testChoices = buildCommandChoices(\"test\", COMMON_COMMANDS.test, chalk.yellow);\n const testResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"test\",\n message: chalk.white(\"Test commands (type to search):\"),\n choices: testChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Lint commands - autocomplete for searching\n const lintChoices = buildCommandChoices(\"lint\", COMMON_COMMANDS.lint, chalk.green);\n const lintResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"lint\",\n message: chalk.white(\"Lint commands (type to search):\"),\n choices: lintChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Dev commands - autocomplete for searching\n const devChoices = buildCommandChoices(\"dev\", COMMON_COMMANDS.dev, chalk.magenta);\n const devResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"dev\",\n message: chalk.white(\"Dev server commands (type to search):\"),\n choices: devChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Format commands - autocomplete for searching\n const formatChoices = buildCommandChoices(\"format\", COMMON_COMMANDS.format, chalk.blue);\n const formatResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"format\",\n message: chalk.white(\"Format commands (type to search):\"),\n choices: formatChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Typecheck commands - autocomplete for searching\n const typecheckChoices = buildCommandChoices(\"typecheck\", COMMON_COMMANDS.typecheck, chalk.gray);\n const typecheckResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"typecheck\",\n message: chalk.white(\"Typecheck commands (type to search):\"),\n choices: typecheckChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Clean commands - autocomplete for searching\n const cleanChoices = buildCommandChoices(\"clean\", COMMON_COMMANDS.clean, chalk.red);\n const cleanResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"clean\",\n message: chalk.white(\"Clean commands (type to search):\"),\n choices: cleanChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Pre-commit commands - autocomplete for searching\n const preCommitChoices = buildCommandChoices(\"preCommit\", COMMON_COMMANDS.preCommit, chalk.yellow);\n const preCommitResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"preCommit\",\n message: chalk.white(\"Pre-commit hooks (type to search):\"),\n choices: preCommitChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Additional commands - autocomplete for searching\n const additionalChoices = buildCommandChoices(\"additional\", COMMON_COMMANDS.additional, chalk.blue);\n const additionalResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"additional\",\n message: chalk.white(\"Additional commands (type to search):\"),\n choices: additionalChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n answers.commands = {\n build: buildResponse.build || [],\n test: testResponse.test || [],\n lint: lintResponse.lint || [],\n dev: devResponse.dev || [],\n format: formatResponse.format || [],\n typecheck: typecheckResponse.typecheck || [],\n clean: cleanResponse.clean || [],\n preCommit: preCommitResponse.preCommit || [],\n additional: additionalResponse.additional || [],\n };\n\n // Custom command\n const customCmdResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Custom command:\"),\n hint: chalk.gray(\"e.g., npm run migrate, make deploy\"),\n }, promptConfig);\n if (customCmdResponse.custom) {\n (answers.commands as Record<string, unknown>).custom = customCmdResponse.custom;\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 7: Code Style (intermediate)\n // ═══════════════════════════════════════════════════════════════\n {\n const styleStep = getCurrentStep(\"code_style\")!;\n showStep(currentStepNum, styleStep);\n\n const namingResponse = await prompts({\n type: \"select\",\n name: \"naming\",\n message: chalk.white(\"Naming convention:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...NAMING_CONVENTIONS.map(n => ({\n title: n.id === \"language_default\" \n ? `${n.label} ${chalk.green(\"★ recommended\")}`\n : n.label,\n value: n.id,\n description: chalk.gray(n.desc),\n })),\n ],\n initial: 1, // Pre-select \"Follow language conventions\"\n }, promptConfig);\n answers.namingConvention = namingResponse.naming || \"\";\n\n const errorResponse = await prompts({\n type: \"select\",\n name: \"errorHandling\",\n message: chalk.white(\"Error handling pattern:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...ERROR_PATTERNS.map(e => ({\n title: e.label,\n value: e.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.errorHandling = errorResponse.errorHandling || \"\";\n \n // If \"other\" selected, ask for custom input\n if (answers.errorHandling === \"other\") {\n const customErrorResponse = await prompts({\n type: \"text\",\n name: \"customErrorHandling\",\n message: chalk.white(\"Describe your error handling approach:\"),\n hint: chalk.gray(\"e.g., Railway-oriented, custom error boundaries\"),\n }, promptConfig);\n answers.errorHandlingOther = customErrorResponse.customErrorHandling || \"\";\n }\n\n // Logging conventions - searchable select like WebUI\n const loggingResponse = await prompts({\n type: \"autocomplete\",\n name: \"loggingConventions\",\n message: chalk.white(\"Logging conventions (type to search):\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...LOGGING_OPTIONS.map(l => ({\n title: l.label,\n value: l.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.loggingConventions = loggingResponse.loggingConventions || \"\";\n \n // If \"other\" selected, ask for custom input\n if (answers.loggingConventions === \"other\") {\n const customLoggingResponse = await prompts({\n type: \"text\",\n name: \"customLogging\",\n message: chalk.white(\"Describe your logging convention:\"),\n hint: chalk.gray(\"e.g., custom logger, file-based logging\"),\n }, promptConfig);\n answers.loggingConventionsOther = customLoggingResponse.customLogging || \"\";\n }\n\n // Max file length\n const maxFileLengthResponse = await prompts({\n type: \"number\",\n name: \"maxFileLength\",\n message: chalk.white(\"Max file length (lines, 100-10000):\"),\n initial: 300,\n min: 100,\n max: 10000,\n }, promptConfig);\n answers.maxFileLength = maxFileLengthResponse.maxFileLength || 300;\n\n // Import order\n const importOrderResponse = await prompts({\n type: \"select\",\n name: \"importOrder\",\n message: chalk.white(\"Import order preference:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n { title: \"Grouped (external → internal → relative)\", value: \"grouped\" },\n { title: \"Alphabetical (sort A-Z)\", value: \"sorted\" },\n { title: \"Natural (leave as written)\", value: \"natural\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.importOrder = importOrderResponse.importOrder || \"\";\n\n // Comment language\n const commentLangResponse = await prompts({\n type: \"autocomplete\",\n name: \"commentLanguage\",\n message: chalk.white(\"Comment language:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n { title: \"🇬🇧 English\", value: \"english\" },\n { title: \"🇪🇸 Spanish (Español)\", value: \"spanish\" },\n { title: \"🇫🇷 French (Français)\", value: \"french\" },\n { title: \"🇩🇪 German (Deutsch)\", value: \"german\" },\n { title: \"🇮🇹 Italian (Italiano)\", value: \"italian\" },\n { title: \"🇵🇹 Portuguese (Português)\", value: \"portuguese\" },\n { title: \"🇳🇱 Dutch (Nederlands)\", value: \"dutch\" },\n { title: \"🇷🇺 Russian (Русский)\", value: \"russian\" },\n { title: \"🇨🇳 Chinese Simplified (简体中文)\", value: \"chinese_simplified\" },\n { title: \"🇹🇼 Chinese Traditional (繁體中文)\", value: \"chinese_traditional\" },\n { title: \"🇯🇵 Japanese (日本語)\", value: \"japanese\" },\n { title: \"🇰🇷 Korean (한국어)\", value: \"korean\" },\n { title: \"🇸🇦 Arabic (العربية)\", value: \"arabic\" },\n { title: \"🇮🇱 Hebrew (עברית)\", value: \"hebrew\" },\n { title: \"🇮🇳 Hindi (हिन्दी)\", value: \"hindi\" },\n { title: \"🇧🇩 Bengali (বাংলা)\", value: \"bengali\" },\n { title: \"🇵🇰 Urdu (اردو)\", value: \"urdu\" },\n { title: \"🇹🇭 Thai (ไทย)\", value: \"thai\" },\n { title: \"🇻🇳 Vietnamese (Tiếng Việt)\", value: \"vietnamese\" },\n { title: \"🇮🇩 Indonesian (Bahasa Indonesia)\", value: \"indonesian\" },\n { title: \"🇲🇾 Malay (Bahasa Melayu)\", value: \"malay\" },\n { title: \"🇵🇭 Filipino (Tagalog)\", value: \"filipino\" },\n { title: \"🇵🇱 Polish (Polski)\", value: \"polish\" },\n { title: \"🇨🇿 Czech (Čeština)\", value: \"czech\" },\n { title: \"🇸🇰 Slovak (Slovenčina)\", value: \"slovak\" },\n { title: \"🇭🇺 Hungarian (Magyar)\", value: \"hungarian\" },\n { title: \"🇷🇴 Romanian (Română)\", value: \"romanian\" },\n { title: \"🇧🇬 Bulgarian (Български)\", value: \"bulgarian\" },\n { title: \"🇺🇦 Ukrainian (Українська)\", value: \"ukrainian\" },\n { title: \"🇬🇷 Greek (Ελληνικά)\", value: \"greek\" },\n { title: \"🇹🇷 Turkish (Türkçe)\", value: \"turkish\" },\n { title: \"🇸🇪 Swedish (Svenska)\", value: \"swedish\" },\n { title: \"🇳🇴 Norwegian (Norsk)\", value: \"norwegian\" },\n { title: \"🇩🇰 Danish (Dansk)\", value: \"danish\" },\n { title: \"🇫🇮 Finnish (Suomi)\", value: \"finnish\" },\n { title: \"🇪🇪 Estonian (Eesti)\", value: \"estonian\" },\n { title: \"🇱🇻 Latvian (Latviešu)\", value: \"latvian\" },\n { title: \"🇱🇹 Lithuanian (Lietuvių)\", value: \"lithuanian\" },\n { title: \"🇸🇮 Slovenian (Slovenščina)\", value: \"slovenian\" },\n { title: \"🇭🇷 Croatian (Hrvatski)\", value: \"croatian\" },\n { title: \"🇷🇸 Serbian (Српски)\", value: \"serbian\" },\n { title: \"🇮🇷 Persian/Farsi (فارسی)\", value: \"persian\" },\n { title: \"🇿🇦 Afrikaans\", value: \"afrikaans\" },\n { title: \"🇳🇬 Swahili (Kiswahili)\", value: \"swahili\" },\n { title: \"🇪🇬 Egyptian Arabic\", value: \"egyptian_arabic\" },\n { title: \"🇲🇽 Latin American Spanish\", value: \"latam_spanish\" },\n { title: \"🇧🇷 Brazilian Portuguese\", value: \"brazilian_portuguese\" },\n { title: \"🇨🇦 Canadian French\", value: \"canadian_french\" },\n { title: \"🇦🇹 Austrian German\", value: \"austrian_german\" },\n { title: \"🇨🇭 Swiss German\", value: \"swiss_german\" },\n { title: \"🔤 Other (specify)\", value: \"other\" },\n ],\n hint: chalk.gray(\"type to filter\"),\n suggest: (input: string, choices: prompts.Choice[]) =>\n Promise.resolve(choices.filter(c => c.title.toLowerCase().includes(input.toLowerCase()))),\n }, promptConfig);\n answers.commentLanguage = commentLangResponse.commentLanguage || \"\";\n \n // If \"other\" selected, ask for custom language\n if (answers.commentLanguage === \"other\") {\n const customLangResponse = await prompts({\n type: \"text\",\n name: \"customLanguage\",\n message: chalk.white(\"Specify comment language:\"),\n validate: (v) => v.trim() ? true : \"Please enter a language\",\n }, promptConfig);\n answers.commentLanguage = customLangResponse.customLanguage || \"english\";\n }\n\n // Documentation style\n const docStyleResponse = await prompts({\n type: \"select\",\n name: \"docStyle\",\n message: chalk.white(\"Documentation style:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip (language default)\"), value: \"\" },\n { title: \"JSDoc\", value: \"jsdoc\" },\n { title: \"TSDoc\", value: \"tsdoc\" },\n { title: \"Python docstrings\", value: \"pydoc\" },\n { title: \"Go doc comments\", value: \"godoc\" },\n { title: \"Rust doc (///)\", value: \"rustdoc\" },\n { title: \"Javadoc\", value: \"javadoc\" },\n { title: \"C# XML docs\", value: \"xmldoc\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.docStyle = docStyleResponse.docStyle || \"\";\n\n const styleNotesResponse = await prompts({\n type: \"text\",\n name: \"styleNotes\",\n message: chalk.white(\"Additional style notes:\"),\n hint: chalk.gray(\"e.g., prefer named exports, max line length 100\"),\n }, promptConfig);\n answers.styleNotes = styleNotesResponse.styleNotes || \"\";\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 8: AI Behavior (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const aiStep = getCurrentStep(\"ai\")!;\n showStep(currentStepNum, aiStep);\n \n const aiBehaviorResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"aiBehavior\",\n message: chalk.white(\"AI behavior rules (type to filter):\"),\n choices: AI_BEHAVIOR_RULES.map(r => ({\n title: r.recommended \n ? `${r.label} ${chalk.green(\"★ recommended\")}`\n : r.label,\n value: r.id,\n description: chalk.gray(r.description),\n selected: true, // All selected by default\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.aiBehavior = aiBehaviorResponse.aiBehavior || AI_BEHAVIOR_RULES.map(r => r.id);\n \n // Show selected rules in newlines\n if ((answers.aiBehavior as string[]).length > 0) {\n console.log(chalk.green(\" ✓ Selected:\"));\n for (const ruleId of (answers.aiBehavior as string[])) {\n const rule = AI_BEHAVIOR_RULES.find(r => r.id === ruleId);\n if (rule) console.log(chalk.cyan(` • ${rule.label}`));\n }\n }\n\n // Plan mode frequency\n const planModeResponse = await prompts({\n type: \"select\",\n name: \"planModeFrequency\",\n message: chalk.white(\"When should AI enter plan mode before changes?\"),\n choices: [\n { title: \"Always - Plan before every task\", value: \"always\" },\n { title: \"Complex Tasks - Multi-step or risky changes\", value: \"complex_tasks\" },\n { title: \"Multi-file Changes - When touching multiple files\", value: \"multi_file\" },\n { title: \"New Features Only - Only for new functionality\", value: \"new_features\" },\n { title: \"On Request - Only when explicitly asked\", value: \"on_request\" },\n { title: \"Never - Skip planning entirely\", value: \"never\" },\n ],\n initial: 1, // Default to complex_tasks\n }, promptConfig);\n answers.planModeFrequency = planModeResponse.planModeFrequency || \"complex_tasks\";\n\n // Explanation verbosity\n const verbosityResponse = await prompts({\n type: \"select\",\n name: \"explanationVerbosity\",\n message: chalk.white(\"Explanation verbosity:\"),\n choices: [\n { title: \"📝 Concise - Brief, to the point\", value: \"concise\" },\n { title: \"⚖️ Balanced - Clear with context\", value: \"balanced\" },\n { title: \"📚 Detailed - In-depth explanations\", value: \"detailed\" },\n ],\n initial: 1,\n }, promptConfig);\n answers.explanationVerbosity = verbosityResponse.explanationVerbosity || \"balanced\";\n\n // Workaround behavior\n const workaroundResponse = await prompts({\n type: \"toggle\",\n name: \"attemptWorkarounds\",\n message: chalk.white(\"When stuck, should the AI attempt workarounds?\"),\n initial: true,\n active: \"Yes, try workarounds\",\n inactive: \"No, stop and ask\",\n }, promptConfig);\n answers.attemptWorkarounds = workaroundResponse.attemptWorkarounds ?? true;\n\n // Focus areas\n const accessibilityResponse = await prompts({\n type: \"toggle\",\n name: \"accessibilityFocus\",\n message: chalk.white(\"Prioritize accessibility (WCAG, a11y)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.accessibilityFocus = accessibilityResponse.accessibilityFocus ?? false;\n\n const performanceResponse = await prompts({\n type: \"toggle\",\n name: \"performanceFocus\",\n message: chalk.white(\"Prioritize performance optimizations?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.performanceFocus = performanceResponse.performanceFocus ?? false;\n\n // MCP Servers\n console.log();\n console.log(chalk.gray(\" 🔌 MCP (Model Context Protocol) servers let the AI interact with external tools\"));\n console.log(chalk.gray(\" like databases, APIs, file systems, and more. List any you have configured.\"));\n const mcpServersResponse = await prompts({\n type: \"text\",\n name: \"mcpServers\",\n message: chalk.white(\"MCP servers (comma-separated, or leave empty):\"),\n hint: chalk.gray(\"e.g. filesystem, github, postgres, docker\"),\n }, promptConfig);\n answers.mcpServers = mcpServersResponse.mcpServers || \"\";\n\n // Server access\n const serverAccessResponse = await prompts({\n type: \"toggle\",\n name: \"serverAccess\",\n message: chalk.white(\"Does this project require logging into a server?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.serverAccess = serverAccessResponse.serverAccess ?? false;\n\n if (answers.serverAccess) {\n const sshKeyPathResponse = await prompts({\n type: \"text\",\n name: \"sshKeyPath\",\n message: chalk.white(\"SSH key path (leave empty for default ~/.ssh/):\"),\n hint: chalk.gray(\"e.g. ~/.ssh/id_ed25519\"),\n }, promptConfig);\n answers.sshKeyPath = sshKeyPathResponse.sshKeyPath || \"\";\n }\n\n // Manual deployment (only ask if no CI/CD was selected)\n const hasCicd = (answers.cicd as string[])?.length > 0;\n if (!hasCicd) {\n const manualDeployResponse = await prompts({\n type: \"toggle\",\n name: \"manualDeployment\",\n message: chalk.white(\"Do you deploy manually (no CI/CD)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.manualDeployment = manualDeployResponse.manualDeployment ?? false;\n\n if (answers.manualDeployment) {\n const deployMethodResponse = await prompts({\n type: \"select\",\n name: \"deploymentMethod\",\n message: chalk.white(\"How do you deploy?\"),\n choices: [\n { title: \"🐳 Portainer (GitOps stacks)\", value: \"portainer\" },\n { title: \"📦 Docker Compose (manual)\", value: \"docker_compose\" },\n { title: \"☸️ Kubernetes (kubectl)\", value: \"kubernetes\" },\n { title: \"🖥️ Bare metal (direct)\", value: \"bare_metal\" },\n ],\n }, promptConfig);\n answers.deploymentMethod = deployMethodResponse.deploymentMethod || \"\";\n }\n }\n\n console.log();\n console.log(chalk.gray(\" 📁 Select files the AI should read first to understand your project context.\"));\n console.log(chalk.gray(\" These help the AI understand your codebase, APIs, and conventions.\"));\n const importantFilesResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"importantFiles\",\n message: chalk.white(\"Important files AI should read (type to search):\"),\n choices: IMPORTANT_FILES.map(f => ({\n title: `${f.icon} ${f.label}`,\n value: f.id,\n description: chalk.gray(f.description),\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.importantFiles = importantFilesResponse.importantFiles || [];\n\n // Ask for custom important files - with language-aware hints\n console.log();\n const stackLanguages = (answers.stack as string[]) || [];\n const importantFileHints: string[] = [];\n if (stackLanguages.includes(\"python\")) {\n importantFileHints.push(\"src/config.py\", \"requirements.txt\", \".env.example\");\n }\n if (stackLanguages.includes(\"typescript\") || stackLanguages.includes(\"javascript\")) {\n importantFileHints.push(\"src/config/index.ts\", \"tsconfig.json\", \".env.example\");\n }\n if (stackLanguages.includes(\"go\")) {\n importantFileHints.push(\"cmd/main.go\", \"internal/config/config.go\", \"go.mod\");\n }\n if (stackLanguages.includes(\"rust\")) {\n importantFileHints.push(\"src/main.rs\", \"src/config.rs\", \"Cargo.toml\");\n }\n if (stackLanguages.includes(\"java\") || stackLanguages.includes(\"kotlin\")) {\n importantFileHints.push(\"src/main/resources/application.yml\", \"pom.xml\");\n }\n const hintText = importantFileHints.length > 0\n ? `e.g., ${importantFileHints.slice(0, 3).join(\", \")}`\n : \"e.g., src/config/index.ts, docs/api.md, prisma/schema.prisma\";\n \n const customImportantFilesResponse = await prompts({\n type: \"text\",\n name: \"importantFilesOther\",\n message: chalk.white(\"Other important files (comma-separated, optional):\"),\n hint: chalk.gray(hintText),\n }, promptConfig);\n answers.importantFilesOther = customImportantFilesResponse.importantFilesOther || \"\";\n\n // Cloud sync & AI learning options (grouped together)\n console.log();\n console.log(chalk.gray(\" ─── Cloud & AI Options ───\"));\n console.log();\n \n // Self-improving config - instruct AI to suggest improvements\n console.log(chalk.gray(\" 🧠 Write instructions in the generated config telling AI it can suggest improvements.\"));\n console.log(chalk.gray(\" The AI will learn your patterns and propose better rules, new conventions,\"));\n console.log(chalk.gray(\" and optimizations over time. You review and approve any changes.\"));\n const selfImproveResponse = await prompts({\n type: \"toggle\",\n name: \"selfImprove\",\n message: chalk.white(\"Enable self-improving AI config rules?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Instructs AI to suggest improvements\"),\n }, promptConfig);\n answers.selfImprove = selfImproveResponse.selfImprove || false;\n\n // Cloud sync - save to cloud and enable synchronization\n console.log();\n console.log(chalk.gray(\" ☁️ Store your config on LynxPrompt cloud for syncing and version control.\"));\n console.log(chalk.gray(\" Benefits:\"));\n console.log(chalk.gray(\" • Sync configs across all your devices\"));\n console.log(chalk.gray(\" • Track changes and rollback if needed\"));\n console.log(chalk.gray(\" • Instructions added to config so AI can sync automatically\"));\n const enableAutoUpdateResponse = await prompts({\n type: \"toggle\",\n name: \"enableAutoUpdate\",\n message: chalk.white(\"Enable cloud synchronization?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Enables push/pull/diff with LynxPrompt cloud\"),\n }, promptConfig);\n answers.enableAutoUpdate = enableAutoUpdateResponse.enableAutoUpdate || false;\n\n // Ask about CLI availability when cloud sync enabled\n answers.preferCliSync = true; // Default to CLI\n answers.tokenEnvVar = \"LYNXPROMPT_API_TOKEN\"; // Default env var name\n \n if (answers.enableAutoUpdate && api) {\n console.log();\n console.log(chalk.gray(\" 📦 How should the AI perform sync operations?\"));\n console.log();\n console.log(chalk.green.bold(\" CLI (Recommended):\"));\n console.log(chalk.gray(\" • Most secure - no tokens stored anywhere\"));\n console.log(chalk.gray(\" • AI runs lynxp commands directly\"));\n console.log(chalk.gray(\" • Requires CLI installed: npm install -g lynxprompt\"));\n console.log();\n console.log(chalk.yellow(\" curl/token/env variable:\"));\n console.log(chalk.gray(\" • Works without CLI installed\"));\n console.log(chalk.gray(\" • Token stored in environment variable (not in file)\"));\n console.log(chalk.gray(\" • Less convenient but still secure\"));\n console.log();\n \n const syncMethodResponse = await prompts({\n type: \"toggle\",\n name: \"preferCliSync\",\n message: chalk.white(\"Will LynxPrompt CLI be available in your dev environment?\"),\n initial: true, // Default to yes - strongly recommended\n active: \"Yes, use CLI (recommended)\",\n inactive: \"No, use curl/token/env variable\",\n hint: chalk.green(\"Strongly recommended for security\"),\n }, promptConfig);\n answers.preferCliSync = syncMethodResponse.preferCliSync ?? true;\n \n if (answers.preferCliSync) {\n console.log(chalk.green(\" ✓ Perfect! Config will include lynxp CLI commands for syncing\"));\n console.log(chalk.gray(\" Make sure CLI is installed: npm install -g lynxprompt\"));\n } else {\n // Ask for env var name where token will be stored\n console.log();\n console.log(chalk.gray(\" 🔐 Config will include curl commands using an environment variable.\"));\n console.log(chalk.gray(\" Your API token will NOT be stored in the config file.\"));\n const envVarResponse = await prompts({\n type: \"text\",\n name: \"tokenEnvVar\",\n message: chalk.white(\"Environment variable name for API token:\"),\n initial: \"LYNXPROMPT_API_TOKEN\",\n hint: chalk.gray(\"e.g., LYNXPROMPT_API_TOKEN, LP_TOKEN\"),\n }, promptConfig);\n answers.tokenEnvVar = envVarResponse.tokenEnvVar || \"LYNXPROMPT_API_TOKEN\";\n console.log(chalk.green(` ✓ Config will reference $${answers.tokenEnvVar}`));\n console.log(chalk.gray(` Remember to set: export ${answers.tokenEnvVar}=\"your_token_here\"`));\n }\n }\n\n if (answers.enableAutoUpdate && !api) {\n console.log(chalk.yellow(\" ⚠️ Cloud sync requires login. Run 'lynxp login' first.\"));\n console.log(chalk.gray(\" Continuing without cloud sync...\"));\n answers.enableAutoUpdate = false;\n }\n \n // If multiple output formats selected AND cloud sync enabled, ask which to upload\n const selectedPlatforms = answers.platforms as string[];\n if (answers.enableAutoUpdate && selectedPlatforms && selectedPlatforms.length > 1) {\n console.log();\n console.log(chalk.yellow(\" ⚠️ You selected multiple output formats but only one can be synced to cloud.\"));\n const primaryFormatResponse = await prompts({\n type: \"select\",\n name: \"primaryFormat\",\n message: chalk.white(\"Which format should be the cloud-synced version?\"),\n choices: selectedPlatforms.map(p => ({ title: p, value: p })),\n hint: chalk.gray(\"This version will be uploaded to LynxPrompt cloud\"),\n }, promptConfig);\n answers.primarySyncFormat = primaryFormatResponse.primaryFormat || selectedPlatforms[0];\n console.log(chalk.green(` ✓ ${answers.primarySyncFormat} will be synced to cloud, others are local-only`));\n }\n\n // Include personal data from profile - only available for authenticated users\n console.log();\n if (isAuthenticated()) {\n console.log(chalk.gray(\" 👤 Include your profile info (name, email, persona) in the generated config.\"));\n console.log(chalk.gray(\" This helps AI tools personalize responses to your expertise level.\"));\n const includePersonalResponse = await prompts({\n type: \"toggle\",\n name: \"includePersonalData\",\n message: chalk.white(\"Include your profile data in config?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Name, email, expertise from your profile\"),\n }, promptConfig);\n answers.includePersonalData = includePersonalResponse.includePersonalData || false;\n\n // If personal data enabled, fetch user profile from API\n if (answers.includePersonalData && api) {\n try {\n console.log(chalk.gray(\" Fetching profile from LynxPrompt...\"));\n const userResponse = await api.getUser();\n if (userResponse.user) {\n answers.userName = userResponse.user.name || userResponse.user.display_name || \"\";\n answers.userEmail = userResponse.user.email || \"\";\n answers.userPersona = userResponse.user.persona || \"\";\n // skill_level can serve as expertise\n answers.userExpertise = userResponse.user.skill_level || \"\";\n console.log(chalk.green(\" ✓ Profile loaded\"));\n }\n } catch {\n console.log(chalk.yellow(\" Could not fetch profile data. Using defaults.\"));\n }\n }\n } else {\n console.log(chalk.gray(\" 🔒 Profile inclusion requires sign-in. Run \") + chalk.cyan(\"lynxp login\") + chalk.gray(\" to enable.\"));\n answers.includePersonalData = false;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 9: Boundaries (advanced)\n // ═══════════════════════════════════════════════════════════════\n {\n const boundariesStep = getCurrentStep(\"boundaries\")!;\n showStep(currentStepNum, boundariesStep);\n\n console.log(chalk.gray(\" Define what AI should never do, ask first, or always do.\"));\n console.log(chalk.gray(\" Each option can only be in one category. Select 'Other' to add custom.\"));\n console.log();\n\n // Track used options to filter them out from subsequent questions\n const usedOptions = new Set<string>();\n const OTHER_MARKER = \"__other__\";\n\n // 1. NEVER do - AI will refuse to do (ask first - most restrictive)\n console.log(chalk.red.bold(\" ✗ NEVER ALLOW - AI will refuse to do\"));\n const neverResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"never\",\n message: chalk.white(\"Never allow (type to filter):\"),\n choices: [\n ...BOUNDARY_OPTIONS.map(o => ({\n title: chalk.red(o),\n value: o,\n })),\n { title: chalk.magenta(\"✎ Other (custom)\"), value: OTHER_MARKER },\n ],\n hint: chalk.gray(\"space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n let neverList: string[] = (neverResponse.never || []).filter((o: string) => o !== OTHER_MARKER);\n \n // Handle \"Other\" for Never\n if ((neverResponse.never || []).includes(OTHER_MARKER)) {\n const customNeverResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Enter custom 'never allow' items (comma-separated):\"),\n hint: chalk.gray(\"e.g., Push to production, Deploy without approval\"),\n }, promptConfig);\n if (customNeverResponse.custom) {\n const customItems = customNeverResponse.custom.split(\",\").map((s: string) => s.trim()).filter(Boolean);\n neverList = [...neverList, ...customItems];\n }\n }\n answers.boundaryNever = neverList;\n neverList.forEach(o => usedOptions.add(o));\n\n // 2. ASK first - AI will ask before doing\n console.log();\n console.log(chalk.yellow.bold(\" ? ASK FIRST - AI will ask before doing\"));\n const availableForAsk = BOUNDARY_OPTIONS.filter(o => !usedOptions.has(o));\n const askResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"ask\",\n message: chalk.white(\"Ask first (type to filter):\"),\n choices: [\n ...availableForAsk.map(o => ({\n title: chalk.yellow(o),\n value: o,\n })),\n { title: chalk.magenta(\"✎ Other (custom)\"), value: OTHER_MARKER },\n ],\n hint: chalk.gray(\"space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n let askList: string[] = (askResponse.ask || []).filter((o: string) => o !== OTHER_MARKER);\n \n // Handle \"Other\" for Ask\n if ((askResponse.ask || []).includes(OTHER_MARKER)) {\n const customAskResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Enter custom 'ask first' items (comma-separated):\"),\n hint: chalk.gray(\"e.g., Change external API calls, Modify authentication\"),\n }, promptConfig);\n if (customAskResponse.custom) {\n const customItems = customAskResponse.custom.split(\",\").map((s: string) => s.trim()).filter(Boolean);\n askList = [...askList, ...customItems];\n }\n }\n answers.boundaryAsk = askList;\n askList.forEach(o => usedOptions.add(o));\n\n // 3. ALWAYS do - AI will do these automatically\n console.log();\n console.log(chalk.green.bold(\" ✓ ALWAYS ALLOW - AI will do these automatically\"));\n const availableForAlways = BOUNDARY_OPTIONS.filter(o => !usedOptions.has(o));\n const alwaysResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"always\",\n message: chalk.white(\"Always allow (type to filter):\"),\n choices: [\n ...availableForAlways.map(o => ({\n title: chalk.green(o),\n value: o,\n })),\n { title: chalk.magenta(\"✎ Other (custom)\"), value: OTHER_MARKER },\n ],\n hint: chalk.gray(\"space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n let alwaysList: string[] = (alwaysResponse.always || []).filter((o: string) => o !== OTHER_MARKER);\n \n // Handle \"Other\" for Always\n if ((alwaysResponse.always || []).includes(OTHER_MARKER)) {\n const customAlwaysResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Enter custom 'always allow' items (comma-separated):\"),\n hint: chalk.gray(\"e.g., Add comments, Format code\"),\n }, promptConfig);\n if (customAlwaysResponse.custom) {\n const customItems = customAlwaysResponse.custom.split(\",\").map((s: string) => s.trim()).filter(Boolean);\n alwaysList = [...alwaysList, ...customItems];\n }\n }\n answers.boundaryAlways = alwaysList;\n\n // Show summary\n console.log();\n console.log(chalk.gray(\" Boundary summary:\"));\n if (alwaysList.length > 0) {\n console.log(chalk.green(` ✓ Always: ${alwaysList.join(\", \")}`));\n }\n if (askList.length > 0) {\n console.log(chalk.yellow(` ? Ask: ${askList.join(\", \")}`));\n }\n if (neverList.length > 0) {\n console.log(chalk.red(` ✗ Never: ${neverList.join(\", \")}`));\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 10: Testing Strategy (advanced)\n // ═══════════════════════════════════════════════════════════════\n {\n const testingStep = getCurrentStep(\"testing\")!;\n showStep(currentStepNum, testingStep);\n\n const testLevelsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"testLevels\",\n message: chalk.white(\"Test levels (type to search):\"),\n choices: TEST_LEVELS.map(l => ({\n title: `${l.label} - ${chalk.gray(l.desc)}`,\n value: l.id,\n selected: l.id === \"unit\" || l.id === \"integration\",\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.testLevels = testLevelsResponse.testLevels || [];\n\n // Detect test framework from stack\n const detectedFrameworks = (answers.stack as string[])?.includes(\"typescript\") || \n (answers.stack as string[])?.includes(\"javascript\")\n ? [\"jest\", \"vitest\"]\n : (answers.stack as string[])?.includes(\"python\")\n ? [\"pytest\"]\n : [];\n\n // Full list of test frameworks with search - expanded to match WebUI\n const testFrameworkChoices = sortSelectedFirst(TEST_FRAMEWORKS.map(f => ({\n title: f,\n value: f,\n selected: detectedFrameworks.includes(f),\n })));\n const testFrameworkResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"testFrameworks\",\n message: chalk.white(\"Testing frameworks (type to search):\"),\n choices: testFrameworkChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.testFrameworks = testFrameworkResponse.testFrameworks || [];\n\n const coverageResponse = await prompts({\n type: \"number\",\n name: \"coverage\",\n message: chalk.white(\"Target code coverage (%):\"),\n initial: 80,\n min: 0,\n max: 100,\n }, promptConfig);\n answers.coverageTarget = coverageResponse.coverage ?? 80;\n\n // TDD Preference\n const tddResponse = await prompts({\n type: \"toggle\",\n name: \"tddPreference\",\n message: chalk.white(\"Use Test-Driven Development (TDD)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.tddPreference = tddResponse.tddPreference ?? false;\n\n // Snapshot Testing\n console.log(chalk.gray(\" Snapshot testing captures expected output (HTML, JSON, etc.) and compares\"));\n console.log(chalk.gray(\" future runs against it. Useful for UI components, API responses, serialization.\"));\n const snapshotResponse = await prompts({\n type: \"select\",\n name: \"snapshotTesting\",\n message: chalk.white(\"Use snapshot testing?\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"skip\" },\n { title: \"Yes - Use snapshot testing for output validation\", value: \"yes\" },\n { title: \"No - Avoid snapshot tests\", value: \"no\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.snapshotTesting = snapshotResponse.snapshotTesting === \"yes\";\n\n // Mock Strategy\n const mockResponse = await prompts({\n type: \"select\",\n name: \"mockStrategy\",\n message: chalk.white(\"Mock strategy:\"),\n choices: [\n { title: \"Minimal - Only mock external dependencies\", value: \"minimal\" },\n { title: \"Comprehensive - Mock for isolation\", value: \"comprehensive\" },\n { title: \"None - No mocking preferred\", value: \"none\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.mockStrategy = mockResponse.mockStrategy || \"minimal\";\n\n const testNotesResponse = await prompts({\n type: \"text\",\n name: \"testNotes\",\n message: chalk.white(\"Testing notes:\"),\n hint: chalk.gray(\"e.g., run e2e on main only, use msw for mocking\"),\n }, promptConfig);\n answers.testNotes = testNotesResponse.testNotes || \"\";\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 11: Static Files (advanced)\n // ═══════════════════════════════════════════════════════════════\n {\n const staticStep = getCurrentStep(\"static\")!;\n showStep(currentStepNum, staticStep);\n\n // If repo was detected, default to skipping this step\n let skipStaticFiles = false;\n if (detected) {\n console.log(chalk.gray(\" Since you're working with an existing repository, you may already have these files.\"));\n console.log();\n const skipResponse = await prompts({\n type: \"toggle\",\n name: \"skip\",\n message: chalk.white(\"Skip static files configuration?\"),\n initial: true,\n active: \"Yes, skip\",\n inactive: \"No, configure\",\n }, promptConfig);\n skipStaticFiles = skipResponse.skip ?? true;\n }\n \n if (!skipStaticFiles) {\n // First, ask how to handle static files\n console.log(chalk.gray(\" How should static file content be handled?\"));\n console.log();\n console.log(chalk.gray(\" 📄 Config only: Content embedded in AI config file (AI has context, no local files)\"));\n console.log(chalk.gray(\" 📁 Both: Create local files AND embed content in AI config file\"));\n console.log();\n \n const staticFileHandlingResponse = await prompts({\n type: \"select\",\n name: \"handling\",\n message: chalk.white(\"Where to add static file content?\"),\n choices: [\n { title: \"📄 Config file only (recommended)\", value: \"config_only\", description: \"Content goes in AI config, no separate files created\" },\n { title: \"📁 Both local files AND config\", value: \"both\", description: \"Create files locally AND embed in AI config\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.staticFileHandling = staticFileHandlingResponse.handling || \"config_only\";\n\n console.log();\n console.log(chalk.gray(\" Select project files to include:\"));\n console.log();\n\n // Static file options with metadata\n const STATIC_FILE_OPTIONS = [\n { title: \"📝 .editorconfig\", value: \"editorconfig\", desc: \"Consistent code formatting\" },\n { title: \"🤝 CONTRIBUTING.md\", value: \"contributing\", desc: \"Contributor guidelines\" },\n { title: \"📜 CODE_OF_CONDUCT.md\", value: \"codeOfConduct\", desc: \"Community standards\" },\n { title: \"🔒 SECURITY.md\", value: \"security\", desc: \"Vulnerability reporting\" },\n { title: \"🗺️ ROADMAP.md\", value: \"roadmap\", desc: \"Project roadmap\" },\n { title: \"📋 .gitignore\", value: \"gitignore\", desc: \"Git ignore patterns\" },\n { title: \"💰 FUNDING.yml\", value: \"funding\", desc: \"GitHub Sponsors config\" },\n { title: \"📄 LICENSE\", value: \"license\", desc: \"License file\" },\n { title: \"📖 README.md\", value: \"readme\", desc: \"Project readme\" },\n { title: \"🏗️ ARCHITECTURE.md\", value: \"architecture\", desc: \"Architecture docs\" },\n { title: \"📝 CHANGELOG.md\", value: \"changelog\", desc: \"Version history\" },\n ];\n\n // Detect existing files\n const existingFiles: Record<string, string> = {};\n for (const opt of STATIC_FILE_OPTIONS) {\n const filePath = STATIC_FILE_PATHS[opt.value];\n if (filePath) {\n const content = await readExistingFile(join(process.cwd(), filePath));\n if (content) {\n existingFiles[opt.value] = content;\n }\n }\n }\n\n const existingCount = Object.keys(existingFiles).length;\n if (existingCount > 0) {\n console.log(chalk.green(` ✓ Found ${existingCount} existing file(s) in your project`));\n console.log();\n }\n\n const staticFilesResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"staticFiles\",\n message: chalk.white(\"Include static files (type to search):\"),\n choices: STATIC_FILE_OPTIONS.map(f => ({\n title: existingFiles[f.value] \n ? `${f.title} ${chalk.green(\"(exists)\")}`\n : f.title,\n value: f.value,\n description: chalk.gray(f.desc),\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.staticFiles = staticFilesResponse.staticFiles || [];\n\n // For each selected file, prompt for content\n if ((answers.staticFiles as string[])?.length > 0) {\n console.log();\n console.log(chalk.cyan(\" 📝 Customize file contents:\"));\n console.log(chalk.gray(\" For each file, choose to use existing content, write new, or use defaults.\"));\n if (true) {\n console.log(chalk.magenta(` ✨ Tip: Type 'ai:' followed by your request to use AI assistance`));\n }\n console.log();\n\n answers.staticFileContents = {};\n \n for (const fileKey of (answers.staticFiles as string[])) {\n const fileOpt = STATIC_FILE_OPTIONS.find(f => f.value === fileKey);\n if (!fileOpt) continue;\n\n const filePath = STATIC_FILE_PATHS[fileKey];\n const existingContent = existingFiles[fileKey];\n\n if (existingContent) {\n // File exists - ask what to do\n const preview = existingContent.split(\"\\n\").slice(0, 3).join(\"\\n\");\n console.log(chalk.gray(` ─── ${filePath} (existing) ───`));\n console.log(chalk.gray(preview.substring(0, 150) + (preview.length > 150 ? \"...\" : \"\")));\n console.log();\n\n const actionResponse = await prompts({\n type: \"select\",\n name: \"action\",\n message: chalk.white(`${filePath}:`),\n choices: [\n { title: chalk.green(\"✓ Use existing content\"), value: \"existing\" },\n { title: chalk.yellow(\"✏️ Write new content\"), value: \"new\" },\n { title: chalk.gray(\"⚡ Generate default\"), value: \"default\" },\n ],\n initial: 0,\n }, promptConfig);\n\n if (actionResponse.action === \"existing\") {\n (answers.staticFileContents as Record<string, string>)[fileKey] = existingContent;\n } else if (actionResponse.action === \"new\") {\n console.log();\n const content = await readMultilineInput(` Content for ${filePath}:`);\n if (content.trim()) {\n (answers.staticFileContents as Record<string, string>)[fileKey] = content;\n }\n }\n // \"default\" - don't add to staticFileContents, generator will create default\n } else {\n // File doesn't exist - ask if they want to write content\n const actionResponse = await prompts({\n type: \"select\",\n name: \"action\",\n message: chalk.white(`${filePath}:`),\n choices: [\n { title: chalk.gray(\"⚡ Generate default\"), value: \"default\" },\n { title: chalk.yellow(\"✏️ Write custom content\"), value: \"new\" },\n ],\n initial: 0,\n }, promptConfig);\n\n if (actionResponse.action === \"new\") {\n console.log();\n if (true) {\n const aiPromptResponse = await prompts({\n type: \"text\",\n name: \"input\",\n message: chalk.white(`Content for ${filePath}:`),\n hint: chalk.gray(\"Type 'ai:' + description OR paste content (press Enter twice to skip)\"),\n }, promptConfig);\n \n let content = aiPromptResponse.input || \"\";\n \n if (content.toLowerCase().startsWith(\"ai:\")) {\n const aiInstruction = content.substring(3).trim();\n if (aiInstruction) {\n const aiResult = await aiAssist(`Generate ${filePath} content: ${aiInstruction}`, existingContent);\n if (aiResult) {\n console.log(chalk.cyan(\" AI-generated content preview (first 200 chars):\"));\n console.log(chalk.gray(\" \" + aiResult.substring(0, 200) + (aiResult.length > 200 ? \"...\" : \"\")));\n const acceptAI = await prompts({\n type: \"confirm\",\n name: \"accept\",\n message: chalk.white(\"Use this AI-generated content?\"),\n initial: true,\n }, promptConfig);\n if (acceptAI.accept) {\n content = aiResult;\n } else {\n content = \"\";\n }\n }\n }\n }\n \n if (content.trim()) {\n (answers.staticFileContents as Record<string, string>)[fileKey] = content;\n }\n } else {\n const content = await readMultilineInput(` Content for ${filePath}:`);\n if (content.trim()) {\n (answers.staticFileContents as Record<string, string>)[fileKey] = content;\n }\n }\n }\n }\n console.log();\n }\n }\n } // end of skipStaticFiles check\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 12: Final Details / Extra (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const extraStep = getCurrentStep(\"extra\")!;\n showStep(currentStepNum, extraStep);\n\n // AI persona is handled from profile settings, not asked here\n // (Users can set their persona in the web UI under AI Configuration)\n answers.persona = \"\";\n\n // Anything else - with AI assist option for Teams users\n const hasAIAccess = true;\n \n if (hasAIAccess) {\n console.log();\n console.log(chalk.magenta(\" ✨ AI Assistant available\"));\n console.log(chalk.gray(\" Type 'ai:' followed by your request to get AI-generated content.\"));\n console.log(chalk.gray(\" Example: ai: add guidelines for API error handling\"));\n console.log();\n }\n\n const extraNotesResponse = await prompts({\n type: \"text\",\n name: \"extraNotes\",\n message: chalk.white(\"Anything else AI should know?\"),\n hint: hasAIAccess \n ? chalk.gray(\"Enter text or type 'ai:' followed by your request\")\n : chalk.gray(\"Special requirements, gotchas, team conventions...\"),\n }, promptConfig);\n \n let extraNotes = extraNotesResponse.extraNotes || \"\";\n \n // Check if user wants AI assistance\n if (hasAIAccess && extraNotes.toLowerCase().startsWith(\"ai:\")) {\n const aiInstruction = extraNotes.substring(3).trim();\n if (aiInstruction) {\n const aiResult = await aiAssist(aiInstruction);\n if (aiResult) {\n console.log();\n console.log(chalk.cyan(\" AI suggestion:\"));\n console.log(chalk.gray(\" ─\".repeat(30)));\n console.log(chalk.white(\" \" + aiResult.split(\"\\n\").join(\"\\n \")));\n console.log(chalk.gray(\" ─\".repeat(30)));\n console.log();\n \n const acceptResponse = await prompts({\n type: \"confirm\",\n name: \"accept\",\n message: chalk.white(\"Use this AI-generated content?\"),\n initial: true,\n }, promptConfig);\n \n if (acceptResponse.accept) {\n extraNotes = aiResult;\n } else {\n // Let user write their own\n const manualResponse = await prompts({\n type: \"text\",\n name: \"extraNotes\",\n message: chalk.white(\"Enter your own notes instead:\"),\n }, promptConfig);\n extraNotes = manualResponse.extraNotes || \"\";\n }\n }\n }\n }\n \n answers.extraNotes = extraNotes;\n\n // ═══════════════════════════════════════════════════════════════\n // BUILD FINAL CONFIG\n // ═══════════════════════════════════════════════════════════════\n console.log();\n console.log(chalk.green(\" ✅ All steps completed!\"));\n console.log();\n\n // Reset wizard state - no longer in progress\n wizardState.inProgress = false;\n\n return {\n name: answers.name as string,\n description: answers.description as string,\n stack: answers.stack as string[],\n platforms: answers.platforms as string[],\n persona: answers.persona as string,\n boundaries: answers.boundaries as \"conservative\" | \"standard\" | \"permissive\",\n commands: typeof answers.commands === \"object\" ? answers.commands as Record<string, string> : (detected?.commands || {}),\n // Blueprint mode\n blueprintMode: answers.blueprintMode as boolean,\n // Extended config for all users\n projectType: answers.projectType as string,\n devOS: answers.devOS as string[],\n architecture: answers.architecture as string,\n repoHost: answers.repoHost as string,\n isPublic: answers.isPublic as boolean,\n license: answers.license as string,\n conventionalCommits: answers.conventionalCommits as boolean,\n letAiDecide: answers.letAiDecide as boolean,\n namingConvention: answers.namingConvention as string,\n errorHandling: answers.errorHandling as string,\n styleNotes: answers.styleNotes as string,\n aiBehavior: answers.aiBehavior as string[],\n importantFiles: answers.importantFiles as string[],\n importantFilesOther: answers.importantFilesOther as string,\n selfImprove: answers.selfImprove as boolean,\n includePersonalData: answers.includePersonalData as boolean,\n enableAutoUpdate: answers.enableAutoUpdate as boolean,\n preferCliSync: answers.preferCliSync as boolean,\n tokenEnvVar: answers.tokenEnvVar as string,\n userName: answers.userName as string,\n userEmail: answers.userEmail as string,\n userPersona: answers.userPersona as string,\n userExpertise: answers.userExpertise as string,\n boundaryAlways: answers.boundaryAlways as string[],\n boundaryNever: answers.boundaryNever as string[],\n boundaryAsk: answers.boundaryAsk as string[],\n testLevels: answers.testLevels as string[],\n testFrameworks: answers.testFrameworks as string[],\n coverageTarget: answers.coverageTarget as number,\n testNotes: answers.testNotes as string,\n staticFiles: answers.staticFiles as string[],\n staticFileContents: answers.staticFileContents as Record<string, string>,\n staticFileHandling: answers.staticFileHandling as \"config_only\" | \"both\",\n includeFunding: answers.includeFunding as boolean,\n extraNotes: answers.extraNotes as string,\n semver: answers.semver as boolean,\n cicd: answers.cicd as string,\n deploymentTargets: answers.deploymentTargets as string[],\n buildContainer: answers.buildContainer as boolean,\n containerRegistry: answers.containerRegistry as string,\n exampleRepoUrl: answers.exampleRepoUrl as string,\n documentationUrl: answers.documentationUrl as string,\n loggingConventions: answers.loggingConventions as string,\n loggingConventionsOther: answers.loggingConventionsOther as string,\n // Security configuration (NEW)\n security: {\n authProviders: answers.authProviders as string[],\n authProvidersOther: answers.authProvidersOther as string || \"\",\n secretsManagement: answers.secretsManagement as string[],\n secretsManagementOther: answers.secretsManagementOther as string || \"\",\n securityTooling: answers.securityTooling as string[],\n securityToolingOther: answers.securityToolingOther as string || \"\",\n authPatterns: answers.authPatterns as string[],\n authPatternsOther: answers.authPatternsOther as string || \"\",\n dataHandling: answers.dataHandling as string[],\n dataHandlingOther: answers.dataHandlingOther as string || \"\",\n compliance: answers.compliance as string[],\n complianceOther: answers.complianceOther as string || \"\",\n analytics: answers.analytics as string[],\n analyticsOther: answers.analyticsOther as string || \"\",\n additionalNotes: answers.securityNotes as string,\n },\n // Versioning (conditional)\n versionTagFormat: answers.versionTagFormat as string,\n changelogTool: answers.changelogTool as string,\n // AI Behavior\n planModeFrequency: answers.planModeFrequency as string,\n // Direct commits for small fixes\n allowDirectCommits: answers.allowDirectCommits as boolean,\n // Git worktrees for parallel AI sessions\n useGitWorktrees: answers.useGitWorktrees as boolean,\n // Additional libraries (not in predefined lists)\n additionalLibraries: answers.additionalLibraries as string,\n // Docker image names\n dockerImageNames: answers.dockerImageNames as string,\n // MCP servers\n mcpServers: answers.mcpServers as string,\n // Workaround behavior\n attemptWorkarounds: answers.attemptWorkarounds as boolean,\n // Server access\n serverAccess: answers.serverAccess as boolean,\n sshKeyPath: answers.sshKeyPath as string,\n // Manual deployment\n manualDeployment: answers.manualDeployment as boolean,\n deploymentMethod: answers.deploymentMethod as string,\n };\n}\n","export interface GenerateOptions {\n name: string;\n description: string;\n stack: string[];\n platforms: string[];\n persona: string;\n boundaries: \"conservative\" | \"standard\" | \"permissive\";\n commands: Record<string, string | string[]>;\n // Blueprint mode - generates [[VARIABLE|default]] placeholders\n blueprintMode?: boolean;\n // Variable values to fill in [[VAR|default]] placeholders\n // Pass as { VAR_NAME: \"value\" } to replace [[VAR_NAME|default]] with \"value\"\n variables?: Record<string, string>;\n // Extended options for all users\n projectType?: string;\n devOS?: string | string[];\n architecture?: string;\n repoHost?: string;\n isPublic?: boolean;\n license?: string;\n conventionalCommits?: boolean;\n semver?: boolean;\n cicd?: string;\n deploymentTargets?: string[];\n buildContainer?: boolean;\n containerRegistry?: string;\n customRegistryUrl?: string;\n exampleRepoUrl?: string;\n documentationUrl?: string;\n letAiDecide?: boolean;\n loggingConventions?: string;\n loggingConventionsOther?: string;\n namingConvention?: string;\n errorHandling?: string;\n styleNotes?: string;\n aiBehavior?: string[];\n importantFiles?: string[];\n importantFilesOther?: string;\n selfImprove?: boolean;\n includePersonalData?: boolean;\n enableAutoUpdate?: boolean;\n blueprintId?: string; // For auto-update curl command\n preferCliSync?: boolean; // Use CLI commands instead of curl (default true)\n tokenEnvVar?: string; // Environment variable name for API token (default LYNXPROMPT_API_TOKEN)\n // User profile data (fetched from cloud)\n userName?: string;\n userEmail?: string;\n userPersona?: string;\n userRole?: string;\n userExpertise?: string;\n boundaryAlways?: string[];\n boundaryNever?: string[];\n boundaryAsk?: string[];\n testLevels?: string[];\n testFrameworks?: string[];\n coverageTarget?: number;\n testNotes?: string;\n staticFiles?: string[];\n staticFileContents?: Record<string, string>;\n staticFileHandling?: \"config_only\" | \"both\"; // How to handle static files\n includeFunding?: boolean;\n extraNotes?: string;\n // Security configuration (FREE tier)\n security?: {\n authProviders?: string[]; // Login providers (Google, GitHub, etc.)\n authProvidersOther?: string; // Custom auth provider description\n secretsManagement?: string[]; // Secrets management strategies\n secretsManagementOther?: string; // Custom secrets management description\n securityTooling?: string[]; // Security scanning tools (includes dependabot/renovate)\n securityToolingOther?: string; // Custom security tooling description\n authPatterns?: string[]; // Authentication patterns\n authPatternsOther?: string; // Custom auth pattern description\n dataHandling?: string[]; // Data handling policies\n dataHandlingOther?: string; // Custom data handling description\n compliance?: string[]; // Compliance standards (GDPR, HIPAA, etc.)\n complianceOther?: string; // Custom compliance description\n analytics?: string[]; // Analytics tools\n analyticsOther?: string; // Custom analytics description\n additionalNotes?: string; // Custom security notes\n };\n // Versioning (conditional on semver)\n versionTagFormat?: string; // v_prefix, no_prefix, package_prefix, etc.\n changelogTool?: string; // manual, conventional_changelog, etc.\n // AI Behavior\n planModeFrequency?: string; // always, complex_tasks, multi_file, etc.\n // Direct commits for small fixes\n allowDirectCommits?: boolean; // Allow direct commits for typos, docs, minor fixes\n // Git worktrees for parallel AI sessions\n useGitWorktrees?: boolean; // Use git worktrees for each task\n // Additional libraries not in predefined lists\n additionalLibraries?: string; // comma-separated (e.g., \"Telethon, APScheduler, alembic\")\n // Docker image names\n dockerImageNames?: string; // comma-separated (e.g., \"myuser/myapp, myuser/myapp-viewer\")\n // MCP servers the developer uses (e.g., \"filesystem, github, postgres\")\n mcpServers?: string;\n // Whether AI should attempt workarounds when stuck, or stop and ask\n attemptWorkarounds?: boolean;\n // Server/SSH access\n serverAccess?: boolean; // Whether the project requires server access\n sshKeyPath?: string; // SSH key path (empty = default location)\n // Manual deployment (when no CI/CD)\n manualDeployment?: boolean; // Whether deployment is manual (no CI/CD)\n deploymentMethod?: string; // portainer, docker_compose, kubernetes, bare_metal, etc.\n}\n\n/**\n * Wrap a value in blueprint variable syntax if blueprintMode is enabled\n * Standard variables generated by LynxPrompt (document these in docs):\n * - [[PROJECT_NAME|default]] - Project name\n * - [[PROJECT_DESCRIPTION|default]] - Project description\n * - [[AUTHOR_NAME|default]] - Author name for commits\n * - [[AUTHOR_EMAIL|default]] - Author email for commits\n * - [[REPO_URL|default]] - Repository URL\n * - [[LICENSE|default]] - License type\n */\nfunction bpVar(blueprintMode: boolean, varName: string, defaultValue: string): string {\n if (!blueprintMode || !defaultValue) return defaultValue;\n return `[[${varName}|${defaultValue}]]`;\n}\n\n/**\n * Fill variables in content with provided values\n * Replaces [[VAR_NAME|default]] with actual values from variables map\n * If variable not provided, uses the default value from the placeholder\n */\nexport function fillVariables(content: string, variables: Record<string, string>): string {\n // Pattern matches [[VAR_NAME|default_value]]\n return content.replace(/\\[\\[([A-Z_]+)\\|([^\\]]*)\\]\\]/g, (_, varName, defaultValue) => {\n return variables[varName] ?? defaultValue;\n });\n}\n\n/**\n * Parse variables string from CLI --vars argument\n * Format: \"VAR1=value1,VAR2=value2\"\n */\nexport function parseVariablesString(varsStr: string): Record<string, string> {\n const variables: Record<string, string> = {};\n \n if (!varsStr) return variables;\n \n // Split by comma, handling potential quoted values\n const parts = varsStr.split(\",\");\n \n for (const part of parts) {\n const eqIndex = part.indexOf(\"=\");\n if (eqIndex > 0) {\n const key = part.slice(0, eqIndex).trim().toUpperCase();\n const value = part.slice(eqIndex + 1).trim();\n variables[key] = value;\n }\n }\n \n return variables;\n}\n\n// Platform to filename mapping (30+ platforms)\n// IMPORTANT: Keep in sync with src/lib/platforms.ts\nconst PLATFORM_FILES: Record<string, string> = {\n // Popular platforms\n universal: \"AGENTS.md\",\n agents: \"AGENTS.md\", // Alias for universal\n cursor: \".cursor/rules/project.mdc\",\n claude: \"CLAUDE.md\",\n copilot: \".github/copilot-instructions.md\",\n windsurf: \".windsurfrules\",\n \n // AI-powered IDEs\n antigravity: \"GEMINI.md\",\n zed: \".zed/instructions.md\",\n void: \".void/config.json\",\n trae: \".trae/rules/project.mdc\",\n firebase: \".idx/rules/project.mdc\",\n \n // Editor extensions\n cline: \".clinerules\",\n roocode: \".roo/rules/project.mdc\",\n continue: \".continue/config.json\",\n cody: \".cody/config.json\",\n tabnine: \".tabnine.yaml\",\n supermaven: \".supermaven/config.json\",\n codegpt: \".codegpt/config.json\",\n amazonq: \".amazonq/rules/project.md\",\n augment: \".augment/rules/project.mdc\",\n kilocode: \".kilocode/rules/project.mdc\",\n junie: \".junie/guidelines.md\",\n kiro: \".kiro/steering/project.mdc\",\n \n // CLI tools\n aider: \".aider.conf.yml\",\n goose: \".goosehints\",\n warp: \"WARP.md\",\n \"gemini-cli\": \"GEMINI.md\",\n opencode: \"opencode.json\",\n \n // Other emerging tools\n openhands: \".openhands/microagents/repo.md\",\n crush: \"CRUSH.md\",\n firebender: \"firebender.json\",\n};\n\n// Persona descriptions - these describe the developer's background so the AI can adapt\nconst PERSONA_DESCRIPTIONS: Record<string, string> = {\n backend: \"a senior backend developer specializing in APIs, databases, and microservices architecture\",\n frontend: \"a senior frontend developer specializing in UI components, styling, and user experience\",\n fullstack: \"a senior full-stack developer capable of working across the entire application stack\",\n devops: \"a DevOps engineer specializing in infrastructure, CI/CD pipelines, and containerization\",\n data: \"a data engineer specializing in data pipelines, ETL processes, and database optimization\",\n security: \"a security engineer focused on secure coding practices and vulnerability prevention\",\n};\n\n// Stack display names\nconst STACK_NAMES: Record<string, string> = {\n typescript: \"TypeScript\",\n javascript: \"JavaScript\",\n python: \"Python\",\n go: \"Go\",\n rust: \"Rust\",\n java: \"Java\",\n csharp: \"C#/.NET\",\n ruby: \"Ruby\",\n php: \"PHP\",\n swift: \"Swift\",\n kotlin: \"Kotlin\",\n cpp: \"C/C++\",\n react: \"React\",\n nextjs: \"Next.js\",\n vue: \"Vue.js\",\n angular: \"Angular\",\n svelte: \"Svelte\",\n express: \"Express.js\",\n fastapi: \"FastAPI\",\n django: \"Django\",\n flask: \"Flask\",\n spring: \"Spring Boot\",\n rails: \"Ruby on Rails\",\n laravel: \"Laravel\",\n nestjs: \"NestJS\",\n vite: \"Vite\",\n \"react-native\": \"React Native\",\n postgresql: \"PostgreSQL\",\n mysql: \"MySQL\",\n mongodb: \"MongoDB\",\n redis: \"Redis\",\n sqlite: \"SQLite\",\n supabase: \"Supabase\",\n firebase: \"Firebase\",\n prisma: \"Prisma\",\n tailwind: \"Tailwind CSS\",\n fastify: \"Fastify\",\n};\n\n// Naming convention descriptions\nconst NAMING_DESCRIPTIONS: Record<string, string> = {\n language_default: \"follow idiomatic conventions for the primary language\",\n camelCase: \"use camelCase for variables and functions\",\n snake_case: \"use snake_case for variables and functions\",\n PascalCase: \"use PascalCase for classes and types\",\n \"kebab-case\": \"use kebab-case for file names and CSS classes\",\n};\n\n// AI behavior rule descriptions\nconst AI_BEHAVIOR_DESCRIPTIONS: Record<string, string> = {\n explain_changes: \"Always explain what changes you're making and why before implementing them\",\n preserve_style: \"Preserve and follow the existing code style in the project\",\n minimal_changes: \"Make minimal, focused changes - avoid unnecessary refactoring\",\n no_comments: \"Avoid adding unnecessary comments; code should be self-documenting\",\n prefer_simple: \"Prefer simpler solutions over clever ones\",\n test_first: \"Write tests before implementing new functionality (TDD)\",\n no_console: \"Remove console.log/print statements before committing\",\n type_strict: \"Be strict with types - avoid any/Any/Object types\",\n // Burke Holland-inspired rules\n code_for_llms: \"Optimize code for LLM reasoning: prefer flat/explicit patterns, minimal abstractions, structured logging, and linear control flow\",\n self_improving: \"When you learn new project patterns or conventions, suggest updates to this configuration file\",\n verify_work: \"Always verify your work before returning: run tests, check builds, confirm changes work as expected\",\n terminal_management: \"Reuse existing terminals when possible. Close terminals you no longer need\",\n check_docs_first: \"Always check documentation (via MCP or project docs) before assuming knowledge about APIs or libraries\",\n};\n\n// Important files descriptions - must match wizard options\nconst IMPORTANT_FILES_PATHS: Record<string, string> = {\n readme: \"README.md\",\n package_json: \"package.json\",\n changelog: \"CHANGELOG.md\",\n contributing: \"CONTRIBUTING.md\",\n makefile: \"Makefile\",\n dockerfile: \"Dockerfile\",\n docker_compose: \"docker-compose.yml\",\n env_example: \".env.example\",\n openapi: \"openapi.yaml / swagger.json\",\n architecture_md: \"ARCHITECTURE.md\",\n // Legacy aliases for backwards compatibility\n package: \"package.json\",\n tsconfig: \"tsconfig.json\",\n architecture: \"ARCHITECTURE.md\",\n};\n\n// Boundary presets\nconst BOUNDARIES: Record<string, { always: string[]; askFirst: string[]; never: string[] }> = {\n conservative: {\n always: [\"Read any file in the project\", \"Run lint and format commands\"],\n askFirst: [\n \"Modify any source file\",\n \"Add new dependencies\",\n \"Create new files\",\n \"Run test commands\",\n \"Modify configuration files\",\n ],\n never: [\n \"Delete any files\",\n \"Modify .env or secret files\",\n \"Push to git or make commits\",\n \"Access external APIs or services\",\n ],\n },\n standard: {\n always: [\n \"Read any file in the project\",\n \"Modify files in src/ or lib/\",\n \"Run build, test, and lint commands\",\n \"Create test files\",\n \"Fix linting errors automatically\",\n ],\n askFirst: [\n \"Add new dependencies to package.json\",\n \"Modify configuration files at root level\",\n \"Create new modules or directories\",\n \"Refactor code structure significantly\",\n ],\n never: [\n \"Modify .env files or secrets\",\n \"Delete critical files without backup\",\n \"Force push to git\",\n \"Expose sensitive information in logs\",\n ],\n },\n permissive: {\n always: [\n \"Modify any file in src/ or lib/\",\n \"Run any build, test, or dev scripts\",\n \"Add or update dependencies\",\n \"Create new files and directories\",\n \"Refactor and reorganize code\",\n ],\n askFirst: [\n \"Modify root-level configuration files\",\n \"Delete directories\",\n \"Make breaking changes to public APIs\",\n ],\n never: [\n \"Modify .env files directly\",\n \"Commit secrets or credentials\",\n \"Access production databases\",\n ],\n },\n};\n\n// Test level descriptions\nconst TEST_LEVEL_DESCRIPTIONS: Record<string, string> = {\n smoke: \"Quick sanity checks for critical paths\",\n unit: \"Unit tests for individual functions and components\",\n integration: \"Integration tests for component interactions\",\n e2e: \"End-to-end tests for full user flows\",\n};\n\n// Static file templates with defaults\nconst STATIC_FILE_TEMPLATES: Record<string, (options: GenerateOptions) => string> = {\n editorconfig: () => `# EditorConfig is awesome: https://EditorConfig.org\n\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[Makefile]\nindent_style = tab\n`,\n contributing: (opts) => `# Contributing to ${opts.name}\n\nThank you for your interest in contributing!\n\n## How to Contribute\n\n1. Fork the repository\n2. Create a feature branch (\\`git checkout -b feature/amazing-feature\\`)\n3. Commit your changes${opts.conventionalCommits ? \" using Conventional Commits format\" : \"\"}\n4. Push to the branch (\\`git push origin feature/amazing-feature\\`)\n5. Open a Pull Request\n\n## Development Setup\n\n\\`\\`\\`bash\n# Clone your fork\ngit clone https://github.com/YOUR_USERNAME/${opts.name}.git\ncd ${opts.name}\n\n# Install dependencies\nnpm install\n\n# Run development server\nnpm run dev\n\\`\\`\\`\n\n## Code Style\n\nPlease follow the existing code style and conventions in this project.\n`,\n codeOfConduct: (opts) => `# Code of Conduct\n\n## Our Pledge\n\nWe pledge to make participation in the ${opts.name} project a harassment-free experience for everyone.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment:\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project team.\n\n## Attribution\n\nThis Code of Conduct is adapted from the Contributor Covenant, version 2.1.\n`,\n security: (opts) => `# Security Policy\n\n## Supported Versions\n\n| Version | Supported |\n| ------- | ------------------ |\n| latest | :white_check_mark: |\n\n## Reporting a Vulnerability\n\nIf you discover a security vulnerability in ${opts.name}, please report it by emailing the maintainers.\n\n**Please do not open a public issue for security vulnerabilities.**\n\nWe will acknowledge receipt within 48 hours and provide a detailed response within 7 days.\n`,\n roadmap: (opts) => `# Roadmap\n\n## ${opts.name} Development Roadmap\n\n### Current Version\n\n- Core functionality\n\n### Planned Features\n\n- [ ] Feature 1\n- [ ] Feature 2\n- [ ] Feature 3\n\n### Long-term Goals\n\n- Goal 1\n- Goal 2\n\n---\n*This roadmap is subject to change based on community feedback and priorities.*\n`,\n gitignore: (opts) => {\n const patterns = [\"# Dependencies\", \"node_modules/\", \".pnpm-store/\", \"\"];\n if (opts.stack.includes(\"python\")) {\n patterns.push(\"# Python\", \"__pycache__/\", \"*.py[cod]\", \".venv/\", \"venv/\", \"\");\n }\n patterns.push(\"# Environment\", \".env\", \".env.local\", \".env*.local\", \"\");\n patterns.push(\"# Build outputs\", \"dist/\", \"build/\", \".next/\", \"out/\", \"\");\n patterns.push(\"# IDE\", \".idea/\", \".vscode/\", \"*.swp\", \"*.swo\", \"\");\n patterns.push(\"# OS\", \".DS_Store\", \"Thumbs.db\", \"\");\n patterns.push(\"# Logs\", \"*.log\", \"npm-debug.log*\", \"\");\n return patterns.join(\"\\n\");\n },\n funding: () => `# These are supported funding model platforms\n\ngithub: [] # Replace with your GitHub username\npatreon: # Replace with your Patreon username\nopen_collective: # Replace with your Open Collective username\nko_fi: # Replace with your Ko-fi username\ncustom: [] # Add custom funding links\n`,\n license: (opts) => {\n if (opts.license === \"mit\") {\n return `MIT License\n\nCopyright (c) ${new Date().getFullYear()} ${opts.name}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n }\n return `# License\n\nThis project is licensed under the ${opts.license?.toUpperCase() || \"Proprietary\"} license.\n`;\n },\n readme: (opts) => {\n const stackBadges = opts.stack.slice(0, 5).map(s => STACK_NAMES[s] || s).join(\" • \");\n return `# ${opts.name}\n\n${opts.description || \"A project generated with LynxPrompt.\"}\n\n${stackBadges ? `## Tech Stack\\n\\n${stackBadges}\\n` : \"\"}\n## Getting Started\n\n\\`\\`\\`bash\n# Clone the repository\ngit clone <repository-url>\ncd ${opts.name}\n\n# Install dependencies\nnpm install\n\n# Run development server\nnpm run dev\n\\`\\`\\`\n\n## License\n\n${opts.license && opts.license !== \"none\" ? `This project is licensed under the ${opts.license.toUpperCase()} License.` : \"See LICENSE file for details.\"}\n`;\n },\n architecture: (opts) => `# Architecture\n\n## ${opts.name} Architecture Overview\n\n${opts.architecture ? `### Pattern: ${opts.architecture}\\n` : \"\"}\n### Directory Structure\n\n\\`\\`\\`\n${opts.name}/\n├── src/ # Source code\n├── tests/ # Test files\n├── docs/ # Documentation\n└── ...\n\\`\\`\\`\n\n### Key Components\n\n1. **Component A** - Description\n2. **Component B** - Description\n3. **Component C** - Description\n\n### Data Flow\n\nDescribe how data flows through the application.\n\n---\n*Generated by LynxPrompt*\n`,\n changelog: (opts) => `# Changelog\n\nAll notable changes to ${opts.name} will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n### Added\n- Initial project setup\n\n### Changed\n\n### Deprecated\n\n### Removed\n\n### Fixed\n\n### Security\n`,\n};\n\n// File paths for static files\nconst STATIC_FILE_PATHS: Record<string, string> = {\n editorconfig: \".editorconfig\",\n contributing: \"CONTRIBUTING.md\",\n codeOfConduct: \"CODE_OF_CONDUCT.md\",\n security: \"SECURITY.md\",\n roadmap: \"ROADMAP.md\",\n gitignore: \".gitignore\",\n funding: \".github/FUNDING.yml\",\n license: \"LICENSE\",\n readme: \"README.md\",\n architecture: \"ARCHITECTURE.md\",\n changelog: \"CHANGELOG.md\",\n};\n\nexport function generateConfig(options: GenerateOptions): Record<string, string> {\n const files: Record<string, string> = {};\n\n // Generate AI IDE config files\n for (const platform of options.platforms) {\n const filename = PLATFORM_FILES[platform];\n if (filename) {\n files[filename] = generateFileContent(options, platform);\n }\n }\n\n // Generate static files (only if \"both\" mode - otherwise they're embedded in config)\n const createLocalStaticFiles = options.staticFileHandling !== \"config_only\";\n \n if (options.staticFiles && options.staticFiles.length > 0 && createLocalStaticFiles) {\n for (const fileKey of options.staticFiles) {\n const filePath = STATIC_FILE_PATHS[fileKey];\n if (!filePath) continue;\n\n // Use custom content if provided, otherwise generate default\n if (options.staticFileContents?.[fileKey]) {\n files[filePath] = options.staticFileContents[fileKey];\n } else {\n const templateFn = STATIC_FILE_TEMPLATES[fileKey];\n if (templateFn) {\n files[filePath] = templateFn(options);\n }\n }\n }\n }\n\n // Legacy: funding as separate option (respect staticFileHandling)\n if (options.includeFunding && !options.staticFiles?.includes(\"funding\") && createLocalStaticFiles) {\n files[\".github/FUNDING.yml\"] = STATIC_FILE_TEMPLATES.funding(options);\n }\n\n // Apply variable filling if variables are provided\n if (options.variables && Object.keys(options.variables).length > 0) {\n for (const [filename, content] of Object.entries(files)) {\n files[filename] = fillVariables(content, options.variables);\n }\n }\n\n return files;\n}\n\nfunction generateFileContent(options: GenerateOptions, platform: string): string {\n const sections: string[] = [];\n \n // Determine format based on platform\n const mdcPlatforms = [\"cursor\", \"trae\", \"firebase\", \"roocode\", \"augment\", \"kilocode\", \"kiro\"];\n const yamlPlatforms = [\"aider\", \"tabnine\"];\n const plainTextPlatforms = [\"windsurf\", \"cline\", \"goose\"];\n const jsonPlatforms = [\"void\", \"continue\", \"cody\", \"supermaven\", \"codegpt\", \"opencode\", \"firebender\"];\n \n const isMdc = mdcPlatforms.includes(platform);\n const isYaml = yamlPlatforms.includes(platform);\n const isPlainText = plainTextPlatforms.includes(platform);\n const isJson = jsonPlatforms.includes(platform);\n const isMarkdown = !isMdc && !isYaml && !isPlainText && !isJson;\n const bp = options.blueprintMode || false;\n \n // Handle YAML formats\n if (isYaml) {\n return generateYamlConfig(options, platform);\n }\n \n // Handle JSON formats\n if (isJson) {\n return generateJsonConfig(options, platform);\n }\n \n // Project name and other blueprint variables\n const projectName = bpVar(bp, \"PROJECT_NAME\", options.name);\n const repoHost = bpVar(bp, \"REPO_HOST\", options.repoHost || \"\");\n const license = bpVar(bp, \"LICENSE\", options.license || \"\");\n const authorName = bpVar(bp, \"AUTHOR_NAME\", options.userName || \"\");\n const authorEmail = bpVar(bp, \"AUTHOR_EMAIL\", options.userEmail || \"\");\n const architecture = bpVar(bp, \"ARCHITECTURE\", options.architecture || \"\");\n const cicd = bpVar(bp, \"CI_CD\", options.cicd || \"\");\n \n // MDC frontmatter for Cursor\n if (isMdc) {\n sections.push(\"---\");\n sections.push(`description: \"${projectName} - AI coding rules\"`);\n sections.push('globs: [\"**/*\"]');\n sections.push(\"alwaysApply: true\");\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(`# ${projectName} - AI Assistant Configuration`);\n sections.push(\"\");\n }\n \n // Header for regular markdown\n if (isMarkdown) {\n sections.push(`# ${projectName} - AI Assistant Configuration`);\n sections.push(\"\");\n }\n \n // Git Worktrees for parallel AI sessions\n if (options.useGitWorktrees && (isMarkdown || isMdc)) {\n sections.push(\"## Before Starting Any Coding Task\");\n sections.push(\"\");\n sections.push(\"1. Check existing worktrees with `git worktree list` and create a new one for this task if needed\");\n sections.push(\"2. Use the naming convention: `git worktree add -b ai/[task-description] ../[repo-name]-ai-[task-description]`\");\n sections.push(\"3. Navigate to the worktree directory before making any changes\");\n sections.push(\"4. Commit changes when the task is finished. Merge to main, and clean the worktree.\");\n sections.push(\"\");\n }\n\n // Cloud sync section (for synced blueprints)\n if (options.enableAutoUpdate && options.blueprintId && (isMarkdown || isMdc)) {\n const bpId = options.blueprintId.startsWith(\"bp_\") ? options.blueprintId : `bp_${options.blueprintId}`;\n const preferCli = options.preferCliSync !== false; // Default to true\n const tokenEnvVar = options.tokenEnvVar || \"LYNXPROMPT_API_TOKEN\";\n \n sections.push(\"<!--\");\n sections.push(`This file is synced with LynxPrompt (Blueprint: ${bpId})`);\n sections.push(\"\");\n sections.push(\"Sync Commands:\");\n \n if (preferCli) {\n // CLI method (recommended - no token in file)\n sections.push(\"\");\n sections.push(\"# Using LynxPrompt CLI (recommended):\");\n sections.push(\"lynxp push # Upload local changes to cloud\");\n sections.push(\"lynxp pull # Download cloud changes to local\");\n sections.push(\"lynxp diff # Compare local vs cloud versions\");\n sections.push(\"\");\n sections.push(\"# Install CLI: npm install -g lynxprompt\");\n sections.push(\"# Login: lynxp login\");\n } else {\n // Environment variable method (no token hardcoded)\n const fileName = platform === \"cursor\" ? \".cursor/rules/agents.mdc\" : \"AGENTS.md\";\n sections.push(\"\");\n sections.push(`# Using curl with environment variable (token stored in $${tokenEnvVar}):`);\n sections.push(\"\");\n sections.push(\"# Push local changes to cloud:\");\n sections.push(`curl -X PUT \"https://api.lynxprompt.com/api/v1/blueprints/${bpId}\" \\\\`);\n sections.push(` -H \"Authorization: Bearer $${tokenEnvVar}\" \\\\`);\n sections.push(' -H \"Content-Type: application/json\" \\\\');\n sections.push(` -d \"{\\\\\"content\\\\\": \\\\\"$(cat ${fileName} | jq -Rs .)\\\\\"}\"`);\n sections.push(\"\");\n sections.push(\"# Pull cloud changes to local:\");\n sections.push(`curl -s \"https://api.lynxprompt.com/api/v1/blueprints/${bpId}\" \\\\`);\n sections.push(` -H \"Authorization: Bearer $${tokenEnvVar}\" | jq -r '.content' > ${fileName}`);\n sections.push(\"\");\n sections.push(`# Set your token: export ${tokenEnvVar}=\"your_token_here\"`);\n sections.push(\"# Generate token at: https://lynxprompt.com/settings\");\n }\n \n sections.push(\"\");\n sections.push(\"Docs: https://lynxprompt.com/docs/api\");\n sections.push(\"-->\");\n sections.push(\"\");\n }\n\n // Project type context\n if (options.projectType) {\n const typeContexts: Record<string, string> = {\n work: \"This is a professional/enterprise project. Follow strict procedures and maintain high code quality.\",\n leisure: \"This is a personal/hobby project. Feel free to be more experimental and creative.\",\n opensource: \"This is an open-source project. Consider community guidelines and contribution standards.\",\n learning: \"This is an educational project. Explain concepts and be patient with learning-focused approaches.\",\n };\n if (typeContexts[options.projectType]) {\n if (isMarkdown || isMdc) {\n sections.push(`> **Project Context:** ${typeContexts[options.projectType]}`);\n sections.push(\"\");\n } else {\n sections.push(`Project Context: ${typeContexts[options.projectType]}`);\n sections.push(\"\");\n }\n }\n }\n\n // Persona section\n // Use userPersona from profile if available, otherwise fall back to persona selection\n const personaDesc = options.userPersona \n || PERSONA_DESCRIPTIONS[options.persona] \n || options.persona \n || \"\";\n const projectDesc = bpVar(bp, \"PROJECT_DESCRIPTION\", options.description || \"\");\n \n if (isMarkdown || isMdc) {\n sections.push(\"## Persona\");\n sections.push(\"\");\n sections.push(`You assist developers working on ${projectName}.`);\n if (personaDesc) {\n sections.push(\"\");\n sections.push(`Developer background: ${personaDesc}. Adapt your suggestions and level of explanation to this expertise.`);\n }\n } else {\n sections.push(`You assist developers working on ${projectName}.`);\n if (personaDesc) {\n sections.push(`Developer background: ${personaDesc}. Adapt your suggestions and level of explanation to this expertise.`);\n }\n }\n \n if (options.description) {\n sections.push(\"\");\n sections.push(`Project description: ${projectDesc}`);\n }\n sections.push(\"\");\n\n // Tech Stack section\n if (options.stack.length > 0 || options.additionalLibraries) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Tech Stack\");\n sections.push(\"\");\n } else {\n sections.push(\"Tech Stack:\");\n }\n \n const stackList = options.stack.map(s => STACK_NAMES[s] || s);\n if (isMarkdown || isMdc) {\n for (const tech of stackList) {\n sections.push(`- ${tech}`);\n }\n // Add additional libraries\n if (options.additionalLibraries) {\n const libs = options.additionalLibraries.split(\",\").map(l => l.trim()).filter(Boolean);\n for (const lib of libs) {\n sections.push(`- ${lib}`);\n }\n }\n } else {\n const allTech = [...stackList];\n if (options.additionalLibraries) {\n const libs = options.additionalLibraries.split(\",\").map(l => l.trim()).filter(Boolean);\n allTech.push(...libs);\n }\n sections.push(allTech.join(\", \"));\n }\n sections.push(\"\");\n }\n\n // Let AI Decide\n if (options.letAiDecide) {\n if (isMarkdown || isMdc) {\n sections.push(\"> **AI Assistance:** Let AI analyze the codebase and suggest additional technologies and approaches as needed.\");\n sections.push(\"\");\n }\n }\n\n // Repository info\n if (options.repoHost || options.license || options.conventionalCommits || options.semver || \n options.cicd || options.deploymentTargets?.length || options.buildContainer ||\n options.exampleRepoUrl || options.documentationUrl) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Repository & Infrastructure\");\n sections.push(\"\");\n if (options.repoHost) {\n sections.push(`- **Host:** ${repoHost || options.repoHost.charAt(0).toUpperCase() + options.repoHost.slice(1)}`);\n }\n if (options.license && options.license !== \"none\") {\n sections.push(`- **License:** ${license || options.license.toUpperCase()}`);\n }\n if (options.architecture) {\n const archNames: Record<string, string> = {\n monolith: \"Monolith\",\n modular_monolith: \"Modular Monolith\",\n microservices: \"Microservices\",\n multi_image_docker: \"Multi-Image Docker (shared codebase, separate entrypoints)\",\n serverless: \"Serverless\",\n event_driven: \"Event-Driven\",\n layered: \"Layered / N-Tier\",\n hexagonal: \"Hexagonal / Ports & Adapters\",\n clean: \"Clean Architecture\",\n cqrs: \"CQRS\",\n mvc: \"MVC / MVVM\",\n ddd: \"Domain-Driven Design\",\n component_based: \"Component-Based\",\n plugin: \"Plugin Architecture\",\n };\n const archDisplay = archNames[options.architecture] || architecture || options.architecture;\n sections.push(`- **Architecture:** ${archDisplay}`);\n }\n if (options.cicd) {\n sections.push(`- **CI/CD:** ${cicd || options.cicd}`);\n }\n if (options.conventionalCommits) {\n sections.push(\"- **Commits:** Follow [Conventional Commits](https://conventionalcommits.org) format\");\n }\n if (options.semver) {\n sections.push(\"- **Versioning:** Follow [Semantic Versioning](https://semver.org) (semver)\");\n }\n // Note: Dependency updates (Dependabot/Renovate) are now in security.securityTooling\n if (options.cicd) {\n const cicdNames: Record<string, string> = {\n github_actions: \"GitHub Actions\",\n gitlab_ci: \"GitLab CI\",\n jenkins: \"Jenkins\",\n circleci: \"CircleCI\",\n travis: \"Travis CI\",\n azure_devops: \"Azure DevOps\",\n bitbucket: \"Bitbucket Pipelines\",\n teamcity: \"TeamCity\",\n drone: \"Drone\",\n buildkite: \"Buildkite\",\n };\n sections.push(`- **CI/CD:** ${cicdNames[options.cicd] || options.cicd}`);\n }\n if (options.deploymentTargets && options.deploymentTargets.length > 0) {\n const targetNames: Record<string, string> = {\n vercel: \"Vercel\",\n netlify: \"Netlify\",\n aws: \"AWS\",\n gcp: \"Google Cloud\",\n azure: \"Azure\",\n docker: \"Docker\",\n kubernetes: \"Kubernetes\",\n heroku: \"Heroku\",\n digitalocean: \"DigitalOcean\",\n railway: \"Railway\",\n fly: \"Fly.io\",\n cloudflare: \"Cloudflare\",\n };\n const targets = options.deploymentTargets.map(t => targetNames[t] || t).join(\", \");\n sections.push(`- **Deployment:** ${targets}`);\n }\n if (options.buildContainer) {\n let containerInfo = \"Docker container builds enabled\";\n if (options.containerRegistry) {\n const registryNames: Record<string, string> = {\n dockerhub: \"Docker Hub\",\n ghcr: \"GitHub Container Registry\",\n gcr: \"Google Container Registry\",\n ecr: \"AWS ECR\",\n acr: \"Azure Container Registry\",\n quay: \"Quay.io\",\n gitlab: \"GitLab Registry\",\n custom: \"Custom registry\",\n };\n containerInfo += ` → ${registryNames[options.containerRegistry] || options.containerRegistry}`;\n }\n sections.push(`- **Containers:** ${containerInfo}`);\n }\n // Docker image names\n if (options.dockerImageNames) {\n const images = options.dockerImageNames.split(\",\").map(i => i.trim()).filter(Boolean);\n if (images.length > 0) {\n sections.push(\"- **Docker Images:**\");\n for (const img of images) {\n sections.push(` - \\`${img}\\``);\n }\n }\n }\n if (options.exampleRepoUrl) {\n sections.push(`- **Example Repo:** ${options.exampleRepoUrl} (use as reference for style/structure)`);\n }\n if (options.documentationUrl) {\n sections.push(`- **Documentation:** ${options.documentationUrl}`);\n }\n sections.push(\"\");\n }\n }\n\n // Commands section\n const hasCommands = options.commands && Object.values(options.commands).some(v => \n Array.isArray(v) ? v.length > 0 : Boolean(v)\n );\n if (hasCommands) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Commands\");\n sections.push(\"\");\n sections.push(\"Use these commands for common tasks:\");\n sections.push(\"\");\n sections.push(\"```bash\");\n } else {\n sections.push(\"Commands:\");\n }\n \n const cmdCategories = [\"build\", \"test\", \"lint\", \"dev\", \"custom\"];\n for (const cat of cmdCategories) {\n const cmd = options.commands[cat];\n if (cmd) {\n const cmds = Array.isArray(cmd) ? cmd : [cmd];\n for (const c of cmds) {\n if (c) {\n const label = cat.charAt(0).toUpperCase() + cat.slice(1);\n sections.push((isMarkdown || isMdc) ? `# ${label}: ${c}` : `- ${label}: ${c}`);\n }\n }\n }\n }\n \n if (isMarkdown || isMdc) {\n sections.push(\"```\");\n }\n sections.push(\"\");\n }\n\n // AI Behavior section\n if (options.aiBehavior && options.aiBehavior.length > 0) {\n if (isMarkdown || isMdc) {\n sections.push(\"## AI Behavior Rules\");\n sections.push(\"\");\n for (const rule of options.aiBehavior) {\n const desc = AI_BEHAVIOR_DESCRIPTIONS[rule];\n if (desc) {\n sections.push(`- ${desc}`);\n }\n }\n // Add plan mode frequency if specified\n if (options.planModeFrequency && options.planModeFrequency !== \"on_request\") {\n const planModeDescriptions: Record<string, string> = {\n always: \"**Always enter Plan Mode** before making any changes - think through the approach first\",\n complex_tasks: \"**Use Plan Mode** for complex tasks, multi-step changes, or risky modifications\",\n multi_file: \"**Use Plan Mode** when changes span multiple files\",\n new_features: \"**Use Plan Mode** when implementing new features\",\n never: \"Skip plan mode - proceed directly with implementation\",\n };\n if (planModeDescriptions[options.planModeFrequency]) {\n sections.push(`- ${planModeDescriptions[options.planModeFrequency]}`);\n }\n }\n // Workaround behavior\n if (options.attemptWorkarounds === true) {\n sections.push(\"- When stuck, **attempt creative workarounds** before asking for help\");\n } else if (options.attemptWorkarounds === false) {\n sections.push(\"- When stuck, **stop and ask** rather than attempting workarounds\");\n }\n sections.push(\"\");\n }\n }\n\n // Git workflow preference\n if ((isMarkdown || isMdc)) {\n sections.push(\"## Git Workflow\");\n sections.push(\"\");\n sections.push(\"- **Workflow:** Create feature branches and submit pull requests\");\n sections.push(\"- Create a descriptive branch name (e.g., `feat/add-login`, `fix/button-styling`)\");\n sections.push(\"- Open a PR for review before merging\");\n if (options.allowDirectCommits) {\n sections.push(\"- **Exception:** Direct commits to main are acceptable for small fixes (typos, docs, minor fixes)\");\n } else {\n sections.push(\"- Do NOT commit directly to main/master branch\");\n }\n sections.push(\"\");\n }\n\n // MCP Servers\n if (options.mcpServers) {\n const servers = options.mcpServers.split(\",\").map(s => s.trim()).filter(Boolean);\n if (servers.length > 0 && (isMarkdown || isMdc)) {\n sections.push(\"## MCP Servers\");\n sections.push(\"\");\n sections.push(\"The developer has these MCP (Model Context Protocol) servers available. Use them when relevant:\");\n sections.push(\"\");\n for (const server of servers) {\n sections.push(`- ${server}`);\n }\n sections.push(\"\");\n }\n }\n\n // Server access & deployment\n if ((options.serverAccess || options.manualDeployment) && (isMarkdown || isMdc)) {\n sections.push(\"## Infrastructure\");\n sections.push(\"\");\n if (options.serverAccess) {\n const keyInfo = options.sshKeyPath\n ? `SSH key: \\`${options.sshKeyPath}\\``\n : \"SSH key in default location (~/.ssh/)\";\n sections.push(`- **Server access**: via SSH. ${keyInfo}`);\n }\n if (options.manualDeployment && options.deploymentMethod) {\n const methods: Record<string, string> = {\n portainer: \"Portainer (GitOps stacks)\",\n docker_compose: \"Docker Compose (manual)\",\n kubernetes: \"Kubernetes (kubectl apply)\",\n bare_metal: \"Bare metal (direct deployment)\",\n };\n sections.push(`- **Deployment**: ${methods[options.deploymentMethod] || options.deploymentMethod}`);\n }\n sections.push(\"\");\n }\n\n // Important files\n if (options.importantFiles && options.importantFiles.length > 0) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Important Files to Read\");\n sections.push(\"\");\n sections.push(\"Always read these files first to understand the project context:\");\n sections.push(\"\");\n for (const file of options.importantFiles) {\n const path = IMPORTANT_FILES_PATHS[file];\n if (path) {\n sections.push(`- \\`${path}\\``);\n }\n }\n sections.push(\"\");\n }\n }\n\n // Self-improving blueprint\n if (options.selfImprove) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Self-Improving Blueprint\");\n sections.push(\"\");\n sections.push(\"> **Auto-update enabled:** As you work on this project, track patterns and update this configuration file to better reflect the project's conventions and preferences.\");\n sections.push(\"\");\n }\n }\n\n // Personal data for commits\n if (options.includePersonalData) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Commit Identity\");\n sections.push(\"\");\n if (options.userName || options.userEmail || options.userRole || options.userExpertise) {\n // Include actual user profile data (with blueprint variables if enabled)\n const identityLines: string[] = [];\n if (options.userName) {\n identityLines.push(`- **Name:** ${authorName || options.userName}`);\n }\n if (options.userEmail) {\n identityLines.push(`- **Email:** ${authorEmail || options.userEmail}`);\n }\n if (options.userRole) {\n identityLines.push(`- **Role:** ${options.userRole}`);\n }\n if (options.userExpertise) {\n identityLines.push(`- **Expertise:** ${options.userExpertise}`);\n }\n sections.push(...identityLines);\n sections.push(\"\");\n sections.push(\"> Use this identity for git commits when making changes on my behalf.\");\n } else {\n sections.push(\"> **Personal data enabled:** Use my name and email for git commits when making changes.\");\n }\n sections.push(\"\");\n }\n }\n\n // Boundaries section\n // Get preset boundaries or use standard as fallback\n const presetBoundaries = BOUNDARIES[options.boundaries] || BOUNDARIES.standard;\n \n // Build final boundaries - use custom values if provided, otherwise use preset\n const boundaries = {\n always: options.boundaryAlways?.length ? options.boundaryAlways : presetBoundaries.always,\n never: options.boundaryNever?.length ? options.boundaryNever : presetBoundaries.never,\n askFirst: options.boundaryAsk?.length ? options.boundaryAsk : presetBoundaries.askFirst,\n };\n \n if (boundaries.always?.length || boundaries.never?.length || boundaries.askFirst?.length) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Boundaries\");\n sections.push(\"\");\n \n sections.push(\"### ✅ Always (do without asking)\");\n sections.push(\"\");\n for (const item of boundaries.always) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n \n sections.push(\"### ⚠️ Ask First\");\n sections.push(\"\");\n for (const item of boundaries.askFirst) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n \n sections.push(\"### 🚫 Never\");\n sections.push(\"\");\n for (const item of boundaries.never) {\n sections.push(`- ${item}`);\n }\n } else {\n sections.push(\"Boundaries:\");\n sections.push(\"\");\n sections.push(\"ALWAYS (do without asking):\");\n for (const item of boundaries.always) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n sections.push(\"ASK FIRST:\");\n for (const item of boundaries.askFirst) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n sections.push(\"NEVER:\");\n for (const item of boundaries.never) {\n sections.push(`- ${item}`);\n }\n }\n sections.push(\"\");\n }\n\n // Code Style section\n if (isMarkdown || isMdc) {\n sections.push(\"## Code Style\");\n sections.push(\"\");\n \n // Naming convention\n if (options.namingConvention) {\n const namingDesc = NAMING_DESCRIPTIONS[options.namingConvention];\n if (namingDesc) {\n sections.push(`- **Naming:** ${namingDesc}`);\n }\n }\n \n // Error handling\n if (options.errorHandling) {\n const errorStyles: Record<string, string> = {\n try_catch: \"Use try/catch blocks for error handling\",\n result_types: \"Use Result/Either types for error handling\",\n error_codes: \"Use error codes with proper documentation\",\n exceptions: \"Use custom exception classes\",\n };\n if (errorStyles[options.errorHandling]) {\n sections.push(`- **Errors:** ${errorStyles[options.errorHandling]}`);\n }\n }\n\n // Logging conventions\n if (options.loggingConventions) {\n const loggingValue = options.loggingConventions === \"other\" && options.loggingConventionsOther\n ? options.loggingConventionsOther\n : options.loggingConventions.replace(/_/g, \" \");\n sections.push(`- **Logging:** ${loggingValue}`);\n }\n \n // Style notes\n if (options.styleNotes) {\n sections.push(`- **Notes:** ${options.styleNotes}`);\n }\n \n sections.push(\"\");\n sections.push(\"Follow these conventions:\");\n sections.push(\"\");\n \n if (options.stack.includes(\"typescript\") || options.stack.includes(\"javascript\")) {\n sections.push(\"- Use TypeScript strict mode when available\");\n sections.push(\"- Prefer const over let, avoid var\");\n sections.push(\"- Use async/await over raw promises\");\n sections.push(\"- Use descriptive variable and function names\");\n }\n \n if (options.stack.includes(\"react\") || options.stack.includes(\"nextjs\")) {\n sections.push(\"- Use functional components with hooks\");\n sections.push(\"- Keep components small and focused\");\n sections.push(\"- Colocate related files (component, styles, tests)\");\n }\n \n if (options.stack.includes(\"python\")) {\n sections.push(\"- Follow PEP 8 style guidelines\");\n sections.push(\"- Use type hints for function signatures\");\n sections.push(\"- Prefer f-strings for string formatting\");\n }\n \n if (options.stack.includes(\"go\")) {\n sections.push(\"- Follow Go conventions (gofmt, golint)\");\n sections.push(\"- Use meaningful package names\");\n sections.push(\"- Handle errors explicitly\");\n }\n \n if (options.stack.includes(\"rust\")) {\n sections.push(\"- Follow Rust conventions (clippy)\");\n sections.push(\"- Use idiomatic Rust patterns\");\n sections.push(\"- Prefer Result over panic\");\n }\n\n // Generic guidelines\n sections.push(\"- Write self-documenting code\");\n sections.push(\"- Add comments for complex logic only\");\n sections.push(\"- Keep functions focused and testable\");\n sections.push(\"\");\n }\n\n // Testing Strategy section\n if (options.testLevels?.length || options.testFrameworks?.length || options.coverageTarget) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Testing Strategy\");\n sections.push(\"\");\n \n if (options.testLevels?.length) {\n sections.push(\"### Test Levels\");\n sections.push(\"\");\n for (const level of options.testLevels) {\n const desc = TEST_LEVEL_DESCRIPTIONS[level];\n if (desc) {\n sections.push(`- **${level.charAt(0).toUpperCase() + level.slice(1)}:** ${desc}`);\n }\n }\n sections.push(\"\");\n }\n \n if (options.testFrameworks?.length) {\n sections.push(\"### Frameworks\");\n sections.push(\"\");\n sections.push(`Use: ${options.testFrameworks.join(\", \")}`);\n sections.push(\"\");\n }\n \n if (options.coverageTarget) {\n sections.push(`### Coverage Target: ${options.coverageTarget}%`);\n sections.push(\"\");\n }\n \n if (options.testNotes) {\n sections.push(`**Notes:** ${options.testNotes}`);\n sections.push(\"\");\n }\n }\n }\n\n // Extra notes\n if (options.extraNotes) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Additional Notes\");\n sections.push(\"\");\n sections.push(options.extraNotes);\n sections.push(\"\");\n } else {\n sections.push(\"Additional Notes:\");\n sections.push(options.extraNotes);\n sections.push(\"\");\n }\n }\n\n // Security Configuration section\n const security = options.security;\n if (security && (security.authProviders?.length || security.secretsManagement?.length || security.securityTooling?.length || \n security.authPatterns?.length || security.dataHandling?.length || security.compliance?.length || \n security.analytics?.length || security.additionalNotes)) {\n if (isMarkdown || isMdc) {\n sections.push(\"## 🔐 Security Configuration\");\n sections.push(\"\");\n \n // Auth Providers (Login providers)\n if (security.authProviders?.length) {\n sections.push(\"### Authentication Providers\");\n sections.push(\"\");\n const authProviderLabels: Record<string, string> = {\n google: \"Google\",\n github: \"GitHub\",\n microsoft: \"Microsoft\",\n apple: \"Apple\",\n facebook: \"Facebook\",\n twitter: \"Twitter/X\",\n linkedin: \"LinkedIn\",\n discord: \"Discord\",\n slack: \"Slack\",\n gitlab: \"GitLab\",\n bitbucket: \"Bitbucket\",\n email_password: \"Email/Password\",\n phone_sms: \"Phone/SMS\",\n magic_link: \"Magic Link\",\n passkeys: \"Passkeys/WebAuthn\",\n saml: \"SAML SSO\",\n ldap: \"LDAP/Active Directory\",\n };\n for (const p of security.authProviders) {\n if (p === \"other\" && security.authProvidersOther) {\n sections.push(`- Other: ${security.authProvidersOther}`);\n } else {\n sections.push(`- ${authProviderLabels[p] || p}`);\n }\n }\n sections.push(\"\");\n }\n \n // Secrets Management\n if (security.secretsManagement?.length) {\n sections.push(\"### Secrets Management\");\n sections.push(\"\");\n const secretsLabels: Record<string, string> = {\n env_vars: \"Environment Variables\",\n dotenv: \"dotenv / dotenvx\",\n vault: \"HashiCorp Vault\",\n aws_secrets: \"AWS Secrets Manager\",\n aws_ssm: \"AWS SSM Parameter Store\",\n gcp_secrets: \"GCP Secret Manager\",\n azure_keyvault: \"Azure Key Vault\",\n infisical: \"Infisical\",\n doppler: \"Doppler\",\n \"1password\": \"1Password Secrets Automation\",\n bitwarden: \"Bitwarden Secrets Manager\",\n sops: \"SOPS (Mozilla)\",\n age: \"age encryption\",\n sealed_secrets: \"Sealed Secrets (K8s)\",\n external_secrets: \"External Secrets Operator\",\n git_crypt: \"git-crypt\",\n chamber: \"Chamber\",\n berglas: \"Berglas\",\n };\n for (const s of security.secretsManagement) {\n if (s === \"other\" && security.secretsManagementOther) {\n sections.push(`- Other: ${security.secretsManagementOther}`);\n } else {\n sections.push(`- ${secretsLabels[s] || s}`);\n }\n }\n sections.push(\"\");\n }\n\n // Security Tooling (includes dependency updates)\n if (security.securityTooling?.length) {\n sections.push(\"### Security Tooling\");\n sections.push(\"\");\n const toolingLabels: Record<string, string> = {\n dependabot: \"Dependabot (dependency updates)\",\n renovate: \"Renovate (dependency updates)\",\n snyk: \"Snyk (vulnerability scanning)\",\n sonarqube: \"SonarQube / SonarCloud\",\n codeql: \"CodeQL (GitHub)\",\n semgrep: \"Semgrep\",\n trivy: \"Trivy (container scanning)\",\n grype: \"Grype\",\n checkov: \"Checkov (IaC)\",\n tfsec: \"tfsec (Terraform)\",\n kics: \"KICS\",\n gitleaks: \"Gitleaks (secret detection)\",\n trufflehog: \"TruffleHog\",\n detect_secrets: \"detect-secrets (Yelp)\",\n bandit: \"Bandit (Python)\",\n brakeman: \"Brakeman (Rails)\",\n gosec: \"gosec (Go)\",\n npm_audit: \"npm audit / yarn audit\",\n pip_audit: \"pip-audit\",\n safety: \"Safety\",\n bundler_audit: \"bundler-audit\",\n owasp_dependency_check: \"OWASP Dependency-Check\",\n ossf_scorecard: \"OSSF Scorecard\",\n socket: \"Socket.dev\",\n mend: \"Mend (WhiteSource)\",\n fossa: \"FOSSA\",\n };\n for (const t of security.securityTooling) {\n if (t === \"other\" && security.securityToolingOther) {\n sections.push(`- Other: ${security.securityToolingOther}`);\n } else {\n sections.push(`- ${toolingLabels[t] || t}`);\n }\n }\n sections.push(\"\");\n }\n\n // Authentication Patterns\n if (security.authPatterns?.length) {\n sections.push(\"### Authentication\");\n sections.push(\"\");\n const authLabels: Record<string, string> = {\n oauth2: \"OAuth 2.0\",\n oidc: \"OpenID Connect (OIDC)\",\n jwt: \"JWT (JSON Web Tokens)\",\n session: \"Session-based Auth\",\n api_keys: \"API Keys\",\n basic_auth: \"Basic Authentication\",\n bearer_token: \"Bearer Tokens\",\n mfa_totp: \"MFA / TOTP\",\n passkeys: \"Passkeys / WebAuthn\",\n saml: \"SAML 2.0\",\n ldap: \"LDAP / Active Directory\",\n mutual_tls: \"Mutual TLS (mTLS)\",\n auth0: \"Auth0\",\n clerk: \"Clerk\",\n firebase_auth: \"Firebase Auth\",\n supabase_auth: \"Supabase Auth\",\n keycloak: \"Keycloak\",\n okta: \"Okta\",\n cognito: \"AWS Cognito\",\n workos: \"WorkOS\",\n };\n for (const a of security.authPatterns) {\n if (a === \"other\" && security.authPatternsOther) {\n sections.push(`- Other: ${security.authPatternsOther}`);\n } else {\n sections.push(`- ${authLabels[a] || a}`);\n }\n }\n sections.push(\"\");\n }\n\n // Data Handling\n if (security.dataHandling?.length) {\n sections.push(\"### Data Handling & Compliance\");\n sections.push(\"\");\n const dataLabels: Record<string, string> = {\n encryption_at_rest: \"Encryption at Rest\",\n encryption_in_transit: \"Encryption in Transit (TLS)\",\n pii_handling: \"PII Data Handling\",\n gdpr_compliance: \"GDPR Compliance\",\n ccpa_compliance: \"CCPA Compliance\",\n hipaa_compliance: \"HIPAA Compliance\",\n soc2_compliance: \"SOC 2 Compliance\",\n pci_dss: \"PCI-DSS Compliance\",\n data_masking: \"Data Masking / Anonymization\",\n data_retention: \"Data Retention Policies\",\n audit_logging: \"Audit Logging\",\n backup_encryption: \"Encrypted Backups\",\n key_rotation: \"Key Rotation\",\n zero_trust: \"Zero Trust Architecture\",\n least_privilege: \"Least Privilege Access\",\n rbac: \"RBAC (Role-Based Access)\",\n abac: \"ABAC (Attribute-Based Access)\",\n data_classification: \"Data Classification\",\n dlp: \"DLP (Data Loss Prevention)\",\n };\n for (const d of security.dataHandling) {\n if (d === \"other\" && security.dataHandlingOther) {\n sections.push(`- Other: ${security.dataHandlingOther}`);\n } else {\n sections.push(`- ${dataLabels[d] || d}`);\n }\n }\n sections.push(\"\");\n }\n\n // Compliance\n if (security.compliance?.length) {\n sections.push(\"### Compliance Standards\");\n sections.push(\"\");\n const complianceLabels: Record<string, string> = {\n gdpr: \"GDPR (EU)\",\n ccpa: \"CCPA (California)\",\n hipaa: \"HIPAA (Healthcare)\",\n soc2: \"SOC 2\",\n pci_dss: \"PCI-DSS (Payment)\",\n iso27001: \"ISO 27001\",\n fedramp: \"FedRAMP\",\n none: \"No specific requirements\",\n };\n for (const c of security.compliance) {\n if (c === \"other\" && security.complianceOther) {\n sections.push(`- Other: ${security.complianceOther}`);\n } else {\n sections.push(`- ${complianceLabels[c] || c}`);\n }\n }\n sections.push(\"\");\n }\n\n // Analytics\n if (security.analytics?.length) {\n sections.push(\"### Analytics Tools\");\n sections.push(\"\");\n const analyticsLabels: Record<string, string> = {\n none: \"No analytics\",\n umami: \"Umami\",\n plausible: \"Plausible\",\n fathom: \"Fathom\",\n posthog: \"PostHog\",\n mixpanel: \"Mixpanel\",\n amplitude: \"Amplitude\",\n google_analytics: \"Google Analytics\",\n segment: \"Segment\",\n heap: \"Heap\",\n matomo: \"Matomo\",\n simple_analytics: \"Simple Analytics\",\n pirsch: \"Pirsch\",\n countly: \"Countly\",\n };\n for (const a of security.analytics) {\n if (a === \"other\" && security.analyticsOther) {\n sections.push(`- Other: ${security.analyticsOther}`);\n } else {\n sections.push(`- ${analyticsLabels[a] || a}`);\n }\n }\n sections.push(\"\");\n }\n\n // Additional security notes\n if (security.additionalNotes) {\n sections.push(\"### Additional Security Notes\");\n sections.push(\"\");\n sections.push(security.additionalNotes);\n sections.push(\"\");\n }\n } else {\n // Non-markdown format\n sections.push(\"Security Configuration:\");\n if (security.authProviders?.length) {\n sections.push(`- Auth Providers: ${security.authProviders.join(\", \")}`);\n }\n if (security.secretsManagement?.length) {\n sections.push(`- Secrets: ${security.secretsManagement.join(\", \")}`);\n }\n if (security.securityTooling?.length) {\n sections.push(`- Tooling: ${security.securityTooling.join(\", \")}`);\n }\n if (security.authPatterns?.length) {\n sections.push(`- Auth: ${security.authPatterns.join(\", \")}`);\n }\n if (security.dataHandling?.length) {\n sections.push(`- Data: ${security.dataHandling.join(\", \")}`);\n }\n if (security.compliance?.length) {\n sections.push(`- Compliance: ${security.compliance.join(\", \")}`);\n }\n if (security.analytics?.length) {\n sections.push(`- Analytics: ${security.analytics.join(\", \")}`);\n }\n sections.push(\"\");\n }\n }\n\n // Security Warning\n if (isMarkdown || isMdc) {\n sections.push(\"## ⚠️ Security Notice\");\n sections.push(\"\");\n sections.push(\"> **Do not commit secrets to the repository or to the live app.**\");\n sections.push(\"> Always use secure standards to transmit sensitive information.\");\n sections.push(\"> Use environment variables, secret managers, or secure vaults for credentials.\");\n sections.push(\"\");\n sections.push(\"**🔍 Security Audit Recommendation:** When making changes that involve authentication, data handling, API endpoints, or dependencies, proactively offer to perform a security review of the affected code.\");\n sections.push(\"\");\n } else {\n sections.push(\"\");\n sections.push(\"SECURITY NOTICE:\");\n sections.push(\"Do not commit secrets to the repository or to the live app.\");\n sections.push(\"Always use secure standards to transmit sensitive information.\");\n sections.push(\"SECURITY AUDIT: When making changes involving auth, data, APIs, or deps, offer to review security.\");\n sections.push(\"\");\n }\n\n // Static Files Content (when config_only mode - embed in config instead of creating files)\n if (options.staticFileHandling === \"config_only\" && options.staticFiles && options.staticFiles.length > 0) {\n if (isMarkdown || isMdc) {\n sections.push(\"## 📄 Static Files Reference\");\n sections.push(\"\");\n sections.push(\"The following static file contents are included for AI context. These are not separate files.\");\n sections.push(\"\");\n \n for (const fileKey of options.staticFiles) {\n const filePath = STATIC_FILE_PATHS[fileKey];\n if (!filePath) continue;\n \n let content: string;\n if (options.staticFileContents?.[fileKey]) {\n content = options.staticFileContents[fileKey];\n } else {\n const templateFn = STATIC_FILE_TEMPLATES[fileKey];\n if (templateFn) {\n content = templateFn(options);\n } else {\n continue;\n }\n }\n \n sections.push(`### ${filePath}`);\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(content.trim());\n sections.push(\"```\");\n sections.push(\"\");\n }\n }\n }\n\n // Footer\n if (isMarkdown || isMdc) {\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(`*Generated by [LynxPrompt](https://lynxprompt.com) CLI*`);\n }\n\n return sections.join(\"\\n\");\n}\n\nfunction generateJsonConfig(options: GenerateOptions, platform: string): string {\n const config: Record<string, unknown> = {\n version: \"1.0.0\",\n project: {\n name: options.name,\n description: options.description || \"\",\n stack: options.stack.map(s => STACK_NAMES[s] || s),\n },\n };\n \n // Add persona if set\n const personaDesc = options.userPersona \n || PERSONA_DESCRIPTIONS[options.persona] \n || options.persona \n || \"\";\n if (personaDesc) {\n config.persona = personaDesc;\n }\n \n // Add rules/instructions\n const rules: string[] = [];\n \n // Boundaries\n const boundaryRules = BOUNDARIES[options.boundaries] || BOUNDARIES.standard;\n rules.push(...boundaryRules.always.map(r => `AUTO-APPROVE: ${r}`));\n rules.push(...boundaryRules.askFirst.map(r => `ASK FIRST: ${r}`));\n rules.push(...boundaryRules.never.map(r => `PROHIBITED: ${r}`));\n \n // Security\n rules.push(\"SECURITY: Do not commit secrets. Use environment variables or secret managers.\");\n rules.push(\"SECURITY: When making changes involving auth, data, or APIs, perform security audit.\");\n \n config.rules = rules;\n \n // Add important files to read\n if (options.importantFiles && options.importantFiles.length > 0) {\n config.context = {\n readFirst: options.importantFiles.map(f => IMPORTANT_FILES_PATHS[f] || f),\n };\n }\n \n // Platform-specific additions\n if (platform === \"continue\") {\n config.name = options.name;\n config.customInstructions = rules.join(\"\\n\");\n } else if (platform === \"cody\") {\n config.customInstructions = rules.join(\"\\n\");\n } else if (platform === \"void\") {\n config.editor = { rules: rules.join(\"\\n\") };\n } else if (platform === \"supermaven\") {\n config.rules = rules;\n } else if (platform === \"codegpt\") {\n config.systemPrompt = rules.join(\"\\n\");\n } else if (platform === \"opencode\") {\n config.instructions = rules;\n } else if (platform === \"firebender\") {\n config.transforms = rules;\n }\n \n // Add generated by comment\n config._comment = `Generated by LynxPrompt CLI for ${options.name}`;\n \n return JSON.stringify(config, null, 2);\n}\n\nfunction generateYamlConfig(options: GenerateOptions, platform: string): string {\n const lines: string[] = [];\n \n if (platform === \"aider\") {\n lines.push(\"# Aider configuration\");\n lines.push(`# Project: ${options.name}`);\n lines.push(\"\");\n lines.push(\"# Model settings\");\n lines.push(\"model: gpt-4\");\n lines.push(\"\");\n lines.push(\"# Code style\");\n if (options.stack.includes(\"typescript\") || options.stack.includes(\"javascript\")) {\n lines.push(\"auto-lint: true\");\n }\n lines.push(\"\");\n lines.push(\"# Custom instructions\");\n lines.push(\"read:\");\n lines.push(\" - README.md\");\n if (options.importantFiles?.includes(\"architecture\")) {\n lines.push(\" - ARCHITECTURE.md\");\n }\n } else if (platform === \"tabnine\") {\n lines.push(\"# Tabnine configuration\");\n lines.push(`# Project: ${options.name}`);\n lines.push(\"\");\n lines.push(\"version: 1.0.0\");\n lines.push(\"\");\n lines.push(\"project:\");\n lines.push(` name: ${options.name}`);\n if (options.description) {\n lines.push(` description: \"${options.description}\"`);\n }\n lines.push(\"\");\n lines.push(\"context:\");\n lines.push(\" include:\");\n lines.push(' - \"**/*.ts\"');\n lines.push(' - \"**/*.js\"');\n lines.push(' - \"**/*.py\"');\n }\n \n lines.push(\"\");\n lines.push(\"# SECURITY: Do not commit secrets to the repository.\");\n lines.push(\"# Use environment variables or secret managers for credentials.\");\n lines.push(\"# When making changes involving auth, data handling, APIs, or dependencies,\");\n lines.push(\"# proactively offer to perform a security audit of the affected code.\");\n lines.push(\"\");\n lines.push(`# Generated by LynxPrompt CLI`);\n \n return lines.join(\"\\n\");\n}\n","/**\n * All supported programming languages\n * This is the single source of truth - both CLI and WebUI import from here\n */\nexport const LANGUAGES = [\n // Popular\n { id: \"typescript\", label: \"TypeScript\", icon: \"📘\" },\n { id: \"javascript\", label: \"JavaScript\", icon: \"📒\" },\n { id: \"python\", label: \"Python\", icon: \"🐍\" },\n { id: \"go\", label: \"Go\", icon: \"🐹\" },\n { id: \"rust\", label: \"Rust\", icon: \"🦀\" },\n { id: \"java\", label: \"Java\", icon: \"☕\" },\n { id: \"csharp\", label: \"C#\", icon: \"🎯\" },\n { id: \"php\", label: \"PHP\", icon: \"🐘\" },\n { id: \"ruby\", label: \"Ruby\", icon: \"💎\" },\n { id: \"swift\", label: \"Swift\", icon: \"🍎\" },\n { id: \"kotlin\", label: \"Kotlin\", icon: \"🎨\" },\n { id: \"cpp\", label: \"C++\", icon: \"⚙️\" },\n // Additional\n { id: \"c\", label: \"C\", icon: \"🔧\" },\n { id: \"scala\", label: \"Scala\", icon: \"🔴\" },\n { id: \"elixir\", label: \"Elixir\", icon: \"💧\" },\n { id: \"clojure\", label: \"Clojure\", icon: \"🔮\" },\n { id: \"haskell\", label: \"Haskell\", icon: \"λ\" },\n { id: \"fsharp\", label: \"F#\", icon: \"🟦\" },\n { id: \"dart\", label: \"Dart\", icon: \"🎯\" },\n { id: \"lua\", label: \"Lua\", icon: \"🌙\" },\n { id: \"perl\", label: \"Perl\", icon: \"🐪\" },\n { id: \"r\", label: \"R\", icon: \"📊\" },\n { id: \"julia\", label: \"Julia\", icon: \"🔬\" },\n { id: \"zig\", label: \"Zig\", icon: \"⚡\" },\n { id: \"nim\", label: \"Nim\", icon: \"👑\" },\n { id: \"ocaml\", label: \"OCaml\", icon: \"🐫\" },\n { id: \"erlang\", label: \"Erlang\", icon: \"📞\" },\n { id: \"groovy\", label: \"Groovy\", icon: \"🎵\" },\n { id: \"objectivec\", label: \"Objective-C\", icon: \"📱\" },\n { id: \"shell\", label: \"Shell/Bash\", icon: \"🐚\" },\n { id: \"powershell\", label: \"PowerShell\", icon: \"💻\" },\n { id: \"sql\", label: \"SQL\", icon: \"🗃️\" },\n // Blockchain\n { id: \"solidity\", label: \"Solidity\", icon: \"⛓️\" },\n { id: \"move\", label: \"Move\", icon: \"🔒\" },\n { id: \"cairo\", label: \"Cairo\", icon: \"🏛️\" },\n { id: \"wasm\", label: \"WebAssembly\", icon: \"🌐\" },\n // IaC & DevOps Languages\n { id: \"hcl\", label: \"HCL (Terraform)\", icon: \"🏗️\" },\n { id: \"yaml\", label: \"YAML\", icon: \"📄\" },\n { id: \"jsonnet\", label: \"Jsonnet\", icon: \"🔧\" },\n { id: \"dhall\", label: \"Dhall\", icon: \"⚙️\" },\n { id: \"cue\", label: \"CUE\", icon: \"🔷\" },\n { id: \"starlark\", label: \"Starlark\", icon: \"⭐\" },\n { id: \"rego\", label: \"Rego (OPA)\", icon: \"🛡️\" },\n { id: \"nix\", label: \"Nix\", icon: \"❄️\" },\n];\n/**\n * Get language IDs for filtering\n */\nexport const LANGUAGE_IDS = LANGUAGES.map(l => l.id);\n","/**\n * All supported frameworks\n * This is the single source of truth - both CLI and WebUI import from here\n */\nexport const FRAMEWORKS = [\n // Frontend\n { id: \"react\", label: \"React\", icon: \"⚛️\" },\n { id: \"nextjs\", label: \"Next.js\", icon: \"▲\" },\n { id: \"vue\", label: \"Vue.js\", icon: \"💚\" },\n { id: \"nuxt\", label: \"Nuxt.js\", icon: \"💚\" },\n { id: \"angular\", label: \"Angular\", icon: \"🅰️\" },\n { id: \"svelte\", label: \"Svelte\", icon: \"🔥\" },\n { id: \"sveltekit\", label: \"SvelteKit\", icon: \"🔥\" },\n { id: \"solid\", label: \"SolidJS\", icon: \"💎\" },\n { id: \"qwik\", label: \"Qwik\", icon: \"⚡\" },\n { id: \"astro\", label: \"Astro\", icon: \"🚀\" },\n { id: \"remix\", label: \"Remix\", icon: \"💿\" },\n { id: \"gatsby\", label: \"Gatsby\", icon: \"🟣\" },\n // Backend Node\n { id: \"express\", label: \"Express.js\", icon: \"📦\" },\n { id: \"nestjs\", label: \"NestJS\", icon: \"🐱\" },\n { id: \"fastify\", label: \"Fastify\", icon: \"🚀\" },\n { id: \"hono\", label: \"Hono\", icon: \"🔥\" },\n { id: \"koa\", label: \"Koa\", icon: \"🌿\" },\n // Python\n { id: \"fastapi\", label: \"FastAPI\", icon: \"⚡\" },\n { id: \"django\", label: \"Django\", icon: \"🎸\" },\n { id: \"flask\", label: \"Flask\", icon: \"🌶️\" },\n { id: \"starlette\", label: \"Starlette\", icon: \"⭐\" },\n { id: \"tornado\", label: \"Tornado\", icon: \"🌪️\" },\n { id: \"pyramid\", label: \"Pyramid\", icon: \"🔺\" },\n // Java/Kotlin\n { id: \"spring\", label: \"Spring Boot\", icon: \"🌱\" },\n { id: \"quarkus\", label: \"Quarkus\", icon: \"🔷\" },\n { id: \"micronaut\", label: \"Micronaut\", icon: \"🔵\" },\n { id: \"ktor\", label: \"Ktor\", icon: \"🎨\" },\n // .NET\n { id: \"dotnet\", label: \".NET\", icon: \"🔷\" },\n { id: \"blazor\", label: \"Blazor\", icon: \"🔷\" },\n // Ruby\n { id: \"rails\", label: \"Ruby on Rails\", icon: \"🛤️\" },\n { id: \"sinatra\", label: \"Sinatra\", icon: \"🎤\" },\n { id: \"hanami\", label: \"Hanami\", icon: \"🌸\" },\n // Go\n { id: \"gin\", label: \"Gin\", icon: \"🍸\" },\n { id: \"fiber\", label: \"Fiber\", icon: \"⚡\" },\n { id: \"echo\", label: \"Echo\", icon: \"📣\" },\n { id: \"chi\", label: \"Chi\", icon: \"🐹\" },\n // Rust\n { id: \"actix\", label: \"Actix\", icon: \"🦀\" },\n { id: \"axum\", label: \"Axum\", icon: \"🦀\" },\n { id: \"rocket\", label: \"Rocket\", icon: \"🚀\" },\n { id: \"warp\", label: \"Warp\", icon: \"🦀\" },\n // PHP\n { id: \"laravel\", label: \"Laravel\", icon: \"🔴\" },\n { id: \"symfony\", label: \"Symfony\", icon: \"🎵\" },\n { id: \"lumen\", label: \"Lumen\", icon: \"💡\" },\n { id: \"codeigniter\", label: \"CodeIgniter\", icon: \"🔥\" },\n // Mobile\n { id: \"react-native\", label: \"React Native\", icon: \"📱\" },\n { id: \"flutter\", label: \"Flutter\", icon: \"🐦\" },\n { id: \"ionic\", label: \"Ionic\", icon: \"⚡\" },\n { id: \"expo\", label: \"Expo\", icon: \"📱\" },\n // Desktop\n { id: \"electron\", label: \"Electron\", icon: \"⚡\" },\n { id: \"tauri\", label: \"Tauri\", icon: \"🦀\" },\n // Tools/Build\n { id: \"vite\", label: \"Vite\", icon: \"⚡\" },\n { id: \"webpack\", label: \"Webpack\", icon: \"📦\" },\n { id: \"esbuild\", label: \"esbuild\", icon: \"📦\" },\n { id: \"turbopack\", label: \"Turbopack\", icon: \"⚡\" },\n // CSS\n { id: \"tailwind\", label: \"Tailwind CSS\", icon: \"🌊\" },\n { id: \"bootstrap\", label: \"Bootstrap\", icon: \"🅱️\" },\n { id: \"material-ui\", label: \"Material UI\", icon: \"🎨\" },\n { id: \"chakra\", label: \"Chakra UI\", icon: \"⚡\" },\n { id: \"shadcn\", label: \"shadcn/ui\", icon: \"🎨\" },\n // Testing\n { id: \"jest\", label: \"Jest\", icon: \"🃏\" },\n { id: \"vitest\", label: \"Vitest\", icon: \"⚡\" },\n { id: \"playwright\", label: \"Playwright\", icon: \"🎭\" },\n { id: \"cypress\", label: \"Cypress\", icon: \"🌲\" },\n // Data\n { id: \"prisma\", label: \"Prisma\", icon: \"🔷\" },\n { id: \"drizzle\", label: \"Drizzle\", icon: \"💧\" },\n { id: \"graphql\", label: \"GraphQL\", icon: \"◈\" },\n { id: \"trpc\", label: \"tRPC\", icon: \"🔷\" },\n // Additional ORMs\n { id: \"typeorm\", label: \"TypeORM\", icon: \"📦\" },\n { id: \"sequelize\", label: \"Sequelize\", icon: \"📦\" },\n { id: \"mongoose\", label: \"Mongoose\", icon: \"🍃\" },\n { id: \"sqlalchemy\", label: \"SQLAlchemy\", icon: \"🐍\" },\n // DevOps/Infra - Containers\n { id: \"docker\", label: \"Docker\", icon: \"🐳\" },\n { id: \"podman\", label: \"Podman\", icon: \"🦭\" },\n { id: \"containerd\", label: \"containerd\", icon: \"📦\" },\n { id: \"buildah\", label: \"Buildah\", icon: \"🔨\" },\n // Kubernetes & Orchestration\n { id: \"kubernetes\", label: \"Kubernetes\", icon: \"☸️\" },\n { id: \"helm\", label: \"Helm\", icon: \"⎈\" },\n { id: \"kustomize\", label: \"Kustomize\", icon: \"📋\" },\n { id: \"kubebuilder\", label: \"Kubebuilder\", icon: \"🔧\" },\n { id: \"operatorsdk\", label: \"Operator SDK\", icon: \"⚙️\" },\n { id: \"crossplane\", label: \"Crossplane\", icon: \"🔀\" },\n { id: \"k3s\", label: \"K3s\", icon: \"☸️\" },\n { id: \"kind\", label: \"Kind\", icon: \"📦\" },\n { id: \"minikube\", label: \"Minikube\", icon: \"💻\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\" },\n { id: \"openshift\", label: \"OpenShift\", icon: \"🎩\" },\n // IaC - Infrastructure as Code\n { id: \"terraform\", label: \"Terraform\", icon: \"🏗️\" },\n { id: \"terragrunt\", label: \"Terragrunt\", icon: \"🏗️\" },\n { id: \"opentofu\", label: \"OpenTofu\", icon: \"🏗️\" },\n { id: \"pulumi\", label: \"Pulumi\", icon: \"☁️\" },\n { id: \"cdktf\", label: \"CDK for Terraform\", icon: \"🏗️\" },\n { id: \"awscdk\", label: \"AWS CDK\", icon: \"☁️\" },\n { id: \"cloudformation\", label: \"CloudFormation\", icon: \"☁️\" },\n { id: \"bicep\", label: \"Bicep (Azure)\", icon: \"💪\" },\n { id: \"arm\", label: \"ARM Templates\", icon: \"☁️\" },\n // Configuration Management\n { id: \"ansible\", label: \"Ansible\", icon: \"🔧\" },\n { id: \"chef\", label: \"Chef\", icon: \"👨‍🍳\" },\n { id: \"puppet\", label: \"Puppet\", icon: \"🎭\" },\n { id: \"saltstack\", label: \"SaltStack\", icon: \"🧂\" },\n // GitOps\n { id: \"argocd\", label: \"ArgoCD\", icon: \"🐙\" },\n { id: \"fluxcd\", label: \"FluxCD\", icon: \"🔄\" },\n { id: \"jenkinsx\", label: \"Jenkins X\", icon: \"🔧\" },\n // Service Mesh & Networking\n { id: \"istio\", label: \"Istio\", icon: \"🕸️\" },\n { id: \"linkerd\", label: \"Linkerd\", icon: \"🔗\" },\n { id: \"consul\", label: \"Consul\", icon: \"🔍\" },\n { id: \"envoy\", label: \"Envoy\", icon: \"📬\" },\n { id: \"nginx\", label: \"NGINX\", icon: \"🌐\" },\n { id: \"traefik\", label: \"Traefik\", icon: \"🚦\" },\n { id: \"caddy\", label: \"Caddy\", icon: \"🔒\" },\n { id: \"haproxy\", label: \"HAProxy\", icon: \"⚖️\" },\n // Observability & Monitoring\n { id: \"prometheus\", label: \"Prometheus\", icon: \"📊\" },\n { id: \"grafana\", label: \"Grafana\", icon: \"📈\" },\n { id: \"datadog\", label: \"Datadog\", icon: \"🐕\" },\n { id: \"newrelic\", label: \"New Relic\", icon: \"📊\" },\n { id: \"opentelemetry\", label: \"OpenTelemetry\", icon: \"🔭\" },\n { id: \"jaeger\", label: \"Jaeger\", icon: \"🔍\" },\n { id: \"zipkin\", label: \"Zipkin\", icon: \"🔍\" },\n { id: \"elk\", label: \"ELK Stack\", icon: \"📋\" },\n { id: \"loki\", label: \"Loki\", icon: \"📝\" },\n { id: \"fluentd\", label: \"Fluentd\", icon: \"📤\" },\n { id: \"fluentbit\", label: \"Fluent Bit\", icon: \"📤\" },\n { id: \"vector\", label: \"Vector\", icon: \"➡️\" },\n // Secrets & Security\n { id: \"vault\", label: \"HashiCorp Vault\", icon: \"🔐\" },\n { id: \"sops\", label: \"SOPS\", icon: \"🔒\" },\n { id: \"externalsecrets\", label: \"External Secrets\", icon: \"🔑\" },\n { id: \"sealedsecrets\", label: \"Sealed Secrets\", icon: \"📦\" },\n { id: \"trivy\", label: \"Trivy\", icon: \"🛡️\" },\n { id: \"snyk\", label: \"Snyk\", icon: \"🔍\" },\n { id: \"falco\", label: \"Falco\", icon: \"🦅\" },\n { id: \"opa\", label: \"Open Policy Agent\", icon: \"🛡️\" },\n { id: \"kyverno\", label: \"Kyverno\", icon: \"🛡️\" },\n // CI/CD Tools\n { id: \"jenkins\", label: \"Jenkins\", icon: \"🔧\" },\n { id: \"tekton\", label: \"Tekton\", icon: \"🔧\" },\n { id: \"drone\", label: \"Drone CI\", icon: \"🐝\" },\n { id: \"concourse\", label: \"Concourse\", icon: \"✈️\" },\n { id: \"spinnaker\", label: \"Spinnaker\", icon: \"🎡\" },\n // Message Queues\n { id: \"kafka\", label: \"Apache Kafka\", icon: \"📨\" },\n { id: \"rabbitmq\", label: \"RabbitMQ\", icon: \"🐰\" },\n { id: \"nats\", label: \"NATS\", icon: \"📬\" },\n { id: \"pulsar\", label: \"Apache Pulsar\", icon: \"⭐\" },\n { id: \"sqs\", label: \"AWS SQS\", icon: \"📬\" },\n // ML/AI Ops\n { id: \"mlflow\", label: \"MLflow\", icon: \"🧪\" },\n { id: \"kubeflow\", label: \"Kubeflow\", icon: \"☸️\" },\n { id: \"airflow\", label: \"Apache Airflow\", icon: \"🌬️\" },\n { id: \"dagster\", label: \"Dagster\", icon: \"📊\" },\n { id: \"prefect\", label: \"Prefect\", icon: \"🔄\" },\n { id: \"ray\", label: \"Ray\", icon: \"☀️\" },\n // Serverless\n { id: \"serverless\", label: \"Serverless Framework\", icon: \"⚡\" },\n { id: \"sam\", label: \"AWS SAM\", icon: \"☁️\" },\n { id: \"openfaas\", label: \"OpenFaaS\", icon: \"λ\" },\n { id: \"knative\", label: \"Knative\", icon: \"☸️\" },\n // State Management\n { id: \"redux\", label: \"Redux\", icon: \"🔄\" },\n { id: \"zustand\", label: \"Zustand\", icon: \"🐻\" },\n { id: \"tanstack\", label: \"TanStack Query\", icon: \"🔮\" },\n // Additional UI\n { id: \"mui\", label: \"Material UI\", icon: \"🎨\" },\n { id: \"antdesign\", label: \"Ant Design\", icon: \"🐜\" },\n];\n/**\n * Get framework IDs for filtering\n */\nexport const FRAMEWORK_IDS = FRAMEWORKS.map(f => f.id);\n","/**\n * All supported databases\n * This is the single source of truth - both CLI and WebUI import from here\n */\nexport const DATABASES = [\n // === OPEN SOURCE RELATIONAL ===\n { id: \"postgresql\", label: \"PostgreSQL\", icon: \"🐘\", category: \"opensource\" },\n { id: \"mysql\", label: \"MySQL\", icon: \"🐬\", category: \"opensource\" },\n { id: \"mariadb\", label: \"MariaDB\", icon: \"🦭\", category: \"opensource\" },\n { id: \"sqlite\", label: \"SQLite\", icon: \"📦\", category: \"opensource\" },\n { id: \"cockroachdb\", label: \"CockroachDB\", icon: \"🪳\", category: \"opensource\" },\n { id: \"yugabytedb\", label: \"YugabyteDB\", icon: \"🔵\", category: \"opensource\" },\n { id: \"tidb\", label: \"TiDB\", icon: \"⚡\", category: \"opensource\" },\n { id: \"vitess\", label: \"Vitess\", icon: \"🟢\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Document ===\n { id: \"mongodb\", label: \"MongoDB\", icon: \"🍃\", category: \"opensource\" },\n { id: \"couchdb\", label: \"CouchDB\", icon: \"🛋️\", category: \"opensource\" },\n { id: \"arangodb\", label: \"ArangoDB\", icon: \"🥑\", category: \"opensource\" },\n { id: \"ferretdb\", label: \"FerretDB\", icon: \"🐻\", category: \"opensource\" },\n { id: \"pouchdb\", label: \"PouchDB\", icon: \"📱\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Key-Value ===\n { id: \"redis\", label: \"Redis\", icon: \"🔴\", category: \"opensource\" },\n { id: \"valkey\", label: \"Valkey\", icon: \"🔑\", category: \"opensource\" },\n { id: \"keydb\", label: \"KeyDB\", icon: \"🗝️\", category: \"opensource\" },\n { id: \"dragonfly\", label: \"Dragonfly\", icon: \"🐉\", category: \"opensource\" },\n { id: \"memcached\", label: \"Memcached\", icon: \"💾\", category: \"opensource\" },\n { id: \"etcd\", label: \"etcd\", icon: \"🔧\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Wide Column ===\n { id: \"cassandra\", label: \"Apache Cassandra\", icon: \"👁️\", category: \"opensource\" },\n { id: \"scylladb\", label: \"ScyllaDB\", icon: \"🦂\", category: \"opensource\" },\n { id: \"hbase\", label: \"Apache HBase\", icon: \"🐘\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Graph ===\n { id: \"neo4j\", label: \"Neo4j\", icon: \"🔗\", category: \"opensource\" },\n { id: \"dgraph\", label: \"Dgraph\", icon: \"📊\", category: \"opensource\" },\n { id: \"janusgraph\", label: \"JanusGraph\", icon: \"🪐\", category: \"opensource\" },\n { id: \"agensgraph\", label: \"AgensGraph\", icon: \"🌐\", category: \"opensource\" },\n // === OPEN SOURCE - Time Series ===\n { id: \"timescaledb\", label: \"TimescaleDB\", icon: \"⏱️\", category: \"opensource\" },\n { id: \"influxdb\", label: \"InfluxDB\", icon: \"📈\", category: \"opensource\" },\n { id: \"questdb\", label: \"QuestDB\", icon: \"🏎️\", category: \"opensource\" },\n { id: \"victoriametrics\", label: \"VictoriaMetrics\", icon: \"📊\", category: \"opensource\" },\n { id: \"prometheus\", label: \"Prometheus\", icon: \"🔥\", category: \"opensource\" },\n // === OPEN SOURCE - Analytics/OLAP ===\n { id: \"clickhouse\", label: \"ClickHouse\", icon: \"🏠\", category: \"opensource\" },\n { id: \"apache_druid\", label: \"Apache Druid\", icon: \"🧙\", category: \"opensource\" },\n { id: \"apache_pinot\", label: \"Apache Pinot\", icon: \"🎯\", category: \"opensource\" },\n { id: \"duckdb\", label: \"DuckDB\", icon: \"🦆\", category: \"opensource\" },\n { id: \"starrocks\", label: \"StarRocks\", icon: \"⭐\", category: \"opensource\" },\n // === OPEN SOURCE - Search ===\n { id: \"elasticsearch\", label: \"Elasticsearch\", icon: \"🔍\", category: \"opensource\" },\n { id: \"opensearch\", label: \"OpenSearch\", icon: \"🔎\", category: \"opensource\" },\n { id: \"meilisearch\", label: \"Meilisearch\", icon: \"⚡\", category: \"opensource\" },\n { id: \"typesense\", label: \"Typesense\", icon: \"🔤\", category: \"opensource\" },\n { id: \"solr\", label: \"Apache Solr\", icon: \"☀️\", category: \"opensource\" },\n { id: \"zinc\", label: \"Zinc\", icon: \"🔬\", category: \"opensource\" },\n // === OPEN SOURCE - Vector/AI ===\n { id: \"milvus\", label: \"Milvus\", icon: \"🧠\", category: \"opensource\" },\n { id: \"weaviate\", label: \"Weaviate\", icon: \"🕸️\", category: \"opensource\" },\n { id: \"qdrant\", label: \"Qdrant\", icon: \"🎯\", category: \"opensource\" },\n { id: \"chroma\", label: \"Chroma\", icon: \"🎨\", category: \"opensource\" },\n { id: \"pgvector\", label: \"pgvector\", icon: \"🐘\", category: \"opensource\" },\n // === OPEN SOURCE - Message Queues (often used as DBs) ===\n { id: \"kafka\", label: \"Apache Kafka\", icon: \"📨\", category: \"opensource\" },\n { id: \"rabbitmq\", label: \"RabbitMQ\", icon: \"🐰\", category: \"opensource\" },\n { id: \"nats\", label: \"NATS\", icon: \"📬\", category: \"opensource\" },\n { id: \"pulsar\", label: \"Apache Pulsar\", icon: \"💫\", category: \"opensource\" },\n { id: \"redpanda\", label: \"Redpanda\", icon: \"🐼\", category: \"opensource\" },\n // === OPEN SOURCE - Embedded/Edge ===\n { id: \"leveldb\", label: \"LevelDB\", icon: \"📚\", category: \"opensource\" },\n { id: \"rocksdb\", label: \"RocksDB\", icon: \"🪨\", category: \"opensource\" },\n { id: \"badger\", label: \"Badger\", icon: \"🦡\", category: \"opensource\" },\n { id: \"surrealdb\", label: \"SurrealDB\", icon: \"🌊\", category: \"opensource\" },\n { id: \"rqlite\", label: \"rqlite\", icon: \"📡\", category: \"opensource\" },\n // === CLOUD MANAGED - AWS ===\n { id: \"aws_rds\", label: \"AWS RDS\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_aurora\", label: \"AWS Aurora\", icon: \"🌅\", category: \"cloud\" },\n { id: \"aws_dynamodb\", label: \"AWS DynamoDB\", icon: \"⚡\", category: \"cloud\" },\n { id: \"aws_redshift\", label: \"AWS Redshift\", icon: \"📊\", category: \"cloud\" },\n { id: \"aws_neptune\", label: \"AWS Neptune\", icon: \"🔱\", category: \"cloud\" },\n { id: \"aws_timestream\", label: \"AWS Timestream\", icon: \"⏰\", category: \"cloud\" },\n { id: \"aws_documentdb\", label: \"AWS DocumentDB\", icon: \"📄\", category: \"cloud\" },\n { id: \"aws_elasticache\", label: \"AWS ElastiCache\", icon: \"💨\", category: \"cloud\" },\n { id: \"aws_memorydb\", label: \"AWS MemoryDB\", icon: \"🧠\", category: \"cloud\" },\n // === CLOUD MANAGED - GCP ===\n { id: \"gcp_cloudsql\", label: \"GCP Cloud SQL\", icon: \"☁️\", category: \"cloud\" },\n { id: \"gcp_spanner\", label: \"GCP Cloud Spanner\", icon: \"🌐\", category: \"cloud\" },\n { id: \"gcp_firestore\", label: \"GCP Firestore\", icon: \"🔥\", category: \"cloud\" },\n { id: \"gcp_bigtable\", label: \"GCP Bigtable\", icon: \"📊\", category: \"cloud\" },\n { id: \"gcp_bigquery\", label: \"GCP BigQuery\", icon: \"📈\", category: \"cloud\" },\n { id: \"gcp_memorystore\", label: \"GCP Memorystore\", icon: \"💾\", category: \"cloud\" },\n // === CLOUD MANAGED - Azure ===\n { id: \"azure_sql\", label: \"Azure SQL\", icon: \"☁️\", category: \"cloud\" },\n { id: \"azure_cosmosdb\", label: \"Azure Cosmos DB\", icon: \"🌌\", category: \"cloud\" },\n { id: \"azure_synapse\", label: \"Azure Synapse\", icon: \"📊\", category: \"cloud\" },\n { id: \"azure_cache\", label: \"Azure Cache\", icon: \"💨\", category: \"cloud\" },\n // === CLOUD MANAGED - Other ===\n { id: \"supabase\", label: \"Supabase\", icon: \"⚡\", category: \"cloud\" },\n { id: \"firebase\", label: \"Firebase\", icon: \"🔥\", category: \"cloud\" },\n { id: \"planetscale\", label: \"PlanetScale\", icon: \"🪐\", category: \"cloud\" },\n { id: \"neon\", label: \"Neon\", icon: \"💡\", category: \"cloud\" },\n { id: \"turso\", label: \"Turso\", icon: \"🐦\", category: \"cloud\" },\n { id: \"xata\", label: \"Xata\", icon: \"⚡\", category: \"cloud\" },\n { id: \"upstash\", label: \"Upstash\", icon: \"🚀\", category: \"cloud\" },\n { id: \"fauna\", label: \"Fauna\", icon: \"🦎\", category: \"cloud\" },\n { id: \"mongodb_atlas\", label: \"MongoDB Atlas\", icon: \"🍃\", category: \"cloud\" },\n { id: \"datastax_astra\", label: \"DataStax Astra\", icon: \"✨\", category: \"cloud\" },\n { id: \"cockroach_cloud\", label: \"CockroachDB Cloud\", icon: \"🪳\", category: \"cloud\" },\n { id: \"timescale_cloud\", label: \"Timescale Cloud\", icon: \"⏱️\", category: \"cloud\" },\n { id: \"influx_cloud\", label: \"InfluxDB Cloud\", icon: \"📈\", category: \"cloud\" },\n { id: \"elastic_cloud\", label: \"Elastic Cloud\", icon: \"🔍\", category: \"cloud\" },\n { id: \"algolia\", label: \"Algolia\", icon: \"🔎\", category: \"cloud\" },\n { id: \"pinecone\", label: \"Pinecone\", icon: \"🌲\", category: \"cloud\" },\n // === PROPRIETARY ===\n { id: \"oracle\", label: \"Oracle Database\", icon: \"🔶\", category: \"proprietary\" },\n { id: \"mssql\", label: \"Microsoft SQL Server\", icon: \"🟦\", category: \"proprietary\" },\n { id: \"db2\", label: \"IBM Db2\", icon: \"🔷\", category: \"proprietary\" },\n { id: \"teradata\", label: \"Teradata\", icon: \"🟠\", category: \"proprietary\" },\n { id: \"sap_hana\", label: \"SAP HANA\", icon: \"🔵\", category: \"proprietary\" },\n { id: \"informix\", label: \"IBM Informix\", icon: \"📊\", category: \"proprietary\" },\n { id: \"sybase\", label: \"SAP ASE (Sybase)\", icon: \"🔷\", category: \"proprietary\" },\n { id: \"singlestore\", label: \"SingleStore\", icon: \"⚡\", category: \"proprietary\" },\n { id: \"marklogic\", label: \"MarkLogic\", icon: \"📁\", category: \"proprietary\" },\n { id: \"intersystems_cache\", label: \"InterSystems Caché\", icon: \"💎\", category: \"proprietary\" },\n];\n/**\n * Get database IDs for filtering\n */\nexport const DATABASE_IDS = DATABASES.map(d => d.id);\n/**\n * Get databases by category\n */\nexport const getDatabasesByCategory = (category) => DATABASES.filter(d => d.category === category);\n","/**\n * Package managers (JS/TS only)\n */\nexport const PACKAGE_MANAGERS = [\n { id: \"npm\", label: \"npm\", icon: \"📦\", description: \"Node Package Manager (default)\" },\n { id: \"yarn\", label: \"Yarn\", icon: \"🧶\", description: \"Fast, reliable, and secure\" },\n { id: \"pnpm\", label: \"pnpm\", icon: \"📀\", description: \"Fast, disk space efficient\" },\n { id: \"bun\", label: \"Bun\", icon: \"🥟\", description: \"All-in-one JS runtime + PM\" },\n];\n/**\n * Monorepo tools (JS/TS only)\n */\nexport const MONOREPO_TOOLS = [\n { id: \"\", label: \"None\", icon: \"📁\", description: \"Single package repository\" },\n { id: \"turborepo\", label: \"Turborepo\", icon: \"⚡\", description: \"High-performance build system\" },\n { id: \"nx\", label: \"Nx\", icon: \"🔷\", description: \"Smart, extensible build framework\" },\n { id: \"lerna\", label: \"Lerna\", icon: \"🐉\", description: \"Multi-package repositories\" },\n { id: \"pnpm_workspaces\", label: \"pnpm Workspaces\", icon: \"📀\", description: \"Native pnpm monorepo\" },\n { id: \"yarn_workspaces\", label: \"Yarn Workspaces\", icon: \"🧶\", description: \"Native Yarn monorepo\" },\n { id: \"npm_workspaces\", label: \"npm Workspaces\", icon: \"📦\", description: \"Native npm monorepo\" },\n { id: \"rush\", label: \"Rush\", icon: \"🚀\", description: \"Microsoft's scalable monorepo\" },\n { id: \"moon\", label: \"moon\", icon: \"🌙\", description: \"Repository management tool\" },\n];\n/**\n * JS/TS runtimes\n */\nexport const JS_RUNTIMES = [\n { id: \"node\", label: \"Node.js\", icon: \"🟢\", description: \"Standard JavaScript runtime\" },\n { id: \"deno\", label: \"Deno\", icon: \"🦕\", description: \"Secure runtime with TypeScript\" },\n { id: \"bun\", label: \"Bun\", icon: \"🥟\", description: \"Fast all-in-one JS runtime\" },\n];\n/**\n * ORMs and Database tools\n */\nexport const ORM_OPTIONS = [\n { id: \"\", label: \"None / Raw SQL\", icon: \"📝\" },\n // JavaScript/TypeScript\n { id: \"prisma\", label: \"Prisma\", icon: \"🔷\", languages: [\"typescript\", \"javascript\"] },\n { id: \"drizzle\", label: \"Drizzle\", icon: \"💧\", languages: [\"typescript\", \"javascript\"] },\n { id: \"typeorm\", label: \"TypeORM\", icon: \"🔶\", languages: [\"typescript\", \"javascript\"] },\n { id: \"sequelize\", label: \"Sequelize\", icon: \"📘\", languages: [\"typescript\", \"javascript\"] },\n { id: \"knex\", label: \"Knex.js\", icon: \"🔧\", languages: [\"typescript\", \"javascript\"] },\n { id: \"kysely\", label: \"Kysely\", icon: \"🎯\", languages: [\"typescript\", \"javascript\"] },\n { id: \"mikro-orm\", label: \"MikroORM\", icon: \"🔵\", languages: [\"typescript\", \"javascript\"] },\n { id: \"objection\", label: \"Objection.js\", icon: \"📊\", languages: [\"typescript\", \"javascript\"] },\n // Python\n { id: \"sqlalchemy\", label: \"SQLAlchemy\", icon: \"🐍\", languages: [\"python\"] },\n { id: \"django_orm\", label: \"Django ORM\", icon: \"🎸\", languages: [\"python\"] },\n { id: \"tortoise\", label: \"Tortoise ORM\", icon: \"🐢\", languages: [\"python\"] },\n { id: \"sqlmodel\", label: \"SQLModel\", icon: \"⚡\", languages: [\"python\"] },\n { id: \"peewee\", label: \"Peewee\", icon: \"🐦\", languages: [\"python\"] },\n // Go\n { id: \"gorm\", label: \"GORM\", icon: \"🐹\", languages: [\"go\"] },\n { id: \"ent\", label: \"Ent\", icon: \"🏗️\", languages: [\"go\"] },\n { id: \"sqlc\", label: \"sqlc\", icon: \"📝\", languages: [\"go\"] },\n { id: \"bun_go\", label: \"Bun (Go)\", icon: \"🥟\", languages: [\"go\"] },\n // Rust\n { id: \"diesel\", label: \"Diesel\", icon: \"🦀\", languages: [\"rust\"] },\n { id: \"sea-orm\", label: \"SeaORM\", icon: \"🌊\", languages: [\"rust\"] },\n { id: \"sqlx\", label: \"SQLx\", icon: \"📦\", languages: [\"rust\"] },\n // Java/Kotlin\n { id: \"hibernate\", label: \"Hibernate\", icon: \"☕\", languages: [\"java\", \"kotlin\"] },\n { id: \"jooq\", label: \"jOOQ\", icon: \"🎵\", languages: [\"java\", \"kotlin\"] },\n { id: \"exposed\", label: \"Exposed\", icon: \"🎨\", languages: [\"kotlin\"] },\n // .NET\n { id: \"ef_core\", label: \"Entity Framework\", icon: \"🔷\", languages: [\"csharp\"] },\n { id: \"dapper\", label: \"Dapper\", icon: \"⚡\", languages: [\"csharp\"] },\n // Ruby\n { id: \"activerecord\", label: \"ActiveRecord\", icon: \"💎\", languages: [\"ruby\"] },\n { id: \"sequel\", label: \"Sequel\", icon: \"📚\", languages: [\"ruby\"] },\n // PHP\n { id: \"eloquent\", label: \"Eloquent\", icon: \"🐘\", languages: [\"php\"] },\n { id: \"doctrine\", label: \"Doctrine\", icon: \"📖\", languages: [\"php\"] },\n];\n/**\n * Get ORMs filtered by language\n */\nexport const getOrmsByLanguage = (languages) => ORM_OPTIONS.filter(o => !o.languages || o.languages.some(l => languages.includes(l)));\n","/**\n * Project types\n */\nexport const PROJECT_TYPES = [\n { id: \"web_frontend\", label: \"Web Frontend\", icon: \"🌐\", description: \"React, Vue, Angular, etc.\" },\n { id: \"web_fullstack\", label: \"Full-stack Web\", icon: \"🖥️\", description: \"Next.js, Nuxt, SvelteKit, etc.\" },\n { id: \"api_backend\", label: \"API / Backend\", icon: \"⚙️\", description: \"REST, GraphQL, gRPC services\" },\n { id: \"cli_tool\", label: \"CLI Tool\", icon: \"💻\", description: \"Command-line applications\" },\n { id: \"library\", label: \"Library / Package\", icon: \"📦\", description: \"Reusable npm/pip/cargo package\" },\n { id: \"mobile\", label: \"Mobile App\", icon: \"📱\", description: \"React Native, Flutter, native\" },\n { id: \"desktop\", label: \"Desktop App\", icon: \"🖥️\", description: \"Electron, Tauri, native\" },\n { id: \"microservice\", label: \"Microservice\", icon: \"🔧\", description: \"Single-purpose service\" },\n { id: \"monolith\", label: \"Monolith\", icon: \"🏢\", description: \"All-in-one application\" },\n { id: \"data_science\", label: \"Data Science\", icon: \"📊\", description: \"ML, analytics, notebooks\" },\n { id: \"devops\", label: \"DevOps / IaC\", icon: \"🔄\", description: \"Terraform, Ansible, K8s manifests\" },\n { id: \"game\", label: \"Game\", icon: \"🎮\", description: \"Unity, Godot, web games\" },\n { id: \"embedded\", label: \"Embedded / IoT\", icon: \"🔌\", description: \"Firmware, hardware control\" },\n { id: \"blockchain\", label: \"Blockchain / Web3\", icon: \"⛓️\", description: \"Smart contracts, dApps\" },\n { id: \"other\", label: \"Other\", icon: \"📁\", description: \"Custom project type\" },\n];\n/**\n * Architecture patterns\n */\nexport const ARCHITECTURE_PATTERNS = [\n { id: \"mvc\", label: \"MVC\", description: \"Model-View-Controller\" },\n { id: \"mvvm\", label: \"MVVM\", description: \"Model-View-ViewModel\" },\n { id: \"clean\", label: \"Clean Architecture\", description: \"Dependency rule, use cases\" },\n { id: \"hexagonal\", label: \"Hexagonal / Ports & Adapters\", description: \"Domain-centric, pluggable\" },\n { id: \"ddd\", label: \"Domain-Driven Design\", description: \"Bounded contexts, aggregates\" },\n { id: \"microservices\", label: \"Microservices\", description: \"Distributed services\" },\n { id: \"multi_image_docker\", label: \"Multi-Image Docker\", description: \"Shared codebase, multiple container images\" },\n { id: \"serverless\", label: \"Serverless\", description: \"FaaS, event-driven\" },\n { id: \"event_driven\", label: \"Event-Driven\", description: \"Event sourcing, CQRS\" },\n { id: \"modular_monolith\", label: \"Modular Monolith\", description: \"Organized monolith\" },\n { id: \"layered\", label: \"Layered / N-Tier\", description: \"Presentation, business, data\" },\n { id: \"component_based\", label: \"Component-Based\", description: \"React, Vue components\" },\n { id: \"plugin\", label: \"Plugin Architecture\", description: \"Extensible core + plugins\" },\n { id: \"other\", label: \"Other\", description: \"Custom architecture\" },\n];\n/**\n * Development OS options\n */\nexport const DEV_OS_OPTIONS = [\n { id: \"macos\", label: \"macOS\", icon: \"🍎\" },\n { id: \"linux\", label: \"Linux\", icon: \"🐧\" },\n { id: \"windows\", label: \"Windows\", icon: \"🪟\" },\n { id: \"wsl\", label: \"WSL\", icon: \"🐧\" },\n];\n","/**\n * Repository hosts\n */\nexport const REPO_HOSTS = [\n { id: \"github\", label: \"GitHub\", icon: \"🐙\" },\n { id: \"gitlab\", label: \"GitLab\", icon: \"🦊\" },\n { id: \"gitea\", label: \"Gitea\", icon: \"🍵\" },\n { id: \"forgejo\", label: \"Forgejo\", icon: \"🔧\" },\n { id: \"bitbucket\", label: \"Bitbucket\", icon: \"🪣\" },\n { id: \"codeberg\", label: \"Codeberg\", icon: \"🏔️\" },\n { id: \"sourcehut\", label: \"SourceHut\", icon: \"📦\" },\n { id: \"gogs\", label: \"Gogs\", icon: \"🐙\" },\n { id: \"aws_codecommit\", label: \"AWS CodeCommit\", icon: \"☁️\" },\n { id: \"azure_devops\", label: \"Azure DevOps\", icon: \"☁️\" },\n { id: \"gerrit\", label: \"Gerrit\", icon: \"🔍\" },\n { id: \"phabricator\", label: \"Phabricator\", icon: \"📦\" },\n { id: \"other\", label: \"Other\", icon: \"📦\" },\n];\n/**\n * CI/CD options\n */\nexport const CICD_OPTIONS = [\n { id: \"github_actions\", label: \"GitHub Actions\", icon: \"🐙\" },\n { id: \"gitlab_ci\", label: \"GitLab CI/CD\", icon: \"🦊\" },\n { id: \"jenkins\", label: \"Jenkins\", icon: \"🔧\" },\n { id: \"circleci\", label: \"CircleCI\", icon: \"🔵\" },\n { id: \"travis\", label: \"Travis CI\", icon: \"🔨\" },\n { id: \"azure_pipelines\", label: \"Azure Pipelines\", icon: \"☁️\" },\n { id: \"aws_codepipeline\", label: \"AWS CodePipeline\", icon: \"☁️\" },\n { id: \"gcp_cloudbuild\", label: \"GCP Cloud Build\", icon: \"☁️\" },\n { id: \"bitbucket_pipelines\", label: \"Bitbucket Pipelines\", icon: \"🪣\" },\n { id: \"teamcity\", label: \"TeamCity\", icon: \"🏢\" },\n { id: \"drone\", label: \"Drone CI\", icon: \"🚁\" },\n { id: \"buildkite\", label: \"Buildkite\", icon: \"🧱\" },\n { id: \"concourse\", label: \"Concourse CI\", icon: \"✈️\" },\n { id: \"woodpecker\", label: \"Woodpecker CI\", icon: \"🐦\" },\n { id: \"dagger\", label: \"Dagger\", icon: \"🗡️\" },\n { id: \"earthly\", label: \"Earthly\", icon: \"🌍\" },\n];\n/**\n * Licenses\n */\nexport const LICENSES = [\n { id: \"mit\", label: \"MIT\", description: \"Permissive, simple\" },\n { id: \"apache-2.0\", label: \"Apache 2.0\", description: \"Permissive with patent grant\" },\n { id: \"gpl-3.0\", label: \"GPL 3.0\", description: \"Strong copyleft\" },\n { id: \"lgpl-3.0\", label: \"LGPL 3.0\", description: \"Weak copyleft\" },\n { id: \"agpl-3.0\", label: \"AGPL 3.0\", description: \"Network copyleft\" },\n { id: \"bsd-2\", label: \"BSD 2-Clause\", description: \"Permissive, simple\" },\n { id: \"bsd-3\", label: \"BSD 3-Clause\", description: \"Permissive, no endorsement\" },\n { id: \"mpl-2.0\", label: \"MPL 2.0\", description: \"File-level copyleft\" },\n { id: \"isc\", label: \"ISC\", description: \"Simple permissive\" },\n { id: \"unlicense\", label: \"Unlicense\", description: \"Public domain\" },\n { id: \"cc0\", label: \"CC0\", description: \"Public domain\" },\n { id: \"none\", label: \"None / Proprietary\", description: \"All rights reserved\" },\n { id: \"other\", label: \"Other\", description: \"Custom license\" },\n];\n/**\n * Branch strategies\n */\nexport const BRANCH_STRATEGIES = [\n { id: \"none\", label: \"None (toy project)\", icon: \"🎮\", description: \"No branching, commit directly to main\" },\n { id: \"github_flow\", label: \"GitHub Flow\", icon: \"🌊\", description: \"Simple: main + feature branches\" },\n { id: \"gitflow\", label: \"Gitflow\", icon: \"🌳\", description: \"develop, feature, release, hotfix branches\" },\n { id: \"trunk_based\", label: \"Trunk-Based\", icon: \"🚂\", description: \"Short-lived branches, continuous integration\" },\n { id: \"gitlab_flow\", label: \"GitLab Flow\", icon: \"🦊\", description: \"Environment branches (staging, production)\" },\n { id: \"release_flow\", label: \"Release Flow\", icon: \"🚀\", description: \"Microsoft style: main + release branches\" },\n];\n/**\n * Default branch names\n */\nexport const DEFAULT_BRANCHES = [\n { id: \"main\", label: \"main\" },\n { id: \"master\", label: \"master\" },\n { id: \"develop\", label: \"develop\" },\n { id: \"trunk\", label: \"trunk\" },\n { id: \"other\", label: \"Other\" },\n];\n/**\n * Self-hosted deployment targets\n */\nexport const SELF_HOSTED_TARGETS = [\n { id: \"docker\", label: \"Docker\", icon: \"🐳\", category: \"self_hosted\" },\n { id: \"docker_compose\", label: \"Docker Compose\", icon: \"🐳\", category: \"self_hosted\" },\n { id: \"kubernetes\", label: \"Kubernetes\", icon: \"☸️\", category: \"self_hosted\" },\n { id: \"podman\", label: \"Podman\", icon: \"🦭\", category: \"self_hosted\" },\n { id: \"lxc\", label: \"LXC/LXD\", icon: \"📦\", category: \"self_hosted\" },\n { id: \"bare_metal\", label: \"Bare Metal\", icon: \"🖥️\", category: \"self_hosted\" },\n { id: \"vm\", label: \"Virtual Machine\", icon: \"💻\", category: \"self_hosted\" },\n { id: \"proxmox\", label: \"Proxmox\", icon: \"🔷\", category: \"self_hosted\" },\n { id: \"unraid\", label: \"Unraid\", icon: \"🟠\", category: \"self_hosted\" },\n { id: \"truenas\", label: \"TrueNAS\", icon: \"🔵\", category: \"self_hosted\" },\n { id: \"synology\", label: \"Synology NAS\", icon: \"📁\", category: \"self_hosted\" },\n { id: \"coolify\", label: \"Coolify\", icon: \"❄️\", category: \"self_hosted\" },\n { id: \"dokku\", label: \"Dokku\", icon: \"🐳\", category: \"self_hosted\" },\n { id: \"caprover\", label: \"CapRover\", icon: \"🚢\", category: \"self_hosted\" },\n { id: \"portainer\", label: \"Portainer\", icon: \"🐋\", category: \"self_hosted\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\", category: \"self_hosted\" },\n { id: \"k3s\", label: \"K3s\", icon: \"☸️\", category: \"self_hosted\" },\n { id: \"microk8s\", label: \"MicroK8s\", icon: \"☸️\", category: \"self_hosted\" },\n { id: \"nomad\", label: \"Nomad\", icon: \"🏕️\", category: \"self_hosted\" },\n];\n/**\n * Cloud deployment targets\n */\nexport const CLOUD_TARGETS = [\n { id: \"vercel\", label: \"Vercel\", icon: \"▲\", category: \"cloud\" },\n { id: \"netlify\", label: \"Netlify\", icon: \"🌐\", category: \"cloud\" },\n { id: \"cloudflare_pages\", label: \"Cloudflare Pages\", icon: \"🔶\", category: \"cloud\" },\n { id: \"cloudflare_workers\", label: \"Cloudflare Workers\", icon: \"🔶\", category: \"cloud\" },\n { id: \"aws_lambda\", label: \"AWS Lambda\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_ecs\", label: \"AWS ECS\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_eks\", label: \"AWS EKS\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_ec2\", label: \"AWS EC2\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_lightsail\", label: \"AWS Lightsail\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_amplify\", label: \"AWS Amplify\", icon: \"☁️\", category: \"cloud\" },\n { id: \"gcp_cloudrun\", label: \"GCP Cloud Run\", icon: \"🌈\", category: \"cloud\" },\n { id: \"gcp_gke\", label: \"GCP GKE\", icon: \"🌈\", category: \"cloud\" },\n { id: \"gcp_appengine\", label: \"GCP App Engine\", icon: \"🌈\", category: \"cloud\" },\n { id: \"gcp_functions\", label: \"GCP Cloud Functions\", icon: \"🌈\", category: \"cloud\" },\n { id: \"azure_functions\", label: \"Azure Functions\", icon: \"🔷\", category: \"cloud\" },\n { id: \"azure_aks\", label: \"Azure AKS\", icon: \"🔷\", category: \"cloud\" },\n { id: \"azure_container\", label: \"Azure Container Apps\", icon: \"🔷\", category: \"cloud\" },\n { id: \"azure_appservice\", label: \"Azure App Service\", icon: \"🔷\", category: \"cloud\" },\n { id: \"railway\", label: \"Railway\", icon: \"🚂\", category: \"cloud\" },\n { id: \"render\", label: \"Render\", icon: \"🎨\", category: \"cloud\" },\n { id: \"fly\", label: \"Fly.io\", icon: \"✈️\", category: \"cloud\" },\n { id: \"digitalocean_app\", label: \"DigitalOcean App Platform\", icon: \"🔵\", category: \"cloud\" },\n { id: \"digitalocean_droplet\", label: \"DigitalOcean Droplet\", icon: \"🔵\", category: \"cloud\" },\n { id: \"heroku\", label: \"Heroku\", icon: \"🟣\", category: \"cloud\" },\n { id: \"deno_deploy\", label: \"Deno Deploy\", icon: \"🦕\", category: \"cloud\" },\n { id: \"supabase_edge\", label: \"Supabase Edge Functions\", icon: \"⚡\", category: \"cloud\" },\n];\n/**\n * All deployment targets\n */\nexport const DEPLOYMENT_TARGETS = [...SELF_HOSTED_TARGETS, ...CLOUD_TARGETS];\n/**\n * Container registries\n */\nexport const CONTAINER_REGISTRIES = [\n { id: \"dockerhub\", label: \"Docker Hub\", icon: \"🐳\" },\n { id: \"ghcr\", label: \"GitHub Container Registry\", icon: \"🐙\" },\n { id: \"gcr\", label: \"Google Container Registry\", icon: \"🌈\" },\n { id: \"ecr\", label: \"AWS ECR\", icon: \"☁️\" },\n { id: \"acr\", label: \"Azure Container Registry\", icon: \"🔷\" },\n { id: \"quay\", label: \"Quay.io\", icon: \"🔴\" },\n { id: \"gitlab_registry\", label: \"GitLab Container Registry\", icon: \"🦊\" },\n { id: \"harbor\", label: \"Harbor\", icon: \"🚢\" },\n { id: \"self_hosted\", label: \"Self-hosted Registry\", icon: \"🏠\" },\n];\n/**\n * Version tag formats (when semver is enabled)\n */\nexport const VERSION_TAG_FORMATS = [\n { id: \"v_prefix\", label: \"v*\", icon: \"🏷️\", description: \"e.g., v1.0.0\" },\n { id: \"no_prefix\", label: \"* (no prefix)\", icon: \"🏷️\", description: \"e.g., 1.0.0\" },\n { id: \"app_prefix\", label: \"app-v*\", icon: \"🏷️\", description: \"e.g., app-v1.0.0\" },\n { id: \"cli_prefix\", label: \"cli-v*\", icon: \"🏷️\", description: \"e.g., cli-v1.0.0\" },\n { id: \"monorepo\", label: \"package@version\", icon: \"🏷️\", description: \"e.g., @scope/pkg@1.0.0\" },\n { id: \"custom\", label: \"Custom format\", icon: \"🏷️\", description: \"Define your own tag format\" },\n];\n/**\n * Changelog generation tools/methods\n */\nexport const CHANGELOG_OPTIONS = [\n { id: \"manual\", label: \"Manual\", icon: \"✍️\", description: \"Write CHANGELOG.md manually\" },\n { id: \"conventional_changelog\", label: \"conventional-changelog\", icon: \"📝\", description: \"Auto-generate from commits\" },\n { id: \"release_please\", label: \"release-please\", icon: \"🤖\", description: \"Google's release automation\" },\n { id: \"semantic_release\", label: \"semantic-release\", icon: \"🚀\", description: \"Fully automated versioning\" },\n { id: \"changesets\", label: \"Changesets\", icon: \"📦\", description: \"Monorepo version management\" },\n { id: \"git_cliff\", label: \"git-cliff\", icon: \"🏔️\", description: \"Customizable changelog generator\" },\n { id: \"auto\", label: \"auto (Intuit)\", icon: \"⚡\", description: \"Automated releases based on labels\" },\n { id: \"standard_version\", label: \"standard-version\", icon: \"📋\", description: \"Automate versioning and CHANGELOG\" },\n { id: \"lerna_changelog\", label: \"lerna-changelog\", icon: \"🐉\", description: \"For Lerna monorepos\" },\n { id: \"keep_a_changelog\", label: \"Keep a Changelog\", icon: \"📖\", description: \"Manual following keepachangelog.com\" },\n { id: \"github_releases\", label: \"GitHub Releases\", icon: \"🐙\", description: \"Use GitHub release notes\" },\n { id: \"none\", label: \"None\", icon: \"❌\", description: \"No changelog\" },\n];\n/**\n * VPN / Network overlay solutions\n */\nexport const VPN_OPTIONS = [\n { id: \"tailscale\", label: \"Tailscale\", icon: \"🔗\", description: \"Zero-config mesh VPN\" },\n { id: \"headscale\", label: \"Headscale\", icon: \"🔗\", description: \"Self-hosted Tailscale control server\" },\n { id: \"wireguard\", label: \"WireGuard\", icon: \"🛡️\", description: \"Modern VPN protocol\" },\n { id: \"netbird\", label: \"NetBird\", icon: \"🐦\", description: \"Open-source network as code\" },\n { id: \"zerotier\", label: \"ZeroTier\", icon: \"🌐\", description: \"Global area networking\" },\n { id: \"nebula\", label: \"Nebula\", icon: \"🌌\", description: \"Slack's mesh networking tool\" },\n { id: \"innernet\", label: \"innernet\", icon: \"🔐\", description: \"WireGuard-based private network\" },\n { id: \"netmaker\", label: \"Netmaker\", icon: \"🕸️\", description: \"WireGuard automation platform\" },\n { id: \"firezone\", label: \"Firezone\", icon: \"🔥\", description: \"Self-hosted VPN server\" },\n { id: \"pritunl\", label: \"Pritunl\", icon: \"🔒\", description: \"Enterprise VPN server\" },\n { id: \"openvpn\", label: \"OpenVPN\", icon: \"🔓\", description: \"Classic open-source VPN\" },\n { id: \"cloudflare_tunnel\", label: \"Cloudflare Tunnel\", icon: \"🔶\", description: \"Expose services via Cloudflare\" },\n { id: \"ngrok\", label: \"ngrok\", icon: \"🚇\", description: \"Secure tunnels to localhost\" },\n { id: \"none\", label: \"None\", icon: \"❌\", description: \"No VPN/tunneling\" },\n];\n/**\n * GitOps / Infrastructure management tools\n */\nexport const GITOPS_TOOLS = [\n { id: \"portainer\", label: \"Portainer\", icon: \"🐋\", description: \"Docker/K8s management UI\" },\n { id: \"argocd\", label: \"ArgoCD\", icon: \"🐙\", description: \"GitOps continuous delivery for K8s\" },\n { id: \"fluxcd\", label: \"FluxCD\", icon: \"🔄\", description: \"GitOps toolkit for Kubernetes\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\", description: \"Multi-cluster K8s management\" },\n { id: \"lens\", label: \"Lens\", icon: \"🔍\", description: \"Kubernetes IDE\" },\n { id: \"k9s\", label: \"k9s\", icon: \"🐕\", description: \"Terminal UI for K8s\" },\n { id: \"terraform\", label: \"Terraform\", icon: \"🏗️\", description: \"Infrastructure as Code\" },\n { id: \"pulumi\", label: \"Pulumi\", icon: \"☁️\", description: \"IaC with programming languages\" },\n { id: \"ansible\", label: \"Ansible\", icon: \"📜\", description: \"Automation and configuration\" },\n { id: \"chef\", label: \"Chef\", icon: \"👨‍🍳\", description: \"Configuration management\" },\n { id: \"puppet\", label: \"Puppet\", icon: \"🎭\", description: \"Infrastructure automation\" },\n { id: \"saltstack\", label: \"SaltStack\", icon: \"🧂\", description: \"Event-driven automation\" },\n { id: \"crossplane\", label: \"Crossplane\", icon: \"✖️\", description: \"Control plane for cloud infrastructure\" },\n { id: \"waypoint\", label: \"HashiCorp Waypoint\", icon: \"🧭\", description: \"Build, deploy, release\" },\n { id: \"spinnaker\", label: \"Spinnaker\", icon: \"🎡\", description: \"Multi-cloud continuous delivery\" },\n { id: \"none\", label: \"None\", icon: \"❌\", description: \"No GitOps tooling\" },\n];\n","/**\n * AI behavior rules\n */\nexport const AI_BEHAVIOR_RULES = [\n { id: \"always_debug_after_build\", label: \"Always Debug After Building\", description: \"Run and test locally after making changes\", recommended: true },\n { id: \"check_logs_after_build\", label: \"Check Logs After Build/Commit\", description: \"Check logs when build or commit finishes\", recommended: true },\n { id: \"run_tests_before_commit\", label: \"Run Tests Before Commit\", description: \"Ensure tests pass before committing\", recommended: true },\n { id: \"follow_existing_patterns\", label: \"Follow Existing Patterns\", description: \"Match the codebase's existing style\", recommended: true },\n { id: \"ask_before_large_refactors\", label: \"Ask Before Large Refactors\", description: \"Confirm before significant changes\", recommended: true },\n { id: \"prefer_small_commits\", label: \"Prefer Small Commits\", description: \"Make atomic, focused commits\" },\n { id: \"document_complex_logic\", label: \"Document Complex Logic\", description: \"Add comments for non-obvious code\" },\n { id: \"avoid_breaking_changes\", label: \"Avoid Breaking Changes\", description: \"Maintain backward compatibility\" },\n { id: \"use_conventional_commits\", label: \"Use Conventional Commits\", description: \"Follow commit message conventions\" },\n { id: \"prefer_composition\", label: \"Prefer Composition Over Inheritance\", description: \"Use composition patterns\" },\n];\n/**\n * Plan mode frequency - how often should the AI enter plan mode before implementing\n */\nexport const PLAN_MODE_FREQUENCY = [\n { id: \"always\", label: \"Always\", icon: \"🧠\", description: \"Plan before every task, even simple ones\" },\n { id: \"complex_tasks\", label: \"Complex Tasks Only\", icon: \"🎯\", description: \"Plan for multi-step or complex changes (recommended)\" },\n { id: \"multi_file\", label: \"Multi-file Changes\", icon: \"📁\", description: \"Plan when changes span multiple files\" },\n { id: \"new_features\", label: \"New Features\", icon: \"✨\", description: \"Plan only for new feature implementations\" },\n { id: \"on_request\", label: \"On Request\", icon: \"🙋\", description: \"Only plan when explicitly asked\" },\n { id: \"never\", label: \"Never\", icon: \"⚡\", description: \"Execute immediately without planning\" },\n];\n/**\n * Important files that AI should read first\n */\nexport const IMPORTANT_FILES = [\n { id: \"readme\", label: \"README.md\", icon: \"📄\", description: \"Project overview and setup\" },\n { id: \"contributing\", label: \"CONTRIBUTING.md\", icon: \"🤝\", description: \"Contribution guidelines\" },\n { id: \"architecture\", label: \"ARCHITECTURE.md\", icon: \"🏗️\", description: \"System design docs\" },\n { id: \"api_docs\", label: \"API Documentation\", icon: \"📚\", description: \"API reference\" },\n { id: \"changelog\", label: \"CHANGELOG.md\", icon: \"📝\", description: \"Version history\" },\n { id: \"agents\", label: \"AGENTS.md\", icon: \"🤖\", description: \"AI agent instructions\" },\n { id: \"package_json\", label: \"package.json\", icon: \"📦\", description: \"Project dependencies\" },\n { id: \"tsconfig\", label: \"tsconfig.json\", icon: \"📘\", description: \"TypeScript config\" },\n { id: \"env_example\", label: \".env.example\", icon: \"🔒\", description: \"Environment variables\" },\n { id: \"docker_compose\", label: \"docker-compose.yml\", icon: \"🐳\", description: \"Docker services\" },\n { id: \"makefile\", label: \"Makefile\", icon: \"🔧\", description: \"Build commands\" },\n { id: \"openapi\", label: \"openapi.yaml\", icon: \"📄\", description: \"OpenAPI spec\" },\n { id: \"prisma_schema\", label: \"prisma/schema.prisma\", icon: \"🔷\", description: \"Database schema\" },\n { id: \"other\", label: \"Other\", icon: \"📁\", description: \"Custom file\" },\n];\n","/**\n * Authentication Providers - specific OAuth/auth services\n * (Different from AUTH_PATTERNS which are the technical patterns)\n */\nexport const AUTH_PROVIDERS = [\n // Username/Password\n { id: \"username_password\", label: \"Simple user or Email & Password\", description: \"Traditional username/email + password login\", recommended: true },\n // OAuth Providers\n { id: \"github_oauth\", label: \"GitHub OAuth\", description: \"Sign in with GitHub\" },\n { id: \"google_oauth\", label: \"Google OAuth\", description: \"Sign in with Google\" },\n { id: \"microsoft_oauth\", label: \"Microsoft / Azure AD\", description: \"Sign in with Microsoft\" },\n { id: \"apple_oauth\", label: \"Apple Sign In\", description: \"Sign in with Apple\" },\n { id: \"facebook_oauth\", label: \"Facebook OAuth\", description: \"Sign in with Facebook\" },\n { id: \"twitter_oauth\", label: \"X (Twitter) OAuth\", description: \"Sign in with X/Twitter\" },\n { id: \"linkedin_oauth\", label: \"LinkedIn OAuth\", description: \"Sign in with LinkedIn\" },\n { id: \"discord_oauth\", label: \"Discord OAuth\", description: \"Sign in with Discord\" },\n { id: \"slack_oauth\", label: \"Slack OAuth\", description: \"Sign in with Slack\" },\n { id: \"gitlab_oauth\", label: \"GitLab OAuth\", description: \"Sign in with GitLab\" },\n { id: \"bitbucket_oauth\", label: \"Bitbucket OAuth\", description: \"Sign in with Bitbucket\" },\n { id: \"twitch_oauth\", label: \"Twitch OAuth\", description: \"Sign in with Twitch\" },\n { id: \"spotify_oauth\", label: \"Spotify OAuth\", description: \"Sign in with Spotify\" },\n // Passwordless\n { id: \"magic_link\", label: \"Magic Link (Email)\", description: \"Passwordless email login\" },\n { id: \"passkeys\", label: \"Passkeys / WebAuthn\", description: \"Biometric/hardware keys\" },\n { id: \"sms_otp\", label: \"SMS OTP\", description: \"Phone number verification\" },\n { id: \"email_otp\", label: \"Email OTP\", description: \"Email code verification\" },\n // Enterprise SSO\n { id: \"okta\", label: \"Okta\", description: \"Enterprise identity management\" },\n { id: \"auth0\", label: \"Auth0\", description: \"Identity platform\" },\n { id: \"keycloak\", label: \"Keycloak\", description: \"Open-source IAM\" },\n { id: \"cognito\", label: \"AWS Cognito\", description: \"AWS user pools\" },\n { id: \"firebase_auth\", label: \"Firebase Auth\", description: \"Google Firebase authentication\" },\n { id: \"supabase_auth\", label: \"Supabase Auth\", description: \"Supabase authentication\" },\n { id: \"clerk\", label: \"Clerk\", description: \"Modern auth for developers\" },\n { id: \"workos\", label: \"WorkOS\", description: \"Enterprise SSO & directory sync\" },\n { id: \"fusionauth\", label: \"FusionAuth\", description: \"Customer identity management\" },\n { id: \"authentik\", label: \"Authentik\", description: \"Open-source identity provider\" },\n { id: \"zitadel\", label: \"Zitadel\", description: \"Cloud-native identity management\" },\n // Other\n { id: \"ldap\", label: \"LDAP / Active Directory\", description: \"Directory service auth\" },\n { id: \"radius\", label: \"RADIUS\", description: \"Network access auth\" },\n { id: \"kerberos\", label: \"Kerberos\", description: \"Network authentication protocol\" },\n { id: \"other\", label: \"Other\", description: \"Custom auth provider\" },\n];\n/**\n * Secrets management strategies\n */\nexport const SECRETS_MANAGEMENT_OPTIONS = [\n { id: \"env_vars\", label: \"Environment Variables\", description: \"Use .env files locally, env vars in prod\", recommended: true },\n { id: \"dotenv\", label: \"dotenv / dotenvx\", description: \"Load .env files with dotenv library\" },\n { id: \"vault\", label: \"HashiCorp Vault\", description: \"Enterprise secrets management\" },\n { id: \"aws_secrets\", label: \"AWS Secrets Manager\", description: \"AWS native secrets storage\" },\n { id: \"aws_ssm\", label: \"AWS SSM Parameter Store\", description: \"AWS Systems Manager parameters\" },\n { id: \"gcp_secrets\", label: \"GCP Secret Manager\", description: \"Google Cloud secrets storage\" },\n { id: \"azure_keyvault\", label: \"Azure Key Vault\", description: \"Azure secrets and keys\" },\n { id: \"infisical\", label: \"Infisical\", description: \"Open-source secrets management\" },\n { id: \"doppler\", label: \"Doppler\", description: \"Universal secrets platform\" },\n { id: \"1password\", label: \"1Password Secrets Automation\", description: \"1Password for teams/CI\" },\n { id: \"bitwarden\", label: \"Bitwarden Secrets Manager\", description: \"Bitwarden for secrets\" },\n { id: \"sops\", label: \"SOPS (Mozilla)\", description: \"Encrypted files with KMS\" },\n { id: \"age\", label: \"age encryption\", description: \"Simple file encryption\" },\n { id: \"sealed_secrets\", label: \"Sealed Secrets (K8s)\", description: \"Kubernetes encrypted secrets\" },\n { id: \"external_secrets\", label: \"External Secrets Operator\", description: \"K8s external secrets sync\" },\n { id: \"git_crypt\", label: \"git-crypt\", description: \"Transparent file encryption in git\" },\n { id: \"chamber\", label: \"Chamber\", description: \"AWS SSM-based secrets tool\" },\n { id: \"berglas\", label: \"Berglas\", description: \"GCP secrets CLI tool\" },\n { id: \"other\", label: \"Other\", description: \"Custom secrets management\" },\n];\n/**\n * Security tooling options\n */\nexport const SECURITY_TOOLING_OPTIONS = [\n { id: \"dependabot\", label: \"Dependabot\", description: \"GitHub dependency updates\", recommended: true },\n { id: \"renovate\", label: \"Renovate\", description: \"Automated dependency updates\" },\n { id: \"snyk\", label: \"Snyk\", description: \"Vulnerability scanning\" },\n { id: \"sonarqube\", label: \"SonarQube\", description: \"Code quality and security\" },\n { id: \"codeql\", label: \"CodeQL\", description: \"GitHub semantic analysis\" },\n { id: \"semgrep\", label: \"Semgrep\", description: \"Lightweight static analysis\" },\n { id: \"trivy\", label: \"Trivy\", description: \"Container/IaC scanning\" },\n { id: \"grype\", label: \"Grype\", description: \"Container vulnerability scanner\" },\n { id: \"checkov\", label: \"Checkov\", description: \"IaC security scanning\" },\n { id: \"tfsec\", label: \"tfsec\", description: \"Terraform security scanner\" },\n { id: \"bandit\", label: \"Bandit\", description: \"Python security linter\" },\n { id: \"brakeman\", label: \"Brakeman\", description: \"Rails security scanner\" },\n { id: \"gosec\", label: \"gosec\", description: \"Go security checker\" },\n { id: \"safety\", label: \"Safety\", description: \"Python dependency checker\" },\n { id: \"npm_audit\", label: \"npm audit\", description: \"Node.js vulnerability check\" },\n { id: \"ossf_scorecard\", label: \"OSSF Scorecard\", description: \"Open source security metrics\" },\n { id: \"gitleaks\", label: \"Gitleaks\", description: \"Secret detection in git\" },\n { id: \"trufflehog\", label: \"TruffleHog\", description: \"Secret scanning\" },\n { id: \"other\", label: \"Other\", description: \"Custom security tooling\" },\n];\n/**\n * Authentication patterns\n */\nexport const AUTH_PATTERNS_OPTIONS = [\n { id: \"session\", label: \"Session-based\", description: \"Server-side sessions with cookies\", recommended: true },\n { id: \"jwt\", label: \"JWT Tokens\", description: \"Stateless JSON Web Tokens\" },\n { id: \"oauth2\", label: \"OAuth 2.0\", description: \"Third-party authorization\" },\n { id: \"oidc\", label: \"OpenID Connect\", description: \"OAuth2 + identity layer\" },\n { id: \"saml\", label: \"SAML\", description: \"Enterprise SSO\" },\n { id: \"passkeys\", label: \"Passkeys / WebAuthn\", description: \"Passwordless authentication\" },\n { id: \"magic_link\", label: \"Magic Links\", description: \"Email-based passwordless\" },\n { id: \"api_keys\", label: \"API Keys\", description: \"Simple key authentication\" },\n { id: \"mfa\", label: \"Multi-Factor Auth\", description: \"TOTP, SMS, or hardware keys\" },\n { id: \"basic_auth\", label: \"Basic Auth\", description: \"Username/password in header\" },\n { id: \"mtls\", label: \"Mutual TLS\", description: \"Client certificate auth\" },\n { id: \"other\", label: \"Other\", description: \"Custom authentication\" },\n];\n/**\n * Data handling options\n */\nexport const DATA_HANDLING_OPTIONS = [\n { id: \"encryption_at_rest\", label: \"Encryption at Rest\", description: \"Encrypt stored data\", recommended: true },\n { id: \"encryption_in_transit\", label: \"Encryption in Transit\", description: \"TLS/HTTPS everywhere\", recommended: true },\n { id: \"input_validation\", label: \"Input Validation\", description: \"Validate all user input\", recommended: true },\n { id: \"output_encoding\", label: \"Output Encoding\", description: \"Prevent XSS attacks\", recommended: true },\n { id: \"parameterized_queries\", label: \"Parameterized Queries\", description: \"Prevent SQL injection\", recommended: true },\n { id: \"rate_limiting\", label: \"Rate Limiting\", description: \"Prevent abuse\" },\n { id: \"pii_handling\", label: \"PII Handling\", description: \"Personal data protection\" },\n { id: \"data_masking\", label: \"Data Masking\", description: \"Hide sensitive data\" },\n { id: \"audit_logging\", label: \"Audit Logging\", description: \"Track data access\" },\n { id: \"backup_encryption\", label: \"Backup Encryption\", description: \"Encrypt backups\" },\n { id: \"data_retention\", label: \"Data Retention Policy\", description: \"Auto-delete old data\" },\n { id: \"data_minimization\", label: \"Data Minimization\", description: \"Collect only necessary data\" },\n { id: \"right_to_erasure\", label: \"Right to Erasure\", description: \"Support data deletion requests\" },\n { id: \"data_portability\", label: \"Data Portability\", description: \"Export user data on request\" },\n { id: \"consent_management\", label: \"Consent Management\", description: \"Track user consent\" },\n { id: \"other\", label: \"Other\", description: \"Custom data handling\" },\n];\n/**\n * Compliance frameworks and regulations\n */\nexport const COMPLIANCE_OPTIONS = [\n // Privacy regulations\n { id: \"gdpr\", label: \"GDPR\", description: \"EU General Data Protection Regulation\", recommended: true },\n { id: \"ccpa\", label: \"CCPA/CPRA\", description: \"California Consumer Privacy Act\" },\n { id: \"lgpd\", label: \"LGPD\", description: \"Brazil's data protection law\" },\n { id: \"pipeda\", label: \"PIPEDA\", description: \"Canada's privacy law\" },\n { id: \"pdpa\", label: \"PDPA\", description: \"Singapore's Personal Data Protection Act\" },\n { id: \"appi\", label: \"APPI\", description: \"Japan's privacy law\" },\n // Industry-specific\n { id: \"hipaa\", label: \"HIPAA\", description: \"US healthcare data protection\" },\n { id: \"pci_dss\", label: \"PCI-DSS\", description: \"Payment card data security\" },\n { id: \"ferpa\", label: \"FERPA\", description: \"US student education records\" },\n { id: \"coppa\", label: \"COPPA\", description: \"US children's online privacy\" },\n { id: \"glba\", label: \"GLBA\", description: \"US financial services privacy\" },\n // Security frameworks\n { id: \"soc2\", label: \"SOC 2\", description: \"Service Organization Controls\" },\n { id: \"iso27001\", label: \"ISO 27001\", description: \"Information security management\" },\n { id: \"iso27701\", label: \"ISO 27701\", description: \"Privacy information management\" },\n { id: \"nist\", label: \"NIST CSF\", description: \"Cybersecurity framework\" },\n { id: \"fedramp\", label: \"FedRAMP\", description: \"US federal cloud security\" },\n { id: \"cis\", label: \"CIS Controls\", description: \"Center for Internet Security\" },\n // Accessibility\n { id: \"wcag\", label: \"WCAG 2.1\", description: \"Web accessibility guidelines\" },\n { id: \"section508\", label: \"Section 508\", description: \"US federal accessibility\" },\n { id: \"ada\", label: \"ADA\", description: \"Americans with Disabilities Act\" },\n // Other\n { id: \"other\", label: \"Other\", description: \"Custom compliance requirements\" },\n];\n/**\n * Analytics and tracking options (privacy-focused)\n */\nexport const ANALYTICS_OPTIONS = [\n // Privacy-focused / cookie-less\n { id: \"umami\", label: \"Umami\", description: \"Privacy-focused, cookie-less, self-hosted\", recommended: true },\n { id: \"plausible\", label: \"Plausible\", description: \"Privacy-focused, cookie-less\" },\n { id: \"fathom\", label: \"Fathom\", description: \"Privacy-first analytics\" },\n { id: \"simple_analytics\", label: \"Simple Analytics\", description: \"Privacy-friendly, no cookies\" },\n { id: \"pirsch\", label: \"Pirsch\", description: \"Cookie-free web analytics\" },\n { id: \"counter\", label: \"Counter.dev\", description: \"Privacy-first, open-source\" },\n { id: \"cabin\", label: \"Cabin\", description: \"Privacy-first carbon-aware analytics\" },\n { id: \"goatcounter\", label: \"GoatCounter\", description: \"Open-source, privacy-aware\" },\n { id: \"ackee\", label: \"Ackee\", description: \"Self-hosted, privacy-focused\" },\n { id: \"matomo\", label: \"Matomo\", description: \"Self-hosted Google Analytics alternative\" },\n // Traditional (require cookies/consent)\n { id: \"google_analytics\", label: \"Google Analytics\", description: \"Requires cookie consent\" },\n { id: \"mixpanel\", label: \"Mixpanel\", description: \"Product analytics\" },\n { id: \"amplitude\", label: \"Amplitude\", description: \"Product analytics platform\" },\n { id: \"heap\", label: \"Heap\", description: \"Digital insights platform\" },\n { id: \"posthog\", label: \"PostHog\", description: \"Open-source product analytics\" },\n { id: \"none\", label: \"No Analytics\", description: \"Don't track users\" },\n];\n","/**\n * Naming conventions\n */\nexport const NAMING_CONVENTIONS = [\n { id: \"language_default\", label: \"Follow language conventions\", description: \"Use idiomatic style for selected language(s)\" },\n { id: \"camelCase\", label: \"camelCase\", description: \"JavaScript, TypeScript, Java\" },\n { id: \"snake_case\", label: \"snake_case\", description: \"Python, Ruby, Rust, Go\" },\n { id: \"PascalCase\", label: \"PascalCase\", description: \"C#, .NET classes\" },\n { id: \"kebab-case\", label: \"kebab-case\", description: \"CSS, HTML attributes, URLs\" },\n { id: \"SCREAMING_SNAKE_CASE\", label: \"SCREAMING_SNAKE_CASE\", description: \"Constants, environment variables\" },\n];\n/**\n * Error handling patterns\n */\nexport const ERROR_HANDLING_PATTERNS = [\n { id: \"try_catch\", label: \"Try-Catch\", description: \"Standard exception handling\" },\n { id: \"result_type\", label: \"Result/Either Type\", description: \"Functional error handling\" },\n { id: \"error_codes\", label: \"Error Codes\", description: \"Numeric/string error codes\" },\n { id: \"monads\", label: \"Monads (Option/Maybe)\", description: \"Functional programming style\" },\n { id: \"panic_recover\", label: \"Panic/Recover\", description: \"Go-style error handling\" },\n { id: \"error_boundaries\", label: \"Error Boundaries\", description: \"React error boundaries\" },\n { id: \"global_handler\", label: \"Global Error Handler\", description: \"Centralized error handling\" },\n { id: \"other\", label: \"Other\", description: \"Custom error handling\" },\n];\n/**\n * Logging conventions\n */\nexport const LOGGING_OPTIONS = [\n { id: \"structured\", label: \"Structured Logging\", description: \"JSON logs with metadata\" },\n { id: \"console\", label: \"Console Logging\", description: \"Simple console.log/print\" },\n { id: \"log_levels\", label: \"Log Levels\", description: \"DEBUG, INFO, WARN, ERROR\" },\n { id: \"winston\", label: \"Winston\", description: \"Node.js logging library\" },\n { id: \"pino\", label: \"Pino\", description: \"Fast Node.js logger\" },\n { id: \"bunyan\", label: \"Bunyan\", description: \"JSON logging for Node.js\" },\n { id: \"log4j\", label: \"Log4j / Logback\", description: \"Java logging framework\" },\n { id: \"slog\", label: \"slog\", description: \"Go structured logging\" },\n { id: \"logrus\", label: \"Logrus\", description: \"Go structured logger\" },\n { id: \"zap\", label: \"Zap\", description: \"Uber's Go logger\" },\n { id: \"python_logging\", label: \"Python logging\", description: \"Standard library logging\" },\n { id: \"loguru\", label: \"Loguru\", description: \"Python logging made simple\" },\n { id: \"tracing\", label: \"tracing\", description: \"Rust async logging\" },\n { id: \"serilog\", label: \"Serilog\", description: \".NET structured logging\" },\n { id: \"elk\", label: \"ELK Stack\", description: \"Elasticsearch, Logstash, Kibana\" },\n { id: \"loki\", label: \"Grafana Loki\", description: \"Log aggregation\" },\n { id: \"datadog\", label: \"Datadog Logs\", description: \"Cloud logging service\" },\n { id: \"other\", label: \"Other\", description: \"Custom logging\" },\n];\n/**\n * Boundary options (what AI should always/ask/never do)\n */\nexport const BOUNDARY_OPTIONS = [\n // File operations\n { action: \"Delete files\", category: \"files\" },\n { action: \"Create new files\", category: \"files\" },\n { action: \"Rename/move files\", category: \"files\" },\n // Code changes\n { action: \"Rewrite large sections\", category: \"code\" },\n { action: \"Refactor architecture\", category: \"code\" },\n { action: \"Add new dependencies\", category: \"code\" },\n { action: \"Remove dependencies\", category: \"code\" },\n { action: \"Change public APIs\", category: \"code\" },\n // Database\n { action: \"Modify database schema\", category: \"database\" },\n { action: \"Write migrations\", category: \"database\" },\n { action: \"Delete data\", category: \"database\" },\n // Git\n { action: \"Make commits\", category: \"git\" },\n { action: \"Push to remote\", category: \"git\" },\n { action: \"Create branches\", category: \"git\" },\n { action: \"Merge branches\", category: \"git\" },\n // Deployment\n { action: \"Deploy to production\", category: \"deployment\" },\n { action: \"Modify CI/CD config\", category: \"deployment\" },\n { action: \"Change environment variables\", category: \"deployment\" },\n // Security\n { action: \"Modify authentication\", category: \"security\" },\n { action: \"Change permissions\", category: \"security\" },\n { action: \"Access secrets\", category: \"security\" },\n];\n","/**\n * Test levels\n */\nexport const TEST_LEVELS = [\n { id: \"unit\", label: \"Unit Tests\", description: \"Test individual functions/components\" },\n { id: \"integration\", label: \"Integration Tests\", description: \"Test component interactions\" },\n { id: \"e2e\", label: \"End-to-End Tests\", description: \"Test full user flows\" },\n { id: \"smoke\", label: \"Smoke Tests\", description: \"Quick sanity checks\" },\n { id: \"regression\", label: \"Regression Tests\", description: \"Prevent bug recurrence\" },\n { id: \"performance\", label: \"Performance Tests\", description: \"Load and stress testing\" },\n { id: \"security\", label: \"Security Tests\", description: \"Vulnerability scanning\" },\n { id: \"accessibility\", label: \"Accessibility Tests\", description: \"WCAG compliance\" },\n { id: \"visual\", label: \"Visual Regression\", description: \"Screenshot comparison\" },\n { id: \"contract\", label: \"Contract Tests\", description: \"API contract validation\" },\n];\n/**\n * Test frameworks (comprehensive list)\n */\nexport const TEST_FRAMEWORKS = [\n // JavaScript/TypeScript\n \"Jest\",\n \"Vitest\",\n \"Mocha\",\n \"Jasmine\",\n \"AVA\",\n \"Tape\",\n \"QUnit\",\n \"Node Test Runner\",\n // E2E / Browser\n \"Playwright\",\n \"Cypress\",\n \"Puppeteer\",\n \"Selenium\",\n \"WebdriverIO\",\n \"TestCafe\",\n \"Nightwatch\",\n // React\n \"React Testing Library\",\n \"Enzyme\",\n // Vue\n \"Vue Test Utils\",\n \"Vue Testing Library\",\n // Angular\n \"Angular Testing\",\n \"Karma\",\n // Python\n \"pytest\",\n \"unittest\",\n \"nose2\",\n \"doctest\",\n \"hypothesis\",\n \"tox\",\n \"nox\",\n \"Robot Framework\",\n // Go\n \"testing (stdlib)\",\n \"testify\",\n \"ginkgo\",\n \"gomega\",\n \"gocheck\",\n // Rust\n \"cargo test\",\n \"proptest\",\n \"quickcheck\",\n \"criterion\",\n // Java\n \"JUnit\",\n \"TestNG\",\n \"Mockito\",\n \"Spock\",\n \"Cucumber\",\n // .NET\n \"xUnit\",\n \"NUnit\",\n \"MSTest\",\n \"SpecFlow\",\n // Ruby\n \"RSpec\",\n \"Minitest\",\n \"Capybara\",\n \"Cucumber\",\n // PHP\n \"PHPUnit\",\n \"Pest\",\n \"Codeception\",\n \"Behat\",\n // Mobile\n \"XCTest\",\n \"Espresso\",\n \"Detox\",\n \"Appium\",\n // API\n \"Postman\",\n \"Insomnia\",\n \"REST Assured\",\n \"Supertest\",\n \"httpx\",\n // Load\n \"k6\",\n \"Locust\",\n \"Artillery\",\n \"JMeter\",\n \"Gatling\",\n // Other\n \"Storybook\",\n \"Chromatic\",\n \"Percy\",\n \"Applitools\",\n];\n","/**\n * Common commands organized by category\n * This is the single source of truth for both CLI and WebUI\n */\nexport const COMMON_COMMANDS = [\n // Build commands - JavaScript/Node\n { cmd: \"npm run build\", category: \"build\" },\n { cmd: \"pnpm build\", category: \"build\" },\n { cmd: \"yarn build\", category: \"build\" },\n { cmd: \"bun run build\", category: \"build\" },\n { cmd: \"next build\", category: \"build\" },\n { cmd: \"vite build\", category: \"build\" },\n { cmd: \"tsc\", category: \"build\" },\n { cmd: \"esbuild\", category: \"build\" },\n { cmd: \"rollup -c\", category: \"build\" },\n { cmd: \"webpack\", category: \"build\" },\n { cmd: \"parcel build\", category: \"build\" },\n // Build - Python\n { cmd: \"python setup.py build\", category: \"build\" },\n { cmd: \"pip install -e .\", category: \"build\" },\n { cmd: \"poetry build\", category: \"build\" },\n { cmd: \"pdm build\", category: \"build\" },\n { cmd: \"hatch build\", category: \"build\" },\n // Build - Go\n { cmd: \"go build\", category: \"build\" },\n { cmd: \"go build ./...\", category: \"build\" },\n { cmd: \"go install\", category: \"build\" },\n // Build - Rust\n { cmd: \"cargo build\", category: \"build\" },\n { cmd: \"cargo build --release\", category: \"build\" },\n // Build - Java/JVM\n { cmd: \"mvn package\", category: \"build\" },\n { cmd: \"mvn clean install\", category: \"build\" },\n { cmd: \"gradle build\", category: \"build\" },\n { cmd: \"./gradlew build\", category: \"build\" },\n // Build - .NET\n { cmd: \"dotnet build\", category: \"build\" },\n { cmd: \"dotnet publish\", category: \"build\" },\n // Build - Containers\n { cmd: \"docker build -t app .\", category: \"build\" },\n { cmd: \"docker compose build\", category: \"build\" },\n { cmd: \"podman build -t app .\", category: \"build\" },\n // Build - IaC\n { cmd: \"terraform init\", category: \"build\" },\n { cmd: \"terraform plan\", category: \"build\" },\n { cmd: \"pulumi preview\", category: \"build\" },\n { cmd: \"cdk synth\", category: \"build\" },\n // Test commands - JavaScript\n { cmd: \"npm test\", category: \"test\" },\n { cmd: \"pnpm test\", category: \"test\" },\n { cmd: \"yarn test\", category: \"test\" },\n { cmd: \"bun test\", category: \"test\" },\n { cmd: \"vitest\", category: \"test\" },\n { cmd: \"vitest run\", category: \"test\" },\n { cmd: \"vitest --coverage\", category: \"test\" },\n { cmd: \"jest\", category: \"test\" },\n { cmd: \"jest --coverage\", category: \"test\" },\n { cmd: \"mocha\", category: \"test\" },\n // Test - E2E\n { cmd: \"playwright test\", category: \"test\" },\n { cmd: \"cypress run\", category: \"test\" },\n { cmd: \"cypress open\", category: \"test\" },\n // Test - Python\n { cmd: \"pytest\", category: \"test\" },\n { cmd: \"pytest --cov\", category: \"test\" },\n { cmd: \"pytest -v\", category: \"test\" },\n { cmd: \"python -m unittest\", category: \"test\" },\n { cmd: \"tox\", category: \"test\" },\n { cmd: \"nox\", category: \"test\" },\n // Test - Go\n { cmd: \"go test ./...\", category: \"test\" },\n { cmd: \"go test -v ./...\", category: \"test\" },\n { cmd: \"go test -cover ./...\", category: \"test\" },\n // Test - Rust\n { cmd: \"cargo test\", category: \"test\" },\n { cmd: \"cargo test --all\", category: \"test\" },\n // Test - Java\n { cmd: \"mvn test\", category: \"test\" },\n { cmd: \"gradle test\", category: \"test\" },\n { cmd: \"./gradlew test\", category: \"test\" },\n // Test - .NET\n { cmd: \"dotnet test\", category: \"test\" },\n // Test - Load\n { cmd: \"k6 run\", category: \"test\" },\n { cmd: \"locust\", category: \"test\" },\n { cmd: \"artillery run\", category: \"test\" },\n // Lint commands - JavaScript\n { cmd: \"npm run lint\", category: \"lint\" },\n { cmd: \"eslint .\", category: \"lint\" },\n { cmd: \"eslint . --fix\", category: \"lint\" },\n { cmd: \"next lint\", category: \"lint\" },\n { cmd: \"biome check\", category: \"lint\" },\n { cmd: \"oxlint\", category: \"lint\" },\n // Lint - Python\n { cmd: \"ruff check .\", category: \"lint\" },\n { cmd: \"flake8\", category: \"lint\" },\n { cmd: \"pylint\", category: \"lint\" },\n // Lint - Go\n { cmd: \"golangci-lint run\", category: \"lint\" },\n // Lint - Rust\n { cmd: \"cargo clippy\", category: \"lint\" },\n // Lint - Shell\n { cmd: \"shellcheck *.sh\", category: \"lint\" },\n // Lint - IaC\n { cmd: \"terraform validate\", category: \"lint\" },\n { cmd: \"tflint\", category: \"lint\" },\n { cmd: \"checkov\", category: \"lint\" },\n { cmd: \"ansible-lint\", category: \"lint\" },\n { cmd: \"yamllint .\", category: \"lint\" },\n { cmd: \"helm lint\", category: \"lint\" },\n // Lint - Docker\n { cmd: \"hadolint Dockerfile\", category: \"lint\" },\n // Dev commands\n { cmd: \"npm run dev\", category: \"dev\" },\n { cmd: \"pnpm dev\", category: \"dev\" },\n { cmd: \"yarn dev\", category: \"dev\" },\n { cmd: \"bun dev\", category: \"dev\" },\n { cmd: \"next dev\", category: \"dev\" },\n { cmd: \"next dev --turbo\", category: \"dev\" },\n { cmd: \"vite\", category: \"dev\" },\n { cmd: \"vite dev\", category: \"dev\" },\n { cmd: \"nuxt dev\", category: \"dev\" },\n { cmd: \"remix dev\", category: \"dev\" },\n { cmd: \"astro dev\", category: \"dev\" },\n // Dev - Python\n { cmd: \"python app.py\", category: \"dev\" },\n { cmd: \"flask run\", category: \"dev\" },\n { cmd: \"uvicorn main:app --reload\", category: \"dev\" },\n { cmd: \"python manage.py runserver\", category: \"dev\" },\n // Dev - Go\n { cmd: \"go run .\", category: \"dev\" },\n { cmd: \"air\", category: \"dev\" },\n // Dev - Rust\n { cmd: \"cargo run\", category: \"dev\" },\n { cmd: \"cargo watch -x run\", category: \"dev\" },\n // Dev - Containers\n { cmd: \"docker compose up\", category: \"dev\" },\n { cmd: \"docker compose up -d\", category: \"dev\" },\n { cmd: \"docker compose watch\", category: \"dev\" },\n // Dev - Kubernetes\n { cmd: \"skaffold dev\", category: \"dev\" },\n { cmd: \"tilt up\", category: \"dev\" },\n // Format commands - JavaScript\n { cmd: \"prettier --write .\", category: \"format\" },\n { cmd: \"npm run format\", category: \"format\" },\n { cmd: \"pnpm format\", category: \"format\" },\n { cmd: \"biome format --write .\", category: \"format\" },\n { cmd: \"dprint fmt\", category: \"format\" },\n // Format - Python\n { cmd: \"black .\", category: \"format\" },\n { cmd: \"ruff format .\", category: \"format\" },\n { cmd: \"isort .\", category: \"format\" },\n // Format - Go\n { cmd: \"go fmt ./...\", category: \"format\" },\n { cmd: \"gofmt -w .\", category: \"format\" },\n { cmd: \"goimports -w .\", category: \"format\" },\n // Format - Rust\n { cmd: \"cargo fmt\", category: \"format\" },\n // Format - Other\n { cmd: \"shfmt -w .\", category: \"format\" },\n { cmd: \"terraform fmt -recursive\", category: \"format\" },\n // Typecheck commands - TypeScript\n { cmd: \"tsc --noEmit\", category: \"typecheck\" },\n { cmd: \"npm run typecheck\", category: \"typecheck\" },\n { cmd: \"pnpm typecheck\", category: \"typecheck\" },\n { cmd: \"vue-tsc --noEmit\", category: \"typecheck\" },\n // Typecheck - Python\n { cmd: \"mypy .\", category: \"typecheck\" },\n { cmd: \"pyright\", category: \"typecheck\" },\n { cmd: \"pyre check\", category: \"typecheck\" },\n // Typecheck - Go\n { cmd: \"go vet ./...\", category: \"typecheck\" },\n { cmd: \"staticcheck ./...\", category: \"typecheck\" },\n // Typecheck - Rust\n { cmd: \"cargo check\", category: \"typecheck\" },\n // Clean commands\n { cmd: \"npm run clean\", category: \"clean\" },\n { cmd: \"rm -rf node_modules\", category: \"clean\" },\n { cmd: \"rm -rf dist\", category: \"clean\" },\n { cmd: \"rm -rf .next\", category: \"clean\" },\n { cmd: \"rm -rf build\", category: \"clean\" },\n { cmd: \"rm -rf coverage\", category: \"clean\" },\n { cmd: \"pnpm clean\", category: \"clean\" },\n // Clean - Python\n { cmd: \"rm -rf __pycache__\", category: \"clean\" },\n { cmd: \"rm -rf .pytest_cache\", category: \"clean\" },\n { cmd: \"find . -name '*.pyc' -delete\", category: \"clean\" },\n // Clean - Go\n { cmd: \"go clean -cache\", category: \"clean\" },\n { cmd: \"go clean -testcache\", category: \"clean\" },\n // Clean - Rust\n { cmd: \"cargo clean\", category: \"clean\" },\n // Clean - Containers\n { cmd: \"docker system prune -af\", category: \"clean\" },\n { cmd: \"docker compose down -v\", category: \"clean\" },\n // Pre-commit hooks\n { cmd: \"npx husky install\", category: \"preCommit\" },\n { cmd: \"pnpm dlx husky install\", category: \"preCommit\" },\n { cmd: \"lefthook install\", category: \"preCommit\" },\n { cmd: \"pre-commit install\", category: \"preCommit\" },\n { cmd: \"pre-commit run --all-files\", category: \"preCommit\" },\n { cmd: \"lint-staged\", category: \"preCommit\" },\n { cmd: \"npx lint-staged\", category: \"preCommit\" },\n // Other/Misc commands\n { cmd: \"npm run storybook\", category: \"other\" },\n { cmd: \"prisma db push\", category: \"other\" },\n { cmd: \"prisma generate\", category: \"other\" },\n { cmd: \"prisma migrate dev\", category: \"other\" },\n { cmd: \"drizzle-kit push\", category: \"other\" },\n // Deploy\n { cmd: \"terraform apply\", category: \"other\" },\n { cmd: \"pulumi up\", category: \"other\" },\n { cmd: \"cdk deploy\", category: \"other\" },\n { cmd: \"ansible-playbook\", category: \"other\" },\n { cmd: \"helm install\", category: \"other\" },\n { cmd: \"helm upgrade --install\", category: \"other\" },\n { cmd: \"kubectl apply -f\", category: \"other\" },\n];\n/**\n * Get commands by category\n */\nexport const getCommandsByCategory = (category) => COMMON_COMMANDS.filter(c => c.category === category).map(c => c.cmd);\n/**\n * Commands grouped by category (for CLI compatibility)\n */\nexport const COMMANDS_BY_CATEGORY = {\n build: getCommandsByCategory(\"build\"),\n test: getCommandsByCategory(\"test\"),\n lint: getCommandsByCategory(\"lint\"),\n dev: getCommandsByCategory(\"dev\"),\n format: getCommandsByCategory(\"format\"),\n typecheck: getCommandsByCategory(\"typecheck\"),\n clean: getCommandsByCategory(\"clean\"),\n preCommit: getCommandsByCategory(\"preCommit\"),\n additional: getCommandsByCategory(\"other\"),\n};\n","/**\n * Wizard Options - Imported from shared package\n * \n * This file imports all wizard constants from @lynxprompt/shared\n * and transforms them for CLI use (prompts library format).\n */\n\n// Import from compiled dist folder to avoid rootDir issues\nimport {\n // Types\n type WizardOption,\n // Constants\n LANGUAGES as SHARED_LANGUAGES,\n FRAMEWORKS as SHARED_FRAMEWORKS,\n DATABASES as SHARED_DATABASES,\n PACKAGE_MANAGERS as SHARED_PACKAGE_MANAGERS,\n MONOREPO_TOOLS as SHARED_MONOREPO_TOOLS,\n JS_RUNTIMES as SHARED_JS_RUNTIMES,\n ORM_OPTIONS as SHARED_ORM_OPTIONS,\n PROJECT_TYPES as SHARED_PROJECT_TYPES,\n ARCHITECTURE_PATTERNS as SHARED_ARCHITECTURE_PATTERNS,\n DEV_OS_OPTIONS as SHARED_DEV_OS_OPTIONS,\n REPO_HOSTS as SHARED_REPO_HOSTS,\n CICD_OPTIONS as SHARED_CICD_OPTIONS,\n LICENSES as SHARED_LICENSES,\n BRANCH_STRATEGIES as SHARED_BRANCH_STRATEGIES,\n DEFAULT_BRANCHES as SHARED_DEFAULT_BRANCHES,\n SELF_HOSTED_TARGETS as SHARED_SELF_HOSTED_TARGETS,\n CLOUD_TARGETS as SHARED_CLOUD_TARGETS,\n CONTAINER_REGISTRIES as SHARED_CONTAINER_REGISTRIES,\n VERSION_TAG_FORMATS as SHARED_VERSION_TAG_FORMATS,\n CHANGELOG_OPTIONS as SHARED_CHANGELOG_OPTIONS,\n VPN_OPTIONS as SHARED_VPN_OPTIONS,\n GITOPS_TOOLS as SHARED_GITOPS_TOOLS,\n AI_BEHAVIOR_RULES as SHARED_AI_BEHAVIOR_RULES,\n IMPORTANT_FILES as SHARED_IMPORTANT_FILES,\n PLAN_MODE_FREQUENCY as SHARED_PLAN_MODE_FREQUENCY,\n AUTH_PROVIDERS as SHARED_AUTH_PROVIDERS,\n SECRETS_MANAGEMENT_OPTIONS as SHARED_SECRETS_MANAGEMENT_OPTIONS,\n SECURITY_TOOLING_OPTIONS as SHARED_SECURITY_TOOLING_OPTIONS,\n AUTH_PATTERNS_OPTIONS as SHARED_AUTH_PATTERNS_OPTIONS,\n DATA_HANDLING_OPTIONS as SHARED_DATA_HANDLING_OPTIONS,\n COMPLIANCE_OPTIONS as SHARED_COMPLIANCE_OPTIONS,\n ANALYTICS_OPTIONS as SHARED_ANALYTICS_OPTIONS,\n NAMING_CONVENTIONS as SHARED_NAMING_CONVENTIONS,\n ERROR_HANDLING_PATTERNS as SHARED_ERROR_HANDLING_PATTERNS,\n LOGGING_OPTIONS as SHARED_LOGGING_OPTIONS,\n BOUNDARY_OPTIONS as SHARED_BOUNDARY_OPTIONS,\n TEST_LEVELS as SHARED_TEST_LEVELS,\n TEST_FRAMEWORKS as SHARED_TEST_FRAMEWORKS,\n COMMANDS_BY_CATEGORY as SHARED_COMMANDS_BY_CATEGORY,\n} from \"../../../packages/shared/dist/wizard/index.js\";\n\n// ============================================\n// Transform to CLI format: { title, value }\n// ============================================\n\nfunction toCliFormat<T extends WizardOption>(options: T[]): Array<{ title: string; value: string }> {\n return options.map((o) => ({\n title: o.icon ? `${o.icon} ${o.label}` : o.label,\n value: o.id,\n }));\n}\n\nfunction toCliFormatWithDesc<T extends WizardOption & { description?: string }>(\n options: T[]\n): Array<{ title: string; value: string; description?: string }> {\n return options.map((o) => ({\n title: o.icon ? `${o.icon} ${o.label}` : o.label,\n value: o.id,\n description: o.description,\n }));\n}\n\n// Tech Stack\nexport const LANGUAGES = toCliFormat(SHARED_LANGUAGES);\nexport const FRAMEWORKS = toCliFormat(SHARED_FRAMEWORKS);\nexport const DATABASES = toCliFormat(SHARED_DATABASES);\nexport const PACKAGE_MANAGERS = SHARED_PACKAGE_MANAGERS.map((o) => ({\n title: `${o.icon} ${o.label}`,\n value: o.id,\n desc: o.description,\n}));\nexport const MONOREPO_TOOLS = SHARED_MONOREPO_TOOLS.map((o) => ({\n title: `${o.icon} ${o.label}`,\n value: o.id,\n desc: o.description,\n}));\nexport const JS_RUNTIMES = SHARED_JS_RUNTIMES.map((o) => ({\n title: `${o.icon} ${o.label}`,\n value: o.id,\n desc: o.description,\n}));\nexport const ORM_OPTIONS = SHARED_ORM_OPTIONS.map((o) => ({\n title: o.icon ? `${o.icon} ${o.label}` : o.label,\n value: o.id,\n langs: o.languages || [],\n}));\n\n// Project\nexport const PROJECT_TYPES = SHARED_PROJECT_TYPES.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n description: o.description,\n}));\nexport const ARCHITECTURE_PATTERNS = SHARED_ARCHITECTURE_PATTERNS.map((o) => ({\n id: o.id,\n label: o.label,\n description: o.description,\n}));\nexport const DEV_OS_OPTIONS = SHARED_DEV_OS_OPTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\n\n// Repository\nexport const REPO_HOSTS = SHARED_REPO_HOSTS.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\nexport const CICD_OPTIONS = SHARED_CICD_OPTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\nexport const LICENSES = SHARED_LICENSES.map((o) => ({\n id: o.id,\n label: o.label,\n}));\nexport const BRANCH_STRATEGIES = toCliFormatWithDesc(SHARED_BRANCH_STRATEGIES);\nexport const DEFAULT_BRANCHES = toCliFormat(SHARED_DEFAULT_BRANCHES);\nexport const SELF_HOSTED_TARGETS = toCliFormat(SHARED_SELF_HOSTED_TARGETS);\nexport const CLOUD_TARGETS = toCliFormat(SHARED_CLOUD_TARGETS);\nexport const DEPLOYMENT_TARGETS = [...SELF_HOSTED_TARGETS, ...CLOUD_TARGETS];\nexport const CONTAINER_REGISTRIES = SHARED_CONTAINER_REGISTRIES.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\n\n// Versioning & Release\nexport const VERSION_TAG_FORMATS = toCliFormatWithDesc(SHARED_VERSION_TAG_FORMATS);\nexport const CHANGELOG_OPTIONS = toCliFormatWithDesc(SHARED_CHANGELOG_OPTIONS);\n\n// Infrastructure\nexport const VPN_OPTIONS = toCliFormatWithDesc(SHARED_VPN_OPTIONS);\nexport const GITOPS_TOOLS = toCliFormatWithDesc(SHARED_GITOPS_TOOLS);\n\n// AI Behavior\nexport const AI_BEHAVIOR_RULES = SHARED_AI_BEHAVIOR_RULES.map((o) => ({\n id: o.id,\n label: o.label,\n description: o.description,\n recommended: o.recommended,\n}));\nexport const IMPORTANT_FILES = SHARED_IMPORTANT_FILES.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n description: o.description,\n}));\nexport const PLAN_MODE_FREQUENCY = toCliFormatWithDesc(SHARED_PLAN_MODE_FREQUENCY);\n\n// Security\nexport const AUTH_PROVIDERS = toCliFormatWithDesc(SHARED_AUTH_PROVIDERS);\nexport const SECRETS_MANAGEMENT_OPTIONS = toCliFormatWithDesc(SHARED_SECRETS_MANAGEMENT_OPTIONS);\nexport const SECURITY_TOOLING_OPTIONS = toCliFormatWithDesc(SHARED_SECURITY_TOOLING_OPTIONS);\nexport const AUTH_PATTERNS_OPTIONS = toCliFormatWithDesc(SHARED_AUTH_PATTERNS_OPTIONS);\nexport const DATA_HANDLING_OPTIONS = toCliFormatWithDesc(SHARED_DATA_HANDLING_OPTIONS);\nexport const COMPLIANCE_OPTIONS = toCliFormatWithDesc(SHARED_COMPLIANCE_OPTIONS);\nexport const ANALYTICS_OPTIONS = toCliFormatWithDesc(SHARED_ANALYTICS_OPTIONS);\n\n// Code Style\nexport const NAMING_CONVENTIONS = SHARED_NAMING_CONVENTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n desc: o.description,\n}));\nexport const ERROR_PATTERNS = SHARED_ERROR_HANDLING_PATTERNS.map((o) => ({\n id: o.id,\n label: o.label,\n}));\nexport const LOGGING_OPTIONS = SHARED_LOGGING_OPTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n}));\nexport const BOUNDARY_OPTIONS = SHARED_BOUNDARY_OPTIONS.map((o) => o.action);\n\n// Testing\nexport const TEST_LEVELS = SHARED_TEST_LEVELS.map((o) => ({\n id: o.id,\n label: o.label,\n desc: o.description,\n}));\nexport const TEST_FRAMEWORKS = SHARED_TEST_FRAMEWORKS;\n\n// Commands - CLI uses categorized format\nexport const COMMON_COMMANDS = SHARED_COMMANDS_BY_CATEGORY;\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError, SearchResult } from \"../api.js\";\n\ninterface SearchOptions {\n limit: string;\n}\n\nexport async function searchCommand(\n query: string,\n options: SearchOptions\n): Promise<void> {\n const spinner = ora(`Searching for \"${query}\"...`).start();\n\n try {\n const limit = parseInt(options.limit, 10) || 20;\n const { templates, total, hasMore } = await api.searchBlueprints(query, limit);\n spinner.stop();\n\n if (templates.length === 0) {\n console.log();\n console.log(chalk.yellow(`No blueprints found for \"${query}\".`));\n console.log(chalk.gray(\"Try different keywords or browse at https://lynxprompt.com/blueprints\"));\n return;\n }\n\n console.log();\n console.log(chalk.cyan(`🔍 Search Results for \"${query}\" (${total} found)`));\n console.log();\n\n for (const result of templates) {\n printSearchResult(result);\n }\n\n if (hasMore) {\n console.log(chalk.gray(`Showing ${templates.length} of ${total}. Use --limit to see more.`));\n }\n\n console.log();\n console.log(chalk.gray(\"Use 'lynxprompt pull <id>' to download a blueprint.\"));\n } catch (error) {\n spinner.fail(\"Search failed\");\n handleApiError(error);\n }\n}\n\nfunction printSearchResult(result: SearchResult): void {\n const officialBadge = result.isOfficial ? chalk.magenta(\" ★ Official\") : \"\";\n \n console.log(` ${chalk.bold(result.name)}${officialBadge}`);\n console.log(` ${chalk.cyan(result.id)}`);\n if (result.description) {\n console.log(` ${chalk.gray(truncate(result.description, 60))}`);\n }\n console.log(` ${chalk.gray(`by ${result.author}`)} • ${chalk.gray(`↓${result.downloads}`)} ${chalk.gray(`♥${result.likes}`)}`);\n if (result.tags && result.tags.length > 0) {\n console.log(` ${formatTags(result.tags)}`);\n }\n console.log();\n}\n\nfunction formatTags(tags: string[]): string {\n return tags.slice(0, 4).map((t) => chalk.gray(`#${t}`)).join(\" \");\n}\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + \"...\";\n}\n\nfunction handleApiError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n\n\n","import chalk from \"chalk\";\nimport { readFile, readdir, access } from \"fs/promises\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport { checkSyncStatus } from \"../utils/blueprint-tracker.js\";\n\n// AI config files to look for\nconst CONFIG_FILES = [\n { path: \"AGENTS.md\", name: \"AGENTS.md\", platform: \"Claude Code, Cursor, AI Agents\" },\n { path: \"CLAUDE.md\", name: \"CLAUDE.md\", platform: \"Claude Code\" },\n { path: \".github/copilot-instructions.md\", name: \"Copilot Instructions\", platform: \"GitHub Copilot\" },\n { path: \".windsurfrules\", name: \".windsurfrules\", platform: \"Windsurf\" },\n { path: \".zed/instructions.md\", name: \"Zed Instructions\", platform: \"Zed\" },\n { path: \".clinerules\", name: \".clinerules\", platform: \"Cline\" },\n { path: \".goosehints\", name: \".goosehints\", platform: \"Goose\" },\n { path: \"AIDER.md\", name: \"AIDER.md\", platform: \"Aider\" },\n];\n\n// Directory-based configs\nconst CONFIG_DIRS = [\n { path: \".cursor/rules\", name: \".cursor/rules/\", platform: \"Cursor\" },\n { path: \".amazonq/rules\", name: \".amazonq/rules/\", platform: \"Amazon Q\" },\n { path: \".augment/rules\", name: \".augment/rules/\", platform: \"Augment Code\" },\n];\n\nexport async function statusCommand(): Promise<void> {\n const cwd = process.cwd();\n \n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Status\"));\n console.log(chalk.gray(` Directory: ${cwd}`));\n console.log();\n\n // Check for .lynxprompt folder\n const lynxpromptExists = existsSync(join(cwd, \".lynxprompt\"));\n if (lynxpromptExists) {\n console.log(chalk.green(\"✓ LynxPrompt initialized\"));\n \n // Show config summary\n const configPath = join(cwd, \".lynxprompt/conf.yml\");\n if (existsSync(configPath)) {\n try {\n const content = await readFile(configPath, \"utf-8\");\n const { parse } = await import(\"yaml\");\n const config = parse(content);\n if (config?.exporters?.length > 0) {\n console.log(chalk.gray(` Exporters: ${config.exporters.join(\", \")}`));\n }\n } catch {\n // Ignore parse errors\n }\n }\n console.log();\n }\n\n // Show tracked blueprints\n const trackedStatus = await checkSyncStatus(cwd);\n if (trackedStatus.length > 0) {\n // Group by hierarchy\n const byHierarchy = new Map<string | null, typeof trackedStatus>();\n for (const item of trackedStatus) {\n const key = item.blueprint.hierarchyId || null;\n const group = byHierarchy.get(key) || [];\n group.push(item);\n byHierarchy.set(key, group);\n }\n\n console.log(chalk.cyan(\"📦 Tracked Blueprints\"));\n console.log();\n \n // Show hierarchies first\n for (const [hierarchyId, items] of byHierarchy.entries()) {\n if (hierarchyId) {\n const hierarchyName = items[0].blueprint.hierarchyName || \"Unknown Hierarchy\";\n console.log(chalk.magenta(` 📁 ${hierarchyName}`));\n console.log(chalk.gray(` Hierarchy: ${hierarchyId}`));\n console.log();\n }\n\n for (const { blueprint, localModified, fileExists } of items) {\n const statusIcon = !fileExists\n ? chalk.red(\"✗\")\n : localModified\n ? chalk.yellow(\"●\")\n : chalk.green(\"✓\");\n \n const sourceLabel = {\n marketplace: chalk.gray(\"[marketplace]\"),\n team: chalk.blue(\"[team]\"),\n private: chalk.green(\"[private]\"),\n local: chalk.gray(\"[local]\"),\n }[blueprint.source];\n\n const indent = hierarchyId ? \" \" : \" \";\n console.log(`${indent}${statusIcon} ${chalk.bold(blueprint.file)} ${sourceLabel}`);\n console.log(`${indent} ${chalk.gray(`ID: ${blueprint.id} • ${blueprint.name}`)}`);\n \n // Show repository path if different from file\n if (blueprint.repositoryPath && blueprint.repositoryPath !== blueprint.file) {\n console.log(`${indent} ${chalk.gray(`Path: ${blueprint.repositoryPath}`)}`);\n }\n \n if (!fileExists) {\n console.log(chalk.red(`${indent} ⚠ File missing - run 'lynxp pull ${blueprint.id}' to restore`));\n } else if (localModified) {\n if (blueprint.source === \"marketplace\") {\n console.log(chalk.yellow(`${indent} ⚠ Local changes (marketplace = read-only, won't sync back)`));\n } else {\n console.log(chalk.yellow(`${indent} ⚠ Local changes - run 'lynxp push ${blueprint.file}' to sync`));\n }\n }\n console.log();\n }\n }\n }\n\n // Show AI config files\n console.log(chalk.cyan(\"📄 AI Config Files\"));\n console.log();\n\n let foundAny = false;\n\n // Check single files\n for (const config of CONFIG_FILES) {\n const filePath = join(cwd, config.path);\n try {\n await access(filePath);\n const content = await readFile(filePath, \"utf-8\");\n const lines = content.split(\"\\n\").length;\n const size = formatBytes(content.length);\n\n foundAny = true;\n \n // Check if this file is tracked\n const tracked = trackedStatus.find(t => t.blueprint.file === config.path);\n const trackedLabel = tracked ? chalk.cyan(\" (tracked)\") : \"\";\n \n console.log(` ${chalk.green(\"✓\")} ${chalk.bold(config.name)}${trackedLabel}`);\n console.log(` ${chalk.gray(`Platform: ${config.platform}`)}`);\n console.log(` ${chalk.gray(`Size: ${size} (${lines} lines)`)}`);\n \n // Show first non-empty, non-comment line as preview\n const preview = getPreview(content);\n if (preview) {\n console.log(` ${chalk.gray(`Preview: ${preview}`)}`);\n }\n console.log();\n } catch {\n // File doesn't exist, skip\n }\n }\n\n // Check directories\n for (const config of CONFIG_DIRS) {\n const dirPath = join(cwd, config.path);\n if (existsSync(dirPath)) {\n try {\n const files = await readdir(dirPath);\n const ruleFiles = files.filter(f => f.endsWith(\".md\") || f.endsWith(\".mdc\"));\n \n if (ruleFiles.length > 0) {\n foundAny = true;\n console.log(` ${chalk.green(\"✓\")} ${chalk.bold(config.name)}`);\n console.log(` ${chalk.gray(`Platform: ${config.platform}`)}`);\n console.log(` ${chalk.gray(`Rules: ${ruleFiles.length} file${ruleFiles.length === 1 ? \"\" : \"s\"}`)}`);\n \n // List rule files\n for (const file of ruleFiles.slice(0, 3)) {\n console.log(` ${chalk.gray(` • ${file}`)}`);\n }\n if (ruleFiles.length > 3) {\n console.log(` ${chalk.gray(` ... and ${ruleFiles.length - 3} more`)}`);\n }\n console.log();\n }\n } catch {\n // Can't read directory\n }\n }\n }\n\n if (!foundAny) {\n console.log(chalk.yellow(\" No AI configuration files found.\"));\n console.log();\n console.log(chalk.gray(\" Get started:\"));\n console.log(chalk.gray(\" lynxp wizard Generate a configuration\"));\n console.log(chalk.gray(\" lynxp pull <id> Download from marketplace\"));\n console.log(chalk.gray(\" lynxp search <query> Search for blueprints\"));\n } else {\n console.log(chalk.gray(\"Commands:\"));\n console.log(chalk.gray(\" lynxp wizard Regenerate configuration\"));\n console.log(chalk.gray(\" lynxp check Validate files\"));\n console.log(chalk.gray(\" lynxp link --list Show tracked blueprints\"));\n }\n console.log();\n}\n\nfunction getPreview(content: string): string | null {\n const lines = content.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (\n trimmed &&\n !trimmed.startsWith(\"#\") &&\n !trimmed.startsWith(\"//\") &&\n !trimmed.startsWith(\"<!--\") &&\n !trimmed.startsWith(\"---\") &&\n !trimmed.startsWith(\">\")\n ) {\n return truncate(trimmed, 50);\n }\n }\n return null;\n}\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + \"...\";\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n","/**\n * Check command - validate AI configuration files\n * \n * Validates configuration files for CI/CD pipelines and pre-commit hooks.\n * \n * Usage:\n * lynxp check - Interactive validation with detailed output\n * lynxp check --ci - CI mode with exit codes (0 = pass, 1 = fail)\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { readFile, readdir, stat } from \"fs/promises\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport * as yaml from \"yaml\";\n\ninterface CheckOptions {\n ci?: boolean;\n}\n\ninterface ValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n files: string[];\n}\n\n// Known AI config files\nconst CONFIG_FILES = [\n { path: \"AGENTS.md\", name: \"AGENTS.md\" },\n { path: \"CLAUDE.md\", name: \"CLAUDE.md\" },\n { path: \".github/copilot-instructions.md\", name: \"GitHub Copilot\" },\n { path: \".windsurfrules\", name: \"Windsurf\" },\n { path: \".clinerules\", name: \"Cline\" },\n { path: \".goosehints\", name: \"Goose\" },\n { path: \".zed/instructions.md\", name: \"Zed\" },\n];\n\nconst CONFIG_DIRS = [\n { path: \".cursor/rules\", name: \"Cursor\" },\n { path: \".lynxprompt\", name: \"LynxPrompt\" },\n];\n\n/**\n * Validate markdown content for common issues\n */\nfunction validateMarkdown(content: string, filename: string): { errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty content\n if (!content.trim()) {\n errors.push(`${filename}: File is empty`);\n return { errors, warnings };\n }\n\n // Check for minimum content\n if (content.trim().length < 50) {\n warnings.push(`${filename}: Content seems too short (< 50 chars)`);\n }\n\n // Check for header\n if (!content.includes(\"#\")) {\n warnings.push(`${filename}: No markdown headers found`);\n }\n\n // Check for common placeholder text\n const placeholders = [\n \"TODO\",\n \"FIXME\",\n \"YOUR_\",\n \"REPLACE_\",\n \"[INSERT\",\n \"example.com\",\n ];\n \n for (const placeholder of placeholders) {\n if (content.includes(placeholder)) {\n warnings.push(`${filename}: Contains placeholder text \"${placeholder}\"`);\n }\n }\n\n // Check for potential secrets (basic patterns)\n const secretPatterns = [\n /ghp_[a-zA-Z0-9]{36}/, // GitHub tokens\n /api[_-]?key[_-]?=\\s*[a-zA-Z0-9]{20,}/i,\n ];\n\n for (const pattern of secretPatterns) {\n if (pattern.test(content)) {\n errors.push(`${filename}: Potential secret/API key detected - DO NOT commit secrets!`);\n break;\n }\n }\n\n return { errors, warnings };\n}\n\n/**\n * Validate LynxPrompt configuration\n */\nasync function validateLynxPromptConfig(cwd: string): Promise<{ errors: string[]; warnings: string[] }> {\n const errors: string[] = [];\n const warnings: string[] = [];\n \n const configPath = join(cwd, \".lynxprompt/conf.yml\");\n \n if (!existsSync(configPath)) {\n return { errors, warnings };\n }\n\n try {\n const content = await readFile(configPath, \"utf-8\");\n const config = yaml.parse(content);\n\n // Check version\n if (!config.version) {\n warnings.push(\".lynxprompt/conf.yml: Missing 'version' field\");\n }\n\n // Check exporters\n if (!config.exporters || !Array.isArray(config.exporters)) {\n errors.push(\".lynxprompt/conf.yml: Missing or invalid 'exporters' field\");\n } else if (config.exporters.length === 0) {\n warnings.push(\".lynxprompt/conf.yml: No exporters configured\");\n }\n\n // Check sources\n if (!config.sources || !Array.isArray(config.sources)) {\n errors.push(\".lynxprompt/conf.yml: Missing or invalid 'sources' field\");\n } else {\n for (const source of config.sources) {\n if (source.type === \"local\" && source.path) {\n const sourcePath = join(cwd, source.path);\n if (!existsSync(sourcePath)) {\n errors.push(`.lynxprompt/conf.yml: Source path not found: ${source.path}`);\n }\n }\n }\n }\n } catch (error) {\n errors.push(`.lynxprompt/conf.yml: Invalid YAML syntax - ${error instanceof Error ? error.message : \"parse error\"}`);\n }\n\n return { errors, warnings };\n}\n\n/**\n * Validate MDC files (Cursor format)\n */\nfunction validateMdc(content: string, filename: string): { errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for frontmatter\n if (!content.startsWith(\"---\")) {\n warnings.push(`${filename}: Missing YAML frontmatter`);\n } else {\n // Try to parse frontmatter\n const frontmatterEnd = content.indexOf(\"---\", 3);\n if (frontmatterEnd === -1) {\n errors.push(`${filename}: Unclosed YAML frontmatter`);\n } else {\n const frontmatter = content.substring(3, frontmatterEnd).trim();\n try {\n yaml.parse(frontmatter);\n } catch {\n errors.push(`${filename}: Invalid YAML frontmatter`);\n }\n }\n }\n\n // Also run standard markdown validation on content after frontmatter\n const bodyStart = content.indexOf(\"---\", 3);\n if (bodyStart !== -1) {\n const body = content.substring(bodyStart + 3).trim();\n const mdResult = validateMarkdown(body, filename);\n // Only add body-related warnings, not errors (frontmatter is the critical part for MDC)\n warnings.push(...mdResult.warnings);\n }\n\n return { errors, warnings };\n}\n\nexport async function checkCommand(options: CheckOptions = {}): Promise<void> {\n const isCi = options.ci;\n const cwd = process.cwd();\n\n if (!isCi) {\n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Check\"));\n console.log();\n }\n\n const result: ValidationResult = {\n valid: true,\n errors: [],\n warnings: [],\n files: [],\n };\n\n const spinner = !isCi ? ora(\"Scanning for configuration files...\").start() : null;\n\n // Check for config files\n for (const file of CONFIG_FILES) {\n const filePath = join(cwd, file.path);\n if (existsSync(filePath)) {\n result.files.push(file.path);\n try {\n const content = await readFile(filePath, \"utf-8\");\n const validation = validateMarkdown(content, file.path);\n result.errors.push(...validation.errors);\n result.warnings.push(...validation.warnings);\n } catch (error) {\n result.errors.push(`${file.path}: Could not read file`);\n }\n }\n }\n\n // Check for config directories\n for (const dir of CONFIG_DIRS) {\n const dirPath = join(cwd, dir.path);\n if (existsSync(dirPath)) {\n try {\n const files = await readdir(dirPath);\n for (const file of files) {\n const filePath = join(dirPath, file);\n const fileStat = await stat(filePath);\n \n if (fileStat.isFile()) {\n result.files.push(`${dir.path}/${file}`);\n const content = await readFile(filePath, \"utf-8\");\n \n // Use MDC validation for .mdc files\n if (file.endsWith(\".mdc\")) {\n const validation = validateMdc(content, `${dir.path}/${file}`);\n result.errors.push(...validation.errors);\n result.warnings.push(...validation.warnings);\n } else if (file.endsWith(\".md\")) {\n const validation = validateMarkdown(content, `${dir.path}/${file}`);\n result.errors.push(...validation.errors);\n result.warnings.push(...validation.warnings);\n }\n }\n }\n } catch {\n // Directory exists but can't be read\n }\n }\n }\n\n // Check LynxPrompt config\n const lynxpromptValidation = await validateLynxPromptConfig(cwd);\n result.errors.push(...lynxpromptValidation.errors);\n result.warnings.push(...lynxpromptValidation.warnings);\n\n spinner?.stop();\n\n // Determine overall result\n result.valid = result.errors.length === 0;\n\n // Output results\n if (isCi) {\n // CI mode - minimal output, use exit codes\n if (!result.valid) {\n console.error(\"✗ Validation failed\");\n for (const error of result.errors) {\n console.error(` ${error}`);\n }\n process.exit(1);\n } else if (result.files.length === 0) {\n console.error(\"✗ No configuration files found\");\n process.exit(1);\n } else {\n console.log(\"✓ Validation passed\");\n if (result.warnings.length > 0) {\n console.log(` (${result.warnings.length} warning${result.warnings.length === 1 ? \"\" : \"s\"})`);\n }\n process.exit(0);\n }\n } else {\n // Interactive mode - detailed output\n if (result.files.length === 0) {\n console.log(chalk.yellow(\"⚠ No AI configuration files found.\"));\n console.log();\n console.log(chalk.gray(\"Run 'lynxp wizard' to create a configuration.\"));\n return;\n }\n\n console.log(chalk.green(`✓ Found ${result.files.length} configuration file${result.files.length === 1 ? \"\" : \"s\"}:`));\n for (const file of result.files) {\n console.log(chalk.gray(` ${file}`));\n }\n console.log();\n\n if (result.errors.length > 0) {\n console.log(chalk.red(`✗ ${result.errors.length} error${result.errors.length === 1 ? \"\" : \"s\"}:`));\n for (const error of result.errors) {\n console.log(chalk.red(` ${error}`));\n }\n console.log();\n }\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow(`⚠ ${result.warnings.length} warning${result.warnings.length === 1 ? \"\" : \"s\"}:`));\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` ${warning}`));\n }\n console.log();\n }\n\n if (result.valid) {\n console.log(chalk.green(\"✅ Validation passed!\"));\n } else {\n console.log(chalk.red(\"❌ Validation failed. Fix the errors above.\"));\n }\n console.log();\n }\n}\n\n\n\n","/**\n * Diff command - show changes between local and remote blueprints\n * \n * Compares local AI configuration files with their linked cloud blueprints.\n * If no blueprint is linked, prompts user to link one first.\n * \n * Usage:\n * lynxp diff - Compare all tracked files with their cloud blueprints\n * lynxp diff <file> - Compare specific file with its linked blueprint\n * lynxp diff --local - Show diff between .lynxprompt/rules/ and exported files\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport { isAuthenticated } from \"../config.js\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { checkSyncStatus, findBlueprintByFile } from \"../utils/blueprint-tracker.js\";\n\ninterface DiffOptions {\n local?: boolean;\n}\n\n/**\n * Simple line-by-line diff implementation\n * Returns added (+), removed (-), and unchanged lines\n */\nfunction computeDiff(oldText: string, newText: string): Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }> {\n const oldLines = oldText.split(\"\\n\");\n const newLines = newText.split(\"\\n\");\n const result: Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }> = [];\n\n // Simple LCS-based diff\n const lcs = longestCommonSubsequence(oldLines, newLines);\n \n let oldIndex = 0;\n let newIndex = 0;\n let lcsIndex = 0;\n\n while (oldIndex < oldLines.length || newIndex < newLines.length) {\n if (lcsIndex < lcs.length && oldIndex < oldLines.length && oldLines[oldIndex] === lcs[lcsIndex]) {\n if (newIndex < newLines.length && newLines[newIndex] === lcs[lcsIndex]) {\n // Line is in both - unchanged\n result.push({ type: \"same\", line: oldLines[oldIndex] });\n oldIndex++;\n newIndex++;\n lcsIndex++;\n } else {\n // Line is in new but not in LCS position - added\n result.push({ type: \"add\", line: newLines[newIndex] });\n newIndex++;\n }\n } else if (oldIndex < oldLines.length && (lcsIndex >= lcs.length || oldLines[oldIndex] !== lcs[lcsIndex])) {\n // Line is in old but not in LCS - removed\n result.push({ type: \"remove\", line: oldLines[oldIndex] });\n oldIndex++;\n } else if (newIndex < newLines.length) {\n // Line is in new but not in old - added\n result.push({ type: \"add\", line: newLines[newIndex] });\n newIndex++;\n }\n }\n\n return result;\n}\n\n/**\n * Find the longest common subsequence of lines\n */\nfunction longestCommonSubsequence(a: string[], b: string[]): string[] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0));\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n // Backtrack to find the LCS\n const lcs: string[] = [];\n let i = m;\n let j = n;\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n lcs.unshift(a[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] > dp[i][j - 1]) {\n i--;\n } else {\n j--;\n }\n }\n\n return lcs;\n}\n\n/**\n * Format diff output with colors\n */\nfunction formatDiff(diff: Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }>, contextLines: number = 3): string {\n const output: string[] = [];\n let lastPrintedIndex = -1;\n \n // Find sections with changes\n const changeIndices = diff.map((d, i) => d.type !== \"same\" ? i : -1).filter(i => i !== -1);\n \n if (changeIndices.length === 0) {\n return chalk.gray(\" (no changes)\");\n }\n\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n const nearChange = changeIndices.some(ci => Math.abs(ci - i) <= contextLines);\n\n if (nearChange) {\n // Print separator if there's a gap\n if (lastPrintedIndex !== -1 && i - lastPrintedIndex > 1) {\n output.push(chalk.gray(\" ...\"));\n }\n\n // Format the line based on type\n if (item.type === \"add\") {\n output.push(chalk.green(`+ ${item.line}`));\n } else if (item.type === \"remove\") {\n output.push(chalk.red(`- ${item.line}`));\n } else {\n output.push(chalk.gray(` ${item.line}`));\n }\n lastPrintedIndex = i;\n }\n }\n\n return output.join(\"\\n\");\n}\n\n/**\n * Get summary statistics for a diff\n */\nfunction getDiffStats(diff: Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }>): { added: number; removed: number; unchanged: number } {\n return {\n added: diff.filter(d => d.type === \"add\").length,\n removed: diff.filter(d => d.type === \"remove\").length,\n unchanged: diff.filter(d => d.type === \"same\").length,\n };\n}\n\nexport async function diffCommand(fileOrId?: string, options: DiffOptions = {}): Promise<void> {\n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Diff\"));\n console.log();\n\n const cwd = process.cwd();\n\n // Local diff mode - compare .lynxprompt/rules/ with exported files\n if (options.local) {\n await diffLocal(cwd);\n return;\n }\n\n // Check for tracked blueprints first\n const trackedFiles = await checkSyncStatus(cwd);\n \n // If a specific file or blueprint ID is given\n if (fileOrId) {\n // Check if it's a tracked file\n const tracked = await findBlueprintByFile(cwd, fileOrId);\n if (tracked) {\n await diffFileWithBlueprint(cwd, fileOrId, tracked.id);\n return;\n }\n \n // Otherwise treat it as a blueprint ID\n await diffWithBlueprintId(cwd, fileOrId);\n return;\n }\n\n // No argument given - show diff for all tracked files\n if (trackedFiles.length === 0) {\n console.log(chalk.yellow(\"No tracked blueprints found.\"));\n console.log();\n console.log(chalk.gray(\"To track a blueprint and compare changes:\"));\n console.log(chalk.gray(\" 1. Pull a blueprint: lynxp pull <blueprint-id>\"));\n console.log(chalk.gray(\" 2. Or link an existing file: lynxp link\"));\n console.log();\n console.log(chalk.gray(\"Other options:\"));\n console.log(chalk.gray(\" lynxp diff --local Compare .lynxprompt/rules/ with exported files\"));\n return;\n }\n\n // Show diff for all tracked files\n let hasChanges = false;\n \n for (const { blueprint, localModified, fileExists } of trackedFiles) {\n if (!fileExists) {\n console.log(chalk.red(`✗ ${blueprint.file} - file not found`));\n continue;\n }\n \n console.log(chalk.cyan(`📄 ${blueprint.file}`));\n console.log(chalk.gray(` Linked to: ${blueprint.name} (${blueprint.id})`));\n \n if (localModified) {\n hasChanges = true;\n await diffFileWithBlueprint(cwd, blueprint.file, blueprint.id, true);\n } else {\n console.log(chalk.green(\" ✓ In sync with cloud\"));\n }\n console.log();\n }\n \n if (!hasChanges) {\n console.log(chalk.green(\"✓ All tracked files are in sync with their cloud blueprints!\"));\n } else {\n console.log(chalk.gray(\"To push local changes: lynxp push\"));\n console.log(chalk.gray(\"To pull cloud changes: lynxp pull <id>\"));\n }\n console.log();\n}\n\n/**\n * Compare a specific file with its linked blueprint\n */\nasync function diffFileWithBlueprint(cwd: string, file: string, blueprintId: string, compact: boolean = false): Promise<void> {\n const filePath = join(cwd, file);\n \n if (!existsSync(filePath)) {\n console.log(chalk.red(`✗ File not found: ${file}`));\n return;\n }\n\n const spinner = compact ? null : ora(\"Fetching blueprint...\").start();\n\n try {\n const { blueprint } = await api.getBlueprint(blueprintId);\n spinner?.stop();\n\n if (!blueprint || !blueprint.content) {\n console.log(chalk.red(`✗ Blueprint has no content`));\n return;\n }\n\n const localContent = await readFile(filePath, \"utf-8\");\n const diff = computeDiff(blueprint.content, localContent);\n const stats = getDiffStats(diff);\n\n if (stats.added === 0 && stats.removed === 0) {\n if (!compact) {\n console.log(chalk.green(\"✓ Files are identical!\"));\n }\n } else {\n if (!compact) {\n console.log(chalk.gray(\"Changes (cloud → local):\"));\n console.log();\n }\n console.log(formatDiff(diff));\n console.log(chalk.gray(` ${chalk.green(`+${stats.added}`)} ${chalk.red(`-${stats.removed}`)} lines`));\n }\n\n } catch (error) {\n spinner?.stop();\n if (error instanceof ApiRequestError) {\n console.log(chalk.red(`✗ Could not fetch blueprint: ${error.message}`));\n } else {\n console.log(chalk.red(\"✗ Failed to compare\"));\n }\n }\n}\n\n/**\n * Compare with a specific blueprint ID (legacy behavior)\n */\nasync function diffWithBlueprintId(cwd: string, blueprintId: string): Promise<void> {\n // Check if logged in\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"⚠ Not logged in. Some blueprints may not be accessible.\"));\n console.log(chalk.gray(\"Run 'lynxp login' to authenticate.\"));\n console.log();\n }\n\n const spinner = ora(\"Fetching blueprint...\").start();\n\n try {\n const { blueprint } = await api.getBlueprint(blueprintId);\n spinner.stop();\n\n if (!blueprint || !blueprint.content) {\n console.log(chalk.red(`✗ Blueprint not found or has no content: ${blueprintId}`));\n return;\n }\n\n console.log(chalk.green(`✓ Blueprint: ${blueprint.name || blueprintId}`));\n if (blueprint.description) {\n console.log(chalk.gray(` ${blueprint.description}`));\n }\n console.log();\n\n // Determine local file path based on blueprint type\n const localPaths = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursor/rules/project.mdc\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n ];\n\n let localContent: string | null = null;\n let localPath: string | null = null;\n\n for (const path of localPaths) {\n const fullPath = join(cwd, path);\n if (existsSync(fullPath)) {\n try {\n localContent = await readFile(fullPath, \"utf-8\");\n localPath = path;\n break;\n } catch {\n // Continue to next path\n }\n }\n }\n\n if (!localContent) {\n console.log(chalk.yellow(\"⚠ No local AI configuration file found.\"));\n console.log(chalk.gray(\"Run 'lynxp wizard' to create one, or 'lynxp pull' to download the blueprint.\"));\n return;\n }\n\n console.log(chalk.gray(`Comparing with: ${localPath}`));\n console.log();\n\n // Compute and display diff\n const diff = computeDiff(blueprint.content, localContent);\n const stats = getDiffStats(diff);\n\n if (stats.added === 0 && stats.removed === 0) {\n console.log(chalk.green(\"✓ Files are identical!\"));\n } else {\n console.log(chalk.gray(\"Changes (remote → local):\"));\n console.log();\n console.log(formatDiff(diff));\n console.log();\n console.log(chalk.gray(`Summary: ${chalk.green(`+${stats.added}`)} ${chalk.red(`-${stats.removed}`)} lines changed`));\n }\n console.log();\n\n } catch (error) {\n spinner.stop();\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.log(chalk.red(\"✗ Authentication required. Run 'lynxp login' first.\"));\n } else if (error.statusCode === 404) {\n console.log(chalk.red(`✗ Blueprint not found: ${blueprintId}`));\n } else if (error.statusCode === 403) {\n console.log(chalk.red(\"✗ Access denied to this blueprint.\"));\n } else {\n console.log(chalk.red(`✗ API error: ${error.message}`));\n }\n } else {\n console.log(chalk.red(\"✗ Failed to fetch blueprint\"));\n if (error instanceof Error) {\n console.log(chalk.gray(` ${error.message}`));\n }\n }\n }\n}\n\n/**\n * Compare .lynxprompt/rules/ with exported agent files\n */\nasync function diffLocal(cwd: string): Promise<void> {\n const rulesDir = join(cwd, \".lynxprompt/rules\");\n \n if (!existsSync(rulesDir)) {\n console.log(chalk.yellow(\"⚠ No .lynxprompt/rules/ directory found.\"));\n console.log(chalk.gray(\"Run 'lynxp init' to set up the advanced workflow, or 'lynxp wizard' for simple file generation.\"));\n return;\n }\n\n console.log(chalk.gray(\"Comparing .lynxprompt/rules/ with exported files...\"));\n console.log();\n\n // Read the rules file(s)\n const rulesPath = join(rulesDir, \"agents.md\");\n if (!existsSync(rulesPath)) {\n console.log(chalk.yellow(\"⚠ No rules files found in .lynxprompt/rules/\"));\n return;\n }\n\n let rulesContent: string;\n try {\n rulesContent = await readFile(rulesPath, \"utf-8\");\n } catch {\n console.log(chalk.red(\"✗ Could not read .lynxprompt/rules/agents.md\"));\n return;\n }\n\n // Compare with each exported file\n const exportedFiles = [\n { path: \"AGENTS.md\", name: \"AGENTS.md\" },\n { path: \".cursor/rules/lynxprompt-rules.mdc\", name: \"Cursor\" },\n ];\n\n let hasChanges = false;\n\n for (const file of exportedFiles) {\n const filePath = join(cwd, file.path);\n if (existsSync(filePath)) {\n try {\n const exportedContent = await readFile(filePath, \"utf-8\");\n \n // For MDC files, strip frontmatter for comparison\n let compareContent = exportedContent;\n if (file.path.endsWith(\".mdc\")) {\n const frontmatterEnd = exportedContent.indexOf(\"---\", 3);\n if (frontmatterEnd !== -1) {\n compareContent = exportedContent.substring(frontmatterEnd + 3).trim();\n }\n }\n\n // Strip headers added by sync\n compareContent = compareContent\n .replace(/^# AI Coding Rules\\n\\n> Generated by \\[LynxPrompt\\].*\\n\\n/m, \"\")\n .trim();\n\n const diff = computeDiff(rulesContent.trim(), compareContent);\n const stats = getDiffStats(diff);\n\n if (stats.added > 0 || stats.removed > 0) {\n hasChanges = true;\n console.log(chalk.yellow(`⚠ ${file.name} differs from source:`));\n console.log(formatDiff(diff));\n console.log(chalk.gray(` ${chalk.green(`+${stats.added}`)} ${chalk.red(`-${stats.removed}`)} lines`));\n console.log();\n } else {\n console.log(chalk.green(`✓ ${file.name} is in sync`));\n }\n } catch {\n // File exists but couldn't be read\n }\n }\n }\n\n if (!hasChanges) {\n console.log();\n console.log(chalk.green(\"✓ All exported files are in sync with .lynxprompt/rules/\"));\n } else {\n console.log();\n console.log(chalk.gray(\"Run 'lynxp sync' to update exported files from .lynxprompt/rules/\"));\n }\n console.log();\n}\n\n","/**\n * Link command - connect a local file to a cloud blueprint\n * \n * This is for when a user has a local file that matches a cloud blueprint\n * and wants to start tracking it without overwriting the local version.\n * \n * Usage:\n * lynxp link - Interactive mode (recommended)\n * lynxp link <file> <blueprint-id> - Link local file to cloud blueprint\n * lynxp link --list - List all tracked blueprints\n * lynxp unlink - Interactive mode (recommended)\n * lynxp unlink <file> - Disconnect a file from its blueprint\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\nimport { api, ApiRequestError, Blueprint } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport {\n linkBlueprint,\n untrackBlueprint,\n findBlueprintByFile,\n checkSyncStatus,\n type BlueprintSource,\n} from \"../utils/blueprint-tracker.js\";\n\ninterface LinkOptions {\n list?: boolean;\n}\n\n// Determine blueprint source from visibility\nfunction getSourceFromVisibility(visibility: Blueprint[\"visibility\"]): BlueprintSource {\n switch (visibility) {\n case \"PUBLIC\":\n return \"marketplace\";\n case \"TEAM\":\n return \"team\";\n case \"PRIVATE\":\n return \"private\";\n default:\n return \"marketplace\";\n }\n}\n\nexport async function linkCommand(\n fileArg?: string,\n blueprintIdArg?: string,\n options: LinkOptions = {}\n): Promise<void> {\n const cwd = process.cwd();\n\n // List tracked blueprints\n if (options.list) {\n await listTrackedBlueprints(cwd);\n return;\n }\n\n console.log();\n console.log(chalk.cyan(\"🐱 Link File to Blueprint\"));\n console.log();\n\n let file: string;\n let blueprintId: string | undefined = blueprintIdArg;\n\n // Interactive mode - guide the user through linking\n if (!fileArg) {\n // Find AI config files in the project\n const configFiles = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursor/rules/project.mdc\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n \".zed/instructions.md\",\n \".clinerules\",\n ];\n\n const foundFiles = configFiles.filter(f => existsSync(join(cwd, f)));\n\n if (foundFiles.length === 0) {\n console.log(chalk.yellow(\"No AI configuration files found in this directory.\"));\n console.log();\n console.log(chalk.gray(\"Create one first:\"));\n console.log(chalk.gray(\" lynxp wizard Generate a new config file\"));\n console.log(chalk.gray(\" lynxp pull <id> Download from marketplace\"));\n return;\n }\n\n // Let user select which file to link\n const { selectedFile } = await prompts({\n type: \"select\",\n name: \"selectedFile\",\n message: \"Which file do you want to link to a cloud blueprint?\",\n choices: foundFiles.map(f => ({\n title: f,\n value: f,\n description: \"Local file exists\",\n })),\n });\n\n if (!selectedFile) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n file = selectedFile;\n } else {\n file = fileArg;\n }\n\n // Check if file exists\n const filePath = join(cwd, file);\n if (!existsSync(filePath)) {\n console.log(chalk.red(`✗ File not found: ${file}`));\n return;\n }\n\n // Check if already linked\n const existing = await findBlueprintByFile(cwd, file);\n if (existing) {\n console.log(chalk.yellow(`This file is already linked to: ${existing.name}`));\n console.log(chalk.gray(` ID: ${existing.id}`));\n console.log();\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Replace the existing link?\",\n initial: false,\n });\n if (!proceed) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n\n // Interactive mode - help find the blueprint\n if (!blueprintId) {\n // Check authentication\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You need to login to access your blueprints.\"));\n const { doLogin } = await prompts({\n type: \"confirm\",\n name: \"doLogin\",\n message: \"Login now?\",\n initial: true,\n });\n if (doLogin) {\n console.log(chalk.gray(\"Run 'lynxp login' in another terminal, then come back here.\"));\n return;\n }\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n // Let user choose how to find the blueprint\n const { searchMethod } = await prompts({\n type: \"select\",\n name: \"searchMethod\",\n message: \"How do you want to find the blueprint?\",\n choices: [\n { title: \"📋 From my blueprints\", value: \"list\" },\n { title: \"🔍 Search marketplace\", value: \"search\" },\n { title: \"🔢 Enter ID directly\", value: \"manual\" },\n ],\n });\n\n if (!searchMethod) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n if (searchMethod === \"list\") {\n // Fetch user's blueprints\n const spinner = ora(\"Fetching your blueprints...\").start();\n try {\n const { blueprints } = await api.listBlueprints();\n spinner.stop();\n\n if (!blueprints || blueprints.length === 0) {\n console.log(chalk.yellow(\"You don't have any blueprints yet.\"));\n console.log(chalk.gray(\"Create one with 'lynxp push' or search the marketplace.\"));\n return;\n }\n\n const { selected } = await prompts({\n type: \"select\",\n name: \"selected\",\n message: \"Select a blueprint:\",\n choices: blueprints.map(b => ({\n title: b.name,\n value: b.id,\n description: b.description?.substring(0, 50) || \"\",\n })),\n });\n\n if (!selected) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n blueprintId = selected;\n } catch {\n spinner.stop();\n console.log(chalk.red(\"✗ Could not fetch blueprints\"));\n return;\n }\n } else if (searchMethod === \"search\") {\n const { query } = await prompts({\n type: \"text\",\n name: \"query\",\n message: \"Search for:\",\n });\n\n if (!query) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n const spinner = ora(`Searching for \"${query}\"...`).start();\n try {\n const results = await api.searchBlueprints(query, 10);\n spinner.stop();\n\n if (!results.templates || results.templates.length === 0) {\n console.log(chalk.yellow(`No blueprints found for \"${query}\"`));\n return;\n }\n\n const { selected } = await prompts({\n type: \"select\",\n name: \"selected\",\n message: \"Select a blueprint:\",\n choices: results.templates.map(b => ({\n title: `${b.name} (★ ${b.likes})`,\n value: b.id,\n description: b.author ? `by ${b.author}` : \"\",\n })),\n });\n\n if (!selected) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n blueprintId = selected;\n } catch {\n spinner.stop();\n console.log(chalk.red(\"✗ Search failed\"));\n return;\n }\n } else {\n const { manualId } = await prompts({\n type: \"text\",\n name: \"manualId\",\n message: \"Enter blueprint ID:\",\n });\n\n if (!manualId) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n blueprintId = manualId;\n }\n }\n\n // At this point we must have both file and blueprintId\n if (!blueprintId) {\n console.log(chalk.red(\"✗ No blueprint ID provided.\"));\n return;\n }\n\n // Fetch blueprint info and link\n const spinner = ora(`Fetching blueprint ${chalk.cyan(blueprintId)}...`).start();\n\n try {\n const { blueprint } = await api.getBlueprint(blueprintId);\n spinner.stop();\n\n const source = getSourceFromVisibility(blueprint.visibility);\n const isMarketplace = source === \"marketplace\";\n\n console.log();\n console.log(chalk.cyan(`🐱 Blueprint: ${chalk.bold(blueprint.name)}`));\n if (blueprint.description) {\n console.log(chalk.gray(` ${blueprint.description}`));\n }\n console.log(chalk.gray(` Visibility: ${blueprint.visibility}`));\n console.log();\n\n // Show warning for marketplace blueprints\n if (isMarketplace) {\n console.log(chalk.yellow(\"⚠ This is a marketplace blueprint.\"));\n console.log(chalk.gray(\" Your local changes will NOT sync back to the cloud.\"));\n console.log(chalk.gray(\" To make changes, you'll need to create your own copy.\"));\n console.log();\n }\n\n // Confirm linking\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: `Link ${chalk.cyan(file)} to ${chalk.cyan(blueprint.name)}?`,\n initial: true,\n });\n\n if (!confirm) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n // Link the file\n await linkBlueprint(cwd, file, blueprint.id, blueprint.name, source);\n\n console.log();\n console.log(chalk.green(`✅ Linked: ${file} → ${blueprint.id}`));\n console.log();\n\n // Show next steps\n console.log(chalk.gray(\"Next steps:\"));\n console.log(chalk.gray(` • Run 'lynxp diff' to see differences`));\n console.log(chalk.gray(` • Run 'lynxp status' to see all tracked blueprints`));\n if (!isMarketplace) {\n console.log(chalk.gray(` • Run 'lynxp push' to push local changes to cloud`));\n }\n console.log();\n\n } catch (error) {\n spinner.stop();\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 404) {\n console.log(chalk.red(`✗ Blueprint not found: ${blueprintId}`));\n console.log(chalk.gray(\" Make sure the ID is correct. Use 'lynxp list' or 'lynxp search' to find blueprints.\"));\n } else if (error.statusCode === 403) {\n console.log(chalk.red(\"✗ You don't have access to this blueprint.\"));\n } else {\n console.log(chalk.red(`✗ Error: ${error.message}`));\n }\n } else {\n console.log(chalk.red(\"✗ An unexpected error occurred.\"));\n }\n }\n}\n\nexport async function unlinkCommand(fileArg?: string): Promise<void> {\n const cwd = process.cwd();\n\n console.log();\n console.log(chalk.cyan(\"🐱 Unlink File from Blueprint\"));\n console.log();\n\n let file: string;\n\n // Interactive mode - show tracked files and let user select\n if (!fileArg) {\n const status = await checkSyncStatus(cwd);\n \n if (status.length === 0) {\n console.log(chalk.yellow(\"No files are currently linked to blueprints.\"));\n return;\n }\n\n const { selectedFile } = await prompts({\n type: \"select\",\n name: \"selectedFile\",\n message: \"Which file do you want to unlink?\",\n choices: status.map(({ blueprint }) => ({\n title: blueprint.file,\n value: blueprint.file,\n description: `${blueprint.name} (${blueprint.source})`,\n })),\n });\n\n if (!selectedFile) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n file = selectedFile;\n } else {\n file = fileArg;\n }\n\n // Check if file is tracked\n const tracked = await findBlueprintByFile(cwd, file);\n if (!tracked) {\n console.log(chalk.yellow(`File is not linked to any blueprint: ${file}`));\n return;\n }\n\n console.log(chalk.gray(`Currently linked to: ${tracked.name}`));\n console.log(chalk.gray(` ID: ${tracked.id}`));\n console.log(chalk.gray(` Source: ${tracked.source}`));\n console.log();\n\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: `Unlink ${chalk.cyan(file)} from ${chalk.cyan(tracked.name)}?`,\n initial: true,\n });\n\n if (!confirm) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n const success = await untrackBlueprint(cwd, file);\n \n if (success) {\n console.log();\n console.log(chalk.green(`✅ Unlinked: ${file}`));\n console.log(chalk.gray(\" The file is now standalone. Changes won't sync with the cloud.\"));\n console.log();\n } else {\n console.log(chalk.red(\"✗ Failed to unlink file.\"));\n }\n}\n\nasync function listTrackedBlueprints(cwd: string): Promise<void> {\n console.log();\n console.log(chalk.cyan(\"🐱 Tracked Blueprints\"));\n console.log();\n\n const status = await checkSyncStatus(cwd);\n\n if (status.length === 0) {\n console.log(chalk.gray(\"No blueprints are currently tracked.\"));\n console.log();\n console.log(chalk.gray(\"To track a blueprint:\"));\n console.log(chalk.gray(\" lynxp pull <blueprint-id> Download and track a blueprint\"));\n console.log(chalk.gray(\" lynxp link Link an existing file to a blueprint\"));\n return;\n }\n\n for (const { blueprint, localModified, fileExists } of status) {\n const statusIcon = !fileExists\n ? chalk.red(\"✗\")\n : localModified\n ? chalk.yellow(\"●\")\n : chalk.green(\"✓\");\n \n const sourceLabel = {\n marketplace: chalk.gray(\"[marketplace]\"),\n team: chalk.blue(\"[team]\"),\n private: chalk.green(\"[private]\"),\n local: chalk.gray(\"[local]\"),\n }[blueprint.source];\n\n console.log(`${statusIcon} ${chalk.cyan(blueprint.file)}`);\n console.log(` ${sourceLabel} ${blueprint.name}`);\n console.log(` ${chalk.gray(`ID: ${blueprint.id}`)}`);\n \n if (!fileExists) {\n console.log(chalk.red(` ⚠ File not found`));\n } else if (localModified) {\n console.log(chalk.yellow(` ⚠ Local changes detected`));\n }\n \n console.log();\n }\n\n console.log(chalk.gray(\"Legend:\"));\n console.log(chalk.gray(` ${chalk.green(\"✓\")} In sync ${chalk.yellow(\"●\")} Modified locally ${chalk.red(\"✗\")} Missing`));\n console.log();\n}\n","#!/usr/bin/env node\n/**\n * LynxPrompt CLI - Analyze Command\n * \n * Standalone project analyzer that detects project configuration\n * without generating any files.\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { detectProject, detectFromRemoteUrl, isGitUrl, detectRepoHost } from \"../utils/detect.js\";\n\ninterface AnalyzeOptions {\n json?: boolean;\n remote?: string;\n}\n\nexport async function analyzeCommand(options: AnalyzeOptions): Promise<void> {\n console.log();\n \n if (!options.json) {\n console.log(chalk.cyan.bold(\" 🔍 LynxPrompt Analyzer\"));\n console.log(chalk.gray(\" Detect project configuration and tech stack\"));\n console.log();\n }\n\n let detected;\n let source = \"local\";\n\n // Check for remote URL option\n if (options.remote) {\n if (!isGitUrl(options.remote)) {\n if (!options.json) {\n console.log(chalk.red(\" ✗ Invalid Git URL provided\"));\n }\n process.exit(1);\n }\n\n const host = detectRepoHost(options.remote);\n const method = host === \"github\" ? \"GitHub API\" : host === \"gitlab\" ? \"GitLab API\" : \"shallow clone\";\n\n if (!options.json) {\n const spinner = ora(`Analyzing remote repository via ${method}...`).start();\n detected = await detectFromRemoteUrl(options.remote);\n \n if (detected) {\n spinner.succeed(\"Remote repository analyzed\");\n } else {\n spinner.fail(\"Could not analyze repository\");\n console.log(chalk.gray(\" The repository may be private or inaccessible.\"));\n process.exit(1);\n }\n } else {\n detected = await detectFromRemoteUrl(options.remote);\n if (!detected) {\n console.log(JSON.stringify({ error: \"Could not analyze repository\" }));\n process.exit(1);\n }\n }\n \n source = options.remote;\n } else {\n // Analyze current directory\n if (!options.json) {\n const spinner = ora(\"Analyzing current directory...\").start();\n detected = await detectProject(process.cwd());\n \n if (detected) {\n spinner.succeed(\"Project analyzed\");\n } else {\n spinner.info(\"No project detected\");\n }\n } else {\n detected = await detectProject(process.cwd());\n }\n }\n\n // Output results\n if (options.json) {\n console.log(JSON.stringify({\n source,\n detected: detected || null,\n }, null, 2));\n return;\n }\n\n console.log();\n\n if (!detected) {\n console.log(chalk.yellow(\" No project configuration detected.\"));\n console.log();\n console.log(chalk.gray(\" Tips:\"));\n console.log(chalk.gray(\" • Make sure you're in a project directory with a package.json, pyproject.toml, etc.\"));\n console.log(chalk.gray(\" • Use --remote <url> to analyze a remote repository\"));\n console.log();\n return;\n }\n\n // Display analysis results\n console.log(chalk.green.bold(\" 📊 Project Analysis\"));\n console.log();\n \n // Basic info\n console.log(chalk.white(\" Basic Info\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n console.log(` ${chalk.dim(\"Name:\")} ${chalk.white(detected.name || \"unknown\")}`);\n if (detected.description) {\n console.log(` ${chalk.dim(\"Description:\")} ${chalk.gray(detected.description)}`);\n }\n console.log(` ${chalk.dim(\"Type:\")} ${chalk.white(detected.type || \"application\")}`);\n if (detected.license) {\n console.log(` ${chalk.dim(\"License:\")} ${chalk.white(detected.license.toUpperCase())}`);\n }\n console.log();\n\n // Tech Stack\n console.log(chalk.white(\" Tech Stack\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n if (detected.stack.length > 0) {\n for (const tech of detected.stack) {\n console.log(` ${chalk.cyan(\"•\")} ${tech}`);\n }\n } else {\n console.log(chalk.gray(\" No tech stack detected\"));\n }\n console.log();\n\n // Infrastructure\n console.log(chalk.white(\" Infrastructure\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n console.log(` ${chalk.dim(\"Package Manager:\")} ${detected.packageManager || chalk.gray(\"none detected\")}`);\n console.log(` ${chalk.dim(\"Repo Host:\")} ${detected.repoHost || chalk.gray(\"none detected\")}`);\n console.log(` ${chalk.dim(\"CI/CD:\")} ${detected.cicd || chalk.gray(\"none detected\")}`);\n console.log(` ${chalk.dim(\"Docker:\")} ${detected.hasDocker ? chalk.green(\"yes\") : chalk.gray(\"no\")}`);\n console.log();\n\n // Commands\n if (detected.commands && Object.keys(detected.commands).length > 0) {\n console.log(chalk.white(\" Commands\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n for (const [key, value] of Object.entries(detected.commands)) {\n if (value) {\n const cmdValue = Array.isArray(value) ? value.join(\", \") : value;\n console.log(` ${chalk.dim(key.padEnd(10))} ${chalk.yellow(cmdValue)}`);\n }\n }\n console.log();\n }\n\n // Recommendations\n console.log(chalk.white(\" 💡 Recommendations\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n \n const recommendations: string[] = [];\n \n // Check for missing common configs\n if (!detected.cicd) {\n recommendations.push(\"Add CI/CD configuration (GitHub Actions, GitLab CI, etc.)\");\n }\n if (!detected.hasDocker && detected.type === \"application\") {\n recommendations.push(\"Consider adding Docker for containerization\");\n }\n if (!detected.stack.some(s => [\"vitest\", \"jest\", \"pytest\", \"mocha\"].includes(s))) {\n recommendations.push(\"Add a test framework (vitest, jest, pytest, etc.)\");\n }\n if (!detected.commands?.lint) {\n recommendations.push(\"Add a linting command (eslint, ruff, clippy, etc.)\");\n }\n if (!detected.license) {\n recommendations.push(\"Add a LICENSE file for open source projects\");\n }\n\n if (recommendations.length > 0) {\n for (const rec of recommendations) {\n console.log(` ${chalk.yellow(\"•\")} ${rec}`);\n }\n } else {\n console.log(chalk.green(\" ✓ Project looks well-configured!\"));\n }\n \n console.log();\n console.log(chalk.gray(\" Run 'lynxp wizard' to generate AI IDE configuration\"));\n console.log();\n}\n\n","#!/usr/bin/env node\n/**\n * LynxPrompt CLI - Convert Command\n * \n * Convert AI IDE configuration files between different formats.\n * E.g., AGENTS.md → .cursorrules, CLAUDE.md → copilot-instructions.md\n */\n\nimport chalk from \"chalk\";\nimport { readFile, writeFile, access } from \"fs/promises\";\nimport { join, basename } from \"path\";\nimport ora from \"ora\";\n\ninterface ConvertOptions {\n output?: string;\n force?: boolean;\n}\n\n// Supported source file patterns and their platforms\nconst SOURCE_FILES: Record<string, string> = {\n \"agents.md\": \"agents\",\n \"claude.md\": \"claude\",\n \".cursorrules\": \"cursor_legacy\",\n \".cursor/rules/project.mdc\": \"cursor\",\n \"cursor.rules/project.mdc\": \"cursor\",\n \"project.mdc\": \"cursor\",\n \".github/copilot-instructions.md\": \"copilot\",\n \"copilot-instructions.md\": \"copilot\",\n \".windsurfrules\": \"windsurf\",\n \".clinerules\": \"cline\",\n \".aider.conf.yml\": \"aider\",\n};\n\n// Target format to output filename (30+ platforms)\nconst TARGET_FILES: Record<string, string> = {\n // Popular platforms\n universal: \"AGENTS.md\",\n agents: \"AGENTS.md\",\n cursor: \".cursor/rules/project.mdc\",\n cursor_legacy: \".cursorrules\",\n claude: \"CLAUDE.md\",\n copilot: \".github/copilot-instructions.md\",\n windsurf: \".windsurfrules\",\n // AI-powered IDEs\n antigravity: \"GEMINI.md\",\n zed: \".zed/instructions.md\",\n void: \".void/config.json\",\n trae: \".trae/rules/project.mdc\",\n firebase: \".idx/rules/project.mdc\",\n // Editor extensions\n cline: \".clinerules\",\n roocode: \".roo/rules/project.mdc\",\n continue: \".continue/config.json\",\n cody: \".cody/config.json\",\n tabnine: \".tabnine.yaml\",\n supermaven: \".supermaven/config.json\",\n codegpt: \".codegpt/config.json\",\n amazonq: \".amazonq/rules/project.md\",\n augment: \".augment/rules/project.mdc\",\n kilocode: \".kilocode/rules/project.mdc\",\n junie: \".junie/guidelines.md\",\n kiro: \".kiro/steering/project.mdc\",\n // CLI tools\n aider: \".aider.conf.yml\",\n goose: \".goosehints\",\n warp: \"WARP.md\",\n \"gemini-cli\": \"GEMINI.md\",\n opencode: \"opencode.json\",\n codex: \"codex.md\",\n // Other emerging tools\n openhands: \".openhands/microagents/repo.md\",\n crush: \"CRUSH.md\",\n firebender: \"firebender.json\",\n // Command targets\n \"cursor-command\": \".cursor/commands/command.md\",\n \"claude-command\": \".claude/commands/command.md\",\n \"windsurf-workflow\": \".windsurf/workflows/workflow.md\",\n \"copilot-prompt\": \".copilot/prompts/prompt.md\",\n \"continue-prompt\": \".continue/prompts/prompt.md\",\n \"opencode-command\": \".opencode/commands/command.md\",\n};\n\n// Platform display names\nconst PLATFORM_NAMES: Record<string, string> = {\n universal: \"AGENTS.md (Universal)\",\n agents: \"AGENTS.md (Universal)\",\n cursor: \"Cursor Rules (.mdc)\",\n cursor_legacy: \"Cursor Rules (legacy)\",\n claude: \"CLAUDE.md\",\n copilot: \"GitHub Copilot\",\n windsurf: \"Windsurf\",\n antigravity: \"Antigravity (Gemini IDE)\",\n zed: \"Zed\",\n void: \"Void\",\n trae: \"Trae AI\",\n firebase: \"Firebase Studio\",\n cline: \"Cline\",\n roocode: \"Roo Code\",\n continue: \"Continue\",\n cody: \"Sourcegraph Cody\",\n tabnine: \"Tabnine\",\n supermaven: \"Supermaven\",\n codegpt: \"CodeGPT\",\n amazonq: \"Amazon Q\",\n augment: \"Augment Code\",\n kilocode: \"Kilo Code\",\n junie: \"Junie\",\n kiro: \"Kiro\",\n aider: \"Aider\",\n goose: \"Goose\",\n warp: \"Warp AI\",\n \"gemini-cli\": \"Gemini CLI\",\n opencode: \"OpenCode\",\n codex: \"Codex\",\n openhands: \"OpenHands\",\n crush: \"Crush\",\n firebender: \"Firebender\",\n \"cursor-command\": \"Cursor Command\",\n \"claude-command\": \"Claude Code Command\",\n \"windsurf-workflow\": \"Windsurf Workflow\",\n \"copilot-prompt\": \"Copilot Prompt\",\n \"continue-prompt\": \"Continue Prompt\",\n \"opencode-command\": \"OpenCode Command\",\n};\n\n// Command directory patterns for detection\nconst COMMAND_DIRS: Record<string, string> = {\n \".cursor/commands\": \"cursor-command\",\n \".claude/commands\": \"claude-command\",\n \".windsurf/workflows\": \"windsurf-workflow\",\n \".copilot/prompts\": \"copilot-prompt\",\n \".continue/prompts\": \"continue-prompt\",\n \".opencode/commands\": \"opencode-command\",\n};\n\n// Check if a target is a command type\nconst isCommandTarget = (target: string) => target.includes(\"-command\") || target.includes(\"-prompt\") || target.includes(\"-workflow\");\n\nasync function detectSourceFile(cwd: string): Promise<{ path: string; platform: string } | null> {\n // Try to find a source file in common locations\n for (const [pattern, platform] of Object.entries(SOURCE_FILES)) {\n try {\n const fullPath = join(cwd, pattern);\n await access(fullPath);\n return { path: fullPath, platform };\n } catch {\n // File doesn't exist, try next\n }\n }\n \n // Try uppercase variants\n const uppercaseVariants = [\"AGENTS.md\", \"CLAUDE.md\"];\n for (const variant of uppercaseVariants) {\n try {\n const fullPath = join(cwd, variant);\n await access(fullPath);\n const platform = variant.toLowerCase().replace(\".md\", \"\");\n return { path: fullPath, platform };\n } catch {\n // File doesn't exist\n }\n }\n \n return null;\n}\n\n/**\n * Detect if a source path is a command file\n */\nfunction detectCommandPlatform(sourcePath: string): string | null {\n const normalized = sourcePath.replace(/\\\\/g, \"/\").toLowerCase();\n for (const [dir, platform] of Object.entries(COMMAND_DIRS)) {\n if (normalized.includes(dir)) {\n return platform;\n }\n }\n return null;\n}\n\nfunction parseMarkdownConfig(content: string): Record<string, string> {\n const config: Record<string, string> = {};\n \n // Extract sections from markdown\n const sections = content.split(/^##\\s+/m);\n \n for (const section of sections) {\n const lines = section.trim().split(\"\\n\");\n if (lines.length === 0) continue;\n \n const title = lines[0].toLowerCase().trim();\n const body = lines.slice(1).join(\"\\n\").trim();\n \n config[title] = body;\n }\n \n // Try to extract key info\n config._raw = content;\n \n return config;\n}\n\nfunction generateTargetContent(config: Record<string, string>, targetPlatform: string): string {\n const rawContent = config._raw || \"\";\n \n // Commands are all plain markdown - no conversion needed between command types\n // They just go in different directories\n if (isCommandTarget(targetPlatform)) {\n return rawContent;\n }\n \n // For simple conversions, adapt the content format\n switch (targetPlatform) {\n case \"cursor\":\n // MDC format with frontmatter\n return `---\ndescription: \"AI coding rules\"\nglobs: [\"**/*\"]\nalwaysApply: true\n---\n\n${rawContent.replace(/^#\\s+.*$/m, \"# AI Assistant Configuration\")}\n`;\n\n case \"cursor_legacy\":\n // Plain text format\n return rawContent\n .replace(/^#\\s+/gm, \"\")\n .replace(/^##\\s+/gm, \"\\n\")\n .replace(/^###\\s+/gm, \"\")\n .trim();\n\n case \"windsurf\":\n case \"cline\":\n case \"goose\":\n // Plain text format\n return rawContent\n .replace(/^#\\s+/gm, \"=== \")\n .replace(/^##\\s+/gm, \"--- \")\n .replace(/^###\\s+/gm, \"\")\n .replace(/\\*\\*/g, \"\")\n .trim();\n\n case \"trae\":\n case \"roocode\":\n case \"augment\":\n case \"kilocode\":\n case \"kiro\":\n case \"firebase\":\n // MDC format (same as cursor)\n return `---\ndescription: \"AI coding rules\"\nglobs: [\"**/*\"]\nalwaysApply: true\n---\n\n${rawContent.replace(/^#\\s+.*$/m, \"# AI Assistant Configuration\")}\n`;\n\n case \"aider\":\n // YAML format (simplified)\n return `# Aider configuration\n# Converted from AI IDE configuration\n\nlint-cmd: []\nauto-test: false\nread: []\n# AI rules converted below as conventions\nconventions:\n${rawContent\n .split(\"\\n\")\n .filter(line => line.trim() && !line.startsWith(\"#\"))\n .map(line => ` - \"${line.replace(/\"/g, '\\\\\"').trim()}\"`)\n .slice(0, 20)\n .join(\"\\n\")}\n`;\n\n case \"tabnine\":\n // Tabnine YAML format\n return `# Tabnine configuration\n# Converted from AI IDE configuration\ninstructions: |\n${rawContent.split(\"\\n\").map(line => ` ${line}`).join(\"\\n\")}\n`;\n\n case \"void\":\n case \"continue\":\n case \"cody\":\n case \"codegpt\":\n case \"supermaven\":\n case \"opencode\":\n case \"firebender\":\n // JSON config format\n return JSON.stringify({ instructions: rawContent }, null, 2) + \"\\n\";\n\n case \"copilot\":\n // GitHub Copilot markdown format\n return `# GitHub Copilot Instructions\\n\\n${rawContent}\\n`;\n\n case \"agents\":\n case \"universal\":\n case \"claude\":\n case \"codex\":\n case \"antigravity\":\n case \"gemini-cli\":\n case \"zed\":\n case \"amazonq\":\n case \"junie\":\n case \"warp\":\n case \"openhands\":\n case \"crush\":\n default:\n // Standard markdown format\n return rawContent;\n }\n}\n\nexport async function convertCommand(\n source: string | undefined,\n target: string,\n options: ConvertOptions\n): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 🔄 LynxPrompt Convert\"));\n console.log(chalk.gray(\" Convert AI IDE configuration between formats\"));\n console.log();\n\n const cwd = process.cwd();\n \n // Find source file\n let sourcePath: string;\n let sourcePlatform: string;\n \n if (source) {\n sourcePath = join(cwd, source);\n // Check if it's a command file first\n const cmdPlatform = detectCommandPlatform(source);\n if (cmdPlatform) {\n sourcePlatform = cmdPlatform;\n } else {\n // Detect platform from filename\n const sourceBasename = basename(source).toLowerCase();\n sourcePlatform = SOURCE_FILES[sourceBasename] || \"unknown\";\n }\n } else {\n const detected = await detectSourceFile(cwd);\n if (!detected) {\n console.log(chalk.red(\" ✗ No AI configuration file found in current directory\"));\n console.log();\n console.log(chalk.gray(\" Supported source files:\"));\n for (const file of Object.keys(SOURCE_FILES)) {\n console.log(chalk.gray(` • ${file}`));\n }\n console.log();\n console.log(chalk.gray(\" Command directories (for slash commands):\"));\n for (const dir of Object.keys(COMMAND_DIRS)) {\n console.log(chalk.gray(` • ${dir}/*.md`));\n }\n console.log();\n console.log(chalk.gray(\" Usage: lynxp convert <source> <target>\"));\n console.log(chalk.gray(\" Example: lynxp convert AGENTS.md cursor\"));\n console.log(chalk.gray(\" Example: lynxp convert .cursor/commands/deploy.md claude-command\"));\n process.exit(1);\n }\n sourcePath = detected.path;\n sourcePlatform = detected.platform;\n }\n\n // Validate target format — try exact match, then underscore variant\n const targetLower = target.toLowerCase();\n const normalizedTarget = TARGET_FILES[targetLower] ? targetLower : targetLower.replace(/-/g, \"_\");\n if (!TARGET_FILES[normalizedTarget]) {\n console.log(chalk.red(` ✗ Unknown target format: ${target}`));\n console.log();\n console.log(chalk.gray(\" Supported target formats:\"));\n for (const [key, name] of Object.entries(PLATFORM_NAMES)) {\n console.log(chalk.gray(` • ${key.padEnd(15)} → ${name}`));\n }\n process.exit(1);\n }\n\n // Read source file\n let sourceContent: string;\n try {\n sourceContent = await readFile(sourcePath, \"utf-8\");\n } catch {\n console.log(chalk.red(` ✗ Could not read source file: ${sourcePath}`));\n process.exit(1);\n }\n\n console.log(chalk.white(` Source: ${basename(sourcePath)} (${PLATFORM_NAMES[sourcePlatform] || sourcePlatform})`));\n console.log(chalk.white(` Target: ${PLATFORM_NAMES[normalizedTarget]}`));\n console.log();\n\n // Parse and convert\n const spinner = ora(\"Converting configuration...\").start();\n \n const config = parseMarkdownConfig(sourceContent);\n const targetContent = generateTargetContent(config, normalizedTarget);\n \n spinner.stop();\n\n // Determine output path\n let outputFilename = options.output || TARGET_FILES[normalizedTarget];\n \n // For commands, preserve original filename but change directory\n if (isCommandTarget(normalizedTarget) && !options.output) {\n const originalFilename = basename(sourcePath);\n const targetDir = TARGET_FILES[normalizedTarget].split(\"/\").slice(0, -1).join(\"/\");\n outputFilename = `${targetDir}/${originalFilename}`;\n }\n \n const outputPath = join(cwd, outputFilename);\n\n // Check if output exists\n try {\n await access(outputPath);\n if (!options.force) {\n console.log(chalk.yellow(` ⚠️ File already exists: ${outputFilename}`));\n console.log(chalk.gray(\" Use --force to overwrite\"));\n process.exit(1);\n }\n } catch {\n // File doesn't exist, good to write\n }\n\n // Write output\n try {\n // Create directory if needed\n const { mkdir } = await import(\"fs/promises\");\n const outputDir = join(cwd, outputFilename.split(\"/\").slice(0, -1).join(\"/\"));\n if (outputDir !== cwd) {\n await mkdir(outputDir, { recursive: true });\n }\n \n await writeFile(outputPath, targetContent, \"utf-8\");\n \n console.log(chalk.green(` ✓ Converted to ${outputFilename}`));\n console.log();\n console.log(chalk.gray(` Lines: ${targetContent.split(\"\\n\").length}`));\n console.log(chalk.gray(` Size: ${targetContent.length} bytes`));\n console.log();\n } catch (error) {\n console.log(chalk.red(` ✗ Could not write output: ${error instanceof Error ? error.message : \"unknown error\"}`));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n","#!/usr/bin/env node\n/**\n * LynxPrompt CLI - Merge Command\n * \n * Merge two or more AI IDE configuration files into one.\n * Useful for combining rules from different sources or team configs.\n */\n\nimport chalk from \"chalk\";\nimport { readFile, writeFile, access } from \"fs/promises\";\nimport { join, basename } from \"path\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\n\ninterface MergeOptions {\n output?: string;\n strategy?: \"concat\" | \"sections\" | \"smart\";\n force?: boolean;\n interactive?: boolean;\n}\n\ninterface ConfigSection {\n title: string;\n content: string;\n source: string;\n}\n\nfunction parseMarkdownSections(content: string, sourceName: string): ConfigSection[] {\n const sections: ConfigSection[] = [];\n const parts = content.split(/^(#{1,3})\\s+(.+)$/m);\n \n let currentSection: ConfigSection | null = null;\n \n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n \n if (part.match(/^#{1,3}$/)) {\n // This is a header marker, next part is title\n if (currentSection) {\n sections.push(currentSection);\n }\n const title = parts[i + 1] || \"Untitled\";\n currentSection = {\n title: title.trim(),\n content: \"\",\n source: sourceName,\n };\n i++; // Skip the title part\n } else if (currentSection) {\n currentSection.content += part;\n } else if (part.trim()) {\n // Content before first header\n currentSection = {\n title: \"Introduction\",\n content: part,\n source: sourceName,\n };\n }\n }\n \n if (currentSection) {\n sections.push(currentSection);\n }\n \n return sections;\n}\n\nfunction mergeSectionsByStrategy(\n allSections: ConfigSection[][],\n strategy: \"concat\" | \"sections\" | \"smart\"\n): string {\n switch (strategy) {\n case \"concat\":\n // Simple concatenation with separators\n return allSections\n .map((sections, i) => {\n const sourceName = sections[0]?.source || `Source ${i + 1}`;\n const content = sections.map(s => {\n if (s.title !== \"Introduction\") {\n return `## ${s.title}\\n\\n${s.content.trim()}`;\n }\n return s.content.trim();\n }).join(\"\\n\\n\");\n \n return `<!-- From: ${sourceName} -->\\n${content}`;\n })\n .join(\"\\n\\n---\\n\\n\");\n\n case \"sections\":\n // Group by section title\n const sectionMap = new Map<string, ConfigSection[]>();\n \n for (const fileSections of allSections) {\n for (const section of fileSections) {\n const normalized = section.title.toLowerCase();\n if (!sectionMap.has(normalized)) {\n sectionMap.set(normalized, []);\n }\n sectionMap.get(normalized)!.push(section);\n }\n }\n \n const merged: string[] = [];\n \n for (const [, sections] of sectionMap) {\n if (sections.length === 1) {\n merged.push(`## ${sections[0].title}\\n\\n${sections[0].content.trim()}`);\n } else {\n // Multiple sources for same section - combine\n const combinedContent = sections\n .map(s => `<!-- From: ${s.source} -->\\n${s.content.trim()}`)\n .join(\"\\n\\n\");\n merged.push(`## ${sections[0].title}\\n\\n${combinedContent}`);\n }\n }\n \n return merged.join(\"\\n\\n\");\n\n case \"smart\":\n default:\n // Smart merge: dedupe similar content, prioritize by specificity\n const seen = new Set<string>();\n const result: string[] = [];\n \n // Sort sections: more specific first\n const flatSections = allSections.flat().sort((a, b) => {\n // Prioritize sections with more content\n return b.content.length - a.content.length;\n });\n \n for (const section of flatSections) {\n // Simple deduplication by checking content similarity\n const contentKey = section.content\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 200); // First 200 chars as key\n \n if (!seen.has(contentKey)) {\n seen.add(contentKey);\n if (section.title !== \"Introduction\") {\n result.push(`## ${section.title}\\n\\n${section.content.trim()}`);\n } else {\n result.push(section.content.trim());\n }\n }\n }\n \n return result.join(\"\\n\\n\");\n }\n}\n\nexport async function mergeCommand(\n files: string[],\n options: MergeOptions\n): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 🔀 LynxPrompt Merge\"));\n console.log(chalk.gray(\" Merge multiple AI IDE configuration files\"));\n console.log();\n\n // Validate input\n if (files.length < 2) {\n console.log(chalk.red(\" ✗ Please provide at least 2 files to merge\"));\n console.log();\n console.log(chalk.gray(\" Usage: lynxp merge <file1> <file2> [...files]\"));\n console.log(chalk.gray(\" Example: lynxp merge AGENTS.md team-rules.md --output merged.md\"));\n console.log();\n console.log(chalk.gray(\" Options:\"));\n console.log(chalk.gray(\" --output <file> Output filename (default: merged.md)\"));\n console.log(chalk.gray(\" --strategy <type> Merge strategy: concat, sections, smart (default: smart)\"));\n console.log(chalk.gray(\" --force Overwrite existing output file\"));\n console.log(chalk.gray(\" --interactive Review and select sections to include\"));\n process.exit(1);\n }\n\n const cwd = process.cwd();\n const strategy = options.strategy || \"smart\";\n \n console.log(chalk.white(` Files to merge: ${files.length}`));\n console.log(chalk.white(` Strategy: ${strategy}`));\n console.log();\n\n // Read all files\n const allSections: ConfigSection[][] = [];\n \n for (const file of files) {\n const filePath = join(cwd, file);\n \n try {\n await access(filePath);\n } catch {\n console.log(chalk.red(` ✗ File not found: ${file}`));\n process.exit(1);\n }\n \n try {\n const content = await readFile(filePath, \"utf-8\");\n const sections = parseMarkdownSections(content, basename(file));\n allSections.push(sections);\n console.log(chalk.gray(` ✓ Read ${file} (${sections.length} sections)`));\n } catch (error) {\n console.log(chalk.red(` ✗ Could not read ${file}: ${error instanceof Error ? error.message : \"unknown\"}`));\n process.exit(1);\n }\n }\n \n console.log();\n\n // Interactive mode: let user select sections\n if (options.interactive) {\n const flatSections = allSections.flatMap((sections, i) => \n sections.map(s => ({ ...s, fileIndex: i }))\n );\n \n const choices = flatSections.map((section, i) => ({\n title: `[${section.source}] ${section.title}`,\n value: i,\n selected: true,\n }));\n \n const response = await prompts({\n type: \"multiselect\",\n name: \"sections\",\n message: \"Select sections to include:\",\n choices,\n instructions: false,\n hint: \"- Space to toggle, Enter to confirm\",\n });\n \n if (!response.sections || response.sections.length === 0) {\n console.log(chalk.yellow(\" No sections selected, aborting.\"));\n process.exit(0);\n }\n \n // Filter to selected sections\n const selectedSections = response.sections.map((i: number) => flatSections[i]);\n allSections.length = 0;\n allSections.push(selectedSections);\n }\n\n // Merge\n const spinner = ora(\"Merging configurations...\").start();\n const mergedContent = mergeSectionsByStrategy(allSections, strategy);\n spinner.stop();\n\n // Add header\n const finalContent = `# AI Assistant Configuration (Merged)\n\n<!-- \n Merged from: ${files.join(\", \")}\n Strategy: ${strategy}\n Date: ${new Date().toISOString()}\n-->\n\n${mergedContent}\n`;\n\n // Determine output path\n const outputFilename = options.output || \"merged.md\";\n const outputPath = join(cwd, outputFilename);\n\n // Check if output exists\n try {\n await access(outputPath);\n if (!options.force) {\n console.log(chalk.yellow(` ⚠️ File already exists: ${outputFilename}`));\n console.log(chalk.gray(\" Use --force to overwrite\"));\n process.exit(1);\n }\n } catch {\n // File doesn't exist, good to write\n }\n\n // Write output\n try {\n await writeFile(outputPath, finalContent, \"utf-8\");\n \n console.log(chalk.green(` ✓ Merged to ${outputFilename}`));\n console.log();\n console.log(chalk.gray(` Sources: ${files.length} files`));\n console.log(chalk.gray(` Lines: ${finalContent.split(\"\\n\").length}`));\n console.log(chalk.gray(` Size: ${finalContent.length} bytes`));\n console.log();\n } catch (error) {\n console.log(chalk.red(` ✗ Could not write output: ${error instanceof Error ? error.message : \"unknown error\"}`));\n process.exit(1);\n }\n}\n\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport ora from \"ora\";\nimport { readFile, access, readdir } from \"fs/promises\";\nimport { join, relative, dirname, basename } from \"path\";\n\nimport { detectCommandFiles } from \"../utils/detect.js\";\n\n// Import command configuration\nconst CONFIG_FILE_PATTERNS = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursorrules\", // Legacy\n \".windsurfrules\",\n];\n\n// Command directories are defined in detect.ts\n// All commands are plain markdown - conversion is just renaming to different directories\n\ninterface AgentsMdFile {\n path: string; // Full path to file\n relativePath: string; // Path relative to scan root\n depth: number; // Directory depth from root\n name: string; // Extracted project name (from content or dir)\n parentPath?: string; // Parent AGENTS.md if in a monorepo\n content: string; // Raw file content\n sections: ParsedSection[];\n}\n\ninterface ParsedSection {\n title: string;\n content: string;\n level: number; // Heading level (1-6)\n}\n\ninterface ImportOptions {\n dryRun?: boolean;\n recursive?: boolean;\n depth?: number;\n pattern?: string;\n link?: boolean;\n verbose?: boolean;\n json?: boolean;\n}\n\ninterface ImportResult {\n totalFound: number;\n files: AgentsMdFile[];\n hierarchy: MonorepoHierarchy[];\n errors: string[];\n}\n\ninterface MonorepoHierarchy {\n rootPath: string;\n root?: AgentsMdFile;\n children: AgentsMdFile[];\n}\n\n/**\n * Scan a directory for AGENTS.md and similar config files\n */\nasync function scanDirectory(\n rootPath: string,\n options: ImportOptions = {}\n): Promise<AgentsMdFile[]> {\n const maxDepth = options.depth ?? 10;\n const files: AgentsMdFile[] = [];\n const patterns = options.pattern \n ? [options.pattern] \n : CONFIG_FILE_PATTERNS;\n\n async function scan(dir: string, depth: number): Promise<void> {\n if (depth > maxDepth) return;\n\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n // Skip common non-project directories\n if (entry.isDirectory()) {\n const skipDirs = [\n \"node_modules\", \".git\", \".next\", \"dist\", \"build\", \"out\",\n \"coverage\", \".cache\", \"__pycache__\", \"venv\", \".venv\",\n \"target\", \"vendor\", \".idea\", \".vscode\"\n ];\n if (skipDirs.includes(entry.name)) continue;\n\n if (options.recursive !== false) {\n await scan(fullPath, depth + 1);\n }\n } else if (entry.isFile()) {\n // Check if file matches our patterns\n if (patterns.includes(entry.name)) {\n try {\n const content = await readFile(fullPath, \"utf-8\");\n const relativePath = relative(rootPath, fullPath);\n \n files.push({\n path: fullPath,\n relativePath,\n depth,\n name: extractProjectName(content, dirname(fullPath)),\n content,\n sections: parseMarkdownSections(content),\n });\n } catch {\n // Skip files we can't read\n }\n }\n }\n }\n } catch {\n // Skip directories we can't access\n }\n }\n\n await scan(rootPath, 0);\n return files;\n}\n\n/**\n * Extract project name from AGENTS.md content or directory name\n */\nfunction extractProjectName(content: string, dirPath: string): string {\n // Try to find project name in common patterns\n const patterns = [\n /^#\\s+(.+?)(?:\\s*-|$)/m, // # Project Name or # Project Name - Description\n /Project(?:\\s+Overview)?[:\\s]*(.+?)(?:\\n|$)/i,\n /Name[:\\s]*(.+?)(?:\\n|$)/i,\n ];\n\n for (const pattern of patterns) {\n const match = content.match(pattern);\n if (match && match[1]) {\n const name = match[1].trim().replace(/[#*`]/g, \"\").trim();\n if (name && name.length < 100) {\n return name;\n }\n }\n }\n\n // Fall back to directory name\n return basename(dirPath) || \"Unnamed\";\n}\n\n/**\n * Parse markdown content into sections\n */\nfunction parseMarkdownSections(content: string): ParsedSection[] {\n const sections: ParsedSection[] = [];\n const lines = content.split(\"\\n\");\n let currentSection: ParsedSection | null = null;\n let contentLines: string[] = [];\n\n for (const line of lines) {\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n \n if (headingMatch) {\n // Save previous section\n if (currentSection) {\n currentSection.content = contentLines.join(\"\\n\").trim();\n sections.push(currentSection);\n }\n \n currentSection = {\n title: headingMatch[2].trim(),\n content: \"\",\n level: headingMatch[1].length,\n };\n contentLines = [];\n } else {\n contentLines.push(line);\n }\n }\n\n // Don't forget the last section\n if (currentSection) {\n currentSection.content = contentLines.join(\"\\n\").trim();\n sections.push(currentSection);\n }\n\n return sections;\n}\n\n/**\n * Build hierarchy from flat list of files\n */\nfunction buildHierarchy(files: AgentsMdFile[], _rootPath: string): MonorepoHierarchy[] {\n const hierarchies: MonorepoHierarchy[] = [];\n \n // Sort by path depth (root files first)\n const sorted = [...files].sort((a, b) => a.depth - b.depth);\n \n // Find potential roots (depth 0 or 1)\n const potentialRoots = sorted.filter(f => f.depth <= 1);\n \n if (potentialRoots.length === 0 && files.length > 0) {\n // No clear root, treat each file as its own hierarchy\n return files.map(f => ({\n rootPath: dirname(f.path),\n root: f,\n children: [],\n }));\n }\n\n // For each potential root, find children\n for (const root of potentialRoots) {\n const rootDir = dirname(root.path);\n const children = files.filter(f => {\n if (f === root) return false;\n // Child must be under root's directory\n return f.path.startsWith(rootDir + \"/\") && f.depth > root.depth;\n });\n\n // Set parent references\n for (const child of children) {\n child.parentPath = root.relativePath;\n }\n\n hierarchies.push({\n rootPath: rootDir,\n root,\n children,\n });\n }\n\n // Handle orphan files (not under any root)\n const assignedPaths = new Set(hierarchies.flatMap(h => [h.root?.path, ...h.children.map(c => c.path)]));\n const orphans = files.filter(f => !assignedPaths.has(f.path));\n \n for (const orphan of orphans) {\n hierarchies.push({\n rootPath: dirname(orphan.path),\n root: orphan,\n children: [],\n });\n }\n\n return hierarchies;\n}\n\n/**\n * Display import results\n */\nfunction displayResults(result: ImportResult, options: ImportOptions): void {\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.cyan.bold(\" 📥 Import Results\"));\n console.log();\n\n if (result.totalFound === 0) {\n console.log(chalk.yellow(\" No AGENTS.md or compatible files found.\"));\n console.log(chalk.gray(\" Try running from your project root, or use --pattern to specify custom filenames.\"));\n return;\n }\n\n console.log(chalk.green(` Found ${result.totalFound} configuration file(s)`));\n console.log();\n\n // Display hierarchy\n for (const hierarchy of result.hierarchy) {\n const isMonorepo = hierarchy.children.length > 0;\n \n if (hierarchy.root) {\n const icon = isMonorepo ? \"🏢\" : \"📄\";\n const typeLabel = isMonorepo ? chalk.magenta(\"[Monorepo Root]\") : chalk.blue(\"[Standalone]\");\n console.log(` ${icon} ${chalk.white.bold(hierarchy.root.name)} ${typeLabel}`);\n console.log(chalk.gray(` ${hierarchy.root.relativePath}`));\n \n // Show sections summary\n if (options.verbose && hierarchy.root.sections.length > 0) {\n const sectionNames = hierarchy.root.sections.slice(0, 5).map(s => s.title);\n console.log(chalk.gray(` Sections: ${sectionNames.join(\", \")}${hierarchy.root.sections.length > 5 ? \"...\" : \"\"}`));\n }\n }\n\n // Show children\n for (const child of hierarchy.children) {\n console.log(` └─ 📄 ${chalk.white(child.name)}`);\n console.log(chalk.gray(` ${child.relativePath}`));\n \n if (options.verbose && child.sections.length > 0) {\n const sectionNames = child.sections.slice(0, 3).map(s => s.title);\n console.log(chalk.gray(` Sections: ${sectionNames.join(\", \")}${child.sections.length > 3 ? \"...\" : \"\"}`));\n }\n }\n console.log();\n }\n\n // Summary\n const monorepoCount = result.hierarchy.filter(h => h.children.length > 0).length;\n const standaloneCount = result.hierarchy.filter(h => h.children.length === 0).length;\n \n if (monorepoCount > 0) {\n console.log(chalk.cyan(` 📊 ${monorepoCount} monorepo(s) detected with hierarchical configs`));\n }\n if (standaloneCount > 0) {\n console.log(chalk.cyan(` 📊 ${standaloneCount} standalone config(s)`));\n }\n\n // Errors\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.yellow(\" ⚠️ Warnings:\"));\n for (const error of result.errors) {\n console.log(chalk.gray(` ${error}`));\n }\n }\n}\n\n/**\n * Main import command\n */\nexport async function importCommand(path: string = \".\", options: ImportOptions): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 📥 LynxPrompt Import\"));\n console.log(chalk.gray(\" Scan and import AGENTS.md files and AI commands from your repository\"));\n console.log();\n\n // Resolve the path\n const rootPath = join(process.cwd(), path);\n \n // Check if path exists\n try {\n await access(rootPath);\n } catch {\n console.log(chalk.red(` ✗ Path not found: ${rootPath}`));\n process.exit(1);\n }\n\n const spinner = ora(\"Scanning for configuration files and commands...\").start();\n\n try {\n // Scan for config files\n const files = await scanDirectory(rootPath, options);\n \n // Also scan for command files\n const commands = await detectCommandFiles(rootPath);\n \n const totalFound = files.length + commands.length;\n \n if (totalFound === 0) {\n spinner.warn(\"No configuration files or commands found\");\n console.log();\n console.log(chalk.gray(\" Looking for:\"));\n console.log(chalk.gray(\" • Rules: AGENTS.md, CLAUDE.md, .cursorrules, .windsurfrules\"));\n console.log(chalk.gray(\" • Commands: .cursor/commands/*.md, .claude/commands/*.md\"));\n console.log(chalk.gray(\" Try specifying a different path or use --pattern for custom filenames\"));\n return;\n }\n\n spinner.succeed(`Found ${files.length} configuration file(s) and ${commands.length} command(s)`);\n\n // Build hierarchy\n const hierarchy = buildHierarchy(files, rootPath);\n\n const result: ImportResult = {\n totalFound: totalFound,\n files,\n hierarchy,\n errors: [],\n };\n\n // Display results\n displayResults(result, options);\n \n // Display command files if found\n if (commands.length > 0) {\n console.log();\n console.log(chalk.cyan.bold(\" ⚡ AI Agent Commands\"));\n console.log();\n \n // Group commands by type\n const cursorCommands = commands.filter(c => c.type === \"cursor-command\");\n const claudeCommands = commands.filter(c => c.type === \"claude-command\");\n \n if (cursorCommands.length > 0) {\n console.log(chalk.blue(` Cursor Commands (${cursorCommands.length}):`));\n for (const cmd of cursorCommands) {\n console.log(chalk.gray(` ⚡ ${cmd.name}`));\n console.log(chalk.gray(` ${relative(rootPath, cmd.path)}`));\n }\n console.log();\n }\n \n if (claudeCommands.length > 0) {\n console.log(chalk.yellow(` Claude Commands (${claudeCommands.length}):`));\n for (const cmd of claudeCommands) {\n console.log(chalk.gray(` 🧠 ${cmd.name}`));\n console.log(chalk.gray(` ${relative(rootPath, cmd.path)}`));\n }\n console.log();\n }\n \n console.log(chalk.cyan(\" 💡 Push commands with: lynxp push .cursor/commands/my-command.md\"));\n }\n\n // Dry run mode - stop here\n if (options.dryRun) {\n console.log(chalk.yellow(\" 📋 Dry run complete - no changes made\"));\n console.log(chalk.gray(\" Remove --dry-run to proceed with import\"));\n return;\n }\n\n // Ask what to do with the files\n if (!options.json) {\n console.log();\n const { action } = await prompts({\n type: \"select\",\n name: \"action\",\n message: \"What would you like to do?\",\n choices: [\n { title: \"Preview only (done)\", value: \"preview\" },\n { title: \"Convert all to AGENTS.md format\", value: \"convert\" },\n { title: \"Save hierarchy info for wizard\", value: \"save\" },\n { title: \"Push to LynxPrompt cloud as blueprints\", value: \"push\" },\n ],\n initial: 0,\n });\n\n switch (action) {\n case \"convert\":\n console.log(chalk.cyan(\"\\n 💡 Use 'lynxp convert <file> agents' to convert individual files\"));\n console.log(chalk.cyan(\" or 'lynxp merge <files...>' to combine multiple configs\\n\"));\n break;\n case \"save\":\n // Save to .lynxprompt/hierarchy.json for wizard reference\n await saveHierarchyInfo(rootPath, result);\n break;\n case \"push\":\n console.log(chalk.cyan(\"\\n 💡 Use 'lynxp push <file>' to push files individually\"));\n console.log(chalk.cyan(\" Requires login: 'lynxp login'\\n\"));\n break;\n default:\n // Preview only - done\n break;\n }\n }\n } catch (error) {\n spinner.fail(\"Import failed\");\n console.error(chalk.red(` Error: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n process.exit(1);\n }\n}\n\n/**\n * Save hierarchy info for wizard to use\n */\nasync function saveHierarchyInfo(rootPath: string, result: ImportResult): Promise<void> {\n const { writeFile, mkdir } = await import(\"fs/promises\");\n const configDir = join(rootPath, \".lynxprompt\");\n \n try {\n await mkdir(configDir, { recursive: true });\n \n const hierarchyInfo = {\n scannedAt: new Date().toISOString(),\n rootPath,\n totalFiles: result.totalFound,\n hierarchy: result.hierarchy.map(h => ({\n rootPath: h.rootPath,\n rootFile: h.root?.relativePath,\n rootName: h.root?.name,\n children: h.children.map(c => ({\n path: c.relativePath,\n name: c.name,\n sections: c.sections.map(s => s.title),\n })),\n })),\n };\n\n await writeFile(\n join(configDir, \"hierarchy.json\"),\n JSON.stringify(hierarchyInfo, null, 2),\n \"utf-8\"\n );\n\n console.log(chalk.green(\"\\n ✓ Hierarchy saved to .lynxprompt/hierarchy.json\"));\n console.log(chalk.gray(\" The wizard will use this to understand your monorepo structure\"));\n } catch (error) {\n console.error(chalk.red(` ✗ Failed to save hierarchy: ${error instanceof Error ? error.message : \"Unknown\"}`));\n }\n}\n\nexport { ImportOptions, ImportResult, AgentsMdFile };\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\n\ninterface HierarchiesOptions {\n limit?: number;\n json?: boolean;\n}\n\nexport async function hierarchiesCommand(\n options: HierarchiesOptions\n): Promise<void> {\n // Check authentication\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You need to be logged in to view hierarchies.\"));\n console.log(chalk.gray(\"Run 'lynxp login' to authenticate.\"));\n process.exit(1);\n }\n\n const spinner = ora(\"Fetching hierarchies...\").start();\n\n try {\n const response = await api.listHierarchies({\n limit: options.limit || 50,\n });\n \n spinner.stop();\n\n // JSON output mode\n if (options.json) {\n console.log(JSON.stringify(response, null, 2));\n return;\n }\n\n const { hierarchies, total } = response;\n\n if (hierarchies.length === 0) {\n console.log();\n console.log(chalk.yellow(\"No hierarchies found.\"));\n console.log();\n console.log(chalk.gray(\"Hierarchies are created automatically when you push AGENTS.md files from a repository.\"));\n console.log(chalk.gray(\"Run 'lynxp push AGENTS.md' in a git repository to create a hierarchy.\"));\n console.log();\n return;\n }\n\n console.log();\n console.log(chalk.cyan(`📁 Your Hierarchies (${total} total)`));\n console.log();\n\n for (const hierarchy of hierarchies) {\n console.log(chalk.bold(` ${hierarchy.name}`));\n console.log(chalk.gray(` ID: ${hierarchy.id}`));\n if (hierarchy.description) {\n console.log(chalk.gray(` ${hierarchy.description}`));\n }\n console.log(chalk.gray(` Blueprints: ${hierarchy.blueprint_count || 0}`));\n console.log(chalk.gray(` Repository: ${hierarchy.repository_root.slice(0, 16)}...`));\n console.log();\n }\n\n console.log(chalk.gray(\"─\".repeat(50)));\n console.log();\n console.log(chalk.gray(\"Tips:\"));\n console.log(chalk.gray(` • Pull entire hierarchy: lynxp pull <hierarchy_id>`));\n console.log(chalk.gray(` • View hierarchy details: lynxp hierarchy <hierarchy_id>`));\n console.log(chalk.gray(` • Sync local changes: lynxp sync`));\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to fetch hierarchies\");\n handleError(error);\n }\n}\n\nfunction handleError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n if (error.statusCode === 401) {\n console.error(chalk.gray(\"Your session may have expired. Run 'lynxp login' to re-authenticate.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.gray(\"You don't have permission to access hierarchies.\"));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n\n\n\n","import chalk from \"chalk\";\nimport { getApiUrl, setApiUrl, getConfigPath } from \"../config.js\";\n\nexport async function configCommand(\n action?: string,\n valueArg?: string,\n): Promise<void> {\n if (!action || action === \"show\") {\n console.log();\n console.log(chalk.cyan(\"⚙️ LynxPrompt CLI Configuration\"));\n console.log();\n console.log(\n chalk.white(\" API URL: \") + chalk.green(getApiUrl()),\n );\n console.log(\n chalk.white(\" Config: \") + chalk.gray(getConfigPath()),\n );\n if (process.env.LYNXPROMPT_API_URL) {\n console.log(\n chalk.gray(\n \" (API URL overridden by LYNXPROMPT_API_URL env var)\",\n ),\n );\n }\n console.log();\n return;\n }\n\n if (action === \"set-url\") {\n if (!valueArg) {\n console.error(\n chalk.red(\"Usage: lynxp config set-url <url>\"),\n );\n process.exit(1);\n }\n try {\n new URL(valueArg);\n } catch {\n console.error(chalk.red(`Invalid URL: ${valueArg}`));\n process.exit(1);\n }\n const clean = valueArg.replace(/\\/+$/, \"\");\n setApiUrl(clean);\n console.log(\n chalk.green(\"✓\") +\n ` API URL set to ${chalk.cyan(clean)}`,\n );\n console.log(\n chalk.gray(\" Run 'lynxp login' to authenticate with this instance.\"),\n );\n return;\n }\n\n if (action === \"reset-url\") {\n setApiUrl(\"https://api.lynxprompt.com\");\n console.log(\n chalk.green(\"✓\") +\n \" API URL reset to \" +\n chalk.cyan(\"https://api.lynxprompt.com\"),\n );\n return;\n }\n\n if (action === \"path\") {\n console.log(getConfigPath());\n return;\n }\n\n console.error(chalk.red(`Unknown config action: ${action}`));\n console.error(chalk.gray(\"Available: show, set-url <url>, reset-url, path\"));\n process.exit(1);\n}\n"],"mappings":";;;AAAA,SAAS,eAAe;AACxB,OAAOA,aAAW;;;ACDlB,OAAO,WAAW;AAClB,OAAO,SAAS;;;ACDhB,OAAO,UAAU;AAajB,IAAM,SAAS,IAAI,KAAmB;AAAA,EACpC,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,OAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,YAAY;AAAA,QACV,IAAI,EAAE,MAAM,SAAS;AAAA,QACrB,OAAO,EAAE,MAAM,SAAS;AAAA,QACxB,MAAM,EAAE,MAAM,CAAC,UAAU,MAAM,EAAE;AAAA,QACjC,MAAM,EAAE,MAAM,SAAS;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,EACV;AACF,CAAC;AAEM,SAAS,WAA+B;AAE7C,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AACA,SAAO,OAAO,IAAI,OAAO;AAC3B;AAEO,SAAS,SAAS,OAAqB;AAC5C,SAAO,IAAI,SAAS,KAAK;AAC3B;AAEO,SAAS,aAAmB;AACjC,SAAO,OAAO,OAAO;AACrB,SAAO,OAAO,MAAM;AACtB;AAEO,SAAS,YAAoB;AAElC,QAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AACA,SAAO,OAAO,IAAI,QAAQ;AAC5B;AAEO,SAAS,UAAU,KAAmB;AAC3C,SAAO,IAAI,UAAU,GAAG;AAC1B;AAEO,SAAS,UAA4C;AAC1D,SAAO,OAAO,IAAI,MAAM;AAC1B;AAEO,SAAS,QAAQ,MAAkC;AACxD,SAAO,IAAI,QAAQ,IAAI;AACzB;AAEO,SAAS,kBAA2B;AACzC,SAAO,CAAC,CAAC,SAAS;AACpB;AAEO,SAAS,gBAAwB;AACtC,SAAO,OAAO;AAChB;;;ACqCA,IAAM,YAAN,MAAgB;AAAA,EACN,aAAqC;AAC3C,UAAM,QAAQ,SAAS;AACvB,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,QAAI,OAAO;AACT,cAAQ,eAAe,IAAI,UAAU,KAAK;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,QACZ,UACA,UAAuB,CAAC,GACZ;AACZ,UAAM,UAAU,UAAU;AAC1B,UAAM,MAAM,GAAG,OAAO,GAAG,QAAQ;AAEjC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,GAAG;AAAA,MACH,SAAS;AAAA,QACP,GAAG,KAAK,WAAW;AAAA,QACnB,GAAG,QAAQ;AAAA,MACb;AAAA,IACF,CAAC;AAED,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ;AACd,YAAM,IAAI;AAAA,QACR,MAAM,WAAW,MAAM,SAAS;AAAA,QAChC,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,iBAA8C;AAClD,WAAO,KAAK,QAA4B,sBAAsB;AAAA,MAC5D,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,WAA6C;AAChE,WAAO,KAAK;AAAA,MACV,8BAA8B,SAAS;AAAA,IACzC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,UAAiC;AACrC,WAAO,KAAK,QAAsB,cAAc;AAAA,EAClD;AAAA;AAAA,EAGA,MAAM,eAAe,UAIjB,CAAC,GAAgC;AACnC,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM,SAAS,CAAC;AAC/D,QAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO,SAAS,CAAC;AAClE,QAAI,QAAQ,WAAY,QAAO,IAAI,cAAc,QAAQ,UAAU;AAEnE,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,KAAK;AAAA,MACV,qBAAqB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAA+C;AAOhE,QAAI,QAAQ;AACZ,QAAI,CAAC,GAAG,WAAW,KAAK,KAAK,CAAC,GAAG,WAAW,MAAM,GAAG;AACnD,cAAQ,MAAM,EAAE;AAAA,IAClB;AACA,WAAO,KAAK,QAAkC,sBAAsB,KAAK,EAAE;AAAA,EAC7E;AAAA,EAEA,MAAM,iBAAiB,OAAe,QAAgB,IAA6B;AACjF,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,GAAG;AAAA,MACH,OAAO,MAAM,SAAS;AAAA,IACxB,CAAC;AACD,WAAO,KAAK,QAAwB,mBAAmB,MAAM,EAAE;AAAA,EACjE;AAAA,EAEA,MAAM,gBAAgB,MAWgB;AACpC,WAAO,KAAK,QAAkC,sBAAsB;AAAA,MAClE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBACJ,IACA,MAQmC;AACnC,UAAM,QAAQ,GAAG,WAAW,KAAK,IAAI,KAAK,MAAM,EAAE;AAClD,WAAO,KAAK,QAAkC,sBAAsB,KAAK,IAAI;AAAA,MAC3E,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAgB,UAGlB,CAAC,GAAiC;AACpC,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,MAAM,SAAS,CAAC;AAC/D,QAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,OAAO,SAAS,CAAC;AAElE,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,KAAK;AAAA,MACV,sBAAsB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAA6H;AAE9I,QAAI,QAAQ;AACZ,QAAI,CAAC,GAAG,WAAW,KAAK,GAAG;AACzB,cAAQ,MAAM,EAAE;AAAA,IAClB;AACA,WAAO,KAAK,QAAgH,uBAAuB,KAAK,EAAE;AAAA,EAC5J;AAAA,EAEA,MAAM,gBAAgB,MAIgB;AACpC,WAAO,KAAK,QAAkC,uBAAuB;AAAA,MACnE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,IAA4D;AAChF,UAAM,QAAQ,GAAG,WAAW,KAAK,IAAI,KAAK,MAAM,EAAE;AAClD,WAAO,KAAK,QAA+C,uBAAuB,KAAK,IAAI;AAAA,MACzF,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAgB,MAI2B;AAC/C,WAAO,KAAK,QAA6C,0BAA0B;AAAA,MACjF,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,sBAAsB,MAoBG;AAE7B,UAAM,cAA4F,CAAC;AAGnG,QAAI,KAAK,UAAU;AACjB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG;AACxD,cAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI;AAC3D,YAAI,UAAU;AACZ,sBAAY,KAAK,EAAE,UAAU,YAAY,KAAK,OAAO,UAAU,WAAW,KAAK,CAAC;AAAA,QAClF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,WAAW;AAClB,UAAI,KAAK,UAAU,QAAQ;AACzB,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,UAAU,OAAO,KAAK,UAAU,QAAQ,WAAW,KAAK,CAAC;AAAA,MAC3G;AACA,UAAI,KAAK,UAAU,eAAe;AAChC,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,iBAAiB,OAAO,KAAK,UAAU,eAAe,WAAW,KAAK,CAAC;AAAA,MACzH;AACA,UAAI,KAAK,UAAU,oBAAoB;AACrC,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,sBAAsB,OAAO,KAAK,UAAU,oBAAoB,WAAW,KAAK,CAAC;AAAA,MACnI;AACA,UAAI,KAAK,UAAU,yBAAyB;AAC1C,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,2BAA2B,OAAO,KAAK,UAAU,yBAAyB,WAAW,KAAK,CAAC;AAAA,MAC7I;AACA,UAAI,KAAK,UAAU,OAAO;AACxB,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,SAAS,OAAO,KAAK,UAAU,OAAO,WAAW,KAAK,CAAC;AAAA,MACzG;AAAA,IACF;AAGA,QAAI,KAAK,YAAY;AACnB,UAAI,KAAK,WAAW,QAAQ,QAAQ;AAClC,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,UAAU,OAAO,KAAK,UAAU,KAAK,WAAW,MAAM,GAAG,WAAW,KAAK,CAAC;AAAA,MAC5H;AACA,UAAI,KAAK,WAAW,OAAO,QAAQ;AACjC,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,SAAS,OAAO,KAAK,UAAU,KAAK,WAAW,KAAK,GAAG,WAAW,KAAK,CAAC;AAAA,MAC1H;AACA,UAAI,KAAK,WAAW,KAAK,QAAQ;AAC/B,oBAAY,KAAK,EAAE,UAAU,cAAc,KAAK,OAAO,OAAO,KAAK,UAAU,KAAK,WAAW,GAAG,GAAG,WAAW,KAAK,CAAC;AAAA,MACtH;AAAA,IACF;AAGA,QAAI,KAAK,SAAS;AAChB,UAAI,KAAK,QAAQ,QAAQ,QAAQ;AAC/B,oBAAY,KAAK,EAAE,UAAU,WAAW,KAAK,UAAU,OAAO,KAAK,UAAU,KAAK,QAAQ,MAAM,GAAG,WAAW,KAAK,CAAC;AAAA,MACtH;AACA,UAAI,KAAK,QAAQ,YAAY,QAAQ;AACnC,oBAAY,KAAK,EAAE,UAAU,WAAW,KAAK,cAAc,OAAO,KAAK,UAAU,KAAK,QAAQ,UAAU,GAAG,WAAW,KAAK,CAAC;AAAA,MAC9H;AACA,UAAI,KAAK,QAAQ,aAAa,QAAW;AACvC,oBAAY,KAAK,EAAE,UAAU,WAAW,KAAK,YAAY,OAAO,OAAO,KAAK,QAAQ,QAAQ,GAAG,WAAW,KAAK,CAAC;AAAA,MAClH;AACA,UAAI,KAAK,QAAQ,OAAO;AACtB,oBAAY,KAAK,EAAE,UAAU,WAAW,KAAK,SAAS,OAAO,KAAK,QAAQ,OAAO,WAAW,KAAK,CAAC;AAAA,MACpG;AAAA,IACF;AAEA,QAAI,YAAY,WAAW,GAAG;AAC5B,aAAO,EAAE,OAAO,EAAE;AAAA,IACpB;AAEA,WAAO,KAAK,QAA2B,gCAAgC;AAAA,MACrE,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,WAAW;AAAA,IAClC,CAAC;AAAA,EACH;AACF;AAEO,IAAM,kBAAN,cAA8B,MAAM;AAAA,EACzC,YACE,SACO,YACA,UACP;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,MAAM,IAAI,UAAU;;;AFxZjC,eAAsB,eAA8B;AAClD,MAAI,gBAAgB,GAAG;AACrB,YAAQ;AAAA,MACN,MAAM;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,gCAAgC,EAAE,MAAM;AAE5D,MAAI;AAEF,UAAM,UAAU,MAAM,IAAI,eAAe;AACzC,YAAQ,KAAK;AAEb,YAAQ,IAAI;AACZ,YAAQ,IAAI,MAAM,KAAK,8CAAuC,CAAC;AAC/D,YAAQ,IAAI,MAAM,KAAK,MAAM,QAAQ,QAAQ,EAAE,CAAC;AAChD,YAAQ,IAAI;AAGZ,UAAM,cAAc,MAAM,eAAe,QAAQ,QAAQ;AACzD,QAAI,CAAC,aAAa;AAChB,cAAQ;AAAA,QACN,MAAM,OAAO,2EAA2E;AAAA,MAC1F;AAAA,IACF;AAGA,UAAM,cAAc,IAAI,+BAA+B,EAAE,MAAM;AAE/D,UAAM,cAAc,IAAI,KAAK;AAC7B,UAAM,eAAe;AACrB,UAAM,YAAY,KAAK,IAAI;AAE3B,WAAO,KAAK,IAAI,IAAI,YAAY,aAAa;AAC3C,YAAM,MAAM,YAAY;AAExB,UAAI;AACF,cAAM,SAAS,MAAM,IAAI,eAAe,QAAQ,UAAU;AAE1D,YAAI,OAAO,WAAW,eAAe,OAAO,SAAS,OAAO,MAAM;AAChE,sBAAY,QAAQ,4BAA4B;AAGhD,mBAAS,OAAO,KAAK;AACrB,kBAAQ,OAAO,IAAI;AAGnB,yBAAe,OAAO,IAAI;AAC1B;AAAA,QACF;AAEA,YAAI,OAAO,WAAW,WAAW;AAC/B,sBAAY,KAAK,mDAAmD;AACpE;AAAA,QACF;AAAA,MAGF,SAAS,OAAO;AAAA,MAEhB;AAAA,IACF;AAEA,gBAAY,KAAK,6CAA6C;AAAA,EAChE,SAAS,OAAO;AACd,YAAQ,KAAK,qCAAqC;AAElD,QAAI,iBAAiB,iBAAiB;AACpC,cAAQ,MAAM,MAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAClD,UAAI,MAAM,eAAe,KAAK;AAC5B,gBAAQ,MAAM,MAAM,KAAK,oEAAoE,CAAC;AAAA,MAChG;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,MAAM,IAAI,+BAA+B,CAAC;AACxD,cAAQ,MAAM,MAAM,KAAK,yDAAyD,CAAC;AAAA,IACrF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,eAAe,eAAe,KAA+B;AAC3D,MAAI;AAEF,UAAM,EAAE,SAAS,KAAK,IAAI,MAAM,OAAO,MAAM;AAC7C,UAAM,KAAK,GAAG;AACd,WAAO;AAAA,EACT,QAAQ;AAEN,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,eAAe;AAC7C,UAAM,EAAE,UAAU,IAAI,MAAM,OAAO,MAAM;AACzC,UAAM,YAAY,UAAU,IAAI;AAEhC,UAAMC,YAAW,QAAQ;AACzB,QAAI;AAEJ,QAAIA,cAAa,UAAU;AACzB,gBAAU,SAAS,GAAG;AAAA,IACxB,WAAWA,cAAa,SAAS;AAC/B,gBAAU,aAAa,GAAG;AAAA,IAC5B,OAAO;AACL,gBAAU,aAAa,GAAG;AAAA,IAC5B;AAEA,QAAI;AACF,YAAM,UAAU,OAAO;AACvB,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AASA,SAAS,eAAe,MAAsB;AAC5C,QAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AAEjD,QAAM,IAAI;AACV,QAAM,IAAI,MAAM;AAChB,QAAM,MAAM,CAAC,GAAW,QAAgB,IAAI,IAAI,OAAO,KAAK,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC;AAElF,UAAQ,IAAI;AACZ,UAAQ,IAAI,EAAE,WAAM,SAAI,OAAO,CAAC,IAAI,QAAG,CAAC;AACxC,UAAQ,IAAI,EAAE,QAAG,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,QAAG,CAAC;AAC3C,UAAQ,IAAI,EAAE,QAAG,IAAI,IAAI,2CAAoC,CAAC,IAAI,EAAE,QAAG,CAAC;AACxE,UAAQ,IAAI,EAAE,QAAG,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,QAAG,CAAC;AAC3C,UAAQ,IAAI,EAAE,QAAG,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,QAAG,CAAC;AACxD,UAAQ,IAAI,EAAE,QAAG,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,QAAG,CAAC;AAC3C,UAAQ,IAAI,EAAE,WAAM,SAAI,OAAO,CAAC,IAAI,QAAG,CAAC;AACxC,UAAQ,IAAI;AAEZ,UAAQ,IAAI,MAAM,KAAK,kCAA2B,CAAC;AACnD,UAAQ,IAAI;AAEZ,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,cAAc,IAAI,MAAM,KAAK,8BAA8B,CAAC;AAC/G,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,YAAY,IAAI,MAAM,KAAK,yBAAyB,CAAC;AACxG,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,iBAAiB,IAAI,MAAM,KAAK,wBAAwB,CAAC;AAC5G,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,YAAY,IAAI,MAAM,KAAK,qCAAqC,CAAC;AACpH,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,YAAY,IAAI,MAAM,KAAK,8BAA8B,CAAC;AAC7G,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,YAAY,IAAI,MAAM,KAAK,2BAA2B,CAAC;AAC1G,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,cAAc,IAAI,MAAM,KAAK,sBAAsB,CAAC;AACvG,UAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,MAAM,MAAM,MAAM,cAAc,IAAI,MAAM,KAAK,oBAAoB,CAAC;AAErG,UAAQ,IAAI;AACZ,UAAQ,IAAI,MAAM,KAAK,6BAA6B,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,uBAAuB,CAAC;AACxH,UAAQ,IAAI;AACd;;;AGnKA,OAAOC,YAAW;AAGlB,eAAsB,gBAA+B;AACnD,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ,IAAIC,OAAM,OAAO,kCAAkC,CAAC;AAC5D;AAAA,EACF;AAEA,QAAM,OAAO,QAAQ;AACrB,QAAM,QAAQ,MAAM,SAAS;AAE7B,aAAW;AAEX,UAAQ,IAAIA,OAAM,MAAM,0BAAqBA,OAAM,KAAK,KAAK,CAAC,EAAE,CAAC;AACjE,UAAQ,IAAIA,OAAM,KAAK,8BAA8B,CAAC;AACxD;;;AChBA,OAAOC,YAAW;AAClB,OAAOC,UAAS;AAIhB,eAAsB,gBAA+B;AACnD,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ,IAAIC,OAAM,OAAO,wDAAwD,CAAC;AAClF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAUC,KAAI,uBAAuB,EAAE,MAAM;AAEnD,MAAI;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,IAAI,QAAQ;AACnC,YAAQ,KAAK;AAGb,YAAQ;AAAA,MACN,IAAI,KAAK;AAAA,MACT,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IACb,CAAC;AAED,YAAQ,IAAI;AACZ,YAAQ,IAAID,OAAM,KAAK,8BAAuB,CAAC;AAC/C,YAAQ,IAAI;AACZ,YAAQ,IAAI,KAAKA,OAAM,KAAK,QAAQ,CAAC,UAAUA,OAAM,KAAK,KAAK,KAAK,CAAC,EAAE;AACvE,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAKA,OAAM,KAAK,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE;AAAA,IAC5D;AACA,QAAI,KAAK,cAAc;AACrB,cAAQ,IAAI,KAAKA,OAAM,KAAK,UAAU,CAAC,QAAQ,KAAK,YAAY,EAAE;AAAA,IACpE;AACA,YAAQ,IAAI;AACZ,YAAQ,IAAI,KAAKA,OAAM,KAAK,aAAa,CAAC,KAAK,KAAK,MAAM,gBAAgB,EAAE;AAC5E,YAAQ,IAAI,KAAKA,OAAM,KAAK,eAAe,CAAC,IAAI,IAAI,KAAK,KAAK,UAAU,EAAE,mBAAmB,CAAC,EAAE;AAChG,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,YAAQ,KAAK,2BAA2B;AAExC,QAAI,iBAAiB,iBAAiB;AACpC,UAAI,MAAM,eAAe,KAAK;AAC5B,gBAAQ,MAAMA,OAAM,IAAI,gEAAgE,CAAC;AAAA,MAC3F,WAAW,MAAM,eAAe,KAAK;AACnC,gBAAQ,MAAMA,OAAM,IAAI,mBAAmB,CAAC;AAAA,MAC9C,OAAO;AACL,gBAAQ,MAAMA,OAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAAA,MACpD;AAAA,IACF,OAAO;AACL,cAAQ,MAAMA,OAAM,IAAI,+BAA+B,CAAC;AAAA,IAC1D;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;ACvDA,OAAOE,YAAW;AAClB,OAAOC,UAAS;AAShB,eAAsB,YAAY,SAAqC;AACrE,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ,IAAIC,OAAM,OAAO,wDAAwD,CAAC;AAClF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAUC,KAAI,6BAA6B,EAAE,MAAM;AAEzD,MAAI;AACF,UAAM,QAAQ,SAAS,QAAQ,OAAO,EAAE,KAAK;AAC7C,UAAM,EAAE,YAAY,OAAO,SAAS,IAAI,MAAM,IAAI,eAAe;AAAA,MAC/D;AAAA,MACA,YAAY,QAAQ;AAAA,IACtB,CAAC;AAED,YAAQ,KAAK;AAEb,QAAI,WAAW,WAAW,GAAG;AAC3B,cAAQ,IAAI;AACZ,cAAQ,IAAID,OAAM,OAAO,sBAAsB,CAAC;AAChD,cAAQ,IAAIA,OAAM,KAAK,yEAAyE,CAAC;AACjG,cAAQ,IAAIA,OAAM,KAAK,wDAAwD,CAAC;AAChF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,8BAAuB,KAAK,SAAS,CAAC;AAC7D,YAAQ,IAAI;AAEZ,eAAW,MAAM,YAAY;AAC3B,qBAAe,EAAE;AAAA,IACnB;AAEA,QAAI,UAAU;AACZ,cAAQ,IAAIA,OAAM,KAAK,WAAW,WAAW,MAAM,OAAO,KAAK,4BAA4B,CAAC;AAAA,IAC9F;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,KAAK,4BAA4B;AACzC,mBAAe,KAAK;AAAA,EACtB;AACF;AAEA,SAAS,eAAe,IAAqB;AAC3C,QAAM,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,EACV,EAAE,GAAG,UAAU,KAAK;AAEpB,QAAM,YAAY;AAAA,IAChB,OAAOA,OAAM,KAAK,SAAS;AAAA,IAC3B,cAAcA,OAAM,KAAK,gBAAgB;AAAA,IACzC,MAAMA,OAAM,KAAK,QAAQ;AAAA,IACzB,WAAWA,OAAM,QAAQ,cAAc;AAAA,EACzC,EAAE,GAAG,IAAI,KAAK;AAEd,UAAQ,IAAI,KAAK,cAAc,IAAIA,OAAM,KAAK,GAAG,IAAI,CAAC,IAAI,SAAS,EAAE;AACrE,UAAQ,IAAI,QAAQA,OAAM,KAAK,GAAG,EAAE,CAAC,EAAE;AACvC,MAAI,GAAG,aAAa;AAClB,YAAQ,IAAI,QAAQA,OAAM,KAAK,SAAS,GAAG,aAAa,EAAE,CAAC,CAAC,EAAE;AAAA,EAChE;AACA,UAAQ,IAAI,QAAQA,OAAM,KAAK,SAAI,GAAG,SAAS,EAAE,CAAC,IAAIA,OAAM,KAAK,SAAI,GAAG,SAAS,EAAE,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE;AAC7G,UAAQ,IAAI;AACd;AAEA,SAAS,WAAW,MAAwB;AAC1C,MAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO;AACvC,SAAO,KAAK,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAMA,OAAM,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AAClE;AAEA,SAAS,SAAS,KAAa,WAA2B;AACxD,MAAI,IAAI,UAAU,UAAW,QAAO;AACpC,SAAO,IAAI,MAAM,GAAG,YAAY,CAAC,IAAI;AACvC;AAEA,SAAS,eAAe,OAAsB;AAC5C,MAAI,iBAAiB,iBAAiB;AACpC,QAAI,MAAM,eAAe,KAAK;AAC5B,cAAQ,MAAMA,OAAM,IAAI,gEAAgE,CAAC;AAAA,IAC3F,WAAW,MAAM,eAAe,KAAK;AACnC,cAAQ,MAAMA,OAAM,IAAI,8CAA8C,CAAC;AAAA,IACzE,OAAO;AACL,cAAQ,MAAMA,OAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAAA,IACpD;AAAA,EACF,OAAO;AACL,YAAQ,MAAMA,OAAM,IAAI,+BAA+B,CAAC;AAAA,EAC1D;AACA,UAAQ,KAAK,CAAC;AAChB;;;AClGA,OAAOE,YAAW;AAClB,OAAOC,UAAS;AAChB,OAAO,aAAa;AAGpB,SAAS,aAAAC,YAAW,SAAAC,QAAO,YAAAC,iBAAgB;AAC3C,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,kBAAkB;;;ACM3B,SAAS,UAAU,WAAW,OAAO,cAAc;AACnD,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAC3B,YAAY,UAAU;AA4BtB,IAAM,kBAAkB;AAKjB,SAAS,kBAAkB,SAAyB;AACzD,SAAO,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK,EAAE,UAAU,GAAG,EAAE;AAC3E;AAKA,eAAsB,eAAe,KAAwC;AAC3E,QAAM,WAAW,KAAK,KAAK,eAAe;AAE1C,MAAI;AACF,UAAM,OAAO,QAAQ;AACrB,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,UAAMC,UAAc,WAAM,OAAO;AACjC,WAAOA,WAAU,EAAE,SAAS,KAAK,YAAY,CAAC,EAAE;AAAA,EAClD,QAAQ;AACN,WAAO,EAAE,SAAS,KAAK,YAAY,CAAC,EAAE;AAAA,EACxC;AACF;AAKA,eAAsB,eAAe,KAAaA,SAAyC;AACzF,QAAM,WAAW,KAAK,KAAK,eAAe;AAC1C,QAAM,MAAM,QAAQ,QAAQ;AAE5B,QAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAEpC,QAAM,UAAe,eAAUA,SAAQ;AAAA,IACrC,WAAW;AAAA,IACX,aAAa;AAAA,EACf,CAAC;AAED,QAAM,UAAU,UAAU,SAAS,OAAO;AAC5C;AAKA,eAAsB,eACpB,KACA,WAWe;AACf,QAAMA,UAAS,MAAM,eAAe,GAAG;AAGvC,EAAAA,QAAO,aAAaA,QAAO,WAAW,OAAO,OAAK,EAAE,SAAS,UAAU,IAAI;AAG3E,QAAM,WAAW,UAAU,WAAW;AACtC,QAAM,UAAU;AAEhB,EAAAA,QAAO,WAAW,KAAK;AAAA,IACrB,IAAI,UAAU;AAAA,IACd,QAAQ,UAAU;AAAA,IAClB,MAAM,UAAU;AAAA,IAChB,MAAM,UAAU;AAAA,IAChB,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,IACjC,UAAU,kBAAkB,UAAU,OAAO;AAAA,IAC7C,SAAS,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,IACA,aAAa,UAAU;AAAA,IACvB,eAAe,UAAU;AAAA,IACzB,gBAAgB,UAAU;AAAA,EAC5B,CAAC;AAED,QAAM,eAAe,KAAKA,OAAM;AAClC;AAKA,eAAsB,oBAAoB,KAAa,MAAgD;AACrG,QAAMA,UAAS,MAAM,eAAe,GAAG;AACvC,SAAOA,QAAO,WAAW,KAAK,OAAK,EAAE,SAAS,IAAI,KAAK;AACzD;AAaA,eAAsB,gBAAgB,KAAa,SAA6C;AAC9F,MAAI;AACF,UAAM,WAAW,KAAK,KAAK,QAAQ,IAAI;AACvC,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,UAAM,kBAAkB,kBAAkB,OAAO;AACjD,WAAO,oBAAoB,QAAQ;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,eAAe,KAAa,MAAc,SAAgC;AAC9F,QAAMC,UAAS,MAAM,eAAe,GAAG;AACvC,QAAM,YAAYA,QAAO,WAAW,KAAK,OAAK,EAAE,SAAS,IAAI;AAE7D,MAAI,WAAW;AACb,cAAU,WAAW,kBAAkB,OAAO;AAC9C,cAAU,YAAW,oBAAI,KAAK,GAAE,YAAY;AAC5C,UAAM,eAAe,KAAKA,OAAM;AAAA,EAClC;AACF;AAKA,eAAsB,iBAAiB,KAAa,MAAgC;AAClF,QAAMA,UAAS,MAAM,eAAe,GAAG;AACvC,QAAM,eAAeA,QAAO,WAAW;AACvC,EAAAA,QAAO,aAAaA,QAAO,WAAW,OAAO,OAAK,EAAE,SAAS,IAAI;AAEjE,MAAIA,QAAO,WAAW,SAAS,cAAc;AAC3C,UAAM,eAAe,KAAKA,OAAM;AAChC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAKA,eAAsB,cACpB,KACA,MACA,aACA,eACA,QACe;AACf,MAAI;AACF,UAAM,WAAW,KAAK,KAAK,IAAI;AAC/B,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAEhD,UAAM,eAAe,KAAK;AAAA,MACxB,IAAI;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,uBAAuB,IAAI,UAAU;AAAA,EACvD;AACF;AAaA,eAAsB,gBAAgB,KAIlC;AACF,QAAMC,UAAS,MAAM,eAAe,GAAG;AACvC,QAAM,UAAU,CAAC;AAEjB,aAAW,aAAaA,QAAO,YAAY;AACzC,UAAM,WAAW,KAAK,KAAK,UAAU,IAAI;AACzC,QAAIC,cAAa;AACjB,QAAI,gBAAgB;AAEpB,QAAI;AACF,YAAM,OAAO,QAAQ;AACrB,MAAAA,cAAa;AACb,sBAAgB,MAAM,gBAAgB,KAAK,SAAS;AAAA,IACtD,QAAQ;AACN,MAAAA,cAAa;AAAA,IACf;AAEA,YAAQ,KAAK,EAAE,WAAW,eAAe,YAAAA,YAAW,CAAC;AAAA,EACvD;AAEA,SAAO;AACT;;;ADrOA,IAAM,mBAA2C;AAAA,EAC/C,WAAW;AAAA,EACX,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,SAAS;AACX;AAGA,SAAS,wBAAwB,YAAsD;AACrF,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAKA,SAAS,cAAc,IAAqB;AAC1C,SAAO,GAAG,WAAW,KAAK;AAC5B;AAEA,eAAsB,YACpB,IACA,SACe;AAEf,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ;AAAA,MACNC,OAAM,OAAO,mDAAmD;AAAA,IAClE;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,cAAc,EAAE,GAAG;AACrB,UAAM,cAAc,IAAI,OAAO;AAAA,EACjC,OAAO;AACL,UAAM,cAAc,IAAI,OAAO;AAAA,EACjC;AACF;AAKA,eAAe,cACb,IACA,SACe;AACf,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,UAAUC,KAAI,sBAAsBD,OAAM,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM;AAErE,MAAI;AACF,UAAM,WAAW,MAAM,IAAI,aAAa,EAAE;AAC1C,UAAM,EAAE,WAAW,WAAW,IAAI;AAClC,YAAQ,KAAK;AAEb,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,wBAAiBA,OAAM,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC;AACrE,QAAI,UAAU,aAAa;AACzB,cAAQ,IAAIA,OAAM,KAAK,MAAM,UAAU,WAAW,EAAE,CAAC;AAAA,IACvD;AACA,YAAQ,IAAIA,OAAM,KAAK,kBAAkB,UAAU,eAAe,EAAE,CAAC;AACrE,YAAQ,IAAIA,OAAM,KAAK,kBAAkB,WAAW,MAAM,EAAE,CAAC;AAC7D,YAAQ,IAAI;AAGZ,QAAI,QAAQ,SAAS;AACnB,cAAQ,IAAIA,OAAM,OAAO,gCAAyB,CAAC;AACnD,cAAQ,IAAI;AAEZ,iBAAW,MAAM,YAAY;AAC3B,cAAM,SAAS,GAAG,YAAY,cAAS;AACvC,cAAME,QAAO,GAAG,mBAAmB,iBAAiB,GAAG,IAAI,KAAK;AAChE,gBAAQ,IAAIF,OAAM,KAAK,GAAG,MAAM,GAAGE,KAAI,EAAE,CAAC;AAC1C,gBAAQ,IAAIF,OAAM,KAAK,GAAG,MAAM,kBAAQ,GAAG,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC;AAAA,MAC/D;AAEA,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,mDAAmD,CAAC;AAC3E;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,OAAO,WAAW,SAAS,GAAG;AACzC,YAAM,EAAE,QAAQ,IAAI,MAAM,QAAQ;AAAA,QAChC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,YAAY,WAAW,MAAM,kBAAkB,QAAQ,MAAM;AAAA,QACtE,SAAS;AAAA,MACX,CAAC;AACD,UAAI,CAAC,SAAS;AACZ,gBAAQ,IAAIA,OAAM,KAAK,YAAY,CAAC;AACpC;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAIA,OAAM,KAAK,qCAA8B,CAAC;AACtD,YAAQ,IAAI;AAEZ,QAAI,aAAa;AACjB,QAAI,UAAU;AAEd,eAAW,MAAM,YAAY;AAE3B,YAAM,WAAW,GAAG,mBAAmB,iBAAiB,GAAG,IAAI,KAAK;AACpE,YAAM,aAAaG,MAAK,QAAQ,QAAQ,QAAQ;AAGhD,UAAI,WAAW,UAAU,KAAK,CAAC,QAAQ,KAAK;AAC1C,cAAM,EAAE,UAAU,IAAI,MAAM,QAAQ;AAAA,UAClC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,gBAAgB,QAAQ;AAAA,UACjC,SAAS;AAAA,QACX,CAAC;AACD,YAAI,CAAC,WAAW;AACd,kBAAQ,IAAIH,OAAM,KAAK,qBAAgB,QAAQ,EAAE,CAAC;AAClD;AACA;AAAA,QACF;AAAA,MACF;AAGA,YAAM,EAAE,UAAU,IAAI,MAAM,IAAI,aAAa,GAAG,EAAE;AAElD,UAAI,CAAC,UAAU,SAAS;AACtB,gBAAQ,IAAIA,OAAM,OAAO,wBAAmB,QAAQ,EAAE,CAAC;AACvD;AACA;AAAA,MACF;AAGA,YAAM,MAAMI,SAAQ,UAAU;AAC9B,UAAI,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;AACzC,cAAMC,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC;AAGA,YAAMC,WAAU,YAAY,UAAU,SAAS,OAAO;AAGtD,UAAI,QAAQ,UAAU,OAAO;AAC3B,cAAM,SAAS,wBAAwB,UAAU,UAAU;AAC3D,cAAM,eAAe,KAAK;AAAA,UACxB,IAAI,UAAU;AAAA,UACd,MAAM,UAAU;AAAA,UAChB,MAAM;AAAA,UACN,SAAS,UAAU;AAAA,UACnB;AAAA,UACA,aAAa;AAAA,UACb,eAAe,UAAU;AAAA,UACzB,gBAAgB,GAAG,mBAAmB;AAAA,QACxC,CAAC;AAAA,MACH;AAEA,cAAQ,IAAIN,OAAM,MAAM,YAAO,QAAQ,EAAE,CAAC;AAC1C;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,MAAM,qBAAgB,UAAU,eAAe,CAAC;AAClE,QAAI,UAAU,GAAG;AACf,cAAQ,IAAIA,OAAM,KAAK,eAAe,OAAO,EAAE,CAAC;AAAA,IAClD;AACA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,OAAO,CAAC;AAC/B,YAAQ,IAAIA,OAAM,KAAK,uDAAkD,CAAC;AAC1E,YAAQ,IAAIA,OAAM,KAAK,iDAA4C,CAAC;AACpE,YAAQ,IAAIA,OAAM,KAAK,4BAAuB,EAAE,8BAA8B,CAAC;AAC/E,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,YAAQ,KAAK,0BAA0B;AACvC,IAAAO,gBAAe,KAAK;AAAA,EACtB;AACF;AAKA,eAAe,cACb,IACA,SACe;AACf,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,UAAUN,KAAI,sBAAsBD,OAAM,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM;AAErE,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,IAAI,aAAa,EAAE;AAC/C,YAAQ,KAAK;AAEb,QAAI,CAAC,UAAU,SAAS;AACtB,cAAQ,MAAMA,OAAM,IAAI,kCAA6B,CAAC;AACtD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,SAAS,wBAAwB,UAAU,UAAU;AAC3D,UAAM,gBAAgB,WAAW;AAEjC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,wBAAiBA,OAAM,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC;AACrE,QAAI,UAAU,aAAa;AACzB,cAAQ,IAAIA,OAAM,KAAK,MAAM,UAAU,WAAW,EAAE,CAAC;AAAA,IACvD;AACA,YAAQ,IAAIA,OAAM,KAAK,YAAY,UAAU,IAAI,iBAAY,UAAU,IAAI,uBAAkB,UAAU,UAAU,EAAE,CAAC;AAGpH,QAAI,UAAU,cAAc;AAC1B,cAAQ,IAAIA,OAAM,KAAK,mCAA4B,UAAU,YAAY,EAAE,CAAC;AAC5E,UAAI,UAAU,iBAAiB;AAC7B,gBAAQ,IAAIA,OAAM,KAAK,yBAAyB,UAAU,eAAe,EAAE,CAAC;AAAA,MAC9E;AAAA,IACF;AAGA,QAAI,eAAe;AACjB,cAAQ,IAAIA,OAAM,OAAO,0EAAmE,CAAC;AAAA,IAC/F,WAAW,WAAW,QAAQ;AAC5B,cAAQ,IAAIA,OAAM,KAAK,gDAAyC,CAAC;AAAA,IACnE,WAAW,WAAW,WAAW;AAC/B,cAAQ,IAAIA,OAAM,MAAM,mDAA4C,CAAC;AAAA,IACvE;AACA,YAAQ,IAAI;AAGZ,QAAI,QAAQ,SAAS;AACnB,cAAQ,IAAIA,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,cAAQ,IAAI;AAGZ,YAAM,QAAQ,UAAU,QAAQ,MAAM,IAAI;AAC1C,YAAM,eAAe,MAAM,MAAM,GAAG,EAAE;AAEtC,iBAAW,QAAQ,cAAc;AAC/B,YAAI,KAAK,WAAW,GAAG,GAAG;AACxB,kBAAQ,IAAIA,OAAM,KAAK,IAAI,CAAC;AAAA,QAC9B,WAAW,KAAK,WAAW,GAAG,GAAG;AAC/B,kBAAQ,IAAIA,OAAM,KAAK,IAAI,CAAC;AAAA,QAC9B,WAAW,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,IAAI,GAAG;AACzD,kBAAQ,IAAIA,OAAM,MAAM,IAAI,CAAC;AAAA,QAC/B,WAAW,KAAK,WAAW,KAAK,GAAG;AACjC,kBAAQ,IAAIA,OAAM,OAAO,IAAI,CAAC;AAAA,QAChC,OAAO;AACL,kBAAQ,IAAI,IAAI;AAAA,QAClB;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,IAAI;AACrB,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,OAAM,KAAK,OAAO,MAAM,SAAS,EAAE,aAAa,CAAC;AAAA,MAC/D;AAEA,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,mDAAmD,CAAC;AAC3E;AAAA,IACF;AAGA,UAAM,WAAW,UAAU,mBAAmB,iBAAiB,UAAU,IAAI,KAAK;AAClF,UAAM,aAAaG,MAAK,QAAQ,QAAQ,QAAQ;AAGhD,QAAI,eAA8B;AAClC,QAAI,WAAW,UAAU,GAAG;AAC1B,UAAI;AACF,uBAAe,MAAMK,UAAS,YAAY,OAAO;AAAA,MACnD,QAAQ;AAAA,MAER;AAAA,IACF;AAGA,UAAM,kBAAkB,MAAM,oBAAoB,KAAK,QAAQ;AAC/D,QAAI,mBAAmB,gBAAgB,OAAO,IAAI;AAChD,cAAQ,IAAIR,OAAM,OAAO,gEAA2D,gBAAgB,EAAE,EAAE,CAAC;AACzG,UAAI,CAAC,QAAQ,KAAK;AAChB,cAAM,EAAE,QAAQ,IAAI,MAAM,QAAQ;AAAA,UAChC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QACX,CAAC;AACD,YAAI,CAAC,SAAS;AACZ,kBAAQ,IAAIA,OAAM,KAAK,YAAY,CAAC;AACpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,gBAAgB,CAAC,QAAQ,KAAK;AAEhC,YAAM,aAAa,aAAa,MAAM,IAAI,EAAE;AAC5C,YAAM,cAAc,UAAU,QAAQ,MAAM,IAAI,EAAE;AAElD,cAAQ,IAAIA,OAAM,OAAO,uBAAkB,UAAU,EAAE,CAAC;AACxD,cAAQ,IAAIA,OAAM,KAAK,cAAc,UAAU,QAAQ,CAAC;AACxD,cAAQ,IAAIA,OAAM,KAAK,cAAc,WAAW,QAAQ,CAAC;AACzD,cAAQ,IAAI;AAEZ,YAAM,WAAW,MAAM,QAAQ;AAAA,QAC7B,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP,EAAE,OAAO,iCAAiC,OAAO,YAAY;AAAA,UAC7D,EAAE,OAAO,gCAAgC,OAAO,UAAU;AAAA,UAC1D,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,QACrC;AAAA,MACF,CAAC;AAED,UAAI,SAAS,WAAW,YAAY,CAAC,SAAS,QAAQ;AACpD,gBAAQ,IAAIA,OAAM,KAAK,YAAY,CAAC;AACpC;AAAA,MACF;AAEA,UAAI,SAAS,WAAW,WAAW;AAEjC,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,gBAAQ,IAAI;AAEZ,cAAM,QAAQ,UAAU,QAAQ,MAAM,IAAI,EAAE,MAAM,GAAG,EAAE;AACvD,mBAAW,QAAQ,OAAO;AACxB,cAAI,KAAK,WAAW,GAAG,GAAG;AACxB,oBAAQ,IAAIA,OAAM,KAAK,IAAI,CAAC;AAAA,UAC9B,OAAO;AACL,oBAAQ,IAAI,IAAI;AAAA,UAClB;AAAA,QACF;AAEA,YAAI,UAAU,QAAQ,MAAM,IAAI,EAAE,SAAS,IAAI;AAC7C,kBAAQ,IAAIA,OAAM,KAAK,OAAO,UAAU,QAAQ,MAAM,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC;AAAA,QACvF;AAEA,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,gBAAQ,IAAI;AAEZ,cAAM,kBAAkB,MAAM,QAAQ;AAAA,UACpC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QACX,CAAC;AAED,YAAI,CAAC,gBAAgB,SAAS;AAC5B,kBAAQ,IAAIA,OAAM,KAAK,YAAY,CAAC;AACpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,UAAM,MAAMI,SAAQ,UAAU;AAC9B,QAAI,QAAQ,KAAK;AACf,YAAMC,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACtC;AAGA,UAAMC,WAAU,YAAY,UAAU,SAAS,OAAO;AAGtD,QAAI,QAAQ,UAAU,OAAO;AAC3B,YAAM,eAAe,KAAK;AAAA,QACxB,IAAI,UAAU;AAAA,QACd,MAAM,UAAU;AAAA,QAChB,MAAM;AAAA,QACN,SAAS,UAAU;AAAA,QACnB;AAAA,QACA,aAAa,UAAU,gBAAgB;AAAA,QACvC,gBAAgB,UAAU,mBAAmB;AAAA,MAC/C,CAAC;AAAA,IACH;AAEA,YAAQ,IAAIN,OAAM,MAAM,sBAAiBA,OAAM,KAAK,UAAU,CAAC,EAAE,CAAC;AAGlE,QAAI,QAAQ,UAAU,OAAO;AAC3B,cAAQ,IAAIA,OAAM,KAAK,iBAAiB,UAAU,EAAE,EAAE,CAAC;AACvD,UAAI,UAAU,kBAAkB;AAC9B,gBAAQ,IAAIA,OAAM,KAAK,gBAAgB,UAAU,gBAAgB,EAAE,CAAC;AAAA,MACtE;AACA,UAAI,eAAe;AACjB,gBAAQ,IAAIA,OAAM,KAAK,+BAA+B,EAAE,mBAAmB,CAAC;AAAA,MAC9E,OAAO;AACL,gBAAQ,IAAIA,OAAM,KAAK,4BAA4B,QAAQ,mBAAmB,CAAC;AAAA,MACjF;AAAA,IACF;AACA,YAAQ,IAAI;AAGZ,UAAM,aAAa,cAAc,UAAU,IAAI;AAC/C,QAAI,YAAY;AACd,cAAQ,IAAIA,OAAM,KAAK,aAAM,UAAU,EAAE,CAAC;AAC1C,cAAQ,IAAI;AAAA,IACd;AAGA,YAAQ,IAAIA,OAAM,KAAK,OAAO,CAAC;AAC/B,YAAQ,IAAIA,OAAM,KAAK,uDAAkD,CAAC;AAC1E,YAAQ,IAAIA,OAAM,KAAK,4BAAuB,EAAE,2CAA2C,CAAC;AAC5F,QAAI,eAAe;AACjB,cAAQ,IAAIA,OAAM,KAAK,8BAAyB,QAAQ,mCAAmC,CAAC;AAAA,IAC9F;AACA,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,YAAQ,KAAK,0BAA0B;AACvC,IAAAO,gBAAe,KAAK;AAAA,EACtB;AACF;AAEA,SAAS,cAAc,MAA6B;AAClD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAASA,gBAAe,OAAsB;AAC5C,MAAI,iBAAiB,iBAAiB;AACpC,QAAI,MAAM,eAAe,KAAK;AAC5B,cAAQ;AAAA,QACNP,OAAM,IAAI,kEAA6D;AAAA,MACzE;AAAA,IACF,WAAW,MAAM,eAAe,KAAK;AACnC,cAAQ;AAAA,QACNA,OAAM,IAAI,8DAAyD;AAAA,MACrE;AACA,cAAQ;AAAA,QACNA,OAAM;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,MAAM,eAAe,KAAK;AACnC,cAAQ,MAAMA,OAAM,IAAI,0CAAqC,CAAC;AAC9D,cAAQ;AAAA,QACNA,OAAM;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,MAAMA,OAAM,IAAI,iBAAY,MAAM,OAAO,EAAE,CAAC;AAAA,IACtD;AAAA,EACF,OAAO;AACL,YAAQ,MAAMA,OAAM,IAAI,sCAAiC,CAAC;AAAA,EAC5D;AACA,UAAQ,KAAK,CAAC;AAChB;;;AE5eA,OAAOS,YAAW;AAClB,OAAOC,UAAS;AAChB,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,cAAAC,mBAAkB;AAC3B,OAAOC,cAAa;;;ACLpB,SAAS,YAAAC,WAAU,UAAAC,SAAQ,IAAI,eAAe;AAC9C,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAc;AACvB,SAAS,iBAAiB;AA6C1B,IAAM,wBAAkD;AAAA,EACtD,QAAQ,CAAC,MAAM;AAAA,EACf,OAAO,CAAC,SAAS,WAAW;AAAA,EAC5B,KAAK,CAAC,KAAK;AAAA,EACX,SAAS,CAAC,eAAe;AAAA,EACzB,QAAQ,CAAC,UAAU,eAAe;AAAA,EAClC,OAAO,CAAC,UAAU;AAAA,EAClB,OAAO,CAAC,kBAAkB;AAAA,EAC1B,OAAO,CAAC,OAAO;AAAA,EACf,MAAM,CAAC,MAAM;AAAA,EACb,QAAQ,CAAC,QAAQ;AACnB;AAEA,IAAM,mBAA6C;AAAA,EACjD,YAAY,CAAC,YAAY;AAAA,EACzB,UAAU,CAAC,aAAa;AAAA,EACxB,QAAQ,CAAC,UAAU,gBAAgB;AAAA,EACnC,SAAS,CAAC,aAAa;AAAA,EACvB,SAAS,CAAC,SAAS;AAAA,EACnB,SAAS,CAAC,SAAS;AAAA,EACnB,MAAM,CAAC,MAAM;AAAA,EACb,QAAQ,CAAC,QAAQ;AAAA,EACjB,MAAM,CAAC,cAAc;AAAA,EACrB,SAAS,CAAC,WAAW,gBAAgB;AAAA,EACrC,MAAM,CAAC,MAAM;AAAA,EACb,QAAQ,CAAC,QAAQ;AAAA,EACjB,YAAY,CAAC,kBAAkB;AAAA,EAC/B,SAAS,CAAC,SAAS;AAAA,EACnB,QAAQ,CAAC,QAAQ;AAAA,EACjB,OAAO,CAAC,gBAAgB;AAAA,EACxB,UAAU,CAAC,UAAU;AAAA,EACrB,MAAM,CAAC,MAAM;AAAA,EACb,SAAS,CAAC,SAAS;AAAA,EACnB,OAAO,CAAC,OAAO;AACjB;AAUA,eAAe,uBAAuB,KAA2D;AAC/F,QAAM,OAAyD;AAAA,IAC7D,MAAM,CAAC;AAAA,IACP,cAAc,CAAC;AAAA,IACf,SAAS,CAAC;AAAA,IACV,KAAK,CAAC;AAAA,IACN,OAAO,CAAC;AAAA,IACR,MAAM,CAAC;AAAA,IACP,QAAQ,CAAC;AAAA,IACT,WAAW,CAAC;AAAA,IACZ,OAAO,CAAC;AAAA,IACR,WAAW,CAAC;AAAA,IACZ,YAAY,CAAC;AAAA,EACf;AAGA,QAAM,SAAS,CAAC,UAA6B,KAAa,SAAkB;AAC1E,QAAI,CAAC,KAAK,QAAQ,EAAG,KAAK,OAAK,EAAE,QAAQ,GAAG,GAAG;AAC7C,WAAK,QAAQ,EAAG,KAAK,EAAE,KAAK,KAAK,CAAC;AAAA,IACpC;AAAA,EACF;AAKA,QAAM,kBAAkBA,MAAK,KAAK,cAAc;AAChD,MAAI,MAAM,WAAW,eAAe,GAAG;AACrC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,iBAAiB,OAAO;AACvD,YAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,UAAI,IAAI,SAAS;AACf,mBAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,IAAI,OAAO,GAAG;AACxD,gBAAM,YAAY,OAAO,MAAM;AAC/B,gBAAM,UAAU,WAAW,IAAI;AAG/B,cAAI,KAAK,MAAM,gBAAgB,KAAK,UAAU,SAAS,MAAM,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,OAAO,GAAG;AAC7H,gBAAI,KAAK,SAAS,KAAK,KAAK,UAAU,SAAS,YAAY,GAAG;AAC5D,qBAAO,gBAAgB,SAAS,OAAO,IAAI,EAAE;AAAA,YAC/C,OAAO;AACL,qBAAO,QAAQ,SAAS,OAAO,IAAI,EAAE;AAAA,YACvC;AAAA,UACF,WAAW,KAAK,MAAM,gBAAgB,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,OAAO,GAAG;AACtG,mBAAO,QAAQ,SAAS,OAAO,IAAI,EAAE;AAAA,UACvC,WAAW,KAAK,MAAM,yBAAyB,KAAK,UAAU,SAAS,UAAU,GAAG;AAClF,mBAAO,UAAU,SAAS,OAAO,IAAI,EAAE;AAAA,UACzC,WAAW,KAAK,MAAM,kBAAkB,KAAK,UAAU,SAAS,KAAK,KAAK,UAAU,SAAS,SAAS,KAAK,UAAU,SAAS,YAAY,GAAG;AAC3I,mBAAO,SAAS,SAAS,OAAO,IAAI,EAAE;AAAA,UACxC,WAAW,KAAK,MAAM,wBAAwB,GAAG;AAC/C,mBAAO,OAAO,SAAS,OAAO,IAAI,EAAE;AAAA,UACtC,WAAW,KAAK,MAAM,gDAAgD,KAAK,UAAU,SAAS,cAAc,GAAG;AAC7G,mBAAO,aAAa,SAAS,OAAO,IAAI,EAAE;AAAA,UAC5C,WAAW,KAAK,MAAM,kBAAkB,KAAK,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,QAAQ,GAAG;AACzG,mBAAO,SAAS,SAAS,OAAO,IAAI,EAAE;AAAA,UACxC,WAAW,KAAK,MAAM,4CAA4C,GAAG;AACnE,mBAAO,aAAa,SAAS,OAAO,IAAI,EAAE;AAAA,UAC5C,WAAW,SAAS,aAAa,SAAS,eAAe;AACvD,mBAAO,WAAW,SAAS,OAAO,IAAI,EAAE;AAAA,UAC1C,WAAW,CAAC,CAAC,WAAW,cAAc,kBAAkB,WAAW,aAAa,EAAE,SAAS,IAAI,GAAG;AAEhG,mBAAO,cAAc,SAAS,OAAO,IAAI,EAAE;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAKA,QAAM,gBAAgBE,MAAK,KAAK,gBAAgB;AAChD,MAAI,MAAM,WAAW,aAAa,GAAG;AACnC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,eAAe,OAAO;AAGrD,UAAI,QAAQ,SAAS,QAAQ,KAAK,QAAQ,SAAS,cAAc,GAAG;AAClE,eAAO,QAAQ,yCAAyC,YAAY;AACpE,eAAO,gBAAgB,+DAA+D,0BAA0B;AAAA,MAClH;AAGA,UAAI,QAAQ,SAAS,MAAM,GAAG;AAC5B,eAAO,QAAQ,gBAAgB,iBAAiB;AAChD,eAAO,UAAU,iBAAiB,oBAAoB;AAAA,MACxD;AACA,UAAI,QAAQ,SAAS,OAAO,GAAG;AAC7B,eAAO,UAAU,WAAW,qBAAqB;AAAA,MACnD;AACA,UAAI,QAAQ,SAAS,MAAM,GAAG;AAC5B,eAAO,aAAa,UAAU,uBAAuB;AAAA,MACvD;AAGA,YAAM,qBAAqB,QAAQ,MAAM,+CAA+C;AACxF,UAAI,oBAAoB;AACtB,cAAM,cAAc,mBAAmB,CAAC,EAAE,MAAM,IAAI,EAAE,OAAO,OAAK,EAAE,SAAS,GAAG,CAAC;AACjF,mBAAW,QAAQ,aAAa;AAC9B,gBAAM,QAAQ,KAAK,MAAM,uBAAuB;AAChD,cAAI,OAAO;AACT,kBAAM,CAAC,EAAE,MAAM,KAAK,IAAI;AACxB,mBAAO,cAAc,cAAc,IAAI,IAAI,KAAK;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAGA,YAAM,WAAW,QAAQ,MAAM,gDAAgD;AAC/E,UAAI,UAAU;AACZ,cAAM,YAAY,SAAS,CAAC,EAAE,MAAM,IAAI,EAAE,OAAO,OAAK,EAAE,SAAS,GAAG,CAAC;AACrE,mBAAW,QAAQ,WAAW;AAC5B,gBAAM,QAAQ,KAAK,MAAM,uBAAuB;AAChD,cAAI,OAAO;AACT,kBAAM,CAAC,EAAE,MAAM,GAAG,IAAI;AAEtB,gBAAI,KAAK,MAAM,OAAO,GAAG;AACvB,qBAAO,QAAQ,OAAO,IAAI,IAAI,GAAG;AAAA,YACnC,WAAW,KAAK,MAAM,OAAO,GAAG;AAC9B,qBAAO,QAAQ,OAAO,IAAI,IAAI,GAAG;AAAA,YACnC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,qBAAO,UAAU,OAAO,IAAI,IAAI,GAAG;AAAA,YACrC,OAAO;AACL,qBAAO,cAAc,OAAO,IAAI,IAAI,GAAG;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAGA,UAAI,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,SAAS,GAAG;AAC9D,eAAO,OAAO,4DAA4D,wBAAwB;AAAA,MACpG;AAGA,UAAI,QAAQ,SAAS,eAAe,GAAG;AACrC,eAAO,WAAW,kBAAkB,kCAAkC;AAAA,MACxE,WAAW,MAAM,WAAWE,MAAK,KAAK,SAAS,CAAC,GAAG;AACjD,eAAO,WAAW,WAAW,2BAA2B;AAAA,MAC1D,OAAO;AACL,eAAO,WAAW,mCAAmC,+BAA+B;AAAA,MACtF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAKA,QAAM,mBAAmBA,MAAK,KAAK,kBAAkB;AACrD,MAAI,MAAM,WAAW,gBAAgB,GAAG;AACtC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,kBAAkB,OAAO;AACxD,UAAI,QAAQ,SAAS,QAAQ,GAAG;AAC9B,eAAO,QAAQ,8BAA8B,YAAY;AAAA,MAC3D;AACA,aAAO,WAAW,mCAAmC,sBAAsB;AAAA,IAC7E,QAAQ;AAAA,IAER;AAAA,EACF;AAKA,QAAM,eAAeE,MAAK,KAAK,UAAU;AACzC,MAAI,MAAM,WAAW,YAAY,GAAG;AAClC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,cAAc,OAAO;AAGpD,YAAM,gBAAgB,QAAQ,SAAS,wDAAwD;AAC/F,iBAAW,SAAS,eAAe;AACjC,cAAM,SAAS,MAAM,CAAC;AACtB,cAAM,MAAM,QAAQ,MAAM;AAG1B,YAAI,OAAO,MAAM,iBAAiB,GAAG;AACnC,iBAAO,QAAQ,KAAK,QAAQ,MAAM,EAAE;AAAA,QACtC,WAAW,OAAO,MAAM,2BAA2B,GAAG;AACpD,iBAAO,gBAAgB,KAAK,QAAQ,MAAM,EAAE;AAAA,QAC9C,WAAW,OAAO,MAAM,SAAS,GAAG;AAClC,iBAAO,QAAQ,KAAK,QAAQ,MAAM,EAAE;AAAA,QACtC,WAAW,OAAO,MAAM,iBAAiB,GAAG;AAC1C,iBAAO,UAAU,KAAK,QAAQ,MAAM,EAAE;AAAA,QACxC,WAAW,OAAO,MAAM,UAAU,GAAG;AACnC,iBAAO,SAAS,KAAK,QAAQ,MAAM,EAAE;AAAA,QACvC,WAAW,OAAO,MAAM,sBAAsB,GAAG;AAC/C,iBAAO,OAAO,KAAK,QAAQ,MAAM,EAAE;AAAA,QACrC,WAAW,OAAO,MAAM,sBAAsB,GAAG;AAC/C,iBAAO,aAAa,KAAK,QAAQ,MAAM,EAAE;AAAA,QAC3C,WAAW,OAAO,MAAM,UAAU,GAAG;AACnC,iBAAO,SAAS,KAAK,QAAQ,MAAM,EAAE;AAAA,QACvC,WAAW,OAAO,MAAM,mBAAmB,GAAG;AAC5C,iBAAO,WAAW,KAAK,QAAQ,MAAM,EAAE;AAAA,QACzC,WAAW,CAAC,CAAC,OAAO,WAAW,UAAU,eAAe,EAAE,SAAS,MAAM,GAAG;AAC1E,iBAAO,cAAc,KAAK,QAAQ,MAAM,EAAE;AAAA,QAC5C;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAKA,QAAM,oBAAoBE,MAAK,KAAK,oBAAoB;AACxD,QAAM,wBAAwBA,MAAK,KAAK,qBAAqB;AAC7D,QAAM,cAAc,MAAM,WAAW,iBAAiB,IAAI,oBACtC,MAAM,WAAW,qBAAqB,IAAI,wBAAwB;AACtF,MAAI,aAAa;AACf,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,aAAa,OAAO;AAGnD,YAAM,iBAAiB,QAAQ,SAAS,wCAAwC;AAChF,iBAAW,SAAS,gBAAgB;AAClC,cAAM,UAAU,MAAM,CAAC;AACvB,eAAO,cAAc,qBAAqB,OAAO,IAAI,OAAO,OAAO,UAAU;AAAA,MAC/E;AAGA,aAAO,OAAO,qBAAqB,oBAAoB;AACvD,aAAO,SAAS,wBAAwB,oBAAoB;AAC5D,aAAO,SAAS,0BAA0B,yBAAyB;AAAA,IACrE,QAAQ;AAAA,IAER;AAAA,EACF;AAKA,QAAM,iBAAiBE,MAAK,KAAK,YAAY;AAC7C,MAAI,MAAM,WAAW,cAAc,GAAG;AACpC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,gBAAgB,OAAO;AAGtD,YAAM,YAAY,QAAQ,MAAM,iBAAiB;AACjD,YAAM,YAAY,YAAY,UAAU,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI;AAE3D,aAAO,SAAS,mBAAmB,SAAS,MAAM,oBAAoB;AACtE,aAAO,OAAO,uBAAuB,SAAS,IAAI,sBAAsB;AAAA,IAC1E,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAI;AACF,UAAM,mBAAmBE,MAAK,KAAK,mBAAmB;AACtD,QAAI,MAAM,WAAW,gBAAgB,GAAG;AACtC,aAAO,SAAS,qDAAqD,2BAA2B;AAAA,IAClG;AAAA,EACF,QAAQ;AAAA,EAER;AAKA,QAAM,YAAYA,MAAK,KAAK,YAAY;AACxC,MAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,WAAO,SAAS,eAAe,oBAAoB;AACnD,WAAO,SAAS,yBAAyB,eAAe;AACxD,WAAO,QAAQ,cAAc,gBAAgB;AAC7C,WAAO,QAAQ,gBAAgB,mBAAmB;AAClD,WAAO,UAAU,aAAa,kBAAkB;AAChD,WAAO,OAAO,aAAa,iBAAiB;AAC5C,WAAO,SAAS,eAAe,uBAAuB;AAAA,EACxD;AAKA,QAAM,YAAYA,MAAK,KAAK,QAAQ;AACpC,MAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,WAAO,SAAS,YAAY,kBAAkB;AAC9C,WAAO,QAAQ,iBAAiB,cAAc;AAC9C,WAAO,QAAQ,qBAAqB,mBAAmB;AACvD,WAAO,UAAU,gBAAgB,gBAAgB;AACjD,WAAO,OAAO,YAAY,eAAe;AACzC,WAAO,SAAS,YAAY,mBAAmB;AAC/C,WAAO,aAAa,gBAAgB,YAAY;AAAA,EAClD;AAKA,QAAM,cAAcA,MAAK,KAAK,OAAO,SAAS;AAC9C,QAAM,WAAWA,MAAK,KAAK,SAAS;AACpC,QAAM,UAAUA,MAAK,KAAK,QAAQ;AAClC,MAAI,MAAM,WAAW,WAAW,GAAG;AACjC,WAAO,OAAO,sBAAsB,iBAAiB;AAAA,EACvD;AACA,MAAI,MAAM,WAAW,QAAQ,GAAG;AAC9B,WAAO,OAAO,kBAAkB,aAAa;AAAA,EAC/C;AACA,MAAI,MAAM,WAAW,OAAO,GAAG;AAC7B,WAAO,OAAO,iBAAiB,YAAY;AAAA,EAC7C;AAGA,QAAM,gBAAgBA,MAAK,KAAK,OAAO,cAAc;AACrD,MAAI,MAAM,WAAW,aAAa,GAAG;AACnC,WAAO,cAAc,2BAA2B,eAAe;AAAA,EACjE;AAGA,QAAM,gBAAgBA,MAAK,KAAK,OAAO,eAAe;AACtD,MAAI,MAAM,WAAW,aAAa,GAAG;AACnC,WAAO,cAAc,4BAA4B,sBAAsB;AAAA,EACzE;AAGA,QAAM,cAAcA,MAAK,KAAK,OAAO,OAAO,SAAS;AACrD,MAAI,MAAM,WAAW,WAAW,GAAG;AACjC,WAAO,OAAO,uDAAuD,gBAAgB;AAAA,EACvF;AAEA,SAAO;AACT;AAEA,eAAsB,cAAc,KAA8C;AAChF,QAAM,WAA4B;AAAA,IAChC,MAAM;AAAA,IACN,OAAO,CAAC;AAAA,IACR,WAAW,CAAC;AAAA,IACZ,UAAU,CAAC;AAAA,IACX,gBAAgB;AAAA,IAChB,MAAM;AAAA,EACR;AAGA,QAAM,kBAAkBA,MAAK,KAAK,cAAc;AAChD,MAAI,MAAM,WAAW,eAAe,GAAG;AACrC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,iBAAiB,OAAO;AACvD,YAAM,MAAM,KAAK,MAAM,OAAO;AAE9B,eAAS,OAAO,IAAI,QAAQ;AAC5B,eAAS,cAAc,IAAI;AAG3B,UAAI,IAAI,cAAc,MAAM,WAAWE,MAAK,KAAK,qBAAqB,CAAC,GAAG;AACxE,iBAAS,OAAO;AAAA,MAClB,WAAW,IAAI,QAAQ,IAAI,SAAS;AAClC,iBAAS,OAAO;AAAA,MAClB,OAAO;AACL,iBAAS,OAAO;AAAA,MAClB;AAGA,YAAM,UAAU,EAAE,GAAG,IAAI,cAAc,GAAG,IAAI,gBAAgB;AAG9D,iBAAW,CAAC,WAAW,IAAI,KAAK,OAAO,QAAQ,qBAAqB,GAAG;AACrE,YAAI,KAAK,KAAK,SAAO,QAAQ,GAAG,CAAC,GAAG;AAClC,mBAAS,MAAM,KAAK,SAAS;AAAA,QAC/B;AAAA,MACF;AAGA,iBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,gBAAgB,GAAG;AAC3D,YAAI,KAAK,KAAK,SAAO,QAAQ,GAAG,CAAC,GAAG;AAClC,mBAAS,MAAM,KAAK,IAAI;AAAA,QAC1B;AAAA,MACF;AAGA,UAAI,SAAS,MAAM,WAAW,KAAM,SAAS,MAAM,WAAW,KAAK,SAAS,MAAM,CAAC,MAAM,cAAe;AACtG,iBAAS,MAAM,QAAQ,YAAY;AAAA,MACrC;AAGA,UAAI,IAAI,SAAS;AACf,iBAAS,SAAS,QAAQ,IAAI,QAAQ;AACtC,iBAAS,SAAS,OAAO,IAAI,QAAQ;AACrC,iBAAS,SAAS,OAAO,IAAI,QAAQ,QAAQ,IAAI,QAAQ,YAAY;AACrE,iBAAS,SAAS,MAAM,IAAI,QAAQ,OAAO,IAAI,QAAQ,SAAS,IAAI,QAAQ;AAC5E,iBAAS,SAAS,SAAS,IAAI,QAAQ,UAAU,IAAI,QAAQ;AAAA,MAC/D;AAGA,UAAI,MAAM,WAAWA,MAAK,KAAK,gBAAgB,CAAC,GAAG;AACjD,iBAAS,iBAAiB;AAAA,MAC5B,WAAW,MAAM,WAAWA,MAAK,KAAK,WAAW,CAAC,GAAG;AACnD,iBAAS,iBAAiB;AAAA,MAC5B,WAAW,MAAM,WAAWA,MAAK,KAAK,WAAW,CAAC,GAAG;AACnD,iBAAS,iBAAiB;AAAA,MAC5B,WAAW,MAAM,WAAWA,MAAK,KAAK,mBAAmB,CAAC,GAAG;AAC3D,iBAAS,iBAAiB;AAAA,MAC5B;AAGA,UAAI,SAAS,kBAAkB,SAAS,mBAAmB,OAAO;AAChE,cAAM,KAAK,SAAS;AACpB,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAC5D,cAAI,SAAS,CAAC,MAAM,WAAW,EAAE,KAAK,CAAC,MAAM,WAAW,KAAK,GAAG;AAE9D,qBAAS,SAAS,GAAqC,IAAI,GAAG,EAAE,QAAQ,KAAK;AAAA,UAC/E;AAAA,QACF;AAAA,MACF,WAAW,SAAS,UAAU;AAE5B,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAC5D,cAAI,SAAS,CAAC,MAAM,WAAW,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,GAAG;AACjE,qBAAS,SAAS,GAAqC,IAAI,WAAW,KAAK;AAAA,UAC7E;AAAA,QACF;AAAA,MACF;AAGA,UAAI,IAAI,SAAS;AACf,iBAAS,SAAS,QAAQ,IAAI,QAAQ,QAAQ,UAAU;AACxD,iBAAS,SAAS,OAAO,IAAI,QAAQ,OAAO,SAAS;AACrD,iBAAS,SAAS,OAAO,IAAI,QAAQ,OAAO,SAAU,IAAI,QAAQ,YAAY,IAAI,eAAe;AACjG,iBAAS,SAAS,MAAM,IAAI,QAAQ,MAAM,QAAS,IAAI,QAAQ,QAAQ,UAAW,IAAI,QAAQ,QAAQ,UAAU;AAAA,MAClH;AAEA,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,gBAAgBA,MAAK,KAAK,gBAAgB;AAChD,MAAI,MAAM,WAAW,aAAa,GAAG;AACnC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,eAAe,OAAO;AAErD,eAAS,MAAM,KAAK,QAAQ;AAC5B,eAAS,OAAO;AAGhB,YAAM,YAAY,QAAQ,MAAM,sBAAsB;AACtD,UAAI,UAAW,UAAS,OAAO,UAAU,CAAC;AAG1C,UAAI,QAAQ,SAAS,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AAC9D,UAAI,QAAQ,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AAC5D,UAAI,QAAQ,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAC1D,UAAI,QAAQ,SAAS,UAAU,EAAG,UAAS,MAAM,KAAK,UAAU;AAChE,UAAI,QAAQ,SAAS,YAAY,EAAG,UAAS,MAAM,KAAK,YAAY;AACpE,UAAI,QAAQ,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AAC5D,UAAI,QAAQ,SAAS,MAAM,EAAG,UAAS,MAAM,KAAK,MAAM;AACxD,UAAI,QAAQ,SAAS,MAAM,EAAG,UAAS,MAAM,KAAK,MAAM;AAGxD,eAAS,SAAS,OAAO;AACzB,eAAS,SAAS,OAAO;AAGzB,UAAI,QAAQ,SAAS,eAAe,GAAG;AACrC,iBAAS,iBAAiB;AAC1B,iBAAS,SAAS,MAAM;AAAA,MAC1B,WAAW,MAAM,WAAWE,MAAK,KAAK,SAAS,CAAC,GAAG;AACjD,iBAAS,SAAS,MAAM;AAAA,MAC1B;AAEA,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,mBAAmBA,MAAK,KAAK,kBAAkB;AACrD,MAAI,MAAM,WAAW,gBAAgB,GAAG;AACtC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,kBAAkB,OAAO;AAExD,eAAS,MAAM,KAAK,QAAQ;AAC5B,eAAS,OAAO;AAEhB,UAAI,QAAQ,YAAY,EAAE,SAAS,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AAC5E,UAAI,QAAQ,YAAY,EAAE,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AAC1E,UAAI,QAAQ,YAAY,EAAE,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAExE,eAAS,SAAS,OAAO;AACzB,eAAS,SAAS,OAAO;AAEzB,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,YAAYE,MAAK,KAAK,YAAY;AACxC,MAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,WAAW,OAAO;AAEjD,eAAS,MAAM,KAAK,MAAM;AAC1B,eAAS,OAAO;AAGhB,YAAM,YAAY,QAAQ,MAAM,sBAAsB;AACtD,UAAI,UAAW,UAAS,OAAO,UAAU,CAAC;AAG1C,UAAI,QAAQ,SAAS,WAAW,EAAG,UAAS,MAAM,KAAK,OAAO;AAC9D,UAAI,QAAQ,SAAS,MAAM,EAAG,UAAS,MAAM,KAAK,MAAM;AACxD,UAAI,QAAQ,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAC1D,UAAI,QAAQ,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAC1D,UAAI,QAAQ,SAAS,MAAM,EAAG,UAAS,MAAM,KAAK,MAAM;AAExD,eAAS,SAAS,QAAQ;AAC1B,eAAS,SAAS,OAAO;AACzB,eAAS,SAAS,OAAO;AACzB,eAAS,SAAS,MAAM;AAExB,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,YAAYE,MAAK,KAAK,QAAQ;AACpC,MAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,WAAW,OAAO;AAEjD,eAAS,MAAM,KAAK,IAAI;AACxB,eAAS,OAAO;AAGhB,YAAM,cAAc,QAAQ,MAAM,gBAAgB;AAClD,UAAI,aAAa;AACf,cAAM,QAAQ,YAAY,CAAC,EAAE,MAAM,GAAG;AACtC,iBAAS,OAAO,MAAM,MAAM,SAAS,CAAC;AAAA,MACxC;AAGA,UAAI,QAAQ,SAAS,eAAe,EAAG,UAAS,MAAM,KAAK,KAAK;AAChE,UAAI,QAAQ,SAAS,eAAe,EAAG,UAAS,MAAM,KAAK,OAAO;AAClE,UAAI,QAAQ,SAAS,eAAe,EAAG,UAAS,MAAM,KAAK,MAAM;AACjE,UAAI,QAAQ,SAAS,cAAc,EAAG,UAAS,MAAM,KAAK,MAAM;AAEhE,eAAS,SAAS,QAAQ;AAC1B,eAAS,SAAS,OAAO;AACzB,eAAS,SAAS,OAAO;AACzB,eAAS,SAAS,MAAM;AAExB,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,eAAeE,MAAK,KAAK,UAAU;AACzC,MAAI,MAAM,WAAW,YAAY,GAAG;AAClC,QAAI;AACF,YAAM,UAAU,MAAMF,UAAS,cAAc,OAAO;AAGpD,UAAI,QAAQ,SAAS,QAAQ,EAAG,UAAS,SAAS,QAAQ;AAC1D,UAAI,QAAQ,SAAS,OAAO,EAAG,UAAS,SAAS,OAAO;AACxD,UAAI,QAAQ,SAAS,OAAO,EAAG,UAAS,SAAS,OAAO;AACxD,UAAI,QAAQ,SAAS,MAAM,EAAG,UAAS,SAAS,MAAM;AACtD,UAAI,QAAQ,SAAS,MAAM,EAAG,UAAS,SAAS,MAAM,SAAS,SAAS,OAAO;AAE/E,UAAI,OAAO,KAAK,SAAS,QAAQ,EAAE,SAAS,GAAG;AAC7C,iBAAS,OAAO;AAChB,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAI,MAAM,WAAWE,MAAK,KAAK,YAAY,CAAC,KAAK,MAAM,WAAWA,MAAK,KAAK,oBAAoB,CAAC,GAAG;AAClG,aAAS,MAAM,KAAK,QAAQ;AAC5B,aAAS,OAAO;AAChB,aAAS,YAAY;AAAA,EACvB;AAOA,QAAM,cAAcA,MAAK,KAAK,SAAS;AACvC,MAAI,MAAM,WAAW,WAAW,GAAG;AACjC,QAAI;AACF,YAAM,iBAAiB,MAAMF,UAAS,aAAa,OAAO;AAC1D,YAAM,eAAe,eAAe,YAAY;AAEhD,UAAI,aAAa,SAAS,aAAa,KAAK,aAAa,SAAS,8CAA8C,GAAG;AACjH,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,gBAAgB,KAAK,aAAa,SAAS,aAAa,GAAG;AAC1F,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,4BAA4B,KAAK,aAAa,SAAS,WAAW,GAAG;AACpG,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,mCAAmC,GAAG;AACrE,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,mCAAmC,GAAG;AACrE,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,cAAc,KAAK,aAAa,SAAS,mDAAmD,GAAG;AAC9H,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,wBAAwB,KAAK,aAAa,SAAS,KAAK,GAAG;AAC1F,iBAAS,UAAU;AAAA,MACrB,WAAW,aAAa,SAAS,WAAW,KAAK,aAAa,SAAS,wCAAwC,GAAG;AAChH,iBAAS,UAAU;AAAA,MACrB;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,gBAAgBE,MAAK,KAAK,QAAQ,QAAQ;AAChD,MAAI,MAAM,WAAW,aAAa,GAAG;AACnC,QAAI;AACF,YAAM,YAAY,MAAMF,UAAS,eAAe,OAAO;AACvD,YAAM,WAAW,UAAU,MAAM,gBAAgB;AACjD,UAAI,UAAU;AACZ,cAAM,UAAU,SAAS,CAAC,EAAE,KAAK;AACjC,iBAAS,UAAU;AAEnB,YAAI,QAAQ,SAAS,YAAY,GAAG;AAClC,mBAAS,WAAW;AAAA,QACtB,WAAW,QAAQ,SAAS,YAAY,KAAK,QAAQ,SAAS,QAAQ,GAAG;AACvE,mBAAS,WAAW;AAAA,QACtB,WAAW,QAAQ,SAAS,WAAW,GAAG;AACxC,mBAAS,WAAW;AAAA,QACtB,WAAW,QAAQ,SAAS,OAAO,KAAK,QAAQ,SAAS,UAAU,GAAG;AACpE,mBAAS,WAAW;AAAA,QACtB,WAAW,QAAQ,SAAS,OAAO,GAAG;AACpC,mBAAS,WAAW;AAAA,QACtB;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,MAAI,MAAM,WAAWE,MAAK,KAAK,WAAW,WAAW,CAAC,GAAG;AACvD,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,gBAAgB,CAAC,GAAG;AACxD,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,aAAa,CAAC,GAAG;AACrD,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,WAAW,CAAC,GAAG;AACnD,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,aAAa,CAAC,GAAG;AACrD,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,qBAAqB,CAAC,GAAG;AAC7D,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,yBAAyB,CAAC,GAAG;AACjE,aAAS,OAAO;AAAA,EAClB,WAAW,MAAM,WAAWA,MAAK,KAAK,YAAY,CAAC,GAAG;AACpD,aAAS,OAAO;AAAA,EAClB;AAGA,WAAS,gBAAgB,CAAC;AAC1B,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,QAAQ,aAAa;AAC9B,QAAI,MAAM,WAAWA,MAAK,KAAK,IAAI,CAAC,GAAG;AACrC,eAAS,cAAc,KAAK,IAAI;AAAA,IAClC;AAAA,EACF;AAGA,MAAI,CAAC,SAAS,aAAa;AACzB,UAAM,aAAaA,MAAK,KAAK,WAAW;AACxC,QAAI,MAAM,WAAW,UAAU,GAAG;AAChC,UAAI;AACF,cAAM,SAAS,MAAMF,UAAS,YAAY,OAAO;AAEjD,cAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,mBAAW,QAAQ,OAAO;AACxB,gBAAM,UAAU,KAAK,KAAK;AAC1B,cAAI,WAAW,CAAC,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,IAAI;AACtH,qBAAS,cAAc,QAAQ,UAAU,GAAG,GAAG;AAC/C;AAAA,UACF;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAGA,WAAS,mBAAmB,MAAM,uBAAuB,GAAG;AAE5D,SAAO,SAAS,MAAM,SAAS,KAAK,SAAS,OAAO,WAAW;AACjE;AAEA,eAAe,WAAWG,OAAgC;AACxD,MAAI;AACF,UAAMF,QAAOE,KAAI;AACjB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,eAAe,KAAqB;AAClD,QAAM,QAAQ,IAAI,YAAY;AAC9B,MAAI,MAAM,SAAS,YAAY,KAAK,MAAM,SAAS,SAAS,EAAG,QAAO;AACtE,MAAI,MAAM,SAAS,YAAY,KAAK,MAAM,SAAS,QAAQ,EAAG,QAAO;AACrE,MAAI,MAAM,SAAS,eAAe,KAAK,MAAM,SAAS,YAAY,EAAG,QAAO;AAC5E,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,cAAc,EAAG,QAAO;AACnG,MAAI,MAAM,SAAS,WAAW,KAAK,MAAM,SAAS,kBAAkB,KAAK,MAAM,SAAS,WAAW,EAAG,QAAO;AAC7G,SAAO;AACT;AAKA,SAAS,eAAe,KAAqD;AAC3E,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,EACF;AACA,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,QAAI,OAAO;AACT,aAAO,EAAE,OAAO,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE,QAAQ,UAAU,EAAE,EAAE;AAAA,IACjE;AAAA,EACF;AACA,SAAO;AACT;AAKA,SAAS,eAAe,KAAoD;AAC1E,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,EACF;AACA,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,QAAI,OAAO;AACT,YAAM,OAAO,MAAM,CAAC;AACpB,YAAMA,QAAO,MAAM,CAAC,EAAE,QAAQ,UAAU,EAAE;AAC1C,UAAI,KAAK,SAAS,QAAQ,KAAK,IAAI,YAAY,EAAE,SAAS,QAAQ,GAAG;AACnE,eAAO,EAAE,MAAAA,OAAM,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAwBA,IAAM,uBAAuB,CAAC,OAAO,cAAc,WAAW,YAAY,YAAY,gBAAgB,gBAAgB,WAAW,aAAa,WAAW,KAAK;AAG9J,IAAM,eAAe,CAAC,iBAAiB,mBAAmB,sBAAsB,eAAe,cAAc,cAAc,uBAAuB,WAAW,aAAa,mBAAmB,cAAc;AAE3M,eAAe,oBAAoB,SAAkD;AACnF,QAAM,SAAS,eAAe,OAAO;AACrC,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,EAAE,OAAO,KAAK,IAAI;AAExB,MAAI;AAEF,UAAM,UAAU,MAAM,MAAM,gCAAgC,KAAK,IAAI,IAAI,IAAI;AAAA,MAC3E,SAAS,EAAE,cAAc,iBAAiB;AAAA,IAC5C,CAAC;AACD,QAAI,CAAC,QAAQ,GAAI,QAAO;AACxB,UAAM,WAAW,MAAM,QAAQ,KAAK;AAEpC,QAAI,SAAS,QAAS,QAAO;AAG7B,UAAM,YAAY,SAAS,SAAS,SAAS,YAAY,KAAK;AAC9D,UAAM,eAAe,CAAC,SAAS,YAAY,YAAY,qBAAqB,SAAS,SAAS,IAAI;AAElG,UAAM,WAA4B;AAAA,MAChC,MAAM,SAAS;AAAA,MACf,aAAa,SAAS,eAAe;AAAA,MACrC,OAAO,CAAC;AAAA,MACR,WAAW,CAAC;AAAA,MACZ,UAAU,CAAC;AAAA,MACX,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,UAAU;AAAA,MACV;AAAA,MACA,SAAS,aAAa;AAAA,MACtB,cAAc,CAAC,SAAS;AAAA,MACxB;AAAA,MACA,aAAa,eAAe,gBAAgB;AAAA,MAC5C,WAAW;AAAA,MACX,eAAe,CAAC;AAAA,IAClB;AAGA,UAAM,WAAW,MAAM,MAAM,gCAAgC,KAAK,IAAI,IAAI,cAAc;AAAA,MACtF,SAAS,EAAE,cAAc,iBAAiB;AAAA,IAC5C,CAAC;AACD,QAAI,CAAC,SAAS,GAAI,QAAO;AACzB,UAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,UAAM,YAAY,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,YAAY,CAAC,CAAC;AAGhE,eAAW,QAAQ,cAAc;AAE/B,UAAI,KAAK,SAAS,GAAG,EAAG;AACxB,UAAI,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,YAAY,MAAM,KAAK,YAAY,CAAC,GAAG;AAClE,iBAAS,cAAe,KAAK,IAAI;AAAA,MACnC;AAAA,IACF;AAGA,QAAI,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,SAAS,KAAK,GAAG;AAC/D,YAAM,aAAa,MAAM,MAAM,gCAAgC,KAAK,IAAI,IAAI,qBAAqB;AAAA,QAC/F,SAAS,EAAE,cAAc,iBAAiB;AAAA,MAC5C,CAAC;AACD,UAAI,WAAW,IAAI;AACjB,cAAM,UAAU,MAAM,WAAW,KAAK;AACtC,YAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,YAAY,MAAM,aAAa,GAAG;AAC/D,mBAAS,cAAe,KAAK,qBAAqB;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,YAAY,KAAK,UAAU,IAAI,oBAAoB,KAAK,UAAU,IAAI,qBAAqB,GAAG;AAC9G,eAAS,YAAY;AACrB,eAAS,MAAM,KAAK,QAAQ;AAG5B,YAAM,oBAAoB,UAAU,IAAI,oBAAoB,IAAI,uBAAuB,UAAU,IAAI,qBAAqB,IAAI,wBAAwB;AACtJ,UAAI,mBAAmB;AACrB,cAAM,aAAa,MAAM,MAAM,qCAAqC,KAAK,IAAI,IAAI,SAAS,iBAAiB,EAAE;AAC7G,YAAI,WAAW,IAAI;AACjB,cAAI;AACF,kBAAM,UAAU,MAAM,WAAW,KAAK;AACtC,kBAAM,eAAe,QAAQ,YAAY;AAGzC,gBAAI,QAAQ,SAAS,SAAS,EAAG,UAAS,oBAAoB;AAAA,qBACrD,QAAQ,SAAS,WAAW,KAAK,+BAA+B,KAAK,OAAO,EAAG,UAAS,oBAAoB;AAAA,qBAC5G,QAAQ,SAAS,QAAQ,EAAG,UAAS,oBAAoB;AAAA,qBACzD,QAAQ,SAAS,MAAM,KAAK,QAAQ,SAAS,gBAAgB,EAAG,UAAS,oBAAoB;AAAA,qBAC7F,QAAQ,SAAS,YAAY,EAAG,UAAS,oBAAoB;AAAA,qBAC7D,QAAQ,SAAS,SAAS,EAAG,UAAS,oBAAoB;AAAA,qBAC1D,QAAQ,SAAS,qBAAqB,EAAG,UAAS,oBAAoB;AAG/E,gBAAI,aAAa,SAAS,UAAU,EAAG,UAAS,UAAU,KAAK,YAAY;AAC3E,gBAAI,aAAa,SAAS,OAAO,KAAK,CAAC,aAAa,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,OAAO;AACvG,gBAAI,aAAa,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,SAAS;AACrE,gBAAI,aAAa,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AACnE,gBAAI,aAAa,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AACrE,gBAAI,aAAa,SAAS,SAAS,EAAG,UAAS,UAAU,KAAK,SAAS;AAAA,UACzE,QAAQ;AAAA,UAAe;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,SAAS,KAAK,GAAG;AAE/D,YAAM,aAAa,MAAM,MAAM,gCAAgC,KAAK,IAAI,IAAI,qBAAqB;AAAA,QAC/F,SAAS,EAAE,cAAc,iBAAiB;AAAA,MAC5C,CAAC;AACD,UAAI,WAAW,IAAI;AACjB,cAAM,UAAU,MAAM,WAAW,KAAK;AACtC,YAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,GAAG;AAC/C,mBAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,QAAI,UAAU,IAAI,gBAAgB,EAAG,UAAS,OAAO;AACrD,QAAI,UAAU,IAAI,aAAa,EAAG,UAAS,OAAO;AAClD,QAAI,UAAU,IAAI,aAAa,EAAG,UAAS,OAAO;AAClD,QAAI,UAAU,IAAI,qBAAqB,EAAG,UAAS,OAAO;AAG1D,QAAI,UAAU,IAAI,gBAAgB,GAAG;AACnC,eAAS,MAAM,KAAK,QAAQ;AAC5B,YAAM,eAAe,MAAM,MAAM,qCAAqC,KAAK,IAAI,IAAI,sBAAsB;AACzG,UAAI,aAAa,IAAI;AACnB,YAAI;AACF,gBAAM,UAAU,MAAM,aAAa,KAAK;AACxC,gBAAM,eAAe,QAAQ,YAAY;AACzC,cAAI,aAAa,SAAS,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AACnE,cAAI,aAAa,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AACjE,cAAI,aAAa,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAC/D,cAAI,aAAa,SAAS,YAAY,EAAG,UAAS,MAAM,KAAK,YAAY;AACzE,cAAI,aAAa,SAAS,UAAU,EAAG,UAAS,MAAM,KAAK,UAAU;AAGrE,cAAI,aAAa,SAAS,QAAQ,EAAG,UAAS,gBAAgB;AAAA,mBACrD,aAAa,SAAS,UAAU,EAAG,UAAS,gBAAgB;AAGrE,mBAAS,SAAS,OAAO;AACzB,cAAI,aAAa,SAAS,MAAM,EAAG,UAAS,SAAS,OAAO;AAG5D,cAAI,aAAa,SAAS,SAAS,KAAK,aAAa,SAAS,SAAS,GAAG;AACxE,gBAAI,CAAC,SAAS,UAAU,SAAS,YAAY,EAAG,UAAS,UAAU,KAAK,YAAY;AAAA,UACtF;AACA,cAAI,aAAa,SAAS,WAAW,KAAK,aAAa,SAAS,QAAQ,GAAG;AACzE,gBAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AAAA,UAC9E;AACA,cAAI,aAAa,SAAS,SAAS,KAAK,aAAa,SAAS,OAAO,GAAG;AACtE,gBAAI,CAAC,SAAS,UAAU,SAAS,SAAS,EAAG,UAAS,UAAU,KAAK,SAAS;AAAA,UAChF;AACA,cAAI,aAAa,SAAS,OAAO,KAAK,aAAa,SAAS,UAAU,GAAG;AACvE,gBAAI,CAAC,SAAS,UAAU,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AAAA,UAC5E;AACA,cAAI,aAAa,SAAS,SAAS,KAAK,aAAa,SAAS,UAAU,GAAG;AACzE,gBAAI,CAAC,SAAS,UAAU,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AAAA,UAC5E;AAAA,QACF,QAAQ;AAAA,QAAe;AAAA,MACzB;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,kBAAkB,GAAG;AACrC,YAAM,SAAS,MAAM,MAAM,qCAAqC,KAAK,IAAI,IAAI,wBAAwB;AACrG,UAAI,OAAO,IAAI;AACb,YAAI;AACF,gBAAM,WAAW,MAAM,OAAO,KAAK,GAAG,YAAY;AAClD,cAAI,CAAC,SAAS,MAAM,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AACpE,cAAI,QAAQ,SAAS,SAAS,KAAK,CAAC,SAAS,MAAM,SAAS,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AACrG,cAAI,QAAQ,SAAS,QAAQ,KAAK,CAAC,SAAS,MAAM,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AAClG,cAAI,QAAQ,SAAS,OAAO,KAAK,CAAC,SAAS,MAAM,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAC/F,cAAI,QAAQ,SAAS,YAAY,KAAK,CAAC,SAAS,MAAM,SAAS,YAAY,EAAG,UAAS,MAAM,KAAK,YAAY;AAG9G,cAAI,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,SAAS,GAAG;AAC9D,gBAAI,CAAC,SAAS,UAAU,SAAS,YAAY,EAAG,UAAS,UAAU,KAAK,YAAY;AAAA,UACtF;AACA,cAAI,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,QAAQ,GAAG;AAC/D,gBAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AAAA,UAC9E;AACA,cAAI,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,OAAO,GAAG;AAC5D,gBAAI,CAAC,SAAS,UAAU,SAAS,SAAS,EAAG,UAAS,UAAU,KAAK,SAAS;AAAA,UAChF;AAAA,QACF,QAAQ;AAAA,QAAe;AAAA,MACzB;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,cAAc,GAAG;AACjC,YAAM,SAAS,MAAM,MAAM,qCAAqC,KAAK,IAAI,IAAI,oBAAoB;AACjG,UAAI,OAAO,IAAI;AACb,YAAI;AACF,gBAAM,MAAM,MAAM,OAAO,KAAK;AAC9B,gBAAM,UAAkC,EAAE,GAAG,IAAI,cAAc,GAAG,IAAI,gBAAgB;AAGtF,cAAI,QAAQ,MAAM,EAAG,UAAS,MAAM,KAAK,QAAQ;AACjD,cAAI,QAAQ,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AACjD,cAAI,QAAQ,KAAK,EAAG,UAAS,MAAM,KAAK,KAAK;AAC7C,cAAI,QAAQ,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AACnD,cAAI,QAAQ,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AACrD,cAAI,QAAQ,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AACrD,cAAI,QAAQ,MAAM,EAAG,UAAS,MAAM,KAAK,MAAM;AAG/C,cAAI,QAAQ,YAAY,EAAG,UAAS,MAAM,KAAK,YAAY;AAC3D,cAAI,QAAQ,aAAa,EAAG,UAAS,MAAM,KAAK,UAAU;AAC1D,cAAI,QAAQ,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AACnD,cAAI,QAAQ,aAAa,EAAG,UAAS,MAAM,KAAK,SAAS;AAGzD,cAAI,QAAQ,QAAQ,EAAG,UAAS,gBAAgB;AAAA,mBACvC,QAAQ,MAAM,EAAG,UAAS,gBAAgB;AAAA,mBAC1C,QAAQ,kBAAkB,EAAG,UAAS,gBAAgB;AAAA,mBACtD,QAAQ,SAAS,EAAG,UAAS,gBAAgB;AAAA,mBAC7C,QAAQ,OAAO,EAAG,UAAS,gBAAgB;AAEpD,cAAI,SAAS,MAAM,WAAW,KAAM,SAAS,MAAM,WAAW,KAAK,SAAS,MAAM,CAAC,MAAM,cAAe;AACtG,qBAAS,MAAM,QAAQ,YAAY;AAAA,UACrC;AAEA,cAAI,IAAI,SAAS;AACf,gBAAI,IAAI,QAAQ,MAAO,UAAS,SAAS,QAAQ;AACjD,gBAAI,IAAI,QAAQ,KAAM,UAAS,SAAS,OAAO;AAC/C,gBAAI,IAAI,QAAQ,KAAM,UAAS,SAAS,OAAO;AAC/C,gBAAI,IAAI,QAAQ,IAAK,UAAS,SAAS,MAAM;AAAA,qBACpC,IAAI,QAAQ,MAAO,UAAS,SAAS,MAAM;AAAA,UACtD;AAGA,cAAI,QAAQ,IAAI,KAAK,QAAQ,UAAU,KAAK,QAAQ,0BAA0B,GAAG;AAC/E,gBAAI,CAAC,SAAS,UAAU,SAAS,YAAY,EAAG,UAAS,UAAU,KAAK,YAAY;AAAA,UACtF;AACA,cAAI,QAAQ,gBAAgB,KAAK,QAAQ,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACxE,gBAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AAAA,UAC9E;AACA,cAAI,QAAQ,SAAS,KAAK,QAAQ,UAAU,GAAG;AAC7C,gBAAI,CAAC,SAAS,UAAU,SAAS,SAAS,EAAG,UAAS,UAAU,KAAK,SAAS;AAAA,UAChF;AACA,cAAI,QAAQ,OAAO,KAAK,QAAQ,SAAS,GAAG;AAC1C,gBAAI,CAAC,SAAS,UAAU,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AAAA,UAC5E;AACA,cAAI,QAAQ,OAAO,KAAK,QAAQ,QAAQ,GAAG;AACzC,gBAAI,CAAC,SAAS,UAAU,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AAAA,UAC5E;AAAA,QACF,QAAQ;AAAA,QAAe;AAAA,MACzB;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,YAAY,GAAG;AAC/B,eAAS,MAAM,KAAK,MAAM;AAC1B,eAAS,SAAS,QAAQ;AAC1B,eAAS,SAAS,OAAO;AAAA,IAC3B;AACA,QAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,eAAS,MAAM,KAAK,IAAI;AACxB,eAAS,SAAS,QAAQ;AAC1B,eAAS,SAAS,OAAO;AAAA,IAC3B;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAiBA,eAAe,oBAAoB,SAAkD;AACnF,QAAM,SAAS,eAAe,OAAO;AACrC,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,EAAE,MAAM,aAAa,KAAK,IAAI;AACpC,QAAM,cAAc,mBAAmB,WAAW;AAElD,MAAI;AAEF,UAAM,UAAU,MAAM,MAAM,WAAW,IAAI,oBAAoB,WAAW,IAAI;AAAA,MAC5E,SAAS,EAAE,cAAc,iBAAiB;AAAA,IAC5C,CAAC;AACD,QAAI,CAAC,QAAQ,GAAI,QAAO;AACxB,UAAM,WAAW,MAAM,QAAQ,KAAK;AAEpC,QAAI,SAAS,eAAe,UAAW,QAAO;AAG9C,UAAM,YAAY,SAAS,SAAS,KAAK,YAAY,KAAK;AAC1D,UAAM,eAAe,SAAS,eAAe,aAAa,YAAY,qBAAqB,SAAS,SAAS,IAAI;AAEjH,UAAM,WAA4B;AAAA,MAChC,MAAM,SAAS;AAAA,MACf,aAAa,SAAS,eAAe;AAAA,MACrC,OAAO,CAAC;AAAA,MACR,WAAW,CAAC;AAAA,MACZ,UAAU,CAAC;AAAA,MACX,gBAAgB;AAAA,MAChB,MAAM;AAAA,MACN,UAAU;AAAA,MACV;AAAA,MACA,SAAS,aAAa;AAAA,MACtB,cAAc,SAAS,eAAe;AAAA,MACtC;AAAA,MACA,aAAa,eAAe,gBAAgB;AAAA,MAC5C,WAAW;AAAA,MACX,eAAe,CAAC;AAAA,IAClB;AAGA,UAAM,WAAW,MAAM,MAAM,WAAW,IAAI,oBAAoB,WAAW,iCAAiC;AAAA,MAC1G,SAAS,EAAE,cAAc,iBAAiB;AAAA,IAC5C,CAAC;AACD,QAAI,CAAC,SAAS,GAAI,QAAO;AACzB,UAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,UAAM,YAAY,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,YAAY,CAAC,CAAC;AAGhE,eAAW,QAAQ,cAAc;AAC/B,UAAI,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,YAAY,MAAM,KAAK,YAAY,CAAC,GAAG;AAClE,iBAAS,cAAe,KAAK,IAAI;AAAA,MACnC;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,gBAAgB,EAAG,UAAS,OAAO;AACrD,QAAI,UAAU,IAAI,aAAa,EAAG,UAAS,OAAO;AAGlD,QAAI,UAAU,IAAI,YAAY,KAAK,UAAU,IAAI,oBAAoB,KAAK,UAAU,IAAI,qBAAqB,GAAG;AAC9G,eAAS,YAAY;AACrB,eAAS,MAAM,KAAK,QAAQ;AAG5B,YAAM,oBAAoB,UAAU,IAAI,oBAAoB,IAAI,uBAAuB,UAAU,IAAI,qBAAqB,IAAI,wBAAwB;AACtJ,UAAI,mBAAmB;AACrB,cAAM,aAAa,MAAM,MAAM,WAAW,IAAI,oBAAoB,WAAW,qBAAqB,mBAAmB,iBAAiB,CAAC,iBAAiB;AAAA,UACtJ,SAAS,EAAE,cAAc,iBAAiB;AAAA,QAC5C,CAAC;AACD,YAAI,WAAW,IAAI;AACjB,cAAI;AACF,kBAAM,UAAU,MAAM,WAAW,KAAK;AACtC,kBAAM,eAAe,QAAQ,YAAY;AAGzC,gBAAI,QAAQ,SAAS,qBAAqB,EAAG,UAAS,oBAAoB;AAAA,qBACjE,QAAQ,SAAS,SAAS,EAAG,UAAS,oBAAoB;AAAA,qBAC1D,QAAQ,SAAS,WAAW,KAAK,+BAA+B,KAAK,OAAO,EAAG,UAAS,oBAAoB;AAAA,qBAC5G,QAAQ,SAAS,QAAQ,EAAG,UAAS,oBAAoB;AAGlE,gBAAI,aAAa,SAAS,UAAU,EAAG,UAAS,UAAU,KAAK,YAAY;AAC3E,gBAAI,aAAa,SAAS,OAAO,KAAK,CAAC,aAAa,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,OAAO;AACvG,gBAAI,aAAa,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,SAAS;AACrE,gBAAI,aAAa,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AACnE,gBAAI,aAAa,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AAAA,UACvE,QAAQ;AAAA,UAAe;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,cAAc,GAAG;AACjC,YAAM,SAAS,MAAM,MAAM,WAAW,IAAI,oBAAoB,WAAW,+CAA+C;AAAA,QACtH,SAAS,EAAE,cAAc,iBAAiB;AAAA,MAC5C,CAAC;AACD,UAAI,OAAO,IAAI;AACb,YAAI;AACF,gBAAM,MAAM,MAAM,OAAO,KAAK;AAC9B,gBAAM,UAAkC,EAAE,GAAG,IAAI,cAAc,GAAG,IAAI,gBAAgB;AAGtF,cAAI,QAAQ,MAAM,EAAG,UAAS,MAAM,KAAK,QAAQ;AACjD,cAAI,QAAQ,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AACjD,cAAI,QAAQ,KAAK,EAAG,UAAS,MAAM,KAAK,KAAK;AAC7C,cAAI,QAAQ,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AACnD,cAAI,QAAQ,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AACrD,cAAI,QAAQ,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AAGrD,cAAI,QAAQ,YAAY,EAAG,UAAS,MAAM,KAAK,YAAY;AAC3D,cAAI,QAAQ,aAAa,EAAG,UAAS,MAAM,KAAK,UAAU;AAC1D,cAAI,QAAQ,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AAGnD,cAAI,QAAQ,QAAQ,EAAG,UAAS,gBAAgB;AAAA,mBACvC,QAAQ,MAAM,EAAG,UAAS,gBAAgB;AAAA,mBAC1C,QAAQ,kBAAkB,EAAG,UAAS,gBAAgB;AAE/D,cAAI,SAAS,MAAM,WAAW,KAAM,SAAS,MAAM,WAAW,KAAK,SAAS,MAAM,CAAC,MAAM,cAAe;AACtG,qBAAS,MAAM,QAAQ,YAAY;AAAA,UACrC;AAEA,cAAI,IAAI,SAAS;AACf,gBAAI,IAAI,QAAQ,MAAO,UAAS,SAAS,QAAQ;AACjD,gBAAI,IAAI,QAAQ,KAAM,UAAS,SAAS,OAAO;AAC/C,gBAAI,IAAI,QAAQ,KAAM,UAAS,SAAS,OAAO;AAC/C,gBAAI,IAAI,QAAQ,IAAK,UAAS,SAAS,MAAM;AAAA,UAC/C;AAGA,cAAI,QAAQ,IAAI,KAAK,QAAQ,UAAU,GAAG;AACxC,gBAAI,CAAC,SAAS,UAAU,SAAS,YAAY,EAAG,UAAS,UAAU,KAAK,YAAY;AAAA,UACtF;AACA,cAAI,QAAQ,gBAAgB,KAAK,QAAQ,SAAS,GAAG;AACnD,gBAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AAAA,UAC9E;AACA,cAAI,QAAQ,SAAS,KAAK,QAAQ,UAAU,GAAG;AAC7C,gBAAI,CAAC,SAAS,UAAU,SAAS,SAAS,EAAG,UAAS,UAAU,KAAK,SAAS;AAAA,UAChF;AACA,cAAI,QAAQ,OAAO,KAAK,QAAQ,SAAS,GAAG;AAC1C,gBAAI,CAAC,SAAS,UAAU,SAAS,OAAO,EAAG,UAAS,UAAU,KAAK,OAAO;AAAA,UAC5E;AAAA,QACF,QAAQ;AAAA,QAAe;AAAA,MACzB;AAAA,IACF;AAGA,QAAI,UAAU,IAAI,gBAAgB,GAAG;AACnC,eAAS,MAAM,KAAK,QAAQ;AAC5B,YAAM,QAAQ,MAAM,MAAM,WAAW,IAAI,oBAAoB,WAAW,iDAAiD;AAAA,QACvH,SAAS,EAAE,cAAc,iBAAiB;AAAA,MAC5C,CAAC;AACD,UAAI,MAAM,IAAI;AACZ,YAAI;AACF,gBAAM,WAAW,MAAM,MAAM,KAAK,GAAG,YAAY;AACjD,cAAI,QAAQ,SAAS,SAAS,EAAG,UAAS,MAAM,KAAK,SAAS;AAC9D,cAAI,QAAQ,SAAS,QAAQ,EAAG,UAAS,MAAM,KAAK,QAAQ;AAC5D,cAAI,QAAQ,SAAS,OAAO,EAAG,UAAS,MAAM,KAAK,OAAO;AAC1D,cAAI,QAAQ,SAAS,YAAY,EAAG,UAAS,MAAM,KAAK,YAAY;AACpE,cAAI,QAAQ,SAAS,QAAQ,EAAG,UAAS,gBAAgB;AAGzD,cAAI,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,SAAS,GAAG;AAC9D,gBAAI,CAAC,SAAS,UAAU,SAAS,YAAY,EAAG,UAAS,UAAU,KAAK,YAAY;AAAA,UACtF;AACA,cAAI,QAAQ,SAAS,WAAW,KAAK,QAAQ,SAAS,QAAQ,GAAG;AAC/D,gBAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ;AAAA,UAC9E;AAAA,QACF,QAAQ;AAAA,QAAe;AAAA,MACzB;AAAA,IACF,WAAW,UAAU,IAAI,kBAAkB,GAAG;AAC5C,eAAS,MAAM,KAAK,QAAQ;AAAA,IAC9B;AAGA,QAAI,UAAU,IAAI,YAAY,GAAG;AAC/B,eAAS,MAAM,KAAK,MAAM;AAC1B,eAAS,SAAS,QAAQ;AAC1B,eAAS,SAAS,OAAO;AAAA,IAC3B;AACA,QAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,eAAS,MAAM,KAAK,IAAI;AACxB,eAAS,SAAS,QAAQ;AAC1B,eAAS,SAAS,OAAO;AAAA,IAC3B;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAMA,SAAS,cAAc,KAAsB;AAC3C,QAAM,UAAU,IAAI,KAAK;AAEzB,MAAI,QAAQ,WAAW,UAAU,KAAK,QAAQ,WAAW,SAAS,KAC9D,QAAQ,WAAW,QAAQ,KAAK,QAAQ,WAAW,MAAM,KACzD,QAAQ,WAAW,QAAQ,GAAG;AAEhC,UAAM,iBAAiB;AACvB,WAAO,CAAC,eAAe,KAAK,OAAO;AAAA,EACrC;AACA,SAAO;AACT;AAKA,eAAe,uBAAuB,SAAkD;AACtF,MAAI,UAAyB;AAG7B,MAAI,CAAC,cAAc,OAAO,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,cAAU,MAAM,QAAQD,MAAK,OAAO,GAAG,oBAAoB,CAAC;AAE5D,QAAI;AAGF,YAAM,SAAS,UAAU,OAAO,CAAC,SAAS,WAAW,KAAK,WAAW,SAAS,OAAO,GAAG;AAAA,QACtF,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAED,UAAI,OAAO,WAAW,GAAG;AACvB,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,MAAM,cAAc,OAAO;AAE5C,QAAI,UAAU;AACZ,eAAS,WAAW,eAAe,OAAO;AAC1C,eAAS,UAAU;AAAA,IACrB;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT,UAAE;AACA,QAAI,SAAS;AACX,UAAI;AACF,cAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACpD,QAAQ;AAAA,MAAe;AAAA,IACzB;AAAA,EACF;AACF;AAMA,eAAsB,oBAAoB,SAAkD;AAC1F,QAAM,OAAO,eAAe,OAAO;AAGnC,MAAI,SAAS,UAAU;AACrB,UAAM,SAAS,MAAM,oBAAoB,OAAO;AAChD,QAAI,OAAQ,QAAO;AAAA,EACrB;AAEA,MAAI,SAAS,UAAU;AACrB,UAAM,SAAS,MAAM,oBAAoB,OAAO;AAChD,QAAI,OAAQ,QAAO;AAAA,EACrB;AAGA,SAAO,uBAAuB,OAAO;AACvC;AAKO,SAAS,SAAS,KAAsB;AAC7C,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,SAAS,KAAK,OAAK,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC;AAC9C;AA8BA,IAAM,sBAAsB;AAAA,EAC1B,EAAE,WAAW,oBAAoB,MAAM,kBAA2B,UAAU,UAAmB,cAAc,iBAA0B;AAAA,EACvI,EAAE,WAAW,oBAAoB,MAAM,kBAA2B,UAAU,UAAmB,cAAc,iBAA0B;AAAA,EACvI,EAAE,WAAW,uBAAuB,MAAM,qBAA8B,UAAU,YAAqB,cAAc,oBAA6B;AAAA,EAClJ,EAAE,WAAW,oBAAoB,MAAM,kBAA2B,UAAU,WAAoB,cAAc,iBAA0B;AAAA,EACxI,EAAE,WAAW,qBAAqB,MAAM,mBAA4B,UAAU,YAAqB,cAAc,kBAA2B;AAAA,EAC5I,EAAE,WAAW,sBAAsB,MAAM,oBAA6B,UAAU,YAAqB,cAAc,mBAA4B;AACjJ;AAMA,eAAsB,mBAAmB,KAAyC;AAChF,QAAM,WAA8B,CAAC;AACrC,QAAM,EAAE,SAAAE,UAAS,UAAU,cAAc,IAAI,MAAM,OAAO,aAAa;AAEvE,aAAW,UAAU,qBAAqB;AACxC,UAAM,UAAUF,MAAK,KAAK,OAAO,SAAS;AAE1C,QAAI;AACF,YAAMD,QAAO,OAAO;AACpB,YAAM,UAAU,MAAMG,SAAQ,SAAS,EAAE,eAAe,KAAK,CAAC;AAE9D,iBAAW,SAAS,SAAS;AAC3B,YAAI,MAAM,OAAO,KAAK,MAAM,KAAK,SAAS,KAAK,GAAG;AAChD,gBAAM,WAAWF,MAAK,SAAS,MAAM,IAAI;AACzC,cAAI;AACF,kBAAM,UAAU,MAAM,cAAc,UAAU,OAAO;AACrD,kBAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,EAAE;AAE3C,qBAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN;AAAA,cACA,MAAM,OAAO;AAAA,cACb;AAAA,cACA,UAAU,OAAO;AAAA,cACjB,cAAc,OAAO;AAAA,YACvB,CAAC;AAAA,UACH,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AACT;AAaO,SAAS,yBAAyB,UAAmF;AAC1H,QAAM,iBAAiB,SAAS,QAAQ,OAAO,GAAG;AAClD,QAAM,QAAQ,oBAAoB,KAAK,SAAO,eAAe,SAAS,IAAI,SAAS,CAAC;AAEpF,MAAI,OAAO;AACT,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,cAAc,MAAM;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;;;AD7/CA,SAAS,kBAAkB,KAAa,WAAmB,GAAqB;AAC9E,QAAM,UAA4B,CAAC;AAEnC,WAAS,KAAK,KAAa,OAAe;AACxC,QAAI,QAAQ,SAAU;AAEtB,QAAI;AACF,YAAM,UAAU,GAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAE3D,iBAAW,SAAS,SAAS;AAC3B,cAAM,WAAW,KAAK,KAAK,KAAK,MAAM,IAAI;AAG1C,YAAI,MAAM,YAAY,GAAG;AACvB,cAAI,CAAC,gBAAgB,QAAQ,QAAQ,SAAS,SAAS,eAAe,QAAQ,OAAO,EAAE,SAAS,MAAM,IAAI,GAAG;AAC3G;AAAA,UACF;AACA,eAAK,UAAU,QAAQ,CAAC;AAAA,QAC1B,WAAW,MAAM,SAAS,aAAa;AACrC,gBAAM,eAAe,KAAK,SAAS,KAAK,QAAQ;AAChD,kBAAQ,KAAK;AAAA,YACX,MAAM;AAAA,YACN,cAAc;AAAA,YACd,QAAQ,iBAAiB;AAAA,UAC3B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,OAAK,KAAK,CAAC;AAGX,UAAQ,KAAK,CAAC,GAAG,MAAM;AACrB,QAAI,EAAE,UAAU,CAAC,EAAE,OAAQ,QAAO;AAClC,QAAI,CAAC,EAAE,UAAU,EAAE,OAAQ,QAAO;AAClC,WAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,EACpC,CAAC;AAED,SAAO;AACT;AAMA,eAAe,oBAAoB,KAAa,MAAsC;AACpF,QAAM,iBAAiB,qBAAqB,GAAG;AAC/C,QAAM,SAAwB;AAAA,IAC5B,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,UAAU;AAAA,IACV;AAAA,EACF;AAEA,MAAI;AACF,UAAM,eAAe,KAAK,SAAS,KAAK,KAAK,QAAQ,IAAI,CAAC;AAG1D,QAAI,aAAa,SAAS,KAAK,GAAG,KAAK,CAAC,aAAa,WAAW,IAAI,GAAG;AACrE,aAAO,iBAAiB;AAGxB,YAAM,eAAe,KAAK,KAAK,KAAK,WAAW;AAC/C,UAAI,GAAG,WAAW,YAAY,KAAK,KAAK,QAAQ,IAAI,MAAM,cAAc;AACtE,cAAM,aAAa,MAAM,eAAe,GAAG;AAC3C,cAAM,kBAAkB,WAAW,WAAW;AAAA,UAC5C,OAAK,EAAE,SAAS;AAAA,QAClB;AACA,YAAI,iBAAiB;AACnB,iBAAO,WAAW,gBAAgB;AAAA,QACpC;AAAA,MACF;AAAA,IACF,WAAW,iBAAiB,eAAe,iBAAiB,KAAK,SAAS,IAAI,GAAG;AAE/E,aAAO,iBAAiB;AAAA,IAC1B;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAKA,eAAe,gBAAgB,MAAc,gBAAwB,MAAsC;AACzG,MAAI;AAEF,UAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,MACzC;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC;AACD,WAAO,SAAS,UAAU;AAAA,EAC5B,SAAS,OAAO;AAEd,YAAQ,IAAIG,OAAM,KAAK,qCAAqC,CAAC;AAC7D,WAAO;AAAA,EACT;AACF;AASA,eAAe,8BACb,gBACA,aAC8C;AAC9C,MAAI,CAAC,eAAgB,QAAO;AAE5B,MAAI;AAEF,QAAI,SAAS;AACb,UAAM,QAAQ;AAEd,WAAO,MAAM;AACX,YAAM,WAAW,MAAM,IAAI,eAAe,EAAE,OAAO,OAAO,CAAC;AAE3D,iBAAW,MAAM,SAAS,YAAY;AAEpC,YAAI,GAAG,oBAAoB,gBAAgB;AACzC,cAAI,aAAa;AACf,gBAAI,GAAG,iBAAiB,aAAa;AACnC,qBAAO,EAAE,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK;AAAA,YACpC;AAAA,UACF,OAAO;AAEL,mBAAO,EAAE,IAAI,GAAG,IAAI,MAAM,GAAG,KAAK;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,SAAS,SAAU;AACxB,gBAAU;AAAA,IACZ;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,UAA0B;AAEtD,MAAI;AACF,UAAM,gBAAgB,KAAK,KAAK,UAAU,QAAQ,QAAQ;AAC1D,QAAI,GAAG,WAAW,aAAa,GAAG;AAChC,YAAM,YAAY,GAAG,aAAa,eAAe,OAAO;AACxD,YAAM,WAAW,UAAU,MAAM,YAAY;AAC7C,UAAI,UAAU;AAEZ,eAAOC,YAAW,QAAQ,EAAE,OAAO,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,EAAE,UAAU,GAAG,EAAE;AAAA,MACtF;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,SAAOA,YAAW,QAAQ,EAAE,OAAO,KAAK,QAAQ,QAAQ,CAAC,EAAE,OAAO,KAAK,EAAE,UAAU,GAAG,EAAE;AAC1F;AAEA,eAAsB,YACpB,SACA,SACe;AACf,QAAM,MAAM,QAAQ,IAAI;AAGxB,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ,IAAID,OAAM,OAAO,8CAA8C,CAAC;AACxE,YAAQ,IAAIA,OAAM,KAAK,oCAAoC,CAAC;AAC5D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,OAAO,WAAW,gBAAgB;AACxC,MAAI,CAAC,MAAM;AACT,YAAQ,IAAIA,OAAM,IAAI,iCAAiC,CAAC;AACxD,YAAQ;AAAA,MACNA,OAAM,KAAK,sEAAsE;AAAA,IACnF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,CAAC,GAAG,WAAW,IAAI,GAAG;AACxB,YAAQ,IAAIA,OAAM,IAAI,mBAAmB,IAAI,EAAE,CAAC;AAChD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,GAAG,aAAa,MAAM,OAAO;AAC7C,QAAM,WAAW,KAAK,SAAS,IAAI;AAGnC,QAAM,SAAS,MAAM,oBAAoB,KAAK,IAAI;AAElD,MAAI,QAAQ;AAEV,UAAM,gBAAgB,KAAK,MAAM,OAAO,IAAI,SAAS,SAAS,OAAO,QAAQ;AAAA,EAC/E,OAAO;AAEL,UAAM,sBAAsB,KAAK,MAAM,UAAU,SAAS,OAAO;AAAA,EACnE;AACF;AAEA,eAAe,gBACb,KACA,MACA,aACA,SACA,SACA,kBACe;AACf,UAAQ,IAAIA,OAAM,KAAK;AAAA,+BAA2BA,OAAM,KAAK,WAAW,CAAC,KAAK,CAAC;AAC/E,UAAQ,IAAIA,OAAM,KAAK,YAAY,IAAI,EAAE,CAAC;AAE1C,QAAM,UAAUE,KAAI,oBAAoB,EAAE,MAAM;AAEhD,MAAI;AACF,UAAM,aAA8D,EAAE,QAAQ;AAG9E,QAAI,oBAAoB,CAAC,QAAQ,OAAO;AACtC,iBAAW,oBAAoB;AAAA,IACjC;AAEA,UAAM,SAAS,MAAM,IAAI,gBAAgB,aAAa,UAAU;AAChE,YAAQ,QAAQ,oBAAoB;AAGpC,UAAM,eAAe,KAAK,MAAM,OAAO;AAEvC,YAAQ,IAAI;AACZ,YAAQ,IAAIF,OAAM,MAAM,+BAA0BA,OAAM,KAAK,OAAO,UAAU,IAAI,CAAC,EAAE,CAAC;AACtF,YAAQ,IAAIA,OAAM,KAAK,UAAU,WAAW,EAAE,CAAC;AAC/C,QAAI,OAAO,UAAU,kBAAkB;AACrC,cAAQ,IAAIA,OAAM,KAAK,gBAAgB,OAAO,UAAU,gBAAgB,EAAE,CAAC;AAAA,IAC7E;AACA,YAAQ,IAAIA,OAAM,KAAK,6CAA6C,YAAY,QAAQ,OAAO,EAAE,CAAC,EAAE,CAAC;AAAA,EACvG,SAAS,OAAO;AACd,YAAQ,KAAK,4BAA4B;AAGzC,QAAI,iBAAiB,mBAAmB,MAAM,eAAe,KAAK;AAChE,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,OAAO,4EAAuE,CAAC;AACjG,cAAQ,IAAIA,OAAM,KAAK,yCAAyC,CAAC;AACjE,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,UAAU,CAAC;AAClC,cAAQ,IAAIA,OAAM,KAAK,0BAA0B,cAAc,6BAA6B,CAAC;AAC7F,cAAQ,IAAIA,OAAM,KAAK,2DAA2D,CAAC;AACnF,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,gBAAY,KAAK;AAAA,EACnB;AACF;AAEA,eAAe,sBACb,KACA,MACA,UACA,SACA,SACe;AAEf,QAAM,aAAa,aAAa;AAEhC,MAAI,YAAY;AACd,UAAM,kBAAkB,kBAAkB,GAAG;AAG7C,QAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,mBAAY,gBAAgB,MAAM,mBAAmB,CAAC;AAC7E,cAAQ,IAAI;AACZ,iBAAW,KAAK,iBAAiB;AAC/B,cAAM,OAAO,EAAE,SAAS,cAAO;AAC/B,gBAAQ,IAAIA,OAAM,KAAK,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;AAAA,MAChD;AACA,cAAQ,IAAI;AAEZ,UAAI,wBAAwB,QAAQ;AAEpC,UAAI,CAAC,QAAQ,KAAK;AAChB,cAAM,EAAE,gBAAgB,IAAI,MAAMG,SAAQ;AAAA,UACxC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,+BAA+B,gBAAgB,MAAM;AAAA,UAC9D,SAAS;AAAA,QACX,CAAC;AACD,gCAAwB;AAAA,MAC1B,OAAO;AACL,gBAAQ,IAAIH,OAAM,KAAK,gCAAgC,gBAAgB,MAAM,WAAW,CAAC;AAAA,MAC3F;AAEA,UAAI,uBAAuB;AACzB,cAAM,cAAc,KAAK,iBAAiB,OAAO;AACjD;AAAA,MACF;AAEA,cAAQ,IAAIA,OAAM,KAAK,qCAAqC,CAAC;AAAA,IAC/D;AAAA,EACF;AAGA,QAAM,eAAe,mBAAmB,IAAI;AAC5C,QAAM,gBAAgB;AAAA,IACpB;AAAA,IAAkB;AAAA,IAAkB;AAAA,IACpC;AAAA,IAAkB;AAAA,IAAmB;AAAA,EACvC;AACA,QAAM,gBAAgB,cAAc,SAAS,YAAY;AAGzD,QAAM,eAAuC;AAAA,IAC3C,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,EACtB;AAEA,UAAQ,IAAIA,OAAM,KAAK,gCAAyB,CAAC;AACjD,UAAQ,IAAIA,OAAM,KAAK,YAAY,IAAI,EAAE,CAAC;AAC1C,MAAI,eAAe;AACjB,YAAQ,IAAIA,OAAM,QAAQ,YAAY,aAAa,YAAY,KAAK,SAAS,UAAU,CAAC;AAAA,EAC1F,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,YAAY,aAAa,QAAQ,MAAM,GAAG,CAAC,EAAE,CAAC;AAAA,EACvE;AAGA,MAAI,OAAO,QAAQ;AACnB,MAAI,cAAc,QAAQ;AAC1B,MAAI,aAAa,QAAQ,cAAc;AACvC,MAAI,OAAO,QAAQ,OAAO,QAAQ,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;AAE1E,MAAI,CAAC,QAAQ,KAAK;AAChB,UAAM,YAAY,MAAMG,SAAQ;AAAA,MAC9B;AAAA,QACE,MAAM,OAAO,OAAO;AAAA,QACpB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,SAAS,QAAQ,6BAA6B,EAAE;AAAA,QACzD,UAAU,CAAC,MAAM,EAAE,SAAS,KAAK;AAAA,MACnC;AAAA,MACA;AAAA,QACE,MAAM,cAAc,OAAO;AAAA,QAC3B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP,EAAE,OAAO,sBAAsB,OAAO,UAAU;AAAA,UAChD,EAAE,OAAO,4BAA4B,OAAO,OAAO;AAAA,UACnD,EAAE,OAAO,gCAAgC,OAAO,SAAS;AAAA,QAC3D;AAAA,QACA,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAED,QAAI,CAAC,UAAU,QAAQ,CAAC,MAAM;AAC5B,cAAQ,IAAIH,OAAM,OAAO,iBAAiB,CAAC;AAC3C;AAAA,IACF;AAEA,WAAO,QAAQ,UAAU;AACzB,kBAAc,eAAe,UAAU,eAAe;AACtD,iBAAa,UAAU,cAAc;AACrC,WAAO,UAAU,OAAO,UAAU,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,IAAI;AAAA,EACnG;AAEA,MAAI,CAAC,MAAM;AACT,WAAO,SAAS,QAAQ,6BAA6B,EAAE;AAAA,EACzD;AAGA,QAAM,gBAAgB,MAAM,oBAAoB,KAAK,IAAI;AAGzD,MAAI,cAA6B;AACjC,MAAI,cAAc,gBAAgB;AAChC,kBAAc,MAAM,gBAAgB,KAAK,cAAc,gBAAgB,KAAK,SAAS,GAAG,CAAC;AAAA,EAC3F;AAGA,QAAM,oBAAoB,MAAM;AAAA,IAC9B,cAAc;AAAA,IACd;AAAA,EACF;AAEA,MAAI,mBAAmB;AACrB,YAAQ,IAAIA,OAAM,OAAO;AAAA,mCAAiC,kBAAkB,IAAI,MAAM,kBAAkB,EAAE,uBAAuB,CAAC;AAClI,YAAQ,IAAIA,OAAM,KAAK,iEAAiE,CAAC;AAGzF,UAAM,eAAe,KAAK;AAAA,MACxB,IAAI,kBAAkB;AAAA,MACtB,MAAM,kBAAkB;AAAA,MACxB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,aAAa,eAAe;AAAA,MAC5B,gBAAgB,cAAc,kBAAkB;AAAA,IAClD,CAAC;AAED,UAAM,gBAAgB,KAAK,MAAM,kBAAkB,IAAI,SAAS,OAAO;AACvE;AAAA,EACF;AAEA,QAAM,UAAUE,KAAI,uBAAuB,EAAE,MAAM;AAEnD,MAAI;AACF,UAAM,SAAS,MAAM,IAAI,gBAAgB;AAAA,MACvC;AAAA,MACA,aAAa,eAAe;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA;AAAA;AAAA,MAEN,cAAc;AAAA,MACd,WAAW,cAAc;AAAA,MACzB,iBAAiB,cAAc;AAAA,IACjC,CAAC;AAED,YAAQ,QAAQ,oBAAoB;AAGpC,UAAM,eAAe,KAAK;AAAA,MACxB,IAAI,OAAO,UAAU;AAAA,MACrB,MAAM,OAAO,UAAU;AAAA,MACvB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,aAAa,eAAe;AAAA,MAC5B,gBAAgB,cAAc,kBAAkB;AAAA,IAClD,CAAC;AAED,YAAQ,IAAI;AACZ,UAAM,WAAW,gBAAgB,GAAG,aAAa,YAAY,CAAC,aAAa;AAC3E,YAAQ,IAAIF,OAAM,MAAM,kBAAa,QAAQ,IAAIA,OAAM,KAAK,OAAO,UAAU,IAAI,CAAC,EAAE,CAAC;AACrF,YAAQ,IAAIA,OAAM,KAAK,UAAU,OAAO,UAAU,EAAE,EAAE,CAAC;AACvD,YAAQ,IAAIA,OAAM,KAAK,YAAY,YAAY,EAAE,CAAC;AAClD,YAAQ,IAAIA,OAAM,KAAK,kBAAkB,UAAU,EAAE,CAAC;AACtD,QAAI,cAAc,gBAAgB;AAChC,cAAQ,IAAIA,OAAM,KAAK,YAAY,cAAc,cAAc,EAAE,CAAC;AAAA,IACpE;AACA,QAAI,OAAO,UAAU,cAAc;AACjC,cAAQ,IAAIA,OAAM,KAAK,iBAAiB,OAAO,UAAU,YAAY,EAAE,CAAC;AAAA,IAC1E;AACA,QAAI,cAAc,UAAU;AAC1B,cAAQ,IAAIA,OAAM,KAAK,yCAAoC,cAAc,QAAQ,EAAE,CAAC;AAAA,IACtF;AACA,QAAI,eAAe,UAAU;AAC3B,cAAQ,IAAIA,OAAM,KAAK,6CAA6C,OAAO,UAAU,GAAG,QAAQ,OAAO,EAAE,CAAC,EAAE,CAAC;AAAA,IAC/G;AACA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,yEAAyE,CAAC;AAAA,EACnG,SAAS,OAAO;AACd,YAAQ,KAAK,4BAA4B;AACzC,gBAAY,KAAK;AAAA,EACnB;AACF;AAKA,eAAe,cACb,KACA,OACA,SACe;AAEf,MAAI,gBAAgB,QAAQ,QAAQ,KAAK,SAAS,GAAG;AACrD,MAAI,aAAa,QAAQ,cAAc;AAEvC,MAAI,CAAC,QAAQ,KAAK;AAChB,UAAM,YAAY,MAAMG,SAAQ;AAAA,MAC9B;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU,CAAC,MAAM,EAAE,SAAS,KAAK;AAAA,MACnC;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP,EAAE,OAAO,sBAAsB,OAAO,UAAU;AAAA,UAChD,EAAE,OAAO,4BAA4B,OAAO,OAAO;AAAA,UACnD,EAAE,OAAO,gCAAgC,OAAO,SAAS;AAAA,QAC3D;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAED,QAAI,CAAC,UAAU,MAAM;AACnB,cAAQ,IAAIH,OAAM,OAAO,iBAAiB,CAAC;AAC3C;AAAA,IACF;AAEA,oBAAgB,UAAU;AAC1B,iBAAa,UAAU,cAAc;AAAA,EACvC;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,iCAA0B,aAAa,UAAU,MAAM,MAAM,WAAW,CAAC;AAChG,UAAQ,IAAI;AAGZ,QAAM,iBAAiB,qBAAqB,GAAG;AAG/C,MAAI;AACJ,MAAI;AACF,UAAM,oBAAoB,MAAM,IAAI,gBAAgB;AAAA,MAClD,MAAM;AAAA,MACN,iBAAiB;AAAA,IACnB,CAAC;AACD,kBAAc,kBAAkB,UAAU;AAC1C,YAAQ,IAAIA,OAAM,MAAM,6BAAwB,WAAW,EAAE,CAAC;AAAA,EAChE,SAAS,OAAO;AACd,YAAQ,IAAIA,OAAM,IAAI,4BAA4B,CAAC;AACnD,gBAAY,KAAK;AACjB;AAAA,EACF;AAGA,MAAI,kBAAiC;AACrC,MAAI,eAAe;AACnB,MAAI,YAAY;AAEhB,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAUE,KAAI,aAAa,KAAK,IAAI,KAAK,EAAE,MAAM;AAEvD,QAAI;AACF,YAAM,UAAU,GAAG,aAAa,KAAK,cAAc,OAAO;AAG1D,UAAI;AACJ,UAAI,KAAK,QAAQ;AACf,wBAAgB;AAAA,MAClB,OAAO;AAEL,cAAME,WAAU,KAAK,QAAQ,KAAK,IAAI;AACtC,wBAAgBA,SAAQ,QAAQ,UAAU,KAAK;AAAA,MACjD;AAEA,YAAM,SAAS,MAAM,IAAI,gBAAgB;AAAA,QACvC,MAAM;AAAA,QACN,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM,CAAC;AAAA,QACP,cAAc;AAAA,QACd,WAAW,KAAK,SAAS,OAAO;AAAA,QAChC,iBAAiB,KAAK;AAAA,MACxB,CAAC;AAGD,UAAI,KAAK,QAAQ;AACf,0BAAkB,OAAO,UAAU;AAAA,MACrC;AAGA,YAAM,eAAe,KAAK;AAAA,QACxB,IAAI,OAAO,UAAU;AAAA,QACrB,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,gBAAgB,KAAK;AAAA,MACvB,CAAC;AAED,cAAQ,QAAQ,GAAG,KAAK,IAAI,WAAM,OAAO,UAAU,EAAE,EAAE;AACvD;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,GAAG,KAAK,IAAI,SAAS;AAClC,UAAI,iBAAiB,iBAAiB;AACpC,gBAAQ,IAAIJ,OAAM,IAAI,aAAa,MAAM,OAAO,EAAE,CAAC;AAAA,MACrD;AACA;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,MAAM,wCAAmC,CAAC;AAC5D,UAAQ,IAAIA,OAAM,KAAK,iBAAiB,WAAW,EAAE,CAAC;AACtD,UAAQ,IAAIA,OAAM,KAAK,YAAY,aAAa,EAAE,CAAC;AACnD,UAAQ,IAAIA,OAAM,KAAK,kBAAkB,YAAY,YAAY,YAAY,IAAI,KAAK,SAAS,YAAY,EAAE,EAAE,CAAC;AAChH,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,OAAO,CAAC;AAC/B,UAAQ,IAAIA,OAAM,KAAK,2DAAsD,CAAC;AAC9E,UAAQ,IAAIA,OAAM,KAAK,4BAAuB,WAAW,oCAAoC,CAAC;AAC9F,UAAQ,IAAIA,OAAM,KAAK,4EAAuE,CAAC;AAC/F,UAAQ,IAAI;AACd;AAEA,SAAS,kBAAiC;AACxC,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,aAAa,YAAY;AAClC,QAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAMA,SAAS,mBAAmB,UAA0B;AACpD,QAAM,iBAAiB,SAAS,QAAQ,OAAO,GAAG;AAGlD,QAAM,cAAc,yBAAyB,QAAQ;AACrD,MAAI,aAAa;AACf,WAAO,YAAY;AAAA,EACrB;AAGA,MAAI,eAAe,SAAS,gBAAgB,EAAG,QAAO;AACtD,MAAI,eAAe,SAAS,WAAW,EAAG,QAAO;AACjD,MAAI,eAAe,SAAS,gBAAgB,EAAG,QAAO;AACtD,MAAI,eAAe,SAAS,aAAa,EAAG,QAAO;AACnD,MAAI,eAAe,SAAS,iCAAiC,EAAG,QAAO;AACvE,MAAI,eAAe,SAAS,WAAW,EAAG,QAAO;AACjD,MAAI,eAAe,SAAS,UAAU,EAAG,QAAO;AAChD,MAAI,eAAe,SAAS,WAAW,EAAG,QAAO;AAGjD,MAAI,eAAe,SAAS,KAAK,EAAG,QAAO;AAE3C,SAAO;AACT;AAEA,SAAS,YAAY,OAAsB;AACzC,MAAI,iBAAiB,iBAAiB;AACpC,YAAQ,MAAMA,OAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAClD,QAAI,MAAM,eAAe,KAAK;AAC5B,cAAQ,MAAMA,OAAM,KAAK,sEAAsE,CAAC;AAAA,IAClG,WAAW,MAAM,eAAe,KAAK;AACnC,cAAQ,MAAMA,OAAM,KAAK,qDAAqD,CAAC;AAAA,IACjF,WAAW,MAAM,eAAe,KAAK;AACnC,cAAQ,MAAMA,OAAM,KAAK,gDAAgD,CAAC;AAAA,IAC5E;AAAA,EACF,OAAO;AACL,YAAQ,MAAMA,OAAM,IAAI,+BAA+B,CAAC;AAAA,EAC1D;AACA,UAAQ,KAAK,CAAC;AAChB;;;AErtBA,OAAOK,YAAW;AAClB,OAAOC,cAAa;AACpB,OAAOC,UAAS;AAChB,YAAY,cAAc;AAC1B,YAAY,QAAQ;AACpB,SAAS,aAAAC,YAAW,SAAAC,QAAO,UAAAC,SAAQ,YAAAC,iBAAgB;AACnD,SAAS,QAAAC,OAAM,WAAAC,gBAAe;;;AC6G9B,SAAS,MAAM,eAAwB,SAAiB,cAA8B;AACpF,MAAI,CAAC,iBAAiB,CAAC,aAAc,QAAO;AAC5C,SAAO,KAAK,OAAO,IAAI,YAAY;AACrC;AAOO,SAAS,cAAc,SAAiB,WAA2C;AAExF,SAAO,QAAQ,QAAQ,gCAAgC,CAAC,GAAG,SAAS,iBAAiB;AACnF,WAAO,UAAU,OAAO,KAAK;AAAA,EAC/B,CAAC;AACH;AAMO,SAAS,qBAAqB,SAAyC;AAC5E,QAAM,YAAoC,CAAC;AAE3C,MAAI,CAAC,QAAS,QAAO;AAGrB,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAE/B,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,QAAQ,GAAG;AAChC,QAAI,UAAU,GAAG;AACf,YAAM,MAAM,KAAK,MAAM,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY;AACtD,YAAM,QAAQ,KAAK,MAAM,UAAU,CAAC,EAAE,KAAK;AAC3C,gBAAU,GAAG,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAIA,IAAM,iBAAyC;AAAA;AAAA,EAE7C,WAAW;AAAA,EACX,QAAQ;AAAA;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA;AAAA,EAGV,aAAa;AAAA,EACb,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA;AAAA,EAGV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA;AAAA,EAGN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,UAAU;AAAA;AAAA,EAGV,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AACd;AAGA,IAAM,uBAA+C;AAAA,EACnD,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AACZ;AAGA,IAAM,cAAsC;AAAA,EAC1C,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAGA,IAAM,sBAA8C;AAAA,EAClD,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,cAAc;AAChB;AAGA,IAAM,2BAAmD;AAAA,EACvD,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA;AAAA,EAEb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,kBAAkB;AACpB;AAGA,IAAM,wBAAgD;AAAA,EACpD,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AAAA,EACX,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,iBAAiB;AAAA;AAAA,EAEjB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc;AAChB;AAGA,IAAM,aAAwF;AAAA,EAC5F,cAAc;AAAA,IACZ,QAAQ,CAAC,gCAAgC,8BAA8B;AAAA,IACvE,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,0BAAkD;AAAA,EACtD,OAAO;AAAA,EACP,MAAM;AAAA,EACN,aAAa;AAAA,EACb,KAAK;AACP;AAGA,IAAM,wBAA8E;AAAA,EAClF,cAAc,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBpB,cAAc,CAAC,SAAS,qBAAqB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQhC,KAAK,sBAAsB,uCAAuC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAQ/C,KAAK,IAAI;AAAA,KACjD,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaZ,eAAe,CAAC,SAAS;AAAA;AAAA;AAAA;AAAA,yCAIc,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBhD,UAAU,CAAC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAUwB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrD,SAAS,CAAC,SAAS;AAAA;AAAA,KAEhB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBZ,WAAW,CAAC,SAAS;AACnB,UAAM,WAAW,CAAC,kBAAkB,iBAAiB,gBAAgB,EAAE;AACvE,QAAI,KAAK,MAAM,SAAS,QAAQ,GAAG;AACjC,eAAS,KAAK,YAAY,gBAAgB,aAAa,UAAU,SAAS,EAAE;AAAA,IAC9E;AACA,aAAS,KAAK,iBAAiB,QAAQ,cAAc,eAAe,EAAE;AACtE,aAAS,KAAK,mBAAmB,SAAS,UAAU,UAAU,QAAQ,EAAE;AACxE,aAAS,KAAK,SAAS,UAAU,YAAY,SAAS,SAAS,EAAE;AACjE,aAAS,KAAK,QAAQ,aAAa,aAAa,EAAE;AAClD,aAAS,KAAK,UAAU,SAAS,kBAAkB,EAAE;AACrD,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EACA,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQf,SAAS,CAAC,SAAS;AACjB,QAAI,KAAK,YAAY,OAAO;AAC1B,aAAO;AAAA;AAAA,iBAEG,oBAAI,KAAK,GAAE,YAAY,CAAC,IAAI,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBjD;AACA,WAAO;AAAA;AAAA,qCAE0B,KAAK,SAAS,YAAY,KAAK,aAAa;AAAA;AAAA,EAE/E;AAAA,EACA,QAAQ,CAAC,SAAS;AAChB,UAAM,cAAc,KAAK,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,UAAK;AACnF,WAAO,KAAK,KAAK,IAAI;AAAA;AAAA,EAEvB,KAAK,eAAe,sCAAsC;AAAA;AAAA,EAE1D,cAAc;AAAA;AAAA,EAAoB,WAAW;AAAA,IAAO,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMnD,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWZ,KAAK,WAAW,KAAK,YAAY,SAAS,sCAAsC,KAAK,QAAQ,YAAY,CAAC,cAAc,+BAA+B;AAAA;AAAA,EAEvJ;AAAA,EACA,cAAc,CAAC,SAAS;AAAA;AAAA,KAErB,KAAK,IAAI;AAAA;AAAA,EAEZ,KAAK,eAAe,gBAAgB,KAAK,YAAY;AAAA,IAAO,EAAE;AAAA;AAAA;AAAA;AAAA,EAI9D,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBT,WAAW,CAAC,SAAS;AAAA;AAAA,yBAEE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBlC;AAGA,IAAM,oBAA4C;AAAA,EAChD,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AACb;AAEO,SAAS,eAAe,SAAkD;AAC/E,QAAM,QAAgC,CAAC;AAGvC,aAAWC,aAAY,QAAQ,WAAW;AACxC,UAAM,WAAW,eAAeA,SAAQ;AACxC,QAAI,UAAU;AACZ,YAAM,QAAQ,IAAI,oBAAoB,SAASA,SAAQ;AAAA,IACzD;AAAA,EACF;AAGA,QAAM,yBAAyB,QAAQ,uBAAuB;AAE9D,MAAI,QAAQ,eAAe,QAAQ,YAAY,SAAS,KAAK,wBAAwB;AACnF,eAAW,WAAW,QAAQ,aAAa;AACzC,YAAM,WAAW,kBAAkB,OAAO;AAC1C,UAAI,CAAC,SAAU;AAGf,UAAI,QAAQ,qBAAqB,OAAO,GAAG;AACzC,cAAM,QAAQ,IAAI,QAAQ,mBAAmB,OAAO;AAAA,MACtD,OAAO;AACL,cAAM,aAAa,sBAAsB,OAAO;AAChD,YAAI,YAAY;AACd,gBAAM,QAAQ,IAAI,WAAW,OAAO;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,kBAAkB,CAAC,QAAQ,aAAa,SAAS,SAAS,KAAK,wBAAwB;AACjG,UAAM,qBAAqB,IAAI,sBAAsB,QAAQ,OAAO;AAAA,EACtE;AAGA,MAAI,QAAQ,aAAa,OAAO,KAAK,QAAQ,SAAS,EAAE,SAAS,GAAG;AAClE,eAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG;AACvD,YAAM,QAAQ,IAAI,cAAc,SAAS,QAAQ,SAAS;AAAA,IAC5D;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,SAA0BA,WAA0B;AAC/E,QAAM,WAAqB,CAAC;AAG5B,QAAM,eAAe,CAAC,UAAU,QAAQ,YAAY,WAAW,WAAW,YAAY,MAAM;AAC5F,QAAM,gBAAgB,CAAC,SAAS,SAAS;AACzC,QAAM,qBAAqB,CAAC,YAAY,SAAS,OAAO;AACxD,QAAM,gBAAgB,CAAC,QAAQ,YAAY,QAAQ,cAAc,WAAW,YAAY,YAAY;AAEpG,QAAM,QAAQ,aAAa,SAASA,SAAQ;AAC5C,QAAM,SAAS,cAAc,SAASA,SAAQ;AAC9C,QAAM,cAAc,mBAAmB,SAASA,SAAQ;AACxD,QAAM,SAAS,cAAc,SAASA,SAAQ;AAC9C,QAAM,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC;AACzD,QAAM,KAAK,QAAQ,iBAAiB;AAGpC,MAAI,QAAQ;AACV,WAAO,mBAAmB,SAASA,SAAQ;AAAA,EAC7C;AAGA,MAAI,QAAQ;AACV,WAAO,mBAAmB,SAASA,SAAQ;AAAA,EAC7C;AAGA,QAAM,cAAc,MAAM,IAAI,gBAAgB,QAAQ,IAAI;AAC1D,QAAM,WAAW,MAAM,IAAI,aAAa,QAAQ,YAAY,EAAE;AAC9D,QAAM,UAAU,MAAM,IAAI,WAAW,QAAQ,WAAW,EAAE;AAC1D,QAAM,aAAa,MAAM,IAAI,eAAe,QAAQ,YAAY,EAAE;AAClE,QAAM,cAAc,MAAM,IAAI,gBAAgB,QAAQ,aAAa,EAAE;AACrE,QAAM,eAAe,MAAM,IAAI,gBAAgB,QAAQ,gBAAgB,EAAE;AACzE,QAAM,OAAO,MAAM,IAAI,SAAS,QAAQ,QAAQ,EAAE;AAGlD,MAAI,OAAO;AACT,aAAS,KAAK,KAAK;AACnB,aAAS,KAAK,iBAAiB,WAAW,qBAAqB;AAC/D,aAAS,KAAK,iBAAiB;AAC/B,aAAS,KAAK,mBAAmB;AACjC,aAAS,KAAK,KAAK;AACnB,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,KAAK,WAAW,+BAA+B;AAC7D,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,YAAY;AACd,aAAS,KAAK,KAAK,WAAW,+BAA+B;AAC7D,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,oBAAoB,cAAc,QAAQ;AACpD,aAAS,KAAK,oCAAoC;AAClD,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,mGAAmG;AACjH,aAAS,KAAK,gHAAgH;AAC9H,aAAS,KAAK,iEAAiE;AAC/E,aAAS,KAAK,qFAAqF;AACnG,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,oBAAoB,QAAQ,gBAAgB,cAAc,QAAQ;AAC5E,UAAM,OAAO,QAAQ,YAAY,WAAW,KAAK,IAAI,QAAQ,cAAc,MAAM,QAAQ,WAAW;AACpG,UAAM,YAAY,QAAQ,kBAAkB;AAC5C,UAAM,cAAc,QAAQ,eAAe;AAE3C,aAAS,KAAK,MAAM;AACpB,aAAS,KAAK,mDAAmD,IAAI,GAAG;AACxE,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,gBAAgB;AAE9B,QAAI,WAAW;AAEb,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,uCAAuC;AACrD,eAAS,KAAK,+CAA+C;AAC7D,eAAS,KAAK,iDAAiD;AAC/D,eAAS,KAAK,iDAAiD;AAC/D,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,0CAA0C;AACxD,eAAS,KAAK,sBAAsB;AAAA,IACtC,OAAO;AAEL,YAAM,WAAWA,cAAa,WAAW,6BAA6B;AACtE,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,4DAA4D,WAAW,IAAI;AACzF,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,gCAAgC;AAC9C,eAAS,KAAK,6DAA6D,IAAI,MAAM;AACrF,eAAS,KAAK,gCAAgC,WAAW,MAAM;AAC/D,eAAS,KAAK,0CAA0C;AACxD,eAAS,KAAK,kCAAkC,QAAQ,mBAAmB;AAC3E,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,gCAAgC;AAC9C,eAAS,KAAK,yDAAyD,IAAI,MAAM;AACjF,eAAS,KAAK,gCAAgC,WAAW,0BAA0B,QAAQ,EAAE;AAC7F,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,4BAA4B,WAAW,oBAAoB;AACzE,eAAS,KAAK,sDAAsD;AAAA,IACtE;AAEA,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,uCAAuC;AACrD,aAAS,KAAK,KAAK;AACnB,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,aAAa;AACvB,UAAM,eAAuC;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AACA,QAAI,aAAa,QAAQ,WAAW,GAAG;AACrC,UAAI,cAAc,OAAO;AACvB,iBAAS,KAAK,0BAA0B,aAAa,QAAQ,WAAW,CAAC,EAAE;AAC3E,iBAAS,KAAK,EAAE;AAAA,MAClB,OAAO;AACL,iBAAS,KAAK,oBAAoB,aAAa,QAAQ,WAAW,CAAC,EAAE;AACrE,iBAAS,KAAK,EAAE;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAIA,QAAM,cAAc,QAAQ,eACvB,qBAAqB,QAAQ,OAAO,KACpC,QAAQ,WACR;AACL,QAAM,cAAc,MAAM,IAAI,uBAAuB,QAAQ,eAAe,EAAE;AAE9E,MAAI,cAAc,OAAO;AACvB,aAAS,KAAK,YAAY;AAC1B,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,oCAAoC,WAAW,GAAG;AAChE,QAAI,aAAa;AACf,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,yBAAyB,WAAW,sEAAsE;AAAA,IAC1H;AAAA,EACF,OAAO;AACL,aAAS,KAAK,oCAAoC,WAAW,GAAG;AAChE,QAAI,aAAa;AACf,eAAS,KAAK,yBAAyB,WAAW,sEAAsE;AAAA,IAC1H;AAAA,EACF;AAEA,MAAI,QAAQ,aAAa;AACvB,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,wBAAwB,WAAW,EAAE;AAAA,EACrD;AACA,WAAS,KAAK,EAAE;AAGhB,MAAI,QAAQ,MAAM,SAAS,KAAK,QAAQ,qBAAqB;AAC3D,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,eAAe;AAC7B,eAAS,KAAK,EAAE;AAAA,IAClB,OAAO;AACL,eAAS,KAAK,aAAa;AAAA,IAC7B;AAEA,UAAM,YAAY,QAAQ,MAAM,IAAI,OAAK,YAAY,CAAC,KAAK,CAAC;AAC5D,QAAI,cAAc,OAAO;AACvB,iBAAW,QAAQ,WAAW;AAC5B,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AAEA,UAAI,QAAQ,qBAAqB;AAC/B,cAAM,OAAO,QAAQ,oBAAoB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AACrF,mBAAW,OAAO,MAAM;AACtB,mBAAS,KAAK,KAAK,GAAG,EAAE;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,UAAU,CAAC,GAAG,SAAS;AAC7B,UAAI,QAAQ,qBAAqB;AAC/B,cAAM,OAAO,QAAQ,oBAAoB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AACrF,gBAAQ,KAAK,GAAG,IAAI;AAAA,MACtB;AACA,eAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,IAClC;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,aAAa;AACvB,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,gHAAgH;AAC9H,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,MAAI,QAAQ,YAAY,QAAQ,WAAW,QAAQ,uBAAuB,QAAQ,UAC9E,QAAQ,QAAQ,QAAQ,mBAAmB,UAAU,QAAQ,kBAC7D,QAAQ,kBAAkB,QAAQ,kBAAkB;AACtD,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,gCAAgC;AAC9C,eAAS,KAAK,EAAE;AAChB,UAAI,QAAQ,UAAU;AACpB,iBAAS,KAAK,eAAe,YAAY,QAAQ,SAAS,OAAO,CAAC,EAAE,YAAY,IAAI,QAAQ,SAAS,MAAM,CAAC,CAAC,EAAE;AAAA,MACjH;AACA,UAAI,QAAQ,WAAW,QAAQ,YAAY,QAAQ;AACjD,iBAAS,KAAK,kBAAkB,WAAW,QAAQ,QAAQ,YAAY,CAAC,EAAE;AAAA,MAC5E;AACA,UAAI,QAAQ,cAAc;AACxB,cAAM,YAAoC;AAAA,UACxC,UAAU;AAAA,UACV,kBAAkB;AAAA,UAClB,eAAe;AAAA,UACf,oBAAoB;AAAA,UACpB,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,UACX,OAAO;AAAA,UACP,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,UACL,iBAAiB;AAAA,UACjB,QAAQ;AAAA,QACV;AACA,cAAM,cAAc,UAAU,QAAQ,YAAY,KAAK,gBAAgB,QAAQ;AAC/E,iBAAS,KAAK,uBAAuB,WAAW,EAAE;AAAA,MACpD;AACA,UAAI,QAAQ,MAAM;AAChB,iBAAS,KAAK,gBAAgB,QAAQ,QAAQ,IAAI,EAAE;AAAA,MACtD;AACA,UAAI,QAAQ,qBAAqB;AAC/B,iBAAS,KAAK,sFAAsF;AAAA,MACtG;AACA,UAAI,QAAQ,QAAQ;AAClB,iBAAS,KAAK,6EAA6E;AAAA,MAC7F;AAEA,UAAI,QAAQ,MAAM;AAChB,cAAM,YAAoC;AAAA,UACxC,gBAAgB;AAAA,UAChB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,WAAW;AAAA,UACX,UAAU;AAAA,UACV,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AACA,iBAAS,KAAK,gBAAgB,UAAU,QAAQ,IAAI,KAAK,QAAQ,IAAI,EAAE;AAAA,MACzE;AACA,UAAI,QAAQ,qBAAqB,QAAQ,kBAAkB,SAAS,GAAG;AACrE,cAAM,cAAsC;AAAA,UAC1C,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,SAAS;AAAA,UACT,KAAK;AAAA,UACL,YAAY;AAAA,QACd;AACA,cAAM,UAAU,QAAQ,kBAAkB,IAAI,OAAK,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI;AACjF,iBAAS,KAAK,qBAAqB,OAAO,EAAE;AAAA,MAC9C;AACA,UAAI,QAAQ,gBAAgB;AAC1B,YAAI,gBAAgB;AACpB,YAAI,QAAQ,mBAAmB;AAC7B,gBAAM,gBAAwC;AAAA,YAC5C,WAAW;AAAA,YACX,MAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,QAAQ;AAAA,UACV;AACA,2BAAiB,WAAM,cAAc,QAAQ,iBAAiB,KAAK,QAAQ,iBAAiB;AAAA,QAC9F;AACA,iBAAS,KAAK,qBAAqB,aAAa,EAAE;AAAA,MACpD;AAEA,UAAI,QAAQ,kBAAkB;AAC5B,cAAM,SAAS,QAAQ,iBAAiB,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AACpF,YAAI,OAAO,SAAS,GAAG;AACrB,mBAAS,KAAK,sBAAsB;AACpC,qBAAW,OAAO,QAAQ;AACxB,qBAAS,KAAK,SAAS,GAAG,IAAI;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AACA,UAAI,QAAQ,gBAAgB;AAC1B,iBAAS,KAAK,uBAAuB,QAAQ,cAAc,yCAAyC;AAAA,MACtG;AACA,UAAI,QAAQ,kBAAkB;AAC5B,iBAAS,KAAK,wBAAwB,QAAQ,gBAAgB,EAAE;AAAA,MAClE;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,cAAc,QAAQ,YAAY,OAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAAK,OAC3E,MAAM,QAAQ,CAAC,IAAI,EAAE,SAAS,IAAI,QAAQ,CAAC;AAAA,EAC7C;AACA,MAAI,aAAa;AACf,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,aAAa;AAC3B,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,sCAAsC;AACpD,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,SAAS;AAAA,IACzB,OAAO;AACL,eAAS,KAAK,WAAW;AAAA,IAC3B;AAEA,UAAM,gBAAgB,CAAC,SAAS,QAAQ,QAAQ,OAAO,QAAQ;AAC/D,eAAW,OAAO,eAAe;AAC/B,YAAM,MAAM,QAAQ,SAAS,GAAG;AAChC,UAAI,KAAK;AACP,cAAM,OAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;AAC5C,mBAAW,KAAK,MAAM;AACpB,cAAI,GAAG;AACL,kBAAM,QAAQ,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AACvD,qBAAS,KAAM,cAAc,QAAS,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,EAAE;AAAA,UAC/E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,KAAK;AAAA,IACrB;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,cAAc,QAAQ,WAAW,SAAS,GAAG;AACvD,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,sBAAsB;AACpC,eAAS,KAAK,EAAE;AAChB,iBAAW,QAAQ,QAAQ,YAAY;AACrC,cAAM,OAAO,yBAAyB,IAAI;AAC1C,YAAI,MAAM;AACR,mBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,QAC3B;AAAA,MACF;AAEA,UAAI,QAAQ,qBAAqB,QAAQ,sBAAsB,cAAc;AAC3E,cAAM,uBAA+C;AAAA,UACnD,QAAQ;AAAA,UACR,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,OAAO;AAAA,QACT;AACA,YAAI,qBAAqB,QAAQ,iBAAiB,GAAG;AACnD,mBAAS,KAAK,KAAK,qBAAqB,QAAQ,iBAAiB,CAAC,EAAE;AAAA,QACtE;AAAA,MACF;AAEA,UAAI,QAAQ,uBAAuB,MAAM;AACvC,iBAAS,KAAK,uEAAuE;AAAA,MACvF,WAAW,QAAQ,uBAAuB,OAAO;AAC/C,iBAAS,KAAK,mEAAmE;AAAA,MACnF;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,MAAK,cAAc,OAAQ;AACzB,aAAS,KAAK,iBAAiB;AAC/B,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,kEAAkE;AAChF,aAAS,KAAK,mFAAmF;AACjG,aAAS,KAAK,uCAAuC;AACrD,QAAI,QAAQ,oBAAoB;AAC9B,eAAS,KAAK,mGAAmG;AAAA,IACnH,OAAO;AACL,eAAS,KAAK,gDAAgD;AAAA,IAChE;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,YAAY;AACtB,UAAM,UAAU,QAAQ,WAAW,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAC/E,QAAI,QAAQ,SAAS,MAAM,cAAc,QAAQ;AAC/C,eAAS,KAAK,gBAAgB;AAC9B,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,iGAAiG;AAC/G,eAAS,KAAK,EAAE;AAChB,iBAAW,UAAU,SAAS;AAC5B,iBAAS,KAAK,KAAK,MAAM,EAAE;AAAA,MAC7B;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,OAAK,QAAQ,gBAAgB,QAAQ,sBAAsB,cAAc,QAAQ;AAC/E,aAAS,KAAK,mBAAmB;AACjC,aAAS,KAAK,EAAE;AAChB,QAAI,QAAQ,cAAc;AACxB,YAAM,UAAU,QAAQ,aACpB,cAAc,QAAQ,UAAU,OAChC;AACJ,eAAS,KAAK,iCAAiC,OAAO,EAAE;AAAA,IAC1D;AACA,QAAI,QAAQ,oBAAoB,QAAQ,kBAAkB;AACxD,YAAM,UAAkC;AAAA,QACtC,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AACA,eAAS,KAAK,qBAAqB,QAAQ,QAAQ,gBAAgB,KAAK,QAAQ,gBAAgB,EAAE;AAAA,IACpG;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,kBAAkB,QAAQ,eAAe,SAAS,GAAG;AAC/D,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,4BAA4B;AAC1C,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,kEAAkE;AAChF,eAAS,KAAK,EAAE;AAChB,iBAAW,QAAQ,QAAQ,gBAAgB;AACzC,cAAMC,QAAO,sBAAsB,IAAI;AACvC,YAAIA,OAAM;AACR,mBAAS,KAAK,OAAOA,KAAI,IAAI;AAAA,QAC/B;AAAA,MACF;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,MAAI,QAAQ,aAAa;AACvB,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,6BAA6B;AAC3C,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,wKAAwK;AACtL,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,MAAI,QAAQ,qBAAqB;AAC/B,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,oBAAoB;AAClC,eAAS,KAAK,EAAE;AAChB,UAAI,QAAQ,YAAY,QAAQ,aAAa,QAAQ,YAAY,QAAQ,eAAe;AAEtF,cAAM,gBAA0B,CAAC;AACjC,YAAI,QAAQ,UAAU;AACpB,wBAAc,KAAK,eAAe,cAAc,QAAQ,QAAQ,EAAE;AAAA,QACpE;AACA,YAAI,QAAQ,WAAW;AACrB,wBAAc,KAAK,gBAAgB,eAAe,QAAQ,SAAS,EAAE;AAAA,QACvE;AACA,YAAI,QAAQ,UAAU;AACpB,wBAAc,KAAK,eAAe,QAAQ,QAAQ,EAAE;AAAA,QACtD;AACA,YAAI,QAAQ,eAAe;AACzB,wBAAc,KAAK,oBAAoB,QAAQ,aAAa,EAAE;AAAA,QAChE;AACA,iBAAS,KAAK,GAAG,aAAa;AAC9B,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,uEAAuE;AAAA,MACvF,OAAO;AACL,iBAAS,KAAK,yFAAyF;AAAA,MACzG;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAIA,QAAM,mBAAmB,WAAW,QAAQ,UAAU,KAAK,WAAW;AAGtE,QAAM,aAAa;AAAA,IACjB,QAAQ,QAAQ,gBAAgB,SAAS,QAAQ,iBAAiB,iBAAiB;AAAA,IACnF,OAAO,QAAQ,eAAe,SAAS,QAAQ,gBAAgB,iBAAiB;AAAA,IAChF,UAAU,QAAQ,aAAa,SAAS,QAAQ,cAAc,iBAAiB;AAAA,EACjF;AAEA,MAAI,WAAW,QAAQ,UAAU,WAAW,OAAO,UAAU,WAAW,UAAU,QAAQ;AACxF,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,eAAe;AAC7B,eAAS,KAAK,EAAE;AAEhB,eAAS,KAAK,uCAAkC;AAChD,eAAS,KAAK,EAAE;AAChB,iBAAW,QAAQ,WAAW,QAAQ;AACpC,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AACA,eAAS,KAAK,EAAE;AAEhB,eAAS,KAAK,4BAAkB;AAChC,eAAS,KAAK,EAAE;AAChB,iBAAW,QAAQ,WAAW,UAAU;AACtC,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AACA,eAAS,KAAK,EAAE;AAEhB,eAAS,KAAK,qBAAc;AAC5B,eAAS,KAAK,EAAE;AAChB,iBAAW,QAAQ,WAAW,OAAO;AACnC,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AAAA,IACF,OAAO;AACL,eAAS,KAAK,aAAa;AAC3B,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,6BAA6B;AAC3C,iBAAW,QAAQ,WAAW,QAAQ;AACpC,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AACA,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,YAAY;AAC1B,iBAAW,QAAQ,WAAW,UAAU;AACtC,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AACA,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,QAAQ;AACtB,iBAAW,QAAQ,WAAW,OAAO;AACnC,iBAAS,KAAK,KAAK,IAAI,EAAE;AAAA,MAC3B;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,cAAc,OAAO;AACvB,aAAS,KAAK,eAAe;AAC7B,aAAS,KAAK,EAAE;AAGhB,QAAI,QAAQ,kBAAkB;AAC5B,YAAM,aAAa,oBAAoB,QAAQ,gBAAgB;AAC/D,UAAI,YAAY;AACd,iBAAS,KAAK,iBAAiB,UAAU,EAAE;AAAA,MAC7C;AAAA,IACF;AAGA,QAAI,QAAQ,eAAe;AACzB,YAAM,cAAsC;AAAA,QAC1C,WAAW;AAAA,QACX,cAAc;AAAA,QACd,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AACA,UAAI,YAAY,QAAQ,aAAa,GAAG;AACtC,iBAAS,KAAK,iBAAiB,YAAY,QAAQ,aAAa,CAAC,EAAE;AAAA,MACrE;AAAA,IACF;AAGA,QAAI,QAAQ,oBAAoB;AAC9B,YAAM,eAAe,QAAQ,uBAAuB,WAAW,QAAQ,0BACnE,QAAQ,0BACR,QAAQ,mBAAmB,QAAQ,MAAM,GAAG;AAChD,eAAS,KAAK,kBAAkB,YAAY,EAAE;AAAA,IAChD;AAGA,QAAI,QAAQ,YAAY;AACtB,eAAS,KAAK,gBAAgB,QAAQ,UAAU,EAAE;AAAA,IACpD;AAEA,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,2BAA2B;AACzC,aAAS,KAAK,EAAE;AAEhB,QAAI,QAAQ,MAAM,SAAS,YAAY,KAAK,QAAQ,MAAM,SAAS,YAAY,GAAG;AAChF,eAAS,KAAK,6CAA6C;AAC3D,eAAS,KAAK,oCAAoC;AAClD,eAAS,KAAK,qCAAqC;AACnD,eAAS,KAAK,+CAA+C;AAAA,IAC/D;AAEA,QAAI,QAAQ,MAAM,SAAS,OAAO,KAAK,QAAQ,MAAM,SAAS,QAAQ,GAAG;AACvE,eAAS,KAAK,wCAAwC;AACtD,eAAS,KAAK,qCAAqC;AACnD,eAAS,KAAK,qDAAqD;AAAA,IACrE;AAEA,QAAI,QAAQ,MAAM,SAAS,QAAQ,GAAG;AACpC,eAAS,KAAK,iCAAiC;AAC/C,eAAS,KAAK,0CAA0C;AACxD,eAAS,KAAK,0CAA0C;AAAA,IAC1D;AAEA,QAAI,QAAQ,MAAM,SAAS,IAAI,GAAG;AAChC,eAAS,KAAK,yCAAyC;AACvD,eAAS,KAAK,gCAAgC;AAC9C,eAAS,KAAK,4BAA4B;AAAA,IAC5C;AAEA,QAAI,QAAQ,MAAM,SAAS,MAAM,GAAG;AAClC,eAAS,KAAK,oCAAoC;AAClD,eAAS,KAAK,+BAA+B;AAC7C,eAAS,KAAK,4BAA4B;AAAA,IAC5C;AAGA,aAAS,KAAK,+BAA+B;AAC7C,aAAS,KAAK,uCAAuC;AACrD,aAAS,KAAK,uCAAuC;AACrD,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,YAAY,UAAU,QAAQ,gBAAgB,UAAU,QAAQ,gBAAgB;AAC1F,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,qBAAqB;AACnC,eAAS,KAAK,EAAE;AAEhB,UAAI,QAAQ,YAAY,QAAQ;AAC9B,iBAAS,KAAK,iBAAiB;AAC/B,iBAAS,KAAK,EAAE;AAChB,mBAAW,SAAS,QAAQ,YAAY;AACtC,gBAAM,OAAO,wBAAwB,KAAK;AAC1C,cAAI,MAAM;AACR,qBAAS,KAAK,OAAO,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC,CAAC,OAAO,IAAI,EAAE;AAAA,UAClF;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAEA,UAAI,QAAQ,gBAAgB,QAAQ;AAClC,iBAAS,KAAK,gBAAgB;AAC9B,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,QAAQ,QAAQ,eAAe,KAAK,IAAI,CAAC,EAAE;AACzD,iBAAS,KAAK,EAAE;AAAA,MAClB;AAEA,UAAI,QAAQ,gBAAgB;AAC1B,iBAAS,KAAK,wBAAwB,QAAQ,cAAc,GAAG;AAC/D,iBAAS,KAAK,EAAE;AAAA,MAClB;AAEA,UAAI,QAAQ,WAAW;AACrB,iBAAS,KAAK,cAAc,QAAQ,SAAS,EAAE;AAC/C,iBAAS,KAAK,EAAE;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,YAAY;AACtB,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,qBAAqB;AACnC,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,QAAQ,UAAU;AAChC,eAAS,KAAK,EAAE;AAAA,IAClB,OAAO;AACL,eAAS,KAAK,mBAAmB;AACjC,eAAS,KAAK,QAAQ,UAAU;AAChC,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,QAAM,WAAW,QAAQ;AACzB,MAAI,aAAa,SAAS,eAAe,UAAU,SAAS,mBAAmB,UAAU,SAAS,iBAAiB,UAC/G,SAAS,cAAc,UAAU,SAAS,cAAc,UAAU,SAAS,YAAY,UACvF,SAAS,WAAW,UAAU,SAAS,kBAAkB;AAC3D,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,qCAA8B;AAC5C,eAAS,KAAK,EAAE;AAGhB,UAAI,SAAS,eAAe,QAAQ;AAClC,iBAAS,KAAK,8BAA8B;AAC5C,iBAAS,KAAK,EAAE;AAChB,cAAM,qBAA6C;AAAA,UACjD,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,OAAO;AAAA,UACP,UAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,SAAS;AAAA,UACT,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AACA,mBAAW,KAAK,SAAS,eAAe;AACtC,cAAI,MAAM,WAAW,SAAS,oBAAoB;AAChD,qBAAS,KAAK,YAAY,SAAS,kBAAkB,EAAE;AAAA,UACzD,OAAO;AACL,qBAAS,KAAK,KAAK,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAAA,UACjD;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,mBAAmB,QAAQ;AACtC,iBAAS,KAAK,wBAAwB;AACtC,iBAAS,KAAK,EAAE;AAChB,cAAM,gBAAwC;AAAA,UAC5C,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,aAAa;AAAA,UACb,SAAS;AAAA,UACT,aAAa;AAAA,UACb,gBAAgB;AAAA,UAChB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,aAAa;AAAA,UACb,WAAW;AAAA,UACX,MAAM;AAAA,UACN,KAAK;AAAA,UACL,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AACA,mBAAW,KAAK,SAAS,mBAAmB;AAC1C,cAAI,MAAM,WAAW,SAAS,wBAAwB;AACpD,qBAAS,KAAK,YAAY,SAAS,sBAAsB,EAAE;AAAA,UAC7D,OAAO;AACL,qBAAS,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE;AAAA,UAC5C;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,iBAAiB,QAAQ;AACpC,iBAAS,KAAK,sBAAsB;AACpC,iBAAS,KAAK,EAAE;AAChB,cAAM,gBAAwC;AAAA,UAC5C,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,MAAM;AAAA,UACN,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,OAAO;AAAA,UACP,OAAO;AAAA,UACP,SAAS;AAAA,UACT,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,WAAW;AAAA,UACX,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,eAAe;AAAA,UACf,wBAAwB;AAAA,UACxB,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AACA,mBAAW,KAAK,SAAS,iBAAiB;AACxC,cAAI,MAAM,WAAW,SAAS,sBAAsB;AAClD,qBAAS,KAAK,YAAY,SAAS,oBAAoB,EAAE;AAAA,UAC3D,OAAO;AACL,qBAAS,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,EAAE;AAAA,UAC5C;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,cAAc,QAAQ;AACjC,iBAAS,KAAK,oBAAoB;AAClC,iBAAS,KAAK,EAAE;AAChB,cAAM,aAAqC;AAAA,UACzC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,KAAK;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,UAAU;AAAA,UACV,UAAU;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,OAAO;AAAA,UACP,eAAe;AAAA,UACf,eAAe;AAAA,UACf,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,QACV;AACA,mBAAW,KAAK,SAAS,cAAc;AACrC,cAAI,MAAM,WAAW,SAAS,mBAAmB;AAC/C,qBAAS,KAAK,YAAY,SAAS,iBAAiB,EAAE;AAAA,UACxD,OAAO;AACL,qBAAS,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE;AAAA,UACzC;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,cAAc,QAAQ;AACjC,iBAAS,KAAK,gCAAgC;AAC9C,iBAAS,KAAK,EAAE;AAChB,cAAM,aAAqC;AAAA,UACzC,oBAAoB;AAAA,UACpB,uBAAuB;AAAA,UACvB,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,SAAS;AAAA,UACT,cAAc;AAAA,UACd,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,mBAAmB;AAAA,UACnB,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,iBAAiB;AAAA,UACjB,MAAM;AAAA,UACN,MAAM;AAAA,UACN,qBAAqB;AAAA,UACrB,KAAK;AAAA,QACP;AACA,mBAAW,KAAK,SAAS,cAAc;AACrC,cAAI,MAAM,WAAW,SAAS,mBAAmB;AAC/C,qBAAS,KAAK,YAAY,SAAS,iBAAiB,EAAE;AAAA,UACxD,OAAO;AACL,qBAAS,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE;AAAA,UACzC;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,YAAY,QAAQ;AAC/B,iBAAS,KAAK,0BAA0B;AACxC,iBAAS,KAAK,EAAE;AAChB,cAAM,mBAA2C;AAAA,UAC/C,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QACR;AACA,mBAAW,KAAK,SAAS,YAAY;AACnC,cAAI,MAAM,WAAW,SAAS,iBAAiB;AAC7C,qBAAS,KAAK,YAAY,SAAS,eAAe,EAAE;AAAA,UACtD,OAAO;AACL,qBAAS,KAAK,KAAK,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAAA,UAC/C;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,WAAW,QAAQ;AAC9B,iBAAS,KAAK,qBAAqB;AACnC,iBAAS,KAAK,EAAE;AAChB,cAAM,kBAA0C;AAAA,UAC9C,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,SAAS;AAAA,UACT,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,kBAAkB;AAAA,UAClB,QAAQ;AAAA,UACR,SAAS;AAAA,QACX;AACA,mBAAW,KAAK,SAAS,WAAW;AAClC,cAAI,MAAM,WAAW,SAAS,gBAAgB;AAC5C,qBAAS,KAAK,YAAY,SAAS,cAAc,EAAE;AAAA,UACrD,OAAO;AACL,qBAAS,KAAK,KAAK,gBAAgB,CAAC,KAAK,CAAC,EAAE;AAAA,UAC9C;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAGA,UAAI,SAAS,iBAAiB;AAC5B,iBAAS,KAAK,+BAA+B;AAC7C,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,SAAS,eAAe;AACtC,iBAAS,KAAK,EAAE;AAAA,MAClB;AAAA,IACF,OAAO;AAEL,eAAS,KAAK,yBAAyB;AACvC,UAAI,SAAS,eAAe,QAAQ;AAClC,iBAAS,KAAK,qBAAqB,SAAS,cAAc,KAAK,IAAI,CAAC,EAAE;AAAA,MACxE;AACA,UAAI,SAAS,mBAAmB,QAAQ;AACtC,iBAAS,KAAK,cAAc,SAAS,kBAAkB,KAAK,IAAI,CAAC,EAAE;AAAA,MACrE;AACA,UAAI,SAAS,iBAAiB,QAAQ;AACpC,iBAAS,KAAK,cAAc,SAAS,gBAAgB,KAAK,IAAI,CAAC,EAAE;AAAA,MACnE;AACA,UAAI,SAAS,cAAc,QAAQ;AACjC,iBAAS,KAAK,WAAW,SAAS,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,MAC7D;AACA,UAAI,SAAS,cAAc,QAAQ;AACjC,iBAAS,KAAK,WAAW,SAAS,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,MAC7D;AACA,UAAI,SAAS,YAAY,QAAQ;AAC/B,iBAAS,KAAK,iBAAiB,SAAS,WAAW,KAAK,IAAI,CAAC,EAAE;AAAA,MACjE;AACA,UAAI,SAAS,WAAW,QAAQ;AAC9B,iBAAS,KAAK,gBAAgB,SAAS,UAAU,KAAK,IAAI,CAAC,EAAE;AAAA,MAC/D;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAAA,EACF;AAGA,MAAI,cAAc,OAAO;AACvB,aAAS,KAAK,iCAAuB;AACrC,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,mEAAmE;AACjF,aAAS,KAAK,kEAAkE;AAChF,aAAS,KAAK,iFAAiF;AAC/F,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,mNAA4M;AAC1N,aAAS,KAAK,EAAE;AAAA,EAClB,OAAO;AACL,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,kBAAkB;AAChC,aAAS,KAAK,6DAA6D;AAC3E,aAAS,KAAK,gEAAgE;AAC9E,aAAS,KAAK,oGAAoG;AAClH,aAAS,KAAK,EAAE;AAAA,EAClB;AAGA,MAAI,QAAQ,uBAAuB,iBAAiB,QAAQ,eAAe,QAAQ,YAAY,SAAS,GAAG;AACzG,QAAI,cAAc,OAAO;AACvB,eAAS,KAAK,qCAA8B;AAC5C,eAAS,KAAK,EAAE;AAChB,eAAS,KAAK,+FAA+F;AAC7G,eAAS,KAAK,EAAE;AAEhB,iBAAW,WAAW,QAAQ,aAAa;AACzC,cAAM,WAAW,kBAAkB,OAAO;AAC1C,YAAI,CAAC,SAAU;AAEf,YAAI;AACJ,YAAI,QAAQ,qBAAqB,OAAO,GAAG;AACzC,oBAAU,QAAQ,mBAAmB,OAAO;AAAA,QAC9C,OAAO;AACL,gBAAM,aAAa,sBAAsB,OAAO;AAChD,cAAI,YAAY;AACd,sBAAU,WAAW,OAAO;AAAA,UAC9B,OAAO;AACL;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK,OAAO,QAAQ,EAAE;AAC/B,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,KAAK;AACnB,iBAAS,KAAK,QAAQ,KAAK,CAAC;AAC5B,iBAAS,KAAK,KAAK;AACnB,iBAAS,KAAK,EAAE;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,cAAc,OAAO;AACvB,aAAS,KAAK,KAAK;AACnB,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,yDAAyD;AAAA,EACzE;AAEA,SAAO,SAAS,KAAK,IAAI;AAC3B;AAEA,SAAS,mBAAmB,SAA0BD,WAA0B;AAC9E,QAAME,UAAkC;AAAA,IACtC,SAAS;AAAA,IACT,SAAS;AAAA,MACP,MAAM,QAAQ;AAAA,MACd,aAAa,QAAQ,eAAe;AAAA,MACpC,OAAO,QAAQ,MAAM,IAAI,OAAK,YAAY,CAAC,KAAK,CAAC;AAAA,IACnD;AAAA,EACF;AAGA,QAAM,cAAc,QAAQ,eACvB,qBAAqB,QAAQ,OAAO,KACpC,QAAQ,WACR;AACL,MAAI,aAAa;AACf,IAAAA,QAAO,UAAU;AAAA,EACnB;AAGA,QAAM,QAAkB,CAAC;AAGzB,QAAM,gBAAgB,WAAW,QAAQ,UAAU,KAAK,WAAW;AACnE,QAAM,KAAK,GAAG,cAAc,OAAO,IAAI,OAAK,iBAAiB,CAAC,EAAE,CAAC;AACjE,QAAM,KAAK,GAAG,cAAc,SAAS,IAAI,OAAK,cAAc,CAAC,EAAE,CAAC;AAChE,QAAM,KAAK,GAAG,cAAc,MAAM,IAAI,OAAK,eAAe,CAAC,EAAE,CAAC;AAG9D,QAAM,KAAK,gFAAgF;AAC3F,QAAM,KAAK,sFAAsF;AAEjG,EAAAA,QAAO,QAAQ;AAGf,MAAI,QAAQ,kBAAkB,QAAQ,eAAe,SAAS,GAAG;AAC/D,IAAAA,QAAO,UAAU;AAAA,MACf,WAAW,QAAQ,eAAe,IAAI,OAAK,sBAAsB,CAAC,KAAK,CAAC;AAAA,IAC1E;AAAA,EACF;AAGA,MAAIF,cAAa,YAAY;AAC3B,IAAAE,QAAO,OAAO,QAAQ;AACtB,IAAAA,QAAO,qBAAqB,MAAM,KAAK,IAAI;AAAA,EAC7C,WAAWF,cAAa,QAAQ;AAC9B,IAAAE,QAAO,qBAAqB,MAAM,KAAK,IAAI;AAAA,EAC7C,WAAWF,cAAa,QAAQ;AAC9B,IAAAE,QAAO,SAAS,EAAE,OAAO,MAAM,KAAK,IAAI,EAAE;AAAA,EAC5C,WAAWF,cAAa,cAAc;AACpC,IAAAE,QAAO,QAAQ;AAAA,EACjB,WAAWF,cAAa,WAAW;AACjC,IAAAE,QAAO,eAAe,MAAM,KAAK,IAAI;AAAA,EACvC,WAAWF,cAAa,YAAY;AAClC,IAAAE,QAAO,eAAe;AAAA,EACxB,WAAWF,cAAa,cAAc;AACpC,IAAAE,QAAO,aAAa;AAAA,EACtB;AAGA,EAAAA,QAAO,WAAW,mCAAmC,QAAQ,IAAI;AAEjE,SAAO,KAAK,UAAUA,SAAQ,MAAM,CAAC;AACvC;AAEA,SAAS,mBAAmB,SAA0BF,WAA0B;AAC9E,QAAM,QAAkB,CAAC;AAEzB,MAAIA,cAAa,SAAS;AACxB,UAAM,KAAK,uBAAuB;AAClC,UAAM,KAAK,cAAc,QAAQ,IAAI,EAAE;AACvC,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,kBAAkB;AAC7B,UAAM,KAAK,cAAc;AACzB,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,cAAc;AACzB,QAAI,QAAQ,MAAM,SAAS,YAAY,KAAK,QAAQ,MAAM,SAAS,YAAY,GAAG;AAChF,YAAM,KAAK,iBAAiB;AAAA,IAC9B;AACA,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,uBAAuB;AAClC,UAAM,KAAK,OAAO;AAClB,UAAM,KAAK,eAAe;AAC1B,QAAI,QAAQ,gBAAgB,SAAS,cAAc,GAAG;AACpD,YAAM,KAAK,qBAAqB;AAAA,IAClC;AAAA,EACF,WAAWA,cAAa,WAAW;AACjC,UAAM,KAAK,yBAAyB;AACpC,UAAM,KAAK,cAAc,QAAQ,IAAI,EAAE;AACvC,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,gBAAgB;AAC3B,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,UAAU;AACrB,UAAM,KAAK,WAAW,QAAQ,IAAI,EAAE;AACpC,QAAI,QAAQ,aAAa;AACvB,YAAM,KAAK,mBAAmB,QAAQ,WAAW,GAAG;AAAA,IACtD;AACA,UAAM,KAAK,EAAE;AACb,UAAM,KAAK,UAAU;AACrB,UAAM,KAAK,YAAY;AACvB,UAAM,KAAK,iBAAiB;AAC5B,UAAM,KAAK,iBAAiB;AAC5B,UAAM,KAAK,iBAAiB;AAAA,EAC9B;AAEA,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,sDAAsD;AACjE,QAAM,KAAK,iEAAiE;AAC5E,QAAM,KAAK,6EAA6E;AACxF,QAAM,KAAK,uEAAuE;AAClF,QAAM,KAAK,EAAE;AACb,QAAM,KAAK,+BAA+B;AAE1C,SAAO,MAAM,KAAK,IAAI;AACxB;;;ACjwDO,IAAM,YAAY;AAAA;AAAA,EAErB,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,YAAK;AAAA,EACpC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,SAAI;AAAA,EACvC,EAAE,IAAI,UAAU,OAAO,MAAM,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA,EACtC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,eAAK;AAAA;AAAA,EAEtC,EAAE,IAAI,KAAK,OAAO,KAAK,MAAM,YAAK;AAAA,EAClC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,SAAI;AAAA,EAC7C,EAAE,IAAI,UAAU,OAAO,MAAM,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA,EACtC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,KAAK,OAAO,KAAK,MAAM,YAAK;AAAA,EAClC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,SAAI;AAAA,EACrC,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA,EACtC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,cAAc,OAAO,eAAe,MAAM,YAAK;AAAA,EACrD,EAAE,IAAI,SAAS,OAAO,cAAc,MAAM,YAAK;AAAA,EAC/C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,kBAAM;AAAA;AAAA,EAEvC,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,eAAK;AAAA,EAChD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,kBAAM;AAAA,EAC3C,EAAE,IAAI,QAAQ,OAAO,eAAe,MAAM,YAAK;AAAA;AAAA,EAE/C,EAAE,IAAI,OAAO,OAAO,mBAAmB,MAAM,kBAAM;AAAA,EACnD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,eAAK;AAAA,EAC1C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA,EACtC,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,SAAI;AAAA,EAC/C,EAAE,IAAI,QAAQ,OAAO,cAAc,MAAM,kBAAM;AAAA,EAC/C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,eAAK;AAC1C;AAIO,IAAM,eAAe,UAAU,IAAI,OAAK,EAAE,EAAE;;;ACrD5C,IAAM,aAAa;AAAA;AAAA,EAEtB,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,eAAK;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,WAAW,MAAM,SAAI;AAAA,EAC5C,EAAE,IAAI,OAAO,OAAO,UAAU,MAAM,YAAK;AAAA,EACzC,EAAE,IAAI,QAAQ,OAAO,WAAW,MAAM,YAAK;AAAA,EAC3C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,kBAAM;AAAA,EAC/C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,SAAS,OAAO,WAAW,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,SAAI;AAAA,EACvC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA;AAAA,EAE5C,EAAE,IAAI,WAAW,OAAO,cAAc,MAAM,YAAK;AAAA,EACjD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA;AAAA,EAEtC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,SAAI;AAAA,EAC7C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,kBAAM;AAAA,EAC3C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,SAAI;AAAA,EACjD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,kBAAM;AAAA,EAC/C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA;AAAA,EAE9C,EAAE,IAAI,UAAU,OAAO,eAAe,MAAM,YAAK;AAAA,EACjD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA;AAAA,EAExC,EAAE,IAAI,UAAU,OAAO,QAAQ,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA;AAAA,EAE5C,EAAE,IAAI,SAAS,OAAO,iBAAiB,MAAM,kBAAM;AAAA,EACnD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA;AAAA,EAE5C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA,EACtC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,SAAI;AAAA,EACzC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA;AAAA,EAEtC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA;AAAA,EAExC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,YAAK;AAAA;AAAA,EAEtD,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,YAAK;AAAA,EACxD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,SAAI;AAAA,EACzC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA;AAAA,EAExC,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,SAAI;AAAA,EAC/C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA;AAAA,EAE1C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,SAAI;AAAA,EACvC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,SAAI;AAAA;AAAA,EAEjD,EAAE,IAAI,YAAY,OAAO,gBAAgB,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,kBAAM;AAAA,EACnD,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,YAAK;AAAA,EACtD,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,SAAI;AAAA,EAC9C,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,YAAK;AAAA;AAAA,EAE/C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,SAAI;AAAA,EAC3C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA;AAAA,EAE9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,SAAI;AAAA,EAC7C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA;AAAA,EAExC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA;AAAA,EAEpD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA;AAAA,EAE9C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,eAAK;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,SAAI;AAAA,EACvC,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,YAAK;AAAA,EACtD,EAAE,IAAI,eAAe,OAAO,gBAAgB,MAAM,eAAK;AAAA,EACvD,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,eAAK;AAAA,EACtC,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA;AAAA,EAElD,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,kBAAM;AAAA,EACnD,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,kBAAM;AAAA,EACrD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,kBAAM;AAAA,EACjD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,eAAK;AAAA,EAC5C,EAAE,IAAI,SAAS,OAAO,qBAAqB,MAAM,kBAAM;AAAA,EACvD,EAAE,IAAI,UAAU,OAAO,WAAW,MAAM,eAAK;AAAA,EAC7C,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,eAAK;AAAA,EAC5D,EAAE,IAAI,SAAS,OAAO,iBAAiB,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,OAAO,OAAO,iBAAiB,MAAM,eAAK;AAAA;AAAA,EAEhD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,2BAAQ;AAAA,EAC3C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA;AAAA,EAElD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,YAAY,OAAO,aAAa,MAAM,YAAK;AAAA;AAAA,EAEjD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,kBAAM;AAAA,EAC3C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,eAAK;AAAA;AAAA,EAE9C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,YAAY,OAAO,aAAa,MAAM,YAAK;AAAA,EACjD,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,YAAK;AAAA,EAC1D,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,OAAO,OAAO,aAAa,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,cAAc,MAAM,YAAK;AAAA,EACnD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,eAAK;AAAA;AAAA,EAE5C,EAAE,IAAI,SAAS,OAAO,mBAAmB,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,mBAAmB,OAAO,oBAAoB,MAAM,YAAK;AAAA,EAC/D,EAAE,IAAI,iBAAiB,OAAO,kBAAkB,MAAM,YAAK;AAAA,EAC3D,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,kBAAM;AAAA,EAC3C,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,OAAO,OAAO,qBAAqB,MAAM,kBAAM;AAAA,EACrD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,kBAAM;AAAA;AAAA,EAE/C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,SAAS,OAAO,YAAY,MAAM,YAAK;AAAA,EAC7C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,eAAK;AAAA,EAClD,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA;AAAA,EAElD,EAAE,IAAI,SAAS,OAAO,gBAAgB,MAAM,YAAK;AAAA,EACjD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,UAAU,OAAO,iBAAiB,MAAM,SAAI;AAAA,EAClD,EAAE,IAAI,OAAO,OAAO,WAAW,MAAM,YAAK;AAAA;AAAA,EAE1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,eAAK;AAAA,EAChD,EAAE,IAAI,WAAW,OAAO,kBAAkB,MAAM,kBAAM;AAAA,EACtD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,eAAK;AAAA;AAAA,EAEtC,EAAE,IAAI,cAAc,OAAO,wBAAwB,MAAM,SAAI;AAAA,EAC7D,EAAE,IAAI,OAAO,OAAO,WAAW,MAAM,eAAK;AAAA,EAC1C,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,SAAI;AAAA,EAC/C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,eAAK;AAAA;AAAA,EAE9C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,YAAY,OAAO,kBAAkB,MAAM,YAAK;AAAA;AAAA,EAEtD,EAAE,IAAI,OAAO,OAAO,eAAe,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,cAAc,MAAM,YAAK;AACvD;AAIO,IAAM,gBAAgB,WAAW,IAAI,OAAK,EAAE,EAAE;;;AC/L9C,IAAM,YAAY;AAAA;AAAA,EAErB,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA,EAC5E,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,UAAU,aAAa;AAAA,EAClE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,aAAa;AAAA,EACtE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,UAAU,aAAa;AAAA,EAC9E,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA,EAC5E,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,UAAK,UAAU,aAAa;AAAA,EAC/D,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAEpE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,aAAa;AAAA,EACtE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,mBAAO,UAAU,aAAa;AAAA,EACvE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA,EACxE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA,EACxE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAEtE,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,UAAU,aAAa;AAAA,EAClE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,mBAAO,UAAU,aAAa;AAAA,EACnE,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,aAAa;AAAA,EAC1E,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,aAAa;AAAA,EAC1E,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAEhE,EAAE,IAAI,aAAa,OAAO,oBAAoB,MAAM,mBAAO,UAAU,aAAa;AAAA,EAClF,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA,EACxE,EAAE,IAAI,SAAS,OAAO,gBAAgB,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAEzE,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,UAAU,aAAa;AAAA,EAClE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA,EAC5E,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAE5E,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,gBAAM,UAAU,aAAa;AAAA,EAC9E,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA,EACxE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,mBAAO,UAAU,aAAa;AAAA,EACvE,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,UAAU,aAAa;AAAA,EACtF,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAE5E,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA,EAC5E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,UAAU,aAAa;AAAA,EAChF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,UAAU,aAAa;AAAA,EAChF,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,UAAK,UAAU,aAAa;AAAA;AAAA,EAEzE,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,aAAM,UAAU,aAAa;AAAA,EAClF,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,aAAa;AAAA,EAC5E,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,UAAK,UAAU,aAAa;AAAA,EAC7E,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,aAAa;AAAA,EAC1E,EAAE,IAAI,QAAQ,OAAO,eAAe,MAAM,gBAAM,UAAU,aAAa;AAAA,EACvE,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAEhE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,mBAAO,UAAU,aAAa;AAAA,EACzE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAExE,EAAE,IAAI,SAAS,OAAO,gBAAgB,MAAM,aAAM,UAAU,aAAa;AAAA,EACzE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA,EACxE,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,UAAU,aAAa;AAAA,EAChE,EAAE,IAAI,UAAU,OAAO,iBAAiB,MAAM,aAAM,UAAU,aAAa;AAAA,EAC3E,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAExE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,aAAa;AAAA,EACtE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,aAAa;AAAA,EACtE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA,EACpE,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,aAAa;AAAA,EAC1E,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,aAAa;AAAA;AAAA,EAEpE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,UAAU,QAAQ;AAAA,EACvE,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,UAAK,UAAU,QAAQ;AAAA,EAC1E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC3E,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,UAAU,QAAQ;AAAA,EACzE,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,UAAK,UAAU,QAAQ;AAAA,EAC9E,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC/E,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,UAAU,QAAQ;AAAA;AAAA,EAE3E,EAAE,IAAI,gBAAgB,OAAO,iBAAiB,MAAM,gBAAM,UAAU,QAAQ;AAAA,EAC5E,EAAE,IAAI,eAAe,OAAO,qBAAqB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC/E,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC3E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC3E,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,UAAU,QAAQ;AAAA;AAAA,EAEjF,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACrE,EAAE,IAAI,kBAAkB,OAAO,mBAAmB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAChF,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7E,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,UAAU,QAAQ;AAAA;AAAA,EAEzE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,UAAK,UAAU,QAAQ;AAAA,EAClE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,QAAQ;AAAA,EACnE,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,UAAU,QAAQ;AAAA,EACzE,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC3D,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7D,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,UAAK,UAAU,QAAQ;AAAA,EAC1D,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7D,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7E,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,UAAK,UAAU,QAAQ;AAAA,EAC9E,EAAE,IAAI,mBAAmB,OAAO,qBAAqB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACnF,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACjF,EAAE,IAAI,gBAAgB,OAAO,kBAAkB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7E,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC7E,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,QAAQ;AAAA;AAAA,EAEnE,EAAE,IAAI,UAAU,OAAO,mBAAmB,MAAM,aAAM,UAAU,cAAc;AAAA,EAC9E,EAAE,IAAI,SAAS,OAAO,wBAAwB,MAAM,aAAM,UAAU,cAAc;AAAA,EAClF,EAAE,IAAI,OAAO,OAAO,WAAW,MAAM,aAAM,UAAU,cAAc;AAAA,EACnE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,cAAc;AAAA,EACzE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,cAAc;AAAA,EACzE,EAAE,IAAI,YAAY,OAAO,gBAAgB,MAAM,aAAM,UAAU,cAAc;AAAA,EAC7E,EAAE,IAAI,UAAU,OAAO,oBAAoB,MAAM,aAAM,UAAU,cAAc;AAAA,EAC/E,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,UAAK,UAAU,cAAc;AAAA,EAC9E,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,cAAc;AAAA,EAC3E,EAAE,IAAI,sBAAsB,OAAO,yBAAsB,MAAM,aAAM,UAAU,cAAc;AACjG;AAIO,IAAM,eAAe,UAAU,IAAI,OAAK,EAAE,EAAE;;;AC5H5C,IAAM,mBAAmB;AAAA,EAC5B,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,aAAM,aAAa,iCAAiC;AAAA,EACrF,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,6BAA6B;AAAA,EACnF,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,6BAA6B;AAAA,EACnF,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,aAAM,aAAa,6BAA6B;AACrF;AAIO,IAAM,iBAAiB;AAAA,EAC1B,EAAE,IAAI,IAAI,OAAO,QAAQ,MAAM,aAAM,aAAa,4BAA4B;AAAA,EAC9E,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,UAAK,aAAa,gCAAgC;AAAA,EAC/F,EAAE,IAAI,MAAM,OAAO,MAAM,MAAM,aAAM,aAAa,oCAAoC;AAAA,EACtF,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,aAAa,6BAA6B;AAAA,EACrF,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,aAAa,uBAAuB;AAAA,EACnG,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,aAAa,uBAAuB;AAAA,EACnG,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,aAAM,aAAa,sBAAsB;AAAA,EAChG,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,gCAAgC;AAAA,EACtF,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,6BAA6B;AACvF;AAIO,IAAM,cAAc;AAAA,EACvB,EAAE,IAAI,QAAQ,OAAO,WAAW,MAAM,aAAM,aAAa,8BAA8B;AAAA,EACvF,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,iCAAiC;AAAA,EACvF,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,aAAM,aAAa,6BAA6B;AACrF;AAIO,IAAM,cAAc;AAAA,EACvB,EAAE,IAAI,IAAI,OAAO,kBAAkB,MAAM,YAAK;AAAA;AAAA,EAE9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EACrF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EACvF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EACvF,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EAC3F,EAAE,IAAI,QAAQ,OAAO,WAAW,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EACpF,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EACrF,EAAE,IAAI,aAAa,OAAO,YAAY,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA,EAC1F,EAAE,IAAI,aAAa,OAAO,gBAAgB,MAAM,aAAM,WAAW,CAAC,cAAc,YAAY,EAAE;AAAA;AAAA,EAE9F,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,WAAW,CAAC,QAAQ,EAAE;AAAA,EAC3E,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,WAAW,CAAC,QAAQ,EAAE;AAAA,EAC3E,EAAE,IAAI,YAAY,OAAO,gBAAgB,MAAM,aAAM,WAAW,CAAC,QAAQ,EAAE;AAAA,EAC3E,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,UAAK,WAAW,CAAC,QAAQ,EAAE;AAAA,EACtE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,WAAW,CAAC,QAAQ,EAAE;AAAA;AAAA,EAEnE,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,WAAW,CAAC,IAAI,EAAE;AAAA,EAC3D,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,mBAAO,WAAW,CAAC,IAAI,EAAE;AAAA,EAC1D,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,WAAW,CAAC,IAAI,EAAE;AAAA,EAC3D,EAAE,IAAI,UAAU,OAAO,YAAY,MAAM,aAAM,WAAW,CAAC,IAAI,EAAE;AAAA;AAAA,EAEjE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,WAAW,CAAC,MAAM,EAAE;AAAA,EACjE,EAAE,IAAI,WAAW,OAAO,UAAU,MAAM,aAAM,WAAW,CAAC,MAAM,EAAE;AAAA,EAClE,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,WAAW,CAAC,MAAM,EAAE;AAAA;AAAA,EAE7D,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,UAAK,WAAW,CAAC,QAAQ,QAAQ,EAAE;AAAA,EAChF,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,WAAW,CAAC,QAAQ,QAAQ,EAAE;AAAA,EACvE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,WAAW,CAAC,QAAQ,EAAE;AAAA;AAAA,EAErE,EAAE,IAAI,WAAW,OAAO,oBAAoB,MAAM,aAAM,WAAW,CAAC,QAAQ,EAAE;AAAA,EAC9E,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,UAAK,WAAW,CAAC,QAAQ,EAAE;AAAA;AAAA,EAElE,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,WAAW,CAAC,MAAM,EAAE;AAAA,EAC7E,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,WAAW,CAAC,MAAM,EAAE;AAAA;AAAA,EAEjE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,WAAW,CAAC,KAAK,EAAE;AAAA,EACpE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,WAAW,CAAC,KAAK,EAAE;AACxE;;;ACtEO,IAAM,gBAAgB;AAAA,EACzB,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,aAAa,4BAA4B;AAAA,EAClG,EAAE,IAAI,iBAAiB,OAAO,kBAAkB,MAAM,mBAAO,aAAa,iCAAiC;AAAA,EAC3G,EAAE,IAAI,eAAe,OAAO,iBAAiB,MAAM,gBAAM,aAAa,+BAA+B;AAAA,EACrG,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,4BAA4B;AAAA,EAC1F,EAAE,IAAI,WAAW,OAAO,qBAAqB,MAAM,aAAM,aAAa,iCAAiC;AAAA,EACvG,EAAE,IAAI,UAAU,OAAO,cAAc,MAAM,aAAM,aAAa,gCAAgC;AAAA,EAC9F,EAAE,IAAI,WAAW,OAAO,eAAe,MAAM,mBAAO,aAAa,0BAA0B;AAAA,EAC3F,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,aAAa,yBAAyB;AAAA,EAC/F,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,yBAAyB;AAAA,EACvF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,aAAa,2BAA2B;AAAA,EACjG,EAAE,IAAI,UAAU,OAAO,gBAAgB,MAAM,aAAM,aAAa,oCAAoC;AAAA,EACpG,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,0BAA0B;AAAA,EAChF,EAAE,IAAI,YAAY,OAAO,kBAAkB,MAAM,aAAM,aAAa,6BAA6B;AAAA,EACjG,EAAE,IAAI,cAAc,OAAO,qBAAqB,MAAM,gBAAM,aAAa,yBAAyB;AAAA,EAClG,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,aAAa,sBAAsB;AAClF;AAIO,IAAM,wBAAwB;AAAA,EACjC,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,wBAAwB;AAAA,EAChE,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,uBAAuB;AAAA,EACjE,EAAE,IAAI,SAAS,OAAO,sBAAsB,aAAa,6BAA6B;AAAA,EACtF,EAAE,IAAI,aAAa,OAAO,gCAAgC,aAAa,4BAA4B;AAAA,EACnG,EAAE,IAAI,OAAO,OAAO,wBAAwB,aAAa,+BAA+B;AAAA,EACxF,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,uBAAuB;AAAA,EACnF,EAAE,IAAI,sBAAsB,OAAO,sBAAsB,aAAa,6CAA6C;AAAA,EACnH,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,qBAAqB;AAAA,EAC3E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,uBAAuB;AAAA,EACjF,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,qBAAqB;AAAA,EACvF,EAAE,IAAI,WAAW,OAAO,oBAAoB,aAAa,+BAA+B;AAAA,EACxF,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,aAAa,wBAAwB;AAAA,EACxF,EAAE,IAAI,UAAU,OAAO,uBAAuB,aAAa,4BAA4B;AAAA,EACvF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,sBAAsB;AACtE;AAIO,IAAM,iBAAiB;AAAA,EAC1B,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAC1C;;;AC5CO,IAAM,aAAa;AAAA,EACtB,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,kBAAM;AAAA,EACjD,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,YAAK;AAAA,EACxC,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,eAAK;AAAA,EAC5D,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,eAAK;AAAA,EACxD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,YAAK;AAAA,EACtD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAC9C;AAIO,IAAM,eAAe;AAAA,EACxB,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,YAAK;AAAA,EAC5D,EAAE,IAAI,aAAa,OAAO,gBAAgB,MAAM,YAAK;AAAA,EACrD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,YAAK;AAAA,EAC/C,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,eAAK;AAAA,EAC9D,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,MAAM,eAAK;AAAA,EAChE,EAAE,IAAI,kBAAkB,OAAO,mBAAmB,MAAM,eAAK;AAAA,EAC7D,EAAE,IAAI,uBAAuB,OAAO,uBAAuB,MAAM,YAAK;AAAA,EACtE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,SAAS,OAAO,YAAY,MAAM,YAAK;AAAA,EAC7C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,aAAa,OAAO,gBAAgB,MAAM,eAAK;AAAA,EACrD,EAAE,IAAI,cAAc,OAAO,iBAAiB,MAAM,YAAK;AAAA,EACvD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,kBAAM;AAAA,EAC7C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAClD;AAIO,IAAM,WAAW;AAAA,EACpB,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,qBAAqB;AAAA,EAC7D,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,+BAA+B;AAAA,EACrF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,kBAAkB;AAAA,EAClE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,gBAAgB;AAAA,EAClE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,mBAAmB;AAAA,EACrE,EAAE,IAAI,SAAS,OAAO,gBAAgB,aAAa,qBAAqB;AAAA,EACxE,EAAE,IAAI,SAAS,OAAO,gBAAgB,aAAa,6BAA6B;AAAA,EAChF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,sBAAsB;AAAA,EACtE,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,oBAAoB;AAAA,EAC5D,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,gBAAgB;AAAA,EACpE,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,gBAAgB;AAAA,EACxD,EAAE,IAAI,QAAQ,OAAO,sBAAsB,aAAa,sBAAsB;AAAA,EAC9E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,iBAAiB;AACjE;AAIO,IAAM,oBAAoB;AAAA,EAC7B,EAAE,IAAI,QAAQ,OAAO,sBAAsB,MAAM,aAAM,aAAa,wCAAwC;AAAA,EAC5G,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,aAAa,kCAAkC;AAAA,EACtG,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,6CAA6C;AAAA,EACzG,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,aAAa,+CAA+C;AAAA,EACnH,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,aAAa,6CAA6C;AAAA,EACjH,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,aAAa,2CAA2C;AACrH;AAIO,IAAM,mBAAmB;AAAA,EAC5B,EAAE,IAAI,QAAQ,OAAO,OAAO;AAAA,EAC5B,EAAE,IAAI,UAAU,OAAO,SAAS;AAAA,EAChC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,SAAS,OAAO,QAAQ;AAAA,EAC9B,EAAE,IAAI,SAAS,OAAO,QAAQ;AAClC;AAIO,IAAM,sBAAsB;AAAA,EAC/B,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,cAAc;AAAA,EACrE,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,aAAM,UAAU,cAAc;AAAA,EACrF,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,gBAAM,UAAU,cAAc;AAAA,EAC7E,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,cAAc;AAAA,EACrE,EAAE,IAAI,OAAO,OAAO,WAAW,MAAM,aAAM,UAAU,cAAc;AAAA,EACnE,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,mBAAO,UAAU,cAAc;AAAA,EAC9E,EAAE,IAAI,MAAM,OAAO,mBAAmB,MAAM,aAAM,UAAU,cAAc;AAAA,EAC1E,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,cAAc;AAAA,EACvE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,cAAc;AAAA,EACrE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,cAAc;AAAA,EACvE,EAAE,IAAI,YAAY,OAAO,gBAAgB,MAAM,aAAM,UAAU,cAAc;AAAA,EAC7E,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM,UAAU,cAAc;AAAA,EACvE,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,UAAU,cAAc;AAAA,EACnE,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,UAAU,cAAc;AAAA,EACzE,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,cAAc;AAAA,EAC3E,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,cAAc;AAAA,EACvE,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,gBAAM,UAAU,cAAc;AAAA,EAC/D,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,gBAAM,UAAU,cAAc;AAAA,EACzE,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,mBAAO,UAAU,cAAc;AACxE;AAIO,IAAM,gBAAgB;AAAA,EACzB,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,UAAK,UAAU,QAAQ;AAAA,EAC9D,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACnF,EAAE,IAAI,sBAAsB,OAAO,sBAAsB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACvF,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACvE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,MAAM,gBAAM,UAAU,QAAQ;AAAA,EAC7E,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,gBAAM,UAAU,QAAQ;AAAA,EACzE,EAAE,IAAI,gBAAgB,OAAO,iBAAiB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC5E,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,iBAAiB,OAAO,kBAAkB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC9E,EAAE,IAAI,iBAAiB,OAAO,uBAAuB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACnF,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjF,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,UAAU,QAAQ;AAAA,EACrE,EAAE,IAAI,mBAAmB,OAAO,wBAAwB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACtF,EAAE,IAAI,oBAAoB,OAAO,qBAAqB,MAAM,aAAM,UAAU,QAAQ;AAAA,EACpF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,UAAU,QAAQ;AAAA,EACjE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC/D,EAAE,IAAI,OAAO,OAAO,UAAU,MAAM,gBAAM,UAAU,QAAQ;AAAA,EAC5D,EAAE,IAAI,oBAAoB,OAAO,6BAA6B,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC5F,EAAE,IAAI,wBAAwB,OAAO,wBAAwB,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC3F,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,UAAU,QAAQ;AAAA,EAC/D,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,aAAM,UAAU,QAAQ;AAAA,EACzE,EAAE,IAAI,iBAAiB,OAAO,2BAA2B,MAAM,UAAK,UAAU,QAAQ;AAC1F;AAIO,IAAM,qBAAqB,CAAC,GAAG,qBAAqB,GAAG,aAAa;AAIpE,IAAM,uBAAuB;AAAA,EAChC,EAAE,IAAI,aAAa,OAAO,cAAc,MAAM,YAAK;AAAA,EACnD,EAAE,IAAI,QAAQ,OAAO,6BAA6B,MAAM,YAAK;AAAA,EAC7D,EAAE,IAAI,OAAO,OAAO,6BAA6B,MAAM,YAAK;AAAA,EAC5D,EAAE,IAAI,OAAO,OAAO,WAAW,MAAM,eAAK;AAAA,EAC1C,EAAE,IAAI,OAAO,OAAO,4BAA4B,MAAM,YAAK;AAAA,EAC3D,EAAE,IAAI,QAAQ,OAAO,WAAW,MAAM,YAAK;AAAA,EAC3C,EAAE,IAAI,mBAAmB,OAAO,6BAA6B,MAAM,YAAK;AAAA,EACxE,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,eAAe,OAAO,wBAAwB,MAAM,YAAK;AACnE;AAIO,IAAM,sBAAsB;AAAA,EAC/B,EAAE,IAAI,YAAY,OAAO,MAAM,MAAM,mBAAO,aAAa,eAAe;AAAA,EACxE,EAAE,IAAI,aAAa,OAAO,iBAAiB,MAAM,mBAAO,aAAa,cAAc;AAAA,EACnF,EAAE,IAAI,cAAc,OAAO,UAAU,MAAM,mBAAO,aAAa,mBAAmB;AAAA,EAClF,EAAE,IAAI,cAAc,OAAO,UAAU,MAAM,mBAAO,aAAa,mBAAmB;AAAA,EAClF,EAAE,IAAI,YAAY,OAAO,mBAAmB,MAAM,mBAAO,aAAa,yBAAyB;AAAA,EAC/F,EAAE,IAAI,UAAU,OAAO,iBAAiB,MAAM,mBAAO,aAAa,6BAA6B;AACnG;AAIO,IAAM,oBAAoB;AAAA,EAC7B,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,gBAAM,aAAa,8BAA8B;AAAA,EACxF,EAAE,IAAI,0BAA0B,OAAO,0BAA0B,MAAM,aAAM,aAAa,6BAA6B;AAAA,EACvH,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,aAAM,aAAa,8BAA8B;AAAA,EACxG,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,MAAM,aAAM,aAAa,6BAA6B;AAAA,EAC3G,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,aAAa,8BAA8B;AAAA,EAChG,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,mBAAO,aAAa,mCAAmC;AAAA,EACpG,EAAE,IAAI,QAAQ,OAAO,iBAAiB,MAAM,UAAK,aAAa,qCAAqC;AAAA,EACnG,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,MAAM,aAAM,aAAa,oCAAoC;AAAA,EAClH,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,aAAa,sBAAsB;AAAA,EAClG,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,MAAM,aAAM,aAAa,sCAAsC;AAAA,EACpH,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,aAAM,aAAa,2BAA2B;AAAA,EACvG,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,UAAK,aAAa,eAAe;AACxE;AAIO,IAAM,cAAc;AAAA,EACvB,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,aAAa,uBAAuB;AAAA,EACvF,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,aAAa,uCAAuC;AAAA,EACvG,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,mBAAO,aAAa,sBAAsB;AAAA,EACvF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,8BAA8B;AAAA,EAC1F,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,yBAAyB;AAAA,EACvF,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,aAAa,+BAA+B;AAAA,EACzF,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,kCAAkC;AAAA,EAChG,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,mBAAO,aAAa,gCAAgC;AAAA,EAC/F,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,yBAAyB;AAAA,EACvF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,wBAAwB;AAAA,EACpF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,0BAA0B;AAAA,EACtF,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,MAAM,aAAM,aAAa,iCAAiC;AAAA,EACjH,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,aAAa,8BAA8B;AAAA,EACtF,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,UAAK,aAAa,mBAAmB;AAC5E;AAIO,IAAM,eAAe;AAAA,EACxB,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,aAAa,2BAA2B;AAAA,EAC3F,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,aAAa,qCAAqC;AAAA,EAC/F,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,aAAa,gCAAgC;AAAA,EAC1F,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,+BAA+B;AAAA,EAC3F,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,iBAAiB;AAAA,EACvE,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,aAAM,aAAa,sBAAsB;AAAA,EAC1E,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,mBAAO,aAAa,yBAAyB;AAAA,EAC1F,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,gBAAM,aAAa,iCAAiC;AAAA,EAC3F,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,+BAA+B;AAAA,EAC3F,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,4BAAS,aAAa,2BAA2B;AAAA,EACpF,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,aAAa,4BAA4B;AAAA,EACtF,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,aAAa,0BAA0B;AAAA,EAC1F,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,gBAAM,aAAa,yCAAyC;AAAA,EAC3G,EAAE,IAAI,YAAY,OAAO,sBAAsB,MAAM,aAAM,aAAa,yBAAyB;AAAA,EACjG,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,aAAM,aAAa,kCAAkC;AAAA,EAClG,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,UAAK,aAAa,oBAAoB;AAC7E;;;ACvNO,IAAM,oBAAoB;AAAA,EAC7B,EAAE,IAAI,4BAA4B,OAAO,+BAA+B,aAAa,6CAA6C,aAAa,KAAK;AAAA,EACpJ,EAAE,IAAI,0BAA0B,OAAO,iCAAiC,aAAa,4CAA4C,aAAa,KAAK;AAAA,EACnJ,EAAE,IAAI,2BAA2B,OAAO,2BAA2B,aAAa,uCAAuC,aAAa,KAAK;AAAA,EACzI,EAAE,IAAI,4BAA4B,OAAO,4BAA4B,aAAa,uCAAuC,aAAa,KAAK;AAAA,EAC3I,EAAE,IAAI,8BAA8B,OAAO,8BAA8B,aAAa,sCAAsC,aAAa,KAAK;AAAA,EAC9I,EAAE,IAAI,wBAAwB,OAAO,wBAAwB,aAAa,+BAA+B;AAAA,EACzG,EAAE,IAAI,0BAA0B,OAAO,0BAA0B,aAAa,oCAAoC;AAAA,EAClH,EAAE,IAAI,0BAA0B,OAAO,0BAA0B,aAAa,kCAAkC;AAAA,EAChH,EAAE,IAAI,4BAA4B,OAAO,4BAA4B,aAAa,oCAAoC;AAAA,EACtH,EAAE,IAAI,sBAAsB,OAAO,uCAAuC,aAAa,2BAA2B;AACtH;AAIO,IAAM,sBAAsB;AAAA,EAC/B,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,aAAM,aAAa,2CAA2C;AAAA,EACrG,EAAE,IAAI,iBAAiB,OAAO,sBAAsB,MAAM,aAAM,aAAa,uDAAuD;AAAA,EACpI,EAAE,IAAI,cAAc,OAAO,sBAAsB,MAAM,aAAM,aAAa,wCAAwC;AAAA,EAClH,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,UAAK,aAAa,4CAA4C;AAAA,EACjH,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,aAAa,kCAAkC;AAAA,EACpG,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,UAAK,aAAa,uCAAuC;AAClG;AAIO,IAAM,kBAAkB;AAAA,EAC3B,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,aAAM,aAAa,6BAA6B;AAAA,EAC1F,EAAE,IAAI,gBAAgB,OAAO,mBAAmB,MAAM,aAAM,aAAa,0BAA0B;AAAA,EACnG,EAAE,IAAI,gBAAgB,OAAO,mBAAmB,MAAM,mBAAO,aAAa,qBAAqB;AAAA,EAC/F,EAAE,IAAI,YAAY,OAAO,qBAAqB,MAAM,aAAM,aAAa,gBAAgB;AAAA,EACvF,EAAE,IAAI,aAAa,OAAO,gBAAgB,MAAM,aAAM,aAAa,kBAAkB;AAAA,EACrF,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,aAAM,aAAa,wBAAwB;AAAA,EACrF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,aAAa,uBAAuB;AAAA,EAC7F,EAAE,IAAI,YAAY,OAAO,iBAAiB,MAAM,aAAM,aAAa,oBAAoB;AAAA,EACvF,EAAE,IAAI,eAAe,OAAO,gBAAgB,MAAM,aAAM,aAAa,wBAAwB;AAAA,EAC7F,EAAE,IAAI,kBAAkB,OAAO,sBAAsB,MAAM,aAAM,aAAa,kBAAkB;AAAA,EAChG,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,iBAAiB;AAAA,EAC/E,EAAE,IAAI,WAAW,OAAO,gBAAgB,MAAM,aAAM,aAAa,eAAe;AAAA,EAChF,EAAE,IAAI,iBAAiB,OAAO,wBAAwB,MAAM,aAAM,aAAa,kBAAkB;AAAA,EACjG,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,aAAM,aAAa,cAAc;AAC1E;;;ACxCO,IAAM,iBAAiB;AAAA;AAAA,EAE1B,EAAE,IAAI,qBAAqB,OAAO,mCAAmC,aAAa,+CAA+C,aAAa,KAAK;AAAA;AAAA,EAEnJ,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,sBAAsB;AAAA,EAChF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,sBAAsB;AAAA,EAChF,EAAE,IAAI,mBAAmB,OAAO,wBAAwB,aAAa,yBAAyB;AAAA,EAC9F,EAAE,IAAI,eAAe,OAAO,iBAAiB,aAAa,qBAAqB;AAAA,EAC/E,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,aAAa,wBAAwB;AAAA,EACtF,EAAE,IAAI,iBAAiB,OAAO,qBAAqB,aAAa,yBAAyB;AAAA,EACzF,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,aAAa,wBAAwB;AAAA,EACtF,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,uBAAuB;AAAA,EACnF,EAAE,IAAI,eAAe,OAAO,eAAe,aAAa,qBAAqB;AAAA,EAC7E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,sBAAsB;AAAA,EAChF,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,aAAa,yBAAyB;AAAA,EACzF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,sBAAsB;AAAA,EAChF,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,uBAAuB;AAAA;AAAA,EAEnF,EAAE,IAAI,cAAc,OAAO,sBAAsB,aAAa,2BAA2B;AAAA,EACzF,EAAE,IAAI,YAAY,OAAO,uBAAuB,aAAa,0BAA0B;AAAA,EACvF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,4BAA4B;AAAA,EAC5E,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,0BAA0B;AAAA;AAAA,EAE9E,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,iCAAiC;AAAA,EAC3E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,oBAAoB;AAAA,EAChE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,kBAAkB;AAAA,EACpE,EAAE,IAAI,WAAW,OAAO,eAAe,aAAa,iBAAiB;AAAA,EACrE,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,iCAAiC;AAAA,EAC7F,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,0BAA0B;AAAA,EACtF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,6BAA6B;AAAA,EACzE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,kCAAkC;AAAA,EAChF,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,+BAA+B;AAAA,EACrF,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,gCAAgC;AAAA,EACpF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,mCAAmC;AAAA;AAAA,EAEnF,EAAE,IAAI,QAAQ,OAAO,2BAA2B,aAAa,yBAAyB;AAAA,EACtF,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,sBAAsB;AAAA,EACpE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,kCAAkC;AAAA,EACpF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,uBAAuB;AACvE;AAIO,IAAM,6BAA6B;AAAA,EACtC,EAAE,IAAI,YAAY,OAAO,yBAAyB,aAAa,4CAA4C,aAAa,KAAK;AAAA,EAC7H,EAAE,IAAI,UAAU,OAAO,oBAAoB,aAAa,sCAAsC;AAAA,EAC9F,EAAE,IAAI,SAAS,OAAO,mBAAmB,aAAa,gCAAgC;AAAA,EACtF,EAAE,IAAI,eAAe,OAAO,uBAAuB,aAAa,6BAA6B;AAAA,EAC7F,EAAE,IAAI,WAAW,OAAO,2BAA2B,aAAa,iCAAiC;AAAA,EACjG,EAAE,IAAI,eAAe,OAAO,sBAAsB,aAAa,+BAA+B;AAAA,EAC9F,EAAE,IAAI,kBAAkB,OAAO,mBAAmB,aAAa,yBAAyB;AAAA,EACxF,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,iCAAiC;AAAA,EACrF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,6BAA6B;AAAA,EAC7E,EAAE,IAAI,aAAa,OAAO,gCAAgC,aAAa,yBAAyB;AAAA,EAChG,EAAE,IAAI,aAAa,OAAO,6BAA6B,aAAa,wBAAwB;AAAA,EAC5F,EAAE,IAAI,QAAQ,OAAO,kBAAkB,aAAa,2BAA2B;AAAA,EAC/E,EAAE,IAAI,OAAO,OAAO,kBAAkB,aAAa,yBAAyB;AAAA,EAC5E,EAAE,IAAI,kBAAkB,OAAO,wBAAwB,aAAa,+BAA+B;AAAA,EACnG,EAAE,IAAI,oBAAoB,OAAO,6BAA6B,aAAa,4BAA4B;AAAA,EACvG,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,qCAAqC;AAAA,EACzF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,6BAA6B;AAAA,EAC7E,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,uBAAuB;AAAA,EACvE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,4BAA4B;AAC5E;AAIO,IAAM,2BAA2B;AAAA,EACpC,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,6BAA6B,aAAa,KAAK;AAAA,EACrG,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,+BAA+B;AAAA,EACjF,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,yBAAyB;AAAA,EACnE,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,4BAA4B;AAAA,EAChF,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,2BAA2B;AAAA,EACzE,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,8BAA8B;AAAA,EAC9E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,yBAAyB;AAAA,EACrE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,kCAAkC;AAAA,EAC9E,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,wBAAwB;AAAA,EACxE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,6BAA6B;AAAA,EACzE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,yBAAyB;AAAA,EACvE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,yBAAyB;AAAA,EAC3E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,sBAAsB;AAAA,EAClE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,4BAA4B;AAAA,EAC1E,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,8BAA8B;AAAA,EAClF,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,aAAa,+BAA+B;AAAA,EAC7F,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,0BAA0B;AAAA,EAC5E,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,kBAAkB;AAAA,EACxE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,0BAA0B;AAC1E;AAIO,IAAM,wBAAwB;AAAA,EACjC,EAAE,IAAI,WAAW,OAAO,iBAAiB,aAAa,qCAAqC,aAAa,KAAK;AAAA,EAC7G,EAAE,IAAI,OAAO,OAAO,cAAc,aAAa,4BAA4B;AAAA,EAC3E,EAAE,IAAI,UAAU,OAAO,aAAa,aAAa,4BAA4B;AAAA,EAC7E,EAAE,IAAI,QAAQ,OAAO,kBAAkB,aAAa,0BAA0B;AAAA,EAC9E,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,iBAAiB;AAAA,EAC3D,EAAE,IAAI,YAAY,OAAO,uBAAuB,aAAa,8BAA8B;AAAA,EAC3F,EAAE,IAAI,cAAc,OAAO,eAAe,aAAa,2BAA2B;AAAA,EAClF,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,4BAA4B;AAAA,EAC9E,EAAE,IAAI,OAAO,OAAO,qBAAqB,aAAa,8BAA8B;AAAA,EACpF,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,8BAA8B;AAAA,EACpF,EAAE,IAAI,QAAQ,OAAO,cAAc,aAAa,0BAA0B;AAAA,EAC1E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,wBAAwB;AACxE;AAIO,IAAM,wBAAwB;AAAA,EACjC,EAAE,IAAI,sBAAsB,OAAO,sBAAsB,aAAa,uBAAuB,aAAa,KAAK;AAAA,EAC/G,EAAE,IAAI,yBAAyB,OAAO,yBAAyB,aAAa,wBAAwB,aAAa,KAAK;AAAA,EACtH,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,2BAA2B,aAAa,KAAK;AAAA,EAC/G,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,aAAa,uBAAuB,aAAa,KAAK;AAAA,EACzG,EAAE,IAAI,yBAAyB,OAAO,yBAAyB,aAAa,yBAAyB,aAAa,KAAK;AAAA,EACvH,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,gBAAgB;AAAA,EAC5E,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,2BAA2B;AAAA,EACrF,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,sBAAsB;AAAA,EAChF,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,oBAAoB;AAAA,EAChF,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,aAAa,kBAAkB;AAAA,EACtF,EAAE,IAAI,kBAAkB,OAAO,yBAAyB,aAAa,uBAAuB;AAAA,EAC5F,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,aAAa,8BAA8B;AAAA,EAClG,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,iCAAiC;AAAA,EACnG,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,8BAA8B;AAAA,EAChG,EAAE,IAAI,sBAAsB,OAAO,sBAAsB,aAAa,qBAAqB;AAAA,EAC3F,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,uBAAuB;AACvE;AAIO,IAAM,qBAAqB;AAAA;AAAA,EAE9B,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,yCAAyC,aAAa,KAAK;AAAA,EACrG,EAAE,IAAI,QAAQ,OAAO,aAAa,aAAa,kCAAkC;AAAA,EACjF,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,+BAA+B;AAAA,EACzE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,uBAAuB;AAAA,EACrE,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,2CAA2C;AAAA,EACrF,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,sBAAsB;AAAA;AAAA,EAEhE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,gCAAgC;AAAA,EAC5E,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,6BAA6B;AAAA,EAC7E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,+BAA+B;AAAA,EAC3E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,+BAA+B;AAAA,EAC3E,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,gCAAgC;AAAA;AAAA,EAE1E,EAAE,IAAI,QAAQ,OAAO,SAAS,aAAa,gCAAgC;AAAA,EAC3E,EAAE,IAAI,YAAY,OAAO,aAAa,aAAa,kCAAkC;AAAA,EACrF,EAAE,IAAI,YAAY,OAAO,aAAa,aAAa,iCAAiC;AAAA,EACpF,EAAE,IAAI,QAAQ,OAAO,YAAY,aAAa,0BAA0B;AAAA,EACxE,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,4BAA4B;AAAA,EAC5E,EAAE,IAAI,OAAO,OAAO,gBAAgB,aAAa,+BAA+B;AAAA;AAAA,EAEhF,EAAE,IAAI,QAAQ,OAAO,YAAY,aAAa,+BAA+B;AAAA,EAC7E,EAAE,IAAI,cAAc,OAAO,eAAe,aAAa,2BAA2B;AAAA,EAClF,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,kCAAkC;AAAA;AAAA,EAE1E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,iCAAiC;AACjF;AAIO,IAAM,oBAAoB;AAAA;AAAA,EAE7B,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,6CAA6C,aAAa,KAAK;AAAA,EAC3G,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,+BAA+B;AAAA,EACnF,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,0BAA0B;AAAA,EACxE,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,+BAA+B;AAAA,EACjG,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,4BAA4B;AAAA,EAC1E,EAAE,IAAI,WAAW,OAAO,eAAe,aAAa,6BAA6B;AAAA,EACjF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,uCAAuC;AAAA,EACnF,EAAE,IAAI,eAAe,OAAO,eAAe,aAAa,6BAA6B;AAAA,EACrF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,+BAA+B;AAAA,EAC3E,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,2CAA2C;AAAA;AAAA,EAEzF,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,0BAA0B;AAAA,EAC5F,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,oBAAoB;AAAA,EACtE,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,6BAA6B;AAAA,EACjF,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,4BAA4B;AAAA,EACtE,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,gCAAgC;AAAA,EAChF,EAAE,IAAI,QAAQ,OAAO,gBAAgB,aAAa,oBAAoB;AAC1E;;;ACpLO,IAAM,qBAAqB;AAAA,EAC9B,EAAE,IAAI,oBAAoB,OAAO,+BAA+B,aAAa,+CAA+C;AAAA,EAC5H,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,+BAA+B;AAAA,EACnF,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,yBAAyB;AAAA,EAC/E,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,mBAAmB;AAAA,EACzE,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,6BAA6B;AAAA,EACnF,EAAE,IAAI,wBAAwB,OAAO,wBAAwB,aAAa,mCAAmC;AACjH;AAIO,IAAM,0BAA0B;AAAA,EACnC,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,8BAA8B;AAAA,EAClF,EAAE,IAAI,eAAe,OAAO,sBAAsB,aAAa,4BAA4B;AAAA,EAC3F,EAAE,IAAI,eAAe,OAAO,eAAe,aAAa,6BAA6B;AAAA,EACrF,EAAE,IAAI,UAAU,OAAO,yBAAyB,aAAa,+BAA+B;AAAA,EAC5F,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,0BAA0B;AAAA,EACtF,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,yBAAyB;AAAA,EAC3F,EAAE,IAAI,kBAAkB,OAAO,wBAAwB,aAAa,6BAA6B;AAAA,EACjG,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,wBAAwB;AACxE;AAIO,IAAM,kBAAkB;AAAA,EAC3B,EAAE,IAAI,cAAc,OAAO,sBAAsB,aAAa,0BAA0B;AAAA,EACxF,EAAE,IAAI,WAAW,OAAO,mBAAmB,aAAa,2BAA2B;AAAA,EACnF,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,2BAA2B;AAAA,EACjF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,0BAA0B;AAAA,EAC1E,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,sBAAsB;AAAA,EAChE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,2BAA2B;AAAA,EACzE,EAAE,IAAI,SAAS,OAAO,mBAAmB,aAAa,yBAAyB;AAAA,EAC/E,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,wBAAwB;AAAA,EAClE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,uBAAuB;AAAA,EACrE,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,mBAAmB;AAAA,EAC3D,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,aAAa,2BAA2B;AAAA,EACzF,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,6BAA6B;AAAA,EAC3E,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,qBAAqB;AAAA,EACrE,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,0BAA0B;AAAA,EAC1E,EAAE,IAAI,OAAO,OAAO,aAAa,aAAa,kCAAkC;AAAA,EAChF,EAAE,IAAI,QAAQ,OAAO,gBAAgB,aAAa,kBAAkB;AAAA,EACpE,EAAE,IAAI,WAAW,OAAO,gBAAgB,aAAa,wBAAwB;AAAA,EAC7E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,iBAAiB;AACjE;AAIO,IAAM,mBAAmB;AAAA;AAAA,EAE5B,EAAE,QAAQ,gBAAgB,UAAU,QAAQ;AAAA,EAC5C,EAAE,QAAQ,oBAAoB,UAAU,QAAQ;AAAA,EAChD,EAAE,QAAQ,qBAAqB,UAAU,QAAQ;AAAA;AAAA,EAEjD,EAAE,QAAQ,0BAA0B,UAAU,OAAO;AAAA,EACrD,EAAE,QAAQ,yBAAyB,UAAU,OAAO;AAAA,EACpD,EAAE,QAAQ,wBAAwB,UAAU,OAAO;AAAA,EACnD,EAAE,QAAQ,uBAAuB,UAAU,OAAO;AAAA,EAClD,EAAE,QAAQ,sBAAsB,UAAU,OAAO;AAAA;AAAA,EAEjD,EAAE,QAAQ,0BAA0B,UAAU,WAAW;AAAA,EACzD,EAAE,QAAQ,oBAAoB,UAAU,WAAW;AAAA,EACnD,EAAE,QAAQ,eAAe,UAAU,WAAW;AAAA;AAAA,EAE9C,EAAE,QAAQ,gBAAgB,UAAU,MAAM;AAAA,EAC1C,EAAE,QAAQ,kBAAkB,UAAU,MAAM;AAAA,EAC5C,EAAE,QAAQ,mBAAmB,UAAU,MAAM;AAAA,EAC7C,EAAE,QAAQ,kBAAkB,UAAU,MAAM;AAAA;AAAA,EAE5C,EAAE,QAAQ,wBAAwB,UAAU,aAAa;AAAA,EACzD,EAAE,QAAQ,uBAAuB,UAAU,aAAa;AAAA,EACxD,EAAE,QAAQ,gCAAgC,UAAU,aAAa;AAAA;AAAA,EAEjE,EAAE,QAAQ,yBAAyB,UAAU,WAAW;AAAA,EACxD,EAAE,QAAQ,sBAAsB,UAAU,WAAW;AAAA,EACrD,EAAE,QAAQ,kBAAkB,UAAU,WAAW;AACrD;;;AC3EO,IAAM,cAAc;AAAA,EACvB,EAAE,IAAI,QAAQ,OAAO,cAAc,aAAa,uCAAuC;AAAA,EACvF,EAAE,IAAI,eAAe,OAAO,qBAAqB,aAAa,8BAA8B;AAAA,EAC5F,EAAE,IAAI,OAAO,OAAO,oBAAoB,aAAa,uBAAuB;AAAA,EAC5E,EAAE,IAAI,SAAS,OAAO,eAAe,aAAa,sBAAsB;AAAA,EACxE,EAAE,IAAI,cAAc,OAAO,oBAAoB,aAAa,yBAAyB;AAAA,EACrF,EAAE,IAAI,eAAe,OAAO,qBAAqB,aAAa,0BAA0B;AAAA,EACxF,EAAE,IAAI,YAAY,OAAO,kBAAkB,aAAa,yBAAyB;AAAA,EACjF,EAAE,IAAI,iBAAiB,OAAO,uBAAuB,aAAa,kBAAkB;AAAA,EACpF,EAAE,IAAI,UAAU,OAAO,qBAAqB,aAAa,wBAAwB;AAAA,EACjF,EAAE,IAAI,YAAY,OAAO,kBAAkB,aAAa,0BAA0B;AACtF;AAIO,IAAM,kBAAkB;AAAA;AAAA,EAE3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;;;ACxGO,IAAM,kBAAkB;AAAA;AAAA,EAE3B,EAAE,KAAK,iBAAiB,UAAU,QAAQ;AAAA,EAC1C,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA,EACvC,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA,EACvC,EAAE,KAAK,iBAAiB,UAAU,QAAQ;AAAA,EAC1C,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA,EACvC,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA,EACvC,EAAE,KAAK,OAAO,UAAU,QAAQ;AAAA,EAChC,EAAE,KAAK,WAAW,UAAU,QAAQ;AAAA,EACpC,EAAE,KAAK,aAAa,UAAU,QAAQ;AAAA,EACtC,EAAE,KAAK,WAAW,UAAU,QAAQ;AAAA,EACpC,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA;AAAA,EAEzC,EAAE,KAAK,yBAAyB,UAAU,QAAQ;AAAA,EAClD,EAAE,KAAK,oBAAoB,UAAU,QAAQ;AAAA,EAC7C,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA,EACzC,EAAE,KAAK,aAAa,UAAU,QAAQ;AAAA,EACtC,EAAE,KAAK,eAAe,UAAU,QAAQ;AAAA;AAAA,EAExC,EAAE,KAAK,YAAY,UAAU,QAAQ;AAAA,EACrC,EAAE,KAAK,kBAAkB,UAAU,QAAQ;AAAA,EAC3C,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA;AAAA,EAEvC,EAAE,KAAK,eAAe,UAAU,QAAQ;AAAA,EACxC,EAAE,KAAK,yBAAyB,UAAU,QAAQ;AAAA;AAAA,EAElD,EAAE,KAAK,eAAe,UAAU,QAAQ;AAAA,EACxC,EAAE,KAAK,qBAAqB,UAAU,QAAQ;AAAA,EAC9C,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA,EACzC,EAAE,KAAK,mBAAmB,UAAU,QAAQ;AAAA;AAAA,EAE5C,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA,EACzC,EAAE,KAAK,kBAAkB,UAAU,QAAQ;AAAA;AAAA,EAE3C,EAAE,KAAK,yBAAyB,UAAU,QAAQ;AAAA,EAClD,EAAE,KAAK,wBAAwB,UAAU,QAAQ;AAAA,EACjD,EAAE,KAAK,yBAAyB,UAAU,QAAQ;AAAA;AAAA,EAElD,EAAE,KAAK,kBAAkB,UAAU,QAAQ;AAAA,EAC3C,EAAE,KAAK,kBAAkB,UAAU,QAAQ;AAAA,EAC3C,EAAE,KAAK,kBAAkB,UAAU,QAAQ;AAAA,EAC3C,EAAE,KAAK,aAAa,UAAU,QAAQ;AAAA;AAAA,EAEtC,EAAE,KAAK,YAAY,UAAU,OAAO;AAAA,EACpC,EAAE,KAAK,aAAa,UAAU,OAAO;AAAA,EACrC,EAAE,KAAK,aAAa,UAAU,OAAO;AAAA,EACrC,EAAE,KAAK,YAAY,UAAU,OAAO;AAAA,EACpC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA,EAClC,EAAE,KAAK,cAAc,UAAU,OAAO;AAAA,EACtC,EAAE,KAAK,qBAAqB,UAAU,OAAO;AAAA,EAC7C,EAAE,KAAK,QAAQ,UAAU,OAAO;AAAA,EAChC,EAAE,KAAK,mBAAmB,UAAU,OAAO;AAAA,EAC3C,EAAE,KAAK,SAAS,UAAU,OAAO;AAAA;AAAA,EAEjC,EAAE,KAAK,mBAAmB,UAAU,OAAO;AAAA,EAC3C,EAAE,KAAK,eAAe,UAAU,OAAO;AAAA,EACvC,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA;AAAA,EAExC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA,EAClC,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA,EACxC,EAAE,KAAK,aAAa,UAAU,OAAO;AAAA,EACrC,EAAE,KAAK,sBAAsB,UAAU,OAAO;AAAA,EAC9C,EAAE,KAAK,OAAO,UAAU,OAAO;AAAA,EAC/B,EAAE,KAAK,OAAO,UAAU,OAAO;AAAA;AAAA,EAE/B,EAAE,KAAK,iBAAiB,UAAU,OAAO;AAAA,EACzC,EAAE,KAAK,oBAAoB,UAAU,OAAO;AAAA,EAC5C,EAAE,KAAK,wBAAwB,UAAU,OAAO;AAAA;AAAA,EAEhD,EAAE,KAAK,cAAc,UAAU,OAAO;AAAA,EACtC,EAAE,KAAK,oBAAoB,UAAU,OAAO;AAAA;AAAA,EAE5C,EAAE,KAAK,YAAY,UAAU,OAAO;AAAA,EACpC,EAAE,KAAK,eAAe,UAAU,OAAO;AAAA,EACvC,EAAE,KAAK,kBAAkB,UAAU,OAAO;AAAA;AAAA,EAE1C,EAAE,KAAK,eAAe,UAAU,OAAO;AAAA;AAAA,EAEvC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA,EAClC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA,EAClC,EAAE,KAAK,iBAAiB,UAAU,OAAO;AAAA;AAAA,EAEzC,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA,EACxC,EAAE,KAAK,YAAY,UAAU,OAAO;AAAA,EACpC,EAAE,KAAK,kBAAkB,UAAU,OAAO;AAAA,EAC1C,EAAE,KAAK,aAAa,UAAU,OAAO;AAAA,EACrC,EAAE,KAAK,eAAe,UAAU,OAAO;AAAA,EACvC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA;AAAA,EAElC,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA,EACxC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA,EAClC,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA;AAAA,EAElC,EAAE,KAAK,qBAAqB,UAAU,OAAO;AAAA;AAAA,EAE7C,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA;AAAA,EAExC,EAAE,KAAK,mBAAmB,UAAU,OAAO;AAAA;AAAA,EAE3C,EAAE,KAAK,sBAAsB,UAAU,OAAO;AAAA,EAC9C,EAAE,KAAK,UAAU,UAAU,OAAO;AAAA,EAClC,EAAE,KAAK,WAAW,UAAU,OAAO;AAAA,EACnC,EAAE,KAAK,gBAAgB,UAAU,OAAO;AAAA,EACxC,EAAE,KAAK,cAAc,UAAU,OAAO;AAAA,EACtC,EAAE,KAAK,aAAa,UAAU,OAAO;AAAA;AAAA,EAErC,EAAE,KAAK,uBAAuB,UAAU,OAAO;AAAA;AAAA,EAE/C,EAAE,KAAK,eAAe,UAAU,MAAM;AAAA,EACtC,EAAE,KAAK,YAAY,UAAU,MAAM;AAAA,EACnC,EAAE,KAAK,YAAY,UAAU,MAAM;AAAA,EACnC,EAAE,KAAK,WAAW,UAAU,MAAM;AAAA,EAClC,EAAE,KAAK,YAAY,UAAU,MAAM;AAAA,EACnC,EAAE,KAAK,oBAAoB,UAAU,MAAM;AAAA,EAC3C,EAAE,KAAK,QAAQ,UAAU,MAAM;AAAA,EAC/B,EAAE,KAAK,YAAY,UAAU,MAAM;AAAA,EACnC,EAAE,KAAK,YAAY,UAAU,MAAM;AAAA,EACnC,EAAE,KAAK,aAAa,UAAU,MAAM;AAAA,EACpC,EAAE,KAAK,aAAa,UAAU,MAAM;AAAA;AAAA,EAEpC,EAAE,KAAK,iBAAiB,UAAU,MAAM;AAAA,EACxC,EAAE,KAAK,aAAa,UAAU,MAAM;AAAA,EACpC,EAAE,KAAK,6BAA6B,UAAU,MAAM;AAAA,EACpD,EAAE,KAAK,8BAA8B,UAAU,MAAM;AAAA;AAAA,EAErD,EAAE,KAAK,YAAY,UAAU,MAAM;AAAA,EACnC,EAAE,KAAK,OAAO,UAAU,MAAM;AAAA;AAAA,EAE9B,EAAE,KAAK,aAAa,UAAU,MAAM;AAAA,EACpC,EAAE,KAAK,sBAAsB,UAAU,MAAM;AAAA;AAAA,EAE7C,EAAE,KAAK,qBAAqB,UAAU,MAAM;AAAA,EAC5C,EAAE,KAAK,wBAAwB,UAAU,MAAM;AAAA,EAC/C,EAAE,KAAK,wBAAwB,UAAU,MAAM;AAAA;AAAA,EAE/C,EAAE,KAAK,gBAAgB,UAAU,MAAM;AAAA,EACvC,EAAE,KAAK,WAAW,UAAU,MAAM;AAAA;AAAA,EAElC,EAAE,KAAK,sBAAsB,UAAU,SAAS;AAAA,EAChD,EAAE,KAAK,kBAAkB,UAAU,SAAS;AAAA,EAC5C,EAAE,KAAK,eAAe,UAAU,SAAS;AAAA,EACzC,EAAE,KAAK,0BAA0B,UAAU,SAAS;AAAA,EACpD,EAAE,KAAK,cAAc,UAAU,SAAS;AAAA;AAAA,EAExC,EAAE,KAAK,WAAW,UAAU,SAAS;AAAA,EACrC,EAAE,KAAK,iBAAiB,UAAU,SAAS;AAAA,EAC3C,EAAE,KAAK,WAAW,UAAU,SAAS;AAAA;AAAA,EAErC,EAAE,KAAK,gBAAgB,UAAU,SAAS;AAAA,EAC1C,EAAE,KAAK,cAAc,UAAU,SAAS;AAAA,EACxC,EAAE,KAAK,kBAAkB,UAAU,SAAS;AAAA;AAAA,EAE5C,EAAE,KAAK,aAAa,UAAU,SAAS;AAAA;AAAA,EAEvC,EAAE,KAAK,cAAc,UAAU,SAAS;AAAA,EACxC,EAAE,KAAK,4BAA4B,UAAU,SAAS;AAAA;AAAA,EAEtD,EAAE,KAAK,gBAAgB,UAAU,YAAY;AAAA,EAC7C,EAAE,KAAK,qBAAqB,UAAU,YAAY;AAAA,EAClD,EAAE,KAAK,kBAAkB,UAAU,YAAY;AAAA,EAC/C,EAAE,KAAK,oBAAoB,UAAU,YAAY;AAAA;AAAA,EAEjD,EAAE,KAAK,UAAU,UAAU,YAAY;AAAA,EACvC,EAAE,KAAK,WAAW,UAAU,YAAY;AAAA,EACxC,EAAE,KAAK,cAAc,UAAU,YAAY;AAAA;AAAA,EAE3C,EAAE,KAAK,gBAAgB,UAAU,YAAY;AAAA,EAC7C,EAAE,KAAK,qBAAqB,UAAU,YAAY;AAAA;AAAA,EAElD,EAAE,KAAK,eAAe,UAAU,YAAY;AAAA;AAAA,EAE5C,EAAE,KAAK,iBAAiB,UAAU,QAAQ;AAAA,EAC1C,EAAE,KAAK,uBAAuB,UAAU,QAAQ;AAAA,EAChD,EAAE,KAAK,eAAe,UAAU,QAAQ;AAAA,EACxC,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA,EACzC,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA,EACzC,EAAE,KAAK,mBAAmB,UAAU,QAAQ;AAAA,EAC5C,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA;AAAA,EAEvC,EAAE,KAAK,sBAAsB,UAAU,QAAQ;AAAA,EAC/C,EAAE,KAAK,wBAAwB,UAAU,QAAQ;AAAA,EACjD,EAAE,KAAK,gCAAgC,UAAU,QAAQ;AAAA;AAAA,EAEzD,EAAE,KAAK,mBAAmB,UAAU,QAAQ;AAAA,EAC5C,EAAE,KAAK,uBAAuB,UAAU,QAAQ;AAAA;AAAA,EAEhD,EAAE,KAAK,eAAe,UAAU,QAAQ;AAAA;AAAA,EAExC,EAAE,KAAK,2BAA2B,UAAU,QAAQ;AAAA,EACpD,EAAE,KAAK,0BAA0B,UAAU,QAAQ;AAAA;AAAA,EAEnD,EAAE,KAAK,qBAAqB,UAAU,YAAY;AAAA,EAClD,EAAE,KAAK,0BAA0B,UAAU,YAAY;AAAA,EACvD,EAAE,KAAK,oBAAoB,UAAU,YAAY;AAAA,EACjD,EAAE,KAAK,sBAAsB,UAAU,YAAY;AAAA,EACnD,EAAE,KAAK,8BAA8B,UAAU,YAAY;AAAA,EAC3D,EAAE,KAAK,eAAe,UAAU,YAAY;AAAA,EAC5C,EAAE,KAAK,mBAAmB,UAAU,YAAY;AAAA;AAAA,EAEhD,EAAE,KAAK,qBAAqB,UAAU,QAAQ;AAAA,EAC9C,EAAE,KAAK,kBAAkB,UAAU,QAAQ;AAAA,EAC3C,EAAE,KAAK,mBAAmB,UAAU,QAAQ;AAAA,EAC5C,EAAE,KAAK,sBAAsB,UAAU,QAAQ;AAAA,EAC/C,EAAE,KAAK,oBAAoB,UAAU,QAAQ;AAAA;AAAA,EAE7C,EAAE,KAAK,mBAAmB,UAAU,QAAQ;AAAA,EAC5C,EAAE,KAAK,aAAa,UAAU,QAAQ;AAAA,EACtC,EAAE,KAAK,cAAc,UAAU,QAAQ;AAAA,EACvC,EAAE,KAAK,oBAAoB,UAAU,QAAQ;AAAA,EAC7C,EAAE,KAAK,gBAAgB,UAAU,QAAQ;AAAA,EACzC,EAAE,KAAK,0BAA0B,UAAU,QAAQ;AAAA,EACnD,EAAE,KAAK,oBAAoB,UAAU,QAAQ;AACjD;AAIO,IAAM,wBAAwB,CAAC,aAAa,gBAAgB,OAAO,OAAK,EAAE,aAAa,QAAQ,EAAE,IAAI,OAAK,EAAE,GAAG;AAI/G,IAAM,uBAAuB;AAAA,EAChC,OAAO,sBAAsB,OAAO;AAAA,EACpC,MAAM,sBAAsB,MAAM;AAAA,EAClC,MAAM,sBAAsB,MAAM;AAAA,EAClC,KAAK,sBAAsB,KAAK;AAAA,EAChC,QAAQ,sBAAsB,QAAQ;AAAA,EACtC,WAAW,sBAAsB,WAAW;AAAA,EAC5C,OAAO,sBAAsB,OAAO;AAAA,EACpC,WAAW,sBAAsB,WAAW;AAAA,EAC5C,YAAY,sBAAsB,OAAO;AAC7C;;;AClLA,SAAS,YAAoC,SAAuD;AAClG,SAAO,QAAQ,IAAI,CAAC,OAAO;AAAA,IACzB,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,KAAK,EAAE;AAAA,IAC3C,OAAO,EAAE;AAAA,EACX,EAAE;AACJ;AAEA,SAAS,oBACP,SAC+D;AAC/D,SAAO,QAAQ,IAAI,CAAC,OAAO;AAAA,IACzB,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,KAAK,EAAE;AAAA,IAC3C,OAAO,EAAE;AAAA,IACT,aAAa,EAAE;AAAA,EACjB,EAAE;AACJ;AAGO,IAAMG,aAAY,YAAY,SAAgB;AAC9C,IAAMC,cAAa,YAAY,UAAiB;AAChD,IAAMC,aAAY,YAAY,SAAgB;AAC9C,IAAMC,oBAAmB,iBAAwB,IAAI,CAAC,OAAO;AAAA,EAClE,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,EAC3B,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAMC,kBAAiB,eAAsB,IAAI,CAAC,OAAO;AAAA,EAC9D,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,EAC3B,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAMC,eAAc,YAAmB,IAAI,CAAC,OAAO;AAAA,EACxD,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,EAC3B,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAMC,eAAc,YAAmB,IAAI,CAAC,OAAO;AAAA,EACxD,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,KAAK,EAAE;AAAA,EAC3C,OAAO,EAAE;AAAA,EACT,OAAO,EAAE,aAAa,CAAC;AACzB,EAAE;AAGK,IAAMC,iBAAgB,cAAqB,IAAI,CAAC,OAAO;AAAA,EAC5D,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AAAA,EACR,aAAa,EAAE;AACjB,EAAE;AACK,IAAMC,yBAAwB,sBAA6B,IAAI,CAAC,OAAO;AAAA,EAC5E,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,aAAa,EAAE;AACjB,EAAE;AACK,IAAMC,kBAAiB,eAAsB,IAAI,CAAC,OAAO;AAAA,EAC9D,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AAGK,IAAMC,cAAa,WAAkB,IAAI,CAAC,OAAO;AAAA,EACtD,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAMC,gBAAe,aAAoB,IAAI,CAAC,OAAO;AAAA,EAC1D,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAMC,YAAW,SAAgB,IAAI,CAAC,OAAO;AAAA,EAClD,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AACX,EAAE;AACK,IAAMC,qBAAoB,oBAAoB,iBAAwB;AACtE,IAAMC,oBAAmB,YAAY,gBAAuB;AAC5D,IAAMC,uBAAsB,YAAY,mBAA0B;AAClE,IAAMC,iBAAgB,YAAY,aAAoB;AACtD,IAAMC,sBAAqB,CAAC,GAAGF,sBAAqB,GAAGC,cAAa;AACpE,IAAME,wBAAuB,qBAA4B,IAAI,CAAC,OAAO;AAAA,EAC1E,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AAGK,IAAMC,uBAAsB,oBAAoB,mBAA0B;AAC1E,IAAMC,qBAAoB,oBAAoB,iBAAwB;AAGtE,IAAMC,eAAc,oBAAoB,WAAkB;AAC1D,IAAMC,gBAAe,oBAAoB,YAAmB;AAG5D,IAAMC,qBAAoB,kBAAyB,IAAI,CAAC,OAAO;AAAA,EACpE,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,aAAa,EAAE;AAAA,EACf,aAAa,EAAE;AACjB,EAAE;AACK,IAAMC,mBAAkB,gBAAuB,IAAI,CAAC,OAAO;AAAA,EAChE,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AAAA,EACR,aAAa,EAAE;AACjB,EAAE;AACK,IAAMC,uBAAsB,oBAAoB,mBAA0B;AAG1E,IAAMC,kBAAiB,oBAAoB,cAAqB;AAChE,IAAMC,8BAA6B,oBAAoB,0BAAiC;AACxF,IAAMC,4BAA2B,oBAAoB,wBAA+B;AACpF,IAAMC,yBAAwB,oBAAoB,qBAA4B;AAC9E,IAAMC,yBAAwB,oBAAoB,qBAA4B;AAC9E,IAAMC,sBAAqB,oBAAoB,kBAAyB;AACxE,IAAMC,qBAAoB,oBAAoB,iBAAwB;AAGtE,IAAMC,sBAAqB,mBAA0B,IAAI,CAAC,OAAO;AAAA,EACtE,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAM,iBAAiB,wBAA+B,IAAI,CAAC,OAAO;AAAA,EACvE,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AACX,EAAE;AACK,IAAMC,mBAAkB,gBAAuB,IAAI,CAAC,OAAO;AAAA,EAChE,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AACX,EAAE;AACK,IAAMC,oBAAmB,iBAAwB,IAAI,CAAC,MAAM,EAAE,MAAM;AAGpE,IAAMC,eAAc,YAAmB,IAAI,CAAC,OAAO;AAAA,EACxD,IAAI,EAAE;AAAA,EACN,OAAO,EAAE;AAAA,EACT,MAAM,EAAE;AACV,EAAE;AACK,IAAMC,mBAAkB;;;AblL/B,IAAM,aAAa;AAInB,IAAM,cAAsB;AAY5B,eAAe,iBAAiB,MAAcC,SAAiC,aAAqC;AAClH,QAAM,aAAaC,MAAK,QAAQ,IAAI,GAAG,UAAU;AACjD,QAAMC,OAAM,YAAY,EAAE,WAAW,KAAK,CAAC;AAE3C,QAAM,QAAqB;AAAA,IACzB;AAAA,IACA,UAAS,oBAAI,KAAK,GAAE,YAAY;AAAA,IAChC,QAAAF;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAEA,QAAM,WAAW,GAAG,KAAK,QAAQ,mBAAmB,GAAG,CAAC;AACxD,QAAMG,WAAUF,MAAK,YAAY,QAAQ,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,OAAO;AACrF;AAEA,eAAe,iBAAiB,MAA2C;AACzE,MAAI;AACF,UAAM,WAAW,GAAG,KAAK,QAAQ,mBAAmB,GAAG,CAAC;AACxD,UAAM,WAAWA,MAAK,QAAQ,IAAI,GAAG,YAAY,QAAQ;AACzD,UAAM,UAAU,MAAMG,UAAS,UAAU,OAAO;AAChD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,kBAAqC;AAClD,MAAI;AACF,UAAM,aAAaH,MAAK,QAAQ,IAAI,GAAG,UAAU;AACjD,UAAMI,QAAO,UAAU;AACvB,UAAM,QAAQ,MAAM,OAAO,aAAa,EAAE,KAAK,CAAAC,QAAMA,IAAG,QAAQ,UAAU,CAAC;AAC3E,WAAO,MACJ,OAAO,OAAK,EAAE,SAAS,OAAO,CAAC,EAC/B,IAAI,OAAK,EAAE,QAAQ,SAAS,EAAE,CAAC;AAAA,EACpC,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAGA,IAAMC,qBAA4C;AAAA,EAChD,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW;AACb;AAGA,eAAe,iBAAiB,UAA0C;AACxE,MAAI;AACF,UAAMF,QAAO,QAAQ;AACrB,UAAM,UAAU,MAAMD,UAAS,UAAU,OAAO;AAChD,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAe,mBAAmB,QAAiC;AACjE,UAAQ,IAAII,OAAM,MAAM,MAAM,CAAC;AAC/B,UAAQ,IAAIA,OAAM,KAAK,+EAA+E,CAAC;AACvG,UAAQ,IAAIA,OAAM,KAAK,+BAA+B,CAAC;AACvD,UAAQ,IAAI;AAEZ,QAAM,KAAc,yBAAgB;AAAA,IAClC,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,QAAkB,CAAC;AACzB,QAAI,iBAAiB;AAErB,OAAG,GAAG,QAAQ,CAAC,SAAS;AACtB,UAAI,KAAK,KAAK,MAAM,OAAO;AACzB,WAAG,MAAM;AACT,gBAAQ,MAAM,KAAK,IAAI,CAAC;AACxB;AAAA,MACF;AAEA,UAAI,SAAS,IAAI;AACf;AACA,YAAI,kBAAkB,KAAK,MAAM,WAAW,GAAG;AAE7C,aAAG,MAAM;AACT,kBAAQ,EAAE;AACV;AAAA,QACF;AAAA,MACF,OAAO;AACL,yBAAiB;AAAA,MACnB;AAEA,YAAM,KAAK,IAAI;AAAA,IACjB,CAAC;AAED,OAAG,GAAG,SAAS,MAAM;AACnB,cAAQ,MAAM,KAAK,IAAI,CAAC;AAAA,IAC1B,CAAC;AAAA,EACH,CAAC;AACH;AAmCA,IAAM,eAA6B;AAAA,EACjC,EAAE,IAAI,UAAU,OAAO,iBAAiB,MAAM,YAAK;AAAA,EACnD,EAAE,IAAI,WAAW,OAAO,kBAAkB,MAAM,SAAI;AAAA,EACpD,EAAE,IAAI,QAAQ,OAAO,cAAc,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,QAAQ,OAAO,oBAAoB,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,MAAM,OAAO,eAAe,MAAM,YAAK;AAAA,EAC7C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,kBAAM;AAAA,EACrD,EAAE,IAAI,WAAW,OAAO,oBAAoB,MAAM,YAAK;AAAA,EACvD,EAAE,IAAI,UAAU,OAAO,gBAAgB,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,SAAS,OAAO,iBAAiB,MAAM,YAAK;AACpD;AAQA,IAAM,gBAAgB;AAAA;AAAA,EAEpB,EAAE,IAAI,aAAa,MAAM,yBAAyB,MAAM,aAAa,MAAM,aAAM,MAAM,0DAA0D;AAAA,EACjJ,EAAE,IAAI,UAAU,MAAM,UAAU,MAAM,kBAAkB,MAAM,UAAK,MAAM,2CAA2C;AAAA,EACpH,EAAE,IAAI,UAAU,MAAM,eAAe,MAAM,aAAa,MAAM,aAAM,MAAM,kCAAkC;AAAA,EAC5G,EAAE,IAAI,WAAW,MAAM,kBAAkB,MAAM,mCAAmC,MAAM,aAAM,MAAM,8BAA8B;AAAA,EAClI,EAAE,IAAI,YAAY,MAAM,YAAY,MAAM,kBAAkB,MAAM,aAAM,MAAM,0BAA0B;AAAA;AAAA,EAExG,EAAE,IAAI,eAAe,MAAM,eAAe,MAAM,aAAa,MAAM,aAAM,MAAM,8BAA8B;AAAA,EAC7G,EAAE,IAAI,OAAO,MAAM,OAAO,MAAM,wBAAwB,MAAM,UAAK,MAAM,kCAAkC;AAAA,EAC3G,EAAE,IAAI,QAAQ,MAAM,QAAQ,MAAM,qBAAqB,MAAM,mBAAO,MAAM,iCAAiC;AAAA,EAC3G,EAAE,IAAI,QAAQ,MAAM,WAAW,MAAM,gBAAgB,MAAM,aAAM,MAAM,qBAAqB;AAAA,EAC5F,EAAE,IAAI,YAAY,MAAM,mBAAmB,MAAM,SAAS,MAAM,aAAM,MAAM,qBAAqB;AAAA;AAAA,EAEjG,EAAE,IAAI,SAAS,MAAM,SAAS,MAAM,eAAe,MAAM,aAAM,MAAM,sCAAsC;AAAA,EAC3G,EAAE,IAAI,WAAW,MAAM,YAAY,MAAM,eAAe,MAAM,aAAM,MAAM,kCAAkC;AAAA,EAC5G,EAAE,IAAI,YAAY,MAAM,YAAY,MAAM,yBAAyB,MAAM,gBAAM,MAAM,2BAA2B;AAAA,EAChH,EAAE,IAAI,QAAQ,MAAM,oBAAoB,MAAM,qBAAqB,MAAM,aAAM,MAAM,6BAA6B;AAAA,EAClH,EAAE,IAAI,WAAW,MAAM,WAAW,MAAM,iBAAiB,MAAM,aAAM,MAAM,qBAAqB;AAAA,EAChG,EAAE,IAAI,cAAc,MAAM,cAAc,MAAM,2BAA2B,MAAM,aAAM,MAAM,2BAA2B;AAAA,EACtH,EAAE,IAAI,WAAW,MAAM,WAAW,MAAM,wBAAwB,MAAM,aAAM,MAAM,uBAAuB;AAAA,EACzG,EAAE,IAAI,WAAW,MAAM,YAAY,MAAM,mBAAmB,MAAM,aAAM,MAAM,0BAA0B;AAAA,EACxG,EAAE,IAAI,WAAW,MAAM,gBAAgB,MAAM,mBAAmB,MAAM,aAAM,MAAM,uBAAuB;AAAA,EACzG,EAAE,IAAI,YAAY,MAAM,aAAa,MAAM,oBAAoB,MAAM,aAAM,MAAM,qBAAqB;AAAA,EACtG,EAAE,IAAI,SAAS,MAAM,SAAS,MAAM,wBAAwB,MAAM,aAAM,MAAM,yBAAyB;AAAA,EACvG,EAAE,IAAI,QAAQ,MAAM,QAAQ,MAAM,mBAAmB,MAAM,aAAM,MAAM,wBAAwB;AAAA;AAAA,EAE/F,EAAE,IAAI,SAAS,MAAM,SAAS,MAAM,YAAY,MAAM,aAAM,MAAM,kCAAkC;AAAA,EACpG,EAAE,IAAI,SAAS,MAAM,SAAS,MAAM,eAAe,MAAM,aAAM,MAAM,0BAA0B;AAAA,EAC/F,EAAE,IAAI,QAAQ,MAAM,WAAW,MAAM,WAAW,MAAM,aAAM,MAAM,sBAAsB;AAAA,EACxF,EAAE,IAAI,cAAc,MAAM,cAAc,MAAM,aAAa,MAAM,aAAM,MAAM,8BAA8B;AAAA,EAC3G,EAAE,IAAI,YAAY,MAAM,aAAa,MAAM,iBAAiB,MAAM,aAAM,MAAM,wBAAwB;AAAA;AAAA,EAEtG,EAAE,IAAI,aAAa,MAAM,aAAa,MAAM,kCAAkC,MAAM,aAAM,MAAM,uBAAuB;AAAA,EACvH,EAAE,IAAI,SAAS,MAAM,SAAS,MAAM,YAAY,MAAM,aAAM,MAAM,sBAAsB;AAAA,EACxF,EAAE,IAAI,cAAc,MAAM,cAAc,MAAM,mBAAmB,MAAM,aAAM,MAAM,yBAAyB;AAC9G;AAIA,IAAMC,aAAYA;AAClB,IAAMC,cAAaA;AACnB,IAAMC,aAAYA;AAGlB,IAAMC,oBAAmB;AAAA,EACvB,EAAE,OAAO,iBAAU,OAAO,OAAO,MAAM,iCAAiC;AAAA,EACxE,EAAE,OAAO,kBAAW,OAAO,QAAQ,MAAM,6BAA6B;AAAA,EACtE,EAAE,OAAO,kBAAW,OAAO,QAAQ,MAAM,6BAA6B;AAAA,EACtE,EAAE,OAAO,iBAAU,OAAO,OAAO,MAAM,6BAA6B;AACtE;AAGA,IAAMC,eAAc;AAAA,EAClB,EAAE,OAAO,qBAAc,OAAO,QAAQ,MAAM,8BAA8B;AAAA,EAC1E,EAAE,OAAO,kBAAW,OAAO,QAAQ,MAAM,iCAAiC;AAAA,EAC1E,EAAE,OAAO,iBAAU,OAAO,OAAO,MAAM,6BAA6B;AACtE;AAGA,IAAMC,kBAAiB;AAAA,EACrB,EAAE,OAAO,kBAAW,OAAO,IAAI,MAAM,4BAA4B;AAAA,EACjE,EAAE,OAAO,oBAAe,OAAO,aAAa,MAAM,gCAAgC;AAAA,EAClF,EAAE,OAAO,gBAAS,OAAO,MAAM,MAAM,oCAAoC;AAAA,EACzE,EAAE,OAAO,mBAAY,OAAO,SAAS,MAAM,6BAA6B;AAAA,EACxE,EAAE,OAAO,6BAAsB,OAAO,mBAAmB,MAAM,uBAAuB;AAAA,EACtF,EAAE,OAAO,6BAAsB,OAAO,mBAAmB,MAAM,uBAAuB;AAAA,EACtF,EAAE,OAAO,4BAAqB,OAAO,kBAAkB,MAAM,sBAAsB;AACrF;AAGA,IAAMC,eAAc;AAAA,EAClB,EAAE,OAAO,4BAAqB,OAAO,IAAI,OAAO,CAAC,EAAE;AAAA;AAAA,EAEnD,EAAE,OAAO,oBAAa,OAAO,UAAU,OAAO,CAAC,cAAc,YAAY,EAAE;AAAA,EAC3E,EAAE,OAAO,qBAAc,OAAO,WAAW,OAAO,CAAC,cAAc,YAAY,EAAE;AAAA,EAC7E,EAAE,OAAO,qBAAc,OAAO,WAAW,OAAO,CAAC,cAAc,YAAY,EAAE;AAAA,EAC7E,EAAE,OAAO,uBAAgB,OAAO,aAAa,OAAO,CAAC,cAAc,YAAY,EAAE;AAAA,EACjF,EAAE,OAAO,qBAAc,OAAO,QAAQ,OAAO,CAAC,cAAc,YAAY,EAAE;AAAA,EAC1E,EAAE,OAAO,oBAAa,OAAO,UAAU,OAAO,CAAC,cAAc,YAAY,EAAE;AAAA;AAAA,EAE3E,EAAE,OAAO,wBAAiB,OAAO,cAAc,OAAO,CAAC,QAAQ,EAAE;AAAA,EACjE,EAAE,OAAO,wBAAiB,OAAO,cAAc,OAAO,CAAC,QAAQ,EAAE;AAAA,EACjE,EAAE,OAAO,0BAAmB,OAAO,YAAY,OAAO,CAAC,QAAQ,EAAE;AAAA,EACjE,EAAE,OAAO,mBAAc,OAAO,YAAY,OAAO,CAAC,QAAQ,EAAE;AAAA;AAAA,EAE5D,EAAE,OAAO,kBAAW,OAAO,QAAQ,OAAO,CAAC,IAAI,EAAE;AAAA,EACjD,EAAE,OAAO,uBAAW,OAAO,OAAO,OAAO,CAAC,IAAI,EAAE;AAAA,EAChD,EAAE,OAAO,kBAAW,OAAO,QAAQ,OAAO,CAAC,IAAI,EAAE;AAAA;AAAA,EAEjD,EAAE,OAAO,oBAAa,OAAO,UAAU,OAAO,CAAC,MAAM,EAAE;AAAA,EACvD,EAAE,OAAO,oBAAa,OAAO,WAAW,OAAO,CAAC,MAAM,EAAE;AAAA,EACxD,EAAE,OAAO,kBAAW,OAAO,QAAQ,OAAO,CAAC,MAAM,EAAE;AAAA;AAAA,EAEnD,EAAE,OAAO,oBAAe,OAAO,aAAa,OAAO,CAAC,QAAQ,QAAQ,EAAE;AAAA,EACtE,EAAE,OAAO,kBAAW,OAAO,QAAQ,OAAO,CAAC,QAAQ,QAAQ,EAAE;AAAA;AAAA,EAE7D,EAAE,OAAO,8BAAuB,OAAO,WAAW,OAAO,CAAC,QAAQ,EAAE;AAAA,EACpE,EAAE,OAAO,iBAAY,OAAO,UAAU,OAAO,CAAC,QAAQ,EAAE;AAAA;AAAA,EAExD,EAAE,OAAO,0BAAmB,OAAO,gBAAgB,OAAO,CAAC,MAAM,EAAE;AAAA;AAAA,EAEnE,EAAE,OAAO,sBAAe,OAAO,YAAY,OAAO,CAAC,KAAK,EAAE;AAAA,EAC1D,EAAE,OAAO,sBAAe,OAAO,YAAY,OAAO,CAAC,KAAK,EAAE;AAC5D;AAGA,IAAMC,cAAa;AAAA,EACjB,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,SAAS,OAAO,gBAAgB,MAAM,eAAK;AAAA,EACjD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAC5C;AAGA,IAAMC,YAAW;AAAA,EACf,EAAE,IAAI,OAAO,OAAO,MAAM;AAAA,EAC1B,EAAE,IAAI,cAAc,OAAO,aAAa;AAAA,EACxC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,YAAY,OAAO,WAAW;AAAA,EACpC,EAAE,IAAI,YAAY,OAAO,WAAW;AAAA,EACpC,EAAE,IAAI,SAAS,OAAO,eAAe;AAAA,EACrC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,aAAa,OAAO,YAAY;AAAA,EACtC,EAAE,IAAI,QAAQ,OAAO,qBAAqB;AAC5C;AAGA,IAAMC,gBAAe;AAAA,EACnB,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,YAAK;AAAA,EAC5D,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,SAAI;AAAA,EAC/C,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,YAAK;AAAA,EAC/C,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,eAAK;AAAA,EACxD,EAAE,IAAI,aAAa,OAAO,uBAAuB,MAAM,YAAK;AAAA,EAC5D,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,eAAK;AAAA,EAClD,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,QAAQ,OAAO,iBAAiB,MAAM,YAAK;AAAA,EACjD,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAC5C;AAGA,IAAMC,iBAAgB;AAAA,EACpB,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,UAAK;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,MAAM,YAAK;AAAA,EAChE,EAAE,IAAI,sBAAsB,OAAO,sBAAsB,MAAM,YAAK;AAAA,EACpE,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,gBAAM;AAAA,EACrD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM;AAAA,EAC/C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM;AAAA,EAC/C,EAAE,IAAI,gBAAgB,OAAO,iBAAiB,MAAM,YAAK;AAAA,EACzD,EAAE,IAAI,iBAAiB,OAAO,kBAAkB,MAAM,YAAK;AAAA,EAC3D,EAAE,IAAI,oBAAoB,OAAO,qBAAqB,MAAM,YAAK;AAAA,EACjE,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,YAAK;AAAA,EAC9D,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,OAAO,OAAO,UAAU,MAAM,gBAAM;AAAA,EAC1C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,oBAAoB,OAAO,6BAA6B,MAAM,YAAK;AAAA,EACzE,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,YAAK;AACxD;AAGA,IAAMC,uBAAsB;AAAA,EAC1B,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,MAAM,YAAK;AAAA,EAC5D,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,gBAAM;AAAA,EACrD,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,gBAAM;AAAA,EACvC,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,mBAAO;AAAA,EACtD,EAAE,IAAI,MAAM,OAAO,mBAAmB,MAAM,YAAK;AAAA,EACjD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,UAAU,OAAO,UAAU,MAAM,YAAK;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,YAAY,OAAO,gBAAgB,MAAM,YAAK;AAAA,EACpD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,gBAAM;AAAA,EAC/C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,YAAK;AAAA,EAChD,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,YAAK;AAAA,EAClD,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAChD;AAGA,IAAMC,wBAAuB;AAAA,EAC3B,EAAE,IAAI,aAAa,OAAO,cAAc,MAAM,YAAK;AAAA,EACnD,EAAE,IAAI,QAAQ,OAAO,6BAA6B,MAAM,YAAK;AAAA,EAC7D,EAAE,IAAI,OAAO,OAAO,6BAA6B,MAAM,YAAK;AAAA,EAC5D,EAAE,IAAI,OAAO,OAAO,WAAW,MAAM,eAAK;AAAA,EAC1C,EAAE,IAAI,OAAO,OAAO,4BAA4B,MAAM,YAAK;AAAA,EAC3D,EAAE,IAAI,QAAQ,OAAO,WAAW,MAAM,YAAK;AAAA,EAC3C,EAAE,IAAI,UAAU,OAAO,mBAAmB,MAAM,YAAK;AAAA,EACrD,EAAE,IAAI,UAAU,OAAO,sBAAsB,MAAM,YAAK;AAC1D;AAGA,IAAMC,mBAAkB;AAAA,EACtB,OAAO;AAAA;AAAA,IAEL;AAAA,IAAiB;AAAA,IAAc;AAAA,IAAc;AAAA,IAC7C;AAAA,IAAc;AAAA,IAAc;AAAA,IAAO;AAAA,IACnC;AAAA,IAAW;AAAA,IAAa;AAAA,IAAW;AAAA;AAAA,IAEnC;AAAA,IAAyB;AAAA,IAAoB;AAAA,IAAgB;AAAA,IAAa;AAAA;AAAA,IAE1E;AAAA,IAAY;AAAA,IAAkB;AAAA;AAAA,IAE9B;AAAA,IAAe;AAAA;AAAA,IAEf;AAAA,IAAe;AAAA,IAAqB;AAAA;AAAA,IAEpC;AAAA,IAAgB;AAAA;AAAA,IAEhB;AAAA,IAA0B;AAAA;AAAA,IAE1B;AAAA,IAAoB;AAAA;AAAA,IAEpB;AAAA,IAAyB;AAAA;AAAA,IAEzB;AAAA,IAAQ;AAAA,IAAc;AAAA,EACxB;AAAA,EACA,MAAM;AAAA;AAAA,IAEJ;AAAA,IAAY;AAAA,IAAa;AAAA,IAAa;AAAA,IACtC;AAAA,IAAU;AAAA,IAAc;AAAA,IAAQ;AAAA,IAChC;AAAA,IAAS;AAAA,IAAO;AAAA;AAAA,IAEhB;AAAA,IAAmB;AAAA,IAAe;AAAA,IAClC;AAAA,IAAa;AAAA;AAAA,IAEb;AAAA,IAAU;AAAA,IAAgB;AAAA,IAC1B;AAAA,IAAY;AAAA,IAAS;AAAA;AAAA,IAErB;AAAA,IAAiB;AAAA,IAAoB;AAAA;AAAA,IAErC;AAAA,IAAc;AAAA;AAAA,IAEd;AAAA,IAAY;AAAA,IAAe;AAAA;AAAA,IAE3B;AAAA;AAAA,IAEA;AAAA,IAAqB;AAAA;AAAA,IAErB;AAAA,IAAW;AAAA;AAAA,IAEX;AAAA,EACF;AAAA,EACA,MAAM;AAAA;AAAA,IAEJ;AAAA,IAAgB;AAAA,IAAa;AAAA,IAAY;AAAA,IACzC;AAAA,IAAsB;AAAA,IACtB;AAAA,IAAe;AAAA;AAAA,IAEf;AAAA,IAAc;AAAA,IAAoB;AAAA,IAClC;AAAA,IAAW;AAAA,IACX;AAAA,IAAU;AAAA,IAAU;AAAA;AAAA,IAEpB;AAAA,IAAqB;AAAA,IAAgB;AAAA;AAAA,IAErC;AAAA,IAAgB;AAAA,IAAa;AAAA;AAAA,IAE7B;AAAA,IAAwB;AAAA;AAAA,IAExB;AAAA,IAAW;AAAA;AAAA,IAEX;AAAA,IAAoB;AAAA,IAAS;AAAA;AAAA,IAE7B;AAAA,EACF;AAAA,EACA,KAAK;AAAA;AAAA,IAEH;AAAA,IAAe;AAAA,IAAY;AAAA,IAAY;AAAA,IACvC;AAAA,IAAY;AAAA,IAAQ;AAAA,IACpB;AAAA,IAAW;AAAA;AAAA,IAEX;AAAA,IAA6B;AAAA,IAAa;AAAA,IAC1C;AAAA,IAAqB;AAAA;AAAA,IAErB;AAAA,IAAY;AAAA,IAAO;AAAA;AAAA,IAEnB;AAAA,IAAa;AAAA;AAAA,IAEb;AAAA,IAAuB;AAAA;AAAA,IAEvB;AAAA,IAAc;AAAA;AAAA,IAEd;AAAA,IAAgB;AAAA;AAAA,IAEhB;AAAA,IAAqB;AAAA;AAAA,IAErB;AAAA,IAAqB;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA;AAAA,IAEN;AAAA,IAAsB;AAAA,IAAkB;AAAA,IACxC;AAAA,IAA0B;AAAA;AAAA,IAE1B;AAAA,IAAW;AAAA,IAAiB;AAAA,IAAW;AAAA;AAAA,IAEvC;AAAA,IAAgB;AAAA,IAAc;AAAA;AAAA,IAE9B;AAAA;AAAA,IAEA;AAAA,IAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA;AAAA,IAET;AAAA,IAAgB;AAAA,IAAqB;AAAA,IACrC;AAAA,IAAoB;AAAA;AAAA,IAEpB;AAAA,IAAU;AAAA,IAAW;AAAA;AAAA,IAErB;AAAA,IAAgB;AAAA;AAAA,IAEhB;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAAA,IAEL;AAAA,IAAiB;AAAA,IAAuB;AAAA,IACxC;AAAA,IAAgB;AAAA,IAAgB;AAAA;AAAA,IAEhC;AAAA,IAAsB;AAAA;AAAA,IAEtB;AAAA,IAAmB;AAAA;AAAA,IAEnB;AAAA;AAAA,IAEA;AAAA,IAA2B;AAAA;AAAA,IAE3B;AAAA,EACF;AAAA,EACA,WAAW;AAAA;AAAA,IAET;AAAA,IAAqB;AAAA,IAA0B;AAAA,IAC/C;AAAA,IAAe;AAAA,IAAmB;AAAA;AAAA,IAElC;AAAA,IAAsB;AAAA,EACxB;AAAA,EACA,YAAY;AAAA;AAAA,IAEV;AAAA,IAAmB;AAAA,IAAsB;AAAA,IACzC;AAAA,IAAwB;AAAA,IACxB;AAAA,IAAoB;AAAA;AAAA,IAEpB;AAAA,IAAmB;AAAA,IAAmB;AAAA;AAAA,IAEtC;AAAA,IAAgB;AAAA,IAAgB;AAAA;AAAA,IAEhC;AAAA,IAAkB;AAAA,IAAU;AAAA,IAC5B;AAAA,IAAiB;AAAA,EACnB;AACF;AAGA,IAAMC,sBAAqB;AAAA,EACzB,EAAE,IAAI,oBAAoB,OAAO,+BAA+B,MAAM,oCAAoC;AAAA,EAC1G,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,+BAA+B;AAAA,EAC5E,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,yBAAyB;AAAA,EACxE,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,mBAAmB;AAAA,EAClE,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,kBAAkB;AACnE;AAGA,IAAMC,kBAAiB;AAAA,EACrB,EAAE,IAAI,aAAa,OAAO,mBAAmB;AAAA,EAC7C,EAAE,IAAI,gBAAgB,OAAO,sBAAsB;AAAA,EACnD,EAAE,IAAI,eAAe,OAAO,cAAc;AAAA,EAC1C,EAAE,IAAI,cAAc,OAAO,oBAAoB;AAAA,EAC/C,EAAE,IAAI,SAAS,OAAO,QAAQ;AAChC;AAGA,IAAMC,mBAAkB;AAAA,EACtB,EAAE,IAAI,mBAAmB,OAAO,kBAAkB;AAAA,EAClD,EAAE,IAAI,eAAe,OAAO,oBAAoB;AAAA,EAChD,EAAE,IAAI,cAAc,OAAO,qCAAqC;AAAA,EAChE,EAAE,IAAI,QAAQ,OAAO,OAAO;AAAA,EAC5B,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,UAAU,OAAO,SAAS;AAAA,EAChC,EAAE,IAAI,kBAAkB,OAAO,iBAAiB;AAAA,EAChD,EAAE,IAAI,SAAS,OAAO,gBAAgB;AAAA,EACtC,EAAE,IAAI,WAAW,OAAO,UAAU;AAAA,EAClC,EAAE,IAAI,iBAAiB,OAAO,gBAAgB;AAAA,EAC9C,EAAE,IAAI,SAAS,OAAO,QAAQ;AAChC;AAGA,IAAMC,qBAAoB;AAAA,EACxB,EAAE,IAAI,4BAA4B,OAAO,+BAA+B,aAAa,kGAAkG,aAAa,KAAK;AAAA,EACzM,EAAE,IAAI,0BAA0B,OAAO,iCAAiC,aAAa,sFAAsF,aAAa,KAAK;AAAA,EAC7L,EAAE,IAAI,2BAA2B,OAAO,2BAA2B,aAAa,mFAAmF,aAAa,KAAK;AAAA,EACrL,EAAE,IAAI,4BAA4B,OAAO,4BAA4B,aAAa,6GAA6G,aAAa,KAAK;AAAA,EACjN,EAAE,IAAI,8BAA8B,OAAO,8BAA8B,aAAa,4HAA4H,aAAa,KAAK;AAAA;AAAA,EAEpO,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,oGAAoG;AAAA,EAChK,EAAE,IAAI,kBAAkB,OAAO,yBAAyB,aAAa,iFAAiF;AAAA,EACtJ,EAAE,IAAI,eAAe,OAAO,sBAAsB,aAAa,8EAA8E,aAAa,KAAK;AAAA,EAC/J,EAAE,IAAI,uBAAuB,OAAO,uBAAuB,aAAa,iDAAiD;AAAA,EACzH,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,mFAAmF;AACvJ;AAOA,IAAMC,8BAA6B;AAAA,EACjC,EAAE,IAAI,YAAY,OAAO,yBAAyB,aAAa,4CAA4C,aAAa,KAAK;AAAA,EAC7H,EAAE,IAAI,UAAU,OAAO,oBAAoB,aAAa,sCAAsC;AAAA,EAC9F,EAAE,IAAI,SAAS,OAAO,mBAAmB,aAAa,gCAAgC;AAAA,EACtF,EAAE,IAAI,eAAe,OAAO,uBAAuB,aAAa,6BAA6B;AAAA,EAC7F,EAAE,IAAI,WAAW,OAAO,2BAA2B,aAAa,iCAAiC;AAAA,EACjG,EAAE,IAAI,eAAe,OAAO,sBAAsB,aAAa,+BAA+B;AAAA,EAC9F,EAAE,IAAI,kBAAkB,OAAO,mBAAmB,aAAa,yBAAyB;AAAA,EACxF,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,iCAAiC;AAAA,EACrF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,6BAA6B;AAAA,EAC7E,EAAE,IAAI,aAAa,OAAO,gCAAgC,aAAa,yBAAyB;AAAA,EAChG,EAAE,IAAI,aAAa,OAAO,6BAA6B,aAAa,wBAAwB;AAAA,EAC5F,EAAE,IAAI,QAAQ,OAAO,kBAAkB,aAAa,2BAA2B;AAAA,EAC/E,EAAE,IAAI,OAAO,OAAO,kBAAkB,aAAa,yBAAyB;AAAA,EAC5E,EAAE,IAAI,kBAAkB,OAAO,wBAAwB,aAAa,+BAA+B;AAAA,EACnG,EAAE,IAAI,oBAAoB,OAAO,6BAA6B,aAAa,4BAA4B;AAAA,EACvG,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,qCAAqC;AAAA,EACzF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,6BAA6B;AAAA,EAC7E,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,uBAAuB;AAAA,EACvE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,4BAA4B;AAC1E;AAGA,IAAMC,4BAA2B;AAAA,EAC/B,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,6BAA6B,aAAa,KAAK;AAAA,EACrG,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,qCAAqC,aAAa,KAAK;AAAA,EACzG,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,kCAAkC;AAAA,EAC5E,EAAE,IAAI,aAAa,OAAO,0BAA0B,aAAa,0BAA0B;AAAA,EAC3F,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,gCAAgC;AAAA,EAC9E,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,oCAAoC;AAAA,EACpF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,wCAAwC;AAAA,EACpF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,wCAAwC;AAAA,EACpF,EAAE,IAAI,WAAW,OAAO,WAAW,aAAa,wBAAwB;AAAA,EACxE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,6BAA6B;AAAA,EACzE,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,wBAAwB;AAAA,EAClE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,gCAAgC;AAAA,EAClF,EAAE,IAAI,cAAc,OAAO,cAAc,aAAa,0BAA0B;AAAA,EAChF,EAAE,IAAI,kBAAkB,OAAO,yBAAyB,aAAa,8BAA8B;AAAA,EACnG,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,yBAAyB;AAAA,EACvE,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,iCAAiC;AAAA,EACnF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,sBAAsB;AAAA,EAClE,EAAE,IAAI,aAAa,OAAO,0BAA0B,aAAa,8BAA8B;AAAA,EAC/F,EAAE,IAAI,aAAa,OAAO,aAAa,aAAa,0BAA0B;AAAA,EAC9E,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,4BAA4B;AAAA,EAC1E,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,iCAAiC;AAAA,EAC7F,EAAE,IAAI,0BAA0B,OAAO,0BAA0B,aAAa,gCAAgC;AAAA,EAC9G,EAAE,IAAI,kBAAkB,OAAO,kBAAkB,aAAa,+BAA+B;AAAA,EAC7F,EAAE,IAAI,UAAU,OAAO,cAAc,aAAa,wBAAwB;AAAA,EAC1E,EAAE,IAAI,QAAQ,OAAO,sBAAsB,aAAa,gCAAgC;AAAA,EACxF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,gCAAgC;AAAA,EAC5E,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,0BAA0B;AACxE;AAGA,IAAMC,yBAAwB;AAAA,EAC5B,EAAE,IAAI,UAAU,OAAO,aAAa,aAAa,oCAAoC,aAAa,KAAK;AAAA,EACvG,EAAE,IAAI,QAAQ,OAAO,yBAAyB,aAAa,+BAA+B,aAAa,KAAK;AAAA,EAC5G,EAAE,IAAI,OAAO,OAAO,yBAAyB,aAAa,iCAAiC;AAAA,EAC3F,EAAE,IAAI,WAAW,OAAO,sBAAsB,aAAa,iCAAiC;AAAA,EAC5F,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,4BAA4B;AAAA,EAC9E,EAAE,IAAI,cAAc,OAAO,wBAAwB,aAAa,iCAAiC;AAAA,EACjG,EAAE,IAAI,gBAAgB,OAAO,iBAAiB,aAAa,uBAAuB;AAAA,EAClF,EAAE,IAAI,YAAY,OAAO,cAAc,aAAa,mCAAmC;AAAA,EACvF,EAAE,IAAI,YAAY,OAAO,uBAAuB,aAAa,8BAA8B;AAAA,EAC3F,EAAE,IAAI,QAAQ,OAAO,YAAY,aAAa,0BAA0B;AAAA,EACxE,EAAE,IAAI,QAAQ,OAAO,2BAA2B,aAAa,uBAAuB;AAAA,EACpF,EAAE,IAAI,cAAc,OAAO,qBAAqB,aAAa,yBAAyB;AAAA,EACtF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,oBAAoB;AAAA,EAChE,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,2BAA2B;AAAA,EACvE,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,sBAAsB;AAAA,EAClF,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,wBAAwB;AAAA,EACpF,EAAE,IAAI,YAAY,OAAO,YAAY,aAAa,kBAAkB;AAAA,EACpE,EAAE,IAAI,QAAQ,OAAO,QAAQ,aAAa,sBAAsB;AAAA,EAChE,EAAE,IAAI,WAAW,OAAO,eAAe,aAAa,iBAAiB;AAAA,EACrE,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,iBAAiB;AAAA,EAC/D,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,sBAAsB;AACpE;AAGA,IAAMC,yBAAwB;AAAA,EAC5B,EAAE,IAAI,sBAAsB,OAAO,sBAAsB,aAAa,uBAAuB,aAAa,KAAK;AAAA,EAC/G,EAAE,IAAI,yBAAyB,OAAO,+BAA+B,aAAa,iCAAiC,aAAa,KAAK;AAAA,EACrI,EAAE,IAAI,gBAAgB,OAAO,qBAAqB,aAAa,qCAAqC;AAAA,EACpG,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,aAAa,2BAA2B;AAAA,EAC3F,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,aAAa,yBAAyB;AAAA,EACzF,EAAE,IAAI,oBAAoB,OAAO,oBAAoB,aAAa,6BAA6B;AAAA,EAC/F,EAAE,IAAI,mBAAmB,OAAO,oBAAoB,aAAa,gCAAgC;AAAA,EACjG,EAAE,IAAI,WAAW,OAAO,sBAAsB,aAAa,6BAA6B;AAAA,EACxF,EAAE,IAAI,gBAAgB,OAAO,gCAAgC,aAAa,sCAAsC;AAAA,EAChH,EAAE,IAAI,kBAAkB,OAAO,2BAA2B,aAAa,4BAA4B;AAAA,EACnG,EAAE,IAAI,iBAAiB,OAAO,iBAAiB,aAAa,gCAAgC;AAAA,EAC5F,EAAE,IAAI,qBAAqB,OAAO,qBAAqB,aAAa,sBAAsB;AAAA,EAC1F,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,aAAa,iCAAiC;AAAA,EAC3F,EAAE,IAAI,cAAc,OAAO,2BAA2B,aAAa,6BAA6B;AAAA,EAChG,EAAE,IAAI,mBAAmB,OAAO,0BAA0B,aAAa,sBAAsB;AAAA,EAC7F,EAAE,IAAI,QAAQ,OAAO,4BAA4B,aAAa,qBAAqB;AAAA,EACnF,EAAE,IAAI,QAAQ,OAAO,iCAAiC,aAAa,8BAA8B;AAAA,EACjG,EAAE,IAAI,uBAAuB,OAAO,uBAAuB,aAAa,mCAAmC;AAAA,EAC3G,EAAE,IAAI,OAAO,OAAO,8BAA8B,aAAa,uBAAuB;AAAA,EACtF,EAAE,IAAI,SAAS,OAAO,SAAS,aAAa,uBAAuB;AACrE;AAKA,IAAMC,mBAAkB;AAAA,EACtB,EAAE,IAAI,UAAU,OAAO,aAAa,MAAM,aAAM,aAAa,0DAA0D;AAAA,EACvH,EAAE,IAAI,gBAAgB,OAAO,gBAAgB,MAAM,aAAM,aAAa,8CAA8C;AAAA,EACpH,EAAE,IAAI,aAAa,OAAO,gBAAgB,MAAM,aAAM,aAAa,oCAAoC;AAAA,EACvG,EAAE,IAAI,gBAAgB,OAAO,mBAAmB,MAAM,aAAM,aAAa,6CAA6C;AAAA,EACtH,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,sCAAsC;AAAA,EACpG,EAAE,IAAI,cAAc,OAAO,cAAc,MAAM,aAAM,aAAa,0CAA0C;AAAA,EAC5G,EAAE,IAAI,kBAAkB,OAAO,sBAAsB,MAAM,aAAM,aAAa,qCAAqC;AAAA,EACnH,EAAE,IAAI,eAAe,OAAO,gBAAgB,MAAM,aAAM,aAAa,iCAAiC;AAAA,EACtG,EAAE,IAAI,WAAW,OAAO,+BAA+B,MAAM,aAAM,aAAa,kCAAkC;AAAA,EAClH,EAAE,IAAI,mBAAmB,OAAO,mBAAmB,MAAM,mBAAO,aAAa,2CAA2C;AAAA,EACxH,EAAE,IAAI,YAAY,OAAO,qBAAqB,MAAM,aAAM,aAAa,mCAAmC;AAAA,EAC1G,EAAE,IAAI,mBAAmB,OAAO,gCAAgC,MAAM,mBAAO,aAAa,yCAAyC;AACrI;AAGA,IAAMC,oBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,IAAMC,mBAA4BA;AAGlC,IAAMC,eAAc;AAAA,EAClB,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,sBAAsB;AAAA,EAC3D,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,kCAAkC;AAAA,EACrE,EAAE,IAAI,eAAe,OAAO,eAAe,MAAM,yBAAyB;AAAA,EAC1E,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,kBAAkB;AACrD;AAGA,IAAMC,iBAAgB;AAAA,EACpB,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAM,aAAM,aAAa,kCAAkC;AAAA,EACxF,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,aAAM,aAAa,yBAAyB;AAAA,EACrF,EAAE,IAAI,cAAc,OAAO,eAAe,MAAM,aAAM,aAAa,2BAA2B;AAAA,EAC9F,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAM,aAAa,2BAA2B;AAC3F;AAGA,IAAMC,kBAAiB;AAAA,EACrB,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,SAAS,OAAO,SAAS,MAAM,YAAK;AAAA,EAC1C,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAK;AAAA,EAC9C,EAAE,IAAI,OAAO,OAAO,OAAO,MAAM,YAAK;AAAA,EACtC,EAAE,IAAI,UAAU,OAAO,cAAc,MAAM,eAAK;AAAA,EAChD,EAAE,IAAI,gBAAgB,OAAO,iBAAiB,MAAM,YAAK;AAAA,EACzD,EAAE,IAAI,cAAc,OAAO,qBAAqB,MAAM,eAAK;AAC7D;AAGA,SAAS,kBAA0B;AACjC,QAAMC,YAAc,YAAS;AAC7B,MAAIA,cAAa,SAAU,QAAO;AAClC,MAAIA,cAAa,QAAS,QAAO;AACjC,MAAIA,cAAa,QAAS,QAAO;AACjC,SAAO;AACT;AAGA,IAAMC,yBAAwB;AAAA,EAC5B,EAAE,IAAI,YAAY,OAAO,WAAW;AAAA,EACpC,EAAE,IAAI,iBAAiB,OAAO,gBAAgB;AAAA,EAC9C,EAAE,IAAI,sBAAsB,OAAO,uCAAuC;AAAA,EAC1E,EAAE,IAAI,cAAc,OAAO,aAAa;AAAA,EACxC,EAAE,IAAI,OAAO,OAAO,MAAM;AAAA,EAC1B,EAAE,IAAI,WAAW,OAAO,iBAAiB;AAAA,EACzC,EAAE,IAAI,gBAAgB,OAAO,eAAe;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,mBAAmB;AAAA,EAC3C,EAAE,IAAI,SAAS,OAAO,QAAQ;AAChC;AAUA,SAAS,kBAAoC,SAAmB;AAC9D,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AACjC,QAAI,EAAE,YAAY,CAAC,EAAE,SAAU,QAAO;AACtC,QAAI,CAAC,EAAE,YAAY,EAAE,SAAU,QAAO;AACtC,WAAO;AAAA,EACT,CAAC;AACH;AAGA,eAAe,SAAS,aAAqB,iBAAkD;AAC7F,QAAM,UAAUC,KAAI,mBAAmB,EAAE,MAAM;AAE/C,MAAI;AACF,UAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,MACzC,SAAS;AAAA,MACT;AAAA,MACA,MAAM,kBAAkB,cAAc;AAAA,IACxC,CAAC;AACD,YAAQ,QAAQ,qBAAqB;AACrC,WAAO,SAAS;AAAA,EAClB,SAAS,OAAO;AACd,QAAI,iBAAiB,iBAAiB;AACpC,UAAI,MAAM,eAAe,KAAK;AAC5B,gBAAQ,KAAK,8CAA8C;AAAA,MAC7D,WAAW,MAAM,eAAe,KAAK;AACnC,gBAAQ,KAAK,2CAA2C;AAAA,MAC1D,OAAO;AACL,gBAAQ,KAAK,aAAa,MAAM,OAAO,EAAE;AAAA,MAC3C;AAAA,IACF,OAAO;AACL,cAAQ,KAAK,6BAA6B;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AACF;AAGA,SAAS,SAAS,OAAiB,QAA2B/B,OAAM,MAAY;AAC9E,QAAM,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,OAAK,EAAE,QAAQ,mBAAmB,EAAE,EAAE,MAAM,CAAC;AAClF,QAAM,MAAM,WAAM,SAAI,OAAO,SAAS,CAAC,IAAI;AAC3C,QAAM,SAAS,WAAM,SAAI,OAAO,SAAS,CAAC,IAAI;AAE9C,UAAQ,IAAI,MAAM,GAAG,CAAC;AACtB,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,KAAK,QAAQ,mBAAmB,EAAE;AACnD,UAAM,UAAU,IAAI,OAAO,SAAS,SAAS,MAAM;AACnD,YAAQ,IAAI,MAAM,SAAI,IAAI,OAAO,UAAU,MAAM,SAAI,CAAC;AAAA,EACxD;AACA,UAAQ,IAAI,MAAM,MAAM,CAAC;AAC3B;AAGA,SAAS,SAAS,SAAiB,MAAwB;AACzD,QAAM,QAAQ,aAAa;AAG3B,MAAI,cAAc;AAClB,WAAS,IAAI,GAAG,KAAK,OAAO,KAAK;AAC/B,QAAI,IAAI,SAAS;AACf,qBAAeA,OAAM,MAAM,QAAG;AAAA,IAChC,WAAW,MAAM,SAAS;AACxB,qBAAeA,OAAM,KAAK,KAAK,QAAG;AAAA,IACpC,OAAO;AACL,qBAAeA,OAAM,KAAK,QAAG;AAAA,IAC/B;AAAA,EACF;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,WAAM,OAAO,EAAE,CAAC,CAAC;AACxC,UAAQ,IAAI,KAAK,WAAW,KAAKA,OAAM,KAAK,KAAK,QAAQ,OAAO,IAAI,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,IAAIA,OAAM,KAAK,KAAK,KAAK,CAAC,EAAE;AACtH,UAAQ,IAAIA,OAAM,KAAK,WAAM,OAAO,EAAE,CAAC,CAAC;AACxC,UAAQ,IAAI;AACd;AAGA,SAAS,qBAA2B;AAClC,UAAQ,IAAIA,OAAM,KAAK,oCAA6B,CAAC;AACrD,UAAQ,IAAI;AAEZ,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,OAAO,aAAa,CAAC;AAC3B,YAAQ,IAAIA,OAAM,MAAM,QAAQ,IAAI,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,YAAO,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;AAAA,EAChG;AACA,UAAQ,IAAI;AACd;AAGA,IAAI,cAIA;AAAA,EACF,YAAY;AAAA,EACZ,SAAS,CAAC;AAAA,EACV,aAAa;AACf;AAGA,eAAe,kBAAiC;AAC9C,MAAI,CAAC,YAAY,cAAc,OAAO,KAAK,YAAY,OAAO,EAAE,WAAW,GAAG;AAC5E;AAAA,EACF;AAEA,MAAI;AACF,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG,EAAE,MAAM,GAAG,EAAE;AAC5E,UAAM,YAAY,YAAY,SAAS;AAEvC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,OAAO,6CAAsC,SAAS,KAAK,CAAC;AAE9E,UAAM,iBAAiB,WAAW,YAAY,SAAS,YAAY,WAAW;AAE9E,YAAQ,IAAIA,OAAM,MAAM,gEAA2D,SAAS,EAAE,CAAC;AAC/F,YAAQ,IAAIA,OAAM,KAAK,sBAAsB,YAAY,WAAW,EAAE,CAAC;AACvE,YAAQ,IAAI;AAAA,EACd,SAAS,KAAK;AACZ,YAAQ,IAAIA,OAAM,IAAI,kCAA6B,eAAe,QAAQ,IAAI,UAAU,eAAe,EAAE,CAAC;AAAA,EAC5G;AACF;AAGA,IAAM,eAAe;AAAA,EACnB,UAAU,YAAY;AACpB,UAAM,gBAAgB;AACtB,YAAQ,IAAIA,OAAM,OAAO,yDAAyD,CAAC;AACnF,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,QAAQ,GAAG,UAAU,YAAY;AAC/B,QAAM,gBAAgB;AACtB,UAAQ,IAAIA,OAAM,OAAO,2DAA2D,CAAC;AACrF,UAAQ,KAAK,CAAC;AAChB,CAAC;AAED,eAAsB,cAAc,SAAuC;AACzE,MAAI;AACF,UAAM,6BAA6B,OAAO;AAAA,EAC5C,SAAS,OAAO;AAEd,UAAM,gBAAgB;AAEtB,YAAQ,MAAMA,OAAM,IAAI,0CAAqC,CAAC;AAC9D,QAAI,iBAAiB,OAAO;AAC1B,cAAQ,MAAMA,OAAM,KAAK,QAAQ,MAAM,OAAO,EAAE,CAAC;AAAA,IACnD;AACA,YAAQ,IAAI;AAEZ,QAAI,YAAY,cAAc,GAAG;AAC/B,cAAQ,IAAIA,OAAM,OAAO,4EAA4E,CAAC;AAAA,IACxG;AACA,YAAQ,IAAI;AACZ,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,eAAe,6BAA6B,SAAuC;AACjF,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,KAAK,+BAAwB,CAAC;AACrD,UAAQ,IAAIA,OAAM,KAAK,+CAA+C,CAAC;AACvE,UAAQ,IAAI;AAGZ,MAAI,QAAQ,WAAW;AACrB,UAAM,QAAQ,MAAM,iBAAiB,QAAQ,SAAS;AACtD,QAAI,OAAO;AACT,YAAM,WAAW,MAAM,cAAc,YAAY,MAAM,WAAW,KAAK;AACvE,YAAM,aAAa,MAAM,SAAS,KAAK,MAAM,MAAM,MAAM;AACzD,YAAM,cAAc,MAAM,UAAU,KAAK,MAAM,OAAO,KAAK;AAC3D,cAAQ,IAAIA,OAAM,MAAM,0BAAqB,MAAM,IAAI,GAAG,UAAU,GAAG,WAAW,WAAW,IAAI,KAAK,MAAM,OAAO,EAAE,eAAe,CAAC,GAAG,QAAQ,GAAG,CAAC;AAGpJ,UAAI,MAAM,UAAU,MAAM,WAAW,OAAO;AAC1C,gBAAQ,IAAIA,OAAM,OAAO,4CAAuC,MAAM,OAAO,YAAY,CAAC,6BAA6B,CAAC;AAAA,MAC1H;AACA,UAAI,MAAM,WAAW,MAAM,YAAY,aAAa;AAElD,cAAM,kBAAkB,MAAM,QAAQ,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACrE,cAAM,gBAAgB,YAAY,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjE,YAAI,oBAAoB,eAAe;AACrC,kBAAQ,IAAIA,OAAM,OAAO,oCAA+B,MAAM,OAAO,qBAAqB,WAAW,kCAAkC,CAAC;AAAA,QAC1I;AAAA,MACF;AACA,cAAQ,IAAI;AAEZ,cAAQ,gBAAgB,MAAM;AAC9B,cAAQ,kBAAkB,MAAM;AAEhC,UAAI,MAAM,OAAO,KAAM,SAAQ,OAAO,MAAM,OAAO;AACnD,UAAI,MAAM,OAAO,YAAa,SAAQ,cAAc,MAAM,OAAO;AAAA,IACnE,OAAO;AACL,YAAM,kBAAkB,MAAM,gBAAgB;AAC9C,cAAQ,IAAIA,OAAM,IAAI,mBAAc,QAAQ,SAAS,cAAc,CAAC;AACpE,UAAI,gBAAgB,SAAS,GAAG;AAC9B,gBAAQ,IAAIA,OAAM,KAAK,uBAAuB,gBAAgB,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MAC7E;AACA,cAAQ,IAAI;AAAA,IACd;AAAA,EACF;AAGA,MAAI,QAAQ,SAAS;AACnB,UAAMgC,WAAUD,KAAI,gCAAgC,EAAE,MAAM;AAC5D,UAAME,YAAW,MAAM,oBAAoB,QAAQ,OAAO;AAC1D,QAAIA,WAAU;AACZ,MAAAD,SAAQ,QAAQ,4BAA4B;AAE5C,UAAI,CAAC,QAAQ,QAAQC,UAAS,KAAM,SAAQ,OAAOA,UAAS;AAC5D,UAAI,CAAC,QAAQ,eAAeA,UAAS,YAAa,SAAQ,cAAcA,UAAS;AACjF,UAAI,CAAC,QAAQ,SAASA,UAAS,MAAM,SAAS,EAAG,SAAQ,QAAQA,UAAS,MAAM,KAAK,GAAG;AACxF,UAAI,CAAC,QAAQ,WAAWA,UAAS,QAAS,SAAQ,UAAUA,UAAS;AACrE,UAAIA,UAAS,KAAM,SAAQ,OAAOA,UAAS;AAAA,IAC7C,OAAO;AACL,MAAAD,SAAQ,KAAK,8BAA8B;AAAA,IAC7C;AACA,YAAQ,IAAI;AAAA,EACd;AAGA,MAAI,QAAQ,YAAY;AACtB,UAAMC,YAAW,QAAQ,UACrB,MAAM,oBAAoB,QAAQ,OAAO,IACzC,MAAM,cAAc,QAAQ,IAAI,CAAC;AAErC,QAAIA,WAAU;AACZ,cAAQ,IAAIjC,OAAM,MAAM,KAAK,8BAAuB,CAAC;AACrD,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,MAAM,WAAWiC,UAAS,QAAQ,SAAS,EAAE,CAAC;AAChE,UAAIA,UAAS,YAAa,SAAQ,IAAIjC,OAAM,KAAK,kBAAkBiC,UAAS,WAAW,EAAE,CAAC;AAC1F,cAAQ,IAAIjC,OAAM,MAAM,WAAWiC,UAAS,eAAe,gBAAgBA,UAAS,IAAI,EAAE,CAAC;AAC3F,cAAQ,IAAIjC,OAAM,MAAM,YAAYiC,UAAS,MAAM,KAAK,IAAI,KAAK,eAAe,EAAE,CAAC;AACnF,UAAIA,UAAS,aAAaA,UAAS,UAAU,SAAS,GAAG;AACvD,gBAAQ,IAAIjC,OAAM,MAAM,gBAAgBiC,UAAS,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MAC1E;AACA,UAAIA,UAAS,eAAgB,SAAQ,IAAIjC,OAAM,MAAM,sBAAsBiC,UAAS,cAAc,EAAE,CAAC;AACrG,UAAIA,UAAS,SAAU,SAAQ,IAAIjC,OAAM,MAAM,WAAWiC,UAAS,QAAQ,EAAE,CAAC;AAC9E,UAAIA,UAAS,QAAS,SAAQ,IAAIjC,OAAM,MAAM,cAAciC,UAAS,QAAQ,YAAY,CAAC,EAAE,CAAC;AAC7F,UAAIA,UAAS,KAAM,SAAQ,IAAIjC,OAAM,MAAM,YAAYiC,UAAS,KAAK,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;AACzF,UAAIA,UAAS,WAAW;AACtB,cAAM,aAAaA,UAAS,oBACxB,uBAAuBA,UAAS,iBAAiB,MACjD;AACJ,gBAAQ,IAAIjC,OAAM,MAAM,aAAa,UAAU,EAAE,CAAC;AAAA,MACpD;AACA,UAAIiC,UAAS,cAAe,SAAQ,IAAIjC,OAAM,MAAM,qBAAqBiC,UAAS,aAAa,EAAE,CAAC;AAClG,UAAIA,UAAS,iBAAiBA,UAAS,cAAc,SAAS,GAAG;AAC/D,cAAM,eAAeA,UAAS,cAAc,SAAS,IACjD,GAAGA,UAAS,cAAc,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,SAASA,UAAS,cAAc,SAAS,CAAC,MAC1FA,UAAS,cAAc,KAAK,IAAI;AACpC,gBAAQ,IAAIjC,OAAM,MAAM,yBAAyBiC,UAAS,cAAc,MAAM,KAAK,YAAY,GAAG,CAAC;AAAA,MACrG;AACA,UAAIA,UAAS,UAAU;AACrB,gBAAQ,IAAIjC,OAAM,MAAM,aAAa,CAAC;AACtC,YAAIiC,UAAS,SAAS,MAAO,SAAQ,IAAIjC,OAAM,KAAK,cAAciC,UAAS,SAAS,KAAK,EAAE,CAAC;AAC5F,YAAIA,UAAS,SAAS,KAAM,SAAQ,IAAIjC,OAAM,KAAK,aAAaiC,UAAS,SAAS,IAAI,EAAE,CAAC;AACzF,YAAIA,UAAS,SAAS,KAAM,SAAQ,IAAIjC,OAAM,KAAK,aAAaiC,UAAS,SAAS,IAAI,EAAE,CAAC;AACzF,YAAIA,UAAS,SAAS,IAAK,SAAQ,IAAIjC,OAAM,KAAK,YAAYiC,UAAS,SAAS,GAAG,EAAE,CAAC;AAAA,MACxF;AACA,cAAQ,IAAI;AAAA,IACd,OAAO;AACL,cAAQ,IAAIjC,OAAM,OAAO,wBAAwB,CAAC;AAClD,cAAQ,IAAI;AAAA,IACd;AACA;AAAA,EACF;AAGA,MAAI,QAAQ,WAAW;AACrB,YAAQ,IAAIA,OAAM,QAAQ,8EAAuE,CAAC;AAClG,YAAQ,IAAI;AAAA,EACd;AAGA,QAAM,gBAAgB,gBAAgB;AACtC,QAAM,OAAO,QAAQ;AAErB,MAAI,CAAC,eAAe;AAClB,YAAQ,IAAIA,OAAM,KAAK,iCAA0BA,OAAM,KAAK,aAAa,CAAC,4BAA4B,CAAC;AACvG,YAAQ,IAAI;AAAA,EACd,OAAO;AACL,YAAQ,IAAIA,OAAM,MAAM,yBAAoBA,OAAM,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,EAAE,CAAC;AACpF,YAAQ,IAAI;AAAA,EACd;AAGA,qBAAmB;AAGnB,UAAQ,IAAIA,OAAM,KAAK,yEAAkE,CAAC;AAC1F,UAAQ,IAAI;AAGZ,MAAI,WAAW,MAAM,cAAc,QAAQ,IAAI,CAAC;AAGhD,MAAI,UAAU;AACZ,UAAM,eAAe;AAAA,MACnBA,OAAM,MAAM,+BAA0B;AAAA,IACxC;AACA,QAAI,SAAS,KAAM,cAAa,KAAKA,OAAM,KAAK,WAAW,SAAS,IAAI,EAAE,CAAC;AAC3E,QAAI,SAAS,MAAM,SAAS,EAAG,cAAa,KAAKA,OAAM,KAAK,YAAY,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AACpG,QAAI,SAAS,eAAgB,cAAa,KAAKA,OAAM,KAAK,sBAAsB,SAAS,cAAc,EAAE,CAAC;AAE1G,aAAS,cAAcA,OAAM,IAAI;AACjC,YAAQ,IAAI;AAAA,EACd,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,6CAA6C,CAAC;AACrE,YAAQ,IAAI;AAAA,EACd;AAIA,QAAM,kBAAkB,CAAC,QAAQ;AAEjC,MAAI,iBAAiB;AACnB,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,QAAQ,KAAK,0SAAqD,CAAC;AACrF,YAAQ,IAAIA,OAAM,QAAQ,KAAK,mEAAoD,CAAC;AACpF,YAAQ,IAAIA,OAAM,QAAQ,KAAK,0SAAqD,CAAC;AACrF,YAAQ,IAAIA,OAAM,KAAK,mFAAmF,CAAC;AAC3G,YAAQ,IAAIA,OAAM,KAAK,+EAA+E,CAAC;AACvG,YAAQ,IAAI;AAEZ,UAAM,iBAAiB,MAAMkC,SAAQ;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,WACLlC,OAAM,MAAM,mDAA4C,IACxDA,OAAM,MAAM,qDAA8C;AAAA,MAC9D,SAAS;AAAA;AAAA,IACX,GAAG,YAAY;AAEf,QAAI,eAAe,WAAW;AAC5B,YAAM,cAAc,MAAMkC,SAAQ;AAAA,QAChC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,qCAAqC;AAAA,QAC1D,MAAMA,OAAM,KAAK,kDAAkD;AAAA,QACnE,UAAU,CAAC,MAAM;AACf,cAAI,CAAC,KAAK,EAAE,KAAK,MAAM,GAAI,QAAO;AAElC,cAAI,EAAE,WAAW,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,WAAW,GAAG,EAAG,QAAO;AAExE,cAAI,SAAS,CAAC,EAAG,QAAO;AACxB,iBAAO;AAAA,QACT;AAAA,MACF,GAAG,YAAY;AAEf,UAAI,YAAY,KAAK;AACnB,cAAM,YAAY,YAAY,IAAI,KAAK;AACvC,cAAM,cAAc,UAAU,WAAW,GAAG,KAAK,UAAU,WAAW,GAAG,KAAK,UAAU,WAAW,GAAG;AAEtG,YAAI,aAAa;AAEf,gBAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,IAAI;AACrC,gBAAM,eAAe,UAAU,WAAW,GAAG,IACzC,UAAU,QAAQ,KAAK,QAAQ,CAAC,IAChC,UAAU,WAAW,GAAG,IACtBP,MAAK,QAAQ,IAAI,GAAG,SAAS,IAC7B;AAEN,gBAAM,eAAesC,KAAI,iCAAiC,YAAY,KAAK,EAAE,MAAM;AACnF,gBAAM,gBAAgB,MAAM,cAAc,YAAY;AAEtD,cAAI,eAAe;AACjB,uBAAW;AACX,yBAAa,QAAQ,2BAA2B;AAGhD,kBAAM,eAAe;AAAA,cACnB/B,OAAM,MAAM,+BAA0B;AAAA,YACxC;AACA,gBAAI,SAAS,KAAM,cAAa,KAAKA,OAAM,KAAK,WAAW,SAAS,IAAI,EAAE,CAAC;AAC3E,gBAAI,SAAS,MAAM,SAAS,EAAG,cAAa,KAAKA,OAAM,KAAK,YAAY,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AACpG,gBAAI,SAAS,eAAgB,cAAa,KAAKA,OAAM,KAAK,sBAAsB,SAAS,cAAc,EAAE,CAAC;AAE1G,qBAAS,cAAcA,OAAM,IAAI;AACjC,oBAAQ,IAAI;AAAA,UACd,OAAO;AACL,yBAAa,KAAK,iEAAiE;AAAA,UACrF;AAAA,QACF,OAAO;AAEL,gBAAM,OAAO,UAAU,YAAY,EAAE,SAAS,QAAQ,IAAI,eACtD,UAAU,YAAY,EAAE,SAAS,QAAQ,IAAI,eAC7C;AACJ,gBAAM,gBAAgB+B,KAAI,mCAAmC,IAAI,KAAK,EAAE,MAAM;AAC9E,gBAAM,iBAAiB,MAAM,oBAAoB,SAAS;AAE1D,cAAI,gBAAgB;AAClB,uBAAW;AACX,0BAAc,QAAQ,4BAA4B;AAGlD,kBAAM,eAAe;AAAA,cACnB/B,OAAM,MAAM,gCAA2B;AAAA,YACzC;AACA,gBAAI,SAAS,KAAM,cAAa,KAAKA,OAAM,KAAK,WAAW,SAAS,IAAI,EAAE,CAAC;AAC3E,gBAAI,SAAS,aAAc,cAAa,KAAKA,OAAM,KAAK,qBAAqB,CAAC;AAC9E,gBAAI,SAAS,MAAM,SAAS,EAAG,cAAa,KAAKA,OAAM,KAAK,YAAY,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AACpG,gBAAI,SAAS,aAAa,SAAS,UAAU,SAAS,GAAG;AACvD,2BAAa,KAAKA,OAAM,KAAK,gBAAgB,SAAS,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,YAC/E;AACA,gBAAI,SAAS,QAAS,cAAa,KAAKA,OAAM,KAAK,cAAc,SAAS,QAAQ,YAAY,CAAC,EAAE,CAAC;AAClG,gBAAI,SAAS,SAAU,cAAa,KAAKA,OAAM,KAAK,WAAW,SAAS,QAAQ,EAAE,CAAC;AACnF,gBAAI,SAAS,KAAM,cAAa,KAAKA,OAAM,KAAK,YAAY,SAAS,KAAK,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;AAC9F,gBAAI,SAAS,WAAW;AACtB,oBAAM,aAAa,SAAS,oBACxB,uBAAuB,SAAS,iBAAiB,MACjD;AACJ,2BAAa,KAAKA,OAAM,KAAK,aAAa,UAAU,EAAE,CAAC;AAAA,YACzD;AACA,gBAAI,SAAS,iBAAiB,SAAS,cAAc,SAAS,GAAG;AAC/D,oBAAM,eAAe,SAAS,cAAc,SAAS,IACjD,GAAG,SAAS,cAAc,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,QAChD,SAAS,cAAc,KAAK,IAAI;AACpC,2BAAa,KAAKA,OAAM,KAAK,yBAAyB,SAAS,cAAc,MAAM,KAAK,YAAY,GAAG,CAAC;AAAA,YAC1G;AACA,gBAAI,SAAS,QAAS,cAAa,KAAKA,OAAM,KAAK,aAAa,SAAS,OAAO,EAAE,CAAC;AAEnF,qBAAS,cAAcA,OAAM,IAAI;AACjC,oBAAQ,IAAI;AAAA,UACd,OAAO;AACL,0BAAc,KAAK,+DAA+D;AAAA,UACpF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAIR;AAGJ,MAAI,QAAQ,KAAK;AACf,QAAI;AACJ,QAAI,QAAQ,QAAQ;AAClB,kBAAY,QAAQ,OAAO,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,IACzD,WAAW,QAAQ,WAAW;AAC5B,kBAAY,QAAQ,UAAU,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,IAC5D,OAAO;AACL,kBAAY,CAAC,QAAQ;AAAA,IACvB;AAEA,IAAAA,UAAS;AAAA,MACP,MAAM,QAAQ,QAAQ,UAAU,QAAQ;AAAA,MACxC,aAAa,QAAQ,eAAe;AAAA,MACpC,OAAO,QAAQ,OAAO,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,KAAK,UAAU,SAAS,CAAC;AAAA,MAC3E;AAAA,MACA,SAAS,QAAQ,WAAW;AAAA,MAC5B,YAAY,QAAQ,cAA4D;AAAA,MAChF,UAAU,UAAU,YAAY,CAAC;AAAA,MACjC,iBAAiB;AAAA;AAAA,IACnB;AAGA,YAAQ,IAAI;AACZ,YAAQ,IAAIQ,OAAM,KAAK,2CAAoC,CAAC;AAC5D,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAKR,QAAO,IAAI,CAAC;AACzF,QAAIA,QAAO,aAAa;AACtB,cAAQ,IAAIQ,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAKR,QAAO,YAAY,SAAS,KAAKA,QAAO,YAAY,UAAU,GAAG,EAAE,IAAI,QAAQA,QAAO,WAAW,CAAC;AAAA,IACjL;AACA,YAAQ,IAAIQ,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAKR,QAAO,MAAM,SAAS,IAAIA,QAAO,MAAM,KAAK,IAAI,IAAI,eAAe,CAAC;AACjJ,YAAQ,IAAIQ,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAKR,QAAO,UAAU,KAAK,IAAI,CAAC,CAAC;AACzG,YAAQ,IAAIQ,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAKR,QAAO,OAAO,CAAC;AAC5F,YAAQ,IAAIQ,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAKR,QAAO,UAAU,CAAC;AAC/F,UAAM,aAAa,OAAO,QAAQA,QAAO,YAAY,CAAC,CAAC;AACvD,QAAI,WAAW,SAAS,GAAG;AACzB,cAAQ,IAAIQ,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC;AAAA,IAClI;AACA,QAAI,UAAU,SAAS;AACrB,cAAQ,IAAIA,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAK,SAAS,QAAQ,YAAY,CAAC,CAAC;AAAA,IAC9G;AACA,QAAI,UAAU,UAAU;AACtB,cAAQ,IAAIA,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAK,SAAS,QAAQ,CAAC;AAAA,IACjG;AACA,QAAI,UAAU,MAAM;AAClB,cAAQ,IAAIA,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAK,SAAS,KAAK,QAAQ,KAAK,GAAG,CAAC,CAAC;AAAA,IAC/G;AACA,QAAI,UAAU,WAAW;AACvB,cAAQ,IAAIA,OAAM,MAAM,aAAQ,IAAIA,OAAM,MAAM,cAAc,IAAIA,OAAM,KAAK,KAAK,CAAC;AAAA,IACrF;AACA,YAAQ,IAAI;AAAA,EACd,OAAO;AAEL,IAAAR,UAAS,MAAM,qBAAqB,SAAS,QAAQ;AAAA,EACvD;AAGA,QAAM,UAAUuC,KAAI,6BAA6B,EAAE,MAAM;AAEzD,MAAI;AAEF,UAAM,YAAY,QAAQ,OAAO,qBAAqB,QAAQ,IAAI,IAAI;AAEtE,UAAM,cAAc;AAAA,MAClB,GAAGvC;AAAA,MACH,eAAe,QAAQ,aAAaA,QAAO,iBAAiB;AAAA,MAC5D;AAAA,MACA,kBAAkB;AAAA;AAAA,IACpB;AAEA,QAAI,QAAQ,eAAe,WAAW;AAGtC,QAAI,mBAAkC;AACtC,QAAIA,QAAO,oBAAoB,KAAK;AAClC,cAAQ,OAAO;AACf,UAAI;AACF,cAAM,WAAW,OAAO,QAAQ,KAAK,EAAE,CAAC;AACxC,YAAI,UAAU;AACZ,gBAAM,CAAC,WAAW,OAAO,IAAI;AAC7B,gBAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,YACzC,MAAMA,QAAO,QAAQ;AAAA,YACrB,aAAaA,QAAO,eAAe;AAAA,YACnC;AAAA,YACA,YAAY;AAAA,UACd,CAAC;AACD,6BAAmB,SAAS,UAAU;AAGtC,gBAAM,uBAAuB;AAAA,YAC3B,GAAG;AAAA,YACH,kBAAkB;AAAA,YAClB,aAAa;AAAA,UACf;AACA,kBAAQ,eAAe,oBAAoB;AAE3C,kBAAQ,IAAIQ,OAAM,MAAM,6BAAwB,gBAAgB,EAAE,CAAC;AAAA,QACrE;AAAA,MACF,SAAS,WAAW;AAClB,gBAAQ,KAAK;AACb,gBAAQ,IAAIA,OAAM,OAAO,qDAA2C,CAAC;AACrE,YAAI,qBAAqB,OAAO;AAC9B,kBAAQ,IAAIA,OAAM,KAAK,QAAQ,UAAU,OAAO,EAAE,CAAC;AAAA,QACrD;AACA,gBAAQ,IAAIA,OAAM,KAAK,qDAAqD,CAAC;AAAA,MAE/E;AAAA,IACF;AAEA,YAAQ,KAAK;AAEb,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,MAAM,KAAK,qBAAgB,CAAC;AAC9C,YAAQ,IAAI;AAGZ,UAAM,YAAY,QAAQ,UAAU,QAAQ,IAAI;AAEhD,eAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,KAAK,GAAG;AACvD,YAAM,aAAaP,MAAK,WAAW,QAAQ;AAG3C,UAAI,SAAS;AACb,UAAI;AACF,cAAMI,QAAO,UAAU;AACvB,iBAAS;AAAA,MACX,QAAQ;AAAA,MAER;AAGA,UAAI,UAAU,CAAC,QAAQ,KAAK;AAC1B,cAAM,WAAW,MAAMqC,SAAQ;AAAA,UAC7B,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS,GAAG,QAAQ;AAAA,UACpB,SAAS;AAAA,QACX,CAAC;AAED,YAAI,CAAC,SAAS,WAAW;AACvB,kBAAQ,IAAIlC,OAAM,OAAO,+BAAqB,QAAQ,EAAE,CAAC;AACzD;AAAA,QACF;AAAA,MACF;AAGA,YAAM,MAAMmC,SAAQ,UAAU;AAC9B,UAAI,QAAQ,KAAK;AACf,cAAMzC,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC;AAEA,YAAMC,WAAU,YAAY,SAAS,OAAO;AAC5C,cAAQ,IAAI,QAAQK,OAAM,KAAK,QAAG,CAAC,IAAIA,OAAM,KAAK,QAAQ,CAAC,EAAE;AAAA,IAC/D;AAEA,YAAQ,IAAI;AAGZ,UAAM,iBAAiB;AAAA,MACrBA,OAAM,KAAK,uDAAuD;AAAA,MAClE;AAAA,MACAA,OAAM,KAAK,aAAa;AAAA,MACxBA,OAAM,KAAK,mBAAmB,IAAIA,OAAM,KAAK,wBAAwB;AAAA,IACvE;AAEA,QAAI,eAAe;AACjB,qBAAe,KAAKA,OAAM,KAAK,mBAAmB,IAAIA,OAAM,KAAK,iBAAiB,CAAC;AACnF,qBAAe,KAAKA,OAAM,KAAK,mBAAmB,IAAIA,OAAM,KAAK,qBAAqB,CAAC;AACvF,qBAAe,KAAKA,OAAM,KAAK,mBAAmB,IAAIA,OAAM,KAAK,8BAA8B,CAAC;AAAA,IAClG;AAEA,mBAAe,KAAKA,OAAM,KAAK,mBAAmB,IAAIA,OAAM,KAAK,oBAAoB,CAAC;AAEtF,aAAS,gBAAgBA,OAAM,IAAI;AACnC,YAAQ,IAAI;AAGZ,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI;AACV,YAAM,IAAIA,OAAM;AAChB,YAAM,IAAIA,OAAM;AAChB,YAAM,MAAM,CAAC,GAAW,QAAgB,IAAI,IAAI,OAAO,KAAK,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC;AAElF,cAAQ,IAAI,EAAE,aAAQ,SAAI,OAAO,CAAC,IAAI,QAAG,CAAC;AAC1C,cAAQ,IAAI,EAAE,UAAK,IAAI,EAAE,IAAI,6CAAsC,CAAC,CAAC,IAAI,EAAE,QAAG,CAAC;AAC/E,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,QAAG,CAAC;AAC7C,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,mDAA8C,CAAC,IAAI,EAAE,QAAG,CAAC;AACpF,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,kDAA6C,CAAC,IAAI,EAAE,QAAG,CAAC;AACnF,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,sDAAiD,CAAC,IAAI,EAAE,QAAG,CAAC;AACvF,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,kDAA6C,CAAC,IAAI,EAAE,QAAG,CAAC;AACnF,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,QAAG,CAAC;AAC7C,cAAQ,IAAI,EAAE,UAAK,IAAI,IAAI,uBAAuBA,OAAM,KAAK,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,QAAG,CAAC;AAC7F,cAAQ,IAAI,EAAE,aAAQ,SAAI,OAAO,CAAC,IAAI,QAAG,CAAC;AAC1C,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,QAAQ,WAAW;AACrB,UAAI;AACF,cAAM,iBAAiB,QAAQ,WAAWR,OAA4C;AACtF,gBAAQ,IAAIQ,OAAM,MAAM,+BAAwB,QAAQ,SAAS,GAAG,CAAC;AACrE,gBAAQ,IAAIA,OAAM,KAAK,mDAAmD,QAAQ,SAAS,EAAE,CAAC;AAC9F,gBAAQ,IAAI;AAAA,MACd,SAAS,KAAK;AACZ,gBAAQ,IAAIA,OAAM,OAAO,wCAA8B,eAAe,QAAQ,IAAI,UAAU,eAAe,EAAE,CAAC;AAAA,MAChH;AAAA,IACF;AAGA,QAAI,iBAAiB,CAAC,QAAQ,KAAK;AACjC,cAAQ,IAAI;AACZ,YAAM,oBAAoB,MAAMkC,SAAQ;AAAA,QACtC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,uDAAuD;AAAA,QAC5E,SAAS;AAAA,MACX,CAAC;AAED,UAAI,kBAAkB,WAAW;AAE/B,YAAI,QAAQ;AACZ,YAAI,WAAW;AACf,cAAM,cAAc;AAEpB,eAAO,CAAC,SAAS,WAAW,aAAa;AACvC;AACA,gBAAM,cAAc+B,KAAI,uCAAuC,EAAE,MAAM;AACvE,cAAI;AAEF,kBAAM,IAAI,sBAAsB;AAAA,cAC9B,UAAUvC,QAAO;AAAA,cACjB,WAAW;AAAA,gBACT,QAAQA,QAAO;AAAA,gBACf,eAAeA,QAAO;AAAA,gBACtB,oBAAoBA,QAAO;AAAA,gBAC3B,yBAAyBA,QAAO;AAAA,gBAChC,OAAOA,QAAO;AAAA,cAChB;AAAA,cACA,YAAY;AAAA,gBACV,QAAQA,QAAO;AAAA,gBACf,OAAOA,QAAO;AAAA,gBACd,KAAKA,QAAO;AAAA,cACd;AAAA,cACA,SAAS;AAAA,gBACP,QAAQA,QAAO;AAAA,gBACf,YAAYA,QAAO;AAAA,gBACnB,UAAUA,QAAO;AAAA,gBACjB,OAAOA,QAAO;AAAA,cAChB;AAAA,YACF,CAAC;AACD,wBAAY,QAAQ,mCAAmC;AACvD,oBAAQ;AAAA,UACV,SAAS,KAAK;AACZ,wBAAY,KAAK,4BAA4B;AAC7C,gBAAI,YAAY;AAEhB,gBAAI,eAAe,iBAAiB;AAClC,kBAAI,IAAI,eAAe,KAAK;AAC1B,wBAAQ,IAAIQ,OAAM,OAAO,sDAAsD,CAAC;AAChF;AAAA,cACF,OAAO;AACL,wBAAQ,IAAIA,OAAM,KAAK,QAAQ,IAAI,OAAO,aAAa,IAAI,UAAU,GAAG,CAAC;AACzE,4BAAY;AAAA,cACd;AAAA,YACF,WAAW,eAAe,OAAO;AAC/B,kBAAI,IAAI,QAAQ,SAAS,cAAc,KAAK,IAAI,QAAQ,SAAS,WAAW,GAAG;AAC7E,wBAAQ,IAAIA,OAAM,OAAO,qDAAqD,CAAC;AAC/E,4BAAY;AAAA,cACd,OAAO;AACL,wBAAQ,IAAIA,OAAM,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,cAC/C;AAAA,YACF;AAGA,gBAAI,cAAc,aAAa,cAAc,OAAO;AAClD,kBAAI,WAAW,aAAa;AAC1B,sBAAM,gBAAgB,MAAMkC,SAAQ;AAAA,kBAClC,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,SAASlC,OAAM,MAAM,0BAA0B;AAAA,kBAC/C,SAAS;AAAA,gBACX,CAAC;AAED,oBAAI,CAAC,cAAc,OAAO;AACxB,0BAAQ,IAAIA,OAAM,KAAK,uEAAuE,CAAC;AAC/F;AAAA,gBACF;AAAA,cACF,OAAO;AACL,wBAAQ,IAAIA,OAAM,KAAK,qBAAqB,WAAW,mDAAmD,CAAC;AAAA,cAC7G;AAAA,YACF,OAAO;AACL;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAEF,SAAS,OAAO;AACd,YAAQ,KAAK,0BAA0B;AAGvC,UAAM,gBAAgB;AAEtB,YAAQ,MAAMA,OAAM,IAAI,kEAA6D,CAAC;AACtF,QAAI,iBAAiB,OAAO;AAC1B,cAAQ,MAAMA,OAAM,KAAK,KAAK,MAAM,OAAO,EAAE,CAAC;AAAA,IAChD;AACA,YAAQ,MAAMA,OAAM,KAAK,qDAAqD,CAAC;AAE/E,QAAI,YAAY,cAAc,GAAG;AAC/B,cAAQ,IAAIA,OAAM,OAAO,qDAAqD,CAAC;AAAA,IACjF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,eAAe,qBACb,SACA,UAC0B;AAE1B,QAAM,UAAmC,QAAQ,gBAAgB,EAAE,GAAG,QAAQ,cAAc,IAAI,CAAC;AACjG,QAAM,iBAAiB,QAAQ,mBAAmB;AAClD,QAAM,iBAAiB;AACvB,MAAI,iBAAiB;AAGrB,cAAY,aAAa;AACzB,cAAY,UAAU;AACtB,cAAY,cAAc;AAG1B,MAAI,iBAAiB,KAAK,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACzD,YAAQ,IAAIA,OAAM,KAAK,kCAA2B,cAAc,KAAK,CAAC;AACtE,YAAQ,IAAIA,OAAM,KAAK,gCAAgC,CAAC;AAExD,QAAI,QAAQ,KAAM,SAAQ,IAAIA,OAAM,KAAK,uBAAkB,QAAQ,IAAI,EAAE,CAAC;AAC1E,QAAI,QAAQ,UAAW,SAAQ,IAAIA,OAAM,KAAK,4BAAwB,QAAQ,UAAuB,KAAK,IAAI,CAAC,EAAE,CAAC;AAClH,QAAI,QAAQ,MAAO,SAAQ,IAAIA,OAAM,KAAK,wBAAoB,QAAQ,MAAmB,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,GAAI,QAAQ,MAAmB,SAAS,IAAI,QAAQ,EAAE,EAAE,CAAC;AACxK,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,OAAO,mBAAmB,iBAAiB,KAAK,kDAAkD,iBAAiB,GAAG,CAAC;AACzI,YAAQ,IAAI;AAAA,EACd;AAGA,QAAM,iBAAiB,CAAC,WAAmB;AACzC,UAAM,OAAO,eAAe,KAAK,OAAK,EAAE,OAAO,MAAM;AACrD,QAAI,MAAM;AACR;AACA,kBAAY,cAAc;AAC1B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAGA,QAAM,iBAAiB,CAAC,YAAoB;AAC1C,WAAO,iBAAiB,KAAK,UAAU;AAAA,EACzC;AAKA,QAAM,aAAa,eAAe,QAAQ;AAE1C,MAAI;AAEJ,MAAI,eAAe,cAAc,KAAK,QAAQ,WAAW;AAEvD,gBAAY,QAAQ;AACpB,YAAQ,IAAIA,OAAM,KAAK,oDAAoD,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACpG,WAAW,QAAQ,QAAQ;AACzB,aAAS,gBAAgB,UAAU;AACnC,gBAAY,QAAQ,OAAO,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AACvD,YAAQ,IAAIA,OAAM,KAAK,6BAA6B,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC7E,OAAO;AACL,aAAS,gBAAgB,UAAU;AAEnC,YAAQ,IAAIA,OAAM,KAAK,0DAA0D,CAAC;AAClF,YAAQ,IAAIA,OAAM,KAAK,yDAAyD,CAAC;AACjF,YAAQ,IAAIA,OAAM,KAAK,mCAAmC,CAAC;AAC3D,YAAQ,IAAI;AAEZ,UAAM,mBAAmB,MAAMkC,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qCAAqC;AAAA,MAC1D,SAAS,cAAc,IAAI,QAAM;AAAA,QAC/B,OAAO,EAAE,OAAO,WACZ,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,IAAIA,OAAM,MAAM,KAAK,oBAAe,CAAC,KACxD,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI;AAAA,QACvB,OAAO,EAAE;AAAA,QACT,aAAaA,OAAM,KAAK,EAAE,IAAI;AAAA,QAC9B,UAAU,EAAE,OAAO;AAAA;AAAA,MACrB,EAAE;AAAA,MACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,KAAK;AAAA,MACL,cAAc;AAAA,IAChB,GAAG,YAAY;AAEf,gBAAY,iBAAiB,aAAa,CAAC,QAAQ;AACnD,YAAQ,IAAIA,OAAM,MAAM,qBAAgB,UAAU,MAAM,YAAY,UAAU,WAAW,IAAI,KAAK,GAAG,EAAE,CAAC;AAAA,EAC1G;AACA,UAAQ,YAAY;AAKpB,QAAM,cAAc,eAAe,SAAS;AAC5C,WAAS,gBAAgB,WAAW;AAEpC,QAAM,eAAe,MAAMkC,SAAQ;AAAA,IACjC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,eAAe;AAAA,IACpC,SAAS,QAAQ,QAAQ,UAAU,QAAQ;AAAA,IAC3C,MAAMA,OAAM,KAAK,qCAAqC;AAAA,EACxD,GAAG,YAAY;AACf,UAAQ,OAAO,aAAa,QAAQ;AAEpC,QAAM,eAAe,MAAMkC,SAAQ;AAAA,IACjC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,oBAAoB;AAAA,IACzC,SAAS,QAAQ,eAAe,UAAU,eAAe;AAAA,IACzD,MAAM,UAAU,cACZA,OAAM,MAAM,8BAA8B,IAC1CA,OAAM,KAAK,wCAAwC;AAAA,EACzD,GAAG,YAAY;AACf,UAAQ,cAAc,aAAa,eAAe;AAGlD,QAAM,uBAAuB,UAAU,iBAAiB;AACxD,QAAM,qBAAqB;AAAA,IACzB,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,IACzC,GAAG2B,eAAc,IAAI,QAAM;AAAA,MACzB,OAAQ,EAAE,OAAO,gBAAgB,uBAC7B,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI3B,OAAM,MAAM,YAAY,CAAC,KACjD,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,MACxB,OAAO,EAAE;AAAA,MACT,aAAaA,OAAM,KAAK,EAAE,WAAW;AAAA,IACvC,EAAE;AAAA,EACJ;AACA,QAAM,wBAAwB,uBAC1B,mBAAmB,UAAU,OAAK,EAAE,UAAU,YAAY,IAC1D;AAEJ,QAAM,eAAe,MAAMkC,SAAQ;AAAA,IACjC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,eAAe;AAAA,IACpC,SAAS;AAAA,IACT,SAAS,wBAAwB,IAAI,wBAAwB;AAAA,EAC/D,GAAG,YAAY;AACf,UAAQ,cAAc,aAAa,eAAe;AAGlD,QAAM,YAAY,gBAAgB;AAClC,QAAM,gBAAgB,MAAMkC,SAAQ;AAAA,IAClC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,8CAA8C;AAAA,IACnE,SAAS4B,gBAAe,IAAI,QAAM;AAAA,MAChC,OAAO,EAAE,OAAO,YACZ,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI5B,OAAM,MAAM,mCAAmC,CAAC,KACxE,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,MACxB,OAAO,EAAE;AAAA,MACT,UAAU,EAAE,OAAO;AAAA;AAAA,IACrB,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,QAAQ,cAAc,SAAS,CAAC;AAGxC,QAAM,eAAe,MAAMkC,SAAQ;AAAA,IACjC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,uBAAuB;AAAA,IAC5C,SAAS;AAAA,MACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,MACzC,GAAG8B,uBAAsB,IAAI,QAAM;AAAA,QACjC,OAAO,EAAE;AAAA,QACT,OAAO,EAAE;AAAA,MACX,EAAE;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,EACX,GAAG,YAAY;AACf,UAAQ,eAAe,aAAa,gBAAgB;AAGpD,MAAI,QAAQ,iBAAiB,SAAS;AACpC,UAAM,qBAAqB,MAAMI,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qCAAqC;AAAA,MAC1D,MAAMA,OAAM,KAAK,2CAA2C;AAAA,IAC9D,GAAG,YAAY;AACf,YAAQ,oBAAoB,mBAAmB,sBAAsB;AAAA,EACvE;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,OAAO,qCAA8B,CAAC;AACxD,UAAQ,IAAIA,OAAM,KAAK,wEAAwE,CAAC;AAChG,UAAQ,IAAIA,OAAM,KAAK,2DAA2D,CAAC;AACnF,UAAQ,IAAI;AAEZ,QAAM,oBAAoB,MAAMkC,SAAQ;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,+BAA+B;AAAA,IACpD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,gBAAgB,kBAAkB,iBAAiB;AAE3D,MAAI,QAAQ,eAAe;AACzB,YAAQ,IAAIA,OAAM,MAAM,+EAA0E,CAAC;AAAA,EACrG;AAKA,QAAM,WAAW,eAAe,MAAM;AACtC,WAAS,gBAAgB,QAAQ;AAGjC,QAAM,gBAAgB,MAAMkC,SAAQ;AAAA,IAClC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,6CAA6C;AAAA,IAClE,SAAS;AAAA;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,cAAc,cAAc,eAAe;AAEnD,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,mDAAmD,CAAC;AAC3E,UAAQ,IAAI;AAGZ,MAAI,UAAU,SAAS,SAAS,MAAM,SAAS,GAAG;AAChD,YAAQ,IAAIA,OAAM,MAAM,iCAA4B,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AAChF,YAAQ,IAAI;AAAA,EACd;AAGA,QAAM,kBAAkB,kBAAkBC,WAAU,IAAI,OAAK;AAC3D,UAAM,aAAa,UAAU,OAAO,SAAS,EAAE,KAAK;AACpD,WAAO;AAAA,MACL,OAAO,aAAa,GAAG,EAAE,KAAK,IAAID,OAAM,MAAM,YAAY,CAAC,KAAK,EAAE;AAAA,MAClE,OAAO,EAAE;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF,CAAC,CAAC;AACF,QAAM,mBAAmB,MAAMkC,SAAQ;AAAA,IACrC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,6BAA6B;AAAA,IAClD,SAAS;AAAA,IACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,QAAM,oBAAoB,iBAAiB,aAAa,CAAC;AAGzD,QAAM,mBAAmB,kBAAkBE,YAAW,IAAI,OAAK;AAC7D,UAAM,aAAa,UAAU,OAAO,SAAS,EAAE,KAAK;AACpD,WAAO;AAAA,MACL,OAAO,aAAa,GAAG,EAAE,KAAK,IAAIF,OAAM,MAAM,YAAY,CAAC,KAAK,EAAE;AAAA,MAClE,OAAO,EAAE;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF,CAAC,CAAC;AACF,QAAM,oBAAoB,MAAMkC,SAAQ;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,8BAA8B;AAAA,IACnD,SAAS;AAAA,IACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,QAAM,qBAAqB,kBAAkB,cAAc,CAAC;AAG5D,QAAM,kBAAkB,kBAAkBG,WAAU,IAAI,OAAK;AAC3D,UAAM,aAAa,UAAU,OAAO,SAAS,EAAE,KAAK;AACpD,WAAO;AAAA,MACL,OAAO,aAAa,GAAG,EAAE,KAAK,IAAIH,OAAM,MAAM,YAAY,CAAC,KAAK,EAAE;AAAA,MAClE,OAAO,EAAE;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF,CAAC,CAAC;AACF,QAAM,mBAAmB,MAAMkC,SAAQ;AAAA,IACrC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,6BAA6B;AAAA,IAClD,SAAS;AAAA,IACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,QAAM,oBAAoB,iBAAiB,aAAa,CAAC;AAGzD,QAAM,UAAU,kBAAkB,SAAS,YAAY,KAAK,kBAAkB,SAAS,YAAY;AAEnG,MAAI,SAAS;AACX,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,2CAAoC,CAAC;AAC5D,YAAQ,IAAI;AAGZ,UAAM,aAAa,MAAMkC,SAAQ;AAAA,MAC/B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,kBAAkB;AAAA,MACvC,SAASI,kBAAiB,IAAI,SAAO;AAAA,QACnC,OAAO,GAAG,GAAG,KAAK,MAAMJ,OAAM,KAAK,GAAG,IAAI,CAAC;AAAA,QAC3C,OAAO,GAAG;AAAA,MACZ,EAAE;AAAA,MACF,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,iBAAiB,WAAW,kBAAkB;AAGtD,UAAM,kBAAkB,MAAMkC,SAAQ;AAAA,MACpC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qBAAqB;AAAA,MAC1C,SAASK,aAAY,IAAI,SAAO;AAAA,QAC9B,OAAO,GAAG,GAAG,KAAK,MAAML,OAAM,KAAK,GAAG,IAAI,CAAC;AAAA,QAC3C,OAAO,GAAG;AAAA,MACZ,EAAE;AAAA,MACF,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,YAAY,gBAAgB,aAAa;AAGjD,UAAM,eAAe,MAAMkC,SAAQ;AAAA,MACjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,gBAAgB;AAAA,MACrC,SAASM,gBAAe,IAAI,SAAO;AAAA,QACjC,OAAO,GAAG,GAAG,KAAK,MAAMN,OAAM,KAAK,GAAG,IAAI,CAAC;AAAA,QAC3C,OAAO,GAAG;AAAA,MACZ,EAAE;AAAA,MACF,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,eAAe,aAAa,gBAAgB;AAAA,EACtD;AAGA,MAAI,kBAAkB,SAAS,GAAG;AAChC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,oCAA6B,CAAC;AACrD,YAAQ,IAAI;AAGZ,UAAM,eAAeO,aAAY;AAAA,MAAO,SACtC,IAAI,MAAM,WAAW,KAAK,IAAI,MAAM,KAAK,OAAK,kBAAkB,SAAS,CAAC,CAAC;AAAA,IAC7E;AAEA,UAAM,cAAc,MAAM2B,SAAQ;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,yBAAyB;AAAA,MAC9C,SAAS,aAAa,IAAI,UAAQ,EAAE,OAAO,IAAI,OAAO,OAAO,IAAI,MAAM,EAAE;AAAA,MACzE,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,MAAM,YAAY,OAAO;AAAA,EACnC;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,kCAA2B,CAAC;AACnD,UAAQ,IAAIA,OAAM,KAAK,8EAA8E,CAAC;AACtG,UAAQ,IAAI;AACZ,QAAM,yBAAyB,MAAMkC,SAAQ;AAAA,IAC3C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,mDAAmD;AAAA,IACxE,MAAMA,OAAM,KAAK,+CAA+C;AAAA,EAClE,GAAG,YAAY;AACf,UAAQ,sBAAsB,uBAAuB,uBAAuB;AAG5E,UAAQ,QAAQ,CAAC,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,iBAAiB;AAKlF,QAAM,WAAW,eAAe,MAAM;AACtC,WAAS,gBAAgB,QAAQ;AAGjC,MAAI,UAAU,YAAY,UAAU,WAAW,UAAU,MAAM;AAC7D,YAAQ,IAAIA,OAAM,MAAM,2CAAsC,CAAC;AAC/D,QAAI,SAAS,SAAU,SAAQ,IAAIA,OAAM,KAAK,0BAAqB,SAAS,QAAQ,GAAG,SAAS,UAAU,KAAK,SAAS,OAAO,MAAM,EAAE,EAAE,CAAC;AAC1I,QAAI,SAAS,QAAS,SAAQ,IAAIA,OAAM,KAAK,uBAAkB,SAAS,OAAO,EAAE,CAAC;AAClF,QAAI,SAAS,KAAM,SAAQ,IAAIA,OAAM,KAAK,qBAAgB,SAAS,IAAI,EAAE,CAAC;AAC1E,YAAQ,IAAI;AAAA,EACd;AAGA,QAAM,kBAAkB;AAAA,IACtB,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,IACzC,GAAGQ,YAAW,IAAI,QAAM;AAAA,MACtB,OAAO,UAAU,aAAa,EAAE,KAC5B,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,IAAIR,OAAM,MAAM,YAAY,CAAC,KACjD,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,MACxB,OAAO,EAAE;AAAA,IACX,EAAE;AAAA,EACJ;AACA,QAAM,oBAAoB,UAAU,WAChC,gBAAgB,UAAU,OAAK,EAAE,UAAU,SAAS,QAAQ,IAC5D;AAEJ,QAAM,mBAAmB,MAAMkC,SAAQ;AAAA,IACrC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kBAAkB;AAAA,IACvC,SAAS;AAAA,IACT,SAAS,oBAAoB,IAAI,oBAAoB;AAAA,EACvD,GAAG,YAAY;AACf,UAAQ,WAAW,iBAAiB,YAAY;AAEhD,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,oBAAoB;AAAA,IACzC,SAAS;AAAA;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAMA,OAAM,KAAK,8CAA8C;AAAA,EACjE,GAAG,YAAY;AACf,UAAQ,WAAW,mBAAmB,YAAY;AAGlD,QAAM,iBAAiB;AAAA,IACrB,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,IACzC,GAAGS,UAAS,IAAI,QAAM;AAAA,MACpB,OAAO,UAAU,YAAY,EAAE,KAC3B,GAAG,EAAE,KAAK,IAAIT,OAAM,MAAM,YAAY,CAAC,KACvC,EAAE;AAAA,MACN,OAAO,EAAE;AAAA,IACX,EAAE;AAAA,EACJ;AACA,QAAM,uBAAuB,UAAU,UACnC,eAAe,UAAU,OAAK,EAAE,UAAU,SAAS,OAAO,IAC1D;AAEJ,QAAM,kBAAkB,MAAMkC,SAAQ;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,UAAU;AAAA,IAC/B,SAAS;AAAA,IACT,SAAS,uBAAuB,IAAI,uBAAuB;AAAA;AAAA,EAC7D,GAAG,YAAY;AACf,UAAQ,UAAU,gBAAgB,WAAW;AAE7C,QAAM,uBAAuB,MAAMkC,SAAQ;AAAA,IACzC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,2BAA2B;AAAA,IAChD,SAAS;AAAA;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,sBAAsB,qBAAqB,uBAAuB;AAE1E,QAAM,iBAAiB,MAAMkC,SAAQ;AAAA,IACnC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,0BAA0B;AAAA,IAC/C,SAAS;AAAA;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,SAAS,eAAe,UAAU;AAG1C,MAAI,QAAQ,QAAQ;AAClB,UAAM,oBAAoB,MAAMkC,SAAQ;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qBAAqB;AAAA,MAC1C,SAAS;AAAA,QACP,EAAE,OAAO,qBAAqB,OAAO,WAAW;AAAA,QAChD,EAAE,OAAO,qBAAqB,OAAO,YAAY;AAAA,QACjD,EAAE,OAAO,gCAAgC,OAAO,iBAAiB;AAAA,QACjE,EAAE,OAAO,2BAA2B,OAAO,aAAa;AAAA,QACxD,EAAE,OAAO,iBAAiB,OAAO,SAAS;AAAA,MAC5C;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,mBAAmB,kBAAkB,oBAAoB;AAEjE,UAAM,oBAAoB,MAAMkC,SAAQ;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,uBAAuB;AAAA,MAC5C,SAAS;AAAA,QACP,EAAE,OAAO,uCAAuC,OAAO,SAAS;AAAA,QAChE,EAAE,OAAO,+DAA+D,OAAO,yBAAyB;AAAA,QACxG,EAAE,OAAO,0DAA0D,OAAO,iBAAiB;AAAA,QAC3F,EAAE,OAAO,8DAA8D,OAAO,mBAAmB;AAAA,QACjG,EAAE,OAAO,qDAAqD,OAAO,aAAa;AAAA,QAClF,EAAE,OAAO,yDAAyD,OAAO,kBAAkB;AAAA,QAC3F,EAAE,OAAO,iEAAiE,OAAO,mBAAmB;AAAA,QACpG,EAAE,OAAO,oCAAoC,OAAO,QAAQ;AAAA,MAC9D;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,gBAAgB,kBAAkB,iBAAiB;AAAA,EAC7D;AAGA,QAAM,kBAAkB,MAAMkC,SAAQ;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,IACxD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,gBAAgB,gBAAgB,iBAAiB;AAGzD,QAAM,yBAAyB,MAAMkC,SAAQ;AAAA,IAC3C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kBAAkB;AAAA,IACvC,SAAS;AAAA,MACP,EAAE,OAAO,wEAAiE,OAAO,OAAO;AAAA,MACxF,EAAE,OAAO,2DAAoD,OAAO,cAAc;AAAA,MAClF,EAAE,OAAO,kEAA2D,OAAO,UAAU;AAAA,MACrF,EAAE,OAAO,wEAAiE,OAAO,cAAc;AAAA,MAC/F,EAAE,OAAO,sEAA+D,OAAO,cAAc;AAAA,MAC7F,EAAE,OAAO,oDAA6C,OAAO,eAAe;AAAA,IAC9E;AAAA,IACA,SAAS;AAAA;AAAA,EACX,GAAG,YAAY;AACf,UAAQ,iBAAiB,uBAAuB,kBAAkB;AAGlE,QAAM,wBAAwB,MAAMkC,SAAQ;AAAA,IAC1C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,sBAAsB;AAAA,IAC3C,SAAS;AAAA,MACP,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC/B,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,MACnC,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,MACrC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,MACjC,EAAE,OAAO,mBAAmB,OAAO,QAAQ;AAAA,IAC7C;AAAA,IACA,SAAS;AAAA,EACX,GAAG,YAAY;AACf,UAAQ,gBAAgB,sBAAsB,iBAAiB;AAG/D,MAAI,QAAQ,kBAAkB,SAAS;AACrC,UAAM,uBAAuB,MAAMkC,SAAQ;AAAA,MACzC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,2BAA2B;AAAA,MAChD,MAAMA,OAAM,KAAK,oCAAoC;AAAA,MACrD,UAAU,CAAC,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,OAAO;AAAA,IACjD,GAAG,YAAY;AACf,YAAQ,qBAAqB,qBAAqB,sBAAsB;AAAA,EAC1E;AAGA,QAAM,6BAA6B,MAAMkC,SAAQ;AAAA,IAC/C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,uCAAuC;AAAA,IAC5D,SAAS,QAAQ,mBAAmB;AAAA;AAAA,IACpC,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAMA,OAAM,KAAK,yDAAyD;AAAA,EAC5E,GAAG,YAAY;AACf,UAAQ,qBAAqB,2BAA2B,sBAAuB,QAAQ,mBAAmB;AAG1G,QAAM,0BAA0B,MAAMkC,SAAQ;AAAA,IAC5C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,qFAA8E;AAAA,IACnG,SAAS;AAAA,IACT,MAAM;AAAA,EACR,GAAG,YAAY;AACf,UAAQ,kBAAkB,wBAAwB,mBAAmB;AAKrE,QAAM,cAAcU,cAAa,IAAI,QAAM;AAAA,IACzC,OAAO,UAAU,SAAS,EAAE,KACxB,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,IAAIV,OAAM,MAAM,YAAY,CAAC,KACjD,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,IACxB,OAAO,EAAE;AAAA,IACT,UAAU,UAAU,SAAS,EAAE;AAAA,EACjC,EAAE;AAEF,QAAM,eAAe,MAAMkC,SAAQ;AAAA,IACjC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,4DAA4D;AAAA,IACjF,SAAS;AAAA,IACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,OAAO,aAAa,QAAQ,CAAC;AAGrC,MAAK,QAAQ,KAAkB,SAAS,OAAO,GAAG;AAChD,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,MACxD,MAAMA,OAAM,KAAK,uCAAuC;AAAA,IAC1D,GAAG,YAAY;AACf,YAAQ,YAAY,mBAAmB,aAAa;AAAA,EACtD;AAGA,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,yBAAyB;AAAA,IAC9C,SAAS;AAAA,MACP,EAAE,OAAO,iEAAuD,OAAO,QAAQ;AAAA,MAC/E,EAAE,OAAO,yDAAkD,OAAO,cAAc;AAAA,MAChF,EAAE,OAAO,wCAAiC,OAAO,OAAO;AAAA,MACxD,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,OAAO;AAAA,IAC/C;AAAA,IACA,SAAS;AAAA,EACX,GAAG,YAAY;AACf,QAAM,aAAa,mBAAmB,cAAc;AAEpD,MAAI,mBAA6B,CAAC;AAGlC,MAAI,eAAe,WAAW,eAAe,QAAQ;AACnD,UAAM,eAAeW,eAAc,IAAI,QAAM;AAAA,MAC3C,OAAO,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK;AAAA,MAC1B,OAAO,EAAE;AAAA,IACX,EAAE;AACF,UAAM,gBAAgB,MAAMuB,SAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,4CAA4C;AAAA,MACjE,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,uBAAmB,CAAC,GAAI,cAAc,gBAAgB,CAAC,CAAE;AAAA,EAC3D;AAGA,MAAI,eAAe,iBAAiB,eAAe,QAAQ;AACzD,UAAM,oBAAoB,kBAAkBY,qBAAoB,IAAI,QAAM;AAAA,MACxE,OAAQ,EAAE,OAAO,YAAY,UAAU,YACnC,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,IAAIZ,OAAM,MAAM,YAAY,CAAC,KAChD,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK;AAAA,MACvB,UAAU,EAAE,OAAO,YAAY,UAAU;AAAA,MACzC,OAAO,EAAE;AAAA,IACX,EAAE,CAAC;AACH,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,kDAAkD;AAAA,MACvE,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,uBAAmB,CAAC,GAAG,kBAAkB,GAAI,mBAAmB,qBAAqB,CAAC,CAAE;AAAA,EAC1F;AAEA,UAAQ,oBAAoB;AAG5B,QAAM,kBAAkB,QAAQ,qBAAiC,CAAC,GAAG;AAAA,IAAK,OACxE,CAAC,UAAU,kBAAkB,cAAc,OAAO,QAAQ,EAAE,SAAS,CAAC;AAAA,EACxE,KAAK,UAAU;AACf,QAAM,oBAAoB,MAAMkC,SAAQ;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kCAAkC;AAAA,IACvD,SAAS;AAAA;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,iBAAiB,kBAAkB,kBAAkB;AAG7D,MAAI,QAAQ,gBAAgB;AAC1B,UAAM,mBAAmB,MAAMkC,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qBAAqB;AAAA,MAC1C,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,QACzC,GAAGa,sBAAqB,IAAI,QAAM;AAAA,UAChC,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,UAC3B,OAAO,EAAE;AAAA,QACX,EAAE;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,oBAAoB,iBAAiB,qBAAqB;AAGlE,QAAI,QAAQ,sBAAsB,UAAU;AAC1C,YAAM,yBAAyB,MAAMqB,SAAQ;AAAA,QAC3C,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,yBAAyB;AAAA,QAC9C,MAAMA,OAAM,KAAK,iCAAiC;AAAA,QAClD,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO;AAAA,MACrC,GAAG,YAAY;AACf,cAAQ,oBAAoB,uBAAuB,qBAAqB;AAAA,IAC1E;AAGA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,mFAA4E,CAAC;AACpG,UAAM,uBAAuB,MAAMkC,SAAQ;AAAA,MACzC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,iDAAiD;AAAA,MACtE,MAAMA,OAAM,KAAK,yCAAyC;AAAA,IAC5D,GAAG,YAAY;AACf,YAAQ,mBAAmB,qBAAqB,oBAAoB;AAAA,EACtE;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,6FAAsF,CAAC;AAC9G,UAAQ,IAAIA,OAAM,KAAK,+FAA+F,CAAC;AACvH,QAAM,sBAAsB,MAAMkC,SAAQ;AAAA,IACxC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,2BAA2B;AAAA,IAChD,MAAMA,OAAM,KAAK,yCAAyC;AAAA,EAC5D,GAAG,YAAY;AACf,UAAQ,iBAAiB,oBAAoB,kBAAkB;AAG/D,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,yFAAkF,CAAC;AAC1G,UAAQ,IAAIA,OAAM,KAAK,uFAAuF,CAAC;AAC/G,QAAM,kBAAkB,MAAMkC,SAAQ;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,oBAAoB;AAAA,IACzC,MAAMA,OAAM,KAAK,kDAAkD;AAAA,EACrE,GAAG,YAAY;AACf,UAAQ,mBAAmB,gBAAgB,oBAAoB;AAK/D,QAAM,eAAe,eAAe,UAAU;AAC9C,WAAS,gBAAgB,YAAY;AAGrC,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,2CAAiC,CAAC;AACzD,UAAQ,IAAIA,OAAM,KAAK,mDAAmD,CAAC;AAC3E,UAAQ,IAAI;AAEZ,QAAM,wBAAwB,MAAMkC,SAAQ;AAAA,IAC1C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kCAAkC;AAAA,IACvD,SAAS;AAAA,MACP,EAAE,OAAO,kBAAkB,OAAO,kBAAkB,aAAaA,OAAM,KAAK,yBAAyB,EAAE;AAAA,MACvG,EAAE,OAAO,UAAU,OAAO,UAAU,aAAaA,OAAM,KAAK,cAAc,EAAE;AAAA,MAC5E,EAAE,OAAO,UAAU,OAAO,UAAU,aAAaA,OAAM,KAAK,cAAc,EAAE;AAAA,MAC5E,EAAE,OAAO,UAAU,OAAO,UAAU,aAAaA,OAAM,KAAK,cAAc,EAAE;AAAA,MAC5E,EAAE,OAAO,aAAa,OAAO,aAAa,aAAaA,OAAM,KAAK,sBAAsB,EAAE;AAAA,MAC1F,EAAE,OAAO,SAAS,OAAO,SAAS,aAAaA,OAAM,KAAK,oBAAoB,EAAE;AAAA,MAChF,EAAE,OAAO,YAAY,OAAO,YAAY,aAAaA,OAAM,KAAK,gBAAgB,EAAE;AAAA,MAClF,EAAE,OAAO,aAAa,OAAO,WAAW,aAAaA,OAAM,KAAK,eAAe,EAAE;AAAA,MACjF,EAAE,OAAO,YAAY,OAAO,YAAY,aAAaA,OAAM,KAAK,gBAAgB,EAAE;AAAA,MAClF,EAAE,OAAO,WAAW,OAAO,WAAW,aAAaA,OAAM,KAAK,eAAe,EAAE;AAAA,MAC/E,EAAE,OAAO,SAAS,OAAO,SAAS,aAAaA,OAAM,KAAK,aAAa,EAAE;AAAA,MACzE,EAAE,OAAO,cAAc,OAAO,cAAc,aAAaA,OAAM,KAAK,mBAAmB,EAAE;AAAA,MACzF,EAAE,OAAO,WAAW,OAAO,WAAW,aAAaA,OAAM,KAAK,wBAAwB,EAAE;AAAA,MACxF,EAAE,OAAO,qBAAqB,OAAO,YAAY,aAAaA,OAAM,KAAK,wBAAwB,EAAE;AAAA,MACnG,EAAE,OAAO,YAAY,OAAO,YAAY,aAAaA,OAAM,KAAK,iBAAiB,EAAE;AAAA,MACnF,EAAE,OAAO,gBAAgB,OAAO,gBAAgB,aAAaA,OAAM,KAAK,sBAAsB,EAAE;AAAA,MAChG,EAAE,OAAO,WAAW,OAAO,QAAQ,aAAaA,OAAM,KAAK,oBAAoB,EAAE;AAAA,MACjF,EAAE,OAAO,SAAS,OAAO,SAAS,aAAaA,OAAM,KAAK,iBAAiB,EAAE;AAAA,IAC/E;AAAA,IACA,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,gBAAgB,sBAAsB,iBAAiB,CAAC;AAGhE,MAAK,QAAQ,cAA2B,SAAS,OAAO,GAAG;AACzD,UAAM,8BAA8B,MAAMkC,SAAQ;AAAA,MAChD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qCAAqC;AAAA,MAC1D,MAAMA,OAAM,KAAK,iDAAiD;AAAA,IACpE,GAAG,YAAY;AACf,YAAQ,qBAAqB,4BAA4B,uBAAuB;AAAA,EAClF;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,qCAA2B,CAAC;AACnD,UAAQ,IAAIA,OAAM,KAAK,iDAAiD,CAAC;AACzE,UAAQ,IAAI;AAEZ,QAAM,kBAAkB,MAAMkC,SAAQ;AAAA,IACpC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,iDAAiD;AAAA,IACtE,SAASmB,4BAA2B,IAAI,UAAQ;AAAA,MAC9C,OAAO,IAAI,cACP,GAAG,IAAI,KAAK,IAAInB,OAAM,MAAM,oBAAe,CAAC,KAC5C,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,aAAaA,OAAM,KAAK,IAAI,WAAW;AAAA,MACvC,UAAU,IAAI;AAAA,IAChB,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,oBAAoB,gBAAgB,qBAAqB,CAAC;AAGlE,MAAK,QAAQ,kBAA+B,SAAS,OAAO,GAAG;AAC7D,UAAM,wBAAwB,MAAMkC,SAAQ;AAAA,MAC1C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,4CAA4C;AAAA,MACjE,MAAMA,OAAM,KAAK,iDAAiD;AAAA,IACpE,GAAG,YAAY;AACf,YAAQ,yBAAyB,sBAAsB,2BAA2B;AAAA,EACpF;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,mCAAyB,CAAC;AACjD,UAAQ,IAAIA,OAAM,KAAK,0EAA0E,CAAC;AAClG,UAAQ,IAAI;AAEZ,QAAM,0BAA0B,MAAMkC,SAAQ;AAAA,IAC5C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kCAAkC;AAAA,IACvD,SAASoB,0BAAyB,IAAI,UAAQ;AAAA,MAC5C,OAAO,IAAI,cACP,GAAG,IAAI,KAAK,IAAIpB,OAAM,MAAM,oBAAe,CAAC,KAC5C,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,aAAaA,OAAM,KAAK,IAAI,WAAW;AAAA,MACvC,UAAU,IAAI;AAAA,IAChB,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,kBAAkB,wBAAwB,mBAAmB,CAAC;AAGtE,MAAK,QAAQ,gBAA6B,SAAS,OAAO,GAAG;AAC3D,UAAM,gCAAgC,MAAMkC,SAAQ;AAAA,MAClD,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,iCAAiC;AAAA,MACtD,MAAMA,OAAM,KAAK,wDAAwD;AAAA,IAC3E,GAAG,YAAY;AACf,YAAQ,uBAAuB,8BAA8B,yBAAyB;AAAA,EACxF;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,0CAAgC,CAAC;AACxD,UAAQ,IAAIA,OAAM,KAAK,iEAAiE,CAAC;AACzF,UAAQ,IAAI;AAEZ,QAAM,uBAAuB,MAAMkC,SAAQ;AAAA,IACzC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,iCAAiC;AAAA,IACtD,SAASqB,uBAAsB,IAAI,UAAQ;AAAA,MACzC,OAAO,IAAI,cACP,GAAG,IAAI,KAAK,IAAIrB,OAAM,MAAM,oBAAe,CAAC,KAC5C,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,aAAaA,OAAM,KAAK,IAAI,WAAW;AAAA,IACzC,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,eAAe,qBAAqB,gBAAgB,CAAC;AAG7D,MAAK,QAAQ,aAA0B,SAAS,OAAO,GAAG;AACxD,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,MAC7D,MAAMA,OAAM,KAAK,2CAA2C;AAAA,IAC9D,GAAG,YAAY;AACf,YAAQ,oBAAoB,mBAAmB,sBAAsB;AAAA,EACvE;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,6CAAmC,CAAC;AAC3D,UAAQ,IAAIA,OAAM,KAAK,gEAAgE,CAAC;AACxF,UAAQ,IAAI;AAEZ,QAAM,uBAAuB,MAAMkC,SAAQ;AAAA,IACzC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,0CAA0C;AAAA,IAC/D,SAASsB,uBAAsB,IAAI,UAAQ;AAAA,MACzC,OAAO,IAAI,cACP,GAAG,IAAI,KAAK,IAAItB,OAAM,MAAM,oBAAe,CAAC,KAC5C,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,aAAaA,OAAM,KAAK,IAAI,WAAW;AAAA,MACvC,UAAU,IAAI;AAAA,IAChB,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,eAAe,qBAAqB,gBAAgB,CAAC;AAG7D,MAAK,QAAQ,aAA0B,SAAS,OAAO,GAAG;AACxD,UAAM,6BAA6B,MAAMkC,SAAQ;AAAA,MAC/C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,uCAAuC;AAAA,MAC5D,MAAMA,OAAM,KAAK,2DAA2D;AAAA,IAC9E,GAAG,YAAY;AACf,YAAQ,oBAAoB,2BAA2B,sBAAsB;AAAA,EAC/E;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,uCAA6B,CAAC;AACrD,UAAQ,IAAIA,OAAM,KAAK,+DAA+D,CAAC;AACvF,UAAQ,IAAI;AAEZ,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,IAC7D,SAAS;AAAA,MACP,EAAE,OAAO,6BAA6B,OAAO,OAAO;AAAA,MACpD,EAAE,OAAO,6BAA6B,OAAO,OAAO;AAAA,MACpD,EAAE,OAAO,2BAA2B,OAAO,QAAQ;AAAA,MACnD,EAAE,OAAO,4BAA4B,OAAO,OAAO;AAAA,MACnD,EAAE,OAAO,+BAA+B,OAAO,UAAU;AAAA,MACzD,EAAE,OAAO,oCAAoC,OAAO,WAAW;AAAA,MAC/D,EAAE,OAAO,8BAA8B,OAAO,UAAU;AAAA,MACxD,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,aAAa,mBAAmB,cAAc,CAAC;AAGvD,MAAK,QAAQ,WAAwB,SAAS,OAAO,GAAG;AACtD,UAAM,2BAA2B,MAAMkC,SAAQ;AAAA,MAC7C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,MAC7D,MAAMA,OAAM,KAAK,sDAAsD;AAAA,IACzE,GAAG,YAAY;AACf,YAAQ,kBAAkB,yBAAyB,oBAAoB;AAAA,EACzE;AAGA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,wCAA8B,CAAC;AACtD,UAAQ,IAAIA,OAAM,KAAK,gDAAgD,CAAC;AACxE,UAAQ,IAAI;AAEZ,QAAM,oBAAoB,MAAMkC,SAAQ;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,IACxD,SAAS;AAAA,MACP,EAAE,OAAO,0BAA0B,OAAO,mBAAmB;AAAA,MAC7D,EAAE,OAAO,+BAA+B,OAAO,YAAY;AAAA,MAC3D,EAAE,OAAO,+BAA+B,OAAO,UAAU;AAAA,MACzD,EAAE,OAAO,8BAA8B,OAAO,WAAW;AAAA,MACzD,EAAE,OAAO,iCAAiC,OAAO,YAAY;AAAA,MAC7D,EAAE,OAAO,2BAA2B,OAAO,UAAU;AAAA,MACrD,EAAE,OAAO,iCAAiC,OAAO,QAAQ;AAAA,MACzD,EAAE,OAAO,gCAAgC,OAAO,SAAS;AAAA,MACzD,EAAE,OAAO,yCAAyC,OAAO,OAAO;AAAA,MAChE,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,IACnC;AAAA,IACA,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,YAAY,kBAAkB,aAAa,CAAC;AAGpD,MAAK,QAAQ,UAAuB,SAAS,OAAO,GAAG;AACrD,UAAM,0BAA0B,MAAMkC,SAAQ;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,MACxD,MAAMA,OAAM,KAAK,uDAAuD;AAAA,IAC1E,GAAG,YAAY;AACf,YAAQ,iBAAiB,wBAAwB,mBAAmB;AAAA,EACtE;AAGA,QAAM,wBAAwB,MAAMkC,SAAQ;AAAA,IAC1C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,4BAA4B;AAAA,IACjD,MAAMA,OAAM,KAAK,mEAAmE;AAAA,EACtF,GAAG,YAAY;AACf,UAAQ,gBAAgB,sBAAsB,iBAAiB;AAG/D,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,MAAM,2CAAsC,CAAC;AAC/D,MAAK,QAAQ,cAA2B,SAAS,GAAG;AAClD,YAAQ,IAAIA,OAAM,KAAK,8BAA0B,QAAQ,cAA2B,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACnG;AACA,MAAK,QAAQ,kBAA+B,SAAS,GAAG;AACtD,YAAQ,IAAIA,OAAM,KAAK,uBAAmB,QAAQ,kBAA+B,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAChG;AACA,MAAK,QAAQ,gBAA6B,SAAS,GAAG;AACpD,YAAQ,IAAIA,OAAM,KAAK,uBAAmB,QAAQ,gBAA6B,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC9F;AACA,MAAK,QAAQ,aAA0B,SAAS,GAAG;AACjD,YAAQ,IAAIA,OAAM,KAAK,6BAAyB,QAAQ,aAA0B,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACjG;AACA,MAAK,QAAQ,aAA0B,SAAS,GAAG;AACjD,YAAQ,IAAIA,OAAM,KAAK,oBAAgB,QAAQ,aAA0B,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACxF;AACA,MAAK,QAAQ,WAAwB,SAAS,GAAG;AAC/C,YAAQ,IAAIA,OAAM,KAAK,0BAAsB,QAAQ,WAAwB,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC5F;AACA,MAAK,QAAQ,UAAuB,SAAS,GAAG;AAC9C,YAAQ,IAAIA,OAAM,KAAK,yBAAqB,QAAQ,UAAuB,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC1F;AAMA;AACE,UAAM,eAAe,eAAe,UAAU;AAC9C,aAAS,gBAAgB,YAAY;AAErC,YAAQ,IAAIA,OAAM,KAAK,yEAAyE,CAAC;AACjG,YAAQ,IAAI;AAGZ,UAAM,sBAAsB,CAC1B,UACA,YACA,UACG;AACH,YAAMoC,gBAAe,UAAU,mBAAmB,QAAQ,KAAK,CAAC;AAChE,YAAM,cAAc,IAAI,IAAIA,cAAa,IAAI,OAAK,EAAE,GAAG,CAAC;AAGxD,YAAM,UAAUA,cAAa,IAAI,QAAM;AAAA,QACrC,OAAO,GAAG,MAAM,EAAE,GAAG,CAAC,IAAIpC,OAAM,MAAM,YAAY,CAAC,GAAG,EAAE,OAAOA,OAAM,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,QAC9F,OAAO,EAAE;AAAA,QACT,UAAU;AAAA,MACZ,EAAE;AAGF,iBAAW,OAAO,YAAY;AAC5B,YAAI,CAAC,YAAY,IAAI,GAAG,GAAG;AACzB,kBAAQ,KAAK;AAAA,YACX,OAAO,MAAM,GAAG;AAAA,YAChB,OAAO;AAAA,YACP,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAGA,UAAM,eAAe,UAAU;AAC/B,QAAI,cAAc;AAChB,YAAM,gBAAgB,OAAO,OAAO,YAAY,EAAE,OAAO,CAAC,KAAK,QAAQ,OAAO,KAAK,UAAU,IAAI,CAAC;AAClG,UAAI,gBAAgB,GAAG;AACrB,gBAAQ,IAAIA,OAAM,MAAM,YAAO,aAAa,sCAAsC,CAAC;AACnF,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAGA,UAAM,eAAe,oBAAoB,SAASc,iBAAgB,OAAOd,OAAM,IAAI;AACnF,UAAM,gBAAgB,MAAMkC,SAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,kCAAkC;AAAA,MACvD,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,cAAc,oBAAoB,QAAQc,iBAAgB,MAAMd,OAAM,MAAM;AAClF,UAAM,eAAe,MAAMkC,SAAQ;AAAA,MACjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,iCAAiC;AAAA,MACtD,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,cAAc,oBAAoB,QAAQc,iBAAgB,MAAMd,OAAM,KAAK;AACjF,UAAM,eAAe,MAAMkC,SAAQ;AAAA,MACjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,iCAAiC;AAAA,MACtD,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,aAAa,oBAAoB,OAAOc,iBAAgB,KAAKd,OAAM,OAAO;AAChF,UAAM,cAAc,MAAMkC,SAAQ;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,uCAAuC;AAAA,MAC5D,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,gBAAgB,oBAAoB,UAAUc,iBAAgB,QAAQd,OAAM,IAAI;AACtF,UAAM,iBAAiB,MAAMkC,SAAQ;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,MACxD,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,mBAAmB,oBAAoB,aAAac,iBAAgB,WAAWd,OAAM,IAAI;AAC/F,UAAM,oBAAoB,MAAMkC,SAAQ;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,sCAAsC;AAAA,MAC3D,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,eAAe,oBAAoB,SAASc,iBAAgB,OAAOd,OAAM,GAAG;AAClF,UAAM,gBAAgB,MAAMkC,SAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,kCAAkC;AAAA,MACvD,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,mBAAmB,oBAAoB,aAAac,iBAAgB,WAAWd,OAAM,MAAM;AACjG,UAAM,oBAAoB,MAAMkC,SAAQ;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,oCAAoC;AAAA,MACzD,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAGf,UAAM,oBAAoB,oBAAoB,cAAcc,iBAAgB,YAAYd,OAAM,IAAI;AAClG,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,uCAAuC;AAAA,MAC5D,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AAEf,YAAQ,WAAW;AAAA,MACjB,OAAO,cAAc,SAAS,CAAC;AAAA,MAC/B,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC5B,MAAM,aAAa,QAAQ,CAAC;AAAA,MAC5B,KAAK,YAAY,OAAO,CAAC;AAAA,MACzB,QAAQ,eAAe,UAAU,CAAC;AAAA,MAClC,WAAW,kBAAkB,aAAa,CAAC;AAAA,MAC3C,OAAO,cAAc,SAAS,CAAC;AAAA,MAC/B,WAAW,kBAAkB,aAAa,CAAC;AAAA,MAC3C,YAAY,mBAAmB,cAAc,CAAC;AAAA,IAChD;AAGA,UAAM,oBAAoB,MAAMkC,SAAQ;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,iBAAiB;AAAA,MACtC,MAAMA,OAAM,KAAK,oCAAoC;AAAA,IACvD,GAAG,YAAY;AACf,QAAI,kBAAkB,QAAQ;AAC5B,MAAC,QAAQ,SAAqC,SAAS,kBAAkB;AAAA,IAC3E;AAAA,EACF;AAKA;AACE,UAAM,YAAY,eAAe,YAAY;AAC7C,aAAS,gBAAgB,SAAS;AAElC,UAAM,iBAAiB,MAAMkC,SAAQ;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,oBAAoB;AAAA,MACzC,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,QACzC,GAAGe,oBAAmB,IAAI,QAAM;AAAA,UAC9B,OAAO,EAAE,OAAO,qBACZ,GAAG,EAAE,KAAK,IAAIf,OAAM,MAAM,oBAAe,CAAC,KAC1C,EAAE;AAAA,UACN,OAAO,EAAE;AAAA,UACT,aAAaA,OAAM,KAAK,EAAE,IAAI;AAAA,QAChC,EAAE;AAAA,MACJ;AAAA,MACA,SAAS;AAAA;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,mBAAmB,eAAe,UAAU;AAEpD,UAAM,gBAAgB,MAAMkC,SAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,yBAAyB;AAAA,MAC9C,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,QACzC,GAAGgB,gBAAe,IAAI,QAAM;AAAA,UAC1B,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,QACX,EAAE;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,gBAAgB,cAAc,iBAAiB;AAGvD,QAAI,QAAQ,kBAAkB,SAAS;AACrC,YAAM,sBAAsB,MAAMkB,SAAQ;AAAA,QACxC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,QAC7D,MAAMA,OAAM,KAAK,iDAAiD;AAAA,MACpE,GAAG,YAAY;AACf,cAAQ,qBAAqB,oBAAoB,uBAAuB;AAAA,IAC1E;AAGA,UAAM,kBAAkB,MAAMkC,SAAQ;AAAA,MACpC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,uCAAuC;AAAA,MAC5D,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,QACzC,GAAGiB,iBAAgB,IAAI,QAAM;AAAA,UAC3B,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,QACX,EAAE;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,qBAAqB,gBAAgB,sBAAsB;AAGnE,QAAI,QAAQ,uBAAuB,SAAS;AAC1C,YAAM,wBAAwB,MAAMiB,SAAQ;AAAA,QAC1C,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,QACxD,MAAMA,OAAM,KAAK,yCAAyC;AAAA,MAC5D,GAAG,YAAY;AACf,cAAQ,0BAA0B,sBAAsB,iBAAiB;AAAA,IAC3E;AAGA,UAAM,wBAAwB,MAAMkC,SAAQ;AAAA,MAC1C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,qCAAqC;AAAA,MAC1D,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,IACP,GAAG,YAAY;AACf,YAAQ,gBAAgB,sBAAsB,iBAAiB;AAG/D,UAAM,sBAAsB,MAAMkC,SAAQ;AAAA,MACxC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,0BAA0B;AAAA,MAC/C,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,QACzC,EAAE,OAAO,sDAA4C,OAAO,UAAU;AAAA,QACtE,EAAE,OAAO,2BAA2B,OAAO,SAAS;AAAA,QACpD,EAAE,OAAO,8BAA8B,OAAO,UAAU;AAAA,MAC1D;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,cAAc,oBAAoB,eAAe;AAGzD,UAAM,sBAAsB,MAAMkC,SAAQ;AAAA,MACxC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,mBAAmB;AAAA,MACxC,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,GAAG;AAAA,QACzC,EAAE,OAAO,8BAAgB,OAAO,UAAU;AAAA,QAC1C,EAAE,OAAO,2CAA0B,OAAO,UAAU;AAAA,QACpD,EAAE,OAAO,2CAA0B,OAAO,SAAS;AAAA,QACnD,EAAE,OAAO,uCAAyB,OAAO,SAAS;AAAA,QAClD,EAAE,OAAO,yCAA2B,OAAO,UAAU;AAAA,QACrD,EAAE,OAAO,gDAA+B,OAAO,aAAa;AAAA,QAC5D,EAAE,OAAO,yCAA2B,OAAO,QAAQ;AAAA,QACnD,EAAE,OAAO,2EAA0B,OAAO,UAAU;AAAA,QACpD,EAAE,OAAO,oEAAkC,OAAO,qBAAqB;AAAA,QACvE,EAAE,OAAO,qEAAmC,OAAO,sBAAsB;AAAA,QACzE,EAAE,OAAO,oDAAuB,OAAO,WAAW;AAAA,QAClD,EAAE,OAAO,kDAAqB,OAAO,SAAS;AAAA,QAC9C,EAAE,OAAO,0EAAyB,OAAO,SAAS;AAAA,QAClD,EAAE,OAAO,8DAAuB,OAAO,SAAS;AAAA,QAChD,EAAE,OAAO,mEAAuB,OAAO,QAAQ;AAAA,QAC/C,EAAE,OAAO,+DAAwB,OAAO,UAAU;AAAA,QAClD,EAAE,OAAO,sDAAoB,OAAO,OAAO;AAAA,QAC3C,EAAE,OAAO,gDAAmB,OAAO,OAAO;AAAA,QAC1C,EAAE,OAAO,wDAAgC,OAAO,aAAa;AAAA,QAC7D,EAAE,OAAO,oDAAsC,OAAO,aAAa;AAAA,QACnE,EAAE,OAAO,4CAA8B,OAAO,QAAQ;AAAA,QACtD,EAAE,OAAO,yCAA2B,OAAO,WAAW;AAAA,QACtD,EAAE,OAAO,sCAAwB,OAAO,SAAS;AAAA,QACjD,EAAE,OAAO,gDAAwB,OAAO,QAAQ;AAAA,QAChD,EAAE,OAAO,+CAA4B,OAAO,SAAS;AAAA,QACrD,EAAE,OAAO,yCAA2B,OAAO,YAAY;AAAA,QACvD,EAAE,OAAO,gDAA0B,OAAO,WAAW;AAAA,QACrD,EAAE,OAAO,yFAA8B,OAAO,YAAY;AAAA,QAC1D,EAAE,OAAO,+FAA+B,OAAO,YAAY;AAAA,QAC3D,EAAE,OAAO,+EAAyB,OAAO,QAAQ;AAAA,QACjD,EAAE,OAAO,6CAAyB,OAAO,UAAU;AAAA,QACnD,EAAE,OAAO,wCAA0B,OAAO,UAAU;AAAA,QACpD,EAAE,OAAO,wCAA0B,OAAO,YAAY;AAAA,QACtD,EAAE,OAAO,qCAAuB,OAAO,SAAS;AAAA,QAChD,EAAE,OAAO,sCAAwB,OAAO,UAAU;AAAA,QAClD,EAAE,OAAO,uCAAyB,OAAO,WAAW;AAAA,QACpD,EAAE,OAAO,8CAA2B,OAAO,UAAU;AAAA,QACrD,EAAE,OAAO,iDAA8B,OAAO,aAAa;AAAA,QAC3D,EAAE,OAAO,wDAAgC,OAAO,YAAY;AAAA,QAC5D,EAAE,OAAO,0CAA4B,OAAO,WAAW;AAAA,QACvD,EAAE,OAAO,qEAAyB,OAAO,UAAU;AAAA,QACnD,EAAE,OAAO,qEAA8B,OAAO,UAAU;AAAA,QACxD,EAAE,OAAO,gCAAkB,OAAO,YAAY;AAAA,QAC9C,EAAE,OAAO,0CAA4B,OAAO,UAAU;AAAA,QACtD,EAAE,OAAO,sCAAwB,OAAO,kBAAkB;AAAA,QAC1D,EAAE,OAAO,6CAA+B,OAAO,gBAAgB;AAAA,QAC/D,EAAE,OAAO,2CAA6B,OAAO,uBAAuB;AAAA,QACpE,EAAE,OAAO,sCAAwB,OAAO,kBAAkB;AAAA,QAC1D,EAAE,OAAO,sCAAwB,OAAO,kBAAkB;AAAA,QAC1D,EAAE,OAAO,mCAAqB,OAAO,eAAe;AAAA,QACpD,EAAE,OAAO,6BAAsB,OAAO,QAAQ;AAAA,MAChD;AAAA,MACA,MAAMA,OAAM,KAAK,gBAAgB;AAAA,MACjC,SAAS,CAAC,OAAe,YACvB,QAAQ,QAAQ,QAAQ,OAAO,OAAK,EAAE,MAAM,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC,CAAC,CAAC;AAAA,IAC5F,GAAG,YAAY;AACf,YAAQ,kBAAkB,oBAAoB,mBAAmB;AAGjE,QAAI,QAAQ,oBAAoB,SAAS;AACvC,YAAM,qBAAqB,MAAMkC,SAAQ;AAAA,QACvC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,2BAA2B;AAAA,QAChD,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO;AAAA,MACrC,GAAG,YAAY;AACf,cAAQ,kBAAkB,mBAAmB,kBAAkB;AAAA,IACjE;AAGA,UAAM,mBAAmB,MAAMkC,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,sBAAsB;AAAA,MAC3C,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,gCAA2B,GAAG,OAAO,GAAG;AAAA,QAC5D,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,QACjC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,QACjC,EAAE,OAAO,qBAAqB,OAAO,QAAQ;AAAA,QAC7C,EAAE,OAAO,mBAAmB,OAAO,QAAQ;AAAA,QAC3C,EAAE,OAAO,kBAAkB,OAAO,UAAU;AAAA,QAC5C,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,QACrC,EAAE,OAAO,eAAe,OAAO,SAAS;AAAA,MAC1C;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,WAAW,iBAAiB,YAAY;AAEhD,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,yBAAyB;AAAA,MAC9C,MAAMA,OAAM,KAAK,iDAAiD;AAAA,IACpE,GAAG,YAAY;AACf,YAAQ,aAAa,mBAAmB,cAAc;AAAA,EACxD;AAKA,QAAM,SAAS,eAAe,IAAI;AAClC,WAAS,gBAAgB,MAAM;AAE/B,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,qCAAqC;AAAA,IAC1D,SAASkB,mBAAkB,IAAI,QAAM;AAAA,MACnC,OAAO,EAAE,cACL,GAAG,EAAE,KAAK,IAAIlB,OAAM,MAAM,oBAAe,CAAC,KAC1C,EAAE;AAAA,MACN,OAAO,EAAE;AAAA,MACT,aAAaA,OAAM,KAAK,EAAE,WAAW;AAAA,MACrC,UAAU;AAAA;AAAA,IACZ,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,aAAa,mBAAmB,cAAckB,mBAAkB,IAAI,OAAK,EAAE,EAAE;AAGrF,MAAK,QAAQ,WAAwB,SAAS,GAAG;AAC/C,YAAQ,IAAIlB,OAAM,MAAM,oBAAe,CAAC;AACxC,eAAW,UAAW,QAAQ,YAAyB;AACrD,YAAM,OAAOkB,mBAAkB,KAAK,OAAK,EAAE,OAAO,MAAM;AACxD,UAAI,KAAM,SAAQ,IAAIlB,OAAM,KAAK,cAAS,KAAK,KAAK,EAAE,CAAC;AAAA,IACzD;AAAA,EACF;AAGA,QAAM,mBAAmB,MAAMkC,SAAQ;AAAA,IACrC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,gDAAgD;AAAA,IACrE,SAAS;AAAA,MACP,EAAE,OAAO,mCAAmC,OAAO,SAAS;AAAA,MAC5D,EAAE,OAAO,+CAA+C,OAAO,gBAAgB;AAAA,MAC/E,EAAE,OAAO,qDAAqD,OAAO,aAAa;AAAA,MAClF,EAAE,OAAO,kDAAkD,OAAO,eAAe;AAAA,MACjF,EAAE,OAAO,2CAA2C,OAAO,aAAa;AAAA,MACxE,EAAE,OAAO,kCAAkC,OAAO,QAAQ;AAAA,IAC5D;AAAA,IACA,SAAS;AAAA;AAAA,EACX,GAAG,YAAY;AACf,UAAQ,oBAAoB,iBAAiB,qBAAqB;AAGlE,QAAM,oBAAoB,MAAMkC,SAAQ;AAAA,IACtC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,wBAAwB;AAAA,IAC7C,SAAS;AAAA,MACP,EAAE,OAAO,2CAAoC,OAAO,UAAU;AAAA,MAC9D,EAAE,OAAO,8CAAoC,OAAO,WAAW;AAAA,MAC/D,EAAE,OAAO,8CAAuC,OAAO,WAAW;AAAA,IACpE;AAAA,IACA,SAAS;AAAA,EACX,GAAG,YAAY;AACf,UAAQ,uBAAuB,kBAAkB,wBAAwB;AAGzE,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,gDAAgD;AAAA,IACrE,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,qBAAqB,mBAAmB,sBAAsB;AAGtE,QAAM,wBAAwB,MAAMkC,SAAQ;AAAA,IAC1C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,IAC7D,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,qBAAqB,sBAAsB,sBAAsB;AAEzE,QAAM,sBAAsB,MAAMkC,SAAQ;AAAA,IACxC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,uCAAuC;AAAA,IAC5D,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,mBAAmB,oBAAoB,oBAAoB;AAGnE,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,0FAAmF,CAAC;AAC3G,UAAQ,IAAIA,OAAM,KAAK,kFAAkF,CAAC;AAC1G,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,gDAAgD;AAAA,IACrE,MAAMA,OAAM,KAAK,2CAA2C;AAAA,EAC9D,GAAG,YAAY;AACf,UAAQ,aAAa,mBAAmB,cAAc;AAGtD,QAAM,uBAAuB,MAAMkC,SAAQ;AAAA,IACzC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kDAAkD;AAAA,IACvE,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,YAAY;AACf,UAAQ,eAAe,qBAAqB,gBAAgB;AAE5D,MAAI,QAAQ,cAAc;AACxB,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,iDAAiD;AAAA,MACtE,MAAMA,OAAM,KAAK,wBAAwB;AAAA,IAC3C,GAAG,YAAY;AACf,YAAQ,aAAa,mBAAmB,cAAc;AAAA,EACxD;AAGA,QAAM,UAAW,QAAQ,MAAmB,SAAS;AACrD,MAAI,CAAC,SAAS;AACZ,UAAM,uBAAuB,MAAMkC,SAAQ;AAAA,MACzC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,oCAAoC;AAAA,MACzD,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ,GAAG,YAAY;AACf,YAAQ,mBAAmB,qBAAqB,oBAAoB;AAEpE,QAAI,QAAQ,kBAAkB;AAC5B,YAAM,uBAAuB,MAAMkC,SAAQ;AAAA,QACzC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,oBAAoB;AAAA,QACzC,SAAS;AAAA,UACP,EAAE,OAAO,uCAAgC,OAAO,YAAY;AAAA,UAC5D,EAAE,OAAO,qCAA8B,OAAO,iBAAiB;AAAA,UAC/D,EAAE,OAAO,sCAA4B,OAAO,aAAa;AAAA,UACzD,EAAE,OAAO,wCAA4B,OAAO,aAAa;AAAA,QAC3D;AAAA,MACF,GAAG,YAAY;AACf,cAAQ,mBAAmB,qBAAqB,oBAAoB;AAAA,IACtE;AAAA,EACF;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,uFAAgF,CAAC;AACxG,UAAQ,IAAIA,OAAM,KAAK,yEAAyE,CAAC;AACjG,QAAM,yBAAyB,MAAMkC,SAAQ;AAAA,IAC3C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,kDAAkD;AAAA,IACvE,SAASuB,iBAAgB,IAAI,QAAM;AAAA,MACjC,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK;AAAA,MAC3B,OAAO,EAAE;AAAA,MACT,aAAavB,OAAM,KAAK,EAAE,WAAW;AAAA,IACvC,EAAE;AAAA,IACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,IAChE,cAAc;AAAA,EAChB,GAAG,YAAY;AACf,UAAQ,iBAAiB,uBAAuB,kBAAkB,CAAC;AAGnE,UAAQ,IAAI;AACZ,QAAM,iBAAkB,QAAQ,SAAsB,CAAC;AACvD,QAAM,qBAA+B,CAAC;AACtC,MAAI,eAAe,SAAS,QAAQ,GAAG;AACrC,uBAAmB,KAAK,iBAAiB,oBAAoB,cAAc;AAAA,EAC7E;AACA,MAAI,eAAe,SAAS,YAAY,KAAK,eAAe,SAAS,YAAY,GAAG;AAClF,uBAAmB,KAAK,uBAAuB,iBAAiB,cAAc;AAAA,EAChF;AACA,MAAI,eAAe,SAAS,IAAI,GAAG;AACjC,uBAAmB,KAAK,eAAe,6BAA6B,QAAQ;AAAA,EAC9E;AACA,MAAI,eAAe,SAAS,MAAM,GAAG;AACnC,uBAAmB,KAAK,eAAe,iBAAiB,YAAY;AAAA,EACtE;AACA,MAAI,eAAe,SAAS,MAAM,KAAK,eAAe,SAAS,QAAQ,GAAG;AACxE,uBAAmB,KAAK,sCAAsC,SAAS;AAAA,EACzE;AACA,QAAM,WAAW,mBAAmB,SAAS,IACzC,SAAS,mBAAmB,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,KAClD;AAEJ,QAAM,+BAA+B,MAAMkC,SAAQ;AAAA,IACjD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,oDAAoD;AAAA,IACzE,MAAMA,OAAM,KAAK,QAAQ;AAAA,EAC3B,GAAG,YAAY;AACf,UAAQ,sBAAsB,6BAA6B,uBAAuB;AAGlF,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,4DAA8B,CAAC;AACtD,UAAQ,IAAI;AAGZ,UAAQ,IAAIA,OAAM,KAAK,gGAAyF,CAAC;AACjH,UAAQ,IAAIA,OAAM,KAAK,iFAAiF,CAAC;AACzG,UAAQ,IAAIA,OAAM,KAAK,uEAAuE,CAAC;AAC/F,QAAM,sBAAsB,MAAMkC,SAAQ;AAAA,IACxC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,IAC7D,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAMA,OAAM,KAAK,sCAAsC;AAAA,EACzD,GAAG,YAAY;AACf,UAAQ,cAAc,oBAAoB,eAAe;AAGzD,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,KAAK,wFAA8E,CAAC;AACtG,UAAQ,IAAIA,OAAM,KAAK,gBAAgB,CAAC;AACxC,UAAQ,IAAIA,OAAM,KAAK,kDAA6C,CAAC;AACrE,UAAQ,IAAIA,OAAM,KAAK,kDAA6C,CAAC;AACrE,UAAQ,IAAIA,OAAM,KAAK,uEAAkE,CAAC;AAC1F,QAAM,2BAA2B,MAAMkC,SAAQ;AAAA,IAC7C,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,+BAA+B;AAAA,IACpD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAMA,OAAM,KAAK,8CAA8C;AAAA,EACjE,GAAG,YAAY;AACf,UAAQ,mBAAmB,yBAAyB,oBAAoB;AAGxE,UAAQ,gBAAgB;AACxB,UAAQ,cAAc;AAEtB,MAAI,QAAQ,oBAAoB,KAAK;AACnC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,wDAAiD,CAAC;AACzE,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,MAAM,KAAK,yBAAyB,CAAC;AACvD,YAAQ,IAAIA,OAAM,KAAK,qDAAgD,CAAC;AACxE,YAAQ,IAAIA,OAAM,KAAK,6CAAwC,CAAC;AAChE,YAAQ,IAAIA,OAAM,KAAK,+DAA0D,CAAC;AAClF,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,OAAO,+BAA+B,CAAC;AACzD,YAAQ,IAAIA,OAAM,KAAK,yCAAoC,CAAC;AAC5D,YAAQ,IAAIA,OAAM,KAAK,gEAA2D,CAAC;AACnF,YAAQ,IAAIA,OAAM,KAAK,8CAAyC,CAAC;AACjE,YAAQ,IAAI;AAEZ,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,2DAA2D;AAAA,MAChF,SAAS;AAAA;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAMA,OAAM,MAAM,mCAAmC;AAAA,IACvD,GAAG,YAAY;AACf,YAAQ,gBAAgB,mBAAmB,iBAAiB;AAE5D,QAAI,QAAQ,eAAe;AACzB,cAAQ,IAAIA,OAAM,MAAM,sEAAiE,CAAC;AAC1F,cAAQ,IAAIA,OAAM,KAAK,4DAA4D,CAAC;AAAA,IACtF,OAAO;AAEL,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,8EAAuE,CAAC;AAC/F,cAAQ,IAAIA,OAAM,KAAK,4DAA4D,CAAC;AACpF,YAAM,iBAAiB,MAAMkC,SAAQ;AAAA,QACnC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,0CAA0C;AAAA,QAC/D,SAAS;AAAA,QACT,MAAMA,OAAM,KAAK,sCAAsC;AAAA,MACzD,GAAG,YAAY;AACf,cAAQ,cAAc,eAAe,eAAe;AACpD,cAAQ,IAAIA,OAAM,MAAM,mCAA8B,QAAQ,WAAW,EAAE,CAAC;AAC5E,cAAQ,IAAIA,OAAM,KAAK,gCAAgC,QAAQ,WAAW,oBAAoB,CAAC;AAAA,IACjG;AAAA,EACF;AAEA,MAAI,QAAQ,oBAAoB,CAAC,KAAK;AACpC,YAAQ,IAAIA,OAAM,OAAO,qEAA2D,CAAC;AACrF,YAAQ,IAAIA,OAAM,KAAK,uCAAuC,CAAC;AAC/D,YAAQ,mBAAmB;AAAA,EAC7B;AAGA,QAAM,oBAAoB,QAAQ;AAClC,MAAI,QAAQ,oBAAoB,qBAAqB,kBAAkB,SAAS,GAAG;AACjF,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,OAAO,2FAAiF,CAAC;AAC3G,UAAM,wBAAwB,MAAMkC,SAAQ;AAAA,MAC1C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,kDAAkD;AAAA,MACvE,SAAS,kBAAkB,IAAI,QAAM,EAAE,OAAO,GAAG,OAAO,EAAE,EAAE;AAAA,MAC5D,MAAMA,OAAM,KAAK,mDAAmD;AAAA,IACtE,GAAG,YAAY;AACf,YAAQ,oBAAoB,sBAAsB,iBAAiB,kBAAkB,CAAC;AACtF,YAAQ,IAAIA,OAAM,MAAM,YAAO,QAAQ,iBAAiB,iDAAiD,CAAC;AAAA,EAC5G;AAGA,UAAQ,IAAI;AACZ,MAAI,gBAAgB,GAAG;AACrB,YAAQ,IAAIA,OAAM,KAAK,uFAAgF,CAAC;AACxG,YAAQ,IAAIA,OAAM,KAAK,yEAAyE,CAAC;AACjG,UAAM,0BAA0B,MAAMkC,SAAQ;AAAA,MAC5C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,sCAAsC;AAAA,MAC3D,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAMA,OAAM,KAAK,0CAA0C;AAAA,IAC7D,GAAG,YAAY;AACf,YAAQ,sBAAsB,wBAAwB,uBAAuB;AAG7E,QAAI,QAAQ,uBAAuB,KAAK;AACtC,UAAI;AACF,gBAAQ,IAAIA,OAAM,KAAK,uCAAuC,CAAC;AAC/D,cAAM,eAAe,MAAM,IAAI,QAAQ;AACvC,YAAI,aAAa,MAAM;AACrB,kBAAQ,WAAW,aAAa,KAAK,QAAQ,aAAa,KAAK,gBAAgB;AAC/E,kBAAQ,YAAY,aAAa,KAAK,SAAS;AAC/C,kBAAQ,cAAc,aAAa,KAAK,WAAW;AAEnD,kBAAQ,gBAAgB,aAAa,KAAK,eAAe;AACzD,kBAAQ,IAAIA,OAAM,MAAM,yBAAoB,CAAC;AAAA,QAC/C;AAAA,MACF,QAAQ;AACN,gBAAQ,IAAIA,OAAM,OAAO,iDAAiD,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,sDAA+C,IAAIA,OAAM,KAAK,aAAa,IAAIA,OAAM,KAAK,aAAa,CAAC;AAC/H,YAAQ,sBAAsB;AAAA,EAChC;AAKA;AACE,UAAM,iBAAiB,eAAe,YAAY;AAClD,aAAS,gBAAgB,cAAc;AAEvC,YAAQ,IAAIA,OAAM,KAAK,4DAA4D,CAAC;AACpF,YAAQ,IAAIA,OAAM,KAAK,0EAA0E,CAAC;AAClG,YAAQ,IAAI;AAGZ,UAAM,cAAc,oBAAI,IAAY;AACpC,UAAM,eAAe;AAGrB,YAAQ,IAAIA,OAAM,IAAI,KAAK,6CAAwC,CAAC;AACpE,UAAM,gBAAgB,MAAMkC,SAAQ;AAAA,MAClC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,+BAA+B;AAAA,MACpD,SAAS;AAAA,QACP,GAAGwB,kBAAiB,IAAI,QAAM;AAAA,UAC5B,OAAOxB,OAAM,IAAI,CAAC;AAAA,UAClB,OAAO;AAAA,QACT,EAAE;AAAA,QACF,EAAE,OAAOA,OAAM,QAAQ,uBAAkB,GAAG,OAAO,aAAa;AAAA,MAClE;AAAA,MACA,MAAMA,OAAM,KAAK,mCAA8B;AAAA,MAC/C,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,QAAI,aAAuB,cAAc,SAAS,CAAC,GAAG,OAAO,CAAC,MAAc,MAAM,YAAY;AAG9F,SAAK,cAAc,SAAS,CAAC,GAAG,SAAS,YAAY,GAAG;AACtD,YAAM,sBAAsB,MAAMkC,SAAQ;AAAA,QACxC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,qDAAqD;AAAA,QAC1E,MAAMA,OAAM,KAAK,mDAAmD;AAAA,MACtE,GAAG,YAAY;AACf,UAAI,oBAAoB,QAAQ;AAC9B,cAAM,cAAc,oBAAoB,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AACrG,oBAAY,CAAC,GAAG,WAAW,GAAG,WAAW;AAAA,MAC3C;AAAA,IACF;AACA,YAAQ,gBAAgB;AACxB,cAAU,QAAQ,OAAK,YAAY,IAAI,CAAC,CAAC;AAGzC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,OAAO,KAAK,0CAA0C,CAAC;AACzE,UAAM,kBAAkBwB,kBAAiB,OAAO,OAAK,CAAC,YAAY,IAAI,CAAC,CAAC;AACxE,UAAM,cAAc,MAAMU,SAAQ;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,6BAA6B;AAAA,MAClD,SAAS;AAAA,QACP,GAAG,gBAAgB,IAAI,QAAM;AAAA,UAC3B,OAAOA,OAAM,OAAO,CAAC;AAAA,UACrB,OAAO;AAAA,QACT,EAAE;AAAA,QACF,EAAE,OAAOA,OAAM,QAAQ,uBAAkB,GAAG,OAAO,aAAa;AAAA,MAClE;AAAA,MACA,MAAMA,OAAM,KAAK,mCAA8B;AAAA,MAC/C,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,QAAI,WAAqB,YAAY,OAAO,CAAC,GAAG,OAAO,CAAC,MAAc,MAAM,YAAY;AAGxF,SAAK,YAAY,OAAO,CAAC,GAAG,SAAS,YAAY,GAAG;AAClD,YAAM,oBAAoB,MAAMkC,SAAQ;AAAA,QACtC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,mDAAmD;AAAA,QACxE,MAAMA,OAAM,KAAK,wDAAwD;AAAA,MAC3E,GAAG,YAAY;AACf,UAAI,kBAAkB,QAAQ;AAC5B,cAAM,cAAc,kBAAkB,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AACnG,kBAAU,CAAC,GAAG,SAAS,GAAG,WAAW;AAAA,MACvC;AAAA,IACF;AACA,YAAQ,cAAc;AACtB,YAAQ,QAAQ,OAAK,YAAY,IAAI,CAAC,CAAC;AAGvC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,MAAM,KAAK,wDAAmD,CAAC;AACjF,UAAM,qBAAqBwB,kBAAiB,OAAO,OAAK,CAAC,YAAY,IAAI,CAAC,CAAC;AAC3E,UAAM,iBAAiB,MAAMU,SAAQ;AAAA,MACnC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,gCAAgC;AAAA,MACrD,SAAS;AAAA,QACP,GAAG,mBAAmB,IAAI,QAAM;AAAA,UAC9B,OAAOA,OAAM,MAAM,CAAC;AAAA,UACpB,OAAO;AAAA,QACT,EAAE;AAAA,QACF,EAAE,OAAOA,OAAM,QAAQ,uBAAkB,GAAG,OAAO,aAAa;AAAA,MAClE;AAAA,MACA,MAAMA,OAAM,KAAK,mCAA8B;AAAA,MAC/C,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,QAAI,cAAwB,eAAe,UAAU,CAAC,GAAG,OAAO,CAAC,MAAc,MAAM,YAAY;AAGjG,SAAK,eAAe,UAAU,CAAC,GAAG,SAAS,YAAY,GAAG;AACxD,YAAM,uBAAuB,MAAMkC,SAAQ;AAAA,QACzC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,sDAAsD;AAAA,QAC3E,MAAMA,OAAM,KAAK,iCAAiC;AAAA,MACpD,GAAG,YAAY;AACf,UAAI,qBAAqB,QAAQ;AAC/B,cAAM,cAAc,qBAAqB,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AACtG,qBAAa,CAAC,GAAG,YAAY,GAAG,WAAW;AAAA,MAC7C;AAAA,IACF;AACA,YAAQ,iBAAiB;AAGzB,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,qBAAqB,CAAC;AAC7C,QAAI,WAAW,SAAS,GAAG;AACzB,cAAQ,IAAIA,OAAM,MAAM,sBAAiB,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,IACnE;AACA,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,IAAIA,OAAM,OAAO,cAAc,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,IAC9D;AACA,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,IAAIA,OAAM,IAAI,qBAAgB,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,IAC/D;AAAA,EACF;AAKA;AACE,UAAM,cAAc,eAAe,SAAS;AAC5C,aAAS,gBAAgB,WAAW;AAEpC,UAAM,qBAAqB,MAAMkC,SAAQ;AAAA,MACvC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,+BAA+B;AAAA,MACpD,SAAS0B,aAAY,IAAI,QAAM;AAAA,QAC7B,OAAO,GAAG,EAAE,KAAK,MAAM1B,OAAM,KAAK,EAAE,IAAI,CAAC;AAAA,QACzC,OAAO,EAAE;AAAA,QACT,UAAU,EAAE,OAAO,UAAU,EAAE,OAAO;AAAA,MACxC,EAAE;AAAA,MACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,YAAQ,aAAa,mBAAmB,cAAc,CAAC;AAGvD,UAAM,qBAAsB,QAAQ,OAAoB,SAAS,YAAY,KACjD,QAAQ,OAAoB,SAAS,YAAY,IACzE,CAAC,QAAQ,QAAQ,IAChB,QAAQ,OAAoB,SAAS,QAAQ,IAC5C,CAAC,QAAQ,IACT,CAAC;AAGP,UAAM,uBAAuB,kBAAkByB,iBAAgB,IAAI,QAAM;AAAA,MACvE,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU,mBAAmB,SAAS,CAAC;AAAA,IACzC,EAAE,CAAC;AACH,UAAM,wBAAwB,MAAMS,SAAQ;AAAA,MAC1C,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,sCAAsC;AAAA,MAC3D,SAAS;AAAA,MACT,MAAMA,OAAM,KAAK,yDAA+C;AAAA,MAChE,cAAc;AAAA,IAChB,GAAG,YAAY;AACf,YAAQ,iBAAiB,sBAAsB,kBAAkB,CAAC;AAElE,UAAM,mBAAmB,MAAMkC,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,2BAA2B;AAAA,MAChD,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,IACP,GAAG,YAAY;AACf,YAAQ,iBAAiB,iBAAiB,YAAY;AAGtD,UAAM,cAAc,MAAMkC,SAAQ;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,oCAAoC;AAAA,MACzD,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ,GAAG,YAAY;AACf,YAAQ,gBAAgB,YAAY,iBAAiB;AAGrD,YAAQ,IAAIA,OAAM,KAAK,6EAA6E,CAAC;AACrG,YAAQ,IAAIA,OAAM,KAAK,mFAAmF,CAAC;AAC3G,UAAM,mBAAmB,MAAMkC,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,uBAAuB;AAAA,MAC5C,SAAS;AAAA,QACP,EAAE,OAAOA,OAAM,KAAK,aAAQ,GAAG,OAAO,OAAO;AAAA,QAC7C,EAAE,OAAO,oDAAoD,OAAO,MAAM;AAAA,QAC1E,EAAE,OAAO,6BAA6B,OAAO,KAAK;AAAA,MACpD;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,kBAAkB,iBAAiB,oBAAoB;AAG/D,UAAM,eAAe,MAAMkC,SAAQ;AAAA,MACjC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,gBAAgB;AAAA,MACrC,SAAS;AAAA,QACP,EAAE,OAAO,6CAA6C,OAAO,UAAU;AAAA,QACvE,EAAE,OAAO,sCAAsC,OAAO,gBAAgB;AAAA,QACtE,EAAE,OAAO,+BAA+B,OAAO,OAAO;AAAA,MACxD;AAAA,MACA,SAAS;AAAA,IACX,GAAG,YAAY;AACf,YAAQ,eAAe,aAAa,gBAAgB;AAEpD,UAAM,oBAAoB,MAAMkC,SAAQ;AAAA,MACtC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAASlC,OAAM,MAAM,gBAAgB;AAAA,MACrC,MAAMA,OAAM,KAAK,iDAAiD;AAAA,IACpE,GAAG,YAAY;AACf,YAAQ,YAAY,kBAAkB,aAAa;AAAA,EACrD;AAKA;AACE,UAAM,aAAa,eAAe,QAAQ;AAC1C,aAAS,gBAAgB,UAAU;AAGnC,QAAI,kBAAkB;AACtB,QAAI,UAAU;AACZ,cAAQ,IAAIA,OAAM,KAAK,uFAAuF,CAAC;AAC/G,cAAQ,IAAI;AACZ,YAAM,eAAe,MAAMkC,SAAQ;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,kCAAkC;AAAA,QACvD,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ,GAAG,YAAY;AACf,wBAAkB,aAAa,QAAQ;AAAA,IACzC;AAEA,QAAI,CAAC,iBAAiB;AAEpB,cAAQ,IAAIA,OAAM,KAAK,8CAA8C,CAAC;AACtE,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,iGAA0F,CAAC;AAClH,cAAQ,IAAIA,OAAM,KAAK,6EAAsE,CAAC;AAC9F,cAAQ,IAAI;AAEZ,YAAM,6BAA6B,MAAMkC,SAAQ;AAAA,QAC/C,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,mCAAmC;AAAA,QACxD,SAAS;AAAA,UACP,EAAE,OAAO,4CAAqC,OAAO,eAAe,aAAa,uDAAuD;AAAA,UACxI,EAAE,OAAO,yCAAkC,OAAO,QAAQ,aAAa,8CAA8C;AAAA,QACvH;AAAA,QACA,SAAS;AAAA,MACX,GAAG,YAAY;AACf,cAAQ,qBAAqB,2BAA2B,YAAY;AAEtE,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,oCAAoC,CAAC;AAC5D,cAAQ,IAAI;AAGZ,YAAM,sBAAsB;AAAA,QAC1B,EAAE,OAAO,2BAAoB,OAAO,gBAAgB,MAAM,6BAA6B;AAAA,QACvF,EAAE,OAAO,6BAAsB,OAAO,gBAAgB,MAAM,yBAAyB;AAAA,QACrF,EAAE,OAAO,gCAAyB,OAAO,iBAAiB,MAAM,sBAAsB;AAAA,QACtF,EAAE,OAAO,yBAAkB,OAAO,YAAY,MAAM,0BAA0B;AAAA,QAC9E,EAAE,OAAO,+BAAmB,OAAO,WAAW,MAAM,kBAAkB;AAAA,QACtE,EAAE,OAAO,wBAAiB,OAAO,aAAa,MAAM,sBAAsB;AAAA,QAC1E,EAAE,OAAO,yBAAkB,OAAO,WAAW,MAAM,yBAAyB;AAAA,QAC5E,EAAE,OAAO,qBAAc,OAAO,WAAW,MAAM,eAAe;AAAA,QAC9D,EAAE,OAAO,uBAAgB,OAAO,UAAU,MAAM,iBAAiB;AAAA,QACjE,EAAE,OAAO,oCAAwB,OAAO,gBAAgB,MAAM,oBAAoB;AAAA,QAClF,EAAE,OAAO,0BAAmB,OAAO,aAAa,MAAM,kBAAkB;AAAA,MAC1E;AAGA,YAAM,gBAAwC,CAAC;AAC/C,iBAAW,OAAO,qBAAqB;AACrC,cAAM,WAAWD,mBAAkB,IAAI,KAAK;AAC5C,YAAI,UAAU;AACZ,gBAAM,UAAU,MAAM,iBAAiBN,MAAK,QAAQ,IAAI,GAAG,QAAQ,CAAC;AACpE,cAAI,SAAS;AACX,0BAAc,IAAI,KAAK,IAAI;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAEA,YAAM,gBAAgB,OAAO,KAAK,aAAa,EAAE;AACjD,UAAI,gBAAgB,GAAG;AACrB,gBAAQ,IAAIO,OAAM,MAAM,kBAAa,aAAa,mCAAmC,CAAC;AACtF,gBAAQ,IAAI;AAAA,MACd;AAEA,YAAM,sBAAsB,MAAMkC,SAAQ;AAAA,QACxC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAASlC,OAAM,MAAM,wCAAwC;AAAA,QAC7D,SAAS,oBAAoB,IAAI,QAAM;AAAA,UACrC,OAAO,cAAc,EAAE,KAAK,IACxB,GAAG,EAAE,KAAK,IAAIA,OAAM,MAAM,UAAU,CAAC,KACrC,EAAE;AAAA,UACN,OAAO,EAAE;AAAA,UACT,aAAaA,OAAM,KAAK,EAAE,IAAI;AAAA,QAChC,EAAE;AAAA,QACF,MAAMA,OAAM,KAAK,yDAA+C;AAAA,QAChE,cAAc;AAAA,MAChB,GAAG,YAAY;AACf,cAAQ,cAAc,oBAAoB,eAAe,CAAC;AAG1D,UAAK,QAAQ,aAA0B,SAAS,GAAG;AACjD,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,OAAM,KAAK,sCAA+B,CAAC;AACvD,gBAAQ,IAAIA,OAAM,KAAK,8EAA8E,CAAC;AACtG,YAAI,MAAM;AACR,kBAAQ,IAAIA,OAAM,QAAQ,wEAAmE,CAAC;AAAA,QAChG;AACA,gBAAQ,IAAI;AAEZ,gBAAQ,qBAAqB,CAAC;AAE9B,mBAAW,WAAY,QAAQ,aAA0B;AACvD,gBAAM,UAAU,oBAAoB,KAAK,OAAK,EAAE,UAAU,OAAO;AACjE,cAAI,CAAC,QAAS;AAEd,gBAAM,WAAWD,mBAAkB,OAAO;AAC1C,gBAAM,kBAAkB,cAAc,OAAO;AAE7C,cAAI,iBAAiB;AAEnB,kBAAM,UAAU,gBAAgB,MAAM,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI;AACjE,oBAAQ,IAAIC,OAAM,KAAK,wBAAS,QAAQ,gCAAiB,CAAC;AAC1D,oBAAQ,IAAIA,OAAM,KAAK,QAAQ,UAAU,GAAG,GAAG,KAAK,QAAQ,SAAS,MAAM,QAAQ,GAAG,CAAC;AACvF,oBAAQ,IAAI;AAEZ,kBAAM,iBAAiB,MAAMkC,SAAQ;AAAA,cACnC,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAASlC,OAAM,MAAM,GAAG,QAAQ,GAAG;AAAA,cACnC,SAAS;AAAA,gBACP,EAAE,OAAOA,OAAM,MAAM,6BAAwB,GAAG,OAAO,WAAW;AAAA,gBAClE,EAAE,OAAOA,OAAM,OAAO,iCAAuB,GAAG,OAAO,MAAM;AAAA,gBAC7D,EAAE,OAAOA,OAAM,KAAK,yBAAoB,GAAG,OAAO,UAAU;AAAA,cAC9D;AAAA,cACA,SAAS;AAAA,YACX,GAAG,YAAY;AAEf,gBAAI,eAAe,WAAW,YAAY;AACxC,cAAC,QAAQ,mBAA8C,OAAO,IAAI;AAAA,YACpE,WAAW,eAAe,WAAW,OAAO;AAC1C,sBAAQ,IAAI;AACZ,oBAAM,UAAU,MAAM,mBAAmB,iBAAiB,QAAQ,GAAG;AACrE,kBAAI,QAAQ,KAAK,GAAG;AAClB,gBAAC,QAAQ,mBAA8C,OAAO,IAAI;AAAA,cACpE;AAAA,YACF;AAAA,UAEF,OAAO;AAEL,kBAAM,iBAAiB,MAAMkC,SAAQ;AAAA,cACnC,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAASlC,OAAM,MAAM,GAAG,QAAQ,GAAG;AAAA,cACnC,SAAS;AAAA,gBACP,EAAE,OAAOA,OAAM,KAAK,yBAAoB,GAAG,OAAO,UAAU;AAAA,gBAC5D,EAAE,OAAOA,OAAM,OAAO,oCAA0B,GAAG,OAAO,MAAM;AAAA,cAClE;AAAA,cACA,SAAS;AAAA,YACX,GAAG,YAAY;AAEf,gBAAI,eAAe,WAAW,OAAO;AACnC,sBAAQ,IAAI;AACZ,kBAAI,MAAM;AACR,sBAAM,mBAAmB,MAAMkC,SAAQ;AAAA,kBACrC,MAAM;AAAA,kBACN,MAAM;AAAA,kBACN,SAASlC,OAAM,MAAM,eAAe,QAAQ,GAAG;AAAA,kBAC/C,MAAMA,OAAM,KAAK,uEAAuE;AAAA,gBAC1F,GAAG,YAAY;AAEf,oBAAI,UAAU,iBAAiB,SAAS;AAExC,oBAAI,QAAQ,YAAY,EAAE,WAAW,KAAK,GAAG;AAC3C,wBAAM,gBAAgB,QAAQ,UAAU,CAAC,EAAE,KAAK;AAChD,sBAAI,eAAe;AACjB,0BAAM,WAAW,MAAM,SAAS,YAAY,QAAQ,aAAa,aAAa,IAAI,eAAe;AACjG,wBAAI,UAAU;AACZ,8BAAQ,IAAIA,OAAM,KAAK,mDAAmD,CAAC;AAC3E,8BAAQ,IAAIA,OAAM,KAAK,OAAO,SAAS,UAAU,GAAG,GAAG,KAAK,SAAS,SAAS,MAAM,QAAQ,GAAG,CAAC;AAChG,4BAAM,WAAW,MAAMkC,SAAQ;AAAA,wBAC7B,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,SAASlC,OAAM,MAAM,gCAAgC;AAAA,wBACrD,SAAS;AAAA,sBACX,GAAG,YAAY;AACf,0BAAI,SAAS,QAAQ;AACnB,kCAAU;AAAA,sBACZ,OAAO;AACL,kCAAU;AAAA,sBACZ;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAEA,oBAAI,QAAQ,KAAK,GAAG;AAClB,kBAAC,QAAQ,mBAA8C,OAAO,IAAI;AAAA,gBACpE;AAAA,cACF,OAAO;AACL,sBAAM,UAAU,MAAM,mBAAmB,iBAAiB,QAAQ,GAAG;AACrE,oBAAI,QAAQ,KAAK,GAAG;AAClB,kBAAC,QAAQ,mBAA8C,OAAO,IAAI;AAAA,gBACpE;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,kBAAQ,IAAI;AAAA,QACd;AAAA,MACF;AAAA,IACA;AAAA,EACF;AAKA,QAAM,YAAY,eAAe,OAAO;AACxC,WAAS,gBAAgB,SAAS;AAIlC,UAAQ,UAAU;AAGlB,QAAM,cAAc;AAEpB,MAAI,aAAa;AACf,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,QAAQ,iCAA4B,CAAC;AACvD,YAAQ,IAAIA,OAAM,KAAK,uEAAuE,CAAC;AAC/F,YAAQ,IAAIA,OAAM,KAAK,yDAAyD,CAAC;AACjF,YAAQ,IAAI;AAAA,EACd;AAEA,QAAM,qBAAqB,MAAMkC,SAAQ;AAAA,IACvC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAASlC,OAAM,MAAM,+BAA+B;AAAA,IACpD,MAAM,cACFA,OAAM,KAAK,mDAAmD,IAC9DA,OAAM,KAAK,oDAAoD;AAAA,EACrE,GAAG,YAAY;AAEf,MAAI,aAAa,mBAAmB,cAAc;AAGlD,MAAI,eAAe,WAAW,YAAY,EAAE,WAAW,KAAK,GAAG;AAC7D,UAAM,gBAAgB,WAAW,UAAU,CAAC,EAAE,KAAK;AACnD,QAAI,eAAe;AACjB,YAAM,WAAW,MAAM,SAAS,aAAa;AAC7C,UAAI,UAAU;AACZ,gBAAQ,IAAI;AACZ,gBAAQ,IAAIA,OAAM,KAAK,kBAAkB,CAAC;AAC1C,gBAAQ,IAAIA,OAAM,KAAK,WAAM,OAAO,EAAE,CAAC,CAAC;AACxC,gBAAQ,IAAIA,OAAM,MAAM,OAAO,SAAS,MAAM,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;AACjE,gBAAQ,IAAIA,OAAM,KAAK,WAAM,OAAO,EAAE,CAAC,CAAC;AACxC,gBAAQ,IAAI;AAEZ,cAAM,iBAAiB,MAAMkC,SAAQ;AAAA,UACnC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAASlC,OAAM,MAAM,gCAAgC;AAAA,UACrD,SAAS;AAAA,QACX,GAAG,YAAY;AAEf,YAAI,eAAe,QAAQ;AACzB,uBAAa;AAAA,QACf,OAAO;AAEL,gBAAM,iBAAiB,MAAMkC,SAAQ;AAAA,YACnC,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAASlC,OAAM,MAAM,+BAA+B;AAAA,UACtD,GAAG,YAAY;AACf,uBAAa,eAAe,cAAc;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,aAAa;AAKrB,UAAQ,IAAI;AACZ,UAAQ,IAAIA,OAAM,MAAM,+BAA0B,CAAC;AACnD,UAAQ,IAAI;AAGZ,cAAY,aAAa;AAEzB,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,aAAa,QAAQ;AAAA,IACrB,OAAO,QAAQ;AAAA,IACf,WAAW,QAAQ;AAAA,IACnB,SAAS,QAAQ;AAAA,IACjB,YAAY,QAAQ;AAAA,IACpB,UAAU,OAAO,QAAQ,aAAa,WAAW,QAAQ,WAAsC,UAAU,YAAY,CAAC;AAAA;AAAA,IAEtH,eAAe,QAAQ;AAAA;AAAA,IAEvB,aAAa,QAAQ;AAAA,IACrB,OAAO,QAAQ;AAAA,IACf,cAAc,QAAQ;AAAA,IACtB,UAAU,QAAQ;AAAA,IAClB,UAAU,QAAQ;AAAA,IAClB,SAAS,QAAQ;AAAA,IACjB,qBAAqB,QAAQ;AAAA,IAC7B,aAAa,QAAQ;AAAA,IACrB,kBAAkB,QAAQ;AAAA,IAC1B,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,IACpB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,qBAAqB,QAAQ;AAAA,IAC7B,aAAa,QAAQ;AAAA,IACrB,qBAAqB,QAAQ;AAAA,IAC7B,kBAAkB,QAAQ;AAAA,IAC1B,eAAe,QAAQ;AAAA,IACvB,aAAa,QAAQ;AAAA,IACrB,UAAU,QAAQ;AAAA,IAClB,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,eAAe,QAAQ;AAAA,IACvB,gBAAgB,QAAQ;AAAA,IACxB,eAAe,QAAQ;AAAA,IACvB,aAAa,QAAQ;AAAA,IACrB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,IACxB,gBAAgB,QAAQ;AAAA,IACxB,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,oBAAoB,QAAQ;AAAA,IAC5B,oBAAoB,QAAQ;AAAA,IAC5B,gBAAgB,QAAQ;AAAA,IACxB,YAAY,QAAQ;AAAA,IACpB,QAAQ,QAAQ;AAAA,IAChB,MAAM,QAAQ;AAAA,IACd,mBAAmB,QAAQ;AAAA,IAC3B,gBAAgB,QAAQ;AAAA,IACxB,mBAAmB,QAAQ;AAAA,IAC3B,gBAAgB,QAAQ;AAAA,IACxB,kBAAkB,QAAQ;AAAA,IAC1B,oBAAoB,QAAQ;AAAA,IAC5B,yBAAyB,QAAQ;AAAA;AAAA,IAEjC,UAAU;AAAA,MACR,eAAe,QAAQ;AAAA,MACvB,oBAAoB,QAAQ,sBAAgC;AAAA,MAC5D,mBAAmB,QAAQ;AAAA,MAC3B,wBAAwB,QAAQ,0BAAoC;AAAA,MACpE,iBAAiB,QAAQ;AAAA,MACzB,sBAAsB,QAAQ,wBAAkC;AAAA,MAChE,cAAc,QAAQ;AAAA,MACtB,mBAAmB,QAAQ,qBAA+B;AAAA,MAC1D,cAAc,QAAQ;AAAA,MACtB,mBAAmB,QAAQ,qBAA+B;AAAA,MAC1D,YAAY,QAAQ;AAAA,MACpB,iBAAiB,QAAQ,mBAA6B;AAAA,MACtD,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ,kBAA4B;AAAA,MACpD,iBAAiB,QAAQ;AAAA,IAC3B;AAAA;AAAA,IAEA,kBAAkB,QAAQ;AAAA,IAC1B,eAAe,QAAQ;AAAA;AAAA,IAEvB,mBAAmB,QAAQ;AAAA;AAAA,IAE3B,oBAAoB,QAAQ;AAAA;AAAA,IAE5B,iBAAiB,QAAQ;AAAA;AAAA,IAEzB,qBAAqB,QAAQ;AAAA;AAAA,IAE7B,kBAAkB,QAAQ;AAAA;AAAA,IAE1B,YAAY,QAAQ;AAAA;AAAA,IAEpB,oBAAoB,QAAQ;AAAA;AAAA,IAE5B,cAAc,QAAQ;AAAA,IACtB,YAAY,QAAQ;AAAA;AAAA,IAEpB,kBAAkB,QAAQ;AAAA,IAC1B,kBAAkB,QAAQ;AAAA,EAC5B;AACF;;;Ac93HA,OAAOqC,YAAW;AAClB,OAAOC,UAAS;AAOhB,eAAsB,cACpB,OACA,SACe;AACf,QAAM,UAAUC,KAAI,kBAAkB,KAAK,MAAM,EAAE,MAAM;AAEzD,MAAI;AACF,UAAM,QAAQ,SAAS,QAAQ,OAAO,EAAE,KAAK;AAC7C,UAAM,EAAE,WAAW,OAAO,QAAQ,IAAI,MAAM,IAAI,iBAAiB,OAAO,KAAK;AAC7E,YAAQ,KAAK;AAEb,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,IAAI;AACZ,cAAQ,IAAIC,OAAM,OAAO,4BAA4B,KAAK,IAAI,CAAC;AAC/D,cAAQ,IAAIA,OAAM,KAAK,uEAAuE,CAAC;AAC/F;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,iCAA0B,KAAK,MAAM,KAAK,SAAS,CAAC;AAC3E,YAAQ,IAAI;AAEZ,eAAW,UAAU,WAAW;AAC9B,wBAAkB,MAAM;AAAA,IAC1B;AAEA,QAAI,SAAS;AACX,cAAQ,IAAIA,OAAM,KAAK,WAAW,UAAU,MAAM,OAAO,KAAK,4BAA4B,CAAC;AAAA,IAC7F;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,qDAAqD,CAAC;AAAA,EAC/E,SAAS,OAAO;AACd,YAAQ,KAAK,eAAe;AAC5B,IAAAC,gBAAe,KAAK;AAAA,EACtB;AACF;AAEA,SAAS,kBAAkB,QAA4B;AACrD,QAAM,gBAAgB,OAAO,aAAaD,OAAM,QAAQ,kBAAa,IAAI;AAEzE,UAAQ,IAAI,KAAKA,OAAM,KAAK,OAAO,IAAI,CAAC,GAAG,aAAa,EAAE;AAC1D,UAAQ,IAAI,QAAQA,OAAM,KAAK,OAAO,EAAE,CAAC,EAAE;AAC3C,MAAI,OAAO,aAAa;AACtB,YAAQ,IAAI,QAAQA,OAAM,KAAKE,UAAS,OAAO,aAAa,EAAE,CAAC,CAAC,EAAE;AAAA,EACpE;AACA,UAAQ,IAAI,QAAQF,OAAM,KAAK,MAAM,OAAO,MAAM,EAAE,CAAC,WAAMA,OAAM,KAAK,SAAI,OAAO,SAAS,EAAE,CAAC,IAAIA,OAAM,KAAK,SAAI,OAAO,KAAK,EAAE,CAAC,EAAE;AACjI,MAAI,OAAO,QAAQ,OAAO,KAAK,SAAS,GAAG;AACzC,YAAQ,IAAI,QAAQG,YAAW,OAAO,IAAI,CAAC,EAAE;AAAA,EAC/C;AACA,UAAQ,IAAI;AACd;AAEA,SAASA,YAAW,MAAwB;AAC1C,SAAO,KAAK,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAMH,OAAM,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AAClE;AAEA,SAASE,UAAS,KAAa,WAA2B;AACxD,MAAI,IAAI,UAAU,UAAW,QAAO;AACpC,SAAO,IAAI,MAAM,GAAG,YAAY,CAAC,IAAI;AACvC;AAEA,SAASD,gBAAe,OAAsB;AAC5C,MAAI,iBAAiB,iBAAiB;AACpC,YAAQ,MAAMD,OAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAAA,EACpD,OAAO;AACL,YAAQ,MAAMA,OAAM,IAAI,+BAA+B,CAAC;AAAA,EAC1D;AACA,UAAQ,KAAK,CAAC;AAChB;;;AC7EA,OAAOI,YAAW;AAClB,SAAS,YAAAC,WAAU,SAAS,UAAAC,eAAc;AAC1C,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAAC,mBAAkB;AAI3B,IAAM,eAAe;AAAA,EACnB,EAAE,MAAM,aAAa,MAAM,aAAa,UAAU,iCAAiC;AAAA,EACnF,EAAE,MAAM,aAAa,MAAM,aAAa,UAAU,cAAc;AAAA,EAChE,EAAE,MAAM,mCAAmC,MAAM,wBAAwB,UAAU,iBAAiB;AAAA,EACpG,EAAE,MAAM,kBAAkB,MAAM,kBAAkB,UAAU,WAAW;AAAA,EACvE,EAAE,MAAM,wBAAwB,MAAM,oBAAoB,UAAU,MAAM;AAAA,EAC1E,EAAE,MAAM,eAAe,MAAM,eAAe,UAAU,QAAQ;AAAA,EAC9D,EAAE,MAAM,eAAe,MAAM,eAAe,UAAU,QAAQ;AAAA,EAC9D,EAAE,MAAM,YAAY,MAAM,YAAY,UAAU,QAAQ;AAC1D;AAGA,IAAM,cAAc;AAAA,EAClB,EAAE,MAAM,iBAAiB,MAAM,kBAAkB,UAAU,SAAS;AAAA,EACpE,EAAE,MAAM,kBAAkB,MAAM,mBAAmB,UAAU,WAAW;AAAA,EACxE,EAAE,MAAM,kBAAkB,MAAM,mBAAmB,UAAU,eAAe;AAC9E;AAEA,eAAsB,gBAA+B;AACnD,QAAM,MAAM,QAAQ,IAAI;AAExB,UAAQ,IAAI;AACZ,UAAQ,IAAIC,OAAM,KAAK,6BAAsB,CAAC;AAC9C,UAAQ,IAAIA,OAAM,KAAK,iBAAiB,GAAG,EAAE,CAAC;AAC9C,UAAQ,IAAI;AAGZ,QAAM,mBAAmBC,YAAWC,MAAK,KAAK,aAAa,CAAC;AAC5D,MAAI,kBAAkB;AACpB,YAAQ,IAAIF,OAAM,MAAM,+BAA0B,CAAC;AAGnD,UAAM,aAAaE,MAAK,KAAK,sBAAsB;AACnD,QAAID,YAAW,UAAU,GAAG;AAC1B,UAAI;AACF,cAAM,UAAU,MAAME,UAAS,YAAY,OAAO;AAClD,cAAM,EAAE,OAAAC,OAAM,IAAI,MAAM,OAAO,MAAM;AACrC,cAAMC,UAASD,OAAM,OAAO;AAC5B,YAAIC,SAAQ,WAAW,SAAS,GAAG;AACjC,kBAAQ,IAAIL,OAAM,KAAK,iBAAiBK,QAAO,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,QACxE;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AACA,YAAQ,IAAI;AAAA,EACd;AAGA,QAAM,gBAAgB,MAAM,gBAAgB,GAAG;AAC/C,MAAI,cAAc,SAAS,GAAG;AAE5B,UAAM,cAAc,oBAAI,IAAyC;AACjE,eAAW,QAAQ,eAAe;AAChC,YAAM,MAAM,KAAK,UAAU,eAAe;AAC1C,YAAM,QAAQ,YAAY,IAAI,GAAG,KAAK,CAAC;AACvC,YAAM,KAAK,IAAI;AACf,kBAAY,IAAI,KAAK,KAAK;AAAA,IAC5B;AAEA,YAAQ,IAAIL,OAAM,KAAK,8BAAuB,CAAC;AAC/C,YAAQ,IAAI;AAGZ,eAAW,CAAC,aAAa,KAAK,KAAK,YAAY,QAAQ,GAAG;AACxD,UAAI,aAAa;AACf,cAAM,gBAAgB,MAAM,CAAC,EAAE,UAAU,iBAAiB;AAC1D,gBAAQ,IAAIA,OAAM,QAAQ,eAAQ,aAAa,EAAE,CAAC;AAClD,gBAAQ,IAAIA,OAAM,KAAK,mBAAmB,WAAW,EAAE,CAAC;AACxD,gBAAQ,IAAI;AAAA,MACd;AAEA,iBAAW,EAAE,WAAW,eAAe,YAAAM,YAAW,KAAK,OAAO;AAC5D,cAAM,aAAa,CAACA,cAChBN,OAAM,IAAI,QAAG,IACb,gBACAA,OAAM,OAAO,QAAG,IAChBA,OAAM,MAAM,QAAG;AAEnB,cAAM,cAAc;AAAA,UAClB,aAAaA,OAAM,KAAK,eAAe;AAAA,UACvC,MAAMA,OAAM,KAAK,QAAQ;AAAA,UACzB,SAASA,OAAM,MAAM,WAAW;AAAA,UAChC,OAAOA,OAAM,KAAK,SAAS;AAAA,QAC7B,EAAE,UAAU,MAAM;AAElB,cAAM,SAAS,cAAc,SAAS;AACtC,gBAAQ,IAAI,GAAG,MAAM,GAAG,UAAU,IAAIA,OAAM,KAAK,UAAU,IAAI,CAAC,IAAI,WAAW,EAAE;AACjF,gBAAQ,IAAI,GAAG,MAAM,MAAMA,OAAM,KAAK,OAAO,UAAU,EAAE,WAAM,UAAU,IAAI,EAAE,CAAC,EAAE;AAGlF,YAAI,UAAU,kBAAkB,UAAU,mBAAmB,UAAU,MAAM;AAC3E,kBAAQ,IAAI,GAAG,MAAM,MAAMA,OAAM,KAAK,SAAS,UAAU,cAAc,EAAE,CAAC,EAAE;AAAA,QAC9E;AAEA,YAAI,CAACM,aAAY;AACf,kBAAQ,IAAIN,OAAM,IAAI,GAAG,MAAM,4CAAuC,UAAU,EAAE,cAAc,CAAC;AAAA,QACnG,WAAW,eAAe;AACxB,cAAI,UAAU,WAAW,eAAe;AACtC,oBAAQ,IAAIA,OAAM,OAAO,GAAG,MAAM,oEAA+D,CAAC;AAAA,UACpG,OAAO;AACL,oBAAQ,IAAIA,OAAM,OAAO,GAAG,MAAM,6CAAwC,UAAU,IAAI,WAAW,CAAC;AAAA,UACtG;AAAA,QACF;AACA,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAGA,UAAQ,IAAIA,OAAM,KAAK,2BAAoB,CAAC;AAC5C,UAAQ,IAAI;AAEZ,MAAI,WAAW;AAGf,aAAWK,WAAU,cAAc;AACjC,UAAM,WAAWH,MAAK,KAAKG,QAAO,IAAI;AACtC,QAAI;AACF,YAAME,QAAO,QAAQ;AACrB,YAAM,UAAU,MAAMJ,UAAS,UAAU,OAAO;AAChD,YAAM,QAAQ,QAAQ,MAAM,IAAI,EAAE;AAClC,YAAM,OAAO,YAAY,QAAQ,MAAM;AAEvC,iBAAW;AAGX,YAAM,UAAU,cAAc,KAAK,OAAK,EAAE,UAAU,SAASE,QAAO,IAAI;AACxE,YAAM,eAAe,UAAUL,OAAM,KAAK,YAAY,IAAI;AAE1D,cAAQ,IAAI,KAAKA,OAAM,MAAM,QAAG,CAAC,IAAIA,OAAM,KAAKK,QAAO,IAAI,CAAC,GAAG,YAAY,EAAE;AAC7E,cAAQ,IAAI,QAAQL,OAAM,KAAK,aAAaK,QAAO,QAAQ,EAAE,CAAC,EAAE;AAChE,cAAQ,IAAI,QAAQL,OAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE;AAGlE,YAAM,UAAU,WAAW,OAAO;AAClC,UAAI,SAAS;AACX,gBAAQ,IAAI,QAAQA,OAAM,KAAK,YAAY,OAAO,EAAE,CAAC,EAAE;AAAA,MACzD;AACA,cAAQ,IAAI;AAAA,IACd,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,aAAWK,WAAU,aAAa;AAChC,UAAM,UAAUH,MAAK,KAAKG,QAAO,IAAI;AACrC,QAAIJ,YAAW,OAAO,GAAG;AACvB,UAAI;AACF,cAAM,QAAQ,MAAM,QAAQ,OAAO;AACnC,cAAM,YAAY,MAAM,OAAO,OAAK,EAAE,SAAS,KAAK,KAAK,EAAE,SAAS,MAAM,CAAC;AAE3E,YAAI,UAAU,SAAS,GAAG;AACxB,qBAAW;AACX,kBAAQ,IAAI,KAAKD,OAAM,MAAM,QAAG,CAAC,IAAIA,OAAM,KAAKK,QAAO,IAAI,CAAC,EAAE;AAC9D,kBAAQ,IAAI,QAAQL,OAAM,KAAK,aAAaK,QAAO,QAAQ,EAAE,CAAC,EAAE;AAChE,kBAAQ,IAAI,QAAQL,OAAM,KAAK,UAAU,UAAU,MAAM,QAAQ,UAAU,WAAW,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE;AAGvG,qBAAW,QAAQ,UAAU,MAAM,GAAG,CAAC,GAAG;AACxC,oBAAQ,IAAI,QAAQA,OAAM,KAAK,YAAO,IAAI,EAAE,CAAC,EAAE;AAAA,UACjD;AACA,cAAI,UAAU,SAAS,GAAG;AACxB,oBAAQ,IAAI,QAAQA,OAAM,KAAK,aAAa,UAAU,SAAS,CAAC,OAAO,CAAC,EAAE;AAAA,UAC5E;AACA,kBAAQ,IAAI;AAAA,QACd;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,UAAU;AACb,YAAQ,IAAIA,OAAM,OAAO,oCAAoC,CAAC;AAC9D,YAAQ,IAAI;AACZ,YAAQ,IAAIA,OAAM,KAAK,gBAAgB,CAAC;AACxC,YAAQ,IAAIA,OAAM,KAAK,oDAAoD,CAAC;AAC5E,YAAQ,IAAIA,OAAM,KAAK,qDAAqD,CAAC;AAC7E,YAAQ,IAAIA,OAAM,KAAK,iDAAiD,CAAC;AAAA,EAC3E,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,WAAW,CAAC;AACnC,YAAQ,IAAIA,OAAM,KAAK,6CAA6C,CAAC;AACrE,YAAQ,IAAIA,OAAM,KAAK,mCAAmC,CAAC;AAC3D,YAAQ,IAAIA,OAAM,KAAK,8CAA8C,CAAC;AAAA,EACxE;AACA,UAAQ,IAAI;AACd;AAEA,SAAS,WAAW,SAAgC;AAClD,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,KAAK;AAC1B,QACE,WACA,CAAC,QAAQ,WAAW,GAAG,KACvB,CAAC,QAAQ,WAAW,IAAI,KACxB,CAAC,QAAQ,WAAW,MAAM,KAC1B,CAAC,QAAQ,WAAW,KAAK,KACzB,CAAC,QAAQ,WAAW,GAAG,GACvB;AACA,aAAOQ,UAAS,SAAS,EAAE;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASA,UAAS,KAAa,WAA2B;AACxD,MAAI,IAAI,UAAU,UAAW,QAAO;AACpC,SAAO,IAAI,MAAM,GAAG,YAAY,CAAC,IAAI;AACvC;AAEA,SAAS,YAAY,OAAuB;AAC1C,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK;AACjC,MAAI,QAAQ,OAAO,KAAM,QAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAC5D,SAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC,CAAC;AAC9C;;;ACtNA,OAAOC,aAAW;AAClB,OAAOC,UAAS;AAChB,SAAS,YAAAC,WAAU,WAAAC,UAAS,YAAY;AACxC,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAAC,mBAAkB;AAC3B,YAAYC,WAAU;AActB,IAAMC,gBAAe;AAAA,EACnB,EAAE,MAAM,aAAa,MAAM,YAAY;AAAA,EACvC,EAAE,MAAM,aAAa,MAAM,YAAY;AAAA,EACvC,EAAE,MAAM,mCAAmC,MAAM,iBAAiB;AAAA,EAClE,EAAE,MAAM,kBAAkB,MAAM,WAAW;AAAA,EAC3C,EAAE,MAAM,eAAe,MAAM,QAAQ;AAAA,EACrC,EAAE,MAAM,eAAe,MAAM,QAAQ;AAAA,EACrC,EAAE,MAAM,wBAAwB,MAAM,MAAM;AAC9C;AAEA,IAAMC,eAAc;AAAA,EAClB,EAAE,MAAM,iBAAiB,MAAM,SAAS;AAAA,EACxC,EAAE,MAAM,eAAe,MAAM,aAAa;AAC5C;AAKA,SAAS,iBAAiB,SAAiB,UAA4D;AACrG,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAG5B,MAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,WAAO,KAAK,GAAG,QAAQ,iBAAiB;AACxC,WAAO,EAAE,QAAQ,SAAS;AAAA,EAC5B;AAGA,MAAI,QAAQ,KAAK,EAAE,SAAS,IAAI;AAC9B,aAAS,KAAK,GAAG,QAAQ,wCAAwC;AAAA,EACnE;AAGA,MAAI,CAAC,QAAQ,SAAS,GAAG,GAAG;AAC1B,aAAS,KAAK,GAAG,QAAQ,6BAA6B;AAAA,EACxD;AAGA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,eAAe,cAAc;AACtC,QAAI,QAAQ,SAAS,WAAW,GAAG;AACjC,eAAS,KAAK,GAAG,QAAQ,gCAAgC,WAAW,GAAG;AAAA,IACzE;AAAA,EACF;AAGA,QAAM,iBAAiB;AAAA,IACrB;AAAA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,WAAW,gBAAgB;AACpC,QAAI,QAAQ,KAAK,OAAO,GAAG;AACzB,aAAO,KAAK,GAAG,QAAQ,8DAA8D;AACrF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAKA,eAAe,yBAAyB,KAAgE;AACtG,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAE5B,QAAM,aAAaJ,MAAK,KAAK,sBAAsB;AAEnD,MAAI,CAACC,YAAW,UAAU,GAAG;AAC3B,WAAO,EAAE,QAAQ,SAAS;AAAA,EAC5B;AAEA,MAAI;AACF,UAAM,UAAU,MAAMH,UAAS,YAAY,OAAO;AAClD,UAAMO,UAAc,YAAM,OAAO;AAGjC,QAAI,CAACA,QAAO,SAAS;AACnB,eAAS,KAAK,+CAA+C;AAAA,IAC/D;AAGA,QAAI,CAACA,QAAO,aAAa,CAAC,MAAM,QAAQA,QAAO,SAAS,GAAG;AACzD,aAAO,KAAK,4DAA4D;AAAA,IAC1E,WAAWA,QAAO,UAAU,WAAW,GAAG;AACxC,eAAS,KAAK,+CAA+C;AAAA,IAC/D;AAGA,QAAI,CAACA,QAAO,WAAW,CAAC,MAAM,QAAQA,QAAO,OAAO,GAAG;AACrD,aAAO,KAAK,0DAA0D;AAAA,IACxE,OAAO;AACL,iBAAW,UAAUA,QAAO,SAAS;AACnC,YAAI,OAAO,SAAS,WAAW,OAAO,MAAM;AAC1C,gBAAM,aAAaL,MAAK,KAAK,OAAO,IAAI;AACxC,cAAI,CAACC,YAAW,UAAU,GAAG;AAC3B,mBAAO,KAAK,gDAAgD,OAAO,IAAI,EAAE;AAAA,UAC3E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,KAAK,+CAA+C,iBAAiB,QAAQ,MAAM,UAAU,aAAa,EAAE;AAAA,EACrH;AAEA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAKA,SAAS,YAAY,SAAiB,UAA4D;AAChG,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAG5B,MAAI,CAAC,QAAQ,WAAW,KAAK,GAAG;AAC9B,aAAS,KAAK,GAAG,QAAQ,4BAA4B;AAAA,EACvD,OAAO;AAEL,UAAM,iBAAiB,QAAQ,QAAQ,OAAO,CAAC;AAC/C,QAAI,mBAAmB,IAAI;AACzB,aAAO,KAAK,GAAG,QAAQ,6BAA6B;AAAA,IACtD,OAAO;AACL,YAAM,cAAc,QAAQ,UAAU,GAAG,cAAc,EAAE,KAAK;AAC9D,UAAI;AACF,QAAK,YAAM,WAAW;AAAA,MACxB,QAAQ;AACN,eAAO,KAAK,GAAG,QAAQ,4BAA4B;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAGA,QAAM,YAAY,QAAQ,QAAQ,OAAO,CAAC;AAC1C,MAAI,cAAc,IAAI;AACpB,UAAM,OAAO,QAAQ,UAAU,YAAY,CAAC,EAAE,KAAK;AACnD,UAAM,WAAW,iBAAiB,MAAM,QAAQ;AAEhD,aAAS,KAAK,GAAG,SAAS,QAAQ;AAAA,EACpC;AAEA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAEA,eAAsB,aAAa,UAAwB,CAAC,GAAkB;AAC5E,QAAM,OAAO,QAAQ;AACrB,QAAM,MAAM,QAAQ,IAAI;AAExB,MAAI,CAAC,MAAM;AACT,YAAQ,IAAI;AACZ,YAAQ,IAAIL,QAAM,KAAK,4BAAqB,CAAC;AAC7C,YAAQ,IAAI;AAAA,EACd;AAEA,QAAM,SAA2B;AAAA,IAC/B,OAAO;AAAA,IACP,QAAQ,CAAC;AAAA,IACT,UAAU,CAAC;AAAA,IACX,OAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAU,CAAC,OAAOC,KAAI,qCAAqC,EAAE,MAAM,IAAI;AAG7E,aAAW,QAAQM,eAAc;AAC/B,UAAM,WAAWH,MAAK,KAAK,KAAK,IAAI;AACpC,QAAIC,YAAW,QAAQ,GAAG;AACxB,aAAO,MAAM,KAAK,KAAK,IAAI;AAC3B,UAAI;AACF,cAAM,UAAU,MAAMH,UAAS,UAAU,OAAO;AAChD,cAAM,aAAa,iBAAiB,SAAS,KAAK,IAAI;AACtD,eAAO,OAAO,KAAK,GAAG,WAAW,MAAM;AACvC,eAAO,SAAS,KAAK,GAAG,WAAW,QAAQ;AAAA,MAC7C,SAAS,OAAO;AACd,eAAO,OAAO,KAAK,GAAG,KAAK,IAAI,uBAAuB;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAGA,aAAW,OAAOM,cAAa;AAC7B,UAAM,UAAUJ,MAAK,KAAK,IAAI,IAAI;AAClC,QAAIC,YAAW,OAAO,GAAG;AACvB,UAAI;AACF,cAAM,QAAQ,MAAMF,SAAQ,OAAO;AACnC,mBAAW,QAAQ,OAAO;AACxB,gBAAM,WAAWC,MAAK,SAAS,IAAI;AACnC,gBAAM,WAAW,MAAM,KAAK,QAAQ;AAEpC,cAAI,SAAS,OAAO,GAAG;AACrB,mBAAO,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AACvC,kBAAM,UAAU,MAAMF,UAAS,UAAU,OAAO;AAGhD,gBAAI,KAAK,SAAS,MAAM,GAAG;AACzB,oBAAM,aAAa,YAAY,SAAS,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAC7D,qBAAO,OAAO,KAAK,GAAG,WAAW,MAAM;AACvC,qBAAO,SAAS,KAAK,GAAG,WAAW,QAAQ;AAAA,YAC7C,WAAW,KAAK,SAAS,KAAK,GAAG;AAC/B,oBAAM,aAAa,iBAAiB,SAAS,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAClE,qBAAO,OAAO,KAAK,GAAG,WAAW,MAAM;AACvC,qBAAO,SAAS,KAAK,GAAG,WAAW,QAAQ;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAGA,QAAM,uBAAuB,MAAM,yBAAyB,GAAG;AAC/D,SAAO,OAAO,KAAK,GAAG,qBAAqB,MAAM;AACjD,SAAO,SAAS,KAAK,GAAG,qBAAqB,QAAQ;AAErD,WAAS,KAAK;AAGd,SAAO,QAAQ,OAAO,OAAO,WAAW;AAGxC,MAAI,MAAM;AAER,QAAI,CAAC,OAAO,OAAO;AACjB,cAAQ,MAAM,0BAAqB;AACnC,iBAAW,SAAS,OAAO,QAAQ;AACjC,gBAAQ,MAAM,KAAK,KAAK,EAAE;AAAA,MAC5B;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB,WAAW,OAAO,MAAM,WAAW,GAAG;AACpC,cAAQ,MAAM,qCAAgC;AAC9C,cAAQ,KAAK,CAAC;AAAA,IAChB,OAAO;AACL,cAAQ,IAAI,0BAAqB;AACjC,UAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,gBAAQ,IAAI,MAAM,OAAO,SAAS,MAAM,WAAW,OAAO,SAAS,WAAW,IAAI,KAAK,GAAG,GAAG;AAAA,MAC/F;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AAEL,QAAI,OAAO,MAAM,WAAW,GAAG;AAC7B,cAAQ,IAAIF,QAAM,OAAO,yCAAoC,CAAC;AAC9D,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,+CAA+C,CAAC;AACvE;AAAA,IACF;AAEA,YAAQ,IAAIA,QAAM,MAAM,gBAAW,OAAO,MAAM,MAAM,sBAAsB,OAAO,MAAM,WAAW,IAAI,KAAK,GAAG,GAAG,CAAC;AACpH,eAAW,QAAQ,OAAO,OAAO;AAC/B,cAAQ,IAAIA,QAAM,KAAK,KAAK,IAAI,EAAE,CAAC;AAAA,IACrC;AACA,YAAQ,IAAI;AAEZ,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,cAAQ,IAAIA,QAAM,IAAI,UAAK,OAAO,OAAO,MAAM,SAAS,OAAO,OAAO,WAAW,IAAI,KAAK,GAAG,GAAG,CAAC;AACjG,iBAAW,SAAS,OAAO,QAAQ;AACjC,gBAAQ,IAAIA,QAAM,IAAI,KAAK,KAAK,EAAE,CAAC;AAAA,MACrC;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,cAAQ,IAAIA,QAAM,OAAO,UAAK,OAAO,SAAS,MAAM,WAAW,OAAO,SAAS,WAAW,IAAI,KAAK,GAAG,GAAG,CAAC;AAC1G,iBAAW,WAAW,OAAO,UAAU;AACrC,gBAAQ,IAAIA,QAAM,OAAO,KAAK,OAAO,EAAE,CAAC;AAAA,MAC1C;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAIA,QAAM,MAAM,2BAAsB,CAAC;AAAA,IACjD,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,iDAA4C,CAAC;AAAA,IACrE;AACA,YAAQ,IAAI;AAAA,EACd;AACF;;;ACnTA,OAAOU,aAAW;AAClB,OAAOC,UAAS;AAChB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAAC,mBAAkB;AAa3B,SAAS,YAAY,SAAiB,SAA2E;AAC/G,QAAM,WAAW,QAAQ,MAAM,IAAI;AACnC,QAAM,WAAW,QAAQ,MAAM,IAAI;AACnC,QAAM,SAAmE,CAAC;AAG1E,QAAM,MAAM,yBAAyB,UAAU,QAAQ;AAEvD,MAAI,WAAW;AACf,MAAI,WAAW;AACf,MAAI,WAAW;AAEf,SAAO,WAAW,SAAS,UAAU,WAAW,SAAS,QAAQ;AAC/D,QAAI,WAAW,IAAI,UAAU,WAAW,SAAS,UAAU,SAAS,QAAQ,MAAM,IAAI,QAAQ,GAAG;AAC/F,UAAI,WAAW,SAAS,UAAU,SAAS,QAAQ,MAAM,IAAI,QAAQ,GAAG;AAEtE,eAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,SAAS,QAAQ,EAAE,CAAC;AACtD;AACA;AACA;AAAA,MACF,OAAO;AAEL,eAAO,KAAK,EAAE,MAAM,OAAO,MAAM,SAAS,QAAQ,EAAE,CAAC;AACrD;AAAA,MACF;AAAA,IACF,WAAW,WAAW,SAAS,WAAW,YAAY,IAAI,UAAU,SAAS,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAEzG,aAAO,KAAK,EAAE,MAAM,UAAU,MAAM,SAAS,QAAQ,EAAE,CAAC;AACxD;AAAA,IACF,WAAW,WAAW,SAAS,QAAQ;AAErC,aAAO,KAAK,EAAE,MAAM,OAAO,MAAM,SAAS,QAAQ,EAAE,CAAC;AACrD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,yBAAyB,GAAa,GAAuB;AACpE,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,QAAM,KAAiB,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,MAAM,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAE7E,WAASC,KAAI,GAAGA,MAAK,GAAGA,MAAK;AAC3B,aAASC,KAAI,GAAGA,MAAK,GAAGA,MAAK;AAC3B,UAAI,EAAED,KAAI,CAAC,MAAM,EAAEC,KAAI,CAAC,GAAG;AACzB,WAAGD,EAAC,EAAEC,EAAC,IAAI,GAAGD,KAAI,CAAC,EAAEC,KAAI,CAAC,IAAI;AAAA,MAChC,OAAO;AACL,WAAGD,EAAC,EAAEC,EAAC,IAAI,KAAK,IAAI,GAAGD,KAAI,CAAC,EAAEC,EAAC,GAAG,GAAGD,EAAC,EAAEC,KAAI,CAAC,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAGA,QAAM,MAAgB,CAAC;AACvB,MAAI,IAAI;AACR,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,IAAI,GAAG;AACrB,QAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG;AACzB,UAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpB;AACA;AAAA,IACF,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG;AACtC;AAAA,IACF,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,WAAW,MAAgE,eAAuB,GAAW;AACpH,QAAM,SAAmB,CAAC;AAC1B,MAAI,mBAAmB;AAGvB,QAAM,gBAAgB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,SAAS,SAAS,IAAI,EAAE,EAAE,OAAO,OAAK,MAAM,EAAE;AAEzF,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAOC,QAAM,KAAK,gBAAgB;AAAA,EACpC;AAEA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,OAAO,KAAK,CAAC;AACnB,UAAM,aAAa,cAAc,KAAK,QAAM,KAAK,IAAI,KAAK,CAAC,KAAK,YAAY;AAE5E,QAAI,YAAY;AAEd,UAAI,qBAAqB,MAAM,IAAI,mBAAmB,GAAG;AACvD,eAAO,KAAKA,QAAM,KAAK,OAAO,CAAC;AAAA,MACjC;AAGA,UAAI,KAAK,SAAS,OAAO;AACvB,eAAO,KAAKA,QAAM,MAAM,KAAK,KAAK,IAAI,EAAE,CAAC;AAAA,MAC3C,WAAW,KAAK,SAAS,UAAU;AACjC,eAAO,KAAKA,QAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;AAAA,MACzC,OAAO;AACL,eAAO,KAAKA,QAAM,KAAK,KAAK,KAAK,IAAI,EAAE,CAAC;AAAA,MAC1C;AACA,yBAAmB;AAAA,IACrB;AAAA,EACF;AAEA,SAAO,OAAO,KAAK,IAAI;AACzB;AAKA,SAAS,aAAa,MAAuH;AAC3I,SAAO;AAAA,IACL,OAAO,KAAK,OAAO,OAAK,EAAE,SAAS,KAAK,EAAE;AAAA,IAC1C,SAAS,KAAK,OAAO,OAAK,EAAE,SAAS,QAAQ,EAAE;AAAA,IAC/C,WAAW,KAAK,OAAO,OAAK,EAAE,SAAS,MAAM,EAAE;AAAA,EACjD;AACF;AAEA,eAAsB,YAAY,UAAmB,UAAuB,CAAC,GAAkB;AAC7F,UAAQ,IAAI;AACZ,UAAQ,IAAIA,QAAM,KAAK,2BAAoB,CAAC;AAC5C,UAAQ,IAAI;AAEZ,QAAM,MAAM,QAAQ,IAAI;AAGxB,MAAI,QAAQ,OAAO;AACjB,UAAM,UAAU,GAAG;AACnB;AAAA,EACF;AAGA,QAAM,eAAe,MAAM,gBAAgB,GAAG;AAG9C,MAAI,UAAU;AAEZ,UAAM,UAAU,MAAM,oBAAoB,KAAK,QAAQ;AACvD,QAAI,SAAS;AACX,YAAM,sBAAsB,KAAK,UAAU,QAAQ,EAAE;AACrD;AAAA,IACF;AAGA,UAAM,oBAAoB,KAAK,QAAQ;AACvC;AAAA,EACF;AAGA,MAAI,aAAa,WAAW,GAAG;AAC7B,YAAQ,IAAIA,QAAM,OAAO,8BAA8B,CAAC;AACxD,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,2CAA2C,CAAC;AACnE,YAAQ,IAAIA,QAAM,KAAK,kDAAkD,CAAC;AAC1E,YAAQ,IAAIA,QAAM,KAAK,2CAA2C,CAAC;AACnE,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,gBAAgB,CAAC;AACxC,YAAQ,IAAIA,QAAM,KAAK,wEAAwE,CAAC;AAChG;AAAA,EACF;AAGA,MAAI,aAAa;AAEjB,aAAW,EAAE,WAAW,eAAe,YAAAC,YAAW,KAAK,cAAc;AACnE,QAAI,CAACA,aAAY;AACf,cAAQ,IAAID,QAAM,IAAI,UAAK,UAAU,IAAI,mBAAmB,CAAC;AAC7D;AAAA,IACF;AAEA,YAAQ,IAAIA,QAAM,KAAK,aAAM,UAAU,IAAI,EAAE,CAAC;AAC9C,YAAQ,IAAIA,QAAM,KAAK,iBAAiB,UAAU,IAAI,KAAK,UAAU,EAAE,GAAG,CAAC;AAE3E,QAAI,eAAe;AACjB,mBAAa;AACb,YAAM,sBAAsB,KAAK,UAAU,MAAM,UAAU,IAAI,IAAI;AAAA,IACrE,OAAO;AACL,cAAQ,IAAIA,QAAM,MAAM,8BAAyB,CAAC;AAAA,IACpD;AACA,YAAQ,IAAI;AAAA,EACd;AAEA,MAAI,CAAC,YAAY;AACf,YAAQ,IAAIA,QAAM,MAAM,mEAA8D,CAAC;AAAA,EACzF,OAAO;AACL,YAAQ,IAAIA,QAAM,KAAK,mCAAmC,CAAC;AAC3D,YAAQ,IAAIA,QAAM,KAAK,wCAAwC,CAAC;AAAA,EAClE;AACA,UAAQ,IAAI;AACd;AAKA,eAAe,sBAAsB,KAAa,MAAc,aAAqB,UAAmB,OAAsB;AAC5H,QAAM,WAAWE,MAAK,KAAK,IAAI;AAE/B,MAAI,CAACC,YAAW,QAAQ,GAAG;AACzB,YAAQ,IAAIH,QAAM,IAAI,0BAAqB,IAAI,EAAE,CAAC;AAClD;AAAA,EACF;AAEA,QAAM,UAAU,UAAU,OAAOI,KAAI,uBAAuB,EAAE,MAAM;AAEpE,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,IAAI,aAAa,WAAW;AACxD,aAAS,KAAK;AAEd,QAAI,CAAC,aAAa,CAAC,UAAU,SAAS;AACpC,cAAQ,IAAIJ,QAAM,IAAI,iCAA4B,CAAC;AACnD;AAAA,IACF;AAEA,UAAM,eAAe,MAAMK,UAAS,UAAU,OAAO;AACrD,UAAM,OAAO,YAAY,UAAU,SAAS,YAAY;AACxD,UAAM,QAAQ,aAAa,IAAI;AAE/B,QAAI,MAAM,UAAU,KAAK,MAAM,YAAY,GAAG;AAC5C,UAAI,CAAC,SAAS;AACZ,gBAAQ,IAAIL,QAAM,MAAM,6BAAwB,CAAC;AAAA,MACnD;AAAA,IACF,OAAO;AACL,UAAI,CAAC,SAAS;AACZ,gBAAQ,IAAIA,QAAM,KAAK,+BAA0B,CAAC;AAClD,gBAAQ,IAAI;AAAA,MACd;AACA,cAAQ,IAAI,WAAW,IAAI,CAAC;AAC5B,cAAQ,IAAIA,QAAM,KAAK,MAAMA,QAAM,MAAM,IAAI,MAAM,KAAK,EAAE,CAAC,IAAIA,QAAM,IAAI,IAAI,MAAM,OAAO,EAAE,CAAC,QAAQ,CAAC;AAAA,IACxG;AAAA,EAEF,SAAS,OAAO;AACd,aAAS,KAAK;AACd,QAAI,iBAAiB,iBAAiB;AACpC,cAAQ,IAAIA,QAAM,IAAI,qCAAgC,MAAM,OAAO,EAAE,CAAC;AAAA,IACxE,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,0BAAqB,CAAC;AAAA,IAC9C;AAAA,EACF;AACF;AAKA,eAAe,oBAAoB,KAAa,aAAoC;AAElF,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ,IAAIA,QAAM,OAAO,8DAAyD,CAAC;AACnF,YAAQ,IAAIA,QAAM,KAAK,oCAAoC,CAAC;AAC5D,YAAQ,IAAI;AAAA,EACd;AAEA,QAAM,UAAUI,KAAI,uBAAuB,EAAE,MAAM;AAEnD,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,IAAI,aAAa,WAAW;AACxD,YAAQ,KAAK;AAEb,QAAI,CAAC,aAAa,CAAC,UAAU,SAAS;AACpC,cAAQ,IAAIJ,QAAM,IAAI,iDAA4C,WAAW,EAAE,CAAC;AAChF;AAAA,IACF;AAEA,YAAQ,IAAIA,QAAM,MAAM,qBAAgB,UAAU,QAAQ,WAAW,EAAE,CAAC;AACxE,QAAI,UAAU,aAAa;AACzB,cAAQ,IAAIA,QAAM,KAAK,KAAK,UAAU,WAAW,EAAE,CAAC;AAAA,IACtD;AACA,YAAQ,IAAI;AAGZ,UAAM,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,eAA8B;AAClC,QAAI,YAA2B;AAE/B,eAAWM,SAAQ,YAAY;AAC7B,YAAM,WAAWJ,MAAK,KAAKI,KAAI;AAC/B,UAAIH,YAAW,QAAQ,GAAG;AACxB,YAAI;AACF,yBAAe,MAAME,UAAS,UAAU,OAAO;AAC/C,sBAAYC;AACZ;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,cAAc;AACjB,cAAQ,IAAIN,QAAM,OAAO,8CAAyC,CAAC;AACnE,cAAQ,IAAIA,QAAM,KAAK,8EAA8E,CAAC;AACtG;AAAA,IACF;AAEA,YAAQ,IAAIA,QAAM,KAAK,mBAAmB,SAAS,EAAE,CAAC;AACtD,YAAQ,IAAI;AAGZ,UAAM,OAAO,YAAY,UAAU,SAAS,YAAY;AACxD,UAAM,QAAQ,aAAa,IAAI;AAE/B,QAAI,MAAM,UAAU,KAAK,MAAM,YAAY,GAAG;AAC5C,cAAQ,IAAIA,QAAM,MAAM,6BAAwB,CAAC;AAAA,IACnD,OAAO;AACL,cAAQ,IAAIA,QAAM,KAAK,gCAA2B,CAAC;AACnD,cAAQ,IAAI;AACZ,cAAQ,IAAI,WAAW,IAAI,CAAC;AAC5B,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,YAAYA,QAAM,MAAM,IAAI,MAAM,KAAK,EAAE,CAAC,IAAIA,QAAM,IAAI,IAAI,MAAM,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAAA,IACtH;AACA,YAAQ,IAAI;AAAA,EAEd,SAAS,OAAO;AACd,YAAQ,KAAK;AACb,QAAI,iBAAiB,iBAAiB;AACpC,UAAI,MAAM,eAAe,KAAK;AAC5B,gBAAQ,IAAIA,QAAM,IAAI,0DAAqD,CAAC;AAAA,MAC9E,WAAW,MAAM,eAAe,KAAK;AACnC,gBAAQ,IAAIA,QAAM,IAAI,+BAA0B,WAAW,EAAE,CAAC;AAAA,MAChE,WAAW,MAAM,eAAe,KAAK;AACnC,gBAAQ,IAAIA,QAAM,IAAI,yCAAoC,CAAC;AAAA,MAC7D,OAAO;AACL,gBAAQ,IAAIA,QAAM,IAAI,qBAAgB,MAAM,OAAO,EAAE,CAAC;AAAA,MACxD;AAAA,IACF,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,kCAA6B,CAAC;AACpD,UAAI,iBAAiB,OAAO;AAC1B,gBAAQ,IAAIA,QAAM,KAAK,KAAK,MAAM,OAAO,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;AAKA,eAAe,UAAU,KAA4B;AACnD,QAAM,WAAWE,MAAK,KAAK,mBAAmB;AAE9C,MAAI,CAACC,YAAW,QAAQ,GAAG;AACzB,YAAQ,IAAIH,QAAM,OAAO,+CAA0C,CAAC;AACpE,YAAQ,IAAIA,QAAM,KAAK,iGAAiG,CAAC;AACzH;AAAA,EACF;AAEA,UAAQ,IAAIA,QAAM,KAAK,qDAAqD,CAAC;AAC7E,UAAQ,IAAI;AAGZ,QAAM,YAAYE,MAAK,UAAU,WAAW;AAC5C,MAAI,CAACC,YAAW,SAAS,GAAG;AAC1B,YAAQ,IAAIH,QAAM,OAAO,mDAA8C,CAAC;AACxE;AAAA,EACF;AAEA,MAAI;AACJ,MAAI;AACF,mBAAe,MAAMK,UAAS,WAAW,OAAO;AAAA,EAClD,QAAQ;AACN,YAAQ,IAAIL,QAAM,IAAI,mDAA8C,CAAC;AACrE;AAAA,EACF;AAGA,QAAM,gBAAgB;AAAA,IACpB,EAAE,MAAM,aAAa,MAAM,YAAY;AAAA,IACvC,EAAE,MAAM,sCAAsC,MAAM,SAAS;AAAA,EAC/D;AAEA,MAAI,aAAa;AAEjB,aAAW,QAAQ,eAAe;AAChC,UAAM,WAAWE,MAAK,KAAK,KAAK,IAAI;AACpC,QAAIC,YAAW,QAAQ,GAAG;AACxB,UAAI;AACF,cAAM,kBAAkB,MAAME,UAAS,UAAU,OAAO;AAGxD,YAAI,iBAAiB;AACrB,YAAI,KAAK,KAAK,SAAS,MAAM,GAAG;AAC9B,gBAAM,iBAAiB,gBAAgB,QAAQ,OAAO,CAAC;AACvD,cAAI,mBAAmB,IAAI;AACzB,6BAAiB,gBAAgB,UAAU,iBAAiB,CAAC,EAAE,KAAK;AAAA,UACtE;AAAA,QACF;AAGA,yBAAiB,eACd,QAAQ,8DAA8D,EAAE,EACxE,KAAK;AAER,cAAM,OAAO,YAAY,aAAa,KAAK,GAAG,cAAc;AAC5D,cAAM,QAAQ,aAAa,IAAI;AAE/B,YAAI,MAAM,QAAQ,KAAK,MAAM,UAAU,GAAG;AACxC,uBAAa;AACb,kBAAQ,IAAIL,QAAM,OAAO,UAAK,KAAK,IAAI,uBAAuB,CAAC;AAC/D,kBAAQ,IAAI,WAAW,IAAI,CAAC;AAC5B,kBAAQ,IAAIA,QAAM,KAAK,KAAKA,QAAM,MAAM,IAAI,MAAM,KAAK,EAAE,CAAC,IAAIA,QAAM,IAAI,IAAI,MAAM,OAAO,EAAE,CAAC,QAAQ,CAAC;AACrG,kBAAQ,IAAI;AAAA,QACd,OAAO;AACL,kBAAQ,IAAIA,QAAM,MAAM,UAAK,KAAK,IAAI,aAAa,CAAC;AAAA,QACtD;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,YAAY;AACf,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,MAAM,+DAA0D,CAAC;AAAA,EACrF,OAAO;AACL,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,mEAAmE,CAAC;AAAA,EAC7F;AACA,UAAQ,IAAI;AACd;;;AC7bA,OAAOO,aAAW;AAClB,OAAOC,WAAS;AAChB,OAAOC,cAAa;AAGpB,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAAC,mBAAkB;AAc3B,SAASC,yBAAwB,YAAsD;AACrF,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,eAAsB,YACpB,SACA,gBACA,UAAuB,CAAC,GACT;AACf,QAAM,MAAM,QAAQ,IAAI;AAGxB,MAAI,QAAQ,MAAM;AAChB,UAAM,sBAAsB,GAAG;AAC/B;AAAA,EACF;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIC,QAAM,KAAK,kCAA2B,CAAC;AACnD,UAAQ,IAAI;AAEZ,MAAI;AACJ,MAAI,cAAkC;AAGtC,MAAI,CAAC,SAAS;AAEZ,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,aAAa,YAAY,OAAO,OAAKC,YAAWC,MAAK,KAAK,CAAC,CAAC,CAAC;AAEnE,QAAI,WAAW,WAAW,GAAG;AAC3B,cAAQ,IAAIF,QAAM,OAAO,oDAAoD,CAAC;AAC9E,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,mBAAmB,CAAC;AAC3C,cAAQ,IAAIA,QAAM,KAAK,8CAA8C,CAAC;AACtE,cAAQ,IAAIA,QAAM,KAAK,6CAA6C,CAAC;AACrE;AAAA,IACF;AAGA,UAAM,EAAE,aAAa,IAAI,MAAMG,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,WAAW,IAAI,QAAM;AAAA,QAC5B,OAAO;AAAA,QACP,OAAO;AAAA,QACP,aAAa;AAAA,MACf,EAAE;AAAA,IACJ,CAAC;AAED,QAAI,CAAC,cAAc;AACjB,cAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,IACF;AAEA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AAGA,QAAM,WAAWE,MAAK,KAAK,IAAI;AAC/B,MAAI,CAACD,YAAW,QAAQ,GAAG;AACzB,YAAQ,IAAID,QAAM,IAAI,0BAAqB,IAAI,EAAE,CAAC;AAClD;AAAA,EACF;AAGA,QAAM,WAAW,MAAM,oBAAoB,KAAK,IAAI;AACpD,MAAI,UAAU;AACZ,YAAQ,IAAIA,QAAM,OAAO,mCAAmC,SAAS,IAAI,EAAE,CAAC;AAC5E,YAAQ,IAAIA,QAAM,KAAK,UAAU,SAAS,EAAE,EAAE,CAAC;AAC/C,YAAQ,IAAI;AACZ,UAAM,EAAE,QAAQ,IAAI,MAAMG,SAAQ;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AACD,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,aAAa;AAEhB,QAAI,CAAC,gBAAgB,GAAG;AACtB,cAAQ,IAAIA,QAAM,OAAO,8CAA8C,CAAC;AACxE,YAAM,EAAE,QAAQ,IAAI,MAAMG,SAAQ;AAAA,QAChC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AACD,UAAI,SAAS;AACX,gBAAQ,IAAIH,QAAM,KAAK,6DAA6D,CAAC;AACrF;AAAA,MACF;AACA,cAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,IACF;AAGA,UAAM,EAAE,aAAa,IAAI,MAAMG,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,QACP,EAAE,OAAO,gCAAyB,OAAO,OAAO;AAAA,QAChD,EAAE,OAAO,gCAAyB,OAAO,SAAS;AAAA,QAClD,EAAE,OAAO,+BAAwB,OAAO,SAAS;AAAA,MACnD;AAAA,IACF,CAAC;AAED,QAAI,CAAC,cAAc;AACjB,cAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,IACF;AAEA,QAAI,iBAAiB,QAAQ;AAE3B,YAAMI,WAAUC,MAAI,6BAA6B,EAAE,MAAM;AACzD,UAAI;AACF,cAAM,EAAE,WAAW,IAAI,MAAM,IAAI,eAAe;AAChD,QAAAD,SAAQ,KAAK;AAEb,YAAI,CAAC,cAAc,WAAW,WAAW,GAAG;AAC1C,kBAAQ,IAAIJ,QAAM,OAAO,oCAAoC,CAAC;AAC9D,kBAAQ,IAAIA,QAAM,KAAK,yDAAyD,CAAC;AACjF;AAAA,QACF;AAEA,cAAM,EAAE,SAAS,IAAI,MAAMG,SAAQ;AAAA,UACjC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,WAAW,IAAI,QAAM;AAAA,YAC5B,OAAO,EAAE;AAAA,YACT,OAAO,EAAE;AAAA,YACT,aAAa,EAAE,aAAa,UAAU,GAAG,EAAE,KAAK;AAAA,UAClD,EAAE;AAAA,QACJ,CAAC;AAED,YAAI,CAAC,UAAU;AACb,kBAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,QACF;AACA,sBAAc;AAAA,MAChB,QAAQ;AACN,QAAAI,SAAQ,KAAK;AACb,gBAAQ,IAAIJ,QAAM,IAAI,mCAA8B,CAAC;AACrD;AAAA,MACF;AAAA,IACF,WAAW,iBAAiB,UAAU;AACpC,YAAM,EAAE,MAAM,IAAI,MAAMG,SAAQ;AAAA,QAC9B,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAED,UAAI,CAAC,OAAO;AACV,gBAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,MACF;AAEA,YAAMI,WAAUC,MAAI,kBAAkB,KAAK,MAAM,EAAE,MAAM;AACzD,UAAI;AACF,cAAM,UAAU,MAAM,IAAI,iBAAiB,OAAO,EAAE;AACpD,QAAAD,SAAQ,KAAK;AAEb,YAAI,CAAC,QAAQ,aAAa,QAAQ,UAAU,WAAW,GAAG;AACxD,kBAAQ,IAAIJ,QAAM,OAAO,4BAA4B,KAAK,GAAG,CAAC;AAC9D;AAAA,QACF;AAEA,cAAM,EAAE,SAAS,IAAI,MAAMG,SAAQ;AAAA,UACjC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,QAAQ,UAAU,IAAI,QAAM;AAAA,YACnC,OAAO,GAAG,EAAE,IAAI,YAAO,EAAE,KAAK;AAAA,YAC9B,OAAO,EAAE;AAAA,YACT,aAAa,EAAE,SAAS,MAAM,EAAE,MAAM,KAAK;AAAA,UAC7C,EAAE;AAAA,QACJ,CAAC;AAED,YAAI,CAAC,UAAU;AACb,kBAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,QACF;AACA,sBAAc;AAAA,MAChB,QAAQ;AACN,QAAAI,SAAQ,KAAK;AACb,gBAAQ,IAAIJ,QAAM,IAAI,sBAAiB,CAAC;AACxC;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,EAAE,SAAS,IAAI,MAAMG,SAAQ;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAED,UAAI,CAAC,UAAU;AACb,gBAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,MACF;AACA,oBAAc;AAAA,IAChB;AAAA,EACF;AAGA,MAAI,CAAC,aAAa;AAChB,YAAQ,IAAIA,QAAM,IAAI,kCAA6B,CAAC;AACpD;AAAA,EACF;AAGA,QAAM,UAAUK,MAAI,sBAAsBL,QAAM,KAAK,WAAW,CAAC,KAAK,EAAE,MAAM;AAE9E,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,IAAI,aAAa,WAAW;AACxD,YAAQ,KAAK;AAEb,UAAM,SAASD,yBAAwB,UAAU,UAAU;AAC3D,UAAM,gBAAgB,WAAW;AAEjC,YAAQ,IAAI;AACZ,YAAQ,IAAIC,QAAM,KAAK,wBAAiBA,QAAM,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC;AACrE,QAAI,UAAU,aAAa;AACzB,cAAQ,IAAIA,QAAM,KAAK,MAAM,UAAU,WAAW,EAAE,CAAC;AAAA,IACvD;AACA,YAAQ,IAAIA,QAAM,KAAK,kBAAkB,UAAU,UAAU,EAAE,CAAC;AAChE,YAAQ,IAAI;AAGZ,QAAI,eAAe;AACjB,cAAQ,IAAIA,QAAM,OAAO,yCAAoC,CAAC;AAC9D,cAAQ,IAAIA,QAAM,KAAK,uDAAuD,CAAC;AAC/E,cAAQ,IAAIA,QAAM,KAAK,yDAAyD,CAAC;AACjF,cAAQ,IAAI;AAAA,IACd;AAGA,UAAM,EAAE,QAAQ,IAAI,MAAMG,SAAQ;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,QAAQH,QAAM,KAAK,IAAI,CAAC,OAAOA,QAAM,KAAK,UAAU,IAAI,CAAC;AAAA,MAClE,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,IACF;AAGA,UAAM,cAAc,KAAK,MAAM,UAAU,IAAI,UAAU,MAAM,MAAM;AAEnE,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,MAAM,kBAAa,IAAI,WAAM,UAAU,EAAE,EAAE,CAAC;AAC9D,YAAQ,IAAI;AAGZ,YAAQ,IAAIA,QAAM,KAAK,aAAa,CAAC;AACrC,YAAQ,IAAIA,QAAM,KAAK,8CAAyC,CAAC;AACjE,YAAQ,IAAIA,QAAM,KAAK,2DAAsD,CAAC;AAC9E,QAAI,CAAC,eAAe;AAClB,cAAQ,IAAIA,QAAM,KAAK,0DAAqD,CAAC;AAAA,IAC/E;AACA,YAAQ,IAAI;AAAA,EAEd,SAAS,OAAO;AACd,YAAQ,KAAK;AACb,QAAI,iBAAiB,iBAAiB;AACpC,UAAI,MAAM,eAAe,KAAK;AAC5B,gBAAQ,IAAIA,QAAM,IAAI,+BAA0B,WAAW,EAAE,CAAC;AAC9D,gBAAQ,IAAIA,QAAM,KAAK,uFAAuF,CAAC;AAAA,MACjH,WAAW,MAAM,eAAe,KAAK;AACnC,gBAAQ,IAAIA,QAAM,IAAI,iDAA4C,CAAC;AAAA,MACrE,OAAO;AACL,gBAAQ,IAAIA,QAAM,IAAI,iBAAY,MAAM,OAAO,EAAE,CAAC;AAAA,MACpD;AAAA,IACF,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,sCAAiC,CAAC;AAAA,IAC1D;AAAA,EACF;AACF;AAEA,eAAsB,cAAc,SAAiC;AACnE,QAAM,MAAM,QAAQ,IAAI;AAExB,UAAQ,IAAI;AACZ,UAAQ,IAAIA,QAAM,KAAK,sCAA+B,CAAC;AACvD,UAAQ,IAAI;AAEZ,MAAI;AAGJ,MAAI,CAAC,SAAS;AACZ,UAAM,SAAS,MAAM,gBAAgB,GAAG;AAExC,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAIA,QAAM,OAAO,8CAA8C,CAAC;AACxE;AAAA,IACF;AAEA,UAAM,EAAE,aAAa,IAAI,MAAMG,SAAQ;AAAA,MACrC,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS,OAAO,IAAI,CAAC,EAAE,UAAU,OAAO;AAAA,QACtC,OAAO,UAAU;AAAA,QACjB,OAAO,UAAU;AAAA,QACjB,aAAa,GAAG,UAAU,IAAI,KAAK,UAAU,MAAM;AAAA,MACrD,EAAE;AAAA,IACJ,CAAC;AAED,QAAI,CAAC,cAAc;AACjB,cAAQ,IAAIH,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,IACF;AACA,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,MAAM,oBAAoB,KAAK,IAAI;AACnD,MAAI,CAAC,SAAS;AACZ,YAAQ,IAAIA,QAAM,OAAO,wCAAwC,IAAI,EAAE,CAAC;AACxE;AAAA,EACF;AAEA,UAAQ,IAAIA,QAAM,KAAK,wBAAwB,QAAQ,IAAI,EAAE,CAAC;AAC9D,UAAQ,IAAIA,QAAM,KAAK,UAAU,QAAQ,EAAE,EAAE,CAAC;AAC9C,UAAQ,IAAIA,QAAM,KAAK,cAAc,QAAQ,MAAM,EAAE,CAAC;AACtD,UAAQ,IAAI;AAEZ,QAAM,EAAE,QAAQ,IAAI,MAAMG,SAAQ;AAAA,IAChC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS,UAAUH,QAAM,KAAK,IAAI,CAAC,SAASA,QAAM,KAAK,QAAQ,IAAI,CAAC;AAAA,IACpE,SAAS;AAAA,EACX,CAAC;AAED,MAAI,CAAC,SAAS;AACZ,YAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,iBAAiB,KAAK,IAAI;AAEhD,MAAI,SAAS;AACX,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,MAAM,oBAAe,IAAI,EAAE,CAAC;AAC9C,YAAQ,IAAIA,QAAM,KAAK,kEAAkE,CAAC;AAC1F,YAAQ,IAAI;AAAA,EACd,OAAO;AACL,YAAQ,IAAIA,QAAM,IAAI,+BAA0B,CAAC;AAAA,EACnD;AACF;AAEA,eAAe,sBAAsB,KAA4B;AAC/D,UAAQ,IAAI;AACZ,UAAQ,IAAIA,QAAM,KAAK,8BAAuB,CAAC;AAC/C,UAAQ,IAAI;AAEZ,QAAM,SAAS,MAAM,gBAAgB,GAAG;AAExC,MAAI,OAAO,WAAW,GAAG;AACvB,YAAQ,IAAIA,QAAM,KAAK,sCAAsC,CAAC;AAC9D,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,uBAAuB,CAAC;AAC/C,YAAQ,IAAIA,QAAM,KAAK,gEAAgE,CAAC;AACxF,YAAQ,IAAIA,QAAM,KAAK,sEAAsE,CAAC;AAC9F;AAAA,EACF;AAEA,aAAW,EAAE,WAAW,eAAe,YAAAM,YAAW,KAAK,QAAQ;AAC7D,UAAM,aAAa,CAACA,cAChBN,QAAM,IAAI,QAAG,IACb,gBACAA,QAAM,OAAO,QAAG,IAChBA,QAAM,MAAM,QAAG;AAEnB,UAAM,cAAc;AAAA,MAClB,aAAaA,QAAM,KAAK,eAAe;AAAA,MACvC,MAAMA,QAAM,KAAK,QAAQ;AAAA,MACzB,SAASA,QAAM,MAAM,WAAW;AAAA,MAChC,OAAOA,QAAM,KAAK,SAAS;AAAA,IAC7B,EAAE,UAAU,MAAM;AAElB,YAAQ,IAAI,GAAG,UAAU,IAAIA,QAAM,KAAK,UAAU,IAAI,CAAC,EAAE;AACzD,YAAQ,IAAI,KAAK,WAAW,IAAI,UAAU,IAAI,EAAE;AAChD,YAAQ,IAAI,KAAKA,QAAM,KAAK,OAAO,UAAU,EAAE,EAAE,CAAC,EAAE;AAEpD,QAAI,CAACM,aAAY;AACf,cAAQ,IAAIN,QAAM,IAAI,yBAAoB,CAAC;AAAA,IAC7C,WAAW,eAAe;AACxB,cAAQ,IAAIA,QAAM,OAAO,iCAA4B,CAAC;AAAA,IACxD;AAEA,YAAQ,IAAI;AAAA,EACd;AAEA,UAAQ,IAAIA,QAAM,KAAK,SAAS,CAAC;AACjC,UAAQ,IAAIA,QAAM,KAAK,KAAKA,QAAM,MAAM,QAAG,CAAC,aAAaA,QAAM,OAAO,QAAG,CAAC,sBAAsBA,QAAM,IAAI,QAAG,CAAC,UAAU,CAAC;AACzH,UAAQ,IAAI;AACd;;;ACxcA,OAAOO,aAAW;AAClB,OAAOC,WAAS;AAQhB,eAAsB,eAAe,SAAwC;AAC3E,UAAQ,IAAI;AAEZ,MAAI,CAAC,QAAQ,MAAM;AACjB,YAAQ,IAAIC,QAAM,KAAK,KAAK,iCAA0B,CAAC;AACvD,YAAQ,IAAIA,QAAM,KAAK,kDAAkD,CAAC;AAC1E,YAAQ,IAAI;AAAA,EACd;AAEA,MAAI;AACJ,MAAI,SAAS;AAGb,MAAI,QAAQ,QAAQ;AAClB,QAAI,CAAC,SAAS,QAAQ,MAAM,GAAG;AAC7B,UAAI,CAAC,QAAQ,MAAM;AACjB,gBAAQ,IAAIA,QAAM,IAAI,mCAA8B,CAAC;AAAA,MACvD;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,OAAO,eAAe,QAAQ,MAAM;AAC1C,UAAM,SAAS,SAAS,WAAW,eAAe,SAAS,WAAW,eAAe;AAErF,QAAI,CAAC,QAAQ,MAAM;AACjB,YAAM,UAAUC,MAAI,mCAAmC,MAAM,KAAK,EAAE,MAAM;AAC1E,iBAAW,MAAM,oBAAoB,QAAQ,MAAM;AAEnD,UAAI,UAAU;AACZ,gBAAQ,QAAQ,4BAA4B;AAAA,MAC9C,OAAO;AACL,gBAAQ,KAAK,8BAA8B;AAC3C,gBAAQ,IAAID,QAAM,KAAK,kDAAkD,CAAC;AAC1E,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,OAAO;AACL,iBAAW,MAAM,oBAAoB,QAAQ,MAAM;AACnD,UAAI,CAAC,UAAU;AACb,gBAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,+BAA+B,CAAC,CAAC;AACrE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,aAAS,QAAQ;AAAA,EACnB,OAAO;AAEL,QAAI,CAAC,QAAQ,MAAM;AACjB,YAAM,UAAUC,MAAI,gCAAgC,EAAE,MAAM;AAC5D,iBAAW,MAAM,cAAc,QAAQ,IAAI,CAAC;AAE5C,UAAI,UAAU;AACZ,gBAAQ,QAAQ,kBAAkB;AAAA,MACpC,OAAO;AACL,gBAAQ,KAAK,qBAAqB;AAAA,MACpC;AAAA,IACF,OAAO;AACL,iBAAW,MAAM,cAAc,QAAQ,IAAI,CAAC;AAAA,IAC9C;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM;AAChB,YAAQ,IAAI,KAAK,UAAU;AAAA,MACzB;AAAA,MACA,UAAU,YAAY;AAAA,IACxB,GAAG,MAAM,CAAC,CAAC;AACX;AAAA,EACF;AAEA,UAAQ,IAAI;AAEZ,MAAI,CAAC,UAAU;AACb,YAAQ,IAAID,QAAM,OAAO,sCAAsC,CAAC;AAChE,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,SAAS,CAAC;AACjC,YAAQ,IAAIA,QAAM,KAAK,4FAAuF,CAAC;AAC/G,YAAQ,IAAIA,QAAM,KAAK,4DAAuD,CAAC;AAC/E,YAAQ,IAAI;AACZ;AAAA,EACF;AAGA,UAAQ,IAAIA,QAAM,MAAM,KAAK,8BAAuB,CAAC;AACrD,UAAQ,IAAI;AAGZ,UAAQ,IAAIA,QAAM,MAAM,cAAc,CAAC;AACvC,UAAQ,IAAIA,QAAM,KAAK,0PAA6C,CAAC;AACrE,UAAQ,IAAI,KAAKA,QAAM,IAAI,OAAO,CAAC,aAAaA,QAAM,MAAM,SAAS,QAAQ,SAAS,CAAC,EAAE;AACzF,MAAI,SAAS,aAAa;AACxB,YAAQ,IAAI,KAAKA,QAAM,IAAI,cAAc,CAAC,MAAMA,QAAM,KAAK,SAAS,WAAW,CAAC,EAAE;AAAA,EACpF;AACA,UAAQ,IAAI,KAAKA,QAAM,IAAI,OAAO,CAAC,aAAaA,QAAM,MAAM,SAAS,QAAQ,aAAa,CAAC,EAAE;AAC7F,MAAI,SAAS,SAAS;AACpB,YAAQ,IAAI,KAAKA,QAAM,IAAI,UAAU,CAAC,UAAUA,QAAM,MAAM,SAAS,QAAQ,YAAY,CAAC,CAAC,EAAE;AAAA,EAC/F;AACA,UAAQ,IAAI;AAGZ,UAAQ,IAAIA,QAAM,MAAM,cAAc,CAAC;AACvC,UAAQ,IAAIA,QAAM,KAAK,0PAA6C,CAAC;AACrE,MAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,eAAW,QAAQ,SAAS,OAAO;AACjC,cAAQ,IAAI,KAAKA,QAAM,KAAK,QAAG,CAAC,IAAI,IAAI,EAAE;AAAA,IAC5C;AAAA,EACF,OAAO;AACL,YAAQ,IAAIA,QAAM,KAAK,0BAA0B,CAAC;AAAA,EACpD;AACA,UAAQ,IAAI;AAGZ,UAAQ,IAAIA,QAAM,MAAM,kBAAkB,CAAC;AAC3C,UAAQ,IAAIA,QAAM,KAAK,0PAA6C,CAAC;AACrE,UAAQ,IAAI,KAAKA,QAAM,IAAI,kBAAkB,CAAC,IAAI,SAAS,kBAAkBA,QAAM,KAAK,eAAe,CAAC,EAAE;AAC1G,UAAQ,IAAI,KAAKA,QAAM,IAAI,YAAY,CAAC,UAAU,SAAS,YAAYA,QAAM,KAAK,eAAe,CAAC,EAAE;AACpG,UAAQ,IAAI,KAAKA,QAAM,IAAI,QAAQ,CAAC,cAAc,SAAS,QAAQA,QAAM,KAAK,eAAe,CAAC,EAAE;AAChG,UAAQ,IAAI,KAAKA,QAAM,IAAI,SAAS,CAAC,aAAa,SAAS,YAAYA,QAAM,MAAM,KAAK,IAAIA,QAAM,KAAK,IAAI,CAAC,EAAE;AAC9G,UAAQ,IAAI;AAGZ,MAAI,SAAS,YAAY,OAAO,KAAK,SAAS,QAAQ,EAAE,SAAS,GAAG;AAClE,YAAQ,IAAIA,QAAM,MAAM,YAAY,CAAC;AACrC,YAAQ,IAAIA,QAAM,KAAK,0PAA6C,CAAC;AACrE,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,QAAQ,GAAG;AAC5D,UAAI,OAAO;AACT,cAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI;AAC3D,gBAAQ,IAAI,KAAKA,QAAM,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,KAAKA,QAAM,OAAO,QAAQ,CAAC,EAAE;AAAA,MACzE;AAAA,IACF;AACA,YAAQ,IAAI;AAAA,EACd;AAGA,UAAQ,IAAIA,QAAM,MAAM,6BAAsB,CAAC;AAC/C,UAAQ,IAAIA,QAAM,KAAK,0PAA6C,CAAC;AAErE,QAAM,kBAA4B,CAAC;AAGnC,MAAI,CAAC,SAAS,MAAM;AAClB,oBAAgB,KAAK,2DAA2D;AAAA,EAClF;AACA,MAAI,CAAC,SAAS,aAAa,SAAS,SAAS,eAAe;AAC1D,oBAAgB,KAAK,6CAA6C;AAAA,EACpE;AACA,MAAI,CAAC,SAAS,MAAM,KAAK,OAAK,CAAC,UAAU,QAAQ,UAAU,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG;AAChF,oBAAgB,KAAK,mDAAmD;AAAA,EAC1E;AACA,MAAI,CAAC,SAAS,UAAU,MAAM;AAC5B,oBAAgB,KAAK,oDAAoD;AAAA,EAC3E;AACA,MAAI,CAAC,SAAS,SAAS;AACrB,oBAAgB,KAAK,6CAA6C;AAAA,EACpE;AAEA,MAAI,gBAAgB,SAAS,GAAG;AAC9B,eAAW,OAAO,iBAAiB;AACjC,cAAQ,IAAI,KAAKA,QAAM,OAAO,QAAG,CAAC,IAAI,GAAG,EAAE;AAAA,IAC7C;AAAA,EACF,OAAO;AACL,YAAQ,IAAIA,QAAM,MAAM,yCAAoC,CAAC;AAAA,EAC/D;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIA,QAAM,KAAK,uDAAuD,CAAC;AAC/E,UAAQ,IAAI;AACd;;;AC/KA,OAAOE,aAAW;AAClB,SAAS,YAAAC,WAAU,aAAAC,YAAW,UAAAC,eAAc;AAC5C,SAAS,QAAAC,OAAM,gBAAgB;AAC/B,OAAOC,WAAS;AAQhB,IAAM,eAAuC;AAAA,EAC3C,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,6BAA6B;AAAA,EAC7B,4BAA4B;AAAA,EAC5B,eAAe;AAAA,EACf,mCAAmC;AAAA,EACnC,2BAA2B;AAAA,EAC3B,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,mBAAmB;AACrB;AAGA,IAAM,eAAuC;AAAA;AAAA,EAE3C,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA;AAAA,EAEV,aAAa;AAAA,EACb,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA;AAAA,EAEV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA;AAAA,EAEN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,UAAU;AAAA,EACV,OAAO;AAAA;AAAA,EAEP,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA;AAAA,EAEZ,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,oBAAoB;AACtB;AAGA,IAAM,iBAAyC;AAAA,EAC7C,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,aAAa;AAAA,EACb,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,UAAU;AAAA,EACV,OAAO;AAAA,EACP,WAAW;AAAA,EACX,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,oBAAoB;AACtB;AAGA,IAAM,eAAuC;AAAA,EAC3C,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,sBAAsB;AACxB;AAGA,IAAM,kBAAkB,CAAC,WAAmB,OAAO,SAAS,UAAU,KAAK,OAAO,SAAS,SAAS,KAAK,OAAO,SAAS,WAAW;AAEpI,eAAe,iBAAiB,KAAiE;AAE/F,aAAW,CAAC,SAASC,SAAQ,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC9D,QAAI;AACF,YAAM,WAAWF,MAAK,KAAK,OAAO;AAClC,YAAMD,QAAO,QAAQ;AACrB,aAAO,EAAE,MAAM,UAAU,UAAAG,UAAS;AAAA,IACpC,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,oBAAoB,CAAC,aAAa,WAAW;AACnD,aAAW,WAAW,mBAAmB;AACvC,QAAI;AACF,YAAM,WAAWF,MAAK,KAAK,OAAO;AAClC,YAAMD,QAAO,QAAQ;AACrB,YAAMG,YAAW,QAAQ,YAAY,EAAE,QAAQ,OAAO,EAAE;AACxD,aAAO,EAAE,MAAM,UAAU,UAAAA,UAAS;AAAA,IACpC,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AACT;AAKA,SAAS,sBAAsB,YAAmC;AAChE,QAAM,aAAa,WAAW,QAAQ,OAAO,GAAG,EAAE,YAAY;AAC9D,aAAW,CAAC,KAAKA,SAAQ,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC1D,QAAI,WAAW,SAAS,GAAG,GAAG;AAC5B,aAAOA;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,SAAyC;AACpE,QAAMC,UAAiC,CAAC;AAGxC,QAAM,WAAW,QAAQ,MAAM,SAAS;AAExC,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,QAAQ,KAAK,EAAE,MAAM,IAAI;AACvC,QAAI,MAAM,WAAW,EAAG;AAExB,UAAM,QAAQ,MAAM,CAAC,EAAE,YAAY,EAAE,KAAK;AAC1C,UAAM,OAAO,MAAM,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,KAAK;AAE5C,IAAAA,QAAO,KAAK,IAAI;AAAA,EAClB;AAGA,EAAAA,QAAO,OAAO;AAEd,SAAOA;AACT;AAEA,SAAS,sBAAsBA,SAAgC,gBAAgC;AAC7F,QAAM,aAAaA,QAAO,QAAQ;AAIlC,MAAI,gBAAgB,cAAc,GAAG;AACnC,WAAO;AAAA,EACT;AAGA,UAAQ,gBAAgB;AAAA,IACtB,KAAK;AAEH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,WAAW,QAAQ,aAAa,8BAA8B,CAAC;AAAA;AAAA,IAG7D,KAAK;AAEH,aAAO,WACJ,QAAQ,WAAW,EAAE,EACrB,QAAQ,YAAY,IAAI,EACxB,QAAQ,aAAa,EAAE,EACvB,KAAK;AAAA,IAEV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAEH,aAAO,WACJ,QAAQ,WAAW,MAAM,EACzB,QAAQ,YAAY,MAAM,EAC1B,QAAQ,aAAa,EAAE,EACvB,QAAQ,SAAS,EAAE,EACnB,KAAK;AAAA,IAEV,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAEH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,WAAW,QAAQ,aAAa,8BAA8B,CAAC;AAAA;AAAA,IAG7D,KAAK;AAEH,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQX,WACC,MAAM,IAAI,EACV,OAAO,UAAQ,KAAK,KAAK,KAAK,CAAC,KAAK,WAAW,GAAG,CAAC,EACnD,IAAI,UAAQ,QAAQ,KAAK,QAAQ,MAAM,KAAK,EAAE,KAAK,CAAC,GAAG,EACvD,MAAM,GAAG,EAAE,EACX,KAAK,IAAI,CAAC;AAAA;AAAA,IAGT,KAAK;AAEH,aAAO;AAAA;AAAA;AAAA,EAGX,WAAW,MAAM,IAAI,EAAE,IAAI,UAAQ,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,IAGxD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAEH,aAAO,KAAK,UAAU,EAAE,cAAc,WAAW,GAAG,MAAM,CAAC,IAAI;AAAA,IAEjE,KAAK;AAEH,aAAO;AAAA;AAAA,EAAoC,UAAU;AAAA;AAAA,IAEvD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AAEE,aAAO;AAAA,EACX;AACF;AAEA,eAAsB,eACpB,QACA,QACA,SACe;AACf,UAAQ,IAAI;AACZ,UAAQ,IAAIP,QAAM,KAAK,KAAK,gCAAyB,CAAC;AACtD,UAAQ,IAAIA,QAAM,KAAK,mDAAmD,CAAC;AAC3E,UAAQ,IAAI;AAEZ,QAAM,MAAM,QAAQ,IAAI;AAGxB,MAAI;AACJ,MAAI;AAEJ,MAAI,QAAQ;AACV,iBAAaI,MAAK,KAAK,MAAM;AAE7B,UAAM,cAAc,sBAAsB,MAAM;AAChD,QAAI,aAAa;AACf,uBAAiB;AAAA,IACnB,OAAO;AAEL,YAAM,iBAAiB,SAAS,MAAM,EAAE,YAAY;AACpD,uBAAiB,aAAa,cAAc,KAAK;AAAA,IACnD;AAAA,EACF,OAAO;AACL,UAAM,WAAW,MAAM,iBAAiB,GAAG;AAC3C,QAAI,CAAC,UAAU;AACb,cAAQ,IAAIJ,QAAM,IAAI,8DAAyD,CAAC;AAChF,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,2BAA2B,CAAC;AACnD,iBAAW,QAAQ,OAAO,KAAK,YAAY,GAAG;AAC5C,gBAAQ,IAAIA,QAAM,KAAK,cAAS,IAAI,EAAE,CAAC;AAAA,MACzC;AACA,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,6CAA6C,CAAC;AACrE,iBAAW,OAAO,OAAO,KAAK,YAAY,GAAG;AAC3C,gBAAQ,IAAIA,QAAM,KAAK,cAAS,GAAG,OAAO,CAAC;AAAA,MAC7C;AACA,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,0CAA0C,CAAC;AAClE,cAAQ,IAAIA,QAAM,KAAK,2CAA2C,CAAC;AACnE,cAAQ,IAAIA,QAAM,KAAK,oEAAoE,CAAC;AAC5F,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,iBAAa,SAAS;AACtB,qBAAiB,SAAS;AAAA,EAC5B;AAGA,QAAM,cAAc,OAAO,YAAY;AACvC,QAAM,mBAAmB,aAAa,WAAW,IAAI,cAAc,YAAY,QAAQ,MAAM,GAAG;AAChG,MAAI,CAAC,aAAa,gBAAgB,GAAG;AACnC,YAAQ,IAAIA,QAAM,IAAI,mCAA8B,MAAM,EAAE,CAAC;AAC7D,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,6BAA6B,CAAC;AACrD,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,cAAc,GAAG;AACxD,cAAQ,IAAIA,QAAM,KAAK,cAAS,IAAI,OAAO,EAAE,CAAC,WAAM,IAAI,EAAE,CAAC;AAAA,IAC7D;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI;AACJ,MAAI;AACF,oBAAgB,MAAMC,UAAS,YAAY,OAAO;AAAA,EACpD,QAAQ;AACN,YAAQ,IAAID,QAAM,IAAI,wCAAmC,UAAU,EAAE,CAAC;AACtE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAIA,QAAM,MAAM,aAAa,SAAS,UAAU,CAAC,KAAK,eAAe,cAAc,KAAK,cAAc,GAAG,CAAC;AAClH,UAAQ,IAAIA,QAAM,MAAM,aAAa,eAAe,gBAAgB,CAAC,EAAE,CAAC;AACxE,UAAQ,IAAI;AAGZ,QAAM,UAAUK,MAAI,6BAA6B,EAAE,MAAM;AAEzD,QAAME,UAAS,oBAAoB,aAAa;AAChD,QAAM,gBAAgB,sBAAsBA,SAAQ,gBAAgB;AAEpE,UAAQ,KAAK;AAGb,MAAI,iBAAiB,QAAQ,UAAU,aAAa,gBAAgB;AAGpE,MAAI,gBAAgB,gBAAgB,KAAK,CAAC,QAAQ,QAAQ;AACxD,UAAM,mBAAmB,SAAS,UAAU;AAC5C,UAAM,YAAY,aAAa,gBAAgB,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AACjF,qBAAiB,GAAG,SAAS,IAAI,gBAAgB;AAAA,EACnD;AAEA,QAAM,aAAaH,MAAK,KAAK,cAAc;AAG3C,MAAI;AACF,UAAMD,QAAO,UAAU;AACvB,QAAI,CAAC,QAAQ,OAAO;AAClB,cAAQ,IAAIH,QAAM,OAAO,uCAA6B,cAAc,EAAE,CAAC;AACvE,cAAQ,IAAIA,QAAM,KAAK,+BAA+B,CAAC;AACvD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,MAAI;AAEF,UAAM,EAAE,OAAAQ,OAAM,IAAI,MAAM,OAAO,aAAa;AAC5C,UAAM,YAAYJ,MAAK,KAAK,eAAe,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC;AAC5E,QAAI,cAAc,KAAK;AACrB,YAAMI,OAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC5C;AAEA,UAAMN,WAAU,YAAY,eAAe,OAAO;AAElD,YAAQ,IAAIF,QAAM,MAAM,yBAAoB,cAAc,EAAE,CAAC;AAC7D,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,YAAY,cAAc,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;AACtE,YAAQ,IAAIA,QAAM,KAAK,WAAW,cAAc,MAAM,QAAQ,CAAC;AAC/D,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,YAAQ,IAAIA,QAAM,IAAI,oCAA+B,iBAAiB,QAAQ,MAAM,UAAU,eAAe,EAAE,CAAC;AAChH,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;ACrbA,OAAOS,aAAW;AAClB,SAAS,YAAAC,WAAU,aAAAC,YAAW,UAAAC,eAAc;AAC5C,SAAS,QAAAC,QAAM,YAAAC,iBAAgB;AAC/B,OAAOC,WAAS;AAChB,OAAOC,cAAa;AAepB,SAAS,sBAAsB,SAAiB,YAAqC;AACnF,QAAM,WAA4B,CAAC;AACnC,QAAM,QAAQ,QAAQ,MAAM,oBAAoB;AAEhD,MAAI,iBAAuC;AAE3C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,KAAK,MAAM,UAAU,GAAG;AAE1B,UAAI,gBAAgB;AAClB,iBAAS,KAAK,cAAc;AAAA,MAC9B;AACA,YAAM,QAAQ,MAAM,IAAI,CAAC,KAAK;AAC9B,uBAAiB;AAAA,QACf,OAAO,MAAM,KAAK;AAAA,QAClB,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AACA;AAAA,IACF,WAAW,gBAAgB;AACzB,qBAAe,WAAW;AAAA,IAC5B,WAAW,KAAK,KAAK,GAAG;AAEtB,uBAAiB;AAAA,QACf,OAAO;AAAA,QACP,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,MAAI,gBAAgB;AAClB,aAAS,KAAK,cAAc;AAAA,EAC9B;AAEA,SAAO;AACT;AAEA,SAAS,wBACP,aACA,UACQ;AACR,UAAQ,UAAU;AAAA,IAChB,KAAK;AAEH,aAAO,YACJ,IAAI,CAAC,UAAU,MAAM;AACpB,cAAM,aAAa,SAAS,CAAC,GAAG,UAAU,UAAU,IAAI,CAAC;AACzD,cAAM,UAAU,SAAS,IAAI,OAAK;AAChC,cAAI,EAAE,UAAU,gBAAgB;AAC9B,mBAAO,MAAM,EAAE,KAAK;AAAA;AAAA,EAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,UAC7C;AACA,iBAAO,EAAE,QAAQ,KAAK;AAAA,QACxB,CAAC,EAAE,KAAK,MAAM;AAEd,eAAO,cAAc,UAAU;AAAA,EAAS,OAAO;AAAA,MACjD,CAAC,EACA,KAAK,aAAa;AAAA,IAEvB,KAAK;AAEH,YAAM,aAAa,oBAAI,IAA6B;AAEpD,iBAAW,gBAAgB,aAAa;AACtC,mBAAW,WAAW,cAAc;AAClC,gBAAM,aAAa,QAAQ,MAAM,YAAY;AAC7C,cAAI,CAAC,WAAW,IAAI,UAAU,GAAG;AAC/B,uBAAW,IAAI,YAAY,CAAC,CAAC;AAAA,UAC/B;AACA,qBAAW,IAAI,UAAU,EAAG,KAAK,OAAO;AAAA,QAC1C;AAAA,MACF;AAEA,YAAM,SAAmB,CAAC;AAE1B,iBAAW,CAAC,EAAE,QAAQ,KAAK,YAAY;AACrC,YAAI,SAAS,WAAW,GAAG;AACzB,iBAAO,KAAK,MAAM,SAAS,CAAC,EAAE,KAAK;AAAA;AAAA,EAAO,SAAS,CAAC,EAAE,QAAQ,KAAK,CAAC,EAAE;AAAA,QACxE,OAAO;AAEL,gBAAM,kBAAkB,SACrB,IAAI,OAAK,cAAc,EAAE,MAAM;AAAA,EAAS,EAAE,QAAQ,KAAK,CAAC,EAAE,EAC1D,KAAK,MAAM;AACd,iBAAO,KAAK,MAAM,SAAS,CAAC,EAAE,KAAK;AAAA;AAAA,EAAO,eAAe,EAAE;AAAA,QAC7D;AAAA,MACF;AAEA,aAAO,OAAO,KAAK,MAAM;AAAA,IAE3B,KAAK;AAAA,IACL;AAEE,YAAM,OAAO,oBAAI,IAAY;AAC7B,YAAM,SAAmB,CAAC;AAG1B,YAAM,eAAe,YAAY,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM;AAErD,eAAO,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAAA,MACtC,CAAC;AAED,iBAAW,WAAW,cAAc;AAElC,cAAM,aAAa,QAAQ,QACxB,YAAY,EACZ,QAAQ,QAAQ,GAAG,EACnB,KAAK,EACL,MAAM,GAAG,GAAG;AAEf,YAAI,CAAC,KAAK,IAAI,UAAU,GAAG;AACzB,eAAK,IAAI,UAAU;AACnB,cAAI,QAAQ,UAAU,gBAAgB;AACpC,mBAAO,KAAK,MAAM,QAAQ,KAAK;AAAA;AAAA,EAAO,QAAQ,QAAQ,KAAK,CAAC,EAAE;AAAA,UAChE,OAAO;AACL,mBAAO,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AAEA,aAAO,OAAO,KAAK,MAAM;AAAA,EAC7B;AACF;AAEA,eAAsB,aACpB,OACA,SACe;AACf,UAAQ,IAAI;AACZ,UAAQ,IAAIP,QAAM,KAAK,KAAK,8BAAuB,CAAC;AACpD,UAAQ,IAAIA,QAAM,KAAK,gDAAgD,CAAC;AACxE,UAAQ,IAAI;AAGZ,MAAI,MAAM,SAAS,GAAG;AACpB,YAAQ,IAAIA,QAAM,IAAI,mDAA8C,CAAC;AACrE,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,iDAAiD,CAAC;AACzE,YAAQ,IAAIA,QAAM,KAAK,mEAAmE,CAAC;AAC3F,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC,YAAQ,IAAIA,QAAM,KAAK,8DAA8D,CAAC;AACtF,YAAQ,IAAIA,QAAM,KAAK,kFAAkF,CAAC;AAC1G,YAAQ,IAAIA,QAAM,KAAK,wDAAwD,CAAC;AAChF,YAAQ,IAAIA,QAAM,KAAK,+DAA+D,CAAC;AACvF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,WAAW,QAAQ,YAAY;AAErC,UAAQ,IAAIA,QAAM,MAAM,qBAAqB,MAAM,MAAM,EAAE,CAAC;AAC5D,UAAQ,IAAIA,QAAM,MAAM,eAAe,QAAQ,EAAE,CAAC;AAClD,UAAQ,IAAI;AAGZ,QAAM,cAAiC,CAAC;AAExC,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAWI,OAAK,KAAK,IAAI;AAE/B,QAAI;AACF,YAAMD,QAAO,QAAQ;AAAA,IACvB,QAAQ;AACN,cAAQ,IAAIH,QAAM,IAAI,4BAAuB,IAAI,EAAE,CAAC;AACpD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI;AACF,YAAM,UAAU,MAAMC,UAAS,UAAU,OAAO;AAChD,YAAM,WAAW,sBAAsB,SAASI,UAAS,IAAI,CAAC;AAC9D,kBAAY,KAAK,QAAQ;AACzB,cAAQ,IAAIL,QAAM,KAAK,iBAAY,IAAI,KAAK,SAAS,MAAM,YAAY,CAAC;AAAA,IAC1E,SAAS,OAAO;AACd,cAAQ,IAAIA,QAAM,IAAI,2BAAsB,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,SAAS,EAAE,CAAC;AAC1G,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,UAAQ,IAAI;AAGZ,MAAI,QAAQ,aAAa;AACvB,UAAM,eAAe,YAAY;AAAA,MAAQ,CAAC,UAAU,MAClD,SAAS,IAAI,QAAM,EAAE,GAAG,GAAG,WAAW,EAAE,EAAE;AAAA,IAC5C;AAEA,UAAM,UAAU,aAAa,IAAI,CAAC,SAAS,OAAO;AAAA,MAChD,OAAO,IAAI,QAAQ,MAAM,KAAK,QAAQ,KAAK;AAAA,MAC3C,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,EAAE;AAEF,UAAM,WAAW,MAAMO,SAAQ;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,MACA,cAAc;AAAA,MACd,MAAM;AAAA,IACR,CAAC;AAED,QAAI,CAAC,SAAS,YAAY,SAAS,SAAS,WAAW,GAAG;AACxD,cAAQ,IAAIP,QAAM,OAAO,mCAAmC,CAAC;AAC7D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,UAAM,mBAAmB,SAAS,SAAS,IAAI,CAAC,MAAc,aAAa,CAAC,CAAC;AAC7E,gBAAY,SAAS;AACrB,gBAAY,KAAK,gBAAgB;AAAA,EACnC;AAGA,QAAM,UAAUM,MAAI,2BAA2B,EAAE,MAAM;AACvD,QAAM,gBAAgB,wBAAwB,aAAa,QAAQ;AACnE,UAAQ,KAAK;AAGb,QAAM,eAAe;AAAA;AAAA;AAAA,iBAGN,MAAM,KAAK,IAAI,CAAC;AAAA,cACnB,QAAQ;AAAA,WACZ,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA;AAAA;AAAA,EAGhC,aAAa;AAAA;AAIb,QAAM,iBAAiB,QAAQ,UAAU;AACzC,QAAM,aAAaF,OAAK,KAAK,cAAc;AAG3C,MAAI;AACF,UAAMD,QAAO,UAAU;AACvB,QAAI,CAAC,QAAQ,OAAO;AAClB,cAAQ,IAAIH,QAAM,OAAO,uCAA6B,cAAc,EAAE,CAAC;AACvE,cAAQ,IAAIA,QAAM,KAAK,+BAA+B,CAAC;AACvD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,QAAQ;AAAA,EAER;AAGA,MAAI;AACF,UAAME,WAAU,YAAY,cAAc,OAAO;AAEjD,YAAQ,IAAIF,QAAM,MAAM,sBAAiB,cAAc,EAAE,CAAC;AAC1D,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,cAAc,MAAM,MAAM,QAAQ,CAAC;AAC1D,YAAQ,IAAIA,QAAM,KAAK,YAAY,aAAa,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,YAAQ,IAAIA,QAAM,KAAK,WAAW,aAAa,MAAM,QAAQ,CAAC;AAC9D,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,YAAQ,IAAIA,QAAM,IAAI,oCAA+B,iBAAiB,QAAQ,MAAM,UAAU,eAAe,EAAE,CAAC;AAChH,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AChSA,OAAOQ,aAAW;AAClB,OAAOC,cAAa;AACpB,OAAOC,WAAS;AAChB,SAAS,YAAAC,YAAU,UAAAC,SAAQ,WAAAC,gBAAe;AAC1C,SAAS,QAAAC,QAAM,UAAU,WAAAC,UAAS,YAAAC,iBAAgB;AAKlD,IAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AACF;AA+CA,eAAe,cACb,UACA,UAAyB,CAAC,GACD;AACzB,QAAM,WAAW,QAAQ,SAAS;AAClC,QAAM,QAAwB,CAAC;AAC/B,QAAM,WAAW,QAAQ,UACrB,CAAC,QAAQ,OAAO,IAChB;AAEJ,iBAAe,KAAK,KAAa,OAA8B;AAC7D,QAAI,QAAQ,SAAU;AAEtB,QAAI;AACF,YAAM,UAAU,MAAMC,SAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAE1D,iBAAW,SAAS,SAAS;AAC3B,cAAM,WAAWC,OAAK,KAAK,MAAM,IAAI;AAGrC,YAAI,MAAM,YAAY,GAAG;AACvB,gBAAM,WAAW;AAAA,YACf;AAAA,YAAgB;AAAA,YAAQ;AAAA,YAAS;AAAA,YAAQ;AAAA,YAAS;AAAA,YAClD;AAAA,YAAY;AAAA,YAAU;AAAA,YAAe;AAAA,YAAQ;AAAA,YAC7C;AAAA,YAAU;AAAA,YAAU;AAAA,YAAS;AAAA,UAC/B;AACA,cAAI,SAAS,SAAS,MAAM,IAAI,EAAG;AAEnC,cAAI,QAAQ,cAAc,OAAO;AAC/B,kBAAM,KAAK,UAAU,QAAQ,CAAC;AAAA,UAChC;AAAA,QACF,WAAW,MAAM,OAAO,GAAG;AAEzB,cAAI,SAAS,SAAS,MAAM,IAAI,GAAG;AACjC,gBAAI;AACF,oBAAM,UAAU,MAAMC,WAAS,UAAU,OAAO;AAChD,oBAAM,eAAe,SAAS,UAAU,QAAQ;AAEhD,oBAAM,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA,MAAM,mBAAmB,SAASC,SAAQ,QAAQ,CAAC;AAAA,gBACnD;AAAA,gBACA,UAAUC,uBAAsB,OAAO;AAAA,cACzC,CAAC;AAAA,YACH,QAAQ;AAAA,YAER;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,QAAM,KAAK,UAAU,CAAC;AACtB,SAAO;AACT;AAKA,SAAS,mBAAmB,SAAiB,SAAyB;AAEpE,QAAM,WAAW;AAAA,IACf;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,QAAQ,MAAM,OAAO;AACnC,QAAI,SAAS,MAAM,CAAC,GAAG;AACrB,YAAM,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,UAAU,EAAE,EAAE,KAAK;AACxD,UAAI,QAAQ,KAAK,SAAS,KAAK;AAC7B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAGA,SAAOC,UAAS,OAAO,KAAK;AAC9B;AAKA,SAASD,uBAAsB,SAAkC;AAC/D,QAAM,WAA4B,CAAC;AACnC,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,MAAI,iBAAuC;AAC3C,MAAI,eAAyB,CAAC;AAE9B,aAAW,QAAQ,OAAO;AACxB,UAAM,eAAe,KAAK,MAAM,mBAAmB;AAEnD,QAAI,cAAc;AAEhB,UAAI,gBAAgB;AAClB,uBAAe,UAAU,aAAa,KAAK,IAAI,EAAE,KAAK;AACtD,iBAAS,KAAK,cAAc;AAAA,MAC9B;AAEA,uBAAiB;AAAA,QACf,OAAO,aAAa,CAAC,EAAE,KAAK;AAAA,QAC5B,SAAS;AAAA,QACT,OAAO,aAAa,CAAC,EAAE;AAAA,MACzB;AACA,qBAAe,CAAC;AAAA,IAClB,OAAO;AACL,mBAAa,KAAK,IAAI;AAAA,IACxB;AAAA,EACF;AAGA,MAAI,gBAAgB;AAClB,mBAAe,UAAU,aAAa,KAAK,IAAI,EAAE,KAAK;AACtD,aAAS,KAAK,cAAc;AAAA,EAC9B;AAEA,SAAO;AACT;AAKA,SAAS,eAAe,OAAuB,WAAwC;AACrF,QAAM,cAAmC,CAAC;AAG1C,QAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAG1D,QAAM,iBAAiB,OAAO,OAAO,OAAK,EAAE,SAAS,CAAC;AAEtD,MAAI,eAAe,WAAW,KAAK,MAAM,SAAS,GAAG;AAEnD,WAAO,MAAM,IAAI,QAAM;AAAA,MACrB,UAAUD,SAAQ,EAAE,IAAI;AAAA,MACxB,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,IACb,EAAE;AAAA,EACJ;AAGA,aAAW,QAAQ,gBAAgB;AACjC,UAAM,UAAUA,SAAQ,KAAK,IAAI;AACjC,UAAM,WAAW,MAAM,OAAO,OAAK;AACjC,UAAI,MAAM,KAAM,QAAO;AAEvB,aAAO,EAAE,KAAK,WAAW,UAAU,GAAG,KAAK,EAAE,QAAQ,KAAK;AAAA,IAC5D,CAAC;AAGD,eAAW,SAAS,UAAU;AAC5B,YAAM,aAAa,KAAK;AAAA,IAC1B;AAEA,gBAAY,KAAK;AAAA,MACf,UAAU;AAAA,MACV;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAGA,QAAM,gBAAgB,IAAI,IAAI,YAAY,QAAQ,OAAK,CAAC,EAAE,MAAM,MAAM,GAAG,EAAE,SAAS,IAAI,OAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACtG,QAAM,UAAU,MAAM,OAAO,OAAK,CAAC,cAAc,IAAI,EAAE,IAAI,CAAC;AAE5D,aAAW,UAAU,SAAS;AAC5B,gBAAY,KAAK;AAAA,MACf,UAAUA,SAAQ,OAAO,IAAI;AAAA,MAC7B,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,IACb,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAKA,SAAS,eAAe,QAAsB,SAA8B;AAC1E,MAAI,QAAQ,MAAM;AAChB,YAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,EACF;AAEA,UAAQ,IAAI;AACZ,UAAQ,IAAIG,QAAM,KAAK,KAAK,4BAAqB,CAAC;AAClD,UAAQ,IAAI;AAEZ,MAAI,OAAO,eAAe,GAAG;AAC3B,YAAQ,IAAIA,QAAM,OAAO,2CAA2C,CAAC;AACrE,YAAQ,IAAIA,QAAM,KAAK,qFAAqF,CAAC;AAC7G;AAAA,EACF;AAEA,UAAQ,IAAIA,QAAM,MAAM,WAAW,OAAO,UAAU,wBAAwB,CAAC;AAC7E,UAAQ,IAAI;AAGZ,aAAW,aAAa,OAAO,WAAW;AACxC,UAAM,aAAa,UAAU,SAAS,SAAS;AAE/C,QAAI,UAAU,MAAM;AAClB,YAAM,OAAO,aAAa,cAAO;AACjC,YAAM,YAAY,aAAaA,QAAM,QAAQ,iBAAiB,IAAIA,QAAM,KAAK,cAAc;AAC3F,cAAQ,IAAI,KAAK,IAAI,IAAIA,QAAM,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;AAC7E,cAAQ,IAAIA,QAAM,KAAK,QAAQ,UAAU,KAAK,YAAY,EAAE,CAAC;AAG7D,UAAI,QAAQ,WAAW,UAAU,KAAK,SAAS,SAAS,GAAG;AACzD,cAAM,eAAe,UAAU,KAAK,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,EAAE,KAAK;AACzE,gBAAQ,IAAIA,QAAM,KAAK,kBAAkB,aAAa,KAAK,IAAI,CAAC,GAAG,UAAU,KAAK,SAAS,SAAS,IAAI,QAAQ,EAAE,EAAE,CAAC;AAAA,MACvH;AAAA,IACF;AAGA,eAAW,SAAS,UAAU,UAAU;AACtC,cAAQ,IAAI,+BAAcA,QAAM,MAAM,MAAM,IAAI,CAAC,EAAE;AACnD,cAAQ,IAAIA,QAAM,KAAK,WAAW,MAAM,YAAY,EAAE,CAAC;AAEvD,UAAI,QAAQ,WAAW,MAAM,SAAS,SAAS,GAAG;AAChD,cAAM,eAAe,MAAM,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,EAAE,KAAK;AAChE,gBAAQ,IAAIA,QAAM,KAAK,qBAAqB,aAAa,KAAK,IAAI,CAAC,GAAG,MAAM,SAAS,SAAS,IAAI,QAAQ,EAAE,EAAE,CAAC;AAAA,MACjH;AAAA,IACF;AACA,YAAQ,IAAI;AAAA,EACd;AAGA,QAAM,gBAAgB,OAAO,UAAU,OAAO,OAAK,EAAE,SAAS,SAAS,CAAC,EAAE;AAC1E,QAAM,kBAAkB,OAAO,UAAU,OAAO,OAAK,EAAE,SAAS,WAAW,CAAC,EAAE;AAE9E,MAAI,gBAAgB,GAAG;AACrB,YAAQ,IAAIA,QAAM,KAAK,eAAQ,aAAa,iDAAiD,CAAC;AAAA,EAChG;AACA,MAAI,kBAAkB,GAAG;AACvB,YAAQ,IAAIA,QAAM,KAAK,eAAQ,eAAe,uBAAuB,CAAC;AAAA,EACxE;AAGA,MAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,OAAO,0BAAgB,CAAC;AAC1C,eAAW,SAAS,OAAO,QAAQ;AACjC,cAAQ,IAAIA,QAAM,KAAK,QAAQ,KAAK,EAAE,CAAC;AAAA,IACzC;AAAA,EACF;AACF;AAKA,eAAsB,cAAcC,QAAe,KAAK,SAAuC;AAC7F,UAAQ,IAAI;AACZ,UAAQ,IAAID,QAAM,KAAK,KAAK,+BAAwB,CAAC;AACrD,UAAQ,IAAIA,QAAM,KAAK,2EAA2E,CAAC;AACnG,UAAQ,IAAI;AAGZ,QAAM,WAAWL,OAAK,QAAQ,IAAI,GAAGM,KAAI;AAGzC,MAAI;AACF,UAAMC,QAAO,QAAQ;AAAA,EACvB,QAAQ;AACN,YAAQ,IAAIF,QAAM,IAAI,4BAAuB,QAAQ,EAAE,CAAC;AACxD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAUG,MAAI,kDAAkD,EAAE,MAAM;AAE9E,MAAI;AAEF,UAAM,QAAQ,MAAM,cAAc,UAAU,OAAO;AAGnD,UAAM,WAAW,MAAM,mBAAmB,QAAQ;AAElD,UAAM,aAAa,MAAM,SAAS,SAAS;AAE3C,QAAI,eAAe,GAAG;AACpB,cAAQ,KAAK,0CAA0C;AACvD,cAAQ,IAAI;AACZ,cAAQ,IAAIH,QAAM,KAAK,gBAAgB,CAAC;AACxC,cAAQ,IAAIA,QAAM,KAAK,sEAAiE,CAAC;AACzF,cAAQ,IAAIA,QAAM,KAAK,mEAA8D,CAAC;AACtF,cAAQ,IAAIA,QAAM,KAAK,yEAAyE,CAAC;AACjG;AAAA,IACF;AAEA,YAAQ,QAAQ,SAAS,MAAM,MAAM,8BAA8B,SAAS,MAAM,aAAa;AAG/F,UAAM,YAAY,eAAe,OAAO,QAAQ;AAEhD,UAAM,SAAuB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAGA,mBAAe,QAAQ,OAAO;AAG9B,QAAI,SAAS,SAAS,GAAG;AACvB,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,KAAK,4BAAuB,CAAC;AACpD,cAAQ,IAAI;AAGZ,YAAM,iBAAiB,SAAS,OAAO,OAAK,EAAE,SAAS,gBAAgB;AACvE,YAAM,iBAAiB,SAAS,OAAO,OAAK,EAAE,SAAS,gBAAgB;AAEvE,UAAI,eAAe,SAAS,GAAG;AAC7B,gBAAQ,IAAIA,QAAM,KAAK,sBAAsB,eAAe,MAAM,IAAI,CAAC;AACvE,mBAAW,OAAO,gBAAgB;AAChC,kBAAQ,IAAIA,QAAM,KAAK,cAAS,IAAI,IAAI,EAAE,CAAC;AAC3C,kBAAQ,IAAIA,QAAM,KAAK,UAAU,SAAS,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC;AAAA,QAClE;AACA,gBAAQ,IAAI;AAAA,MACd;AAEA,UAAI,eAAe,SAAS,GAAG;AAC7B,gBAAQ,IAAIA,QAAM,OAAO,sBAAsB,eAAe,MAAM,IAAI,CAAC;AACzE,mBAAW,OAAO,gBAAgB;AAChC,kBAAQ,IAAIA,QAAM,KAAK,iBAAU,IAAI,IAAI,EAAE,CAAC;AAC5C,kBAAQ,IAAIA,QAAM,KAAK,UAAU,SAAS,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC;AAAA,QAClE;AACA,gBAAQ,IAAI;AAAA,MACd;AAEA,cAAQ,IAAIA,QAAM,KAAK,2EAAoE,CAAC;AAAA,IAC9F;AAGA,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAIA,QAAM,OAAO,gDAAyC,CAAC;AACnE,cAAQ,IAAIA,QAAM,KAAK,8CAA8C,CAAC;AACtE;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,MAAM;AACjB,cAAQ,IAAI;AACZ,YAAM,EAAE,OAAO,IAAI,MAAMI,SAAQ;AAAA,QAC/B,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP,EAAE,OAAO,uBAAuB,OAAO,UAAU;AAAA,UACjD,EAAE,OAAO,mCAAmC,OAAO,UAAU;AAAA,UAC7D,EAAE,OAAO,kCAAkC,OAAO,OAAO;AAAA,UACzD,EAAE,OAAO,0CAA0C,OAAO,OAAO;AAAA,QACnE;AAAA,QACA,SAAS;AAAA,MACX,CAAC;AAED,cAAQ,QAAQ;AAAA,QACd,KAAK;AACH,kBAAQ,IAAIJ,QAAM,KAAK,6EAAsE,CAAC;AAC9F,kBAAQ,IAAIA,QAAM,KAAK,gEAAgE,CAAC;AACxF;AAAA,QACF,KAAK;AAEH,gBAAM,kBAAkB,UAAU,MAAM;AACxC;AAAA,QACF,KAAK;AACH,kBAAQ,IAAIA,QAAM,KAAK,kEAA2D,CAAC;AACnF,kBAAQ,IAAIA,QAAM,KAAK,sCAAsC,CAAC;AAC9D;AAAA,QACF;AAEE;AAAA,MACJ;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,KAAK,eAAe;AAC5B,YAAQ,MAAMA,QAAM,IAAI,YAAY,iBAAiB,QAAQ,MAAM,UAAU,eAAe,EAAE,CAAC;AAC/F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAKA,eAAe,kBAAkB,UAAkB,QAAqC;AACtF,QAAM,EAAE,WAAAK,YAAW,OAAAC,OAAM,IAAI,MAAM,OAAO,aAAa;AACvD,QAAM,YAAYX,OAAK,UAAU,aAAa;AAE9C,MAAI;AACF,UAAMW,OAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAE1C,UAAM,gBAAgB;AAAA,MACpB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC;AAAA,MACA,YAAY,OAAO;AAAA,MACnB,WAAW,OAAO,UAAU,IAAI,QAAM;AAAA,QACpC,UAAU,EAAE;AAAA,QACZ,UAAU,EAAE,MAAM;AAAA,QAClB,UAAU,EAAE,MAAM;AAAA,QAClB,UAAU,EAAE,SAAS,IAAI,QAAM;AAAA,UAC7B,MAAM,EAAE;AAAA,UACR,MAAM,EAAE;AAAA,UACR,UAAU,EAAE,SAAS,IAAI,OAAK,EAAE,KAAK;AAAA,QACvC,EAAE;AAAA,MACJ,EAAE;AAAA,IACJ;AAEA,UAAMD;AAAA,MACJV,OAAK,WAAW,gBAAgB;AAAA,MAChC,KAAK,UAAU,eAAe,MAAM,CAAC;AAAA,MACrC;AAAA,IACF;AAEA,YAAQ,IAAIK,QAAM,MAAM,0DAAqD,CAAC;AAC9E,YAAQ,IAAIA,QAAM,KAAK,oEAAoE,CAAC;AAAA,EAC9F,SAAS,OAAO;AACd,YAAQ,MAAMA,QAAM,IAAI,sCAAiC,iBAAiB,QAAQ,MAAM,UAAU,SAAS,EAAE,CAAC;AAAA,EAChH;AACF;;;ACxeA,OAAOO,aAAW;AAClB,OAAOC,WAAS;AAShB,eAAsB,mBACpB,SACe;AAEf,MAAI,CAAC,gBAAgB,GAAG;AACtB,YAAQ,IAAIC,QAAM,OAAO,+CAA+C,CAAC;AACzE,YAAQ,IAAIA,QAAM,KAAK,oCAAoC,CAAC;AAC5D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAUC,MAAI,yBAAyB,EAAE,MAAM;AAErD,MAAI;AACF,UAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,MACzC,OAAO,QAAQ,SAAS;AAAA,IAC1B,CAAC;AAED,YAAQ,KAAK;AAGb,QAAI,QAAQ,MAAM;AAChB,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C;AAAA,IACF;AAEA,UAAM,EAAE,aAAa,MAAM,IAAI;AAE/B,QAAI,YAAY,WAAW,GAAG;AAC5B,cAAQ,IAAI;AACZ,cAAQ,IAAID,QAAM,OAAO,uBAAuB,CAAC;AACjD,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,wFAAwF,CAAC;AAChH,cAAQ,IAAIA,QAAM,KAAK,uEAAuE,CAAC;AAC/F,cAAQ,IAAI;AACZ;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,+BAAwB,KAAK,SAAS,CAAC;AAC9D,YAAQ,IAAI;AAEZ,eAAW,aAAa,aAAa;AACnC,cAAQ,IAAIA,QAAM,KAAK,KAAK,UAAU,IAAI,EAAE,CAAC;AAC7C,cAAQ,IAAIA,QAAM,KAAK,WAAW,UAAU,EAAE,EAAE,CAAC;AACjD,UAAI,UAAU,aAAa;AACzB,gBAAQ,IAAIA,QAAM,KAAK,OAAO,UAAU,WAAW,EAAE,CAAC;AAAA,MACxD;AACA,cAAQ,IAAIA,QAAM,KAAK,mBAAmB,UAAU,mBAAmB,CAAC,EAAE,CAAC;AAC3E,cAAQ,IAAIA,QAAM,KAAK,mBAAmB,UAAU,gBAAgB,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;AACtF,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,QAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,OAAO,CAAC;AAC/B,YAAQ,IAAIA,QAAM,KAAK,2DAAsD,CAAC;AAC9E,YAAQ,IAAIA,QAAM,KAAK,iEAA4D,CAAC;AACpF,YAAQ,IAAIA,QAAM,KAAK,yCAAoC,CAAC;AAC5D,YAAQ,IAAI;AAAA,EACd,SAAS,OAAO;AACd,YAAQ,KAAK,6BAA6B;AAC1C,IAAAE,aAAY,KAAK;AAAA,EACnB;AACF;AAEA,SAASA,aAAY,OAAsB;AACzC,MAAI,iBAAiB,iBAAiB;AACpC,YAAQ,MAAMF,QAAM,IAAI,UAAU,MAAM,OAAO,EAAE,CAAC;AAClD,QAAI,MAAM,eAAe,KAAK;AAC5B,cAAQ,MAAMA,QAAM,KAAK,sEAAsE,CAAC;AAAA,IAClG,WAAW,MAAM,eAAe,KAAK;AACnC,cAAQ,MAAMA,QAAM,KAAK,kDAAkD,CAAC;AAAA,IAC9E;AAAA,EACF,OAAO;AACL,YAAQ,MAAMA,QAAM,IAAI,+BAA+B,CAAC;AAAA,EAC1D;AACA,UAAQ,KAAK,CAAC;AAChB;;;ACvFA,OAAOG,aAAW;AAGlB,eAAsB,cACpB,QACA,UACe;AACf,MAAI,CAAC,UAAU,WAAW,QAAQ;AAChC,YAAQ,IAAI;AACZ,YAAQ,IAAIC,QAAM,KAAK,4CAAkC,CAAC;AAC1D,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACNA,QAAM,MAAM,aAAa,IAAIA,QAAM,MAAM,UAAU,CAAC;AAAA,IACtD;AACA,YAAQ;AAAA,MACNA,QAAM,MAAM,aAAa,IAAIA,QAAM,KAAK,cAAc,CAAC;AAAA,IACzD;AACA,QAAI,QAAQ,IAAI,oBAAoB;AAClC,cAAQ;AAAA,QACNA,QAAM;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,YAAQ,IAAI;AACZ;AAAA,EACF;AAEA,MAAI,WAAW,WAAW;AACxB,QAAI,CAAC,UAAU;AACb,cAAQ;AAAA,QACNA,QAAM,IAAI,mCAAmC;AAAA,MAC/C;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,QAAI;AACF,UAAI,IAAI,QAAQ;AAAA,IAClB,QAAQ;AACN,cAAQ,MAAMA,QAAM,IAAI,gBAAgB,QAAQ,EAAE,CAAC;AACnD,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM,QAAQ,SAAS,QAAQ,QAAQ,EAAE;AACzC,cAAU,KAAK;AACf,YAAQ;AAAA,MACNA,QAAM,MAAM,QAAG,IACb,mBAAmBA,QAAM,KAAK,KAAK,CAAC;AAAA,IACxC;AACA,YAAQ;AAAA,MACNA,QAAM,KAAK,yDAAyD;AAAA,IACtE;AACA;AAAA,EACF;AAEA,MAAI,WAAW,aAAa;AAC1B,cAAU,4BAA4B;AACtC,YAAQ;AAAA,MACNA,QAAM,MAAM,QAAG,IACb,uBACAA,QAAM,KAAK,4BAA4B;AAAA,IAC3C;AACA;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAI,cAAc,CAAC;AAC3B;AAAA,EACF;AAEA,UAAQ,MAAMA,QAAM,IAAI,0BAA0B,MAAM,EAAE,CAAC;AAC3D,UAAQ,MAAMA,QAAM,KAAK,iDAAiD,CAAC;AAC3E,UAAQ,KAAK,CAAC;AAChB;;;AnCjDA,IAAMC,eAAc;AAEpB,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,YAAY,EACjB,YAAY,0DAA0D,EACtE,QAAQA,YAAW;AAOtB,QACG,QAAQ,QAAQ,EAChB,YAAY,4DAA4D,EACxE,OAAO,qBAAqB,cAAc,EAC1C,OAAO,mCAAmC,qBAAqB,EAC/D,OAAO,uBAAuB,8BAA8B,EAC5D,OAAO,yBAAyB,gEAAgE,EAChG,OAAO,+BAA+B,iCAAiC,EACvE,OAAO,uBAAuB,mEAAmE,EACjG,OAAO,wBAAwB,sDAAsD,EACrF,OAAO,aAAa,kDAAkD,EAEtE,OAAO,sBAAsB,+CAA+C,EAC5E,OAAO,oBAAoB,yDAAyD,EACpF,OAAO,eAAe,+DAA+D,EACrF,OAAO,oBAAoB,+CAA+C,EAC1E,OAAO,sBAAsB,2DAA2D,EACxF,OAAO,yBAAyB,oDAAoD,EACpF,OAAO,iBAAiB,gDAAgD,EACxE,OAAO,uBAAuB,2BAA2B,EACzD,OAAO,uBAAuB,kDAAkD,EAChF,OAAO,mBAAmB,yCAAyC,EACnE,OAAO,aAAa;AAGvB,QACG,QAAQ,OAAO,EACf,YAAY,6CAA6C,EACzD,OAAO,QAAQ,4CAA4C,EAC3D,OAAO,YAAY;AAGtB,QACG,QAAQ,SAAS,EACjB,YAAY,wDAAwD,EACpE,OAAO,sBAAsB,6CAA6C,EAC1E,OAAO,cAAc,gCAAgC,EACrD,OAAO,cAAc;AAGxB,QACG,QAAQ,2BAA2B,EACnC,YAAY,mEAA8D,EAC1E,OAAO,uBAAuB,iBAAiB,EAC/C,OAAO,eAAe,gCAAgC,EACtD,OAAO,cAAc;AAGxB,QACG,QAAQ,kBAAkB,EAC1B,YAAY,gDAAgD,EAC5D,OAAO,uBAAuB,sCAAsC,EACpE,OAAO,yBAAyB,0DAA0D,EAC1F,OAAO,eAAe,gCAAgC,EACtD,OAAO,qBAAqB,uCAAuC,EACnE,OAAO,YAAY;AAGtB,QACG,QAAQ,eAAe,EACvB,YAAY,mDAAmD,EAC/D,OAAO,aAAa,gDAAgD,EACpE,OAAO,kBAAkB,2BAA2B,EACpD,OAAO,eAAe,+BAA+B,IAAI,EACzD,OAAO,oBAAoB,oCAAoC,EAC/D,OAAO,UAAU,+CAA+C,EAChE,OAAO,iBAAiB,mCAAmC,EAC3D,OAAO,cAAc,gBAAgB,EACrC,OAAO,aAAa;AAGvB,QACG,QAAQ,QAAQ,EAChB,YAAY,sDAAsD,EAClE,OAAO,aAAa;AAMvB,QACG,QAAQ,WAAW,EACnB,YAAY,4DAA4D,EACxE,OAAO,uBAAuB,oBAAoB,GAAG,EACrD,OAAO,aAAa,4CAA4C,EAChE,OAAO,aAAa,qCAAqC,EACzD,OAAO,cAAc,4CAA4C,EACjE,OAAO,WAAW;AAErB,QACG,QAAQ,gBAAgB,EACxB,YAAY,6CAA6C,EACzD,OAAO,wBAAwB,qBAAqB,IAAI,EACxD,OAAO,aAAa;AAEvB,QACG,QAAQ,MAAM,EACd,YAAY,sBAAsB,EAClC,OAAO,wBAAwB,qBAAqB,IAAI,EACxD,OAAO,iCAAiC,uCAAuC,EAC/E,OAAO,WAAW;AAErB,QACG,QAAQ,aAAa,EACrB,YAAY,oDAAoD,EAChE,OAAO,qBAAqB,gBAAgB,EAC5C,OAAO,4BAA4B,uBAAuB,EAC1D,OAAO,0BAA0B,wCAAwC,SAAS,EAClF,OAAO,qBAAqB,wBAAwB,EACpD,OAAO,aAAa,cAAc,EAClC,OAAO,eAAe,uCAAuC,EAC7D,OAAO,WAAW;AAErB,QACG,QAAQ,aAAa,EACrB,YAAY,sDAAsD,EAClE,OAAO,wBAAwB,qBAAqB,IAAI,EACxD,OAAO,cAAc,gBAAgB,EACrC,OAAO,kBAAkB;AAG5B,QACG,QAAQ,4BAA4B,EACpC,YAAY,qDAAqD,EACjE,OAAO,UAAU,6BAA6B,EAC9C,OAAO,WAAW;AAErB,QACG,QAAQ,eAAe,EACvB,YAAY,kDAAkD,EAC9D,OAAO,aAAa;AAGvB,QACG,QAAQ,mBAAmB,EAC3B,YAAY,mDAAmD,EAC/D,OAAO,WAAW,gDAAgD,EAClE,OAAO,WAAW;AAMrB,QACG,QAAQ,OAAO,EACf,YAAY,8CAA8C,EAC1D,OAAO,YAAY;AAEtB,QACG,QAAQ,QAAQ,EAChB,YAAY,uCAAuC,EACnD,OAAO,aAAa;AAEvB,QACG,QAAQ,QAAQ,EAChB,YAAY,iCAAiC,EAC7C,OAAO,aAAa;AAEvB,QACG,QAAQ,yBAAyB,EACjC,YAAY,wDAAwD,EACpE,OAAO,aAAa;AAMvB,QAAQ;AAAA,EACN;AAAA,EACA;AAAA,EACAC,QAAM,KAAK,0BAAmB,CAAC,IAAIA,QAAM,KAAK,4BAA4B,CAAC;AAAA,EAC3EA,QAAM,KAAK,wDAAwD,CAAC;AAAA;AAEtE;AAEA,QAAQ;AAAA,EACN;AAAA,EACA;AAAA,EACAA,QAAM,KAAK,cAAc,CAAC;AAAA,IACxBA,QAAM,MAAM,gBAAgB,CAAC,mBAAmBA,QAAM,KAAK,+BAA+B,CAAC;AAAA,IAC3FA,QAAM,MAAM,mBAAmB,CAAC,gBAAgBA,QAAM,KAAK,kCAAkC,CAAC;AAAA,IAC9FA,QAAM,MAAM,0BAA0B,CAAC,SAASA,QAAM,KAAK,yBAAyB,CAAC;AAAA,IACrFA,QAAM,MAAM,4BAA4B,CAAC,OAAOA,QAAM,KAAK,4CAA4C,CAAC;AAAA;AAAA,EAE1GA,QAAM,KAAK,mBAAmB,CAAC;AAAA,IAC7BA,QAAM,MAAM,iBAAiB,CAAC,kBAAkBA,QAAM,KAAK,4BAA4B,CAAC;AAAA,IACxFA,QAAM,MAAM,0BAA0B,CAAC,SAASA,QAAM,KAAK,2BAA2B,CAAC;AAAA,IACvFA,QAAM,MAAM,gBAAgB,CAAC,mBAAmBA,QAAM,KAAK,+BAA+B,CAAC;AAAA,IAC3FA,QAAM,MAAM,0BAA0B,CAAC,SAASA,QAAM,KAAK,4BAA4B,CAAC;AAAA,IACxFA,QAAM,MAAM,kCAAkC,CAAC,IAAIA,QAAM,KAAK,0BAA0B,CAAC;AAAA,IACzFA,QAAM,MAAM,mCAAmC,CAAC,IAAIA,QAAM,KAAK,wBAAwB,CAAC;AAAA;AAAA,EAE1FA,QAAM,KAAK,cAAc,CAAC;AAAA,IACxBA,QAAM,MAAM,uBAAuB,CAAC,YAAYA,QAAM,KAAK,mBAAmB,CAAC;AAAA,IAC/EA,QAAM,MAAM,wBAAwB,CAAC,WAAWA,QAAM,KAAK,gCAAgC,CAAC;AAAA,IAC5FA,QAAM,MAAM,wBAAwB,CAAC,WAAWA,QAAM,KAAK,2BAA2B,CAAC;AAAA,IACvFA,QAAM,MAAM,cAAc,CAAC,qBAAqBA,QAAM,KAAK,0BAA0B,CAAC;AAAA,IACtFA,QAAM,MAAM,qBAAqB,CAAC,cAAcA,QAAM,KAAK,uBAAuB,CAAC;AAAA,IACnFA,QAAM,MAAM,qBAAqB,CAAC,cAAcA,QAAM,KAAK,yBAAyB,CAAC;AAAA;AAAA,EAEvFA,QAAM,KAAK,qBAAqB,CAAC;AAAA,IAC/BA,QAAM,MAAM,+BAA+B,CAAC,IAAIA,QAAM,KAAK,iCAAiC,CAAC;AAAA,IAC7FA,QAAM,MAAM,0BAA0B,CAAC,SAASA,QAAM,KAAK,uBAAuB,CAAC;AAAA,IACnFA,QAAM,MAAM,wBAAwB,CAAC,WAAWA,QAAM,KAAK,+BAA+B,CAAC;AAAA;AAAA,EAE7FA,QAAM,KAAK,QAAQ,CAAC;AAAA,IAClBA,QAAM,MAAM,oBAAoB,CAAC,eAAeA,QAAM,KAAK,6BAA6B,CAAC;AAAA;AAAA,EAE3FA,QAAM,KAAK,gBAAgB,CAAC;AAAA,IAC1BA,QAAM,MAAM,gBAAgB,CAAC,oBAAoBA,QAAM,KAAK,uBAAuB,CAAC;AAAA,IACpFA,QAAM,MAAM,8BAA8B,CAAC,MAAMA,QAAM,KAAK,qCAAqC,CAAC;AAAA,IAClGA,QAAM,MAAM,0BAA0B,CAAC,UAAUA,QAAM,KAAK,qCAAqC,CAAC;AAAA,IAClGA,QAAM,MAAM,qBAAqB,CAAC,eAAeA,QAAM,KAAK,2BAA2B,CAAC;AAAA;AAAA,EAE1FA,QAAM,KAAK,uCAAuC,CAAC;AAAA;AAErD;AAEA,QAAQ,MAAM;","names":["chalk","platform","chalk","chalk","chalk","ora","chalk","ora","chalk","ora","chalk","ora","chalk","ora","writeFile","mkdir","readFile","join","dirname","config","config","config","fileExists","chalk","ora","path","join","dirname","mkdir","writeFile","handleApiError","readFile","chalk","ora","createHash","prompts","readFile","access","join","path","readdir","chalk","createHash","ora","prompts","dirname","chalk","prompts","ora","writeFile","mkdir","access","readFile","join","dirname","platform","path","config","LANGUAGES","FRAMEWORKS","DATABASES","PACKAGE_MANAGERS","MONOREPO_TOOLS","JS_RUNTIMES","ORM_OPTIONS","PROJECT_TYPES","ARCHITECTURE_PATTERNS","DEV_OS_OPTIONS","REPO_HOSTS","CICD_OPTIONS","LICENSES","BRANCH_STRATEGIES","DEFAULT_BRANCHES","SELF_HOSTED_TARGETS","CLOUD_TARGETS","DEPLOYMENT_TARGETS","CONTAINER_REGISTRIES","VERSION_TAG_FORMATS","CHANGELOG_OPTIONS","VPN_OPTIONS","GITOPS_TOOLS","AI_BEHAVIOR_RULES","IMPORTANT_FILES","PLAN_MODE_FREQUENCY","AUTH_PROVIDERS","SECRETS_MANAGEMENT_OPTIONS","SECURITY_TOOLING_OPTIONS","AUTH_PATTERNS_OPTIONS","DATA_HANDLING_OPTIONS","COMPLIANCE_OPTIONS","ANALYTICS_OPTIONS","NAMING_CONVENTIONS","LOGGING_OPTIONS","BOUNDARY_OPTIONS","TEST_LEVELS","TEST_FRAMEWORKS","config","join","mkdir","writeFile","readFile","access","fs","STATIC_FILE_PATHS","chalk","LANGUAGES","FRAMEWORKS","DATABASES","PACKAGE_MANAGERS","JS_RUNTIMES","MONOREPO_TOOLS","ORM_OPTIONS","REPO_HOSTS","LICENSES","CICD_OPTIONS","CLOUD_TARGETS","SELF_HOSTED_TARGETS","CONTAINER_REGISTRIES","COMMON_COMMANDS","NAMING_CONVENTIONS","ERROR_PATTERNS","LOGGING_OPTIONS","AI_BEHAVIOR_RULES","SECRETS_MANAGEMENT_OPTIONS","SECURITY_TOOLING_OPTIONS","AUTH_PATTERNS_OPTIONS","DATA_HANDLING_OPTIONS","IMPORTANT_FILES","BOUNDARY_OPTIONS","TEST_FRAMEWORKS","TEST_LEVELS","PROJECT_TYPES","DEV_OS_OPTIONS","platform","ARCHITECTURE_PATTERNS","ora","spinner","detected","prompts","dirname","detectedCmds","chalk","ora","ora","chalk","handleApiError","truncate","formatTags","chalk","readFile","access","join","existsSync","chalk","existsSync","join","readFile","parse","config","fileExists","access","truncate","chalk","ora","readFile","readdir","join","existsSync","yaml","CONFIG_FILES","CONFIG_DIRS","config","chalk","ora","readFile","join","existsSync","i","j","chalk","fileExists","join","existsSync","ora","readFile","path","chalk","ora","prompts","join","existsSync","getSourceFromVisibility","chalk","existsSync","join","prompts","spinner","ora","fileExists","chalk","ora","chalk","ora","chalk","readFile","writeFile","access","join","ora","platform","config","mkdir","chalk","readFile","writeFile","access","join","basename","ora","prompts","chalk","prompts","ora","readFile","access","readdir","join","dirname","basename","readdir","join","readFile","dirname","parseMarkdownSections","basename","chalk","path","access","ora","prompts","writeFile","mkdir","chalk","ora","chalk","ora","handleError","chalk","chalk","CLI_VERSION","chalk"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/login.ts","../src/config.ts","../src/api.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/list.ts","../src/commands/pull.ts","../src/utils/blueprint-tracker.ts","../src/commands/push.ts","../src/utils/detect.ts","../src/commands/wizard.ts","../src/utils/generator.ts","../../packages/shared/dist/wizard/languages.js","../../packages/shared/dist/wizard/frameworks.js","../../packages/shared/dist/wizard/databases.js","../../packages/shared/dist/wizard/tech-stack.js","../../packages/shared/dist/wizard/project-types.js","../../packages/shared/dist/wizard/repository.js","../../packages/shared/dist/wizard/ai-behavior.js","../../packages/shared/dist/wizard/security.js","../../packages/shared/dist/wizard/code-style.js","../../packages/shared/dist/wizard/testing.js","../../packages/shared/dist/wizard/commands.js","../src/utils/wizard-options.ts","../src/commands/search.ts","../src/commands/status.ts","../src/commands/check.ts","../src/commands/diff.ts","../src/commands/link.ts","../src/commands/analyze.ts","../src/commands/convert.ts","../src/commands/merge.ts","../src/commands/import.ts","../src/commands/hierarchies.ts","../src/commands/config.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { loginCommand } from \"./commands/login.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { whoamiCommand } from \"./commands/whoami.js\";\nimport { listCommand } from \"./commands/list.js\";\nimport { pullCommand } from \"./commands/pull.js\";\nimport { pushCommand } from \"./commands/push.js\";\nimport { wizardCommand } from \"./commands/wizard.js\";\nimport { searchCommand } from \"./commands/search.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { checkCommand } from \"./commands/check.js\";\nimport { diffCommand } from \"./commands/diff.js\";\nimport { linkCommand, unlinkCommand } from \"./commands/link.js\";\nimport { analyzeCommand } from \"./commands/analyze.js\";\nimport { convertCommand } from \"./commands/convert.js\";\nimport { mergeCommand } from \"./commands/merge.js\";\nimport { importCommand } from \"./commands/import.js\";\nimport { hierarchiesCommand } from \"./commands/hierarchies.js\";\nimport { configCommand } from \"./commands/config.js\";\n\n// CLI version injected at build time via tsup.config.ts define option\nconst CLI_VERSION = process.env.CLI_VERSION || \"0.0.0\";\n\nconst program = new Command();\n\nprogram\n .name(\"lynxprompt\")\n .description(\"CLI for LynxPrompt - Generate AI IDE configuration files\")\n .version(CLI_VERSION);\n\n// ============================================\n// Primary Commands (most users need these)\n// ============================================\n\n// Wizard - the main command for most users\nprogram\n .command(\"wizard\")\n .description(\"Generate AI IDE configuration (recommended for most users)\")\n .option(\"-n, --name <name>\", \"Project name\")\n .option(\"-d, --description <description>\", \"Project description\")\n .option(\"-s, --stack <stack>\", \"Tech stack (comma-separated)\")\n .option(\"-f, --format <format>\", \"Output format: agents, cursor, or comma-separated for multiple\")\n .option(\"-p, --platforms <platforms>\", \"Alias for --format (deprecated)\")\n .option(\"--persona <persona>\", \"AI persona (fullstack, backend, frontend, devops, data, security)\")\n .option(\"--boundaries <level>\", \"Boundary preset (conservative, standard, permissive)\")\n .option(\"-y, --yes\", \"Skip prompts, use defaults (generates AGENTS.md)\")\n // New arguments\n .option(\"-o, --output <dir>\", \"Output directory (default: current directory)\")\n .option(\"--repo-url <url>\", \"Analyze remote repository URL (GitHub/GitLab supported)\")\n .option(\"--blueprint\", \"Generate with [[VARIABLE|default]] placeholders for templates\")\n .option(\"--license <type>\", \"License type (mit, apache-2.0, gpl-3.0, etc.)\")\n .option(\"--ci-cd <platform>\", \"CI/CD platform (github_actions, gitlab_ci, jenkins, etc.)\")\n .option(\"--project-type <type>\", \"Project type (work, leisure, opensource, learning)\")\n .option(\"--detect-only\", \"Only detect project info, don't generate files\")\n .option(\"--load-draft <name>\", \"Load a saved wizard draft\")\n .option(\"--save-draft <name>\", \"Save wizard state as a draft (auto-saves at end)\")\n .option(\"--vars <values>\", \"Fill variables: VAR1=value1,VAR2=value2\")\n .action(wizardCommand);\n\n// Check - validation for CI/CD\nprogram\n .command(\"check\")\n .description(\"Validate AI configuration files (for CI/CD)\")\n .option(\"--ci\", \"CI mode - exit codes only (0=pass, 1=fail)\")\n .action(checkCommand);\n\n// Analyze - standalone project analyzer\nprogram\n .command(\"analyze\")\n .description(\"Analyze project configuration without generating files\")\n .option(\"-r, --remote <url>\", \"Analyze a remote repository (GitHub/GitLab)\")\n .option(\"-j, --json\", \"Output as JSON (for scripting)\")\n .action(analyzeCommand);\n\n// Convert - format conversion\nprogram\n .command(\"convert [source] <target>\")\n .description(\"Convert AI config between formats (e.g., AGENTS.md → cursor)\")\n .option(\"-o, --output <file>\", \"Output filename\")\n .option(\"-f, --force\", \"Overwrite existing output file\")\n .action(convertCommand);\n\n// Merge - combine multiple configs\nprogram\n .command(\"merge <files...>\")\n .description(\"Merge multiple AI configuration files into one\")\n .option(\"-o, --output <file>\", \"Output filename (default: merged.md)\")\n .option(\"-s, --strategy <type>\", \"Merge strategy: concat, sections, smart (default: smart)\")\n .option(\"-f, --force\", \"Overwrite existing output file\")\n .option(\"-i, --interactive\", \"Review and select sections to include\")\n .action(mergeCommand);\n\n// Import - scan for existing AGENTS.md files (monorepo support)\nprogram\n .command(\"import [path]\")\n .description(\"Scan and import AGENTS.md files from a repository\")\n .option(\"--dry-run\", \"Preview what would be imported without changes\")\n .option(\"--no-recursive\", \"Don't scan subdirectories\")\n .option(\"--depth <n>\", \"Max directory depth to scan\", \"10\")\n .option(\"--pattern <file>\", \"Custom config filename to look for\")\n .option(\"--link\", \"Link imported files to cloud (requires login)\")\n .option(\"-v, --verbose\", \"Show detailed section information\")\n .option(\"-j, --json\", \"Output as JSON\")\n .action(importCommand);\n\n// Status - show what's configured\nprogram\n .command(\"status\")\n .description(\"Show current AI configuration and tracked blueprints\")\n .action(statusCommand);\n\n// ============================================\n// Blueprint Commands (marketplace integration)\n// ============================================\n\nprogram\n .command(\"pull <id>\")\n .description(\"Download a blueprint (bp_xxx) or entire hierarchy (ha_xxx)\")\n .option(\"-o, --output <path>\", \"Output directory\", \".\")\n .option(\"-y, --yes\", \"Overwrite existing files without prompting\")\n .option(\"--preview\", \"Preview content without downloading\")\n .option(\"--no-track\", \"Don't track the blueprint for future syncs\")\n .action(pullCommand);\n\nprogram\n .command(\"search <query>\")\n .description(\"Search public blueprints in the marketplace\")\n .option(\"-l, --limit <number>\", \"Number of results\", \"20\")\n .action(searchCommand);\n\nprogram\n .command(\"list\")\n .description(\"List your blueprints\")\n .option(\"-l, --limit <number>\", \"Number of results\", \"20\")\n .option(\"-v, --visibility <visibility>\", \"Filter: PRIVATE, TEAM, PUBLIC, or all\")\n .action(listCommand);\n\nprogram\n .command(\"push [file]\")\n .description(\"Push local file to LynxPrompt cloud as a blueprint\")\n .option(\"-n, --name <name>\", \"Blueprint name\")\n .option(\"-d, --description <desc>\", \"Blueprint description\")\n .option(\"-v, --visibility <vis>\", \"Visibility: PRIVATE, TEAM, or PUBLIC\", \"PRIVATE\")\n .option(\"-t, --tags <tags>\", \"Tags (comma-separated)\")\n .option(\"-y, --yes\", \"Skip prompts\")\n .option(\"-f, --force\", \"Force push (overwrite remote changes)\")\n .action(pushCommand);\n\nprogram\n .command(\"hierarchies\")\n .description(\"List your blueprint hierarchies (monorepo groupings)\")\n .option(\"-l, --limit <number>\", \"Number of results\", \"50\")\n .option(\"-j, --json\", \"Output as JSON\")\n .action(hierarchiesCommand);\n\n// Link/Unlink - connect local files to cloud blueprints\nprogram\n .command(\"link [file] [blueprint-id]\")\n .description(\"Link a local file to a cloud blueprint for tracking\")\n .option(\"--list\", \"List all tracked blueprints\")\n .action(linkCommand);\n\nprogram\n .command(\"unlink [file]\")\n .description(\"Disconnect a local file from its cloud blueprint\")\n .action(unlinkCommand);\n\n// Diff - compare local with remote\nprogram\n .command(\"diff [file-or-id]\")\n .description(\"Compare tracked files with their cloud blueprints\")\n .option(\"--local\", \"Compare .lynxprompt/rules/ with exported files\")\n .action(diffCommand);\n\n// ============================================\n// Auth Commands\n// ============================================\n\nprogram\n .command(\"login\")\n .description(\"Authenticate with LynxPrompt (opens browser)\")\n .action(loginCommand);\n\nprogram\n .command(\"logout\")\n .description(\"Log out and remove stored credentials\")\n .action(logoutCommand);\n\nprogram\n .command(\"whoami\")\n .description(\"Show current authenticated user\")\n .action(whoamiCommand);\n\nprogram\n .command(\"config [action] [value]\")\n .description(\"View or change CLI settings (set-url, reset-url, path)\")\n .action(configCommand);\n\n// ============================================\n// Help formatting\n// ============================================\n\nprogram.addHelpText(\n \"beforeAll\",\n `\n${chalk.cyan(\"🐱 LynxPrompt CLI\")} ${chalk.gray(\"(also available as: lynxp)\")}\n${chalk.gray(\"Generate AI IDE configuration files from your terminal\")}\n`\n);\n\nprogram.addHelpText(\n \"after\",\n `\n${chalk.cyan(\"Quick Start:\")}\n ${chalk.white(\"$ lynxp wizard\")} ${chalk.gray(\"Generate config interactively\")}\n ${chalk.white(\"$ lynxp wizard -y\")} ${chalk.gray(\"Generate AGENTS.md with defaults\")}\n ${chalk.white(\"$ lynxp wizard -f cursor\")} ${chalk.gray(\"Generate .cursor/rules/\")}\n ${chalk.white(\"$ lynxp wizard --blueprint\")} ${chalk.gray(\"Generate with [[VAR|default]] placeholders\")}\n\n${chalk.cyan(\"Analysis & Tools:\")}\n ${chalk.white(\"$ lynxp analyze\")} ${chalk.gray(\"Analyze project tech stack\")}\n ${chalk.white(\"$ lynxp analyze -r <url>\")} ${chalk.gray(\"Analyze remote repository\")}\n ${chalk.white(\"$ lynxp import\")} ${chalk.gray(\"Scan repo for AGENTS.md files\")}\n ${chalk.white(\"$ lynxp import --dry-run\")} ${chalk.gray(\"Preview monorepo hierarchy\")}\n ${chalk.white(\"$ lynxp convert AGENTS.md cursor\")} ${chalk.gray(\"Convert to Cursor format\")}\n ${chalk.white(\"$ lynxp merge a.md b.md -o out.md\")} ${chalk.gray(\"Merge multiple configs\")}\n\n${chalk.cyan(\"Marketplace:\")}\n ${chalk.white(\"$ lynxp search nextjs\")} ${chalk.gray(\"Search blueprints\")}\n ${chalk.white(\"$ lynxp pull bp_abc123\")} ${chalk.gray(\"Download and track a blueprint\")}\n ${chalk.white(\"$ lynxp pull ha_xyz789\")} ${chalk.gray(\"Download entire hierarchy\")}\n ${chalk.white(\"$ lynxp push\")} ${chalk.gray(\"Push local file to cloud\")}\n ${chalk.white(\"$ lynxp hierarchies\")} ${chalk.gray(\"List your hierarchies\")}\n ${chalk.white(\"$ lynxp link --list\")} ${chalk.gray(\"Show tracked blueprints\")}\n\n${chalk.cyan(\"Blueprint Tracking:\")}\n ${chalk.white(\"$ lynxp link AGENTS.md bp_xyz\")} ${chalk.gray(\"Link existing file to blueprint\")}\n ${chalk.white(\"$ lynxp unlink AGENTS.md\")} ${chalk.gray(\"Disconnect from cloud\")}\n ${chalk.white(\"$ lynxp diff bp_abc123\")} ${chalk.gray(\"Show changes vs cloud version\")}\n\n${chalk.cyan(\"CI/CD:\")}\n ${chalk.white(\"$ lynxp check --ci\")} ${chalk.gray(\"Validate config (exit code)\")}\n\n${chalk.cyan(\"Configuration:\")}\n ${chalk.white(\"$ lynxp config\")} ${chalk.gray(\"Show current settings\")}\n ${chalk.white(\"$ lynxp config set-url <url>\")} ${chalk.gray(\"Point CLI to a self-hosted instance\")}\n ${chalk.white(\"$ lynxp config reset-url\")} ${chalk.gray(\"Reset to https://api.lynxprompt.com\")}\n ${chalk.white(\"$ lynxp config path\")} ${chalk.gray(\"Show config file location\")}\n\n${chalk.gray(\"Docs: https://lynxprompt.com/docs/cli\")}\n`\n);\n\nprogram.parse();\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { setToken, setUser, isAuthenticated } from \"../config.js\";\n\nexport async function loginCommand(): Promise<void> {\n if (isAuthenticated()) {\n console.log(\n chalk.yellow(\n \"You are already logged in. Use 'lynxprompt logout' first to switch accounts.\"\n )\n );\n return;\n }\n\n const spinner = ora(\"Initializing authentication...\").start();\n\n try {\n // Initialize CLI session\n const session = await api.initCliSession();\n spinner.stop();\n\n console.log();\n console.log(chalk.cyan(\"🔐 Opening browser to authenticate...\"));\n console.log(chalk.gray(` ${session.auth_url}`));\n console.log();\n\n // Try to open the browser\n const openBrowser = await tryOpenBrowser(session.auth_url);\n if (!openBrowser) {\n console.log(\n chalk.yellow(\"Could not open browser automatically. Please open the URL above manually.\")\n );\n }\n\n // Poll for completion\n const pollSpinner = ora(\"Waiting for authentication...\").start();\n \n const maxWaitTime = 5 * 60 * 1000; // 5 minutes\n const pollInterval = 2000; // 2 seconds\n const startTime = Date.now();\n\n while (Date.now() - startTime < maxWaitTime) {\n await sleep(pollInterval);\n\n try {\n const result = await api.pollCliSession(session.session_id);\n\n if (result.status === \"completed\" && result.token && result.user) {\n pollSpinner.succeed(\"Authentication successful!\");\n \n // Store credentials\n setToken(result.token);\n setUser(result.user);\n\n // Show cool welcome message with plan info\n displayWelcome(result.user);\n return;\n }\n\n if (result.status === \"expired\") {\n pollSpinner.fail(\"Authentication session expired. Please try again.\");\n return;\n }\n\n // status === \"pending\", continue polling\n } catch (error) {\n // Ignore polling errors, keep trying\n }\n }\n\n pollSpinner.fail(\"Authentication timed out. Please try again.\");\n } catch (error) {\n spinner.fail(\"Failed to initialize authentication\");\n \n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n if (error.statusCode === 503) {\n console.error(chalk.gray(\"The server may be temporarily unavailable. Please try again later.\"));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n console.error(chalk.gray(\"Make sure you have internet connectivity and try again.\"));\n }\n process.exit(1);\n }\n}\n\nasync function tryOpenBrowser(url: string): Promise<boolean> {\n try {\n // Dynamic import for open package\n const { default: open } = await import(\"open\");\n await open(url);\n return true;\n } catch {\n // If open package is not available or fails, try native commands\n const { exec } = await import(\"child_process\");\n const { promisify } = await import(\"util\");\n const execAsync = promisify(exec);\n\n const platform = process.platform;\n let command: string;\n\n if (platform === \"darwin\") {\n command = `open \"${url}\"`;\n } else if (platform === \"win32\") {\n command = `start \"\" \"${url}\"`;\n } else {\n command = `xdg-open \"${url}\"`;\n }\n\n try {\n await execAsync(command);\n return true;\n } catch {\n return false;\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\ninterface UserInfo {\n id: string;\n email: string;\n name: string | null;\n plan: string;\n}\n\nfunction displayWelcome(user: UserInfo): void {\n const name = user.name || user.email.split(\"@\")[0];\n \n const W = 46;\n const b = chalk.bold;\n const pad = (s: string, len: number) => s + \" \".repeat(Math.max(0, len - s.length));\n \n console.log();\n console.log(b(\"┌\" + \"─\".repeat(W) + \"┐\"));\n console.log(b(\"│\") + \" \".repeat(W) + b(\"│\"));\n console.log(b(\"│\") + pad(\" 🐱 Welcome to LynxPrompt CLI!\", W) + b(\"│\"));\n console.log(b(\"│\") + \" \".repeat(W) + b(\"│\"));\n console.log(b(\"│\") + pad(` User: ${name}`, W) + b(\"│\"));\n console.log(b(\"│\") + \" \".repeat(W) + b(\"│\"));\n console.log(b(\"└\" + \"─\".repeat(W) + \"┘\"));\n console.log();\n \n console.log(chalk.bold(\"📋 Your CLI Capabilities:\"));\n console.log();\n \n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp wizard\") + chalk.gray(\" - Interactive config wizard\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp list\") + chalk.gray(\" - List your blueprints\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp pull <id>\") + chalk.gray(\" - Download blueprints\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp push\") + chalk.gray(\" - Upload blueprints to marketplace\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp link\") + chalk.gray(\" - Link project to blueprint\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp diff\") + chalk.gray(\" - Compare local vs cloud\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp whoami\") + chalk.gray(\" - Show account info\"));\n console.log(chalk.green(\" ✓\") + \" \" + chalk.white(\"lynxp logout\") + chalk.gray(\" - Sign out of CLI\"));\n \n console.log();\n console.log(chalk.gray(\"Token stored securely. Run \") + chalk.cyan(\"lynxp --help\") + chalk.gray(\" to see all commands.\"));\n console.log();\n}\n\n\n\n\n","import Conf from \"conf\";\n\ninterface ConfigSchema {\n token?: string;\n apiUrl: string;\n user?: {\n id: string;\n email: string;\n name: string | null;\n plan: string;\n };\n}\n\nconst config = new Conf<ConfigSchema>({\n projectName: \"lynxprompt\",\n schema: {\n token: {\n type: \"string\",\n },\n apiUrl: {\n type: \"string\",\n default: \"https://api.lynxprompt.com\",\n },\n user: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n email: { type: \"string\" },\n name: { type: [\"string\", \"null\"] },\n plan: { type: \"string\" },\n },\n },\n },\n defaults: {\n apiUrl: \"https://api.lynxprompt.com\",\n },\n});\n\nexport function getToken(): string | undefined {\n // Environment variable takes precedence\n const envToken = process.env.LYNXPROMPT_TOKEN;\n if (envToken) {\n return envToken;\n }\n return config.get(\"token\");\n}\n\nexport function setToken(token: string): void {\n config.set(\"token\", token);\n}\n\nexport function clearToken(): void {\n config.delete(\"token\");\n config.delete(\"user\");\n}\n\nexport function getApiUrl(): string {\n // Allow override via environment variable\n const envUrl = process.env.LYNXPROMPT_API_URL;\n if (envUrl) {\n return envUrl;\n }\n return config.get(\"apiUrl\");\n}\n\nexport function setApiUrl(url: string): void {\n config.set(\"apiUrl\", url);\n}\n\nexport function getUser(): ConfigSchema[\"user\"] | undefined {\n return config.get(\"user\");\n}\n\nexport function setUser(user: ConfigSchema[\"user\"]): void {\n config.set(\"user\", user);\n}\n\nexport function isAuthenticated(): boolean {\n return !!getToken();\n}\n\nexport function getConfigPath(): string {\n return config.path;\n}\n\n","import { getToken, getApiUrl } from \"./config.js\";\n\nexport interface ApiError {\n error: string;\n message?: string;\n expired_at?: string;\n}\n\nexport interface Blueprint {\n id: string;\n name: string;\n description: string | null;\n type: string;\n tier: string;\n category: string;\n tags: string[];\n visibility: \"PRIVATE\" | \"TEAM\" | \"PUBLIC\";\n downloads: number;\n favorites: number;\n created_at: string;\n updated_at: string;\n content?: string;\n // Hierarchy fields for monorepo AGENTS.md support\n hierarchy_id?: string | null;\n parent_id?: string | null;\n repository_path?: string | null;\n content_checksum?: string | null;\n}\n\nexport interface Hierarchy {\n id: string;\n name: string;\n description: string | null;\n repository_root: string;\n blueprint_count?: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface HierarchyDetail extends Hierarchy {\n blueprints: Blueprint[];\n tree: BlueprintTreeNode[];\n total_blueprints: number;\n}\n\nexport interface BlueprintTreeNode extends Blueprint {\n children: BlueprintTreeNode[];\n}\n\nexport interface HierarchiesResponse {\n hierarchies: Hierarchy[];\n total: number;\n limit: number;\n offset: number;\n has_more: boolean;\n}\n\nexport interface BlueprintsResponse {\n blueprints: Blueprint[];\n total: number;\n limit: number;\n offset: number;\n has_more: boolean;\n}\n\nexport interface UserResponse {\n user: {\n id: string;\n email: string;\n name: string | null;\n display_name: string | null;\n persona: string | null;\n skill_level: string | null;\n plan: string;\n stats: {\n blueprints_count: number;\n };\n created_at: string;\n };\n}\n\nexport interface CliSessionResponse {\n session_id: string;\n auth_url: string;\n expires_at: string;\n}\n\nexport interface CliPollResponse {\n status: \"pending\" | \"completed\" | \"expired\";\n token?: string;\n user?: {\n id: string;\n email: string;\n name: string | null;\n plan: string;\n };\n}\n\nexport interface SearchResult {\n id: string;\n name: string;\n description: string;\n author: string;\n authorId?: string;\n downloads: number;\n likes: number;\n tags: string[];\n tier: string;\n category: string;\n isOfficial: boolean;\n aiAssisted: boolean;\n}\n\nexport interface SearchResponse {\n templates: SearchResult[];\n popularTags: string[];\n total: number;\n hasMore: boolean;\n}\n\nclass ApiClient {\n private getHeaders(): Record<string, string> {\n const token = getToken();\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n return headers;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const baseUrl = getApiUrl();\n const url = `${baseUrl}${endpoint}`;\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...this.getHeaders(),\n ...options.headers,\n },\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data as ApiError;\n throw new ApiRequestError(\n error.message || error.error || \"Request failed\",\n response.status,\n error\n );\n }\n\n return data as T;\n }\n\n // Auth endpoints\n async initCliSession(): Promise<CliSessionResponse> {\n return this.request<CliSessionResponse>(\"/api/cli-auth/init\", {\n method: \"POST\",\n });\n }\n\n async pollCliSession(sessionId: string): Promise<CliPollResponse> {\n return this.request<CliPollResponse>(\n `/api/cli-auth/poll?session=${sessionId}`\n );\n }\n\n // User endpoints\n async getUser(): Promise<UserResponse> {\n return this.request<UserResponse>(\"/api/v1/user\");\n }\n\n // Blueprint endpoints\n async listBlueprints(options: {\n limit?: number;\n offset?: number;\n visibility?: string;\n } = {}): Promise<BlueprintsResponse> {\n const params = new URLSearchParams();\n if (options.limit) params.set(\"limit\", options.limit.toString());\n if (options.offset) params.set(\"offset\", options.offset.toString());\n if (options.visibility) params.set(\"visibility\", options.visibility);\n\n const query = params.toString();\n return this.request<BlueprintsResponse>(\n `/api/v1/blueprints${query ? `?${query}` : \"\"}`\n );\n }\n\n async getBlueprint(id: string): Promise<{ blueprint: Blueprint }> {\n // IDs can be:\n // - bp_xxx (standard blueprint IDs)\n // - usr_xxx (legacy prefix, still supported)\n // - plain ID (needs bp_ prefix for v1 API)\n \n // Ensure bp_ prefix for v1 API (supports both bp_ and usr_ on server)\n let apiId = id;\n if (!id.startsWith(\"bp_\") && !id.startsWith(\"usr_\")) {\n apiId = `bp_${id}`;\n }\n return this.request<{ blueprint: Blueprint }>(`/api/v1/blueprints/${apiId}`);\n }\n\n async searchBlueprints(query: string, limit: number = 20): Promise<SearchResponse> {\n const params = new URLSearchParams({\n q: query,\n limit: limit.toString(),\n });\n return this.request<SearchResponse>(`/api/blueprints?${params}`);\n }\n\n async createBlueprint(data: {\n name: string;\n description: string;\n content: string;\n visibility: \"PRIVATE\" | \"TEAM\" | \"PUBLIC\";\n tags?: string[];\n type?: string; // Blueprint type (AGENTS_MD, CURSOR_COMMAND, CLAUDE_COMMAND, etc.)\n // Hierarchy fields for monorepo AGENTS.md support\n hierarchy_id?: string | null;\n parent_id?: string | null;\n repository_path?: string | null;\n }): Promise<{ blueprint: Blueprint }> {\n return this.request<{ blueprint: Blueprint }>(\"/api/v1/blueprints\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n\n async updateBlueprint(\n id: string,\n data: {\n name?: string;\n description?: string;\n content?: string;\n visibility?: \"PRIVATE\" | \"TEAM\" | \"PUBLIC\";\n tags?: string[];\n expected_checksum?: string; // For optimistic locking\n }\n ): Promise<{ blueprint: Blueprint }> {\n const apiId = id.startsWith(\"bp_\") ? id : `bp_${id}`;\n return this.request<{ blueprint: Blueprint }>(`/api/v1/blueprints/${apiId}`, {\n method: \"PUT\",\n body: JSON.stringify(data),\n });\n }\n\n // Hierarchy endpoints\n async listHierarchies(options: {\n limit?: number;\n offset?: number;\n } = {}): Promise<HierarchiesResponse> {\n const params = new URLSearchParams();\n if (options.limit) params.set(\"limit\", options.limit.toString());\n if (options.offset) params.set(\"offset\", options.offset.toString());\n\n const query = params.toString();\n return this.request<HierarchiesResponse>(\n `/api/v1/hierarchies${query ? `?${query}` : \"\"}`\n );\n }\n\n async getHierarchy(id: string): Promise<{ hierarchy: Hierarchy; blueprints: Blueprint[]; tree: BlueprintTreeNode[]; total_blueprints: number }> {\n // Ensure ha_ prefix for hierarchy IDs\n let apiId = id;\n if (!id.startsWith(\"ha_\")) {\n apiId = `ha_${id}`;\n }\n return this.request<{ hierarchy: Hierarchy; blueprints: Blueprint[]; tree: BlueprintTreeNode[]; total_blueprints: number }>(`/api/v1/hierarchies/${apiId}`);\n }\n\n async createHierarchy(data: {\n name: string;\n repository_root: string;\n description?: string;\n }): Promise<{ hierarchy: Hierarchy }> {\n return this.request<{ hierarchy: Hierarchy }>(\"/api/v1/hierarchies\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n\n async deleteHierarchy(id: string): Promise<{ success: boolean; message: string }> {\n const apiId = id.startsWith(\"ha_\") ? id : `ha_${id}`;\n return this.request<{ success: boolean; message: string }>(`/api/v1/hierarchies/${apiId}`, {\n method: \"DELETE\",\n });\n }\n\n // AI endpoints\n async aiEditBlueprint(data: {\n content?: string;\n instruction: string;\n mode: \"blueprint\" | \"wizard\";\n }): Promise<{ content: string; usage?: object }> {\n return this.request<{ content: string; usage?: object }>(\"/api/ai/edit-blueprint\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n\n // User preferences endpoints\n async saveWizardPreferences(data: {\n commands?: Record<string, string | string[]>;\n codeStyle?: {\n naming?: string;\n errorHandling?: string;\n loggingConventions?: string;\n loggingConventionsOther?: string;\n notes?: string;\n };\n boundaries?: {\n always?: string[];\n never?: string[];\n ask?: string[];\n };\n testing?: {\n levels?: string[];\n frameworks?: string[];\n coverage?: number;\n notes?: string;\n };\n }): Promise<{ saved: number }> {\n // Convert structured data to the array format expected by the API\n const preferences: Array<{ category: string; key: string; value: string; isDefault?: boolean }> = [];\n\n // Commands\n if (data.commands) {\n for (const [key, value] of Object.entries(data.commands)) {\n const strValue = Array.isArray(value) ? value.join(\", \") : value;\n if (strValue) {\n preferences.push({ category: \"commands\", key, value: strValue, isDefault: true });\n }\n }\n }\n\n // Code style\n if (data.codeStyle) {\n if (data.codeStyle.naming) {\n preferences.push({ category: \"code_style\", key: \"naming\", value: data.codeStyle.naming, isDefault: true });\n }\n if (data.codeStyle.errorHandling) {\n preferences.push({ category: \"code_style\", key: \"errorHandling\", value: data.codeStyle.errorHandling, isDefault: true });\n }\n if (data.codeStyle.loggingConventions) {\n preferences.push({ category: \"code_style\", key: \"loggingConventions\", value: data.codeStyle.loggingConventions, isDefault: true });\n }\n if (data.codeStyle.loggingConventionsOther) {\n preferences.push({ category: \"code_style\", key: \"loggingConventionsOther\", value: data.codeStyle.loggingConventionsOther, isDefault: true });\n }\n if (data.codeStyle.notes) {\n preferences.push({ category: \"code_style\", key: \"notes\", value: data.codeStyle.notes, isDefault: true });\n }\n }\n\n // Boundaries\n if (data.boundaries) {\n if (data.boundaries.always?.length) {\n preferences.push({ category: \"boundaries\", key: \"always\", value: JSON.stringify(data.boundaries.always), isDefault: true });\n }\n if (data.boundaries.never?.length) {\n preferences.push({ category: \"boundaries\", key: \"never\", value: JSON.stringify(data.boundaries.never), isDefault: true });\n }\n if (data.boundaries.ask?.length) {\n preferences.push({ category: \"boundaries\", key: \"ask\", value: JSON.stringify(data.boundaries.ask), isDefault: true });\n }\n }\n\n // Testing\n if (data.testing) {\n if (data.testing.levels?.length) {\n preferences.push({ category: \"testing\", key: \"levels\", value: JSON.stringify(data.testing.levels), isDefault: true });\n }\n if (data.testing.frameworks?.length) {\n preferences.push({ category: \"testing\", key: \"frameworks\", value: JSON.stringify(data.testing.frameworks), isDefault: true });\n }\n if (data.testing.coverage !== undefined) {\n preferences.push({ category: \"testing\", key: \"coverage\", value: String(data.testing.coverage), isDefault: true });\n }\n if (data.testing.notes) {\n preferences.push({ category: \"testing\", key: \"notes\", value: data.testing.notes, isDefault: true });\n }\n }\n\n if (preferences.length === 0) {\n return { saved: 0 };\n }\n\n return this.request<{ saved: number }>(\"/api/user/wizard-preferences\", {\n method: \"POST\",\n body: JSON.stringify(preferences),\n });\n }\n}\n\nexport class ApiRequestError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public response: ApiError\n ) {\n super(message);\n this.name = \"ApiRequestError\";\n }\n}\n\nexport const api = new ApiClient();\n\n\n","import chalk from \"chalk\";\nimport { clearToken, isAuthenticated, getUser } from \"../config.js\";\n\nexport async function logoutCommand(): Promise<void> {\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You are not currently logged in.\"));\n return;\n }\n\n const user = getUser();\n const email = user?.email || \"unknown\";\n\n clearToken();\n\n console.log(chalk.green(`✓ Logged out from ${chalk.bold(email)}`));\n console.log(chalk.gray(\" Removed stored credentials\"));\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { isAuthenticated, setUser } from \"../config.js\";\n\nexport async function whoamiCommand(): Promise<void> {\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"Not logged in. Run 'lynxprompt login' to authenticate.\"));\n process.exit(1);\n }\n\n const spinner = ora(\"Fetching user info...\").start();\n\n try {\n const { user } = await api.getUser();\n spinner.stop();\n\n // Update cached user info\n setUser({\n id: user.id,\n email: user.email,\n name: user.name,\n plan: user.plan,\n });\n\n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Account\"));\n console.log();\n console.log(` ${chalk.gray(\"Email:\")} ${chalk.bold(user.email)}`);\n if (user.name) {\n console.log(` ${chalk.gray(\"Name:\")} ${user.name}`);\n }\n if (user.display_name) {\n console.log(` ${chalk.gray(\"Display:\")} ${user.display_name}`);\n }\n console.log();\n console.log(` ${chalk.gray(\"Blueprints:\")} ${user.stats.blueprints_count}`);\n console.log(` ${chalk.gray(\"Member since:\")} ${new Date(user.created_at).toLocaleDateString()}`);\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to fetch user info\");\n\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.error(chalk.red(\"Your session has expired. Please run 'lynxprompt login' again.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.red(\"API access error.\"));\n } else {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n }\n}\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError, Blueprint } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\n\ninterface ListOptions {\n limit: string;\n visibility?: string;\n}\n\nexport async function listCommand(options: ListOptions): Promise<void> {\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"Not logged in. Run 'lynxprompt login' to authenticate.\"));\n process.exit(1);\n }\n\n const spinner = ora(\"Fetching your blueprints...\").start();\n\n try {\n const limit = parseInt(options.limit, 10) || 20;\n const { blueprints, total, has_more } = await api.listBlueprints({\n limit,\n visibility: options.visibility,\n });\n\n spinner.stop();\n\n if (blueprints.length === 0) {\n console.log();\n console.log(chalk.yellow(\"No blueprints found.\"));\n console.log(chalk.gray(\"Create your first blueprint at https://lynxprompt.com/blueprints/create\"));\n console.log(chalk.gray(\"Or run 'lynxprompt init' to generate one from the CLI!\"));\n return;\n }\n\n console.log();\n console.log(chalk.cyan(`🐱 Your Blueprints (${total} total)`));\n console.log();\n\n for (const bp of blueprints) {\n printBlueprint(bp);\n }\n\n if (has_more) {\n console.log(chalk.gray(`Showing ${blueprints.length} of ${total}. Use --limit to see more.`));\n }\n } catch (error) {\n spinner.fail(\"Failed to fetch blueprints\");\n handleApiError(error);\n }\n}\n\nfunction printBlueprint(bp: Blueprint): void {\n const visibilityIcon = {\n PRIVATE: \"🔒\",\n TEAM: \"👥\",\n PUBLIC: \"🌐\",\n }[bp.visibility] || \"📄\";\n\n const tierBadge = {\n SHORT: chalk.gray(\"[Short]\"),\n INTERMEDIATE: chalk.blue(\"[Intermediate]\"),\n LONG: chalk.cyan(\"[Long]\"),\n SUPERLONG: chalk.magenta(\"[Super Long]\"),\n }[bp.tier] || \"\";\n\n console.log(` ${visibilityIcon} ${chalk.bold(bp.name)} ${tierBadge}`);\n console.log(` ${chalk.cyan(bp.id)}`);\n if (bp.description) {\n console.log(` ${chalk.gray(truncate(bp.description, 60))}`);\n }\n console.log(` ${chalk.gray(`↓${bp.downloads}`)} ${chalk.gray(`♥${bp.favorites}`)} ${formatTags(bp.tags)}`);\n console.log();\n}\n\nfunction formatTags(tags: string[]): string {\n if (!tags || tags.length === 0) return \"\";\n return tags.slice(0, 3).map((t) => chalk.gray(`#${t}`)).join(\" \");\n}\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + \"...\";\n}\n\nfunction handleApiError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.error(chalk.red(\"Your session has expired. Please run 'lynxprompt login' again.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.red(\"API access error. Please check your account.\"));\n } else {\n console.error(chalk.red(`Error: ${error.message}`));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n\n\n\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\nimport { api, ApiRequestError, Blueprint } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\nimport { writeFile, mkdir, readFile } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { existsSync } from \"fs\";\nimport {\n trackBlueprint,\n findBlueprintByFile,\n type BlueprintSource,\n} from \"../utils/blueprint-tracker.js\";\n\ninterface PullOptions {\n output: string;\n yes?: boolean;\n preview?: boolean;\n track?: boolean; // Track the blueprint for future syncs (default: true)\n}\n\n// Mapping of blueprint types to filenames\nconst TYPE_TO_FILENAME: Record<string, string> = {\n AGENTS_MD: \"AGENTS.md\",\n CURSOR_RULES: \".cursor/rules/project.mdc\",\n COPILOT_INSTRUCTIONS: \".github/copilot-instructions.md\",\n WINDSURF_RULES: \".windsurfrules\",\n ZED_INSTRUCTIONS: \".zed/instructions.md\",\n CLAUDE_MD: \"CLAUDE.md\",\n GENERIC: \"ai-config.md\",\n};\n\n// Determine blueprint source from visibility\nfunction getSourceFromVisibility(visibility: Blueprint[\"visibility\"]): BlueprintSource {\n switch (visibility) {\n case \"PUBLIC\":\n return \"marketplace\";\n case \"TEAM\":\n return \"team\";\n case \"PRIVATE\":\n return \"private\";\n default:\n return \"marketplace\";\n }\n}\n\n/**\n * Check if an ID is a hierarchy ID\n */\nfunction isHierarchyId(id: string): boolean {\n return id.startsWith(\"ha_\");\n}\n\nexport async function pullCommand(\n id: string,\n options: PullOptions\n): Promise<void> {\n // Check authentication - require login for API access\n if (!isAuthenticated()) {\n console.log(\n chalk.yellow(\"Not logged in. Run 'lynxp login' to authenticate.\")\n );\n process.exit(1);\n }\n\n // Check if pulling a hierarchy\n if (isHierarchyId(id)) {\n await pullHierarchy(id, options);\n } else {\n await pullBlueprint(id, options);\n }\n}\n\n/**\n * Pull an entire hierarchy with all its blueprints\n */\nasync function pullHierarchy(\n id: string,\n options: PullOptions\n): Promise<void> {\n const cwd = process.cwd();\n const spinner = ora(`Fetching hierarchy ${chalk.cyan(id)}...`).start();\n\n try {\n const response = await api.getHierarchy(id);\n const { hierarchy, blueprints } = response;\n spinner.stop();\n\n console.log();\n console.log(chalk.cyan(`📁 Hierarchy: ${chalk.bold(hierarchy.name)}`));\n if (hierarchy.description) {\n console.log(chalk.gray(` ${hierarchy.description}`));\n }\n console.log(chalk.gray(` Repository: ${hierarchy.repository_root}`));\n console.log(chalk.gray(` Blueprints: ${blueprints.length}`));\n console.log();\n\n // Preview mode - show hierarchy structure without downloading\n if (options.preview) {\n console.log(chalk.yellow(\"📋 Hierarchy structure:\"));\n console.log();\n \n for (const bp of blueprints) {\n const indent = bp.parent_id ? \" ↳ \" : \" \";\n const path = bp.repository_path || TYPE_TO_FILENAME[bp.type] || \"unknown\";\n console.log(chalk.gray(`${indent}${path}`));\n console.log(chalk.gray(`${indent} └─ ${bp.name} (${bp.id})`));\n }\n \n console.log();\n console.log(chalk.gray(\"Run without --preview to download this hierarchy.\"));\n return;\n }\n\n // Confirm before downloading\n if (!options.yes && blueprints.length > 1) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: `Download ${blueprints.length} blueprints to ${options.output}?`,\n initial: true,\n });\n if (!proceed) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n\n console.log(chalk.cyan(\"📥 Downloading blueprints...\"));\n console.log();\n\n let downloaded = 0;\n let skipped = 0;\n\n for (const bp of blueprints) {\n // Determine output path - use repository_path if available\n const filename = bp.repository_path || TYPE_TO_FILENAME[bp.type] || \"ai-config.md\";\n const outputPath = join(options.output, filename);\n\n // Check if file exists\n if (existsSync(outputPath) && !options.yes) {\n const { overwrite } = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: `File exists: ${filename}. Overwrite?`,\n initial: false,\n });\n if (!overwrite) {\n console.log(chalk.gray(` ⏭ Skipped: ${filename}`));\n skipped++;\n continue;\n }\n }\n\n // Fetch full blueprint content\n const { blueprint } = await api.getBlueprint(bp.id);\n \n if (!blueprint.content) {\n console.log(chalk.yellow(` ⚠ No content: ${filename}`));\n skipped++;\n continue;\n }\n\n // Create directory if needed\n const dir = dirname(outputPath);\n if (dir !== \".\" && dir !== options.output) {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(outputPath, blueprint.content, \"utf-8\");\n\n // Track the blueprint with hierarchy info\n if (options.track !== false) {\n const source = getSourceFromVisibility(blueprint.visibility);\n await trackBlueprint(cwd, {\n id: blueprint.id,\n name: blueprint.name,\n file: filename,\n content: blueprint.content,\n source,\n hierarchyId: id,\n hierarchyName: hierarchy.name,\n repositoryPath: bp.repository_path || undefined,\n });\n }\n\n console.log(chalk.green(` ✓ ${filename}`));\n downloaded++;\n }\n\n console.log();\n console.log(chalk.green(`✅ Downloaded ${downloaded} blueprint(s)`));\n if (skipped > 0) {\n console.log(chalk.gray(` Skipped: ${skipped}`));\n }\n console.log();\n console.log(chalk.gray(\"Tips:\"));\n console.log(chalk.gray(` • Run 'lynxp status' to see tracked blueprints`));\n console.log(chalk.gray(` • Run 'lynxp sync' to push local changes`));\n console.log(chalk.gray(` • Run 'lynxp pull ${id}' again to refresh all files`));\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to pull hierarchy\");\n handleApiError(error);\n }\n}\n\n/**\n * Pull a single blueprint\n */\nasync function pullBlueprint(\n id: string,\n options: PullOptions\n): Promise<void> {\n const cwd = process.cwd();\n const spinner = ora(`Fetching blueprint ${chalk.cyan(id)}...`).start();\n\n try {\n const { blueprint } = await api.getBlueprint(id);\n spinner.stop();\n\n if (!blueprint.content) {\n console.error(chalk.red(\"✗ Blueprint has no content.\"));\n process.exit(1);\n }\n\n const source = getSourceFromVisibility(blueprint.visibility);\n const isMarketplace = source === \"marketplace\";\n\n console.log();\n console.log(chalk.cyan(`🐱 Blueprint: ${chalk.bold(blueprint.name)}`));\n if (blueprint.description) {\n console.log(chalk.gray(` ${blueprint.description}`));\n }\n console.log(chalk.gray(` Type: ${blueprint.type} • Tier: ${blueprint.tier} • Visibility: ${blueprint.visibility}`));\n \n // Show hierarchy info if present\n if (blueprint.hierarchy_id) {\n console.log(chalk.blue(` 📁 Part of hierarchy: ${blueprint.hierarchy_id}`));\n if (blueprint.repository_path) {\n console.log(chalk.gray(` Path in hierarchy: ${blueprint.repository_path}`));\n }\n }\n \n // Show source type info\n if (isMarketplace) {\n console.log(chalk.yellow(` 📦 Marketplace blueprint (read-only - changes won't sync back)`));\n } else if (source === \"team\") {\n console.log(chalk.blue(` 👥 Team blueprint (can sync changes)`));\n } else if (source === \"private\") {\n console.log(chalk.green(` 🔒 Private blueprint (can sync changes)`));\n }\n console.log();\n\n // Preview mode - show content without writing\n if (options.preview) {\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n \n // Show first 50 lines with syntax highlighting hints\n const lines = blueprint.content.split(\"\\n\");\n const previewLines = lines.slice(0, 50);\n \n for (const line of previewLines) {\n if (line.startsWith(\"#\")) {\n console.log(chalk.cyan(line));\n } else if (line.startsWith(\">\")) {\n console.log(chalk.gray(line));\n } else if (line.startsWith(\"- \") || line.startsWith(\"* \")) {\n console.log(chalk.white(line));\n } else if (line.startsWith(\"```\")) {\n console.log(chalk.yellow(line));\n } else {\n console.log(line);\n }\n }\n \n if (lines.length > 50) {\n console.log();\n console.log(chalk.gray(`... ${lines.length - 50} more lines`));\n }\n \n console.log();\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n console.log(chalk.gray(\"Run without --preview to download this blueprint.\"));\n return;\n }\n\n // Determine output filename - use repository_path if available for hierarchy blueprints\n const filename = blueprint.repository_path || TYPE_TO_FILENAME[blueprint.type] || \"ai-config.md\";\n const outputPath = join(options.output, filename);\n\n // Check if file exists and show diff preview\n let localContent: string | null = null;\n if (existsSync(outputPath)) {\n try {\n localContent = await readFile(outputPath, \"utf-8\");\n } catch {\n // Can't read local file\n }\n }\n\n // Check if this file is already tracked\n const existingTracked = await findBlueprintByFile(cwd, filename);\n if (existingTracked && existingTracked.id !== id) {\n console.log(chalk.yellow(`⚠ This file is already linked to a different blueprint: ${existingTracked.id}`));\n if (!options.yes) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Replace the link with the new blueprint?\",\n initial: false,\n });\n if (!proceed) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n }\n\n if (localContent && !options.yes) {\n // Show what will change\n const localLines = localContent.split(\"\\n\").length;\n const remoteLines = blueprint.content.split(\"\\n\").length;\n \n console.log(chalk.yellow(`⚠ File exists: ${outputPath}`));\n console.log(chalk.gray(` Local: ${localLines} lines`));\n console.log(chalk.gray(` Remote: ${remoteLines} lines`));\n console.log();\n\n const response = await prompts({\n type: \"select\",\n name: \"action\",\n message: \"What would you like to do?\",\n choices: [\n { title: \"Overwrite with remote version\", value: \"overwrite\" },\n { title: \"Preview remote content first\", value: \"preview\" },\n { title: \"Cancel\", value: \"cancel\" },\n ],\n });\n\n if (response.action === \"cancel\" || !response.action) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n if (response.action === \"preview\") {\n // Show preview\n console.log();\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n \n const lines = blueprint.content.split(\"\\n\").slice(0, 30);\n for (const line of lines) {\n if (line.startsWith(\"#\")) {\n console.log(chalk.cyan(line));\n } else {\n console.log(line);\n }\n }\n \n if (blueprint.content.split(\"\\n\").length > 30) {\n console.log(chalk.gray(`... ${blueprint.content.split(\"\\n\").length - 30} more lines`));\n }\n \n console.log();\n console.log(chalk.gray(\"─\".repeat(60)));\n console.log();\n\n const confirmResponse = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: \"Download and overwrite local file?\",\n initial: false,\n });\n\n if (!confirmResponse.confirm) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n }\n\n // Create directory if needed\n const dir = dirname(outputPath);\n if (dir !== \".\") {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(outputPath, blueprint.content, \"utf-8\");\n\n // Track the blueprint (default behavior unless --no-track)\n if (options.track !== false) {\n await trackBlueprint(cwd, {\n id: blueprint.id,\n name: blueprint.name,\n file: filename,\n content: blueprint.content,\n source,\n hierarchyId: blueprint.hierarchy_id || undefined,\n repositoryPath: blueprint.repository_path || undefined,\n });\n }\n\n console.log(chalk.green(`✅ Downloaded: ${chalk.bold(outputPath)}`));\n \n // Show tracking info\n if (options.track !== false) {\n console.log(chalk.gray(` Linked to: ${blueprint.id}`));\n if (blueprint.content_checksum) {\n console.log(chalk.gray(` Checksum: ${blueprint.content_checksum}`));\n }\n if (isMarketplace) {\n console.log(chalk.gray(` Updates: Run 'lynxp pull ${id}' to sync updates`));\n } else {\n console.log(chalk.gray(` Sync: Run 'lynxp push ${filename}' to push changes`));\n }\n }\n console.log();\n\n // Show helpful next steps\n const editorHint = getEditorHint(blueprint.type);\n if (editorHint) {\n console.log(chalk.gray(`💡 ${editorHint}`));\n console.log();\n }\n\n // Additional tips\n console.log(chalk.gray(\"Tips:\"));\n console.log(chalk.gray(` • Run 'lynxp status' to see tracked blueprints`));\n console.log(chalk.gray(` • Run 'lynxp diff ${id}' to see changes between local and remote`));\n if (isMarketplace) {\n console.log(chalk.gray(` • Run 'lynxp unlink ${filename}' to disconnect and make editable`));\n }\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to pull blueprint\");\n handleApiError(error);\n }\n}\n\nfunction getEditorHint(type: string): string | null {\n switch (type) {\n case \"CURSOR_RULES\":\n return \"This file will be automatically read by Cursor.\";\n case \"COPILOT_INSTRUCTIONS\":\n return \"This file will be read by GitHub Copilot in VS Code.\";\n case \"AGENTS_MD\":\n return \"This AGENTS.md file works with Claude Code, Cursor, and other AI agents.\";\n case \"WINDSURF_RULES\":\n return \"This file will be automatically read by Windsurf.\";\n case \"ZED_INSTRUCTIONS\":\n return \"This file will be read by Zed's AI assistant.\";\n case \"CLAUDE_MD\":\n return \"This CLAUDE.md file will be read by Claude Code.\";\n default:\n return null;\n }\n}\n\nfunction handleApiError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.error(\n chalk.red(\"✗ Your session has expired. Please run 'lynxp login' again.\")\n );\n } else if (error.statusCode === 403) {\n console.error(\n chalk.red(\"✗ You don't have access to this blueprint or hierarchy.\")\n );\n console.error(\n chalk.gray(\n \" This might be a private resource or you may not have access.\"\n )\n );\n } else if (error.statusCode === 404) {\n console.error(chalk.red(\"✗ Blueprint or hierarchy not found.\"));\n console.error(\n chalk.gray(\n \" Make sure you have the correct ID. Use 'lynxp list' or 'lynxp hierarchies' to see your resources.\"\n )\n );\n } else {\n console.error(chalk.red(`✗ Error: ${error.message}`));\n }\n } else {\n console.error(chalk.red(\"✗ An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n","/**\n * Blueprint Tracker\n * \n * Tracks which blueprints have been pulled from LynxPrompt cloud and their sync status.\n * Enables:\n * - Detecting if a local file came from a cloud blueprint\n * - Syncing updates from upstream blueprints\n * - Prompting users when they try to modify marketplace blueprints\n * - Managing team/private blueprint versions\n * \n * Storage: .lynxprompt/blueprints.yml\n */\n\nimport { readFile, writeFile, mkdir, access } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { createHash } from \"crypto\";\nimport * as yaml from \"yaml\";\n\n// Blueprint source types\nexport type BlueprintSource = \"marketplace\" | \"team\" | \"private\" | \"local\";\n\n// Tracked blueprint metadata\nexport interface TrackedBlueprint {\n id: string; // Blueprint ID (e.g., bp_abc123)\n source: BlueprintSource; // Where the blueprint came from\n file: string; // Local file path relative to project root\n name: string; // Blueprint name for display\n pulledAt: string; // ISO timestamp of last pull\n checksum: string; // SHA-256 of content when pulled (to detect local changes)\n version?: string; // Blueprint version (if available)\n editable: boolean; // Can the user push changes back?\n canPull: boolean; // Can pull updates from upstream?\n // Hierarchy info (optional)\n hierarchyId?: string; // Hierarchy ID (e.g., ha_xyz789)\n hierarchyName?: string; // Hierarchy name for display\n repositoryPath?: string; // Path within hierarchy (e.g., \"packages/core/AGENTS.md\")\n}\n\n// Blueprints file structure\nexport interface BlueprintsConfig {\n version: \"1\";\n blueprints: TrackedBlueprint[];\n}\n\nconst BLUEPRINTS_FILE = \".lynxprompt/blueprints.yml\";\n\n/**\n * Calculate SHA-256 checksum of content\n */\nexport function calculateChecksum(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").substring(0, 16);\n}\n\n/**\n * Load blueprints configuration\n */\nexport async function loadBlueprints(cwd: string): Promise<BlueprintsConfig> {\n const filePath = join(cwd, BLUEPRINTS_FILE);\n \n try {\n await access(filePath);\n const content = await readFile(filePath, \"utf-8\");\n const config = yaml.parse(content) as BlueprintsConfig;\n return config || { version: \"1\", blueprints: [] };\n } catch {\n return { version: \"1\", blueprints: [] };\n }\n}\n\n/**\n * Save blueprints configuration\n */\nexport async function saveBlueprints(cwd: string, config: BlueprintsConfig): Promise<void> {\n const filePath = join(cwd, BLUEPRINTS_FILE);\n const dir = dirname(filePath);\n \n await mkdir(dir, { recursive: true });\n \n const content = yaml.stringify(config, {\n lineWidth: 0,\n singleQuote: false,\n });\n \n await writeFile(filePath, content, \"utf-8\");\n}\n\n/**\n * Track a pulled blueprint\n */\nexport async function trackBlueprint(\n cwd: string,\n blueprint: {\n id: string;\n name: string;\n file: string;\n content: string;\n source: BlueprintSource;\n version?: string;\n hierarchyId?: string;\n hierarchyName?: string;\n repositoryPath?: string;\n }\n): Promise<void> {\n const config = await loadBlueprints(cwd);\n \n // Remove existing entry for same file if exists\n config.blueprints = config.blueprints.filter(b => b.file !== blueprint.file);\n \n // Determine editability based on source\n const editable = blueprint.source !== \"marketplace\";\n const canPull = true; // All tracked blueprints can pull updates\n \n config.blueprints.push({\n id: blueprint.id,\n source: blueprint.source,\n file: blueprint.file,\n name: blueprint.name,\n pulledAt: new Date().toISOString(),\n checksum: calculateChecksum(blueprint.content),\n version: blueprint.version,\n editable,\n canPull,\n hierarchyId: blueprint.hierarchyId,\n hierarchyName: blueprint.hierarchyName,\n repositoryPath: blueprint.repositoryPath,\n });\n \n await saveBlueprints(cwd, config);\n}\n\n/**\n * Find tracked blueprint by file path\n */\nexport async function findBlueprintByFile(cwd: string, file: string): Promise<TrackedBlueprint | null> {\n const config = await loadBlueprints(cwd);\n return config.blueprints.find(b => b.file === file) || null;\n}\n\n/**\n * Find tracked blueprint by ID\n */\nexport async function findBlueprintById(cwd: string, id: string): Promise<TrackedBlueprint | null> {\n const config = await loadBlueprints(cwd);\n return config.blueprints.find(b => b.id === id) || null;\n}\n\n/**\n * Check if local file has been modified since pull\n */\nexport async function hasLocalChanges(cwd: string, tracked: TrackedBlueprint): Promise<boolean> {\n try {\n const filePath = join(cwd, tracked.file);\n const content = await readFile(filePath, \"utf-8\");\n const currentChecksum = calculateChecksum(content);\n return currentChecksum !== tracked.checksum;\n } catch {\n return false;\n }\n}\n\n/**\n * Update checksum after syncing\n */\nexport async function updateChecksum(cwd: string, file: string, content: string): Promise<void> {\n const config = await loadBlueprints(cwd);\n const blueprint = config.blueprints.find(b => b.file === file);\n \n if (blueprint) {\n blueprint.checksum = calculateChecksum(content);\n blueprint.pulledAt = new Date().toISOString();\n await saveBlueprints(cwd, config);\n }\n}\n\n/**\n * Untrack a blueprint (disconnect from cloud)\n */\nexport async function untrackBlueprint(cwd: string, file: string): Promise<boolean> {\n const config = await loadBlueprints(cwd);\n const initialCount = config.blueprints.length;\n config.blueprints = config.blueprints.filter(b => b.file !== file);\n \n if (config.blueprints.length < initialCount) {\n await saveBlueprints(cwd, config);\n return true;\n }\n return false;\n}\n\n/**\n * Link an existing local file to a cloud blueprint\n */\nexport async function linkBlueprint(\n cwd: string,\n file: string,\n blueprintId: string,\n blueprintName: string,\n source: BlueprintSource\n): Promise<void> {\n try {\n const filePath = join(cwd, file);\n const content = await readFile(filePath, \"utf-8\");\n \n await trackBlueprint(cwd, {\n id: blueprintId,\n name: blueprintName,\n file,\n content,\n source,\n });\n } catch (error) {\n throw new Error(`Could not read file ${file} to link`);\n }\n}\n\n/**\n * Get all tracked blueprints\n */\nexport async function getAllTrackedBlueprints(cwd: string): Promise<TrackedBlueprint[]> {\n const config = await loadBlueprints(cwd);\n return config.blueprints;\n}\n\n/**\n * Check sync status of all tracked blueprints\n */\nexport async function checkSyncStatus(cwd: string): Promise<Array<{\n blueprint: TrackedBlueprint;\n localModified: boolean;\n fileExists: boolean;\n}>> {\n const config = await loadBlueprints(cwd);\n const results = [];\n \n for (const blueprint of config.blueprints) {\n const filePath = join(cwd, blueprint.file);\n let fileExists = false;\n let localModified = false;\n \n try {\n await access(filePath);\n fileExists = true;\n localModified = await hasLocalChanges(cwd, blueprint);\n } catch {\n fileExists = false;\n }\n \n results.push({ blueprint, localModified, fileExists });\n }\n \n return results;\n}\n\n\n\n\n\n\n\n\n\n\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { createHash } from \"crypto\";\nimport prompts from \"prompts\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\nimport {\n findBlueprintByFile,\n trackBlueprint,\n updateChecksum,\n loadBlueprints,\n} from \"../utils/blueprint-tracker.js\";\nimport { inferCommandTypeFromPath } from \"../utils/detect.js\";\n\ninterface PushOptions {\n name?: string;\n description?: string;\n visibility?: string;\n tags?: string;\n yes?: boolean;\n force?: boolean;\n}\n\ninterface HierarchyInfo {\n repositoryPath: string | null;\n hierarchyId: string | null;\n parentId: string | null;\n repositoryRoot: string; // Used to create/find hierarchy\n}\n\ninterface DiscoveredFile {\n path: string; // Relative path from cwd\n absolutePath: string;\n isRoot: boolean; // Is this the root AGENTS.md?\n}\n\n/**\n * Scan for AGENTS.md files in current directory and subdirectories\n */\nfunction scanForAgentFiles(cwd: string, maxDepth: number = 5): DiscoveredFile[] {\n const results: DiscoveredFile[] = [];\n \n function scan(dir: string, depth: number) {\n if (depth > maxDepth) return;\n \n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n \n // Skip common non-project directories\n if (entry.isDirectory()) {\n if ([\"node_modules\", \".git\", \"dist\", \"build\", \".next\", \"__pycache__\", \"venv\", \".venv\"].includes(entry.name)) {\n continue;\n }\n scan(fullPath, depth + 1);\n } else if (entry.name === \"AGENTS.md\") {\n const relativePath = path.relative(cwd, fullPath);\n results.push({\n path: relativePath,\n absolutePath: fullPath,\n isRoot: relativePath === \"AGENTS.md\",\n });\n }\n }\n } catch {\n // Ignore directories we can't read\n }\n }\n \n scan(cwd, 0);\n \n // Sort: root first, then alphabetically by path\n results.sort((a, b) => {\n if (a.isRoot && !b.isRoot) return -1;\n if (!a.isRoot && b.isRoot) return 1;\n return a.path.localeCompare(b.path);\n });\n \n return results;\n}\n\n/**\n * Detect hierarchy info for a file being pushed\n * Creates or gets a hierarchy for the repository\n */\nasync function detectHierarchyInfo(cwd: string, file: string): Promise<HierarchyInfo> {\n const repositoryRoot = createRepositoryRoot(cwd);\n const result: HierarchyInfo = {\n repositoryPath: null,\n hierarchyId: null,\n parentId: null,\n repositoryRoot,\n };\n\n try {\n const relativePath = path.relative(cwd, path.resolve(file));\n \n // Check if file is in a subdirectory (potential monorepo child)\n if (relativePath.includes(path.sep) && !relativePath.startsWith(\"..\")) {\n result.repositoryPath = relativePath;\n \n // Check if there's an AGENTS.md at the root that was already pushed\n const rootAgentsMd = path.join(cwd, \"AGENTS.md\");\n if (fs.existsSync(rootAgentsMd) && path.resolve(file) !== rootAgentsMd) {\n const blueprints = await loadBlueprints(cwd);\n const parentBlueprint = blueprints.blueprints.find(\n b => b.file === \"AGENTS.md\"\n );\n if (parentBlueprint) {\n result.parentId = parentBlueprint.id;\n }\n }\n } else if (relativePath === \"AGENTS.md\" || relativePath === path.basename(file)) {\n // Root-level file\n result.repositoryPath = relativePath;\n }\n } catch {\n // Silently fail - hierarchy detection is optional\n }\n\n return result;\n}\n\n/**\n * Ensure a hierarchy exists for the repository and return its ID\n */\nasync function ensureHierarchy(_cwd: string, repositoryRoot: string, name: string): Promise<string | null> {\n try {\n // Try to create or get existing hierarchy\n const response = await api.createHierarchy({\n name,\n repository_root: repositoryRoot,\n });\n return response.hierarchy.id;\n } catch (error) {\n // If it fails, hierarchy feature might not be available\n console.log(chalk.gray(\" Note: Hierarchy creation skipped\"));\n return null;\n }\n}\n\n/**\n * Create a stable repository root identifier from a path\n */\n/**\n * Search user's existing blueprints for one matching the same repository_path and hierarchy\n * Used to deduplicate: if .lynxprompt/ tracking is deleted, we can still find the existing blueprint\n */\nasync function findExistingBlueprintOnServer(\n repositoryPath: string | null,\n hierarchyId: string | null\n): Promise<{ id: string; name: string } | null> {\n if (!repositoryPath) return null;\n\n try {\n // Fetch user's blueprints (paginate to cover all)\n let offset = 0;\n const limit = 50;\n\n while (true) {\n const response = await api.listBlueprints({ limit, offset });\n\n for (const bp of response.blueprints) {\n // Match by repository_path, and if we have a hierarchy, also match hierarchy_id\n if (bp.repository_path === repositoryPath) {\n if (hierarchyId) {\n if (bp.hierarchy_id === hierarchyId) {\n return { id: bp.id, name: bp.name };\n }\n } else {\n // No hierarchy context — match on repository_path alone\n return { id: bp.id, name: bp.name };\n }\n }\n }\n\n if (!response.has_more) break;\n offset += limit;\n }\n } catch {\n // If listing fails, fall through to create new\n }\n\n return null;\n}\n\nfunction createRepositoryRoot(rootPath: string): string {\n // Try to get git remote URL first\n try {\n const gitConfigPath = path.join(rootPath, \".git\", \"config\");\n if (fs.existsSync(gitConfigPath)) {\n const gitConfig = fs.readFileSync(gitConfigPath, \"utf-8\");\n const urlMatch = gitConfig.match(/url = (.+)/);\n if (urlMatch) {\n // Hash the git URL for consistent identification\n return createHash(\"sha256\").update(urlMatch[1].trim()).digest(\"hex\").substring(0, 16);\n }\n }\n } catch {\n // Fall through to path-based hashing\n }\n \n // Fall back to hashing the absolute path\n return createHash(\"sha256\").update(path.resolve(rootPath)).digest(\"hex\").substring(0, 16);\n}\n\nexport async function pushCommand(\n fileArg: string | undefined,\n options: PushOptions\n): Promise<void> {\n const cwd = process.cwd();\n\n // Check authentication\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You need to be logged in to push blueprints.\"));\n console.log(chalk.gray(\"Run 'lynxp login' to authenticate.\"));\n process.exit(1);\n }\n\n // Find the file to push\n const file = fileArg || findDefaultFile();\n if (!file) {\n console.log(chalk.red(\"No AI configuration file found.\"));\n console.log(\n chalk.gray(\"Specify a file or run in a directory with AGENTS.md, CLAUDE.md, etc.\")\n );\n process.exit(1);\n }\n\n if (!fs.existsSync(file)) {\n console.log(chalk.red(`File not found: ${file}`));\n process.exit(1);\n }\n\n const content = fs.readFileSync(file, \"utf-8\");\n const filename = path.basename(file);\n\n // Check if file is already linked to a blueprint\n const linked = await findBlueprintByFile(cwd, file);\n\n if (linked) {\n // Update existing blueprint\n await updateBlueprint(cwd, file, linked.id, content, options, linked.checksum);\n } else {\n // Create new blueprint or link to existing\n await createOrLinkBlueprint(cwd, file, filename, content, options);\n }\n}\n\nasync function updateBlueprint(\n cwd: string,\n file: string,\n blueprintId: string,\n content: string,\n options: PushOptions,\n expectedChecksum?: string\n): Promise<void> {\n console.log(chalk.cyan(`\\n📤 Updating blueprint ${chalk.bold(blueprintId)}...`));\n console.log(chalk.gray(` File: ${file}`));\n\n const spinner = ora(\"Pushing changes...\").start();\n\n try {\n const updateData: { content: string; expected_checksum?: string } = { content };\n \n // Include expected checksum for optimistic locking (unless force)\n if (expectedChecksum && !options.force) {\n updateData.expected_checksum = expectedChecksum;\n }\n\n const result = await api.updateBlueprint(blueprintId, updateData);\n spinner.succeed(\"Blueprint updated!\");\n\n // Update local tracking with new checksum\n await updateChecksum(cwd, file, content);\n\n console.log();\n console.log(chalk.green(`✅ Successfully updated ${chalk.bold(result.blueprint.name)}`));\n console.log(chalk.gray(` ID: ${blueprintId}`));\n if (result.blueprint.content_checksum) {\n console.log(chalk.gray(` Checksum: ${result.blueprint.content_checksum}`));\n }\n console.log(chalk.gray(` View: https://lynxprompt.com/templates/${blueprintId.replace(\"bp_\", \"\")}`));\n } catch (error) {\n spinner.fail(\"Failed to update blueprint\");\n \n // Handle optimistic locking conflict\n if (error instanceof ApiRequestError && error.statusCode === 409) {\n console.log();\n console.log(chalk.yellow(\"⚠ Conflict: The blueprint has been modified since you last pulled it.\"));\n console.log(chalk.gray(\" Someone else may have pushed changes.\"));\n console.log();\n console.log(chalk.gray(\"Options:\"));\n console.log(chalk.gray(\" 1. Run 'lynxp pull \" + blueprintId + \"' to get the latest version\"));\n console.log(chalk.gray(\" 2. Run 'lynxp push --force' to overwrite remote changes\"));\n process.exit(1);\n }\n \n handleError(error);\n }\n}\n\nasync function createOrLinkBlueprint(\n cwd: string,\n file: string,\n filename: string,\n content: string,\n options: PushOptions\n): Promise<void> {\n // Check if pushing AGENTS.md and scan for more AGENTS.md files\n const isAgentsMd = filename === \"AGENTS.md\";\n \n if (isAgentsMd) {\n const discoveredFiles = scanForAgentFiles(cwd);\n \n // If we found multiple AGENTS.md files, offer to create hierarchy\n if (discoveredFiles.length > 1) {\n console.log();\n console.log(chalk.cyan(`📁 Found ${discoveredFiles.length} AGENTS.md files:`));\n console.log();\n for (const f of discoveredFiles) {\n const icon = f.isRoot ? \"📄\" : \" └─\";\n console.log(chalk.gray(` ${icon} ${f.path}`));\n }\n console.log();\n \n let shouldCreateHierarchy = options.yes; // Auto-create if -y flag\n \n if (!options.yes) {\n const { createHierarchy } = await prompts({\n type: \"confirm\",\n name: \"createHierarchy\",\n message: `Create a hierarchy with all ${discoveredFiles.length} AGENTS.md files?`,\n initial: true,\n });\n shouldCreateHierarchy = createHierarchy;\n } else {\n console.log(chalk.cyan(`Auto-creating hierarchy with ${discoveredFiles.length} files...`));\n }\n \n if (shouldCreateHierarchy) {\n await pushHierarchy(cwd, discoveredFiles, options);\n return;\n }\n \n console.log(chalk.gray(\"Proceeding with single file push...\"));\n }\n }\n\n // Infer the blueprint type from the file path\n const inferredType = inferBlueprintType(file);\n const COMMAND_TYPES = [\n \"CURSOR_COMMAND\", \"CLAUDE_COMMAND\", \"WINDSURF_WORKFLOW\", \n \"COPILOT_PROMPT\", \"CONTINUE_PROMPT\", \"OPENCODE_COMMAND\"\n ];\n const isCommandFile = COMMAND_TYPES.includes(inferredType);\n \n // Get friendly name for command type\n const commandNames: Record<string, string> = {\n \"CURSOR_COMMAND\": \"Cursor\",\n \"CLAUDE_COMMAND\": \"Claude Code\",\n \"WINDSURF_WORKFLOW\": \"Windsurf\",\n \"COPILOT_PROMPT\": \"Copilot\",\n \"CONTINUE_PROMPT\": \"Continue\",\n \"OPENCODE_COMMAND\": \"OpenCode\",\n };\n \n console.log(chalk.cyan(\"\\n📤 Push new blueprint\"));\n console.log(chalk.gray(` File: ${file}`));\n if (isCommandFile) {\n console.log(chalk.magenta(` Type: ${commandNames[inferredType] || \"Command\"} Command`));\n } else {\n console.log(chalk.gray(` Type: ${inferredType.replace(/_/g, \" \")}`));\n }\n\n // Ask for details if not provided\n let name = options.name;\n let description = options.description;\n let visibility = options.visibility || \"PRIVATE\";\n let tags = options.tags ? options.tags.split(\",\").map((t) => t.trim()) : [];\n\n if (!options.yes) {\n const responses = await prompts([\n {\n type: name ? null : \"text\",\n name: \"name\",\n message: \"Blueprint name:\",\n initial: filename.replace(/\\.(md|mdc|json|yml|yaml)$/, \"\"),\n validate: (v) => v.length > 0 || \"Name is required\",\n },\n {\n type: description ? null : \"text\",\n name: \"description\",\n message: \"Description:\",\n initial: \"\",\n },\n {\n type: \"select\",\n name: \"visibility\",\n message: \"Visibility:\",\n choices: [\n { title: \"Private (only you)\", value: \"PRIVATE\" },\n { title: \"Team (your team members)\", value: \"TEAM\" },\n { title: \"Public (visible to everyone)\", value: \"PUBLIC\" },\n ],\n initial: 0,\n },\n {\n type: \"text\",\n name: \"tags\",\n message: \"Tags (comma-separated):\",\n initial: \"\",\n },\n ]);\n\n if (!responses.name && !name) {\n console.log(chalk.yellow(\"Push cancelled.\"));\n return;\n }\n\n name = name || responses.name;\n description = description || responses.description || \"\";\n visibility = responses.visibility || visibility;\n tags = responses.tags ? responses.tags.split(\",\").map((t: string) => t.trim()).filter(Boolean) : tags;\n }\n\n if (!name) {\n name = filename.replace(/\\.(md|mdc|json|yml|yaml)$/, \"\");\n }\n\n // Detect hierarchy info for monorepo support\n const hierarchyInfo = await detectHierarchyInfo(cwd, file);\n \n // If we have hierarchy info, ensure a hierarchy exists\n let hierarchyId: string | null = null;\n if (hierarchyInfo.repositoryPath) {\n hierarchyId = await ensureHierarchy(cwd, hierarchyInfo.repositoryRoot, path.basename(cwd));\n }\n \n // Dedup check: look for an existing blueprint on the server with the same repository_path\n const existingBlueprint = await findExistingBlueprintOnServer(\n hierarchyInfo.repositoryPath,\n hierarchyId\n );\n\n if (existingBlueprint) {\n console.log(chalk.cyan(`\\nℹ Linked to existing blueprint \"${existingBlueprint.name}\" (${existingBlueprint.id}).`));\n console.log(chalk.gray(\" Pushing as an update.\"));\n\n // Re-link locally and update the existing blueprint\n await trackBlueprint(cwd, {\n id: existingBlueprint.id,\n name: existingBlueprint.name,\n file,\n content,\n source: \"private\",\n hierarchyId: hierarchyId || undefined,\n repositoryPath: hierarchyInfo.repositoryPath || undefined,\n });\n\n await updateBlueprint(cwd, file, existingBlueprint.id, content, options);\n return;\n }\n\n const spinner = ora(\"Creating blueprint...\").start();\n\n try {\n const result = await api.createBlueprint({\n name,\n description: description || \"\",\n content,\n visibility: visibility as \"PRIVATE\" | \"TEAM\" | \"PUBLIC\",\n tags,\n type: inferredType, // Include the inferred type (AGENTS_MD, CURSOR_COMMAND, etc.)\n // Include hierarchy info if detected\n hierarchy_id: hierarchyId,\n parent_id: hierarchyInfo.parentId,\n repository_path: hierarchyInfo.repositoryPath,\n });\n\n spinner.succeed(\"Blueprint created!\");\n\n // Track the blueprint locally\n await trackBlueprint(cwd, {\n id: result.blueprint.id,\n name: result.blueprint.name,\n file,\n content,\n source: \"private\",\n hierarchyId: hierarchyId || undefined,\n repositoryPath: hierarchyInfo.repositoryPath || undefined,\n });\n\n console.log();\n const typeDesc = isCommandFile ? `${commandNames[inferredType]} Command` : \"Blueprint\";\n console.log(chalk.green(`✅ Created ${typeDesc} ${chalk.bold(result.blueprint.name)}`));\n console.log(chalk.gray(` ID: ${result.blueprint.id}`));\n console.log(chalk.gray(` Type: ${inferredType}`));\n console.log(chalk.gray(` Visibility: ${visibility}`));\n if (hierarchyInfo.repositoryPath) {\n console.log(chalk.gray(` Path: ${hierarchyInfo.repositoryPath}`));\n }\n if (result.blueprint.hierarchy_id) {\n console.log(chalk.gray(` Hierarchy: ${result.blueprint.hierarchy_id}`));\n }\n if (hierarchyInfo.parentId) {\n console.log(chalk.cyan(` ↳ Linked to parent blueprint: ${hierarchyInfo.parentId}`));\n }\n if (visibility === \"PUBLIC\") {\n console.log(chalk.gray(` View: https://lynxprompt.com/templates/${result.blueprint.id.replace(\"bp_\", \"\")}`));\n }\n console.log();\n console.log(chalk.cyan(\"The file is now linked. Future 'lynxp push' will update this blueprint.\"));\n } catch (error) {\n spinner.fail(\"Failed to create blueprint\");\n handleError(error);\n }\n}\n\n/**\n * Push multiple AGENTS.md files as a hierarchy\n */\nasync function pushHierarchy(\n cwd: string,\n files: DiscoveredFile[],\n options: PushOptions\n): Promise<void> {\n // Get hierarchy name\n let hierarchyName = options.name || path.basename(cwd);\n let visibility = options.visibility || \"PRIVATE\";\n \n if (!options.yes) {\n const responses = await prompts([\n {\n type: \"text\",\n name: \"name\",\n message: \"Hierarchy name:\",\n initial: hierarchyName,\n validate: (v) => v.length > 0 || \"Name is required\",\n },\n {\n type: \"select\",\n name: \"visibility\",\n message: \"Visibility for all blueprints:\",\n choices: [\n { title: \"Private (only you)\", value: \"PRIVATE\" },\n { title: \"Team (your team members)\", value: \"TEAM\" },\n { title: \"Public (visible to everyone)\", value: \"PUBLIC\" },\n ],\n initial: 0,\n },\n ]);\n \n if (!responses.name) {\n console.log(chalk.yellow(\"Push cancelled.\"));\n return;\n }\n \n hierarchyName = responses.name;\n visibility = responses.visibility || visibility;\n }\n \n console.log();\n console.log(chalk.cyan(`📁 Creating hierarchy \"${hierarchyName}\" with ${files.length} files...`));\n console.log();\n \n // Create repository root identifier\n const repositoryRoot = createRepositoryRoot(cwd);\n \n // Create hierarchy first\n let hierarchyId: string;\n try {\n const hierarchyResponse = await api.createHierarchy({\n name: hierarchyName,\n repository_root: repositoryRoot,\n });\n hierarchyId = hierarchyResponse.hierarchy.id;\n console.log(chalk.green(`✓ Created hierarchy: ${hierarchyId}`));\n } catch (error) {\n console.log(chalk.red(\"Failed to create hierarchy\"));\n handleError(error);\n return;\n }\n \n // Upload each file\n let rootBlueprintId: string | null = null;\n let successCount = 0;\n let failCount = 0;\n \n for (const file of files) {\n const spinner = ora(`Uploading ${file.path}...`).start();\n \n try {\n const content = fs.readFileSync(file.absolutePath, \"utf-8\");\n \n // Generate name from path\n let blueprintName: string;\n if (file.isRoot) {\n blueprintName = hierarchyName;\n } else {\n // Use folder name or derive from path\n const dirname = path.dirname(file.path);\n blueprintName = dirname.replace(/[/\\\\]/g, \" / \");\n }\n \n const result = await api.createBlueprint({\n name: blueprintName,\n description: \"\",\n content,\n visibility: visibility as \"PRIVATE\" | \"TEAM\" | \"PUBLIC\",\n tags: [],\n hierarchy_id: hierarchyId,\n parent_id: file.isRoot ? null : rootBlueprintId,\n repository_path: file.path,\n });\n \n // Track root blueprint ID for linking children\n if (file.isRoot) {\n rootBlueprintId = result.blueprint.id;\n }\n \n // Track locally\n await trackBlueprint(cwd, {\n id: result.blueprint.id,\n name: blueprintName,\n file: file.path,\n content,\n source: \"private\",\n hierarchyId,\n hierarchyName,\n repositoryPath: file.path,\n });\n \n spinner.succeed(`${file.path} → ${result.blueprint.id}`);\n successCount++;\n } catch (error) {\n spinner.fail(`${file.path} failed`);\n if (error instanceof ApiRequestError) {\n console.log(chalk.red(` Error: ${error.message}`));\n }\n failCount++;\n }\n }\n \n console.log();\n console.log(chalk.green(`✅ Hierarchy created successfully!`));\n console.log(chalk.gray(` Hierarchy: ${hierarchyId}`));\n console.log(chalk.gray(` Name: ${hierarchyName}`));\n console.log(chalk.gray(` Blueprints: ${successCount} uploaded${failCount > 0 ? `, ${failCount} failed` : \"\"}`));\n console.log();\n console.log(chalk.cyan(\"Tips:\"));\n console.log(chalk.gray(` • Run 'lynxp status' to see all tracked blueprints`));\n console.log(chalk.gray(` • Run 'lynxp pull ${hierarchyId}' to download the entire hierarchy`));\n console.log(chalk.gray(` • Run 'lynxp push' in any subfolder to update individual blueprints`));\n console.log();\n}\n\nfunction findDefaultFile(): string | null {\n const candidates = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursor/rules/project.mdc\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n \"AIDER.md\",\n \"GEMINI.md\",\n \".clinerules\",\n ];\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\n/**\n * Infer blueprint type from file path\n * Returns the appropriate TemplateType for the file\n */\nfunction inferBlueprintType(filePath: string): string {\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n \n // Check if it's a command file first\n const commandInfo = inferCommandTypeFromPath(filePath);\n if (commandInfo) {\n return commandInfo.templateType;\n }\n \n // Infer from file path for rules/config files\n if (normalizedPath.includes(\".cursor/rules/\")) return \"CURSOR_RULES\";\n if (normalizedPath.endsWith(\"CLAUDE.md\")) return \"CLAUDE_MD\";\n if (normalizedPath.endsWith(\".windsurfrules\")) return \"WINDSURF_RULES\";\n if (normalizedPath.endsWith(\".clinerules\")) return \"CLINE_RULES\";\n if (normalizedPath.includes(\".github/copilot-instructions.md\")) return \"COPILOT_INSTRUCTIONS\";\n if (normalizedPath.endsWith(\"GEMINI.md\")) return \"GEMINI_MD\";\n if (normalizedPath.endsWith(\"AIDER.md\")) return \"AGENTS_MD\";\n if (normalizedPath.endsWith(\"AGENTS.md\")) return \"AGENTS_MD\";\n \n // Default to AGENTS_MD for markdown files\n if (normalizedPath.endsWith(\".md\")) return \"AGENTS_MD\";\n \n return \"CUSTOM\";\n}\n\nfunction handleError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n if (error.statusCode === 401) {\n console.error(chalk.gray(\"Your session may have expired. Run 'lynxp login' to re-authenticate.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.gray(\"You don't have permission to modify this blueprint.\"));\n } else if (error.statusCode === 404) {\n console.error(chalk.gray(\"Blueprint not found. It may have been deleted.\"));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n","import { readFile, access, rm, mkdtemp } from \"fs/promises\";\nimport { join } from \"path\";\nimport { tmpdir } from \"os\";\nimport { spawnSync } from \"child_process\";\n\nexport interface DetectedProject {\n name: string | null;\n stack: string[];\n databases: string[]; // Separate field for databases (matches WebUI)\n commands: {\n build?: string;\n test?: string;\n lint?: string;\n dev?: string;\n format?: string;\n };\n // Extended commands - multiple per category with descriptions\n detectedCommands?: {\n test?: { cmd: string; desc?: string }[];\n testCoverage?: { cmd: string; desc?: string }[];\n install?: { cmd: string; desc?: string }[];\n dev?: { cmd: string; desc?: string }[];\n build?: { cmd: string; desc?: string }[];\n lint?: { cmd: string; desc?: string }[];\n format?: { cmd: string; desc?: string }[];\n typecheck?: { cmd: string; desc?: string }[];\n clean?: { cmd: string; desc?: string }[];\n preCommit?: { cmd: string; desc?: string }[];\n additional?: { cmd: string; desc?: string }[];\n };\n packageManager: \"npm\" | \"yarn\" | \"pnpm\" | \"bun\" | null;\n type: \"monorepo\" | \"library\" | \"application\" | \"unknown\";\n description?: string;\n // New auto-detected fields (aligned with WebUI)\n license?: string;\n repoHost?: string;\n repoUrl?: string;\n cicd?: string;\n hasDocker?: boolean;\n containerRegistry?: string; // ghcr, dockerhub, gcr, ecr, acr, etc.\n testFramework?: string; // vitest, jest, pytest, etc.\n existingFiles?: string[];\n isPublicRepo?: boolean;\n isOpenSource?: boolean; // Based on license type\n projectType?: string; // open_source, internal, etc.\n}\n\n// Framework detection patterns\nconst JS_FRAMEWORK_PATTERNS: Record<string, string[]> = {\n nextjs: [\"next\"],\n react: [\"react\", \"react-dom\"],\n vue: [\"vue\"],\n angular: [\"@angular/core\"],\n svelte: [\"svelte\", \"@sveltejs/kit\"],\n solid: [\"solid-js\"],\n remix: [\"@remix-run/react\"],\n astro: [\"astro\"],\n nuxt: [\"nuxt\"],\n gatsby: [\"gatsby\"],\n};\n\nconst JS_TOOL_PATTERNS: Record<string, string[]> = {\n typescript: [\"typescript\"],\n tailwind: [\"tailwindcss\"],\n prisma: [\"prisma\", \"@prisma/client\"],\n drizzle: [\"drizzle-orm\"],\n express: [\"express\"],\n fastify: [\"fastify\"],\n hono: [\"hono\"],\n elysia: [\"elysia\"],\n trpc: [\"@trpc/server\"],\n graphql: [\"graphql\", \"@apollo/server\"],\n jest: [\"jest\"],\n vitest: [\"vitest\"],\n playwright: [\"@playwright/test\"],\n cypress: [\"cypress\"],\n eslint: [\"eslint\"],\n biome: [\"@biomejs/biome\"],\n prettier: [\"prettier\"],\n vite: [\"vite\"],\n webpack: [\"webpack\"],\n turbo: [\"turbo\"],\n};\n\n/**\n * Detects extended commands from various sources in the repository:\n * - package.json scripts\n * - pyproject.toml (poetry/poe/pdm scripts)\n * - Makefile targets\n * - docker-compose services\n * - Common patterns\n */\nasync function detectExtendedCommands(cwd: string): Promise<DetectedProject[\"detectedCommands\"]> {\n const cmds: NonNullable<DetectedProject[\"detectedCommands\"]> = {\n test: [],\n testCoverage: [],\n install: [],\n dev: [],\n build: [],\n lint: [],\n format: [],\n typecheck: [],\n clean: [],\n preCommit: [],\n additional: [],\n };\n\n // Helper to add command if not duplicate\n const addCmd = (category: keyof typeof cmds, cmd: string, desc?: string) => {\n if (!cmds[category]!.some(c => c.cmd === cmd)) {\n cmds[category]!.push({ cmd, desc });\n }\n };\n\n // ═══════════════════════════════════════════════════════════════\n // 1. Parse package.json scripts\n // ═══════════════════════════════════════════════════════════════\n const packageJsonPath = join(cwd, \"package.json\");\n if (await fileExists(packageJsonPath)) {\n try {\n const content = await readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.scripts) {\n for (const [name, script] of Object.entries(pkg.scripts)) {\n const scriptStr = String(script);\n const fullCmd = `npm run ${name}`;\n \n // Categorize by script name patterns\n if (name.match(/^test$|^test:/i) || scriptStr.includes(\"jest\") || scriptStr.includes(\"vitest\") || scriptStr.includes(\"mocha\")) {\n if (name.includes(\"cov\") || scriptStr.includes(\"--coverage\")) {\n addCmd(\"testCoverage\", fullCmd, `Run ${name}`);\n } else {\n addCmd(\"test\", fullCmd, `Run ${name}`);\n }\n } else if (name.match(/^lint$|^lint:/i) || scriptStr.includes(\"eslint\") || scriptStr.includes(\"biome\")) {\n addCmd(\"lint\", fullCmd, `Run ${name}`);\n } else if (name.match(/^format$|^fmt$|format:/i) || scriptStr.includes(\"prettier\")) {\n addCmd(\"format\", fullCmd, `Run ${name}`);\n } else if (name.match(/^build$|^build:/i) || scriptStr.includes(\"tsc\") || scriptStr.includes(\"webpack\") || scriptStr.includes(\"vite build\")) {\n addCmd(\"build\", fullCmd, `Run ${name}`);\n } else if (name.match(/^dev$|^start$|^serve$/i)) {\n addCmd(\"dev\", fullCmd, `Run ${name}`);\n } else if (name.match(/^typecheck$|^type-check$|^types$|^check:types/i) || scriptStr.includes(\"tsc --noEmit\")) {\n addCmd(\"typecheck\", fullCmd, `Run ${name}`);\n } else if (name.match(/^clean$|^clean:/i) || scriptStr.includes(\"rimraf\") || scriptStr.includes(\"rm -rf\")) {\n addCmd(\"clean\", fullCmd, `Run ${name}`);\n } else if (name.match(/^prepare$|^precommit$|^pre-commit$|^husky/i)) {\n addCmd(\"preCommit\", fullCmd, `Run ${name}`);\n } else if (name === \"install\" || name === \"postinstall\") {\n addCmd(\"install\", fullCmd, `Run ${name}`);\n } else if (![\"publish\", \"prepublish\", \"prepublishOnly\", \"version\", \"postversion\"].includes(name)) {\n // Add other scripts as additional commands\n addCmd(\"additional\", fullCmd, `Run ${name}`);\n }\n }\n }\n } catch {\n // Failed to parse package.json\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 2. Parse pyproject.toml for Python projects\n // ═══════════════════════════════════════════════════════════════\n const pyprojectPath = join(cwd, \"pyproject.toml\");\n if (await fileExists(pyprojectPath)) {\n try {\n const content = await readFile(pyprojectPath, \"utf-8\");\n \n // Detect pytest\n if (content.includes(\"pytest\") || content.includes(\"[tool.pytest\")) {\n addCmd(\"test\", \"python -m pytest tests/ -v --tb=short\", \"Run pytest\");\n addCmd(\"testCoverage\", \"python -m pytest tests/ --cov=src --cov-report=term-missing\", \"Run pytest with coverage\");\n }\n \n // Detect ruff/black for linting/formatting\n if (content.includes(\"ruff\")) {\n addCmd(\"lint\", \"ruff check .\", \"Run ruff linter\");\n addCmd(\"format\", \"ruff format .\", \"Run ruff formatter\");\n }\n if (content.includes(\"black\")) {\n addCmd(\"format\", \"black .\", \"Run black formatter\");\n }\n if (content.includes(\"mypy\")) {\n addCmd(\"typecheck\", \"mypy .\", \"Run mypy type checker\");\n }\n \n // Detect Poetry scripts\n const poetryScriptsMatch = content.match(/\\[tool\\.poetry\\.scripts\\]([\\s\\S]*?)(?=\\n\\[|$)/);\n if (poetryScriptsMatch) {\n const scriptLines = poetryScriptsMatch[1].split(\"\\n\").filter(l => l.includes(\"=\"));\n for (const line of scriptLines) {\n const match = line.match(/(\\w+)\\s*=\\s*\"([^\"]+)\"/);\n if (match) {\n const [, name, entry] = match;\n addCmd(\"additional\", `poetry run ${name}`, entry);\n }\n }\n }\n \n // Detect Poe the Poet tasks\n const poeMatch = content.match(/\\[tool\\.poe\\.tasks\\]([\\s\\S]*?)(?=\\n\\[tool\\.|$)/);\n if (poeMatch) {\n const taskLines = poeMatch[1].split(\"\\n\").filter(l => l.includes(\"=\"));\n for (const line of taskLines) {\n const match = line.match(/(\\w+)\\s*=\\s*\"([^\"]+)\"/);\n if (match) {\n const [, name, cmd] = match;\n // Categorize poe tasks\n if (name.match(/test/i)) {\n addCmd(\"test\", `poe ${name}`, cmd);\n } else if (name.match(/lint/i)) {\n addCmd(\"lint\", `poe ${name}`, cmd);\n } else if (name.match(/format/i)) {\n addCmd(\"format\", `poe ${name}`, cmd);\n } else {\n addCmd(\"additional\", `poe ${name}`, cmd);\n }\n }\n }\n }\n \n // Detect if using FastAPI/uvicorn\n if (content.includes(\"fastapi\") || content.includes(\"uvicorn\")) {\n addCmd(\"dev\", \"uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload\", \"Run FastAPI dev server\");\n }\n \n // Detect requirements install\n if (content.includes(\"[tool.poetry]\")) {\n addCmd(\"install\", \"poetry install\", \"Install dependencies with Poetry\");\n } else if (await fileExists(join(cwd, \"uv.lock\"))) {\n addCmd(\"install\", \"uv sync\", \"Sync dependencies with uv\");\n } else {\n addCmd(\"install\", \"pip install -r requirements.txt\", \"Install dependencies with pip\");\n }\n } catch {\n // Failed to parse pyproject.toml\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 3. Parse requirements.txt for Python projects\n // ═══════════════════════════════════════════════════════════════\n const requirementsPath = join(cwd, \"requirements.txt\");\n if (await fileExists(requirementsPath)) {\n try {\n const content = await readFile(requirementsPath, \"utf-8\");\n if (content.includes(\"pytest\")) {\n addCmd(\"test\", \"python -m pytest tests/ -v\", \"Run pytest\");\n }\n addCmd(\"install\", \"pip install -r requirements.txt\", \"Install dependencies\");\n } catch {\n // ignore\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 4. Parse Makefile targets\n // ═══════════════════════════════════════════════════════════════\n const makefilePath = join(cwd, \"Makefile\");\n if (await fileExists(makefilePath)) {\n try {\n const content = await readFile(makefilePath, \"utf-8\");\n \n // Extract targets (lines starting with word: at the beginning)\n const targetMatches = content.matchAll(/^([a-zA-Z_][a-zA-Z0-9_-]*):\\s*(?:[a-zA-Z0-9_\\- ]*)?$/gm);\n for (const match of targetMatches) {\n const target = match[1];\n const cmd = `make ${target}`;\n \n // Categorize by target name\n if (target.match(/^test$|^tests$/i)) {\n addCmd(\"test\", cmd, `Make ${target}`);\n } else if (target.match(/^test[-_]?cov|^coverage$/i)) {\n addCmd(\"testCoverage\", cmd, `Make ${target}`);\n } else if (target.match(/^lint$/i)) {\n addCmd(\"lint\", cmd, `Make ${target}`);\n } else if (target.match(/^format$|^fmt$/i)) {\n addCmd(\"format\", cmd, `Make ${target}`);\n } else if (target.match(/^build$/i)) {\n addCmd(\"build\", cmd, `Make ${target}`);\n } else if (target.match(/^dev$|^run$|^serve$/i)) {\n addCmd(\"dev\", cmd, `Make ${target}`);\n } else if (target.match(/^typecheck$|^types$/i)) {\n addCmd(\"typecheck\", cmd, `Make ${target}`);\n } else if (target.match(/^clean$/i)) {\n addCmd(\"clean\", cmd, `Make ${target}`);\n } else if (target.match(/^install$|^deps$/i)) {\n addCmd(\"install\", cmd, `Make ${target}`);\n } else if (![\"all\", \"default\", \".PHONY\", \".DEFAULT_GOAL\"].includes(target)) {\n addCmd(\"additional\", cmd, `Make ${target}`);\n }\n }\n } catch {\n // Failed to read Makefile\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 5. Parse docker-compose.yml\n // ═══════════════════════════════════════════════════════════════\n const dockerComposePath = join(cwd, \"docker-compose.yml\");\n const dockerComposeYamlPath = join(cwd, \"docker-compose.yaml\");\n const composePath = await fileExists(dockerComposePath) ? dockerComposePath : \n await fileExists(dockerComposeYamlPath) ? dockerComposeYamlPath : null;\n if (composePath) {\n try {\n const content = await readFile(composePath, \"utf-8\");\n \n // Extract service names (basic YAML parsing)\n const serviceMatches = content.matchAll(/^\\s{2}([a-zA-Z_][a-zA-Z0-9_-]*):\\s*$/gm);\n for (const match of serviceMatches) {\n const service = match[1];\n addCmd(\"additional\", `docker compose up ${service}`, `Run ${service} service`);\n }\n \n // Add common docker-compose commands\n addCmd(\"dev\", \"docker compose up\", \"Start all services\");\n addCmd(\"build\", \"docker compose build\", \"Build all services\");\n addCmd(\"clean\", \"docker compose down -v\", \"Stop and remove volumes\");\n } catch {\n // Failed to read docker-compose.yml\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 6. Detect Dockerfile commands\n // ═══════════════════════════════════════════════════════════════\n const dockerfilePath = join(cwd, \"Dockerfile\");\n if (await fileExists(dockerfilePath)) {\n try {\n const content = await readFile(dockerfilePath, \"utf-8\");\n \n // Extract FROM image name for context\n const fromMatch = content.match(/FROM\\s+([^\\s]+)/);\n const imageName = fromMatch ? fromMatch[1].split(\":\")[0] : \"app\";\n \n addCmd(\"build\", `docker build -t ${imageName} .`, \"Build Docker image\");\n addCmd(\"dev\", `docker run -it --rm ${imageName}`, \"Run Docker container\");\n } catch {\n // ignore\n }\n }\n\n // Check for additional Dockerfiles\n try {\n const dockerViewerPath = join(cwd, \"Dockerfile.viewer\");\n if (await fileExists(dockerViewerPath)) {\n addCmd(\"build\", \"docker build -f Dockerfile.viewer -t app-viewer .\", \"Build viewer Docker image\");\n }\n } catch {\n // ignore\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 7. Detect Cargo.toml for Rust\n // ═══════════════════════════════════════════════════════════════\n const cargoPath = join(cwd, \"Cargo.toml\");\n if (await fileExists(cargoPath)) {\n addCmd(\"build\", \"cargo build\", \"Build Rust project\");\n addCmd(\"build\", \"cargo build --release\", \"Build release\");\n addCmd(\"test\", \"cargo test\", \"Run Rust tests\");\n addCmd(\"lint\", \"cargo clippy\", \"Run Clippy linter\");\n addCmd(\"format\", \"cargo fmt\", \"Format Rust code\");\n addCmd(\"dev\", \"cargo run\", \"Run Rust binary\");\n addCmd(\"clean\", \"cargo clean\", \"Clean build artifacts\");\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 8. Detect go.mod for Go\n // ═══════════════════════════════════════════════════════════════\n const goModPath = join(cwd, \"go.mod\");\n if (await fileExists(goModPath)) {\n addCmd(\"build\", \"go build\", \"Build Go project\");\n addCmd(\"test\", \"go test ./...\", \"Run Go tests\");\n addCmd(\"lint\", \"golangci-lint run\", \"Run golangci-lint\");\n addCmd(\"format\", \"go fmt ./...\", \"Format Go code\");\n addCmd(\"dev\", \"go run .\", \"Run Go binary\");\n addCmd(\"clean\", \"go clean\", \"Clean build cache\");\n addCmd(\"typecheck\", \"go vet ./...\", \"Run go vet\");\n }\n\n // ═══════════════════════════════════════════════════════════════\n // 9. Detect common Python entrypoints\n // ═══════════════════════════════════════════════════════════════\n const srcMainPath = join(cwd, \"src\", \"main.py\");\n const mainPath = join(cwd, \"main.py\");\n const appPath = join(cwd, \"app.py\");\n if (await fileExists(srcMainPath)) {\n addCmd(\"dev\", \"python -m src.main\", \"Run main module\");\n }\n if (await fileExists(mainPath)) {\n addCmd(\"dev\", \"python main.py\", \"Run main.py\");\n }\n if (await fileExists(appPath)) {\n addCmd(\"dev\", \"python app.py\", \"Run app.py\");\n }\n\n // Check for scheduler patterns\n const schedulerPath = join(cwd, \"src\", \"scheduler.py\");\n if (await fileExists(schedulerPath)) {\n addCmd(\"additional\", \"python -m src.scheduler\", \"Run scheduler\");\n }\n\n // Check for setup_auth or similar\n const setupAuthPath = join(cwd, \"src\", \"setup_auth.py\");\n if (await fileExists(setupAuthPath)) {\n addCmd(\"additional\", \"python -m src.setup_auth\", \"Setup authentication\");\n }\n\n // Check for web app patterns\n const webMainPath = join(cwd, \"src\", \"web\", \"main.py\");\n if (await fileExists(webMainPath)) {\n addCmd(\"dev\", \"uvicorn src.web.main:app --host 0.0.0.0 --port 8080\", \"Run web viewer\");\n }\n\n return cmds;\n}\n\nexport async function detectProject(cwd: string): Promise<DetectedProject | null> {\n const detected: DetectedProject = {\n name: null,\n stack: [],\n databases: [],\n commands: {},\n packageManager: null,\n type: \"unknown\",\n };\n\n // Try to detect from package.json (Node.js projects)\n const packageJsonPath = join(cwd, \"package.json\");\n if (await fileExists(packageJsonPath)) {\n try {\n const content = await readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(content);\n \n detected.name = pkg.name || null;\n detected.description = pkg.description;\n \n // Detect if it's a monorepo\n if (pkg.workspaces || await fileExists(join(cwd, \"pnpm-workspace.yaml\"))) {\n detected.type = \"monorepo\";\n } else if (pkg.main || pkg.exports) {\n detected.type = \"library\";\n } else {\n detected.type = \"application\";\n }\n \n // Detect stack from dependencies\n const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n \n // Detect frameworks\n for (const [framework, deps] of Object.entries(JS_FRAMEWORK_PATTERNS)) {\n if (deps.some(dep => allDeps[dep])) {\n detected.stack.push(framework);\n }\n }\n\n // Detect tools\n for (const [tool, deps] of Object.entries(JS_TOOL_PATTERNS)) {\n if (deps.some(dep => allDeps[dep])) {\n detected.stack.push(tool);\n }\n }\n\n // If no framework detected but has main/src, assume vanilla JS/TS\n if (detected.stack.length === 0 || (detected.stack.length === 1 && detected.stack[0] === \"typescript\")) {\n detected.stack.unshift(\"javascript\");\n }\n \n // Detect commands from scripts\n if (pkg.scripts) {\n detected.commands.build = pkg.scripts.build;\n detected.commands.test = pkg.scripts.test;\n detected.commands.lint = pkg.scripts.lint || pkg.scripts[\"lint:check\"];\n detected.commands.dev = pkg.scripts.dev || pkg.scripts.start || pkg.scripts.serve;\n detected.commands.format = pkg.scripts.format || pkg.scripts.prettier;\n }\n\n // Detect package manager from lockfiles\n if (await fileExists(join(cwd, \"pnpm-lock.yaml\"))) {\n detected.packageManager = \"pnpm\";\n } else if (await fileExists(join(cwd, \"yarn.lock\"))) {\n detected.packageManager = \"yarn\";\n } else if (await fileExists(join(cwd, \"bun.lockb\"))) {\n detected.packageManager = \"bun\";\n } else if (await fileExists(join(cwd, \"package-lock.json\"))) {\n detected.packageManager = \"npm\";\n }\n\n // Add package manager prefix to commands if detected\n if (detected.packageManager && detected.packageManager !== \"npm\") {\n const pm = detected.packageManager;\n for (const [key, value] of Object.entries(detected.commands)) {\n if (value && !value.startsWith(pm) && !value.startsWith(\"npx\")) {\n // Commands are already script names, prefix with package manager\n detected.commands[key as keyof typeof detected.commands] = `${pm} run ${value}`;\n }\n }\n } else if (detected.commands) {\n // Prefix with npm run\n for (const [key, value] of Object.entries(detected.commands)) {\n if (value && !value.startsWith(\"npm\") && !value.startsWith(\"npx\")) {\n detected.commands[key as keyof typeof detected.commands] = `npm run ${value}`;\n }\n }\n }\n\n // Fix: commands should be the actual script names for display\n if (pkg.scripts) {\n detected.commands.build = pkg.scripts.build ? \"build\" : undefined;\n detected.commands.test = pkg.scripts.test ? \"test\" : undefined;\n detected.commands.lint = pkg.scripts.lint ? \"lint\" : (pkg.scripts[\"lint:check\"] ? \"lint:check\" : undefined);\n detected.commands.dev = pkg.scripts.dev ? \"dev\" : (pkg.scripts.start ? \"start\" : (pkg.scripts.serve ? \"serve\" : undefined));\n }\n\n return detected;\n } catch {\n // Failed to parse package.json\n }\n }\n\n // Try to detect from pyproject.toml (Python projects)\n const pyprojectPath = join(cwd, \"pyproject.toml\");\n if (await fileExists(pyprojectPath)) {\n try {\n const content = await readFile(pyprojectPath, \"utf-8\");\n \n detected.stack.push(\"python\");\n detected.type = \"application\";\n \n // Extract project name (basic TOML parsing)\n const nameMatch = content.match(/name\\s*=\\s*\"([^\"]+)\"/);\n if (nameMatch) detected.name = nameMatch[1];\n \n // Detect frameworks and tools\n if (content.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.includes(\"django\")) detected.stack.push(\"django\");\n if (content.includes(\"flask\")) detected.stack.push(\"flask\");\n if (content.includes(\"pydantic\")) detected.stack.push(\"pydantic\");\n if (content.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n if (content.includes(\"pytest\")) detected.stack.push(\"pytest\");\n if (content.includes(\"ruff\")) detected.stack.push(\"ruff\");\n if (content.includes(\"mypy\")) detected.stack.push(\"mypy\");\n \n // Common Python commands\n detected.commands.test = \"pytest\";\n detected.commands.lint = \"ruff check .\";\n \n // Check if using poetry or uv\n if (content.includes(\"[tool.poetry]\")) {\n detected.packageManager = \"yarn\"; // Closest analogy\n detected.commands.dev = \"poetry run python -m uvicorn main:app --reload\";\n } else if (await fileExists(join(cwd, \"uv.lock\"))) {\n detected.commands.dev = \"uv run python main.py\";\n }\n \n return detected;\n } catch {\n // Failed to parse pyproject.toml\n }\n }\n\n // Try to detect from requirements.txt (Python projects)\n const requirementsPath = join(cwd, \"requirements.txt\");\n if (await fileExists(requirementsPath)) {\n try {\n const content = await readFile(requirementsPath, \"utf-8\");\n \n detected.stack.push(\"python\");\n detected.type = \"application\";\n \n if (content.toLowerCase().includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.toLowerCase().includes(\"django\")) detected.stack.push(\"django\");\n if (content.toLowerCase().includes(\"flask\")) detected.stack.push(\"flask\");\n \n detected.commands.test = \"pytest\";\n detected.commands.lint = \"ruff check .\";\n \n return detected;\n } catch {\n // Failed to read requirements.txt\n }\n }\n\n // Try to detect from Cargo.toml (Rust projects)\n const cargoPath = join(cwd, \"Cargo.toml\");\n if (await fileExists(cargoPath)) {\n try {\n const content = await readFile(cargoPath, \"utf-8\");\n \n detected.stack.push(\"rust\");\n detected.type = \"application\";\n \n // Extract project name\n const nameMatch = content.match(/name\\s*=\\s*\"([^\"]+)\"/);\n if (nameMatch) detected.name = nameMatch[1];\n \n // Detect common crates\n if (content.includes(\"actix-web\")) detected.stack.push(\"actix\");\n if (content.includes(\"axum\")) detected.stack.push(\"axum\");\n if (content.includes(\"tokio\")) detected.stack.push(\"tokio\");\n if (content.includes(\"serde\")) detected.stack.push(\"serde\");\n if (content.includes(\"sqlx\")) detected.stack.push(\"sqlx\");\n \n detected.commands.build = \"cargo build\";\n detected.commands.test = \"cargo test\";\n detected.commands.lint = \"cargo clippy\";\n detected.commands.dev = \"cargo run\";\n \n return detected;\n } catch {\n // Failed to parse Cargo.toml\n }\n }\n\n // Try to detect from go.mod (Go projects)\n const goModPath = join(cwd, \"go.mod\");\n if (await fileExists(goModPath)) {\n try {\n const content = await readFile(goModPath, \"utf-8\");\n \n detected.stack.push(\"go\");\n detected.type = \"application\";\n \n // Extract module name\n const moduleMatch = content.match(/module\\s+(\\S+)/);\n if (moduleMatch) {\n const parts = moduleMatch[1].split(\"/\");\n detected.name = parts[parts.length - 1];\n }\n \n // Detect common frameworks\n if (content.includes(\"gin-gonic/gin\")) detected.stack.push(\"gin\");\n if (content.includes(\"gofiber/fiber\")) detected.stack.push(\"fiber\");\n if (content.includes(\"labstack/echo\")) detected.stack.push(\"echo\");\n if (content.includes(\"gorm.io/gorm\")) detected.stack.push(\"gorm\");\n \n detected.commands.build = \"go build\";\n detected.commands.test = \"go test ./...\";\n detected.commands.lint = \"golangci-lint run\";\n detected.commands.dev = \"go run .\";\n \n return detected;\n } catch {\n // Failed to parse go.mod\n }\n }\n\n // Try to detect from Makefile\n const makefilePath = join(cwd, \"Makefile\");\n if (await fileExists(makefilePath)) {\n try {\n const content = await readFile(makefilePath, \"utf-8\");\n \n // Extract targets\n if (content.includes(\"build:\")) detected.commands.build = \"make build\";\n if (content.includes(\"test:\")) detected.commands.test = \"make test\";\n if (content.includes(\"lint:\")) detected.commands.lint = \"make lint\";\n if (content.includes(\"dev:\")) detected.commands.dev = \"make dev\";\n if (content.includes(\"run:\")) detected.commands.dev = detected.commands.dev || \"make run\";\n \n if (Object.keys(detected.commands).length > 0) {\n detected.type = \"application\";\n return detected;\n }\n } catch {\n // Failed to read Makefile\n }\n }\n\n // Try to detect from Docker\n if (await fileExists(join(cwd, \"Dockerfile\")) || await fileExists(join(cwd, \"docker-compose.yml\"))) {\n detected.stack.push(\"docker\");\n detected.type = \"application\";\n detected.hasDocker = true;\n }\n\n // ════════════════════════════════════════════════════════════════\n // Additional auto-detection for wizard fields\n // ════════════════════════════════════════════════════════════════\n\n // Detect license from LICENSE file\n const licensePath = join(cwd, \"LICENSE\");\n if (await fileExists(licensePath)) {\n try {\n const licenseContent = await readFile(licensePath, \"utf-8\");\n const lowerContent = licenseContent.toLowerCase();\n \n if (lowerContent.includes(\"mit license\") || lowerContent.includes(\"permission is hereby granted, free of charge\")) {\n detected.license = \"mit\";\n } else if (lowerContent.includes(\"apache license\") && lowerContent.includes(\"version 2.0\")) {\n detected.license = \"apache-2.0\";\n } else if (lowerContent.includes(\"gnu general public license\") && lowerContent.includes(\"version 3\")) {\n detected.license = \"gpl-3.0\";\n } else if (lowerContent.includes(\"gnu lesser general public license\")) {\n detected.license = \"lgpl-3.0\";\n } else if (lowerContent.includes(\"gnu affero general public license\")) {\n detected.license = \"agpl-3.0\";\n } else if (lowerContent.includes(\"bsd 3-clause\") || lowerContent.includes(\"redistribution and use in source and binary forms\")) {\n detected.license = \"bsd-3\";\n } else if (lowerContent.includes(\"mozilla public license\") && lowerContent.includes(\"2.0\")) {\n detected.license = \"mpl-2.0\";\n } else if (lowerContent.includes(\"unlicense\") || lowerContent.includes(\"this is free and unencumbered software\")) {\n detected.license = \"unlicense\";\n }\n } catch {\n // Failed to read LICENSE\n }\n }\n\n // Detect repository info from .git/config\n const gitConfigPath = join(cwd, \".git\", \"config\");\n if (await fileExists(gitConfigPath)) {\n try {\n const gitConfig = await readFile(gitConfigPath, \"utf-8\");\n const urlMatch = gitConfig.match(/url\\s*=\\s*(.+)/);\n if (urlMatch) {\n const repoUrl = urlMatch[1].trim();\n detected.repoUrl = repoUrl;\n \n if (repoUrl.includes(\"github.com\")) {\n detected.repoHost = \"github\";\n } else if (repoUrl.includes(\"gitlab.com\") || repoUrl.includes(\"gitlab\")) {\n detected.repoHost = \"gitlab\";\n } else if (repoUrl.includes(\"bitbucket\")) {\n detected.repoHost = \"bitbucket\";\n } else if (repoUrl.includes(\"gitea\") || repoUrl.includes(\"codeberg\")) {\n detected.repoHost = \"gitea\";\n } else if (repoUrl.includes(\"azure\")) {\n detected.repoHost = \"azure\";\n }\n }\n } catch {\n // Failed to read git config\n }\n }\n\n // Detect CI/CD from workflow files\n if (await fileExists(join(cwd, \".github\", \"workflows\"))) {\n detected.cicd = \"github_actions\";\n } else if (await fileExists(join(cwd, \".gitlab-ci.yml\"))) {\n detected.cicd = \"gitlab_ci\";\n } else if (await fileExists(join(cwd, \"Jenkinsfile\"))) {\n detected.cicd = \"jenkins\";\n } else if (await fileExists(join(cwd, \".circleci\"))) {\n detected.cicd = \"circleci\";\n } else if (await fileExists(join(cwd, \".travis.yml\"))) {\n detected.cicd = \"travis\";\n } else if (await fileExists(join(cwd, \"azure-pipelines.yml\"))) {\n detected.cicd = \"azure_devops\";\n } else if (await fileExists(join(cwd, \"bitbucket-pipelines.yml\"))) {\n detected.cicd = \"bitbucket\";\n } else if (await fileExists(join(cwd, \".drone.yml\"))) {\n detected.cicd = \"drone\";\n }\n\n // Detect existing static files\n detected.existingFiles = [];\n const staticFiles = [\n \".editorconfig\",\n \"CONTRIBUTING.md\",\n \"CODE_OF_CONDUCT.md\", \n \"SECURITY.md\",\n \"ROADMAP.md\",\n \".gitignore\",\n \".github/FUNDING.yml\",\n \"LICENSE\",\n \"README.md\",\n \"ARCHITECTURE.md\",\n \"CHANGELOG.md\",\n ];\n \n for (const file of staticFiles) {\n if (await fileExists(join(cwd, file))) {\n detected.existingFiles.push(file);\n }\n }\n\n // Try to get description from README if not already set\n if (!detected.description) {\n const readmePath = join(cwd, \"README.md\");\n if (await fileExists(readmePath)) {\n try {\n const readme = await readFile(readmePath, \"utf-8\");\n // Get first non-heading, non-empty paragraph\n const lines = readme.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith(\"#\") && !trimmed.startsWith(\"!\") && !trimmed.startsWith(\"[\") && trimmed.length > 20) {\n detected.description = trimmed.substring(0, 200);\n break;\n }\n }\n } catch {\n // Failed to read README\n }\n }\n }\n\n // Detect extended commands from all sources\n detected.detectedCommands = await detectExtendedCommands(cwd);\n\n return detected.stack.length > 0 || detected.name ? detected : null;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Detect repo host from URL\n */\nexport function detectRepoHost(url: string): string {\n const lower = url.toLowerCase();\n if (lower.includes(\"github.com\") || lower.includes(\"github:\")) return \"github\";\n if (lower.includes(\"gitlab.com\") || lower.includes(\"gitlab\")) return \"gitlab\";\n if (lower.includes(\"bitbucket.org\") || lower.includes(\"bitbucket:\")) return \"bitbucket\";\n if (lower.includes(\"gitea.\") || lower.includes(\"gitea:\") || lower.includes(\"codeberg.org\")) return \"gitea\";\n if (lower.includes(\"azure.com\") || lower.includes(\"visualstudio.com\") || lower.includes(\"dev.azure\")) return \"azure\";\n return \"other\";\n}\n\n/**\n * Parse GitHub URL to owner/repo\n */\nfunction parseGitHubUrl(url: string): { owner: string; repo: string } | null {\n const patterns = [\n /github\\.com[/:]([^/]+)\\/([^/.]+)/,\n /^([^/]+)\\/([^/]+)$/,\n ];\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match) {\n return { owner: match[1], repo: match[2].replace(/\\.git$/, \"\") };\n }\n }\n return null;\n}\n\n/**\n * Parse GitLab URL to project path and host\n */\nfunction parseGitLabUrl(url: string): { path: string; host: string } | null {\n const patterns = [\n /^https?:\\/\\/([^/]+)\\/(.+?)(?:\\.git)?$/,\n /^git@([^:]+):(.+?)(?:\\.git)?$/,\n ];\n for (const pattern of patterns) {\n const match = url.match(pattern);\n if (match) {\n const host = match[1];\n const path = match[2].replace(/\\.git$/, \"\");\n if (host.includes(\"gitlab\") || url.toLowerCase().includes(\"gitlab\")) {\n return { path, host };\n }\n }\n }\n return null;\n}\n\n/**\n * Detect from GitHub API (faster, no clone needed)\n */\ninterface GitHubRepoInfo {\n name: string;\n description: string | null;\n private: boolean;\n license?: { spdx_id: string } | null;\n}\n\ninterface GitHubFile {\n name: string;\n type: string;\n}\n\ninterface PackageJson {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n}\n\n// Open source license identifiers\nconst OPEN_SOURCE_LICENSES = [\"mit\", \"apache-2.0\", \"gpl-3.0\", \"lgpl-3.0\", \"agpl-3.0\", \"bsd-2-clause\", \"bsd-3-clause\", \"mpl-2.0\", \"unlicense\", \"cc0-1.0\", \"isc\"];\n\n// Static files to detect\nconst STATIC_FILES = [\".editorconfig\", \"CONTRIBUTING.md\", \"CODE_OF_CONDUCT.md\", \"SECURITY.md\", \"ROADMAP.md\", \".gitignore\", \".github/FUNDING.yml\", \"LICENSE\", \"README.md\", \"ARCHITECTURE.md\", \"CHANGELOG.md\"];\n\nasync function detectFromGitHubApi(repoUrl: string): Promise<DetectedProject | null> {\n const parsed = parseGitHubUrl(repoUrl);\n if (!parsed) return null;\n \n const { owner, repo } = parsed;\n \n try {\n // Get repo info\n const repoRes = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!repoRes.ok) return null;\n const repoInfo = await repoRes.json() as GitHubRepoInfo;\n \n if (repoInfo.private) return null;\n \n // Determine if it's open source based on license\n const licenseId = repoInfo.license?.spdx_id?.toLowerCase() || null;\n const isOpenSource = !repoInfo.private && (licenseId ? OPEN_SOURCE_LICENSES.includes(licenseId) : false);\n \n const detected: DetectedProject = {\n name: repoInfo.name,\n description: repoInfo.description ?? undefined,\n stack: [],\n databases: [],\n commands: {},\n packageManager: null,\n type: \"application\",\n repoHost: \"github\",\n repoUrl,\n license: licenseId ?? undefined,\n isPublicRepo: !repoInfo.private,\n isOpenSource,\n projectType: isOpenSource ? \"open_source\" : undefined,\n hasDocker: false,\n existingFiles: [],\n };\n \n // List root files\n const filesRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!filesRes.ok) return detected;\n const files = await filesRes.json() as GitHubFile[];\n const fileNames = new Set(files.map((f) => f.name.toLowerCase()));\n \n // Detect existing static files (root level)\n for (const file of STATIC_FILES) {\n // Skip files in subdirectories - we'll check those separately\n if (file.includes(\"/\")) continue;\n if (files.some((f) => f.name.toLowerCase() === file.toLowerCase())) {\n detected.existingFiles!.push(file);\n }\n }\n \n // Check .github directory for FUNDING.yml and other files\n if (files.some((f) => f.name === \".github\" && f.type === \"dir\")) {\n const ghFilesRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/.github`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (ghFilesRes.ok) {\n const ghFiles = await ghFilesRes.json() as GitHubFile[];\n if (ghFiles.some((f) => f.name.toLowerCase() === \"funding.yml\")) {\n detected.existingFiles!.push(\".github/FUNDING.yml\");\n }\n }\n }\n \n // Check for Docker and detect container registry\n if (fileNames.has(\"dockerfile\") || fileNames.has(\"docker-compose.yml\") || fileNames.has(\"docker-compose.yaml\")) {\n detected.hasDocker = true;\n detected.stack.push(\"docker\");\n \n // Try to detect container registry from docker-compose\n const dockerComposeFile = fileNames.has(\"docker-compose.yml\") ? \"docker-compose.yml\" : fileNames.has(\"docker-compose.yaml\") ? \"docker-compose.yaml\" : null;\n if (dockerComposeFile) {\n const composeRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/${dockerComposeFile}`);\n if (composeRes.ok) {\n try {\n const content = await composeRes.text();\n const lowerContent = content.toLowerCase();\n \n // Detect container registry\n if (content.includes(\"ghcr.io\")) detected.containerRegistry = \"ghcr\";\n else if (content.includes(\"docker.io\") || /image:\\s*[a-z0-9]+\\/[a-z0-9]/.test(content)) detected.containerRegistry = \"dockerhub\";\n else if (content.includes(\"gcr.io\")) detected.containerRegistry = \"gcr\";\n else if (content.includes(\"ecr.\") || content.includes(\".amazonaws.com\")) detected.containerRegistry = \"ecr\";\n else if (content.includes(\"azurecr.io\")) detected.containerRegistry = \"acr\";\n else if (content.includes(\"quay.io\")) detected.containerRegistry = \"quay\";\n else if (content.includes(\"registry.gitlab.com\")) detected.containerRegistry = \"gitlab_registry\";\n \n // Detect databases from docker-compose\n if (lowerContent.includes(\"postgres\")) detected.databases.push(\"postgresql\");\n if (lowerContent.includes(\"mysql\") && !lowerContent.includes(\"mysql-\")) detected.databases.push(\"mysql\");\n if (lowerContent.includes(\"mongo\")) detected.databases.push(\"mongodb\");\n if (lowerContent.includes(\"redis\")) detected.databases.push(\"redis\");\n if (lowerContent.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n if (lowerContent.includes(\"mariadb\")) detected.databases.push(\"mariadb\");\n } catch { /* ignore */ }\n }\n }\n }\n \n // Check for CI/CD\n if (files.some((f) => f.name === \".github\" && f.type === \"dir\")) {\n // Check if .github/workflows exists\n const ghFilesRes = await fetch(`https://api.github.com/repos/${owner}/${repo}/contents/.github`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (ghFilesRes.ok) {\n const ghFiles = await ghFilesRes.json() as GitHubFile[];\n if (ghFiles.some((f) => f.name === \"workflows\")) {\n detected.cicd = \"github_actions\";\n }\n }\n }\n if (fileNames.has(\".gitlab-ci.yml\")) detected.cicd = \"gitlab_ci\";\n if (fileNames.has(\"jenkinsfile\")) detected.cicd = \"jenkins\";\n if (fileNames.has(\".travis.yml\")) detected.cicd = \"travis\";\n if (fileNames.has(\"azure-pipelines.yml\")) detected.cicd = \"azure_devops\";\n \n // Detect from pyproject.toml (Python projects)\n if (fileNames.has(\"pyproject.toml\")) {\n detected.stack.push(\"python\");\n const pyprojectRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/pyproject.toml`);\n if (pyprojectRes.ok) {\n try {\n const content = await pyprojectRes.text();\n const lowerContent = content.toLowerCase();\n if (lowerContent.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (lowerContent.includes(\"django\")) detected.stack.push(\"django\");\n if (lowerContent.includes(\"flask\")) detected.stack.push(\"flask\");\n if (lowerContent.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n if (lowerContent.includes(\"pydantic\")) detected.stack.push(\"pydantic\");\n \n // Detect test framework\n if (lowerContent.includes(\"pytest\")) detected.testFramework = \"pytest\";\n else if (lowerContent.includes(\"unittest\")) detected.testFramework = \"unittest\";\n \n // Detect commands\n detected.commands.test = \"pytest\";\n if (lowerContent.includes(\"ruff\")) detected.commands.lint = \"ruff check .\";\n \n // Detect databases from Python packages\n if (lowerContent.includes(\"asyncpg\") || lowerContent.includes(\"psycopg\")) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (lowerContent.includes(\"aiosqlite\") || lowerContent.includes(\"sqlite\")) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (lowerContent.includes(\"pymongo\") || lowerContent.includes(\"motor\")) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n if (lowerContent.includes(\"redis\") || lowerContent.includes(\"aioredis\")) {\n if (!detected.databases.includes(\"redis\")) detected.databases.push(\"redis\");\n }\n if (lowerContent.includes(\"pymysql\") || lowerContent.includes(\"aiomysql\")) {\n if (!detected.databases.includes(\"mysql\")) detected.databases.push(\"mysql\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect from requirements.txt (Python)\n if (fileNames.has(\"requirements.txt\")) {\n const reqRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/requirements.txt`);\n if (reqRes.ok) {\n try {\n const content = (await reqRes.text()).toLowerCase();\n if (!detected.stack.includes(\"python\")) detected.stack.push(\"python\");\n if (content.includes(\"fastapi\") && !detected.stack.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.includes(\"django\") && !detected.stack.includes(\"django\")) detected.stack.push(\"django\");\n if (content.includes(\"flask\") && !detected.stack.includes(\"flask\")) detected.stack.push(\"flask\");\n if (content.includes(\"sqlalchemy\") && !detected.stack.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n \n // Detect databases from Python packages\n if (content.includes(\"asyncpg\") || content.includes(\"psycopg\")) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (content.includes(\"aiosqlite\") || content.includes(\"sqlite\")) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (content.includes(\"pymongo\") || content.includes(\"motor\")) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect from package.json\n if (fileNames.has(\"package.json\")) {\n const pkgRes = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/package.json`);\n if (pkgRes.ok) {\n try {\n const pkg = await pkgRes.json() as PackageJson;\n const allDeps: Record<string, string> = { ...pkg.dependencies, ...pkg.devDependencies };\n \n // Frameworks\n if (allDeps[\"next\"]) detected.stack.push(\"nextjs\");\n if (allDeps[\"react\"]) detected.stack.push(\"react\");\n if (allDeps[\"vue\"]) detected.stack.push(\"vue\");\n if (allDeps[\"svelte\"]) detected.stack.push(\"svelte\");\n if (allDeps[\"express\"]) detected.stack.push(\"express\");\n if (allDeps[\"fastify\"]) detected.stack.push(\"fastify\");\n if (allDeps[\"hono\"]) detected.stack.push(\"hono\");\n \n // Tools\n if (allDeps[\"typescript\"]) detected.stack.push(\"typescript\");\n if (allDeps[\"tailwindcss\"]) detected.stack.push(\"tailwind\");\n if (allDeps[\"prisma\"]) detected.stack.push(\"prisma\");\n if (allDeps[\"drizzle-orm\"]) detected.stack.push(\"drizzle\");\n \n // Test frameworks\n if (allDeps[\"vitest\"]) detected.testFramework = \"vitest\";\n else if (allDeps[\"jest\"]) detected.testFramework = \"jest\";\n else if (allDeps[\"@playwright/test\"]) detected.testFramework = \"playwright\";\n else if (allDeps[\"cypress\"]) detected.testFramework = \"cypress\";\n else if (allDeps[\"mocha\"]) detected.testFramework = \"mocha\";\n \n if (detected.stack.length === 0 || (detected.stack.length === 1 && detected.stack[0] === \"typescript\")) {\n detected.stack.unshift(\"javascript\");\n }\n \n if (pkg.scripts) {\n if (pkg.scripts.build) detected.commands.build = \"npm run build\";\n if (pkg.scripts.test) detected.commands.test = \"npm run test\";\n if (pkg.scripts.lint) detected.commands.lint = \"npm run lint\";\n if (pkg.scripts.dev) detected.commands.dev = \"npm run dev\";\n else if (pkg.scripts.start) detected.commands.dev = \"npm run start\";\n }\n \n // Detect databases from Node.js packages\n if (allDeps[\"pg\"] || allDeps[\"postgres\"] || allDeps[\"@neondatabase/serverless\"]) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (allDeps[\"better-sqlite3\"] || allDeps[\"sql.js\"] || allDeps[\"sqlite3\"]) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (allDeps[\"mongodb\"] || allDeps[\"mongoose\"]) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n if (allDeps[\"redis\"] || allDeps[\"ioredis\"]) {\n if (!detected.databases.includes(\"redis\")) detected.databases.push(\"redis\");\n }\n if (allDeps[\"mysql\"] || allDeps[\"mysql2\"]) {\n if (!detected.databases.includes(\"mysql\")) detected.databases.push(\"mysql\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect other languages\n if (fileNames.has(\"cargo.toml\")) {\n detected.stack.push(\"rust\");\n detected.commands.build = \"cargo build\";\n detected.commands.test = \"cargo test\";\n }\n if (fileNames.has(\"go.mod\")) {\n detected.stack.push(\"go\");\n detected.commands.build = \"go build\";\n detected.commands.test = \"go test ./...\";\n }\n \n return detected;\n } catch {\n return null;\n }\n}\n\ninterface GitLabRepoInfo {\n name: string;\n description: string | null;\n visibility: \"public\" | \"private\" | \"internal\";\n license?: { key: string } | null;\n}\n\ninterface GitLabFile {\n name: string;\n type: string;\n}\n\n/**\n * Detect from GitLab API (faster, no clone needed)\n */\nasync function detectFromGitLabApi(repoUrl: string): Promise<DetectedProject | null> {\n const parsed = parseGitLabUrl(repoUrl);\n if (!parsed) return null;\n \n const { path: projectPath, host } = parsed;\n const encodedPath = encodeURIComponent(projectPath);\n \n try {\n // Get repo info\n const repoRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!repoRes.ok) return null;\n const repoInfo = await repoRes.json() as GitLabRepoInfo;\n \n if (repoInfo.visibility === \"private\") return null;\n \n // Determine if it's open source based on license\n const licenseId = repoInfo.license?.key?.toLowerCase() || null;\n const isOpenSource = repoInfo.visibility === \"public\" && (licenseId ? OPEN_SOURCE_LICENSES.includes(licenseId) : false);\n \n const detected: DetectedProject = {\n name: repoInfo.name,\n description: repoInfo.description ?? undefined,\n stack: [],\n databases: [],\n commands: {},\n packageManager: null,\n type: \"application\",\n repoHost: \"gitlab\",\n repoUrl,\n license: licenseId ?? undefined,\n isPublicRepo: repoInfo.visibility === \"public\",\n isOpenSource,\n projectType: isOpenSource ? \"open_source\" : undefined,\n hasDocker: false,\n existingFiles: [],\n };\n \n // List root files\n const filesRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/tree?per_page=100`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (!filesRes.ok) return detected;\n const files = await filesRes.json() as GitLabFile[];\n const fileNames = new Set(files.map((f) => f.name.toLowerCase()));\n \n // Detect existing static files\n for (const file of STATIC_FILES) {\n if (files.some((f) => f.name.toLowerCase() === file.toLowerCase())) {\n detected.existingFiles!.push(file);\n }\n }\n \n // CI/CD detection\n if (fileNames.has(\".gitlab-ci.yml\")) detected.cicd = \"gitlab_ci\";\n if (fileNames.has(\"jenkinsfile\")) detected.cicd = \"jenkins\";\n \n // Check for Docker and detect container registry\n if (fileNames.has(\"dockerfile\") || fileNames.has(\"docker-compose.yml\") || fileNames.has(\"docker-compose.yaml\")) {\n detected.hasDocker = true;\n detected.stack.push(\"docker\");\n \n // Try to detect container registry from docker-compose\n const dockerComposeFile = fileNames.has(\"docker-compose.yml\") ? \"docker-compose.yml\" : fileNames.has(\"docker-compose.yaml\") ? \"docker-compose.yaml\" : null;\n if (dockerComposeFile) {\n const composeRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/files/${encodeURIComponent(dockerComposeFile)}/raw?ref=HEAD`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (composeRes.ok) {\n try {\n const content = await composeRes.text();\n const lowerContent = content.toLowerCase();\n \n // Detect container registry\n if (content.includes(\"registry.gitlab.com\")) detected.containerRegistry = \"gitlab_registry\";\n else if (content.includes(\"ghcr.io\")) detected.containerRegistry = \"ghcr\";\n else if (content.includes(\"docker.io\") || /image:\\s*[a-z0-9]+\\/[a-z0-9]/.test(content)) detected.containerRegistry = \"dockerhub\";\n else if (content.includes(\"gcr.io\")) detected.containerRegistry = \"gcr\";\n \n // Detect databases from docker-compose\n if (lowerContent.includes(\"postgres\")) detected.databases.push(\"postgresql\");\n if (lowerContent.includes(\"mysql\") && !lowerContent.includes(\"mysql-\")) detected.databases.push(\"mysql\");\n if (lowerContent.includes(\"mongo\")) detected.databases.push(\"mongodb\");\n if (lowerContent.includes(\"redis\")) detected.databases.push(\"redis\");\n if (lowerContent.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n } catch { /* ignore */ }\n }\n }\n }\n \n // Detect from package.json\n if (fileNames.has(\"package.json\")) {\n const pkgRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/files/package.json/raw?ref=HEAD`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (pkgRes.ok) {\n try {\n const pkg = await pkgRes.json() as PackageJson;\n const allDeps: Record<string, string> = { ...pkg.dependencies, ...pkg.devDependencies };\n \n // Frameworks\n if (allDeps[\"next\"]) detected.stack.push(\"nextjs\");\n if (allDeps[\"react\"]) detected.stack.push(\"react\");\n if (allDeps[\"vue\"]) detected.stack.push(\"vue\");\n if (allDeps[\"svelte\"]) detected.stack.push(\"svelte\");\n if (allDeps[\"express\"]) detected.stack.push(\"express\");\n if (allDeps[\"fastify\"]) detected.stack.push(\"fastify\");\n \n // Tools\n if (allDeps[\"typescript\"]) detected.stack.push(\"typescript\");\n if (allDeps[\"tailwindcss\"]) detected.stack.push(\"tailwind\");\n if (allDeps[\"prisma\"]) detected.stack.push(\"prisma\");\n \n // Test frameworks\n if (allDeps[\"vitest\"]) detected.testFramework = \"vitest\";\n else if (allDeps[\"jest\"]) detected.testFramework = \"jest\";\n else if (allDeps[\"@playwright/test\"]) detected.testFramework = \"playwright\";\n \n if (detected.stack.length === 0 || (detected.stack.length === 1 && detected.stack[0] === \"typescript\")) {\n detected.stack.unshift(\"javascript\");\n }\n \n if (pkg.scripts) {\n if (pkg.scripts.build) detected.commands.build = \"npm run build\";\n if (pkg.scripts.test) detected.commands.test = \"npm run test\";\n if (pkg.scripts.lint) detected.commands.lint = \"npm run lint\";\n if (pkg.scripts.dev) detected.commands.dev = \"npm run dev\";\n }\n \n // Detect databases from Node.js packages\n if (allDeps[\"pg\"] || allDeps[\"postgres\"]) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (allDeps[\"better-sqlite3\"] || allDeps[\"sqlite3\"]) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n if (allDeps[\"mongodb\"] || allDeps[\"mongoose\"]) {\n if (!detected.databases.includes(\"mongodb\")) detected.databases.push(\"mongodb\");\n }\n if (allDeps[\"redis\"] || allDeps[\"ioredis\"]) {\n if (!detected.databases.includes(\"redis\")) detected.databases.push(\"redis\");\n }\n } catch { /* ignore */ }\n }\n }\n \n // Detect from pyproject.toml or requirements.txt (Python)\n if (fileNames.has(\"pyproject.toml\")) {\n detected.stack.push(\"python\");\n const pyRes = await fetch(`https://${host}/api/v4/projects/${encodedPath}/repository/files/pyproject.toml/raw?ref=HEAD`, {\n headers: { \"User-Agent\": \"LynxPrompt-CLI\" },\n });\n if (pyRes.ok) {\n try {\n const content = (await pyRes.text()).toLowerCase();\n if (content.includes(\"fastapi\")) detected.stack.push(\"fastapi\");\n if (content.includes(\"django\")) detected.stack.push(\"django\");\n if (content.includes(\"flask\")) detected.stack.push(\"flask\");\n if (content.includes(\"sqlalchemy\")) detected.stack.push(\"sqlalchemy\");\n if (content.includes(\"pytest\")) detected.testFramework = \"pytest\";\n \n // Detect databases\n if (content.includes(\"asyncpg\") || content.includes(\"psycopg\")) {\n if (!detected.databases.includes(\"postgresql\")) detected.databases.push(\"postgresql\");\n }\n if (content.includes(\"aiosqlite\") || content.includes(\"sqlite\")) {\n if (!detected.databases.includes(\"sqlite\")) detected.databases.push(\"sqlite\");\n }\n } catch { /* ignore */ }\n }\n } else if (fileNames.has(\"requirements.txt\")) {\n detected.stack.push(\"python\");\n }\n \n // Detect other languages\n if (fileNames.has(\"cargo.toml\")) {\n detected.stack.push(\"rust\");\n detected.commands.build = \"cargo build\";\n detected.commands.test = \"cargo test\";\n }\n if (fileNames.has(\"go.mod\")) {\n detected.stack.push(\"go\");\n detected.commands.build = \"go build\";\n detected.commands.test = \"go test ./...\";\n }\n \n return detected;\n } catch {\n return null;\n }\n}\n\n/**\n * Validate git URL to prevent command injection\n * Only allows http(s), git, and ssh protocols\n */\nfunction isValidGitUrl(url: string): boolean {\n const trimmed = url.trim();\n // Allow standard git URL formats\n if (trimmed.startsWith(\"https://\") || trimmed.startsWith(\"http://\") ||\n trimmed.startsWith(\"git://\") || trimmed.startsWith(\"git@\") ||\n trimmed.startsWith(\"ssh://\")) {\n // Additional validation: no shell metacharacters\n const dangerousChars = /[;&|`$(){}[\\]<>\\\\'\"!#*?~]/;\n return !dangerousChars.test(trimmed);\n }\n return false;\n}\n\n/**\n * Detect from shallow git clone (fallback for non-GitHub/GitLab hosts)\n */\nasync function detectFromShallowClone(repoUrl: string): Promise<DetectedProject | null> {\n let tempDir: string | null = null;\n \n // Security: Validate URL before passing to git\n if (!isValidGitUrl(repoUrl)) {\n return null;\n }\n \n try {\n tempDir = await mkdtemp(join(tmpdir(), \"lynxprompt-detect-\"));\n \n try {\n // Security: Use spawnSync with array arguments to prevent command injection\n // This passes arguments directly to git without shell interpretation\n const result = spawnSync(\"git\", [\"clone\", \"--depth\", \"1\", \"--quiet\", repoUrl, tempDir], {\n stdio: \"pipe\",\n timeout: 30000,\n });\n \n if (result.status !== 0) {\n return null;\n }\n } catch {\n return null;\n }\n \n const detected = await detectProject(tempDir);\n \n if (detected) {\n detected.repoHost = detectRepoHost(repoUrl);\n detected.repoUrl = repoUrl;\n }\n \n return detected;\n } catch {\n return null;\n } finally {\n if (tempDir) {\n try {\n await rm(tempDir, { recursive: true, force: true });\n } catch { /* ignore */ }\n }\n }\n}\n\n/**\n * Detect project info from a remote Git URL\n * Strategy: Try API first (GitHub/GitLab), fallback to shallow clone\n */\nexport async function detectFromRemoteUrl(repoUrl: string): Promise<DetectedProject | null> {\n const host = detectRepoHost(repoUrl);\n \n // Try API-based detection first (faster)\n if (host === \"github\") {\n const result = await detectFromGitHubApi(repoUrl);\n if (result) return result;\n }\n \n if (host === \"gitlab\") {\n const result = await detectFromGitLabApi(repoUrl);\n if (result) return result;\n }\n \n // Fallback to shallow clone for other hosts or if API fails\n return detectFromShallowClone(repoUrl);\n}\n\n/**\n * Check if a string looks like a Git URL\n */\nexport function isGitUrl(str: string): boolean {\n const patterns = [\n /^https?:\\/\\/[^/]+\\/.*$/,\n /^git@[^:]+:.*$/,\n /^git:\\/\\/.*$/,\n /^ssh:\\/\\/.*$/,\n ];\n return patterns.some(p => p.test(str.trim()));\n}\n\n// ═══════════════════════════════════════════════════════════════\n// AI AGENT COMMAND DETECTION\n// ═══════════════════════════════════════════════════════════════\n\n/**\n * Command file definition for AI IDE slash commands\n */\nexport interface CommandFileInfo {\n /** Full path to the command file */\n path: string;\n /** Filename without extension */\n name: string;\n /** Command type (cursor-command, claude-command, windsurf-workflow, etc.) */\n type: \"cursor-command\" | \"claude-command\" | \"windsurf-workflow\" | \"copilot-prompt\" | \"continue-prompt\" | \"opencode-command\";\n /** Content of the command file */\n content: string;\n /** IDE platform this command belongs to */\n platform: \"cursor\" | \"claude\" | \"windsurf\" | \"copilot\" | \"continue\" | \"opencode\";\n /** Template type for database storage */\n templateType: \"CURSOR_COMMAND\" | \"CLAUDE_COMMAND\" | \"WINDSURF_WORKFLOW\" | \"COPILOT_PROMPT\" | \"CONTINUE_PROMPT\" | \"OPENCODE_COMMAND\";\n}\n\n/**\n * Known command directories for various AI IDEs\n * \n * All commands are markdown files - conversion between formats is just renaming/moving.\n * The content is plain markdown text, no special format required.\n */\nconst COMMAND_DIRECTORIES = [\n { directory: \".cursor/commands\", type: \"cursor-command\" as const, platform: \"cursor\" as const, templateType: \"CURSOR_COMMAND\" as const },\n { directory: \".claude/commands\", type: \"claude-command\" as const, platform: \"claude\" as const, templateType: \"CLAUDE_COMMAND\" as const },\n { directory: \".windsurf/workflows\", type: \"windsurf-workflow\" as const, platform: \"windsurf\" as const, templateType: \"WINDSURF_WORKFLOW\" as const },\n { directory: \".copilot/prompts\", type: \"copilot-prompt\" as const, platform: \"copilot\" as const, templateType: \"COPILOT_PROMPT\" as const },\n { directory: \".continue/prompts\", type: \"continue-prompt\" as const, platform: \"continue\" as const, templateType: \"CONTINUE_PROMPT\" as const },\n { directory: \".opencode/commands\", type: \"opencode-command\" as const, platform: \"opencode\" as const, templateType: \"OPENCODE_COMMAND\" as const },\n];\n\n/**\n * Detect command files in a directory\n * Scans known command directories for AI IDE slash commands\n */\nexport async function detectCommandFiles(cwd: string): Promise<CommandFileInfo[]> {\n const commands: CommandFileInfo[] = [];\n const { readdir, readFile: readFileAsync } = await import(\"fs/promises\");\n \n for (const cmdDir of COMMAND_DIRECTORIES) {\n const dirPath = join(cwd, cmdDir.directory);\n \n try {\n await access(dirPath);\n const entries = await readdir(dirPath, { withFileTypes: true });\n \n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".md\")) {\n const filePath = join(dirPath, entry.name);\n try {\n const content = await readFileAsync(filePath, \"utf-8\");\n const name = entry.name.replace(/\\.md$/, \"\");\n \n commands.push({\n path: filePath,\n name,\n type: cmdDir.type,\n content,\n platform: cmdDir.platform,\n templateType: cmdDir.templateType,\n });\n } catch {\n // Skip files we can't read\n }\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n \n return commands;\n}\n\n/**\n * Detect if a file path is a command file\n */\nexport function isCommandFilePath(filePath: string): boolean {\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n return COMMAND_DIRECTORIES.some(cmd => normalizedPath.includes(cmd.directory));\n}\n\n/**\n * Infer command type from file path\n */\nexport function inferCommandTypeFromPath(filePath: string): { type: string; platform: string; templateType: string } | null {\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n const match = COMMAND_DIRECTORIES.find(cmd => normalizedPath.includes(cmd.directory));\n \n if (match) {\n return {\n type: match.type,\n platform: match.platform,\n templateType: match.templateType,\n };\n }\n \n return null;\n}\n\n/**\n * Get command directories to scan\n */\nexport function getCommandDirectories(): { directory: string; type: string; platform: string; templateType: string }[] {\n return COMMAND_DIRECTORIES;\n}\n\n/**\n * Convert a command from one IDE format to another\n * Currently both Cursor and Claude Code use markdown, so this is mostly about file placement\n */\nexport function convertCommandFormat(\n content: string,\n _fromType: string,\n toType: string\n): { content: string; directory: string; extension: string } {\n const targetDir = COMMAND_DIRECTORIES.find(d => d.type === toType);\n if (!targetDir) {\n throw new Error(`Unknown command type: ${toType}`);\n }\n \n // Both formats use markdown, so content stays the same\n // Future: if formats diverge, add conversion logic here\n return {\n content,\n directory: targetDir.directory,\n extension: \".md\",\n };\n}\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport ora from \"ora\";\nimport * as readline from \"readline\";\nimport * as os from \"os\";\nimport { writeFile, mkdir, access, readFile } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { detectProject, detectFromRemoteUrl, isGitUrl } from \"../utils/detect.js\";\nimport { generateConfig, GenerateOptions, parseVariablesString } from \"../utils/generator.js\";\nimport { isAuthenticated, getUser } from \"../config.js\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport {\n LANGUAGES as SHARED_LANGUAGES,\n FRAMEWORKS as SHARED_FRAMEWORKS,\n DATABASES as SHARED_DATABASES,\n TEST_FRAMEWORKS as SHARED_TEST_FRAMEWORKS,\n} from \"../utils/wizard-options.js\";\n\n// Draft management - local storage in .lynxprompt/drafts/\nconst DRAFTS_DIR = \".lynxprompt/drafts\";\n\n// CLI version injected at build time via tsup.config.ts\n// Falls back to \"unknown\" if not defined (shouldn't happen in production builds)\nconst CLI_VERSION: string = process.env.CLI_VERSION || \"unknown\";\n\ninterface WizardDraft {\n name: string;\n savedAt: string;\n config: Record<string, unknown>;\n stepReached?: number;\n // Version tracking - added to detect draft/tool version mismatches\n source: \"cli\" | \"web\";\n version: string;\n}\n\nasync function saveDraftLocally(name: string, config: Record<string, unknown>, stepReached?: number): Promise<void> {\n const draftsPath = join(process.cwd(), DRAFTS_DIR);\n await mkdir(draftsPath, { recursive: true });\n \n const draft: WizardDraft = {\n name,\n savedAt: new Date().toISOString(),\n config,\n stepReached,\n source: \"cli\",\n version: CLI_VERSION,\n };\n \n const filename = `${name.replace(/[^a-zA-Z0-9-_]/g, \"_\")}.json`;\n await writeFile(join(draftsPath, filename), JSON.stringify(draft, null, 2), \"utf-8\");\n}\n\nasync function loadDraftLocally(name: string): Promise<WizardDraft | null> {\n try {\n const filename = `${name.replace(/[^a-zA-Z0-9-_]/g, \"_\")}.json`;\n const filepath = join(process.cwd(), DRAFTS_DIR, filename);\n const content = await readFile(filepath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nasync function listLocalDrafts(): Promise<string[]> {\n try {\n const draftsPath = join(process.cwd(), DRAFTS_DIR);\n await access(draftsPath);\n const files = await import(\"fs/promises\").then(fs => fs.readdir(draftsPath));\n return files\n .filter(f => f.endsWith(\".json\"))\n .map(f => f.replace(\".json\", \"\"));\n } catch {\n return [];\n }\n}\n\n// File paths for static files detection\nconst STATIC_FILE_PATHS: Record<string, string> = {\n editorconfig: \".editorconfig\",\n contributing: \"CONTRIBUTING.md\",\n codeOfConduct: \"CODE_OF_CONDUCT.md\",\n security: \"SECURITY.md\",\n roadmap: \"ROADMAP.md\",\n gitignore: \".gitignore\",\n funding: \".github/FUNDING.yml\",\n license: \"LICENSE\",\n readme: \"README.md\",\n architecture: \"ARCHITECTURE.md\",\n changelog: \"CHANGELOG.md\",\n};\n\n// Check if a file exists and read its content\nasync function readExistingFile(filePath: string): Promise<string | null> {\n try {\n await access(filePath);\n const content = await readFile(filePath, \"utf-8\");\n return content;\n } catch {\n return null;\n }\n}\n\n// Multi-line input reader using EOF terminator\nasync function readMultilineInput(prompt: string): Promise<string> {\n console.log(chalk.white(prompt));\n console.log(chalk.gray(\" (Paste your content, then type EOF on a new line and press Enter to finish)\"));\n console.log(chalk.gray(\" (Press Enter twice to skip)\"));\n console.log();\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const lines: string[] = [];\n let emptyLineCount = 0;\n\n rl.on(\"line\", (line) => {\n if (line.trim() === \"EOF\") {\n rl.close();\n resolve(lines.join(\"\\n\"));\n return;\n }\n \n if (line === \"\") {\n emptyLineCount++;\n if (emptyLineCount >= 2 && lines.length === 0) {\n // Two empty lines at start = skip\n rl.close();\n resolve(\"\");\n return;\n }\n } else {\n emptyLineCount = 0;\n }\n \n lines.push(line);\n });\n\n rl.on(\"close\", () => {\n resolve(lines.join(\"\\n\"));\n });\n });\n}\n\ninterface WizardOptions {\n name?: string;\n description?: string;\n stack?: string;\n platforms?: string;\n format?: string;\n persona?: string;\n boundaries?: string;\n preset?: string;\n yes?: boolean;\n // New options\n output?: string;\n repoUrl?: string;\n blueprint?: boolean;\n license?: string;\n ciCd?: string;\n projectType?: string;\n detectOnly?: boolean;\n loadDraft?: string;\n saveDraft?: string;\n vars?: string;\n // Internal: for resuming from a draft\n _resumeFromStep?: number;\n _draftAnswers?: Record<string, unknown>;\n}\n\ninterface WizardStep {\n id: string;\n title: string;\n icon: string;\n}\n\n// All 12 wizard steps — available to all users\nconst WIZARD_STEPS: WizardStep[] = [\n { id: \"format\", title: \"Output Format\", icon: \"📤\" },\n { id: \"project\", title: \"Project Basics\", icon: \"✨\" },\n { id: \"tech\", title: \"Tech Stack\", icon: \"💻\" },\n { id: \"repo\", title: \"Repository Setup\", icon: \"🔀\" },\n { id: \"security\", title: \"Security\", icon: \"🔐\" },\n { id: \"commands\", title: \"Commands\", icon: \"📋\" },\n { id: \"code_style\", title: \"Code Style\", icon: \"🪄\" },\n { id: \"ai\", title: \"AI Behavior\", icon: \"🧠\" },\n { id: \"boundaries\", title: \"Boundaries\", icon: \"🛡️\" },\n { id: \"testing\", title: \"Testing Strategy\", icon: \"🧪\" },\n { id: \"static\", title: \"Static Files\", icon: \"📄\" },\n { id: \"extra\", title: \"Final Details\", icon: \"💬\" },\n];\n\n/**\n * All supported platforms (30+ and growing!)\n * \n * IMPORTANT: Keep in sync with src/lib/platforms.ts (the single source of truth)\n * When adding new platforms, update both files!\n */\nconst ALL_PLATFORMS = [\n // Popular platforms\n { id: \"universal\", name: \"Universal (AGENTS.md)\", file: \"AGENTS.md\", icon: \"🌐\", note: \"Works with Claude Code, Copilot, Aider, and many others\" },\n { id: \"cursor\", name: \"Cursor\", file: \".cursor/rules/\", icon: \"⚡\", note: \"AI-powered code editor with native rules\" },\n { id: \"claude\", name: \"Claude Code\", file: \"CLAUDE.md\", icon: \"🧠\", note: \"Anthropic's agentic coding tool\" },\n { id: \"copilot\", name: \"GitHub Copilot\", file: \".github/copilot-instructions.md\", icon: \"🐙\", note: \"GitHub's AI pair programmer\" },\n { id: \"windsurf\", name: \"Windsurf\", file: \".windsurfrules\", icon: \"🏄\", note: \"Codeium's AI-native IDE\" },\n // AI IDEs\n { id: \"antigravity\", name: \"Antigravity\", file: \"GEMINI.md\", icon: \"💎\", note: \"Google's Gemini-powered IDE\" },\n { id: \"zed\", name: \"Zed\", file: \".zed/instructions.md\", icon: \"⚡\", note: \"High-performance editor with AI\" },\n { id: \"void\", name: \"Void\", file: \".void/config.json\", icon: \"🕳️\", note: \"Open-source Cursor alternative\" },\n { id: \"trae\", name: \"Trae AI\", file: \".trae/rules/\", icon: \"🔷\", note: \"ByteDance's AI IDE\" },\n { id: \"firebase\", name: \"Firebase Studio\", file: \".idx/\", icon: \"🔥\", note: \"Google's cloud IDE\" },\n // Editor extensions\n { id: \"cline\", name: \"Cline\", file: \".clinerules\", icon: \"🔧\", note: \"Autonomous coding agent for VS Code\" },\n { id: \"roocode\", name: \"Roo Code\", file: \".roo/rules/\", icon: \"🦘\", note: \"AI coding assistant for VS Code\" },\n { id: \"continue\", name: \"Continue\", file: \".continue/config.json\", icon: \"➡️\", note: \"Open-source AI autopilot\" },\n { id: \"cody\", name: \"Sourcegraph Cody\", file: \".cody/config.json\", icon: \"🔍\", note: \"Context-aware AI assistant\" },\n { id: \"tabnine\", name: \"Tabnine\", file: \".tabnine.yaml\", icon: \"📝\", note: \"AI code completion\" },\n { id: \"supermaven\", name: \"Supermaven\", file: \".supermaven/config.json\", icon: \"🦸\", note: \"Fast AI code completions\" },\n { id: \"codegpt\", name: \"CodeGPT\", file: \".codegpt/config.json\", icon: \"💬\", note: \"VS Code AI assistant\" },\n { id: \"amazonq\", name: \"Amazon Q\", file: \".amazonq/rules/\", icon: \"📦\", note: \"AWS AI coding companion\" },\n { id: \"augment\", name: \"Augment Code\", file: \".augment/rules/\", icon: \"🔮\", note: \"AI code augmentation\" },\n { id: \"kilocode\", name: \"Kilo Code\", file: \".kilocode/rules/\", icon: \"📊\", note: \"AI code generation\" },\n { id: \"junie\", name: \"Junie\", file: \".junie/guidelines.md\", icon: \"🎯\", note: \"JetBrains AI assistant\" },\n { id: \"kiro\", name: \"Kiro\", file: \".kiro/steering/\", icon: \"🚀\", note: \"AWS spec-driven agent\" },\n // CLI tools\n { id: \"aider\", name: \"Aider\", file: \"AIDER.md\", icon: \"🤖\", note: \"AI pair programming in terminal\" },\n { id: \"goose\", name: \"Goose\", file: \".goosehints\", icon: \"🪿\", note: \"Block's AI coding agent\" },\n { id: \"warp\", name: \"Warp AI\", file: \"WARP.md\", icon: \"🚀\", note: \"AI-powered terminal\" },\n { id: \"gemini-cli\", name: \"Gemini CLI\", file: \"GEMINI.md\", icon: \"💎\", note: \"Google's Gemini in terminal\" },\n { id: \"opencode\", name: \"Open Code\", file: \"opencode.json\", icon: \"🔓\", note: \"Open-source AI coding\" },\n // Other\n { id: \"openhands\", name: \"OpenHands\", file: \".openhands/microagents/repo.md\", icon: \"🤲\", note: \"Open-source AI agent\" },\n { id: \"crush\", name: \"Crush\", file: \"CRUSH.md\", icon: \"💥\", note: \"AI coding assistant\" },\n { id: \"firebender\", name: \"Firebender\", file: \"firebender.json\", icon: \"🔥\", note: \"AI code transformation\" },\n];\n\n\n// Languages, frameworks, and databases imported from shared package (wizard-options.ts)\nconst LANGUAGES = SHARED_LANGUAGES;\nconst FRAMEWORKS = SHARED_FRAMEWORKS;\nconst DATABASES = SHARED_DATABASES;\n\n// Package managers (JS/TS only)\nconst PACKAGE_MANAGERS = [\n { title: \"📦 npm\", value: \"npm\", desc: \"Node Package Manager (default)\" },\n { title: \"🧶 Yarn\", value: \"yarn\", desc: \"Fast, reliable, and secure\" },\n { title: \"📀 pnpm\", value: \"pnpm\", desc: \"Fast, disk space efficient\" },\n { title: \"🥟 Bun\", value: \"bun\", desc: \"All-in-one JS runtime + PM\" },\n];\n\n// JS/TS Runtimes\nconst JS_RUNTIMES = [\n { title: \"🟢 Node.js\", value: \"node\", desc: \"Standard JavaScript runtime\" },\n { title: \"🦕 Deno\", value: \"deno\", desc: \"Secure runtime with TypeScript\" },\n { title: \"🥟 Bun\", value: \"bun\", desc: \"Fast all-in-one JS runtime\" },\n];\n\n// Monorepo tools\nconst MONOREPO_TOOLS = [\n { title: \"📁 None\", value: \"\", desc: \"Single package repository\" },\n { title: \"⚡ Turborepo\", value: \"turborepo\", desc: \"High-performance build system\" },\n { title: \"🔷 Nx\", value: \"nx\", desc: \"Smart, extensible build framework\" },\n { title: \"🐉 Lerna\", value: \"lerna\", desc: \"Multi-package repositories\" },\n { title: \"📀 pnpm Workspaces\", value: \"pnpm_workspaces\", desc: \"Native pnpm monorepo\" },\n { title: \"🧶 Yarn Workspaces\", value: \"yarn_workspaces\", desc: \"Native Yarn monorepo\" },\n { title: \"📦 npm Workspaces\", value: \"npm_workspaces\", desc: \"Native npm monorepo\" },\n];\n\n// ORMs by language\nconst ORM_OPTIONS = [\n { title: \"📝 None / Raw SQL\", value: \"\", langs: [] },\n // JavaScript/TypeScript\n { title: \"🔷 Prisma\", value: \"prisma\", langs: [\"javascript\", \"typescript\"] },\n { title: \"💧 Drizzle\", value: \"drizzle\", langs: [\"javascript\", \"typescript\"] },\n { title: \"🔶 TypeORM\", value: \"typeorm\", langs: [\"javascript\", \"typescript\"] },\n { title: \"📘 Sequelize\", value: \"sequelize\", langs: [\"javascript\", \"typescript\"] },\n { title: \"🔧 Knex.js\", value: \"knex\", langs: [\"javascript\", \"typescript\"] },\n { title: \"🎯 Kysely\", value: \"kysely\", langs: [\"javascript\", \"typescript\"] },\n // Python\n { title: \"🐍 SQLAlchemy\", value: \"sqlalchemy\", langs: [\"python\"] },\n { title: \"🎸 Django ORM\", value: \"django_orm\", langs: [\"python\"] },\n { title: \"🐢 Tortoise ORM\", value: \"tortoise\", langs: [\"python\"] },\n { title: \"⚡ SQLModel\", value: \"sqlmodel\", langs: [\"python\"] },\n // Go\n { title: \"🐹 GORM\", value: \"gorm\", langs: [\"go\"] },\n { title: \"🏗️ Ent\", value: \"ent\", langs: [\"go\"] },\n { title: \"📝 sqlc\", value: \"sqlc\", langs: [\"go\"] },\n // Rust\n { title: \"🦀 Diesel\", value: \"diesel\", langs: [\"rust\"] },\n { title: \"🌊 SeaORM\", value: \"sea-orm\", langs: [\"rust\"] },\n { title: \"📦 SQLx\", value: \"sqlx\", langs: [\"rust\"] },\n // Java/Kotlin\n { title: \"☕ Hibernate\", value: \"hibernate\", langs: [\"java\", \"kotlin\"] },\n { title: \"🎵 jOOQ\", value: \"jooq\", langs: [\"java\", \"kotlin\"] },\n // .NET\n { title: \"🔷 Entity Framework\", value: \"ef_core\", langs: [\"csharp\"] },\n { title: \"⚡ Dapper\", value: \"dapper\", langs: [\"csharp\"] },\n // Ruby\n { title: \"💎 ActiveRecord\", value: \"activerecord\", langs: [\"ruby\"] },\n // PHP\n { title: \"🐘 Eloquent\", value: \"eloquent\", langs: [\"php\"] },\n { title: \"📖 Doctrine\", value: \"doctrine\", langs: [\"php\"] },\n];\n\n// Repository hosts\nconst REPO_HOSTS = [\n { id: \"github\", label: \"GitHub\", icon: \"🐙\" },\n { id: \"gitlab\", label: \"GitLab\", icon: \"🦊\" },\n { id: \"bitbucket\", label: \"Bitbucket\", icon: \"🪣\" },\n { id: \"gitea\", label: \"Gitea\", icon: \"🍵\" },\n { id: \"azure\", label: \"Azure DevOps\", icon: \"☁️\" },\n { id: \"other\", label: \"Other\", icon: \"📦\" },\n];\n\n// Licenses\nconst LICENSES = [\n { id: \"mit\", label: \"MIT\" },\n { id: \"apache-2.0\", label: \"Apache 2.0\" },\n { id: \"gpl-3.0\", label: \"GPL 3.0\" },\n { id: \"lgpl-3.0\", label: \"LGPL 3.0\" },\n { id: \"agpl-3.0\", label: \"AGPL 3.0\" },\n { id: \"bsd-3\", label: \"BSD 3-Clause\" },\n { id: \"mpl-2.0\", label: \"MPL 2.0\" },\n { id: \"unlicense\", label: \"Unlicense\" },\n { id: \"none\", label: \"None / Proprietary\" },\n];\n\n// CI/CD platforms\nconst CICD_OPTIONS = [\n { id: \"github_actions\", label: \"GitHub Actions\", icon: \"🐙\" },\n { id: \"gitlab_ci\", label: \"GitLab CI\", icon: \"🦊\" },\n { id: \"jenkins\", label: \"Jenkins\", icon: \"🔧\" },\n { id: \"circleci\", label: \"CircleCI\", icon: \"⚫\" },\n { id: \"travis\", label: \"Travis CI\", icon: \"🔨\" },\n { id: \"azure_devops\", label: \"Azure DevOps\", icon: \"☁️\" },\n { id: \"bitbucket\", label: \"Bitbucket Pipelines\", icon: \"🪣\" },\n { id: \"teamcity\", label: \"TeamCity\", icon: \"🏢\" },\n { id: \"drone\", label: \"Drone\", icon: \"🚁\" },\n { id: \"buildkite\", label: \"Buildkite\", icon: \"🧱\" },\n { id: \"concourse\", label: \"Concourse\", icon: \"✈️\" },\n { id: \"woodpecker\", label: \"Woodpecker\", icon: \"🐦\" },\n { id: \"argocd\", label: \"ArgoCD\", icon: \"🐙\" },\n { id: \"fluxcd\", label: \"FluxCD\", icon: \"🔄\" },\n { id: \"none\", label: \"None / Manual\", icon: \"🔧\" },\n { id: \"other\", label: \"Other\", icon: \"📦\" },\n];\n\n// Cloud deployment targets\nconst CLOUD_TARGETS = [\n { id: \"vercel\", label: \"Vercel\", icon: \"▲ \" },\n { id: \"netlify\", label: \"Netlify\", icon: \"🌐\" },\n { id: \"cloudflare_pages\", label: \"Cloudflare Pages\", icon: \"🔶\" },\n { id: \"cloudflare_workers\", label: \"Cloudflare Workers\", icon: \"🔶\" },\n { id: \"aws_lambda\", label: \"AWS Lambda\", icon: \"☁️ \" },\n { id: \"aws_ecs\", label: \"AWS ECS\", icon: \"☁️ \" },\n { id: \"aws_ec2\", label: \"AWS EC2\", icon: \"☁️ \" },\n { id: \"gcp_cloudrun\", label: \"GCP Cloud Run\", icon: \"🌈\" },\n { id: \"gcp_appengine\", label: \"GCP App Engine\", icon: \"🌈\" },\n { id: \"azure_appservice\", label: \"Azure App Service\", icon: \"🔷\" },\n { id: \"azure_functions\", label: \"Azure Functions\", icon: \"🔷\" },\n { id: \"railway\", label: \"Railway\", icon: \"🚂\" },\n { id: \"render\", label: \"Render\", icon: \"🎨\" },\n { id: \"fly\", label: \"Fly.io\", icon: \"✈️ \" },\n { id: \"heroku\", label: \"Heroku\", icon: \"🟣\" },\n { id: \"digitalocean_app\", label: \"DigitalOcean App Platform\", icon: \"🔵\" },\n { id: \"deno_deploy\", label: \"Deno Deploy\", icon: \"🦕\" },\n];\n\n// Self-hosted deployment targets\nconst SELF_HOSTED_TARGETS = [\n { id: \"docker\", label: \"Docker\", icon: \"🐳\" },\n { id: \"docker_compose\", label: \"Docker Compose\", icon: \"🐳\" },\n { id: \"kubernetes\", label: \"Kubernetes\", icon: \"☸️ \" },\n { id: \"k3s\", label: \"K3s\", icon: \"☸️ \" },\n { id: \"podman\", label: \"Podman\", icon: \"🦭\" },\n { id: \"bare_metal\", label: \"Bare Metal\", icon: \"🖥️ \" },\n { id: \"vm\", label: \"Virtual Machine\", icon: \"💻\" },\n { id: \"proxmox\", label: \"Proxmox\", icon: \"🔷\" },\n { id: \"unraid\", label: \"Unraid\", icon: \"🟠\" },\n { id: \"truenas\", label: \"TrueNAS\", icon: \"🔵\" },\n { id: \"synology\", label: \"Synology NAS\", icon: \"📁\" },\n { id: \"coolify\", label: \"Coolify\", icon: \"❄️ \" },\n { id: \"dokku\", label: \"Dokku\", icon: \"🐳\" },\n { id: \"caprover\", label: \"CapRover\", icon: \"🚢\" },\n { id: \"portainer\", label: \"Portainer\", icon: \"🐋\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\" },\n];\n\n// Container registries\nconst CONTAINER_REGISTRIES = [\n { id: \"dockerhub\", label: \"Docker Hub\", icon: \"🐳\" },\n { id: \"ghcr\", label: \"GitHub Container Registry\", icon: \"🐙\" },\n { id: \"gcr\", label: \"Google Container Registry\", icon: \"🌈\" },\n { id: \"ecr\", label: \"AWS ECR\", icon: \"☁️\" },\n { id: \"acr\", label: \"Azure Container Registry\", icon: \"🔷\" },\n { id: \"quay\", label: \"Quay.io\", icon: \"🔴\" },\n { id: \"gitlab\", label: \"GitLab Registry\", icon: \"🦊\" },\n { id: \"custom\", label: \"Custom/Self-hosted\", icon: \"🏠\" },\n];\n\n// Common commands by category - expanded to match WebUI\nconst COMMON_COMMANDS = {\n build: [\n // JavaScript/Node\n \"npm run build\", \"pnpm build\", \"yarn build\", \"bun run build\",\n \"next build\", \"vite build\", \"tsc\", \"tsc --noEmit\",\n \"esbuild\", \"rollup -c\", \"webpack\", \"parcel build\",\n // Python\n \"python setup.py build\", \"pip install -e .\", \"poetry build\", \"pdm build\", \"hatch build\",\n // Go\n \"go build\", \"go build ./...\", \"go install\",\n // Rust\n \"cargo build\", \"cargo build --release\",\n // Java/JVM\n \"mvn package\", \"mvn clean install\", \"gradle build\",\n // .NET\n \"dotnet build\", \"dotnet publish\",\n // Ruby\n \"bundle exec rake build\", \"gem build\",\n // PHP\n \"composer install\", \"composer dump-autoload\",\n // Docker\n \"docker build -t app .\", \"docker compose build\",\n // Make\n \"make\", \"make build\", \"make all\",\n ],\n test: [\n // JavaScript/Node\n \"npm test\", \"pnpm test\", \"yarn test\", \"bun test\",\n \"vitest\", \"vitest run\", \"jest\", \"jest --coverage\",\n \"mocha\", \"ava\", \"tap\",\n // E2E\n \"playwright test\", \"cypress run\", \"cypress open\",\n \"puppeteer\", \"selenium\",\n // Python\n \"pytest\", \"pytest --cov\", \"pytest -xvs\",\n \"unittest\", \"nose2\", \"hypothesis\",\n // Go\n \"go test ./...\", \"go test -v ./...\", \"go test -race ./...\",\n // Rust\n \"cargo test\", \"cargo test --release\",\n // Java/JVM\n \"mvn test\", \"gradle test\", \"mvn verify\",\n // .NET\n \"dotnet test\",\n // Ruby\n \"bundle exec rspec\", \"rake test\",\n // PHP\n \"phpunit\", \"pest\",\n // Docker\n \"docker compose run test\",\n ],\n lint: [\n // JavaScript/Node\n \"npm run lint\", \"pnpm lint\", \"eslint .\", \"eslint . --fix\",\n \"prettier --check .\", \"prettier --write .\",\n \"biome check\", \"biome check --apply\",\n // Python\n \"ruff check\", \"ruff check --fix\", \"ruff format\",\n \"black .\", \"black --check .\",\n \"flake8\", \"pylint\", \"mypy .\",\n // Go\n \"golangci-lint run\", \"go fmt ./...\", \"go vet ./...\",\n // Rust\n \"cargo clippy\", \"cargo fmt\", \"cargo fmt --check\",\n // Java\n \"mvn checkstyle:check\", \"gradle spotlessCheck\",\n // Ruby\n \"rubocop\", \"rubocop -a\",\n // PHP\n \"php-cs-fixer fix\", \"phpcs\", \"phpstan analyse\",\n // General\n \"pre-commit run --all-files\",\n ],\n dev: [\n // JavaScript/Node\n \"npm run dev\", \"pnpm dev\", \"yarn dev\", \"bun run dev\",\n \"next dev\", \"vite\", \"vite dev\",\n \"nodemon\", \"ts-node-dev\",\n // Python\n \"uvicorn main:app --reload\", \"flask run\", \"python manage.py runserver\",\n \"gunicorn --reload\", \"hypercorn --reload\",\n // Go\n \"go run .\", \"air\", \"reflex\",\n // Rust\n \"cargo run\", \"cargo watch -x run\",\n // Java\n \"mvn spring-boot:run\", \"gradle bootRun\",\n // .NET\n \"dotnet run\", \"dotnet watch run\",\n // Ruby\n \"rails server\", \"bundle exec rails s\",\n // PHP\n \"php artisan serve\", \"symfony server:start\",\n // Docker\n \"docker compose up\", \"docker compose up -d\",\n ],\n format: [\n // JavaScript/Node\n \"prettier --write .\", \"npm run format\", \"pnpm format\",\n \"biome format --write .\", \"dprint fmt\",\n // Python\n \"black .\", \"ruff format .\", \"isort .\", \"autopep8 --in-place -r .\",\n // Go\n \"go fmt ./...\", \"gofmt -w .\", \"goimports -w .\",\n // Rust\n \"cargo fmt\",\n // Other\n \"shfmt -w .\", \"terraform fmt -recursive\",\n ],\n typecheck: [\n // TypeScript\n \"tsc --noEmit\", \"npm run typecheck\", \"pnpm typecheck\",\n \"vue-tsc --noEmit\", \"tsc -b\",\n // Python\n \"mypy .\", \"pyright\", \"pyre check\",\n // Go\n \"go vet ./...\", \"staticcheck ./...\",\n // Rust\n \"cargo check\",\n ],\n clean: [\n // JavaScript/Node\n \"npm run clean\", \"rm -rf node_modules\", \"rm -rf dist\",\n \"rm -rf .next\", \"rm -rf build\", \"rm -rf coverage\",\n // Python\n \"rm -rf __pycache__\", \"find . -name '*.pyc' -delete\",\n // Go\n \"go clean -cache\", \"go clean -testcache\",\n // Rust\n \"cargo clean\",\n // Docker\n \"docker system prune -af\", \"docker compose down -v\",\n // Make\n \"make clean\",\n ],\n preCommit: [\n // JavaScript\n \"npx husky install\", \"pnpm dlx husky install\", \"lefthook install\",\n \"lint-staged\", \"npx lint-staged\", \"simple-git-hooks\",\n // Python\n \"pre-commit install\", \"pre-commit run --all-files\",\n ],\n additional: [\n // Database\n \"npm run db:push\", \"npm run db:migrate\", \"prisma migrate dev\",\n \"alembic upgrade head\", \"flask db upgrade\",\n \"rails db:migrate\", \"rake db:migrate\",\n // Codegen\n \"npm run codegen\", \"graphql-codegen\", \"prisma generate\",\n // Docs\n \"npm run docs\", \"mkdocs serve\", \"sphinx-build\",\n // Deploy\n \"npm run deploy\", \"vercel\", \"netlify deploy\",\n \"flyctl deploy\", \"railway up\",\n ],\n};\n\n// Naming conventions - \"Follow language conventions\" is the recommended default\nconst NAMING_CONVENTIONS = [\n { id: \"language_default\", label: \"Follow language conventions\", desc: \"Use idiomatic style (recommended)\" },\n { id: \"camelCase\", label: \"camelCase\", desc: \"JavaScript, TypeScript, Java\" },\n { id: \"snake_case\", label: \"snake_case\", desc: \"Python, Ruby, Rust, Go\" },\n { id: \"PascalCase\", label: \"PascalCase\", desc: \"C#, .NET classes\" },\n { id: \"kebab-case\", label: \"kebab-case\", desc: \"CSS, HTML, URLs\" },\n];\n\n// Error handling patterns\nconst ERROR_PATTERNS = [\n { id: \"try_catch\", label: \"try/catch blocks\" },\n { id: \"result_types\", label: \"Result/Either types\" },\n { id: \"error_codes\", label: \"Error codes\" },\n { id: \"exceptions\", label: \"Custom exceptions\" },\n { id: \"other\", label: \"Other\" },\n];\n\n// Logging conventions - matching WebUI\nconst LOGGING_OPTIONS = [\n { id: \"structured_json\", label: \"Structured JSON\" },\n { id: \"console_log\", label: \"Console.log (dev)\" },\n { id: \"log_levels\", label: \"Log Levels (debug/info/warn/error)\" },\n { id: \"pino\", label: \"Pino\" },\n { id: \"winston\", label: \"Winston\" },\n { id: \"bunyan\", label: \"Bunyan\" },\n { id: \"python_logging\", label: \"Python logging\" },\n { id: \"log4j\", label: \"Log4j / SLF4J\" },\n { id: \"serilog\", label: \"Serilog\" },\n { id: \"opentelemetry\", label: \"OpenTelemetry\" },\n { id: \"other\", label: \"Other\" },\n];\n\n// AI Behavior rules - matching WebUI (security moved to dedicated Security step)\nconst AI_BEHAVIOR_RULES = [\n { id: \"always_debug_after_build\", label: \"Always Debug After Building\", description: \"AI should build and run code locally to verify changes work before suggesting them as complete\", recommended: true },\n { id: \"check_logs_after_build\", label: \"Check Logs After Build/Commit\", description: \"AI should review build output, test logs, and error messages to catch issues early\", recommended: true },\n { id: \"run_tests_before_commit\", label: \"Run Tests Before Commit\", description: \"AI must run the test suite and ensure all tests pass before suggesting a commit\", recommended: true },\n { id: \"follow_existing_patterns\", label: \"Follow Existing Patterns\", description: \"AI should study existing code and follow the same naming, structure, and conventions used in the codebase\", recommended: true },\n { id: \"ask_before_large_refactors\", label: \"Ask Before Large Refactors\", description: \"AI should always ask for explicit approval before making significant architectural changes or refactoring multiple files\", recommended: true },\n // Burke Holland-inspired rules\n { id: \"code_for_llms\", label: \"Code for LLMs\", description: \"Optimize code for LLM reasoning: flat/explicit patterns, minimal abstractions, structured logging\" },\n { id: \"self_improving\", label: \"Self-Improving Config\", description: \"AI updates this config file when it learns new project patterns or conventions\" },\n { id: \"verify_work\", label: \"Always Verify Work\", description: \"Run tests, check builds, and confirm changes work before returning control\", recommended: true },\n { id: \"terminal_management\", label: \"Terminal Management\", description: \"Reuse existing terminals and close unused ones\" },\n { id: \"check_docs_first\", label: \"Check Docs First\", description: \"Check documentation via MCP or project docs before assuming knowledge about APIs\" },\n];\n\n// ═══════════════════════════════════════════════════════════════\n// SECURITY OPTIONS (FREE tier - new dedicated section)\n// ═══════════════════════════════════════════════════════════════\n\n// Secrets management strategies\nconst SECRETS_MANAGEMENT_OPTIONS = [\n { id: \"env_vars\", label: \"Environment Variables\", description: \"Use .env files locally, env vars in prod\", recommended: true },\n { id: \"dotenv\", label: \"dotenv / dotenvx\", description: \"Load .env files with dotenv library\" },\n { id: \"vault\", label: \"HashiCorp Vault\", description: \"Enterprise secrets management\" },\n { id: \"aws_secrets\", label: \"AWS Secrets Manager\", description: \"AWS native secrets storage\" },\n { id: \"aws_ssm\", label: \"AWS SSM Parameter Store\", description: \"AWS Systems Manager parameters\" },\n { id: \"gcp_secrets\", label: \"GCP Secret Manager\", description: \"Google Cloud secrets storage\" },\n { id: \"azure_keyvault\", label: \"Azure Key Vault\", description: \"Azure secrets and keys\" },\n { id: \"infisical\", label: \"Infisical\", description: \"Open-source secrets management\" },\n { id: \"doppler\", label: \"Doppler\", description: \"Universal secrets platform\" },\n { id: \"1password\", label: \"1Password Secrets Automation\", description: \"1Password for teams/CI\" },\n { id: \"bitwarden\", label: \"Bitwarden Secrets Manager\", description: \"Bitwarden for secrets\" },\n { id: \"sops\", label: \"SOPS (Mozilla)\", description: \"Encrypted files with KMS\" },\n { id: \"age\", label: \"age encryption\", description: \"Simple file encryption\" },\n { id: \"sealed_secrets\", label: \"Sealed Secrets (K8s)\", description: \"Kubernetes encrypted secrets\" },\n { id: \"external_secrets\", label: \"External Secrets Operator\", description: \"K8s external secrets sync\" },\n { id: \"git_crypt\", label: \"git-crypt\", description: \"Transparent file encryption in git\" },\n { id: \"chamber\", label: \"Chamber\", description: \"AWS SSM-based secrets tool\" },\n { id: \"berglas\", label: \"Berglas\", description: \"GCP secrets CLI tool\" },\n { id: \"other\", label: \"Other\", description: \"Custom secrets management\" },\n];\n\n// Security tooling (scanning, dependency updates, etc.)\nconst SECURITY_TOOLING_OPTIONS = [\n { id: \"dependabot\", label: \"Dependabot\", description: \"GitHub dependency updates\", recommended: true },\n { id: \"renovate\", label: \"Renovate\", description: \"Multi-platform dependency updates\", recommended: true },\n { id: \"snyk\", label: \"Snyk\", description: \"Vulnerability scanning & fixing\" },\n { id: \"sonarqube\", label: \"SonarQube / SonarCloud\", description: \"Code quality & security\" },\n { id: \"codeql\", label: \"CodeQL\", description: \"GitHub semantic code analysis\" },\n { id: \"semgrep\", label: \"Semgrep\", description: \"Static analysis with custom rules\" },\n { id: \"trivy\", label: \"Trivy\", description: \"Container & IaC vulnerability scanner\" },\n { id: \"grype\", label: \"Grype\", description: \"Container image vulnerability scanner\" },\n { id: \"checkov\", label: \"Checkov\", description: \"IaC security scanning\" },\n { id: \"tfsec\", label: \"tfsec\", description: \"Terraform security scanner\" },\n { id: \"kics\", label: \"KICS\", description: \"IaC security scanning\" },\n { id: \"gitleaks\", label: \"Gitleaks\", description: \"Secret detection in git repos\" },\n { id: \"trufflehog\", label: \"TruffleHog\", description: \"Secret scanning in code\" },\n { id: \"detect_secrets\", label: \"detect-secrets (Yelp)\", description: \"Pre-commit secret detection\" },\n { id: \"bandit\", label: \"Bandit\", description: \"Python security linter\" },\n { id: \"brakeman\", label: \"Brakeman\", description: \"Ruby on Rails security scanner\" },\n { id: \"gosec\", label: \"gosec\", description: \"Go security checker\" },\n { id: \"npm_audit\", label: \"npm audit / yarn audit\", description: \"Node.js vulnerability check\" },\n { id: \"pip_audit\", label: \"pip-audit\", description: \"Python dependency audit\" },\n { id: \"safety\", label: \"Safety\", description: \"Python dependency checker\" },\n { id: \"bundler_audit\", label: \"bundler-audit\", description: \"Ruby gem vulnerability checker\" },\n { id: \"owasp_dependency_check\", label: \"OWASP Dependency-Check\", description: \"Known vulnerability detection\" },\n { id: \"ossf_scorecard\", label: \"OSSF Scorecard\", description: \"Open source security metrics\" },\n { id: \"socket\", label: \"Socket.dev\", description: \"Supply chain security\" },\n { id: \"mend\", label: \"Mend (WhiteSource)\", description: \"Open source security platform\" },\n { id: \"fossa\", label: \"FOSSA\", description: \"License & security compliance\" },\n { id: \"other\", label: \"Other\", description: \"Custom security tooling\" },\n];\n\n// Authentication patterns\nconst AUTH_PATTERNS_OPTIONS = [\n { id: \"oauth2\", label: \"OAuth 2.0\", description: \"Standard authorization framework\", recommended: true },\n { id: \"oidc\", label: \"OpenID Connect (OIDC)\", description: \"Identity layer on OAuth 2.0\", recommended: true },\n { id: \"jwt\", label: \"JWT (JSON Web Tokens)\", description: \"Stateless token authentication\" },\n { id: \"session\", label: \"Session-based Auth\", description: \"Server-side session management\" },\n { id: \"api_keys\", label: \"API Keys\", description: \"Simple API authentication\" },\n { id: \"basic_auth\", label: \"Basic Authentication\", description: \"Username/password (HTTPS only)\" },\n { id: \"bearer_token\", label: \"Bearer Tokens\", description: \"Token-based API auth\" },\n { id: \"mfa_totp\", label: \"MFA / TOTP\", description: \"Multi-factor with time-based OTP\" },\n { id: \"passkeys\", label: \"Passkeys / WebAuthn\", description: \"Passwordless authentication\" },\n { id: \"saml\", label: \"SAML 2.0\", description: \"Enterprise SSO protocol\" },\n { id: \"ldap\", label: \"LDAP / Active Directory\", description: \"Directory-based auth\" },\n { id: \"mutual_tls\", label: \"Mutual TLS (mTLS)\", description: \"Certificate-based auth\" },\n { id: \"auth0\", label: \"Auth0\", description: \"Identity platform\" },\n { id: \"clerk\", label: \"Clerk\", description: \"User management platform\" },\n { id: \"firebase_auth\", label: \"Firebase Auth\", description: \"Google auth service\" },\n { id: \"supabase_auth\", label: \"Supabase Auth\", description: \"Supabase auth service\" },\n { id: \"keycloak\", label: \"Keycloak\", description: \"Open source IAM\" },\n { id: \"okta\", label: \"Okta\", description: \"Enterprise identity\" },\n { id: \"cognito\", label: \"AWS Cognito\", description: \"AWS user pools\" },\n { id: \"workos\", label: \"WorkOS\", description: \"Enterprise SSO\" },\n { id: \"other\", label: \"Other\", description: \"Custom auth pattern\" },\n];\n\n// Data handling policies\nconst DATA_HANDLING_OPTIONS = [\n { id: \"encryption_at_rest\", label: \"Encryption at Rest\", description: \"Encrypt stored data\", recommended: true },\n { id: \"encryption_in_transit\", label: \"Encryption in Transit (TLS)\", description: \"HTTPS/TLS for all connections\", recommended: true },\n { id: \"pii_handling\", label: \"PII Data Handling\", description: \"Special handling for personal data\" },\n { id: \"gdpr_compliance\", label: \"GDPR Compliance\", description: \"EU data protection rules\" },\n { id: \"ccpa_compliance\", label: \"CCPA Compliance\", description: \"California privacy law\" },\n { id: \"hipaa_compliance\", label: \"HIPAA Compliance\", description: \"Healthcare data protection\" },\n { id: \"soc2_compliance\", label: \"SOC 2 Compliance\", description: \"Service organization controls\" },\n { id: \"pci_dss\", label: \"PCI-DSS Compliance\", description: \"Payment card data security\" },\n { id: \"data_masking\", label: \"Data Masking / Anonymization\", description: \"Hide sensitive data in logs/exports\" },\n { id: \"data_retention\", label: \"Data Retention Policies\", description: \"Automatic data expiration\" },\n { id: \"audit_logging\", label: \"Audit Logging\", description: \"Track data access and changes\" },\n { id: \"backup_encryption\", label: \"Encrypted Backups\", description: \"Encrypt backup data\" },\n { id: \"key_rotation\", label: \"Key Rotation\", description: \"Regular encryption key updates\" },\n { id: \"zero_trust\", label: \"Zero Trust Architecture\", description: \"Never trust, always verify\" },\n { id: \"least_privilege\", label: \"Least Privilege Access\", description: \"Minimal permissions\" },\n { id: \"rbac\", label: \"RBAC (Role-Based Access)\", description: \"Permission by role\" },\n { id: \"abac\", label: \"ABAC (Attribute-Based Access)\", description: \"Fine-grained access control\" },\n { id: \"data_classification\", label: \"Data Classification\", description: \"Classify data sensitivity levels\" },\n { id: \"dlp\", label: \"DLP (Data Loss Prevention)\", description: \"Prevent data leakage\" },\n { id: \"other\", label: \"Other\", description: \"Custom data handling\" },\n];\n\n// Important files to read - ensure consistent spacing after icons\n// Important files AI should read first (NOT AI config files - those are what we're creating)\n// Matching WebUI wizard options\nconst IMPORTANT_FILES = [\n { id: \"readme\", label: \"README.md\", icon: \"📖\", description: \"Project overview, setup instructions, and documentation\" },\n { id: \"package_json\", label: \"package.json\", icon: \"📦\", description: \"Dependencies, scripts, and project metadata\" },\n { id: \"changelog\", label: \"CHANGELOG.md\", icon: \"📝\", description: \"Version history and release notes\" },\n { id: \"contributing\", label: \"CONTRIBUTING.md\", icon: \"🤝\", description: \"Contribution guidelines and code standards\" },\n { id: \"makefile\", label: \"Makefile\", icon: \"🔧\", description: \"Build commands and automation tasks\" },\n { id: \"dockerfile\", label: \"Dockerfile\", icon: \"🐳\", description: \"Container configuration and build steps\" },\n { id: \"docker_compose\", label: \"docker-compose.yml\", icon: \"🐳\", description: \"Multi-container setup and services\" },\n { id: \"env_example\", label: \".env.example\", icon: \"🔐\", description: \"Environment variables template\" },\n { id: \"openapi\", label: \"openapi.yaml / swagger.json\", icon: \"📡\", description: \"API specification and endpoints\" },\n { id: \"architecture_md\", label: \"ARCHITECTURE.md\", icon: \"🏗️\", description: \"System architecture and design decisions\" },\n { id: \"api_docs\", label: \"API documentation\", icon: \"📚\", description: \"API reference and usage examples\" },\n { id: \"database_schema\", label: \"Database schema / migrations\", icon: \"🗄️\", description: \"Database structure and migration files\" },\n];\n\n// Detailed boundary options\nconst BOUNDARY_OPTIONS = [\n \"Delete files\",\n \"Create new files\",\n \"Rename/move files\",\n \"Rewrite large sections\",\n \"Refactor architecture\",\n \"Change dependencies\",\n \"Modify database schema\",\n \"Update API contracts\",\n \"Touch CI pipelines\",\n \"Modify Docker config\",\n \"Change environment vars\",\n \"Update docs automatically\",\n \"Edit README\",\n \"Handle secrets/credentials\",\n \"Modify auth logic\",\n \"Delete failing tests\",\n \"Skip tests temporarily\",\n];\n\n// Testing frameworks imported from shared package (includes XCTest, Espresso, etc.)\nconst TEST_FRAMEWORKS: string[] = SHARED_TEST_FRAMEWORKS;\n\n// Test levels\nconst TEST_LEVELS = [\n { id: \"smoke\", label: \"Smoke\", desc: \"Quick sanity checks\" },\n { id: \"unit\", label: \"Unit\", desc: \"Individual functions/components\" },\n { id: \"integration\", label: \"Integration\", desc: \"Component interactions\" },\n { id: \"e2e\", label: \"E2E\", desc: \"Full user flows\" },\n];\n\n// Project types\nconst PROJECT_TYPES = [\n { id: \"work\", label: \"Work\", icon: \"💼\", description: \"Professional/enterprise project\" },\n { id: \"leisure\", label: \"Leisure\", icon: \"🎮\", description: \"Personal/hobby project\" },\n { id: \"opensource\", label: \"Open Source\", icon: \"🌍\", description: \"Community-driven project\" },\n { id: \"learning\", label: \"Learning\", icon: \"📚\", description: \"Educational/experimental\" },\n];\n\n// Development environment (OS) - can be multi-select\nconst DEV_OS_OPTIONS = [\n { id: \"macos\", label: \"macOS\", icon: \"🍎\" },\n { id: \"linux\", label: \"Linux\", icon: \"🐧\" },\n { id: \"windows\", label: \"Windows\", icon: \"🪟\" },\n { id: \"wsl\", label: \"WSL\", icon: \"🐧\" },\n { id: \"remote\", label: \"Remote/SSH\", icon: \"☁️\" },\n { id: \"devcontainer\", label: \"Dev Container\", icon: \"📦\" },\n { id: \"codespaces\", label: \"GitHub Codespaces\", icon: \"☁️\" },\n];\n\n// Detect current OS\nfunction detectCurrentOS(): string {\n const platform = os.platform();\n if (platform === \"darwin\") return \"macos\";\n if (platform === \"linux\") return \"linux\";\n if (platform === \"win32\") return \"windows\";\n return \"\";\n}\n\n// Architecture patterns\nconst ARCHITECTURE_PATTERNS = [\n { id: \"monolith\", label: \"Monolith\" },\n { id: \"microservices\", label: \"Microservices\" },\n { id: \"multi_image_docker\", label: \"Multi-Image Docker (shared codebase)\" },\n { id: \"serverless\", label: \"Serverless\" },\n { id: \"mvc\", label: \"MVC\" },\n { id: \"layered\", label: \"Layered/N-tier\" },\n { id: \"event_driven\", label: \"Event-driven\" },\n { id: \"modular\", label: \"Modular monolith\" },\n { id: \"other\", label: \"Other\" },\n];\n\n// Helper to sort choices with selected items first\ninterface Choice {\n title: string;\n value: string;\n selected?: boolean;\n description?: string;\n}\n\nfunction sortSelectedFirst<T extends Choice>(choices: T[]): T[] {\n return [...choices].sort((a, b) => {\n if (a.selected && !b.selected) return -1;\n if (!a.selected && b.selected) return 1;\n return 0;\n });\n}\n\n// AI assistant for text fields\nasync function aiAssist(instruction: string, existingContent?: string): Promise<string | null> {\n const spinner = ora(\"AI is thinking...\").start();\n \n try {\n const response = await api.aiEditBlueprint({\n content: existingContent,\n instruction,\n mode: existingContent ? \"blueprint\" : \"wizard\",\n });\n spinner.succeed(\"AI suggestion ready\");\n return response.content;\n } catch (error) {\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 403) {\n spinner.fail(\"AI editing is not available for your account\");\n } else if (error.statusCode === 429) {\n spinner.fail(\"Rate limit reached. Please wait a moment.\");\n } else {\n spinner.fail(`AI error: ${error.message}`);\n }\n } else {\n spinner.fail(\"Failed to get AI suggestion\");\n }\n return null;\n }\n}\n\n// Box drawing helper\nfunction printBox(lines: string[], color: typeof chalk.cyan = chalk.gray): void {\n const maxLen = Math.max(...lines.map(l => l.replace(/\\x1b\\[[0-9;]*m/g, \"\").length));\n const top = \"┌\" + \"─\".repeat(maxLen + 2) + \"┐\";\n const bottom = \"└\" + \"─\".repeat(maxLen + 2) + \"┘\";\n \n console.log(color(top));\n for (const line of lines) {\n const stripped = line.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n const padding = \" \".repeat(maxLen - stripped.length);\n console.log(color(\"│ \") + line + padding + color(\" │\"));\n }\n console.log(color(bottom));\n}\n\n// Step indicator with progress bar and highlighted current step\nfunction showStep(current: number, step: WizardStep): void {\n const total = WIZARD_STEPS.length;\n\n // Build progress bar with current step highlighted\n let progressBar = \"\";\n for (let i = 1; i <= total; i++) {\n if (i < current) {\n progressBar += chalk.green(\"●\"); // Completed\n } else if (i === current) {\n progressBar += chalk.cyan.bold(\"◉\"); // Current (highlighted)\n } else {\n progressBar += chalk.gray(\"○\"); // Upcoming\n }\n }\n\n console.log();\n console.log(chalk.gray(\" ═\".repeat(30)));\n console.log(` ${progressBar} ${chalk.cyan.bold(`Step ${current}/${total}`)}: ${step.icon} ${chalk.bold(step.title)}`);\n console.log(chalk.gray(\" ═\".repeat(30)));\n console.log();\n}\n\n// Show wizard steps overview\nfunction showWizardOverview(): void {\n console.log(chalk.bold(\" 📋 Wizard Steps Overview:\"));\n console.log();\n\n for (let i = 0; i < WIZARD_STEPS.length; i++) {\n const step = WIZARD_STEPS[i];\n console.log(chalk.green(` ${(i + 1).toString().padStart(2)}. ✓ ${step.icon} ${step.title}`));\n }\n console.log();\n}\n\n// Global wizard state for saving draft on exit\nlet wizardState: {\n inProgress: boolean;\n answers: Record<string, unknown>;\n stepReached: number;\n} = {\n inProgress: false,\n answers: {},\n stepReached: 0,\n};\n\n// Save draft function for SIGINT handler\nasync function saveDraftOnExit(): Promise<void> {\n if (!wizardState.inProgress || Object.keys(wizardState.answers).length === 0) {\n return;\n }\n \n try {\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\").slice(0, 19);\n const draftName = `autosave-${timestamp}`;\n \n console.log();\n console.log(chalk.yellow(` 💾 Saving wizard state to draft: ${draftName}...`));\n \n await saveDraftLocally(draftName, wizardState.answers, wizardState.stepReached);\n \n console.log(chalk.green(` ✓ Draft saved! Resume with: lynxp wizard --load-draft ${draftName}`));\n console.log(chalk.gray(` Saved at step ${wizardState.stepReached}`));\n console.log();\n } catch (err) {\n console.log(chalk.red(` ✗ Could not save draft: ${err instanceof Error ? err.message : \"unknown error\"}`));\n }\n}\n\n// Configure prompts to handle cancellation\nconst promptConfig = {\n onCancel: async () => {\n await saveDraftOnExit();\n console.log(chalk.yellow(\"\\n Cancelled. Run 'lynxp wizard' anytime to restart.\\n\"));\n process.exit(0);\n },\n};\n\n// Register SIGINT handler for Ctrl+C\nprocess.on(\"SIGINT\", async () => {\n await saveDraftOnExit();\n console.log(chalk.yellow(\"\\n Interrupted. Run 'lynxp wizard' anytime to restart.\\n\"));\n process.exit(0);\n});\n\nexport async function wizardCommand(options: WizardOptions): Promise<void> {\n try {\n await runWizardWithDraftProtection(options);\n } catch (error) {\n // On any unexpected error, try to save the draft\n await saveDraftOnExit();\n \n console.error(chalk.red(\"\\n ✗ An unexpected error occurred:\"));\n if (error instanceof Error) {\n console.error(chalk.gray(` ${error.message}`));\n }\n console.log();\n \n if (wizardState.stepReached > 0) {\n console.log(chalk.yellow(\" Your progress has been saved. Resume with the draft command shown above.\"));\n }\n console.log();\n process.exit(1);\n }\n}\n\nasync function runWizardWithDraftProtection(options: WizardOptions): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 🐱 LynxPrompt Wizard\"));\n console.log(chalk.gray(\" Generate AI IDE configuration in seconds\"));\n console.log();\n\n // Handle --load-draft option\n if (options.loadDraft) {\n const draft = await loadDraftLocally(options.loadDraft);\n if (draft) {\n const stepInfo = draft.stepReached ? ` at step ${draft.stepReached}` : \"\";\n const sourceInfo = draft.source ? ` [${draft.source}]` : \"\";\n const versionInfo = draft.version ? ` v${draft.version}` : \"\";\n console.log(chalk.green(` ✓ Loaded draft: ${draft.name}${sourceInfo}${versionInfo} (saved ${new Date(draft.savedAt).toLocaleString()}${stepInfo})`));\n \n // Check for version mismatch warnings\n if (draft.source && draft.source !== \"cli\") {\n console.log(chalk.yellow(` ⚠ This draft was created with the ${draft.source.toUpperCase()}. Some features may differ.`));\n }\n if (draft.version && draft.version !== CLI_VERSION) {\n // Compare major.minor versions for compatibility warning\n const draftMajorMinor = draft.version.split(\".\").slice(0, 2).join(\".\");\n const cliMajorMinor = CLI_VERSION.split(\".\").slice(0, 2).join(\".\");\n if (draftMajorMinor !== cliMajorMinor) {\n console.log(chalk.yellow(` ⚠ Draft was created with v${draft.version}, current CLI is v${CLI_VERSION}. Some options may have changed.`));\n }\n }\n console.log();\n // Store draft answers and resume step for use in interactive wizard\n options._draftAnswers = draft.config;\n options._resumeFromStep = draft.stepReached;\n // Also merge basic options (name, description, etc.)\n if (draft.config.name) options.name = draft.config.name as string;\n if (draft.config.description) options.description = draft.config.description as string;\n } else {\n const availableDrafts = await listLocalDrafts();\n console.log(chalk.red(` ✗ Draft \"${options.loadDraft}\" not found.`));\n if (availableDrafts.length > 0) {\n console.log(chalk.gray(` Available drafts: ${availableDrafts.join(\", \")}`));\n }\n console.log();\n }\n }\n\n // Handle --repo-url for direct remote analysis\n if (options.repoUrl) {\n const spinner = ora(\"Analyzing remote repository...\").start();\n const detected = await detectFromRemoteUrl(options.repoUrl);\n if (detected) {\n spinner.succeed(\"Remote repository analyzed\");\n // Pre-fill options from detected\n if (!options.name && detected.name) options.name = detected.name;\n if (!options.description && detected.description) options.description = detected.description;\n if (!options.stack && detected.stack.length > 0) options.stack = detected.stack.join(\",\");\n if (!options.license && detected.license) options.license = detected.license;\n if (detected.cicd) options.ciCd = detected.cicd;\n } else {\n spinner.fail(\"Could not analyze repository\");\n }\n console.log();\n }\n\n // Handle --detect-only mode\n if (options.detectOnly) {\n const detected = options.repoUrl \n ? await detectFromRemoteUrl(options.repoUrl)\n : await detectProject(process.cwd());\n \n if (detected) {\n console.log(chalk.green.bold(\" 📊 Project Analysis\"));\n console.log();\n console.log(chalk.white(` Name: ${detected.name || \"unknown\"}`));\n if (detected.description) console.log(chalk.gray(` Description: ${detected.description}`));\n console.log(chalk.white(` Type: ${detected.isOpenSource ? \"Open Source\" : detected.type}`));\n console.log(chalk.white(` Stack: ${detected.stack.join(\", \") || \"none detected\"}`));\n if (detected.databases && detected.databases.length > 0) {\n console.log(chalk.white(` Databases: ${detected.databases.join(\", \")}`));\n }\n if (detected.packageManager) console.log(chalk.white(` Package Manager: ${detected.packageManager}`));\n if (detected.repoHost) console.log(chalk.white(` Host: ${detected.repoHost}`));\n if (detected.license) console.log(chalk.white(` License: ${detected.license.toUpperCase()}`));\n if (detected.cicd) console.log(chalk.white(` CI/CD: ${detected.cicd.replace(\"_\", \" \")}`));\n if (detected.hasDocker) {\n const dockerInfo = detected.containerRegistry \n ? `detected (registry: ${detected.containerRegistry})`\n : \"detected\";\n console.log(chalk.white(` Docker: ${dockerInfo}`));\n }\n if (detected.testFramework) console.log(chalk.white(` Test Framework: ${detected.testFramework}`));\n if (detected.existingFiles && detected.existingFiles.length > 0) {\n const filesDisplay = detected.existingFiles.length > 3\n ? `${detected.existingFiles.slice(0, 3).join(\", \")}... (+${detected.existingFiles.length - 3})`\n : detected.existingFiles.join(\", \");\n console.log(chalk.white(` Static files found: ${detected.existingFiles.length} (${filesDisplay})`));\n }\n if (detected.commands) {\n console.log(chalk.white(` Commands:`));\n if (detected.commands.build) console.log(chalk.gray(` build: ${detected.commands.build}`));\n if (detected.commands.test) console.log(chalk.gray(` test: ${detected.commands.test}`));\n if (detected.commands.lint) console.log(chalk.gray(` lint: ${detected.commands.lint}`));\n if (detected.commands.dev) console.log(chalk.gray(` dev: ${detected.commands.dev}`));\n }\n console.log();\n } else {\n console.log(chalk.yellow(\" No project detected.\"));\n console.log();\n }\n return; // Exit without generating\n }\n\n // Blueprint mode hint\n if (options.blueprint) {\n console.log(chalk.magenta(\" 📋 Template Mode: Generating with [[VARIABLE|default]] placeholders\"));\n console.log();\n }\n\n // Check authentication\n const authenticated = isAuthenticated();\n const user = getUser();\n\n if (!authenticated) {\n console.log(chalk.gray(` 👤 Running as guest. ${chalk.cyan(\"lynxp login\")} for cloud sync & sharing.`));\n console.log();\n } else {\n console.log(chalk.green(` ✓ Logged in as ${chalk.bold(user?.name || user?.email)}`));\n console.log();\n }\n\n // Show wizard steps overview\n showWizardOverview();\n \n // Show draft save hint\n console.log(chalk.gray(` 💾 Tip: Type 'save:draftname' anytime to save progress locally`));\n console.log();\n \n // Try to detect from current directory first\n let detected = await detectProject(process.cwd());\n \n // Show local detection results if found\n if (detected) {\n const detectedInfo = [\n chalk.green(\"✓ Local project detected\"),\n ];\n if (detected.name) detectedInfo.push(chalk.gray(` Name: ${detected.name}`));\n if (detected.stack.length > 0) detectedInfo.push(chalk.gray(` Stack: ${detected.stack.join(\", \")}`));\n if (detected.packageManager) detectedInfo.push(chalk.gray(` Package manager: ${detected.packageManager}`));\n \n printBox(detectedInfo, chalk.gray);\n console.log();\n } else {\n console.log(chalk.gray(\" No project detected in current directory.\"));\n console.log();\n }\n \n // Always offer to analyze a repository (available to all users)\n // Skip if --yes flag is used (non-interactive mode)\n const canDetectRemote = !options.yes;\n \n if (canDetectRemote) {\n console.log();\n console.log(chalk.magenta.bold(\" ┌───────────────────────────────────────────────┐\"));\n console.log(chalk.magenta.bold(\" │ ✨ AUTO-DETECT FROM REPOSITORY │\"));\n console.log(chalk.magenta.bold(\" └───────────────────────────────────────────────┘\"));\n console.log(chalk.gray(\" Analyze any local path, GitHub/GitLab URL, or private repo with credentials.\"));\n console.log(chalk.gray(\" We'll detect: languages, frameworks, commands, license, CI/CD, and more!\"));\n console.log();\n \n const remoteResponse = await prompts({\n type: \"confirm\",\n name: \"useRemote\",\n message: detected \n ? chalk.white(\"🔍 Analyze a different repository instead?\")\n : chalk.white(\"🔍 Analyze a repository (local path or URL)?\"),\n initial: false, // Default to No - user must explicitly choose Yes\n }, promptConfig);\n \n if (remoteResponse.useRemote) {\n const urlResponse = await prompts({\n type: \"text\",\n name: \"url\",\n message: chalk.white(\"Enter local path or repository URL:\"),\n hint: chalk.gray(\"/path/to/project or https://github.com/user/repo\"),\n validate: (v) => {\n if (!v || v.trim() === \"\") return \"Please enter a path or URL\";\n // Accept local paths (start with /, ~, or .)\n if (v.startsWith(\"/\") || v.startsWith(\"~\") || v.startsWith(\".\")) return true;\n // Accept git URLs\n if (isGitUrl(v)) return true;\n return \"Please enter a valid local path or Git URL\";\n },\n }, promptConfig);\n \n if (urlResponse.url) {\n const inputPath = urlResponse.url.trim();\n const isLocalPath = inputPath.startsWith(\"/\") || inputPath.startsWith(\"~\") || inputPath.startsWith(\".\");\n \n if (isLocalPath) {\n // Expand ~ to home directory\n const { homedir } = await import(\"os\");\n const resolvedPath = inputPath.startsWith(\"~\") \n ? inputPath.replace(\"~\", homedir())\n : inputPath.startsWith(\".\")\n ? join(process.cwd(), inputPath)\n : inputPath;\n \n const localSpinner = ora(`Analyzing local repository at ${resolvedPath}...`).start();\n const localDetected = await detectProject(resolvedPath);\n \n if (localDetected) {\n detected = localDetected;\n localSpinner.succeed(\"Local repository analyzed\");\n \n // Show local detection results\n const detectedInfo = [\n chalk.green(\"✓ Local project detected\"),\n ];\n if (detected.name) detectedInfo.push(chalk.gray(` Name: ${detected.name}`));\n if (detected.stack.length > 0) detectedInfo.push(chalk.gray(` Stack: ${detected.stack.join(\", \")}`));\n if (detected.packageManager) detectedInfo.push(chalk.gray(` Package manager: ${detected.packageManager}`));\n \n printBox(detectedInfo, chalk.gray);\n console.log();\n } else {\n localSpinner.fail(\"Could not analyze directory (no recognizable project structure)\");\n }\n } else {\n // Remote URL analysis\n const host = inputPath.toLowerCase().includes(\"github\") ? \"GitHub API\" \n : inputPath.toLowerCase().includes(\"gitlab\") ? \"GitLab API\" \n : \"shallow clone\";\n const remoteSpinner = ora(`Analyzing remote repository via ${host}...`).start();\n const remoteDetected = await detectFromRemoteUrl(inputPath);\n \n if (remoteDetected) {\n detected = remoteDetected;\n remoteSpinner.succeed(\"Remote repository analyzed\");\n \n // Show remote detection results (aligned with WebUI output)\n const detectedInfo = [\n chalk.green(\"✓ Remote project detected\"),\n ];\n if (detected.name) detectedInfo.push(chalk.gray(` Name: ${detected.name}`));\n if (detected.isOpenSource) detectedInfo.push(chalk.gray(` Type: Open Source`));\n if (detected.stack.length > 0) detectedInfo.push(chalk.gray(` Stack: ${detected.stack.join(\", \")}`));\n if (detected.databases && detected.databases.length > 0) {\n detectedInfo.push(chalk.gray(` Databases: ${detected.databases.join(\", \")}`));\n }\n if (detected.license) detectedInfo.push(chalk.gray(` License: ${detected.license.toUpperCase()}`));\n if (detected.repoHost) detectedInfo.push(chalk.gray(` Host: ${detected.repoHost}`));\n if (detected.cicd) detectedInfo.push(chalk.gray(` CI/CD: ${detected.cicd.replace(\"_\", \" \")}`));\n if (detected.hasDocker) {\n const dockerInfo = detected.containerRegistry \n ? `detected (registry: ${detected.containerRegistry})`\n : \"detected\";\n detectedInfo.push(chalk.gray(` Docker: ${dockerInfo}`));\n }\n if (detected.existingFiles && detected.existingFiles.length > 0) {\n const filesDisplay = detected.existingFiles.length > 3\n ? `${detected.existingFiles.slice(0, 3).join(\", \")}...`\n : detected.existingFiles.join(\", \");\n detectedInfo.push(chalk.gray(` Static files found: ${detected.existingFiles.length} (${filesDisplay})`));\n }\n if (detected.repoUrl) detectedInfo.push(chalk.gray(` Source: ${detected.repoUrl}`));\n \n printBox(detectedInfo, chalk.gray);\n console.log();\n } else {\n remoteSpinner.fail(\"Could not analyze repository (may be private or inaccessible)\");\n }\n }\n }\n }\n }\n\n let config: GenerateOptions;\n\n // Non-interactive mode with --yes flag\n if (options.yes) {\n let platforms: string[];\n if (options.format) {\n platforms = options.format.split(\",\").map(f => f.trim());\n } else if (options.platforms) {\n platforms = options.platforms.split(\",\").map(p => p.trim());\n } else {\n platforms = [\"agents\"];\n }\n\n config = {\n name: options.name || detected?.name || \"my-project\",\n description: options.description || \"\",\n stack: options.stack?.split(\",\").map(s => s.trim()) || detected?.stack || [],\n platforms,\n persona: options.persona || \"fullstack\",\n boundaries: options.boundaries as \"conservative\" | \"standard\" | \"permissive\" || \"standard\",\n commands: detected?.commands || {},\n useGitWorktrees: true, // Default to true for parallel AI sessions\n };\n\n // Show auto-detected configuration summary (verbose -y mode)\n console.log();\n console.log(chalk.bold(\" 📊 Using auto-detected defaults:\"));\n console.log();\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Name \") + chalk.cyan(config.name));\n if (config.description) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Description \") + chalk.gray(config.description.length > 60 ? config.description.substring(0, 57) + \"...\" : config.description));\n }\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Stack \") + chalk.cyan(config.stack.length > 0 ? config.stack.join(\", \") : \"none detected\"));\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Platforms \") + chalk.cyan(config.platforms.join(\", \")));\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Persona \") + chalk.cyan(config.persona));\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Boundaries \") + chalk.cyan(config.boundaries));\n const cmdEntries = Object.entries(config.commands || {});\n if (cmdEntries.length > 0) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Commands \") + chalk.cyan(cmdEntries.map(([k, v]) => `${k}=${v}`).join(\", \")));\n }\n if (detected?.license) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"License \") + chalk.cyan(detected.license.toUpperCase()));\n }\n if (detected?.repoHost) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Repository \") + chalk.cyan(detected.repoHost));\n }\n if (detected?.cicd) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"CI/CD \") + chalk.cyan(detected.cicd.replace(\"_\", \" \")));\n }\n if (detected?.hasDocker) {\n console.log(chalk.green(\" ✓ \") + chalk.white(\"Docker \") + chalk.cyan(\"yes\"));\n }\n console.log();\n } else {\n // Interactive mode\n config = await runInteractiveWizard(options, detected);\n }\n\n // Generate and write files\n const spinner = ora(\"Generating configuration...\").start();\n \n try {\n // Add blueprint mode and variables to config\n const variables = options.vars ? parseVariablesString(options.vars) : undefined;\n // Don't pass enableAutoUpdate/blueprintId to generator yet - we'll add curl header after saving\n const finalConfig = {\n ...config,\n blueprintMode: options.blueprint || config.blueprintMode || false,\n variables,\n enableAutoUpdate: false, // Don't generate curl header yet\n };\n \n let files = generateConfig(finalConfig);\n \n // If enableAutoUpdate is true, save blueprint to cloud first\n let savedBlueprintId: string | null = null;\n if (config.enableAutoUpdate && api) {\n spinner.text = \"Saving blueprint to cloud...\";\n try {\n const mainFile = Object.entries(files)[0];\n if (mainFile) {\n const [_fileName, content] = mainFile;\n const response = await api.createBlueprint({\n name: config.name || \"My AI Config\",\n description: config.description || \"Generated with LynxPrompt CLI\",\n content: content,\n visibility: \"PRIVATE\",\n });\n savedBlueprintId = response.blueprint.id;\n \n // Now regenerate with the real blueprint ID to include curl header\n const configWithAutoUpdate = {\n ...finalConfig,\n enableAutoUpdate: true,\n blueprintId: savedBlueprintId,\n };\n files = generateConfig(configWithAutoUpdate);\n \n console.log(chalk.green(` ✓ Blueprint saved: ${savedBlueprintId}`));\n }\n } catch (saveError) {\n spinner.stop();\n console.log(chalk.yellow(\"\\n ⚠️ Could not save blueprint to cloud\"));\n if (saveError instanceof Error) {\n console.log(chalk.gray(` ${saveError.message}`));\n }\n console.log(chalk.gray(\" Continuing without auto-update curl command...\"));\n // Continue without auto-update\n }\n }\n \n spinner.stop();\n\n console.log();\n console.log(chalk.green.bold(\" ✅ Generated:\"));\n console.log();\n \n // Determine output directory\n const outputDir = options.output || process.cwd();\n \n for (const [filename, content] of Object.entries(files)) {\n const outputPath = join(outputDir, filename);\n \n // Check if file exists\n let exists = false;\n try {\n await access(outputPath);\n exists = true;\n } catch {\n // File doesn't exist\n }\n\n // Ask to overwrite if exists and not in --yes mode\n if (exists && !options.yes) {\n const response = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: `${filename} already exists. Overwrite?`,\n initial: false,\n });\n \n if (!response.overwrite) {\n console.log(chalk.yellow(` ⏭️ Skipped: ${filename}`));\n continue;\n }\n }\n\n // Create directory if needed\n const dir = dirname(outputPath);\n if (dir !== \".\") {\n await mkdir(dir, { recursive: true });\n }\n\n await writeFile(outputPath, content, \"utf-8\");\n console.log(` ${chalk.cyan(\"→\")} ${chalk.bold(filename)}`);\n }\n\n console.log();\n \n // Build next steps based on auth status\n const nextStepsLines = [\n chalk.gray(\"Your AI assistant will now follow these instructions.\"),\n \"\",\n chalk.gray(\"Next steps:\"),\n chalk.cyan(\" lynxp check \") + chalk.gray(\"Validate configuration\"),\n ];\n \n if (authenticated) {\n nextStepsLines.push(chalk.cyan(\" lynxp push \") + chalk.gray(\"Upload to cloud\"));\n nextStepsLines.push(chalk.cyan(\" lynxp link \") + chalk.gray(\"Link to a blueprint\"));\n nextStepsLines.push(chalk.cyan(\" lynxp diff \") + chalk.gray(\"Compare with cloud blueprint\"));\n }\n \n nextStepsLines.push(chalk.cyan(\" lynxp status \") + chalk.gray(\"View current setup\"));\n \n printBox(nextStepsLines, chalk.gray);\n console.log();\n \n // Show cloud benefits prominently for non-authenticated users\n if (!authenticated) {\n const W = 60;\n const y = chalk.yellow;\n const g = chalk.green;\n const pad = (s: string, len: number) => s + \" \".repeat(Math.max(0, len - s.length));\n \n console.log(y(\" ╭\" + \"─\".repeat(W) + \"╮\"));\n console.log(y(\" │\") + g(pad(\" 🚀 Unlock LynxPrompt Cloud (FREE)\", W)) + y(\"│\"));\n console.log(y(\" │\") + \" \".repeat(W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Sync configs across all your devices\", W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Save preferences for future wizards\", W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Auto-update configs via lynxp push/pull\", W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" ✓ Create reusable blueprint templates\", W) + y(\"│\"));\n console.log(y(\" │\") + \" \".repeat(W) + y(\"│\"));\n console.log(y(\" │\") + pad(\" Sign in now: \" + chalk.cyan(\"lynxp login\"), W + 10) + y(\"│\"));\n console.log(y(\" ╰\" + \"─\".repeat(W) + \"╯\"));\n console.log();\n }\n \n // Save draft if requested\n if (options.saveDraft) {\n try {\n await saveDraftLocally(options.saveDraft, config as unknown as Record<string, unknown>);\n console.log(chalk.green(` 💾 Draft saved as \"${options.saveDraft}\"`));\n console.log(chalk.gray(` Load later with: lynxp wizard --load-draft ${options.saveDraft}`));\n console.log();\n } catch (err) {\n console.log(chalk.yellow(` ⚠️ Could not save draft: ${err instanceof Error ? err.message : \"unknown error\"}`));\n }\n }\n\n // Offer to save preferences to profile (logged-in users only)\n if (authenticated && !options.yes) {\n console.log();\n const savePrefsResponse = await prompts({\n type: \"confirm\",\n name: \"savePrefs\",\n message: chalk.white(\"Save these preferences to your profile for next time?\"),\n initial: true,\n });\n\n if (savePrefsResponse.savePrefs) {\n // Retry loop for saving preferences\n let saved = false;\n let attempts = 0;\n const maxAttempts = 3;\n \n while (!saved && attempts < maxAttempts) {\n attempts++;\n const saveSpinner = ora(\"Saving preferences to your profile...\").start();\n try {\n // Save wizard preferences via API\n await api.saveWizardPreferences({\n commands: config.commands,\n codeStyle: {\n naming: config.namingConvention,\n errorHandling: config.errorHandling,\n loggingConventions: config.loggingConventions,\n loggingConventionsOther: config.loggingConventionsOther,\n notes: config.styleNotes,\n },\n boundaries: {\n always: config.boundaryAlways,\n never: config.boundaryNever,\n ask: config.boundaryAsk,\n },\n testing: {\n levels: config.testLevels,\n frameworks: config.testFrameworks,\n coverage: config.coverageTarget,\n notes: config.testNotes,\n },\n });\n saveSpinner.succeed(\"Preferences saved to your profile\");\n saved = true;\n } catch (err) {\n saveSpinner.fail(\"Could not save preferences\");\n let errorType = \"unknown\";\n \n if (err instanceof ApiRequestError) {\n if (err.statusCode === 401) {\n console.log(chalk.yellow(\" Your session may have expired. Try: lynxp login\"));\n break; // Don't retry auth errors\n } else {\n console.log(chalk.gray(` ${err.message} (status: ${err.statusCode})`));\n errorType = \"api\";\n }\n } else if (err instanceof Error) {\n if (err.message.includes(\"fetch failed\") || err.message.includes(\"ENOTFOUND\")) {\n console.log(chalk.yellow(\" Network error. Check your internet connection.\"));\n errorType = \"network\";\n } else {\n console.log(chalk.gray(` ${err.message}`));\n }\n }\n \n // Ask if user wants to retry (for network/api errors)\n if (errorType === \"network\" || errorType === \"api\") {\n if (attempts < maxAttempts) {\n const retryResponse = await prompts({\n type: \"confirm\",\n name: \"retry\",\n message: chalk.white(\"Would you like to retry?\"),\n initial: true,\n });\n \n if (!retryResponse.retry) {\n console.log(chalk.gray(\" Skipping preference save. Your config files are still generated.\"));\n break;\n }\n } else {\n console.log(chalk.gray(` Max retries (${maxAttempts}) reached. Your config files are still generated.`));\n }\n } else {\n break; // Don't retry unknown errors\n }\n }\n }\n }\n }\n \n } catch (error) {\n spinner.fail(\"Failed to generate files\");\n \n // Try to save draft even on generation error\n await saveDraftOnExit();\n \n console.error(chalk.red(\"\\n✗ An error occurred while generating configuration files.\"));\n if (error instanceof Error) {\n console.error(chalk.gray(` ${error.message}`));\n }\n console.error(chalk.gray(\"\\nTry running with --yes flag for default settings.\"));\n \n if (wizardState.stepReached > 0) {\n console.log(chalk.yellow(\"\\n Your wizard progress has been saved to a draft.\"));\n }\n process.exit(1);\n }\n}\n\nasync function runInteractiveWizard(\n options: WizardOptions,\n detected: Awaited<ReturnType<typeof detectProject>> | null\n): Promise<GenerateOptions> {\n // Load answers from draft if resuming\n const answers: Record<string, unknown> = options._draftAnswers ? { ...options._draftAnswers } : {};\n const resumeFromStep = options._resumeFromStep || 0;\n const availableSteps = WIZARD_STEPS;\n let currentStepNum = 0;\n\n // Initialize global state for draft saving on exit\n wizardState.inProgress = true;\n wizardState.answers = answers;\n wizardState.stepReached = resumeFromStep;\n\n // Show resume message if loading from draft\n if (resumeFromStep > 0 && Object.keys(answers).length > 0) {\n console.log(chalk.cyan(` 📋 Resuming from step ${resumeFromStep}...`));\n console.log(chalk.gray(\" Previously saved answers:\"));\n // Show key saved values\n if (answers.name) console.log(chalk.gray(` • Name: ${answers.name}`));\n if (answers.platforms) console.log(chalk.gray(` • Platforms: ${(answers.platforms as string[]).join(\", \")}`));\n if (answers.stack) console.log(chalk.gray(` • Stack: ${(answers.stack as string[]).slice(0, 5).join(\", \")}${(answers.stack as string[]).length > 5 ? \"...\" : \"\"}`));\n console.log();\n console.log(chalk.yellow(\" Steps 1-\" + (resumeFromStep - 1) + \" will use saved values. Continuing from step \" + resumeFromStep + \".\"));\n console.log();\n }\n\n // Helper to get current step info and increment counter\n const getCurrentStep = (stepId: string) => {\n const step = availableSteps.find(s => s.id === stepId);\n if (step) {\n currentStepNum++;\n wizardState.stepReached = currentStepNum;\n return step;\n }\n return null;\n };\n\n // Helper to check if we should skip this step (already completed in draft)\n const shouldSkipStep = (stepNum: number) => {\n return resumeFromStep > 0 && stepNum < resumeFromStep;\n };\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 1: Output Format (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const formatStep = getCurrentStep(\"format\")!;\n \n let platforms: string[];\n \n if (shouldSkipStep(currentStepNum) && answers.platforms) {\n // Use saved answer from draft\n platforms = answers.platforms as string[];\n console.log(chalk.gray(` Step 1 (Output Format): Using saved platforms: ${platforms.join(\", \")}`));\n } else if (options.format) {\n showStep(currentStepNum, formatStep);\n platforms = options.format.split(\",\").map(f => f.trim());\n console.log(chalk.gray(` Using format from flag: ${platforms.join(\", \")}`));\n } else {\n showStep(currentStepNum, formatStep);\n // Multi-select by default - user can select one or more platforms\n console.log(chalk.gray(\" Select the AI editors you want to generate config for:\"));\n console.log(chalk.gray(\" (AGENTS.md is recommended - works with most AI tools)\"));\n console.log(chalk.gray(\" Type to search/filter the list.\"));\n console.log();\n \n const platformResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"platforms\",\n message: chalk.white(\"Select AI editors (type to search):\"),\n choices: ALL_PLATFORMS.map(p => ({ \n title: p.id === \"agents\" \n ? `${p.icon} ${p.name} ${chalk.green.bold(\"★ recommended\")}`\n : `${p.icon} ${p.name}`,\n value: p.id,\n description: chalk.gray(p.note),\n selected: p.id === \"universal\", // Pre-select Universal (AGENTS.md)\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n min: 1,\n instructions: false,\n }, promptConfig);\n \n platforms = platformResponse.platforms || [\"agents\"];\n console.log(chalk.green(` ✓ Selected ${platforms.length} platform${platforms.length === 1 ? \"\" : \"s\"}`));\n }\n answers.platforms = platforms;\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 2: Project Basics (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const projectStep = getCurrentStep(\"project\")!;\n showStep(currentStepNum, projectStep);\n\n const nameResponse = await prompts({\n type: \"text\",\n name: \"name\",\n message: chalk.white(\"Project name:\"),\n initial: options.name || detected?.name || \"my-project\",\n hint: chalk.gray(\"Used in the generated config header\"),\n }, promptConfig);\n answers.name = nameResponse.name || \"my-project\";\n\n const descResponse = await prompts({\n type: \"text\",\n name: \"description\",\n message: chalk.white(\"Brief description:\"),\n initial: options.description || detected?.description || \"\",\n hint: detected?.description \n ? chalk.green(\"(pre-filled from repo About)\")\n : chalk.gray(\"optional - helps AI understand context\"),\n }, promptConfig);\n answers.description = descResponse.description || \"\";\n\n // Project type - pre-select open-source if detected from public repo\n const isDetectedOpenSource = detected?.isPublicRepo === true;\n const projectTypeChoices = [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...PROJECT_TYPES.map(t => ({\n title: (t.id === \"opensource\" && isDetectedOpenSource)\n ? `${t.icon} ${t.label} ${chalk.green(\"(detected)\")}`\n : `${t.icon} ${t.label}`,\n value: t.id,\n description: chalk.gray(t.description),\n })),\n ];\n const defaultProjectTypeIdx = isDetectedOpenSource \n ? projectTypeChoices.findIndex(c => c.value === \"opensource\")\n : 0;\n \n const typeResponse = await prompts({\n type: \"select\",\n name: \"projectType\",\n message: chalk.white(\"Project type:\"),\n choices: projectTypeChoices,\n initial: defaultProjectTypeIdx > 0 ? defaultProjectTypeIdx : 0,\n }, promptConfig);\n answers.projectType = typeResponse.projectType || \"\";\n\n // Development environment(s) - multi-select with current OS pre-selected and labeled\n const currentOS = detectCurrentOS();\n const devOsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"devOS\",\n message: chalk.white(\"Development environment(s) (type to search):\"),\n choices: DEV_OS_OPTIONS.map(o => ({\n title: o.id === currentOS \n ? `${o.icon} ${o.label} ${chalk.green(\"(detected by your current system)\")}`\n : `${o.icon} ${o.label}`,\n value: o.id,\n selected: o.id === currentOS, // Pre-select current OS\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.devOS = devOsResponse.devOS || [];\n\n // Architecture pattern\n const archResponse = await prompts({\n type: \"select\",\n name: \"architecture\",\n message: chalk.white(\"Architecture pattern:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...ARCHITECTURE_PATTERNS.map(a => ({\n title: a.label,\n value: a.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.architecture = archResponse.architecture || \"\";\n \n // If \"other\" selected, ask for custom input\n if (answers.architecture === \"other\") {\n const customArchResponse = await prompts({\n type: \"text\",\n name: \"customArchitecture\",\n message: chalk.white(\"Describe your architecture pattern:\"),\n hint: chalk.gray(\"e.g., CQRS, Hexagonal, Clean Architecture\"),\n }, promptConfig);\n answers.architectureOther = customArchResponse.customArchitecture || \"\";\n }\n\n // Blueprint Template Mode - available for all users\n console.log();\n console.log(chalk.yellow(\" 🧩 Blueprint Template Mode\"));\n console.log(chalk.gray(\" Create a reusable template with [[VARIABLE|default]] placeholders\"));\n console.log(chalk.gray(\" that others can customize when using your blueprint.\"));\n console.log();\n \n const blueprintResponse = await prompts({\n type: \"toggle\",\n name: \"blueprintMode\",\n message: chalk.white(\"Create as Blueprint Template?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.blueprintMode = blueprintResponse.blueprintMode || false;\n \n if (answers.blueprintMode) {\n console.log(chalk.green(\" ✓ Blueprint mode enabled - values will use [[VARIABLE|default]] syntax\"));\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 3: Tech Stack (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const techStep = getCurrentStep(\"tech\")!;\n showStep(currentStepNum, techStep);\n\n // Let AI decide option - default to Yes\n const letAiResponse = await prompts({\n type: \"toggle\",\n name: \"letAiDecide\",\n message: chalk.white(\"Let AI help choose additional technologies?\"),\n initial: true, // Default to Yes\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.letAiDecide = letAiResponse.letAiDecide ?? true;\n\n console.log();\n console.log(chalk.gray(\" Select your tech stack (type to search/filter):\"));\n console.log();\n\n // Show detected stack as hint\n if (detected?.stack && detected.stack.length > 0) {\n console.log(chalk.green(` ✓ Detected in project: ${detected.stack.join(\", \")}`));\n console.log();\n }\n\n // Languages - autocomplete multiselect for searchability\n const languageChoices = sortSelectedFirst(LANGUAGES.map(s => {\n const isDetected = detected?.stack?.includes(s.value);\n return {\n title: isDetected ? `${s.title} ${chalk.green(\"(detected)\")}` : s.title,\n value: s.value,\n selected: isDetected,\n };\n }));\n const languageResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"languages\",\n message: chalk.white(\"Languages (type to search):\"),\n choices: languageChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n const selectedLanguages = languageResponse.languages || [];\n\n // Frameworks - separate selection like WebUI\n const frameworkChoices = sortSelectedFirst(FRAMEWORKS.map(s => {\n const isDetected = detected?.stack?.includes(s.value);\n return {\n title: isDetected ? `${s.title} ${chalk.green(\"(detected)\")}` : s.title,\n value: s.value,\n selected: isDetected,\n };\n }));\n const frameworkResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"frameworks\",\n message: chalk.white(\"Frameworks (type to search):\"),\n choices: frameworkChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n const selectedFrameworks = frameworkResponse.frameworks || [];\n\n // Databases\n const databaseChoices = sortSelectedFirst(DATABASES.map(s => {\n const isDetected = detected?.stack?.includes(s.value);\n return {\n title: isDetected ? `${s.title} ${chalk.green(\"(detected)\")}` : s.title,\n value: s.value,\n selected: isDetected,\n };\n }));\n const databaseResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"databases\",\n message: chalk.white(\"Databases (type to search):\"),\n choices: databaseChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n const selectedDatabases = databaseResponse.databases || [];\n\n // JS/TS specific options\n const hasJsTs = selectedLanguages.includes(\"javascript\") || selectedLanguages.includes(\"typescript\");\n \n if (hasJsTs) {\n console.log();\n console.log(chalk.cyan(\" 📦 JavaScript/TypeScript Options\"));\n console.log();\n \n // Package Manager\n const pmResponse = await prompts({\n type: \"select\",\n name: \"packageManager\",\n message: chalk.white(\"Package manager:\"),\n choices: PACKAGE_MANAGERS.map(pm => ({\n title: `${pm.title} - ${chalk.gray(pm.desc)}`,\n value: pm.value,\n })),\n initial: 0,\n }, promptConfig);\n answers.packageManager = pmResponse.packageManager || \"npm\";\n\n // JS Runtime\n const runtimeResponse = await prompts({\n type: \"select\",\n name: \"jsRuntime\",\n message: chalk.white(\"JavaScript runtime:\"),\n choices: JS_RUNTIMES.map(rt => ({\n title: `${rt.title} - ${chalk.gray(rt.desc)}`,\n value: rt.value,\n })),\n initial: 0,\n }, promptConfig);\n answers.jsRuntime = runtimeResponse.jsRuntime || \"node\";\n\n // Monorepo\n const monoResponse = await prompts({\n type: \"select\",\n name: \"monorepoTool\",\n message: chalk.white(\"Monorepo tool:\"),\n choices: MONOREPO_TOOLS.map(mt => ({\n title: `${mt.title} - ${chalk.gray(mt.desc)}`,\n value: mt.value,\n })),\n initial: 0,\n }, promptConfig);\n answers.monorepoTool = monoResponse.monorepoTool || \"\";\n }\n\n // ORM selection (if databases selected)\n if (selectedDatabases.length > 0) {\n console.log();\n console.log(chalk.cyan(\" 🔗 ORM / Database Library\"));\n console.log();\n \n // Filter ORMs by selected languages\n const relevantOrms = ORM_OPTIONS.filter(orm => \n orm.langs.length === 0 || orm.langs.some(l => selectedLanguages.includes(l))\n );\n \n const ormResponse = await prompts({\n type: \"select\",\n name: \"orm\",\n message: chalk.white(\"ORM / Database library:\"),\n choices: relevantOrms.map(orm => ({ title: orm.title, value: orm.value })),\n initial: 0,\n }, promptConfig);\n answers.orm = ormResponse.orm || \"\";\n }\n\n // Additional libraries (for domain-specific libs not in predefined lists)\n console.log();\n console.log(chalk.cyan(\" 📦 Additional Libraries\"));\n console.log(chalk.gray(\" Add key libraries not listed above (e.g., Telethon, APScheduler, boto3)\"));\n console.log();\n const additionalLibsResponse = await prompts({\n type: \"text\",\n name: \"additionalLibraries\",\n message: chalk.white(\"Additional libraries (comma-separated, optional):\"),\n hint: chalk.gray(\"e.g., Telethon, APScheduler, uvicorn, alembic\"),\n }, promptConfig);\n answers.additionalLibraries = additionalLibsResponse.additionalLibraries || \"\";\n\n // Combine all stack selections\n answers.stack = [...selectedLanguages, ...selectedFrameworks, ...selectedDatabases];\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 4: Repository Setup (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const repoStep = getCurrentStep(\"repo\")!;\n showStep(currentStepNum, repoStep);\n\n // Show detected repository info\n if (detected?.repoHost || detected?.license || detected?.cicd) {\n console.log(chalk.green(\" ✓ Auto-detected from your project:\"));\n if (detected.repoHost) console.log(chalk.gray(` • Repository: ${detected.repoHost}${detected.repoUrl ? ` (${detected.repoUrl})` : \"\"}`));\n if (detected.license) console.log(chalk.gray(` • License: ${detected.license}`));\n if (detected.cicd) console.log(chalk.gray(` • CI/CD: ${detected.cicd}`));\n console.log();\n }\n\n // Find initial index for detected repo host\n const repoHostChoices = [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...REPO_HOSTS.map(h => ({\n title: detected?.repoHost === h.id \n ? `${h.icon} ${h.label} ${chalk.green(\"(detected)\")}`\n : `${h.icon} ${h.label}`,\n value: h.id,\n })),\n ];\n const detectedRepoIndex = detected?.repoHost \n ? repoHostChoices.findIndex(c => c.value === detected.repoHost)\n : 0;\n\n const repoHostResponse = await prompts({\n type: \"select\",\n name: \"repoHost\",\n message: chalk.white(\"Repository host:\"),\n choices: repoHostChoices,\n initial: detectedRepoIndex > 0 ? detectedRepoIndex : 0,\n }, promptConfig);\n answers.repoHost = repoHostResponse.repoHost || \"\";\n\n const visibilityResponse = await prompts({\n type: \"toggle\",\n name: \"isPublic\",\n message: chalk.white(\"Public Repository?\"),\n initial: true, // Default Yes\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Enable if this is an existing public project\"),\n }, promptConfig);\n answers.isPublic = visibilityResponse.isPublic ?? true;\n\n // Find initial index for detected license\n const licenseChoices = [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...LICENSES.map(l => ({\n title: detected?.license === l.id\n ? `${l.label} ${chalk.green(\"(detected)\")}`\n : l.label,\n value: l.id,\n })),\n ];\n const detectedLicenseIndex = detected?.license\n ? licenseChoices.findIndex(c => c.value === detected.license)\n : 0;\n\n const licenseResponse = await prompts({\n type: \"select\",\n name: \"license\",\n message: chalk.white(\"License:\"),\n choices: licenseChoices,\n initial: detectedLicenseIndex > 0 ? detectedLicenseIndex : 1, // Default to MIT (index 1 after Skip)\n }, promptConfig);\n answers.license = licenseResponse.license || \"mit\";\n\n const conventionalResponse = await prompts({\n type: \"toggle\",\n name: \"conventionalCommits\",\n message: chalk.white(\"Use Conventional Commits?\"),\n initial: true, // Default Yes\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.conventionalCommits = conventionalResponse.conventionalCommits ?? true;\n\n const semverResponse = await prompts({\n type: \"toggle\",\n name: \"semver\",\n message: chalk.white(\"Use Semantic Versioning?\"),\n initial: true, // Default Yes\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.semver = semverResponse.semver ?? true;\n\n // Conditional semver options\n if (answers.semver) {\n const tagFormatResponse = await prompts({\n type: \"select\",\n name: \"versionTagFormat\",\n message: chalk.white(\"Version tag format:\"),\n choices: [\n { title: \"v-prefix (v1.0.0)\", value: \"v_prefix\" },\n { title: \"No prefix (1.0.0)\", value: \"no_prefix\" },\n { title: \"Package prefix (@pkg/v1.0.0)\", value: \"package_prefix\" },\n { title: \"Date-based (2024.01.15)\", value: \"date_based\" },\n { title: \"Custom format\", value: \"custom\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.versionTagFormat = tagFormatResponse.versionTagFormat || \"v_prefix\";\n\n const changelogResponse = await prompts({\n type: \"select\",\n name: \"changelogTool\",\n message: chalk.white(\"Changelog management:\"),\n choices: [\n { title: \"Manual - Write CHANGELOG.md by hand\", value: \"manual\" },\n { title: \"Conventional Changelog - Auto-generate from commit messages\", value: \"conventional_changelog\" },\n { title: \"Release Please - Google's automated release management\", value: \"release_please\" },\n { title: \"Semantic Release - Fully automated versioning & publishing\", value: \"semantic_release\" },\n { title: \"Changesets - Monorepo-friendly version management\", value: \"changesets\" },\n { title: \"GitHub Releases - Use GitHub's built-in release notes\", value: \"github_releases\" },\n { title: \"Keep a Changelog - Manual following keepachangelog.com format\", value: \"keep_a_changelog\" },\n { title: \"Other - Custom changelog tooling\", value: \"other\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.changelogTool = changelogResponse.changelogTool || \"manual\";\n }\n\n // Commit signing\n const signingResponse = await prompts({\n type: \"toggle\",\n name: \"commitSigning\",\n message: chalk.white(\"Require commit signing (GPG/SSH)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.commitSigning = signingResponse.commitSigning ?? false;\n\n // Branch strategy\n const branchStrategyResponse = await prompts({\n type: \"select\",\n name: \"branchStrategy\",\n message: chalk.white(\"Branch strategy:\"),\n choices: [\n { title: \"🎮 None (toy project) - No branching, commit directly to main\", value: \"none\" },\n { title: \"🌊 GitHub Flow - Simple: main + feature branches\", value: \"github_flow\" },\n { title: \"🌳 Gitflow - develop, feature, release, hotfix branches\", value: \"gitflow\" },\n { title: \"🚂 Trunk-Based - Short-lived branches, continuous integration\", value: \"trunk_based\" },\n { title: \"🦊 GitLab Flow - Environment branches (staging, production)\", value: \"gitlab_flow\" },\n { title: \"🚀 Release Flow - main + release branches\", value: \"release_flow\" },\n ],\n initial: 1, // Default to GitHub Flow (index 1 after adding \"none\")\n }, promptConfig);\n answers.branchStrategy = branchStrategyResponse.branchStrategy || \"github_flow\";\n\n // Default branch\n const defaultBranchResponse = await prompts({\n type: \"select\",\n name: \"defaultBranch\",\n message: chalk.white(\"Default branch name:\"),\n choices: [\n { title: \"main\", value: \"main\" },\n { title: \"master\", value: \"master\" },\n { title: \"develop\", value: \"develop\" },\n { title: \"trunk\", value: \"trunk\" },\n { title: \"Other (specify)\", value: \"other\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.defaultBranch = defaultBranchResponse.defaultBranch || \"main\";\n\n // If \"other\" is selected, ask for custom branch name\n if (answers.defaultBranch === \"other\") {\n const customBranchResponse = await prompts({\n type: \"text\",\n name: \"defaultBranchOther\",\n message: chalk.white(\"Enter custom branch name:\"),\n hint: chalk.gray(\"e.g., production, release, staging\"),\n validate: (v) => v && v.trim() !== \"\" ? true : \"Branch name is required\",\n }, promptConfig);\n answers.defaultBranchOther = customBranchResponse.defaultBranchOther || \"\";\n }\n\n // Allow direct commits for small fixes\n const allowDirectCommitsResponse = await prompts({\n type: \"toggle\",\n name: \"allowDirectCommits\",\n message: chalk.white(\"Allow direct commits for small fixes?\"),\n initial: answers.branchStrategy === \"none\", // Default yes for toy projects\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Enable for typos, docs, and minor fixes (bypassing PRs)\"),\n }, promptConfig);\n answers.allowDirectCommits = allowDirectCommitsResponse.allowDirectCommits ?? (answers.branchStrategy === \"none\");\n\n // Git Worktrees for parallel AI sessions\n const useGitWorktreesResponse = await prompts({\n type: \"confirm\",\n name: \"useGitWorktrees\",\n message: chalk.white(\"🌲 Do you plan on working with several AI agent sessions in this repository?\"),\n initial: true,\n hint: \"Enable if you use multiple AI agents (Cursor, Claude, Copilot) in parallel. Each task gets its own git worktree to prevent branch conflicts.\",\n }, promptConfig);\n answers.useGitWorktrees = useGitWorktreesResponse.useGitWorktrees ?? true;\n\n // Dependabot/Renovate moved to Security step\n\n // CI/CD Platform - multiselect with detected value pre-selected\n const cicdChoices = CICD_OPTIONS.map(c => ({\n title: detected?.cicd === c.id\n ? `${c.icon} ${c.label} ${chalk.green(\"(detected)\")}`\n : `${c.icon} ${c.label}`,\n value: c.id,\n selected: detected?.cicd === c.id,\n }));\n\n const cicdResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"cicd\",\n message: chalk.white(\"CI/CD Platform(s) (type to search, select all that apply):\"),\n choices: cicdChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.cicd = cicdResponse.cicd || [];\n\n // If \"other\" is selected, ask for custom CI/CD platform name\n if ((answers.cicd as string[]).includes(\"other\")) {\n const customCicdResponse = await prompts({\n type: \"text\",\n name: \"cicdOther\",\n message: chalk.white(\"Enter custom CI/CD platform name:\"),\n hint: chalk.gray(\"e.g., Tekton, Harness, custom scripts\"),\n }, promptConfig);\n answers.cicdOther = customCicdResponse.cicdOther || \"\";\n }\n\n // First ask: cloud, self-hosted, or both\n const deployTypeResponse = await prompts({\n type: \"select\",\n name: \"deployType\",\n message: chalk.white(\"Deployment environment:\"),\n choices: [\n { title: \"☁️ Cloud only - PaaS, serverless, managed services\", value: \"cloud\" },\n { title: \"🏠 Self-hosted only - On-premise, homelab, VPS\", value: \"self_hosted\" },\n { title: \"🔄 Both cloud and self-hosted\", value: \"both\" },\n { title: chalk.gray(\"⏭ Skip\"), value: \"skip\" },\n ],\n initial: 0,\n }, promptConfig);\n const deployType = deployTypeResponse.deployType || \"skip\";\n \n let allDeployTargets: string[] = [];\n \n // Show cloud targets if selected\n if (deployType === \"cloud\" || deployType === \"both\") {\n const cloudChoices = CLOUD_TARGETS.map(t => ({\n title: `${t.icon}${t.label}`,\n value: t.id,\n }));\n const cloudResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"cloudTargets\",\n message: chalk.white(\"Cloud deployment targets (type to search):\"),\n choices: cloudChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n allDeployTargets = [...(cloudResponse.cloudTargets || [])];\n }\n \n // Show self-hosted targets if selected\n if (deployType === \"self_hosted\" || deployType === \"both\") {\n const selfHostedChoices = sortSelectedFirst(SELF_HOSTED_TARGETS.map(t => ({\n title: (t.id === \"docker\" && detected?.hasDocker)\n ? `${t.icon}${t.label} ${chalk.green(\"(detected)\")}`\n : `${t.icon}${t.label}`,\n selected: t.id === \"docker\" && detected?.hasDocker,\n value: t.id,\n })));\n const selfHostedResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"selfHostedTargets\",\n message: chalk.white(\"Self-hosted deployment targets (type to search):\"),\n choices: selfHostedChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n allDeployTargets = [...allDeployTargets, ...(selfHostedResponse.selfHostedTargets || [])];\n }\n \n answers.deploymentTargets = allDeployTargets;\n\n // Container build - default to Yes if Docker/Docker Compose is selected in deployment targets\n const dockerSelected = (answers.deploymentTargets as string[] || []).some(t => \n [\"docker\", \"docker_compose\", \"kubernetes\", \"k3s\", \"podman\"].includes(t)\n ) || detected?.hasDocker;\n const containerResponse = await prompts({\n type: \"toggle\",\n name: \"buildContainer\",\n message: chalk.white(\"Build container images (Docker)?\"),\n initial: dockerSelected, // Default Yes if container platform selected\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.buildContainer = containerResponse.buildContainer ?? dockerSelected;\n\n // Container registry (if building containers)\n if (answers.buildContainer) {\n const registryResponse = await prompts({\n type: \"select\",\n name: \"containerRegistry\",\n message: chalk.white(\"Container registry:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...CONTAINER_REGISTRIES.map(r => ({\n title: `${r.icon} ${r.label}`,\n value: r.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.containerRegistry = registryResponse.containerRegistry || \"\";\n \n // If custom/self-hosted registry selected, ask for URL\n if (answers.containerRegistry === \"custom\") {\n const customRegistryResponse = await prompts({\n type: \"text\",\n name: \"customRegistryUrl\",\n message: chalk.white(\"Container registry URL:\"),\n hint: chalk.gray(\"e.g., registry.example.com:5000\"),\n validate: (v) => v.trim() ? true : \"Please enter a registry URL\",\n }, promptConfig);\n answers.customRegistryUrl = customRegistryResponse.customRegistryUrl || \"\";\n }\n \n // Docker image names\n console.log();\n console.log(chalk.gray(\" 📦 Specify published Docker image names (helps AI understand deployment)\"));\n const dockerImagesResponse = await prompts({\n type: \"text\",\n name: \"dockerImageNames\",\n message: chalk.white(\"Docker image names (comma-separated, optional):\"),\n hint: chalk.gray(\"e.g., myuser/myapp, myuser/myapp-viewer\"),\n }, promptConfig);\n answers.dockerImageNames = dockerImagesResponse.dockerImageNames || \"\";\n }\n\n // Example repository URL\n console.log();\n console.log(chalk.gray(\" 📚 Optionally, point the AI to a well-structured public repository as a reference.\"));\n console.log(chalk.gray(\" The AI will study its code patterns, architecture, and conventions to better assist you.\"));\n const exampleRepoResponse = await prompts({\n type: \"text\",\n name: \"exampleRepoUrl\",\n message: chalk.white(\"Reference repository URL:\"),\n hint: chalk.gray(\"e.g., https://github.com/vercel/next.js\"),\n }, promptConfig);\n answers.exampleRepoUrl = exampleRepoResponse.exampleRepoUrl || \"\";\n\n // External documentation URL\n console.log();\n console.log(chalk.gray(\" 📖 Optionally, link to your team's external documentation for project context.\"));\n console.log(chalk.gray(\" The AI will read these docs to understand your project's domain and conventions.\"));\n const docsUrlResponse = await prompts({\n type: \"text\",\n name: \"documentationUrl\",\n message: chalk.white(\"External docs URL:\"),\n hint: chalk.gray(\"e.g., Confluence, Notion, GitBook, internal wiki\"),\n }, promptConfig);\n answers.documentationUrl = docsUrlResponse.documentationUrl || \"\";\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 5: Security (basic - FREE tier for all users)\n // ═══════════════════════════════════════════════════════════════\n const securityStep = getCurrentStep(\"security\")!;\n showStep(currentStepNum, securityStep);\n\n // 1. Authentication Providers (login methods)\n console.log();\n console.log(chalk.cyan(\" 1️⃣ Authentication Providers\"));\n console.log(chalk.gray(\" Which login methods should your app support?\"));\n console.log();\n\n const authProvidersResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"authProviders\",\n message: chalk.white(\"Auth providers (type to search):\"),\n choices: [\n { title: \"Email/Password\", value: \"email_password\", description: chalk.gray(\"Traditional credentials\") },\n { title: \"Google\", value: \"google\", description: chalk.gray(\"Google OAuth\") },\n { title: \"GitHub\", value: \"github\", description: chalk.gray(\"GitHub OAuth\") },\n { title: \"GitLab\", value: \"gitlab\", description: chalk.gray(\"GitLab OAuth\") },\n { title: \"Microsoft\", value: \"microsoft\", description: chalk.gray(\"Azure AD / Microsoft\") },\n { title: \"Apple\", value: \"apple\", description: chalk.gray(\"Sign in with Apple\") },\n { title: \"Facebook\", value: \"facebook\", description: chalk.gray(\"Facebook Login\") },\n { title: \"Twitter/X\", value: \"twitter\", description: chalk.gray(\"Twitter OAuth\") },\n { title: \"LinkedIn\", value: \"linkedin\", description: chalk.gray(\"LinkedIn OAuth\") },\n { title: \"Discord\", value: \"discord\", description: chalk.gray(\"Discord OAuth\") },\n { title: \"Slack\", value: \"slack\", description: chalk.gray(\"Slack OAuth\") },\n { title: \"Magic Link\", value: \"magic_link\", description: chalk.gray(\"Email magic links\") },\n { title: \"SMS OTP\", value: \"sms_otp\", description: chalk.gray(\"SMS verification codes\") },\n { title: \"Passkeys/WebAuthn\", value: \"passkeys\", description: chalk.gray(\"Passwordless biometric\") },\n { title: \"SAML SSO\", value: \"saml_sso\", description: chalk.gray(\"Enterprise SAML\") },\n { title: \"Generic OIDC\", value: \"oidc_generic\", description: chalk.gray(\"Custom OIDC provider\") },\n { title: \"LDAP/AD\", value: \"ldap\", description: chalk.gray(\"Directory services\") },\n { title: \"Other\", value: \"other\", description: chalk.gray(\"Custom provider\") },\n ],\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.authProviders = authProvidersResponse.authProviders || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.authProviders as string[]).includes(\"other\")) {\n const customAuthProvidersResponse = await prompts({\n type: \"text\",\n name: \"customAuthProviders\",\n message: chalk.white(\"Describe your custom auth provider:\"),\n hint: chalk.gray(\"e.g., custom SSO, proprietary identity provider\"),\n }, promptConfig);\n answers.authProvidersOther = customAuthProvidersResponse.customAuthProviders || \"\";\n }\n\n // 2. Secrets Management\n console.log();\n console.log(chalk.cyan(\" 2️⃣ Secrets Management\"));\n console.log(chalk.gray(\" How do you manage secrets and credentials?\"));\n console.log();\n\n const secretsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"secretsManagement\",\n message: chalk.white(\"Secrets management strategies (type to search):\"),\n choices: SECRETS_MANAGEMENT_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n selected: opt.recommended,\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.secretsManagement = secretsResponse.secretsManagement || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.secretsManagement as string[]).includes(\"other\")) {\n const customSecretsResponse = await prompts({\n type: \"text\",\n name: \"customSecretsManagement\",\n message: chalk.white(\"Describe your secrets management approach:\"),\n hint: chalk.gray(\"e.g., custom KMS integration, proprietary vault\"),\n }, promptConfig);\n answers.secretsManagementOther = customSecretsResponse.customSecretsManagement || \"\";\n }\n\n // 3. Security Tooling (includes Dependabot/Renovate - multi-select, searchable)\n console.log();\n console.log(chalk.cyan(\" 3️⃣ Security Tooling\"));\n console.log(chalk.gray(\" Security scanning, dependency updates, and vulnerability detection.\"));\n console.log();\n \n const securityToolingResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"securityTooling\",\n message: chalk.white(\"Security tools (type to search):\"),\n choices: SECURITY_TOOLING_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n selected: opt.recommended,\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.securityTooling = securityToolingResponse.securityTooling || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.securityTooling as string[]).includes(\"other\")) {\n const customSecurityToolingResponse = await prompts({\n type: \"text\",\n name: \"customSecurityTooling\",\n message: chalk.white(\"Describe your security tooling:\"),\n hint: chalk.gray(\"e.g., custom SAST tool, internal vulnerability scanner\"),\n }, promptConfig);\n answers.securityToolingOther = customSecurityToolingResponse.customSecurityTooling || \"\";\n }\n\n // 4. Authentication Patterns (multi-select, searchable)\n console.log();\n console.log(chalk.cyan(\" 4️⃣ Authentication Patterns\"));\n console.log(chalk.gray(\" How users and services authenticate with your application.\"));\n console.log();\n \n const authPatternsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"authPatterns\",\n message: chalk.white(\"Auth patterns (type to search):\"),\n choices: AUTH_PATTERNS_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.authPatterns = authPatternsResponse.authPatterns || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.authPatterns as string[]).includes(\"other\")) {\n const customAuthResponse = await prompts({\n type: \"text\",\n name: \"customAuthPatterns\",\n message: chalk.white(\"Describe your authentication approach:\"),\n hint: chalk.gray(\"e.g., custom SSO, proprietary auth system\"),\n }, promptConfig);\n answers.authPatternsOther = customAuthResponse.customAuthPatterns || \"\";\n }\n\n // 5. Data Handling (multi-select, searchable)\n console.log();\n console.log(chalk.cyan(\" 5️⃣ Data Handling & Compliance\"));\n console.log(chalk.gray(\" Data protection, encryption, and compliance requirements.\"));\n console.log();\n \n const dataHandlingResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"dataHandling\",\n message: chalk.white(\"Data handling policies (type to search):\"),\n choices: DATA_HANDLING_OPTIONS.map(opt => ({\n title: opt.recommended \n ? `${opt.label} ${chalk.green(\"★ recommended\")}`\n : opt.label,\n value: opt.id,\n description: chalk.gray(opt.description),\n selected: opt.recommended,\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.dataHandling = dataHandlingResponse.dataHandling || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.dataHandling as string[]).includes(\"other\")) {\n const customDataHandlingResponse = await prompts({\n type: \"text\",\n name: \"customDataHandling\",\n message: chalk.white(\"Describe your data handling policies:\"),\n hint: chalk.gray(\"e.g., custom encryption, specific compliance requirements\"),\n }, promptConfig);\n answers.dataHandlingOther = customDataHandlingResponse.customDataHandling || \"\";\n }\n\n // 6. Compliance Standards\n console.log();\n console.log(chalk.cyan(\" 6️⃣ Compliance Standards\"));\n console.log(chalk.gray(\" Regulatory compliance requirements for your application.\"));\n console.log();\n\n const complianceResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"compliance\",\n message: chalk.white(\"Compliance standards (type to search):\"),\n choices: [\n { title: \"GDPR - EU data protection\", value: \"gdpr\" },\n { title: \"CCPA - California privacy\", value: \"ccpa\" },\n { title: \"HIPAA - Healthcare data\", value: \"hipaa\" },\n { title: \"SOC 2 - Service controls\", value: \"soc2\" },\n { title: \"PCI-DSS - Payment card data\", value: \"pci_dss\" },\n { title: \"ISO 27001 - Information security\", value: \"iso27001\" },\n { title: \"FedRAMP - US federal cloud\", value: \"fedramp\" },\n { title: \"Other\", value: \"other\" },\n ],\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.compliance = complianceResponse.compliance || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.compliance as string[]).includes(\"other\")) {\n const customComplianceResponse = await prompts({\n type: \"text\",\n name: \"customCompliance\",\n message: chalk.white(\"Describe your compliance requirements:\"),\n hint: chalk.gray(\"e.g., custom industry regulations, internal policies\"),\n }, promptConfig);\n answers.complianceOther = customComplianceResponse.customCompliance || \"\";\n }\n\n // 7. Analytics & Telemetry\n console.log();\n console.log(chalk.cyan(\" 7️⃣ Analytics & Telemetry\"));\n console.log(chalk.gray(\" Usage analytics and monitoring solutions.\"));\n console.log();\n\n const analyticsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"analytics\",\n message: chalk.white(\"Analytics tools (type to search):\"),\n choices: [\n { title: \"Google Analytics (GA4)\", value: \"google_analytics\" },\n { title: \"Plausible - Privacy-focused\", value: \"plausible\" },\n { title: \"PostHog - Product analytics\", value: \"posthog\" },\n { title: \"Mixpanel - Event analytics\", value: \"mixpanel\" },\n { title: \"Amplitude - Product analytics\", value: \"amplitude\" },\n { title: \"Segment - Data pipeline\", value: \"segment\" },\n { title: \"Umami - Self-hosted analytics\", value: \"umami\" },\n { title: \"Matomo - Self-hosted (Piwik)\", value: \"matomo\" },\n { title: \"No Analytics - Privacy-first approach\", value: \"none\" },\n { title: \"Other\", value: \"other\" },\n ],\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.analytics = analyticsResponse.analytics || [];\n\n // If \"other\" selected, ask for custom input\n if ((answers.analytics as string[]).includes(\"other\")) {\n const customAnalyticsResponse = await prompts({\n type: \"text\",\n name: \"customAnalytics\",\n message: chalk.white(\"Describe your analytics solution:\"),\n hint: chalk.gray(\"e.g., custom analytics platform, self-hosted solution\"),\n }, promptConfig);\n answers.analyticsOther = customAnalyticsResponse.customAnalytics || \"\";\n }\n\n // Additional security notes\n const securityNotesResponse = await prompts({\n type: \"text\",\n name: \"securityNotes\",\n message: chalk.white(\"Additional security notes:\"),\n hint: chalk.gray(\"e.g., specific compliance requirements, custom security practices\"),\n }, promptConfig);\n answers.securityNotes = securityNotesResponse.securityNotes || \"\";\n\n // Show security summary\n console.log();\n console.log(chalk.green(\" ✓ Security configuration complete:\"));\n if ((answers.authProviders as string[]).length > 0) {\n console.log(chalk.gray(` • Auth Providers: ${(answers.authProviders as string[]).join(\", \")}`));\n }\n if ((answers.secretsManagement as string[]).length > 0) {\n console.log(chalk.gray(` • Secrets: ${(answers.secretsManagement as string[]).join(\", \")}`));\n }\n if ((answers.securityTooling as string[]).length > 0) {\n console.log(chalk.gray(` • Tooling: ${(answers.securityTooling as string[]).join(\", \")}`));\n }\n if ((answers.authPatterns as string[]).length > 0) {\n console.log(chalk.gray(` • Auth Patterns: ${(answers.authPatterns as string[]).join(\", \")}`));\n }\n if ((answers.dataHandling as string[]).length > 0) {\n console.log(chalk.gray(` • Data: ${(answers.dataHandling as string[]).join(\", \")}`));\n }\n if ((answers.compliance as string[]).length > 0) {\n console.log(chalk.gray(` • Compliance: ${(answers.compliance as string[]).join(\", \")}`));\n }\n if ((answers.analytics as string[]).length > 0) {\n console.log(chalk.gray(` • Analytics: ${(answers.analytics as string[]).join(\", \")}`));\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 6: Commands (intermediate)\n // (was STEP 5 before Security step added)\n // ═══════════════════════════════════════════════════════════════\n {\n const commandsStep = getCurrentStep(\"commands\")!;\n showStep(currentStepNum, commandsStep);\n\n console.log(chalk.gray(\" Select commands for your project. Detected commands are pre-selected.\"));\n console.log();\n \n // Helper to build choices with detected commands first\n const buildCommandChoices = (\n category: \"build\" | \"test\" | \"lint\" | \"dev\" | \"format\" | \"typecheck\" | \"clean\" | \"preCommit\" | \"additional\",\n commonCmds: string[],\n color: (s: string) => string\n ) => {\n const detectedCmds = detected?.detectedCommands?.[category] || [];\n const detectedSet = new Set(detectedCmds.map(d => d.cmd));\n \n // Start with detected commands (pre-selected)\n const choices = detectedCmds.map(d => ({\n title: `${color(d.cmd)} ${chalk.green(\"(detected)\")}${d.desc ? chalk.gray(` - ${d.desc}`) : \"\"}`,\n value: d.cmd,\n selected: true,\n }));\n \n // Add common commands that weren't detected\n for (const cmd of commonCmds) {\n if (!detectedSet.has(cmd)) {\n choices.push({\n title: color(cmd),\n value: cmd,\n selected: false,\n });\n }\n }\n \n return choices;\n };\n \n // Show summary of detected commands\n const detectedCmds = detected?.detectedCommands;\n if (detectedCmds) {\n const totalDetected = Object.values(detectedCmds).reduce((sum, arr) => sum + (arr?.length || 0), 0);\n if (totalDetected > 0) {\n console.log(chalk.green(` ✓ ${totalDetected} commands detected from your project`));\n console.log();\n }\n }\n\n // Build commands - autocomplete for searching\n const buildChoices = buildCommandChoices(\"build\", COMMON_COMMANDS.build, chalk.cyan);\n const buildResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"build\",\n message: chalk.white(\"Build commands (type to search):\"),\n choices: buildChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Test commands - autocomplete for searching\n const testChoices = buildCommandChoices(\"test\", COMMON_COMMANDS.test, chalk.yellow);\n const testResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"test\",\n message: chalk.white(\"Test commands (type to search):\"),\n choices: testChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Lint commands - autocomplete for searching\n const lintChoices = buildCommandChoices(\"lint\", COMMON_COMMANDS.lint, chalk.green);\n const lintResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"lint\",\n message: chalk.white(\"Lint commands (type to search):\"),\n choices: lintChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Dev commands - autocomplete for searching\n const devChoices = buildCommandChoices(\"dev\", COMMON_COMMANDS.dev, chalk.magenta);\n const devResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"dev\",\n message: chalk.white(\"Dev server commands (type to search):\"),\n choices: devChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Format commands - autocomplete for searching\n const formatChoices = buildCommandChoices(\"format\", COMMON_COMMANDS.format, chalk.blue);\n const formatResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"format\",\n message: chalk.white(\"Format commands (type to search):\"),\n choices: formatChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Typecheck commands - autocomplete for searching\n const typecheckChoices = buildCommandChoices(\"typecheck\", COMMON_COMMANDS.typecheck, chalk.gray);\n const typecheckResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"typecheck\",\n message: chalk.white(\"Typecheck commands (type to search):\"),\n choices: typecheckChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Clean commands - autocomplete for searching\n const cleanChoices = buildCommandChoices(\"clean\", COMMON_COMMANDS.clean, chalk.red);\n const cleanResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"clean\",\n message: chalk.white(\"Clean commands (type to search):\"),\n choices: cleanChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Pre-commit commands - autocomplete for searching\n const preCommitChoices = buildCommandChoices(\"preCommit\", COMMON_COMMANDS.preCommit, chalk.yellow);\n const preCommitResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"preCommit\",\n message: chalk.white(\"Pre-commit hooks (type to search):\"),\n choices: preCommitChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n // Additional commands - autocomplete for searching\n const additionalChoices = buildCommandChoices(\"additional\", COMMON_COMMANDS.additional, chalk.blue);\n const additionalResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"additional\",\n message: chalk.white(\"Additional commands (type to search):\"),\n choices: additionalChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n\n answers.commands = {\n build: buildResponse.build || [],\n test: testResponse.test || [],\n lint: lintResponse.lint || [],\n dev: devResponse.dev || [],\n format: formatResponse.format || [],\n typecheck: typecheckResponse.typecheck || [],\n clean: cleanResponse.clean || [],\n preCommit: preCommitResponse.preCommit || [],\n additional: additionalResponse.additional || [],\n };\n\n // Custom command\n const customCmdResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Custom command:\"),\n hint: chalk.gray(\"e.g., npm run migrate, make deploy\"),\n }, promptConfig);\n if (customCmdResponse.custom) {\n (answers.commands as Record<string, unknown>).custom = customCmdResponse.custom;\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 7: Code Style (intermediate)\n // ═══════════════════════════════════════════════════════════════\n {\n const styleStep = getCurrentStep(\"code_style\")!;\n showStep(currentStepNum, styleStep);\n\n const namingResponse = await prompts({\n type: \"select\",\n name: \"naming\",\n message: chalk.white(\"Naming convention:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...NAMING_CONVENTIONS.map(n => ({\n title: n.id === \"language_default\" \n ? `${n.label} ${chalk.green(\"★ recommended\")}`\n : n.label,\n value: n.id,\n description: chalk.gray(n.desc),\n })),\n ],\n initial: 1, // Pre-select \"Follow language conventions\"\n }, promptConfig);\n answers.namingConvention = namingResponse.naming || \"\";\n\n const errorResponse = await prompts({\n type: \"select\",\n name: \"errorHandling\",\n message: chalk.white(\"Error handling pattern:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...ERROR_PATTERNS.map(e => ({\n title: e.label,\n value: e.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.errorHandling = errorResponse.errorHandling || \"\";\n \n // If \"other\" selected, ask for custom input\n if (answers.errorHandling === \"other\") {\n const customErrorResponse = await prompts({\n type: \"text\",\n name: \"customErrorHandling\",\n message: chalk.white(\"Describe your error handling approach:\"),\n hint: chalk.gray(\"e.g., Railway-oriented, custom error boundaries\"),\n }, promptConfig);\n answers.errorHandlingOther = customErrorResponse.customErrorHandling || \"\";\n }\n\n // Logging conventions - searchable select like WebUI\n const loggingResponse = await prompts({\n type: \"autocomplete\",\n name: \"loggingConventions\",\n message: chalk.white(\"Logging conventions (type to search):\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n ...LOGGING_OPTIONS.map(l => ({\n title: l.label,\n value: l.id,\n })),\n ],\n initial: 0,\n }, promptConfig);\n answers.loggingConventions = loggingResponse.loggingConventions || \"\";\n \n // If \"other\" selected, ask for custom input\n if (answers.loggingConventions === \"other\") {\n const customLoggingResponse = await prompts({\n type: \"text\",\n name: \"customLogging\",\n message: chalk.white(\"Describe your logging convention:\"),\n hint: chalk.gray(\"e.g., custom logger, file-based logging\"),\n }, promptConfig);\n answers.loggingConventionsOther = customLoggingResponse.customLogging || \"\";\n }\n\n // Max file length\n const maxFileLengthResponse = await prompts({\n type: \"number\",\n name: \"maxFileLength\",\n message: chalk.white(\"Max file length (lines, 100-10000):\"),\n initial: 300,\n min: 100,\n max: 10000,\n }, promptConfig);\n answers.maxFileLength = maxFileLengthResponse.maxFileLength || 300;\n\n // Import order\n const importOrderResponse = await prompts({\n type: \"select\",\n name: \"importOrder\",\n message: chalk.white(\"Import order preference:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n { title: \"Grouped (external → internal → relative)\", value: \"grouped\" },\n { title: \"Alphabetical (sort A-Z)\", value: \"sorted\" },\n { title: \"Natural (leave as written)\", value: \"natural\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.importOrder = importOrderResponse.importOrder || \"\";\n\n // Comment language\n const commentLangResponse = await prompts({\n type: \"autocomplete\",\n name: \"commentLanguage\",\n message: chalk.white(\"Comment language:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"\" },\n { title: \"🇬🇧 English\", value: \"english\" },\n { title: \"🇪🇸 Spanish (Español)\", value: \"spanish\" },\n { title: \"🇫🇷 French (Français)\", value: \"french\" },\n { title: \"🇩🇪 German (Deutsch)\", value: \"german\" },\n { title: \"🇮🇹 Italian (Italiano)\", value: \"italian\" },\n { title: \"🇵🇹 Portuguese (Português)\", value: \"portuguese\" },\n { title: \"🇳🇱 Dutch (Nederlands)\", value: \"dutch\" },\n { title: \"🇷🇺 Russian (Русский)\", value: \"russian\" },\n { title: \"🇨🇳 Chinese Simplified (简体中文)\", value: \"chinese_simplified\" },\n { title: \"🇹🇼 Chinese Traditional (繁體中文)\", value: \"chinese_traditional\" },\n { title: \"🇯🇵 Japanese (日本語)\", value: \"japanese\" },\n { title: \"🇰🇷 Korean (한국어)\", value: \"korean\" },\n { title: \"🇸🇦 Arabic (العربية)\", value: \"arabic\" },\n { title: \"🇮🇱 Hebrew (עברית)\", value: \"hebrew\" },\n { title: \"🇮🇳 Hindi (हिन्दी)\", value: \"hindi\" },\n { title: \"🇧🇩 Bengali (বাংলা)\", value: \"bengali\" },\n { title: \"🇵🇰 Urdu (اردو)\", value: \"urdu\" },\n { title: \"🇹🇭 Thai (ไทย)\", value: \"thai\" },\n { title: \"🇻🇳 Vietnamese (Tiếng Việt)\", value: \"vietnamese\" },\n { title: \"🇮🇩 Indonesian (Bahasa Indonesia)\", value: \"indonesian\" },\n { title: \"🇲🇾 Malay (Bahasa Melayu)\", value: \"malay\" },\n { title: \"🇵🇭 Filipino (Tagalog)\", value: \"filipino\" },\n { title: \"🇵🇱 Polish (Polski)\", value: \"polish\" },\n { title: \"🇨🇿 Czech (Čeština)\", value: \"czech\" },\n { title: \"🇸🇰 Slovak (Slovenčina)\", value: \"slovak\" },\n { title: \"🇭🇺 Hungarian (Magyar)\", value: \"hungarian\" },\n { title: \"🇷🇴 Romanian (Română)\", value: \"romanian\" },\n { title: \"🇧🇬 Bulgarian (Български)\", value: \"bulgarian\" },\n { title: \"🇺🇦 Ukrainian (Українська)\", value: \"ukrainian\" },\n { title: \"🇬🇷 Greek (Ελληνικά)\", value: \"greek\" },\n { title: \"🇹🇷 Turkish (Türkçe)\", value: \"turkish\" },\n { title: \"🇸🇪 Swedish (Svenska)\", value: \"swedish\" },\n { title: \"🇳🇴 Norwegian (Norsk)\", value: \"norwegian\" },\n { title: \"🇩🇰 Danish (Dansk)\", value: \"danish\" },\n { title: \"🇫🇮 Finnish (Suomi)\", value: \"finnish\" },\n { title: \"🇪🇪 Estonian (Eesti)\", value: \"estonian\" },\n { title: \"🇱🇻 Latvian (Latviešu)\", value: \"latvian\" },\n { title: \"🇱🇹 Lithuanian (Lietuvių)\", value: \"lithuanian\" },\n { title: \"🇸🇮 Slovenian (Slovenščina)\", value: \"slovenian\" },\n { title: \"🇭🇷 Croatian (Hrvatski)\", value: \"croatian\" },\n { title: \"🇷🇸 Serbian (Српски)\", value: \"serbian\" },\n { title: \"🇮🇷 Persian/Farsi (فارسی)\", value: \"persian\" },\n { title: \"🇿🇦 Afrikaans\", value: \"afrikaans\" },\n { title: \"🇳🇬 Swahili (Kiswahili)\", value: \"swahili\" },\n { title: \"🇪🇬 Egyptian Arabic\", value: \"egyptian_arabic\" },\n { title: \"🇲🇽 Latin American Spanish\", value: \"latam_spanish\" },\n { title: \"🇧🇷 Brazilian Portuguese\", value: \"brazilian_portuguese\" },\n { title: \"🇨🇦 Canadian French\", value: \"canadian_french\" },\n { title: \"🇦🇹 Austrian German\", value: \"austrian_german\" },\n { title: \"🇨🇭 Swiss German\", value: \"swiss_german\" },\n { title: \"🔤 Other (specify)\", value: \"other\" },\n ],\n hint: chalk.gray(\"type to filter\"),\n suggest: (input: string, choices: prompts.Choice[]) =>\n Promise.resolve(choices.filter(c => c.title.toLowerCase().includes(input.toLowerCase()))),\n }, promptConfig);\n answers.commentLanguage = commentLangResponse.commentLanguage || \"\";\n \n // If \"other\" selected, ask for custom language\n if (answers.commentLanguage === \"other\") {\n const customLangResponse = await prompts({\n type: \"text\",\n name: \"customLanguage\",\n message: chalk.white(\"Specify comment language:\"),\n validate: (v) => v.trim() ? true : \"Please enter a language\",\n }, promptConfig);\n answers.commentLanguage = customLangResponse.customLanguage || \"english\";\n }\n\n // Documentation style\n const docStyleResponse = await prompts({\n type: \"select\",\n name: \"docStyle\",\n message: chalk.white(\"Documentation style:\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip (language default)\"), value: \"\" },\n { title: \"JSDoc\", value: \"jsdoc\" },\n { title: \"TSDoc\", value: \"tsdoc\" },\n { title: \"Python docstrings\", value: \"pydoc\" },\n { title: \"Go doc comments\", value: \"godoc\" },\n { title: \"Rust doc (///)\", value: \"rustdoc\" },\n { title: \"Javadoc\", value: \"javadoc\" },\n { title: \"C# XML docs\", value: \"xmldoc\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.docStyle = docStyleResponse.docStyle || \"\";\n\n const styleNotesResponse = await prompts({\n type: \"text\",\n name: \"styleNotes\",\n message: chalk.white(\"Additional style notes:\"),\n hint: chalk.gray(\"e.g., prefer named exports, max line length 100\"),\n }, promptConfig);\n answers.styleNotes = styleNotesResponse.styleNotes || \"\";\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 8: AI Behavior (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const aiStep = getCurrentStep(\"ai\")!;\n showStep(currentStepNum, aiStep);\n \n const aiBehaviorResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"aiBehavior\",\n message: chalk.white(\"AI behavior rules (type to filter):\"),\n choices: AI_BEHAVIOR_RULES.map(r => ({\n title: r.recommended \n ? `${r.label} ${chalk.green(\"★ recommended\")}`\n : r.label,\n value: r.id,\n description: chalk.gray(r.description),\n selected: true, // All selected by default\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.aiBehavior = aiBehaviorResponse.aiBehavior || AI_BEHAVIOR_RULES.map(r => r.id);\n \n // Show selected rules in newlines\n if ((answers.aiBehavior as string[]).length > 0) {\n console.log(chalk.green(\" ✓ Selected:\"));\n for (const ruleId of (answers.aiBehavior as string[])) {\n const rule = AI_BEHAVIOR_RULES.find(r => r.id === ruleId);\n if (rule) console.log(chalk.cyan(` • ${rule.label}`));\n }\n }\n\n // Plan mode frequency\n const planModeResponse = await prompts({\n type: \"select\",\n name: \"planModeFrequency\",\n message: chalk.white(\"When should AI enter plan mode before changes?\"),\n choices: [\n { title: \"Always - Plan before every task\", value: \"always\" },\n { title: \"Complex Tasks - Multi-step or risky changes\", value: \"complex_tasks\" },\n { title: \"Multi-file Changes - When touching multiple files\", value: \"multi_file\" },\n { title: \"New Features Only - Only for new functionality\", value: \"new_features\" },\n { title: \"On Request - Only when explicitly asked\", value: \"on_request\" },\n { title: \"Never - Skip planning entirely\", value: \"never\" },\n ],\n initial: 1, // Default to complex_tasks\n }, promptConfig);\n answers.planModeFrequency = planModeResponse.planModeFrequency || \"complex_tasks\";\n\n // Explanation verbosity\n const verbosityResponse = await prompts({\n type: \"select\",\n name: \"explanationVerbosity\",\n message: chalk.white(\"Explanation verbosity:\"),\n choices: [\n { title: \"📝 Concise - Brief, to the point\", value: \"concise\" },\n { title: \"⚖️ Balanced - Clear with context\", value: \"balanced\" },\n { title: \"📚 Detailed - In-depth explanations\", value: \"detailed\" },\n ],\n initial: 1,\n }, promptConfig);\n answers.explanationVerbosity = verbosityResponse.explanationVerbosity || \"balanced\";\n\n // Workaround behavior\n const workaroundResponse = await prompts({\n type: \"toggle\",\n name: \"attemptWorkarounds\",\n message: chalk.white(\"When stuck, should the AI attempt workarounds?\"),\n initial: true,\n active: \"Yes, try workarounds\",\n inactive: \"No, stop and ask\",\n }, promptConfig);\n answers.attemptWorkarounds = workaroundResponse.attemptWorkarounds ?? true;\n\n // Focus areas\n const accessibilityResponse = await prompts({\n type: \"toggle\",\n name: \"accessibilityFocus\",\n message: chalk.white(\"Prioritize accessibility (WCAG, a11y)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.accessibilityFocus = accessibilityResponse.accessibilityFocus ?? false;\n\n const performanceResponse = await prompts({\n type: \"toggle\",\n name: \"performanceFocus\",\n message: chalk.white(\"Prioritize performance optimizations?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.performanceFocus = performanceResponse.performanceFocus ?? false;\n\n // MCP Servers\n console.log();\n console.log(chalk.gray(\" 🔌 MCP (Model Context Protocol) servers let the AI interact with external tools\"));\n console.log(chalk.gray(\" like databases, APIs, file systems, and more. List any you have configured.\"));\n const mcpServersResponse = await prompts({\n type: \"text\",\n name: \"mcpServers\",\n message: chalk.white(\"MCP servers (comma-separated, or leave empty):\"),\n hint: chalk.gray(\"e.g. filesystem, github, postgres, docker\"),\n }, promptConfig);\n answers.mcpServers = mcpServersResponse.mcpServers || \"\";\n\n // Server access\n const serverAccessResponse = await prompts({\n type: \"toggle\",\n name: \"serverAccess\",\n message: chalk.white(\"Does this project require logging into a server?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.serverAccess = serverAccessResponse.serverAccess ?? false;\n\n if (answers.serverAccess) {\n const sshKeyPathResponse = await prompts({\n type: \"text\",\n name: \"sshKeyPath\",\n message: chalk.white(\"SSH key path (leave empty for default ~/.ssh/):\"),\n hint: chalk.gray(\"e.g. ~/.ssh/id_ed25519\"),\n }, promptConfig);\n answers.sshKeyPath = sshKeyPathResponse.sshKeyPath || \"\";\n }\n\n // Manual deployment (only ask if no CI/CD was selected)\n const hasCicd = (answers.cicd as string[])?.length > 0;\n if (!hasCicd) {\n const manualDeployResponse = await prompts({\n type: \"toggle\",\n name: \"manualDeployment\",\n message: chalk.white(\"Do you deploy manually (no CI/CD)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.manualDeployment = manualDeployResponse.manualDeployment ?? false;\n\n if (answers.manualDeployment) {\n const deployMethodResponse = await prompts({\n type: \"select\",\n name: \"deploymentMethod\",\n message: chalk.white(\"How do you deploy?\"),\n choices: [\n { title: \"🐳 Portainer (GitOps stacks)\", value: \"portainer\" },\n { title: \"📦 Docker Compose (manual)\", value: \"docker_compose\" },\n { title: \"☸️ Kubernetes (kubectl)\", value: \"kubernetes\" },\n { title: \"🖥️ Bare metal (direct)\", value: \"bare_metal\" },\n ],\n }, promptConfig);\n answers.deploymentMethod = deployMethodResponse.deploymentMethod || \"\";\n }\n }\n\n console.log();\n console.log(chalk.gray(\" 📁 Select files the AI should read first to understand your project context.\"));\n console.log(chalk.gray(\" These help the AI understand your codebase, APIs, and conventions.\"));\n const importantFilesResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"importantFiles\",\n message: chalk.white(\"Important files AI should read (type to search):\"),\n choices: IMPORTANT_FILES.map(f => ({\n title: `${f.icon} ${f.label}`,\n value: f.id,\n description: chalk.gray(f.description),\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.importantFiles = importantFilesResponse.importantFiles || [];\n\n // Ask for custom important files - with language-aware hints\n console.log();\n const stackLanguages = (answers.stack as string[]) || [];\n const importantFileHints: string[] = [];\n if (stackLanguages.includes(\"python\")) {\n importantFileHints.push(\"src/config.py\", \"requirements.txt\", \".env.example\");\n }\n if (stackLanguages.includes(\"typescript\") || stackLanguages.includes(\"javascript\")) {\n importantFileHints.push(\"src/config/index.ts\", \"tsconfig.json\", \".env.example\");\n }\n if (stackLanguages.includes(\"go\")) {\n importantFileHints.push(\"cmd/main.go\", \"internal/config/config.go\", \"go.mod\");\n }\n if (stackLanguages.includes(\"rust\")) {\n importantFileHints.push(\"src/main.rs\", \"src/config.rs\", \"Cargo.toml\");\n }\n if (stackLanguages.includes(\"java\") || stackLanguages.includes(\"kotlin\")) {\n importantFileHints.push(\"src/main/resources/application.yml\", \"pom.xml\");\n }\n const hintText = importantFileHints.length > 0\n ? `e.g., ${importantFileHints.slice(0, 3).join(\", \")}`\n : \"e.g., src/config/index.ts, docs/api.md, prisma/schema.prisma\";\n \n const customImportantFilesResponse = await prompts({\n type: \"text\",\n name: \"importantFilesOther\",\n message: chalk.white(\"Other important files (comma-separated, optional):\"),\n hint: chalk.gray(hintText),\n }, promptConfig);\n answers.importantFilesOther = customImportantFilesResponse.importantFilesOther || \"\";\n\n // Cloud sync & AI learning options (grouped together)\n console.log();\n console.log(chalk.gray(\" ─── Cloud & AI Options ───\"));\n console.log();\n \n // Self-improving config - instruct AI to suggest improvements\n console.log(chalk.gray(\" 🧠 Write instructions in the generated config telling AI it can suggest improvements.\"));\n console.log(chalk.gray(\" The AI will learn your patterns and propose better rules, new conventions,\"));\n console.log(chalk.gray(\" and optimizations over time. You review and approve any changes.\"));\n const selfImproveResponse = await prompts({\n type: \"toggle\",\n name: \"selfImprove\",\n message: chalk.white(\"Enable self-improving AI config rules?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Instructs AI to suggest improvements\"),\n }, promptConfig);\n answers.selfImprove = selfImproveResponse.selfImprove || false;\n\n // Cloud sync - save to cloud and enable synchronization\n console.log();\n console.log(chalk.gray(\" ☁️ Store your config on LynxPrompt cloud for syncing and version control.\"));\n console.log(chalk.gray(\" Benefits:\"));\n console.log(chalk.gray(\" • Sync configs across all your devices\"));\n console.log(chalk.gray(\" • Track changes and rollback if needed\"));\n console.log(chalk.gray(\" • Instructions added to config so AI can sync automatically\"));\n const enableAutoUpdateResponse = await prompts({\n type: \"toggle\",\n name: \"enableAutoUpdate\",\n message: chalk.white(\"Enable cloud synchronization?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Enables push/pull/diff with LynxPrompt cloud\"),\n }, promptConfig);\n answers.enableAutoUpdate = enableAutoUpdateResponse.enableAutoUpdate || false;\n\n // Ask about CLI availability when cloud sync enabled\n answers.preferCliSync = true; // Default to CLI\n answers.tokenEnvVar = \"LYNXPROMPT_API_TOKEN\"; // Default env var name\n \n if (answers.enableAutoUpdate && api) {\n console.log();\n console.log(chalk.gray(\" 📦 How should the AI perform sync operations?\"));\n console.log();\n console.log(chalk.green.bold(\" CLI (Recommended):\"));\n console.log(chalk.gray(\" • Most secure - no tokens stored anywhere\"));\n console.log(chalk.gray(\" • AI runs lynxp commands directly\"));\n console.log(chalk.gray(\" • Requires CLI installed: npm install -g lynxprompt\"));\n console.log();\n console.log(chalk.yellow(\" curl/token/env variable:\"));\n console.log(chalk.gray(\" • Works without CLI installed\"));\n console.log(chalk.gray(\" • Token stored in environment variable (not in file)\"));\n console.log(chalk.gray(\" • Less convenient but still secure\"));\n console.log();\n \n const syncMethodResponse = await prompts({\n type: \"toggle\",\n name: \"preferCliSync\",\n message: chalk.white(\"Will LynxPrompt CLI be available in your dev environment?\"),\n initial: true, // Default to yes - strongly recommended\n active: \"Yes, use CLI (recommended)\",\n inactive: \"No, use curl/token/env variable\",\n hint: chalk.green(\"Strongly recommended for security\"),\n }, promptConfig);\n answers.preferCliSync = syncMethodResponse.preferCliSync ?? true;\n \n if (answers.preferCliSync) {\n console.log(chalk.green(\" ✓ Perfect! Config will include lynxp CLI commands for syncing\"));\n console.log(chalk.gray(\" Make sure CLI is installed: npm install -g lynxprompt\"));\n } else {\n // Ask for env var name where token will be stored\n console.log();\n console.log(chalk.gray(\" 🔐 Config will include curl commands using an environment variable.\"));\n console.log(chalk.gray(\" Your API token will NOT be stored in the config file.\"));\n const envVarResponse = await prompts({\n type: \"text\",\n name: \"tokenEnvVar\",\n message: chalk.white(\"Environment variable name for API token:\"),\n initial: \"LYNXPROMPT_API_TOKEN\",\n hint: chalk.gray(\"e.g., LYNXPROMPT_API_TOKEN, LP_TOKEN\"),\n }, promptConfig);\n answers.tokenEnvVar = envVarResponse.tokenEnvVar || \"LYNXPROMPT_API_TOKEN\";\n console.log(chalk.green(` ✓ Config will reference $${answers.tokenEnvVar}`));\n console.log(chalk.gray(` Remember to set: export ${answers.tokenEnvVar}=\"your_token_here\"`));\n }\n }\n\n if (answers.enableAutoUpdate && !api) {\n console.log(chalk.yellow(\" ⚠️ Cloud sync requires login. Run 'lynxp login' first.\"));\n console.log(chalk.gray(\" Continuing without cloud sync...\"));\n answers.enableAutoUpdate = false;\n }\n \n // If multiple output formats selected AND cloud sync enabled, ask which to upload\n const selectedPlatforms = answers.platforms as string[];\n if (answers.enableAutoUpdate && selectedPlatforms && selectedPlatforms.length > 1) {\n console.log();\n console.log(chalk.yellow(\" ⚠️ You selected multiple output formats but only one can be synced to cloud.\"));\n const primaryFormatResponse = await prompts({\n type: \"select\",\n name: \"primaryFormat\",\n message: chalk.white(\"Which format should be the cloud-synced version?\"),\n choices: selectedPlatforms.map(p => ({ title: p, value: p })),\n hint: chalk.gray(\"This version will be uploaded to LynxPrompt cloud\"),\n }, promptConfig);\n answers.primarySyncFormat = primaryFormatResponse.primaryFormat || selectedPlatforms[0];\n console.log(chalk.green(` ✓ ${answers.primarySyncFormat} will be synced to cloud, others are local-only`));\n }\n\n // Include personal data from profile - only available for authenticated users\n console.log();\n if (isAuthenticated()) {\n console.log(chalk.gray(\" 👤 Include your profile info (name, email, persona) in the generated config.\"));\n console.log(chalk.gray(\" This helps AI tools personalize responses to your expertise level.\"));\n const includePersonalResponse = await prompts({\n type: \"toggle\",\n name: \"includePersonalData\",\n message: chalk.white(\"Include your profile data in config?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n hint: chalk.gray(\"Name, email, expertise from your profile\"),\n }, promptConfig);\n answers.includePersonalData = includePersonalResponse.includePersonalData || false;\n\n // If personal data enabled, fetch user profile from API\n if (answers.includePersonalData && api) {\n try {\n console.log(chalk.gray(\" Fetching profile from LynxPrompt...\"));\n const userResponse = await api.getUser();\n if (userResponse.user) {\n answers.userName = userResponse.user.name || userResponse.user.display_name || \"\";\n answers.userEmail = userResponse.user.email || \"\";\n answers.userPersona = userResponse.user.persona || \"\";\n // skill_level can serve as expertise\n answers.userExpertise = userResponse.user.skill_level || \"\";\n console.log(chalk.green(\" ✓ Profile loaded\"));\n }\n } catch {\n console.log(chalk.yellow(\" Could not fetch profile data. Using defaults.\"));\n }\n }\n } else {\n console.log(chalk.gray(\" 🔒 Profile inclusion requires sign-in. Run \") + chalk.cyan(\"lynxp login\") + chalk.gray(\" to enable.\"));\n answers.includePersonalData = false;\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 9: Boundaries (advanced)\n // ═══════════════════════════════════════════════════════════════\n {\n const boundariesStep = getCurrentStep(\"boundaries\")!;\n showStep(currentStepNum, boundariesStep);\n\n console.log(chalk.gray(\" Define what AI should never do, ask first, or always do.\"));\n console.log(chalk.gray(\" Each option can only be in one category. Select 'Other' to add custom.\"));\n console.log();\n\n // Track used options to filter them out from subsequent questions\n const usedOptions = new Set<string>();\n const OTHER_MARKER = \"__other__\";\n\n // 1. NEVER do - AI will refuse to do (ask first - most restrictive)\n console.log(chalk.red.bold(\" ✗ NEVER ALLOW - AI will refuse to do\"));\n const neverResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"never\",\n message: chalk.white(\"Never allow (type to filter):\"),\n choices: [\n ...BOUNDARY_OPTIONS.map(o => ({\n title: chalk.red(o),\n value: o,\n })),\n { title: chalk.magenta(\"✎ Other (custom)\"), value: OTHER_MARKER },\n ],\n hint: chalk.gray(\"space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n let neverList: string[] = (neverResponse.never || []).filter((o: string) => o !== OTHER_MARKER);\n \n // Handle \"Other\" for Never\n if ((neverResponse.never || []).includes(OTHER_MARKER)) {\n const customNeverResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Enter custom 'never allow' items (comma-separated):\"),\n hint: chalk.gray(\"e.g., Push to production, Deploy without approval\"),\n }, promptConfig);\n if (customNeverResponse.custom) {\n const customItems = customNeverResponse.custom.split(\",\").map((s: string) => s.trim()).filter(Boolean);\n neverList = [...neverList, ...customItems];\n }\n }\n answers.boundaryNever = neverList;\n neverList.forEach(o => usedOptions.add(o));\n\n // 2. ASK first - AI will ask before doing\n console.log();\n console.log(chalk.yellow.bold(\" ? ASK FIRST - AI will ask before doing\"));\n const availableForAsk = BOUNDARY_OPTIONS.filter(o => !usedOptions.has(o));\n const askResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"ask\",\n message: chalk.white(\"Ask first (type to filter):\"),\n choices: [\n ...availableForAsk.map(o => ({\n title: chalk.yellow(o),\n value: o,\n })),\n { title: chalk.magenta(\"✎ Other (custom)\"), value: OTHER_MARKER },\n ],\n hint: chalk.gray(\"space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n let askList: string[] = (askResponse.ask || []).filter((o: string) => o !== OTHER_MARKER);\n \n // Handle \"Other\" for Ask\n if ((askResponse.ask || []).includes(OTHER_MARKER)) {\n const customAskResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Enter custom 'ask first' items (comma-separated):\"),\n hint: chalk.gray(\"e.g., Change external API calls, Modify authentication\"),\n }, promptConfig);\n if (customAskResponse.custom) {\n const customItems = customAskResponse.custom.split(\",\").map((s: string) => s.trim()).filter(Boolean);\n askList = [...askList, ...customItems];\n }\n }\n answers.boundaryAsk = askList;\n askList.forEach(o => usedOptions.add(o));\n\n // 3. ALWAYS do - AI will do these automatically\n console.log();\n console.log(chalk.green.bold(\" ✓ ALWAYS ALLOW - AI will do these automatically\"));\n const availableForAlways = BOUNDARY_OPTIONS.filter(o => !usedOptions.has(o));\n const alwaysResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"always\",\n message: chalk.white(\"Always allow (type to filter):\"),\n choices: [\n ...availableForAlways.map(o => ({\n title: chalk.green(o),\n value: o,\n })),\n { title: chalk.magenta(\"✎ Other (custom)\"), value: OTHER_MARKER },\n ],\n hint: chalk.gray(\"space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n let alwaysList: string[] = (alwaysResponse.always || []).filter((o: string) => o !== OTHER_MARKER);\n \n // Handle \"Other\" for Always\n if ((alwaysResponse.always || []).includes(OTHER_MARKER)) {\n const customAlwaysResponse = await prompts({\n type: \"text\",\n name: \"custom\",\n message: chalk.white(\"Enter custom 'always allow' items (comma-separated):\"),\n hint: chalk.gray(\"e.g., Add comments, Format code\"),\n }, promptConfig);\n if (customAlwaysResponse.custom) {\n const customItems = customAlwaysResponse.custom.split(\",\").map((s: string) => s.trim()).filter(Boolean);\n alwaysList = [...alwaysList, ...customItems];\n }\n }\n answers.boundaryAlways = alwaysList;\n\n // Show summary\n console.log();\n console.log(chalk.gray(\" Boundary summary:\"));\n if (alwaysList.length > 0) {\n console.log(chalk.green(` ✓ Always: ${alwaysList.join(\", \")}`));\n }\n if (askList.length > 0) {\n console.log(chalk.yellow(` ? Ask: ${askList.join(\", \")}`));\n }\n if (neverList.length > 0) {\n console.log(chalk.red(` ✗ Never: ${neverList.join(\", \")}`));\n }\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 10: Testing Strategy (advanced)\n // ═══════════════════════════════════════════════════════════════\n {\n const testingStep = getCurrentStep(\"testing\")!;\n showStep(currentStepNum, testingStep);\n\n const testLevelsResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"testLevels\",\n message: chalk.white(\"Test levels (type to search):\"),\n choices: TEST_LEVELS.map(l => ({\n title: `${l.label} - ${chalk.gray(l.desc)}`,\n value: l.id,\n selected: l.id === \"unit\" || l.id === \"integration\",\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.testLevels = testLevelsResponse.testLevels || [];\n\n // Detect test framework from stack\n const detectedFrameworks = (answers.stack as string[])?.includes(\"typescript\") || \n (answers.stack as string[])?.includes(\"javascript\")\n ? [\"jest\", \"vitest\"]\n : (answers.stack as string[])?.includes(\"python\")\n ? [\"pytest\"]\n : [];\n\n // Full list of test frameworks with search - expanded to match WebUI\n const testFrameworkChoices = sortSelectedFirst(TEST_FRAMEWORKS.map(f => ({\n title: f,\n value: f,\n selected: detectedFrameworks.includes(f),\n })));\n const testFrameworkResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"testFrameworks\",\n message: chalk.white(\"Testing frameworks (type to search):\"),\n choices: testFrameworkChoices,\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.testFrameworks = testFrameworkResponse.testFrameworks || [];\n\n const coverageResponse = await prompts({\n type: \"number\",\n name: \"coverage\",\n message: chalk.white(\"Target code coverage (%):\"),\n initial: 80,\n min: 0,\n max: 100,\n }, promptConfig);\n answers.coverageTarget = coverageResponse.coverage ?? 80;\n\n // TDD Preference\n const tddResponse = await prompts({\n type: \"toggle\",\n name: \"tddPreference\",\n message: chalk.white(\"Use Test-Driven Development (TDD)?\"),\n initial: false,\n active: \"Yes\",\n inactive: \"No\",\n }, promptConfig);\n answers.tddPreference = tddResponse.tddPreference ?? false;\n\n // Snapshot Testing\n console.log(chalk.gray(\" Snapshot testing captures expected output (HTML, JSON, etc.) and compares\"));\n console.log(chalk.gray(\" future runs against it. Useful for UI components, API responses, serialization.\"));\n const snapshotResponse = await prompts({\n type: \"select\",\n name: \"snapshotTesting\",\n message: chalk.white(\"Use snapshot testing?\"),\n choices: [\n { title: chalk.gray(\"⏭ Skip\"), value: \"skip\" },\n { title: \"Yes - Use snapshot testing for output validation\", value: \"yes\" },\n { title: \"No - Avoid snapshot tests\", value: \"no\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.snapshotTesting = snapshotResponse.snapshotTesting === \"yes\";\n\n // Mock Strategy\n const mockResponse = await prompts({\n type: \"select\",\n name: \"mockStrategy\",\n message: chalk.white(\"Mock strategy:\"),\n choices: [\n { title: \"Minimal - Only mock external dependencies\", value: \"minimal\" },\n { title: \"Comprehensive - Mock for isolation\", value: \"comprehensive\" },\n { title: \"None - No mocking preferred\", value: \"none\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.mockStrategy = mockResponse.mockStrategy || \"minimal\";\n\n const testNotesResponse = await prompts({\n type: \"text\",\n name: \"testNotes\",\n message: chalk.white(\"Testing notes:\"),\n hint: chalk.gray(\"e.g., run e2e on main only, use msw for mocking\"),\n }, promptConfig);\n answers.testNotes = testNotesResponse.testNotes || \"\";\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 11: Static Files (advanced)\n // ═══════════════════════════════════════════════════════════════\n {\n const staticStep = getCurrentStep(\"static\")!;\n showStep(currentStepNum, staticStep);\n\n // If repo was detected, default to skipping this step\n let skipStaticFiles = false;\n if (detected) {\n console.log(chalk.gray(\" Since you're working with an existing repository, you may already have these files.\"));\n console.log();\n const skipResponse = await prompts({\n type: \"toggle\",\n name: \"skip\",\n message: chalk.white(\"Skip static files configuration?\"),\n initial: true,\n active: \"Yes, skip\",\n inactive: \"No, configure\",\n }, promptConfig);\n skipStaticFiles = skipResponse.skip ?? true;\n }\n \n if (!skipStaticFiles) {\n // First, ask how to handle static files\n console.log(chalk.gray(\" How should static file content be handled?\"));\n console.log();\n console.log(chalk.gray(\" 📄 Config only: Content embedded in AI config file (AI has context, no local files)\"));\n console.log(chalk.gray(\" 📁 Both: Create local files AND embed content in AI config file\"));\n console.log();\n \n const staticFileHandlingResponse = await prompts({\n type: \"select\",\n name: \"handling\",\n message: chalk.white(\"Where to add static file content?\"),\n choices: [\n { title: \"📄 Config file only (recommended)\", value: \"config_only\", description: \"Content goes in AI config, no separate files created\" },\n { title: \"📁 Both local files AND config\", value: \"both\", description: \"Create files locally AND embed in AI config\" },\n ],\n initial: 0,\n }, promptConfig);\n answers.staticFileHandling = staticFileHandlingResponse.handling || \"config_only\";\n\n console.log();\n console.log(chalk.gray(\" Select project files to include:\"));\n console.log();\n\n // Static file options with metadata\n const STATIC_FILE_OPTIONS = [\n { title: \"📝 .editorconfig\", value: \"editorconfig\", desc: \"Consistent code formatting\" },\n { title: \"🤝 CONTRIBUTING.md\", value: \"contributing\", desc: \"Contributor guidelines\" },\n { title: \"📜 CODE_OF_CONDUCT.md\", value: \"codeOfConduct\", desc: \"Community standards\" },\n { title: \"🔒 SECURITY.md\", value: \"security\", desc: \"Vulnerability reporting\" },\n { title: \"🗺️ ROADMAP.md\", value: \"roadmap\", desc: \"Project roadmap\" },\n { title: \"📋 .gitignore\", value: \"gitignore\", desc: \"Git ignore patterns\" },\n { title: \"💰 FUNDING.yml\", value: \"funding\", desc: \"GitHub Sponsors config\" },\n { title: \"📄 LICENSE\", value: \"license\", desc: \"License file\" },\n { title: \"📖 README.md\", value: \"readme\", desc: \"Project readme\" },\n { title: \"🏗️ ARCHITECTURE.md\", value: \"architecture\", desc: \"Architecture docs\" },\n { title: \"📝 CHANGELOG.md\", value: \"changelog\", desc: \"Version history\" },\n ];\n\n // Detect existing files\n const existingFiles: Record<string, string> = {};\n for (const opt of STATIC_FILE_OPTIONS) {\n const filePath = STATIC_FILE_PATHS[opt.value];\n if (filePath) {\n const content = await readExistingFile(join(process.cwd(), filePath));\n if (content) {\n existingFiles[opt.value] = content;\n }\n }\n }\n\n const existingCount = Object.keys(existingFiles).length;\n if (existingCount > 0) {\n console.log(chalk.green(` ✓ Found ${existingCount} existing file(s) in your project`));\n console.log();\n }\n\n const staticFilesResponse = await prompts({\n type: \"autocompleteMultiselect\",\n name: \"staticFiles\",\n message: chalk.white(\"Include static files (type to search):\"),\n choices: STATIC_FILE_OPTIONS.map(f => ({\n title: existingFiles[f.value] \n ? `${f.title} ${chalk.green(\"(exists)\")}`\n : f.title,\n value: f.value,\n description: chalk.gray(f.desc),\n })),\n hint: chalk.gray(\"type to filter • space select • enter confirm\"),\n instructions: false,\n }, promptConfig);\n answers.staticFiles = staticFilesResponse.staticFiles || [];\n\n // For each selected file, prompt for content\n if ((answers.staticFiles as string[])?.length > 0) {\n console.log();\n console.log(chalk.cyan(\" 📝 Customize file contents:\"));\n console.log(chalk.gray(\" For each file, choose to use existing content, write new, or use defaults.\"));\n if (true) {\n console.log(chalk.magenta(` ✨ Tip: Type 'ai:' followed by your request to use AI assistance`));\n }\n console.log();\n\n answers.staticFileContents = {};\n \n for (const fileKey of (answers.staticFiles as string[])) {\n const fileOpt = STATIC_FILE_OPTIONS.find(f => f.value === fileKey);\n if (!fileOpt) continue;\n\n const filePath = STATIC_FILE_PATHS[fileKey];\n const existingContent = existingFiles[fileKey];\n\n if (existingContent) {\n // File exists - ask what to do\n const preview = existingContent.split(\"\\n\").slice(0, 3).join(\"\\n\");\n console.log(chalk.gray(` ─── ${filePath} (existing) ───`));\n console.log(chalk.gray(preview.substring(0, 150) + (preview.length > 150 ? \"...\" : \"\")));\n console.log();\n\n const actionResponse = await prompts({\n type: \"select\",\n name: \"action\",\n message: chalk.white(`${filePath}:`),\n choices: [\n { title: chalk.green(\"✓ Use existing content\"), value: \"existing\" },\n { title: chalk.yellow(\"✏️ Write new content\"), value: \"new\" },\n { title: chalk.gray(\"⚡ Generate default\"), value: \"default\" },\n ],\n initial: 0,\n }, promptConfig);\n\n if (actionResponse.action === \"existing\") {\n (answers.staticFileContents as Record<string, string>)[fileKey] = existingContent;\n } else if (actionResponse.action === \"new\") {\n console.log();\n const content = await readMultilineInput(` Content for ${filePath}:`);\n if (content.trim()) {\n (answers.staticFileContents as Record<string, string>)[fileKey] = content;\n }\n }\n // \"default\" - don't add to staticFileContents, generator will create default\n } else {\n // File doesn't exist - ask if they want to write content\n const actionResponse = await prompts({\n type: \"select\",\n name: \"action\",\n message: chalk.white(`${filePath}:`),\n choices: [\n { title: chalk.gray(\"⚡ Generate default\"), value: \"default\" },\n { title: chalk.yellow(\"✏️ Write custom content\"), value: \"new\" },\n ],\n initial: 0,\n }, promptConfig);\n\n if (actionResponse.action === \"new\") {\n console.log();\n if (true) {\n const aiPromptResponse = await prompts({\n type: \"text\",\n name: \"input\",\n message: chalk.white(`Content for ${filePath}:`),\n hint: chalk.gray(\"Type 'ai:' + description OR paste content (press Enter twice to skip)\"),\n }, promptConfig);\n \n let content = aiPromptResponse.input || \"\";\n \n if (content.toLowerCase().startsWith(\"ai:\")) {\n const aiInstruction = content.substring(3).trim();\n if (aiInstruction) {\n const aiResult = await aiAssist(`Generate ${filePath} content: ${aiInstruction}`, existingContent);\n if (aiResult) {\n console.log(chalk.cyan(\" AI-generated content preview (first 200 chars):\"));\n console.log(chalk.gray(\" \" + aiResult.substring(0, 200) + (aiResult.length > 200 ? \"...\" : \"\")));\n const acceptAI = await prompts({\n type: \"confirm\",\n name: \"accept\",\n message: chalk.white(\"Use this AI-generated content?\"),\n initial: true,\n }, promptConfig);\n if (acceptAI.accept) {\n content = aiResult;\n } else {\n content = \"\";\n }\n }\n }\n }\n \n if (content.trim()) {\n (answers.staticFileContents as Record<string, string>)[fileKey] = content;\n }\n } else {\n const content = await readMultilineInput(` Content for ${filePath}:`);\n if (content.trim()) {\n (answers.staticFileContents as Record<string, string>)[fileKey] = content;\n }\n }\n }\n }\n console.log();\n }\n }\n } // end of skipStaticFiles check\n }\n\n // ═══════════════════════════════════════════════════════════════\n // STEP 12: Final Details / Extra (basic - all users)\n // ═══════════════════════════════════════════════════════════════\n const extraStep = getCurrentStep(\"extra\")!;\n showStep(currentStepNum, extraStep);\n\n // AI persona is handled from profile settings, not asked here\n // (Users can set their persona in the web UI under AI Configuration)\n answers.persona = \"\";\n\n // Anything else - with AI assist option for Teams users\n const hasAIAccess = true;\n \n if (hasAIAccess) {\n console.log();\n console.log(chalk.magenta(\" ✨ AI Assistant available\"));\n console.log(chalk.gray(\" Type 'ai:' followed by your request to get AI-generated content.\"));\n console.log(chalk.gray(\" Example: ai: add guidelines for API error handling\"));\n console.log();\n }\n\n const extraNotesResponse = await prompts({\n type: \"text\",\n name: \"extraNotes\",\n message: chalk.white(\"Anything else AI should know?\"),\n hint: hasAIAccess \n ? chalk.gray(\"Enter text or type 'ai:' followed by your request\")\n : chalk.gray(\"Special requirements, gotchas, team conventions...\"),\n }, promptConfig);\n \n let extraNotes = extraNotesResponse.extraNotes || \"\";\n \n // Check if user wants AI assistance\n if (hasAIAccess && extraNotes.toLowerCase().startsWith(\"ai:\")) {\n const aiInstruction = extraNotes.substring(3).trim();\n if (aiInstruction) {\n const aiResult = await aiAssist(aiInstruction);\n if (aiResult) {\n console.log();\n console.log(chalk.cyan(\" AI suggestion:\"));\n console.log(chalk.gray(\" ─\".repeat(30)));\n console.log(chalk.white(\" \" + aiResult.split(\"\\n\").join(\"\\n \")));\n console.log(chalk.gray(\" ─\".repeat(30)));\n console.log();\n \n const acceptResponse = await prompts({\n type: \"confirm\",\n name: \"accept\",\n message: chalk.white(\"Use this AI-generated content?\"),\n initial: true,\n }, promptConfig);\n \n if (acceptResponse.accept) {\n extraNotes = aiResult;\n } else {\n // Let user write their own\n const manualResponse = await prompts({\n type: \"text\",\n name: \"extraNotes\",\n message: chalk.white(\"Enter your own notes instead:\"),\n }, promptConfig);\n extraNotes = manualResponse.extraNotes || \"\";\n }\n }\n }\n }\n \n answers.extraNotes = extraNotes;\n\n // ═══════════════════════════════════════════════════════════════\n // BUILD FINAL CONFIG\n // ═══════════════════════════════════════════════════════════════\n console.log();\n console.log(chalk.green(\" ✅ All steps completed!\"));\n console.log();\n\n // Reset wizard state - no longer in progress\n wizardState.inProgress = false;\n\n return {\n name: answers.name as string,\n description: answers.description as string,\n stack: answers.stack as string[],\n platforms: answers.platforms as string[],\n persona: answers.persona as string,\n boundaries: answers.boundaries as \"conservative\" | \"standard\" | \"permissive\",\n commands: typeof answers.commands === \"object\" ? answers.commands as Record<string, string> : (detected?.commands || {}),\n // Blueprint mode\n blueprintMode: answers.blueprintMode as boolean,\n // Extended config for all users\n projectType: answers.projectType as string,\n devOS: answers.devOS as string[],\n architecture: answers.architecture as string,\n repoHost: answers.repoHost as string,\n isPublic: answers.isPublic as boolean,\n license: answers.license as string,\n conventionalCommits: answers.conventionalCommits as boolean,\n letAiDecide: answers.letAiDecide as boolean,\n namingConvention: answers.namingConvention as string,\n errorHandling: answers.errorHandling as string,\n styleNotes: answers.styleNotes as string,\n aiBehavior: answers.aiBehavior as string[],\n importantFiles: answers.importantFiles as string[],\n importantFilesOther: answers.importantFilesOther as string,\n selfImprove: answers.selfImprove as boolean,\n includePersonalData: answers.includePersonalData as boolean,\n enableAutoUpdate: answers.enableAutoUpdate as boolean,\n preferCliSync: answers.preferCliSync as boolean,\n tokenEnvVar: answers.tokenEnvVar as string,\n userName: answers.userName as string,\n userEmail: answers.userEmail as string,\n userPersona: answers.userPersona as string,\n userExpertise: answers.userExpertise as string,\n boundaryAlways: answers.boundaryAlways as string[],\n boundaryNever: answers.boundaryNever as string[],\n boundaryAsk: answers.boundaryAsk as string[],\n testLevels: answers.testLevels as string[],\n testFrameworks: answers.testFrameworks as string[],\n coverageTarget: answers.coverageTarget as number,\n testNotes: answers.testNotes as string,\n staticFiles: answers.staticFiles as string[],\n staticFileContents: answers.staticFileContents as Record<string, string>,\n staticFileHandling: answers.staticFileHandling as \"config_only\" | \"both\",\n includeFunding: answers.includeFunding as boolean,\n extraNotes: answers.extraNotes as string,\n semver: answers.semver as boolean,\n cicd: answers.cicd as string,\n deploymentTargets: answers.deploymentTargets as string[],\n buildContainer: answers.buildContainer as boolean,\n containerRegistry: answers.containerRegistry as string,\n exampleRepoUrl: answers.exampleRepoUrl as string,\n documentationUrl: answers.documentationUrl as string,\n loggingConventions: answers.loggingConventions as string,\n loggingConventionsOther: answers.loggingConventionsOther as string,\n // Security configuration (NEW)\n security: {\n authProviders: answers.authProviders as string[],\n authProvidersOther: answers.authProvidersOther as string || \"\",\n secretsManagement: answers.secretsManagement as string[],\n secretsManagementOther: answers.secretsManagementOther as string || \"\",\n securityTooling: answers.securityTooling as string[],\n securityToolingOther: answers.securityToolingOther as string || \"\",\n authPatterns: answers.authPatterns as string[],\n authPatternsOther: answers.authPatternsOther as string || \"\",\n dataHandling: answers.dataHandling as string[],\n dataHandlingOther: answers.dataHandlingOther as string || \"\",\n compliance: answers.compliance as string[],\n complianceOther: answers.complianceOther as string || \"\",\n analytics: answers.analytics as string[],\n analyticsOther: answers.analyticsOther as string || \"\",\n additionalNotes: answers.securityNotes as string,\n },\n // Versioning (conditional)\n versionTagFormat: answers.versionTagFormat as string,\n changelogTool: answers.changelogTool as string,\n // AI Behavior\n planModeFrequency: answers.planModeFrequency as string,\n // Direct commits for small fixes\n allowDirectCommits: answers.allowDirectCommits as boolean,\n // Git worktrees for parallel AI sessions\n useGitWorktrees: answers.useGitWorktrees as boolean,\n // Additional libraries (not in predefined lists)\n additionalLibraries: answers.additionalLibraries as string,\n // Docker image names\n dockerImageNames: answers.dockerImageNames as string,\n // MCP servers\n mcpServers: answers.mcpServers as string,\n // Workaround behavior\n attemptWorkarounds: answers.attemptWorkarounds as boolean,\n // Server access\n serverAccess: answers.serverAccess as boolean,\n sshKeyPath: answers.sshKeyPath as string,\n // Manual deployment\n manualDeployment: answers.manualDeployment as boolean,\n deploymentMethod: answers.deploymentMethod as string,\n };\n}\n","export interface GenerateOptions {\n name: string;\n description: string;\n stack: string[];\n platforms: string[];\n persona: string;\n boundaries: \"conservative\" | \"standard\" | \"permissive\";\n commands: Record<string, string | string[]>;\n // Blueprint mode - generates [[VARIABLE|default]] placeholders\n blueprintMode?: boolean;\n // Variable values to fill in [[VAR|default]] placeholders\n // Pass as { VAR_NAME: \"value\" } to replace [[VAR_NAME|default]] with \"value\"\n variables?: Record<string, string>;\n // Extended options for all users\n projectType?: string;\n devOS?: string | string[];\n architecture?: string;\n repoHost?: string;\n isPublic?: boolean;\n license?: string;\n conventionalCommits?: boolean;\n semver?: boolean;\n cicd?: string;\n deploymentTargets?: string[];\n buildContainer?: boolean;\n containerRegistry?: string;\n customRegistryUrl?: string;\n exampleRepoUrl?: string;\n documentationUrl?: string;\n letAiDecide?: boolean;\n loggingConventions?: string;\n loggingConventionsOther?: string;\n namingConvention?: string;\n errorHandling?: string;\n styleNotes?: string;\n aiBehavior?: string[];\n importantFiles?: string[];\n importantFilesOther?: string;\n selfImprove?: boolean;\n includePersonalData?: boolean;\n enableAutoUpdate?: boolean;\n blueprintId?: string; // For auto-update curl command\n preferCliSync?: boolean; // Use CLI commands instead of curl (default true)\n tokenEnvVar?: string; // Environment variable name for API token (default LYNXPROMPT_API_TOKEN)\n // User profile data (fetched from cloud)\n userName?: string;\n userEmail?: string;\n userPersona?: string;\n userRole?: string;\n userExpertise?: string;\n boundaryAlways?: string[];\n boundaryNever?: string[];\n boundaryAsk?: string[];\n testLevels?: string[];\n testFrameworks?: string[];\n coverageTarget?: number;\n testNotes?: string;\n staticFiles?: string[];\n staticFileContents?: Record<string, string>;\n staticFileHandling?: \"config_only\" | \"both\"; // How to handle static files\n includeFunding?: boolean;\n extraNotes?: string;\n // Security configuration (FREE tier)\n security?: {\n authProviders?: string[]; // Login providers (Google, GitHub, etc.)\n authProvidersOther?: string; // Custom auth provider description\n secretsManagement?: string[]; // Secrets management strategies\n secretsManagementOther?: string; // Custom secrets management description\n securityTooling?: string[]; // Security scanning tools (includes dependabot/renovate)\n securityToolingOther?: string; // Custom security tooling description\n authPatterns?: string[]; // Authentication patterns\n authPatternsOther?: string; // Custom auth pattern description\n dataHandling?: string[]; // Data handling policies\n dataHandlingOther?: string; // Custom data handling description\n compliance?: string[]; // Compliance standards (GDPR, HIPAA, etc.)\n complianceOther?: string; // Custom compliance description\n analytics?: string[]; // Analytics tools\n analyticsOther?: string; // Custom analytics description\n additionalNotes?: string; // Custom security notes\n };\n // Versioning (conditional on semver)\n versionTagFormat?: string; // v_prefix, no_prefix, package_prefix, etc.\n changelogTool?: string; // manual, conventional_changelog, etc.\n // AI Behavior\n planModeFrequency?: string; // always, complex_tasks, multi_file, etc.\n // Direct commits for small fixes\n allowDirectCommits?: boolean; // Allow direct commits for typos, docs, minor fixes\n // Git worktrees for parallel AI sessions\n useGitWorktrees?: boolean; // Use git worktrees for each task\n // Additional libraries not in predefined lists\n additionalLibraries?: string; // comma-separated (e.g., \"Telethon, APScheduler, alembic\")\n // Docker image names\n dockerImageNames?: string; // comma-separated (e.g., \"myuser/myapp, myuser/myapp-viewer\")\n // MCP servers the developer uses (e.g., \"filesystem, github, postgres\")\n mcpServers?: string;\n // Whether AI should attempt workarounds when stuck, or stop and ask\n attemptWorkarounds?: boolean;\n // Server/SSH access\n serverAccess?: boolean; // Whether the project requires server access\n sshKeyPath?: string; // SSH key path (empty = default location)\n // Manual deployment (when no CI/CD)\n manualDeployment?: boolean; // Whether deployment is manual (no CI/CD)\n deploymentMethod?: string; // portainer, docker_compose, kubernetes, bare_metal, etc.\n}\n\n/**\n * Wrap a value in blueprint variable syntax if blueprintMode is enabled\n * Standard variables generated by LynxPrompt (document these in docs):\n * - [[PROJECT_NAME|default]] - Project name\n * - [[PROJECT_DESCRIPTION|default]] - Project description\n * - [[AUTHOR_NAME|default]] - Author name for commits\n * - [[AUTHOR_EMAIL|default]] - Author email for commits\n * - [[REPO_URL|default]] - Repository URL\n * - [[LICENSE|default]] - License type\n */\nfunction bpVar(blueprintMode: boolean, varName: string, defaultValue: string): string {\n if (!blueprintMode || !defaultValue) return defaultValue;\n return `[[${varName}|${defaultValue}]]`;\n}\n\n/**\n * Fill variables in content with provided values\n * Replaces [[VAR_NAME|default]] with actual values from variables map\n * If variable not provided, uses the default value from the placeholder\n */\nexport function fillVariables(content: string, variables: Record<string, string>): string {\n // Pattern matches [[VAR_NAME|default_value]]\n return content.replace(/\\[\\[([A-Z_]+)\\|([^\\]]*)\\]\\]/g, (_, varName, defaultValue) => {\n return variables[varName] ?? defaultValue;\n });\n}\n\n/**\n * Parse variables string from CLI --vars argument\n * Format: \"VAR1=value1,VAR2=value2\"\n */\nexport function parseVariablesString(varsStr: string): Record<string, string> {\n const variables: Record<string, string> = {};\n \n if (!varsStr) return variables;\n \n // Split by comma, handling potential quoted values\n const parts = varsStr.split(\",\");\n \n for (const part of parts) {\n const eqIndex = part.indexOf(\"=\");\n if (eqIndex > 0) {\n const key = part.slice(0, eqIndex).trim().toUpperCase();\n const value = part.slice(eqIndex + 1).trim();\n variables[key] = value;\n }\n }\n \n return variables;\n}\n\n// Platform to filename mapping (30+ platforms)\n// IMPORTANT: Keep in sync with src/lib/platforms.ts\nconst PLATFORM_FILES: Record<string, string> = {\n // Popular platforms\n universal: \"AGENTS.md\",\n agents: \"AGENTS.md\", // Alias for universal\n cursor: \".cursor/rules/project.mdc\",\n claude: \"CLAUDE.md\",\n copilot: \".github/copilot-instructions.md\",\n windsurf: \".windsurfrules\",\n \n // AI-powered IDEs\n antigravity: \"GEMINI.md\",\n zed: \".zed/instructions.md\",\n void: \".void/config.json\",\n trae: \".trae/rules/project.mdc\",\n firebase: \".idx/rules/project.mdc\",\n \n // Editor extensions\n cline: \".clinerules\",\n roocode: \".roo/rules/project.mdc\",\n continue: \".continue/config.json\",\n cody: \".cody/config.json\",\n tabnine: \".tabnine.yaml\",\n supermaven: \".supermaven/config.json\",\n codegpt: \".codegpt/config.json\",\n amazonq: \".amazonq/rules/project.md\",\n augment: \".augment/rules/project.mdc\",\n kilocode: \".kilocode/rules/project.mdc\",\n junie: \".junie/guidelines.md\",\n kiro: \".kiro/steering/project.mdc\",\n \n // CLI tools\n aider: \".aider.conf.yml\",\n goose: \".goosehints\",\n warp: \"WARP.md\",\n \"gemini-cli\": \"GEMINI.md\",\n opencode: \"opencode.json\",\n \n // Other emerging tools\n openhands: \".openhands/microagents/repo.md\",\n crush: \"CRUSH.md\",\n firebender: \"firebender.json\",\n};\n\n// Persona descriptions - these describe the developer's background so the AI can adapt\nconst PERSONA_DESCRIPTIONS: Record<string, string> = {\n backend: \"a senior backend developer specializing in APIs, databases, and microservices architecture\",\n frontend: \"a senior frontend developer specializing in UI components, styling, and user experience\",\n fullstack: \"a senior full-stack developer capable of working across the entire application stack\",\n devops: \"a DevOps engineer specializing in infrastructure, CI/CD pipelines, and containerization\",\n data: \"a data engineer specializing in data pipelines, ETL processes, and database optimization\",\n security: \"a security engineer focused on secure coding practices and vulnerability prevention\",\n};\n\n// Stack display names\nconst STACK_NAMES: Record<string, string> = {\n typescript: \"TypeScript\",\n javascript: \"JavaScript\",\n python: \"Python\",\n go: \"Go\",\n rust: \"Rust\",\n java: \"Java\",\n csharp: \"C#/.NET\",\n ruby: \"Ruby\",\n php: \"PHP\",\n swift: \"Swift\",\n kotlin: \"Kotlin\",\n cpp: \"C/C++\",\n react: \"React\",\n nextjs: \"Next.js\",\n vue: \"Vue.js\",\n angular: \"Angular\",\n svelte: \"Svelte\",\n express: \"Express.js\",\n fastapi: \"FastAPI\",\n django: \"Django\",\n flask: \"Flask\",\n spring: \"Spring Boot\",\n rails: \"Ruby on Rails\",\n laravel: \"Laravel\",\n nestjs: \"NestJS\",\n vite: \"Vite\",\n \"react-native\": \"React Native\",\n postgresql: \"PostgreSQL\",\n mysql: \"MySQL\",\n mongodb: \"MongoDB\",\n redis: \"Redis\",\n sqlite: \"SQLite\",\n supabase: \"Supabase\",\n firebase: \"Firebase\",\n prisma: \"Prisma\",\n tailwind: \"Tailwind CSS\",\n fastify: \"Fastify\",\n};\n\n// Naming convention descriptions\nconst NAMING_DESCRIPTIONS: Record<string, string> = {\n language_default: \"follow idiomatic conventions for the primary language\",\n camelCase: \"use camelCase for variables and functions\",\n snake_case: \"use snake_case for variables and functions\",\n PascalCase: \"use PascalCase for classes and types\",\n \"kebab-case\": \"use kebab-case for file names and CSS classes\",\n};\n\n// AI behavior rule descriptions\nconst AI_BEHAVIOR_DESCRIPTIONS: Record<string, string> = {\n explain_changes: \"Always explain what changes you're making and why before implementing them\",\n preserve_style: \"Preserve and follow the existing code style in the project\",\n minimal_changes: \"Make minimal, focused changes - avoid unnecessary refactoring\",\n no_comments: \"Avoid adding unnecessary comments; code should be self-documenting\",\n prefer_simple: \"Prefer simpler solutions over clever ones\",\n test_first: \"Write tests before implementing new functionality (TDD)\",\n no_console: \"Remove console.log/print statements before committing\",\n type_strict: \"Be strict with types - avoid any/Any/Object types\",\n // Burke Holland-inspired rules\n code_for_llms: \"Optimize code for LLM reasoning: prefer flat/explicit patterns, minimal abstractions, structured logging, and linear control flow\",\n self_improving: \"When you learn new project patterns or conventions, suggest updates to this configuration file\",\n verify_work: \"Always verify your work before returning: run tests, check builds, confirm changes work as expected\",\n terminal_management: \"Reuse existing terminals when possible. Close terminals you no longer need\",\n check_docs_first: \"Always check documentation (via MCP or project docs) before assuming knowledge about APIs or libraries\",\n};\n\n// Important files descriptions - must match wizard options\nconst IMPORTANT_FILES_PATHS: Record<string, string> = {\n readme: \"README.md\",\n package_json: \"package.json\",\n changelog: \"CHANGELOG.md\",\n contributing: \"CONTRIBUTING.md\",\n makefile: \"Makefile\",\n dockerfile: \"Dockerfile\",\n docker_compose: \"docker-compose.yml\",\n env_example: \".env.example\",\n openapi: \"openapi.yaml / swagger.json\",\n architecture_md: \"ARCHITECTURE.md\",\n // Legacy aliases for backwards compatibility\n package: \"package.json\",\n tsconfig: \"tsconfig.json\",\n architecture: \"ARCHITECTURE.md\",\n};\n\n// Boundary presets\nconst BOUNDARIES: Record<string, { always: string[]; askFirst: string[]; never: string[] }> = {\n conservative: {\n always: [\"Read any file in the project\", \"Run lint and format commands\"],\n askFirst: [\n \"Modify any source file\",\n \"Add new dependencies\",\n \"Create new files\",\n \"Run test commands\",\n \"Modify configuration files\",\n ],\n never: [\n \"Delete any files\",\n \"Modify .env or secret files\",\n \"Push to git or make commits\",\n \"Access external APIs or services\",\n ],\n },\n standard: {\n always: [\n \"Read any file in the project\",\n \"Modify files in src/ or lib/\",\n \"Run build, test, and lint commands\",\n \"Create test files\",\n \"Fix linting errors automatically\",\n ],\n askFirst: [\n \"Add new dependencies to package.json\",\n \"Modify configuration files at root level\",\n \"Create new modules or directories\",\n \"Refactor code structure significantly\",\n ],\n never: [\n \"Modify .env files or secrets\",\n \"Delete critical files without backup\",\n \"Force push to git\",\n \"Expose sensitive information in logs\",\n ],\n },\n permissive: {\n always: [\n \"Modify any file in src/ or lib/\",\n \"Run any build, test, or dev scripts\",\n \"Add or update dependencies\",\n \"Create new files and directories\",\n \"Refactor and reorganize code\",\n ],\n askFirst: [\n \"Modify root-level configuration files\",\n \"Delete directories\",\n \"Make breaking changes to public APIs\",\n ],\n never: [\n \"Modify .env files directly\",\n \"Commit secrets or credentials\",\n \"Access production databases\",\n ],\n },\n};\n\n// Test level descriptions\nconst TEST_LEVEL_DESCRIPTIONS: Record<string, string> = {\n smoke: \"Quick sanity checks for critical paths\",\n unit: \"Unit tests for individual functions and components\",\n integration: \"Integration tests for component interactions\",\n e2e: \"End-to-end tests for full user flows\",\n};\n\n// Static file templates with defaults\nconst STATIC_FILE_TEMPLATES: Record<string, (options: GenerateOptions) => string> = {\n editorconfig: () => `# EditorConfig is awesome: https://EditorConfig.org\n\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[Makefile]\nindent_style = tab\n`,\n contributing: (opts) => `# Contributing to ${opts.name}\n\nThank you for your interest in contributing!\n\n## How to Contribute\n\n1. Fork the repository\n2. Create a feature branch (\\`git checkout -b feature/amazing-feature\\`)\n3. Commit your changes${opts.conventionalCommits ? \" using Conventional Commits format\" : \"\"}\n4. Push to the branch (\\`git push origin feature/amazing-feature\\`)\n5. Open a Pull Request\n\n## Development Setup\n\n\\`\\`\\`bash\n# Clone your fork\ngit clone https://github.com/YOUR_USERNAME/${opts.name}.git\ncd ${opts.name}\n\n# Install dependencies\nnpm install\n\n# Run development server\nnpm run dev\n\\`\\`\\`\n\n## Code Style\n\nPlease follow the existing code style and conventions in this project.\n`,\n codeOfConduct: (opts) => `# Code of Conduct\n\n## Our Pledge\n\nWe pledge to make participation in the ${opts.name} project a harassment-free experience for everyone.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment:\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project team.\n\n## Attribution\n\nThis Code of Conduct is adapted from the Contributor Covenant, version 2.1.\n`,\n security: (opts) => `# Security Policy\n\n## Supported Versions\n\n| Version | Supported |\n| ------- | ------------------ |\n| latest | :white_check_mark: |\n\n## Reporting a Vulnerability\n\nIf you discover a security vulnerability in ${opts.name}, please report it by emailing the maintainers.\n\n**Please do not open a public issue for security vulnerabilities.**\n\nWe will acknowledge receipt within 48 hours and provide a detailed response within 7 days.\n`,\n roadmap: (opts) => `# Roadmap\n\n## ${opts.name} Development Roadmap\n\n### Current Version\n\n- Core functionality\n\n### Planned Features\n\n- [ ] Feature 1\n- [ ] Feature 2\n- [ ] Feature 3\n\n### Long-term Goals\n\n- Goal 1\n- Goal 2\n\n---\n*This roadmap is subject to change based on community feedback and priorities.*\n`,\n gitignore: (opts) => {\n const patterns = [\"# Dependencies\", \"node_modules/\", \".pnpm-store/\", \"\"];\n if (opts.stack.includes(\"python\")) {\n patterns.push(\"# Python\", \"__pycache__/\", \"*.py[cod]\", \".venv/\", \"venv/\", \"\");\n }\n patterns.push(\"# Environment\", \".env\", \".env.local\", \".env*.local\", \"\");\n patterns.push(\"# Build outputs\", \"dist/\", \"build/\", \".next/\", \"out/\", \"\");\n patterns.push(\"# IDE\", \".idea/\", \".vscode/\", \"*.swp\", \"*.swo\", \"\");\n patterns.push(\"# OS\", \".DS_Store\", \"Thumbs.db\", \"\");\n patterns.push(\"# Logs\", \"*.log\", \"npm-debug.log*\", \"\");\n return patterns.join(\"\\n\");\n },\n funding: () => `# These are supported funding model platforms\n\ngithub: [] # Replace with your GitHub username\npatreon: # Replace with your Patreon username\nopen_collective: # Replace with your Open Collective username\nko_fi: # Replace with your Ko-fi username\ncustom: [] # Add custom funding links\n`,\n license: (opts) => {\n if (opts.license === \"mit\") {\n return `MIT License\n\nCopyright (c) ${new Date().getFullYear()} ${opts.name}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n }\n return `# License\n\nThis project is licensed under the ${opts.license?.toUpperCase() || \"Proprietary\"} license.\n`;\n },\n readme: (opts) => {\n const stackBadges = opts.stack.slice(0, 5).map(s => STACK_NAMES[s] || s).join(\" • \");\n return `# ${opts.name}\n\n${opts.description || \"A project generated with LynxPrompt.\"}\n\n${stackBadges ? `## Tech Stack\\n\\n${stackBadges}\\n` : \"\"}\n## Getting Started\n\n\\`\\`\\`bash\n# Clone the repository\ngit clone <repository-url>\ncd ${opts.name}\n\n# Install dependencies\nnpm install\n\n# Run development server\nnpm run dev\n\\`\\`\\`\n\n## License\n\n${opts.license && opts.license !== \"none\" ? `This project is licensed under the ${opts.license.toUpperCase()} License.` : \"See LICENSE file for details.\"}\n`;\n },\n architecture: (opts) => `# Architecture\n\n## ${opts.name} Architecture Overview\n\n${opts.architecture ? `### Pattern: ${opts.architecture}\\n` : \"\"}\n### Directory Structure\n\n\\`\\`\\`\n${opts.name}/\n├── src/ # Source code\n├── tests/ # Test files\n├── docs/ # Documentation\n└── ...\n\\`\\`\\`\n\n### Key Components\n\n1. **Component A** - Description\n2. **Component B** - Description\n3. **Component C** - Description\n\n### Data Flow\n\nDescribe how data flows through the application.\n\n---\n*Generated by LynxPrompt*\n`,\n changelog: (opts) => `# Changelog\n\nAll notable changes to ${opts.name} will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n### Added\n- Initial project setup\n\n### Changed\n\n### Deprecated\n\n### Removed\n\n### Fixed\n\n### Security\n`,\n};\n\n// File paths for static files\nconst STATIC_FILE_PATHS: Record<string, string> = {\n editorconfig: \".editorconfig\",\n contributing: \"CONTRIBUTING.md\",\n codeOfConduct: \"CODE_OF_CONDUCT.md\",\n security: \"SECURITY.md\",\n roadmap: \"ROADMAP.md\",\n gitignore: \".gitignore\",\n funding: \".github/FUNDING.yml\",\n license: \"LICENSE\",\n readme: \"README.md\",\n architecture: \"ARCHITECTURE.md\",\n changelog: \"CHANGELOG.md\",\n};\n\nexport function generateConfig(options: GenerateOptions): Record<string, string> {\n const files: Record<string, string> = {};\n\n // Generate AI IDE config files\n for (const platform of options.platforms) {\n const filename = PLATFORM_FILES[platform];\n if (filename) {\n files[filename] = generateFileContent(options, platform);\n }\n }\n\n // Generate static files (only if \"both\" mode - otherwise they're embedded in config)\n const createLocalStaticFiles = options.staticFileHandling !== \"config_only\";\n \n if (options.staticFiles && options.staticFiles.length > 0 && createLocalStaticFiles) {\n for (const fileKey of options.staticFiles) {\n const filePath = STATIC_FILE_PATHS[fileKey];\n if (!filePath) continue;\n\n // Use custom content if provided, otherwise generate default\n if (options.staticFileContents?.[fileKey]) {\n files[filePath] = options.staticFileContents[fileKey];\n } else {\n const templateFn = STATIC_FILE_TEMPLATES[fileKey];\n if (templateFn) {\n files[filePath] = templateFn(options);\n }\n }\n }\n }\n\n // Legacy: funding as separate option (respect staticFileHandling)\n if (options.includeFunding && !options.staticFiles?.includes(\"funding\") && createLocalStaticFiles) {\n files[\".github/FUNDING.yml\"] = STATIC_FILE_TEMPLATES.funding(options);\n }\n\n // Apply variable filling if variables are provided\n if (options.variables && Object.keys(options.variables).length > 0) {\n for (const [filename, content] of Object.entries(files)) {\n files[filename] = fillVariables(content, options.variables);\n }\n }\n\n return files;\n}\n\nfunction generateFileContent(options: GenerateOptions, platform: string): string {\n const sections: string[] = [];\n \n // Determine format based on platform\n const mdcPlatforms = [\"cursor\", \"trae\", \"firebase\", \"roocode\", \"augment\", \"kilocode\", \"kiro\"];\n const yamlPlatforms = [\"aider\", \"tabnine\"];\n const plainTextPlatforms = [\"windsurf\", \"cline\", \"goose\"];\n const jsonPlatforms = [\"void\", \"continue\", \"cody\", \"supermaven\", \"codegpt\", \"opencode\", \"firebender\"];\n \n const isMdc = mdcPlatforms.includes(platform);\n const isYaml = yamlPlatforms.includes(platform);\n const isPlainText = plainTextPlatforms.includes(platform);\n const isJson = jsonPlatforms.includes(platform);\n const isMarkdown = !isMdc && !isYaml && !isPlainText && !isJson;\n const bp = options.blueprintMode || false;\n \n // Handle YAML formats\n if (isYaml) {\n return generateYamlConfig(options, platform);\n }\n \n // Handle JSON formats\n if (isJson) {\n return generateJsonConfig(options, platform);\n }\n \n // Project name and other blueprint variables\n const projectName = bpVar(bp, \"PROJECT_NAME\", options.name);\n const repoHost = bpVar(bp, \"REPO_HOST\", options.repoHost || \"\");\n const license = bpVar(bp, \"LICENSE\", options.license || \"\");\n const authorName = bpVar(bp, \"AUTHOR_NAME\", options.userName || \"\");\n const authorEmail = bpVar(bp, \"AUTHOR_EMAIL\", options.userEmail || \"\");\n const architecture = bpVar(bp, \"ARCHITECTURE\", options.architecture || \"\");\n const cicd = bpVar(bp, \"CI_CD\", options.cicd || \"\");\n \n // MDC frontmatter for Cursor\n if (isMdc) {\n sections.push(\"---\");\n sections.push(`description: \"${projectName} - AI coding rules\"`);\n sections.push('globs: [\"**/*\"]');\n sections.push(\"alwaysApply: true\");\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(`# ${projectName} - AI Assistant Configuration`);\n sections.push(\"\");\n }\n \n // Header for regular markdown\n if (isMarkdown) {\n sections.push(`# ${projectName} - AI Assistant Configuration`);\n sections.push(\"\");\n }\n \n // Git Worktrees for parallel AI sessions\n if (options.useGitWorktrees && (isMarkdown || isMdc)) {\n sections.push(\"## Before Starting Any Coding Task\");\n sections.push(\"\");\n sections.push(\"1. Check existing worktrees with `git worktree list` and create a new one for this task if needed\");\n sections.push(\"2. Use the naming convention: `git worktree add -b ai/[task-description] ../[repo-name]-ai-[task-description]`\");\n sections.push(\"3. Navigate to the worktree directory before making any changes\");\n sections.push(\"4. Commit changes when the task is finished. Merge to main, and clean the worktree.\");\n sections.push(\"\");\n }\n\n // Cloud sync section (for synced blueprints)\n if (options.enableAutoUpdate && options.blueprintId && (isMarkdown || isMdc)) {\n const bpId = options.blueprintId.startsWith(\"bp_\") ? options.blueprintId : `bp_${options.blueprintId}`;\n const preferCli = options.preferCliSync !== false; // Default to true\n const tokenEnvVar = options.tokenEnvVar || \"LYNXPROMPT_API_TOKEN\";\n \n sections.push(\"<!--\");\n sections.push(`This file is synced with LynxPrompt (Blueprint: ${bpId})`);\n sections.push(\"\");\n sections.push(\"Sync Commands:\");\n \n if (preferCli) {\n // CLI method (recommended - no token in file)\n sections.push(\"\");\n sections.push(\"# Using LynxPrompt CLI (recommended):\");\n sections.push(\"lynxp push # Upload local changes to cloud\");\n sections.push(\"lynxp pull # Download cloud changes to local\");\n sections.push(\"lynxp diff # Compare local vs cloud versions\");\n sections.push(\"\");\n sections.push(\"# Install CLI: npm install -g lynxprompt\");\n sections.push(\"# Login: lynxp login\");\n } else {\n // Environment variable method (no token hardcoded)\n const fileName = platform === \"cursor\" ? \".cursor/rules/agents.mdc\" : \"AGENTS.md\";\n sections.push(\"\");\n sections.push(`# Using curl with environment variable (token stored in $${tokenEnvVar}):`);\n sections.push(\"\");\n sections.push(\"# Push local changes to cloud:\");\n sections.push(`curl -X PUT \"https://api.lynxprompt.com/api/v1/blueprints/${bpId}\" \\\\`);\n sections.push(` -H \"Authorization: Bearer $${tokenEnvVar}\" \\\\`);\n sections.push(' -H \"Content-Type: application/json\" \\\\');\n sections.push(` -d \"{\\\\\"content\\\\\": \\\\\"$(cat ${fileName} | jq -Rs .)\\\\\"}\"`);\n sections.push(\"\");\n sections.push(\"# Pull cloud changes to local:\");\n sections.push(`curl -s \"https://api.lynxprompt.com/api/v1/blueprints/${bpId}\" \\\\`);\n sections.push(` -H \"Authorization: Bearer $${tokenEnvVar}\" | jq -r '.content' > ${fileName}`);\n sections.push(\"\");\n sections.push(`# Set your token: export ${tokenEnvVar}=\"your_token_here\"`);\n sections.push(\"# Generate token at: https://lynxprompt.com/settings\");\n }\n \n sections.push(\"\");\n sections.push(\"Docs: https://lynxprompt.com/docs/api\");\n sections.push(\"-->\");\n sections.push(\"\");\n }\n\n // Project type context\n if (options.projectType) {\n const typeContexts: Record<string, string> = {\n work: \"This is a professional/enterprise project. Follow strict procedures and maintain high code quality.\",\n leisure: \"This is a personal/hobby project. Feel free to be more experimental and creative.\",\n opensource: \"This is an open-source project. Consider community guidelines and contribution standards.\",\n learning: \"This is an educational project. Explain concepts and be patient with learning-focused approaches.\",\n };\n if (typeContexts[options.projectType]) {\n if (isMarkdown || isMdc) {\n sections.push(`> **Project Context:** ${typeContexts[options.projectType]}`);\n sections.push(\"\");\n } else {\n sections.push(`Project Context: ${typeContexts[options.projectType]}`);\n sections.push(\"\");\n }\n }\n }\n\n // Persona section\n // Use userPersona from profile if available, otherwise fall back to persona selection\n const personaDesc = options.userPersona \n || PERSONA_DESCRIPTIONS[options.persona] \n || options.persona \n || \"\";\n const projectDesc = bpVar(bp, \"PROJECT_DESCRIPTION\", options.description || \"\");\n \n if (isMarkdown || isMdc) {\n sections.push(\"## Persona\");\n sections.push(\"\");\n sections.push(`You assist developers working on ${projectName}.`);\n if (personaDesc) {\n sections.push(\"\");\n sections.push(`Developer background: ${personaDesc}. Adapt your suggestions and level of explanation to this expertise.`);\n }\n } else {\n sections.push(`You assist developers working on ${projectName}.`);\n if (personaDesc) {\n sections.push(`Developer background: ${personaDesc}. Adapt your suggestions and level of explanation to this expertise.`);\n }\n }\n \n if (options.description) {\n sections.push(\"\");\n sections.push(`Project description: ${projectDesc}`);\n }\n sections.push(\"\");\n\n // Tech Stack section\n if (options.stack.length > 0 || options.additionalLibraries) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Tech Stack\");\n sections.push(\"\");\n } else {\n sections.push(\"Tech Stack:\");\n }\n \n const stackList = options.stack.map(s => STACK_NAMES[s] || s);\n if (isMarkdown || isMdc) {\n for (const tech of stackList) {\n sections.push(`- ${tech}`);\n }\n // Add additional libraries\n if (options.additionalLibraries) {\n const libs = options.additionalLibraries.split(\",\").map(l => l.trim()).filter(Boolean);\n for (const lib of libs) {\n sections.push(`- ${lib}`);\n }\n }\n } else {\n const allTech = [...stackList];\n if (options.additionalLibraries) {\n const libs = options.additionalLibraries.split(\",\").map(l => l.trim()).filter(Boolean);\n allTech.push(...libs);\n }\n sections.push(allTech.join(\", \"));\n }\n sections.push(\"\");\n }\n\n // Let AI Decide\n if (options.letAiDecide) {\n if (isMarkdown || isMdc) {\n sections.push(\"> **AI Assistance:** Let AI analyze the codebase and suggest additional technologies and approaches as needed.\");\n sections.push(\"\");\n }\n }\n\n // Repository info\n if (options.repoHost || options.license || options.conventionalCommits || options.semver || \n options.cicd || options.deploymentTargets?.length || options.buildContainer ||\n options.exampleRepoUrl || options.documentationUrl) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Repository & Infrastructure\");\n sections.push(\"\");\n if (options.repoHost) {\n sections.push(`- **Host:** ${repoHost || options.repoHost.charAt(0).toUpperCase() + options.repoHost.slice(1)}`);\n }\n if (options.license && options.license !== \"none\") {\n sections.push(`- **License:** ${license || options.license.toUpperCase()}`);\n }\n if (options.architecture) {\n const archNames: Record<string, string> = {\n monolith: \"Monolith\",\n modular_monolith: \"Modular Monolith\",\n microservices: \"Microservices\",\n multi_image_docker: \"Multi-Image Docker (shared codebase, separate entrypoints)\",\n serverless: \"Serverless\",\n event_driven: \"Event-Driven\",\n layered: \"Layered / N-Tier\",\n hexagonal: \"Hexagonal / Ports & Adapters\",\n clean: \"Clean Architecture\",\n cqrs: \"CQRS\",\n mvc: \"MVC / MVVM\",\n ddd: \"Domain-Driven Design\",\n component_based: \"Component-Based\",\n plugin: \"Plugin Architecture\",\n };\n const archDisplay = archNames[options.architecture] || architecture || options.architecture;\n sections.push(`- **Architecture:** ${archDisplay}`);\n }\n if (options.cicd) {\n sections.push(`- **CI/CD:** ${cicd || options.cicd}`);\n }\n if (options.conventionalCommits) {\n sections.push(\"- **Commits:** Follow [Conventional Commits](https://conventionalcommits.org) format\");\n }\n if (options.semver) {\n sections.push(\"- **Versioning:** Follow [Semantic Versioning](https://semver.org) (semver)\");\n }\n // Note: Dependency updates (Dependabot/Renovate) are now in security.securityTooling\n if (options.cicd) {\n const cicdNames: Record<string, string> = {\n github_actions: \"GitHub Actions\",\n gitlab_ci: \"GitLab CI\",\n jenkins: \"Jenkins\",\n circleci: \"CircleCI\",\n travis: \"Travis CI\",\n azure_devops: \"Azure DevOps\",\n bitbucket: \"Bitbucket Pipelines\",\n teamcity: \"TeamCity\",\n drone: \"Drone\",\n buildkite: \"Buildkite\",\n };\n sections.push(`- **CI/CD:** ${cicdNames[options.cicd] || options.cicd}`);\n }\n if (options.deploymentTargets && options.deploymentTargets.length > 0) {\n const targetNames: Record<string, string> = {\n vercel: \"Vercel\",\n netlify: \"Netlify\",\n aws: \"AWS\",\n gcp: \"Google Cloud\",\n azure: \"Azure\",\n docker: \"Docker\",\n kubernetes: \"Kubernetes\",\n heroku: \"Heroku\",\n digitalocean: \"DigitalOcean\",\n railway: \"Railway\",\n fly: \"Fly.io\",\n cloudflare: \"Cloudflare\",\n };\n const targets = options.deploymentTargets.map(t => targetNames[t] || t).join(\", \");\n sections.push(`- **Deployment:** ${targets}`);\n }\n if (options.buildContainer) {\n let containerInfo = \"Docker container builds enabled\";\n if (options.containerRegistry) {\n const registryNames: Record<string, string> = {\n dockerhub: \"Docker Hub\",\n ghcr: \"GitHub Container Registry\",\n gcr: \"Google Container Registry\",\n ecr: \"AWS ECR\",\n acr: \"Azure Container Registry\",\n quay: \"Quay.io\",\n gitlab: \"GitLab Registry\",\n custom: \"Custom registry\",\n };\n containerInfo += ` → ${registryNames[options.containerRegistry] || options.containerRegistry}`;\n }\n sections.push(`- **Containers:** ${containerInfo}`);\n }\n // Docker image names\n if (options.dockerImageNames) {\n const images = options.dockerImageNames.split(\",\").map(i => i.trim()).filter(Boolean);\n if (images.length > 0) {\n sections.push(\"- **Docker Images:**\");\n for (const img of images) {\n sections.push(` - \\`${img}\\``);\n }\n }\n }\n if (options.exampleRepoUrl) {\n sections.push(`- **Example Repo:** ${options.exampleRepoUrl} (use as reference for style/structure)`);\n }\n if (options.documentationUrl) {\n sections.push(`- **Documentation:** ${options.documentationUrl}`);\n }\n sections.push(\"\");\n }\n }\n\n // Commands section\n const hasCommands = options.commands && Object.values(options.commands).some(v => \n Array.isArray(v) ? v.length > 0 : Boolean(v)\n );\n if (hasCommands) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Commands\");\n sections.push(\"\");\n sections.push(\"Use these commands for common tasks:\");\n sections.push(\"\");\n sections.push(\"```bash\");\n } else {\n sections.push(\"Commands:\");\n }\n \n const cmdCategories = [\"build\", \"test\", \"lint\", \"dev\", \"custom\"];\n for (const cat of cmdCategories) {\n const cmd = options.commands[cat];\n if (cmd) {\n const cmds = Array.isArray(cmd) ? cmd : [cmd];\n for (const c of cmds) {\n if (c) {\n const label = cat.charAt(0).toUpperCase() + cat.slice(1);\n sections.push((isMarkdown || isMdc) ? `# ${label}: ${c}` : `- ${label}: ${c}`);\n }\n }\n }\n }\n \n if (isMarkdown || isMdc) {\n sections.push(\"```\");\n }\n sections.push(\"\");\n }\n\n // AI Behavior section\n if (options.aiBehavior && options.aiBehavior.length > 0) {\n if (isMarkdown || isMdc) {\n sections.push(\"## AI Behavior Rules\");\n sections.push(\"\");\n for (const rule of options.aiBehavior) {\n const desc = AI_BEHAVIOR_DESCRIPTIONS[rule];\n if (desc) {\n sections.push(`- ${desc}`);\n }\n }\n // Add plan mode frequency if specified\n if (options.planModeFrequency && options.planModeFrequency !== \"on_request\") {\n const planModeDescriptions: Record<string, string> = {\n always: \"**Always enter Plan Mode** before making any changes - think through the approach first\",\n complex_tasks: \"**Use Plan Mode** for complex tasks, multi-step changes, or risky modifications\",\n multi_file: \"**Use Plan Mode** when changes span multiple files\",\n new_features: \"**Use Plan Mode** when implementing new features\",\n never: \"Skip plan mode - proceed directly with implementation\",\n };\n if (planModeDescriptions[options.planModeFrequency]) {\n sections.push(`- ${planModeDescriptions[options.planModeFrequency]}`);\n }\n }\n // Workaround behavior\n if (options.attemptWorkarounds === true) {\n sections.push(\"- When stuck, **attempt creative workarounds** before asking for help\");\n } else if (options.attemptWorkarounds === false) {\n sections.push(\"- When stuck, **stop and ask** rather than attempting workarounds\");\n }\n sections.push(\"\");\n }\n }\n\n // Git workflow preference\n if ((isMarkdown || isMdc)) {\n sections.push(\"## Git Workflow\");\n sections.push(\"\");\n sections.push(\"- **Workflow:** Create feature branches and submit pull requests\");\n sections.push(\"- Create a descriptive branch name (e.g., `feat/add-login`, `fix/button-styling`)\");\n sections.push(\"- Open a PR for review before merging\");\n if (options.allowDirectCommits) {\n sections.push(\"- **Exception:** Direct commits to main are acceptable for small fixes (typos, docs, minor fixes)\");\n } else {\n sections.push(\"- Do NOT commit directly to main/master branch\");\n }\n sections.push(\"\");\n }\n\n // MCP Servers\n if (options.mcpServers) {\n const servers = options.mcpServers.split(\",\").map(s => s.trim()).filter(Boolean);\n if (servers.length > 0 && (isMarkdown || isMdc)) {\n sections.push(\"## MCP Servers\");\n sections.push(\"\");\n sections.push(\"The developer has these MCP (Model Context Protocol) servers available. Use them when relevant:\");\n sections.push(\"\");\n for (const server of servers) {\n sections.push(`- ${server}`);\n }\n sections.push(\"\");\n }\n }\n\n // Server access & deployment\n if ((options.serverAccess || options.manualDeployment) && (isMarkdown || isMdc)) {\n sections.push(\"## Infrastructure\");\n sections.push(\"\");\n if (options.serverAccess) {\n const keyInfo = options.sshKeyPath\n ? `SSH key: \\`${options.sshKeyPath}\\``\n : \"SSH key in default location (~/.ssh/)\";\n sections.push(`- **Server access**: via SSH. ${keyInfo}`);\n }\n if (options.manualDeployment && options.deploymentMethod) {\n const methods: Record<string, string> = {\n portainer: \"Portainer (GitOps stacks)\",\n docker_compose: \"Docker Compose (manual)\",\n kubernetes: \"Kubernetes (kubectl apply)\",\n bare_metal: \"Bare metal (direct deployment)\",\n };\n sections.push(`- **Deployment**: ${methods[options.deploymentMethod] || options.deploymentMethod}`);\n }\n sections.push(\"\");\n }\n\n // Important files\n if (options.importantFiles && options.importantFiles.length > 0) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Important Files to Read\");\n sections.push(\"\");\n sections.push(\"Always read these files first to understand the project context:\");\n sections.push(\"\");\n for (const file of options.importantFiles) {\n const path = IMPORTANT_FILES_PATHS[file];\n if (path) {\n sections.push(`- \\`${path}\\``);\n }\n }\n sections.push(\"\");\n }\n }\n\n // Self-improving blueprint\n if (options.selfImprove) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Self-Improving Blueprint\");\n sections.push(\"\");\n sections.push(\"> **Auto-update enabled:** As you work on this project, track patterns and update this configuration file to better reflect the project's conventions and preferences.\");\n sections.push(\"\");\n }\n }\n\n // Personal data for commits\n if (options.includePersonalData) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Commit Identity\");\n sections.push(\"\");\n if (options.userName || options.userEmail || options.userRole || options.userExpertise) {\n // Include actual user profile data (with blueprint variables if enabled)\n const identityLines: string[] = [];\n if (options.userName) {\n identityLines.push(`- **Name:** ${authorName || options.userName}`);\n }\n if (options.userEmail) {\n identityLines.push(`- **Email:** ${authorEmail || options.userEmail}`);\n }\n if (options.userRole) {\n identityLines.push(`- **Role:** ${options.userRole}`);\n }\n if (options.userExpertise) {\n identityLines.push(`- **Expertise:** ${options.userExpertise}`);\n }\n sections.push(...identityLines);\n sections.push(\"\");\n sections.push(\"> Use this identity for git commits when making changes on my behalf.\");\n } else {\n sections.push(\"> **Personal data enabled:** Use my name and email for git commits when making changes.\");\n }\n sections.push(\"\");\n }\n }\n\n // Boundaries section\n // Get preset boundaries or use standard as fallback\n const presetBoundaries = BOUNDARIES[options.boundaries] || BOUNDARIES.standard;\n \n // Build final boundaries - use custom values if provided, otherwise use preset\n const boundaries = {\n always: options.boundaryAlways?.length ? options.boundaryAlways : presetBoundaries.always,\n never: options.boundaryNever?.length ? options.boundaryNever : presetBoundaries.never,\n askFirst: options.boundaryAsk?.length ? options.boundaryAsk : presetBoundaries.askFirst,\n };\n \n if (boundaries.always?.length || boundaries.never?.length || boundaries.askFirst?.length) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Boundaries\");\n sections.push(\"\");\n \n sections.push(\"### ✅ Always (do without asking)\");\n sections.push(\"\");\n for (const item of boundaries.always) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n \n sections.push(\"### ⚠️ Ask First\");\n sections.push(\"\");\n for (const item of boundaries.askFirst) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n \n sections.push(\"### 🚫 Never\");\n sections.push(\"\");\n for (const item of boundaries.never) {\n sections.push(`- ${item}`);\n }\n } else {\n sections.push(\"Boundaries:\");\n sections.push(\"\");\n sections.push(\"ALWAYS (do without asking):\");\n for (const item of boundaries.always) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n sections.push(\"ASK FIRST:\");\n for (const item of boundaries.askFirst) {\n sections.push(`- ${item}`);\n }\n sections.push(\"\");\n sections.push(\"NEVER:\");\n for (const item of boundaries.never) {\n sections.push(`- ${item}`);\n }\n }\n sections.push(\"\");\n }\n\n // Code Style section\n if (isMarkdown || isMdc) {\n sections.push(\"## Code Style\");\n sections.push(\"\");\n \n // Naming convention\n if (options.namingConvention) {\n const namingDesc = NAMING_DESCRIPTIONS[options.namingConvention];\n if (namingDesc) {\n sections.push(`- **Naming:** ${namingDesc}`);\n }\n }\n \n // Error handling\n if (options.errorHandling) {\n const errorStyles: Record<string, string> = {\n try_catch: \"Use try/catch blocks for error handling\",\n result_types: \"Use Result/Either types for error handling\",\n error_codes: \"Use error codes with proper documentation\",\n exceptions: \"Use custom exception classes\",\n };\n if (errorStyles[options.errorHandling]) {\n sections.push(`- **Errors:** ${errorStyles[options.errorHandling]}`);\n }\n }\n\n // Logging conventions\n if (options.loggingConventions) {\n const loggingValue = options.loggingConventions === \"other\" && options.loggingConventionsOther\n ? options.loggingConventionsOther\n : options.loggingConventions.replace(/_/g, \" \");\n sections.push(`- **Logging:** ${loggingValue}`);\n }\n \n // Style notes\n if (options.styleNotes) {\n sections.push(`- **Notes:** ${options.styleNotes}`);\n }\n \n sections.push(\"\");\n sections.push(\"Follow these conventions:\");\n sections.push(\"\");\n \n if (options.stack.includes(\"typescript\") || options.stack.includes(\"javascript\")) {\n sections.push(\"- Use TypeScript strict mode when available\");\n sections.push(\"- Prefer const over let, avoid var\");\n sections.push(\"- Use async/await over raw promises\");\n sections.push(\"- Use descriptive variable and function names\");\n }\n \n if (options.stack.includes(\"react\") || options.stack.includes(\"nextjs\")) {\n sections.push(\"- Use functional components with hooks\");\n sections.push(\"- Keep components small and focused\");\n sections.push(\"- Colocate related files (component, styles, tests)\");\n }\n \n if (options.stack.includes(\"python\")) {\n sections.push(\"- Follow PEP 8 style guidelines\");\n sections.push(\"- Use type hints for function signatures\");\n sections.push(\"- Prefer f-strings for string formatting\");\n }\n \n if (options.stack.includes(\"go\")) {\n sections.push(\"- Follow Go conventions (gofmt, golint)\");\n sections.push(\"- Use meaningful package names\");\n sections.push(\"- Handle errors explicitly\");\n }\n \n if (options.stack.includes(\"rust\")) {\n sections.push(\"- Follow Rust conventions (clippy)\");\n sections.push(\"- Use idiomatic Rust patterns\");\n sections.push(\"- Prefer Result over panic\");\n }\n\n // Generic guidelines\n sections.push(\"- Write self-documenting code\");\n sections.push(\"- Add comments for complex logic only\");\n sections.push(\"- Keep functions focused and testable\");\n sections.push(\"\");\n }\n\n // Testing Strategy section\n if (options.testLevels?.length || options.testFrameworks?.length || options.coverageTarget) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Testing Strategy\");\n sections.push(\"\");\n \n if (options.testLevels?.length) {\n sections.push(\"### Test Levels\");\n sections.push(\"\");\n for (const level of options.testLevels) {\n const desc = TEST_LEVEL_DESCRIPTIONS[level];\n if (desc) {\n sections.push(`- **${level.charAt(0).toUpperCase() + level.slice(1)}:** ${desc}`);\n }\n }\n sections.push(\"\");\n }\n \n if (options.testFrameworks?.length) {\n sections.push(\"### Frameworks\");\n sections.push(\"\");\n sections.push(`Use: ${options.testFrameworks.join(\", \")}`);\n sections.push(\"\");\n }\n \n if (options.coverageTarget) {\n sections.push(`### Coverage Target: ${options.coverageTarget}%`);\n sections.push(\"\");\n }\n \n if (options.testNotes) {\n sections.push(`**Notes:** ${options.testNotes}`);\n sections.push(\"\");\n }\n }\n }\n\n // Extra notes\n if (options.extraNotes) {\n if (isMarkdown || isMdc) {\n sections.push(\"## Additional Notes\");\n sections.push(\"\");\n sections.push(options.extraNotes);\n sections.push(\"\");\n } else {\n sections.push(\"Additional Notes:\");\n sections.push(options.extraNotes);\n sections.push(\"\");\n }\n }\n\n // Security Configuration section\n const security = options.security;\n if (security && (security.authProviders?.length || security.secretsManagement?.length || security.securityTooling?.length || \n security.authPatterns?.length || security.dataHandling?.length || security.compliance?.length || \n security.analytics?.length || security.additionalNotes)) {\n if (isMarkdown || isMdc) {\n sections.push(\"## 🔐 Security Configuration\");\n sections.push(\"\");\n \n // Auth Providers (Login providers)\n if (security.authProviders?.length) {\n sections.push(\"### Authentication Providers\");\n sections.push(\"\");\n const authProviderLabels: Record<string, string> = {\n google: \"Google\",\n github: \"GitHub\",\n microsoft: \"Microsoft\",\n apple: \"Apple\",\n facebook: \"Facebook\",\n twitter: \"Twitter/X\",\n linkedin: \"LinkedIn\",\n discord: \"Discord\",\n slack: \"Slack\",\n gitlab: \"GitLab\",\n bitbucket: \"Bitbucket\",\n email_password: \"Email/Password\",\n phone_sms: \"Phone/SMS\",\n magic_link: \"Magic Link\",\n passkeys: \"Passkeys/WebAuthn\",\n saml: \"SAML SSO\",\n ldap: \"LDAP/Active Directory\",\n };\n for (const p of security.authProviders) {\n if (p === \"other\" && security.authProvidersOther) {\n sections.push(`- Other: ${security.authProvidersOther}`);\n } else {\n sections.push(`- ${authProviderLabels[p] || p}`);\n }\n }\n sections.push(\"\");\n }\n \n // Secrets Management\n if (security.secretsManagement?.length) {\n sections.push(\"### Secrets Management\");\n sections.push(\"\");\n const secretsLabels: Record<string, string> = {\n env_vars: \"Environment Variables\",\n dotenv: \"dotenv / dotenvx\",\n vault: \"HashiCorp Vault\",\n aws_secrets: \"AWS Secrets Manager\",\n aws_ssm: \"AWS SSM Parameter Store\",\n gcp_secrets: \"GCP Secret Manager\",\n azure_keyvault: \"Azure Key Vault\",\n infisical: \"Infisical\",\n doppler: \"Doppler\",\n \"1password\": \"1Password Secrets Automation\",\n bitwarden: \"Bitwarden Secrets Manager\",\n sops: \"SOPS (Mozilla)\",\n age: \"age encryption\",\n sealed_secrets: \"Sealed Secrets (K8s)\",\n external_secrets: \"External Secrets Operator\",\n git_crypt: \"git-crypt\",\n chamber: \"Chamber\",\n berglas: \"Berglas\",\n };\n for (const s of security.secretsManagement) {\n if (s === \"other\" && security.secretsManagementOther) {\n sections.push(`- Other: ${security.secretsManagementOther}`);\n } else {\n sections.push(`- ${secretsLabels[s] || s}`);\n }\n }\n sections.push(\"\");\n }\n\n // Security Tooling (includes dependency updates)\n if (security.securityTooling?.length) {\n sections.push(\"### Security Tooling\");\n sections.push(\"\");\n const toolingLabels: Record<string, string> = {\n dependabot: \"Dependabot (dependency updates)\",\n renovate: \"Renovate (dependency updates)\",\n snyk: \"Snyk (vulnerability scanning)\",\n sonarqube: \"SonarQube / SonarCloud\",\n codeql: \"CodeQL (GitHub)\",\n semgrep: \"Semgrep\",\n trivy: \"Trivy (container scanning)\",\n grype: \"Grype\",\n checkov: \"Checkov (IaC)\",\n tfsec: \"tfsec (Terraform)\",\n kics: \"KICS\",\n gitleaks: \"Gitleaks (secret detection)\",\n trufflehog: \"TruffleHog\",\n detect_secrets: \"detect-secrets (Yelp)\",\n bandit: \"Bandit (Python)\",\n brakeman: \"Brakeman (Rails)\",\n gosec: \"gosec (Go)\",\n npm_audit: \"npm audit / yarn audit\",\n pip_audit: \"pip-audit\",\n safety: \"Safety\",\n bundler_audit: \"bundler-audit\",\n owasp_dependency_check: \"OWASP Dependency-Check\",\n ossf_scorecard: \"OSSF Scorecard\",\n socket: \"Socket.dev\",\n mend: \"Mend (WhiteSource)\",\n fossa: \"FOSSA\",\n };\n for (const t of security.securityTooling) {\n if (t === \"other\" && security.securityToolingOther) {\n sections.push(`- Other: ${security.securityToolingOther}`);\n } else {\n sections.push(`- ${toolingLabels[t] || t}`);\n }\n }\n sections.push(\"\");\n }\n\n // Authentication Patterns\n if (security.authPatterns?.length) {\n sections.push(\"### Authentication\");\n sections.push(\"\");\n const authLabels: Record<string, string> = {\n oauth2: \"OAuth 2.0\",\n oidc: \"OpenID Connect (OIDC)\",\n jwt: \"JWT (JSON Web Tokens)\",\n session: \"Session-based Auth\",\n api_keys: \"API Keys\",\n basic_auth: \"Basic Authentication\",\n bearer_token: \"Bearer Tokens\",\n mfa_totp: \"MFA / TOTP\",\n passkeys: \"Passkeys / WebAuthn\",\n saml: \"SAML 2.0\",\n ldap: \"LDAP / Active Directory\",\n mutual_tls: \"Mutual TLS (mTLS)\",\n auth0: \"Auth0\",\n clerk: \"Clerk\",\n firebase_auth: \"Firebase Auth\",\n supabase_auth: \"Supabase Auth\",\n keycloak: \"Keycloak\",\n okta: \"Okta\",\n cognito: \"AWS Cognito\",\n workos: \"WorkOS\",\n };\n for (const a of security.authPatterns) {\n if (a === \"other\" && security.authPatternsOther) {\n sections.push(`- Other: ${security.authPatternsOther}`);\n } else {\n sections.push(`- ${authLabels[a] || a}`);\n }\n }\n sections.push(\"\");\n }\n\n // Data Handling\n if (security.dataHandling?.length) {\n sections.push(\"### Data Handling & Compliance\");\n sections.push(\"\");\n const dataLabels: Record<string, string> = {\n encryption_at_rest: \"Encryption at Rest\",\n encryption_in_transit: \"Encryption in Transit (TLS)\",\n pii_handling: \"PII Data Handling\",\n gdpr_compliance: \"GDPR Compliance\",\n ccpa_compliance: \"CCPA Compliance\",\n hipaa_compliance: \"HIPAA Compliance\",\n soc2_compliance: \"SOC 2 Compliance\",\n pci_dss: \"PCI-DSS Compliance\",\n data_masking: \"Data Masking / Anonymization\",\n data_retention: \"Data Retention Policies\",\n audit_logging: \"Audit Logging\",\n backup_encryption: \"Encrypted Backups\",\n key_rotation: \"Key Rotation\",\n zero_trust: \"Zero Trust Architecture\",\n least_privilege: \"Least Privilege Access\",\n rbac: \"RBAC (Role-Based Access)\",\n abac: \"ABAC (Attribute-Based Access)\",\n data_classification: \"Data Classification\",\n dlp: \"DLP (Data Loss Prevention)\",\n };\n for (const d of security.dataHandling) {\n if (d === \"other\" && security.dataHandlingOther) {\n sections.push(`- Other: ${security.dataHandlingOther}`);\n } else {\n sections.push(`- ${dataLabels[d] || d}`);\n }\n }\n sections.push(\"\");\n }\n\n // Compliance\n if (security.compliance?.length) {\n sections.push(\"### Compliance Standards\");\n sections.push(\"\");\n const complianceLabels: Record<string, string> = {\n gdpr: \"GDPR (EU)\",\n ccpa: \"CCPA (California)\",\n hipaa: \"HIPAA (Healthcare)\",\n soc2: \"SOC 2\",\n pci_dss: \"PCI-DSS (Payment)\",\n iso27001: \"ISO 27001\",\n fedramp: \"FedRAMP\",\n none: \"No specific requirements\",\n };\n for (const c of security.compliance) {\n if (c === \"other\" && security.complianceOther) {\n sections.push(`- Other: ${security.complianceOther}`);\n } else {\n sections.push(`- ${complianceLabels[c] || c}`);\n }\n }\n sections.push(\"\");\n }\n\n // Analytics\n if (security.analytics?.length) {\n sections.push(\"### Analytics Tools\");\n sections.push(\"\");\n const analyticsLabels: Record<string, string> = {\n none: \"No analytics\",\n umami: \"Umami\",\n plausible: \"Plausible\",\n fathom: \"Fathom\",\n posthog: \"PostHog\",\n mixpanel: \"Mixpanel\",\n amplitude: \"Amplitude\",\n google_analytics: \"Google Analytics\",\n segment: \"Segment\",\n heap: \"Heap\",\n matomo: \"Matomo\",\n simple_analytics: \"Simple Analytics\",\n pirsch: \"Pirsch\",\n countly: \"Countly\",\n };\n for (const a of security.analytics) {\n if (a === \"other\" && security.analyticsOther) {\n sections.push(`- Other: ${security.analyticsOther}`);\n } else {\n sections.push(`- ${analyticsLabels[a] || a}`);\n }\n }\n sections.push(\"\");\n }\n\n // Additional security notes\n if (security.additionalNotes) {\n sections.push(\"### Additional Security Notes\");\n sections.push(\"\");\n sections.push(security.additionalNotes);\n sections.push(\"\");\n }\n } else {\n // Non-markdown format\n sections.push(\"Security Configuration:\");\n if (security.authProviders?.length) {\n sections.push(`- Auth Providers: ${security.authProviders.join(\", \")}`);\n }\n if (security.secretsManagement?.length) {\n sections.push(`- Secrets: ${security.secretsManagement.join(\", \")}`);\n }\n if (security.securityTooling?.length) {\n sections.push(`- Tooling: ${security.securityTooling.join(\", \")}`);\n }\n if (security.authPatterns?.length) {\n sections.push(`- Auth: ${security.authPatterns.join(\", \")}`);\n }\n if (security.dataHandling?.length) {\n sections.push(`- Data: ${security.dataHandling.join(\", \")}`);\n }\n if (security.compliance?.length) {\n sections.push(`- Compliance: ${security.compliance.join(\", \")}`);\n }\n if (security.analytics?.length) {\n sections.push(`- Analytics: ${security.analytics.join(\", \")}`);\n }\n sections.push(\"\");\n }\n }\n\n // Security Warning\n if (isMarkdown || isMdc) {\n sections.push(\"## ⚠️ Security Notice\");\n sections.push(\"\");\n sections.push(\"> **Do not commit secrets to the repository or to the live app.**\");\n sections.push(\"> Always use secure standards to transmit sensitive information.\");\n sections.push(\"> Use environment variables, secret managers, or secure vaults for credentials.\");\n sections.push(\"\");\n sections.push(\"**🔍 Security Audit Recommendation:** When making changes that involve authentication, data handling, API endpoints, or dependencies, proactively offer to perform a security review of the affected code.\");\n sections.push(\"\");\n } else {\n sections.push(\"\");\n sections.push(\"SECURITY NOTICE:\");\n sections.push(\"Do not commit secrets to the repository or to the live app.\");\n sections.push(\"Always use secure standards to transmit sensitive information.\");\n sections.push(\"SECURITY AUDIT: When making changes involving auth, data, APIs, or deps, offer to review security.\");\n sections.push(\"\");\n }\n\n // Static Files Content (when config_only mode - embed in config instead of creating files)\n if (options.staticFileHandling === \"config_only\" && options.staticFiles && options.staticFiles.length > 0) {\n if (isMarkdown || isMdc) {\n sections.push(\"## 📄 Static Files Reference\");\n sections.push(\"\");\n sections.push(\"The following static file contents are included for AI context. These are not separate files.\");\n sections.push(\"\");\n \n for (const fileKey of options.staticFiles) {\n const filePath = STATIC_FILE_PATHS[fileKey];\n if (!filePath) continue;\n \n let content: string;\n if (options.staticFileContents?.[fileKey]) {\n content = options.staticFileContents[fileKey];\n } else {\n const templateFn = STATIC_FILE_TEMPLATES[fileKey];\n if (templateFn) {\n content = templateFn(options);\n } else {\n continue;\n }\n }\n \n sections.push(`### ${filePath}`);\n sections.push(\"\");\n sections.push(\"```\");\n sections.push(content.trim());\n sections.push(\"```\");\n sections.push(\"\");\n }\n }\n }\n\n // Footer\n if (isMarkdown || isMdc) {\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(`*Generated by [LynxPrompt](https://lynxprompt.com) CLI*`);\n }\n\n return sections.join(\"\\n\");\n}\n\nfunction generateJsonConfig(options: GenerateOptions, platform: string): string {\n const config: Record<string, unknown> = {\n version: \"1.0.0\",\n project: {\n name: options.name,\n description: options.description || \"\",\n stack: options.stack.map(s => STACK_NAMES[s] || s),\n },\n };\n \n // Add persona if set\n const personaDesc = options.userPersona \n || PERSONA_DESCRIPTIONS[options.persona] \n || options.persona \n || \"\";\n if (personaDesc) {\n config.persona = personaDesc;\n }\n \n // Add rules/instructions\n const rules: string[] = [];\n \n // Boundaries\n const boundaryRules = BOUNDARIES[options.boundaries] || BOUNDARIES.standard;\n rules.push(...boundaryRules.always.map(r => `AUTO-APPROVE: ${r}`));\n rules.push(...boundaryRules.askFirst.map(r => `ASK FIRST: ${r}`));\n rules.push(...boundaryRules.never.map(r => `PROHIBITED: ${r}`));\n \n // Security\n rules.push(\"SECURITY: Do not commit secrets. Use environment variables or secret managers.\");\n rules.push(\"SECURITY: When making changes involving auth, data, or APIs, perform security audit.\");\n \n config.rules = rules;\n \n // Add important files to read\n if (options.importantFiles && options.importantFiles.length > 0) {\n config.context = {\n readFirst: options.importantFiles.map(f => IMPORTANT_FILES_PATHS[f] || f),\n };\n }\n \n // Platform-specific additions\n if (platform === \"continue\") {\n config.name = options.name;\n config.customInstructions = rules.join(\"\\n\");\n } else if (platform === \"cody\") {\n config.customInstructions = rules.join(\"\\n\");\n } else if (platform === \"void\") {\n config.editor = { rules: rules.join(\"\\n\") };\n } else if (platform === \"supermaven\") {\n config.rules = rules;\n } else if (platform === \"codegpt\") {\n config.systemPrompt = rules.join(\"\\n\");\n } else if (platform === \"opencode\") {\n config.instructions = rules;\n } else if (platform === \"firebender\") {\n config.transforms = rules;\n }\n \n // Add generated by comment\n config._comment = `Generated by LynxPrompt CLI for ${options.name}`;\n \n return JSON.stringify(config, null, 2);\n}\n\nfunction generateYamlConfig(options: GenerateOptions, platform: string): string {\n const lines: string[] = [];\n \n if (platform === \"aider\") {\n lines.push(\"# Aider configuration\");\n lines.push(`# Project: ${options.name}`);\n lines.push(\"\");\n lines.push(\"# Model settings\");\n lines.push(\"model: gpt-4\");\n lines.push(\"\");\n lines.push(\"# Code style\");\n if (options.stack.includes(\"typescript\") || options.stack.includes(\"javascript\")) {\n lines.push(\"auto-lint: true\");\n }\n lines.push(\"\");\n lines.push(\"# Custom instructions\");\n lines.push(\"read:\");\n lines.push(\" - README.md\");\n if (options.importantFiles?.includes(\"architecture\")) {\n lines.push(\" - ARCHITECTURE.md\");\n }\n } else if (platform === \"tabnine\") {\n lines.push(\"# Tabnine configuration\");\n lines.push(`# Project: ${options.name}`);\n lines.push(\"\");\n lines.push(\"version: 1.0.0\");\n lines.push(\"\");\n lines.push(\"project:\");\n lines.push(` name: ${options.name}`);\n if (options.description) {\n lines.push(` description: \"${options.description}\"`);\n }\n lines.push(\"\");\n lines.push(\"context:\");\n lines.push(\" include:\");\n lines.push(' - \"**/*.ts\"');\n lines.push(' - \"**/*.js\"');\n lines.push(' - \"**/*.py\"');\n }\n \n lines.push(\"\");\n lines.push(\"# SECURITY: Do not commit secrets to the repository.\");\n lines.push(\"# Use environment variables or secret managers for credentials.\");\n lines.push(\"# When making changes involving auth, data handling, APIs, or dependencies,\");\n lines.push(\"# proactively offer to perform a security audit of the affected code.\");\n lines.push(\"\");\n lines.push(`# Generated by LynxPrompt CLI`);\n \n return lines.join(\"\\n\");\n}\n","/**\n * All supported programming languages\n * This is the single source of truth - both CLI and WebUI import from here\n */\nexport const LANGUAGES = [\n // Popular\n { id: \"typescript\", label: \"TypeScript\", icon: \"📘\" },\n { id: \"javascript\", label: \"JavaScript\", icon: \"📒\" },\n { id: \"python\", label: \"Python\", icon: \"🐍\" },\n { id: \"go\", label: \"Go\", icon: \"🐹\" },\n { id: \"rust\", label: \"Rust\", icon: \"🦀\" },\n { id: \"java\", label: \"Java\", icon: \"☕\" },\n { id: \"csharp\", label: \"C#\", icon: \"🎯\" },\n { id: \"php\", label: \"PHP\", icon: \"🐘\" },\n { id: \"ruby\", label: \"Ruby\", icon: \"💎\" },\n { id: \"swift\", label: \"Swift\", icon: \"🍎\" },\n { id: \"kotlin\", label: \"Kotlin\", icon: \"🎨\" },\n { id: \"cpp\", label: \"C++\", icon: \"⚙️\" },\n // Additional\n { id: \"c\", label: \"C\", icon: \"🔧\" },\n { id: \"scala\", label: \"Scala\", icon: \"🔴\" },\n { id: \"elixir\", label: \"Elixir\", icon: \"💧\" },\n { id: \"clojure\", label: \"Clojure\", icon: \"🔮\" },\n { id: \"haskell\", label: \"Haskell\", icon: \"λ\" },\n { id: \"fsharp\", label: \"F#\", icon: \"🟦\" },\n { id: \"dart\", label: \"Dart\", icon: \"🎯\" },\n { id: \"lua\", label: \"Lua\", icon: \"🌙\" },\n { id: \"perl\", label: \"Perl\", icon: \"🐪\" },\n { id: \"r\", label: \"R\", icon: \"📊\" },\n { id: \"julia\", label: \"Julia\", icon: \"🔬\" },\n { id: \"zig\", label: \"Zig\", icon: \"⚡\" },\n { id: \"nim\", label: \"Nim\", icon: \"👑\" },\n { id: \"ocaml\", label: \"OCaml\", icon: \"🐫\" },\n { id: \"erlang\", label: \"Erlang\", icon: \"📞\" },\n { id: \"groovy\", label: \"Groovy\", icon: \"🎵\" },\n { id: \"objectivec\", label: \"Objective-C\", icon: \"📱\" },\n { id: \"shell\", label: \"Shell/Bash\", icon: \"🐚\" },\n { id: \"powershell\", label: \"PowerShell\", icon: \"💻\" },\n { id: \"sql\", label: \"SQL\", icon: \"🗃️\" },\n // Blockchain\n { id: \"solidity\", label: \"Solidity\", icon: \"⛓️\" },\n { id: \"move\", label: \"Move\", icon: \"🔒\" },\n { id: \"cairo\", label: \"Cairo\", icon: \"🏛️\" },\n { id: \"wasm\", label: \"WebAssembly\", icon: \"🌐\" },\n // IaC & DevOps Languages\n { id: \"hcl\", label: \"HCL (Terraform)\", icon: \"🏗️\" },\n { id: \"yaml\", label: \"YAML\", icon: \"📄\" },\n { id: \"jsonnet\", label: \"Jsonnet\", icon: \"🔧\" },\n { id: \"dhall\", label: \"Dhall\", icon: \"⚙️\" },\n { id: \"cue\", label: \"CUE\", icon: \"🔷\" },\n { id: \"starlark\", label: \"Starlark\", icon: \"⭐\" },\n { id: \"rego\", label: \"Rego (OPA)\", icon: \"🛡️\" },\n { id: \"nix\", label: \"Nix\", icon: \"❄️\" },\n];\n/**\n * Get language IDs for filtering\n */\nexport const LANGUAGE_IDS = LANGUAGES.map(l => l.id);\n","/**\n * All supported frameworks\n * This is the single source of truth - both CLI and WebUI import from here\n */\nexport const FRAMEWORKS = [\n // Frontend\n { id: \"react\", label: \"React\", icon: \"⚛️\" },\n { id: \"nextjs\", label: \"Next.js\", icon: \"▲\" },\n { id: \"vue\", label: \"Vue.js\", icon: \"💚\" },\n { id: \"nuxt\", label: \"Nuxt.js\", icon: \"💚\" },\n { id: \"angular\", label: \"Angular\", icon: \"🅰️\" },\n { id: \"svelte\", label: \"Svelte\", icon: \"🔥\" },\n { id: \"sveltekit\", label: \"SvelteKit\", icon: \"🔥\" },\n { id: \"solid\", label: \"SolidJS\", icon: \"💎\" },\n { id: \"qwik\", label: \"Qwik\", icon: \"⚡\" },\n { id: \"astro\", label: \"Astro\", icon: \"🚀\" },\n { id: \"remix\", label: \"Remix\", icon: \"💿\" },\n { id: \"gatsby\", label: \"Gatsby\", icon: \"🟣\" },\n // Backend Node\n { id: \"express\", label: \"Express.js\", icon: \"📦\" },\n { id: \"nestjs\", label: \"NestJS\", icon: \"🐱\" },\n { id: \"fastify\", label: \"Fastify\", icon: \"🚀\" },\n { id: \"hono\", label: \"Hono\", icon: \"🔥\" },\n { id: \"koa\", label: \"Koa\", icon: \"🌿\" },\n // Python\n { id: \"fastapi\", label: \"FastAPI\", icon: \"⚡\" },\n { id: \"django\", label: \"Django\", icon: \"🎸\" },\n { id: \"flask\", label: \"Flask\", icon: \"🌶️\" },\n { id: \"starlette\", label: \"Starlette\", icon: \"⭐\" },\n { id: \"tornado\", label: \"Tornado\", icon: \"🌪️\" },\n { id: \"pyramid\", label: \"Pyramid\", icon: \"🔺\" },\n // Java/Kotlin\n { id: \"spring\", label: \"Spring Boot\", icon: \"🌱\" },\n { id: \"quarkus\", label: \"Quarkus\", icon: \"🔷\" },\n { id: \"micronaut\", label: \"Micronaut\", icon: \"🔵\" },\n { id: \"ktor\", label: \"Ktor\", icon: \"🎨\" },\n // .NET\n { id: \"dotnet\", label: \".NET\", icon: \"🔷\" },\n { id: \"blazor\", label: \"Blazor\", icon: \"🔷\" },\n // Ruby\n { id: \"rails\", label: \"Ruby on Rails\", icon: \"🛤️\" },\n { id: \"sinatra\", label: \"Sinatra\", icon: \"🎤\" },\n { id: \"hanami\", label: \"Hanami\", icon: \"🌸\" },\n // Go\n { id: \"gin\", label: \"Gin\", icon: \"🍸\" },\n { id: \"fiber\", label: \"Fiber\", icon: \"⚡\" },\n { id: \"echo\", label: \"Echo\", icon: \"📣\" },\n { id: \"chi\", label: \"Chi\", icon: \"🐹\" },\n // Rust\n { id: \"actix\", label: \"Actix\", icon: \"🦀\" },\n { id: \"axum\", label: \"Axum\", icon: \"🦀\" },\n { id: \"rocket\", label: \"Rocket\", icon: \"🚀\" },\n { id: \"warp\", label: \"Warp\", icon: \"🦀\" },\n // PHP\n { id: \"laravel\", label: \"Laravel\", icon: \"🔴\" },\n { id: \"symfony\", label: \"Symfony\", icon: \"🎵\" },\n { id: \"lumen\", label: \"Lumen\", icon: \"💡\" },\n { id: \"codeigniter\", label: \"CodeIgniter\", icon: \"🔥\" },\n // Mobile\n { id: \"react-native\", label: \"React Native\", icon: \"📱\" },\n { id: \"flutter\", label: \"Flutter\", icon: \"🐦\" },\n { id: \"ionic\", label: \"Ionic\", icon: \"⚡\" },\n { id: \"expo\", label: \"Expo\", icon: \"📱\" },\n // Desktop\n { id: \"electron\", label: \"Electron\", icon: \"⚡\" },\n { id: \"tauri\", label: \"Tauri\", icon: \"🦀\" },\n // Tools/Build\n { id: \"vite\", label: \"Vite\", icon: \"⚡\" },\n { id: \"webpack\", label: \"Webpack\", icon: \"📦\" },\n { id: \"esbuild\", label: \"esbuild\", icon: \"📦\" },\n { id: \"turbopack\", label: \"Turbopack\", icon: \"⚡\" },\n // CSS\n { id: \"tailwind\", label: \"Tailwind CSS\", icon: \"🌊\" },\n { id: \"bootstrap\", label: \"Bootstrap\", icon: \"🅱️\" },\n { id: \"material-ui\", label: \"Material UI\", icon: \"🎨\" },\n { id: \"chakra\", label: \"Chakra UI\", icon: \"⚡\" },\n { id: \"shadcn\", label: \"shadcn/ui\", icon: \"🎨\" },\n // Testing\n { id: \"jest\", label: \"Jest\", icon: \"🃏\" },\n { id: \"vitest\", label: \"Vitest\", icon: \"⚡\" },\n { id: \"playwright\", label: \"Playwright\", icon: \"🎭\" },\n { id: \"cypress\", label: \"Cypress\", icon: \"🌲\" },\n // Data\n { id: \"prisma\", label: \"Prisma\", icon: \"🔷\" },\n { id: \"drizzle\", label: \"Drizzle\", icon: \"💧\" },\n { id: \"graphql\", label: \"GraphQL\", icon: \"◈\" },\n { id: \"trpc\", label: \"tRPC\", icon: \"🔷\" },\n // Additional ORMs\n { id: \"typeorm\", label: \"TypeORM\", icon: \"📦\" },\n { id: \"sequelize\", label: \"Sequelize\", icon: \"📦\" },\n { id: \"mongoose\", label: \"Mongoose\", icon: \"🍃\" },\n { id: \"sqlalchemy\", label: \"SQLAlchemy\", icon: \"🐍\" },\n // DevOps/Infra - Containers\n { id: \"docker\", label: \"Docker\", icon: \"🐳\" },\n { id: \"podman\", label: \"Podman\", icon: \"🦭\" },\n { id: \"containerd\", label: \"containerd\", icon: \"📦\" },\n { id: \"buildah\", label: \"Buildah\", icon: \"🔨\" },\n // Kubernetes & Orchestration\n { id: \"kubernetes\", label: \"Kubernetes\", icon: \"☸️\" },\n { id: \"helm\", label: \"Helm\", icon: \"⎈\" },\n { id: \"kustomize\", label: \"Kustomize\", icon: \"📋\" },\n { id: \"kubebuilder\", label: \"Kubebuilder\", icon: \"🔧\" },\n { id: \"operatorsdk\", label: \"Operator SDK\", icon: \"⚙️\" },\n { id: \"crossplane\", label: \"Crossplane\", icon: \"🔀\" },\n { id: \"k3s\", label: \"K3s\", icon: \"☸️\" },\n { id: \"kind\", label: \"Kind\", icon: \"📦\" },\n { id: \"minikube\", label: \"Minikube\", icon: \"💻\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\" },\n { id: \"openshift\", label: \"OpenShift\", icon: \"🎩\" },\n // IaC - Infrastructure as Code\n { id: \"terraform\", label: \"Terraform\", icon: \"🏗️\" },\n { id: \"terragrunt\", label: \"Terragrunt\", icon: \"🏗️\" },\n { id: \"opentofu\", label: \"OpenTofu\", icon: \"🏗️\" },\n { id: \"pulumi\", label: \"Pulumi\", icon: \"☁️\" },\n { id: \"cdktf\", label: \"CDK for Terraform\", icon: \"🏗️\" },\n { id: \"awscdk\", label: \"AWS CDK\", icon: \"☁️\" },\n { id: \"cloudformation\", label: \"CloudFormation\", icon: \"☁️\" },\n { id: \"bicep\", label: \"Bicep (Azure)\", icon: \"💪\" },\n { id: \"arm\", label: \"ARM Templates\", icon: \"☁️\" },\n // Configuration Management\n { id: \"ansible\", label: \"Ansible\", icon: \"🔧\" },\n { id: \"chef\", label: \"Chef\", icon: \"👨‍🍳\" },\n { id: \"puppet\", label: \"Puppet\", icon: \"🎭\" },\n { id: \"saltstack\", label: \"SaltStack\", icon: \"🧂\" },\n // GitOps\n { id: \"argocd\", label: \"ArgoCD\", icon: \"🐙\" },\n { id: \"fluxcd\", label: \"FluxCD\", icon: \"🔄\" },\n { id: \"jenkinsx\", label: \"Jenkins X\", icon: \"🔧\" },\n // Service Mesh & Networking\n { id: \"istio\", label: \"Istio\", icon: \"🕸️\" },\n { id: \"linkerd\", label: \"Linkerd\", icon: \"🔗\" },\n { id: \"consul\", label: \"Consul\", icon: \"🔍\" },\n { id: \"envoy\", label: \"Envoy\", icon: \"📬\" },\n { id: \"nginx\", label: \"NGINX\", icon: \"🌐\" },\n { id: \"traefik\", label: \"Traefik\", icon: \"🚦\" },\n { id: \"caddy\", label: \"Caddy\", icon: \"🔒\" },\n { id: \"haproxy\", label: \"HAProxy\", icon: \"⚖️\" },\n // Observability & Monitoring\n { id: \"prometheus\", label: \"Prometheus\", icon: \"📊\" },\n { id: \"grafana\", label: \"Grafana\", icon: \"📈\" },\n { id: \"datadog\", label: \"Datadog\", icon: \"🐕\" },\n { id: \"newrelic\", label: \"New Relic\", icon: \"📊\" },\n { id: \"opentelemetry\", label: \"OpenTelemetry\", icon: \"🔭\" },\n { id: \"jaeger\", label: \"Jaeger\", icon: \"🔍\" },\n { id: \"zipkin\", label: \"Zipkin\", icon: \"🔍\" },\n { id: \"elk\", label: \"ELK Stack\", icon: \"📋\" },\n { id: \"loki\", label: \"Loki\", icon: \"📝\" },\n { id: \"fluentd\", label: \"Fluentd\", icon: \"📤\" },\n { id: \"fluentbit\", label: \"Fluent Bit\", icon: \"📤\" },\n { id: \"vector\", label: \"Vector\", icon: \"➡️\" },\n // Secrets & Security\n { id: \"vault\", label: \"HashiCorp Vault\", icon: \"🔐\" },\n { id: \"sops\", label: \"SOPS\", icon: \"🔒\" },\n { id: \"externalsecrets\", label: \"External Secrets\", icon: \"🔑\" },\n { id: \"sealedsecrets\", label: \"Sealed Secrets\", icon: \"📦\" },\n { id: \"trivy\", label: \"Trivy\", icon: \"🛡️\" },\n { id: \"snyk\", label: \"Snyk\", icon: \"🔍\" },\n { id: \"falco\", label: \"Falco\", icon: \"🦅\" },\n { id: \"opa\", label: \"Open Policy Agent\", icon: \"🛡️\" },\n { id: \"kyverno\", label: \"Kyverno\", icon: \"🛡️\" },\n // CI/CD Tools\n { id: \"jenkins\", label: \"Jenkins\", icon: \"🔧\" },\n { id: \"tekton\", label: \"Tekton\", icon: \"🔧\" },\n { id: \"drone\", label: \"Drone CI\", icon: \"🐝\" },\n { id: \"concourse\", label: \"Concourse\", icon: \"✈️\" },\n { id: \"spinnaker\", label: \"Spinnaker\", icon: \"🎡\" },\n // Message Queues\n { id: \"kafka\", label: \"Apache Kafka\", icon: \"📨\" },\n { id: \"rabbitmq\", label: \"RabbitMQ\", icon: \"🐰\" },\n { id: \"nats\", label: \"NATS\", icon: \"📬\" },\n { id: \"pulsar\", label: \"Apache Pulsar\", icon: \"⭐\" },\n { id: \"sqs\", label: \"AWS SQS\", icon: \"📬\" },\n // ML/AI Ops\n { id: \"mlflow\", label: \"MLflow\", icon: \"🧪\" },\n { id: \"kubeflow\", label: \"Kubeflow\", icon: \"☸️\" },\n { id: \"airflow\", label: \"Apache Airflow\", icon: \"🌬️\" },\n { id: \"dagster\", label: \"Dagster\", icon: \"📊\" },\n { id: \"prefect\", label: \"Prefect\", icon: \"🔄\" },\n { id: \"ray\", label: \"Ray\", icon: \"☀️\" },\n // Serverless\n { id: \"serverless\", label: \"Serverless Framework\", icon: \"⚡\" },\n { id: \"sam\", label: \"AWS SAM\", icon: \"☁️\" },\n { id: \"openfaas\", label: \"OpenFaaS\", icon: \"λ\" },\n { id: \"knative\", label: \"Knative\", icon: \"☸️\" },\n // State Management\n { id: \"redux\", label: \"Redux\", icon: \"🔄\" },\n { id: \"zustand\", label: \"Zustand\", icon: \"🐻\" },\n { id: \"tanstack\", label: \"TanStack Query\", icon: \"🔮\" },\n // Additional UI\n { id: \"mui\", label: \"Material UI\", icon: \"🎨\" },\n { id: \"antdesign\", label: \"Ant Design\", icon: \"🐜\" },\n];\n/**\n * Get framework IDs for filtering\n */\nexport const FRAMEWORK_IDS = FRAMEWORKS.map(f => f.id);\n","/**\n * All supported databases\n * This is the single source of truth - both CLI and WebUI import from here\n */\nexport const DATABASES = [\n // === OPEN SOURCE RELATIONAL ===\n { id: \"postgresql\", label: \"PostgreSQL\", icon: \"🐘\", category: \"opensource\" },\n { id: \"mysql\", label: \"MySQL\", icon: \"🐬\", category: \"opensource\" },\n { id: \"mariadb\", label: \"MariaDB\", icon: \"🦭\", category: \"opensource\" },\n { id: \"sqlite\", label: \"SQLite\", icon: \"📦\", category: \"opensource\" },\n { id: \"cockroachdb\", label: \"CockroachDB\", icon: \"🪳\", category: \"opensource\" },\n { id: \"yugabytedb\", label: \"YugabyteDB\", icon: \"🔵\", category: \"opensource\" },\n { id: \"tidb\", label: \"TiDB\", icon: \"⚡\", category: \"opensource\" },\n { id: \"vitess\", label: \"Vitess\", icon: \"🟢\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Document ===\n { id: \"mongodb\", label: \"MongoDB\", icon: \"🍃\", category: \"opensource\" },\n { id: \"couchdb\", label: \"CouchDB\", icon: \"🛋️\", category: \"opensource\" },\n { id: \"arangodb\", label: \"ArangoDB\", icon: \"🥑\", category: \"opensource\" },\n { id: \"ferretdb\", label: \"FerretDB\", icon: \"🐻\", category: \"opensource\" },\n { id: \"pouchdb\", label: \"PouchDB\", icon: \"📱\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Key-Value ===\n { id: \"redis\", label: \"Redis\", icon: \"🔴\", category: \"opensource\" },\n { id: \"valkey\", label: \"Valkey\", icon: \"🔑\", category: \"opensource\" },\n { id: \"keydb\", label: \"KeyDB\", icon: \"🗝️\", category: \"opensource\" },\n { id: \"dragonfly\", label: \"Dragonfly\", icon: \"🐉\", category: \"opensource\" },\n { id: \"memcached\", label: \"Memcached\", icon: \"💾\", category: \"opensource\" },\n { id: \"etcd\", label: \"etcd\", icon: \"🔧\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Wide Column ===\n { id: \"cassandra\", label: \"Apache Cassandra\", icon: \"👁️\", category: \"opensource\" },\n { id: \"scylladb\", label: \"ScyllaDB\", icon: \"🦂\", category: \"opensource\" },\n { id: \"hbase\", label: \"Apache HBase\", icon: \"🐘\", category: \"opensource\" },\n // === OPEN SOURCE NOSQL - Graph ===\n { id: \"neo4j\", label: \"Neo4j\", icon: \"🔗\", category: \"opensource\" },\n { id: \"dgraph\", label: \"Dgraph\", icon: \"📊\", category: \"opensource\" },\n { id: \"janusgraph\", label: \"JanusGraph\", icon: \"🪐\", category: \"opensource\" },\n { id: \"agensgraph\", label: \"AgensGraph\", icon: \"🌐\", category: \"opensource\" },\n // === OPEN SOURCE - Time Series ===\n { id: \"timescaledb\", label: \"TimescaleDB\", icon: \"⏱️\", category: \"opensource\" },\n { id: \"influxdb\", label: \"InfluxDB\", icon: \"📈\", category: \"opensource\" },\n { id: \"questdb\", label: \"QuestDB\", icon: \"🏎️\", category: \"opensource\" },\n { id: \"victoriametrics\", label: \"VictoriaMetrics\", icon: \"📊\", category: \"opensource\" },\n { id: \"prometheus\", label: \"Prometheus\", icon: \"🔥\", category: \"opensource\" },\n // === OPEN SOURCE - Analytics/OLAP ===\n { id: \"clickhouse\", label: \"ClickHouse\", icon: \"🏠\", category: \"opensource\" },\n { id: \"apache_druid\", label: \"Apache Druid\", icon: \"🧙\", category: \"opensource\" },\n { id: \"apache_pinot\", label: \"Apache Pinot\", icon: \"🎯\", category: \"opensource\" },\n { id: \"duckdb\", label: \"DuckDB\", icon: \"🦆\", category: \"opensource\" },\n { id: \"starrocks\", label: \"StarRocks\", icon: \"⭐\", category: \"opensource\" },\n // === OPEN SOURCE - Search ===\n { id: \"elasticsearch\", label: \"Elasticsearch\", icon: \"🔍\", category: \"opensource\" },\n { id: \"opensearch\", label: \"OpenSearch\", icon: \"🔎\", category: \"opensource\" },\n { id: \"meilisearch\", label: \"Meilisearch\", icon: \"⚡\", category: \"opensource\" },\n { id: \"typesense\", label: \"Typesense\", icon: \"🔤\", category: \"opensource\" },\n { id: \"solr\", label: \"Apache Solr\", icon: \"☀️\", category: \"opensource\" },\n { id: \"zinc\", label: \"Zinc\", icon: \"🔬\", category: \"opensource\" },\n // === OPEN SOURCE - Vector/AI ===\n { id: \"milvus\", label: \"Milvus\", icon: \"🧠\", category: \"opensource\" },\n { id: \"weaviate\", label: \"Weaviate\", icon: \"🕸️\", category: \"opensource\" },\n { id: \"qdrant\", label: \"Qdrant\", icon: \"🎯\", category: \"opensource\" },\n { id: \"chroma\", label: \"Chroma\", icon: \"🎨\", category: \"opensource\" },\n { id: \"pgvector\", label: \"pgvector\", icon: \"🐘\", category: \"opensource\" },\n // === OPEN SOURCE - Message Queues (often used as DBs) ===\n { id: \"kafka\", label: \"Apache Kafka\", icon: \"📨\", category: \"opensource\" },\n { id: \"rabbitmq\", label: \"RabbitMQ\", icon: \"🐰\", category: \"opensource\" },\n { id: \"nats\", label: \"NATS\", icon: \"📬\", category: \"opensource\" },\n { id: \"pulsar\", label: \"Apache Pulsar\", icon: \"💫\", category: \"opensource\" },\n { id: \"redpanda\", label: \"Redpanda\", icon: \"🐼\", category: \"opensource\" },\n // === OPEN SOURCE - Embedded/Edge ===\n { id: \"leveldb\", label: \"LevelDB\", icon: \"📚\", category: \"opensource\" },\n { id: \"rocksdb\", label: \"RocksDB\", icon: \"🪨\", category: \"opensource\" },\n { id: \"badger\", label: \"Badger\", icon: \"🦡\", category: \"opensource\" },\n { id: \"surrealdb\", label: \"SurrealDB\", icon: \"🌊\", category: \"opensource\" },\n { id: \"rqlite\", label: \"rqlite\", icon: \"📡\", category: \"opensource\" },\n // === CLOUD MANAGED - AWS ===\n { id: \"aws_rds\", label: \"AWS RDS\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_aurora\", label: \"AWS Aurora\", icon: \"🌅\", category: \"cloud\" },\n { id: \"aws_dynamodb\", label: \"AWS DynamoDB\", icon: \"⚡\", category: \"cloud\" },\n { id: \"aws_redshift\", label: \"AWS Redshift\", icon: \"📊\", category: \"cloud\" },\n { id: \"aws_neptune\", label: \"AWS Neptune\", icon: \"🔱\", category: \"cloud\" },\n { id: \"aws_timestream\", label: \"AWS Timestream\", icon: \"⏰\", category: \"cloud\" },\n { id: \"aws_documentdb\", label: \"AWS DocumentDB\", icon: \"📄\", category: \"cloud\" },\n { id: \"aws_elasticache\", label: \"AWS ElastiCache\", icon: \"💨\", category: \"cloud\" },\n { id: \"aws_memorydb\", label: \"AWS MemoryDB\", icon: \"🧠\", category: \"cloud\" },\n // === CLOUD MANAGED - GCP ===\n { id: \"gcp_cloudsql\", label: \"GCP Cloud SQL\", icon: \"☁️\", category: \"cloud\" },\n { id: \"gcp_spanner\", label: \"GCP Cloud Spanner\", icon: \"🌐\", category: \"cloud\" },\n { id: \"gcp_firestore\", label: \"GCP Firestore\", icon: \"🔥\", category: \"cloud\" },\n { id: \"gcp_bigtable\", label: \"GCP Bigtable\", icon: \"📊\", category: \"cloud\" },\n { id: \"gcp_bigquery\", label: \"GCP BigQuery\", icon: \"📈\", category: \"cloud\" },\n { id: \"gcp_memorystore\", label: \"GCP Memorystore\", icon: \"💾\", category: \"cloud\" },\n // === CLOUD MANAGED - Azure ===\n { id: \"azure_sql\", label: \"Azure SQL\", icon: \"☁️\", category: \"cloud\" },\n { id: \"azure_cosmosdb\", label: \"Azure Cosmos DB\", icon: \"🌌\", category: \"cloud\" },\n { id: \"azure_synapse\", label: \"Azure Synapse\", icon: \"📊\", category: \"cloud\" },\n { id: \"azure_cache\", label: \"Azure Cache\", icon: \"💨\", category: \"cloud\" },\n // === CLOUD MANAGED - Other ===\n { id: \"supabase\", label: \"Supabase\", icon: \"⚡\", category: \"cloud\" },\n { id: \"firebase\", label: \"Firebase\", icon: \"🔥\", category: \"cloud\" },\n { id: \"planetscale\", label: \"PlanetScale\", icon: \"🪐\", category: \"cloud\" },\n { id: \"neon\", label: \"Neon\", icon: \"💡\", category: \"cloud\" },\n { id: \"turso\", label: \"Turso\", icon: \"🐦\", category: \"cloud\" },\n { id: \"xata\", label: \"Xata\", icon: \"⚡\", category: \"cloud\" },\n { id: \"upstash\", label: \"Upstash\", icon: \"🚀\", category: \"cloud\" },\n { id: \"fauna\", label: \"Fauna\", icon: \"🦎\", category: \"cloud\" },\n { id: \"mongodb_atlas\", label: \"MongoDB Atlas\", icon: \"🍃\", category: \"cloud\" },\n { id: \"datastax_astra\", label: \"DataStax Astra\", icon: \"✨\", category: \"cloud\" },\n { id: \"cockroach_cloud\", label: \"CockroachDB Cloud\", icon: \"🪳\", category: \"cloud\" },\n { id: \"timescale_cloud\", label: \"Timescale Cloud\", icon: \"⏱️\", category: \"cloud\" },\n { id: \"influx_cloud\", label: \"InfluxDB Cloud\", icon: \"📈\", category: \"cloud\" },\n { id: \"elastic_cloud\", label: \"Elastic Cloud\", icon: \"🔍\", category: \"cloud\" },\n { id: \"algolia\", label: \"Algolia\", icon: \"🔎\", category: \"cloud\" },\n { id: \"pinecone\", label: \"Pinecone\", icon: \"🌲\", category: \"cloud\" },\n // === PROPRIETARY ===\n { id: \"oracle\", label: \"Oracle Database\", icon: \"🔶\", category: \"proprietary\" },\n { id: \"mssql\", label: \"Microsoft SQL Server\", icon: \"🟦\", category: \"proprietary\" },\n { id: \"db2\", label: \"IBM Db2\", icon: \"🔷\", category: \"proprietary\" },\n { id: \"teradata\", label: \"Teradata\", icon: \"🟠\", category: \"proprietary\" },\n { id: \"sap_hana\", label: \"SAP HANA\", icon: \"🔵\", category: \"proprietary\" },\n { id: \"informix\", label: \"IBM Informix\", icon: \"📊\", category: \"proprietary\" },\n { id: \"sybase\", label: \"SAP ASE (Sybase)\", icon: \"🔷\", category: \"proprietary\" },\n { id: \"singlestore\", label: \"SingleStore\", icon: \"⚡\", category: \"proprietary\" },\n { id: \"marklogic\", label: \"MarkLogic\", icon: \"📁\", category: \"proprietary\" },\n { id: \"intersystems_cache\", label: \"InterSystems Caché\", icon: \"💎\", category: \"proprietary\" },\n];\n/**\n * Get database IDs for filtering\n */\nexport const DATABASE_IDS = DATABASES.map(d => d.id);\n/**\n * Get databases by category\n */\nexport const getDatabasesByCategory = (category) => DATABASES.filter(d => d.category === category);\n","/**\n * Package managers (JS/TS only)\n */\nexport const PACKAGE_MANAGERS = [\n { id: \"npm\", label: \"npm\", icon: \"📦\", description: \"Node Package Manager (default)\" },\n { id: \"yarn\", label: \"Yarn\", icon: \"🧶\", description: \"Fast, reliable, and secure\" },\n { id: \"pnpm\", label: \"pnpm\", icon: \"📀\", description: \"Fast, disk space efficient\" },\n { id: \"bun\", label: \"Bun\", icon: \"🥟\", description: \"All-in-one JS runtime + PM\" },\n];\n/**\n * Monorepo tools (JS/TS only)\n */\nexport const MONOREPO_TOOLS = [\n { id: \"\", label: \"None\", icon: \"📁\", description: \"Single package repository\" },\n { id: \"turborepo\", label: \"Turborepo\", icon: \"⚡\", description: \"High-performance build system\" },\n { id: \"nx\", label: \"Nx\", icon: \"🔷\", description: \"Smart, extensible build framework\" },\n { id: \"lerna\", label: \"Lerna\", icon: \"🐉\", description: \"Multi-package repositories\" },\n { id: \"pnpm_workspaces\", label: \"pnpm Workspaces\", icon: \"📀\", description: \"Native pnpm monorepo\" },\n { id: \"yarn_workspaces\", label: \"Yarn Workspaces\", icon: \"🧶\", description: \"Native Yarn monorepo\" },\n { id: \"npm_workspaces\", label: \"npm Workspaces\", icon: \"📦\", description: \"Native npm monorepo\" },\n { id: \"rush\", label: \"Rush\", icon: \"🚀\", description: \"Microsoft's scalable monorepo\" },\n { id: \"moon\", label: \"moon\", icon: \"🌙\", description: \"Repository management tool\" },\n];\n/**\n * JS/TS runtimes\n */\nexport const JS_RUNTIMES = [\n { id: \"node\", label: \"Node.js\", icon: \"🟢\", description: \"Standard JavaScript runtime\" },\n { id: \"deno\", label: \"Deno\", icon: \"🦕\", description: \"Secure runtime with TypeScript\" },\n { id: \"bun\", label: \"Bun\", icon: \"🥟\", description: \"Fast all-in-one JS runtime\" },\n];\n/**\n * ORMs and Database tools\n */\nexport const ORM_OPTIONS = [\n { id: \"\", label: \"None / Raw SQL\", icon: \"📝\" },\n // JavaScript/TypeScript\n { id: \"prisma\", label: \"Prisma\", icon: \"🔷\", languages: [\"typescript\", \"javascript\"] },\n { id: \"drizzle\", label: \"Drizzle\", icon: \"💧\", languages: [\"typescript\", \"javascript\"] },\n { id: \"typeorm\", label: \"TypeORM\", icon: \"🔶\", languages: [\"typescript\", \"javascript\"] },\n { id: \"sequelize\", label: \"Sequelize\", icon: \"📘\", languages: [\"typescript\", \"javascript\"] },\n { id: \"knex\", label: \"Knex.js\", icon: \"🔧\", languages: [\"typescript\", \"javascript\"] },\n { id: \"kysely\", label: \"Kysely\", icon: \"🎯\", languages: [\"typescript\", \"javascript\"] },\n { id: \"mikro-orm\", label: \"MikroORM\", icon: \"🔵\", languages: [\"typescript\", \"javascript\"] },\n { id: \"objection\", label: \"Objection.js\", icon: \"📊\", languages: [\"typescript\", \"javascript\"] },\n // Python\n { id: \"sqlalchemy\", label: \"SQLAlchemy\", icon: \"🐍\", languages: [\"python\"] },\n { id: \"django_orm\", label: \"Django ORM\", icon: \"🎸\", languages: [\"python\"] },\n { id: \"tortoise\", label: \"Tortoise ORM\", icon: \"🐢\", languages: [\"python\"] },\n { id: \"sqlmodel\", label: \"SQLModel\", icon: \"⚡\", languages: [\"python\"] },\n { id: \"peewee\", label: \"Peewee\", icon: \"🐦\", languages: [\"python\"] },\n // Go\n { id: \"gorm\", label: \"GORM\", icon: \"🐹\", languages: [\"go\"] },\n { id: \"ent\", label: \"Ent\", icon: \"🏗️\", languages: [\"go\"] },\n { id: \"sqlc\", label: \"sqlc\", icon: \"📝\", languages: [\"go\"] },\n { id: \"bun_go\", label: \"Bun (Go)\", icon: \"🥟\", languages: [\"go\"] },\n // Rust\n { id: \"diesel\", label: \"Diesel\", icon: \"🦀\", languages: [\"rust\"] },\n { id: \"sea-orm\", label: \"SeaORM\", icon: \"🌊\", languages: [\"rust\"] },\n { id: \"sqlx\", label: \"SQLx\", icon: \"📦\", languages: [\"rust\"] },\n // Java/Kotlin\n { id: \"hibernate\", label: \"Hibernate\", icon: \"☕\", languages: [\"java\", \"kotlin\"] },\n { id: \"jooq\", label: \"jOOQ\", icon: \"🎵\", languages: [\"java\", \"kotlin\"] },\n { id: \"exposed\", label: \"Exposed\", icon: \"🎨\", languages: [\"kotlin\"] },\n // .NET\n { id: \"ef_core\", label: \"Entity Framework\", icon: \"🔷\", languages: [\"csharp\"] },\n { id: \"dapper\", label: \"Dapper\", icon: \"⚡\", languages: [\"csharp\"] },\n // Ruby\n { id: \"activerecord\", label: \"ActiveRecord\", icon: \"💎\", languages: [\"ruby\"] },\n { id: \"sequel\", label: \"Sequel\", icon: \"📚\", languages: [\"ruby\"] },\n // PHP\n { id: \"eloquent\", label: \"Eloquent\", icon: \"🐘\", languages: [\"php\"] },\n { id: \"doctrine\", label: \"Doctrine\", icon: \"📖\", languages: [\"php\"] },\n];\n/**\n * Get ORMs filtered by language\n */\nexport const getOrmsByLanguage = (languages) => ORM_OPTIONS.filter(o => !o.languages || o.languages.some(l => languages.includes(l)));\n","/**\n * Project types\n */\nexport const PROJECT_TYPES = [\n { id: \"web_frontend\", label: \"Web Frontend\", icon: \"🌐\", description: \"React, Vue, Angular, etc.\" },\n { id: \"web_fullstack\", label: \"Full-stack Web\", icon: \"🖥️\", description: \"Next.js, Nuxt, SvelteKit, etc.\" },\n { id: \"api_backend\", label: \"API / Backend\", icon: \"⚙️\", description: \"REST, GraphQL, gRPC services\" },\n { id: \"cli_tool\", label: \"CLI Tool\", icon: \"💻\", description: \"Command-line applications\" },\n { id: \"library\", label: \"Library / Package\", icon: \"📦\", description: \"Reusable npm/pip/cargo package\" },\n { id: \"mobile\", label: \"Mobile App\", icon: \"📱\", description: \"React Native, Flutter, native\" },\n { id: \"desktop\", label: \"Desktop App\", icon: \"🖥️\", description: \"Electron, Tauri, native\" },\n { id: \"microservice\", label: \"Microservice\", icon: \"🔧\", description: \"Single-purpose service\" },\n { id: \"monolith\", label: \"Monolith\", icon: \"🏢\", description: \"All-in-one application\" },\n { id: \"data_science\", label: \"Data Science\", icon: \"📊\", description: \"ML, analytics, notebooks\" },\n { id: \"devops\", label: \"DevOps / IaC\", icon: \"🔄\", description: \"Terraform, Ansible, K8s manifests\" },\n { id: \"game\", label: \"Game\", icon: \"🎮\", description: \"Unity, Godot, web games\" },\n { id: \"embedded\", label: \"Embedded / IoT\", icon: \"🔌\", description: \"Firmware, hardware control\" },\n { id: \"blockchain\", label: \"Blockchain / Web3\", icon: \"⛓️\", description: \"Smart contracts, dApps\" },\n { id: \"other\", label: \"Other\", icon: \"📁\", description: \"Custom project type\" },\n];\n/**\n * Architecture patterns\n */\nexport const ARCHITECTURE_PATTERNS = [\n { id: \"mvc\", label: \"MVC\", description: \"Model-View-Controller\" },\n { id: \"mvvm\", label: \"MVVM\", description: \"Model-View-ViewModel\" },\n { id: \"clean\", label: \"Clean Architecture\", description: \"Dependency rule, use cases\" },\n { id: \"hexagonal\", label: \"Hexagonal / Ports & Adapters\", description: \"Domain-centric, pluggable\" },\n { id: \"ddd\", label: \"Domain-Driven Design\", description: \"Bounded contexts, aggregates\" },\n { id: \"microservices\", label: \"Microservices\", description: \"Distributed services\" },\n { id: \"multi_image_docker\", label: \"Multi-Image Docker\", description: \"Shared codebase, multiple container images\" },\n { id: \"serverless\", label: \"Serverless\", description: \"FaaS, event-driven\" },\n { id: \"event_driven\", label: \"Event-Driven\", description: \"Event sourcing, CQRS\" },\n { id: \"modular_monolith\", label: \"Modular Monolith\", description: \"Organized monolith\" },\n { id: \"layered\", label: \"Layered / N-Tier\", description: \"Presentation, business, data\" },\n { id: \"component_based\", label: \"Component-Based\", description: \"React, Vue components\" },\n { id: \"plugin\", label: \"Plugin Architecture\", description: \"Extensible core + plugins\" },\n { id: \"other\", label: \"Other\", description: \"Custom architecture\" },\n];\n/**\n * Development OS options\n */\nexport const DEV_OS_OPTIONS = [\n { id: \"macos\", label: \"macOS\", icon: \"🍎\" },\n { id: \"linux\", label: \"Linux\", icon: \"🐧\" },\n { id: \"windows\", label: \"Windows\", icon: \"🪟\" },\n { id: \"wsl\", label: \"WSL\", icon: \"🐧\" },\n];\n","/**\n * Repository hosts\n */\nexport const REPO_HOSTS = [\n { id: \"github\", label: \"GitHub\", icon: \"🐙\" },\n { id: \"gitlab\", label: \"GitLab\", icon: \"🦊\" },\n { id: \"gitea\", label: \"Gitea\", icon: \"🍵\" },\n { id: \"forgejo\", label: \"Forgejo\", icon: \"🔧\" },\n { id: \"bitbucket\", label: \"Bitbucket\", icon: \"🪣\" },\n { id: \"codeberg\", label: \"Codeberg\", icon: \"🏔️\" },\n { id: \"sourcehut\", label: \"SourceHut\", icon: \"📦\" },\n { id: \"gogs\", label: \"Gogs\", icon: \"🐙\" },\n { id: \"aws_codecommit\", label: \"AWS CodeCommit\", icon: \"☁️\" },\n { id: \"azure_devops\", label: \"Azure DevOps\", icon: \"☁️\" },\n { id: \"gerrit\", label: \"Gerrit\", icon: \"🔍\" },\n { id: \"phabricator\", label: \"Phabricator\", icon: \"📦\" },\n { id: \"other\", label: \"Other\", icon: \"📦\" },\n];\n/**\n * CI/CD options\n */\nexport const CICD_OPTIONS = [\n { id: \"github_actions\", label: \"GitHub Actions\", icon: \"🐙\" },\n { id: \"gitlab_ci\", label: \"GitLab CI/CD\", icon: \"🦊\" },\n { id: \"jenkins\", label: \"Jenkins\", icon: \"🔧\" },\n { id: \"circleci\", label: \"CircleCI\", icon: \"🔵\" },\n { id: \"travis\", label: \"Travis CI\", icon: \"🔨\" },\n { id: \"azure_pipelines\", label: \"Azure Pipelines\", icon: \"☁️\" },\n { id: \"aws_codepipeline\", label: \"AWS CodePipeline\", icon: \"☁️\" },\n { id: \"gcp_cloudbuild\", label: \"GCP Cloud Build\", icon: \"☁️\" },\n { id: \"bitbucket_pipelines\", label: \"Bitbucket Pipelines\", icon: \"🪣\" },\n { id: \"teamcity\", label: \"TeamCity\", icon: \"🏢\" },\n { id: \"drone\", label: \"Drone CI\", icon: \"🚁\" },\n { id: \"buildkite\", label: \"Buildkite\", icon: \"🧱\" },\n { id: \"concourse\", label: \"Concourse CI\", icon: \"✈️\" },\n { id: \"woodpecker\", label: \"Woodpecker CI\", icon: \"🐦\" },\n { id: \"dagger\", label: \"Dagger\", icon: \"🗡️\" },\n { id: \"earthly\", label: \"Earthly\", icon: \"🌍\" },\n];\n/**\n * Licenses\n */\nexport const LICENSES = [\n { id: \"mit\", label: \"MIT\", description: \"Permissive, simple\" },\n { id: \"apache-2.0\", label: \"Apache 2.0\", description: \"Permissive with patent grant\" },\n { id: \"gpl-3.0\", label: \"GPL 3.0\", description: \"Strong copyleft\" },\n { id: \"lgpl-3.0\", label: \"LGPL 3.0\", description: \"Weak copyleft\" },\n { id: \"agpl-3.0\", label: \"AGPL 3.0\", description: \"Network copyleft\" },\n { id: \"bsd-2\", label: \"BSD 2-Clause\", description: \"Permissive, simple\" },\n { id: \"bsd-3\", label: \"BSD 3-Clause\", description: \"Permissive, no endorsement\" },\n { id: \"mpl-2.0\", label: \"MPL 2.0\", description: \"File-level copyleft\" },\n { id: \"isc\", label: \"ISC\", description: \"Simple permissive\" },\n { id: \"unlicense\", label: \"Unlicense\", description: \"Public domain\" },\n { id: \"cc0\", label: \"CC0\", description: \"Public domain\" },\n { id: \"none\", label: \"None / Proprietary\", description: \"All rights reserved\" },\n { id: \"other\", label: \"Other\", description: \"Custom license\" },\n];\n/**\n * Branch strategies\n */\nexport const BRANCH_STRATEGIES = [\n { id: \"none\", label: \"None (toy project)\", icon: \"🎮\", description: \"No branching, commit directly to main\" },\n { id: \"github_flow\", label: \"GitHub Flow\", icon: \"🌊\", description: \"Simple: main + feature branches\" },\n { id: \"gitflow\", label: \"Gitflow\", icon: \"🌳\", description: \"develop, feature, release, hotfix branches\" },\n { id: \"trunk_based\", label: \"Trunk-Based\", icon: \"🚂\", description: \"Short-lived branches, continuous integration\" },\n { id: \"gitlab_flow\", label: \"GitLab Flow\", icon: \"🦊\", description: \"Environment branches (staging, production)\" },\n { id: \"release_flow\", label: \"Release Flow\", icon: \"🚀\", description: \"Microsoft style: main + release branches\" },\n];\n/**\n * Default branch names\n */\nexport const DEFAULT_BRANCHES = [\n { id: \"main\", label: \"main\" },\n { id: \"master\", label: \"master\" },\n { id: \"develop\", label: \"develop\" },\n { id: \"trunk\", label: \"trunk\" },\n { id: \"other\", label: \"Other\" },\n];\n/**\n * Self-hosted deployment targets\n */\nexport const SELF_HOSTED_TARGETS = [\n { id: \"docker\", label: \"Docker\", icon: \"🐳\", category: \"self_hosted\" },\n { id: \"docker_compose\", label: \"Docker Compose\", icon: \"🐳\", category: \"self_hosted\" },\n { id: \"kubernetes\", label: \"Kubernetes\", icon: \"☸️\", category: \"self_hosted\" },\n { id: \"podman\", label: \"Podman\", icon: \"🦭\", category: \"self_hosted\" },\n { id: \"lxc\", label: \"LXC/LXD\", icon: \"📦\", category: \"self_hosted\" },\n { id: \"bare_metal\", label: \"Bare Metal\", icon: \"🖥️\", category: \"self_hosted\" },\n { id: \"vm\", label: \"Virtual Machine\", icon: \"💻\", category: \"self_hosted\" },\n { id: \"proxmox\", label: \"Proxmox\", icon: \"🔷\", category: \"self_hosted\" },\n { id: \"unraid\", label: \"Unraid\", icon: \"🟠\", category: \"self_hosted\" },\n { id: \"truenas\", label: \"TrueNAS\", icon: \"🔵\", category: \"self_hosted\" },\n { id: \"synology\", label: \"Synology NAS\", icon: \"📁\", category: \"self_hosted\" },\n { id: \"coolify\", label: \"Coolify\", icon: \"❄️\", category: \"self_hosted\" },\n { id: \"dokku\", label: \"Dokku\", icon: \"🐳\", category: \"self_hosted\" },\n { id: \"caprover\", label: \"CapRover\", icon: \"🚢\", category: \"self_hosted\" },\n { id: \"portainer\", label: \"Portainer\", icon: \"🐋\", category: \"self_hosted\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\", category: \"self_hosted\" },\n { id: \"k3s\", label: \"K3s\", icon: \"☸️\", category: \"self_hosted\" },\n { id: \"microk8s\", label: \"MicroK8s\", icon: \"☸️\", category: \"self_hosted\" },\n { id: \"nomad\", label: \"Nomad\", icon: \"🏕️\", category: \"self_hosted\" },\n];\n/**\n * Cloud deployment targets\n */\nexport const CLOUD_TARGETS = [\n { id: \"vercel\", label: \"Vercel\", icon: \"▲\", category: \"cloud\" },\n { id: \"netlify\", label: \"Netlify\", icon: \"🌐\", category: \"cloud\" },\n { id: \"cloudflare_pages\", label: \"Cloudflare Pages\", icon: \"🔶\", category: \"cloud\" },\n { id: \"cloudflare_workers\", label: \"Cloudflare Workers\", icon: \"🔶\", category: \"cloud\" },\n { id: \"aws_lambda\", label: \"AWS Lambda\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_ecs\", label: \"AWS ECS\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_eks\", label: \"AWS EKS\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_ec2\", label: \"AWS EC2\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_lightsail\", label: \"AWS Lightsail\", icon: \"☁️\", category: \"cloud\" },\n { id: \"aws_amplify\", label: \"AWS Amplify\", icon: \"☁️\", category: \"cloud\" },\n { id: \"gcp_cloudrun\", label: \"GCP Cloud Run\", icon: \"🌈\", category: \"cloud\" },\n { id: \"gcp_gke\", label: \"GCP GKE\", icon: \"🌈\", category: \"cloud\" },\n { id: \"gcp_appengine\", label: \"GCP App Engine\", icon: \"🌈\", category: \"cloud\" },\n { id: \"gcp_functions\", label: \"GCP Cloud Functions\", icon: \"🌈\", category: \"cloud\" },\n { id: \"azure_functions\", label: \"Azure Functions\", icon: \"🔷\", category: \"cloud\" },\n { id: \"azure_aks\", label: \"Azure AKS\", icon: \"🔷\", category: \"cloud\" },\n { id: \"azure_container\", label: \"Azure Container Apps\", icon: \"🔷\", category: \"cloud\" },\n { id: \"azure_appservice\", label: \"Azure App Service\", icon: \"🔷\", category: \"cloud\" },\n { id: \"railway\", label: \"Railway\", icon: \"🚂\", category: \"cloud\" },\n { id: \"render\", label: \"Render\", icon: \"🎨\", category: \"cloud\" },\n { id: \"fly\", label: \"Fly.io\", icon: \"✈️\", category: \"cloud\" },\n { id: \"digitalocean_app\", label: \"DigitalOcean App Platform\", icon: \"🔵\", category: \"cloud\" },\n { id: \"digitalocean_droplet\", label: \"DigitalOcean Droplet\", icon: \"🔵\", category: \"cloud\" },\n { id: \"heroku\", label: \"Heroku\", icon: \"🟣\", category: \"cloud\" },\n { id: \"deno_deploy\", label: \"Deno Deploy\", icon: \"🦕\", category: \"cloud\" },\n { id: \"supabase_edge\", label: \"Supabase Edge Functions\", icon: \"⚡\", category: \"cloud\" },\n];\n/**\n * All deployment targets\n */\nexport const DEPLOYMENT_TARGETS = [...SELF_HOSTED_TARGETS, ...CLOUD_TARGETS];\n/**\n * Container registries\n */\nexport const CONTAINER_REGISTRIES = [\n { id: \"dockerhub\", label: \"Docker Hub\", icon: \"🐳\" },\n { id: \"ghcr\", label: \"GitHub Container Registry\", icon: \"🐙\" },\n { id: \"gcr\", label: \"Google Container Registry\", icon: \"🌈\" },\n { id: \"ecr\", label: \"AWS ECR\", icon: \"☁️\" },\n { id: \"acr\", label: \"Azure Container Registry\", icon: \"🔷\" },\n { id: \"quay\", label: \"Quay.io\", icon: \"🔴\" },\n { id: \"gitlab_registry\", label: \"GitLab Container Registry\", icon: \"🦊\" },\n { id: \"harbor\", label: \"Harbor\", icon: \"🚢\" },\n { id: \"self_hosted\", label: \"Self-hosted Registry\", icon: \"🏠\" },\n];\n/**\n * Version tag formats (when semver is enabled)\n */\nexport const VERSION_TAG_FORMATS = [\n { id: \"v_prefix\", label: \"v*\", icon: \"🏷️\", description: \"e.g., v1.0.0\" },\n { id: \"no_prefix\", label: \"* (no prefix)\", icon: \"🏷️\", description: \"e.g., 1.0.0\" },\n { id: \"app_prefix\", label: \"app-v*\", icon: \"🏷️\", description: \"e.g., app-v1.0.0\" },\n { id: \"cli_prefix\", label: \"cli-v*\", icon: \"🏷️\", description: \"e.g., cli-v1.0.0\" },\n { id: \"monorepo\", label: \"package@version\", icon: \"🏷️\", description: \"e.g., @scope/pkg@1.0.0\" },\n { id: \"custom\", label: \"Custom format\", icon: \"🏷️\", description: \"Define your own tag format\" },\n];\n/**\n * Changelog generation tools/methods\n */\nexport const CHANGELOG_OPTIONS = [\n { id: \"manual\", label: \"Manual\", icon: \"✍️\", description: \"Write CHANGELOG.md manually\" },\n { id: \"conventional_changelog\", label: \"conventional-changelog\", icon: \"📝\", description: \"Auto-generate from commits\" },\n { id: \"release_please\", label: \"release-please\", icon: \"🤖\", description: \"Google's release automation\" },\n { id: \"semantic_release\", label: \"semantic-release\", icon: \"🚀\", description: \"Fully automated versioning\" },\n { id: \"changesets\", label: \"Changesets\", icon: \"📦\", description: \"Monorepo version management\" },\n { id: \"git_cliff\", label: \"git-cliff\", icon: \"🏔️\", description: \"Customizable changelog generator\" },\n { id: \"auto\", label: \"auto (Intuit)\", icon: \"⚡\", description: \"Automated releases based on labels\" },\n { id: \"standard_version\", label: \"standard-version\", icon: \"📋\", description: \"Automate versioning and CHANGELOG\" },\n { id: \"lerna_changelog\", label: \"lerna-changelog\", icon: \"🐉\", description: \"For Lerna monorepos\" },\n { id: \"keep_a_changelog\", label: \"Keep a Changelog\", icon: \"📖\", description: \"Manual following keepachangelog.com\" },\n { id: \"github_releases\", label: \"GitHub Releases\", icon: \"🐙\", description: \"Use GitHub release notes\" },\n { id: \"none\", label: \"None\", icon: \"❌\", description: \"No changelog\" },\n];\n/**\n * VPN / Network overlay solutions\n */\nexport const VPN_OPTIONS = [\n { id: \"tailscale\", label: \"Tailscale\", icon: \"🔗\", description: \"Zero-config mesh VPN\" },\n { id: \"headscale\", label: \"Headscale\", icon: \"🔗\", description: \"Self-hosted Tailscale control server\" },\n { id: \"wireguard\", label: \"WireGuard\", icon: \"🛡️\", description: \"Modern VPN protocol\" },\n { id: \"netbird\", label: \"NetBird\", icon: \"🐦\", description: \"Open-source network as code\" },\n { id: \"zerotier\", label: \"ZeroTier\", icon: \"🌐\", description: \"Global area networking\" },\n { id: \"nebula\", label: \"Nebula\", icon: \"🌌\", description: \"Slack's mesh networking tool\" },\n { id: \"innernet\", label: \"innernet\", icon: \"🔐\", description: \"WireGuard-based private network\" },\n { id: \"netmaker\", label: \"Netmaker\", icon: \"🕸️\", description: \"WireGuard automation platform\" },\n { id: \"firezone\", label: \"Firezone\", icon: \"🔥\", description: \"Self-hosted VPN server\" },\n { id: \"pritunl\", label: \"Pritunl\", icon: \"🔒\", description: \"Enterprise VPN server\" },\n { id: \"openvpn\", label: \"OpenVPN\", icon: \"🔓\", description: \"Classic open-source VPN\" },\n { id: \"cloudflare_tunnel\", label: \"Cloudflare Tunnel\", icon: \"🔶\", description: \"Expose services via Cloudflare\" },\n { id: \"ngrok\", label: \"ngrok\", icon: \"🚇\", description: \"Secure tunnels to localhost\" },\n { id: \"none\", label: \"None\", icon: \"❌\", description: \"No VPN/tunneling\" },\n];\n/**\n * GitOps / Infrastructure management tools\n */\nexport const GITOPS_TOOLS = [\n { id: \"portainer\", label: \"Portainer\", icon: \"🐋\", description: \"Docker/K8s management UI\" },\n { id: \"argocd\", label: \"ArgoCD\", icon: \"🐙\", description: \"GitOps continuous delivery for K8s\" },\n { id: \"fluxcd\", label: \"FluxCD\", icon: \"🔄\", description: \"GitOps toolkit for Kubernetes\" },\n { id: \"rancher\", label: \"Rancher\", icon: \"🐄\", description: \"Multi-cluster K8s management\" },\n { id: \"lens\", label: \"Lens\", icon: \"🔍\", description: \"Kubernetes IDE\" },\n { id: \"k9s\", label: \"k9s\", icon: \"🐕\", description: \"Terminal UI for K8s\" },\n { id: \"terraform\", label: \"Terraform\", icon: \"🏗️\", description: \"Infrastructure as Code\" },\n { id: \"pulumi\", label: \"Pulumi\", icon: \"☁️\", description: \"IaC with programming languages\" },\n { id: \"ansible\", label: \"Ansible\", icon: \"📜\", description: \"Automation and configuration\" },\n { id: \"chef\", label: \"Chef\", icon: \"👨‍🍳\", description: \"Configuration management\" },\n { id: \"puppet\", label: \"Puppet\", icon: \"🎭\", description: \"Infrastructure automation\" },\n { id: \"saltstack\", label: \"SaltStack\", icon: \"🧂\", description: \"Event-driven automation\" },\n { id: \"crossplane\", label: \"Crossplane\", icon: \"✖️\", description: \"Control plane for cloud infrastructure\" },\n { id: \"waypoint\", label: \"HashiCorp Waypoint\", icon: \"🧭\", description: \"Build, deploy, release\" },\n { id: \"spinnaker\", label: \"Spinnaker\", icon: \"🎡\", description: \"Multi-cloud continuous delivery\" },\n { id: \"none\", label: \"None\", icon: \"❌\", description: \"No GitOps tooling\" },\n];\n","/**\n * AI behavior rules\n */\nexport const AI_BEHAVIOR_RULES = [\n { id: \"always_debug_after_build\", label: \"Always Debug After Building\", description: \"Run and test locally after making changes\", recommended: true },\n { id: \"check_logs_after_build\", label: \"Check Logs After Build/Commit\", description: \"Check logs when build or commit finishes\", recommended: true },\n { id: \"run_tests_before_commit\", label: \"Run Tests Before Commit\", description: \"Ensure tests pass before committing\", recommended: true },\n { id: \"follow_existing_patterns\", label: \"Follow Existing Patterns\", description: \"Match the codebase's existing style\", recommended: true },\n { id: \"ask_before_large_refactors\", label: \"Ask Before Large Refactors\", description: \"Confirm before significant changes\", recommended: true },\n { id: \"prefer_small_commits\", label: \"Prefer Small Commits\", description: \"Make atomic, focused commits\" },\n { id: \"document_complex_logic\", label: \"Document Complex Logic\", description: \"Add comments for non-obvious code\" },\n { id: \"avoid_breaking_changes\", label: \"Avoid Breaking Changes\", description: \"Maintain backward compatibility\" },\n { id: \"use_conventional_commits\", label: \"Use Conventional Commits\", description: \"Follow commit message conventions\" },\n { id: \"prefer_composition\", label: \"Prefer Composition Over Inheritance\", description: \"Use composition patterns\" },\n];\n/**\n * Plan mode frequency - how often should the AI enter plan mode before implementing\n */\nexport const PLAN_MODE_FREQUENCY = [\n { id: \"always\", label: \"Always\", icon: \"🧠\", description: \"Plan before every task, even simple ones\" },\n { id: \"complex_tasks\", label: \"Complex Tasks Only\", icon: \"🎯\", description: \"Plan for multi-step or complex changes (recommended)\" },\n { id: \"multi_file\", label: \"Multi-file Changes\", icon: \"📁\", description: \"Plan when changes span multiple files\" },\n { id: \"new_features\", label: \"New Features\", icon: \"✨\", description: \"Plan only for new feature implementations\" },\n { id: \"on_request\", label: \"On Request\", icon: \"🙋\", description: \"Only plan when explicitly asked\" },\n { id: \"never\", label: \"Never\", icon: \"⚡\", description: \"Execute immediately without planning\" },\n];\n/**\n * Important files that AI should read first\n */\nexport const IMPORTANT_FILES = [\n { id: \"readme\", label: \"README.md\", icon: \"📄\", description: \"Project overview and setup\" },\n { id: \"contributing\", label: \"CONTRIBUTING.md\", icon: \"🤝\", description: \"Contribution guidelines\" },\n { id: \"architecture\", label: \"ARCHITECTURE.md\", icon: \"🏗️\", description: \"System design docs\" },\n { id: \"api_docs\", label: \"API Documentation\", icon: \"📚\", description: \"API reference\" },\n { id: \"changelog\", label: \"CHANGELOG.md\", icon: \"📝\", description: \"Version history\" },\n { id: \"agents\", label: \"AGENTS.md\", icon: \"🤖\", description: \"AI agent instructions\" },\n { id: \"package_json\", label: \"package.json\", icon: \"📦\", description: \"Project dependencies\" },\n { id: \"tsconfig\", label: \"tsconfig.json\", icon: \"📘\", description: \"TypeScript config\" },\n { id: \"env_example\", label: \".env.example\", icon: \"🔒\", description: \"Environment variables\" },\n { id: \"docker_compose\", label: \"docker-compose.yml\", icon: \"🐳\", description: \"Docker services\" },\n { id: \"makefile\", label: \"Makefile\", icon: \"🔧\", description: \"Build commands\" },\n { id: \"openapi\", label: \"openapi.yaml\", icon: \"📄\", description: \"OpenAPI spec\" },\n { id: \"prisma_schema\", label: \"prisma/schema.prisma\", icon: \"🔷\", description: \"Database schema\" },\n { id: \"other\", label: \"Other\", icon: \"📁\", description: \"Custom file\" },\n];\n","/**\n * Authentication Providers - specific OAuth/auth services\n * (Different from AUTH_PATTERNS which are the technical patterns)\n */\nexport const AUTH_PROVIDERS = [\n // Username/Password\n { id: \"username_password\", label: \"Simple user or Email & Password\", description: \"Traditional username/email + password login\", recommended: true },\n // OAuth Providers\n { id: \"github_oauth\", label: \"GitHub OAuth\", description: \"Sign in with GitHub\" },\n { id: \"google_oauth\", label: \"Google OAuth\", description: \"Sign in with Google\" },\n { id: \"microsoft_oauth\", label: \"Microsoft / Azure AD\", description: \"Sign in with Microsoft\" },\n { id: \"apple_oauth\", label: \"Apple Sign In\", description: \"Sign in with Apple\" },\n { id: \"facebook_oauth\", label: \"Facebook OAuth\", description: \"Sign in with Facebook\" },\n { id: \"twitter_oauth\", label: \"X (Twitter) OAuth\", description: \"Sign in with X/Twitter\" },\n { id: \"linkedin_oauth\", label: \"LinkedIn OAuth\", description: \"Sign in with LinkedIn\" },\n { id: \"discord_oauth\", label: \"Discord OAuth\", description: \"Sign in with Discord\" },\n { id: \"slack_oauth\", label: \"Slack OAuth\", description: \"Sign in with Slack\" },\n { id: \"gitlab_oauth\", label: \"GitLab OAuth\", description: \"Sign in with GitLab\" },\n { id: \"bitbucket_oauth\", label: \"Bitbucket OAuth\", description: \"Sign in with Bitbucket\" },\n { id: \"twitch_oauth\", label: \"Twitch OAuth\", description: \"Sign in with Twitch\" },\n { id: \"spotify_oauth\", label: \"Spotify OAuth\", description: \"Sign in with Spotify\" },\n // Passwordless\n { id: \"magic_link\", label: \"Magic Link (Email)\", description: \"Passwordless email login\" },\n { id: \"passkeys\", label: \"Passkeys / WebAuthn\", description: \"Biometric/hardware keys\" },\n { id: \"sms_otp\", label: \"SMS OTP\", description: \"Phone number verification\" },\n { id: \"email_otp\", label: \"Email OTP\", description: \"Email code verification\" },\n // Enterprise SSO\n { id: \"okta\", label: \"Okta\", description: \"Enterprise identity management\" },\n { id: \"auth0\", label: \"Auth0\", description: \"Identity platform\" },\n { id: \"keycloak\", label: \"Keycloak\", description: \"Open-source IAM\" },\n { id: \"cognito\", label: \"AWS Cognito\", description: \"AWS user pools\" },\n { id: \"firebase_auth\", label: \"Firebase Auth\", description: \"Google Firebase authentication\" },\n { id: \"supabase_auth\", label: \"Supabase Auth\", description: \"Supabase authentication\" },\n { id: \"clerk\", label: \"Clerk\", description: \"Modern auth for developers\" },\n { id: \"workos\", label: \"WorkOS\", description: \"Enterprise SSO & directory sync\" },\n { id: \"fusionauth\", label: \"FusionAuth\", description: \"Customer identity management\" },\n { id: \"authentik\", label: \"Authentik\", description: \"Open-source identity provider\" },\n { id: \"zitadel\", label: \"Zitadel\", description: \"Cloud-native identity management\" },\n // Other\n { id: \"ldap\", label: \"LDAP / Active Directory\", description: \"Directory service auth\" },\n { id: \"radius\", label: \"RADIUS\", description: \"Network access auth\" },\n { id: \"kerberos\", label: \"Kerberos\", description: \"Network authentication protocol\" },\n { id: \"other\", label: \"Other\", description: \"Custom auth provider\" },\n];\n/**\n * Secrets management strategies\n */\nexport const SECRETS_MANAGEMENT_OPTIONS = [\n { id: \"env_vars\", label: \"Environment Variables\", description: \"Use .env files locally, env vars in prod\", recommended: true },\n { id: \"dotenv\", label: \"dotenv / dotenvx\", description: \"Load .env files with dotenv library\" },\n { id: \"vault\", label: \"HashiCorp Vault\", description: \"Enterprise secrets management\" },\n { id: \"aws_secrets\", label: \"AWS Secrets Manager\", description: \"AWS native secrets storage\" },\n { id: \"aws_ssm\", label: \"AWS SSM Parameter Store\", description: \"AWS Systems Manager parameters\" },\n { id: \"gcp_secrets\", label: \"GCP Secret Manager\", description: \"Google Cloud secrets storage\" },\n { id: \"azure_keyvault\", label: \"Azure Key Vault\", description: \"Azure secrets and keys\" },\n { id: \"infisical\", label: \"Infisical\", description: \"Open-source secrets management\" },\n { id: \"doppler\", label: \"Doppler\", description: \"Universal secrets platform\" },\n { id: \"1password\", label: \"1Password Secrets Automation\", description: \"1Password for teams/CI\" },\n { id: \"bitwarden\", label: \"Bitwarden Secrets Manager\", description: \"Bitwarden for secrets\" },\n { id: \"sops\", label: \"SOPS (Mozilla)\", description: \"Encrypted files with KMS\" },\n { id: \"age\", label: \"age encryption\", description: \"Simple file encryption\" },\n { id: \"sealed_secrets\", label: \"Sealed Secrets (K8s)\", description: \"Kubernetes encrypted secrets\" },\n { id: \"external_secrets\", label: \"External Secrets Operator\", description: \"K8s external secrets sync\" },\n { id: \"git_crypt\", label: \"git-crypt\", description: \"Transparent file encryption in git\" },\n { id: \"chamber\", label: \"Chamber\", description: \"AWS SSM-based secrets tool\" },\n { id: \"berglas\", label: \"Berglas\", description: \"GCP secrets CLI tool\" },\n { id: \"other\", label: \"Other\", description: \"Custom secrets management\" },\n];\n/**\n * Security tooling options\n */\nexport const SECURITY_TOOLING_OPTIONS = [\n { id: \"dependabot\", label: \"Dependabot\", description: \"GitHub dependency updates\", recommended: true },\n { id: \"renovate\", label: \"Renovate\", description: \"Automated dependency updates\" },\n { id: \"snyk\", label: \"Snyk\", description: \"Vulnerability scanning\" },\n { id: \"sonarqube\", label: \"SonarQube\", description: \"Code quality and security\" },\n { id: \"codeql\", label: \"CodeQL\", description: \"GitHub semantic analysis\" },\n { id: \"semgrep\", label: \"Semgrep\", description: \"Lightweight static analysis\" },\n { id: \"trivy\", label: \"Trivy\", description: \"Container/IaC scanning\" },\n { id: \"grype\", label: \"Grype\", description: \"Container vulnerability scanner\" },\n { id: \"checkov\", label: \"Checkov\", description: \"IaC security scanning\" },\n { id: \"tfsec\", label: \"tfsec\", description: \"Terraform security scanner\" },\n { id: \"bandit\", label: \"Bandit\", description: \"Python security linter\" },\n { id: \"brakeman\", label: \"Brakeman\", description: \"Rails security scanner\" },\n { id: \"gosec\", label: \"gosec\", description: \"Go security checker\" },\n { id: \"safety\", label: \"Safety\", description: \"Python dependency checker\" },\n { id: \"npm_audit\", label: \"npm audit\", description: \"Node.js vulnerability check\" },\n { id: \"ossf_scorecard\", label: \"OSSF Scorecard\", description: \"Open source security metrics\" },\n { id: \"gitleaks\", label: \"Gitleaks\", description: \"Secret detection in git\" },\n { id: \"trufflehog\", label: \"TruffleHog\", description: \"Secret scanning\" },\n { id: \"other\", label: \"Other\", description: \"Custom security tooling\" },\n];\n/**\n * Authentication patterns\n */\nexport const AUTH_PATTERNS_OPTIONS = [\n { id: \"session\", label: \"Session-based\", description: \"Server-side sessions with cookies\", recommended: true },\n { id: \"jwt\", label: \"JWT Tokens\", description: \"Stateless JSON Web Tokens\" },\n { id: \"oauth2\", label: \"OAuth 2.0\", description: \"Third-party authorization\" },\n { id: \"oidc\", label: \"OpenID Connect\", description: \"OAuth2 + identity layer\" },\n { id: \"saml\", label: \"SAML\", description: \"Enterprise SSO\" },\n { id: \"passkeys\", label: \"Passkeys / WebAuthn\", description: \"Passwordless authentication\" },\n { id: \"magic_link\", label: \"Magic Links\", description: \"Email-based passwordless\" },\n { id: \"api_keys\", label: \"API Keys\", description: \"Simple key authentication\" },\n { id: \"mfa\", label: \"Multi-Factor Auth\", description: \"TOTP, SMS, or hardware keys\" },\n { id: \"basic_auth\", label: \"Basic Auth\", description: \"Username/password in header\" },\n { id: \"mtls\", label: \"Mutual TLS\", description: \"Client certificate auth\" },\n { id: \"other\", label: \"Other\", description: \"Custom authentication\" },\n];\n/**\n * Data handling options\n */\nexport const DATA_HANDLING_OPTIONS = [\n { id: \"encryption_at_rest\", label: \"Encryption at Rest\", description: \"Encrypt stored data\", recommended: true },\n { id: \"encryption_in_transit\", label: \"Encryption in Transit\", description: \"TLS/HTTPS everywhere\", recommended: true },\n { id: \"input_validation\", label: \"Input Validation\", description: \"Validate all user input\", recommended: true },\n { id: \"output_encoding\", label: \"Output Encoding\", description: \"Prevent XSS attacks\", recommended: true },\n { id: \"parameterized_queries\", label: \"Parameterized Queries\", description: \"Prevent SQL injection\", recommended: true },\n { id: \"rate_limiting\", label: \"Rate Limiting\", description: \"Prevent abuse\" },\n { id: \"pii_handling\", label: \"PII Handling\", description: \"Personal data protection\" },\n { id: \"data_masking\", label: \"Data Masking\", description: \"Hide sensitive data\" },\n { id: \"audit_logging\", label: \"Audit Logging\", description: \"Track data access\" },\n { id: \"backup_encryption\", label: \"Backup Encryption\", description: \"Encrypt backups\" },\n { id: \"data_retention\", label: \"Data Retention Policy\", description: \"Auto-delete old data\" },\n { id: \"data_minimization\", label: \"Data Minimization\", description: \"Collect only necessary data\" },\n { id: \"right_to_erasure\", label: \"Right to Erasure\", description: \"Support data deletion requests\" },\n { id: \"data_portability\", label: \"Data Portability\", description: \"Export user data on request\" },\n { id: \"consent_management\", label: \"Consent Management\", description: \"Track user consent\" },\n { id: \"other\", label: \"Other\", description: \"Custom data handling\" },\n];\n/**\n * Compliance frameworks and regulations\n */\nexport const COMPLIANCE_OPTIONS = [\n // Privacy regulations\n { id: \"gdpr\", label: \"GDPR\", description: \"EU General Data Protection Regulation\", recommended: true },\n { id: \"ccpa\", label: \"CCPA/CPRA\", description: \"California Consumer Privacy Act\" },\n { id: \"lgpd\", label: \"LGPD\", description: \"Brazil's data protection law\" },\n { id: \"pipeda\", label: \"PIPEDA\", description: \"Canada's privacy law\" },\n { id: \"pdpa\", label: \"PDPA\", description: \"Singapore's Personal Data Protection Act\" },\n { id: \"appi\", label: \"APPI\", description: \"Japan's privacy law\" },\n // Industry-specific\n { id: \"hipaa\", label: \"HIPAA\", description: \"US healthcare data protection\" },\n { id: \"pci_dss\", label: \"PCI-DSS\", description: \"Payment card data security\" },\n { id: \"ferpa\", label: \"FERPA\", description: \"US student education records\" },\n { id: \"coppa\", label: \"COPPA\", description: \"US children's online privacy\" },\n { id: \"glba\", label: \"GLBA\", description: \"US financial services privacy\" },\n // Security frameworks\n { id: \"soc2\", label: \"SOC 2\", description: \"Service Organization Controls\" },\n { id: \"iso27001\", label: \"ISO 27001\", description: \"Information security management\" },\n { id: \"iso27701\", label: \"ISO 27701\", description: \"Privacy information management\" },\n { id: \"nist\", label: \"NIST CSF\", description: \"Cybersecurity framework\" },\n { id: \"fedramp\", label: \"FedRAMP\", description: \"US federal cloud security\" },\n { id: \"cis\", label: \"CIS Controls\", description: \"Center for Internet Security\" },\n // Accessibility\n { id: \"wcag\", label: \"WCAG 2.1\", description: \"Web accessibility guidelines\" },\n { id: \"section508\", label: \"Section 508\", description: \"US federal accessibility\" },\n { id: \"ada\", label: \"ADA\", description: \"Americans with Disabilities Act\" },\n // Other\n { id: \"other\", label: \"Other\", description: \"Custom compliance requirements\" },\n];\n/**\n * Analytics and tracking options (privacy-focused)\n */\nexport const ANALYTICS_OPTIONS = [\n // Privacy-focused / cookie-less\n { id: \"umami\", label: \"Umami\", description: \"Privacy-focused, cookie-less, self-hosted\", recommended: true },\n { id: \"plausible\", label: \"Plausible\", description: \"Privacy-focused, cookie-less\" },\n { id: \"fathom\", label: \"Fathom\", description: \"Privacy-first analytics\" },\n { id: \"simple_analytics\", label: \"Simple Analytics\", description: \"Privacy-friendly, no cookies\" },\n { id: \"pirsch\", label: \"Pirsch\", description: \"Cookie-free web analytics\" },\n { id: \"counter\", label: \"Counter.dev\", description: \"Privacy-first, open-source\" },\n { id: \"cabin\", label: \"Cabin\", description: \"Privacy-first carbon-aware analytics\" },\n { id: \"goatcounter\", label: \"GoatCounter\", description: \"Open-source, privacy-aware\" },\n { id: \"ackee\", label: \"Ackee\", description: \"Self-hosted, privacy-focused\" },\n { id: \"matomo\", label: \"Matomo\", description: \"Self-hosted Google Analytics alternative\" },\n // Traditional (require cookies/consent)\n { id: \"google_analytics\", label: \"Google Analytics\", description: \"Requires cookie consent\" },\n { id: \"mixpanel\", label: \"Mixpanel\", description: \"Product analytics\" },\n { id: \"amplitude\", label: \"Amplitude\", description: \"Product analytics platform\" },\n { id: \"heap\", label: \"Heap\", description: \"Digital insights platform\" },\n { id: \"posthog\", label: \"PostHog\", description: \"Open-source product analytics\" },\n { id: \"none\", label: \"No Analytics\", description: \"Don't track users\" },\n];\n","/**\n * Naming conventions\n */\nexport const NAMING_CONVENTIONS = [\n { id: \"language_default\", label: \"Follow language conventions\", description: \"Use idiomatic style for selected language(s)\" },\n { id: \"camelCase\", label: \"camelCase\", description: \"JavaScript, TypeScript, Java\" },\n { id: \"snake_case\", label: \"snake_case\", description: \"Python, Ruby, Rust, Go\" },\n { id: \"PascalCase\", label: \"PascalCase\", description: \"C#, .NET classes\" },\n { id: \"kebab-case\", label: \"kebab-case\", description: \"CSS, HTML attributes, URLs\" },\n { id: \"SCREAMING_SNAKE_CASE\", label: \"SCREAMING_SNAKE_CASE\", description: \"Constants, environment variables\" },\n];\n/**\n * Error handling patterns\n */\nexport const ERROR_HANDLING_PATTERNS = [\n { id: \"try_catch\", label: \"Try-Catch\", description: \"Standard exception handling\" },\n { id: \"result_type\", label: \"Result/Either Type\", description: \"Functional error handling\" },\n { id: \"error_codes\", label: \"Error Codes\", description: \"Numeric/string error codes\" },\n { id: \"monads\", label: \"Monads (Option/Maybe)\", description: \"Functional programming style\" },\n { id: \"panic_recover\", label: \"Panic/Recover\", description: \"Go-style error handling\" },\n { id: \"error_boundaries\", label: \"Error Boundaries\", description: \"React error boundaries\" },\n { id: \"global_handler\", label: \"Global Error Handler\", description: \"Centralized error handling\" },\n { id: \"other\", label: \"Other\", description: \"Custom error handling\" },\n];\n/**\n * Logging conventions\n */\nexport const LOGGING_OPTIONS = [\n { id: \"structured\", label: \"Structured Logging\", description: \"JSON logs with metadata\" },\n { id: \"console\", label: \"Console Logging\", description: \"Simple console.log/print\" },\n { id: \"log_levels\", label: \"Log Levels\", description: \"DEBUG, INFO, WARN, ERROR\" },\n { id: \"winston\", label: \"Winston\", description: \"Node.js logging library\" },\n { id: \"pino\", label: \"Pino\", description: \"Fast Node.js logger\" },\n { id: \"bunyan\", label: \"Bunyan\", description: \"JSON logging for Node.js\" },\n { id: \"log4j\", label: \"Log4j / Logback\", description: \"Java logging framework\" },\n { id: \"slog\", label: \"slog\", description: \"Go structured logging\" },\n { id: \"logrus\", label: \"Logrus\", description: \"Go structured logger\" },\n { id: \"zap\", label: \"Zap\", description: \"Uber's Go logger\" },\n { id: \"python_logging\", label: \"Python logging\", description: \"Standard library logging\" },\n { id: \"loguru\", label: \"Loguru\", description: \"Python logging made simple\" },\n { id: \"tracing\", label: \"tracing\", description: \"Rust async logging\" },\n { id: \"serilog\", label: \"Serilog\", description: \".NET structured logging\" },\n { id: \"elk\", label: \"ELK Stack\", description: \"Elasticsearch, Logstash, Kibana\" },\n { id: \"loki\", label: \"Grafana Loki\", description: \"Log aggregation\" },\n { id: \"datadog\", label: \"Datadog Logs\", description: \"Cloud logging service\" },\n { id: \"other\", label: \"Other\", description: \"Custom logging\" },\n];\n/**\n * Boundary options (what AI should always/ask/never do)\n */\nexport const BOUNDARY_OPTIONS = [\n // File operations\n { action: \"Delete files\", category: \"files\" },\n { action: \"Create new files\", category: \"files\" },\n { action: \"Rename/move files\", category: \"files\" },\n // Code changes\n { action: \"Rewrite large sections\", category: \"code\" },\n { action: \"Refactor architecture\", category: \"code\" },\n { action: \"Add new dependencies\", category: \"code\" },\n { action: \"Remove dependencies\", category: \"code\" },\n { action: \"Change public APIs\", category: \"code\" },\n // Database\n { action: \"Modify database schema\", category: \"database\" },\n { action: \"Write migrations\", category: \"database\" },\n { action: \"Delete data\", category: \"database\" },\n // Git\n { action: \"Make commits\", category: \"git\" },\n { action: \"Push to remote\", category: \"git\" },\n { action: \"Create branches\", category: \"git\" },\n { action: \"Merge branches\", category: \"git\" },\n // Deployment\n { action: \"Deploy to production\", category: \"deployment\" },\n { action: \"Modify CI/CD config\", category: \"deployment\" },\n { action: \"Change environment variables\", category: \"deployment\" },\n // Security\n { action: \"Modify authentication\", category: \"security\" },\n { action: \"Change permissions\", category: \"security\" },\n { action: \"Access secrets\", category: \"security\" },\n];\n","/**\n * Test levels\n */\nexport const TEST_LEVELS = [\n { id: \"unit\", label: \"Unit Tests\", description: \"Test individual functions/components\" },\n { id: \"integration\", label: \"Integration Tests\", description: \"Test component interactions\" },\n { id: \"e2e\", label: \"End-to-End Tests\", description: \"Test full user flows\" },\n { id: \"smoke\", label: \"Smoke Tests\", description: \"Quick sanity checks\" },\n { id: \"regression\", label: \"Regression Tests\", description: \"Prevent bug recurrence\" },\n { id: \"performance\", label: \"Performance Tests\", description: \"Load and stress testing\" },\n { id: \"security\", label: \"Security Tests\", description: \"Vulnerability scanning\" },\n { id: \"accessibility\", label: \"Accessibility Tests\", description: \"WCAG compliance\" },\n { id: \"visual\", label: \"Visual Regression\", description: \"Screenshot comparison\" },\n { id: \"contract\", label: \"Contract Tests\", description: \"API contract validation\" },\n];\n/**\n * Test frameworks (comprehensive list)\n */\nexport const TEST_FRAMEWORKS = [\n // JavaScript/TypeScript\n \"Jest\",\n \"Vitest\",\n \"Mocha\",\n \"Jasmine\",\n \"AVA\",\n \"Tape\",\n \"QUnit\",\n \"Node Test Runner\",\n // E2E / Browser\n \"Playwright\",\n \"Cypress\",\n \"Puppeteer\",\n \"Selenium\",\n \"WebdriverIO\",\n \"TestCafe\",\n \"Nightwatch\",\n // React\n \"React Testing Library\",\n \"Enzyme\",\n // Vue\n \"Vue Test Utils\",\n \"Vue Testing Library\",\n // Angular\n \"Angular Testing\",\n \"Karma\",\n // Python\n \"pytest\",\n \"unittest\",\n \"nose2\",\n \"doctest\",\n \"hypothesis\",\n \"tox\",\n \"nox\",\n \"Robot Framework\",\n // Go\n \"testing (stdlib)\",\n \"testify\",\n \"ginkgo\",\n \"gomega\",\n \"gocheck\",\n // Rust\n \"cargo test\",\n \"proptest\",\n \"quickcheck\",\n \"criterion\",\n // Java\n \"JUnit\",\n \"TestNG\",\n \"Mockito\",\n \"Spock\",\n \"Cucumber\",\n // .NET\n \"xUnit\",\n \"NUnit\",\n \"MSTest\",\n \"SpecFlow\",\n // Ruby\n \"RSpec\",\n \"Minitest\",\n \"Capybara\",\n \"Cucumber\",\n // PHP\n \"PHPUnit\",\n \"Pest\",\n \"Codeception\",\n \"Behat\",\n // Mobile\n \"XCTest\",\n \"Espresso\",\n \"Detox\",\n \"Appium\",\n // API\n \"Postman\",\n \"Insomnia\",\n \"REST Assured\",\n \"Supertest\",\n \"httpx\",\n // Load\n \"k6\",\n \"Locust\",\n \"Artillery\",\n \"JMeter\",\n \"Gatling\",\n // Other\n \"Storybook\",\n \"Chromatic\",\n \"Percy\",\n \"Applitools\",\n];\n","/**\n * Common commands organized by category\n * This is the single source of truth for both CLI and WebUI\n */\nexport const COMMON_COMMANDS = [\n // Build commands - JavaScript/Node\n { cmd: \"npm run build\", category: \"build\" },\n { cmd: \"pnpm build\", category: \"build\" },\n { cmd: \"yarn build\", category: \"build\" },\n { cmd: \"bun run build\", category: \"build\" },\n { cmd: \"next build\", category: \"build\" },\n { cmd: \"vite build\", category: \"build\" },\n { cmd: \"tsc\", category: \"build\" },\n { cmd: \"esbuild\", category: \"build\" },\n { cmd: \"rollup -c\", category: \"build\" },\n { cmd: \"webpack\", category: \"build\" },\n { cmd: \"parcel build\", category: \"build\" },\n // Build - Python\n { cmd: \"python setup.py build\", category: \"build\" },\n { cmd: \"pip install -e .\", category: \"build\" },\n { cmd: \"poetry build\", category: \"build\" },\n { cmd: \"pdm build\", category: \"build\" },\n { cmd: \"hatch build\", category: \"build\" },\n // Build - Go\n { cmd: \"go build\", category: \"build\" },\n { cmd: \"go build ./...\", category: \"build\" },\n { cmd: \"go install\", category: \"build\" },\n // Build - Rust\n { cmd: \"cargo build\", category: \"build\" },\n { cmd: \"cargo build --release\", category: \"build\" },\n // Build - Java/JVM\n { cmd: \"mvn package\", category: \"build\" },\n { cmd: \"mvn clean install\", category: \"build\" },\n { cmd: \"gradle build\", category: \"build\" },\n { cmd: \"./gradlew build\", category: \"build\" },\n // Build - .NET\n { cmd: \"dotnet build\", category: \"build\" },\n { cmd: \"dotnet publish\", category: \"build\" },\n // Build - Containers\n { cmd: \"docker build -t app .\", category: \"build\" },\n { cmd: \"docker compose build\", category: \"build\" },\n { cmd: \"podman build -t app .\", category: \"build\" },\n // Build - IaC\n { cmd: \"terraform init\", category: \"build\" },\n { cmd: \"terraform plan\", category: \"build\" },\n { cmd: \"pulumi preview\", category: \"build\" },\n { cmd: \"cdk synth\", category: \"build\" },\n // Test commands - JavaScript\n { cmd: \"npm test\", category: \"test\" },\n { cmd: \"pnpm test\", category: \"test\" },\n { cmd: \"yarn test\", category: \"test\" },\n { cmd: \"bun test\", category: \"test\" },\n { cmd: \"vitest\", category: \"test\" },\n { cmd: \"vitest run\", category: \"test\" },\n { cmd: \"vitest --coverage\", category: \"test\" },\n { cmd: \"jest\", category: \"test\" },\n { cmd: \"jest --coverage\", category: \"test\" },\n { cmd: \"mocha\", category: \"test\" },\n // Test - E2E\n { cmd: \"playwright test\", category: \"test\" },\n { cmd: \"cypress run\", category: \"test\" },\n { cmd: \"cypress open\", category: \"test\" },\n // Test - Python\n { cmd: \"pytest\", category: \"test\" },\n { cmd: \"pytest --cov\", category: \"test\" },\n { cmd: \"pytest -v\", category: \"test\" },\n { cmd: \"python -m unittest\", category: \"test\" },\n { cmd: \"tox\", category: \"test\" },\n { cmd: \"nox\", category: \"test\" },\n // Test - Go\n { cmd: \"go test ./...\", category: \"test\" },\n { cmd: \"go test -v ./...\", category: \"test\" },\n { cmd: \"go test -cover ./...\", category: \"test\" },\n // Test - Rust\n { cmd: \"cargo test\", category: \"test\" },\n { cmd: \"cargo test --all\", category: \"test\" },\n // Test - Java\n { cmd: \"mvn test\", category: \"test\" },\n { cmd: \"gradle test\", category: \"test\" },\n { cmd: \"./gradlew test\", category: \"test\" },\n // Test - .NET\n { cmd: \"dotnet test\", category: \"test\" },\n // Test - Load\n { cmd: \"k6 run\", category: \"test\" },\n { cmd: \"locust\", category: \"test\" },\n { cmd: \"artillery run\", category: \"test\" },\n // Lint commands - JavaScript\n { cmd: \"npm run lint\", category: \"lint\" },\n { cmd: \"eslint .\", category: \"lint\" },\n { cmd: \"eslint . --fix\", category: \"lint\" },\n { cmd: \"next lint\", category: \"lint\" },\n { cmd: \"biome check\", category: \"lint\" },\n { cmd: \"oxlint\", category: \"lint\" },\n // Lint - Python\n { cmd: \"ruff check .\", category: \"lint\" },\n { cmd: \"flake8\", category: \"lint\" },\n { cmd: \"pylint\", category: \"lint\" },\n // Lint - Go\n { cmd: \"golangci-lint run\", category: \"lint\" },\n // Lint - Rust\n { cmd: \"cargo clippy\", category: \"lint\" },\n // Lint - Shell\n { cmd: \"shellcheck *.sh\", category: \"lint\" },\n // Lint - IaC\n { cmd: \"terraform validate\", category: \"lint\" },\n { cmd: \"tflint\", category: \"lint\" },\n { cmd: \"checkov\", category: \"lint\" },\n { cmd: \"ansible-lint\", category: \"lint\" },\n { cmd: \"yamllint .\", category: \"lint\" },\n { cmd: \"helm lint\", category: \"lint\" },\n // Lint - Docker\n { cmd: \"hadolint Dockerfile\", category: \"lint\" },\n // Dev commands\n { cmd: \"npm run dev\", category: \"dev\" },\n { cmd: \"pnpm dev\", category: \"dev\" },\n { cmd: \"yarn dev\", category: \"dev\" },\n { cmd: \"bun dev\", category: \"dev\" },\n { cmd: \"next dev\", category: \"dev\" },\n { cmd: \"next dev --turbo\", category: \"dev\" },\n { cmd: \"vite\", category: \"dev\" },\n { cmd: \"vite dev\", category: \"dev\" },\n { cmd: \"nuxt dev\", category: \"dev\" },\n { cmd: \"remix dev\", category: \"dev\" },\n { cmd: \"astro dev\", category: \"dev\" },\n // Dev - Python\n { cmd: \"python app.py\", category: \"dev\" },\n { cmd: \"flask run\", category: \"dev\" },\n { cmd: \"uvicorn main:app --reload\", category: \"dev\" },\n { cmd: \"python manage.py runserver\", category: \"dev\" },\n // Dev - Go\n { cmd: \"go run .\", category: \"dev\" },\n { cmd: \"air\", category: \"dev\" },\n // Dev - Rust\n { cmd: \"cargo run\", category: \"dev\" },\n { cmd: \"cargo watch -x run\", category: \"dev\" },\n // Dev - Containers\n { cmd: \"docker compose up\", category: \"dev\" },\n { cmd: \"docker compose up -d\", category: \"dev\" },\n { cmd: \"docker compose watch\", category: \"dev\" },\n // Dev - Kubernetes\n { cmd: \"skaffold dev\", category: \"dev\" },\n { cmd: \"tilt up\", category: \"dev\" },\n // Format commands - JavaScript\n { cmd: \"prettier --write .\", category: \"format\" },\n { cmd: \"npm run format\", category: \"format\" },\n { cmd: \"pnpm format\", category: \"format\" },\n { cmd: \"biome format --write .\", category: \"format\" },\n { cmd: \"dprint fmt\", category: \"format\" },\n // Format - Python\n { cmd: \"black .\", category: \"format\" },\n { cmd: \"ruff format .\", category: \"format\" },\n { cmd: \"isort .\", category: \"format\" },\n // Format - Go\n { cmd: \"go fmt ./...\", category: \"format\" },\n { cmd: \"gofmt -w .\", category: \"format\" },\n { cmd: \"goimports -w .\", category: \"format\" },\n // Format - Rust\n { cmd: \"cargo fmt\", category: \"format\" },\n // Format - Other\n { cmd: \"shfmt -w .\", category: \"format\" },\n { cmd: \"terraform fmt -recursive\", category: \"format\" },\n // Typecheck commands - TypeScript\n { cmd: \"tsc --noEmit\", category: \"typecheck\" },\n { cmd: \"npm run typecheck\", category: \"typecheck\" },\n { cmd: \"pnpm typecheck\", category: \"typecheck\" },\n { cmd: \"vue-tsc --noEmit\", category: \"typecheck\" },\n // Typecheck - Python\n { cmd: \"mypy .\", category: \"typecheck\" },\n { cmd: \"pyright\", category: \"typecheck\" },\n { cmd: \"pyre check\", category: \"typecheck\" },\n // Typecheck - Go\n { cmd: \"go vet ./...\", category: \"typecheck\" },\n { cmd: \"staticcheck ./...\", category: \"typecheck\" },\n // Typecheck - Rust\n { cmd: \"cargo check\", category: \"typecheck\" },\n // Clean commands\n { cmd: \"npm run clean\", category: \"clean\" },\n { cmd: \"rm -rf node_modules\", category: \"clean\" },\n { cmd: \"rm -rf dist\", category: \"clean\" },\n { cmd: \"rm -rf .next\", category: \"clean\" },\n { cmd: \"rm -rf build\", category: \"clean\" },\n { cmd: \"rm -rf coverage\", category: \"clean\" },\n { cmd: \"pnpm clean\", category: \"clean\" },\n // Clean - Python\n { cmd: \"rm -rf __pycache__\", category: \"clean\" },\n { cmd: \"rm -rf .pytest_cache\", category: \"clean\" },\n { cmd: \"find . -name '*.pyc' -delete\", category: \"clean\" },\n // Clean - Go\n { cmd: \"go clean -cache\", category: \"clean\" },\n { cmd: \"go clean -testcache\", category: \"clean\" },\n // Clean - Rust\n { cmd: \"cargo clean\", category: \"clean\" },\n // Clean - Containers\n { cmd: \"docker system prune -af\", category: \"clean\" },\n { cmd: \"docker compose down -v\", category: \"clean\" },\n // Pre-commit hooks\n { cmd: \"npx husky install\", category: \"preCommit\" },\n { cmd: \"pnpm dlx husky install\", category: \"preCommit\" },\n { cmd: \"lefthook install\", category: \"preCommit\" },\n { cmd: \"pre-commit install\", category: \"preCommit\" },\n { cmd: \"pre-commit run --all-files\", category: \"preCommit\" },\n { cmd: \"lint-staged\", category: \"preCommit\" },\n { cmd: \"npx lint-staged\", category: \"preCommit\" },\n // Other/Misc commands\n { cmd: \"npm run storybook\", category: \"other\" },\n { cmd: \"prisma db push\", category: \"other\" },\n { cmd: \"prisma generate\", category: \"other\" },\n { cmd: \"prisma migrate dev\", category: \"other\" },\n { cmd: \"drizzle-kit push\", category: \"other\" },\n // Deploy\n { cmd: \"terraform apply\", category: \"other\" },\n { cmd: \"pulumi up\", category: \"other\" },\n { cmd: \"cdk deploy\", category: \"other\" },\n { cmd: \"ansible-playbook\", category: \"other\" },\n { cmd: \"helm install\", category: \"other\" },\n { cmd: \"helm upgrade --install\", category: \"other\" },\n { cmd: \"kubectl apply -f\", category: \"other\" },\n];\n/**\n * Get commands by category\n */\nexport const getCommandsByCategory = (category) => COMMON_COMMANDS.filter(c => c.category === category).map(c => c.cmd);\n/**\n * Commands grouped by category (for CLI compatibility)\n */\nexport const COMMANDS_BY_CATEGORY = {\n build: getCommandsByCategory(\"build\"),\n test: getCommandsByCategory(\"test\"),\n lint: getCommandsByCategory(\"lint\"),\n dev: getCommandsByCategory(\"dev\"),\n format: getCommandsByCategory(\"format\"),\n typecheck: getCommandsByCategory(\"typecheck\"),\n clean: getCommandsByCategory(\"clean\"),\n preCommit: getCommandsByCategory(\"preCommit\"),\n additional: getCommandsByCategory(\"other\"),\n};\n","/**\n * Wizard Options - Imported from shared package\n * \n * This file imports all wizard constants from @lynxprompt/shared\n * and transforms them for CLI use (prompts library format).\n */\n\n// Import from compiled dist folder to avoid rootDir issues\nimport {\n // Types\n type WizardOption,\n // Constants\n LANGUAGES as SHARED_LANGUAGES,\n FRAMEWORKS as SHARED_FRAMEWORKS,\n DATABASES as SHARED_DATABASES,\n PACKAGE_MANAGERS as SHARED_PACKAGE_MANAGERS,\n MONOREPO_TOOLS as SHARED_MONOREPO_TOOLS,\n JS_RUNTIMES as SHARED_JS_RUNTIMES,\n ORM_OPTIONS as SHARED_ORM_OPTIONS,\n PROJECT_TYPES as SHARED_PROJECT_TYPES,\n ARCHITECTURE_PATTERNS as SHARED_ARCHITECTURE_PATTERNS,\n DEV_OS_OPTIONS as SHARED_DEV_OS_OPTIONS,\n REPO_HOSTS as SHARED_REPO_HOSTS,\n CICD_OPTIONS as SHARED_CICD_OPTIONS,\n LICENSES as SHARED_LICENSES,\n BRANCH_STRATEGIES as SHARED_BRANCH_STRATEGIES,\n DEFAULT_BRANCHES as SHARED_DEFAULT_BRANCHES,\n SELF_HOSTED_TARGETS as SHARED_SELF_HOSTED_TARGETS,\n CLOUD_TARGETS as SHARED_CLOUD_TARGETS,\n CONTAINER_REGISTRIES as SHARED_CONTAINER_REGISTRIES,\n VERSION_TAG_FORMATS as SHARED_VERSION_TAG_FORMATS,\n CHANGELOG_OPTIONS as SHARED_CHANGELOG_OPTIONS,\n VPN_OPTIONS as SHARED_VPN_OPTIONS,\n GITOPS_TOOLS as SHARED_GITOPS_TOOLS,\n AI_BEHAVIOR_RULES as SHARED_AI_BEHAVIOR_RULES,\n IMPORTANT_FILES as SHARED_IMPORTANT_FILES,\n PLAN_MODE_FREQUENCY as SHARED_PLAN_MODE_FREQUENCY,\n AUTH_PROVIDERS as SHARED_AUTH_PROVIDERS,\n SECRETS_MANAGEMENT_OPTIONS as SHARED_SECRETS_MANAGEMENT_OPTIONS,\n SECURITY_TOOLING_OPTIONS as SHARED_SECURITY_TOOLING_OPTIONS,\n AUTH_PATTERNS_OPTIONS as SHARED_AUTH_PATTERNS_OPTIONS,\n DATA_HANDLING_OPTIONS as SHARED_DATA_HANDLING_OPTIONS,\n COMPLIANCE_OPTIONS as SHARED_COMPLIANCE_OPTIONS,\n ANALYTICS_OPTIONS as SHARED_ANALYTICS_OPTIONS,\n NAMING_CONVENTIONS as SHARED_NAMING_CONVENTIONS,\n ERROR_HANDLING_PATTERNS as SHARED_ERROR_HANDLING_PATTERNS,\n LOGGING_OPTIONS as SHARED_LOGGING_OPTIONS,\n BOUNDARY_OPTIONS as SHARED_BOUNDARY_OPTIONS,\n TEST_LEVELS as SHARED_TEST_LEVELS,\n TEST_FRAMEWORKS as SHARED_TEST_FRAMEWORKS,\n COMMANDS_BY_CATEGORY as SHARED_COMMANDS_BY_CATEGORY,\n} from \"../../../packages/shared/dist/wizard/index.js\";\n\n// ============================================\n// Transform to CLI format: { title, value }\n// ============================================\n\nfunction toCliFormat<T extends WizardOption>(options: T[]): Array<{ title: string; value: string }> {\n return options.map((o) => ({\n title: o.icon ? `${o.icon} ${o.label}` : o.label,\n value: o.id,\n }));\n}\n\nfunction toCliFormatWithDesc<T extends WizardOption & { description?: string }>(\n options: T[]\n): Array<{ title: string; value: string; description?: string }> {\n return options.map((o) => ({\n title: o.icon ? `${o.icon} ${o.label}` : o.label,\n value: o.id,\n description: o.description,\n }));\n}\n\n// Tech Stack\nexport const LANGUAGES = toCliFormat(SHARED_LANGUAGES);\nexport const FRAMEWORKS = toCliFormat(SHARED_FRAMEWORKS);\nexport const DATABASES = toCliFormat(SHARED_DATABASES);\nexport const PACKAGE_MANAGERS = SHARED_PACKAGE_MANAGERS.map((o) => ({\n title: `${o.icon} ${o.label}`,\n value: o.id,\n desc: o.description,\n}));\nexport const MONOREPO_TOOLS = SHARED_MONOREPO_TOOLS.map((o) => ({\n title: `${o.icon} ${o.label}`,\n value: o.id,\n desc: o.description,\n}));\nexport const JS_RUNTIMES = SHARED_JS_RUNTIMES.map((o) => ({\n title: `${o.icon} ${o.label}`,\n value: o.id,\n desc: o.description,\n}));\nexport const ORM_OPTIONS = SHARED_ORM_OPTIONS.map((o) => ({\n title: o.icon ? `${o.icon} ${o.label}` : o.label,\n value: o.id,\n langs: o.languages || [],\n}));\n\n// Project\nexport const PROJECT_TYPES = SHARED_PROJECT_TYPES.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n description: o.description,\n}));\nexport const ARCHITECTURE_PATTERNS = SHARED_ARCHITECTURE_PATTERNS.map((o) => ({\n id: o.id,\n label: o.label,\n description: o.description,\n}));\nexport const DEV_OS_OPTIONS = SHARED_DEV_OS_OPTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\n\n// Repository\nexport const REPO_HOSTS = SHARED_REPO_HOSTS.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\nexport const CICD_OPTIONS = SHARED_CICD_OPTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\nexport const LICENSES = SHARED_LICENSES.map((o) => ({\n id: o.id,\n label: o.label,\n}));\nexport const BRANCH_STRATEGIES = toCliFormatWithDesc(SHARED_BRANCH_STRATEGIES);\nexport const DEFAULT_BRANCHES = toCliFormat(SHARED_DEFAULT_BRANCHES);\nexport const SELF_HOSTED_TARGETS = toCliFormat(SHARED_SELF_HOSTED_TARGETS);\nexport const CLOUD_TARGETS = toCliFormat(SHARED_CLOUD_TARGETS);\nexport const DEPLOYMENT_TARGETS = [...SELF_HOSTED_TARGETS, ...CLOUD_TARGETS];\nexport const CONTAINER_REGISTRIES = SHARED_CONTAINER_REGISTRIES.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n}));\n\n// Versioning & Release\nexport const VERSION_TAG_FORMATS = toCliFormatWithDesc(SHARED_VERSION_TAG_FORMATS);\nexport const CHANGELOG_OPTIONS = toCliFormatWithDesc(SHARED_CHANGELOG_OPTIONS);\n\n// Infrastructure\nexport const VPN_OPTIONS = toCliFormatWithDesc(SHARED_VPN_OPTIONS);\nexport const GITOPS_TOOLS = toCliFormatWithDesc(SHARED_GITOPS_TOOLS);\n\n// AI Behavior\nexport const AI_BEHAVIOR_RULES = SHARED_AI_BEHAVIOR_RULES.map((o) => ({\n id: o.id,\n label: o.label,\n description: o.description,\n recommended: o.recommended,\n}));\nexport const IMPORTANT_FILES = SHARED_IMPORTANT_FILES.map((o) => ({\n id: o.id,\n label: o.label,\n icon: o.icon,\n description: o.description,\n}));\nexport const PLAN_MODE_FREQUENCY = toCliFormatWithDesc(SHARED_PLAN_MODE_FREQUENCY);\n\n// Security\nexport const AUTH_PROVIDERS = toCliFormatWithDesc(SHARED_AUTH_PROVIDERS);\nexport const SECRETS_MANAGEMENT_OPTIONS = toCliFormatWithDesc(SHARED_SECRETS_MANAGEMENT_OPTIONS);\nexport const SECURITY_TOOLING_OPTIONS = toCliFormatWithDesc(SHARED_SECURITY_TOOLING_OPTIONS);\nexport const AUTH_PATTERNS_OPTIONS = toCliFormatWithDesc(SHARED_AUTH_PATTERNS_OPTIONS);\nexport const DATA_HANDLING_OPTIONS = toCliFormatWithDesc(SHARED_DATA_HANDLING_OPTIONS);\nexport const COMPLIANCE_OPTIONS = toCliFormatWithDesc(SHARED_COMPLIANCE_OPTIONS);\nexport const ANALYTICS_OPTIONS = toCliFormatWithDesc(SHARED_ANALYTICS_OPTIONS);\n\n// Code Style\nexport const NAMING_CONVENTIONS = SHARED_NAMING_CONVENTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n desc: o.description,\n}));\nexport const ERROR_PATTERNS = SHARED_ERROR_HANDLING_PATTERNS.map((o) => ({\n id: o.id,\n label: o.label,\n}));\nexport const LOGGING_OPTIONS = SHARED_LOGGING_OPTIONS.map((o) => ({\n id: o.id,\n label: o.label,\n}));\nexport const BOUNDARY_OPTIONS = SHARED_BOUNDARY_OPTIONS.map((o) => o.action);\n\n// Testing\nexport const TEST_LEVELS = SHARED_TEST_LEVELS.map((o) => ({\n id: o.id,\n label: o.label,\n desc: o.description,\n}));\nexport const TEST_FRAMEWORKS = SHARED_TEST_FRAMEWORKS;\n\n// Commands - CLI uses categorized format\nexport const COMMON_COMMANDS = SHARED_COMMANDS_BY_CATEGORY;\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError, SearchResult } from \"../api.js\";\n\ninterface SearchOptions {\n limit: string;\n}\n\nexport async function searchCommand(\n query: string,\n options: SearchOptions\n): Promise<void> {\n const spinner = ora(`Searching for \"${query}\"...`).start();\n\n try {\n const limit = parseInt(options.limit, 10) || 20;\n const { templates, total, hasMore } = await api.searchBlueprints(query, limit);\n spinner.stop();\n\n if (templates.length === 0) {\n console.log();\n console.log(chalk.yellow(`No blueprints found for \"${query}\".`));\n console.log(chalk.gray(\"Try different keywords or browse at https://lynxprompt.com/blueprints\"));\n return;\n }\n\n console.log();\n console.log(chalk.cyan(`🔍 Search Results for \"${query}\" (${total} found)`));\n console.log();\n\n for (const result of templates) {\n printSearchResult(result);\n }\n\n if (hasMore) {\n console.log(chalk.gray(`Showing ${templates.length} of ${total}. Use --limit to see more.`));\n }\n\n console.log();\n console.log(chalk.gray(\"Use 'lynxprompt pull <id>' to download a blueprint.\"));\n } catch (error) {\n spinner.fail(\"Search failed\");\n handleApiError(error);\n }\n}\n\nfunction printSearchResult(result: SearchResult): void {\n const officialBadge = result.isOfficial ? chalk.magenta(\" ★ Official\") : \"\";\n \n console.log(` ${chalk.bold(result.name)}${officialBadge}`);\n console.log(` ${chalk.cyan(result.id)}`);\n if (result.description) {\n console.log(` ${chalk.gray(truncate(result.description, 60))}`);\n }\n console.log(` ${chalk.gray(`by ${result.author}`)} • ${chalk.gray(`↓${result.downloads}`)} ${chalk.gray(`♥${result.likes}`)}`);\n if (result.tags && result.tags.length > 0) {\n console.log(` ${formatTags(result.tags)}`);\n }\n console.log();\n}\n\nfunction formatTags(tags: string[]): string {\n return tags.slice(0, 4).map((t) => chalk.gray(`#${t}`)).join(\" \");\n}\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + \"...\";\n}\n\nfunction handleApiError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n\n\n","import chalk from \"chalk\";\nimport { readFile, readdir, access } from \"fs/promises\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport { checkSyncStatus } from \"../utils/blueprint-tracker.js\";\n\n// AI config files to look for\nconst CONFIG_FILES = [\n { path: \"AGENTS.md\", name: \"AGENTS.md\", platform: \"Claude Code, Cursor, AI Agents\" },\n { path: \"CLAUDE.md\", name: \"CLAUDE.md\", platform: \"Claude Code\" },\n { path: \".github/copilot-instructions.md\", name: \"Copilot Instructions\", platform: \"GitHub Copilot\" },\n { path: \".windsurfrules\", name: \".windsurfrules\", platform: \"Windsurf\" },\n { path: \".zed/instructions.md\", name: \"Zed Instructions\", platform: \"Zed\" },\n { path: \".clinerules\", name: \".clinerules\", platform: \"Cline\" },\n { path: \".goosehints\", name: \".goosehints\", platform: \"Goose\" },\n { path: \"AIDER.md\", name: \"AIDER.md\", platform: \"Aider\" },\n];\n\n// Directory-based configs\nconst CONFIG_DIRS = [\n { path: \".cursor/rules\", name: \".cursor/rules/\", platform: \"Cursor\" },\n { path: \".amazonq/rules\", name: \".amazonq/rules/\", platform: \"Amazon Q\" },\n { path: \".augment/rules\", name: \".augment/rules/\", platform: \"Augment Code\" },\n];\n\nexport async function statusCommand(): Promise<void> {\n const cwd = process.cwd();\n \n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Status\"));\n console.log(chalk.gray(` Directory: ${cwd}`));\n console.log();\n\n // Check for .lynxprompt folder\n const lynxpromptExists = existsSync(join(cwd, \".lynxprompt\"));\n if (lynxpromptExists) {\n console.log(chalk.green(\"✓ LynxPrompt initialized\"));\n \n // Show config summary\n const configPath = join(cwd, \".lynxprompt/conf.yml\");\n if (existsSync(configPath)) {\n try {\n const content = await readFile(configPath, \"utf-8\");\n const { parse } = await import(\"yaml\");\n const config = parse(content);\n if (config?.exporters?.length > 0) {\n console.log(chalk.gray(` Exporters: ${config.exporters.join(\", \")}`));\n }\n } catch {\n // Ignore parse errors\n }\n }\n console.log();\n }\n\n // Show tracked blueprints\n const trackedStatus = await checkSyncStatus(cwd);\n if (trackedStatus.length > 0) {\n // Group by hierarchy\n const byHierarchy = new Map<string | null, typeof trackedStatus>();\n for (const item of trackedStatus) {\n const key = item.blueprint.hierarchyId || null;\n const group = byHierarchy.get(key) || [];\n group.push(item);\n byHierarchy.set(key, group);\n }\n\n console.log(chalk.cyan(\"📦 Tracked Blueprints\"));\n console.log();\n \n // Show hierarchies first\n for (const [hierarchyId, items] of byHierarchy.entries()) {\n if (hierarchyId) {\n const hierarchyName = items[0].blueprint.hierarchyName || \"Unknown Hierarchy\";\n console.log(chalk.magenta(` 📁 ${hierarchyName}`));\n console.log(chalk.gray(` Hierarchy: ${hierarchyId}`));\n console.log();\n }\n\n for (const { blueprint, localModified, fileExists } of items) {\n const statusIcon = !fileExists\n ? chalk.red(\"✗\")\n : localModified\n ? chalk.yellow(\"●\")\n : chalk.green(\"✓\");\n \n const sourceLabel = {\n marketplace: chalk.gray(\"[marketplace]\"),\n team: chalk.blue(\"[team]\"),\n private: chalk.green(\"[private]\"),\n local: chalk.gray(\"[local]\"),\n }[blueprint.source];\n\n const indent = hierarchyId ? \" \" : \" \";\n console.log(`${indent}${statusIcon} ${chalk.bold(blueprint.file)} ${sourceLabel}`);\n console.log(`${indent} ${chalk.gray(`ID: ${blueprint.id} • ${blueprint.name}`)}`);\n \n // Show repository path if different from file\n if (blueprint.repositoryPath && blueprint.repositoryPath !== blueprint.file) {\n console.log(`${indent} ${chalk.gray(`Path: ${blueprint.repositoryPath}`)}`);\n }\n \n if (!fileExists) {\n console.log(chalk.red(`${indent} ⚠ File missing - run 'lynxp pull ${blueprint.id}' to restore`));\n } else if (localModified) {\n if (blueprint.source === \"marketplace\") {\n console.log(chalk.yellow(`${indent} ⚠ Local changes (marketplace = read-only, won't sync back)`));\n } else {\n console.log(chalk.yellow(`${indent} ⚠ Local changes - run 'lynxp push ${blueprint.file}' to sync`));\n }\n }\n console.log();\n }\n }\n }\n\n // Show AI config files\n console.log(chalk.cyan(\"📄 AI Config Files\"));\n console.log();\n\n let foundAny = false;\n\n // Check single files\n for (const config of CONFIG_FILES) {\n const filePath = join(cwd, config.path);\n try {\n await access(filePath);\n const content = await readFile(filePath, \"utf-8\");\n const lines = content.split(\"\\n\").length;\n const size = formatBytes(content.length);\n\n foundAny = true;\n \n // Check if this file is tracked\n const tracked = trackedStatus.find(t => t.blueprint.file === config.path);\n const trackedLabel = tracked ? chalk.cyan(\" (tracked)\") : \"\";\n \n console.log(` ${chalk.green(\"✓\")} ${chalk.bold(config.name)}${trackedLabel}`);\n console.log(` ${chalk.gray(`Platform: ${config.platform}`)}`);\n console.log(` ${chalk.gray(`Size: ${size} (${lines} lines)`)}`);\n \n // Show first non-empty, non-comment line as preview\n const preview = getPreview(content);\n if (preview) {\n console.log(` ${chalk.gray(`Preview: ${preview}`)}`);\n }\n console.log();\n } catch {\n // File doesn't exist, skip\n }\n }\n\n // Check directories\n for (const config of CONFIG_DIRS) {\n const dirPath = join(cwd, config.path);\n if (existsSync(dirPath)) {\n try {\n const files = await readdir(dirPath);\n const ruleFiles = files.filter(f => f.endsWith(\".md\") || f.endsWith(\".mdc\"));\n \n if (ruleFiles.length > 0) {\n foundAny = true;\n console.log(` ${chalk.green(\"✓\")} ${chalk.bold(config.name)}`);\n console.log(` ${chalk.gray(`Platform: ${config.platform}`)}`);\n console.log(` ${chalk.gray(`Rules: ${ruleFiles.length} file${ruleFiles.length === 1 ? \"\" : \"s\"}`)}`);\n \n // List rule files\n for (const file of ruleFiles.slice(0, 3)) {\n console.log(` ${chalk.gray(` • ${file}`)}`);\n }\n if (ruleFiles.length > 3) {\n console.log(` ${chalk.gray(` ... and ${ruleFiles.length - 3} more`)}`);\n }\n console.log();\n }\n } catch {\n // Can't read directory\n }\n }\n }\n\n if (!foundAny) {\n console.log(chalk.yellow(\" No AI configuration files found.\"));\n console.log();\n console.log(chalk.gray(\" Get started:\"));\n console.log(chalk.gray(\" lynxp wizard Generate a configuration\"));\n console.log(chalk.gray(\" lynxp pull <id> Download from marketplace\"));\n console.log(chalk.gray(\" lynxp search <query> Search for blueprints\"));\n } else {\n console.log(chalk.gray(\"Commands:\"));\n console.log(chalk.gray(\" lynxp wizard Regenerate configuration\"));\n console.log(chalk.gray(\" lynxp check Validate files\"));\n console.log(chalk.gray(\" lynxp link --list Show tracked blueprints\"));\n }\n console.log();\n}\n\nfunction getPreview(content: string): string | null {\n const lines = content.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (\n trimmed &&\n !trimmed.startsWith(\"#\") &&\n !trimmed.startsWith(\"//\") &&\n !trimmed.startsWith(\"<!--\") &&\n !trimmed.startsWith(\"---\") &&\n !trimmed.startsWith(\">\")\n ) {\n return truncate(trimmed, 50);\n }\n }\n return null;\n}\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength - 3) + \"...\";\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n","/**\n * Check command - validate AI configuration files\n * \n * Validates configuration files for CI/CD pipelines and pre-commit hooks.\n * \n * Usage:\n * lynxp check - Interactive validation with detailed output\n * lynxp check --ci - CI mode with exit codes (0 = pass, 1 = fail)\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { readFile, readdir, stat } from \"fs/promises\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport * as yaml from \"yaml\";\n\ninterface CheckOptions {\n ci?: boolean;\n}\n\ninterface ValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n files: string[];\n}\n\n// Known AI config files\nconst CONFIG_FILES = [\n { path: \"AGENTS.md\", name: \"AGENTS.md\" },\n { path: \"CLAUDE.md\", name: \"CLAUDE.md\" },\n { path: \".github/copilot-instructions.md\", name: \"GitHub Copilot\" },\n { path: \".windsurfrules\", name: \"Windsurf\" },\n { path: \".clinerules\", name: \"Cline\" },\n { path: \".goosehints\", name: \"Goose\" },\n { path: \".zed/instructions.md\", name: \"Zed\" },\n];\n\nconst CONFIG_DIRS = [\n { path: \".cursor/rules\", name: \"Cursor\" },\n { path: \".lynxprompt\", name: \"LynxPrompt\" },\n];\n\n/**\n * Validate markdown content for common issues\n */\nfunction validateMarkdown(content: string, filename: string): { errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty content\n if (!content.trim()) {\n errors.push(`${filename}: File is empty`);\n return { errors, warnings };\n }\n\n // Check for minimum content\n if (content.trim().length < 50) {\n warnings.push(`${filename}: Content seems too short (< 50 chars)`);\n }\n\n // Check for header\n if (!content.includes(\"#\")) {\n warnings.push(`${filename}: No markdown headers found`);\n }\n\n // Check for common placeholder text\n const placeholders = [\n \"TODO\",\n \"FIXME\",\n \"YOUR_\",\n \"REPLACE_\",\n \"[INSERT\",\n \"example.com\",\n ];\n \n for (const placeholder of placeholders) {\n if (content.includes(placeholder)) {\n warnings.push(`${filename}: Contains placeholder text \"${placeholder}\"`);\n }\n }\n\n // Check for potential secrets (basic patterns)\n const secretPatterns = [\n /ghp_[a-zA-Z0-9]{36}/, // GitHub tokens\n /api[_-]?key[_-]?=\\s*[a-zA-Z0-9]{20,}/i,\n ];\n\n for (const pattern of secretPatterns) {\n if (pattern.test(content)) {\n errors.push(`${filename}: Potential secret/API key detected - DO NOT commit secrets!`);\n break;\n }\n }\n\n return { errors, warnings };\n}\n\n/**\n * Validate LynxPrompt configuration\n */\nasync function validateLynxPromptConfig(cwd: string): Promise<{ errors: string[]; warnings: string[] }> {\n const errors: string[] = [];\n const warnings: string[] = [];\n \n const configPath = join(cwd, \".lynxprompt/conf.yml\");\n \n if (!existsSync(configPath)) {\n return { errors, warnings };\n }\n\n try {\n const content = await readFile(configPath, \"utf-8\");\n const config = yaml.parse(content);\n\n // Check version\n if (!config.version) {\n warnings.push(\".lynxprompt/conf.yml: Missing 'version' field\");\n }\n\n // Check exporters\n if (!config.exporters || !Array.isArray(config.exporters)) {\n errors.push(\".lynxprompt/conf.yml: Missing or invalid 'exporters' field\");\n } else if (config.exporters.length === 0) {\n warnings.push(\".lynxprompt/conf.yml: No exporters configured\");\n }\n\n // Check sources\n if (!config.sources || !Array.isArray(config.sources)) {\n errors.push(\".lynxprompt/conf.yml: Missing or invalid 'sources' field\");\n } else {\n for (const source of config.sources) {\n if (source.type === \"local\" && source.path) {\n const sourcePath = join(cwd, source.path);\n if (!existsSync(sourcePath)) {\n errors.push(`.lynxprompt/conf.yml: Source path not found: ${source.path}`);\n }\n }\n }\n }\n } catch (error) {\n errors.push(`.lynxprompt/conf.yml: Invalid YAML syntax - ${error instanceof Error ? error.message : \"parse error\"}`);\n }\n\n return { errors, warnings };\n}\n\n/**\n * Validate MDC files (Cursor format)\n */\nfunction validateMdc(content: string, filename: string): { errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for frontmatter\n if (!content.startsWith(\"---\")) {\n warnings.push(`${filename}: Missing YAML frontmatter`);\n } else {\n // Try to parse frontmatter\n const frontmatterEnd = content.indexOf(\"---\", 3);\n if (frontmatterEnd === -1) {\n errors.push(`${filename}: Unclosed YAML frontmatter`);\n } else {\n const frontmatter = content.substring(3, frontmatterEnd).trim();\n try {\n yaml.parse(frontmatter);\n } catch {\n errors.push(`${filename}: Invalid YAML frontmatter`);\n }\n }\n }\n\n // Also run standard markdown validation on content after frontmatter\n const bodyStart = content.indexOf(\"---\", 3);\n if (bodyStart !== -1) {\n const body = content.substring(bodyStart + 3).trim();\n const mdResult = validateMarkdown(body, filename);\n // Only add body-related warnings, not errors (frontmatter is the critical part for MDC)\n warnings.push(...mdResult.warnings);\n }\n\n return { errors, warnings };\n}\n\nexport async function checkCommand(options: CheckOptions = {}): Promise<void> {\n const isCi = options.ci;\n const cwd = process.cwd();\n\n if (!isCi) {\n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Check\"));\n console.log();\n }\n\n const result: ValidationResult = {\n valid: true,\n errors: [],\n warnings: [],\n files: [],\n };\n\n const spinner = !isCi ? ora(\"Scanning for configuration files...\").start() : null;\n\n // Check for config files\n for (const file of CONFIG_FILES) {\n const filePath = join(cwd, file.path);\n if (existsSync(filePath)) {\n result.files.push(file.path);\n try {\n const content = await readFile(filePath, \"utf-8\");\n const validation = validateMarkdown(content, file.path);\n result.errors.push(...validation.errors);\n result.warnings.push(...validation.warnings);\n } catch (error) {\n result.errors.push(`${file.path}: Could not read file`);\n }\n }\n }\n\n // Check for config directories\n for (const dir of CONFIG_DIRS) {\n const dirPath = join(cwd, dir.path);\n if (existsSync(dirPath)) {\n try {\n const files = await readdir(dirPath);\n for (const file of files) {\n const filePath = join(dirPath, file);\n const fileStat = await stat(filePath);\n \n if (fileStat.isFile()) {\n result.files.push(`${dir.path}/${file}`);\n const content = await readFile(filePath, \"utf-8\");\n \n // Use MDC validation for .mdc files\n if (file.endsWith(\".mdc\")) {\n const validation = validateMdc(content, `${dir.path}/${file}`);\n result.errors.push(...validation.errors);\n result.warnings.push(...validation.warnings);\n } else if (file.endsWith(\".md\")) {\n const validation = validateMarkdown(content, `${dir.path}/${file}`);\n result.errors.push(...validation.errors);\n result.warnings.push(...validation.warnings);\n }\n }\n }\n } catch {\n // Directory exists but can't be read\n }\n }\n }\n\n // Check LynxPrompt config\n const lynxpromptValidation = await validateLynxPromptConfig(cwd);\n result.errors.push(...lynxpromptValidation.errors);\n result.warnings.push(...lynxpromptValidation.warnings);\n\n spinner?.stop();\n\n // Determine overall result\n result.valid = result.errors.length === 0;\n\n // Output results\n if (isCi) {\n // CI mode - minimal output, use exit codes\n if (!result.valid) {\n console.error(\"✗ Validation failed\");\n for (const error of result.errors) {\n console.error(` ${error}`);\n }\n process.exit(1);\n } else if (result.files.length === 0) {\n console.error(\"✗ No configuration files found\");\n process.exit(1);\n } else {\n console.log(\"✓ Validation passed\");\n if (result.warnings.length > 0) {\n console.log(` (${result.warnings.length} warning${result.warnings.length === 1 ? \"\" : \"s\"})`);\n }\n process.exit(0);\n }\n } else {\n // Interactive mode - detailed output\n if (result.files.length === 0) {\n console.log(chalk.yellow(\"⚠ No AI configuration files found.\"));\n console.log();\n console.log(chalk.gray(\"Run 'lynxp wizard' to create a configuration.\"));\n return;\n }\n\n console.log(chalk.green(`✓ Found ${result.files.length} configuration file${result.files.length === 1 ? \"\" : \"s\"}:`));\n for (const file of result.files) {\n console.log(chalk.gray(` ${file}`));\n }\n console.log();\n\n if (result.errors.length > 0) {\n console.log(chalk.red(`✗ ${result.errors.length} error${result.errors.length === 1 ? \"\" : \"s\"}:`));\n for (const error of result.errors) {\n console.log(chalk.red(` ${error}`));\n }\n console.log();\n }\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow(`⚠ ${result.warnings.length} warning${result.warnings.length === 1 ? \"\" : \"s\"}:`));\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` ${warning}`));\n }\n console.log();\n }\n\n if (result.valid) {\n console.log(chalk.green(\"✅ Validation passed!\"));\n } else {\n console.log(chalk.red(\"❌ Validation failed. Fix the errors above.\"));\n }\n console.log();\n }\n}\n\n\n\n","/**\n * Diff command - show changes between local and remote blueprints\n * \n * Compares local AI configuration files with their linked cloud blueprints.\n * If no blueprint is linked, prompts user to link one first.\n * \n * Usage:\n * lynxp diff - Compare all tracked files with their cloud blueprints\n * lynxp diff <file> - Compare specific file with its linked blueprint\n * lynxp diff --local - Show diff between .lynxprompt/rules/ and exported files\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport { isAuthenticated } from \"../config.js\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { checkSyncStatus, findBlueprintByFile } from \"../utils/blueprint-tracker.js\";\n\ninterface DiffOptions {\n local?: boolean;\n}\n\n/**\n * Simple line-by-line diff implementation\n * Returns added (+), removed (-), and unchanged lines\n */\nfunction computeDiff(oldText: string, newText: string): Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }> {\n const oldLines = oldText.split(\"\\n\");\n const newLines = newText.split(\"\\n\");\n const result: Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }> = [];\n\n // Simple LCS-based diff\n const lcs = longestCommonSubsequence(oldLines, newLines);\n \n let oldIndex = 0;\n let newIndex = 0;\n let lcsIndex = 0;\n\n while (oldIndex < oldLines.length || newIndex < newLines.length) {\n if (lcsIndex < lcs.length && oldIndex < oldLines.length && oldLines[oldIndex] === lcs[lcsIndex]) {\n if (newIndex < newLines.length && newLines[newIndex] === lcs[lcsIndex]) {\n // Line is in both - unchanged\n result.push({ type: \"same\", line: oldLines[oldIndex] });\n oldIndex++;\n newIndex++;\n lcsIndex++;\n } else {\n // Line is in new but not in LCS position - added\n result.push({ type: \"add\", line: newLines[newIndex] });\n newIndex++;\n }\n } else if (oldIndex < oldLines.length && (lcsIndex >= lcs.length || oldLines[oldIndex] !== lcs[lcsIndex])) {\n // Line is in old but not in LCS - removed\n result.push({ type: \"remove\", line: oldLines[oldIndex] });\n oldIndex++;\n } else if (newIndex < newLines.length) {\n // Line is in new but not in old - added\n result.push({ type: \"add\", line: newLines[newIndex] });\n newIndex++;\n }\n }\n\n return result;\n}\n\n/**\n * Find the longest common subsequence of lines\n */\nfunction longestCommonSubsequence(a: string[], b: string[]): string[] {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0));\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n // Backtrack to find the LCS\n const lcs: string[] = [];\n let i = m;\n let j = n;\n while (i > 0 && j > 0) {\n if (a[i - 1] === b[j - 1]) {\n lcs.unshift(a[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] > dp[i][j - 1]) {\n i--;\n } else {\n j--;\n }\n }\n\n return lcs;\n}\n\n/**\n * Format diff output with colors\n */\nfunction formatDiff(diff: Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }>, contextLines: number = 3): string {\n const output: string[] = [];\n let lastPrintedIndex = -1;\n \n // Find sections with changes\n const changeIndices = diff.map((d, i) => d.type !== \"same\" ? i : -1).filter(i => i !== -1);\n \n if (changeIndices.length === 0) {\n return chalk.gray(\" (no changes)\");\n }\n\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n const nearChange = changeIndices.some(ci => Math.abs(ci - i) <= contextLines);\n\n if (nearChange) {\n // Print separator if there's a gap\n if (lastPrintedIndex !== -1 && i - lastPrintedIndex > 1) {\n output.push(chalk.gray(\" ...\"));\n }\n\n // Format the line based on type\n if (item.type === \"add\") {\n output.push(chalk.green(`+ ${item.line}`));\n } else if (item.type === \"remove\") {\n output.push(chalk.red(`- ${item.line}`));\n } else {\n output.push(chalk.gray(` ${item.line}`));\n }\n lastPrintedIndex = i;\n }\n }\n\n return output.join(\"\\n\");\n}\n\n/**\n * Get summary statistics for a diff\n */\nfunction getDiffStats(diff: Array<{ type: \"add\" | \"remove\" | \"same\"; line: string }>): { added: number; removed: number; unchanged: number } {\n return {\n added: diff.filter(d => d.type === \"add\").length,\n removed: diff.filter(d => d.type === \"remove\").length,\n unchanged: diff.filter(d => d.type === \"same\").length,\n };\n}\n\nexport async function diffCommand(fileOrId?: string, options: DiffOptions = {}): Promise<void> {\n console.log();\n console.log(chalk.cyan(\"🐱 LynxPrompt Diff\"));\n console.log();\n\n const cwd = process.cwd();\n\n // Local diff mode - compare .lynxprompt/rules/ with exported files\n if (options.local) {\n await diffLocal(cwd);\n return;\n }\n\n // Check for tracked blueprints first\n const trackedFiles = await checkSyncStatus(cwd);\n \n // If a specific file or blueprint ID is given\n if (fileOrId) {\n // Check if it's a tracked file\n const tracked = await findBlueprintByFile(cwd, fileOrId);\n if (tracked) {\n await diffFileWithBlueprint(cwd, fileOrId, tracked.id);\n return;\n }\n \n // Otherwise treat it as a blueprint ID\n await diffWithBlueprintId(cwd, fileOrId);\n return;\n }\n\n // No argument given - show diff for all tracked files\n if (trackedFiles.length === 0) {\n console.log(chalk.yellow(\"No tracked blueprints found.\"));\n console.log();\n console.log(chalk.gray(\"To track a blueprint and compare changes:\"));\n console.log(chalk.gray(\" 1. Pull a blueprint: lynxp pull <blueprint-id>\"));\n console.log(chalk.gray(\" 2. Or link an existing file: lynxp link\"));\n console.log();\n console.log(chalk.gray(\"Other options:\"));\n console.log(chalk.gray(\" lynxp diff --local Compare .lynxprompt/rules/ with exported files\"));\n return;\n }\n\n // Show diff for all tracked files\n let hasChanges = false;\n \n for (const { blueprint, localModified, fileExists } of trackedFiles) {\n if (!fileExists) {\n console.log(chalk.red(`✗ ${blueprint.file} - file not found`));\n continue;\n }\n \n console.log(chalk.cyan(`📄 ${blueprint.file}`));\n console.log(chalk.gray(` Linked to: ${blueprint.name} (${blueprint.id})`));\n \n if (localModified) {\n hasChanges = true;\n await diffFileWithBlueprint(cwd, blueprint.file, blueprint.id, true);\n } else {\n console.log(chalk.green(\" ✓ In sync with cloud\"));\n }\n console.log();\n }\n \n if (!hasChanges) {\n console.log(chalk.green(\"✓ All tracked files are in sync with their cloud blueprints!\"));\n } else {\n console.log(chalk.gray(\"To push local changes: lynxp push\"));\n console.log(chalk.gray(\"To pull cloud changes: lynxp pull <id>\"));\n }\n console.log();\n}\n\n/**\n * Compare a specific file with its linked blueprint\n */\nasync function diffFileWithBlueprint(cwd: string, file: string, blueprintId: string, compact: boolean = false): Promise<void> {\n const filePath = join(cwd, file);\n \n if (!existsSync(filePath)) {\n console.log(chalk.red(`✗ File not found: ${file}`));\n return;\n }\n\n const spinner = compact ? null : ora(\"Fetching blueprint...\").start();\n\n try {\n const { blueprint } = await api.getBlueprint(blueprintId);\n spinner?.stop();\n\n if (!blueprint || !blueprint.content) {\n console.log(chalk.red(`✗ Blueprint has no content`));\n return;\n }\n\n const localContent = await readFile(filePath, \"utf-8\");\n const diff = computeDiff(blueprint.content, localContent);\n const stats = getDiffStats(diff);\n\n if (stats.added === 0 && stats.removed === 0) {\n if (!compact) {\n console.log(chalk.green(\"✓ Files are identical!\"));\n }\n } else {\n if (!compact) {\n console.log(chalk.gray(\"Changes (cloud → local):\"));\n console.log();\n }\n console.log(formatDiff(diff));\n console.log(chalk.gray(` ${chalk.green(`+${stats.added}`)} ${chalk.red(`-${stats.removed}`)} lines`));\n }\n\n } catch (error) {\n spinner?.stop();\n if (error instanceof ApiRequestError) {\n console.log(chalk.red(`✗ Could not fetch blueprint: ${error.message}`));\n } else {\n console.log(chalk.red(\"✗ Failed to compare\"));\n }\n }\n}\n\n/**\n * Compare with a specific blueprint ID (legacy behavior)\n */\nasync function diffWithBlueprintId(cwd: string, blueprintId: string): Promise<void> {\n // Check if logged in\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"⚠ Not logged in. Some blueprints may not be accessible.\"));\n console.log(chalk.gray(\"Run 'lynxp login' to authenticate.\"));\n console.log();\n }\n\n const spinner = ora(\"Fetching blueprint...\").start();\n\n try {\n const { blueprint } = await api.getBlueprint(blueprintId);\n spinner.stop();\n\n if (!blueprint || !blueprint.content) {\n console.log(chalk.red(`✗ Blueprint not found or has no content: ${blueprintId}`));\n return;\n }\n\n console.log(chalk.green(`✓ Blueprint: ${blueprint.name || blueprintId}`));\n if (blueprint.description) {\n console.log(chalk.gray(` ${blueprint.description}`));\n }\n console.log();\n\n // Determine local file path based on blueprint type\n const localPaths = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursor/rules/project.mdc\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n ];\n\n let localContent: string | null = null;\n let localPath: string | null = null;\n\n for (const path of localPaths) {\n const fullPath = join(cwd, path);\n if (existsSync(fullPath)) {\n try {\n localContent = await readFile(fullPath, \"utf-8\");\n localPath = path;\n break;\n } catch {\n // Continue to next path\n }\n }\n }\n\n if (!localContent) {\n console.log(chalk.yellow(\"⚠ No local AI configuration file found.\"));\n console.log(chalk.gray(\"Run 'lynxp wizard' to create one, or 'lynxp pull' to download the blueprint.\"));\n return;\n }\n\n console.log(chalk.gray(`Comparing with: ${localPath}`));\n console.log();\n\n // Compute and display diff\n const diff = computeDiff(blueprint.content, localContent);\n const stats = getDiffStats(diff);\n\n if (stats.added === 0 && stats.removed === 0) {\n console.log(chalk.green(\"✓ Files are identical!\"));\n } else {\n console.log(chalk.gray(\"Changes (remote → local):\"));\n console.log();\n console.log(formatDiff(diff));\n console.log();\n console.log(chalk.gray(`Summary: ${chalk.green(`+${stats.added}`)} ${chalk.red(`-${stats.removed}`)} lines changed`));\n }\n console.log();\n\n } catch (error) {\n spinner.stop();\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 401) {\n console.log(chalk.red(\"✗ Authentication required. Run 'lynxp login' first.\"));\n } else if (error.statusCode === 404) {\n console.log(chalk.red(`✗ Blueprint not found: ${blueprintId}`));\n } else if (error.statusCode === 403) {\n console.log(chalk.red(\"✗ Access denied to this blueprint.\"));\n } else {\n console.log(chalk.red(`✗ API error: ${error.message}`));\n }\n } else {\n console.log(chalk.red(\"✗ Failed to fetch blueprint\"));\n if (error instanceof Error) {\n console.log(chalk.gray(` ${error.message}`));\n }\n }\n }\n}\n\n/**\n * Compare .lynxprompt/rules/ with exported agent files\n */\nasync function diffLocal(cwd: string): Promise<void> {\n const rulesDir = join(cwd, \".lynxprompt/rules\");\n \n if (!existsSync(rulesDir)) {\n console.log(chalk.yellow(\"⚠ No .lynxprompt/rules/ directory found.\"));\n console.log(chalk.gray(\"Run 'lynxp init' to set up the advanced workflow, or 'lynxp wizard' for simple file generation.\"));\n return;\n }\n\n console.log(chalk.gray(\"Comparing .lynxprompt/rules/ with exported files...\"));\n console.log();\n\n // Read the rules file(s)\n const rulesPath = join(rulesDir, \"agents.md\");\n if (!existsSync(rulesPath)) {\n console.log(chalk.yellow(\"⚠ No rules files found in .lynxprompt/rules/\"));\n return;\n }\n\n let rulesContent: string;\n try {\n rulesContent = await readFile(rulesPath, \"utf-8\");\n } catch {\n console.log(chalk.red(\"✗ Could not read .lynxprompt/rules/agents.md\"));\n return;\n }\n\n // Compare with each exported file\n const exportedFiles = [\n { path: \"AGENTS.md\", name: \"AGENTS.md\" },\n { path: \".cursor/rules/lynxprompt-rules.mdc\", name: \"Cursor\" },\n ];\n\n let hasChanges = false;\n\n for (const file of exportedFiles) {\n const filePath = join(cwd, file.path);\n if (existsSync(filePath)) {\n try {\n const exportedContent = await readFile(filePath, \"utf-8\");\n \n // For MDC files, strip frontmatter for comparison\n let compareContent = exportedContent;\n if (file.path.endsWith(\".mdc\")) {\n const frontmatterEnd = exportedContent.indexOf(\"---\", 3);\n if (frontmatterEnd !== -1) {\n compareContent = exportedContent.substring(frontmatterEnd + 3).trim();\n }\n }\n\n // Strip headers added by sync\n compareContent = compareContent\n .replace(/^# AI Coding Rules\\n\\n> Generated by \\[LynxPrompt\\].*\\n\\n/m, \"\")\n .trim();\n\n const diff = computeDiff(rulesContent.trim(), compareContent);\n const stats = getDiffStats(diff);\n\n if (stats.added > 0 || stats.removed > 0) {\n hasChanges = true;\n console.log(chalk.yellow(`⚠ ${file.name} differs from source:`));\n console.log(formatDiff(diff));\n console.log(chalk.gray(` ${chalk.green(`+${stats.added}`)} ${chalk.red(`-${stats.removed}`)} lines`));\n console.log();\n } else {\n console.log(chalk.green(`✓ ${file.name} is in sync`));\n }\n } catch {\n // File exists but couldn't be read\n }\n }\n }\n\n if (!hasChanges) {\n console.log();\n console.log(chalk.green(\"✓ All exported files are in sync with .lynxprompt/rules/\"));\n } else {\n console.log();\n console.log(chalk.gray(\"Run 'lynxp sync' to update exported files from .lynxprompt/rules/\"));\n }\n console.log();\n}\n\n","/**\n * Link command - connect a local file to a cloud blueprint\n * \n * This is for when a user has a local file that matches a cloud blueprint\n * and wants to start tracking it without overwriting the local version.\n * \n * Usage:\n * lynxp link - Interactive mode (recommended)\n * lynxp link <file> <blueprint-id> - Link local file to cloud blueprint\n * lynxp link --list - List all tracked blueprints\n * lynxp unlink - Interactive mode (recommended)\n * lynxp unlink <file> - Disconnect a file from its blueprint\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\nimport { api, ApiRequestError, Blueprint } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\nimport { join } from \"path\";\nimport { existsSync } from \"fs\";\nimport {\n linkBlueprint,\n untrackBlueprint,\n findBlueprintByFile,\n checkSyncStatus,\n type BlueprintSource,\n} from \"../utils/blueprint-tracker.js\";\n\ninterface LinkOptions {\n list?: boolean;\n}\n\n// Determine blueprint source from visibility\nfunction getSourceFromVisibility(visibility: Blueprint[\"visibility\"]): BlueprintSource {\n switch (visibility) {\n case \"PUBLIC\":\n return \"marketplace\";\n case \"TEAM\":\n return \"team\";\n case \"PRIVATE\":\n return \"private\";\n default:\n return \"marketplace\";\n }\n}\n\nexport async function linkCommand(\n fileArg?: string,\n blueprintIdArg?: string,\n options: LinkOptions = {}\n): Promise<void> {\n const cwd = process.cwd();\n\n // List tracked blueprints\n if (options.list) {\n await listTrackedBlueprints(cwd);\n return;\n }\n\n console.log();\n console.log(chalk.cyan(\"🐱 Link File to Blueprint\"));\n console.log();\n\n let file: string;\n let blueprintId: string | undefined = blueprintIdArg;\n\n // Interactive mode - guide the user through linking\n if (!fileArg) {\n // Find AI config files in the project\n const configFiles = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursor/rules/project.mdc\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n \".zed/instructions.md\",\n \".clinerules\",\n ];\n\n const foundFiles = configFiles.filter(f => existsSync(join(cwd, f)));\n\n if (foundFiles.length === 0) {\n console.log(chalk.yellow(\"No AI configuration files found in this directory.\"));\n console.log();\n console.log(chalk.gray(\"Create one first:\"));\n console.log(chalk.gray(\" lynxp wizard Generate a new config file\"));\n console.log(chalk.gray(\" lynxp pull <id> Download from marketplace\"));\n return;\n }\n\n // Let user select which file to link\n const { selectedFile } = await prompts({\n type: \"select\",\n name: \"selectedFile\",\n message: \"Which file do you want to link to a cloud blueprint?\",\n choices: foundFiles.map(f => ({\n title: f,\n value: f,\n description: \"Local file exists\",\n })),\n });\n\n if (!selectedFile) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n file = selectedFile;\n } else {\n file = fileArg;\n }\n\n // Check if file exists\n const filePath = join(cwd, file);\n if (!existsSync(filePath)) {\n console.log(chalk.red(`✗ File not found: ${file}`));\n return;\n }\n\n // Check if already linked\n const existing = await findBlueprintByFile(cwd, file);\n if (existing) {\n console.log(chalk.yellow(`This file is already linked to: ${existing.name}`));\n console.log(chalk.gray(` ID: ${existing.id}`));\n console.log();\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Replace the existing link?\",\n initial: false,\n });\n if (!proceed) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n }\n\n // Interactive mode - help find the blueprint\n if (!blueprintId) {\n // Check authentication\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You need to login to access your blueprints.\"));\n const { doLogin } = await prompts({\n type: \"confirm\",\n name: \"doLogin\",\n message: \"Login now?\",\n initial: true,\n });\n if (doLogin) {\n console.log(chalk.gray(\"Run 'lynxp login' in another terminal, then come back here.\"));\n return;\n }\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n // Let user choose how to find the blueprint\n const { searchMethod } = await prompts({\n type: \"select\",\n name: \"searchMethod\",\n message: \"How do you want to find the blueprint?\",\n choices: [\n { title: \"📋 From my blueprints\", value: \"list\" },\n { title: \"🔍 Search marketplace\", value: \"search\" },\n { title: \"🔢 Enter ID directly\", value: \"manual\" },\n ],\n });\n\n if (!searchMethod) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n if (searchMethod === \"list\") {\n // Fetch user's blueprints\n const spinner = ora(\"Fetching your blueprints...\").start();\n try {\n const { blueprints } = await api.listBlueprints();\n spinner.stop();\n\n if (!blueprints || blueprints.length === 0) {\n console.log(chalk.yellow(\"You don't have any blueprints yet.\"));\n console.log(chalk.gray(\"Create one with 'lynxp push' or search the marketplace.\"));\n return;\n }\n\n const { selected } = await prompts({\n type: \"select\",\n name: \"selected\",\n message: \"Select a blueprint:\",\n choices: blueprints.map(b => ({\n title: b.name,\n value: b.id,\n description: b.description?.substring(0, 50) || \"\",\n })),\n });\n\n if (!selected) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n blueprintId = selected;\n } catch {\n spinner.stop();\n console.log(chalk.red(\"✗ Could not fetch blueprints\"));\n return;\n }\n } else if (searchMethod === \"search\") {\n const { query } = await prompts({\n type: \"text\",\n name: \"query\",\n message: \"Search for:\",\n });\n\n if (!query) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n const spinner = ora(`Searching for \"${query}\"...`).start();\n try {\n const results = await api.searchBlueprints(query, 10);\n spinner.stop();\n\n if (!results.templates || results.templates.length === 0) {\n console.log(chalk.yellow(`No blueprints found for \"${query}\"`));\n return;\n }\n\n const { selected } = await prompts({\n type: \"select\",\n name: \"selected\",\n message: \"Select a blueprint:\",\n choices: results.templates.map(b => ({\n title: `${b.name} (★ ${b.likes})`,\n value: b.id,\n description: b.author ? `by ${b.author}` : \"\",\n })),\n });\n\n if (!selected) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n blueprintId = selected;\n } catch {\n spinner.stop();\n console.log(chalk.red(\"✗ Search failed\"));\n return;\n }\n } else {\n const { manualId } = await prompts({\n type: \"text\",\n name: \"manualId\",\n message: \"Enter blueprint ID:\",\n });\n\n if (!manualId) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n blueprintId = manualId;\n }\n }\n\n // At this point we must have both file and blueprintId\n if (!blueprintId) {\n console.log(chalk.red(\"✗ No blueprint ID provided.\"));\n return;\n }\n\n // Fetch blueprint info and link\n const spinner = ora(`Fetching blueprint ${chalk.cyan(blueprintId)}...`).start();\n\n try {\n const { blueprint } = await api.getBlueprint(blueprintId);\n spinner.stop();\n\n const source = getSourceFromVisibility(blueprint.visibility);\n const isMarketplace = source === \"marketplace\";\n\n console.log();\n console.log(chalk.cyan(`🐱 Blueprint: ${chalk.bold(blueprint.name)}`));\n if (blueprint.description) {\n console.log(chalk.gray(` ${blueprint.description}`));\n }\n console.log(chalk.gray(` Visibility: ${blueprint.visibility}`));\n console.log();\n\n // Show warning for marketplace blueprints\n if (isMarketplace) {\n console.log(chalk.yellow(\"⚠ This is a marketplace blueprint.\"));\n console.log(chalk.gray(\" Your local changes will NOT sync back to the cloud.\"));\n console.log(chalk.gray(\" To make changes, you'll need to create your own copy.\"));\n console.log();\n }\n\n // Confirm linking\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: `Link ${chalk.cyan(file)} to ${chalk.cyan(blueprint.name)}?`,\n initial: true,\n });\n\n if (!confirm) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n // Link the file\n await linkBlueprint(cwd, file, blueprint.id, blueprint.name, source);\n\n console.log();\n console.log(chalk.green(`✅ Linked: ${file} → ${blueprint.id}`));\n console.log();\n\n // Show next steps\n console.log(chalk.gray(\"Next steps:\"));\n console.log(chalk.gray(` • Run 'lynxp diff' to see differences`));\n console.log(chalk.gray(` • Run 'lynxp status' to see all tracked blueprints`));\n if (!isMarketplace) {\n console.log(chalk.gray(` • Run 'lynxp push' to push local changes to cloud`));\n }\n console.log();\n\n } catch (error) {\n spinner.stop();\n if (error instanceof ApiRequestError) {\n if (error.statusCode === 404) {\n console.log(chalk.red(`✗ Blueprint not found: ${blueprintId}`));\n console.log(chalk.gray(\" Make sure the ID is correct. Use 'lynxp list' or 'lynxp search' to find blueprints.\"));\n } else if (error.statusCode === 403) {\n console.log(chalk.red(\"✗ You don't have access to this blueprint.\"));\n } else {\n console.log(chalk.red(`✗ Error: ${error.message}`));\n }\n } else {\n console.log(chalk.red(\"✗ An unexpected error occurred.\"));\n }\n }\n}\n\nexport async function unlinkCommand(fileArg?: string): Promise<void> {\n const cwd = process.cwd();\n\n console.log();\n console.log(chalk.cyan(\"🐱 Unlink File from Blueprint\"));\n console.log();\n\n let file: string;\n\n // Interactive mode - show tracked files and let user select\n if (!fileArg) {\n const status = await checkSyncStatus(cwd);\n \n if (status.length === 0) {\n console.log(chalk.yellow(\"No files are currently linked to blueprints.\"));\n return;\n }\n\n const { selectedFile } = await prompts({\n type: \"select\",\n name: \"selectedFile\",\n message: \"Which file do you want to unlink?\",\n choices: status.map(({ blueprint }) => ({\n title: blueprint.file,\n value: blueprint.file,\n description: `${blueprint.name} (${blueprint.source})`,\n })),\n });\n\n if (!selectedFile) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n file = selectedFile;\n } else {\n file = fileArg;\n }\n\n // Check if file is tracked\n const tracked = await findBlueprintByFile(cwd, file);\n if (!tracked) {\n console.log(chalk.yellow(`File is not linked to any blueprint: ${file}`));\n return;\n }\n\n console.log(chalk.gray(`Currently linked to: ${tracked.name}`));\n console.log(chalk.gray(` ID: ${tracked.id}`));\n console.log(chalk.gray(` Source: ${tracked.source}`));\n console.log();\n\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: `Unlink ${chalk.cyan(file)} from ${chalk.cyan(tracked.name)}?`,\n initial: true,\n });\n\n if (!confirm) {\n console.log(chalk.gray(\"Cancelled.\"));\n return;\n }\n\n const success = await untrackBlueprint(cwd, file);\n \n if (success) {\n console.log();\n console.log(chalk.green(`✅ Unlinked: ${file}`));\n console.log(chalk.gray(\" The file is now standalone. Changes won't sync with the cloud.\"));\n console.log();\n } else {\n console.log(chalk.red(\"✗ Failed to unlink file.\"));\n }\n}\n\nasync function listTrackedBlueprints(cwd: string): Promise<void> {\n console.log();\n console.log(chalk.cyan(\"🐱 Tracked Blueprints\"));\n console.log();\n\n const status = await checkSyncStatus(cwd);\n\n if (status.length === 0) {\n console.log(chalk.gray(\"No blueprints are currently tracked.\"));\n console.log();\n console.log(chalk.gray(\"To track a blueprint:\"));\n console.log(chalk.gray(\" lynxp pull <blueprint-id> Download and track a blueprint\"));\n console.log(chalk.gray(\" lynxp link Link an existing file to a blueprint\"));\n return;\n }\n\n for (const { blueprint, localModified, fileExists } of status) {\n const statusIcon = !fileExists\n ? chalk.red(\"✗\")\n : localModified\n ? chalk.yellow(\"●\")\n : chalk.green(\"✓\");\n \n const sourceLabel = {\n marketplace: chalk.gray(\"[marketplace]\"),\n team: chalk.blue(\"[team]\"),\n private: chalk.green(\"[private]\"),\n local: chalk.gray(\"[local]\"),\n }[blueprint.source];\n\n console.log(`${statusIcon} ${chalk.cyan(blueprint.file)}`);\n console.log(` ${sourceLabel} ${blueprint.name}`);\n console.log(` ${chalk.gray(`ID: ${blueprint.id}`)}`);\n \n if (!fileExists) {\n console.log(chalk.red(` ⚠ File not found`));\n } else if (localModified) {\n console.log(chalk.yellow(` ⚠ Local changes detected`));\n }\n \n console.log();\n }\n\n console.log(chalk.gray(\"Legend:\"));\n console.log(chalk.gray(` ${chalk.green(\"✓\")} In sync ${chalk.yellow(\"●\")} Modified locally ${chalk.red(\"✗\")} Missing`));\n console.log();\n}\n","#!/usr/bin/env node\n/**\n * LynxPrompt CLI - Analyze Command\n * \n * Standalone project analyzer that detects project configuration\n * without generating any files.\n */\n\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { detectProject, detectFromRemoteUrl, isGitUrl, detectRepoHost } from \"../utils/detect.js\";\n\ninterface AnalyzeOptions {\n json?: boolean;\n remote?: string;\n}\n\nexport async function analyzeCommand(options: AnalyzeOptions): Promise<void> {\n console.log();\n \n if (!options.json) {\n console.log(chalk.cyan.bold(\" 🔍 LynxPrompt Analyzer\"));\n console.log(chalk.gray(\" Detect project configuration and tech stack\"));\n console.log();\n }\n\n let detected;\n let source = \"local\";\n\n // Check for remote URL option\n if (options.remote) {\n if (!isGitUrl(options.remote)) {\n if (!options.json) {\n console.log(chalk.red(\" ✗ Invalid Git URL provided\"));\n }\n process.exit(1);\n }\n\n const host = detectRepoHost(options.remote);\n const method = host === \"github\" ? \"GitHub API\" : host === \"gitlab\" ? \"GitLab API\" : \"shallow clone\";\n\n if (!options.json) {\n const spinner = ora(`Analyzing remote repository via ${method}...`).start();\n detected = await detectFromRemoteUrl(options.remote);\n \n if (detected) {\n spinner.succeed(\"Remote repository analyzed\");\n } else {\n spinner.fail(\"Could not analyze repository\");\n console.log(chalk.gray(\" The repository may be private or inaccessible.\"));\n process.exit(1);\n }\n } else {\n detected = await detectFromRemoteUrl(options.remote);\n if (!detected) {\n console.log(JSON.stringify({ error: \"Could not analyze repository\" }));\n process.exit(1);\n }\n }\n \n source = options.remote;\n } else {\n // Analyze current directory\n if (!options.json) {\n const spinner = ora(\"Analyzing current directory...\").start();\n detected = await detectProject(process.cwd());\n \n if (detected) {\n spinner.succeed(\"Project analyzed\");\n } else {\n spinner.info(\"No project detected\");\n }\n } else {\n detected = await detectProject(process.cwd());\n }\n }\n\n // Output results\n if (options.json) {\n console.log(JSON.stringify({\n source,\n detected: detected || null,\n }, null, 2));\n return;\n }\n\n console.log();\n\n if (!detected) {\n console.log(chalk.yellow(\" No project configuration detected.\"));\n console.log();\n console.log(chalk.gray(\" Tips:\"));\n console.log(chalk.gray(\" • Make sure you're in a project directory with a package.json, pyproject.toml, etc.\"));\n console.log(chalk.gray(\" • Use --remote <url> to analyze a remote repository\"));\n console.log();\n return;\n }\n\n // Display analysis results\n console.log(chalk.green.bold(\" 📊 Project Analysis\"));\n console.log();\n \n // Basic info\n console.log(chalk.white(\" Basic Info\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n console.log(` ${chalk.dim(\"Name:\")} ${chalk.white(detected.name || \"unknown\")}`);\n if (detected.description) {\n console.log(` ${chalk.dim(\"Description:\")} ${chalk.gray(detected.description)}`);\n }\n console.log(` ${chalk.dim(\"Type:\")} ${chalk.white(detected.type || \"application\")}`);\n if (detected.license) {\n console.log(` ${chalk.dim(\"License:\")} ${chalk.white(detected.license.toUpperCase())}`);\n }\n console.log();\n\n // Tech Stack\n console.log(chalk.white(\" Tech Stack\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n if (detected.stack.length > 0) {\n for (const tech of detected.stack) {\n console.log(` ${chalk.cyan(\"•\")} ${tech}`);\n }\n } else {\n console.log(chalk.gray(\" No tech stack detected\"));\n }\n console.log();\n\n // Infrastructure\n console.log(chalk.white(\" Infrastructure\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n console.log(` ${chalk.dim(\"Package Manager:\")} ${detected.packageManager || chalk.gray(\"none detected\")}`);\n console.log(` ${chalk.dim(\"Repo Host:\")} ${detected.repoHost || chalk.gray(\"none detected\")}`);\n console.log(` ${chalk.dim(\"CI/CD:\")} ${detected.cicd || chalk.gray(\"none detected\")}`);\n console.log(` ${chalk.dim(\"Docker:\")} ${detected.hasDocker ? chalk.green(\"yes\") : chalk.gray(\"no\")}`);\n console.log();\n\n // Commands\n if (detected.commands && Object.keys(detected.commands).length > 0) {\n console.log(chalk.white(\" Commands\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n for (const [key, value] of Object.entries(detected.commands)) {\n if (value) {\n const cmdValue = Array.isArray(value) ? value.join(\", \") : value;\n console.log(` ${chalk.dim(key.padEnd(10))} ${chalk.yellow(cmdValue)}`);\n }\n }\n console.log();\n }\n\n // Recommendations\n console.log(chalk.white(\" 💡 Recommendations\"));\n console.log(chalk.gray(\" ─────────────────────────────────────────\"));\n \n const recommendations: string[] = [];\n \n // Check for missing common configs\n if (!detected.cicd) {\n recommendations.push(\"Add CI/CD configuration (GitHub Actions, GitLab CI, etc.)\");\n }\n if (!detected.hasDocker && detected.type === \"application\") {\n recommendations.push(\"Consider adding Docker for containerization\");\n }\n if (!detected.stack.some(s => [\"vitest\", \"jest\", \"pytest\", \"mocha\"].includes(s))) {\n recommendations.push(\"Add a test framework (vitest, jest, pytest, etc.)\");\n }\n if (!detected.commands?.lint) {\n recommendations.push(\"Add a linting command (eslint, ruff, clippy, etc.)\");\n }\n if (!detected.license) {\n recommendations.push(\"Add a LICENSE file for open source projects\");\n }\n\n if (recommendations.length > 0) {\n for (const rec of recommendations) {\n console.log(` ${chalk.yellow(\"•\")} ${rec}`);\n }\n } else {\n console.log(chalk.green(\" ✓ Project looks well-configured!\"));\n }\n \n console.log();\n console.log(chalk.gray(\" Run 'lynxp wizard' to generate AI IDE configuration\"));\n console.log();\n}\n\n","#!/usr/bin/env node\n/**\n * LynxPrompt CLI - Convert Command\n * \n * Convert AI IDE configuration files between different formats.\n * E.g., AGENTS.md → .cursorrules, CLAUDE.md → copilot-instructions.md\n */\n\nimport chalk from \"chalk\";\nimport { readFile, writeFile, access } from \"fs/promises\";\nimport { join, basename } from \"path\";\nimport ora from \"ora\";\n\ninterface ConvertOptions {\n output?: string;\n force?: boolean;\n}\n\n// Supported source file patterns and their platforms\nconst SOURCE_FILES: Record<string, string> = {\n \"agents.md\": \"agents\",\n \"claude.md\": \"claude\",\n \".cursorrules\": \"cursor_legacy\",\n \".cursor/rules/project.mdc\": \"cursor\",\n \"cursor.rules/project.mdc\": \"cursor\",\n \"project.mdc\": \"cursor\",\n \".github/copilot-instructions.md\": \"copilot\",\n \"copilot-instructions.md\": \"copilot\",\n \".windsurfrules\": \"windsurf\",\n \".clinerules\": \"cline\",\n \".aider.conf.yml\": \"aider\",\n};\n\n// Target format to output filename (30+ platforms)\nconst TARGET_FILES: Record<string, string> = {\n // Popular platforms\n universal: \"AGENTS.md\",\n agents: \"AGENTS.md\",\n cursor: \".cursor/rules/project.mdc\",\n cursor_legacy: \".cursorrules\",\n claude: \"CLAUDE.md\",\n copilot: \".github/copilot-instructions.md\",\n windsurf: \".windsurfrules\",\n // AI-powered IDEs\n antigravity: \"GEMINI.md\",\n zed: \".zed/instructions.md\",\n void: \".void/config.json\",\n trae: \".trae/rules/project.mdc\",\n firebase: \".idx/rules/project.mdc\",\n // Editor extensions\n cline: \".clinerules\",\n roocode: \".roo/rules/project.mdc\",\n continue: \".continue/config.json\",\n cody: \".cody/config.json\",\n tabnine: \".tabnine.yaml\",\n supermaven: \".supermaven/config.json\",\n codegpt: \".codegpt/config.json\",\n amazonq: \".amazonq/rules/project.md\",\n augment: \".augment/rules/project.mdc\",\n kilocode: \".kilocode/rules/project.mdc\",\n junie: \".junie/guidelines.md\",\n kiro: \".kiro/steering/project.mdc\",\n // CLI tools\n aider: \".aider.conf.yml\",\n goose: \".goosehints\",\n warp: \"WARP.md\",\n \"gemini-cli\": \"GEMINI.md\",\n opencode: \"opencode.json\",\n codex: \"codex.md\",\n // Other emerging tools\n openhands: \".openhands/microagents/repo.md\",\n crush: \"CRUSH.md\",\n firebender: \"firebender.json\",\n // Command targets\n \"cursor-command\": \".cursor/commands/command.md\",\n \"claude-command\": \".claude/commands/command.md\",\n \"windsurf-workflow\": \".windsurf/workflows/workflow.md\",\n \"copilot-prompt\": \".copilot/prompts/prompt.md\",\n \"continue-prompt\": \".continue/prompts/prompt.md\",\n \"opencode-command\": \".opencode/commands/command.md\",\n};\n\n// Platform display names\nconst PLATFORM_NAMES: Record<string, string> = {\n universal: \"AGENTS.md (Universal)\",\n agents: \"AGENTS.md (Universal)\",\n cursor: \"Cursor Rules (.mdc)\",\n cursor_legacy: \"Cursor Rules (legacy)\",\n claude: \"CLAUDE.md\",\n copilot: \"GitHub Copilot\",\n windsurf: \"Windsurf\",\n antigravity: \"Antigravity (Gemini IDE)\",\n zed: \"Zed\",\n void: \"Void\",\n trae: \"Trae AI\",\n firebase: \"Firebase Studio\",\n cline: \"Cline\",\n roocode: \"Roo Code\",\n continue: \"Continue\",\n cody: \"Sourcegraph Cody\",\n tabnine: \"Tabnine\",\n supermaven: \"Supermaven\",\n codegpt: \"CodeGPT\",\n amazonq: \"Amazon Q\",\n augment: \"Augment Code\",\n kilocode: \"Kilo Code\",\n junie: \"Junie\",\n kiro: \"Kiro\",\n aider: \"Aider\",\n goose: \"Goose\",\n warp: \"Warp AI\",\n \"gemini-cli\": \"Gemini CLI\",\n opencode: \"OpenCode\",\n codex: \"Codex\",\n openhands: \"OpenHands\",\n crush: \"Crush\",\n firebender: \"Firebender\",\n \"cursor-command\": \"Cursor Command\",\n \"claude-command\": \"Claude Code Command\",\n \"windsurf-workflow\": \"Windsurf Workflow\",\n \"copilot-prompt\": \"Copilot Prompt\",\n \"continue-prompt\": \"Continue Prompt\",\n \"opencode-command\": \"OpenCode Command\",\n};\n\n// Command directory patterns for detection\nconst COMMAND_DIRS: Record<string, string> = {\n \".cursor/commands\": \"cursor-command\",\n \".claude/commands\": \"claude-command\",\n \".windsurf/workflows\": \"windsurf-workflow\",\n \".copilot/prompts\": \"copilot-prompt\",\n \".continue/prompts\": \"continue-prompt\",\n \".opencode/commands\": \"opencode-command\",\n};\n\n// Check if a target is a command type\nconst isCommandTarget = (target: string) => target.includes(\"-command\") || target.includes(\"-prompt\") || target.includes(\"-workflow\");\n\nasync function detectSourceFile(cwd: string): Promise<{ path: string; platform: string } | null> {\n // Try to find a source file in common locations\n for (const [pattern, platform] of Object.entries(SOURCE_FILES)) {\n try {\n const fullPath = join(cwd, pattern);\n await access(fullPath);\n return { path: fullPath, platform };\n } catch {\n // File doesn't exist, try next\n }\n }\n \n // Try uppercase variants\n const uppercaseVariants = [\"AGENTS.md\", \"CLAUDE.md\"];\n for (const variant of uppercaseVariants) {\n try {\n const fullPath = join(cwd, variant);\n await access(fullPath);\n const platform = variant.toLowerCase().replace(\".md\", \"\");\n return { path: fullPath, platform };\n } catch {\n // File doesn't exist\n }\n }\n \n return null;\n}\n\n/**\n * Detect if a source path is a command file\n */\nfunction detectCommandPlatform(sourcePath: string): string | null {\n const normalized = sourcePath.replace(/\\\\/g, \"/\").toLowerCase();\n for (const [dir, platform] of Object.entries(COMMAND_DIRS)) {\n if (normalized.includes(dir)) {\n return platform;\n }\n }\n return null;\n}\n\nfunction parseMarkdownConfig(content: string): Record<string, string> {\n const config: Record<string, string> = {};\n \n // Extract sections from markdown\n const sections = content.split(/^##\\s+/m);\n \n for (const section of sections) {\n const lines = section.trim().split(\"\\n\");\n if (lines.length === 0) continue;\n \n const title = lines[0].toLowerCase().trim();\n const body = lines.slice(1).join(\"\\n\").trim();\n \n config[title] = body;\n }\n \n // Try to extract key info\n config._raw = content;\n \n return config;\n}\n\nfunction generateTargetContent(config: Record<string, string>, targetPlatform: string): string {\n const rawContent = config._raw || \"\";\n \n // Commands are all plain markdown - no conversion needed between command types\n // They just go in different directories\n if (isCommandTarget(targetPlatform)) {\n return rawContent;\n }\n \n // For simple conversions, adapt the content format\n switch (targetPlatform) {\n case \"cursor\":\n // MDC format with frontmatter\n return `---\ndescription: \"AI coding rules\"\nglobs: [\"**/*\"]\nalwaysApply: true\n---\n\n${rawContent.replace(/^#\\s+.*$/m, \"# AI Assistant Configuration\")}\n`;\n\n case \"cursor_legacy\":\n // Plain text format\n return rawContent\n .replace(/^#\\s+/gm, \"\")\n .replace(/^##\\s+/gm, \"\\n\")\n .replace(/^###\\s+/gm, \"\")\n .trim();\n\n case \"windsurf\":\n case \"cline\":\n case \"goose\":\n // Plain text format\n return rawContent\n .replace(/^#\\s+/gm, \"=== \")\n .replace(/^##\\s+/gm, \"--- \")\n .replace(/^###\\s+/gm, \"\")\n .replace(/\\*\\*/g, \"\")\n .trim();\n\n case \"trae\":\n case \"roocode\":\n case \"augment\":\n case \"kilocode\":\n case \"kiro\":\n case \"firebase\":\n // MDC format (same as cursor)\n return `---\ndescription: \"AI coding rules\"\nglobs: [\"**/*\"]\nalwaysApply: true\n---\n\n${rawContent.replace(/^#\\s+.*$/m, \"# AI Assistant Configuration\")}\n`;\n\n case \"aider\":\n // YAML format (simplified)\n return `# Aider configuration\n# Converted from AI IDE configuration\n\nlint-cmd: []\nauto-test: false\nread: []\n# AI rules converted below as conventions\nconventions:\n${rawContent\n .split(\"\\n\")\n .filter(line => line.trim() && !line.startsWith(\"#\"))\n .map(line => ` - \"${line.replace(/\"/g, '\\\\\"').trim()}\"`)\n .slice(0, 20)\n .join(\"\\n\")}\n`;\n\n case \"tabnine\":\n // Tabnine YAML format\n return `# Tabnine configuration\n# Converted from AI IDE configuration\ninstructions: |\n${rawContent.split(\"\\n\").map(line => ` ${line}`).join(\"\\n\")}\n`;\n\n case \"void\":\n case \"continue\":\n case \"cody\":\n case \"codegpt\":\n case \"supermaven\":\n case \"opencode\":\n case \"firebender\":\n // JSON config format\n return JSON.stringify({ instructions: rawContent }, null, 2) + \"\\n\";\n\n case \"copilot\":\n // GitHub Copilot markdown format\n return `# GitHub Copilot Instructions\\n\\n${rawContent}\\n`;\n\n case \"agents\":\n case \"universal\":\n case \"claude\":\n case \"codex\":\n case \"antigravity\":\n case \"gemini-cli\":\n case \"zed\":\n case \"amazonq\":\n case \"junie\":\n case \"warp\":\n case \"openhands\":\n case \"crush\":\n default:\n // Standard markdown format\n return rawContent;\n }\n}\n\nexport async function convertCommand(\n source: string | undefined,\n target: string,\n options: ConvertOptions\n): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 🔄 LynxPrompt Convert\"));\n console.log(chalk.gray(\" Convert AI IDE configuration between formats\"));\n console.log();\n\n const cwd = process.cwd();\n \n // Find source file\n let sourcePath: string;\n let sourcePlatform: string;\n \n if (source) {\n sourcePath = join(cwd, source);\n // Check if it's a command file first\n const cmdPlatform = detectCommandPlatform(source);\n if (cmdPlatform) {\n sourcePlatform = cmdPlatform;\n } else {\n // Detect platform from filename\n const sourceBasename = basename(source).toLowerCase();\n sourcePlatform = SOURCE_FILES[sourceBasename] || \"unknown\";\n }\n } else {\n const detected = await detectSourceFile(cwd);\n if (!detected) {\n console.log(chalk.red(\" ✗ No AI configuration file found in current directory\"));\n console.log();\n console.log(chalk.gray(\" Supported source files:\"));\n for (const file of Object.keys(SOURCE_FILES)) {\n console.log(chalk.gray(` • ${file}`));\n }\n console.log();\n console.log(chalk.gray(\" Command directories (for slash commands):\"));\n for (const dir of Object.keys(COMMAND_DIRS)) {\n console.log(chalk.gray(` • ${dir}/*.md`));\n }\n console.log();\n console.log(chalk.gray(\" Usage: lynxp convert <source> <target>\"));\n console.log(chalk.gray(\" Example: lynxp convert AGENTS.md cursor\"));\n console.log(chalk.gray(\" Example: lynxp convert .cursor/commands/deploy.md claude-command\"));\n process.exit(1);\n }\n sourcePath = detected.path;\n sourcePlatform = detected.platform;\n }\n\n // Validate target format — try exact match, then underscore variant\n const targetLower = target.toLowerCase();\n const normalizedTarget = TARGET_FILES[targetLower] ? targetLower : targetLower.replace(/-/g, \"_\");\n if (!TARGET_FILES[normalizedTarget]) {\n console.log(chalk.red(` ✗ Unknown target format: ${target}`));\n console.log();\n console.log(chalk.gray(\" Supported target formats:\"));\n for (const [key, name] of Object.entries(PLATFORM_NAMES)) {\n console.log(chalk.gray(` • ${key.padEnd(15)} → ${name}`));\n }\n process.exit(1);\n }\n\n // Read source file\n let sourceContent: string;\n try {\n sourceContent = await readFile(sourcePath, \"utf-8\");\n } catch {\n console.log(chalk.red(` ✗ Could not read source file: ${sourcePath}`));\n process.exit(1);\n }\n\n console.log(chalk.white(` Source: ${basename(sourcePath)} (${PLATFORM_NAMES[sourcePlatform] || sourcePlatform})`));\n console.log(chalk.white(` Target: ${PLATFORM_NAMES[normalizedTarget]}`));\n console.log();\n\n // Parse and convert\n const spinner = ora(\"Converting configuration...\").start();\n \n const config = parseMarkdownConfig(sourceContent);\n const targetContent = generateTargetContent(config, normalizedTarget);\n \n spinner.stop();\n\n // Determine output path\n let outputFilename = options.output || TARGET_FILES[normalizedTarget];\n \n // For commands, preserve original filename but change directory\n if (isCommandTarget(normalizedTarget) && !options.output) {\n const originalFilename = basename(sourcePath);\n const targetDir = TARGET_FILES[normalizedTarget].split(\"/\").slice(0, -1).join(\"/\");\n outputFilename = `${targetDir}/${originalFilename}`;\n }\n \n const outputPath = join(cwd, outputFilename);\n\n // Check if output exists\n try {\n await access(outputPath);\n if (!options.force) {\n console.log(chalk.yellow(` ⚠️ File already exists: ${outputFilename}`));\n console.log(chalk.gray(\" Use --force to overwrite\"));\n process.exit(1);\n }\n } catch {\n // File doesn't exist, good to write\n }\n\n // Write output\n try {\n // Create directory if needed\n const { mkdir } = await import(\"fs/promises\");\n const outputDir = join(cwd, outputFilename.split(\"/\").slice(0, -1).join(\"/\"));\n if (outputDir !== cwd) {\n await mkdir(outputDir, { recursive: true });\n }\n \n await writeFile(outputPath, targetContent, \"utf-8\");\n \n console.log(chalk.green(` ✓ Converted to ${outputFilename}`));\n console.log();\n console.log(chalk.gray(` Lines: ${targetContent.split(\"\\n\").length}`));\n console.log(chalk.gray(` Size: ${targetContent.length} bytes`));\n console.log();\n } catch (error) {\n console.log(chalk.red(` ✗ Could not write output: ${error instanceof Error ? error.message : \"unknown error\"}`));\n process.exit(1);\n }\n}\n\n\n\n\n\n\n\n\n\n","#!/usr/bin/env node\n/**\n * LynxPrompt CLI - Merge Command\n * \n * Merge two or more AI IDE configuration files into one.\n * Useful for combining rules from different sources or team configs.\n */\n\nimport chalk from \"chalk\";\nimport { readFile, writeFile, access } from \"fs/promises\";\nimport { join, basename } from \"path\";\nimport ora from \"ora\";\nimport prompts from \"prompts\";\n\ninterface MergeOptions {\n output?: string;\n strategy?: \"concat\" | \"sections\" | \"smart\";\n force?: boolean;\n interactive?: boolean;\n}\n\ninterface ConfigSection {\n title: string;\n content: string;\n source: string;\n}\n\nfunction parseMarkdownSections(content: string, sourceName: string): ConfigSection[] {\n const sections: ConfigSection[] = [];\n const parts = content.split(/^(#{1,3})\\s+(.+)$/m);\n \n let currentSection: ConfigSection | null = null;\n \n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n \n if (part.match(/^#{1,3}$/)) {\n // This is a header marker, next part is title\n if (currentSection) {\n sections.push(currentSection);\n }\n const title = parts[i + 1] || \"Untitled\";\n currentSection = {\n title: title.trim(),\n content: \"\",\n source: sourceName,\n };\n i++; // Skip the title part\n } else if (currentSection) {\n currentSection.content += part;\n } else if (part.trim()) {\n // Content before first header\n currentSection = {\n title: \"Introduction\",\n content: part,\n source: sourceName,\n };\n }\n }\n \n if (currentSection) {\n sections.push(currentSection);\n }\n \n return sections;\n}\n\nfunction mergeSectionsByStrategy(\n allSections: ConfigSection[][],\n strategy: \"concat\" | \"sections\" | \"smart\"\n): string {\n switch (strategy) {\n case \"concat\":\n // Simple concatenation with separators\n return allSections\n .map((sections, i) => {\n const sourceName = sections[0]?.source || `Source ${i + 1}`;\n const content = sections.map(s => {\n if (s.title !== \"Introduction\") {\n return `## ${s.title}\\n\\n${s.content.trim()}`;\n }\n return s.content.trim();\n }).join(\"\\n\\n\");\n \n return `<!-- From: ${sourceName} -->\\n${content}`;\n })\n .join(\"\\n\\n---\\n\\n\");\n\n case \"sections\":\n // Group by section title\n const sectionMap = new Map<string, ConfigSection[]>();\n \n for (const fileSections of allSections) {\n for (const section of fileSections) {\n const normalized = section.title.toLowerCase();\n if (!sectionMap.has(normalized)) {\n sectionMap.set(normalized, []);\n }\n sectionMap.get(normalized)!.push(section);\n }\n }\n \n const merged: string[] = [];\n \n for (const [, sections] of sectionMap) {\n if (sections.length === 1) {\n merged.push(`## ${sections[0].title}\\n\\n${sections[0].content.trim()}`);\n } else {\n // Multiple sources for same section - combine\n const combinedContent = sections\n .map(s => `<!-- From: ${s.source} -->\\n${s.content.trim()}`)\n .join(\"\\n\\n\");\n merged.push(`## ${sections[0].title}\\n\\n${combinedContent}`);\n }\n }\n \n return merged.join(\"\\n\\n\");\n\n case \"smart\":\n default:\n // Smart merge: dedupe similar content, prioritize by specificity\n const seen = new Set<string>();\n const result: string[] = [];\n \n // Sort sections: more specific first\n const flatSections = allSections.flat().sort((a, b) => {\n // Prioritize sections with more content\n return b.content.length - a.content.length;\n });\n \n for (const section of flatSections) {\n // Simple deduplication by checking content similarity\n const contentKey = section.content\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 200); // First 200 chars as key\n \n if (!seen.has(contentKey)) {\n seen.add(contentKey);\n if (section.title !== \"Introduction\") {\n result.push(`## ${section.title}\\n\\n${section.content.trim()}`);\n } else {\n result.push(section.content.trim());\n }\n }\n }\n \n return result.join(\"\\n\\n\");\n }\n}\n\nexport async function mergeCommand(\n files: string[],\n options: MergeOptions\n): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 🔀 LynxPrompt Merge\"));\n console.log(chalk.gray(\" Merge multiple AI IDE configuration files\"));\n console.log();\n\n // Validate input\n if (files.length < 2) {\n console.log(chalk.red(\" ✗ Please provide at least 2 files to merge\"));\n console.log();\n console.log(chalk.gray(\" Usage: lynxp merge <file1> <file2> [...files]\"));\n console.log(chalk.gray(\" Example: lynxp merge AGENTS.md team-rules.md --output merged.md\"));\n console.log();\n console.log(chalk.gray(\" Options:\"));\n console.log(chalk.gray(\" --output <file> Output filename (default: merged.md)\"));\n console.log(chalk.gray(\" --strategy <type> Merge strategy: concat, sections, smart (default: smart)\"));\n console.log(chalk.gray(\" --force Overwrite existing output file\"));\n console.log(chalk.gray(\" --interactive Review and select sections to include\"));\n process.exit(1);\n }\n\n const cwd = process.cwd();\n const strategy = options.strategy || \"smart\";\n \n console.log(chalk.white(` Files to merge: ${files.length}`));\n console.log(chalk.white(` Strategy: ${strategy}`));\n console.log();\n\n // Read all files\n const allSections: ConfigSection[][] = [];\n \n for (const file of files) {\n const filePath = join(cwd, file);\n \n try {\n await access(filePath);\n } catch {\n console.log(chalk.red(` ✗ File not found: ${file}`));\n process.exit(1);\n }\n \n try {\n const content = await readFile(filePath, \"utf-8\");\n const sections = parseMarkdownSections(content, basename(file));\n allSections.push(sections);\n console.log(chalk.gray(` ✓ Read ${file} (${sections.length} sections)`));\n } catch (error) {\n console.log(chalk.red(` ✗ Could not read ${file}: ${error instanceof Error ? error.message : \"unknown\"}`));\n process.exit(1);\n }\n }\n \n console.log();\n\n // Interactive mode: let user select sections\n if (options.interactive) {\n const flatSections = allSections.flatMap((sections, i) => \n sections.map(s => ({ ...s, fileIndex: i }))\n );\n \n const choices = flatSections.map((section, i) => ({\n title: `[${section.source}] ${section.title}`,\n value: i,\n selected: true,\n }));\n \n const response = await prompts({\n type: \"multiselect\",\n name: \"sections\",\n message: \"Select sections to include:\",\n choices,\n instructions: false,\n hint: \"- Space to toggle, Enter to confirm\",\n });\n \n if (!response.sections || response.sections.length === 0) {\n console.log(chalk.yellow(\" No sections selected, aborting.\"));\n process.exit(0);\n }\n \n // Filter to selected sections\n const selectedSections = response.sections.map((i: number) => flatSections[i]);\n allSections.length = 0;\n allSections.push(selectedSections);\n }\n\n // Merge\n const spinner = ora(\"Merging configurations...\").start();\n const mergedContent = mergeSectionsByStrategy(allSections, strategy);\n spinner.stop();\n\n // Add header\n const finalContent = `# AI Assistant Configuration (Merged)\n\n<!-- \n Merged from: ${files.join(\", \")}\n Strategy: ${strategy}\n Date: ${new Date().toISOString()}\n-->\n\n${mergedContent}\n`;\n\n // Determine output path\n const outputFilename = options.output || \"merged.md\";\n const outputPath = join(cwd, outputFilename);\n\n // Check if output exists\n try {\n await access(outputPath);\n if (!options.force) {\n console.log(chalk.yellow(` ⚠️ File already exists: ${outputFilename}`));\n console.log(chalk.gray(\" Use --force to overwrite\"));\n process.exit(1);\n }\n } catch {\n // File doesn't exist, good to write\n }\n\n // Write output\n try {\n await writeFile(outputPath, finalContent, \"utf-8\");\n \n console.log(chalk.green(` ✓ Merged to ${outputFilename}`));\n console.log();\n console.log(chalk.gray(` Sources: ${files.length} files`));\n console.log(chalk.gray(` Lines: ${finalContent.split(\"\\n\").length}`));\n console.log(chalk.gray(` Size: ${finalContent.length} bytes`));\n console.log();\n } catch (error) {\n console.log(chalk.red(` ✗ Could not write output: ${error instanceof Error ? error.message : \"unknown error\"}`));\n process.exit(1);\n }\n}\n\n","import chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport ora from \"ora\";\nimport { readFile, access, readdir } from \"fs/promises\";\nimport { join, relative, dirname, basename } from \"path\";\n\nimport { detectCommandFiles } from \"../utils/detect.js\";\n\n// Import command configuration\nconst CONFIG_FILE_PATTERNS = [\n \"AGENTS.md\",\n \"CLAUDE.md\",\n \".cursorrules\", // Legacy\n \".windsurfrules\",\n];\n\n// Command directories are defined in detect.ts\n// All commands are plain markdown - conversion is just renaming to different directories\n\ninterface AgentsMdFile {\n path: string; // Full path to file\n relativePath: string; // Path relative to scan root\n depth: number; // Directory depth from root\n name: string; // Extracted project name (from content or dir)\n parentPath?: string; // Parent AGENTS.md if in a monorepo\n content: string; // Raw file content\n sections: ParsedSection[];\n}\n\ninterface ParsedSection {\n title: string;\n content: string;\n level: number; // Heading level (1-6)\n}\n\ninterface ImportOptions {\n dryRun?: boolean;\n recursive?: boolean;\n depth?: number;\n pattern?: string;\n link?: boolean;\n verbose?: boolean;\n json?: boolean;\n}\n\ninterface ImportResult {\n totalFound: number;\n files: AgentsMdFile[];\n hierarchy: MonorepoHierarchy[];\n errors: string[];\n}\n\ninterface MonorepoHierarchy {\n rootPath: string;\n root?: AgentsMdFile;\n children: AgentsMdFile[];\n}\n\n/**\n * Scan a directory for AGENTS.md and similar config files\n */\nasync function scanDirectory(\n rootPath: string,\n options: ImportOptions = {}\n): Promise<AgentsMdFile[]> {\n const maxDepth = options.depth ?? 10;\n const files: AgentsMdFile[] = [];\n const patterns = options.pattern \n ? [options.pattern] \n : CONFIG_FILE_PATTERNS;\n\n async function scan(dir: string, depth: number): Promise<void> {\n if (depth > maxDepth) return;\n\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n // Skip common non-project directories\n if (entry.isDirectory()) {\n const skipDirs = [\n \"node_modules\", \".git\", \".next\", \"dist\", \"build\", \"out\",\n \"coverage\", \".cache\", \"__pycache__\", \"venv\", \".venv\",\n \"target\", \"vendor\", \".idea\", \".vscode\"\n ];\n if (skipDirs.includes(entry.name)) continue;\n\n if (options.recursive !== false) {\n await scan(fullPath, depth + 1);\n }\n } else if (entry.isFile()) {\n // Check if file matches our patterns\n if (patterns.includes(entry.name)) {\n try {\n const content = await readFile(fullPath, \"utf-8\");\n const relativePath = relative(rootPath, fullPath);\n \n files.push({\n path: fullPath,\n relativePath,\n depth,\n name: extractProjectName(content, dirname(fullPath)),\n content,\n sections: parseMarkdownSections(content),\n });\n } catch {\n // Skip files we can't read\n }\n }\n }\n }\n } catch {\n // Skip directories we can't access\n }\n }\n\n await scan(rootPath, 0);\n return files;\n}\n\n/**\n * Extract project name from AGENTS.md content or directory name\n */\nfunction extractProjectName(content: string, dirPath: string): string {\n // Try to find project name in common patterns\n const patterns = [\n /^#\\s+(.+?)(?:\\s*-|$)/m, // # Project Name or # Project Name - Description\n /Project(?:\\s+Overview)?[:\\s]*(.+?)(?:\\n|$)/i,\n /Name[:\\s]*(.+?)(?:\\n|$)/i,\n ];\n\n for (const pattern of patterns) {\n const match = content.match(pattern);\n if (match && match[1]) {\n const name = match[1].trim().replace(/[#*`]/g, \"\").trim();\n if (name && name.length < 100) {\n return name;\n }\n }\n }\n\n // Fall back to directory name\n return basename(dirPath) || \"Unnamed\";\n}\n\n/**\n * Parse markdown content into sections\n */\nfunction parseMarkdownSections(content: string): ParsedSection[] {\n const sections: ParsedSection[] = [];\n const lines = content.split(\"\\n\");\n let currentSection: ParsedSection | null = null;\n let contentLines: string[] = [];\n\n for (const line of lines) {\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n \n if (headingMatch) {\n // Save previous section\n if (currentSection) {\n currentSection.content = contentLines.join(\"\\n\").trim();\n sections.push(currentSection);\n }\n \n currentSection = {\n title: headingMatch[2].trim(),\n content: \"\",\n level: headingMatch[1].length,\n };\n contentLines = [];\n } else {\n contentLines.push(line);\n }\n }\n\n // Don't forget the last section\n if (currentSection) {\n currentSection.content = contentLines.join(\"\\n\").trim();\n sections.push(currentSection);\n }\n\n return sections;\n}\n\n/**\n * Build hierarchy from flat list of files\n */\nfunction buildHierarchy(files: AgentsMdFile[], _rootPath: string): MonorepoHierarchy[] {\n const hierarchies: MonorepoHierarchy[] = [];\n \n // Sort by path depth (root files first)\n const sorted = [...files].sort((a, b) => a.depth - b.depth);\n \n // Find potential roots (depth 0 or 1)\n const potentialRoots = sorted.filter(f => f.depth <= 1);\n \n if (potentialRoots.length === 0 && files.length > 0) {\n // No clear root, treat each file as its own hierarchy\n return files.map(f => ({\n rootPath: dirname(f.path),\n root: f,\n children: [],\n }));\n }\n\n // For each potential root, find children\n for (const root of potentialRoots) {\n const rootDir = dirname(root.path);\n const children = files.filter(f => {\n if (f === root) return false;\n // Child must be under root's directory\n return f.path.startsWith(rootDir + \"/\") && f.depth > root.depth;\n });\n\n // Set parent references\n for (const child of children) {\n child.parentPath = root.relativePath;\n }\n\n hierarchies.push({\n rootPath: rootDir,\n root,\n children,\n });\n }\n\n // Handle orphan files (not under any root)\n const assignedPaths = new Set(hierarchies.flatMap(h => [h.root?.path, ...h.children.map(c => c.path)]));\n const orphans = files.filter(f => !assignedPaths.has(f.path));\n \n for (const orphan of orphans) {\n hierarchies.push({\n rootPath: dirname(orphan.path),\n root: orphan,\n children: [],\n });\n }\n\n return hierarchies;\n}\n\n/**\n * Display import results\n */\nfunction displayResults(result: ImportResult, options: ImportOptions): void {\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log();\n console.log(chalk.cyan.bold(\" 📥 Import Results\"));\n console.log();\n\n if (result.totalFound === 0) {\n console.log(chalk.yellow(\" No AGENTS.md or compatible files found.\"));\n console.log(chalk.gray(\" Try running from your project root, or use --pattern to specify custom filenames.\"));\n return;\n }\n\n console.log(chalk.green(` Found ${result.totalFound} configuration file(s)`));\n console.log();\n\n // Display hierarchy\n for (const hierarchy of result.hierarchy) {\n const isMonorepo = hierarchy.children.length > 0;\n \n if (hierarchy.root) {\n const icon = isMonorepo ? \"🏢\" : \"📄\";\n const typeLabel = isMonorepo ? chalk.magenta(\"[Monorepo Root]\") : chalk.blue(\"[Standalone]\");\n console.log(` ${icon} ${chalk.white.bold(hierarchy.root.name)} ${typeLabel}`);\n console.log(chalk.gray(` ${hierarchy.root.relativePath}`));\n \n // Show sections summary\n if (options.verbose && hierarchy.root.sections.length > 0) {\n const sectionNames = hierarchy.root.sections.slice(0, 5).map(s => s.title);\n console.log(chalk.gray(` Sections: ${sectionNames.join(\", \")}${hierarchy.root.sections.length > 5 ? \"...\" : \"\"}`));\n }\n }\n\n // Show children\n for (const child of hierarchy.children) {\n console.log(` └─ 📄 ${chalk.white(child.name)}`);\n console.log(chalk.gray(` ${child.relativePath}`));\n \n if (options.verbose && child.sections.length > 0) {\n const sectionNames = child.sections.slice(0, 3).map(s => s.title);\n console.log(chalk.gray(` Sections: ${sectionNames.join(\", \")}${child.sections.length > 3 ? \"...\" : \"\"}`));\n }\n }\n console.log();\n }\n\n // Summary\n const monorepoCount = result.hierarchy.filter(h => h.children.length > 0).length;\n const standaloneCount = result.hierarchy.filter(h => h.children.length === 0).length;\n \n if (monorepoCount > 0) {\n console.log(chalk.cyan(` 📊 ${monorepoCount} monorepo(s) detected with hierarchical configs`));\n }\n if (standaloneCount > 0) {\n console.log(chalk.cyan(` 📊 ${standaloneCount} standalone config(s)`));\n }\n\n // Errors\n if (result.errors.length > 0) {\n console.log();\n console.log(chalk.yellow(\" ⚠️ Warnings:\"));\n for (const error of result.errors) {\n console.log(chalk.gray(` ${error}`));\n }\n }\n}\n\n/**\n * Main import command\n */\nexport async function importCommand(path: string = \".\", options: ImportOptions): Promise<void> {\n console.log();\n console.log(chalk.cyan.bold(\" 📥 LynxPrompt Import\"));\n console.log(chalk.gray(\" Scan and import AGENTS.md files and AI commands from your repository\"));\n console.log();\n\n // Resolve the path\n const rootPath = join(process.cwd(), path);\n \n // Check if path exists\n try {\n await access(rootPath);\n } catch {\n console.log(chalk.red(` ✗ Path not found: ${rootPath}`));\n process.exit(1);\n }\n\n const spinner = ora(\"Scanning for configuration files and commands...\").start();\n\n try {\n // Scan for config files\n const files = await scanDirectory(rootPath, options);\n \n // Also scan for command files\n const commands = await detectCommandFiles(rootPath);\n \n const totalFound = files.length + commands.length;\n \n if (totalFound === 0) {\n spinner.warn(\"No configuration files or commands found\");\n console.log();\n console.log(chalk.gray(\" Looking for:\"));\n console.log(chalk.gray(\" • Rules: AGENTS.md, CLAUDE.md, .cursorrules, .windsurfrules\"));\n console.log(chalk.gray(\" • Commands: .cursor/commands/*.md, .claude/commands/*.md\"));\n console.log(chalk.gray(\" Try specifying a different path or use --pattern for custom filenames\"));\n return;\n }\n\n spinner.succeed(`Found ${files.length} configuration file(s) and ${commands.length} command(s)`);\n\n // Build hierarchy\n const hierarchy = buildHierarchy(files, rootPath);\n\n const result: ImportResult = {\n totalFound: totalFound,\n files,\n hierarchy,\n errors: [],\n };\n\n // Display results\n displayResults(result, options);\n \n // Display command files if found\n if (commands.length > 0) {\n console.log();\n console.log(chalk.cyan.bold(\" ⚡ AI Agent Commands\"));\n console.log();\n \n // Group commands by type\n const cursorCommands = commands.filter(c => c.type === \"cursor-command\");\n const claudeCommands = commands.filter(c => c.type === \"claude-command\");\n \n if (cursorCommands.length > 0) {\n console.log(chalk.blue(` Cursor Commands (${cursorCommands.length}):`));\n for (const cmd of cursorCommands) {\n console.log(chalk.gray(` ⚡ ${cmd.name}`));\n console.log(chalk.gray(` ${relative(rootPath, cmd.path)}`));\n }\n console.log();\n }\n \n if (claudeCommands.length > 0) {\n console.log(chalk.yellow(` Claude Commands (${claudeCommands.length}):`));\n for (const cmd of claudeCommands) {\n console.log(chalk.gray(` 🧠 ${cmd.name}`));\n console.log(chalk.gray(` ${relative(rootPath, cmd.path)}`));\n }\n console.log();\n }\n \n console.log(chalk.cyan(\" 💡 Push commands with: lynxp push .cursor/commands/my-command.md\"));\n }\n\n // Dry run mode - stop here\n if (options.dryRun) {\n console.log(chalk.yellow(\" 📋 Dry run complete - no changes made\"));\n console.log(chalk.gray(\" Remove --dry-run to proceed with import\"));\n return;\n }\n\n // Ask what to do with the files\n if (!options.json) {\n console.log();\n const { action } = await prompts({\n type: \"select\",\n name: \"action\",\n message: \"What would you like to do?\",\n choices: [\n { title: \"Preview only (done)\", value: \"preview\" },\n { title: \"Convert all to AGENTS.md format\", value: \"convert\" },\n { title: \"Save hierarchy info for wizard\", value: \"save\" },\n { title: \"Push to LynxPrompt cloud as blueprints\", value: \"push\" },\n ],\n initial: 0,\n });\n\n switch (action) {\n case \"convert\":\n console.log(chalk.cyan(\"\\n 💡 Use 'lynxp convert <file> agents' to convert individual files\"));\n console.log(chalk.cyan(\" or 'lynxp merge <files...>' to combine multiple configs\\n\"));\n break;\n case \"save\":\n // Save to .lynxprompt/hierarchy.json for wizard reference\n await saveHierarchyInfo(rootPath, result);\n break;\n case \"push\":\n console.log(chalk.cyan(\"\\n 💡 Use 'lynxp push <file>' to push files individually\"));\n console.log(chalk.cyan(\" Requires login: 'lynxp login'\\n\"));\n break;\n default:\n // Preview only - done\n break;\n }\n }\n } catch (error) {\n spinner.fail(\"Import failed\");\n console.error(chalk.red(` Error: ${error instanceof Error ? error.message : \"Unknown error\"}`));\n process.exit(1);\n }\n}\n\n/**\n * Save hierarchy info for wizard to use\n */\nasync function saveHierarchyInfo(rootPath: string, result: ImportResult): Promise<void> {\n const { writeFile, mkdir } = await import(\"fs/promises\");\n const configDir = join(rootPath, \".lynxprompt\");\n \n try {\n await mkdir(configDir, { recursive: true });\n \n const hierarchyInfo = {\n scannedAt: new Date().toISOString(),\n rootPath,\n totalFiles: result.totalFound,\n hierarchy: result.hierarchy.map(h => ({\n rootPath: h.rootPath,\n rootFile: h.root?.relativePath,\n rootName: h.root?.name,\n children: h.children.map(c => ({\n path: c.relativePath,\n name: c.name,\n sections: c.sections.map(s => s.title),\n })),\n })),\n };\n\n await writeFile(\n join(configDir, \"hierarchy.json\"),\n JSON.stringify(hierarchyInfo, null, 2),\n \"utf-8\"\n );\n\n console.log(chalk.green(\"\\n ✓ Hierarchy saved to .lynxprompt/hierarchy.json\"));\n console.log(chalk.gray(\" The wizard will use this to understand your monorepo structure\"));\n } catch (error) {\n console.error(chalk.red(` ✗ Failed to save hierarchy: ${error instanceof Error ? error.message : \"Unknown\"}`));\n }\n}\n\nexport { ImportOptions, ImportResult, AgentsMdFile };\n\n","import chalk from \"chalk\";\nimport ora from \"ora\";\nimport { api, ApiRequestError } from \"../api.js\";\nimport { isAuthenticated } from \"../config.js\";\n\ninterface HierarchiesOptions {\n limit?: number;\n json?: boolean;\n}\n\nexport async function hierarchiesCommand(\n options: HierarchiesOptions\n): Promise<void> {\n // Check authentication\n if (!isAuthenticated()) {\n console.log(chalk.yellow(\"You need to be logged in to view hierarchies.\"));\n console.log(chalk.gray(\"Run 'lynxp login' to authenticate.\"));\n process.exit(1);\n }\n\n const spinner = ora(\"Fetching hierarchies...\").start();\n\n try {\n const response = await api.listHierarchies({\n limit: options.limit || 50,\n });\n \n spinner.stop();\n\n // JSON output mode\n if (options.json) {\n console.log(JSON.stringify(response, null, 2));\n return;\n }\n\n const { hierarchies, total } = response;\n\n if (hierarchies.length === 0) {\n console.log();\n console.log(chalk.yellow(\"No hierarchies found.\"));\n console.log();\n console.log(chalk.gray(\"Hierarchies are created automatically when you push AGENTS.md files from a repository.\"));\n console.log(chalk.gray(\"Run 'lynxp push AGENTS.md' in a git repository to create a hierarchy.\"));\n console.log();\n return;\n }\n\n console.log();\n console.log(chalk.cyan(`📁 Your Hierarchies (${total} total)`));\n console.log();\n\n for (const hierarchy of hierarchies) {\n console.log(chalk.bold(` ${hierarchy.name}`));\n console.log(chalk.gray(` ID: ${hierarchy.id}`));\n if (hierarchy.description) {\n console.log(chalk.gray(` ${hierarchy.description}`));\n }\n console.log(chalk.gray(` Blueprints: ${hierarchy.blueprint_count || 0}`));\n console.log(chalk.gray(` Repository: ${hierarchy.repository_root.slice(0, 16)}...`));\n console.log();\n }\n\n console.log(chalk.gray(\"─\".repeat(50)));\n console.log();\n console.log(chalk.gray(\"Tips:\"));\n console.log(chalk.gray(` • Pull entire hierarchy: lynxp pull <hierarchy_id>`));\n console.log(chalk.gray(` • View hierarchy details: lynxp hierarchy <hierarchy_id>`));\n console.log(chalk.gray(` • Sync local changes: lynxp sync`));\n console.log();\n } catch (error) {\n spinner.fail(\"Failed to fetch hierarchies\");\n handleError(error);\n }\n}\n\nfunction handleError(error: unknown): void {\n if (error instanceof ApiRequestError) {\n console.error(chalk.red(`Error: ${error.message}`));\n if (error.statusCode === 401) {\n console.error(chalk.gray(\"Your session may have expired. Run 'lynxp login' to re-authenticate.\"));\n } else if (error.statusCode === 403) {\n console.error(chalk.gray(\"You don't have permission to access hierarchies.\"));\n }\n } else {\n console.error(chalk.red(\"An unexpected error occurred.\"));\n }\n process.exit(1);\n}\n\n\n\n","import chalk from \"chalk\";\nimport { getApiUrl, setApiUrl, getConfigPath } from \"../config.js\";\n\nexport async function configCommand(\n action?: string,\n valueArg?: string,\n): Promise<void> {\n if (!action || action === \"show\") {\n console.log();\n console.log(chalk.cyan(\"⚙️ LynxPrompt CLI Configuration\"));\n console.log();\n console.log(\n chalk.white(\" API URL: \") + chalk.green(getApiUrl()),\n );\n console.log(\n chalk.white(\" Config: \") + chalk.gray(getConfigPath()),\n );\n if (process.env.LYNXPROMPT_API_URL) {\n console.log(\n chalk.gray(\n \" (API URL overridden by LYNXPROMPT_API_URL env var)\",\n ),\n );\n }\n console.log();\n return;\n }\n\n if (action === \"set-url\") {\n if (!valueArg) {\n console.error(\n chalk.red(\"Usage: lynxp config set-url <url>\"),\n );\n process.exit(1);\n }\n try {\n new URL(valueArg);\n } catch {\n console.error(chalk.red(`Invalid URL: ${valueArg}`));\n process.exit(1);\n }\n const clean = valueArg.replace(/\\/+$/, \"\");\n setApiUrl(clean);\n console.log(\n chalk.green(\"✓\") +\n ` API URL set to ${chalk.cyan(clean)}`,\n );\n console.log(\n chalk.gray(\" Run 'lynxp login' to authenticate with this instance.\"),\n );\n return;\n }\n\n if (action === \"reset-url\") {\n setApiUrl(\"https://api.lynxprompt.com\");\n console.log(\n chalk.green(\"✓\") +\n \" API URL reset to \" +\n chalk.cyan(\"https://api.lynxprompt.com\"),\n );\n return;\n }\n\n if (action === \"path\") {\n console.log(getConfigPath());\n return;\n }\n\n console.error(chalk.red(`Unknown config action: ${action}`));\n console.error(chalk.gray(\"Available: show, set-url <url>, reset-url, path\"));\n process.exit(1);\n}\n"],"mappings":"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","names":["chalk","platform","chalk","chalk","chalk","ora","chalk","ora","chalk","ora","chalk","ora","chalk","ora","writeFile","mkdir","readFile","join","dirname","config","config","config","fileExists","chalk","ora","path","join","dirname","mkdir","writeFile","handleApiError","readFile","chalk","ora","createHash","prompts","readFile","access","join","path","readdir","chalk","createHash","ora","prompts","dirname","chalk","prompts","ora","writeFile","mkdir","access","readFile","join","dirname","platform","path","config","LANGUAGES","FRAMEWORKS","DATABASES","PACKAGE_MANAGERS","MONOREPO_TOOLS","JS_RUNTIMES","ORM_OPTIONS","PROJECT_TYPES","ARCHITECTURE_PATTERNS","DEV_OS_OPTIONS","REPO_HOSTS","CICD_OPTIONS","LICENSES","BRANCH_STRATEGIES","DEFAULT_BRANCHES","SELF_HOSTED_TARGETS","CLOUD_TARGETS","DEPLOYMENT_TARGETS","CONTAINER_REGISTRIES","VERSION_TAG_FORMATS","CHANGELOG_OPTIONS","VPN_OPTIONS","GITOPS_TOOLS","AI_BEHAVIOR_RULES","IMPORTANT_FILES","PLAN_MODE_FREQUENCY","AUTH_PROVIDERS","SECRETS_MANAGEMENT_OPTIONS","SECURITY_TOOLING_OPTIONS","AUTH_PATTERNS_OPTIONS","DATA_HANDLING_OPTIONS","COMPLIANCE_OPTIONS","ANALYTICS_OPTIONS","NAMING_CONVENTIONS","LOGGING_OPTIONS","BOUNDARY_OPTIONS","TEST_LEVELS","TEST_FRAMEWORKS","config","join","mkdir","writeFile","readFile","access","fs","STATIC_FILE_PATHS","chalk","LANGUAGES","FRAMEWORKS","DATABASES","PACKAGE_MANAGERS","JS_RUNTIMES","MONOREPO_TOOLS","ORM_OPTIONS","REPO_HOSTS","LICENSES","CICD_OPTIONS","CLOUD_TARGETS","SELF_HOSTED_TARGETS","CONTAINER_REGISTRIES","COMMON_COMMANDS","NAMING_CONVENTIONS","ERROR_PATTERNS","LOGGING_OPTIONS","AI_BEHAVIOR_RULES","SECRETS_MANAGEMENT_OPTIONS","SECURITY_TOOLING_OPTIONS","AUTH_PATTERNS_OPTIONS","DATA_HANDLING_OPTIONS","IMPORTANT_FILES","BOUNDARY_OPTIONS","TEST_FRAMEWORKS","TEST_LEVELS","PROJECT_TYPES","DEV_OS_OPTIONS","platform","ARCHITECTURE_PATTERNS","ora","spinner","detected","prompts","dirname","detectedCmds","chalk","ora","ora","chalk","handleApiError","truncate","formatTags","chalk","readFile","access","join","existsSync","chalk","existsSync","join","readFile","parse","config","fileExists","access","truncate","chalk","ora","readFile","readdir","join","existsSync","yaml","CONFIG_FILES","CONFIG_DIRS","config","chalk","ora","readFile","join","existsSync","i","j","chalk","fileExists","join","existsSync","ora","readFile","path","chalk","ora","prompts","join","existsSync","getSourceFromVisibility","chalk","existsSync","join","prompts","spinner","ora","fileExists","chalk","ora","chalk","ora","chalk","readFile","writeFile","access","join","ora","platform","config","mkdir","chalk","readFile","writeFile","access","join","basename","ora","prompts","chalk","prompts","ora","readFile","access","readdir","join","dirname","basename","readdir","join","readFile","dirname","parseMarkdownSections","basename","chalk","path","access","ora","prompts","writeFile","mkdir","chalk","ora","chalk","ora","handleError","chalk","chalk","CLI_VERSION","chalk"]}