@skillkit/tui 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -29
- package/dist/index.d.ts +61 -10
- package/dist/index.js +1023 -297
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/App.tsx","../src/components/Sidebar.tsx","../src/theme.ts","../src/screens/Home.tsx","../src/screens/Browse.tsx","../src/hooks/useMarketplace.ts","../src/helpers.ts","../src/screens/Installed.tsx","../src/hooks/useSkills.ts","../src/screens/Sync.tsx","../src/screens/Settings.tsx","../src/screens/Recommend.tsx","../src/hooks/useRecommend.ts","../src/screens/Translate.tsx","../src/screens/Context.tsx","../src/components/Header.tsx","../src/components/SkillList.tsx","../src/components/StatusBar.tsx","../src/components/SearchInput.tsx","../src/hooks/useKeyboard.ts"],"sourcesContent":["import { render } from 'ink';\nimport { App } from './App.js';\n\nexport function startTUI(): Promise<void> {\n process.stdout.write('\\x1B[2J\\x1B[0f');\n\n const { waitUntilExit, clear } = render(<App />, {\n exitOnCtrlC: true,\n });\n\n return waitUntilExit().then(() => {\n clear();\n });\n}\n\n// Re-export types and components for external use\nexport type { Screen } from './App.js';\nexport { App } from './App.js';\nexport * from './components/index.js';\nexport * from './screens/index.js';\nexport * from './hooks/index.js';\nexport * from './theme.js';\n","import { useState } from 'react';\nimport { Box, Text, useInput, useApp, useStdout } from 'ink';\nimport { Sidebar } from './components/Sidebar.js';\nimport { Home } from './screens/Home.js';\nimport { Browse } from './screens/Browse.js';\nimport { Installed } from './screens/Installed.js';\nimport { Sync } from './screens/Sync.js';\nimport { Settings } from './screens/Settings.js';\nimport { Recommend } from './screens/Recommend.js';\nimport { Translate } from './screens/Translate.js';\nimport { Context } from './screens/Context.js';\n\nexport type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context';\n\nexport function App() {\n const [screen, setScreen] = useState<Screen>('home');\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const cols = stdout?.columns || 80;\n const rows = stdout?.rows || 24;\n const showSidebar = cols >= 70;\n\n useInput((input, key) => {\n if (input === 'q') {\n exit();\n return;\n }\n if (key.escape) {\n setScreen('home');\n return;\n }\n if (input === 'h') setScreen('home');\n if (input === 'b') setScreen('browse');\n if (input === 'l') setScreen('installed');\n if (input === 's') setScreen('sync');\n if (input === ',') setScreen('settings');\n if (input === 'r') setScreen('recommend');\n if (input === 't') setScreen('translate');\n if (input === 'c') setScreen('context');\n });\n\n const renderScreen = () => {\n switch (screen) {\n case 'home': return <Home onNavigate={setScreen} cols={cols} rows={rows} />;\n case 'browse': return <Browse cols={cols} rows={rows} />;\n case 'installed': return <Installed cols={cols} rows={rows} />;\n case 'sync': return <Sync cols={cols} rows={rows} />;\n case 'settings': return <Settings cols={cols} rows={rows} />;\n case 'recommend': return <Recommend cols={cols} rows={rows} />;\n case 'translate': return <Translate cols={cols} rows={rows} />;\n case 'context': return <Context cols={cols} rows={rows} />;\n }\n };\n\n const contentHeight = rows - 2;\n\n return (\n <Box flexDirection=\"column\" height={rows}>\n <Box flexDirection=\"row\" height={contentHeight}>\n {showSidebar && <Sidebar screen={screen} onNavigate={setScreen} />}\n <Box flexDirection=\"column\" flexGrow={1} marginLeft={1}>\n {renderScreen()}\n </Box>\n </Box>\n <Box>\n <Text dimColor>h Home b Browse r Rec t Trans c Ctx l List s Sync , Config q Quit</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface SidebarProps {\n screen: Screen;\n onNavigate: (screen: Screen) => void;\n isCompact?: boolean;\n}\n\nconst NAV: { id: Screen; label: string }[] = [\n { id: 'home', label: 'Home' },\n { id: 'browse', label: 'Browse' },\n { id: 'recommend', label: 'Recommend' },\n { id: 'translate', label: 'Translate' },\n { id: 'context', label: 'Context' },\n { id: 'installed', label: 'List' },\n { id: 'sync', label: 'Sync' },\n { id: 'settings', label: 'Config' },\n];\n\nexport function Sidebar({ screen }: SidebarProps) {\n return (\n <Box flexDirection=\"column\" width={14} borderStyle=\"single\" paddingX={1}>\n <Text bold color={colors.primary}>SkillKit</Text>\n\n {NAV.slice(0, 3).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {NAV.slice(3, 5).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {NAV.slice(5).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Box flexGrow={1} />\n\n <Text dimColor>? Help</Text>\n <Text dimColor>q Quit</Text>\n </Box>\n );\n}\n","import chalk from 'chalk';\n\nexport const colors = {\n primary: 'white',\n secondary: 'white',\n secondaryDim: 'gray',\n success: 'white',\n danger: 'white',\n warning: 'white',\n background: 'bgBlack',\n borderDim: 'gray',\n};\n\nexport const symbols = {\n pointer: chalk.white('❯'),\n bullet: '●',\n checkboxOn: chalk.white('✔'),\n checkboxOff: chalk.dim('✖'),\n check: chalk.white('✓'),\n star: '★',\n spinner: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n};\n\nexport const logo = `\n███████╗██╗ ██╗██╗██╗ ██╗ ██╗ ██╗██╗████████╗\n██╔════╝██║ ██╔╝██║██║ ██║ ██║ ██╔╝██║╚══██╔══╝\n███████╗█████╔╝ ██║██║ ██║ █████╔╝ ██║ ██║\n╚════██║██╔═██╗ ██║██║ ██║ ██╔═██╗ ██║ ██║\n███████║██║ ██╗██║███████╗███████╗██║ ██╗██║ ██║\n╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝\n`;\n","import { useState, useEffect } from 'react';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { Box, Text } from 'ink';\nimport { colors, logo } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface HomeProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst CHARS = '01█▓▒░╔╗╚╝║═';\n\nconst logoSmall = `\n╔═╗╦╔═╦╦ ╦ ╦╔═╦╔╦╗\n╚═╗╠╩╗║║ ║ ╠╩╗║ ║\n╚═╝╩ ╩╩╩═╝╩═╝╩ ╩╩ ╩\n`.trim();\n\nfunction getVersion(): string {\n try {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const packageJsonPath = join(__dirname, '../../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return packageJson.version || '1.2.0';\n } catch {\n return '1.2.0';\n }\n}\n\nfunction scramble(target: string, progress: number): string {\n return target.split('\\n').map(line => {\n return line.split('').map((char, i) => {\n if (char === ' ') return char;\n if (progress > (i / line.length) * 100) return char;\n return CHARS[Math.floor(Math.random() * CHARS.length)];\n }).join('');\n }).join('\\n');\n}\n\nexport function Home({ cols = 80, rows = 24 }: HomeProps) {\n const [progress, setProgress] = useState(0);\n const [display, setDisplay] = useState('');\n const version = getVersion();\n\n const useLogo = cols < 80 ? logoSmall : logo;\n\n useEffect(() => {\n if (progress >= 100) {\n setDisplay(useLogo);\n return;\n }\n const t = setInterval(() => {\n setProgress(p => {\n const next = p + 12;\n setDisplay(scramble(useLogo, next));\n return next;\n });\n }, 35);\n return () => clearInterval(t);\n }, [progress, useLogo]);\n\n return (\n <Box flexDirection=\"column\">\n <Text color={colors.primary}>{display || useLogo}</Text>\n\n <Box marginTop={1}>\n <Text>Manage AI agent skills from your terminal.</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Quick Actions:</Text>\n <Text dimColor> [b] Browse skills marketplace</Text>\n <Text dimColor> [r] Get smart recommendations</Text>\n <Text dimColor> [t] Translate skills between agents</Text>\n <Text dimColor> [c] Manage project context</Text>\n <Text dimColor> [l] View installed skills</Text>\n <Text dimColor> [s] Sync skills across agents</Text>\n </Box>\n\n {rows >= 18 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Navigation:</Text>\n <Text dimColor> ↑↓ Navigate lists</Text>\n <Text dimColor> Enter Select / Confirm</Text>\n <Text dimColor> Esc Go back / Home</Text>\n <Text dimColor> q Quit</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>v{version} - Works with 17 AI agents</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useMarketplace } from '../hooks/useMarketplace.js';\nimport { detectProvider, type AgentType, type SkillMetadata } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\ntype View = 'repos' | 'skills' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Browse({ rows = 24 }: Props) {\n const { repos, skills, loading, currentRepo, fetchRepo, fetchAllRepos } = useMarketplace();\n const [view, setView] = useState<View>('repos');\n const [sel, setSel] = useState(0);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'repos' ? repos : view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n setInstalling(skillName);\n setMessage(null);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n if (!agentType) {\n setView('skills');\n }\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'repos' && repos[sel]) {\n fetchRepo(repos[sel].source);\n setView('skills');\n setSel(0);\n setMessage(null);\n } else if (view === 'skills' && skills[sel]?.source) {\n installSkill(skills[sel].name, skills[sel].source);\n } else if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n }\n }\n else if (input === 'm' && view === 'skills' && skills[sel]?.source) {\n showAgentSelection(skills[sel].name, skills[sel].source!);\n }\n else if (input === 'r') {\n if (view === 'skills') {\n setView('repos');\n setSel(0);\n setMessage(null);\n } else if (view === 'agents') {\n setView('skills');\n setSel(0);\n }\n }\n else if (input === 'a' && view === 'repos') {\n fetchAllRepos();\n setView('skills');\n setSel(0);\n }\n });\n\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n <Text dimColor>(All agents supported - directory created if needed)</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install to selected agent r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>{view === 'repos' ? 'REPOSITORIES' : 'SKILLS'}</Text>\n {loading && <Text dimColor>Loading {currentRepo}...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n <Text dimColor>{items.length} items</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const name = view === 'repos'\n ? (item as typeof repos[0]).name\n : (item as typeof skills[0]).name;\n const src = view === 'repos'\n ? (item as typeof repos[0]).source\n : (item as typeof skills[0]).source || '';\n return (\n <Text key={src + name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{name.padEnd(25)} <Text color={colors.secondaryDim}>{src}</Text>\n </Text>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'repos'\n ? 'Enter=fetch a=all q=quit'\n : 'Enter=quick install m=choose agent r=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { detectProvider } from '@skillkit/core';\nimport type { SkillItem } from '../components/SkillList.js';\n\nexport interface RepoInfo {\n source: string;\n name: string;\n}\n\nconst POPULAR_REPOS: RepoInfo[] = [\n { source: 'anthropics/skills', name: 'Anthropic Official' },\n { source: 'vercel-labs/agent-skills', name: 'Vercel Labs' },\n { source: 'expo/skills', name: 'Expo / React Native' },\n { source: 'remotion-dev/skills', name: 'Remotion Video' },\n { source: 'ComposioHQ/awesome-claude-skills', name: 'Composio Awesome' },\n { source: 'travisvn/awesome-claude-skills', name: 'Travis Awesome' },\n { source: 'mhattingpete/claude-skills-marketplace', name: 'Skills Marketplace' },\n { source: 'coreyhaines31/marketingskills', name: 'Marketing Skills' },\n { source: 'obra/superpowers', name: 'Superpowers TDD' },\n { source: 'softaworks/agent-toolkit', name: 'Softaworks Toolkit' },\n { source: 'wshobson/agents', name: 'Dev Patterns' },\n { source: 'langgenius/dify', name: 'Dify Frontend' },\n { source: 'trailofbits/skills', name: 'Trail of Bits Security' },\n { source: 'better-auth/skills', name: 'Better Auth' },\n { source: 'onmax/nuxt-skills', name: 'Nuxt / Vue' },\n { source: 'hyf0/vue-skills', name: 'Vue Best Practices' },\n { source: 'jezweb/claude-skills', name: 'Cloudflare / TanStack' },\n { source: 'elysiajs/skills', name: 'ElysiaJS / Bun' },\n { source: 'kadajett/agent-nestjs-skills', name: 'NestJS' },\n { source: 'callstackincubator/agent-skills', name: 'React Native' },\n { source: 'cloudai-x/threejs-skills', name: 'Three.js' },\n { source: 'emalorenzo/three-agent-skills', name: 'Three.js Advanced' },\n { source: 'dimillian/skills', name: 'SwiftUI iOS' },\n { source: 'stripe/ai', name: 'Stripe Payments' },\n { source: 'waynesutton/convexskills', name: 'Convex Backend' },\n { source: 'kepano/obsidian-skills', name: 'Obsidian Notes' },\n { source: 'jimliu/baoyu-skills', name: 'Baoyu Tools' },\n { source: 'giuseppe-trisciuoglio/developer-kit', name: 'Shadcn / Radix' },\n { source: 'openrouterteam/agent-skills', name: 'OpenRouter SDK' },\n { source: 'intellectronica/agent-skills', name: 'Context7' },\n];\n\ninterface FetchedSkill {\n name: string;\n source: string;\n repoName: string;\n description?: string;\n}\n\ninterface UseMarketplaceResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n totalCount: number;\n repos: RepoInfo[];\n currentRepo: string | null;\n refresh: () => void;\n search: (query: string) => void;\n fetchRepo: (source: string) => Promise<void>;\n fetchAllRepos: () => Promise<void>;\n}\n\nexport function useMarketplace(): UseMarketplaceResult {\n const [allSkills, setAllSkills] = useState<FetchedSkill[]>([]);\n const [filteredSkills, setFilteredSkills] = useState<FetchedSkill[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [currentRepo, setCurrentRepo] = useState<string | null>(null);\n const [fetchedRepos, setFetchedRepos] = useState<Set<string>>(new Set());\n\n const fetchRepo = useCallback(async (source: string) => {\n if (fetchedRepos.has(source)) return;\n\n setLoading(true);\n setError(null);\n setCurrentRepo(source);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n throw new Error(`Could not detect provider for: ${source}`);\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n throw new Error(result.error || 'Failed to fetch skills');\n }\n\n const repoName = POPULAR_REPOS.find(r => r.source === source)?.name || source;\n const newSkills: FetchedSkill[] = result.discoveredSkills.map(skill => ({\n name: skill.name,\n source: source,\n repoName: repoName,\n description: undefined,\n }));\n\n setAllSkills(prev => {\n const updated = [...prev, ...newSkills];\n return updated.sort((a, b) => a.name.localeCompare(b.name));\n });\n\n setFetchedRepos(prev => new Set([...prev, source]));\n\n if (result.tempRoot) {\n const { rmSync } = await import('node:fs');\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch repository');\n } finally {\n setLoading(false);\n setCurrentRepo(null);\n }\n }, [fetchedRepos]);\n\n const fetchAllRepos = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n for (const repo of POPULAR_REPOS) {\n if (!fetchedRepos.has(repo.source)) {\n setCurrentRepo(repo.source);\n try {\n await fetchRepo(repo.source);\n } catch {\n }\n }\n }\n\n setLoading(false);\n setCurrentRepo(null);\n }, [fetchRepo, fetchedRepos]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setFilteredSkills(allSkills);\n } else {\n const lowerQuery = query.toLowerCase();\n setFilteredSkills(\n allSkills.filter(\n (s) =>\n s.name.toLowerCase().includes(lowerQuery) ||\n s.source.toLowerCase().includes(lowerQuery) ||\n s.repoName.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery)\n )\n );\n }\n }, [allSkills]);\n\n const refresh = useCallback(() => {\n setFetchedRepos(new Set());\n setAllSkills([]);\n setFilteredSkills([]);\n }, []);\n\n useEffect(() => {\n setFilteredSkills(allSkills);\n }, [allSkills]);\n\n const skills: SkillItem[] = filteredSkills.map((s) => ({\n name: s.name,\n description: s.description || s.repoName,\n source: s.source,\n }));\n\n return {\n skills,\n loading,\n error,\n totalCount: allSkills.length,\n repos: POPULAR_REPOS,\n currentRepo,\n refresh,\n search,\n fetchRepo,\n fetchAllRepos,\n };\n}\n","// Re-export commonly used functions with proper adapters\nimport {\n loadConfig,\n getSearchDirs as coreGetSearchDirs,\n getInstallDir as coreGetInstallDir,\n saveSkillMetadata as coreSaveSkillMetadata,\n} from '@skillkit/core';\nimport { getAdapter } from '@skillkit/agents';\nimport type { AgentType, AgentAdapterInfo } from '@skillkit/core';\n\n// Re-export for direct use\nexport { coreSaveSkillMetadata as saveSkillMetadata };\n\nexport function getSearchDirs(agentType?: AgentType): string[] {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetSearchDirs(adapterInfo);\n}\n\nexport function getInstallDir(global = false, agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetInstallDir(adapterInfo, global);\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useSkills } from '../hooks/useSkills.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Installed({ rows = 24 }: Props) {\n const { skills, loading, refresh, remove } = useSkills();\n const [sel, setSel] = useState(0);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), skills.length - maxVisible));\n const visible = skills.slice(start, start + maxVisible);\n\n useInput((input, key) => {\n if (loading) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(skills.length - 1, i + 1));\n else if (input === 'r') refresh();\n else if (input === 'd' && skills[sel]) remove(skills[sel].name);\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>INSTALLED SKILLS</Text>\n <Text dimColor>{skills.length} skills</Text>\n\n {loading && <Text>Loading...</Text>}\n\n {!loading && skills.length === 0 && (\n <Text dimColor>No skills installed. Press b to browse.</Text>\n )}\n\n {!loading && skills.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((skill, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{skill.name.padEnd(30)} {skill.source && <Text color={colors.secondaryDim}>{skill.source}</Text>}\n </Text>\n );\n })}\n {start + maxVisible < skills.length && <Text dimColor> ↓ {skills.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>r=refresh d=delete q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { findAllSkills } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\nimport type { SkillItem } from '../components/SkillList.js';\n\ninterface UseSkillsResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n refresh: () => void;\n remove: (name: string) => Promise<void>;\n}\n\nexport function useSkills(): UseSkillsResult {\n const [skills, setSkills] = useState<SkillItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = () => {\n setLoading(true);\n setError(null);\n\n try {\n const searchDirs = getSearchDirs();\n const foundSkills = findAllSkills(searchDirs);\n\n const skillItems: SkillItem[] = foundSkills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.metadata?.source,\n enabled: s.enabled,\n }));\n\n setSkills(skillItems);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load skills');\n } finally {\n setLoading(false);\n }\n };\n\n const remove = async (name: string) => {\n const { rmSync } = await import('node:fs');\n const foundSkill = skills.find(s => s.name === name);\n if (foundSkill) {\n const searchDirs = getSearchDirs();\n const allSkills = findAllSkills(searchDirs);\n const skill = allSkills.find(s => s.name === name);\n if (skill) {\n rmSync(skill.path, { recursive: true, force: true });\n refresh();\n }\n }\n };\n\n useEffect(() => {\n refresh();\n }, []);\n\n return { skills, loading, error, refresh, remove };\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { getAllAdapters } from '@skillkit/agents';\n\ninterface AgentStatus {\n name: string;\n type: string;\n detected: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Sync({ rows = 24 }: Props) {\n const [agents, setAgents] = useState<AgentStatus[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [syncing, setSyncing] = useState(false);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n useEffect(() => {\n (async () => {\n const adapters = getAllAdapters();\n const s: AgentStatus[] = [];\n for (const a of adapters) {\n s.push({ name: a.name, type: a.type, detected: await a.isDetected() });\n }\n setAgents(s);\n setLoading(false);\n })();\n }, []);\n\n useInput((input, key) => {\n if (loading || syncing) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (input === 'a') { setSyncing(true); setTimeout(() => setSyncing(false), 500); }\n else if (key.return && agents[sel]?.detected) { setSyncing(true); setTimeout(() => setSyncing(false), 300); }\n });\n\n const detected = agents.filter(a => a.detected).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC SKILLS</Text>\n <Text dimColor>{detected}/{agents.length} agents detected</Text>\n\n {loading && <Text>Detecting agents...</Text>}\n {syncing && <Text>Syncing...</Text>}\n\n {!loading && !syncing && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={agent.type} inverse={isSel} dimColor={!agent.detected}>\n {isSel ? symbols.pointer : ' '}{agent.detected ? symbols.checkboxOn : symbols.checkboxOff} {agent.name.padEnd(20)} {agent.detected ? 'Ready' : 'N/A'}\n </Text>\n );\n })}\n {start + maxVisible < agents.length && <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync a=all q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nconst SETTINGS = [\n { id: 'agent', label: 'Default Agent', value: 'auto-detect' },\n { id: 'sync', label: 'Auto Sync', value: 'disabled' },\n { id: 'cache', label: 'Cache Dir', value: '~/.skillkit/cache' },\n];\n\nexport function Settings({}: Props) {\n const [sel, setSel] = useState(0);\n\n useInput((_, key) => {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(SETTINGS.length - 1, i + 1));\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SETTINGS</Text>\n <Text dimColor>Configure SkillKit</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {SETTINGS.map((s, i) => {\n const isSel = i === sel;\n return (\n <Text key={s.id} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{s.label.padEnd(16)} <Text color={colors.secondaryDim}>{s.value}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=edit q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useRecommend } from '../hooks/useRecommend.js';\nimport { detectProvider, type AgentType, type SkillMetadata } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\ntype View = 'recommendations' | 'search' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Recommend({ rows = 24 }: Props) {\n const {\n recommendations,\n profile,\n loading,\n error,\n totalScanned,\n indexStatus,\n refresh,\n updateIndex,\n search,\n searchResults,\n } = useRecommend();\n\n const [view, setView] = useState<View>('recommendations');\n const [sel, setSel] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchMode, setSearchMode] = useState(false);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'recommendations'\n ? recommendations\n : view === 'search'\n ? searchResults\n : agents;\n\n const maxVisible = Math.max(5, rows - 10);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n if (!source) {\n setMessage('Error: No source available for this skill');\n return;\n }\n\n setInstalling(skillName);\n setMessage(null);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found in repo`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n setView('recommendations');\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n // Handle search input mode\n if (searchMode) {\n if (key.escape) {\n setSearchMode(false);\n setSearchQuery('');\n setView('recommendations');\n return;\n }\n if (key.return) {\n setSearchMode(false);\n if (searchQuery.trim()) {\n search(searchQuery);\n setView('search');\n setSel(0);\n }\n return;\n }\n if (key.backspace || key.delete) {\n setSearchQuery(q => q.slice(0, -1));\n return;\n }\n if (input && !key.ctrl && !key.meta) {\n setSearchQuery(q => q + input);\n return;\n }\n return;\n }\n\n // Navigation\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n } else if ((view === 'recommendations' || view === 'search') && items[sel]) {\n const skill = items[sel] as typeof recommendations[0];\n if (skill.skill.source) {\n installSkill(skill.skill.name, skill.skill.source);\n }\n }\n }\n // Actions\n else if (input === '/') {\n setSearchMode(true);\n setSearchQuery('');\n }\n else if (input === 'm' && (view === 'recommendations' || view === 'search') && items[sel]) {\n const skill = items[sel] as typeof recommendations[0];\n if (skill.skill.source) {\n showAgentSelection(skill.skill.name, skill.skill.source);\n }\n }\n else if (input === 'u') {\n updateIndex();\n }\n else if (input === 'r' && view !== 'recommendations') {\n if (view === 'agents') {\n setView('recommendations');\n } else {\n setView('recommendations');\n setSearchQuery('');\n }\n setSel(0);\n }\n else if (input === 'R') {\n refresh();\n }\n });\n\n // Agent selection view\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n // Score bar helper\n const getScoreBar = (score: number): string => {\n const filled = Math.round(score / 10);\n const empty = 10 - filled;\n return '█'.repeat(filled) + '░'.repeat(empty);\n };\n\n const getScoreColor = (score: number) => {\n if (score >= 70) return 'green';\n if (score >= 50) return 'yellow';\n return 'gray';\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'search' ? `SEARCH: \"${searchQuery}\"` : 'RECOMMENDATIONS'}\n </Text>\n\n {/* Status bar */}\n {loading && <Text dimColor>Loading...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n\n {/* Search input */}\n {searchMode && (\n <Box marginTop={1}>\n <Text>Search: {searchQuery}</Text>\n <Text dimColor>█</Text>\n </Box>\n )}\n\n {/* Index status warning */}\n {indexStatus === 'missing' && !loading && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">No skill index found.</Text>\n <Text dimColor>Press 'u' to update index from known sources.</Text>\n </Box>\n )}\n\n {indexStatus === 'stale' && !loading && (\n <Text dimColor>Index may be outdated. Press 'u' to update.</Text>\n )}\n\n {/* Profile info */}\n {profile && !searchMode && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Project: {profile.name}\n {profile.type ? ` (${profile.type})` : ''}\n </Text>\n {profile.stack.languages.length > 0 && (\n <Text dimColor>\n Stack: {profile.stack.languages.map(l => l.name).join(', ')}\n {profile.stack.frameworks.length > 0 && `, ${profile.stack.frameworks.map(f => f.name).join(', ')}`}\n </Text>\n )}\n </Box>\n )}\n\n {/* Item count */}\n {!searchMode && (\n <Text dimColor>\n {view === 'search'\n ? `${searchResults.length} results`\n : `${recommendations.length} of ${totalScanned} skills matched`}\n </Text>\n )}\n\n {/* List */}\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const skill = (item as typeof recommendations[0]).skill;\n const score = (item as typeof recommendations[0]).score;\n\n return (\n <Box key={skill.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}\n <Text color={getScoreColor(score)}>{score.toString().padStart(3)}%</Text>\n {' '}\n <Text color={getScoreColor(score)}>{getScoreBar(score)}</Text>\n {' '}\n <Text bold>{skill.name}</Text>\n </Text>\n {isSel && skill.description && (\n <Text dimColor> {skill.description.slice(0, 60)}{skill.description.length > 60 ? '...' : ''}</Text>\n )}\n {isSel && skill.source && (\n <Text dimColor> Source: {skill.source}</Text>\n )}\n </Box>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n {/* Help bar */}\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'search'\n ? 'Enter=install m=choose agent /=search r=back u=update q=quit'\n : 'Enter=install m=choose agent /=search u=update R=refresh q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport {\n RecommendationEngine,\n ContextManager,\n type ScoredSkill,\n type ProjectProfile,\n type SkillIndex,\n type SkillSummary,\n} from '@skillkit/core';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\n\nconst INDEX_PATH = join(process.env.HOME || '~', '.skillkit', 'index.json');\nconst INDEX_CACHE_HOURS = 24;\n\ninterface UseRecommendResult {\n recommendations: ScoredSkill[];\n profile: ProjectProfile | null;\n loading: boolean;\n error: string | null;\n totalScanned: number;\n indexStatus: 'missing' | 'stale' | 'fresh';\n refresh: () => void;\n updateIndex: () => void;\n search: (query: string) => void;\n searchResults: ScoredSkill[];\n}\n\n/**\n * Sample skills for the index (matches CLI implementation)\n */\nfunction getSampleSkills(): SkillSummary[] {\n return [\n {\n name: 'vercel-react-best-practices',\n description: 'Modern React patterns including Server Components, hooks best practices, and performance optimization',\n source: 'vercel-labs/agent-skills',\n tags: ['react', 'frontend', 'typescript', 'nextjs', 'performance'],\n compatibility: {\n frameworks: ['react', 'nextjs'],\n languages: ['typescript', 'javascript'],\n libraries: [],\n },\n popularity: 1500,\n quality: 95,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'tailwind-v4-patterns',\n description: 'Tailwind CSS v4 utility patterns, responsive design, and component styling best practices',\n source: 'vercel-labs/agent-skills',\n tags: ['tailwind', 'css', 'styling', 'frontend', 'responsive'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript'],\n libraries: ['tailwindcss'],\n },\n popularity: 1200,\n quality: 92,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'nextjs-app-router',\n description: 'Next.js App Router patterns including layouts, server actions, and data fetching',\n source: 'vercel-labs/agent-skills',\n tags: ['nextjs', 'react', 'routing', 'server-actions', 'frontend'],\n compatibility: {\n frameworks: ['nextjs'],\n languages: ['typescript', 'javascript'],\n libraries: [],\n },\n popularity: 1100,\n quality: 94,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'typescript-strict-patterns',\n description: 'TypeScript strict mode patterns, type safety, and advanced type utilities',\n source: 'anthropics/skills',\n tags: ['typescript', 'types', 'safety', 'patterns'],\n compatibility: {\n frameworks: [],\n languages: ['typescript'],\n libraries: [],\n },\n popularity: 900,\n quality: 90,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'supabase-best-practices',\n description: 'Supabase integration patterns including auth, database queries, and real-time subscriptions',\n source: 'anthropics/skills',\n tags: ['supabase', 'database', 'auth', 'backend', 'postgresql'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript'],\n libraries: ['@supabase/supabase-js'],\n },\n popularity: 800,\n quality: 88,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'vitest-testing-patterns',\n description: 'Testing patterns with Vitest including mocking, assertions, and test organization',\n source: 'anthropics/skills',\n tags: ['vitest', 'testing', 'typescript', 'mocking', 'tdd'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript'],\n libraries: ['vitest'],\n },\n popularity: 700,\n quality: 86,\n lastUpdated: new Date().toISOString(),\n verified: false,\n },\n {\n name: 'prisma-database-patterns',\n description: 'Prisma ORM patterns for schema design, migrations, and efficient queries',\n source: 'vercel-labs/agent-skills',\n tags: ['prisma', 'database', 'orm', 'postgresql', 'backend'],\n compatibility: {\n frameworks: [],\n languages: ['typescript'],\n libraries: ['@prisma/client'],\n },\n popularity: 850,\n quality: 89,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'security-best-practices',\n description: 'Security patterns for web applications including XSS prevention, CSRF, and secure headers',\n source: 'trailofbits/skills',\n tags: ['security', 'xss', 'csrf', 'headers', 'owasp'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript', 'python'],\n libraries: [],\n },\n popularity: 600,\n quality: 95,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'python-fastapi-patterns',\n description: 'FastAPI best practices for building high-performance Python APIs',\n source: 'python-skills/fastapi',\n tags: ['python', 'fastapi', 'backend', 'api', 'async'],\n compatibility: {\n frameworks: ['fastapi'],\n languages: ['python'],\n libraries: [],\n },\n popularity: 550,\n quality: 85,\n lastUpdated: new Date().toISOString(),\n verified: false,\n },\n {\n name: 'zustand-state-management',\n description: 'Zustand state management patterns for React applications',\n source: 'react-skills/state',\n tags: ['zustand', 'react', 'state-management', 'frontend'],\n compatibility: {\n frameworks: ['react'],\n languages: ['typescript', 'javascript'],\n libraries: ['zustand'],\n },\n popularity: 650,\n quality: 84,\n lastUpdated: new Date().toISOString(),\n verified: false,\n },\n ];\n}\n\nexport function useRecommend(projectPath: string = process.cwd()): UseRecommendResult {\n const [recommendations, setRecommendations] = useState<ScoredSkill[]>([]);\n const [searchResults, setSearchResults] = useState<ScoredSkill[]>([]);\n const [profile, setProfile] = useState<ProjectProfile | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [totalScanned, setTotalScanned] = useState(0);\n const [indexStatus, setIndexStatus] = useState<'missing' | 'stale' | 'fresh'>('missing');\n const [engine] = useState(() => new RecommendationEngine());\n\n const loadIndex = useCallback((): SkillIndex | null => {\n if (!existsSync(INDEX_PATH)) {\n setIndexStatus('missing');\n return null;\n }\n\n try {\n const content = readFileSync(INDEX_PATH, 'utf-8');\n const index = JSON.parse(content) as SkillIndex;\n\n // Check if index is stale\n const lastUpdated = new Date(index.lastUpdated);\n const hoursSinceUpdate = (Date.now() - lastUpdated.getTime()) / (1000 * 60 * 60);\n\n if (hoursSinceUpdate > INDEX_CACHE_HOURS) {\n setIndexStatus('stale');\n } else {\n setIndexStatus('fresh');\n }\n\n return index;\n } catch {\n setIndexStatus('missing');\n return null;\n }\n }, []);\n\n const getProjectProfile = useCallback((): ProjectProfile | null => {\n try {\n const manager = new ContextManager(projectPath);\n let context = manager.get();\n\n if (!context) {\n context = manager.init();\n }\n\n if (!context) {\n return null;\n }\n\n return {\n name: context.project.name,\n type: context.project.type,\n stack: context.stack,\n patterns: context.patterns,\n installedSkills: context.skills?.installed || [],\n excludedSkills: context.skills?.excluded || [],\n };\n } catch {\n return null;\n }\n }, [projectPath]);\n\n const loadRecommendations = useCallback(() => {\n setLoading(true);\n setError(null);\n\n try {\n // Load project profile\n const projectProfile = getProjectProfile();\n if (!projectProfile) {\n setError('Failed to analyze project');\n setLoading(false);\n return;\n }\n setProfile(projectProfile);\n\n // Load skill index\n const index = loadIndex();\n if (!index || index.skills.length === 0) {\n setRecommendations([]);\n setTotalScanned(0);\n setLoading(false);\n return;\n }\n\n engine.loadIndex(index);\n\n // Get recommendations\n const result = engine.recommend(projectProfile, {\n limit: 20,\n minScore: 20,\n excludeInstalled: true,\n includeReasons: true,\n });\n\n setRecommendations(result.recommendations);\n setTotalScanned(result.totalSkillsScanned);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to get recommendations');\n } finally {\n setLoading(false);\n }\n }, [engine, getProjectProfile, loadIndex]);\n\n const updateIndex = useCallback(() => {\n setLoading(true);\n setError(null);\n\n try {\n const sampleIndex: SkillIndex = {\n version: 1,\n lastUpdated: new Date().toISOString(),\n skills: getSampleSkills(),\n sources: [\n {\n name: 'vercel-labs',\n url: 'https://github.com/vercel-labs/agent-skills',\n lastFetched: new Date().toISOString(),\n skillCount: 5,\n },\n {\n name: 'anthropics',\n url: 'https://github.com/anthropics/skills',\n lastFetched: new Date().toISOString(),\n skillCount: 3,\n },\n ],\n };\n\n // Save index\n const indexDir = join(process.env.HOME || '~', '.skillkit');\n if (!existsSync(indexDir)) {\n mkdirSync(indexDir, { recursive: true });\n }\n\n writeFileSync(INDEX_PATH, JSON.stringify(sampleIndex, null, 2));\n setIndexStatus('fresh');\n\n // Reload recommendations\n loadRecommendations();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to update index');\n setLoading(false);\n }\n }, [loadRecommendations]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setSearchResults([]);\n return;\n }\n\n const results = engine.search({\n query,\n limit: 10,\n semantic: true,\n });\n\n // Convert SearchResult to ScoredSkill for consistency\n const scoredResults: ScoredSkill[] = results.map(r => ({\n skill: r.skill,\n score: r.relevance,\n reasons: r.matchedTerms.map(term => ({\n category: 'tag' as const,\n description: `Matched: ${term}`,\n weight: 0,\n matched: [term],\n })),\n warnings: [],\n }));\n\n setSearchResults(scoredResults);\n }, [engine]);\n\n const refresh = useCallback(() => {\n loadRecommendations();\n }, [loadRecommendations]);\n\n // Initial load\n useEffect(() => {\n loadRecommendations();\n }, [loadRecommendations]);\n\n return {\n recommendations,\n profile,\n loading,\n error,\n totalScanned,\n indexStatus,\n refresh,\n updateIndex,\n search,\n searchResults,\n };\n}\n","import { useState, useEffect } from 'react';\nimport { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n translateSkill,\n getSupportedTranslationAgents,\n type AgentType,\n} from '@skillkit/core';\nimport { getAllAdapters, getAdapter } from '@skillkit/agents';\nimport { getInstallDir } from '../helpers.js';\n\ntype View = 'skills' | 'agents' | 'preview' | 'result';\n\ninterface InstalledSkill {\n name: string;\n path: string;\n content: string;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Translate({ rows = 24 }: Props) {\n const [view, setView] = useState<View>('skills');\n const [skills, setSkills] = useState<InstalledSkill[]>([]);\n const [agents, setAgents] = useState<{ type: AgentType; name: string }[]>([]);\n const [sel, setSel] = useState(0);\n const [selectedSkill, setSelectedSkill] = useState<InstalledSkill | null>(null);\n const [selectedAgent, setSelectedAgent] = useState<{ type: AgentType; name: string } | null>(null);\n const [preview, setPreview] = useState<string>('');\n const [result, setResult] = useState<{ success: boolean; message: string; path?: string } | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const loadSkills = () => {\n const installDir = getInstallDir(false);\n const foundSkills: InstalledSkill[] = [];\n\n if (existsSync(installDir)) {\n const dirs = readdirSync(installDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n for (const dir of dirs) {\n const skillPath = join(installDir, dir);\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8');\n foundSkills.push({\n name: dir,\n path: skillPath,\n content,\n });\n }\n }\n }\n\n setSkills(foundSkills);\n };\n\n loadSkills();\n }, []);\n\n useEffect(() => {\n const adapters = getAllAdapters();\n const supportedAgents = getSupportedTranslationAgents();\n const agentList = adapters\n .filter(a => supportedAgents.includes(a.type as AgentType))\n .map(a => ({\n type: a.type as AgentType,\n name: a.name,\n }));\n setAgents(agentList);\n }, []);\n\n const currentItems = view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 12);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), currentItems.length - maxVisible));\n const visible = currentItems.slice(start, start + maxVisible);\n\n const generatePreview = (skill: InstalledSkill, agent: { type: AgentType; name: string }) => {\n try {\n const result = translateSkill(skill.content, agent.type, { sourceFilename: 'SKILL.md' });\n return result.content;\n } catch (err) {\n return `Error: ${err instanceof Error ? err.message : 'Translation failed'}`;\n }\n };\n\n const executeTranslation = () => {\n if (!selectedSkill || !selectedAgent) return;\n\n setLoading(true);\n try {\n const translationResult = translateSkill(selectedSkill.content, selectedAgent.type, {\n sourceFilename: 'SKILL.md',\n });\n\n if (!translationResult.success) {\n setResult({\n success: false,\n message: `Translation failed: ${translationResult.warnings.join(', ')}`,\n });\n setLoading(false);\n return;\n }\n\n const adapter = getAdapter(selectedAgent.type);\n const targetDir = adapter?.skillsDir\n ? join(process.cwd(), adapter.skillsDir)\n : join(process.cwd(), `.${selectedAgent.type}/skills/`);\n\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n const filename = translationResult.filename || `${selectedSkill.name}.md`;\n const targetPath = join(targetDir, filename);\n\n writeFileSync(targetPath, translationResult.content, 'utf-8');\n\n setResult({\n success: true,\n message: `Translated ${selectedSkill.name} to ${selectedAgent.name} format`,\n path: targetPath,\n });\n } catch (err) {\n setResult({\n success: false,\n message: `Error: ${err instanceof Error ? err.message : 'Unknown error'}`,\n });\n } finally {\n setLoading(false);\n setView('result');\n }\n };\n\n useInput((_input, key) => {\n if (loading) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(currentItems.length - 1, i + 1));\n else if (key.escape) {\n if (view === 'result') {\n setView('skills');\n setSelectedSkill(null);\n setSelectedAgent(null);\n setResult(null);\n setSel(0);\n } else if (view === 'preview') {\n setView('agents');\n } else if (view === 'agents') {\n setView('skills');\n setSelectedSkill(null);\n }\n }\n else if (key.return) {\n if (view === 'skills' && skills[sel]) {\n setSelectedSkill(skills[sel]);\n setView('agents');\n setSel(0);\n } else if (view === 'agents' && agents[sel]) {\n setSelectedAgent(agents[sel]);\n const previewContent = generatePreview(selectedSkill!, agents[sel]);\n setPreview(previewContent);\n setView('preview');\n } else if (view === 'preview') {\n executeTranslation();\n } else if (view === 'result') {\n setView('skills');\n setSelectedSkill(null);\n setSelectedAgent(null);\n setResult(null);\n setSel(0);\n }\n }\n });\n\n if (view === 'result' && result) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>TRANSLATION {result.success ? 'COMPLETE' : 'FAILED'}</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={result.success ? 'green' : 'red'}>\n {result.success ? '✓' : '✗'} {result.message}\n </Text>\n {result.path && (\n <Text dimColor>Saved to: {result.path}</Text>\n )}\n </Box>\n\n <Box marginTop={2}>\n <Text dimColor>Press Enter or Esc to continue</Text>\n </Box>\n </Box>\n );\n }\n\n if (view === 'preview') {\n const previewLines = preview.split('\\n').slice(0, maxVisible);\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>TRANSLATION PREVIEW</Text>\n <Text dimColor>\n {selectedSkill?.name} → {selectedAgent?.name}\n </Text>\n\n <Box marginTop={1} flexDirection=\"column\" borderStyle=\"single\" paddingX={1}>\n {previewLines.map((line, i) => (\n <Text key={i} dimColor>{line.slice(0, 70)}</Text>\n ))}\n {preview.split('\\n').length > maxVisible && (\n <Text dimColor>... ({preview.split('\\n').length - maxVisible} more lines)</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=confirm translation Esc=back</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'skills' ? 'TRANSLATE SKILL' : 'SELECT TARGET AGENT'}\n </Text>\n\n {view === 'skills' && (\n <Text dimColor>Select a skill to translate to another agent format</Text>\n )}\n\n {view === 'agents' && selectedSkill && (\n <Text dimColor>Translate \"{selectedSkill.name}\" to which agent format?</Text>\n )}\n\n {skills.length === 0 && view === 'skills' && (\n <Box marginTop={1}>\n <Text color=\"yellow\">No skills installed. Install some skills first with 'skillkit install'</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n\n if (view === 'skills') {\n const skill = item as InstalledSkill;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {skill.name}\n </Text>\n );\n } else {\n const agent = item as { type: AgentType; name: string };\n return (\n <Text key={agent.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {agent.name.padEnd(20)} <Text dimColor>({agent.type})</Text>\n </Text>\n );\n }\n })}\n {start + maxVisible < currentItems.length && (\n <Text dimColor> ↓ {currentItems.length - start - maxVisible} more</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'skills'\n ? 'Enter=select skill q=quit'\n : 'Enter=select agent Esc=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n loadContext,\n initContext,\n syncToAgent,\n type ProjectContext,\n type AgentType,\n} from '@skillkit/core';\nimport { getAllAdapters } from '@skillkit/agents';\n\ntype View = 'overview' | 'sync';\n\ninterface AgentItem {\n type: AgentType;\n name: string;\n detected: boolean;\n synced?: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Context({ rows = 24 }: Props) {\n const [view, setView] = useState<View>('overview');\n const [context, setContext] = useState<ProjectContext | null>(null);\n const [loading, setLoading] = useState(true);\n const [initializing, setInitializing] = useState(false);\n const [syncing, setSyncing] = useState(false);\n const [agents, setAgents] = useState<AgentItem[]>([]);\n const [sel, setSel] = useState(0);\n const [message, setMessage] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const projectPath = process.cwd();\n\n useEffect(() => {\n const load = async () => {\n setLoading(true);\n try {\n const ctx = loadContext(projectPath);\n setContext(ctx);\n\n const adapters = getAllAdapters();\n const agentList: AgentItem[] = [];\n for (const a of adapters) {\n const detected = await a.isDetected();\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected,\n synced: ctx?.agents?.synced?.includes(a.type),\n });\n }\n setAgents(agentList);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load context');\n } finally {\n setLoading(false);\n }\n };\n\n load();\n }, [projectPath]);\n\n const maxVisible = Math.max(5, rows - 14);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n const handleInit = () => {\n setInitializing(true);\n setMessage(null);\n setError(null);\n\n try {\n const newContext = initContext(projectPath);\n setContext(newContext);\n setMessage('Context initialized successfully');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize context');\n } finally {\n setInitializing(false);\n }\n };\n\n const handleSync = async (agentType: AgentType) => {\n setSyncing(true);\n setMessage(null);\n setError(null);\n\n try {\n await syncToAgent(agentType, projectPath);\n\n setAgents(prev =>\n prev.map(a =>\n a.type === agentType ? { ...a, synced: true } : a\n )\n );\n\n setMessage(`Synced to ${agentType} successfully`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Sync failed');\n } finally {\n setSyncing(false);\n }\n };\n\n const handleSyncAll = async () => {\n setSyncing(true);\n setMessage(null);\n setError(null);\n\n try {\n const detectedAgents = agents.filter(a => a.detected);\n for (const agent of detectedAgents) {\n await syncToAgent(agent.type, projectPath);\n }\n\n setAgents(prev =>\n prev.map(a =>\n a.detected ? { ...a, synced: true } : a\n )\n );\n\n setMessage(`Synced to ${detectedAgents.length} agents`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Sync failed');\n } finally {\n setSyncing(false);\n }\n };\n\n useInput((input, key) => {\n if (loading || initializing || syncing) return;\n\n if (view === 'sync') {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (key.return && agents[sel]) {\n handleSync(agents[sel].type);\n }\n else if (key.escape) {\n setView('overview');\n setSel(0);\n }\n else if (input === 'a') {\n handleSyncAll();\n }\n } else if (view === 'overview') {\n if (input === 'i') handleInit();\n else if (input === 's') {\n setView('sync');\n setSel(0);\n }\n }\n });\n\n if (loading) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>PROJECT CONTEXT</Text>\n <Text dimColor>Loading...</Text>\n </Box>\n );\n }\n\n if (view === 'sync') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC TO AGENTS</Text>\n <Text dimColor>Select an agent to sync your project context</Text>\n\n {message && <Text color=\"green\">{'✓'} {message}</Text>}\n {error && <Text color=\"red\">{'✗'} {error}</Text>}\n {syncing && <Text dimColor>Syncing...</Text>}\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const status = agent.synced\n ? '(synced)'\n : agent.detected\n ? '(ready)'\n : '(not detected)';\n const statusColor = agent.synced ? 'green' : agent.detected ? 'yellow' : 'gray';\n\n return (\n <Text key={agent.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {agent.name.padEnd(20)}\n <Text color={statusColor}>{status}</Text>\n </Text>\n );\n })}\n {start + maxVisible < agents.length && (\n <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync to agent a=sync all detected Esc=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n const stack = context?.stack;\n const detectedCount = agents.filter(a => a.detected).length;\n const syncedCount = agents.filter(a => a.synced).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>PROJECT CONTEXT</Text>\n\n {message && <Text color=\"green\">{'✓'} {message}</Text>}\n {error && <Text color=\"red\">{'✗'} {error}</Text>}\n {initializing && <Text dimColor>Initializing...</Text>}\n\n {!context && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">No context found.</Text>\n <Text dimColor>Press 'i' to initialize and analyze your project.</Text>\n </Box>\n )}\n\n {context && (\n <>\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Project:</Text>\n <Text> Name: {context.project?.name || 'Unknown'}</Text>\n <Text> Type: {context.project?.type || 'Not detected'}</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Stack:</Text>\n {stack?.languages && stack.languages.length > 0 && (\n <Text> Languages: {stack.languages.map(l => l.name).join(', ')}</Text>\n )}\n {stack?.frameworks && stack.frameworks.length > 0 && (\n <Text> Frameworks: {stack.frameworks.map(f => f.name).join(', ')}</Text>\n )}\n {stack?.libraries && stack.libraries.length > 0 && (\n <Text> Libraries: {stack.libraries.slice(0, 5).map(l => l.name).join(', ')}{stack.libraries.length > 5 ? '...' : ''}</Text>\n )}\n {(!stack?.languages?.length && !stack?.frameworks?.length) && (\n <Text dimColor> No stack detected. Press 'i' to re-analyze.</Text>\n )}\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Agents:</Text>\n <Text> Detected: {detectedCount} agents</Text>\n <Text> Synced: {syncedCount} agents</Text>\n {detectedCount > 0 && (\n <Text dimColor> ({agents.filter(a => a.detected).map(a => a.name).join(', ')})</Text>\n )}\n </Box>\n </>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Actions:</Text>\n <Text dimColor> [i] Initialize/refresh context</Text>\n <Text dimColor> [s] Sync to agents</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>i=init context s=sync to agents q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface HeaderProps {\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function Header({ title, subtitle, count }: HeaderProps) {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box justifyContent=\"space-between\">\n <Text color={colors.primary} bold>\n {title.toUpperCase()}\n </Text>\n {count !== undefined && (\n <Text color={colors.secondaryDim}>\n {symbols.star} {count}\n </Text>\n )}\n </Box>\n {subtitle && (\n <Text color={colors.secondaryDim} dimColor>\n {subtitle}\n </Text>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport interface SkillItem {\n name: string;\n description?: string;\n source?: string;\n installs?: number;\n enabled?: boolean;\n}\n\ninterface SkillListProps {\n skills: SkillItem[];\n selectedIndex: number;\n showInstalls?: boolean;\n showRank?: boolean;\n showSource?: boolean;\n maxVisible?: number;\n}\n\nfunction formatInstalls(count: number): string {\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1)}K`;\n }\n return String(count);\n}\n\nexport function SkillList({\n skills,\n selectedIndex,\n showInstalls = false,\n showRank = false,\n showSource = true,\n maxVisible = 10,\n}: SkillListProps) {\n if (skills.length === 0) {\n return (\n <Box>\n <Text color={colors.secondaryDim} dimColor>\n No skills found\n </Text>\n </Box>\n );\n }\n\n const startIndex = Math.max(0, selectedIndex - Math.floor(maxVisible / 2));\n const visibleSkills = skills.slice(startIndex, startIndex + maxVisible);\n const actualStartIndex = startIndex;\n\n return (\n <Box flexDirection=\"column\">\n {showRank && (\n <Box marginBottom={1}>\n <Text color={colors.secondaryDim}>\n {' # SKILL'}\n {showSource && ' SOURCE'}\n {showInstalls && ' INSTALLS'}\n </Text>\n </Box>\n )}\n\n {visibleSkills.map((skill, idx) => {\n const realIndex = actualStartIndex + idx;\n const isSelected = realIndex === selectedIndex;\n const skillName = skill.name.padEnd(28).slice(0, 28);\n const sourceName = skill.source ? skill.source.slice(0, 25) : '';\n\n return (\n <Box key={`${skill.source}-${skill.name}`}>\n <Text\n color={isSelected ? colors.primary : colors.secondary}\n bold={isSelected}\n inverse={isSelected}\n >\n {isSelected ? symbols.pointer : ' '}\n {showRank ? String(realIndex + 1).padStart(2, ' ') : ''}\n {' '}\n {skillName}\n </Text>\n {showSource && (\n <Text color={colors.secondaryDim} dimColor={!isSelected}>\n {' '}{sourceName}\n </Text>\n )}\n {showInstalls && skill.installs !== undefined && (\n <Text color={colors.secondaryDim}>\n {formatInstalls(skill.installs).padStart(8)}\n </Text>\n )}\n </Box>\n );\n })}\n\n {skills.length > maxVisible && (\n <Box marginTop={1}>\n <Text color={colors.secondaryDim} dimColor>\n Showing {startIndex + 1}-{Math.min(startIndex + maxVisible, skills.length)} of {skills.length}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Shortcut {\n key: string;\n label: string;\n}\n\ninterface StatusBarProps {\n shortcuts: Shortcut[];\n message?: string;\n}\n\nexport function StatusBar({ shortcuts, message }: StatusBarProps) {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={colors.borderDim}\n borderTop\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n justifyContent=\"space-between\"\n >\n <Box gap={2}>\n {shortcuts.map((shortcut, idx) => (\n <Box key={idx} gap={1}>\n <Text color={colors.primary} bold>\n {shortcut.key}\n </Text>\n <Text color={colors.secondaryDim}>{shortcut.label}</Text>\n </Box>\n ))}\n </Box>\n\n {message && (\n <Text color={colors.success}>\n {symbols.check} {message}\n </Text>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport TextInput from 'ink-text-input';\nimport { colors } from '../theme.js';\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n isFocused?: boolean;\n}\n\nexport function SearchInput({\n value,\n onChange,\n placeholder = 'Search skills...',\n isFocused = false,\n}: SearchInputProps) {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={isFocused ? colors.primary : colors.borderDim}\n paddingX={1}\n >\n <Text color={colors.secondaryDim}>/ </Text>\n {isFocused ? (\n <TextInput\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n />\n ) : (\n <Text color={value ? colors.secondary : colors.secondaryDim}>\n {value || placeholder}\n </Text>\n )}\n <Box flexGrow={1} />\n <Text color={colors.secondaryDim}>/</Text>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useInput, useApp } from 'ink';\nimport type { Screen } from '../App.js';\n\ninterface UseKeyboardOptions {\n onNavigate?: (screen: Screen) => void;\n onSelect?: () => void;\n onSearch?: () => void;\n onInstall?: () => void;\n onBack?: () => void;\n onUp?: () => void;\n onDown?: () => void;\n disabled?: boolean;\n}\n\nexport function useKeyboard(options: UseKeyboardOptions = {}) {\n const { exit } = useApp();\n\n useInput((input, key) => {\n if (options.disabled) return;\n\n if (input === 'q' || (key.ctrl && input === 'c')) {\n exit();\n return;\n }\n\n if (key.escape && options.onBack) {\n options.onBack();\n return;\n }\n\n if (key.return && options.onSelect) {\n options.onSelect();\n return;\n }\n\n if (key.upArrow && options.onUp) {\n options.onUp();\n return;\n }\n\n if (key.downArrow && options.onDown) {\n options.onDown();\n return;\n }\n\n if (input === '/' && options.onSearch) {\n options.onSearch();\n return;\n }\n\n if (input === 'i' && options.onInstall) {\n options.onInstall();\n return;\n }\n\n if (input === 'h' && options.onNavigate) {\n options.onNavigate('home');\n } else if (input === 'b' && options.onNavigate) {\n options.onNavigate('browse');\n } else if (input === 'l' && options.onNavigate) {\n options.onNavigate('installed');\n } else if (input === 's' && options.onNavigate) {\n options.onNavigate('sync');\n } else if (input === ',' && options.onNavigate) {\n options.onNavigate('settings');\n }\n });\n}\n\nexport function useListNavigation(listLength: number, initialIndex = 0) {\n const [selectedIndex, setSelectedIndex] = useState(initialIndex);\n\n useEffect(() => {\n if (selectedIndex >= listLength && listLength > 0) {\n setSelectedIndex(listLength - 1);\n }\n }, [listLength, selectedIndex]);\n\n const moveUp = useCallback(() => {\n setSelectedIndex((prev) => Math.max(0, prev - 1));\n }, []);\n\n const moveDown = useCallback(() => {\n setSelectedIndex((prev) => Math.min(listLength - 1, prev + 1));\n }, [listLength]);\n\n const reset = useCallback(() => {\n setSelectedIndex(0);\n }, []);\n\n return { selectedIndex, setSelectedIndex, moveUp, moveDown, reset };\n}\n"],"mappings":"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","names":["useState","Box","Text","useInput","Box","Text","jsx","jsxs","Box","Text","useState","join","Box","Text","useState","useEffect","rmSync","detectProvider","getAdapter","jsx","jsxs","useState","detectProvider","getAdapter","join","Box","Text","useState","Box","Text","useInput","useState","useEffect","useState","rmSync","useEffect","jsx","jsxs","useState","useInput","Box","Text","useState","useEffect","Box","Text","useInput","getAllAdapters","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","Box","Text","useInput","jsx","jsxs","useState","useInput","Box","Text","useState","existsSync","mkdirSync","cpSync","rmSync","join","Box","Text","useInput","useState","useCallback","useEffect","existsSync","readFileSync","mkdirSync","join","detectProvider","detectAgent","getAdapter","getAllAdapters","jsx","jsxs","useState","getAllAdapters","detectProvider","detectAgent","getAdapter","existsSync","mkdirSync","join","rmSync","cpSync","useInput","Box","Text","useState","useEffect","existsSync","readFileSync","writeFileSync","mkdirSync","join","Box","Text","useInput","getAllAdapters","getAdapter","jsx","jsxs","useState","useEffect","existsSync","join","readFileSync","getAllAdapters","result","getAdapter","mkdirSync","writeFileSync","useInput","Box","Text","useState","useEffect","Box","Text","useInput","getAllAdapters","jsx","jsxs","useState","useEffect","useInput","Box","Text","jsx","jsxs","useState","useInput","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","useCallback","useEffect","useInput","useApp","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/App.tsx","../src/components/Sidebar.tsx","../src/theme.ts","../src/screens/Home.tsx","../src/screens/Browse.tsx","../src/hooks/useMarketplace.ts","../src/helpers.ts","../src/screens/Installed.tsx","../src/hooks/useSkills.ts","../src/screens/Sync.tsx","../src/screens/Settings.tsx","../src/screens/Recommend.tsx","../src/hooks/useRecommend.ts","../src/screens/Translate.tsx","../src/screens/Context.tsx","../src/screens/Workflow.tsx","../src/screens/Execute.tsx","../src/screens/History.tsx","../src/screens/Marketplace.tsx","../src/screens/Memory.tsx","../src/components/Header.tsx","../src/components/SkillList.tsx","../src/components/StatusBar.tsx","../src/components/SearchInput.tsx","../src/hooks/useKeyboard.ts","../src/hooks/useMemory.ts"],"sourcesContent":["import { render } from 'ink';\nimport { App } from './App.js';\n\nexport function startTUI(): Promise<void> {\n process.stdout.write('\\x1B[2J\\x1B[0f');\n\n const { waitUntilExit, clear } = render(<App />, {\n exitOnCtrlC: true,\n });\n\n return waitUntilExit().then(() => {\n clear();\n });\n}\n\n// Re-export types and components for external use\nexport type { Screen } from './App.js';\nexport { App } from './App.js';\nexport * from './components/index.js';\nexport * from './screens/index.js';\nexport * from './hooks/index.js';\nexport * from './theme.js';\n","import { useState } from 'react';\nimport { Box, Text, useInput, useApp, useStdout } from 'ink';\nimport { Sidebar } from './components/Sidebar.js';\nimport { Home } from './screens/Home.js';\nimport { Browse } from './screens/Browse.js';\nimport { Installed } from './screens/Installed.js';\nimport { Sync } from './screens/Sync.js';\nimport { Settings } from './screens/Settings.js';\nimport { Recommend } from './screens/Recommend.js';\nimport { Translate } from './screens/Translate.js';\nimport { Context } from './screens/Context.js';\nimport { Workflow } from './screens/Workflow.js';\nimport { Execute } from './screens/Execute.js';\nimport { History } from './screens/History.js';\nimport { Marketplace } from './screens/Marketplace.js';\nimport { Memory } from './screens/Memory.js';\n\nexport type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context' | 'workflow' | 'execute' | 'history' | 'marketplace' | 'memory';\n\nexport function App() {\n const [screen, setScreen] = useState<Screen>('home');\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const cols = stdout?.columns || 80;\n const rows = stdout?.rows || 24;\n const showSidebar = cols >= 70;\n\n const NAV_KEYS: Record<string, Screen> = {\n h: 'home',\n m: 'marketplace',\n b: 'browse',\n w: 'workflow',\n x: 'execute',\n y: 'history',\n r: 'recommend',\n t: 'translate',\n c: 'context',\n e: 'memory',\n i: 'installed',\n s: 'sync',\n ',': 'settings',\n };\n\n useInput((input, key) => {\n if (input === 'q') {\n exit();\n return;\n }\n if (key.escape) {\n setScreen('home');\n return;\n }\n const targetScreen = NAV_KEYS[input];\n if (targetScreen) {\n setScreen(targetScreen);\n }\n });\n\n const renderScreen = () => {\n switch (screen) {\n case 'home': return <Home onNavigate={setScreen} cols={cols} rows={rows} />;\n case 'browse': return <Browse cols={cols} rows={rows} />;\n case 'installed': return <Installed cols={cols} rows={rows} />;\n case 'sync': return <Sync cols={cols} rows={rows} />;\n case 'settings': return <Settings cols={cols} rows={rows} />;\n case 'recommend': return <Recommend cols={cols} rows={rows} />;\n case 'translate': return <Translate cols={cols} rows={rows} />;\n case 'context': return <Context cols={cols} rows={rows} />;\n case 'workflow': return <Workflow cols={cols} rows={rows} />;\n case 'execute': return <Execute cols={cols} rows={rows} />;\n case 'history': return <History cols={cols} rows={rows} />;\n case 'marketplace': return <Marketplace cols={cols} rows={rows} />;\n case 'memory': return <Memory cols={cols} rows={rows} />;\n }\n };\n\n const contentHeight = rows - 2;\n\n return (\n <Box flexDirection=\"column\" height={rows}>\n <Box flexDirection=\"row\" height={contentHeight}>\n {showSidebar && <Sidebar screen={screen} onNavigate={setScreen} />}\n <Box flexDirection=\"column\" flexGrow={1} marginLeft={1}>\n {renderScreen()}\n </Box>\n </Box>\n <Box>\n <Text dimColor>h Home m Market b Browse i Inst w Wflow x Exec y Hist r Rec t Trans c Ctx e Mem s Sync , Cfg q Quit</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface SidebarProps {\n screen: Screen;\n onNavigate: (screen: Screen) => void;\n isCompact?: boolean;\n}\n\nconst NAV: { id: Screen; label: string; key: string }[] = [\n // Discovery\n { id: 'home', label: 'Home', key: 'h' },\n { id: 'marketplace', label: 'Marketplace', key: 'm' },\n { id: 'browse', label: 'Browse', key: 'b' },\n // Execution\n { id: 'workflow', label: 'Workflows', key: 'w' },\n { id: 'execute', label: 'Execute', key: 'x' },\n { id: 'history', label: 'History', key: 'y' },\n // Tools\n { id: 'recommend', label: 'Recommend', key: 'r' },\n { id: 'translate', label: 'Translate', key: 't' },\n { id: 'context', label: 'Context', key: 'c' },\n { id: 'memory', label: 'Memory', key: 'e' },\n // Management\n { id: 'installed', label: 'Installed', key: 'i' },\n { id: 'sync', label: 'Sync', key: 's' },\n { id: 'settings', label: 'Config', key: ',' },\n];\n\nexport function Sidebar({ screen }: SidebarProps) {\n return (\n <Box flexDirection=\"column\" width={14} borderStyle=\"single\" paddingX={1}>\n <Text bold color={colors.primary}>SkillKit</Text>\n\n {/* Discovery (0-2) */}\n {NAV.slice(0, 3).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {/* Execution (3-5) */}\n {NAV.slice(3, 6).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {/* Tools (6-9) */}\n {NAV.slice(6, 10).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Text> </Text>\n\n {/* Management (10-12) */}\n {NAV.slice(10).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Box flexGrow={1} />\n\n <Text dimColor>? Help</Text>\n <Text dimColor>q Quit</Text>\n </Box>\n );\n}\n","import chalk from 'chalk';\n\nexport const colors = {\n primary: 'white',\n secondary: 'white',\n secondaryDim: 'gray',\n success: 'white',\n danger: 'white',\n warning: 'white',\n background: 'bgBlack',\n borderDim: 'gray',\n};\n\nexport const symbols = {\n pointer: chalk.white('❯'),\n bullet: '●',\n checkboxOn: chalk.white('✔'),\n checkboxOff: chalk.dim('✖'),\n check: chalk.white('✓'),\n star: '★',\n spinner: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n arrowUp: '↑',\n arrowDown: '↓',\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n};\n\nexport const logo = `\n███████╗██╗ ██╗██╗██╗ ██╗ ██╗ ██╗██╗████████╗\n██╔════╝██║ ██╔╝██║██║ ██║ ██║ ██╔╝██║╚══██╔══╝\n███████╗█████╔╝ ██║██║ ██║ █████╔╝ ██║ ██║\n╚════██║██╔═██╗ ██║██║ ██║ ██╔═██╗ ██║ ██║\n███████║██║ ██╗██║███████╗███████╗██║ ██╗██║ ██║\n╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝\n`;\n","import { useState, useEffect } from 'react';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { Box, Text } from 'ink';\nimport { colors, logo } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface HomeProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst CHARS = '01█▓▒░╔╗╚╝║═';\n\nconst logoSmall = `\n╔═╗╦╔═╦╦ ╦ ╦╔═╦╔╦╗\n╚═╗╠╩╗║║ ║ ╠╩╗║ ║\n╚═╝╩ ╩╩╩═╝╩═╝╩ ╩╩ ╩\n`.trim();\n\nfunction getVersion(): string {\n try {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const packageJsonPath = join(__dirname, '../../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return packageJson.version || '1.2.0';\n } catch {\n return '1.2.0';\n }\n}\n\nfunction scramble(target: string, progress: number): string {\n return target.split('\\n').map(line => {\n return line.split('').map((char, i) => {\n if (char === ' ') return char;\n if (progress > (i / line.length) * 100) return char;\n return CHARS[Math.floor(Math.random() * CHARS.length)];\n }).join('');\n }).join('\\n');\n}\n\nexport function Home({ cols = 80, rows = 24 }: HomeProps) {\n const [progress, setProgress] = useState(0);\n const [display, setDisplay] = useState('');\n const version = getVersion();\n\n const useLogo = cols < 80 ? logoSmall : logo;\n\n useEffect(() => {\n if (progress >= 100) {\n setDisplay(useLogo);\n return;\n }\n const t = setInterval(() => {\n setProgress(p => {\n const next = p + 12;\n setDisplay(scramble(useLogo, next));\n return next;\n });\n }, 35);\n return () => clearInterval(t);\n }, [progress, useLogo]);\n\n return (\n <Box flexDirection=\"column\">\n <Text color={colors.primary}>{display || useLogo}</Text>\n\n <Box marginTop={1}>\n <Text>Manage AI agent skills from your terminal.</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Quick Actions:</Text>\n <Text dimColor> [b] Browse skills marketplace</Text>\n <Text dimColor> [r] Get smart recommendations</Text>\n <Text dimColor> [t] Translate skills between agents</Text>\n <Text dimColor> [c] Manage project context</Text>\n <Text dimColor> [l] View installed skills</Text>\n <Text dimColor> [s] Sync skills across agents</Text>\n </Box>\n\n {rows >= 18 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Navigation:</Text>\n <Text dimColor> ↑↓ Navigate lists</Text>\n <Text dimColor> Enter Select / Confirm</Text>\n <Text dimColor> Esc Go back / Home</Text>\n <Text dimColor> q Quit</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>v{version} - Works with 17 AI agents</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useMarketplace } from '../hooks/useMarketplace.js';\nimport { detectProvider, type AgentType, type SkillMetadata } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\ntype View = 'repos' | 'skills' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Browse({ rows = 24 }: Props) {\n const { repos, skills, loading, currentRepo, fetchRepo, fetchAllRepos } = useMarketplace();\n const [view, setView] = useState<View>('repos');\n const [sel, setSel] = useState(0);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'repos' ? repos : view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n setInstalling(skillName);\n setMessage(null);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n if (!agentType) {\n setView('skills');\n }\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'repos' && repos[sel]) {\n fetchRepo(repos[sel].source);\n setView('skills');\n setSel(0);\n setMessage(null);\n } else if (view === 'skills' && skills[sel]?.source) {\n installSkill(skills[sel].name, skills[sel].source);\n } else if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n }\n }\n else if (input === 'm' && view === 'skills' && skills[sel]?.source) {\n showAgentSelection(skills[sel].name, skills[sel].source!);\n }\n else if (input === 'r') {\n if (view === 'skills') {\n setView('repos');\n setSel(0);\n setMessage(null);\n } else if (view === 'agents') {\n setView('skills');\n setSel(0);\n }\n }\n else if (input === 'a' && view === 'repos') {\n fetchAllRepos();\n setView('skills');\n setSel(0);\n }\n });\n\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n <Text dimColor>(All agents supported - directory created if needed)</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install to selected agent r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>{view === 'repos' ? 'REPOSITORIES' : 'SKILLS'}</Text>\n {loading && <Text dimColor>Loading {currentRepo}...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n <Text dimColor>{items.length} items</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const name = view === 'repos'\n ? (item as typeof repos[0]).name\n : (item as typeof skills[0]).name;\n const src = view === 'repos'\n ? (item as typeof repos[0]).source\n : (item as typeof skills[0]).source || '';\n return (\n <Text key={src + name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{name.padEnd(25)} <Text color={colors.secondaryDim}>{src}</Text>\n </Text>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'repos'\n ? 'Enter=fetch a=all q=quit'\n : 'Enter=quick install m=choose agent r=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { detectProvider } from '@skillkit/core';\nimport type { SkillItem } from '../components/SkillList.js';\n\nexport interface RepoInfo {\n source: string;\n name: string;\n}\n\nconst POPULAR_REPOS: RepoInfo[] = [\n { source: 'anthropics/skills', name: 'Anthropic Official' },\n { source: 'vercel-labs/agent-skills', name: 'Vercel Labs' },\n { source: 'expo/skills', name: 'Expo / React Native' },\n { source: 'remotion-dev/skills', name: 'Remotion Video' },\n { source: 'ComposioHQ/awesome-claude-skills', name: 'Composio Awesome' },\n { source: 'travisvn/awesome-claude-skills', name: 'Travis Awesome' },\n { source: 'mhattingpete/claude-skills-marketplace', name: 'Skills Marketplace' },\n { source: 'coreyhaines31/marketingskills', name: 'Marketing Skills' },\n { source: 'obra/superpowers', name: 'Superpowers TDD' },\n { source: 'softaworks/agent-toolkit', name: 'Softaworks Toolkit' },\n { source: 'wshobson/agents', name: 'Dev Patterns' },\n { source: 'langgenius/dify', name: 'Dify Frontend' },\n { source: 'trailofbits/skills', name: 'Trail of Bits Security' },\n { source: 'better-auth/skills', name: 'Better Auth' },\n { source: 'onmax/nuxt-skills', name: 'Nuxt / Vue' },\n { source: 'hyf0/vue-skills', name: 'Vue Best Practices' },\n { source: 'jezweb/claude-skills', name: 'Cloudflare / TanStack' },\n { source: 'elysiajs/skills', name: 'ElysiaJS / Bun' },\n { source: 'kadajett/agent-nestjs-skills', name: 'NestJS' },\n { source: 'callstackincubator/agent-skills', name: 'React Native' },\n { source: 'cloudai-x/threejs-skills', name: 'Three.js' },\n { source: 'emalorenzo/three-agent-skills', name: 'Three.js Advanced' },\n { source: 'dimillian/skills', name: 'SwiftUI iOS' },\n { source: 'stripe/ai', name: 'Stripe Payments' },\n { source: 'waynesutton/convexskills', name: 'Convex Backend' },\n { source: 'kepano/obsidian-skills', name: 'Obsidian Notes' },\n { source: 'jimliu/baoyu-skills', name: 'Baoyu Tools' },\n { source: 'giuseppe-trisciuoglio/developer-kit', name: 'Shadcn / Radix' },\n { source: 'openrouterteam/agent-skills', name: 'OpenRouter SDK' },\n { source: 'intellectronica/agent-skills', name: 'Context7' },\n];\n\ninterface FetchedSkill {\n name: string;\n source: string;\n repoName: string;\n description?: string;\n}\n\ninterface UseMarketplaceResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n totalCount: number;\n repos: RepoInfo[];\n currentRepo: string | null;\n refresh: () => void;\n search: (query: string) => void;\n fetchRepo: (source: string) => Promise<void>;\n fetchAllRepos: () => Promise<void>;\n}\n\nexport function useMarketplace(): UseMarketplaceResult {\n const [allSkills, setAllSkills] = useState<FetchedSkill[]>([]);\n const [filteredSkills, setFilteredSkills] = useState<FetchedSkill[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [currentRepo, setCurrentRepo] = useState<string | null>(null);\n const [fetchedRepos, setFetchedRepos] = useState<Set<string>>(new Set());\n\n const fetchRepo = useCallback(async (source: string) => {\n if (fetchedRepos.has(source)) return;\n\n setLoading(true);\n setError(null);\n setCurrentRepo(source);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n throw new Error(`Could not detect provider for: ${source}`);\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n throw new Error(result.error || 'Failed to fetch skills');\n }\n\n const repoName = POPULAR_REPOS.find(r => r.source === source)?.name || source;\n const newSkills: FetchedSkill[] = result.discoveredSkills.map(skill => ({\n name: skill.name,\n source: source,\n repoName: repoName,\n description: undefined,\n }));\n\n setAllSkills(prev => {\n const updated = [...prev, ...newSkills];\n return updated.sort((a, b) => a.name.localeCompare(b.name));\n });\n\n setFetchedRepos(prev => new Set([...prev, source]));\n\n if (result.tempRoot) {\n const { rmSync } = await import('node:fs');\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch repository');\n } finally {\n setLoading(false);\n setCurrentRepo(null);\n }\n }, [fetchedRepos]);\n\n const fetchAllRepos = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n for (const repo of POPULAR_REPOS) {\n if (!fetchedRepos.has(repo.source)) {\n setCurrentRepo(repo.source);\n try {\n await fetchRepo(repo.source);\n } catch {\n }\n }\n }\n\n setLoading(false);\n setCurrentRepo(null);\n }, [fetchRepo, fetchedRepos]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setFilteredSkills(allSkills);\n } else {\n const lowerQuery = query.toLowerCase();\n setFilteredSkills(\n allSkills.filter(\n (s) =>\n s.name.toLowerCase().includes(lowerQuery) ||\n s.source.toLowerCase().includes(lowerQuery) ||\n s.repoName.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery)\n )\n );\n }\n }, [allSkills]);\n\n const refresh = useCallback(() => {\n setFetchedRepos(new Set());\n setAllSkills([]);\n setFilteredSkills([]);\n }, []);\n\n useEffect(() => {\n setFilteredSkills(allSkills);\n }, [allSkills]);\n\n const skills: SkillItem[] = filteredSkills.map((s) => ({\n name: s.name,\n description: s.description || s.repoName,\n source: s.source,\n }));\n\n return {\n skills,\n loading,\n error,\n totalCount: allSkills.length,\n repos: POPULAR_REPOS,\n currentRepo,\n refresh,\n search,\n fetchRepo,\n fetchAllRepos,\n };\n}\n","// Re-export commonly used functions with proper adapters\nimport {\n loadConfig,\n getSearchDirs as coreGetSearchDirs,\n getInstallDir as coreGetInstallDir,\n saveSkillMetadata as coreSaveSkillMetadata,\n} from '@skillkit/core';\nimport { getAdapter } from '@skillkit/agents';\nimport type { AgentType, AgentAdapterInfo } from '@skillkit/core';\n\n// Re-export for direct use\nexport { coreSaveSkillMetadata as saveSkillMetadata };\n\nexport function getSearchDirs(agentType?: AgentType): string[] {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetSearchDirs(adapterInfo);\n}\n\nexport function getInstallDir(global = false, agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetInstallDir(adapterInfo, global);\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useSkills } from '../hooks/useSkills.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Installed({ rows = 24 }: Props) {\n const { skills, loading, refresh, remove } = useSkills();\n const [sel, setSel] = useState(0);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), skills.length - maxVisible));\n const visible = skills.slice(start, start + maxVisible);\n\n useInput((input, key) => {\n if (loading) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(skills.length - 1, i + 1));\n else if (input === 'r') refresh();\n else if (input === 'd' && skills[sel]) remove(skills[sel].name);\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>INSTALLED SKILLS</Text>\n <Text dimColor>{skills.length} skills</Text>\n\n {loading && <Text>Loading...</Text>}\n\n {!loading && skills.length === 0 && (\n <Text dimColor>No skills installed. Press b to browse.</Text>\n )}\n\n {!loading && skills.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((skill, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{skill.name.padEnd(30)} {skill.source && <Text color={colors.secondaryDim}>{skill.source}</Text>}\n </Text>\n );\n })}\n {start + maxVisible < skills.length && <Text dimColor> ↓ {skills.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>r=refresh d=delete q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { findAllSkills } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\nimport type { SkillItem } from '../components/SkillList.js';\n\ninterface UseSkillsResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n refresh: () => void;\n remove: (name: string) => Promise<void>;\n}\n\nexport function useSkills(): UseSkillsResult {\n const [skills, setSkills] = useState<SkillItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = () => {\n setLoading(true);\n setError(null);\n\n try {\n const searchDirs = getSearchDirs();\n const foundSkills = findAllSkills(searchDirs);\n\n const skillItems: SkillItem[] = foundSkills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.metadata?.source,\n enabled: s.enabled,\n }));\n\n setSkills(skillItems);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load skills');\n } finally {\n setLoading(false);\n }\n };\n\n const remove = async (name: string) => {\n const { rmSync } = await import('node:fs');\n const foundSkill = skills.find(s => s.name === name);\n if (foundSkill) {\n const searchDirs = getSearchDirs();\n const allSkills = findAllSkills(searchDirs);\n const skill = allSkills.find(s => s.name === name);\n if (skill) {\n rmSync(skill.path, { recursive: true, force: true });\n refresh();\n }\n }\n };\n\n useEffect(() => {\n refresh();\n }, []);\n\n return { skills, loading, error, refresh, remove };\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { getAllAdapters } from '@skillkit/agents';\n\ninterface AgentStatus {\n name: string;\n type: string;\n detected: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Sync({ rows = 24 }: Props) {\n const [agents, setAgents] = useState<AgentStatus[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [syncing, setSyncing] = useState(false);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n useEffect(() => {\n (async () => {\n const adapters = getAllAdapters();\n const s: AgentStatus[] = [];\n for (const a of adapters) {\n s.push({ name: a.name, type: a.type, detected: await a.isDetected() });\n }\n setAgents(s);\n setLoading(false);\n })();\n }, []);\n\n useInput((input, key) => {\n if (loading || syncing) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (input === 'a') { setSyncing(true); setTimeout(() => setSyncing(false), 500); }\n else if (key.return && agents[sel]?.detected) { setSyncing(true); setTimeout(() => setSyncing(false), 300); }\n });\n\n const detected = agents.filter(a => a.detected).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC SKILLS</Text>\n <Text dimColor>{detected}/{agents.length} agents detected</Text>\n\n {loading && <Text>Detecting agents...</Text>}\n {syncing && <Text>Syncing...</Text>}\n\n {!loading && !syncing && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={agent.type} inverse={isSel} dimColor={!agent.detected}>\n {isSel ? symbols.pointer : ' '}{agent.detected ? symbols.checkboxOn : symbols.checkboxOff} {agent.name.padEnd(20)} {agent.detected ? 'Ready' : 'N/A'}\n </Text>\n );\n })}\n {start + maxVisible < agents.length && <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync a=all q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nconst SETTINGS = [\n { id: 'agent', label: 'Default Agent', value: 'auto-detect' },\n { id: 'sync', label: 'Auto Sync', value: 'disabled' },\n { id: 'cache', label: 'Cache Dir', value: '~/.skillkit/cache' },\n];\n\nexport function Settings({}: Props) {\n const [sel, setSel] = useState(0);\n\n useInput((_, key) => {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(SETTINGS.length - 1, i + 1));\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SETTINGS</Text>\n <Text dimColor>Configure SkillKit</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {SETTINGS.map((s, i) => {\n const isSel = i === sel;\n return (\n <Text key={s.id} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{s.label.padEnd(16)} <Text color={colors.secondaryDim}>{s.value}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=edit q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useRecommend } from '../hooks/useRecommend.js';\nimport { detectProvider, type AgentType, type SkillMetadata } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\ntype View = 'recommendations' | 'search' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Recommend({ rows = 24 }: Props) {\n const {\n recommendations,\n profile,\n loading,\n error,\n totalScanned,\n indexStatus,\n refresh,\n updateIndex,\n search,\n searchResults,\n } = useRecommend();\n\n const [view, setView] = useState<View>('recommendations');\n const [sel, setSel] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchMode, setSearchMode] = useState(false);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'recommendations'\n ? recommendations\n : view === 'search'\n ? searchResults\n : agents;\n\n const maxVisible = Math.max(5, rows - 10);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n if (!source) {\n setMessage('Error: No source available for this skill');\n return;\n }\n\n setInstalling(skillName);\n setMessage(null);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found in repo`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n setView('recommendations');\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n // Handle search input mode\n if (searchMode) {\n if (key.escape) {\n setSearchMode(false);\n setSearchQuery('');\n setView('recommendations');\n return;\n }\n if (key.return) {\n setSearchMode(false);\n if (searchQuery.trim()) {\n search(searchQuery);\n setView('search');\n setSel(0);\n }\n return;\n }\n if (key.backspace || key.delete) {\n setSearchQuery(q => q.slice(0, -1));\n return;\n }\n if (input && !key.ctrl && !key.meta) {\n setSearchQuery(q => q + input);\n return;\n }\n return;\n }\n\n // Navigation\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n } else if ((view === 'recommendations' || view === 'search') && items[sel]) {\n const skill = items[sel] as typeof recommendations[0];\n if (skill.skill.source) {\n installSkill(skill.skill.name, skill.skill.source);\n }\n }\n }\n // Actions\n else if (input === '/') {\n setSearchMode(true);\n setSearchQuery('');\n }\n else if (input === 'm' && (view === 'recommendations' || view === 'search') && items[sel]) {\n const skill = items[sel] as typeof recommendations[0];\n if (skill.skill.source) {\n showAgentSelection(skill.skill.name, skill.skill.source);\n }\n }\n else if (input === 'u') {\n updateIndex();\n }\n else if (input === 'r' && view !== 'recommendations') {\n if (view === 'agents') {\n setView('recommendations');\n } else {\n setView('recommendations');\n setSearchQuery('');\n }\n setSel(0);\n }\n else if (input === 'R') {\n refresh();\n }\n });\n\n // Agent selection view\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n // Score bar helper\n const getScoreBar = (score: number): string => {\n const filled = Math.round(score / 10);\n const empty = 10 - filled;\n return '█'.repeat(filled) + '░'.repeat(empty);\n };\n\n const getScoreColor = (score: number) => {\n if (score >= 70) return 'green';\n if (score >= 50) return 'yellow';\n return 'gray';\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'search' ? `SEARCH: \"${searchQuery}\"` : 'RECOMMENDATIONS'}\n </Text>\n\n {/* Status bar */}\n {loading && <Text dimColor>Loading...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n\n {/* Search input */}\n {searchMode && (\n <Box marginTop={1}>\n <Text>Search: {searchQuery}</Text>\n <Text dimColor>█</Text>\n </Box>\n )}\n\n {/* Index status warning */}\n {indexStatus === 'missing' && !loading && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">No skill index found.</Text>\n <Text dimColor>Press 'u' to update index from known sources.</Text>\n </Box>\n )}\n\n {indexStatus === 'stale' && !loading && (\n <Text dimColor>Index may be outdated. Press 'u' to update.</Text>\n )}\n\n {/* Profile info */}\n {profile && !searchMode && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Project: {profile.name}\n {profile.type ? ` (${profile.type})` : ''}\n </Text>\n {profile.stack.languages.length > 0 && (\n <Text dimColor>\n Stack: {profile.stack.languages.map(l => l.name).join(', ')}\n {profile.stack.frameworks.length > 0 && `, ${profile.stack.frameworks.map(f => f.name).join(', ')}`}\n </Text>\n )}\n </Box>\n )}\n\n {/* Item count */}\n {!searchMode && (\n <Text dimColor>\n {view === 'search'\n ? `${searchResults.length} results`\n : `${recommendations.length} of ${totalScanned} skills matched`}\n </Text>\n )}\n\n {/* List */}\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const skill = (item as typeof recommendations[0]).skill;\n const score = (item as typeof recommendations[0]).score;\n\n return (\n <Box key={skill.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}\n <Text color={getScoreColor(score)}>{score.toString().padStart(3)}%</Text>\n {' '}\n <Text color={getScoreColor(score)}>{getScoreBar(score)}</Text>\n {' '}\n <Text bold>{skill.name}</Text>\n </Text>\n {isSel && skill.description && (\n <Text dimColor> {skill.description.slice(0, 60)}{skill.description.length > 60 ? '...' : ''}</Text>\n )}\n {isSel && skill.source && (\n <Text dimColor> Source: {skill.source}</Text>\n )}\n </Box>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n {/* Help bar */}\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'search'\n ? 'Enter=install m=choose agent /=search r=back u=update q=quit'\n : 'Enter=install m=choose agent /=search u=update R=refresh q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport {\n RecommendationEngine,\n ContextManager,\n type ScoredSkill,\n type ProjectProfile,\n loadIndex as loadIndexFromCache,\n saveIndex,\n buildSkillIndex,\n isIndexStale,\n KNOWN_SKILL_REPOS,\n} from '@skillkit/core';\n\ninterface UseRecommendResult {\n recommendations: ScoredSkill[];\n profile: ProjectProfile | null;\n loading: boolean;\n error: string | null;\n totalScanned: number;\n indexStatus: 'missing' | 'stale' | 'fresh';\n refresh: () => void;\n updateIndex: () => void;\n search: (query: string) => void;\n searchResults: ScoredSkill[];\n}\n\nexport function useRecommend(projectPath: string = process.cwd()): UseRecommendResult {\n const [recommendations, setRecommendations] = useState<ScoredSkill[]>([]);\n const [searchResults, setSearchResults] = useState<ScoredSkill[]>([]);\n const [profile, setProfile] = useState<ProjectProfile | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [totalScanned, setTotalScanned] = useState(0);\n const [indexStatus, setIndexStatus] = useState<'missing' | 'stale' | 'fresh'>('missing');\n const [engine] = useState(() => new RecommendationEngine());\n\n const loadIndex = useCallback(() => {\n const index = loadIndexFromCache();\n\n if (!index) {\n setIndexStatus('missing');\n return null;\n }\n\n // Check if index is stale\n if (isIndexStale(index)) {\n setIndexStatus('stale');\n } else {\n setIndexStatus('fresh');\n }\n\n return index;\n }, []);\n\n const getProjectProfile = useCallback((): ProjectProfile | null => {\n try {\n const manager = new ContextManager(projectPath);\n let context = manager.get();\n\n if (!context) {\n context = manager.init();\n }\n\n if (!context) {\n return null;\n }\n\n return {\n name: context.project.name,\n type: context.project.type,\n stack: context.stack,\n patterns: context.patterns,\n installedSkills: context.skills?.installed || [],\n excludedSkills: context.skills?.excluded || [],\n };\n } catch {\n return null;\n }\n }, [projectPath]);\n\n const loadRecommendations = useCallback(() => {\n setLoading(true);\n setError(null);\n\n try {\n // Load project profile\n const projectProfile = getProjectProfile();\n if (!projectProfile) {\n setError('Failed to analyze project');\n setLoading(false);\n return;\n }\n setProfile(projectProfile);\n\n // Load skill index\n const index = loadIndex();\n if (!index || index.skills.length === 0) {\n setRecommendations([]);\n setTotalScanned(0);\n setLoading(false);\n return;\n }\n\n engine.loadIndex(index);\n\n // Get recommendations\n const result = engine.recommend(projectProfile, {\n limit: 20,\n minScore: 20,\n excludeInstalled: true,\n includeReasons: true,\n });\n\n setRecommendations(result.recommendations);\n setTotalScanned(result.totalSkillsScanned);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to get recommendations');\n } finally {\n setLoading(false);\n }\n }, [engine, getProjectProfile, loadIndex]);\n\n const updateIndex = useCallback(() => {\n setLoading(true);\n setError(null);\n\n // Fetch skills from known GitHub repositories\n buildSkillIndex(KNOWN_SKILL_REPOS)\n .then(({ index, errors }) => {\n if (errors.length > 0) {\n console.warn('Index update warnings:', errors);\n }\n\n // Save the fetched index\n saveIndex(index);\n setIndexStatus('fresh');\n\n // Reload recommendations with new index\n loadRecommendations();\n })\n .catch((err) => {\n setError(err instanceof Error ? err.message : 'Failed to update index');\n setLoading(false);\n });\n }, [loadRecommendations]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setSearchResults([]);\n return;\n }\n\n const results = engine.search({\n query,\n limit: 10,\n semantic: true,\n });\n\n // Convert SearchResult to ScoredSkill for consistency\n const scoredResults: ScoredSkill[] = results.map(r => ({\n skill: r.skill,\n score: r.relevance,\n reasons: r.matchedTerms.map(term => ({\n category: 'tag' as const,\n description: `Matched: ${term}`,\n weight: 0,\n matched: [term],\n })),\n warnings: [],\n }));\n\n setSearchResults(scoredResults);\n }, [engine]);\n\n const refresh = useCallback(() => {\n loadRecommendations();\n }, [loadRecommendations]);\n\n // Initial load\n useEffect(() => {\n loadRecommendations();\n }, [loadRecommendations]);\n\n return {\n recommendations,\n profile,\n loading,\n error,\n totalScanned,\n indexStatus,\n refresh,\n updateIndex,\n search,\n searchResults,\n };\n}\n","import { useState, useEffect } from 'react';\nimport { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n translateSkill,\n getSupportedTranslationAgents,\n type AgentType,\n} from '@skillkit/core';\nimport { getAllAdapters, getAdapter } from '@skillkit/agents';\nimport { getInstallDir } from '../helpers.js';\n\ntype View = 'skills' | 'agents' | 'preview' | 'result';\n\ninterface InstalledSkill {\n name: string;\n path: string;\n content: string;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Translate({ rows = 24 }: Props) {\n const [view, setView] = useState<View>('skills');\n const [skills, setSkills] = useState<InstalledSkill[]>([]);\n const [agents, setAgents] = useState<{ type: AgentType; name: string }[]>([]);\n const [sel, setSel] = useState(0);\n const [selectedSkill, setSelectedSkill] = useState<InstalledSkill | null>(null);\n const [selectedAgent, setSelectedAgent] = useState<{ type: AgentType; name: string } | null>(null);\n const [preview, setPreview] = useState<string>('');\n const [result, setResult] = useState<{ success: boolean; message: string; path?: string } | null>(null);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const loadSkills = () => {\n const installDir = getInstallDir(false);\n const foundSkills: InstalledSkill[] = [];\n\n if (existsSync(installDir)) {\n const dirs = readdirSync(installDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n for (const dir of dirs) {\n const skillPath = join(installDir, dir);\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n const content = readFileSync(skillMdPath, 'utf-8');\n foundSkills.push({\n name: dir,\n path: skillPath,\n content,\n });\n }\n }\n }\n\n setSkills(foundSkills);\n };\n\n loadSkills();\n }, []);\n\n useEffect(() => {\n const adapters = getAllAdapters();\n const supportedAgents = getSupportedTranslationAgents();\n const agentList = adapters\n .filter(a => supportedAgents.includes(a.type as AgentType))\n .map(a => ({\n type: a.type as AgentType,\n name: a.name,\n }));\n setAgents(agentList);\n }, []);\n\n const currentItems = view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 12);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), currentItems.length - maxVisible));\n const visible = currentItems.slice(start, start + maxVisible);\n\n const generatePreview = (skill: InstalledSkill, agent: { type: AgentType; name: string }) => {\n try {\n const result = translateSkill(skill.content, agent.type, { sourceFilename: 'SKILL.md' });\n return result.content;\n } catch (err) {\n return `Error: ${err instanceof Error ? err.message : 'Translation failed'}`;\n }\n };\n\n const executeTranslation = () => {\n if (!selectedSkill || !selectedAgent) return;\n\n setLoading(true);\n try {\n const translationResult = translateSkill(selectedSkill.content, selectedAgent.type, {\n sourceFilename: 'SKILL.md',\n });\n\n if (!translationResult.success) {\n setResult({\n success: false,\n message: `Translation failed: ${translationResult.warnings.join(', ')}`,\n });\n setLoading(false);\n return;\n }\n\n const adapter = getAdapter(selectedAgent.type);\n const targetDir = adapter?.skillsDir\n ? join(process.cwd(), adapter.skillsDir)\n : join(process.cwd(), `.${selectedAgent.type}/skills/`);\n\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n\n const filename = translationResult.filename || `${selectedSkill.name}.md`;\n const targetPath = join(targetDir, filename);\n\n writeFileSync(targetPath, translationResult.content, 'utf-8');\n\n setResult({\n success: true,\n message: `Translated ${selectedSkill.name} to ${selectedAgent.name} format`,\n path: targetPath,\n });\n } catch (err) {\n setResult({\n success: false,\n message: `Error: ${err instanceof Error ? err.message : 'Unknown error'}`,\n });\n } finally {\n setLoading(false);\n setView('result');\n }\n };\n\n useInput((_input, key) => {\n if (loading) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(currentItems.length - 1, i + 1));\n else if (key.escape) {\n if (view === 'result') {\n setView('skills');\n setSelectedSkill(null);\n setSelectedAgent(null);\n setResult(null);\n setSel(0);\n } else if (view === 'preview') {\n setView('agents');\n } else if (view === 'agents') {\n setView('skills');\n setSelectedSkill(null);\n }\n }\n else if (key.return) {\n if (view === 'skills' && skills[sel]) {\n setSelectedSkill(skills[sel]);\n setView('agents');\n setSel(0);\n } else if (view === 'agents' && agents[sel]) {\n setSelectedAgent(agents[sel]);\n const previewContent = generatePreview(selectedSkill!, agents[sel]);\n setPreview(previewContent);\n setView('preview');\n } else if (view === 'preview') {\n executeTranslation();\n } else if (view === 'result') {\n setView('skills');\n setSelectedSkill(null);\n setSelectedAgent(null);\n setResult(null);\n setSel(0);\n }\n }\n });\n\n if (view === 'result' && result) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>TRANSLATION {result.success ? 'COMPLETE' : 'FAILED'}</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={result.success ? 'green' : 'red'}>\n {result.success ? '✓' : '✗'} {result.message}\n </Text>\n {result.path && (\n <Text dimColor>Saved to: {result.path}</Text>\n )}\n </Box>\n\n <Box marginTop={2}>\n <Text dimColor>Press Enter or Esc to continue</Text>\n </Box>\n </Box>\n );\n }\n\n if (view === 'preview') {\n const previewLines = preview.split('\\n').slice(0, maxVisible);\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>TRANSLATION PREVIEW</Text>\n <Text dimColor>\n {selectedSkill?.name} → {selectedAgent?.name}\n </Text>\n\n <Box marginTop={1} flexDirection=\"column\" borderStyle=\"single\" paddingX={1}>\n {previewLines.map((line, i) => (\n <Text key={i} dimColor>{line.slice(0, 70)}</Text>\n ))}\n {preview.split('\\n').length > maxVisible && (\n <Text dimColor>... ({preview.split('\\n').length - maxVisible} more lines)</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=confirm translation Esc=back</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'skills' ? 'TRANSLATE SKILL' : 'SELECT TARGET AGENT'}\n </Text>\n\n {view === 'skills' && (\n <Text dimColor>Select a skill to translate to another agent format</Text>\n )}\n\n {view === 'agents' && selectedSkill && (\n <Text dimColor>Translate \"{selectedSkill.name}\" to which agent format?</Text>\n )}\n\n {skills.length === 0 && view === 'skills' && (\n <Box marginTop={1}>\n <Text color=\"yellow\">No skills installed. Install some skills first with 'skillkit install'</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n\n if (view === 'skills') {\n const skill = item as InstalledSkill;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {skill.name}\n </Text>\n );\n } else {\n const agent = item as { type: AgentType; name: string };\n return (\n <Text key={agent.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {agent.name.padEnd(20)} <Text dimColor>({agent.type})</Text>\n </Text>\n );\n }\n })}\n {start + maxVisible < currentItems.length && (\n <Text dimColor> ↓ {currentItems.length - start - maxVisible} more</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'skills'\n ? 'Enter=select skill q=quit'\n : 'Enter=select agent Esc=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n loadContext,\n initContext,\n syncToAgent,\n type ProjectContext,\n type AgentType,\n} from '@skillkit/core';\nimport { getAllAdapters } from '@skillkit/agents';\n\ntype View = 'overview' | 'sync';\n\ninterface AgentItem {\n type: AgentType;\n name: string;\n detected: boolean;\n synced?: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Context({ rows = 24 }: Props) {\n const [view, setView] = useState<View>('overview');\n const [context, setContext] = useState<ProjectContext | null>(null);\n const [loading, setLoading] = useState(true);\n const [initializing, setInitializing] = useState(false);\n const [syncing, setSyncing] = useState(false);\n const [agents, setAgents] = useState<AgentItem[]>([]);\n const [sel, setSel] = useState(0);\n const [message, setMessage] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const projectPath = process.cwd();\n\n useEffect(() => {\n const load = async () => {\n setLoading(true);\n try {\n const ctx = loadContext(projectPath);\n setContext(ctx);\n\n const adapters = getAllAdapters();\n const agentList: AgentItem[] = [];\n for (const a of adapters) {\n const detected = await a.isDetected();\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected,\n synced: ctx?.agents?.synced?.includes(a.type),\n });\n }\n setAgents(agentList);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load context');\n } finally {\n setLoading(false);\n }\n };\n\n load();\n }, [projectPath]);\n\n const maxVisible = Math.max(5, rows - 14);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n const handleInit = () => {\n setInitializing(true);\n setMessage(null);\n setError(null);\n\n try {\n const newContext = initContext(projectPath);\n setContext(newContext);\n setMessage('Context initialized successfully');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to initialize context');\n } finally {\n setInitializing(false);\n }\n };\n\n const handleSync = async (agentType: AgentType) => {\n setSyncing(true);\n setMessage(null);\n setError(null);\n\n try {\n await syncToAgent(agentType, projectPath);\n\n setAgents(prev =>\n prev.map(a =>\n a.type === agentType ? { ...a, synced: true } : a\n )\n );\n\n setMessage(`Synced to ${agentType} successfully`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Sync failed');\n } finally {\n setSyncing(false);\n }\n };\n\n const handleSyncAll = async () => {\n setSyncing(true);\n setMessage(null);\n setError(null);\n\n try {\n const detectedAgents = agents.filter(a => a.detected);\n for (const agent of detectedAgents) {\n await syncToAgent(agent.type, projectPath);\n }\n\n setAgents(prev =>\n prev.map(a =>\n a.detected ? { ...a, synced: true } : a\n )\n );\n\n setMessage(`Synced to ${detectedAgents.length} agents`);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Sync failed');\n } finally {\n setSyncing(false);\n }\n };\n\n useInput((input, key) => {\n if (loading || initializing || syncing) return;\n\n if (view === 'sync') {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (key.return && agents[sel]) {\n handleSync(agents[sel].type);\n }\n else if (key.escape) {\n setView('overview');\n setSel(0);\n }\n else if (input === 'a') {\n handleSyncAll();\n }\n } else if (view === 'overview') {\n if (input === 'i') handleInit();\n else if (input === 's') {\n setView('sync');\n setSel(0);\n }\n }\n });\n\n if (loading) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>PROJECT CONTEXT</Text>\n <Text dimColor>Loading...</Text>\n </Box>\n );\n }\n\n if (view === 'sync') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC TO AGENTS</Text>\n <Text dimColor>Select an agent to sync your project context</Text>\n\n {message && <Text color=\"green\">{'✓'} {message}</Text>}\n {error && <Text color=\"red\">{'✗'} {error}</Text>}\n {syncing && <Text dimColor>Syncing...</Text>}\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const status = agent.synced\n ? '(synced)'\n : agent.detected\n ? '(ready)'\n : '(not detected)';\n const statusColor = agent.synced ? 'green' : agent.detected ? 'yellow' : 'gray';\n\n return (\n <Text key={agent.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {agent.name.padEnd(20)}\n <Text color={statusColor}>{status}</Text>\n </Text>\n );\n })}\n {start + maxVisible < agents.length && (\n <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync to agent a=sync all detected Esc=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n const stack = context?.stack;\n const detectedCount = agents.filter(a => a.detected).length;\n const syncedCount = agents.filter(a => a.synced).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>PROJECT CONTEXT</Text>\n\n {message && <Text color=\"green\">{'✓'} {message}</Text>}\n {error && <Text color=\"red\">{'✗'} {error}</Text>}\n {initializing && <Text dimColor>Initializing...</Text>}\n\n {!context && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\">No context found.</Text>\n <Text dimColor>Press 'i' to initialize and analyze your project.</Text>\n </Box>\n )}\n\n {context && (\n <>\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Project:</Text>\n <Text> Name: {context.project?.name || 'Unknown'}</Text>\n <Text> Type: {context.project?.type || 'Not detected'}</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Stack:</Text>\n {stack?.languages && stack.languages.length > 0 && (\n <Text> Languages: {stack.languages.map(l => l.name).join(', ')}</Text>\n )}\n {stack?.frameworks && stack.frameworks.length > 0 && (\n <Text> Frameworks: {stack.frameworks.map(f => f.name).join(', ')}</Text>\n )}\n {stack?.libraries && stack.libraries.length > 0 && (\n <Text> Libraries: {stack.libraries.slice(0, 5).map(l => l.name).join(', ')}{stack.libraries.length > 5 ? '...' : ''}</Text>\n )}\n {(!stack?.languages?.length && !stack?.frameworks?.length) && (\n <Text dimColor> No stack detected. Press 'i' to re-analyze.</Text>\n )}\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Agents:</Text>\n <Text> Detected: {detectedCount} agents</Text>\n <Text> Synced: {syncedCount} agents</Text>\n {detectedCount > 0 && (\n <Text dimColor> ({agents.filter(a => a.detected).map(a => a.name).join(', ')})</Text>\n )}\n </Box>\n </>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Actions:</Text>\n <Text dimColor> [i] Initialize/refresh context</Text>\n <Text dimColor> [s] Sync to agents</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>i=init context s=sync to agents q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { listWorkflows, type Workflow as WorkflowType } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Workflow({ rows = 24 }: Props) {\n const [workflows, setWorkflows] = useState<WorkflowType[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [running, setRunning] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), workflows.length - maxVisible));\n const visible = workflows.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadWorkflows();\n }, []);\n\n const loadWorkflows = () => {\n setLoading(true);\n setError(null);\n try {\n const wfs = listWorkflows(process.cwd());\n setWorkflows(wfs);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load workflows');\n }\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading || running) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(workflows.length - 1, i + 1));\n else if (input === 'r') loadWorkflows();\n else if (key.return && workflows[sel]) {\n // Simulate running workflow\n setRunning(workflows[sel].name);\n setTimeout(() => setRunning(null), 2000);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>WORKFLOWS</Text>\n <Text dimColor>{workflows.length} workflow(s) found</Text>\n\n {loading && <Text>Loading workflows...</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n {running && <Text color=\"yellow\">Running: {running}...</Text>}\n\n {!loading && !running && workflows.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No workflows found.</Text>\n <Text dimColor>Create one with: skillkit workflow create</Text>\n </Box>\n )}\n\n {!loading && !running && workflows.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((wf, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Box key={wf.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {wf.name}\n </Text>\n {isSel && wf.description && (\n <Text dimColor> {wf.description}</Text>\n )}\n {isSel && (\n <Text dimColor> {wf.waves.length} wave(s), {wf.waves.reduce((acc, w) => acc + w.skills.length, 0)} skill(s)</Text>\n )}\n </Box>\n );\n })}\n {start + maxVisible < workflows.length && <Text dimColor> ↓ {workflows.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=run r=refresh q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { createSessionManager, type SessionState, type CurrentExecution } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Execute({ rows = 24 }: Props) {\n const [session, setSession] = useState<SessionState | null>(null);\n const [loading, setLoading] = useState(true);\n\n const maxVisible = Math.max(5, rows - 10);\n\n useEffect(() => {\n loadSession();\n // Poll for updates\n const interval = setInterval(loadSession, 1000);\n return () => clearInterval(interval);\n }, []);\n\n const loadSession = () => {\n try {\n const manager = createSessionManager(process.cwd());\n const state = manager.get();\n setSession(state);\n } catch {\n setSession(null);\n }\n setLoading(false);\n };\n\n useInput((input, _key) => {\n if (input === 'r') loadSession();\n else if (input === 'p' && session?.currentExecution?.status === 'running') {\n const manager = createSessionManager(process.cwd());\n manager.pause();\n loadSession();\n }\n else if (input === 'c' && session?.currentExecution?.status === 'paused') {\n const manager = createSessionManager(process.cwd());\n manager.resume();\n loadSession();\n }\n });\n\n const renderExecution = (exec: CurrentExecution) => {\n const completedTasks = exec.tasks.filter(t => t.status === 'completed').length;\n const failedTasks = exec.tasks.filter(t => t.status === 'failed').length;\n const progress = exec.totalSteps > 0 ? Math.round((completedTasks / exec.totalSteps) * 100) : 0;\n\n const statusColor = exec.status === 'running' ? 'yellow' :\n exec.status === 'completed' ? 'green' :\n exec.status === 'paused' ? 'blue' :\n exec.status === 'failed' ? 'red' : 'white';\n\n const visibleTasks = exec.tasks.slice(0, maxVisible);\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text bold>{exec.skillName}</Text>\n <Text>Source: <Text dimColor>{exec.skillSource}</Text></Text>\n <Text>Status: <Text color={statusColor}>{exec.status.toUpperCase()}</Text></Text>\n <Text>Progress: {completedTasks}/{exec.totalSteps} ({progress}%)</Text>\n\n {/* Progress bar */}\n <Box marginY={1}>\n <Text>[</Text>\n <Text color=\"green\">{'█'.repeat(Math.floor(progress / 5))}</Text>\n <Text dimColor>{'░'.repeat(20 - Math.floor(progress / 5))}</Text>\n <Text>]</Text>\n </Box>\n\n {/* Task list */}\n <Text bold>Tasks:</Text>\n {visibleTasks.map((task, i) => {\n const icon = task.status === 'completed' ? symbols.success :\n task.status === 'failed' ? symbols.error :\n task.status === 'in_progress' ? symbols.warning :\n task.status === 'paused' ? symbols.info :\n symbols.bullet;\n const color = task.status === 'completed' ? 'green' :\n task.status === 'failed' ? 'red' :\n task.status === 'in_progress' ? 'yellow' :\n task.status === 'paused' ? 'blue' : 'white';\n return (\n <Text key={task.id || i} color={color}>\n {icon} {task.name} {task.error && <Text dimColor>({task.error})</Text>}\n </Text>\n );\n })}\n {exec.tasks.length > maxVisible && (\n <Text dimColor> ... and {exec.tasks.length - maxVisible} more</Text>\n )}\n\n {failedTasks > 0 && (\n <Box marginTop={1}>\n <Text color=\"red\">{failedTasks} task(s) failed</Text>\n </Box>\n )}\n </Box>\n );\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>EXECUTION MONITOR</Text>\n\n {loading && <Text>Loading session...</Text>}\n\n {!loading && !session?.currentExecution && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No active execution.</Text>\n <Text dimColor>Run a skill with: skillkit run {'<skill>'}</Text>\n </Box>\n )}\n\n {!loading && session?.currentExecution && renderExecution(session.currentExecution)}\n\n <Box marginTop={1}>\n <Text dimColor>\n {session?.currentExecution?.status === 'running' ? 'p=pause ' : ''}\n {session?.currentExecution?.status === 'paused' ? 'c=continue ' : ''}\n r=refresh q=quit\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { createSessionManager, type ExecutionHistory } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function History({ rows = 24 }: Props) {\n const [history, setHistory] = useState<ExecutionHistory[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [expanded, setExpanded] = useState(false);\n\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), history.length - maxVisible));\n const visible = history.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadHistory();\n }, []);\n\n const loadHistory = () => {\n setLoading(true);\n try {\n const manager = createSessionManager(process.cwd());\n const h = manager.getHistory(50);\n setHistory(h);\n } catch {\n setHistory([]);\n }\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading) return;\n\n if (key.upArrow) {\n setSel(i => Math.max(0, i - 1));\n setExpanded(false);\n }\n else if (key.downArrow) {\n setSel(i => Math.min(history.length - 1, i + 1));\n setExpanded(false);\n }\n else if (input === 'r') loadHistory();\n else if (key.return) setExpanded(e => !e);\n });\n\n const formatDuration = (ms: number): string => {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n };\n\n const formatDate = (iso: string): string => {\n const d = new Date(iso);\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n\n if (diff < 60000) return 'Just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n return d.toLocaleDateString();\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>EXECUTION HISTORY</Text>\n <Text dimColor>{history.length} execution(s)</Text>\n\n {loading && <Text>Loading history...</Text>}\n\n {!loading && history.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No execution history.</Text>\n <Text dimColor>Run a skill with: skillkit run {'<skill>'}</Text>\n </Box>\n )}\n\n {!loading && history.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((entry, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const icon = entry.status === 'completed' ? symbols.success :\n entry.status === 'failed' ? symbols.error :\n symbols.warning;\n const color = entry.status === 'completed' ? 'green' :\n entry.status === 'failed' ? 'red' : 'yellow';\n\n return (\n <Box key={idx} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}<Text color={color}>{icon}</Text> {entry.skillName.padEnd(25)} {formatDate(entry.completedAt).padEnd(12)} {formatDuration(entry.durationMs)}\n </Text>\n {isSel && expanded && (\n <Box flexDirection=\"column\" marginLeft={3}>\n <Text dimColor>Source: {entry.skillSource}</Text>\n <Text dimColor>Status: {entry.status}</Text>\n {entry.commits.length > 0 && (\n <Text dimColor>Commits: {entry.commits.join(', ')}</Text>\n )}\n {entry.filesModified.length > 0 && (\n <Text dimColor>Files: {entry.filesModified.length} modified</Text>\n )}\n {entry.error && (\n <Text color=\"red\">Error: {entry.error}</Text>\n )}\n </Box>\n )}\n </Box>\n );\n })}\n {start + maxVisible < history.length && <Text dimColor> ↓ {history.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=expand r=refresh q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface MarketplaceSkill {\n name: string;\n description: string;\n source: string;\n repo: string;\n tags?: string[];\n stars?: number;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\n// Known skill repositories to aggregate from\nconst SKILL_SOURCES = [\n { owner: 'composioHQ', repo: 'awesome-claude-code-skills', name: 'Composio Curated' },\n { owner: 'anthropics', repo: 'courses', name: 'Anthropic Official' },\n];\n\nexport function Marketplace({ rows = 24 }: Props) {\n const [skills, setSkills] = useState<MarketplaceSkill[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [sel, setSel] = useState(0);\n const [search, setSearch] = useState('');\n const [installing, setInstalling] = useState<string | null>(null);\n\n const filtered = skills.filter(s =>\n s.name.toLowerCase().includes(search.toLowerCase()) ||\n s.description.toLowerCase().includes(search.toLowerCase()) ||\n s.tags?.some(t => t.toLowerCase().includes(search.toLowerCase()))\n );\n\n const maxVisible = Math.max(5, rows - 10);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), filtered.length - maxVisible));\n const visible = filtered.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadMarketplace();\n }, []);\n\n const loadMarketplace = async () => {\n setLoading(true);\n setError(null);\n\n try {\n // Aggregate skills from known sources\n const allSkills: MarketplaceSkill[] = [];\n\n for (const source of SKILL_SOURCES) {\n try {\n // Try to fetch skill index from GitHub\n const indexUrl = `https://raw.githubusercontent.com/${source.owner}/${source.repo}/main/skills.json`;\n const response = await fetch(indexUrl);\n\n if (response.ok) {\n const data = await response.json();\n if (Array.isArray(data)) {\n allSkills.push(...data.map((s: Record<string, unknown>) => ({\n name: String(s.name || 'Unknown'),\n description: String(s.description || ''),\n source: source.name,\n repo: `${source.owner}/${source.repo}`,\n tags: Array.isArray(s.tags) ? s.tags as string[] : [],\n stars: typeof s.stars === 'number' ? s.stars : undefined,\n })));\n }\n } else {\n // Fallback: add the repo itself as a skill source\n allSkills.push({\n name: source.repo,\n description: `Skills from ${source.name}`,\n source: source.name,\n repo: `${source.owner}/${source.repo}`,\n });\n }\n } catch {\n // Add repo as fallback\n allSkills.push({\n name: source.repo,\n description: `Skills from ${source.name}`,\n source: source.name,\n repo: `${source.owner}/${source.repo}`,\n });\n }\n }\n\n // Add some example skills for demo\n if (allSkills.length === 0) {\n allSkills.push(\n { name: 'typescript-strict', description: 'Enable strict TypeScript mode', source: 'Built-in', repo: 'skillkit/skills', tags: ['typescript', 'config'] },\n { name: 'eslint-setup', description: 'Set up ESLint with recommended rules', source: 'Built-in', repo: 'skillkit/skills', tags: ['eslint', 'linting'] },\n { name: 'prettier-config', description: 'Configure Prettier formatting', source: 'Built-in', repo: 'skillkit/skills', tags: ['prettier', 'formatting'] },\n { name: 'jest-setup', description: 'Set up Jest testing framework', source: 'Built-in', repo: 'skillkit/skills', tags: ['jest', 'testing'] },\n { name: 'nextjs-auth', description: 'Add authentication to Next.js', source: 'Community', repo: 'community/skills', tags: ['nextjs', 'auth'] },\n );\n }\n\n setSkills(allSkills);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load marketplace');\n }\n\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(filtered.length - 1, i + 1));\n else if (input === 'r') loadMarketplace();\n else if (input === '/') setSearch('');\n else if (key.backspace || key.delete) setSearch(s => s.slice(0, -1));\n else if (key.return && filtered[sel]) {\n setInstalling(filtered[sel].name);\n // Simulate installation\n setTimeout(() => setInstalling(null), 1500);\n }\n else if (input.length === 1 && /[a-zA-Z0-9-_]/.test(input)) {\n setSearch(s => s + input);\n setSel(0);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SKILL MARKETPLACE</Text>\n <Text dimColor>{skills.length} skills from {SKILL_SOURCES.length} sources</Text>\n\n {search && (\n <Text>Search: <Text color=\"yellow\">{search}</Text> ({filtered.length} results)</Text>\n )}\n\n {loading && <Text>Loading marketplace...</Text>}\n {error && <Text color=\"red\">{error}</Text>}\n {installing && <Text color=\"yellow\">Installing {installing}...</Text>}\n\n {!loading && !installing && filtered.length === 0 && (\n <Box marginTop={1}>\n <Text dimColor>No skills found{search ? ` matching \"${search}\"` : ''}.</Text>\n </Box>\n )}\n\n {!loading && !installing && filtered.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((skill, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Box key={`${skill.repo}/${skill.name}`} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {skill.name.padEnd(25)} <Text dimColor>{skill.source}</Text>\n </Text>\n {isSel && (\n <Box flexDirection=\"column\" marginLeft={3}>\n <Text dimColor>{skill.description}</Text>\n {skill.tags && skill.tags.length > 0 && (\n <Text dimColor>Tags: {skill.tags.join(', ')}</Text>\n )}\n <Text dimColor>Repo: {skill.repo}</Text>\n </Box>\n )}\n </Box>\n );\n })}\n {start + maxVisible < filtered.length && <Text dimColor> ↓ {filtered.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=install type=search r=refresh q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n ObservationStore,\n LearningStore,\n getMemoryStatus,\n getMemoryPaths,\n createMemoryInjector,\n type Learning,\n} from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\ntype Tab = 'learnings' | 'observations' | 'search';\n\nexport function Memory({ rows = 24 }: Props) {\n const [tab, setTab] = useState<Tab>('learnings');\n const [learnings, setLearnings] = useState<Learning[]>([]);\n const [observationCount, setObservationCount] = useState(0);\n const [globalCount, setGlobalCount] = useState(0);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [expanded, setExpanded] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchResults, setSearchResults] = useState<Learning[]>([]);\n const [isGlobal, setIsGlobal] = useState(false);\n\n const maxVisible = Math.max(5, rows - 10);\n const currentList = tab === 'search' ? searchResults : learnings;\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), currentList.length - maxVisible));\n const visible = currentList.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadMemory();\n }, [isGlobal]);\n\n const loadMemory = () => {\n setLoading(true);\n try {\n const projectPath = process.cwd();\n const status = getMemoryStatus(projectPath);\n\n // Load learnings\n const store = new LearningStore(\n isGlobal ? 'global' : 'project',\n isGlobal ? undefined : projectPath\n );\n setLearnings(store.getAll());\n\n // Get counts\n if (status.hasObservations) {\n const obsStore = new ObservationStore(projectPath);\n setObservationCount(obsStore.count());\n } else {\n setObservationCount(0);\n }\n\n if (status.hasGlobalLearnings) {\n const globalStore = new LearningStore('global');\n setGlobalCount(globalStore.count());\n } else {\n setGlobalCount(0);\n }\n } catch {\n setLearnings([]);\n setObservationCount(0);\n setGlobalCount(0);\n }\n setLoading(false);\n };\n\n const handleSearch = (query: string) => {\n if (!query.trim()) {\n setSearchResults([]);\n return;\n }\n\n try {\n const projectPath = process.cwd();\n const injector = createMemoryInjector(projectPath);\n const results = injector.search(query, {\n includeGlobal: true,\n maxLearnings: 20,\n minRelevance: 0,\n });\n setSearchResults(results.map(r => r.learning));\n } catch {\n setSearchResults([]);\n }\n };\n\n useInput((input, key) => {\n if (loading) return;\n\n // Tab navigation\n if (input === '1') { setTab('learnings'); setSel(0); setExpanded(false); }\n else if (input === '2') { setTab('observations'); setSel(0); setExpanded(false); }\n else if (input === '3') { setTab('search'); setSel(0); setExpanded(false); }\n\n // List navigation\n else if (key.upArrow) {\n setSel(i => Math.max(0, i - 1));\n setExpanded(false);\n }\n else if (key.downArrow) {\n setSel(i => Math.min(currentList.length - 1, i + 1));\n setExpanded(false);\n }\n\n // Actions (use 'f' for refresh to avoid conflict with global 'r' for Recommend)\n else if (input === 'f') loadMemory();\n else if (input === 'g') setIsGlobal(g => !g);\n else if (key.return) setExpanded(e => !e);\n\n // Search input (basic)\n else if (tab === 'search' && input && input.length === 1 && !key.ctrl && !key.meta) {\n const newQuery = searchQuery + input;\n setSearchQuery(newQuery);\n handleSearch(newQuery);\n }\n else if (tab === 'search' && key.backspace) {\n const newQuery = searchQuery.slice(0, -1);\n setSearchQuery(newQuery);\n handleSearch(newQuery);\n }\n });\n\n const ONE_MINUTE = 60_000;\n const ONE_HOUR = 3_600_000;\n const ONE_DAY = 86_400_000;\n\n function formatDate(iso: string): string {\n const d = new Date(iso);\n const diff = Date.now() - d.getTime();\n\n if (diff < ONE_MINUTE) return 'Just now';\n if (diff < ONE_HOUR) return `${Math.floor(diff / ONE_MINUTE)}m ago`;\n if (diff < ONE_DAY) return `${Math.floor(diff / ONE_HOUR)}h ago`;\n return d.toLocaleDateString();\n }\n\n function formatEffectiveness(eff?: number): string {\n if (eff === undefined) return ' -';\n return eff.toString().padStart(3) + '%';\n }\n\n function getEffectivenessColor(eff?: number): string | undefined {\n if (eff === undefined) return undefined;\n if (eff >= 70) return 'green';\n if (eff >= 40) return 'yellow';\n return 'red';\n }\n\n const renderLearnings = () => (\n <Box flexDirection=\"column\">\n {currentList.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No learnings found.</Text>\n <Text dimColor>Run skills to capture learnings, or add manually:</Text>\n <Text dimColor> skillkit memory add --title \"...\" --content \"...\"</Text>\n </Box>\n )}\n\n {currentList.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> {symbols.arrowUp} {start} more</Text>}\n {visible.map((learning, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n\n return (\n <Box key={learning.id} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '}\n <Text color={colors.primary}>{symbols.bullet}</Text>\n {' '}{learning.title.slice(0, 35).padEnd(35)}{' '}\n <Text dimColor>{learning.tags.slice(0, 2).join(', ').slice(0, 15).padEnd(15)}</Text>\n {' '}<Text color={getEffectivenessColor(learning.effectiveness)}>{formatEffectiveness(learning.effectiveness)}</Text>\n {' '}<Text dimColor>{formatDate(learning.updatedAt)}</Text>\n </Text>\n {isSel && expanded && (\n <Box flexDirection=\"column\" marginLeft={3} marginY={1}>\n <Text dimColor>ID: {learning.id.slice(0, 8)}</Text>\n <Text dimColor>Scope: {learning.scope}</Text>\n <Text dimColor>Source: {learning.source}</Text>\n <Text dimColor>Tags: {learning.tags.join(', ')}</Text>\n {learning.frameworks && learning.frameworks.length > 0 && (\n <Text dimColor>Frameworks: {learning.frameworks.join(', ')}</Text>\n )}\n <Text dimColor>Uses: {learning.useCount}</Text>\n <Box marginTop={1}>\n <Text wrap=\"wrap\">{learning.content.slice(0, 300)}{learning.content.length > 300 ? '...' : ''}</Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n })}\n {start + maxVisible < currentList.length && (\n <Text dimColor> {symbols.arrowDown} {currentList.length - start - maxVisible} more</Text>\n )}\n </Box>\n )}\n </Box>\n );\n\n const renderObservations = () => (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text>Session Observations: <Text bold color={colors.primary}>{observationCount}</Text></Text>\n <Text dimColor>Observations are raw captures from skill execution.</Text>\n\n {observationCount > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text>Compress observations into learnings:</Text>\n <Text dimColor> skillkit memory compress</Text>\n </Box>\n )}\n\n {observationCount >= 50 && (\n <Box marginTop={1}>\n <Text color=\"yellow\">{symbols.warning} You have many uncompressed observations.</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Observations are stored at:</Text>\n </Box>\n <Text dimColor> {getMemoryPaths(process.cwd()).observationsFile}</Text>\n </Box>\n );\n\n const renderSearch = () => (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box>\n <Text>Search: </Text>\n <Text color={colors.primary}>{searchQuery}</Text>\n <Text color={colors.secondary}>_</Text>\n </Box>\n\n {searchQuery && searchResults.length === 0 && (\n <Box marginTop={1}>\n <Text dimColor>No results found for \"{searchQuery}\"</Text>\n </Box>\n )}\n\n {searchResults.length > 0 && renderLearnings()}\n </Box>\n );\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>MEMORY</Text>\n <Text dimColor>\n {isGlobal ? 'Global' : 'Project'}: {learnings.length} learning(s)\n {!isGlobal && globalCount > 0 && <Text> | Global: {globalCount}</Text>}\n </Text>\n\n {/* Tabs */}\n <Box marginTop={1}>\n <Text inverse={tab === 'learnings'}>[1] Learnings</Text>\n <Text> </Text>\n <Text inverse={tab === 'observations'}>[2] Observations</Text>\n <Text> </Text>\n <Text inverse={tab === 'search'}>[3] Search</Text>\n </Box>\n\n {loading && <Box marginTop={1}><Text>Loading...</Text></Box>}\n\n {!loading && tab === 'learnings' && renderLearnings()}\n {!loading && tab === 'observations' && renderObservations()}\n {!loading && tab === 'search' && renderSearch()}\n\n <Box marginTop={1}>\n <Text dimColor>\n Enter=expand g=toggle global f=refresh 1-3=tabs\n </Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface HeaderProps {\n title: string;\n subtitle?: string;\n count?: number;\n}\n\nexport function Header({ title, subtitle, count }: HeaderProps) {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box justifyContent=\"space-between\">\n <Text color={colors.primary} bold>\n {title.toUpperCase()}\n </Text>\n {count !== undefined && (\n <Text color={colors.secondaryDim}>\n {symbols.star} {count}\n </Text>\n )}\n </Box>\n {subtitle && (\n <Text color={colors.secondaryDim} dimColor>\n {subtitle}\n </Text>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\nexport interface SkillItem {\n name: string;\n description?: string;\n source?: string;\n installs?: number;\n enabled?: boolean;\n}\n\ninterface SkillListProps {\n skills: SkillItem[];\n selectedIndex: number;\n showInstalls?: boolean;\n showRank?: boolean;\n showSource?: boolean;\n maxVisible?: number;\n}\n\nfunction formatInstalls(count: number): string {\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1)}K`;\n }\n return String(count);\n}\n\nexport function SkillList({\n skills,\n selectedIndex,\n showInstalls = false,\n showRank = false,\n showSource = true,\n maxVisible = 10,\n}: SkillListProps) {\n if (skills.length === 0) {\n return (\n <Box>\n <Text color={colors.secondaryDim} dimColor>\n No skills found\n </Text>\n </Box>\n );\n }\n\n const startIndex = Math.max(0, selectedIndex - Math.floor(maxVisible / 2));\n const visibleSkills = skills.slice(startIndex, startIndex + maxVisible);\n const actualStartIndex = startIndex;\n\n return (\n <Box flexDirection=\"column\">\n {showRank && (\n <Box marginBottom={1}>\n <Text color={colors.secondaryDim}>\n {' # SKILL'}\n {showSource && ' SOURCE'}\n {showInstalls && ' INSTALLS'}\n </Text>\n </Box>\n )}\n\n {visibleSkills.map((skill, idx) => {\n const realIndex = actualStartIndex + idx;\n const isSelected = realIndex === selectedIndex;\n const skillName = skill.name.padEnd(28).slice(0, 28);\n const sourceName = skill.source ? skill.source.slice(0, 25) : '';\n\n return (\n <Box key={`${skill.source}-${skill.name}`}>\n <Text\n color={isSelected ? colors.primary : colors.secondary}\n bold={isSelected}\n inverse={isSelected}\n >\n {isSelected ? symbols.pointer : ' '}\n {showRank ? String(realIndex + 1).padStart(2, ' ') : ''}\n {' '}\n {skillName}\n </Text>\n {showSource && (\n <Text color={colors.secondaryDim} dimColor={!isSelected}>\n {' '}{sourceName}\n </Text>\n )}\n {showInstalls && skill.installs !== undefined && (\n <Text color={colors.secondaryDim}>\n {formatInstalls(skill.installs).padStart(8)}\n </Text>\n )}\n </Box>\n );\n })}\n\n {skills.length > maxVisible && (\n <Box marginTop={1}>\n <Text color={colors.secondaryDim} dimColor>\n Showing {startIndex + 1}-{Math.min(startIndex + maxVisible, skills.length)} of {skills.length}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Shortcut {\n key: string;\n label: string;\n}\n\ninterface StatusBarProps {\n shortcuts: Shortcut[];\n message?: string;\n}\n\nexport function StatusBar({ shortcuts, message }: StatusBarProps) {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={colors.borderDim}\n borderTop\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n justifyContent=\"space-between\"\n >\n <Box gap={2}>\n {shortcuts.map((shortcut, idx) => (\n <Box key={idx} gap={1}>\n <Text color={colors.primary} bold>\n {shortcut.key}\n </Text>\n <Text color={colors.secondaryDim}>{shortcut.label}</Text>\n </Box>\n ))}\n </Box>\n\n {message && (\n <Text color={colors.success}>\n {symbols.check} {message}\n </Text>\n )}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport TextInput from 'ink-text-input';\nimport { colors } from '../theme.js';\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n isFocused?: boolean;\n}\n\nexport function SearchInput({\n value,\n onChange,\n placeholder = 'Search skills...',\n isFocused = false,\n}: SearchInputProps) {\n return (\n <Box\n borderStyle=\"single\"\n borderColor={isFocused ? colors.primary : colors.borderDim}\n paddingX={1}\n >\n <Text color={colors.secondaryDim}>/ </Text>\n {isFocused ? (\n <TextInput\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n />\n ) : (\n <Text color={value ? colors.secondary : colors.secondaryDim}>\n {value || placeholder}\n </Text>\n )}\n <Box flexGrow={1} />\n <Text color={colors.secondaryDim}>/</Text>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useInput, useApp } from 'ink';\nimport type { Screen } from '../App.js';\n\ninterface UseKeyboardOptions {\n onNavigate?: (screen: Screen) => void;\n onSelect?: () => void;\n onSearch?: () => void;\n onInstall?: () => void;\n onBack?: () => void;\n onUp?: () => void;\n onDown?: () => void;\n disabled?: boolean;\n}\n\nexport function useKeyboard(options: UseKeyboardOptions = {}) {\n const { exit } = useApp();\n\n useInput((input, key) => {\n if (options.disabled) return;\n\n if (input === 'q' || (key.ctrl && input === 'c')) {\n exit();\n return;\n }\n\n if (key.escape && options.onBack) {\n options.onBack();\n return;\n }\n\n if (key.return && options.onSelect) {\n options.onSelect();\n return;\n }\n\n if (key.upArrow && options.onUp) {\n options.onUp();\n return;\n }\n\n if (key.downArrow && options.onDown) {\n options.onDown();\n return;\n }\n\n if (input === '/' && options.onSearch) {\n options.onSearch();\n return;\n }\n\n if (input === 'i' && options.onInstall) {\n options.onInstall();\n return;\n }\n\n if (input === 'h' && options.onNavigate) {\n options.onNavigate('home');\n } else if (input === 'b' && options.onNavigate) {\n options.onNavigate('browse');\n } else if (input === 'l' && options.onNavigate) {\n options.onNavigate('installed');\n } else if (input === 's' && options.onNavigate) {\n options.onNavigate('sync');\n } else if (input === ',' && options.onNavigate) {\n options.onNavigate('settings');\n }\n });\n}\n\nexport function useListNavigation(listLength: number, initialIndex = 0) {\n const [selectedIndex, setSelectedIndex] = useState(initialIndex);\n\n useEffect(() => {\n if (selectedIndex >= listLength && listLength > 0) {\n setSelectedIndex(listLength - 1);\n }\n }, [listLength, selectedIndex]);\n\n const moveUp = useCallback(() => {\n setSelectedIndex((prev) => Math.max(0, prev - 1));\n }, []);\n\n const moveDown = useCallback(() => {\n setSelectedIndex((prev) => Math.min(listLength - 1, prev + 1));\n }, [listLength]);\n\n const reset = useCallback(() => {\n setSelectedIndex(0);\n }, []);\n\n return { selectedIndex, setSelectedIndex, moveUp, moveDown, reset };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport {\n LearningStore,\n ObservationStore,\n getMemoryStatus,\n createMemoryInjector,\n type Learning,\n type Observation,\n type MemoryStatus,\n} from '@skillkit/core';\n\ninterface UseMemoryResult {\n learnings: Learning[];\n observations: Observation[];\n status: MemoryStatus | null;\n loading: boolean;\n error: string | null;\n isGlobal: boolean;\n setIsGlobal: (isGlobal: boolean) => void;\n refresh: () => void;\n search: (query: string) => Learning[];\n deleteLearning: (id: string) => boolean;\n deleteObservation: (id: string) => boolean;\n}\n\nexport function useMemory(): UseMemoryResult {\n const [learnings, setLearnings] = useState<Learning[]>([]);\n const [observations, setObservations] = useState<Observation[]>([]);\n const [status, setStatus] = useState<MemoryStatus | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [isGlobal, setIsGlobal] = useState(false);\n\n const projectPath = process.cwd();\n\n const refresh = useCallback(() => {\n setLoading(true);\n setError(null);\n\n try {\n // Get memory status\n const memStatus = getMemoryStatus(projectPath);\n setStatus(memStatus);\n\n // Load learnings\n const learningStore = new LearningStore(\n isGlobal ? 'global' : 'project',\n isGlobal ? undefined : projectPath\n );\n setLearnings(learningStore.getAll());\n\n // Load observations (project only)\n if (memStatus.hasObservations) {\n const obsStore = new ObservationStore(projectPath);\n setObservations(obsStore.getAll());\n } else {\n setObservations([]);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load memory');\n setLearnings([]);\n setObservations([]);\n } finally {\n setLoading(false);\n }\n }, [projectPath, isGlobal]);\n\n const search = useCallback(\n (query: string): Learning[] => {\n if (!query.trim()) {\n return [];\n }\n\n try {\n const injector = createMemoryInjector(projectPath);\n const results = injector.search(query, {\n includeGlobal: true,\n maxLearnings: 50,\n minRelevance: 0,\n });\n return results.map((r) => r.learning);\n } catch {\n return [];\n }\n },\n [projectPath]\n );\n\n const deleteLearning = useCallback(\n (id: string): boolean => {\n try {\n const store = new LearningStore(\n isGlobal ? 'global' : 'project',\n isGlobal ? undefined : projectPath\n );\n const result = store.delete(id);\n if (result) {\n refresh();\n }\n return result;\n } catch {\n return false;\n }\n },\n [projectPath, isGlobal, refresh]\n );\n\n const deleteObservation = useCallback(\n (id: string): boolean => {\n try {\n const store = new ObservationStore(projectPath);\n const result = store.delete(id);\n if (result) {\n refresh();\n }\n return result;\n } catch {\n return false;\n }\n },\n [projectPath, refresh]\n );\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n learnings,\n observations,\n status,\n loading,\n error,\n isGlobal,\n setIsGlobal,\n refresh,\n search,\n deleteLearning,\n deleteObservation,\n };\n}\n"],"mappings":";AAAA,SAAS,cAAc;;;ACAvB,SAAS,YAAAA,kBAAgB;AACzB,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,YAAU,QAAQ,iBAAiB;;;ACDvD,SAAS,KAAK,YAAY;;;ACA1B,OAAO,WAAW;AAEX,IAAM,SAAS;AAAA,EACpB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,cAAc;AAAA,EACd,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AACb;AAEO,IAAM,UAAU;AAAA,EACrB,SAAS,MAAM,MAAM,QAAG;AAAA,EACxB,QAAQ;AAAA,EACR,YAAY,MAAM,MAAM,QAAG;AAAA,EAC3B,aAAa,MAAM,IAAI,QAAG;AAAA,EAC1B,OAAO,MAAM,MAAM,QAAG;AAAA,EACtB,MAAM;AAAA,EACN,SAAS,CAAC,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,UAAK,QAAG;AAAA,EAC1D,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AACR;AAEO,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADId,cAIE,YAJF;AAvBN,IAAM,MAAoD;AAAA;AAAA,EAExD,EAAE,IAAI,QAAQ,OAAO,QAAQ,KAAK,IAAI;AAAA,EACtC,EAAE,IAAI,eAAe,OAAO,eAAe,KAAK,IAAI;AAAA,EACpD,EAAE,IAAI,UAAU,OAAO,UAAU,KAAK,IAAI;AAAA;AAAA,EAE1C,EAAE,IAAI,YAAY,OAAO,aAAa,KAAK,IAAI;AAAA,EAC/C,EAAE,IAAI,WAAW,OAAO,WAAW,KAAK,IAAI;AAAA,EAC5C,EAAE,IAAI,WAAW,OAAO,WAAW,KAAK,IAAI;AAAA;AAAA,EAE5C,EAAE,IAAI,aAAa,OAAO,aAAa,KAAK,IAAI;AAAA,EAChD,EAAE,IAAI,aAAa,OAAO,aAAa,KAAK,IAAI;AAAA,EAChD,EAAE,IAAI,WAAW,OAAO,WAAW,KAAK,IAAI;AAAA,EAC5C,EAAE,IAAI,UAAU,OAAO,UAAU,KAAK,IAAI;AAAA;AAAA,EAE1C,EAAE,IAAI,aAAa,OAAO,aAAa,KAAK,IAAI;AAAA,EAChD,EAAE,IAAI,QAAQ,OAAO,QAAQ,KAAK,IAAI;AAAA,EACtC,EAAE,IAAI,YAAY,OAAO,UAAU,KAAK,IAAI;AAC9C;AAEO,SAAS,QAAQ,EAAE,OAAO,GAAiB;AAChD,SACE,qBAAC,OAAI,eAAc,UAAS,OAAO,IAAI,aAAY,UAAS,UAAU,GACpE;AAAA,wBAAC,QAAK,MAAI,MAAC,OAAO,OAAO,SAAS,sBAAQ;AAAA,IAGzC,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SACpB,qBAAC,QAAmB,SAAS,WAAW,KAAK,IAC1C;AAAA,iBAAW,KAAK,KAAK,QAAQ,SAAS;AAAA,MAAK,KAAK;AAAA,SADxC,KAAK,EAEhB,CACD;AAAA,IAED,oBAAC,QAAK,eAAC;AAAA,IAGN,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SACpB,qBAAC,QAAmB,SAAS,WAAW,KAAK,IAC1C;AAAA,iBAAW,KAAK,KAAK,QAAQ,SAAS;AAAA,MAAK,KAAK;AAAA,SADxC,KAAK,EAEhB,CACD;AAAA,IAED,oBAAC,QAAK,eAAC;AAAA,IAGN,IAAI,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,SACrB,qBAAC,QAAmB,SAAS,WAAW,KAAK,IAC1C;AAAA,iBAAW,KAAK,KAAK,QAAQ,SAAS;AAAA,MAAK,KAAK;AAAA,SADxC,KAAK,EAEhB,CACD;AAAA,IAED,oBAAC,QAAK,eAAC;AAAA,IAGN,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,SAClB,qBAAC,QAAmB,SAAS,WAAW,KAAK,IAC1C;AAAA,iBAAW,KAAK,KAAK,QAAQ,SAAS;AAAA,MAAK,KAAK;AAAA,SADxC,KAAK,EAEhB,CACD;AAAA,IAED,oBAAC,OAAI,UAAU,GAAG;AAAA,IAElB,oBAAC,QAAK,UAAQ,MAAC,oBAAM;AAAA,IACrB,oBAAC,QAAK,UAAQ,MAAC,oBAAM;AAAA,KACvB;AAEJ;;;AE3EA,SAAS,UAAU,iBAAiB;AACpC,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,SAAS,YAAY;AAC9B,SAAS,OAAAC,MAAK,QAAAC,aAAY;AAgEpB,gBAAAC,MAMA,QAAAC,aANA;AAtDN,IAAM,QAAQ;AAEd,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIhB,KAAK;AAEP,SAAS,aAAqB;AAC5B,MAAI;AACF,UAAM,aAAa,cAAc,YAAY,GAAG;AAChD,UAAM,YAAY,QAAQ,UAAU;AACpC,UAAM,kBAAkB,KAAK,WAAW,uBAAuB;AAC/D,UAAM,cAAc,KAAK,MAAM,aAAa,iBAAiB,OAAO,CAAC;AACrE,WAAO,YAAY,WAAW;AAAA,EAChC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,QAAgB,UAA0B;AAC1D,SAAO,OAAO,MAAM,IAAI,EAAE,IAAI,UAAQ;AACpC,WAAO,KAAK,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,MAAM;AACrC,UAAI,SAAS,IAAK,QAAO;AACzB,UAAI,WAAY,IAAI,KAAK,SAAU,IAAK,QAAO;AAC/C,aAAO,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC;AAAA,IACvD,CAAC,EAAE,KAAK,EAAE;AAAA,EACZ,CAAC,EAAE,KAAK,IAAI;AACd;AAEO,SAAS,KAAK,EAAE,OAAO,IAAI,OAAO,GAAG,GAAc;AACxD,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAC;AAC1C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,EAAE;AACzC,QAAM,UAAU,WAAW;AAE3B,QAAM,UAAU,OAAO,KAAK,YAAY;AAExC,YAAU,MAAM;AACd,QAAI,YAAY,KAAK;AACnB,iBAAW,OAAO;AAClB;AAAA,IACF;AACA,UAAM,IAAI,YAAY,MAAM;AAC1B,kBAAY,OAAK;AACf,cAAM,OAAO,IAAI;AACjB,mBAAW,SAAS,SAAS,IAAI,CAAC;AAClC,eAAO;AAAA,MACT,CAAC;AAAA,IACH,GAAG,EAAE;AACL,WAAO,MAAM,cAAc,CAAC;AAAA,EAC9B,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,SACE,gBAAAA,MAACC,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAF,KAACG,OAAA,EAAK,OAAO,OAAO,SAAU,qBAAW,SAAQ;AAAA,IAEjD,gBAAAH,KAACE,MAAA,EAAI,WAAW,GACd,0BAAAF,KAACG,OAAA,EAAK,wDAA0C,GAClD;AAAA,IAEA,gBAAAF,MAACC,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAF,KAACG,OAAA,EAAK,MAAI,MAAC,4BAAc;AAAA,MACzB,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,6CAA+B;AAAA,MAC9C,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,6CAA+B;AAAA,MAC9C,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,mDAAqC;AAAA,MACpD,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,0CAA4B;AAAA,MAC3C,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,yCAA2B;AAAA,MAC1C,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,6CAA+B;AAAA,OAChD;AAAA,IAEC,QAAQ,MACP,gBAAAF,MAACC,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAF,KAACG,OAAA,EAAK,MAAI,MAAC,yBAAW;AAAA,MACtB,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,8CAAsB;AAAA,MACrC,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,sCAAwB;AAAA,MACvC,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,oCAAsB;AAAA,MACrC,gBAAAH,KAACG,OAAA,EAAK,UAAQ,MAAC,0BAAY;AAAA,OAC7B;AAAA,IAGF,gBAAAH,KAACE,MAAA,EAAI,WAAW,GACd,0BAAAD,MAACE,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAE;AAAA,MAAQ;AAAA,OAA0B,GACrD;AAAA,KACF;AAEJ;;;ACnGA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,YAAY,WAAW,QAAQ,cAAc;AACtD,SAAS,QAAAC,aAAY;AACrB,SAAS,OAAAC,MAAK,QAAAC,OAAM,gBAAgB;;;ACHpC,SAAS,YAAAC,WAAU,aAAa,aAAAC,kBAAiB;AACjD,SAAS,sBAAsB;AAQ/B,IAAM,gBAA4B;AAAA,EAChC,EAAE,QAAQ,qBAAqB,MAAM,qBAAqB;AAAA,EAC1D,EAAE,QAAQ,4BAA4B,MAAM,cAAc;AAAA,EAC1D,EAAE,QAAQ,eAAe,MAAM,sBAAsB;AAAA,EACrD,EAAE,QAAQ,uBAAuB,MAAM,iBAAiB;AAAA,EACxD,EAAE,QAAQ,oCAAoC,MAAM,mBAAmB;AAAA,EACvE,EAAE,QAAQ,kCAAkC,MAAM,iBAAiB;AAAA,EACnE,EAAE,QAAQ,0CAA0C,MAAM,qBAAqB;AAAA,EAC/E,EAAE,QAAQ,iCAAiC,MAAM,mBAAmB;AAAA,EACpE,EAAE,QAAQ,oBAAoB,MAAM,kBAAkB;AAAA,EACtD,EAAE,QAAQ,4BAA4B,MAAM,qBAAqB;AAAA,EACjE,EAAE,QAAQ,mBAAmB,MAAM,eAAe;AAAA,EAClD,EAAE,QAAQ,mBAAmB,MAAM,gBAAgB;AAAA,EACnD,EAAE,QAAQ,sBAAsB,MAAM,yBAAyB;AAAA,EAC/D,EAAE,QAAQ,sBAAsB,MAAM,cAAc;AAAA,EACpD,EAAE,QAAQ,qBAAqB,MAAM,aAAa;AAAA,EAClD,EAAE,QAAQ,mBAAmB,MAAM,qBAAqB;AAAA,EACxD,EAAE,QAAQ,wBAAwB,MAAM,wBAAwB;AAAA,EAChE,EAAE,QAAQ,mBAAmB,MAAM,iBAAiB;AAAA,EACpD,EAAE,QAAQ,gCAAgC,MAAM,SAAS;AAAA,EACzD,EAAE,QAAQ,mCAAmC,MAAM,eAAe;AAAA,EAClE,EAAE,QAAQ,4BAA4B,MAAM,WAAW;AAAA,EACvD,EAAE,QAAQ,iCAAiC,MAAM,oBAAoB;AAAA,EACrE,EAAE,QAAQ,oBAAoB,MAAM,cAAc;AAAA,EAClD,EAAE,QAAQ,aAAa,MAAM,kBAAkB;AAAA,EAC/C,EAAE,QAAQ,4BAA4B,MAAM,iBAAiB;AAAA,EAC7D,EAAE,QAAQ,0BAA0B,MAAM,iBAAiB;AAAA,EAC3D,EAAE,QAAQ,uBAAuB,MAAM,cAAc;AAAA,EACrD,EAAE,QAAQ,uCAAuC,MAAM,iBAAiB;AAAA,EACxE,EAAE,QAAQ,+BAA+B,MAAM,iBAAiB;AAAA,EAChE,EAAE,QAAQ,gCAAgC,MAAM,WAAW;AAC7D;AAsBO,SAAS,iBAAuC;AACrD,QAAM,CAAC,WAAW,YAAY,IAAID,UAAyB,CAAC,CAAC;AAC7D,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAyB,CAAC,CAAC;AACvE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,KAAK;AAC5C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAwB,IAAI;AAClE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAsB,oBAAI,IAAI,CAAC;AAEvE,QAAM,YAAY,YAAY,OAAO,WAAmB;AACtD,QAAI,aAAa,IAAI,MAAM,EAAG;AAE9B,eAAW,IAAI;AACf,aAAS,IAAI;AACb,mBAAe,MAAM;AAErB,QAAI;AACF,YAAM,WAAW,eAAe,MAAM;AACtC,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,kCAAkC,MAAM,EAAE;AAAA,MAC5D;AAEA,YAAM,SAAS,MAAM,SAAS,MAAM,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC;AAE5D,UAAI,CAAC,OAAO,WAAW,CAAC,OAAO,kBAAkB;AAC/C,cAAM,IAAI,MAAM,OAAO,SAAS,wBAAwB;AAAA,MAC1D;AAEA,YAAM,WAAW,cAAc,KAAK,OAAK,EAAE,WAAW,MAAM,GAAG,QAAQ;AACvE,YAAM,YAA4B,OAAO,iBAAiB,IAAI,YAAU;AAAA,QACtE,MAAM,MAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MACf,EAAE;AAEF,mBAAa,UAAQ;AACnB,cAAM,UAAU,CAAC,GAAG,MAAM,GAAG,SAAS;AACtC,eAAO,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,MAC5D,CAAC;AAED,sBAAgB,UAAQ,oBAAI,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;AAElD,UAAI,OAAO,UAAU;AACnB,cAAM,EAAE,QAAAE,QAAO,IAAI,MAAM,OAAO,IAAS;AACzC,QAAAA,QAAO,OAAO,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MAC1D;AAAA,IACF,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,4BAA4B;AAAA,IAC5E,UAAE;AACA,iBAAW,KAAK;AAChB,qBAAe,IAAI;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,gBAAgB,YAAY,YAAY;AAC5C,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,eAAW,QAAQ,eAAe;AAChC,UAAI,CAAC,aAAa,IAAI,KAAK,MAAM,GAAG;AAClC,uBAAe,KAAK,MAAM;AAC1B,YAAI;AACF,gBAAM,UAAU,KAAK,MAAM;AAAA,QAC7B,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,eAAW,KAAK;AAChB,mBAAe,IAAI;AAAA,EACrB,GAAG,CAAC,WAAW,YAAY,CAAC;AAE5B,QAAM,SAAS,YAAY,CAAC,UAAkB;AAC5C,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB,wBAAkB,SAAS;AAAA,IAC7B,OAAO;AACL,YAAM,aAAa,MAAM,YAAY;AACrC;AAAA,QACE,UAAU;AAAA,UACR,CAAC,MACC,EAAE,KAAK,YAAY,EAAE,SAAS,UAAU,KACxC,EAAE,OAAO,YAAY,EAAE,SAAS,UAAU,KAC1C,EAAE,SAAS,YAAY,EAAE,SAAS,UAAU,KAC5C,EAAE,aAAa,YAAY,EAAE,SAAS,UAAU;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,UAAU,YAAY,MAAM;AAChC,oBAAgB,oBAAI,IAAI,CAAC;AACzB,iBAAa,CAAC,CAAC;AACf,sBAAkB,CAAC,CAAC;AAAA,EACtB,GAAG,CAAC,CAAC;AAEL,EAAAD,WAAU,MAAM;AACd,sBAAkB,SAAS;AAAA,EAC7B,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,SAAsB,eAAe,IAAI,CAAC,OAAO;AAAA,IACrD,MAAM,EAAE;AAAA,IACR,aAAa,EAAE,eAAe,EAAE;AAAA,IAChC,QAAQ,EAAE;AAAA,EACZ,EAAE;AAEF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,UAAU;AAAA,IACtB,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AD7KA,SAAS,kBAAAE,uBAA0D;AACnE,SAAS,aAAa,cAAAC,aAAY,sBAAsB;;;AENxD;AAAA,EACE;AAAA,EACA,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,OAChB;AACP,SAAS,kBAAkB;AAMpB,SAAS,cAAc,WAAiC;AAC7D,QAAM,OAAO,aAAa,WAAW,EAAE;AACvC,QAAM,UAAU,WAAW,IAAI;AAC/B,QAAM,cAAgC;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACA,SAAO,kBAAkB,WAAW;AACtC;AAEO,SAAS,cAAc,SAAS,OAAO,WAA+B;AAC3E,QAAM,OAAO,aAAa,WAAW,EAAE;AACvC,QAAM,UAAU,WAAW,IAAI;AAC/B,QAAM,cAAgC;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACA,SAAO,kBAAkB,aAAa,MAAM;AAC9C;;;AF4HQ,gBAAAC,MACA,QAAAC,aADA;AA9ID,SAAS,OAAO,EAAE,OAAO,GAAG,GAAU;AAC3C,QAAM,EAAE,OAAO,QAAQ,SAAS,aAAa,WAAW,cAAc,IAAI,eAAe;AACzF,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAe,OAAO;AAC9C,QAAM,CAAC,KAAK,MAAM,IAAIA,UAAS,CAAC;AAChC,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAwB,IAAI;AAChE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAwB,IAAI;AAC1D,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAkD,IAAI;AAChG,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAiE,CAAC,CAAC;AAE/F,QAAM,QAAQ,SAAS,UAAU,QAAQ,SAAS,WAAW,SAAS;AACtE,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC;AACvC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,MAAM,SAAS,UAAU,CAAC;AAC/F,QAAM,UAAU,MAAM,MAAM,OAAO,QAAQ,UAAU;AAErD,QAAM,qBAAqB,OAAO,WAAmB,WAAmB;AACtE,qBAAiB,EAAE,MAAM,WAAW,OAAO,CAAC;AAC5C,UAAM,WAAW,eAAe;AAChC,UAAM,YAA2B,CAAC;AAClC,eAAW,KAAK,UAAU;AACxB,gBAAU,KAAK;AAAA,QACb,MAAM,EAAE;AAAA,QACR,MAAM,EAAE;AAAA,QACR,UAAU,MAAM,EAAE,WAAW;AAAA,MAC/B,CAAC;AAAA,IACH;AACA,cAAU,SAAS;AACnB,YAAQ,QAAQ;AAChB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,eAAe,OAAO,WAAmB,QAAgB,cAA0B;AACvF,kBAAc,SAAS;AACvB,eAAW,IAAI;AAEf,QAAI;AACF,YAAM,WAAWC,gBAAe,MAAM;AACtC,UAAI,CAAC,UAAU;AACb,mBAAW,+BAA+B,MAAM,EAAE;AAClD,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,SAAS,MAAM,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC;AAE5D,UAAI,CAAC,OAAO,WAAW,CAAC,OAAO,kBAAkB;AAC/C,mBAAW,UAAU,OAAO,SAAS,iBAAiB,EAAE;AACxD,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,iBAAiB,KAAK,OAAK,EAAE,SAAS,SAAS;AACpE,UAAI,CAAC,OAAO;AACV,mBAAW,gBAAgB,SAAS,YAAY;AAChD,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,YAAM,kBAAkB,aAAa,MAAM,YAAY;AACvD,YAAM,UAAUC,YAAW,eAAe;AAC1C,YAAM,aAAa,cAAc,OAAO,eAAe;AAEvD,UAAI,CAAC,WAAW,UAAU,GAAG;AAC3B,kBAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MAC3C;AAEA,YAAM,aAAaC,MAAK,YAAY,SAAS;AAE7C,UAAI,WAAW,UAAU,GAAG;AAC1B,eAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACrD;AAEA,aAAO,MAAM,MAAM,YAAY,EAAE,WAAW,MAAM,aAAa,KAAK,CAAC;AAErE,YAAM,WAA0B;AAAA,QAC9B,MAAM;AAAA,QACN,aAAa;AAAA,QACb;AAAA,QACA,YAAY,SAAS;AAAA,QACrB,SAAS;AAAA,QACT,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,QACpC,SAAS;AAAA,MACX;AACA,4BAAkB,YAAY,QAAQ;AAEtC,UAAI,OAAO,UAAU;AACnB,eAAO,OAAO,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MAC1D;AAEA,iBAAW,oBAAe,SAAS,OAAO,QAAQ,IAAI,EAAE;AACxD,UAAI,CAAC,WAAW;AACd,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,SAAS,KAAK;AACZ,iBAAW,UAAU,eAAe,QAAQ,IAAI,UAAU,eAAe,EAAE;AAAA,IAC7E,UAAE;AACA,oBAAc,IAAI;AAClB,UAAI,WAAW;AACb,yBAAiB,IAAI;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAW,WAAY;AAE3B,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aAC5D,IAAI,QAAQ;AACnB,UAAI,SAAS,WAAW,MAAM,GAAG,GAAG;AAClC,kBAAU,MAAM,GAAG,EAAE,MAAM;AAC3B,gBAAQ,QAAQ;AAChB,eAAO,CAAC;AACR,mBAAW,IAAI;AAAA,MACjB,WAAW,SAAS,YAAY,OAAO,GAAG,GAAG,QAAQ;AACnD,qBAAa,OAAO,GAAG,EAAE,MAAM,OAAO,GAAG,EAAE,MAAM;AAAA,MACnD,WAAW,SAAS,YAAY,OAAO,GAAG,GAAG;AAC3C,qBAAa,cAAe,MAAM,cAAe,QAAQ,OAAO,GAAG,EAAE,IAAI;AAAA,MAC3E;AAAA,IACF,WACS,UAAU,OAAO,SAAS,YAAY,OAAO,GAAG,GAAG,QAAQ;AAClE,yBAAmB,OAAO,GAAG,EAAE,MAAM,OAAO,GAAG,EAAE,MAAO;AAAA,IAC1D,WACS,UAAU,KAAK;AACtB,UAAI,SAAS,UAAU;AACrB,gBAAQ,OAAO;AACf,eAAO,CAAC;AACR,mBAAW,IAAI;AAAA,MACjB,WAAW,SAAS,UAAU;AAC5B,gBAAQ,QAAQ;AAChB,eAAO,CAAC;AAAA,MACV;AAAA,IACF,WACS,UAAU,OAAO,SAAS,SAAS;AAC1C,oBAAc;AACd,cAAQ,QAAQ;AAChB,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AAED,MAAI,SAAS,UAAU;AACrB,WACE,gBAAAJ,MAACK,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAN,KAACO,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,0BAAY;AAAA,MAC9C,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAU,eAAe;AAAA,QAAK;AAAA,SAAiB;AAAA,MAC9D,gBAAAP,KAACO,OAAA,EAAK,UAAQ,MAAC,kEAAoD;AAAA,MAEnE,gBAAAP,KAACM,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B,kBAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,cAAM,IAAI;AACV,cAAM,SAAS,EAAE,WAAW,YAAY;AACxC,eACE,gBAAAL,MAACM,OAAA,EAAkB,SAAS,OACzB;AAAA,kBAAQ,QAAQ,UAAU;AAAA,UAAI;AAAA,UAAE,EAAE,KAAK,OAAO,EAAE;AAAA,UAAE;AAAA,UAAC,gBAAAP,KAACO,OAAA,EAAK,OAAO,OAAO,cAAe,kBAAO;AAAA,aADrF,EAAE,IAEb;AAAA,MAEJ,CAAC,GACH;AAAA,MAEA,gBAAAP,KAACM,MAAA,EAAI,WAAW,GACd,0BAAAN,KAACO,OAAA,EAAK,UAAQ,MAAC,6DAA+C,GAChE;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAN,MAACK,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAN,KAACO,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAU,mBAAS,UAAU,iBAAiB,UAAS;AAAA,IAC/E,WAAW,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAS;AAAA,MAAY;AAAA,OAAG;AAAA,IAClD,cAAc,gBAAAN,MAACM,OAAA,EAAK;AAAA;AAAA,MAAY;AAAA,MAAW;AAAA,OAAG;AAAA,IAC9C,WAAW,gBAAAP,KAACO,OAAA,EAAK,UAAQ,MAAE,mBAAQ;AAAA,IACpC,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAE;AAAA,YAAM;AAAA,MAAO;AAAA,OAAM;AAAA,IAEnC,gBAAAN,MAACK,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAL,MAACM,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,MAAM,MAAM;AACxB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,cAAM,OAAO,SAAS,UACjB,KAAyB,OACzB,KAA0B;AAC/B,cAAM,MAAM,SAAS,UAChB,KAAyB,SACzB,KAA0B,UAAU;AACzC,eACE,gBAAAN,MAACM,OAAA,EAAsB,SAAS,OAC7B;AAAA,kBAAQ,QAAQ,UAAU;AAAA,UAAK,KAAK,OAAO,EAAE;AAAA,UAAE;AAAA,UAAC,gBAAAP,KAACO,OAAA,EAAK,OAAO,OAAO,cAAe,eAAI;AAAA,aAD/E,MAAM,IAEjB;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,MAAM,UAAU,gBAAAN,MAACM,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,MAAM,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OACnG;AAAA,IAEA,gBAAAP,KAACM,MAAA,EAAI,WAAW,GACd,0BAAAN,KAACO,OAAA,EAAK,UAAQ,MACX,mBAAS,UACN,+BACA,uDACN,GACF;AAAA,KACF;AAEJ;;;AG7NA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;;;ACDpC,SAAS,YAAAC,WAAU,aAAAC,kBAAiB;AACpC,SAAS,qBAAqB;AAYvB,SAAS,YAA6B;AAC3C,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAsB,CAAC,CAAC;AACpD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AAEtD,QAAM,UAAU,MAAM;AACpB,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,aAAa,cAAc;AACjC,YAAM,cAAc,cAAc,UAAU;AAE5C,YAAM,aAA0B,YAAY,IAAI,CAAC,OAAO;AAAA,QACtD,MAAM,EAAE;AAAA,QACR,aAAa,EAAE;AAAA,QACf,QAAQ,EAAE,UAAU;AAAA,QACpB,SAAS,EAAE;AAAA,MACb,EAAE;AAEF,gBAAU,UAAU;AAAA,IACtB,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,uBAAuB;AAAA,IACvE,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,SAAS,OAAO,SAAiB;AACrC,UAAM,EAAE,QAAAC,QAAO,IAAI,MAAM,OAAO,IAAS;AACzC,UAAM,aAAa,OAAO,KAAK,OAAK,EAAE,SAAS,IAAI;AACnD,QAAI,YAAY;AACd,YAAM,aAAa,cAAc;AACjC,YAAM,YAAY,cAAc,UAAU;AAC1C,YAAM,QAAQ,UAAU,KAAK,OAAK,EAAE,SAAS,IAAI;AACjD,UAAI,OAAO;AACT,QAAAA,QAAO,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACnD,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,YAAQ;AAAA,EACV,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,QAAQ,SAAS,OAAO,SAAS,OAAO;AACnD;;;ADhCM,gBAAAC,MACA,QAAAC,aADA;AAlBC,SAAS,UAAU,EAAE,OAAO,GAAG,GAAU;AAC9C,QAAM,EAAE,QAAQ,SAAS,SAAS,OAAO,IAAI,UAAU;AACvD,QAAM,CAAC,KAAK,MAAM,IAAIC,UAAS,CAAC;AAEhC,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC;AACvC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,OAAO,SAAS,UAAU,CAAC;AAChG,QAAM,UAAU,OAAO,MAAM,OAAO,QAAQ,UAAU;AAEtD,EAAAC,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,QAAS;AACb,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,OAAO,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aAC7D,UAAU,IAAK,SAAQ;AAAA,aACvB,UAAU,OAAO,OAAO,GAAG,EAAG,QAAO,OAAO,GAAG,EAAE,IAAI;AAAA,EAChE,CAAC;AAED,SACE,gBAAAF,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAJ,KAACK,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,8BAAgB;AAAA,IAClD,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAE;AAAA,aAAO;AAAA,MAAO;AAAA,OAAO;AAAA,IAEpC,WAAW,gBAAAL,KAACK,OAAA,EAAK,wBAAU;AAAA,IAE3B,CAAC,WAAW,OAAO,WAAW,KAC7B,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,qDAAuC;AAAA,IAGvD,CAAC,WAAW,OAAO,SAAS,KAC3B,gBAAAJ,MAACG,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAH,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,eACE,gBAAAJ,MAACI,OAAA,EAAsB,SAAS,OAC7B;AAAA,kBAAQ,QAAQ,UAAU;AAAA,UAAK,MAAM,KAAK,OAAO,EAAE;AAAA,UAAE;AAAA,UAAE,MAAM,UAAU,gBAAAL,KAACK,OAAA,EAAK,OAAO,OAAO,cAAe,gBAAM,QAAO;AAAA,aAD/G,MAAM,IAEjB;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,OAAO,UAAU,gBAAAJ,MAACI,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,OAAO,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OACrG;AAAA,IAGF,gBAAAL,KAACI,MAAA,EAAI,WAAW,GACd,0BAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,yCAA2B,GAC5C;AAAA,KACF;AAEJ;;;AE1DA,SAAS,YAAAC,WAAU,aAAAC,kBAAiB;AACpC,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAEpC,SAAS,kBAAAC,uBAAsB;AA+CzB,gBAAAC,MACA,QAAAC,aADA;AAlCC,SAAS,KAAK,EAAE,OAAO,GAAG,GAAU;AACzC,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAwB,CAAC,CAAC;AACtD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,IAAI;AAC3C,QAAM,CAAC,KAAK,MAAM,IAAIA,UAAS,CAAC;AAChC,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,KAAK;AAE5C,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC;AACvC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,OAAO,SAAS,UAAU,CAAC;AAChG,QAAM,UAAU,OAAO,MAAM,OAAO,QAAQ,UAAU;AAEtD,EAAAC,WAAU,MAAM;AACd,KAAC,YAAY;AACX,YAAM,WAAWJ,gBAAe;AAChC,YAAM,IAAmB,CAAC;AAC1B,iBAAW,KAAK,UAAU;AACxB,UAAE,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,UAAU,MAAM,EAAE,WAAW,EAAE,CAAC;AAAA,MACvE;AACA,gBAAU,CAAC;AACX,iBAAW,KAAK;AAAA,IAClB,GAAG;AAAA,EACL,GAAG,CAAC,CAAC;AAEL,EAAAK,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAW,QAAS;AACxB,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,OAAO,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aAC7D,UAAU,KAAK;AAAE,iBAAW,IAAI;AAAG,iBAAW,MAAM,WAAW,KAAK,GAAG,GAAG;AAAA,IAAG,WAC7E,IAAI,UAAU,OAAO,GAAG,GAAG,UAAU;AAAE,iBAAW,IAAI;AAAG,iBAAW,MAAM,WAAW,KAAK,GAAG,GAAG;AAAA,IAAG;AAAA,EAC9G,CAAC;AAED,QAAM,WAAW,OAAO,OAAO,OAAK,EAAE,QAAQ,EAAE;AAEhD,SACE,gBAAAH,MAACI,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,yBAAW;AAAA,IAC7C,gBAAAL,MAACK,OAAA,EAAK,UAAQ,MAAE;AAAA;AAAA,MAAS;AAAA,MAAE,OAAO;AAAA,MAAO;AAAA,OAAgB;AAAA,IAExD,WAAW,gBAAAN,KAACM,OAAA,EAAK,iCAAmB;AAAA,IACpC,WAAW,gBAAAN,KAACM,OAAA,EAAK,wBAAU;AAAA,IAE3B,CAAC,WAAW,CAAC,WACZ,gBAAAL,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAJ,MAACK,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,eACE,gBAAAL,MAACK,OAAA,EAAsB,SAAS,OAAO,UAAU,CAAC,MAAM,UACrD;AAAA,kBAAQ,QAAQ,UAAU;AAAA,UAAK,MAAM,WAAW,QAAQ,aAAa,QAAQ;AAAA,UAAY;AAAA,UAAE,MAAM,KAAK,OAAO,EAAE;AAAA,UAAE;AAAA,UAAE,MAAM,WAAW,UAAU;AAAA,aADtI,MAAM,IAEjB;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,OAAO,UAAU,gBAAAL,MAACK,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,OAAO,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OACrG;AAAA,IAGF,gBAAAN,KAACK,MAAA,EAAI,WAAW,GACd,0BAAAL,KAACM,OAAA,EAAK,UAAQ,MAAC,uCAAyB,GAC1C;AAAA,KACF;AAEJ;;;AC7EA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAwB9B,gBAAAC,MAOM,QAAAC,aAPN;AAhBN,IAAM,WAAW;AAAA,EACf,EAAE,IAAI,SAAS,OAAO,iBAAiB,OAAO,cAAc;AAAA,EAC5D,EAAE,IAAI,QAAQ,OAAO,aAAa,OAAO,WAAW;AAAA,EACpD,EAAE,IAAI,SAAS,OAAO,aAAa,OAAO,oBAAoB;AAChE;AAEO,SAAS,SAAS,CAAC,GAAU;AAClC,QAAM,CAAC,KAAK,MAAM,IAAIC,UAAS,CAAC;AAEhC,EAAAC,UAAS,CAAC,GAAG,QAAQ;AACnB,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,SAAS,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,EAC1E,CAAC;AAED,SACE,gBAAAF,MAACG,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAJ,KAACK,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,sBAAQ;AAAA,IAC1C,gBAAAL,KAACK,OAAA,EAAK,UAAQ,MAAC,gCAAkB;AAAA,IAEjC,gBAAAL,KAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B,mBAAS,IAAI,CAAC,GAAG,MAAM;AACtB,YAAM,QAAQ,MAAM;AACpB,aACE,gBAAAH,MAACI,OAAA,EAAgB,SAAS,OACvB;AAAA,gBAAQ,QAAQ,UAAU;AAAA,QAAK,EAAE,MAAM,OAAO,EAAE;AAAA,QAAE;AAAA,QAAC,gBAAAL,KAACK,OAAA,EAAK,OAAO,OAAO,cAAe,YAAE,OAAM;AAAA,WADtF,EAAE,EAEb;AAAA,IAEJ,CAAC,GACH;AAAA,IAEA,gBAAAL,KAACI,MAAA,EAAI,WAAW,GACd,0BAAAJ,KAACK,OAAA,EAAK,UAAQ,MAAC,gCAAkB,GACnC;AAAA,KACF;AAEJ;;;AC5CA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,cAAAC,aAAY,aAAAC,YAAW,UAAAC,SAAQ,UAAAC,eAAc;AACtD,SAAS,QAAAC,aAAY;AACrB,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;;;ACHpC,SAAS,YAAAC,WAAU,eAAAC,cAAa,aAAAC,kBAAiB;AACjD;AAAA,EACE;AAAA,EACA;AAAA,EAGA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeA,SAAS,aAAa,cAAsB,QAAQ,IAAI,GAAuB;AACpF,QAAM,CAAC,iBAAiB,kBAAkB,IAAIF,UAAwB,CAAC,CAAC;AACxE,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAwB,CAAC,CAAC;AACpE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAgC,IAAI;AAClE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,CAAC;AAClD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAwC,SAAS;AACvF,QAAM,CAAC,MAAM,IAAIA,UAAS,MAAM,IAAI,qBAAqB,CAAC;AAE1D,QAAM,YAAYC,aAAY,MAAM;AAClC,UAAM,QAAQ,mBAAmB;AAEjC,QAAI,CAAC,OAAO;AACV,qBAAe,SAAS;AACxB,aAAO;AAAA,IACT;AAGA,QAAI,aAAa,KAAK,GAAG;AACvB,qBAAe,OAAO;AAAA,IACxB,OAAO;AACL,qBAAe,OAAO;AAAA,IACxB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAoBA,aAAY,MAA6B;AACjE,QAAI;AACF,YAAM,UAAU,IAAI,eAAe,WAAW;AAC9C,UAAI,UAAU,QAAQ,IAAI;AAE1B,UAAI,CAAC,SAAS;AACZ,kBAAU,QAAQ,KAAK;AAAA,MACzB;AAEA,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,MAAM,QAAQ,QAAQ;AAAA,QACtB,MAAM,QAAQ,QAAQ;AAAA,QACtB,OAAO,QAAQ;AAAA,QACf,UAAU,QAAQ;AAAA,QAClB,iBAAiB,QAAQ,QAAQ,aAAa,CAAC;AAAA,QAC/C,gBAAgB,QAAQ,QAAQ,YAAY,CAAC;AAAA,MAC/C;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,sBAAsBA,aAAY,MAAM;AAC5C,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AAEF,YAAM,iBAAiB,kBAAkB;AACzC,UAAI,CAAC,gBAAgB;AACnB,iBAAS,2BAA2B;AACpC,mBAAW,KAAK;AAChB;AAAA,MACF;AACA,iBAAW,cAAc;AAGzB,YAAM,QAAQ,UAAU;AACxB,UAAI,CAAC,SAAS,MAAM,OAAO,WAAW,GAAG;AACvC,2BAAmB,CAAC,CAAC;AACrB,wBAAgB,CAAC;AACjB,mBAAW,KAAK;AAChB;AAAA,MACF;AAEA,aAAO,UAAU,KAAK;AAGtB,YAAM,SAAS,OAAO,UAAU,gBAAgB;AAAA,QAC9C,OAAO;AAAA,QACP,UAAU;AAAA,QACV,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB,CAAC;AAED,yBAAmB,OAAO,eAAe;AACzC,sBAAgB,OAAO,kBAAkB;AAAA,IAC3C,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,+BAA+B;AAAA,IAC/E,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,mBAAmB,SAAS,CAAC;AAEzC,QAAM,cAAcA,aAAY,MAAM;AACpC,eAAW,IAAI;AACf,aAAS,IAAI;AAGb,oBAAgB,iBAAiB,EAC9B,KAAK,CAAC,EAAE,OAAO,OAAO,MAAM;AAC3B,UAAI,OAAO,SAAS,GAAG;AACrB,gBAAQ,KAAK,0BAA0B,MAAM;AAAA,MAC/C;AAGA,gBAAU,KAAK;AACf,qBAAe,OAAO;AAGtB,0BAAoB;AAAA,IACtB,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,eAAS,eAAe,QAAQ,IAAI,UAAU,wBAAwB;AACtE,iBAAW,KAAK;AAAA,IAClB,CAAC;AAAA,EACL,GAAG,CAAC,mBAAmB,CAAC;AAExB,QAAM,SAASA,aAAY,CAAC,UAAkB;AAC5C,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB,uBAAiB,CAAC,CAAC;AACnB;AAAA,IACF;AAEA,UAAM,UAAU,OAAO,OAAO;AAAA,MAC5B;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAGD,UAAM,gBAA+B,QAAQ,IAAI,QAAM;AAAA,MACrD,OAAO,EAAE;AAAA,MACT,OAAO,EAAE;AAAA,MACT,SAAS,EAAE,aAAa,IAAI,WAAS;AAAA,QACnC,UAAU;AAAA,QACV,aAAa,YAAY,IAAI;AAAA,QAC7B,QAAQ;AAAA,QACR,SAAS,CAAC,IAAI;AAAA,MAChB,EAAE;AAAA,MACF,UAAU,CAAC;AAAA,IACb,EAAE;AAEF,qBAAiB,aAAa;AAAA,EAChC,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,UAAUA,aAAY,MAAM;AAChC,wBAAoB;AAAA,EACtB,GAAG,CAAC,mBAAmB,CAAC;AAGxB,EAAAC,WAAU,MAAM;AACd,wBAAoB;AAAA,EACtB,GAAG,CAAC,mBAAmB,CAAC;AAExB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AD7LA,SAAS,kBAAAC,uBAA0D;AACnE,SAAS,eAAAC,cAAa,cAAAC,aAAY,kBAAAC,uBAAsB;AAkNhD,gBAAAC,MACA,QAAAC,aADA;AAxMD,SAAS,UAAU,EAAE,OAAO,GAAG,GAAU;AAC9C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa;AAEjB,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAe,iBAAiB;AACxD,QAAM,CAAC,KAAK,MAAM,IAAIA,UAAS,CAAC;AAChC,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,EAAE;AACjD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAClD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAwB,IAAI;AAChE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAwB,IAAI;AAC1D,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAkD,IAAI;AAChG,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAiE,CAAC,CAAC;AAE/F,QAAM,QAAQ,SAAS,oBACnB,kBACA,SAAS,WACT,gBACA;AAEJ,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,EAAE;AACxC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,MAAM,SAAS,UAAU,CAAC;AAC/F,QAAM,UAAU,MAAM,MAAM,OAAO,QAAQ,UAAU;AAErD,QAAM,qBAAqB,OAAO,WAAmB,WAAmB;AACtE,qBAAiB,EAAE,MAAM,WAAW,OAAO,CAAC;AAC5C,UAAM,WAAWC,gBAAe;AAChC,UAAM,YAA2B,CAAC;AAClC,eAAW,KAAK,UAAU;AACxB,gBAAU,KAAK;AAAA,QACb,MAAM,EAAE;AAAA,QACR,MAAM,EAAE;AAAA,QACR,UAAU,MAAM,EAAE,WAAW;AAAA,MAC/B,CAAC;AAAA,IACH;AACA,cAAU,SAAS;AACnB,YAAQ,QAAQ;AAChB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,eAAe,OAAO,WAAmB,QAAgB,cAA0B;AACvF,QAAI,CAAC,QAAQ;AACX,iBAAW,2CAA2C;AACtD;AAAA,IACF;AAEA,kBAAc,SAAS;AACvB,eAAW,IAAI;AAEf,QAAI;AACF,YAAM,WAAWC,gBAAe,MAAM;AACtC,UAAI,CAAC,UAAU;AACb,mBAAW,+BAA+B,MAAM,EAAE;AAClD,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,SAAS,MAAM,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC;AAE5D,UAAI,CAAC,OAAO,WAAW,CAAC,OAAO,kBAAkB;AAC/C,mBAAW,UAAU,OAAO,SAAS,iBAAiB,EAAE;AACxD,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,iBAAiB,KAAK,OAAK,EAAE,SAAS,SAAS;AACpE,UAAI,CAAC,OAAO;AACV,mBAAW,gBAAgB,SAAS,oBAAoB;AACxD,sBAAc,IAAI;AAClB;AAAA,MACF;AAEA,YAAM,kBAAkB,aAAa,MAAMC,aAAY;AACvD,YAAM,UAAUC,YAAW,eAAe;AAC1C,YAAM,aAAa,cAAc,OAAO,eAAe;AAEvD,UAAI,CAACC,YAAW,UAAU,GAAG;AAC3B,QAAAC,WAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,MAC3C;AAEA,YAAM,aAAaC,MAAK,YAAY,SAAS;AAE7C,UAAIF,YAAW,UAAU,GAAG;AAC1B,QAAAG,QAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACrD;AAEA,MAAAC,QAAO,MAAM,MAAM,YAAY,EAAE,WAAW,MAAM,aAAa,KAAK,CAAC;AAErE,YAAM,WAA0B;AAAA,QAC9B,MAAM;AAAA,QACN,aAAa;AAAA,QACb;AAAA,QACA,YAAY,SAAS;AAAA,QACrB,SAAS;AAAA,QACT,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,QACpC,SAAS;AAAA,MACX;AACA,4BAAkB,YAAY,QAAQ;AAEtC,UAAI,OAAO,UAAU;AACnB,QAAAD,QAAO,OAAO,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MAC1D;AAEA,iBAAW,oBAAe,SAAS,OAAO,QAAQ,IAAI,EAAE;AAAA,IAC1D,SAAS,KAAK;AACZ,iBAAW,UAAU,eAAe,QAAQ,IAAI,UAAU,eAAe,EAAE;AAAA,IAC7E,UAAE;AACA,oBAAc,IAAI;AAClB,UAAI,WAAW;AACb,yBAAiB,IAAI;AACrB,gBAAQ,iBAAiB;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,EAAAE,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAW,WAAY;AAG3B,QAAI,YAAY;AACd,UAAI,IAAI,QAAQ;AACd,sBAAc,KAAK;AACnB,uBAAe,EAAE;AACjB,gBAAQ,iBAAiB;AACzB;AAAA,MACF;AACA,UAAI,IAAI,QAAQ;AACd,sBAAc,KAAK;AACnB,YAAI,YAAY,KAAK,GAAG;AACtB,iBAAO,WAAW;AAClB,kBAAQ,QAAQ;AAChB,iBAAO,CAAC;AAAA,QACV;AACA;AAAA,MACF;AACA,UAAI,IAAI,aAAa,IAAI,QAAQ;AAC/B,uBAAe,OAAK,EAAE,MAAM,GAAG,EAAE,CAAC;AAClC;AAAA,MACF;AACA,UAAI,SAAS,CAAC,IAAI,QAAQ,CAAC,IAAI,MAAM;AACnC,uBAAe,OAAK,IAAI,KAAK;AAC7B;AAAA,MACF;AACA;AAAA,IACF;AAGA,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aAC5D,IAAI,QAAQ;AACnB,UAAI,SAAS,YAAY,OAAO,GAAG,GAAG;AACpC,qBAAa,cAAe,MAAM,cAAe,QAAQ,OAAO,GAAG,EAAE,IAAI;AAAA,MAC3E,YAAY,SAAS,qBAAqB,SAAS,aAAa,MAAM,GAAG,GAAG;AAC1E,cAAM,QAAQ,MAAM,GAAG;AACvB,YAAI,MAAM,MAAM,QAAQ;AACtB,uBAAa,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,QACnD;AAAA,MACF;AAAA,IACF,WAES,UAAU,KAAK;AACtB,oBAAc,IAAI;AAClB,qBAAe,EAAE;AAAA,IACnB,WACS,UAAU,QAAQ,SAAS,qBAAqB,SAAS,aAAa,MAAM,GAAG,GAAG;AACzF,YAAM,QAAQ,MAAM,GAAG;AACvB,UAAI,MAAM,MAAM,QAAQ;AACtB,2BAAmB,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAAA,MACzD;AAAA,IACF,WACS,UAAU,KAAK;AACtB,kBAAY;AAAA,IACd,WACS,UAAU,OAAO,SAAS,mBAAmB;AACpD,UAAI,SAAS,UAAU;AACrB,gBAAQ,iBAAiB;AAAA,MAC3B,OAAO;AACL,gBAAQ,iBAAiB;AACzB,uBAAe,EAAE;AAAA,MACnB;AACA,aAAO,CAAC;AAAA,IACV,WACS,UAAU,KAAK;AACtB,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAGD,MAAI,SAAS,UAAU;AACrB,WACE,gBAAAX,MAACY,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAb,KAACc,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,0BAAY;AAAA,MAC9C,gBAAAb,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAU,eAAe;AAAA,QAAK;AAAA,SAAiB;AAAA,MAE9D,gBAAAd,KAACa,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B,kBAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,cAAM,IAAI;AACV,cAAM,SAAS,EAAE,WAAW,YAAY;AACxC,eACE,gBAAAZ,MAACa,OAAA,EAAkB,SAAS,OACzB;AAAA,kBAAQ,QAAQ,UAAU;AAAA,UAAI;AAAA,UAAE,EAAE,KAAK,OAAO,EAAE;AAAA,UAAE;AAAA,UAAC,gBAAAd,KAACc,OAAA,EAAK,OAAO,OAAO,cAAe,kBAAO;AAAA,aADrF,EAAE,IAEb;AAAA,MAEJ,CAAC,GACH;AAAA,MAEA,gBAAAd,KAACa,MAAA,EAAI,WAAW,GACd,0BAAAb,KAACc,OAAA,EAAK,UAAQ,MAAC,2CAA6B,GAC9C;AAAA,OACF;AAAA,EAEJ;AAGA,QAAM,cAAc,CAAC,UAA0B;AAC7C,UAAM,SAAS,KAAK,MAAM,QAAQ,EAAE;AACpC,UAAM,QAAQ,KAAK;AACnB,WAAO,SAAI,OAAO,MAAM,IAAI,SAAI,OAAO,KAAK;AAAA,EAC9C;AAEA,QAAM,gBAAgB,CAAC,UAAkB;AACvC,QAAI,SAAS,GAAI,QAAO;AACxB,QAAI,SAAS,GAAI,QAAO;AACxB,WAAO;AAAA,EACT;AAEA,SACE,gBAAAb,MAACY,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAb,KAACc,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SACtB,mBAAS,WAAW,YAAY,WAAW,MAAM,mBACpD;AAAA,IAGC,WAAW,gBAAAd,KAACc,OAAA,EAAK,UAAQ,MAAC,wBAAU;AAAA,IACpC,cAAc,gBAAAb,MAACa,OAAA,EAAK;AAAA;AAAA,MAAY;AAAA,MAAW;AAAA,OAAG;AAAA,IAC9C,WAAW,gBAAAd,KAACc,OAAA,EAAK,UAAQ,MAAE,mBAAQ;AAAA,IACnC,SAAS,gBAAAd,KAACc,OAAA,EAAK,OAAM,OAAO,iBAAM;AAAA,IAGlC,cACC,gBAAAb,MAACY,MAAA,EAAI,WAAW,GACd;AAAA,sBAAAZ,MAACa,OAAA,EAAK;AAAA;AAAA,QAAS;AAAA,SAAY;AAAA,MAC3B,gBAAAd,KAACc,OAAA,EAAK,UAAQ,MAAC,oBAAC;AAAA,OAClB;AAAA,IAID,gBAAgB,aAAa,CAAC,WAC7B,gBAAAb,MAACY,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAb,KAACc,OAAA,EAAK,OAAM,UAAS,mCAAqB;AAAA,MAC1C,gBAAAd,KAACc,OAAA,EAAK,UAAQ,MAAC,2DAA6C;AAAA,OAC9D;AAAA,IAGD,gBAAgB,WAAW,CAAC,WAC3B,gBAAAd,KAACc,OAAA,EAAK,UAAQ,MAAC,yDAA2C;AAAA,IAI3D,WAAW,CAAC,cACX,gBAAAb,MAACY,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAZ,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QACH,QAAQ;AAAA,QACjB,QAAQ,OAAO,KAAK,QAAQ,IAAI,MAAM;AAAA,SACzC;AAAA,MACC,QAAQ,MAAM,UAAU,SAAS,KAChC,gBAAAb,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QACL,QAAQ,MAAM,UAAU,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,QACzD,QAAQ,MAAM,WAAW,SAAS,KAAK,KAAK,QAAQ,MAAM,WAAW,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,SACnG;AAAA,OAEJ;AAAA,IAID,CAAC,cACA,gBAAAd,KAACc,OAAA,EAAK,UAAQ,MACX,mBAAS,WACN,GAAG,cAAc,MAAM,aACvB,GAAG,gBAAgB,MAAM,OAAO,YAAY,mBAClD;AAAA,IAIF,gBAAAb,MAACY,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAZ,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,MAAM,MAAM;AACxB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,cAAM,QAAS,KAAmC;AAClD,cAAM,QAAS,KAAmC;AAElD,eACE,gBAAAb,MAACY,MAAA,EAAqB,eAAc,UAClC;AAAA,0BAAAZ,MAACa,OAAA,EAAK,SAAS,OACZ;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAC3B,gBAAAb,MAACa,OAAA,EAAK,OAAO,cAAc,KAAK,GAAI;AAAA,oBAAM,SAAS,EAAE,SAAS,CAAC;AAAA,cAAE;AAAA,eAAC;AAAA,YACjE;AAAA,YACD,gBAAAd,KAACc,OAAA,EAAK,OAAO,cAAc,KAAK,GAAI,sBAAY,KAAK,GAAE;AAAA,YACtD;AAAA,YACD,gBAAAd,KAACc,OAAA,EAAK,MAAI,MAAE,gBAAM,MAAK;AAAA,aACzB;AAAA,UACC,SAAS,MAAM,eACd,gBAAAb,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAO,MAAM,YAAY,MAAM,GAAG,EAAE;AAAA,YAAG,MAAM,YAAY,SAAS,KAAK,QAAQ;AAAA,aAAG;AAAA,UAElG,SAAS,MAAM,UACd,gBAAAb,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAe,MAAM;AAAA,aAAO;AAAA,aAbrC,MAAM,IAehB;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,MAAM,UAAU,gBAAAb,MAACa,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,MAAM,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OACnG;AAAA,IAGA,gBAAAd,KAACa,MAAA,EAAI,WAAW,GACd,0BAAAb,KAACc,OAAA,EAAK,UAAQ,MACX,mBAAS,WACN,sEACA,wEACN,GACF;AAAA,KACF;AAEJ;;;AEhWA,SAAS,YAAAC,YAAU,aAAAC,kBAAiB;AACpC,SAAS,cAAAC,aAAY,aAAa,gBAAAC,eAAc,eAAe,aAAAC,kBAAiB;AAChF,SAAS,QAAAC,aAAY;AACrB,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAEpC;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,kBAAAC,iBAAgB,cAAAC,mBAAkB;AAgLnC,SAYE,OAAAC,MAZF,QAAAC,aAAA;AAhKD,SAAS,UAAU,EAAE,OAAO,GAAG,GAAU;AAC9C,QAAM,CAAC,MAAM,OAAO,IAAIC,WAAe,QAAQ;AAC/C,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAA2B,CAAC,CAAC;AACzD,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAA8C,CAAC,CAAC;AAC5E,QAAM,CAAC,KAAK,MAAM,IAAIA,WAAS,CAAC;AAChC,QAAM,CAAC,eAAe,gBAAgB,IAAIA,WAAgC,IAAI;AAC9E,QAAM,CAAC,eAAe,gBAAgB,IAAIA,WAAmD,IAAI;AACjG,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAiB,EAAE;AACjD,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAsE,IAAI;AACtG,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,KAAK;AAE5C,EAAAC,WAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,YAAM,aAAa,cAAc,KAAK;AACtC,YAAM,cAAgC,CAAC;AAEvC,UAAIC,YAAW,UAAU,GAAG;AAC1B,cAAM,OAAO,YAAY,YAAY,EAAE,eAAe,KAAK,CAAC,EACzD,OAAO,OAAK,EAAE,YAAY,CAAC,EAC3B,IAAI,OAAK,EAAE,IAAI;AAElB,mBAAW,OAAO,MAAM;AACtB,gBAAM,YAAYC,MAAK,YAAY,GAAG;AACtC,gBAAM,cAAcA,MAAK,WAAW,UAAU;AAE9C,cAAID,YAAW,WAAW,GAAG;AAC3B,kBAAM,UAAUE,cAAa,aAAa,OAAO;AACjD,wBAAY,KAAK;AAAA,cACf,MAAM;AAAA,cACN,MAAM;AAAA,cACN;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,gBAAU,WAAW;AAAA,IACvB;AAEA,eAAW;AAAA,EACb,GAAG,CAAC,CAAC;AAEL,EAAAH,WAAU,MAAM;AACd,UAAM,WAAWI,gBAAe;AAChC,UAAM,kBAAkB,8BAA8B;AACtD,UAAM,YAAY,SACf,OAAO,OAAK,gBAAgB,SAAS,EAAE,IAAiB,CAAC,EACzD,IAAI,QAAM;AAAA,MACT,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,IACV,EAAE;AACJ,cAAU,SAAS;AAAA,EACrB,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,SAAS,WAAW,SAAS;AAClD,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,EAAE;AACxC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,aAAa,SAAS,UAAU,CAAC;AACtG,QAAM,UAAU,aAAa,MAAM,OAAO,QAAQ,UAAU;AAE5D,QAAM,kBAAkB,CAAC,OAAuB,UAA6C;AAC3F,QAAI;AACF,YAAMC,UAAS,eAAe,MAAM,SAAS,MAAM,MAAM,EAAE,gBAAgB,WAAW,CAAC;AACvF,aAAOA,QAAO;AAAA,IAChB,SAAS,KAAK;AACZ,aAAO,UAAU,eAAe,QAAQ,IAAI,UAAU,oBAAoB;AAAA,IAC5E;AAAA,EACF;AAEA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,CAAC,iBAAiB,CAAC,cAAe;AAEtC,eAAW,IAAI;AACf,QAAI;AACF,YAAM,oBAAoB,eAAe,cAAc,SAAS,cAAc,MAAM;AAAA,QAClF,gBAAgB;AAAA,MAClB,CAAC;AAED,UAAI,CAAC,kBAAkB,SAAS;AAC9B,kBAAU;AAAA,UACR,SAAS;AAAA,UACT,SAAS,uBAAuB,kBAAkB,SAAS,KAAK,IAAI,CAAC;AAAA,QACvE,CAAC;AACD,mBAAW,KAAK;AAChB;AAAA,MACF;AAEA,YAAM,UAAUC,YAAW,cAAc,IAAI;AAC7C,YAAM,YAAY,SAAS,YACvBJ,MAAK,QAAQ,IAAI,GAAG,QAAQ,SAAS,IACrCA,MAAK,QAAQ,IAAI,GAAG,IAAI,cAAc,IAAI,UAAU;AAExD,UAAI,CAACD,YAAW,SAAS,GAAG;AAC1B,QAAAM,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,MAC1C;AAEA,YAAM,WAAW,kBAAkB,YAAY,GAAG,cAAc,IAAI;AACpE,YAAM,aAAaL,MAAK,WAAW,QAAQ;AAE3C,oBAAc,YAAY,kBAAkB,SAAS,OAAO;AAE5D,gBAAU;AAAA,QACR,SAAS;AAAA,QACT,SAAS,cAAc,cAAc,IAAI,OAAO,cAAc,IAAI;AAAA,QAClE,MAAM;AAAA,MACR,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,gBAAU;AAAA,QACR,SAAS;AAAA,QACT,SAAS,UAAU,eAAe,QAAQ,IAAI,UAAU,eAAe;AAAA,MACzE,CAAC;AAAA,IACH,UAAE;AACA,iBAAW,KAAK;AAChB,cAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,EAAAM,UAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,QAAS;AAEb,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,aAAa,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aACnE,IAAI,QAAQ;AACnB,UAAI,SAAS,UAAU;AACrB,gBAAQ,QAAQ;AAChB,yBAAiB,IAAI;AACrB,yBAAiB,IAAI;AACrB,kBAAU,IAAI;AACd,eAAO,CAAC;AAAA,MACV,WAAW,SAAS,WAAW;AAC7B,gBAAQ,QAAQ;AAAA,MAClB,WAAW,SAAS,UAAU;AAC5B,gBAAQ,QAAQ;AAChB,yBAAiB,IAAI;AAAA,MACvB;AAAA,IACF,WACS,IAAI,QAAQ;AACnB,UAAI,SAAS,YAAY,OAAO,GAAG,GAAG;AACpC,yBAAiB,OAAO,GAAG,CAAC;AAC5B,gBAAQ,QAAQ;AAChB,eAAO,CAAC;AAAA,MACV,WAAW,SAAS,YAAY,OAAO,GAAG,GAAG;AAC3C,yBAAiB,OAAO,GAAG,CAAC;AAC5B,cAAM,iBAAiB,gBAAgB,eAAgB,OAAO,GAAG,CAAC;AAClE,mBAAW,cAAc;AACzB,gBAAQ,SAAS;AAAA,MACnB,WAAW,SAAS,WAAW;AAC7B,2BAAmB;AAAA,MACrB,WAAW,SAAS,UAAU;AAC5B,gBAAQ,QAAQ;AAChB,yBAAiB,IAAI;AACrB,yBAAiB,IAAI;AACrB,kBAAU,IAAI;AACd,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,SAAS,YAAY,QAAQ;AAC/B,WACE,gBAAAV,MAACW,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAX,MAACY,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS;AAAA;AAAA,QAAa,OAAO,UAAU,aAAa;AAAA,SAAS;AAAA,MAEtF,gBAAAZ,MAACW,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,wBAAAX,MAACY,OAAA,EAAK,OAAO,OAAO,UAAU,UAAU,OACrC;AAAA,iBAAO,UAAU,WAAM;AAAA,UAAI;AAAA,UAAE,OAAO;AAAA,WACvC;AAAA,QACC,OAAO,QACN,gBAAAZ,MAACY,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAW,OAAO;AAAA,WAAK;AAAA,SAE1C;AAAA,MAEA,gBAAAb,KAACY,MAAA,EAAI,WAAW,GACd,0BAAAZ,KAACa,OAAA,EAAK,UAAQ,MAAC,4CAA8B,GAC/C;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,SAAS,WAAW;AACtB,UAAM,eAAe,QAAQ,MAAM,IAAI,EAAE,MAAM,GAAG,UAAU;AAC5D,WACE,gBAAAZ,MAACW,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAZ,KAACa,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,iCAAmB;AAAA,MACrD,gBAAAZ,MAACY,OAAA,EAAK,UAAQ,MACX;AAAA,uBAAe;AAAA,QAAK;AAAA,QAAI,eAAe;AAAA,SAC1C;AAAA,MAEA,gBAAAZ,MAACW,MAAA,EAAI,WAAW,GAAG,eAAc,UAAS,aAAY,UAAS,UAAU,GACtE;AAAA,qBAAa,IAAI,CAAC,MAAM,MACvB,gBAAAZ,KAACa,OAAA,EAAa,UAAQ,MAAE,eAAK,MAAM,GAAG,EAAE,KAA7B,CAA+B,CAC3C;AAAA,QACA,QAAQ,MAAM,IAAI,EAAE,SAAS,cAC5B,gBAAAZ,MAACY,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAM,QAAQ,MAAM,IAAI,EAAE,SAAS;AAAA,UAAW;AAAA,WAAY;AAAA,SAE7E;AAAA,MAEA,gBAAAb,KAACY,MAAA,EAAI,WAAW,GACd,0BAAAZ,KAACa,OAAA,EAAK,UAAQ,MAAC,iDAAmC,GACpD;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAZ,MAACW,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAZ,KAACa,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SACtB,mBAAS,WAAW,oBAAoB,uBAC3C;AAAA,IAEC,SAAS,YACR,gBAAAb,KAACa,OAAA,EAAK,UAAQ,MAAC,iEAAmD;AAAA,IAGnE,SAAS,YAAY,iBACpB,gBAAAZ,MAACY,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAY,cAAc;AAAA,MAAK;AAAA,OAAwB;AAAA,IAGvE,OAAO,WAAW,KAAK,SAAS,YAC/B,gBAAAb,KAACY,MAAA,EAAI,WAAW,GACd,0BAAAZ,KAACa,OAAA,EAAK,OAAM,UAAS,oFAAsE,GAC7F;AAAA,IAGF,gBAAAZ,MAACW,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAX,MAACY,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,MAAM,MAAM;AACxB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AAEtB,YAAI,SAAS,UAAU;AACrB,gBAAM,QAAQ;AACd,iBACE,gBAAAZ,MAACY,OAAA,EAAsB,SAAS,OAC7B;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAAI;AAAA,YAAE,MAAM;AAAA,eAD9B,MAAM,IAEjB;AAAA,QAEJ,OAAO;AACL,gBAAM,QAAQ;AACd,iBACE,gBAAAZ,MAACY,OAAA,EAAsB,SAAS,OAC7B;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAAI;AAAA,YAAE,MAAM,KAAK,OAAO,EAAE;AAAA,YAAE;AAAA,YAAC,gBAAAZ,MAACY,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAE,MAAM;AAAA,cAAK;AAAA,eAAC;AAAA,eAD5E,MAAM,IAEjB;AAAA,QAEJ;AAAA,MACF,CAAC;AAAA,MACA,QAAQ,aAAa,aAAa,UACjC,gBAAAZ,MAACY,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,aAAa,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OAEtE;AAAA,IAEA,gBAAAb,KAACY,MAAA,EAAI,WAAW,GACd,0BAAAZ,KAACa,OAAA,EAAK,UAAQ,MACX,mBAAS,WACN,+BACA,wCACN,GACF;AAAA,KACF;AAEJ;;;AC7RA,SAAS,YAAAC,YAAU,aAAAC,kBAAiB;AACpC,SAAS,OAAAC,MAAK,QAAAC,OAAM,YAAAC,iBAAgB;AAEpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,kBAAAC,uBAAsB;AAwJzB,SAoEE,UAnEA,OAAAC,MADF,QAAAC,aAAA;AAxIC,SAAS,QAAQ,EAAE,OAAO,GAAG,GAAU;AAC5C,QAAM,CAAC,MAAM,OAAO,IAAIC,WAAe,UAAU;AACjD,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAgC,IAAI;AAClE,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAC3C,QAAM,CAAC,cAAc,eAAe,IAAIA,WAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,KAAK;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAsB,CAAC,CAAC;AACpD,QAAM,CAAC,KAAK,MAAM,IAAIA,WAAS,CAAC;AAChC,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAwB,IAAI;AAC1D,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAwB,IAAI;AAEtD,QAAM,cAAc,QAAQ,IAAI;AAEhC,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,YAAY;AACvB,iBAAW,IAAI;AACf,UAAI;AACF,cAAM,MAAM,YAAY,WAAW;AACnC,mBAAW,GAAG;AAEd,cAAM,WAAWJ,gBAAe;AAChC,cAAM,YAAyB,CAAC;AAChC,mBAAW,KAAK,UAAU;AACxB,gBAAM,WAAW,MAAM,EAAE,WAAW;AACpC,oBAAU,KAAK;AAAA,YACb,MAAM,EAAE;AAAA,YACR,MAAM,EAAE;AAAA,YACR;AAAA,YACA,QAAQ,KAAK,QAAQ,QAAQ,SAAS,EAAE,IAAI;AAAA,UAC9C,CAAC;AAAA,QACH;AACA,kBAAU,SAAS;AAAA,MACrB,SAAS,KAAK;AACZ,iBAAS,eAAe,QAAQ,IAAI,UAAU,wBAAwB;AAAA,MACxE,UAAE;AACA,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAEA,SAAK;AAAA,EACP,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,EAAE;AACxC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,OAAO,SAAS,UAAU,CAAC;AAChG,QAAM,UAAU,OAAO,MAAM,OAAO,QAAQ,UAAU;AAEtD,QAAM,aAAa,MAAM;AACvB,oBAAgB,IAAI;AACpB,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,aAAa,YAAY,WAAW;AAC1C,iBAAW,UAAU;AACrB,iBAAW,kCAAkC;AAAA,IAC/C,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,8BAA8B;AAAA,IAC9E,UAAE;AACA,sBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,aAAa,OAAO,cAAyB;AACjD,eAAW,IAAI;AACf,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,YAAY,WAAW,WAAW;AAExC;AAAA,QAAU,UACR,KAAK;AAAA,UAAI,OACP,EAAE,SAAS,YAAY,EAAE,GAAG,GAAG,QAAQ,KAAK,IAAI;AAAA,QAClD;AAAA,MACF;AAEA,iBAAW,aAAa,SAAS,eAAe;AAAA,IAClD,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,aAAa;AAAA,IAC7D,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,QAAM,gBAAgB,YAAY;AAChC,eAAW,IAAI;AACf,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,iBAAiB,OAAO,OAAO,OAAK,EAAE,QAAQ;AACpD,iBAAW,SAAS,gBAAgB;AAClC,cAAM,YAAY,MAAM,MAAM,WAAW;AAAA,MAC3C;AAEA;AAAA,QAAU,UACR,KAAK;AAAA,UAAI,OACP,EAAE,WAAW,EAAE,GAAG,GAAG,QAAQ,KAAK,IAAI;AAAA,QACxC;AAAA,MACF;AAEA,iBAAW,aAAa,eAAe,MAAM,SAAS;AAAA,IACxD,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,aAAa;AAAA,IAC7D,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,EAAAK,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAW,gBAAgB,QAAS;AAExC,QAAI,SAAS,QAAQ;AACnB,UAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,eACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,OAAO,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,eAC7D,IAAI,UAAU,OAAO,GAAG,GAAG;AAClC,mBAAW,OAAO,GAAG,EAAE,IAAI;AAAA,MAC7B,WACS,IAAI,QAAQ;AACnB,gBAAQ,UAAU;AAClB,eAAO,CAAC;AAAA,MACV,WACS,UAAU,KAAK;AACtB,sBAAc;AAAA,MAChB;AAAA,IACF,WAAW,SAAS,YAAY;AAC9B,UAAI,UAAU,IAAK,YAAW;AAAA,eACrB,UAAU,KAAK;AACtB,gBAAQ,MAAM;AACd,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,SAAS;AACX,WACE,gBAAAH,MAACI,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,6BAAe;AAAA,MACjD,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,wBAAU;AAAA,OAC3B;AAAA,EAEJ;AAEA,MAAI,SAAS,QAAQ;AACnB,WACE,gBAAAL,MAACI,MAAA,EAAI,eAAc,UACjB;AAAA,sBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,4BAAc;AAAA,MAChD,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,0DAA4C;AAAA,MAE1D,WAAW,gBAAAL,MAACK,OAAA,EAAK,OAAM,SAAS;AAAA;AAAA,QAAI;AAAA,QAAE;AAAA,SAAQ;AAAA,MAC9C,SAAS,gBAAAL,MAACK,OAAA,EAAK,OAAM,OAAO;AAAA;AAAA,QAAI;AAAA,QAAE;AAAA,SAAM;AAAA,MACxC,WAAW,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,wBAAU;AAAA,MAErC,gBAAAL,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,gBAAQ,KAAK,gBAAAJ,MAACK,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAK;AAAA,UAAM;AAAA,WAAK;AAAA,QAC5C,QAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,gBAAM,MAAM,QAAQ;AACpB,gBAAM,QAAQ,QAAQ;AACtB,gBAAM,SAAS,MAAM,SACjB,aACA,MAAM,WACN,YACA;AACJ,gBAAM,cAAc,MAAM,SAAS,UAAU,MAAM,WAAW,WAAW;AAEzE,iBACE,gBAAAL,MAACK,OAAA,EAAsB,SAAS,OAC7B;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAAI;AAAA,YAAE,MAAM,KAAK,OAAO,EAAE;AAAA,YACrD,gBAAAN,KAACM,OAAA,EAAK,OAAO,aAAc,kBAAO;AAAA,eAFzB,MAAM,IAGjB;AAAA,QAEJ,CAAC;AAAA,QACA,QAAQ,aAAa,OAAO,UAC3B,gBAAAL,MAACK,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAK,OAAO,SAAS,QAAQ;AAAA,UAAW;AAAA,WAAK;AAAA,SAEhE;AAAA,MAEA,gBAAAN,KAACK,MAAA,EAAI,WAAW,GACd,0BAAAL,KAACM,OAAA,EAAK,UAAQ,MAAC,wEAA0D,GAC3E;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,QAAQ,SAAS;AACvB,QAAM,gBAAgB,OAAO,OAAO,OAAK,EAAE,QAAQ,EAAE;AACrD,QAAM,cAAc,OAAO,OAAO,OAAK,EAAE,MAAM,EAAE;AAEjD,SACE,gBAAAL,MAACI,MAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,6BAAe;AAAA,IAEhD,WAAW,gBAAAL,MAACK,OAAA,EAAK,OAAM,SAAS;AAAA;AAAA,MAAI;AAAA,MAAE;AAAA,OAAQ;AAAA,IAC9C,SAAS,gBAAAL,MAACK,OAAA,EAAK,OAAM,OAAO;AAAA;AAAA,MAAI;AAAA,MAAE;AAAA,OAAM;AAAA,IACxC,gBAAgB,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,6BAAe;AAAA,IAE9C,CAAC,WACA,gBAAAL,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,KAACM,OAAA,EAAK,OAAM,UAAS,+BAAiB;AAAA,MACtC,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,+DAAiD;AAAA,OAClE;AAAA,IAGD,WACC,gBAAAL,MAAA,YACE;AAAA,sBAAAA,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,wBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,sBAAQ;AAAA,QACnB,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAS,QAAQ,SAAS,QAAQ;AAAA,WAAU;AAAA,QAClD,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAS,QAAQ,SAAS,QAAQ;AAAA,WAAe;AAAA,SACzD;AAAA,MAEA,gBAAAL,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,wBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,oBAAM;AAAA,QAChB,OAAO,aAAa,MAAM,UAAU,SAAS,KAC5C,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAc,MAAM,UAAU,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,WAAE;AAAA,QAEjE,OAAO,cAAc,MAAM,WAAW,SAAS,KAC9C,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAe,MAAM,WAAW,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,WAAE;AAAA,QAEnE,OAAO,aAAa,MAAM,UAAU,SAAS,KAC5C,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAc,MAAM,UAAU,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,UAAG,MAAM,UAAU,SAAS,IAAI,QAAQ;AAAA,WAAG;AAAA,QAErH,CAAC,OAAO,WAAW,UAAU,CAAC,OAAO,YAAY,UACjD,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,2DAA6C;AAAA,SAEhE;AAAA,MAEA,gBAAAL,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,wBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,qBAAO;AAAA,QAClB,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAa;AAAA,UAAc;AAAA,WAAO;AAAA,QACxC,gBAAAL,MAACK,OAAA,EAAK;AAAA;AAAA,UAAW;AAAA,UAAY;AAAA,WAAO;AAAA,QACnC,gBAAgB,KACf,gBAAAL,MAACK,OAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,UAAI,OAAO,OAAO,OAAK,EAAE,QAAQ,EAAE,IAAI,OAAK,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,UAAE;AAAA,WAAC;AAAA,SAEnF;AAAA,OACF;AAAA,IAGF,gBAAAL,MAACI,MAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,KAACM,OAAA,EAAK,MAAI,MAAC,sBAAQ;AAAA,MACnB,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,8CAAgC;AAAA,MAC/C,gBAAAN,KAACM,OAAA,EAAK,UAAQ,MAAC,kCAAoB;AAAA,OACrC;AAAA,IAEA,gBAAAN,KAACK,MAAA,EAAI,WAAW,GACd,0BAAAL,KAACM,OAAA,EAAK,UAAQ,MAAC,sDAAwC,GACzD;AAAA,KACF;AAEJ;;;ACnRA,SAAS,YAAAC,YAAU,aAAAC,kBAAiB;AACpC,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,iBAAgB;AAEpC,SAAS,qBAAoD;AAiDvD,gBAAAC,OACA,QAAAC,cADA;AA1CC,SAAS,SAAS,EAAE,OAAO,GAAG,GAAU;AAC7C,QAAM,CAAC,WAAW,YAAY,IAAIC,WAAyB,CAAC,CAAC;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAC3C,QAAM,CAAC,KAAK,MAAM,IAAIA,WAAS,CAAC;AAChC,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAwB,IAAI;AAC1D,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAwB,IAAI;AAEtD,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC;AACvC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,UAAU,SAAS,UAAU,CAAC;AACnG,QAAM,UAAU,UAAU,MAAM,OAAO,QAAQ,UAAU;AAEzD,EAAAC,WAAU,MAAM;AACd,kBAAc;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgB,MAAM;AAC1B,eAAW,IAAI;AACf,aAAS,IAAI;AACb,QAAI;AACF,YAAM,MAAM,cAAc,QAAQ,IAAI,CAAC;AACvC,mBAAa,GAAG;AAAA,IAClB,SAAS,GAAG;AACV,eAAS,aAAa,QAAQ,EAAE,UAAU,0BAA0B;AAAA,IACtE;AACA,eAAW,KAAK;AAAA,EAClB;AAEA,EAAAC,UAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAW,QAAS;AAExB,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,UAAU,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aAChE,UAAU,IAAK,eAAc;AAAA,aAC7B,IAAI,UAAU,UAAU,GAAG,GAAG;AAErC,iBAAW,UAAU,GAAG,EAAE,IAAI;AAC9B,iBAAW,MAAM,WAAW,IAAI,GAAG,GAAI;AAAA,IACzC;AAAA,EACF,CAAC;AAED,SACE,gBAAAH,OAACI,OAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,MAACM,QAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,uBAAS;AAAA,IAC3C,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAE;AAAA,gBAAU;AAAA,MAAO;AAAA,OAAkB;AAAA,IAElD,WAAW,gBAAAN,MAACM,QAAA,EAAK,kCAAoB;AAAA,IACrC,SAAS,gBAAAN,MAACM,QAAA,EAAK,OAAM,OAAO,iBAAM;AAAA,IAClC,WAAW,gBAAAL,OAACK,QAAA,EAAK,OAAM,UAAS;AAAA;AAAA,MAAU;AAAA,MAAQ;AAAA,OAAG;AAAA,IAErD,CAAC,WAAW,CAAC,WAAW,UAAU,WAAW,KAC5C,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,iCAAmB;AAAA,MAClC,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAC,uDAAyC;AAAA,OAC1D;AAAA,IAGD,CAAC,WAAW,CAAC,WAAW,UAAU,SAAS,KAC1C,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,IAAI,MAAM;AACtB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,eACE,gBAAAL,OAACI,OAAA,EAAkB,eAAc,UAC/B;AAAA,0BAAAJ,OAACK,QAAA,EAAK,SAAS,OACZ;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAAI;AAAA,YAAE,GAAG;AAAA,aACtC;AAAA,UACC,SAAS,GAAG,eACX,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAI,GAAG;AAAA,aAAY;AAAA,UAEnC,SACC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAI,GAAG,MAAM;AAAA,YAAO;AAAA,YAAW,GAAG,MAAM,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,QAAQ,CAAC;AAAA,YAAE;AAAA,aAAS;AAAA,aARvG,GAAG,IAUb;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,UAAU,UAAU,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,UAAU,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OAC3G;AAAA,IAGF,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,0CAA4B,GAC7C;AAAA,KACF;AAEJ;;;AC/FA,SAAS,YAAAC,YAAU,aAAAC,kBAAiB;AACpC,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,iBAAgB;AAEpC,SAAS,4BAAsE;AA2DvE,gBAAAC,OACA,QAAAC,cADA;AApDD,SAAS,QAAQ,EAAE,OAAO,GAAG,GAAU;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAIC,WAA8B,IAAI;AAChE,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAE3C,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,EAAE;AAExC,EAAAC,WAAU,MAAM;AACd,gBAAY;AAEZ,UAAM,WAAW,YAAY,aAAa,GAAI;AAC9C,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,MAAM;AACxB,QAAI;AACF,YAAM,UAAU,qBAAqB,QAAQ,IAAI,CAAC;AAClD,YAAM,QAAQ,QAAQ,IAAI;AAC1B,iBAAW,KAAK;AAAA,IAClB,QAAQ;AACN,iBAAW,IAAI;AAAA,IACjB;AACA,eAAW,KAAK;AAAA,EAClB;AAEA,EAAAC,UAAS,CAAC,OAAO,SAAS;AACxB,QAAI,UAAU,IAAK,aAAY;AAAA,aACtB,UAAU,OAAO,SAAS,kBAAkB,WAAW,WAAW;AACzE,YAAM,UAAU,qBAAqB,QAAQ,IAAI,CAAC;AAClD,cAAQ,MAAM;AACd,kBAAY;AAAA,IACd,WACS,UAAU,OAAO,SAAS,kBAAkB,WAAW,UAAU;AACxE,YAAM,UAAU,qBAAqB,QAAQ,IAAI,CAAC;AAClD,cAAQ,OAAO;AACf,kBAAY;AAAA,IACd;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,CAAC,SAA2B;AAClD,UAAM,iBAAiB,KAAK,MAAM,OAAO,OAAK,EAAE,WAAW,WAAW,EAAE;AACxE,UAAM,cAAc,KAAK,MAAM,OAAO,OAAK,EAAE,WAAW,QAAQ,EAAE;AAClE,UAAM,WAAW,KAAK,aAAa,IAAI,KAAK,MAAO,iBAAiB,KAAK,aAAc,GAAG,IAAI;AAE9F,UAAM,cAAc,KAAK,WAAW,YAAY,WAC7B,KAAK,WAAW,cAAc,UAC9B,KAAK,WAAW,WAAW,SAC3B,KAAK,WAAW,WAAW,QAAQ;AAEtD,UAAM,eAAe,KAAK,MAAM,MAAM,GAAG,UAAU;AAEnD,WACE,gBAAAH,OAACI,OAAA,EAAI,eAAc,UAAS,WAAW,GACrC;AAAA,sBAAAL,MAACM,QAAA,EAAK,MAAI,MAAE,eAAK,WAAU;AAAA,MAC3B,gBAAAL,OAACK,QAAA,EAAK;AAAA;AAAA,QAAQ,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAE,eAAK,aAAY;AAAA,SAAO;AAAA,MACtD,gBAAAL,OAACK,QAAA,EAAK;AAAA;AAAA,QAAQ,gBAAAN,MAACM,QAAA,EAAK,OAAO,aAAc,eAAK,OAAO,YAAY,GAAE;AAAA,SAAO;AAAA,MAC1E,gBAAAL,OAACK,QAAA,EAAK;AAAA;AAAA,QAAW;AAAA,QAAe;AAAA,QAAE,KAAK;AAAA,QAAW;AAAA,QAAG;AAAA,QAAS;AAAA,SAAE;AAAA,MAGhE,gBAAAL,OAACI,OAAA,EAAI,SAAS,GACZ;AAAA,wBAAAL,MAACM,QAAA,EAAK,eAAC;AAAA,QACP,gBAAAN,MAACM,QAAA,EAAK,OAAM,SAAS,mBAAI,OAAO,KAAK,MAAM,WAAW,CAAC,CAAC,GAAE;AAAA,QAC1D,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAE,mBAAI,OAAO,KAAK,KAAK,MAAM,WAAW,CAAC,CAAC,GAAE;AAAA,QAC1D,gBAAAN,MAACM,QAAA,EAAK,eAAC;AAAA,SACT;AAAA,MAGA,gBAAAN,MAACM,QAAA,EAAK,MAAI,MAAC,oBAAM;AAAA,MAChB,aAAa,IAAI,CAAC,MAAM,MAAM;AAC7B,cAAM,OAAO,KAAK,WAAW,cAAc,QAAQ,UACvC,KAAK,WAAW,WAAW,QAAQ,QACnC,KAAK,WAAW,gBAAgB,QAAQ,UACxC,KAAK,WAAW,WAAW,QAAQ,OACnC,QAAQ;AACpB,cAAM,QAAQ,KAAK,WAAW,cAAc,UAC/B,KAAK,WAAW,WAAW,QAC3B,KAAK,WAAW,gBAAgB,WAChC,KAAK,WAAW,WAAW,SAAS;AACjD,eACE,gBAAAL,OAACK,QAAA,EAAwB,OACtB;AAAA;AAAA,UAAK;AAAA,UAAE,KAAK;AAAA,UAAK;AAAA,UAAE,KAAK,SAAS,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,YAAE,KAAK;AAAA,YAAM;AAAA,aAAC;AAAA,aADtD,KAAK,MAAM,CAEtB;AAAA,MAEJ,CAAC;AAAA,MACA,KAAK,MAAM,SAAS,cACnB,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAW,KAAK,MAAM,SAAS;AAAA,QAAW;AAAA,SAAK;AAAA,MAG/D,cAAc,KACb,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAJ,OAACK,QAAA,EAAK,OAAM,OAAO;AAAA;AAAA,QAAY;AAAA,SAAe,GAChD;AAAA,OAEJ;AAAA,EAEJ;AAEA,SACE,gBAAAL,OAACI,OAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,MAACM,QAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,+BAAiB;AAAA,IAElD,WAAW,gBAAAN,MAACM,QAAA,EAAK,gCAAkB;AAAA,IAEnC,CAAC,WAAW,CAAC,SAAS,oBACrB,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,kCAAoB;AAAA,MACnC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAgC;AAAA,SAAU;AAAA,OAC3D;AAAA,IAGD,CAAC,WAAW,SAAS,oBAAoB,gBAAgB,QAAQ,gBAAgB;AAAA,IAElF,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAJ,OAACK,QAAA,EAAK,UAAQ,MACX;AAAA,eAAS,kBAAkB,WAAW,YAAY,cAAc;AAAA,MAChE,SAAS,kBAAkB,WAAW,WAAW,iBAAiB;AAAA,MAAG;AAAA,OAExE,GACF;AAAA,KACF;AAEJ;;;AClIA,SAAS,YAAAC,YAAU,aAAAC,mBAAiB;AACpC,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,kBAAgB;AAEpC,SAAS,wBAAAC,6BAAmD;AAmEtD,gBAAAC,OACA,QAAAC,cADA;AA5DC,SAAS,QAAQ,EAAE,OAAO,GAAG,GAAU;AAC5C,QAAM,CAAC,SAAS,UAAU,IAAIC,WAA6B,CAAC,CAAC;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAC3C,QAAM,CAAC,KAAK,MAAM,IAAIA,WAAS,CAAC;AAChC,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAE9C,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC;AACvC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,QAAQ,SAAS,UAAU,CAAC;AACjG,QAAM,UAAU,QAAQ,MAAM,OAAO,QAAQ,UAAU;AAEvD,EAAAC,YAAU,MAAM;AACd,gBAAY;AAAA,EACd,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,MAAM;AACxB,eAAW,IAAI;AACf,QAAI;AACF,YAAM,UAAUJ,sBAAqB,QAAQ,IAAI,CAAC;AAClD,YAAM,IAAI,QAAQ,WAAW,EAAE;AAC/B,iBAAW,CAAC;AAAA,IACd,QAAQ;AACN,iBAAW,CAAC,CAAC;AAAA,IACf;AACA,eAAW,KAAK;AAAA,EAClB;AAEA,EAAAK,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,QAAS;AAEb,QAAI,IAAI,SAAS;AACf,aAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAC9B,kBAAY,KAAK;AAAA,IACnB,WACS,IAAI,WAAW;AACtB,aAAO,OAAK,KAAK,IAAI,QAAQ,SAAS,GAAG,IAAI,CAAC,CAAC;AAC/C,kBAAY,KAAK;AAAA,IACnB,WACS,UAAU,IAAK,aAAY;AAAA,aAC3B,IAAI,OAAQ,aAAY,OAAK,CAAC,CAAC;AAAA,EAC1C,CAAC;AAED,QAAM,iBAAiB,CAAC,OAAuB;AAC7C,QAAI,KAAK,IAAM,QAAO,GAAG,EAAE;AAC3B,QAAI,KAAK,IAAO,QAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAChD,WAAO,IAAI,KAAK,KAAO,QAAQ,CAAC,CAAC;AAAA,EACnC;AAEA,QAAM,aAAa,CAAC,QAAwB;AAC1C,UAAM,IAAI,IAAI,KAAK,GAAG;AACtB,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,OAAO,IAAI,QAAQ,IAAI,EAAE,QAAQ;AAEvC,QAAI,OAAO,IAAO,QAAO;AACzB,QAAI,OAAO,KAAS,QAAO,GAAG,KAAK,MAAM,OAAO,GAAK,CAAC;AACtD,QAAI,OAAO,MAAU,QAAO,GAAG,KAAK,MAAM,OAAO,IAAO,CAAC;AACzD,WAAO,EAAE,mBAAmB;AAAA,EAC9B;AAEA,SACE,gBAAAH,OAACI,OAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,MAACM,QAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,+BAAiB;AAAA,IACnD,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAE;AAAA,cAAQ;AAAA,MAAO;AAAA,OAAa;AAAA,IAE3C,WAAW,gBAAAN,MAACM,QAAA,EAAK,gCAAkB;AAAA,IAEnC,CAAC,WAAW,QAAQ,WAAW,KAC9B,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,mCAAqB;AAAA,MACpC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAgC;AAAA,SAAU;AAAA,OAC3D;AAAA,IAGD,CAAC,WAAW,QAAQ,SAAS,KAC5B,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,cAAM,OAAO,MAAM,WAAW,cAAc,QAAQ,UACxC,MAAM,WAAW,WAAW,QAAQ,QACpC,QAAQ;AACpB,cAAM,QAAQ,MAAM,WAAW,cAAc,UAChC,MAAM,WAAW,WAAW,QAAQ;AAEjD,eACE,gBAAAL,OAACI,OAAA,EAAc,eAAc,UAC3B;AAAA,0BAAAJ,OAACK,QAAA,EAAK,SAAS,OACZ;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAAI,gBAAAN,MAACM,QAAA,EAAK,OAAe,gBAAK;AAAA,YAAO;AAAA,YAAE,MAAM,UAAU,OAAO,EAAE;AAAA,YAAE;AAAA,YAAE,WAAW,MAAM,WAAW,EAAE,OAAO,EAAE;AAAA,YAAE;AAAA,YAAE,eAAe,MAAM,UAAU;AAAA,aAC3K;AAAA,UACC,SAAS,YACR,gBAAAL,OAACI,OAAA,EAAI,eAAc,UAAS,YAAY,GACtC;AAAA,4BAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAS,MAAM;AAAA,eAAY;AAAA,YAC1C,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAS,MAAM;AAAA,eAAO;AAAA,YACpC,MAAM,QAAQ,SAAS,KACtB,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAU,MAAM,QAAQ,KAAK,IAAI;AAAA,eAAE;AAAA,YAEnD,MAAM,cAAc,SAAS,KAC5B,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAQ,MAAM,cAAc;AAAA,cAAO;AAAA,eAAS;AAAA,YAE5D,MAAM,SACL,gBAAAL,OAACK,QAAA,EAAK,OAAM,OAAM;AAAA;AAAA,cAAQ,MAAM;AAAA,eAAM;AAAA,aAE1C;AAAA,aAjBM,GAmBV;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,QAAQ,UAAU,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,QAAQ,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OACvG;AAAA,IAGF,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,6CAA+B,GAChD;AAAA,KACF;AAEJ;;;AC9HA,SAAS,YAAAC,YAAU,aAAAC,mBAAiB;AACpC,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,kBAAgB;AAmI9B,gBAAAC,OACA,QAAAC,cADA;AAjHN,IAAM,gBAAgB;AAAA,EACpB,EAAE,OAAO,cAAc,MAAM,8BAA8B,MAAM,mBAAmB;AAAA,EACpF,EAAE,OAAO,cAAc,MAAM,WAAW,MAAM,qBAAqB;AACrE;AAEO,SAAS,YAAY,EAAE,OAAO,GAAG,GAAU;AAChD,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAA6B,CAAC,CAAC;AAC3D,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAwB,IAAI;AACtD,QAAM,CAAC,KAAK,MAAM,IAAIA,WAAS,CAAC;AAChC,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAS,EAAE;AACvC,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAwB,IAAI;AAEhE,QAAM,WAAW,OAAO;AAAA,IAAO,OAC7B,EAAE,KAAK,YAAY,EAAE,SAAS,OAAO,YAAY,CAAC,KAClD,EAAE,YAAY,YAAY,EAAE,SAAS,OAAO,YAAY,CAAC,KACzD,EAAE,MAAM,KAAK,OAAK,EAAE,YAAY,EAAE,SAAS,OAAO,YAAY,CAAC,CAAC;AAAA,EAClE;AAEA,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,EAAE;AACxC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,SAAS,SAAS,UAAU,CAAC;AAClG,QAAM,UAAU,SAAS,MAAM,OAAO,QAAQ,UAAU;AAExD,EAAAC,YAAU,MAAM;AACd,oBAAgB;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,YAAY;AAClC,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AAEF,YAAM,YAAgC,CAAC;AAEvC,iBAAW,UAAU,eAAe;AAClC,YAAI;AAEF,gBAAM,WAAW,qCAAqC,OAAO,KAAK,IAAI,OAAO,IAAI;AACjF,gBAAM,WAAW,MAAM,MAAM,QAAQ;AAErC,cAAI,SAAS,IAAI;AACf,kBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,gBAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,wBAAU,KAAK,GAAG,KAAK,IAAI,CAAC,OAAgC;AAAA,gBAC1D,MAAM,OAAO,EAAE,QAAQ,SAAS;AAAA,gBAChC,aAAa,OAAO,EAAE,eAAe,EAAE;AAAA,gBACvC,QAAQ,OAAO;AAAA,gBACf,MAAM,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,gBACpC,MAAM,MAAM,QAAQ,EAAE,IAAI,IAAI,EAAE,OAAmB,CAAC;AAAA,gBACpD,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ;AAAA,cACjD,EAAE,CAAC;AAAA,YACL;AAAA,UACF,OAAO;AAEL,sBAAU,KAAK;AAAA,cACb,MAAM,OAAO;AAAA,cACb,aAAa,eAAe,OAAO,IAAI;AAAA,cACvC,QAAQ,OAAO;AAAA,cACf,MAAM,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,YACtC,CAAC;AAAA,UACH;AAAA,QACF,QAAQ;AAEN,oBAAU,KAAK;AAAA,YACb,MAAM,OAAO;AAAA,YACb,aAAa,eAAe,OAAO,IAAI;AAAA,YACvC,QAAQ,OAAO;AAAA,YACf,MAAM,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,UACtC,CAAC;AAAA,QACH;AAAA,MACF;AAGA,UAAI,UAAU,WAAW,GAAG;AAC1B,kBAAU;AAAA,UACR,EAAE,MAAM,qBAAqB,aAAa,iCAAiC,QAAQ,YAAY,MAAM,mBAAmB,MAAM,CAAC,cAAc,QAAQ,EAAE;AAAA,UACvJ,EAAE,MAAM,gBAAgB,aAAa,wCAAwC,QAAQ,YAAY,MAAM,mBAAmB,MAAM,CAAC,UAAU,SAAS,EAAE;AAAA,UACtJ,EAAE,MAAM,mBAAmB,aAAa,iCAAiC,QAAQ,YAAY,MAAM,mBAAmB,MAAM,CAAC,YAAY,YAAY,EAAE;AAAA,UACvJ,EAAE,MAAM,cAAc,aAAa,iCAAiC,QAAQ,YAAY,MAAM,mBAAmB,MAAM,CAAC,QAAQ,SAAS,EAAE;AAAA,UAC3I,EAAE,MAAM,eAAe,aAAa,iCAAiC,QAAQ,aAAa,MAAM,oBAAoB,MAAM,CAAC,UAAU,MAAM,EAAE;AAAA,QAC/I;AAAA,MACF;AAEA,gBAAU,SAAS;AAAA,IACrB,SAAS,GAAG;AACV,eAAS,aAAa,QAAQ,EAAE,UAAU,4BAA4B;AAAA,IACxE;AAEA,eAAW,KAAK;AAAA,EAClB;AAEA,EAAAC,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,WAAW,WAAY;AAE3B,QAAI,IAAI,QAAS,QAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,aACtC,IAAI,UAAW,QAAO,OAAK,KAAK,IAAI,SAAS,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,aAC/D,UAAU,IAAK,iBAAgB;AAAA,aAC/B,UAAU,IAAK,WAAU,EAAE;AAAA,aAC3B,IAAI,aAAa,IAAI,OAAQ,WAAU,OAAK,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,aAC1D,IAAI,UAAU,SAAS,GAAG,GAAG;AACpC,oBAAc,SAAS,GAAG,EAAE,IAAI;AAEhC,iBAAW,MAAM,cAAc,IAAI,GAAG,IAAI;AAAA,IAC5C,WACS,MAAM,WAAW,KAAK,gBAAgB,KAAK,KAAK,GAAG;AAC1D,gBAAU,OAAK,IAAI,KAAK;AACxB,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AAED,SACE,gBAAAH,OAACI,OAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,MAACM,QAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,+BAAiB;AAAA,IACnD,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAE;AAAA,aAAO;AAAA,MAAO;AAAA,MAAc,cAAc;AAAA,MAAO;AAAA,OAAQ;AAAA,IAExE,UACC,gBAAAL,OAACK,QAAA,EAAK;AAAA;AAAA,MAAQ,gBAAAN,MAACM,QAAA,EAAK,OAAM,UAAU,kBAAO;AAAA,MAAO;AAAA,MAAG,SAAS;AAAA,MAAO;AAAA,OAAS;AAAA,IAG/E,WAAW,gBAAAN,MAACM,QAAA,EAAK,oCAAsB;AAAA,IACvC,SAAS,gBAAAN,MAACM,QAAA,EAAK,OAAM,OAAO,iBAAM;AAAA,IAClC,cAAc,gBAAAL,OAACK,QAAA,EAAK,OAAM,UAAS;AAAA;AAAA,MAAY;AAAA,MAAW;AAAA,OAAG;AAAA,IAE7D,CAAC,WAAW,CAAC,cAAc,SAAS,WAAW,KAC9C,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAgB,SAAS,cAAc,MAAM,MAAM;AAAA,MAAG;AAAA,OAAC,GACxE;AAAA,IAGD,CAAC,WAAW,CAAC,cAAc,SAAS,SAAS,KAC5C,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5C,QAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AACtB,eACE,gBAAAL,OAACI,OAAA,EAAwC,eAAc,UACrD;AAAA,0BAAAJ,OAACK,QAAA,EAAK,SAAS,OACZ;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAAI;AAAA,YAAE,MAAM,KAAK,OAAO,EAAE;AAAA,YAAE;AAAA,YAAC,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAE,gBAAM,QAAO;AAAA,aACvF;AAAA,UACC,SACC,gBAAAL,OAACI,OAAA,EAAI,eAAc,UAAS,YAAY,GACtC;AAAA,4BAAAL,MAACM,QAAA,EAAK,UAAQ,MAAE,gBAAM,aAAY;AAAA,YACjC,MAAM,QAAQ,MAAM,KAAK,SAAS,KACjC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAO,MAAM,KAAK,KAAK,IAAI;AAAA,eAAE;AAAA,YAE9C,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAO,MAAM;AAAA,eAAK;AAAA,aACnC;AAAA,aAXM,GAAG,MAAM,IAAI,IAAI,MAAM,IAAI,EAarC;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,SAAS,UAAU,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAK,SAAS,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OACzG;AAAA,IAGF,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,2DAA6C,GAC9D;AAAA,KACF;AAEJ;;;ACrLA,SAAS,YAAAC,YAAU,aAAAC,mBAAiB;AACpC,SAAS,OAAAC,OAAK,QAAAC,QAAM,YAAAC,kBAAgB;AAEpC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAsJC,SACE,OAAAC,OADF,QAAAC,cAAA;AA7ID,SAAS,OAAO,EAAE,OAAO,GAAG,GAAU;AAC3C,QAAM,CAAC,KAAK,MAAM,IAAIC,WAAc,WAAW;AAC/C,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAqB,CAAC,CAAC;AACzD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,WAAS,CAAC;AAC1D,QAAM,CAAC,aAAa,cAAc,IAAIA,WAAS,CAAC;AAChD,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAC3C,QAAM,CAAC,KAAK,MAAM,IAAIA,WAAS,CAAC;AAChC,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAC9C,QAAM,CAAC,aAAa,cAAc,IAAIA,WAAS,EAAE;AACjD,QAAM,CAAC,eAAe,gBAAgB,IAAIA,WAAqB,CAAC,CAAC;AACjE,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAE9C,QAAM,aAAa,KAAK,IAAI,GAAG,OAAO,EAAE;AACxC,QAAM,cAAc,QAAQ,WAAW,gBAAgB;AACvD,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,MAAM,aAAa,CAAC,GAAG,YAAY,SAAS,UAAU,CAAC;AACrG,QAAM,UAAU,YAAY,MAAM,OAAO,QAAQ,UAAU;AAE3D,EAAAC,YAAU,MAAM;AACd,eAAW;AAAA,EACb,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,aAAa,MAAM;AACvB,eAAW,IAAI;AACf,QAAI;AACF,YAAM,cAAc,QAAQ,IAAI;AAChC,YAAM,SAAS,gBAAgB,WAAW;AAG1C,YAAM,QAAQ,IAAI;AAAA,QAChB,WAAW,WAAW;AAAA,QACtB,WAAW,SAAY;AAAA,MACzB;AACA,mBAAa,MAAM,OAAO,CAAC;AAG3B,UAAI,OAAO,iBAAiB;AAC1B,cAAM,WAAW,IAAI,iBAAiB,WAAW;AACjD,4BAAoB,SAAS,MAAM,CAAC;AAAA,MACtC,OAAO;AACL,4BAAoB,CAAC;AAAA,MACvB;AAEA,UAAI,OAAO,oBAAoB;AAC7B,cAAM,cAAc,IAAI,cAAc,QAAQ;AAC9C,uBAAe,YAAY,MAAM,CAAC;AAAA,MACpC,OAAO;AACL,uBAAe,CAAC;AAAA,MAClB;AAAA,IACF,QAAQ;AACN,mBAAa,CAAC,CAAC;AACf,0BAAoB,CAAC;AACrB,qBAAe,CAAC;AAAA,IAClB;AACA,eAAW,KAAK;AAAA,EAClB;AAEA,QAAM,eAAe,CAAC,UAAkB;AACtC,QAAI,CAAC,MAAM,KAAK,GAAG;AACjB,uBAAiB,CAAC,CAAC;AACnB;AAAA,IACF;AAEA,QAAI;AACF,YAAM,cAAc,QAAQ,IAAI;AAChC,YAAM,WAAW,qBAAqB,WAAW;AACjD,YAAM,UAAU,SAAS,OAAO,OAAO;AAAA,QACrC,eAAe;AAAA,QACf,cAAc;AAAA,QACd,cAAc;AAAA,MAChB,CAAC;AACD,uBAAiB,QAAQ,IAAI,OAAK,EAAE,QAAQ,CAAC;AAAA,IAC/C,QAAQ;AACN,uBAAiB,CAAC,CAAC;AAAA,IACrB;AAAA,EACF;AAEA,EAAAC,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,QAAS;AAGb,QAAI,UAAU,KAAK;AAAE,aAAO,WAAW;AAAG,aAAO,CAAC;AAAG,kBAAY,KAAK;AAAA,IAAG,WAChE,UAAU,KAAK;AAAE,aAAO,cAAc;AAAG,aAAO,CAAC;AAAG,kBAAY,KAAK;AAAA,IAAG,WACxE,UAAU,KAAK;AAAE,aAAO,QAAQ;AAAG,aAAO,CAAC;AAAG,kBAAY,KAAK;AAAA,IAAG,WAGlE,IAAI,SAAS;AACpB,aAAO,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAC9B,kBAAY,KAAK;AAAA,IACnB,WACS,IAAI,WAAW;AACtB,aAAO,OAAK,KAAK,IAAI,YAAY,SAAS,GAAG,IAAI,CAAC,CAAC;AACnD,kBAAY,KAAK;AAAA,IACnB,WAGS,UAAU,IAAK,YAAW;AAAA,aAC1B,UAAU,IAAK,aAAY,OAAK,CAAC,CAAC;AAAA,aAClC,IAAI,OAAQ,aAAY,OAAK,CAAC,CAAC;AAAA,aAG/B,QAAQ,YAAY,SAAS,MAAM,WAAW,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,MAAM;AAClF,YAAM,WAAW,cAAc;AAC/B,qBAAe,QAAQ;AACvB,mBAAa,QAAQ;AAAA,IACvB,WACS,QAAQ,YAAY,IAAI,WAAW;AAC1C,YAAM,WAAW,YAAY,MAAM,GAAG,EAAE;AACxC,qBAAe,QAAQ;AACvB,mBAAa,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,aAAa;AACnB,QAAM,WAAW;AACjB,QAAM,UAAU;AAEhB,WAAS,WAAW,KAAqB;AACvC,UAAM,IAAI,IAAI,KAAK,GAAG;AACtB,UAAM,OAAO,KAAK,IAAI,IAAI,EAAE,QAAQ;AAEpC,QAAI,OAAO,WAAY,QAAO;AAC9B,QAAI,OAAO,SAAU,QAAO,GAAG,KAAK,MAAM,OAAO,UAAU,CAAC;AAC5D,QAAI,OAAO,QAAS,QAAO,GAAG,KAAK,MAAM,OAAO,QAAQ,CAAC;AACzD,WAAO,EAAE,mBAAmB;AAAA,EAC9B;AAEA,WAAS,oBAAoB,KAAsB;AACjD,QAAI,QAAQ,OAAW,QAAO;AAC9B,WAAO,IAAI,SAAS,EAAE,SAAS,CAAC,IAAI;AAAA,EACtC;AAEA,WAAS,sBAAsB,KAAkC;AAC/D,QAAI,QAAQ,OAAW,QAAO;AAC9B,QAAI,OAAO,GAAI,QAAO;AACtB,QAAI,OAAO,GAAI,QAAO;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MACtB,gBAAAH,OAACI,OAAA,EAAI,eAAc,UAChB;AAAA,gBAAY,WAAW,KACtB,gBAAAJ,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,iCAAmB;AAAA,MAClC,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAC,+DAAiD;AAAA,MAChE,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAC,iEAAmD;AAAA,OACpE;AAAA,IAGD,YAAY,SAAS,KACpB,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC9B;AAAA,cAAQ,KAAK,gBAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAG,QAAQ;AAAA,QAAQ;AAAA,QAAE;AAAA,QAAM;AAAA,SAAK;AAAA,MAC5D,QAAQ,IAAI,CAAC,UAAU,MAAM;AAC5B,cAAM,MAAM,QAAQ;AACpB,cAAM,QAAQ,QAAQ;AAEtB,eACE,gBAAAL,OAACI,OAAA,EAAsB,eAAc,UACnC;AAAA,0BAAAJ,OAACK,QAAA,EAAK,SAAS,OACZ;AAAA,oBAAQ,QAAQ,UAAU;AAAA,YAC3B,gBAAAN,MAACM,QAAA,EAAK,OAAO,OAAO,SAAU,kBAAQ,QAAO;AAAA,YAC5C;AAAA,YAAK,SAAS,MAAM,MAAM,GAAG,EAAE,EAAE,OAAO,EAAE;AAAA,YAAG;AAAA,YAC9C,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAE,mBAAS,KAAK,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,EAAE,GAAE;AAAA,YAC5E;AAAA,YAAI,gBAAAN,MAACM,QAAA,EAAK,OAAO,sBAAsB,SAAS,aAAa,GAAI,8BAAoB,SAAS,aAAa,GAAE;AAAA,YAC7G;AAAA,YAAI,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAE,qBAAW,SAAS,SAAS,GAAE;AAAA,aACtD;AAAA,UACC,SAAS,YACR,gBAAAL,OAACI,OAAA,EAAI,eAAc,UAAS,YAAY,GAAG,SAAS,GAClD;AAAA,4BAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAK,SAAS,GAAG,MAAM,GAAG,CAAC;AAAA,eAAE;AAAA,YAC5C,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAQ,SAAS;AAAA,eAAM;AAAA,YACtC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAS,SAAS;AAAA,eAAO;AAAA,YACxC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAO,SAAS,KAAK,KAAK,IAAI;AAAA,eAAE;AAAA,YAC9C,SAAS,cAAc,SAAS,WAAW,SAAS,KACnD,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAa,SAAS,WAAW,KAAK,IAAI;AAAA,eAAE;AAAA,YAE7D,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,cAAO,SAAS;AAAA,eAAS;AAAA,YACxC,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAJ,OAACK,QAAA,EAAK,MAAK,QAAQ;AAAA,uBAAS,QAAQ,MAAM,GAAG,GAAG;AAAA,cAAG,SAAS,QAAQ,SAAS,MAAM,QAAQ;AAAA,eAAG,GAChG;AAAA,aACF;AAAA,aAtBM,SAAS,EAwBnB;AAAA,MAEJ,CAAC;AAAA,MACA,QAAQ,aAAa,YAAY,UAChC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,QAAG,QAAQ;AAAA,QAAU;AAAA,QAAE,YAAY,SAAS,QAAQ;AAAA,QAAW;AAAA,SAAK;AAAA,OAEvF;AAAA,KAEJ;AAGF,QAAM,qBAAqB,MACzB,gBAAAL,OAACI,OAAA,EAAI,eAAc,UAAS,WAAW,GACrC;AAAA,oBAAAJ,OAACK,QAAA,EAAK;AAAA;AAAA,MAAsB,gBAAAN,MAACM,QAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAU,4BAAiB;AAAA,OAAO;AAAA,IACvF,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAC,iEAAmD;AAAA,IAEjE,mBAAmB,KAClB,gBAAAL,OAACI,OAAA,EAAI,WAAW,GAAG,eAAc,UAC/B;AAAA,sBAAAL,MAACM,QAAA,EAAK,mDAAqC;AAAA,MAC3C,gBAAAN,MAACM,QAAA,EAAK,UAAQ,MAAC,wCAA0B;AAAA,OAC3C;AAAA,IAGD,oBAAoB,MACnB,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAJ,OAACK,QAAA,EAAK,OAAM,UAAU;AAAA,cAAQ;AAAA,MAAQ;AAAA,OAAyC,GACjF;AAAA,IAGF,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,yCAA2B,GAC5C;AAAA,IACA,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAG,eAAe,QAAQ,IAAI,CAAC,EAAE;AAAA,OAAiB;AAAA,KACnE;AAGF,QAAM,eAAe,MACnB,gBAAAL,OAACI,OAAA,EAAI,eAAc,UAAS,WAAW,GACrC;AAAA,oBAAAJ,OAACI,OAAA,EACC;AAAA,sBAAAL,MAACM,QAAA,EAAK,sBAAQ;AAAA,MACd,gBAAAN,MAACM,QAAA,EAAK,OAAO,OAAO,SAAU,uBAAY;AAAA,MAC1C,gBAAAN,MAACM,QAAA,EAAK,OAAO,OAAO,WAAW,eAAC;AAAA,OAClC;AAAA,IAEC,eAAe,cAAc,WAAW,KACvC,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAJ,OAACK,QAAA,EAAK,UAAQ,MAAC;AAAA;AAAA,MAAuB;AAAA,MAAY;AAAA,OAAC,GACrD;AAAA,IAGD,cAAc,SAAS,KAAK,gBAAgB;AAAA,KAC/C;AAGF,SACE,gBAAAL,OAACI,OAAA,EAAI,eAAc,UACjB;AAAA,oBAAAL,MAACM,QAAA,EAAK,MAAI,MAAC,OAAO,OAAO,SAAS,oBAAM;AAAA,IACxC,gBAAAL,OAACK,QAAA,EAAK,UAAQ,MACX;AAAA,iBAAW,WAAW;AAAA,MAAU;AAAA,MAAG,UAAU;AAAA,MAAO;AAAA,MACpD,CAAC,YAAY,cAAc,KAAK,gBAAAL,OAACK,QAAA,EAAK;AAAA;AAAA,QAAY;AAAA,SAAY;AAAA,OACjE;AAAA,IAGA,gBAAAL,OAACI,OAAA,EAAI,WAAW,GACd;AAAA,sBAAAL,MAACM,QAAA,EAAK,SAAS,QAAQ,aAAa,2BAAa;AAAA,MACjD,gBAAAN,MAACM,QAAA,EAAK,eAAC;AAAA,MACP,gBAAAN,MAACM,QAAA,EAAK,SAAS,QAAQ,gBAAgB,8BAAgB;AAAA,MACvD,gBAAAN,MAACM,QAAA,EAAK,eAAC;AAAA,MACP,gBAAAN,MAACM,QAAA,EAAK,SAAS,QAAQ,UAAU,wBAAU;AAAA,OAC7C;AAAA,IAEC,WAAW,gBAAAN,MAACK,OAAA,EAAI,WAAW,GAAG,0BAAAL,MAACM,QAAA,EAAK,wBAAU,GAAO;AAAA,IAErD,CAAC,WAAW,QAAQ,eAAe,gBAAgB;AAAA,IACnD,CAAC,WAAW,QAAQ,kBAAkB,mBAAmB;AAAA,IACzD,CAAC,WAAW,QAAQ,YAAY,aAAa;AAAA,IAE9C,gBAAAN,MAACK,OAAA,EAAI,WAAW,GACd,0BAAAL,MAACM,QAAA,EAAK,UAAQ,MAAC,gEAEf,GACF;AAAA,KACF;AAEJ;;;AnB9N0B,gBAAAC,OAoBpB,QAAAC,cApBoB;AA1CnB,SAAS,MAAM;AACpB,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAiB,MAAM;AACnD,QAAM,EAAE,KAAK,IAAI,OAAO;AACxB,QAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,QAAM,OAAO,QAAQ,WAAW;AAChC,QAAM,OAAO,QAAQ,QAAQ;AAC7B,QAAM,cAAc,QAAQ;AAE5B,QAAM,WAAmC;AAAA,IACvC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,KAAK;AAAA,EACP;AAEA,EAAAC,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,UAAU,KAAK;AACjB,WAAK;AACL;AAAA,IACF;AACA,QAAI,IAAI,QAAQ;AACd,gBAAU,MAAM;AAChB;AAAA,IACF;AACA,UAAM,eAAe,SAAS,KAAK;AACnC,QAAI,cAAc;AAChB,gBAAU,YAAY;AAAA,IACxB;AAAA,EACF,CAAC;AAED,QAAM,eAAe,MAAM;AACzB,YAAQ,QAAQ;AAAA,MACd,KAAK;AAAQ,eAAO,gBAAAH,MAAC,QAAK,YAAY,WAAW,MAAY,MAAY;AAAA,MACzE,KAAK;AAAU,eAAO,gBAAAA,MAAC,UAAO,MAAY,MAAY;AAAA,MACtD,KAAK;AAAa,eAAO,gBAAAA,MAAC,aAAU,MAAY,MAAY;AAAA,MAC5D,KAAK;AAAQ,eAAO,gBAAAA,MAAC,QAAK,MAAY,MAAY;AAAA,MAClD,KAAK;AAAY,eAAO,gBAAAA,MAAC,YAAS,MAAY,MAAY;AAAA,MAC1D,KAAK;AAAa,eAAO,gBAAAA,MAAC,aAAU,MAAY,MAAY;AAAA,MAC5D,KAAK;AAAa,eAAO,gBAAAA,MAAC,aAAU,MAAY,MAAY;AAAA,MAC5D,KAAK;AAAW,eAAO,gBAAAA,MAAC,WAAQ,MAAY,MAAY;AAAA,MACxD,KAAK;AAAY,eAAO,gBAAAA,MAAC,YAAS,MAAY,MAAY;AAAA,MAC1D,KAAK;AAAW,eAAO,gBAAAA,MAAC,WAAQ,MAAY,MAAY;AAAA,MACxD,KAAK;AAAW,eAAO,gBAAAA,MAAC,WAAQ,MAAY,MAAY;AAAA,MACxD,KAAK;AAAe,eAAO,gBAAAA,MAAC,eAAY,MAAY,MAAY;AAAA,MAChE,KAAK;AAAU,eAAO,gBAAAA,MAAC,UAAO,MAAY,MAAY;AAAA,IACxD;AAAA,EACF;AAEA,QAAM,gBAAgB,OAAO;AAE7B,SACE,gBAAAC,OAACG,OAAA,EAAI,eAAc,UAAS,QAAQ,MAClC;AAAA,oBAAAH,OAACG,OAAA,EAAI,eAAc,OAAM,QAAQ,eAC9B;AAAA,qBAAe,gBAAAJ,MAAC,WAAQ,QAAgB,YAAY,WAAW;AAAA,MAChE,gBAAAA,MAACI,OAAA,EAAI,eAAc,UAAS,UAAU,GAAG,YAAY,GAClD,uBAAa,GAChB;AAAA,OACF;AAAA,IACA,gBAAAJ,MAACI,OAAA,EACC,0BAAAJ,MAACK,QAAA,EAAK,UAAQ,MAAC,8HAAgH,GACjI;AAAA,KACF;AAEJ;;;AoB5FA,SAAS,OAAAC,OAAK,QAAAC,cAAY;AAalB,gBAAAC,OAIE,QAAAC,cAJF;AAJD,SAAS,OAAO,EAAE,OAAO,UAAU,MAAM,GAAgB;AAC9D,SACE,gBAAAA,OAACC,OAAA,EAAI,eAAc,UAAS,cAAc,GACxC;AAAA,oBAAAD,OAACC,OAAA,EAAI,gBAAe,iBAClB;AAAA,sBAAAF,MAACG,QAAA,EAAK,OAAO,OAAO,SAAS,MAAI,MAC9B,gBAAM,YAAY,GACrB;AAAA,MACC,UAAU,UACT,gBAAAF,OAACE,QAAA,EAAK,OAAO,OAAO,cACjB;AAAA,gBAAQ;AAAA,QAAK;AAAA,QAAE;AAAA,SAClB;AAAA,OAEJ;AAAA,IACC,YACC,gBAAAH,MAACG,QAAA,EAAK,OAAO,OAAO,cAAc,UAAQ,MACvC,oBACH;AAAA,KAEJ;AAEJ;;;AC7BA,SAAS,OAAAC,OAAK,QAAAC,cAAY;AAsClB,gBAAAC,OAeE,QAAAC,cAfF;AAlBR,SAAS,eAAe,OAAuB;AAC7C,MAAI,SAAS,KAAM;AACjB,WAAO,IAAI,QAAQ,KAAM,QAAQ,CAAC,CAAC;AAAA,EACrC;AACA,SAAO,OAAO,KAAK;AACrB;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AACf,GAAmB;AACjB,MAAI,OAAO,WAAW,GAAG;AACvB,WACE,gBAAAD,MAACE,OAAA,EACC,0BAAAF,MAACG,QAAA,EAAK,OAAO,OAAO,cAAc,UAAQ,MAAC,6BAE3C,GACF;AAAA,EAEJ;AAEA,QAAM,aAAa,KAAK,IAAI,GAAG,gBAAgB,KAAK,MAAM,aAAa,CAAC,CAAC;AACzE,QAAM,gBAAgB,OAAO,MAAM,YAAY,aAAa,UAAU;AACtE,QAAM,mBAAmB;AAEzB,SACE,gBAAAF,OAACC,OAAA,EAAI,eAAc,UAChB;AAAA,gBACC,gBAAAF,MAACE,OAAA,EAAI,cAAc,GACjB,0BAAAD,OAACE,QAAA,EAAK,OAAO,OAAO,cACjB;AAAA;AAAA,MACA,cAAc;AAAA,MACd,gBAAgB;AAAA,OACnB,GACF;AAAA,IAGD,cAAc,IAAI,CAAC,OAAO,QAAQ;AACjC,YAAM,YAAY,mBAAmB;AACrC,YAAM,aAAa,cAAc;AACjC,YAAM,YAAY,MAAM,KAAK,OAAO,EAAE,EAAE,MAAM,GAAG,EAAE;AACnD,YAAM,aAAa,MAAM,SAAS,MAAM,OAAO,MAAM,GAAG,EAAE,IAAI;AAE9D,aACE,gBAAAF,OAACC,OAAA,EACC;AAAA,wBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,OAAO,aAAa,OAAO,UAAU,OAAO;AAAA,YAC5C,MAAM;AAAA,YACN,SAAS;AAAA,YAER;AAAA,2BAAa,QAAQ,UAAU;AAAA,cAC/B,WAAW,OAAO,YAAY,CAAC,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,cACpD;AAAA,cACA;AAAA;AAAA;AAAA,QACH;AAAA,QACC,cACC,gBAAAF,OAACE,QAAA,EAAK,OAAO,OAAO,cAAc,UAAU,CAAC,YAC1C;AAAA;AAAA,UAAK;AAAA,WACR;AAAA,QAED,gBAAgB,MAAM,aAAa,UAClC,gBAAAH,MAACG,QAAA,EAAK,OAAO,OAAO,cACjB,yBAAe,MAAM,QAAQ,EAAE,SAAS,CAAC,GAC5C;AAAA,WAnBM,GAAG,MAAM,MAAM,IAAI,MAAM,IAAI,EAqBvC;AAAA,IAEJ,CAAC;AAAA,IAEA,OAAO,SAAS,cACf,gBAAAH,MAACE,OAAA,EAAI,WAAW,GACd,0BAAAD,OAACE,QAAA,EAAK,OAAO,OAAO,cAAc,UAAQ,MAAC;AAAA;AAAA,MAChC,aAAa;AAAA,MAAE;AAAA,MAAE,KAAK,IAAI,aAAa,YAAY,OAAO,MAAM;AAAA,MAAE;AAAA,MAAK,OAAO;AAAA,OACzF,GACF;AAAA,KAEJ;AAEJ;;;ACtGA,SAAS,OAAAC,OAAK,QAAAC,cAAY;AA2BhB,SACE,OAAAC,OADF,QAAAC,cAAA;AAdH,SAAS,UAAU,EAAE,WAAW,QAAQ,GAAmB;AAChE,SACE,gBAAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAa,OAAO;AAAA,MACpB,WAAS;AAAA,MACT,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,UAAU;AAAA,MACV,gBAAe;AAAA,MAEf;AAAA,wBAAAF,MAACE,OAAA,EAAI,KAAK,GACP,oBAAU,IAAI,CAAC,UAAU,QACxB,gBAAAD,OAACC,OAAA,EAAc,KAAK,GAClB;AAAA,0BAAAF,MAACG,QAAA,EAAK,OAAO,OAAO,SAAS,MAAI,MAC9B,mBAAS,KACZ;AAAA,UACA,gBAAAH,MAACG,QAAA,EAAK,OAAO,OAAO,cAAe,mBAAS,OAAM;AAAA,aAJ1C,GAKV,CACD,GACH;AAAA,QAEC,WACC,gBAAAF,OAACE,QAAA,EAAK,OAAO,OAAO,SACjB;AAAA,kBAAQ;AAAA,UAAM;AAAA,UAAE;AAAA,WACnB;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AC3CA,SAAS,OAAAC,OAAK,QAAAC,cAAY;AAC1B,OAAO,eAAe;AAiBlB,SAKE,OAAAC,OALF,QAAAC,cAAA;AAPG,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AACd,GAAqB;AACnB,SACE,gBAAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAa,YAAY,OAAO,UAAU,OAAO;AAAA,MACjD,UAAU;AAAA,MAEV;AAAA,wBAAAF,MAACG,QAAA,EAAK,OAAO,OAAO,cAAc,gBAAE;AAAA,QACnC,YACC,gBAAAH;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF,IAEA,gBAAAA,MAACG,QAAA,EAAK,OAAO,QAAQ,OAAO,YAAY,OAAO,cAC5C,mBAAS,aACZ;AAAA,QAEF,gBAAAH,MAACE,OAAA,EAAI,UAAU,GAAG;AAAA,QAClB,gBAAAF,MAACG,QAAA,EAAK,OAAO,OAAO,cAAc,eAAC;AAAA;AAAA;AAAA,EACrC;AAEJ;;;ACvCA,SAAS,YAAAC,YAAU,eAAAC,cAAa,aAAAC,mBAAiB;AACjD,SAAS,YAAAC,YAAU,UAAAC,eAAc;AAc1B,SAAS,YAAY,UAA8B,CAAC,GAAG;AAC5D,QAAM,EAAE,KAAK,IAAIA,QAAO;AAExB,EAAAD,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,QAAQ,SAAU;AAEtB,QAAI,UAAU,OAAQ,IAAI,QAAQ,UAAU,KAAM;AAChD,WAAK;AACL;AAAA,IACF;AAEA,QAAI,IAAI,UAAU,QAAQ,QAAQ;AAChC,cAAQ,OAAO;AACf;AAAA,IACF;AAEA,QAAI,IAAI,UAAU,QAAQ,UAAU;AAClC,cAAQ,SAAS;AACjB;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,QAAQ,MAAM;AAC/B,cAAQ,KAAK;AACb;AAAA,IACF;AAEA,QAAI,IAAI,aAAa,QAAQ,QAAQ;AACnC,cAAQ,OAAO;AACf;AAAA,IACF;AAEA,QAAI,UAAU,OAAO,QAAQ,UAAU;AACrC,cAAQ,SAAS;AACjB;AAAA,IACF;AAEA,QAAI,UAAU,OAAO,QAAQ,WAAW;AACtC,cAAQ,UAAU;AAClB;AAAA,IACF;AAEA,QAAI,UAAU,OAAO,QAAQ,YAAY;AACvC,cAAQ,WAAW,MAAM;AAAA,IAC3B,WAAW,UAAU,OAAO,QAAQ,YAAY;AAC9C,cAAQ,WAAW,QAAQ;AAAA,IAC7B,WAAW,UAAU,OAAO,QAAQ,YAAY;AAC9C,cAAQ,WAAW,WAAW;AAAA,IAChC,WAAW,UAAU,OAAO,QAAQ,YAAY;AAC9C,cAAQ,WAAW,MAAM;AAAA,IAC3B,WAAW,UAAU,OAAO,QAAQ,YAAY;AAC9C,cAAQ,WAAW,UAAU;AAAA,IAC/B;AAAA,EACF,CAAC;AACH;AAEO,SAAS,kBAAkB,YAAoB,eAAe,GAAG;AACtE,QAAM,CAAC,eAAe,gBAAgB,IAAIH,WAAS,YAAY;AAE/D,EAAAE,YAAU,MAAM;AACd,QAAI,iBAAiB,cAAc,aAAa,GAAG;AACjD,uBAAiB,aAAa,CAAC;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,YAAY,aAAa,CAAC;AAE9B,QAAM,SAASD,aAAY,MAAM;AAC/B,qBAAiB,CAAC,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,CAAC;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,QAAM,WAAWA,aAAY,MAAM;AACjC,qBAAiB,CAAC,SAAS,KAAK,IAAI,aAAa,GAAG,OAAO,CAAC,CAAC;AAAA,EAC/D,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,QAAQA,aAAY,MAAM;AAC9B,qBAAiB,CAAC;AAAA,EACpB,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,eAAe,kBAAkB,QAAQ,UAAU,MAAM;AACpE;;;AC5FA,SAAS,YAAAI,YAAU,aAAAC,aAAW,eAAAC,oBAAmB;AACjD;AAAA,EACE,iBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,wBAAAC;AAAA,OAIK;AAgBA,SAAS,YAA6B;AAC3C,QAAM,CAAC,WAAW,YAAY,IAAIN,WAAqB,CAAC,CAAC;AACzD,QAAM,CAAC,cAAc,eAAe,IAAIA,WAAwB,CAAC,CAAC;AAClE,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAA8B,IAAI;AAC9D,QAAM,CAAC,SAAS,UAAU,IAAIA,WAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAwB,IAAI;AACtD,QAAM,CAAC,UAAU,WAAW,IAAIA,WAAS,KAAK;AAE9C,QAAM,cAAc,QAAQ,IAAI;AAEhC,QAAM,UAAUE,aAAY,MAAM;AAChC,eAAW,IAAI;AACf,aAAS,IAAI;AAEb,QAAI;AAEF,YAAM,YAAYG,iBAAgB,WAAW;AAC7C,gBAAU,SAAS;AAGnB,YAAM,gBAAgB,IAAIF;AAAA,QACxB,WAAW,WAAW;AAAA,QACtB,WAAW,SAAY;AAAA,MACzB;AACA,mBAAa,cAAc,OAAO,CAAC;AAGnC,UAAI,UAAU,iBAAiB;AAC7B,cAAM,WAAW,IAAIC,kBAAiB,WAAW;AACjD,wBAAgB,SAAS,OAAO,CAAC;AAAA,MACnC,OAAO;AACL,wBAAgB,CAAC,CAAC;AAAA,MACpB;AAAA,IACF,SAAS,KAAK;AACZ,eAAS,eAAe,QAAQ,IAAI,UAAU,uBAAuB;AACrE,mBAAa,CAAC,CAAC;AACf,sBAAgB,CAAC,CAAC;AAAA,IACpB,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,aAAa,QAAQ,CAAC;AAE1B,QAAM,SAASF;AAAA,IACb,CAAC,UAA8B;AAC7B,UAAI,CAAC,MAAM,KAAK,GAAG;AACjB,eAAO,CAAC;AAAA,MACV;AAEA,UAAI;AACF,cAAM,WAAWI,sBAAqB,WAAW;AACjD,cAAM,UAAU,SAAS,OAAO,OAAO;AAAA,UACrC,eAAe;AAAA,UACf,cAAc;AAAA,UACd,cAAc;AAAA,QAChB,CAAC;AACD,eAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA,MACtC,QAAQ;AACN,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,iBAAiBJ;AAAA,IACrB,CAAC,OAAwB;AACvB,UAAI;AACF,cAAM,QAAQ,IAAIC;AAAA,UAChB,WAAW,WAAW;AAAA,UACtB,WAAW,SAAY;AAAA,QACzB;AACA,cAAM,SAAS,MAAM,OAAO,EAAE;AAC9B,YAAI,QAAQ;AACV,kBAAQ;AAAA,QACV;AACA,eAAO;AAAA,MACT,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,aAAa,UAAU,OAAO;AAAA,EACjC;AAEA,QAAM,oBAAoBD;AAAA,IACxB,CAAC,OAAwB;AACvB,UAAI;AACF,cAAM,QAAQ,IAAIE,kBAAiB,WAAW;AAC9C,cAAM,SAAS,MAAM,OAAO,EAAE;AAC9B,YAAI,QAAQ;AACV,kBAAQ;AAAA,QACV;AACA,eAAO;AAAA,MACT,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,aAAa,OAAO;AAAA,EACvB;AAEA,EAAAH,YAAU,MAAM;AACd,YAAQ;AAAA,EACV,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;A1BtI0C,gBAAAM,aAAA;AAHnC,SAAS,WAA0B;AACxC,UAAQ,OAAO,MAAM,gBAAgB;AAErC,QAAM,EAAE,eAAe,MAAM,IAAI,OAAO,gBAAAA,MAAC,OAAI,GAAI;AAAA,IAC/C,aAAa;AAAA,EACf,CAAC;AAED,SAAO,cAAc,EAAE,KAAK,MAAM;AAChC,UAAM;AAAA,EACR,CAAC;AACH;","names":["useState","Box","Text","useInput","Box","Text","jsx","jsxs","Box","Text","useState","join","Box","Text","useState","useEffect","rmSync","detectProvider","getAdapter","jsx","jsxs","useState","detectProvider","getAdapter","join","Box","Text","useState","Box","Text","useInput","useState","useEffect","useState","rmSync","useEffect","jsx","jsxs","useState","useInput","Box","Text","useState","useEffect","Box","Text","useInput","getAllAdapters","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","Box","Text","useInput","jsx","jsxs","useState","useInput","Box","Text","useState","existsSync","mkdirSync","cpSync","rmSync","join","Box","Text","useInput","useState","useCallback","useEffect","detectProvider","detectAgent","getAdapter","getAllAdapters","jsx","jsxs","useState","getAllAdapters","detectProvider","detectAgent","getAdapter","existsSync","mkdirSync","join","rmSync","cpSync","useInput","Box","Text","useState","useEffect","existsSync","readFileSync","mkdirSync","join","Box","Text","useInput","getAllAdapters","getAdapter","jsx","jsxs","useState","useEffect","existsSync","join","readFileSync","getAllAdapters","result","getAdapter","mkdirSync","useInput","Box","Text","useState","useEffect","Box","Text","useInput","getAllAdapters","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","createSessionManager","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","jsx","jsxs","useState","useInput","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","useCallback","useEffect","useInput","useApp","useState","useEffect","useCallback","LearningStore","ObservationStore","getMemoryStatus","createMemoryInjector","jsx"]}
|