@skillkit/tui 1.6.4 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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/screens/Workflow.tsx","../src/screens/Execute.tsx","../src/screens/History.tsx","../src/screens/Marketplace.tsx","../src/screens/Memory.tsx","../src/screens/Team.tsx","../src/screens/Plugins.tsx","../src/screens/Methodology.tsx","../src/screens/Plan.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';\nimport { Team } from './screens/Team.js';\nimport { Plugins } from './screens/Plugins.js';\nimport { Methodology } from './screens/Methodology.js';\nimport { Plan } from './screens/Plan.js';\n\nexport type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings' | 'recommend' | 'translate' | 'context' | 'workflow' | 'execute' | 'history' | 'marketplace' | 'memory' | 'team' | 'plugins' | 'methodology' | 'plan';\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 a: 'team',\n p: 'plugins',\n o: 'methodology',\n n: 'plan',\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 case 'team': return <Team cols={cols} rows={rows} />;\n case 'plugins': return <Plugins cols={cols} rows={rows} />;\n case 'methodology': return <Methodology cols={cols} rows={rows} />;\n case 'plan': return <Plan 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 w Wflow x Exec a Team p Plug o Meth n Plan r Rec t Trans c Ctx e Mem i Inst s Sync 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 // Collaboration\n { id: 'team', label: 'Team', key: 'a' },\n { id: 'plugins', label: 'Plugins', key: 'p' },\n // Methodology\n { id: 'methodology', label: 'Methodology', key: 'o' },\n { id: 'plan', label: 'Plans', key: 'n' },\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 {/* Collaboration (6-7) */}\n {NAV.slice(6, 8).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 {/* Methodology (8-9) */}\n {NAV.slice(8, 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 {/* Tools (10-13) */}\n {NAV.slice(10, 14).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 (14-16) */}\n {NAV.slice(14).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, loadConfig, extractFrontmatter } from '@skillkit/core';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { SkillItem } from '../components/SkillList.js';\n\nexport interface RepoInfo {\n source: string;\n name: string;\n}\n\n// Default popular repos - can be extended via config.marketplaceSources\nconst DEFAULT_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\n/**\n * Get marketplace repos from config or use defaults\n */\nfunction getMarketplaceRepos(): RepoInfo[] {\n try {\n const config = loadConfig();\n if (config.marketplaceSources?.length) {\n // Merge config sources with defaults, config takes priority\n const configRepos: RepoInfo[] = config.marketplaceSources.map(source => ({\n source,\n name: source.split('/').pop() || source,\n }));\n // Add defaults that aren't in config\n const existingSources = new Set(configRepos.map(r => r.source));\n for (const repo of DEFAULT_REPOS) {\n if (!existingSources.has(repo.source)) {\n configRepos.push(repo);\n }\n }\n return configRepos;\n }\n } catch {\n // Config load failed, use defaults\n }\n return DEFAULT_REPOS;\n}\n\n/**\n * Try to read skill description from frontmatter\n */\nfunction readSkillDescription(skillPath: string): string | undefined {\n const skillMdPath = join(skillPath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n return undefined;\n }\n try {\n const content = readFileSync(skillMdPath, 'utf-8');\n const frontmatter = extractFrontmatter(content);\n if (frontmatter && typeof frontmatter.description === 'string') {\n return frontmatter.description;\n }\n } catch {\n // Failed to read, return undefined\n }\n return undefined;\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 failedRepos: string[];\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 const [failedRepos, setFailedRepos] = useState<string[]>([]);\n const [repos] = useState<RepoInfo[]>(() => getMarketplaceRepos());\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 = 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 // Try to read description from skill frontmatter\n description: readSkillDescription(skill.path),\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 const errorMsg = err instanceof Error ? err.message : 'Failed to fetch repository';\n setError(errorMsg);\n // Track failed repos for display\n setFailedRepos(prev => prev.includes(source) ? prev : [...prev, source]);\n } finally {\n setLoading(false);\n setCurrentRepo(null);\n }\n }, [fetchedRepos, repos]);\n\n const fetchAllRepos = useCallback(async () => {\n setLoading(true);\n setError(null);\n const failures: string[] = [];\n\n for (const repo of repos) {\n if (!fetchedRepos.has(repo.source)) {\n setCurrentRepo(repo.source);\n try {\n await fetchRepo(repo.source);\n } catch (err) {\n // Track which repos failed\n failures.push(repo.source);\n }\n }\n }\n\n // Update failed repos list\n if (failures.length > 0) {\n setFailedRepos(prev => {\n const combined = [...prev, ...failures];\n return [...new Set(combined)]; // deduplicate\n });\n }\n\n setLoading(false);\n setCurrentRepo(null);\n }, [fetchRepo, fetchedRepos, repos]);\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 setFailedRepos([]);\n setError(null);\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,\n currentRepo,\n failedRepos,\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, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport TextInput from 'ink-text-input';\nimport { colors, symbols } from '../theme.js';\nimport { loadConfig, saveConfig, AgentType as AgentTypeSchema, type SkillkitConfig, type AgentType } from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\ninterface Setting {\n id: keyof SkillkitConfig | 'agent' | 'autoSync' | 'cacheDir';\n label: string;\n type: 'select' | 'toggle' | 'text';\n options?: string[];\n}\n\n// Get all valid agent types from the Zod schema\nconst ALL_AGENTS: AgentType[] = AgentTypeSchema.options;\n\nconst SETTINGS: Setting[] = [\n { id: 'agent', label: 'Default Agent', type: 'select', options: ['auto-detect', ...ALL_AGENTS] },\n { id: 'autoSync', label: 'Auto Sync', type: 'toggle' },\n { id: 'cacheDir', label: 'Cache Dir', type: 'text' },\n];\n\nexport function Settings(_props: Props) {\n const [config, setConfig] = useState<SkillkitConfig | null>(null);\n const [sel, setSel] = useState(0);\n const [editing, setEditing] = useState(false);\n const [editValue, setEditValue] = useState('');\n const [saved, setSaved] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Load config on mount\n useEffect(() => {\n try {\n const loaded = loadConfig();\n setConfig(loaded);\n } catch (err) {\n setError(`Failed to load config: ${err}`);\n }\n }, []);\n\n const getCurrentValue = (setting: Setting): string => {\n if (!config) return '';\n\n switch (setting.id) {\n case 'agent':\n // Map 'universal' back to 'auto-detect' for display consistency\n return config.agent === 'universal' ? 'auto-detect' : (config.agent || 'auto-detect');\n case 'autoSync':\n return config.autoSync ? 'enabled' : 'disabled';\n case 'cacheDir':\n return config.cacheDir || '~/.skillkit/cache';\n default:\n return '';\n }\n };\n\n const handleSave = (setting: Setting, value: string) => {\n if (!config) return;\n\n const newConfig = { ...config };\n\n switch (setting.id) {\n case 'agent':\n if (value === 'auto-detect') {\n newConfig.agent = 'universal';\n } else {\n newConfig.agent = value as AgentType;\n }\n break;\n case 'autoSync':\n newConfig.autoSync = value === 'enabled';\n break;\n case 'cacheDir':\n newConfig.cacheDir = value || undefined;\n break;\n }\n\n try {\n saveConfig(newConfig, false);\n setConfig(newConfig);\n setSaved(true);\n setTimeout(() => setSaved(false), 2000);\n } catch (err) {\n setError(`Failed to save: ${err}`);\n setTimeout(() => setError(null), 3000);\n }\n };\n\n useInput((input, key) => {\n if (editing) {\n if (key.return) {\n handleSave(SETTINGS[sel], editValue);\n setEditing(false);\n } else if (key.escape) {\n setEditing(false);\n }\n return;\n }\n\n if (key.upArrow) {\n setSel(i => Math.max(0, i - 1));\n } else if (key.downArrow) {\n setSel(i => Math.min(SETTINGS.length - 1, i + 1));\n } else if (key.return || input === ' ') {\n const setting = SETTINGS[sel];\n\n if (setting.type === 'toggle') {\n const current = getCurrentValue(setting);\n const newValue = current === 'enabled' ? 'disabled' : 'enabled';\n handleSave(setting, newValue);\n } else if (setting.type === 'select' && setting.options) {\n const current = getCurrentValue(setting);\n const idx = setting.options.indexOf(current);\n const nextIdx = (idx + 1) % setting.options.length;\n handleSave(setting, setting.options[nextIdx]);\n } else if (setting.type === 'text') {\n setEditValue(getCurrentValue(setting));\n setEditing(true);\n }\n }\n });\n\n if (!config) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SETTINGS</Text>\n {error ? (\n <Text color={colors.danger}>{symbols.error} {error}</Text>\n ) : (\n <Text dimColor>Loading...</Text>\n )}\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SETTINGS</Text>\n <Text dimColor>Configure SkillKit (changes save automatically)</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {SETTINGS.map((s, i) => {\n const isSel = i === sel;\n const value = getCurrentValue(s);\n const isEditing = editing && isSel;\n\n return (\n <Box key={s.id}>\n <Text inverse={isSel && !isEditing}>\n {isSel ? symbols.pointer : ' '}{s.label.padEnd(16)}\n </Text>\n {isEditing ? (\n <Box marginLeft={1}>\n <TextInput\n value={editValue}\n onChange={setEditValue}\n onSubmit={() => {\n handleSave(s, editValue);\n setEditing(false);\n }}\n />\n </Box>\n ) : (\n <Text color={colors.secondaryDim}> {value}</Text>\n )}\n {s.type === 'toggle' && isSel && !isEditing && (\n <Text dimColor> (space to toggle)</Text>\n )}\n {s.type === 'select' && isSel && !isEditing && (\n <Text dimColor> (enter to cycle)</Text>\n )}\n </Box>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n {saved && <Text color={colors.success}>{symbols.check} Settings saved</Text>}\n {error && <Text color={colors.danger}>{symbols.error} {error}</Text>}\n {!saved && !error && (\n <Text dimColor>\n {editing ? 'Enter=save Esc=cancel' : 'Enter/Space=edit q=quit'}\n </Text>\n )}\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 { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface SharedSkill {\n name: string;\n version: string;\n description?: string;\n author: string;\n downloads?: number;\n tags?: string[];\n}\n\ninterface TeamConfig {\n teamId: string;\n teamName: string;\n registryUrl: string;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Team({ rows = 24 }: Props) {\n const [config, setConfig] = useState<TeamConfig | null>(null);\n const [skills, setSkills] = useState<SharedSkill[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [sel, setSel] = useState(0);\n const [message, setMessage] = useState<string | null>(null);\n\n const maxVisible = Math.max(5, rows - 12);\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 useEffect(() => {\n loadTeam();\n }, []);\n\n const loadTeam = async () => {\n setLoading(true);\n setError(null);\n\n try {\n const { createTeamManager } = await import('@skillkit/core');\n const manager = createTeamManager(process.cwd());\n const teamConfig = manager.load();\n\n if (!teamConfig) {\n setConfig(null);\n setSkills([]);\n setError('Team not initialized. Run `skillkit team init` first.');\n } else {\n setConfig(teamConfig);\n const sharedSkills = manager.listSharedSkills();\n setSkills(sharedSkills);\n setSel(s => Math.min(s, Math.max(0, sharedSkills.length - 1)));\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load team');\n }\n\n setLoading(false);\n };\n\n const syncTeam = async () => {\n if (!config) return;\n setLoading(true);\n setMessage(null);\n\n try {\n const { createTeamManager } = await import('@skillkit/core');\n const manager = createTeamManager(process.cwd());\n manager.load(); // Load config before sync\n const result = await manager.sync();\n\n const changes = [...result.added, ...result.updated];\n if (changes.length > 0) {\n setMessage(`Synced: ${changes.join(', ')}`);\n } else {\n setMessage('Already up to date');\n }\n\n // Reload skills\n const sharedSkills = manager.listSharedSkills();\n setSkills(sharedSkills);\n setSel(s => Math.min(s, Math.max(0, sharedSkills.length - 1)));\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Sync failed');\n }\n\n setLoading(false);\n };\n\n const importSkill = async (skillName: string) => {\n if (!config) return;\n setLoading(true);\n setMessage(null);\n\n try {\n const { createTeamManager } = await import('@skillkit/core');\n const manager = createTeamManager(process.cwd());\n manager.load(); // Load config before import\n const result = await manager.importSkill(skillName, { overwrite: false });\n\n if (result.success) {\n setMessage(`Imported: ${skillName}`);\n } else {\n setError(result.error || 'Import failed');\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Import failed');\n }\n\n setLoading(false);\n };\n\n useInput((input, key) => {\n if (loading) return;\n if (skills.length === 0 && (key.upArrow || key.downArrow)) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(Math.max(0, skills.length - 1), i + 1));\n else if (input === 'r') loadTeam();\n else if (input === 's') syncTeam();\n else if (key.return && skills[sel]) {\n importSkill(skills[sel].name);\n }\n });\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={colors.primary} bold>Team Collaboration</Text>\n <Box marginTop={1}>\n <Text color={colors.secondaryDim}>{symbols.spinner[0]} Loading...</Text>\n </Box>\n </Box>\n );\n }\n\n if (!config) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={colors.primary} bold>Team Collaboration</Text>\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={colors.secondaryDim}>{symbols.warning} Team not initialized</Text>\n <Text color={colors.secondaryDim} dimColor>\n Run: skillkit team init --name \"Team Name\" --registry &lt;url&gt;\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text dimColor>[r] Refresh</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={colors.primary} bold>Team: {config.teamName}</Text>\n <Text color={colors.secondaryDim} dimColor>Registry: {config.registryUrl}</Text>\n\n {error && (\n <Box marginTop={1}>\n <Text color=\"red\">{symbols.error} {error}</Text>\n </Box>\n )}\n\n {message && (\n <Box marginTop={1}>\n <Text color=\"green\">{symbols.success} {message}</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={colors.secondaryDim} bold>\n Shared Skills ({skills.length})\n </Text>\n\n {skills.length === 0 ? (\n <Text color={colors.secondaryDim} dimColor>\n No shared skills. Use `skillkit team share --name &lt;skill&gt;` to share.\n </Text>\n ) : (\n <Box flexDirection=\"column\" marginTop={1}>\n {visible.map((skill, i) => {\n const actualIndex = start + i;\n const isSelected = actualIndex === sel;\n return (\n <Box key={skill.name} flexDirection=\"column\">\n <Text>\n {isSelected ? symbols.pointer : ' '}{' '}\n <Text color={isSelected ? colors.primary : colors.secondaryDim} bold={isSelected}>\n {skill.name}\n </Text>\n <Text dimColor> v{skill.version}</Text>\n <Text dimColor> by {skill.author}</Text>\n {skill.downloads !== undefined && (\n <Text dimColor> | {skill.downloads} downloads</Text>\n )}\n </Text>\n {skill.description && isSelected && (\n <Text color={colors.secondaryDim} dimColor> {skill.description}</Text>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n </Box>\n\n <Box marginTop={1} borderStyle=\"single\" borderColor={colors.borderDim} paddingX={1}>\n <Text dimColor>\n [↑↓] Navigate [Enter] Import [s] Sync [r] Refresh\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';\n\ninterface PluginInfo {\n name: string;\n version: string;\n description?: string;\n author?: string;\n enabled: boolean;\n translators?: string[];\n providers?: string[];\n commands?: string[];\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Plugins({ rows = 24 }: Props) {\n const [plugins, setPlugins] = useState<PluginInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [sel, setSel] = useState(0);\n const [message, setMessage] = useState<string | null>(null);\n\n const maxVisible = Math.max(5, rows - 12);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), plugins.length - maxVisible));\n const visible = plugins.slice(start, start + maxVisible);\n\n useEffect(() => {\n loadPlugins();\n }, []);\n\n const loadPlugins = async () => {\n setLoading(true);\n setError(null);\n\n try {\n const { createPluginManager, loadPluginsFromDirectory } = await import('@skillkit/core');\n const { join } = await import('node:path');\n const manager = createPluginManager(process.cwd());\n\n // Load plugins from directory first to populate the manager\n const pluginsDir = join(process.cwd(), '.skillkit', 'plugins');\n try {\n const loadedPlugins = await loadPluginsFromDirectory(pluginsDir);\n for (const plugin of loadedPlugins) {\n if (!manager.getPlugin(plugin.metadata.name)) {\n await manager.register(plugin);\n }\n }\n } catch (err: unknown) {\n // Only ignore ENOENT (directory doesn't exist), rethrow other errors\n if (err && typeof err === 'object' && 'code' in err && err.code !== 'ENOENT') {\n throw err;\n }\n }\n\n const allPlugins = manager.listPlugins();\n\n const pluginInfos: PluginInfo[] = allPlugins.map(p => {\n const plugin = manager.getPlugin(p.name);\n return {\n name: p.name,\n version: p.version,\n description: p.description,\n author: p.author,\n enabled: manager.isPluginEnabled(p.name),\n translators: plugin?.translators?.map(t => t.agentType as string),\n providers: plugin?.providers?.map(pr => pr.providerName),\n commands: plugin?.commands?.map(c => c.name),\n };\n });\n\n setPlugins(pluginInfos);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load plugins');\n }\n\n setLoading(false);\n };\n\n const togglePlugin = async (pluginName: string, currentEnabled: boolean) => {\n setLoading(true);\n setMessage(null);\n\n try {\n const { createPluginManager, loadPluginsFromDirectory } = await import('@skillkit/core');\n const { join } = await import('node:path');\n const manager = createPluginManager(process.cwd());\n\n // Load plugins from directory first so enable/disable can find them\n const pluginsDir = join(process.cwd(), '.skillkit', 'plugins');\n try {\n const loadedPlugins = await loadPluginsFromDirectory(pluginsDir);\n for (const plugin of loadedPlugins) {\n if (!manager.getPlugin(plugin.metadata.name)) {\n await manager.register(plugin);\n }\n }\n } catch (err: unknown) {\n // Only ignore ENOENT (directory doesn't exist), rethrow other errors\n if (err && typeof err === 'object' && 'code' in err && err.code !== 'ENOENT') {\n throw err;\n }\n }\n\n if (currentEnabled) {\n manager.disablePlugin(pluginName);\n setMessage(`Disabled: ${pluginName}`);\n } else {\n manager.enablePlugin(pluginName);\n setMessage(`Enabled: ${pluginName}`);\n }\n\n // Reload\n await loadPlugins();\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Toggle failed');\n setLoading(false);\n }\n };\n\n useInput((input, key) => {\n if (loading) return;\n if (plugins.length === 0 && (key.upArrow || key.downArrow)) return;\n\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(Math.max(0, plugins.length - 1), i + 1));\n else if (input === 'r') loadPlugins();\n else if (input === 'e' && plugins[sel]) {\n togglePlugin(plugins[sel].name, plugins[sel].enabled);\n }\n else if (key.return && plugins[sel]) {\n togglePlugin(plugins[sel].name, plugins[sel].enabled);\n }\n });\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={colors.primary} bold>Plugin Manager</Text>\n <Box marginTop={1}>\n <Text color={colors.secondaryDim}>{symbols.spinner[0]} Loading...</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={colors.primary} bold>Plugin Manager</Text>\n <Text color={colors.secondaryDim} dimColor>Manage SkillKit extensions</Text>\n\n {error && (\n <Box marginTop={1}>\n <Text color=\"red\">{symbols.error} {error}</Text>\n </Box>\n )}\n\n {message && (\n <Box marginTop={1}>\n <Text color=\"green\">{symbols.success} {message}</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={colors.secondaryDim} bold>\n Installed Plugins ({plugins.length})\n </Text>\n\n {plugins.length === 0 ? (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={colors.secondaryDim} dimColor>No plugins installed.</Text>\n <Text color={colors.secondaryDim} dimColor>\n Use: skillkit plugin install --source &lt;path-or-package&gt;\n </Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\" marginTop={1}>\n {visible.map((plugin, i) => {\n const actualIndex = start + i;\n const isSelected = actualIndex === sel;\n const statusColor = plugin.enabled ? 'green' : 'gray';\n const statusText = plugin.enabled ? 'enabled' : 'disabled';\n\n return (\n <Box key={plugin.name} flexDirection=\"column\">\n <Text>\n {isSelected ? symbols.pointer : ' '}{' '}\n <Text color={isSelected ? colors.primary : colors.secondaryDim} bold={isSelected}>\n {plugin.name}\n </Text>\n <Text dimColor> v{plugin.version}</Text>\n <Text color={statusColor}> [{statusText}]</Text>\n </Text>\n {isSelected && (\n <Box flexDirection=\"column\" marginLeft={3}>\n {plugin.description && (\n <Text color={colors.secondaryDim} dimColor>{plugin.description}</Text>\n )}\n {plugin.author && (\n <Text dimColor>Author: {plugin.author}</Text>\n )}\n {plugin.translators && plugin.translators.length > 0 && (\n <Text dimColor>Translators: {plugin.translators.join(', ')}</Text>\n )}\n {plugin.providers && plugin.providers.length > 0 && (\n <Text dimColor>Providers: {plugin.providers.join(', ')}</Text>\n )}\n {plugin.commands && plugin.commands.length > 0 && (\n <Text dimColor>Commands: {plugin.commands.join(', ')}</Text>\n )}\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n </Box>\n\n <Box marginTop={1} borderStyle=\"single\" borderColor={colors.borderDim} paddingX={1}>\n <Text dimColor>\n [↑↓] Navigate [e/Enter] Toggle Enable/Disable [r] Refresh\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n MethodologyManager,\n type MethodologyPack,\n type MethodologySkill,\n} from '@skillkit/core';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\ntype View = 'packs' | 'skills';\n\nexport function Methodology({ rows = 24 }: Props) {\n const [packs, setPacks] = useState<MethodologyPack[]>([]);\n const [selectedPack, setSelectedPack] = useState<MethodologyPack | null>(null);\n const [skills, setSkills] = useState<MethodologySkill[]>([]);\n const [loading, setLoading] = useState(true);\n const [view, setView] = useState<View>('packs');\n const [sel, setSel] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n\n const manager = useMemo(() => new MethodologyManager({\n projectPath: process.cwd(),\n }), []);\n\n const maxVisible = Math.max(5, rows - 10);\n\n useEffect(() => {\n loadPacks();\n }, []);\n\n const loadPacks = async () => {\n setLoading(true);\n setError(null);\n try {\n const loadedPacks = await manager.listAvailablePacks();\n setPacks(loadedPacks);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load methodology packs');\n }\n setLoading(false);\n };\n\n const loadSkills = async (pack: MethodologyPack) => {\n setLoading(true);\n setError(null);\n try {\n const loader = manager.getLoader();\n const loadedSkills = await loader.loadPackSkills(pack.name);\n setSkills(loadedSkills);\n setSelectedPack(pack);\n setView('skills');\n setSel(0);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load skills');\n }\n setLoading(false);\n };\n\n const installPack = async (pack: MethodologyPack) => {\n setLoading(true);\n setMessage(null);\n try {\n await manager.installPack(pack.name);\n setMessage(`Installed ${pack.name} methodology pack`);\n // Refresh packs list after install\n await loadPacks();\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to install pack');\n }\n setLoading(false);\n };\n\n const items = view === 'packs' ? packs : skills;\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 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(items.length - 1, i + 1));\n else if (input === 'r') {\n if (view === 'packs') loadPacks();\n else if (selectedPack) loadSkills(selectedPack);\n }\n else if (key.escape || input === 'b') {\n if (view === 'skills') {\n setView('packs');\n setSel(0);\n setSelectedPack(null);\n }\n }\n else if (key.return) {\n if (view === 'packs' && packs[sel]) {\n loadSkills(packs[sel]);\n }\n }\n else if (input === 'i' && view === 'packs' && packs[sel]) {\n installPack(packs[sel]);\n }\n });\n\n const renderPackItem = (pack: MethodologyPack, idx: number) => {\n const isSel = idx === sel;\n return (\n <Box key={pack.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {pack.name} <Text dimColor>v{pack.version}</Text>\n </Text>\n {isSel && (\n <>\n <Text dimColor> {pack.description}</Text>\n <Text dimColor> {pack.skills.length} skill(s) | Tags: {pack.tags?.join(', ') || 'none'}</Text>\n </>\n )}\n </Box>\n );\n };\n\n const renderSkillItem = (skill: MethodologySkill, idx: number) => {\n const isSel = idx === sel;\n return (\n <Box key={skill.name} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {skill.name}\n </Text>\n {isSel && skill.description && (\n <Text dimColor> {skill.description}</Text>\n )}\n {isSel && skill.tags && (\n <Text dimColor> Tags: {skill.tags.join(', ')}</Text>\n )}\n </Box>\n );\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>\n {view === 'packs' ? 'METHODOLOGY PACKS' : `${selectedPack?.name.toUpperCase()} SKILLS`}\n </Text>\n <Text dimColor>\n {view === 'packs'\n ? `${packs.length} pack(s) available`\n : `${skills.length} skill(s) in pack`}\n </Text>\n\n {loading && <Text color=\"yellow\">Loading...</Text>}\n {error && <Text color=\"red\">{symbols.error} {error}</Text>}\n {message && <Text color=\"green\">{symbols.success} {message}</Text>}\n\n {!loading && items.length === 0 && (\n <Box marginTop={1}>\n <Text dimColor>No {view === 'packs' ? 'methodology packs' : 'skills'} found.</Text>\n </Box>\n )}\n\n {!loading && items.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> {symbols.arrowUp} {start} more</Text>}\n {view === 'packs'\n ? (visible as MethodologyPack[]).map((pack, i) => renderPackItem(pack, start + i))\n : (visible as MethodologySkill[]).map((skill, i) => renderSkillItem(skill, start + i))\n }\n {start + maxVisible < items.length && (\n <Text dimColor> {symbols.arrowDown} {items.length - start - maxVisible} more</Text>\n )}\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n {view === 'packs' ? (\n <Text dimColor>Enter=view skills i=install r=refresh q=quit</Text>\n ) : (\n <Text dimColor>b/Esc=back r=refresh q=quit</Text>\n )}\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport {\n PlanParser,\n PlanValidator,\n PlanExecutor,\n type StructuredPlan,\n type PlanTask,\n} from '@skillkit/core';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\ntype View = 'plans' | 'tasks' | 'steps';\n\ninterface PlanFile {\n name: string;\n path: string;\n plan?: StructuredPlan;\n valid?: boolean;\n error?: string;\n}\n\nexport function Plan({ rows = 24 }: Props) {\n const [planFiles, setPlanFiles] = useState<PlanFile[]>([]);\n const [selectedPlan, setSelectedPlan] = useState<PlanFile | null>(null);\n const [selectedTask, setSelectedTask] = useState<PlanTask | null>(null);\n const [loading, setLoading] = useState(true);\n const [view, setView] = useState<View>('plans');\n const [sel, setSel] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [executing, setExecuting] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n\n const parser = useMemo(() => new PlanParser(), []);\n const validator = useMemo(() => new PlanValidator(), []);\n\n const maxVisible = Math.max(5, rows - 10);\n\n useEffect(() => {\n loadPlans();\n }, []);\n\n const loadPlans = async () => {\n setLoading(true);\n setError(null);\n try {\n const cwd = process.cwd();\n const files: PlanFile[] = [];\n\n // Look for plan files in common locations\n const searchPaths = [\n cwd,\n path.join(cwd, 'plans'),\n path.join(cwd, '.skillkit', 'plans'),\n ];\n\n for (const searchPath of searchPaths) {\n if (fs.existsSync(searchPath)) {\n const entries = fs.readdirSync(searchPath, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && (entry.name.endsWith('.plan.md') || entry.name.endsWith('-plan.md'))) {\n const filePath = path.join(searchPath, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n try {\n const plan = parser.parse(content);\n const validation = validator.validate(plan);\n const errorIssue = validation.issues.find(i => i.type === 'error');\n files.push({\n name: entry.name,\n path: filePath,\n plan,\n valid: validation.valid,\n error: errorIssue?.message,\n });\n } catch {\n files.push({\n name: entry.name,\n path: filePath,\n valid: false,\n error: 'Failed to parse plan',\n });\n }\n }\n }\n }\n }\n\n setPlanFiles(files);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to load plans');\n }\n setLoading(false);\n };\n\n const selectPlan = (planFile: PlanFile) => {\n if (planFile.plan) {\n setSelectedPlan(planFile);\n setView('tasks');\n setSel(0);\n }\n };\n\n const selectTask = (task: PlanTask) => {\n setSelectedTask(task);\n setView('steps');\n setSel(0);\n };\n\n const executePlan = async (planFile: PlanFile) => {\n if (!planFile.plan) return;\n\n setExecuting(true);\n setMessage(null);\n try {\n const executor = new PlanExecutor();\n await executor.execute(planFile.plan, { dryRun: true });\n setMessage(`Executed plan: ${planFile.plan.name} (dry run)`);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Failed to execute plan');\n }\n setExecuting(false);\n };\n\n const getItems = () => {\n if (view === 'plans') return planFiles;\n if (view === 'tasks' && selectedPlan?.plan) return selectedPlan.plan.tasks;\n if (view === 'steps' && selectedTask) return selectedTask.steps;\n return [];\n };\n\n const items = getItems();\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 useInput((input, key) => {\n if (loading || executing) 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 (input === 'r') loadPlans();\n else if (key.escape || input === 'b') {\n if (view === 'steps') {\n setView('tasks');\n setSelectedTask(null);\n setSel(0);\n } else if (view === 'tasks') {\n setView('plans');\n setSelectedPlan(null);\n setSel(0);\n }\n }\n else if (key.return) {\n if (view === 'plans' && planFiles[sel]) {\n selectPlan(planFiles[sel]);\n } else if (view === 'tasks' && selectedPlan?.plan?.tasks[sel]) {\n selectTask(selectedPlan.plan.tasks[sel]);\n }\n }\n else if (input === 'x' && view === 'plans' && planFiles[sel]?.plan) {\n executePlan(planFiles[sel]);\n }\n });\n\n const renderPlanItem = (planFile: PlanFile, idx: number) => {\n const isSel = idx === sel;\n const statusIcon = planFile.valid ? symbols.success : symbols.error;\n const statusColor = planFile.valid ? 'green' : 'red';\n\n return (\n <Box key={planFile.path} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} <Text color={statusColor}>{statusIcon}</Text> {planFile.name}\n </Text>\n {isSel && planFile.plan && (\n <>\n <Text dimColor> {planFile.plan.goal}</Text>\n <Text dimColor> {planFile.plan.tasks.length} task(s) | {planFile.plan.techStack?.join(', ') || 'No stack'}</Text>\n </>\n )}\n {isSel && planFile.error && (\n <Text color=\"red\"> {planFile.error}</Text>\n )}\n </Box>\n );\n };\n\n const renderTaskItem = (task: PlanTask, idx: number) => {\n const isSel = idx === sel;\n return (\n <Box key={task.id} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} [{task.id}] {task.name}\n </Text>\n {isSel && (\n <>\n <Text dimColor> {task.steps.length} step(s)</Text>\n {task.files?.create && <Text dimColor> Create: {task.files.create.join(', ')}</Text>}\n {task.files?.modify && <Text dimColor> Modify: {task.files.modify.join(', ')}</Text>}\n {task.files?.test && <Text dimColor> Test: {task.files.test.join(', ')}</Text>}\n </>\n )}\n </Box>\n );\n };\n\n const renderStepItem = (step: { number: number; description: string; type: string }, idx: number) => {\n const isSel = idx === sel;\n const typeColors: Record<string, string> = {\n test: 'yellow',\n verify: 'cyan',\n implement: 'green',\n commit: 'magenta',\n };\n\n return (\n <Box key={step.number} flexDirection=\"column\">\n <Text inverse={isSel}>\n {isSel ? symbols.pointer : ' '} <Text color={typeColors[step.type] || 'white'}>[{step.type}]</Text> Step {step.number}\n </Text>\n {isSel && (\n <Text dimColor> {step.description}</Text>\n )}\n </Box>\n );\n };\n\n const getTitle = () => {\n if (view === 'plans') return 'PLANS';\n if (view === 'tasks') return `TASKS: ${selectedPlan?.plan?.name || ''}`;\n if (view === 'steps') return `STEPS: Task ${selectedTask?.id}`;\n return 'PLANS';\n };\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>{getTitle()}</Text>\n <Text dimColor>\n {view === 'plans' && `${planFiles.length} plan(s) found`}\n {view === 'tasks' && selectedPlan?.plan && `${selectedPlan.plan.tasks.length} task(s)`}\n {view === 'steps' && selectedTask && `${selectedTask.steps.length} step(s)`}\n </Text>\n\n {loading && <Text color=\"yellow\">Loading plans...</Text>}\n {executing && <Text color=\"yellow\">Executing plan...</Text>}\n {error && <Text color=\"red\">{symbols.error} {error}</Text>}\n {message && <Text color=\"green\">{symbols.success} {message}</Text>}\n\n {!loading && !executing && items.length === 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>No {view} found.</Text>\n {view === 'plans' && (\n <Text dimColor>Create a plan file: *.plan.md or *-plan.md</Text>\n )}\n </Box>\n )}\n\n {!loading && !executing && items.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {view === 'plans' && (visible as PlanFile[]).map((pf, i) => renderPlanItem(pf, start + i))}\n {view === 'tasks' && (visible as PlanTask[]).map((t, i) => renderTaskItem(t, start + i))}\n {view === 'steps' && (visible as Array<{ number: number; description: string; type: string }>).map((s, i) => renderStepItem(s, start + i))}\n {start + maxVisible < items.length && (\n <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>\n )}\n </Box>\n )}\n\n <Box marginTop={1}>\n {view === 'plans' && (\n <Text dimColor>Enter=view tasks x=execute (dry-run) r=refresh q=quit</Text>\n )}\n {view === 'tasks' && (\n <Text dimColor>Enter=view steps b/Esc=back q=quit</Text>\n )}\n {view === 'steps' && (\n <Text dimColor>b/Esc=back q=quit</Text>\n )}\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":"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","names":["useState","Box","Text","useInput","Box","Text","jsx","jsxs","Box","Text","useState","existsSync","join","Box","Text","useState","useEffect","readFileSync","join","rmSync","detectProvider","getAdapter","loadConfig","loadConfig","jsx","jsxs","useState","detectProvider","getAdapter","existsSync","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","useEffect","Box","Text","useInput","loadConfig","jsx","jsxs","useState","useEffect","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","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","Box","Text","useInput","jsx","jsxs","useState","useEffect","join","useInput","Box","Text","useState","useEffect","Box","Text","useInput","Fragment","jsx","jsxs","useState","useEffect","useInput","Box","Text","useState","useEffect","useMemo","Box","Text","useInput","Fragment","jsx","jsxs","useState","useMemo","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","TextInput","jsx","jsxs","Box","Text","TextInput","useState","useCallback","useEffect","useInput","useApp","useState","useEffect","useCallback","LearningStore","ObservationStore","getMemoryStatus","createMemoryInjector","jsx"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/App.tsx","../src/state/types.ts","../src/theme/colors.ts","../src/theme/symbols.ts","../src/utils/helpers.ts","../src/components/Sidebar.tsx","../src/components/Splash.tsx","../src/screens/Home.tsx","../src/state/navigation.ts","../src/state/skills.ts","../src/state/agents.ts","../src/state/marketplace.ts","../../../marketplace/sources.json","../src/screens/Browse.tsx","../src/screens/Installed.tsx","../src/screens/Marketplace.tsx","../src/screens/Recommend.tsx","../src/screens/Translate.tsx","../src/components/Header.tsx","../src/screens/Context.tsx","../src/components/Spinner.tsx","../src/screens/Sync.tsx","../src/screens/Memory.tsx","../src/screens/Workflow.tsx","../src/screens/Execute.tsx","../src/components/ProgressBar.tsx","../src/screens/History.tsx","../src/screens/Team.tsx","../src/screens/Plugins.tsx","../src/screens/Methodology.tsx","../src/screens/Plan.tsx","../src/screens/Settings.tsx","../src/screens/Help.tsx","../src/theme/animations.ts","../src/utils/list.ts","../src/components/AgentGrid.tsx","../src/components/StatsCard.tsx","../src/components/StatusBar.tsx","../src/components/SkillList.tsx","../src/components/SearchInput.tsx","../src/components/FeatureList.tsx"],"sourcesContent":["import { createCliRenderer } from '@opentui/core';\nimport { createRoot } from '@opentui/react';\nimport { App } from './App.js';\n\nlet rootInstance: ReturnType<typeof createRoot> | null = null;\n\nexport function exitTUI(code = 0): void {\n try {\n // Unmount React tree first\n if (rootInstance) {\n try {\n rootInstance.unmount();\n } catch {\n // Ignore unmount errors\n }\n rootInstance = null;\n }\n\n // Restore terminal state: exit alt screen, show cursor, reset attributes, clear\n process.stdout.write('\\x1b[?1049l\\x1b[?25h\\x1b[0m\\x1b[H\\x1b[2J');\n } catch {\n // Ignore write errors\n }\n\n // Use setImmediate to allow any pending operations to complete\n setImmediate(() => process.exit(code));\n}\n\nexport async function startTUI(): Promise<never> {\n // Setup signal handlers for clean exit\n const handleSignal = () => exitTUI(0);\n process.on('SIGINT', handleSignal);\n process.on('SIGTERM', handleSignal);\n\n const renderer = await createCliRenderer({ exitOnCtrlC: false });\n rootInstance = createRoot(renderer);\n rootInstance.render(<App onExit={exitTUI} />);\n return new Promise(() => {});\n}\n\nexport { type Screen } from './state/types.js';\nexport { App } from './App.js';\nexport * from './theme/index.js';\nexport * from './state/index.js';\nexport * from './utils/index.js';\nexport * from './components/index.js';\nexport * from './screens/index.js';\n","import { useState, useCallback, useEffect } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { exec } from 'node:child_process';\nimport { type Screen, NAV_KEYS } from './state/types.js';\nimport { Sidebar } from './components/Sidebar.js';\nimport { Splash } from './components/Splash.js';\nimport {\n Home, Browse, Installed, Marketplace, Settings, Recommend,\n Translate, Context, Memory, Team, Plugins, Methodology,\n Plan, Workflow, Execute, History, Sync, Help,\n} from './screens/index.js';\n\nconst DOCS_URL = 'https://agenstskills.com/docs';\n\nfunction openUrl(url: string): void {\n const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';\n exec(`${cmd} ${url}`);\n}\n\ninterface AppProps {\n onExit?: (code?: number) => void;\n}\n\nexport function App({ onExit }: AppProps = {}) {\n const [showSplash, setShowSplash] = useState(true);\n const [screen, setScreen] = useState<Screen>('home');\n const [dimensions, setDimensions] = useState({\n cols: process.stdout.columns || 80,\n rows: process.stdout.rows || 24,\n });\n\n useEffect(() => {\n const handleResize = () => {\n setDimensions({\n cols: process.stdout.columns || 80,\n rows: process.stdout.rows || 24,\n });\n };\n process.stdout.on('resize', handleResize);\n return () => { process.stdout.off('resize', handleResize); };\n }, []);\n\n const { cols, rows } = dimensions;\n const showSidebar = cols >= 60;\n\n const handleNavigate = useCallback((newScreen: Screen) => {\n setScreen(newScreen);\n }, []);\n\n const handleSplashComplete = useCallback(() => {\n setShowSplash(false);\n }, []);\n\n useKeyboard((key: { name?: string; ctrl?: boolean }) => {\n if (showSplash) {\n setShowSplash(false);\n return;\n }\n\n if (key.name === 'q' || (key.ctrl && key.name === 'c')) {\n onExit ? onExit(0) : process.exit(0);\n return;\n }\n\n if (key.name === 'd') {\n openUrl(DOCS_URL);\n return;\n }\n\n const targetScreen = NAV_KEYS[key.name || ''];\n if (targetScreen) {\n setScreen(targetScreen);\n }\n\n if (key.name === 'escape' && screen !== 'home') {\n setScreen('home');\n }\n });\n\n if (showSplash) {\n return <Splash onComplete={handleSplashComplete} duration={3000} />;\n }\n\n const screenProps = {\n onNavigate: handleNavigate,\n cols: cols - (showSidebar ? 20 : 0),\n rows,\n };\n\n const renderScreen = () => {\n switch (screen) {\n case 'home': return <Home {...screenProps} />;\n case 'browse': return <Browse {...screenProps} />;\n case 'installed': return <Installed {...screenProps} />;\n case 'marketplace': return <Marketplace {...screenProps} />;\n case 'settings': return <Settings {...screenProps} />;\n case 'recommend': return <Recommend {...screenProps} />;\n case 'translate': return <Translate {...screenProps} />;\n case 'context': return <Context {...screenProps} />;\n case 'memory': return <Memory {...screenProps} />;\n case 'team': return <Team {...screenProps} />;\n case 'plugins': return <Plugins {...screenProps} />;\n case 'methodology': return <Methodology {...screenProps} />;\n case 'plan': return <Plan {...screenProps} />;\n case 'workflow': return <Workflow {...screenProps} />;\n case 'execute': return <Execute {...screenProps} />;\n case 'history': return <History {...screenProps} />;\n case 'sync': return <Sync {...screenProps} />;\n case 'help': return <Help {...screenProps} />;\n default: return <Home {...screenProps} />;\n }\n };\n\n return (\n <box flexDirection=\"row\" height={rows}>\n {showSidebar && <Sidebar screen={screen} onNavigate={handleNavigate} />}\n <box flexDirection=\"column\" flexGrow={1} marginLeft={showSidebar ? 1 : 0} paddingRight={1}>\n {renderScreen()}\n </box>\n </box>\n );\n}\n\nexport { type Screen };\n","export interface SkillItem {\n name: string;\n description?: string;\n source?: string;\n installs?: number;\n enabled?: boolean;\n quality?: number;\n grade?: string;\n warnings?: number;\n}\n\nexport interface RepoInfo {\n source: string;\n name: string;\n}\n\nexport interface FetchedSkill {\n name: string;\n source: string;\n repoName: string;\n description?: string;\n}\n\nexport type Screen =\n | 'home' | 'browse' | 'installed' | 'marketplace' | 'recommend'\n | 'translate' | 'context' | 'memory' | 'team' | 'plugins'\n | 'methodology' | 'plan' | 'workflow' | 'execute' | 'history'\n | 'sync' | 'settings' | 'help';\n\nexport const NAV_KEYS: Record<string, Screen> = {\n h: 'home', m: 'marketplace', b: 'browse', w: 'workflow',\n x: 'execute', y: 'history', r: 'recommend', t: 'translate',\n c: 'context', e: 'memory', i: 'installed', s: 'sync',\n a: 'team', p: 'plugins', o: 'methodology', n: 'plan',\n ',': 'settings', '/': 'help',\n} as const;\n\nexport const STATUS_BAR_SHORTCUTS = 'b browse m market i installed s sync / help q quit';\n\nexport interface ScreenMeta {\n key: string;\n label: string;\n screen: Screen;\n}\n\nexport interface SidebarSection {\n section: string;\n items: ScreenMeta[];\n}\n\nexport const SIDEBAR_NAV: SidebarSection[] = [\n {\n section: 'Discover',\n items: [\n { key: 'h', label: 'Home', screen: 'home' },\n { key: 'b', label: 'Browse', screen: 'browse' },\n { key: 'm', label: 'Market', screen: 'marketplace' },\n { key: 'r', label: 'Recommend', screen: 'recommend' },\n ],\n },\n {\n section: 'Manage',\n items: [\n { key: 'i', label: 'Installed', screen: 'installed' },\n { key: 's', label: 'Sync', screen: 'sync' },\n { key: 't', label: 'Translate', screen: 'translate' },\n ],\n },\n {\n section: 'Execute',\n items: [\n { key: 'w', label: 'Workflows', screen: 'workflow' },\n { key: 'x', label: 'Execute', screen: 'execute' },\n { key: 'n', label: 'Plan', screen: 'plan' },\n ],\n },\n {\n section: 'Team',\n items: [\n { key: 'a', label: 'Team', screen: 'team' },\n { key: 'c', label: 'Context', screen: 'context' },\n { key: 'e', label: 'Memory', screen: 'memory' },\n ],\n },\n {\n section: 'More',\n items: [\n { key: 'p', label: 'Plugins', screen: 'plugins' },\n { key: 'o', label: 'Methods', screen: 'methodology' },\n { key: ',', label: 'Settings', screen: 'settings' },\n ],\n },\n];\n","/**\n * Monochromatic color palette for SkillKit TUI\n * Inspired by OpenSync's elegant dark theme\n */\n\nexport const colors = {\n // Base (monochromatic grays)\n background: '#0d0d0d',\n surface: '#1a1a1a',\n surfaceHover: '#262626',\n border: '#333333',\n borderDim: '#1f1f1f',\n\n // Text hierarchy\n text: '#ffffff',\n textSecondary: '#a0a0a0',\n textMuted: '#666666',\n\n // Accent (single brand color - vibrant green)\n accent: '#00ff88',\n accentDim: '#00cc6a',\n\n // Status colors (subtle variations)\n success: '#22c55e',\n warning: '#eab308',\n error: '#ef4444',\n info: '#3b82f6',\n\n // Feature-specific accent colors (for colored keywords)\n sync: '#00d9ff', // cyan\n browse: '#22c55e', // green\n recommend: '#fbbf24', // yellow/gold\n translate: '#a855f7', // purple\n workflow: '#3b82f6', // blue\n team: '#ffffff', // white\n private: '#ef4444', // red\n tag: '#fbbf24', // yellow\n export: '#22c55e', // green\n delete: '#ef4444', // red\n} as const;\n\nexport type ColorName = keyof typeof colors;\nexport type ColorValue = (typeof colors)[ColorName];\n\n/**\n * Get a color value by name\n */\nexport function getColor(name: ColorName): ColorValue {\n return colors[name];\n}\n\n/**\n * Terminal-safe color names for OpenTUI\n * Maps our design system colors to terminal-compatible values\n */\nexport const terminalColors = {\n background: 'black',\n surface: 'black',\n text: 'white',\n textSecondary: 'gray',\n textMuted: 'gray',\n accent: 'green',\n success: 'green',\n warning: 'yellow',\n error: 'red',\n info: 'blue',\n sync: 'cyan',\n browse: 'green',\n recommend: 'yellow',\n translate: 'magenta',\n workflow: 'blue',\n team: 'white',\n border: 'gray',\n} as const;\n","/**\n * Unicode symbols and agent logos for SkillKit TUI\n * Monochromatic design system for terminal display\n */\n\n/**\n * Agent logo definitions with monochromatic icons\n */\nexport interface AgentLogo {\n icon: string;\n name: string;\n company: string;\n}\n\n/**\n * All 32 supported agents with monochromatic Unicode logos\n */\nexport const AGENT_LOGOS: Record<string, AgentLogo> = {\n 'claude-code': { icon: '⟁', name: 'Claude Code', company: 'Anthropic' },\n 'cursor': { icon: '◫', name: 'Cursor', company: 'Anysphere' },\n 'codex': { icon: '◎', name: 'Codex CLI', company: 'OpenAI' },\n 'gemini-cli': { icon: '✦', name: 'Gemini CLI', company: 'Google' },\n 'opencode': { icon: '⬡', name: 'OpenCode', company: 'SST' },\n 'github-copilot': { icon: '◈', name: 'Copilot', company: 'GitHub' },\n 'windsurf': { icon: '≋', name: 'Windsurf', company: 'Codeium' },\n 'droid': { icon: '▣', name: 'Droid', company: 'Factory' },\n 'goose': { icon: '◇', name: 'Goose', company: 'Block' },\n 'amp': { icon: '△', name: 'Amp', company: 'Sourcegraph' },\n 'kilo': { icon: '◉', name: 'Kilo Code', company: '' },\n 'kiro-cli': { icon: '⬢', name: 'Kiro', company: 'AWS' },\n 'roo': { icon: '⊙', name: 'Roo Code', company: '' },\n 'trae': { icon: '◆', name: 'Trae', company: 'ByteDance' },\n 'antigravity': { icon: '⊛', name: 'Antigravity', company: '' },\n 'clawdbot': { icon: '⟐', name: 'Clawdbot', company: '' },\n 'cline': { icon: '⊕', name: 'Cline', company: '' },\n 'codebuddy': { icon: '⊗', name: 'CodeBuddy', company: '' },\n 'commandcode': { icon: '⊘', name: 'CommandCode', company: '' },\n 'continue': { icon: '⊞', name: 'Continue', company: '' },\n 'crush': { icon: '⊟', name: 'Crush', company: '' },\n 'factory': { icon: '⊠', name: 'Factory', company: '' },\n 'mcpjam': { icon: '⊡', name: 'MCPJam', company: '' },\n 'mux': { icon: '⊢', name: 'Mux', company: '' },\n 'neovate': { icon: '⊣', name: 'Neovate', company: '' },\n 'openhands': { icon: '⊤', name: 'OpenHands', company: '' },\n 'pi': { icon: '⊥', name: 'Pi', company: '' },\n 'qoder': { icon: '⊦', name: 'Qoder', company: '' },\n 'qwen': { icon: '⊧', name: 'Qwen', company: 'Alibaba' },\n 'vercel': { icon: '▲', name: 'Vercel', company: 'Vercel' },\n 'zencoder': { icon: '⊩', name: 'Zencoder', company: '' },\n 'universal': { icon: '●', name: 'Universal', company: '' },\n} as const;\n\n/**\n * UI symbols for status and navigation\n */\nexport const symbols = {\n // Navigation\n pointer: '▸',\n pointerInactive: ' ',\n bullet: '●',\n bulletEmpty: '○',\n\n // Status\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n pending: '○',\n active: '●',\n synced: '●',\n\n // Progress\n progressFilled: '█',\n progressEmpty: '░',\n\n // Spinner frames\n spinner: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] as const,\n\n // Arrows\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n\n // Decorative\n diamond: '◆',\n diamondEmpty: '◇',\n star: '★',\n starEmpty: '☆',\n\n // Box drawing\n horizontalLine: '─',\n verticalLine: '│',\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n\n // Brand\n brandIcon: '◆',\n} as const;\n\nexport type SymbolName = keyof typeof symbols;\n\n/**\n * Get agent logo by agent type ID\n */\nexport function getAgentLogo(agentType: string): AgentLogo | undefined {\n return AGENT_LOGOS[agentType];\n}\n\n/**\n * Get all agent types\n */\nexport function getAgentTypes(): string[] {\n return Object.keys(AGENT_LOGOS);\n}\n\n/**\n * Get formatted agent display string (icon + name)\n */\nexport function formatAgentDisplay(agentType: string): string {\n const logo = AGENT_LOGOS[agentType];\n if (!logo) return agentType;\n return `${logo.icon} ${logo.name}`;\n}\n","/**\n * Helper utilities for agent and skill operations\n */\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, SkillMetadata } from '@skillkit/core';\nimport { readFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Get search directories for skills based on agent type\n * @param agentType - Optional agent type (defaults to configured agent)\n * @returns Array of directories to search for skills\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\n/**\n * Get installation directory for skills\n * @param global - Whether to get global or project-local directory\n * @param agentType - Optional agent type (defaults to configured agent)\n * @returns Installation directory path\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\n/**\n * Save skill metadata to a skill directory\n * @param skillDir - Directory containing the skill\n * @param metadata - Metadata to save\n */\nexport function saveSkillMetadata(\n skillDir: string,\n metadata: SkillMetadata\n): void {\n coreSaveSkillMetadata(skillDir, metadata);\n}\n\n/**\n * Get version from package.json\n * @returns Version string\n */\nexport function getVersion(): string {\n try {\n // Try to read from package.json relative to the built file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const packagePath = join(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));\n return packageJson.version || '1.0.0';\n } catch {\n return '1.0.0';\n }\n}\n","import { type Screen, SIDEBAR_NAV } from '../state/types.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { symbols } from '../theme/symbols.js';\nimport { getVersion } from '../utils/helpers.js';\n\ninterface SidebarProps {\n screen: Screen;\n onNavigate: (screen: Screen) => void;\n}\n\nexport function Sidebar({ screen }: SidebarProps) {\n const version = getVersion();\n\n return (\n <box flexDirection=\"column\" width={18} paddingRight={1}>\n <text fg={terminalColors.accent}>\n <b>{symbols.brandIcon} skillkit</b>\n </text>\n <text fg={terminalColors.textMuted}>v{version}</text>\n <text> </text>\n\n {SIDEBAR_NAV.map(({ section, items }, idx) => (\n <box key={section} flexDirection=\"column\">\n {idx > 0 && <text> </text>}\n <text fg={terminalColors.textMuted}>\n <i>{section}</i>\n </text>\n {items.map((item) => {\n const active = screen === item.screen;\n return (\n <text key={item.key} fg={active ? terminalColors.accent : terminalColors.text}>\n {active ? <b>{symbols.pointer} {item.label}</b> : <>{symbols.pointerInactive} {item.label}</>}\n </text>\n );\n })}\n </box>\n ))}\n\n <box flexGrow={1} />\n <text fg={terminalColors.textMuted}>{symbols.horizontalLine.repeat(14)}</text>\n <text fg={terminalColors.textMuted}>/ help q quit</text>\n </box>\n );\n}\n","/**\n * Splash Component\n * Cinematic ASCII art intro with elegant animations\n * Premium terminal experience\n */\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { terminalColors } from '../theme/colors.js';\nimport { getVersion } from '../utils/helpers.js';\n\n// Premium ASCII art logo - clean geometric design\nconst LOGO_FRAMES = [\n // Frame 1 - Dots appear\n [\n ' ',\n ' · · · · · · · · · · · · · · · ',\n ' ',\n ],\n // Frame 2 - Lines form\n [\n ' ',\n ' ━━━ ━ ━ ━ ━ ━ ━ ━ ━━━ ',\n ' ',\n ],\n // Frame 3 - Structure emerges\n [\n ' ┌──┐ ┬ ┌─ ┬ ┬ ┬ ┬ ┌─ ┬ ┌─┐ ',\n ' └──┐ │ │ │ │ │ │ │ │ │ ',\n ' └──┘ ┴ └─ ┴ ┴─┘ ┴─┘ ┴ └─ ┴ ┴ ',\n ],\n // Frame 4 - Bold letters\n [\n ' ╔═╗ ╦╔═ ╦ ╦ ╦ ╦╔═ ╦╔╦╗ ',\n ' ╚═╗ ╠╩╗ ║ ║ ║ ╠╩╗ ║ ║ ',\n ' ╚═╝ ╩ ╩ ╩ ╩═╝ ╩═╝ ╩ ╩ ╩ ╩ ',\n ],\n // Frame 5 - Final premium logo\n [\n ' ███████╗██╗ ██╗██╗██╗ ██╗ ██╗ ██╗██╗████████╗',\n ' ██╔════╝██║ ██╔╝██║██║ ██║ ██║ ██╔╝██║╚══██╔══╝',\n ' ███████╗█████╔╝ ██║██║ ██║ █████╔╝ ██║ ██║ ',\n ' ╚════██║██╔═██╗ ██║██║ ██║ ██╔═██╗ ██║ ██║ ',\n ' ███████║██║ ██╗██║███████╗███████╗██║ ██╗██║ ██║ ',\n ' ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ',\n ],\n];\n\n// Compact logo for smaller terminals\nconst LOGO_SMALL = [\n ' ╔═╗╦╔═╦╦ ╦ ╦╔═╦╔╦╗ ',\n ' ╚═╗╠╩╗║║ ║ ╠╩╗║ ║ ',\n ' ╚═╝╩ ╩╩╩═╝╩═╝╩ ╩╩ ╩ ',\n];\n\n// Elegant spinner frames\nconst SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n// Progress bar characters\nconst PROGRESS = {\n empty: '░',\n filled: '█',\n head: '▓',\n};\n\n// Loading phases with elegant messaging\nconst PHASES = [\n { message: 'Initializing', detail: 'skill engine' },\n { message: 'Connecting', detail: 'agent network' },\n { message: 'Loading', detail: 'skill manifests' },\n { message: 'Syncing', detail: 'configurations' },\n { message: 'Ready', detail: '' },\n];\n\ninterface SplashProps {\n onComplete: () => void;\n duration?: number;\n}\n\nexport function Splash({ onComplete, duration = 3500 }: SplashProps) {\n const [frame, setFrame] = useState(0);\n const [progress, setProgress] = useState(0);\n const [spinnerFrame, setSpinnerFrame] = useState(0);\n const [phase, setPhase] = useState(0);\n const [fadeIn, setFadeIn] = useState(0);\n const [particles, setParticles] = useState<string[]>([]);\n\n // Cache version to avoid repeated sync file I/O on every render\n const version = useMemo(() => getVersion(), []);\n const cols = process.stdout.columns || 80;\n const rows = process.stdout.rows || 24;\n const useSmallLogo = cols < 70;\n const currentLogo = useSmallLogo ? LOGO_SMALL : (LOGO_FRAMES[Math.min(frame, 4)] || LOGO_FRAMES[4]);\n const maxWidth = Math.max(...currentLogo.map(l => l.length));\n\n // Generate ambient particles - returns fresh randomized string each call\n const generateParticles = useCallback(() => {\n const chars = ['·', '∙', '•', '○', '◦', '◌', '◍', '◎'];\n return Array(cols).fill(0).map(() =>\n Math.random() > 0.97 ? chars[Math.floor(Math.random() * chars.length)] : ' '\n ).join('');\n }, [cols]);\n\n // Logo reveal animation\n useEffect(() => {\n if (frame >= 4) return;\n const timer = setTimeout(() => setFrame(f => f + 1), 200);\n return () => clearTimeout(timer);\n }, [frame]);\n\n // Fade in effect\n useEffect(() => {\n if (fadeIn >= 10) return;\n const timer = setTimeout(() => setFadeIn(f => f + 1), 50);\n return () => clearTimeout(timer);\n }, [fadeIn]);\n\n // Progress animation\n useEffect(() => {\n const interval = setInterval(() => {\n setProgress(p => {\n const newProgress = p + (Math.random() * 3 + 1);\n if (newProgress >= 100) {\n clearInterval(interval);\n return 100;\n }\n return newProgress;\n });\n }, 50);\n return () => clearInterval(interval);\n }, []);\n\n // Phase progression\n useEffect(() => {\n const phaseProgress = progress / 20;\n setPhase(Math.min(Math.floor(phaseProgress), PHASES.length - 1));\n }, [progress]);\n\n // Spinner animation\n useEffect(() => {\n const interval = setInterval(() => {\n setSpinnerFrame(f => (f + 1) % SPINNER.length);\n }, 80);\n return () => clearInterval(interval);\n }, []);\n\n // Particle animation\n useEffect(() => {\n const interval = setInterval(() => {\n setParticles(prev => {\n const newParticles = [...prev];\n if (newParticles.length > 3) newParticles.shift();\n newParticles.push(generateParticles());\n return newParticles;\n });\n }, 150);\n return () => clearInterval(interval);\n }, [generateParticles]);\n\n // Auto-complete\n useEffect(() => {\n const timer = setTimeout(onComplete, duration);\n return () => clearTimeout(timer);\n }, [onComplete, duration]);\n\n const pad = ' '.repeat(Math.max(0, Math.floor((cols - maxWidth) / 2)));\n const progressWidth = Math.max(1, Math.min(40, cols - 20));\n const progressPad = ' '.repeat(Math.max(0, Math.floor((cols - progressWidth) / 2)));\n\n const filledWidth = Math.min(Math.floor((progress / 100) * progressWidth), progressWidth);\n const emptyWidth = Math.max(0, progressWidth - filledWidth - 1);\n const progressBar = PROGRESS.filled.repeat(filledWidth) +\n (filledWidth < progressWidth ? PROGRESS.head : '') +\n PROGRESS.empty.repeat(emptyWidth);\n\n const currentPhase = PHASES[phase];\n\n return (\n <box flexDirection=\"column\" height={rows}>\n {/* Top ambient particles */}\n <text fg={terminalColors.textMuted}>\n {particles[0] || ''}\n </text>\n\n {/* Spacer */}\n <box flexGrow={1} />\n\n {/* Logo */}\n <box flexDirection=\"column\" alignItems=\"center\">\n {currentLogo.map((line, idx) => (\n <text key={idx} fg={frame >= 4 ? terminalColors.accent : terminalColors.textMuted}>\n {frame >= 4 ? <b>{pad}{line}</b> : <>{pad}{line}</>}\n </text>\n ))}\n </box>\n\n {/* Tagline with fade-in */}\n <text> </text>\n {fadeIn > 3 && (\n <text fg={terminalColors.textSecondary}>\n {pad}{' '}universal skills for ai coding agents\n </text>\n )}\n\n {/* Version badge */}\n {fadeIn > 5 && (\n <>\n <text> </text>\n <text fg={terminalColors.textMuted}>\n {pad}{' '}v{version}\n </text>\n </>\n )}\n\n {/* Spacer */}\n <text> </text>\n <text> </text>\n\n {/* Progress section */}\n {fadeIn > 7 && (\n <box flexDirection=\"column\" alignItems=\"center\">\n {/* Status line */}\n <box flexDirection=\"row\">\n <text fg={terminalColors.accent}>\n {progressPad}{SPINNER[spinnerFrame]}{' '}\n </text>\n <text fg={terminalColors.text}>\n <b>{currentPhase.message}</b>\n </text>\n {currentPhase.detail && (\n <text fg={terminalColors.textMuted}>\n {' '}{currentPhase.detail}\n </text>\n )}\n </box>\n\n {/* Progress bar */}\n <text> </text>\n <box flexDirection=\"row\">\n <text fg={terminalColors.textMuted}>{progressPad}[</text>\n <text fg={terminalColors.accent}>{progressBar}</text>\n <text fg={terminalColors.textMuted}>]</text>\n <text fg={terminalColors.textSecondary}>{' '}{Math.floor(progress)}%</text>\n </box>\n </box>\n )}\n\n {/* Spacer */}\n <box flexGrow={1} />\n\n {/* Bottom hint */}\n <box flexDirection=\"column\" alignItems=\"center\">\n <text fg={terminalColors.textMuted}>\n {progressPad}{' '}press any key to skip\n </text>\n <text> </text>\n {/* Bottom particles */}\n <text fg={terminalColors.textMuted}>\n {particles[1] || ''}\n </text>\n </box>\n </box>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { type Screen, loadSkills, TOTAL_AGENTS } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { symbols, AGENT_LOGOS } from '../theme/symbols.js';\nimport { getVersion } from '../utils/helpers.js';\n\ninterface HomeProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst FEATURES = [\n { key: 'Sync', color: terminalColors.sync, desc: 'share across agents' },\n { key: 'Browse', color: terminalColors.browse, desc: 'discover skills' },\n { key: 'Recommend', color: terminalColors.recommend, desc: 'AI suggestions' },\n { key: 'Translate', color: terminalColors.translate, desc: 'convert formats' },\n { key: 'Workflow', color: terminalColors.workflow, desc: 'automate chains' },\n { key: 'Team', color: terminalColors.text, desc: 'collaborate' },\n];\n\nexport function Home({ cols = 80 }: HomeProps) {\n const [animPhase, setAnimPhase] = useState(0);\n const [stats, setStats] = useState({ skills: 0, agents: TOTAL_AGENTS, synced: 0 });\n const [detectedAgents, setDetectedAgents] = useState<string[]>([]);\n\n const version = getVersion();\n const isCompact = cols < 70;\n const isNarrow = cols < 50;\n const contentWidth = Math.min(cols - 4, 55);\n const line = '─'.repeat(contentWidth);\n\n useEffect(() => {\n if (animPhase >= 5) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n useEffect(() => {\n const skillsData = loadSkills();\n setStats({\n skills: skillsData.skills.length,\n agents: TOTAL_AGENTS,\n synced: Math.min(skillsData.skills.length, 3),\n });\n setDetectedAgents(['claude-code', 'cursor', 'github-copilot']);\n }, []);\n\n const visibleAgents = useMemo(() => {\n const allAgents = Object.entries(AGENT_LOGOS);\n const perRow = isNarrow || isCompact ? 2 : 3;\n const maxAgents = isNarrow ? 4 : isCompact ? 6 : 9;\n return {\n agents: allAgents.slice(0, maxAgents),\n perRow,\n remaining: allAgents.length - maxAgents,\n };\n }, [isCompact, isNarrow]);\n\n const getAgentWidth = () => {\n if (isNarrow) return 22;\n if (isCompact) return 26;\n return 18;\n };\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\">\n <text fg={terminalColors.text}>{symbols.brandIcon} skillkit</text>\n <text fg={terminalColors.textMuted}> v{version}</text>\n </box>\n <text fg={terminalColors.textMuted}>universal skills for ai coding agents</text>\n <text> </text>\n </box>\n )}\n\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.textMuted}>{line}</text>\n <text> </text>\n <box flexDirection=\"row\">\n <box width={14}><text fg={terminalColors.accent}>{stats.skills}</text></box>\n <box width={14}><text fg={terminalColors.text}>{stats.agents}</text></box>\n <box width={14}><text fg={terminalColors.text}>{stats.synced}</text></box>\n </box>\n <box flexDirection=\"row\">\n <text fg={terminalColors.textMuted} width={14}>skills</text>\n <text fg={terminalColors.textMuted} width={14}>agents</text>\n <text fg={terminalColors.textMuted} width={14}>synced</text>\n </box>\n <text> </text>\n <text fg={terminalColors.textMuted}>{line}</text>\n <text> </text>\n </box>\n )}\n\n {animPhase >= 3 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Works with</text>\n <text> </text>\n {Array(Math.ceil(visibleAgents.agents.length / visibleAgents.perRow))\n .fill(0)\n .map((_, rowIdx) => (\n <box key={rowIdx} flexDirection=\"row\">\n {visibleAgents.agents\n .slice(rowIdx * visibleAgents.perRow, (rowIdx + 1) * visibleAgents.perRow)\n .map(([type, agent]) => {\n const isDetected = detectedAgents.includes(type);\n return (\n <box key={type} width={getAgentWidth()} flexDirection=\"row\">\n <text fg={terminalColors.text}>{agent.icon} {agent.name} </text>\n <text fg={isDetected ? terminalColors.accent : terminalColors.textMuted}>\n {isDetected ? '●' : '○'}\n </text>\n </box>\n );\n })}\n </box>\n ))}\n {visibleAgents.remaining > 0 && (\n <text fg={terminalColors.textMuted}>+{visibleAgents.remaining} more</text>\n )}\n <text> </text>\n <text fg={terminalColors.textMuted}>{line}</text>\n <text> </text>\n </box>\n )}\n\n {animPhase >= 4 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Features</text>\n <text> </text>\n {FEATURES.map((feat) => (\n <box key={feat.key} flexDirection=\"row\">\n <text fg={feat.color} width={12}> {feat.key}</text>\n <text fg={terminalColors.textMuted}>{feat.desc}</text>\n </box>\n ))}\n <text> </text>\n </box>\n )}\n\n {animPhase >= 5 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.textMuted}>{line}</text>\n <text fg={terminalColors.textMuted}>\n {isCompact ? 'b browse m market / help q quit' : 'b browse m market i installed / help q quit'}\n </text>\n </box>\n )}\n </box>\n );\n}\n","/**\n * Navigation state management for SkillKit TUI\n */\nimport type { Screen } from './types.js';\nimport { NAV_KEYS } from './types.js';\n\n/**\n * Navigation state\n */\nexport interface NavigationState {\n currentScreen: Screen;\n previousScreen: Screen | null;\n history: Screen[];\n}\n\n/**\n * Create initial navigation state\n */\nexport function createNavigationState(): NavigationState {\n return {\n currentScreen: 'home',\n previousScreen: null,\n history: ['home'],\n };\n}\n\n/**\n * Navigate to a new screen\n */\nexport function navigateTo(state: NavigationState, screen: Screen): NavigationState {\n if (state.currentScreen === screen) return state;\n\n return {\n currentScreen: screen,\n previousScreen: state.currentScreen,\n history: [...state.history, screen],\n };\n}\n\n/**\n * Go back to previous screen (or home)\n */\nexport function goBack(state: NavigationState): NavigationState {\n const previousScreen = state.previousScreen || 'home';\n return {\n currentScreen: previousScreen,\n previousScreen: state.history[state.history.length - 3] || null,\n history: state.history.slice(0, -1),\n };\n}\n\n/**\n * Get screen from key press\n */\nexport function getScreenFromKey(key: string): Screen | undefined {\n return NAV_KEYS[key];\n}\n\n/**\n * Check if a key is a navigation key\n */\nexport function isNavKey(key: string): boolean {\n return key in NAV_KEYS;\n}\n\nexport { NAV_KEYS };\n","/**\n * Skills state management for SkillKit TUI\n */\nimport { findAllSkills, evaluateSkillDirectory, getQualityGrade } from '@skillkit/core';\nimport { rmSync } from 'node:fs';\nimport { resolve, normalize } from 'node:path';\nimport { getSearchDirs } from '../utils/helpers.js';\nimport type { SkillItem } from './types.js';\nimport type { AgentType } from '@skillkit/core';\n\n/**\n * Skills store state\n */\nexport interface SkillsState {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n}\n\n/**\n * Create initial skills state\n */\nexport function createSkillsState(): SkillsState {\n return {\n skills: [],\n loading: true,\n error: null,\n };\n}\n\n/**\n * Load installed skills\n * @param agentType - Optional agent type to load skills for\n * @returns Updated skills state\n */\nexport function loadSkills(agentType?: AgentType): SkillsState {\n try {\n const searchDirs = getSearchDirs(agentType);\n const foundSkills = findAllSkills(searchDirs);\n\n const skillItems: SkillItem[] = foundSkills.map((s) => {\n const quality = evaluateSkillDirectory(s.path);\n return {\n name: s.name,\n description: s.description,\n source: s.metadata?.source,\n enabled: s.enabled,\n quality: quality?.overall,\n grade: quality ? getQualityGrade(quality.overall) : undefined,\n warnings: quality?.warnings.length,\n };\n });\n\n return {\n skills: skillItems,\n loading: false,\n error: null,\n };\n } catch (err) {\n return {\n skills: [],\n loading: false,\n error: err instanceof Error ? err.message : 'Failed to load skills',\n };\n }\n}\n\n/**\n * Remove a skill by name\n * @param skillName - Name of the skill to remove\n * @param agentType - Optional agent type\n * @returns true if removed, false otherwise\n */\nexport function removeSkill(skillName: string, agentType?: AgentType): boolean {\n try {\n const searchDirs = getSearchDirs(agentType);\n const allSkills = findAllSkills(searchDirs);\n const skill = allSkills.find((s) => s.name === skillName);\n\n if (skill) {\n const normalizedPath = normalize(resolve(skill.path));\n const isWithinSearchDirs = searchDirs.some((dir) => {\n const normalizedDir = normalize(resolve(dir));\n return normalizedPath.startsWith(normalizedDir + '/') || normalizedPath === normalizedDir;\n });\n\n if (!isWithinSearchDirs) {\n return false;\n }\n\n rmSync(skill.path, { recursive: true, force: true });\n return true;\n }\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Filter skills by search query\n */\nexport function filterSkills(skills: SkillItem[], query: string): SkillItem[] {\n if (!query.trim()) return skills;\n\n const lowerQuery = query.toLowerCase();\n return skills.filter(\n (s) =>\n s.name.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery) ||\n s.source?.toLowerCase().includes(lowerQuery)\n );\n}\n","/**\n * Agent state management for SkillKit TUI\n */\nimport { loadConfig } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport type { AgentType } from '@skillkit/core';\n\n/**\n * Agent status information\n */\nexport interface AgentStatus {\n type: AgentType;\n name: string;\n detected: boolean;\n configured: boolean;\n}\n\n/**\n * Agents state\n */\nexport interface AgentsState {\n agents: AgentStatus[];\n currentAgent: AgentType;\n loading: boolean;\n error: string | null;\n}\n\n/**\n * Create initial agents state\n */\nexport function createAgentsState(): AgentsState {\n return {\n agents: [],\n currentAgent: 'universal',\n loading: true,\n error: null,\n };\n}\n\n/**\n * Load all agents with their detection status\n */\nexport async function loadAgents(): Promise<AgentsState> {\n try {\n const config = loadConfig();\n const currentAgent = config.agent || 'universal';\n const detectedAgent = await detectAgent();\n const allAdapters = getAllAdapters();\n\n const agents: AgentStatus[] = allAdapters.map((adapter) => ({\n type: adapter.type,\n name: adapter.name,\n detected: adapter.type === detectedAgent,\n configured: adapter.type === currentAgent,\n }));\n\n return {\n agents,\n currentAgent,\n loading: false,\n error: null,\n };\n } catch (err) {\n return {\n agents: [],\n currentAgent: 'universal',\n loading: false,\n error: err instanceof Error ? err.message : 'Failed to load agents',\n };\n }\n}\n\n/**\n * Get count of detected agents\n */\nexport function getDetectedAgentCount(state: AgentsState): number {\n return state.agents.filter((a) => a.detected).length;\n}\n\n/**\n * Get list of detected agents\n */\nexport function getDetectedAgents(state: AgentsState): AgentStatus[] {\n return state.agents.filter((a) => a.detected);\n}\n\n/**\n * Get agent adapter by type\n */\nexport function getAgentAdapter(type: AgentType) {\n return getAdapter(type);\n}\n\n/**\n * Total number of supported agents (derived from adapters)\n */\nexport const TOTAL_AGENTS = getAllAdapters().length;\n","/**\n * Marketplace state management for SkillKit TUI\n */\nimport { detectProvider, loadConfig, extractFrontmatter } from '@skillkit/core';\nimport { readFileSync, existsSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { SkillItem, RepoInfo, FetchedSkill } from './types.js';\n\n/**\n * Default repos loaded from marketplace/sources.json (single source of truth)\n * Import at runtime to allow updates without code changes\n */\nimport sourcesData from '../../../../marketplace/sources.json' with { type: 'json' };\n\nexport const DEFAULT_REPOS: RepoInfo[] = sourcesData.sources.map((s: { source: string; name: string }) => ({\n source: s.source,\n name: s.name,\n}));\n\n/**\n * Marketplace state\n */\nexport interface MarketplaceState {\n allSkills: FetchedSkill[];\n filteredSkills: FetchedSkill[];\n loading: boolean;\n error: string | null;\n currentRepo: string | null;\n fetchedRepos: Set<string>;\n failedRepos: string[];\n repos: RepoInfo[];\n}\n\n/**\n * Get marketplace repos from config or use defaults\n */\nexport function getMarketplaceRepos(): RepoInfo[] {\n try {\n const config = loadConfig();\n if (config.marketplaceSources?.length) {\n const configRepos: RepoInfo[] = config.marketplaceSources.map((source) => ({\n source,\n name: source.split('/').pop() || source,\n }));\n const existingSources = new Set(configRepos.map((r) => r.source));\n for (const repo of DEFAULT_REPOS) {\n if (!existingSources.has(repo.source)) {\n configRepos.push(repo);\n }\n }\n return configRepos;\n }\n } catch {\n // Config load failed, use defaults\n }\n return DEFAULT_REPOS;\n}\n\n/**\n * Create initial marketplace state\n */\nexport function createMarketplaceState(): MarketplaceState {\n return {\n allSkills: [],\n filteredSkills: [],\n loading: false,\n error: null,\n currentRepo: null,\n fetchedRepos: new Set(),\n failedRepos: [],\n repos: getMarketplaceRepos(),\n };\n}\n\n/**\n * Try to read skill description from frontmatter\n */\nexport function readSkillDescription(skillPath: string): string | undefined {\n const skillMdPath = join(skillPath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n return undefined;\n }\n try {\n const content = readFileSync(skillMdPath, 'utf-8');\n const frontmatter = extractFrontmatter(content);\n if (frontmatter && typeof frontmatter.description === 'string') {\n return frontmatter.description;\n }\n } catch {\n // Failed to read, return undefined\n }\n return undefined;\n}\n\n/**\n * Fetch skills from a single repository\n */\nexport async function fetchRepoSkills(\n source: string,\n repos: RepoInfo[]\n): Promise<{\n skills: FetchedSkill[];\n tempRoot?: string;\n error?: string;\n}> {\n try {\n const provider = detectProvider(source);\n if (!provider) {\n return { skills: [], 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 return { skills: [], error: result.error || 'Failed to fetch skills' };\n }\n\n const repoName = repos.find((r) => r.source === source)?.name || source;\n const skills: FetchedSkill[] = result.discoveredSkills.map((skill) => ({\n name: skill.name,\n source: source,\n repoName: repoName,\n description: readSkillDescription(skill.path),\n }));\n\n return { skills, tempRoot: result.tempRoot };\n } catch (err) {\n return {\n skills: [],\n error: err instanceof Error ? err.message : 'Failed to fetch repository',\n };\n }\n}\n\n/**\n * Clean up temp directory from fetch\n */\nexport function cleanupTempRoot(tempRoot: string): void {\n try {\n rmSync(tempRoot, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n}\n\n/**\n * Filter skills by search query\n */\nexport function filterMarketplaceSkills(\n skills: FetchedSkill[],\n query: string\n): FetchedSkill[] {\n if (!query.trim()) return skills;\n\n const lowerQuery = query.toLowerCase();\n return skills.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/**\n * Convert fetched skills to skill items for display\n */\nexport function toSkillItems(skills: FetchedSkill[]): SkillItem[] {\n return skills.map((s) => ({\n name: s.name,\n description: s.description || s.repoName,\n source: s.source,\n }));\n}\n\n/**\n * Sort skills alphabetically by name\n */\nexport function sortSkillsByName(skills: FetchedSkill[]): FetchedSkill[] {\n return [...skills].sort((a, b) => a.name.localeCompare(b.name));\n}\n","{\n \"$schema\": \"./sources-schema.json\",\n \"version\": 1,\n \"updatedAt\": \"2026-01-26\",\n \"description\": \"Curated skill repository sources - THE SINGLE SOURCE OF TRUTH\",\n \"sources\": [\n { \"source\": \"anthropics/skills\", \"name\": \"Anthropic Official\", \"official\": true },\n { \"source\": \"vercel-labs/agent-skills\", \"name\": \"Vercel Labs\", \"official\": true },\n { \"source\": \"expo/skills\", \"name\": \"Expo / React Native\", \"official\": true },\n { \"source\": \"remotion-dev/skills\", \"name\": \"Remotion Video\", \"official\": true },\n { \"source\": \"supabase/agent-skills\", \"name\": \"Supabase\", \"official\": true },\n { \"source\": \"stripe/ai\", \"name\": \"Stripe Payments\", \"official\": true },\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\": \"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}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen, DEFAULT_REPOS } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface BrowseProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Browse({ onNavigate, cols = 80, rows = 24 }: BrowseProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchMode, setSearchMode] = useState(false);\n const [animPhase, setAnimPhase] = useState(0);\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n // Entrance animation\n useEffect(() => {\n if (animPhase >= 2) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n const repos = useMemo(() =>\n DEFAULT_REPOS.map((r) => ({\n name: r.name,\n source: r.source,\n })),\n []\n );\n\n const filteredRepos = useMemo(() =>\n searchQuery\n ? repos.filter(\n (r) =>\n r.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n r.source.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : repos,\n [repos, searchQuery]\n );\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, filteredRepos.length - 1)));\n }, [filteredRepos.length]);\n\n useKeyboard((key: { name?: string; sequence?: string }) => {\n if (searchMode) {\n if (key.name === 'escape') {\n setSearchMode(false);\n } else if (key.name === 'backspace') {\n setSearchQuery(prev => prev.slice(0, -1));\n } else if (key.name === 'return') {\n setSearchMode(false);\n } else if (key.sequence && key.sequence.length === 1 && /[a-zA-Z0-9\\-_.]/.test(key.sequence)) {\n setSearchQuery(prev => prev + key.sequence);\n setSelectedIndex(0);\n }\n return;\n }\n\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.sequence === '/') setSearchMode(true);\n else if (key.name === 'return') {\n const repo = filteredRepos[selectedIndex];\n if (repo) {\n // Open/view the selected repo (navigate to installed to see skills from this repo)\n onNavigate('installed');\n }\n }\n else if (key.name === 'escape') onNavigate('home');\n });\n\n useEffect(() => {\n if (selectedIndex >= filteredRepos.length && filteredRepos.length > 0) {\n setSelectedIndex(filteredRepos.length - 1);\n }\n }, [filteredRepos.length, selectedIndex]);\n\n // Calculate visible repos\n const maxVisible = Math.max(5, rows - 10);\n const startIdx = Math.max(0, Math.min(selectedIndex - Math.floor(maxVisible / 2), filteredRepos.length - maxVisible));\n const visibleRepos = filteredRepos.slice(startIdx, startIdx + maxVisible);\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n const shortcuts = isCompact\n ? 'j/k nav enter open / search esc back'\n : 'j/k navigate enter open / search esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.browse}>⌕ Browse</text>\n <text fg={terminalColors.textMuted}>{filteredRepos.length} repos</text>\n </box>\n <text fg={terminalColors.textMuted}>explore skill repositories</text>\n <text> </text>\n </box>\n )}\n\n {/* Search */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <box flexDirection=\"row\">\n <text fg={terminalColors.textMuted}>/ </text>\n <text fg={searchQuery ? terminalColors.text : terminalColors.textMuted}>\n {searchQuery || 'type to filter...'}\n </text>\n </box>\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Repository list */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Repositories</text>\n <text> </text>\n\n {filteredRepos.length === 0 ? (\n <text fg={terminalColors.textMuted}>No repositories match your search</text>\n ) : (\n <box flexDirection=\"column\">\n {visibleRepos.map((repo, idx) => {\n const actualIdx = startIdx + idx;\n const selected = actualIdx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n // Truncate source if needed - clamp to avoid negative slicing\n const maxSourceLen = Math.max(0, contentWidth - repo.name.length - 6);\n const displaySource = maxSourceLen > 3 && repo.source.length > maxSourceLen\n ? repo.source.slice(0, maxSourceLen - 3) + '...'\n : repo.source;\n // Use single text element to avoid rendering overlap issues\n const line = `${indicator}${repo.name} · ${displaySource}`;\n return (\n <text key={repo.source} fg={selected ? terminalColors.accent : terminalColors.text}>\n {line}\n </text>\n );\n })}\n </box>\n )}\n\n {/* Scroll indicator */}\n {filteredRepos.length > maxVisible && (\n <text fg={terminalColors.textMuted}>\n {'\\n'}showing {startIdx + 1}-{Math.min(startIdx + maxVisible, filteredRepos.length)} of {filteredRepos.length}\n </text>\n )}\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen, loadSkills, filterSkills } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface InstalledProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nexport function Installed({ onNavigate, cols = 80, rows = 24 }: InstalledProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n const [searchMode, setSearchMode] = useState(false);\n const [animPhase, setAnimPhase] = useState(0);\n const [spinnerFrame, setSpinnerFrame] = useState(0);\n const [skills, setSkills] = useState<ReturnType<typeof loadSkills>>({\n skills: [],\n loading: true,\n error: null,\n });\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n // Entrance animation\n useEffect(() => {\n if (animPhase >= 2) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n // Loading spinner\n useEffect(() => {\n if (!skills.loading) return;\n const interval = setInterval(() => {\n setSpinnerFrame(f => (f + 1) % SPINNER.length);\n }, 80);\n return () => clearInterval(interval);\n }, [skills.loading]);\n\n // Load skills\n useEffect(() => {\n const data = loadSkills();\n setSkills(data);\n }, []);\n\n const filteredSkills = useMemo(() =>\n filterSkills(skills.skills, searchQuery),\n [skills.skills, searchQuery]\n );\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, filteredSkills.length - 1)));\n }, [filteredSkills.length]);\n\n const handleToggle = useCallback(() => {\n if (filteredSkills.length === 0) return;\n const skill = filteredSkills[selectedIndex];\n if (skill) {\n setSkills(prev => ({\n ...prev,\n skills: prev.skills.map(s =>\n s.name === skill.name ? { ...s, enabled: s.enabled === false } : s\n ),\n }));\n }\n }, [filteredSkills, selectedIndex]);\n\n const handleKeyboard = useCallback((key: { name?: string; sequence?: string }) => {\n if (searchMode) {\n if (key.name === 'escape') {\n setSearchMode(false);\n } else if (key.name === 'backspace') {\n setSearchQuery(prev => prev.slice(0, -1));\n } else if (key.name === 'return') {\n setSearchMode(false);\n } else if (key.sequence && key.sequence.length === 1 && /[a-zA-Z0-9\\-_.]/.test(key.sequence)) {\n setSearchQuery(prev => prev + key.sequence);\n setSelectedIndex(0);\n }\n return;\n }\n\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.sequence === '/') setSearchMode(true);\n else if (key.name === 'return') handleToggle();\n else if (key.name === 'd') handleToggle();\n else if (key.name === 'escape') onNavigate('home');\n }, [searchMode, handleKeyNav, handleToggle, onNavigate]);\n\n useKeyboard(handleKeyboard);\n\n useEffect(() => {\n if (selectedIndex >= filteredSkills.length && filteredSkills.length > 0) {\n setSelectedIndex(filteredSkills.length - 1);\n }\n }, [filteredSkills.length, selectedIndex]);\n\n // Calculate visible items\n const maxVisible = Math.max(5, rows - 10);\n const startIdx = Math.max(0, Math.min(selectedIndex - Math.floor(maxVisible / 2), filteredSkills.length - maxVisible));\n const visibleSkills = filteredSkills.slice(startIdx, startIdx + maxVisible);\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n // Stats\n const enabledCount = skills.skills.filter(s => s.enabled !== false).length;\n const totalCount = skills.skills.length;\n\n const shortcuts = isCompact\n ? 'j/k nav enter toggle d disable esc back'\n : 'j/k navigate enter toggle d disable esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.success}>✓ Installed</text>\n <text fg={terminalColors.textMuted}>{enabledCount}/{totalCount} active</text>\n </box>\n <text fg={terminalColors.textMuted}>manage your skills</text>\n <text> </text>\n </box>\n )}\n\n {/* Search */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <box flexDirection=\"row\">\n <text fg={terminalColors.textMuted}>/ </text>\n <text fg={searchQuery ? terminalColors.text : terminalColors.textMuted}>\n {searchQuery || 'type to filter...'}\n </text>\n </box>\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Skills list */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {skills.loading ? (\n <box flexDirection=\"row\">\n <text fg={terminalColors.accent}>{SPINNER[spinnerFrame]} </text>\n <text fg={terminalColors.text}>Loading skills...</text>\n </box>\n ) : skills.error ? (\n <box flexDirection=\"column\">\n <text fg={terminalColors.error}>✗ Error loading skills</text>\n <text fg={terminalColors.textMuted}>{skills.error}</text>\n </box>\n ) : filteredSkills.length === 0 ? (\n <box flexDirection=\"column\">\n <text fg={terminalColors.textMuted}>\n {skills.skills.length === 0\n ? 'No skills installed yet'\n : 'No skills match your search'}\n </text>\n {skills.skills.length === 0 && (\n <>\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press 'b' to browse or 'm' for marketplace\n </text>\n </>\n )}\n </box>\n ) : (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Skills</text>\n <text> </text>\n {visibleSkills.map((skill, idx) => {\n const actualIdx = startIdx + idx;\n const selected = actualIdx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n const statusIcon = skill.enabled !== false ? '●' : '○';\n const qualityBadge = skill.grade ? ` [${skill.grade}]` : '';\n const warningIndicator = skill.warnings && skill.warnings > 2 ? ' ⚠' : '';\n const line = `${indicator}${statusIcon} ${skill.name}${qualityBadge}${warningIndicator}`;\n const badgeColor = skill.quality !== undefined\n ? (skill.quality >= 80 ? terminalColors.success : skill.quality >= 60 ? terminalColors.warning : terminalColors.error)\n : terminalColors.text;\n return (\n <text key={skill.name} fg={selected ? terminalColors.accent : badgeColor}>\n {line}\n </text>\n );\n })}\n\n {/* Scroll indicator */}\n {filteredSkills.length > maxVisible && (\n <text fg={terminalColors.textMuted}>\n {'\\n'}showing {startIdx + 1}-{Math.min(startIdx + maxVisible, filteredSkills.length)} of {filteredSkills.length}\n </text>\n )}\n </box>\n )}\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen, DEFAULT_REPOS } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface MarketplaceProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst CATEGORIES = [\n { name: 'Development', count: 24 },\n { name: 'Testing', count: 18 },\n { name: 'DevOps', count: 15 },\n { name: 'Security', count: 12 },\n];\n\nexport function Marketplace({ onNavigate, cols = 80, rows = 24 }: MarketplaceProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [animPhase, setAnimPhase] = useState(0);\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n // Entrance animation\n useEffect(() => {\n if (animPhase >= 3) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n // Featured repos\n const featured = useMemo(() =>\n DEFAULT_REPOS.slice(0, 5).map((r, i) => ({\n name: r.name,\n stars: Math.floor(100 - i * 15),\n source: r.source,\n })),\n []\n );\n\n const maxVisible = Math.max(3, Math.floor((rows - 14) / 1));\n const visibleFeatured = featured.slice(0, maxVisible);\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, visibleFeatured.length - 1)));\n }, [visibleFeatured.length]);\n\n const handleInstall = useCallback(() => {\n const item = visibleFeatured[selectedIndex];\n if (item) {\n // Navigate to installed after \"installing\"\n onNavigate('installed');\n }\n }, [selectedIndex, visibleFeatured, onNavigate]);\n\n useKeyboard((key: { name?: string }) => {\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.name === 'return') handleInstall();\n else if (key.name === 'b') onNavigate('browse');\n else if (key.name === 'escape') onNavigate('home');\n });\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n const shortcuts = isCompact\n ? 'j/k nav enter install b browse esc back'\n : 'j/k navigate enter install b full browse esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.recommend}>★ Marketplace</text>\n <text fg={terminalColors.textMuted}>{DEFAULT_REPOS.length} available</text>\n </box>\n <text fg={terminalColors.textMuted}>discover featured skills</text>\n <text> </text>\n </box>\n )}\n\n {/* Categories */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <text fg={terminalColors.text}>Categories</text>\n <text> </text>\n <box flexDirection=\"row\" gap={2}>\n {CATEGORIES.map(cat => (\n <text key={cat.name} fg={terminalColors.textMuted}>\n {cat.name} ({cat.count})\n </text>\n ))}\n </box>\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Featured section */}\n {animPhase >= 3 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Featured · <text fg={terminalColors.textMuted}>trending</text></text>\n <text> </text>\n\n {visibleFeatured.map((item, idx) => {\n const selected = idx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n // Use single text element to avoid rendering overlap\n const line = `${indicator}${item.name} ★${item.stars}`;\n return (\n <text key={item.source} fg={selected ? terminalColors.accent : terminalColors.text}>\n {line}\n </text>\n );\n })}\n\n {featured.length > maxVisible && (\n <text fg={terminalColors.textMuted}>\n {'\\n'}+{featured.length - maxVisible} more\n </text>\n )}\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 3 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface RecommendProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nexport function Recommend({ onNavigate, cols = 80, rows = 24 }: RecommendProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [analyzing, setAnalyzing] = useState(true);\n const [spinnerFrame, setSpinnerFrame] = useState(0);\n const [animPhase, setAnimPhase] = useState(0);\n const [analysisProgress, setAnalysisProgress] = useState(0);\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n useEffect(() => {\n if (animPhase >= 3) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n useEffect(() => {\n if (!analyzing) return;\n const interval = setInterval(() => {\n setSpinnerFrame(f => (f + 1) % SPINNER.length);\n }, 80);\n return () => clearInterval(interval);\n }, [analyzing]);\n\n // Simulate analysis\n useEffect(() => {\n if (!analyzing) return;\n const interval = setInterval(() => {\n setAnalysisProgress(p => {\n if (p >= 100) {\n setAnalyzing(false);\n return 100;\n }\n return p + Math.random() * 15 + 5;\n });\n }, 200);\n return () => clearInterval(interval);\n }, [analyzing]);\n\n // Recommendations data (with quality scores)\n const recommendations = useMemo(() => [\n { name: 'tdd-workflow', reason: 'Based on your test files and coverage patterns', confidence: 95, quality: 92, grade: 'A' },\n { name: 'react-patterns', reason: 'Detected React in package.json with hooks usage', confidence: 88, quality: 85, grade: 'B' },\n { name: 'typescript-strict', reason: 'tsconfig.json found with strict mode disabled', confidence: 82, quality: 78, grade: 'C' },\n { name: 'git-workflow', reason: '.git directory with complex branching detected', confidence: 75, quality: 82, grade: 'B' },\n { name: 'api-design', reason: 'REST endpoints found in your codebase', confidence: 68, quality: 71, grade: 'C' },\n { name: 'docker-compose', reason: 'docker-compose.yml detected for orchestration', confidence: 62, quality: 65, grade: 'D' },\n ], []);\n\n const maxVisible = Math.max(3, Math.floor((rows - 10) / 2));\n const visibleRecs = recommendations.slice(0, maxVisible);\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, visibleRecs.length - 1)));\n }, [visibleRecs.length]);\n\n const handleRefresh = useCallback(() => {\n setAnalyzing(true);\n setAnalysisProgress(0);\n setSelectedIndex(0);\n }, []);\n\n const handleInstall = useCallback(() => {\n if (analyzing) return;\n const rec = visibleRecs[selectedIndex];\n if (rec) {\n // Navigate to installed after \"installing\"\n onNavigate('installed');\n }\n }, [analyzing, selectedIndex, visibleRecs, onNavigate]);\n\n useKeyboard((key: { name?: string }) => {\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.name === 'return') handleInstall();\n else if (key.name === 'r') handleRefresh();\n else if (key.name === 'escape') onNavigate('home');\n });\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n // Confidence color\n const getConfColor = (conf: number) => {\n if (conf >= 80) return terminalColors.success;\n if (conf >= 60) return terminalColors.recommend;\n return terminalColors.textMuted;\n };\n\n const shortcuts = isCompact\n ? 'j/k nav enter install r refresh esc back'\n : 'j/k navigate enter install r refresh esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.recommend}>◎ Recommendations</text>\n <text fg={terminalColors.textMuted}>\n {analyzing ? 'analyzing...' : `${recommendations.length} found`}\n </text>\n </box>\n <text fg={terminalColors.textMuted}>AI skill suggestions</text>\n <text> </text>\n </box>\n )}\n\n {/* Analysis progress */}\n {animPhase >= 2 && analyzing && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <box flexDirection=\"row\">\n <text fg={terminalColors.accent}>{SPINNER[spinnerFrame]} </text>\n <text fg={terminalColors.text}>Analyzing</text>\n <text fg={terminalColors.textMuted}> your project...</text>\n </box>\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Results summary */}\n {animPhase >= 2 && !analyzing && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <box flexDirection=\"row\">\n <text fg={terminalColors.success}>✓ </text>\n <text fg={terminalColors.text}>Analysis complete</text>\n <text fg={terminalColors.textMuted}> · found {recommendations.length} matching skills</text>\n </box>\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Recommendations list */}\n {animPhase >= 3 && !analyzing && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Suggested Skills</text>\n <text> </text>\n\n {visibleRecs.map((rec, idx) => {\n const selected = idx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n const qualityColor = rec.quality >= 80 ? terminalColors.success : rec.quality >= 60 ? terminalColors.warning : terminalColors.error;\n return (\n <box key={rec.name} flexDirection=\"column\">\n <box flexDirection=\"row\">\n <text fg={terminalColors.text}>{indicator}</text>\n <text fg={selected ? terminalColors.accent : terminalColors.text}>\n {rec.name}\n </text>\n <text fg={getConfColor(rec.confidence)}> {rec.confidence}%</text>\n <text fg={qualityColor}> [{rec.grade}]</text>\n </box>\n <text fg={terminalColors.textMuted}> {rec.reason}</text>\n <text> </text>\n </box>\n );\n })}\n\n {recommendations.length > maxVisible && (\n <text fg={terminalColors.textMuted}>\n +{recommendations.length - maxVisible} more\n </text>\n )}\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 3 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","/**\n * Translate Screen\n * Skill format conversion with diff view\n */\nimport { useState } from 'react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { AGENT_LOGOS } from '../theme/symbols.js';\nimport { Header } from '../components/Header.js';\n\ninterface TranslateProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Translate(_props: TranslateProps) {\n const [sourceAgent] = useState('claude-code');\n const [targetAgent] = useState('cursor');\n\n const sourceInfo = AGENT_LOGOS[sourceAgent];\n const targetInfo = AGENT_LOGOS[targetAgent];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Translate Skills\"\n subtitle=\"Convert skills between agent formats\"\n icon=\"&#x21C4;\"\n />\n\n <box flexDirection=\"row\" marginTop={1} marginBottom={1}>\n <box flexDirection=\"column\" width={25}>\n <text fg={terminalColors.textMuted}>Source Agent</text>\n <text fg={terminalColors.accent}>\n <b>{sourceInfo?.icon} {sourceInfo?.name}</b>\n </text>\n </box>\n <text fg={terminalColors.textMuted}> &#x2192; </text>\n <box flexDirection=\"column\" width={25}>\n <text fg={terminalColors.textMuted}>Target Agent</text>\n <text fg={terminalColors.text}>\n <b>{targetInfo?.icon} {targetInfo?.name}</b>\n </text>\n </box>\n </box>\n\n <text fg={terminalColors.textMuted}>\n {'\\u2500'.repeat(50)}\n </text>\n <text> </text>\n\n <text fg={terminalColors.text}><b>Select a skill to translate:</b></text>\n <text> </text>\n <text fg={terminalColors.textMuted}>\n No skills selected. Press 'i' to view installed skills.\n </text>\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Use Tab to switch agents, Enter to translate\n </text>\n </box>\n );\n}\n","/**\n * Header Component\n * Screen header with title and optional badge/count\n */\nimport { terminalColors } from '../theme/colors.js';\nimport { symbols } from '../theme/symbols.js';\n\ninterface HeaderProps {\n title: string;\n subtitle?: string;\n count?: number;\n badge?: string;\n icon?: string;\n}\n\nexport function Header({ title, subtitle, count, badge, icon }: HeaderProps) {\n return (\n <box flexDirection=\"column\" marginBottom={1}>\n <box flexDirection=\"row\" gap={2}>\n <text fg={terminalColors.text}>\n <b>{icon && `${icon} `}{title}</b>\n </text>\n {count !== undefined && (\n <text fg={terminalColors.textMuted}>({count})</text>\n )}\n {badge && (\n <text fg={terminalColors.accent}>[{badge}]</text>\n )}\n </box>\n {subtitle && (\n <text fg={terminalColors.textSecondary}>{subtitle}</text>\n )}\n </box>\n );\n}\n","/**\n * Context Screen\n * Project context analysis\n */\nimport { useState, useEffect } from 'react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\nimport { Spinner } from '../components/Spinner.js';\n\ninterface ContextProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Context({ onNavigate, cols = 80, rows = 24 }: ContextProps) {\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => setLoading(false), 500);\n return () => clearTimeout(timer);\n }, []);\n\n const contextInfo = [\n { label: 'Working Directory', value: process.cwd() },\n { label: 'Node Version', value: process.version },\n { label: 'Platform', value: process.platform },\n { label: 'Architecture', value: process.arch },\n ];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Project Context\"\n subtitle=\"Analyze your project environment\"\n icon=\"&#x25C9;\"\n />\n\n {loading ? (\n <Spinner label=\"Analyzing project context...\" />\n ) : (\n <box flexDirection=\"column\">\n {contextInfo.map((info) => (\n <box key={info.label} flexDirection=\"row\" marginBottom={1}>\n <text fg={terminalColors.textMuted} width={20}>\n {info.label}:\n </text>\n <text fg={terminalColors.text}>{info.value}</text>\n </box>\n ))}\n </box>\n )}\n </box>\n );\n}\n","/**\n * Spinner Component\n * Loading indicator with animated frames\n */\nimport { useState, useEffect } from 'react';\nimport { terminalColors } from '../theme/colors.js';\nimport { symbols } from '../theme/symbols.js';\n\ninterface SpinnerProps {\n label?: string;\n color?: keyof typeof terminalColors;\n}\n\nexport function Spinner({ label, color = 'accent' }: SpinnerProps) {\n const [frame, setFrame] = useState(0);\n\n useEffect(() => {\n const interval = setInterval(() => {\n setFrame((f) => (f + 1) % symbols.spinner.length);\n }, 80);\n return () => clearInterval(interval);\n }, []);\n\n return (\n <box flexDirection=\"row\" gap={1}>\n <text fg={terminalColors[color]}>{symbols.spinner[frame]}</text>\n {label && <text fg={terminalColors.text}>{label}</text>}\n </box>\n );\n}\n","/**\n * Sync Screen - Cross-Agent Synchronization\n * Clean monochromatic design\n */\nimport { useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { AGENT_LOGOS } from '../theme/symbols.js';\n\ninterface SyncProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nexport function Sync({ onNavigate, cols = 80, rows = 24 }: SyncProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [syncStatus, setSyncStatus] = useState<'idle' | 'syncing' | 'done'>('idle');\n const [spinnerFrame, setSpinnerFrame] = useState(0);\n const [animPhase, setAnimPhase] = useState(0);\n const syncTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (syncTimeoutRef.current) {\n clearTimeout(syncTimeoutRef.current);\n }\n };\n }, []);\n\n // Entrance animation\n useEffect(() => {\n if (animPhase >= 2) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n // Spinner animation\n useEffect(() => {\n if (syncStatus !== 'syncing') return;\n const interval = setInterval(() => {\n setSpinnerFrame(f => (f + 1) % SPINNER.length);\n }, 80);\n return () => clearInterval(interval);\n }, [syncStatus]);\n\n // Agents with sync data\n const agents = useMemo(() => {\n const agentTypes = ['claude-code', 'cursor', 'github-copilot', 'codex', 'gemini-cli', 'windsurf'];\n return agentTypes.slice(0, isCompact ? 4 : 6).map((type) => ({\n type,\n ...(AGENT_LOGOS[type] || { name: type, icon: '◇' }),\n synced: type === 'claude-code' || type === 'cursor',\n skillCount: type === 'claude-code' ? 12 : type === 'cursor' ? 8 : 0,\n }));\n }, [isCompact]);\n\n const syncedCount = agents.filter(a => a.synced).length;\n const totalSkills = agents.reduce((sum, a) => sum + a.skillCount, 0);\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, agents.length - 1)));\n }, [agents.length]);\n\n const handleSync = useCallback(() => {\n if (syncStatus === 'syncing') return;\n if (syncTimeoutRef.current) clearTimeout(syncTimeoutRef.current);\n setSyncStatus('syncing');\n syncTimeoutRef.current = setTimeout(() => setSyncStatus('done'), 1500);\n }, [syncStatus]);\n\n const handleSyncAll = useCallback(() => {\n if (syncStatus === 'syncing') return;\n if (syncTimeoutRef.current) clearTimeout(syncTimeoutRef.current);\n setSyncStatus('syncing');\n syncTimeoutRef.current = setTimeout(() => setSyncStatus('done'), 2000);\n }, [syncStatus]);\n\n // Clamp selectedIndex when agents list shrinks\n useEffect(() => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev, agents.length - 1)));\n }, [agents.length]);\n\n useKeyboard((key: { name?: string }) => {\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.name === 'return') handleSync();\n else if (key.name === 'a') handleSyncAll();\n else if (key.name === 'escape') onNavigate('home');\n });\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n const shortcuts = isCompact\n ? 'j/k nav enter sync a sync all esc back'\n : 'j/k navigate enter sync selected a sync all esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.sync}>⇄ Sync</text>\n <text fg={terminalColors.textMuted}>{syncedCount}/{agents.length} synced</text>\n </box>\n <text fg={terminalColors.textMuted}>share skills across agents</text>\n <text> </text>\n </box>\n )}\n\n {/* Status */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n {syncStatus === 'syncing' ? (\n <box flexDirection=\"row\">\n <text fg={terminalColors.accent}>{SPINNER[spinnerFrame]} </text>\n <text fg={terminalColors.text}>Syncing skills...</text>\n </box>\n ) : syncStatus === 'done' ? (\n <box flexDirection=\"row\">\n <text fg={terminalColors.success}>✓ </text>\n <text fg={terminalColors.text}>Sync complete</text>\n <text fg={terminalColors.textMuted}> · {totalSkills} skills synced</text>\n </box>\n ) : (\n <box flexDirection=\"row\" gap={3}>\n <text fg={terminalColors.success}>● {syncedCount} synced</text>\n <text fg={terminalColors.textMuted}>○ {agents.length - syncedCount} pending</text>\n </box>\n )}\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Agents list */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Agents</text>\n <text> </text>\n\n {agents.map((agent, idx) => {\n const selected = idx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n const statusIcon = agent.synced ? '●' : '○';\n const statusColor = agent.synced ? terminalColors.success : terminalColors.textMuted;\n return (\n <box key={agent.type} flexDirection=\"row\">\n <text fg={terminalColors.text}>{indicator}</text>\n <text fg={selected ? terminalColors.accent : terminalColors.text}>\n {agent.icon} {agent.name}\n </text>\n <text fg={statusColor}> {statusIcon}</text>\n <text fg={terminalColors.textMuted}> {agent.skillCount} skills</text>\n </box>\n );\n })}\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","/**\n * Memory Screen\n * Session memory management\n */\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\n\ninterface MemoryProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Memory({ onNavigate, cols = 80, rows = 24 }: MemoryProps) {\n const memories = [\n { key: 'project-context', size: '2.4 KB', updated: '2 min ago' },\n { key: 'user-preferences', size: '1.1 KB', updated: '5 min ago' },\n { key: 'session-history', size: '4.7 KB', updated: '1 min ago' },\n ];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Memory\"\n subtitle=\"Manage persistent session memory\"\n count={memories.length}\n icon=\"&#x25CE;\"\n />\n\n <text fg={terminalColors.text}><b>Stored Memories</b></text>\n <text> </text>\n\n {memories.map((mem, idx) => (\n <box key={mem.key} flexDirection=\"row\" marginBottom={1}>\n <text fg={idx === 0 ? terminalColors.accent : terminalColors.text} width={25}>\n {idx === 0 ? '\\u25B8 ' : ' '}{mem.key}\n </text>\n <text fg={terminalColors.textMuted} width={12}>{mem.size}</text>\n <text fg={terminalColors.textMuted}>{mem.updated}</text>\n </box>\n ))}\n\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press Enter to view, 'd' to delete, 'c' to clear all\n </text>\n </box>\n );\n}\n","/**\n * Workflow Screen - Automation Builder\n * Clean monochromatic design\n */\nimport { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface WorkflowProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst WORKFLOWS = [\n { name: 'test-and-commit', steps: 3, lastRun: '1 hour ago', status: 'success' as const },\n { name: 'deploy-preview', steps: 5, lastRun: '2 hours ago', status: 'success' as const },\n { name: 'full-ci', steps: 8, lastRun: '1 day ago', status: 'failed' as const },\n { name: 'quick-fix', steps: 2, lastRun: '3 days ago', status: 'pending' as const },\n];\n\nexport function Workflow({ onNavigate, cols = 80, rows = 24 }: WorkflowProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [animPhase, setAnimPhase] = useState(0);\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n // Entrance animation\n useEffect(() => {\n if (animPhase >= 2) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n const successCount = WORKFLOWS.filter(w => w.status === 'success').length;\n const failedCount = WORKFLOWS.filter(w => w.status === 'failed').length;\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, WORKFLOWS.length - 1)));\n }, []);\n\n useKeyboard((key: { name?: string }) => {\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.name === 'escape') onNavigate('home');\n });\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n const shortcuts = isCompact\n ? 'j/k nav esc back'\n : 'j/k navigate esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.workflow}>⟳ Workflows</text>\n <text fg={terminalColors.textMuted}>{WORKFLOWS.length} workflows</text>\n </box>\n <text fg={terminalColors.textMuted}>automate skill chains</text>\n <text> </text>\n </box>\n )}\n\n {/* Stats */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <box flexDirection=\"row\" gap={3}>\n <text fg={terminalColors.success}>✓ {successCount} passed</text>\n {failedCount > 0 && (\n <text fg={terminalColors.error}>✗ {failedCount} failed</text>\n )}\n </box>\n <text> </text>\n {divider}\n <text> </text>\n </box>\n )}\n\n {/* Workflows list */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Workflows</text>\n <text> </text>\n\n {WORKFLOWS.length === 0 ? (\n <box flexDirection=\"column\">\n <text fg={terminalColors.textMuted}>No workflows yet</text>\n </box>\n ) : (\n WORKFLOWS.map((wf, idx) => {\n const selected = idx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n const statusIcon = wf.status === 'success' ? '✓'\n : wf.status === 'failed' ? '✗' : '○';\n const statusColor = wf.status === 'success' ? terminalColors.success\n : wf.status === 'failed' ? terminalColors.error : terminalColors.textMuted;\n return (\n <box key={wf.name} flexDirection=\"row\">\n <text fg={terminalColors.text}>{indicator}</text>\n <text fg={selected ? terminalColors.accent : terminalColors.text} width={18}>\n {wf.name}\n </text>\n <text fg={statusColor}>{statusIcon} </text>\n <text fg={terminalColors.textMuted}>{wf.steps}s · {wf.lastRun}</text>\n </box>\n );\n })\n )}\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","/**\n * Execute Screen\n * Live skill execution\n */\nimport { useState } from 'react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\nimport { Spinner } from '../components/Spinner.js';\nimport { ProgressBar } from '../components/ProgressBar.js';\n\ninterface ExecuteProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Execute({ onNavigate, cols = 80, rows = 24 }: ExecuteProps) {\n const [executing, setExecuting] = useState(false);\n const [progress, setProgress] = useState(0);\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Execute\"\n subtitle=\"Run skills in real-time\"\n icon=\"&#x25B6;\"\n />\n\n {executing ? (\n <box flexDirection=\"column\">\n <Spinner label=\"Executing skill...\" />\n <text> </text>\n <ProgressBar progress={progress} width={40} />\n <text> </text>\n <text fg={terminalColors.textMuted}>Press Esc to cancel</text>\n </box>\n ) : (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>Select a skill to execute:</text>\n <text> </text>\n <text fg={terminalColors.textMuted}>\n No skills available. Install skills first using 'b' (browse) or 'm' (marketplace).\n </text>\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press Enter to execute, 'i' to view installed skills\n </text>\n </box>\n )}\n </box>\n );\n}\n","/**\n * ProgressBar Component\n * Animated progress bar display\n */\nimport { terminalColors } from '../theme/colors.js';\nimport { symbols } from '../theme/symbols.js';\n\ninterface ProgressBarProps {\n progress: number; // 0-100\n width?: number;\n showPercentage?: boolean;\n color?: keyof typeof terminalColors;\n}\n\nexport function ProgressBar({\n progress,\n width = 20,\n showPercentage = true,\n color = 'accent',\n}: ProgressBarProps) {\n const clampedProgress = Math.max(0, Math.min(100, progress));\n const filledWidth = Math.round((clampedProgress / 100) * width);\n const emptyWidth = width - filledWidth;\n\n const filled = symbols.progressFilled.repeat(filledWidth);\n const empty = symbols.progressEmpty.repeat(emptyWidth);\n\n return (\n <box flexDirection=\"row\" gap={1}>\n <text>\n <span fg={terminalColors[color]}>{filled}</span>\n <span fg={terminalColors.textMuted}>{empty}</span>\n </text>\n {showPercentage && (\n <text fg={terminalColors.textSecondary}>\n {Math.round(clampedProgress)}%\n </text>\n )}\n </box>\n );\n}\n","/**\n * History Screen\n * Execution history\n */\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\n\ninterface HistoryProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function History({ onNavigate, cols = 80, rows = 24 }: HistoryProps) {\n const history = [\n { skill: 'tdd-workflow', time: '10:32 AM', duration: '2.3s', status: 'success' },\n { skill: 'code-review', time: '10:15 AM', duration: '5.1s', status: 'success' },\n { skill: 'deploy-check', time: '09:45 AM', duration: '8.7s', status: 'failed' },\n { skill: 'lint-fix', time: '09:30 AM', duration: '1.2s', status: 'success' },\n ];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"History\"\n subtitle=\"View execution history\"\n count={history.length}\n icon=\"&#x25F7;\"\n />\n\n <text fg={terminalColors.text}><b>Recent Executions</b></text>\n <text> </text>\n\n {history.map((item, idx) => (\n <box key={`${item.skill}-${item.time}`} flexDirection=\"row\" marginBottom={1}>\n <text\n fg={idx === 0 ? terminalColors.accent : terminalColors.text}\n width={18}\n >\n {idx === 0 ? '\\u25B8 ' : ' '}{item.skill}\n </text>\n <text fg={terminalColors.textMuted} width={12}>{item.time}</text>\n <text fg={terminalColors.textMuted} width={10}>{item.duration}</text>\n <text\n fg={item.status === 'success' ? terminalColors.success : terminalColors.error}\n >\n {item.status === 'success' ? '\\u2713 success' : '\\u2717 failed'}\n </text>\n </box>\n ))}\n\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press Enter to view details, 'r' to re-run, 'c' to clear\n </text>\n </box>\n );\n}\n","/**\n * Team Screen\n * Team collaboration\n */\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\n\ninterface TeamProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Team({ onNavigate, cols = 80, rows = 24 }: TeamProps) {\n const members = [\n { name: 'You', role: 'Owner', status: 'online', skills: 12 },\n { name: 'Alice', role: 'Admin', status: 'online', skills: 8 },\n { name: 'Bob', role: 'Member', status: 'offline', skills: 5 },\n ];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Team\"\n subtitle=\"Collaborate with your development team\"\n count={members.length}\n icon=\"&#x25C9;\"\n />\n\n <text fg={terminalColors.text}><b>Team Members</b></text>\n <text> </text>\n\n {members.map((member, idx) => (\n <box key={member.name} flexDirection=\"row\" marginBottom={1}>\n <text\n fg={idx === 0 ? terminalColors.accent : terminalColors.text}\n width={15}\n >\n {idx === 0 ? '\\u25B8 ' : ' '}{member.name}\n </text>\n <text fg={terminalColors.textMuted} width={10}>{member.role}</text>\n <text\n fg={member.status === 'online' ? terminalColors.success : terminalColors.textMuted}\n width={10}\n >\n {member.status === 'online' ? '\\u25CF online' : '\\u25CB offline'}\n </text>\n <text fg={terminalColors.textMuted}>{member.skills} skills</text>\n </box>\n ))}\n\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press 'i' to invite, 's' to share skills\n </text>\n </box>\n );\n}\n","/**\n * Plugins Screen\n * Plugin management\n */\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\n\ninterface PluginsProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Plugins({ onNavigate, cols = 80, rows = 24 }: PluginsProps) {\n const plugins = [\n { name: 'git-hooks', enabled: true, version: '1.2.0' },\n { name: 'ai-suggest', enabled: true, version: '0.9.1' },\n { name: 'metrics', enabled: false, version: '2.0.0' },\n ];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Plugins\"\n subtitle=\"Extend SkillKit with plugins\"\n count={plugins.length}\n icon=\"&#x25C8;\"\n />\n\n <text fg={terminalColors.text}><b>Installed Plugins</b></text>\n <text> </text>\n\n {plugins.map((plugin, idx) => (\n <box key={plugin.name} flexDirection=\"row\" marginBottom={1}>\n <text\n fg={idx === 0 ? terminalColors.accent : terminalColors.text}\n width={18}\n >\n {idx === 0 ? '\\u25B8 ' : ' '}{plugin.name}\n </text>\n <text fg={terminalColors.textMuted} width={10}>v{plugin.version}</text>\n <text\n fg={plugin.enabled ? terminalColors.success : terminalColors.textMuted}\n >\n {plugin.enabled ? '\\u25CF enabled' : '\\u25CB disabled'}\n </text>\n </box>\n ))}\n\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press Enter to toggle, 'a' to add new, 'u' to update\n </text>\n </box>\n );\n}\n","/**\n * Methodology Screen\n * Development methodology packs\n */\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\n\ninterface MethodologyProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Methodology({ onNavigate, cols = 80, rows = 24 }: MethodologyProps) {\n const methodologies = [\n { name: 'TDD', description: 'Test-Driven Development', skills: 5, active: true },\n { name: 'BDD', description: 'Behavior-Driven Development', skills: 4, active: false },\n { name: 'Clean Code', description: 'SOLID principles', skills: 6, active: false },\n { name: 'Security First', description: 'OWASP guidelines', skills: 8, active: false },\n ];\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Methodologies\"\n subtitle=\"Development methodology skill packs\"\n count={methodologies.length}\n icon=\"&#x25CE;\"\n />\n\n <text fg={terminalColors.text}><b>Available Packs</b></text>\n <text> </text>\n\n {methodologies.map((meth, idx) => (\n <box key={meth.name} flexDirection=\"column\" marginBottom={1}>\n <box flexDirection=\"row\">\n <text\n fg={idx === 0 ? terminalColors.accent : terminalColors.text}\n width={15}\n >\n {idx === 0 ? <b>{'\\u25B8 '}{meth.name}</b> : <>{'\\u25B8 '}{meth.name}</>}\n </text>\n <text fg={terminalColors.textMuted}>{meth.skills} skills</text>\n {meth.active && (\n <text fg={terminalColors.success}> [active]</text>\n )}\n </box>\n <text fg={terminalColors.textMuted}> {meth.description}</text>\n </box>\n ))}\n\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press Enter to activate, 'v' to view skills\n </text>\n </box>\n );\n}\n","/**\n * Plan Screen\n * Structured plan execution\n */\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { Header } from '../components/Header.js';\nimport { ProgressBar } from '../components/ProgressBar.js';\n\ninterface PlanProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nexport function Plan({ onNavigate, cols = 80, rows = 24 }: PlanProps) {\n const steps = [\n { name: 'Analyze codebase', status: 'done', duration: '2.3s' },\n { name: 'Generate tests', status: 'done', duration: '5.1s' },\n { name: 'Run linter', status: 'running', duration: '-' },\n { name: 'Apply fixes', status: 'pending', duration: '-' },\n { name: 'Verify changes', status: 'pending', duration: '-' },\n ];\n\n const completedSteps = steps.filter((s) => s.status === 'done').length;\n const progress = (completedSteps / steps.length) * 100;\n\n return (\n <box flexDirection=\"column\" paddingLeft={1}>\n <Header\n title=\"Plan Execution\"\n subtitle=\"Structured multi-step execution\"\n icon=\"&#x25A3;\"\n />\n\n <box flexDirection=\"row\" marginBottom={1}>\n <text fg={terminalColors.text}>Progress: </text>\n <ProgressBar progress={progress} width={30} />\n </box>\n\n <text fg={terminalColors.text}><b>Steps</b></text>\n <text> </text>\n\n {steps.map((step, idx) => {\n const statusIcon = step.status === 'done' ? '\\u2713' : step.status === 'running' ? '\\u27F3' : '\\u25CB';\n const statusColor =\n step.status === 'done'\n ? terminalColors.success\n : step.status === 'running'\n ? terminalColors.accent\n : terminalColors.textMuted;\n\n return (\n <box key={step.name} flexDirection=\"row\" marginBottom={1}>\n <text fg={statusColor} width={3}>{statusIcon}</text>\n <text fg={step.status === 'pending' ? terminalColors.textMuted : terminalColors.text} width={25}>\n {step.name}\n </text>\n <text fg={terminalColors.textMuted}>{step.duration}</text>\n </box>\n );\n })}\n\n <text> </text>\n <text fg={terminalColors.textMuted}>\n Press Enter to continue, Esc to cancel\n </text>\n </box>\n );\n}\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useKeyboard } from '@opentui/react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface SettingsProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\ninterface SettingItem {\n key: string;\n label: string;\n value: string;\n type: 'select' | 'path' | 'toggle';\n}\n\nconst DEFAULT_SETTINGS: SettingItem[] = [\n { key: 'defaultAgent', label: 'Default Agent', value: 'claude-code', type: 'select' },\n { key: 'skillsDir', label: 'Skills Directory', value: '.claude/skills', type: 'path' },\n { key: 'autoSync', label: 'Auto Sync', value: 'enabled', type: 'toggle' },\n { key: 'theme', label: 'Theme', value: 'dark', type: 'select' },\n { key: 'telemetry', label: 'Telemetry', value: 'disabled', type: 'toggle' },\n];\n\nexport function Settings({ onNavigate, cols = 80 }: SettingsProps) {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [settings, setSettings] = useState<SettingItem[]>(DEFAULT_SETTINGS);\n const [animPhase, setAnimPhase] = useState(0);\n\n const isCompact = cols < 60;\n const contentWidth = Math.max(1, Math.min(cols - 4, 60));\n\n useEffect(() => {\n if (animPhase >= 2) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n const handleKeyNav = useCallback((delta: number) => {\n setSelectedIndex(prev => Math.max(0, Math.min(prev + delta, settings.length - 1)));\n }, [settings.length]);\n\n const handleToggle = useCallback(() => {\n const setting = settings[selectedIndex];\n if (setting?.type === 'toggle') {\n setSettings(prev => prev.map((s, i) =>\n i === selectedIndex ? { ...s, value: s.value === 'enabled' ? 'disabled' : 'enabled' } : s\n ));\n }\n }, [selectedIndex, settings]);\n\n const handleReset = useCallback(() => {\n setSettings(DEFAULT_SETTINGS);\n }, []);\n\n const handleKeyboard = useCallback((key: { name?: string }) => {\n if (key.name === 'j' || key.name === 'down') handleKeyNav(1);\n else if (key.name === 'k' || key.name === 'up') handleKeyNav(-1);\n else if (key.name === 'return') handleToggle();\n else if (key.name === 'r') handleReset();\n else if (key.name === 'escape') onNavigate('home');\n }, [handleKeyNav, handleToggle, handleReset, onNavigate]);\n\n useKeyboard(handleKeyboard);\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n const shortcuts = isCompact\n ? 'j/k nav enter toggle r reset esc back'\n : 'j/k navigate enter toggle r reset defaults esc back';\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {/* Header */}\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.text}>⚙ Settings</text>\n <text fg={terminalColors.textMuted}>{settings.length} options</text>\n </box>\n <text fg={terminalColors.textMuted}>configure skillkit</text>\n <text> </text>\n </box>\n )}\n\n {/* Settings list */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n <text fg={terminalColors.text}>Configuration</text>\n <text> </text>\n\n {settings.map((setting, idx) => {\n const selected = idx === selectedIndex;\n const indicator = selected ? '▸' : ' ';\n const valueColor = setting.type === 'toggle'\n ? (setting.value === 'enabled' ? terminalColors.success : terminalColors.textMuted)\n : terminalColors.textMuted;\n const toggleIcon = setting.type === 'toggle'\n ? (setting.value === 'enabled' ? '● ' : '○ ')\n : '';\n return (\n <box key={setting.key} flexDirection=\"row\">\n <text fg={terminalColors.text}>{indicator}</text>\n <text fg={selected ? terminalColors.accent : terminalColors.text} width={18}>\n {setting.label}\n </text>\n <text fg={valueColor}>{toggleIcon}{setting.value}</text>\n </box>\n );\n })}\n <text> </text>\n </box>\n )}\n\n {/* Config location */}\n {animPhase >= 2 && !isCompact && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>config: ~/.config/skillkit/config.json</text>\n <text> </text>\n </box>\n )}\n\n {/* Footer */}\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n </box>\n )}\n </box>\n );\n}\n","import { useState, useEffect, useMemo } from 'react';\nimport { type Screen } from '../state/index.js';\nimport { terminalColors } from '../theme/colors.js';\nimport { getVersion } from '../utils/helpers.js';\n\ninterface HelpProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst SHORTCUTS = [\n { section: 'Navigation', items: [\n { key: 'h', desc: 'Home screen' },\n { key: 'b', desc: 'Browse skills' },\n { key: 'm', desc: 'Marketplace' },\n { key: 'r', desc: 'Recommendations' },\n { key: 'i', desc: 'Installed skills' },\n { key: 's', desc: 'Sync settings' },\n { key: 'f', desc: 'Find skills' },\n ]},\n { section: 'Actions', items: [\n { key: 't', desc: 'Translate skills' },\n { key: 'w', desc: 'Workflows' },\n { key: 'x', desc: 'Execute' },\n { key: 'n', desc: 'Plan' },\n { key: 'v', desc: 'Validate' },\n { key: 'u', desc: 'Publish' },\n ]},\n { section: 'Team & Config', items: [\n { key: 'a', desc: 'Team settings' },\n { key: 'c', desc: 'Context' },\n { key: 'e', desc: 'Memory' },\n { key: 'p', desc: 'Plugins' },\n { key: 'o', desc: 'Methodology' },\n { key: ',', desc: 'Settings' },\n ]},\n { section: 'Global', items: [\n { key: '/', desc: 'This help screen' },\n { key: 'd', desc: 'Open docs' },\n { key: 'esc', desc: 'Go back / Home' },\n { key: 'q', desc: 'Quit application' },\n { key: 'j/k', desc: 'Navigate lists' },\n ]},\n];\n\nfunction ShortcutSection({ section, items, isLast }: { section: string; items: { key: string; desc: string }[]; isLast: boolean }) {\n return (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>{section}</text>\n {items.map((item) => (\n <box key={item.key} flexDirection=\"row\">\n <text fg={terminalColors.accent} width={8}> {item.key}</text>\n <text fg={terminalColors.textMuted}>{item.desc}</text>\n </box>\n ))}\n {!isLast && <text> </text>}\n </box>\n );\n}\n\nexport function Help({ cols = 80 }: HelpProps) {\n const [animPhase, setAnimPhase] = useState(0);\n const isCompact = cols < 60;\n const rawWidth = cols - 4;\n const contentWidth = Math.max(1, Math.min(rawWidth, 60));\n const version = getVersion();\n\n useEffect(() => {\n if (animPhase >= 2) return;\n const timer = setTimeout(() => setAnimPhase(p => p + 1), 100);\n return () => clearTimeout(timer);\n }, [animPhase]);\n\n const divider = useMemo(() =>\n <text fg={terminalColors.textMuted}>{'─'.repeat(contentWidth)}</text>,\n [contentWidth]\n );\n\n return (\n <box flexDirection=\"column\" padding={1}>\n {animPhase >= 1 && (\n <box flexDirection=\"column\">\n <box flexDirection=\"row\" justifyContent=\"space-between\" width={contentWidth}>\n <text fg={terminalColors.text}>/ Help</text>\n <text fg={terminalColors.textMuted}>skillkit v{version}</text>\n </box>\n <text fg={terminalColors.textMuted}>keyboard shortcuts and navigation</text>\n <text> </text>\n </box>\n )}\n\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text> </text>\n {isCompact ? (\n SHORTCUTS.map((s, idx) => (\n <ShortcutSection key={s.section} section={s.section} items={s.items} isLast={idx === SHORTCUTS.length - 1} />\n ))\n ) : (\n <box flexDirection=\"row\">\n <box flexDirection=\"column\" width={Math.floor(contentWidth / 2)}>\n {SHORTCUTS.slice(0, 2).map((s, idx) => (\n <ShortcutSection key={s.section} section={s.section} items={s.items} isLast={idx === 1} />\n ))}\n </box>\n <box flexDirection=\"column\" width={Math.floor(contentWidth / 2)}>\n {SHORTCUTS.slice(2).map((s, idx) => (\n <ShortcutSection key={s.section} section={s.section} items={s.items} isLast={idx === 1} />\n ))}\n </box>\n </box>\n )}\n <text> </text>\n </box>\n )}\n\n {animPhase >= 2 && (\n <box flexDirection=\"column\">\n {divider}\n <text fg={terminalColors.textMuted}>esc back h home q quit</text>\n </box>\n )}\n </box>\n );\n}\n","/**\n * Animation presets for SkillKit TUI\n * Uses OpenTUI's useTimeline for smooth 60fps animations\n */\n\n/**\n * Animation easing functions available in OpenTUI\n */\nexport type EasingFunction =\n | 'linear'\n | 'easeInQuad'\n | 'easeOutQuad'\n | 'easeInOutQuad'\n | 'easeInCubic'\n | 'easeOutCubic'\n | 'easeInOutCubic'\n | 'easeInQuart'\n | 'easeOutQuart'\n | 'easeInOutQuart';\n\n/**\n * Animation preset configuration\n */\nexport interface AnimationPreset {\n duration: number;\n ease: EasingFunction;\n stagger?: number;\n}\n\n/**\n * Predefined animation presets\n */\nexport const animations = {\n /**\n * Staggered fade-in for entrance animations\n * Used on home screen for progressive content reveal\n */\n staggeredFadeIn: {\n duration: 800,\n ease: 'easeOutCubic' as EasingFunction,\n stagger: 100,\n },\n\n /**\n * Logo reveal with scramble effect\n * Used for branding animation on startup\n */\n logoReveal: {\n duration: 600,\n ease: 'easeOutCubic' as EasingFunction,\n },\n\n /**\n * Count-up animation for stats\n * Used in StatsCard component\n */\n countUp: {\n duration: 1200,\n ease: 'easeOutQuart' as EasingFunction,\n },\n\n /**\n * Screen transition animation\n * Used when navigating between screens\n */\n screenTransition: {\n duration: 200,\n ease: 'easeInOutCubic' as EasingFunction,\n },\n\n /**\n * Quick fade for tooltips and hints\n */\n quickFade: {\n duration: 150,\n ease: 'easeOutQuad' as EasingFunction,\n },\n\n /**\n * Pulse animation for active states\n */\n pulse: {\n duration: 1000,\n ease: 'easeInOutQuad' as EasingFunction,\n },\n} as const;\n\n/**\n * Scramble effect characters\n * Used for text reveal animations\n */\nexport const SCRAMBLE_CHARS = '█▓▒░◆◇◈⟁◎✦⬡▣';\n\n/**\n * Scramble animation configuration\n */\nexport interface ScrambleConfig {\n /** Animation duration in ms */\n duration: number;\n /** Progress increment per frame */\n increment: number;\n /** Frame interval in ms */\n interval: number;\n}\n\n/**\n * Default scramble animation config\n */\nexport const DEFAULT_SCRAMBLE_CONFIG: ScrambleConfig = {\n duration: 420,\n increment: 12,\n interval: 35,\n};\n\n/**\n * Generate scrambled text with progressive reveal\n * @param target - The target text to reveal\n * @param progress - Progress percentage (0-100)\n * @param chars - Characters to use for scrambling\n */\nexport function scrambleText(\n target: string,\n progress: number,\n chars: string = SCRAMBLE_CHARS\n): string {\n return target\n .split('\\n')\n .map((line) => {\n return line\n .split('')\n .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 })\n .join('');\n })\n .join('\\n');\n}\n\n/**\n * Calculate staggered delay for an item in a list\n * @param index - Item index\n * @param stagger - Delay between items in ms\n * @returns Delay in ms for this item\n */\nexport function getStaggerDelay(index: number, stagger: number = 100): number {\n return index * stagger;\n}\n","/**\n * List navigation and pagination utilities\n */\n\n/**\n * Calculate visible items for paginated list display\n * Centers the selected item in the visible window\n */\nexport interface PaginationResult {\n /** Starting index in the full list */\n start: number;\n /** Ending index (exclusive) in the full list */\n end: number;\n /** Number of items above the visible window */\n itemsAbove: number;\n /** Number of items below the visible window */\n itemsBelow: number;\n}\n\n/**\n * Calculate pagination for a list with a selected index\n * @param totalItems - Total number of items in the list\n * @param selectedIndex - Currently selected item index\n * @param maxVisible - Maximum number of items to show at once\n * @returns Pagination information\n */\nexport function calculatePagination(\n totalItems: number,\n selectedIndex: number,\n maxVisible: number\n): PaginationResult {\n if (totalItems <= maxVisible) {\n return {\n start: 0,\n end: totalItems,\n itemsAbove: 0,\n itemsBelow: 0,\n };\n }\n\n // Center the selected item in the visible window\n const halfVisible = Math.floor(maxVisible / 2);\n let start = Math.max(0, selectedIndex - halfVisible);\n\n // Ensure we don't go past the end\n if (start + maxVisible > totalItems) {\n start = totalItems - maxVisible;\n }\n\n const end = start + maxVisible;\n\n return {\n start,\n end,\n itemsAbove: start,\n itemsBelow: totalItems - end,\n };\n}\n\n/**\n * Move selection up in a list\n * @param currentIndex - Current selected index\n * @param minIndex - Minimum allowed index (default: 0)\n * @returns New index after moving up\n */\nexport function moveUp(currentIndex: number, minIndex = 0): number {\n return Math.max(minIndex, currentIndex - 1);\n}\n\n/**\n * Move selection down in a list\n * @param currentIndex - Current selected index\n * @param maxIndex - Maximum allowed index\n * @returns New index after moving down\n */\nexport function moveDown(currentIndex: number, maxIndex: number): number {\n return Math.min(maxIndex, currentIndex + 1);\n}\n\n/**\n * Clamp an index within valid bounds\n * @param index - Index to clamp\n * @param listLength - Length of the list\n * @returns Clamped index\n */\nexport function clampIndex(index: number, listLength: number): number {\n if (listLength === 0) return 0;\n return Math.max(0, Math.min(index, listLength - 1));\n}\n\n/**\n * Calculate max visible items based on available rows\n * @param availableRows - Total available rows\n * @param reservedRows - Rows reserved for headers, footers, etc.\n * @param minVisible - Minimum visible items (default: 5)\n * @returns Maximum visible items\n */\nexport function calculateMaxVisible(\n availableRows: number,\n reservedRows: number,\n minVisible = 5\n): number {\n return Math.max(minVisible, availableRows - reservedRows);\n}\n","/**\n * AgentGrid Component\n * Displays monochromatic agent logos in a grid layout\n */\nimport { AGENT_LOGOS, type AgentLogo } from '../theme/symbols.js';\nimport { terminalColors } from '../theme/colors.js';\n\ninterface AgentGridProps {\n /** Maximum number of agents to display */\n maxVisible?: number;\n /** Show status indicators for detected agents */\n showStatus?: boolean;\n /** Agent types that are detected/active */\n detectedAgents?: string[];\n /** Number of columns in the grid */\n columns?: number;\n}\n\nexport function AgentGrid({\n maxVisible = 12,\n showStatus = true,\n detectedAgents = [],\n columns = 4,\n}: AgentGridProps) {\n const safeColumns = Math.max(1, columns);\n const allAgents = Object.entries(AGENT_LOGOS);\n const visibleAgents = allAgents.slice(0, maxVisible);\n const hiddenCount = allAgents.length - maxVisible;\n\n const rows: [string, AgentLogo][][] = [];\n for (let i = 0; i < visibleAgents.length; i += safeColumns) {\n rows.push(visibleAgents.slice(i, i + safeColumns));\n }\n\n return (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}>\n <b>Works with</b>\n </text>\n <text> </text>\n {rows.map((row, rowIndex) => (\n <box key={`row-${rowIndex}`} flexDirection=\"row\">\n {row.map(([agentType, agent]) => {\n const isDetected = detectedAgents.includes(agentType);\n const statusIcon = showStatus ? (isDetected ? '●' : '○') : '';\n const fg = isDetected ? terminalColors.accent : terminalColors.text;\n\n return (\n <box key={agentType} width={18}>\n <text fg={fg}>\n {agent.icon} {agent.name}\n {showStatus && (\n <span fg={isDetected ? terminalColors.success : terminalColors.textMuted}>\n {' '}{statusIcon}\n </span>\n )}\n </text>\n </box>\n );\n })}\n </box>\n ))}\n {hiddenCount > 0 && (\n <text fg={terminalColors.textMuted}>+{hiddenCount} more agents</text>\n )}\n </box>\n );\n}\n","/**\n * StatsCard Component\n * OpenSync-style stats display with optional animations\n */\nimport { useState, useEffect } from 'react';\nimport { terminalColors } from '../theme/colors.js';\nimport { animations } from '../theme/animations.js';\n\ninterface StatItem {\n label: string;\n value: number;\n color?: keyof typeof terminalColors;\n}\n\ninterface StatsCardProps {\n items: StatItem[];\n animated?: boolean;\n}\n\nexport function StatsCard({ items, animated = true }: StatsCardProps) {\n const [displayValues, setDisplayValues] = useState<number[]>(() =>\n animated ? items.map(() => 0) : items.map((item) => item.value)\n );\n const [animComplete, setAnimComplete] = useState(!animated);\n const [prevItemsLength, setPrevItemsLength] = useState(items.length);\n\n useEffect(() => {\n if (items.length !== prevItemsLength) {\n setPrevItemsLength(items.length);\n setDisplayValues(animated ? items.map(() => 0) : items.map((item) => item.value));\n setAnimComplete(!animated);\n }\n }, [items, prevItemsLength, animated]);\n\n useEffect(() => {\n if (!animated || animComplete) return;\n\n const duration = animations.countUp.duration;\n const startTime = Date.now();\n const targetValues = items.map((item) => item.value);\n const frameInterval = 16;\n\n const intervalId = setInterval(() => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = 1 - Math.pow(1 - progress, 4);\n\n const newValues = targetValues.map((target) =>\n Math.round(target * eased)\n );\n\n setDisplayValues(newValues);\n\n if (progress >= 1) {\n clearInterval(intervalId);\n setAnimComplete(true);\n }\n }, frameInterval);\n\n return () => clearInterval(intervalId);\n }, [animated, animComplete, items]);\n\n return (\n <box flexDirection=\"row\" gap={2}>\n {items.map((item, index) => {\n const fg = item.color\n ? terminalColors[item.color]\n : terminalColors.text;\n\n return (\n <box\n key={item.label}\n flexDirection=\"column\"\n alignItems=\"center\"\n padding={2}\n borderStyle=\"single\"\n borderColor={terminalColors.border}\n >\n <text fg={fg}>\n <b>{String(displayValues[index])}</b>\n </text>\n <text fg={terminalColors.textMuted}>{item.label}</text>\n </box>\n );\n })}\n </box>\n );\n}\n","/**\n * StatusBar Component\n * Bottom status bar with keyboard shortcuts\n */\nimport { terminalColors } from '../theme/colors.js';\nimport { STATUS_BAR_SHORTCUTS } from '../state/types.js';\n\ninterface StatusBarProps {\n message?: string;\n messageType?: 'info' | 'success' | 'error' | 'warning';\n shortcuts?: string;\n}\n\nexport function StatusBar({\n message,\n messageType = 'info',\n shortcuts = STATUS_BAR_SHORTCUTS,\n}: StatusBarProps) {\n const messageColors = {\n info: terminalColors.info,\n success: terminalColors.success,\n error: terminalColors.error,\n warning: terminalColors.warning,\n };\n\n return (\n <box flexDirection=\"column\">\n <text fg={terminalColors.textMuted}>\n {'\\u2500'.repeat(70)}\n </text>\n {message ? (\n <text fg={messageColors[messageType]}>{message}</text>\n ) : (\n <text fg={terminalColors.textMuted}>{shortcuts}</text>\n )}\n </box>\n );\n}\n","/**\n * SkillList Component\n * Paginated list of skills with selection\n */\nimport { terminalColors } from '../theme/colors.js';\nimport { symbols } from '../theme/symbols.js';\nimport { calculatePagination, type PaginationResult } from '../utils/list.js';\nimport type { SkillItem } from '../state/types.js';\n\ninterface SkillListProps {\n skills: SkillItem[];\n selectedIndex: number;\n maxVisible?: number;\n onSelect?: (skill: SkillItem) => void;\n}\n\nexport function SkillList({\n skills,\n selectedIndex,\n maxVisible = 10,\n onSelect,\n}: SkillListProps) {\n if (skills.length === 0) {\n return (\n <text fg={terminalColors.textMuted}>No skills found</text>\n );\n }\n\n const pagination = calculatePagination(skills.length, selectedIndex, maxVisible);\n const visibleSkills = skills.slice(pagination.start, pagination.end);\n\n return (\n <box flexDirection=\"column\">\n {/* Items above indicator */}\n {pagination.itemsAbove > 0 && (\n <text fg={terminalColors.textMuted}>\n {symbols.arrowUp} {pagination.itemsAbove} more above\n </text>\n )}\n\n {/* Skill list */}\n {visibleSkills.map((skill, idx) => {\n const actualIndex = pagination.start + idx;\n const isSelected = actualIndex === selectedIndex;\n const pointer = isSelected ? symbols.pointer : symbols.pointerInactive;\n const fg = isSelected ? terminalColors.accent : terminalColors.text;\n const statusIcon = skill.enabled ? symbols.active : symbols.pending;\n const descPart = skill.description\n ? ` - ${skill.description.slice(0, 40)}${skill.description.length > 40 ? '...' : ''}`\n : '';\n // Use single text element to avoid rendering overlap\n const line = `${pointer} ${skill.name} ${statusIcon}${descPart}`;\n\n return (\n <text key={skill.name} fg={fg}>\n {isSelected ? <b>{line}</b> : line}\n </text>\n );\n })}\n\n {/* Items below indicator */}\n {pagination.itemsBelow > 0 && (\n <text fg={terminalColors.textMuted}>\n {symbols.arrowDown} {pagination.itemsBelow} more below\n </text>\n )}\n </box>\n );\n}\n","/**\n * SearchInput Component\n * Rounded search input with icon\n */\nimport { terminalColors } from '../theme/colors.js';\n\ninterface SearchInputProps {\n value: string;\n placeholder?: string;\n focused?: boolean;\n onChange?: (value: string) => void;\n}\n\nexport function SearchInput({\n value,\n placeholder = 'Search...',\n focused = false,\n}: SearchInputProps) {\n const display = value || placeholder;\n const textColor = value ? terminalColors.text : terminalColors.textMuted;\n\n return (\n <box flexDirection=\"row\" marginBottom={1}>\n <text fg={terminalColors.textMuted}>&#x2315; </text>\n <text fg={textColor}>{display}</text>\n {focused && <text fg={terminalColors.accent}>&#x258F;</text>}\n </box>\n );\n}\n","/**\n * FeatureList Component\n * Colored feature keywords with descriptions\n */\nimport { terminalColors } from '../theme/colors.js';\n\ninterface Feature {\n key: string;\n label: string;\n description: string;\n color: keyof typeof terminalColors;\n}\n\nconst FEATURES: Feature[] = [\n { key: 'sync', label: 'Sync', color: 'sync', description: 'share skills across all your coding agents' },\n { key: 'browse', label: 'Browse', color: 'browse', description: 'discover skills from the marketplace' },\n { key: 'recommend', label: 'Recommend', color: 'recommend', description: 'AI-powered skill suggestions for your project' },\n { key: 'translate', label: 'Translate', color: 'translate', description: 'convert skills between agent formats' },\n { key: 'workflow', label: 'Workflow', color: 'workflow', description: 'automate skill execution chains' },\n { key: 'team', label: 'Team', color: 'team', description: 'collaborate with your development team' },\n];\n\ninterface FeatureListProps {\n features?: Feature[];\n}\n\nexport function FeatureList({ features = FEATURES }: FeatureListProps) {\n return (\n <box flexDirection=\"column\">\n <text fg={terminalColors.text}><b>Features</b></text>\n <text> </text>\n {features.map((feat) => (\n <box key={feat.key} flexDirection=\"row\">\n <text fg={terminalColors[feat.color]}>\n <b>{' '}{feat.label.padEnd(12)}</b>\n </text>\n <text fg={terminalColors.textMuted}>{feat.description}</text>\n </box>\n ))}\n </box>\n );\n}\n\nexport { FEATURES, type Feature };\n"],"mappings":"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","names":["useState","useCallback","useEffect","useKeyboard","Fragment","jsx","jsxs","useState","useEffect","useMemo","loadConfig","getAdapter","loadConfig","readFileSync","rmSync","join","loadConfig","join","readFileSync","rmSync","jsx","jsxs","useState","useEffect","useMemo","useState","useEffect","useMemo","useCallback","jsx","jsxs","useState","useEffect","useMemo","useCallback","useState","useEffect","useMemo","useCallback","useKeyboard","Fragment","jsx","jsxs","SPINNER","useState","useEffect","useMemo","useCallback","useKeyboard","useState","useEffect","useMemo","useCallback","useKeyboard","jsx","jsxs","useState","useEffect","useMemo","useCallback","useKeyboard","useState","useEffect","useMemo","useCallback","useKeyboard","jsx","jsxs","SPINNER","useState","useEffect","useMemo","useCallback","useKeyboard","useState","jsx","jsxs","jsx","jsxs","useState","useState","useEffect","useState","useEffect","jsx","jsxs","useState","useEffect","jsx","jsxs","useState","useEffect","useState","useEffect","useMemo","useCallback","useKeyboard","jsx","jsxs","SPINNER","useState","useEffect","useMemo","useCallback","useKeyboard","jsx","jsxs","useState","useEffect","useMemo","useCallback","useKeyboard","jsx","jsxs","useState","useEffect","useCallback","useKeyboard","useMemo","useState","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","jsx","jsxs","useState","useEffect","useMemo","useCallback","useKeyboard","jsx","jsxs","useState","useEffect","useCallback","useKeyboard","useMemo","useState","useEffect","useMemo","jsx","jsxs","useState","useEffect","useMemo","jsx","jsxs","useState","useEffect","useCallback","useKeyboard","jsx","jsxs","useState","useEffect","jsx","jsxs","useState","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","FEATURES","jsx"]}