@almadar/agent 3.5.7 → 3.5.11

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/gates/gate05-behavior-match.ts","../../src/evals/utils/orbital-validate.ts","../../src/gates/prompts.ts","../../src/gates/gate0-application.ts","../../src/gates/orchestrator.ts","../../src/gates/merge.ts","../../src/gates/gate1-orbital.ts","../../src/gates/gate2-trait.ts","../../src/gates/gate3-transition.ts","../../src/gates/gate4-render-ui.ts","../../src/gates/index.ts","../../src/gates/behavior-extract.ts","../../src/gates/scoring.ts","../../src/gates/agentic/tools.ts"],"names":["loadGoldenOrbFromStd","extractJsonFromText","fs","path","tr","opts","createOpenRouterClient","createDeepSeekClient","loadGoldenOrbByName"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Gate 0.5: Behavior Matching\n *\n * Given the shell .orb from Gate 0, asks the LLM to select the best-matching\n * golden behavior from @almadar/std. Loads the matched behavior's exported\n * .orb file (full OrbitalSchema with entities, state machines, render-ui)\n * as the goldenOrb for Gates 1-4.\n *\n * Only runs in guided mode. Skipped entirely in pure mode.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport { getAllBehaviors, loadGoldenOrb as loadGoldenOrbFromStd } from '@almadar/std';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport type { GateOpts } from './types.js';\n\n// ============================================================================\n// Behavior Catalog (built once, cached)\n// ============================================================================\n\nlet cachedCatalog: string | null = null;\n\nfunction getBehaviorCatalog(): string {\n if (cachedCatalog) return cachedCatalog;\n\n const all = getAllBehaviors() as Array<Record<string, unknown>>;\n const lines = all.map((b) => {\n const name = String(b.name || '');\n const desc = String(b.description || '');\n const states = Array.isArray(b.states) ? b.states.length : 0;\n const events = Array.isArray(b.events) ? b.events.length : 0;\n return `- ${name}: ${desc} (${states} states, ${events} events)`;\n });\n cachedCatalog = lines.join('\\n');\n return cachedCatalog;\n}\n\n// ============================================================================\n// .orb File Loader (delegated to @almadar/std)\n// ============================================================================\n\nexport function loadGoldenOrbByName(behaviorName: string): OrbitalSchema | null {\n return loadGoldenOrbFromStd(behaviorName) as OrbitalSchema | null;\n}\n\n// ============================================================================\n// Prompts\n// ============================================================================\n\nfunction buildMatchSystemPrompt(): string {\n return `You are a behavior matching assistant. Given an application description and its orbital structure, select the most relevant golden behavior from the catalog below.\n\nThe catalog contains 107 standard behaviors. Each behavior is a proven, production-quality .orb program that handles a specific interaction pattern (CRUD lists, forms, search, cart, booking, etc.).\n\nYour task: pick the ONE behavior that best matches the application's primary interaction pattern. If no behavior is a close match, respond with \"none\".\n\nRespond with ONLY valid JSON: { \"match\": \"std-behavior-name\" } or { \"match\": \"none\" }\nNo markdown, no explanation.`;\n}\n\nfunction buildMatchUserPrompt(\n prompt: string,\n orb: OrbitalSchema,\n): string {\n const orbitalNames = orb.orbitals.map((o) => {\n const name = (o as { name: string }).name;\n return name;\n });\n\n return `Application: ${prompt}\n\nOrbitals produced by Gate 0: ${orbitalNames.join(', ')}\n\nBehavior catalog:\n${getBehaviorCatalog()}`;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport interface BehaviorMatchResult {\n matchedName: string | null;\n goldenOrb: OrbitalSchema | null;\n}\n\n/**\n * Match the prompt against golden behaviors via LLM.\n * Loads the matched behavior's exported .orb file as goldenOrb.\n */\nexport async function runGate05(\n client: LLMClient,\n prompt: string,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n): Promise<BehaviorMatchResult> {\n const systemPrompt = buildMatchSystemPrompt();\n const userPrompt = buildMatchUserPrompt(prompt, orb);\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 256,\n });\n\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('[Gate 0.5] Failed to parse match response, falling back to pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n const matchName = String(obj.match || 'none');\n\n if (matchName === 'none') {\n console.log('[Gate 0.5] No behavior match found, using pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n // Load the full .orb file via @almadar/std\n const goldenOrb = loadGoldenOrbByName(matchName);\n if (!goldenOrb) {\n console.warn(`[Gate 0.5] Matched \"${matchName}\" but could not load .orb file`);\n return { matchedName: matchName, goldenOrb: null };\n }\n\n console.log(`[Gate 0.5] Matched behavior: ${matchName}`);\n return { matchedName: matchName, goldenOrb };\n}\n","/**\n * Orbital CLI Validation Utility\n *\n * Shells out to `orbital validate --json <file>` for real schema validation.\n * The CLI always exits 0 and outputs JSON with validation results.\n *\n * @packageDocumentation\n */\n\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst ORBITAL_BINARY = '/home/osamah/bin/orbital';\n\nexport interface OrbitalValidationError {\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n}\n\nexport interface OrbitalValidationStats {\n orbitals: number;\n entities: number;\n traits: number;\n pages: number;\n}\n\nexport interface OrbitalValidationResult {\n valid: boolean;\n errors: OrbitalValidationError[];\n stats?: OrbitalValidationStats;\n}\n\n/**\n * Validate an orbital schema using the `orbital validate` CLI.\n *\n * @param schema - JSON schema object or JSON string\n * @param workDir - Directory to write the temp .orb file\n * @returns Validation result with errors and stats\n */\nexport function validateWithOrbitalCLI(\n schema: unknown,\n workDir: string\n): OrbitalValidationResult {\n // Check if binary exists\n if (!fs.existsSync(ORBITAL_BINARY)) {\n return {\n valid: false,\n errors: [{ code: 'CLI_NOT_FOUND', path: '', message: `orbital binary not found at ${ORBITAL_BINARY}` }],\n };\n }\n\n // Write schema to temp file\n const schemaStr = typeof schema === 'string' ? schema : JSON.stringify(schema, null, 2);\n const tempPath = path.join(workDir, `_eval_validate_${Date.now()}.orb`);\n\n try {\n fs.writeFileSync(tempPath, schemaStr);\n\n const output = execSync(`${ORBITAL_BINARY} validate --json \"${tempPath}\"`, {\n encoding: 'utf-8',\n timeout: 30_000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const result = JSON.parse(extractJson(output)) as OrbitalValidationResult;\n return result;\n } catch (error: unknown) {\n // CLI may write JSON to stdout even on failure\n const err = error as { stdout?: string; stderr?: string; message?: string };\n if (err.stdout) {\n try {\n return JSON.parse(extractJson(err.stdout)) as OrbitalValidationResult;\n } catch {\n // stdout wasn't JSON\n }\n }\n\n return {\n valid: false,\n errors: [{\n code: 'CLI_ERROR',\n path: '',\n message: err.stderr?.trim() || err.message || 'Unknown CLI error',\n }],\n };\n } finally {\n // Clean up temp file\n try {\n fs.unlinkSync(tempPath);\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\n/**\n * Extract the validation JSON from CLI output.\n * The CLI prints: DEBUG lines, echoed schema, then the validation JSON object.\n * We find the JSON object containing `\"valid\"` by extracting all top-level\n * balanced JSON objects and returning the one with a `valid` field.\n */\nfunction extractJson(raw: string): string {\n const objects: string[] = [];\n let i = 0;\n\n while (i < raw.length) {\n if (raw[i] === '{') {\n let depth = 0;\n let inString = false;\n let escape = false;\n const start = i;\n\n for (; i < raw.length; i++) {\n const ch = raw[i];\n if (escape) { escape = false; continue; }\n if (ch === '\\\\' && inString) { escape = true; continue; }\n if (ch === '\"') { inString = !inString; continue; }\n if (inString) continue;\n if (ch === '{') depth++;\n if (ch === '}') {\n depth--;\n if (depth === 0) {\n objects.push(raw.slice(start, i + 1));\n i++;\n break;\n }\n }\n }\n } else {\n i++;\n }\n }\n\n // Return the object containing \"valid\" (the validation result)\n for (const obj of objects) {\n if (obj.includes('\"valid\"')) return obj;\n }\n\n // Fallback: return last object (most likely the result)\n if (objects.length > 0) return objects[objects.length - 1];\n return raw.trim();\n}\n","/**\n * Gate Prompt Builders\n *\n * Each gate gets a minimal, focused system prompt containing ONLY the knowledge\n * that gate needs. No shared architecture dumps across gates.\n *\n * Generator functions from @almadar/skills derive content from source packages\n * so prompts update automatically when patterns/bindings/rules change.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalDefinition,\n Trait,\n Transition,\n Entity,\n StateMachine,\n} from '@almadar/core/types';\nimport {\n getDecompositionCompact,\n getBindingsCompact,\n getBindingContextRules,\n getOrbRenderUIGuide,\n} from '@almadar/skills';\n\n// ============================================================================\n// Gate 0: Application Decomposition\n// ============================================================================\n\nexport function buildGate0SystemPrompt(): string {\n const decomposition = getDecompositionCompact();\n\n return `You are an application architect. Given a natural language description, produce a shell .orb JSON schema.\n\n${decomposition}\n\nYour output must be a JSON object with:\n- name: PascalCase application name\n- version: \"1.0.0\"\n- orbitals: array of orbital shells\n\nEach orbital shell:\n- name: PascalCase ending in \"Orbital\" (e.g., \"TaskOrbital\")\n- entity: { name: PascalCase singular noun, fields: [{ name: \"id\", type: \"string\", required: true }] }\n- traits: [{ name: PascalCase, linkedEntity: entityName, category: \"interaction\", stateMachine: { states: [{ name: \"idle\", isInitial: true }], events: [], transitions: [] } }]\n- pages: [{ name: PascalCase, path: \"/lowercase\", traits: [{ ref: \"TraitName\" }] }]\n\nRules:\n- ONE orbital per entity type\n- Every orbital must have at least one trait\n- Keep it minimal: only the orbitals truly needed\n- Do NOT fill in entity fields (Gate 1 does that)\n- Do NOT fill in state machines (Gate 2 does that)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate0UserPrompt(\n prompt: string,\n guidedData?: { orbitalCount: number; entityNames: string[]; traitNames: string[] },\n): string {\n let userPrompt = `Decompose this application into an .orb schema:\\n\\n${prompt}`;\n\n if (guidedData) {\n userPrompt += `\\n\\nReference structure (use as guide):\n- ${guidedData.orbitalCount} orbital(s)\n- Entities: ${guidedData.entityNames.join(', ')}\n- Traits: ${guidedData.traitNames.join(', ')}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 1: Orbital Structure (Entity Fields + Persistence)\n// ============================================================================\n\nexport function buildGate1SystemPrompt(): string {\n return `You are an entity designer. Given an orbital shell, enrich it with full entity fields, persistence, and page details. Do NOT modify the state machine (Gate 2 fills that).\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- entity:\n - name: keep unchanged\n - persistence: \"persistent\" (survives sessions, needs collection), \"runtime\" (transient), or \"singleton\" (app-wide config)\n - collection: snake_case plural (only for persistent entities, e.g., \"cart_items\")\n - fields: array of { name, type, required?, default? }\n - First field MUST be { name: \"id\", type: \"string\", required: true }\n - Valid types: \"string\", \"number\", \"boolean\", \"object\", \"array\"\n - Include ALL fields the entity needs (status, timestamps, amounts, references, etc.)\n- traits: keep unchanged (shell state machine, Gate 2 fills it)\n- pages: [{ name: PascalCase, path: \"/lowercase\", isInitial?, traits: [{ ref: \"TraitName\" }] }]\n - EVERY page MUST have a traits array binding it to the orbital's trait(s)\n - Without traits, the page renders blank (runtime doesn't know which trait to activate)\n\nRules:\n- Think about what fields this entity genuinely needs for its domain\n- Include status fields (e.g., \"status\": \"string\") for entities with lifecycle states\n- Include amount/count fields (e.g., \"total\": \"number\") for entities with calculations\n- Include timestamp fields (e.g., \"createdAt\": \"string\") for auditable entities\n- Do NOT touch the stateMachine. Return it exactly as received.\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate1UserPrompt(\n orbital: OrbitalDefinition,\n allOrbitals: OrbitalDefinition[],\n guidedOrbital?: OrbitalDefinition,\n): string {\n let userPrompt = `Enrich this orbital with full entity fields and pages:\n${JSON.stringify(orbital, null, 2)}\n\nOther orbitals in this application (for cross-orbital context):\n${JSON.stringify(allOrbitals.filter((o) => o.name !== orbital.name), null, 2)}`;\n\n if (guidedOrbital) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedOrbital, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 2: State Machine + Slot Assignments\n// ============================================================================\n\nexport function buildGate2SystemPrompt(): string {\n return `You are a state machine designer. Given a trait and its entity, design the state machine topology and assign UI slot presentations per state.\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- linkedEntity: keep unchanged\n- category: \"interaction\"\n- stateMachine:\n - states: [{ name: camelCase, isInitial?: true }]\n - events: [{ key: \"UPPER_SNAKE_CASE\", name: \"Human Label\", payloadSchema?: [{ name, type }] }]\n - transitions: [{ from, event, to, effects: [] }]\n- ui: { \"stateName\": { \"presentation\": \"inline\" | \"modal\" }, ... }\n\nState Machine Rules:\n- Exactly ONE state must have isInitial: true (typically \"idle\" or \"browsing\")\n- Every state must be reachable from the initial state\n- Every event must be used in at least one transition\n- The initial state MUST have an INIT self-loop transition (idle->INIT->idle or browsing->INIT->browsing)\n- Leave effects as empty arrays (Gate 3 fills these)\n\nUI Slot Assignment Rules:\n- Assign \"inline\" to primary view states (idle, browsing, listing, viewing)\n- Assign \"modal\" to overlay action states (creating, editing, deleting, confirming)\n- Every state MUST have an assignment in the ui object\n- Every \"modal\" state MUST have BOTH a CLOSE and CANCEL transition back to an \"inline\" state\n\nTypical CRUD state machine pattern:\n- idle/browsing (inline): main list view, INIT self-loop\n- creating (modal): opened by CREATE event, closed by SAVE/CANCEL/CLOSE\n- editing (modal): opened by EDIT event, closed by SAVE/CANCEL/CLOSE\n- deleting (modal): opened by DELETE event, closed by CONFIRM_DELETE/CANCEL/CLOSE\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate2UserPrompt(\n trait: Trait,\n entity: Entity,\n orbitalDescription: string,\n guidedTrait?: Trait,\n): string {\n let userPrompt = `Design the state machine for trait:\n${JSON.stringify(trait, null, 2)}\n\nEntity it manages:\n${JSON.stringify(entity, null, 2)}\n\nOrbital context: ${orbitalDescription}`;\n\n if (guidedTrait) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTrait, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 3: Transition Effects (Guards + Data Effects)\n// ============================================================================\n\nexport function buildGate3SystemPrompt(): string {\n const bindingsCompact = getBindingsCompact();\n const bindingContextRules = getBindingContextRules();\n\n return `You are a transition effect designer. Given a transition, add guards and data effects.\n\n${bindingsCompact}\n\n${bindingContextRules}\n\nYour output must be a JSON object with:\n- from: keep unchanged\n- event: keep unchanged\n- to: keep unchanged\n- guard: s-expression array or null\n Example: [\"and\", [\"not\", [\"eq\", \"@entity.status\", \"locked\"]], [\"gt\", \"@entity.count\", 0]]\n- effects: array of effect tuples\n\nEffect types (use ONLY these four):\n- [\"set\", \"@entity.fieldName\", value] - Set entity field. Value: \"@payload.field\", \"@now\", or literal.\n- [\"fetch\", \"EntityName\"] - Load entity data. Use in INIT transitions.\n- [\"persist\", \"create\"|\"update\"|\"delete\", \"EntityName\", \"@payload.data\"] - CRUD entity records.\n- [\"notify\", \"message\", \"success\"|\"error\"|\"info\"] - Show a notification.\n\nBANNED effects: call-service, emit, log, navigate.\n\nRules:\n- Guards are optional. Only add when the transition genuinely needs a precondition.\n- INIT transitions: include [\"fetch\", \"EntityName\"]\n- SAVE transitions (from creating): include [\"persist\", \"create\", \"EntityName\", \"@payload.data\"]\n- SAVE transitions (from editing): include [\"persist\", \"update\", \"EntityName\", \"@payload.data\"]\n- CONFIRM_DELETE transitions: include [\"persist\", \"delete\", \"EntityName\", \"@payload.data\"]\n- set target MUST start with @entity (never @payload)\n- Do NOT include render-ui effects (Gate 4 handles those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate3UserPrompt(\n transition: Transition,\n entity: Entity,\n sm: StateMachine,\n guidedTransition?: Transition,\n): string {\n let userPrompt = `Design effects for transition:\n${transition.from} --[${transition.event}]--> ${transition.to}\n\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states: ${sm.states.map((s) => s.name).join(', ')}\nAll events: ${JSON.stringify(sm.events, null, 2)}`;\n\n if (guidedTransition) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTransition, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 4: Render UI\n// ============================================================================\n\nexport function buildGate4SystemPrompt(): string {\n const orbGuide = getOrbRenderUIGuide();\n\n return `You are a UI designer. Given a transition with its effects, produce the render-ui pattern tree.\n\n${orbGuide}\n\nYour output must be a JSON object with:\n- renderEffects: [{ slot, tree }]\n - slot: \"main\" or \"modal\" (determined by the state's slot assignment shown in the user prompt)\n - tree: pattern composition object, or null (to clear a slot)\n\nSlot Rules:\n- Use the slot shown in the user prompt for the target state (main or modal)\n- When exiting a modal state (the user prompt will say so), you MUST include:\n 1. { \"slot\": \"modal\", \"tree\": null } to clear the modal\n 2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view\n\nBinding Rules:\n- Bindings are ONLY paths: @entity.name, @entity.price (NO expressions like @entity.x <= 0)\n- Each prop value must contain at most ONE binding. NEVER concatenate: \"@entity.price @entity.currency\" is INVALID\n- For combined display, use separate typography elements or static labels\n- button event props must match state machine event keys\n\nPattern Rules:\n- Use ONLY props that exist on the pattern. Do NOT invent props.\n- data-list: entity, itemActions, emptyState (NOT emptyIcon, emptyTitle)\n- button: label, variant, event, icon, size (NOT disabled)\n- card: children (NOT padding, bg, border, use box for those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport interface SlotContext {\n stateSlots: Record<string, 'main' | 'modal'>;\n exitsModal: boolean;\n}\n\nexport function buildGate4UserPrompt(\n transition: Transition,\n entity: Entity,\n targetStateName: string,\n sm: StateMachine,\n slotContext: SlotContext,\n guidedRenderEffects?: Array<{ slot: string; tree: Record<string, unknown> }>,\n): string {\n const targetSlot = slotContext.stateSlots[targetStateName] || 'main';\n const fromSlot = slotContext.stateSlots[transition.from] || 'main';\n\n let userPrompt = `Design the UI for state \"${targetStateName}\" (renders to \"${targetSlot}\" slot):\n\nTransition: ${transition.from} (${fromSlot}) --[${transition.event}]--> ${transition.to} (${targetSlot})\nCurrent effects: ${JSON.stringify(transition.effects || [], null, 2)}\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states with slots: ${Object.entries(slotContext.stateSlots).map(([s, slot]) => `${s}(${slot})`).join(', ')}`;\n\n if (slotContext.exitsModal) {\n userPrompt += `\\n\\nIMPORTANT: This transition exits a modal state. You MUST include:\n1. { \"slot\": \"modal\", \"tree\": null } to clear the modal overlay\n2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view`;\n }\n\n if (guidedRenderEffects) {\n userPrompt += `\\n\\nReference render-ui (use as guide):\n${JSON.stringify(guidedRenderEffects, null, 2)}`;\n }\n\n return userPrompt;\n}\n","/**\n * Gate 0: Application Decomposition\n *\n * NL prompt -> shell OrbitalSchema (orbital names, entity name + id field,\n * trait names with empty state machines, pages).\n * Single LLM call with fresh context.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate0SystemPrompt, buildGate0UserPrompt } from './prompts.js';\n\n// ============================================================================\n// Default Theme\n// ============================================================================\n\nconst DEFAULT_THEME = {\n name: 'default',\n tokens: {\n colors: {\n primary: '#6366f1',\n 'primary-hover': '#4f46e5',\n 'primary-foreground': '#ffffff',\n accent: '#ec4899',\n 'accent-foreground': '#ffffff',\n success: '#22c55e',\n warning: '#f59e0b',\n error: '#ef4444',\n },\n },\n};\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction normalizeOrbital(raw: Record<string, unknown>): OrbitalDefinition {\n const name = String(raw.name || 'Orbital');\n\n // Normalize entity\n const entityRaw = (raw.entity as Record<string, unknown>) || {};\n const entityName = String(entityRaw.name || name.replace(/Orbital$/i, ''));\n const fields = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const hasId = fields.some((f: Record<string, unknown>) => f.name === 'id');\n\n const entity = {\n name: entityName,\n fields: hasId\n ? fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n }))\n : [\n { name: 'id', type: 'string', required: true },\n ...fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n })),\n ],\n };\n\n // Normalize traits\n const traitsRaw = Array.isArray(raw.traits) ? raw.traits : [];\n const traits = traitsRaw.length > 0\n ? traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || `${entityName}Control`),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }))\n : [{\n name: `${entityName}Control`,\n linkedEntity: entityName,\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }];\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const pagesRaw = Array.isArray(raw.pages) ? raw.pages : [];\n const defaultTraits = traitNames.map((n) => ({ ref: n }));\n const pages = pagesRaw.length > 0\n ? pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || name.replace(/Orbital$/i, '')),\n path: String(p.path || p.route || `/${name.toLowerCase().replace(/orbital$/i, '')}`),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraits,\n }))\n : [{\n name: name.replace(/Orbital$/i, ''),\n path: `/${name.toLowerCase().replace(/orbital$/i, '')}`,\n traits: defaultTraits,\n }];\n\n return { name, entity, traits, pages } as OrbitalDefinition;\n}\n\nfunction parseGate0Response(raw: string): OrbitalSchema {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 0: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n const appName = String(obj.name || obj.appName || 'App');\n const version = String(obj.version || '1.0.0');\n const orbitalsRaw = Array.isArray(obj.orbitals) ? obj.orbitals : [];\n\n return {\n name: appName,\n version,\n design: { theme: DEFAULT_THEME } as OrbitalSchema['design'],\n orbitals: orbitalsRaw.map((o: Record<string, unknown>) => normalizeOrbital(o)),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport async function runGate0(\n client: LLMClient,\n prompt: string,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate0SystemPrompt();\n const userPrompt = buildGate0UserPrompt(\n prompt,\n behaviorData?.appLevel,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n return parseGate0Response(raw);\n}\n","/**\n * Orchestrator\n *\n * Simple chain: gate0 → gate1 → gate2 → gate3 → gate4 → validate.\n * Each gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {\n createDeepSeekClient,\n createOpenRouterClient,\n type LLMClient,\n} from '@almadar/llm';\nimport { validateWithOrbitalCLI } from '../evals/utils/orbital-validate.js';\nimport type {\n GatePipelineConfig,\n GatePipelineResult,\n GateOpts,\n GateTimings,\n BehaviorGateData,\n VerifyResult,\n} from './types.js';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport { runGate0 } from './gate0-application.js';\nimport { runGate05 } from './gate05-behavior-match.js';\nimport { runGate1 } from './gate1-orbital.js';\nimport { runGate2 } from './gate2-trait.js';\nimport { runGate3 } from './gate3-transition.js';\nimport { runGate4 } from './gate4-render-ui.js';\n\n// ============================================================================\n// Client Factory\n// ============================================================================\n\nfunction createClientForProvider(config: GatePipelineConfig): LLMClient {\n const opts = {\n ...(config.model ? { model: config.model } : {}),\n ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),\n };\n\n let client: LLMClient;\n switch (config.provider) {\n case 'deepseek':\n client = createDeepSeekClient(opts);\n break;\n case 'zhipu':\n client = createOpenRouterClient({ model: 'z-ai/glm-4.7', ...opts });\n break;\n case 'qwen3.5':\n client = createOpenRouterClient({ model: 'qwen/qwen3.5-9b', ...opts });\n break;\n case 'gemma3-4b':\n client = createOpenRouterClient({ model: 'google/gemma-3-4b-it', ...opts });\n break;\n case 'mistral-small':\n client = createOpenRouterClient({ model: 'mistralai/mistral-small-3.1-24b-instruct', ...opts });\n break;\n case 'mistral-medium':\n client = createOpenRouterClient({ model: 'mistralai/mistral-medium-3.1', ...opts });\n break;\n default: {\n const _exhaustive: never = config.provider;\n throw new Error(`Unknown provider: ${_exhaustive}`);\n }\n }\n\n // Qwen3.5 burns all output tokens on reasoning unless thinking is disabled\n if (config.provider === 'qwen3.5') {\n const originalCallRaw = client.callRaw.bind(client);\n const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);\n client.callRaw = (opts) =>\n originalCallRaw({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n client.callRawWithMetadata = (opts) =>\n originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n }\n\n return client;\n}\n\n// ============================================================================\n// Timing Helper\n// ============================================================================\n\nfunction timeMs(): number {\n return performance.now();\n}\n\n// ============================================================================\n// Pipeline\n// ============================================================================\n\n/**\n * Run the full gated construction pipeline.\n *\n * Flow:\n * orb0 = gate0(prompt) → orb1 = gate1(orb0) → orb2 = gate2(orb1)\n * → orb3 = gate3(orb2) → orbFinal = gate4(orb3) → validate(orbFinal)\n */\nexport async function runGatePipeline(\n prompt: string,\n config: GatePipelineConfig,\n behaviorData?: BehaviorGateData,\n goldenOrb?: OrbitalSchema,\n): Promise<GatePipelineResult> {\n const client = createClientForProvider(config);\n const maxTokens = config.maxTokens || 4096;\n const pipelineStart = timeMs();\n\n const opts: GateOpts = {\n maxTokens,\n goldenOrb,\n workDir: config.workDir,\n };\n\n // ── Gate 0: prompt → shell .orb ──\n const g0Start = timeMs();\n const orbAfterGate0 = await runGate0(client, prompt, opts, behaviorData);\n const g0Ms = timeMs() - g0Start;\n console.log(`[Gate 0] ${orbAfterGate0.name}: ${orbAfterGate0.orbitals.length} orbital(s) (${g0Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate0, 0);\n\n // ── Gate 0.5: behavior matching (guided mode only) ──\n if (config.mode === 'guided' && !goldenOrb) {\n const g05Start = timeMs();\n const matchResult = await runGate05(client, prompt, orbAfterGate0, opts);\n const g05Ms = timeMs() - g05Start;\n if (matchResult.goldenOrb) {\n opts.goldenOrb = matchResult.goldenOrb;\n console.log(`[Gate 0.5] Matched: ${matchResult.matchedName} (${g05Ms.toFixed(0)}ms)`);\n } else {\n console.log(`[Gate 0.5] No match, continuing in pure mode (${g05Ms.toFixed(0)}ms)`);\n }\n }\n\n // ── Gate 1: enrich orbitals ──\n const g1Start = timeMs();\n const orbAfterGate1 = await runGate1(client, orbAfterGate0, opts, behaviorData);\n const g1Ms = timeMs() - g1Start;\n console.log(`[Gate 1] Enriched ${orbAfterGate1.orbitals.length} orbital(s) (${g1Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate1, 1);\n\n // ── Gate 2: fill state machines ──\n const g2Start = timeMs();\n const orbAfterGate2 = await runGate2(client, orbAfterGate1, opts, behaviorData);\n const g2Ms = timeMs() - g2Start;\n console.log(`[Gate 2] State machines filled (${g2Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate2, 2);\n\n // ── Gate 3: guards + effects ──\n const g3Start = timeMs();\n const orbAfterGate3 = await runGate3(client, orbAfterGate2, opts, behaviorData);\n const g3Ms = timeMs() - g3Start;\n console.log(`[Gate 3] Guards + effects filled (${g3Ms.toFixed(0)}ms)`);\n maybeValidate(config, orbAfterGate3, 3);\n\n // ── Gate 4: render-ui ──\n const g4Start = timeMs();\n const orbFinal = await runGate4(client, orbAfterGate3, opts, behaviorData);\n const g4Ms = timeMs() - g4Start;\n console.log(`[Gate 4] Render-ui appended (${g4Ms.toFixed(0)}ms)`);\n\n // ── Validate final .orb ──\n fs.mkdirSync(config.workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orbFinal, config.workDir);\n console.log(`[Validate] valid=${validation.valid}, errors=${(validation.errors || []).length}`);\n\n // ── Verify (compile + server + browser) ──\n let verify: VerifyResult | undefined;\n if (config.verify) {\n verify = await runVerify(orbFinal, config);\n }\n\n const totalMs = timeMs() - pipelineStart;\n console.log(`[Pipeline] Total: ${(totalMs / 1000).toFixed(1)}s`);\n\n const timings: GateTimings = {\n gate0Ms: g0Ms,\n gate1Ms: [g1Ms],\n gate2Ms: [g2Ms],\n gate3Ms: [g3Ms],\n gate4Ms: [g4Ms],\n totalMs,\n };\n\n return {\n config,\n orbAfterGate0,\n orbAfterGate1,\n orbAfterGate2,\n orbAfterGate3,\n orbFinal,\n validation: {\n valid: validation.valid ?? false,\n errors: validation.errors ?? [],\n },\n verify,\n timings,\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\n// ============================================================================\n// Orbital Verify (Compile + Server + Browser)\n// ============================================================================\n\nasync function runVerify(\n orb: OrbitalSchema,\n config: GatePipelineConfig,\n): Promise<VerifyResult> {\n const tmpDir = path.join(config.workDir, 'gate-verify');\n fs.mkdirSync(tmpDir, { recursive: true });\n const orbPath = path.join(tmpDir, `${orb.name || 'generated'}.orb`);\n fs.writeFileSync(orbPath, JSON.stringify(orb, null, 2));\n\n // Dynamic import to avoid rootDir constraint (tool lives outside this package)\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as { verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{ phase: number; name: string; passed: number; failed: number; checks: Array<{ label: string; passed: boolean; detail?: string }> }>;\n }> };\n\n console.log(`[Verify] Starting orbital-verify on ${orbPath}`);\n const result = await verifyApp({\n orbPath,\n headed: config.verifyHeaded ?? false,\n screenshots: config.verifyScreenshots ?? false,\n });\n\n console.log(\n `[Verify] ${result.totalPassed}/${result.totalChecks} passed, ` +\n `${result.totalFailed} failed` +\n (result.coverage ? `, coverage=${(result.coverage.ratio * 100).toFixed(0)}%` : ''),\n );\n\n return {\n totalPassed: result.totalPassed,\n totalFailed: result.totalFailed,\n totalChecks: result.totalChecks,\n coverage: result.coverage ? {\n ratio: result.coverage.ratio,\n coveredItems: result.coverage.coveredItems,\n totalItems: result.coverage.totalItems,\n } : undefined,\n phases: result.phases.map((p) => ({\n phase: p.phase,\n name: p.name,\n passed: p.passed,\n failed: p.failed,\n checks: p.checks,\n })),\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\nfunction maybeValidate(\n config: GatePipelineConfig,\n orb: OrbitalSchema,\n gate: number,\n): void {\n if (!config.validateAfterEachGate) return;\n\n const result = validateWithOrbitalCLI(orb, config.workDir);\n if (!result.valid) {\n console.warn(\n `[Gate ${gate} validate] ${result.errors.length} error(s): ` +\n result.errors.slice(0, 3).map((e) => e.message).join('; '),\n );\n }\n}\n","/**\n * Merge Utilities\n *\n * Immutable helpers for replacing orbitals, traits, and transitions\n * within an OrbitalSchema. All return a new OrbitalSchema (deep clone).\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Trait,\n Transition,\n} from '@almadar/core/types';\n\n// ============================================================================\n// Deep Clone\n// ============================================================================\n\n/** Deep clone an OrbitalSchema via structured clone. */\nexport function deepCloneOrb(orb: OrbitalSchema): OrbitalSchema {\n return structuredClone(orb);\n}\n\n// ============================================================================\n// Replace Orbital\n// ============================================================================\n\n/**\n * Replace an orbital by name within the schema.\n * Returns a new OrbitalSchema with the orbital swapped.\n */\nexport function replaceOrbital(\n orb: OrbitalSchema,\n name: string,\n enriched: OrbitalDefinition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const idx = clone.orbitals.findIndex(\n (o) => (o as OrbitalDefinition).name === name,\n );\n if (idx >= 0) {\n clone.orbitals[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Trait\n// ============================================================================\n\n/**\n * Replace a trait by name within a specific orbital.\n * Returns a new OrbitalSchema with the trait swapped.\n */\nexport function replaceTrait(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n enriched: Trait,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const traits = orbital.traits;\n const idx = traits.findIndex((t) => {\n if (typeof t === 'string') return t === traitName;\n if ('ref' in t) return t.ref === traitName;\n return t.name === traitName;\n });\n\n if (idx >= 0) {\n traits[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Transition\n// ============================================================================\n\n/**\n * Replace a transition (by from+event) within a trait's state machine.\n * Returns a new OrbitalSchema with the transition swapped.\n */\nexport function replaceTransition(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n from: string,\n event: string,\n enriched: Transition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const trait = orbital.traits.find((t) => {\n if (typeof t === 'string') return false;\n if ('ref' in t) return false;\n return t.name === traitName;\n }) as Trait | undefined;\n if (!trait?.stateMachine) return clone;\n\n const idx = trait.stateMachine.transitions.findIndex(\n (t) => t.from === from && t.event === event,\n );\n if (idx >= 0) {\n trait.stateMachine.transitions[idx] = enriched;\n }\n return clone;\n}\n","/**\n * Gate 1: Orbital Structure\n *\n * Enriches each orbital shell with full entity fields, persistence,\n * collection, trait emits/listens, and pages.\n * One LLM call per orbital.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n FieldType,\n TraitEventContract,\n TraitEventListener,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate1SystemPrompt, buildGate1UserPrompt } from './prompts.js';\nimport { replaceOrbital } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate1Response(raw: string, original: OrbitalDefinition): OrbitalDefinition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 1: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n // Normalize entity\n const entityRaw = (obj.entity as Record<string, unknown>) || {};\n const entityName = String(\n entityRaw.name || (original.entity as Entity).name,\n );\n const fieldsRaw = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const entity: Entity = {\n name: entityName,\n persistence: (entityRaw.persistence as Entity['persistence']) || 'runtime',\n ...(entityRaw.collection ? { collection: String(entityRaw.collection) } : {}),\n fields: fieldsRaw.length > 0\n ? fieldsRaw.map((f: Record<string, unknown>) => ({\n name: String(f.name || ''),\n type: (f.type as FieldType) || 'string',\n ...(f.required ? { required: true } : {}),\n ...(f.default !== undefined ? { default: f.default } : {}),\n }))\n : [{ name: 'id', type: 'string' as FieldType, required: true }],\n };\n\n // Normalize traits (keep shell state machines)\n const traitsRaw = Array.isArray(obj.traits) ? obj.traits : [];\n const traits: Trait[] = traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || ''),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n ...(Array.isArray(t.emits) && t.emits.length > 0\n ? { emits: t.emits.map((e: unknown): TraitEventContract => typeof e === 'string' ? { event: e } : e as TraitEventContract) }\n : {}),\n ...(Array.isArray(t.listens) && t.listens.length > 0\n ? { listens: t.listens.map((l: unknown): TraitEventListener => typeof l === 'string' ? { event: l, triggers: l } : l as TraitEventListener) }\n : {}),\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }));\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const defaultTraitRefs = traitNames.map((n) => ({ ref: n }));\n const pagesRaw = Array.isArray(obj.pages) ? obj.pages : [];\n const pages = pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || p.label || ''),\n path: String(p.path || p.route || '/'),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraitRefs,\n }));\n\n return {\n name: String(obj.name || original.name),\n entity,\n traits,\n pages,\n } as OrbitalDefinition;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Enrich all orbital shells with full entity fields and trait details.\n * Iterates orbitals with one LLM call each, merges back via replaceOrbital.\n */\nexport async function runGate1(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate1SystemPrompt();\n const allOrbitals = orb.orbitals as OrbitalDefinition[];\n let result = orb;\n\n for (const orbital of allOrbitals) {\n // Find guided orbital from golden .orb\n const guidedOrbital = opts.goldenOrb?.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbital.name,\n ) as OrbitalDefinition | undefined;\n\n const userPrompt = buildGate1UserPrompt(\n orbital,\n allOrbitals,\n guidedOrbital,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate1Response(raw, orbital);\n result = replaceOrbital(result, orbital.name, enriched);\n }\n\n return result;\n}\n","/**\n * Gate 2: Trait State Machine\n *\n * Fills in stateMachine (states, events, transitions with empty effects)\n * for each trait across all orbitals.\n * One LLM call per trait.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n StateMachine,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate2SystemPrompt, buildGate2UserPrompt } from './prompts.js';\nimport { replaceTrait } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate2Response(raw: string, original: Trait): Trait {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 2: no JSON found, returning trait as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 2: malformed JSON, returning trait as-is`);\n return original;\n }\n\n const statesRaw = Array.isArray(obj.states) ? obj.states : [];\n const eventsRaw = Array.isArray(obj.events) ? obj.events : [];\n const transitionsRaw = Array.isArray(obj.transitions) ? obj.transitions : [];\n\n // Use stateMachine from the response if present, otherwise build from flat arrays\n const smRaw = obj.stateMachine as Record<string, unknown> | undefined;\n const states = (smRaw && Array.isArray(smRaw.states) ? smRaw.states : statesRaw)\n .map((s: Record<string, unknown>) => ({\n name: String(s.name || ''),\n ...(s.isInitial ? { isInitial: true } : {}),\n }));\n\n const events = (smRaw && Array.isArray(smRaw.events) ? smRaw.events : eventsRaw)\n .map((e: Record<string, unknown>) => ({\n key: String(e.key || ''),\n name: String(e.name || e.key || ''),\n ...(Array.isArray(e.payloadSchema) ? { payloadSchema: e.payloadSchema } : {}),\n }));\n\n const transitions = (smRaw && Array.isArray(smRaw.transitions) ? smRaw.transitions : transitionsRaw)\n .map((t: Record<string, unknown>) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n effects: [] as Effect[],\n }));\n\n const stateMachine: StateMachine = { states, events, transitions };\n\n // Parse ui slot assignments (Gate 2 outputs these for Gate 4 to consume)\n type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n const validPresentations = new Set<string>(['modal', 'drawer', 'popover', 'inline', 'confirm-dialog']);\n const uiRaw = (obj.ui || smRaw?.ui) as Record<string, Record<string, unknown>> | undefined;\n const ui = uiRaw ? Object.fromEntries(\n Object.entries(uiRaw).map(([stateName, binding]) => {\n const pres = String(binding.presentation || 'inline');\n return [\n stateName,\n {\n presentation: (validPresentations.has(pres) ? pres : 'inline') as PresentationType,\n content: (binding.content || {}) as Record<string, unknown>,\n },\n ];\n }),\n ) : undefined;\n\n return {\n ...original,\n name: String(obj.name || original.name),\n stateMachine,\n ...(ui ? { ui } : {}),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in state machines for all traits across all orbitals.\n * Iterates traits with one LLM call each, merges back via replaceTrait.\n */\nexport async function runGate2(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate2SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n\n // Find guided trait from golden .orb\n const guidedTrait = findGuidedTrait(opts.goldenOrb, trait.name);\n\n const userPrompt = buildGate2UserPrompt(\n trait,\n entity,\n orbital.description || '',\n guidedTrait,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate2Response(raw, trait);\n result = replaceTrait(result, orbital.name, trait.name, enriched);\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTrait(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n): Trait | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name === traitName) return t as Trait;\n }\n }\n return undefined;\n}\n","/**\n * Gate 3: Transition Effects\n *\n * Fills in guard + non-render effects for each transition across all traits.\n * One LLM call per transition.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Expression,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate3SystemPrompt, buildGate3UserPrompt } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate3Response(raw: string, original: Transition): Transition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 3: no JSON found, returning transition as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 3: malformed JSON, returning transition as-is`);\n return original;\n }\n\n const guard = Array.isArray(obj.guard) ? (obj.guard as Expression) : undefined;\n const effectsRaw = Array.isArray(obj.effects) ? obj.effects : [];\n const effects: Effect[] = effectsRaw.filter(\n (e: unknown) => Array.isArray(e) && e.length >= 2,\n ) as Effect[];\n\n return {\n from: String(obj.from || original.from),\n event: String(obj.event || original.event),\n to: String(obj.to || original.to),\n ...(guard ? { guard } : {}),\n effects,\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in guards and non-render effects for all transitions.\n * Iterates all transitions across all traits with one LLM call each.\n */\nexport async function runGate3(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate3SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n for (const transition of trait.stateMachine.transitions) {\n // Find guided transition from golden .orb\n const guidedTransition = findGuidedTransition(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate3UserPrompt(\n transition,\n entity,\n trait.stateMachine,\n guidedTransition,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate3Response(raw, transition);\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTransition(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Transition | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const found = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (found) return found;\n }\n }\n return undefined;\n}\n","/**\n * Gate 4: Render UI\n *\n * Appends render-ui effects to each transition.\n * One LLM call per transition.\n * Passes slot context (which states are modal vs main) to every call.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Effect,\n StateMachine,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate4SystemPrompt, buildGate4UserPrompt, type SlotContext } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Slot Context Builder\n// ============================================================================\n\n/**\n * Build slot assignments from trait.ui (set by Gate 2).\n * Falls back to \"main\" for any state not in the ui map.\n */\nfunction buildSlotContext(\n sm: StateMachine,\n traitUi: Record<string, { presentation: string }> | undefined,\n): Record<string, 'main' | 'modal'> {\n const slots: Record<string, 'main' | 'modal'> = {};\n\n for (const state of sm.states) {\n const binding = traitUi?.[state.name];\n slots[state.name] = binding?.presentation === 'modal' ? 'modal' : 'main';\n }\n\n return slots;\n}\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\ninterface RenderEffect {\n slot: string;\n tree: Record<string, unknown> | null;\n}\n\nfunction parseGate4Response(raw: string): RenderEffect[] {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('Gate 4: no JSON found in response, using fallback render-ui');\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 4: malformed JSON, using fallback render-ui: ${parsed.slice(0, 100)}`);\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n const renderEffectsRaw = Array.isArray(obj.renderEffects) ? obj.renderEffects : [];\n return renderEffectsRaw.map((r: Record<string, unknown>) => ({\n slot: String(r.slot || 'main'),\n tree: r.tree === null ? null : ((r.tree as Record<string, unknown>) || { type: 'typography', variant: 'body', content: 'Empty' }),\n }));\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Append render-ui effects to all transitions.\n * Builds slot context from state machine and passes it to every LLM call.\n */\nexport async function runGate4(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate4SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n // Build slot assignments from trait.ui (populated by Gate 2)\n const traitUi = trait.ui as Record<string, { presentation: string }> | undefined;\n const stateSlots = buildSlotContext(trait.stateMachine, traitUi);\n\n for (const transition of trait.stateMachine.transitions) {\n const fromSlot = stateSlots[transition.from] || 'main';\n const toSlot = stateSlots[transition.to] || 'main';\n\n // Detect if this transition exits a modal (from=modal, to=main)\n const exitsModal = fromSlot === 'modal' && toSlot === 'main';\n\n const slotContext: SlotContext = { stateSlots, exitsModal };\n\n // Find guided render effects from golden .orb\n const guidedRenderEffects = findGuidedRenderEffects(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate4UserPrompt(\n transition,\n entity,\n transition.to,\n trait.stateMachine,\n slotContext,\n guidedRenderEffects,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: (opts.maxTokens ?? 4096) * 2,\n });\n\n const renderEffects = parseGate4Response(raw);\n\n // Append render-ui effects to existing effects\n const existingEffects = [...(transition.effects || [])] as Effect[];\n for (const re of renderEffects) {\n existingEffects.push(['render-ui', re.slot, re.tree] as Effect);\n }\n\n // If exiting modal and LLM didn't include modal null, add it\n if (exitsModal) {\n const hasModalNull = existingEffects.some(\n (e) => Array.isArray(e) && e[0] === 'render-ui' && e[1] === 'modal' && e[2] === null,\n );\n if (!hasModalNull) {\n // Prepend modal null before the main render\n existingEffects.unshift(['render-ui', 'modal', null] as Effect);\n }\n }\n\n const enriched: Transition = {\n ...transition,\n effects: existingEffects,\n };\n\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedRenderEffects(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Array<{ slot: string; tree: Record<string, unknown> }> | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const tr = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (!tr?.effects) continue;\n const renderEffects: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of tr.effects) {\n if (Array.isArray(eff) && eff[0] === 'render-ui') {\n renderEffects.push({\n slot: String(eff[1] || 'main'),\n tree: (eff[2] as Record<string, unknown>) || {},\n });\n }\n }\n if (renderEffects.length > 0) return renderEffects;\n }\n }\n return undefined;\n}\n","/**\n * Gated Construction Pipeline\n *\n * Decomposes .orb program construction into five scoped gates,\n * each handled by a standalone LLM call with fresh context.\n * Every gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\n// Pipeline\nexport { runGatePipeline } from './orchestrator.js';\n\n// Individual gates\nexport { runGate0 } from './gate0-application.js';\nexport { runGate05 } from './gate05-behavior-match.js';\nexport type { BehaviorMatchResult } from './gate05-behavior-match.js';\nexport { runGate1 } from './gate1-orbital.js';\nexport { runGate2 } from './gate2-trait.js';\nexport { runGate3 } from './gate3-transition.js';\nexport { runGate4 } from './gate4-render-ui.js';\n\n// Merge utilities\nexport { deepCloneOrb, replaceOrbital, replaceTrait, replaceTransition } from './merge.js';\n\n// Behavior extraction\nexport { extractBehaviorGateData, getTraitGateData, getTransitionGateData } from './behavior-extract.js';\n\n// Scoring\nexport {\n scoreGate0,\n scoreGate1,\n scoreGate2,\n scoreGate3,\n scoreGate4,\n scoreOverall,\n} from './scoring.js';\n\n// Types\nexport type {\n GateProvider,\n GateMode,\n GateOpts,\n GatePipelineConfig,\n GateTimings,\n GatePipelineResult,\n GateScore,\n PipelineScore,\n BehaviorGateData,\n} from './types.js';\n\n// Re-export core types used by gates\nexport type {\n OrbitalSchema,\n OrbitalDefinition,\n Orbital,\n Entity,\n Trait,\n StateMachine,\n State,\n Event,\n Transition,\n Effect,\n Page,\n Expression,\n} from '@almadar/core/types';\n\n// Agentic tool factories (used by converter and agentic runner)\nexport {\n createDecomposeAppTool,\n createMatchBehaviorTool,\n createBuildOrbitalTool,\n createVerifyAppTool,\n createUseBehaviorTool,\n createConnectTool,\n createComposeTool,\n} from './agentic/tools.js';\n","/**\n * Behavior Extract\n *\n * Extract per-gate slices from BehaviorSchema for guided mode.\n * Each function extracts the data a specific gate needs from the golden behavior.\n *\n * @packageDocumentation\n */\n\nimport type { BehaviorSchema } from '@almadar/std/behaviors/types';\nimport type { BehaviorGateData } from './types.js';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction asArray<T>(val: T | T[] | undefined): T[] {\n if (!val) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction getOrbitals(behavior: BehaviorSchema): Record<string, unknown>[] {\n return asArray(behavior.orbitals);\n}\n\nfunction getTraitsFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.traits as Record<string, unknown>[] | undefined);\n}\n\nfunction getStateMachine(trait: Record<string, unknown>): Record<string, unknown> | null {\n return (trait.stateMachine as Record<string, unknown>) || null;\n}\n\nfunction getStates(sm: Record<string, unknown>): Array<{ name: string }> {\n const states = asArray(sm.states as Record<string, unknown>[] | undefined);\n return states.map((s) => ({ name: String(s.name || '') }));\n}\n\nfunction getEvents(sm: Record<string, unknown>): Array<{ key: string }> {\n const events = asArray(sm.events as Record<string, unknown>[] | undefined);\n return events.map((e) => ({ key: String(e.key || '') }));\n}\n\ninterface RawTransition {\n from: string;\n event: string;\n to: string;\n guard?: unknown[];\n effects?: unknown[];\n}\n\nfunction getTransitions(sm: Record<string, unknown>): RawTransition[] {\n const transitions = asArray(sm.transitions as Record<string, unknown>[] | undefined);\n return transitions.map((t) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n guard: t.guard as unknown[] | undefined,\n effects: asArray(t.effects as unknown[] | undefined),\n }));\n}\n\nfunction getPagesFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.pages as Record<string, unknown>[] | undefined);\n}\n\n// ============================================================================\n// Effect Classification\n// ============================================================================\n\nfunction isRenderUiEffect(effect: unknown): boolean {\n return Array.isArray(effect) && effect[0] === 'render-ui';\n}\n\nfunction extractRenderEffects(effects: unknown[]): Array<{ slot: string; tree: Record<string, unknown> }> {\n const results: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of effects) {\n if (isRenderUiEffect(eff)) {\n const arr = eff as unknown[];\n const slot = String(arr[1] || 'main');\n const tree = (arr[2] as Record<string, unknown>) || {};\n results.push({ slot, tree });\n }\n }\n return results;\n}\n\nfunction extractNonRenderEffects(effects: unknown[]): unknown[] {\n return effects.filter((eff) => !isRenderUiEffect(eff));\n}\n\n// ============================================================================\n// Full Extraction\n// ============================================================================\n\n/**\n * Extract all gate-level slices from a BehaviorSchema.\n * Returns structured data that each gate can consume in guided mode.\n */\nexport function extractBehaviorGateData(behavior: BehaviorSchema): BehaviorGateData {\n const orbitals = getOrbitals(behavior);\n\n // App level\n const entityNames: string[] = [];\n const traitNames: string[] = [];\n\n for (const orbital of orbitals) {\n const entity = orbital.entity as Record<string, unknown> | undefined;\n if (entity?.name) entityNames.push(String(entity.name));\n\n for (const trait of getTraitsFromOrbital(orbital)) {\n if (trait.name) traitNames.push(String(trait.name));\n }\n }\n\n const appLevel = {\n orbitalCount: orbitals.length,\n entityNames,\n traitNames,\n };\n\n // Orbital levels\n const orbitalLevels = orbitals.map((orbital) => {\n const entity = (orbital.entity as Record<string, unknown>) || {};\n const traits = getTraitsFromOrbital(orbital);\n const pages = getPagesFromOrbital(orbital);\n\n return {\n orbitalName: String(orbital.name || ''),\n entity,\n traitNames: traits.map((t) => String(t.name || '')),\n pages,\n };\n });\n\n // Trait levels\n const traitLevels: BehaviorGateData['traitLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n const states = getStates(sm);\n const events = getEvents(sm);\n const transitions = getTransitions(sm);\n\n traitLevels.push({\n traitName: String(trait.name || ''),\n states: states.map((s) => s.name),\n events: events.map((e) => e.key),\n transitionEdges: transitions.map((t) => ({\n from: t.from,\n event: t.event,\n to: t.to,\n })),\n });\n }\n }\n\n // Transition levels (non-render-ui effects)\n const transitionLevels: BehaviorGateData['transitionLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n transitionLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n guard: transition.guard || null,\n nonRenderEffects: extractNonRenderEffects(effects),\n });\n }\n }\n }\n\n // Render UI levels\n const renderUiLevels: BehaviorGateData['renderUiLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n const renderEffects = extractRenderEffects(effects);\n if (renderEffects.length > 0) {\n renderUiLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n renderEffects,\n });\n }\n }\n }\n }\n\n return {\n appLevel,\n orbitalLevels,\n traitLevels,\n transitionLevels,\n renderUiLevels,\n };\n}\n\n/**\n * Get gate-specific slice for a particular trait from extracted data.\n */\nexport function getTraitGateData(\n data: BehaviorGateData,\n traitName: string,\n): BehaviorGateData['traitLevels'][0] | undefined {\n return data.traitLevels.find((t) => t.traitName === traitName);\n}\n\n/**\n * Get gate-specific slice for a particular transition from extracted data.\n */\nexport function getTransitionGateData(\n data: BehaviorGateData,\n from: string,\n event: string,\n): {\n transition: BehaviorGateData['transitionLevels'][0] | undefined;\n renderUi: BehaviorGateData['renderUiLevels'][0] | undefined;\n} {\n return {\n transition: data.transitionLevels.find((t) => t.from === from && t.event === event),\n renderUi: data.renderUiLevels.find((t) => t.from === from && t.event === event),\n };\n}\n","/**\n * Scoring\n *\n * Set-based metrics for evaluating gate outputs against golden behaviors.\n * Jaccard similarity, symmetric difference, coverage ratios.\n * All O(n) and directionally correct.\n *\n * Now accepts OrbitalSchema and extracts gate-relevant sections.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n} from '@almadar/core/types';\nimport type {\n GateScore,\n PipelineScore,\n GateProvider,\n GateMode,\n BehaviorGateData,\n} from './types.js';\n\n// ============================================================================\n// Set Utilities\n// ============================================================================\n\nfunction jaccard(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const intersection = new Set([...a].filter((x) => b.has(x)));\n const union = new Set([...a, ...b]);\n return intersection.size / union.size;\n}\n\nfunction symmetricDifferenceNormalized(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const symDiff = new Set([\n ...[...a].filter((x) => !b.has(x)),\n ...[...b].filter((x) => !a.has(x)),\n ]);\n const union = new Set([...a, ...b]);\n return 1 - symDiff.size / union.size;\n}\n\nfunction coverageRatio(produced: Set<string>, golden: Set<string>): number {\n if (golden.size === 0) return 1;\n const covered = [...golden].filter((x) => produced.has(x));\n return covered.length / golden.size;\n}\n\n// ============================================================================\n// Gate 0 Scoring\n// ============================================================================\n\n/**\n * Score Gate 0 output (shell .orb) against golden behavior data.\n * - Orbital count match (exact = 1.0, off by 1 = 0.5, more = 0.0)\n * - Entity name Jaccard similarity\n */\nexport function scoreGate0(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n const countDiff = Math.abs(orbitals.length - golden.appLevel.orbitalCount);\n const countScore = countDiff === 0 ? 1.0 : countDiff === 1 ? 0.5 : 0.0;\n\n const producedEntities = new Set(\n orbitals.map((o) => String((o.entity as Entity).name).toLowerCase()),\n );\n const goldenEntities = new Set(golden.appLevel.entityNames.map((n) => n.toLowerCase()));\n const entityJaccard = jaccard(producedEntities, goldenEntities);\n\n const score = countScore * 0.4 + entityJaccard * 0.6;\n\n return {\n gate: 0,\n score,\n details: { countScore, entityJaccard },\n };\n}\n\n// ============================================================================\n// Gate 1 Scoring\n// ============================================================================\n\n/**\n * Score Gate 1 output (enriched orbitals) against golden behavior data.\n * Scores the first orbital's entity fields and persistence.\n */\nexport function scoreGate1(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n if (orbitals.length === 0) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n // Score first orbital (or find matching)\n const goldenOrbital = golden.orbitalLevels[0];\n if (!goldenOrbital) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n const entity = orbitals[0].entity as Entity;\n\n // Field name Jaccard\n const producedFields = new Set(entity.fields.map((f) => f.name.toLowerCase()));\n const goldenEntity = goldenOrbital.entity;\n const goldenFields = new Set(\n Array.isArray(goldenEntity.fields)\n ? (goldenEntity.fields as Array<{ name: string }>).map((f) => f.name.toLowerCase())\n : [],\n );\n const fieldJaccard = jaccard(producedFields, goldenFields);\n\n // Persistence match\n const goldenPersistence = String(goldenEntity.persistence || 'runtime');\n const persistenceMatch = entity.persistence === goldenPersistence ? 1.0 : 0.0;\n\n const score = fieldJaccard * 0.7 + persistenceMatch * 0.3;\n\n return {\n gate: 1,\n score,\n details: { fieldJaccard, persistenceMatch },\n };\n}\n\n// ============================================================================\n// Gate 2 Scoring\n// ============================================================================\n\n/**\n * Score Gate 2 output (state machines) against golden behavior data.\n * Scores state set similarity and event key Jaccard across all traits.\n */\nexport function scoreGate2(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const traits = extractAllTraits(orb);\n if (traits.length === 0 || golden.traitLevels.length === 0) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n // Score first trait with state machine\n const trait = traits.find((t) => t.stateMachine) || traits[0];\n const goldenTrait = golden.traitLevels.find(\n (t) => t.traitName.toLowerCase() === trait.name.toLowerCase(),\n ) || golden.traitLevels[0];\n\n if (!goldenTrait || !trait.stateMachine) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n const producedStates = new Set(trait.stateMachine.states.map((s) => s.name.toLowerCase()));\n const goldenStates = new Set(goldenTrait.states.map((s) => s.toLowerCase()));\n const stateSymDiff = symmetricDifferenceNormalized(producedStates, goldenStates);\n\n const producedEvents = new Set(trait.stateMachine.events.map((e) => e.key));\n const goldenEvents = new Set(goldenTrait.events);\n const eventJaccard = jaccard(producedEvents, goldenEvents);\n\n const score = stateSymDiff * 0.5 + eventJaccard * 0.5;\n\n return {\n gate: 2,\n score,\n details: { stateSymDiff, eventJaccard },\n };\n}\n\n// ============================================================================\n// Gate 3 Scoring\n// ============================================================================\n\n/**\n * Score Gate 3 output (guards + effects) against golden behavior data.\n * Averages across all transitions.\n */\nexport function scoreGate3(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0) {\n return { gate: 3, score: 0.5, details: { effectCoverage: 0.5, guardMatch: 0.5 } };\n }\n\n let totalEffectCoverage = 0;\n let totalGuardMatch = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenTransition = golden.transitionLevels.find(\n (t) => t.from === transition.from && t.event === transition.event,\n );\n\n if (!goldenTransition) {\n totalEffectCoverage += 0.5;\n totalGuardMatch += 0.5;\n count++;\n continue;\n }\n\n // Effect type coverage\n const producedTypes = new Set(\n (transition.effects || [])\n .filter((e) => Array.isArray(e))\n .map((e) => String((e as unknown[])[0]))\n .filter((t) => t !== 'render-ui'),\n );\n const goldenTypes = new Set(\n goldenTransition.nonRenderEffects\n .filter((e): e is unknown[] => Array.isArray(e))\n .map((e) => String(e[0])),\n );\n totalEffectCoverage += coverageRatio(producedTypes, goldenTypes);\n\n // Guard presence match\n const hasGuard = !!transition.guard;\n const goldenHasGuard = !!goldenTransition.guard;\n totalGuardMatch += hasGuard === goldenHasGuard ? 1.0 : 0.0;\n count++;\n }\n\n const effectCoverage = count > 0 ? totalEffectCoverage / count : 0.5;\n const guardMatch = count > 0 ? totalGuardMatch / count : 0.5;\n const score = effectCoverage * 0.7 + guardMatch * 0.3;\n\n return {\n gate: 3,\n score,\n details: { effectCoverage, guardMatch },\n };\n}\n\n// ============================================================================\n// Gate 4 Scoring\n// ============================================================================\n\n/**\n * Score Gate 4 output (render-ui effects) against golden behavior data.\n * Pattern type recall and tree node count ratio.\n */\nexport function scoreGate4(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0 || golden.renderUiLevels.length === 0) {\n return { gate: 4, score: 0.5, details: { typeRecall: 0.5, nodeRatio: 0.5 } };\n }\n\n let totalTypeRecall = 0;\n let totalNodeRatio = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenRender = golden.renderUiLevels.find(\n (r) => r.from === transition.from && r.event === transition.event,\n );\n\n if (!goldenRender) continue;\n\n // Collect render-ui effects from this transition\n const renderEffects = (transition.effects || [])\n .filter((e) => Array.isArray(e) && (e as unknown[])[0] === 'render-ui')\n .map((e) => {\n const arr = e as unknown[];\n return { slot: String(arr[1]), tree: (arr[2] as Record<string, unknown>) || {} };\n });\n\n // Collect pattern types\n const producedTypes = new Set<string>();\n let producedNodes = 0;\n for (const re of renderEffects) {\n for (const t of collectTypes(re.tree)) producedTypes.add(t);\n producedNodes += countNodes(re.tree);\n }\n\n const goldenTypes = new Set<string>();\n let goldenNodes = 0;\n for (const re of goldenRender.renderEffects) {\n for (const t of collectTypes(re.tree)) goldenTypes.add(t);\n goldenNodes += countNodes(re.tree);\n }\n\n totalTypeRecall += coverageRatio(producedTypes, goldenTypes);\n totalNodeRatio += goldenNodes > 0\n ? Math.min(producedNodes / goldenNodes, goldenNodes / Math.max(producedNodes, 1))\n : (producedNodes === 0 ? 1 : 0);\n count++;\n }\n\n const typeRecall = count > 0 ? totalTypeRecall / count : 0.5;\n const nodeRatio = count > 0 ? totalNodeRatio / count : 0.5;\n const score = typeRecall * 0.6 + nodeRatio * 0.4;\n\n return {\n gate: 4,\n score,\n details: { typeRecall, nodeRatio },\n };\n}\n\n// ============================================================================\n// Overall Pipeline Score\n// ============================================================================\n\nconst GATE_WEIGHTS = [0.10, 0.15, 0.25, 0.20, 0.30] as const;\n\n/**\n * Compute weighted overall score from individual gate scores.\n */\nexport function scoreOverall(\n gateScores: GateScore[],\n provider: GateProvider,\n mode: GateMode,\n behaviorName: string,\n): PipelineScore {\n let overall = 0;\n for (const gs of gateScores) {\n const weight = GATE_WEIGHTS[gs.gate] ?? 0;\n overall += gs.score * weight;\n }\n\n return {\n overall,\n gates: gateScores,\n provider,\n mode,\n behaviorName,\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction extractAllTraits(orb: OrbitalSchema): Trait[] {\n const traits: Trait[] = [];\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n traits.push(t as Trait);\n }\n }\n return traits;\n}\n\nfunction extractAllTransitions(orb: OrbitalSchema): Transition[] {\n const transitions: Transition[] = [];\n for (const trait of extractAllTraits(orb)) {\n if (!trait.stateMachine) continue;\n transitions.push(...trait.stateMachine.transitions);\n }\n return transitions;\n}\n\nfunction collectTypes(tree: Record<string, unknown>): Set<string> {\n const types = new Set<string>();\n if (tree.type) types.add(String(tree.type));\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) {\n for (const t of collectTypes(child)) types.add(t);\n }\n }\n return types;\n}\n\nfunction countNodes(tree: Record<string, unknown>): number {\n let count = 1;\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) count += countNodes(child);\n }\n return count;\n}\n","/**\n * Agentic Gate Tools\n *\n * LangGraph-compatible tools that wrap the gate pipeline for use\n * by a Claude main agent. Each tool is a scoped operation:\n *\n * - decompose_app: break prompt into orbital plan (Gate 0 subagent)\n * - match_behavior: find golden behavior (Gate 0.5 subagent)\n * - build_orbital: run gate pipeline on one orbital (Gates 1-4, DeepSeek)\n * - verify_app: run orbital-verify (deterministic)\n *\n * The main agent (Claude) decides what to call, reads results, iterates.\n * The gate subagents (DeepSeek) do the scoped generation.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { createDeepSeekClient, createOpenRouterClient, type LLMClient } from '@almadar/llm';\nimport type { OrbitalSchema, OrbitalDefinition } from '@almadar/core/types';\nimport { runGate0 } from '../gate0-application.js';\nimport { runGate05 } from '../gate05-behavior-match.js';\nimport { runGate1 } from '../gate1-orbital.js';\nimport { runGate2 } from '../gate2-trait.js';\nimport { runGate3 } from '../gate3-transition.js';\nimport { runGate4 } from '../gate4-render-ui.js';\nimport { validateWithOrbitalCLI } from '../../evals/utils/orbital-validate.js';\nimport type { GateOpts } from '../types.js';\n\n// ============================================================================\n// Gate client factory\n// ============================================================================\n\nexport type GateClientProvider = 'deepseek' | 'qwen3.5' | 'gemma3-4b' | 'mistral-small' | 'mistral-medium';\n\nfunction createGateClient(provider: GateClientProvider = 'mistral-small'): LLMClient {\n let client: LLMClient;\n switch (provider) {\n case 'qwen3.5':\n client = createOpenRouterClient({ model: 'qwen/qwen3.5-9b' });\n break;\n case 'gemma3-4b':\n client = createOpenRouterClient({ model: 'google/gemma-3-4b-it' });\n break;\n case 'mistral-small':\n client = createOpenRouterClient({ model: 'mistralai/mistral-small-3.1-24b-instruct' });\n break;\n case 'mistral-medium':\n client = createOpenRouterClient({ model: 'mistralai/mistral-medium-3.1' });\n break;\n case 'deepseek':\n default:\n client = createDeepSeekClient();\n break;\n }\n\n // Qwen3.5 burns all output tokens on reasoning unless thinking is disabled\n if (provider === 'qwen3.5') {\n const originalCallRaw = client.callRaw.bind(client);\n const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);\n client.callRaw = (opts) =>\n originalCallRaw({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n client.callRawWithMetadata = (opts) =>\n originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n }\n\n return client;\n}\n\n// ============================================================================\n// decompose_app\n// ============================================================================\n\nexport function createDecomposeAppTool(gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n const orb = await runGate0(client, input.prompt);\n\n return {\n appName: orb.name,\n orbitals: (orb.orbitals as OrbitalDefinition[]).map((o) => ({\n name: o.name,\n entityName: (o.entity as { name: string }).name,\n traitNames: o.traits\n .filter((t): t is { name: string } => typeof t !== 'string' && !('ref' in t))\n .map((t) => t.name),\n pageCount: o.pages?.length ?? 0,\n })),\n shellOrb: orb,\n };\n },\n {\n name: 'decompose_app',\n description: 'Decompose a natural language prompt into an orbital plan. Returns the app name, orbital list with entity names, and a shell .orb schema.',\n schema: z.object({\n prompt: z.string().describe('Natural language application description'),\n }),\n },\n );\n}\n\n// ============================================================================\n// match_behavior\n// ============================================================================\n\nexport function createMatchBehaviorTool(gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n // Create a minimal orb for the match call\n const shellOrb: OrbitalSchema = {\n name: 'App',\n orbitals: [{\n name: input.orbitalName,\n entity: { name: input.entityName, fields: [{ name: 'id', type: 'string' }] },\n traits: [],\n pages: [],\n }] as unknown as OrbitalSchema['orbitals'],\n };\n\n const result = await runGate05(client, input.description, shellOrb);\n return {\n matched: result.matchedName !== null,\n behaviorName: result.matchedName,\n hasGoldenOrb: result.goldenOrb !== null,\n };\n },\n {\n name: 'match_behavior',\n description: 'Find the best matching golden behavior from 107 standard behaviors. Returns the match name and whether a golden .orb reference was loaded.',\n schema: z.object({\n description: z.string().describe('Description of the orbital to match'),\n orbitalName: z.string().describe('Name of the orbital'),\n entityName: z.string().describe('Name of the entity'),\n }),\n },\n );\n}\n\n// ============================================================================\n// build_orbital\n// ============================================================================\n\nexport function createBuildOrbitalTool(workDir: string, gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n\n // Parse the shell orbital\n let shellOrb: OrbitalSchema;\n try {\n shellOrb = JSON.parse(input.shellOrb) as OrbitalSchema;\n } catch {\n return { success: false, error: 'Invalid shellOrb JSON' };\n }\n\n // Load golden orb if behavior was matched\n let goldenOrb: OrbitalSchema | undefined;\n if (input.goldenBehavior) {\n const { loadGoldenOrbByName } = await import('../gate05-behavior-match.js');\n goldenOrb = loadGoldenOrbByName(input.goldenBehavior) ?? undefined;\n }\n\n const opts: GateOpts = {\n goldenOrb,\n };\n\n // Add feedback to opts if provided (for retry)\n const feedback = input.feedback;\n\n try {\n // Gate 1: entity\n console.log(`[build_orbital] Gate 1: enriching entity for ${input.orbitalName}`);\n let orb = await runGate1(client, shellOrb, opts);\n\n // Gate 2: state machine\n console.log(`[build_orbital] Gate 2: filling state machines`);\n orb = await runGate2(client, orb, opts);\n\n // Gate 3: effects\n console.log(`[build_orbital] Gate 3: adding effects`);\n orb = await runGate3(client, orb, opts);\n\n // Gate 4: render-ui\n console.log(`[build_orbital] Gate 4: adding render-ui`);\n orb = await runGate4(client, orb, opts);\n\n // Write each orbital to .orbitals/ for finish_task\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const safeName = orbital.name.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(orbital, null, 2));\n console.log(`[build_orbital] Written: ${orbitalPath}`);\n }\n\n // Quick validate\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orb, workDir);\n\n return {\n success: true,\n orbitalName: input.orbitalName,\n orbitalsWritten: (orb.orbitals as OrbitalDefinition[]).length,\n validation: {\n valid: validation.valid,\n errorCount: validation.errors?.length ?? 0,\n errors: (validation.errors ?? []).slice(0, 5).map((e) => e.message),\n },\n };\n } catch (error) {\n return {\n success: false,\n orbitalName: input.orbitalName,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n {\n name: 'build_orbital',\n description: 'Build one orbital by running the gate pipeline (entity -> state machine -> effects -> render-ui). Writes the result to .orbitals/ for finish_task to collect. Optionally takes a golden behavior name for guided mode and feedback for retry.',\n schema: z.object({\n orbitalName: z.string().describe('Name of the orbital to build'),\n shellOrb: z.string().describe('JSON string of the shell OrbitalSchema from decompose_app'),\n goldenBehavior: z.string().optional().describe('Golden behavior name from match_behavior (e.g. \"std-cart\")'),\n feedback: z.string().optional().describe('Feedback from a failed verify_app to guide the rebuild'),\n }),\n },\n );\n}\n\n// ============================================================================\n// verify_app\n// ============================================================================\n\nexport function createVerifyAppTool(workDir: string) {\n return tool(\n async (input) => {\n const orbPath = input.orbPath || path.join(workDir, 'schema.orb');\n\n if (!fs.existsSync(orbPath)) {\n return { success: false, error: `Schema file not found: ${orbPath}` };\n }\n\n try {\n // Dynamic import to avoid rootDir constraint\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as {\n verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{\n phase: number;\n name: string;\n passed: number;\n failed: number;\n checks: Array<{ label: string; passed: boolean; detail?: string }>;\n }>;\n }>;\n };\n\n const result = await verifyApp({\n orbPath,\n headed: true,\n screenshots: true,\n });\n\n // Collect failure details for the agent to read\n const failures: string[] = [];\n for (const phase of result.phases) {\n for (const check of phase.checks) {\n if (!check.passed) {\n failures.push(`[Phase ${phase.phase} ${phase.name}] ${check.label}: ${check.detail || 'failed'}`);\n }\n }\n }\n\n return {\n success: result.totalFailed === 0,\n passed: result.totalPassed,\n failed: result.totalFailed,\n total: result.totalChecks,\n coverage: result.coverage?.ratio ?? null,\n failures: failures.slice(0, 10),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n passed: 0,\n failed: 1,\n total: 1,\n coverage: null,\n failures: [error instanceof Error ? error.message : String(error)],\n };\n }\n },\n {\n name: 'verify_app',\n description: 'Run orbital-verify on a compiled .orb schema. Compiles the app, runs server tests, browser tests, and captures screenshots. Returns pass/fail counts and failure details.',\n schema: z.object({\n orbPath: z.string().optional().describe('Path to .orb file. Defaults to {workDir}/schema.orb'),\n }),\n },\n );\n}\n\n// ============================================================================\n// use-behavior (Phase 3)\n// ============================================================================\n\n/**\n * Behavior function registry.\n * Maps behavior names to their pure function + params builder.\n * When a function exists, use-behavior calls it directly (no substitution).\n */\nconst BEHAVIOR_FUNCTIONS: Record<string, (params: Record<string, unknown>) => OrbitalDefinition> = {};\n\nasync function loadBehaviorFunctions(): Promise<void> {\n if (Object.keys(BEHAVIOR_FUNCTIONS).length > 0) return;\n try {\n const fns = await import('@almadar/std/behaviors/functions') as Record<string, unknown>;\n const mapping: Record<string, string> = {\n // Molecules: CRUD/Data\n 'std-list': 'stdList', 'std-cart': 'stdCart', 'std-detail': 'stdDetail',\n 'std-inventory': 'stdInventory', 'std-messaging': 'stdMessaging', 'std-geospatial': 'stdGeospatial',\n // Atoms: UI\n 'std-browse': 'stdBrowse', 'std-modal': 'stdModal', 'std-confirmation': 'stdConfirmation',\n 'std-search': 'stdSearch', 'std-filter': 'stdFilter', 'std-sort': 'stdSort',\n 'std-pagination': 'stdPagination', 'std-drawer': 'stdDrawer', 'std-notification': 'stdNotification',\n 'std-timer': 'stdTimer', 'std-tabs': 'stdTabs', 'std-loading': 'stdLoading',\n 'std-selection': 'stdSelection', 'std-undo': 'stdUndo', 'std-input': 'stdInput',\n // Atoms: Domain\n 'std-wizard': 'stdWizard', 'std-display': 'stdDisplay', 'std-async': 'stdAsync',\n 'std-combat': 'stdCombat', 'std-gameflow': 'stdGameflow', 'std-movement': 'stdMovement',\n 'std-quest': 'stdQuest', 'std-overworld': 'stdOverworld',\n 'std-circuit-breaker': 'stdCircuitBreaker', 'std-cache-aside': 'stdCacheAside',\n 'std-score': 'stdScore', 'std-collision': 'stdCollision', 'std-physics2d': 'stdPhysics2d',\n 'std-rate-limiter': 'stdRateLimiter',\n // Atoms: Game UI\n 'std-game-hud': 'stdGameHud', 'std-score-board': 'stdScoreBoard',\n 'std-game-menu': 'stdGameMenu', 'std-game-over-screen': 'stdGameOverScreen',\n 'std-dialogue-box': 'stdDialogueBox', 'std-inventory-panel': 'stdInventoryPanel',\n 'std-combat-log': 'stdCombatLog', 'std-sprite': 'stdSprite', 'std-game-audio': 'stdGameAudio',\n // Atoms: Game Canvas\n 'std-isometric-canvas': 'stdIsometricCanvas', 'std-platformer-canvas': 'stdPlatformerCanvas',\n 'std-simulation-canvas': 'stdSimulationCanvas',\n 'std-game-canvas-2d': 'stdGameCanvas2d', 'std-game-canvas-3d': 'stdGameCanvas3d',\n // Molecules: Game\n 'std-turn-based-battle': 'stdTurnBasedBattle', 'std-platformer-game': 'stdPlatformerGame',\n 'std-puzzle-game': 'stdPuzzleGame',\n // Molecules: Educational\n 'std-builder-game': 'stdBuilderGame', 'std-classifier-game': 'stdClassifierGame',\n 'std-sequencer-game': 'stdSequencerGame', 'std-debugger-game': 'stdDebuggerGame',\n 'std-negotiator-game': 'stdNegotiatorGame', 'std-simulator-game': 'stdSimulatorGame',\n 'std-event-handler-game': 'stdEventHandlerGame',\n };\n for (const [behaviorName, fnName] of Object.entries(mapping)) {\n if (typeof fns[fnName] === 'function') {\n BEHAVIOR_FUNCTIONS[behaviorName] = fns[fnName] as (params: Record<string, unknown>) => OrbitalDefinition;\n }\n }\n } catch { /* functions not available, fall back to substitution */ }\n}\n\nexport function createUseBehaviorTool(workDir: string) {\n return tool(\n async (input) => {\n await loadBehaviorFunctions();\n const newEntityName = input.entityName;\n const newFields = JSON.parse(input.fieldsJson) as Array<{ name: string; type: string; required?: boolean; default?: unknown }>;\n\n let finalOrbital: Record<string, unknown>;\n\n // Try function-based approach first\n const behaviorFn = BEHAVIOR_FUNCTIONS[input.behaviorName];\n if (behaviorFn) {\n console.log(`[use_behavior] Calling ${input.behaviorName} as pure function`);\n const orbital = behaviorFn({\n entityName: newEntityName,\n fields: newFields,\n persistence: input.persistence ?? 'runtime',\n pageTitle: input.title,\n createButtonLabel: input.createButtonLabel,\n pageName: input.pageName,\n pagePath: input.pagePath,\n isInitial: input.isInitialPage,\n });\n finalOrbital = orbital as unknown as Record<string, unknown>;\n } else {\n // Fallback: load golden .orb and substitute\n console.log(`[use_behavior] Falling back to substitution for ${input.behaviorName}`);\n const { loadGoldenOrb } = await import('@almadar/std');\n const behavior = loadGoldenOrb(input.behaviorName);\n if (!behavior) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" not found` };\n }\n\n const cloned = structuredClone(behavior) as Record<string, unknown>;\n const orbitalData = (cloned.orbitals as Record<string, unknown>[])?.[0];\n const goldenTrait = orbitalData\n ? ((orbitalData.traits as Record<string, unknown>[]) ?? [])[0]\n : cloned;\n const goldenEntity = orbitalData?.entity as Record<string, unknown> | undefined;\n\n if (!goldenTrait?.stateMachine) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" has no state machine` };\n }\n\n if (!newFields.some(f => f.name === 'id')) {\n newFields.unshift({ name: 'id', type: 'string', required: true });\n }\n\n const oldEntityName = String(goldenEntity?.name ?? goldenTrait.linkedEntity ?? 'Item');\n const traitName = `${newEntityName}Management`;\n\n const orbital: Record<string, unknown> = {\n name: `${newEntityName}Orbital`,\n entity: {\n name: newEntityName,\n persistence: input.persistence ?? 'runtime',\n ...(input.persistence === 'persistent' ? { collection: newEntityName.toLowerCase() + 's' } : {}),\n fields: newFields,\n },\n traits: [{\n ...goldenTrait,\n name: traitName,\n linkedEntity: newEntityName,\n category: String(goldenTrait.category ?? 'interaction'),\n }],\n pages: [{\n name: input.pageName ?? `${newEntityName}Page`,\n path: input.pagePath ?? `/${newEntityName.toLowerCase()}s`,\n ...(input.isInitialPage ? { isInitial: true } : {}),\n traits: [{ ref: traitName }],\n }],\n };\n\n const orbStr = JSON.stringify(orbital);\n const substituted = orbStr\n .replace(new RegExp(`\"entity\":\\\\s*\"${oldEntityName}\"`, 'g'), `\"entity\": \"${newEntityName}\"`)\n .replace(new RegExp(`@entity\\\\.${oldEntityName}\\\\.`, 'g'), `@entity.`)\n .replace(new RegExp(`\"${oldEntityName}\"`, 'g'), `\"${newEntityName}\"`);\n\n try {\n finalOrbital = JSON.parse(substituted);\n } catch {\n finalOrbital = orbital;\n }\n\n if (input.title) {\n substituteInRenderUi(finalOrbital, 'typography', 'content', oldEntityName, input.title, true);\n }\n if (input.createButtonLabel) {\n substituteInRenderUi(finalOrbital, 'button', 'label', null, input.createButtonLabel, false);\n }\n }\n\n // Write to .orbitals/\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n const safeName = newEntityName.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(finalOrbital, null, 2));\n\n // Validate\n const schema = { name: newEntityName + 'App', version: '1.0.0', orbitals: [finalOrbital] };\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n behaviorName: input.behaviorName,\n entityName: newEntityName,\n orbitalPath,\n usedFunction: !!behaviorFn,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors ?? []).length,\n errors: (validation.errors ?? []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'use_behavior',\n description: 'Instantiate a standard behavior with custom entity fields and labels. Zero LLM calls. Calls pure behavior function when available, falls back to substitution otherwise.',\n schema: z.object({\n behaviorName: z.string().describe('Standard behavior name (e.g., \"std-list\", \"std-cart\")'),\n entityName: z.string().describe('New entity name in PascalCase (e.g., \"Product\", \"Task\")'),\n fieldsJson: z.string().describe('JSON array of entity fields: [{ name, type, required?, default? }]'),\n persistence: z.string().optional().describe('\"persistent\", \"runtime\", or \"singleton\"'),\n title: z.string().optional().describe('Page title override'),\n createButtonLabel: z.string().optional().describe('Create button label override'),\n pageName: z.string().optional().describe('Page component name'),\n pagePath: z.string().optional().describe('Route path (e.g., \"/products\")'),\n isInitialPage: z.boolean().optional().describe('Whether this is the initial/home page'),\n }),\n },\n );\n}\n\n/** Walk render-ui trees and substitute text in pattern props. */\nfunction substituteInRenderUi(\n orbital: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n): void {\n let found = false;\n const traits = (orbital.traits as Record<string, unknown>[]) || [];\n for (const trait of traits) {\n const sm = trait.stateMachine as Record<string, unknown>;\n if (!sm) continue;\n const transitions = (sm.transitions as Array<Record<string, unknown>>) || [];\n for (const tr of transitions) {\n if (tr.event !== 'INIT') continue;\n const effects = (tr.effects as unknown[][]) || [];\n for (const eff of effects) {\n if (!Array.isArray(eff) || eff[0] !== 'render-ui') continue;\n const tree = eff[2] as Record<string, unknown>;\n if (!tree) continue;\n walkAndSubstitute(tree, patternType, propName, oldValue, newValue, firstOnly, () => { found = true; });\n }\n }\n }\n}\n\nfunction walkAndSubstitute(\n node: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n onFound: () => void,\n): void {\n if (node.type === patternType) {\n const current = node[propName];\n if (typeof current === 'string') {\n if (oldValue === null || current.toLowerCase().includes(oldValue.toLowerCase())) {\n if (!firstOnly || !onFound) {\n node[propName] = newValue;\n onFound();\n }\n }\n }\n }\n const children = node.children as Record<string, unknown>[];\n if (Array.isArray(children)) {\n for (const child of children) {\n if (child && typeof child === 'object') {\n walkAndSubstitute(child, patternType, propName, oldValue, newValue, firstOnly, onFound);\n }\n }\n }\n}\n\n// ============================================================================\n// connect (Phase 4)\n// ============================================================================\n\nexport function createConnectTool(workDir: string) {\n return tool(\n async (input) => {\n const emitterPath = path.join(workDir, '.orbitals', input.emitterFile);\n const listenerPath = path.join(workDir, '.orbitals', input.listenerFile);\n\n if (!fs.existsSync(emitterPath)) return { success: false, error: `Emitter not found: ${emitterPath}` };\n if (!fs.existsSync(listenerPath)) return { success: false, error: `Listener not found: ${listenerPath}` };\n\n const emitter = JSON.parse(fs.readFileSync(emitterPath, 'utf-8')) as Record<string, unknown>;\n const listener = JSON.parse(fs.readFileSync(listenerPath, 'utf-8')) as Record<string, unknown>;\n\n // Find primary traits\n const emitterTraits = (emitter.traits as Record<string, unknown>[]) || [];\n const listenerTraits = (listener.traits as Record<string, unknown>[]) || [];\n if (emitterTraits.length === 0 || listenerTraits.length === 0) {\n return { success: false, error: 'Both orbitals must have at least one trait' };\n }\n\n const emitterTrait = emitterTraits[0];\n const listenerTrait = listenerTraits[0];\n\n // Add emits to emitter\n const emits = (emitterTrait.emits as unknown[]) || [];\n emits.push({\n event: input.eventName,\n scope: 'external',\n ...(input.payloadJson ? { payload: JSON.parse(input.payloadJson) } : {}),\n });\n emitterTrait.emits = emits;\n\n // Add listens to listener\n const listens = (listenerTrait.listens as unknown[]) || [];\n listens.push({\n event: input.eventName,\n triggers: input.triggersEvent || 'INIT',\n scope: 'external',\n });\n listenerTrait.listens = listens;\n\n // Write back\n fs.writeFileSync(emitterPath, JSON.stringify(emitter, null, 2));\n fs.writeFileSync(listenerPath, JSON.stringify(listener, null, 2));\n\n return {\n success: true,\n event: input.eventName,\n emitter: String(emitterTrait.name),\n listener: String(listenerTrait.name),\n };\n },\n {\n name: 'connect_behaviors',\n description: 'Wire a cross-orbital event between two behaviors. Adds emits to the emitter trait and listens to the listener trait.',\n schema: z.object({\n emitterFile: z.string().describe('Emitter orbital filename in .orbitals/ (e.g., \"product.json\")'),\n listenerFile: z.string().describe('Listener orbital filename in .orbitals/ (e.g., \"cart_item.json\")'),\n eventName: z.string().describe('Event name in UPPER_SNAKE_CASE (e.g., \"ADD_TO_CART\")'),\n triggersEvent: z.string().optional().describe('Event to trigger on listener (defaults to \"INIT\")'),\n payloadJson: z.string().optional().describe('JSON array of payload fields: [{ name, type }]'),\n }),\n },\n );\n}\n\n// ============================================================================\n// compose (Phase 5)\n// ============================================================================\n\nexport function createComposeTool(workDir: string) {\n return tool(\n async (input) => {\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n // Load all orbital files\n const orbitals: Record<string, unknown>[] = [];\n const orbitalFiles = input.orbitalFiles ? JSON.parse(input.orbitalFiles) as string[] :\n fs.readdirSync(orbitalsDir).filter(f => f.endsWith('.json'));\n\n for (const file of orbitalFiles) {\n const filePath = path.join(orbitalsDir, file);\n if (!fs.existsSync(filePath)) continue;\n orbitals.push(JSON.parse(fs.readFileSync(filePath, 'utf-8')));\n }\n\n if (orbitals.length === 0) {\n return { success: false, error: 'No orbitals found in .orbitals/' };\n }\n\n // Build pages from input or auto-generate\n let pages: Array<Record<string, unknown>>;\n if (input.pagesJson) {\n pages = JSON.parse(input.pagesJson);\n } else {\n // Auto-generate: one page per orbital\n pages = orbitals.map((o, i) => {\n const oName = String((o as Record<string, unknown>).name || `Orbital${i}`);\n const entityName = oName.replace(/Orbital$/i, '');\n const traits = ((o as Record<string, unknown>).traits as Array<Record<string, unknown>>) || [];\n return {\n name: `${entityName}Page`,\n path: `/${entityName.toLowerCase()}s`,\n ...(i === 0 ? { isInitial: true } : {}),\n traits: traits.filter(t => typeof t !== 'string' && !('ref' in t)).map(t => ({ ref: String(t.name) })),\n };\n });\n }\n\n // Merge pages into orbitals (each orbital keeps its own pages)\n for (const orbital of orbitals) {\n const oName = String(orbital.name || '');\n const orbitalTraitNames = ((orbital.traits as Array<Record<string, unknown>>) || [])\n .filter(t => typeof t !== 'string' && !('ref' in t))\n .map(t => String(t.name));\n\n orbital.pages = pages.filter(p => {\n const pageTraits = (p.traits as Array<{ ref: string }>) || [];\n return pageTraits.some(pt => orbitalTraitNames.includes(pt.ref));\n });\n }\n\n // Build final schema\n const schema = {\n name: input.appName || 'Application',\n version: '1.0.0',\n orbitals,\n };\n\n const schemaPath = path.join(workDir, 'schema.orb');\n fs.writeFileSync(schemaPath, JSON.stringify(schema, null, 2));\n\n // Validate\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n appName: schema.name,\n orbitalCount: orbitals.length,\n pageCount: pages.length,\n schemaPath,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors || []).length,\n errors: (validation.errors || []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'compose_app',\n description: 'Compose multiple orbitals from .orbitals/ into a final multi-page application schema. Writes schema.orb and validates.',\n schema: z.object({\n appName: z.string().optional().describe('Application name'),\n orbitalFiles: z.string().optional().describe('JSON array of orbital filenames. Defaults to all .json files in .orbitals/'),\n pagesJson: z.string().optional().describe('JSON array of page definitions: [{ name, path, isInitial?, traits: [{ ref }] }]. Auto-generated if omitted.'),\n }),\n },\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/evals/utils/orbital-validate.ts","../../src/gates/prompts.ts","../../src/gates/gate0-application.ts","../../src/gates/gate05-behavior-match.ts","../../src/gates/merge.ts","../../src/gates/gate1-orbital.ts","../../src/gates/gate2-trait.ts","../../src/gates/gate3-transition.ts","../../src/gates/gate35-pattern-match.ts","../../src/gates/gate4-render-ui.ts","../../src/gates/orchestrator.ts","../../src/gates/behavior-extract.ts","../../src/gates/scoring.ts","../../src/gates/agentic/tools.ts"],"names":["fs","path","loadGoldenOrbFromStd","extractJsonFromText","tr","opts","createOpenRouterClient","createDeepSeekClient"],"mappings":";;;;;;;;;;;;;AAaA,IAAM,cAAA,GAAiB,0BAAA;AA6BhB,SAAS,sBAAA,CACd,QACA,OAAA,EACyB;AAEzB,EAAA,IAAI,CAACA,GAAA,CAAG,UAAA,CAAW,cAAc,CAAA,EAAG;AAClC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,EAAA,EAAI,OAAA,EAAS,CAAA,4BAAA,EAA+B,cAAc,CAAA,CAAA,EAAI;AAAA,KACxG;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAY,OAAO,MAAA,KAAW,QAAA,GAAW,SAAS,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AACtF,EAAA,MAAM,QAAA,GAAWC,MAAK,IAAA,CAAK,OAAA,EAAS,kBAAkB,IAAA,CAAK,GAAA,EAAK,CAAA,IAAA,CAAM,CAAA;AAEtE,EAAA,IAAI;AACF,IAAAD,GAAA,CAAG,aAAA,CAAc,UAAU,SAAS,CAAA;AAEpC,IAAA,MAAM,SAAS,QAAA,CAAS,CAAA,EAAG,cAAc,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAA,CAAA,EAAK;AAAA,MACzE,QAAA,EAAU,OAAA;AAAA,MACV,OAAA,EAAS,GAAA;AAAA,MACT,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,MAAM,CAAC,CAAA;AAC7C,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAgB;AAEvB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,MAC3C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,QAAQ,CAAC;AAAA,QACP,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM,EAAA;AAAA,QACN,SAAS,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAK,IAAK,IAAI,OAAA,IAAW;AAAA,OAC/C;AAAA,KACH;AAAA,EACF,CAAA,SAAE;AAEA,IAAA,IAAI;AACF,MAAAA,GAAA,CAAG,WAAW,QAAQ,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAQA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,IAAI,MAAA,EAAQ;AACrB,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AAClB,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,MAAM,KAAA,GAAQ,CAAA;AAEd,MAAA,OAAO,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC1B,QAAA,MAAM,EAAA,GAAK,IAAI,CAAC,CAAA;AAChB,QAAA,IAAI,MAAA,EAAQ;AAAE,UAAA,MAAA,GAAS,KAAA;AAAO,UAAA;AAAA,QAAU;AACxC,QAAA,IAAI,EAAA,KAAO,QAAQ,QAAA,EAAU;AAAE,UAAA,MAAA,GAAS,IAAA;AAAM,UAAA;AAAA,QAAU;AACxD,QAAA,IAAI,OAAO,GAAA,EAAK;AAAE,UAAA,QAAA,GAAW,CAAC,QAAA;AAAU,UAAA;AAAA,QAAU;AAClD,QAAA,IAAI,QAAA,EAAU;AACd,QAAA,IAAI,OAAO,GAAA,EAAK,KAAA,EAAA;AAChB,QAAA,IAAI,OAAO,GAAA,EAAK;AACd,UAAA,KAAA,EAAA;AACA,UAAA,IAAI,UAAU,CAAA,EAAG;AACf,YAAA,OAAA,CAAQ,KAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,CAAA,GAAI,CAAC,CAAC,CAAA;AACpC,YAAA,CAAA,EAAA;AACA,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,IAAI,GAAA,CAAI,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,GAAA;AAAA,EACtC;AAGA,EAAA,IAAI,QAAQ,MAAA,GAAS,CAAA,SAAU,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAC,CAAA;AACzD,EAAA,OAAO,IAAI,IAAA,EAAK;AAClB;ACjHO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,MAAM,gBAAgB,uBAAA,EAAwB;AAE9C,EAAA,OAAO,CAAA;;AAAA,EAEP,aAAa;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0DAAA,CAAA;AAqBf;AAEO,SAAS,oBAAA,CACd,QACA,UAAA,EACQ;AACR,EAAA,IAAI,UAAA,GAAa,CAAA;;AAAA,EAAsD,MAAM,CAAA,CAAA;AAE7E,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,UAAA,IAAc;;AAAA;AAAA,EAAA,EACd,WAAW,YAAY,CAAA;AAAA,YAAA,EACb,UAAA,CAAW,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC;AAAA,UAAA,EACnC,UAAA,CAAW,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,UAAA;AACT;AAMO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,OAAO,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0DAAA,CAAA;AAyBT;AAEO,SAAS,oBAAA,CACd,OAAA,EACA,WAAA,EACA,aAAA,EACQ;AACR,EAAA,IAAI,UAAA,GAAa,CAAA;AAAA,EACjB,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC;;AAAA;AAAA,EAGhC,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,OAAA,CAAQ,IAAI,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAE3E,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,UAAA,IAAc;;AAAA;AAAA,EAChB,IAAA,CAAK,SAAA,CAAU,aAAA,EAAe,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO,UAAA;AACT;AAMO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,OAAO,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0DAAA,CAAA;AAoDT;AAEO,SAAS,oBAAA,CACd,KAAA,EACA,MAAA,EACA,kBAAA,EACA,WAAA,EACQ;AACR,EAAA,IAAI,UAAA,GAAa,CAAA;AAAA,EACjB,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC;;AAAA;AAAA,EAG9B,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC;;AAAA,iBAAA,EAEd,kBAAkB,CAAA,CAAA;AAEnC,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,UAAA,IAAc;;AAAA;AAAA,EAChB,IAAA,CAAK,SAAA,CAAU,WAAA,EAAa,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO,UAAA;AACT;AAMO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAC3C,EAAA,MAAM,sBAAsB,sBAAA,EAAuB;AAEnD,EAAA,OAAO,CAAA;;AAAA,EAEP,eAAe;;AAAA,EAEf,mBAAmB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0DAAA,CAAA;AAmCrB;AAEO,SAAS,oBAAA,CACd,UAAA,EACA,MAAA,EACA,EAAA,EACA,gBAAA,EACQ;AACR,EAAA,IAAI,UAAA,GAAa,CAAA;AAAA,EACjB,WAAW,IAAI,CAAA,IAAA,EAAO,WAAW,KAAK,CAAA,KAAA,EAAQ,WAAW,EAAE;;AAAA,QAAA,EAEnD,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC;AAAA,YAAA,EAC3B,EAAA,CAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,YAAA,EACvC,KAAK,SAAA,CAAU,EAAA,CAAG,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAE9C,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,UAAA,IAAc;;AAAA;AAAA,EAChB,IAAA,CAAK,SAAA,CAAU,gBAAA,EAAkB,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,UAAA;AACT;AAMO,SAAS,uBAAuB,eAAA,EAAoC;AACzE,EAAA,MAAM,QAAA,GAAW,eAAA,GACb,2BAAA,CAA4B,eAAe,IAC3C,mBAAA,EAAoB;AAExB,EAAA,OAAO,CAAA;;AAAA,EAEP,QAAQ;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0DAAA,CAAA;AAkCV;AAOO,SAAS,qBACd,UAAA,EACA,MAAA,EACA,eAAA,EACA,EAAA,EACA,aACA,mBAAA,EACQ;AACR,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,UAAA,CAAW,eAAe,CAAA,IAAK,MAAA;AAC9D,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,UAAA,CAAW,UAAA,CAAW,IAAI,CAAA,IAAK,MAAA;AAE5D,EAAA,IAAI,UAAA,GAAa,CAAA,yBAAA,EAA4B,eAAe,CAAA,eAAA,EAAkB,UAAU,CAAA;;AAAA,YAAA,EAE5E,UAAA,CAAW,IAAI,CAAA,EAAA,EAAK,QAAQ,CAAA,KAAA,EAAQ,UAAA,CAAW,KAAK,CAAA,KAAA,EAAQ,UAAA,CAAW,EAAE,CAAA,EAAA,EAAK,UAAU,CAAA;AAAA,iBAAA,EACnF,IAAA,CAAK,UAAU,UAAA,CAAW,OAAA,IAAW,EAAC,EAAG,IAAA,EAAM,CAAC,CAAC;AAAA,QAAA,EAC1D,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC;AAAA,uBAAA,EAChB,OAAO,OAAA,CAAQ,WAAA,CAAY,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,IAAI,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAE5G,EAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,IAAA,UAAA,IAAc;;AAAA;AAAA;AAAA,8DAAA,CAAA;AAAA,EAGhB;AAEA,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,UAAA,IAAc;;AAAA;AAAA,EAChB,IAAA,CAAK,SAAA,CAAU,mBAAA,EAAqB,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,UAAA;AACT;;;AChVA,IAAM,aAAA,GAAgB;AAAA,EACpB,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,eAAA,EAAiB,SAAA;AAAA,MACjB,oBAAA,EAAsB,SAAA;AAAA,MACtB,MAAA,EAAQ,SAAA;AAAA,MACR,mBAAA,EAAqB,SAAA;AAAA,MACrB,OAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAS,SAAA;AAAA,MACT,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA;AAMA,SAAS,iBAAiB,GAAA,EAAiD;AACzE,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,IAAA,IAAQ,SAAS,CAAA;AAGzC,EAAA,MAAM,SAAA,GAAa,GAAA,CAAI,MAAA,IAAsC,EAAC;AAC9D,EAAA,MAAM,UAAA,GAAa,OAAO,SAAA,CAAU,IAAA,IAAQ,KAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAC,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,GAAI,SAAA,CAAU,SAAS,EAAC;AACrE,EAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAA+B,CAAA,CAAE,SAAS,IAAI,CAAA;AAEzE,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,KAAA,GACJ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,MAC5C,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,QAAQ,CAAA;AAAA,MAC/B,GAAI,CAAA,CAAE,QAAA,GAAW,EAAE,QAAA,EAAU,IAAA,KAAS;AAAC,MACvC,CAAA,GACA;AAAA,MACA,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,UAAU,IAAA,EAAK;AAAA,MAC7C,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,QAC7C,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAAA,QACnB,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,QAAQ,CAAA;AAAA,QAC/B,GAAI,CAAA,CAAE,QAAA,GAAW,EAAE,QAAA,EAAU,IAAA,KAAS;AAAC,OACzC,CAAE;AAAA;AACJ,GACJ;AAGA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAAI,GAAA,CAAI,SAAS,EAAC;AAC5D,EAAA,MAAM,SAAS,SAAA,CAAU,MAAA,GAAS,IAC9B,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IAC/C,MAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,EAAG,UAAU,CAAA,OAAA,CAAS,CAAA;AAAA,IAC7C,YAAA,EAAc,MAAA,CAAO,CAAA,CAAE,YAAA,IAAgB,UAAU,CAAA;AAAA,IACjD,QAAA,EAAU,aAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,QAAQ,CAAC,EAAE,MAAM,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C,QAAQ,EAAC;AAAA,MACT,aAAa;AAAC;AAChB,GACF,CAAE,IACA,CAAC;AAAA,IACD,IAAA,EAAM,GAAG,UAAU,CAAA,OAAA,CAAA;AAAA,IACnB,YAAA,EAAc,UAAA;AAAA,IACd,QAAA,EAAU,aAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,QAAQ,CAAC,EAAE,MAAM,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C,QAAQ,EAAC;AAAA,MACT,aAAa;AAAC;AAChB,GACD,CAAA;AAGH,EAAA,MAAM,aAAa,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,GAAI,GAAA,CAAI,QAAQ,EAAC;AACzD,EAAA,MAAM,aAAA,GAAgB,WAAW,GAAA,CAAI,CAAC,OAAO,EAAE,GAAA,EAAK,GAAE,CAAE,CAAA;AACxD,EAAA,MAAM,QAAQ,QAAA,CAAS,MAAA,GAAS,IAC5B,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IAC9C,IAAA,EAAM,OAAO,CAAA,CAAE,IAAA,IAAQ,KAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAC,CAAA;AAAA,IACpD,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,KAAA,IAAS,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACnF,GAAI,CAAA,CAAE,SAAA,GAAY,EAAE,SAAA,EAAW,IAAA,KAAS,EAAC;AAAA,IACzC,QAAQ,KAAA,CAAM,OAAA,CAAQ,EAAE,MAAM,CAAA,GAAI,EAAE,MAAA,GAAS;AAAA,GAC/C,CAAE,IACA,CAAC;AAAA,IACD,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAAA,IAClC,IAAA,EAAM,IAAI,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAC,CAAA,CAAA;AAAA,IACrD,MAAA,EAAQ;AAAA,GACT,CAAA;AAEH,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM;AACvC;AAEA,SAAS,mBAAmB,GAAA,EAA4B;AACtD,EAAA,MAAM,MAAA,GAAS,oBAAoB,GAAG,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,CAAA,4CAAA,EAA+C,GAAA,CAAI,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACpF;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAE7B,EAAA,MAAM,UAAU,MAAA,CAAO,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,WAAW,KAAK,CAAA;AACvD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,OAAA,IAAW,OAAO,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,CAAI,WAAW,EAAC;AAElE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,OAAA;AAAA,IACA,MAAA,EAAQ,EAAE,KAAA,EAAO,aAAA,EAAc;AAAA,IAC/B,UAAU,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAA+B,gBAAA,CAAiB,CAAC,CAAC;AAAA,GAC/E;AACF;AAMA,eAAsB,SACpB,MAAA,EACA,MAAA,EACA,IAAA,GAAiB,IACjB,YAAA,EACwB;AACxB,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAC5C,EAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,IACjB,MAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,IAC/B,YAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,GAC9B,CAAA;AAED,EAAA,OAAO,mBAAmB,GAAG,CAAA;AAC/B;ACtIA,IAAI,aAAA,GAA+B,IAAA;AAEnC,SAAS,kBAAA,GAA6B;AACpC,EAAA,IAAI,eAAe,OAAO,aAAA;AAE1B,EAAA,MAAM,MAAM,eAAA,EAAgB;AAC5B,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM;AAC3B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAA,CAAE,WAAA,IAAe,EAAE,CAAA;AACvC,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,GAAI,CAAA,CAAE,OAAO,MAAA,GAAS,CAAA;AAC3D,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,GAAI,CAAA,CAAE,OAAO,MAAA,GAAS,CAAA;AAC3D,IAAA,OAAO,KAAK,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,MAAM,YAAY,MAAM,CAAA,QAAA,CAAA;AAAA,EACxD,CAAC,CAAA;AACD,EAAA,aAAA,GAAgB,KAAA,CAAM,KAAK,IAAI,CAAA;AAC/B,EAAA,OAAO,aAAA;AACT;AAMO,SAAS,oBAAoB,YAAA,EAA4C;AAC9E,EAAA,OAAOE,cAAqB,YAAY,CAAA;AAC1C;AAMA,SAAS,sBAAA,GAAiC;AACxC,EAAA,OAAO,CAAA;;AAAA;;AAAA;;AAAA;AAAA,4BAAA,CAAA;AAQT;AAEA,SAAS,oBAAA,CACP,QACA,GAAA,EACQ;AACR,EAAA,MAAM,YAAA,GAAe,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM;AAC3C,IAAA,MAAM,OAAQ,CAAA,CAAuB,IAAA;AACrC,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO,gBAAgB,MAAM;;AAAA,6BAAA,EAEA,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC;;AAAA;AAAA,EAGpD,oBAAoB,CAAA,CAAA;AACtB;AAeA,eAAsB,UACpB,MAAA,EACA,MAAA,EACA,GAAA,EACA,IAAA,GAAiB,EAAC,EACY;AAC9B,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAC5C,EAAA,MAAM,UAAA,GAAa,oBAAA,CAAqB,MAAA,EAAQ,GAAG,CAAA;AAEnD,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,IAC/B,YAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,GAC9B,CAAA;AAED,EAAA,MAAM,MAAA,GAASC,oBAAoB,GAAG,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAK,sEAAsE,CAAA;AACnF,IAAA,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK;AAAA,EAC9C;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,MAAM,CAAA;AAE5C,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,OAAA,CAAQ,IAAI,qDAAqD,CAAA;AACjE,IAAA,OAAO,EAAE,WAAA,EAAa,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK;AAAA,EAC9C;AAGA,EAAA,MAAM,SAAA,GAAY,oBAAoB,SAAS,CAAA;AAC/C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oBAAA,EAAuB,SAAS,CAAA,8BAAA,CAAgC,CAAA;AAC7E,IAAA,OAAO,EAAE,WAAA,EAAa,SAAA,EAAW,SAAA,EAAW,IAAA,EAAK;AAAA,EACnD;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAE,CAAA;AACvD,EAAA,OAAO,EAAE,WAAA,EAAa,SAAA,EAAW,SAAA,EAAU;AAC7C;;;AC9GO,SAAS,aAAa,GAAA,EAAmC;AAC9D,EAAA,OAAO,gBAAgB,GAAG,CAAA;AAC5B;AAUO,SAAS,cAAA,CACd,GAAA,EACA,IAAA,EACA,QAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,aAAa,GAAG,CAAA;AAC9B,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,SAAA;AAAA,IACzB,CAAC,CAAA,KAAO,CAAA,CAAwB,IAAA,KAAS;AAAA,GAC3C;AACA,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,GAAI,QAAA;AAAA,EACxB;AACA,EAAA,OAAO,KAAA;AACT;AAUO,SAAS,YAAA,CACd,GAAA,EACA,OAAA,EACA,SAAA,EACA,QAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,aAAa,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA;AAAA,IAC7B,CAAC,CAAA,KAAO,CAAA,CAAwB,IAAA,KAAS;AAAA,GAC3C;AACA,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,KAAM;AAClC,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA,KAAM,SAAA;AACxC,IAAA,IAAI,KAAA,IAAS,CAAA,EAAG,OAAO,CAAA,CAAE,GAAA,KAAQ,SAAA;AACjC,IAAA,OAAO,EAAE,IAAA,KAAS,SAAA;AAAA,EACpB,CAAC,CAAA;AAED,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA;AAAA,EAChB;AACA,EAAA,OAAO,KAAA;AACT;AAUO,SAAS,kBACd,GAAA,EACA,OAAA,EACA,SAAA,EACA,IAAA,EACA,OACA,QAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,aAAa,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA;AAAA,IAC7B,CAAC,CAAA,KAAO,CAAA,CAAwB,IAAA,KAAS;AAAA,GAC3C;AACA,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM;AACvC,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,KAAA;AAClC,IAAA,IAAI,KAAA,IAAS,GAAG,OAAO,KAAA;AACvB,IAAA,OAAO,EAAE,IAAA,KAAS,SAAA;AAAA,EACpB,CAAC,CAAA;AACD,EAAA,IAAI,CAAC,KAAA,EAAO,YAAA,EAAc,OAAO,KAAA;AAEjC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,YAAA,CAAa,WAAA,CAAY,SAAA;AAAA,IACzC,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,EAAE,KAAA,KAAU;AAAA,GACxC;AACA,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,KAAA,CAAM,YAAA,CAAa,WAAA,CAAY,GAAG,CAAA,GAAI,QAAA;AAAA,EACxC;AACA,EAAA,OAAO,KAAA;AACT;;;ACxFA,SAAS,kBAAA,CAAmB,KAAa,QAAA,EAAgD;AACvF,EAAA,MAAM,MAAA,GAASA,oBAAoB,GAAG,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,CAAA,4CAAA,EAA+C,GAAA,CAAI,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACpF;AAEA,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAG7B,EAAA,MAAM,SAAA,GAAa,GAAA,CAAI,MAAA,IAAsC,EAAC;AAC9D,EAAA,MAAM,UAAA,GAAa,MAAA;AAAA,IACjB,SAAA,CAAU,IAAA,IAAS,QAAA,CAAS,MAAA,CAAkB;AAAA,GAChD;AACA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,GAAI,SAAA,CAAU,SAAS,EAAC;AACxE,EAAA,MAAM,MAAA,GAAiB;AAAA,IACrB,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAc,UAAU,WAAA,IAAyC,SAAA;AAAA,IACjE,GAAI,SAAA,CAAU,UAAA,GAAa,EAAE,UAAA,EAAY,OAAO,SAAA,CAAU,UAAU,CAAA,EAAE,GAAI,EAAC;AAAA,IAC3E,QAAQ,SAAA,CAAU,MAAA,GAAS,IACvB,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,MAC/C,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AAAA,MACzB,IAAA,EAAO,EAAE,IAAA,IAAsB,QAAA;AAAA,MAC/B,GAAI,CAAA,CAAE,QAAA,GAAW,EAAE,QAAA,EAAU,IAAA,KAAS,EAAC;AAAA,MACvC,GAAI,EAAE,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,GAAI;AAAC,KAC1D,CAAE,CAAA,GACA,CAAC,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,QAAA,EAAuB,QAAA,EAAU,IAAA,EAAM;AAAA,GAClE;AAGA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAAI,GAAA,CAAI,SAAS,EAAC;AAC5D,EAAA,MAAM,MAAA,GAAkB,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IACrE,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AAAA,IACzB,YAAA,EAAc,MAAA,CAAO,CAAA,CAAE,YAAA,IAAgB,UAAU,CAAA;AAAA,IACjD,QAAA,EAAU,aAAA;AAAA,IACV,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA,CAAE,KAAA,CAAM,MAAA,GAAS,CAAA,GAC3C,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAmC,OAAO,CAAA,KAAM,QAAA,GAAW,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI,CAAuB,CAAA,EAAE,GACzH,EAAC;AAAA,IACL,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,IAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,CAAA,GAC/C,EAAE,OAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAmC,OAAO,CAAA,KAAM,QAAA,GAAW,EAAE,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE,GAAI,CAAuB,CAAA,KACxI,EAAC;AAAA,IACL,YAAA,EAAc;AAAA,MACZ,QAAQ,CAAC,EAAE,MAAM,MAAA,EAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C,QAAQ,EAAC;AAAA,MACT,aAAa;AAAC;AAChB,GACF,CAAE,CAAA;AAGF,EAAA,MAAM,aAAa,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAC3C,EAAA,MAAM,gBAAA,GAAmB,WAAW,GAAA,CAAI,CAAC,OAAO,EAAE,GAAA,EAAK,GAAE,CAAE,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,GAAI,GAAA,CAAI,QAAQ,EAAC;AACzD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IAC1D,MAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,SAAS,EAAE,CAAA;AAAA,IACpC,MAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,SAAS,GAAG,CAAA;AAAA,IACrC,GAAI,CAAA,CAAE,SAAA,GAAY,EAAE,SAAA,EAAW,IAAA,KAAS,EAAC;AAAA,IACzC,QAAQ,KAAA,CAAM,OAAA,CAAQ,EAAE,MAAM,CAAA,GAAI,EAAE,MAAA,GAAS;AAAA,GAC/C,CAAE,CAAA;AAEF,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,IAAA,IAAQ,SAAS,IAAI,CAAA;AAAA,IACtC,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAUA,eAAsB,SACpB,MAAA,EACA,GAAA,EACA,IAAA,GAAiB,IACjB,YAAA,EACwB;AACxB,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAC5C,EAAA,MAAM,cAAc,GAAA,CAAI,QAAA;AACxB,EAAA,IAAI,MAAA,GAAS,GAAA;AAEb,EAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AAEjC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,EAAW,QAAA,CAAS,IAAA;AAAA,MAC7C,CAAC,CAAA,KAAO,CAAA,CAAwB,IAAA,KAAS,OAAA,CAAQ;AAAA,KACnD;AAEA,IAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,MACjB,OAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,MAC/B,YAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,KAC9B,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,GAAA,EAAK,OAAO,CAAA;AAChD,IAAA,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,MAAA;AACT;AC5GA,SAAS,kBAAA,CAAmB,KAAa,QAAA,EAAwB;AAC/D,EAAA,MAAM,MAAA,GAASA,oBAAoB,GAAG,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAK,CAAA,4CAAA,CAA8C,CAAA;AAC3D,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,KAAK,CAAA,6CAAA,CAA+C,CAAA;AAC5D,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAAI,GAAA,CAAI,SAAS,EAAC;AAC5D,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAAI,GAAA,CAAI,SAAS,EAAC;AAC5D,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA,GAAI,GAAA,CAAI,cAAc,EAAC;AAG3E,EAAA,MAAM,QAAQ,GAAA,CAAI,YAAA;AAClB,EAAA,MAAM,MAAA,GAAA,CAAU,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,SAAA,EACnE,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IACpC,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AAAA,IACzB,GAAI,CAAA,CAAE,SAAA,GAAY,EAAE,SAAA,EAAW,IAAA,KAAS;AAAC,GAC3C,CAAE,CAAA;AAEJ,EAAA,MAAM,MAAA,GAAA,CAAU,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,SAAA,EACnE,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IACpC,GAAA,EAAK,MAAA,CAAO,CAAA,CAAE,GAAA,IAAO,EAAE,CAAA;AAAA,IACvB,MAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,IAClC,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,aAAa,CAAA,GAAI,EAAE,aAAA,EAAe,CAAA,CAAE,aAAA,EAAc,GAAI;AAAC,GAC7E,CAAE,CAAA;AAEJ,EAAA,MAAM,WAAA,GAAA,CAAe,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,GAAI,KAAA,CAAM,WAAA,GAAc,cAAA,EAClF,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IACpC,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AAAA,IACzB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,EAAE,CAAA;AAAA,IAC3B,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAA,IAAM,EAAE,CAAA;AAAA,IACrB,SAAS;AAAC,GACZ,CAAE,CAAA;AAEJ,EAAA,MAAM,YAAA,GAA6B,EAAE,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAY;AAIjE,EAAA,MAAM,kBAAA,uBAAyB,GAAA,CAAY,CAAC,SAAS,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,gBAAgB,CAAC,CAAA;AACrG,EAAA,MAAM,KAAA,GAAS,GAAA,CAAI,EAAA,IAAM,KAAA,EAAO,EAAA;AAChC,EAAA,MAAM,EAAA,GAAK,QAAQ,MAAA,CAAO,WAAA;AAAA,IACxB,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,SAAA,EAAW,OAAO,CAAA,KAAM;AAClD,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,YAAA,IAAgB,QAAQ,CAAA;AACpD,MAAA,OAAO;AAAA,QACL,SAAA;AAAA,QACA;AAAA,UACE,YAAA,EAAe,kBAAA,CAAmB,GAAA,CAAI,IAAI,IAAI,IAAA,GAAO,QAAA;AAAA,UACrD,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAW;AAAC;AAChC,OACF;AAAA,IACF,CAAC;AAAA,GACH,GAAI,MAAA;AAEJ,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,IAAA,IAAQ,SAAS,IAAI,CAAA;AAAA,IACtC,YAAA;AAAA,IACA,GAAI,EAAA,GAAK,EAAE,EAAA,KAAO;AAAC,GACrB;AACF;AAUA,eAAsB,SACpB,MAAA,EACA,GAAA,EACA,IAAA,GAAiB,IACjB,YAAA,EACwB;AACxB,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAC5C,EAAA,IAAI,MAAA,GAAS,GAAA;AAEb,EAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,MAAA,EAAQ;AACrC,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,KAAA,IAAS,QAAA,EAAU;AACvD,MAAA,MAAM,KAAA,GAAQ,QAAA;AAGd,MAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,IAAA,CAAK,SAAA,EAAW,MAAM,IAAI,CAAA;AAE9D,MAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,QACjB,KAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAQ,WAAA,IAAe,EAAA;AAAA,QACvB;AAAA,OACF;AAEA,MAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,QAC/B,YAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,OAC9B,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,GAAA,EAAK,KAAK,CAAA;AAC9C,MAAA,MAAA,GAAS,aAAa,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,KAAA,CAAM,MAAM,QAAQ,CAAA;AAAA,IAClE;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,eAAA,CACP,WACA,SAAA,EACmB;AACnB,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,KAAA,MAAW,OAAA,IAAW,UAAU,QAAA,EAAiC;AAC/D,IAAA,KAAA,MAAW,CAAA,IAAK,QAAQ,MAAA,EAAQ;AAC9B,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,KAAA,IAAS,CAAA,EAAG;AACzC,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,SAAA,EAAW,OAAO,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;ACrIA,SAAS,kBAAA,CAAmB,KAAa,QAAA,EAAkC;AACzE,EAAA,MAAM,MAAA,GAASA,oBAAoB,GAAG,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAK,CAAA,iDAAA,CAAmD,CAAA;AAChE,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,KAAK,CAAA,kDAAA,CAAoD,CAAA;AACjE,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,IAAI,KAAK,CAAA,GAAK,IAAI,KAAA,GAAuB,MAAA;AACrE,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,GAAI,GAAA,CAAI,UAAU,EAAC;AAC/D,EAAA,MAAM,UAAoB,UAAA,CAAW,MAAA;AAAA,IACnC,CAAC,CAAA,KAAe,KAAA,CAAM,QAAQ,CAAC,CAAA,IAAK,EAAE,MAAA,IAAU;AAAA,GAClD;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,IAAA,IAAQ,SAAS,IAAI,CAAA;AAAA,IACtC,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,SAAS,KAAK,CAAA;AAAA,IACzC,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,EAAA,IAAM,SAAS,EAAE,CAAA;AAAA,IAChC,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,IACzB;AAAA,GACF;AACF;AAUA,eAAsB,SACpB,MAAA,EACA,GAAA,EACA,IAAA,GAAiB,IACjB,aAAA,EACwB;AACxB,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAC5C,EAAA,IAAI,MAAA,GAAS,GAAA;AAEb,EAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,MAAA,EAAQ;AACrC,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,KAAA,IAAS,QAAA,EAAU;AACvD,MAAA,MAAM,KAAA,GAAQ,QAAA;AACd,MAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AAEzB,MAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,YAAA,CAAa,WAAA,EAAa;AAEvD,QAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,UACvB,IAAA,CAAK,SAAA;AAAA,UAAW,KAAA,CAAM,IAAA;AAAA,UAAM,UAAA,CAAW,IAAA;AAAA,UAAM,UAAA,CAAW;AAAA,SAC1D;AAEA,QAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,UACjB,UAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA,CAAM,YAAA;AAAA,UACN;AAAA,SACF;AAEA,QAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,UAC/B,YAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,SAC9B,CAAA;AAED,QAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,GAAA,EAAK,UAAU,CAAA;AACnD,QAAA,MAAA,GAAS,iBAAA;AAAA,UACP,MAAA;AAAA,UAAQ,OAAA,CAAQ,IAAA;AAAA,UAAM,KAAA,CAAM,IAAA;AAAA,UAC5B,UAAA,CAAW,IAAA;AAAA,UAAM,UAAA,CAAW,KAAA;AAAA,UAAO;AAAA,SACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,oBAAA,CACP,SAAA,EACA,SAAA,EACA,IAAA,EACA,KAAA,EACwB;AACxB,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,KAAA,MAAW,OAAA,IAAW,UAAU,QAAA,EAAiC;AAC/D,IAAA,KAAA,MAAW,CAAA,IAAK,QAAQ,MAAA,EAAQ;AAC9B,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,KAAA,IAAS,CAAA,EAAG;AACzC,MAAA,IAAI,CAAA,CAAE,SAAS,SAAA,EAAW;AAC1B,MAAA,MAAM,KAAM,CAAA,CAAY,YAAA;AACxB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,KAAA,GAAQ,GAAG,WAAA,CAAY,IAAA;AAAA,QAC3B,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,KAAS,IAAA,IAAQ,GAAG,KAAA,KAAU;AAAA,OAC3C;AACA,MAAA,IAAI,OAAO,OAAO,KAAA;AAAA,IACpB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AClHA,IAAM,aAAA,GAAgB;AAAA,EACpB,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,YAAA;AAAA,EAAc,SAAA;AAAA,EAAW,MAAA;AAAA,EAAQ;AACnD,CAAA;AAMA,IAAM,WAAA,uBAAkB,GAAA,CAAI;AAAA,EAC1B,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,MAAA;AAAA,EAAQ,MAAA;AAAA,EACvD,UAAA;AAAA,EAAY,WAAA;AAAA,EAAa,YAAA;AAAA,EAAc,OAAA;AAAA,EAAS,QAAA;AAAA,EAChD,WAAA;AAAA,EAAa,UAAA;AAAA,EAAY,SAAA;AAAA,EAAW,OAAA;AAAA,EAAS,SAAA;AAAA,EAAW,OAAA;AAAA,EACxD,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ;AAClB,CAAC,CAAA;AAED,IAAM,kBAAA,uBAAyB,GAAA,CAAI;AAAA,EACjC,YAAA;AAAA,EAAc,eAAA;AAAA,EAAiB,gBAAA;AAAA,EAAkB,OAAA;AAAA,EAAS,eAAA;AAAA,EAC1D,eAAA;AAAA,EAAiB,eAAA;AAAA,EAAiB,eAAA;AAAA,EAAiB,UAAA;AAAA,EACnD,kBAAA;AAAA,EAAoB,eAAA;AAAA,EAAiB,gBAAA;AAAA,EAAkB,iBAAA;AAAA,EACvD,SAAA;AAAA,EAAW,iBAAA;AAAA,EAAmB,aAAA;AAAA,EAAe,cAAA;AAAA,EAC7C,eAAA;AAAA,EAAiB,cAAA;AAAA,EAAgB,YAAA;AAAA,EAAc,kBAAA;AAAA,EAC/C,eAAA;AAAA,EAAiB,WAAA;AAAA,EAAa,eAAA;AAAA;AAAA,EAE9B,cAAA;AAAA,EAAgB,kBAAA;AAAA,EAAoB,eAAA;AAAA,EAAiB,iBAAA;AAAA,EACrD,qBAAA;AAAA,EAAuB,kBAAA;AAAA,EAAoB,WAAA;AAAA,EAC3C,mBAAA;AAAA,EAAqB,aAAA;AAAA,EAAe,gBAAA;AAAA,EAAkB,cAAA;AAAA,EACtD,YAAA;AAAA,EAAc,kBAAA;AAAA,EAAoB;AACpC,CAAC,CAAA;AAGD,IAAM,eAAA,mBAAkB,IAAI,GAAA,CAAI,CAAC,cAAc,CAAC,CAAA;AAGhD,IAAM,kCAAkB,IAAI,GAAA,CAAI,CAAC,iBAAA,EAAmB,mBAAmB,CAAC,CAAA;AAGxE,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC,uBAAA;AAAA,EAAyB,iBAAA;AAAA,EAAmB,gBAAA;AAAA,EAC5C,YAAA;AAAA,EAAc,YAAA;AAAA,EAAc,WAAA;AAAA,EAAa,kBAAA;AAAA,EACzC,WAAA;AAAA,EAAa,gBAAA;AAAA,EAAkB,iBAAA;AAAA,EAAmB,iBAAA;AAAA,EAClD,iBAAA;AAAA,EAAmB,eAAA;AAAA,EAAiB,UAAA;AAAA,EAAY,UAAA;AAAA,EAChD,eAAA;AAAA,EAAiB,gBAAA;AAAA,EAAkB,UAAA;AAAA,EACnC,YAAA;AAAA,EAAc,cAAA;AAAA,EAAgB,YAAA;AAAA,EAC9B,YAAA;AAAA,EAAc,eAAA;AAAA,EAAiB,kBAAA;AAAA;AAAA,EAE/B,SAAA;AAAA,EAAW,MAAA;AAAA;AAAA,EAEX,gBAAA;AAAA;AAAA,EAEA,qBAAA;AAAA,EAAuB,gBAAA;AAAA,EAAkB,cAAA;AAAA,EAAgB,MAAA;AAAA,EACzD,wBAAA;AAAA,EAA0B,kBAAA;AAAA,EAAoB,0BAAA;AAAA,EAC9C,eAAA;AAAA,EAAiB,UAAA;AAAA,EAAY,cAAA;AAAA,EAAgB,gBAAA;AAAA,EAC7C,aAAA;AAAA,EAAe,kBAAA;AAAA,EAAoB,qBAAA;AAAA,EACnC,YAAA;AAAA,EAAc,YAAA;AAAA,EAAc,eAAA;AAAA,EAAiB,iBAAA;AAAA;AAAA,EAE7C,OAAA;AAAA,EAAS,QAAA;AAAA,EAAU,SAAA;AAAA;AAAA,EAEnB,yBAAA;AAAA,EAA2B,YAAA;AAAA,EAAc,qBAAA;AAAA,EACzC,aAAA;AAAA,EAAe,iBAAA;AAAA,EAAmB,qBAAA;AAAA;AAAA,EAElC,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,QAAA;AAAA;AAAA,EAElB;AACF,CAAC,CAAA;AAiBD,SAAS,WAAW,GAAA,EAAgC;AAClD,EAAA,MAAM,OAAA,GAAsB;AAAA,IAC1B,cAAA,EAAgB,KAAA;AAAA,IAChB,eAAA,EAAiB,KAAA;AAAA,IACjB,aAAA,EAAe,KAAA;AAAA,IACf,SAAA,EAAW,KAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,sBAAgB,GAAA;AAAI,GACtB;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,IAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,MAAA,EAAQ;AACrC,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,KAAA,IAAS,QAAA,EAAU;AACvD,MAAA,MAAM,KAAA,GAAQ,QAAA;AACd,MAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AAEzB,MAAA,MAAM,KAAK,KAAA,CAAM,EAAA;AACjB,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,EAAG;AACnC,UAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,OAAA,EAAS,OAAA,CAAQ,cAAA,GAAiB,IAAA;AAC3D,UAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,QAAA,EAAU,OAAA,CAAQ,eAAA,GAAkB,IAAA;AAAA,QAC/D;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,YAAA,CAAa,MAAA,EAAQ;AAC7C,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,WAAA,EAAY;AACpC,QAAA,IAAI,IAAA,CAAK,SAAS,OAAO,CAAA,IAAK,KAAK,QAAA,CAAS,MAAM,CAAA,EAAG,OAAA,CAAQ,aAAA,GAAgB,IAAA;AAC7E,QAAA,IAAI,IAAA,CAAK,SAAS,OAAO,CAAA,IAAK,KAAK,QAAA,CAAS,SAAS,CAAA,EAAG,OAAA,CAAQ,SAAA,GAAY,IAAA;AAC5E,QAAA,IAAI,IAAA,CAAK,SAAS,QAAQ,CAAA,IAAK,KAAK,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAA,CAAQ,SAAA,GAAY,IAAA;AAC5E,QAAA,IAAI,IAAA,CAAK,SAAS,MAAM,CAAA,IAAK,KAAK,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAA,CAAQ,SAAA,GAAY,IAAA;AAAA,MAC5E;AAEA,MAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,YAAA,CAAa,MAAA,EAAQ;AAC7C,QAAA,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAChC,QAAA,IAAI,YAAY,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,UAAW,MAAA,GAAS,IAAA;AACjD,QAAA,IAAI,MAAM,GAAA,KAAQ,QAAA,IAAY,MAAM,GAAA,KAAQ,QAAA,UAAkB,SAAA,GAAY,IAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAkB,OAAA,EAA+B;AACxD,EAAA,MAAM,UAAU,qBAAA,EAAsB;AACtC,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AAC1C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAExB,MAAA,IAAI,aAAA,CAAc,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AAGvC,MAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,IAAU,mBAAmB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAG1D,MAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,IAAa,gBAAgB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAG1D,MAAA,IAAI,CAAC,OAAA,CAAQ,SAAA,IAAa,gBAAgB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAG1D,MAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,IAAU,qBAAqB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAE5D,MAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAMA,SAAS,iBAAiB,YAAA,EAAgC;AACxD,EAAA,MAAM,UAAU,qBAAA,EAAsB;AACtC,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,YAAY,CAAA;AACpC,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAA,EAAK,EAAG;AACzD,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,CAAA,CAAA,KAAK,QAAQ,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AACtD,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAA,EAAM,GAAG,CAAA,CAAE,CAAA;AACtB,IAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAI,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACxD,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAMA,SAAS,iBAAA,CAAkB,aAAuB,OAAA,EAA6B;AAC7E,EAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAE5C,EAAA,OAAO,CAAA;;AAAA;AAAA,EAGP,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC;;AAAA;;AAAA;AAAA,OAAA,EAKjB,OAAA,CAAQ,aAAA,GAAgB,0CAAA,GAA6C,EAAE,CAAA;AAAA;AAAA;;AAAA;;AAAA,SAAA,EAMrE,YAAY,MAAM,CAAA;AAAA,EAC3B,OAAO;;AAAA,mEAAA,CAAA;AAGT;AAEA,SAAS,gBAAgB,GAAA,EAA4B;AACnD,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,MAAA;AAC5E,IAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AAE/C,IAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,MAAA,EAAQ;AACrC,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,KAAA,IAAS,QAAA,EAAU;AACvD,MAAA,MAAM,KAAA,GAAQ,QAAA;AACd,MAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AAEzB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,OAAK,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACnE,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,OAAK,CAAA,CAAE,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAClE,MAAA,MAAM,KAAK,KAAA,CAAM,EAAA;AACjB,MAAA,MAAM,KAAA,GAAQ,KACV,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,YAAY,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GACvE,MAAA;AAEJ,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,CAAA,WAAA,EAAc,MAAM,CAAA,WAAA,EAAc,MAAM,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE,CAAA;AAAA,IAC7F;AAAA,EACF;AAEA,EAAA,OAAO,CAAA;;AAAA,EAA+C,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACxE;AAYA,eAAsB,SAAA,CACpB,MAAA,EACA,GAAA,EACA,KAAA,GAAkB,EAAC,EACA;AAEnB,EAAA,MAAM,OAAA,GAAU,WAAW,GAAG,CAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,kBAAkB,OAAO,CAAA;AAC7C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,WAAA,CAAY,MAAM,CAAA,gBAAA,EAAmB,QAAQ,MAAM,CAAA,aAAA,EAAgB,OAAA,CAAQ,aAAa,CAAA,CAAA,CAAG,CAAA;AAGnI,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,WAAA,EAAa,OAAO,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,gBAAgB,GAAG,CAAA;AAEtC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,MAC/B,YAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,MAAM,OAAA,GAAUA,oBAAoB,GAAG,CAAA;AACvC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,KAAK,wDAAwD,CAAA;AACrE,MAAA,OAAO,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,aAAA,EAAe,GAAG,WAAW,CAAC,CAAC,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,WAAW,EAAC;AAGrE,IAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,WAAW,CAAA;AAC1C,IAAA,MAAM,YAAY,QAAA,CAAS,MAAA,CAAO,OAAK,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC,CAAA;AAG5D,IAAA,MAAM,MAAA,GAAS,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,aAAA,EAAe,GAAG,SAAS,CAAC,CAAC,CAAA;AAG5D,IAAA,IAAI,MAAA,CAAO,SAAS,EAAA,EAAI;AACtB,MAAA,OAAO,CAAC,GAAG,aAAA,EAAe,GAAG,UAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,IACrD;AAEA,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gBAAA,EAAmB,MAAA,CAAO,MAAM,CAAA,4BAAA,CAA8B,CAAA;AAC3E,MAAA,MAAM,aAAa,CAAC,OAAA,EAAS,gBAAgB,WAAA,EAAa,cAAA,EAAgB,eAAe,MAAM,CAAA;AAC/F,MAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,QAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAAA,MACjE;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAK,CAAA,kBAAA,EAAqB,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,KAAK,CAAA,wBAAA,CAA0B,CAAA;AAC1G,IAAA,OAAO,CAAC,mBAAG,IAAI,GAAA,CAAI,CAAC,GAAG,aAAA,EAAe,GAAG,WAAW,CAAC,CAAC,CAAA;AAAA,EACxD;AACF;AC7RA,SAAS,gBAAA,CACP,IACA,OAAA,EACkC;AAClC,EAAA,MAAM,QAA0C,EAAC;AAEjD,EAAA,KAAA,MAAW,KAAA,IAAS,GAAG,MAAA,EAAQ;AAC7B,IAAA,MAAM,OAAA,GAAU,OAAA,GAAU,KAAA,CAAM,IAAI,CAAA;AACpC,IAAA,KAAA,CAAM,MAAM,IAAI,CAAA,GAAI,OAAA,EAAS,YAAA,KAAiB,UAAU,OAAA,GAAU,MAAA;AAAA,EACpE;AAEA,EAAA,OAAO,KAAA;AACT;AAWA,SAAS,mBAAmB,GAAA,EAA6B;AACvD,EAAA,MAAM,MAAA,GAASA,oBAAoB,GAAG,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAK,6DAA6D,CAAA;AAC1E,IAAA,OAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAA,IAAgB,CAAA;AAAA,EAChG;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,KAAK,CAAA,kDAAA,EAAqD,MAAA,CAAO,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AACxF,IAAA,OAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAA,IAAgB,CAAA;AAAA,EAChG;AAEA,EAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA,GAAI,GAAA,CAAI,gBAAgB,EAAC;AACjF,EAAA,OAAO,gBAAA,CAAiB,GAAA,CAAI,CAAC,CAAA,MAAgC;AAAA,IAC3D,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,MAAM,CAAA;AAAA,IAC7B,IAAA,EAAM,CAAA,CAAE,IAAA,KAAS,IAAA,GAAO,IAAA,GAAS,CAAA,CAAE,IAAA,IAAoC,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,MAAA,EAAQ,SAAS,OAAA;AAAQ,GACjI,CAAE,CAAA;AACJ;AAUA,eAAsB,SACpB,MAAA,EACA,GAAA,EACA,OAAiB,EAAC,EAClB,eACA,eAAA,EACwB;AACxB,EAAA,MAAM,YAAA,GAAe,uBAAuB,eAAe,CAAA;AAC3D,EAAA,IAAI,MAAA,GAAS,GAAA;AAEb,EAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,MAAA,EAAQ;AACrC,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,KAAA,IAAS,QAAA,EAAU;AACvD,MAAA,MAAM,KAAA,GAAQ,QAAA;AACd,MAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AAGzB,MAAA,MAAM,UAAU,KAAA,CAAM,EAAA;AACtB,MAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,YAAA,EAAc,OAAO,CAAA;AAE/D,MAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,YAAA,CAAa,WAAA,EAAa;AACvD,QAAA,MAAM,QAAA,GAAW,UAAA,CAAW,UAAA,CAAW,IAAI,CAAA,IAAK,MAAA;AAChD,QAAA,MAAM,MAAA,GAAS,UAAA,CAAW,UAAA,CAAW,EAAE,CAAA,IAAK,MAAA;AAG5C,QAAA,MAAM,UAAA,GAAa,QAAA,KAAa,OAAA,IAAW,MAAA,KAAW,MAAA;AAEtD,QAAA,MAAM,WAAA,GAA2B,EAAE,UAAA,EAAY,UAAA,EAAW;AAG1D,QAAA,MAAM,mBAAA,GAAsB,uBAAA;AAAA,UAC1B,IAAA,CAAK,SAAA;AAAA,UAAW,KAAA,CAAM,IAAA;AAAA,UAAM,UAAA,CAAW,IAAA;AAAA,UAAM,UAAA,CAAW;AAAA,SAC1D;AAEA,QAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,UACjB,UAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA,CAAW,EAAA;AAAA,UACX,KAAA,CAAM,YAAA;AAAA,UACN,WAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,UAC/B,YAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA,EAAA,CAAY,IAAA,CAAK,SAAA,IAAa,IAAA,IAAQ;AAAA,SACvC,CAAA;AAED,QAAA,MAAM,aAAA,GAAgB,mBAAmB,GAAG,CAAA;AAG5C,QAAA,MAAM,kBAAkB,CAAC,GAAI,UAAA,CAAW,OAAA,IAAW,EAAG,CAAA;AACtD,QAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,UAAA,eAAA,CAAgB,KAAK,CAAC,WAAA,EAAa,GAAG,IAAA,EAAM,EAAA,CAAG,IAAI,CAAW,CAAA;AAAA,QAChE;AAGA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,eAAe,eAAA,CAAgB,IAAA;AAAA,YACnC,CAAC,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,CAAC,CAAA,KAAM,WAAA,IAAe,EAAE,CAAC,CAAA,KAAM,OAAA,IAAW,CAAA,CAAE,CAAC,CAAA,KAAM;AAAA,WAClF;AACA,UAAA,IAAI,CAAC,YAAA,EAAc;AAEjB,YAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,WAAA,EAAa,OAAA,EAAS,IAAI,CAAW,CAAA;AAAA,UAChE;AAAA,QACF;AAEA,QAAA,MAAM,QAAA,GAAuB;AAAA,UAC3B,GAAG,UAAA;AAAA,UACH,OAAA,EAAS;AAAA,SACX;AAEA,QAAA,MAAA,GAAS,iBAAA;AAAA,UACP,MAAA;AAAA,UAAQ,OAAA,CAAQ,IAAA;AAAA,UAAM,KAAA,CAAM,IAAA;AAAA,UAC5B,UAAA,CAAW,IAAA;AAAA,UAAM,UAAA,CAAW,KAAA;AAAA,UAAO;AAAA,SACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,uBAAA,CACP,SAAA,EACA,SAAA,EACA,IAAA,EACA,KAAA,EACoE;AACpE,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,KAAA,MAAW,OAAA,IAAW,UAAU,QAAA,EAAiC;AAC/D,IAAA,KAAA,MAAW,CAAA,IAAK,QAAQ,MAAA,EAAQ;AAC9B,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,KAAA,IAAS,CAAA,EAAG;AACzC,MAAA,IAAI,CAAA,CAAE,SAAS,SAAA,EAAW;AAC1B,MAAA,MAAM,KAAM,CAAA,CAAY,YAAA;AACxB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,EAAA,GAAK,GAAG,WAAA,CAAY,IAAA;AAAA,QACxB,CAACC,GAAAA,KAAOA,GAAAA,CAAG,IAAA,KAAS,IAAA,IAAQA,IAAG,KAAA,KAAU;AAAA,OAC3C;AACA,MAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAClB,MAAA,MAAM,gBAAwE,EAAC;AAC/E,MAAA,KAAA,MAAW,GAAA,IAAO,GAAG,OAAA,EAAS;AAC5B,QAAA,IAAI,MAAM,OAAA,CAAQ,GAAG,KAAK,GAAA,CAAI,CAAC,MAAM,WAAA,EAAa;AAChD,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,YACjB,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,CAAC,KAAK,MAAM,CAAA;AAAA,YAC7B,IAAA,EAAO,GAAA,CAAI,CAAC,CAAA,IAAiC;AAAC,WAC/C,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG,OAAO,aAAA;AAAA,IACvC;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;ACvKA,SAAS,wBAAwB,MAAA,EAAuC;AACtE,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAI,OAAO,KAAA,GAAQ,EAAE,OAAO,MAAA,CAAO,KAAA,KAAU,EAAC;AAAA,IAC9C,GAAI,OAAO,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY,GAAI;AAAC,GAChF;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,QAAQ,OAAO,QAAA;AAAU,IACvB,KAAK,UAAA;AACH,MAAA,MAAA,GAAS,qBAAqB,IAAI,CAAA;AAClC,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,MAAA,GAAS,uBAAuB,EAAE,KAAA,EAAO,cAAA,EAAgB,GAAG,MAAM,CAAA;AAClE,MAAA;AAAA,IACF,KAAK,SAAA;AACH,MAAA,MAAA,GAAS,uBAAuB,EAAE,KAAA,EAAO,iBAAA,EAAmB,GAAG,MAAM,CAAA;AACrE,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,MAAA,GAAS,uBAAuB,EAAE,KAAA,EAAO,sBAAA,EAAwB,GAAG,MAAM,CAAA;AAC1E,MAAA;AAAA,IACF,KAAK,eAAA;AACH,MAAA,MAAA,GAAS,uBAAuB,EAAE,KAAA,EAAO,0CAAA,EAA4C,GAAG,MAAM,CAAA;AAC9F,MAAA;AAAA,IACF,KAAK,gBAAA;AACH,MAAA,MAAA,GAAS,uBAAuB,EAAE,KAAA,EAAO,8BAAA,EAAgC,GAAG,MAAM,CAAA;AAClF,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,MAAA,GAAS,sBAAsB,IAAI,CAAA;AACnC,MAAA;AAAA,IACF,SAAS;AACP,MAAA,MAAM,cAAqB,MAAA,CAAO,QAAA;AAClC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,WAAW,CAAA,CAAE,CAAA;AAAA,IACpD;AAAA;AAIF,EAAA,IAAI,MAAA,CAAO,aAAa,SAAA,EAAW;AACjC,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAClD,IAAA,MAAM,2BAAA,GAA8B,MAAA,CAAO,mBAAA,CAAoB,IAAA,CAAK,MAAM,CAAA;AAC1E,IAAA,MAAA,CAAO,UAAU,CAACC,KAAAA,KAChB,gBAAgB,EAAE,GAAGA,OAAM,UAAA,EAAY,CAAA;AAAA,EAAcA,KAAAA,CAAK,UAAU,CAAA,CAAA,EAAI,CAAA;AAC1E,IAAA,MAAA,CAAO,sBAAsB,CAACA,KAAAA,KAC5B,4BAA4B,EAAE,GAAGA,OAAM,UAAA,EAAY,CAAA;AAAA,EAAcA,KAAAA,CAAK,UAAU,CAAA,CAAA,EAAI,CAAA;AAAA,EACxF;AAEA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,MAAA,GAAiB;AACxB,EAAA,OAAO,YAAY,GAAA,EAAI;AACzB;AAUA,SAAS,gBAAgB,MAAA,EAAqE;AAC5F,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,EAAQ;AAAA,IAC9B,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,KAAS,SAAS,OAAO,KAAA;AAC7B,MAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,MAAM;AAAE,QAAA,KAAA,GAAQ,CAAA;AAAA,MAAG,CAAA;AAEhD,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAChD,MAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,qBAAA,EAAuB;AACxD,QAAA,OAAO,IAAI,IAAA,KAAoB;AAC7B,UAAA,KAAA,EAAA;AACA,UAAA,OAAQ,KAAA,CAAuC,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,QACnE,CAAA;AAAA,MACF;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAaA,eAAsB,eAAA,CACpB,MAAA,EACA,MAAA,EACA,YAAA,EACA,SAAA,EAC6B;AAC7B,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,uBAAA,CAAwB,MAAM,CAAC,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS,OAAA;AACf,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,IAAA;AACtC,EAAA,MAAM,gBAAgB,MAAA,EAAO;AAE7B,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAS,MAAA,CAAO;AAAA,GAClB;AAGA,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,MAAM,UAAU,MAAA,EAAO;AACvB,EAAA,MAAM,gBAAgB,MAAM,QAAA,CAAS,MAAA,EAAQ,MAAA,EAAQ,MAAM,YAAY,CAAA;AACvE,EAAA,MAAM,IAAA,GAAO,QAAO,GAAI,OAAA;AACxB,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;AACxB,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,aAAA,CAAc,IAAI,KAAK,aAAA,CAAc,QAAA,CAAS,MAAM,CAAA,aAAA,EAAgB,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,aAAA,CAAe,CAAA;AACxI,EAAA,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAC,CAAA;AAGtC,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,CAAC,SAAA,EAAW;AAC1C,IAAA,OAAA,CAAQ,KAAA,EAAM;AACd,IAAA,MAAM,WAAW,MAAA,EAAO;AACxB,IAAA,MAAM,cAAc,MAAM,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,eAAe,IAAI,CAAA;AACvE,IAAA,MAAM,KAAA,GAAQ,QAAO,GAAI,QAAA;AACzB,IAAA,QAAA,GAAW,OAAA,CAAQ,KAAA;AACnB,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAA,IAAA,CAAK,YAAY,WAAA,CAAY,SAAA;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,WAAA,CAAY,WAAW,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAA,aAAA,CAAe,CAAA;AAAA,IAC/G,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAI,iDAAiD,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAA,aAAA,CAAe,CAAA;AAAA,IAC7G;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,MAAM,UAAU,MAAA,EAAO;AACvB,EAAA,MAAM,gBAAgB,MAAM,QAAA,CAAS,MAAA,EAAQ,aAAA,EAAe,IAAkB,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,QAAO,GAAI,OAAA;AACxB,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;AACxB,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,aAAA,CAAc,QAAA,CAAS,MAAM,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,aAAA,CAAe,CAAA;AAC1H,EAAA,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAC,CAAA;AAGtC,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,MAAM,UAAU,MAAA,EAAO;AACvB,EAAA,MAAM,gBAAgB,MAAM,QAAA,CAAS,MAAA,EAAQ,aAAA,EAAe,IAAkB,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,QAAO,GAAI,OAAA;AACxB,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;AACxB,EAAA,OAAA,CAAQ,GAAA,CAAI,mCAAmC,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,aAAA,CAAe,CAAA;AAC3F,EAAA,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAC,CAAA;AAGtC,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,MAAM,UAAU,MAAA,EAAO;AACvB,EAAA,MAAM,gBAAgB,MAAM,QAAA,CAAS,MAAA,EAAQ,aAAA,EAAe,IAAkB,CAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,QAAO,GAAI,OAAA;AACxB,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;AACxB,EAAA,OAAA,CAAQ,GAAA,CAAI,qCAAqC,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,aAAA,CAAe,CAAA;AAC7F,EAAA,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAC,CAAA;AAGtC,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,MAAM,WAAW,MAAA,EAAO;AACxB,EAAA,MAAM,eAAA,GAAkB,MAAM,SAAA,CAAU,MAAA,EAAQ,eAAe,IAAI,CAAA;AACnE,EAAA,MAAM,KAAA,GAAQ,QAAO,GAAI,QAAA;AACzB,EAAA,MAAM,WAAW,OAAA,CAAQ,KAAA;AACzB,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,eAAA,CAAgB,MAAM,CAAA,WAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAA,aAAA,CAAe,CAAA;AAGpH,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA,MAAM,UAAU,MAAA,EAAO;AACvB,EAAA,MAAM,WAAW,MAAM,QAAA,CAAS,QAAQ,aAAA,EAAe,IAAA,EAAM,cAAc,eAAe,CAAA;AAC1F,EAAA,MAAM,IAAA,GAAO,QAAO,GAAI,OAAA;AACxB,EAAA,MAAM,UAAU,OAAA,CAAQ,KAAA;AACxB,EAAA,OAAA,CAAQ,GAAA,CAAI,gCAAgC,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,aAAA,CAAe,CAAA;AAGxF,EAAAL,IAAG,SAAA,CAAU,MAAA,CAAO,SAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,QAAA,EAAU,MAAA,CAAO,OAAO,CAAA;AAClE,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,UAAA,CAAW,KAAK,CAAA,SAAA,EAAA,CAAa,WAAW,MAAA,IAAU,EAAC,EAAG,MAAM,CAAA,CAAE,CAAA;AAG9F,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,MAAA,GAAS,MAAM,SAAA,CAAU,QAAA,EAAU,MAAM,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,OAAA,GAAU,QAAO,GAAI,aAAA;AAC3B,EAAA,MAAM,aAAa,OAAA,GAAU,QAAA,GAAW,OAAA,GAAU,OAAA,GAAU,UAAU,QAAA,GAAW,OAAA;AACjF,EAAA,OAAA,CAAQ,GAAA,CAAI,sBAAsB,OAAA,GAAU,GAAA,EAAM,QAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,UAAU,CAAA,UAAA,CAAY,CAAA;AAExF,EAAA,MAAM,OAAA,GAAuB;AAAA,IAC3B,OAAA,EAAS,IAAA;AAAA,IACT,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,IACd,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,IACd,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,IACd,QAAA,EAAU,KAAA;AAAA,IACV,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA,IACd;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA,EAAY;AAAA,MACV,KAAA,EAAO,WAAW,KAAA,IAAS,KAAA;AAAA,MAC3B,MAAA,EAAQ,UAAA,CAAW,MAAA,IAAU;AAAC,KAChC;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAUA,eAAe,SAAA,CACb,KACA,MAAA,EACuB;AACvB,EAAA,MAAM,MAAA,GAASC,KAAAA,CAAK,IAAA,CAAK,MAAA,CAAO,SAAS,aAAa,CAAA;AACtD,EAAAD,IAAG,SAAA,CAAU,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,EAAA,MAAM,OAAA,GAAUC,MAAK,IAAA,CAAK,MAAA,EAAQ,GAAG,GAAA,CAAI,IAAA,IAAQ,WAAW,CAAA,IAAA,CAAM,CAAA;AAClE,EAAAD,GAAAA,CAAG,cAAc,OAAA,EAAS,IAAA,CAAK,UAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAGtD,EAAA,MAAM,gBAAgBC,KAAAA,CAAK,OAAA;AAAA,IACzBA,MAAK,OAAA,CAAQ,IAAI,IAAI,MAAA,CAAA,IAAA,CAAY,GAAG,EAAE,QAAQ,CAAA;AAAA,IAC9C;AAAA,GACF;AACA,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,aAAA,CAAA;AAQnC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oCAAA,EAAuC,OAAO,CAAA,CAAE,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU;AAAA,IAC7B,OAAA;AAAA,IACA,MAAA,EAAQ,OAAO,YAAA,IAAgB,KAAA;AAAA,IAC/B,WAAA,EAAa,OAAO,iBAAA,IAAqB;AAAA,GAC1C,CAAA;AAED,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,SAAA,EAAY,OAAO,WAAW,CAAA,CAAA,EAAI,OAAO,WAAW,CAAA,SAAA,EACjD,OAAO,WAAW,CAAA,OAAA,CAAA,IACpB,OAAO,QAAA,GAAW,CAAA,WAAA,EAAA,CAAe,OAAO,QAAA,CAAS,KAAA,GAAQ,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAAA,GACjF;AAEA,EAAA,OAAO;AAAA,IACL,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,QAAA,EAAU,OAAO,QAAA,GAAW;AAAA,MAC1B,KAAA,EAAO,OAAO,QAAA,CAAS,KAAA;AAAA,MACvB,YAAA,EAAc,OAAO,QAAA,CAAS,YAAA;AAAA,MAC9B,UAAA,EAAY,OAAO,QAAA,CAAS;AAAA,KAC9B,GAAI,MAAA;AAAA,IACJ,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAChC,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,QAAQ,CAAA,CAAE;AAAA,KACZ,CAAE;AAAA,GACJ;AACF;AAMA,SAAS,aAAA,CACP,MAAA,EACA,GAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,CAAC,OAAO,qBAAA,EAAuB;AAEnC,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,OAAO,CAAA;AACzD,EAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,CAAA,MAAA,EAAS,IAAI,CAAA,WAAA,EAAc,MAAA,CAAO,OAAO,MAAM,CAAA,WAAA,CAAA,GAC/C,OAAO,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA,CAAE,KAAK,IAAI;AAAA,KAC3D;AAAA,EACF;AACF;;;ACtUA,SAAS,QAAW,GAAA,EAA+B;AACjD,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,GAAM,CAAC,GAAG,CAAA;AACxC;AAEA,SAAS,YAAY,QAAA,EAAqD;AACxE,EAAA,OAAO,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAClC;AAEA,SAAS,qBAAqB,OAAA,EAA6D;AACzF,EAAA,OAAO,OAAA,CAAQ,QAAQ,MAA+C,CAAA;AACxE;AAEA,SAAS,gBAAgB,KAAA,EAAgE;AACvF,EAAA,OAAQ,MAAM,YAAA,IAA4C,IAAA;AAC5D;AAEA,SAAS,UAAU,EAAA,EAAsD;AACvE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,EAAA,CAAG,MAA+C,CAAA;AACzE,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA,EAAE,CAAE,CAAA;AAC3D;AAEA,SAAS,UAAU,EAAA,EAAqD;AACtE,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,EAAA,CAAG,MAA+C,CAAA;AACzE,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAA,EAAK,MAAA,CAAO,CAAA,CAAE,GAAA,IAAO,EAAE,CAAA,EAAE,CAAE,CAAA;AACzD;AAUA,SAAS,eAAe,EAAA,EAA8C;AACpE,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,EAAA,CAAG,WAAoD,CAAA;AACnF,EAAA,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC7B,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA;AAAA,IACzB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,EAAE,CAAA;AAAA,IAC3B,EAAA,EAAI,MAAA,CAAO,CAAA,CAAE,EAAA,IAAM,EAAE,CAAA;AAAA,IACrB,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,OAAA,EAAS,OAAA,CAAQ,CAAA,CAAE,OAAgC;AAAA,GACrD,CAAE,CAAA;AACJ;AAEA,SAAS,oBAAoB,OAAA,EAA6D;AACxF,EAAA,OAAO,OAAA,CAAQ,QAAQ,KAA8C,CAAA;AACvE;AAMA,SAAS,iBAAiB,MAAA,EAA0B;AAClD,EAAA,OAAO,MAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,KAAM,WAAA;AAChD;AAEA,SAAS,qBAAqB,OAAA,EAA4E;AACxG,EAAA,MAAM,UAAkE,EAAC;AACzE,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,IAAI,gBAAA,CAAiB,GAAG,CAAA,EAAG;AACzB,MAAA,MAAM,GAAA,GAAM,GAAA;AACZ,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAK,MAAM,CAAA;AACpC,MAAA,MAAM,IAAA,GAAQ,GAAA,CAAI,CAAC,CAAA,IAAiC,EAAC;AACrD,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,IAC7B;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,wBAAwB,OAAA,EAA+B;AAC9D,EAAA,OAAO,QAAQ,MAAA,CAAO,CAAC,QAAQ,CAAC,gBAAA,CAAiB,GAAG,CAAC,CAAA;AACvD;AAUO,SAAS,wBAAwB,QAAA,EAA4C;AAClF,EAAA,MAAM,QAAA,GAAW,YAAY,QAAQ,CAAA;AAGrC,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,IAAA,IAAI,QAAQ,IAAA,EAAM,WAAA,CAAY,KAAK,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAEtD,IAAA,KAAA,MAAW,KAAA,IAAS,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACjD,MAAA,IAAI,MAAM,IAAA,EAAM,UAAA,CAAW,KAAK,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IACpD;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,cAAc,QAAA,CAAS,MAAA;AAAA,IACvB,WAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAC9C,IAAA,MAAM,MAAA,GAAU,OAAA,CAAQ,MAAA,IAAsC,EAAC;AAC/D,IAAA,MAAM,MAAA,GAAS,qBAAqB,OAAO,CAAA;AAC3C,IAAA,MAAM,KAAA,GAAQ,oBAAoB,OAAO,CAAA;AAEzC,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA;AAAA,MACtC,MAAA;AAAA,MACA,UAAA,EAAY,OAAO,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA;AAAA,MAClD;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,cAA+C,EAAC;AACtD,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,KAAA,MAAW,KAAA,IAAS,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,EAAA,GAAK,gBAAgB,KAAK,CAAA;AAChC,MAAA,IAAI,CAAC,EAAA,EAAI;AAET,MAAA,MAAM,MAAA,GAAS,UAAU,EAAE,CAAA;AAC3B,MAAA,MAAM,MAAA,GAAS,UAAU,EAAE,CAAA;AAC3B,MAAA,MAAM,WAAA,GAAc,eAAe,EAAE,CAAA;AAErC,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,EAAE,CAAA;AAAA,QAClC,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,QAChC,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,GAAG,CAAA;AAAA,QAC/B,eAAA,EAAiB,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACvC,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,IAAI,CAAA,CAAE;AAAA,SACR,CAAE;AAAA,OACH,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,mBAAyD,EAAC;AAChE,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,KAAA,MAAW,KAAA,IAAS,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,EAAA,GAAK,gBAAgB,KAAK,CAAA;AAChC,MAAA,IAAI,CAAC,EAAA,EAAI;AAET,MAAA,KAAA,MAAW,UAAA,IAAc,cAAA,CAAe,EAAE,CAAA,EAAG;AAC3C,QAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,IAAW,EAAC;AACvC,QAAA,gBAAA,CAAiB,IAAA,CAAK;AAAA,UACpB,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,OAAO,UAAA,CAAW,KAAA;AAAA,UAClB,IAAI,UAAA,CAAW,EAAA;AAAA,UACf,KAAA,EAAO,WAAW,KAAA,IAAS,IAAA;AAAA,UAC3B,gBAAA,EAAkB,wBAAwB,OAAO;AAAA,SAClD,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,iBAAqD,EAAC;AAC5D,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,KAAA,MAAW,KAAA,IAAS,oBAAA,CAAqB,OAAO,CAAA,EAAG;AACjD,MAAA,MAAM,EAAA,GAAK,gBAAgB,KAAK,CAAA;AAChC,MAAA,IAAI,CAAC,EAAA,EAAI;AAET,MAAA,KAAA,MAAW,UAAA,IAAc,cAAA,CAAe,EAAE,CAAA,EAAG;AAC3C,QAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,IAAW,EAAC;AACvC,QAAA,MAAM,aAAA,GAAgB,qBAAqB,OAAO,CAAA;AAClD,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,cAAA,CAAe,IAAA,CAAK;AAAA,YAClB,MAAM,UAAA,CAAW,IAAA;AAAA,YACjB,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,IAAI,UAAA,CAAW,EAAA;AAAA,YACf;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,gBAAA,CACd,MACA,SAAA,EACgD;AAChD,EAAA,OAAO,KAAK,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAC/D;AAKO,SAAS,qBAAA,CACd,IAAA,EACA,IAAA,EACA,KAAA,EAIA;AACA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA;AAAA,IAClF,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAA,IAAQ,CAAA,CAAE,KAAA,KAAU,KAAK;AAAA,GAChF;AACF;;;AC5MA,SAAS,OAAA,CAAQ,GAAgB,CAAA,EAAwB;AACvD,EAAA,IAAI,EAAE,IAAA,KAAS,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,GAAG,OAAO,CAAA;AACzC,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,CAAC,GAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAC3D,EAAA,MAAM,KAAA,uBAAY,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA;AAClC,EAAA,OAAO,YAAA,CAAa,OAAO,KAAA,CAAM,IAAA;AACnC;AAEA,SAAS,6BAAA,CAA8B,GAAgB,CAAA,EAAwB;AAC7E,EAAA,IAAI,EAAE,IAAA,KAAS,CAAA,IAAK,CAAA,CAAE,IAAA,KAAS,GAAG,OAAO,CAAA;AACzC,EAAA,MAAM,OAAA,uBAAc,GAAA,CAAI;AAAA,IACtB,GAAG,CAAC,GAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IACjC,GAAG,CAAC,GAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC;AAAA,GAClC,CAAA;AACD,EAAA,MAAM,KAAA,uBAAY,GAAA,CAAI,CAAC,GAAG,CAAA,EAAG,GAAG,CAAC,CAAC,CAAA;AAClC,EAAA,OAAO,CAAA,GAAI,OAAA,CAAQ,IAAA,GAAO,KAAA,CAAM,IAAA;AAClC;AAEA,SAAS,aAAA,CAAc,UAAuB,MAAA,EAA6B;AACzE,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,CAAA,EAAG,OAAO,CAAA;AAC9B,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,CAAA;AACzD,EAAA,OAAO,OAAA,CAAQ,SAAS,MAAA,CAAO,IAAA;AACjC;AAWO,SAAS,UAAA,CAAW,KAAoB,MAAA,EAAqC;AAClF,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AACrB,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,SAAS,MAAA,GAAS,MAAA,CAAO,SAAS,YAAY,CAAA;AACzE,EAAA,MAAM,aAAa,SAAA,KAAc,CAAA,GAAI,CAAA,GAAM,SAAA,KAAc,IAAI,GAAA,GAAM,CAAA;AAEnE,EAAA,MAAM,mBAAmB,IAAI,GAAA;AAAA,IAC3B,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAQ,EAAE,MAAA,CAAkB,IAAI,CAAA,CAAE,WAAA,EAAa;AAAA,GACrE;AACA,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AACtF,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,gBAAA,EAAkB,cAAc,CAAA;AAE9D,EAAA,MAAM,KAAA,GAAQ,UAAA,GAAa,GAAA,GAAM,aAAA,GAAgB,GAAA;AAEjD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA;AAAA,IACA,OAAA,EAAS,EAAE,UAAA,EAAY,aAAA;AAAc,GACvC;AACF;AAUO,SAAS,UAAA,CAAW,KAAoB,MAAA,EAAqC;AAClF,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AACrB,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAE,YAAA,EAAc,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAE,EAAE;AAAA,EAChF;AAGA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,aAAA,CAAc,CAAC,CAAA;AAC5C,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAE,YAAA,EAAc,CAAA,EAAG,gBAAA,EAAkB,CAAA,EAAE,EAAE;AAAA,EAChF;AAEA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,CAAC,CAAA,CAAE,MAAA;AAG3B,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,CAAC,CAAA;AAC7E,EAAA,MAAM,eAAe,aAAA,CAAc,MAAA;AACnC,EAAA,MAAM,eAAe,IAAI,GAAA;AAAA,IACvB,KAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,MAAM,IAC5B,YAAA,CAAa,MAAA,CAAmC,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,IAChF;AAAC,GACP;AACA,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,cAAA,EAAgB,YAAY,CAAA;AAGzD,EAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,YAAA,CAAa,WAAA,IAAe,SAAS,CAAA;AACtE,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,WAAA,KAAgB,iBAAA,GAAoB,CAAA,GAAM,CAAA;AAE1E,EAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,GAAA,GAAM,gBAAA,GAAmB,GAAA;AAEtD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA;AAAA,IACA,OAAA,EAAS,EAAE,YAAA,EAAc,gBAAA;AAAiB,GAC5C;AACF;AAUO,SAAS,UAAA,CAAW,KAAoB,MAAA,EAAqC;AAClF,EAAA,MAAM,MAAA,GAAS,iBAAiB,GAAG,CAAA;AACnC,EAAA,IAAI,OAAO,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,WAAA,CAAY,WAAW,CAAA,EAAG;AAC1D,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAE,YAAA,EAAc,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE,EAAE;AAAA,EAC5E;AAGA,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,YAAY,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA;AAC5D,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,CAAY,IAAA;AAAA,IACrC,CAAC,MAAM,CAAA,CAAE,SAAA,CAAU,aAAY,KAAM,KAAA,CAAM,KAAK,WAAA;AAAY,GAC9D,IAAK,MAAA,CAAO,WAAA,CAAY,CAAC,CAAA;AAEzB,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,KAAA,CAAM,YAAA,EAAc;AACvC,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,EAAE,YAAA,EAAc,CAAA,EAAG,YAAA,EAAc,CAAA,EAAE,EAAE;AAAA,EAC5E;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,WAAA,EAAa,CAAC,CAAA;AACzF,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAe,6BAAA,CAA8B,cAAA,EAAgB,YAAY,CAAA;AAE/E,EAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AAC1E,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,WAAA,CAAY,MAAM,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,cAAA,EAAgB,YAAY,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,YAAA,GAAe,GAAA,GAAM,YAAA,GAAe,GAAA;AAElD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA;AAAA,IACA,OAAA,EAAS,EAAE,YAAA,EAAc,YAAA;AAAa,GACxC;AACF;AAUO,SAAS,UAAA,CAAW,KAAoB,MAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAc,sBAAsB,GAAG,CAAA;AAC7C,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS,EAAE,cAAA,EAAgB,GAAA,EAAK,UAAA,EAAY,GAAA,EAAI,EAAE;AAAA,EAClF;AAEA,EAAA,IAAI,mBAAA,GAAsB,CAAA;AAC1B,EAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,gBAAA,GAAmB,OAAO,gBAAA,CAAiB,IAAA;AAAA,MAC/C,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,WAAW,IAAA,IAAQ,CAAA,CAAE,UAAU,UAAA,CAAW;AAAA,KAC9D;AAEA,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,mBAAA,IAAuB,GAAA;AACvB,MAAA,eAAA,IAAmB,GAAA;AACnB,MAAA,KAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,gBAAgB,IAAI,GAAA;AAAA,MAAA,CACvB,UAAA,CAAW,OAAA,IAAW,EAAC,EACrB,MAAA,CAAO,CAAC,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAC9B,IAAI,CAAC,CAAA,KAAM,MAAA,CAAQ,CAAA,CAAgB,CAAC,CAAC,CAAC,CAAA,CACtC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,WAAW;AAAA,KACpC;AACA,IAAA,MAAM,cAAc,IAAI,GAAA;AAAA,MACtB,iBAAiB,gBAAA,CACd,MAAA,CAAO,CAAC,CAAA,KAAsB,MAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAC9C,IAAI,CAAC,CAAA,KAAM,OAAO,CAAA,CAAE,CAAC,CAAC,CAAC;AAAA,KAC5B;AACA,IAAA,mBAAA,IAAuB,aAAA,CAAc,eAAe,WAAW,CAAA;AAG/D,IAAA,MAAM,QAAA,GAAW,CAAC,CAAC,UAAA,CAAW,KAAA;AAC9B,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAC,gBAAA,CAAiB,KAAA;AAC1C,IAAA,eAAA,IAAmB,QAAA,KAAa,iBAAiB,CAAA,GAAM,CAAA;AACvD,IAAA,KAAA,EAAA;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,KAAA,GAAQ,CAAA,GAAI,mBAAA,GAAsB,KAAA,GAAQ,GAAA;AACjE,EAAA,MAAM,UAAA,GAAa,KAAA,GAAQ,CAAA,GAAI,eAAA,GAAkB,KAAA,GAAQ,GAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,cAAA,GAAiB,GAAA,GAAM,UAAA,GAAa,GAAA;AAElD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA;AAAA,IACA,OAAA,EAAS,EAAE,cAAA,EAAgB,UAAA;AAAW,GACxC;AACF;AAUO,SAAS,UAAA,CAAW,KAAoB,MAAA,EAAqC;AAClF,EAAA,MAAM,WAAA,GAAc,sBAAsB,GAAG,CAAA;AAC7C,EAAA,IAAI,YAAY,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA,EAAG;AAClE,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS,EAAE,UAAA,EAAY,GAAA,EAAK,SAAA,EAAW,GAAA,EAAI,EAAE;AAAA,EAC7E;AAEA,EAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,IAAA,MAAM,YAAA,GAAe,OAAO,cAAA,CAAe,IAAA;AAAA,MACzC,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,WAAW,IAAA,IAAQ,CAAA,CAAE,UAAU,UAAA,CAAW;AAAA,KAC9D;AAEA,IAAA,IAAI,CAAC,YAAA,EAAc;AAGnB,IAAA,MAAM,iBAAiB,UAAA,CAAW,OAAA,IAAW,EAAC,EAC3C,MAAA,CAAO,CAAC,CAAA,KAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,IAAM,EAAgB,CAAC,CAAA,KAAM,WAAW,CAAA,CACrE,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,IAAA,EAAO,GAAA,CAAI,CAAC,CAAA,IAAiC,EAAC,EAAE;AAAA,IACjF,CAAC,CAAA;AAGH,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,KAAA,MAAW,MAAM,aAAA,EAAe;AAC9B,MAAA,KAAA,MAAW,KAAK,YAAA,CAAa,EAAA,CAAG,IAAI,CAAA,EAAG,aAAA,CAAc,IAAI,CAAC,CAAA;AAC1D,MAAA,aAAA,IAAiB,UAAA,CAAW,GAAG,IAAI,CAAA;AAAA,IACrC;AAEA,IAAA,MAAM,WAAA,uBAAkB,GAAA,EAAY;AACpC,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,KAAA,MAAW,EAAA,IAAM,aAAa,aAAA,EAAe;AAC3C,MAAA,KAAA,MAAW,KAAK,YAAA,CAAa,EAAA,CAAG,IAAI,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AACxD,MAAA,WAAA,IAAe,UAAA,CAAW,GAAG,IAAI,CAAA;AAAA,IACnC;AAEA,IAAA,eAAA,IAAmB,aAAA,CAAc,eAAe,WAAW,CAAA;AAC3D,IAAA,cAAA,IAAkB,WAAA,GAAc,CAAA,GAC5B,IAAA,CAAK,GAAA,CAAI,gBAAgB,WAAA,EAAa,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA,GAC7E,aAAA,KAAkB,IAAI,CAAA,GAAI,CAAA;AAC/B,IAAA,KAAA,EAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,GAAQ,CAAA,GAAI,eAAA,GAAkB,KAAA,GAAQ,GAAA;AACzD,EAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,CAAA,GAAI,cAAA,GAAiB,KAAA,GAAQ,GAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,UAAA,GAAa,GAAA,GAAM,SAAA,GAAY,GAAA;AAE7C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,KAAA;AAAA,IACA,OAAA,EAAS,EAAE,UAAA,EAAY,SAAA;AAAU,GACnC;AACF;AAMA,IAAM,eAAe,CAAC,GAAA,EAAM,IAAA,EAAM,IAAA,EAAM,KAAM,GAAI,CAAA;AAK3C,SAAS,YAAA,CACd,UAAA,EACA,QAAA,EACA,IAAA,EACA,YAAA,EACe;AACf,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,MAAW,MAAM,UAAA,EAAY;AAC3B,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,EAAA,CAAG,IAAI,CAAA,IAAK,CAAA;AACxC,IAAA,OAAA,IAAW,GAAG,KAAA,GAAQ,MAAA;AAAA,EACxB;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,KAAA,EAAO,UAAA;AAAA,IACP,QAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAMA,SAAS,iBAAiB,GAAA,EAA6B;AACrD,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,IAAA,KAAA,MAAW,CAAA,IAAK,QAAQ,MAAA,EAAQ;AAC9B,MAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,KAAA,IAAS,CAAA,EAAG;AACzC,MAAA,MAAA,CAAO,KAAK,CAAU,CAAA;AAAA,IACxB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,sBAAsB,GAAA,EAAkC;AAC/D,EAAA,MAAM,cAA4B,EAAC;AACnC,EAAA,KAAA,MAAW,KAAA,IAAS,gBAAA,CAAiB,GAAG,CAAA,EAAG;AACzC,IAAA,IAAI,CAAC,MAAM,YAAA,EAAc;AACzB,IAAA,WAAA,CAAY,IAAA,CAAK,GAAG,KAAA,CAAM,YAAA,CAAa,WAAW,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,aAAa,IAAA,EAA4C;AAChE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,IAAI,KAAK,IAAA,EAAM,KAAA,CAAM,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAC1C,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,KAAA,MAAW,KAAK,YAAA,CAAa,KAAK,CAAA,EAAG,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAW,IAAA,EAAuC;AACzD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,KAAA,MAAW,KAAA,IAAS,QAAA,EAAU,KAAA,IAAS,UAAA,CAAW,KAAK,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,KAAA;AACT;ACxUA,SAAS,gBAAA,CAAiB,WAA+B,eAAA,EAA4B;AACnF,EAAA,IAAI,MAAA;AACJ,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,SAAA;AACH,MAAA,MAAA,GAASK,sBAAAA,CAAuB,EAAE,KAAA,EAAO,iBAAA,EAAmB,CAAA;AAC5D,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,MAAA,GAASA,sBAAAA,CAAuB,EAAE,KAAA,EAAO,sBAAA,EAAwB,CAAA;AACjE,MAAA;AAAA,IACF,KAAK,eAAA;AACH,MAAA,MAAA,GAASA,sBAAAA,CAAuB,EAAE,KAAA,EAAO,0CAAA,EAA4C,CAAA;AACrF,MAAA;AAAA,IACF,KAAK,gBAAA;AACH,MAAA,MAAA,GAASA,sBAAAA,CAAuB,EAAE,KAAA,EAAO,8BAAA,EAAgC,CAAA;AACzE,MAAA;AAAA,IACF,KAAK,UAAA;AAAA,IACL;AACE,MAAA,MAAA,GAASC,oBAAAA,EAAqB;AAC9B,MAAA;AAAA;AAIJ,EAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAClD,IAAA,MAAM,2BAAA,GAA8B,MAAA,CAAO,mBAAA,CAAoB,IAAA,CAAK,MAAM,CAAA;AAC1E,IAAA,MAAA,CAAO,UAAU,CAAC,IAAA,KAChB,gBAAgB,EAAE,GAAG,MAAM,UAAA,EAAY,CAAA;AAAA,EAAc,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,CAAA;AAC1E,IAAA,MAAA,CAAO,sBAAsB,CAAC,IAAA,KAC5B,4BAA4B,EAAE,GAAG,MAAM,UAAA,EAAY,CAAA;AAAA,EAAc,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,CAAA;AAAA,EACxF;AAEA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,uBAAuB,YAAA,EAAmC;AACxE,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,MAAM,MAAA,GAAS,iBAAiB,YAAY,CAAA;AAC5C,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,EAAQ,MAAM,MAAM,CAAA;AAE/C,MAAA,OAAO;AAAA,QACL,SAAS,GAAA,CAAI,IAAA;AAAA,QACb,QAAA,EAAW,GAAA,CAAI,QAAA,CAAiC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC1D,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,UAAA,EAAa,EAAE,MAAA,CAA4B,IAAA;AAAA,UAC3C,YAAY,CAAA,CAAE,MAAA,CACX,MAAA,CAAO,CAAC,MAA6B,OAAO,CAAA,KAAM,QAAA,IAAY,EAAE,SAAS,CAAA,CAAE,CAAA,CAC3E,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,UACpB,SAAA,EAAW,CAAA,CAAE,KAAA,EAAO,MAAA,IAAU;AAAA,SAChC,CAAE,CAAA;AAAA,QACF,QAAA,EAAU;AAAA,OACZ;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,WAAA,EAAa,0IAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,0CAA0C;AAAA,OACvE;AAAA;AACH,GACF;AACF;AAMO,SAAS,wBAAwB,YAAA,EAAmC;AACzE,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,MAAM,MAAA,GAAS,iBAAiB,YAAY,CAAA;AAE5C,MAAA,MAAM,QAAA,GAA0B;AAAA,QAE9B,UAAU,CAAC;AAAA,UACT,MAAM,KAAA,CAAM,WAAA;AAAA,UACZ,MAAA,EAAQ,EAAE,IAAA,EAAM,KAAA,CAAM,UAAA,EAAY,MAAA,EAAQ,CAAC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,CAAA,EAAE;AAAA,UAC3E,QAAQ,EAAC;AAAA,UACT,OAAO;AAAC,SACT;AAAA,OACH;AAEA,MAAA,MAAM,SAAS,MAAM,SAAA,CAAU,MAAA,EAAQ,KAAA,CAAM,aAAa,QAAQ,CAAA;AAClE,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,OAAO,WAAA,KAAgB,IAAA;AAAA,QAChC,cAAc,MAAA,CAAO,WAAA;AAAA,QACrB,YAAA,EAAc,OAAO,SAAA,KAAc;AAAA,OACrC;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,gBAAA;AAAA,MACN,WAAA,EAAa,4IAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qCAAqC,CAAA;AAAA,QACtE,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qBAAqB,CAAA;AAAA,QACtD,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,oBAAoB;AAAA,OACrD;AAAA;AACH,GACF;AACF;AAMO,SAAS,sBAAA,CAAuB,SAAiB,YAAA,EAAmC;AACzF,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,MAAM,MAAA,GAAS,iBAAiB,YAAY,CAAA;AAC5C,MAAA,MAAM,WAAA,GAAcN,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AAClD,MAAAD,IAAG,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAG7C,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,uBAAA,EAAwB;AAAA,MAC1D;AAGA,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,QAAA,SAAA,GAAY,mBAAA,CAAoB,KAAA,CAAM,cAAc,CAAA,IAAK,MAAA;AAAA,MAC3D;AAEA,MAAA,MAAM,IAAA,GAAiB;AAAA,QACrB;AAAA,OACF;AAGA,MAAiB,KAAA,CAAM;AAEvB,MAAA,IAAI;AAEF,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6CAAA,EAAgD,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AAC/E,QAAA,IAAI,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,EAAQ,UAAU,IAAI,CAAA;AAG/C,QAAA,OAAA,CAAQ,IAAI,CAAA,8CAAA,CAAgD,CAAA;AAC5D,QAAA,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,EAAQ,GAAA,EAAK,IAAI,CAAA;AAGtC,QAAA,OAAA,CAAQ,IAAI,CAAA,sCAAA,CAAwC,CAAA;AACpD,QAAA,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,EAAQ,GAAA,EAAK,IAAI,CAAA;AAGtC,QAAA,OAAA,CAAQ,IAAI,CAAA,wCAAA,CAA0C,CAAA;AACtD,QAAA,GAAA,GAAM,MAAM,QAAA,CAAS,MAAA,EAAQ,GAAA,EAAK,IAAI,CAAA;AAGtC,QAAA,KAAA,MAAW,OAAA,IAAW,IAAI,QAAA,EAAiC;AACzD,UAAA,MAAM,WAAW,OAAA,CAAQ,IAAA,CAAK,QAAQ,eAAA,EAAiB,GAAG,EAAE,WAAA,EAAY;AACxE,UAAA,MAAM,cAAcC,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAO,CAAA;AAC7D,UAAAD,GAAAA,CAAG,cAAc,WAAA,EAAa,IAAA,CAAK,UAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAC9D,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4B,WAAW,CAAA,CAAE,CAAA;AAAA,QACvD;AAGA,QAAAA,IAAG,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,QAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,GAAA,EAAK,OAAO,CAAA;AAEtD,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,eAAA,EAAkB,IAAI,QAAA,CAAiC,MAAA;AAAA,UACvD,UAAA,EAAY;AAAA,YACV,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,UAAA,EAAY,UAAA,CAAW,MAAA,EAAQ,MAAA,IAAU,CAAA;AAAA,YACzC,MAAA,EAAA,CAAS,UAAA,CAAW,MAAA,IAAU,EAAC,EAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,OAAO;AAAA;AACpE,SACF;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC9D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,WAAA,EAAa,+OAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B,CAAA;AAAA,QAC/D,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,2DAA2D,CAAA;AAAA,QACzF,gBAAgB,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,4DAA4D,CAAA;AAAA,QAC3G,UAAU,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,wDAAwD;AAAA,OAClG;AAAA;AACH,GACF;AACF;AAMO,SAAS,oBAAoB,OAAA,EAAiB;AACnD,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,MAAM,UAAU,KAAA,CAAM,OAAA,IAAWC,KAAAA,CAAK,IAAA,CAAK,SAAS,YAAY,CAAA;AAEhE,MAAA,IAAI,CAACD,GAAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,CAAA,uBAAA,EAA0B,OAAO,CAAA,CAAA,EAAG;AAAA,MACtE;AAEA,MAAA,IAAI;AAEF,QAAA,MAAM,gBAAgBC,KAAAA,CAAK,OAAA;AAAA,UACzBA,MAAK,OAAA,CAAQ,IAAI,IAAI,MAAA,CAAA,IAAA,CAAY,GAAG,EAAE,QAAQ,CAAA;AAAA,UAC9C;AAAA,SACF;AACA,QAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,aAAA,CAAA;AAgBnC,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU;AAAA,UAC7B,OAAA;AAAA,UACA,MAAA,EAAQ,IAAA;AAAA,UACR,WAAA,EAAa;AAAA,SACd,CAAA;AAGD,QAAA,MAAM,WAAqB,EAAC;AAC5B,QAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,UAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,YAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACjB,cAAA,QAAA,CAAS,IAAA,CAAK,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,IAAI,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,KAAA,CAAM,MAAA,IAAU,QAAQ,CAAA,CAAE,CAAA;AAAA,YAClG;AAAA,UACF;AAAA,QACF;AAEA,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,OAAO,WAAA,KAAgB,CAAA;AAAA,UAChC,QAAQ,MAAA,CAAO,WAAA;AAAA,UACf,QAAQ,MAAA,CAAO,WAAA;AAAA,UACf,OAAO,MAAA,CAAO,WAAA;AAAA,UACd,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,KAAA,IAAS,IAAA;AAAA,UACpC,QAAA,EAAU,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE;AAAA,SAChC;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,KAAA;AAAA,UACT,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,UAC5D,MAAA,EAAQ,CAAA;AAAA,UACR,MAAA,EAAQ,CAAA;AAAA,UACR,KAAA,EAAO,CAAA;AAAA,UACP,QAAA,EAAU,IAAA;AAAA,UACV,QAAA,EAAU,CAAC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC;AAAA,SACnE;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAa,2KAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qDAAqD;AAAA,OAC9F;AAAA;AACH,GACF;AACF;AAWA,IAAM,qBAA6F,EAAC;AAEpG,SAAS,qBAAA,GAA8B;AACrC,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,oBAAA;AACZ,IAAA,MAAM,OAAA,GAAkC;AAAA;AAAA,MAEtC,UAAA,EAAY,SAAA;AAAA,MAAW,UAAA,EAAY,SAAA;AAAA,MAAW,YAAA,EAAc,WAAA;AAAA,MAC5D,eAAA,EAAiB,cAAA;AAAA,MAAgB,eAAA,EAAiB,cAAA;AAAA,MAAgB,gBAAA,EAAkB,eAAA;AAAA;AAAA,MAEpF,YAAA,EAAc,WAAA;AAAA,MAAa,WAAA,EAAa,UAAA;AAAA,MAAY,kBAAA,EAAoB,iBAAA;AAAA,MACxE,YAAA,EAAc,WAAA;AAAA,MAAa,YAAA,EAAc,WAAA;AAAA,MAAa,UAAA,EAAY,SAAA;AAAA,MAClE,gBAAA,EAAkB,eAAA;AAAA,MAAiB,YAAA,EAAc,WAAA;AAAA,MAAa,kBAAA,EAAoB,iBAAA;AAAA,MAClF,WAAA,EAAa,UAAA;AAAA,MAAY,UAAA,EAAY,SAAA;AAAA,MAAW,aAAA,EAAe,YAAA;AAAA,MAC/D,eAAA,EAAiB,cAAA;AAAA,MAAgB,UAAA,EAAY,SAAA;AAAA,MAAW,WAAA,EAAa,UAAA;AAAA;AAAA,MAErE,YAAA,EAAc,WAAA;AAAA,MAAa,aAAA,EAAe,YAAA;AAAA,MAAc,WAAA,EAAa,UAAA;AAAA,MACrE,YAAA,EAAc,WAAA;AAAA,MAAa,cAAA,EAAgB,aAAA;AAAA,MAAe,cAAA,EAAgB,aAAA;AAAA,MAC1E,WAAA,EAAa,UAAA;AAAA,MAAY,eAAA,EAAiB,cAAA;AAAA,MAC1C,qBAAA,EAAuB,mBAAA;AAAA,MAAqB,iBAAA,EAAmB,eAAA;AAAA,MAC/D,WAAA,EAAa,UAAA;AAAA,MAAY,eAAA,EAAiB,cAAA;AAAA,MAAgB,eAAA,EAAiB,cAAA;AAAA,MAC3E,kBAAA,EAAoB,gBAAA;AAAA;AAAA,MAEpB,cAAA,EAAgB,YAAA;AAAA,MAAc,iBAAA,EAAmB,eAAA;AAAA,MACjD,eAAA,EAAiB,aAAA;AAAA,MAAe,sBAAA,EAAwB,mBAAA;AAAA,MACxD,kBAAA,EAAoB,gBAAA;AAAA,MAAkB,qBAAA,EAAuB,mBAAA;AAAA,MAC7D,gBAAA,EAAkB,cAAA;AAAA,MAAgB,YAAA,EAAc,WAAA;AAAA,MAAa,gBAAA,EAAkB,cAAA;AAAA;AAAA,MAE/E,sBAAA,EAAwB,oBAAA;AAAA,MAAsB,uBAAA,EAAyB,qBAAA;AAAA,MACvE,uBAAA,EAAyB,qBAAA;AAAA,MACzB,oBAAA,EAAsB,iBAAA;AAAA,MAAmB,oBAAA,EAAsB,iBAAA;AAAA;AAAA,MAE/D,uBAAA,EAAyB,oBAAA;AAAA,MAAsB,qBAAA,EAAuB,mBAAA;AAAA,MACtE,iBAAA,EAAmB,eAAA;AAAA;AAAA,MAEnB,kBAAA,EAAoB,gBAAA;AAAA,MAAkB,qBAAA,EAAuB,mBAAA;AAAA,MAC7D,oBAAA,EAAsB,kBAAA;AAAA,MAAoB,mBAAA,EAAqB,iBAAA;AAAA,MAC/D,qBAAA,EAAuB,mBAAA;AAAA,MAAqB,oBAAA,EAAsB,kBAAA;AAAA,MAClE,wBAAA,EAA0B;AAAA,KAC5B;AACA,IAAA,KAAA,MAAW,CAAC,YAAA,EAAc,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC5D,MAAA,IAAI,OAAO,GAAA,CAAI,MAAM,CAAA,KAAM,UAAA,EAAY;AACrC,QAAA,kBAAA,CAAmB,YAAY,CAAA,GAAI,GAAA,CAAI,MAAM,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAA2D;AACrE;AAEO,SAAS,sBAAsB,OAAA,EAAiB;AACrD,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,qBAAA,EAAsB;AACtB,MAAA,MAAM,gBAAgB,KAAA,CAAM,UAAA;AAC5B,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA;AAE7C,MAAA,IAAI,YAAA;AAGJ,MAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,KAAA,CAAM,YAAY,CAAA;AACxD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAA0B,KAAA,CAAM,YAAY,CAAA,iBAAA,CAAmB,CAAA;AAC3E,QAAA,MAAM,UAAU,UAAA,CAAW;AAAA,UACzB,UAAA,EAAY,aAAA;AAAA,UACZ,MAAA,EAAQ,SAAA;AAAA,UACR,WAAA,EAAa,MAAM,WAAA,IAAe,SAAA;AAAA,UAClC,WAAW,KAAA,CAAM,KAAA;AAAA,UACjB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,UACzB,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,WAAW,KAAA,CAAM;AAAA,SAClB,CAAA;AACD,QAAA,YAAA,GAAe,OAAA;AAAA,MACjB,CAAA,MAAO;AAEL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gDAAA,EAAmD,KAAA,CAAM,YAAY,CAAA,CAAE,CAAA;AACnF,QAAA,MAAM,QAAA,GAAW,aAAA,CAAc,KAAA,CAAM,YAAY,CAAA;AACjD,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA,UAAA,EAAa,KAAA,CAAM,YAAY,CAAA,WAAA,CAAA,EAAc;AAAA,QAC/E;AAEA,QAAA,MAAM,MAAA,GAAS,gBAAgB,QAAQ,CAAA;AACvC,QAAA,MAAM,WAAA,GAAe,MAAA,CAAO,QAAA,GAAyC,CAAC,CAAA;AACtE,QAAA,MAAM,cAAc,WAAA,GAAA,CACd,WAAA,CAAY,UAAwC,EAAC,EAAG,CAAC,CAAA,GAC3D,MAAA;AACJ,QAAA,MAAM,eAAe,WAAA,EAAa,MAAA;AAElC,QAAA,IAAI,CAAC,aAAa,YAAA,EAAc;AAC9B,UAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA,UAAA,EAAa,KAAA,CAAM,YAAY,CAAA,sBAAA,CAAA,EAAyB;AAAA,QAC1F;AAEA,QAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG;AACzC,UAAA,SAAA,CAAU,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAA,EAAM,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,CAAA;AAAA,QAClE;AAEA,QAAA,MAAM,gBAAgB,MAAA,CAAO,YAAA,EAAc,IAAA,IAAQ,WAAA,CAAY,gBAAgB,MAAM,CAAA;AACrF,QAAA,MAAM,SAAA,GAAY,GAAG,aAAa,CAAA,UAAA,CAAA;AAElC,QAAA,MAAM,OAAA,GAAmC;AAAA,UACvC,IAAA,EAAM,GAAG,aAAa,CAAA,OAAA,CAAA;AAAA,UACtB,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM,aAAA;AAAA,YACN,WAAA,EAAa,MAAM,WAAA,IAAe,SAAA;AAAA,YAClC,GAAI,KAAA,CAAM,WAAA,KAAgB,YAAA,GAAe,EAAE,UAAA,EAAY,aAAA,CAAc,WAAA,EAAY,GAAI,GAAA,EAAI,GAAI,EAAC;AAAA,YAC9F,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,QAAQ,CAAC;AAAA,YACP,GAAG,WAAA;AAAA,YACH,IAAA,EAAM,SAAA;AAAA,YACN,YAAA,EAAc,aAAA;AAAA,YACd,QAAA,EAAU,MAAA,CAAO,WAAA,CAAY,QAAA,IAAY,aAAa;AAAA,WACvD,CAAA;AAAA,UACD,OAAO,CAAC;AAAA,YACN,IAAA,EAAM,KAAA,CAAM,QAAA,IAAY,CAAA,EAAG,aAAa,CAAA,IAAA,CAAA;AAAA,YACxC,MAAM,KAAA,CAAM,QAAA,IAAY,CAAA,CAAA,EAAI,aAAA,CAAc,aAAa,CAAA,CAAA,CAAA;AAAA,YACvD,GAAI,KAAA,CAAM,aAAA,GAAgB,EAAE,SAAA,EAAW,IAAA,KAAS,EAAC;AAAA,YACjD,MAAA,EAAQ,CAAC,EAAE,GAAA,EAAK,WAAW;AAAA,WAC5B;AAAA,SACH;AAEA,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AACrC,QAAA,MAAM,WAAA,GAAc,MAAA,CACjB,OAAA,CAAQ,IAAI,OAAO,CAAA,cAAA,EAAiB,aAAa,CAAA,CAAA,CAAA,EAAK,GAAG,GAAG,CAAA,WAAA,EAAc,aAAa,CAAA,CAAA,CAAG,CAAA,CAC1F,QAAQ,IAAI,MAAA,CAAO,CAAA,UAAA,EAAa,aAAa,CAAA,GAAA,CAAA,EAAO,GAAG,CAAA,EAAG,CAAA,QAAA,CAAU,EACpE,OAAA,CAAQ,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA,EAAG,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,CAAG,CAAA;AAEtE,QAAA,IAAI;AACF,UAAA,YAAA,GAAe,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,QACvC,CAAA,CAAA,MAAQ;AACN,UAAA,YAAA,GAAe,OAAA;AAAA,QACjB;AAEA,QAAA,IAAI,MAAM,KAAA,EAAO;AACf,UAAA,oBAAA,CAAqB,cAAc,YAAA,EAAc,SAAA,EAAW,aAAA,EAAe,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,QAC9F;AACA,QAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,UAAA,oBAAA,CAAqB,cAAc,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,KAAA,CAAM,mBAAmB,KAAK,CAAA;AAAA,QAC5F;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAcA,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AAClD,MAAAD,IAAG,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAC7C,MAAA,MAAM,WAAW,aAAA,CAAc,OAAA,CAAQ,eAAA,EAAiB,GAAG,EAAE,WAAA,EAAY;AACzE,MAAA,MAAM,cAAcC,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAO,CAAA;AAC7D,MAAAD,GAAAA,CAAG,cAAc,WAAA,EAAa,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAC,CAAA;AAGnE,MAAA,MAAM,MAAA,GAAS,EAAE,IAAA,EAAM,aAAA,GAAgB,KAAA,EAAO,SAAS,OAAA,EAAS,QAAA,EAAU,CAAC,YAAY,CAAA,EAAE;AACzF,MAAAA,IAAG,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,MAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,MAAA,EAAQ,OAAO,CAAA;AAEzD,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,UAAA,EAAY,aAAA;AAAA,QACZ,WAAA;AAAA,QACA,YAAA,EAAc,CAAC,CAAC,UAAA;AAAA,QAChB,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,WAAW,KAAA,IAAS,KAAA;AAAA,UAC3B,UAAA,EAAA,CAAa,UAAA,CAAW,MAAA,IAAU,EAAC,EAAG,MAAA;AAAA,UACtC,MAAA,EAAA,CAAS,UAAA,CAAW,MAAA,IAAU,EAAC,EAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO;AAAA;AAClE,OACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,cAAA;AAAA,MACN,WAAA,EAAa,0KAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,uDAAuD,CAAA;AAAA,QACzF,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yDAAyD,CAAA;AAAA,QACzF,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,oEAAoE,CAAA;AAAA,QACpG,aAAa,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,yCAAyC,CAAA;AAAA,QACrF,OAAO,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,QAC3D,mBAAmB,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,8BAA8B,CAAA;AAAA,QAChF,UAAU,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,QAC9D,UAAU,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gCAAgC,CAAA;AAAA,QACzE,eAAe,CAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,uCAAuC;AAAA,OACvF;AAAA;AACH,GACF;AACF;AAGA,SAAS,qBACP,OAAA,EACA,WAAA,EACA,QAAA,EACA,QAAA,EACA,UACA,SAAA,EACM;AAEN,EAAA,MAAM,MAAA,GAAU,OAAA,CAAQ,MAAA,IAAwC,EAAC;AACjE,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,KAAK,KAAA,CAAM,YAAA;AACjB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,WAAA,GAAe,EAAA,CAAG,WAAA,IAAkD,EAAC;AAC3E,IAAA,KAAA,MAAW,MAAM,WAAA,EAAa;AAC5B,MAAA,IAAI,EAAA,CAAG,UAAU,MAAA,EAAQ;AACzB,MAAA,MAAM,OAAA,GAAW,EAAA,CAAG,OAAA,IAA2B,EAAC;AAChD,MAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,QAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,GAAG,KAAK,GAAA,CAAI,CAAC,MAAM,WAAA,EAAa;AACnD,QAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,iBAAA,CAAkB,MAAM,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,WAAW,MAAM;AAAU,QAAM,CAAC,CAAA;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBACP,IAAA,EACA,WAAA,EACA,UACA,QAAA,EACA,QAAA,EACA,WACA,OAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,IAAA,MAAM,OAAA,GAAU,KAAK,QAAQ,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,IAAI,QAAA,KAAa,QAAQ,OAAA,CAAQ,WAAA,GAAc,QAAA,CAAS,QAAA,CAAS,WAAA,EAAa,CAAA,EAAG;AAC/E,QAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,UAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,QAAA;AACjB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,IAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,QAAA,iBAAA,CAAkB,OAAO,WAAA,EAAa,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,WAAW,OAAO,CAAA;AAAA,MACxF;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,kBAAkB,OAAA,EAAiB;AACjD,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,MAAM,cAAcC,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,WAAA,EAAa,MAAM,WAAW,CAAA;AACrE,MAAA,MAAM,eAAeA,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,WAAA,EAAa,MAAM,YAAY,CAAA;AAEvE,MAAA,IAAI,CAACD,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAA,EAAG;AACrG,MAAA,IAAI,CAACA,GAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,CAAA,oBAAA,EAAuB,YAAY,CAAA,CAAA,EAAG;AAExG,MAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AAChE,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,YAAA,EAAc,OAAO,CAAC,CAAA;AAGlE,MAAA,MAAM,aAAA,GAAiB,OAAA,CAAQ,MAAA,IAAwC,EAAC;AACxE,MAAA,MAAM,cAAA,GAAkB,QAAA,CAAS,MAAA,IAAwC,EAAC;AAC1E,MAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,cAAA,CAAe,WAAW,CAAA,EAAG;AAC7D,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,4CAAA,EAA6C;AAAA,MAC/E;AAEA,MAAA,MAAM,YAAA,GAAe,cAAc,CAAC,CAAA;AACpC,MAAA,MAAM,aAAA,GAAgB,eAAe,CAAC,CAAA;AAGtC,MAAA,MAAM,KAAA,GAAS,YAAA,CAAa,KAAA,IAAuB,EAAC;AACpD,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,OAAO,KAAA,CAAM,SAAA;AAAA,QACb,KAAA,EAAO,UAAA;AAAA,QACP,GAAI,KAAA,CAAM,WAAA,GAAc,EAAE,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,WAAW,CAAA,EAAE,GAAI;AAAC,OACvE,CAAA;AACD,MAAA,YAAA,CAAa,KAAA,GAAQ,KAAA;AAGrB,MAAA,MAAM,OAAA,GAAW,aAAA,CAAc,OAAA,IAAyB,EAAC;AACzD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,OAAO,KAAA,CAAM,SAAA;AAAA,QACb,QAAA,EAAU,MAAM,aAAA,IAAiB,MAAA;AAAA,QACjC,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,aAAA,CAAc,OAAA,GAAU,OAAA;AAGxB,MAAAA,GAAAA,CAAG,cAAc,WAAA,EAAa,IAAA,CAAK,UAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAC9D,MAAAA,GAAAA,CAAG,cAAc,YAAA,EAAc,IAAA,CAAK,UAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAA;AAEhE,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,OAAO,KAAA,CAAM,SAAA;AAAA,QACb,OAAA,EAAS,MAAA,CAAO,YAAA,CAAa,IAAI,CAAA;AAAA,QACjC,QAAA,EAAU,MAAA,CAAO,aAAA,CAAc,IAAI;AAAA,OACrC;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,WAAA,EAAa,sHAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,+DAA+D,CAAA;AAAA,QAChG,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kEAAkE,CAAA;AAAA,QACpG,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sDAAsD,CAAA;AAAA,QACrF,eAAe,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mDAAmD,CAAA;AAAA,QACjG,aAAa,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gDAAgD;AAAA,OAC7F;AAAA;AACH,GACF;AACF;AAMO,SAAS,kBAAkB,OAAA,EAAiB;AACjD,EAAA,OAAO,IAAA;AAAA,IACL,OAAO,KAAA,KAAU;AACf,MAAA,MAAM,WAAA,GAAcC,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AAGlD,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,eAAe,KAAA,CAAM,YAAA,GACvB,IAAA,CAAK,KAAA,CAAM,MAAM,YAAY,CAAA,GAC7BD,GAAAA,CAAG,WAAA,CAAY,WAAW,CAAA,CAAE,MAAA,CAAO,OAAK,CAAA,CAAE,QAAA,CAAS,OAAO,CAAC,CAAA;AAE/D,MAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,QAAA,MAAM,QAAA,GAAWC,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,IAAI,CAAA;AAC5C,QAAA,IAAI,CAACD,GAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,QAAA,QAAA,CAAS,IAAA,CAAK,KAAK,KAAA,CAAMA,GAAAA,CAAG,aAAa,QAAA,EAAU,OAAO,CAAC,CAAsB,CAAA;AAAA,MACnF;AAEA,MAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,iCAAA,EAAkC;AAAA,MACpE;AAGA,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI,MAAM,eAAA,EAAiB;AACzB,QAAA,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,eAAe,CAAA;AAAA,MAChD;AAGA,MAAA,IAAI,cAAA;AACJ,MAAA,IAAI,MAAM,kBAAA,EAAoB;AAC5B,QAAA,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,kBAAkB,CAAA;AAAA,MACtD;AAGA,MAAA,MAAM,SAAS,gBAAA,CAAiB;AAAA,QAC9B,OAAA,EAAS,MAAM,OAAA,IAAW,aAAA;AAAA,QAC1B,QAAA;AAAA,QACA,cAAA,EAAiB,MAAM,cAAA,IAA8C,MAAA;AAAA,QACrE,WAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,MAAM,UAAA,GAAaC,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,YAAY,CAAA;AAClD,MAAAD,GAAAA,CAAG,cAAc,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAGnE,MAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,MAAA,CAAO,MAAA,EAAQ,OAAO,CAAA;AAEhE,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,OAAO,MAAA,CAAO,IAAA;AAAA,QACvB,cAAc,QAAA,CAAS,MAAA;AAAA,QACvB,SAAA,EAAW,OAAO,MAAA,CAAO,SAAA;AAAA,QACzB,UAAA;AAAA,QACA,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,WAAW,KAAA,IAAS,KAAA;AAAA,UAC3B,UAAA,EAAA,CAAa,UAAA,CAAW,MAAA,IAAU,EAAC,EAAG,MAAA;AAAA,UACtC,MAAA,EAAA,CAAS,UAAA,CAAW,MAAA,IAAU,EAAC,EAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO;AAAA;AAClE,OACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,WAAA,EAAa,0MAAA;AAAA,MACb,MAAA,EAAQ,EAAE,MAAA,CAAO;AAAA,QACf,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,kBAAkB,CAAA;AAAA,QAC1D,cAAc,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,4EAA4E,CAAA;AAAA,QACzH,cAAA,EAAgB,CAAA,CAAE,IAAA,CAAK,CAAC,WAAW,MAAA,EAAQ,WAAA,EAAa,aAAA,EAAe,MAAM,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,SAAS,oCAAoC,CAAA;AAAA,QACxI,iBAAiB,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qEAAqE,CAAA;AAAA,QACrH,oBAAoB,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,yEAAyE;AAAA,OAC7H;AAAA;AACH,GACF;AACF","file":"index.js","sourcesContent":["/**\n * Orbital CLI Validation Utility\n *\n * Shells out to `orbital validate --json <file>` for real schema validation.\n * The CLI always exits 0 and outputs JSON with validation results.\n *\n * @packageDocumentation\n */\n\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst ORBITAL_BINARY = '/home/osamah/bin/orbital';\n\nexport interface OrbitalValidationError {\n code: string;\n path: string;\n message: string;\n suggestion?: string;\n}\n\nexport interface OrbitalValidationStats {\n orbitals: number;\n entities: number;\n traits: number;\n pages: number;\n}\n\nexport interface OrbitalValidationResult {\n valid: boolean;\n errors: OrbitalValidationError[];\n stats?: OrbitalValidationStats;\n}\n\n/**\n * Validate an orbital schema using the `orbital validate` CLI.\n *\n * @param schema - JSON schema object or JSON string\n * @param workDir - Directory to write the temp .orb file\n * @returns Validation result with errors and stats\n */\nexport function validateWithOrbitalCLI(\n schema: unknown,\n workDir: string\n): OrbitalValidationResult {\n // Check if binary exists\n if (!fs.existsSync(ORBITAL_BINARY)) {\n return {\n valid: false,\n errors: [{ code: 'CLI_NOT_FOUND', path: '', message: `orbital binary not found at ${ORBITAL_BINARY}` }],\n };\n }\n\n // Write schema to temp file\n const schemaStr = typeof schema === 'string' ? schema : JSON.stringify(schema, null, 2);\n const tempPath = path.join(workDir, `_eval_validate_${Date.now()}.orb`);\n\n try {\n fs.writeFileSync(tempPath, schemaStr);\n\n const output = execSync(`${ORBITAL_BINARY} validate --json \"${tempPath}\"`, {\n encoding: 'utf-8',\n timeout: 30_000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const result = JSON.parse(extractJson(output)) as OrbitalValidationResult;\n return result;\n } catch (error: unknown) {\n // CLI may write JSON to stdout even on failure\n const err = error as { stdout?: string; stderr?: string; message?: string };\n if (err.stdout) {\n try {\n return JSON.parse(extractJson(err.stdout)) as OrbitalValidationResult;\n } catch {\n // stdout wasn't JSON\n }\n }\n\n return {\n valid: false,\n errors: [{\n code: 'CLI_ERROR',\n path: '',\n message: err.stderr?.trim() || err.message || 'Unknown CLI error',\n }],\n };\n } finally {\n // Clean up temp file\n try {\n fs.unlinkSync(tempPath);\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\n/**\n * Extract the validation JSON from CLI output.\n * The CLI prints: DEBUG lines, echoed schema, then the validation JSON object.\n * We find the JSON object containing `\"valid\"` by extracting all top-level\n * balanced JSON objects and returning the one with a `valid` field.\n */\nfunction extractJson(raw: string): string {\n const objects: string[] = [];\n let i = 0;\n\n while (i < raw.length) {\n if (raw[i] === '{') {\n let depth = 0;\n let inString = false;\n let escape = false;\n const start = i;\n\n for (; i < raw.length; i++) {\n const ch = raw[i];\n if (escape) { escape = false; continue; }\n if (ch === '\\\\' && inString) { escape = true; continue; }\n if (ch === '\"') { inString = !inString; continue; }\n if (inString) continue;\n if (ch === '{') depth++;\n if (ch === '}') {\n depth--;\n if (depth === 0) {\n objects.push(raw.slice(start, i + 1));\n i++;\n break;\n }\n }\n }\n } else {\n i++;\n }\n }\n\n // Return the object containing \"valid\" (the validation result)\n for (const obj of objects) {\n if (obj.includes('\"valid\"')) return obj;\n }\n\n // Fallback: return last object (most likely the result)\n if (objects.length > 0) return objects[objects.length - 1];\n return raw.trim();\n}\n","/**\n * Gate Prompt Builders\n *\n * Each gate gets a minimal, focused system prompt containing ONLY the knowledge\n * that gate needs. No shared architecture dumps across gates.\n *\n * Generator functions from @almadar/skills derive content from source packages\n * so prompts update automatically when patterns/bindings/rules change.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalDefinition,\n Trait,\n Transition,\n Entity,\n StateMachine,\n} from '@almadar/core/types';\nimport {\n getDecompositionCompact,\n getBindingsCompact,\n getBindingContextRules,\n getOrbRenderUIGuide,\n getOrbRenderUIGuideFiltered,\n} from '@almadar/skills';\n\n// ============================================================================\n// Gate 0: Application Decomposition\n// ============================================================================\n\nexport function buildGate0SystemPrompt(): string {\n const decomposition = getDecompositionCompact();\n\n return `You are an application architect. Given a natural language description, produce a shell .orb JSON schema.\n\n${decomposition}\n\nYour output must be a JSON object with:\n- name: PascalCase application name\n- version: \"1.0.0\"\n- orbitals: array of orbital shells\n\nEach orbital shell:\n- name: PascalCase ending in \"Orbital\" (e.g., \"TaskOrbital\")\n- entity: { name: PascalCase singular noun, fields: [{ name: \"id\", type: \"string\", required: true }] }\n- traits: [{ name: PascalCase, linkedEntity: entityName, category: \"interaction\", stateMachine: { states: [{ name: \"idle\", isInitial: true }], events: [], transitions: [] } }]\n- pages: [{ name: PascalCase, path: \"/lowercase\", traits: [{ ref: \"TraitName\" }] }]\n\nRules:\n- ONE orbital per entity type\n- Every orbital must have at least one trait\n- Keep it minimal: only the orbitals truly needed\n- Do NOT fill in entity fields (Gate 1 does that)\n- Do NOT fill in state machines (Gate 2 does that)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate0UserPrompt(\n prompt: string,\n guidedData?: { orbitalCount: number; entityNames: string[]; traitNames: string[] },\n): string {\n let userPrompt = `Decompose this application into an .orb schema:\\n\\n${prompt}`;\n\n if (guidedData) {\n userPrompt += `\\n\\nReference structure (use as guide):\n- ${guidedData.orbitalCount} orbital(s)\n- Entities: ${guidedData.entityNames.join(', ')}\n- Traits: ${guidedData.traitNames.join(', ')}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 1: Orbital Structure (Entity Fields + Persistence)\n// ============================================================================\n\nexport function buildGate1SystemPrompt(): string {\n return `You are an entity designer. Given an orbital shell, enrich it with full entity fields, persistence, and page details. Do NOT modify the state machine (Gate 2 fills that).\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- entity:\n - name: keep unchanged\n - persistence: \"persistent\" (survives sessions, needs collection), \"runtime\" (transient), or \"singleton\" (app-wide config)\n - collection: snake_case plural (only for persistent entities, e.g., \"cart_items\")\n - fields: array of { name, type, required?, default? }\n - First field MUST be { name: \"id\", type: \"string\", required: true }\n - Valid types: \"string\", \"number\", \"boolean\", \"object\", \"array\"\n - Include ALL fields the entity needs (status, timestamps, amounts, references, etc.)\n- traits: keep unchanged (shell state machine, Gate 2 fills it)\n- pages: [{ name: PascalCase, path: \"/lowercase\", isInitial?, traits: [{ ref: \"TraitName\" }] }]\n - EVERY page MUST have a traits array binding it to the orbital's trait(s)\n - Without traits, the page renders blank (runtime doesn't know which trait to activate)\n\nRules:\n- Think about what fields this entity genuinely needs for its domain\n- Include status fields (e.g., \"status\": \"string\") for entities with lifecycle states\n- Include amount/count fields (e.g., \"total\": \"number\") for entities with calculations\n- Include timestamp fields (e.g., \"createdAt\": \"string\") for auditable entities\n- Do NOT touch the stateMachine. Return it exactly as received.\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate1UserPrompt(\n orbital: OrbitalDefinition,\n allOrbitals: OrbitalDefinition[],\n guidedOrbital?: OrbitalDefinition,\n): string {\n let userPrompt = `Enrich this orbital with full entity fields and pages:\n${JSON.stringify(orbital, null, 2)}\n\nOther orbitals in this application (for cross-orbital context):\n${JSON.stringify(allOrbitals.filter((o) => o.name !== orbital.name), null, 2)}`;\n\n if (guidedOrbital) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedOrbital, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 2: State Machine + Slot Assignments\n// ============================================================================\n\nexport function buildGate2SystemPrompt(): string {\n return `You are a state machine designer. Given a trait and its entity, design the state machine topology and assign UI slot presentations per state.\n\nYour output must be a JSON object with:\n- name: keep unchanged\n- linkedEntity: keep unchanged\n- category: \"interaction\"\n- stateMachine:\n - states: [{ name: camelCase, isInitial?: true }]\n - events: [{ key: \"UPPER_SNAKE_CASE\", name: \"Human Label\", payloadSchema: [{ name, type }] }]\n - transitions: [{ from, event, to, effects: [] }]\n- ui: { \"stateName\": { \"presentation\": \"inline\" | \"modal\" }, ... }\n\nState Machine Rules:\n- Exactly ONE state must have isInitial: true (typically \"idle\" or \"browsing\")\n- Every state must be reachable from the initial state\n- Every event must be used in at least one transition\n- The initial state MUST have an INIT self-loop transition (idle->INIT->idle or browsing->INIT->browsing)\n- Leave effects as empty arrays (Gate 3 fills these)\n\nPayload Schema Rules (MANDATORY - validation fails without these):\n- EVERY event except INIT, CLOSE, and CANCEL MUST have a payloadSchema. This is NOT optional.\n- SAVE: { \"key\": \"SAVE\", \"name\": \"Save\", \"payloadSchema\": [{ \"name\": \"data\", \"type\": \"object\" }] }\n- EDIT: { \"key\": \"EDIT\", \"name\": \"Edit\", \"payloadSchema\": [{ \"name\": \"id\", \"type\": \"string\" }] }\n- DELETE: { \"key\": \"DELETE\", \"name\": \"Delete\", \"payloadSchema\": [{ \"name\": \"id\", \"type\": \"string\" }] }\n- VIEW: { \"key\": \"VIEW\", \"name\": \"View\", \"payloadSchema\": [{ \"name\": \"id\", \"type\": \"string\" }] }\n- CREATE: { \"key\": \"CREATE\", \"name\": \"Create\" } (no payload needed, opens empty form)\n- Any event with a verb that acts on an entity needs payloadSchema with at least \"id\" or \"data\"\n\nExample events array:\n[\n { \"key\": \"INIT\", \"name\": \"Initialize\" },\n { \"key\": \"CREATE\", \"name\": \"Create Item\" },\n { \"key\": \"EDIT\", \"name\": \"Edit Item\", \"payloadSchema\": [{ \"name\": \"id\", \"type\": \"string\" }] },\n { \"key\": \"SAVE\", \"name\": \"Save\", \"payloadSchema\": [{ \"name\": \"data\", \"type\": \"object\" }] },\n { \"key\": \"DELETE\", \"name\": \"Delete Item\", \"payloadSchema\": [{ \"name\": \"id\", \"type\": \"string\" }] },\n { \"key\": \"CANCEL\", \"name\": \"Cancel\" },\n { \"key\": \"CLOSE\", \"name\": \"Close\" }\n]\n\nUI Slot Assignment Rules:\n- Assign \"inline\" to primary view states (idle, browsing, listing, viewing)\n- Assign \"modal\" to overlay action states (creating, editing, deleting, confirming)\n- Every state MUST have an assignment in the ui object\n- Every \"modal\" state MUST have BOTH a CLOSE and CANCEL transition back to an \"inline\" state\n\nTypical CRUD state machine pattern:\n- idle/browsing (inline): main list view, INIT self-loop\n- creating (modal): opened by CREATE event, closed by SAVE/CANCEL/CLOSE\n- editing (modal): opened by EDIT event, closed by SAVE/CANCEL/CLOSE\n- deleting (modal): opened by DELETE event, closed by CONFIRM_DELETE/CANCEL/CLOSE\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate2UserPrompt(\n trait: Trait,\n entity: Entity,\n orbitalDescription: string,\n guidedTrait?: Trait,\n): string {\n let userPrompt = `Design the state machine for trait:\n${JSON.stringify(trait, null, 2)}\n\nEntity it manages:\n${JSON.stringify(entity, null, 2)}\n\nOrbital context: ${orbitalDescription}`;\n\n if (guidedTrait) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTrait, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 3: Transition Effects (Guards + Data Effects)\n// ============================================================================\n\nexport function buildGate3SystemPrompt(): string {\n const bindingsCompact = getBindingsCompact();\n const bindingContextRules = getBindingContextRules();\n\n return `You are a transition effect designer. Given a transition, add guards and data effects.\n\n${bindingsCompact}\n\n${bindingContextRules}\n\nYour output must be a JSON object with:\n- from: keep unchanged\n- event: keep unchanged\n- to: keep unchanged\n- guard: s-expression array or null\n Example: [\"and\", [\"not\", [\"eq\", \"@entity.status\", \"locked\"]], [\"gt\", \"@entity.count\", 0]]\n- effects: array of effect tuples\n\nEffect types (use ONLY these four):\n- [\"set\", \"@entity.fieldName\", value] - Set entity field. Value: \"@payload.field\", \"@now\", or literal.\n- [\"fetch\", \"EntityName\"] - Load entity data. Use in INIT transitions.\n- [\"persist\", \"create\"|\"update\"|\"delete\", \"EntityName\", \"@payload.data\"] - CRUD entity records.\n- [\"notify\", \"message\", \"success\"|\"error\"|\"info\"] - Show a notification.\n\nBANNED effects: call-service, emit, log, navigate.\n\nRules:\n- Guards are optional. Only add when the transition genuinely needs a precondition.\n- INIT transitions: include [\"fetch\", \"EntityName\"]\n- SAVE transitions (from creating): include [\"persist\", \"create\", \"EntityName\", \"@payload.data\"]\n- SAVE transitions (from editing): include [\"persist\", \"update\", \"EntityName\", \"@payload.data\"]\n- CONFIRM_DELETE transitions: include [\"persist\", \"delete\", \"EntityName\", \"@payload.data\"]\n- set target MUST start with @entity (never @payload)\n- Do NOT include render-ui effects (Gate 4 handles those)\n\nGuard Rules (CRITICAL):\n- Do NOT wrap a single condition in \"and\". Use \"and\" ONLY for 2+ conditions.\n WRONG: [\"and\", [\"eq\", \"@entity.status\", \"active\"]]\n RIGHT: [\"eq\", \"@entity.status\", \"active\"]\n- ONLY reference fields that exist on the entity shown in the user prompt. Do NOT invent fields.\n If the entity has fields [id, name, status], you can use @entity.name, @entity.status. Do NOT use @entity.items or @entity.data if they are not listed.\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport function buildGate3UserPrompt(\n transition: Transition,\n entity: Entity,\n sm: StateMachine,\n guidedTransition?: Transition,\n): string {\n let userPrompt = `Design effects for transition:\n${transition.from} --[${transition.event}]--> ${transition.to}\n\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states: ${sm.states.map((s) => s.name).join(', ')}\nAll events: ${JSON.stringify(sm.events, null, 2)}`;\n\n if (guidedTransition) {\n userPrompt += `\\n\\nReference (use as guide):\n${JSON.stringify(guidedTransition, null, 2)}`;\n }\n\n return userPrompt;\n}\n\n// ============================================================================\n// Gate 4: Render UI\n// ============================================================================\n\nexport function buildGate4SystemPrompt(matchedPatterns?: string[]): string {\n const orbGuide = matchedPatterns\n ? getOrbRenderUIGuideFiltered(matchedPatterns)\n : getOrbRenderUIGuide();\n\n return `You are a UI designer. Given a transition with its effects, produce the render-ui pattern tree.\n\n${orbGuide}\n\nYour output must be a JSON object with:\n- renderEffects: [{ slot, tree }]\n - slot: \"main\" or \"modal\" (determined by the state's slot assignment shown in the user prompt)\n - tree: pattern composition object, or null (to clear a slot)\n\nSlot Rules:\n- Use the slot shown in the user prompt for the target state (main or modal)\n- When exiting a modal state (the user prompt will say so), you MUST include BOTH:\n 1. { \"slot\": \"modal\", \"tree\": null } to clear the modal\n 2. { \"slot\": \"main\", \"tree\": { ... } } to re-render the main view\n WITHOUT BOTH, the main view shows stale content after closing the modal. This is a validation error.\n\nBinding Rules:\n- Bindings are ONLY paths: @entity.name, @entity.price (NO expressions like @entity.x <= 0)\n- Each prop value must contain at most ONE binding. NEVER concatenate: \"@entity.price @entity.currency\" is INVALID\n- For combined display, use separate typography elements or static labels\n- button event props must match state machine event keys\n- ONLY bind to entity fields shown in the user prompt. Do NOT invent fields.\n If entity has fields [id, name, status, price], you can use @entity.name, @entity.price.\n Do NOT use @entity.items, @entity.data, or any field not listed. This is a validation error.\n\nPattern Rules:\n- Use ONLY props that exist on the pattern. Do NOT invent props.\n- data-list fields MUST be a string array: [\"name\", \"status\", \"price\"]. NEVER use objects or nested trees for fields.\n WRONG: \"fields\": [{ \"type\": \"stack\", \"children\": [...] }]\n WRONG: \"fields\": [{ \"field\": \"name\", \"label\": \"Name\" }]\n RIGHT: \"fields\": [\"name\", \"status\", \"price\"]\n- data-list: entity, fields, itemActions (NOT emptyIcon, emptyTitle)\n- button: label, variant, event, icon, size (NOT disabled)\n- card: children (NOT padding, bg, border, use box for those)\n\nRespond with ONLY valid JSON. No markdown, no explanation.`;\n}\n\nexport interface SlotContext {\n stateSlots: Record<string, 'main' | 'modal'>;\n exitsModal: boolean;\n}\n\nexport function buildGate4UserPrompt(\n transition: Transition,\n entity: Entity,\n targetStateName: string,\n sm: StateMachine,\n slotContext: SlotContext,\n guidedRenderEffects?: Array<{ slot: string; tree: Record<string, unknown> }>,\n): string {\n const targetSlot = slotContext.stateSlots[targetStateName] || 'main';\n const fromSlot = slotContext.stateSlots[transition.from] || 'main';\n\n let userPrompt = `Design the UI for state \"${targetStateName}\" (renders to \"${targetSlot}\" slot):\n\nTransition: ${transition.from} (${fromSlot}) --[${transition.event}]--> ${transition.to} (${targetSlot})\nCurrent effects: ${JSON.stringify(transition.effects || [], null, 2)}\nEntity: ${JSON.stringify(entity, null, 2)}\nAll states with slots: ${Object.entries(slotContext.stateSlots).map(([s, slot]) => `${s}(${slot})`).join(', ')}`;\n\n if (slotContext.exitsModal) {\n userPrompt += `\\n\\nIMPORTANT: This transition exits a modal state. You MUST include:\n1. { \"slot\": \"modal\", \"tree\": null } to clear the modal overlay\n2. { \"slot\": \"main\", \"tree\": { ... } } to render the main view`;\n }\n\n if (guidedRenderEffects) {\n userPrompt += `\\n\\nReference render-ui (use as guide):\n${JSON.stringify(guidedRenderEffects, null, 2)}`;\n }\n\n return userPrompt;\n}\n","/**\n * Gate 0: Application Decomposition\n *\n * NL prompt -> shell OrbitalSchema (orbital names, entity name + id field,\n * trait names with empty state machines, pages).\n * Single LLM call with fresh context.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate0SystemPrompt, buildGate0UserPrompt } from './prompts.js';\n\n// ============================================================================\n// Default Theme\n// ============================================================================\n\nconst DEFAULT_THEME = {\n name: 'default',\n tokens: {\n colors: {\n primary: '#6366f1',\n 'primary-hover': '#4f46e5',\n 'primary-foreground': '#ffffff',\n accent: '#ec4899',\n 'accent-foreground': '#ffffff',\n success: '#22c55e',\n warning: '#f59e0b',\n error: '#ef4444',\n },\n },\n};\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction normalizeOrbital(raw: Record<string, unknown>): OrbitalDefinition {\n const name = String(raw.name || 'Orbital');\n\n // Normalize entity\n const entityRaw = (raw.entity as Record<string, unknown>) || {};\n const entityName = String(entityRaw.name || name.replace(/Orbital$/i, ''));\n const fields = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const hasId = fields.some((f: Record<string, unknown>) => f.name === 'id');\n\n const entity = {\n name: entityName,\n fields: hasId\n ? fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n }))\n : [\n { name: 'id', type: 'string', required: true },\n ...fields.map((f: Record<string, unknown>) => ({\n name: String(f.name),\n type: String(f.type || 'string'),\n ...(f.required ? { required: true } : {}),\n })),\n ],\n };\n\n // Normalize traits\n const traitsRaw = Array.isArray(raw.traits) ? raw.traits : [];\n const traits = traitsRaw.length > 0\n ? traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || `${entityName}Control`),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }))\n : [{\n name: `${entityName}Control`,\n linkedEntity: entityName,\n category: 'interaction' as const,\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }];\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const pagesRaw = Array.isArray(raw.pages) ? raw.pages : [];\n const defaultTraits = traitNames.map((n) => ({ ref: n }));\n const pages = pagesRaw.length > 0\n ? pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || name.replace(/Orbital$/i, '')),\n path: String(p.path || p.route || `/${name.toLowerCase().replace(/orbital$/i, '')}`),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraits,\n }))\n : [{\n name: name.replace(/Orbital$/i, ''),\n path: `/${name.toLowerCase().replace(/orbital$/i, '')}`,\n traits: defaultTraits,\n }];\n\n return { name, entity, traits, pages } as OrbitalDefinition;\n}\n\nfunction parseGate0Response(raw: string): OrbitalSchema {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 0: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n const appName = String(obj.name || obj.appName || 'App');\n const version = String(obj.version || '1.0.0');\n const orbitalsRaw = Array.isArray(obj.orbitals) ? obj.orbitals : [];\n\n return {\n name: appName,\n version,\n design: { theme: DEFAULT_THEME } as OrbitalSchema['design'],\n orbitals: orbitalsRaw.map((o: Record<string, unknown>) => normalizeOrbital(o)),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport async function runGate0(\n client: LLMClient,\n prompt: string,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate0SystemPrompt();\n const userPrompt = buildGate0UserPrompt(\n prompt,\n behaviorData?.appLevel,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n return parseGate0Response(raw);\n}\n","/**\n * Gate 0.5: Behavior Matching\n *\n * Given the shell .orb from Gate 0, asks the LLM to select the best-matching\n * golden behavior from @almadar/std. Loads the matched behavior's exported\n * .orb file (full OrbitalSchema with entities, state machines, render-ui)\n * as the goldenOrb for Gates 1-4.\n *\n * Only runs in guided mode. Skipped entirely in pure mode.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport { getAllBehaviors, loadGoldenOrb as loadGoldenOrbFromStd } from '@almadar/std';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport type { GateOpts } from './types.js';\n\n// ============================================================================\n// Behavior Catalog (built once, cached)\n// ============================================================================\n\nlet cachedCatalog: string | null = null;\n\nfunction getBehaviorCatalog(): string {\n if (cachedCatalog) return cachedCatalog;\n\n const all = getAllBehaviors() as Array<Record<string, unknown>>;\n const lines = all.map((b) => {\n const name = String(b.name || '');\n const desc = String(b.description || '');\n const states = Array.isArray(b.states) ? b.states.length : 0;\n const events = Array.isArray(b.events) ? b.events.length : 0;\n return `- ${name}: ${desc} (${states} states, ${events} events)`;\n });\n cachedCatalog = lines.join('\\n');\n return cachedCatalog;\n}\n\n// ============================================================================\n// .orb File Loader (delegated to @almadar/std)\n// ============================================================================\n\nexport function loadGoldenOrbByName(behaviorName: string): OrbitalSchema | null {\n return loadGoldenOrbFromStd(behaviorName) as OrbitalSchema | null;\n}\n\n// ============================================================================\n// Prompts\n// ============================================================================\n\nfunction buildMatchSystemPrompt(): string {\n return `You are a behavior matching assistant. Given an application description and its orbital structure, select the most relevant golden behavior from the catalog below.\n\nThe catalog contains 107 standard behaviors. Each behavior is a proven, production-quality .orb program that handles a specific interaction pattern (CRUD lists, forms, search, cart, booking, etc.).\n\nYour task: pick the ONE behavior that best matches the application's primary interaction pattern. If no behavior is a close match, respond with \"none\".\n\nRespond with ONLY valid JSON: { \"match\": \"std-behavior-name\" } or { \"match\": \"none\" }\nNo markdown, no explanation.`;\n}\n\nfunction buildMatchUserPrompt(\n prompt: string,\n orb: OrbitalSchema,\n): string {\n const orbitalNames = orb.orbitals.map((o) => {\n const name = (o as { name: string }).name;\n return name;\n });\n\n return `Application: ${prompt}\n\nOrbitals produced by Gate 0: ${orbitalNames.join(', ')}\n\nBehavior catalog:\n${getBehaviorCatalog()}`;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\nexport interface BehaviorMatchResult {\n matchedName: string | null;\n goldenOrb: OrbitalSchema | null;\n}\n\n/**\n * Match the prompt against golden behaviors via LLM.\n * Loads the matched behavior's exported .orb file as goldenOrb.\n */\nexport async function runGate05(\n client: LLMClient,\n prompt: string,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n): Promise<BehaviorMatchResult> {\n const systemPrompt = buildMatchSystemPrompt();\n const userPrompt = buildMatchUserPrompt(prompt, orb);\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 256,\n });\n\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('[Gate 0.5] Failed to parse match response, falling back to pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n const matchName = String(obj.match || 'none');\n\n if (matchName === 'none') {\n console.log('[Gate 0.5] No behavior match found, using pure mode');\n return { matchedName: null, goldenOrb: null };\n }\n\n // Load the full .orb file via @almadar/std\n const goldenOrb = loadGoldenOrbByName(matchName);\n if (!goldenOrb) {\n console.warn(`[Gate 0.5] Matched \"${matchName}\" but could not load .orb file`);\n return { matchedName: matchName, goldenOrb: null };\n }\n\n console.log(`[Gate 0.5] Matched behavior: ${matchName}`);\n return { matchedName: matchName, goldenOrb };\n}\n","/**\n * Merge Utilities\n *\n * Immutable helpers for replacing orbitals, traits, and transitions\n * within an OrbitalSchema. All return a new OrbitalSchema (deep clone).\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Trait,\n Transition,\n} from '@almadar/core/types';\n\n// ============================================================================\n// Deep Clone\n// ============================================================================\n\n/** Deep clone an OrbitalSchema via structured clone. */\nexport function deepCloneOrb(orb: OrbitalSchema): OrbitalSchema {\n return structuredClone(orb);\n}\n\n// ============================================================================\n// Replace Orbital\n// ============================================================================\n\n/**\n * Replace an orbital by name within the schema.\n * Returns a new OrbitalSchema with the orbital swapped.\n */\nexport function replaceOrbital(\n orb: OrbitalSchema,\n name: string,\n enriched: OrbitalDefinition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const idx = clone.orbitals.findIndex(\n (o) => (o as OrbitalDefinition).name === name,\n );\n if (idx >= 0) {\n clone.orbitals[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Trait\n// ============================================================================\n\n/**\n * Replace a trait by name within a specific orbital.\n * Returns a new OrbitalSchema with the trait swapped.\n */\nexport function replaceTrait(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n enriched: Trait,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const traits = orbital.traits;\n const idx = traits.findIndex((t) => {\n if (typeof t === 'string') return t === traitName;\n if ('ref' in t) return t.ref === traitName;\n return t.name === traitName;\n });\n\n if (idx >= 0) {\n traits[idx] = enriched;\n }\n return clone;\n}\n\n// ============================================================================\n// Replace Transition\n// ============================================================================\n\n/**\n * Replace a transition (by from+event) within a trait's state machine.\n * Returns a new OrbitalSchema with the transition swapped.\n */\nexport function replaceTransition(\n orb: OrbitalSchema,\n orbName: string,\n traitName: string,\n from: string,\n event: string,\n enriched: Transition,\n): OrbitalSchema {\n const clone = deepCloneOrb(orb);\n const orbital = clone.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbName,\n ) as OrbitalDefinition | undefined;\n if (!orbital) return clone;\n\n const trait = orbital.traits.find((t) => {\n if (typeof t === 'string') return false;\n if ('ref' in t) return false;\n return t.name === traitName;\n }) as Trait | undefined;\n if (!trait?.stateMachine) return clone;\n\n const idx = trait.stateMachine.transitions.findIndex(\n (t) => t.from === from && t.event === event,\n );\n if (idx >= 0) {\n trait.stateMachine.transitions[idx] = enriched;\n }\n return clone;\n}\n","/**\n * Gate 1: Orbital Structure\n *\n * Enriches each orbital shell with full entity fields, persistence,\n * collection, trait emits/listens, and pages.\n * One LLM call per orbital.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n FieldType,\n TraitEventContract,\n TraitEventListener,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate1SystemPrompt, buildGate1UserPrompt } from './prompts.js';\nimport { replaceOrbital } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate1Response(raw: string, original: OrbitalDefinition): OrbitalDefinition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n throw new Error(`Gate 1: failed to parse JSON from response: ${raw.slice(0, 200)}`);\n }\n\n const obj = JSON.parse(parsed) as Record<string, unknown>;\n\n // Normalize entity\n const entityRaw = (obj.entity as Record<string, unknown>) || {};\n const entityName = String(\n entityRaw.name || (original.entity as Entity).name,\n );\n const fieldsRaw = Array.isArray(entityRaw.fields) ? entityRaw.fields : [];\n const entity: Entity = {\n name: entityName,\n persistence: (entityRaw.persistence as Entity['persistence']) || 'runtime',\n ...(entityRaw.collection ? { collection: String(entityRaw.collection) } : {}),\n fields: fieldsRaw.length > 0\n ? fieldsRaw.map((f: Record<string, unknown>) => ({\n name: String(f.name || ''),\n type: (f.type as FieldType) || 'string',\n ...(f.required ? { required: true } : {}),\n ...(f.default !== undefined ? { default: f.default } : {}),\n }))\n : [{ name: 'id', type: 'string' as FieldType, required: true }],\n };\n\n // Normalize traits (keep shell state machines)\n const traitsRaw = Array.isArray(obj.traits) ? obj.traits : [];\n const traits: Trait[] = traitsRaw.map((t: Record<string, unknown>) => ({\n name: String(t.name || ''),\n linkedEntity: String(t.linkedEntity || entityName),\n category: 'interaction' as const,\n ...(Array.isArray(t.emits) && t.emits.length > 0\n ? { emits: t.emits.map((e: unknown): TraitEventContract => typeof e === 'string' ? { event: e } : e as TraitEventContract) }\n : {}),\n ...(Array.isArray(t.listens) && t.listens.length > 0\n ? { listens: t.listens.map((l: unknown): TraitEventListener => typeof l === 'string' ? { event: l, triggers: l } : l as TraitEventListener) }\n : {}),\n stateMachine: {\n states: [{ name: 'idle', isInitial: true }],\n events: [] as Array<{ key: string; name: string }>,\n transitions: [] as Array<{ from: string; event: string; to: string }>,\n },\n }));\n\n // Normalize pages - ensure every page has traits refs\n const traitNames = traits.map((t) => t.name);\n const defaultTraitRefs = traitNames.map((n) => ({ ref: n }));\n const pagesRaw = Array.isArray(obj.pages) ? obj.pages : [];\n const pages = pagesRaw.map((p: Record<string, unknown>) => ({\n name: String(p.name || p.label || ''),\n path: String(p.path || p.route || '/'),\n ...(p.isInitial ? { isInitial: true } : {}),\n traits: Array.isArray(p.traits) ? p.traits : defaultTraitRefs,\n }));\n\n return {\n name: String(obj.name || original.name),\n entity,\n traits,\n pages,\n } as OrbitalDefinition;\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Enrich all orbital shells with full entity fields and trait details.\n * Iterates orbitals with one LLM call each, merges back via replaceOrbital.\n */\nexport async function runGate1(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate1SystemPrompt();\n const allOrbitals = orb.orbitals as OrbitalDefinition[];\n let result = orb;\n\n for (const orbital of allOrbitals) {\n // Find guided orbital from golden .orb\n const guidedOrbital = opts.goldenOrb?.orbitals.find(\n (o) => (o as OrbitalDefinition).name === orbital.name,\n ) as OrbitalDefinition | undefined;\n\n const userPrompt = buildGate1UserPrompt(\n orbital,\n allOrbitals,\n guidedOrbital,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate1Response(raw, orbital);\n result = replaceOrbital(result, orbital.name, enriched);\n }\n\n return result;\n}\n","/**\n * Gate 2: Trait State Machine\n *\n * Fills in stateMachine (states, events, transitions with empty effects)\n * for each trait across all orbitals.\n * One LLM call per trait.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n StateMachine,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate2SystemPrompt, buildGate2UserPrompt } from './prompts.js';\nimport { replaceTrait } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate2Response(raw: string, original: Trait): Trait {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 2: no JSON found, returning trait as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 2: malformed JSON, returning trait as-is`);\n return original;\n }\n\n const statesRaw = Array.isArray(obj.states) ? obj.states : [];\n const eventsRaw = Array.isArray(obj.events) ? obj.events : [];\n const transitionsRaw = Array.isArray(obj.transitions) ? obj.transitions : [];\n\n // Use stateMachine from the response if present, otherwise build from flat arrays\n const smRaw = obj.stateMachine as Record<string, unknown> | undefined;\n const states = (smRaw && Array.isArray(smRaw.states) ? smRaw.states : statesRaw)\n .map((s: Record<string, unknown>) => ({\n name: String(s.name || ''),\n ...(s.isInitial ? { isInitial: true } : {}),\n }));\n\n const events = (smRaw && Array.isArray(smRaw.events) ? smRaw.events : eventsRaw)\n .map((e: Record<string, unknown>) => ({\n key: String(e.key || ''),\n name: String(e.name || e.key || ''),\n ...(Array.isArray(e.payloadSchema) ? { payloadSchema: e.payloadSchema } : {}),\n }));\n\n const transitions = (smRaw && Array.isArray(smRaw.transitions) ? smRaw.transitions : transitionsRaw)\n .map((t: Record<string, unknown>) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n effects: [] as Effect[],\n }));\n\n const stateMachine: StateMachine = { states, events, transitions };\n\n // Parse ui slot assignments (Gate 2 outputs these for Gate 4 to consume)\n type PresentationType = 'modal' | 'drawer' | 'popover' | 'inline' | 'confirm-dialog';\n const validPresentations = new Set<string>(['modal', 'drawer', 'popover', 'inline', 'confirm-dialog']);\n const uiRaw = (obj.ui || smRaw?.ui) as Record<string, Record<string, unknown>> | undefined;\n const ui = uiRaw ? Object.fromEntries(\n Object.entries(uiRaw).map(([stateName, binding]) => {\n const pres = String(binding.presentation || 'inline');\n return [\n stateName,\n {\n presentation: (validPresentations.has(pres) ? pres : 'inline') as PresentationType,\n content: (binding.content || {}) as Record<string, unknown>,\n },\n ];\n }),\n ) : undefined;\n\n return {\n ...original,\n name: String(obj.name || original.name),\n stateMachine,\n ...(ui ? { ui } : {}),\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in state machines for all traits across all orbitals.\n * Iterates traits with one LLM call each, merges back via replaceTrait.\n */\nexport async function runGate2(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate2SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n\n // Find guided trait from golden .orb\n const guidedTrait = findGuidedTrait(opts.goldenOrb, trait.name);\n\n const userPrompt = buildGate2UserPrompt(\n trait,\n entity,\n orbital.description || '',\n guidedTrait,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate2Response(raw, trait);\n result = replaceTrait(result, orbital.name, trait.name, enriched);\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTrait(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n): Trait | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name === traitName) return t as Trait;\n }\n }\n return undefined;\n}\n","/**\n * Gate 3: Transition Effects\n *\n * Fills in guard + non-render effects for each transition across all traits.\n * One LLM call per transition.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Expression,\n Effect,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate3SystemPrompt, buildGate3UserPrompt } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\nfunction parseGate3Response(raw: string, original: Transition): Transition {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn(`Gate 3: no JSON found, returning transition as-is`);\n return original;\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 3: malformed JSON, returning transition as-is`);\n return original;\n }\n\n const guard = Array.isArray(obj.guard) ? (obj.guard as Expression) : undefined;\n const effectsRaw = Array.isArray(obj.effects) ? obj.effects : [];\n const effects: Effect[] = effectsRaw.filter(\n (e: unknown) => Array.isArray(e) && e.length >= 2,\n ) as Effect[];\n\n return {\n from: String(obj.from || original.from),\n event: String(obj.event || original.event),\n to: String(obj.to || original.to),\n ...(guard ? { guard } : {}),\n effects,\n };\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Fill in guards and non-render effects for all transitions.\n * Iterates all transitions across all traits with one LLM call each.\n */\nexport async function runGate3(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate3SystemPrompt();\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n for (const transition of trait.stateMachine.transitions) {\n // Find guided transition from golden .orb\n const guidedTransition = findGuidedTransition(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate3UserPrompt(\n transition,\n entity,\n trait.stateMachine,\n guidedTransition,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: opts.maxTokens ?? 4096,\n });\n\n const enriched = parseGate3Response(raw, transition);\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedTransition(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Transition | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const found = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (found) return found;\n }\n }\n return undefined;\n}\n","/**\n * Gate 3.5: Pattern Matching\n *\n * Selects the 10-20 most relevant UI patterns for this application.\n * Two-phase approach:\n * 1. Deterministic pre-filter: analyze state machine to exclude irrelevant\n * categories (game patterns for CRUD apps, form patterns for read-only, etc.)\n * 2. LLM selection: pick from the pre-filtered set\n *\n * Gate 4 then receives only these patterns with full prop details.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport { getOrbAllowedPatterns, getAllPatternTypes } from '@almadar/patterns';\nimport type { OrbitalSchema, OrbitalDefinition, Trait, Entity } from '@almadar/core/types';\nimport type { GateOpts } from './types.js';\n\n// ============================================================================\n// Core patterns (always included, no LLM selection needed)\n// ============================================================================\n\nconst CORE_PATTERNS = [\n 'stack', 'box', 'typography', 'divider', 'icon', 'button',\n];\n\n// ============================================================================\n// Game pattern detection\n// ============================================================================\n\nconst GAME_EVENTS = new Set([\n 'ATTACK', 'DEFEND', 'MOVE', 'SPAWN', 'DAMAGE', 'HEAL', 'CAST',\n 'LEVEL_UP', 'GAME_OVER', 'START_GAME', 'PAUSE', 'RESUME',\n 'NEXT_TURN', 'END_TURN', 'COLLECT', 'EQUIP', 'UNEQUIP', 'CRAFT',\n 'TICK', 'STEP', 'SIMULATE',\n]);\n\nconst GAME_PATTERN_NAMES = new Set([\n 'health-bar', 'score-display', 'control-button', 'd-pad', 'action-button',\n 'choice-button', 'combo-counter', 'damage-number', 'mini-map',\n 'resource-counter', 'timer-display', 'turn-indicator', 'waypoint-marker',\n 'x-p-bar', 'crafting-recipe', 'enemy-plate', 'health-panel',\n 'quest-tracker', 'resource-bar', 'turn-panel', 'unit-command-bar',\n 'powerup-slots', 'item-slot', 'status-effect',\n // display: game/simulation\n 'model-loader', 'feature-renderer', 'unit-renderer', 'state-indicator',\n 'simulation-controls', 'simulation-graph', 'event-log',\n 'object-rule-panel', 'rule-editor', 'action-palette', 'sequence-bar',\n 'state-node', 'transition-arrow', 'variable-panel',\n]);\n\n// Patterns only relevant if the app has search/filter events\nconst SEARCH_PATTERNS = new Set(['search-input']);\n\n// Patterns only relevant if the app has wizard/step states\nconst WIZARD_PATTERNS = new Set(['wizard-progress', 'wizard-navigation']);\n\n// Patterns only relevant for specialized UI\nconst SPECIALIZED_PATTERNS = new Set([\n 'law-reference-tooltip', 'violation-alert', 'scaled-diagram',\n 'quiz-block', 'code-block', 'code-view', 'markdown-content',\n 'flip-card', 'flip-container', 'confetti-effect', 'typewriter-text',\n 'pull-to-refresh', 'swipeable-row', 'lightbox', 'carousel',\n 'calendar-grid', 'time-slot-cell', 'day-cell',\n 'line-chart', 'chart-legend', 'graph-view',\n 'split-pane', 'master-detail', 'tabbed-container',\n // Aliases (typography already covers these)\n 'heading', 'text',\n // Alias for button\n 'button-pattern',\n // Niche/unlikely for most apps\n 'conditional-wrapper', 'text-highlight', 'theme-toggle', 'flex',\n 'floating-action-button', 'animated-counter', 'infinite-scroll-sentinel',\n 'progress-dots', 'map-view', 'range-slider', 'number-stepper',\n 'star-rating', 'upload-drop-zone', 'collapsible-section',\n 'stat-badge', 'status-dot', 'sortable-list', 'trend-indicator',\n // Container patterns (compiler handles these, not render-ui)\n 'modal', 'drawer', 'overlay',\n // Form sub-patterns (form-section is enough)\n 'repeatable-form-section', 'form-field', 'form-section-header',\n 'input-group', 'relation-select', 'date-range-selector',\n // Layout extras (stack/box cover these)\n 'grid', 'center', 'spacer',\n // Error boundary (runtime handles this)\n 'error-boundary',\n]);\n\n// ============================================================================\n// Deterministic pre-filter\n// ============================================================================\n\ninterface AppSignals {\n hasModalStates: boolean;\n hasInlineStates: boolean;\n hasCreateEdit: boolean;\n hasDelete: boolean;\n hasSearch: boolean;\n hasWizard: boolean;\n isGame: boolean;\n eventNames: Set<string>;\n}\n\nfunction analyzeApp(orb: OrbitalSchema): AppSignals {\n const signals: AppSignals = {\n hasModalStates: false,\n hasInlineStates: false,\n hasCreateEdit: false,\n hasDelete: false,\n hasSearch: false,\n hasWizard: false,\n isGame: false,\n eventNames: new Set(),\n };\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n const ui = trait.ui as Record<string, { presentation: string }> | undefined;\n if (ui) {\n for (const val of Object.values(ui)) {\n if (val.presentation === 'modal') signals.hasModalStates = true;\n if (val.presentation === 'inline') signals.hasInlineStates = true;\n }\n }\n\n for (const state of trait.stateMachine.states) {\n const name = state.name.toLowerCase();\n if (name.includes('creat') || name.includes('edit')) signals.hasCreateEdit = true;\n if (name.includes('delet') || name.includes('confirm')) signals.hasDelete = true;\n if (name.includes('search') || name.includes('filter')) signals.hasSearch = true;\n if (name.includes('step') || name.includes('wizard')) signals.hasWizard = true;\n }\n\n for (const event of trait.stateMachine.events) {\n signals.eventNames.add(event.key);\n if (GAME_EVENTS.has(event.key)) signals.isGame = true;\n if (event.key === 'SEARCH' || event.key === 'FILTER') signals.hasSearch = true;\n }\n }\n }\n\n return signals;\n}\n\nfunction preFilterPatterns(signals: AppSignals): string[] {\n const grouped = getOrbAllowedPatterns();\n const allowed: string[] = [];\n\n for (const items of Object.values(grouped)) {\n for (const item of items) {\n // Skip core patterns (added separately)\n if (CORE_PATTERNS.includes(item.name)) continue;\n\n // Skip game patterns for non-game apps\n if (!signals.isGame && GAME_PATTERN_NAMES.has(item.name)) continue;\n\n // Skip search patterns if no search\n if (!signals.hasSearch && SEARCH_PATTERNS.has(item.name)) continue;\n\n // Skip wizard patterns if no wizard\n if (!signals.hasWizard && WIZARD_PATTERNS.has(item.name)) continue;\n\n // Skip specialized patterns unless game\n if (!signals.isGame && SPECIALIZED_PATTERNS.has(item.name)) continue;\n\n allowed.push(item.name);\n }\n }\n\n return allowed;\n}\n\n// ============================================================================\n// Build slim catalog from pre-filtered list\n// ============================================================================\n\nfunction buildSlimCatalog(patternNames: string[]): string {\n const grouped = getOrbAllowedPatterns();\n const nameSet = new Set(patternNames);\n const lines: string[] = [];\n\n for (const [cat, items] of Object.entries(grouped).sort()) {\n const filtered = items.filter(i => nameSet.has(i.name));\n if (filtered.length === 0) continue;\n lines.push(`## ${cat}`);\n for (const item of filtered) {\n const desc = item.description.split('\\n')[0].slice(0, 80);\n lines.push(`- ${item.name}: ${desc}`);\n }\n }\n\n return lines.join('\\n');\n}\n\n// ============================================================================\n// Prompts\n// ============================================================================\n\nfunction buildSystemPrompt(preFiltered: string[], signals: AppSignals): string {\n const catalog = buildSlimCatalog(preFiltered);\n\n return `You are a UI pattern selector. Pick 5-15 patterns from the catalog below to render this application's UI.\n\nCore layout patterns are ALWAYS included (do not list them):\n${CORE_PATTERNS.join(', ')}\n\nSelect from each applicable category:\n\n**Content (pick 1-3)**: data-list or data-grid for lists, card for grouping, stat-display for metrics, badge for status\n**Forms${signals.hasCreateEdit ? ' (REQUIRED - app has create/edit states)' : ''}**: form-section for create/edit forms\n**Feedback (pick 1-2)**: empty-state, loading-state, error-state, notification\n**Navigation (if needed)**: tabs, pagination, breadcrumb\n\nPick at most 15 patterns total. Only pick patterns you are confident the app needs.\n\nCatalog (${preFiltered.length} patterns):\n${catalog}\n\nRespond with ONLY valid JSON: { \"patterns\": [\"pattern-name\", ...] }`;\n}\n\nfunction buildUserPrompt(orb: OrbitalSchema): string {\n const lines: string[] = [];\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n const fields = entity.fields?.map(f => `${f.name}:${f.type}`).join(', ') || 'none';\n lines.push(`Entity: ${entity.name} (${fields})`);\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n const states = trait.stateMachine.states.map(s => s.name).join(', ');\n const events = trait.stateMachine.events.map(e => e.key).join(', ');\n const ui = trait.ui as Record<string, { presentation: string }> | undefined;\n const slots = ui\n ? Object.entries(ui).map(([s, v]) => `${s}(${v.presentation})`).join(', ')\n : 'none';\n\n lines.push(`Trait: ${trait.name} | States: ${states} | Events: ${events} | Slots: ${slots}`);\n }\n }\n\n return `Select UI patterns for this application:\\n\\n${lines.join('\\n')}`;\n}\n\n// ============================================================================\n// Execution\n// ============================================================================\n\n/**\n * Run Gate 3.5: select relevant patterns for this application.\n * Phase 1: deterministic pre-filter based on state machine analysis.\n * Phase 2: LLM selects from the pre-filtered set.\n * Returns an array of pattern names (always includes core patterns).\n */\nexport async function runGate35(\n client: LLMClient,\n orb: OrbitalSchema,\n _opts: GateOpts = {},\n): Promise<string[]> {\n // Phase 1: deterministic pre-filter\n const signals = analyzeApp(orb);\n const preFiltered = preFilterPatterns(signals);\n console.log(`[Gate 3.5] Pre-filtered: ${preFiltered.length} patterns (game=${signals.isGame}, createEdit=${signals.hasCreateEdit})`);\n\n // Phase 2: LLM selection from pre-filtered set\n const systemPrompt = buildSystemPrompt(preFiltered, signals);\n const userPrompt = buildUserPrompt(orb);\n\n try {\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: 256,\n });\n\n const jsonStr = extractJsonFromText(raw);\n if (!jsonStr) {\n console.warn('[Gate 3.5] No JSON in response, using pre-filtered set');\n return [...new Set([...CORE_PATTERNS, ...preFiltered])];\n }\n\n const parsed = JSON.parse(jsonStr) as { patterns?: string[] };\n const selected = Array.isArray(parsed.patterns) ? parsed.patterns : [];\n\n // Validate: only allow patterns from pre-filtered set\n const preFilteredSet = new Set(preFiltered);\n const validated = selected.filter(p => preFilteredSet.has(p));\n\n // Merge with core patterns\n const result = [...new Set([...CORE_PATTERNS, ...validated])];\n\n // Cap at 20 (core + 14 selected)\n if (result.length > 20) {\n return [...CORE_PATTERNS, ...validated.slice(0, 14)];\n }\n\n if (result.length < 8) {\n console.warn(`[Gate 3.5] Only ${result.length} patterns, adding essentials`);\n const essentials = ['badge', 'stat-display', 'data-list', 'form-section', 'empty-state', 'card'];\n for (const p of essentials) {\n if (!result.includes(p) && preFilteredSet.has(p)) result.push(p);\n }\n }\n\n return result;\n } catch (error) {\n console.warn(`[Gate 3.5] Error: ${error instanceof Error ? error.message : error}, using pre-filtered set`);\n return [...new Set([...CORE_PATTERNS, ...preFiltered])];\n }\n}\n","/**\n * Gate 4: Render UI\n *\n * Appends render-ui effects to each transition.\n * One LLM call per transition.\n * Passes slot context (which states are modal vs main) to every call.\n *\n * @packageDocumentation\n */\n\nimport type { LLMClient } from '@almadar/llm';\nimport { extractJsonFromText } from '@almadar/llm';\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n Effect,\n StateMachine,\n} from '@almadar/core/types';\nimport type { GateOpts, BehaviorGateData } from './types.js';\nimport { buildGate4SystemPrompt, buildGate4UserPrompt, type SlotContext } from './prompts.js';\nimport { replaceTransition } from './merge.js';\n\n// ============================================================================\n// Slot Context Builder\n// ============================================================================\n\n/**\n * Build slot assignments from trait.ui (set by Gate 2).\n * Falls back to \"main\" for any state not in the ui map.\n */\nfunction buildSlotContext(\n sm: StateMachine,\n traitUi: Record<string, { presentation: string }> | undefined,\n): Record<string, 'main' | 'modal'> {\n const slots: Record<string, 'main' | 'modal'> = {};\n\n for (const state of sm.states) {\n const binding = traitUi?.[state.name];\n slots[state.name] = binding?.presentation === 'modal' ? 'modal' : 'main';\n }\n\n return slots;\n}\n\n// ============================================================================\n// Response Parsing\n// ============================================================================\n\ninterface RenderEffect {\n slot: string;\n tree: Record<string, unknown> | null;\n}\n\nfunction parseGate4Response(raw: string): RenderEffect[] {\n const parsed = extractJsonFromText(raw);\n if (!parsed) {\n console.warn('Gate 4: no JSON found in response, using fallback render-ui');\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n let obj: Record<string, unknown>;\n try {\n obj = JSON.parse(parsed) as Record<string, unknown>;\n } catch {\n console.warn(`Gate 4: malformed JSON, using fallback render-ui: ${parsed.slice(0, 100)}`);\n return [{ slot: 'main', tree: { type: 'typography', variant: 'body', content: 'Loading...' } }];\n }\n\n const renderEffectsRaw = Array.isArray(obj.renderEffects) ? obj.renderEffects : [];\n return renderEffectsRaw.map((r: Record<string, unknown>) => ({\n slot: String(r.slot || 'main'),\n tree: r.tree === null ? null : ((r.tree as Record<string, unknown>) || { type: 'typography', variant: 'body', content: 'Empty' }),\n }));\n}\n\n// ============================================================================\n// Gate Execution\n// ============================================================================\n\n/**\n * Append render-ui effects to all transitions.\n * Builds slot context from state machine and passes it to every LLM call.\n */\nexport async function runGate4(\n client: LLMClient,\n orb: OrbitalSchema,\n opts: GateOpts = {},\n _behaviorData?: BehaviorGateData,\n matchedPatterns?: string[],\n): Promise<OrbitalSchema> {\n const systemPrompt = buildGate4SystemPrompt(matchedPatterns);\n let result = orb;\n\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const entity = orbital.entity as Entity;\n\n for (const traitRef of orbital.traits) {\n if (typeof traitRef === 'string' || 'ref' in traitRef) continue;\n const trait = traitRef as Trait;\n if (!trait.stateMachine) continue;\n\n // Build slot assignments from trait.ui (populated by Gate 2)\n const traitUi = trait.ui as Record<string, { presentation: string }> | undefined;\n const stateSlots = buildSlotContext(trait.stateMachine, traitUi);\n\n for (const transition of trait.stateMachine.transitions) {\n const fromSlot = stateSlots[transition.from] || 'main';\n const toSlot = stateSlots[transition.to] || 'main';\n\n // Detect if this transition exits a modal (from=modal, to=main)\n const exitsModal = fromSlot === 'modal' && toSlot === 'main';\n\n const slotContext: SlotContext = { stateSlots, exitsModal };\n\n // Find guided render effects from golden .orb\n const guidedRenderEffects = findGuidedRenderEffects(\n opts.goldenOrb, trait.name, transition.from, transition.event,\n );\n\n const userPrompt = buildGate4UserPrompt(\n transition,\n entity,\n transition.to,\n trait.stateMachine,\n slotContext,\n guidedRenderEffects,\n );\n\n const raw = await client.callRaw({\n systemPrompt,\n userPrompt,\n maxTokens: (opts.maxTokens ?? 4096) * 2,\n });\n\n const renderEffects = parseGate4Response(raw);\n\n // Append render-ui effects to existing effects\n const existingEffects = [...(transition.effects || [])] as Effect[];\n for (const re of renderEffects) {\n existingEffects.push(['render-ui', re.slot, re.tree] as Effect);\n }\n\n // If exiting modal and LLM didn't include modal null, add it\n if (exitsModal) {\n const hasModalNull = existingEffects.some(\n (e) => Array.isArray(e) && e[0] === 'render-ui' && e[1] === 'modal' && e[2] === null,\n );\n if (!hasModalNull) {\n // Prepend modal null before the main render\n existingEffects.unshift(['render-ui', 'modal', null] as Effect);\n }\n }\n\n const enriched: Transition = {\n ...transition,\n effects: existingEffects,\n };\n\n result = replaceTransition(\n result, orbital.name, trait.name,\n transition.from, transition.event, enriched,\n );\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction findGuidedRenderEffects(\n goldenOrb: OrbitalSchema | undefined,\n traitName: string,\n from: string,\n event: string,\n): Array<{ slot: string; tree: Record<string, unknown> }> | undefined {\n if (!goldenOrb) return undefined;\n for (const orbital of goldenOrb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n if (t.name !== traitName) continue;\n const sm = (t as Trait).stateMachine;\n if (!sm) continue;\n const tr = sm.transitions.find(\n (tr) => tr.from === from && tr.event === event,\n );\n if (!tr?.effects) continue;\n const renderEffects: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of tr.effects) {\n if (Array.isArray(eff) && eff[0] === 'render-ui') {\n renderEffects.push({\n slot: String(eff[1] || 'main'),\n tree: (eff[2] as Record<string, unknown>) || {},\n });\n }\n }\n if (renderEffects.length > 0) return renderEffects;\n }\n }\n return undefined;\n}\n","/**\n * Orchestrator\n *\n * Simple chain: gate0 → gate1 → gate2 → gate3 → gate4 → validate.\n * Each gate accepts an OrbitalSchema and returns an enriched OrbitalSchema.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport {\n createAnthropicClient,\n createDeepSeekClient,\n createOpenRouterClient,\n type LLMClient,\n} from '@almadar/llm';\nimport { validateWithOrbitalCLI } from '../evals/utils/orbital-validate.js';\nimport type {\n GatePipelineConfig,\n GatePipelineResult,\n GateOpts,\n GateTimings,\n BehaviorGateData,\n VerifyResult,\n} from './types.js';\nimport type { OrbitalSchema } from '@almadar/core/types';\nimport { runGate0 } from './gate0-application.js';\nimport { runGate05 } from './gate05-behavior-match.js';\nimport { runGate1 } from './gate1-orbital.js';\nimport { runGate2 } from './gate2-trait.js';\nimport { runGate3 } from './gate3-transition.js';\nimport { runGate35 } from './gate35-pattern-match.js';\nimport { runGate4 } from './gate4-render-ui.js';\n\n// ============================================================================\n// Client Factory\n// ============================================================================\n\nfunction createClientForProvider(config: GatePipelineConfig): LLMClient {\n const opts = {\n ...(config.model ? { model: config.model } : {}),\n ...(config.temperature !== undefined ? { temperature: config.temperature } : {}),\n };\n\n let client: LLMClient;\n switch (config.provider) {\n case 'deepseek':\n client = createDeepSeekClient(opts);\n break;\n case 'zhipu':\n client = createOpenRouterClient({ model: 'z-ai/glm-4.7', ...opts });\n break;\n case 'qwen3.5':\n client = createOpenRouterClient({ model: 'qwen/qwen3.5-9b', ...opts });\n break;\n case 'gemma3-4b':\n client = createOpenRouterClient({ model: 'google/gemma-3-4b-it', ...opts });\n break;\n case 'mistral-small':\n client = createOpenRouterClient({ model: 'mistralai/mistral-small-3.1-24b-instruct', ...opts });\n break;\n case 'mistral-medium':\n client = createOpenRouterClient({ model: 'mistralai/mistral-medium-3.1', ...opts });\n break;\n case 'anthropic':\n client = createAnthropicClient(opts);\n break;\n default: {\n const _exhaustive: never = config.provider;\n throw new Error(`Unknown provider: ${_exhaustive}`);\n }\n }\n\n // Qwen3.5 burns all output tokens on reasoning unless thinking is disabled\n if (config.provider === 'qwen3.5') {\n const originalCallRaw = client.callRaw.bind(client);\n const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);\n client.callRaw = (opts) =>\n originalCallRaw({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n client.callRawWithMetadata = (opts) =>\n originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n }\n\n return client;\n}\n\n// ============================================================================\n// Timing Helper\n// ============================================================================\n\nfunction timeMs(): number {\n return performance.now();\n}\n\n// ============================================================================\n// LLM Call Counter\n// ============================================================================\n\n/**\n * Wraps an LLMClient in a Proxy to count callRaw invocations.\n * Call counter.reset() between gates to get per-gate counts.\n */\nfunction withCallCounter(client: LLMClient): LLMClient & { calls: number; reset: () => void } {\n let calls = 0;\n\n const proxy = new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === 'calls') return calls;\n if (prop === 'reset') return () => { calls = 0; };\n\n const value = Reflect.get(target, prop, receiver);\n if (prop === 'callRaw' || prop === 'callRawWithMetadata') {\n return (...args: unknown[]) => {\n calls++;\n return (value as (...a: unknown[]) => unknown).apply(target, args);\n };\n }\n return value;\n },\n });\n\n return proxy as LLMClient & { calls: number; reset: () => void };\n}\n\n// ============================================================================\n// Pipeline\n// ============================================================================\n\n/**\n * Run the full gated construction pipeline.\n *\n * Flow:\n * orb0 = gate0(prompt) → orb1 = gate1(orb0) → orb2 = gate2(orb1)\n * → orb3 = gate3(orb2) → orbFinal = gate4(orb3) → validate(orbFinal)\n */\nexport async function runGatePipeline(\n prompt: string,\n config: GatePipelineConfig,\n behaviorData?: BehaviorGateData,\n goldenOrb?: OrbitalSchema,\n): Promise<GatePipelineResult> {\n const counter = withCallCounter(createClientForProvider(config));\n const client = counter;\n const maxTokens = config.maxTokens || 4096;\n const pipelineStart = timeMs();\n\n const opts: GateOpts = {\n maxTokens,\n goldenOrb,\n workDir: config.workDir,\n };\n\n // ── Gate 0: prompt → shell .orb ──\n counter.reset();\n const g0Start = timeMs();\n const orbAfterGate0 = await runGate0(client, prompt, opts, behaviorData);\n const g0Ms = timeMs() - g0Start;\n const g0Calls = counter.calls;\n console.log(`[Gate 0] ${orbAfterGate0.name}: ${orbAfterGate0.orbitals.length} orbital(s) (${g0Ms.toFixed(0)}ms, ${g0Calls} LLM call(s))`);\n maybeValidate(config, orbAfterGate0, 0);\n\n // ── Gate 0.5: behavior matching (guided mode only) ──\n let g05Calls = 0;\n if (config.mode === 'guided' && !goldenOrb) {\n counter.reset();\n const g05Start = timeMs();\n const matchResult = await runGate05(client, prompt, orbAfterGate0, opts);\n const g05Ms = timeMs() - g05Start;\n g05Calls = counter.calls;\n if (matchResult.goldenOrb) {\n opts.goldenOrb = matchResult.goldenOrb;\n console.log(`[Gate 0.5] Matched: ${matchResult.matchedName} (${g05Ms.toFixed(0)}ms, ${g05Calls} LLM call(s))`);\n } else {\n console.log(`[Gate 0.5] No match, continuing in pure mode (${g05Ms.toFixed(0)}ms, ${g05Calls} LLM call(s))`);\n }\n }\n\n // ── Gate 1: enrich orbitals ──\n counter.reset();\n const g1Start = timeMs();\n const orbAfterGate1 = await runGate1(client, orbAfterGate0, opts, behaviorData);\n const g1Ms = timeMs() - g1Start;\n const g1Calls = counter.calls;\n console.log(`[Gate 1] Enriched ${orbAfterGate1.orbitals.length} orbital(s) (${g1Ms.toFixed(0)}ms, ${g1Calls} LLM call(s))`);\n maybeValidate(config, orbAfterGate1, 1);\n\n // ── Gate 2: fill state machines ──\n counter.reset();\n const g2Start = timeMs();\n const orbAfterGate2 = await runGate2(client, orbAfterGate1, opts, behaviorData);\n const g2Ms = timeMs() - g2Start;\n const g2Calls = counter.calls;\n console.log(`[Gate 2] State machines filled (${g2Ms.toFixed(0)}ms, ${g2Calls} LLM call(s))`);\n maybeValidate(config, orbAfterGate2, 2);\n\n // ── Gate 3: guards + effects ──\n counter.reset();\n const g3Start = timeMs();\n const orbAfterGate3 = await runGate3(client, orbAfterGate2, opts, behaviorData);\n const g3Ms = timeMs() - g3Start;\n const g3Calls = counter.calls;\n console.log(`[Gate 3] Guards + effects filled (${g3Ms.toFixed(0)}ms, ${g3Calls} LLM call(s))`);\n maybeValidate(config, orbAfterGate3, 3);\n\n // ── Gate 3.5: pattern matching ──\n counter.reset();\n const g35Start = timeMs();\n const matchedPatterns = await runGate35(client, orbAfterGate3, opts);\n const g35Ms = timeMs() - g35Start;\n const g35Calls = counter.calls;\n console.log(`[Gate 3.5] Matched ${matchedPatterns.length} patterns (${g35Ms.toFixed(0)}ms, ${g35Calls} LLM call(s))`);\n\n // ── Gate 4: render-ui (with filtered patterns) ──\n counter.reset();\n const g4Start = timeMs();\n const orbFinal = await runGate4(client, orbAfterGate3, opts, behaviorData, matchedPatterns);\n const g4Ms = timeMs() - g4Start;\n const g4Calls = counter.calls;\n console.log(`[Gate 4] Render-ui appended (${g4Ms.toFixed(0)}ms, ${g4Calls} LLM call(s))`);\n\n // ── Validate final .orb ──\n fs.mkdirSync(config.workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orbFinal, config.workDir);\n console.log(`[Validate] valid=${validation.valid}, errors=${(validation.errors || []).length}`);\n\n // ── Verify (compile + server + browser) ──\n let verify: VerifyResult | undefined;\n if (config.verify) {\n verify = await runVerify(orbFinal, config);\n }\n\n const totalMs = timeMs() - pipelineStart;\n const totalCalls = g0Calls + g05Calls + g1Calls + g2Calls + g3Calls + g35Calls + g4Calls;\n console.log(`[Pipeline] Total: ${(totalMs / 1000).toFixed(1)}s, ${totalCalls} LLM calls`);\n\n const timings: GateTimings = {\n gate0Ms: g0Ms,\n gate1Ms: [g1Ms],\n gate2Ms: [g2Ms],\n gate3Ms: [g3Ms],\n gate35Ms: g35Ms,\n gate4Ms: [g4Ms],\n totalMs,\n };\n\n return {\n config,\n orbAfterGate0,\n orbAfterGate1,\n orbAfterGate2,\n orbAfterGate3,\n orbFinal,\n validation: {\n valid: validation.valid ?? false,\n errors: validation.errors ?? [],\n },\n verify,\n timings,\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\n// ============================================================================\n// Orbital Verify (Compile + Server + Browser)\n// ============================================================================\n\nasync function runVerify(\n orb: OrbitalSchema,\n config: GatePipelineConfig,\n): Promise<VerifyResult> {\n const tmpDir = path.join(config.workDir, 'gate-verify');\n fs.mkdirSync(tmpDir, { recursive: true });\n const orbPath = path.join(tmpDir, `${orb.name || 'generated'}.orb`);\n fs.writeFileSync(orbPath, JSON.stringify(orb, null, 2));\n\n // Dynamic import to avoid rootDir constraint (tool lives outside this package)\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as { verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{ phase: number; name: string; passed: number; failed: number; checks: Array<{ label: string; passed: boolean; detail?: string }> }>;\n }> };\n\n console.log(`[Verify] Starting orbital-verify on ${orbPath}`);\n const result = await verifyApp({\n orbPath,\n headed: config.verifyHeaded ?? false,\n screenshots: config.verifyScreenshots ?? false,\n });\n\n console.log(\n `[Verify] ${result.totalPassed}/${result.totalChecks} passed, ` +\n `${result.totalFailed} failed` +\n (result.coverage ? `, coverage=${(result.coverage.ratio * 100).toFixed(0)}%` : ''),\n );\n\n return {\n totalPassed: result.totalPassed,\n totalFailed: result.totalFailed,\n totalChecks: result.totalChecks,\n coverage: result.coverage ? {\n ratio: result.coverage.ratio,\n coveredItems: result.coverage.coveredItems,\n totalItems: result.coverage.totalItems,\n } : undefined,\n phases: result.phases.map((p) => ({\n phase: p.phase,\n name: p.name,\n passed: p.passed,\n failed: p.failed,\n checks: p.checks,\n })),\n };\n}\n\n// ============================================================================\n// Optional Per-Gate Validation\n// ============================================================================\n\nfunction maybeValidate(\n config: GatePipelineConfig,\n orb: OrbitalSchema,\n gate: number,\n): void {\n if (!config.validateAfterEachGate) return;\n\n const result = validateWithOrbitalCLI(orb, config.workDir);\n if (!result.valid) {\n console.warn(\n `[Gate ${gate} validate] ${result.errors.length} error(s): ` +\n result.errors.slice(0, 3).map((e) => e.message).join('; '),\n );\n }\n}\n","/**\n * Behavior Extract\n *\n * Extract per-gate slices from BehaviorSchema for guided mode.\n * Each function extracts the data a specific gate needs from the golden behavior.\n *\n * @packageDocumentation\n */\n\nimport type { BehaviorSchema } from '@almadar/std/behaviors/types';\nimport type { BehaviorGateData } from './types.js';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction asArray<T>(val: T | T[] | undefined): T[] {\n if (!val) return [];\n return Array.isArray(val) ? val : [val];\n}\n\nfunction getOrbitals(behavior: BehaviorSchema): Record<string, unknown>[] {\n return asArray(behavior.orbitals);\n}\n\nfunction getTraitsFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.traits as Record<string, unknown>[] | undefined);\n}\n\nfunction getStateMachine(trait: Record<string, unknown>): Record<string, unknown> | null {\n return (trait.stateMachine as Record<string, unknown>) || null;\n}\n\nfunction getStates(sm: Record<string, unknown>): Array<{ name: string }> {\n const states = asArray(sm.states as Record<string, unknown>[] | undefined);\n return states.map((s) => ({ name: String(s.name || '') }));\n}\n\nfunction getEvents(sm: Record<string, unknown>): Array<{ key: string }> {\n const events = asArray(sm.events as Record<string, unknown>[] | undefined);\n return events.map((e) => ({ key: String(e.key || '') }));\n}\n\ninterface RawTransition {\n from: string;\n event: string;\n to: string;\n guard?: unknown[];\n effects?: unknown[];\n}\n\nfunction getTransitions(sm: Record<string, unknown>): RawTransition[] {\n const transitions = asArray(sm.transitions as Record<string, unknown>[] | undefined);\n return transitions.map((t) => ({\n from: String(t.from || ''),\n event: String(t.event || ''),\n to: String(t.to || ''),\n guard: t.guard as unknown[] | undefined,\n effects: asArray(t.effects as unknown[] | undefined),\n }));\n}\n\nfunction getPagesFromOrbital(orbital: Record<string, unknown>): Record<string, unknown>[] {\n return asArray(orbital.pages as Record<string, unknown>[] | undefined);\n}\n\n// ============================================================================\n// Effect Classification\n// ============================================================================\n\nfunction isRenderUiEffect(effect: unknown): boolean {\n return Array.isArray(effect) && effect[0] === 'render-ui';\n}\n\nfunction extractRenderEffects(effects: unknown[]): Array<{ slot: string; tree: Record<string, unknown> }> {\n const results: Array<{ slot: string; tree: Record<string, unknown> }> = [];\n for (const eff of effects) {\n if (isRenderUiEffect(eff)) {\n const arr = eff as unknown[];\n const slot = String(arr[1] || 'main');\n const tree = (arr[2] as Record<string, unknown>) || {};\n results.push({ slot, tree });\n }\n }\n return results;\n}\n\nfunction extractNonRenderEffects(effects: unknown[]): unknown[] {\n return effects.filter((eff) => !isRenderUiEffect(eff));\n}\n\n// ============================================================================\n// Full Extraction\n// ============================================================================\n\n/**\n * Extract all gate-level slices from a BehaviorSchema.\n * Returns structured data that each gate can consume in guided mode.\n */\nexport function extractBehaviorGateData(behavior: BehaviorSchema): BehaviorGateData {\n const orbitals = getOrbitals(behavior);\n\n // App level\n const entityNames: string[] = [];\n const traitNames: string[] = [];\n\n for (const orbital of orbitals) {\n const entity = orbital.entity as Record<string, unknown> | undefined;\n if (entity?.name) entityNames.push(String(entity.name));\n\n for (const trait of getTraitsFromOrbital(orbital)) {\n if (trait.name) traitNames.push(String(trait.name));\n }\n }\n\n const appLevel = {\n orbitalCount: orbitals.length,\n entityNames,\n traitNames,\n };\n\n // Orbital levels\n const orbitalLevels = orbitals.map((orbital) => {\n const entity = (orbital.entity as Record<string, unknown>) || {};\n const traits = getTraitsFromOrbital(orbital);\n const pages = getPagesFromOrbital(orbital);\n\n return {\n orbitalName: String(orbital.name || ''),\n entity,\n traitNames: traits.map((t) => String(t.name || '')),\n pages,\n };\n });\n\n // Trait levels\n const traitLevels: BehaviorGateData['traitLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n const states = getStates(sm);\n const events = getEvents(sm);\n const transitions = getTransitions(sm);\n\n traitLevels.push({\n traitName: String(trait.name || ''),\n states: states.map((s) => s.name),\n events: events.map((e) => e.key),\n transitionEdges: transitions.map((t) => ({\n from: t.from,\n event: t.event,\n to: t.to,\n })),\n });\n }\n }\n\n // Transition levels (non-render-ui effects)\n const transitionLevels: BehaviorGateData['transitionLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n transitionLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n guard: transition.guard || null,\n nonRenderEffects: extractNonRenderEffects(effects),\n });\n }\n }\n }\n\n // Render UI levels\n const renderUiLevels: BehaviorGateData['renderUiLevels'] = [];\n for (const orbital of orbitals) {\n for (const trait of getTraitsFromOrbital(orbital)) {\n const sm = getStateMachine(trait);\n if (!sm) continue;\n\n for (const transition of getTransitions(sm)) {\n const effects = transition.effects || [];\n const renderEffects = extractRenderEffects(effects);\n if (renderEffects.length > 0) {\n renderUiLevels.push({\n from: transition.from,\n event: transition.event,\n to: transition.to,\n renderEffects,\n });\n }\n }\n }\n }\n\n return {\n appLevel,\n orbitalLevels,\n traitLevels,\n transitionLevels,\n renderUiLevels,\n };\n}\n\n/**\n * Get gate-specific slice for a particular trait from extracted data.\n */\nexport function getTraitGateData(\n data: BehaviorGateData,\n traitName: string,\n): BehaviorGateData['traitLevels'][0] | undefined {\n return data.traitLevels.find((t) => t.traitName === traitName);\n}\n\n/**\n * Get gate-specific slice for a particular transition from extracted data.\n */\nexport function getTransitionGateData(\n data: BehaviorGateData,\n from: string,\n event: string,\n): {\n transition: BehaviorGateData['transitionLevels'][0] | undefined;\n renderUi: BehaviorGateData['renderUiLevels'][0] | undefined;\n} {\n return {\n transition: data.transitionLevels.find((t) => t.from === from && t.event === event),\n renderUi: data.renderUiLevels.find((t) => t.from === from && t.event === event),\n };\n}\n","/**\n * Scoring\n *\n * Set-based metrics for evaluating gate outputs against golden behaviors.\n * Jaccard similarity, symmetric difference, coverage ratios.\n * All O(n) and directionally correct.\n *\n * Now accepts OrbitalSchema and extracts gate-relevant sections.\n *\n * @packageDocumentation\n */\n\nimport type {\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n Transition,\n} from '@almadar/core/types';\nimport type {\n GateScore,\n PipelineScore,\n GateProvider,\n GateMode,\n BehaviorGateData,\n} from './types.js';\n\n// ============================================================================\n// Set Utilities\n// ============================================================================\n\nfunction jaccard(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const intersection = new Set([...a].filter((x) => b.has(x)));\n const union = new Set([...a, ...b]);\n return intersection.size / union.size;\n}\n\nfunction symmetricDifferenceNormalized(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n const symDiff = new Set([\n ...[...a].filter((x) => !b.has(x)),\n ...[...b].filter((x) => !a.has(x)),\n ]);\n const union = new Set([...a, ...b]);\n return 1 - symDiff.size / union.size;\n}\n\nfunction coverageRatio(produced: Set<string>, golden: Set<string>): number {\n if (golden.size === 0) return 1;\n const covered = [...golden].filter((x) => produced.has(x));\n return covered.length / golden.size;\n}\n\n// ============================================================================\n// Gate 0 Scoring\n// ============================================================================\n\n/**\n * Score Gate 0 output (shell .orb) against golden behavior data.\n * - Orbital count match (exact = 1.0, off by 1 = 0.5, more = 0.0)\n * - Entity name Jaccard similarity\n */\nexport function scoreGate0(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n const countDiff = Math.abs(orbitals.length - golden.appLevel.orbitalCount);\n const countScore = countDiff === 0 ? 1.0 : countDiff === 1 ? 0.5 : 0.0;\n\n const producedEntities = new Set(\n orbitals.map((o) => String((o.entity as Entity).name).toLowerCase()),\n );\n const goldenEntities = new Set(golden.appLevel.entityNames.map((n) => n.toLowerCase()));\n const entityJaccard = jaccard(producedEntities, goldenEntities);\n\n const score = countScore * 0.4 + entityJaccard * 0.6;\n\n return {\n gate: 0,\n score,\n details: { countScore, entityJaccard },\n };\n}\n\n// ============================================================================\n// Gate 1 Scoring\n// ============================================================================\n\n/**\n * Score Gate 1 output (enriched orbitals) against golden behavior data.\n * Scores the first orbital's entity fields and persistence.\n */\nexport function scoreGate1(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const orbitals = orb.orbitals as OrbitalDefinition[];\n if (orbitals.length === 0) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n // Score first orbital (or find matching)\n const goldenOrbital = golden.orbitalLevels[0];\n if (!goldenOrbital) {\n return { gate: 1, score: 0, details: { fieldJaccard: 0, persistenceMatch: 0 } };\n }\n\n const entity = orbitals[0].entity as Entity;\n\n // Field name Jaccard\n const producedFields = new Set(entity.fields.map((f) => f.name.toLowerCase()));\n const goldenEntity = goldenOrbital.entity;\n const goldenFields = new Set(\n Array.isArray(goldenEntity.fields)\n ? (goldenEntity.fields as Array<{ name: string }>).map((f) => f.name.toLowerCase())\n : [],\n );\n const fieldJaccard = jaccard(producedFields, goldenFields);\n\n // Persistence match\n const goldenPersistence = String(goldenEntity.persistence || 'runtime');\n const persistenceMatch = entity.persistence === goldenPersistence ? 1.0 : 0.0;\n\n const score = fieldJaccard * 0.7 + persistenceMatch * 0.3;\n\n return {\n gate: 1,\n score,\n details: { fieldJaccard, persistenceMatch },\n };\n}\n\n// ============================================================================\n// Gate 2 Scoring\n// ============================================================================\n\n/**\n * Score Gate 2 output (state machines) against golden behavior data.\n * Scores state set similarity and event key Jaccard across all traits.\n */\nexport function scoreGate2(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const traits = extractAllTraits(orb);\n if (traits.length === 0 || golden.traitLevels.length === 0) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n // Score first trait with state machine\n const trait = traits.find((t) => t.stateMachine) || traits[0];\n const goldenTrait = golden.traitLevels.find(\n (t) => t.traitName.toLowerCase() === trait.name.toLowerCase(),\n ) || golden.traitLevels[0];\n\n if (!goldenTrait || !trait.stateMachine) {\n return { gate: 2, score: 0, details: { stateSymDiff: 0, eventJaccard: 0 } };\n }\n\n const producedStates = new Set(trait.stateMachine.states.map((s) => s.name.toLowerCase()));\n const goldenStates = new Set(goldenTrait.states.map((s) => s.toLowerCase()));\n const stateSymDiff = symmetricDifferenceNormalized(producedStates, goldenStates);\n\n const producedEvents = new Set(trait.stateMachine.events.map((e) => e.key));\n const goldenEvents = new Set(goldenTrait.events);\n const eventJaccard = jaccard(producedEvents, goldenEvents);\n\n const score = stateSymDiff * 0.5 + eventJaccard * 0.5;\n\n return {\n gate: 2,\n score,\n details: { stateSymDiff, eventJaccard },\n };\n}\n\n// ============================================================================\n// Gate 3 Scoring\n// ============================================================================\n\n/**\n * Score Gate 3 output (guards + effects) against golden behavior data.\n * Averages across all transitions.\n */\nexport function scoreGate3(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0) {\n return { gate: 3, score: 0.5, details: { effectCoverage: 0.5, guardMatch: 0.5 } };\n }\n\n let totalEffectCoverage = 0;\n let totalGuardMatch = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenTransition = golden.transitionLevels.find(\n (t) => t.from === transition.from && t.event === transition.event,\n );\n\n if (!goldenTransition) {\n totalEffectCoverage += 0.5;\n totalGuardMatch += 0.5;\n count++;\n continue;\n }\n\n // Effect type coverage\n const producedTypes = new Set(\n (transition.effects || [])\n .filter((e) => Array.isArray(e))\n .map((e) => String((e as unknown[])[0]))\n .filter((t) => t !== 'render-ui'),\n );\n const goldenTypes = new Set(\n goldenTransition.nonRenderEffects\n .filter((e): e is unknown[] => Array.isArray(e))\n .map((e) => String(e[0])),\n );\n totalEffectCoverage += coverageRatio(producedTypes, goldenTypes);\n\n // Guard presence match\n const hasGuard = !!transition.guard;\n const goldenHasGuard = !!goldenTransition.guard;\n totalGuardMatch += hasGuard === goldenHasGuard ? 1.0 : 0.0;\n count++;\n }\n\n const effectCoverage = count > 0 ? totalEffectCoverage / count : 0.5;\n const guardMatch = count > 0 ? totalGuardMatch / count : 0.5;\n const score = effectCoverage * 0.7 + guardMatch * 0.3;\n\n return {\n gate: 3,\n score,\n details: { effectCoverage, guardMatch },\n };\n}\n\n// ============================================================================\n// Gate 4 Scoring\n// ============================================================================\n\n/**\n * Score Gate 4 output (render-ui effects) against golden behavior data.\n * Pattern type recall and tree node count ratio.\n */\nexport function scoreGate4(orb: OrbitalSchema, golden: BehaviorGateData): GateScore {\n const transitions = extractAllTransitions(orb);\n if (transitions.length === 0 || golden.renderUiLevels.length === 0) {\n return { gate: 4, score: 0.5, details: { typeRecall: 0.5, nodeRatio: 0.5 } };\n }\n\n let totalTypeRecall = 0;\n let totalNodeRatio = 0;\n let count = 0;\n\n for (const transition of transitions) {\n const goldenRender = golden.renderUiLevels.find(\n (r) => r.from === transition.from && r.event === transition.event,\n );\n\n if (!goldenRender) continue;\n\n // Collect render-ui effects from this transition\n const renderEffects = (transition.effects || [])\n .filter((e) => Array.isArray(e) && (e as unknown[])[0] === 'render-ui')\n .map((e) => {\n const arr = e as unknown[];\n return { slot: String(arr[1]), tree: (arr[2] as Record<string, unknown>) || {} };\n });\n\n // Collect pattern types\n const producedTypes = new Set<string>();\n let producedNodes = 0;\n for (const re of renderEffects) {\n for (const t of collectTypes(re.tree)) producedTypes.add(t);\n producedNodes += countNodes(re.tree);\n }\n\n const goldenTypes = new Set<string>();\n let goldenNodes = 0;\n for (const re of goldenRender.renderEffects) {\n for (const t of collectTypes(re.tree)) goldenTypes.add(t);\n goldenNodes += countNodes(re.tree);\n }\n\n totalTypeRecall += coverageRatio(producedTypes, goldenTypes);\n totalNodeRatio += goldenNodes > 0\n ? Math.min(producedNodes / goldenNodes, goldenNodes / Math.max(producedNodes, 1))\n : (producedNodes === 0 ? 1 : 0);\n count++;\n }\n\n const typeRecall = count > 0 ? totalTypeRecall / count : 0.5;\n const nodeRatio = count > 0 ? totalNodeRatio / count : 0.5;\n const score = typeRecall * 0.6 + nodeRatio * 0.4;\n\n return {\n gate: 4,\n score,\n details: { typeRecall, nodeRatio },\n };\n}\n\n// ============================================================================\n// Overall Pipeline Score\n// ============================================================================\n\nconst GATE_WEIGHTS = [0.10, 0.15, 0.25, 0.20, 0.30] as const;\n\n/**\n * Compute weighted overall score from individual gate scores.\n */\nexport function scoreOverall(\n gateScores: GateScore[],\n provider: GateProvider,\n mode: GateMode,\n behaviorName: string,\n): PipelineScore {\n let overall = 0;\n for (const gs of gateScores) {\n const weight = GATE_WEIGHTS[gs.gate] ?? 0;\n overall += gs.score * weight;\n }\n\n return {\n overall,\n gates: gateScores,\n provider,\n mode,\n behaviorName,\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction extractAllTraits(orb: OrbitalSchema): Trait[] {\n const traits: Trait[] = [];\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n for (const t of orbital.traits) {\n if (typeof t === 'string' || 'ref' in t) continue;\n traits.push(t as Trait);\n }\n }\n return traits;\n}\n\nfunction extractAllTransitions(orb: OrbitalSchema): Transition[] {\n const transitions: Transition[] = [];\n for (const trait of extractAllTraits(orb)) {\n if (!trait.stateMachine) continue;\n transitions.push(...trait.stateMachine.transitions);\n }\n return transitions;\n}\n\nfunction collectTypes(tree: Record<string, unknown>): Set<string> {\n const types = new Set<string>();\n if (tree.type) types.add(String(tree.type));\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) {\n for (const t of collectTypes(child)) types.add(t);\n }\n }\n return types;\n}\n\nfunction countNodes(tree: Record<string, unknown>): number {\n let count = 1;\n const children = tree.children as Record<string, unknown>[] | undefined;\n if (Array.isArray(children)) {\n for (const child of children) count += countNodes(child);\n }\n return count;\n}\n","/**\n * Agentic Gate Tools\n *\n * LangGraph-compatible tools that wrap the gate pipeline for use\n * by a Claude main agent. Each tool is a scoped operation:\n *\n * - decompose_app: break prompt into orbital plan (Gate 0 subagent)\n * - match_behavior: find golden behavior (Gate 0.5 subagent)\n * - build_orbital: run gate pipeline on one orbital (Gates 1-4, DeepSeek)\n * - verify_app: run orbital-verify (deterministic)\n *\n * The main agent (Claude) decides what to call, reads results, iterates.\n * The gate subagents (DeepSeek) do the scoped generation.\n *\n * @packageDocumentation\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { tool } from '@langchain/core/tools';\nimport { z } from 'zod';\nimport { createDeepSeekClient, createOpenRouterClient, type LLMClient } from '@almadar/llm';\nimport { loadGoldenOrb } from '@almadar/std';\nimport * as stdBehaviorFunctions from '@almadar/std/behaviors/functions';\nimport type { OrbitalSchema, OrbitalDefinition } from '@almadar/core/types';\nimport { composeBehaviors, type LayoutStrategy } from '@almadar/core/builders';\nimport type { EventWiringEntry } from '@almadar/core/builders';\nimport { runGate0 } from '../gate0-application.js';\nimport { runGate05, loadGoldenOrbByName } from '../gate05-behavior-match.js';\nimport { runGate1 } from '../gate1-orbital.js';\nimport { runGate2 } from '../gate2-trait.js';\nimport { runGate3 } from '../gate3-transition.js';\nimport { runGate4 } from '../gate4-render-ui.js';\nimport { validateWithOrbitalCLI } from '../../evals/utils/orbital-validate.js';\nimport type { GateOpts } from '../types.js';\n\n// ============================================================================\n// Gate client factory\n// ============================================================================\n\nexport type GateClientProvider = 'deepseek' | 'qwen3.5' | 'gemma3-4b' | 'mistral-small' | 'mistral-medium';\n\nfunction createGateClient(provider: GateClientProvider = 'mistral-small'): LLMClient {\n let client: LLMClient;\n switch (provider) {\n case 'qwen3.5':\n client = createOpenRouterClient({ model: 'qwen/qwen3.5-9b' });\n break;\n case 'gemma3-4b':\n client = createOpenRouterClient({ model: 'google/gemma-3-4b-it' });\n break;\n case 'mistral-small':\n client = createOpenRouterClient({ model: 'mistralai/mistral-small-3.1-24b-instruct' });\n break;\n case 'mistral-medium':\n client = createOpenRouterClient({ model: 'mistralai/mistral-medium-3.1' });\n break;\n case 'deepseek':\n default:\n client = createDeepSeekClient();\n break;\n }\n\n // Qwen3.5 burns all output tokens on reasoning unless thinking is disabled\n if (provider === 'qwen3.5') {\n const originalCallRaw = client.callRaw.bind(client);\n const originalCallRawWithMetadata = client.callRawWithMetadata.bind(client);\n client.callRaw = (opts) =>\n originalCallRaw({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n client.callRawWithMetadata = (opts) =>\n originalCallRawWithMetadata({ ...opts, userPrompt: `/no_think\\n${opts.userPrompt}` });\n }\n\n return client;\n}\n\n// ============================================================================\n// decompose_app\n// ============================================================================\n\nexport function createDecomposeAppTool(gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n const orb = await runGate0(client, input.prompt);\n\n return {\n appName: orb.name,\n orbitals: (orb.orbitals as OrbitalDefinition[]).map((o) => ({\n name: o.name,\n entityName: (o.entity as { name: string }).name,\n traitNames: o.traits\n .filter((t): t is { name: string } => typeof t !== 'string' && !('ref' in t))\n .map((t) => t.name),\n pageCount: o.pages?.length ?? 0,\n })),\n shellOrb: orb,\n };\n },\n {\n name: 'decompose_app',\n description: 'Decompose a natural language prompt into an orbital plan. Returns the app name, orbital list with entity names, and a shell .orb schema.',\n schema: z.object({\n prompt: z.string().describe('Natural language application description'),\n }),\n },\n );\n}\n\n// ============================================================================\n// match_behavior\n// ============================================================================\n\nexport function createMatchBehaviorTool(gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n // Create a minimal orb for the match call\n const shellOrb: OrbitalSchema = {\n name: 'App',\n orbitals: [{\n name: input.orbitalName,\n entity: { name: input.entityName, fields: [{ name: 'id', type: 'string' }] },\n traits: [],\n pages: [],\n }] as unknown as OrbitalSchema['orbitals'],\n };\n\n const result = await runGate05(client, input.description, shellOrb);\n return {\n matched: result.matchedName !== null,\n behaviorName: result.matchedName,\n hasGoldenOrb: result.goldenOrb !== null,\n };\n },\n {\n name: 'match_behavior',\n description: 'Find the best matching golden behavior from 107 standard behaviors. Returns the match name and whether a golden .orb reference was loaded.',\n schema: z.object({\n description: z.string().describe('Description of the orbital to match'),\n orbitalName: z.string().describe('Name of the orbital'),\n entityName: z.string().describe('Name of the entity'),\n }),\n },\n );\n}\n\n// ============================================================================\n// build_orbital\n// ============================================================================\n\nexport function createBuildOrbitalTool(workDir: string, gateProvider?: GateClientProvider) {\n return tool(\n async (input) => {\n const client = createGateClient(gateProvider);\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n\n // Parse the shell orbital\n let shellOrb: OrbitalSchema;\n try {\n shellOrb = JSON.parse(input.shellOrb) as OrbitalSchema;\n } catch {\n return { success: false, error: 'Invalid shellOrb JSON' };\n }\n\n // Load golden orb if behavior was matched\n let goldenOrb: OrbitalSchema | undefined;\n if (input.goldenBehavior) {\n goldenOrb = loadGoldenOrbByName(input.goldenBehavior) ?? undefined;\n }\n\n const opts: GateOpts = {\n goldenOrb,\n };\n\n // Add feedback to opts if provided (for retry)\n const feedback = input.feedback;\n\n try {\n // Gate 1: entity\n console.log(`[build_orbital] Gate 1: enriching entity for ${input.orbitalName}`);\n let orb = await runGate1(client, shellOrb, opts);\n\n // Gate 2: state machine\n console.log(`[build_orbital] Gate 2: filling state machines`);\n orb = await runGate2(client, orb, opts);\n\n // Gate 3: effects\n console.log(`[build_orbital] Gate 3: adding effects`);\n orb = await runGate3(client, orb, opts);\n\n // Gate 4: render-ui\n console.log(`[build_orbital] Gate 4: adding render-ui`);\n orb = await runGate4(client, orb, opts);\n\n // Write each orbital to .orbitals/ for finish_task\n for (const orbital of orb.orbitals as OrbitalDefinition[]) {\n const safeName = orbital.name.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(orbital, null, 2));\n console.log(`[build_orbital] Written: ${orbitalPath}`);\n }\n\n // Quick validate\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(orb, workDir);\n\n return {\n success: true,\n orbitalName: input.orbitalName,\n orbitalsWritten: (orb.orbitals as OrbitalDefinition[]).length,\n validation: {\n valid: validation.valid,\n errorCount: validation.errors?.length ?? 0,\n errors: (validation.errors ?? []).slice(0, 5).map((e) => e.message),\n },\n };\n } catch (error) {\n return {\n success: false,\n orbitalName: input.orbitalName,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n },\n {\n name: 'build_orbital',\n description: 'Build one orbital by running the gate pipeline (entity -> state machine -> effects -> render-ui). Writes the result to .orbitals/ for finish_task to collect. Optionally takes a golden behavior name for guided mode and feedback for retry.',\n schema: z.object({\n orbitalName: z.string().describe('Name of the orbital to build'),\n shellOrb: z.string().describe('JSON string of the shell OrbitalSchema from decompose_app'),\n goldenBehavior: z.string().optional().describe('Golden behavior name from match_behavior (e.g. \"std-cart\")'),\n feedback: z.string().optional().describe('Feedback from a failed verify_app to guide the rebuild'),\n }),\n },\n );\n}\n\n// ============================================================================\n// verify_app\n// ============================================================================\n\nexport function createVerifyAppTool(workDir: string) {\n return tool(\n async (input) => {\n const orbPath = input.orbPath || path.join(workDir, 'schema.orb');\n\n if (!fs.existsSync(orbPath)) {\n return { success: false, error: `Schema file not found: ${orbPath}` };\n }\n\n try {\n // Dynamic import to avoid rootDir constraint\n const verifyApiPath = path.resolve(\n path.dirname(new URL(import.meta.url).pathname),\n '../../../../../tools/orbital-verify-unified/src/api.js',\n );\n const { verifyApp } = await import(verifyApiPath) as {\n verifyApp: (opts: Record<string, unknown>) => Promise<{\n totalPassed: number;\n totalFailed: number;\n totalChecks: number;\n coverage?: { ratio: number; coveredItems: number; totalItems: number };\n phases: Array<{\n phase: number;\n name: string;\n passed: number;\n failed: number;\n checks: Array<{ label: string; passed: boolean; detail?: string }>;\n }>;\n }>;\n };\n\n const result = await verifyApp({\n orbPath,\n headed: true,\n screenshots: true,\n });\n\n // Collect failure details for the agent to read\n const failures: string[] = [];\n for (const phase of result.phases) {\n for (const check of phase.checks) {\n if (!check.passed) {\n failures.push(`[Phase ${phase.phase} ${phase.name}] ${check.label}: ${check.detail || 'failed'}`);\n }\n }\n }\n\n return {\n success: result.totalFailed === 0,\n passed: result.totalPassed,\n failed: result.totalFailed,\n total: result.totalChecks,\n coverage: result.coverage?.ratio ?? null,\n failures: failures.slice(0, 10),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n passed: 0,\n failed: 1,\n total: 1,\n coverage: null,\n failures: [error instanceof Error ? error.message : String(error)],\n };\n }\n },\n {\n name: 'verify_app',\n description: 'Run orbital-verify on a compiled .orb schema. Compiles the app, runs server tests, browser tests, and captures screenshots. Returns pass/fail counts and failure details.',\n schema: z.object({\n orbPath: z.string().optional().describe('Path to .orb file. Defaults to {workDir}/schema.orb'),\n }),\n },\n );\n}\n\n// ============================================================================\n// use-behavior (Phase 3)\n// ============================================================================\n\n/**\n * Behavior function registry.\n * Maps behavior names to their pure function + params builder.\n * When a function exists, use-behavior calls it directly (no substitution).\n */\nconst BEHAVIOR_FUNCTIONS: Record<string, (params: Record<string, unknown>) => OrbitalDefinition> = {};\n\nfunction loadBehaviorFunctions(): void {\n if (Object.keys(BEHAVIOR_FUNCTIONS).length > 0) return;\n try {\n const fns = stdBehaviorFunctions as Record<string, unknown>;\n const mapping: Record<string, string> = {\n // Molecules: CRUD/Data\n 'std-list': 'stdList', 'std-cart': 'stdCart', 'std-detail': 'stdDetail',\n 'std-inventory': 'stdInventory', 'std-messaging': 'stdMessaging', 'std-geospatial': 'stdGeospatial',\n // Atoms: UI\n 'std-browse': 'stdBrowse', 'std-modal': 'stdModal', 'std-confirmation': 'stdConfirmation',\n 'std-search': 'stdSearch', 'std-filter': 'stdFilter', 'std-sort': 'stdSort',\n 'std-pagination': 'stdPagination', 'std-drawer': 'stdDrawer', 'std-notification': 'stdNotification',\n 'std-timer': 'stdTimer', 'std-tabs': 'stdTabs', 'std-loading': 'stdLoading',\n 'std-selection': 'stdSelection', 'std-undo': 'stdUndo', 'std-input': 'stdInput',\n // Atoms: Domain\n 'std-wizard': 'stdWizard', 'std-display': 'stdDisplay', 'std-async': 'stdAsync',\n 'std-combat': 'stdCombat', 'std-gameflow': 'stdGameflow', 'std-movement': 'stdMovement',\n 'std-quest': 'stdQuest', 'std-overworld': 'stdOverworld',\n 'std-circuit-breaker': 'stdCircuitBreaker', 'std-cache-aside': 'stdCacheAside',\n 'std-score': 'stdScore', 'std-collision': 'stdCollision', 'std-physics2d': 'stdPhysics2d',\n 'std-rate-limiter': 'stdRateLimiter',\n // Atoms: Game UI\n 'std-game-hud': 'stdGameHud', 'std-score-board': 'stdScoreBoard',\n 'std-game-menu': 'stdGameMenu', 'std-game-over-screen': 'stdGameOverScreen',\n 'std-dialogue-box': 'stdDialogueBox', 'std-inventory-panel': 'stdInventoryPanel',\n 'std-combat-log': 'stdCombatLog', 'std-sprite': 'stdSprite', 'std-game-audio': 'stdGameAudio',\n // Atoms: Game Canvas\n 'std-isometric-canvas': 'stdIsometricCanvas', 'std-platformer-canvas': 'stdPlatformerCanvas',\n 'std-simulation-canvas': 'stdSimulationCanvas',\n 'std-game-canvas-2d': 'stdGameCanvas2d', 'std-game-canvas-3d': 'stdGameCanvas3d',\n // Molecules: Game\n 'std-turn-based-battle': 'stdTurnBasedBattle', 'std-platformer-game': 'stdPlatformerGame',\n 'std-puzzle-game': 'stdPuzzleGame',\n // Molecules: Educational\n 'std-builder-game': 'stdBuilderGame', 'std-classifier-game': 'stdClassifierGame',\n 'std-sequencer-game': 'stdSequencerGame', 'std-debugger-game': 'stdDebuggerGame',\n 'std-negotiator-game': 'stdNegotiatorGame', 'std-simulator-game': 'stdSimulatorGame',\n 'std-event-handler-game': 'stdEventHandlerGame',\n };\n for (const [behaviorName, fnName] of Object.entries(mapping)) {\n if (typeof fns[fnName] === 'function') {\n BEHAVIOR_FUNCTIONS[behaviorName] = fns[fnName] as (params: Record<string, unknown>) => OrbitalDefinition;\n }\n }\n } catch { /* functions not available, fall back to substitution */ }\n}\n\nexport function createUseBehaviorTool(workDir: string) {\n return tool(\n async (input) => {\n loadBehaviorFunctions();\n const newEntityName = input.entityName;\n const newFields = JSON.parse(input.fieldsJson) as Array<{ name: string; type: string; required?: boolean; default?: unknown }>;\n\n let finalOrbital: Record<string, unknown>;\n\n // Try function-based approach first\n const behaviorFn = BEHAVIOR_FUNCTIONS[input.behaviorName];\n if (behaviorFn) {\n console.log(`[use_behavior] Calling ${input.behaviorName} as pure function`);\n const orbital = behaviorFn({\n entityName: newEntityName,\n fields: newFields,\n persistence: input.persistence ?? 'runtime',\n pageTitle: input.title,\n createButtonLabel: input.createButtonLabel,\n pageName: input.pageName,\n pagePath: input.pagePath,\n isInitial: input.isInitialPage,\n });\n finalOrbital = orbital as unknown as Record<string, unknown>;\n } else {\n // Fallback: load golden .orb and substitute\n console.log(`[use_behavior] Falling back to substitution for ${input.behaviorName}`);\n const behavior = loadGoldenOrb(input.behaviorName);\n if (!behavior) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" not found` };\n }\n\n const cloned = structuredClone(behavior) as Record<string, unknown>;\n const orbitalData = (cloned.orbitals as Record<string, unknown>[])?.[0];\n const goldenTrait = orbitalData\n ? ((orbitalData.traits as Record<string, unknown>[]) ?? [])[0]\n : cloned;\n const goldenEntity = orbitalData?.entity as Record<string, unknown> | undefined;\n\n if (!goldenTrait?.stateMachine) {\n return { success: false, error: `Behavior \"${input.behaviorName}\" has no state machine` };\n }\n\n if (!newFields.some(f => f.name === 'id')) {\n newFields.unshift({ name: 'id', type: 'string', required: true });\n }\n\n const oldEntityName = String(goldenEntity?.name ?? goldenTrait.linkedEntity ?? 'Item');\n const traitName = `${newEntityName}Management`;\n\n const orbital: Record<string, unknown> = {\n name: `${newEntityName}Orbital`,\n entity: {\n name: newEntityName,\n persistence: input.persistence ?? 'runtime',\n ...(input.persistence === 'persistent' ? { collection: newEntityName.toLowerCase() + 's' } : {}),\n fields: newFields,\n },\n traits: [{\n ...goldenTrait,\n name: traitName,\n linkedEntity: newEntityName,\n category: String(goldenTrait.category ?? 'interaction'),\n }],\n pages: [{\n name: input.pageName ?? `${newEntityName}Page`,\n path: input.pagePath ?? `/${newEntityName.toLowerCase()}s`,\n ...(input.isInitialPage ? { isInitial: true } : {}),\n traits: [{ ref: traitName }],\n }],\n };\n\n const orbStr = JSON.stringify(orbital);\n const substituted = orbStr\n .replace(new RegExp(`\"entity\":\\\\s*\"${oldEntityName}\"`, 'g'), `\"entity\": \"${newEntityName}\"`)\n .replace(new RegExp(`@entity\\\\.${oldEntityName}\\\\.`, 'g'), `@entity.`)\n .replace(new RegExp(`\"${oldEntityName}\"`, 'g'), `\"${newEntityName}\"`);\n\n try {\n finalOrbital = JSON.parse(substituted);\n } catch {\n finalOrbital = orbital;\n }\n\n if (input.title) {\n substituteInRenderUi(finalOrbital, 'typography', 'content', oldEntityName, input.title, true);\n }\n if (input.createButtonLabel) {\n substituteInRenderUi(finalOrbital, 'button', 'label', null, input.createButtonLabel, false);\n }\n }\n\n // Write to .orbitals/\n const orbitalsDir = path.join(workDir, '.orbitals');\n fs.mkdirSync(orbitalsDir, { recursive: true });\n const safeName = newEntityName.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();\n const orbitalPath = path.join(orbitalsDir, `${safeName}.json`);\n fs.writeFileSync(orbitalPath, JSON.stringify(finalOrbital, null, 2));\n\n // Validate\n const schema = { name: newEntityName + 'App', version: '1.0.0', orbitals: [finalOrbital] };\n fs.mkdirSync(workDir, { recursive: true });\n const validation = validateWithOrbitalCLI(schema, workDir);\n\n return {\n success: true,\n behaviorName: input.behaviorName,\n entityName: newEntityName,\n orbitalPath,\n usedFunction: !!behaviorFn,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors ?? []).length,\n errors: (validation.errors ?? []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'use_behavior',\n description: 'Instantiate a standard behavior with custom entity fields and labels. Zero LLM calls. Calls pure behavior function when available, falls back to substitution otherwise.',\n schema: z.object({\n behaviorName: z.string().describe('Standard behavior name (e.g., \"std-list\", \"std-cart\")'),\n entityName: z.string().describe('New entity name in PascalCase (e.g., \"Product\", \"Task\")'),\n fieldsJson: z.string().describe('JSON array of entity fields: [{ name, type, required?, default? }]'),\n persistence: z.string().optional().describe('\"persistent\", \"runtime\", or \"singleton\"'),\n title: z.string().optional().describe('Page title override'),\n createButtonLabel: z.string().optional().describe('Create button label override'),\n pageName: z.string().optional().describe('Page component name'),\n pagePath: z.string().optional().describe('Route path (e.g., \"/products\")'),\n isInitialPage: z.boolean().optional().describe('Whether this is the initial/home page'),\n }),\n },\n );\n}\n\n/** Walk render-ui trees and substitute text in pattern props. */\nfunction substituteInRenderUi(\n orbital: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n): void {\n let found = false;\n const traits = (orbital.traits as Record<string, unknown>[]) || [];\n for (const trait of traits) {\n const sm = trait.stateMachine as Record<string, unknown>;\n if (!sm) continue;\n const transitions = (sm.transitions as Array<Record<string, unknown>>) || [];\n for (const tr of transitions) {\n if (tr.event !== 'INIT') continue;\n const effects = (tr.effects as unknown[][]) || [];\n for (const eff of effects) {\n if (!Array.isArray(eff) || eff[0] !== 'render-ui') continue;\n const tree = eff[2] as Record<string, unknown>;\n if (!tree) continue;\n walkAndSubstitute(tree, patternType, propName, oldValue, newValue, firstOnly, () => { found = true; });\n }\n }\n }\n}\n\nfunction walkAndSubstitute(\n node: Record<string, unknown>,\n patternType: string,\n propName: string,\n oldValue: string | null,\n newValue: string,\n firstOnly: boolean,\n onFound: () => void,\n): void {\n if (node.type === patternType) {\n const current = node[propName];\n if (typeof current === 'string') {\n if (oldValue === null || current.toLowerCase().includes(oldValue.toLowerCase())) {\n if (!firstOnly || !onFound) {\n node[propName] = newValue;\n onFound();\n }\n }\n }\n }\n const children = node.children as Record<string, unknown>[];\n if (Array.isArray(children)) {\n for (const child of children) {\n if (child && typeof child === 'object') {\n walkAndSubstitute(child, patternType, propName, oldValue, newValue, firstOnly, onFound);\n }\n }\n }\n}\n\n// ============================================================================\n// connect (Phase 4)\n// ============================================================================\n\nexport function createConnectTool(workDir: string) {\n return tool(\n async (input) => {\n const emitterPath = path.join(workDir, '.orbitals', input.emitterFile);\n const listenerPath = path.join(workDir, '.orbitals', input.listenerFile);\n\n if (!fs.existsSync(emitterPath)) return { success: false, error: `Emitter not found: ${emitterPath}` };\n if (!fs.existsSync(listenerPath)) return { success: false, error: `Listener not found: ${listenerPath}` };\n\n const emitter = JSON.parse(fs.readFileSync(emitterPath, 'utf-8')) as Record<string, unknown>;\n const listener = JSON.parse(fs.readFileSync(listenerPath, 'utf-8')) as Record<string, unknown>;\n\n // Find primary traits\n const emitterTraits = (emitter.traits as Record<string, unknown>[]) || [];\n const listenerTraits = (listener.traits as Record<string, unknown>[]) || [];\n if (emitterTraits.length === 0 || listenerTraits.length === 0) {\n return { success: false, error: 'Both orbitals must have at least one trait' };\n }\n\n const emitterTrait = emitterTraits[0];\n const listenerTrait = listenerTraits[0];\n\n // Add emits to emitter\n const emits = (emitterTrait.emits as unknown[]) || [];\n emits.push({\n event: input.eventName,\n scope: 'external',\n ...(input.payloadJson ? { payload: JSON.parse(input.payloadJson) } : {}),\n });\n emitterTrait.emits = emits;\n\n // Add listens to listener\n const listens = (listenerTrait.listens as unknown[]) || [];\n listens.push({\n event: input.eventName,\n triggers: input.triggersEvent || 'INIT',\n scope: 'external',\n });\n listenerTrait.listens = listens;\n\n // Write back\n fs.writeFileSync(emitterPath, JSON.stringify(emitter, null, 2));\n fs.writeFileSync(listenerPath, JSON.stringify(listener, null, 2));\n\n return {\n success: true,\n event: input.eventName,\n emitter: String(emitterTrait.name),\n listener: String(listenerTrait.name),\n };\n },\n {\n name: 'connect_behaviors',\n description: 'Wire a cross-orbital event between two behaviors. Adds emits to the emitter trait and listens to the listener trait.',\n schema: z.object({\n emitterFile: z.string().describe('Emitter orbital filename in .orbitals/ (e.g., \"product.json\")'),\n listenerFile: z.string().describe('Listener orbital filename in .orbitals/ (e.g., \"cart_item.json\")'),\n eventName: z.string().describe('Event name in UPPER_SNAKE_CASE (e.g., \"ADD_TO_CART\")'),\n triggersEvent: z.string().optional().describe('Event to trigger on listener (defaults to \"INIT\")'),\n payloadJson: z.string().optional().describe('JSON array of payload fields: [{ name, type }]'),\n }),\n },\n );\n}\n\n// ============================================================================\n// compose (Phase 5)\n// ============================================================================\n\nexport function createComposeTool(workDir: string) {\n return tool(\n async (input) => {\n const orbitalsDir = path.join(workDir, '.orbitals');\n\n // Load orbital files from .orbitals/\n const orbitals: OrbitalDefinition[] = [];\n const orbitalFiles = input.orbitalFiles\n ? JSON.parse(input.orbitalFiles) as string[]\n : fs.readdirSync(orbitalsDir).filter(f => f.endsWith('.json'));\n\n for (const file of orbitalFiles) {\n const filePath = path.join(orbitalsDir, file);\n if (!fs.existsSync(filePath)) continue;\n orbitals.push(JSON.parse(fs.readFileSync(filePath, 'utf-8')) as OrbitalDefinition);\n }\n\n if (orbitals.length === 0) {\n return { success: false, error: 'No orbitals found in .orbitals/' };\n }\n\n // Parse optional event wiring\n let eventWiring: EventWiringEntry[] | undefined;\n if (input.eventWiringJson) {\n eventWiring = JSON.parse(input.eventWiringJson) as EventWiringEntry[];\n }\n\n // Parse optional entity mappings\n let entityMappings: Record<string, string> | undefined;\n if (input.entityMappingsJson) {\n entityMappings = JSON.parse(input.entityMappingsJson) as Record<string, string>;\n }\n\n // Compose using @almadar/core/builders\n const result = composeBehaviors({\n appName: input.appName || 'Application',\n orbitals,\n layoutStrategy: (input.layoutStrategy as LayoutStrategy | 'auto') ?? 'auto',\n eventWiring,\n entityMappings,\n });\n\n const schemaPath = path.join(workDir, 'schema.orb');\n fs.writeFileSync(schemaPath, JSON.stringify(result.schema, null, 2));\n\n // Validate\n const validation = validateWithOrbitalCLI(result.schema, workDir);\n\n return {\n success: true,\n appName: result.schema.name,\n orbitalCount: orbitals.length,\n pageCount: result.layout.pageCount,\n schemaPath,\n validation: {\n valid: validation.valid ?? false,\n errorCount: (validation.errors || []).length,\n errors: (validation.errors || []).slice(0, 5).map(e => e.message),\n },\n };\n },\n {\n name: 'compose_behaviors',\n description: 'Compose multiple orbitals from .orbitals/ into a final application schema using composeBehaviors. Handles layout strategy detection, event wiring, and page generation. Writes schema.orb and validates.',\n schema: z.object({\n appName: z.string().optional().describe('Application name'),\n orbitalFiles: z.string().optional().describe('JSON array of orbital filenames. Defaults to all .json files in .orbitals/'),\n layoutStrategy: z.enum(['sidebar', 'tabs', 'dashboard', 'wizard-flow', 'auto']).optional().describe('Layout strategy. Defaults to auto.'),\n eventWiringJson: z.string().optional().describe('JSON array of event wiring entries: [{ from, event, to, triggers }]'),\n entityMappingsJson: z.string().optional().describe('JSON object of entity mappings: { \"Entity.field\": \"OtherEntity.field\" }'),\n }),\n },\n );\n}\n"]}